summaryrefslogtreecommitdiff
path: root/common/farcall.asm
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-09-09 15:56:49 -0500
committerBryan Bishop <kanzure@gmail.com>2013-09-09 15:56:49 -0500
commit37e1aa4e8ec2400ba97db4c767bd3a9fcd43a1ac (patch)
tree68cb6273ed885d69512c4ba099298aad1534c6e4 /common/farcall.asm
parent35324ae43f845f4ce8346ef05fdf1bed8bed1e28 (diff)
parent705e6824687ed247a28cfbaedd47bf33bd1da32a (diff)
Merge branch 'yenatch/split-predefs-specials-stds' into fix-split-predefs-specials-stds
https://github.com/kanzure/pokecrystal/pull/198
Diffstat (limited to 'common/farcall.asm')
-rw-r--r--common/farcall.asm55
1 files changed, 55 insertions, 0 deletions
diff --git a/common/farcall.asm b/common/farcall.asm
new file mode 100644
index 000000000..bdee3bf38
--- /dev/null
+++ b/common/farcall.asm
@@ -0,0 +1,55 @@
+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 Function2d82
+; 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 [$cfb9], a
+ ld a, c
+ ld [$cfba], a
+
+; Restore the working bank.
+ pop bc
+ ld a, b
+ rst Bankswitch
+
+ ld a, [$cfb9]
+ ld b, a
+ ld a, [$cfba]
+ ld c, a
+ ret
+; 2d82
+
+Function2d82: ; 2d82
+ jp [hl]
+; 2d83
+