EmuHawk Compatibility Experiment
A simple conversion to standard MBC5 and its result
Conclusion
Changing only the ROM header to standard MBC5 did not make the game playable in EmuHawk.
EmuHawk 2.11.1 recognized the experimental ROM as MBC5 in both Gambatte and SameBoy. After 1,800 frames, including Start and A input, the display nevertheless remained solid white and the CPU did not enter a normal game loop.
Within the scope of this repository, use hhugboy or mGBA, both of which support NT-new, to run the game. The corrected ROM has been verified with mGBA 0.10.3.
The ROM and IPS produced with --experimental-mbc5 exist for header-conversion and reproduction tests. They do not work.
Hypothesis
mGBA 0.10.3 identifies this ROM as GB_UNL_NT_NEW from its header CRC32, 8628A287. In mGBA’s implementation, NT-new adds split bank switching in 8 KiB units after writes to $1400-$14FF, in addition to ordinary MBC5 behavior.
EmuHawk 2.11.1’s standard Game Boy cores, by contrast, have no NT-new mapper. A simple MBC5 conversion cannot independently select the regions at $4000-$5FFF and $6000-$7FFF. This difference is the leading explanation for the white screen.
Method
In addition to the stage-transition correction, the following header fields were changed.
| Item | Source ROM | Experimental build |
|---|---|---|
Cartridge type $0147 |
$01 (MBC1) |
$19 (MBC5) |
Header checksum $014D |
$22 |
$0A |
Global checksum $014E-$014F |
$4B10 |
$46E7 |
| Header CRC32 | 8628A287 |
31194C44 |
Use this command to generate the files:
node tools/build-stage-transition-patch.mjs `
pokemon_jade_pikachu.gb `
build/pokemon_jade_pikachu_stage_transition_fixed_experimental_mbc5.gb `
build/pokemon_jade_pikachu_stage_transition_fix_experimental_mbc5.ips `
--experimental-mbc5The generation process verifies the header and global checksums and the result of reapplying the IPS.
Results in EmuHawk
| Environment | Detection | After 1,800 frames |
|---|---|---|
| EmuHawk 2.11.1 / Gambatte | MBC5 |
White screen; no normal game loop |
| EmuHawk 2.11.1 / SameBoy | MBC5 ROM |
White screen; no normal game loop |
| EmuHawk 2.11.1 / GBHawk | Automated test incomplete because a BIOS was required | Not verified |
At the end of the test, Gambatte reported PC=$0040 and SameBoy reported PC=$FFFF. Both had updated display-control registers, but the visible output remained solid white.
Work that would be required next
There are two realistic options:
- Implement the NT-new mapper in an EmuHawk Game Boy core.
- Rearrange the ROM so that the combinations of 8 KiB banks actually used by the game become standard 16 KiB MBC5 banks.
The first option requires a custom emulator build. The second might run in an unmodified EmuHawk build, but it would require tracing every bank change, expanding the ROM, rewriting the switching routines, and regression-testing every stage.
For now, the mGBA-compatible build remains the primary correction, while the MBC5 build is limited to experimental use.