Mega Drive Unlicensed Game Emulation Notes

From Sega Retro

TODO: Is there a better category? And I have to add everything =P (plus ROM addresses, SRAM specifics, etc.)

Unlike official Mega Drive games, unlicensed games usually have copy protection schemes, SRAM mapping oddities, or other hardware quirks that emulator authors should take note of if they want their emulators to work with these games. sha1sums of dumps to watch out for are given; make sure to only apply the changes on the listed sha1sums! Some modifications, such as the present dump of Jiu Ji Ma Jiang II: Ye Yan Bian, may not react kindly to these custom modifications (in this particular case, the register check's conditional branches are reversed, meaning the game will fail if the registers match); in other cases (as with many ROMs marked [f] in the GoodGen set), the changes are simply not needed.

Note that at present, no unlicensed game is known to use Sega's standard checksum routine, so checksum fixing should NOT be done to these games (especially since some, for example Aq Renkan Awa, are known to store code at $18E).

Games With Constant-Value Hardware Registers

TODO many, many, many more

TODO perhaps this section should be changed to include the phrase "MD Compatible" (with quotes) as Creaton Softech's Ma Jiang Qing Ren: Ji Ma Jiang Zhi, though it uses a similar method, has different registers

A large number of unlicensed games merely read various constant byte values stored at specific addresses in the $400000 region as copy protection.

The game also stores stuff in the $200000-$3FFFFF range and reads stuff back from it; exactly what this should be is unknown (TODO).

Games That Use Mirrored Memory For Copy Protection

TODO not as many: Tiny Toon Adventures 3, Barver Battle Saga, Shui Hu Zhuan, Feng Shen Ying Jie Chuan, and Squirrel King are the only five I know of so far

Some games store memory instead of constant values at the $400000 area, writing byte values to one address and expecting to read them back from a different address. While each game uses different pairs of addresses (some even switching between pairs), all of them will still work if the expected value is read back from all addresses, which would be the safest option for emulator authors.

The game writes byte $55 to $400000 (this address is stored in memory by a calculation at $673E and the byte is stored in the function starting at $2C0C) and expects to read that byte back from $400002; otherwise, the game will reset itself (function with this check is at $2C26).

The game also appears to write to the upper 64KB of ROM (from $F0000 on), but doesn't appear to actually use that area (TODO).