Add banking helpers.
This commit is contained in:
		
							parent
							
								
									b384673e30
								
							
						
					
					
						commit
						fd40ba2ecc
					
				
							
								
								
									
										
											BIN
										
									
								
								bin/DMGTRIS.GBC
								
								
								
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/DMGTRIS.GBC
								
								
								
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -20,12 +20,21 @@ DEF BANKID_ASM EQU 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "Bank ID 0", ROM0[$0]
 | 
					SECTION "Bank ID 0", ROM0[$0]
 | 
				
			||||||
 | 
					    REPT 7
 | 
				
			||||||
 | 
					        rst $00
 | 
				
			||||||
 | 
					    ENDR
 | 
				
			||||||
    db $00
 | 
					    db $00
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "Bank ID 1", ROMX[$4000], BANK[1]
 | 
					SECTION "Bank ID 1", ROMX[$4000], BANK[1]
 | 
				
			||||||
 | 
					    REPT 7
 | 
				
			||||||
 | 
					        rst $00
 | 
				
			||||||
 | 
					    ENDR
 | 
				
			||||||
    db $01
 | 
					    db $01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SECTION "Bank ID 2", ROMX[$4000], BANK[2]
 | 
					SECTION "Bank ID 2", ROMX[$4000], BANK[2]
 | 
				
			||||||
 | 
					    REPT 7
 | 
				
			||||||
 | 
					        rst $00
 | 
				
			||||||
 | 
					    ENDR
 | 
				
			||||||
    db $02
 | 
					    db $02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					; DMGTRIS
 | 
				
			||||||
 | 
					; Copyright (C) 2023 - Randy Thiemann <randy.thiemann@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					; 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 <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
| 
						 | 
					@ -215,7 +215,7 @@ DEF FIELD_TOP_LEFT      EQU $9800+1
 | 
				
			||||||
DEF EASTER_0            EQU $9845
 | 
					DEF EASTER_0            EQU $9845
 | 
				
			||||||
DEF EASTER_1            EQU $9865
 | 
					DEF EASTER_1            EQU $9865
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEF rBANKID             EQU $4000
 | 
					DEF rBANKID             EQU $4007
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ENDC
 | 
					ENDC
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								src/sfx.asm
								
								
								
								
							
							
						
						
									
										15
									
								
								src/sfx.asm
								
								
								
								
							| 
						 | 
					@ -2432,10 +2432,8 @@ SFXKill::
 | 
				
			||||||
    ; This play routine must be called every frame.
 | 
					    ; This play routine must be called every frame.
 | 
				
			||||||
SFXPlay::
 | 
					SFXPlay::
 | 
				
			||||||
    ; Bank to SFX bank.
 | 
					    ; Bank to SFX bank.
 | 
				
			||||||
    ld a, [rBANKID]
 | 
					    ld b, BANK("SFX Data")
 | 
				
			||||||
    ld e, a
 | 
					    rst RSTSwitchBank
 | 
				
			||||||
    ld a, BANK("SFX Data")
 | 
					 | 
				
			||||||
    ld [rROMB0], a
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Load the playhead position into HL.
 | 
					    ; Load the playhead position into HL.
 | 
				
			||||||
    ldh a, [hPlayhead]
 | 
					    ldh a, [hPlayhead]
 | 
				
			||||||
| 
						 | 
					@ -2446,8 +2444,7 @@ SFXPlay::
 | 
				
			||||||
    ; Nothing to do if it's a null ptr.
 | 
					    ; Nothing to do if it's a null ptr.
 | 
				
			||||||
    or a, l
 | 
					    or a, l
 | 
				
			||||||
    jr nz, .getRegister
 | 
					    jr nz, .getRegister
 | 
				
			||||||
    ld a, e
 | 
					    rst RSTRestoreBank
 | 
				
			||||||
    ld [rROMB0], a
 | 
					 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ; Otherwise, get the register to write to.
 | 
					    ; 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.
 | 
					    ; If it's $FE, then we're done. Check if there's more for us in the queue.
 | 
				
			||||||
    cp a, $FE
 | 
					    cp a, $FE
 | 
				
			||||||
    jr nz, :+
 | 
					    jr nz, :+
 | 
				
			||||||
    ld a, e
 | 
					    rst RSTRestoreBank
 | 
				
			||||||
    ld [rROMB0], a
 | 
					 | 
				
			||||||
    call SFXProcessQueue
 | 
					    call SFXProcessQueue
 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2484,8 +2480,7 @@ SFXPlay::
 | 
				
			||||||
    ldh [hPlayhead], a
 | 
					    ldh [hPlayhead], a
 | 
				
			||||||
    ld a, h
 | 
					    ld a, h
 | 
				
			||||||
    ldh [hPlayhead+1], a
 | 
					    ldh [hPlayhead+1], a
 | 
				
			||||||
    ld a, e
 | 
					    rst RSTRestoreBank
 | 
				
			||||||
    ld [rROMB0], a
 | 
					 | 
				
			||||||
    ret
 | 
					    ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue