summaryrefslogtreecommitdiff
path: root/home/gfx.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/gfx.asm')
-rw-r--r--home/gfx.asm92
1 files changed, 70 insertions, 22 deletions
diff --git a/home/gfx.asm b/home/gfx.asm
index 0067c85f..14a46844 100644
--- a/home/gfx.asm
+++ b/home/gfx.asm
@@ -58,56 +58,71 @@ DecompressRequest2bpp::
call CloseSRAM
ret
-FarCopyBytes:: ; dcd (0:0dcd)
+FarCopyBytes::
+; copy bc bytes from a:hl to de
+
ld [wBuffer], a
ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
+
call CopyBytes
+
pop af
rst Bankswitch
ret
-FarCopyBytesDouble:: ; ddd (0:0ddd)
+
+FarCopyBytesDouble:
+; Copy bc bytes from a:hl to bc*2 bytes at de,
+; doubling each byte in the process.
+
ld [wBuffer], a
ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
+
+; switcheroo, de <> hl
ld a, h
ld h, d
ld d, a
ld a, l
ld l, e
ld e, a
+
inc b
inc c
- jr .enter_loop
+ jr .dec
-.copy
+.loop
ld a, [de]
inc de
ld [hli], a
ld [hli], a
-.enter_loop
+.dec
dec c
- jr nz, .copy
+ jr nz, .loop
dec b
- jr nz, .copy
+ jr nz, .loop
+
pop af
rst Bankswitch
ret
-Request2bpp:: ; dfe (0:0dfe)
+Request2bpp::
+; Load 2bpp at b:de to occupy c tiles of hl.
ldh a, [hBGMapMode]
push af
xor a
ldh [hBGMapMode], a
+
ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
+
ld a, e
ld [wRequested2bppSource], a
ld a, d
@@ -118,34 +133,41 @@ Request2bpp:: ; dfe (0:0dfe)
ld [wRequested2bppDest + 1], a
.check
ld a, c
- cp $8 ; TilesPerCycle
+ cp 8 ; TilesPerCycle
jr nc, .cycle
+
ld [wRequested2bpp], a
call DelayFrame
+
pop af
rst Bankswitch
+
pop af
ldh [hBGMapMode], a
ret
.cycle
- ld a, $8 ; TilesPerCycle
+ ld a, 8 ; TilesPerCycle
ld [wRequested2bpp], a
+
call DelayFrame
ld a, c
- sub $8 ; TilesPerCycle
+ sub 8 ; TilesPerCycle
ld c, a
jr .check
-Request1bpp:: ; e38 (0:0e38)
+Request1bpp::
+; Load 1bpp at b:de to occupy c tiles of hl.
ldh a, [hBGMapMode]
push af
xor a
ldh [hBGMapMode], a
+
ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
+
ld a, e
ld [wRequested1bppSource], a
ld a, d
@@ -156,35 +178,46 @@ Request1bpp:: ; e38 (0:0e38)
ld [wRequested1bppDest + 1], a
.check
ld a, c
- cp $8 ; TilesPerCycle
+ cp 8 ; TilesPerCycle
jr nc, .cycle
+
ld [wRequested1bpp], a
call DelayFrame
+
pop af
rst Bankswitch
+
pop af
ldh [hBGMapMode], a
ret
.cycle
- ld a, $8 ; TilesPerCycle
+ ld a, 8 ; TilesPerCycle
ld [wRequested1bpp], a
+
call DelayFrame
ld a, c
- sub $8 ; TilesPerCycle
+ sub 8 ; TilesPerCycle
ld c, a
jr .check
Get2bpp::
ldh a, [rLCDC]
- bit 7, a
+ bit rLCDC_ENABLE, a
jp nz, Request2bpp
-Copy2bpp::
+
+Copy2bpp:
+; copy c 2bpp tiles from b:de to hl
+
push hl
ld h, d
ld l, e
pop de
+
+; bank
ld a, b
+
+; bc = c * $10
push af
swap c
ld a, $f
@@ -194,19 +227,27 @@ Copy2bpp::
and c
ld c, a
pop af
+
jp FarCopyBytes
Get1bpp::
ldh a, [rLCDC]
- bit 7, a
+ bit rLCDC_ENABLE, a
jp nz, Request1bpp
+
Copy1bpp::
+; copy c 1bpp tiles from b:de to hl
+
push de
ld d, h
ld e, l
+
+; bank
ld a, b
+
+; bc = c * $10 / 2
push af
- ld h, $0
+ ld h, 0
ld l, c
add hl, hl
add hl, hl
@@ -214,18 +255,24 @@ Copy1bpp::
ld b, h
ld c, l
pop af
+
pop hl
jp FarCopyBytesDouble
-Functionea6::
+Function_ea6::
ldh a, [rLCDC]
add a
jp c, Request2bpp
-Functioneac::
+
+Function_eac::
push de
push hl
+
+; bank
ld a, b
- ld h, $0
+
+; bc = c * $10
+ ld h, 0
ld l, c
add hl, hl
add hl, hl
@@ -234,5 +281,6 @@ Functioneac::
ld b, h
ld c, l
pop de
+
pop hl
jp FarCopyBytes