If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Classic NES Series

From The Cutting Room Floor
Jump to navigation Jump to search
Classic NES Series

Also known as: Famicom Mini (JP), NES Classics (EU/AU)
Developer: Nintendo
Publisher: Nintendo
Platform: Game Boy Advance
Released in JP: February 14, 2004
Released in US: June 2, 2004
Released in EU: July 9, 2004
Released in AU: 2004


PiracyIcon.png This game has anti-piracy features.


The Classic NES Series, also known as the Famicom Mini series in Japan, is a series of Game Boy Advance cartridges with emulated ROMs slapped onto them. The carts are infamous for the fact that the games' graphics have been resized to account for the GBA's screen resolution, making the sprites look rather ugly, with the most prominent example naturally being "Hunchback Super Mario Bros."

Still, at the time, they were a decent official way to play Famicom and NES games on the go (certainly less cumbersome than the e-Reader in that regard).

Anti-Piracy

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Document this fully. Endrift's blogpost is a good resource. Also, doesn't the use of mirrored memory also trip up some flashcarts?
Hmmm...
To do:
Rewrite to be more accurate to what's happening.

Game Pak error? But I downloaded it, dammit!

If the cartridge detects that it is pirated, the above error screen appears. Lower-accuracy emulators (such as VisualBoyAdvance) can also trigger this screen.

...Wait, lower-accuracy emulators? Yes, you're reading that right. Among emulator developers, the Classic NES Series is believed to be the earliest examples of measures specifically against emulation.

Save Auto-Detecting Measure

GBA cartridges can have one of three ways of storing save data: they can either have battery-backed SRAM, Flash memory, or use EEPROM. The way emulators support this is that they catch the first attempt to read or write to one of the three types of save data, and set up the appropriate areas in memory. The Classic NES Series tries to catch emulators off-guard: even though all games use EEPROM for saving, they attempt to write to SRAM anyway, which will fail on real hardware due to the obvious lack of an SRAM chip. If the write, however, succeeds (due to the emulator having caught the call and set up an appropriately sized SRAM area), the Game Pak Error screen displays.

Executing Code in VRAM

The Classic NES Series copy executable code to VRAM (video RAM) and try to execute the code directly from video RAM. The GBA's architecture allows this, but many emulators did not; if the attempt to execute code from VRAM fails, the Game Pak Error screen displays.

Usage of "Mirrored Memory"

The GBA uses an ARM chip that uses a 32 bit address space, however the device itself has only enough RAM to require an 18 bit address space. The GBA architecture uses the top 8 bits to signal what device should have access to a memory address, and the bottom 18 for the actual memory address. This leaves 6 bits in the middle that are technically unused, and due to a quirk in the GBA's processor, these bits are ignored when determining the address being accessed. The Classic NES Series uses this quirk to detect and confuse some low-accuracy emulators: memory addresses with those middle 6 bits set would effectively "mirror" the memory addresses of those without those bits set. The Classic NES Series would, then, write to one section of memory and then try to read from one of the "mirror" addresses.