Saturday, August 18, 2018

Investigating the Games on the NES, Famicom and SNES Classic Editions

Nintendo's latest efforts to "cash in" on its retro properties, the NES Classic Edition and the SNES Classic Edition, have gone very well.  The hardware is inexpensive to make and the games, for the most, part, are held in high regard.  The consoles sell very well, sometimes too well.  All across the three major markets, they were in high demand at launch.  One interesting thing about these devices for me is the software included on these devices.  These are emulator boxes and they run ROMs, just like the Virtual Console for the Wii U and Wii and previous releases for the GameCube.  Let's see what kind of ROMs they use.

Before we begin, let us remind ourselves of the games included with each system, starting with the 8-bit console :

NES Classic/Mini Edition Family Computer Classic Mini Family Computer Classic Mini Shonen Jump Edition
Balloon Fight Balloon Fight
Castlevania Akumajou Dracula
Donkey Kong Donkey Kong
Double Dragon II: The Revenge Double Dragon II: The Revenge
Dr. Mario Dr. Mario
Excitebike Excitebike
Galaga Galaga
Ghosts 'n Goblins Makaimura
Gradius Gradius
Ice Climber Ice Climber
Kirby's Adventure Hoshi no Kabi: Yume no Izumi no Monogatari
Mario Bros. Mario Bros.
Mega Man 2 Rockman 2: Dr. Wily no Nazo
Metroid Metroid
Ninja Gaiden Ninja Ryukenden
Pac-Man Pac-Man
Super C Super Contra
Super Mario Bros. Super Mario Bros.
Super Mario Bros. 2 Super Mario USA
Super Mario Bros. 3 Super Mario Bros. 3
Legend of Zelda, The Zelda no Densetsu: The Hyrule Fantasy
Zelda II: The Adventure of Link Legend of Zelda 2: Link no Bouken
Bubble Bobble

Castlevania II: Simon's Quest

Donkey Kong Jr.

Final Fantasy

Kid Icarus

Punch-Out!! Featuring Mr. Dream

StarTropics

Tecmo Bowl


Atlantis no Nazo

Downtown Nekketsu Koushinkyoku: Soreyuke Daiundoukai

Final Fantasy III

Mario Open Golf

Downtown Nekketsu Monogatari

Solomon no Kagi

Tsuppari Oozumou

Yie Ar Kung-Fu


Ankoku Shinwa: Yamato Takeru Densetsu


Captain Tsubasa


Captain Tsubasa Vol. II: Super Striker


Dragon Ball 3: Goku Den


Dragon Ball Z: Kyoushuu! Saiyajin


Dragon Ball: Shen Long no Nazo


Dragon Quest


Famicom Jump II: Saikyou no Shichinin


Famicom Jump: Hero Retsuden


Hokuto no Ken


Hokuto no Ken 3: Shin Seiki Souzou: Seiken Retsuden


Kinnikuman: Kinniku Ookurai Soudatsusen


Kinnikuman: Muscle Tag Match


Magical Taruruuto-kun Fantastic World!!


Rokudenashi Blues


Saint Seiya: Ougon Densetsu


Saint Seiya: Ougon Densetsu Kanketsu-hen


Sakigake!! Otokojuku Shippuu Ichi Gou Sei


Sekiryuuoo


Tenchi o Kurau

Disk System titles are in bold.

1.  The NES Classic Edition

The NES Classic Edition uses standard ROMs in the iNES format (header + prg + chr if any).  If you do a CRC32 comparison between the ROMs from the Classic and the ROMs classified by No-Intro, one of the premier ROM dump verification groups, in most instances they will be the same.  But there are some games where there was more than one ROM version released and dumped.  Super Mario Bros. 2 and 3 each have a Revision A ROM in addition to a Revision-less ROM, for example.  So does The Legend of Zelda, Castlevania, Dr. Mario, Kirby's Adventure and Double Dragon 2.  Pac-Man was released three times during the NES's lifecycle, once by Tengen in a licensed cartridge, the second time by Tengen in an unlicensed cartridge and the third by Namco itself as a licensed cartridge.

In the NES Classic Edition, all games that have a ROM revision use the latest ROM revision with the exception of The Legend of Zelda.  The Legend of Zelda uses the old revision, perhaps because it does not include a text box telling you to hold the power button in when you reset.  While the Virtual Console ROM used for Zelda II had its flickering effects reduced, in the NES Classic Edition the games are patched prior to booting up and the anti-seizure switch can be turned off via Hakchi.  Nintendo has been acutely conscious of epilepsy triggering effects in its classic games since the early 2000s.  With the default firmware, you get a double dose of protection.  Using RetroArch will bypass this.

As you might expect, the version of Pac-Man contained in the NES Classic Edition is Namco's late release.  In addition to copyright text, it has a nicer ghost-naming screen compared to the Tengen versions.

One curiosity is that Kid Icarus did have a Revision A, but Revision A was only released in Europe.   It seems to play just fine on NTSC consoles, and the NES Classic Edition does not emulate a PAL console.  Unfortunately, both revisions of Kid Icarus sound slow and play slow in a PAL console.

As has been noted, the version of Tecmo Bowl included in the NES Classic Edition lacks all the player names used in the original cartridge.  This ROM is edited, not patched.  The ROM is identical to the ROM GoodNES claims to have been extracted from the Virtual Console.

Finally, Excitebike is interesting.  The original Excitebike cartridge allowed the player to save and load tracks to a cassette deck, the Data Recorder, attached to the Family BASIC Keyboard plugged into the Famicom Expansion Port.  Nintendo left in this functionality when it used the same ROM chips in the US cartridges.  The manual indicated they were for future expansion, but the NES never got a peripheral which could save and load tracks.

Excitebike on the NES Classic will save and load a player-made track to battery-backed SRAM.  The real cartridge has no SRAM on it and only has a 16KB Program ROM.  Nintendo hacked this functionality in, expanding the Program ROM to 32KB.  No mapper designation is required.  This ROM is identical except for one byte with the Japanese Virtual Console Excitebike ROM found in GoodNES.  Nintendo did the same thing for Mach Rider but not for Wrecking Crew on the Virtual Console.  Wrecking Crew got saving capabilities other than the Data Recorder when it was ported to the Famicom Disk System.

2.  The Famicom Classic Mini and Gold Shonen Jump Edition

The Famicom Classic Mini also has a few surprises.  Not as many of its cartridge games have revisions, but for those that do, Donkey Kong, Mario Open Golf, Super Mario Bros 3 & Yie Ar Kung-Fu, the latest revision is used.  Donkey Kong is unusual in that its revision-less ROM was only released in Japan.  Japan and later the US and Europe got revision A.  Yie Ar Kung Fu is known to come in rev. 1.2 and 1.4, 1.4 can be found on the Famicom Classic Mini.  Of all the cartridge based games, none are unusual except for Atlantis no Nazo, which uses the ROM extracted from the Virtual Console.  This ROM differs from the original cartridge ROM by about 12 bytes, so not much was likely changed.

The games that require emulation of the Famicom Disk System are more interesting.  The BIOS included is the early Nintendo BIOS with the credits-less test screen.  The games use an unusual format which Nintendo identifies the .qd file extension.  "qd" presumably stands for Quick Disk, the product name Mitsumi used for the 3" floppy disks used in the Famicom Disk System.

A normal FDS dump is 65500 bytes per disk side dumped.  Most games come on one or two disk sides, giving dumps a typical file size of 65500 or 131000 bytes.  The two-sided games Nintendo included in Famicom Minis have a file size of 131,072 bytes, exactly 2^17. Why the extra bytes?

The Famicom Disk System contains a rudimentary file system structure on each disk side.  Each side may have up to 255 files, although most contain 8-16 files.  Each disk side has a block of data giving the disk info, a block indicating the number of files present on the disk side, a file header block for each file on the disk and a block for designating the presence of the data in each file.  At the end of each block on the disk, there is a 16-bit CRC value.

In standard FDS disk dumps, such as those which have come from TOSEC and No-Intro, there is no CRC data at the end of each block.  An emulator can calculate the CRC for the bytes within the block and report them to the FDS BIOS.  Nintendo's .qd files include the CRC values after each block.  Many emulators do not know what to do with these extra bytes and give read errors.  These .qd files can be made readable in emulators by zeroing out the CRC values and reducing or expanding the bytes at the end of each side so that the side equals 65500 bytes.

If this was some kind of protection mechanism, it is easily (if tediously) bypassed.  I am inclined to believe that these games are taken from dumps of the ROM masters used in the Famicom Disk System Disk Writer to write games to disk.  The Disk Writer had a bank of cartridges shaped like NES cartridges.  In this case, there is value to having the CRC values burnt into the ROM.  As the Disk Writer copied each data block onto a customer's disk, it should have checked not only whether it wrote the data correctly using the checksum generated on the disk but also compared that checksum with the checksum present on the cartridge.

In each case, Nintendo's four FDS games included on the Famicom Classic Mini have "clean" save files.  Compared to my instructions here : http://nerdlypleasures.blogspot.com/2015/06/cleaning-saved-information-from-famicom.html, the files end up being almost identical in every instance.  In fact, the only difference between these "official dumps" and my No-Intro dumps is the data in the first data block, which is Metadata about the game, not code or graphics.  Kinnikuman: Kinniku Ookurai Soudatsusen, the only FDS game on the Shonen Jump Edition, does not save to disk.  Interestingly, the Metroid version found on the Famicom Mini is v1.3, only v1.2 had been dumped.  Both Zeldas use their latest versions, v1.1.

3.  The SNES Classic Edition and Super Famicom Classic Mini

Things are rather strange with the 16-bit boxes.  Let's refresh our memories as to the games contained on these machines :

Super NES Classic/Mini Edition Super Famicom Classic Mini
Contra III: The Alien Wars Contra Spirits
Donkey Kong Country Super Donkey Kong
Final Fantasy III Final Fantasy VI
F-Zero F-Zero
Kirby Super Star Hoshi no Kirby Super Deluxe
The Legend of Zelda: A Link to the Past Zelda no Densetsu - Kamigami no Triforce
Mega Man X Rockman X
Secret of Mana Seiken Densetsu 2
Star Fox Star Fox
Star Fox 2 Star Fox 2
Super Ghouls 'n Ghosts Chou Makaimura
Super Mario Kart Super Mario Kart
Super Mario RPG: Legend of the Seven Stars Super Mario RPG
Super Mario World Super Mario World - Super Mario Bros. 4
Super Mario World 2: Yoshi's Island Super Mario - Yossy Island
Super Metroid Super Metroid
EarthBound
Kirby's Dream Course
Street Fighter II Turbo: Hyper Fighting
Super Castlevania IV
Super Punch-Out!!

Fire Emblem - Monshou no Nazo

Ganbare Goemon - Yuki Hime Kyuushutsu Emaki

Panel de Pon

Super Formation Soccer

Super Street Fighter II: The New Challengers

The ROMs contained in the SNES Classic have an .sfrom extension. No emulator is known to support .sfrom files fully.  You may note that most of the games in the .sfrom format are substantially greater than their true binary dumps.  Earthbound is a 4MB ROM with a pure binary dump and no added header.  Earthbound as contained on the SNES Classic weighs in at 5.4MB.

When you try to run these .sfrom files in an emulator, the game should run but you will hear either no sound or very wrong sounds.  This is because Nintendo, in the Wii days, used an emulator that did not handle SPC sound data directly.  Instead Nintendo's format extracted and decompressed sound sample data and tacked it onto the end of the ROM.  Sometimes they also included decompressed graphics data as well.

If you want to know which version of a game Nintendo used for its SNES Classic for those games which have more than one version, you won't be able to determine the version by a checksum comparison for the reasons given above.  Fortunately Nintendo did not mess with the internal headers contained in these games, and the version number is contained in a byte within the header.  For all the games on the above list with more than one revision, Nintendo used the latest revision available as shown in No-Intro SNES ROM list.

Many people were disappointed that Nintendo did not release any game using the Super FX chip for the Wii, Wii U or 3DS Virtual Consoles.  With the SNES Classic Mini, these Super FX games were made available again for the first time in twenty years.  But the Super FX ROMs are different from the non-Super FX ROMs, even though they use the .sfrom extension (with one exception).  These ROMs are unmodified other than a 48-byte header tacked onto each end of the file.  Remove that 48-byte header and you can enjoy a pure ROM that will run on any decent emulator, the sd2snes or a reproduction Super FX cartridge.  These ROMs are identical to the latest versions of the ROMs found in No-Intro.

The use of the simple format allowed for the quick distribution of the final Star Fox 2 ROMs.  Also, Super Formation Soccer was never released for the Virtual Console, so it also uses the simple 96-byte .sfrom format.  Apparently the emulator in the SNES Classic can handle both types of formats, but some games added with Hakchi will not work unless they are converted to the complex .sfrom format using tools available on the Internet.

2 comments:

Unknown said...

"Nintendo used the latest revision available as shown in No-Intro SNES ROM list."

That can't be right. Zelda and Super Mario RPG both appear to be the Virtual Console revisions. Zelda has the altered flashing on the title screen when the the sword drops down. Super Mario RPG has the line "bugger" replaced with "pest", the ground color in Moleville and a couple other areas is darker, flashing attacks have been modified, etc.

Anonymous said...

If I remember correctly, these modifications were actually done via a patch contained in the Virtual Console emulator for each individual game, while the ROMs themselves were untouched. I would assume the SNES Classic does the same thing. I hope the author of this article can correct me if I am wrong, however.