Memory mapped registers: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
m (Reverted edits by Furrtek (talk) to last revision by ElBarto)
m (Reverted accidental rollback)
Line 20: Line 20:
|$300001
|$300001
|REG_DIPSW
|REG_DIPSW
|Dipswitches (active low)
|[[Hardware DIPs]] (active low)
{{8BitRegister|Freeze|1|Freeplay|1|[[Multiplayer]] configuration|3|Controller mode (normal or mahjong)|1|Coin mode (normal or versus)|1|Test mode|1}}
{{8BitRegister|Freeze|1|Freeplay|1|Enable [[Multiplayer]] configuration|1|Communication identification code|2|0:Normal controller<br>1:Mahjong keyboard|1|0:One coin chute<br>1:Two coin chutes|1|Settings mode|1}}
|Kick watchdog
|Kick watchdog
|[[NEO-F0]] (read)
|[[NEO-F0]] (read)
Line 33: Line 33:
|$320000
|$320000
|REG_SOUND
|REG_SOUND
|[[68k/Z80 communication|Send command to Z80]]
|[[68k/Z80 communication|Read Z80 reply code]]
|Read Z80 reply code
|Send command to Z80
||[[NEO-D0]] ?
||[[NEO-D0]] ?
|-
|-
|$320001
|$320001
|REG_STATUS_A  
|REG_STATUS_A  
|{{8BitRegister|NEC D4990 data bit|1|NEC D4990 time pulse|1|?|3|Service|1|Coin 2|1|Coin 1|1}}
|Switch inputs are active low
{{8BitRegister|NEC D4990 data bit|1|NEC D4990 time pulse|1|Jumper "type", 1 on 1FZ|1|1 on 1FZ|2|Service|1|Coin 2|1|Coin 1|1}}
|?
|?
|?
|?
Line 52: Line 53:
|$380000
|$380000
|REG_STATUS_B
|REG_STATUS_B
|{{8BitRegister|?|1|[[Memory card]]<br>write protect|2|Memory card<br>inserted|1|Select P2|1|Start P2|1|Select P1|1|Start P1|1|}}
|Aux inputs (active low)
{{8BitRegister|0:AES<br>1:MVS|1|[[Memory card]]<br>write enable|2|Memory card<br>inserted|1|Select P2|1|Start P2|1|Select P1|1|Start P1|1|}}
|?
|?
|[[NEO-C1]]
|[[NEO-C1]]
Line 65: Line 67:
|-
|-
|$380011
|$380011
|REG_CRDBANK
|?
|?
|?
|{{8BitRegister| |5|Memory card bank selection|3}}
|Write only, after a write to $3A0019
|[[NEO-D0]]
|?
|-
|-
|$380021
|$380021
Line 76: Line 78:
|[[NEO-F0]]?
|[[NEO-F0]]?
|-
|-
|$380030(1?)
|$380031
|REG_LEDLATCHES
|?
|?
|?
|MAME set_output_latch {{8BitRegister|?|2|Latch LED2 data|1|Latch LED1 data|1|Latch EL panel data|1|?|3}}
|MAME set_output_latch (LED marquee ?)
Data is latched on falling edge (1 to 0 transition)
|[[NEO-F0]]?
|[[NEO-F0]]
|-
|-
|$380040(1?)
|$380041
|REG_LEDDATA
|?
|?
|?
|MAME set_output_data (for LEDs and EL panel)
|MAME set_output_data (LED marquee ?)
|[[NEO-F0]]
|[[NEO-F0]]?
|-
|-
|$380050(1?)
|$380051
|REG_RTCCTRL
|?
|?
|?
|MAME upd4990a_control_16_w ([[Calendar]]){{8BitRegister|?|5|D4990 Strobe ?|1|D4990 Clock ?|1|D4990 DIN ?|1|}}
|MAME upd4990a_control_16_w ([[Calendar]])
|[[NEO-F0]]?
|[[NEO-F0]]?
|-
|-
Line 97: Line 100:
|?
|?
|?
|?
|Base address for writes (used by the MVS BIOS)
|Base address for writes (used by the MVS BIOS, only bit 4) Coin counters reset ?
|?
|-
|$380063
|?
|?
|?
|Write only (used by the MVS BIOS) Coin counters reset ?
||[[NEO-I0]]
|-
|-
|$380065
|$380065
|?
|?
|?
|?
|Write only (used by the MVS BIOS)
|Write only (used by the MVS BIOS) Coin lockout ?
|?
|[[NEO-I0]]
|-
|-
|$380067
|$380067
|?
|?
|?
|?
|Write only (used by the MVS BIOS)
|Write only (used by the MVS BIOS) Coin lockout ?
|?
|?
|-
|-
Line 115: Line 124:
|?
|?
|?
|?
|Write only (used by the MVS BIOS)
|Write only (used by the MVS BIOS), similar to $380061
|?
|?
|}
|}
Line 127: Line 136:
|-
|-
|$3A0001
|$3A0001
|REG_DISPENABL
|REG_NOSHADOW
|Normal video output
|Normal video output
|-
|-
|$3A0011
|$3A0011
|REG_DISPDSABL
|REG_SHADOW
|[[Video DAC|Darken]] video output
|[[Video DAC|Darken]] video output
|-
|-
Line 159: Line 168:
|-
|-
|$3A0009
|$3A0009
|?
|REG_CRDREGSEL
|?
|Enable "Register select" for memory card
|-
|-
|$3A0019
|$3A0019
|?
|REG_CRDNORMAL
|?
|Disable "Register select" for memory card
|-
|-
|$3A000B
|$3A000B
Line 172: Line 181:
|$3A001B
|$3A001B
|REG_CRTFIX
|REG_CRTFIX
|Use the cart's [[S ROM]] and [[M ROM]]
|Use the cart's [[S ROM]] and [[M1 ROM]]
|-
|-
|$3A000D
|$3A000D
|REG_SRAMLOCK
|REG_SRAMLOCK
|Write-protects [[Battery-backed RAM|SRAM]] (MVS)
|Write-protects [[backup RAM]] (MVS)
|-
|-
|$3A001D
|$3A001D
|REG_SRAMULOCK
|REG_SRAMULOCK
|Unprotects SRAM (MVS)
|Unprotects backup RAM (MVS)
|-
|-
|$3A000F
|$3A000F
Line 192: Line 201:


==Video registers==
==Video registers==
Handled by the [[GPU]]s.
Handled by the [[GPU]]s. Only word access.
{| class="regdef"
{| class="regdef"
|'''Address'''
|'''Address'''
|'''Name'''
|'''Name'''
|'''Size'''
|'''Read'''
|'''Read'''
|'''Write'''
|'''Write'''
Line 202: Line 210:
|$3C0000
|$3C0000
|REG_VRAMADDR
|REG_VRAMADDR
|Word
|Read [[VRAM]] (address isn't changed)
|Read [[VRAM]] (address isn't changed)
|Sets VRAM address
|Sets VRAM address
Line 208: Line 215:
|$3C0002
|$3C0002
|REG_VRAMRW
|REG_VRAMRW
|Word
|Read VRAM (address isn't changed)
|Read VRAM (address isn't changed)
|Write VRAM
|Write VRAM
Line 214: Line 220:
|$3C0004
|$3C0004
|REG_VRAMMOD
|REG_VRAMMOD
|Word
|Reads VRAM address modulo
|Reads VRAM address modulo
|Sets VRAM address modulo (signed)
|Sets VRAM address modulo (signed)
|-
|-
|$3C0006
|$3C0006
|REG_HBLANKCNT
|REG_LSPCMODE
|Word
|{{16BitRegister|Raster line counter.<br>See [[Display timing]]|9|-|3|1:50Hz<br>0:60Hz ([[GPU|LSPC2]] only)|1|[[Auto animation]] counter|3}}
|{{16BitRegister|Raster line counter.<br>See [[Display timing]]|9|?|3|1:50Hz<br>0:60Hz|1|[[Auto animation]] counter|3}}
|{{16BitRegister|Auto animation speed<br>(in frames)|8|[[Timer interrupt]]<br>mode|3|Timer interrupt enable|1|Disable auto animation|1|?|3}}
|{{16BitRegister|Auto animation speed<br>(in frames)|8|Raster interrupt<br>mode|3|Raster interrupt<br>enable|1|Disable auto animation|1|?|3}}
|-
|-
|$3C0008
|$3C0008
|REG_HBLANKPOS
|REG_TIMERHIGH
|Word
|Invalid
|Invalid
|MSB of [[68k interrupts|RLI]] position (number of pixels)
|MSBs of timer reload value.
|-
|-
|$3C000A
|$3C000A
|?
|REG_TIMERLOW
|Word
|Invalid
|Invalid
|LSB of RLI position (number of pixels)
|LSBs of timer reload value.
|-
|-
|$3C000C
|$3C000C
|REG_IRQACK
|REG_IRQACK
|Byte
|Invalid
|Invalid
|Interrupt Acknowledge.
|Interrupt Acknowledge (byte !).
{{8BitRegister|?|5|Ack VBlank|1|Ack HBlank|1|Ack IRQ3|1}}
{{8BitRegister|?|5|Ack VBlank|1|Ack HBlank|1|Ack IRQ3|1}}
|-
|-
|$3C000E
|$3C000E
$3C000F
|REG_TIMERSTOP
|?
|Invalid
|?
|Bit 0=1: Stop timer counter for 32 raster lines when in PAL mode
| colspan="2" |Some emulators treat these locations like $3C000A.
|}
|}


Line 360: Line 360:
|Byte
|Byte
|?
|?
|Disable/enable sprites
|Disable/enable sprites ?
|rowspan="3"|[[NEO-GRC]]/[[NEO-OFC]]
|rowspan="3"|[[NEO-GRC]]/[[NEO-OFC]]
|-
|-
Line 373: Line 373:
|Byte
|Byte
|?
|?
|Enable/disable video output
|Enable/disable video output ? (disable works)
|-
|-
|$FF011C
|$FF011C
Line 435: Line 435:
|rowspan="2"|Word
|rowspan="2"|Word
|rowspan="2"|See [[Reading CDDA sound levels]]
|rowspan="2"|See [[Reading CDDA sound levels]]
|rowspan="2"|?
|rowspan="2"|No effect
|rowspan="2"|[[NEO-MGA]]
|rowspan="2"|[[NEO-MGA]]
|-
|-

Revision as of 21:08, 7 November 2011

Note: Most of the register names come from neogeo_spex.pdf

I/O registers

Always read/written as bytes (?)

Address Name Read Write Handled by
$300000 REG_P1CNT Player 1 controls (active low)
Bit 7 6 5 4 3 2 1 0
Def D CBARightLeftDownUp
? NEO-C1
$300001 REG_DIPSW Hardware DIPs (active low)
Bit 7 6 5 4 3 2 1 0
Def Freeze FreeplayEnable Multiplayer configurationCommunication identification code0:Normal controller
1:Mahjong keyboard
0:One coin chute
1:Two coin chutes
Settings mode
Kick watchdog NEO-F0 (read)
$300081 ? Read only ? ?
$320000 REG_SOUND Read Z80 reply code Send command to Z80 NEO-D0 ?
$320001 REG_STATUS_A Switch inputs are active low
Bit 7 6 5 4 3 2 1 0
Def NEC D4990 data bit NEC D4990 time pulseJumper "type", 1 on 1FZ1 on 1FZServiceCoin 2Coin 1
? ?
$340000 REG_P2CNT Player 2 controls (active low)
Bit 7 6 5 4 3 2 1 0
Def D CBARightLeftDownUp
? NEO-C1
$380000 REG_STATUS_B Aux inputs (active low)
Bit 7 6 5 4 3 2 1 0
Def 0:AES
1:MVS
Memory card
write enable
Memory card
inserted
Select P2Start P2Select P1Start P1
? NEO-C1
$380001 REG_POUTPUT ? Joypad ports outputs
Bit 7 6 5 4 3 2 1 0
Def ? P2 outputsP1 outputs

MAME select_controller

NEO-D0
$380011 REG_CRDBANK ?
Bit 7 6 5 4 3 2 1 0
Def Memory card bank selection
NEO-D0
$380021 REG_SLOT ?
Bit 7 6 5 4 3 2 1 0
Def ? Slot #
NEO-F0?
$380031 REG_LEDLATCHES ? MAME set_output_latch
Bit 7 6 5 4 3 2 1 0
Def ? Latch LED2 dataLatch LED1 dataLatch EL panel data?

Data is latched on falling edge (1 to 0 transition)

NEO-F0
$380041 REG_LEDDATA ? MAME set_output_data (for LEDs and EL panel) NEO-F0
$380051 REG_RTCCTRL ? MAME upd4990a_control_16_w (Calendar)
Bit 7 6 5 4 3 2 1 0
Def ? D4990 Strobe ?D4990 Clock ?D4990 DIN ?
NEO-F0?
$380061 ? ? Base address for writes (used by the MVS BIOS, only bit 4) Coin counters reset ? ?
$380063 ? ? Write only (used by the MVS BIOS) Coin counters reset ? NEO-I0
$380065 ? ? Write only (used by the MVS BIOS) Coin lockout ? NEO-I0
$380067 ? ? Write only (used by the MVS BIOS) Coin lockout ? ?
$3800E1 ? ? Write only (used by the MVS BIOS), similar to $380061 ?

System registers

Handled by a 74HC259 adressable latch on cart systems. Byte writes only.

Address Name Write
$3A0001 REG_NOSHADOW Normal video output
$3A0011 REG_SHADOW Darken video output
$3A0003 REG_SWPBIOS Use the BIOS vector table
$3A0013 REG_SWPROM Use the cart's vector table
$3A0005 REG_CRDUNLOCK1 Enable writes to memory card (use REG_CRDUNLOCK2 too)
$3A0015 REG_CRDLOCK1 Disable writes to memory card
$3A0007 REG_CRDLOCK2 Disable writes to memory card
$3A0017 REG_CRDUNLOCK2 Enable writes to memory card (use REG_CRDUNLOCK1 too)
$3A0009 REG_CRDREGSEL Enable "Register select" for memory card
$3A0019 REG_CRDNORMAL Disable "Register select" for memory card
$3A000B REG_BRDFIX Use the embedded SFIX and SM1 ROM
$3A001B REG_CRTFIX Use the cart's S ROM and M1 ROM
$3A000D REG_SRAMLOCK Write-protects backup RAM (MVS)
$3A001D REG_SRAMULOCK Unprotects backup RAM (MVS)
$3A000F REG_PALBANK1 Use palette bank 1
$3A001F REG_PALBANK0 Use palette bank 0

Video registers

Handled by the GPUs. Only word access.

Address Name Read Write
$3C0000 REG_VRAMADDR Read VRAM (address isn't changed) Sets VRAM address
$3C0002 REG_VRAMRW Read VRAM (address isn't changed) Write VRAM
$3C0004 REG_VRAMMOD Reads VRAM address modulo Sets VRAM address modulo (signed)
$3C0006 REG_LSPCMODE
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Raster line counter.
See Display timing
-1:50Hz
0:60Hz (LSPC2 only)
Auto animation counter
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Auto animation speed
(in frames)
Timer interrupt
mode
Timer interrupt enableDisable auto animation?
$3C0008 REG_TIMERHIGH Invalid MSBs of timer reload value.
$3C000A REG_TIMERLOW Invalid LSBs of timer reload value.
$3C000C REG_IRQACK Invalid Interrupt Acknowledge (byte !).
Bit 7 6 5 4 3 2 1 0
Def ? Ack VBlankAck HBlankAck IRQ3
$3C000E REG_TIMERSTOP Invalid Bit 0=1: Stop timer counter for 32 raster lines when in PAL mode


NeoGeo CD registers

NEO-MGA / LC8953 / LC98000 ?

Address Name Size Read Write Handled by
$FF0002 ? Word ? NeoRaine load_files ?
$FF0004 ? Word ? CDM3-2 BIOS writes 0,1,3,7 ?
$FF000E ? Byte ? CDM3-2 BIOS writes $3F,$3C ?
$FF000F ? Byte ? CDM3-2 BIOS writes $20,$10,$08,$04 ?
$FF0011 ? Byte ? CDM3-2 BIOS writes $FE ?
$FF0017 ? Byte CDM3-2 BIOS read/writes bit 0 ?
$FF0061 ? Byte ? Bit4: Run microcode ? LC8953
$FF0064~$FF0070 ? (Long)words ? Registers used by microcode (NeoRaine upload_param)
$FF007E~$FF008F ? Words ? Microcode (16x9bit instructions ?)
$FF0101 ? Byte ? CDM3-2 BIOS writes low nibble ?
$FF0103 ? Byte CDM3-2 BIOS: sequential read/writes ?
$FF0105 ? Byte ? upload_type_w ?
$FF0108 ? Word ? CDM3-2 BIOS writes $5555 ?
$FF010C ? Word ? CDM3-2 BIOS writes $5555 and reads ?
$FF0111 REG_DISBLSPR Byte ? Disable/enable sprites ? NEO-GRC/NEO-OFC
$FF0115 REG_DISBLFIX Byte ? Disable/enable fix layer
$FF0119 REG_ENVIDEO Byte ? Enable/disable video output ? (disable works)
$FF011C REG_CDCONFIG Word
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def 1 0CD lid switchConfiguration jumpers?
? NEO-CDD board
$FF0121 REG_UPMAPSPR Byte ? Set upload zone to SPR DRAM ?
$FF0123 REG_UPMAPPCM Set upload zone to PCM DRAM
$FF0127 REG_UPMAPZ80 Set upload zone to Z80 DRAM
$FF0129 REG_UPMAPFIX Set upload zone to FIX DRAM
$FF0141 REG_UPUNMAPSPR Unset SPR DRAM to upload zone
$FF0143 REG_UPUNMAPPCM Unset PCM DRAM to upload zone
$FF0147 REG_UPUNMAPZ80 Unset Z80 DRAM to upload zone
$FF0149 REG_UPUNMAPFIX Unset FIX DRAM to upload zone
$FF016F REG_DISBLIRQ Byte ? Disable/enable interrupts ?
$FF0183 REG_ENZ80 Byte ? Enable/disable(reset) Z80 ?
$FF0188 REG_CDDALEFTL Word See Reading CDDA sound levels No effect NEO-MGA
$FF018A REG_CDDARIGHTL
$FF01A1 ? Byte ? Upload zone 1MiB SPR DRAM bank selection ?
$FF01A3 ? Byte ? Upload zone 1MiB PCM DRAM bank selection ?
$FF01A7 ? Byte ? CDM3-2 BIOS writes ?
$FF01FC ? Word ? CDDA control ? ?
$FF01FE ? Word ? CD DA/data switch ? ?