LC8953
Mysterious Sanyo 68k programmable controller used in CD systems, also known as "PUPPET". Handles DMA, 68k interrupts and communication with the LC8951. Later replaced by the LC98000.
MPDMAC (DMA)
The datasheet describes a 16 instructions long microcode program which can be loaded to control DMA transfers. There is no public documentation of the instruction set and all open source emulators use HLE to simulate it. The datasheet specifies that comparison and conditional jumps are possible.
The programs are 18 bytes (16x 9 bit instructions) loaded by the system ROM for each type of transfer needed.
Loading programs
- Set $FF0061 to $00
- Write microcode from $FF0080 to $FF008E ?
- Set address/count registers as wanted
- Set $FF0061 to $40 to start transfer
The following can be used as a reference to reverse engineer the microcode instructions or to use the DMA hardware directly. These programs come from the top-loading CDM 4-x and CDZ system ROM as part of the system self-test.
Word fill
Same program on CDM 4-x and CDZ.
Parameters:
- $FF0064: 32bit destination
- $FF006C: 16bit word to fill with
- $FF0070: 32bit length in words
dc.w $FFDD,$FCF5,$92F6,$2602,$FDFF,$FFFF,$FCF5,$8AF0,$1609 111111111 1FF NOP/Wait ? 101110111 177 111100111 1E7 End if 0 ? 101011001 159 001011110 05E 110001001 189 100000001 101 011111101 0FD 111111111 1FF NOP/Wait ? 111111111 1FF NOP/Wait ? 111111111 1FF NOP/Wait ? 111001111 1CF 010110001 0B1 010111100 0BC 000001011 00B Store ? 000001001 009 Vertically: 111011110 1DE 110011100 19C 110111100 1BC 111011101 1DD 110011110 19E 110111101 1BD 101101011 16B 100011000 118 111011110 1DE 111011110 1DE 011011110 0DE 111011110 1DE 100011001 119 111011100 1DC 001111000 078 110011101 09D
Word copy
Parameters:
- $FF0064: 32bit source
- $FF0068: 32bit destination
- $FF0070: 32bit length in words
CDM 4-x
dc.w $FE6D,$FCF5,$82BF,$F693,$BF29,$02FD,$FFFF,$F97D,$FCF5 111111100 1FC 110110111 1B7 111100111 1E7 End if 0 ? 101011000 158 001010111 057 111111101 1FD 101001001 149 110111111 1BF 001010010 052 000001011 00B Store ? 111101111 1EF 111111111 1FF NOP/Wait ? 111111111 1FF NOP/Wait ? 001011111 05F 011111110 0FE 011110101 0F5
CDZ
dc.w $FE3D,$FCF5,$82BF,$93BF,$F629,$02FD,$FFFF,$F17D,$FCF5 111111100 1FC 011110111 0F7 111100111 1E7 End if 0 ? 101011000 158 001010111 057 111100100 1E4 111011111 1DF 111110110 1F6 001010010 052 000001011 00B Store ? 111101111 1EF 111111111 1FF NOP/Wait ? 111111110 1FE 001011111 05F 011111110 0FE 011110101 0F5
Address fill
Same program on CDM 4-x and CDZ.
Parameters:
- $FF0064: 32bit destination
- $FF0070: 32bit length in longwords
dc.w $FEF5,$FCF5,$92E8,$BE96,$F629,$02FD,$FFFF,$FC3D,$FCF5 111111101 1FD 111010111 1D7 111100111 1E7 End if 0 ? 101011001 159 001011101 05D 000101111 02F 101001011 14B 011110110 0F6 001010010 052 000001011 00B Store ? 111101111 1EF 111111111 1FF NOP/Wait ? 111111111 1FF NOP/Wait ? 100001111 10F 011111110 0FE 011110101 0F5
Byte copy
Used to copy data to 8bit memory, such as PCM RAM.
- Read word from source
- Swap word
- Write word to destination
- Swap word again
- Write word to destination + 2
- source += 2, destination += 4
- Repeat (length) times
Parameters:
- $FF0064: 32bit source
- $FF0068: 32bit destination
- $FF0070: 32bit length in words (as in pairs of bytes)
CDM 4-x
dc.w $F2DD,$FCF5,$82F6,$93DA,$BE93,$DABE,$2C02,$FDFF,$FFCD 111100101 1E5 101110111 177 111100111 1E7 End if 0 ? 101011000 158 001011110 05E 110100100 1A4 111101101 1ED 010111110 0BE 100100111 127 101101010 16A 111110001 1F1 011000000 0C0 001011111 05F 101111111 17F 111111111 1FF NOP/Wait ? 111001101 1CD
CDZ
dc.w $E2DD,$FCF5,$82BE,$93DA,$BE93,$DABE,$F62D,$02FD,$FFFF 111000101 1C5 101110111 177 111100111 1E7 End if 0 ? 101011000 158 001010111 057 110100100 1A4 111101101 1ED 010111110 0BE 100100111 127 101101010 16A 111110111 1F7 101100010 162 110100000 1A0 010111111 0BF 011111111 0FF 111111111 1FF NOP/Wait ?
IRQs
The programmable interrupt controller is used to generate the new interrupts needed by the CD systems. DMA is used to copy each CD sector into work RAM and an interrupt is generated to signal the end of the transfer. This is emulated at least by MESS.
Datasheet
Incomplete datasheet with pinout: [[1]] Both publicly available datasheets for the LC8953 and LC98000 ICs are incomplete and US Sanyo representatives aren't aware of the existence of more detailed documents.