diff options
Diffstat (limited to 'home/farcall.asm')
-rw-r--r-- | home/farcall.asm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/home/farcall.asm b/home/farcall.asm new file mode 100644 index 00000000..7c9fe105 --- /dev/null +++ b/home/farcall.asm @@ -0,0 +1,54 @@ +FarCall_de:: ; 2d54 +; Call a:de. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call .de + jr ReturnFarCall + +.de + push de + ret +; 2d63 + + +FarCall_hl:: ; 2d63 +; Call a:hl. +; Preserves other registers. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call FarJump_hl +; 2d6e + +ReturnFarCall:: ; 2d6e +; We want to retain the contents of f. +; To do this, we can pop to bc instead of af. + + ld a, b + ld [wFarCallBCBuffer], a + ld a, c + ld [wFarCallBCBuffer + 1], a + +; Restore the working bank. + pop bc + ld a, b + rst Bankswitch + + ld a, [wFarCallBCBuffer] + ld b, a + ld a, [wFarCallBCBuffer + 1] + ld c, a + ret +; 2d82 + +FarJump_hl:: ; 2d82 + jp [hl] +; 2d83 |