Nintendo header: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
("H Scroll" and "V Scroll" are misleading despite official docs because SMB3 scrolls primarily horizontally with vertical nametable arrangement)
(Battletoads (J) is marked as board type 2, so 2 must be AOROM too)
Line 12: Line 12:
* '''$fff5''' : Board Type.
* '''$fff5''' : Board Type.
**D7: 0 = Horizontal [[Mirroring|nametable arrangement]], 1 = Vertical arrangement (inverse of [[iNES#Flags 6|iNES mirroring bit]])
**D7: 0 = Horizontal [[Mirroring|nametable arrangement]], 1 = Vertical arrangement (inverse of [[iNES#Flags 6|iNES mirroring bit]])
**D6-D0:  0 = NROM, 1 = CNROM, 2 = UNROM, 3 = GNROM, 4 = MMC (any).
**D6-D0:  0 = NROM, 1 = CNROM, 2 = UNROM/AOROM, 3 = GNROM, 4 = MMC (any).
* '''$fff6''' : Version ($01 by default, incrementing on revisions)
* '''$fff6''' : Version ($01 by default, incrementing on revisions)
* '''$fff7''' : Valid Title Length - 1. 0 if no title entered.
* '''$fff7''' : Valid Title Length - 1. 0 if no title entered.
* '''$fff8''' : Maker's code, the same used for the FDS, GB, GBC and SNES headers : 1 = Nintendo, 2-254 = everyone else. 255 must be reserved.
* '''$fff8''' : Maker's code, the same used for the FDS, GB, GBC and SNES headers : 1 = Nintendo, 2-254 = everyone else. 255 must be reserved.
* '''$fff9''' : Header Validation Byte. 8-bit checksum of FFF2-FFF9h should = 0
* '''$fff9''' : Header Validation Byte. 8-bit checksum of FFF2-FFF9h should = 0

Revision as of 22:03, 4 November 2013

About 33% of licensed Nintendo NES games have an header present at their last bank, at addresses $ffe0-$fff9, right before the interrupt vectors.

The info in them is frequently incomplete and/or inaccurate. When info on a particular filed is not present, a byte $00 or $ff is used for padding

  • $ffe0-$ffef : Name of the game, in ASCII, zero terminated (sometimes the name is abbreviated or replaced by Nintendo's code). ASCII codes 20h-5Ah allowed. Supposed to be right-justified.
  • $fff0-$fff1 : PRG checksum (either the last 16k bank, or the whole PRG-ROM). Clamped sum of all bytes, excluding the two checksum bytes.
  • $fff2-$fff3 : CHR checksum. 0x00 if RAM
  • $fff4 : Data sizes. Values: 0 = 8KB,1 = 16KB,2 = 32KB,3 = 128KB,4 = 256KB,5 = 512KB (No provisions for 64KB, 0 is usually used)
    • D7-D4: PRG size
    • D3: 0 = CHR ROM, 1 = CHR RAM
    • D2-D0: CHR size
  • $fff5 : Board Type.
  • $fff6 : Version ($01 by default, incrementing on revisions)
  • $fff7 : Valid Title Length - 1. 0 if no title entered.
  • $fff8 : Maker's code, the same used for the FDS, GB, GBC and SNES headers : 1 = Nintendo, 2-254 = everyone else. 255 must be reserved.
  • $fff9 : Header Validation Byte. 8-bit checksum of FFF2-FFF9h should = 0