CD drive control

From NeoGeo Development Wiki
Jump to navigation Jump to search

Communication between the CD Drive (CDD) and the CD Controller (CDC) is done via a special 4-bit protocol handled by the system ROM.

The NEO-MGA chip provides the I/Os through registers REG_CDDCTRL, REG_CDDINPUT, and REG_CDDOUTPUT.

  • The CDD regularly (~64Hz not 75) sends a low pulse on its /IRQ output to initiate a data exchange.
  • HOCK goes low, indicating that the CDC aknowledges the request. The 4-bit bus direction is set to CDD -> CDC.
  • CDCK goes low, indicating that the CDD is starting to send its status data (A).
  • HOCK goes high and the CDC reads the status data (A).
  • CDCK returns high.
  • HOCK returns low.
  • CDCK goes low again, the B word is ready.
  • The cycle continues on for 10 words...

(The delay here is not necessary, it is seen on the NeoGeo CD because of the system ROM preparing stuff).

  • HOCK goes low and the 4-bit bus direction is reversed (CDC -> CDD). The first command word is set (K).
  • CDCK goes low, indicating that the CDD has read the data (A).
  • HOCK returns high.
  • CDCK returns high.
  • HOCK goes low again, the K word is ready.
  • The cycle continues on for 10 words...

Status data (green)

  • A: Status
    • 0=Stop mode
    • 1=Playing data or music
    • 2=Seeking
    • 4=Paused
    • 5=Tray opened
    • 6=Comm. checksum error
    • 7=Command error
    • 8=Function error (mech/laser ?)
    • 9=Reading TOC
    • 10=Sled moving
    • 11=Couldn't focus, no disk
    • 12=Sled at edge, end of disk
    • 14=Tray moving
    • 15=In test mode
  • B: Status
  • C: Minutes high digit
  • D: Minutes low digit
  • E: Seconds high digit
  • F: Seconds low digit
  • G: Frames high digit
  • H: Frames low digit
  • I: Extension
  • J: Checksum (see below)

Command data (red)

  • K: Command
  • L~S: Depends on command (see below)
  • T: Checksum (see below)

Checksum

The checksum digit is the sum of all 9 previous digits, + 5, XOR 15, AND 15: ((sum + 5) ^ 0xF) & 0xF.

Commands

See CD drive commands.