But haven't seen any description of what expansion ROM is.
Searching for "expansion" won't yield significant results in the wiki or in this forum. (other than referring to expansion audio or expansion port)
The iNES header does not specify presence or absence of such ROM.
So what is it? is it mapper-specific?
Is it a general-purpose ROM that can be supplied in the cart?
How do you know if a cart has expansion ROM?
That region can be used by various mappers in different ways, but it's not necessarily ROM. With most mappers it's nothing. With some mappers, it may be ROM, RAM, or control registers.
This might help: http://wiki.nesdev.com/w/index.php/CPU_memory_map
In two different docs both named NES documentation by Patrick Diskin and Jeremy Chadwickrainwarrior wrote:Where have you seen this terminology?
Yes I had seen that, but it just labels $4020..$FFFF as Cartridge space: PRG ROM, PRG RAM, and mapper registers not specifying exactly what's below $6000.rainwarrior wrote:This might help: http://wiki.nesdev.com/w/index.php/CPU_memory_map
So except for NROM-368 and MMC5 my emu could just ignore this memory area completely and get away with it?lidnariq wrote:With the exception of the NROM-368 proposal, no mapper has ever put ROM in that region. And only the MMC5 has put RAM in a portion of it.
By the way, I'm only testing mapper 0 games, and Brush Roller tries to write a 0 to $4800, is this right?
Many other games do work, and the CPU passed the Kevtris test so I'm pretty sure it does not mess addresses up.
The only thing we can say is that the game seems to work fine without doing anything in response.
- For debugging purposes; a debugger might be programmed to breakpoint on writes to those addresses (some unofficial opcodes might also be used for debugging purposes in some games)
- For timing purposes; using up an exact number of bytes and an exact number of cycles
- Compatibility with another mapper the game is also designed to work on
- Use with specialized kinds of Famiclone hardware or specialized kinds of emulators
- To support later patching
- As an explicit side-effect of some other code (for example the music engine (but not the NSF) in Attribute Zone will write something both to $00,X and to $4000,X and expect unmapped addresses to do nothing)
For example, some believe (I don't know whether or not it is true) that MMC5 maps a write-only register over some of the PPU registers in order to determine how tall the sprites are. Famizork also mirrors mapper registers at $1xxx and $3xxx (as well as $5xxx and $7xxx), not only because this simplifies the hardware, but also to speed up bankswitching.
Code: Select all
lda #$80 sta $4089 ldx #$1F LDD32: lda #$00 sta $4040,x lda #$3F sta $4060,x dex bpl LDD32 lda #$00 sta $4089