That's expected, you need to configure manual JIT patches and in some cases, configure self modifying code patches, this is achieved by using no$GBA debugger, the instructions that need patching are msr, mrs and movs pc, as for self modifying patches, it needs a bit more of work since reverse engineering is involved, and you need to inspect VRAM area, where some of this gets executed most of the times.
From the GBARunner2 thread:
is just a combination of hicode (expected), self modifying code (most romhacks use the "better sound mixer patch") and manual JIT patches (GBARunner specific patch addresses for performance).
Also, RTC doesn't work because it hasn't been implemented yet, is not a romhack issue.
Any romhack that doesn't contain "unreachable" hicode (code beyond 0x08F00000, which isn't currently supported) will run just fine with proper manual JIT patches and Cache invalidation patches (both supported by GBARunner3).
For example, Pokémon Unbound works with Emerald manual JIT patches and 0x0880DEF0 address for cache invalidation, like this:
JavaScript:
{
"runSettings": {
"jitPatchAddresses": [
"0x08000208",
"0x08000214",
"0x08000258",
"0x0800034C",
"0x08000358",
"0x08000378",
"0x08000384",
"0x08000394"
],
"selfModifyingPatchAddresses": [
"0x0880DEF0"
]
}
}
You can save this as "BPEE02.json" inside _/gba/configs.
Then modify Unbound rom using a HEX editor with this (to avoid conflicts with a base emerald rom):
Code:
000000A0: 50 4F 4B 45 4D 4F 4E 20 46 49 52 45 42 50 45 45
000000B0: 30 31 96 00 00 00 00 00 00 00 00 00 02 73 00 00
With these steps, Unbound will work just fine, with some minor performance issues if you have sound set to "High Quality" (Mid is recommended).
This process can be applied to other romhacks, but addresses for manual JIT patches may be a bit different depending of the romhack, and cache invalidation addresses are ALWAYS different, since the better sound mixer patch allocates itself in different locations depending on the size of the romhack.