My thought on I2C bit banging is similar to why I've decided to bitbang the asynchronous serial transmit at 115200: at high serial speed, Z80's interrupt overhead makes serving serial port with interrupt inefficient, so it is better just poll the serial flags; but if the CPU is spinning on the flag waiting, it might as well rolling up its sleeve and do the actual work of banging out data one bit at a time.
This is a good opportunity of thinking about various ways of bit bang (or nibble-bang) I2C. If CPLD is low on logic, I can hook up A0 to input of SCL flipflop instead of D0 so even I/O address (SCL0) drives SCL low and odd I/O address (SCL1) drives SCL high. This way, this 4-instruction loop will bang out a bit of data:
out (SCL0),a ;output d7 on SDA while SCL low
out (SCL1),a ;output d7 on SDA while SCL high
out (SCL0),a ;SCL return to low
rla ;next bit
... do this 7 more times
At 7.37MHz this routine bitbang data out about 200Kbit/S
If CPLD has more logic resources, then a self-clocking SCL can speed up the bitbang routine: writing to a self-clocking I/O address causes a counter to count up so at count 4 (0.5uS) SCL goes high and at count 15 (2uS) SCL returns to low. This way the software only needs to write data to the self-clocking address, shift data left, and repeat. This is capable of 400Kbit/S.
Good thing about designing with CPLD is I can put off the specific hardware implementation and move forward to PC board layout. I'm going to start a new thread regarding the PC board layout because I'm planning on something completely different...
Teaser: the title of the new thread is "Universal I/O board for RC2014"
Bill