diff options
author | IIMarckus <iimarckus@gmail.com> | 2020-02-09 02:20:05 -0700 |
---|---|---|
committer | IIMarckus <iimarckus@gmail.com> | 2020-02-09 02:20:05 -0700 |
commit | a7e3a999ff21ecac0bfbe7f091f9ff901075a323 (patch) | |
tree | 8032e91c6a426b355b6d1d3505bbc1fdc9c40fa6 /home/predef.asm | |
parent | d561a6d2db176240549fa605dc3e7e1f59e86607 (diff) | |
parent | 0543e933915a65127a8b803789d049478c7889d5 (diff) |
Merge https://github.com/libjet/pokegold
Diffstat (limited to 'home/predef.asm')
-rw-r--r-- | home/predef.asm | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/home/predef.asm b/home/predef.asm index 6b478b56..2796cb67 100644 --- a/home/predef.asm +++ b/home/predef.asm @@ -1,34 +1,52 @@ -Predef:: ; 2e49 (0:2e49) +Predef:: +; Call predefined function a. +; Preserves bc, de, hl and f. + ld [wPredefID], a - ld a, [hROMBank] + ldh a, [hROMBank] push af + ld a, BANK(GetPredefPointer) rst Bankswitch - call GetPredefPointer + call GetPredefPointer ; stores hl in wPredefTemp + +; Switch to the new function's bank rst Bankswitch - ld hl, .return + +; Instead of directly calling stuff, +; push it to the stack in reverse. + + ld hl, .Return push hl - ld a, [wPredefPointerBuffer] + +; Call the Predef function + ld a, [wPredefAddress] ld h, a - ld a, [wPredefPointerBuffer + 1] + ld a, [wPredefAddress + 1] ld l, a push hl - ld a, [wPredefHLBuffer] + +; Get hl back + ld a, [wPredefTemp] ld h, a - ld a, [wPredefHLBuffer + 1] + ld a, [wPredefTemp + 1] ld l, a ret -.return +.Return: +; Clean up after the Predef call + ld a, h - ld [wPredefHLBuffer], a + ld [wPredefTemp], a ld a, l - ld [wPredefHLBuffer + 1], a + ld [wPredefTemp + 1], a + pop hl ld a, h rst Bankswitch - ld a, [wPredefHLBuffer] + + ld a, [wPredefTemp] ld h, a - ld a, [wPredefHLBuffer + 1] + ld a, [wPredefTemp + 1] ld l, a - ret + ret
\ No newline at end of file |