LC8953

From NeoGeo Development Wiki
Jump to: navigation, search
Sanyo LC8953 68k peripherial controller chip found on a Pcb.pngNEO-CDM3-2 board.

Mysterious Sanyo 68000 programmable controller used in CD systems. Handles DMA to DRAM. Later replaced by the Chipicon.png 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 also 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

There is a programmable interrupt controller in this chip but it's not known if Chipicon.png NEO-MGA is used for this instead. 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.