Rebuild HOME

This commit is contained in:
pikalaxalt 2016-06-16 13:14:57 -04:00
parent cac0d5ade9
commit ee84a2a0e4
8 changed files with 8498 additions and 789 deletions

View File

@ -11,6 +11,7 @@ includes := $(PYTHON) scan_includes.py
rom_obj := \
wram.o \
main.o \
home.o

View File

@ -12,12 +12,14 @@ Start::
SECTION "bank0", HOME[$150]
INCLUDE "home/vblank.asm"
INCLUDE "home/delay.asm"
Function343::
dr $343, $41b
INCLUDE "home/rtc.asm"
INCLUDE "home/fade.asm"
LCD::
dr $41b, $5c6
dr $41b, $467
UpdateTime::
dr $467, $5c6
Start_::
dr $5c6, $6aa
@ -28,25 +30,32 @@ Serial::
JoypadInt::
dr $8df, $8e6
Function8e6::
Joypad::
dr $8e6, $bdf
Functionbdf::
dr $bdf, $be3
UpdatePalsIfCGB::
ld a, [hCGB]
and a
ret z
UpdateCGBPals::
dr $be3, $c61
Functionbe3::
dr $be3, $1458
Functionc61::
dr $c61, $c83
Function1458::
Functionc83::
dr $c83, $1458
UpdateBGMapBuffer::
dr $1458, $14bb
Function14bb::
UpdateBGMap::
dr $14bb, $1579
Function1579::
dr $1579, $15d0
Function15d0::
Serve2bppRequest::
dr $15d0, $162b
Function162b::
@ -55,7 +64,7 @@ Function162b::
Function1642::
dr $1642, $1ebf
Function1ebf::
AskSerial::
dr $1ebf, $1efa
Function1efa::

View File

@ -1,109 +1,104 @@
Function360:: ; 360 (0:0360)
; XXX
; TimeOfDayFade
ld a, [wTimeOfDayPal]
ld b, a
ld hl, IncGradGBPalTable_11
ld a, l
sub b
ld l, a
jr nc, .okay
dec h
.okay
ld a, [hli]
ld [rBGP], a
ld a, [hli]
ld [rOBP0], a
ld a, [hli]
ld [rOBP1], a
ret
Function360::
ld a, [$d568] ; 360
ld b, a ; 363
ld hl, $40c ; 364
ld a, l ; 367
sub b ; 368
ld l, a ; 369
jr nc, Function36d ; 36a
dec h ; 36c
ld a, [hli] ; 36d
ldh [$ff47], a ; 36e
ld a, [hli] ; 370
ldh [$ff48], a ; 371
ld a, [hli] ; 373
ldh [$ff49], a ; 374
ret ; 376
; 377
RotateFourPalettesRight::
ld a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_00
ld b, 4
jr RotatePalettesRight
Function377::
ldh a, [$ffe8] ; 377
and a ; 379
jr z, Function383 ; 37a
ld hl, $3eb ; 37c
ld b, $4 ; 37f
jr Function39b ; 381
; 383
.dmg
ld hl, IncGradGBPalTable_08
ld b, 4
jr RotatePalettesRight
Function383::
ld hl, $403 ; 383
ld b, $4 ; 386
jr Function39b ; 388
; 38a
RotateThreePalettesRight::
ld a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_05
ld b, 3
jr RotatePalettesRight
Function38a::
ldh a, [$ffe8] ; 38a
and a ; 38c
jr z, Function396 ; 38d
ld hl, $3fa ; 38f
ld b, $3 ; 392
jr Function39b ; 394
; 396
.dmg
ld hl, IncGradGBPalTable_13
ld b, 3
RotatePalettesRight::
.loop
push de
ld a, [hli]
call Functionc61
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
call Functionc83
ld c, 8
call DelayFrames
pop de
dec b
jr nz, .loop
ret
Function396::
ld hl, $412 ; 396
ld b, $3 ; 399
push de ; 39b
ld a, [hli] ; 39c
call Functionc61 ; 39d
ld a, [hli] ; 3a0
ld e, a ; 3a1
ld a, [hli] ; 3a2
ld d, a ; 3a3
call Functionc83 ; 3a4
ld c, $8 ; 3a7
call DelayFrames ; 3a9
pop de ; 3ac
dec b ; 3ad
jr nz, Function39b ; 3ae
ret ; 3b0
; 3b1
RotateFourPalettesLeft::
ld a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_04 - 1
ld b, 4
jr RotatePalettesLeft
Function3b1::
ldh a, [$ffe8] ; 3b1
and a ; 3b3
jr z, Function3bd ; 3b4
ld hl, $3f6 ; 3b6
ld b, $4 ; 3b9
jr Function3d5 ; 3bb
; 3bd
.dmg
ld hl, IncGradGBPalTable_12 - 1
ld b, 4
jr RotatePalettesLeft
Function3bd::
ld hl, $40e ; 3bd
ld b, $4 ; 3c0
jr Function3d5 ; 3c2
; 3c4
RotateThreePalettesLeft::
ld a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_07 - 1
ld b, 3
jr RotatePalettesLeft
.dmg
ld hl, IncGradGBPalTable_15 - 1
ld b, 3
RotatePalettesLeft::
.loop
push de
ld a, [hld]
ld d, a
ld a, [hld]
ld e, a
call Functionc83
ld a, [hld]
call Functionc61
ld c, 8
call DelayFrames
pop de
dec b
jr nz, .loop
ret
Function3c4::
ldh a, [$ffe8] ; 3c4
and a ; 3c6
jr z, Function3d0 ; 3c7
ld hl, $3ff ; 3c9
ld b, $3 ; 3cc
jr Function3d5 ; 3ce
; 3d0
Function3d0::
ld hl, $417 ; 3d0
ld b, $3 ; 3d3
push de ; 3d5
ld a, [hld] ; 3d6
ld d, a ; 3d7
ld a, [hld] ; 3d8
ld e, a ; 3d9
call Functionc83 ; 3da
ld a, [hld] ; 3dd
call Functionc61 ; 3de
ld c, $8 ; 3e1
call DelayFrames ; 3e3
pop de ; 3e6
dec b ; 3e7
jr nz, Function3d5 ; 3e8
ret ; 3ea
; 3eb
Function3eb::
IncGradGBPalTable_00:: db %11111111, %11111111, %11111111
IncGradGBPalTable_01:: db %11111110, %11111110, %11111110
IncGradGBPalTable_02:: db %11111001, %11111001, %11111001
@ -125,4 +120,3 @@ IncGradGBPalTable_13:: db %10010000, %10000000, %10010000
IncGradGBPalTable_14:: db %01000000, %01000000, %01000000
IncGradGBPalTable_15:: db %00000000, %00000000, %00000000
; 41b

View File

@ -1,21 +1,22 @@
Function343::
ld a, [$c1cd] ; 343
cp $0 ; 346
ret z ; 348
call Function467 ; 349
ld a, [$cfe5] ; 34c
bit 0, a ; 34f
ret z ; 351
Function352::
ld hl, $4366 ; 352
ld a, $23 ; 355
rst FarCall ; 357
ret ; 358
; 359
Function343:: ; 343
; update time and time-sensitive palettes
Function359::
ld hl, $4397 ; 359
ld a, $23 ; 35c
rst FarCall ; 35e
ret ; 35f
; 360
; rtc enabled?
ld a, [wRTCEnabled]
cp 0
ret z
call UpdateTime
; obj update on?
ld a, [wVramState]
bit 0, a
ret z
TimeOfDayPals:: ; 352
callab _TimeOfDayPals
ret
UpdateTimePals:: ; 359
callab _UpdateTimePals
ret

View File

@ -1,277 +1,384 @@
VBlank::
push af ; 150
push bc ; 151
push de ; 152
push hl ; 153
ld a, [hVBlank] ; 154
and $7 ; 156
ld e, a ; 158
ld d, $0 ; 159
ld hl, .blanks ; 15b
add hl, de ; 15e
add hl, de ; 15f
ld a, [hli] ; 160
ld h, [hl] ; 161
ld l, a ; 162
ld de, .return ; 163
push de ; 166
jp [hl] ; 167
push af
push bc
push de
push hl
ld a, [hVBlank]
and $7
ld e, a
ld d, $0
ld hl, .blanks
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ld de, .return
push de
jp [hl]
.return
call Function1efa ; 168
pop hl ; 16b
pop de ; 16c
pop bc ; 16d
pop af ; 16e
reti ; 16f
; 170
call Function1efa
pop hl
pop de
pop bc
pop af
reti
.blanks
dw Function180
dw Function1f4
dw Function2b0
dw Function2c4
dw Function255
dw Function278
dw Function180
dw Function180
dw VBlank0
dw VBlank1
dw VBlank2
dw VBlank3
dw VBlank4
dw VBlank5
dw VBlank0
dw VBlank0 ; just in case
;180
Function180::
ld hl, hVBlankCounter ; 180
inc [hl] ; 183
ld a, [rDIV] ; 184
ld b, a ; 186
ld a, [hRandomAdd] ; 187
adc b ; 189
ld [hRandomAdd], a ; 18a
ld a, [rDIV] ; 18c
ld b, a ; 18e
ld a, [hRandomSub] ; 18f
sbc b ; 191
ld [hRandomSub], a ; 192
ld a, [hROMBank] ; 194
ld [$d155], a ; 196
ld a, [hSCX] ; 199
ld [rSCX], a ; 19b
ld a, [hSCY] ; 19d
ld [rSCY], a ; 19f
ld a, [hWY] ; 1a1
ld [rWY], a ; 1a3
ld a, [hWX] ; 1a5
ld [rWX], a ; 1a7
call Function1458 ; 1a9
jr c, Function1c2 ; 1ac
call Functionbdf ; 1ae
jr c, Function1c2 ; 1b1
call Function14bb ; 1b3
call Function15d0 ; 1b6
call Function1579 ; 1b9
call Function162b ; 1bc
call Function1642 ; 1bf
Function1c2::
ld a, [hOAMUpdate] ; 1c2
and a ; 1c4
jr nz, Function1ca ; 1c5
call hPushOAM ; 1c7
Function1ca::
xor a ; 1ca
ld [$ceea], a ; 1cb
ld a, [$cee8] ; 1ce
and a ; 1d1
jr z, Function1d8 ; 1d2
dec a ; 1d4
ld [$cee8], a ; 1d5
Function1d8::
ld a, [$cee9] ; 1d8
and a ; 1db
jr z, Function1e2 ; 1dc
dec a ; 1de
ld [$cee9], a ; 1df
Function1e2::
call Function8e6 ; 1e2
ld a, BANK(Functione805c) ; 1e5
rst Bankswitch ; 1e7
call Functione805c ; 1e8
ld a, [$d155] ; 1eb
rst Bankswitch ; 1ee
ld a, [$ff9a] ; 1ef
ld [$ffe5], a ; 1f1
ret ; 1f3
; 1f4
VBlank0:: ; 180
; normal operation
Function1f4::
ld a, [hROMBank] ; 1f4
ld [$d155], a ; 1f6
ld a, [hSCX] ; 1f9
ld [rSCX], a ; 1fb
ld a, [hSCY] ; 1fd
ld [rSCY], a ; 1ff
call Function23e ; 201
jr c, Function20f ; 204
call Function14bb ; 206
call Function15d0 ; 209
call hPushOAM ; 20c
Function20f::
ld a, [hLCDCPointer] ; 20f
or a ; 211
jr z, Function219 ; 212
ld c, a ; 214
ld a, [$c700] ; 215
ld [$ff00+c], a ; 218
Function219::
xor a ; 219
ld [$ceea], a ; 21a
ld a, [rIF] ; 21d
ld b, a ; 21f
xor a ; 220
ld [rIF], a ; 221
ld a, $2 ; 223
ld [rIE], a ; 225
ld a, b ; 227
and $8 ; 228
or $2 ; 22a
ld [rIF], a ; 22c
ei ; 22e
ld a, BANK(Functione805c) ; 22f
rst Bankswitch ; 231
call Functione805c ; 232
ld a, [$d155] ; 235
rst Bankswitch ; 238
ld a, $1f ; 239
ld [rIE], a ; 23b
ret ; 23d
; 23e
; rng
; scx, scy, wy, wx
; bg map buffer
; palettes
; dma transfer
; bg map
; tiles
; oam
; joypad
; sound
Function23e::
ld a, [hCGB] ; 23e
and a ; 240
jp nz, Functionbe3 ; 241
ld a, [$cf43] ; 244
ld [rBGP], a ; 247
ld a, [$cf44] ; 249
ld [rOBP0], a ; 24c
ld a, [$cf45] ; 24e
ld [rOBP1], a ; 251
and a ; 253
ret ; 254
; 255
; inc frame counter
ld hl, hVBlankCounter
inc [hl]
Function255::
ld a, [hROMBank] ; 255
ld [$d155], a ; 257
call Function14bb ; 25a
call Function15d0 ; 25d
call hPushOAM ; 260
call Function8e6 ; 263
xor a ; 266
ld [$ceea], a ; 267
call Function1ebf ; 26a
ld a, BANK(Functione805c) ; 26d
rst Bankswitch ; 26f
call Functione805c ; 270
ld a, [$d155] ; 273
rst Bankswitch ; 276
ret ; 277
; 278
; advance random variables
ld a, [rDIV]
ld b, a
ld a, [hRandomAdd]
adc b
ld [hRandomAdd], a
Function278::
ld a, [hROMBank] ; 278
ld [$d155], a ; 27a
ld a, [hSCX] ; 27d
ld [rSCX], a ; 27f
call Functionbdf ; 281
jr c, Function28c ; 284
call Function14bb ; 286
call Function15d0 ; 289
Function28c::
xor a ; 28c
ld [$ceea], a ; 28d
call Function8e6 ; 290
xor a ; 293
ld [rIF], a ; 294
ld a, $2 ; 296
ld [rIE], a ; 298
ld [rIF], a ; 29a
ei ; 29c
ld a, BANK(Functione805c) ; 29d
rst Bankswitch ; 29f
call Functione805c ; 2a0
ld a, [$d155] ; 2a3
rst Bankswitch ; 2a6
di ; 2a7
xor a ; 2a8
ld [rIF], a ; 2a9
ld a, $1f ; 2ab
ld [rIE], a ; 2ad
ret ; 2af
; 2b0
ld a, [rDIV]
ld b, a
ld a, [hRandomSub]
sbc b
ld [hRandomSub], a
Function2b0::
ld a, [hROMBank] ; 2b0
ld [$d155], a ; 2b2
ld a, BANK(Functione805c) ; 2b5
rst Bankswitch ; 2b7
call Functione805c ; 2b8
ld a, [$d155] ; 2bb
rst Bankswitch ; 2be
xor a ; 2bf
ld [$ceea], a ; 2c0
ret ; 2c3
; 2c4
ld a, [hROMBank]
ld [wROMBankBackup], a
Function2c4::
ld a, [hVBlankCounter] ; 2c4
inc a ; 2c6
ld [hVBlankCounter], a ; 2c7
ld a, [rDIV] ; 2c9
ld b, a ; 2cb
ld a, [hRandomAdd] ; 2cc
adc b ; 2ce
ld [hRandomAdd], a ; 2cf
ld a, [rDIV] ; 2d1
ld b, a ; 2d3
ld a, [hRandomSub] ; 2d4
sbc b ; 2d6
ld [hRandomSub], a ; 2d7
call Function8e6 ; 2d9
ld a, [hROMBank] ; 2dc
ld [$d155], a ; 2de
ld a, [hSCX] ; 2e1
ld [rSCX], a ; 2e3
ld a, [hSCY] ; 2e5
ld [rSCY], a ; 2e7
ld a, [hWY] ; 2e9
ld [rWY], a ; 2eb
ld a, [hWX] ; 2ed
ld [rWX], a ; 2ef
call Function14bb ; 2f1
call Function1458 ; 2f4
call Function15d0 ; 2f7
call Function1579 ; 2fa
call Function162b ; 2fd
call hPushOAM ; 300
xor a ; 303
ld [$ceea], a ; 304
ld a, [$cee9] ; 307
and a ; 30a
jr z, Function311 ; 30b
dec a ; 30d
ld [$cee9], a ; 30e
Function311::
xor a ; 311
ld [rIF], a ; 312
ld a, $2 ; 314
ld [rIE], a ; 316
ld [rIF], a ; 318
ei ; 31a
ld a, BANK(Functione805c) ; 31b
rst Bankswitch ; 31d
call Functione805c ; 31e
ld a, [$d155] ; 321
rst Bankswitch ; 324
di ; 325
xor a ; 326
ld [rIF], a ; 327
ld a, $1f ; 329
ld [rIE], a ; 32b
ret ; 32d
; 32e
ld a, [hSCX]
ld [rSCX], a
ld a, [hSCY]
ld [rSCY], a
ld a, [hWY]
ld [rWY], a
ld a, [hWX]
ld [rWX], a
; There's only time to call one of these in one vblank.
; Calls are in order of priority.
call UpdateBGMapBuffer
jr c, .done
call UpdatePalsIfCGB
jr c, .done
call UpdateBGMap
call Serve2bppRequest
; These have their own timing checks.
call Function1579
call Function162b
call Function1642
.done
ld a, [hOAMUpdate]
and a
jr nz, .done_oam
call hPushOAM
.done_oam
; vblank-sensitive operations are done
xor a
ld [wVBlankOccurred], a
ld a, [wOverworldDelay]
and a
jr z, .ok
dec a
ld [wOverworldDelay], a
.ok
ld a, [wTextDelayFrames]
and a
jr z, .ok2
dec a
ld [wTextDelayFrames], a
.ok2
call Joypad
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
ld a, [hSeconds]
ld [hSecondsBackup], a
ret
VBlank1:: ; 1f4
; scx, scy
; palettes
; bg map
; tiles
; oam
; sound / lcd stat
ld a, [hROMBank]
ld [wROMBankBackup], a
ld a, [hSCX]
ld [rSCX], a
ld a, [hSCY]
ld [rSCY], a
call UpdatePals
jr c, .done
call UpdateBGMap
call Serve2bppRequest
call hPushOAM
.done
ld a, [hLCDCPointer]
or a
jr z, .skip_lcd
ld c, a
ld a, [wc700]
ld [$ff00+c], a
.skip_lcd
xor a
ld [wVBlankOccurred], a
; get requested ints
ld a, [rIF]
ld b, a
; discard requested ints
xor a
ld [rIF], a
; enable lcd stat
ld a, %10 ; lcd stat
ld [rIE], a
; rerequest serial int if applicable (still disabled)
; request lcd stat
ld a, b
and %1000 ; serial
or %10 ; lcd stat
ld [rIF], a
ei
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
; enable ints
ld a, %11111
ld [rIE], a
ret
UpdatePals:: ; 23e
; update pals for either dmg or cgb
ld a, [hCGB]
and a
jp nz, UpdateCGBPals
; update gb pals
ld a, [wBGP]
ld [rBGP], a
ld a, [wOBP0]
ld [rOBP0], a
ld a, [wOPB1]
ld [rOBP1], a
and a
ret
VBlank4:: ; 255
; bg map
; tiles
; oam
; joypad
; serial
; sound
ld a, [hROMBank]
ld [wROMBankBackup], a
call UpdateBGMap
call Serve2bppRequest
call hPushOAM
call Joypad
xor a
ld [wVBlankOccurred], a
call AskSerial
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
ret
VBlank5:: ; 278
; scx
; palettes
; bg map
; tiles
; joypad
ld a, [hROMBank]
ld [wROMBankBackup], a
ld a, [hSCX]
ld [rSCX], a
call UpdatePalsIfCGB
jr c, .done
call UpdateBGMap
call Serve2bppRequest
.done
xor a
ld [wVBlankOccurred], a
call Joypad
xor a
ld [rIF], a
ld a, %10 ; lcd stat
ld [rIE], a
; request lcd stat
ld [rIF], a
ei
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
di
xor a
ld [rIF], a
; enable ints
ld a, %11111
ld [rIE], a
ret
VBlank2:: ; 2b0
; sound only
ld a, [hROMBank]
ld [wROMBankBackup], a
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
xor a
ld [wVBlankOccurred], a
ret
VBlank3:: ; 2c4
; scx, scy
; palettes
; bg map
; tiles
; oam
; sound / lcd stat
ld a, [hVBlankCounter]
inc a
ld [hVBlankCounter], a
ld a, [rDIV]
ld b, a
ld a, [hRandomAdd]
adc b
ld [hRandomAdd], a
ld a, [rDIV]
ld b, a
ld a, [hRandomSub]
sbc b
ld [hRandomSub], a
call Joypad
ld a, [hROMBank]
ld [wROMBankBackup], a
ld a, [hSCX]
ld [rSCX], a
ld a, [hSCY]
ld [rSCY], a
ld a, [hWY]
ld [rWY], a
ld a, [hWX]
ld [rWX], a
call UpdateBGMap
call UpdateBGMapBuffer
call Serve2bppRequest
call Function1579
call Function162b
call hPushOAM
xor a
ld [wVBlankOccurred], a
ld a, [wTextDelayFrames]
and a
jr z, .okay
dec a
ld [wTextDelayFrames], a
.okay
xor a
ld [rIF], a
ld a, %10 ; lcd stat
ld [rIE], a
; request lcd stat
ld [rIF], a
ei
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
di
xor a
ld [rIF], a
; enable ints
ld a, %11111
ld [rIE], a
ret

View File

@ -103,7 +103,13 @@ SECTION "bank22", DATA, BANK[$22]
dr $88000, $8c000
SECTION "bank23", DATA, BANK[$23]
dr $8c000, $90000
dr $8c000, $8c366
_TimeOfDayPals:: ; 8c366
dr $8c366, $8c397
_UpdateTimePals:: ; 8c397
dr $8c397, $90000
SECTION "bank24", DATA, BANK[$24]
dr $90000, $94000
@ -174,7 +180,7 @@ SECTION "bank39", DATA, BANK[$39]
SECTION "bank3a", DATA, BANK[$3a]
dr $e8000, $e805c
Functione805c::
_UpdateSound::
dr $e805c, $ec000
SECTION "bank3b", DATA, BANK[$3b]

37
rst.asm Normal file
View File

@ -0,0 +1,37 @@
; rst vectors
SECTION "rst0",ROM0[0]
di
jp Start
SECTION "rst8",ROM0[FarCall]
jp FarCall_hl
SECTION "rst10",ROM0[Bankswitch]
ld [hROMBank], a
ld [MBC3RomBank], a
ret
SECTION "rst18",ROM0[$18]
rst $38
SECTION "rst20",ROM0[$20]
rst $38
SECTION "rst28",ROM0[JumpTable]
push de
ld e, a
ld d, 0
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
pop de
jp [hl]
; SECTION "rst30",ROM0[$30]
; rst30 is midst rst28
SECTION "rst38",ROM0[$38]
rst $38

8332
wram.asm

File diff suppressed because it is too large Load Diff