This is a recent version of a circuit I have been using since before 1980, when the Z80 chip cost about 14 bucks. This circuit is all CMOS and draws very little power.
I/O ports are easy, and can be polled in software, or interrupt triggered by the CTC. Note that the decoding is in groups of four to allow use of address 00h,01h,for the CTC. With a simple eprom emulator on a parallel port, you can assemble code on a PC and upload instantly.
Some machines that use variations of this circuit: