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
|
SECTION "Entry point", ROM0[$100]
nop
jp Init
SECTION "Global check value", ROM0[$14E]
; The ROM has an incorrect global check, so set it here
; It is not corrected by RGBFIX
db $21, $C6
SECTION "Init", ROM0[$52F]
Init: ; 052f
di
xor a
ld [rIF], a
ld [rIE], a
ld [rSCX], a
ld [rSCY], a
ld [rSB], a
ld [rSC], a
ld [rWX], a
ld [rWY], a
ld [rBGP], a
ld [rOBP0], a
ld [rOBP1], a
ld [rTMA], a
ld [rTAC], a
ld [wcc38], a ; Useless, since WRAM gets cleared right after
ld a, 1 << rTAC_ON | rTAC_4096_HZ
ld [rTAC], a
ld a, 1 << rLCDC_ENABLE
ld [rLCDC], a
ld sp, wStackBottom
call ClearVRAM
ld hl, WRAM0_Begin
ld bc, WRAM1_End - WRAM0_Begin
.ByteFill ; 0565
ld [hl], 0
inc hl
dec bc
ld a, b
or c
jr nz, .ByteFill
ld hl, HRAM_Begin
ld bc, HRAM_End - HRAM_Begin
call ByteFill
call ClearSprites
ld a, BANK(WriteOAMDMACodeToHRAM)
call Bankswitch
call WriteOAMDMACodeToHRAM
xor a
ldh [hMapAnims], a
ldh [hSCX], a
ldh [hSCY], a
ldh [rJOYP], a
ld a, 1 << rSTAT_HBLANK
ld [rSTAT], a
ld a, SCREEN_HEIGHT_PX
ldh [hWY], a
ld [rWY], a
ld a, 7
ldh [hWX], a
ld [rWX], a
ld a, $FF
ldh [hLinkPlayerNumber], a
ld h, HIGH($9800)
call BlankBGMap
ld h, HIGH($9800)
call BlankBGMap
ld a, LCDC_DEFAULT
ld [rLCDC], a
call DisableAudio
call _2007
; predef ???
ld a, $4B ; TODO: add predefs so the line above can be uncommented
call Predef
ld a, $1F
ld [rIE], a
ld a, HIGH($9C00)
ldh [hBGMapAddress + 1], a
xor a
ldh [hBGMapAddress], a
call DisableLCD
call ClearVRAM
ld a, LCDC_DEFAULT
ld [rLCDC], a
ei
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
ld a, RTC_DH
ld [MBC3SRamBank], a
xor a
ld [SRAM_Begin], a
ld a, 0 ; Useless
ld [MBC3LatchClock], a
ld [MBC3SRamEnable], a
jp GameInit
ClearVRAM: ; 05e6
ld hl, VRAM_Begin
ld bc, VRAM_End - VRAM_Begin
call ByteFill
ret
BlankBGMap:
ld a, $7F
jr _FillBGMap
FillBGMap:
ld a, l
_FillBGMap:
ld de, $400
ld l, e
.loop
ld [hli], a
dec e
jr nz, .loop
dec d
jr nz, .loop
ret
|