summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2013-09-08 23:54:12 -0400
committeryenatch <yenatch@gmail.com>2013-09-08 23:54:37 -0400
commitabb7f2fa20e49cf56a55c81d4ec86431e3009098 (patch)
treebf2fed87ded013b7bf00968a366d010eaa7672e6 /common
parent4778276f33c59bb0bc56cb381d4fe1dc8da1f9b8 (diff)
split Predef into common/predef.asm
Diffstat (limited to 'common')
-rw-r--r--common/predef.asm54
1 files changed, 54 insertions, 0 deletions
diff --git a/common/predef.asm b/common/predef.asm
new file mode 100644
index 000000000..bd34a87a1
--- /dev/null
+++ b/common/predef.asm
@@ -0,0 +1,54 @@
+Predef: ; 2d83
+; Call predefined function a.
+; Preserves bc, de, hl and f.
+
+ ld [PredefID], a
+ ld a, [hROMBank]
+ push af
+
+ ld a, BANK(GetPredefPointer)
+ rst Bankswitch
+ call GetPredefPointer ; stores hl in PredefTemp
+
+; Switch to the new function's bank
+ rst Bankswitch
+
+; Instead of directly calling stuff,
+; push it to the stack in reverse.
+
+ ld hl, .Return
+ push hl
+
+; Call the Predef function
+ ld a, [PredefAddress]
+ ld h, a
+ ld a, [PredefAddress + 1]
+ ld l, a
+ push hl
+
+; Get hl back
+ ld a, [PredefTemp]
+ ld h, a
+ ld a, [PredefTemp + 1]
+ ld l, a
+ ret
+
+.Return
+; Clean up after the Predef call
+
+ ld a, h
+ ld [PredefTemp], a
+ ld a, l
+ ld [PredefTemp+1], a
+
+ pop hl
+ ld a, h
+ rst Bankswitch
+
+ ld a, [PredefTemp]
+ ld h, a
+ ld a, [PredefTemp + 1]
+ ld l, a
+ ret
+; 2dba
+