For my Z80 breadboard computer, I'd like to make a direct TTL to USB interface and I would like to avoid using the Z80 peripheral chips but tinker my own more direct ways of doing things. I figure I would just use Z80 IN and OUT instructions and for input generate interrupts. Another time I would hook essentially the same setup to a 6502, where instead of IN and OUT instructions I would use memory mapping. That is why I prefer not to depend on the Z80 I/O chips.
The USB protocol is definitely too hard to build from discrete chips, but RS232 is really obsolete (i.e. my laptop doesn't have an RS232 port any more for decades), so I figure to implement a direct USB interface. I found the MCP2221 chip which comes in DIP package and has UART as well as an I2C pins.
Ideally it would have a parallel data input and output so I can hook it up to the data bus. Not wanting to use the 40 pin Z80 SIO with the 28 pin Z80 CTS, wanting something way more basic, I'd like to connect this USB chip directly to some sort of parallel shift register that could be used for either input or output and the 74LS198 comes to mind:
This can shift in either direction, getting serial input on one side, serial output on the other side, and parallel input and output. I have used an Arduino's SDA and SCL with a 74'595 before, that was easy, but only for USB to serial. I wonder would the MCP2221 allow me to supply my data and clock to SDA and SCL to send data to it? If not, then the bidirectional shift register would not be useful. Then the only way I can see is to use an UART chip, like the MAX3100:
Here I can see a DIN and DOUT with a SCLK so I could then use the shift register to get parallel to serial. But that would be an extra chip and then perhaps I better use the Z80 SIO without the CTC but just hardwired clock. But I feel having to go from USB to async serial to then sync serial to parallel a rather round-about way.
Is there no way to use this MCP2221 for bi-directional synchronous serial, so all I'd need is the shift register? Although there must be some other aspects still, such as, how do I control whether it is reading or writing? With the MAX3100 I see an /IRQ pin, which I suppose could generate an /IRQ to tell the CPU of incoming data.
Is there some other option to hook USB directly to an 8-bit parallel TTL device?