diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-09-09 15:59:08 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-09 15:59:08 -0500 |
commit | 3a2dbb5289e745dfb5f26844148c0981f14e8fcf (patch) | |
tree | dfb418aa41502c67ae3f75bab4d3df91b5cfd6c1 /common/predef.asm | |
parent | 37e1aa4e8ec2400ba97db4c767bd3a9fcd43a1ac (diff) | |
parent | abb7f2fa20e49cf56a55c81d4ec86431e3009098 (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/predef.asm')
-rw-r--r-- | common/predef.asm | 54 |
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 + |