Z80 computer LED display

The Z80 computer now has its name in lights! (See video; I apologize in advance for the horrible low resolution and mp4 artifacts.)

Dr. Rosen and I got approval to buy an Alpha 215R single-line LED display as a demo for the Z80 computer. While it was on the way, I built a second peripheral for the Z80: a specialized RS232 port that accepts strings and reformats them for output to the LED display. (It’s an interesting challenge to build a peripheral based solely on information from a datasheet, without having the actual device available.)

When I finally got to work with the display on Thursday, the interface actually worked — but various electrical gremlins were causing all sorts of problems, when the Z80, interface, control panel, and sign were all connected. The problems eventually turned out to be mostly due to insufficient voltage — as it turns out, 5.5V (rather hot for TTL circuits) at the power supply ends up being a nice, clean 5.0V to 5.1V at the Z80. Those 40-pin ribbon cables keep finding new ways in which to be a Dumb Idea(tm)…

At any rate, it started running very reliably Friday afternoon. The bad news was that this meant that it was time to start programming it. Writing Z80 code to do a demonstration script isn’t too bad; a bit tedious to enter the strings, but still fun.

Toggling some 200 bytes of machine code in, byte by byte, however, is mind-numbingly boring — even if (like me) you actually enjoy programming in assembler. (Note to self: there has GOT to be some source for knobs for those rotary switches SOMEWHERE!)

The script is running, though. Hopefully it will prove inspiring to the EET325 students. (How many college courses out there lead you through building your own computer, chip by chip and wire by wire?)

Posted in Digital, DrACo/Z80, Drexel, EET325 | Leave a comment

Much Ado About Nothing

Sometimes, nothing is exactly what you need. A specific amount of nothing, to be precise.

Here is a delay library, written in assembly, for PIC microcontrollers running at 8MHZ. If you find it useful, please let me know. Share and enjoy!

8MHz delay library

Posted in Coding, Digital, PIC Microcontrollers | Leave a comment

It works! (again)

Bill (Dr. Rosen’s independent-study student) stopped by the lab today to work on his Z80 computer. After tracking down a few bugs, we got it working! I loaded the Fibonacci test program into it, and saw it execute the JMP 0x0003 command, verifying that it is correctly executing code.

Good job, Bill (and thanks for helping us test the design for the course)!

Posted in Digital, DrACo/Z80, Drexel, EET325 | Leave a comment

First peripheral

The first peripheral for the Z80 is working (although still somewhat alpha at this point): a two-line LCD text display. It’s mapped as I/O ports 0x00 and 0x01, with control commands being sent to 0x00 and data to 0x01.

It’s been tested with a “Hello, World!” program written in Z80 assembler. (The current version of the program is very inefficient; the ideal way to handle it would be to write the “Hello, World!” data into memory and then clock it out to the I/O port automatically (I believe the Z80 can do this in a single instruction, once the registers are set up.)

Here is the “Hello, World!” assembly code. The C register is loaded with 0x01, then the A register is loaded with the ASCII code for each character, which is output to the port.

In related news, I think I’ve found how to turn off all the peripherals on the PIC16F887. It’s a good replacement for the ‘877A — with an internal 8MHz clock, plus a complete 8-bit PORTA — but it does seem to power up with a lot of extraneous analog options turned on. The MPU for the text display is an ‘887.

Edit: Here is an updated version of the “Hello, World!” app — using a single OTIR (Output/Incrementing/Repeat) instruction to do the dirty work, once the registers are all updated. Apparently it works by not incrementing the program counter, so the same instruction is executed over and over until B counts down to zero. Whatever the mechanism, it works as advertised, and the program now takes up only 27 instead of 60 bytes of memory!

Posted in Coding, Digital, DrACo/Z80, Drexel, EET325 | 1 Comment