1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
SoftReset::
call StopAllSounds
call GBPalWhiteOut
ld c, 32
call DelayFrames
; fallthrough
Init::
; Program init.
di
xor a
ldh [rIF], a
ldh [rIE], a
ldh [rSCX], a
ldh [rSCY], a
ldh [rSB], a
ldh [rSC], a
ldh [rWX], a
ldh [rWY], a
ldh [rTMA], a
ldh [rTAC], a
ldh [rBGP], a
ldh [rOBP0], a
ldh [rOBP1], a
ld a, LCDC_ON
ldh [rLCDC], a
call DisableLCD
ld sp, wStack
ld hl, STARTOF(WRAM0)
ld bc, SIZEOF(WRAM0)
.loop
ld [hl], 0
inc hl
dec bc
ld a, b
or c
jr nz, .loop
call ClearVram
ld hl, STARTOF(HRAM)
ld bc, SIZEOF(HRAM) - 1
call FillMemory
call ClearSprites
ld a, BANK(WriteDMACodeToHRAM)
ldh [hLoadedROMBank], a
ld [rROMB], a
call WriteDMACodeToHRAM
xor a
ldh [hTileAnimations], a
ldh [rSTAT], a
ldh [hSCX], a
ldh [hSCY], a
ldh [rIF], a
ld [wc0f3], a
ld [wc0f3 + 1], a
ld a, IE_VBLANK | IE_TIMER | IE_SERIAL
ldh [rIE], a
ld a, 144 ; move the window off-screen
ldh [hWY], a
ldh [rWY], a
ld a, 7
ldh [rWX], a
ld a, CONNECTION_NOT_ESTABLISHED
ldh [hSerialConnectionStatus], a
ld h, HIGH(vBGMap0)
call ClearBgMap
ld h, HIGH(vBGMap1)
call ClearBgMap
ld a, LCDC_DEFAULT
ldh [rLCDC], a
ld a, 16
ldh [hSoftReset], a
call StopAllSounds
ei
predef LoadSGB
ld a, BANK(SFX_Shooting_Star)
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
ld a, HIGH(vBGMap1)
ldh [hAutoBGTransferDest + 1], a
xor a
ldh [hAutoBGTransferDest], a
dec a
ld [wUpdateSpritesEnabled], a
; FASTBOOT: skip the GameFreak/Pikachu intro if a save file exists
farcall CheckForPlayerNameInSRAM
jr c, .fastbootSkipIntro
predef PlayIntro
.fastbootSkipIntro
call DisableLCD
call ClearVram
call GBPalNormal
call ClearSprites
ld a, LCDC_DEFAULT
ldh [rLCDC], a
jp PrepareTitleScreen
ClearVram::
ld hl, STARTOF(VRAM)
ld bc, SIZEOF(VRAM)
xor a
jp FillMemory
StopAllSounds::
ld a, BANK("Audio Engine 1")
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
xor a
ld [wAudioFadeOutControl], a
ld [wNewSoundID], a
ld [wLastMusicSoundID], a
jp StopAllMusic
|