These experiments were done by loading a 2K static RAM with data directly from RS-232 (without using a CPU, using an RS-232 receiver very similar to the Nixie project RS-232 receiver, with a 16 bit counter to select the memory address to write). Then letting the CPU rip once the memory was loaded, simply by letting /RESET go high. I made a simple output device using an 8-input NAND gate plus a 4049 inverter to decode an address, and store the result in a latch which lit up 8 LEDs.
I replaced the simple output device with the Z80 PIO. The PIO (parallel I/O) has two 8 bit ports plus handshaking lines for each, and understands IM2 (interrupt mode 2), the most powerful Z80 interrupt mode, and can provide an interrupt vector for incoming data, acknowledges etc. to the CPU. It also supports a 'daisy chain' interrupt priority system.
The code for a working system will start pulling together here. For now, I'll just put links to individual files, but as this grows it'll probably need to be a tarball or possibly via anon SVN.
Some conventions in the code:
The first machine, in line with all early machines having an ending -AC (i.e. UNIVAC, ENIAC etc.) is called ALIAC-1. Onto the code:
My Slashdot journal - where progress will be noted. I also talk about other things here, not just the electronics projects, so the first entry you hit might not be about the project!
All the code listings here were assembled using the SJASM Plus cross assembler. This is a platform independent assembler - I have it running on Mac OS X 10.4, Linux and OpenBSD/vax. It has lots of handy things like defines, lua scripting, macros and is (perhaps obviously!) based on SJASM. SJASM Plus is BSD licensed Free software.