FamicomBox database
The FamicomBox menu cartridge contains a database of game checksums for games that do not have a Nintendo header, allowing them to be detected by the menu software as valid (assuming they have a matching 3198 CIC) and displayed in the menu with an appropriate title. This enabled some games in this list to be released without any modification to the ROM, which could be expensive and invasive.
Each entry is 32 bytes long:
- $00-$01 : Full PRG checksum. Big-endian sum of the largest region detected to contain unique data ($E000-$FFFF, $C000-$FFFF, or $8000-$FFFF).
- $02 : Title length - 1 (1-15 = 2-16 bytes).
- $03-$12 : Title of the game, in ASCII, left-justified. Normally padded with spaces ($20).
- $13-$1C : Padding. These are always padded in valid entries with spaces ($20).
- $1D-$1E : Upper PRG checksum. If present, big-endian sum of $E000-$FFFF if that is the largest region with unique data, or of $C000-$FFFF otherwise. This allows just the upper half of the unique data to be checked, which can work around collisions or unreliable mapper power-on state.
- $1F : Upper PRG checksum present (0 = present).
Invalid entries are filled with $FF.
The FamicomBox software only falls back on a database lookup if it does not find a valid Nintendo header at $FFE0-$FFF9 in the CPU address space. To generate a database checksum, it does the following steps:
- $00 is written to the first address containing $00 that it finds starting at $8000; this configures some mappers, such as UNROM and GNROM, to use bank 0. If there is no $00 value in $8000-$FFFF, address $0000 is harmlessly read then written.
- Two checksums are produced: a “full-checksum” that includes all of the unique data and an “upper-checksum” that sums only $E000-$FFFF if that is the largest region with unique data or $C000-$FFFF otherwise.
- First, it sums $C000-$DFFF for the full-checksum and $E000-$FFFF for the upper-checksum. While summing, each byte of the two regions is compared. If the regions are byte-for-byte identical, checksumming is complete and both checksums contain the sum of $E000-$FFFF.
- Otherwise, it sums $8000-$BFFF for the full-checksum and $C000-$FFFF for the upper-checksum. If the regions are byte-for-byte identical, checksumming is complete and both checksums contain the sum of $C000-$FFFF.
- Otherwise, it combines the full- and upper-checksums and stores the result as the full-checksum. The full-checksum contains the sum of $8000-$FFFF and the upper-checksum contains the sum of $C000-$FFFF.
- If the full-checksum is $FFFF, the database search is skipped and the cartridge is marked as valid with no title, and the process is complete.
- The database is searched from the beginning ($A000).
- If byte $1F of the database entry is 0, bytes $1D-$1E are compared against the upper-checksum. If they match, the cart is valid and we use this entry for the title. If the low bytes differ, this database entry is skipped. If only the high byte differs, or if byte $1F isn’t 0, it continues on to the full-checksum.
- Bytes $00-$01 are compared against the full-checksum. If they match, the cart is valid and we use this entry for the title. Otherwise, we advance to the next entry.
- If we advanced to $C000, the cart is not valid.
The default sorting for this table is the order they appear in the database. Said ordering appears to consist of two blocks - one block for later game revisions and another block for earlier revisions, roughly in release date order. First-party titles in particular follow the exact release order[1] - the launch titles Donkey Kong, Donkey Kong Jr., and Popeye are the first in each block.
There are empty entries with checksum $FFFF, which are noted as such. There are 82 more empty entries beyond “BABEL”, the last valid entry, which are omitted from the table for brevity.
| Title | Checksum | Game version | Notes | |
|---|---|---|---|---|
| Full | Upper | |||
| DONKEY KONG | $1104 | Donkey Kong (World) (Rev 1) | ||
| DONKEY KONG JR. | $F97C | Donkey Kong Jr. (World) (Rev 1) | ||
| POPEYE | $2F81 | Popeye (World) (Rev 1) | ||
| MARIO BROS. | $AAB1 | Mario Bros. (World) | ||
| MAH-JONG | $E300 | Mahjong (Japan) (Rev 1), Mahjong (Japan) (Rev 2) | ||
| GOMOKU-NARABE | $A54B | Gomoku Narabe (Japan) | ||
| SANSUU ASOBI | $02AF | Donkey Kong Jr. no Sansuu Asobi (Japan) | ||
| EIGO ASOBI | $62DB | Popeye no Eigo Asobi (Japan) | ||
| BASEBALL | $7792 | Baseball (Japan) | ||
| PINBALL | $6B06 | Pinball (Japan, USA) | ||
| TENNIS | $076A | Tennis (Japan, USA) | ||
| WILD GUNMAN | $1783 | Wild Gunman (World) (Rev 1) | ||
| DUCK HUNT | $8261 | Duck Hunt (World) | ||
| GOLF | $AF78 | Golf (Japan) | ||
| HOGAN'S ALLEY | $E84A | Hogan's Alley (World) | ||
| DONKEY KONG 3 | $8C5F | Donkey Kong 3 (World) | ||
| NUTS & MILK | $A00E | Nuts & Milk (Japan) | ||
| LODE RUNNER | $6407 | Lode Runner (Japan) | ||
| DEVIL WORLD | $081A | Devil World (Japan) (Rev 1) | ||
| YONIN-UCHI | $0D81 | 4 Nin Uchi Mahjong (Japan) (Rev 1) | ||
| F1 RACE | $9342 | F1 Race (Japan) | ||
| URBAN CHAMPION | $FB3C | Urban Champion (World) | ||
| CLU CLU LAND | $BB8A | Clu Clu Land (World) | ||
| EXCITEBIKE | $A6A0 | Excitebike (Japan, USA) | ||
| BALOON FIGHT | $BDF9 | Balloon Fight (Japan) | ||
| ICE CLIMBER | $E710 | Ice Climber (Japan) | ||
| BUNGELING BAY | $8C9C | Raid on Bungeling Bay (Japan) (Rev 1) | ||
| CHAMPIONSHIP | $3683 | Championship Lode Runner (Japan) | ||
| SOCCER | $FD07 | Soccer (Japan, USA) | ||
| FLAPPY | $3809 | Flappy (Japan) | ||
| STAR FORCE | $5BD4 | Star Force (Japan) | ||
| WRECKING CREW | $6935 | Wrecking Crew (World) | ||
| SPARTAN X | $4270 | Spartan X (Japan) | ||
| DOOR DOOR | $411E | Door Door (Japan) | ||
| ASTRO-ROBO SASA | $C964 | Astro Robo Sasa (Japan) | ||
| GEIMO | $A73E | Geimos (Japan) | The title data contains "GEIMOS", but the title length is off by 1 | |
| POOYA | $92F4 | Pooyan (Japan) | The title data contains "POOYAN", but the title length is off by 1 | |
| SUPER MARIO | $44B9 | Super Mario Bros. (World) | ||
| CHALLENGER | $AF86 | Challenger (Japan) | ||
| PACHICON | $9114 | Pachicom (Japan) | ||
| MACH RIDER | $13DE | Mach Rider (Japan, USA) (Rev 1) | ||
| PORTPIA | $086E | Portopia Renzoku Satsujin Jiken (Japan) | ||
| ONYANKO TOWN | $3939 | Onyanko Town (Japan) | ||
| PENGUIN-KUN WARS | $832B | Penguin-kun Wars (Japan) | ||
| DOUGH BOY | $F9F9 | Dough Boy (Japan) | ||
| LUNAR BALL | $5C2F | Lunar Ball (Japan) | ||
| EXED EXES | $4E76 | Chou Fuyuu Yousai Exed Exes (Japan) | ||
| LOT LOT | $FB6E | Lot Lot (Japan) | ||
| KARATEKA | $B09C | Karateka (Japan) | ||
| 1942 | $024F | 1942 (Japan, USA) | ||
| SON SON | $BDDE | Son Son (Japan) | ||
| VOL GUARD 2 | $EBF4 | Volguard II (Japan) | ||
| THEXDER | $B14B | Thexder (Japan) | ||
| ZUNO-SENKAN GARU | $B224 | Zunou Senkan Galg (Japan) | ||
| BOKOSUKA WARS | $03FD | Bokosuka Wars (Japan) | ||
| BINARYLAND | $82A8 | Binary Land (Japan) | ||
| HATTORI-KUN | $287A | Ninja Hattori-kun - Ninja wa Syugyou de Gozaru no Maki (Japan) | ||
| BOMBER MAN | $BF54 | Bomberman (Japan) | ||
| MAGMAX | $58E3 | Magmax (Japan) | ||
| CIRCUS CHARLIE | $178E | Circus Charlie (Japan) | ||
| BALTRON | $A8BA | Baltron (Japan) | ||
| HYDLIDE SPECIAL | $4207 | Hydlide Special (Japan) | ||
| DRAGON QUEST | $34AE | Dragon Quest (Japan) | ||
| KEISAN-GAME 1 | $38BC | Sansuu 1 Nen - Keisan Game (Japan) | ||
| KEISAN-GAME 2 | $F339 | Sansuu 2 Nen - Keisan Game (Japan) | ||
| KEISAN-GAME 3 | $6D4F | Sansuu 3 Nen - Keisan Game (Japan) | ||
| SUPAI VS SUPAI | $1A81 | Spy vs Spy (Japan) | ||
| SECROSS | $0AF7 | Seicross (Japan) (Rev 1) | ||
| MIGHTY BOMB JACK | $C3CE | Mighty Bomb Jack (Japan) (Rev 1) | ||
| B-WING | $6673 | B-Wings (Japan) | ||
| BIRD-WEEK | $84BC | Bird Week (Japan) | ||
| STAR SOLDIER | $8355 | Star Soldier (Japan) | ||
| YIE AR KUNG-FU | $8C18 | Yie Ar Kung-Fu (Japan) (Rev 1.2) | ||
| EXERION | $7332 | Exerion (Japan) | ||
| ELEVATOR ACTION | $CDBA | Elevator Action (Japan) (Rev 0) | ||
| GALAGA | $83E4 | $83E4 | Galaga (Japan) | Specifies checksums for both $8000-$BFFF and $C000-$FFFF |
| ZIPPY RACE | $E95E | Zippy Race (Japan) | ||
| ANTAR. ADVENTURE | $7B59 | Kekkyoku Nankyoku Daibouken (Japan) (Rev 0) | ||
| SUPER ARABIAN | $9F1E | Super Arabian (Japan) | ||
| SPACE INVADERS | $3001 | Space Invaders (Japan) | ||
| XEVIOUS | $C6A9 | Xevious (Japan) (Rev 1) | ||
| CHACK'N POP | $BC5F | Chack'n Pop (Japan) | ||
| DIG DUG | $3745 | Dig Dug (Japan) | ||
| 10-YARD FIGHT | $0339 | 10-Yard Fight (Japan) (Rev 0) | ||
| NINJA-KUN | $F6E8 | Ninja-kun - Majou no Bouken (Japan) (Rev 1) | ||
| HYPER OLYMPIC | $A4A4 | Hyper Olympic (Japan) | ||
| PAC-MAN | $2C69 | Pac-Man (Japan) (Rev 0) | ||
| FIELD COMBAT | $F147 | Field Combat (Japan) | ||
| FORMATION Z | $4656 | Formation Z (Japan) (Rev 1) | ||
| FRONT LINE | $11C1 | Front Line (Japan) | ||
| MAPPY | $E929 | Mappy (Japan) | ||
| ROAD FIGHTER | $C7CF | Road Fighter (Japan) | ||
| DRUAGA | $83E4 | $B88D | Druaga no Tou (Japan) | Relies on $C000-$FFFF checksum because of collision with Galaga |
| BATTLE CITY | $4218 | Battle City (Japan) | ||
| WARPMAN | $08D8 | Warpman (Japan) | ||
| HYPER SPORTS | $5600 | Hyper Sports (Japan) (Rev 0) | ||
| HONSHOGI | $9B81 | Honshougi - Naitou 9 Dan Shougi Hiden (Japan) | ||
| CITY CONNECTION | $D8EE | City Connection (Japan) | ||
| ROUTE-16 TURBO | $1876 | Route-16 Turbo (Japan) | ||
| PAC-LAND | $9D5B | Pac-Land (Japan) | ||
| BURGER TIME | $9B98 | BurgerTime (Japan) | ||
| JAJAMARU-KUN | $2052 | Ninja Jajamaru-kun (Japan) | ||
| SKY DESTROYER | $76B0 | Sky Destroyer (Japan) | ||
| TWIN BEE | $0300 | TwinBee (Japan) | ||
| KINNIKUMAN | $7F7B | Kinnikuman - Muscle Tag Match (Japan) (Rev 1) | ||
| STAR LUSTER | $8742 | Star Luster (Japan) | ||
| IKKI | $A2D3 | Ikki (Japan) | ||
| OBAKE-NO Q-TARO | $5DD6 | Obake no Q Tarou - Wanwan Panic (Japan) | ||
| $FFFF | (Empty) | |||
| MACROSS | $7BB9 | Choujikuu Yousai - Macross (Japan) | ||
| $FFFF | (Empty) | |||
| SPELUNKER | $99D0 | Spelunker (Japan) | ||
| GYRODINE | $1D0D | Gyrodine (Japan) | ||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| MAKAIMURA | $B7A5 | Makaimura (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| SUPER CHINESE | $E74A | This doesn't seem to match any configuration of banks for Super Chinese (Japan) | ||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| $FFFF | (Empty) | |||
| DONKEY KONG | $03EC | Donkey Kong (Japan) (Rev 0) | ||
| DONKEY KONG JR. | $E7C4 | Donkey Kong Jr. (Japan) (Rev 0) | ||
| POPEYE | $2950 | Popeye (Japan) (Rev 0) | ||
| MAH-JONG | $C446 | Mahjong (Japan) (Rev 0) | ||
| WILD GUNMAN | $2ED6 | Wild Gunman (Japan, USA) (Rev 0) | ||
| DEVIL WORLD | $07FB | Devil World (Japan) (Rev 0) | ||
| YONIN-UCHI | $11BA | 4 Nin Uchi Mahjong (Japan) (Rev 0) | ||
| MACH RIDER | $0F7E | Mach Rider (Japan, USA) (Rev 0) | ||
| BUNGELING BEY | $9108 | Raid on Bungeling Bay (Japan) (Rev 0) | ||
| CASTLE EXCELLENT | $BCBD | Castle Excellent (Japan) | ||
| MIGHTY BOMB JACK | $3777 | Mighty Bomb Jack (Japan) (Rev 0) | ||
| A S | $8523 | ASO - Armored Scrum Object (Japan) | The title data contains "A S O", but the title length specifies only 3 bytes | |
| SOROMON NO KAGI | $1A7C | Solomon no Kagi (Japan) | ||
| KING' KNIGHT | $3652 | King's Knight (Japan) | ||
| HOKUTO NO KEN | $1F3F | Hokuto no Ken (Japan) | ||
| TERRA CRESTA | $3EB7 | Terra Cresta (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| BANANA | $801E | Banana (Japan) | ||
| SUPER PITFALL | $F7BD | Super Pitfall (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| GHOSTBUSTERS | $C0CA | Ghostbusters (Japan) | ||
| BOUKENJIMA | $7D7E | Takahashi Meijin no Bouken-jima (Japan) | ||
| SENJYO NO OHKAMI | $2B2F | Senjou no Ookami (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| SPACE HUNTER | $2B9C | Space Hunter (Japan) | ||
| BUGGY POPPER | $934B | Buggy Popper (Japan) | ||
| OTHELLO | $BC8D | Othello (Japan) (Rev 0) | ||
| SUPER STAR FORCE | $E152 | Super Star Force (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| TRANSFORMER | $78E6 | Tatakae! Chou Robot Seimeitai Transformers - Convoy no Nazo (Japan) | ||
| KEISAN GAME 4 | $28D3 | Sansuu 4 Nen - Keisan Game (Japan) | ||
| KEISAN GAME 5-6 | $9F2B | Sansuu 5 & 6 Nen - Keisan Game (Japan) | ||
| SUPER MONKEY | $9458 | Ganso Saiyuuki - Super Monkey Daibouken (Japan) | ||
| DAIVA | $CF6B | Daiva - Imperial of Nirsartia (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| IKARI | $8C23 | Ikari (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| CAT IN BOOTS | $1C9B | Nagagutsu o Haita Neko - Sekai Isshuu 80 Nichi Daibouken (Japan) | ||
| MEIKYU-KUMIKYOKU | $B1C0 | Meikyuu Kumikyoku - Milon no Daibouken (Japan) | ||
| AIGINA | $70DC | Aigina no Yogen - Balubalouk no Densetsu Yori (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| TIGER HELI. | $3E3F | Tiger-Heli (Japan) | ||
| HOTTERMAN | $349E | Hottarman no Chitei Tanken (Japan) | ||
| CRAZY CLIMBER | $F13F | Crazy Climber (Japan) | Mapper 180 - Checksum is bank 0 | |
| TOKI NO TABIBITO | $8E14 | Toki no Tabibito - Time Stranger (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| SHERLOCK HOLMES | $A4CE | Sherlock Holmes - Hakushaku Reijou Yuukai Jiken (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| SEIKIMATSU | $0161 | Seikima II - Akuma no Gyakushuu! (Japan) | ||
| DORAEMON | $952D | Doraemon (Japan) | GNROM - Checksum is bank 0 | |
| TATAKAI NO BANKA | $4F73 | Tatakai no Banka (Japan) (Rev 0) | UNROM - Checksum is bank 0 + bank 7 | |
| LAYLA | $0CEB | Layla (Japan) | UNROM - Checksum is bank 0 + bank 7 | |
| SKYKID | $3707 | Sky Kid (Japan) | Mapper 206 (no banking) - Checksum is bank 0 + bank 1 + bank 2 + bank 3 | |
| SUPER CHINESE | $0B16 | Super Chinese (Japan) | Mapper 206 (no banking) - Checksum is bank 0 + bank 1 + bank 2 + bank 3 | |
| BABEL | $F4C8 | Babel no Tou (Japan) | Mapper 206 - Checksum is bank 0 + bank 0 + bank 2 + bank 3 | |