Interesting write up, I do wonder how much of your struggle with the HiROM to LoROM rewrite could be alleviated via better tooling/linking, I assume the issue is swapping things from short to long addressing on subroutine calls and jump tables, because at least coming from a c background, those are sort of beyond the scope of the programmer, it's the linker's job to figure out what subroutines are related and to put them all into banks.