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.
- D7: 0 = Horizontal nametable arrangement, 1 = Vertical arrangement (inverse of iNES mirroring bit)
- D6-D0: 0 = NROM, 1 = CNROM, 2 = UNROM/AOROM, 3 = GNROM, 4 = MMC (any).
- $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