summaryrefslogtreecommitdiff
path: root/home/copy.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/copy.asm')
-rw-r--r--home/copy.asm74
1 files changed, 62 insertions, 12 deletions
diff --git a/home/copy.asm b/home/copy.asm
index be9c8c0c..e14d859c 100644
--- a/home/copy.asm
+++ b/home/copy.asm
@@ -1,24 +1,74 @@
-FarCopyData::
+FarCopyData:: ; 009d (0:009d)
; Copy bc bytes from a:hl to de.
- ld [wBuffer], a
+ ld [wd122+1], a
ld a, [H_LOADEDROMBANK]
push af
- ld a, [wBuffer]
- ld [H_LOADEDROMBANK], a
- ld [MBC1RomBank], a
+ ld a, [wd122+1]
+ call BankswitchCommon
call CopyData
pop af
- ld [H_LOADEDROMBANK], a
- ld [MBC1RomBank], a
+ call BankswitchCommon
ret
-CopyData::
+CopyData:: ; 00b1 (0:00b1)
; Copy bc bytes from hl to de.
+ ld a,b
+ and a
+ jr z, .copybytes
+ ld a,c
+ and a ; is lower byte 0
+ jr z, .loop
+ inc b ; if not, increment b as there are <$100 bytes to copy
+.loop
+ call .copybytes
+ dec b
+ jr nz,.loop
+ ret
+
+.copybytes ; 00c1
ld a, [hli]
ld [de], a
inc de
- dec bc
- ld a, c
- or b
- jr nz, CopyData
+ dec c
+ jr nz, .copybytes
ret
+
+CopyVideoDataAlternate:: ; 00c8 (0:00c8)
+ ld a, [rLCDC]
+ bit 7,a ; LCD enabled?
+ jp nz, CopyVideoData ; if yes, then copy video data
+ push hl
+ ld h,d
+ ld l,e
+ pop de
+ ld a,b ; save bank
+ push af
+ swap c
+ ld a,$f
+ and c
+ ld b,a
+ ld a,$f0
+ and c
+ ld c,a
+ pop af
+ jp FarCopyData
+
+CopyVideoDataDoubleAlternate:: ; 00e3 (0:00e3)
+ ld a, [rLCDC]
+ bit 7,a ; LCD enabled?
+ jp nz, CopyVideoDataDouble ; if yes, then copy video data
+ push de
+ ld d,h
+ ld e,l
+ ld a,b
+ push af ; save bank to switch to
+ ld h,$0
+ ld l,c
+ add hl,hl ; get raw length of bytes to copy
+ add hl,hl
+ add hl,hl
+ ld b,h
+ ld c,l
+ pop af
+ pop hl
+ jp FarCopyDataDouble