summaryrefslogtreecommitdiff
path: root/home/copy.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/copy.asm')
-rw-r--r--home/copy.asm378
1 files changed, 91 insertions, 287 deletions
diff --git a/home/copy.asm b/home/copy.asm
index 08eb5c10..879abb60 100644
--- a/home/copy.asm
+++ b/home/copy.asm
@@ -1,151 +1,49 @@
-; Functions to copy data from ROM.
-
-
-Get2bpp_2:: ; dc9
- ld a, [rLCDC]
- bit 7, a
- jp z, Copy2bpp
-
- ld a, [hROMBank]
- push af
- ld a, BANK(_Get2bpp)
- rst Bankswitch
- call _Get2bpp
- pop af
- rst Bankswitch
-
- ret
-; ddc
-
-Get1bpp_2:: ; ddc
- ld a, [rLCDC]
- bit 7, a
- jp z, Copy1bpp
-
- ld a, [hROMBank]
- push af
- ld a, BANK(_Get1bpp)
- rst Bankswitch
- call _Get1bpp
- pop af
- rst Bankswitch
-
- ret
-; def
-
-FarCopyBytesDouble_DoubleBankSwitch:: ; def
- ld [hBuffer], a
+Functiond70:: ; d70 (0:0d70)
+ ld b, a
ld a, [hROMBank]
push af
- ld a, [hBuffer]
- rst Bankswitch
-
- call FarCopyBytesDouble
-
- pop af
+ ld a, b
rst Bankswitch
- ret
-; dfd
-OldDMATransfer:: ; dfd
- dec c
- ld a, [hBGMapMode]
- push af
+ ld a, BANK(sDecompressBuffer)
+ call OpenSRAM
+ ld hl, sDecompressBuffer
+ ld bc, 7 * 7 * $10
xor a
- ld [hBGMapMode], a
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
+ call ByteFill
-.loop
-; load the source and target MSB and LSB
- ld a, d
- ld [rHDMA1], a ; source MSB
- ld a, e
- and $f0
- ld [rHDMA2], a ; source LSB
- ld a, h
- and $1f
- ld [rHDMA3], a ; target MSB
- ld a, l
- and $f0
- ld [rHDMA4], a ; target LSB
-; stop when c < 8
- ld a, c
- cp $8
- jr c, .done
-; decrease c by 8
- sub $8
- ld c, a
-; DMA transfer state
- ld a, $f
- ld [hDMATransfer], a
- call DelayFrame
-; add $100 to hl and de
- ld a, l
- add $100 % $100
+ ld hl, wcf3c
+ ld a, [hli]
+ ld h, [hl]
ld l, a
- ld a, h
- adc $100 / $100
- ld h, a
- ld a, e
- add $100 % $100
- ld e, a
- ld a, d
- adc $100 / $100
- ld d, a
- jr .loop
+ ld de, sDecompressBuffer
+ call Decompress
-.done
- ld a, c
- and $7f ; pretty silly, considering at most bits 0-2 would be set
- ld [hDMATransfer], a
- call DelayFrame
+ call CloseSRAM
pop af
rst Bankswitch
-
- pop af
- ld [hBGMapMode], a
ret
-; e4a
-
-
-ReplaceKrisSprite:: ; e4a
- callba _ReplaceKrisSprite
- ret
-; e51
-
-
-
-LoadStandardFont:: ; e51
- callba _LoadStandardFont
+Functiond97::
+ callba Function1413c
ret
-; e58
-LoadFontsBattleExtra:: ; e58
- callba _LoadFontsBattleExtra
+Functiond9e::
+ callba Functionf8000
ret
-; e5f
-
-
-LoadFontsExtra:: ; e5f
- callba _LoadFontsExtra1
- callba _LoadFontsExtra2
+Functionda5::
+ callba Functionf8032
ret
-; e6c
-LoadFontsExtra2:: ; e6c
- callba _LoadFontsExtra2
+Functiondac::
+ callba Functionf800c
ret
-; e73
-DecompressRequest2bpp:: ; e73
+DecompressRequest2bpp::
push de
ld a, BANK(sScratch)
- call GetSRAMBank
+ call OpenSRAM
push bc
ld de, sScratch
@@ -159,236 +57,134 @@ DecompressRequest2bpp:: ; e73
call Request2bpp
call CloseSRAM
ret
-; e8d
-
-
-FarCopyBytes:: ; e8d
-; copy bc bytes from a:hl to de
-
- ld [hBuffer], a
+FarCopyBytes:: ; dcd (0:0dcd)
+ ld [wBuffer], a
ld a, [hROMBank]
push af
- ld a, [hBuffer]
+ ld a, [wBuffer]
rst Bankswitch
-
call CopyBytes
-
pop af
rst Bankswitch
ret
-; 0xe9b
-
-FarCopyBytesDouble:: ; e9b
-; Copy bc bytes from a:hl to bc*2 bytes at de,
-; doubling each byte in the process.
-
- ld [hBuffer], a
+FarCopyBytesDouble:: ; ddd (0:0ddd)
+ ld [wBuffer], a
ld a, [hROMBank]
push af
- ld a, [hBuffer]
+ 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
+ jr .enter_loop
-.loop
+.copy
ld a, [de]
inc de
-rept 2
ld [hli], a
-endr
-.dec
+ ld [hli], a
+.enter_loop
dec c
- jr nz, .loop
+ jr nz, .copy
dec b
- jr nz, .loop
-
+ jr nz, .copy
pop af
rst Bankswitch
ret
-; 0xeba
-
-Request2bpp:: ; eba
-; Load 2bpp at b:de to occupy c tiles of hl.
+Request2bpp:: ; dfe (0:0dfe)
ld a, [hBGMapMode]
push af
xor a
ld [hBGMapMode], a
-
ld a, [hROMBank]
push af
ld a, b
rst Bankswitch
-
- ld a, [hTilesPerCycle]
- push af
- ld a, $8
- ld [hTilesPerCycle], a
-
- ld a, [wLinkMode]
- cp LINK_MOBILE
- jr nz, .NotMobile
- ld a, [hMobile]
- and a
- jr nz, .NotMobile
- ld a, $6
- ld [hTilesPerCycle], a
-
-.NotMobile
ld a, e
- ld [Requested2bppSource], a
+ ld [wRequested2bppSource], a
ld a, d
- ld [Requested2bppSource + 1], a
+ ld [wRequested2bppSource + 1], a
ld a, l
- ld [Requested2bppDest], a
+ ld [wRequested2bppDest], a
ld a, h
- ld [Requested2bppDest + 1], a
-.loop
+ ld [wRequested2bppDest + 1], a
+.check
ld a, c
- ld hl, hTilesPerCycle
- cp [hl]
- jr nc, .iterate
-
- ld [Requested2bpp], a
-.wait
+ cp $8 ; TilesPerCycle
+ jr nc, .cycle
+ ld [wRequested2bpp], a
call DelayFrame
- ld a, [Requested2bpp]
- and a
- jr nz, .wait
-
- pop af
- ld [hTilesPerCycle], a
-
pop af
rst Bankswitch
-
pop af
ld [hBGMapMode], a
ret
-.iterate
- ld a, [hTilesPerCycle]
- ld [Requested2bpp], a
-
-.wait2
+.cycle
+ ld a, $8 ; TilesPerCycle
+ ld [wRequested2bpp], a
call DelayFrame
- ld a, [Requested2bpp]
- and a
- jr nz, .wait2
-
ld a, c
- ld hl, hTilesPerCycle
- sub [hl]
+ sub $8 ; TilesPerCycle
ld c, a
- jr .loop
-; f1e
-
+ jr .check
-Request1bpp:: ; f1e
-; Load 1bpp at b:de to occupy c tiles of hl.
+Request1bpp:: ; e38 (0:0e38)
ld a, [hBGMapMode]
push af
xor a
ld [hBGMapMode], a
-
ld a, [hROMBank]
push af
ld a, b
rst Bankswitch
-
- ld a, [hTilesPerCycle]
- push af
-
- ld a, $8
- ld [hTilesPerCycle], a
- ld a, [wLinkMode]
- cp LINK_MOBILE
- jr nz, .NotMobile
- ld a, [hMobile]
- and a
- jr nz, .NotMobile
- ld a, $6
- ld [hTilesPerCycle], a
-
-.NotMobile
ld a, e
- ld [Requested1bppSource], a
+ ld [wRequested1bppSource], a
ld a, d
- ld [Requested1bppSource + 1], a
+ ld [wRequested1bppSource + 1], a
ld a, l
- ld [Requested1bppDest], a
+ ld [wRequested1bppDest], a
ld a, h
- ld [Requested1bppDest + 1], a
-.loop
+ ld [wRequested1bppDest + 1], a
+.check
ld a, c
- ld hl, hTilesPerCycle
- cp [hl]
- jr nc, .iterate
-
- ld [Requested1bpp], a
-.wait
+ cp $8 ; TilesPerCycle
+ jr nc, .cycle
+ ld [wRequested1bpp], a
call DelayFrame
- ld a, [Requested1bpp]
- and a
- jr nz, .wait
-
- pop af
- ld [hTilesPerCycle], a
-
pop af
rst Bankswitch
-
pop af
ld [hBGMapMode], a
ret
-.iterate
- ld a, [hTilesPerCycle]
- ld [Requested1bpp], a
-
-.wait2
+.cycle
+ ld a, $8 ; TilesPerCycle
+ ld [wRequested1bpp], a
call DelayFrame
- ld a, [Requested1bpp]
- and a
- jr nz, .wait2
-
ld a, c
- ld hl, hTilesPerCycle
- sub [hl]
+ sub $8 ; TilesPerCycle
ld c, a
- jr .loop
-; f82
-
+ jr .check
-Get2bpp:: ; f82
+Get2bpp::
ld a, [rLCDC]
bit 7, a
jp nz, Request2bpp
-
-Copy2bpp:: ; f89
-; copy c 2bpp tiles from b:de to hl
-
+Copy2bpp::
push hl
ld h, d
ld l, e
pop de
-
-; bank
ld a, b
-
-; bc = c * $10
push af
swap c
ld a, $f
@@ -398,37 +194,45 @@ Copy2bpp:: ; f89
and c
ld c, a
pop af
-
jp FarCopyBytes
-; f9d
-
-Get1bpp:: ; f9d
+Get1bpp::
ld a, [rLCDC]
bit 7, a
jp nz, Request1bpp
-
-Copy1bpp:: ; fa4
-; copy c 1bpp tiles from b:de to hl
-
+Copy1bpp::
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
-rept 3
add hl, hl
-endr
+ add hl, hl
+ add hl, hl
ld b, h
ld c, l
pop af
-
pop hl
jp FarCopyBytesDouble
-; fb6
+
+Functionea6::
+ ld a, [rLCDC]
+ add a
+ jp c, Request2bpp
+Functioneac::
+ push de
+ push hl
+ ld a, b
+ 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