Nintendo header

From NESdev Wiki
Revision as of 21:24, 11 January 2011 by Bregalad (talk | contribs) (Created new page about those strange headers (I don't see why they shouldn't be doccumented after all))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

About 33% of licensed Nintendo NES games have an header present at their last bank, at adresses $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).
  • $f000-$f001 : PRG Checksum (either the last 16k bank, or the whole PRG-ROM). Clamped sum of all bytes, excluding the two checksum bytes.
  • $f002-$f003 : CHR Checksum.
  • $f004 : High nybble = prg size (0=64kb, 2=32kb, 3=128kb, 4=256kb 5=512kb)
  • $f004 Low nybble = chr size (0 or 8 = 8kb of RAM, 1=16kb, 2=32kb 3=128kb, 4=256kb)
  • $fff5 : Mirroring. ($04 = mapper controlled, $02 = hardwired to vertical, $81 or $82 = harwired to horizontal
  • $fff6 : Version ($01 by default, incrementing on revisions)
  • $fff7 : Unknown
  • $fff8 : maker's code, the same used for the FDS, GB, GBC and SNES headers. $01 = Nintendo, $08 = Capcom, etc...
  • $fff9 : Unknown