mirror of
https://github.com/pret/pokepinball.git
synced 2026-04-25 15:35:38 -05:00
Merge pull request #19 from PikalaxALT/master
File modes and HOME splitting
This commit is contained in:
commit
c3c25e3a11
0
data/queued_tiledata/ball_upgrade.asm
Executable file → Normal file
0
data/queued_tiledata/ball_upgrade.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/ball_upgrade_triggers.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/ball_upgrade_triggers.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/bonus_multiplier_railings.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/bonus_multiplier_railings.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/bumpers.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/bumpers.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/cave_lights.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/cave_lights.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/force_field.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/force_field.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/poliwag_psyduck.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/poliwag_psyduck.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/spinner.asm
Executable file → Normal file
0
data/queued_tiledata/blue_field/spinner.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/ball_upgrade_triggers.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/ball_upgrade_triggers.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/bonus_multiplier_railings.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/bonus_multiplier_railings.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/bumpers.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/bumpers.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/cave_lights.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/cave_lights.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/diglett.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/diglett.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/spinner.asm
Executable file → Normal file
0
data/queued_tiledata/red_field/spinner.asm
Executable file → Normal file
|
|
@ -21,7 +21,7 @@ FadeInCopyrightScreen: ; 0x8228
|
|||
call LoadVideoData
|
||||
call ClearOAMBuffer
|
||||
call Func_b66
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call SGBNormal
|
||||
ld bc, $0050
|
||||
call AdvanceFrames
|
||||
|
|
@ -68,7 +68,7 @@ DisplayCopyrightScreen: ; 0x8290
|
|||
|
||||
FadeOutCopyrightScreenAndLoadData: ; 0x82a8
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, sHighScores
|
||||
ld de, wRedHighScore1Points
|
||||
ld bc, $0082
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ CheckForResetButtonCombo: ; 0x8167
|
|||
call LoadVideoData
|
||||
call ClearOAMBuffer
|
||||
call Func_b66
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call SGBNormal
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
|
|
@ -107,7 +107,7 @@ HandleEraseAllDataInput: ; 0x81d4
|
|||
|
||||
ExitEraseAllDataMenu: ; 0x820f
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, wCurrentScreen
|
||||
inc [hl]
|
||||
xor a
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ LoadFieldSelectScreen: ; 0xd6dd
|
|||
call SetSongBank
|
||||
ld de, $0003
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
|
|
@ -82,7 +82,7 @@ ExitFieldSelectScreen: ; 0xd774
|
|||
ld a, [hJoypadState]
|
||||
push af
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld a, [wd8f6]
|
||||
bit BIT_A_BUTTON, a
|
||||
jr z, .pressedB
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ Func_cb14: ; 0xcb14
|
|||
ld de, $0002
|
||||
call PlaySong
|
||||
.asm_cba6
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
ld bc, $0009
|
||||
call Func_d68a
|
||||
ld bc, $03c9
|
||||
|
|
@ -179,7 +179,7 @@ Func_cb14: ; 0xcb14
|
|||
call SetSongBank
|
||||
ld de, $0004
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
ld bc, $0009
|
||||
call Func_d68a
|
||||
ld bc, $03c9
|
||||
|
|
@ -944,7 +944,7 @@ Func_d159: ; 0xd159
|
|||
|
||||
ExitHighScoresScreen: ; 0xd171
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ Func_c35a: ; 0xc35a
|
|||
call SetSongBank
|
||||
ld de, $0002
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
ld a, [wSoundTestCurrentBackgroundMusic]
|
||||
hlCoord 7, 11, vBGMap
|
||||
call RedrawSoundTestID
|
||||
|
|
@ -146,7 +146,7 @@ Func_c447: ; 0xc447
|
|||
|
||||
Func_c483: ; 0xc483
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld a, SCREEN_TITLESCREEN
|
||||
ld [wCurrentScreen], a
|
||||
xor a
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ GameScreenFunction_StartBall: ; 0xd87f
|
|||
xor a
|
||||
ld [wd7c1], a
|
||||
call Func_b66
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
|
|
@ -234,7 +234,7 @@ GameScreenFunction_EndBall: ; 0xdab2
|
|||
ld a, [wd849]
|
||||
and a
|
||||
call z, Func_e5d
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
@ -252,7 +252,7 @@ GameScreenFunction_EndBall: ; 0xdab2
|
|||
ld a, [wd849]
|
||||
and a
|
||||
call nz, Func_e5d
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
@ -279,7 +279,7 @@ GameScreenFunction_EndBall: ; 0xdab2
|
|||
ld a, [wd849]
|
||||
and a
|
||||
call nz, Func_e5d
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
@ -300,7 +300,7 @@ TransitionToHighScoresScreen: ; 0xdb5d
|
|||
ld bc, $0004
|
||||
call AdvanceFrames
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@ Func_1c3ee: ; 0x1c3ee
|
|||
ld hl, PaletteData_dd188
|
||||
ld de, $0070
|
||||
ld bc, $0010
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
Func_1c43c: ; 0x1c43c
|
||||
|
|
|
|||
|
|
@ -299,7 +299,7 @@ Func_14234: ; 0x14234
|
|||
ld hl, PaletteData_dd188
|
||||
ld de, $0070
|
||||
ld bc, $0010
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
Func_14282: ; 0x14282
|
||||
|
|
@ -403,7 +403,7 @@ Func_142fc: ; 0x142fc
|
|||
ld hl, PokeBallObjPalette
|
||||
ld de, $0040
|
||||
ld bc, $0008
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
.notPokeball
|
||||
|
|
@ -413,7 +413,7 @@ Func_142fc: ; 0x142fc
|
|||
ld hl, GreatBallObjPalette
|
||||
ld de, $0040
|
||||
ld bc, $0008
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
.notGreatball
|
||||
|
|
@ -423,7 +423,7 @@ Func_142fc: ; 0x142fc
|
|||
ld hl, UltraBallObjPalette
|
||||
ld de, $0040
|
||||
ld bc, $0008
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
.notUltraball
|
||||
|
|
@ -431,7 +431,7 @@ Func_142fc: ; 0x142fc
|
|||
ld hl, MasterBallObjPalette
|
||||
ld de, $0040
|
||||
ld bc, $0008
|
||||
call Func_6fd
|
||||
call FarCopyCGBPals
|
||||
ret
|
||||
|
||||
Func_14377: ; 0x14377
|
||||
|
|
|
|||
|
|
@ -1440,7 +1440,7 @@ Func_18d34: ; 0x18d34
|
|||
ld a, $80
|
||||
ld [wFlipperCollision], a
|
||||
ld de, $002f
|
||||
call Func_4d8
|
||||
call PlaySFXIfNoneActive
|
||||
.asm_18d71
|
||||
ret
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ SaveGame: ; 0xda05
|
|||
ld a, [wd849]
|
||||
and a
|
||||
call nz, Func_e5d
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ InitializeCurrentStage: ; 0x8311
|
|||
ld hl, vBGWin
|
||||
ld bc, $0400
|
||||
ld a, $0
|
||||
call Func_63e
|
||||
call __memset_8
|
||||
jr .asm_833c
|
||||
|
||||
.asm_8331
|
||||
ld hl, vBGWin
|
||||
ld bc, $0400
|
||||
ld a, $8
|
||||
call Func_63e
|
||||
call __memset_8
|
||||
.asm_833c
|
||||
xor a
|
||||
ld [rVBK], a
|
||||
|
|
|
|||
|
|
@ -17,13 +17,13 @@ FieldVerticalTransition: ; 0xe674
|
|||
ld [hOBP1], a
|
||||
rst AdvanceFrame
|
||||
call Func_e5d
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
call ClearOAMBuffer
|
||||
call Func_1129
|
||||
call LoadStageCollisionAttributes
|
||||
call LoadStageData
|
||||
call Func_e5d
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
ld a, $e4
|
||||
ld [hBGP], a
|
||||
ld a, $e1
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ LoadPokedexScreen: ; 0x2800e
|
|||
call SetSongBank
|
||||
ld de, $0004
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
|
|
@ -711,7 +711,7 @@ Func_284bc: ; 0x284bc
|
|||
|
||||
ExitPokedexScreen: ; 0x284f9
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, hSTAT
|
||||
res 6, [hl]
|
||||
ld hl, rIE
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ InitSelectGameboyTargetMenu: ; 0x800a
|
|||
call LoadGameboyTargetMenuGfx
|
||||
call ClearOAMBuffer
|
||||
call Func_b66
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
|
|
@ -230,7 +230,7 @@ CGBSelected_TileData: ; 0x8144
|
|||
|
||||
EndSelectGameboyTargetMenu: ; 0x414e
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld hl, wCurrentScreen
|
||||
inc [hl] ; set to SCREEN_ERASE_ALL_DATA
|
||||
xor a
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ FadeInTitlescreen: ; 0xc00e
|
|||
call SetSongBank
|
||||
ld de, $0004
|
||||
call PlaySong
|
||||
call Func_588
|
||||
call EnableLCD
|
||||
call FadeIn
|
||||
ld hl, wScreenState
|
||||
inc [hl]
|
||||
|
|
@ -148,7 +148,7 @@ Func_c10e: ; 0xc10e
|
|||
and a
|
||||
jr z, .asm_c177
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld a, [wd7c2]
|
||||
and a
|
||||
jr z, .asm_c173
|
||||
|
|
@ -224,7 +224,7 @@ Func_c1b1: ; 0xc1b1
|
|||
|
||||
Func_c1cb: ; 0c1cb
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld a, [wTitleScreenCursorSelection]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
|
|
@ -243,7 +243,7 @@ Data_c1e4: ; 0xc1e4
|
|||
|
||||
GoToHighScoresFromTitlescreen: ; 0xc1e7
|
||||
call FadeOut
|
||||
call Func_576
|
||||
call DisableLCD
|
||||
ld a, SCREEN_HIGH_SCORES
|
||||
ld [wCurrentScreen], a
|
||||
ld a, $1
|
||||
|
|
|
|||
101
home/audio.asm
Normal file
101
home/audio.asm
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
|
||||
PlaySong: ; 0x490
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [wCurrentSongBank]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld a, e
|
||||
ld [wStageSong], a
|
||||
ld a, [wCurrentSongBank]
|
||||
ld [wStageSongBank], a
|
||||
call PlaySong_BankF ; this function is replicated in multiple banks.
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
PlaySoundEffect: ; 0x4af
|
||||
; u8 d = duration
|
||||
; u8 e = SFX ID
|
||||
ld a, [wdead]
|
||||
and a
|
||||
ret nz
|
||||
ld a, [wSFXTimer]
|
||||
and a
|
||||
jr z, .asm_4bd
|
||||
ld a, d
|
||||
and a
|
||||
ret z
|
||||
.asm_4bd
|
||||
ld a, d
|
||||
ld [wSFXTimer], a
|
||||
ld d, $0
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [wCurrentSongBank]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
call PlaySoundEffect_BankF ; this function is replicated in multiple banks
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
PlaySFXIfNoneActive: ; 0x4d8
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
ld a, [wChannel4 + 2]
|
||||
ld hl, wChannel5 + 2
|
||||
or [hl]
|
||||
ld hl, wChannel6 + 2
|
||||
or [hl]
|
||||
and $1
|
||||
call z, PlaySoundEffect
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
PlayCry: ; 0x4ef
|
||||
; Plays a Pokemon cry.
|
||||
; Input: e = mon id
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [wCurrentSongBank]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
call PlayCry_BankF ; this function is replicated in multiple banks
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
UpdateSFX: ; 0x504
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [wCurrentSongBank]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
call Func_3c180
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld a, [wd801]
|
||||
inc a
|
||||
ld [wd801], a
|
||||
and $3
|
||||
ret nz
|
||||
ld a, [wSFXTimer]
|
||||
and a
|
||||
ret z
|
||||
dec a
|
||||
ld [wSFXTimer], a
|
||||
ret
|
||||
|
||||
SetSongBank: ; 0x52c
|
||||
di
|
||||
ld [wCurrentSongBank], a
|
||||
ei
|
||||
ret
|
||||
591
home/copy.asm
Normal file
591
home/copy.asm
Normal file
|
|
@ -0,0 +1,591 @@
|
|||
__memset_8: ; 0xc3e
|
||||
dec bc
|
||||
.asm_63f
|
||||
ld [hli], a
|
||||
dec bc
|
||||
bit 7, b
|
||||
jr z, .asm_63f
|
||||
ret
|
||||
|
||||
__memset_16:
|
||||
srl b
|
||||
rr c
|
||||
.asm_064a
|
||||
ld a, e
|
||||
ld [hli], a
|
||||
ld a, d
|
||||
ld [hli], a
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_064a
|
||||
ret
|
||||
|
||||
ClearData: ; 0x654
|
||||
; Clears bc bytes starting at hl.
|
||||
; bc can be a maximum of $7fff, since it checks bit 7 of b when looping.
|
||||
xor a
|
||||
dec bc
|
||||
.clearLoop
|
||||
ld [hli], a
|
||||
dec bc
|
||||
bit 7, b
|
||||
jr z, .clearLoop
|
||||
ret
|
||||
|
||||
LocalCopyData: ; 0x65d
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec bc
|
||||
ld a, c
|
||||
or b
|
||||
jr nz, LocalCopyData
|
||||
ret
|
||||
|
||||
FarCopyData: ; 0x666 spooky
|
||||
; Copies data from any bank to either working RAM or video RAM
|
||||
; Input: hl = address of data to copy
|
||||
; a = bank of data to copy
|
||||
; de = destination for data
|
||||
; bc = number of bytes to copy
|
||||
bit 7, h
|
||||
jr nz, .copyFromSRAM
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
scf
|
||||
jr .copyData
|
||||
|
||||
.copyFromSRAM
|
||||
ld [MBC5SRamBank], a
|
||||
and a
|
||||
.copyData
|
||||
push af
|
||||
.copyLoop
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec bc
|
||||
ld a, c
|
||||
or b
|
||||
jr nz, .copyLoop
|
||||
pop af
|
||||
ret nc
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
ReadByteFromBank: ; 0x68f
|
||||
; Input: a = bank
|
||||
; hl = address of byte to read
|
||||
; Output: a = byte at a:hl
|
||||
push de
|
||||
ld d, a
|
||||
ld a, [hLoadedROMBank]
|
||||
ld e, a
|
||||
ld a, d
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld d, [hl]
|
||||
ld a, e
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld a, d
|
||||
pop de
|
||||
ret
|
||||
|
||||
LoadVideoData: ; 0x6a4
|
||||
; Input:
|
||||
; hl = address of pointer table
|
||||
; a = index of item to load in pointer table
|
||||
; This needs more documentation. It loads things like graphics and palettes.
|
||||
sla a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
.loadItem
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
and [hl]
|
||||
cp $ff ; two consecutive $ff bytes terminate the array
|
||||
ret z
|
||||
ld a, [hli]
|
||||
ld b, a ; bc contains pointer to data to be loaded
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli] ; a contains bank of data to be loaded
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl] ; de contains destination address or palette offset for data
|
||||
inc hl
|
||||
ld c, [hl]
|
||||
inc hl
|
||||
ld b, [hl] ; bc contains size and flags
|
||||
inc hl ; this is a wasted instruction
|
||||
pop hl
|
||||
call .autoCopyVideoData
|
||||
pop hl
|
||||
ld bc, $0005
|
||||
add hl, bc
|
||||
jr .loadItem
|
||||
|
||||
.autoCopyVideoData
|
||||
; a: bank
|
||||
; hl: source
|
||||
; bc: flags and size rolled into one
|
||||
; bit 0: CGB palette data if set, tile data else
|
||||
; If tile data:
|
||||
; bit 1: VBank
|
||||
; de = dest
|
||||
; Else:
|
||||
; de = palette offset
|
||||
; remaining bits: size
|
||||
srl b
|
||||
rr c
|
||||
jp c, FarCopyCGBPals ; if lowest bit of bc is set
|
||||
jp @ + 2
|
||||
ld [hROMBankBuffer], a ; save bank of data to be loaded
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer] ; a contains bank of data to be loaded
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded
|
||||
srl b
|
||||
rr c
|
||||
rl a
|
||||
and $1 ; checks bit 1 of the last word in the data struct
|
||||
ld [rVBK], a ; set VRAM Bank
|
||||
.copyByte
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec bc
|
||||
ld a, c
|
||||
or b ; does bc = 0?
|
||||
jr nz, .copyByte
|
||||
xor a
|
||||
ld [rVBK], a ; set VRAM Bank to Bank 0
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a ; reload the previous ROM Bank
|
||||
ret
|
||||
|
||||
FarCopyCGBPals: ; 0x6fd
|
||||
; a: bank
|
||||
; hl: source
|
||||
; e: dest offset
|
||||
; bc: size
|
||||
ld [hROMBankBuffer], a ; save bank of data to be loaded
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer] ; a contains bank of data to be loaded
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded
|
||||
ld a, e
|
||||
bit 6, a
|
||||
jr nz, .do_obp
|
||||
ld de, rBGPI
|
||||
call .copyPaletteData
|
||||
jr z, .no_obp
|
||||
xor a
|
||||
.do_obp
|
||||
ld de, rOBPI
|
||||
call .copyPaletteData
|
||||
.no_obp
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
.copyPaletteData
|
||||
res 6, a ; only 64 bytes fit here
|
||||
ld b, a
|
||||
set 7, a ; auto-increment
|
||||
ld [de], a
|
||||
inc de
|
||||
.copyByte
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc b
|
||||
dec c
|
||||
ret z
|
||||
bit 6, b
|
||||
jr z, .copyByte
|
||||
ret
|
||||
|
||||
LoadOrCopyVRAMData: ; 0x735
|
||||
push hl
|
||||
ld hl, rLCDC
|
||||
bit 7, [hl]
|
||||
pop hl
|
||||
jp z, FarCopyData
|
||||
; fall through
|
||||
LoadVRAMData: ; 0x73f
|
||||
; This loads some data into VRAM. It waits for the LCD H-Blank to copy the data 4 bytes at a time.
|
||||
; input: hl = source of data
|
||||
; a = bank of data to load
|
||||
; de = destination of data
|
||||
; bc = number of bytes to copy
|
||||
bit 7, h
|
||||
jr nz, .asm_752
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
scf
|
||||
jr .asm_756
|
||||
|
||||
.asm_752
|
||||
ld [MBC5SRamBank], a
|
||||
and a
|
||||
.asm_756
|
||||
push af
|
||||
call WaitForLCD
|
||||
.loop
|
||||
call Func_61b
|
||||
.waitForHBlank
|
||||
ld a, [rSTAT]
|
||||
and $3
|
||||
jr nz, .waitForHBlank
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .loop
|
||||
pop af
|
||||
ret nc
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
FarCopyPalettes: ; 0x790
|
||||
push hl
|
||||
ld hl, rLCDC
|
||||
bit 7, [hl]
|
||||
pop hl
|
||||
jp nz, Func_7dc
|
||||
bit 7, h
|
||||
jr nz, .asm_7ad
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
scf
|
||||
jr .asm_7b1
|
||||
|
||||
.asm_7ad
|
||||
ld [MBC5SRamBank], a
|
||||
and a
|
||||
.asm_7b1
|
||||
push af
|
||||
ld a, e
|
||||
bit 6, e
|
||||
ld de, rBGPI
|
||||
jr z, .asm_7bf
|
||||
res 6, a
|
||||
ld de, rOBPI
|
||||
.asm_7bf
|
||||
set 7, a
|
||||
ld [de], a
|
||||
inc de
|
||||
.asm_7c3
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_7c3
|
||||
pop af
|
||||
ret nc
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
Func_7dc: ; 0x7dc
|
||||
bit 7, h
|
||||
jr nz, .asm_7ef
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
scf
|
||||
jr .asm_7f3
|
||||
|
||||
.asm_7ef
|
||||
ld [MBC5SRamBank], a
|
||||
and a
|
||||
.asm_7f3
|
||||
push af
|
||||
ld a, e
|
||||
bit 6, e
|
||||
ld de, rBGPI
|
||||
jr z, .asm_801
|
||||
res 6, a
|
||||
ld de, rOBPI
|
||||
.asm_801
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
set 7, a
|
||||
call PutTileInVRAM
|
||||
inc de
|
||||
pop hl
|
||||
call WaitForLCD
|
||||
.asm_80e
|
||||
call Func_61b
|
||||
.asm_811
|
||||
ld a, [rSTAT]
|
||||
and $3
|
||||
jr nz, .asm_811
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
dec bc
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_80e
|
||||
pop af
|
||||
ret nc
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
PutTileInVRAM: ; 0x848
|
||||
; Puts a tile in VRAM.
|
||||
; input: a = tile number
|
||||
; hl = pointer to VRAM location where tile should be placed
|
||||
push af
|
||||
call WaitForLCD
|
||||
call Func_61b
|
||||
.asm_84f
|
||||
ld a, [rSTAT]
|
||||
and $3
|
||||
jr nz, .asm_84f ; wait for lcd controller to finish transferring data
|
||||
pop af
|
||||
ld [hl], a ; Store tile number in VRAM background map
|
||||
ret
|
||||
|
||||
Func_858: ; 0x858
|
||||
push af
|
||||
call WaitForLCD
|
||||
call Func_61b
|
||||
.asm_85f
|
||||
ld a, [rSTAT]
|
||||
and $3
|
||||
jr nz, .asm_85f
|
||||
ld a, $1
|
||||
ld [rVBK], a
|
||||
pop af
|
||||
ld [hl], a
|
||||
xor a
|
||||
ld [rVBK], a
|
||||
ret
|
||||
|
||||
LoadBillboardPaletteMap: ; 0x86f
|
||||
; Loads the background palette map for a 6x4-tile billboard picture.
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld a, [rLCDC]
|
||||
bit 7, a
|
||||
jr nz, .asm_8ac
|
||||
ld a, $1
|
||||
ld [rVBK], a
|
||||
ld b, $4
|
||||
.loop
|
||||
push bc
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld bc, $001a
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .loop
|
||||
xor a
|
||||
ld [rVBK], a
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
.asm_8ac
|
||||
ld b, $4
|
||||
.asm_8ae
|
||||
push bc
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
call Func_858
|
||||
inc de
|
||||
ld bc, $001b
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .asm_8ae
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
Func_8e1: ; 0x8e1
|
||||
ld [hROMBankBuffer], a
|
||||
ld a, [hLoadedROMBank]
|
||||
push af
|
||||
ld a, [hROMBankBuffer]
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ld a, [rLCDC]
|
||||
bit 7, a
|
||||
jr nz, .asm_902
|
||||
ld a, c
|
||||
ld [hli], a
|
||||
.asm_8f5
|
||||
ld a, [de]
|
||||
ld [hl], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .asm_8f5
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
|
||||
.asm_902
|
||||
ld a, c
|
||||
call PutTileInVRAM
|
||||
inc hl
|
||||
.asm_907
|
||||
ld a, [de]
|
||||
call PutTileInVRAM
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .asm_907
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ld [MBC5RomBank], a
|
||||
ret
|
||||
457
home/ir.asm
Normal file
457
home/ir.asm
Normal file
|
|
@ -0,0 +1,457 @@
|
|||
Func_1be3: ; 0x1be3
|
||||
ld a, $c0
|
||||
ld [rRP], a
|
||||
ld a, $ff
|
||||
ld [wd8ea], a
|
||||
xor a
|
||||
ld b, a
|
||||
.loop
|
||||
inc a
|
||||
jr nz, .loop
|
||||
inc b
|
||||
jr nz, .loop
|
||||
ld hl, wd8eb
|
||||
ld a, [rKEY1]
|
||||
bit 7, a
|
||||
jr z, .normalSpeed
|
||||
ld [hl], $e
|
||||
inc hl
|
||||
ld [hl], $12
|
||||
inc hl
|
||||
ld [hl], $8
|
||||
inc hl
|
||||
ld [hl], $c
|
||||
inc hl
|
||||
ld [hl], $c
|
||||
ret
|
||||
|
||||
.normalSpeed
|
||||
ld [hl], $6
|
||||
inc hl
|
||||
ld [hl], $8
|
||||
inc hl
|
||||
ld [hl], $2
|
||||
inc hl
|
||||
ld [hl], $4
|
||||
inc hl
|
||||
ld [hl], $5
|
||||
ret
|
||||
|
||||
Func_1c1b: ; 0x1c1b
|
||||
inc d
|
||||
ret z
|
||||
ld a, [$ff00+c]
|
||||
bit 1, a
|
||||
jr z, Func_1c1b
|
||||
ret
|
||||
|
||||
Func_1c23: ; 0x1c23
|
||||
inc d
|
||||
ret z
|
||||
ld a, [$ff00+c]
|
||||
bit 1, a
|
||||
jr nz, Func_1c23
|
||||
ret
|
||||
|
||||
Func_1c2b: ; 0x1c2b
|
||||
ld a, $c1
|
||||
ld [$ff00+c], a
|
||||
.asm_1c2e
|
||||
dec d
|
||||
jr nz, .asm_1c2e
|
||||
ret
|
||||
|
||||
Func_1c32: ; 0x1c32
|
||||
ld a, $c0
|
||||
ld [$ff00+c], a
|
||||
.asm_1c35
|
||||
dec d
|
||||
jr nz, .asm_1c35
|
||||
ret
|
||||
|
||||
Func_1c39:
|
||||
xor a
|
||||
ld [hNumFramesSinceLastVBlank], a
|
||||
ld a, $1
|
||||
ld [wd8e9], a
|
||||
.asm_1c41
|
||||
ld b, $2
|
||||
ld c, rRP % $100
|
||||
ld a, [$ff00+c]
|
||||
and b
|
||||
jr z, Func_1c50
|
||||
ld a, [hNumFramesSinceLastVBlank]
|
||||
and a
|
||||
jr nz, Func_1ca1
|
||||
jr .asm_1c41
|
||||
|
||||
Func_1c50: ; 0x1c50
|
||||
ld a, $1
|
||||
ld [wd8e9], a
|
||||
ld b, $1a
|
||||
ld c, rRP % $100
|
||||
ld d, $0
|
||||
ld e, d
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, e
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
cp $8
|
||||
jp c, Func_1dc2
|
||||
cp $2a
|
||||
jp nc, Func_1dc2
|
||||
ld a, $0
|
||||
ld [wd8ea], a
|
||||
ld d, b
|
||||
call Func_1c32
|
||||
ld d, b
|
||||
call Func_1c2b
|
||||
ld d, b
|
||||
call Func_1c32
|
||||
ld d, b
|
||||
call Func_1c2b
|
||||
ld d, b
|
||||
call Func_1c32
|
||||
ret
|
||||
|
||||
Func_1ca1: ; 0x1ca1
|
||||
ld a, $2
|
||||
ld [wd8e9], a
|
||||
ld b, $1a
|
||||
ld c, rRP % $100
|
||||
ld d, b
|
||||
ld e, $0
|
||||
call Func_1c32
|
||||
ld d, b
|
||||
call Func_1c2b
|
||||
ld d, b
|
||||
call Func_1c32
|
||||
ld d, b
|
||||
call Func_1c2b
|
||||
ld d, b
|
||||
call Func_1c32
|
||||
ld d, e
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, e
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, e
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, e
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, $1a
|
||||
call Func_1c32
|
||||
ld a, $0
|
||||
ld [wd8ea], a
|
||||
ret
|
||||
|
||||
Func_1cef:
|
||||
xor a
|
||||
ld [rRP], a
|
||||
ld a, $ff
|
||||
ld [wd8ea], a
|
||||
ret
|
||||
|
||||
Func_1cf8: ; 0x1cf8
|
||||
xor a
|
||||
ld [wd8e4], a
|
||||
ld [wd8e5], a
|
||||
push hl
|
||||
push bc
|
||||
ld hl, wd8e6
|
||||
ld a, $5a
|
||||
ld [hli], a
|
||||
ld [hl], b
|
||||
dec hl
|
||||
ld b, $2
|
||||
ld d, $1e
|
||||
call Func_1c32
|
||||
call Func_1d44
|
||||
pop bc
|
||||
pop hl
|
||||
call Func_1ed3
|
||||
call Func_1d44
|
||||
ld a, [wd8e4]
|
||||
ld [wd8e6], a
|
||||
ld a, [wd8e5]
|
||||
ld [wd8e7], a
|
||||
ld hl, wd8e6
|
||||
ld b, $2
|
||||
call Func_1d44
|
||||
ld hl, wd8ea
|
||||
ld b, $1
|
||||
call Func_1e3b
|
||||
ld a, [wd8e6]
|
||||
ld [wd8e4], a
|
||||
ld a, [wd8e7]
|
||||
ld [wd8e5], a
|
||||
ret
|
||||
|
||||
Func_1d44: ; 0x1d44
|
||||
ld a, [wd8ea]
|
||||
cp $0
|
||||
ret nz
|
||||
ld c, rRP % $100
|
||||
ld d, $16
|
||||
call Func_1c2b
|
||||
ld d, $16
|
||||
call Func_1c32
|
||||
ld a, b
|
||||
cpl
|
||||
ld b, a
|
||||
.asm_1d59
|
||||
inc b
|
||||
jr z, .asm_1dae
|
||||
ld a, $8
|
||||
ld [wd8e3], a
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [wd8e4]
|
||||
add e
|
||||
ld [wd8e4], a
|
||||
jr nc, .asm_1d75
|
||||
ld a, [wd8e5]
|
||||
inc a
|
||||
ld [wd8e5], a
|
||||
jr .asm_1d78
|
||||
|
||||
.asm_1d75
|
||||
call Func_1ed3
|
||||
.asm_1d78
|
||||
ld a, e
|
||||
rlca
|
||||
ld e, a
|
||||
jr nc, .asm_1d8d
|
||||
ld a, [wd8eb]
|
||||
ld d, a
|
||||
call Func_1c2b
|
||||
ld a, [wd8ec]
|
||||
ld d, a
|
||||
call Func_1c32
|
||||
jr .asm_1d9b
|
||||
|
||||
.asm_1d8d
|
||||
ld a, [wd8ed]
|
||||
ld d, a
|
||||
call Func_1c2b
|
||||
ld a, [wd8ee]
|
||||
ld d, a
|
||||
call Func_1c32
|
||||
.asm_1d9b
|
||||
ld a, [wd8e3]
|
||||
dec a
|
||||
ld [wd8e3], a
|
||||
jr z, .asm_1dac
|
||||
call Func_1ed4
|
||||
call Func_1ed4
|
||||
jr .asm_1d78
|
||||
|
||||
.asm_1dac
|
||||
jr .asm_1d59
|
||||
|
||||
.asm_1dae
|
||||
call Func_1ed3
|
||||
call Func_1ed3
|
||||
call Func_1ed4
|
||||
ld d, $16
|
||||
call Func_1c2b
|
||||
ld d, $16
|
||||
call Func_1c32
|
||||
ret
|
||||
|
||||
Func_1dc2: ; 0x1dc2
|
||||
ld a, $2
|
||||
ld [wd8ea], a
|
||||
ret
|
||||
|
||||
Func_1dc8:
|
||||
ld a, [wd8ea]
|
||||
or $1
|
||||
ld [wd8ea], a
|
||||
ret
|
||||
|
||||
Func_1dd1: ; 0x1dd1
|
||||
ld a, [wd8ea]
|
||||
or $4
|
||||
ld [wd8ea], a
|
||||
ret
|
||||
|
||||
Func_1dda: ; 0x1dda
|
||||
xor a
|
||||
ld [wd8e4], a
|
||||
ld [wd8e5], a
|
||||
push hl
|
||||
ld hl, wd8e6
|
||||
ld b, $2
|
||||
call Func_1e3b
|
||||
ld a, [wd8e7]
|
||||
ld [wd8e8], a
|
||||
ld b, a
|
||||
pop hl
|
||||
ld a, [wd8e6]
|
||||
cp $5a
|
||||
jp nz, Func_1dd1
|
||||
call Func_1e3b
|
||||
ld a, [wd8e4]
|
||||
ld d, a
|
||||
ld a, [wd8e5]
|
||||
ld e, a
|
||||
push de
|
||||
ld hl, wd8e6
|
||||
ld b, $2
|
||||
call Func_1e3b
|
||||
pop de
|
||||
ld hl, wd8e6
|
||||
ld a, [hli]
|
||||
xor d
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
xor e
|
||||
or b
|
||||
jr z, .asm_1e22
|
||||
ld a, [wd8ea]
|
||||
or $1
|
||||
ld [wd8ea], a
|
||||
.asm_1e22
|
||||
push de
|
||||
ld hl, wd8ea
|
||||
ld b, $1
|
||||
call Func_1d44
|
||||
pop de
|
||||
ld a, d
|
||||
ld [wd8e4], a
|
||||
ld a, e
|
||||
ld [wd8e5], a
|
||||
ld a, [wd8e8]
|
||||
cp $82
|
||||
ret z
|
||||
ret
|
||||
|
||||
Func_1e3b: ; 0x1e3b
|
||||
ld a, [wd8ea]
|
||||
cp $0
|
||||
ret nz
|
||||
ld c, rRP % $100
|
||||
ld d, $0
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
or a
|
||||
jp z, Func_1dc2
|
||||
ld d, $0
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
or a
|
||||
jp z, Func_1dc2
|
||||
ld d, $0
|
||||
call Func_1c23
|
||||
ld a, d
|
||||
or a
|
||||
jp z, Func_1dc2
|
||||
call Func_1ed4
|
||||
call Func_1ed4
|
||||
push af
|
||||
pop af
|
||||
ld a, b
|
||||
cpl
|
||||
ld b, a
|
||||
.asm_1e6c
|
||||
inc b
|
||||
jr z, .asm_1eb9
|
||||
ld a, $8
|
||||
ld [wd8e3], a
|
||||
.asm_1e74
|
||||
ld d, $0
|
||||
call Func_1c1b
|
||||
call Func_1c23
|
||||
ld a, [wd8ef]
|
||||
cp d
|
||||
jr nc, .asm_1e88
|
||||
ld a, e
|
||||
set 0, a
|
||||
ld e, a
|
||||
jr .asm_1e8c
|
||||
|
||||
.asm_1e88
|
||||
ld a, e
|
||||
res 0, a
|
||||
ld e, a
|
||||
.asm_1e8c
|
||||
ld a, [wd8e3]
|
||||
dec a
|
||||
ld [wd8e3], a
|
||||
jr z, .asm_1ea0
|
||||
ld a, e
|
||||
rlca
|
||||
ld e, a
|
||||
call Func_1ed4
|
||||
call Func_1ed4
|
||||
jr .asm_1e74
|
||||
|
||||
.asm_1ea0
|
||||
ld a, e
|
||||
ld [hli], a
|
||||
ld a, [wd8e4]
|
||||
add e
|
||||
ld [wd8e4], a
|
||||
jr nc, .asm_1eb4
|
||||
ld a, [wd8e5]
|
||||
inc a
|
||||
ld [wd8e5], a
|
||||
jr .asm_1eb7
|
||||
|
||||
.asm_1eb4
|
||||
call Func_1ed3
|
||||
.asm_1eb7
|
||||
jr .asm_1e6c
|
||||
|
||||
.asm_1eb9
|
||||
ld d, $0
|
||||
call Func_1c1b
|
||||
ld a, d
|
||||
and a
|
||||
jp z, Func_1dc2
|
||||
ld d, $11
|
||||
call Func_1c32
|
||||
ret
|
||||
|
||||
Func_1ec9:
|
||||
ld b, $00
|
||||
jp Func_1cf8
|
||||
|
||||
Func_1ece:
|
||||
ld b, $00
|
||||
jp Func_1dda
|
||||
|
||||
Func_1ed3: ; 0x1ed3
|
||||
ret
|
||||
|
||||
Func_1ed4: ; 0x1ed4
|
||||
jr z, .asm_1ed6
|
||||
.asm_1ed6
|
||||
jr nz, .asm_1ed8
|
||||
.asm_1ed8
|
||||
ret
|
||||
131
home/joypad.asm
Normal file
131
home/joypad.asm
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
|
||||
ReadJoypad: ; 0xab8
|
||||
; Reads the current state of the joypad and saves the state into
|
||||
; some registers the game uses during gameplay. It remembers the joypad state
|
||||
; from the current frame, previous frame, and two frames ago.
|
||||
ld a, $20
|
||||
ld [rJOYP], a
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
and $f
|
||||
swap a
|
||||
ld b, a
|
||||
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]
|
||||
and $f
|
||||
or b
|
||||
cpl ; a contains currently-pressed buttons
|
||||
ld [hJoypadState], a
|
||||
ld a, $30
|
||||
ld [rJOYP], a
|
||||
ld a, [hJoypadState]
|
||||
ld hl, hPreviousJoypadState
|
||||
xor [hl] ; a contains buttons that are different from previous frame
|
||||
push af
|
||||
ld hl, hJoypadState
|
||||
and [hl] ; a contains newly-pressed buttons compared to last frame
|
||||
ld [hNewlyPressedButtons], a
|
||||
ld [hPressedButtons], a
|
||||
pop af
|
||||
ld hl, hPreviousJoypadState
|
||||
and [hl] ; a contains newly-pressed buttons compared to two frames ago
|
||||
ld [hPrevPreviousJoypadState], a
|
||||
ld a, [hJoypadState]
|
||||
and a
|
||||
jr z, .asm_b15
|
||||
ld hl, hPreviousJoypadState
|
||||
cp [hl]
|
||||
jr nz, .asm_b15
|
||||
; button(s) is pressed, and they're identical to the buttons pressed last frame.
|
||||
; this code is related to holding down a button for an extended period of time.
|
||||
ld hl, hJoyRepeatDelay
|
||||
dec [hl]
|
||||
jr nz, .asm_b1a
|
||||
ld a, [hJoypadState]
|
||||
ld [hPressedButtons], a
|
||||
ld a, [wd807]
|
||||
ld [hJoyRepeatDelay], a
|
||||
jr .asm_b1a
|
||||
|
||||
.asm_b15
|
||||
ld a, [wd806]
|
||||
ld [hJoyRepeatDelay], a
|
||||
.asm_b1a
|
||||
ld a, [hJoypadState]
|
||||
ld [hPreviousJoypadState], a
|
||||
ld hl, wJoypadStatesPersistent
|
||||
ld a, [hJoypadState]
|
||||
or [hl]
|
||||
ld [hli], a
|
||||
ld a, [hNewlyPressedButtons]
|
||||
or [hl]
|
||||
ld [hli], a
|
||||
ld a, [hPressedButtons]
|
||||
or [hl]
|
||||
ld [hli], a
|
||||
ret
|
||||
|
||||
ClearPersistentJoypadStates: ; 0xb2e
|
||||
ld hl, wJoypadStatesPersistent
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
IsKeyPressed2: ; 0xb36
|
||||
ld a, [hJoypadState]
|
||||
and [hl]
|
||||
jr z, .asm_b3e
|
||||
cp [hl]
|
||||
jr z, .asm_b48
|
||||
.asm_b3e
|
||||
inc hl
|
||||
ld a, [hJoypadState]
|
||||
and [hl]
|
||||
ret z
|
||||
cp [hl]
|
||||
jr z, .asm_b48
|
||||
xor a
|
||||
ret
|
||||
|
||||
.asm_b48
|
||||
ld a, $1
|
||||
and a
|
||||
ret
|
||||
|
||||
IsKeyPressed: ; 0xb4c
|
||||
; Checks if a key for the specified key config is pressed.
|
||||
; input: hl = pointer to key config byte pair (e.g. wKeyConfigLeftFlipper)
|
||||
; output: zero flag is set if a corresponding key is pressed
|
||||
; zero flag is reset if no corresponding key is pressed
|
||||
ld a, [hJoypadState]
|
||||
and [hl]
|
||||
jr z, .asm_b58
|
||||
cp [hl]
|
||||
jr nz, .asm_b58
|
||||
ld a, [hNewlyPressedButtons]
|
||||
and [hl]
|
||||
ret nz
|
||||
.asm_b58
|
||||
inc hl
|
||||
ld a, [hJoypadState]
|
||||
and [hl]
|
||||
ret z
|
||||
cp [hl]
|
||||
jr nz, .asm_b64
|
||||
ld a, [hNewlyPressedButtons]
|
||||
and [hl]
|
||||
ret
|
||||
|
||||
.asm_b64
|
||||
xor a
|
||||
ret
|
||||
129
home/random.asm
Normal file
129
home/random.asm
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
GenRandom: ; 0x959
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
ld a, [wd811]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
inc a
|
||||
cp 54 + 1
|
||||
jr nz, .asm_96e
|
||||
call Func_9fa
|
||||
xor a
|
||||
ld bc, $0000
|
||||
.asm_96e
|
||||
ld [wd811], a
|
||||
ld hl, wd812
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
Func_97a: ; 0x97a
|
||||
ld a, [wd810]
|
||||
ld d, a
|
||||
ld a, $0
|
||||
ld a, [sRNGMod]
|
||||
.asm_983
|
||||
cp d
|
||||
jr c, .asm_989
|
||||
sub d
|
||||
jr .asm_983
|
||||
|
||||
.asm_989
|
||||
ld [wd80f], a
|
||||
ld [wd848], a
|
||||
ld e, $1
|
||||
ld hl, Data_9c4
|
||||
ld a, $36
|
||||
.asm_996
|
||||
push af
|
||||
ld c, [hl]
|
||||
inc hl
|
||||
ld b, $0
|
||||
push hl
|
||||
ld hl, wd812
|
||||
add hl, bc
|
||||
ld [hl], e
|
||||
ld a, [wd80f]
|
||||
sub e
|
||||
jr nc, .asm_9a8
|
||||
add d
|
||||
.asm_9a8
|
||||
ld e, a
|
||||
ld a, [hl]
|
||||
ld [wd80f], a
|
||||
pop hl
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .asm_996
|
||||
call Func_9fa
|
||||
call Func_9fa
|
||||
call Func_9fa
|
||||
ld a, $0
|
||||
call GenRandom
|
||||
ld [sRNGMod], a
|
||||
ret
|
||||
|
||||
Data_9c4:
|
||||
db $14, $29, $07, $1c, $31, $0f, $24, $02, $17
|
||||
db $2c, $0a, $1f, $34, $12, $27, $05, $1a, $2f
|
||||
db $0d, $22, $00, $15, $2a, $08, $1d, $32, $10
|
||||
db $25, $03, $18, $2d, $0b, $20, $35, $13, $28
|
||||
db $06, $1b, $30, $0e, $23, $01, $16, $2b, $09
|
||||
db $1e, $33, $11, $26, $04, $19, $2e, $0c, $21
|
||||
|
||||
Func_9fa: ; 0x9fa
|
||||
ld a, [wd810]
|
||||
ld d, a
|
||||
ld bc, wd812
|
||||
ld hl, wd812 + $1f
|
||||
ld e, $18
|
||||
.asm_a06
|
||||
ld a, [bc]
|
||||
sub [hl]
|
||||
jr nc, .asm_a0b
|
||||
add d
|
||||
.asm_a0b
|
||||
ld [bc], a
|
||||
dec e
|
||||
jr nz, .asm_a06
|
||||
ld bc, wd812 + $18
|
||||
ld hl, wd812
|
||||
ld e, $1f
|
||||
.asm_a17
|
||||
ld a, [bc]
|
||||
sub [hl]
|
||||
jr nc, .asm_a1c
|
||||
add d
|
||||
.asm_a1c
|
||||
ld [bc], a
|
||||
dec e
|
||||
jr nz, .asm_a17
|
||||
ret
|
||||
|
||||
Func_a21: ; 0xa21
|
||||
push bc
|
||||
push hl
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, Data_a38
|
||||
add hl, bc
|
||||
ld l, [hl]
|
||||
call GenRandom
|
||||
call Func_dd4
|
||||
inc h
|
||||
srl h
|
||||
ld a, h
|
||||
pop hl
|
||||
pop bc
|
||||
ret
|
||||
|
||||
Data_a38:
|
||||
x = 0
|
||||
REPT 128
|
||||
db x | ((x >> 7) & 1)
|
||||
x = x + 2
|
||||
ENDR
|
||||
|
|
@ -2,6 +2,7 @@ INCLUDE "macros/sound.asm"
|
|||
|
||||
AdvanceFrame EQUS "$10"
|
||||
JumpTable EQUS "$18"
|
||||
ReadHalfword EQUS "$20"
|
||||
|
||||
dex_text EQUS "db " ; Start beginning of pokedex description
|
||||
dex_line EQUS "db $0d," ; Start new line in pokedex description
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 74c620d01ad59bfb09cf4111ace549b925fcb9ab
|
||||
Subproject commit 979c98a7c0f67ad6b9685b2d532c66a1f76ffb22
|
||||
12
sram.asm
12
sram.asm
|
|
@ -9,7 +9,11 @@ saved_data: MACRO
|
|||
\1BackupChecksum:: dw
|
||||
ENDM
|
||||
|
||||
saved_data sHighScores, $82
|
||||
saved_data sPokedexFlags, $98
|
||||
saved_data sKeyConfigs, $e
|
||||
saved_data sSaveGame, $4c3
|
||||
saved_data sHighScores, $82 ; a000
|
||||
saved_data sPokedexFlags, $98 ; a10c
|
||||
saved_data sKeyConfigs, $e ; a244
|
||||
saved_data sSaveGame, $4c3 ; a268
|
||||
; abf6
|
||||
|
||||
ds $409
|
||||
sRNGMod:: ; afff
|
||||
|
|
|
|||
15
wram.asm
15
wram.asm
|
|
@ -1873,19 +1873,7 @@ wd811:: ; 0xd811
|
|||
ds $1
|
||||
|
||||
wd812:: ; 0xd812
|
||||
ds $18
|
||||
|
||||
wd82a:: ; 0xd82a
|
||||
ds $7
|
||||
|
||||
wd831:: ; 0xd831
|
||||
ds $c
|
||||
|
||||
wd83d:: ; 0xd83d
|
||||
ds $9
|
||||
|
||||
wd846:: ; 0xd846
|
||||
ds $2
|
||||
ds $36
|
||||
|
||||
wd848:: ; 0xd848
|
||||
ds $1
|
||||
|
|
@ -2155,6 +2143,7 @@ wd8e9:: ; 0xd8e9
|
|||
ds $1
|
||||
|
||||
wd8ea:: ; 0xd8ea
|
||||
; IR status flags?
|
||||
ds $1
|
||||
|
||||
wd8eb:: ; 0xd8eb
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user