Well, I seem to have lost the reply I made last night. Too late, I guess!
I would suggest getting the pulse width of the clock (hi/lo times) and it's frequency. Also the rep rate of the read command (some 9 bytes), and the "dead time" between the string of bytes, and the end of the "frame". The time between bytes looks very close on eyeball inspection, but it would be good to nail it down. Then we can see how close you and I are to a "working" system.
You might also try to "zoom-in" and see what the data/cmd to clock-edge timing looks like. I've read several places (maybe they copy each other?) that data/cmd should change on the falling clock edge, but that didn't work for me.
I think you're on to something with the observation of the 43h and 42h commands alternating. I might try that.
I wonder if we should really be watching for ACK? I'd really like to get the DELAYS (other then 1us?) out of this code. They waste processor execution cycles! And in deterministic programs and RTOS, they're a no-no, as they BLOCK. One time initialization sequences on startup are probably OK.
I hooked up my pelican wireless to my playstation (original) and logic analyzer (just another propeller, amazingly!)
The signal was jumping all over the place, so I took 4 random print screens hoping to get a glimpse of what was going on. Things to note:
-the "get data" command is 0x43, NOT 0x42 for this controller
-F3 is the controller ID (it was in digital mode)
-some other weird things seem to be going on, not sure if it's just the frame refreshing or what, but the attn/sel line is pulled high, seemingly in the middle of a transmission
I will try to work on this more, possibly analyzing more frames, but it is pretty time consuming. I will see if I can write a program in assembly just to "listen" to the signals and output the precise data/cmd bytes as well as how frequently they appear. I will also try this out on a ps2 to see if it's different.
My guess right now is that the playstation alternates "get data" commands until a controller responds by pulling ACK low. Then, the console "knows" what type of controller it is and how to communicate with it.