You should be able to use external RAM for the stack pointer, and I don't believe there's any risk involved in keeping the RAM activated for long periods of time.
I've ran Super Mario Land 2 in a modified GB emulator that shows every cart mapper register access, and from when the game starts on the title screen to a few seconds of gameplay running about on ...
But I've noticed that pressing the pause button again results in execution jumping back to the start of NMI (&0066)
Sure, as the PAUSE button does another MNI. After all, NMI can be stacked like any other interrupt. In fact, even more easy, as noone can stop them from occurring.
But what's really strange is that pressing A+B only once will return from ...
The WX can be freely changed during a frame but the WY cannot. From pandocs:
writing to WX, WY etc. mid-frame shows a more articulated behavior.
For the window to be displayed on a scanline, the following conditions must be met:
WY condition was triggered: i.e. at some point in this frame the value of WY was equal to LY (checked at the start of Mode 2 only)
The solution is to declare the MAIN memory region's size so it ends at the start of the HIMEM memory region and then add fill=yes to MAIN so it get's filled. This will have the same result as using * = $c000 in Turbo Assembler or 64TASS and similar assemblers:
STARTADDRESS: default = $0801;
__LOADADDR__: type = import;