LC89515

Sanyo CD-ROM host and error correction chip, also known as RCHIP. Used to load files in CD systems. It uses a 64KiB RAM buffer (2 32KiB RAM chips), which is able to store up to 27 CD-ROM sectors.
DMA copy speed from buffer to DRAMs can go up to 2.3MiB/s (16.9344MHz / 7 ?)
The NeoGeo CD does not use the C2 pointer error correction.
The NeoGeo CDZ uses the LC89513.
Datasheet
Complete datasheet: [[1]]
Pinout
Registers
Registers access is done through $FF0101 and $FF0103.
Read and writes auto-increments the register address except from register #0. After register #15, the address loops back to #0.
| Read | Write | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| # | Name | Definition | Name | Definition | ||||||||||||||||||||||||||||||||||||
| 0 | COMIN | Command FIFO input (unused in NeoGeo CD ?) | SBOUT | Status byte output (unused in NeoGeo CD ?) | ||||||||||||||||||||||||||||||||||||
| 1 | IFSTAT |
|
IFCTRL |
| ||||||||||||||||||||||||||||||||||||
| 2 | DBCL | Data byte counter 8 LSBs | ||||||||||||||||||||||||||||||||||||||
| 3 | DBCH |
|
DBCH |
| ||||||||||||||||||||||||||||||||||||
| 4 | HEAD0 |
|
DACL | Data start address 8 LSBs | ||||||||||||||||||||||||||||||||||||
| 5 | HEAD1 |
|
DACH | Data start address 8 MSBs | ||||||||||||||||||||||||||||||||||||
| 6 | HEAD2 |
|
DTTRG | Any write triggers a transfer start | ||||||||||||||||||||||||||||||||||||
| 7 | HEAD3 |
|
DTACK | Any write acknowledges the transfer interrupt | ||||||||||||||||||||||||||||||||||||
| 8 | PTL | Last decoded sector address 8 LSBs | WAL | Pointer to start of data to be loaded 8 LSBs | ||||||||||||||||||||||||||||||||||||
| 9 | PTH | Last decoded sector address 8 MSBs | WAH | Pointer to start of data to be loaded 8 MSBs | ||||||||||||||||||||||||||||||||||||
| 10 | WAL | Pointer to start of data to be loaded 8 LSBs | CTRL0 |
| ||||||||||||||||||||||||||||||||||||
| 11 | WAH | Pointer to start of data to be loaded 8 MSBs | CTRL1 |
| ||||||||||||||||||||||||||||||||||||
| 12 | STAT0 |
|
PTL | Pointer to start of data to be decoded 8 MSBs | ||||||||||||||||||||||||||||||||||||
| 13 | STAT1 |
Error flags for HEAD0~HEAD3 |
PTH | Pointer to start of data to be decoded 8 LSBs | ||||||||||||||||||||||||||||||||||||
| 14 | STAT2 |
|
Unused | |||||||||||||||||||||||||||||||||||||
| 15 | STAT3 |
|
RESET | |||||||||||||||||||||||||||||||||||||
Notes
If CD command FIFO is not empty, status FIFO[1] = 15 (busy ?).
- Command 0: Nop ?
- Command 1:
CDEmuStop(); NeoCDAssyStatus = 0x0E;
- Command 2:
status FIFO[1]=command FIFO[3]
- 0: Read Q subcode first 6 digits
Data in FIFO[2~7] & FIFO[8]
- 1: Read Q subcode next 6 digits
Data in FIFO[2~7] & FIFO[8]
- 2: Read Q subcode last 2 digits
Data in FIFO[2~3] & FIFO[8]
- 3: Read subcode TOC -2?
Data in FIFO[2~7]
- 4: Read subcode TOC -1?
Data in FIFO[2~5]
- 5: Read TOC from track in FIFO[4~5]
Data in FIFO[2~7] & FIFO[8]
// bit 3 of the 1st minutes digit indicates a data track
if (TOCEntry[3] & 4) {
NeoCDCommsStatusFIFO[6] |= 8;
}
- 6: Read Q subcode status ?
Data in FIFO[8] only
- 7: Clear FIFO ?
FIFO[3] = 5
- 3: Switch mode according to reg. #10 bit 2
MSF set in FIFO[2~3]. Starts reading disc.
- 4: Pasue
- 5:
NeoCDAssyStatus = 4; bNeoCDLoadSector = false;
- 7:
NeoCDAssyStatus = 1; bNeoCDLoadSector = true;
