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.

WarningThe experimental build is not playable

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-mbc5

The 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:

  1. Implement the NT-new mapper in an EmuHawk Game Boy core.
  2. 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.