Programming UNROM: Difference between revisions
MetalSlime (talk | contribs) No edit summary |
MetalSlime (talk | contribs) |
||
Line 41: | Line 41: | ||
== Related articles == | == Related articles == | ||
[[UxROM|UxROM technical reference]] | * [[UxROM|UxROM technical reference]] | ||
* [[Programming UOROM]] - UNROM's big brother |
Revision as of 09:43, 24 June 2009
The UNROM mapper has 128kb PRG-ROM (divided into 8 16k banks) and CHR-RAM. It is very easy to use.
iNES Header
Here is an iNES header for the UNROM mapper.
.segment "HEADER" .byte "NES", $1A .byte $08 ;UNROM has 8 16k banks .byte $00 ;UNROM uses CHR RAM, so no CHR ROM .byte $20, $00 ;UNROM is Mapper 2 .byte $00 ;UNROM has no PRG RAM
Bankswitching
UNROM has 8 16k banks. One of these banks is fixed at $C000-$FFFF. The other seven (numbered 0-6) are switchable at $8000-$BFFF.
Switching banks requires a write to $8000-$FFFF. Bits 0-2 of the byte written to $8000-$FFFF will select the bank. When writing to $8000-$FFFF, the value you are writing must match the value located at the destination address in ROM (see Bus conflict). One way to ensure this is to have a bankswitch lookup table. You can read from this table and then immediately write that value back to the table.
.segment "BANKTABLE" banktable: .byte $00, $01, $02, $03, $04, $05, $06 ;write to this table to switch banks.
.segment "ZP": zeropage current_bank: .res 1
.segment "CODE" bankswitch: lda banktable, y ;read a byte from the banktable sta banktable, y ;and write it back, switching banks sta current_bank ;store the current bank in RAM rts
The lookup table and the bankswitching subroutine should be located in the fixed bank, so that they are always available. It is common to stick the lookup table at $FFF3-$FFF9, immediately before the nmi/reset/irq vectors (at $FFFA-FFFF).
With the lookup table and bankswitching subroutine in place, switching banks is as easy as this:
ldy #$02 jsr bankswitch ;switch to bank 2
Related articles
- UxROM technical reference
- Programming UOROM - UNROM's big brother