I'm working on a project with two Propellers that need to communicate as fast as possible, via a single I/O pin. One Propeller is connected to the bus of a 6502
and another Propeller is going to be used to generate video.
I've seen the High Speed Propeller-to-Propeller modules by Beau Schwabe. They use unrolled loops to transmit bits at a speed of 1 bit per 2 instructions (8 clocks) because the transmitter needs two instructions per bit: one to rotate the data and one to MUX the bit onto a pin.
I've also seen (and written) code that transmits serial data even faster (one bit per 4 clocks) by setting up a timer in NCO mode, setting the FRQx register to zero (so it doesn't count) and shifting the data through PHSx. In NCO mode, PHSx is directly connected to an output pin so a single rotate instruction will shift to the next bit and put that bit on an output pin.
Now my questions:
1. As far as I know, to extract serial data from an input pin and make it parallel, you can only use e.g. a TEST mask, INA instruction followed by a ROL instruction. That's fine for the "1 bit per 2 instructions" transmitter but for the faster transmitter I'll have to run two cogs that each catch alternating bits from the input. Or does anyone know a faster way to deserialize bits with just one single instruction?
2. Second question: I think it's possible to shift data out even faster with video registers and WAITVID. Unfortunately I'm a little rusty on the video registers. Does anyone have any suggestions for code where this has already been done?
Thanks in advance!