summaryrefslogtreecommitdiff
path: root/home/gfx.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/gfx.asm')
-rw-r--r--home/gfx.asm286
1 files changed, 286 insertions, 0 deletions
diff --git a/home/gfx.asm b/home/gfx.asm
new file mode 100644
index 00000000..14a46844
--- /dev/null
+++ b/home/gfx.asm
@@ -0,0 +1,286 @@
+Functiond70:: ; d70 (0:0d70)
+ ld b, a
+ ldh a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, BANK(sDecompressBuffer)
+ call OpenSRAM
+ ld hl, sDecompressBuffer
+ ld bc, 7 * 7 * $10
+ xor a
+ call ByteFill
+
+ ld hl, wcf3c
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, sDecompressBuffer
+ call Decompress
+
+ call CloseSRAM
+ pop af
+ rst Bankswitch
+ ret
+
+ReplacePlayerSprite::
+ farcall Function1413c
+ ret
+
+Functiond9e::
+ farcall Functionf8000
+ ret
+
+Functionda5::
+ farcall Functionf8032
+ ret
+
+LoadFontsExtra::
+ farcall Functionf800c
+ ret
+
+DecompressRequest2bpp::
+ push de
+ ld a, BANK(sScratch)
+ call OpenSRAM
+ push bc
+
+ ld de, sScratch
+ ld a, b
+ call FarDecompress
+
+ pop bc
+ pop hl
+
+ ld de, sScratch
+ call Request2bpp
+ call CloseSRAM
+ ret
+
+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:
+; 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 .dec
+
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld [hli], a
+.dec
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+ pop af
+ rst Bankswitch
+ ret
+
+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
+ ld [wRequested2bppSource + 1], a
+ ld a, l
+ ld [wRequested2bppDest], a
+ ld a, h
+ ld [wRequested2bppDest + 1], a
+.check
+ ld a, c
+ 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 [wRequested2bpp], a
+
+ call DelayFrame
+ ld a, c
+ sub 8 ; TilesPerCycle
+ ld c, a
+ jr .check
+
+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
+ ld [wRequested1bppSource + 1], a
+ ld a, l
+ ld [wRequested1bppDest], a
+ ld a, h
+ ld [wRequested1bppDest + 1], a
+.check
+ ld a, c
+ 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 [wRequested1bpp], a
+
+ call DelayFrame
+ ld a, c
+ sub 8 ; TilesPerCycle
+ ld c, a
+ jr .check
+
+Get2bpp::
+ ldh a, [rLCDC]
+ bit rLCDC_ENABLE, a
+ jp nz, Request2bpp
+
+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
+ and c
+ ld b, a
+ ld a, $f0
+ and c
+ ld c, a
+ pop af
+
+ jp FarCopyBytes
+
+Get1bpp::
+ ldh a, [rLCDC]
+ 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 l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop af
+
+ pop hl
+ jp FarCopyBytesDouble
+
+Function_ea6::
+ ldh a, [rLCDC]
+ add a
+ jp c, Request2bpp
+
+Function_eac::
+ push de
+ push hl
+
+; bank
+ ld a, b
+
+; bc = c * $10
+ ld h, 0
+ ld l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop de
+
+ pop hl
+ jp FarCopyBytes