I've managed to make at least a little progress on the Z80 every day, even thought that it isn't reflected here. For the sake of the project, all my notes (including TODOs, a log of what I've been learning, parts inventories, design notes, links, etc) is in a single org file in a repo with datasheets, schematics, firmware, etc. That doesn't translate to here, though, and publishing that org file as an HTML file (which I do, for my own use) is pretty ugly; I could make it look nice, but that's time I could be spending working on building a computer so it's not going to happen.
The major updates:
- I've tried quitting, but I'm still using Eagle. Every time I use KiCad, I last about 10 minutes before rage quitting and just going to Eagle. A large part of this is due to the fact that I'm pretty proficient at using Eagle, including adding parts where they don't exist.
- I've decided on a Eurocard format for I/O and mainboard; the power board is relatively simple and thus small. The two boards will still use an IDC40 interconnect, though. This arrangement lets me work around the limitations in Eagle that were holding me back.
- I found the MCP23008 and MCP23017 - they're 8- and 16-bit I2C I/O expanders, which will make life a lot easier, I think.
- I found a display module with a 5.7" 320x240 LCD. It has an LCD controller that I'll probably drive with an I/O expander.
- I came up with a first pass at an ATmega328-powered serial I/O module, but then decided to start designing something around the ATmega1284 to handle I/O in general.
- Instead of coming up with some crazy dual clock system to support single stepping, I realised I could just use an Arduino and a push button; I also switched to an oscillator to save space and avoid having to add the extra bulk of the crystal + resistors + 7400.
- There was a lot of physical layout prototyping, mostly by way of paper cutouts in the shapes of the dev boards and LCDs. I've discovered that my paper notebook that I'm tracking all of this in is pretty close to the perfect size: 25x19cm (9.8x7.5in). The biggest unknown right now is the keyboard (more on that later).
- I did a lot of thinking about the keyboard; I could build my own using a 16-bit I/O expander and an 8-bit I/O expander. While looking around on eBay for keyboard switches, I found a replacement IBM 5140 keyboard (original site) that I'm going to see if I can get to fit.
- I realised that the SD card is going to require a 3.3V power rail, so I added an appropriate regulator to the power supply. Right now, it's an LM1117, but I'm looking into whether I can get by with an MCP-1700 regulator. It's smaller, it should produce less heat, but it can only drive 250mA. I think this should be enough, considering I'm only using it for signalling, but I'd like to be sure.
- In the memory layout post, I mentioned that the outputs need to be buffered. I added in some 74545 line drivers for the address pins (a pair on the mainboard and a pair on the I/O board) and a 74245 bus transceiver for the data pins (again, on both boards); it looks like it works out such that tying the direction pin on the transceiver to the Z80's works as intended. I'm still waiting on parts to arrive, so I haven't been able to physically verify this.
- I finished a preliminary schematic (sheet 1 and sheet 2) and board layout for the main board; this has the Z80, associated clocking and reset hardware, and the memory. I've got a checklist of things to verify before I have it fabricated, as the boards will cost a decent chunk of money and I'd like to get it right before sending them off to be fabricated. This is also several orders of magnitude more complex than any board I've previously done, so I did the layout using the autorouter; eventually, I'd like to hand route it but that's going to take an incredible amount of time to do. I'm also not happy with the large number of vias; I can't do 4-layer boards in my EDA software, which would help (while doubling the cost of the board). I don't have experience designing a board this complex, so I don't really have a good intuition for how this will affect the system.
The project is coming along; I'll get some dev boards this week to verify specific subsystems and I'm going to keep working on designing the I/O board.
I also bought an RC2014 that should show up sometime this week.