Note: Most of the register names here come from neogeo_spex.pdf
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 |
C | B | A | Right | Left | Down | Up |
|
?
|
NEO-C1
|
$300001
|
REG_DIPSW
|
Byte
|
Dipswitches (active low)
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Def |
Freeze |
Freeplay | Coin meters ? | Autofire | ? | Test mode |
|
Kick watchdog
|
NEO-F0 (read)
|
$300081
|
?
|
Byte?
|
?
|
?
|
?
|
$320000
|
REG_SOUND
|
Byte
|
Out to Z80
|
In from Z80
|
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 |
C | B | A | Right | Left | Down | Up |
|
?
|
NEO-C1
|
$380000
|
REG_STATUS_B
|
Byte
|
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Def |
? |
Memory card write protect | Memory card inserted | Select P2 | Start P2 | Select P1 | Start P1 |
|
?
|
NEO-C1
|
$380000
|
?
|
Byte
|
?
|
MAME select_controller
|
?
|
$380021
|
REG_SLOT
|
Byte
|
?
|
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Def |
? |
Slot # |
|
NEO-F0?
|
$380030
|
?
|
Byte
|
?
|
MAME set_output_latch
|
NEO-F0?
|
$380040
|
?
|
Byte
|
?
|
MAME set_output_data
|
NEO-F0?
|
$380050
|
?
|
Byte
|
?
|
MAME upd4990a_control_16_w
|
NEO-F0?
|
$380001
|
?
|
Byte
|
?
|
Joypad ports outputs
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Def |
? |
P2 outputs | P1 outputs |
|
NEO-D0
|
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
|
See ASM Defines.
|
|
|
|
|
$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 related 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_VRAMINC
|
Reads VRAM address modulo
|
Sets VRAM address modulo (signed)
|
$3C0006
|
Word
|
REG_HBLANKCNT
|
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 mode | HBlank interrupt enabled | Disable auto animation | ? |
|
$3C0008
|
Word
|
REG_HBLANKPOS
|
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 VBlank | Ack HBlank | Ack IRQ3 |
|
$3C000E
$3C000F
|
?
|
?
|
Some emulators treat these locations like $3C000A.
|
NeoGeo CD only (from NeoCD's source)
NEO-MGA / LC8953 ?
- $FF011C (word): read: return 0xff | (region_code << 8);
- $FF0002 (word)
- $FF007E,$FF008f (word) dma_mode
- $FF0105 (byte) upload_type_w
- $FF0111 (byte) spr_disable
- $FF0115 (byte) fix_disable
- $FF0119 (byte) video_enable
- $FF016F (byte) disable_irq_w
- $FF0183 (byte) z80_enable