Kopitiam Bot

News · Lifestyle · Tech

Nintendo hid a load-your-own NES emulator inside a GameCube classic

(Source: arstechnica.com)

Fans of the early-2000s era GameCube version of the original Animal Crossing likely remember the game including a handful of emulated NES titles that could be played by obtaining in-game items for your house. What players back then didn’t know is that the NES emulator in Animal Crossing can also be used to play any generic NES ROM stored on a GameCube memory card.

Security researcher James Chambers discovered the previously unused and undocumented feature buried in the original Animal Crossing game code and detailed his methodology and findings in a technically oriented Medium post this week.

The key to opening Animal Crossing’s NES emulator is the game’s generic “NES console” item. Usually, this item simply tells players who try to use it that “I want to play my NES, but I don’t have any software” (separate in-game items are used to play the NES ROMs that are included on the Animal Crossing disc).

While searching the Animal Crossing code for access to hidden developer menus, though, Chambers discovered that activating this in-game NES actually causes the game to mount and search the player’s memory card for valid NES ROM files, using functions like “famicom_get_disksystem_titles” and “memcard_game_list.” After a good deal of debugging through an emulator, Chambers deciphered the specific file format needed to get Animal Crossing to recognize NES ROM files stored on the memory card, which involves inserting specific checksum, file name, and ROM header values in specific locations before the game data itself.

After a bit of metadata and emulator tweaking, Chambers says he was able to load Mega Man, Pinball and Battletoads onto the GameCube through the in-game emulator, as well as a homebrew test ROM created years after Animal Crossing was made.

Interestingly enough, Animal Crossing’s memory card access hole also leads to a buffer overflow error that can let users execute arbitrary, user-defined code on the GameCube itself. One Animal Crossing hacker has already demoed how this method can be used to generate infinite items in a stock copy of Animal Crossing, but the same general method could load homebrew code onto the GameCube without the need for hardware mods or external cheat devices like the GameShark.

The best laid plans…

While being able to load NES games onto a GameCube is fun, the most interesting part of this discovery is probably what it suggests about an unexplored branch of potential Nintendo history. Remember that the code to load NES games from a memory card was put into Animal Crossing by Nintendo decades ago, not by some modern-day modification of the original game code. That strongly suggests Nintendo was at some point planning an official way to load additional NES files into Animal Crossing through the memory card.

It’s hard to say how this distribution might have worked. Maybe special ROM-packed memory cards would have been included with new editions of the game (Nintendo actually did sell versions of the game packaged with memory cards that unlocked special presents for players). Maybe Nintendo would have given such memory cards away in contests. Or maybe, in an alternate timeline, a machine akin to Japan’s Japanese Famicom disk-writer kiosk could have let players load NES games onto their own memory cards.

Further Reading

Hackers find “official,” usable PSP emulator hidden in PS4’s PaRappaRegardless, it seems that Nintendo may have been planning ahead for some form of retro-game distribution long before the Wii Virtual Console became a thing in 2006. And if you want to make use of Nintendo’s unused GameCube-to-NES emulation features today, Chambers has released GitHub source code that lets you generate your own Animal Crossing-friendly NES ROM files. You can test out those files for yourself using a virtual memory card loaded into the Dolphin emulator or on an actual GameCube using special memory card hardware.

More Info: arstechnica.com

%d bloggers like this: