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
(any trailing 1s are indistinguishable from background bits and are included for readability.)

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 2start 9A 54 02 -12.75 mS- start 9A 06
Play
disk 1 track 1 2:53start 9A 00 -1.7 S- start 9A 50 01 01 02 53
disk 1 track 2 2:08start 9A 00 -2.28 S- start 9A 50 01 01 02 11
disk 99 track 13 1:21start 9A 00 -2.28 S- start 9A 50 99 13 01 25
Last track of a disk
disk 99 next = 100start 9A 54 9A -10.8 mS- start 9A 06
first "program" keypress /td>
disk 100start 9A 70 01 C2 00 9A 01
first "enter" inside program /td>
disk 100start 9A 70 01 C0 00 9A 01
shuffle
disk 28start 9A 52 28 -10.8 mS- 9A 08 -1.28 S- 9A 70 00 81 00 28 00


known messages

all messages for address 3

CD player offstart 9A 2F
CD player onstart 9A 2E
CD positionstart 9A 58 xxxx = # < 100 ? BCD(#) : (# - 100) + 0x9A
CD position 2start 9A 52 xxmessage after spinup during powerup sequence
Playstart 9A 00
track headerstart 9A 50 dsk trk min secall using standard xx notation.
Stopstart 9A 01
Pausestart 9A 02
Shufflestart 9A 08
Shuffle (one disk)start 9A 70 00 81 00 dsk 00
Bad Commandstart 9A 0F
Still Going??Start 9A 0CSeen while scanning past tracks.. but only occasionally
No CDstart 9A 53 dsk


00Play
01Stop
02Pause
03Pause CueFirst time sets the CD player into pause, second starts the track.
04 thisdsk ??No response
05 this-dskno response
06 this-dskno response
07Bad Command
08One Track Forward(must be in a play mode)
09One Track Back(must be in a play mode)
0A-0DBad Command
0E??? (returns 9A 71 00)
0Fstatus? (returns 9A 70 01 C0 00 dsk trk)
10,12scan forward
11,13scan backward
14-1DBad Command
1FNull?
20Remote Mode (returns 9A 70 00 80 00 dsk trk)Turns display off...
21Remote Off (returns 9A 70 00 C0 00 dsk trk)Turns display back on...
22??? (returns 9A 61 dsk 00)
23-26Null?
27-2DBad Command
2EPower On (returns 9A 58 dsk, 9A 58 dsk, 9A 61 FE 00)
2FPower Off (returns 9A 2F)
30,31Null?
32-43Bad Command
44 dskdisk information returns 60 dsk mintrk maxtrk min sec ??
45 dsk trk??? (returns 9A 15)
45 dsk trktrack info of current disk - returns 62 dsk trk min sec
45 dsk 00track info of current disk (currently playing track) - returns 62 dsk trk min sec
36-4FBad Command
50 dsk trkPlay dsk at trk. (returns info about track)
51 dsk trkQueue up dsk at trk. (returns info about track)
52-5DBad Command
5E byte???? (returns 9A 0E)
5E this-dsk???? (returns nothing if you're on that disk))
5F this-dsk????
5F-FFBad 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)).