From fd40ba2eccabe757afee3a6d14b595437acc6ac2 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Wed, 25 Oct 2023 07:21:48 +0200 Subject: [PATCH] Add banking helpers. --- bin/DMGTRIS.GBC | Bin 65536 -> 65536 bytes src/bankid.asm | 9 ++++++++ src/banking.asm | 46 ++++++++++++++++++++++++++++++++++++++++ src/include/globals.asm | 2 +- src/sfx.asm | 15 +++++-------- 5 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 src/banking.asm diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index 309339fd567ad2ac66097b2d15db56ea2d03b134..10e073a1174aca994e7bb54a265198b0eb6c49ed 100644 GIT binary patch delta 1989 zcmZ{le{2(F7{~8zuWJjV>;`mY!geo(tl*%ubkNqdTR_-|BrT(3Dh?({BxJZKF%CCq zQAX65*m`IRG18#^fd-dQAx0A*Fk-LtRpUSVgI|Xc;wD1l2G~08eC~Q>eD7KA%q zwV+B_6#pMWi_q$i3TsJv8L9V>ueh64Z+Z+tT+hSMkb5CKKYPu`>iinv>Y#9qseCNt zr-iFz7a~!lJ_l#lc4wdK~ zCAweL7AiYJ{&r+*E|c|6%%+%>L@qk9JH;GVL~DvU0V4Uu`~#ZBIS=f4z^s)Qh?UQi z8KH#I>d`s*3@}t2Q$vWNVL_6iy0gfqcG1gS06(5GC0e{>`HHbXQmM+hEOwQ^sy6uZAT$7`ToK-6wY_Zr4#aY<+oCRc`OMMA|(j}B?&8)$*|AlU(Q@=fxHib_}MrrR|J5q6T_{27ITQUjbg8;uh62=lplTb`>l+a%CtCb#2VRmvR^{lAb>Q_Gq?a}6YY>qwCu(f>gv)U1;5_R| zANQ1NF6!evuDWS`4Z;ZT*KL_=n+1HAYfgP%1HLJpv5i~L*s^flhU-tu2`D6E_Dc}# zQNJEKu;g{_l&iMJ=Yru}){<{_I55}((D)YA{KwThFX$4f^hTG6(z{)vCjGffq|;Fs z8EClGBwCj~;K=~@VZ(c+6}nMXc*jR|bxPP^wB zSGn`rgt+YdD(;56db*B{=M4$bz{c{%ggAqn;^|%#@gU0tf%|6?+)el4)(V%U+AlR4 o-4hq@_1atZ*aO-taW3K65nF(h2JbDMUj3Us*_>;7q$9cT|8^B)t^fc4 delta 1986 zcmZ{keM}Q)9LJxhy>e7)$2n~)QFo7sAX6%}KtVZ)n}V691i)mXYF<>ZN^~4wmCOg2EW( zLz3DNRXr3VI_#sQhUV7Ljw#R(SDWh~xG-aPQZ4*$US53vBH-40|)~YG~F`k1Q-LQ*9 z-?IvzJ)-=oheT&xlY?XgpYBt z6#d;pd@=64E*fIo5Qykk%TAb96(Kltzr(COAYOZ)92iUb$l^=dJHVj6xe(WwC0V`x_a_eG|%0MBTAF3dZj+Nc<0|4A!Zz!1@-U#siFKPECwtRz@?B6SsYY>i*_qIa zfHl}k9t>bc+gqeQxg&nH_-e7AlHiBhDP7p87Y@u8<{E{qdLc4f*lD!do?c_N z&}J0g3D~sN-Jhoy5nJ7{5LPCII%NueBjheM%-e)60Iy_#3BVcv8#CY-fFOXz48Q;? z0lbs}M*)-q@MnM-z#;&fGT=CXzX3D>2HBEaeR9rHxno1rj*Wm?(SDU3hqRqP)_lTw5;<-H)%9t!z+7_2A z0KU_^Xk||Yxs$qBGF5o7Bmvh1T=!i=&`87l*C6;ofrSY?4U1>JFD%*Oh2^}3S$~O9 zf21Cu^*!kMr?+cqn^#369bOfW9P_HCks+_jj0}2df5qMPYT@d~GVK=+SA2xa#GK0A zaNl3~JuZtbu6iHmGvllzEFaI61oOC6BCL4Mx75?*OPVEh&1D!FNxjDpB`p%1`PpQS zq%PzKldJ@v?m#kEQkV06Nvouq#eaOArKhT~Ylg!8%M{%0kKon-m#aWXt+V=Oetp>G lu0Q1Vn{S*G`>OXv3u^9K#J6kaMcKOP^&r?N8=ekn;y+;MEJpwU diff --git a/src/bankid.asm b/src/bankid.asm index 71ba494..36a9c05 100644 --- a/src/bankid.asm +++ b/src/bankid.asm @@ -20,12 +20,21 @@ DEF BANKID_ASM EQU 1 SECTION "Bank ID 0", ROM0[$0] + REPT 7 + rst $00 + ENDR db $00 SECTION "Bank ID 1", ROMX[$4000], BANK[1] + REPT 7 + rst $00 + ENDR db $01 SECTION "Bank ID 2", ROMX[$4000], BANK[2] + REPT 7 + rst $00 + ENDR db $02 diff --git a/src/banking.asm b/src/banking.asm new file mode 100644 index 0000000..a0ee652 --- /dev/null +++ b/src/banking.asm @@ -0,0 +1,46 @@ +; DMGTRIS +; Copyright (C) 2023 - Randy Thiemann + +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. + +; You should have received a copy of the GNU General Public License +; along with this program. If not, see . + + +IF !DEF(BANKING_ASM) +DEF BANKING_ASM EQU 1 + + +INCLUDE "globals.asm" + + +SECTION "High Banking Variables", HRAM +hBankBackup: ds 1 + +; 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, and 0x38 +SECTION "Switch Bank", ROM0[$08] + ; Saves the current bank and switches to the bank in b. +RSTSwitchBank:: + ld a, [rBANKID] + ldh [hBankBackup], a + ld a, b + ld [rROMB0], a + ret + +SECTION "Restore Bank", ROM0[$18] + ; Restore the bank previously saved. The current one is not saved. +RSTRestoreBank:: + ld a, [hBankBackup] + ld [rROMB0], a + ret + + +ENDC diff --git a/src/include/globals.asm b/src/include/globals.asm index c4f0e80..b8b270e 100644 --- a/src/include/globals.asm +++ b/src/include/globals.asm @@ -215,7 +215,7 @@ DEF FIELD_TOP_LEFT EQU $9800+1 DEF EASTER_0 EQU $9845 DEF EASTER_1 EQU $9865 -DEF rBANKID EQU $4000 +DEF rBANKID EQU $4007 ENDC diff --git a/src/sfx.asm b/src/sfx.asm index 4da20dd..2adc669 100644 --- a/src/sfx.asm +++ b/src/sfx.asm @@ -2432,10 +2432,8 @@ SFXKill:: ; This play routine must be called every frame. SFXPlay:: ; Bank to SFX bank. - ld a, [rBANKID] - ld e, a - ld a, BANK("SFX Data") - ld [rROMB0], a + ld b, BANK("SFX Data") + rst RSTSwitchBank ; Load the playhead position into HL. ldh a, [hPlayhead] @@ -2446,8 +2444,7 @@ SFXPlay:: ; Nothing to do if it's a null ptr. or a, l jr nz, .getRegister - ld a, e - ld [rROMB0], a + rst RSTRestoreBank ret ; Otherwise, get the register to write to. @@ -2458,8 +2455,7 @@ SFXPlay:: ; If it's $FE, then we're done. Check if there's more for us in the queue. cp a, $FE jr nz, :+ - ld a, e - ld [rROMB0], a + rst RSTRestoreBank call SFXProcessQueue ret @@ -2484,8 +2480,7 @@ SFXPlay:: ldh [hPlayhead], a ld a, h ldh [hPlayhead+1], a - ld a, e - ld [rROMB0], a + rst RSTRestoreBank ret