pokepinball/home/sgb.asm
Raymond Dodge d1f4c7fab7 Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
2024-03-17 09:27:05 -05:00

278 lines
4.4 KiB
NASM

FarSendSGBPackets: ; 0x12a1
; send 16*b bytes at a:hl via the joypad register
ldh [hROMBankBuffer], a
ldh a, [hLoadedROMBank]
push af
ldh a, [hROMBankBuffer]
ldh [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, [hl]
and $7
jr z, .quit
ld b, a
ld c, $0
.loop
push bc
ld a, $0
ld [$ff00+c], a
ld a, $30
ld [$ff00+c], a
ld b, $10
.inner_loop
ld e, $8
ld a, [hli]
ld d, a
.innermost_loop
bit 0, d
ld a, $10
jr nz, .got_data
ld a, $20
.got_data
ld [$ff00+c], a
ld a, $30
ld [$ff00+c], a
rr d
dec e
jr nz, .innermost_loop
dec b
jr nz, .inner_loop
ld a, $20
ld [$ff00+c], a
ld a, $30
ld [$ff00+c], a
pop bc
dec b
jr z, .quit
call SGBWait7000
jr .loop
.quit
pop af
ldh [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
SGBWait7000: ; 0x12ec
ld de, 7000
.asm_12ef
nop
nop
nop
dec de
ld a, d
or e
jr nz, .asm_12ef
ret
InitSGB: ; 0x12f8
ld a, BANK(Data_38010)
ld hl, Data_38010
call FarSendSGBPackets
call SGBWait7000
ld a, [rJOYP]
and $3
cp $3
jr nz, .asm_1346
ld a, $20
ld [rJOYP], a
ld a, [rJOYP]
ld a, [rJOYP]
ld a, $30
ld [rJOYP], a
ld a, $10
ld [rJOYP], a
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, $30
ld [rJOYP], a
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
and $3
cp $3
jr nz, .asm_1346
ld a, BANK(Data_38000)
ld hl, Data_38000
call FarSendSGBPackets
call SGBWait7000
and a
ret
.asm_1346
ld a, BANK(Data_38000)
ld hl, Data_38000
call FarSendSGBPackets
call SGBWait7000
scf
ret
FarSendSGBPacket_BGMapRows: ; 0x1353
ldh [hROMBankBuffer], a
ldh a, [hLoadedROMBank]
push af
ldh a, [hROMBankBuffer]
ldh [hLoadedROMBank], a
ld [MBC5RomBank], a
push af
push hl
ld a, $e4
ld [rBGP], a
ld de, $0010
add hl, de
ld de, vTilesSH ; tiles
call LocalCopyData
ld hl, vBGMap ; bgmap
ld de, $000c
ld a, $80
ld c, $d
.row
ld b, $14
.col
ld [hli], a
inc a
dec b
jr nz, .col
add hl, de
dec c
jr nz, .row
ld a, $81
ld [rLCDC], a
ld bc, $0005
call SGBWait1750
pop hl
pop af
call FarSendSGBPackets
ld bc, $0006
call SGBWait1750
ldh a, [hBGP]
ld [rBGP], a
ldh a, [hLCDC]
ld [rLCDC], a
pop af
ldh [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
SendSGBBorder: ; 0x13a8
ldh a, [hSGBFlag]
and a
ret z
ld bc, $0078
call SGBWait1750
call SignalStartSGBBorderTransmission
ld a, BANK(Data_3a9e6)
ld hl, Data_3a9e6
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3a9f6)
ld hl, Data_3a9f6
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa06)
ld hl, Data_3aa06
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa16)
ld hl, Data_3aa16
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa26)
ld hl, Data_3aa26
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa36)
ld hl, Data_3aa36
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa46)
ld hl, Data_3aa46
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_3aa56)
ld hl, Data_3aa56
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld bc, Data_39166 - Data_38156 - $10
ld a, BANK(Data_38156)
ld hl, Data_38156
call FarSendSGBPacket_BGMapRows
ld bc, $0004
call SGBWait1750
ld bc, Data_3a176 - Data_39166 - $10
ld a, BANK(Data_39166)
ld hl, Data_39166
call FarSendSGBPacket_BGMapRows
ld bc, $0004
call SGBWait1750
ld bc, Data_3a9e6 - Data_3a176 - $10
ld a, BANK(Data_3a176)
ld hl, Data_3a176
call FarSendSGBPacket_BGMapRows
ld bc, $0004
call SGBWait1750
ld bc, Data_38156 - Data_380a6 - $10
ld a, BANK(Data_380a6)
ld hl, Data_380a6
call FarSendSGBPacket_BGMapRows
ld bc, $0004
call SGBWait1750
ld bc, Data_3809a - Data_38030 - $10
ld a, BANK(Data_38030)
ld hl, Data_38030
call FarSendSGBPacket_BGMapRows
ld bc, $0004
call SGBWait1750
ld a, BANK(Data_38020)
ld hl, Data_38020
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ret
SignalStartSGBBorderTransmission: ; 0x1489
ldh a, [hSGBFlag]
and a
ret z
ldh a, [hSGBInit]
and a
ret nz
ld a, BANK(Data_3aa66)
ld hl, Data_3aa66
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
ld a, $ff
ldh [hSGBInit], a
ret
SGBNormal: ; 0x14a4
ldh a, [hSGBFlag]
and a
ret z
ld bc, $0002
call SGBWait1750
ldh a, [hSGBInit]
and a
ret z
ld a, BANK(Data_3aa76)
ld hl, Data_3aa76
call FarSendSGBPackets
ld bc, $0004
call SGBWait1750
xor a
ldh [hSGBInit], a
ret