Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
This commit is contained in:
102
home/video.asm
102
home/video.asm
@@ -3,17 +3,17 @@
|
||||
DMATransfer::
|
||||
; Return carry if the transfer is completed.
|
||||
|
||||
ld a, [hDMATransfer]
|
||||
ldh a, [hDMATransfer]
|
||||
and a
|
||||
ret z
|
||||
|
||||
; Start transfer
|
||||
ld [rHDMA5], a
|
||||
ldh [rHDMA5], a
|
||||
|
||||
; Execution is halted until the transfer is complete.
|
||||
|
||||
xor a
|
||||
ld [hDMATransfer], a
|
||||
ldh [hDMATransfer], a
|
||||
scf
|
||||
ret
|
||||
|
||||
@@ -25,11 +25,11 @@ UpdateBGMapBuffer::
|
||||
|
||||
; Return carry on success.
|
||||
|
||||
ld a, [hBGMapUpdate]
|
||||
ldh a, [hBGMapUpdate]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, [rVBK]
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
ld [hSPBuffer], sp
|
||||
|
||||
@@ -50,7 +50,7 @@ rept 2
|
||||
|
||||
; Palettes
|
||||
ld a, 1
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
|
||||
ld a, [hli]
|
||||
ld [bc], a
|
||||
@@ -61,7 +61,7 @@ rept 2
|
||||
|
||||
; Tiles
|
||||
ld a, 0
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
|
||||
ld a, [de]
|
||||
inc de
|
||||
@@ -73,35 +73,35 @@ rept 2
|
||||
endr
|
||||
|
||||
; We've done 2 16x8 blocks
|
||||
ld a, [hBGMapTileCount]
|
||||
ldh a, [hBGMapTileCount]
|
||||
dec a
|
||||
dec a
|
||||
ld [hBGMapTileCount], a
|
||||
ldh [hBGMapTileCount], a
|
||||
|
||||
jr nz, .next
|
||||
|
||||
ld a, [hSPBuffer]
|
||||
ldh a, [hSPBuffer]
|
||||
ld l, a
|
||||
ld a, [hSPBuffer + 1]
|
||||
ldh a, [hSPBuffer + 1]
|
||||
ld h, a
|
||||
ld sp, hl
|
||||
|
||||
pop af
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
|
||||
xor a
|
||||
ld [hBGMapUpdate], a
|
||||
ldh [hBGMapUpdate], a
|
||||
scf
|
||||
ret
|
||||
|
||||
WaitTop::
|
||||
; Wait until the top third of the BG Map is being updated.
|
||||
|
||||
ld a, [hBGMapMode]
|
||||
ldh a, [hBGMapMode]
|
||||
and a
|
||||
ret z
|
||||
|
||||
ld a, [hBGMapThird]
|
||||
ldh a, [hBGMapThird]
|
||||
and a
|
||||
jr z, .done
|
||||
|
||||
@@ -110,13 +110,13 @@ WaitTop::
|
||||
|
||||
.done
|
||||
xor a
|
||||
ld [hBGMapMode], a
|
||||
ldh [hBGMapMode], a
|
||||
ret
|
||||
|
||||
UpdateBGMap::
|
||||
; Update the BG Map, in thirds, from wTileMap and wAttrMap.
|
||||
|
||||
ld a, [hBGMapMode]
|
||||
ldh a, [hBGMapMode]
|
||||
and a
|
||||
ret z
|
||||
|
||||
@@ -129,18 +129,18 @@ UpdateBGMap::
|
||||
; BG Map 1
|
||||
dec a
|
||||
|
||||
ld a, [hBGMapAddress]
|
||||
ldh a, [hBGMapAddress]
|
||||
ld l, a
|
||||
ld a, [hBGMapAddress + 1]
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld h, a
|
||||
push hl
|
||||
|
||||
xor a ; LOW(vBGMap1)
|
||||
ld [hBGMapAddress], a
|
||||
ldh [hBGMapAddress], a
|
||||
ld a, HIGH(vBGMap1)
|
||||
ld [hBGMapAddress + 1], a
|
||||
ldh [hBGMapAddress + 1], a
|
||||
|
||||
ld a, [hBGMapMode]
|
||||
ldh a, [hBGMapMode]
|
||||
push af
|
||||
cp 3
|
||||
call z, .Tiles
|
||||
@@ -150,20 +150,20 @@ UpdateBGMap::
|
||||
|
||||
pop hl
|
||||
ld a, l
|
||||
ld [hBGMapAddress], a
|
||||
ldh [hBGMapAddress], a
|
||||
ld a, h
|
||||
ld [hBGMapAddress + 1], a
|
||||
ldh [hBGMapAddress + 1], a
|
||||
ret
|
||||
|
||||
.Attr:
|
||||
ld a, 1
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
|
||||
hlcoord 0, 0, wAttrMap
|
||||
call .update
|
||||
|
||||
ld a, 0
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
ret
|
||||
|
||||
.Tiles:
|
||||
@@ -173,7 +173,7 @@ UpdateBGMap::
|
||||
ld [hSPBuffer], sp
|
||||
|
||||
; Which third?
|
||||
ld a, [hBGMapThird]
|
||||
ldh a, [hBGMapThird]
|
||||
and a ; 0
|
||||
jr z, .top
|
||||
dec a ; 1
|
||||
@@ -187,9 +187,9 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
|
||||
add hl, de
|
||||
ld sp, hl
|
||||
|
||||
ld a, [hBGMapAddress + 1]
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld h, a
|
||||
ld a, [hBGMapAddress]
|
||||
ldh a, [hBGMapAddress]
|
||||
ld l, a
|
||||
|
||||
ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH
|
||||
@@ -204,9 +204,9 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
|
||||
add hl, de
|
||||
ld sp, hl
|
||||
|
||||
ld a, [hBGMapAddress + 1]
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld h, a
|
||||
ld a, [hBGMapAddress]
|
||||
ldh a, [hBGMapAddress]
|
||||
ld l, a
|
||||
|
||||
ld de, THIRD_HEIGHT * BG_MAP_WIDTH
|
||||
@@ -219,9 +219,9 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
|
||||
.top
|
||||
ld sp, hl
|
||||
|
||||
ld a, [hBGMapAddress + 1]
|
||||
ldh a, [hBGMapAddress + 1]
|
||||
ld h, a
|
||||
ld a, [hBGMapAddress]
|
||||
ldh a, [hBGMapAddress]
|
||||
ld l, a
|
||||
|
||||
; Next time: middle third
|
||||
@@ -229,7 +229,7 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
|
||||
|
||||
.start
|
||||
; Which third to update next time
|
||||
ld [hBGMapThird], a
|
||||
ldh [hBGMapThird], a
|
||||
|
||||
; Rows of tiles in a third
|
||||
ld a, SCREEN_HEIGHT / 3
|
||||
@@ -255,9 +255,9 @@ endr
|
||||
dec a
|
||||
jr nz, .row
|
||||
|
||||
ld a, [hSPBuffer]
|
||||
ldh a, [hSPBuffer]
|
||||
ld l, a
|
||||
ld a, [hSPBuffer + 1]
|
||||
ldh a, [hSPBuffer + 1]
|
||||
ld h, a
|
||||
ld sp, hl
|
||||
ret
|
||||
@@ -270,7 +270,7 @@ Serve1bppRequest::
|
||||
ret z
|
||||
|
||||
; Back out if we're too far into VBlank
|
||||
ld a, [rLY]
|
||||
ldh a, [rLY]
|
||||
cp LY_VBLANK
|
||||
ret c
|
||||
cp LY_VBLANK + 2
|
||||
@@ -333,9 +333,9 @@ endr
|
||||
|
||||
ld [wRequested1bppSource], sp
|
||||
|
||||
ld a, [hSPBuffer]
|
||||
ldh a, [hSPBuffer]
|
||||
ld l, a
|
||||
ld a, [hSPBuffer + 1]
|
||||
ldh a, [hSPBuffer + 1]
|
||||
ld h, a
|
||||
ld sp, hl
|
||||
ret
|
||||
@@ -348,7 +348,7 @@ Serve2bppRequest::
|
||||
ret z
|
||||
|
||||
; Back out if we're too far into VBlank
|
||||
ld a, [rLY]
|
||||
ldh a, [rLY]
|
||||
cp LY_VBLANK
|
||||
ret c
|
||||
cp LY_VBLANK + 2
|
||||
@@ -410,9 +410,9 @@ endr
|
||||
|
||||
ld [wRequested2bppSource], sp
|
||||
|
||||
ld a, [hSPBuffer]
|
||||
ldh a, [hSPBuffer]
|
||||
ld l, a
|
||||
ld a, [hSPBuffer + 1]
|
||||
ldh a, [hSPBuffer + 1]
|
||||
ld h, a
|
||||
ld sp, hl
|
||||
ret
|
||||
@@ -420,38 +420,38 @@ endr
|
||||
AnimateTileset::
|
||||
; Only call during the first fifth of VBlank
|
||||
|
||||
ld a, [hMapAnims]
|
||||
ldh a, [hMapAnims]
|
||||
and a
|
||||
ret z
|
||||
|
||||
; Back out if we're too far into VBlank
|
||||
ld a, [rLY]
|
||||
ldh a, [rLY]
|
||||
cp LY_VBLANK
|
||||
ret c
|
||||
cp LY_VBLANK + 7
|
||||
ret nc
|
||||
|
||||
ld a, [hROMBank]
|
||||
ldh a, [hROMBank]
|
||||
push af
|
||||
ld a, BANK(_AnimateTileset)
|
||||
rst Bankswitch
|
||||
|
||||
ld a, [rSVBK]
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wTilesetAnim)
|
||||
ld [rSVBK], a
|
||||
ldh [rSVBK], a
|
||||
|
||||
ld a, [rVBK]
|
||||
ldh a, [rVBK]
|
||||
push af
|
||||
ld a, 0
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
|
||||
call _AnimateTileset
|
||||
|
||||
pop af
|
||||
ld [rVBK], a
|
||||
ldh [rVBK], a
|
||||
pop af
|
||||
ld [rSVBK], a
|
||||
ldh [rSVBK], a
|
||||
pop af
|
||||
rst Bankswitch
|
||||
ret
|
||||
|
Reference in New Issue
Block a user