LC8953



Mysterious Sanyo 68k programmable controller used in CD systems, also known as "PUPPET". Handles DMA, 68k interrupts and communication with the LC89515. Later replaced by the.

=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: [] 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.