Index


Technical notes.

Request Disc Header

Direction: Out
Request: 80
Data Length: 13
Data: 00 18 06 02 20 18 02 00 00 30 00 0a 00 ff 00 00 00 00 00

Direction: Out
Request: 01
Data Length: 04
Data: buffer of length 4

Upon completion buffer is filled in for you as 01 81 hh 00 where hh is the length of the buffer needed to hold the Disc Header (plus protocol information)

Request: 81
Data Lenth: hh from above
Data: buffer of length hh

Upon completion the buffer holds hh bytes of data. The first 19h bytes are protocol information, you are interested in the remaining data.


Request Track Title

Direction: Out
Request: 80
Data Length: 13
Data: 00 18 06 02 20 18 01 00 HH 30 00 0a 00 ff 00 00 00 00 00

HH is the track number.

Direction: Out
Request: 01
Data Length: 04
Data: buffer of length 4

Upon completion buffer is filled in for you as 01 81 hh 00 where hh is the length of the buffer needed to hold the Track Title (plus protocol information)

Request: 81
Data Lenth: hh from above
Data: buffer of length hh

Upon completion the buffer holds hh bytes of data. The first 19h bytes are protocol information, you are interested in the remaining data.


Set Disc Header

Direction: Out
Request: 80
Data Length: 13
Data: 00 18 07 02 20 18 01 00 00 30 00 0a 00 50 00 00
HH 00 00 00 JJ (Header)

Where HH is the length of the Header, JJ is the length the header used to be, and (Header) is the full complete Header List
See Header for information on how the Disc Header is structured.


Set Track Title

Direction: Out
Request: 80
Data Length: 13
Data: 00 18 07 02 20 18 02 00 00 30 00 0a 00 50 00 00
HH 00 00 00 HH (Title)

Where HH is the length of the Title and (Title) is the Track Title, remember that LP: is not inserted for you.


Move Track

Direction: Out
Request: 80
Data Length: 13
Data: 00 18 43 ff 00 00 20 10 HH 00 04 20 10 01 00 JJ

Where HH is the track number to move and JJ is the track number to make it.


Get Track Time

Request: 80
Data Length: 13
Data: 00 18 06 02 20 10 01 00 TT 30 00 01 00 ff 00 00 00 00 00

TT is the track number.

Request: 01
Data Length: 04
Data: buffer of length 4

Upon completion buffer is filled in for you as 01 81 hh 00 where hh is the length of the buffer needed to hold the Disc Header (plus protocol information)

Request: 81
Data Lenth: hh from above
Data: buffer of length hh

Upon completion the buffer holds hh (seems to be 1f every time since its the same data per track) bytes of data. The last 3 bytes are Binary Coded Decimal representations of the track times.

#define BCD_TO_PROPER(x) (((((x) & 0xf0) >> 4) * 10) + ((x) & 0x0f))

This is a C macro which will return the proper decimal for use.


Get Track Codec

Request: 80
Data Length: 13
Data: 00 18 06 01 20 10 01 00 tt ff 00 00 01 00 08
tt is the track number.

Request: 01
Data Length: 04
Data: buffer of length 4

Upon completion buffer is filled in for you as 01 81 hh 00 where hh is the length of the buffer needed to hold reply

Request: 81
Data Lenth: hh from above
Data: buffer of length hh

Upon completion the buffer holds hh (seems to be 1f every time since its the same data per track) bytes of data. The last byte holds a hex value representing the bitrate

Known Values

  1. 00 - ATRAC
  2. 03 - ATRAC3


Get Track Bitrate

Request: 80
Data Length: 13
Data: 00 18 06 02 20 10 01 00 tt 30 80 07 00 ff 00 00 00 00 00
tt is the track number.

Request: 01
Data Length: 04
Data: buffer of length 4

Upon completion buffer is filled in for you as 01 81 hh 00 where hh is the length of the buffer needed to hold reply

Request: 81
Data Lenth: hh from above
Data: buffer of length hh

Upon completion the buffer holds hh (seems to be 1f every time since its the same data per track) bytes of data. The second to last byte holds a hex value representing the bitrate

Known Values

  1. 90 - Stereo
  2. 92 - LP2


Header layout

The way Sony implemented groups is interesting, its a text string stored with the disc name.

So if you had a MD with the Title GroovyMix and 2 groups Thumpen and Bumpen it could look like this:
0;GroovyMix//1-5;Thumpen//6-8;Bumpen// Where 1-5 and 6-8 are the NON zero based track numbers that the group contains. I ephasize non because the protocol refers to all track numbers in a zero based manner, making information tracking interesting