summaryrefslogtreecommitdiff
path: root/home/predef.asm
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2014-05-31 01:22:15 -0700
committeryenatch <yenatch@gmail.com>2014-05-31 12:25:34 -0700
commit6d8c6055b5d5910d4da6997199f0984f8cd9149f (patch)
tree68221d3fa5ee5a45b8bba52a331c7237c58ca6e8 /home/predef.asm
parentd424eb44385c8f9e02d982b715a658e395e56c4b (diff)
Split more code out of home.asm.
Diffstat (limited to 'home/predef.asm')
-rw-r--r--home/predef.asm50
1 files changed, 50 insertions, 0 deletions
diff --git a/home/predef.asm b/home/predef.asm
new file mode 100644
index 00000000..1777d09f
--- /dev/null
+++ b/home/predef.asm
@@ -0,0 +1,50 @@
+Predef::
+; Call predefined function a.
+; To preserve other registers, have the
+; destination call GetPredefRegisters.
+
+ ; Save the predef id for GetPredefPointer.
+ ld [wPredefID], a
+
+ ; A hack for LoadDestinationWarpPosition.
+ ; See Func_c754 (predef $19).
+ ld a, [H_LOADEDROMBANK]
+ ld [wPredefParentBank], a
+
+ push af
+ ld a, BANK(GetPredefPointer)
+ ld [H_LOADEDROMBANK], a
+ ld [$2000], a
+
+ call GetPredefPointer
+
+ ld a, [wPredefBank]
+ ld [H_LOADEDROMBANK], a
+ ld [$2000], a
+
+ ld de, .done
+ push de
+ jp [hl]
+.done
+
+ pop af
+ ld [H_LOADEDROMBANK], a
+ ld [$2000], a
+ ret
+
+GetPredefRegisters::
+; Restore the contents of register pairs
+; when GetPredefPointer was called.
+ ld a, [wPredefRegisters + 0]
+ ld h, a
+ ld a, [wPredefRegisters + 1]
+ ld l, a
+ ld a, [wPredefRegisters + 2]
+ ld d, a
+ ld a, [wPredefRegisters + 3]
+ ld e, a
+ ld a, [wPredefRegisters + 4]
+ ld b, a
+ ld a, [wPredefRegisters + 5]
+ ld c, a
+ ret