2014-08-12 07:01:04 +00:00
|
|
|
FarCopyData2::
|
2015-07-18 15:17:29 +00:00
|
|
|
; Identical to FarCopyData, but uses hROMBankTemp
|
2014-08-12 07:01:04 +00:00
|
|
|
; as temp space instead of wBuffer.
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hROMBankTemp], a
|
|
|
|
ldh a, [hLoadedROMBank]
|
2014-08-12 07:01:04 +00:00
|
|
|
push af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hROMBankTemp]
|
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
call CopyData
|
|
|
|
pop af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
FarCopyData3::
|
|
|
|
; Copy bc bytes from a:de to hl.
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hROMBankTemp], a
|
|
|
|
ldh a, [hLoadedROMBank]
|
2014-08-12 07:01:04 +00:00
|
|
|
push af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hROMBankTemp]
|
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
push hl
|
|
|
|
push de
|
|
|
|
push de
|
2017-12-30 00:54:27 +00:00
|
|
|
ld d, h
|
|
|
|
ld e, l
|
2014-08-12 07:01:04 +00:00
|
|
|
pop hl
|
|
|
|
call CopyData
|
|
|
|
pop de
|
|
|
|
pop hl
|
|
|
|
pop af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
FarCopyDataDouble::
|
|
|
|
; Expand bc bytes of 1bpp image data
|
|
|
|
; from a:hl to 2bpp data at de.
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hROMBankTemp], a
|
|
|
|
ldh a, [hLoadedROMBank]
|
2014-08-12 07:01:04 +00:00
|
|
|
push af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hROMBankTemp]
|
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
.loop
|
2017-12-30 00:54:27 +00:00
|
|
|
ld a, [hli]
|
|
|
|
ld [de], a
|
2014-08-12 07:01:04 +00:00
|
|
|
inc de
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [de], a
|
2014-08-12 07:01:04 +00:00
|
|
|
inc de
|
|
|
|
dec bc
|
2017-12-30 00:54:27 +00:00
|
|
|
ld a, c
|
2014-08-12 07:01:04 +00:00
|
|
|
or b
|
2017-12-30 00:54:27 +00:00
|
|
|
jr nz, .loop
|
2014-08-12 07:01:04 +00:00
|
|
|
pop af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hLoadedROMBank], a
|
2017-12-30 00:54:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
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.
|
|
|
|
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hAutoBGTransferEnabled]
|
2014-08-12 07:01:04 +00:00
|
|
|
push af
|
|
|
|
xor a ; disable auto-transfer while copying
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hAutoBGTransferEnabled], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hLoadedROMBank]
|
|
|
|
ldh [hROMBankTemp], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, b
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hLoadedROMBank], a
|
2014-09-20 04:57:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, e
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopySource], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, d
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopySource + 1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, l
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDest], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, h
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDest + 1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
.loop
|
|
|
|
ld a, c
|
|
|
|
cp 8
|
|
|
|
jr nc, .keepgoing
|
|
|
|
|
|
|
|
.done
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopySize], a
|
2014-08-12 07:01:04 +00:00
|
|
|
call DelayFrame
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hROMBankTemp]
|
|
|
|
ldh [hLoadedROMBank], a
|
2014-09-20 04:57:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
pop af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hAutoBGTransferEnabled], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
.keepgoing
|
|
|
|
ld a, 8
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopySize], a
|
2014-08-12 07:01:04 +00:00
|
|
|
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.
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hAutoBGTransferEnabled]
|
2014-08-12 07:01:04 +00:00
|
|
|
push af
|
|
|
|
xor a ; disable auto-transfer while copying
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hAutoBGTransferEnabled], a
|
|
|
|
ldh a, [hLoadedROMBank]
|
|
|
|
ldh [hROMBankTemp], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, b
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hLoadedROMBank], a
|
2014-09-20 04:57:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, e
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleSource], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, d
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleSource + 1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
ld a, l
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleDest], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, h
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleDest + 1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
|
|
|
|
.loop
|
|
|
|
ld a, c
|
|
|
|
cp 8
|
|
|
|
jr nc, .keepgoing
|
|
|
|
|
|
|
|
.done
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleSize], a
|
2014-08-12 07:01:04 +00:00
|
|
|
call DelayFrame
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh a, [hROMBankTemp]
|
|
|
|
ldh [hLoadedROMBank], a
|
2014-09-20 04:57:27 +00:00
|
|
|
ld [MBC1RomBank], a
|
2014-08-12 07:01:04 +00:00
|
|
|
pop af
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hAutoBGTransferEnabled], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
.keepgoing
|
|
|
|
ld a, 8
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyDoubleSize], a
|
2014-08-12 07:01:04 +00:00
|
|
|
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
|
2014-08-12 07:01:04 +00:00
|
|
|
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
|
2020-07-07 15:30:10 +00:00
|
|
|
decoord 0, 6 * 0
|
2014-08-12 07:01:04 +00:00
|
|
|
call .setup
|
|
|
|
call DelayFrame
|
|
|
|
|
|
|
|
ld hl, $600 * 1
|
2020-07-07 15:30:10 +00:00
|
|
|
decoord 0, 6 * 1
|
2014-08-12 07:01:04 +00:00
|
|
|
call .setup
|
|
|
|
call DelayFrame
|
|
|
|
|
|
|
|
ld hl, $600 * 2
|
2020-07-07 15:30:10 +00:00
|
|
|
decoord 0, 6 * 2
|
2014-08-12 07:01:04 +00:00
|
|
|
call .setup
|
|
|
|
jp DelayFrame
|
|
|
|
|
|
|
|
.setup
|
|
|
|
ld a, d
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyBGSource+1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
call GetRowColAddressBgMap
|
|
|
|
ld a, l
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyBGDest], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, h
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyBGDest+1], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, c
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyBGNumRows], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ld a, e
|
2020-07-06 23:03:05 +00:00
|
|
|
ldh [hVBlankCopyBGSource], a
|
2014-08-12 07:01:04 +00:00
|
|
|
ret
|
|
|
|
|
|
|
|
ClearScreen::
|
|
|
|
; Clear wTileMap, then wait
|
|
|
|
; for the bg map to update.
|
|
|
|
ld bc, 20 * 18
|
|
|
|
inc b
|
2020-07-07 15:30:10 +00:00
|
|
|
hlcoord 0, 0
|
2015-08-05 21:20:29 +00:00
|
|
|
ld a, " "
|
2014-08-12 07:01:04 +00:00
|
|
|
.loop
|
|
|
|
ld [hli], a
|
|
|
|
dec c
|
|
|
|
jr nz, .loop
|
|
|
|
dec b
|
|
|
|
jr nz, .loop
|
|
|
|
jp Delay3
|