CPU memory map: Difference between revisions
Rainwarrior (talk | contribs) (linking CPU Test Mode, changing wording (discarded doesn't seem right, they do exist, don't they?)) |
(GEMISIS on Discord wondered why this doesn't mention the stack being at page $01. Word it so as to lead into Sample RAM map.) |
||
Line 21: | Line 21: | ||
|} | |} | ||
See [[Sample RAM map]] for an example allocation strategy for | Some parts of the 2 KiB of internal RAM at $0000-$07FF have predefined purposes dictated by the 6502 architecture. | ||
The zero page is $0000-$00FF, and the stack always uses some part of the $0100-$01FF page. | |||
Games may divide up the rest however the programmer deems useful. | |||
See [[Sample RAM map]] for an example allocation strategy for this RAM. | |||
Note: Most common boards and iNES mappers address ROM and Save/Work RAM in this format: | Note: Most common boards and iNES mappers address ROM and Save/Work RAM in this format: |
Revision as of 22:52, 30 November 2019
Address range | Size | Device |
---|---|---|
$0000-$07FF | $0800 | 2KB internal RAM |
$0800-$0FFF | $0800 | Mirrors of $0000-$07FF |
$1000-$17FF | $0800 | |
$1800-$1FFF | $0800 | |
$2000-$2007 | $0008 | NES PPU registers |
$2008-$3FFF | $1FF8 | Mirrors of $2000-2007 (repeats every 8 bytes) |
$4000-$4017 | $0018 | NES APU and I/O registers |
$4018-$401F | $0008 | APU and I/O functionality that is normally disabled. See CPU Test Mode. |
$4020-$FFFF | $BFE0 | Cartridge space: PRG ROM, PRG RAM, and mapper registers (See Note) |
Some parts of the 2 KiB of internal RAM at $0000-$07FF have predefined purposes dictated by the 6502 architecture. The zero page is $0000-$00FF, and the stack always uses some part of the $0100-$01FF page. Games may divide up the rest however the programmer deems useful. See Sample RAM map for an example allocation strategy for this RAM.
Note: Most common boards and iNES mappers address ROM and Save/Work RAM in this format:
- $6000-$7FFF = Battery Backed Save or Work RAM
- $8000-$FFFF = Usual ROM, commonly with Mapper Registers (see MMC1 and UxROM for example)
The CPU expects interrupt vectors in a fixed place at the end of the cartridge space:
- $FFFA-$FFFB = NMI vector
- $FFFC-$FFFD = Reset vector
- $FFFE-$FFFF = IRQ/BRK vector
If a mapper doesn't fix $FFFA-$FFFF to some known bank (typically, along with the rest of the bank containing them, e.g. $C000-$FFFF for a 16KiB banking mapper) or use some sort of reset detection, the vectors need to be stored in all banks.