summaryrefslogtreecommitdiff
path: root/home/predef.asm
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2013-09-09 22:44:48 -0400
committeryenatch <yenatch@gmail.com>2013-09-09 22:44:48 -0400
commit84a9b3907b9db08ee38e873554d8a6b4ac1b72b4 (patch)
treee804b9ed15832481d632904f42355743d9232515 /home/predef.asm
parent6439706943b53ad756d481dea683fa8ee97f4981 (diff)
rename common/ to home/
Diffstat (limited to 'home/predef.asm')
-rw-r--r--home/predef.asm54
1 files changed, 54 insertions, 0 deletions
diff --git a/home/predef.asm b/home/predef.asm
new file mode 100644
index 000000000..bd34a87a1
--- /dev/null
+++ b/home/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
+