zeroone wrote:
If the load address is $9000, couldn't that be interpreted as leave the first 4K bank empty and populate the rest?
No, there's no "interpretation". The value in the high nibble of LOAD when bankswitching must be
ignored. This is specified, and it's been this way for 15 years. Rippers
do put values in this nibble sometimes, but it is not valid to make use of it in any functional way.
zeroone wrote:
In other words, instead of address AND $0FFF, how about address - $8000 (assuming all the loaded data is packed into a contiguous array starting at that offset)?
No. The address space of the ROM is separate from the address space of the NES. The ROM starts at 0. When
not bankswitching you could consider it that way, if your ROM is mapped to $8000 (likely implementation). When bankswitching, the mapping is controlled explicitly by the bankswitching.
zeroone wrote:
On a side note, the wiki mentions that load addresses between $6000 and $8000 may be present for FDS NSF files, which would require some additional code to handle that case.
When not bankswitching the FDS may allow load addresses down to $6000. FDS has 32k of RAM from $6000 to $DFFF. For the same reason, an FDS NSF is not allowed to load data above $DFFF (that is BIOS ROM), and if bankswitching the $E000/$F000 banks are remapped to $6000/$7000.