Nintendo header

From NESdev Wiki
Revision as of 14:29, 15 January 2016 by Bregalad (talk | contribs) (Edited meaning of byte $fff6, as discussed on the forums.)
Jump to navigationJump to search

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 = 8 KiB or 64 KiB based on board type, 1 = 16 KiB, 2 = 32 KiB, 3 = 128 KiB, 4 = 256 KiB, 5 = 512 KiB
    • D7-D4: PRG size
    • D3: 0 = CHR ROM, 1 = CHR RAM
    • D2-D0: CHR size
  • $fff5 : Board Type.
  • $fff6 : Title encoding : 0 = No title entered, 1 = ASCII, 2 = Another encoding
  • $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