As far as I can see it also doesn't require open-collector drive. So, direct drive all 5V inputs from 3.3V outputs, including /RESET. This eliminates the transceiver in the 3.3V->5V direction. Although this may seem offensive, and will cost a slight power draw, it is MUCH simpler.
More than happy to live with the extra current draw - the device is powered from USB or external power supply, so I don't have to worry about maximising the life of a battery supply (just yet).
The only thing I can see being a possible sticking point is that the ESP32 can also be used to provide the system clock to the Z80 and its peripherals. It uses two PWM GPIOs, one for the main system clock (which can be varied under software control) and the other for specific peripherals. I have a hard time deciphering some of the technical speak and charts in datasheets, but I'm guessing that the ESP32 won't be able to produce a suitable clock signal at 3.3v for the Z80? This will still need to go through some form of level translator?
I guess I could use a TXB0104 just for the clock outputs, as I'm using one of those for the SPI signal, but that leads me on to another thought - if the ESP32 can drive the Z80 at 3.3v acceptably, do I need to bother with voltage translations for the two I/O extenders? I've got two
MCP23S17s, powered at 5V as they interface directly with the data, control and address buses of the Z80, so they will be expecting 5V SPI signals...
Now as to the 5V->3.3V conversion. [...] The ideal way is with an octal buffer powered from 3.3V, which has 5V-tolerant inputs. What you want is a 74AHC541. See here:
https://assets.nexperia.com/documents/data-sheet/74AHC_AHCT541.pdf
Referring to page 5, it says that Vcc can be up to 5.5V, Vi can be up to 5.5V (indepently of Vcc) and Vo can be up to Vcc. Perfect!
Okay, cool. Does it have to be AHCT though? Would HCT suffice as I might actually have one or two HCT541's in my box of tricks? The Z80 is held WAITing while the ESP32 does its stuff, so what's a few nanoseconds between friends?
This is a cool project, I am learning a lot from doing this research
Haha, thanks! I've been working on the whole thing for about two years now, on and off. I'd get a website/blog set up if I thought anyone would be interested, detailing my journey from complete and utter electronics luddite with a burning interest in 80's computers (when I started with my first computer) to where I am now (an electronics idiot), but everyone else seems to have beaten me to it. Just about everything I now know about electronics and 8-bit computer design is thanks primarily to this forum and some fantastically helpful people here (and Grant Searle's website, which kicked the whole thing off for me).
Currently I have a working Z80-based computer that has a custom-written monitor ROM (learning Z80 assembly 30-40 years late, but it's fun!), runs CP/M 2.2 and 3.0 from CompactFlash, takes up to 4MB of memory, plays authentic 80's chiptunes via the AY-8910 PSG and with plans to IoT-enable it (with a web-based console) via the ESP32 and eventually develop a graphics card for it so I can run it as a completely standalone system.
Have a look here:
https://youtu.be/YjoUeCCG7Pc It's a small video I did back in the summer on a 3D model of the computer and simulation I put together to test it all out. Currently I only have the CPU, memory and serial cards in proper PCB form, the CF card is interfaced via a breadboard and the rest doesn't exist yet (though it did originally, all on one beast of a breadboard, but it was so unreliable I had to move to PCB-production as the prototype died one day and refused to work again!)
By the way, I am a Z80 guy, I have plenty of vintage Z80 chips and Z80 peripherals that I bought from Ebay to tinker with. I haven't done much with them but I did a lot with Z180s commercially. Recently I bought some 3.3V Z8L180s that will go up to 20 MHz (if I recall correctly), and I was thinking of making a 3.3V Z180 system driving a graphic LCD.
Well, maybe this will motivate you again?