Memory mapped registers: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 1: Line 1:
Note: Most of the register names here come from neogeo_spex.pdf
Note: Most of the register names come from neogeo_spex.pdf


=Common registers=
==I/O registers==
{| class="regdef"
{| class="regdef"
|'''Address'''
|'''Address'''
Line 128: Line 130:




System registers, handled by a 74HC259 adressable latch.
==System registers==
Handled by a 74HC259 adressable latch.
{| class="regdef"
{| class="regdef"
|'''Address'''
|'''Address'''
Line 234: Line 237:




Video related registers, probably handled by the [[LSPC2-A2|LSPC]] chips.
==Video registers==
Probably handled by the [[LSPC2-A2|LSPC]] chips.
{| class="regdef"
{| class="regdef"
|'''Address'''
|'''Address'''
Line 275: Line 279:
|Word
|Word
|Invalid
|Invalid
|MSB of RLI position (number of pixels)
|MSB of [[68k interrupts|RLI]] position (number of pixels)
|-
|-
|$3C000A
|$3C000A
Line 297: Line 301:
|}
|}


==NeoGeo CD only (from NeoCD's source)==
=NeoGeo CD only (from NeoCD's source)=


[[NEO-MGA]] / [[LC8953]] ?
[[NEO-MGA]] / [[LC8953]] ?
*$FF011C (word): read: return 0xff | (region_code << 8);
{| class="regdef"
*$FF0002 (word)
|'''Address'''
*$FF007E,$FF008F (word) dma_mode
|'''Name'''
*$FF0105 (byte) upload_type_w
|'''Size'''
*$FF0111 (byte) spr_disable
|'''Read'''
*$FF0115 (byte) fix_disable
|'''Write'''
*$FF0119 (byte) video_enable
|'''Handled by'''
*$FF016F (byte) disable_irq_w
|-
*$FF0183 (byte) z80_enable
|$FF0002
|?
|Word
|?
|?
|rowspan="9"|?
|-
|$FF007E~$FF008F
|?
|Word
|?
|dma_mode
|-
|$FF0105
|?
|Byte
|?
|upload_type_w
|-
|$FF0111
|?
|Byte
|?
|spr_disable
|-
|$FF0115
|?
|Byte
|?
|fix_disable
|-
|$FF0119
|?
|Byte
|?
|video_enable
|-
|$FF011C
|?
|Word
|region_code, 0xFF
|?
|-
|$FF016F
|?
|Byte
|?
|disable_irq_w
|-
|$FF0183
|?
|Byte
|?
|z80_enable
|-
|$FF0188
|?
|Word
|[[Reading CDDA sound data|CDDA_LEFTSTREAM]]
|?
|rowspan="2"|[[NEO-MGA]]
|-
|$FF018A
|?
|Word
|[[Reading CDDA sound data|CDDA_RIGHTSTREAM]]
|?
|}


[[Category:CPUs]]
[[Category:CPUs]]
[[Category:Code]]
[[Category:Code]]

Revision as of 21:20, 6 March 2011

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

Common registers

I/O registers

Address Name Size Read Write Handled by
$300000 REG_P1CNT Byte Player 1 controls (active low)
Bit 7 6 5 4 3 2 1 0
Def D CBARightLeftDownUp
? NEO-C1
$300001 REG_DIPSW Byte Dipswitches (active low)
Bit 7 6 5 4 3 2 1 0
Def Freeze FreeplayCoin meters ?Autofire?Test mode
Kick watchdog NEO-F0 (read)
$300081 ? Byte Read only ? ?
$320000 REG_SOUND Byte Send command to Z80 Read Z80 reply code NEO-D0 ?
$320001 REG_STATUS_A Byte
Bit 7 6 5 4 3 2 1 0
Def ?
? ?
$340000 REG_P2CNT Byte Player 2 controls (active low)
Bit 7 6 5 4 3 2 1 0
Def D CBARightLeftDownUp
? NEO-C1
$380000 REG_STATUS_B Byte
Bit 7 6 5 4 3 2 1 0
Def ? Memory card write protectMemory card insertedSelect P2Start P2Select P1Start P1
? NEO-C1
$380001 ? Byte ? Joypad ports outputs
Bit 7 6 5 4 3 2 1 0
Def ? P2 outputsP1 outputs

MAME select_controller

NEO-D0
$380011 ? Byte ? Write only, after a write to $3A0019 ?
$380021 REG_SLOT Byte ?
Bit 7 6 5 4 3 2 1 0
Def ? Slot #
NEO-F0?
$380030(1?) ? Byte ? MAME set_output_latch (LED marquee ?) NEO-F0?
$380040(1?) ? Byte ? MAME set_output_data (LED marquee ?) NEO-F0?
$380050(1?) ? Byte ? MAME upd4990a_control_16_w (Calendar) NEO-F0?
$380061 ? Byte ? Base address for writes (used by the MVS BIOS) ?
$380065 ? Byte ? Write only (used by the MVS BIOS) ?
$380067 ? Byte ? Write only (used by the MVS BIOS) ?


System registers

Handled by a 74HC259 adressable latch.

Address Name Size Read Write
$3A0001 REG_DISPENABL Byte Invalid Normal video output
$3A0011 REG_DISPDSABL Byte Invalid Darken video output
$3A0003 ? Byte Invalid Use the BIOS vector table
$3A0013 REG_SWPROM Byte Invalid Use the cart's vector table
$3A0005 REG_CRDUNLOCK1 Byte Invalid Allow /WE to pass through to memory card when low
$3A0015 REG_CRDLOCK1 Byte Invalid Don't allow /WE to pass through to memory card
$3A0007 REG_CRDLOCK2 Byte Invalid Don't allow /WE to pass through to memory card
$3A0017 REG_CRDUNLOCK1 Byte Invalid Allow /WE to pass through to memory card when high
$3A0009 ? Byte Invalid ?
$3A0019 ? Byte Invalid ?
$3A000B REG_BRDFIX Byte Invalid Use the embeded fix tileset (SFIX)
$3A001B REG_CRTFIX Byte Invalid Use the cart's fix tileset
$3A000D REG_SRAMLOCK Byte Invalid Write-protects the SRAM (MVS)
$3A001D REG_SRAMULOCK Byte Invalid Unprotects SRAM (MVS)
$3A000F REG_PALBANK1 Byte Invalid Use palette bank 1
$3A001F REG_PALBANK0 Byte Invalid Use palette bank 0


Video registers

Probably handled by the LSPC chips.

Address Name Size Read Write
$3C0000 REG_VRAMADDR Word Read VRAM (address isn't changed) Sets VRAM address
$3C0002 REG_VRAMRW Word Read VRAM (address isn't changed) Write VRAM
$3C0004 Word REG_VRAMMOD Reads VRAM address modulo Sets VRAM address modulo (signed)
$3C0006 REG_HBLANKCNT Word
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Raster line counter ?1:50Hz
0:60Hz
Auto animation counter

Line counter: (diagram needed)
$00F8-$00FF : Vertical sync
$0100-$010F : Top border
$0110-$01EF : Active display
$01F0-$01FF : Bottom border

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def Auto animation speed (in frames) HBlank (RLI) interrupt modeHBlank interrupt enabledDisable auto animation?
$3C0008 REG_HBLANKPOS Word Invalid MSB of RLI position (number of pixels)
$3C000A ? Word Invalid LSB of RLI position (number of pixels)
$3C000C REG_IRQACK Byte Invalid Interrupt Acknowledge.
Bit 7 6 5 4 3 2 1 0
Def ? Ack VBlankAck HBlankAck IRQ3
$3C000E

$3C000F

? ? Some emulators treat these locations like $3C000A.

NeoGeo CD only (from NeoCD's source)

NEO-MGA / LC8953 ?

Address Name Size Read Write Handled by
$FF0002 ? Word ? ? ?
$FF007E~$FF008F ? Word ? dma_mode
$FF0105 ? Byte ? upload_type_w
$FF0111 ? Byte ? spr_disable
$FF0115 ? Byte ? fix_disable
$FF0119 ? Byte ? video_enable
$FF011C ? Word region_code, 0xFF ?
$FF016F ? Byte ? disable_irq_w
$FF0183 ? Byte ? z80_enable
$FF0188 ? Word CDDA_LEFTSTREAM ? NEO-MGA
$FF018A ? Word CDDA_RIGHTSTREAM ?