Super NES Programming/SNES memory map

From Wikibooks, the open-content textbooks collection

Jump to: navigation, search

Contents


[edit] Memory map

Bank offset mapped here comment
$00-$3F $0000-$1FFF LowRAM each bank is shadowed from bank $7E
$2000-$2FFF PPU1, APU hardware registers
$3000-$3FFF DSP, SuperFX hardware registers
$4000-$41FF controller hardware registers
$4200-$4FFF DMA, PPU2? hardware registers
$6000-$7FFF Chips enhancement chips memory
$8000-$FFFF ROM Data that is mapped here depends on the cartridge.
$40-$7D $8000-$FFFF ROM Data that is mapped here depends on the cartridge.
$7E $0000-1FFF LowRAM
$2000-$7FFF HighRAM
$8000-$FFFF Extended RAM
$7F $0000-$FFFF Extended RAM

Banks $80 to $FF are mostly a mirror of the above. ROM mapped to banks $80 to $FF may be accessed at 3.58 Mhz rather than 2.68 Mhz depending on how register $420D is set.

There are two main models for memory that are used: LoROM and HiROM. LoROM means that the address line A15 is ignored by the cartridge, so the cartridge doesn't distinguish between $0000-$7FFF and $8000-$FFFF in any bank. Smaller ROMs use this model to prevent wasted space in banks $00-$3F.

[edit] Misc locations

At the end of bank 0, 64 bytes of cartridge information are stored. This section includes info such as interrupt vectors, title, version, etc.

location name description
$FFC0 Game title. 21 bytes, usually uppercase.
$FFD5 ROM makeup byte. xxAAxxxB; AA==11 means FastROM, B is HiROM
$FFD6 ROM type. ROM/RAM/SRAM/DSP1/FX
$FFD7 ROM size.
$FFD8 SRAM size.
$FFD9 Creator license ID code.
$FFDB Version #.
$FFDC Checksum complement.
$FFDE Checksum.

[edit] Interrupt vectors

Vectors are all 2 bytes. Program execution begins in emulation mode at the reset vector ($FFFC-D).

[edit] native mode vectors

name location description
COP $FFE4, 9 Co-processor enable. Not used for the Super NES.
BRK $FFE6, 7
ABORT $FFE8, 9
NMI $FFEA, B Non-maskable interrupt. Called when vertical refresh (vblank) begins.
RESET $FFEC, D unused
IRQ $FFEE, F Interrupt request. Can be set to be called at a certain spot in the horizontal refresh cycle.

[edit] emulation mode vectors

name location description
COP $FFF4,5 Co-processor enable. Not normally used for the Super NES.
ABORT $FFF8,9
NMI $FFFA,B Non-maskable interrupt. Called when vertical refresh (vblank) begins.
RES $FFFC,D Reset vector, execution begins via this vector.
BRK $FFFE,F
IRQ $FFFE,F Interrupt request. Can be set to be called at a certain spot in the horizontal refresh cycle.

[edit] See Also