pokered/home/copy2.asm

229 lines
3.4 KiB
NASM
Raw Normal View History

FarCopyData2::
2015-07-18 15:17:29 +00:00
; Identical to FarCopyData, but uses hROMBankTemp
; as temp space instead of wBuffer.
2015-07-18 15:17:29 +00:00
ld [hROMBankTemp],a
ld a,[H_LOADEDROMBANK]
push af
2015-07-18 15:17:29 +00:00
ld a,[hROMBankTemp]
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
call CopyData
pop af
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
ret
FarCopyData3::
; Copy bc bytes from a:de to hl.
2015-07-18 15:17:29 +00:00
ld [hROMBankTemp],a
ld a,[H_LOADEDROMBANK]
push af
2015-07-18 15:17:29 +00:00
ld a,[hROMBankTemp]
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
push hl
push de
push de
ld d,h
ld e,l
pop hl
call CopyData
pop de
pop hl
pop af
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
ret
FarCopyDataDouble::
; Expand bc bytes of 1bpp image data
; from a:hl to 2bpp data at de.
2015-07-18 15:17:29 +00:00
ld [hROMBankTemp],a
ld a,[H_LOADEDROMBANK]
push af
2015-07-18 15:17:29 +00:00
ld a,[hROMBankTemp]
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
.loop
ld a,[hli]
ld [de],a
inc de
ld [de],a
inc de
dec bc
ld a,c
or b
jr nz,.loop
pop af
ld [H_LOADEDROMBANK],a
ld [MBC1RomBank],a
ret
CopyVideoData::
; Wait for the next VBlank, then copy c 2bpp
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
ld a, [H_AUTOBGTRANSFERENABLED]
push af
xor a ; disable auto-transfer while copying
ld [H_AUTOBGTRANSFERENABLED], a
ld a, [H_LOADEDROMBANK]
2015-07-18 15:17:29 +00:00
ld [hROMBankTemp], a
ld a, b
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
ld a, e
ld [H_VBCOPYSRC], a
ld a, d
ld [H_VBCOPYSRC + 1], a
ld a, l
ld [H_VBCOPYDEST], a
ld a, h
ld [H_VBCOPYDEST + 1], a
.loop
ld a, c
cp 8
jr nc, .keepgoing
.done
ld [H_VBCOPYSIZE], a
call DelayFrame
2015-07-18 15:17:29 +00:00
ld a, [hROMBankTemp]
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
pop af
ld [H_AUTOBGTRANSFERENABLED], a
ret
.keepgoing
ld a, 8
ld [H_VBCOPYSIZE], a
call DelayFrame
ld a, c
sub 8
ld c, a
jr .loop
CopyVideoDataDouble::
; Wait for the next VBlank, then copy c 1bpp
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
ld a, [H_AUTOBGTRANSFERENABLED]
push af
xor a ; disable auto-transfer while copying
ld [H_AUTOBGTRANSFERENABLED], a
ld a, [H_LOADEDROMBANK]
2015-07-18 15:17:29 +00:00
ld [hROMBankTemp], a
ld a, b
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
ld a, e
ld [H_VBCOPYDOUBLESRC], a
ld a, d
ld [H_VBCOPYDOUBLESRC + 1], a
ld a, l
ld [H_VBCOPYDOUBLEDEST], a
ld a, h
ld [H_VBCOPYDOUBLEDEST + 1], a
.loop
ld a, c
cp 8
jr nc, .keepgoing
.done
ld [H_VBCOPYDOUBLESIZE], a
call DelayFrame
2015-07-18 15:17:29 +00:00
ld a, [hROMBankTemp]
ld [H_LOADEDROMBANK], a
ld [MBC1RomBank], a
pop af
ld [H_AUTOBGTRANSFERENABLED], a
ret
.keepgoing
ld a, 8
ld [H_VBCOPYDOUBLESIZE], a
call DelayFrame
ld a, c
sub 8
ld c, a
jr .loop
ClearScreenArea::
; Clear tilemap area cxb at hl.
2015-08-05 21:20:29 +00:00
ld a, " " ; blank tile
ld de, 20 ; screen width
.y
push hl
push bc
.x
ld [hli], a
dec c
jr nz, .x
pop bc
pop hl
add hl, de
dec b
jr nz, .y
ret
CopyScreenTileBufferToVRAM::
; Copy wTileMap to the BG Map starting at b * $100.
; This is done in thirds of 6 rows, so it takes 3 frames.
ld c, 6
ld hl, $600 * 0
2015-07-18 20:52:03 +00:00
coord de, 0, 6 * 0
call .setup
call DelayFrame
ld hl, $600 * 1
2015-07-18 20:52:03 +00:00
coord de, 0, 6 * 1
call .setup
call DelayFrame
ld hl, $600 * 2
2015-07-18 20:52:03 +00:00
coord de, 0, 6 * 2
call .setup
jp DelayFrame
.setup
ld a, d
ld [H_VBCOPYBGSRC+1], a
call GetRowColAddressBgMap
ld a, l
ld [H_VBCOPYBGDEST], a
ld a, h
ld [H_VBCOPYBGDEST+1], a
ld a, c
ld [H_VBCOPYBGNUMROWS], a
ld a, e
ld [H_VBCOPYBGSRC], a
ret
ClearScreen::
; Clear wTileMap, then wait
; for the bg map to update.
ld bc, 20 * 18
inc b
2015-07-18 20:52:03 +00:00
coord hl, 0, 0
2015-08-05 21:20:29 +00:00
ld a, " "
.loop
ld [hli], a
dec c
jr nz, .loop
dec b
jr nz, .loop
jp Delay3