If previously working code starts behaving funny because it's moved to a different ROM location, could that have something to do with the 1 cycle penalty for crossing a page? It's hard to tell exactly what's happening but at a glance the wrong byte is written to GRP0 when it should be erased with a zero. Moving the data used by the kernel to after the kernel solves the bug. I just want to ask if anyone has seen a problem like this before getting down to the nitty-gritty of following the debugger.