Replace hardware_constants.asm with the community-standard hardware.inc 5.0 (#1186)

This commit is contained in:
Rangi
2025-06-23 09:11:33 -04:00
committed by GitHub
parent ae7ee67d21
commit 4c540aa43b
149 changed files with 3444 additions and 3103 deletions

View File

@@ -10,13 +10,13 @@ InitSound::
push af
ld a, BANK(_InitSound)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
call _InitSound
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
pop af
pop bc
@@ -34,13 +34,13 @@ UpdateSound::
push af
ld a, BANK(_UpdateSound)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
call _UpdateSound
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
pop af
pop bc
@@ -51,14 +51,14 @@ UpdateSound::
_LoadMusicByte::
; [wCurMusicByte] = [a:de]
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ld a, [de]
ld [wCurMusicByte], a
ld a, BANK(LoadMusicByte)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ret
PlayMusic::
@@ -73,7 +73,7 @@ PlayMusic::
push af
ld a, BANK(_PlayMusic) ; aka BANK(_InitSound)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ld a, e
and a
@@ -88,7 +88,7 @@ PlayMusic::
.end
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
pop af
pop bc
pop de
@@ -107,7 +107,7 @@ PlayMusic2::
push af
ld a, BANK(_PlayMusic)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
push de
ld de, MUSIC_NONE
@@ -118,7 +118,7 @@ PlayMusic2::
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
pop af
pop bc
@@ -140,7 +140,7 @@ PlayCry::
; Cries are stuck in one bank.
ld a, BANK(PokemonCries)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ld hl, PokemonCries
rept MON_CRY_LENGTH
@@ -163,13 +163,13 @@ endr
ld a, BANK(_PlayCry)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
call _PlayCry
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
pop af
pop bc
@@ -200,7 +200,7 @@ PlaySFX::
push af
ld a, BANK(_PlaySFX)
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ld a, e
ld [wCurSFX], a
@@ -208,7 +208,7 @@ PlaySFX::
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
.done
pop af
@@ -525,11 +525,11 @@ TerminateExpBarSound::
xor a
ld [wChannel5Flags1], a
ld [wPitchSweep], a
ldh [rNR10], a
ldh [rNR11], a
ldh [rNR12], a
ldh [rNR13], a
ldh [rNR14], a
ldh [rAUD1SWEEP], a
ldh [rAUD1LEN], a
ldh [rAUD1ENV], a
ldh [rAUD1LOW], a
ldh [rAUD1HIGH], a
ret
ChannelsOff::

View File

@@ -163,7 +163,7 @@ FarCopyRadioText::
ld d, a
ld a, [hli]
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ld a, e
ld l, a
ld a, d
@@ -173,7 +173,7 @@ FarCopyRadioText::
call CopyBytes
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ret
MobileTextBorder::
@@ -275,6 +275,6 @@ PushLYOverrides::
ld a, HIGH(wLYOverrides)
ld [wRequested2bppDest + 1], a
ld a, (wLYOverridesEnd - wLYOverrides) / LEN_2BPP_TILE
ld a, (wLYOverridesEnd - wLYOverrides) / TILE_SIZE
ld [wRequested2bppSize], a
ret

View File

@@ -12,8 +12,8 @@ ClearSprites::
HideSprites::
; Set all OAM y-positions to 160 to hide them offscreen
ld hl, wShadowOAMSprite00YCoord
ld de, SPRITEOAMSTRUCT_LENGTH
ld b, NUM_SPRITE_OAM_STRUCTS
ld de, OBJ_SIZE
ld b, OAM_COUNT
ld a, OAM_YCOORD_HIDDEN
.loop
ld [hl], a ; y

View File

@@ -94,41 +94,41 @@ GetFarWord::
FarCopyWRAM::
; copy bc bytes from hl to a:de
ldh [hTempBank], a
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
ldh [rWBK], a
call CopyBytes
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret
GetFarWRAMByte::
; retrieve a single byte from a:hl, and return it in a.
ldh [hTempBank], a
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
ldh [rWBK], a
ld a, [hl]
ldh [hFarByte], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
ldh a, [hFarByte]
ret
GetFarWRAMWord:: ; unreferenced
; retrieve a word from a:hl, and return it in hl.
ldh [hTempBank], a
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
ldh [rWBK], a
ld a, [hli]
ld h, [hl]
ld l, a
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret

View File

@@ -1,15 +1,15 @@
LoadTilemapToTempTilemap::
; Load wTilemap into wTempTilemap
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wTempTilemap)
ldh [rSVBK], a
ldh [rWBK], a
hlcoord 0, 0
decoord 0, 0, wTempTilemap
ld bc, wTilemapEnd - wTilemap
call CopyBytes
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret
SafeLoadTempTilemapToTilemap::
@@ -22,14 +22,14 @@ SafeLoadTempTilemapToTilemap::
LoadTempTilemapToTilemap::
; Load wTempTilemap into wTilemap
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wTempTilemap)
ldh [rSVBK], a
ldh [rWBK], a
hlcoord 0, 0, wTempTilemap
decoord 0, 0
ld bc, wTilemapEnd - wTilemap
call CopyBytes
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret

View File

@@ -6,22 +6,22 @@
; collapses during the switch.
DoubleSpeed::
ld hl, rKEY1
bit KEY1_DBLSPEED, [hl]
ld hl, rSPD
bit B_SPD_DOUBLE, [hl]
jr z, SwitchSpeed
ret
NormalSpeed::
ld hl, rKEY1
bit KEY1_DBLSPEED, [hl]
ld hl, rSPD
bit B_SPD_DOUBLE, [hl]
ret z
SwitchSpeed::
set KEY1_PREPARE, [hl]
set B_SPD_PREPARE, [hl]
xor a
ldh [rIF], a
ldh [rIE], a
ld a, (1 << rJOYP_BUTTONS) | (1 << rJOYP_DPAD)
ld a, JOYP_GET_NONE
ldh [rJOYP], a
stop ; rgbasm adds a nop after this instruction by default
ret

View File

@@ -11,15 +11,15 @@ ResetGameTime::
GameTimer::
nop
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wGameTime)
ldh [rSVBK], a
ldh [rWBK], a
call .Function
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret
.Function:

View File

@@ -3,7 +3,7 @@ DEF MOBILE_TILES_PER_CYCLE EQU 6
Get2bppViaHDMA::
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
jp z, Copy2bpp
homecall HDMATransfer2bpp
@@ -12,7 +12,7 @@ Get2bppViaHDMA::
Get1bppViaHDMA::
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
jp z, Copy1bpp
homecall HDMATransfer1bpp
@@ -46,16 +46,16 @@ SafeHDMATransfer: ; unreferenced
.loop
; load the source and target MSB and LSB
ld a, d
ldh [rHDMA1], a ; source MSB
ldh [rVDMA_SRC_HIGH], a ; source MSB
ld a, e
and $f0
ldh [rHDMA2], a ; source LSB
ldh [rVDMA_SRC_LOW], a ; source LSB
ld a, h
and $1f
ldh [rHDMA3], a ; target MSB
ldh [rVDMA_DEST_HIGH], a ; target MSB
ld a, l
and $f0
ldh [rHDMA4], a ; target LSB
ldh [rVDMA_DEST_LOW], a ; target LSB
; stop when c < TILES_PER_CYCLE
ld a, c
cp TILES_PER_CYCLE
@@ -337,7 +337,7 @@ Request1bpp::
Get2bpp::
; copy c 2bpp tiles from b:de to hl
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
jp nz, Request2bpp
; fallthrough
@@ -350,7 +350,7 @@ Copy2bpp:
; bank
ld a, b
; bc = c * LEN_2BPP_TILE
; bc = c * TILE_SIZE
push af
swap c
ld a, $f
@@ -366,7 +366,7 @@ Copy2bpp:
Get1bpp::
; copy c 1bpp tiles from b:de to hl
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
jp nz, Request1bpp
; fallthrough
@@ -378,7 +378,7 @@ Copy1bpp::
; bank
ld a, b
; bc = c * LEN_1BPP_TILE
; bc = c * TILE_1BPP_SIZE
push af
ld h, 0
ld l, c

View File

@@ -11,7 +11,7 @@ FarCall::
SECTION "rst10", ROM0[$0010]
Bankswitch::
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ret
SECTION "rst18", ROM0[$0018]

View File

@@ -6,7 +6,7 @@ Reset::
call ClearPalettes
xor a
ldh [rIF], a
ld a, 1 << VBLANK
ld a, IE_VBLANK
ldh [rIE], a
ei
@@ -19,7 +19,7 @@ Reset::
jr Init
_Start::
cp $11
cp BOOTUP_A_CGB
jr z, .cgb
xor a ; FALSE
jr .load
@@ -92,7 +92,7 @@ Init::
call ClearWRAM
ld a, 1
ldh [rSVBK], a
ldh [rWBK], a
call ClearVRAM
call ClearSprites
call ClearsScratch
@@ -108,14 +108,14 @@ Init::
ldh [hSCY], a
ldh [rJOYP], a
ld a, $8 ; HBlank int enable
ld a, STAT_MODE_0
ldh [rSTAT], a
ld a, $90
ld a, SCREEN_HEIGHT_PX
ldh [hWY], a
ldh [rWY], a
ld a, 7
ld a, WX_OFS
ldh [hWX], a
ldh [rWX], a
@@ -142,9 +142,9 @@ Init::
farcall StartClock
xor a ; SRAM_DISABLE
ld [MBC3LatchClock], a
ld [MBC3SRamEnable], a
xor a ; RAMG_SRAM_DISABLE
ld [rRTCLATCH], a
ld [rRAMG], a
ldh a, [hCGB]
and a
@@ -191,7 +191,7 @@ ClearWRAM::
ld a, 1
.bank_loop
push af
ldh [rSVBK], a
ldh [rWBK], a
xor a
ld hl, STARTOF(WRAMX)
ld bc, SIZEOF(WRAMX)

View File

@@ -38,7 +38,7 @@ UpdateJoypad::
; We can only get four inputs at a time.
; We take d-pad first for no particular reason.
ld a, 1 << rJOYP_DPAD
ld a, JOYP_GET_CTRL_PAD
ldh [rJOYP], a
; Read twice to give the request time to take.
ldh a, [rJOYP]
@@ -47,7 +47,7 @@ UpdateJoypad::
; The Joypad register output is in the lo nybble (inversed).
; We make the hi nybble of our new container d-pad input.
cpl
and $f
and JOYP_INPUTS
swap a
; We'll keep this in b for now.
@@ -55,7 +55,7 @@ UpdateJoypad::
; Buttons make 8 total inputs (A, B, Select, Start).
; We can fit this into one byte.
ld a, 1 << rJOYP_BUTTONS
ld a, JOYP_GET_BUTTONS
ldh [rJOYP], a
; Wait for input to stabilize.
rept 6
@@ -63,12 +63,12 @@ rept 6
endr
; Buttons take the lo nybble.
cpl
and $f
and JOYP_INPUTS
or b
ld b, a
; Reset the joypad register since we're done with it.
ld a, (1 << rJOYP_BUTTONS) | (1 << rJOYP_DPAD)
ld a, JOYP_GET_NONE
ldh [rJOYP], a
; To get the delta we xor the last frame's input with the new one.

View File

@@ -37,7 +37,7 @@ DisableLCD::
; Don't need to do anything if the LCD is already off
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
ret z
xor a
@@ -46,7 +46,7 @@ DisableLCD::
ld b, a
; Disable VBlank
res VBLANK, a
res B_IE_VBLANK, a
ldh [rIE], a
.wait
@@ -56,7 +56,7 @@ DisableLCD::
jr nz, .wait
ldh a, [rLCDC]
and ~(1 << rLCDC_ENABLE)
and ~LCDC_ON
ldh [rLCDC], a
xor a
@@ -67,6 +67,6 @@ DisableLCD::
EnableLCD::
ldh a, [rLCDC]
set rLCDC_ENABLE, a
set B_LCDC_ENABLE, a
ldh [rLCDC], a
ret

View File

@@ -106,7 +106,7 @@ LoadOverworldTilemap::
ld a, "■"
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld bc, SCREEN_AREA
call ByteFill
ld a, BANK(_LoadOverworldTilemap)
@@ -1193,7 +1193,7 @@ ScrollMapDown::
ld l, a
ld a, [wBGMapAnchor + 1]
ld h, a
ld bc, BG_MAP_WIDTH tiles
ld bc, TILEMAP_WIDTH tiles
add hl, bc
; cap d at HIGH(vBGMap0)
ld a, h
@@ -1278,7 +1278,7 @@ UpdateBGMapRow::
push de
call .iteration
pop de
ld a, BG_MAP_WIDTH
ld a, TILEMAP_WIDTH
add e
ld e, a
@@ -1312,7 +1312,7 @@ UpdateBGMapColumn::
ld [hli], a
ld a, d
ld [hli], a
ld a, BG_MAP_WIDTH
ld a, TILEMAP_WIDTH
add e
ld e, a
jr nc, .skip
@@ -1345,10 +1345,10 @@ LoadTilesetGFX::
ld a, [wTilesetBank]
ld e, a
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wDecompressScratch)
ldh [rSVBK], a
ldh [rWBK], a
ld a, e
ld de, wDecompressScratch
@@ -1373,7 +1373,7 @@ LoadTilesetGFX::
ldh [rVBK], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
; These tilesets support dynamic per-mapgroup roof tiles.
ld a, [wMapTileset]

View File

@@ -763,10 +763,10 @@ ClearWindowData::
ld hl, wMoreMenuData
call .ClearMenuData
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wWindowStack)
ldh [rSVBK], a
ldh [rWBK], a
xor a
ld hl, wWindowStackBottom
@@ -778,7 +778,7 @@ ClearWindowData::
ld [wWindowStackPointer + 1], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
ret
.ClearMenuData:

View File

@@ -80,7 +80,7 @@ MobileTimer::
; Turn off timer interrupt
ldh a, [rIF]
and 1 << VBLANK | 1 << LCD_STAT | 1 << SERIAL | 1 << JOYPAD
and IF_VBLANK | IF_STAT | IF_SERIAL | IF_JOYPAD
ldh [rIF], a
ld a, [wc86a]
@@ -92,7 +92,7 @@ MobileTimer::
jr nz, .skip_timer
ldh a, [rSC]
and 1 << rSC_ON
and SC_START
jr nz, .skip_timer
ldh a, [hROMBank]
@@ -112,7 +112,7 @@ MobileTimer::
ldh a, [rTMA]
ldh [rTIMA], a
ld a, 1 << rTAC_ON | rTAC_65536_HZ
ld a, TAC_START | TAC_65KHZ
ldh [rTAC], a
.pop_ret

View File

@@ -19,15 +19,15 @@ UpdateCGBPals::
; fallthrough
ForceUpdateCGBPals::
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wBGPals2)
ldh [rSVBK], a
ldh [rWBK], a
ld hl, wBGPals2
; copy 8 pals to bgpd
ld a, 1 << rBGPI_AUTO_INCREMENT
ld a, BGPI_AUTOINC
ldh [rBGPI], a
ld c, LOW(rBGPD)
ld b, 8 / 2
@@ -43,7 +43,7 @@ endr
; hl is now wOBPals2
; copy 8 pals to obpd
ld a, 1 << rOBPI_AUTO_INCREMENT
ld a, OBPI_AUTOINC
ldh [rOBPI], a
ld c, LOW(rOBPD)
ld b, 8 / 2
@@ -57,7 +57,7 @@ endr
jr nz, .obp
pop af
ldh [rSVBK], a
ldh [rWBK], a
; clear pal update queue
xor a
@@ -83,11 +83,11 @@ DmgToCgbBGPals::
push de
push bc
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wBGPals2)
ldh [rSVBK], a
ldh [rWBK], a
; copy & reorder bg pal buffer
ld hl, wBGPals2 ; to
@@ -103,7 +103,7 @@ DmgToCgbBGPals::
ldh [hCGBPalUpdate], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
pop bc
pop de
@@ -131,11 +131,11 @@ DmgToCgbObjPals::
push de
push bc
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wOBPals2)
ldh [rSVBK], a
ldh [rWBK], a
; copy & reorder obj pal buffer
ld hl, wOBPals2 ; to
@@ -151,7 +151,7 @@ DmgToCgbObjPals::
ldh [hCGBPalUpdate], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
pop bc
pop de
@@ -171,10 +171,10 @@ DmgToCgbObjPal0::
push de
push bc
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wOBPals2)
ldh [rSVBK], a
ldh [rWBK], a
ld hl, wOBPals2 palette 0
ld de, wOBPals1 palette 0
@@ -186,7 +186,7 @@ DmgToCgbObjPal0::
ldh [hCGBPalUpdate], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
pop bc
pop de
@@ -208,10 +208,10 @@ DmgToCgbObjPal1::
push de
push bc
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wOBPals2)
ldh [rSVBK], a
ldh [rWBK], a
ld hl, wOBPals2 palette 1
ld de, wOBPals1 palette 1
@@ -223,7 +223,7 @@ DmgToCgbObjPal1::
ldh [hCGBPalUpdate], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
pop bc
pop de
@@ -237,14 +237,14 @@ CopyPals::
; copy c palettes in order b from de to hl
push bc
ld c, NUM_PAL_COLORS
ld c, PAL_COLORS
.loop
push de
push hl
; get pal color
ld a, b
maskbits 1 << PAL_COLOR_SIZE
maskbits 1 << COLOR_SIZE
; 2 bytes per color
add a
ld l, a
@@ -262,7 +262,7 @@ CopyPals::
ld [hl], d
inc hl
; next pal color
rept PAL_COLOR_SIZE
rept COLOR_SIZE
srl b
endr
; source
@@ -272,7 +272,7 @@ endr
jr nz, .loop
; de += 8 (next pal)
ld a, PALETTE_SIZE
ld a, PAL_SIZE
add e
jr nc, .ok
inc d
@@ -309,16 +309,16 @@ ReloadSpritesNoPalettes::
ldh a, [hCGB]
and a
ret z
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wBGPals2)
ldh [rSVBK], a
ldh [rWBK], a
ld hl, wBGPals2
ld bc, (8 palettes) + (2 palettes)
xor a
call ByteFill
pop af
ldh [rSVBK], a
ldh [rWBK], a
ld a, TRUE
ldh [hCGBPalUpdate], a
call DelayFrame

View File

@@ -31,11 +31,11 @@ AskSerial::
ldh [rSB], a
; switch to internal clock
ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_INTERNAL
ldh [rSC], a
; start transfer
ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_START | SC_INTERNAL
ldh [rSC], a
ret

View File

@@ -28,9 +28,9 @@ Serial::
cp USING_INTERNAL_CLOCK
jr z, .player2
ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_EXTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_START | SC_EXTERNAL
ldh [rSC], a
jr .player2
@@ -65,9 +65,9 @@ Serial::
bit 7, a ; wait until rDIV has incremented from 3 to $80 or more
jr nz, .delay_loop
ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_EXTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_START | SC_EXTERNAL
ldh [rSC], a
jr .player2
@@ -134,9 +134,9 @@ Serial_ExchangeByte::
ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .not_player_2
ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_INTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_START | SC_INTERNAL
ldh [rSC], a
.not_player_2
.loop
@@ -164,8 +164,8 @@ Serial_ExchangeByte::
.not_player_1_or_timed_out
ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
cp 1 << SERIAL
and IE_SERIAL | IE_TIMER | IE_STAT | IE_VBLANK
cp IE_SERIAL
jr nz, .loop
ld a, [wLinkByteTimeout]
dec a
@@ -188,8 +188,8 @@ Serial_ExchangeByte::
xor a
ldh [hSerialReceivedNewData], a
ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
sub 1 << SERIAL
and IE_SERIAL | IE_TIMER | IE_STAT | IE_VBLANK
sub IE_SERIAL
jr nz, .non_serial_interrupts_enabled
; a == 0
@@ -220,8 +220,8 @@ Serial_ExchangeByte::
.timed_out
ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
cp 1 << SERIAL
and IE_SERIAL | IE_TIMER | IE_STAT | IE_VBLANK
cp IE_SERIAL
ld a, SERIAL_NO_DATA_BYTE
ret z
ld a, [hl]
@@ -370,9 +370,9 @@ LinkTransfer::
ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .player_1
ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_INTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_START | SC_INTERNAL
ldh [rSC], a
.player_1
@@ -400,9 +400,9 @@ LinkDataReceived::
ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ret nz
ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_INTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
ld a, SC_START | SC_INTERNAL
ldh [rSC], a
ret
@@ -415,8 +415,8 @@ SetBitsForTimeCapsuleRequestIfNotLinked:: ; unreferenced
ldh [rSB], a
xor a
ldh [hSerialReceive], a
ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_EXTERNAL
ldh [rSC], a
ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
ld a, SC_START | SC_EXTERNAL
ldh [rSC], a
ret

View File

@@ -25,21 +25,21 @@ endc
push af
; latch clock data
ld a, 1
ld [MBC3LatchClock], a
ld [rRTCLATCH], a
; enable sram/clock write
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
ld a, RAMG_SRAM_ENABLE
ld [rRAMG], a
; select sram bank
pop af
ld [MBC3SRamBank], a
ld [rRAMB], a
ret
CloseSRAM::
push af
ld a, SRAM_DISABLE
ld a, RAMG_SRAM_DISABLE
; reset clock latch for next time
ld [MBC3LatchClock], a
ld [rRTCLATCH], a
; disable sram/clock write
ld [MBC3SRamEnable], a
ld [rRAMG], a
pop af
ret

View File

@@ -29,14 +29,14 @@ ClearTilemap::
; Update the BG Map.
ldh a, [rLCDC]
bit rLCDC_ENABLE, a
bit B_LCDC_ENABLE, a
ret z
jp WaitBGMap
ClearScreen::
ld a, PAL_BG_TEXT
hlcoord 0, 0, wAttrmap
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld bc, SCREEN_AREA
call ByteFill
jr ClearTilemap
@@ -760,7 +760,7 @@ TextCommand_FAR::
ld a, [hli]
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
push hl
ld h, d
@@ -770,7 +770,7 @@ TextCommand_FAR::
pop af
ldh [hROMBank], a
ld [MBC3RomBank], a
ld [rROMB0], a
ret
TextCommand_BCD::

View File

@@ -111,7 +111,7 @@ _CopyTilemapAtOnce:
ld l, 0
ld a, SCREEN_HEIGHT
ldh [hTilesPerCycle], a
ld b, 1 << 1 ; not in v/hblank
ld b, STAT_BUSY
ld c, LOW(rSTAT)
.loop
@@ -129,7 +129,7 @@ rept SCREEN_WIDTH / 2
inc l
endr
ld de, BG_MAP_WIDTH - SCREEN_WIDTH
ld de, TILEMAP_WIDTH - SCREEN_WIDTH
add hl, de
ldh a, [hTilesPerCycle]
dec a
@@ -181,11 +181,11 @@ ClearPalettes::
ret
.cgb
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wBGPals2)
ldh [rSVBK], a
ldh [rWBK], a
; Fill wBGPals2 and wOBPals2 with $ffff (white)
ld hl, wBGPals2
@@ -194,7 +194,7 @@ ClearPalettes::
call ByteFill
pop af
ldh [rSVBK], a
ldh [rWBK], a
; Request palette update
ld a, TRUE

View File

@@ -14,9 +14,9 @@ Timer:: ; unreferenced
LatchClock::
; latch clock counter data
ld a, 0
ld [MBC3LatchClock], a
ld [rRTCLATCH], a
ld a, 1
ld [MBC3LatchClock], a
ld [rRTCLATCH], a
ret
UpdateTime::
@@ -30,35 +30,35 @@ GetClock::
; store clock data in hRTCDayHi-hRTCSeconds
; enable clock r/w
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
ld a, RAMG_SRAM_ENABLE
ld [rRAMG], a
; clock data is 'backwards' in hram
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
ld hl, rRAMB
ld de, rRTCREG
ld [hl], RTC_S
ld [hl], RAMB_RTC_S
ld a, [de]
maskbits 60
ldh [hRTCSeconds], a
ld [hl], RTC_M
ld [hl], RAMB_RTC_M
ld a, [de]
maskbits 60
ldh [hRTCMinutes], a
ld [hl], RTC_H
ld [hl], RAMB_RTC_H
ld a, [de]
maskbits 24
ldh [hRTCHours], a
ld [hl], RTC_DL
ld [hl], RAMB_RTC_DL
ld a, [de]
ldh [hRTCDayLo], a
ld [hl], RTC_DH
ld [hl], RAMB_RTC_DH
ld a, [de]
ldh [hRTCDayHi], a
@@ -72,10 +72,10 @@ FixDays::
; check if day count > 255 (bit 8 set)
ldh a, [hRTCDayHi] ; DH
bit RTC_DH_HI, a
bit B_RAMB_RTC_DH_HIGH, a
jr z, .daylo
; reset dh (bit 8)
res RTC_DH_HI, a
res B_RAMB_RTC_DH_HIGH, a
ldh [hRTCDayHi], a
; mod 140
@@ -213,43 +213,43 @@ SetClock::
; set clock data from hram
; enable clock r/w
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
ld a, RAMG_SRAM_ENABLE
ld [rRAMG], a
; set clock data
; stored 'backwards' in hram
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
ld hl, rRAMB
ld de, rRTCREG
; seems to be a halt check that got partially commented out
; this block is totally pointless
ld [hl], RTC_DH
ld [hl], RAMB_RTC_DH
ld a, [de]
bit RTC_DH_HALT, a
bit B_RAMB_RTC_DH_HALT, a
ld [de], a
; seconds
ld [hl], RTC_S
ld [hl], RAMB_RTC_S
ldh a, [hRTCSeconds]
ld [de], a
; minutes
ld [hl], RTC_M
ld [hl], RAMB_RTC_M
ldh a, [hRTCMinutes]
ld [de], a
; hours
ld [hl], RTC_H
ld [hl], RAMB_RTC_H
ldh a, [hRTCHours]
ld [de], a
; day lo
ld [hl], RTC_DL
ld [hl], RAMB_RTC_DL
ldh a, [hRTCDayLo]
ld [de], a
; day hi
ld [hl], RTC_DH
ld [hl], RAMB_RTC_DH
ldh a, [hRTCDayHi]
res RTC_DH_HALT, a ; make sure timer is active
res B_RAMB_RTC_DH_HALT, a ; make sure timer is active
ld [de], a
; cleanup

View File

@@ -199,13 +199,13 @@ VBlank_Cutscene::
xor a
ldh [rIF], a
; enable lcd stat
ld a, 1 << LCD_STAT
ld a, IE_STAT
ldh [rIE], a
; rerequest serial int if applicable (still disabled)
; request lcd stat
ld a, b
and 1 << SERIAL
or 1 << LCD_STAT
and IF_SERIAL
or IF_STAT
ldh [rIF], a
ei
@@ -282,8 +282,9 @@ VBlank_CutsceneCGB::
push af
xor a
ldh [rIF], a
ld a, 1 << LCD_STAT
ld a, IE_STAT
ldh [rIE], a
assert IE_STAT == IF_STAT
ldh [rIF], a
ei
@@ -370,9 +371,10 @@ VBlank_Credits::
xor a
ldh [rIF], a
ld a, 1 << LCD_STAT
ld a, IE_STAT
ldh [rIE], a
; request lcd stat
assert IE_STAT == IF_STAT
ldh [rIF], a
ei

View File

@@ -8,7 +8,7 @@ DMATransfer::
ret z
; Start transfer
ldh [rHDMA5], a
ldh [rVDMA_LEN], a
; Execution is halted until the transfer is complete.
@@ -194,7 +194,7 @@ DEF THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
ldh a, [hBGMapAddress]
ld l, a
ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH
ld de, 2 * THIRD_HEIGHT * TILEMAP_WIDTH
add hl, de
; Next time: top third
@@ -211,7 +211,7 @@ DEF THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
ldh a, [hBGMapAddress]
ld l, a
ld de, THIRD_HEIGHT * BG_MAP_WIDTH
ld de, THIRD_HEIGHT * TILEMAP_WIDTH
add hl, de
; Next time: bottom third
@@ -237,7 +237,7 @@ DEF THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
ld a, THIRD_HEIGHT
; Discrepancy between wTilemap and BGMap
ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1)
ld bc, TILEMAP_WIDTH - (SCREEN_WIDTH - 1)
.row
; Copy a row of 20 tiles
@@ -438,10 +438,10 @@ AnimateTileset::
ld a, BANK(_AnimateTileset)
rst Bankswitch
ldh a, [rSVBK]
ldh a, [rWBK]
push af
ld a, BANK(wTilesetAnim)
ldh [rSVBK], a
ldh [rWBK], a
ldh a, [rVBK]
push af
@@ -453,7 +453,7 @@ AnimateTileset::
pop af
ldh [rVBK], a
pop af
ldh [rSVBK], a
ldh [rWBK], a
pop af
rst Bankswitch
ret