├── .gitattributes ├── .gitignore ├── Makefile ├── README.md ├── asm ├── _Main │ ├── bss.s │ ├── data.s │ ├── rodata.s │ └── text.s ├── bss.s ├── ctors.s ├── data.s ├── dtors.s ├── init.s ├── lib.s ├── macros.inc ├── rodata.s ├── sbss.s ├── sbss2.s ├── sdata.s ├── sdata2.s └── text.s ├── partial.lcf ├── resolveLinkerErrors.py ├── sonicriders.sha1 ├── static.lcf └── tools ├── elf2dol.c └── elf2rel.c /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Explicitly declare text files 5 | *.py text 6 | 7 | # Enforce platform-specific encodings 8 | *.bat text eol=crlf 9 | *.sh text eol=lf 10 | *.sha1 text eol=lf 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler binaries 2 | tools/mwcc_compiler/ 3 | 4 | # Build artifacts 5 | *.dol 6 | *.rel 7 | *.elf 8 | *.plf 9 | *.o 10 | *.dep 11 | *.map 12 | 13 | # Tool binaries 14 | tools/elf2dol 15 | tools/elf2rel 16 | tools/lzss 17 | *.exe 18 | 19 | # Temporary files 20 | *.sw* 21 | *.dump 22 | __pycache__ 23 | *.bat 24 | errors.txt 25 | output.asm 26 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | #--------------------------------------------------- 2 | # Sonic Riders Disassembly Makefile 3 | #--------------------------------------------------- 4 | 5 | ifneq (,$(findstring Windows,$(OS))) 6 | EXE := .exe 7 | else 8 | WINE ?= wine 9 | endif 10 | 11 | COMPILER_VERSION ?= 2.6 12 | 13 | VERBOSE ?= 0 14 | 15 | # Don't echo build commands unless VERBOSE is set 16 | ifeq ($(VERBOSE),0) 17 | QUIET := @ 18 | endif 19 | 20 | # default recipe 21 | default: all 22 | 23 | #------------------------------------------------------------------------------- 24 | # Tools 25 | #------------------------------------------------------------------------------- 26 | 27 | COMPILER_DIR := tools/mwcc_compiler/$(COMPILER_VERSION) 28 | AS := $(DEVKITPPC)/bin/powerpc-eabi-as 29 | CC := $(WINE) $(COMPILER_DIR)/mwcceppc.exe 30 | LD := $(WINE) $(COMPILER_DIR)/mwldeppc.exe 31 | OBJCOPY := $(DEVKITPPC)/bin/powerpc-eabi-objcopy 32 | OBJDUMP := $(DEVKITPPC)/bin/powerpc-eabi-objdump 33 | GCC := $(DEVKITPPC)/bin/powerpc-eabi-gcc 34 | HOSTCC := cc 35 | SHA1SUM := sha1sum 36 | ELF2DOL := tools/elf2dol$(EXE) 37 | ELF2REL := tools/elf2rel$(EXE) 38 | 39 | INCLUDE_DIRS := src 40 | SYSTEM_INCLUDE_DIRS := include 41 | 42 | RUNTIME_INCLUDE_DIRS := libraries/PowerPC_EABI_Support/Runtime/Inc 43 | 44 | ASFLAGS := -mgekko -I asm 45 | CFLAGS := -O4,p -inline auto -nodefaults -proc gekko -fp hard -Cpp_exceptions off -enum int -warn pragmas -pragma 'cats off' 46 | CPPFLAGS = $(addprefix -i ,$(INCLUDE_DIRS) $(dir $^)) -I- $(addprefix -i ,$(SYSTEM_INCLUDE_DIRS)) 47 | ifeq ($(VERBOSE),1) 48 | # this set of LDFLAGS outputs warnings. 49 | DOL_LDFLAGS := -fp hard -nodefaults 50 | endif 51 | ifeq ($(VERBOSE),0) 52 | # this set of LDFLAGS generates no warnings. 53 | DOL_LDFLAGS := -fp hard -nodefaults -w off 54 | endif 55 | 56 | ifeq ($(VERBOSE),1) 57 | # this set of LDFLAGS outputs warnings. 58 | REL_LDFLAGS := -nodefaults -fp hard -r -m _prolog -g 59 | endif 60 | ifeq ($(VERBOSE),0) 61 | # this set of LDFLAGS generates no warnings. 62 | REL_LDFLAGS := -nodefaults -fp hard -r -m _prolog -g -w off 63 | endif 64 | 65 | HOSTCFLAGS := -Wall -O3 -s 66 | 67 | CC_CHECK := $(GCC) -Wall -Wextra -Wno-unused -Wno-main -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers -Wno-char-subscripts -fsyntax-only -fno-builtin -nostdinc $(addprefix -I ,$(INCLUDE_DIRS) $(SYSTEM_INCLUDE_DIRS)) -DNONMATCHING 68 | 69 | ifeq ($(VERBOSE),0) 70 | # this set of ASFLAGS generates no warnings. 71 | ASFLAGS += -W 72 | endif 73 | 74 | #------------------------------------------------------------------------------- 75 | # Files 76 | #------------------------------------------------------------------------------- 77 | 78 | BASEROM := baserom.dol 79 | DOL := sonicriders.dol 80 | ELF := $(DOL:.dol=.elf) 81 | MAP := $(DOL:.dol=.map) 82 | 83 | DOL_LCF := static.lcf 84 | 85 | # TODO: REL support 86 | REL_LCF := partial.lcf 87 | 88 | # main dol sources 89 | SOURCES := \ 90 | asm/init.s \ 91 | asm/text.s \ 92 | asm/lib.s \ 93 | asm/ctors.s \ 94 | asm/dtors.s \ 95 | asm/rodata.s \ 96 | asm/data.s \ 97 | asm/bss.s \ 98 | asm/sdata.s \ 99 | asm/sbss.s \ 100 | asm/sdata2.s \ 101 | asm/sbss2.s 102 | 103 | O_FILES := $(addsuffix .o,$(basename $(SOURCES))) 104 | ALL_O_FILES := $(O_FILES) 105 | $(ELF): $(O_FILES) 106 | 107 | # _Main.rel sources 108 | SOURCES := \ 109 | asm/_Main/text.s \ 110 | asm/_Main/rodata.s \ 111 | asm/_Main/data.s \ 112 | asm/_Main/bss.s 113 | O_FILES := $(addsuffix .o,$(basename $(SOURCES))) 114 | ALL_O_FILES += $(O_FILES) 115 | _Main.plf: $(O_FILES) 116 | _Main.rel: ELF2REL_ARGS := -i 1 -o 0x0 -l 0x28 -c 14 117 | ALL_RELS += _Main.rel 118 | 119 | #------------------------------------------------------------------------------- 120 | # Recipes 121 | #------------------------------------------------------------------------------- 122 | 123 | .PHONY: all default 124 | 125 | all: $(DOL) $(ALL_RELS) 126 | $(QUIET) $(SHA1SUM) -c sonicriders.sha1 127 | 128 | # static module (.dol file) 129 | %.dol: %.elf $(ELF2DOL) 130 | @echo Converting $< to $@ 131 | $(QUIET) $(ELF2DOL) $(filter %.elf,$^) $@ 132 | 133 | %.elf: $(DOL_LCF) 134 | @echo Linking static module $@ 135 | $(QUIET) $(LD) -lcf $(DOL_LCF) $(DOL_LDFLAGS) $(filter %.o,$^) -map $(@:.elf=.map) -o $@ 136 | 137 | # relocatable module (.rel file) 138 | %.rel: %.plf $(ELF) $(ELF2REL) 139 | @echo Converting $(filter %.plf,$^) to $@ 140 | $(QUIET) $(ELF2REL) $(filter %.plf,$^) $(ELF) $@ $(ELF2REL_ARGS) 141 | 142 | %.plf: $(REL_LCF) 143 | @echo Linking relocatable module $@ 144 | $(QUIET) $(LD) -lcf $(REL_LCF) $(REL_LDFLAGS) $(filter %.o,$^) -map $(@:.plf=.map) -o $@ 145 | 146 | # Canned recipe for compiling C or C++ 147 | # Uses CC_CHECK to check syntax and generate dependencies, compiles the file, 148 | # then disassembles the object file 149 | define COMPILE = 150 | @echo Compiling $< 151 | $(QUIET) $(CC_CHECK) -MMD -MF $(@:.o=.dep) -MT $@ $< 152 | $(QUIET) $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< 153 | $(QUIET) $(OBJDUMP) -Drz $@ > $(@:.o=.dump) 154 | endef 155 | 156 | # relocatable modules must not use the small data sections 157 | %.plf: CFLAGS += -sdata 0 -sdata2 0 -g 158 | 159 | %.o: %.c 160 | $(COMPILE) 161 | %.o: %.cpp 162 | $(COMPILE) 163 | %.o: %.cp 164 | $(COMPILE) 165 | 166 | %.o: %.s 167 | @echo Assembling $< 168 | $(QUIET) $(AS) $(ASFLAGS) -o $@ $< 169 | 170 | clean: 171 | $(RM) $(DOL) $(ELF) $(MAP) $(ALL_RELS) $(ELF2DOL) $(ELF2REL) 172 | find . -name '*.o' -exec rm {} + 173 | find . -name '*.dep' -exec rm {} + 174 | find . -name '*.dump' -exec rm {} + 175 | 176 | # Automatic dependency files 177 | DEP_FILES := $(addsuffix .dep,$(basename $(ALL_O_FILES))) 178 | -include $(DEP_FILES) 179 | 180 | #------------------------------------------------------------------------------- 181 | # Tool Recipes 182 | #------------------------------------------------------------------------------- 183 | 184 | $(ELF2DOL): tools/elf2dol.c 185 | @echo Building tool $@ 186 | $(QUIET) $(HOSTCC) $(HOSTCFLAGS) -o $@ $^ 187 | 188 | $(ELF2REL): tools/elf2rel.c 189 | @echo Building tool $@ 190 | $(QUIET) $(HOSTCC) $(HOSTCFLAGS) -o $@ $^ 191 | 192 | print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true 193 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sonic Riders (USA) 2 | 3 | This repo contains a WIP decompilation of Sonic Riders (USA). 4 | 5 | It builds the following DOL: 6 | 7 | sonicriders.dol: `sha1: e90a13504974b917a675d59f07014e0e817c5e5d` 8 | 9 | ## Building 10 | 11 | ### Required packages 12 | 13 | * [devkitPro](https://devkitpro.org/wiki/Getting_Started) 14 | * python3 15 | * gcc 16 | 17 | ### Instructions 18 | 19 | 1. Obtain a clean DOL of Sonic Riders US and place it in the base working directory and name it `baserom.dol`. 20 | 2. Download GC_WII_COMPILERS.zip from (https://cdn.discordapp.com/attachments/704241951972524063/801641758249320478/GC_WII_COMPILERS.zip) and extract it to tools/mwcc_compiler/. 21 | 3. Run the `make` command 22 | 23 | ## Contributions 24 | 25 | Contributions and PRs are welcome. 26 | -------------------------------------------------------------------------------- /asm/bss.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .bss # 0x80125E00 - 0x8021CFA4 4 | 5 | .balign 8 6 | 7 | .global lbl_80125E00 8 | lbl_80125E00: 9 | .skip 0x89800 10 | .global lbl_801AF600 11 | lbl_801AF600: 12 | .skip 0x390 13 | .global lbl_801AF990 14 | lbl_801AF990: 15 | .skip 0x60 16 | .global lbl_801AF9F0 17 | lbl_801AF9F0: 18 | .skip 0x180 19 | .global lbl_801AFB70 20 | lbl_801AFB70: 21 | .skip 0xF0 22 | .global lbl_801AFC60 23 | lbl_801AFC60: 24 | .skip 0x3C 25 | .global lbl_801AFC9C 26 | lbl_801AFC9C: 27 | .skip 0xB4 28 | .global lbl_801AFD50 29 | lbl_801AFD50: 30 | .skip 0x3000 31 | .global lbl_801B2D50 32 | lbl_801B2D50: 33 | .skip 0x48 34 | 35 | .global lbl_801B2D98 36 | lbl_801B2D98: 37 | .skip 0x100 38 | .global lbl_801B2E98 39 | lbl_801B2E98: 40 | .skip 0x100 41 | .global lbl_801B2F98 42 | lbl_801B2F98: 43 | .skip 0x148 44 | .global lbl_801B30E0 45 | lbl_801B30E0: 46 | .skip 0x50 47 | .global lbl_801B3130 48 | lbl_801B3130: 49 | .skip 0x20 50 | .global lbl_801B3150 51 | lbl_801B3150: 52 | .skip 0x50 53 | .global lbl_801B31A0 54 | lbl_801B31A0: 55 | .skip 0x58 56 | .global lbl_801B31F8 57 | lbl_801B31F8: 58 | .skip 0x9F8 59 | .global lbl_801B3BF0 60 | lbl_801B3BF0: 61 | .skip 0x68 62 | .global lbl_801B3C58 63 | lbl_801B3C58: 64 | .skip 0x28 65 | .global lbl_801B3C80 66 | lbl_801B3C80: 67 | .skip 0x40 68 | .global lbl_801B3CC0 69 | lbl_801B3CC0: 70 | .skip 0x20 71 | .global lbl_801B3CE0 72 | lbl_801B3CE0: 73 | .skip 0x20 74 | .global lbl_801B3D00 75 | lbl_801B3D00: 76 | .skip 0x30 77 | .global lbl_801B3D30 78 | lbl_801B3D30: 79 | .skip 0x28 80 | .global lbl_801B3D58 81 | lbl_801B3D58: 82 | .skip 0x20 83 | .global lbl_801B3D78 84 | lbl_801B3D78: 85 | .skip 0x40 86 | .global lbl_801B3DB8 87 | lbl_801B3DB8: 88 | .skip 0x30 89 | .global lbl_801B3DE8 90 | lbl_801B3DE8: 91 | .skip 0xF0 92 | .global lbl_801B3ED8 93 | lbl_801B3ED8: 94 | .skip 0x58 95 | .global lbl_801B3F30 96 | lbl_801B3F30: 97 | .skip 0x10 98 | .global lbl_801B3F40 99 | lbl_801B3F40: 100 | .skip 0x40 101 | .global lbl_801B3F80 102 | lbl_801B3F80: 103 | .skip 0x80 104 | .global lbl_801B4000 105 | lbl_801B4000: 106 | .skip 0x80 107 | .global lbl_801B4080 108 | lbl_801B4080: 109 | .skip 0x1680 110 | .global lbl_801B5700 111 | lbl_801B5700: 112 | .skip 0x1680 113 | .global lbl_801B6D80 114 | lbl_801B6D80: 115 | .skip 0x600 116 | .global lbl_801B7380 117 | lbl_801B7380: 118 | .skip 0x4A00 119 | .global lbl_801BBD80 120 | lbl_801BBD80: 121 | .skip 0xA0 122 | .global lbl_801BBE20 123 | lbl_801BBE20: 124 | .skip 0x40 125 | .global lbl_801BBE60 126 | lbl_801BBE60: 127 | .skip 0x11800 128 | .global lbl_801CD660 129 | lbl_801CD660: 130 | .skip 0x1800 131 | .global lbl_801CEE60 132 | lbl_801CEE60: 133 | .skip 0x220 134 | .global lbl_801CF080 135 | lbl_801CF080: 136 | .skip 0x20 137 | .global lbl_801CF0A0 138 | lbl_801CF0A0: 139 | .skip 0x630 140 | .global lbl_801CF6D0 141 | lbl_801CF6D0: 142 | .skip 0x100 143 | .global lbl_801CF7D0 144 | lbl_801CF7D0: 145 | .skip 0x338 146 | .global lbl_801CFB08 147 | lbl_801CFB08: 148 | .skip 0xC0 149 | .global lbl_801CFBC8 150 | lbl_801CFBC8: 151 | .skip 0x80 152 | .global lbl_801CFC48 153 | lbl_801CFC48: 154 | .skip 0xA0 155 | .global lbl_801CFCE8 156 | lbl_801CFCE8: 157 | .skip 0x20 158 | .global lbl_801CFD08 159 | lbl_801CFD08: 160 | .skip 0x20 161 | .global lbl_801CFD28 162 | lbl_801CFD28: 163 | .skip 0x40 164 | .global lbl_801CFD68 165 | lbl_801CFD68: 166 | .skip 0x60 167 | .global lbl_801CFDC8 168 | lbl_801CFDC8: 169 | .skip 0x28 170 | .global lbl_801CFDF0 171 | lbl_801CFDF0: 172 | .skip 0x8 173 | .global lbl_801CFDF8 174 | lbl_801CFDF8: 175 | .skip 0x208 176 | .global lbl_801D0000 177 | lbl_801D0000: 178 | .skip 0x17A8 179 | .global lbl_801D17A8 180 | lbl_801D17A8: 181 | .skip 0x18 182 | .global lbl_801D17C0 183 | lbl_801D17C0: 184 | .skip 0x8 185 | .global lbl_801D17C8 186 | lbl_801D17C8: 187 | .skip 0x4 188 | .global lbl_801D17CC 189 | lbl_801D17CC: 190 | .skip 0xA4 191 | .global lbl_801D1870 192 | lbl_801D1870: 193 | .skip 0x430 194 | .global lbl_801D1CA0 195 | lbl_801D1CA0: 196 | .skip 0x94 197 | .global lbl_801D1D34 198 | lbl_801D1D34: 199 | .skip 0x14 200 | .global lbl_801D1D48 201 | lbl_801D1D48: 202 | .skip 0x8 203 | .global lbl_801D1D50 204 | lbl_801D1D50: 205 | .skip 0x8 206 | .global lbl_801D1D58 207 | lbl_801D1D58: 208 | .skip 0x8 209 | .global lbl_801D1D60 210 | lbl_801D1D60: 211 | .skip 0x8 212 | .global lbl_801D1D68 213 | lbl_801D1D68: 214 | .skip 0x800 215 | .global lbl_801D2568 216 | lbl_801D2568: 217 | .skip 0x20 218 | .global lbl_801D2588 219 | lbl_801D2588: 220 | .skip 0x500 221 | .global lbl_801D2A88 222 | lbl_801D2A88: 223 | .skip 0x20 224 | .global lbl_801D2AA8 225 | lbl_801D2AA8: 226 | .skip 0x44 227 | .global lbl_801D2AEC 228 | lbl_801D2AEC: 229 | .skip 0x44 230 | .global lbl_801D2B30 231 | lbl_801D2B30: 232 | .skip 0x40 233 | .global lbl_801D2B70 234 | lbl_801D2B70: 235 | .skip 0x68 236 | .global lbl_801D2BD8 237 | lbl_801D2BD8: 238 | .skip 0x68 239 | .global lbl_801D2C40 240 | lbl_801D2C40: 241 | .skip 0x48 242 | .global lbl_801D2C88 243 | lbl_801D2C88: 244 | .skip 0x18 245 | .global lbl_801D2CA0 246 | lbl_801D2CA0: 247 | .skip 0x18 248 | .global lbl_801D2CB8 249 | lbl_801D2CB8: 250 | .skip 0x18 251 | .global lbl_801D2CD0 252 | lbl_801D2CD0: 253 | .skip 0x30 254 | .global lbl_801D2D00 255 | lbl_801D2D00: 256 | .skip 0x40 257 | .global lbl_801D2D40 258 | lbl_801D2D40: 259 | .skip 0x40 260 | .global lbl_801D2D80 261 | lbl_801D2D80: 262 | .skip 0x60 263 | .global lbl_801D2DE0 264 | lbl_801D2DE0: 265 | .skip 0x30 266 | .global lbl_801D2E10 267 | lbl_801D2E10: 268 | .skip 0x200 269 | .global lbl_801D3010 270 | lbl_801D3010: 271 | .skip 0x5E0 272 | .global lbl_801D35F0 273 | lbl_801D35F0: 274 | .skip 0x30 275 | .global lbl_801D3620 276 | lbl_801D3620: 277 | .skip 0x40 278 | .global lbl_801D3660 279 | lbl_801D3660: 280 | .skip 0x30 281 | .global lbl_801D3690 282 | lbl_801D3690: 283 | .skip 0xC 284 | .global lbl_801D369C 285 | lbl_801D369C: 286 | .skip 0x14 287 | .global lbl_801D36B0 288 | lbl_801D36B0: 289 | .skip 0x18 290 | .global lbl_801D36C8 291 | lbl_801D36C8: 292 | .skip 0x20 293 | .global lbl_801D36E8 294 | lbl_801D36E8: 295 | .skip 0xA0 296 | .global lbl_801D3788 297 | lbl_801D3788: 298 | .skip 0x5A0 299 | .global lbl_801D3D28 300 | lbl_801D3D28: 301 | .skip 0x820 302 | .global lbl_801D4548 303 | lbl_801D4548: 304 | .skip 0x26C 305 | .global lbl_801D47B4 306 | lbl_801D47B4: 307 | .skip 0x60 308 | .global lbl_801D4814 309 | lbl_801D4814: 310 | .skip 0x60 311 | .global lbl_801D4874 312 | lbl_801D4874: 313 | .skip 0x9C 314 | .global lbl_801D4910 315 | lbl_801D4910: 316 | .skip 0x9C 317 | .global lbl_801D49AC 318 | lbl_801D49AC: 319 | .skip 0x1E0 320 | .global lbl_801D4B8C 321 | lbl_801D4B8C: 322 | .skip 0x1E0 323 | .global lbl_801D4D6C 324 | lbl_801D4D6C: 325 | .skip 0x154 326 | .global lbl_801D4EC0 327 | lbl_801D4EC0: 328 | .skip 0x174 329 | .global lbl_801D5034 330 | lbl_801D5034: 331 | .skip 0x20 332 | .global lbl_801D5054 333 | lbl_801D5054: 334 | .skip 0x8D14 335 | .global lbl_801DDD68 336 | lbl_801DDD68: 337 | .skip 0x800 338 | .global lbl_801DE568 339 | lbl_801DE568: 340 | .skip 0x20 341 | .global lbl_801DE588 342 | lbl_801DE588: 343 | .skip 0xC 344 | .global lbl_801DE594 345 | lbl_801DE594: 346 | .skip 0x8 347 | .global lbl_801DE59C 348 | lbl_801DE59C: 349 | .skip 0x4 350 | .global lbl_801DE5A0 351 | lbl_801DE5A0: 352 | .skip 0xC08 353 | .global lbl_801DF1A8 354 | lbl_801DF1A8: 355 | .skip 0x4 356 | .global lbl_801DF1AC 357 | lbl_801DF1AC: 358 | .skip 0xA84 359 | .global lbl_801DFC30 360 | lbl_801DFC30: 361 | .skip 0x4 362 | .global lbl_801DFC34 363 | lbl_801DFC34: 364 | .skip 0x4 365 | .global lbl_801DFC38 366 | lbl_801DFC38: 367 | .skip 0x4 368 | .global lbl_801DFC3C 369 | lbl_801DFC3C: 370 | .skip 0x4 371 | .global lbl_801DFC40 372 | lbl_801DFC40: 373 | .skip 0x10 374 | .global lbl_801DFC50 375 | lbl_801DFC50: 376 | .skip 0x4 377 | .global lbl_801DFC54 378 | lbl_801DFC54: 379 | .skip 0xC 380 | .global lbl_801DFC60 381 | lbl_801DFC60: 382 | .skip 0xF80 383 | .global lbl_801E0BE0 384 | lbl_801E0BE0: 385 | .skip 0x8 386 | .global lbl_801E0BE8 387 | lbl_801E0BE8: 388 | .skip 0x8 389 | .global lbl_801E0BF0 390 | lbl_801E0BF0: 391 | .skip 0x8 392 | .global lbl_801E0BF8 393 | lbl_801E0BF8: 394 | .skip 0x120 395 | .global lbl_801E0D18 396 | lbl_801E0D18: 397 | .skip 0x8 398 | .global lbl_801E0D20 399 | lbl_801E0D20: 400 | .skip 0x40 401 | .global lbl_801E0D60 402 | lbl_801E0D60: 403 | .skip 0x400 404 | .global lbl_801E1160 405 | lbl_801E1160: 406 | .skip 0x8 407 | .global lbl_801E1168 408 | lbl_801E1168: 409 | .skip 0x9D0 410 | .global lbl_801E1B38 411 | lbl_801E1B38: 412 | .skip 0x17C0 413 | .global lbl_801E32F8 414 | lbl_801E32F8: 415 | .skip 0x4 416 | .global lbl_801E32FC 417 | lbl_801E32FC: 418 | .skip 0x4 419 | .global lbl_801E3300 420 | lbl_801E3300: 421 | .skip 0x4 422 | .global lbl_801E3304 423 | lbl_801E3304: 424 | .skip 0x4 425 | .global lbl_801E3308 426 | lbl_801E3308: 427 | .skip 0xF00 428 | .global lbl_801E4208 429 | lbl_801E4208: 430 | .skip 0x4 431 | .global lbl_801E420C 432 | lbl_801E420C: 433 | .skip 0x4 434 | .global lbl_801E4210 435 | lbl_801E4210: 436 | .skip 0x4 437 | .global lbl_801E4214 438 | lbl_801E4214: 439 | .skip 0x4 440 | .global lbl_801E4218 441 | lbl_801E4218: 442 | .skip 0x4 443 | .global lbl_801E421C 444 | lbl_801E421C: 445 | .skip 0x34 446 | .global lbl_801E4250 447 | lbl_801E4250: 448 | .skip 0x10 449 | .global lbl_801E4260 450 | lbl_801E4260: 451 | .skip 0x10 452 | .global lbl_801E4270 453 | lbl_801E4270: 454 | .skip 0x4 455 | .global lbl_801E4274 456 | lbl_801E4274: 457 | .skip 0x3C4 458 | .global lbl_801E4638 459 | lbl_801E4638: 460 | .skip 0x4 461 | .global lbl_801E463C 462 | lbl_801E463C: 463 | .skip 0x7CAC 464 | .global lbl_801EC2E8 465 | lbl_801EC2E8: 466 | .skip 0x4 467 | .global lbl_801EC2EC 468 | lbl_801EC2EC: 469 | .skip 0x4 470 | .global lbl_801EC2F0 471 | lbl_801EC2F0: 472 | .skip 0x4 473 | .global lbl_801EC2F4 474 | lbl_801EC2F4: 475 | .skip 0x4 476 | .global lbl_801EC2F8 477 | lbl_801EC2F8: 478 | .skip 0x4 479 | .global lbl_801EC2FC 480 | lbl_801EC2FC: 481 | .skip 0x4 482 | .global lbl_801EC300 483 | lbl_801EC300: 484 | .skip 0x20 485 | .global lbl_801EC320 486 | lbl_801EC320: 487 | .skip 0x100 488 | .global lbl_801EC420 489 | lbl_801EC420: 490 | .skip 0x4 491 | .global lbl_801EC424 492 | lbl_801EC424: 493 | .skip 0x400 494 | .global lbl_801EC824 495 | lbl_801EC824: 496 | .skip 0x444 497 | .global lbl_801ECC68 498 | lbl_801ECC68: 499 | .skip 0x4 500 | .global lbl_801ECC6C 501 | lbl_801ECC6C: 502 | .skip 0x4 503 | .global lbl_801ECC70 504 | lbl_801ECC70: 505 | .skip 0x2080 506 | .global lbl_801EECF0 507 | lbl_801EECF0: 508 | .skip 0x4 509 | .global lbl_801EECF4 510 | lbl_801EECF4: 511 | .skip 0x140 512 | .global lbl_801EEE34 513 | lbl_801EEE34: 514 | .skip 0x344 515 | .global lbl_801EF178 516 | lbl_801EF178: 517 | .skip 0x4 518 | .global lbl_801EF17C 519 | lbl_801EF17C: 520 | .skip 0x104 521 | .global lbl_801EF280 522 | lbl_801EF280: 523 | .skip 0x10 524 | .global lbl_801EF290 525 | lbl_801EF290: 526 | .skip 0x4 527 | .global lbl_801EF294 528 | lbl_801EF294: 529 | .skip 0xD6C 530 | .global lbl_801F0000 531 | lbl_801F0000: 532 | .skip 0x3998 533 | .global lbl_801F3998 534 | lbl_801F3998: 535 | .skip 0x4 536 | .global lbl_801F399C 537 | lbl_801F399C: 538 | .skip 0x4 539 | .global lbl_801F39A0 540 | lbl_801F39A0: 541 | .skip 0x4 542 | .global lbl_801F39A4 543 | lbl_801F39A4: 544 | .skip 0x484 545 | .global lbl_801F3E28 546 | lbl_801F3E28: 547 | .skip 0x4 548 | .global lbl_801F3E2C 549 | lbl_801F3E2C: 550 | .skip 0x4004 551 | .global lbl_801F7E30 552 | lbl_801F7E30: 553 | .skip 0x4 554 | .global lbl_801F7E34 555 | lbl_801F7E34: 556 | .skip 0xC04 557 | .global lbl_801F8A38 558 | lbl_801F8A38: 559 | .skip 0x40 560 | .global lbl_801F8A78 561 | lbl_801F8A78: 562 | .skip 0x80 563 | .global lbl_801F8AF8 564 | lbl_801F8AF8: 565 | .skip 0x8 566 | .global lbl_801F8B00 567 | lbl_801F8B00: 568 | .skip 0x8 569 | .global lbl_801F8B08 570 | lbl_801F8B08: 571 | .skip 0x8 572 | .global lbl_801F8B10 573 | lbl_801F8B10: 574 | .skip 0x200 575 | .global lbl_801F8D10 576 | lbl_801F8D10: 577 | .skip 0x4 578 | .global lbl_801F8D14 579 | lbl_801F8D14: 580 | .skip 0x9F4 581 | .global lbl_801F9708 582 | lbl_801F9708: 583 | .skip 0xC 584 | .global lbl_801F9714 585 | lbl_801F9714: 586 | .skip 0x4 587 | .global lbl_801F9718 588 | lbl_801F9718: 589 | .skip 0x4 590 | .global lbl_801F971C 591 | lbl_801F971C: 592 | .skip 0xFA4 593 | .global lbl_801FA6C0 594 | lbl_801FA6C0: 595 | .skip 0x100 596 | .global lbl_801FA7C0 597 | lbl_801FA7C0: 598 | .skip 0x4 599 | .global lbl_801FA7C4 600 | lbl_801FA7C4: 601 | .skip 0x104 602 | .global lbl_801FA8C8 603 | lbl_801FA8C8: 604 | .skip 0x4 605 | .global lbl_801FA8CC 606 | lbl_801FA8CC: 607 | .skip 0x4 608 | .global lbl_801FA8D0 609 | lbl_801FA8D0: 610 | .skip 0x8 611 | .global lbl_801FA8D8 612 | lbl_801FA8D8: 613 | .skip 0x4 614 | .global lbl_801FA8DC 615 | lbl_801FA8DC: 616 | .skip 0x10C0 617 | .global lbl_801FB99C 618 | lbl_801FB99C: 619 | .skip 0xE84 620 | .global lbl_801FC820 621 | lbl_801FC820: 622 | .skip 0x14 623 | .global lbl_801FC834 624 | lbl_801FC834: 625 | .skip 0x184 626 | .global lbl_801FC9B8 627 | lbl_801FC9B8: 628 | .skip 0x4 629 | .global lbl_801FC9BC 630 | lbl_801FC9BC: 631 | .skip 0x4 632 | .global lbl_801FC9C0 633 | lbl_801FC9C0: 634 | .skip 0x8 635 | .global lbl_801FC9C8 636 | lbl_801FC9C8: 637 | .skip 0x3F0 638 | .global lbl_801FCDB8 639 | lbl_801FCDB8: 640 | .skip 0xC8 641 | .global lbl_801FCE80 642 | lbl_801FCE80: 643 | .skip 0x270 644 | .global lbl_801FD0F0 645 | lbl_801FD0F0: 646 | .skip 0x408 647 | .global lbl_801FD4F8 648 | lbl_801FD4F8: 649 | .skip 0x8 650 | .global lbl_801FD500 651 | lbl_801FD500: 652 | .skip 0x2B00 653 | .global lbl_80200000 654 | lbl_80200000: 655 | .skip 0x8 656 | .global lbl_80200008 657 | lbl_80200008: 658 | .skip 0x14F8 659 | .global lbl_80201500 660 | lbl_80201500: 661 | .skip 0x200 662 | .global lbl_80201700 663 | lbl_80201700: 664 | .skip 0x8 665 | .global lbl_80201708 666 | lbl_80201708: 667 | .skip 0x4 668 | .global lbl_8020170C 669 | lbl_8020170C: 670 | .skip 0x4 671 | .global lbl_80201710 672 | lbl_80201710: 673 | .skip 0x8 674 | .global lbl_80201718 675 | lbl_80201718: 676 | .skip 0x40 677 | .global lbl_80201758 678 | lbl_80201758: 679 | .skip 0x40 680 | .global lbl_80201798 681 | lbl_80201798: 682 | .skip 0x20 683 | .global lbl_802017B8 684 | lbl_802017B8: 685 | .skip 0x18 686 | .global lbl_802017D0 687 | lbl_802017D0: 688 | .skip 0xF0 689 | .global lbl_802018C0 690 | lbl_802018C0: 691 | .skip 0x404 692 | .global lbl_80201CC4 693 | lbl_80201CC4: 694 | .skip 0x4 695 | .global lbl_80201CC8 696 | lbl_80201CC8: 697 | .skip 0xC 698 | .global lbl_80201CD4 699 | lbl_80201CD4: 700 | .skip 0x64 701 | .global lbl_80201D38 702 | lbl_80201D38: 703 | .skip 0x200 704 | .global lbl_80201F38 705 | lbl_80201F38: 706 | .skip 0x400 707 | .global lbl_80202338 708 | lbl_80202338: 709 | .skip 0x400 710 | .global lbl_80202738 711 | lbl_80202738: 712 | .skip 0x80 713 | .global lbl_802027B8 714 | lbl_802027B8: 715 | .skip 0x480 716 | .global lbl_80202C38 717 | lbl_80202C38: 718 | .skip 0x40 719 | .global lbl_80202C78 720 | lbl_80202C78: 721 | .skip 0x100 722 | .global lbl_80202D78 723 | lbl_80202D78: 724 | .skip 0x80 725 | .global lbl_80202DF8 726 | lbl_80202DF8: 727 | .skip 0x40 728 | .global lbl_80202E38 729 | lbl_80202E38: 730 | .skip 0x40 731 | .global lbl_80202E78 732 | lbl_80202E78: 733 | .skip 0x100 734 | .global lbl_80202F78 735 | lbl_80202F78: 736 | .skip 0x40 737 | .global lbl_80202FB8 738 | lbl_80202FB8: 739 | .skip 0x100 740 | .global lbl_802030B8 741 | lbl_802030B8: 742 | .skip 0x80 743 | .global lbl_80203138 744 | lbl_80203138: 745 | .skip 0x200 746 | .global lbl_80203338 747 | lbl_80203338: 748 | .skip 0x4 749 | .global lbl_8020333C 750 | lbl_8020333C: 751 | .skip 0x4 752 | .global lbl_80203340 753 | lbl_80203340: 754 | .skip 0x4 755 | .global lbl_80203344 756 | lbl_80203344: 757 | .skip 0x4 758 | .global lbl_80203348 759 | lbl_80203348: 760 | .skip 0x4 761 | .global lbl_8020334C 762 | lbl_8020334C: 763 | .skip 0x4 764 | .global lbl_80203350 765 | lbl_80203350: 766 | .skip 0x4 767 | .global lbl_80203354 768 | lbl_80203354: 769 | .skip 0x4 770 | .global lbl_80203358 771 | lbl_80203358: 772 | .skip 0x4 773 | .global lbl_8020335C 774 | lbl_8020335C: 775 | .skip 0x4 776 | .global lbl_80203360 777 | lbl_80203360: 778 | .skip 0x4 779 | .global lbl_80203364 780 | lbl_80203364: 781 | .skip 0x4 782 | .global lbl_80203368 783 | lbl_80203368: 784 | .skip 0x4 785 | .global lbl_8020336C 786 | lbl_8020336C: 787 | .skip 0x4 788 | .global lbl_80203370 789 | lbl_80203370: 790 | .skip 0x4 791 | .global lbl_80203374 792 | lbl_80203374: 793 | .skip 0x4 794 | .global lbl_80203378 795 | lbl_80203378: 796 | .skip 0x4 797 | .global lbl_8020337C 798 | lbl_8020337C: 799 | .skip 0x4 800 | .global lbl_80203380 801 | lbl_80203380: 802 | .skip 0x4 803 | .global lbl_80203384 804 | lbl_80203384: 805 | .skip 0x4 806 | .global lbl_80203388 807 | lbl_80203388: 808 | .skip 0x4 809 | .global lbl_8020338C 810 | lbl_8020338C: 811 | .skip 0x4 812 | .global lbl_80203390 813 | lbl_80203390: 814 | .skip 0x20 815 | .global lbl_802033B0 816 | lbl_802033B0: 817 | .skip 0x20 818 | .global lbl_802033D0 819 | lbl_802033D0: 820 | .skip 0x4 821 | .global lbl_802033D4 822 | lbl_802033D4: 823 | .skip 0x4 824 | .global lbl_802033D8 825 | lbl_802033D8: 826 | .skip 0x20 827 | .global lbl_802033F8 828 | lbl_802033F8: 829 | .skip 0x4 830 | .global lbl_802033FC 831 | lbl_802033FC: 832 | .skip 0x4 833 | .global lbl_80203400 834 | lbl_80203400: 835 | .skip 0x208 836 | .global lbl_80203608 837 | lbl_80203608: 838 | .skip 0x8 839 | .global lbl_80203610 840 | lbl_80203610: 841 | .skip 0x8 842 | .global lbl_80203618 843 | lbl_80203618: 844 | .skip 0x228 845 | .global lbl_80203840 846 | lbl_80203840: 847 | .skip 0x4 848 | .global lbl_80203844 849 | lbl_80203844: 850 | .skip 0x814 851 | .global lbl_80204058 852 | lbl_80204058: 853 | .skip 0x7C 854 | .global lbl_802040D4 855 | lbl_802040D4: 856 | .skip 0xBF30 857 | .global lbl_80210004 858 | lbl_80210004: 859 | .skip 0x60F4 860 | .global lbl_802160F8 861 | lbl_802160F8: 862 | .skip 0x4 863 | .global lbl_802160FC 864 | lbl_802160FC: 865 | .skip 0x4 866 | .global lbl_80216100 867 | lbl_80216100: 868 | .skip 0x4 869 | .global lbl_80216104 870 | lbl_80216104: 871 | .skip 0x4 872 | .global lbl_80216108 873 | lbl_80216108: 874 | .skip 0x4 875 | .global lbl_8021610C 876 | lbl_8021610C: 877 | .skip 0x4 878 | .global lbl_80216110 879 | lbl_80216110: 880 | .skip 0x8 881 | .global lbl_80216118 882 | lbl_80216118: 883 | .skip 0x8 884 | .global lbl_80216120 885 | lbl_80216120: 886 | .skip 0x18 887 | .global lbl_80216138 888 | lbl_80216138: 889 | .skip 0x4 890 | .global lbl_8021613C 891 | lbl_8021613C: 892 | .skip 0x14 893 | .global lbl_80216150 894 | lbl_80216150: 895 | .skip 0x4 896 | .global lbl_80216154 897 | lbl_80216154: 898 | .skip 0x4 899 | .global lbl_80216158 900 | lbl_80216158: 901 | .skip 0x8 902 | .global lbl_80216160 903 | lbl_80216160: 904 | .skip 0x100 905 | .global lbl_80216260 906 | lbl_80216260: 907 | .skip 0x4 908 | .global lbl_80216264 909 | lbl_80216264: 910 | .skip 0x4 911 | .global lbl_80216268 912 | lbl_80216268: 913 | .skip 0x8 914 | .global lbl_80216270 915 | lbl_80216270: 916 | .skip 0x70 917 | .global lbl_802162E0 918 | lbl_802162E0: 919 | .skip 0x4 920 | .global lbl_802162E4 921 | lbl_802162E4: 922 | .skip 0x150 923 | .global lbl_80216434 924 | lbl_80216434: 925 | .skip 0x1634 926 | .global lbl_80217A68 927 | lbl_80217A68: 928 | .skip 0x4 929 | .global lbl_80217A6C 930 | lbl_80217A6C: 931 | .skip 0x4 932 | .global lbl_80217A70 933 | lbl_80217A70: 934 | .skip 0x10 935 | .global lbl_80217A80 936 | lbl_80217A80: 937 | .skip 0x1428 938 | .global lbl_80218EA8 939 | lbl_80218EA8: 940 | .skip 0x358 941 | .global lbl_80219200 942 | lbl_80219200: 943 | .skip 0x26C0 944 | -------------------------------------------------------------------------------- /asm/ctors.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .ctors, "wa" # 0x800E2F20 - 0x800E2F40 4 | 5 | .balign 8 6 | 7 | .global lbl_800E2F20 8 | lbl_800E2F20: 9 | .incbin "baserom.dol", 0xDFF20, 0x4 10 | -------------------------------------------------------------------------------- /asm/dtors.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .dtors, "wa" # 0x800E2F40 - 0x800E2F60 4 | 5 | .balign 8 6 | 7 | .global lbl_800E2F40 8 | lbl_800E2F40: 9 | .incbin "baserom.dol", 0xDFF40, 0x4 10 | -------------------------------------------------------------------------------- /asm/macros.inc: -------------------------------------------------------------------------------- 1 | /* 2 | Code sections: 3 | .text0: 0x00000100 0x80003100 0x800055E0 4 | .text1: 0x000025E0 0x800055E0 0x800E2F20 5 | Data sections: 6 | .data0: 0x000DFF20 0x800E2F20 0x800E2F40 7 | .data1: 0x000DFF40 0x800E2F40 0x800E2F60 8 | .data2: 0x000DFF60 0x800E2F60 0x800ED2E0 9 | .data3: 0x000EA2E0 0x800ED300 0x80125E00 10 | .data4: 0x00122DE0 0x8021B8C0 0x8021BB40 11 | .data5: 0x00123060 0x8021C340 0x8021CFA0 12 | BSS section: 13 | .bss: 0x00000000 0x80125E00 0x8021CFA4 14 | Entry Point: 0x80003154 15 | */ 16 | # PowerPC Register Constants 17 | .set r0, 0 18 | .set r1, 1 19 | .set r2, 2 20 | .set r3, 3 21 | .set r4, 4 22 | .set r5, 5 23 | .set r6, 6 24 | .set r7, 7 25 | .set r8, 8 26 | .set r9, 9 27 | .set r10, 10 28 | .set r11, 11 29 | .set r12, 12 30 | .set r13, 13 31 | .set r14, 14 32 | .set r15, 15 33 | .set r16, 16 34 | .set r17, 17 35 | .set r18, 18 36 | .set r19, 19 37 | .set r20, 20 38 | .set r21, 21 39 | .set r22, 22 40 | .set r23, 23 41 | .set r24, 24 42 | .set r25, 25 43 | .set r26, 26 44 | .set r27, 27 45 | .set r28, 28 46 | .set r29, 29 47 | .set r30, 30 48 | .set r31, 31 49 | .set f0, 0 50 | .set f1, 1 51 | .set f2, 2 52 | .set f3, 3 53 | .set f4, 4 54 | .set f5, 5 55 | .set f6, 6 56 | .set f7, 7 57 | .set f8, 8 58 | .set f9, 9 59 | .set f10, 10 60 | .set f11, 11 61 | .set f12, 12 62 | .set f13, 13 63 | .set f14, 14 64 | .set f15, 15 65 | .set f16, 16 66 | .set f17, 17 67 | .set f18, 18 68 | .set f19, 19 69 | .set f20, 20 70 | .set f21, 21 71 | .set f22, 22 72 | .set f23, 23 73 | .set f24, 24 74 | .set f25, 25 75 | .set f26, 26 76 | .set f27, 27 77 | .set f28, 28 78 | .set f29, 29 79 | .set f30, 30 80 | .set f31, 31 81 | .set qr0, 0 82 | .set qr1, 1 83 | .set qr2, 2 84 | .set qr3, 3 85 | .set qr4, 4 86 | .set qr5, 5 87 | .set qr6, 6 88 | .set qr7, 7 89 | -------------------------------------------------------------------------------- /asm/rodata.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .rodata, "wa" # 0x800E2F60 - 0x800ED2E0 4 | 5 | .balign 8 6 | 7 | .global lbl_800E2F60 8 | lbl_800E2F60: 9 | .incbin "baserom.dol", 0xDFF60, 0x30 10 | .global lbl_800E2F90 11 | lbl_800E2F90: 12 | .incbin "baserom.dol", 0xDFF90, 0x50 13 | .global lbl_800E2FE0 14 | lbl_800E2FE0: 15 | .incbin "baserom.dol", 0xDFFE0, 0x50 16 | .global lbl_800E3030 17 | lbl_800E3030: 18 | .incbin "baserom.dol", 0xE0030, 0x50 19 | .global lbl_800E3080 20 | lbl_800E3080: 21 | .incbin "baserom.dol", 0xE0080, 0x50 22 | .global lbl_800E30D0 23 | lbl_800E30D0: 24 | .incbin "baserom.dol", 0xE00D0, 0x10 25 | .global lbl_800E30E0 26 | lbl_800E30E0: 27 | .incbin "baserom.dol", 0xE00E0, 0x18 28 | .global lbl_800E30F8 29 | lbl_800E30F8: 30 | .incbin "baserom.dol", 0xE00F8, 0x38 31 | .global lbl_800E3130 32 | lbl_800E3130: 33 | .incbin "baserom.dol", 0xE0130, 0x40 34 | .global lbl_800E3170 35 | lbl_800E3170: 36 | .incbin "baserom.dol", 0xE0170, 0x18 37 | .global lbl_800E3188 38 | lbl_800E3188: 39 | .incbin "baserom.dol", 0xE0188, 0xE0 40 | .global lbl_800E3268 41 | lbl_800E3268: 42 | .incbin "baserom.dol", 0xE0268, 0x8 43 | .global lbl_800E3270 44 | lbl_800E3270: 45 | .incbin "baserom.dol", 0xE0270, 0x50 46 | .global lbl_800E32C0 47 | lbl_800E32C0: 48 | .incbin "baserom.dol", 0xE02C0, 0x2C 49 | .global lbl_800E32EC 50 | lbl_800E32EC: 51 | .incbin "baserom.dol", 0xE02EC, 0xC 52 | .global lbl_800E32F8 53 | lbl_800E32F8: 54 | .incbin "baserom.dol", 0xE02F8, 0x30 55 | .global lbl_800E3328 56 | lbl_800E3328: 57 | .incbin "baserom.dol", 0xE0328, 0x108 58 | .global lbl_800E3430 59 | lbl_800E3430: 60 | .incbin "baserom.dol", 0xE0430, 0x80 61 | .global lbl_800E34B0 62 | lbl_800E34B0: 63 | .incbin "baserom.dol", 0xE04B0, 0x10 64 | .global lbl_800E34C0 65 | lbl_800E34C0: 66 | .incbin "baserom.dol", 0xE04C0, 0x40 67 | .global lbl_800E3500 68 | lbl_800E3500: 69 | .incbin "baserom.dol", 0xE0500, 0x68 70 | .global lbl_800E3568 71 | lbl_800E3568: 72 | .incbin "baserom.dol", 0xE0568, 0x98 73 | .global lbl_800E3600 74 | lbl_800E3600: 75 | .incbin "baserom.dol", 0xE0600, 0x1C 76 | .global lbl_800E361C 77 | lbl_800E361C: 78 | .incbin "baserom.dol", 0xE061C, 0x14 79 | .global lbl_800E3630 80 | lbl_800E3630: 81 | .incbin "baserom.dol", 0xE0630, 0x28 82 | .global lbl_800E3658 83 | lbl_800E3658: 84 | .incbin "baserom.dol", 0xE0658, 0x20 85 | .global lbl_800E3678 86 | lbl_800E3678: 87 | .incbin "baserom.dol", 0xE0678, 0x190 88 | .global lbl_800E3808 89 | lbl_800E3808: 90 | .incbin "baserom.dol", 0xE0808, 0x1C 91 | .global lbl_800E3824 92 | lbl_800E3824: 93 | .incbin "baserom.dol", 0xE0824, 0x24 94 | .global lbl_800E3848 95 | lbl_800E3848: 96 | .incbin "baserom.dol", 0xE0848, 0x34 97 | .global lbl_800E387C 98 | lbl_800E387C: 99 | .incbin "baserom.dol", 0xE087C, 0x2C 100 | .global lbl_800E38A8 101 | lbl_800E38A8: 102 | .incbin "baserom.dol", 0xE08A8, 0x20 103 | .global lbl_800E38C8 104 | lbl_800E38C8: 105 | .incbin "baserom.dol", 0xE08C8, 0x15C 106 | .global lbl_800E3A24 107 | lbl_800E3A24: 108 | .incbin "baserom.dol", 0xE0A24, 0x8 109 | .global lbl_800E3A2C 110 | lbl_800E3A2C: 111 | .incbin "baserom.dol", 0xE0A2C, 0x4 112 | .global lbl_800E3A30 113 | lbl_800E3A30: 114 | .incbin "baserom.dol", 0xE0A30, 0xA8 115 | .global lbl_800E3AD8 116 | lbl_800E3AD8: 117 | .incbin "baserom.dol", 0xE0AD8, 0x10 118 | .global lbl_800E3AE8 119 | lbl_800E3AE8: 120 | .incbin "baserom.dol", 0xE0AE8, 0x50 121 | .global lbl_800E3B38 122 | lbl_800E3B38: 123 | .incbin "baserom.dol", 0xE0B38, 0x28 124 | .global lbl_800E3B60 125 | lbl_800E3B60: 126 | .incbin "baserom.dol", 0xE0B60, 0x10 127 | .global lbl_800E3B70 128 | lbl_800E3B70: 129 | .incbin "baserom.dol", 0xE0B70, 0x10 130 | .global lbl_800E3B80 131 | lbl_800E3B80: 132 | .incbin "baserom.dol", 0xE0B80, 0x4 133 | .global lbl_800E3B84 134 | lbl_800E3B84: 135 | .incbin "baserom.dol", 0xE0B84, 0x104 136 | .global lbl_800E3C88 137 | lbl_800E3C88: 138 | .incbin "baserom.dol", 0xE0C88, 0x5C 139 | .global lbl_800E3CE4 140 | lbl_800E3CE4: 141 | .incbin "baserom.dol", 0xE0CE4, 0x28 142 | .global lbl_800E3D0C 143 | lbl_800E3D0C: 144 | .incbin "baserom.dol", 0xE0D0C, 0x30 145 | .global lbl_800E3D3C 146 | lbl_800E3D3C: 147 | .incbin "baserom.dol", 0xE0D3C, 0x14 148 | .global lbl_800E3D50 149 | lbl_800E3D50: 150 | .incbin "baserom.dol", 0xE0D50, 0x18 151 | .global lbl_800E3D68 152 | lbl_800E3D68: 153 | .incbin "baserom.dol", 0xE0D68, 0x5C 154 | .global lbl_800E3DC4 155 | lbl_800E3DC4: 156 | .incbin "baserom.dol", 0xE0DC4, 0x28 157 | .global lbl_800E3DEC 158 | lbl_800E3DEC: 159 | .incbin "baserom.dol", 0xE0DEC, 0x30 160 | .global lbl_800E3E1C 161 | lbl_800E3E1C: 162 | .incbin "baserom.dol", 0xE0E1C, 0x14 163 | .global lbl_800E3E30 164 | lbl_800E3E30: 165 | .incbin "baserom.dol", 0xE0E30, 0x18 166 | .global lbl_800E3E48 167 | lbl_800E3E48: 168 | .incbin "baserom.dol", 0xE0E48, 0x1008 169 | .global lbl_800E4E50 170 | lbl_800E4E50: 171 | .incbin "baserom.dol", 0xE1E50, 0x30 172 | .global lbl_800E4E80 173 | lbl_800E4E80: 174 | .incbin "baserom.dol", 0xE1E80, 0x18 175 | .global lbl_800E4E98 176 | lbl_800E4E98: 177 | .incbin "baserom.dol", 0xE1E98, 0x10 178 | .global lbl_800E4EA8 179 | lbl_800E4EA8: 180 | .incbin "baserom.dol", 0xE1EA8, 0x10 181 | .global lbl_800E4EB8 182 | lbl_800E4EB8: 183 | .incbin "baserom.dol", 0xE1EB8, 0x20 184 | .global lbl_800E4ED8 185 | lbl_800E4ED8: 186 | .incbin "baserom.dol", 0xE1ED8, 0x10 187 | .global lbl_800E4EE8 188 | lbl_800E4EE8: 189 | .incbin "baserom.dol", 0xE1EE8, 0x40 190 | .global lbl_800E4F28 191 | lbl_800E4F28: 192 | .incbin "baserom.dol", 0xE1F28, 0x20 193 | .global lbl_800E4F48 194 | lbl_800E4F48: 195 | .incbin "baserom.dol", 0xE1F48, 0x20 196 | .global lbl_800E4F68 197 | lbl_800E4F68: 198 | .incbin "baserom.dol", 0xE1F68, 0x20 199 | .global lbl_800E4F88 200 | lbl_800E4F88: 201 | .incbin "baserom.dol", 0xE1F88, 0x80 202 | .global lbl_800E5008 203 | lbl_800E5008: 204 | .incbin "baserom.dol", 0xE2008, 0x20 205 | .global lbl_800E5028 206 | lbl_800E5028: 207 | .incbin "baserom.dol", 0xE2028, 0xAC 208 | .global lbl_800E50D4 209 | lbl_800E50D4: 210 | .incbin "baserom.dol", 0xE20D4, 0x24 211 | .global lbl_800E50F8 212 | lbl_800E50F8: 213 | .incbin "baserom.dol", 0xE20F8, 0x21D8 214 | .global lbl_800E72D0 215 | lbl_800E72D0: 216 | .incbin "baserom.dol", 0xE42D0, 0x20 217 | .global lbl_800E72F0 218 | lbl_800E72F0: 219 | .incbin "baserom.dol", 0xE42F0, 0x50 220 | .global lbl_800E7340 221 | lbl_800E7340: 222 | .incbin "baserom.dol", 0xE4340, 0x20 223 | .global lbl_800E7360 224 | lbl_800E7360: 225 | .incbin "baserom.dol", 0xE4360, 0x28 226 | .global lbl_800E7388 227 | lbl_800E7388: 228 | .incbin "baserom.dol", 0xE4388, 0x8 229 | .global lbl_800E7390 230 | lbl_800E7390: 231 | .incbin "baserom.dol", 0xE4390, 0x8 232 | .global lbl_800E7398 233 | lbl_800E7398: 234 | .incbin "baserom.dol", 0xE4398, 0x8 235 | .global lbl_800E73A0 236 | lbl_800E73A0: 237 | .incbin "baserom.dol", 0xE43A0, 0x8 238 | .global lbl_800E73A8 239 | lbl_800E73A8: 240 | .incbin "baserom.dol", 0xE43A8, 0x8 241 | .global lbl_800E73B0 242 | lbl_800E73B0: 243 | .incbin "baserom.dol", 0xE43B0, 0x8 244 | .global lbl_800E73B8 245 | lbl_800E73B8: 246 | .incbin "baserom.dol", 0xE43B8, 0x8 247 | .global lbl_800E73C0 248 | lbl_800E73C0: 249 | .incbin "baserom.dol", 0xE43C0, 0x8 250 | .global lbl_800E73C8 251 | lbl_800E73C8: 252 | .incbin "baserom.dol", 0xE43C8, 0x888 253 | .global lbl_800E7C50 254 | lbl_800E7C50: 255 | .incbin "baserom.dol", 0xE4C50, 0x8 256 | .global lbl_800E7C58 257 | lbl_800E7C58: 258 | .incbin "baserom.dol", 0xE4C58, 0x8 259 | .global lbl_800E7C60 260 | lbl_800E7C60: 261 | .incbin "baserom.dol", 0xE4C60, 0x8 262 | .global lbl_800E7C68 263 | lbl_800E7C68: 264 | .incbin "baserom.dol", 0xE4C68, 0x8 265 | .global lbl_800E7C70 266 | lbl_800E7C70: 267 | .incbin "baserom.dol", 0xE4C70, 0x8 268 | .global lbl_800E7C78 269 | lbl_800E7C78: 270 | .incbin "baserom.dol", 0xE4C78, 0x8 271 | .global lbl_800E7C80 272 | lbl_800E7C80: 273 | .incbin "baserom.dol", 0xE4C80, 0x4 274 | .global lbl_800E7C84 275 | lbl_800E7C84: 276 | .incbin "baserom.dol", 0xE4C84, 0x4 277 | .global lbl_800E7C88 278 | lbl_800E7C88: 279 | .incbin "baserom.dol", 0xE4C88, 0x8 280 | .global lbl_800E7C90 281 | lbl_800E7C90: 282 | .incbin "baserom.dol", 0xE4C90, 0x4 283 | .global lbl_800E7C94 284 | lbl_800E7C94: 285 | .incbin "baserom.dol", 0xE4C94, 0x4 286 | .global lbl_800E7C98 287 | lbl_800E7C98: 288 | .incbin "baserom.dol", 0xE4C98, 0x8 289 | .global lbl_800E7CA0 290 | lbl_800E7CA0: 291 | .incbin "baserom.dol", 0xE4CA0, 0x8 292 | .global lbl_800E7CA8 293 | lbl_800E7CA8: 294 | .incbin "baserom.dol", 0xE4CA8, 0x8 295 | .global lbl_800E7CB0 296 | lbl_800E7CB0: 297 | .incbin "baserom.dol", 0xE4CB0, 0x8 298 | .global lbl_800E7CB8 299 | lbl_800E7CB8: 300 | .incbin "baserom.dol", 0xE4CB8, 0x8 301 | .global lbl_800E7CC0 302 | lbl_800E7CC0: 303 | .incbin "baserom.dol", 0xE4CC0, 0x30 304 | .global lbl_800E7CF0 305 | lbl_800E7CF0: 306 | .incbin "baserom.dol", 0xE4CF0, 0x30 307 | .global lbl_800E7D20 308 | lbl_800E7D20: 309 | .incbin "baserom.dol", 0xE4D20, 0x2C 310 | .global lbl_800E7D4C 311 | lbl_800E7D4C: 312 | .incbin "baserom.dol", 0xE4D4C, 0x2C 313 | .global lbl_800E7D78 314 | lbl_800E7D78: 315 | .incbin "baserom.dol", 0xE4D78, 0xE8 316 | .global lbl_800E7E60 317 | lbl_800E7E60: 318 | .incbin "baserom.dol", 0xE4E60, 0x38 319 | .global lbl_800E7E98 320 | lbl_800E7E98: 321 | .incbin "baserom.dol", 0xE4E98, 0x144 322 | .global lbl_800E7FDC 323 | lbl_800E7FDC: 324 | .incbin "baserom.dol", 0xE4FDC, 0x58 325 | .global lbl_800E8034 326 | lbl_800E8034: 327 | .incbin "baserom.dol", 0xE5034, 0x6C 328 | .global lbl_800E80A0 329 | lbl_800E80A0: 330 | .incbin "baserom.dol", 0xE50A0, 0x28 331 | .global lbl_800E80C8 332 | lbl_800E80C8: 333 | .incbin "baserom.dol", 0xE50C8, 0x2C 334 | .global lbl_800E80F4 335 | lbl_800E80F4: 336 | .incbin "baserom.dol", 0xE50F4, 0x8C 337 | .global lbl_800E8180 338 | lbl_800E8180: 339 | .incbin "baserom.dol", 0xE5180, 0x94 340 | .global lbl_800E8214 341 | lbl_800E8214: 342 | .incbin "baserom.dol", 0xE5214, 0x2C 343 | .global lbl_800E8240 344 | lbl_800E8240: 345 | .incbin "baserom.dol", 0xE5240, 0x2C 346 | .global lbl_800E826C 347 | lbl_800E826C: 348 | .incbin "baserom.dol", 0xE526C, 0x84 349 | .global lbl_800E82F0 350 | lbl_800E82F0: 351 | .incbin "baserom.dol", 0xE52F0, 0x64 352 | .global lbl_800E8354 353 | lbl_800E8354: 354 | .incbin "baserom.dol", 0xE5354, 0x28 355 | .global lbl_800E837C 356 | lbl_800E837C: 357 | .incbin "baserom.dol", 0xE537C, 0x28 358 | .global lbl_800E83A4 359 | lbl_800E83A4: 360 | .incbin "baserom.dol", 0xE53A4, 0x7C 361 | .global lbl_800E8420 362 | lbl_800E8420: 363 | .incbin "baserom.dol", 0xE5420, 0x30 364 | .global lbl_800E8450 365 | lbl_800E8450: 366 | .incbin "baserom.dol", 0xE5450, 0x2C 367 | .global lbl_800E847C 368 | lbl_800E847C: 369 | .incbin "baserom.dol", 0xE547C, 0x24 370 | .global lbl_800E84A0 371 | lbl_800E84A0: 372 | .incbin "baserom.dol", 0xE54A0, 0x2C 373 | .global lbl_800E84CC 374 | lbl_800E84CC: 375 | .incbin "baserom.dol", 0xE54CC, 0x40 376 | .global lbl_800E850C 377 | lbl_800E850C: 378 | .incbin "baserom.dol", 0xE550C, 0x58 379 | .global lbl_800E8564 380 | lbl_800E8564: 381 | .4byte lbl_800E850C + 0x2C 382 | .global lbl_800E8568 383 | lbl_800E8568: 384 | .incbin "baserom.dol", 0xE5568, 0x38 385 | .global lbl_800E85A0 386 | lbl_800E85A0: 387 | .incbin "baserom.dol", 0xE55A0, 0x3C 388 | .4byte lbl_800E85A0 389 | .incbin "baserom.dol", 0xE55E0, 0x8 390 | .global lbl_800E85E8 391 | lbl_800E85E8: 392 | .incbin "baserom.dol", 0xE55E8, 0x70 393 | .global lbl_800E8658 394 | lbl_800E8658: 395 | .4byte lbl_800E85E8 + 0x40 396 | .skip 0x4 397 | .global lbl_800E8660 398 | lbl_800E8660: 399 | .incbin "baserom.dol", 0xE5660, 0x2C 400 | .global lbl_800E868C 401 | lbl_800E868C: 402 | .incbin "baserom.dol", 0xE568C, 0x24 403 | .global lbl_800E86B0 404 | lbl_800E86B0: 405 | .incbin "baserom.dol", 0xE56B0, 0x24 406 | .global lbl_800E86D4 407 | lbl_800E86D4: 408 | .incbin "baserom.dol", 0xE56D4, 0x28 409 | .global lbl_800E86FC 410 | lbl_800E86FC: 411 | .incbin "baserom.dol", 0xE56FC, 0x5C 412 | .global lbl_800E8758 413 | lbl_800E8758: 414 | .incbin "baserom.dol", 0xE5758, 0x74 415 | .global lbl_800E87CC 416 | lbl_800E87CC: 417 | .incbin "baserom.dol", 0xE57CC, 0x24 418 | .global lbl_800E87F0 419 | lbl_800E87F0: 420 | .incbin "baserom.dol", 0xE57F0, 0xA8 421 | .global lbl_800E8898 422 | lbl_800E8898: 423 | .incbin "baserom.dol", 0xE5898, 0x158 424 | .global lbl_800E89F0 425 | lbl_800E89F0: 426 | .incbin "baserom.dol", 0xE59F0, 0x34 427 | .global lbl_800E8A24 428 | lbl_800E8A24: 429 | .incbin "baserom.dol", 0xE5A24, 0x2A4 430 | .global lbl_800E8CC8 431 | lbl_800E8CC8: 432 | .incbin "baserom.dol", 0xE5CC8, 0x30 433 | .4byte lbl_800E8CC8 434 | .incbin "baserom.dol", 0xE5CFC, 0x884 435 | .global lbl_800E9580 436 | lbl_800E9580: 437 | .incbin "baserom.dol", 0xE6580, 0x1C 438 | .global lbl_800E959C 439 | lbl_800E959C: 440 | .incbin "baserom.dol", 0xE659C, 0x1C 441 | .global lbl_800E95B8 442 | lbl_800E95B8: 443 | .incbin "baserom.dol", 0xE65B8, 0x1C 444 | .global lbl_800E95D4 445 | lbl_800E95D4: 446 | .incbin "baserom.dol", 0xE65D4, 0x50 447 | .global lbl_800E9624 448 | lbl_800E9624: 449 | .incbin "baserom.dol", 0xE6624, 0x1C 450 | .global lbl_800E9640 451 | lbl_800E9640: 452 | .incbin "baserom.dol", 0xE6640, 0x18 453 | .global lbl_800E9658 454 | lbl_800E9658: 455 | .incbin "baserom.dol", 0xE6658, 0x1C 456 | .global lbl_800E9674 457 | lbl_800E9674: 458 | .incbin "baserom.dol", 0xE6674, 0x18 459 | .global lbl_800E968C 460 | lbl_800E968C: 461 | .incbin "baserom.dol", 0xE668C, 0x1C 462 | .global lbl_800E96A8 463 | lbl_800E96A8: 464 | .incbin "baserom.dol", 0xE66A8, 0x18 465 | .global lbl_800E96C0 466 | lbl_800E96C0: 467 | .incbin "baserom.dol", 0xE66C0, 0x1C 468 | .global lbl_800E96DC 469 | lbl_800E96DC: 470 | .incbin "baserom.dol", 0xE66DC, 0xCC 471 | .global lbl_800E97A8 472 | lbl_800E97A8: 473 | .incbin "baserom.dol", 0xE67A8, 0x28 474 | .global lbl_800E97D0 475 | lbl_800E97D0: 476 | .incbin "baserom.dol", 0xE67D0, 0xB8 477 | .global lbl_800E9888 478 | lbl_800E9888: 479 | .incbin "baserom.dol", 0xE6888, 0x24 480 | .global lbl_800E98AC 481 | lbl_800E98AC: 482 | .incbin "baserom.dol", 0xE68AC, 0x28 483 | .global lbl_800E98D4 484 | lbl_800E98D4: 485 | .incbin "baserom.dol", 0xE68D4, 0x24 486 | .global lbl_800E98F8 487 | lbl_800E98F8: 488 | .incbin "baserom.dol", 0xE68F8, 0x2C 489 | .global lbl_800E9924 490 | lbl_800E9924: 491 | .incbin "baserom.dol", 0xE6924, 0x5C 492 | .global lbl_800E9980 493 | lbl_800E9980: 494 | .4byte lbl_800E9924 + 0x2C 495 | .skip 0x4 496 | .global lbl_800E9988 497 | lbl_800E9988: 498 | .incbin "baserom.dol", 0xE6988, 0x18 499 | .global lbl_800E99A0 500 | lbl_800E99A0: 501 | .incbin "baserom.dol", 0xE69A0, 0x40 502 | .global lbl_800E99E0 503 | lbl_800E99E0: 504 | .incbin "baserom.dol", 0xE69E0, 0x10 505 | .global lbl_800E99F0 506 | lbl_800E99F0: 507 | .incbin "baserom.dol", 0xE69F0, 0x2C 508 | .global lbl_800E9A1C 509 | lbl_800E9A1C: 510 | .incbin "baserom.dol", 0xE6A1C, 0x84 511 | .global lbl_800E9AA0 512 | lbl_800E9AA0: 513 | .incbin "baserom.dol", 0xE6AA0, 0x2C 514 | .global lbl_800E9ACC 515 | lbl_800E9ACC: 516 | .incbin "baserom.dol", 0xE6ACC, 0x2C 517 | .global lbl_800E9AF8 518 | lbl_800E9AF8: 519 | .incbin "baserom.dol", 0xE6AF8, 0x2C 520 | .global lbl_800E9B24 521 | lbl_800E9B24: 522 | .incbin "baserom.dol", 0xE6B24, 0x2C 523 | .global lbl_800E9B50 524 | lbl_800E9B50: 525 | .incbin "baserom.dol", 0xE6B50, 0x2C 526 | .global lbl_800E9B7C 527 | lbl_800E9B7C: 528 | .incbin "baserom.dol", 0xE6B7C, 0x2C 529 | .global lbl_800E9BA8 530 | lbl_800E9BA8: 531 | .incbin "baserom.dol", 0xE6BA8, 0x2C 532 | .global lbl_800E9BD4 533 | lbl_800E9BD4: 534 | .incbin "baserom.dol", 0xE6BD4, 0x2C 535 | .global lbl_800E9C00 536 | lbl_800E9C00: 537 | .incbin "baserom.dol", 0xE6C00, 0x2C 538 | .global lbl_800E9C2C 539 | lbl_800E9C2C: 540 | .incbin "baserom.dol", 0xE6C2C, 0x2C 541 | .global lbl_800E9C58 542 | lbl_800E9C58: 543 | .incbin "baserom.dol", 0xE6C58, 0x2C 544 | .global lbl_800E9C84 545 | lbl_800E9C84: 546 | .incbin "baserom.dol", 0xE6C84, 0x2C 547 | .global lbl_800E9CB0 548 | lbl_800E9CB0: 549 | .incbin "baserom.dol", 0xE6CB0, 0x2C 550 | .global lbl_800E9CDC 551 | lbl_800E9CDC: 552 | .incbin "baserom.dol", 0xE6CDC, 0x2C 553 | .global lbl_800E9D08 554 | lbl_800E9D08: 555 | .incbin "baserom.dol", 0xE6D08, 0x2C 556 | .global lbl_800E9D34 557 | lbl_800E9D34: 558 | .incbin "baserom.dol", 0xE6D34, 0x2C 559 | .global lbl_800E9D60 560 | lbl_800E9D60: 561 | .incbin "baserom.dol", 0xE6D60, 0x2C 562 | .global lbl_800E9D8C 563 | lbl_800E9D8C: 564 | .incbin "baserom.dol", 0xE6D8C, 0x2C 565 | .global lbl_800E9DB8 566 | lbl_800E9DB8: 567 | .incbin "baserom.dol", 0xE6DB8, 0x10 568 | .global lbl_800E9DC8 569 | lbl_800E9DC8: 570 | .incbin "baserom.dol", 0xE6DC8, 0x3C 571 | .global lbl_800E9E04 572 | lbl_800E9E04: 573 | .incbin "baserom.dol", 0xE6E04, 0x2C 574 | .global lbl_800E9E30 575 | lbl_800E9E30: 576 | .incbin "baserom.dol", 0xE6E30, 0x84 577 | .global lbl_800E9EB4 578 | lbl_800E9EB4: 579 | .incbin "baserom.dol", 0xE6EB4, 0x2C 580 | .global lbl_800E9EE0 581 | lbl_800E9EE0: 582 | .incbin "baserom.dol", 0xE6EE0, 0x2C 583 | .global lbl_800E9F0C 584 | lbl_800E9F0C: 585 | .incbin "baserom.dol", 0xE6F0C, 0x2C 586 | .global lbl_800E9F38 587 | lbl_800E9F38: 588 | .incbin "baserom.dol", 0xE6F38, 0x2C 589 | .global lbl_800E9F64 590 | lbl_800E9F64: 591 | .incbin "baserom.dol", 0xE6F64, 0x2C 592 | .global lbl_800E9F90 593 | lbl_800E9F90: 594 | .incbin "baserom.dol", 0xE6F90, 0x2C 595 | .global lbl_800E9FBC 596 | lbl_800E9FBC: 597 | .incbin "baserom.dol", 0xE6FBC, 0x2C 598 | .global lbl_800E9FE8 599 | lbl_800E9FE8: 600 | .incbin "baserom.dol", 0xE6FE8, 0xA8 601 | .global lbl_800EA090 602 | lbl_800EA090: 603 | .incbin "baserom.dol", 0xE7090, 0x2C 604 | .global lbl_800EA0BC 605 | lbl_800EA0BC: 606 | .incbin "baserom.dol", 0xE70BC, 0xA8 607 | .global lbl_800EA164 608 | lbl_800EA164: 609 | .incbin "baserom.dol", 0xE7164, 0x2C 610 | .global lbl_800EA190 611 | lbl_800EA190: 612 | .incbin "baserom.dol", 0xE7190, 0x2C 613 | .global lbl_800EA1BC 614 | lbl_800EA1BC: 615 | .incbin "baserom.dol", 0xE71BC, 0x2C 616 | .global lbl_800EA1E8 617 | lbl_800EA1E8: 618 | .incbin "baserom.dol", 0xE71E8, 0x2C 619 | .global lbl_800EA214 620 | lbl_800EA214: 621 | .incbin "baserom.dol", 0xE7214, 0x2C 622 | .global lbl_800EA240 623 | lbl_800EA240: 624 | .incbin "baserom.dol", 0xE7240, 0x2C 625 | .global lbl_800EA26C 626 | lbl_800EA26C: 627 | .incbin "baserom.dol", 0xE726C, 0x2C 628 | .global lbl_800EA298 629 | lbl_800EA298: 630 | .incbin "baserom.dol", 0xE7298, 0x2C 631 | .global lbl_800EA2C4 632 | lbl_800EA2C4: 633 | .incbin "baserom.dol", 0xE72C4, 0x2C 634 | .global lbl_800EA2F0 635 | lbl_800EA2F0: 636 | .incbin "baserom.dol", 0xE72F0, 0x2C 637 | .global lbl_800EA31C 638 | lbl_800EA31C: 639 | .incbin "baserom.dol", 0xE731C, 0xC 640 | .global lbl_800EA328 641 | lbl_800EA328: 642 | .incbin "baserom.dol", 0xE7328, 0x30 643 | .4byte lbl_800EA328 644 | .global lbl_800EA35C 645 | lbl_800EA35C: 646 | .incbin "baserom.dol", 0xE735C, 0x120 647 | .global lbl_800EA47C 648 | lbl_800EA47C: 649 | .incbin "baserom.dol", 0xE747C, 0x20 650 | .global lbl_800EA49C 651 | lbl_800EA49C: 652 | .incbin "baserom.dol", 0xE749C, 0x34 653 | .global lbl_800EA4D0 654 | lbl_800EA4D0: 655 | .incbin "baserom.dol", 0xE74D0, 0x30 656 | .global lbl_800EA500 657 | lbl_800EA500: 658 | .4byte lbl_800EA4D0 659 | .incbin "baserom.dol", 0xE7504, 0x8C 660 | .global lbl_800EA590 661 | lbl_800EA590: 662 | .incbin "baserom.dol", 0xE7590, 0x40 663 | .global lbl_800EA5D0 664 | lbl_800EA5D0: 665 | .incbin "baserom.dol", 0xE75D0, 0x3C 666 | .global lbl_800EA60C 667 | lbl_800EA60C: 668 | .incbin "baserom.dol", 0xE760C, 0x18 669 | .global lbl_800EA624 670 | lbl_800EA624: 671 | .incbin "baserom.dol", 0xE7624, 0x18 672 | .global lbl_800EA63C 673 | lbl_800EA63C: 674 | .incbin "baserom.dol", 0xE763C, 0x78 675 | .global lbl_800EA6B4 676 | lbl_800EA6B4: 677 | .incbin "baserom.dol", 0xE76B4, 0x1C 678 | .global lbl_800EA6D0 679 | lbl_800EA6D0: 680 | .incbin "baserom.dol", 0xE76D0, 0x98 681 | .global lbl_800EA768 682 | lbl_800EA768: 683 | .incbin "baserom.dol", 0xE7768, 0x2C 684 | .global lbl_800EA794 685 | lbl_800EA794: 686 | .incbin "baserom.dol", 0xE7794, 0x18 687 | .global lbl_800EA7AC 688 | lbl_800EA7AC: 689 | .incbin "baserom.dol", 0xE77AC, 0x18 690 | .global lbl_800EA7C4 691 | lbl_800EA7C4: 692 | .incbin "baserom.dol", 0xE77C4, 0x1C 693 | .global lbl_800EA7E0 694 | lbl_800EA7E0: 695 | .incbin "baserom.dol", 0xE77E0, 0x1C0 696 | .global lbl_800EA9A0 697 | lbl_800EA9A0: 698 | .incbin "baserom.dol", 0xE79A0, 0x2C 699 | .global lbl_800EA9CC 700 | lbl_800EA9CC: 701 | .4byte lbl_800EA9A0 702 | .incbin "baserom.dol", 0xE79D0, 0x8 703 | .4byte lbl_800EA9CC + 0x4 704 | .4byte lbl_800EA9CC + 0x8 705 | .global lbl_800EA9E0 706 | lbl_800EA9E0: 707 | .incbin "baserom.dol", 0xE79E0, 0x1B8 708 | .global lbl_800EAB98 709 | lbl_800EAB98: 710 | .incbin "baserom.dol", 0xE7B98, 0x24 711 | .global lbl_800EABBC 712 | lbl_800EABBC: 713 | .incbin "baserom.dol", 0xE7BBC, 0x2C 714 | .global lbl_800EABE8 715 | lbl_800EABE8: 716 | .incbin "baserom.dol", 0xE7BE8, 0x34 717 | .global lbl_800EAC1C 718 | lbl_800EAC1C: 719 | .incbin "baserom.dol", 0xE7C1C, 0x4 720 | .global lbl_800EAC20 721 | lbl_800EAC20: 722 | .incbin "baserom.dol", 0xE7C20, 0x4 723 | .global lbl_800EAC24 724 | lbl_800EAC24: 725 | .incbin "baserom.dol", 0xE7C24, 0x4 726 | .global lbl_800EAC28 727 | lbl_800EAC28: 728 | .incbin "baserom.dol", 0xE7C28, 0x10 729 | .global lbl_800EAC38 730 | lbl_800EAC38: 731 | .incbin "baserom.dol", 0xE7C38, 0x8 732 | .global lbl_800EAC40 733 | lbl_800EAC40: 734 | .incbin "baserom.dol", 0xE7C40, 0x8 735 | .global lbl_800EAC48 736 | lbl_800EAC48: 737 | .incbin "baserom.dol", 0xE7C48, 0x8 738 | .global lbl_800EAC50 739 | lbl_800EAC50: 740 | .incbin "baserom.dol", 0xE7C50, 0x8 741 | .global lbl_800EAC58 742 | lbl_800EAC58: 743 | .incbin "baserom.dol", 0xE7C58, 0x34 744 | .global lbl_800EAC8C 745 | lbl_800EAC8C: 746 | .incbin "baserom.dol", 0xE7C8C, 0x34 747 | .global lbl_800EACC0 748 | lbl_800EACC0: 749 | .incbin "baserom.dol", 0xE7CC0, 0xA0 750 | .global lbl_800EAD60 751 | lbl_800EAD60: 752 | .incbin "baserom.dol", 0xE7D60, 0x38 753 | .global lbl_800EAD98 754 | lbl_800EAD98: 755 | .incbin "baserom.dol", 0xE7D98, 0xE8 756 | .global lbl_800EAE80 757 | lbl_800EAE80: 758 | .incbin "baserom.dol", 0xE7E80, 0x8 759 | .global lbl_800EAE88 760 | lbl_800EAE88: 761 | .incbin "baserom.dol", 0xE7E88, 0x18 762 | .global lbl_800EAEA0 763 | lbl_800EAEA0: 764 | .incbin "baserom.dol", 0xE7EA0, 0x8 765 | .global lbl_800EAEA8 766 | lbl_800EAEA8: 767 | .incbin "baserom.dol", 0xE7EA8, 0x38 768 | .global lbl_800EAEE0 769 | lbl_800EAEE0: 770 | .incbin "baserom.dol", 0xE7EE0, 0x30 771 | .global lbl_800EAF10 772 | lbl_800EAF10: 773 | .incbin "baserom.dol", 0xE7F10, 0x8 774 | .global lbl_800EAF18 775 | lbl_800EAF18: 776 | .incbin "baserom.dol", 0xE7F18, 0x8 777 | .global lbl_800EAF20 778 | lbl_800EAF20: 779 | .incbin "baserom.dol", 0xE7F20, 0x8 780 | .global lbl_800EAF28 781 | lbl_800EAF28: 782 | .incbin "baserom.dol", 0xE7F28, 0x8 783 | .global lbl_800EAF30 784 | lbl_800EAF30: 785 | .incbin "baserom.dol", 0xE7F30, 0x8 786 | .global lbl_800EAF38 787 | lbl_800EAF38: 788 | .incbin "baserom.dol", 0xE7F38, 0x58 789 | .global lbl_800EAF90 790 | lbl_800EAF90: 791 | .incbin "baserom.dol", 0xE7F90, 0x40 792 | .global lbl_800EAFD0 793 | lbl_800EAFD0: 794 | .incbin "baserom.dol", 0xE7FD0, 0x8 795 | .global lbl_800EAFD8 796 | lbl_800EAFD8: 797 | .incbin "baserom.dol", 0xE7FD8, 0x8 798 | .global lbl_800EAFE0 799 | lbl_800EAFE0: 800 | .incbin "baserom.dol", 0xE7FE0, 0x8 801 | .global lbl_800EAFE8 802 | lbl_800EAFE8: 803 | .incbin "baserom.dol", 0xE7FE8, 0x54 804 | .global lbl_800EB03C 805 | lbl_800EB03C: 806 | .incbin "baserom.dol", 0xE803C, 0x4 807 | .global lbl_800EB040 808 | lbl_800EB040: 809 | .incbin "baserom.dol", 0xE8040, 0xC0 810 | .global lbl_800EB100 811 | lbl_800EB100: 812 | .incbin "baserom.dol", 0xE8100, 0x8 813 | .global lbl_800EB108 814 | lbl_800EB108: 815 | .incbin "baserom.dol", 0xE8108, 0x8 816 | .global lbl_800EB110 817 | lbl_800EB110: 818 | .4byte 0x00000000 819 | .4byte func_800AD884 820 | .4byte func_800AD2B0 821 | .4byte func_800ACAAC 822 | .4byte func_800AC6DC 823 | .global lbl_800EB124 824 | lbl_800EB124: 825 | .incbin "baserom.dol", 0xE8124, 0x8 826 | .global lbl_800EB12C 827 | lbl_800EB12C: 828 | .incbin "baserom.dol", 0xE812C, 0xC 829 | .global lbl_800EB138 830 | lbl_800EB138: 831 | .4byte 0x0A435249 832 | .4byte 0x204D5056 833 | .4byte 0x2F474320 834 | .4byte 0x5665722E 835 | .4byte 0x312E3933 836 | .4byte 0x33204275 837 | .4byte 0x696C643A 838 | .4byte 0x53657020 839 | .4byte 0x32322032 840 | .4byte 0x30303420 841 | .4byte 0x31303A33 842 | .4byte 0x343A3535 843 | .4byte 0x0A004170 844 | .4byte 0x70656E64 845 | .4byte 0x3A204D57 846 | .4byte 0x32343037 847 | .4byte 0x20474332 848 | .4byte 0x30417072 849 | .4byte 0x32303034 850 | .4byte 0x50617463 851 | .4byte 0x68310A00 852 | .4byte 0x00000000 853 | .4byte 0x00000001 854 | .4byte 0x00000001 855 | .4byte 0x00000000 856 | .4byte 0x00000000 857 | .4byte 0x00000000 858 | .4byte 0x00000003 859 | .4byte 0x7FFFFFFF 860 | .4byte lbl_800B0BB8 861 | .4byte 0x00000000 862 | .4byte 0x00000000 863 | .4byte 0x00000000 864 | .4byte 0x00000000 865 | .4byte 0x00000000 866 | .4byte 0x00000000 867 | .4byte 0x00000000 868 | .4byte 0x5A5A5A5A 869 | .4byte 0x0000005C 870 | .4byte 0x00001378 871 | .4byte 0x00001C60 872 | .4byte 0x01020304 873 | .4byte 0x312E3933 874 | .4byte 0x33000000 875 | .global lbl_800EB1E8 876 | lbl_800EB1E8: 877 | .incbin "baserom.dol", 0xE81E8, 0x10 878 | .global lbl_800EB1F8 879 | lbl_800EB1F8: 880 | .incbin "baserom.dol", 0xE81F8, 0xB0 881 | .global lbl_800EB2A8 882 | lbl_800EB2A8: 883 | .incbin "baserom.dol", 0xE82A8, 0x8 884 | .global lbl_800EB2B0 885 | lbl_800EB2B0: 886 | .incbin "baserom.dol", 0xE82B0, 0x10 887 | .global lbl_800EB2C0 888 | lbl_800EB2C0: 889 | .incbin "baserom.dol", 0xE82C0, 0x8 890 | .global lbl_800EB2C8 891 | lbl_800EB2C8: 892 | .incbin "baserom.dol", 0xE82C8, 0x8 893 | .global lbl_800EB2D0 894 | lbl_800EB2D0: 895 | .incbin "baserom.dol", 0xE82D0, 0x8 896 | .global lbl_800EB2D8 897 | lbl_800EB2D8: 898 | .4byte func_800C55A0 899 | .4byte func_800C5578 900 | .4byte func_800C5558 901 | .4byte func_800C4944 902 | .4byte func_800C4554 903 | .4byte func_800C454C 904 | .4byte func_800C44EC 905 | .4byte func_800C44C0 906 | .4byte func_800C4374 907 | .4byte func_800C434C 908 | .4byte func_800C4324 909 | .4byte func_800C42FC 910 | .4byte func_800C42D4 911 | .4byte func_800C4204 912 | .global lbl_800EB310 913 | lbl_800EB310: 914 | .incbin "baserom.dol", 0xE8310, 0x14 915 | .global lbl_800EB324 916 | lbl_800EB324: 917 | .incbin "baserom.dol", 0xE8324, 0x4 918 | .global lbl_800EB328 919 | lbl_800EB328: 920 | .incbin "baserom.dol", 0xE8328, 0x4 921 | .global lbl_800EB32C 922 | lbl_800EB32C: 923 | .incbin "baserom.dol", 0xE832C, 0x4 924 | .global lbl_800EB330 925 | lbl_800EB330: 926 | .4byte 0x43300000 927 | .4byte 0x80000000 928 | .4byte func_800C5B00 929 | .4byte func_800C5AF8 930 | .4byte func_800C5A44 931 | .4byte func_800C59F8 932 | .4byte func_800C59F0 933 | .4byte func_800C5984 934 | .4byte func_800C5918 935 | .4byte func_800C58AC 936 | .4byte func_800C5834 937 | .4byte func_800C580C 938 | .4byte func_800C57E4 939 | .4byte func_800C57BC 940 | .4byte func_800C5794 941 | .4byte func_800C578C 942 | .global lbl_800EB370 943 | lbl_800EB370: 944 | .4byte 0x0A435249 945 | .4byte 0x20534644 946 | .4byte 0x2F474320 947 | .4byte 0x5665722E 948 | .4byte 0x312E3934 949 | .4byte 0x37204275 950 | .4byte 0x696C643A 951 | .4byte 0x53657020 952 | .4byte 0x32322032 953 | .4byte 0x30303420 954 | .4byte 0x31303A33 955 | .4byte 0x353A3135 956 | .4byte 0x0A004170 957 | .4byte 0x70656E64 958 | .4byte 0x3A204D57 959 | .4byte 0x32343037 960 | .4byte 0x20474332 961 | .4byte 0x30417072 962 | .4byte 0x32303034 963 | .4byte 0x50617463 964 | .4byte 0x68310A00 965 | .4byte 0x00000000 966 | .4byte func_800C85BC 967 | .4byte func_800C85B4 968 | .4byte func_800C8588 969 | .4byte func_800C8580 970 | .4byte func_800C8578 971 | .4byte func_800C8570 972 | .4byte func_800C8568 973 | .4byte func_800C8560 974 | .4byte func_800C8558 975 | .4byte func_800C8530 976 | .4byte func_800C8500 977 | .4byte func_800C84D8 978 | .4byte func_800C84B0 979 | .4byte func_800C84A8 980 | .4byte func_800CA18C 981 | .4byte func_800CA168 982 | .4byte func_800CA148 983 | .4byte func_800C8830 984 | .4byte func_800C87BC 985 | .4byte func_800C87B4 986 | .4byte func_800C87AC 987 | .4byte func_800C87A4 988 | .4byte func_800C879C 989 | .4byte func_800C8774 990 | .4byte func_800C874C 991 | .4byte func_800C8724 992 | .4byte func_800C86FC 993 | .4byte func_800C85D0 994 | .global lbl_800EB438 995 | lbl_800EB438: 996 | .4byte func_800C94AC 997 | .4byte func_800C9268 998 | .4byte func_800C8F04 999 | .4byte func_800C8EFC 1000 | .4byte func_800CEF8C 1001 | .4byte func_800CEEF4 1002 | .4byte func_800CEED4 1003 | .4byte func_800CAD28 1004 | .4byte func_800CA84C 1005 | .4byte func_800CA844 1006 | .4byte func_800CA83C 1007 | .4byte func_800CA82C 1008 | .4byte func_800CA824 1009 | .4byte func_800CA7FC 1010 | .4byte func_800CA7D4 1011 | .4byte func_800CA738 1012 | .4byte func_800CA418 1013 | .4byte func_800CA2A4 1014 | .global lbl_800EB480 1015 | lbl_800EB480: 1016 | .incbin "baserom.dol", 0xE8480, 0x24 1017 | .global lbl_800EB4A4 1018 | lbl_800EB4A4: 1019 | .incbin "baserom.dol", 0xE84A4, 0x20 1020 | .global lbl_800EB4C4 1021 | lbl_800EB4C4: 1022 | .incbin "baserom.dol", 0xE84C4, 0x24 1023 | .global lbl_800EB4E8 1024 | lbl_800EB4E8: 1025 | .incbin "baserom.dol", 0xE84E8, 0x198 1026 | .global lbl_800EB680 1027 | lbl_800EB680: 1028 | .incbin "baserom.dol", 0xE8680, 0x24 1029 | .global lbl_800EB6A4 1030 | lbl_800EB6A4: 1031 | .4byte 0x00000000 1032 | .4byte 0x00000000 1033 | .4byte func_800D3810 1034 | .4byte func_800D36B0 1035 | .4byte func_800D3874 1036 | .4byte func_800D3874 1037 | .4byte func_800D3874 1038 | .4byte func_800D3874 1039 | .4byte func_800D37AC 1040 | .4byte func_800D362C 1041 | .4byte func_800D3874 1042 | .4byte func_800D3874 1043 | .4byte func_800D3874 1044 | .4byte func_800D3874 1045 | .4byte func_800D3734 1046 | .4byte func_800D35A8 1047 | .4byte func_800D3874 1048 | .4byte func_800D3874 1049 | .4byte 0x00000000 1050 | .global lbl_800EB6F0 1051 | lbl_800EB6F0: 1052 | .incbin "baserom.dol", 0xE86F0, 0x8 1053 | .global lbl_800EB6F8 1054 | lbl_800EB6F8: 1055 | .incbin "baserom.dol", 0xE86F8, 0x4 1056 | .global lbl_800EB6FC 1057 | lbl_800EB6FC: 1058 | .4byte 0xBF800000 1059 | .4byte func_800D510C 1060 | .4byte func_800D5104 1061 | .4byte func_800D506C 1062 | .4byte func_800D4FF4 1063 | .4byte func_800D4FEC 1064 | .4byte func_800D4FE4 1065 | .4byte func_800D4FDC 1066 | .4byte func_800D4FD4 1067 | .4byte func_800D4FCC 1068 | .4byte func_800D4FA4 1069 | .4byte func_800D4F7C 1070 | .4byte func_800D4F54 1071 | .4byte func_800D4F2C 1072 | .4byte func_800D4F24 1073 | .4byte func_800D5418 1074 | .4byte func_800D5410 1075 | .4byte func_800D531C 1076 | .4byte func_800D5314 1077 | .4byte func_800D530C 1078 | .4byte func_800D5304 1079 | .4byte func_800D52FC 1080 | .4byte func_800D52F4 1081 | .4byte func_800D52EC 1082 | .4byte func_800D52C4 1083 | .4byte func_800D529C 1084 | .4byte func_800D5208 1085 | .4byte func_800D51E0 1086 | .4byte func_800D51D8 1087 | .global lbl_800EB770 1088 | lbl_800EB770: 1089 | .incbin "baserom.dol", 0xE8770, 0x114 1090 | .global lbl_800EB884 1091 | lbl_800EB884: 1092 | .incbin "baserom.dol", 0xE8884, 0x8C 1093 | .global lbl_800EB910 1094 | lbl_800EB910: 1095 | .incbin "baserom.dol", 0xE8910, 0x34 1096 | .global lbl_800EB944 1097 | lbl_800EB944: 1098 | .incbin "baserom.dol", 0xE8944, 0x8 1099 | .global lbl_800EB94C 1100 | lbl_800EB94C: 1101 | .incbin "baserom.dol", 0xE894C, 0x1C 1102 | .global lbl_800EB968 1103 | lbl_800EB968: 1104 | .incbin "baserom.dol", 0xE8968, 0xD0 1105 | .global lbl_800EBA38 1106 | lbl_800EBA38: 1107 | .incbin "baserom.dol", 0xE8A38, 0x88 1108 | .global lbl_800EBAC0 1109 | lbl_800EBAC0: 1110 | .incbin "baserom.dol", 0xE8AC0, 0x28 1111 | .global lbl_800EBAE8 1112 | lbl_800EBAE8: 1113 | .incbin "baserom.dol", 0xE8AE8, 0xB0 1114 | .global lbl_800EBB98 1115 | lbl_800EBB98: 1116 | .incbin "baserom.dol", 0xE8B98, 0x154 1117 | .global lbl_800EBCEC 1118 | lbl_800EBCEC: 1119 | .incbin "baserom.dol", 0xE8CEC, 0x2C 1120 | .global lbl_800EBD18 1121 | lbl_800EBD18: 1122 | .incbin "baserom.dol", 0xE8D18, 0x1E0 1123 | .global lbl_800EBEF8 1124 | lbl_800EBEF8: 1125 | .incbin "baserom.dol", 0xE8EF8, 0x128 1126 | .global lbl_800EC020 1127 | lbl_800EC020: 1128 | .incbin "baserom.dol", 0xE9020, 0x8 1129 | .global lbl_800EC028 1130 | lbl_800EC028: 1131 | .incbin "baserom.dol", 0xE9028, 0x40 1132 | .global lbl_800EC068 1133 | lbl_800EC068: 1134 | .incbin "baserom.dol", 0xE9068, 0x8 1135 | .global lbl_800EC070 1136 | lbl_800EC070: 1137 | .incbin "baserom.dol", 0xE9070, 0x8 1138 | .global lbl_800EC078 1139 | lbl_800EC078: 1140 | .incbin "baserom.dol", 0xE9078, 0xFC 1141 | .global lbl_800EC174 1142 | lbl_800EC174: 1143 | .incbin "baserom.dol", 0xE9174, 0x2C4 1144 | .global lbl_800EC438 1145 | lbl_800EC438: 1146 | .4byte lbl_800EB370 + 0x58 1147 | .4byte lbl_800EB370 + 0x90 1148 | .4byte lbl_800EB438 + 0x10 1149 | .4byte lbl_800EB2D8 1150 | .4byte 0x00000000 1151 | .4byte 0x00000000 1152 | .4byte lbl_800EB6FC + 0x3C 1153 | .4byte lbl_800EB330 + 0x8 1154 | .4byte lbl_800EB6FC + 0x4 1155 | .4byte lbl_800EB370 + 0x58 1156 | .4byte 0x00000000 1157 | .4byte lbl_800EB438 + 0x10 1158 | .4byte 0x00000000 1159 | .4byte 0x00000000 1160 | .4byte 0x00000000 1161 | .4byte lbl_800EB6FC + 0x3C 1162 | .4byte 0x00000000 1163 | .4byte 0x00000000 1164 | .4byte lbl_800EB370 + 0x58 1165 | .4byte lbl_800EB370 + 0x90 1166 | .4byte lbl_800EB438 + 0x10 1167 | .4byte 0x00000000 1168 | .4byte 0x00000000 1169 | .4byte 0x00000000 1170 | .4byte lbl_800EB6FC + 0x3C 1171 | .4byte 0x00000000 1172 | .4byte lbl_800EB6FC + 0x4 1173 | .global lbl_800EC4A4 1174 | lbl_800EC4A4: 1175 | .incbin "baserom.dol", 0xE94A4, 0x78 1176 | .global lbl_800EC51C 1177 | lbl_800EC51C: 1178 | .incbin "baserom.dol", 0xE951C, 0x20 1179 | .global lbl_800EC53C 1180 | lbl_800EC53C: 1181 | .incbin "baserom.dol", 0xE953C, 0x318 1182 | .global lbl_800EC854 1183 | lbl_800EC854: 1184 | .incbin "baserom.dol", 0xE9854, 0xB4 1185 | .global lbl_800EC908 1186 | lbl_800EC908: 1187 | .incbin "baserom.dol", 0xE9908, 0x24 1188 | .global lbl_800EC92C 1189 | lbl_800EC92C: 1190 | .incbin "baserom.dol", 0xE992C, 0x34 1191 | .global lbl_800EC960 1192 | lbl_800EC960: 1193 | .4byte 0x0A4D5753 1194 | .4byte 0x46442F47 1195 | .4byte 0x43205665 1196 | .4byte 0x722E332E 1197 | .4byte 0x33332042 1198 | .4byte 0x75696C64 1199 | .4byte 0x3A536570 1200 | .4byte 0x20323220 1201 | .4byte 0x32303034 1202 | .4byte 0x2031303A 1203 | .4byte 0x33343A34 1204 | .4byte 0x350A0041 1205 | .4byte 0x7070656E 1206 | .4byte 0x643A204D 1207 | .4byte 0x57323430 1208 | .4byte 0x37204743 1209 | .4byte 0x32304170 1210 | .4byte 0x72323030 1211 | .4byte 0x34506174 1212 | .4byte 0x6368310A 1213 | .4byte 0x00000000 1214 | .4byte lbl_800EB370 + 0x58 1215 | .4byte lbl_800EB370 + 0x90 1216 | .4byte lbl_800EB438 + 0x10 1217 | .4byte lbl_800EB6FC + 0x3C 1218 | .4byte lbl_800EB2D8 1219 | .4byte lbl_800EB330 + 0x8 1220 | .4byte lbl_800EB6FC + 0x4 1221 | .4byte 0x00000000 1222 | .4byte 0x00000000 1223 | .4byte 0x00000000 1224 | .4byte 0x00000000 1225 | .4byte 0x00000000 1226 | .4byte 0x00000000 1227 | .4byte 0x00000000 1228 | .4byte 0x00000000 1229 | .4byte lbl_800EC960 + 0x54 1230 | .4byte 0x0000EA24 1231 | .4byte 0x000002B8 1232 | .4byte 0x44415441 1233 | .4byte 0x20455252 1234 | .4byte 0x4F522825 1235 | .4byte 0x30385829 1236 | .4byte 0x00000000 1237 | .4byte 0x53464420 1238 | .4byte 0x4552524F 1239 | .4byte 0x52282530 1240 | .4byte 0x3858293A 1241 | .4byte 0x20276D61 1242 | .4byte 0x785F7769 1243 | .4byte 0x6474682C 1244 | .4byte 0x206D6178 1245 | .4byte 0x5F686569 1246 | .4byte 0x67687427 1247 | .4byte 0x206F6620 1248 | .4byte 0x63726561 1249 | .4byte 0x74696F6E 1250 | .4byte 0x20706172 1251 | .4byte 0x616D6574 1252 | .4byte 0x65722069 1253 | .4byte 0x7320736D 1254 | .4byte 0x616C6C2E 1255 | .4byte 0x20496E63 1256 | .4byte 0x72656173 1257 | .4byte 0x65207468 1258 | .4byte 0x69732076 1259 | .4byte 0x616C7565 1260 | .4byte 0x2E000000 1261 | .4byte 0x53464420 1262 | .4byte 0x4552524F 1263 | .4byte 0x52282530 1264 | .4byte 0x3858293A 1265 | .4byte 0x20526561 1266 | .4byte 0x64206275 1267 | .4byte 0x66666572 1268 | .4byte 0x20697320 1269 | .4byte 0x736D616C 1270 | .4byte 0x6C2E2049 1271 | .4byte 0x6E637265 1272 | .4byte 0x61736520 1273 | .4byte 0x276D6178 1274 | .4byte 0x5F627073 1275 | .4byte 0x27206F66 1276 | .4byte 0x20637265 1277 | .4byte 0x6174696F 1278 | .4byte 0x6E207061 1279 | .4byte 0x72616D65 1280 | .4byte 0x7465722E 1281 | .4byte 0x00000000 1282 | .4byte 0x53464420 1283 | .4byte 0x4552524F 1284 | .4byte 0x52282530 1285 | .4byte 0x3858293A 1286 | .4byte 0x20467261 1287 | .4byte 0x6D652070 1288 | .4byte 0x6F6F6C20 1289 | .4byte 0x73697A65 1290 | .4byte 0x20697320 1291 | .4byte 0x696E636F 1292 | .4byte 0x72726563 1293 | .4byte 0x742E2053 1294 | .4byte 0x65742070 1295 | .4byte 0x6F736974 1296 | .4byte 0x69766520 1297 | .4byte 0x696E7465 1298 | .4byte 0x67657220 1299 | .4byte 0x746F2027 1300 | .4byte 0x6E66726D 1301 | .4byte 0x5F706F6F 1302 | .4byte 0x6C5F776B 1303 | .4byte 0x27206F66 1304 | .4byte 0x20637265 1305 | .4byte 0x6174696F 1306 | .4byte 0x6E207061 1307 | .4byte 0x72616D65 1308 | .4byte 0x7465722E 1309 | .4byte 0x00000000 1310 | .4byte 0x53464420 1311 | .4byte 0x4552524F 1312 | .4byte 0x52282530 1313 | .4byte 0x3858293A 1314 | .4byte 0x204E756D 1315 | .4byte 0x62657220 1316 | .4byte 0x6F662041 1317 | .4byte 0x44585420 1318 | .4byte 0x68616E64 1319 | .4byte 0x6C657320 1320 | .4byte 0x65786365 1321 | .4byte 0x65647320 1322 | .4byte 0x69747320 1323 | .4byte 0x6D617869 1324 | .4byte 0x6D756D20 1325 | .4byte 0x6E756D62 1326 | .4byte 0x65722E20 1327 | .4byte 0x4D57504C 1328 | .4byte 0x59206861 1329 | .4byte 0x6E646C65 1330 | .4byte 0x20757365 1331 | .4byte 0x73206F6E 1332 | .4byte 0x65204144 1333 | .4byte 0x58542068 1334 | .4byte 0x616E646C 1335 | .4byte 0x65287374 1336 | .4byte 0x6572656F 1337 | .4byte 0x2920666F 1338 | .4byte 0x72204D57 1339 | .4byte 0x5346445F 1340 | .4byte 0x46545950 1341 | .4byte 0x455F5346 1342 | .4byte 0x442E0000 1343 | .4byte 0x53464420 1344 | .4byte 0x4552524F 1345 | .4byte 0x52282530 1346 | .4byte 0x38582900 1347 | .4byte 0x312E3934 1348 | .4byte 0x37000000 1349 | .4byte 0x45303131 1350 | .4byte 0x30383120 1351 | .4byte 0x6D77506C 1352 | .4byte 0x79536664 1353 | .4byte 0x496E6974 1354 | .4byte 0x3A204E6F 1355 | .4byte 0x7420636F 1356 | .4byte 0x6D706174 1357 | .4byte 0x69626C65 1358 | .4byte 0x20534644 1359 | .4byte 0x20566572 1360 | .4byte 0x73696F6E 1361 | .4byte 0x2E000000 1362 | .4byte 0x426FC28F 1363 | .4byte 0x45313132 1364 | .4byte 0x32363131 1365 | .4byte 0x206D7750 1366 | .4byte 0x6C79496E 1367 | .4byte 0x69745366 1368 | .4byte 0x6446783A 1369 | .4byte 0x20697072 1370 | .4byte 0x6D206973 1371 | .4byte 0x204E554C 1372 | .4byte 0x4C2E0000 1373 | .4byte 0x45323030 1374 | .4byte 0x35206D77 1375 | .4byte 0x506C7949 1376 | .4byte 0x6E697453 1377 | .4byte 0x66644678 1378 | .4byte 0x3A206361 1379 | .4byte 0x6E277420 1380 | .4byte 0x696E6974 1381 | .4byte 0x20475343 1382 | .4byte 0x00000000 1383 | .4byte 0x3F000000 1384 | .4byte 0x447A0000 1385 | .4byte 0x45525232 1386 | .4byte 0x30303130 1387 | .4byte 0x34323141 1388 | .4byte 0x203A206D 1389 | .4byte 0x77506C79 1390 | .4byte 0x496E6974 1391 | .4byte 0x53666446 1392 | .4byte 0x78000000 1393 | .global lbl_800ECC80 1394 | lbl_800ECC80: 1395 | .incbin "baserom.dol", 0xE9C80, 0x64 1396 | .global lbl_800ECCE4 1397 | lbl_800ECCE4: 1398 | .incbin "baserom.dol", 0xE9CE4, 0x54 1399 | .global lbl_800ECD38 1400 | lbl_800ECD38: 1401 | .incbin "baserom.dol", 0xE9D38, 0x8 1402 | .global lbl_800ECD40 1403 | lbl_800ECD40: 1404 | .incbin "baserom.dol", 0xE9D40, 0x88 1405 | .global lbl_800ECDC8 1406 | lbl_800ECDC8: 1407 | .incbin "baserom.dol", 0xE9DC8, 0x28 1408 | .global lbl_800ECDF0 1409 | lbl_800ECDF0: 1410 | .incbin "baserom.dol", 0xE9DF0, 0xF0 1411 | .global lbl_800ECEE0 1412 | lbl_800ECEE0: 1413 | .incbin "baserom.dol", 0xE9EE0, 0x30 1414 | .global lbl_800ECF10 1415 | lbl_800ECF10: 1416 | .incbin "baserom.dol", 0xE9F10, 0x2C 1417 | .global lbl_800ECF3C 1418 | lbl_800ECF3C: 1419 | .incbin "baserom.dol", 0xE9F3C, 0x30 1420 | .global lbl_800ECF6C 1421 | lbl_800ECF6C: 1422 | .incbin "baserom.dol", 0xE9F6C, 0x1C 1423 | .global lbl_800ECF88 1424 | lbl_800ECF88: 1425 | .incbin "baserom.dol", 0xE9F88, 0x2C 1426 | .global lbl_800ECFB4 1427 | lbl_800ECFB4: 1428 | .incbin "baserom.dol", 0xE9FB4, 0x2C 1429 | .global lbl_800ECFE0 1430 | lbl_800ECFE0: 1431 | .incbin "baserom.dol", 0xE9FE0, 0x2C 1432 | .global lbl_800ED00C 1433 | lbl_800ED00C: 1434 | .incbin "baserom.dol", 0xEA00C, 0x2C 1435 | .global lbl_800ED038 1436 | lbl_800ED038: 1437 | .incbin "baserom.dol", 0xEA038, 0x2C 1438 | .global lbl_800ED064 1439 | lbl_800ED064: 1440 | .incbin "baserom.dol", 0xEA064, 0x2C 1441 | .global lbl_800ED090 1442 | lbl_800ED090: 1443 | .incbin "baserom.dol", 0xEA090, 0x24 1444 | .global lbl_800ED0B4 1445 | lbl_800ED0B4: 1446 | .incbin "baserom.dol", 0xEA0B4, 0x2C 1447 | .global lbl_800ED0E0 1448 | lbl_800ED0E0: 1449 | .incbin "baserom.dol", 0xEA0E0, 0x34 1450 | .global lbl_800ED114 1451 | lbl_800ED114: 1452 | .incbin "baserom.dol", 0xEA114, 0xB4 1453 | .global lbl_800ED1C8 1454 | lbl_800ED1C8: 1455 | .incbin "baserom.dol", 0xEA1C8, 0x34 1456 | .global lbl_800ED1FC 1457 | lbl_800ED1FC: 1458 | .incbin "baserom.dol", 0xEA1FC, 0x34 1459 | .global lbl_800ED230 1460 | lbl_800ED230: 1461 | .incbin "baserom.dol", 0xEA230, 0x50 1462 | .global lbl_800ED280 1463 | lbl_800ED280: 1464 | .incbin "baserom.dol", 0xEA280, 0x38 1465 | .global lbl_800ED2B8 1466 | lbl_800ED2B8: 1467 | .incbin "baserom.dol", 0xEA2B8, 0x4 1468 | .global lbl_800ED2BC 1469 | lbl_800ED2BC: 1470 | .incbin "baserom.dol", 0xEA2BC, 0x4 1471 | .global lbl_800ED2C0 1472 | lbl_800ED2C0: 1473 | .incbin "baserom.dol", 0xEA2C0, 0x18 1474 | .global lbl_800ED2D8 1475 | lbl_800ED2D8: 1476 | .incbin "baserom.dol", 0xEA2D8, 0x4 1477 | -------------------------------------------------------------------------------- /asm/sbss.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .sbss # 0x80125E00 - 0x8021CFA4 4 | 5 | .balign 8 6 | 7 | .global lbl_8021BB40 8 | lbl_8021BB40: 9 | .skip 0x4 10 | .global lbl_8021BB44 11 | lbl_8021BB44: 12 | .skip 0xC 13 | .global lbl_8021BB50 14 | lbl_8021BB50: 15 | .skip 0x4 16 | .global lbl_8021BB54 17 | lbl_8021BB54: 18 | .skip 0xC 19 | .global lbl_8021BB60 20 | lbl_8021BB60: 21 | .skip 0x1 22 | .global lbl_8021BB61 23 | lbl_8021BB61: 24 | .skip 0x1 25 | .global lbl_8021BB62 26 | lbl_8021BB62: 27 | .skip 0x1 28 | .global lbl_8021BB63 29 | lbl_8021BB63: 30 | .skip 0x1 31 | .global lbl_8021BB64 32 | lbl_8021BB64: 33 | .skip 0x4 34 | .global lbl_8021BB68 35 | lbl_8021BB68: 36 | .skip 0x4 37 | .global lbl_8021BB6C 38 | lbl_8021BB6C: 39 | .skip 0x4 40 | .global lbl_8021BB70 41 | lbl_8021BB70: 42 | .skip 0x4 43 | .global lbl_8021BB74 44 | lbl_8021BB74: 45 | .skip 0x4 46 | .global lbl_8021BB78 47 | lbl_8021BB78: 48 | .skip 0x4 49 | .global lbl_8021BB7C 50 | lbl_8021BB7C: 51 | .skip 0x4 52 | .global lbl_8021BB80 53 | lbl_8021BB80: 54 | .skip 0x4 55 | .global lbl_8021BB84 56 | lbl_8021BB84: 57 | .skip 0x4 58 | .global lbl_8021BB88 59 | lbl_8021BB88: 60 | .skip 0x4 61 | .global lbl_8021BB8C 62 | lbl_8021BB8C: 63 | .skip 0x4 64 | .global lbl_8021BB90 65 | lbl_8021BB90: 66 | .skip 0x4 67 | .global lbl_8021BB94 68 | lbl_8021BB94: 69 | .skip 0x4 70 | .global lbl_8021BB98 71 | lbl_8021BB98: 72 | .skip 0x4 73 | .global lbl_8021BB9C 74 | lbl_8021BB9C: 75 | .skip 0x1 76 | .global lbl_8021BB9D 77 | lbl_8021BB9D: 78 | .skip 0x3 79 | .global lbl_8021BBA0 80 | lbl_8021BBA0: 81 | .skip 0x4 82 | .global lbl_8021BBA4 83 | lbl_8021BBA4: 84 | .skip 0x4 85 | .global lbl_8021BBA8 86 | lbl_8021BBA8: 87 | .skip 0x18 88 | .global lbl_8021BBC0 89 | lbl_8021BBC0: 90 | .skip 0x4 91 | .global lbl_8021BBC4 92 | lbl_8021BBC4: 93 | .skip 0x4 94 | .global lbl_8021BBC8 95 | lbl_8021BBC8: 96 | .skip 0x4 97 | .global lbl_8021BBCC 98 | lbl_8021BBCC: 99 | .skip 0x20 100 | .global lbl_8021BBEC 101 | lbl_8021BBEC: 102 | .skip 0x4 103 | .global lbl_8021BBF0 104 | lbl_8021BBF0: 105 | .skip 0x4 106 | .global lbl_8021BBF4 107 | lbl_8021BBF4: 108 | .skip 0x4 109 | .global lbl_8021BBF8 110 | lbl_8021BBF8: 111 | .skip 0x10 112 | .global lbl_8021BC08 113 | lbl_8021BC08: 114 | .skip 0x4 115 | .global lbl_8021BC0C 116 | lbl_8021BC0C: 117 | .skip 0x4 118 | .global lbl_8021BC10 119 | lbl_8021BC10: 120 | .skip 0x4 121 | .global lbl_8021BC14 122 | lbl_8021BC14: 123 | .skip 0x1C 124 | .global lbl_8021BC30 125 | lbl_8021BC30: 126 | .skip 0x8 127 | .global lbl_8021BC38 128 | lbl_8021BC38: 129 | .skip 0x4 130 | .global lbl_8021BC3C 131 | lbl_8021BC3C: 132 | .skip 0x4 133 | .global lbl_8021BC40 134 | lbl_8021BC40: 135 | .skip 0x4 136 | .global lbl_8021BC44 137 | lbl_8021BC44: 138 | .skip 0x4 139 | .global lbl_8021BC48 140 | lbl_8021BC48: 141 | .skip 0x8 142 | .global lbl_8021BC50 143 | lbl_8021BC50: 144 | .skip 0x8 145 | .global lbl_8021BC58 146 | lbl_8021BC58: 147 | .skip 0x4 148 | .global lbl_8021BC5C 149 | lbl_8021BC5C: 150 | .skip 0x4 151 | .global lbl_8021BC60 152 | lbl_8021BC60: 153 | .skip 0x8 154 | .global lbl_8021BC68 155 | lbl_8021BC68: 156 | .skip 0x4 157 | .global lbl_8021BC6C 158 | lbl_8021BC6C: 159 | .skip 0x4 160 | .global lbl_8021BC70 161 | lbl_8021BC70: 162 | .skip 0x8 163 | .global lbl_8021BC78 164 | lbl_8021BC78: 165 | .skip 0x4 166 | .global lbl_8021BC7C 167 | lbl_8021BC7C: 168 | .skip 0x4 169 | .global lbl_8021BC80 170 | lbl_8021BC80: 171 | .skip 0x4 172 | .global lbl_8021BC84 173 | lbl_8021BC84: 174 | .skip 0x4 175 | .global lbl_8021BC88 176 | lbl_8021BC88: 177 | .skip 0x8 178 | .global lbl_8021BC90 179 | lbl_8021BC90: 180 | .skip 0x4 181 | .global lbl_8021BC94 182 | lbl_8021BC94: 183 | .skip 0x4 184 | .global lbl_8021BC98 185 | lbl_8021BC98: 186 | .skip 0x4 187 | .global lbl_8021BC9C 188 | lbl_8021BC9C: 189 | .skip 0x4 190 | .global lbl_8021BCA0 191 | lbl_8021BCA0: 192 | .skip 0x8 193 | .global lbl_8021BCA8 194 | lbl_8021BCA8: 195 | .skip 0x4 196 | .global lbl_8021BCAC 197 | lbl_8021BCAC: 198 | .skip 0x4 199 | .global lbl_8021BCB0 200 | lbl_8021BCB0: 201 | .skip 0x8 202 | .global lbl_8021BCB8 203 | lbl_8021BCB8: 204 | .skip 0x4 205 | .global lbl_8021BCBC 206 | lbl_8021BCBC: 207 | .skip 0x4 208 | .global lbl_8021BCC0 209 | lbl_8021BCC0: 210 | .skip 0x4 211 | .global lbl_8021BCC4 212 | lbl_8021BCC4: 213 | .skip 0x4 214 | .global lbl_8021BCC8 215 | lbl_8021BCC8: 216 | .skip 0x8 217 | .global lbl_8021BCD0 218 | lbl_8021BCD0: 219 | .skip 0x8 220 | .global lbl_8021BCD8 221 | lbl_8021BCD8: 222 | .skip 0x4 223 | .global lbl_8021BCDC 224 | lbl_8021BCDC: 225 | .skip 0x4 226 | .global lbl_8021BCE0 227 | lbl_8021BCE0: 228 | .skip 0x8 229 | .global lbl_8021BCE8 230 | lbl_8021BCE8: 231 | .skip 0x4 232 | .global lbl_8021BCEC 233 | lbl_8021BCEC: 234 | .skip 0x4 235 | .global lbl_8021BCF0 236 | lbl_8021BCF0: 237 | .skip 0x4 238 | .global lbl_8021BCF4 239 | lbl_8021BCF4: 240 | .skip 0x4 241 | .global lbl_8021BCF8 242 | lbl_8021BCF8: 243 | .skip 0x4 244 | .global lbl_8021BCFC 245 | lbl_8021BCFC: 246 | .skip 0x4 247 | .global lbl_8021BD00 248 | lbl_8021BD00: 249 | .skip 0x10 250 | .global lbl_8021BD10 251 | lbl_8021BD10: 252 | .skip 0x4 253 | .global lbl_8021BD14 254 | lbl_8021BD14: 255 | .skip 0x4 256 | .global lbl_8021BD18 257 | lbl_8021BD18: 258 | .skip 0x4 259 | .global lbl_8021BD1C 260 | lbl_8021BD1C: 261 | .skip 0x4 262 | .global lbl_8021BD20 263 | lbl_8021BD20: 264 | .skip 0x4 265 | .global lbl_8021BD24 266 | lbl_8021BD24: 267 | .skip 0x4 268 | .global lbl_8021BD28 269 | lbl_8021BD28: 270 | .skip 0x4 271 | .global lbl_8021BD2C 272 | lbl_8021BD2C: 273 | .skip 0x4 274 | .global lbl_8021BD30 275 | lbl_8021BD30: 276 | .skip 0x4 277 | .global lbl_8021BD34 278 | lbl_8021BD34: 279 | .skip 0x4 280 | .global lbl_8021BD38 281 | lbl_8021BD38: 282 | .skip 0x4 283 | .global lbl_8021BD3C 284 | lbl_8021BD3C: 285 | .skip 0x4 286 | .global lbl_8021BD40 287 | lbl_8021BD40: 288 | .skip 0x8 289 | .global lbl_8021BD48 290 | lbl_8021BD48: 291 | .skip 0x4 292 | .global lbl_8021BD4C 293 | lbl_8021BD4C: 294 | .skip 0x4 295 | .global lbl_8021BD50 296 | lbl_8021BD50: 297 | .skip 0x4 298 | .global lbl_8021BD54 299 | lbl_8021BD54: 300 | .skip 0x4 301 | .global lbl_8021BD58 302 | lbl_8021BD58: 303 | .skip 0x4 304 | .global lbl_8021BD5C 305 | lbl_8021BD5C: 306 | .skip 0x4 307 | .global lbl_8021BD60 308 | lbl_8021BD60: 309 | .skip 0x4 310 | .global lbl_8021BD64 311 | lbl_8021BD64: 312 | .skip 0x4 313 | .global lbl_8021BD68 314 | lbl_8021BD68: 315 | .skip 0x4 316 | .global lbl_8021BD6C 317 | lbl_8021BD6C: 318 | .skip 0x4 319 | .global lbl_8021BD70 320 | lbl_8021BD70: 321 | .skip 0x4 322 | .global lbl_8021BD74 323 | lbl_8021BD74: 324 | .skip 0x4 325 | .global lbl_8021BD78 326 | lbl_8021BD78: 327 | .skip 0x8 328 | .global lbl_8021BD80 329 | lbl_8021BD80: 330 | .skip 0x4 331 | .global lbl_8021BD84 332 | lbl_8021BD84: 333 | .skip 0x4 334 | .global lbl_8021BD88 335 | lbl_8021BD88: 336 | .skip 0x4 337 | .global lbl_8021BD8C 338 | lbl_8021BD8C: 339 | .skip 0x4 340 | .global lbl_8021BD90 341 | lbl_8021BD90: 342 | .skip 0x4 343 | .global lbl_8021BD94 344 | lbl_8021BD94: 345 | .skip 0x4 346 | .global lbl_8021BD98 347 | lbl_8021BD98: 348 | .skip 0x4 349 | .global lbl_8021BD9C 350 | lbl_8021BD9C: 351 | .skip 0x4 352 | .global lbl_8021BDA0 353 | lbl_8021BDA0: 354 | .skip 0x4 355 | .global lbl_8021BDA4 356 | lbl_8021BDA4: 357 | .skip 0x4 358 | .global lbl_8021BDA8 359 | lbl_8021BDA8: 360 | .skip 0x4 361 | .global lbl_8021BDAC 362 | lbl_8021BDAC: 363 | .skip 0x4 364 | .global lbl_8021BDB0 365 | lbl_8021BDB0: 366 | .skip 0x4 367 | .global lbl_8021BDB4 368 | lbl_8021BDB4: 369 | .skip 0x4 370 | .global lbl_8021BDB8 371 | lbl_8021BDB8: 372 | .skip 0x4 373 | .global lbl_8021BDBC 374 | lbl_8021BDBC: 375 | .skip 0x4 376 | .global lbl_8021BDC0 377 | lbl_8021BDC0: 378 | .skip 0x4 379 | .global lbl_8021BDC4 380 | lbl_8021BDC4: 381 | .skip 0x4 382 | .global lbl_8021BDC8 383 | lbl_8021BDC8: 384 | .skip 0x8 385 | .global lbl_8021BDD0 386 | lbl_8021BDD0: 387 | .skip 0x8 388 | .global lbl_8021BDD8 389 | lbl_8021BDD8: 390 | .skip 0x4 391 | .global lbl_8021BDDC 392 | lbl_8021BDDC: 393 | .skip 0x4 394 | .global lbl_8021BDE0 395 | lbl_8021BDE0: 396 | .skip 0x8 397 | .global lbl_8021BDE8 398 | lbl_8021BDE8: 399 | .skip 0x4 400 | .global lbl_8021BDEC 401 | lbl_8021BDEC: 402 | .skip 0x4 403 | .global lbl_8021BDF0 404 | lbl_8021BDF0: 405 | .skip 0x4 406 | .global lbl_8021BDF4 407 | lbl_8021BDF4: 408 | .skip 0x8 409 | .global lbl_8021BDFC 410 | lbl_8021BDFC: 411 | .skip 0x4 412 | .global lbl_8021BE00 413 | lbl_8021BE00: 414 | .skip 0x4 415 | .global lbl_8021BE04 416 | lbl_8021BE04: 417 | .skip 0x4 418 | .global lbl_8021BE08 419 | lbl_8021BE08: 420 | .skip 0x4 421 | .global lbl_8021BE0C 422 | lbl_8021BE0C: 423 | .skip 0x2 424 | .global lbl_8021BE0E 425 | lbl_8021BE0E: 426 | .skip 0x2 427 | .global lbl_8021BE10 428 | lbl_8021BE10: 429 | .skip 0x8 430 | .global lbl_8021BE18 431 | lbl_8021BE18: 432 | .skip 0x4 433 | .global lbl_8021BE1C 434 | lbl_8021BE1C: 435 | .skip 0x4 436 | .global lbl_8021BE20 437 | lbl_8021BE20: 438 | .skip 0x8 439 | .global lbl_8021BE28 440 | lbl_8021BE28: 441 | .skip 0x4 442 | .global lbl_8021BE2C 443 | lbl_8021BE2C: 444 | .skip 0x4 445 | .global lbl_8021BE30 446 | lbl_8021BE30: 447 | .skip 0x4 448 | .global lbl_8021BE34 449 | lbl_8021BE34: 450 | .skip 0x4 451 | .global lbl_8021BE38 452 | lbl_8021BE38: 453 | .skip 0x4 454 | .global lbl_8021BE3C 455 | lbl_8021BE3C: 456 | .skip 0x4 457 | .global lbl_8021BE40 458 | lbl_8021BE40: 459 | .skip 0x4 460 | .global lbl_8021BE44 461 | lbl_8021BE44: 462 | .skip 0x4 463 | .global lbl_8021BE48 464 | lbl_8021BE48: 465 | .skip 0x8 466 | .global lbl_8021BE50 467 | lbl_8021BE50: 468 | .skip 0x4 469 | .global lbl_8021BE54 470 | lbl_8021BE54: 471 | .skip 0x4 472 | .global lbl_8021BE58 473 | lbl_8021BE58: 474 | .skip 0x4 475 | .global lbl_8021BE5C 476 | lbl_8021BE5C: 477 | .skip 0x4 478 | .global lbl_8021BE60 479 | lbl_8021BE60: 480 | .skip 0x4 481 | .global lbl_8021BE64 482 | lbl_8021BE64: 483 | .skip 0x4 484 | .global lbl_8021BE68 485 | lbl_8021BE68: 486 | .skip 0x4 487 | .global lbl_8021BE6C 488 | lbl_8021BE6C: 489 | .skip 0x4 490 | .global lbl_8021BE70 491 | lbl_8021BE70: 492 | .skip 0x4 493 | .global lbl_8021BE74 494 | lbl_8021BE74: 495 | .skip 0x4 496 | .global lbl_8021BE78 497 | lbl_8021BE78: 498 | .skip 0x8 499 | .global lbl_8021BE80 500 | lbl_8021BE80: 501 | .skip 0x4 502 | .global lbl_8021BE84 503 | lbl_8021BE84: 504 | .skip 0x4 505 | .global lbl_8021BE88 506 | lbl_8021BE88: 507 | .skip 0x4 508 | .global lbl_8021BE8C 509 | lbl_8021BE8C: 510 | .skip 0x4 511 | .global lbl_8021BE90 512 | lbl_8021BE90: 513 | .skip 0x4 514 | .global lbl_8021BE94 515 | lbl_8021BE94: 516 | .skip 0x4 517 | .global lbl_8021BE98 518 | lbl_8021BE98: 519 | .skip 0x4 520 | .global lbl_8021BE9C 521 | lbl_8021BE9C: 522 | .skip 0x4 523 | .global lbl_8021BEA0 524 | lbl_8021BEA0: 525 | .skip 0x4 526 | .global lbl_8021BEA4 527 | lbl_8021BEA4: 528 | .skip 0x4 529 | .global lbl_8021BEA8 530 | lbl_8021BEA8: 531 | .skip 0x4 532 | .global lbl_8021BEAC 533 | lbl_8021BEAC: 534 | .skip 0x4 535 | .global lbl_8021BEB0 536 | lbl_8021BEB0: 537 | .skip 0x4 538 | .global lbl_8021BEB4 539 | lbl_8021BEB4: 540 | .skip 0x4 541 | .global lbl_8021BEB8 542 | lbl_8021BEB8: 543 | .skip 0x4 544 | .global lbl_8021BEBC 545 | lbl_8021BEBC: 546 | .skip 0x4 547 | .global lbl_8021BEC0 548 | lbl_8021BEC0: 549 | .skip 0x4 550 | .global lbl_8021BEC4 551 | lbl_8021BEC4: 552 | .skip 0x4 553 | .global lbl_8021BEC8 554 | lbl_8021BEC8: 555 | .skip 0x4 556 | .global lbl_8021BECC 557 | lbl_8021BECC: 558 | .skip 0x4 559 | .global lbl_8021BED0 560 | lbl_8021BED0: 561 | .skip 0x4 562 | .global lbl_8021BED4 563 | lbl_8021BED4: 564 | .skip 0x4 565 | .global lbl_8021BED8 566 | lbl_8021BED8: 567 | .skip 0x4 568 | .global lbl_8021BEDC 569 | lbl_8021BEDC: 570 | .skip 0x4 571 | .global lbl_8021BEE0 572 | lbl_8021BEE0: 573 | .skip 0x4 574 | .global lbl_8021BEE4 575 | lbl_8021BEE4: 576 | .skip 0x4 577 | .global lbl_8021BEE8 578 | lbl_8021BEE8: 579 | .skip 0x4 580 | .global lbl_8021BEEC 581 | lbl_8021BEEC: 582 | .skip 0x4 583 | .global lbl_8021BEF0 584 | lbl_8021BEF0: 585 | .skip 0x4 586 | .global lbl_8021BEF4 587 | lbl_8021BEF4: 588 | .skip 0x4 589 | .global lbl_8021BEF8 590 | lbl_8021BEF8: 591 | .skip 0x4 592 | .global lbl_8021BEFC 593 | lbl_8021BEFC: 594 | .skip 0x4 595 | .global lbl_8021BF00 596 | lbl_8021BF00: 597 | .skip 0x4 598 | .global lbl_8021BF04 599 | lbl_8021BF04: 600 | .skip 0x4 601 | .global lbl_8021BF08 602 | lbl_8021BF08: 603 | .skip 0x8 604 | .global lbl_8021BF10 605 | lbl_8021BF10: 606 | .skip 0x4 607 | .global lbl_8021BF14 608 | lbl_8021BF14: 609 | .skip 0x4 610 | .global lbl_8021BF18 611 | lbl_8021BF18: 612 | .skip 0x4 613 | .global lbl_8021BF1C 614 | lbl_8021BF1C: 615 | .skip 0x4 616 | .global lbl_8021BF20 617 | lbl_8021BF20: 618 | .skip 0x4 619 | .global lbl_8021BF24 620 | lbl_8021BF24: 621 | .skip 0x4 622 | .global lbl_8021BF28 623 | lbl_8021BF28: 624 | .skip 0x4 625 | .global lbl_8021BF2C 626 | lbl_8021BF2C: 627 | .skip 0x4 628 | .global lbl_8021BF30 629 | lbl_8021BF30: 630 | .skip 0x4 631 | .global lbl_8021BF34 632 | lbl_8021BF34: 633 | .skip 0x4 634 | .global lbl_8021BF38 635 | lbl_8021BF38: 636 | .skip 0x4 637 | .global lbl_8021BF3C 638 | lbl_8021BF3C: 639 | .skip 0x4 640 | .global lbl_8021BF40 641 | lbl_8021BF40: 642 | .skip 0x8 643 | .global lbl_8021BF48 644 | lbl_8021BF48: 645 | .skip 0x4 646 | .global lbl_8021BF4C 647 | lbl_8021BF4C: 648 | .skip 0x4 649 | .global lbl_8021BF50 650 | lbl_8021BF50: 651 | .skip 0x4 652 | .global lbl_8021BF54 653 | lbl_8021BF54: 654 | .skip 0x4 655 | .global lbl_8021BF58 656 | lbl_8021BF58: 657 | .skip 0x8 658 | .global lbl_8021BF60 659 | lbl_8021BF60: 660 | .skip 0x4 661 | .global lbl_8021BF64 662 | lbl_8021BF64: 663 | .skip 0x4 664 | .global lbl_8021BF68 665 | lbl_8021BF68: 666 | .skip 0x8 667 | .global lbl_8021BF70 668 | lbl_8021BF70: 669 | .skip 0x4 670 | .global lbl_8021BF74 671 | lbl_8021BF74: 672 | .skip 0x4 673 | .global lbl_8021BF78 674 | lbl_8021BF78: 675 | .skip 0x4 676 | .global lbl_8021BF7C 677 | lbl_8021BF7C: 678 | .skip 0x4 679 | .global lbl_8021BF80 680 | lbl_8021BF80: 681 | .skip 0x4 682 | .global lbl_8021BF84 683 | lbl_8021BF84: 684 | .skip 0x4 685 | .global lbl_8021BF88 686 | lbl_8021BF88: 687 | .skip 0x8 688 | .global lbl_8021BF90 689 | lbl_8021BF90: 690 | .skip 0x8 691 | .global lbl_8021BF98 692 | lbl_8021BF98: 693 | .skip 0x4 694 | .global lbl_8021BF9C 695 | lbl_8021BF9C: 696 | .skip 0x4 697 | .global lbl_8021BFA0 698 | lbl_8021BFA0: 699 | .skip 0x4 700 | .global lbl_8021BFA4 701 | lbl_8021BFA4: 702 | .skip 0x4 703 | .global lbl_8021BFA8 704 | lbl_8021BFA8: 705 | .skip 0x4 706 | .global lbl_8021BFAC 707 | lbl_8021BFAC: 708 | .skip 0x4 709 | .global lbl_8021BFB0 710 | lbl_8021BFB0: 711 | .skip 0x4 712 | .global lbl_8021BFB4 713 | lbl_8021BFB4: 714 | .skip 0x4 715 | .global lbl_8021BFB8 716 | lbl_8021BFB8: 717 | .skip 0x8 718 | .global lbl_8021BFC0 719 | lbl_8021BFC0: 720 | .skip 0x4 721 | .global lbl_8021BFC4 722 | lbl_8021BFC4: 723 | .skip 0x4 724 | .global lbl_8021BFC8 725 | lbl_8021BFC8: 726 | .skip 0x8 727 | .global lbl_8021BFD0 728 | lbl_8021BFD0: 729 | .skip 0x4 730 | .global lbl_8021BFD4 731 | lbl_8021BFD4: 732 | .skip 0x4 733 | .global lbl_8021BFD8 734 | lbl_8021BFD8: 735 | .skip 0x4 736 | .global lbl_8021BFDC 737 | lbl_8021BFDC: 738 | .skip 0x4 739 | .global lbl_8021BFE0 740 | lbl_8021BFE0: 741 | .skip 0x4 742 | .global lbl_8021BFE4 743 | lbl_8021BFE4: 744 | .skip 0x4 745 | .global lbl_8021BFE8 746 | lbl_8021BFE8: 747 | .skip 0x8 748 | .global lbl_8021BFF0 749 | lbl_8021BFF0: 750 | .skip 0x8 751 | .global lbl_8021BFF8 752 | lbl_8021BFF8: 753 | .skip 0x4 754 | .global lbl_8021BFFC 755 | lbl_8021BFFC: 756 | .skip 0x4 757 | .global lbl_8021C000 758 | lbl_8021C000: 759 | .skip 0x8 760 | .global lbl_8021C008 761 | lbl_8021C008: 762 | .skip 0x4 763 | .global lbl_8021C00C 764 | lbl_8021C00C: 765 | .skip 0x4 766 | .global lbl_8021C010 767 | lbl_8021C010: 768 | .skip 0x4 769 | .global lbl_8021C014 770 | lbl_8021C014: 771 | .skip 0x4 772 | .global lbl_8021C018 773 | lbl_8021C018: 774 | .skip 0x4 775 | .global lbl_8021C01C 776 | lbl_8021C01C: 777 | .skip 0x4 778 | .global lbl_8021C020 779 | lbl_8021C020: 780 | .skip 0x2 781 | .global lbl_8021C022 782 | lbl_8021C022: 783 | .skip 0x6 784 | .global lbl_8021C028 785 | lbl_8021C028: 786 | .skip 0x4 787 | .global lbl_8021C02C 788 | lbl_8021C02C: 789 | .skip 0x4 790 | .global lbl_8021C030 791 | lbl_8021C030: 792 | .skip 0x4 793 | .global lbl_8021C034 794 | lbl_8021C034: 795 | .skip 0x4 796 | .global lbl_8021C038 797 | lbl_8021C038: 798 | .skip 0x8 799 | .global lbl_8021C040 800 | lbl_8021C040: 801 | .skip 0x4 802 | .global lbl_8021C044 803 | lbl_8021C044: 804 | .skip 0x4 805 | .global lbl_8021C048 806 | lbl_8021C048: 807 | .skip 0x4 808 | .global lbl_8021C04C 809 | lbl_8021C04C: 810 | .skip 0x4 811 | .global lbl_8021C050 812 | lbl_8021C050: 813 | .skip 0x4 814 | .global lbl_8021C054 815 | lbl_8021C054: 816 | .skip 0x4 817 | .global lbl_8021C058 818 | lbl_8021C058: 819 | .skip 0x4 820 | .global lbl_8021C05C 821 | lbl_8021C05C: 822 | .skip 0x4 823 | .global lbl_8021C060 824 | lbl_8021C060: 825 | .skip 0x4 826 | .global lbl_8021C064 827 | lbl_8021C064: 828 | .skip 0x4 829 | .global lbl_8021C068 830 | lbl_8021C068: 831 | .skip 0x8 832 | .global lbl_8021C070 833 | lbl_8021C070: 834 | .skip 0x4 835 | .global lbl_8021C074 836 | lbl_8021C074: 837 | .skip 0x4 838 | .global lbl_8021C078 839 | lbl_8021C078: 840 | .skip 0x4 841 | .global lbl_8021C07C 842 | lbl_8021C07C: 843 | .skip 0xC 844 | .global lbl_8021C088 845 | lbl_8021C088: 846 | .skip 0x8 847 | .global lbl_8021C090 848 | lbl_8021C090: 849 | .skip 0x4 850 | .global lbl_8021C094 851 | lbl_8021C094: 852 | .skip 0x4 853 | .global lbl_8021C098 854 | lbl_8021C098: 855 | .skip 0x4 856 | .global lbl_8021C09C 857 | lbl_8021C09C: 858 | .skip 0x4 859 | .global lbl_8021C0A0 860 | lbl_8021C0A0: 861 | .skip 0x8 862 | .global lbl_8021C0A8 863 | lbl_8021C0A8: 864 | .skip 0x8 865 | .global lbl_8021C0B0 866 | lbl_8021C0B0: 867 | .skip 0x8 868 | .global lbl_8021C0B8 869 | lbl_8021C0B8: 870 | .skip 0x8 871 | .global lbl_8021C0C0 872 | lbl_8021C0C0: 873 | .skip 0x8 874 | .global lbl_8021C0C8 875 | lbl_8021C0C8: 876 | .skip 0x8 877 | .global lbl_8021C0D0 878 | lbl_8021C0D0: 879 | .skip 0x4 880 | .global lbl_8021C0D4 881 | lbl_8021C0D4: 882 | .skip 0x4 883 | .global lbl_8021C0D8 884 | lbl_8021C0D8: 885 | .skip 0x4 886 | .global lbl_8021C0DC 887 | lbl_8021C0DC: 888 | .skip 0x4 889 | .global lbl_8021C0E0 890 | lbl_8021C0E0: 891 | .skip 0x4 892 | .global lbl_8021C0E4 893 | lbl_8021C0E4: 894 | .skip 0x4 895 | .global lbl_8021C0E8 896 | lbl_8021C0E8: 897 | .skip 0x8 898 | .global lbl_8021C0F0 899 | lbl_8021C0F0: 900 | .skip 0x8 901 | .global lbl_8021C0F8 902 | lbl_8021C0F8: 903 | .skip 0x8 904 | .global lbl_8021C100 905 | lbl_8021C100: 906 | .skip 0x8 907 | .global lbl_8021C108 908 | lbl_8021C108: 909 | .skip 0x8 910 | .global lbl_8021C110 911 | lbl_8021C110: 912 | .skip 0x4 913 | .global lbl_8021C114 914 | lbl_8021C114: 915 | .skip 0x4 916 | .global lbl_8021C118 917 | lbl_8021C118: 918 | .skip 0x4 919 | .global lbl_8021C11C 920 | lbl_8021C11C: 921 | .skip 0x4 922 | .global lbl_8021C120 923 | lbl_8021C120: 924 | .skip 0x4 925 | .global lbl_8021C124 926 | lbl_8021C124: 927 | .skip 0x4 928 | .global lbl_8021C128 929 | lbl_8021C128: 930 | .skip 0x4 931 | .global lbl_8021C12C 932 | lbl_8021C12C: 933 | .skip 0x4 934 | .global lbl_8021C130 935 | lbl_8021C130: 936 | .skip 0x4 937 | .global lbl_8021C134 938 | lbl_8021C134: 939 | .skip 0x4 940 | .global lbl_8021C138 941 | lbl_8021C138: 942 | .skip 0x4 943 | .global lbl_8021C13C 944 | lbl_8021C13C: 945 | .skip 0x4 946 | .global lbl_8021C140 947 | lbl_8021C140: 948 | .skip 0x4 949 | .global lbl_8021C144 950 | lbl_8021C144: 951 | .skip 0x4 952 | .global lbl_8021C148 953 | lbl_8021C148: 954 | .skip 0x4 955 | .global lbl_8021C14C 956 | lbl_8021C14C: 957 | .skip 0x4 958 | .global lbl_8021C150 959 | lbl_8021C150: 960 | .skip 0x4 961 | .global lbl_8021C154 962 | lbl_8021C154: 963 | .skip 0x4 964 | .global lbl_8021C158 965 | lbl_8021C158: 966 | .skip 0x8 967 | .global lbl_8021C160 968 | lbl_8021C160: 969 | .skip 0x4 970 | .global lbl_8021C164 971 | lbl_8021C164: 972 | .skip 0x4 973 | .global lbl_8021C168 974 | lbl_8021C168: 975 | .skip 0x4 976 | .global lbl_8021C16C 977 | lbl_8021C16C: 978 | .skip 0x4 979 | .global lbl_8021C170 980 | lbl_8021C170: 981 | .skip 0x4 982 | .global lbl_8021C174 983 | lbl_8021C174: 984 | .skip 0x4 985 | .global lbl_8021C178 986 | lbl_8021C178: 987 | .skip 0x4 988 | .global lbl_8021C17C 989 | lbl_8021C17C: 990 | .skip 0x4 991 | .global lbl_8021C180 992 | lbl_8021C180: 993 | .skip 0x4 994 | .global lbl_8021C184 995 | lbl_8021C184: 996 | .skip 0x4 997 | .global lbl_8021C188 998 | lbl_8021C188: 999 | .skip 0x8 1000 | .global lbl_8021C190 1001 | lbl_8021C190: 1002 | .skip 0x4 1003 | .global lbl_8021C194 1004 | lbl_8021C194: 1005 | .skip 0x4 1006 | .global lbl_8021C198 1007 | lbl_8021C198: 1008 | .skip 0x4 1009 | .global lbl_8021C19C 1010 | lbl_8021C19C: 1011 | .skip 0x4 1012 | .global lbl_8021C1A0 1013 | lbl_8021C1A0: 1014 | .skip 0x4 1015 | .global lbl_8021C1A4 1016 | lbl_8021C1A4: 1017 | .skip 0x4 1018 | .global lbl_8021C1A8 1019 | lbl_8021C1A8: 1020 | .skip 0x4 1021 | .global lbl_8021C1AC 1022 | lbl_8021C1AC: 1023 | .skip 0x4 1024 | .global lbl_8021C1B0 1025 | lbl_8021C1B0: 1026 | .skip 0x4 1027 | .global lbl_8021C1B4 1028 | lbl_8021C1B4: 1029 | .skip 0x4 1030 | .global lbl_8021C1B8 1031 | lbl_8021C1B8: 1032 | .skip 0x4 1033 | .global lbl_8021C1BC 1034 | lbl_8021C1BC: 1035 | .skip 0x4 1036 | .global lbl_8021C1C0 1037 | lbl_8021C1C0: 1038 | .skip 0x4 1039 | .global lbl_8021C1C4 1040 | lbl_8021C1C4: 1041 | .skip 0x4 1042 | .global lbl_8021C1C8 1043 | lbl_8021C1C8: 1044 | .skip 0x8 1045 | .global lbl_8021C1D0 1046 | lbl_8021C1D0: 1047 | .skip 0x8 1048 | .global lbl_8021C1D8 1049 | lbl_8021C1D8: 1050 | .skip 0x4 1051 | .global lbl_8021C1DC 1052 | lbl_8021C1DC: 1053 | .skip 0x4 1054 | .global lbl_8021C1E0 1055 | lbl_8021C1E0: 1056 | .skip 0x8 1057 | .global lbl_8021C1E8 1058 | lbl_8021C1E8: 1059 | .skip 0x4 1060 | .global lbl_8021C1EC 1061 | lbl_8021C1EC: 1062 | .skip 0x4 1063 | .global lbl_8021C1F0 1064 | lbl_8021C1F0: 1065 | .skip 0x4 1066 | .global lbl_8021C1F4 1067 | lbl_8021C1F4: 1068 | .skip 0x4 1069 | .global lbl_8021C1F8 1070 | lbl_8021C1F8: 1071 | .skip 0x4 1072 | .global lbl_8021C1FC 1073 | lbl_8021C1FC: 1074 | .skip 0x4 1075 | .global lbl_8021C200 1076 | lbl_8021C200: 1077 | .skip 0x4 1078 | .global lbl_8021C204 1079 | lbl_8021C204: 1080 | .skip 0x4 1081 | .global lbl_8021C208 1082 | lbl_8021C208: 1083 | .skip 0x4 1084 | .global lbl_8021C20C 1085 | lbl_8021C20C: 1086 | .skip 0x4 1087 | .global lbl_8021C210 1088 | lbl_8021C210: 1089 | .skip 0x4 1090 | .global lbl_8021C214 1091 | lbl_8021C214: 1092 | .skip 0x4 1093 | .global lbl_8021C218 1094 | lbl_8021C218: 1095 | .skip 0x4 1096 | .global lbl_8021C21C 1097 | lbl_8021C21C: 1098 | .skip 0x4 1099 | .global lbl_8021C220 1100 | lbl_8021C220: 1101 | .skip 0x4 1102 | .global lbl_8021C224 1103 | lbl_8021C224: 1104 | .skip 0x4 1105 | .global lbl_8021C228 1106 | lbl_8021C228: 1107 | .skip 0x4 1108 | .global lbl_8021C22C 1109 | lbl_8021C22C: 1110 | .skip 0x4 1111 | .global lbl_8021C230 1112 | lbl_8021C230: 1113 | .skip 0x4 1114 | .global lbl_8021C234 1115 | lbl_8021C234: 1116 | .skip 0x4 1117 | .global lbl_8021C238 1118 | lbl_8021C238: 1119 | .skip 0x4 1120 | .global lbl_8021C23C 1121 | lbl_8021C23C: 1122 | .skip 0x4 1123 | .global lbl_8021C240 1124 | lbl_8021C240: 1125 | .skip 0x4 1126 | .global lbl_8021C244 1127 | lbl_8021C244: 1128 | .skip 0x4 1129 | .global lbl_8021C248 1130 | lbl_8021C248: 1131 | .skip 0x4 1132 | .global lbl_8021C24C 1133 | lbl_8021C24C: 1134 | .skip 0x4 1135 | .global lbl_8021C250 1136 | lbl_8021C250: 1137 | .skip 0x4 1138 | .global lbl_8021C254 1139 | lbl_8021C254: 1140 | .skip 0x4 1141 | .global lbl_8021C258 1142 | lbl_8021C258: 1143 | .skip 0x4 1144 | .global lbl_8021C25C 1145 | lbl_8021C25C: 1146 | .skip 0x4 1147 | .global lbl_8021C260 1148 | lbl_8021C260: 1149 | .skip 0x4 1150 | .global lbl_8021C264 1151 | lbl_8021C264: 1152 | .skip 0x4 1153 | .global lbl_8021C268 1154 | lbl_8021C268: 1155 | .skip 0x4 1156 | .global lbl_8021C26C 1157 | lbl_8021C26C: 1158 | .skip 0x4 1159 | .global lbl_8021C270 1160 | lbl_8021C270: 1161 | .skip 0x4 1162 | .global lbl_8021C274 1163 | lbl_8021C274: 1164 | .skip 0x4 1165 | .global lbl_8021C278 1166 | lbl_8021C278: 1167 | .skip 0x4 1168 | .global lbl_8021C27C 1169 | lbl_8021C27C: 1170 | .skip 0x4 1171 | .global lbl_8021C280 1172 | lbl_8021C280: 1173 | .skip 0x4 1174 | .global lbl_8021C284 1175 | lbl_8021C284: 1176 | .skip 0x4 1177 | .global lbl_8021C288 1178 | lbl_8021C288: 1179 | .skip 0x8 1180 | .global lbl_8021C290 1181 | lbl_8021C290: 1182 | .skip 0x8 1183 | .global lbl_8021C298 1184 | lbl_8021C298: 1185 | .skip 0x4 1186 | .global lbl_8021C29C 1187 | lbl_8021C29C: 1188 | .skip 0x4 1189 | .global lbl_8021C2A0 1190 | lbl_8021C2A0: 1191 | .skip 0x4 1192 | .global lbl_8021C2A4 1193 | lbl_8021C2A4: 1194 | .skip 0x4 1195 | .global lbl_8021C2A8 1196 | lbl_8021C2A8: 1197 | .skip 0x4 1198 | .global lbl_8021C2AC 1199 | lbl_8021C2AC: 1200 | .skip 0x4 1201 | .global lbl_8021C2B0 1202 | lbl_8021C2B0: 1203 | .skip 0x4 1204 | .global lbl_8021C2B4 1205 | lbl_8021C2B4: 1206 | .skip 0x4 1207 | .global lbl_8021C2B8 1208 | lbl_8021C2B8: 1209 | .skip 0x4 1210 | .global lbl_8021C2BC 1211 | lbl_8021C2BC: 1212 | .skip 0x4 1213 | .global lbl_8021C2C0 1214 | lbl_8021C2C0: 1215 | .skip 0x8 1216 | .global lbl_8021C2C8 1217 | lbl_8021C2C8: 1218 | .skip 0x4 1219 | .global lbl_8021C2CC 1220 | lbl_8021C2CC: 1221 | .skip 0x4 1222 | .global lbl_8021C2D0 1223 | lbl_8021C2D0: 1224 | .skip 0x4 1225 | .global lbl_8021C2D4 1226 | lbl_8021C2D4: 1227 | .skip 0x4 1228 | .global lbl_8021C2D8 1229 | lbl_8021C2D8: 1230 | .skip 0x8 1231 | .global lbl_8021C2E0 1232 | lbl_8021C2E0: 1233 | .skip 0x8 1234 | .global lbl_8021C2E8 1235 | lbl_8021C2E8: 1236 | .skip 0x4 1237 | .global lbl_8021C2EC 1238 | lbl_8021C2EC: 1239 | .skip 0x4 1240 | .global lbl_8021C2F0 1241 | lbl_8021C2F0: 1242 | .skip 0x4 1243 | .global lbl_8021C2F4 1244 | lbl_8021C2F4: 1245 | .skip 0x2 1246 | .global lbl_8021C2F6 1247 | lbl_8021C2F6: 1248 | .skip 0x2 1249 | .global lbl_8021C2F8 1250 | lbl_8021C2F8: 1251 | .skip 0x4 1252 | .global lbl_8021C2FC 1253 | lbl_8021C2FC: 1254 | .skip 0x4 1255 | .global lbl_8021C300 1256 | lbl_8021C300: 1257 | .skip 0x4 1258 | .global lbl_8021C304 1259 | lbl_8021C304: 1260 | .skip 0x4 1261 | .global lbl_8021C308 1262 | lbl_8021C308: 1263 | .skip 0x4 1264 | .global lbl_8021C30C 1265 | lbl_8021C30C: 1266 | .skip 0x4 1267 | .global lbl_8021C310 1268 | lbl_8021C310: 1269 | .skip 0x4 1270 | .global lbl_8021C314 1271 | lbl_8021C314: 1272 | .skip 0x4 1273 | .global lbl_8021C318 1274 | lbl_8021C318: 1275 | .skip 0x18 1276 | -------------------------------------------------------------------------------- /asm/sbss2.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .sbss2, "", @nobits # 0x80125E00 - 0x8021CFA4 4 | 5 | .balign 8 6 | 7 | .global lbl_8021CFA0 8 | lbl_8021CFA0: 9 | .skip 0x4 10 | -------------------------------------------------------------------------------- /asm/sdata.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .sdata, "wa" # 0x8021B8C0 - 0x8021BB40 4 | 5 | .balign 8 6 | 7 | .global lbl_8021B8C0 8 | lbl_8021B8C0: 9 | .incbin "baserom.dol", 0x122DE0, 0x4 10 | .global lbl_8021B8C4 11 | lbl_8021B8C4: 12 | .incbin "baserom.dol", 0x122DE4, 0x4 13 | .global lbl_8021B8C8 14 | lbl_8021B8C8: 15 | .incbin "baserom.dol", 0x122DE8, 0x4 16 | .global lbl_8021B8CC 17 | lbl_8021B8CC: 18 | .incbin "baserom.dol", 0x122DEC, 0x4 19 | .global lbl_8021B8D0 20 | lbl_8021B8D0: 21 | .incbin "baserom.dol", 0x122DF0, 0x4 22 | .global lbl_8021B8D4 23 | lbl_8021B8D4: 24 | .incbin "baserom.dol", 0x122DF4, 0x4 25 | .global lbl_8021B8D8 26 | lbl_8021B8D8: 27 | .incbin "baserom.dol", 0x122DF8, 0x4 28 | .global lbl_8021B8DC 29 | lbl_8021B8DC: 30 | .incbin "baserom.dol", 0x122DFC, 0x4 31 | .global lbl_8021B8E0 32 | lbl_8021B8E0: 33 | .incbin "baserom.dol", 0x122E00, 0x4 34 | .global lbl_8021B8E4 35 | lbl_8021B8E4: 36 | .incbin "baserom.dol", 0x122E04, 0x4 37 | .global lbl_8021B8E8 38 | lbl_8021B8E8: 39 | .incbin "baserom.dol", 0x122E08, 0x4 40 | .global lbl_8021B8EC 41 | lbl_8021B8EC: 42 | .incbin "baserom.dol", 0x122E0C, 0x4 43 | .global lbl_8021B8F0 44 | lbl_8021B8F0: 45 | .incbin "baserom.dol", 0x122E10, 0x4 46 | .global lbl_8021B8F4 47 | lbl_8021B8F4: 48 | .incbin "baserom.dol", 0x122E14, 0x8 49 | .global lbl_8021B8FC 50 | lbl_8021B8FC: 51 | .incbin "baserom.dol", 0x122E1C, 0xC 52 | .global lbl_8021B908 53 | lbl_8021B908: 54 | .incbin "baserom.dol", 0x122E28, 0x10 55 | .global lbl_8021B918 56 | lbl_8021B918: 57 | .4byte lbl_80117C98 58 | .global lbl_8021B91C 59 | lbl_8021B91C: 60 | .incbin "baserom.dol", 0x122E3C, 0x8 61 | .global lbl_8021B924 62 | lbl_8021B924: 63 | .incbin "baserom.dol", 0x122E44, 0x4 64 | .global lbl_8021B928 65 | lbl_8021B928: 66 | .incbin "baserom.dol", 0x122E48, 0x8 67 | .global lbl_8021B930 68 | lbl_8021B930: 69 | .incbin "baserom.dol", 0x122E50, 0x8 70 | .global lbl_8021B938 71 | lbl_8021B938: 72 | .incbin "baserom.dol", 0x122E58, 0x4 73 | .global lbl_8021B93C 74 | lbl_8021B93C: 75 | .incbin "baserom.dol", 0x122E5C, 0x4 76 | .global lbl_8021B940 77 | lbl_8021B940: 78 | .incbin "baserom.dol", 0x122E60, 0x8 79 | .global lbl_8021B948 80 | lbl_8021B948: 81 | .incbin "baserom.dol", 0x122E68, 0x8 82 | .global lbl_8021B950 83 | lbl_8021B950: 84 | .4byte lbl_8000FF7C 85 | .global lbl_8021B954 86 | lbl_8021B954: 87 | .incbin "baserom.dol", 0x122E74, 0x4 88 | .global lbl_8021B958 89 | lbl_8021B958: 90 | .incbin "baserom.dol", 0x122E78, 0x8 91 | .global lbl_8021B960 92 | lbl_8021B960: 93 | .incbin "baserom.dol", 0x122E80, 0x8 94 | .global lbl_8021B968 95 | lbl_8021B968: 96 | .4byte lbl_80119F74 + 0x34 97 | .global lbl_8021B96C 98 | lbl_8021B96C: 99 | .incbin "baserom.dol", 0x122E8C, 0x4 100 | .global lbl_8021B970 101 | lbl_8021B970: 102 | .4byte lbl_800137A4 103 | .global lbl_8021B974 104 | lbl_8021B974: 105 | .incbin "baserom.dol", 0x122E94, 0x8 106 | .global lbl_8021B97C 107 | lbl_8021B97C: 108 | .incbin "baserom.dol", 0x122E9C, 0x4 109 | .global lbl_8021B980 110 | lbl_8021B980: 111 | .incbin "baserom.dol", 0x122EA0, 0x4 112 | .global lbl_8021B984 113 | lbl_8021B984: 114 | .incbin "baserom.dol", 0x122EA4, 0x4 115 | .global lbl_8021B988 116 | lbl_8021B988: 117 | .incbin "baserom.dol", 0x122EA8, 0x8 118 | .global lbl_8021B990 119 | lbl_8021B990: 120 | .4byte lbl_8011A1E8 121 | .global lbl_8021B994 122 | lbl_8021B994: 123 | .incbin "baserom.dol", 0x122EB4, 0xC 124 | .global lbl_8021B9A0 125 | lbl_8021B9A0: 126 | .4byte lbl_8011A5AC + 0x24 127 | .global lbl_8021B9A4 128 | lbl_8021B9A4: 129 | .incbin "baserom.dol", 0x122EC4, 0x4 130 | .global lbl_8021B9A8 131 | lbl_8021B9A8: 132 | .incbin "baserom.dol", 0x122EC8, 0x4 133 | .global lbl_8021B9AC 134 | lbl_8021B9AC: 135 | .incbin "baserom.dol", 0x122ECC, 0x4 136 | .global lbl_8021B9B0 137 | lbl_8021B9B0: 138 | .incbin "baserom.dol", 0x122ED0, 0x4 139 | .global lbl_8021B9B4 140 | lbl_8021B9B4: 141 | .4byte lbl_80019870 142 | .global lbl_8021B9B8 143 | lbl_8021B9B8: 144 | .incbin "baserom.dol", 0x122ED8, 0x4 145 | .global lbl_8021B9BC 146 | lbl_8021B9BC: 147 | .incbin "baserom.dol", 0x122EDC, 0x4 148 | .global lbl_8021B9C0 149 | lbl_8021B9C0: 150 | .4byte lbl_8011A618 + 0x10 151 | .skip 0x4 152 | .global lbl_8021B9C8 153 | lbl_8021B9C8: 154 | .4byte lbl_8011A618 + 0x58 155 | .skip 0x4 156 | .global lbl_8021B9D0 157 | lbl_8021B9D0: 158 | .4byte lbl_8011A618 + 0xA0 159 | .skip 0x4 160 | .global lbl_8021B9D8 161 | lbl_8021B9D8: 162 | .4byte lbl_8011A618 + 0xE8 163 | .skip 0x4 164 | .global lbl_8021B9E0 165 | lbl_8021B9E0: 166 | .incbin "baserom.dol", 0x122F00, 0x8 167 | .global lbl_8021B9E8 168 | lbl_8021B9E8: 169 | .4byte lbl_80022108 170 | .global lbl_8021B9EC 171 | lbl_8021B9EC: 172 | .4byte lbl_80022130 173 | .global lbl_8021B9F0 174 | lbl_8021B9F0: 175 | .4byte lbl_801208D0 176 | .skip 0x4 177 | .global lbl_8021B9F8 178 | lbl_8021B9F8: 179 | .4byte lbl_80120950 + 0x140 180 | .skip 0x4 181 | .global lbl_8021BA00 182 | lbl_8021BA00: 183 | .incbin "baserom.dol", 0x122F20, 0x8 184 | .global lbl_8021BA08 185 | lbl_8021BA08: 186 | .incbin "baserom.dol", 0x122F28, 0x2 187 | .global lbl_8021BA0A 188 | lbl_8021BA0A: 189 | .incbin "baserom.dol", 0x122F2A, 0x6 190 | .global lbl_8021BA10 191 | lbl_8021BA10: 192 | .4byte lbl_80120CA0 193 | .skip 0x4 194 | .global lbl_8021BA18 195 | lbl_8021BA18: 196 | .incbin "baserom.dol", 0x122F38, 0x4 197 | .global lbl_8021BA1C 198 | lbl_8021BA1C: 199 | .incbin "baserom.dol", 0x122F3C, 0x4 200 | .global lbl_8021BA20 201 | lbl_8021BA20: 202 | .incbin "baserom.dol", 0x122F40, 0x8 203 | .global lbl_8021BA28 204 | lbl_8021BA28: 205 | .incbin "baserom.dol", 0x122F48, 0x8 206 | .global lbl_8021BA30 207 | lbl_8021BA30: 208 | .incbin "baserom.dol", 0x122F50, 0x8 209 | .global lbl_8021BA38 210 | lbl_8021BA38: 211 | .incbin "baserom.dol", 0x122F58, 0x8 212 | .global lbl_8021BA40 213 | lbl_8021BA40: 214 | .incbin "baserom.dol", 0x122F60, 0x8 215 | .global lbl_8021BA48 216 | lbl_8021BA48: 217 | .incbin "baserom.dol", 0x122F68, 0x8 218 | .global lbl_8021BA50 219 | lbl_8021BA50: 220 | .incbin "baserom.dol", 0x122F70, 0x8 221 | .global lbl_8021BA58 222 | lbl_8021BA58: 223 | .incbin "baserom.dol", 0x122F78, 0x8 224 | .global lbl_8021BA60 225 | lbl_8021BA60: 226 | .incbin "baserom.dol", 0x122F80, 0x8 227 | .global lbl_8021BA68 228 | lbl_8021BA68: 229 | .incbin "baserom.dol", 0x122F88, 0x8 230 | .global lbl_8021BA70 231 | lbl_8021BA70: 232 | .incbin "baserom.dol", 0x122F90, 0x8 233 | .global lbl_8021BA78 234 | lbl_8021BA78: 235 | .incbin "baserom.dol", 0x122F98, 0x8 236 | .global lbl_8021BA80 237 | lbl_8021BA80: 238 | .incbin "baserom.dol", 0x122FA0, 0x4 239 | .global lbl_8021BA84 240 | lbl_8021BA84: 241 | .incbin "baserom.dol", 0x122FA4, 0x4 242 | .global lbl_8021BA88 243 | lbl_8021BA88: 244 | .incbin "baserom.dol", 0x122FA8, 0x8 245 | .global lbl_8021BA90 246 | lbl_8021BA90: 247 | .incbin "baserom.dol", 0x122FB0, 0x8 248 | .global lbl_8021BA98 249 | lbl_8021BA98: 250 | .incbin "baserom.dol", 0x122FB8, 0x8 251 | .global lbl_8021BAA0 252 | lbl_8021BAA0: 253 | .incbin "baserom.dol", 0x122FC0, 0x8 254 | .global lbl_8021BAA8 255 | lbl_8021BAA8: 256 | .incbin "baserom.dol", 0x122FC8, 0x4 257 | .global lbl_8021BAAC 258 | lbl_8021BAAC: 259 | .incbin "baserom.dol", 0x122FCC, 0x4 260 | .global lbl_8021BAB0 261 | lbl_8021BAB0: 262 | .4byte lbl_80121E64 + 0x44 263 | .skip 0x4 264 | .global lbl_8021BAB8 265 | lbl_8021BAB8: 266 | .4byte lbl_80121FB8 267 | .skip 0x4 268 | .global lbl_8021BAC0 269 | lbl_8021BAC0: 270 | .incbin "baserom.dol", 0x122FE0, 0x8 271 | .global lbl_8021BAC8 272 | lbl_8021BAC8: 273 | .incbin "baserom.dol", 0x122FE8, 0x8 274 | .global lbl_8021BAD0 275 | lbl_8021BAD0: 276 | .incbin "baserom.dol", 0x122FF0, 0x4 277 | .global lbl_8021BAD4 278 | lbl_8021BAD4: 279 | .incbin "baserom.dol", 0x122FF4, 0x4 280 | .global lbl_8021BAD8 281 | lbl_8021BAD8: 282 | .incbin "baserom.dol", 0x122FF8, 0x4 283 | .global lbl_8021BADC 284 | lbl_8021BADC: 285 | .4byte lbl_8021CB8C + 0x4 286 | .global lbl_8021BAE0 287 | lbl_8021BAE0: 288 | .incbin "baserom.dol", 0x123000, 0x4 289 | .global lbl_8021BAE4 290 | lbl_8021BAE4: 291 | .incbin "baserom.dol", 0x123004, 0x4 292 | .global lbl_8021BAE8 293 | lbl_8021BAE8: 294 | .incbin "baserom.dol", 0x123008, 0x4 295 | .global lbl_8021BAEC 296 | lbl_8021BAEC: 297 | .incbin "baserom.dol", 0x12300C, 0x4 298 | .global lbl_8021BAF0 299 | lbl_8021BAF0: 300 | .incbin "baserom.dol", 0x123010, 0x8 301 | .global lbl_8021BAF8 302 | lbl_8021BAF8: 303 | .incbin "baserom.dol", 0x123018, 0x8 304 | .global lbl_8021BB00 305 | lbl_8021BB00: 306 | .incbin "baserom.dol", 0x123020, 0x8 307 | .global lbl_8021BB08 308 | lbl_8021BB08: 309 | .incbin "baserom.dol", 0x123028, 0x8 310 | .global lbl_8021BB10 311 | lbl_8021BB10: 312 | .incbin "baserom.dol", 0x123030, 0x8 313 | .global lbl_8021BB18 314 | lbl_8021BB18: 315 | .incbin "baserom.dol", 0x123038, 0x8 316 | .global lbl_8021BB20 317 | lbl_8021BB20: 318 | .incbin "baserom.dol", 0x123040, 0x8 319 | .global lbl_8021BB28 320 | lbl_8021BB28: 321 | .incbin "baserom.dol", 0x123048, 0x4 322 | .global lbl_8021BB2C 323 | lbl_8021BB2C: 324 | .incbin "baserom.dol", 0x12304C, 0x4 325 | .global lbl_8021BB30 326 | lbl_8021BB30: 327 | .incbin "baserom.dol", 0x123050, 0x8 328 | .global lbl_8021BB38 329 | lbl_8021BB38: 330 | .incbin "baserom.dol", 0x123058, 0x4 331 | -------------------------------------------------------------------------------- /asm/sdata2.s: -------------------------------------------------------------------------------- 1 | .include "macros.inc" 2 | 3 | .section .sdata2, "wa" # 0x8021C340 - 0x8021CFA0 4 | 5 | .balign 8 6 | 7 | .global lbl_8021C340 8 | lbl_8021C340: 9 | .incbin "baserom.dol", 0x123060, 0x8 10 | .global lbl_8021C348 11 | lbl_8021C348: 12 | .incbin "baserom.dol", 0x123068, 0x4 13 | .global lbl_8021C34C 14 | lbl_8021C34C: 15 | .incbin "baserom.dol", 0x12306C, 0x4 16 | .global lbl_8021C350 17 | lbl_8021C350: 18 | .incbin "baserom.dol", 0x123070, 0x4 19 | .global lbl_8021C354 20 | lbl_8021C354: 21 | .incbin "baserom.dol", 0x123074, 0x4 22 | .global lbl_8021C358 23 | lbl_8021C358: 24 | .incbin "baserom.dol", 0x123078, 0x8 25 | .global lbl_8021C360 26 | lbl_8021C360: 27 | .incbin "baserom.dol", 0x123080, 0x8 28 | .global lbl_8021C368 29 | lbl_8021C368: 30 | .incbin "baserom.dol", 0x123088, 0x8 31 | .global lbl_8021C370 32 | lbl_8021C370: 33 | .incbin "baserom.dol", 0x123090, 0x4 34 | .global lbl_8021C374 35 | lbl_8021C374: 36 | .incbin "baserom.dol", 0x123094, 0x4 37 | .global lbl_8021C378 38 | lbl_8021C378: 39 | .incbin "baserom.dol", 0x123098, 0x4 40 | .global lbl_8021C37C 41 | lbl_8021C37C: 42 | .incbin "baserom.dol", 0x12309C, 0x4 43 | .global lbl_8021C380 44 | lbl_8021C380: 45 | .incbin "baserom.dol", 0x1230A0, 0x8 46 | .global lbl_8021C388 47 | lbl_8021C388: 48 | .incbin "baserom.dol", 0x1230A8, 0x8 49 | .global lbl_8021C390 50 | lbl_8021C390: 51 | .incbin "baserom.dol", 0x1230B0, 0x8 52 | .global lbl_8021C398 53 | lbl_8021C398: 54 | .incbin "baserom.dol", 0x1230B8, 0x4 55 | .global lbl_8021C39C 56 | lbl_8021C39C: 57 | .incbin "baserom.dol", 0x1230BC, 0x4 58 | .global lbl_8021C3A0 59 | lbl_8021C3A0: 60 | .incbin "baserom.dol", 0x1230C0, 0x8 61 | .global lbl_8021C3A8 62 | lbl_8021C3A8: 63 | .incbin "baserom.dol", 0x1230C8, 0x8 64 | .global lbl_8021C3B0 65 | lbl_8021C3B0: 66 | .incbin "baserom.dol", 0x1230D0, 0x8 67 | .global lbl_8021C3B8 68 | lbl_8021C3B8: 69 | .incbin "baserom.dol", 0x1230D8, 0x8 70 | .global lbl_8021C3C0 71 | lbl_8021C3C0: 72 | .incbin "baserom.dol", 0x1230E0, 0x4 73 | .global lbl_8021C3C4 74 | lbl_8021C3C4: 75 | .incbin "baserom.dol", 0x1230E4, 0x4 76 | .global lbl_8021C3C8 77 | lbl_8021C3C8: 78 | .incbin "baserom.dol", 0x1230E8, 0x4 79 | .global lbl_8021C3CC 80 | lbl_8021C3CC: 81 | .incbin "baserom.dol", 0x1230EC, 0x4 82 | .global lbl_8021C3D0 83 | lbl_8021C3D0: 84 | .incbin "baserom.dol", 0x1230F0, 0x4 85 | .global lbl_8021C3D4 86 | lbl_8021C3D4: 87 | .incbin "baserom.dol", 0x1230F4, 0x4 88 | .global lbl_8021C3D8 89 | lbl_8021C3D8: 90 | .incbin "baserom.dol", 0x1230F8, 0x8 91 | .global lbl_8021C3E0 92 | lbl_8021C3E0: 93 | .incbin "baserom.dol", 0x123100, 0x4 94 | .global lbl_8021C3E4 95 | lbl_8021C3E4: 96 | .incbin "baserom.dol", 0x123104, 0x4 97 | .global lbl_8021C3E8 98 | lbl_8021C3E8: 99 | .incbin "baserom.dol", 0x123108, 0x4 100 | .global lbl_8021C3EC 101 | lbl_8021C3EC: 102 | .incbin "baserom.dol", 0x12310C, 0x4 103 | .global lbl_8021C3F0 104 | lbl_8021C3F0: 105 | .incbin "baserom.dol", 0x123110, 0x4 106 | .global lbl_8021C3F4 107 | lbl_8021C3F4: 108 | .incbin "baserom.dol", 0x123114, 0x4 109 | .global lbl_8021C3F8 110 | lbl_8021C3F8: 111 | .incbin "baserom.dol", 0x123118, 0x4 112 | .global lbl_8021C3FC 113 | lbl_8021C3FC: 114 | .incbin "baserom.dol", 0x12311C, 0x4 115 | .global lbl_8021C400 116 | lbl_8021C400: 117 | .incbin "baserom.dol", 0x123120, 0x8 118 | .global lbl_8021C408 119 | lbl_8021C408: 120 | .incbin "baserom.dol", 0x123128, 0x8 121 | .global lbl_8021C410 122 | lbl_8021C410: 123 | .incbin "baserom.dol", 0x123130, 0x4 124 | .global lbl_8021C414 125 | lbl_8021C414: 126 | .incbin "baserom.dol", 0x123134, 0x4 127 | .global lbl_8021C418 128 | lbl_8021C418: 129 | .incbin "baserom.dol", 0x123138, 0x4 130 | .global lbl_8021C41C 131 | lbl_8021C41C: 132 | .incbin "baserom.dol", 0x12313C, 0x4 133 | .global lbl_8021C420 134 | lbl_8021C420: 135 | .incbin "baserom.dol", 0x123140, 0x4 136 | .global lbl_8021C424 137 | lbl_8021C424: 138 | .incbin "baserom.dol", 0x123144, 0x4 139 | .global lbl_8021C428 140 | lbl_8021C428: 141 | .incbin "baserom.dol", 0x123148, 0x4 142 | .global lbl_8021C42C 143 | lbl_8021C42C: 144 | .incbin "baserom.dol", 0x12314C, 0x4 145 | .global lbl_8021C430 146 | lbl_8021C430: 147 | .incbin "baserom.dol", 0x123150, 0x4 148 | .global lbl_8021C434 149 | lbl_8021C434: 150 | .incbin "baserom.dol", 0x123154, 0x4 151 | .global lbl_8021C438 152 | lbl_8021C438: 153 | .incbin "baserom.dol", 0x123158, 0x4 154 | .global lbl_8021C43C 155 | lbl_8021C43C: 156 | .incbin "baserom.dol", 0x12315C, 0x4 157 | .global lbl_8021C440 158 | lbl_8021C440: 159 | .incbin "baserom.dol", 0x123160, 0x8 160 | .global lbl_8021C448 161 | lbl_8021C448: 162 | .incbin "baserom.dol", 0x123168, 0x4 163 | .global lbl_8021C44C 164 | lbl_8021C44C: 165 | .incbin "baserom.dol", 0x12316C, 0x4 166 | .global lbl_8021C450 167 | lbl_8021C450: 168 | .incbin "baserom.dol", 0x123170, 0x8 169 | .global lbl_8021C458 170 | lbl_8021C458: 171 | .incbin "baserom.dol", 0x123178, 0x8 172 | .global lbl_8021C460 173 | lbl_8021C460: 174 | .incbin "baserom.dol", 0x123180, 0x4 175 | .global lbl_8021C464 176 | lbl_8021C464: 177 | .incbin "baserom.dol", 0x123184, 0x4 178 | .global lbl_8021C468 179 | lbl_8021C468: 180 | .incbin "baserom.dol", 0x123188, 0x4 181 | .global lbl_8021C46C 182 | lbl_8021C46C: 183 | .incbin "baserom.dol", 0x12318C, 0x4 184 | .global lbl_8021C470 185 | lbl_8021C470: 186 | .incbin "baserom.dol", 0x123190, 0x4 187 | .global lbl_8021C474 188 | lbl_8021C474: 189 | .incbin "baserom.dol", 0x123194, 0x4 190 | .global lbl_8021C478 191 | lbl_8021C478: 192 | .incbin "baserom.dol", 0x123198, 0x4 193 | .global lbl_8021C47C 194 | lbl_8021C47C: 195 | .incbin "baserom.dol", 0x12319C, 0x4 196 | .global lbl_8021C480 197 | lbl_8021C480: 198 | .incbin "baserom.dol", 0x1231A0, 0x8 199 | .global lbl_8021C488 200 | lbl_8021C488: 201 | .incbin "baserom.dol", 0x1231A8, 0x4 202 | .global lbl_8021C48C 203 | lbl_8021C48C: 204 | .incbin "baserom.dol", 0x1231AC, 0x4 205 | .global lbl_8021C490 206 | lbl_8021C490: 207 | .incbin "baserom.dol", 0x1231B0, 0x8 208 | .global lbl_8021C498 209 | lbl_8021C498: 210 | .incbin "baserom.dol", 0x1231B8, 0x4 211 | .global lbl_8021C49C 212 | lbl_8021C49C: 213 | .incbin "baserom.dol", 0x1231BC, 0x4 214 | .global lbl_8021C4A0 215 | lbl_8021C4A0: 216 | .incbin "baserom.dol", 0x1231C0, 0x8 217 | .global lbl_8021C4A8 218 | lbl_8021C4A8: 219 | .incbin "baserom.dol", 0x1231C8, 0x8 220 | .global lbl_8021C4B0 221 | lbl_8021C4B0: 222 | .incbin "baserom.dol", 0x1231D0, 0x8 223 | .global lbl_8021C4B8 224 | lbl_8021C4B8: 225 | .incbin "baserom.dol", 0x1231D8, 0x4 226 | .global lbl_8021C4BC 227 | lbl_8021C4BC: 228 | .incbin "baserom.dol", 0x1231DC, 0x4 229 | .global lbl_8021C4C0 230 | lbl_8021C4C0: 231 | .incbin "baserom.dol", 0x1231E0, 0x8 232 | .global lbl_8021C4C8 233 | lbl_8021C4C8: 234 | .incbin "baserom.dol", 0x1231E8, 0x8 235 | .global lbl_8021C4D0 236 | lbl_8021C4D0: 237 | .incbin "baserom.dol", 0x1231F0, 0x8 238 | .global lbl_8021C4D8 239 | lbl_8021C4D8: 240 | .incbin "baserom.dol", 0x1231F8, 0x8 241 | .global lbl_8021C4E0 242 | lbl_8021C4E0: 243 | .incbin "baserom.dol", 0x123200, 0x4 244 | .global lbl_8021C4E4 245 | lbl_8021C4E4: 246 | .incbin "baserom.dol", 0x123204, 0x4 247 | .global lbl_8021C4E8 248 | lbl_8021C4E8: 249 | .incbin "baserom.dol", 0x123208, 0x4 250 | .global lbl_8021C4EC 251 | lbl_8021C4EC: 252 | .incbin "baserom.dol", 0x12320C, 0x4 253 | .global lbl_8021C4F0 254 | lbl_8021C4F0: 255 | .4byte lbl_801CF0A0 + 0x80 256 | .global lbl_8021C4F4 257 | lbl_8021C4F4: 258 | .incbin "baserom.dol", 0x123214, 0x4 259 | .global lbl_8021C4F8 260 | lbl_8021C4F8: 261 | .incbin "baserom.dol", 0x123218, 0x4 262 | .global lbl_8021C4FC 263 | lbl_8021C4FC: 264 | .incbin "baserom.dol", 0x12321C, 0x4 265 | .global lbl_8021C500 266 | lbl_8021C500: 267 | .incbin "baserom.dol", 0x123220, 0x4 268 | .global lbl_8021C504 269 | lbl_8021C504: 270 | .incbin "baserom.dol", 0x123224, 0x4 271 | .global lbl_8021C508 272 | lbl_8021C508: 273 | .incbin "baserom.dol", 0x123228, 0x4 274 | .global lbl_8021C50C 275 | lbl_8021C50C: 276 | .incbin "baserom.dol", 0x12322C, 0x4 277 | .global lbl_8021C510 278 | lbl_8021C510: 279 | .incbin "baserom.dol", 0x123230, 0x8 280 | .global lbl_8021C518 281 | lbl_8021C518: 282 | .incbin "baserom.dol", 0x123238, 0x8 283 | .global lbl_8021C520 284 | lbl_8021C520: 285 | .incbin "baserom.dol", 0x123240, 0x4 286 | .global lbl_8021C524 287 | lbl_8021C524: 288 | .incbin "baserom.dol", 0x123244, 0x4 289 | .global lbl_8021C528 290 | lbl_8021C528: 291 | .incbin "baserom.dol", 0x123248, 0x4 292 | .global lbl_8021C52C 293 | lbl_8021C52C: 294 | .incbin "baserom.dol", 0x12324C, 0x4 295 | .global lbl_8021C530 296 | lbl_8021C530: 297 | .incbin "baserom.dol", 0x123250, 0x4 298 | .global lbl_8021C534 299 | lbl_8021C534: 300 | .incbin "baserom.dol", 0x123254, 0x4 301 | .global lbl_8021C538 302 | lbl_8021C538: 303 | .incbin "baserom.dol", 0x123258, 0x4 304 | .global lbl_8021C53C 305 | lbl_8021C53C: 306 | .incbin "baserom.dol", 0x12325C, 0x4 307 | .global lbl_8021C540 308 | lbl_8021C540: 309 | .incbin "baserom.dol", 0x123260, 0x4 310 | .global lbl_8021C544 311 | lbl_8021C544: 312 | .incbin "baserom.dol", 0x123264, 0x4 313 | .global lbl_8021C548 314 | lbl_8021C548: 315 | .incbin "baserom.dol", 0x123268, 0x4 316 | .global lbl_8021C54C 317 | lbl_8021C54C: 318 | .incbin "baserom.dol", 0x12326C, 0x4 319 | .global lbl_8021C550 320 | lbl_8021C550: 321 | .incbin "baserom.dol", 0x123270, 0x8 322 | .global lbl_8021C558 323 | lbl_8021C558: 324 | .incbin "baserom.dol", 0x123278, 0x8 325 | .global lbl_8021C560 326 | lbl_8021C560: 327 | .incbin "baserom.dol", 0x123280, 0x4 328 | .global lbl_8021C564 329 | lbl_8021C564: 330 | .incbin "baserom.dol", 0x123284, 0x4 331 | .global lbl_8021C568 332 | lbl_8021C568: 333 | .incbin "baserom.dol", 0x123288, 0x4 334 | .global lbl_8021C56C 335 | lbl_8021C56C: 336 | .incbin "baserom.dol", 0x12328C, 0x4 337 | .global lbl_8021C570 338 | lbl_8021C570: 339 | .incbin "baserom.dol", 0x123290, 0x4 340 | .global lbl_8021C574 341 | lbl_8021C574: 342 | .incbin "baserom.dol", 0x123294, 0x4 343 | .global lbl_8021C578 344 | lbl_8021C578: 345 | .incbin "baserom.dol", 0x123298, 0x4 346 | .global lbl_8021C57C 347 | lbl_8021C57C: 348 | .incbin "baserom.dol", 0x12329C, 0x4 349 | .global lbl_8021C580 350 | lbl_8021C580: 351 | .incbin "baserom.dol", 0x1232A0, 0x8 352 | .global lbl_8021C588 353 | lbl_8021C588: 354 | .incbin "baserom.dol", 0x1232A8, 0x8 355 | .global lbl_8021C590 356 | lbl_8021C590: 357 | .incbin "baserom.dol", 0x1232B0, 0x4 358 | .global lbl_8021C594 359 | lbl_8021C594: 360 | .incbin "baserom.dol", 0x1232B4, 0x4 361 | .global lbl_8021C598 362 | lbl_8021C598: 363 | .incbin "baserom.dol", 0x1232B8, 0x8 364 | .global lbl_8021C5A0 365 | lbl_8021C5A0: 366 | .incbin "baserom.dol", 0x1232C0, 0x8 367 | .global lbl_8021C5A8 368 | lbl_8021C5A8: 369 | .incbin "baserom.dol", 0x1232C8, 0x8 370 | .global lbl_8021C5B0 371 | lbl_8021C5B0: 372 | .incbin "baserom.dol", 0x1232D0, 0x8 373 | .global lbl_8021C5B8 374 | lbl_8021C5B8: 375 | .incbin "baserom.dol", 0x1232D8, 0x8 376 | .global lbl_8021C5C0 377 | lbl_8021C5C0: 378 | .incbin "baserom.dol", 0x1232E0, 0x8 379 | .global lbl_8021C5C8 380 | lbl_8021C5C8: 381 | .incbin "baserom.dol", 0x1232E8, 0x8 382 | .global lbl_8021C5D0 383 | lbl_8021C5D0: 384 | .incbin "baserom.dol", 0x1232F0, 0x8 385 | .global lbl_8021C5D8 386 | lbl_8021C5D8: 387 | .incbin "baserom.dol", 0x1232F8, 0x8 388 | .global lbl_8021C5E0 389 | lbl_8021C5E0: 390 | .incbin "baserom.dol", 0x123300, 0x8 391 | .global lbl_8021C5E8 392 | lbl_8021C5E8: 393 | .incbin "baserom.dol", 0x123308, 0x8 394 | .global lbl_8021C5F0 395 | lbl_8021C5F0: 396 | .incbin "baserom.dol", 0x123310, 0x4 397 | .global lbl_8021C5F4 398 | lbl_8021C5F4: 399 | .incbin "baserom.dol", 0x123314, 0x4 400 | .global lbl_8021C5F8 401 | lbl_8021C5F8: 402 | .incbin "baserom.dol", 0x123318, 0x8 403 | .global lbl_8021C600 404 | lbl_8021C600: 405 | .incbin "baserom.dol", 0x123320, 0x8 406 | .global lbl_8021C608 407 | lbl_8021C608: 408 | .incbin "baserom.dol", 0x123328, 0x8 409 | .global lbl_8021C610 410 | lbl_8021C610: 411 | .incbin "baserom.dol", 0x123330, 0x8 412 | .global lbl_8021C618 413 | lbl_8021C618: 414 | .incbin "baserom.dol", 0x123338, 0x8 415 | .global lbl_8021C620 416 | lbl_8021C620: 417 | .incbin "baserom.dol", 0x123340, 0x8 418 | .global lbl_8021C628 419 | lbl_8021C628: 420 | .incbin "baserom.dol", 0x123348, 0x8 421 | .global lbl_8021C630 422 | lbl_8021C630: 423 | .incbin "baserom.dol", 0x123350, 0x8 424 | .global lbl_8021C638 425 | lbl_8021C638: 426 | .incbin "baserom.dol", 0x123358, 0x8 427 | .global lbl_8021C640 428 | lbl_8021C640: 429 | .incbin "baserom.dol", 0x123360, 0x4 430 | .global lbl_8021C644 431 | lbl_8021C644: 432 | .incbin "baserom.dol", 0x123364, 0x4 433 | .global lbl_8021C648 434 | lbl_8021C648: 435 | .incbin "baserom.dol", 0x123368, 0x8 436 | .global lbl_8021C650 437 | lbl_8021C650: 438 | .incbin "baserom.dol", 0x123370, 0x8 439 | .global lbl_8021C658 440 | lbl_8021C658: 441 | .incbin "baserom.dol", 0x123378, 0x8 442 | .global lbl_8021C660 443 | lbl_8021C660: 444 | .incbin "baserom.dol", 0x123380, 0x8 445 | .global lbl_8021C668 446 | lbl_8021C668: 447 | .incbin "baserom.dol", 0x123388, 0x8 448 | .global lbl_8021C670 449 | lbl_8021C670: 450 | .incbin "baserom.dol", 0x123390, 0x8 451 | .global lbl_8021C678 452 | lbl_8021C678: 453 | .incbin "baserom.dol", 0x123398, 0x8 454 | .global lbl_8021C680 455 | lbl_8021C680: 456 | .incbin "baserom.dol", 0x1233A0, 0x8 457 | .global lbl_8021C688 458 | lbl_8021C688: 459 | .incbin "baserom.dol", 0x1233A8, 0x8 460 | .global lbl_8021C690 461 | lbl_8021C690: 462 | .incbin "baserom.dol", 0x1233B0, 0x8 463 | .global lbl_8021C698 464 | lbl_8021C698: 465 | .incbin "baserom.dol", 0x1233B8, 0x8 466 | .global lbl_8021C6A0 467 | lbl_8021C6A0: 468 | .incbin "baserom.dol", 0x1233C0, 0x8 469 | .global lbl_8021C6A8 470 | lbl_8021C6A8: 471 | .incbin "baserom.dol", 0x1233C8, 0x8 472 | .global lbl_8021C6B0 473 | lbl_8021C6B0: 474 | .incbin "baserom.dol", 0x1233D0, 0x8 475 | .global lbl_8021C6B8 476 | lbl_8021C6B8: 477 | .incbin "baserom.dol", 0x1233D8, 0x8 478 | .global lbl_8021C6C0 479 | lbl_8021C6C0: 480 | .incbin "baserom.dol", 0x1233E0, 0x8 481 | .global lbl_8021C6C8 482 | lbl_8021C6C8: 483 | .incbin "baserom.dol", 0x1233E8, 0x8 484 | .global lbl_8021C6D0 485 | lbl_8021C6D0: 486 | .incbin "baserom.dol", 0x1233F0, 0x8 487 | .global lbl_8021C6D8 488 | lbl_8021C6D8: 489 | .incbin "baserom.dol", 0x1233F8, 0x8 490 | .global lbl_8021C6E0 491 | lbl_8021C6E0: 492 | .incbin "baserom.dol", 0x123400, 0x8 493 | .global lbl_8021C6E8 494 | lbl_8021C6E8: 495 | .incbin "baserom.dol", 0x123408, 0x8 496 | .global lbl_8021C6F0 497 | lbl_8021C6F0: 498 | .incbin "baserom.dol", 0x123410, 0x8 499 | .global lbl_8021C6F8 500 | lbl_8021C6F8: 501 | .incbin "baserom.dol", 0x123418, 0x8 502 | .global lbl_8021C700 503 | lbl_8021C700: 504 | .incbin "baserom.dol", 0x123420, 0x8 505 | .global lbl_8021C708 506 | lbl_8021C708: 507 | .incbin "baserom.dol", 0x123428, 0x8 508 | .global lbl_8021C710 509 | lbl_8021C710: 510 | .incbin "baserom.dol", 0x123430, 0x8 511 | .global lbl_8021C718 512 | lbl_8021C718: 513 | .incbin "baserom.dol", 0x123438, 0x8 514 | .global lbl_8021C720 515 | lbl_8021C720: 516 | .incbin "baserom.dol", 0x123440, 0x8 517 | .global lbl_8021C728 518 | lbl_8021C728: 519 | .incbin "baserom.dol", 0x123448, 0x8 520 | .global lbl_8021C730 521 | lbl_8021C730: 522 | .incbin "baserom.dol", 0x123450, 0x8 523 | .global lbl_8021C738 524 | lbl_8021C738: 525 | .incbin "baserom.dol", 0x123458, 0x8 526 | .global lbl_8021C740 527 | lbl_8021C740: 528 | .incbin "baserom.dol", 0x123460, 0x8 529 | .global lbl_8021C748 530 | lbl_8021C748: 531 | .incbin "baserom.dol", 0x123468, 0x8 532 | .global lbl_8021C750 533 | lbl_8021C750: 534 | .incbin "baserom.dol", 0x123470, 0x8 535 | .global lbl_8021C758 536 | lbl_8021C758: 537 | .incbin "baserom.dol", 0x123478, 0x8 538 | .global lbl_8021C760 539 | lbl_8021C760: 540 | .incbin "baserom.dol", 0x123480, 0x8 541 | .global lbl_8021C768 542 | lbl_8021C768: 543 | .incbin "baserom.dol", 0x123488, 0x8 544 | .global lbl_8021C770 545 | lbl_8021C770: 546 | .incbin "baserom.dol", 0x123490, 0x8 547 | .global lbl_8021C778 548 | lbl_8021C778: 549 | .incbin "baserom.dol", 0x123498, 0x8 550 | .global lbl_8021C780 551 | lbl_8021C780: 552 | .incbin "baserom.dol", 0x1234A0, 0x8 553 | .global lbl_8021C788 554 | lbl_8021C788: 555 | .incbin "baserom.dol", 0x1234A8, 0x8 556 | .global lbl_8021C790 557 | lbl_8021C790: 558 | .incbin "baserom.dol", 0x1234B0, 0x8 559 | .global lbl_8021C798 560 | lbl_8021C798: 561 | .incbin "baserom.dol", 0x1234B8, 0x8 562 | .global lbl_8021C7A0 563 | lbl_8021C7A0: 564 | .incbin "baserom.dol", 0x1234C0, 0x8 565 | .global lbl_8021C7A8 566 | lbl_8021C7A8: 567 | .incbin "baserom.dol", 0x1234C8, 0x8 568 | .global lbl_8021C7B0 569 | lbl_8021C7B0: 570 | .incbin "baserom.dol", 0x1234D0, 0x8 571 | .global lbl_8021C7B8 572 | lbl_8021C7B8: 573 | .incbin "baserom.dol", 0x1234D8, 0x8 574 | .global lbl_8021C7C0 575 | lbl_8021C7C0: 576 | .incbin "baserom.dol", 0x1234E0, 0x8 577 | .global lbl_8021C7C8 578 | lbl_8021C7C8: 579 | .incbin "baserom.dol", 0x1234E8, 0x8 580 | .global lbl_8021C7D0 581 | lbl_8021C7D0: 582 | .incbin "baserom.dol", 0x1234F0, 0x8 583 | .global lbl_8021C7D8 584 | lbl_8021C7D8: 585 | .incbin "baserom.dol", 0x1234F8, 0x8 586 | .global lbl_8021C7E0 587 | lbl_8021C7E0: 588 | .incbin "baserom.dol", 0x123500, 0x8 589 | .global lbl_8021C7E8 590 | lbl_8021C7E8: 591 | .incbin "baserom.dol", 0x123508, 0x8 592 | .global lbl_8021C7F0 593 | lbl_8021C7F0: 594 | .incbin "baserom.dol", 0x123510, 0x8 595 | .global lbl_8021C7F8 596 | lbl_8021C7F8: 597 | .incbin "baserom.dol", 0x123518, 0x8 598 | .global lbl_8021C800 599 | lbl_8021C800: 600 | .incbin "baserom.dol", 0x123520, 0x8 601 | .global lbl_8021C808 602 | lbl_8021C808: 603 | .incbin "baserom.dol", 0x123528, 0x8 604 | .global lbl_8021C810 605 | lbl_8021C810: 606 | .incbin "baserom.dol", 0x123530, 0x8 607 | .global lbl_8021C818 608 | lbl_8021C818: 609 | .incbin "baserom.dol", 0x123538, 0x8 610 | .global lbl_8021C820 611 | lbl_8021C820: 612 | .incbin "baserom.dol", 0x123540, 0x8 613 | .global lbl_8021C828 614 | lbl_8021C828: 615 | .incbin "baserom.dol", 0x123548, 0x8 616 | .global lbl_8021C830 617 | lbl_8021C830: 618 | .incbin "baserom.dol", 0x123550, 0x8 619 | .global lbl_8021C838 620 | lbl_8021C838: 621 | .incbin "baserom.dol", 0x123558, 0x8 622 | .global lbl_8021C840 623 | lbl_8021C840: 624 | .incbin "baserom.dol", 0x123560, 0x8 625 | .global lbl_8021C848 626 | lbl_8021C848: 627 | .incbin "baserom.dol", 0x123568, 0x8 628 | .global lbl_8021C850 629 | lbl_8021C850: 630 | .incbin "baserom.dol", 0x123570, 0x8 631 | .global lbl_8021C858 632 | lbl_8021C858: 633 | .incbin "baserom.dol", 0x123578, 0x8 634 | .global lbl_8021C860 635 | lbl_8021C860: 636 | .incbin "baserom.dol", 0x123580, 0x8 637 | .global lbl_8021C868 638 | lbl_8021C868: 639 | .incbin "baserom.dol", 0x123588, 0x8 640 | .global lbl_8021C870 641 | lbl_8021C870: 642 | .incbin "baserom.dol", 0x123590, 0x8 643 | .global lbl_8021C878 644 | lbl_8021C878: 645 | .incbin "baserom.dol", 0x123598, 0x8 646 | .global lbl_8021C880 647 | lbl_8021C880: 648 | .incbin "baserom.dol", 0x1235A0, 0x8 649 | .global lbl_8021C888 650 | lbl_8021C888: 651 | .incbin "baserom.dol", 0x1235A8, 0x8 652 | .global lbl_8021C890 653 | lbl_8021C890: 654 | .incbin "baserom.dol", 0x1235B0, 0x8 655 | .global lbl_8021C898 656 | lbl_8021C898: 657 | .incbin "baserom.dol", 0x1235B8, 0x8 658 | .global lbl_8021C8A0 659 | lbl_8021C8A0: 660 | .incbin "baserom.dol", 0x1235C0, 0x8 661 | .global lbl_8021C8A8 662 | lbl_8021C8A8: 663 | .incbin "baserom.dol", 0x1235C8, 0x8 664 | .global lbl_8021C8B0 665 | lbl_8021C8B0: 666 | .incbin "baserom.dol", 0x1235D0, 0x8 667 | .global lbl_8021C8B8 668 | lbl_8021C8B8: 669 | .incbin "baserom.dol", 0x1235D8, 0x8 670 | .global lbl_8021C8C0 671 | lbl_8021C8C0: 672 | .incbin "baserom.dol", 0x1235E0, 0x8 673 | .global lbl_8021C8C8 674 | lbl_8021C8C8: 675 | .incbin "baserom.dol", 0x1235E8, 0x8 676 | .global lbl_8021C8D0 677 | lbl_8021C8D0: 678 | .incbin "baserom.dol", 0x1235F0, 0x8 679 | .global lbl_8021C8D8 680 | lbl_8021C8D8: 681 | .incbin "baserom.dol", 0x1235F8, 0x8 682 | .global lbl_8021C8E0 683 | lbl_8021C8E0: 684 | .incbin "baserom.dol", 0x123600, 0x8 685 | .global lbl_8021C8E8 686 | lbl_8021C8E8: 687 | .incbin "baserom.dol", 0x123608, 0x8 688 | .global lbl_8021C8F0 689 | lbl_8021C8F0: 690 | .incbin "baserom.dol", 0x123610, 0x8 691 | .global lbl_8021C8F8 692 | lbl_8021C8F8: 693 | .incbin "baserom.dol", 0x123618, 0x8 694 | .global lbl_8021C900 695 | lbl_8021C900: 696 | .incbin "baserom.dol", 0x123620, 0x8 697 | .global lbl_8021C908 698 | lbl_8021C908: 699 | .incbin "baserom.dol", 0x123628, 0x8 700 | .global lbl_8021C910 701 | lbl_8021C910: 702 | .incbin "baserom.dol", 0x123630, 0x8 703 | .global lbl_8021C918 704 | lbl_8021C918: 705 | .incbin "baserom.dol", 0x123638, 0x8 706 | .global lbl_8021C920 707 | lbl_8021C920: 708 | .incbin "baserom.dol", 0x123640, 0x8 709 | .global lbl_8021C928 710 | lbl_8021C928: 711 | .incbin "baserom.dol", 0x123648, 0x8 712 | .global lbl_8021C930 713 | lbl_8021C930: 714 | .incbin "baserom.dol", 0x123650, 0x8 715 | .global lbl_8021C938 716 | lbl_8021C938: 717 | .incbin "baserom.dol", 0x123658, 0x8 718 | .global lbl_8021C940 719 | lbl_8021C940: 720 | .incbin "baserom.dol", 0x123660, 0x8 721 | .global lbl_8021C948 722 | lbl_8021C948: 723 | .incbin "baserom.dol", 0x123668, 0x8 724 | .global lbl_8021C950 725 | lbl_8021C950: 726 | .incbin "baserom.dol", 0x123670, 0x8 727 | .global lbl_8021C958 728 | lbl_8021C958: 729 | .incbin "baserom.dol", 0x123678, 0x8 730 | .global lbl_8021C960 731 | lbl_8021C960: 732 | .incbin "baserom.dol", 0x123680, 0x8 733 | .global lbl_8021C968 734 | lbl_8021C968: 735 | .incbin "baserom.dol", 0x123688, 0x8 736 | .global lbl_8021C970 737 | lbl_8021C970: 738 | .incbin "baserom.dol", 0x123690, 0x8 739 | .global lbl_8021C978 740 | lbl_8021C978: 741 | .incbin "baserom.dol", 0x123698, 0x8 742 | .global lbl_8021C980 743 | lbl_8021C980: 744 | .incbin "baserom.dol", 0x1236A0, 0x8 745 | .global lbl_8021C988 746 | lbl_8021C988: 747 | .incbin "baserom.dol", 0x1236A8, 0x8 748 | .global lbl_8021C990 749 | lbl_8021C990: 750 | .incbin "baserom.dol", 0x1236B0, 0x8 751 | .global lbl_8021C998 752 | lbl_8021C998: 753 | .incbin "baserom.dol", 0x1236B8, 0x8 754 | .global lbl_8021C9A0 755 | lbl_8021C9A0: 756 | .incbin "baserom.dol", 0x1236C0, 0x8 757 | .global lbl_8021C9A8 758 | lbl_8021C9A8: 759 | .incbin "baserom.dol", 0x1236C8, 0x8 760 | .global lbl_8021C9B0 761 | lbl_8021C9B0: 762 | .incbin "baserom.dol", 0x1236D0, 0x8 763 | .global lbl_8021C9B8 764 | lbl_8021C9B8: 765 | .incbin "baserom.dol", 0x1236D8, 0x8 766 | .global lbl_8021C9C0 767 | lbl_8021C9C0: 768 | .incbin "baserom.dol", 0x1236E0, 0x8 769 | .global lbl_8021C9C8 770 | lbl_8021C9C8: 771 | .incbin "baserom.dol", 0x1236E8, 0x8 772 | .global lbl_8021C9D0 773 | lbl_8021C9D0: 774 | .incbin "baserom.dol", 0x1236F0, 0x8 775 | .global lbl_8021C9D8 776 | lbl_8021C9D8: 777 | .incbin "baserom.dol", 0x1236F8, 0x8 778 | .global lbl_8021C9E0 779 | lbl_8021C9E0: 780 | .incbin "baserom.dol", 0x123700, 0x8 781 | .global lbl_8021C9E8 782 | lbl_8021C9E8: 783 | .incbin "baserom.dol", 0x123708, 0x8 784 | .global lbl_8021C9F0 785 | lbl_8021C9F0: 786 | .incbin "baserom.dol", 0x123710, 0x8 787 | .global lbl_8021C9F8 788 | lbl_8021C9F8: 789 | .incbin "baserom.dol", 0x123718, 0x8 790 | .global lbl_8021CA00 791 | lbl_8021CA00: 792 | .incbin "baserom.dol", 0x123720, 0x8 793 | .global lbl_8021CA08 794 | lbl_8021CA08: 795 | .incbin "baserom.dol", 0x123728, 0x8 796 | .global lbl_8021CA10 797 | lbl_8021CA10: 798 | .incbin "baserom.dol", 0x123730, 0x8 799 | .global lbl_8021CA18 800 | lbl_8021CA18: 801 | .incbin "baserom.dol", 0x123738, 0x8 802 | .global lbl_8021CA20 803 | lbl_8021CA20: 804 | .incbin "baserom.dol", 0x123740, 0x8 805 | .global lbl_8021CA28 806 | lbl_8021CA28: 807 | .incbin "baserom.dol", 0x123748, 0x8 808 | .global lbl_8021CA30 809 | lbl_8021CA30: 810 | .incbin "baserom.dol", 0x123750, 0x8 811 | .global lbl_8021CA38 812 | lbl_8021CA38: 813 | .incbin "baserom.dol", 0x123758, 0x8 814 | .global lbl_8021CA40 815 | lbl_8021CA40: 816 | .incbin "baserom.dol", 0x123760, 0x8 817 | .global lbl_8021CA48 818 | lbl_8021CA48: 819 | .incbin "baserom.dol", 0x123768, 0x8 820 | .global lbl_8021CA50 821 | lbl_8021CA50: 822 | .incbin "baserom.dol", 0x123770, 0x8 823 | .global lbl_8021CA58 824 | lbl_8021CA58: 825 | .incbin "baserom.dol", 0x123778, 0x8 826 | .global lbl_8021CA60 827 | lbl_8021CA60: 828 | .incbin "baserom.dol", 0x123780, 0x8 829 | .global lbl_8021CA68 830 | lbl_8021CA68: 831 | .incbin "baserom.dol", 0x123788, 0x8 832 | .global lbl_8021CA70 833 | lbl_8021CA70: 834 | .incbin "baserom.dol", 0x123790, 0x8 835 | .global lbl_8021CA78 836 | lbl_8021CA78: 837 | .incbin "baserom.dol", 0x123798, 0x8 838 | .global lbl_8021CA80 839 | lbl_8021CA80: 840 | .incbin "baserom.dol", 0x1237A0, 0x8 841 | .global lbl_8021CA88 842 | lbl_8021CA88: 843 | .incbin "baserom.dol", 0x1237A8, 0x8 844 | .global lbl_8021CA90 845 | lbl_8021CA90: 846 | .incbin "baserom.dol", 0x1237B0, 0x8 847 | .global lbl_8021CA98 848 | lbl_8021CA98: 849 | .incbin "baserom.dol", 0x1237B8, 0x8 850 | .global lbl_8021CAA0 851 | lbl_8021CAA0: 852 | .incbin "baserom.dol", 0x1237C0, 0x8 853 | .global lbl_8021CAA8 854 | lbl_8021CAA8: 855 | .incbin "baserom.dol", 0x1237C8, 0x8 856 | .global lbl_8021CAB0 857 | lbl_8021CAB0: 858 | .incbin "baserom.dol", 0x1237D0, 0x8 859 | .global lbl_8021CAB8 860 | lbl_8021CAB8: 861 | .incbin "baserom.dol", 0x1237D8, 0x8 862 | .global lbl_8021CAC0 863 | lbl_8021CAC0: 864 | .incbin "baserom.dol", 0x1237E0, 0x8 865 | .global lbl_8021CAC8 866 | lbl_8021CAC8: 867 | .incbin "baserom.dol", 0x1237E8, 0x8 868 | .global lbl_8021CAD0 869 | lbl_8021CAD0: 870 | .incbin "baserom.dol", 0x1237F0, 0x8 871 | .global lbl_8021CAD8 872 | lbl_8021CAD8: 873 | .incbin "baserom.dol", 0x1237F8, 0x8 874 | .global lbl_8021CAE0 875 | lbl_8021CAE0: 876 | .incbin "baserom.dol", 0x123800, 0x8 877 | .global lbl_8021CAE8 878 | lbl_8021CAE8: 879 | .incbin "baserom.dol", 0x123808, 0x8 880 | .global lbl_8021CAF0 881 | lbl_8021CAF0: 882 | .incbin "baserom.dol", 0x123810, 0x8 883 | .global lbl_8021CAF8 884 | lbl_8021CAF8: 885 | .incbin "baserom.dol", 0x123818, 0x8 886 | .global lbl_8021CB00 887 | lbl_8021CB00: 888 | .incbin "baserom.dol", 0x123820, 0x8 889 | .global lbl_8021CB08 890 | lbl_8021CB08: 891 | .incbin "baserom.dol", 0x123828, 0x8 892 | .global lbl_8021CB10 893 | lbl_8021CB10: 894 | .incbin "baserom.dol", 0x123830, 0x8 895 | .global lbl_8021CB18 896 | lbl_8021CB18: 897 | .incbin "baserom.dol", 0x123838, 0x8 898 | .global lbl_8021CB20 899 | lbl_8021CB20: 900 | .incbin "baserom.dol", 0x123840, 0x8 901 | .global lbl_8021CB28 902 | lbl_8021CB28: 903 | .incbin "baserom.dol", 0x123848, 0x8 904 | .global lbl_8021CB30 905 | lbl_8021CB30: 906 | .incbin "baserom.dol", 0x123850, 0x8 907 | .global lbl_8021CB38 908 | lbl_8021CB38: 909 | .incbin "baserom.dol", 0x123858, 0x8 910 | .global lbl_8021CB40 911 | lbl_8021CB40: 912 | .incbin "baserom.dol", 0x123860, 0x8 913 | .global lbl_8021CB48 914 | lbl_8021CB48: 915 | .incbin "baserom.dol", 0x123868, 0x8 916 | .global lbl_8021CB50 917 | lbl_8021CB50: 918 | .incbin "baserom.dol", 0x123870, 0x8 919 | .global lbl_8021CB58 920 | lbl_8021CB58: 921 | .incbin "baserom.dol", 0x123878, 0x4 922 | .global lbl_8021CB5C 923 | lbl_8021CB5C: 924 | .incbin "baserom.dol", 0x12387C, 0x4 925 | .global lbl_8021CB60 926 | lbl_8021CB60: 927 | .incbin "baserom.dol", 0x123880, 0x4 928 | .global lbl_8021CB64 929 | lbl_8021CB64: 930 | .incbin "baserom.dol", 0x123884, 0x4 931 | .global lbl_8021CB68 932 | lbl_8021CB68: 933 | .incbin "baserom.dol", 0x123888, 0x4 934 | .global lbl_8021CB6C 935 | lbl_8021CB6C: 936 | .incbin "baserom.dol", 0x12388C, 0x4 937 | .global lbl_8021CB70 938 | lbl_8021CB70: 939 | .incbin "baserom.dol", 0x123890, 0x4 940 | .global lbl_8021CB74 941 | lbl_8021CB74: 942 | .incbin "baserom.dol", 0x123894, 0x4 943 | .global lbl_8021CB78 944 | lbl_8021CB78: 945 | .incbin "baserom.dol", 0x123898, 0x4 946 | .global lbl_8021CB7C 947 | lbl_8021CB7C: 948 | .incbin "baserom.dol", 0x12389C, 0x4 949 | .global lbl_8021CB80 950 | lbl_8021CB80: 951 | .incbin "baserom.dol", 0x1238A0, 0x4 952 | .global lbl_8021CB84 953 | lbl_8021CB84: 954 | .incbin "baserom.dol", 0x1238A4, 0x4 955 | .global lbl_8021CB88 956 | lbl_8021CB88: 957 | .incbin "baserom.dol", 0x1238A8, 0x4 958 | .global lbl_8021CB8C 959 | lbl_8021CB8C: 960 | .incbin "baserom.dol", 0x1238AC, 0xC 961 | .global lbl_8021CB98 962 | lbl_8021CB98: 963 | .incbin "baserom.dol", 0x1238B8, 0x4 964 | .global lbl_8021CB9C 965 | lbl_8021CB9C: 966 | .incbin "baserom.dol", 0x1238BC, 0x4 967 | .global lbl_8021CBA0 968 | lbl_8021CBA0: 969 | .incbin "baserom.dol", 0x1238C0, 0x4 970 | .global lbl_8021CBA4 971 | lbl_8021CBA4: 972 | .incbin "baserom.dol", 0x1238C4, 0x4 973 | .global lbl_8021CBA8 974 | lbl_8021CBA8: 975 | .incbin "baserom.dol", 0x1238C8, 0x4 976 | .global lbl_8021CBAC 977 | lbl_8021CBAC: 978 | .incbin "baserom.dol", 0x1238CC, 0x4 979 | .global lbl_8021CBB0 980 | lbl_8021CBB0: 981 | .incbin "baserom.dol", 0x1238D0, 0x4 982 | .global lbl_8021CBB4 983 | lbl_8021CBB4: 984 | .incbin "baserom.dol", 0x1238D4, 0x4 985 | .global lbl_8021CBB8 986 | lbl_8021CBB8: 987 | .incbin "baserom.dol", 0x1238D8, 0x8 988 | .global lbl_8021CBC0 989 | lbl_8021CBC0: 990 | .incbin "baserom.dol", 0x1238E0, 0x8 991 | .global lbl_8021CBC8 992 | lbl_8021CBC8: 993 | .incbin "baserom.dol", 0x1238E8, 0x4 994 | .global lbl_8021CBCC 995 | lbl_8021CBCC: 996 | .incbin "baserom.dol", 0x1238EC, 0x4 997 | .global lbl_8021CBD0 998 | lbl_8021CBD0: 999 | .incbin "baserom.dol", 0x1238F0, 0x4 1000 | .global lbl_8021CBD4 1001 | lbl_8021CBD4: 1002 | .incbin "baserom.dol", 0x1238F4, 0x4 1003 | .global lbl_8021CBD8 1004 | lbl_8021CBD8: 1005 | .incbin "baserom.dol", 0x1238F8, 0x4 1006 | .global lbl_8021CBDC 1007 | lbl_8021CBDC: 1008 | .incbin "baserom.dol", 0x1238FC, 0x4 1009 | .global lbl_8021CBE0 1010 | lbl_8021CBE0: 1011 | .incbin "baserom.dol", 0x123900, 0x4 1012 | .global lbl_8021CBE4 1013 | lbl_8021CBE4: 1014 | .incbin "baserom.dol", 0x123904, 0x4 1015 | .global lbl_8021CBE8 1016 | lbl_8021CBE8: 1017 | .incbin "baserom.dol", 0x123908, 0x4 1018 | .global lbl_8021CBEC 1019 | lbl_8021CBEC: 1020 | .incbin "baserom.dol", 0x12390C, 0x4 1021 | .global lbl_8021CBF0 1022 | lbl_8021CBF0: 1023 | .incbin "baserom.dol", 0x123910, 0x8 1024 | .global lbl_8021CBF8 1025 | lbl_8021CBF8: 1026 | .incbin "baserom.dol", 0x123918, 0x8 1027 | .global lbl_8021CC00 1028 | lbl_8021CC00: 1029 | .incbin "baserom.dol", 0x123920, 0x8 1030 | .global lbl_8021CC08 1031 | lbl_8021CC08: 1032 | .incbin "baserom.dol", 0x123928, 0x8 1033 | .global lbl_8021CC10 1034 | lbl_8021CC10: 1035 | .incbin "baserom.dol", 0x123930, 0x8 1036 | .global lbl_8021CC18 1037 | lbl_8021CC18: 1038 | .incbin "baserom.dol", 0x123938, 0x8 1039 | .global lbl_8021CC20 1040 | lbl_8021CC20: 1041 | .incbin "baserom.dol", 0x123940, 0x8 1042 | .global lbl_8021CC28 1043 | lbl_8021CC28: 1044 | .incbin "baserom.dol", 0x123948, 0x8 1045 | .global lbl_8021CC30 1046 | lbl_8021CC30: 1047 | .incbin "baserom.dol", 0x123950, 0x8 1048 | .global lbl_8021CC38 1049 | lbl_8021CC38: 1050 | .incbin "baserom.dol", 0x123958, 0x4 1051 | .global lbl_8021CC3C 1052 | lbl_8021CC3C: 1053 | .incbin "baserom.dol", 0x12395C, 0x4 1054 | .global lbl_8021CC40 1055 | lbl_8021CC40: 1056 | .incbin "baserom.dol", 0x123960, 0x4 1057 | .global lbl_8021CC44 1058 | lbl_8021CC44: 1059 | .incbin "baserom.dol", 0x123964, 0x4 1060 | .global lbl_8021CC48 1061 | lbl_8021CC48: 1062 | .incbin "baserom.dol", 0x123968, 0x4 1063 | .global lbl_8021CC4C 1064 | lbl_8021CC4C: 1065 | .incbin "baserom.dol", 0x12396C, 0x4 1066 | .global lbl_8021CC50 1067 | lbl_8021CC50: 1068 | .incbin "baserom.dol", 0x123970, 0x8 1069 | .global lbl_8021CC58 1070 | lbl_8021CC58: 1071 | .incbin "baserom.dol", 0x123978, 0x8 1072 | .global lbl_8021CC60 1073 | lbl_8021CC60: 1074 | .incbin "baserom.dol", 0x123980, 0x8 1075 | .global lbl_8021CC68 1076 | lbl_8021CC68: 1077 | .incbin "baserom.dol", 0x123988, 0x8 1078 | .global lbl_8021CC70 1079 | lbl_8021CC70: 1080 | .incbin "baserom.dol", 0x123990, 0x8 1081 | .global lbl_8021CC78 1082 | lbl_8021CC78: 1083 | .incbin "baserom.dol", 0x123998, 0x4 1084 | .global lbl_8021CC7C 1085 | lbl_8021CC7C: 1086 | .incbin "baserom.dol", 0x12399C, 0x4 1087 | .global lbl_8021CC80 1088 | lbl_8021CC80: 1089 | .incbin "baserom.dol", 0x1239A0, 0x4 1090 | .global lbl_8021CC84 1091 | lbl_8021CC84: 1092 | .incbin "baserom.dol", 0x1239A4, 0x4 1093 | .global lbl_8021CC88 1094 | lbl_8021CC88: 1095 | .incbin "baserom.dol", 0x1239A8, 0x4 1096 | .global lbl_8021CC8C 1097 | lbl_8021CC8C: 1098 | .incbin "baserom.dol", 0x1239AC, 0x4 1099 | .global lbl_8021CC90 1100 | lbl_8021CC90: 1101 | .incbin "baserom.dol", 0x1239B0, 0x4 1102 | .global lbl_8021CC94 1103 | lbl_8021CC94: 1104 | .incbin "baserom.dol", 0x1239B4, 0x4 1105 | .global lbl_8021CC98 1106 | lbl_8021CC98: 1107 | .incbin "baserom.dol", 0x1239B8, 0x8 1108 | .global lbl_8021CCA0 1109 | lbl_8021CCA0: 1110 | .incbin "baserom.dol", 0x1239C0, 0x8 1111 | .global lbl_8021CCA8 1112 | lbl_8021CCA8: 1113 | .incbin "baserom.dol", 0x1239C8, 0x4 1114 | .global lbl_8021CCAC 1115 | lbl_8021CCAC: 1116 | .incbin "baserom.dol", 0x1239CC, 0x4 1117 | .global lbl_8021CCB0 1118 | lbl_8021CCB0: 1119 | .incbin "baserom.dol", 0x1239D0, 0x8 1120 | .global lbl_8021CCB8 1121 | lbl_8021CCB8: 1122 | .incbin "baserom.dol", 0x1239D8, 0x8 1123 | .global lbl_8021CCC0 1124 | lbl_8021CCC0: 1125 | .incbin "baserom.dol", 0x1239E0, 0x4 1126 | .global lbl_8021CCC4 1127 | lbl_8021CCC4: 1128 | .incbin "baserom.dol", 0x1239E4, 0x4 1129 | .global lbl_8021CCC8 1130 | lbl_8021CCC8: 1131 | .incbin "baserom.dol", 0x1239E8, 0x4 1132 | .global lbl_8021CCCC 1133 | lbl_8021CCCC: 1134 | .incbin "baserom.dol", 0x1239EC, 0x4 1135 | .global lbl_8021CCD0 1136 | lbl_8021CCD0: 1137 | .incbin "baserom.dol", 0x1239F0, 0x4 1138 | .global lbl_8021CCD4 1139 | lbl_8021CCD4: 1140 | .incbin "baserom.dol", 0x1239F4, 0x4 1141 | .global lbl_8021CCD8 1142 | lbl_8021CCD8: 1143 | .incbin "baserom.dol", 0x1239F8, 0x8 1144 | .global lbl_8021CCE0 1145 | lbl_8021CCE0: 1146 | .incbin "baserom.dol", 0x123A00, 0x8 1147 | .global lbl_8021CCE8 1148 | lbl_8021CCE8: 1149 | .incbin "baserom.dol", 0x123A08, 0x4 1150 | .global lbl_8021CCEC 1151 | lbl_8021CCEC: 1152 | .incbin "baserom.dol", 0x123A0C, 0x4 1153 | .global lbl_8021CCF0 1154 | lbl_8021CCF0: 1155 | .incbin "baserom.dol", 0x123A10, 0x8 1156 | .global lbl_8021CCF8 1157 | lbl_8021CCF8: 1158 | .incbin "baserom.dol", 0x123A18, 0x8 1159 | .global lbl_8021CD00 1160 | lbl_8021CD00: 1161 | .incbin "baserom.dol", 0x123A20, 0x8 1162 | .global lbl_8021CD08 1163 | lbl_8021CD08: 1164 | .incbin "baserom.dol", 0x123A28, 0x4 1165 | .global lbl_8021CD0C 1166 | lbl_8021CD0C: 1167 | .incbin "baserom.dol", 0x123A2C, 0x4 1168 | .global lbl_8021CD10 1169 | lbl_8021CD10: 1170 | .incbin "baserom.dol", 0x123A30, 0x4 1171 | .global lbl_8021CD14 1172 | lbl_8021CD14: 1173 | .incbin "baserom.dol", 0x123A34, 0x4 1174 | .global lbl_8021CD18 1175 | lbl_8021CD18: 1176 | .incbin "baserom.dol", 0x123A38, 0x4 1177 | .global lbl_8021CD1C 1178 | lbl_8021CD1C: 1179 | .incbin "baserom.dol", 0x123A3C, 0x4 1180 | .global lbl_8021CD20 1181 | lbl_8021CD20: 1182 | .incbin "baserom.dol", 0x123A40, 0x4 1183 | .global lbl_8021CD24 1184 | lbl_8021CD24: 1185 | .incbin "baserom.dol", 0x123A44, 0x4 1186 | .global lbl_8021CD28 1187 | lbl_8021CD28: 1188 | .incbin "baserom.dol", 0x123A48, 0x8 1189 | .global lbl_8021CD30 1190 | lbl_8021CD30: 1191 | .incbin "baserom.dol", 0x123A50, 0x8 1192 | .global lbl_8021CD38 1193 | lbl_8021CD38: 1194 | .incbin "baserom.dol", 0x123A58, 0x4 1195 | .global lbl_8021CD3C 1196 | lbl_8021CD3C: 1197 | .incbin "baserom.dol", 0x123A5C, 0x4 1198 | .global lbl_8021CD40 1199 | lbl_8021CD40: 1200 | .incbin "baserom.dol", 0x123A60, 0x4 1201 | .global lbl_8021CD44 1202 | lbl_8021CD44: 1203 | .incbin "baserom.dol", 0x123A64, 0x4 1204 | .global lbl_8021CD48 1205 | lbl_8021CD48: 1206 | .incbin "baserom.dol", 0x123A68, 0x8 1207 | .global lbl_8021CD50 1208 | lbl_8021CD50: 1209 | .incbin "baserom.dol", 0x123A70, 0x4 1210 | .global lbl_8021CD54 1211 | lbl_8021CD54: 1212 | .incbin "baserom.dol", 0x123A74, 0x4 1213 | .global lbl_8021CD58 1214 | lbl_8021CD58: 1215 | .incbin "baserom.dol", 0x123A78, 0x4 1216 | .global lbl_8021CD5C 1217 | lbl_8021CD5C: 1218 | .incbin "baserom.dol", 0x123A7C, 0x4 1219 | .global lbl_8021CD60 1220 | lbl_8021CD60: 1221 | .incbin "baserom.dol", 0x123A80, 0x4 1222 | .global lbl_8021CD64 1223 | lbl_8021CD64: 1224 | .incbin "baserom.dol", 0x123A84, 0x4 1225 | .global lbl_8021CD68 1226 | lbl_8021CD68: 1227 | .incbin "baserom.dol", 0x123A88, 0x8 1228 | .global lbl_8021CD70 1229 | lbl_8021CD70: 1230 | .incbin "baserom.dol", 0x123A90, 0x4 1231 | .global lbl_8021CD74 1232 | lbl_8021CD74: 1233 | .incbin "baserom.dol", 0x123A94, 0x4 1234 | .global lbl_8021CD78 1235 | lbl_8021CD78: 1236 | .incbin "baserom.dol", 0x123A98, 0x8 1237 | .global lbl_8021CD80 1238 | lbl_8021CD80: 1239 | .incbin "baserom.dol", 0x123AA0, 0x8 1240 | .global lbl_8021CD88 1241 | lbl_8021CD88: 1242 | .incbin "baserom.dol", 0x123AA8, 0x4 1243 | .global lbl_8021CD8C 1244 | lbl_8021CD8C: 1245 | .incbin "baserom.dol", 0x123AAC, 0x4 1246 | .global lbl_8021CD90 1247 | lbl_8021CD90: 1248 | .incbin "baserom.dol", 0x123AB0, 0x4 1249 | .global lbl_8021CD94 1250 | lbl_8021CD94: 1251 | .incbin "baserom.dol", 0x123AB4, 0x4 1252 | .global lbl_8021CD98 1253 | lbl_8021CD98: 1254 | .incbin "baserom.dol", 0x123AB8, 0x8 1255 | .global lbl_8021CDA0 1256 | lbl_8021CDA0: 1257 | .incbin "baserom.dol", 0x123AC0, 0x8 1258 | .global lbl_8021CDA8 1259 | lbl_8021CDA8: 1260 | .incbin "baserom.dol", 0x123AC8, 0x8 1261 | .global lbl_8021CDB0 1262 | lbl_8021CDB0: 1263 | .incbin "baserom.dol", 0x123AD0, 0x4 1264 | .global lbl_8021CDB4 1265 | lbl_8021CDB4: 1266 | .incbin "baserom.dol", 0x123AD4, 0x4 1267 | .global lbl_8021CDB8 1268 | lbl_8021CDB8: 1269 | .incbin "baserom.dol", 0x123AD8, 0x8 1270 | .global lbl_8021CDC0 1271 | lbl_8021CDC0: 1272 | .incbin "baserom.dol", 0x123AE0, 0x8 1273 | .global lbl_8021CDC8 1274 | lbl_8021CDC8: 1275 | .incbin "baserom.dol", 0x123AE8, 0x4 1276 | .global lbl_8021CDCC 1277 | lbl_8021CDCC: 1278 | .incbin "baserom.dol", 0x123AEC, 0x4 1279 | .global lbl_8021CDD0 1280 | lbl_8021CDD0: 1281 | .incbin "baserom.dol", 0x123AF0, 0x4 1282 | .global lbl_8021CDD4 1283 | lbl_8021CDD4: 1284 | .incbin "baserom.dol", 0x123AF4, 0x4 1285 | .global lbl_8021CDD8 1286 | lbl_8021CDD8: 1287 | .incbin "baserom.dol", 0x123AF8, 0x8 1288 | .global lbl_8021CDE0 1289 | lbl_8021CDE0: 1290 | .incbin "baserom.dol", 0x123B00, 0x4 1291 | .global lbl_8021CDE4 1292 | lbl_8021CDE4: 1293 | .incbin "baserom.dol", 0x123B04, 0x4 1294 | .global lbl_8021CDE8 1295 | lbl_8021CDE8: 1296 | .incbin "baserom.dol", 0x123B08, 0x8 1297 | .global lbl_8021CDF0 1298 | lbl_8021CDF0: 1299 | .incbin "baserom.dol", 0x123B10, 0x4 1300 | .global lbl_8021CDF4 1301 | lbl_8021CDF4: 1302 | .incbin "baserom.dol", 0x123B14, 0x4 1303 | .global lbl_8021CDF8 1304 | lbl_8021CDF8: 1305 | .incbin "baserom.dol", 0x123B18, 0x4 1306 | .global lbl_8021CDFC 1307 | lbl_8021CDFC: 1308 | .incbin "baserom.dol", 0x123B1C, 0x4 1309 | .global lbl_8021CE00 1310 | lbl_8021CE00: 1311 | .incbin "baserom.dol", 0x123B20, 0x4 1312 | .global lbl_8021CE04 1313 | lbl_8021CE04: 1314 | .incbin "baserom.dol", 0x123B24, 0x4 1315 | .global lbl_8021CE08 1316 | lbl_8021CE08: 1317 | .incbin "baserom.dol", 0x123B28, 0x8 1318 | .global lbl_8021CE10 1319 | lbl_8021CE10: 1320 | .incbin "baserom.dol", 0x123B30, 0x8 1321 | .global lbl_8021CE18 1322 | lbl_8021CE18: 1323 | .incbin "baserom.dol", 0x123B38, 0x8 1324 | .global lbl_8021CE20 1325 | lbl_8021CE20: 1326 | .incbin "baserom.dol", 0x123B40, 0x8 1327 | .global lbl_8021CE28 1328 | lbl_8021CE28: 1329 | .incbin "baserom.dol", 0x123B48, 0x4 1330 | .global lbl_8021CE2C 1331 | lbl_8021CE2C: 1332 | .incbin "baserom.dol", 0x123B4C, 0x4 1333 | .global lbl_8021CE30 1334 | lbl_8021CE30: 1335 | .incbin "baserom.dol", 0x123B50, 0x8 1336 | .global lbl_8021CE38 1337 | lbl_8021CE38: 1338 | .incbin "baserom.dol", 0x123B58, 0x4 1339 | .global lbl_8021CE3C 1340 | lbl_8021CE3C: 1341 | .incbin "baserom.dol", 0x123B5C, 0x4 1342 | .global lbl_8021CE40 1343 | lbl_8021CE40: 1344 | .incbin "baserom.dol", 0x123B60, 0x8 1345 | .global lbl_8021CE48 1346 | lbl_8021CE48: 1347 | .incbin "baserom.dol", 0x123B68, 0x4 1348 | .global lbl_8021CE4C 1349 | lbl_8021CE4C: 1350 | .incbin "baserom.dol", 0x123B6C, 0x4 1351 | .global lbl_8021CE50 1352 | lbl_8021CE50: 1353 | .incbin "baserom.dol", 0x123B70, 0x8 1354 | .global lbl_8021CE58 1355 | lbl_8021CE58: 1356 | .incbin "baserom.dol", 0x123B78, 0x4 1357 | .global lbl_8021CE5C 1358 | lbl_8021CE5C: 1359 | .incbin "baserom.dol", 0x123B7C, 0x4 1360 | .global lbl_8021CE60 1361 | lbl_8021CE60: 1362 | .incbin "baserom.dol", 0x123B80, 0x8 1363 | .global lbl_8021CE68 1364 | lbl_8021CE68: 1365 | .incbin "baserom.dol", 0x123B88, 0x8 1366 | .global lbl_8021CE70 1367 | lbl_8021CE70: 1368 | .incbin "baserom.dol", 0x123B90, 0x4 1369 | .global lbl_8021CE74 1370 | lbl_8021CE74: 1371 | .incbin "baserom.dol", 0x123B94, 0x4 1372 | .global lbl_8021CE78 1373 | lbl_8021CE78: 1374 | .incbin "baserom.dol", 0x123B98, 0x8 1375 | .global lbl_8021CE80 1376 | lbl_8021CE80: 1377 | .incbin "baserom.dol", 0x123BA0, 0x8 1378 | .global lbl_8021CE88 1379 | lbl_8021CE88: 1380 | .incbin "baserom.dol", 0x123BA8, 0x8 1381 | .global lbl_8021CE90 1382 | lbl_8021CE90: 1383 | .incbin "baserom.dol", 0x123BB0, 0x8 1384 | .global lbl_8021CE98 1385 | lbl_8021CE98: 1386 | .incbin "baserom.dol", 0x123BB8, 0x8 1387 | .global lbl_8021CEA0 1388 | lbl_8021CEA0: 1389 | .incbin "baserom.dol", 0x123BC0, 0x8 1390 | .global lbl_8021CEA8 1391 | lbl_8021CEA8: 1392 | .incbin "baserom.dol", 0x123BC8, 0x8 1393 | .global lbl_8021CEB0 1394 | lbl_8021CEB0: 1395 | .incbin "baserom.dol", 0x123BD0, 0x4 1396 | .global lbl_8021CEB4 1397 | lbl_8021CEB4: 1398 | .incbin "baserom.dol", 0x123BD4, 0x4 1399 | .global lbl_8021CEB8 1400 | lbl_8021CEB8: 1401 | .incbin "baserom.dol", 0x123BD8, 0x4 1402 | .global lbl_8021CEBC 1403 | lbl_8021CEBC: 1404 | .incbin "baserom.dol", 0x123BDC, 0x4 1405 | .global lbl_8021CEC0 1406 | lbl_8021CEC0: 1407 | .incbin "baserom.dol", 0x123BE0, 0x8 1408 | .global lbl_8021CEC8 1409 | lbl_8021CEC8: 1410 | .incbin "baserom.dol", 0x123BE8, 0x4 1411 | .global lbl_8021CECC 1412 | lbl_8021CECC: 1413 | .incbin "baserom.dol", 0x123BEC, 0x4 1414 | .global lbl_8021CED0 1415 | lbl_8021CED0: 1416 | .incbin "baserom.dol", 0x123BF0, 0x8 1417 | .global lbl_8021CED8 1418 | lbl_8021CED8: 1419 | .incbin "baserom.dol", 0x123BF8, 0x8 1420 | .global lbl_8021CEE0 1421 | lbl_8021CEE0: 1422 | .incbin "baserom.dol", 0x123C00, 0x8 1423 | .global lbl_8021CEE8 1424 | lbl_8021CEE8: 1425 | .incbin "baserom.dol", 0x123C08, 0x8 1426 | .global lbl_8021CEF0 1427 | lbl_8021CEF0: 1428 | .incbin "baserom.dol", 0x123C10, 0x4 1429 | .global lbl_8021CEF4 1430 | lbl_8021CEF4: 1431 | .incbin "baserom.dol", 0x123C14, 0x4 1432 | .global lbl_8021CEF8 1433 | lbl_8021CEF8: 1434 | .incbin "baserom.dol", 0x123C18, 0x4 1435 | .global lbl_8021CEFC 1436 | lbl_8021CEFC: 1437 | .incbin "baserom.dol", 0x123C1C, 0x4 1438 | .global lbl_8021CF00 1439 | lbl_8021CF00: 1440 | .incbin "baserom.dol", 0x123C20, 0x4 1441 | .global lbl_8021CF04 1442 | lbl_8021CF04: 1443 | .incbin "baserom.dol", 0x123C24, 0x4 1444 | .global lbl_8021CF08 1445 | lbl_8021CF08: 1446 | .incbin "baserom.dol", 0x123C28, 0x4 1447 | .global lbl_8021CF0C 1448 | lbl_8021CF0C: 1449 | .incbin "baserom.dol", 0x123C2C, 0x4 1450 | .global lbl_8021CF10 1451 | lbl_8021CF10: 1452 | .incbin "baserom.dol", 0x123C30, 0x8 1453 | .global lbl_8021CF18 1454 | lbl_8021CF18: 1455 | .incbin "baserom.dol", 0x123C38, 0x8 1456 | .global lbl_8021CF20 1457 | lbl_8021CF20: 1458 | .incbin "baserom.dol", 0x123C40, 0x8 1459 | .global lbl_8021CF28 1460 | lbl_8021CF28: 1461 | .incbin "baserom.dol", 0x123C48, 0x8 1462 | .global lbl_8021CF30 1463 | lbl_8021CF30: 1464 | .incbin "baserom.dol", 0x123C50, 0x8 1465 | .global lbl_8021CF38 1466 | lbl_8021CF38: 1467 | .incbin "baserom.dol", 0x123C58, 0x8 1468 | .global lbl_8021CF40 1469 | lbl_8021CF40: 1470 | .incbin "baserom.dol", 0x123C60, 0x8 1471 | .global lbl_8021CF48 1472 | lbl_8021CF48: 1473 | .4byte lbl_800E5028 + 0x80 1474 | .global lbl_8021CF4C 1475 | lbl_8021CF4C: 1476 | .incbin "baserom.dol", 0x123C6C, 0x4 1477 | .global lbl_8021CF50 1478 | lbl_8021CF50: 1479 | .4byte lbl_800E50F8 + 0x108 1480 | .global lbl_8021CF54 1481 | lbl_8021CF54: 1482 | .incbin "baserom.dol", 0x123C74, 0x4 1483 | .global lbl_8021CF58 1484 | lbl_8021CF58: 1485 | .incbin "baserom.dol", 0x123C78, 0x4 1486 | .global lbl_8021CF5C 1487 | lbl_8021CF5C: 1488 | .incbin "baserom.dol", 0x123C7C, 0x4 1489 | .global lbl_8021CF60 1490 | lbl_8021CF60: 1491 | .incbin "baserom.dol", 0x123C80, 0x8 1492 | .global lbl_8021CF68 1493 | lbl_8021CF68: 1494 | .incbin "baserom.dol", 0x123C88, 0x8 1495 | .global lbl_8021CF70 1496 | lbl_8021CF70: 1497 | .incbin "baserom.dol", 0x123C90, 0x8 1498 | .global lbl_8021CF78 1499 | lbl_8021CF78: 1500 | .incbin "baserom.dol", 0x123C98, 0x4 1501 | .global lbl_8021CF7C 1502 | lbl_8021CF7C: 1503 | .incbin "baserom.dol", 0x123C9C, 0x4 1504 | .global lbl_8021CF80 1505 | lbl_8021CF80: 1506 | .incbin "baserom.dol", 0x123CA0, 0x4 1507 | .global lbl_8021CF84 1508 | lbl_8021CF84: 1509 | .incbin "baserom.dol", 0x123CA4, 0x4 1510 | .global lbl_8021CF88 1511 | lbl_8021CF88: 1512 | .incbin "baserom.dol", 0x123CA8, 0x8 1513 | .global lbl_8021CF90 1514 | lbl_8021CF90: 1515 | .incbin "baserom.dol", 0x123CB0, 0x4 1516 | -------------------------------------------------------------------------------- /partial.lcf: -------------------------------------------------------------------------------- 1 | /* Linker configuration for building a relocatable (.rel) module */ 2 | 3 | SECTIONS 4 | { 5 | GROUP : 6 | { 7 | .init :{} 8 | .text :{} 9 | .rodata :{} 10 | .data :{} 11 | .bss :{} 12 | } 13 | } 14 | 15 | FORCEACTIVE 16 | { 17 | _prolog 18 | } 19 | -------------------------------------------------------------------------------- /resolveLinkerErrors.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # very experimental python script that goes through a linker error file and resolves any undefined labels while splitting 4 | 5 | with open("errors.txt", "r") as f: 6 | lines = f.readlines() 7 | 8 | lbls = [] 9 | 10 | for line in lines: 11 | #print (line) 12 | if line.startswith("lbl_"): 13 | #localstr = line.strip("lbl_") 14 | localstr = line.strip("\n") 15 | print (localstr) 16 | lbls.append(localstr) 17 | 18 | with open("asm/_Main/text.s", "r") as asm: 19 | asms = asm.readlines() 20 | 21 | prevLine = "" 22 | output = [] 23 | 24 | for l in asms: 25 | l = l.strip("\n") 26 | 27 | for lbl in lbls: 28 | #print(l) 29 | #print("/* " + lbl) 30 | if l.startswith(lbl): 31 | print(l) 32 | output.append(".global " + lbl + "\n") 33 | 34 | #if prevLine.startswith("func_"): 35 | # prevLine = l 36 | # output.append(l + "\n") 37 | # continue 38 | #else: 39 | # for lbl in lbls: 40 | # lstr = l.strip(":") 41 | # if lstr == lbl: 42 | # output.append(f".global {lbl}\n") 43 | # prevLine = l 44 | # break 45 | 46 | output.append(l + "\n") 47 | prevLine = l 48 | 49 | with open("output.asm", "w") as w: 50 | for o in output: 51 | w.write(o) 52 | -------------------------------------------------------------------------------- /sonicriders.sha1: -------------------------------------------------------------------------------- 1 | e90a13504974b917a675d59f07014e0e817c5e5d sonicriders.dol 2 | 1607fbb1ccabf116642c3c59ee9b21c304a1db26 _Main.rel 3 | -------------------------------------------------------------------------------- /static.lcf: -------------------------------------------------------------------------------- 1 | /* Linker configuration for building a static (.dol) module */ 2 | 3 | MEMORY 4 | { 5 | text : origin = 0x80003100 6 | } 7 | 8 | SECTIONS 9 | { 10 | GROUP : 11 | { 12 | .init ALIGN(0x20) : {} 13 | .text ALIGN(0x20) : {} 14 | .ctors ALIGN(0x20) : {} 15 | .dtors ALIGN(0x20) : {} 16 | .rodata ALIGN(0x20) : {} 17 | .data ALIGN(0x40) : {} 18 | .bss ALIGN(0x20) : {} 19 | .sdata ALIGN(0x20) : {} 20 | .sbss ALIGN(0x20) : {} 21 | .sdata2 ALIGN(0x20) : {} 22 | .sbss2 ALIGN(0x20) : {} 23 | } > text 24 | _stack_addr = (_f_sbss2 + SIZEOF(.sbss2) + 65536 + 0x7) & ~0x7; 25 | _stack_end = _f_sbss2 + SIZEOF(.sbss2); 26 | _db_stack_addr = (_stack_addr + 0x2000); 27 | _db_stack_end = _stack_addr; 28 | __ArenaLo = (_db_stack_addr + 0x1f) & ~0x1f; 29 | __ArenaHi = 0x81700000 ; 30 | } 31 | -------------------------------------------------------------------------------- /tools/elf2dol.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #ifndef MAX 9 | //! Get the maximum of two values 10 | #define MAX(a, b) (((a) > (b)) ? (a) : (b)) 11 | #endif 12 | 13 | #ifndef MIN 14 | //! Get the minimum of two values 15 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 16 | #endif 17 | 18 | #define ARRAY_COUNT(arr) (sizeof(arr)/sizeof((arr)[0])) 19 | 20 | #define EI_NIDENT 16 21 | 22 | typedef struct { 23 | unsigned char e_ident[EI_NIDENT]; 24 | uint16_t e_type; 25 | uint16_t e_machine; 26 | uint32_t e_version; 27 | uint32_t e_entry; 28 | uint32_t e_phoff; 29 | uint32_t e_shoff; 30 | uint32_t e_flags; 31 | uint16_t e_ehsize; 32 | uint16_t e_phentsize; 33 | uint16_t e_phnum; 34 | uint16_t e_shentsize; 35 | uint16_t e_shnum; 36 | uint16_t e_shstrndx; 37 | } Elf32_Ehdr; 38 | 39 | #define EI_CLASS 4 40 | #define EI_DATA 5 41 | #define EI_VERSION 6 42 | #define EI_PAD 7 43 | #define EI_NIDENT 16 44 | 45 | #define ELFCLASS32 1 46 | #define ELFDATA2MSB 2 47 | #define EV_CURRENT 1 48 | 49 | #define ET_EXEC 2 50 | #define EM_PPC 20 51 | 52 | typedef struct { 53 | uint32_t p_type; 54 | uint32_t p_offset; 55 | uint32_t p_vaddr; 56 | uint32_t p_paddr; 57 | uint32_t p_filesz; 58 | uint32_t p_memsz; 59 | uint32_t p_flags; 60 | uint32_t p_align; 61 | } Elf32_Phdr; 62 | 63 | #define PT_LOAD 1 64 | #define PF_R 4 65 | #define PF_W 2 66 | #define PF_X 1 67 | 68 | int verbosity = 0; 69 | 70 | #if BYTE_ORDER == BIG_ENDIAN 71 | 72 | #define swap32(x) (x) 73 | #define swap16(x) (x) 74 | 75 | #else 76 | 77 | static inline uint32_t swap32(uint32_t v) 78 | { 79 | return (v >> 24) | 80 | ((v >> 8) & 0x0000FF00) | 81 | ((v << 8) & 0x00FF0000) | 82 | (v << 24); 83 | } 84 | 85 | static inline uint16_t swap16(uint16_t v) 86 | { 87 | return (v >> 8) | (v << 8); 88 | } 89 | 90 | #endif /* BIG_ENDIAN */ 91 | 92 | typedef struct { 93 | 94 | uint32_t text_off[7]; 95 | uint32_t data_off[11]; 96 | uint32_t text_addr[7]; 97 | uint32_t data_addr[11]; 98 | uint32_t text_size[7]; 99 | uint32_t data_size[11]; 100 | uint32_t bss_addr; 101 | uint32_t bss_size; 102 | uint32_t entry; 103 | uint32_t pad[7]; 104 | } DOL_hdr; 105 | 106 | #define HAVE_BSS 1 107 | 108 | #define MAX_TEXT_SEGMENTS 7 109 | #define MAX_DATA_SEGMENTS 11 110 | 111 | #define DOL_ALIGNMENT 32 112 | 113 | #define DOL_ALIGN(x) (((x) + DOL_ALIGNMENT - 1) & ~(DOL_ALIGNMENT - 1)) 114 | 115 | typedef struct { 116 | DOL_hdr header; 117 | int text_cnt; 118 | int data_cnt; 119 | uint32_t text_elf_off[7]; 120 | uint32_t data_elf_off[11]; 121 | uint32_t flags; 122 | FILE *elf; 123 | } DOL_map; 124 | 125 | void usage(const char *name) 126 | { 127 | fprintf(stderr, "Usage: %s [-h] [-v] [--] elf-file dol-file\n", name); 128 | fprintf(stderr, " Convert an ELF file to a DOL file (by segments)\n"); 129 | fprintf(stderr, " Options:\n"); 130 | fprintf(stderr, " -h Show this help\n"); 131 | fprintf(stderr, " -v Be more verbose (twice for even more)\n"); 132 | } 133 | 134 | #define die(x) { fprintf(stderr, x "\n"); exit(1); } 135 | #define perrordie(x) { perror(x); exit(1); } 136 | 137 | void ferrordie(FILE *f, const char *str) 138 | { 139 | if(ferror(f)) { 140 | fprintf(stderr, "Error while "); 141 | perrordie(str); 142 | } else if(feof(f)) { 143 | fprintf(stderr, "EOF while %s\n", str); 144 | exit(1); 145 | } else { 146 | fprintf(stderr, "Unknown error while %s\n", str); 147 | exit(1); 148 | } 149 | } 150 | 151 | void add_bss(DOL_map *map, uint32_t paddr, uint32_t memsz) 152 | { 153 | if(map->flags & HAVE_BSS) { 154 | uint32_t curr_start = swap32(map->header.bss_addr); 155 | uint32_t curr_size = swap32(map->header.bss_size); 156 | if (paddr < curr_start) 157 | map->header.bss_addr = swap32(paddr); 158 | // Total BSS size should be the end of the last bss section minus the 159 | // start of the first bss section. 160 | if (paddr + memsz > curr_start + curr_size) 161 | map->header.bss_size = swap32(paddr + memsz - curr_start); 162 | } else { 163 | map->header.bss_addr = swap32(paddr); 164 | map->header.bss_size = swap32(memsz); 165 | map->flags |= HAVE_BSS; 166 | } 167 | } 168 | 169 | void read_elf_segments(DOL_map *map, const char *elf) 170 | { 171 | int read, i; 172 | Elf32_Ehdr ehdr; 173 | 174 | if(verbosity >= 2) 175 | fprintf(stderr, "Reading ELF file...\n"); 176 | 177 | map->elf = fopen(elf, "rb"); 178 | if(!map->elf) 179 | perrordie("Could not open ELF file"); 180 | 181 | read = fread(&ehdr, sizeof(ehdr), 1, map->elf); 182 | if(read != 1) 183 | ferrordie(map->elf, "reading ELF header"); 184 | 185 | if(memcmp(&ehdr.e_ident[0], "\177ELF", 4)) 186 | die("Invalid ELF header"); 187 | if(ehdr.e_ident[EI_CLASS] != ELFCLASS32) 188 | die("Invalid ELF class"); 189 | if(ehdr.e_ident[EI_DATA] != ELFDATA2MSB) 190 | die("Invalid ELF byte order"); 191 | if(ehdr.e_ident[EI_VERSION] != EV_CURRENT) 192 | die("Invalid ELF ident version"); 193 | if(swap32(ehdr.e_version) != EV_CURRENT) 194 | die("Invalid ELF version"); 195 | if(swap16(ehdr.e_type) != ET_EXEC) 196 | die("ELF is not an executable"); 197 | if(swap16(ehdr.e_machine) != EM_PPC) 198 | die("Machine is not PowerPC"); 199 | if(!swap32(ehdr.e_entry)) 200 | die("ELF has no entrypoint"); 201 | 202 | map->header.entry = ehdr.e_entry; 203 | 204 | if(verbosity >= 2) 205 | fprintf(stderr, "Valid ELF header found\n"); 206 | 207 | uint16_t phnum = swap16(ehdr.e_phnum); 208 | uint32_t phoff = swap32(ehdr.e_phoff); 209 | Elf32_Phdr *phdrs; 210 | 211 | if(!phnum || !phoff) 212 | die("ELF has no program headers"); 213 | 214 | if(swap16(ehdr.e_phentsize) != sizeof(Elf32_Phdr)) 215 | die("Invalid program header entry size"); 216 | 217 | phdrs = malloc(phnum * sizeof(Elf32_Phdr)); 218 | 219 | if(fseek(map->elf, phoff, SEEK_SET) < 0) 220 | ferrordie(map->elf, "reading ELF program headers"); 221 | read = fread(phdrs, sizeof(Elf32_Phdr), phnum, map->elf); 222 | if(read != phnum) 223 | ferrordie(map->elf, "reading ELF program headers"); 224 | 225 | for(i=0; i= 2) 234 | fprintf(stderr, "PHDR %d: 0x%x [0x%x] -> 0x%08x [0x%x] flags 0x%x\n", 235 | i, offset, filesz, paddr, memsz, flags); 236 | if(flags & PF_X) { 237 | // TEXT segment 238 | if(!(flags & PF_R)) 239 | fprintf(stderr, "Warning: non-readable segment %d\n", i); 240 | if(flags & PF_W) 241 | fprintf(stderr, "Warning: writable and executable segment %d\n", i); 242 | if(filesz > memsz) { 243 | fprintf(stderr, "Error: TEXT segment %d memory size (0x%x) smaller than file size (0x%x)\n", 244 | i, memsz, filesz); 245 | exit(1); 246 | } else if (memsz > filesz) { 247 | add_bss(map, paddr + filesz, memsz - filesz); 248 | } 249 | if(map->text_cnt >= MAX_TEXT_SEGMENTS) { 250 | die("Error: Too many TEXT segments"); 251 | } 252 | map->header.text_addr[map->text_cnt] = swap32(paddr); 253 | map->header.text_size[map->text_cnt] = swap32(filesz); 254 | map->text_elf_off[map->text_cnt] = offset; 255 | map->text_cnt++; 256 | } else { 257 | // DATA or BSS segment 258 | if(!(flags & PF_R)) 259 | fprintf(stderr, "Warning: non-readable segment %d\n", i); 260 | if(filesz == 0) { 261 | // BSS segment 262 | add_bss(map, paddr, memsz); 263 | } else { 264 | // DATA segment 265 | if(filesz > memsz) { 266 | fprintf(stderr, "Error: segment %d memory size (0x%x) is smaller than file size (0x%x)\n", 267 | i, memsz, filesz); 268 | exit(1); 269 | } 270 | if(map->data_cnt >= MAX_DATA_SEGMENTS) { 271 | die("Error: Too many DATA segments"); 272 | } 273 | map->header.data_addr[map->data_cnt] = swap32(paddr); 274 | map->header.data_size[map->data_cnt] = swap32(filesz); 275 | map->data_elf_off[map->data_cnt] = offset; 276 | map->data_cnt++; 277 | } 278 | } 279 | 280 | } else { 281 | if(verbosity >= 1) 282 | fprintf(stderr, "Skipping empty program header %d\n", i); 283 | } 284 | } else if(verbosity >= 1) { 285 | fprintf(stderr, "Skipping program header %d of type %d\n", i, swap32(phdrs[i].p_type)); 286 | } 287 | } 288 | if(verbosity >= 2) { 289 | fprintf(stderr, "Segments:\n"); 290 | for(i=0; itext_cnt; i++) { 291 | fprintf(stderr, " TEXT %d: 0x%08x [0x%x] from ELF offset 0x%x\n", 292 | i, swap32(map->header.text_addr[i]), swap32(map->header.text_size[i]), 293 | map->text_elf_off[i]); 294 | } 295 | for(i=0; idata_cnt; i++) { 296 | fprintf(stderr, " DATA %d: 0x%08x [0x%x] from ELF offset 0x%x\n", 297 | i, swap32(map->header.data_addr[i]), swap32(map->header.data_size[i]), 298 | map->data_elf_off[i]); 299 | } 300 | if(map->flags & HAVE_BSS) 301 | fprintf(stderr, " BSS segment: 0x%08x [0x%x]\n", swap32(map->header.bss_addr), 302 | swap32(map->header.bss_size)); 303 | } 304 | } 305 | 306 | void map_dol(DOL_map *map) 307 | { 308 | uint32_t fpos; 309 | int i; 310 | 311 | if(verbosity >= 2) 312 | fprintf(stderr, "Laying out DOL file...\n"); 313 | 314 | fpos = DOL_ALIGN(sizeof(DOL_hdr)); 315 | 316 | for(i=0; itext_cnt; i++) { 317 | if(verbosity >= 2) 318 | fprintf(stderr, " TEXT segment %d at 0x%x\n", i, fpos); 319 | map->header.text_off[i] = swap32(fpos); 320 | fpos = DOL_ALIGN(fpos + swap32(map->header.text_size[i])); 321 | } 322 | for(i=0; idata_cnt; i++) { 323 | if(verbosity >= 2) 324 | fprintf(stderr, " DATA segment %d at 0x%x\n", i, fpos); 325 | map->header.data_off[i] = swap32(fpos); 326 | fpos = DOL_ALIGN(fpos + swap32(map->header.data_size[i])); 327 | } 328 | 329 | if(map->text_cnt == 0) { 330 | if(verbosity >= 1) 331 | fprintf(stderr, "Note: adding dummy TEXT segment to work around IOS bug\n"); 332 | map->header.text_off[0] = swap32(DOL_ALIGN(sizeof(DOL_hdr))); 333 | } 334 | if(map->data_cnt == 0) { 335 | if(verbosity >= 1) 336 | fprintf(stderr, "Note: adding dummy DATA segment to work around IOS bug\n"); 337 | map->header.data_off[0] = swap32(DOL_ALIGN(sizeof(DOL_hdr))); 338 | } 339 | } 340 | 341 | #define BLOCK (1024*1024) 342 | 343 | void fcpy(FILE *dst, FILE *src, uint32_t dst_off, uint32_t src_off, uint32_t size) 344 | { 345 | int left = size; 346 | int read; 347 | int written; 348 | int block; 349 | void *blockbuf; 350 | 351 | if(fseek(src, src_off, SEEK_SET) < 0) 352 | ferrordie(src, "reading ELF segment data"); 353 | if(fseek(dst, dst_off, SEEK_SET) < 0) 354 | ferrordie(dst, "writing DOL segment data"); 355 | 356 | blockbuf = malloc(MIN(BLOCK, left)); 357 | 358 | while(left) { 359 | block = MIN(BLOCK, left); 360 | read = fread(blockbuf, 1, block, src); 361 | if(read != block) { 362 | free(blockbuf); 363 | ferrordie(src, "reading ELF segment data"); 364 | } 365 | written = fwrite(blockbuf, 1, block, dst); 366 | if(written != block) { 367 | free(blockbuf); 368 | ferrordie(dst, "writing DOL segment data"); 369 | } 370 | left -= block; 371 | } 372 | free(blockbuf); 373 | } 374 | 375 | void fpad(FILE *dst, uint32_t dst_off, uint32_t size) 376 | { 377 | uint32_t i; 378 | 379 | if(fseek(dst, dst_off, SEEK_SET) < 0) 380 | ferrordie(dst, "writing DOL segment data"); 381 | for(i=0; i= 2) 392 | fprintf(stderr, "Writing DOL file...\n"); 393 | 394 | dolf = fopen(dol, "wb"); 395 | if(!dolf) 396 | perrordie("Could not open DOL file"); 397 | 398 | if(verbosity >= 2) { 399 | fprintf(stderr, "DOL header:\n"); 400 | for(i=0; itext_cnt); i++) 401 | fprintf(stderr, " TEXT %d @ 0x%08x [0x%x] off 0x%x\n", i, 402 | swap32(map->header.text_addr[i]), swap32(map->header.text_size[i]), 403 | swap32(map->header.text_off[i])); 404 | for(i=0; idata_cnt); i++) 405 | fprintf(stderr, " DATA %d @ 0x%08x [0x%x] off 0x%x\n", i, 406 | swap32(map->header.data_addr[i]), swap32(map->header.data_size[i]), 407 | swap32(map->header.data_off[i])); 408 | if(swap32(map->header.bss_addr) && swap32(map->header.bss_size)) 409 | fprintf(stderr, " BSS @ 0x%08x [0x%x]\n", swap32(map->header.bss_addr), 410 | swap32(map->header.bss_size)); 411 | fprintf(stderr, " Entry: 0x%08x\n", swap32(map->header.entry)); 412 | fprintf(stderr, "Writing DOL header...\n"); 413 | } 414 | 415 | // Write DOL header with aligned text and data section sizes 416 | DOL_hdr aligned_header = map->header; 417 | for(i=0; itext_cnt; i++) { 426 | uint32_t size = swap32(map->header.text_size[i]); 427 | uint32_t padded_size = DOL_ALIGN(size); 428 | if(verbosity >= 2) 429 | fprintf(stderr, "Writing TEXT segment %d...\n", i); 430 | fcpy(dolf, map->elf, swap32(map->header.text_off[i]), map->text_elf_off[i], size); 431 | if (padded_size > size) 432 | fpad(dolf, swap32(map->header.text_off[i]) + size, padded_size - size); 433 | } 434 | for(i=0; idata_cnt; i++) { 435 | uint32_t size = swap32(map->header.data_size[i]); 436 | uint32_t padded_size = DOL_ALIGN(size); 437 | if(verbosity >= 2) 438 | fprintf(stderr, "Writing DATA segment %d...\n", i); 439 | fcpy(dolf, map->elf, swap32(map->header.data_off[i]), map->data_elf_off[i], size); 440 | if (padded_size > size) 441 | fpad(dolf, swap32(map->header.data_off[i]) + size, padded_size - size); 442 | } 443 | 444 | if(verbosity >= 2) 445 | fprintf(stderr, "All done!\n"); 446 | 447 | fclose(map->elf); 448 | fclose(dolf); 449 | } 450 | 451 | int main(int argc, char **argv) 452 | { 453 | char **arg; 454 | 455 | if(argc < 2) { 456 | usage(argv[0]); 457 | return 1; 458 | } 459 | arg = &argv[1]; 460 | argc--; 461 | 462 | while(argc && *arg[0] == '-') { 463 | if(!strcmp(*arg, "-h")) { 464 | usage(argv[0]); 465 | return 1; 466 | } else if(!strcmp(*arg, "-v")) { 467 | verbosity++; 468 | } else if(!strcmp(*arg, "--")) { 469 | arg++; 470 | argc--; 471 | break; 472 | } else { 473 | fprintf(stderr, "Unrecognized option %s\n", *arg); 474 | usage(argv[0]); 475 | return 1; 476 | } 477 | arg++; 478 | argc--; 479 | } 480 | if(argc < 2) { 481 | usage(argv[0]); 482 | exit(1); 483 | } 484 | 485 | const char *elf_file = arg[0]; 486 | const char *dol_file = arg[1]; 487 | 488 | DOL_map map; 489 | 490 | memset(&map, 0, sizeof(map)); 491 | 492 | read_elf_segments(&map, elf_file); 493 | map_dol(&map); 494 | write_dol(&map, dol_file); 495 | 496 | return 0; 497 | } 498 | -------------------------------------------------------------------------------- /tools/elf2rel.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #ifndef MAX 10 | #define MAX(a, b) (((a) > (b)) ? (a) : (b)) 11 | #endif 12 | 13 | #ifndef MIN 14 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 15 | #endif 16 | 17 | #define ARRAY_COUNT(arr) (sizeof(arr)/sizeof((arr)[0])) 18 | 19 | #define IS_LITTLE_ENDIAN (((char *)((uint32_t[]){1}))[0] == 1) 20 | 21 | // Relevant portions of elf.h 22 | 23 | typedef uint32_t Elf32_Addr; 24 | typedef uint32_t Elf32_Off; 25 | typedef uint32_t Elf32_Word; 26 | typedef int32_t Elf32_Sword; 27 | typedef uint16_t Elf32_Half; 28 | typedef uint16_t Elf32_Section; 29 | 30 | #define EI_NIDENT (16) 31 | 32 | typedef struct 33 | { 34 | unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ 35 | Elf32_Half e_type; /* Object file type */ 36 | Elf32_Half e_machine; /* Architecture */ 37 | Elf32_Word e_version; /* Object file version */ 38 | Elf32_Addr e_entry; /* Entry point virtual address */ 39 | Elf32_Off e_phoff; /* Program header table file offset */ 40 | Elf32_Off e_shoff; /* Section header table file offset */ 41 | Elf32_Word e_flags; /* Processor-specific flags */ 42 | Elf32_Half e_ehsize; /* ELF header size in bytes */ 43 | Elf32_Half e_phentsize; /* Program header table entry size */ 44 | Elf32_Half e_phnum; /* Program header table entry count */ 45 | Elf32_Half e_shentsize; /* Section header table entry size */ 46 | Elf32_Half e_shnum; /* Section header table entry count */ 47 | Elf32_Half e_shstrndx; /* Section header string table index */ 48 | } Elf32_Ehdr; 49 | 50 | #define EI_CLASS 4 /* File class byte index */ 51 | #define ELFCLASS32 1 /* 32-bit objects */ 52 | 53 | #define EI_DATA 5 /* Data encoding byte index */ 54 | #define ELFDATA2MSB 2 /* 2's complement, big endian */ 55 | 56 | #define EM_PPC 20 /* PowerPC */ 57 | 58 | typedef struct 59 | { 60 | Elf32_Word sh_name; /* Section name (string tbl index) */ 61 | Elf32_Word sh_type; /* Section type */ 62 | Elf32_Word sh_flags; /* Section flags */ 63 | Elf32_Addr sh_addr; /* Section virtual addr at execution */ 64 | Elf32_Off sh_offset; /* Section file offset */ 65 | Elf32_Word sh_size; /* Section size in bytes */ 66 | Elf32_Word sh_link; /* Link to another section */ 67 | Elf32_Word sh_info; /* Additional section information */ 68 | Elf32_Word sh_addralign; /* Section alignment */ 69 | Elf32_Word sh_entsize; /* Entry size if section holds table */ 70 | } Elf32_Shdr; 71 | 72 | #define SHT_PROGBITS 1 /* Program data */ 73 | #define SHT_SYMTAB 2 /* Symbol table */ 74 | #define SHT_STRTAB 3 /* String table */ 75 | #define SHT_RELA 4 /* Relocation entries with addends */ 76 | #define SHT_NOBITS 8 /* Program space with no data (bss) */ 77 | 78 | #define SHF_ALLOC (1 << 1) /* Occupies memory during execution */ 79 | #define SHF_EXECINSTR (1 << 2) /* Executable */ 80 | 81 | typedef struct 82 | { 83 | Elf32_Word st_name; /* Symbol name (string tbl index) */ 84 | Elf32_Addr st_value; /* Symbol value */ 85 | Elf32_Word st_size; /* Symbol size */ 86 | unsigned char st_info; /* Symbol type and binding */ 87 | unsigned char st_other; /* Symbol visibility */ 88 | Elf32_Section st_shndx; /* Section index */ 89 | } Elf32_Sym; 90 | 91 | #define ELF32_ST_TYPE(val) ((val) & 0xf) 92 | 93 | /* Legal values for ST_TYPE subfield of st_info (symbol type). */ 94 | 95 | #define STT_NOTYPE 0 /* Symbol type is unspecified */ 96 | #define STT_FUNC 2 /* Symbol is a code object */ 97 | 98 | typedef struct 99 | { 100 | Elf32_Addr r_offset; /* Address */ 101 | Elf32_Word r_info; /* Relocation type and symbol index */ 102 | Elf32_Sword r_addend; /* Addend */ 103 | } Elf32_Rela; 104 | 105 | /* How to extract and insert information held in the r_info field. */ 106 | 107 | #define ELF32_R_SYM(val) ((val) >> 8) 108 | #define ELF32_R_TYPE(val) ((val) & 0xff) 109 | 110 | #define R_PPC_NONE 0 111 | #define R_PPC_ADDR32 1 /* 32bit absolute address */ 112 | #define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ 113 | #define R_PPC_ADDR16 3 /* 16bit absolute address */ 114 | #define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ 115 | #define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ 116 | #define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ 117 | #define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ 118 | #define R_PPC_ADDR14_BRTAKEN 8 119 | #define R_PPC_ADDR14_BRNTAKEN 9 120 | #define R_PPC_REL24 10 /* PC relative 26 bit */ 121 | #define R_PPC_REL14 11 /* PC relative 16 bit */ 122 | 123 | #define R_DOLPHIN_SECTION 202 124 | #define R_DOLPHIN_END 203 125 | 126 | // end elf.h 127 | 128 | struct RelHeader 129 | { 130 | uint32_t moduleId; // unique module identifier 131 | uint32_t nextModule; // always 0; filled in at runtime 132 | uint32_t prevModule; // always 0; filled in at runtime 133 | uint32_t sectionCount; // number of sections in the section table 134 | uint32_t sectionTableOffset; // file position of section table 135 | uint32_t moduleNameOffset; // offset of the module name in the string table (not in this file) 136 | uint32_t moduleNameSize; // size of the module name in the string table (not in this file) 137 | uint32_t formatVersion; // REL format version 138 | uint32_t bssSize; // size of the BSS section 139 | uint32_t relocationTableOffset; // file position of relocation entries 140 | uint32_t importTableOffset; // file position of import table 141 | uint32_t importTableSize; // size of import table 142 | uint8_t prologSection; // section in which the _prolog function is in, or 0 if absent 143 | uint8_t epilogSection; // section in which the _epilog function is in, or 0 if absent 144 | uint8_t unresolvedSection; // section in which the _unresolved function is in, or 0 if absent 145 | uint8_t pad33; 146 | uint32_t prologOffset; // offset of the _prolog function in its section 147 | uint32_t epilogOffset; // offset of the _epilog function in its section 148 | uint32_t unresolvedOffset; // offset of the _unresolved function in its section 149 | uint32_t align; 150 | uint32_t bssAlign; 151 | uint32_t fixSize; 152 | }; 153 | 154 | struct RelRelocEntry 155 | { 156 | int type; // relocation type 157 | int patchSection; // section which relocation patch applies to 158 | uint32_t patchOffset; // offset where this relocation patch applies 159 | int symbolSection; // section of symbol 160 | uint32_t symbolAddr; // for dol symbols, absolute address. for rel symbols, section offset 161 | }; 162 | 163 | struct RelImportEntry 164 | { 165 | int moduleId; // ID of module from which the relocation symbols are imported from 166 | struct RelRelocEntry *relocs; // relocation entries 167 | int relocsCount; // number of relocation entries 168 | size_t relocsOffset; // file offset to relocation entries 169 | }; 170 | 171 | struct Module 172 | { 173 | int moduleId; // unique identifier of the module; the id of the DOL is always 0 174 | const char *filename; // name of the module's ELF file 175 | FILE *file; // ELF file 176 | Elf32_Ehdr ehdr; // ELF header 177 | Elf32_Sym *symtab; // ELF symbol table entries 178 | int symtabCount; // number of ELF symbol table entries 179 | char *strtab; // ELF string table 180 | size_t strtabSize; // size of ELF string table 181 | }; 182 | 183 | static struct Module dolModule; 184 | static struct Module relModule; 185 | static struct RelImportEntry *imports; 186 | static int importsCount = 0; 187 | static int minSectionCount = 0; 188 | static int undefinedSymError = 0; 189 | 190 | static void fatal_error(const char *msg, ...) 191 | { 192 | va_list args; 193 | 194 | va_start(args, msg); 195 | vfprintf(stderr, msg, args); 196 | va_end(args); 197 | exit(1); 198 | } 199 | 200 | // Swaps byte order if the system is little endian 201 | 202 | static void bswap32(uint32_t *ptr) 203 | { 204 | if (IS_LITTLE_ENDIAN) 205 | *ptr = (((*ptr >> 24) & 0xFF) << 0) 206 | | (((*ptr >> 16) & 0xFF) << 8) 207 | | (((*ptr >> 8) & 0xFF) << 16) 208 | | (((*ptr >> 0) & 0xFF) << 24); 209 | } 210 | 211 | static void bswap16(uint16_t *ptr) 212 | { 213 | if (IS_LITTLE_ENDIAN) 214 | *ptr = (((*ptr >> 8) & 0xFF) << 0) 215 | | (((*ptr >> 0) & 0xFF) << 8); 216 | } 217 | 218 | static int read_checked(FILE *f, size_t offset, void *out, size_t size) 219 | { 220 | return fseek(f, offset, SEEK_SET) == 0 221 | && fread(out, size, 1, f) == 1; 222 | } 223 | 224 | static int write_checked(FILE *f, size_t offset, const void *in, size_t size) 225 | { 226 | return fseek(f, offset, SEEK_SET) == 0 227 | && fwrite(in, size, 1, f) == 1; 228 | } 229 | 230 | static uint32_t align(uint32_t n, unsigned int alignment) 231 | { 232 | if (alignment == 0 || n % alignment == 0) 233 | return n; 234 | return n + alignment - (n % alignment); 235 | } 236 | 237 | static int is_supported_reloc_type(int type) 238 | { 239 | switch (type) 240 | { 241 | case R_PPC_ADDR32: 242 | case R_PPC_ADDR24: 243 | case R_PPC_ADDR16_LO: 244 | case R_PPC_ADDR16_HA: 245 | case R_PPC_REL24: 246 | case R_PPC_REL14: 247 | return 1; 248 | } 249 | return 0; 250 | } 251 | 252 | static const char *symbol_name(const struct Module *module, const Elf32_Sym *sym) 253 | { 254 | if (sym->st_name >= module->strtabSize) 255 | return NULL; 256 | return module->strtab + sym->st_name; 257 | } 258 | 259 | static int get_symtab_entry(const struct Module *module, int index, Elf32_Sym *sym) 260 | { 261 | if (index >= module->symtabCount) 262 | return 0; 263 | *sym = module->symtab[index]; 264 | bswap32(&sym->st_name); 265 | bswap32(&sym->st_value); 266 | bswap32(&sym->st_size); 267 | bswap16(&sym->st_shndx); 268 | return 1; 269 | } 270 | 271 | static int lookup_symbol_by_name(const struct Module *module, const char *name, Elf32_Sym *sym) 272 | { 273 | int i; 274 | 275 | for (i = 0; i < module->symtabCount; i++) 276 | { 277 | get_symtab_entry(module, i, sym); 278 | const char *n = symbol_name(module, sym); 279 | if (n != NULL && strcmp(name, n) == 0) 280 | return 1; 281 | } 282 | return 0; 283 | } 284 | 285 | static struct RelImportEntry *get_import_for_module_id(int moduleId) 286 | { 287 | int i; 288 | 289 | for (i = 0; i < importsCount; i++) 290 | { 291 | if (imports[i].moduleId == moduleId) 292 | return &imports[i]; 293 | } 294 | return NULL; 295 | } 296 | 297 | static void add_reloc_entry(const struct Module *module, const Elf32_Rela *reloc, int relocSection) 298 | { 299 | Elf32_Sym sym; 300 | int symIdx = ELF32_R_SYM(reloc->r_info); 301 | int relocType = ELF32_R_TYPE(reloc->r_info); 302 | struct RelRelocEntry rentry; 303 | struct RelImportEntry *import; 304 | int moduleId; // module containing the symbol 305 | 306 | if (!is_supported_reloc_type(relocType)) 307 | fatal_error("relocation type %i not supported\n", relocType); 308 | 309 | rentry.patchSection = relocSection; 310 | rentry.patchOffset = reloc->r_offset; 311 | rentry.type = relocType; 312 | 313 | // look for symbol in this module 314 | if (!get_symtab_entry(module, symIdx, &sym)) 315 | fatal_error("couldn't find symbol index %i\n", symIdx); 316 | if (sym.st_shndx != 0) // symbol is in this module 317 | { 318 | rentry.symbolSection = sym.st_shndx; 319 | rentry.symbolAddr = sym.st_value + reloc->r_addend; 320 | moduleId = module->moduleId; 321 | } 322 | else // symbol is in another module (the DOL) 323 | { 324 | const char *name = symbol_name(&relModule, &sym); 325 | if (!lookup_symbol_by_name(&dolModule, name, &sym)) 326 | { 327 | undefinedSymError = 1; 328 | fprintf(stderr, "could not find symbol '%s' in any module\n", name); 329 | return; 330 | } 331 | if (sym.st_shndx >= dolModule.ehdr.e_shnum) 332 | fatal_error("bad section index %i\n", sym.st_shndx); 333 | 334 | rentry.symbolSection = sym.st_shndx; 335 | rentry.symbolAddr = sym.st_value + reloc->r_addend; 336 | moduleId = dolModule.moduleId; 337 | } 338 | 339 | import = get_import_for_module_id(moduleId); 340 | // add import entry if it does not exist. 341 | if (import == NULL) 342 | { 343 | imports = realloc(imports, (importsCount + 1) * sizeof(*imports)); 344 | import = &imports[importsCount++]; 345 | import->moduleId = moduleId; 346 | import->relocs = NULL; 347 | import->relocsCount = 0; 348 | } 349 | 350 | // add relocation entry 351 | import->relocs = realloc(import->relocs, (import->relocsCount + 1) * sizeof(*import->relocs)); 352 | import->relocs[import->relocsCount++] = rentry; 353 | } 354 | 355 | static void module_get_section_header(const struct Module *module, int secNum, Elf32_Shdr *shdr) 356 | { 357 | size_t offset = module->ehdr.e_shoff + secNum * module->ehdr.e_shentsize; 358 | 359 | if (secNum >= module->ehdr.e_shnum) 360 | fatal_error("no such section index %i\n", secNum); 361 | if (!read_checked(module->file, offset, shdr, sizeof(*shdr))) 362 | fatal_error("error reading section header\n"); 363 | 364 | // convert from big endian 365 | bswap32(&shdr->sh_name); 366 | bswap32(&shdr->sh_type); 367 | bswap32(&shdr->sh_flags); 368 | bswap32(&shdr->sh_addr); 369 | bswap32(&shdr->sh_offset); 370 | bswap32(&shdr->sh_size); 371 | bswap32(&shdr->sh_link); 372 | bswap32(&shdr->sh_info); 373 | bswap32(&shdr->sh_addralign); 374 | bswap32(&shdr->sh_entsize); 375 | } 376 | 377 | static void module_read_relocs(struct Module *module) 378 | { 379 | int i; 380 | int j; 381 | 382 | undefinedSymError = 0; 383 | 384 | for (i = 0; i < (int)module->ehdr.e_shnum; i++) 385 | { 386 | Elf32_Shdr shdr; 387 | Elf32_Shdr forSection; 388 | 389 | module_get_section_header(module, i, &shdr); 390 | if (shdr.sh_type == SHT_RELA) 391 | { 392 | module_get_section_header(module, shdr.sh_info, &forSection); 393 | if (!(forSection.sh_flags & SHF_ALLOC)) 394 | continue; 395 | for (j = 0; j < shdr.sh_size / sizeof(Elf32_Rela); j++) 396 | { 397 | Elf32_Rela reloc; 398 | 399 | read_checked(module->file, shdr.sh_offset + j * sizeof(Elf32_Rela), &reloc, sizeof(reloc)); 400 | // convert from big endian 401 | bswap32(&reloc.r_offset); 402 | bswap32(&reloc.r_info); 403 | bswap32((uint32_t *)&reloc.r_addend); 404 | 405 | add_reloc_entry(&relModule, &reloc, shdr.sh_info); 406 | } 407 | } 408 | } 409 | 410 | if (undefinedSymError) 411 | exit(1); 412 | } 413 | 414 | static int open_module(struct Module *module) 415 | { 416 | int i; 417 | 418 | // open file 419 | module->file = fopen(module->filename, "rb"); 420 | if (module->file == NULL) 421 | fatal_error("could not open %s for reading: %s\n", module->filename, strerror(errno)); 422 | 423 | // read and verify ELF header 424 | if (!read_checked(module->file, 0, &module->ehdr, sizeof(module->ehdr))) 425 | fatal_error("error reading ELF header\n"); 426 | if (memcmp(module->ehdr.e_ident, "\x7F""ELF", 4) != 0) 427 | fatal_error("%s is not a valid ELF file\n", module->filename); 428 | 429 | // convert from big endian 430 | bswap16(&module->ehdr.e_type); 431 | bswap16(&module->ehdr.e_machine); 432 | bswap32(&module->ehdr.e_version); 433 | bswap32(&module->ehdr.e_entry); 434 | bswap32(&module->ehdr.e_phoff); 435 | bswap32(&module->ehdr.e_shoff); 436 | bswap32(&module->ehdr.e_flags); 437 | bswap16(&module->ehdr.e_ehsize); 438 | bswap16(&module->ehdr.e_phentsize); 439 | bswap16(&module->ehdr.e_phnum); 440 | bswap16(&module->ehdr.e_shentsize); 441 | bswap16(&module->ehdr.e_shnum); 442 | bswap16(&module->ehdr.e_shstrndx); 443 | 444 | if (module->ehdr.e_shentsize < sizeof(Elf32_Shdr)) 445 | fatal_error("invalid section header size"); 446 | 447 | // Verify architecture 448 | if (module->ehdr.e_ident[EI_CLASS] != ELFCLASS32 449 | || module->ehdr.e_ident[EI_DATA] != ELFDATA2MSB 450 | || module->ehdr.e_machine != EM_PPC) 451 | fatal_error("%s: wrong architecture. expected PowerPC 32-bit big endian.\n", module->filename); 452 | 453 | // Read symbol table and string table 454 | for (i = 0; i < (int)module->ehdr.e_shnum; i++) 455 | { 456 | Elf32_Shdr shdr; 457 | 458 | module_get_section_header(module, i, &shdr); 459 | if (shdr.sh_type == SHT_SYMTAB && module->symtab == NULL) 460 | { 461 | module->symtabCount = shdr.sh_size / sizeof(Elf32_Sym); 462 | module->symtab = malloc(shdr.sh_size); 463 | if (!read_checked(module->file, shdr.sh_offset, module->symtab, shdr.sh_size)) 464 | fatal_error("error reading symbol table\n"); 465 | } 466 | else if (shdr.sh_type == SHT_STRTAB && i != module->ehdr.e_shstrndx && module->strtab == NULL) 467 | { 468 | module->strtabSize = shdr.sh_size; 469 | module->strtab = malloc(shdr.sh_size); 470 | if (!read_checked(module->file, shdr.sh_offset, module->strtab, shdr.sh_size)) 471 | fatal_error("error reading string table\n"); 472 | } 473 | } 474 | if (module->symtab == NULL) 475 | fatal_error("%s does not have a symbol table.\n", module->filename); 476 | if (module->strtab == NULL) 477 | fatal_error("%s does not have a string table.\n", module->filename); 478 | 479 | return 1; 480 | } 481 | 482 | // searches for the special functions "_prolog", "_epliog", and "_unresolved" 483 | static void find_rel_entry_functions(const struct Module *module, struct RelHeader *relHdr) 484 | { 485 | int i; 486 | 487 | //puts("finding entry points"); 488 | for (i = 0; i < module->symtabCount; i++) 489 | { 490 | Elf32_Sym sym; 491 | Elf32_Shdr shdr; 492 | const char *name; 493 | 494 | get_symtab_entry(module, i, &sym); 495 | name = symbol_name(module, &sym); 496 | if (name == NULL) 497 | continue; 498 | if (strcmp(name, "_prolog") == 0) 499 | { 500 | module_get_section_header(module, sym.st_shndx, &shdr); 501 | relHdr->prologSection = sym.st_shndx; 502 | relHdr->prologOffset = sym.st_value - shdr.sh_addr; 503 | } 504 | else if (strcmp(name, "_epilog") == 0) 505 | { 506 | module_get_section_header(module, sym.st_shndx, &shdr); 507 | relHdr->epilogSection = sym.st_shndx; 508 | relHdr->epilogOffset = sym.st_value - shdr.sh_addr; 509 | } 510 | else if (strcmp(name, "_unresolved") == 0) 511 | { 512 | module_get_section_header(module, sym.st_shndx, &shdr); 513 | relHdr->unresolvedSection = sym.st_shndx; 514 | relHdr->unresolvedOffset = sym.st_value - shdr.sh_addr; 515 | } 516 | } 517 | } 518 | 519 | // patches the bl instruction at insnp to jump to offset 520 | static void patch_rel24_branch_offset(uint8_t *insnp, int32_t branchOffset) 521 | { 522 | const uint32_t offsetMask = 0x03FFFFFC; // bits of instruction that contain the offset 523 | uint32_t insn = (insnp[0] << 24) // read instruction 524 | | (insnp[1] << 16) 525 | | (insnp[2] << 8) 526 | | (insnp[3] << 0); 527 | 528 | assert(((insn >> 26) & 0x3F) == 18); // TODO: do other instructions besides bl use R_PPC_REL24? 529 | insn = (insn & ~offsetMask) | (branchOffset & offsetMask); // patch instruction 530 | // write instruction 531 | insnp[0] = (insn >> 24) & 0xFF; 532 | insnp[1] = (insn >> 16) & 0xFF; 533 | insnp[2] = (insn >> 8) & 0xFF; 534 | insnp[3] = (insn >> 0) & 0xFF; 535 | } 536 | 537 | static void patch_rel14_branch_offset(uint8_t *insnp, int32_t branchOffset) 538 | { 539 | const uint32_t offsetMask = 0x0000FFFC; // bits of instruction that contain the offset 540 | uint32_t insn = (insnp[0] << 24) // read instruction 541 | | (insnp[1] << 16) 542 | | (insnp[2] << 8) 543 | | (insnp[3] << 0); 544 | 545 | assert(((insn >> 26) & 0x3F) == 16); // TODO: do other instructions besides bc use R_PPC_REL14? 546 | insn = (insn & ~offsetMask) | (branchOffset & offsetMask); // patch instruction 547 | // write instruction 548 | insnp[0] = (insn >> 24) & 0xFF; 549 | insnp[1] = (insn >> 16) & 0xFF; 550 | insnp[2] = (insn >> 8) & 0xFF; 551 | insnp[3] = (insn >> 0) & 0xFF; 552 | } 553 | 554 | static void patch_code_relocs(struct RelHeader *relHdr, int sectionId, uint8_t *code, size_t size) 555 | { 556 | struct RelImportEntry *import; 557 | struct RelRelocEntry *reloc; 558 | int i; 559 | 560 | // Remove redundant R_PPC_REL24 relocations for calls to functions within 561 | // the same module 562 | import = get_import_for_module_id(relModule.moduleId); 563 | assert(import != NULL); 564 | for (i = 0, reloc = &import->relocs[0]; i < import->relocsCount; i++, reloc++) 565 | { 566 | if (reloc->patchSection == sectionId) 567 | { 568 | assert(reloc->patchOffset < size); 569 | if (reloc->type == R_PPC_REL24) 570 | { 571 | patch_rel24_branch_offset( 572 | code + reloc->patchOffset, 573 | reloc->symbolAddr - reloc->patchOffset); 574 | // remove the relocation 575 | reloc->type = R_PPC_NONE; 576 | } 577 | else if (reloc->type == R_PPC_REL14) 578 | { 579 | patch_rel14_branch_offset( 580 | code + reloc->patchOffset, 581 | reloc->symbolAddr - reloc->patchOffset); 582 | // remove the relocation 583 | reloc->type = R_PPC_NONE; 584 | } 585 | } 586 | } 587 | 588 | // Patch all calls to functions outside this module to jump to _unresolved 589 | // by default. 590 | if (relHdr->unresolvedSection == 0) 591 | return; 592 | import = get_import_for_module_id(0); 593 | assert(import != NULL); 594 | for (i = 0, reloc = &import->relocs[0]; i < import->relocsCount; i++, reloc++) 595 | { 596 | if (reloc->patchSection == sectionId && reloc->type == R_PPC_REL24) 597 | { 598 | assert(reloc->patchOffset < size); 599 | patch_rel24_branch_offset( 600 | code + reloc->patchOffset, 601 | relHdr->unresolvedOffset - reloc->patchOffset); 602 | } 603 | } 604 | } 605 | 606 | static int compare_relocs(const void *a, const void *b) 607 | { 608 | const struct RelRelocEntry *relocA = a; 609 | const struct RelRelocEntry *relocB = b; 610 | 611 | // Sort by sections to which these relocations apply 612 | if (relocA->patchSection != relocB->patchSection) 613 | return relocA->patchSection - relocB->patchSection; 614 | // Sort by patch offset 615 | if (relocA->patchOffset != relocB->patchOffset) 616 | return relocA->patchOffset - relocB->patchOffset; 617 | // Otherwise, leave the order alone 618 | return (uintptr_t)a - (uintptr_t)b; 619 | } 620 | 621 | static int compare_imports(const void *a, const void *b) 622 | { 623 | const struct RelImportEntry *impA = a; 624 | const struct RelImportEntry *impB = b; 625 | 626 | // return impA->moduleId - impB->moduleId; 627 | return impB->moduleId - impA->moduleId; 628 | } 629 | 630 | static void write_rel_file(struct Module *module, struct RelHeader *relHdr, const char *filename) 631 | { 632 | int i, j; 633 | size_t filePos = sizeof(struct RelHeader); // skip over header for now 634 | struct RelImportEntry *imp; 635 | FILE *fout = fopen(filename, "wb"); 636 | 637 | if (fout == NULL) 638 | fatal_error("could not open %s for writing: %s\n", filename, strerror(errno)); 639 | 640 | relHdr->moduleId = module->moduleId; 641 | relHdr->formatVersion = 3; 642 | 643 | find_rel_entry_functions(module, relHdr); 644 | 645 | // 1. Write section table and section contents 646 | 647 | relHdr->sectionTableOffset = filePos; 648 | relHdr->sectionCount = MAX(module->ehdr.e_shnum, minSectionCount); 649 | // section contents follow section info table 650 | filePos = relHdr->sectionTableOffset + relHdr->sectionCount * 8; 651 | relHdr->bssSize = 0; 652 | for (i = 0; i < module->ehdr.e_shnum; i++) 653 | { 654 | Elf32_Shdr shdr; 655 | struct { uint32_t offset; uint32_t size; } secEntry = {0}; 656 | 657 | module_get_section_header(module, i, &shdr); 658 | // write section contents 659 | if (shdr.sh_type == SHT_PROGBITS && (shdr.sh_flags & SHF_ALLOC)) 660 | { 661 | size_t sizeAligned = align(shdr.sh_size, 4); 662 | uint32_t execflg = (shdr.sh_flags & SHF_EXECINSTR) ? 1 : 0; 663 | 664 | filePos = align(filePos, shdr.sh_addralign); 665 | if (shdr.sh_size > 0) 666 | { 667 | uint8_t *data = calloc(sizeAligned, 1); 668 | 669 | if (!read_checked(module->file, shdr.sh_offset, data, shdr.sh_size)) 670 | fatal_error("error reading section\n"); 671 | if (execflg) 672 | patch_code_relocs(relHdr, i, data, sizeAligned); 673 | if (!write_checked(fout, filePos, data, shdr.sh_size)) 674 | fatal_error("error writing rel section\n"); 675 | free(data); 676 | } 677 | secEntry.offset = filePos | execflg; 678 | filePos += shdr.sh_size; 679 | } 680 | if (shdr.sh_flags & SHF_ALLOC) 681 | secEntry.size = shdr.sh_size; 682 | 683 | // write section table entry 684 | bswap32(&secEntry.offset); 685 | bswap32(&secEntry.size); 686 | write_checked(fout, relHdr->sectionTableOffset + i * 8, &secEntry, sizeof(secEntry)); 687 | 688 | // calculate total BSS size 689 | if ((shdr.sh_flags & SHF_ALLOC) && shdr.sh_type == SHT_NOBITS) 690 | relHdr->bssSize += shdr.sh_size; 691 | } 692 | 693 | // 2. Write relocation data 694 | 695 | // In version 3 RELs, this is AFTER the import table, so skip over the import table for now 696 | relHdr->importTableOffset = filePos; 697 | filePos += 8 * importsCount; 698 | relHdr->relocationTableOffset = filePos; 699 | // sort imports by module id 700 | qsort(imports, importsCount, sizeof(struct RelImportEntry), compare_imports); 701 | for (i = 0, imp = &imports[0]; i < importsCount; i++, imp++) 702 | { 703 | struct RelRelocEntry *reloc; 704 | int currSection = -1; 705 | uint32_t prevOffset = 0; 706 | struct 707 | { 708 | uint16_t offset; 709 | uint8_t type; 710 | uint8_t section; 711 | uint32_t symaddr; 712 | } ent; 713 | 714 | imp->relocsOffset = filePos; 715 | // sort relocation entries by section 716 | qsort(imp->relocs, imp->relocsCount, sizeof(struct RelRelocEntry), compare_relocs); 717 | for (j = 0, reloc = &imp->relocs[0]; j < imp->relocsCount; j++, reloc++) 718 | { 719 | if (reloc->type == R_PPC_NONE) // ignore null relocations 720 | continue; 721 | 722 | if (reloc->patchSection != currSection) // section changed 723 | { 724 | currSection = reloc->patchSection; 725 | 726 | // write section change 727 | ent.offset = 0; 728 | ent.type = R_DOLPHIN_SECTION; 729 | ent.section = reloc->patchSection; 730 | ent.symaddr = 0; 731 | bswap16(&ent.offset); 732 | bswap32(&ent.symaddr); 733 | if (!write_checked(fout, filePos, &ent, sizeof(ent))) 734 | fatal_error("error writing relocation entry"); 735 | 736 | filePos += sizeof(ent); 737 | prevOffset = 0; 738 | } 739 | 740 | // write relocation 741 | assert(reloc->patchOffset >= prevOffset); 742 | ent.offset = reloc->patchOffset - prevOffset; 743 | ent.type = reloc->type; 744 | ent.section = reloc->symbolSection; 745 | ent.symaddr = reloc->symbolAddr; 746 | bswap16(&ent.offset); 747 | bswap32(&ent.symaddr); 748 | if (!write_checked(fout, filePos, &ent, sizeof(ent))) 749 | fatal_error("error writing relocation entry"); 750 | 751 | filePos += sizeof(ent); 752 | prevOffset = reloc->patchOffset; 753 | } 754 | 755 | // write end 756 | ent.offset = 0; 757 | ent.type = R_DOLPHIN_END; 758 | ent.section = 0; 759 | ent.symaddr = 0; 760 | bswap16(&ent.offset); 761 | bswap32(&ent.symaddr); 762 | if (!write_checked(fout, filePos, &ent, sizeof(ent))) 763 | fatal_error("error writing relocation entry"); 764 | 765 | filePos += sizeof(ent); 766 | } 767 | 768 | // 3. Write module import table 769 | 770 | //relHdr->importTableOffset = filePos; 771 | for (i = 0, imp = &imports[0]; i < importsCount; i++, imp++) 772 | { 773 | // write import table entry 774 | struct { uint32_t moduleId; uint32_t relocsOffset; } ent; 775 | ent.moduleId = imp->moduleId; 776 | ent.relocsOffset = imp->relocsOffset; 777 | bswap32(&ent.moduleId); 778 | bswap32(&ent.relocsOffset); 779 | write_checked(fout, relHdr->importTableOffset + i * 8, &ent, sizeof(ent)); 780 | } 781 | relHdr->importTableSize = importsCount * 8; 782 | 783 | // 3.5. Write fixed values. VERSION 2/3 only! 784 | relHdr->align = 0x20; // TODO: Read me from a section. 785 | relHdr->bssAlign = 0x40; // TODO: Read me from bss section. 786 | relHdr->fixSize = relHdr->relocationTableOffset; // Only 1 REL is used, so we can just do this as a hack. 787 | 788 | // 4. Write REL header. 789 | 790 | // convert to big endian 791 | bswap32(&relHdr->moduleId); 792 | bswap32(&relHdr->sectionCount); 793 | bswap32(&relHdr->sectionTableOffset); 794 | bswap32(&relHdr->moduleNameOffset); 795 | bswap32(&relHdr->moduleNameSize); 796 | bswap32(&relHdr->formatVersion); 797 | bswap32(&relHdr->bssSize); 798 | bswap32(&relHdr->relocationTableOffset); 799 | bswap32(&relHdr->importTableOffset); 800 | bswap32(&relHdr->importTableSize); 801 | bswap32(&relHdr->prologOffset); 802 | bswap32(&relHdr->epilogOffset); 803 | bswap32(&relHdr->unresolvedOffset); 804 | bswap32(&relHdr->align); 805 | bswap32(&relHdr->bssAlign); 806 | bswap32(&relHdr->fixSize); 807 | write_checked(fout, 0, relHdr, sizeof(*relHdr)); 808 | 809 | fclose(fout); 810 | } 811 | 812 | static int parse_number(const char *str, int *n) 813 | { 814 | char *end; 815 | *n = strtol(str, &end, 0); 816 | return end > str && *end == 0; 817 | } 818 | 819 | int main(int argc, char **argv) 820 | { 821 | int i; 822 | int moduleId = -1; 823 | int nameOffset = 0; 824 | int nameLen = 0; 825 | const char *relName = NULL; 826 | struct RelHeader relHdr = {0}; 827 | 828 | // Read command-line args 829 | for (i = 1; i < argc; i++) 830 | { 831 | if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--pad-section-count") == 0) 832 | { 833 | if (i + 1 < argc && parse_number(argv[i + 1], &minSectionCount)) 834 | i++; 835 | else 836 | goto usage; 837 | } 838 | else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--module-id") == 0) 839 | { 840 | if (i + 1 < argc && parse_number(argv[i + 1], &moduleId)) 841 | i++; 842 | else 843 | goto usage; 844 | } 845 | else if (strcmp(argv[i], "-o") == 0 || strcmp(argv[i], "--name-offset") == 0) 846 | { 847 | if (i + 1 < argc && parse_number(argv[i + 1], &nameOffset)) 848 | i++; 849 | else 850 | goto usage; 851 | } 852 | else if (strcmp(argv[i], "-l") == 0 || strcmp(argv[i], "--name-length") == 0) 853 | { 854 | if (i + 1 < argc && parse_number(argv[i + 1], &nameLen)) 855 | i++; 856 | else 857 | goto usage; 858 | } 859 | else 860 | { 861 | if (relModule.filename == NULL) 862 | relModule.filename = argv[i]; 863 | else if (dolModule.filename == NULL) 864 | dolModule.filename = argv[i]; 865 | else if (relName == NULL) 866 | relName = argv[i]; 867 | else 868 | goto usage; 869 | } 870 | } 871 | if (relModule.filename == NULL || dolModule.filename == NULL || relName == NULL) 872 | goto usage; 873 | 874 | open_module(&relModule); 875 | open_module(&dolModule); 876 | 877 | dolModule.moduleId = 0; 878 | relModule.moduleId = moduleId; 879 | 880 | module_read_relocs(&relModule); 881 | 882 | // TODO: Read this information from string table 883 | relHdr.moduleNameOffset = nameOffset; 884 | relHdr.moduleNameSize = nameLen; 885 | write_rel_file(&relModule, &relHdr, relName); 886 | 887 | fclose(relModule.file); 888 | fclose(dolModule.file); 889 | 890 | free(dolModule.strtab); 891 | free(dolModule.symtab); 892 | for (i = 0; i < importsCount; i++) 893 | free(imports[i].relocs); 894 | free(imports); 895 | return 0; 896 | 897 | usage: 898 | fprintf(stderr, 899 | "usage: %s reloc_elf static_elf rel_file\n" 900 | "options:\n" 901 | " -i, --module-id sets the module ID in the rel header to \n" 902 | " -c, --pad-section-count ensures that the rel will have at least \n" 903 | " sections\n" 904 | " -o, --name-offset sets the name offset in the rel header to\n" 905 | " \n" 906 | " -l, --name-length sets the name length in the rel header to \n", 907 | argv[0]); 908 | return 1; 909 | } 910 | --------------------------------------------------------------------------------