The bus is held high (4.72 V) with what appears to be a weak pullup. Signals pass by at what looks like 1.667 KHz, which is a 600 uSec bit time.
Commands recorded:
| 1 | Off | 09 52 55 52 92 4F | 0000 1001 0101 0010 0101 0101 0101 0010 1001 0010 0100 |
| 2 | Off | 09 52 54 A9 49 27 | 0000 1001 0101 0010 0101 0100 1010 1001 0100 1001 0010 0 |
| 3 | Off | 09 52 52 A9 49 27 | 0000 1001 0101 0010 0101 0010 1010 1001 0100 1001 0010 0 |
This is a good start. I really didn't like that the three sequences, which by rights should only differ in their address, but are actually different lengths. Also, while the header looks the same, they look like completely different bit streams. Finally, I couldn't find their address in plain text anywhere within their sequences.
The first clue is that these bit sequences aren't really as different as they look. In fact, the tail half of the message lines up as well! The second two sequences just have an extra 0. So now I'm thinking code... Add to that that there are no 11 sequences anywhere and I'm sure they're encoding the data.
So here's the simplest solution: count the number of zeroes. One zero is the bit 0, two zeroes is the bit 1. There are no three bit sequences and the only four bit sequence could be a start bit sequence. Here's what the three code sequences become:
| 1 | Off | start 98 2F |
| 2 | Off | start 99 2F |
| 3 | Off | start 9A 2F |
This sequence looks much better! Nice 16 bit values with a clearly defined address. By the way, this is the sequence that appears when I turn the CD player off. Here's a few more commands with the same encoding scheme.
| 3 | |
| On - with CD in various positions: | |
| disk 123 | start 9A 2E -12.75 mS- start 9A 58 B1 -980 mS- 9A 58 B1 -10.8 mS- 9A 61 FE 00 |
| disk 124 | start 9A 2E -12.75 mS- start 9A 58 B2 -980 mS- 9A 58 B2 -10.8 mS- 9A 61 FE 00 |
| disk 125 | start 9A 2E -12.75 mS- start 9A 58 B3 -980 mS- 9A 58 B3 -10.8 mS- 9A 61 FE 00 |
| disk 106 | start 9A 2E -12.75 mS- start 9A 58 A0 -980 mS- 9A 58 A0 -10.8 mS- 9A 61 FE 00 |
| disk 1 | start 9A 2E -12.75 mS- start 9A 58 B2 -980 mS- 9A 58 B2 -10.8 mS- 9A 61 FE 00 |
| disk 1 | start 9A 2E -12.75 mS- start 9A 58 01 -980 mS- 9A 58 01 -10.8 mS- 9A 61 FE 00 |
| disk 101 | start 9A 2E -12.75 mS- start 9A 58 9B -980 mS- 9A 58 9B -10.8 mS- 9A 61 FE 00 |
| disk 100 | start 9A 2E -12.75 mS- start 9A 58 9A -980 mS- 9A 58 9A -10.8 mS- 9A 61 FE 00 |
| disk 99 | start 9A 2E -12.75 mS- start 9A 58 99 -980 mS- 9A 58 99 -10.8 mS- 9A 61 FE 00 |
| disk 31 | start 9A 2E -12.75 mS- start 9A 58 31 -980 mS- 9A 58 31 -10.8 mS- 9A 61 FE 00 |
| after a long pause while the CD spins up I receive | |
| start 9A 52 FE -11.68 mS- start 9A 08 | |
| moveto 2 (with shuttle + enter) | |
| disk 2 | start 9A 54 02 -12.75 mS- start 9A 06 |
| Play | |
| disk 1 track 1 2:53 | start 9A 00 -1.7 S- start 9A 50 01 01 02 53 |
| disk 1 track 2 2:08 | start 9A 00 -2.28 S- start 9A 50 01 01 02 11 |
| disk 99 track 13 1:21 | start 9A 00 -2.28 S- start 9A 50 99 13 01 25 |
| Last track of a disk | |
| disk 99 next = 100 | start 9A 54 9A -10.8 mS- start 9A 06 |
| first "program" keypress /td> | |
| disk 100 | start 9A 70 01 C2 00 9A 01 |
| first "enter" inside program /td> | |
| disk 100 | start 9A 70 01 C0 00 9A 01 |
| shuffle | |
| disk 28 | start 9A 52 28 -10.8 mS- 9A 08 -1.28 S- 9A 70 00 81 00 28 00 |
| CD player off | start 9A 2F | |
| CD player on | start 9A 2E | |
| CD position | start 9A 58 xx | xx = # < 100 ? BCD(#) : (# - 100) + 0x9A |
| CD position 2 | start 9A 52 xx | message after spinup during powerup sequence |
| Play | start 9A 00 | |
| track header | start 9A 50 dsk trk min sec | all using standard xx notation. |
| Stop | start 9A 01 | |
| Pause | start 9A 02 | |
| Shuffle | start 9A 08 | |
| Shuffle (one disk) | start 9A 70 00 81 00 dsk 00 | |
| Bad Command | start 9A 0F | |
| Still Going?? | Start 9A 0C | Seen while scanning past tracks.. but only occasionally |
| No CD | start 9A 53 dsk | |
| 00 | Play | ||
| 01 | Stop | ||
| 02 | Pause | ||
| 03 | Pause Cue | First time sets the CD player into pause, second starts the track. | |
| 04 thisdsk ?? | No response | ||
| 05 this-dsk | no response | ||
| 06 this-dsk | no response | ||
| 07 | Bad Command | ||
| 08 | One Track Forward | (must be in a play mode) | |
| 09 | One Track Back | (must be in a play mode) | |
| 0A-0D | Bad Command | ||
| 0E | ??? (returns 9A 71 00) | ||
| 0F | status? (returns 9A 70 01 C0 00 dsk trk) | ||
| 10,12 | scan forward | ||
| 11,13 | scan backward | ||
| 14-1D | Bad Command | ||
| 1F | Null? | ||
| 20 | Remote Mode (returns 9A 70 00 80 00 dsk trk) | Turns display off... | |
| 21 | Remote Off (returns 9A 70 00 C0 00 dsk trk) | Turns display back on... | |
| 22 | ??? (returns 9A 61 dsk 00) | ||
| 23-26 | Null? | ||
| 27-2D | Bad Command | ||
| 2E | Power On (returns 9A 58 dsk, 9A 58 dsk, 9A 61 FE 00) | ||
| 2F | Power Off (returns 9A 2F) | ||
| 30,31 | Null? | ||
| 32-43 | Bad Command | ||
| 44 dsk | disk information returns 60 dsk mintrk maxtrk min sec ?? | ||
| 45 dsk trk | ??? (returns 9A 15) | ||
| 45 dsk trk | track info of current disk - returns 62 dsk trk min sec | ||
| 45 dsk 00 | track info of current disk (currently playing track) - returns 62 dsk trk min sec | ||
| 36-4F | Bad Command | ||
| 50 dsk trk | Play dsk at trk. (returns info about track) | ||
| 51 dsk trk | Queue up dsk at trk. (returns info about track) | ||
| 52-5D | Bad Command | ||
| 5E byte | ???? (returns 9A 0E) | ||
| 5E this-dsk | ???? (returns nothing if you're on that disk)) | ||
| 5F this-dsk | ???? | ||
| 5F-FF | Bad Command | ||
Notes:
The off pattern appears to be repeated twice. But only occasionally.
CD positioning, at first glance appears to work like this: Between 1 and 99 the CD position is encoded as BCD. Disk 100 is 0x9A. All disk numbers between 100 and 200 are then calculated from (0x9A + (CDnum - 100)).