Nintendo header: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
m (Game names are not zero terminated.) |
(Used by Famicom Box) |
||
Line 1: | Line 1: | ||
About 33% of licensed Nintendo NES games have an header present at their last bank, at addresses $FFE0-$FFF9, right before the interrupt vectors. | 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 [[Famicom Box]] reads this header to determine the title of the inserted game. | ||
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 | 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. (sometimes the name is abbreviated or replaced by Nintendo's code). ASCII codes 20h-5Ah allowed. Should be right-justified. | * '''$FFE0-$FFEF''' : Name of the game, in ASCII. (sometimes the name is abbreviated or replaced by Nintendo's code). ASCII codes 20h-5Ah allowed. Should be right-justified. | ||
* '''$FFF0-$FFF1''' : PRG checksum (either the last 16k bank, or the whole PRG-ROM). Sum of all bytes, excluding the two checksum bytes. Big-endian. | * '''$FFF0-$FFF1''' : PRG checksum (either the last 16k bank, or the whole PRG-ROM). Sum of all bytes in the relevant area, excluding the two checksum bytes. Big-endian. | ||
* '''$FFF2-$FFF3''' : CHR checksum. 0x00 if RAM. Big-endian. | * '''$FFF2-$FFF3''' : CHR checksum. 0x00 if RAM. Big-endian. | ||
* '''$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 | * '''$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 | ||
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/AOROM, 3 = GNROM, 4 = MMC (any). | **D6-D0: 0 = NROM, 1 = CNROM, 2 = UNROM/AOROM, 3 = GNROM, 4 = MMC (any). Determines which area to checksum. | ||
* '''$FFF6''' : Title encoding : 0 = No title entered, 1 = ASCII, 2 = Another encoding | * '''$FFF6''' : Title encoding : 0 = No title entered, 1 = ASCII, 2 = Another encoding | ||
* '''$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-$FFF9 should = 0 | * '''$FFF9''' : Header Validation Byte. 8-bit checksum of $FFF2-$FFF9 should = 0 |
Revision as of 15:54, 15 August 2021
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 Famicom Box reads this header to determine the title of the inserted game.
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. (sometimes the name is abbreviated or replaced by Nintendo's code). ASCII codes 20h-5Ah allowed. Should be right-justified.
- $FFF0-$FFF1 : PRG checksum (either the last 16k bank, or the whole PRG-ROM). Sum of all bytes in the relevant area, excluding the two checksum bytes. Big-endian.
- $FFF2-$FFF3 : CHR checksum. 0x00 if RAM. Big-endian.
- $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.
- 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). Determines which area to checksum.
- $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-$FFF9 should = 0