From Wikibooks, the open-content textbooks collection
[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