mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-11 13:15:35 -05:00
1144 lines
17 KiB
NASM
Executable File
1144 lines
17 KiB
NASM
Executable File
Func_71eb3: ; 71eb3 (1c:5eb3)
|
|
call GetPredefRegisters
|
|
ld a, b
|
|
cp $ff
|
|
jr nz, .asm_71ebe
|
|
ld a, [wcf1c]
|
|
.asm_71ebe
|
|
cp $fc
|
|
jp z, Func_7218b
|
|
ld l, a
|
|
ld h, $0
|
|
add hl, hl
|
|
ld de, PointerTable_7206b
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, Func_72328
|
|
push de
|
|
jp [hl]
|
|
|
|
SendPalPacket_Black: ; 71ed3 (1c:5ed3)
|
|
ld hl, PalPacket_Black
|
|
ld de, BlkPacket_Battle
|
|
ret
|
|
|
|
; uses PalPacket_Empty to build a packet based on mon IDs and health color
|
|
BuildBattlePalPacket: ; 71eda (1c:5eda)
|
|
ld hl, PalPacket_Empty
|
|
ld de, wcf2d
|
|
ld bc, $10
|
|
call CopyData
|
|
;ld a, [W_PLAYERBATTSTATUS3]
|
|
ld hl, wBattleMonSpecies
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_71ef9
|
|
ld hl, wPartyMon1
|
|
ld a, [wPlayerMonNumber]
|
|
ld bc, wPartyMon2 - wPartyMon1
|
|
call AddNTimes
|
|
.asm_71ef9
|
|
call DeterminePaletteID
|
|
ld b, a
|
|
;ld a, [W_ENEMYBATTSTATUS3]
|
|
ld hl, wEnemyMonSpecies2
|
|
call DeterminePaletteID
|
|
ld c, a
|
|
ld hl, wcf2e
|
|
ld a, [wcf1d]
|
|
add PAL_GREENBAR
|
|
ld [hli], a
|
|
inc hl
|
|
ld a, [wcf1e]
|
|
add PAL_GREENBAR
|
|
ld [hli], a
|
|
inc hl
|
|
ld a, b
|
|
ld [hli], a
|
|
inc hl
|
|
ld a, c
|
|
ld [hl], a
|
|
ld hl, wcf2d
|
|
ld de, BlkPacket_Battle
|
|
ld a, $1
|
|
ld [wcf1c], a
|
|
ret
|
|
|
|
SendPalPacket_TownMap: ; 71f26 (1c:5f26)
|
|
ld hl, PalPacket_TownMap
|
|
ld de, BlkPacket_WholeScreen
|
|
ret
|
|
|
|
; uses PalPacket_Empty to build a packet based the mon ID
|
|
BuildStatusScreenPalPacket: ; 71f2d (1c:5f2d)
|
|
ld hl, PalPacket_Empty
|
|
ld de, wcf2d
|
|
ld bc, $10
|
|
call CopyData
|
|
ld a, [wcf91]
|
|
cp VICTREEBEL + 1
|
|
jr c, .pokemon
|
|
ld a, $1 ; not pokemon
|
|
.pokemon
|
|
call DeterminePaletteIDOutOfBattle
|
|
push af
|
|
ld hl, wcf2e
|
|
ld a, [wcf25]
|
|
add $1f
|
|
ld [hli], a
|
|
inc hl
|
|
pop af
|
|
ld [hl], a
|
|
ld hl, wcf2d
|
|
ld de, BlkPacket_StatusScreen
|
|
ret
|
|
|
|
SendPalPacket_PartyMenu: ; 71f59 (1c:5f59)
|
|
ld hl, PalPacket_PartyMenu
|
|
ld de, wcf2e
|
|
ret
|
|
|
|
SendPalPacket_Pokedex: ; 71f60 (1c:5f60)
|
|
ld hl, PalPacket_Pokedex
|
|
ld de, wcf2d
|
|
ld bc, $10
|
|
call CopyData
|
|
ld a, [wcf91]
|
|
call DeterminePaletteIDOutOfBattle
|
|
ld hl, wcf30
|
|
ld [hl], a
|
|
ld hl, wcf2d
|
|
ld de, BlkPacket_Pokedex
|
|
ret
|
|
|
|
SendPalPacket_Slots: ; 71f7d (1c:5f7d)
|
|
ld hl, PalPacket_Slots
|
|
ld de, BlkPacket_Slots
|
|
ret
|
|
|
|
SendPalPacket_Titlescreen: ; 71f84 (1c:5f84)
|
|
ld hl, PalPacket_Titlescreen
|
|
ld de, BlkPacket_Titlescreen
|
|
ret
|
|
|
|
; used mostly for menus and the Oak intro
|
|
SendPalPacket_Generic: ; 71f8b (1c:5f8b)
|
|
ld hl, PalPacket_Generic
|
|
ld de, BlkPacket_WholeScreen
|
|
ret
|
|
|
|
SendPalPacket_NidorinoIntro: ; 71f92 (1c:5f92)
|
|
ld hl, PalPacket_NidorinoIntro
|
|
ld de, BlkPacket_NidorinoIntro
|
|
ret
|
|
|
|
SendPalPacket_GameFreakIntro: ; 71f99 (1c:5f99)
|
|
ld hl, PalPacket_GameFreakIntro
|
|
ld de, BlkPacket_GameFreakIntro
|
|
ld a, $8
|
|
ld [wcf1c], a
|
|
ret
|
|
|
|
; uses PalPacket_Empty to build a packet based on the current map
|
|
BuildOverworldPalPacket: ; 71fa5 (1c:5fa5)
|
|
ld hl, PalPacket_Empty
|
|
ld de, wcf2d
|
|
ld bc, $10
|
|
call CopyData
|
|
ld a, [W_CURMAPTILESET]
|
|
cp CEMETERY
|
|
jr z, .PokemonTowerOrAgatha
|
|
cp CAVERN
|
|
jr z, .caveOrBruno
|
|
ld a, [W_CURMAP]
|
|
cp REDS_HOUSE_1F
|
|
jr c, .townOrRoute
|
|
cp UNKNOWN_DUNGEON_2
|
|
jr c, .normalDungeonOrBuilding
|
|
cp NAME_RATERS_HOUSE
|
|
jr c, .caveOrBruno
|
|
cp LORELEIS_ROOM
|
|
jr z, .Lorelei
|
|
cp BRUNOS_ROOM
|
|
jr z, .caveOrBruno
|
|
cp BATTLE_CENTER
|
|
jr z,.asm_71ffd
|
|
cp TRADE_CENTER
|
|
jr z,.asm_71ffd
|
|
.normalDungeonOrBuilding
|
|
ld a, [wLastMap] ; town or route that current dungeon or building is located
|
|
.townOrRoute
|
|
cp SAFFRON_CITY + 1
|
|
jr c, .town
|
|
ld a, PAL_ROUTE - 1
|
|
.town
|
|
inc a ; a town's pallete ID is its map ID + 1
|
|
ld hl, wcf2e
|
|
ld [hld], a
|
|
ld de, BlkPacket_WholeScreen
|
|
ld a, $9
|
|
ld [wcf1c], a
|
|
ret
|
|
.PokemonTowerOrAgatha
|
|
ld a, PAL_GREYMON - 1
|
|
jr .town
|
|
.caveOrBruno
|
|
ld a, PAL_CAVE - 1
|
|
jr .town
|
|
.Lorelei
|
|
xor a
|
|
jr .town
|
|
.asm_71ffd
|
|
ld a,$18
|
|
jr .town
|
|
|
|
; used when a Pokemon is the only thing on the screen
|
|
; such as evolution, trading and the Hall of Fame
|
|
SendPokemonPalette_WholeScreen: ; 72001 (1c:6001)
|
|
push bc
|
|
ld hl, PalPacket_Empty
|
|
ld de, wcf2d
|
|
ld bc, $10
|
|
call CopyData
|
|
pop bc
|
|
ld a, c
|
|
and a
|
|
ld a, $1e
|
|
jr nz, .asm_7201b
|
|
ld a, [wcf1d]
|
|
call DeterminePaletteIDOutOfBattle
|
|
.asm_7201b
|
|
ld [wcf2e], a
|
|
ld hl, wcf2d
|
|
ld de, BlkPacket_WholeScreen
|
|
ret
|
|
|
|
BuildTrainerCardPalPacket: ; 72025 (1c:6025)
|
|
ld hl, BlkPacket_TrainerCard
|
|
ld de, wcc5b
|
|
ld bc, $40
|
|
call CopyData
|
|
ld de, LoopCounts_71f8f
|
|
ld hl, wcc5d
|
|
ld a, [W_OBTAINEDBADGES]
|
|
ld c, $8
|
|
.asm_7203c
|
|
srl a
|
|
push af
|
|
jr c, .asm_7204c
|
|
push bc
|
|
ld a, [de]
|
|
ld c, a
|
|
xor a
|
|
.asm_72045
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .asm_72045
|
|
pop bc
|
|
jr .asm_72051
|
|
.asm_7204c
|
|
ld a, [de]
|
|
.asm_7204d
|
|
inc hl
|
|
dec a
|
|
jr nz, .asm_7204d
|
|
.asm_72051
|
|
pop af
|
|
inc de
|
|
dec c
|
|
jr nz, .asm_7203c
|
|
ld hl, PalPacket_TrainerCard
|
|
ld de, wcc5b
|
|
ret
|
|
|
|
SendUnknownPalPacket_7205d:: ; 7205d (1c:605d)
|
|
ld hl,UnknownPalPacket_72811
|
|
ld de,UnknownPacket_72611
|
|
ret
|
|
|
|
SendUnknownPalPacket_72064:: ; 72064 (1c:6064)
|
|
ld hl,UnknownPalPacket_72821
|
|
ld de,UnknownPacket_72751
|
|
ret
|
|
|
|
PointerTable_7206b: ; 7206b (1c:606b)
|
|
dw SendPalPacket_Black
|
|
dw BuildBattlePalPacket
|
|
dw SendPalPacket_TownMap
|
|
dw BuildStatusScreenPalPacket
|
|
dw SendPalPacket_Pokedex
|
|
dw SendPalPacket_Slots
|
|
dw SendPalPacket_Titlescreen
|
|
dw SendPalPacket_NidorinoIntro
|
|
dw SendPalPacket_Generic
|
|
dw BuildOverworldPalPacket
|
|
dw SendPalPacket_PartyMenu
|
|
dw SendPokemonPalette_WholeScreen
|
|
dw SendPalPacket_GameFreakIntro
|
|
dw BuildTrainerCardPalPacket
|
|
dw SendUnknownPalPacket_7205d
|
|
dw SendUnknownPalPacket_72064
|
|
|
|
; each byte is the number of loops to make in .asm_71f5b for each badge
|
|
LoopCounts_7208b: ; 7208b (1c:608b)
|
|
db $06,$06,$06,$12,$06,$06,$06,$06
|
|
|
|
;DeterminePaletteID: ; 71f97 (1c:5f97)
|
|
;bit 3, a ; bit 3 of battle status 3, set if ;current Pokemon is transformed
|
|
;ld a, PAL_GREYMON ; if yes, use Ditto's palette
|
|
;ret nz
|
|
DeterminePaletteID: ; 72093 (1c:6093)
|
|
ld a, [hl]
|
|
DeterminePaletteIDOutOfBattle: ; 72094 (1c:6094)
|
|
ld [wd11e], a
|
|
and a
|
|
jr z, .idZero
|
|
push bc
|
|
predef IndexToPokedex ; turn Pokemon ID number into Pokedex number
|
|
pop bc
|
|
ld a, [wd11e]
|
|
.idZero
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, MonsterPalettes ; not just for Pokemon, Trainers use it too
|
|
add hl, de
|
|
ld a, [hl]
|
|
ret
|
|
|
|
Func_720ad:: ; 720ad (1c:60ad)
|
|
ld a,e
|
|
and a
|
|
jr nz,Func_720bd
|
|
ld hl,Pointer_727e1
|
|
ld a,[hGBC]
|
|
and a
|
|
jp z,Func_721b4
|
|
jp Func_72346
|
|
|
|
Func_720bd:: ; 720bd (1c:60bd)
|
|
ld hl,Func_72811
|
|
ld a,[hGBC]
|
|
and a
|
|
jp z,Func_721b4
|
|
call Func_72346
|
|
ld hl,Pointer_727e1
|
|
inc hl
|
|
ld a,[hli]
|
|
call Func_723fe
|
|
ld a,e
|
|
ld [wdee4],a
|
|
ld a,d
|
|
ld [wdee5],a
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$1
|
|
call Func_72470
|
|
ret
|
|
|
|
Func_720e3:: ; 720e3 (1c:60e3)
|
|
ld hl,Pointer_72761
|
|
ld de,wcf2d
|
|
ld bc,$10
|
|
call CopyData
|
|
call Func_7213b
|
|
ld hl,wcf2e
|
|
ld [hl],a
|
|
ld hl,wcf30
|
|
ld a,$26
|
|
ld [hl],a
|
|
ld hl,wcf2d
|
|
ld a,[hGBC]
|
|
and a
|
|
jr nz,.asm_72109
|
|
call Func_721b4
|
|
jr .asm_7210c
|
|
.asm_72109
|
|
call Func_72346
|
|
.asm_7210c
|
|
ld hl,UnknownPacket_72611
|
|
ld de,wcf2d
|
|
ld bc,$10
|
|
call CopyData
|
|
ld hl,wcf30
|
|
ld a,$5
|
|
ld [hli],a
|
|
ld a,$7
|
|
ld [hli],a
|
|
ld a,$6
|
|
ld [hli],a
|
|
ld a,$b
|
|
ld [hli],a
|
|
ld a,$a
|
|
ld [hl],a
|
|
ld hl,wcf2d
|
|
ld a,[hGBC]
|
|
and a
|
|
jr nz,.asm_72137
|
|
call Func_721b4
|
|
jr .asm_7213a
|
|
.asm_72137
|
|
call Func_72346
|
|
.asm_7213a
|
|
ret
|
|
|
|
Func_7213b:: ; 7213b (1c:613b)
|
|
; similar to BuildOverworldPalPacket
|
|
ld a, [W_CURMAPTILESET]
|
|
cp CEMETERY
|
|
jr z, .PokemonTowerOrAgatha
|
|
cp CAVERN
|
|
jr z, .caveOrBruno
|
|
ld a, [W_CURMAP]
|
|
cp REDS_HOUSE_1F
|
|
jr c, .townOrRoute
|
|
cp UNKNOWN_DUNGEON_2
|
|
jr c, .normalDungeonOrBuilding
|
|
cp NAME_RATERS_HOUSE
|
|
jr c, .caveOrBruno
|
|
cp LORELEIS_ROOM
|
|
jr z, .Lorelei
|
|
cp BRUNOS_ROOM
|
|
jr z, .caveOrBruno
|
|
cp BATTLE_CENTER
|
|
jr z,.battleOrTradeCenter
|
|
cp TRADE_CENTER
|
|
jr z,.battleOrTradeCenter
|
|
.normalDungeonOrBuilding
|
|
ld a, [wLastMap] ; town or route that current dungeon or building is located
|
|
.townOrRoute
|
|
cp SAFFRON_CITY + 1
|
|
jr c, .town
|
|
ld a, PAL_ROUTE - 1
|
|
.town
|
|
inc a ; a town's pallete ID is its map ID + 1
|
|
ret
|
|
.PokemonTowerOrAgatha
|
|
ld a, PAL_GREYMON - 1
|
|
jr .town
|
|
.caveOrBruno
|
|
ld a, PAL_CAVE - 1
|
|
jr .town
|
|
.Lorelei
|
|
xor a
|
|
jr .town
|
|
.battleOrTradeCenter
|
|
ld a,$18
|
|
jr .town
|
|
|
|
SendBlkPacket_PartyMenu: ; 7217f (1c:617f)
|
|
ld hl, BlkPacket_PartyMenu ; $62f4
|
|
ld de, wcf2e
|
|
ld bc, $30
|
|
jp CopyData
|
|
|
|
Func_71fc2: ; 7218b (1c:618b)
|
|
ld hl, wcf1f
|
|
ld a, [wcf2d]
|
|
ld e, a
|
|
ld d, $0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
ld a, [de]
|
|
and a
|
|
ld e, $5
|
|
jr z, .asm_721a4
|
|
dec a
|
|
ld e, $a
|
|
jr z, .asm_721a4
|
|
ld e, $f
|
|
.asm_721a4
|
|
push de
|
|
ld hl, wcf37
|
|
ld bc, $6
|
|
ld a, [wcf2d]
|
|
call AddNTimes
|
|
pop de
|
|
ld [hl], e
|
|
ret
|
|
|
|
Func_721b4: ; 721b4 (1c:61b4)
|
|
ld a,$1
|
|
; load a non-zero value in $fff9 to disable the routine that checks actual
|
|
; joypad input (said routine, located at $15f, does nothing if $fff9 is not
|
|
; zero)
|
|
ld [hReadJoypad],a
|
|
call SendSGBPacket
|
|
xor a
|
|
ld [hReadJoypad],a
|
|
ret
|
|
|
|
SendSGBPacket: ; 71feb (1c:5feb)
|
|
;check number of packets
|
|
ld a,[hl]
|
|
and a,$07
|
|
ret z
|
|
; store number of packets in B
|
|
ld b,a
|
|
.loop2
|
|
; save B for later use
|
|
push bc
|
|
; send RESET signal (P14=LOW, P15=LOW)
|
|
xor a
|
|
ld [$ff00],a
|
|
; set P14=HIGH, P15=HIGH
|
|
ld a,$30
|
|
ld [$ff00],a
|
|
;load length of packets (16 bytes)
|
|
ld b,$10
|
|
.nextByte
|
|
;set bit counter (8 bits per byte)
|
|
ld e,$08
|
|
; get next byte in the packet
|
|
ld a,[hli]
|
|
ld d,a
|
|
.nextBit0
|
|
bit 0,d
|
|
; if 0th bit is not zero set P14=HIGH,P15=LOW (send bit 1)
|
|
ld a,$10
|
|
jr nz,.next0
|
|
; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
|
|
ld a,$20
|
|
.next0
|
|
ld [$ff00],a
|
|
; must set P14=HIGH,P15=HIGH between each "pulse"
|
|
ld a,$30
|
|
ld [$ff00],a
|
|
; rotation will put next bit in 0th position (so we can always use command
|
|
; "bit 0,d" to fetch the bit that has to be sent)
|
|
rr d
|
|
; decrease bit counter so we know when we have sent all 8 bits of current byte
|
|
dec e
|
|
jr nz,.nextBit0
|
|
dec b
|
|
jr nz,.nextByte
|
|
; send bit 1 as a "stop bit" (end of parameter data)
|
|
ld a,$20
|
|
ld [$ff00],a
|
|
; set P14=HIGH,P15=HIGH
|
|
ld a,$30
|
|
ld [$ff00],a
|
|
call Wait7000
|
|
; xor a
|
|
; ld [$fff9],a
|
|
; wait for about 70000 cycles
|
|
; call Wait7000
|
|
; restore (previously pushed) number of packets
|
|
pop bc
|
|
dec b
|
|
; return if there are no more packets
|
|
ret z
|
|
; else send 16 more bytes
|
|
jr .loop2
|
|
|
|
LoadSGB: ; 721f8 (1c:61f8)
|
|
xor a
|
|
ld [wOnSGB], a
|
|
call CheckSGB
|
|
jr c, .onSGB
|
|
ld a, [hGBC]
|
|
and a
|
|
jr z, .onDMG
|
|
ld a, $1
|
|
ld [wOnSGB], a
|
|
.onDMG
|
|
ret
|
|
.onSGB
|
|
di
|
|
call Func_72247
|
|
ei
|
|
ld a, $1
|
|
ld [wcf2d], a
|
|
ld de, ChrTrnPacket
|
|
ld hl, SGBBorderGraphics
|
|
call Func_722d7
|
|
xor a
|
|
ld [wcf2d], a
|
|
ld de, PctTrnPacket
|
|
ld hl, BorderPalettes
|
|
call Func_722d7
|
|
xor a
|
|
ld [wcf2d], a
|
|
ld de, PalTrnPacket
|
|
ld hl, SuperPalettes
|
|
call Func_722d7
|
|
call ClearVram
|
|
ld hl, MaskEnCancelPacket
|
|
jp SendSGBPacket
|
|
|
|
Func_72247: ; 72247 (1c:6247)
|
|
ld hl, PointerTable_72089
|
|
ld c, $9
|
|
.loop
|
|
push bc
|
|
ld a, [hli]
|
|
push hl
|
|
ld h, [hl]
|
|
ld l, a
|
|
call SendSGBPacket
|
|
pop hl
|
|
inc hl
|
|
pop bc
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
PointerTable_7225b: ; 7225b (1c:625b)
|
|
dw MaskEnFreezePacket
|
|
dw DataSnd_72548
|
|
dw DataSnd_72558
|
|
dw DataSnd_72568
|
|
dw DataSnd_72578
|
|
dw DataSnd_72588
|
|
dw DataSnd_72598
|
|
dw DataSnd_725a8
|
|
dw DataSnd_725b8
|
|
|
|
CheckSGB: ; 7226d (1c:626d)
|
|
ld hl, MltReq2Packet
|
|
call Func_721b4
|
|
call Wait7000
|
|
ld a, [rJOYP] ; $ff0
|
|
and $3
|
|
cp $3
|
|
jr nz, .asm_722c9
|
|
ld a, $20
|
|
ld [rJOYP], a ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
call Wait7000
|
|
call Wait7000
|
|
ld a, $30
|
|
ld [rJOYP], a ; $ff0
|
|
call Wait7000
|
|
call Wait7000
|
|
ld a, $10
|
|
ld [rJOYP], a ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
call Wait7000
|
|
call Wait7000
|
|
ld a, $30
|
|
ld [rJOYP], a ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
ld a, [rJOYP] ; $ff0
|
|
call Wait7000
|
|
call Wait7000
|
|
ld a, [rJOYP] ; $ff0
|
|
and $3
|
|
cp $3
|
|
jr nz, .asm_722c9
|
|
call Func_722ce
|
|
and a
|
|
ret
|
|
.asm_722c9
|
|
call Func_722ce
|
|
scf
|
|
ret
|
|
|
|
Func_722ce: ; 722ce (1c:62ce)
|
|
ld hl, MltReq1Packet
|
|
call SendSGBPacket
|
|
jp Wait7000
|
|
|
|
Func_722d7: ; 722d7 (1c:62d7)
|
|
di
|
|
push de
|
|
call DisableLCD
|
|
ld a, $e4
|
|
ld [rBGP], a ; $ff47
|
|
call Func_72520
|
|
ld de, vChars1
|
|
ld a, [wcf2d]
|
|
and a
|
|
jr z, .asm_722f1
|
|
call Func_725fb
|
|
jr .asm_722f7
|
|
.asm_722f1
|
|
ld bc, $1000
|
|
call CopyData
|
|
.asm_722f7
|
|
ld hl, vBGMap0
|
|
ld de, $c
|
|
ld a, $80
|
|
ld c, $d
|
|
.asm_72301
|
|
ld b, $14
|
|
.asm_72303
|
|
ld [hli], a
|
|
inc a
|
|
dec b
|
|
jr nz, .asm_72303
|
|
add hl, de
|
|
dec c
|
|
jr nz, .asm_72301
|
|
ld a, $e3
|
|
ld [rLCDC], a ; $ff40
|
|
pop hl
|
|
call SendSGBPacket
|
|
xor a
|
|
ld [rBGP], a ; $ff47
|
|
call Func_72520
|
|
ei
|
|
ret
|
|
|
|
Wait7000: ; 7231c (1c:631c)
|
|
; Each loop takes 9 cycles so this routine actually waits 63000 cycles.
|
|
ld de, 7000
|
|
.loop
|
|
nop
|
|
nop
|
|
nop
|
|
dec de
|
|
ld a, d
|
|
or e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Func_72328: ; 72328 (1c:6328)
|
|
ld a, [hGBC]
|
|
and a
|
|
jr z, .asm_7233e
|
|
push de
|
|
call Func_72346
|
|
pop hl
|
|
call Func_72346
|
|
ld a,[rLCDC]
|
|
and rLCDC_ENABLE_MASK
|
|
ret z
|
|
call Delay3
|
|
ret
|
|
.asm_7233e
|
|
push de
|
|
call SendSGBPacket
|
|
pop hl
|
|
jp SendSGBPacket
|
|
|
|
Func_72346: ; 72346 (1c:6346)
|
|
ld a,[hl]
|
|
and $f8
|
|
cp $20
|
|
jp z,Func_7265e
|
|
inc hl
|
|
ld a,[hli]
|
|
inc hl
|
|
push hl
|
|
call Func_723fe
|
|
ld a,e
|
|
ld [wdee2],a
|
|
ld a,d
|
|
ld [wdee3],a
|
|
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$0
|
|
call Func_72470
|
|
ld a,$1
|
|
call Func_7240f
|
|
ld a,$0
|
|
call Func_724df
|
|
ld a,$2
|
|
call Func_7240f
|
|
ld a,$4
|
|
call Func_724df
|
|
|
|
pop hl
|
|
ld a,[hli]
|
|
inc hl
|
|
push hl
|
|
call Func_723fe
|
|
ld a,e
|
|
ld [wdee4],a
|
|
ld a,d
|
|
ld [wdee5],a
|
|
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$1
|
|
call Func_72470
|
|
ld a,$1
|
|
call Func_7240f
|
|
ld a,$1
|
|
call Func_724df
|
|
ld a,$2
|
|
call Func_7240f
|
|
ld a,$5
|
|
call Func_7240f
|
|
|
|
pop hl
|
|
ld a,[hli]
|
|
inc hl
|
|
push hl
|
|
call Func_723fe
|
|
ld a,e
|
|
ld [wdee6],a
|
|
ld a,d
|
|
ld [wdee7],a
|
|
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$2
|
|
call Func_72470
|
|
ld a,$1
|
|
call Func_7240f
|
|
ld a,$2
|
|
call Func_724df
|
|
ld a,$2
|
|
call Func_7240f
|
|
ld a,$6
|
|
call Func_724df
|
|
|
|
pop hl
|
|
ld a,[hli]
|
|
inc hl
|
|
call Func_723fe
|
|
ld a,e
|
|
ld [wdee8],a
|
|
ld a,d
|
|
ld [wdee9],a
|
|
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$3
|
|
call Func_72470
|
|
ld a,$1
|
|
call Func_7240f
|
|
ld a,$3
|
|
call Func_724df
|
|
ld a,$2
|
|
call Func_7240f
|
|
ld a,$7
|
|
call Func_724df
|
|
|
|
ret
|
|
|
|
Func_723fe:: ; 723fe (1c:63fe)
|
|
push hl
|
|
ld l,a
|
|
xor a
|
|
ld h,a
|
|
add hl,hl
|
|
add hl,hl
|
|
add hl,hl
|
|
ld de,SuperPalettes ; not exactly sure if actually super palettes
|
|
add hl,de
|
|
ld a,l
|
|
ld e,a
|
|
ld a,h
|
|
ld d,a
|
|
pop hl
|
|
ret
|
|
|
|
Func_7240f:: ; 7240f (1c:640f)
|
|
and a
|
|
jr nz,.asm_72419
|
|
ld a,[rBGP]
|
|
ld [wdef2],a
|
|
jr .asm_72428
|
|
.asm_72419
|
|
dec a
|
|
jr nz,.asm_72423
|
|
ld a,[rOBP0]
|
|
ld [wdef3],a
|
|
jr .asm_72428
|
|
.asm_72423
|
|
ld a,[rOBP1]
|
|
ld [wdef4],a
|
|
.asm_72428
|
|
ld b,a
|
|
and $3
|
|
call Func_7246a
|
|
ld a,[hli]
|
|
ld [wdeea],a
|
|
ld a,[hl]
|
|
ld [wdeeb],a
|
|
ld a,b
|
|
rrca
|
|
rrca
|
|
ld b,a
|
|
and $3
|
|
call Func_7246a
|
|
ld a,[hli]
|
|
ld [wdeec],a
|
|
ld a,[hl]
|
|
ld [wdeed],a
|
|
ld a,b
|
|
rrca
|
|
rrca
|
|
ld b,a
|
|
and $3
|
|
call Func_7246a
|
|
ld a,[hli]
|
|
ld [wdeee],a
|
|
ld a,[hl]
|
|
ld [wdeef],a
|
|
ld a,b
|
|
rrca
|
|
rrca
|
|
ld b,a
|
|
and $3
|
|
call Func_7246a
|
|
ld a,[hli]
|
|
ld [wdef0],a
|
|
ld a,[hl]
|
|
ld [wdef1],a
|
|
ret
|
|
|
|
Func_7246a:: ; 7246a (1c:646a)
|
|
add a
|
|
ld l,a
|
|
xor a
|
|
ld h,a
|
|
add hl,de
|
|
ret
|
|
|
|
Func_72470:: ; 72470 (1c:6470)
|
|
push de
|
|
add a
|
|
add a
|
|
add a
|
|
or $80
|
|
ld [rBGPI],a
|
|
ld de,rBGPD
|
|
ld hl,wdeea
|
|
ld b,$2
|
|
ld a,[rLCDC]
|
|
and rLCDC_ENABLE_MASK
|
|
jr nz,.lcdenabled
|
|
rept 4
|
|
call Func_7251b
|
|
endr
|
|
jr .done
|
|
.lcdenabled
|
|
rept 4
|
|
call Func_72511
|
|
endr
|
|
.done
|
|
pop de
|
|
ret
|
|
|
|
Func_724a2:: ; 724a2 (1c:64a2)
|
|
push de
|
|
add a
|
|
add a
|
|
add a
|
|
ld l,a
|
|
xor a
|
|
ld h,a
|
|
ld de,wdef6
|
|
add hl,de
|
|
ld de,wdee9
|
|
ld c,$8
|
|
.loop
|
|
ld a,[de]
|
|
ld [hli],a
|
|
inc de
|
|
dec c
|
|
jr nz,.loop
|
|
pop de
|
|
ret
|
|
|
|
PreparePalDataTransfer:: ; 724ba (1c:64ba)
|
|
; wait for vblank period unless LCD is disabled
|
|
ld a,[rLCDC]
|
|
and rLCDC_ENABLE_MASK
|
|
jr z,.lcddisabled
|
|
di
|
|
.waitloop
|
|
ld a,[rLY]
|
|
cp 144
|
|
jr c,.waitloop
|
|
.lcddisabled
|
|
call TransferPalData
|
|
ei
|
|
ret
|
|
|
|
TransferPalData: ; 724cc (1c:64cc)
|
|
xor a
|
|
or $80
|
|
ld [rBGPI], a
|
|
ld de,rBGPD
|
|
ld hl,wdef6
|
|
ld c,$20
|
|
.loop
|
|
ld a,[hli]
|
|
ld [de],a
|
|
dec c
|
|
jr nz,.loop
|
|
ret
|
|
|
|
Func_724df: ; 724df (1c:64df)
|
|
push de
|
|
add a
|
|
add a
|
|
add a
|
|
or $80
|
|
ld [rOBPI],a
|
|
ld de,rOBPD
|
|
ld hl,wdeea
|
|
ld b,$2 ; searching oam STAT mode
|
|
ld a,[rLCDC]
|
|
and rLCDC_ENABLE_MASK
|
|
jr nz,.lcdenabled
|
|
rept 4
|
|
call Func_7251b
|
|
endr
|
|
jr .done
|
|
.lcdenabled
|
|
rept 4
|
|
call Func_72511
|
|
endr
|
|
.done
|
|
pop de
|
|
ret
|
|
|
|
Func_72511: ; 72511 (1c:6511)
|
|
ld a,[rSTAT]
|
|
and b
|
|
jr z,Func_72511 ; wait if either in hblank or vblank period
|
|
.notinhblank
|
|
ld a,[rSTAT]
|
|
and b
|
|
jr nz,.notinhblank ; wait if transferring oam or data to lcd driver
|
|
Func_7251b: ; 7251b (1c:651b)
|
|
ld a,[hli]
|
|
ld [de],a
|
|
ld a,[hli]
|
|
ld [de],a
|
|
ret
|
|
|
|
Func_72520:: ; 72520 (1c:6520)
|
|
ld a,[hGBC]
|
|
and a
|
|
ret z
|
|
; fallthrough
|
|
Func_72524:: ; 72524 (1c:6524)
|
|
ld a,[wdee2]
|
|
ld e,a
|
|
ld a,[wdee3]
|
|
ld d,a
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$0
|
|
call Func_724a2
|
|
ld a,[wdee4]
|
|
ld e,a
|
|
ld a,[wdee5]
|
|
ld d,a
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$1
|
|
call Func_724a2
|
|
ld a,[wdee5]
|
|
ld e,a
|
|
ld a,[wdee6]
|
|
ld d,a
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$2
|
|
call Func_724a2
|
|
ld a,[wdee8]
|
|
ld e,a
|
|
ld a,[wdee9]
|
|
ld d,a
|
|
xor a
|
|
call Func_7240f
|
|
ld a,$3
|
|
call Func_724a2
|
|
call PreparePalDataTransfer
|
|
ret
|
|
|
|
Func_7265c:: ; 7265c (1c:656c)
|
|
ld a,[wdee2]
|
|
ld e,a
|
|
ld a,[wdee3]
|
|
ld d,a
|
|
ld a,c
|
|
call Func_7240f
|
|
ld a,c
|
|
dec a
|
|
rlca
|
|
rlca
|
|
call Func_724df
|
|
ld a,[wdee4]
|
|
ld e,a
|
|
ld a,[wdee5]
|
|
ld d,a
|
|
ld a,c
|
|
call Func_7240f
|
|
ld a,c
|
|
dec a
|
|
rlca
|
|
rlca
|
|
inc a
|
|
call Func_724df
|
|
ld a,[wdee6]
|
|
ld e,a
|
|
ld a,[wdee7]
|
|
ld d,a
|
|
ld a,c
|
|
call Func_7240f
|
|
ld a,c
|
|
dec a
|
|
rlca
|
|
rlca
|
|
add $2
|
|
call Func_724df
|
|
ld a,[wdee8]
|
|
ld e,a
|
|
ld a,[wdee9]
|
|
ld d,a
|
|
ld a,c
|
|
call Func_7240f
|
|
ld a,c
|
|
dec a
|
|
rlca
|
|
rlca
|
|
add $3
|
|
call Func_724df
|
|
ret
|
|
|
|
Func_725be:: ; 725be (1c:65be)
|
|
push hl
|
|
pop de
|
|
ld hl,Pointer_725e2
|
|
ld a,[hli]
|
|
ld c,a
|
|
.asm_725c5
|
|
ld a,e
|
|
.loop
|
|
cp [hl]
|
|
jr z,.asm_725cf
|
|
inc hl
|
|
inc hl
|
|
dec c
|
|
jr nz,.loop
|
|
ret
|
|
.asm_725cf
|
|
inc hl
|
|
ld a,d
|
|
cp [hl]
|
|
jr z,.asm_725d9
|
|
inc hl
|
|
dec c
|
|
jr nz,.asm_725c5
|
|
ret
|
|
.asm_725d9
|
|
callba Func_bf450 ; 2f:7250
|
|
ret
|
|
|
|
INCBIN "baserom.gbc",$725e2,$734b9 - $725e2
|
|
;INCLUDE "data/sgb_packets.asm"
|
|
|
|
;INCLUDE "data/mon_palettes.asm"
|
|
|
|
;INCLUDE "data/super_palettes.asm"
|
|
|
|
;INCLUDE "data/sgb_border.asm" |