summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2019-08-10 05:15:50 -0400
committerGitHub <noreply@github.com>2019-08-10 05:15:50 -0400
commit9e969601456fb0ef392910d505e0e0673a902bd3 (patch)
treeaf8fdeb1c6cdf9cd8584f0d693a4049bfc408b9d
parent250a331df9dbd312d572aaf0d629503417cfc9d4 (diff)
parentba6f243c728de5d5c024aeb177026bcc59909e2e (diff)
Merge pull request #4 from nullableVoidPtr/master
Overhaul
-rw-r--r--INSTALL.md8
-rwxr-xr-xMakefile174
-rw-r--r--README.md6
-rw-r--r--asm/bg_palette_buffer.s263
-rw-r--r--asm/code.s4
-rw-r--r--asm/code_800B540.s100
-rw-r--r--asm/code_800D090.s4
-rw-r--r--asm/code_8012A18.s272
-rw-r--r--asm/input.s94
-rw-r--r--asm/m4a.s4625
-rw-r--r--asm/m4a_1.s1647
-rw-r--r--asm/m4a_3.s574
-rw-r--r--asm/memory.s323
-rw-r--r--asm/rom_header.inc33
-rw-r--r--asm/save.s160
-rw-r--r--asm/sprite.s33
-rw-r--r--asm/text.s382
-rw-r--r--asmdiff.sh7
-rwxr-xr-xbuild_tools.sh10
-rw-r--r--charmap.txt217
-rw-r--r--constants/m4a_constants.inc199
-rw-r--r--data/data.s32
-rw-r--r--data/data_80B9BB8.s721
-rw-r--r--data/sound_data.s11
-rw-r--r--data/text/luminous_cave.inc131
-rw-r--r--data/text/party_menu.inc147
-rw-r--r--data/text/save.inc57
-rw-r--r--data/text/wonder_mail_1.inc347
-rw-r--r--data/text/wonder_mail_2.inc283
-rw-r--r--data/text/wonder_mail_3.inc68
-rw-r--r--data/text/wonder_mail_4.inc190
-rw-r--r--data/text/wonder_mail_complete.inc40
-rw-r--r--include/code_800558C.h6
-rw-r--r--include/code_800B540.h6
-rw-r--r--include/file_system.h34
-rw-r--r--include/gba/defines.h4
-rw-r--r--include/global.h14
-rw-r--r--include/macros/m4a.inc13
-rw-r--r--include/memory.h56
-rw-r--r--ld_script.sed14
-rwxr-xr-xld_script.txt41
-rw-r--r--red.sha11
-rw-r--r--rom.md51
-rw-r--r--sound/music_player_table.inc10
-rw-r--r--sound/song_table.inc942
-rw-r--r--src/bg_palette_buffer.c248
-rw-r--r--src/file_system.c66
-rw-r--r--src/flash.c3
-rw-r--r--src/m4a_2.c947
-rw-r--r--src/m4a_4.c384
-rw-r--r--src/m4a_tables.c223
-rw-r--r--src/memory.c145
-rw-r--r--src/save.c64
-rw-r--r--src/save1.c13
-rw-r--r--src/sprite.c10
-rw-r--r--src/text.c198
-rw-r--r--sym_ewram.txt1407
-rw-r--r--sym_ewram2.txt871
-rw-r--r--sym_iwram.txt102
59 files changed, 8878 insertions, 8107 deletions
diff --git a/INSTALL.md b/INSTALL.md
index b2440d2..de8142d 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -1,3 +1,5 @@
+First, you must put a Pokémon Mystery Dungeon Red Rescue Team 1.0 (US) ROM in the root directory of the repository and name it `baserom.gba`. It should have a SHA1 checksum of `9f4cfc5b5f4859d17169a485462e977c7aac2b89`. Then, follow the OS-specific instructions below.
+
# Linux
Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM).
@@ -10,7 +12,7 @@ Then get the compiler from https://github.com/pret/agbcc and run the following c
install.sh PATH_OF_PMD-RED_DIRECTORY
${DEVKITARM}/bin/arm-none-eabi/ranlib PATH_OF_PMD-RED_DIRECTORY/tools/agbcc/lib/libgcc.a lib/libc.a
-Then in the pokeruby directory, build the tools.
+Then in the pmd-red directory, build the tools.
build_tools.sh
@@ -22,6 +24,6 @@ Finally, build the rom.
Install [**devkitARM**](http://devkitpro.org/wiki/Getting_Started/devkitARM).
-Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pokeruby directory.
+Then get the compiled tools from https://github.com/pret/pokeruby-tools. Copy the `tools/` folder over the `tools/` folder in your pmd-red directory.
-You can then build pokeruby using `make` in the MSYS environment provided with devkitARM.
+You can then build pmd-red using `make` in the MSYS environment provided with devkitARM.
diff --git a/Makefile b/Makefile
index 6d5d120..cf08707 100755
--- a/Makefile
+++ b/Makefile
@@ -1,99 +1,133 @@
-AS := $(DEVKITARM)/bin/arm-none-eabi-as
-ASFLAGS := -mcpu=arm7tdmi
+include $(DEVKITARM)/base_tools
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+TITLE := POKE DUNGEON
+GAME_CODE := B24E
+MAKER_CODE := 01
+REVISION := 0
+
+#### Tools ####
+
+SHELL := /bin/bash -o pipefail
+AS := $(PREFIX)as
+CC1 := tools/agbcc/bin/agbcc
+CPP := $(PREFIX)cpp
+LD := $(PREFIX)ld
+OBJCOPY := $(PREFIX)objcopy
+SHA1SUM := sha1sum -c
+GBAGFX := tools/gbagfx/gbagfx
+GBAFIX := tools/gbafix/gbafix
+AIF2PCM := tools/aif2pcm/aif2pcm
+MID2AGB := tools/mid2agb/mid2agb
+PREPROC := tools/preproc/preproc
+SCANINC := tools/scaninc/scaninc
+RAMSCRGEN := tools/ramscrgen/ramscrgen
-CC1 := tools/agbcc/bin/agbcc
-override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
+ASFLAGS := -mcpu=arm7tdmi
+override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
+CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
-CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp
-CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
+#### Files ####
-LD := $(DEVKITARM)/bin/arm-none-eabi-ld
+BUILD_NAME = red
-OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy
+ROM := pmd_$(BUILD_NAME).gba
+MAP := $(ROM:%.gba=%.map)
-LIBGCC := tools/agbcc/lib/libgcc.a
-LIBC := tools/agbcc/lib/libc.a
+BUILD_DIR := build/pmd_$(BUILD_NAME)
-MD5 := md5sum -c
+C_SOURCES := $(wildcard src/*.c)
+ASM_SOURCES := $(wildcard asm/*.s data/*.s)
-GFX := tools/gbagfx/gbagfx
-AIF := tools/aif2pcm/aif2pcm
-MID := tools/mid2agb/mid2agb
-SCANINC := tools/scaninc/scaninc
-PREPROC := tools/preproc/preproc
-RAMSCRGEN := tools/ramscrgen/ramscrgen
+C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o))
+ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o))
+ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS)
-# Clear the default suffixes.
-.SUFFIXES:
+SUBDIRS := $(sort $(dir $(ALL_OBJECTS)))
-# Secondary expansion is required for dependency variables in object rules.
-.SECONDEXPANSION:
+ifeq ($(OS),Windows_NT)
+LIB := ../../tools/agbcc/lib/libc.a ../../tools/agbcc/lib/libgcc.a
+else
+LIB := -L ../../tools/agbcc/lib -lc -lgcc
+endif
-.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
+LD_SCRIPT := $(BUILD_DIR)/ld_script.ld
-.PHONY: all clean tidy
-
-C_SRCS := $(wildcard src/*.c)
-C_OBJS := $(C_SRCS:%.c=%.o)
+# Special configurations required for lib files
+$(BUILD_DIR)/src/agb_flash.o : CC1FLAGS := -O -mthumb-interwork
+$(BUILD_DIR)/src/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork
+$(BUILD_DIR)/src/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork
-ASM_SRCS := $(wildcard asm/*.s)
-ASM_OBJS := $(ASM_SRCS:%.s=%.o)
+$(BUILD_DIR)/src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc
+$(BUILD_DIR)/src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc
-DATA_ASM_SRCS := $(wildcard data/*.s)
-DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o)
+#### Main Rules ####
-OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS)
+# Disable dependency scanning when NODEP is used for quick building
+ifeq ($(NODEP),)
+$(BUILD_DIR)/src/%.o: C_DEP = $(shell $(SCANINC) -I include src/$(*F).c)
+$(BUILD_DIR)/asm/%.o: ASM_DEP = $(shell $(SCANINC) asm/$(*F).s)
+$(BUILD_DIR)/data/%.o: ASM_DEP = $(shell $(SCANINC) data/$(*F).s)
+endif
-all: pmd_red.gba
+ALL_BUILDS := red
-# For contributors to make sure a change didn't affect the contents of the ROM.
+# Available targets
+.PHONY: all clean tidy
-compare: all
- @$(MD5) rom.md5
+MAKEFLAGS += --no-print-directory
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
-clean: tidy
+.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
-tidy:
- rm -f pmd_red.gba pmd_red.elf pmd_red.map
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_OBJS)
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_SRCS:%.c=%.i)
- rm -f $(C_SRCS:%.c=%.s)
- rm -f *.ld
-src/agb_flash.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
+# Create build subdirectories
-$(C_OBJS): %.o : %.c
- @$(CPP) $(CPPFLAGS) $< -o $*.i
- @$(CC1) $(CFLAGS) $*.i -o $*.s
- @printf ".text\n\t.align\t2, 0\n" >> $*.s
- $(AS) $(ASFLAGS) -o $@ $*.s
+$(shell mkdir -p $(SUBDIRS))
-$(ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+all: $(ROM)
+
+compare: all
+ @$(SHA1SUM) $(BUILD_NAME).sha1
-$(DATA_ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+clean: tidy
+ $(RM) $(ALL_OBJECTS)
+tidy:
+ $(RM) $(ALL_BUILDS:%=pmd_%{.gba,.elf,.map})
+ $(RM) -r build
-sym_ewram.ld: sym_ewram.txt
- $(RAMSCRGEN) ewram_data sym_ewram.txt ENGLISH >$@
+$(ROM): %.gba: %.elf
+ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+ $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent
-sym_ewram2.ld: sym_ewram2.txt
- $(RAMSCRGEN) ewram_data sym_ewram2.txt ENGLISH >$@
+%.elf: $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC)
+ cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ $(LIB)
-sym_iwram.ld: sym_iwram.txt
- $(RAMSCRGEN) iwram_data sym_iwram.txt ENGLISH >$@
+$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_ewram2.ld $(BUILD_DIR)/sym_iwram.ld
+ cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
+$(BUILD_DIR)/sym_%.ld: sym_%.txt
+ $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
-ld_script.ld: ld_script.txt sym_ewram.ld sym_ewram2.ld sym_iwram.ld
- sed -f ld_script.sed ld_script.txt >ld_script.ld
+$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c $$(C_DEP)
+ @$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
+ @$(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
+ @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s
-pmd_red.elf: ld_script.ld $(OBJS) $(LIBC)
- $(LD) -T ld_script.ld -Map pmd_red.map -o $@ $(OBJS) $(LIBC) $(LIBGCC)
+$(BUILD_DIR)/data/%.o: data/%.s $$(ASM_DEP)
+ $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@
-pmd_red.gba: pmd_red.elf
- $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+$(BUILD_DIR)/%.o: %.s $$(ASM_DEP)
+ $(AS) $(ASFLAGS) $< -o $@
diff --git a/README.md b/README.md
index 4a5419d..070612d 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# Pokémon Mystery Dungeon: Red Rescue Team [![Build Status][travis-badge]][travis]
+# Pokémon Mystery Dungeon: Red Rescue Team
This is a disassembly of Pokémon Mystery Dungeon: Red Rescue Team.
It builds the following rom:
-* pmd_red.gba `md5: 2100cf6f17e12cd34f1513647dfa506b`
+* pmd_red.gba `sha1: 9f4cfc5b5f4859d17169a485462e977c7aac2b89`
To set up the repository, see [INSTALL.md](INSTALL.md).
@@ -33,5 +33,3 @@ To set up the repository, see [INSTALL.md](INSTALL.md).
[pokeemerald]: https://github.com/pret/pokeemerald
[Discord]: https://discord.gg/6EuWgX9
[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret
-[travis]: https://travis-ci.org/pret/pokeruby
-[travis-badge]: https://travis-ci.org/pret/pokeruby.svg?branch=master
diff --git a/asm/bg_palette_buffer.s b/asm/bg_palette_buffer.s
deleted file mode 100644
index 9b42ee5..0000000
--- a/asm/bg_palette_buffer.s
+++ /dev/null
@@ -1,263 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start InitBGPaletteBuffer
-InitBGPaletteBuffer:
- push {lr}
- movs r2, 0
- ldr r1, _0800465C
- movs r0, 0x80
- lsls r0, 2
-_0800463E:
- strh r2, [r1]
- adds r1, 0x2
- subs r0, 0x1
- cmp r0, 0
- bne _0800463E
- ldr r1, _08004660
- movs r2, 0x1
- adds r0, r1, 0
- adds r0, 0x1F
-_08004650:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _08004650
- pop {r0}
- bx r0
- .align 2, 0
-_0800465C: .4byte gUnknown_20251F0
-_08004660: .4byte gUnknown_20251D0
- thumb_func_end InitBGPaletteBuffer
-
- thumb_func_start SetBGPaletteBufferColorRGB
-SetBGPaletteBufferColorRGB:
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- cmp r2, 0
- bge _08004670
- movs r2, 0
-_08004670:
- cmp r2, 0x1F
- ble _08004676
- movs r2, 0x1F
-_08004676:
- ldr r1, _080046CC
- adds r0, r4, 0
- cmp r4, 0
- bge _08004680
- adds r0, 0xF
-_08004680:
- asrs r0, 4
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- cmp r3, 0
- bne _080046D4
- ldr r0, _080046D0
- lsls r1, r4, 1
- adds r6, r1, r0
- ldrb r0, [r5, 0x2]
- muls r0, r2
- cmp r0, 0
- bge _0800469C
- adds r0, 0xFF
-_0800469C:
- asrs r0, 8
- movs r3, 0x1F
- ands r0, r3
- lsls r4, r0, 10
- ldrb r0, [r5, 0x1]
- muls r0, r2
- cmp r0, 0
- bge _080046AE
- adds r0, 0xFF
-_080046AE:
- asrs r0, 8
- ands r0, r3
- lsls r1, r0, 5
- orrs r1, r4
- ldrb r0, [r5]
- muls r0, r2
- cmp r0, 0
- bge _080046C0
- adds r0, 0xFF
-_080046C0:
- asrs r0, 8
- ands r0, r3
- orrs r1, r0
- strh r1, [r6]
- b _08004722
- .align 2, 0
-_080046CC: .4byte gUnknown_20251D0
-_080046D0: .4byte gUnknown_20251F0
-_080046D4:
- ldr r1, _08004728
- lsls r0, r4, 1
- adds r7, r0, r1
- ldrb r0, [r5, 0x2]
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x2]
- muls r0, r2
- cmp r0, 0
- bge _080046EA
- adds r0, 0xFF
-_080046EA:
- asrs r0, 8
- movs r4, 0x1F
- ands r0, r4
- lsls r6, r0, 10
- ldrb r0, [r5, 0x1]
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x1]
- muls r0, r2
- cmp r0, 0
- bge _08004702
- adds r0, 0xFF
-_08004702:
- asrs r0, 8
- ands r0, r4
- lsls r1, r0, 5
- orrs r1, r6
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0]
- muls r0, r2
- cmp r0, 0
- bge _0800471A
- adds r0, 0xFF
-_0800471A:
- asrs r0, 8
- ands r0, r4
- orrs r1, r0
- strh r1, [r7]
-_08004722:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08004728: .4byte gUnknown_20251F0
- thumb_func_end SetBGPaletteBufferColorRGB
-
- thumb_func_start SetBGPaletteBufferColorArray
-SetBGPaletteBufferColorArray:
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldr r1, _08004764
- cmp r2, 0
- bge _0800473A
- adds r0, 0xF
-_0800473A:
- asrs r0, 4
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _08004768
- lsls r2, 1
- adds r2, r0
- ldrb r1, [r3, 0x2]
- lsrs r1, 3
- lsls r1, 10
- ldrb r0, [r3, 0x1]
- lsrs r0, 3
- lsls r0, 5
- orrs r1, r0
- ldrb r0, [r3]
- lsrs r0, 3
- orrs r0, r1
- strh r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_08004764: .4byte gUnknown_20251D0
-_08004768: .4byte gUnknown_20251F0
- thumb_func_end SetBGPaletteBufferColorArray
-
- thumb_func_start SetBGPaletteBufferColor
-SetBGPaletteBufferColor:
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldr r1, _08004790
- cmp r2, 0
- bge _0800477A
- adds r0, 0xF
-_0800477A:
- asrs r0, 4
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r1, _08004794
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r3]
- strh r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08004790: .4byte gUnknown_20251D0
-_08004794: .4byte gUnknown_20251F0
- thumb_func_end SetBGPaletteBufferColor
-
- thumb_func_start nullsub_4
-nullsub_4:
- bx lr
- thumb_func_end nullsub_4
-
- thumb_func_start nullsub_5
-nullsub_5:
- bx lr
- thumb_func_end nullsub_5
-
- thumb_func_start nullsub_143
-nullsub_143:
- bx lr
- thumb_func_end nullsub_143
-
- thumb_func_start TransferBGPaletteBuffer
-TransferBGPaletteBuffer:
- push {r4-r6,lr}
- movs r6, 0
- movs r4, 0
- movs r5, 0xA0
- lsls r5, 19
-_080047AE:
- ldr r0, _080047DC
- adds r1, r6, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _080047CA
- movs r0, 0
- strb r0, [r1]
- lsls r1, r4, 1
- ldr r0, _080047E0
- adds r1, r0
- adds r0, r5, 0
- movs r2, 0x20
- bl CpuCopy
-_080047CA:
- adds r6, 0x1
- adds r5, 0x20
- adds r4, 0x10
- ldr r0, _080047E4
- cmp r4, r0
- ble _080047AE
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080047DC: .4byte gUnknown_20251D0
-_080047E0: .4byte gUnknown_20251F0
-_080047E4: .4byte 0x000001ff
- thumb_func_end TransferBGPaletteBuffer
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/code.s b/asm/code.s
index ba969d1..8a85646 100644
--- a/asm/code.s
+++ b/asm/code.s
@@ -198,7 +198,7 @@ _08000406:
movs r0, 0x2
bl sub_800A8F8
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl xxx_update_some_bg_tiles
bl sub_80097B0
@@ -431,7 +431,7 @@ xxx_update_stuff:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/code_800B540.s b/asm/code_800B540.s
index 1f7afbc..85105f7 100644
--- a/asm/code_800B540.s
+++ b/asm/code_800B540.s
@@ -1062,7 +1062,7 @@ sub_800BD08:
ands r3, r1
strh r3, [r0, 0xA]
ldrh r0, [r0, 0xA]
- bl sub_80AEF24
+ bl m4aSoundInit
ldr r0, _0800BDB8
movs r2, 0
strh r2, [r0]
@@ -1184,7 +1184,7 @@ _0800BE4C:
movs r0, 0x1
strh r0, [r1]
adds r0, r6, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
_0800BE70:
cmp r4, 0
beq _0800BE78
@@ -1258,19 +1258,19 @@ _0800BEE0:
movs r1, 0x1
strh r1, [r0]
adds r0, r6, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
ldr r4, _0800BF44
adds r0, r4, 0
- bl sub_80AF198
+ bl m4aMPlayImmInit
adds r0, r4, 0
movs r1, 0xFF
movs r2, 0
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
adds r0, r6, 0
- bl sub_80AF074
+ bl m4aSongNumStop
adds r0, r4, 0
adds r1, r5, 0
- bl sub_80AF170
+ bl m4aMPlayFadeIn
_0800BF26:
cmp r7, 0
beq _0800BF2E
@@ -1333,7 +1333,7 @@ sub_800BF80:
cmp r1, r0
beq _0800BFA2
ldr r0, _0800BFC8
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800BFA2:
ldr r0, _0800BFC0
ldr r2, _0800BFC4
@@ -1392,7 +1392,7 @@ _0800BFE8:
strh r0, [r1]
ldr r0, _0800C028
adds r1, r4, 0
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C044
.align 2, 0
_0800C018: .4byte gUnknown_202D690
@@ -1403,7 +1403,7 @@ _0800C028: .4byte gUnknown_20008F0
_0800C02C:
strh r2, [r3]
ldr r0, _0800C038
- bl sub_80AF7C0
+ bl m4aMPlayStop
b _0800C044
.align 2, 0
_0800C038: .4byte gUnknown_20008F0
@@ -1506,7 +1506,7 @@ _0800C0B4:
strb r2, [r0]
ldr r0, _0800C11C
movs r1, 0x1
- bl sub_80AF150
+ bl m4aMPlayFadeOutTemporarily
b _0800C15E
.align 2, 0
_0800C0FC: .4byte 0x000003e5
@@ -1529,9 +1529,9 @@ _0800C12C:
movs r0, 0x3
strh r0, [r4]
ldr r0, _0800C140
- bl sub_80AF7C0
+ bl m4aMPlayStop
ldrh r0, [r6]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800C15E
.align 2, 0
_0800C140: .4byte gUnknown_20008F0
@@ -1542,9 +1542,9 @@ _0800C144:
cmp r0, 0x1
bls _0800C15E
ldr r0, _0800C17C
- bl sub_80AF7C0
+ bl m4aMPlayStop
ldrh r0, [r6]
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x3
_0800C15C:
strh r0, [r4]
@@ -1618,7 +1618,7 @@ _0800C1DC:
lsls r0, 24
lsrs r5, r0, 24
mov r0, r8
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x1
strh r0, [r4]
mov r0, r8
@@ -1693,7 +1693,7 @@ _0800C22C:
mov r0, r8
movs r1, 0xF
adds r2, r7, 0
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
_0800C27E:
cmp r6, 0
beq _0800C286
@@ -1705,7 +1705,7 @@ _0800C286:
pop {r0}
bx r0
.align 2, 0
-_0800C290: .4byte gUnknown_9E8665C
+_0800C290: .4byte gMPlayTable
_0800C294: .4byte gUnknown_3000FD8
thumb_func_end sub_800C214
@@ -1736,7 +1736,7 @@ sub_800C298:
movs r5, 0x4
_0800C2C8:
ldr r0, [r6]
- bl sub_80AF7C0
+ bl m4aMPlayStop
strh r7, [r4]
mov r2, r8
strh r2, [r4, 0x2]
@@ -1756,7 +1756,7 @@ _0800C2C8:
.align 2, 0
_0800C2F0: .4byte 0x000003e5
_0800C2F4: .4byte gUnknown_3000FE8
-_0800C2F8: .4byte gUnknown_9E8665C
+_0800C2F8: .4byte gMPlayTable
_0800C2FC:
adds r0, r5, 0
bl sub_800CAAC
@@ -1782,7 +1782,7 @@ _0800C2FC:
bl nullsub_21
b _0800C3DE
.align 2, 0
-_0800C330: .4byte gUnknown_9E8665C
+_0800C330: .4byte gMPlayTable
_0800C334: .4byte gUnknown_3000FD8
_0800C338:
bl sub_800B620
@@ -1792,7 +1792,7 @@ _0800C338:
cmp r0, r5
bne _0800C35A
adds r0, r7, 0
- bl sub_80AF7C0
+ bl m4aMPlayStop
movs r1, 0
movs r0, 0
strh r0, [r4]
@@ -1823,7 +1823,7 @@ _0800C364:
mov r0, r8
strh r0, [r1]
ldr r0, _0800C3A4
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C38C:
cmp r4, 0
beq _0800C3DE
@@ -1854,7 +1854,7 @@ _0800C3A8:
mov r2, r8
strh r2, [r1]
ldr r0, _0800C3F4
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C3D6:
cmp r4, 0
beq _0800C3DE
@@ -1924,15 +1924,15 @@ _0800C43E:
beq _0800C46C
ldr r0, [r6]
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C47E
.align 2, 0
_0800C460: .4byte 0x000003e5
_0800C464: .4byte gUnknown_3000FE8
-_0800C468: .4byte gUnknown_9E8665C
+_0800C468: .4byte gMPlayTable
_0800C46C:
ldr r0, [r6]
- bl sub_80AF7C0
+ bl m4aMPlayStop
strh r4, [r5]
mov r1, r8
strh r1, [r5, 0x2]
@@ -1985,14 +1985,14 @@ _0800C496:
beq _0800C4EC
adds r0, r6, 0
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C4FE
.align 2, 0
_0800C4E4: .4byte gUnknown_3000FD8
-_0800C4E8: .4byte gUnknown_9E8665C
+_0800C4E8: .4byte gMPlayTable
_0800C4EC:
adds r0, r6, 0
- bl sub_80AF7C0
+ bl m4aMPlayStop
movs r0, 0
strh r4, [r5]
mov r1, r8
@@ -2026,7 +2026,7 @@ _0800C508:
beq _0800C54C
ldr r0, _0800C548
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C556
.align 2, 0
_0800C53C: .4byte 0x000003e6
@@ -2035,7 +2035,7 @@ _0800C544: .4byte gUnknown_202D68E
_0800C548: .4byte gUnknown_2000970
_0800C54C:
ldr r0, _0800C560
- bl sub_80AF7C0
+ bl m4aMPlayStop
mov r0, r8
strh r0, [r4]
_0800C556:
@@ -2069,7 +2069,7 @@ _0800C564:
beq _0800C5AC
ldr r0, _0800C5A8
mov r1, r9
- bl sub_80AF140
+ bl m4aMPlayFadeOut
b _0800C5B6
.align 2, 0
_0800C5A0: .4byte gUnknown_202D690
@@ -2077,7 +2077,7 @@ _0800C5A4: .4byte gUnknown_202D68E
_0800C5A8: .4byte gUnknown_2000970
_0800C5AC:
ldr r0, _0800C5CC
- bl sub_80AF7C0
+ bl m4aMPlayStop
mov r1, r8
strh r1, [r5]
_0800C5B6:
@@ -2246,7 +2246,7 @@ _0800C6D8:
beq _0800C718
ldrh r0, [r2]
_0800C6E4:
- bl sub_80AEFA8
+ bl m4aSongNumStart
movs r0, 0x3
strh r0, [r4]
b _0800C8A2
@@ -2297,7 +2297,7 @@ _0800C74C: .4byte gUnknown_202D68E
_0800C750: .4byte 0x000003e5
_0800C754:
ldr r0, _0800C76C
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C75A:
ldr r1, _0800C770
ldrh r0, [r1]
@@ -2324,7 +2324,7 @@ _0800C774:
cmp r0, 0
beq _0800C7A4
ldrh r0, [r3]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800C7BE
.align 2, 0
_0800C794: .4byte gUnknown_202D68A
@@ -2334,7 +2334,7 @@ _0800C7A0: .4byte gUnknown_202D694
_0800C7A4:
ldr r0, _0800C7B0
movs r1, 0x4
- bl sub_80AF170
+ bl m4aMPlayFadeIn
b _0800C7BE
.align 2, 0
_0800C7B0: .4byte gUnknown_20008F0
@@ -2342,7 +2342,7 @@ _0800C7B4:
ldr r0, _0800C7CC
strh r2, [r0]
ldr r0, _0800C7D0
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C7BE:
ldr r1, _0800C7D4
movs r0, 0
@@ -2402,7 +2402,7 @@ _0800C834: .4byte gUnknown_202D68A
_0800C838: .4byte 0x000003e7
_0800C83C:
ldr r0, _0800C854
- bl sub_80AF7C0
+ bl m4aMPlayStop
_0800C842:
ldr r1, _0800C858
movs r0, 0
@@ -2436,7 +2436,7 @@ _0800C864:
ldr r0, _0800C898
strh r2, [r0]
adds r0, r1, 0
- bl sub_80AEFA8
+ bl m4aSongNumStart
strh r4, [r6]
b _0800C8A2
.align 2, 0
@@ -2503,10 +2503,10 @@ _0800C8F0:
ldr r0, [r0]
ldrh r2, [r4, 0x4]
movs r1, 0xFF
- bl sub_80AFF50
+ bl m4aMPlayVolumeControl
b _0800C926
.align 2, 0
-_0800C918: .4byte gUnknown_9E8665C
+_0800C918: .4byte gMPlayTable
_0800C91C:
strh r0, [r4]
mov r1, r8
@@ -2579,8 +2579,8 @@ _0800C9A8:
strh r0, [r4]
_0800C9AC:
ldr r0, _0800C9C8
- bl sub_80AF7C0
- bl sub_80AF5AC
+ bl m4aMPlayStop
+ bl m4aSoundVSyncOff
cmp r5, 0
beq _0800C9BE
bl sub_800B5F0
@@ -2599,7 +2599,7 @@ sub_800C9CC:
bl sub_800B620
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80AF628
+ bl m4aSoundVSyncOn
ldr r0, _0800CA08
ldrh r0, [r0]
cmp r0, 0
@@ -2620,7 +2620,7 @@ sub_800C9CC:
cmp r0, 0
beq _0800CA1C
ldrh r0, [r2]
- bl sub_80AEFA8
+ bl m4aSongNumStart
b _0800CA22
.align 2, 0
_0800CA08: .4byte gUnknown_202D690
@@ -2630,7 +2630,7 @@ _0800CA14: .4byte gUnknown_202D688
_0800CA18: .4byte gUnknown_202D694
_0800CA1C:
ldr r0, _0800CA30
- bl sub_80AF108
+ bl m4aMPlayContinue
_0800CA22:
cmp r4, 0
beq _0800CA2A
@@ -2762,7 +2762,7 @@ sub_800CAE0:
ldrh r0, [r0, 0x4]
bx lr
.align 2, 0
-_0800CAEC: .4byte gUnknown_9E866BC
+_0800CAEC: .4byte gSongTable
thumb_func_end sub_800CAE0
thumb_func_start sub_800CAF0
@@ -2782,7 +2782,7 @@ sub_800CAF0:
movs r0, 0x1
b _0800CB12
.align 2, 0
-_0800CB0C: .4byte gUnknown_9E8665C
+_0800CB0C: .4byte gMPlayTable
_0800CB10:
movs r0, 0
_0800CB12:
diff --git a/asm/code_800D090.s b/asm/code_800D090.s
index 583fe83..4f43b66 100644
--- a/asm/code_800D090.s
+++ b/asm/code_800D090.s
@@ -7661,7 +7661,7 @@ sub_8010960:
bl xxx_call_update_bg_sound_input
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r4-r6}
pop {r0}
bx r0
@@ -9290,7 +9290,7 @@ sub_801169C:
bl xxx_call_update_bg_sound_input
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
add sp, 0x8
pop {r4-r6}
pop {r0}
diff --git a/asm/code_8012A18.s b/asm/code_8012A18.s
index bf8e220..e462a67 100644
--- a/asm/code_8012A18.s
+++ b/asm/code_8012A18.s
@@ -25,7 +25,7 @@ sub_8012A18:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
.align 2, 0
@@ -4698,7 +4698,7 @@ _08014E10:
adds r4, r1, r0
b _08014F0C
.align 2, 0
-_08014E20: .4byte gUnknown_202D3B8
+_08014E20: .4byte gFileCache + 0x110
_08014E24:
adds r5, 0x1
movs r0, 0
@@ -17484,7 +17484,7 @@ sub_801B3C0:
push {r4,r5,lr}
adds r5, r0, 0
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r4, _0801B40C
movs r0, 0x94
movs r1, 0x8
@@ -19806,7 +19806,7 @@ sub_801C620:
lsls r4, 24
lsrs r4, 24
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _0801C670
movs r0, 0x94
movs r1, 0x8
@@ -26163,7 +26163,7 @@ sub_801F808:
push {r4,r5,lr}
adds r4, r0, 0
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _0801F88C
movs r0, 0xD4
movs r1, 0x8
@@ -41273,7 +41273,7 @@ _0802706E:
sub_8027074:
push {r4,lr}
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
ldr r4, _080270A0
movs r0, 0xF0
lsls r0, 1
@@ -73146,7 +73146,7 @@ sub_8036FDC:
movs r2, 0x1
bl sub_800641C
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
ldr r5, _080370C0
ldr r0, [r5]
cmp r0, 0
@@ -73610,7 +73610,7 @@ sub_80373C4:
bl sub_8009908
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r0}
bx r0
thumb_func_end sub_80373C4
@@ -76245,7 +76245,7 @@ sub_8038830:
add r0, r12
str r5, [r0]
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
pop {r4,r5}
pop {r0}
bx r0
@@ -86812,10 +86812,10 @@ _0803DB54:
.align 2, 0
_0803DB84: .4byte gUnknown_80F60F8
_0803DB88: .4byte gUnknown_83B0000
-_0803DB8C: .4byte gUnknown_202EC88
+_0803DB8C: .4byte gDungeonNameBannerPalette
_0803DB90: .4byte gUnknown_80F6100
-_0803DB94: .4byte gUnknown_202EC8C
-_0803DB98: .4byte gUnknown_202EC90
+_0803DB94: .4byte gDungeonNameBannerFontFile
+_0803DB98: .4byte gDungeonNameBannerFont
_0803DB9C: .4byte 0x06000140
_0803DBA0: .4byte gUnknown_203B418
_0803DBA4: .4byte 0x00000645
@@ -86862,7 +86862,7 @@ _0803DBEA:
.align 2, 0
_0803DC08: .4byte gUnknown_80F6118
_0803DC0C: .4byte gUnknown_20274A5
-_0803DC10: .4byte gUnknown_202EC8C
+_0803DC10: .4byte gDungeonNameBannerFontFile
thumb_func_end ShowDungeonNameBanner
thumb_func_start sub_803DC14
@@ -87273,7 +87273,7 @@ sub_803DEC8:
adds r1, r5, r0
b _0803DF56
.align 2, 0
-_0803DEFC: .4byte gUnknown_202EC8C
+_0803DEFC: .4byte gDungeonNameBannerFontFile
_0803DF00: .4byte 0xffff0800
_0803DF04: .4byte 0x000007fe
_0803DF08:
@@ -87287,7 +87287,7 @@ _0803DF08:
adds r0, r2, r0
b _0803DF3A
.align 2, 0
-_0803DF1C: .4byte gUnknown_202EC90
+_0803DF1C: .4byte gDungeonNameBannerFont
_0803DF20:
lsls r0, r1, 3
adds r0, r5
@@ -88114,7 +88114,7 @@ _0803E5A2:
bl sub_8011860
bl sub_8040B60
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
ldr r1, _0803E664
@@ -88186,7 +88186,7 @@ sub_803E668:
strb r1, [r0]
bl sub_8011860
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
ldr r0, [r4]
@@ -88555,7 +88555,7 @@ _0803E9B4: .4byte 0x00018215
_0803E9B8: .4byte 0x0001c06c
_0803E9BC: .4byte gUnknown_202EE8C
_0803E9C0: .4byte gUnknown_202ECA4
-_0803E9C4: .4byte gUnknown_202EC88
+_0803E9C4: .4byte gDungeonNameBannerPalette
_0803E9C8: .4byte gUnknown_202D058
_0803E9CC: .4byte 0x000181e4
thumb_func_end sub_803E874
@@ -99078,7 +99078,7 @@ _08043984: .4byte 0xff00ffff
_08043988: .4byte gUnknown_202EDC8
_0804398C: .4byte gUnknown_81006A4
_08043990: .4byte 0x00000222
-_08043994: .4byte gUnknown_202EC88
+_08043994: .4byte gDungeonNameBannerPalette
_08043998: .4byte gUnknown_203B40C
_0804399C: .4byte gUnknown_203B41C
_080439A0:
@@ -104471,7 +104471,7 @@ sub_8046298:
ldrb r0, [r0, 0xD]
bx lr
.align 2, 0
-_080462A8: .4byte gUnknown_20389A4
+_080462A8: .4byte gItemParametersFile + 4
thumb_func_end sub_8046298
thumb_func_start sub_80462AC
@@ -245668,8 +245668,8 @@ _0808CDE4: .4byte gUnknown_203B45C
_0808CDE8: .4byte gUnknown_202F400
_0808CDEC: .4byte gUnknown_81075F4
_0808CDF0: .4byte gUnknown_8300500
-_0808CDF4: .4byte gUnknown_202F3E4
-_0808CDF8: .4byte gUnknown_202F3E0
+_0808CDF4: .4byte gMonsterParametersFile
+_0808CDF8: .4byte gMonsterParameters
_0808CDFC: .4byte gUnknown_20384E8
thumb_func_end LoadMonsterParameters
@@ -245907,7 +245907,7 @@ _0808CFB8:
pop {r0}
bx r0
.align 2, 0
-_0808CFC8: .4byte gUnknown_202F3E0
+_0808CFC8: .4byte gMonsterParameters
_0808CFCC: .4byte gUnknown_203B45C
thumb_func_end sub_808CE74
@@ -246197,7 +246197,7 @@ sub_808D1DC:
bne _0808D238
b _0808D268
.align 2, 0
-_0808D204: .4byte gUnknown_202F3E0
+_0808D204: .4byte gMonsterParameters
_0808D208: .4byte gUnknown_203B468
_0808D20C:
ldr r0, [r7]
@@ -246278,7 +246278,7 @@ sub_808D278:
bne _0808D2AA
b _0808D2DA
.align 2, 0
-_0808D29C: .4byte gUnknown_202F3E0
+_0808D29C: .4byte gMonsterParameters
_0808D2A0: .4byte gUnknown_203B468
_0808D2A4:
ldr r0, [r7]
@@ -247194,7 +247194,7 @@ sub_808D8BC:
pop {r0}
bx r0
.align 2, 0
-_0808D8DC: .4byte gUnknown_202F3E0
+_0808D8DC: .4byte gMonsterParameters
thumb_func_end sub_808D8BC
thumb_func_start sub_808D8E0
@@ -247216,7 +247216,7 @@ sub_808D8E0:
bx r0
.align 2, 0
_0808D900: .4byte gUnknown_8107600
-_0808D904: .4byte gUnknown_202F3E0
+_0808D904: .4byte gMonsterParameters
thumb_func_end sub_808D8E0
thumb_func_start sub_808D908
@@ -247238,7 +247238,7 @@ sub_808D908:
bx r0
.align 2, 0
_0808D928: .4byte gUnknown_8107608
-_0808D92C: .4byte gUnknown_202F3E0
+_0808D92C: .4byte gMonsterParameters
thumb_func_end sub_808D908
thumb_func_start sub_808D930
@@ -247287,7 +247287,7 @@ _0808D986:
bx r0
.align 2, 0
_0808D98C: .4byte gUnknown_8107638
-_0808D990: .4byte gUnknown_202F3E0
+_0808D990: .4byte gMonsterParameters
thumb_func_end sub_808D930
thumb_func_start sub_808D994
@@ -247303,7 +247303,7 @@ sub_808D994:
ldr r0, [r1]
bx lr
.align 2, 0
-_0808D9A8: .4byte gUnknown_202F3E0
+_0808D9A8: .4byte gMonsterParameters
thumb_func_end sub_808D994
thumb_func_start sub_808D9AC
@@ -247468,7 +247468,7 @@ sub_808DAB4:
ldr r0, [r1, 0x4]
bx lr
.align 2, 0
-_0808DAC8: .4byte gUnknown_202F3E0
+_0808DAC8: .4byte gMonsterParameters
thumb_func_end sub_808DAB4
thumb_func_start sub_808DACC
@@ -247484,7 +247484,7 @@ sub_808DACC:
ldrb r0, [r1, 0x9]
bx lr
.align 2, 0
-_0808DAE0: .4byte gUnknown_202F3E0
+_0808DAE0: .4byte gMonsterParameters
thumb_func_end sub_808DACC
thumb_func_start sub_808DAE4
@@ -247500,7 +247500,7 @@ sub_808DAE4:
ldrb r0, [r1, 0x19]
bx lr
.align 2, 0
-_0808DAF8: .4byte gUnknown_202F3E0
+_0808DAF8: .4byte gMonsterParameters
thumb_func_end sub_808DAE4
thumb_func_start sub_808DAFC
@@ -247516,7 +247516,7 @@ sub_808DAFC:
ldr r0, [r1, 0xC]
bx lr
.align 2, 0
-_0808DB10: .4byte gUnknown_202F3E0
+_0808DB10: .4byte gMonsterParameters
thumb_func_end sub_808DAFC
thumb_func_start sub_808DB14
@@ -247532,7 +247532,7 @@ sub_808DB14:
ldrb r0, [r1, 0x15]
bx lr
.align 2, 0
-_0808DB28: .4byte gUnknown_202F3E0
+_0808DB28: .4byte gMonsterParameters
thumb_func_end sub_808DB14
thumb_func_start sub_808DB2C
@@ -247550,7 +247550,7 @@ sub_808DB2C:
lsrs r0, 24
bx lr
.align 2, 0
-_0808DB44: .4byte gUnknown_202F3E0
+_0808DB44: .4byte gMonsterParameters
thumb_func_end sub_808DB2C
thumb_func_start sub_808DB48
@@ -247566,7 +247566,7 @@ sub_808DB48:
ldrb r0, [r1, 0x1C]
bx lr
.align 2, 0
-_0808DB5C: .4byte gUnknown_202F3E0
+_0808DB5C: .4byte gMonsterParameters
thumb_func_end sub_808DB48
thumb_func_start sub_808DB60
@@ -247582,7 +247582,7 @@ sub_808DB60:
ldrb r0, [r1, 0x1D]
bx lr
.align 2, 0
-_0808DB74: .4byte gUnknown_202F3E0
+_0808DB74: .4byte gMonsterParameters
thumb_func_end sub_808DB60
thumb_func_start sub_808DB78
@@ -247598,7 +247598,7 @@ sub_808DB78:
ldrh r0, [r1, 0x2C]
bx lr
.align 2, 0
-_0808DB8C: .4byte gUnknown_202F3E0
+_0808DB8C: .4byte gMonsterParameters
thumb_func_end sub_808DB78
thumb_func_start sub_808DB90
@@ -247614,7 +247614,7 @@ sub_808DB90:
ldrh r0, [r1, 0x2E]
bx lr
.align 2, 0
-_0808DBA4: .4byte gUnknown_202F3E0
+_0808DBA4: .4byte gMonsterParameters
thumb_func_end sub_808DB90
thumb_func_start sub_808DBA8
@@ -247630,7 +247630,7 @@ sub_808DBA8:
ldrb r0, [r1, 0x16]
bx lr
.align 2, 0
-_0808DBBC: .4byte gUnknown_202F3E0
+_0808DBBC: .4byte gMonsterParameters
thumb_func_end sub_808DBA8
thumb_func_start sub_808DBC0
@@ -247646,7 +247646,7 @@ sub_808DBC0:
ldrh r0, [r1, 0x1E]
bx lr
.align 2, 0
-_0808DBD4: .4byte gUnknown_202F3E0
+_0808DBD4: .4byte gMonsterParameters
thumb_func_end sub_808DBC0
thumb_func_start sub_808DBD8
@@ -247663,7 +247663,7 @@ sub_808DBD8:
ldrb r0, [r1]
bx lr
.align 2, 0
-_0808DBF0: .4byte gUnknown_202F3E0
+_0808DBF0: .4byte gMonsterParameters
thumb_func_end sub_808DBD8
thumb_func_start sub_808DBF4
@@ -247679,7 +247679,7 @@ sub_808DBF4:
ldrb r0, [r1, 0x12]
bx lr
.align 2, 0
-_0808DC08: .4byte gUnknown_202F3E0
+_0808DC08: .4byte gMonsterParameters
thumb_func_end sub_808DBF4
thumb_func_start sub_808DC0C
@@ -247696,7 +247696,7 @@ sub_808DC0C:
ldrsh r0, [r1, r2]
bx lr
.align 2, 0
-_0808DC24: .4byte gUnknown_202F3E0
+_0808DC24: .4byte gMonsterParameters
thumb_func_end sub_808DC0C
thumb_func_start sub_808DC28
@@ -247715,7 +247715,7 @@ sub_808DC28:
ldrh r0, [r2]
bx lr
.align 2, 0
-_0808DC44: .4byte gUnknown_202F3E0
+_0808DC44: .4byte gMonsterParameters
thumb_func_end sub_808DC28
thumb_func_start sub_808DC48
@@ -247734,7 +247734,7 @@ sub_808DC48:
ldrh r0, [r2]
bx lr
.align 2, 0
-_0808DC64: .4byte gUnknown_202F3E0
+_0808DC64: .4byte gMonsterParameters
thumb_func_end sub_808DC48
thumb_func_start sub_808DC68
@@ -247752,7 +247752,7 @@ sub_808DC68:
ldrb r0, [r2]
bx lr
.align 2, 0
-_0808DC80: .4byte gUnknown_202F3E0
+_0808DC80: .4byte gMonsterParameters
thumb_func_end sub_808DC68
thumb_func_start sub_808DC84
@@ -247770,7 +247770,7 @@ sub_808DC84:
ldrb r0, [r2]
bx lr
.align 2, 0
-_0808DC9C: .4byte gUnknown_202F3E0
+_0808DC9C: .4byte gMonsterParameters
thumb_func_end sub_808DC84
thumb_func_start sub_808DCA0
@@ -247790,7 +247790,7 @@ sub_808DCA0:
ldrsh r0, [r2, r1]
bx lr
.align 2, 0
-_0808DCBC: .4byte gUnknown_202F3E0
+_0808DCBC: .4byte gMonsterParameters
thumb_func_end sub_808DCA0
thumb_func_start sub_808DCC0
@@ -247808,7 +247808,7 @@ sub_808DCC0:
ldrsh r0, [r1, r2]
bx lr
.align 2, 0
-_0808DCD8: .4byte gUnknown_202F3E0
+_0808DCD8: .4byte gMonsterParameters
thumb_func_end sub_808DCC0
thumb_func_start sub_808DCDC
@@ -247828,7 +247828,7 @@ sub_808DCDC:
ldrsh r0, [r2, r1]
bx lr
.align 2, 0
-_0808DCF8: .4byte gUnknown_202F3E0
+_0808DCF8: .4byte gMonsterParameters
thumb_func_end sub_808DCDC
thumb_func_start sub_808DCFC
@@ -247845,7 +247845,7 @@ sub_808DCFC:
ldrsh r0, [r1, r2]
bx lr
.align 2, 0
-_0808DD14: .4byte gUnknown_202F3E0
+_0808DD14: .4byte gMonsterParameters
thumb_func_end sub_808DCFC
thumb_func_start sub_808DD18
@@ -247871,7 +247871,7 @@ sub_808DD18:
pop {r1}
bx r1
.align 2, 0
-_0808DD44: .4byte gUnknown_202F3E0
+_0808DD44: .4byte gMonsterParameters
thumb_func_end sub_808DD18
thumb_func_start sub_808DD48
@@ -247890,7 +247890,7 @@ sub_808DD48:
str r3, [r1, 0x4]
bx lr
.align 2, 0
-_0808DD64: .4byte gUnknown_202F3E0
+_0808DD64: .4byte gMonsterParameters
thumb_func_end sub_808DD48
thumb_func_start sub_808DD68
@@ -247909,7 +247909,7 @@ sub_808DD68:
ldrb r0, [r0, 0x8]
b _0808DD8A
.align 2, 0
-_0808DD84: .4byte gUnknown_202F3E0
+_0808DD84: .4byte gMonsterParameters
_0808DD88:
movs r0, 0xA
_0808DD8A:
@@ -247940,7 +247940,7 @@ sub_808DD90:
bl OpenFile
b _0808DDCA
.align 2, 0
-_0808DDBC: .4byte gUnknown_202F3E0
+_0808DDBC: .4byte gMonsterParameters
_0808DDC0: .4byte gUnknown_8107684
_0808DDC4: .4byte gUnknown_8510000
_0808DDC8:
@@ -247974,7 +247974,7 @@ sub_808DDD0:
bl OpenFileAndGetFileDataPtr
b _0808DE0A
.align 2, 0
-_0808DDFC: .4byte gUnknown_202F3E0
+_0808DDFC: .4byte gMonsterParameters
_0808DE00: .4byte gUnknown_8107684
_0808DE04: .4byte gUnknown_8510000
_0808DE08:
@@ -248001,7 +248001,7 @@ sub_808DE10:
ands r0, r1
bx lr
.align 2, 0
-_0808DE2C: .4byte gUnknown_202F3E0
+_0808DE2C: .4byte gMonsterParameters
thumb_func_end sub_808DE10
thumb_func_start sub_808DE30
@@ -253777,8 +253777,8 @@ _080909B8: .4byte gUnknown_203B460
_080909BC: .4byte gUnknown_20389A8
_080909C0: .4byte gUnknown_8109764
_080909C4: .4byte gUnknown_8300500
-_080909C8: .4byte gUnknown_20389A0
-_080909CC: .4byte gUnknown_20389A4
+_080909C8: .4byte gItemParametersFile
+_080909CC: .4byte gItemParametersFile + 4
thumb_func_end sub_8090998
thumb_func_start sub_80909D0
@@ -254085,7 +254085,7 @@ sub_8090BD0:
ldrb r0, [r0, 0xC]
bx lr
.align 2, 0
-_08090BE0: .4byte gUnknown_20389A4
+_08090BE0: .4byte gItemParametersFile + 4
thumb_func_end sub_8090BD0
thumb_func_start sub_8090BE4
@@ -254112,7 +254112,7 @@ _08090BF6:
ldr r0, [r0, 0x4]
b _08090C24
.align 2, 0
-_08090C10: .4byte gUnknown_20389A4
+_08090C10: .4byte gItemParametersFile + 4
_08090C14:
ldrb r0, [r4, 0x2]
ldr r1, _08090C2C
@@ -254127,7 +254127,7 @@ _08090C24:
pop {r1}
bx r1
.align 2, 0
-_08090C2C: .4byte gUnknown_20389A4
+_08090C2C: .4byte gItemParametersFile + 4
thumb_func_end sub_8090BE4
thumb_func_start sub_8090C30
@@ -254154,7 +254154,7 @@ _08090C42:
ldr r0, [r0, 0x8]
b _08090C70
.align 2, 0
-_08090C5C: .4byte gUnknown_20389A4
+_08090C5C: .4byte gItemParametersFile + 4
_08090C60:
ldrb r0, [r4, 0x2]
ldr r1, _08090C78
@@ -254169,7 +254169,7 @@ _08090C70:
pop {r1}
bx r1
.align 2, 0
-_08090C78: .4byte gUnknown_20389A4
+_08090C78: .4byte gItemParametersFile + 4
thumb_func_end sub_8090C30
thumb_func_start sub_8090C7C
@@ -254197,7 +254197,7 @@ _08090C90:
ldr r0, [r0, 0x4]
b _08090CC0
.align 2, 0
-_08090CAC: .4byte gUnknown_20389A4
+_08090CAC: .4byte gItemParametersFile + 4
_08090CB0:
ldrb r0, [r4, 0x2]
ldr r1, _08090CC8
@@ -254212,7 +254212,7 @@ _08090CC0:
pop {r1}
bx r1
.align 2, 0
-_08090CC8: .4byte gUnknown_20389A4
+_08090CC8: .4byte gItemParametersFile + 4
thumb_func_end sub_8090C7C
thumb_func_start sub_8090CCC
@@ -254240,7 +254240,7 @@ _08090CE0:
ldr r0, [r0, 0x8]
b _08090D10
.align 2, 0
-_08090CFC: .4byte gUnknown_20389A4
+_08090CFC: .4byte gItemParametersFile + 4
_08090D00:
ldrb r0, [r4, 0x2]
ldr r1, _08090D18
@@ -254255,7 +254255,7 @@ _08090D10:
pop {r1}
bx r1
.align 2, 0
-_08090D18: .4byte gUnknown_20389A4
+_08090D18: .4byte gItemParametersFile + 4
thumb_func_end sub_8090CCC
thumb_func_start sub_8090D1C
@@ -254268,7 +254268,7 @@ sub_8090D1C:
ldr r0, [r0, 0x4]
bx lr
.align 2, 0
-_08090D2C: .4byte gUnknown_20389A4
+_08090D2C: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D1C
thumb_func_start sub_8090D30
@@ -254281,7 +254281,7 @@ sub_8090D30:
ldr r0, [r0, 0x8]
bx lr
.align 2, 0
-_08090D40: .4byte gUnknown_20389A4
+_08090D40: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D30
thumb_func_start sub_8090D44
@@ -254294,7 +254294,7 @@ sub_8090D44:
ldrb r0, [r0, 0x1A]
bx lr
.align 2, 0
-_08090D54: .4byte gUnknown_20389A4
+_08090D54: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D44
thumb_func_start sub_8090D58
@@ -254307,7 +254307,7 @@ sub_8090D58:
ldrb r0, [r0, 0x1D]
bx lr
.align 2, 0
-_08090D68: .4byte gUnknown_20389A4
+_08090D68: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D58
thumb_func_start sub_8090D6C
@@ -254320,7 +254320,7 @@ sub_8090D6C:
ldrb r0, [r0, 0x1E]
bx lr
.align 2, 0
-_08090D7C: .4byte gUnknown_20389A4
+_08090D7C: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D6C
thumb_func_start sub_8090D80
@@ -254335,7 +254335,7 @@ sub_8090D80:
ldrb r0, [r0]
bx lr
.align 2, 0
-_08090D94: .4byte gUnknown_20389A4
+_08090D94: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D80
thumb_func_start sub_8090D98
@@ -254348,7 +254348,7 @@ sub_8090D98:
ldr r0, [r0, 0x10]
bx lr
.align 2, 0
-_08090DA8: .4byte gUnknown_20389A4
+_08090DA8: .4byte gItemParametersFile + 4
thumb_func_end sub_8090D98
thumb_func_start sub_8090DAC
@@ -254363,7 +254363,7 @@ sub_8090DAC:
ldrb r0, [r0]
bx lr
.align 2, 0
-_08090DC0: .4byte gUnknown_20389A4
+_08090DC0: .4byte gItemParametersFile + 4
thumb_func_end sub_8090DAC
thumb_func_start sub_8090DC4
@@ -254404,7 +254404,7 @@ sub_8090DC4:
pop {r0}
bx r0
.align 2, 0
-_08090E10: .4byte gUnknown_20389A4
+_08090E10: .4byte gItemParametersFile + 4
thumb_func_end sub_8090DC4
thumb_func_start sub_8090E14
@@ -254453,7 +254453,7 @@ _08090E50:
b _08090EC4
.align 2, 0
_08090E68: .4byte gUnknown_8109770
-_08090E6C: .4byte gUnknown_20389A4
+_08090E6C: .4byte gItemParametersFile + 4
_08090E70:
ldr r1, _08090E88
ldrb r0, [r5, 0x2]
@@ -254467,7 +254467,7 @@ _08090E70:
b _08090EC4
.align 2, 0
_08090E88: .4byte gUnknown_8109778
-_08090E8C: .4byte gUnknown_20389A4
+_08090E8C: .4byte gItemParametersFile + 4
_08090E90:
ldrb r0, [r5, 0x2]
cmp r0, 0x69
@@ -254544,7 +254544,7 @@ _08090F14:
bl sub_8090F58
b _08090F50
.align 2, 0
-_08090F2C: .4byte gUnknown_20389A4
+_08090F2C: .4byte gItemParametersFile + 4
_08090F30: .4byte gUnknown_8109784
_08090F34: .4byte gUnknown_810978C
_08090F38:
@@ -255209,7 +255209,7 @@ sub_80913CC:
ldrh r0, [r0, 0x18]
bx lr
.align 2, 0
-_080913DC: .4byte gUnknown_20389A4
+_080913DC: .4byte gItemParametersFile + 4
thumb_func_end sub_80913CC
thumb_func_start sub_80913E0
@@ -258154,7 +258154,7 @@ LoadWazaParameters:
.align 2, 0
_08092868: .4byte gUnknown_81098D0
_0809286C: .4byte gUnknown_8300500
-_08092870: .4byte gUnknown_2038C64
+_08092870: .4byte gWazaParametersFile
_08092874: .4byte gUnknown_2038C68
_08092878: .4byte gUnknown_2038C6C
thumb_func_end LoadWazaParameters
@@ -271490,7 +271490,7 @@ _080988F8:
bl GroundEffect_Action
bl nullsub_105
bl sub_809B474
- bl sub_80A2380
+ bl GroundScript_Unlock
bl sub_809D25C
bl sub_80A59DC
bl sub_809B614
@@ -271783,7 +271783,7 @@ _08098BD2:
sub_8098BDC:
push {lr}
bl sub_809B57C
- bl sub_80A2380
+ bl GroundScript_Unlock
bl sub_809D25C
bl sub_80A59DC
bl sub_809B614
@@ -273046,7 +273046,7 @@ _080995AE:
_08099604:
bl xxx_call_update_bg_sound_input
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
mov r2, r9
cmp r2, 0
beq _08099524
@@ -279959,7 +279959,7 @@ sub_809CBBC:
b _0809CC4A
.align 2, 0
_0809CC0C: .4byte gUnknown_81163E4
-_0809CC10: .4byte gUnknown_20389A4
+_0809CC10: .4byte gItemParametersFile + 4
_0809CC14: .4byte gUnknown_203B460
_0809CC18: .4byte 0x0001869f
_0809CC1C:
@@ -284745,28 +284745,28 @@ _0809F3DC: .4byte gUnknown_2039A32
_0809F3E0:
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80A7988
+ bl GroundLives_Cancel
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80ABC5C
+ bl GroundObject_Cancel
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80ACC98
+ bl GroundEffect_Cancel
b _0809F41E
_0809F3FA:
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80A7988
+ bl GroundLives_Cancel
bl _0809EAE0
_0809F406:
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80ABC5C
+ bl GroundObject_Cancel
bl _0809EAE0
_0809F412:
adds r0, r6, 0
adds r1, r5, 0
- bl sub_80ACC98
+ bl GroundEffect_Cancel
bl _0809EAE0
_0809F41E:
adds r0, r6, 0
@@ -284777,10 +284777,10 @@ _0809F42A:
bl sub_80A79FC
bl _0809EAE0
_0809F432:
- bl sub_80ABCCC
+ bl GroundObject_CancelBlank
bl _0809EAE0
_0809F43A:
- bl sub_80ACD08
+ bl GroundEffect_CancelBlank
bl _0809EAE0
_0809F442:
mov r2, r9
@@ -290448,7 +290448,7 @@ _080A233A:
b _080A236A
_080A2346:
movs r0, 0
- bl sub_80A6C88
+ bl GroundSprite_ExtendPaletteDelete
b _080A236A
_080A234E:
movs r0, 0
@@ -290478,8 +290478,8 @@ _080A236C:
bx r1
thumb_func_end sub_80A14E8
- thumb_func_start sub_80A2380
-sub_80A2380:
+ thumb_func_start GroundScript_Unlock
+GroundScript_Unlock:
push {r4-r7,lr}
ldr r1, _080A241C
ldrb r0, [r1]
@@ -290557,7 +290557,7 @@ _080A241C: .4byte gUnknown_2039A36
_080A2420: .4byte gUnknown_2039A38
_080A2424: .4byte gUnknown_8116848
_080A2428: .4byte gUnknown_2039AC0
- thumb_func_end sub_80A2380
+ thumb_func_end GroundScript_Unlock
thumb_func_start sub_80A242C
sub_80A242C:
@@ -299178,7 +299178,7 @@ _080A6434:
_080A6444:
strh r0, [r5, 0xA]
movs r0, 0x1
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0x1
bl nullsub_10
pop {r3,r4}
@@ -299342,7 +299342,7 @@ sub_80A658C:
push {r4,lr}
bl sub_800DB7C
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
bl sub_8005180
@@ -299986,7 +299986,7 @@ sub_80A69FC:
cmp r4, 0
blt _080A6A7A
adds r0, r6, 0
- bl sub_80A6C88
+ bl GroundSprite_ExtendPaletteDelete
movs r0, 0
str r0, [r5, 0x8]
str r0, [r5]
@@ -300303,8 +300303,8 @@ _080A6C78:
bx r0
thumb_func_end GroundSprite_ExtendPaletteAdd
- thumb_func_start sub_80A6C88
-sub_80A6C88:
+ thumb_func_start GroundSprite_ExtendPaletteDelete
+GroundSprite_ExtendPaletteDelete:
push {r4-r6,lr}
adds r2, r0, 0
cmp r2, 0
@@ -300360,7 +300360,7 @@ _080A6CE6:
.align 2, 0
_080A6CEC: .4byte gUnknown_3001B7C
_080A6CF0: .4byte gUnknown_81178C0
- thumb_func_end sub_80A6C88
+ thumb_func_end GroundSprite_ExtendPaletteDelete
thumb_func_start sub_80A6CF4
sub_80A6CF4:
@@ -300572,7 +300572,7 @@ _080A6E56:
sub_80A6E68:
push {lr}
movs r0, 0
- bl sub_8004D8C
+ bl ResetSprites
movs r0, 0
bl nullsub_10
bl sub_800E970
@@ -301931,7 +301931,7 @@ _080A787C:
cmp r0, r6
beq _080A788A
adds r0, r1, 0
- bl sub_80A8684
+ bl GroundLives_Delete
_080A788A:
adds r0, r5, 0
movs r1, 0x80
@@ -302062,8 +302062,8 @@ _080A7980: .4byte gUnknown_811808C
_080A7984: .4byte gUnknown_8118098
thumb_func_end GroundLives_Select
- thumb_func_start sub_80A7988
-sub_80A7988:
+ thumb_func_start GroundLives_Cancel
+GroundLives_Cancel:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -302101,7 +302101,7 @@ _080A79B2:
bne _080A79D4
_080A79CE:
adds r0, r1, 0
- bl sub_80A8684
+ bl GroundLives_Delete
_080A79D4:
adds r0, r6, 0
movs r1, 0x80
@@ -302121,7 +302121,7 @@ _080A79D4:
.align 2, 0
_080A79F4: .4byte gUnknown_81180BC
_080A79F8: .4byte gUnknown_3001B84
- thumb_func_end sub_80A7988
+ thumb_func_end GroundLives_Cancel
thumb_func_start sub_80A79FC
sub_80A79FC:
@@ -302164,7 +302164,7 @@ _080A7A20:
cmp r0, 0
bne _080A7A50
adds r0, r6, 0
- bl sub_80A8684
+ bl GroundLives_Delete
_080A7A50:
adds r0, r6, 0x1
lsls r0, 16
@@ -303749,8 +303749,8 @@ _080A8674:
bx r1
thumb_func_end GroundLives_Add
- thumb_func_start sub_80A8684
-sub_80A8684:
+ thumb_func_start GroundLives_Delete
+GroundLives_Delete:
push {r4,lr}
adds r2, r0, 0
lsls r2, 16
@@ -303780,7 +303780,7 @@ sub_80A8684:
_080A86BC: .4byte gUnknown_3001B84
_080A86C0: .4byte gUnknown_8118194
_080A86C4: .4byte 0x0000ffff
- thumb_func_end sub_80A8684
+ thumb_func_end GroundLives_Delete
thumb_func_start sub_80A86C8
sub_80A86C8:
@@ -309318,7 +309318,7 @@ _080AB278:
b _080AB44C
_080AB292:
mov r0, r9
- bl sub_80A8684
+ bl GroundLives_Delete
b _080AB47C
.align 2, 0
_080AB29C: .4byte gUnknown_3001B84
@@ -310631,8 +310631,8 @@ _080ABC54: .4byte gUnknown_81183E4
_080ABC58: .4byte gUnknown_81183F0
thumb_func_end GroundObject_Select
- thumb_func_start sub_80ABC5C
-sub_80ABC5C:
+ thumb_func_start GroundObject_Cancel
+GroundObject_Cancel:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -310689,10 +310689,10 @@ _080ABCA6:
.align 2, 0
_080ABCC4: .4byte gUnknown_8118414
_080ABCC8: .4byte gUnknown_3001B88
- thumb_func_end sub_80ABC5C
+ thumb_func_end GroundObject_Cancel
- thumb_func_start sub_80ABCCC
-sub_80ABCCC:
+ thumb_func_start GroundObject_CancelBlank
+GroundObject_CancelBlank:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -310752,7 +310752,7 @@ _080ABD20:
.align 2, 0
_080ABD40: .4byte gUnknown_811842C
_080ABD44: .4byte gUnknown_3001B88
- thumb_func_end sub_80ABCCC
+ thumb_func_end GroundObject_CancelBlank
thumb_func_start sub_80ABD48
sub_80ABD48:
@@ -312792,7 +312792,7 @@ _080ACBE4:
cmp r0, r6
beq _080ACBF2
adds r0, r1, 0
- bl sub_80AD080
+ bl GroundEffect_Delete
_080ACBF2:
adds r0, r5, 0
movs r1, 0x80
@@ -312882,8 +312882,8 @@ _080ACC90: .4byte gUnknown_8118610
_080ACC94: .4byte gUnknown_811861C
thumb_func_end GroundEffect_Select
- thumb_func_start sub_80ACC98
-sub_80ACC98:
+ thumb_func_start GroundEffect_Cancel
+GroundEffect_Cancel:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -312920,7 +312920,7 @@ _080ACCC0:
bne _080ACCE2
_080ACCDC:
adds r0, r1, 0
- bl sub_80AD080
+ bl GroundEffect_Delete
_080ACCE2:
adds r0, r6, 0
movs r1, 0x80
@@ -312940,10 +312940,10 @@ _080ACCE2:
.align 2, 0
_080ACD00: .4byte gUnknown_8118640
_080ACD04: .4byte gUnknown_3001B8C
- thumb_func_end sub_80ACC98
+ thumb_func_end GroundEffect_Cancel
- thumb_func_start sub_80ACD08
-sub_80ACD08:
+ thumb_func_start GroundEffect_CancelBlank
+GroundEffect_CancelBlank:
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -312983,7 +312983,7 @@ _080ACD2C:
cmp r0, 0
bne _080ACD5C
adds r0, r6, 0
- bl sub_80AD080
+ bl GroundEffect_Delete
_080ACD5C:
adds r0, r6, 0x1
lsls r0, 16
@@ -313003,7 +313003,7 @@ _080ACD5C:
.align 2, 0
_080ACD7C: .4byte gUnknown_8118658
_080ACD80: .4byte gUnknown_3001B8C
- thumb_func_end sub_80ACD08
+ thumb_func_end GroundEffect_CancelBlank
thumb_func_start sub_80ACD84
sub_80ACD84:
@@ -313399,8 +313399,8 @@ _080AD078: .4byte gUnknown_812F1F8
_080AD07C: .4byte gUnknown_81186CC
thumb_func_end GroundEffect_Add
- thumb_func_start sub_80AD080
-sub_80AD080:
+ thumb_func_start GroundEffect_Delete
+GroundEffect_Delete:
push {r4,lr}
adds r2, r0, 0
lsls r2, 16
@@ -313432,7 +313432,7 @@ sub_80AD080:
_080AD0BC: .4byte gUnknown_3001B8C
_080AD0C0: .4byte gUnknown_81186D8
_080AD0C4: .4byte 0x0000ffff
- thumb_func_end sub_80AD080
+ thumb_func_end GroundEffect_Delete
thumb_func_start sub_80AD0C8
sub_80AD0C8:
@@ -314398,7 +314398,7 @@ _080AD72C:
cmp r0, 0x4
bne _080AD768
adds r0, r7, 0
- bl sub_80AD080
+ bl GroundEffect_Delete
b _080AD78A
.align 2, 0
_080AD754: .4byte gUnknown_3001B8C
diff --git a/asm/input.s b/asm/input.s
index 7516a30..d439867 100644
--- a/asm/input.s
+++ b/asm/input.s
@@ -7,24 +7,24 @@
thumb_func_start InitInput
InitInput:
- ldr r0, _08004840
+ ldr r0, =gUnknown_20255F0
movs r3, 0
movs r2, 0
strh r2, [r0]
strh r2, [r0, 0x2]
strh r2, [r0, 0x4]
strh r2, [r0, 0x6]
- ldr r0, _08004844
+ ldr r0, =gUnknown_2025638
strh r2, [r0]
strh r2, [r0, 0x2]
strh r2, [r0, 0x4]
strh r2, [r0, 0x6]
- ldr r1, _08004848
- ldr r0, _0800484C
+ ldr r1, =gUnknown_202562C
+ ldr r0, =0x4a14c1
str r0, [r1]
- ldr r0, _08004850
+ ldr r0, =gUnknown_2025600
str r2, [r0, 0x20]
- ldr r1, _08004854
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -46,25 +46,19 @@ InitInput:
strb r3, [r1]
adds r0, 0x29
strb r3, [r0]
- ldr r0, _08004858
+ ldr r0, =gUnknown_2025668
strh r2, [r0]
strh r2, [r0, 0x2]
bx lr
.align 2, 0
-_08004840: .4byte gUnknown_20255F0
-_08004844: .4byte gUnknown_2025638
-_08004848: .4byte gUnknown_202562C
-_0800484C: .4byte 0x004a14c1
-_08004850: .4byte gUnknown_2025600
-_08004854: .4byte 0x0000ffff
-_08004858: .4byte gUnknown_2025668
+ .pool
thumb_func_end InitInput
thumb_func_start sub_800485C
sub_800485C:
push {r4,r5,lr}
- ldr r2, _080048A8
- ldr r1, _080048AC
+ ldr r2, =gUnknown_2025638
+ ldr r1, =gUnknown_20255F0
adds r0, r2, 0
ldm r0!, {r3-r5}
stm r1!, {r3-r5}
@@ -76,8 +70,8 @@ sub_800485C:
strh r0, [r2, 0x2]
strh r0, [r2, 0x4]
strh r0, [r2, 0x6]
- ldr r0, _080048B0
- ldr r1, _080048B4
+ ldr r0, =gUnknown_2025600
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -101,10 +95,7 @@ sub_800485C:
pop {r0}
bx r0
.align 2, 0
-_080048A8: .4byte gUnknown_2025638
-_080048AC: .4byte gUnknown_20255F0
-_080048B0: .4byte gUnknown_2025600
-_080048B4: .4byte 0x0000ffff
+ .pool
thumb_func_end sub_800485C
thumb_func_start sub_80048B8
@@ -145,49 +136,44 @@ sub_80048CC:
thumb_func_start sub_80048D0
sub_80048D0:
- ldr r1, _080048E8
+ ldr r1, =gUnknown_20255F0
movs r0, 0
strh r0, [r1, 0x4]
- ldr r1, _080048EC
+ ldr r1, =gUnknown_2025648
str r0, [r1, 0xC]
strh r0, [r1, 0x8]
- ldr r1, _080048F0
- ldr r0, _080048F4
+ ldr r1, =gUnknown_2025668
+ ldr r0, =0x3e7
strh r0, [r1]
strh r0, [r1, 0x2]
bx lr
.align 2, 0
-_080048E8: .4byte gUnknown_20255F0
-_080048EC: .4byte gUnknown_2025648
-_080048F0: .4byte gUnknown_2025668
-_080048F4: .4byte 0x000003e7
+ .pool
thumb_func_end sub_80048D0
thumb_func_start sub_80048F8
sub_80048F8:
- ldr r0, _08004908
+ ldr r0, =gUnknown_20255F0
movs r1, 0
strh r1, [r0, 0x2]
- ldr r0, _0800490C
+ ldr r0, =gUnknown_2025638
strh r1, [r0, 0x2]
- ldr r0, _08004910
+ ldr r0, =gUnknown_2025648
strh r1, [r0, 0x2]
bx lr
.align 2, 0
-_08004908: .4byte gUnknown_20255F0
-_0800490C: .4byte gUnknown_2025638
-_08004910: .4byte gUnknown_2025648
+ .pool
thumb_func_end sub_80048F8
thumb_func_start sub_8004914
sub_8004914:
- ldr r0, _0800494C
+ ldr r0, =gUnknown_2025600
movs r1, 0x5
str r1, [r0, 0x20]
movs r2, 0
movs r1, 0
strh r1, [r0, 0x24]
- ldr r1, _08004950
+ ldr r1, =0xffff
strh r1, [r0]
movs r1, 0x1
negs r1, r1
@@ -209,15 +195,14 @@ sub_8004914:
strb r2, [r0]
bx lr
.align 2, 0
-_0800494C: .4byte gUnknown_2025600
-_08004950: .4byte 0x0000ffff
+ .pool
thumb_func_end sub_8004914
thumb_func_start UpdateInput
UpdateInput:
push {r4-r6,lr}
- ldr r4, _08004998
- ldr r5, _0800499C
+ ldr r4, =gUnknown_2025658
+ ldr r5, =gUnknown_2025648
adds r1, r4, 0
adds r0, r5, 0
ldm r0!, {r2,r3,r6}
@@ -249,8 +234,7 @@ UpdateInput:
str r0, [r5, 0xC]
b _080049AC
.align 2, 0
-_08004998: .4byte gUnknown_2025658
-_0800499C: .4byte gUnknown_2025648
+ .pool
_080049A0:
strh r2, [r5, 0x8]
movs r0, 0x1
@@ -260,7 +244,7 @@ _080049A8:
str r0, [r5, 0xC]
strh r0, [r5, 0x8]
_080049AC:
- ldr r0, _080049C4
+ ldr r0, =gUnknown_2025648
ldr r2, [r0, 0xC]
adds r3, r0, 0
cmp r2, 0x1
@@ -273,7 +257,7 @@ _080049AC:
strh r1, [r3, 0x4]
b _080049E0
.align 2, 0
-_080049C4: .4byte gUnknown_2025648
+ .pool
_080049C8:
cmp r2, 0x30
bne _080049DC
@@ -300,7 +284,7 @@ _080049E0:
lsrs r2, r0, 16
cmp r2, 0
beq _08004A0C
- ldr r0, _08004A08
+ ldr r0, =gUnknown_2025668
ldrh r2, [r0]
movs r4, 0
ldrsh r1, [r0, r4]
@@ -311,9 +295,9 @@ _080049E0:
strh r0, [r4]
b _08004A20
.align 2, 0
-_08004A08: .4byte gUnknown_2025668
+ .pool
_08004A0C:
- ldr r1, _08004A44
+ ldr r1, =gUnknown_2025668
ldrh r0, [r1]
subs r0, 0x2
lsls r0, 16
@@ -343,7 +327,7 @@ _08004A20:
strh r0, [r4, 0x2]
b _08004A5E
.align 2, 0
-_08004A44: .4byte gUnknown_2025668
+ .pool
_08004A48:
ldrh r0, [r4, 0x2]
subs r0, 0x2
@@ -358,7 +342,7 @@ _08004A48:
_08004A5C:
strh r2, [r4, 0x2]
_08004A5E:
- ldr r2, _08004A94
+ ldr r2, =gUnknown_2025638
ldrh r0, [r2]
ldrh r1, [r3]
orrs r0, r1
@@ -375,9 +359,9 @@ _08004A5E:
ldrh r1, [r3, 0x6]
orrs r0, r1
strh r0, [r2, 0x6]
- ldr r2, _08004A98
+ ldr r2, =gUnknown_202562C
ldrh r0, [r3]
- ldr r1, _08004A9C
+ ldr r1, =0x054a1c41
orrs r0, r1
ldr r1, [r2]
muls r0, r1
@@ -386,9 +370,7 @@ _08004A5E:
pop {r0}
bx r0
.align 2, 0
-_08004A94: .4byte gUnknown_2025638
-_08004A98: .4byte gUnknown_202562C
-_08004A9C: .4byte 0x054a1c41
+ .pool
thumb_func_end UpdateInput
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a.s b/asm/m4a.s
deleted file mode 100644
index 7133670..0000000
--- a/asm/m4a.s
+++ /dev/null
@@ -1,4625 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start umul3232H32
-umul3232H32:
- adr r2, _080AE268
- bx r2
- .arm
-_080AE268:
- umull r2, r3, r0, r1
- add r0, r3, 0
- bx lr
- thumb_func_end umul3232H32
-
- thumb_func_start SoundMain
-SoundMain:
- ldr r0, _080AE2E0
- ldr r0, [r0]
- ldr r2, _080AE2E4
- ldr r3, [r0]
- cmp r2, r3
- beq _080AE282
- bx lr
-_080AE282:
- adds r3, 0x1
- str r3, [r0]
- push {r4-r7,lr}
- mov r1, r8
- mov r2, r9
- mov r3, r10
- mov r4, r11
- push {r0-r4}
- sub sp, 0x18
- ldrb r1, [r0, 0xC]
- cmp r1, 0
- beq _080AE2A6
- ldr r2, _080AE2EC
- ldrb r2, [r2]
- cmp r2, 0xA0
- bcs _080AE2A4
- adds r2, 0xE4
-_080AE2A4:
- adds r1, r2
-_080AE2A6:
- str r1, [sp, 0x14]
- ldr r3, [r0, 0x20]
- cmp r3, 0
- beq _080AE2B6
- ldr r0, [r0, 0x24]
- bl call_r3
- ldr r0, [sp, 0x18]
-_080AE2B6:
- ldr r3, [r0, 0x28]
- bl call_r3
- ldr r0, [sp, 0x18]
- ldr r3, [r0, 0x10]
- mov r8, r3
- ldr r5, _080AE2F0
- adds r5, r0
- ldrb r4, [r0, 0x4]
- subs r7, r4, 0x1
- bls _080AE2D6
- ldrb r1, [r0, 0xB]
- subs r1, r7
- mov r2, r8
- muls r2, r1
- adds r5, r2
-_080AE2D6:
- str r5, [sp, 0x8]
- ldr r6, _080AE2F4
- ldr r3, _080AE2E8
- bx r3
- .align 2, 0
-_080AE2E0: .4byte SOUND_INFO_PTR
-_080AE2E4: .4byte 0x68736d53
-_080AE2E8: .4byte SoundMainRAM_Buffer + 1
-_080AE2EC: .4byte 0x04000006
-_080AE2F0: .4byte 0x00000350
-_080AE2F4: .4byte 0x00000630
- thumb_func_end SoundMain
-
- thumb_func_start sub_80AE2F8
-sub_80AE2F8:
- ldrb r3, [r0, 0x5]
- cmp r3, 0
- beq _080AE358
- adr r1, _080AE304
- bx r1
- .arm
-_080AE304:
- cmp r4, 0x2
- addeq r7, r0, 0x350
- addne r7, r5, r8
- mov r4, r8
-_080AE314:
- ldrsb r0, [r5, r6]
- ldrsb r1, [r5]
- add r0, r0, r1
- ldrsb r1, [r7, r6]
- add r0, r0, r1
- ldrsb r1, [r7], 0x1
- add r0, r0, r1
- mul r1, r0, r3
- mov r0, r1, asr 9
- tst r0, 0x80
- addne r0, r0, 0x1
- strb r0, [r5, r6]
- strb r0, [r5], 0x1
- subs r4, r4, 0x1
- bgt _080AE314
- add r0, pc, 0x2F
- bx r0
- .thumb
-_080AE358:
- movs r0, 0
- mov r1, r8
- adds r6, r5
- lsrs r1, 3
- bcc _080AE366
- stm r5!, {r0}
- stm r6!, {r0}
-_080AE366:
- lsrs r1, 1
- bcc _080AE372
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
-_080AE372:
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- stm r5!, {r0}
- stm r6!, {r0}
- subs r1, 0x1
- bgt _080AE372
- ldr r4, [sp, 0x18]
- ldr r0, [r4, 0x18]
- mov r12, r0
- ldrb r0, [r4, 0x6]
- adds r4, 0x50
-_080AE390:
- str r0, [sp, 0x4]
- ldr r3, [r4, 0x24]
- ldr r0, [sp, 0x14]
- cmp r0, 0
- beq _080AE3B0
- ldr r1, _080AE3AC
- ldrb r1, [r1]
- cmp r1, 0xA0
- bcs _080AE3A4
- adds r1, 0xE4
-_080AE3A4:
- cmp r1, r0
- bcc _080AE3B0
- b _080AE682
- .align 2, 0
-_080AE3AC: .4byte 0x04000006
-_080AE3B0:
- ldrb r6, [r4]
- movs r0, 0xC7
- tst r0, r6
- bne _080AE3BA
- b _080AE678
-_080AE3BA:
- movs r0, 0x80
- tst r0, r6
- beq _080AE3EA
- movs r0, 0x40
- tst r0, r6
- bne _080AE3FA
- movs r6, 0x3
- strb r6, [r4]
- adds r0, r3, 0
- adds r0, 0x10
- str r0, [r4, 0x28]
- ldr r0, [r3, 0xC]
- str r0, [r4, 0x18]
- movs r5, 0
- strb r5, [r4, 0x9]
- str r5, [r4, 0x1C]
- ldrb r2, [r3, 0x3]
- movs r0, 0xC0
- tst r0, r2
- beq _080AE442
- movs r0, 0x10
- orrs r6, r0
- strb r6, [r4]
- b _080AE442
-_080AE3EA:
- ldrb r5, [r4, 0x9]
- movs r0, 0x4
- tst r0, r6
- beq _080AE400
- ldrb r0, [r4, 0xD]
- subs r0, 0x1
- strb r0, [r4, 0xD]
- bhi _080AE450
-_080AE3FA:
- movs r0, 0
- strb r0, [r4]
- b _080AE678
-_080AE400:
- movs r0, 0x40
- tst r0, r6
- beq _080AE420
- ldrb r0, [r4, 0x7]
- muls r5, r0
- lsrs r5, 8
- ldrb r0, [r4, 0xC]
- cmp r5, r0
- bhi _080AE450
-_080AE412:
- ldrb r5, [r4, 0xC]
- cmp r5, 0
- beq _080AE3FA
- movs r0, 0x4
- orrs r6, r0
- strb r6, [r4]
- b _080AE450
-_080AE420:
- movs r2, 0x3
- ands r2, r6
- cmp r2, 0x2
- bne _080AE43E
- ldrb r0, [r4, 0x5]
- muls r5, r0
- lsrs r5, 8
- ldrb r0, [r4, 0x6]
- cmp r5, r0
- bhi _080AE450
- adds r5, r0, 0
- beq _080AE412
- subs r6, 0x1
- strb r6, [r4]
- b _080AE450
-_080AE43E:
- cmp r2, 0x3
- bne _080AE450
-_080AE442:
- ldrb r0, [r4, 0x4]
- adds r5, r0
- cmp r5, 0xFF
- bcc _080AE450
- movs r5, 0xFF
- subs r6, 0x1
- strb r6, [r4]
-_080AE450:
- strb r5, [r4, 0x9]
- ldr r0, [sp, 0x18]
- ldrb r0, [r0, 0x7]
- adds r0, 0x1
- muls r0, r5
- lsrs r5, r0, 4
- ldrb r0, [r4, 0x2]
- muls r0, r5
- lsrs r0, 8
- strb r0, [r4, 0xA]
- ldrb r0, [r4, 0x3]
- muls r0, r5
- lsrs r0, 8
- strb r0, [r4, 0xB]
- movs r0, 0x10
- ands r0, r6
- str r0, [sp, 0x10]
- beq _080AE484
- adds r0, r3, 0
- adds r0, 0x10
- ldr r1, [r3, 0x8]
- adds r0, r1
- str r0, [sp, 0xC]
- ldr r0, [r3, 0xC]
- subs r0, r1
- str r0, [sp, 0x10]
-_080AE484:
- ldr r5, [sp, 0x8]
- ldr r2, [r4, 0x18]
- ldr r3, [r4, 0x28]
- adr r0, _080AE490
- bx r0
- .arm
-_080AE490:
- str r8, [sp]
- ldrb r10, [r4, 0xA]
- ldrb r11, [r4, 0xB]
- mov r10, r10, lsl 16
- mov r11, r11, lsl 16
- ldrb r0, [r4, 0x1]
- tst r0, 0x8
- beq _080AE5D0
-_080AE4B0:
- cmp r2, 0x4
- ble _080AE520
- subs r2, r2, r8
- movgt lr, 0
- bgt _080AE4DC
- mov lr, r8
- add r2, r2, r8
- sub r8, r2, 0x4
- sub lr, lr, r8
- ands r2, r2, 0x3
- moveq r2, 0x4
-_080AE4DC:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE4E4:
- ldrsb r0, [r3], 0x1
- mul r1, r10, r0
- bic r1, r1, 0xFF0000
- add r6, r1, r6, ror 8
- mul r1, r11, r0
- bic r1, r1, 0xFF0000
- add r7, r1, r7, ror 8
- adds r5, r5, 0x40000000
- bcc _080AE4E4
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE4DC
- adds r8, r8, lr
- beq _080AE664
-_080AE520:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE528:
- ldrsb r0, [r3], 0x1
- mul r1, r10, r0
- bic r1, r1, 0xFF0000
- add r6, r1, r6, ror 8
- mul r1, r11, r0
- bic r1, r1, 0xFF0000
- add r7, r1, r7, ror 8
- subs r2, r2, 0x1
- beq _080AE598
-_080AE54C:
- adds r5, r5, 0x40000000
- bcc _080AE528
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE4B0
- b _080AE664
-_080AE568:
- ldr r0, [sp, 0x18]
- cmp r0, 0
- beq _080AE58C
- ldr r3, [sp, 0x14]
- rsb r9, r2, 0
-_080AE57C:
- adds r2, r0, r2
- bgt _080AE634
- sub r9, r9, r0
- b _080AE57C
-_080AE58C:
- ldmia sp!, {r4,r12}
- mov r2, 0
- b _080AE5A8
-_080AE598:
- ldr r2, [sp, 0x10]
- cmp r2, 0
- ldrne r3, [sp, 0xC]
- bne _080AE54C
-_080AE5A8:
- strb r2, [r4]
- mov r0, r5, lsr 30
- bic r5, r5, 0xC0000000
- rsb r0, r0, 0x3
- mov r0, r0, lsl 3
- mov r6, r6, ror r0
- mov r7, r7, ror r0
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- b _080AE66C
-_080AE5D0:
- stmdb sp!, {r4,r12}
- ldr lr, [r4, 0x1C]
- ldr r1, [r4, 0x20]
- mul r4, r12, r1
- ldrsb r0, [r3]
- ldrsb r1, [r3, 0x1]!
- sub r1, r1, r0
-_080AE5EC:
- ldr r6, [r5]
- ldr r7, [r5, 0x630]
-_080AE5F4:
- mul r9, lr, r1
- add r9, r0, r9, asr 23
- mul r12, r10, r9
- bic r12, r12, 0xFF0000
- add r6, r12, r6, ror 8
- mul r12, r11, r9
- bic r12, r12, 0xFF0000
- add r7, r12, r7, ror 8
- add lr, lr, r4
- movs r9, lr, lsr 23
- beq _080AE640
- bic lr, lr, 0x3F800000
- subs r2, r2, r9
- ble _080AE568
- subs r9, r9, 0x1
- addeq r0, r0, r1
-_080AE634:
- ldrsbne r0, [r3, r9]!
- ldrsb r1, [r3, 0x1]!
- sub r1, r1, r0
-_080AE640:
- adds r5, r5, 0x40000000
- bcc _080AE5F4
- str r7, [r5, 0x630]
- str r6, [r5], 0x4
- subs r8, r8, 0x4
- bgt _080AE5EC
- sub r3, r3, 0x1
- ldmia sp!, {r4,r12}
- str lr, [r4, 0x1C]
-_080AE664:
- str r2, [r4, 0x18]
- str r3, [r4, 0x28]
-_080AE66C:
- ldr r8, [sp]
- add r0, pc, 0x1
- bx r0
- .thumb
-_080AE678:
- ldr r0, [sp, 0x4]
- subs r0, 0x1
- ble _080AE682
- adds r4, 0x40
- b _080AE390
-_080AE682:
- ldr r0, [sp, 0x18]
- ldr r3, _080AE698
- str r3, [r0]
- add sp, 0x1C
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r3}
-
-call_r3:
- bx r3
-
- .align 2, 0
-_080AE698: .4byte 0x68736D53
- thumb_func_end sub_80AE2F8
-
- thumb_func_start sub_80AE69C
-sub_80AE69C:
- mov r12, r4
- movs r1, 0
- movs r2, 0
- movs r3, 0
- movs r4, 0
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- stm r0!, {r1-r4}
- mov r4, r12
- bx lr
- thumb_func_end sub_80AE69C
-
- thumb_func_start sub_80AE6B4
-sub_80AE6B4:
- ldr r3, [r0, 0x2C]
- cmp r3, 0
- beq _080AE6D2
- ldr r1, [r0, 0x34]
- ldr r2, [r0, 0x30]
- cmp r2, 0
- beq _080AE6C6
- str r1, [r2, 0x34]
- b _080AE6C8
-_080AE6C6:
- str r1, [r3, 0x20]
-_080AE6C8:
- cmp r1, 0
- beq _080AE6CE
- str r2, [r1, 0x30]
-_080AE6CE:
- movs r1, 0
- str r1, [r0, 0x2C]
-_080AE6D2:
- bx lr
- thumb_func_end sub_80AE6B4
-
- thumb_func_start sub_80AE6D4
-sub_80AE6D4:
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AE6F8
-_080AE6DE:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AE6EC
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r4]
-_080AE6EC:
- adds r0, r4, 0
- bl sub_80AE6B4
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AE6DE
-_080AE6F8:
- movs r0, 0
- strb r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80AE6D4
-
- thumb_func_start sub_80AE704
-sub_80AE704:
- mov r12, lr
- movs r1, 0x24
- ldr r2, _080AE734
-_080AE70A:
- ldr r3, [r2]
- bl _080AE71E
- stm r0!, {r3}
- adds r2, 0x4
- subs r1, 0x1
- bgt _080AE70A
- bx r12
- thumb_func_end sub_80AE704
-
- .align 2, 0
- .thumb_func
-_080AE71C:
- ldrb r3, [r2]
-
- .thumb_func
-_080AE71E:
- push {r0}
- lsrs r0, r2, 25
- bne _080AE730
- ldr r0, _080AE734
- cmp r2, r0
- bcc _080AE72E
- lsrs r0, r2, 14
- beq _080AE730
-_080AE72E:
- movs r3, 0
-_080AE730:
- pop {r0}
- bx lr
- .align 2, 0
-_080AE734: .4byte gUnknown_826F98C
-
- thumb_func_start sub_80AE738
-sub_80AE738:
- ldr r2, [r1, 0x40]
-_080AE73A:
- adds r3, r2, 0x1
- str r3, [r1, 0x40]
- ldrb r3, [r2]
- b _080AE71E
- thumb_func_end sub_80AE738
-
- thumb_func_start sub_80AE744
-sub_80AE744:
- push {lr}
-_080AE746:
- ldr r2, [r1, 0x40]
- ldrb r0, [r2, 0x3]
- lsls r0, 8
- ldrb r3, [r2, 0x2]
- orrs r0, r3
- lsls r0, 8
- ldrb r3, [r2, 0x1]
- orrs r0, r3
- lsls r0, 8
- bl _080AE71C
- orrs r0, r3
- str r0, [r1, 0x40]
- pop {r0}
- bx r0
- thumb_func_end sub_80AE744
-
- thumb_func_start sub_80AE764
-sub_80AE764:
- ldrb r2, [r1, 0x2]
- cmp r2, 0x3
- bcs _080AE77C
- lsls r2, 2
- adds r3, r1, r2
- ldr r2, [r1, 0x40]
- adds r2, 0x4
- str r2, [r3, 0x44]
- ldrb r2, [r1, 0x2]
- adds r2, 0x1
- strb r2, [r1, 0x2]
- b sub_80AE744
-_080AE77C:
- b sub_80AE6D4
- thumb_func_end sub_80AE764
-
- thumb_func_start sub_80AE780
-sub_80AE780:
- ldrb r2, [r1, 0x2]
- cmp r2, 0
- beq _080AE792
- subs r2, 0x1
- strb r2, [r1, 0x2]
- lsls r2, 2
- adds r3, r1, r2
- ldr r2, [r3, 0x44]
- str r2, [r1, 0x40]
-_080AE792:
- bx lr
- thumb_func_end sub_80AE780
-
- thumb_func_start sub_80AE794
-sub_80AE794:
- push {lr}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- cmp r3, 0
- bne _080AE7A4
- adds r2, 0x1
- str r2, [r1, 0x40]
- b _080AE746
-_080AE7A4:
- ldrb r3, [r1, 0x3]
- adds r3, 0x1
- strb r3, [r1, 0x3]
- mov r12, r3
- bl sub_80AE738
- cmp r12, r3
- bcs _080AE7B6
- b _080AE746
-_080AE7B6:
- movs r3, 0
- strb r3, [r1, 0x3]
- adds r2, 0x5
- str r2, [r1, 0x40]
- pop {r0}
- bx r0
- thumb_func_end sub_80AE794
-
- thumb_func_start sub_80AE7C4
-sub_80AE7C4:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x1D]
- bx r12
- thumb_func_end sub_80AE7C4
-
- thumb_func_start sub_80AE7D0
-sub_80AE7D0:
- mov r12, lr
- bl sub_80AE738
- lsls r3, 1
- strh r3, [r0, 0x1C]
- ldrh r2, [r0, 0x1E]
- muls r3, r2
- lsrs r3, 8
- strh r3, [r0, 0x20]
- bx r12
- thumb_func_end sub_80AE7D0
-
- thumb_func_start sub_80AE7E4
-sub_80AE7E4:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0xA]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE7E4
-
- thumb_func_start sub_80AE7F8
-sub_80AE7F8:
- mov r12, lr
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- str r2, [r1, 0x40]
- lsls r2, r3, 1
- adds r2, r3
- lsls r2, 2
- ldr r3, [r0, 0x30]
- adds r2, r3
- ldr r3, [r2]
- bl _080AE71E
- str r3, [r1, 0x24]
- ldr r3, [r2, 0x4]
- bl _080AE71E
- str r3, [r1, 0x28]
- ldr r3, [r2, 0x8]
- bl _080AE71E
- str r3, [r1, 0x2C]
- bx r12
- thumb_func_end sub_80AE7F8
-
- thumb_func_start sub_80AE828
-sub_80AE828:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x12]
- ldrb r3, [r1]
- movs r2, 0x3
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE828
-
- thumb_func_start sub_80AE83C
-sub_80AE83C:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0x14]
- ldrb r3, [r1]
- movs r2, 0x3
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE83C
-
- thumb_func_start sub_80AE850
-sub_80AE850:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0xE]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE850
-
- thumb_func_start sub_80AE864
-sub_80AE864:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0xF]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE864
-
- thumb_func_start sub_80AE878
-sub_80AE878:
- mov r12, lr
- bl sub_80AE738
- strb r3, [r1, 0x1B]
- bx r12
- thumb_func_end sub_80AE878
-
- thumb_func_start sub_80AE884
-sub_80AE884:
- mov r12, lr
- bl sub_80AE738
- ldrb r0, [r1, 0x18]
- cmp r0, r3
- beq _080AE89A
- strb r3, [r1, 0x18]
- ldrb r3, [r1]
- movs r2, 0xF
- orrs r3, r2
- strb r3, [r1]
-_080AE89A:
- bx r12
- thumb_func_end sub_80AE884
-
- thumb_func_start sub_80AE89C
-sub_80AE89C:
- mov r12, lr
- bl sub_80AE738
- subs r3, 0x40
- strb r3, [r1, 0xC]
- ldrb r3, [r1]
- movs r2, 0xC
- orrs r3, r2
- strb r3, [r1]
- bx r12
- thumb_func_end sub_80AE89C
-
- thumb_func_start sub_80AE8B0
-sub_80AE8B0:
- mov r12, lr
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- ldr r0, _080AE8C4
- adds r0, r3
- bl _080AE73A
- strb r3, [r0]
- bx r12
- .align 2, 0
-_080AE8C4: .4byte 0x04000060
- thumb_func_end sub_80AE8B0
-
- thumb_func_start m4aSoundVSync
-m4aSoundVSync:
- ldr r0, _080AEB74
- ldr r0, [r0]
- ldr r2, _080AEB78
- ldr r3, [r0]
- subs r3, r2
- cmp r3, 0x1
- bhi _080AE908
- ldrb r1, [r0, 0x4]
- subs r1, 0x1
- strb r1, [r0, 0x4]
- bgt _080AE908
- ldrb r1, [r0, 0xB]
- strb r1, [r0, 0x4]
- ldr r2, _080AE90C
- ldr r1, [r2, 0x8]
- lsls r1, 7
- bcc _080AE8EE
- ldr r1, _080AE910
- str r1, [r2, 0x8]
-_080AE8EE:
- ldr r1, [r2, 0x14]
- lsls r1, 7
- bcc _080AE8F8
- ldr r1, _080AE910
- str r1, [r2, 0x14]
-_080AE8F8:
- movs r1, 0x4
- lsls r1, 8
- strh r1, [r2, 0xA]
- strh r1, [r2, 0x16]
- movs r1, 0xB6
- lsls r1, 8
- strh r1, [r2, 0xA]
- strh r1, [r2, 0x16]
-_080AE908:
- bx lr
- .align 2, 0
-_080AE90C: .4byte 0x040000bc
-_080AE910: .4byte 0x84400004
- thumb_func_end m4aSoundVSync
-
- thumb_func_start sub_80AE914
-sub_80AE914:
- ldr r2, _080AEB78
- ldr r3, [r0, 0x34]
- cmp r2, r3
- beq _080AE91E
- bx lr
-_080AE91E:
- adds r3, 0x1
- str r3, [r0, 0x34]
- push {r0,lr}
- ldr r3, [r0, 0x38]
- cmp r3, 0
- beq _080AE930
- ldr r0, [r0, 0x3C]
- bl _080AEB6C
-_080AE930:
- pop {r0}
- push {r4-r7}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- mov r7, r11
- push {r4-r7}
- adds r7, r0, 0
- ldr r0, [r7, 0x4]
- cmp r0, 0
- bge _080AE948
- b _080AEB5C
-_080AE948:
- ldr r0, _080AEB74
- ldr r0, [r0]
- mov r8, r0
- adds r0, r7, 0
- bl sub_80AF800
- ldr r0, [r7, 0x4]
- cmp r0, 0
- bge _080AE95C
- b _080AEB5C
-_080AE95C:
- ldrh r0, [r7, 0x22]
- ldrh r1, [r7, 0x20]
- adds r0, r1
- b _080AEAAC
-_080AE964:
- ldrb r6, [r7, 0x8]
- ldr r5, [r7, 0x2C]
- movs r3, 0x1
- movs r4, 0
-_080AE96C:
- ldrb r0, [r5]
- movs r1, 0x80
- tst r1, r0
- bne _080AE976
- b _080AEA88
-_080AE976:
- mov r10, r3
- orrs r4, r3
- mov r11, r4
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AE9AA
-_080AE982:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AE99E
- ldrb r0, [r4, 0x10]
- cmp r0, 0
- beq _080AE9A4
- subs r0, 0x1
- strb r0, [r4, 0x10]
- bne _080AE9A4
- movs r0, 0x40
- orrs r1, r0
- strb r1, [r4]
- b _080AE9A4
-_080AE99E:
- adds r0, r4, 0
- bl sub_80AF2FC
-_080AE9A4:
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AE982
-_080AE9AA:
- ldrb r3, [r5]
- movs r0, 0x40
- tst r0, r3
- beq _080AEA28
- adds r0, r5, 0
- bl sub_80AF310
- movs r0, 0x80
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0xF]
- movs r0, 0x40
- strb r0, [r5, 0x13]
- movs r0, 0x16
- strb r0, [r5, 0x19]
- movs r0, 0x1
- adds r1, r5, 0x6
- strb r0, [r1, 0x1E]
- b _080AEA28
-_080AE9D0:
- ldr r2, [r5, 0x40]
- ldrb r1, [r2]
- cmp r1, 0x80
- bcs _080AE9DC
- ldrb r1, [r5, 0x7]
- b _080AE9E6
-_080AE9DC:
- adds r2, 0x1
- str r2, [r5, 0x40]
- cmp r1, 0xBD
- bcc _080AE9E6
- strb r1, [r5, 0x7]
-_080AE9E6:
- cmp r1, 0xCF
- bcc _080AE9FC
- mov r0, r8
- ldr r3, [r0, 0x38]
- adds r0, r1, 0
- subs r0, 0xCF
- adds r1, r7, 0
- adds r2, r5, 0
- bl _080AEB6C
- b _080AEA28
-_080AE9FC:
- cmp r1, 0xB0
- bls _080AEA1E
- adds r0, r1, 0
- subs r0, 0xB1
- strb r0, [r7, 0xA]
- mov r3, r8
- ldr r3, [r3, 0x34]
- lsls r0, 2
- ldr r3, [r3, r0]
- adds r0, r7, 0
- adds r1, r5, 0
- bl _080AEB6C
- ldrb r0, [r5]
- cmp r0, 0
- beq _080AEA84
- b _080AEA28
-_080AEA1E:
- ldr r0, _080AEB70
- subs r1, 0x80
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r5, 0x1]
-_080AEA28:
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- beq _080AE9D0
- subs r0, 0x1
- strb r0, [r5, 0x1]
- ldrb r1, [r5, 0x19]
- cmp r1, 0
- beq _080AEA84
- ldrb r0, [r5, 0x17]
- cmp r0, 0
- beq _080AEA84
- ldrb r0, [r5, 0x1C]
- cmp r0, 0
- beq _080AEA4A
- subs r0, 0x1
- strb r0, [r5, 0x1C]
- b _080AEA84
-_080AEA4A:
- ldrb r0, [r5, 0x1A]
- adds r0, r1
- strb r0, [r5, 0x1A]
- adds r1, r0, 0
- subs r0, 0x40
- lsls r0, 24
- bpl _080AEA5E
- lsls r2, r1, 24
- asrs r2, 24
- b _080AEA62
-_080AEA5E:
- movs r0, 0x80
- subs r2, r0, r1
-_080AEA62:
- ldrb r0, [r5, 0x17]
- muls r0, r2
- asrs r2, r0, 6
- ldrb r0, [r5, 0x16]
- eors r0, r2
- lsls r0, 24
- beq _080AEA84
- strb r2, [r5, 0x16]
- ldrb r0, [r5]
- ldrb r1, [r5, 0x18]
- cmp r1, 0
- bne _080AEA7E
- movs r1, 0xC
- b _080AEA80
-_080AEA7E:
- movs r1, 0x3
-_080AEA80:
- orrs r0, r1
- strb r0, [r5]
-_080AEA84:
- mov r3, r10
- mov r4, r11
-_080AEA88:
- subs r6, 0x1
- ble _080AEA94
- movs r0, 0x50
- adds r5, r0
- lsls r3, 1
- b _080AE96C
-_080AEA94:
- ldr r0, [r7, 0xC]
- adds r0, 0x1
- str r0, [r7, 0xC]
- cmp r4, 0
- bne _080AEAA6
- movs r0, 0x80
- lsls r0, 24
- str r0, [r7, 0x4]
- b _080AEB5C
-_080AEAA6:
- str r4, [r7, 0x4]
- ldrh r0, [r7, 0x22]
- subs r0, 0x96
-_080AEAAC:
- strh r0, [r7, 0x22]
- cmp r0, 0x96
- bcc _080AEAB4
- b _080AE964
-_080AEAB4:
- ldrb r2, [r7, 0x8]
- ldr r5, [r7, 0x2C]
-_080AEAB8:
- ldrb r0, [r5]
- movs r1, 0x80
- tst r1, r0
- beq _080AEB52
- movs r1, 0xF
- tst r1, r0
- beq _080AEB52
- mov r9, r2
- adds r0, r7, 0
- adds r1, r5, 0
- bl sub_80AF8C8
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AEB48
-_080AEAD6:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- bne _080AEAE6
- adds r0, r4, 0
- bl sub_80AF2FC
- b _080AEB42
-_080AEAE6:
- ldrb r0, [r4, 0x1]
- movs r6, 0x7
- ands r6, r0
- ldrb r3, [r5]
- movs r0, 0x3
- tst r0, r3
- beq _080AEB04
- bl sub_80AEBC0
- cmp r6, 0
- beq _080AEB04
- ldrb r0, [r4, 0x1D]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1D]
-_080AEB04:
- ldrb r3, [r5]
- movs r0, 0xC
- tst r0, r3
- beq _080AEB42
- ldrb r1, [r4, 0x8]
- movs r0, 0x8
- ldrsb r0, [r5, r0]
- adds r2, r1, r0
- bpl _080AEB18
- movs r2, 0
-_080AEB18:
- cmp r6, 0
- beq _080AEB36
- mov r0, r8
- ldr r3, [r0, 0x30]
- adds r1, r2, 0
- ldrb r2, [r5, 0x9]
- adds r0, r6, 0
- bl _080AEB6C
- str r0, [r4, 0x20]
- ldrb r0, [r4, 0x1D]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4, 0x1D]
- b _080AEB42
-_080AEB36:
- adds r1, r2, 0
- ldrb r2, [r5, 0x9]
- ldr r0, [r4, 0x24]
- bl sub_80AEE80
- str r0, [r4, 0x20]
-_080AEB42:
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AEAD6
-_080AEB48:
- ldrb r0, [r5]
- movs r1, 0xF0
- ands r0, r1
- strb r0, [r5]
- mov r2, r9
-_080AEB52:
- subs r2, 0x1
- ble _080AEB5C
- movs r0, 0x50
- adds r5, r0
- bgt _080AEAB8
-_080AEB5C:
- ldr r0, _080AEB78
- str r0, [r7, 0x34]
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r3}
-_080AEB6C:
- bx r3
- .align 2, 0
-_080AEB70: .4byte gUnknown_826FC00
-_080AEB74: .4byte SOUND_INFO_PTR
-_080AEB78: .4byte 0x68736d53
- thumb_func_end sub_80AE914
-
- thumb_func_start sub_80AEB7C
-sub_80AEB7C:
- push {r4-r6,lr}
- adds r5, r1, 0
- ldrb r1, [r5]
- movs r0, 0x80
- tst r0, r1
- beq _080AEBB4
- ldr r4, [r5, 0x20]
- cmp r4, 0
- beq _080AEBB2
- movs r6, 0
-_080AEB90:
- ldrb r0, [r4]
- cmp r0, 0
- beq _080AEBAA
- ldrb r0, [r4, 0x1]
- movs r3, 0x7
- ands r0, r3
- beq _080AEBA8
- ldr r3, _080AEBBC
- ldr r3, [r3]
- ldr r3, [r3, 0x2C]
- bl _080AEB6C
-_080AEBA8:
- strb r6, [r4]
-_080AEBAA:
- str r6, [r4, 0x2C]
- ldr r4, [r4, 0x34]
- cmp r4, 0
- bne _080AEB90
-_080AEBB2:
- str r4, [r5, 0x20]
-_080AEBB4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEBBC: .4byte SOUND_INFO_PTR
- thumb_func_end sub_80AEB7C
-
- thumb_func_start sub_80AEBC0
-sub_80AEBC0:
- ldrb r1, [r4, 0x12]
- movs r0, 0x14
- ldrsb r2, [r4, r0]
- movs r3, 0x80
- adds r3, r2
- muls r3, r1
- ldrb r0, [r5, 0x10]
- muls r0, r3
- asrs r0, 14
- cmp r0, 0xFF
- bls _080AEBD8
- movs r0, 0xFF
-_080AEBD8:
- strb r0, [r4, 0x2]
- movs r3, 0x7F
- subs r3, r2
- muls r3, r1
- ldrb r0, [r5, 0x11]
- muls r0, r3
- asrs r0, 14
- cmp r0, 0xFF
- bls _080AEBEC
- movs r0, 0xFF
-_080AEBEC:
- strb r0, [r4, 0x3]
- bx lr
- thumb_func_end sub_80AEBC0
-
- thumb_func_start sub_80AEBF0
-sub_80AEBF0:
- push {r4-r7,lr}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- mov r7, r11
- push {r4-r7}
- sub sp, 0x18
- str r1, [sp]
- adds r5, r2, 0
- ldr r1, _080AEDE8
- ldr r1, [r1]
- str r1, [sp, 0x4]
- ldr r1, _080AEDEC
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r5, 0x4]
- ldr r3, [r5, 0x40]
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC36
- strb r0, [r5, 0x5]
- adds r3, 0x1
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC34
- strb r0, [r5, 0x6]
- adds r3, 0x1
- ldrb r0, [r3]
- cmp r0, 0x80
- bcs _080AEC34
- ldrb r1, [r5, 0x4]
- adds r1, r0
- strb r1, [r5, 0x4]
- adds r3, 0x1
-_080AEC34:
- str r3, [r5, 0x40]
-_080AEC36:
- movs r0, 0
- str r0, [sp, 0x14]
- adds r4, r5, 0
- adds r4, 0x24
- ldrb r2, [r4]
- movs r0, 0xC0
- tst r0, r2
- beq _080AEC88
- ldrb r3, [r5, 0x5]
- movs r0, 0x40
- tst r0, r2
- beq _080AEC56
- ldr r1, [r5, 0x2C]
- adds r1, r3
- ldrb r0, [r1]
- b _080AEC58
-_080AEC56:
- adds r0, r3, 0
-_080AEC58:
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r0, [r5, 0x28]
- adds r1, r0
- mov r9, r1
- mov r6, r9
- ldrb r1, [r6]
- movs r0, 0xC0
- tst r0, r1
- beq _080AEC70
- b _080AEDD6
-_080AEC70:
- movs r0, 0x80
- tst r0, r2
- beq _080AEC8C
- ldrb r1, [r6, 0x3]
- movs r0, 0x80
- tst r0, r1
- beq _080AEC84
- subs r1, 0xC0
- lsls r1, 1
- str r1, [sp, 0x14]
-_080AEC84:
- ldrb r3, [r6, 0x1]
- b _080AEC8C
-_080AEC88:
- mov r9, r4
- ldrb r3, [r5, 0x5]
-_080AEC8C:
- str r3, [sp, 0x8]
- ldr r6, [sp]
- ldrb r1, [r6, 0x9]
- ldrb r0, [r5, 0x1D]
- adds r0, r1
- cmp r0, 0xFF
- bls _080AEC9C
- movs r0, 0xFF
-_080AEC9C:
- str r0, [sp, 0x10]
- mov r6, r9
- ldrb r0, [r6]
- movs r6, 0x7
- ands r6, r0
- str r6, [sp, 0xC]
- beq _080AECDC
- ldr r0, [sp, 0x4]
- ldr r4, [r0, 0x1C]
- cmp r4, 0
- bne _080AECB4
- b _080AEDD6
-_080AECB4:
- subs r6, 0x1
- lsls r0, r6, 6
- adds r4, r0
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AED30
- movs r0, 0x40
- tst r0, r1
- bne _080AED30
- ldrb r1, [r4, 0x13]
- ldr r0, [sp, 0x10]
- cmp r1, r0
- bcc _080AED30
- beq _080AECD4
- b _080AEDD6
-_080AECD4:
- ldr r0, [r4, 0x2C]
- cmp r0, r5
- bcs _080AED30
- b _080AEDD6
-_080AECDC:
- ldr r6, [sp, 0x10]
- adds r7, r5, 0
- movs r2, 0
- mov r8, r2
- ldr r4, [sp, 0x4]
- ldrb r3, [r4, 0x6]
- adds r4, 0x50
-_080AECEA:
- ldrb r1, [r4]
- movs r0, 0xC7
- tst r0, r1
- beq _080AED30
- movs r0, 0x40
- tst r0, r1
- beq _080AED04
- cmp r2, 0
- bne _080AED08
- adds r2, 0x1
- ldrb r6, [r4, 0x13]
- ldr r7, [r4, 0x2C]
- b _080AED22
-_080AED04:
- cmp r2, 0
- bne _080AED24
-_080AED08:
- ldrb r0, [r4, 0x13]
- cmp r0, r6
- bcs _080AED14
- adds r6, r0, 0
- ldr r7, [r4, 0x2C]
- b _080AED22
-_080AED14:
- bhi _080AED24
- ldr r0, [r4, 0x2C]
- cmp r0, r7
- bls _080AED20
- adds r7, r0, 0
- b _080AED22
-_080AED20:
- bcc _080AED24
-_080AED22:
- mov r8, r4
-_080AED24:
- adds r4, 0x40
- subs r3, 0x1
- bgt _080AECEA
- mov r4, r8
- cmp r4, 0
- beq _080AEDD6
-_080AED30:
- adds r0, r4, 0
- bl sub_80AF2FC
- movs r1, 0
- str r1, [r4, 0x30]
- ldr r3, [r5, 0x20]
- str r3, [r4, 0x34]
- cmp r3, 0
- beq _080AED44
- str r4, [r3, 0x30]
-_080AED44:
- str r4, [r5, 0x20]
- str r5, [r4, 0x2C]
- ldrb r0, [r5, 0x1B]
- strb r0, [r5, 0x1C]
- cmp r0, r1
- beq _080AED56
- adds r1, r5, 0
- bl sub_80AEE30
-_080AED56:
- ldr r0, [sp]
- adds r1, r5, 0
- bl sub_80AF8C8
- ldr r0, [r5, 0x4]
- str r0, [r4, 0x10]
- ldr r0, [sp, 0x10]
- strb r0, [r4, 0x13]
- ldr r0, [sp, 0x8]
- strb r0, [r4, 0x8]
- ldr r0, [sp, 0x14]
- strb r0, [r4, 0x14]
- mov r6, r9
- ldrb r0, [r6]
- strb r0, [r4, 0x1]
- ldr r7, [r6, 0x4]
- str r7, [r4, 0x24]
- ldr r0, [r6, 0x8]
- str r0, [r4, 0x4]
- ldrh r0, [r5, 0x1E]
- strh r0, [r4, 0xC]
- bl sub_80AEBC0
- ldrb r1, [r4, 0x8]
- movs r0, 0x8
- ldrsb r0, [r5, r0]
- adds r3, r1, r0
- bpl _080AED90
- movs r3, 0
-_080AED90:
- ldr r6, [sp, 0xC]
- cmp r6, 0
- beq _080AEDBE
- mov r6, r9
- ldrb r0, [r6, 0x2]
- strb r0, [r4, 0x1E]
- ldrb r1, [r6, 0x3]
- movs r0, 0x80
- tst r0, r1
- bne _080AEDAA
- movs r0, 0x70
- tst r0, r1
- bne _080AEDAC
-_080AEDAA:
- movs r1, 0x8
-_080AEDAC:
- strb r1, [r4, 0x1F]
- ldrb r2, [r5, 0x9]
- adds r1, r3, 0
- ldr r0, [sp, 0xC]
- ldr r3, [sp, 0x4]
- ldr r3, [r3, 0x30]
- bl _080AEB6C
- b _080AEDC8
-_080AEDBE:
- ldrb r2, [r5, 0x9]
- adds r1, r3, 0
- adds r0, r7, 0
- bl sub_80AEE80
-_080AEDC8:
- str r0, [r4, 0x20]
- movs r0, 0x80
- strb r0, [r4]
- ldrb r1, [r5]
- movs r0, 0xF0
- ands r0, r1
- strb r0, [r5]
-_080AEDD6:
- add sp, 0x18
- pop {r0-r7}
- mov r8, r0
- mov r9, r1
- mov r10, r2
- mov r11, r3
- pop {r0}
- bx r0
- .align 2, 0
-_080AEDE8: .4byte SOUND_INFO_PTR
-_080AEDEC: .4byte gUnknown_826FC00
- thumb_func_end sub_80AEBF0
-
- thumb_func_start sub_80AEDF0
-sub_80AEDF0:
- push {r4,r5}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- cmp r3, 0x80
- bcs _080AEE02
- strb r3, [r1, 0x5]
- adds r2, 0x1
- str r2, [r1, 0x40]
- b _080AEE04
-_080AEE02:
- ldrb r3, [r1, 0x5]
-_080AEE04:
- ldr r1, [r1, 0x20]
- cmp r1, 0
- beq _080AEE2C
- movs r4, 0x83
- movs r5, 0x40
-_080AEE0E:
- ldrb r2, [r1]
- tst r2, r4
- beq _080AEE26
- tst r2, r5
- bne _080AEE26
- ldrb r0, [r1, 0x11]
- cmp r0, r3
- bne _080AEE26
- movs r0, 0x40
- orrs r2, r0
- strb r2, [r1]
- b _080AEE2C
-_080AEE26:
- ldr r1, [r1, 0x34]
- cmp r1, 0
- bne _080AEE0E
-_080AEE2C:
- pop {r4,r5}
- bx lr
- thumb_func_end sub_80AEDF0
-
- thumb_func_start sub_80AEE30
-sub_80AEE30:
- movs r2, 0
- strb r2, [r1, 0x16]
- strb r2, [r1, 0x1A]
- ldrb r2, [r1, 0x18]
- cmp r2, 0
- bne _080AEE40
- movs r2, 0xC
- b _080AEE42
-_080AEE40:
- movs r2, 0x3
-_080AEE42:
- ldrb r3, [r1]
- orrs r3, r2
- strb r3, [r1]
- bx lr
- thumb_func_end sub_80AEE30
-
- thumb_func_start sub_80AEE4C
-sub_80AEE4C:
- ldr r2, [r1, 0x40]
- adds r3, r2, 0x1
- str r3, [r1, 0x40]
- ldrb r3, [r2]
- bx lr
- thumb_func_end sub_80AEE4C
-
- thumb_func_start sub_80AEE58
-sub_80AEE58:
- mov r12, lr
- bl sub_80AEE4C
- strb r3, [r1, 0x19]
- cmp r3, 0
- bne _080AEE68
- bl sub_80AEE30
-_080AEE68:
- bx r12
- thumb_func_end sub_80AEE58
-
- thumb_func_start sub_80AEE6C
-sub_80AEE6C:
- mov r12, lr
- bl sub_80AEE4C
- strb r3, [r1, 0x17]
- cmp r3, 0
- bne _080AEE7C
- bl sub_80AEE30
-_080AEE7C:
- bx r12
- thumb_func_end sub_80AEE6C
-
- thumb_func_start sub_80AEE80
-sub_80AEE80:
- push {r4-r7,lr}
- mov r12, r0
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r7, r2, 24
- cmp r6, 0xB2
- bls _080AEE94
- movs r6, 0xB2
- movs r7, 0xFF
- lsls r7, 24
-_080AEE94:
- ldr r3, _080AEEDC
- adds r0, r6, r3
- ldrb r5, [r0]
- ldr r4, _080AEEE0
- movs r2, 0xF
- adds r0, r5, 0
- ands r0, r2
- lsls r0, 2
- adds r0, r4
- lsrs r1, r5, 4
- ldr r5, [r0]
- lsrs r5, r1
- adds r0, r6, 0x1
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r1, 0
- ands r0, r2
- lsls r0, 2
- adds r0, r4
- lsrs r1, 4
- ldr r0, [r0]
- lsrs r0, r1
- mov r1, r12
- ldr r4, [r1, 0x4]
- subs r0, r5
- adds r1, r7, 0
- bl umul3232H32
- adds r1, r0, 0
- adds r1, r5, r1
- adds r0, r4, 0
- bl umul3232H32
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080AEEDC: .4byte gUnknown_826FA1C
-_080AEEE0: .4byte gUnknown_826FAD0
- thumb_func_end sub_80AEE80
-
- thumb_func_start nullsub_212
-nullsub_212:
- bx lr
- thumb_func_end nullsub_212
-
- thumb_func_start sub_80AEEE8
-sub_80AEEE8:
- adds r2, r0, 0
- ldr r3, [r2, 0x34]
- ldr r0, _080AEEFC
- cmp r3, r0
- bne _080AEEFA
- ldr r0, [r2, 0x4]
- ldr r1, _080AEF00
- ands r0, r1
- str r0, [r2, 0x4]
-_080AEEFA:
- bx lr
- .align 2, 0
-_080AEEFC: .4byte 0x68736d53
-_080AEF00: .4byte 0x7fffffff
- thumb_func_end sub_80AEEE8
-
- thumb_func_start sub_80AEF04
-sub_80AEF04:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AEF20
- cmp r3, r0
- bne _080AEF1C
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r2, 0x28]
-_080AEF1C:
- bx lr
- .align 2, 0
-_080AEF20: .4byte 0x68736d53
- thumb_func_end sub_80AEF04
-
- thumb_func_start sub_80AEF24
-sub_80AEF24:
- push {r4-r6,lr}
- ldr r0, _080AEF78
- movs r1, 0x2
- negs r1, r1
- ands r0, r1
- ldr r1, _080AEF7C
- ldr r2, _080AEF80
- bl CpuSet
- ldr r0, _080AEF84
- bl sub_80AF324
- ldr r0, _080AEF88
- bl sub_80AF1E0
- ldr r0, _080AEF8C
- bl sub_80AF4C0
- ldr r0, _080AEF90
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AEF72
- ldr r5, _080AEF94
- adds r6, r0, 0
-_080AEF56:
- ldr r4, [r5]
- ldr r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- adds r0, r4, 0
- bl sub_80AF664
- ldrh r0, [r5, 0xA]
- strb r0, [r4, 0xB]
- ldr r0, _080AEF98
- str r0, [r4, 0x18]
- adds r5, 0xC
- subs r6, 0x1
- cmp r6, 0
- bne _080AEF56
-_080AEF72:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AEF78: .4byte sub_80AE2F8
-_080AEF7C: .4byte SoundMainRAM_Buffer
-_080AEF80: .4byte 0x04000100
-_080AEF84: .4byte gUnknown_2039ED0
-_080AEF88: .4byte gUnknown_203AF10
-_080AEF8C: .4byte 0x0096e500
-_080AEF90: .4byte 0x00000008
-_080AEF94: .4byte 0x09e8665c
-_080AEF98: .4byte gUnknown_2000A30
- thumb_func_end sub_80AEF24
-
- thumb_func_start m4aSoundMain
-m4aSoundMain:
- push {lr}
- bl SoundMain
- pop {r0}
- bx r0
- thumb_func_end m4aSoundMain
-
- thumb_func_start sub_80AEFA8
-sub_80AEFA8:
- push {lr}
- lsls r0, 16
- ldr r2, _080AEFCC
- ldr r1, _080AEFD0
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r0]
- adds r0, r2, 0
- bl sub_80AF6DC
- pop {r0}
- bx r0
- .align 2, 0
-_080AEFCC: .4byte 0x09e8665c
-_080AEFD0: .4byte 0x09e866bc
- thumb_func_end sub_80AEFA8
-
- thumb_func_start sub_80AEFD4
-sub_80AEFD4:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF000
- ldr r1, _080AF004
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- ldr r3, [r1]
- ldr r2, [r0]
- cmp r3, r2
- beq _080AF008
- adds r0, r1, 0
- adds r1, r2, 0
- bl sub_80AF6DC
- b _080AF01C
- .align 2, 0
-_080AF000: .4byte 0x09e8665c
-_080AF004: .4byte 0x09e866bc
-_080AF008:
- ldr r2, [r1, 0x4]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- beq _080AF014
- cmp r2, 0
- bge _080AF01C
-_080AF014:
- adds r0, r1, 0
- adds r1, r3, 0
- bl sub_80AF6DC
-_080AF01C:
- pop {r0}
- bx r0
- thumb_func_end sub_80AEFD4
-
- thumb_func_start sub_80AF020
-sub_80AF020:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF04C
- ldr r1, _080AF050
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- ldr r3, [r1]
- ldr r2, [r0]
- cmp r3, r2
- beq _080AF054
- adds r0, r1, 0
- adds r1, r2, 0
- bl sub_80AF6DC
- b _080AF070
- .align 2, 0
-_080AF04C: .4byte 0x09e8665c
-_080AF050: .4byte 0x09e866bc
-_080AF054:
- ldr r2, [r1, 0x4]
- ldrh r0, [r1, 0x4]
- cmp r0, 0
- bne _080AF066
- adds r0, r1, 0
- adds r1, r3, 0
- bl sub_80AF6DC
- b _080AF070
-_080AF066:
- cmp r2, 0
- bge _080AF070
- adds r0, r1, 0
- bl sub_80AEEE8
-_080AF070:
- pop {r0}
- bx r0
- thumb_func_end sub_80AF020
-
- thumb_func_start sub_80AF074
-sub_80AF074:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF0A0
- ldr r1, _080AF0A4
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- bne _080AF09A
- adds r0, r2, 0
- bl sub_80AF7C0
-_080AF09A:
- pop {r0}
- bx r0
- .align 2, 0
-_080AF0A0: .4byte 0x09e8665c
-_080AF0A4: .4byte 0x09e866bc
- thumb_func_end sub_80AF074
-
- thumb_func_start sub_80AF0A8
-sub_80AF0A8:
- push {lr}
- lsls r0, 16
- ldr r2, _080AF0D4
- ldr r1, _080AF0D8
- lsrs r0, 13
- adds r0, r1
- ldrh r3, [r0, 0x4]
- lsls r1, r3, 1
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- ldr r2, [r1]
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- bne _080AF0CE
- adds r0, r2, 0
- bl sub_80AEEE8
-_080AF0CE:
- pop {r0}
- bx r0
- .align 2, 0
-_080AF0D4: .4byte 0x09e8665c
-_080AF0D8: .4byte 0x09e866bc
- thumb_func_end sub_80AF0A8
-
- thumb_func_start sub_80AF0DC
-sub_80AF0DC:
- push {r4,r5,lr}
- ldr r0, _080AF100
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AF0FA
- ldr r5, _080AF104
- adds r4, r0, 0
-_080AF0EC:
- ldr r0, [r5]
- bl sub_80AF7C0
- adds r5, 0xC
- subs r4, 0x1
- cmp r4, 0
- bne _080AF0EC
-_080AF0FA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF100: .4byte 0x00000008
-_080AF104: .4byte 0x09e8665c
- thumb_func_end sub_80AF0DC
-
- thumb_func_start sub_80AF108
-sub_80AF108:
- push {lr}
- bl sub_80AEEE8
- pop {r0}
- bx r0
- thumb_func_end sub_80AF108
-
- thumb_func_start sub_80AF114
-sub_80AF114:
- push {r4,r5,lr}
- ldr r0, _080AF138
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080AF132
- ldr r5, _080AF13C
- adds r4, r0, 0
-_080AF124:
- ldr r0, [r5]
- bl sub_80AEEE8
- adds r5, 0xC
- subs r4, 0x1
- cmp r4, 0
- bne _080AF124
-_080AF132:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF138: .4byte 0x00000008
-_080AF13C: .4byte 0x09e8665c
- thumb_func_end sub_80AF114
-
- thumb_func_start sub_80AF140
-sub_80AF140:
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_80AEF04
- pop {r0}
- bx r0
- thumb_func_end sub_80AF140
-
- thumb_func_start sub_80AF150
-sub_80AF150:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AF168
- cmp r3, r0
- bne _080AF166
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- ldr r0, _080AF16C
- strh r0, [r2, 0x28]
-_080AF166:
- bx lr
- .align 2, 0
-_080AF168: .4byte 0x68736d53
-_080AF16C: .4byte 0x00000101
- thumb_func_end sub_80AF150
-
- thumb_func_start sub_80AF170
-sub_80AF170:
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AF190
- cmp r3, r0
- bne _080AF18E
- strh r1, [r2, 0x26]
- strh r1, [r2, 0x24]
- movs r0, 0x2
- strh r0, [r2, 0x28]
- ldr r0, [r2, 0x4]
- ldr r1, _080AF194
- ands r0, r1
- str r0, [r2, 0x4]
-_080AF18E:
- bx lr
- .align 2, 0
-_080AF190: .4byte 0x68736d53
-_080AF194: .4byte 0x7fffffff
- thumb_func_end sub_80AF170
-
- thumb_func_start sub_80AF198
-sub_80AF198:
- push {r4-r7,lr}
- ldrb r5, [r0, 0x8]
- ldr r4, [r0, 0x2C]
- cmp r5, 0
- ble _080AF1DA
- movs r7, 0x80
-_080AF1A4:
- ldrb r1, [r4]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF1D2
- movs r6, 0x40
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF1D2
- adds r0, r4, 0
- bl sub_80AF310
- strb r7, [r4]
- movs r0, 0x2
- strb r0, [r4, 0xF]
- strb r6, [r4, 0x13]
- movs r0, 0x16
- strb r0, [r4, 0x19]
- adds r1, r4, 0
- adds r1, 0x24
- movs r0, 0x1
- strb r0, [r1]
-_080AF1D2:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF1A4
-_080AF1DA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF198
-
- thumb_func_start sub_80AF1E0
-sub_80AF1E0:
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldr r1, _080AF2A8
- movs r0, 0x8F
- strh r0, [r1]
- ldr r3, _080AF2AC
- movs r2, 0
- strh r2, [r3]
- ldr r0, _080AF2B0
- movs r1, 0x8
- strb r1, [r0]
- adds r0, 0x6
- strb r1, [r0]
- adds r0, 0x10
- strb r1, [r0]
- subs r0, 0x14
- movs r1, 0x80
- strb r1, [r0]
- adds r0, 0x8
- strb r1, [r0]
- adds r0, 0x10
- strb r1, [r0]
- subs r0, 0xD
- strb r2, [r0]
- movs r0, 0x77
- strb r0, [r3]
- ldr r0, _080AF2B4
- ldr r4, [r0]
- ldr r6, [r4]
- ldr r0, _080AF2B8
- cmp r6, r0
- bne _080AF2A0
- adds r0, r6, 0x1
- str r0, [r4]
- ldr r1, _080AF2BC
- ldr r0, _080AF2C0
- str r0, [r1, 0x20]
- ldr r0, _080AF2C4
- str r0, [r1, 0x44]
- ldr r0, _080AF2C8
- str r0, [r1, 0x4C]
- ldr r0, _080AF2CC
- str r0, [r1, 0x70]
- ldr r0, _080AF2D0
- str r0, [r1, 0x74]
- ldr r0, _080AF2D4
- str r0, [r1, 0x78]
- ldr r0, _080AF2D8
- str r0, [r1, 0x7C]
- adds r2, r1, 0
- adds r2, 0x80
- ldr r0, _080AF2DC
- str r0, [r2]
- adds r1, 0x84
- ldr r0, _080AF2E0
- str r0, [r1]
- str r5, [r4, 0x1C]
- ldr r0, _080AF2E4
- str r0, [r4, 0x28]
- ldr r0, _080AF2E8
- str r0, [r4, 0x2C]
- ldr r0, _080AF2EC
- str r0, [r4, 0x30]
- ldr r0, _080AF2F0
- movs r1, 0
- strb r0, [r4, 0xC]
- str r1, [sp]
- ldr r2, _080AF2F4
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- movs r0, 0x1
- strb r0, [r5, 0x1]
- movs r0, 0x11
- strb r0, [r5, 0x1C]
- adds r1, r5, 0
- adds r1, 0x41
- movs r0, 0x2
- strb r0, [r1]
- adds r1, 0x1B
- movs r0, 0x22
- strb r0, [r1]
- adds r1, 0x25
- movs r0, 0x3
- strb r0, [r1]
- adds r1, 0x1B
- movs r0, 0x44
- strb r0, [r1]
- adds r1, 0x24
- movs r0, 0x4
- strb r0, [r1, 0x1]
- movs r0, 0x88
- strb r0, [r1, 0x1C]
- str r6, [r4]
-_080AF2A0:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF2A8: .4byte 0x04000084
-_080AF2AC: .4byte 0x04000080
-_080AF2B0: .4byte 0x04000063
-_080AF2B4: .4byte SOUND_INFO_PTR
-_080AF2B8: .4byte 0x68736d53
-_080AF2BC: .4byte gUnknown_203AE80
-_080AF2C0: .4byte sub_80B019C
-_080AF2C4: .4byte sub_80AEE58
-_080AF2C8: .4byte sub_80AEE6C
-_080AF2CC: .4byte sub_80B02F4
-_080AF2D0: .4byte sub_80AEDF0
-_080AF2D4: .4byte sub_80AF41C
-_080AF2D8: .4byte sub_80AEB7C
-_080AF2DC: .4byte sub_80AF800
-_080AF2E0: .4byte sub_80AF8C8
-_080AF2E4: .4byte sub_80AFADC
-_080AF2E8: .4byte sub_80AFA24
-_080AF2EC: .4byte sub_80AF97C
-_080AF2F0: .4byte 0x00000000
-_080AF2F4: .4byte 0x05000040
- thumb_func_end sub_80AF1E0
-
- thumb_func_start sub_80AF2F8
-sub_80AF2F8:
- swi 0x2A
- bx lr
- thumb_func_end sub_80AF2F8
-
- thumb_func_start sub_80AF2FC
-sub_80AF2FC:
- push {lr}
- ldr r1, _080AF30C
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080AF30C: .4byte gUnknown_203AF08
- thumb_func_end sub_80AF2FC
-
- thumb_func_start sub_80AF310
-sub_80AF310:
- push {lr}
- ldr r1, _080AF320
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080AF320: .4byte gUnknown_203AF0C
- thumb_func_end sub_80AF310
-
- thumb_func_start sub_80AF324
-sub_80AF324:
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r3, 0
- str r3, [r5]
- ldr r1, _080AF3DC
- ldr r0, [r1]
- movs r2, 0x80
- lsls r2, 18
- ands r0, r2
- cmp r0, 0
- beq _080AF340
- ldr r0, _080AF3E0
- str r0, [r1]
-_080AF340:
- ldr r1, _080AF3E4
- ldr r0, [r1]
- ands r0, r2
- cmp r0, 0
- beq _080AF34E
- ldr r0, _080AF3E0
- str r0, [r1]
-_080AF34E:
- ldr r0, _080AF3E8
- movs r2, 0x80
- lsls r2, 3
- adds r1, r2, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- ldr r1, _080AF3EC
- movs r0, 0x8F
- strh r0, [r1]
- subs r1, 0x2
- ldr r2, _080AF3F0
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, _080AF3F4
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _080AF3F8
- movs r2, 0xD4
- lsls r2, 2
- adds r0, r5, r2
- str r0, [r1]
- adds r1, 0x4
- ldr r0, _080AF3FC
- str r0, [r1]
- adds r1, 0x8
- movs r2, 0x98
- lsls r2, 4
- adds r0, r5, r2
- str r0, [r1]
- adds r1, 0x4
- ldr r0, _080AF400
- str r0, [r1]
- ldr r0, _080AF404
- str r5, [r0]
- str r3, [sp]
- ldr r2, _080AF408
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- movs r0, 0x8
- strb r0, [r5, 0x6]
- movs r0, 0xF
- strb r0, [r5, 0x7]
- ldr r0, _080AF40C
- str r0, [r5, 0x38]
- ldr r0, _080AF410
- str r0, [r5, 0x28]
- str r0, [r5, 0x2C]
- str r0, [r5, 0x30]
- str r0, [r5, 0x3C]
- ldr r4, _080AF414
- adds r0, r4, 0
- bl sub_80AE704
- str r4, [r5, 0x34]
- movs r0, 0x80
- lsls r0, 11
- bl sub_80AF41C
- ldr r0, _080AF418
- str r0, [r5]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF3DC: .4byte 0x040000c4
-_080AF3E0: .4byte 0x84400004
-_080AF3E4: .4byte 0x040000d0
-_080AF3E8: .4byte 0x040000c6
-_080AF3EC: .4byte 0x04000084
-_080AF3F0: .4byte 0x0000a90e
-_080AF3F4: .4byte 0x04000089
-_080AF3F8: .4byte 0x040000bc
-_080AF3FC: .4byte 0x040000a0
-_080AF400: .4byte 0x040000a4
-_080AF404: .4byte SOUND_INFO_PTR
-_080AF408: .4byte 0x050003ec
-_080AF40C: .4byte sub_80AEBF0
-_080AF410: .4byte nullsub_139
-_080AF414: .4byte gUnknown_203AE80
-_080AF418: .4byte 0x68736d53
- thumb_func_end sub_80AF324
-
- thumb_func_start sub_80AF41C
-sub_80AF41C:
- push {r4-r6,lr}
- adds r2, r0, 0
- ldr r0, _080AF49C
- ldr r4, [r0]
- movs r0, 0xF0
- lsls r0, 12
- ands r0, r2
- lsrs r2, r0, 16
- movs r6, 0
- strb r2, [r4, 0x8]
- ldr r1, _080AF4A0
- subs r0, r2, 0x1
- lsls r0, 1
- adds r0, r1
- ldrh r5, [r0]
- str r5, [r4, 0x10]
- movs r0, 0xC6
- lsls r0, 3
- adds r1, r5, 0
- bl __divsi3
- strb r0, [r4, 0xB]
- ldr r0, _080AF4A4
- muls r0, r5
- ldr r1, _080AF4A8
- adds r0, r1
- ldr r1, _080AF4AC
- bl __divsi3
- adds r1, r0, 0
- str r1, [r4, 0x14]
- movs r0, 0x80
- lsls r0, 17
- bl __divsi3
- adds r0, 0x1
- asrs r0, 1
- str r0, [r4, 0x18]
- ldr r0, _080AF4B0
- strh r6, [r0]
- ldr r4, _080AF4B4
- ldr r0, _080AF4B8
- adds r1, r5, 0
- bl __divsi3
- negs r0, r0
- strh r0, [r4]
- bl sub_80AF628
- ldr r1, _080AF4BC
-_080AF480:
- ldrb r0, [r1]
- cmp r0, 0x9F
- beq _080AF480
- ldr r1, _080AF4BC
-_080AF488:
- ldrb r0, [r1]
- cmp r0, 0x9F
- bne _080AF488
- ldr r1, _080AF4B0
- movs r0, 0x80
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF49C: .4byte SOUND_INFO_PTR
-_080AF4A0: .4byte gUnknown_826FB00
-_080AF4A4: .4byte 0x00091d1b
-_080AF4A8: .4byte 0x00001388
-_080AF4AC: .4byte 0x00002710
-_080AF4B0: .4byte 0x04000102
-_080AF4B4: .4byte 0x04000100
-_080AF4B8: .4byte 0x00044940
-_080AF4BC: .4byte 0x04000006
- thumb_func_end sub_80AF41C
-
- thumb_func_start sub_80AF4C0
-sub_80AF4C0:
- push {r4,r5,lr}
- adds r3, r0, 0
- ldr r0, _080AF54C
- ldr r5, [r0]
- ldr r1, [r5]
- ldr r0, _080AF550
- cmp r1, r0
- bne _080AF546
- adds r0, r1, 0x1
- str r0, [r5]
- movs r4, 0xFF
- ands r4, r3
- cmp r4, 0
- beq _080AF4E2
- movs r0, 0x7F
- ands r4, r0
- strb r4, [r5, 0x5]
-_080AF4E2:
- movs r4, 0xF0
- lsls r4, 4
- ands r4, r3
- cmp r4, 0
- beq _080AF502
- lsrs r0, r4, 8
- strb r0, [r5, 0x6]
- movs r4, 0xC
- adds r0, r5, 0
- adds r0, 0x50
- movs r1, 0
-_080AF4F8:
- strb r1, [r0]
- subs r4, 0x1
- adds r0, 0x40
- cmp r4, 0
- bne _080AF4F8
-_080AF502:
- movs r4, 0xF0
- lsls r4, 8
- ands r4, r3
- cmp r4, 0
- beq _080AF510
- lsrs r0, r4, 12
- strb r0, [r5, 0x7]
-_080AF510:
- movs r4, 0xB0
- lsls r4, 16
- ands r4, r3
- cmp r4, 0
- beq _080AF52E
- movs r0, 0xC0
- lsls r0, 14
- ands r0, r4
- lsrs r4, r0, 14
- ldr r2, _080AF554
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r4
- strb r0, [r2]
-_080AF52E:
- movs r4, 0xF0
- lsls r4, 12
- ands r4, r3
- cmp r4, 0
- beq _080AF542
- bl sub_80AF5AC
- adds r0, r4, 0
- bl sub_80AF41C
-_080AF542:
- ldr r0, _080AF550
- str r0, [r5]
-_080AF546:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF54C: .4byte SOUND_INFO_PTR
-_080AF550: .4byte 0x68736d53
-_080AF554: .4byte 0x04000089
- thumb_func_end sub_80AF4C0
-
- thumb_func_start sub_80AF558
-sub_80AF558:
- push {r4-r7,lr}
- ldr r0, _080AF5A4
- ldr r6, [r0]
- ldr r1, [r6]
- ldr r0, _080AF5A8
- cmp r1, r0
- bne _080AF59E
- adds r0, r1, 0x1
- str r0, [r6]
- movs r5, 0xC
- adds r4, r6, 0
- adds r4, 0x50
- movs r0, 0
-_080AF572:
- strb r0, [r4]
- subs r5, 0x1
- adds r4, 0x40
- cmp r5, 0
- bgt _080AF572
- ldr r4, [r6, 0x1C]
- cmp r4, 0
- beq _080AF59A
- movs r5, 0x1
- movs r7, 0
-_080AF586:
- lsls r0, r5, 24
- lsrs r0, 24
- ldr r1, [r6, 0x2C]
- bl _call_via_r1
- strb r7, [r4]
- adds r5, 0x1
- adds r4, 0x40
- cmp r5, 0x4
- ble _080AF586
-_080AF59A:
- ldr r0, _080AF5A8
- str r0, [r6]
-_080AF59E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF5A4: .4byte SOUND_INFO_PTR
-_080AF5A8: .4byte 0x68736d53
- thumb_func_end sub_80AF558
-
- thumb_func_start sub_80AF5AC
-sub_80AF5AC:
- push {lr}
- sub sp, 0x4
- ldr r0, _080AF60C
- ldr r2, [r0]
- ldr r1, [r2]
- ldr r3, _080AF610
- adds r0, r1, r3
- cmp r0, 0x1
- bhi _080AF604
- adds r0, r1, 0
- adds r0, 0xA
- str r0, [r2]
- ldr r1, _080AF614
- ldr r0, [r1]
- movs r3, 0x80
- lsls r3, 18
- ands r0, r3
- cmp r0, 0
- beq _080AF5D6
- ldr r0, _080AF618
- str r0, [r1]
-_080AF5D6:
- ldr r1, _080AF61C
- ldr r0, [r1]
- ands r0, r3
- cmp r0, 0
- beq _080AF5E4
- ldr r0, _080AF618
- str r0, [r1]
-_080AF5E4:
- ldr r0, _080AF620
- movs r3, 0x80
- lsls r3, 3
- adds r1, r3, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0xD4
- lsls r0, 2
- adds r1, r2, r0
- ldr r2, _080AF624
- mov r0, sp
- bl CpuSet
-_080AF604:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080AF60C: .4byte SOUND_INFO_PTR
-_080AF610: .4byte 0x978c92ad
-_080AF614: .4byte 0x040000c4
-_080AF618: .4byte 0x84400004
-_080AF61C: .4byte 0x040000d0
-_080AF620: .4byte 0x040000c6
-_080AF624: .4byte 0x05000318
- thumb_func_end sub_80AF5AC
-
- thumb_func_start sub_80AF628
-sub_80AF628:
- push {r4,lr}
- ldr r0, _080AF658
- ldr r2, [r0]
- ldr r3, [r2]
- ldr r0, _080AF65C
- cmp r3, r0
- beq _080AF650
- ldr r0, _080AF660
- movs r4, 0xB6
- lsls r4, 8
- adds r1, r4, 0
- strh r1, [r0]
- adds r0, 0xC
- strh r1, [r0]
- ldrb r0, [r2, 0x4]
- movs r0, 0
- strb r0, [r2, 0x4]
- adds r0, r3, 0
- subs r0, 0xA
- str r0, [r2]
-_080AF650:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF658: .4byte SOUND_INFO_PTR
-_080AF65C: .4byte 0x68736d53
-_080AF660: .4byte 0x040000c6
- thumb_func_end sub_80AF628
-
- thumb_func_start sub_80AF664
-sub_80AF664:
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0
- beq _080AF6C8
- cmp r4, 0x10
- bls _080AF678
- movs r4, 0x10
-_080AF678:
- ldr r0, _080AF6D0
- ldr r5, [r0]
- ldr r1, [r5]
- ldr r0, _080AF6D4
- cmp r1, r0
- bne _080AF6C8
- adds r0, r1, 0x1
- str r0, [r5]
- adds r0, r7, 0
- bl sub_80AF310
- str r6, [r7, 0x2C]
- strb r4, [r7, 0x8]
- movs r0, 0x80
- lsls r0, 24
- str r0, [r7, 0x4]
- cmp r4, 0
- beq _080AF6AC
- movs r1, 0
-_080AF69E:
- strb r1, [r6]
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, 0x50
- cmp r4, 0
- bne _080AF69E
-_080AF6AC:
- ldr r0, [r5, 0x20]
- cmp r0, 0
- beq _080AF6BC
- str r0, [r7, 0x38]
- ldr r0, [r5, 0x24]
- str r0, [r7, 0x3C]
- movs r0, 0
- str r0, [r5, 0x20]
-_080AF6BC:
- str r7, [r5, 0x24]
- ldr r0, _080AF6D8
- str r0, [r5, 0x20]
- ldr r0, _080AF6D4
- str r0, [r5]
- str r0, [r7, 0x34]
-_080AF6C8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF6D0: .4byte SOUND_INFO_PTR
-_080AF6D4: .4byte 0x68736d53
-_080AF6D8: .4byte sub_80AE914
- thumb_func_end sub_80AF664
-
- thumb_func_start sub_80AF6DC
-sub_80AF6DC:
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- adds r7, r1, 0
- ldr r1, [r5, 0x34]
- ldr r0, _080AF7BC
- cmp r1, r0
- bne _080AF7B2
- ldrb r0, [r5, 0xB]
- ldrb r2, [r7, 0x2]
- cmp r0, 0
- beq _080AF71E
- ldr r0, [r5]
- cmp r0, 0
- beq _080AF708
- ldr r1, [r5, 0x2C]
- movs r0, 0x40
- ldrb r1, [r1]
- ands r0, r1
- cmp r0, 0
- bne _080AF714
-_080AF708:
- ldr r1, [r5, 0x4]
- ldrh r0, [r5, 0x4]
- cmp r0, 0
- beq _080AF71E
- cmp r1, 0
- blt _080AF71E
-_080AF714:
- ldrb r0, [r7, 0x2]
- adds r2, r0, 0
- ldrb r0, [r5, 0x9]
- cmp r0, r2
- bhi _080AF7B2
-_080AF71E:
- ldr r0, [r5, 0x34]
- adds r0, 0x1
- str r0, [r5, 0x34]
- movs r1, 0
- str r1, [r5, 0x4]
- str r7, [r5]
- ldr r0, [r7, 0x4]
- str r0, [r5, 0x30]
- strb r2, [r5, 0x9]
- str r1, [r5, 0xC]
- movs r0, 0x96
- strh r0, [r5, 0x1C]
- strh r0, [r5, 0x20]
- adds r0, 0x6A
- strh r0, [r5, 0x1E]
- strh r1, [r5, 0x22]
- strh r1, [r5, 0x24]
- movs r6, 0
- ldr r4, [r5, 0x2C]
- ldrb r1, [r7]
- cmp r6, r1
- bge _080AF77E
- ldrb r0, [r5, 0x8]
- cmp r6, r0
- bge _080AF79E
- mov r8, r6
-_080AF752:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- movs r0, 0xC0
- strb r0, [r4]
- mov r1, r8
- str r1, [r4, 0x20]
- lsls r1, r6, 2
- adds r0, r7, 0
- adds r0, 0x8
- adds r0, r1
- ldr r0, [r0]
- str r0, [r4, 0x40]
- adds r6, 0x1
- adds r4, 0x50
- ldrb r0, [r7]
- cmp r6, r0
- bge _080AF77E
- ldrb r1, [r5, 0x8]
- cmp r6, r1
- blt _080AF752
-_080AF77E:
- ldrb r0, [r5, 0x8]
- cmp r6, r0
- bge _080AF79E
- movs r1, 0
- mov r8, r1
-_080AF788:
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- mov r0, r8
- strb r0, [r4]
- adds r6, 0x1
- adds r4, 0x50
- ldrb r1, [r5, 0x8]
- cmp r6, r1
- blt _080AF788
-_080AF79E:
- movs r0, 0x80
- ldrb r1, [r7, 0x3]
- ands r0, r1
- cmp r0, 0
- beq _080AF7AE
- ldrb r0, [r7, 0x3]
- bl sub_80AF4C0
-_080AF7AE:
- ldr r0, _080AF7BC
- str r0, [r5, 0x34]
-_080AF7B2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF7BC: .4byte 0x68736d53
- thumb_func_end sub_80AF6DC
-
- thumb_func_start sub_80AF7C0
-sub_80AF7C0:
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r1, [r6, 0x34]
- ldr r0, _080AF7FC
- cmp r1, r0
- bne _080AF7F6
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldr r0, [r6, 0x4]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r6, 0x4]
- ldrb r4, [r6, 0x8]
- ldr r5, [r6, 0x2C]
- cmp r4, 0
- ble _080AF7F2
-_080AF7E2:
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_80AEB7C
- subs r4, 0x1
- adds r5, 0x50
- cmp r4, 0
- bgt _080AF7E2
-_080AF7F2:
- ldr r0, _080AF7FC
- str r0, [r6, 0x34]
-_080AF7F6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080AF7FC: .4byte 0x68736d53
- thumb_func_end sub_80AF7C0
-
- thumb_func_start sub_80AF800
-sub_80AF800:
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r1, [r6, 0x24]
- cmp r1, 0
- beq _080AF8C2
- ldrh r0, [r6, 0x26]
- subs r0, 0x1
- strh r0, [r6, 0x26]
- ldr r3, _080AF840
- adds r2, r3, 0
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- bne _080AF8C2
- strh r1, [r6, 0x26]
- ldrh r1, [r6, 0x28]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080AF844
- adds r0, r1, 0
- adds r0, 0x10
- strh r0, [r6, 0x28]
- ands r0, r2
- cmp r0, 0xFF
- bls _080AF896
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r6, 0x28]
- strh r3, [r6, 0x24]
- b _080AF896
- .align 2, 0
-_080AF840: .4byte 0x0000ffff
-_080AF844:
- adds r0, r1, 0
- subs r0, 0x10
- strh r0, [r6, 0x28]
- ands r0, r2
- lsls r0, 16
- cmp r0, 0
- bgt _080AF896
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- cmp r5, 0
- ble _080AF876
-_080AF85A:
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_80AEB7C
- movs r0, 0x1
- ldrh r7, [r6, 0x28]
- ands r0, r7
- cmp r0, 0
- bne _080AF86E
- strb r0, [r4]
-_080AF86E:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF85A
-_080AF876:
- movs r0, 0x1
- ldrh r1, [r6, 0x28]
- ands r0, r1
- cmp r0, 0
- beq _080AF88A
- ldr r0, [r6, 0x4]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- b _080AF88E
-_080AF88A:
- movs r0, 0x80
- lsls r0, 24
-_080AF88E:
- str r0, [r6, 0x4]
- movs r0, 0
- strh r0, [r6, 0x24]
- b _080AF8C2
-_080AF896:
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- cmp r5, 0
- ble _080AF8C2
- movs r3, 0x80
- movs r7, 0
- movs r2, 0x3
-_080AF8A4:
- ldrb r1, [r4]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080AF8BA
- ldrh r7, [r6, 0x28]
- lsrs r0, r7, 2
- strb r0, [r4, 0x13]
- adds r0, r1, 0
- orrs r0, r2
- strb r0, [r4]
-_080AF8BA:
- subs r5, 0x1
- adds r4, 0x50
- cmp r5, 0
- bgt _080AF8A4
-_080AF8C2:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF800
-
- thumb_func_start sub_80AF8C8
-sub_80AF8C8:
- push {r4,lr}
- adds r2, r1, 0
- movs r0, 0x1
- ldrb r1, [r2]
- ands r0, r1
- cmp r0, 0
- beq _080AF92C
- ldrb r3, [r2, 0x13]
- ldrb r1, [r2, 0x12]
- adds r0, r3, 0
- muls r0, r1
- lsrs r3, r0, 5
- ldrb r4, [r2, 0x18]
- cmp r4, 0x1
- bne _080AF8F0
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- adds r0, 0x80
- muls r0, r3
- lsrs r3, r0, 7
-_080AF8F0:
- movs r0, 0x14
- ldrsb r0, [r2, r0]
- lsls r0, 1
- movs r1, 0x15
- ldrsb r1, [r2, r1]
- adds r1, r0, r1
- cmp r4, 0x2
- bne _080AF906
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- adds r1, r0
-_080AF906:
- movs r0, 0x80
- negs r0, r0
- cmp r1, r0
- bge _080AF912
- adds r1, r0, 0
- b _080AF918
-_080AF912:
- cmp r1, 0x7F
- ble _080AF918
- movs r1, 0x7F
-_080AF918:
- adds r0, r1, 0
- adds r0, 0x80
- muls r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x10]
- movs r0, 0x7F
- subs r0, r1
- muls r0, r3
- lsrs r0, 8
- strb r0, [r2, 0x11]
-_080AF92C:
- ldrb r1, [r2]
- movs r0, 0x4
- ands r0, r1
- adds r3, r1, 0
- cmp r0, 0
- beq _080AF970
- movs r0, 0xE
- ldrsb r0, [r2, r0]
- ldrb r1, [r2, 0xF]
- muls r0, r1
- movs r1, 0xC
- ldrsb r1, [r2, r1]
- adds r1, r0
- lsls r1, 2
- movs r0, 0xA
- ldrsb r0, [r2, r0]
- lsls r0, 8
- adds r1, r0
- movs r0, 0xB
- ldrsb r0, [r2, r0]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0xD]
- adds r1, r0, r1
- ldrb r0, [r2, 0x18]
- cmp r0, 0
- bne _080AF96A
- movs r0, 0x16
- ldrsb r0, [r2, r0]
- lsls r0, 4
- adds r1, r0
-_080AF96A:
- asrs r0, r1, 8
- strb r0, [r2, 0x8]
- strb r1, [r2, 0x9]
-_080AF970:
- movs r0, 0xFA
- ands r0, r3
- strb r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AF8C8
-
- thumb_func_start sub_80AF97C
-sub_80AF97C:
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r12, r2
- cmp r0, 0x4
- bne _080AF9B4
- cmp r5, 0x14
- bhi _080AF998
- movs r5, 0
- b _080AF9A6
-_080AF998:
- adds r0, r5, 0
- subs r0, 0x15
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3B
- bls _080AF9A6
- movs r5, 0x3B
-_080AF9A6:
- ldr r0, _080AF9B0
- adds r0, r5, r0
- ldrb r0, [r0]
- b _080AFA16
- .align 2, 0
-_080AF9B0: .4byte gUnknown_826FBB4
-_080AF9B4:
- cmp r5, 0x23
- bhi _080AF9C0
- movs r0, 0
- mov r12, r0
- movs r5, 0
- b _080AF9D2
-_080AF9C0:
- adds r0, r5, 0
- subs r0, 0x24
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x82
- bls _080AF9D2
- movs r5, 0x82
- movs r1, 0xFF
- mov r12, r1
-_080AF9D2:
- ldr r3, _080AFA1C
- adds r0, r5, r3
- ldrb r6, [r0]
- ldr r4, _080AFA20
- movs r2, 0xF
- adds r0, r6, 0
- ands r0, r2
- lsls r0, 1
- adds r0, r4
- movs r7, 0
- ldrsh r1, [r0, r7]
- asrs r0, r6, 4
- adds r6, r1, 0
- asrs r6, r0
- adds r0, r5, 0x1
- adds r0, r3
- ldrb r1, [r0]
- adds r0, r1, 0
- ands r0, r2
- lsls r0, 1
- adds r0, r4
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r1, 4
- asrs r0, r1
- subs r0, r6
- mov r7, r12
- muls r7, r0
- adds r0, r7, 0
- asrs r0, 8
- adds r0, r6, r0
- movs r1, 0x80
- lsls r1, 4
- adds r0, r1
-_080AFA16:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080AFA1C: .4byte gUnknown_826FB18
-_080AFA20: .4byte gUnknown_826FB9C
- thumb_func_end sub_80AF97C
-
- thumb_func_start sub_80AFA24
-sub_80AFA24:
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x2
- beq _080AFA4C
- cmp r0, 0x2
- bgt _080AFA38
- cmp r0, 0x1
- beq _080AFA3E
- b _080AFA60
-_080AFA38:
- cmp r1, 0x3
- beq _080AFA54
- b _080AFA60
-_080AFA3E:
- ldr r1, _080AFA48
- movs r0, 0x8
- strb r0, [r1]
- adds r1, 0x2
- b _080AFA68
- .align 2, 0
-_080AFA48: .4byte 0x04000063
-_080AFA4C:
- ldr r1, _080AFA50
- b _080AFA62
- .align 2, 0
-_080AFA50: .4byte 0x04000069
-_080AFA54:
- ldr r1, _080AFA5C
- movs r0, 0
- b _080AFA6A
- .align 2, 0
-_080AFA5C: .4byte 0x04000070
-_080AFA60:
- ldr r1, _080AFA70
-_080AFA62:
- movs r0, 0x8
- strb r0, [r1]
- adds r1, 0x4
-_080AFA68:
- movs r0, 0x80
-_080AFA6A:
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080AFA70: .4byte 0x04000079
- thumb_func_end sub_80AFA24
-
- thumb_func_start sub_80AFA74
-sub_80AFA74:
- push {r4,lr}
- adds r1, r0, 0
- ldrb r0, [r1, 0x2]
- lsls r2, r0, 24
- lsrs r4, r2, 24
- ldrb r3, [r1, 0x3]
- lsls r0, r3, 24
- lsrs r3, r0, 24
- cmp r4, r3
- bcc _080AFA94
- lsrs r0, r2, 25
- cmp r0, r3
- bcc _080AFAA0
- movs r0, 0xF
- strb r0, [r1, 0x1B]
- b _080AFAAE
-_080AFA94:
- lsrs r0, 25
- cmp r0, r4
- bcc _080AFAA0
- movs r0, 0xF0
- strb r0, [r1, 0x1B]
- b _080AFAAE
-_080AFAA0:
- movs r0, 0xFF
- strb r0, [r1, 0x1B]
- ldrb r2, [r1, 0x3]
- ldrb r3, [r1, 0x2]
- adds r0, r2, r3
- lsrs r0, 4
- b _080AFABE
-_080AFAAE:
- ldrb r2, [r1, 0x3]
- ldrb r3, [r1, 0x2]
- adds r0, r2, r3
- lsrs r0, 4
- strb r0, [r1, 0xA]
- cmp r0, 0xF
- bls _080AFAC0
- movs r0, 0xF
-_080AFABE:
- strb r0, [r1, 0xA]
-_080AFAC0:
- ldrb r2, [r1, 0x6]
- ldrb r3, [r1, 0xA]
- adds r0, r2, 0
- muls r0, r3
- adds r0, 0xF
- asrs r0, 4
- strb r0, [r1, 0x19]
- ldrb r0, [r1, 0x1C]
- ldrb r2, [r1, 0x1B]
- ands r0, r2
- strb r0, [r1, 0x1B]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80AFA74
-
- thumb_func_start sub_80AFADC
-sub_80AFADC:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r0, _080AFAFC
- ldr r0, [r0]
- str r0, [sp, 0x4]
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- beq _080AFB00
- subs r0, 0x1
- ldr r1, [sp, 0x4]
- strb r0, [r1, 0xA]
- b _080AFB06
- .align 2, 0
-_080AFAFC: .4byte SOUND_INFO_PTR
-_080AFB00:
- movs r0, 0xE
- ldr r2, [sp, 0x4]
- strb r0, [r2, 0xA]
-_080AFB06:
- movs r6, 0x1
- ldr r0, [sp, 0x4]
- ldr r4, [r0, 0x1C]
-_080AFB0C:
- ldrb r1, [r4]
- movs r0, 0xC7
- ands r0, r1
- adds r2, r6, 0x1
- mov r10, r2
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- bne _080AFB22
- b _080AFF0C
-_080AFB22:
- cmp r6, 0x2
- beq _080AFB54
- cmp r6, 0x2
- bgt _080AFB30
- cmp r6, 0x1
- beq _080AFB36
- b _080AFB8C
-_080AFB30:
- cmp r6, 0x3
- beq _080AFB6C
- b _080AFB8C
-_080AFB36:
- ldr r0, _080AFB48
- str r0, [sp, 0x8]
- ldr r7, _080AFB4C
- ldr r2, _080AFB50
- str r2, [sp, 0xC]
- adds r0, 0x4
- str r0, [sp, 0x10]
- adds r2, 0x2
- b _080AFB9C
- .align 2, 0
-_080AFB48: .4byte 0x04000060
-_080AFB4C: .4byte 0x04000062
-_080AFB50: .4byte 0x04000063
-_080AFB54:
- ldr r0, _080AFB60
- str r0, [sp, 0x8]
- ldr r7, _080AFB64
- ldr r2, _080AFB68
- b _080AFB94
- .align 2, 0
-_080AFB60: .4byte 0x04000061
-_080AFB64: .4byte 0x04000068
-_080AFB68: .4byte 0x04000069
-_080AFB6C:
- ldr r0, _080AFB80
- str r0, [sp, 0x8]
- ldr r7, _080AFB84
- ldr r2, _080AFB88
- str r2, [sp, 0xC]
- adds r0, 0x4
- str r0, [sp, 0x10]
- adds r2, 0x2
- b _080AFB9C
- .align 2, 0
-_080AFB80: .4byte 0x04000070
-_080AFB84: .4byte 0x04000072
-_080AFB88: .4byte 0x04000073
-_080AFB8C:
- ldr r0, _080AFBEC
- str r0, [sp, 0x8]
- ldr r7, _080AFBF0
- ldr r2, _080AFBF4
-_080AFB94:
- str r2, [sp, 0xC]
- adds r0, 0xB
- str r0, [sp, 0x10]
- adds r2, 0x4
-_080AFB9C:
- str r2, [sp, 0x14]
- ldr r0, [sp, 0x4]
- ldrb r0, [r0, 0xA]
- str r0, [sp]
- ldr r2, [sp, 0xC]
- ldrb r0, [r2]
- mov r8, r0
- adds r2, r1, 0
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080AFC92
- movs r3, 0x40
- adds r0, r3, 0
- ands r0, r2
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0x1
- mov r10, r0
- movs r1, 0x40
- adds r1, r4
- mov r9, r1
- cmp r5, 0
- bne _080AFCB6
- movs r0, 0x3
- strb r0, [r4]
- strb r0, [r4, 0x1D]
- adds r0, r4, 0
- str r3, [sp, 0x18]
- bl sub_80AFA74
- ldr r3, [sp, 0x18]
- cmp r6, 0x2
- beq _080AFC04
- cmp r6, 0x2
- bgt _080AFBF8
- cmp r6, 0x1
- beq _080AFBFE
- b _080AFC58
- .align 2, 0
-_080AFBEC: .4byte 0x04000071
-_080AFBF0: .4byte 0x04000078
-_080AFBF4: .4byte 0x04000079
-_080AFBF8:
- cmp r6, 0x3
- beq _080AFC10
- b _080AFC58
-_080AFBFE:
- ldrb r0, [r4, 0x1F]
- ldr r2, [sp, 0x8]
- strb r0, [r2]
-_080AFC04:
- ldr r0, [r4, 0x24]
- lsls r0, 6
- ldrb r1, [r4, 0x1E]
- adds r0, r1, r0
- strb r0, [r7]
- b _080AFC64
-_080AFC10:
- ldr r1, [r4, 0x24]
- ldr r0, [r4, 0x28]
- cmp r1, r0
- beq _080AFC38
- ldr r2, [sp, 0x8]
- strb r3, [r2]
- ldr r1, _080AFC4C
- ldr r2, [r4, 0x24]
- ldr r0, [r2]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0x4]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0x8]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0xC]
- str r0, [r1]
- str r2, [r4, 0x28]
-_080AFC38:
- ldr r0, [sp, 0x8]
- strb r5, [r0]
- ldrb r0, [r4, 0x1E]
- strb r0, [r7]
- ldrb r0, [r4, 0x1E]
- cmp r0, 0
- beq _080AFC50
- movs r0, 0xC0
- b _080AFC72
- .align 2, 0
-_080AFC4C: .4byte 0x04000090
-_080AFC50:
- movs r1, 0x80
- negs r1, r1
- strb r1, [r4, 0x1A]
- b _080AFC74
-_080AFC58:
- ldrb r0, [r4, 0x1E]
- strb r0, [r7]
- ldr r0, [r4, 0x24]
- lsls r0, 3
- ldr r2, [sp, 0x10]
- strb r0, [r2]
-_080AFC64:
- ldrb r0, [r4, 0x4]
- adds r0, 0x8
- mov r8, r0
- ldrb r0, [r4, 0x1E]
- cmp r0, 0
- beq _080AFC72
- movs r0, 0x40
-_080AFC72:
- strb r0, [r4, 0x1A]
-_080AFC74:
- ldrb r1, [r4, 0x4]
- movs r2, 0
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- adds r1, r6, 0x1
- mov r10, r1
- movs r1, 0x40
- adds r1, r4
- mov r9, r1
- cmp r0, 0
- bne _080AFC8E
- b _080AFDCA
-_080AFC8E:
- strb r2, [r4, 0x9]
- b _080AFDF8
-_080AFC92:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _080AFCC4
- ldrb r0, [r4, 0xD]
- subs r0, 0x1
- strb r0, [r4, 0xD]
- movs r2, 0xFF
- ands r0, r2
- lsls r0, 24
- adds r1, r6, 0x1
- mov r10, r1
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- ble _080AFCB6
- b _080AFE0A
-_080AFCB6:
- lsls r0, r6, 24
- lsrs r0, 24
- bl sub_80AFA24
- movs r0, 0
- strb r0, [r4]
- b _080AFF08
-_080AFCC4:
- movs r0, 0x40
- ands r0, r1
- adds r2, r6, 0x1
- mov r10, r2
- movs r2, 0x40
- adds r2, r4
- mov r9, r2
- cmp r0, 0
- beq _080AFD04
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080AFD04
- movs r0, 0xFC
- ands r0, r1
- movs r2, 0
- strb r0, [r4]
- ldrb r1, [r4, 0x7]
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- cmp r0, 0
- beq _080AFD36
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFDF8
- ldrb r2, [r4, 0x7]
- mov r8, r2
- b _080AFDF8
-_080AFD04:
- ldrb r0, [r4, 0xB]
- cmp r0, 0
- bne _080AFDF8
- cmp r6, 0x3
- bne _080AFD16
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
-_080AFD16:
- adds r0, r4, 0
- bl sub_80AFA74
- movs r0, 0x3
- ldrb r2, [r4]
- ands r0, r2
- cmp r0, 0
- bne _080AFD6A
- ldrb r0, [r4, 0x9]
- subs r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- lsls r0, 24
- cmp r0, 0
- bgt _080AFD66
-_080AFD36:
- ldrb r2, [r4, 0xC]
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- muls r0, r1
- adds r0, 0xFF
- asrs r0, 8
- movs r1, 0
- strb r0, [r4, 0x9]
- lsls r0, 24
- cmp r0, 0
- beq _080AFCB6
- movs r0, 0x4
- ldrb r2, [r4]
- orrs r0, r2
- strb r0, [r4]
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFE0A
- movs r2, 0x8
- mov r8, r2
- b _080AFE0A
-_080AFD66:
- ldrb r0, [r4, 0x7]
- b _080AFDF6
-_080AFD6A:
- cmp r0, 0x1
- bne _080AFD76
-_080AFD6E:
- ldrb r0, [r4, 0x19]
- strb r0, [r4, 0x9]
- movs r0, 0x7
- b _080AFDF6
-_080AFD76:
- cmp r0, 0x2
- bne _080AFDBA
- ldrb r0, [r4, 0x9]
- subs r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- lsls r0, 24
- ldrb r2, [r4, 0x19]
- lsls r1, r2, 24
- cmp r0, r1
- bgt _080AFDB6
-_080AFD8E:
- ldrb r0, [r4, 0x6]
- cmp r0, 0
- bne _080AFD9E
- movs r0, 0xFC
- ldrb r1, [r4]
- ands r0, r1
- strb r0, [r4]
- b _080AFD36
-_080AFD9E:
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- ldrb r2, [r4, 0x1D]
- orrs r0, r2
- strb r0, [r4, 0x1D]
- cmp r6, 0x3
- beq _080AFD6E
- movs r0, 0x8
- mov r8, r0
- b _080AFD6E
-_080AFDB6:
- ldrb r0, [r4, 0x5]
- b _080AFDF6
-_080AFDBA:
- ldrb r0, [r4, 0x9]
- adds r0, 0x1
- strb r0, [r4, 0x9]
- movs r1, 0xFF
- ands r0, r1
- ldrb r2, [r4, 0xA]
- cmp r0, r2
- bcc _080AFDF4
-_080AFDCA:
- ldrb r0, [r4]
- subs r0, 0x1
- movs r2, 0
- strb r0, [r4]
- ldrb r1, [r4, 0x5]
- strb r1, [r4, 0xB]
- movs r0, 0xFF
- ands r0, r1
- cmp r0, 0
- beq _080AFD8E
- movs r0, 0x1
- ldrb r1, [r4, 0x1D]
- orrs r0, r1
- strb r0, [r4, 0x1D]
- ldrb r0, [r4, 0xA]
- strb r0, [r4, 0x9]
- cmp r6, 0x3
- beq _080AFDF8
- ldrb r2, [r4, 0x5]
- mov r8, r2
- b _080AFDF8
-_080AFDF4:
- ldrb r0, [r4, 0x4]
-_080AFDF6:
- strb r0, [r4, 0xB]
-_080AFDF8:
- ldrb r0, [r4, 0xB]
- subs r0, 0x1
- strb r0, [r4, 0xB]
- ldr r0, [sp]
- cmp r0, 0
- bne _080AFE0A
- subs r0, 0x1
- str r0, [sp]
- b _080AFD04
-_080AFE0A:
- movs r0, 0x2
- ldrb r1, [r4, 0x1D]
- ands r0, r1
- cmp r0, 0
- beq _080AFE82
- cmp r6, 0x3
- bgt _080AFE4A
- movs r0, 0x8
- ldrb r2, [r4, 0x1]
- ands r0, r2
- cmp r0, 0
- beq _080AFE4A
- ldr r0, _080AFE34
- ldrb r0, [r0]
- cmp r0, 0x3F
- bgt _080AFE3C
- ldr r0, [r4, 0x20]
- adds r0, 0x2
- ldr r1, _080AFE38
- b _080AFE46
- .align 2, 0
-_080AFE34: .4byte 0x04000089
-_080AFE38: .4byte 0x000007fc
-_080AFE3C:
- cmp r0, 0x7F
- bgt _080AFE4A
- ldr r0, [r4, 0x20]
- adds r0, 0x1
- ldr r1, _080AFE58
-_080AFE46:
- ands r0, r1
- str r0, [r4, 0x20]
-_080AFE4A:
- cmp r6, 0x4
- beq _080AFE5C
- ldr r0, [r4, 0x20]
- ldr r1, [sp, 0x10]
- strb r0, [r1]
- b _080AFE6A
- .align 2, 0
-_080AFE58: .4byte 0x000007fe
-_080AFE5C:
- ldr r2, [sp, 0x10]
- ldrb r0, [r2]
- movs r1, 0x8
- ands r1, r0
- ldr r0, [r4, 0x20]
- orrs r0, r1
- strb r0, [r2]
-_080AFE6A:
- movs r0, 0xC0
- ldrb r1, [r4, 0x1A]
- ands r0, r1
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r0, r1, r0
- strb r0, [r4, 0x1A]
- movs r2, 0xFF
- ands r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
-_080AFE82:
- movs r0, 0x1
- ldrb r2, [r4, 0x1D]
- ands r0, r2
- cmp r0, 0
- beq _080AFF08
- ldr r1, _080AFECC
- ldrb r0, [r1]
- ldrb r2, [r4, 0x1C]
- bics r0, r2
- ldrb r2, [r4, 0x1B]
- orrs r0, r2
- strb r0, [r1]
- cmp r6, 0x3
- bne _080AFED4
- ldr r0, _080AFED0
- ldrb r1, [r4, 0x9]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, [sp, 0xC]
- strb r0, [r2]
- movs r1, 0x80
- adds r0, r1, 0
- ldrb r2, [r4, 0x1A]
- ands r0, r2
- cmp r0, 0
- beq _080AFF08
- ldr r0, [sp, 0x8]
- strb r1, [r0]
- ldrb r0, [r4, 0x1A]
- ldr r1, [sp, 0x14]
- strb r0, [r1]
- movs r0, 0x7F
- ldrb r2, [r4, 0x1A]
- ands r0, r2
- strb r0, [r4, 0x1A]
- b _080AFF08
- .align 2, 0
-_080AFECC: .4byte 0x04000081
-_080AFED0: .4byte gUnknown_826FBF0
-_080AFED4:
- movs r0, 0xF
- mov r1, r8
- ands r1, r0
- mov r8, r1
- ldrb r2, [r4, 0x9]
- lsls r0, r2, 4
- add r0, r8
- ldr r1, [sp, 0xC]
- strb r0, [r1]
- movs r2, 0x80
- ldrb r0, [r4, 0x1A]
- orrs r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
- cmp r6, 0x1
- bne _080AFF08
- ldr r0, [sp, 0x8]
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _080AFF08
- ldrb r0, [r4, 0x1A]
- orrs r0, r2
- ldr r1, [sp, 0x14]
- strb r0, [r1]
-_080AFF08:
- movs r0, 0
- strb r0, [r4, 0x1D]
-_080AFF0C:
- mov r6, r10
- mov r4, r9
- cmp r6, 0x4
- bgt _080AFF16
- b _080AFB0C
-_080AFF16:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80AFADC
-
- thumb_func_start sub_80AFF28
-sub_80AFF28:
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r3, [r2, 0x34]
- ldr r0, _080AFF4C
- cmp r3, r0
- bne _080AFF44
- strh r1, [r2, 0x1E]
- ldrh r4, [r2, 0x1C]
- adds r0, r1, 0
- muls r0, r4
- asrs r0, 8
- strh r0, [r2, 0x20]
-_080AFF44:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFF4C: .4byte 0x68736d53
- thumb_func_end sub_80AFF28
-
- thumb_func_start sub_80AFF50
-sub_80AFF50:
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r6, r2, 16
- ldr r3, [r4, 0x34]
- ldr r0, _080AFFB4
- cmp r3, r0
- bne _080AFFA8
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r1, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080AFFA4
- movs r0, 0x80
- mov r8, r0
- lsrs r6, 18
- movs r0, 0x3
- mov r12, r0
-_080AFF80:
- adds r0, r7, 0
- ands r0, r5
- cmp r0, 0
- beq _080AFF9A
- ldrb r3, [r1]
- mov r0, r8
- ands r0, r3
- cmp r0, 0
- beq _080AFF9A
- strb r6, [r1, 0x13]
- mov r0, r12
- orrs r0, r3
- strb r0, [r1]
-_080AFF9A:
- subs r2, 0x1
- adds r1, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080AFF80
-_080AFFA4:
- ldr r0, _080AFFB4
- str r0, [r4, 0x34]
-_080AFFA8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080AFFB4: .4byte 0x68736d53
- thumb_func_end sub_80AFF50
-
- thumb_func_start sub_80AFFB8
-sub_80AFFB8:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r12, r1
- lsls r2, 16
- lsrs r6, r2, 16
- ldr r3, [r4, 0x34]
- ldr r0, _080B0028
- cmp r3, r0
- bne _080B001A
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r3, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080B0016
- movs r0, 0x80
- mov r9, r0
- lsls r0, r6, 16
- asrs r7, r0, 24
- movs r0, 0xC
- mov r8, r0
-_080AFFF0:
- mov r0, r12
- ands r0, r5
- cmp r0, 0
- beq _080B000C
- ldrb r1, [r3]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- beq _080B000C
- strb r7, [r3, 0xB]
- strb r6, [r3, 0xD]
- mov r0, r8
- orrs r0, r1
- strb r0, [r3]
-_080B000C:
- subs r2, 0x1
- adds r3, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080AFFF0
-_080B0016:
- ldr r0, _080B0028
- str r0, [r4, 0x34]
-_080B001A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0028: .4byte 0x68736d53
- thumb_func_end sub_80AFFB8
-
- thumb_func_start sub_80B002C
-sub_80B002C:
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r3, [r4, 0x34]
- ldr r0, _080B0090
- cmp r3, r0
- bne _080B0084
- adds r0, r3, 0x1
- str r0, [r4, 0x34]
- ldrb r2, [r4, 0x8]
- ldr r1, [r4, 0x2C]
- movs r5, 0x1
- cmp r2, 0
- ble _080B0080
- movs r0, 0x80
- mov r8, r0
- movs r0, 0x3
- mov r12, r0
-_080B005C:
- adds r0, r7, 0
- ands r0, r5
- cmp r0, 0
- beq _080B0076
- ldrb r3, [r1]
- mov r0, r8
- ands r0, r3
- cmp r0, 0
- beq _080B0076
- strb r6, [r1, 0x15]
- mov r0, r12
- orrs r0, r3
- strb r0, [r1]
-_080B0076:
- subs r2, 0x1
- adds r1, 0x50
- lsls r5, 1
- cmp r2, 0
- bgt _080B005C
-_080B0080:
- ldr r0, _080B0090
- str r0, [r4, 0x34]
-_080B0084:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0090: .4byte 0x68736d53
- thumb_func_end sub_80B002C
-
- thumb_func_start sub_80B0094
-sub_80B0094:
- adds r1, r0, 0
- movs r2, 0
- movs r0, 0
- strb r0, [r1, 0x1A]
- strb r0, [r1, 0x16]
- ldrb r0, [r1, 0x18]
- cmp r0, 0
- bne _080B00A8
- movs r0, 0xC
- b _080B00AA
-_080B00A8:
- movs r0, 0x3
-_080B00AA:
- ldrb r2, [r1]
- orrs r0, r2
- strb r0, [r1]
- bx lr
- thumb_func_end sub_80B0094
-
- thumb_func_start sub_80B00B4
-sub_80B00B4:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, [r6, 0x34]
- ldr r0, _080B0124
- cmp r1, r0
- bne _080B0114
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- movs r7, 0x1
- cmp r5, 0
- ble _080B0110
- mov r9, r8
-_080B00E4:
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _080B0106
- movs r0, 0x80
- ldrb r1, [r4]
- ands r0, r1
- cmp r0, 0
- beq _080B0106
- mov r0, r8
- strb r0, [r4, 0x17]
- mov r1, r9
- cmp r1, 0
- bne _080B0106
- adds r0, r4, 0
- bl sub_80B0094
-_080B0106:
- subs r5, 0x1
- adds r4, 0x50
- lsls r7, 1
- cmp r5, 0
- bgt _080B00E4
-_080B0110:
- ldr r0, _080B0124
- str r0, [r6, 0x34]
-_080B0114:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0124: .4byte 0x68736d53
- thumb_func_end sub_80B00B4
-
- thumb_func_start sub_80B0128
-sub_80B0128:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, [r6, 0x34]
- ldr r0, _080B0198
- cmp r1, r0
- bne _080B0188
- adds r0, r1, 0x1
- str r0, [r6, 0x34]
- ldrb r5, [r6, 0x8]
- ldr r4, [r6, 0x2C]
- movs r7, 0x1
- cmp r5, 0
- ble _080B0184
- mov r9, r8
-_080B0158:
- mov r0, r10
- ands r0, r7
- cmp r0, 0
- beq _080B017A
- movs r0, 0x80
- ldrb r1, [r4]
- ands r0, r1
- cmp r0, 0
- beq _080B017A
- mov r0, r8
- strb r0, [r4, 0x19]
- mov r1, r9
- cmp r1, 0
- bne _080B017A
- adds r0, r4, 0
- bl sub_80B0094
-_080B017A:
- subs r5, 0x1
- adds r4, 0x50
- lsls r7, 1
- cmp r5, 0
- bgt _080B0158
-_080B0184:
- ldr r0, _080B0198
- str r0, [r6, 0x34]
-_080B0188:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0198: .4byte 0x68736d53
- thumb_func_end sub_80B0128
-
- thumb_func_start sub_80B019C
-sub_80B019C:
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r1, [r6, 0x40]
- ldrb r5, [r1]
- adds r2, r1, 0x1
- str r2, [r6, 0x40]
- ldr r0, [r4, 0x18]
- ldrb r1, [r1, 0x1]
- adds r3, r1, r0
- adds r0, r2, 0x1
- str r0, [r6, 0x40]
- ldrb r2, [r2, 0x1]
- adds r0, 0x1
- str r0, [r6, 0x40]
- cmp r5, 0x11
- bls _080B01C0
- b _080B02EE
-_080B01C0:
- lsls r0, r5, 2
- ldr r1, _080B01CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B01CC: .4byte _080B01D0
- .align 2, 0
-_080B01D0:
- .4byte _080B0218
- .4byte _080B021C
- .4byte _080B0224
- .4byte _080B022C
- .4byte _080B0236
- .4byte _080B0244
- .4byte _080B0252
- .4byte _080B025A
- .4byte _080B0262
- .4byte _080B026A
- .4byte _080B0272
- .4byte _080B027A
- .4byte _080B0282
- .4byte _080B0290
- .4byte _080B029E
- .4byte _080B02AC
- .4byte _080B02BA
- .4byte _080B02C8
-_080B0218:
- strb r2, [r3]
- b _080B02EE
-_080B021C:
- ldrb r1, [r3]
- adds r0, r1, r2
- strb r0, [r3]
- b _080B02EE
-_080B0224:
- ldrb r1, [r3]
- subs r0, r1, r2
- strb r0, [r3]
- b _080B02EE
-_080B022C:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r3]
- b _080B02EE
-_080B0236:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r1, [r3]
- ldrb r0, [r0]
- adds r0, r1, r0
- strb r0, [r3]
- b _080B02EE
-_080B0244:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r1, [r3]
- ldrb r0, [r0]
- subs r0, r1, r0
- strb r0, [r3]
- b _080B02EE
-_080B0252:
- ldrb r3, [r3]
- cmp r3, r2
- beq _080B02D4
- b _080B02E8
-_080B025A:
- ldrb r3, [r3]
- cmp r3, r2
- bne _080B02D4
- b _080B02E8
-_080B0262:
- ldrb r3, [r3]
- cmp r3, r2
- bhi _080B02D4
- b _080B02E8
-_080B026A:
- ldrb r3, [r3]
- cmp r3, r2
- bcs _080B02D4
- b _080B02E8
-_080B0272:
- ldrb r3, [r3]
- cmp r3, r2
- bls _080B02D4
- b _080B02E8
-_080B027A:
- ldrb r3, [r3]
- cmp r3, r2
- bcc _080B02D4
- b _080B02E8
-_080B0282:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- beq _080B02D4
- b _080B02E8
-_080B0290:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bne _080B02D4
- b _080B02E8
-_080B029E:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bhi _080B02D4
- b _080B02E8
-_080B02AC:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080B02D4
- b _080B02E8
-_080B02BA:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bls _080B02D4
- b _080B02E8
-_080B02C8:
- ldr r0, [r4, 0x18]
- adds r0, r2
- ldrb r3, [r3]
- ldrb r0, [r0]
- cmp r3, r0
- bcs _080B02E8
-_080B02D4:
- ldr r0, _080B02E4
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r6, 0
- bl _call_via_r2
- b _080B02EE
- .align 2, 0
-_080B02E4: .4byte gUnknown_203AE84
-_080B02E8:
- ldr r0, [r6, 0x40]
- adds r0, 0x4
- str r0, [r6, 0x40]
-_080B02EE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80B019C
-
- thumb_func_start sub_80B02F4
-sub_80B02F4:
- push {lr}
- ldr r2, [r1, 0x40]
- ldrb r3, [r2]
- adds r2, 0x1
- str r2, [r1, 0x40]
- ldr r2, _080B0310
- lsls r3, 2
- adds r3, r2
- ldr r2, [r3]
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_080B0310: .4byte gUnknown_826FC34
- thumb_func_end sub_80B02F4
-
- thumb_func_start sub_80B0314
-sub_80B0314:
- push {lr}
- ldr r2, _080B0324
- ldr r2, [r2]
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_080B0324: .4byte gUnknown_203AE80
- thumb_func_end sub_80B0314
-
- thumb_func_start sub_80B0328
-sub_80B0328:
- push {r4,lr}
- ldr r2, [r1, 0x40]
- ldr r0, _080B0360
- ands r4, r0
- ldrb r0, [r2]
- orrs r4, r0
- ldrb r0, [r2, 0x1]
- lsls r3, r0, 8
- ldr r0, _080B0364
- ands r4, r0
- orrs r4, r3
- ldrb r0, [r2, 0x2]
- lsls r3, r0, 16
- ldr r0, _080B0368
- ands r4, r0
- orrs r4, r3
- ldrb r0, [r2, 0x3]
- lsls r3, r0, 24
- ldr r0, _080B036C
- ands r4, r0
- orrs r4, r3
- str r4, [r1, 0x28]
- adds r2, 0x4
- str r2, [r1, 0x40]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B0360: .4byte 0xffffff00
-_080B0364: .4byte 0xffff00ff
-_080B0368: .4byte 0xff00ffff
-_080B036C: .4byte 0x00ffffff
- thumb_func_end sub_80B0328
-
- thumb_func_start sub_80B0370
-sub_80B0370:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- adds r0, r1, 0
- adds r0, 0x24
- strb r2, [r0]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0370
-
- thumb_func_start sub_80B0384
-sub_80B0384:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- adds r0, r1, 0
- adds r0, 0x2C
- strb r2, [r0]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0384
-
- thumb_func_start sub_80B0398
-sub_80B0398:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2D
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B0398
-
- thumb_func_start sub_80B03AC
-sub_80B03AC:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2E
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03AC
-
- thumb_func_start sub_80B03C0
-sub_80B03C0:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x2F
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03C0
-
- thumb_func_start sub_80B03D4
-sub_80B03D4:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- strb r2, [r1, 0x1E]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03D4
-
- thumb_func_start sub_80B03E0
-sub_80B03E0:
- ldr r0, [r1, 0x40]
- ldrb r2, [r0]
- strb r2, [r1, 0x1F]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03E0
-
- thumb_func_start sub_80B03EC
-sub_80B03EC:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x26
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end sub_80B03EC
-
- thumb_func_start ply_xswee
-ply_xswee:
- ldr r0, [r1, 0x40]
- ldrb r0, [r0]
- adds r2, r1, 0
- adds r2, 0x27
- strb r0, [r2]
- ldr r0, [r1, 0x40]
- adds r0, 0x1
- str r0, [r1, 0x40]
- bx lr
- thumb_func_end ply_xswee
-
- thumb_func_start nullsub_139
-nullsub_139:
- bx lr
- thumb_func_end nullsub_139
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a_1.s b/asm/m4a_1.s
new file mode 100644
index 0000000..8c1d78a
--- /dev/null
+++ b/asm/m4a_1.s
@@ -0,0 +1,1647 @@
+ .include "asm/macros.inc"
+ .include "constants/gba_constants.inc"
+ .include "constants/m4a_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start umul3232H32
+umul3232H32:
+ adr r2, __umul3232H32
+ bx r2
+ .arm
+__umul3232H32:
+ umull r2, r3, r0, r1
+ add r0, r3, 0
+ bx lr
+ thumb_func_end umul3232H32
+
+ thumb_func_start SoundMain
+SoundMain:
+ ldr r0, lt_SOUND_INFO_PTR
+ ldr r0, [r0]
+ ldr r2, lt_ID_NUMBER
+ ldr r3, [r0, o_SoundInfo_ident]
+ cmp r2, r3
+ beq SoundMain_1
+ bx lr @ Exit the function if ident doesn't match ID_NUMBER.
+SoundMain_1:
+ adds r3, 1
+ str r3, [r0, o_SoundInfo_ident]
+ push {r4-r7,lr}
+ mov r1, r8
+ mov r2, r9
+ mov r3, r10
+ mov r4, r11
+ push {r0-r4}
+ sub sp, 0x18
+ ldrb r1, [r0, o_SoundInfo_maxLines]
+ cmp r1, 0 @ if maxLines is 0, there is no maximum
+ beq SoundMain_3
+ ldr r2, lt_REG_VCOUNT
+ ldrb r2, [r2]
+ cmp r2, VCOUNT_VBLANK
+ bhs SoundMain_2
+ adds r2, TOTAL_SCANLINES
+SoundMain_2:
+ adds r1, r2
+SoundMain_3:
+ str r1, [sp, 0x14]
+ ldr r3, [r0, o_SoundInfo_func]
+ cmp r3, 0
+ beq SoundMain_4
+ ldr r0, [r0, o_SoundInfo_intp]
+ bl call_r3
+ ldr r0, [sp, 0x18]
+SoundMain_4:
+ ldr r3, [r0, o_SoundInfo_CgbSound]
+ bl call_r3
+ ldr r0, [sp, 0x18]
+ ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank]
+ mov r8, r3
+ ldr r5, lt_o_SoundInfo_pcmBuffer
+ adds r5, r0
+ ldrb r4, [r0, o_SoundInfo_pcmDmaCounter]
+ subs r7, r4, 1
+ bls SoundMain_5
+ ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ subs r1, r7
+ mov r2, r8
+ muls r2, r1
+ adds r5, r2
+SoundMain_5:
+ str r5, [sp, 0x8]
+ ldr r6, lt_PCM_DMA_BUF_SIZE
+ ldr r3, lt_SoundMainRAM_Buffer
+ bx r3
+
+ .align 2, 0
+lt_SOUND_INFO_PTR: .word SOUND_INFO_PTR
+lt_ID_NUMBER: .word ID_NUMBER
+lt_SoundMainRAM_Buffer: .word SoundMainRAM_Buffer + 1
+lt_REG_VCOUNT: .word REG_VCOUNT
+lt_o_SoundInfo_pcmBuffer: .word o_SoundInfo_pcmBuffer
+lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE
+ thumb_func_end SoundMain
+
+ thumb_func_start SoundMainRAM
+SoundMainRAM:
+ ldrb r3, [r0, o_SoundInfo_reverb]
+ cmp r3, 0
+ beq SoundMainRAM_NoReverb
+ adr r1, SoundMainRAM_Reverb
+ bx r1
+ .arm
+SoundMainRAM_Reverb:
+ cmp r4, 0x2
+ addeq r7, r0, o_SoundInfo_pcmBuffer
+ addne r7, r5, r8
+ mov r4, r8
+_080AE314:
+ ldrsb r0, [r5, r6]
+ ldrsb r1, [r5]
+ add r0, r0, r1
+ ldrsb r1, [r7, r6]
+ add r0, r0, r1
+ ldrsb r1, [r7], 0x1
+ add r0, r0, r1
+ mul r1, r0, r3
+ mov r0, r1, asr 9
+ tst r0, 0x80
+ addne r0, r0, 0x1
+ strb r0, [r5, r6]
+ strb r0, [r5], 0x1
+ subs r4, r4, 0x1
+ bgt _080AE314
+ add r0, pc, 0x2F
+ bx r0
+ .thumb
+SoundMainRAM_NoReverb:
+ movs r0, 0
+ mov r1, r8
+ adds r6, r5
+ lsrs r1, 3
+ bcc SoundMainRAM_NoReverb_Ok
+ stm r5!, {r0}
+ stm r6!, {r0}
+SoundMainRAM_NoReverb_Ok:
+ lsrs r1, 1
+ bcc SoundMainRAM_NoReverb_Loop
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+SoundMainRAM_NoReverb_Loop:
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ stm r5!, {r0}
+ stm r6!, {r0}
+ subs r1, 0x1
+ bgt SoundMainRAM_NoReverb_Loop
+_080AE386:
+ ldr r4, [sp, 0x18]
+ ldr r0, [r4, o_SoundInfo_divFreq]
+ mov r12, r0
+ ldrb r0, [r4, o_SoundInfo_maxChans]
+ adds r4, o_SoundInfo_chans
+SoundMainRAM_ChanLoop:
+ str r0, [sp, 0x4]
+ ldr r3, [r4, o_SoundChannel_wav]
+ ldr r0, [sp, 0x14]
+ cmp r0, 0
+ beq _080AE3B0
+ ldr r1, =REG_VCOUNT
+ ldrb r1, [r1]
+ cmp r1, VCOUNT_VBLANK
+ bhs _080AE3A4
+ adds r1, TOTAL_SCANLINES
+_080AE3A4:
+ cmp r1, r0
+ bcc _080AE3B0
+ b _080AE682
+
+ .pool
+
+_080AE3B0:
+ ldrb r6, [r4, o_SoundChannel_status]
+ movs r0, 0xC7
+ tst r0, r6
+ bne _080AE3BA
+ b _080AE678
+_080AE3BA:
+ movs r0, 0x80
+ tst r0, r6
+ beq _080AE3EA
+ movs r0, 0x40
+ tst r0, r6
+ bne _080AE3FA
+ movs r6, 0x3
+ strb r6, [r4, o_SoundChannel_status]
+ adds r0, r3, 0
+ adds r0, 0x10
+ str r0, [r4, o_SoundChannel_cp]
+ ldr r0, [r3, 0xC]
+ str r0, [r4, o_SoundChannel_ct]
+ movs r5, 0
+ strb r5, [r4, o_SoundChannel_ev]
+ str r5, [r4, o_SoundChannel_fw]
+ ldrb r2, [r3, 0x3]
+ movs r0, 0xC0
+ tst r0, r2
+ beq _080AE442
+ movs r0, 0x10
+ orrs r6, r0
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE442
+_080AE3EA:
+ ldrb r5, [r4, o_SoundChannel_ev]
+ movs r0, 0x4
+ tst r0, r6
+ beq _080AE400
+ ldrb r0, [r4, o_SoundChannel_iel]
+ subs r0, 0x1
+ strb r0, [r4, o_SoundChannel_iel]
+ bhi _080AE450
+_080AE3FA:
+ movs r0, 0
+ strb r0, [r4, o_SoundChannel_status]
+ b _080AE678
+_080AE400:
+ movs r0, 0x40
+ tst r0, r6
+ beq _080AE420
+ ldrb r0, [r4, o_SoundChannel_release]
+ muls r5, r0
+ lsrs r5, 8
+ ldrb r0, [r4, o_SoundChannel_iev]
+ cmp r5, r0
+ bhi _080AE450
+_080AE412:
+ ldrb r5, [r4, o_SoundChannel_iev]
+ cmp r5, 0
+ beq _080AE3FA
+ movs r0, 0x4
+ orrs r6, r0
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE450
+_080AE420:
+ movs r2, 0x3
+ ands r2, r6
+ cmp r2, 0x2
+ bne _080AE43E
+ ldrb r0, [r4, o_SoundChannel_decay]
+ muls r5, r0
+ lsrs r5, 8
+ ldrb r0, [r4, o_SoundChannel_sustain]
+ cmp r5, r0
+ bhi _080AE450
+ adds r5, r0, 0
+ beq _080AE412
+ subs r6, 0x1
+ strb r6, [r4, o_SoundChannel_status]
+ b _080AE450
+_080AE43E:
+ cmp r2, 0x3
+ bne _080AE450
+_080AE442:
+ ldrb r0, [r4, o_SoundChannel_attack]
+ adds r5, r0
+ cmp r5, 0xFF
+ bcc _080AE450
+ movs r5, 0xFF
+ subs r6, 0x1
+ strb r6, [r4, o_SoundChannel_status]
+_080AE450:
+ strb r5, [r4, o_SoundChannel_ev]
+ ldr r0, [sp, 0x18]
+ ldrb r0, [r0, o_SoundChannel_release]
+ adds r0, 0x1
+ muls r0, r5
+ lsrs r5, r0, 4
+ ldrb r0, [r4, o_SoundChannel_rightVolume]
+ muls r0, r5
+ lsrs r0, 8
+ strb r0, [r4, o_SoundChannel_er]
+ ldrb r0, [r4, o_SoundChannel_leftVolume]
+ muls r0, r5
+ lsrs r0, 8
+ strb r0, [r4, o_SoundChannel_el]
+ movs r0, 0x10
+ ands r0, r6
+ str r0, [sp, 0x10]
+ beq _080AE484
+ adds r0, r3, 0
+ adds r0, 0x10
+ ldr r1, [r3, 0x8]
+ adds r0, r1
+ str r0, [sp, 0xC]
+ ldr r0, [r3, 0xC]
+ subs r0, r1
+ str r0, [sp, 0x10]
+_080AE484:
+ ldr r5, [sp, 0x8]
+ ldr r2, [r4, o_SoundChannel_ct]
+ ldr r3, [r4, o_SoundChannel_cp]
+ adr r0, _080AE490
+ bx r0
+ .arm
+_080AE490:
+ str r8, [sp]
+ ldrb r10, [r4, o_SoundChannel_er]
+ ldrb r11, [r4, o_SoundChannel_el]
+ mov r10, r10, lsl 16
+ mov r11, r11, lsl 16
+ ldrb r0, [r4, o_SoundChannel_type]
+ tst r0, 0x8
+ beq _080AE5D0
+_080AE4B0:
+ cmp r2, 0x4
+ ble _080AE520
+ subs r2, r2, r8
+ movgt lr, 0
+ bgt _080AE4DC
+ mov lr, r8
+ add r2, r2, r8
+ sub r8, r2, 0x4
+ sub lr, lr, r8
+ ands r2, r2, 0x3
+ moveq r2, 0x4
+_080AE4DC:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE4E4:
+ ldrsb r0, [r3], 0x1
+ mul r1, r10, r0
+ bic r1, r1, 0xFF0000
+ add r6, r1, r6, ror 8
+ mul r1, r11, r0
+ bic r1, r1, 0xFF0000
+ add r7, r1, r7, ror 8
+ adds r5, r5, 0x40000000
+ bcc _080AE4E4
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE4DC
+ adds r8, r8, lr
+ beq _080AE664
+_080AE520:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE528:
+ ldrsb r0, [r3], 0x1
+ mul r1, r10, r0
+ bic r1, r1, 0xFF0000
+ add r6, r1, r6, ror 8
+ mul r1, r11, r0
+ bic r1, r1, 0xFF0000
+ add r7, r1, r7, ror 8
+ subs r2, r2, 0x1
+ beq _080AE598
+_080AE54C:
+ adds r5, r5, 0x40000000
+ bcc _080AE528
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE4B0
+ b _080AE664
+_080AE568:
+ ldr r0, [sp, 0x18]
+ cmp r0, 0
+ beq _080AE58C
+ ldr r3, [sp, 0x14]
+ rsb r9, r2, 0
+_080AE57C:
+ adds r2, r0, r2
+ bgt _080AE634
+ sub r9, r9, r0
+ b _080AE57C
+_080AE58C:
+ ldmia sp!, {r4,r12}
+ mov r2, 0
+ b _080AE5A8
+_080AE598:
+ ldr r2, [sp, 0x10]
+ cmp r2, 0
+ ldrne r3, [sp, 0xC]
+ bne _080AE54C
+_080AE5A8:
+ strb r2, [r4, o_SoundChannel_status]
+ mov r0, r5, lsr 30
+ bic r5, r5, 0xC0000000
+ rsb r0, r0, 0x3
+ mov r0, r0, lsl 3
+ mov r6, r6, ror r0
+ mov r7, r7, ror r0
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ b _080AE66C
+_080AE5D0:
+ stmdb sp!, {r4,r12}
+ ldr lr, [r4, o_SoundChannel_fw]
+ ldr r1, [r4, o_SoundChannel_freq]
+ mul r4, r12, r1
+ ldrsb r0, [r3]
+ ldrsb r1, [r3, 0x1]!
+ sub r1, r1, r0
+_080AE5EC:
+ ldr r6, [r5]
+ ldr r7, [r5, 0x630]
+_080AE5F4:
+ mul r9, lr, r1
+ add r9, r0, r9, asr 23
+ mul r12, r10, r9
+ bic r12, r12, 0xFF0000
+ add r6, r12, r6, ror 8
+ mul r12, r11, r9
+ bic r12, r12, 0xFF0000
+ add r7, r12, r7, ror 8
+ add lr, lr, r4
+ movs r9, lr, lsr 23
+ beq _080AE640
+ bic lr, lr, 0x3F800000
+ subs r2, r2, r9
+ ble _080AE568
+ subs r9, r9, 0x1
+ addeq r0, r0, r1
+_080AE634:
+ ldrsbne r0, [r3, r9]!
+ ldrsb r1, [r3, 0x1]!
+ sub r1, r1, r0
+_080AE640:
+ adds r5, r5, 0x40000000
+ bcc _080AE5F4
+ str r7, [r5, 0x630]
+ str r6, [r5], 0x4
+ subs r8, r8, 0x4
+ bgt _080AE5EC
+ sub r3, r3, 0x1
+ ldmia sp!, {r4,r12}
+ str lr, [r4, o_SoundChannel_fw]
+_080AE664:
+ str r2, [r4, o_SoundChannel_ct]
+ str r3, [r4, o_SoundChannel_cp]
+_080AE66C:
+ ldr r8, [sp]
+ add r0, pc, 0x1
+ bx r0
+ .thumb
+_080AE678:
+ ldr r0, [sp, 0x4]
+ subs r0, 0x1
+ ble _080AE682
+ adds r4, SoundChannel_size
+ b SoundMainRAM_ChanLoop
+_080AE682:
+ ldr r0, [sp, 0x18]
+ ldr r3, =ID_NUMBER
+ str r3, [r0]
+ add sp, 0x1C
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r3}
+
+call_r3:
+ bx r3
+ .pool
+ thumb_func_end SoundMainRAM
+
+ thumb_func_start SoundMainBTM
+SoundMainBTM:
+ mov r12, r4
+ movs r1, 0
+ movs r2, 0
+ movs r3, 0
+ movs r4, 0
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ stm r0!, {r1-r4}
+ mov r4, r12
+ bx lr
+ thumb_func_end SoundMainBTM
+
+ thumb_func_start RealClearChain
+RealClearChain:
+ ldr r3, [r0, 0x2C]
+ cmp r3, 0
+ beq _080AE6D2
+ ldr r1, [r0, 0x34]
+ ldr r2, [r0, 0x30]
+ cmp r2, 0
+ beq _080AE6C6
+ str r1, [r2, 0x34]
+ b _080AE6C8
+_080AE6C6:
+ str r1, [r3, 0x20]
+_080AE6C8:
+ cmp r1, 0
+ beq _080AE6CE
+ str r2, [r1, 0x30]
+_080AE6CE:
+ movs r1, 0
+ str r1, [r0, 0x2C]
+_080AE6D2:
+ bx lr
+ thumb_func_end RealClearChain
+
+ thumb_func_start ply_fine
+ply_fine:
+ push {r4,r5,lr}
+ adds r5, r1, 0
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq ply_fine_done
+ply_fine_loop:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq ply_fine_ok
+ movs r0, 0x40
+ orrs r1, r0
+ strb r1, [r4]
+ply_fine_ok:
+ adds r0, r4, 0
+ bl RealClearChain
+ ldr r4, [r4, 0x34]
+ cmp r4, 0
+ bne ply_fine_loop
+ply_fine_done:
+ movs r0, 0
+ strb r0, [r5]
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end ply_fine
+
+ thumb_func_start MPlayJumpTableCopy
+MPlayJumpTableCopy:
+ mov r12, lr
+ movs r1, 0x24
+ ldr r2, lt_MPlayJumpTableTemplate
+MPlayJumpTableCopy_Loop:
+ ldr r3, [r2]
+ bl chk_adr_r2
+ stm r0!, {r3}
+ adds r2, 0x4
+ subs r1, 0x1
+ bgt MPlayJumpTableCopy_Loop
+ bx r12
+ thumb_func_end MPlayJumpTableCopy
+
+ .align 2, 0
+ .thumb_func
+ldrb_r3_r2:
+ ldrb r3, [r2]
+
+ .thumb_func
+chk_adr_r2:
+ push {r0}
+ lsrs r0, r2, 25
+ bne chk_adr_r2_done
+ ldr r0, lt_MPlayJumpTableTemplate
+ cmp r2, r0
+ bcc chk_adr_r2_reject
+ lsrs r0, r2, 14
+ beq chk_adr_r2_done
+chk_adr_r2_reject:
+ movs r3, 0
+chk_adr_r2_done:
+ pop {r0}
+ bx lr
+ .align 2, 0
+lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate
+
+ thumb_func_start ld_r3_tp_adr_i
+ld_r3_tp_adr_i:
+ ldr r2, [r1, 0x40]
+_080AE73A:
+ adds r3, r2, 0x1
+ str r3, [r1, 0x40]
+ ldrb r3, [r2]
+ b chk_adr_r2
+ thumb_func_end ld_r3_tp_adr_i
+
+ thumb_func_start ply_goto
+ply_goto:
+ push {lr}
+ply_goto_1:
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r0, [r2, 0x3]
+ lsls r0, 8
+ ldrb r3, [r2, 0x2]
+ orrs r0, r3
+ lsls r0, 8
+ ldrb r3, [r2, 0x1]
+ orrs r0, r3
+ lsls r0, 8
+ bl ldrb_r3_r2
+ orrs r0, r3
+ str r0, [r1, o_MusicPlayerTrack_cmdPtr]
+ pop {r0}
+ bx r0
+ thumb_func_end ply_goto
+
+ thumb_func_start ply_patt
+ply_patt:
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ cmp r2, 0x3
+ bcs _080AE77C
+ lsls r2, 2
+ adds r3, r1, r2
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ adds r2, 0x4
+ str r2, [r3, o_MusicPlayerTrack_patternStack]
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ adds r2, 0x1
+ strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ b ply_goto
+_080AE77C:
+ b ply_fine
+ thumb_func_end ply_patt
+
+ thumb_func_start ply_pend
+ply_pend:
+ ldrb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ cmp r2, 0
+ beq ply_pend_done
+ subs r2, 1
+ strb r2, [r1, o_MusicPlayerTrack_patternLevel]
+ lsls r2, 2
+ adds r3, r1, r2
+ ldr r2, [r3, o_MusicPlayerTrack_patternStack]
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ply_pend_done:
+ bx lr
+ thumb_func_end ply_pend
+
+ thumb_func_start ply_rept
+ply_rept:
+ push {lr}
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ cmp r3, 0
+ bne ply_rept_1
+ adds r2, 1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ b ply_goto_1
+ply_rept_1:
+ ldrb r3, [r1, o_MusicPlayerTrack_repN]
+ adds r3, 1
+ strb r3, [r1, o_MusicPlayerTrack_repN]
+ mov r12, r3
+ bl ld_r3_tp_adr_i
+ cmp r12, r3
+ bhs ply_rept_2
+ b ply_goto_1
+ply_rept_2:
+ movs r3, 0
+ strb r3, [r1, o_MusicPlayerTrack_repN]
+ adds r2, 5
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ pop {r0}
+ bx r0
+ thumb_func_end ply_rept
+
+ thumb_func_start ply_prio
+ply_prio:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_priority]
+ bx r12
+ thumb_func_end ply_prio
+
+ thumb_func_start ply_tempo
+ply_tempo:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ lsls r3, 1
+ strh r3, [r0, o_MusicPlayerInfo_tempoD]
+ ldrh r2, [r0, o_MusicPlayerInfo_tempoU]
+ muls r3, r2
+ lsrs r3, 8
+ strh r3, [r0, o_MusicPlayerInfo_tempoI]
+ bx r12
+ thumb_func_end ply_tempo
+
+ thumb_func_start ply_keysh
+ply_keysh:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_keyShift]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_keysh
+
+ thumb_func_start ply_voice
+ply_voice:
+ mov r12, lr
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ adds r2, 1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ lsls r2, r3, 1
+ adds r2, r3
+ lsls r2, 2
+ ldr r3, [r0, o_MusicPlayerInfo_tone]
+ adds r2, r3
+ ldr r3, [r2]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_type]
+ ldr r3, [r2, 0x4]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_wav]
+ ldr r3, [r2, 0x8]
+ bl chk_adr_r2
+ str r3, [r1, o_MusicPlayerTrack_ToneData_attack]
+ bx r12
+ thumb_func_end ply_voice
+
+ thumb_func_start ply_vol
+ply_vol:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_vol]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0x3
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_vol
+
+ thumb_func_start ply_pan
+ply_pan:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_pan]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0x3
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_pan
+
+ thumb_func_start ply_bend
+ply_bend:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_bend]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_bend
+
+ thumb_func_start ply_bendr
+ply_bendr:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_bendRange]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_bendr
+
+ thumb_func_start ply_lfodl
+ply_lfodl:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ strb r3, [r1, o_MusicPlayerTrack_lfoDelay]
+ bx r12
+ thumb_func_end ply_lfodl
+
+ thumb_func_start ply_modt
+ply_modt:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ ldrb r0, [r1, o_MusicPlayerTrack_modT]
+ cmp r0, r3
+ beq _080AE89A
+ strb r3, [r1, o_MusicPlayerTrack_modT]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xF
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+_080AE89A:
+ bx r12
+ thumb_func_end ply_modt
+
+ thumb_func_start ply_tune
+ply_tune:
+ mov r12, lr
+ bl ld_r3_tp_adr_i
+ subs r3, 0x40
+ strb r3, [r1, o_MusicPlayerTrack_tune]
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ movs r2, 0xC
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx r12
+ thumb_func_end ply_tune
+
+ thumb_func_start ply_port
+ply_port:
+ mov r12, lr
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ adds r2, 0x1
+ ldr r0, =REG_SOUND1CNT_L @ sound register base address
+ adds r0, r3
+ bl _080AE73A
+ strb r3, [r0]
+ bx r12
+ .pool
+ thumb_func_end ply_port
+
+ thumb_func_start m4aSoundVSync
+m4aSoundVSync:
+ ldr r0, lt2_SOUND_INFO_PTR
+ ldr r0, [r0]
+
+ @ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1.
+ ldr r2, lt2_ID_NUMBER
+ ldr r3, [r0, o_SoundInfo_ident]
+ subs r3, r2
+ cmp r3, 0x1
+ bhi m4aSoundVSync_Done
+
+ @ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA.
+ ldrb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ subs r1, 0x1
+ strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+ bgt m4aSoundVSync_Done
+
+ @ Reload the PCM DMA counter.
+ ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod]
+ strb r1, [r0, o_SoundInfo_pcmDmaCounter]
+
+ ldr r2, =REG_DMA1
+
+ ldr r1, [r2, 0x8] @ DMA1CNT
+ lsls r1, 7
+ bcc m4aSoundVSync_SkipDMA1
+
+ ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4
+ str r1, [r2, 0x8] @ DMA1CNT
+
+m4aSoundVSync_SkipDMA1:
+ ldr r1, [r2, 0xC + 0x8] @ DMA2CNT
+ lsls r1, 7
+ bcc m4aSoundVSync_SkipDMA2
+ ldr r1, =((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4
+ str r1, [r2, 0xC + 0x8] @ DMA2CNT
+
+m4aSoundVSync_SkipDMA2:
+ movs r1, DMA_32BIT >> 8
+ lsls r1, 8
+ strh r1, [r2, 0xA] @ DMA1CNT_H
+ strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H
+
+ movs r1, (DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT) >> 8
+ lsls r1, 8 @ LSB is 0, so DMA_SRC_INC is used (destination is always fixed in FIFO mode)
+ strh r1, [r2, 0xA] @ DMA1CNT_H
+ strh r1, [r2, 0xC + 0xA] @ DMA2CNT_H
+
+m4aSoundVSync_Done:
+ bx lr
+
+ .pool
+ thumb_func_end m4aSoundVSync
+
+ thumb_func_start MPlayMain
+MPlayMain:
+ ldr r2, lt2_ID_NUMBER
+ ldr r3, [r0, o_MusicPlayerInfo_ident]
+ cmp r2, r3
+ beq _080AE91E
+ bx lr
+_080AE91E:
+ adds r3, 0x1
+ str r3, [r0, o_MusicPlayerInfo_ident]
+ push {r0,lr}
+ ldr r3, [r0, o_MusicPlayerInfo_func]
+ cmp r3, 0
+ beq _080AE930
+ ldr r0, [r0, o_MusicPlayerInfo_intp]
+ bl call_r3_2
+_080AE930:
+ pop {r0}
+ push {r4-r7}
+ mov r4, r8
+ mov r5, r9
+ mov r6, r10
+ mov r7, r11
+ push {r4-r7}
+ adds r7, r0, 0
+ ldr r0, [r7, o_MusicPlayerInfo_status]
+ cmp r0, 0
+ bge _080AE948
+ b _080AEB5C
+_080AE948:
+ ldr r0, lt2_SOUND_INFO_PTR
+ ldr r0, [r0]
+ mov r8, r0
+ adds r0, r7, 0
+ bl FadeOutBody
+ ldr r0, [r7, o_MusicPlayerInfo_status]
+ cmp r0, 0
+ bge _080AE95C
+ b _080AEB5C
+_080AE95C:
+ ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ ldrh r1, [r7, o_MusicPlayerInfo_tempoI]
+ adds r0, r1
+ b _080AEAAC
+_080AE964:
+ ldrb r6, [r7, o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, o_MusicPlayerInfo_tracks]
+ movs r3, 0x1
+ movs r4, 0
+_080AE96C:
+ ldrb r0, [r5]
+ movs r1, 0x80
+ tst r1, r0
+ bne _080AE976
+ b _080AEA88
+_080AE976:
+ mov r10, r3
+ orrs r4, r3
+ mov r11, r4
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq _080AE9AA
+_080AE982:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AE99E
+ ldrb r0, [r4, 0x10]
+ cmp r0, 0
+ beq _080AE9A4
+ subs r0, 0x1
+ strb r0, [r4, 0x10]
+ bne _080AE9A4
+ movs r0, 0x40
+ orrs r1, r0
+ strb r1, [r4]
+ b _080AE9A4
+_080AE99E:
+ adds r0, r4, 0
+ bl ClearChain
+_080AE9A4:
+ ldr r4, [r4, 0x34]
+ cmp r4, 0
+ bne _080AE982
+_080AE9AA:
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x40
+ tst r0, r3
+ beq _080AEA28
+ adds r0, r5, 0
+ bl Clear64byte
+ movs r0, 0x80
+ strb r0, [r5]
+ movs r0, 0x2
+ strb r0, [r5, o_MusicPlayerTrack_bendRange]
+ movs r0, 0x40
+ strb r0, [r5, o_MusicPlayerTrack_volX]
+ movs r0, 0x16
+ strb r0, [r5, o_MusicPlayerTrack_lfoSpeed]
+ movs r0, 0x1
+ adds r1, r5, 0x6
+ strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6]
+ b _080AEA28
+_080AE9D0:
+ ldr r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldrb r1, [r2]
+ cmp r1, 0x80
+ bcs _080AE9DC
+ ldrb r1, [r5, o_MusicPlayerTrack_runningStatus]
+ b _080AE9E6
+_080AE9DC:
+ adds r2, 0x1
+ str r2, [r5, o_MusicPlayerTrack_cmdPtr]
+ cmp r1, 0xBD
+ bcc _080AE9E6
+ strb r1, [r5, o_MusicPlayerTrack_runningStatus]
+_080AE9E6:
+ cmp r1, 0xCF
+ bcc _080AE9FC
+ mov r0, r8
+ ldr r3, [r0, o_SoundInfo_plynote]
+ adds r0, r1, 0
+ subs r0, 0xCF
+ adds r1, r7, 0
+ adds r2, r5, 0
+ bl call_r3_2
+ b _080AEA28
+_080AE9FC:
+ cmp r1, 0xB0
+ bls _080AEA1E
+ adds r0, r1, 0
+ subs r0, 0xB1
+ strb r0, [r7, o_MusicPlayerInfo_cmd]
+ mov r3, r8
+ ldr r3, [r3, o_SoundInfo_MPlayJumpTable]
+ lsls r0, 2
+ ldr r3, [r3, r0]
+ adds r0, r7, 0
+ adds r1, r5, 0
+ bl call_r3_2
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ cmp r0, 0
+ beq _080AEA84
+ b _080AEA28
+_080AEA1E:
+ ldr r0, lt_gClockTable
+ subs r1, 0x80
+ adds r1, r0
+ ldrb r0, [r1]
+ strb r0, [r5, o_MusicPlayerTrack_wait]
+_080AEA28:
+ ldrb r0, [r5, o_MusicPlayerTrack_wait]
+ cmp r0, 0
+ beq _080AE9D0
+ subs r0, 0x1
+ strb r0, [r5, o_MusicPlayerTrack_wait]
+ ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed]
+ cmp r1, 0
+ beq _080AEA84
+ ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ cmp r0, 0
+ beq _080AEA84
+ ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ cmp r0, 0
+ beq _080AEA4A
+ subs r0, 0x1
+ strb r0, [r5, o_MusicPlayerTrack_lfoDelayC]
+ b _080AEA84
+_080AEA4A:
+ ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ adds r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC]
+ adds r1, r0, 0
+ subs r0, 0x40
+ lsls r0, 24
+ bpl _080AEA5E
+ lsls r2, r1, 24
+ asrs r2, 24
+ b _080AEA62
+_080AEA5E:
+ movs r0, 0x80
+ subs r2, r0, r1
+_080AEA62:
+ ldrb r0, [r5, o_MusicPlayerTrack_mod]
+ muls r0, r2
+ asrs r2, r0, 6
+ ldrb r0, [r5, o_MusicPlayerTrack_modM]
+ eors r0, r2
+ lsls r0, 24
+ beq _080AEA84
+ strb r2, [r5, o_MusicPlayerTrack_modM]
+ ldrb r0, [r5]
+ ldrb r1, [r5, o_MusicPlayerTrack_modT]
+ cmp r1, 0
+ bne _080AEA7E
+ movs r1, 0xC
+ b _080AEA80
+_080AEA7E:
+ movs r1, 0x3
+_080AEA80:
+ orrs r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_flags]
+_080AEA84:
+ mov r3, r10
+ mov r4, r11
+_080AEA88:
+ subs r6, 0x1
+ ble _080AEA94
+ movs r0, 0x50
+ adds r5, r0
+ lsls r3, 1
+ b _080AE96C
+_080AEA94:
+ ldr r0, [r7, o_MusicPlayerInfo_clock]
+ adds r0, 0x1
+ str r0, [r7, o_MusicPlayerInfo_clock]
+ cmp r4, 0
+ bne _080AEAA6
+ movs r0, 0x80
+ lsls r0, 24
+ str r0, [r7, o_MusicPlayerInfo_status]
+ b _080AEB5C
+_080AEAA6:
+ str r4, [r7, o_MusicPlayerInfo_status]
+ ldrh r0, [r7, o_MusicPlayerInfo_tempoC]
+ subs r0, 0x96
+_080AEAAC:
+ strh r0, [r7, o_MusicPlayerInfo_tempoC]
+ cmp r0, 0x96
+ bcc _080AEAB4
+ b _080AE964
+_080AEAB4:
+ ldrb r2, [r7, o_MusicPlayerInfo_trackCount]
+ ldr r5, [r7, o_MusicPlayerInfo_tracks]
+_080AEAB8:
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ movs r1, 0x80
+ tst r1, r0
+ beq _080AEB52
+ movs r1, 0xF
+ tst r1, r0
+ beq _080AEB52
+ mov r9, r2
+ adds r0, r7, 0
+ adds r1, r5, 0
+ bl TrkVolPitSet
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq _080AEB48
+_080AEAD6:
+ ldrb r1, [r4, o_SoundChannel_status]
+ movs r0, 0xC7
+ tst r0, r1
+ bne _080AEAE6
+ adds r0, r4, 0
+ bl ClearChain
+ b _080AEB42
+_080AEAE6:
+ ldrb r0, [r4, o_SoundChannel_type]
+ movs r6, 0x7
+ ands r6, r0
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x3
+ tst r0, r3
+ beq _080AEB04
+ bl ChnVolSetAsm
+ cmp r6, 0
+ beq _080AEB04
+ ldrb r0, [r4, o_CgbChannel_mo]
+ movs r1, 0x1
+ orrs r0, r1
+ strb r0, [r4, o_CgbChannel_mo]
+_080AEB04:
+ ldrb r3, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0xC
+ tst r0, r3
+ beq _080AEB42
+ ldrb r1, [r4, o_SoundChannel_ky]
+ movs r0, 0x8
+ ldrsb r0, [r5, r0]
+ adds r2, r1, r0
+ bpl _080AEB18
+ movs r2, 0
+_080AEB18:
+ cmp r6, 0
+ beq _080AEB36
+ mov r0, r8
+ ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq]
+ adds r1, r2, 0
+ ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ adds r0, r6, 0
+ bl call_r3_2
+ str r0, [r4, o_CgbChannel_fr]
+ ldrb r0, [r4, o_CgbChannel_mo]
+ movs r1, 0x2
+ orrs r0, r1
+ strb r0, [r4, o_CgbChannel_mo]
+ b _080AEB42
+_080AEB36:
+ adds r1, r2, 0
+ ldrb r2, [r5, o_MusicPlayerTrack_pitM]
+ ldr r0, [r4, o_SoundChannel_wav]
+ bl MidiKeyToFreq
+ str r0, [r4, o_SoundChannel_freq]
+_080AEB42:
+ ldr r4, [r4, o_SoundChannel_np]
+ cmp r4, 0
+ bne _080AEAD6
+_080AEB48:
+ ldrb r0, [r5, o_MusicPlayerTrack_flags]
+ movs r1, 0xF0
+ ands r0, r1
+ strb r0, [r5, o_MusicPlayerTrack_flags]
+ mov r2, r9
+_080AEB52:
+ subs r2, 0x1
+ ble _080AEB5C
+ movs r0, 0x50
+ adds r5, r0
+ bgt _080AEAB8
+_080AEB5C:
+ ldr r0, lt2_ID_NUMBER
+ str r0, [r7, o_MusicPlayerInfo_ident]
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r3}
+call_r3_2:
+ bx r3
+ .align 2, 0
+
+lt_gClockTable: .word gClockTable
+lt2_SOUND_INFO_PTR: .word SOUND_INFO_PTR
+lt2_ID_NUMBER: .word ID_NUMBER
+ thumb_func_end MPlayMain
+
+ thumb_func_start TrackStop
+TrackStop:
+ push {r4-r6,lr}
+ adds r5, r1, 0
+ ldrb r1, [r5, o_MusicPlayerTrack_flags]
+ movs r0, 0x80
+ tst r0, r1
+ beq TrackStop_Done
+ ldr r4, [r5, o_MusicPlayerTrack_chan]
+ cmp r4, 0
+ beq TrackStop_3
+ movs r6, 0
+TrackStop_Loop:
+ ldrb r0, [r4, o_SoundChannel_status]
+ cmp r0, 0
+ beq TrackStop_2
+ ldrb r0, [r4, o_SoundChannel_type]
+ movs r3, 0x7
+ ands r0, r3
+ beq TrackStop_1
+ ldr r3, =SOUND_INFO_PTR
+ ldr r3, [r3]
+ ldr r3, [r3, o_SoundInfo_CgbOscOff]
+ bl call_r3_2
+TrackStop_1:
+ strb r6, [r4, o_SoundChannel_status]
+TrackStop_2:
+ str r6, [r4, o_SoundChannel_track]
+ ldr r4, [r4, o_SoundChannel_np]
+ cmp r4, 0
+ bne TrackStop_Loop
+TrackStop_3:
+ str r4, [r5, o_MusicPlayerTrack_chan]
+TrackStop_Done:
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end TrackStop
+
+ thumb_func_start ChnVolSetAsm
+ChnVolSetAsm:
+ ldrb r1, [r4, 0x12]
+ movs r0, 0x14
+ ldrsb r2, [r4, r0]
+ movs r3, 0x80
+ adds r3, r2
+ muls r3, r1
+ ldrb r0, [r5, 0x10]
+ muls r0, r3
+ asrs r0, 14
+ cmp r0, 0xFF
+ bls _080AEBD8
+ movs r0, 0xFF
+_080AEBD8:
+ strb r0, [r4, 0x2]
+ movs r3, 0x7F
+ subs r3, r2
+ muls r3, r1
+ ldrb r0, [r5, 0x11]
+ muls r0, r3
+ asrs r0, 14
+ cmp r0, 0xFF
+ bls _080AEBEC
+ movs r0, 0xFF
+_080AEBEC:
+ strb r0, [r4, 0x3]
+ bx lr
+ thumb_func_end ChnVolSetAsm
+
+ thumb_func_start ply_note
+ply_note:
+ push {r4-r7,lr}
+ mov r4, r8
+ mov r5, r9
+ mov r6, r10
+ mov r7, r11
+ push {r4-r7}
+ sub sp, 0x18
+ str r1, [sp]
+ adds r5, r2, 0
+ ldr r1, =SOUND_INFO_PTR
+ ldr r1, [r1]
+ str r1, [sp, 0x4]
+ ldr r1, =gClockTable
+ adds r0, r1
+ ldrb r0, [r0]
+ strb r0, [r5, o_MusicPlayerTrack_gateTime]
+ ldr r3, [r5, o_MusicPlayerTrack_cmdPtr]
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC36
+ strb r0, [r5, o_MusicPlayerTrack_key]
+ adds r3, 0x1
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC34
+ strb r0, [r5, o_MusicPlayerTrack_velocity]
+ adds r3, 0x1
+ ldrb r0, [r3]
+ cmp r0, 0x80
+ bcs _080AEC34
+ ldrb r1, [r5, o_MusicPlayerTrack_gateTime]
+ adds r1, r0
+ strb r1, [r5, o_MusicPlayerTrack_gateTime]
+ adds r3, 0x1
+_080AEC34:
+ str r3, [r5, o_MusicPlayerTrack_cmdPtr]
+_080AEC36:
+ movs r0, 0
+ str r0, [sp, 0x14]
+ adds r4, r5, 0
+ adds r4, o_MusicPlayerTrack_ToneData_type
+ ldrb r2, [r4]
+ movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL
+ tst r0, r2
+ beq _080AEC88
+ ldrb r3, [r5, o_MusicPlayerTrack_key]
+ movs r0, TONEDATA_TYPE_SPL
+ tst r0, r2
+ beq _080AEC56
+ ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable]
+ adds r1, r3
+ ldrb r0, [r1]
+ b _080AEC58
+_080AEC56:
+ adds r0, r3, 0
+_080AEC58:
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav]
+ adds r1, r0
+ mov r9, r1
+ mov r6, r9
+ ldrb r1, [r6]
+ movs r0, 0xC0
+ tst r0, r1
+ beq _080AEC70
+ b _080AEDD6
+_080AEC70:
+ movs r0, 0x80
+ tst r0, r2
+ beq _080AEC8C
+ ldrb r1, [r6, 0x3]
+ movs r0, 0x80
+ tst r0, r1
+ beq _080AEC84
+ subs r1, 0xC0
+ lsls r1, 1
+ str r1, [sp, 0x14]
+_080AEC84:
+ ldrb r3, [r6, 0x1]
+ b _080AEC8C
+_080AEC88:
+ mov r9, r4
+ ldrb r3, [r5, 0x5]
+_080AEC8C:
+ str r3, [sp, 0x8]
+ ldr r6, [sp]
+ ldrb r1, [r6, 0x9]
+ ldrb r0, [r5, 0x1D]
+ adds r0, r1
+ cmp r0, 0xFF
+ bls _080AEC9C
+ movs r0, 0xFF
+_080AEC9C:
+ str r0, [sp, 0x10]
+ mov r6, r9
+ ldrb r0, [r6]
+ movs r6, 0x7
+ ands r6, r0
+ str r6, [sp, 0xC]
+ beq _080AECDC
+ ldr r0, [sp, 0x4]
+ ldr r4, [r0, 0x1C]
+ cmp r4, 0
+ bne _080AECB4
+ b _080AEDD6
+_080AECB4:
+ subs r6, 0x1
+ lsls r0, r6, 6
+ adds r4, r0
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AED30
+ movs r0, 0x40
+ tst r0, r1
+ bne _080AED30
+ ldrb r1, [r4, 0x13]
+ ldr r0, [sp, 0x10]
+ cmp r1, r0
+ bcc _080AED30
+ beq _080AECD4
+ b _080AEDD6
+_080AECD4:
+ ldr r0, [r4, 0x2C]
+ cmp r0, r5
+ bcs _080AED30
+ b _080AEDD6
+_080AECDC:
+ ldr r6, [sp, 0x10]
+ adds r7, r5, 0
+ movs r2, 0
+ mov r8, r2
+ ldr r4, [sp, 0x4]
+ ldrb r3, [r4, 0x6]
+ adds r4, 0x50
+_080AECEA:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ tst r0, r1
+ beq _080AED30
+ movs r0, 0x40
+ tst r0, r1
+ beq _080AED04
+ cmp r2, 0
+ bne _080AED08
+ adds r2, 0x1
+ ldrb r6, [r4, 0x13]
+ ldr r7, [r4, 0x2C]
+ b _080AED22
+_080AED04:
+ cmp r2, 0
+ bne _080AED24
+_080AED08:
+ ldrb r0, [r4, 0x13]
+ cmp r0, r6
+ bcs _080AED14
+ adds r6, r0, 0
+ ldr r7, [r4, 0x2C]
+ b _080AED22
+_080AED14:
+ bhi _080AED24
+ ldr r0, [r4, 0x2C]
+ cmp r0, r7
+ bls _080AED20
+ adds r7, r0, 0
+ b _080AED22
+_080AED20:
+ bcc _080AED24
+_080AED22:
+ mov r8, r4
+_080AED24:
+ adds r4, 0x40
+ subs r3, 0x1
+ bgt _080AECEA
+ mov r4, r8
+ cmp r4, 0
+ beq _080AEDD6
+_080AED30:
+ adds r0, r4, 0
+ bl ClearChain
+ movs r1, 0
+ str r1, [r4, 0x30]
+ ldr r3, [r5, 0x20]
+ str r3, [r4, 0x34]
+ cmp r3, 0
+ beq _080AED44
+ str r4, [r3, 0x30]
+_080AED44:
+ str r4, [r5, 0x20]
+ str r5, [r4, 0x2C]
+ ldrb r0, [r5, 0x1B]
+ strb r0, [r5, 0x1C]
+ cmp r0, r1
+ beq _080AED56
+ adds r1, r5, 0
+ bl clear_modM
+_080AED56:
+ ldr r0, [sp]
+ adds r1, r5, 0
+ bl TrkVolPitSet
+ ldr r0, [r5, 0x4]
+ str r0, [r4, 0x10]
+ ldr r0, [sp, 0x10]
+ strb r0, [r4, 0x13]
+ ldr r0, [sp, 0x8]
+ strb r0, [r4, 0x8]
+ ldr r0, [sp, 0x14]
+ strb r0, [r4, 0x14]
+ mov r6, r9
+ ldrb r0, [r6]
+ strb r0, [r4, 0x1]
+ ldr r7, [r6, 0x4]
+ str r7, [r4, 0x24]
+ ldr r0, [r6, 0x8]
+ str r0, [r4, 0x4]
+ ldrh r0, [r5, 0x1E]
+ strh r0, [r4, 0xC]
+ bl ChnVolSetAsm
+ ldrb r1, [r4, 0x8]
+ movs r0, 0x8
+ ldrsb r0, [r5, r0]
+ adds r3, r1, r0
+ bpl _080AED90
+ movs r3, 0
+_080AED90:
+ ldr r6, [sp, 0xC]
+ cmp r6, 0
+ beq _080AEDBE
+ mov r6, r9
+ ldrb r0, [r6, 0x2]
+ strb r0, [r4, 0x1E]
+ ldrb r1, [r6, 0x3]
+ movs r0, 0x80
+ tst r0, r1
+ bne _080AEDAA
+ movs r0, 0x70
+ tst r0, r1
+ bne _080AEDAC
+_080AEDAA:
+ movs r1, 0x8
+_080AEDAC:
+ strb r1, [r4, 0x1F]
+ ldrb r2, [r5, 0x9]
+ adds r1, r3, 0
+ ldr r0, [sp, 0xC]
+ ldr r3, [sp, 0x4]
+ ldr r3, [r3, 0x30]
+ bl call_r3_2
+ b _080AEDC8
+_080AEDBE:
+ ldrb r2, [r5, 0x9]
+ adds r1, r3, 0
+ adds r0, r7, 0
+ bl MidiKeyToFreq
+_080AEDC8:
+ str r0, [r4, 0x20]
+ movs r0, 0x80
+ strb r0, [r4]
+ ldrb r1, [r5]
+ movs r0, 0xF0
+ ands r0, r1
+ strb r0, [r5]
+_080AEDD6:
+ add sp, 0x18
+ pop {r0-r7}
+ mov r8, r0
+ mov r9, r1
+ mov r10, r2
+ mov r11, r3
+ pop {r0}
+ bx r0
+ .pool
+ thumb_func_end ply_note
+
+ thumb_func_start ply_endtie
+ply_endtie:
+ push {r4,r5}
+ ldr r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ ldrb r3, [r2]
+ cmp r3, 0x80
+ bcs _080AEE02
+ strb r3, [r1, o_MusicPlayerTrack_key]
+ adds r2, 0x1
+ str r2, [r1, o_MusicPlayerTrack_cmdPtr]
+ b _080AEE04
+_080AEE02:
+ ldrb r3, [r1, o_MusicPlayerTrack_key]
+_080AEE04:
+ ldr r1, [r1, o_MusicPlayerTrack_chan]
+ cmp r1, 0
+ beq _080AEE2C
+ movs r4, 0x83
+ movs r5, 0x40
+_080AEE0E:
+ ldrb r2, [r1, o_SoundChannel_status]
+ tst r2, r4
+ beq _080AEE26
+ tst r2, r5
+ bne _080AEE26
+ ldrb r0, [r1, o_SoundChannel_mk]
+ cmp r0, r3
+ bne _080AEE26
+ movs r0, 0x40
+ orrs r2, r0
+ strb r2, [r1, o_SoundChannel_status]
+ b _080AEE2C
+_080AEE26:
+ ldr r1, [r1, o_SoundChannel_np]
+ cmp r1, 0
+ bne _080AEE0E
+_080AEE2C:
+ pop {r4,r5}
+ bx lr
+ thumb_func_end ply_endtie
+
+ thumb_func_start clear_modM
+clear_modM:
+ movs r2, 0
+ strb r2, [r1, o_MusicPlayerTrack_modM]
+ strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC]
+ ldrb r2, [r1, o_MusicPlayerTrack_modT]
+ cmp r2, 0
+ bne _080AEE40
+ movs r2, 0xC
+ b _080AEE42
+_080AEE40:
+ movs r2, 0x3
+_080AEE42:
+ ldrb r3, [r1, o_MusicPlayerTrack_flags]
+ orrs r3, r2
+ strb r3, [r1, o_MusicPlayerTrack_flags]
+ bx lr
+ thumb_func_end clear_modM
+
+ thumb_func_start ld_r3_tp_adr_i_unchecked
+ld_r3_tp_adr_i_unchecked:
+ ldr r2, [r1, 0x40]
+ adds r3, r2, 0x1
+ str r3, [r1, 0x40]
+ ldrb r3, [r2]
+ bx lr
+ thumb_func_end ld_r3_tp_adr_i_unchecked
+
+ thumb_func_start ply_lfos
+ply_lfos:
+ mov r12, lr
+ bl ld_r3_tp_adr_i_unchecked
+ strb r3, [r1, o_MusicPlayerTrack_lfoSpeed]
+ cmp r3, 0
+ bne _080AEE68
+ bl clear_modM
+_080AEE68:
+ bx r12
+ thumb_func_end ply_lfos
+
+ thumb_func_start ply_mod
+ply_mod:
+ mov r12, lr
+ bl ld_r3_tp_adr_i_unchecked
+ strb r3, [r1, o_MusicPlayerTrack_mod]
+ cmp r3, 0
+ bne _080AEE7C
+ bl clear_modM
+_080AEE7C:
+ bx r12
+ thumb_func_end ply_mod
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/m4a_3.s b/asm/m4a_3.s
new file mode 100644
index 0000000..4747b3f
--- /dev/null
+++ b/asm/m4a_3.s
@@ -0,0 +1,574 @@
+ .include "asm/macros.inc"
+ .include "constants/gba_constants.inc"
+ .include "constants/m4a_constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start CgbSound
+CgbSound:
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x1C
+ ldr r0, =SOUND_INFO_PTR
+ ldr r0, [r0]
+ str r0, [sp, 0x4]
+ ldrb r0, [r0, 0xA]
+ cmp r0, 0
+ beq _080AFB00
+ subs r0, 0x1
+ ldr r1, [sp, 0x4]
+ strb r0, [r1, 0xA]
+ b _080AFB06
+ .pool
+_080AFB00:
+ movs r0, 0xE
+ ldr r2, [sp, 0x4]
+ strb r0, [r2, 0xA]
+_080AFB06:
+ movs r6, 0x1
+ ldr r0, [sp, 0x4]
+ ldr r4, [r0, 0x1C]
+_080AFB0C:
+ ldrb r1, [r4]
+ movs r0, 0xC7
+ ands r0, r1
+ adds r2, r6, 0x1
+ mov r10, r2
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ bne _080AFB22
+ b _080AFF0C
+_080AFB22:
+ cmp r6, 0x2
+ beq _080AFB54
+ cmp r6, 0x2
+ bgt _080AFB30
+ cmp r6, 0x1
+ beq _080AFB36
+ b _080AFB8C
+_080AFB30:
+ cmp r6, 0x3
+ beq _080AFB6C
+ b _080AFB8C
+_080AFB36:
+ ldr r0, =REG_NR10
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR11
+ ldr r2, =REG_NR12
+ str r2, [sp, 0xC]
+ adds r0, 0x4
+ str r0, [sp, 0x10]
+ adds r2, 0x2
+ b _080AFB9C
+ .pool
+_080AFB54:
+ ldr r0, =REG_NR10 + 1
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR21
+ ldr r2, =REG_NR22
+ b _080AFB94
+ .pool
+_080AFB6C:
+ ldr r0, =REG_NR30
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR31
+ ldr r2, =REG_NR32
+ str r2, [sp, 0xC]
+ adds r0, 0x4
+ str r0, [sp, 0x10]
+ adds r2, 0x2
+ b _080AFB9C
+ .pool
+_080AFB8C:
+ ldr r0, =REG_NR30 + 1
+ str r0, [sp, 0x8]
+ ldr r7, =REG_NR41
+ ldr r2, =REG_NR42
+_080AFB94:
+ str r2, [sp, 0xC]
+ adds r0, 0xB
+ str r0, [sp, 0x10]
+ adds r2, 0x4
+_080AFB9C:
+ str r2, [sp, 0x14]
+ ldr r0, [sp, 0x4]
+ ldrb r0, [r0, 0xA]
+ str r0, [sp]
+ ldr r2, [sp, 0xC]
+ ldrb r0, [r2]
+ mov r8, r0
+ adds r2, r1, 0
+ movs r0, 0x80
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFC92
+ movs r3, 0x40
+ adds r0, r3, 0
+ ands r0, r2
+ lsls r0, 24
+ lsrs r5, r0, 24
+ adds r0, r6, 0x1
+ mov r10, r0
+ movs r1, 0x40
+ adds r1, r4
+ mov r9, r1
+ cmp r5, 0
+ bne _080AFCB6
+ movs r0, 0x3
+ strb r0, [r4]
+ strb r0, [r4, 0x1D]
+ adds r0, r4, 0
+ str r3, [sp, 0x18]
+ bl CgbModVol
+ ldr r3, [sp, 0x18]
+ cmp r6, 0x2
+ beq _080AFC04
+ cmp r6, 0x2
+ bgt _080AFBF8
+ cmp r6, 0x1
+ beq _080AFBFE
+ b _080AFC58
+ .pool
+_080AFBF8:
+ cmp r6, 0x3
+ beq _080AFC10
+ b _080AFC58
+_080AFBFE:
+ ldrb r0, [r4, 0x1F]
+ ldr r2, [sp, 0x8]
+ strb r0, [r2]
+_080AFC04:
+ ldr r0, [r4, 0x24]
+ lsls r0, 6
+ ldrb r1, [r4, 0x1E]
+ adds r0, r1, r0
+ strb r0, [r7]
+ b _080AFC64
+_080AFC10:
+ ldr r1, [r4, 0x24]
+ ldr r0, [r4, 0x28]
+ cmp r1, r0
+ beq _080AFC38
+ ldr r2, [sp, 0x8]
+ strb r3, [r2]
+ ldr r1, =REG_WAVE_RAM
+ ldr r2, [r4, 0x24]
+ ldr r0, [r2]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0x4]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0x8]
+ str r0, [r1]
+ adds r1, 0x4
+ ldr r0, [r2, 0xC]
+ str r0, [r1]
+ str r2, [r4, 0x28]
+_080AFC38:
+ ldr r0, [sp, 0x8]
+ strb r5, [r0]
+ ldrb r0, [r4, 0x1E]
+ strb r0, [r7]
+ ldrb r0, [r4, 0x1E]
+ cmp r0, 0
+ beq _080AFC50
+ movs r0, 0xC0
+ b _080AFC72
+ .pool
+_080AFC50:
+ movs r1, 0x80
+ negs r1, r1
+ strb r1, [r4, 0x1A]
+ b _080AFC74
+_080AFC58:
+ ldrb r0, [r4, 0x1E]
+ strb r0, [r7]
+ ldr r0, [r4, 0x24]
+ lsls r0, 3
+ ldr r2, [sp, 0x10]
+ strb r0, [r2]
+_080AFC64:
+ ldrb r0, [r4, 0x4]
+ adds r0, 0x8
+ mov r8, r0
+ ldrb r0, [r4, 0x1E]
+ cmp r0, 0
+ beq _080AFC72
+ movs r0, 0x40
+_080AFC72:
+ strb r0, [r4, 0x1A]
+_080AFC74:
+ ldrb r1, [r4, 0x4]
+ movs r2, 0
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ adds r1, r6, 0x1
+ mov r10, r1
+ movs r1, 0x40
+ adds r1, r4
+ mov r9, r1
+ cmp r0, 0
+ bne _080AFC8E
+ b _080AFDCA
+_080AFC8E:
+ strb r2, [r4, 0x9]
+ b _080AFDF8
+_080AFC92:
+ movs r0, 0x4
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFCC4
+ ldrb r0, [r4, 0xD]
+ subs r0, 0x1
+ strb r0, [r4, 0xD]
+ movs r2, 0xFF
+ ands r0, r2
+ lsls r0, 24
+ adds r1, r6, 0x1
+ mov r10, r1
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ ble _080AFCB6
+ b _080AFE0A
+_080AFCB6:
+ lsls r0, r6, 24
+ lsrs r0, 24
+ bl CgbOscOff
+ movs r0, 0
+ strb r0, [r4]
+ b _080AFF08
+_080AFCC4:
+ movs r0, 0x40
+ ands r0, r1
+ adds r2, r6, 0x1
+ mov r10, r2
+ movs r2, 0x40
+ adds r2, r4
+ mov r9, r2
+ cmp r0, 0
+ beq _080AFD04
+ movs r0, 0x3
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD04
+ movs r0, 0xFC
+ ands r0, r1
+ movs r2, 0
+ strb r0, [r4]
+ ldrb r1, [r4, 0x7]
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD36
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFDF8
+ ldrb r2, [r4, 0x7]
+ mov r8, r2
+ b _080AFDF8
+_080AFD04:
+ ldrb r0, [r4, 0xB]
+ cmp r0, 0
+ bne _080AFDF8
+ cmp r6, 0x3
+ bne _080AFD16
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+_080AFD16:
+ adds r0, r4, 0
+ bl CgbModVol
+ movs r0, 0x3
+ ldrb r2, [r4]
+ ands r0, r2
+ cmp r0, 0
+ bne _080AFD6A
+ ldrb r0, [r4, 0x9]
+ subs r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ lsls r0, 24
+ cmp r0, 0
+ bgt _080AFD66
+_080AFD36:
+ ldrb r2, [r4, 0xC]
+ ldrb r1, [r4, 0xA]
+ adds r0, r2, 0
+ muls r0, r1
+ adds r0, 0xFF
+ asrs r0, 8
+ movs r1, 0
+ strb r0, [r4, 0x9]
+ lsls r0, 24
+ cmp r0, 0
+ beq _080AFCB6
+ movs r0, 0x4
+ ldrb r2, [r4]
+ orrs r0, r2
+ strb r0, [r4]
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFE0A
+ movs r2, 0x8
+ mov r8, r2
+ b _080AFE0A
+_080AFD66:
+ ldrb r0, [r4, 0x7]
+ b _080AFDF6
+_080AFD6A:
+ cmp r0, 0x1
+ bne _080AFD76
+_080AFD6E:
+ ldrb r0, [r4, 0x19]
+ strb r0, [r4, 0x9]
+ movs r0, 0x7
+ b _080AFDF6
+_080AFD76:
+ cmp r0, 0x2
+ bne _080AFDBA
+ ldrb r0, [r4, 0x9]
+ subs r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ lsls r0, 24
+ ldrb r2, [r4, 0x19]
+ lsls r1, r2, 24
+ cmp r0, r1
+ bgt _080AFDB6
+_080AFD8E:
+ ldrb r0, [r4, 0x6]
+ cmp r0, 0
+ bne _080AFD9E
+ movs r0, 0xFC
+ ldrb r1, [r4]
+ ands r0, r1
+ strb r0, [r4]
+ b _080AFD36
+_080AFD9E:
+ ldrb r0, [r4]
+ subs r0, 0x1
+ strb r0, [r4]
+ movs r0, 0x1
+ ldrb r2, [r4, 0x1D]
+ orrs r0, r2
+ strb r0, [r4, 0x1D]
+ cmp r6, 0x3
+ beq _080AFD6E
+ movs r0, 0x8
+ mov r8, r0
+ b _080AFD6E
+_080AFDB6:
+ ldrb r0, [r4, 0x5]
+ b _080AFDF6
+_080AFDBA:
+ ldrb r0, [r4, 0x9]
+ adds r0, 0x1
+ strb r0, [r4, 0x9]
+ movs r1, 0xFF
+ ands r0, r1
+ ldrb r2, [r4, 0xA]
+ cmp r0, r2
+ bcc _080AFDF4
+_080AFDCA:
+ ldrb r0, [r4]
+ subs r0, 0x1
+ movs r2, 0
+ strb r0, [r4]
+ ldrb r1, [r4, 0x5]
+ strb r1, [r4, 0xB]
+ movs r0, 0xFF
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFD8E
+ movs r0, 0x1
+ ldrb r1, [r4, 0x1D]
+ orrs r0, r1
+ strb r0, [r4, 0x1D]
+ ldrb r0, [r4, 0xA]
+ strb r0, [r4, 0x9]
+ cmp r6, 0x3
+ beq _080AFDF8
+ ldrb r2, [r4, 0x5]
+ mov r8, r2
+ b _080AFDF8
+_080AFDF4:
+ ldrb r0, [r4, 0x4]
+_080AFDF6:
+ strb r0, [r4, 0xB]
+_080AFDF8:
+ ldrb r0, [r4, 0xB]
+ subs r0, 0x1
+ strb r0, [r4, 0xB]
+ ldr r0, [sp]
+ cmp r0, 0
+ bne _080AFE0A
+ subs r0, 0x1
+ str r0, [sp]
+ b _080AFD04
+_080AFE0A:
+ movs r0, 0x2
+ ldrb r1, [r4, 0x1D]
+ ands r0, r1
+ cmp r0, 0
+ beq _080AFE82
+ cmp r6, 0x3
+ bgt _080AFE4A
+ movs r0, 0x8
+ ldrb r2, [r4, 0x1]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFE4A
+ ldr r0, =REG_SOUNDBIAS + 1
+ ldrb r0, [r0]
+ cmp r0, 0x3F
+ bgt _080AFE3C
+ ldr r0, [r4, 0x20]
+ adds r0, 0x2
+ ldr r1, =0x000007fc
+ b _080AFE46
+ .pool
+_080AFE3C:
+ cmp r0, 0x7F
+ bgt _080AFE4A
+ ldr r0, [r4, 0x20]
+ adds r0, 0x1
+ ldr r1, =0x000007fe
+_080AFE46:
+ ands r0, r1
+ str r0, [r4, 0x20]
+_080AFE4A:
+ cmp r6, 0x4
+ beq _080AFE5C
+ ldr r0, [r4, 0x20]
+ ldr r1, [sp, 0x10]
+ strb r0, [r1]
+ b _080AFE6A
+ .pool
+_080AFE5C:
+ ldr r2, [sp, 0x10]
+ ldrb r0, [r2]
+ movs r1, 0x8
+ ands r1, r0
+ ldr r0, [r4, 0x20]
+ orrs r0, r1
+ strb r0, [r2]
+_080AFE6A:
+ movs r0, 0xC0
+ ldrb r1, [r4, 0x1A]
+ ands r0, r1
+ adds r1, r4, 0
+ adds r1, 0x21
+ ldrb r1, [r1]
+ adds r0, r1, r0
+ strb r0, [r4, 0x1A]
+ movs r2, 0xFF
+ ands r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+_080AFE82:
+ movs r0, 0x1
+ ldrb r2, [r4, 0x1D]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFF08
+ ldr r1, =REG_NR51
+ ldrb r0, [r1]
+ ldrb r2, [r4, 0x1C]
+ bics r0, r2
+ ldrb r2, [r4, 0x1B]
+ orrs r0, r2
+ strb r0, [r1]
+ cmp r6, 0x3
+ bne _080AFED4
+ ldr r0, =gCgb3Vol
+ ldrb r1, [r4, 0x9]
+ adds r0, r1, r0
+ ldrb r0, [r0]
+ ldr r2, [sp, 0xC]
+ strb r0, [r2]
+ movs r1, 0x80
+ adds r0, r1, 0
+ ldrb r2, [r4, 0x1A]
+ ands r0, r2
+ cmp r0, 0
+ beq _080AFF08
+ ldr r0, [sp, 0x8]
+ strb r1, [r0]
+ ldrb r0, [r4, 0x1A]
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+ movs r0, 0x7F
+ ldrb r2, [r4, 0x1A]
+ ands r0, r2
+ strb r0, [r4, 0x1A]
+ b _080AFF08
+ .pool
+_080AFED4:
+ movs r0, 0xF
+ mov r1, r8
+ ands r1, r0
+ mov r8, r1
+ ldrb r2, [r4, 0x9]
+ lsls r0, r2, 4
+ add r0, r8
+ ldr r1, [sp, 0xC]
+ strb r0, [r1]
+ movs r2, 0x80
+ ldrb r0, [r4, 0x1A]
+ orrs r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+ cmp r6, 0x1
+ bne _080AFF08
+ ldr r0, [sp, 0x8]
+ ldrb r1, [r0]
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ bne _080AFF08
+ ldrb r0, [r4, 0x1A]
+ orrs r0, r2
+ ldr r1, [sp, 0x14]
+ strb r0, [r1]
+_080AFF08:
+ movs r0, 0
+ strb r0, [r4, 0x1D]
+_080AFF0C:
+ mov r6, r10
+ mov r4, r9
+ cmp r6, 0x4
+ bgt _080AFF16
+ b _080AFB0C
+_080AFF16:
+ add sp, 0x1C
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end CgbSound
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/memory.s b/asm/memory.s
index e364f1b..1b9d36e 100644
--- a/asm/memory.s
+++ b/asm/memory.s
@@ -4,268 +4,7 @@
.syntax unified
.text
-
- thumb_func_start InitHeap
-InitHeap:
- push {lr}
- bl InitHeapInternal
- pop {r0}
- bx r0
- thumb_func_end InitHeap
-
- thumb_func_start MemoryClear8
-MemoryClear8:
- push {lr}
- cmp r1, 0
- ble _08002EAA
- movs r2, 0
-_08002EA0:
- subs r1, 0x1
- strb r2, [r0]
- adds r0, 0x1
- cmp r1, 0
- bgt _08002EA0
-_08002EAA:
- pop {r0}
- bx r0
- thumb_func_end MemoryClear8
-
- thumb_func_start MemoryClear16
-MemoryClear16:
- push {lr}
- cmp r1, 0
- ble _08002EC2
- movs r2, 0
-_08002EB8:
- subs r1, 0x2
- strh r2, [r0]
- adds r0, 0x2
- cmp r1, 0
- bgt _08002EB8
-_08002EC2:
- pop {r0}
- bx r0
- thumb_func_end MemoryClear16
-
- thumb_func_start MemoryClear32
-MemoryClear32:
- push {lr}
- bl CpuClear
- pop {r0}
- bx r0
- thumb_func_end MemoryClear32
-
- thumb_func_start MemoryFill8
-MemoryFill8:
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- cmp r2, 0
- ble _08002EE8
-_08002EDE:
- subs r2, 0x1
- strb r1, [r0]
- adds r0, 0x1
- cmp r2, 0
- bgt _08002EDE
-_08002EE8:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill8
-
- thumb_func_start MemoryFill16
-MemoryFill16:
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- cmp r2, 0
- ble _08002F00
-_08002EF6:
- subs r2, 0x2
- strh r1, [r0]
- adds r0, 0x2
- cmp r2, 0
- bgt _08002EF6
-_08002F00:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill16
-
- thumb_func_start MemoryFill32
-MemoryFill32:
- push {lr}
- cmp r2, 0
- ble _08002F12
-_08002F0A:
- subs r2, 0x4
- stm r0!, {r1}
- cmp r2, 0
- bgt _08002F0A
-_08002F12:
- pop {r0}
- bx r0
- thumb_func_end MemoryFill32
-
- thumb_func_start MemoryCopy8
-MemoryCopy8:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F2E
-_08002F20:
- subs r2, 0x1
- ldrb r0, [r1]
- strb r0, [r3]
- adds r1, 0x1
- adds r3, 0x1
- cmp r2, 0
- bgt _08002F20
-_08002F2E:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy8
-
- thumb_func_start MemoryCopy16
-MemoryCopy16:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F4A
-_08002F3C:
- subs r2, 0x2
- ldrh r0, [r1]
- strh r0, [r3]
- adds r1, 0x2
- adds r3, 0x2
- cmp r2, 0
- bgt _08002F3C
-_08002F4A:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy16
-
- thumb_func_start MemoryCopy32
-MemoryCopy32:
- push {lr}
- adds r3, r0, 0
- cmp r2, 0
- ble _08002F62
-_08002F58:
- subs r2, 0x4
- ldm r1!, {r0}
- stm r3!, {r0}
- cmp r2, 0
- bgt _08002F58
-_08002F62:
- pop {r0}
- bx r0
- thumb_func_end MemoryCopy32
-
- thumb_func_start InitHeapInternal
-InitHeapInternal:
- push {lr}
- sub sp, 0x8
- ldr r0, _08002F90
- str r0, [sp]
- movs r0, 0x90
- lsls r0, 10
- str r0, [sp, 0x4]
- ldr r1, _08002F94
- movs r0, 0
- str r0, [r1]
- ldr r0, _08002F98
- ldr r2, _08002F9C
- mov r1, sp
- movs r3, 0x20
- bl DoInitHeap
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_08002F90: .4byte gUnknown_20011D0
-_08002F94: .4byte gUnknown_2000EA8
-_08002F98: .4byte gUnknown_2000EB0
-_08002F9C: .4byte gUnknown_2000ED0
- thumb_func_end InitHeapInternal
-
- thumb_func_start DoInitHeap
-DoInitHeap:
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- ldr r4, [r1, 0x4]
- mov r9, r4
- movs r4, 0x4
- negs r4, r4
- mov r5, r9
- ands r5, r4
- mov r9, r5
- ldr r6, _08002FFC
- ldr r4, _08003000
- mov r8, r4
- ldr r5, [r4]
- lsls r4, r5, 2
- adds r4, r6
- str r0, [r4]
- adds r5, 0x1
- mov r4, r8
- str r5, [r4]
- ldr r5, [r1]
- str r5, [r0, 0x14]
- mov r1, r9
- str r1, [r0, 0x18]
- movs r1, 0x2
- str r1, [r0]
- movs r4, 0
- str r4, [r0, 0x4]
- str r2, [r0, 0x8]
- movs r1, 0x1
- str r1, [r0, 0xC]
- str r3, [r0, 0x10]
- str r4, [r2]
- str r4, [r2, 0x4]
- str r5, [r2, 0xC]
- mov r5, r9
- str r5, [r2, 0x10]
- str r4, [r2, 0x14]
- str r4, [r2, 0x8]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08002FFC: .4byte gUnknown_2000E88
-_08003000: .4byte gUnknown_2000EA8
- thumb_func_end DoInitHeap
-
- thumb_func_start InitSubHeap
-InitSubHeap:
- push {r4,r5,lr}
- sub sp, 0x8
- adds r3, r2, 0
- lsls r4, r3, 1
- adds r4, r3
- movs r2, 0x4
- negs r2, r2
- lsls r4, 3
- ldr r5, [r1, 0x4]
- subs r5, r4
- ands r5, r2
- ldr r2, [r1]
- adds r4, r2, r4
- str r4, [sp]
- str r5, [sp, 0x4]
- mov r1, sp
- bl DoInitHeap
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end InitSubHeap
-
+
thumb_func_start xxx_memory_attr_related
xxx_memory_attr_related:
push {lr}
@@ -454,7 +193,7 @@ _0800315E:
_08003168:
movs r7, 0x1
negs r7, r7
- ldr r6, _080031A4
+ ldr r6, =0x24001
ldr r0, [r4, 0xC]
subs r3, r0, 0x1
lsls r0, r3, 1
@@ -486,7 +225,7 @@ _080031A0:
adds r0, r7, 0
b _080031AC
.align 2, 0
-_080031A4: .4byte 0x00024001
+ .pool
_080031A8:
movs r0, 0x1
negs r0, r0
@@ -561,13 +300,12 @@ _08003222:
str r2, [r1, 0xC]
cmp r2, r8
ble _08003240
- ldr r0, _08003238
- ldr r1, _0800323C
+ ldr r0, =gUnknown_80B7EB8
+ ldr r1, =gUnknown_80B7EC4
mov r3, r8
bl FatalError
.align 2, 0
-_08003238: .4byte gUnknown_80B7EB8
-_0800323C: .4byte gUnknown_80B7EC4
+ .pool
_08003240:
ldr r0, [sp, 0xC]
add r0, r9
@@ -671,13 +409,12 @@ _080032F6:
str r2, [r7, 0xC]
cmp r2, r8
ble _08003314
- ldr r0, _0800330C
- ldr r1, _08003310
+ ldr r0, =gUnknown_80B7EFC
+ ldr r1, =gUnknown_80B7EC4
mov r3, r8
bl FatalError
.align 2, 0
-_0800330C: .4byte gUnknown_80B7EFC
-_08003310: .4byte gUnknown_80B7EC4
+ .pool
_08003314:
ldr r0, [r4, 0x10]
ldr r1, [sp, 0x10]
@@ -717,7 +454,7 @@ _LocateSet:
adds r6, r2, 0
cmp r5, 0
bne _0800335C
- ldr r5, _08003390
+ ldr r5, =gMainHeapDescriptor
_0800335C:
asrs r4, r6, 8
movs r0, 0x1
@@ -743,7 +480,7 @@ _0800335C:
ldr r0, [r0, 0xC]
b _080033CC
.align 2, 0
-_08003390: .4byte gUnknown_2000EB0
+ .pool
_08003394:
adds r0, r5, 0
adds r1, r4, 0
@@ -760,16 +497,15 @@ _08003394:
ldr r0, [r0, 0xC]
b _080033CC
_080033B4:
- ldr r0, _080033C4
- ldr r1, _080033C8
+ ldr r0, =gUnknown_80B7F14
+ ldr r1, =gUnknown_80B7F20
str r4, [sp]
str r6, [sp, 0x4]
adds r2, r5, 0
adds r3, r7, 0
bl FatalError
.align 2, 0
-_080033C4: .4byte gUnknown_80B7F14
-_080033C8: .4byte gUnknown_80B7F20
+ .pool
_080033CC:
add sp, 0x8
pop {r4-r7}
@@ -782,25 +518,25 @@ MemoryAlloc:
push {lr}
adds r3, r0, 0
adds r2, r1, 0
- ldr r0, _080033E8
+ ldr r0, =gMainHeapDescriptor
adds r1, r3, 0
bl DoAlloc
pop {r1}
bx r1
.align 2, 0
-_080033E8: .4byte gUnknown_2000EB0
+ .pool
thumb_func_end MemoryAlloc
thumb_func_start MemoryFree
MemoryFree:
push {lr}
adds r1, r0, 0
- ldr r0, _080033FC
+ ldr r0, =gMainHeapDescriptor
bl DoFree
pop {r0}
bx r0
.align 2, 0
-_080033FC: .4byte gUnknown_2000EB0
+ .pool
thumb_func_end MemoryFree
thumb_func_start MemoryLocate_LocalCreate
@@ -813,7 +549,7 @@ MemoryLocate_LocalCreate:
adds r6, r3, 0
cmp r4, 0
bne _08003412
- ldr r4, _0800342C
+ ldr r4, =gMainHeapDescriptor
_08003412:
adds r0, r4, 0
movs r1, 0x9
@@ -822,14 +558,12 @@ _08003412:
adds r1, r0, 0
cmp r1, 0
bge _08003438
- ldr r0, _08003430
- ldr r1, _08003434
+ ldr r0, =gUnknown_80B7F88
+ ldr r1, =gUnknown_80B7F94
adds r2, r5, 0
bl FatalError
.align 2, 0
-_0800342C: .4byte gUnknown_2000EB0
-_08003430: .4byte gUnknown_80B7F88
-_08003434: .4byte gUnknown_80B7F94
+ .pool
_08003438:
str r6, [sp]
adds r0, r4, 0
@@ -893,11 +627,11 @@ _080034A2:
movs r0, 0
mov r12, r0
movs r3, 0
- ldr r6, _080034E0
+ ldr r6, =gHeapCount
ldr r0, [r6]
cmp r12, r0
bge _080034F2
- ldr r5, _080034E4
+ ldr r5, =gHeapDescriptorList
adds r1, r6, 0
adds r7, r5, 0
movs r2, 0
@@ -911,7 +645,7 @@ _080034BC:
str r0, [r1]
cmp r3, r0
bge _080034F8
- ldr r1, _080034E0
+ ldr r1, =gHeapCount
adds r2, r7
_080034D2:
ldr r0, [r2, 0x4]
@@ -922,8 +656,7 @@ _080034D2:
blt _080034D2
b _080034F8
.align 2, 0
-_080034E0: .4byte gUnknown_2000EA8
-_080034E4: .4byte gUnknown_2000E88
+ .pool
_080034E8:
adds r2, 0x4
adds r3, 0x1
@@ -966,7 +699,7 @@ DoFree:
adds r4, r0, 0
cmp r4, 0
bne _0800352E
- ldr r4, _080035D4
+ ldr r4, =gMainHeapDescriptor
_0800352E:
cmp r1, 0
beq _080035E4
@@ -1056,7 +789,7 @@ _080035BA:
blt _080035BA
b _080035E4
.align 2, 0
-_080035D4: .4byte gUnknown_2000EB0
+ .pool
_080035D8:
movs r0, 0x1
add r8, r0
diff --git a/asm/rom_header.inc b/asm/rom_header.inc
index 09b95ec..6730efa 100644
--- a/asm/rom_header.inc
+++ b/asm/rom_header.inc
@@ -1,37 +1,19 @@
.global RomHeaderNintendoLogo
RomHeaderNintendoLogo:
- .byte 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21
- .byte 0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad
- .byte 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21
- .byte 0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20
- .byte 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec
- .byte 0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf
- .byte 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1
- .byte 0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc
- .byte 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61
- .byte 0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76
- .byte 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56
- .byte 0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd
- .byte 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1
- .byte 0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25
- .byte 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2
- .byte 0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44
- .byte 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94
- .byte 0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf
- .byte 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72
- .byte 0x21,0xd4,0xf8,0x07
+ .space 156
RomHeaderGameTitle:
- .ascii "POKE DUNGEON"
+ .space 12
+ .global RomHeaderGameCode
RomHeaderGameCode:
- .ascii "B24E"
+ .space 4
RomHeaderMakerCode:
- .ascii "01"
+ .space 2
RomHeaderMagic:
- .byte 0x96
+ .byte 0
RomHeaderMainUnitCode:
.byte 0
@@ -42,11 +24,12 @@ RomHeaderDeviceType:
RomHeaderReserved1:
.space 7
+ .global RomHeaderSoftwareVersion
RomHeaderSoftwareVersion:
.byte 0
RomHeaderChecksum:
- .byte 0xA4
+ .byte 0
RomHeaderReserved2:
.space 2
diff --git a/asm/save.s b/asm/save.s
index f88c219..2ebaaa4 100644
--- a/asm/save.s
+++ b/asm/save.s
@@ -5,116 +5,18 @@
.text
- thumb_func_start sub_8011C1C
-sub_8011C1C:
- ldr r0, _08011C24
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C24: .4byte gUnknown_203B17C
- thumb_func_end sub_8011C1C
-
- thumb_func_start sub_8011C28
-sub_8011C28:
- ldr r1, _08011C30
- str r0, [r1]
- bx lr
- .align 2, 0
-_08011C30: .4byte gUnknown_203B17C
- thumb_func_end sub_8011C28
-
- thumb_func_start sub_8011C34
-sub_8011C34:
- ldr r0, _08011C3C
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C3C: .4byte gUnknown_202DE28
- thumb_func_end sub_8011C34
-
- thumb_func_start sub_8011C40
-sub_8011C40:
- ldr r1, _08011C48
- str r0, [r1]
- bx lr
- .align 2, 0
-_08011C48: .4byte gUnknown_202DE28
- thumb_func_end sub_8011C40
-
- thumb_func_start sub_8011C4C
-sub_8011C4C:
- ldr r0, _08011C54
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_08011C54: .4byte gUnknown_203B180
- thumb_func_end sub_8011C4C
-
- thumb_func_start sub_8011C58
-sub_8011C58:
- push {r4,lr}
- adds r4, r0, 0
- movs r2, 0
- lsrs r1, 2
- cmp r1, 0x1
- ble _08011C72
- adds r3, r4, 0x4
- subs r1, 0x1
-_08011C68:
- ldm r3!, {r0}
- adds r2, r0
- subs r1, 0x1
- cmp r1, 0
- bne _08011C68
-_08011C72:
- str r2, [r4]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8011C58
-
- thumb_func_start sub_8011C7C
-sub_8011C7C:
- push {r4,lr}
- adds r4, r0, 0
- movs r2, 0
- lsrs r1, 2
- cmp r1, 0x1
- ble _08011C96
- adds r3, r4, 0x4
- subs r1, 0x1
-_08011C8C:
- ldm r3!, {r0}
- adds r2, r0
- subs r1, 0x1
- cmp r1, 0
- bne _08011C8C
-_08011C96:
- ldr r0, [r4]
- cmp r0, r2
- bne _08011CA0
- movs r0, 0
- b _08011CA2
-_08011CA0:
- movs r0, 0x1
-_08011CA2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8011C7C
-
thumb_func_start sub_8011CA8
sub_8011CA8:
push {lr}
adds r3, r0, 0
adds r2, r1, 0
- ldr r0, _08011CCC
+ ldr r0, =gUnknown_203B184
ldr r0, [r0]
- ldr r0, _08011CD0
+ ldr r0, =0xfff
adds r1, r2, r0
cmp r1, 0
bge _08011CBE
- ldr r0, _08011CD4
+ ldr r0, =0x1ffe
adds r1, r2, r0
_08011CBE:
asrs r1, 12
@@ -124,13 +26,11 @@ _08011CBE:
pop {r0}
bx r0
.align 2, 0
-_08011CCC: .4byte gUnknown_203B184
-_08011CD0: .4byte 0x00000fff
-_08011CD4: .4byte 0x00001ffe
+ .pool
thumb_func_end sub_8011CA8
- thumb_func_start sub_8011CD8
-sub_8011CD8:
+ thumb_func_start WriteSaveSector
+WriteSaveSector:
push {r4-r6,lr}
adds r5, r1, 0
adds r4, r2, 0
@@ -139,7 +39,7 @@ sub_8011CD8:
bl sub_8011CA8
adds r0, r5, 0
adds r1, r4, 0
- bl sub_8011C58
+ bl CalculateChecksum
ldr r0, _08011D04
ldr r0, [r0]
cmp r0, 0
@@ -183,10 +83,10 @@ _08011D3A:
pop {r4-r6}
pop {r1}
bx r1
- thumb_func_end sub_8011CD8
+ thumb_func_end WriteSaveSector
- thumb_func_start sub_8011D40
-sub_8011D40:
+ thumb_func_start ReadSaveSector
+ReadSaveSector:
push {r4-r6,lr}
adds r5, r1, 0
adds r4, r2, 0
@@ -228,7 +128,7 @@ _08011D8A:
_08011D8E:
adds r0, r5, 0
adds r1, r4, 0
- bl sub_8011C7C
+ bl ValidateChecksum
lsls r0, 24
cmp r0, 0
bne _08011DA0
@@ -240,7 +140,7 @@ _08011DA2:
pop {r4-r6}
pop {r1}
bx r1
- thumb_func_end sub_8011D40
+ thumb_func_end ReadSaveSector
thumb_func_start sub_8011DA8
sub_8011DA8:
@@ -265,14 +165,14 @@ sub_8011DAC:
adds r0, r6, 0
adds r1, r5, 0
mov r2, r8
- bl sub_8011D40
+ bl ReadSaveSector
adds r7, r0, 0
cmp r7, 0
beq _08011DE8
adds r0, r6, 0
adds r1, r5, 0
mov r2, r8
- bl sub_8011D40
+ bl ReadSaveSector
adds r7, r0, 0
b _08011DF0
.align 2, 0
@@ -491,7 +391,7 @@ _08011F98: .4byte 0x00000444
thumb_func_start sub_8011F9C
sub_8011F9C:
push {lr}
- bl sub_8011D40
+ bl ReadSaveSector
pop {r1}
bx r1
thumb_func_end sub_8011F9C
@@ -511,7 +411,7 @@ sub_8011FA8:
mov r0, sp
adds r1, r5, 0
adds r2, r4, 0
- bl sub_8011D40
+ bl ReadSaveSector
adds r2, r0, 0
cmp r2, 0
bne _08011FD8
@@ -554,7 +454,7 @@ sub_8011FF8:
mov r0, sp
adds r1, r5, 0
adds r2, r4, 0
- bl sub_8011D40
+ bl ReadSaveSector
cmp r0, 0
bne _08012028
ldr r1, [r5, 0x14]
@@ -722,12 +622,12 @@ _080120E8:
adds r0, r7, 0
adds r1, r6, 0
adds r2, r4, 0
- bl sub_8011CD8
+ bl WriteSaveSector
adds r5, r0, 0
adds r0, r7, 0
adds r1, r6, 0
adds r2, r4, 0
- bl sub_8011CD8
+ bl WriteSaveSector
adds r4, r0, 0
adds r0, r6, 0
bl MemoryFree
@@ -760,7 +660,7 @@ _080121CE:
thumb_func_start sub_80121D4
sub_80121D4:
push {lr}
- bl sub_8011CD8
+ bl WriteSaveSector
pop {r1}
bx r1
thumb_func_end sub_80121D4
@@ -796,7 +696,7 @@ sub_80121E0:
mov r0, sp
adds r1, r4, 0
adds r2, r6, 0
- bl sub_8011CD8
+ bl WriteSaveSector
adds r5, r0, 0
adds r0, r4, 0
bl MemoryFree
@@ -1792,22 +1692,4 @@ _080129F2:
bx r1
thumb_func_end sub_80128B0
- thumb_func_start sub_80129FC
-sub_80129FC:
- push {r4,lr}
- ldr r4, _08012A14
- ldr r0, [r4]
- cmp r0, 0
- beq _08012A0E
- bl MemoryFree
- movs r0, 0
- str r0, [r4]
-_08012A0E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08012A14: .4byte gUnknown_203B194
- thumb_func_end sub_80129FC
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/sprite.s b/asm/sprite.s
index 5081f37..284526c 100644
--- a/asm/sprite.s
+++ b/asm/sprite.s
@@ -5,19 +5,8 @@
.text
- thumb_func_start InitSprites
-InitSprites:
- push {lr}
- movs r0, 0x1
- bl sub_8004D8C
- movs r0, 0
- bl SetSavingIconCoords
- pop {r0}
- bx r0
- thumb_func_end InitSprites
-
- thumb_func_start sub_8004D8C
-sub_8004D8C:
+ thumb_func_start ResetSprites
+ResetSprites:
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -131,8 +120,8 @@ _08004E50:
pop {r0}
bx r0
.align 2, 0
-_08004E68: .4byte gUnknown_20266A8
-_08004E6C: .4byte gUnknown_2026E30
+_08004E68: .4byte gSpriteCount
+_08004E6C: .4byte gCharMemCursor
_08004E70: .4byte 0x06010000
_08004E74: .4byte gUnknown_203B074
_08004E78: .4byte gUnknown_20266B0
@@ -140,7 +129,7 @@ _08004E7C: .4byte gUnknown_20256A0
_08004E80: .4byte gUnknown_20262A8
_08004E84: .4byte gUnknown_2025EA8
_08004E88: .4byte 0x00000804
- thumb_func_end sub_8004D8C
+ thumb_func_end ResetSprites
thumb_func_start sub_8004E8C
sub_8004E8C:
@@ -241,7 +230,7 @@ _08004F20:
strh r0, [r1, 0x2]
b _08004F86
.align 2, 0
-_08004F40: .4byte gUnknown_20266A8
+_08004F40: .4byte gSpriteCount
_08004F44: .4byte 0x0000fcff
_08004F48: .4byte 0x0000f1ff
_08004F4C: .4byte 0x000003ff
@@ -459,7 +448,7 @@ _080050D8:
strh r0, [r2, 0x2]
b _08005128
.align 2, 0
-_080050F4: .4byte gUnknown_20266A8
+_080050F4: .4byte gSpriteCount
_080050F8: .4byte gUnknown_20262A8
_080050FC:
ldrh r1, [r6]
@@ -524,7 +513,7 @@ _08005168:
bx r0
.align 2, 0
_08005174: .4byte gUnknown_2025EA8
-_08005178: .4byte gUnknown_20266A8
+_08005178: .4byte gSpriteCount
_0800517C: .4byte gUnknown_20256A0
thumb_func_end AddSprite
@@ -739,8 +728,8 @@ _080052F2:
bx r0
.align 2, 0
_080052F8: .4byte gUnknown_203B074
-_080052FC: .4byte gUnknown_2026E30
-_08005300: .4byte gUnknown_2026E30
+_080052FC: .4byte gCharMemCursor
+_08005300: .4byte gCharMemCursor
thumb_func_end sub_80052BC
thumb_func_start sub_8005304
@@ -801,7 +790,7 @@ sub_800533C:
str r0, [r1]
b _0800538E
.align 2, 0
-_08005368: .4byte gUnknown_2026E30
+_08005368: .4byte gCharMemCursor
_0800536C: .4byte 0x06010000
_08005370:
cmp r6, 0
diff --git a/asm/text.s b/asm/text.s
index a8e6dc5..bbf990b 100644
--- a/asm/text.s
+++ b/asm/text.s
@@ -5,386 +5,6 @@
.text
- thumb_func_start sub_8006218
-sub_8006218:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _080062F4
- movs r0, 0
- str r0, [r1]
- ldr r0, _080062F8
- ldr r5, _080062FC
- adds r1, r5, 0
- bl OpenFileAndGetFileDataPtr
- ldr r4, _08006300
- str r0, [r4]
- ldr r0, _08006304
- adds r1, r5, 0
- bl OpenFileAndGetFileDataPtr
- str r0, [r4, 0x4]
- ldr r2, _08006308
- ldr r1, [r4]
- ldr r1, [r1, 0x4]
- str r1, [r2]
- ldr r0, [r0, 0x4]
- str r0, [r2, 0x4]
- ldr r1, _0800630C
- movs r0, 0xB
- str r0, [r1]
- movs r0, 0xC
- str r0, [r1, 0x4]
- ldr r0, _08006310
- movs r4, 0
- movs r3, 0
- adds r2, r0, 0
- adds r2, 0x46
- adds r0, 0x4
- movs r1, 0x3
-_08006264:
- strh r3, [r0]
- strh r3, [r0, 0x4]
- strb r4, [r2]
- adds r2, 0x48
- adds r0, 0x48
- subs r1, 0x1
- cmp r1, 0
- bge _08006264
- ldr r1, _08006314
- movs r0, 0
- strh r0, [r1]
- movs r3, 0
- ldr r0, _08006318
- mov r9, r0
- ldr r1, _0800631C
- mov r10, r1
- ldr r7, _08006320
- ldr r2, _08006324
- mov r8, r2
- movs r0, 0x80
- lsls r0, 4
- adds r6, r7, r0
- ldr r4, _08006328
- movs r5, 0
- mov r12, r6
-_08006296:
- lsls r0, r3, 6
- adds r2, r0, r7
- mov r1, r8
- strh r1, [r2]
- adds r1, r0, r6
- strh r4, [r1]
- adds r3, 0x1
- add r0, r12
- adds r0, 0x2
- adds r2, 0x2
- movs r1, 0x1E
-_080062AC:
- strh r5, [r2]
- strh r4, [r0]
- adds r0, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _080062AC
- cmp r3, 0x13
- ble _08006296
- movs r1, 0
- movs r0, 0x1
- mov r2, r9
- strb r0, [r2]
- ldr r0, _0800632C
- mov r2, r10
- str r0, [r2]
- ldr r0, _08006330
- str r1, [r0]
- ldr r2, _08006334
- strb r1, [r2]
- movs r0, 0x1
- ldr r1, _08006338
- str r0, [r1]
- movs r0, 0x14
- ldr r2, _0800633C
- str r0, [r2]
- movs r0, 0
- bl xxx_update_some_bg_tiles
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080062F4: .4byte gUnknown_20274AC
-_080062F8: .4byte gUnknown_80B87B4
-_080062FC: .4byte gUnknown_8300500
-_08006300: .4byte gUnknown_202AFB4
-_08006304: .4byte gUnknown_80B87BC
-_08006308: .4byte gUnknown_2027490
-_0800630C: .4byte gUnknown_202B028
-_08006310: .4byte gUnknown_2027370
-_08006314: .4byte gUnknown_2027498
-_08006318: .4byte gUnknown_202B034
-_0800631C: .4byte gUnknown_202B030
-_08006320: .4byte gUnknown_202B038
-_08006324: .4byte 0x0000f279
-_08006328: .4byte 0x0000f27a
-_0800632C: .4byte 0x88888888
-_08006330: .4byte gUnknown_203B078
-_08006334: .4byte gUnknown_20274A5
-_08006338: .4byte gUnknown_202B020
-_0800633C: .4byte gUnknown_202B024
- thumb_func_end sub_8006218
-
- thumb_func_start xxx_update_some_bg_tiles
-xxx_update_some_bg_tiles:
- push {r4,r5,lr}
- adds r1, r0, 0
- ldr r0, _08006360
- ldr r5, [r0]
- ldr r4, _08006364
- str r1, [r0]
- cmp r1, 0
- beq _08006354
- cmp r1, 0x2
- bne _0800636C
-_08006354:
- movs r0, 0x2
- bl sub_800CDA8
- ldr r2, _08006368
- b _08006374
- .align 2, 0
-_08006360: .4byte gUnknown_20274B0
-_08006364: .4byte 0x06004f40
-_08006368: .4byte gUnknown_80B87C4
-_0800636C:
- movs r0, 0x1
- bl sub_800CDA8
- ldr r2, _080063A4
-_08006374:
- ldr r1, _080063A8
- ldr r0, _080063AC
- str r0, [r1]
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldr r0, [r2]
- str r0, [r4]
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080063A4: .4byte gUnknown_80B87E4
-_080063A8: .4byte gUnknown_202B030
-_080063AC: .4byte 0x88888888
- thumb_func_end xxx_update_some_bg_tiles
-
- thumb_func_start sub_80063B0
-sub_80063B0:
- ldr r0, _080063B8
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_080063B8: .4byte gUnknown_20274B0
- thumb_func_end sub_80063B0
-
- thumb_func_start sub_80063BC
-sub_80063BC:
- ldr r1, _080063C8
- ldrb r2, [r1]
- strb r0, [r1]
- adds r0, r2, 0
- bx lr
- .align 2, 0
-_080063C8: .4byte gUnknown_202B034
- thumb_func_end sub_80063BC
-
- thumb_func_start sub_80063CC
-sub_80063CC:
- ldr r1, _080063D4
- str r0, [r1]
- bx lr
- .align 2, 0
-_080063D4: .4byte gUnknown_20274AC
- thumb_func_end sub_80063CC
-
- thumb_func_start sub_80063D8
-sub_80063D8:
- push {lr}
- adds r1, r0, 0
- cmp r1, 0
- bne _080063F0
- ldr r0, _080063E8
- ldr r0, [r0]
- ldr r2, _080063EC
- b _08006410
- .align 2, 0
-_080063E8: .4byte gUnknown_20274B0
-_080063EC: .4byte 0x88888888
-_080063F0:
- movs r0, 0xF
- ands r0, r1
- lsls r2, r0, 4
- orrs r2, r0
- lsls r1, r0, 8
- orrs r2, r1
- lsls r1, r0, 12
- orrs r2, r1
- lsls r1, r0, 16
- orrs r2, r1
- lsls r1, r0, 20
- orrs r2, r1
- lsls r1, r0, 24
- orrs r2, r1
- lsls r0, 28
- orrs r2, r0
-_08006410:
- ldr r0, _08006418
- str r2, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08006418: .4byte gUnknown_202B030
- thumb_func_end sub_80063D8
-
- thumb_func_start sub_800641C
-sub_800641C:
- push {lr}
- sub sp, 0x4
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- str r3, [sp]
- mov r3, sp
- bl sub_8006438
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_800641C
-
- thumb_func_start sub_8006438
-sub_8006438:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- adds r4, r0, 0
- mov r8, r3
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- mov r9, r0
- cmp r4, 0
- bne _0800645C
- ldr r4, _080064F0
-_0800645C:
- cmp r2, 0
- beq _08006464
- bl sub_8009388
-_08006464:
- bl sub_800898C
- movs r6, 0
- adds r5, r4, 0
- adds r5, 0xC
- ldr r1, _080064F4
- str r1, [sp, 0x18]
-_08006472:
- ldr r0, [sp, 0x18]
- adds r1, r4, 0
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080064C4
- ldr r1, _080064F8
- lsls r0, r6, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp]
- str r4, [sp, 0x4]
- mov r2, r10
- str r2, [sp, 0x8]
- mov r3, r9
- str r3, [sp, 0xC]
- mov r7, r8
- str r7, [sp, 0x10]
- movs r0, 0
- str r0, [sp, 0x14]
- ldr r0, _080064FC
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _08006500
- ldr r3, _08006504
- bl sub_8006554
- adds r0, r4, 0
- mov r1, r8
- bl sub_80089AC
- movs r0, 0
- ldrsh r1, [r5, r0]
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- muls r0, r1
- add r9, r0
-_080064C4:
- adds r5, 0x18
- adds r4, 0x18
- ldr r3, [sp, 0x18]
- adds r3, 0x18
- str r3, [sp, 0x18]
- adds r6, 0x1
- cmp r6, 0x3
- ble _08006472
- ldr r2, _08006508
- ldr r0, _0800650C
- ldr r1, _08006510
- str r0, [r2]
- movs r0, 0x1
- strb r0, [r1]
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080064F0: .4byte gUnknown_80B857C
-_080064F4: .4byte gUnknown_202AFC0
-_080064F8: .4byte gUnknown_80B8804
-_080064FC: .4byte gUnknown_2027370
-_08006500: .4byte gUnknown_20274B4
-_08006504: .4byte gUnknown_202B038
-_08006508: .4byte gUnknown_203B078
-_0800650C: .4byte gUnknown_3000E94
-_08006510: .4byte gUnknown_20274A5
- thumb_func_end sub_8006438
-
thumb_func_start nullsub_152
nullsub_152:
bx lr
@@ -4848,7 +4468,7 @@ sub_8008584:
adds r1, r5, r1
b _08008624
.align 2, 0
-_080085C4: .4byte gUnknown_2027490
+_080085C4: .4byte gKanji
_080085C8: .4byte gUnknown_20274AC
_080085CC: .4byte 0xffff0800
_080085D0: .4byte 0x000007fe
diff --git a/asmdiff.sh b/asmdiff.sh
new file mode 100644
index 0000000..a4afe79
--- /dev/null
+++ b/asmdiff.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb"
+OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))"
+$OBJDUMP $OPTIONS baserom.gba > baserom.dump
+$OBJDUMP $OPTIONS pmd_red.gba > pmd_red.dump
+diff -u baserom.dump pmd_red.dump | less \ No newline at end of file
diff --git a/build_tools.sh b/build_tools.sh
new file mode 100755
index 0000000..d9eebf0
--- /dev/null
+++ b/build_tools.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+make -C tools/gbagfx CXX=${1:-g++}
+make -C tools/scaninc CXX=${1:-g++}
+make -C tools/preproc CXX=${1:-g++}
+make -C tools/bin2c CXX=${1:-g++}
+make -C tools/rsfont CXX=${1:-g++}
+make -C tools/aif2pcm CXX=${1:-g++}
+make -C tools/ramscrgen CXX=${1:-g++}
+make -C tools/gbafix CXX=${1:-g++}
+make -C tools/mid2agb CXX=${1:-g++}
diff --git a/charmap.txt b/charmap.txt
new file mode 100644
index 0000000..e7ea662
--- /dev/null
+++ b/charmap.txt
@@ -0,0 +1,217 @@
+' ' = 20
+'!' = 21
+'"' = 22
+'#' = 23
+'$' = 24
+'%' = 25
+'&' = 26
+'\'' = 27
+'(' = 28
+')' = 29
+'*' = 2A
+'+' = 2B
+',' = 2C
+'-' = 2D
+'.' = 2E
+'/' = 2F
+'0' = 30
+'1' = 31
+'2' = 32
+'3' = 33
+'4' = 34
+'5' = 35
+'6' = 36
+'7' = 37
+'8' = 38
+'9' = 39
+':' = 3A
+';' = 3B
+'<' = 3C
+'=' = 3D
+'>' = 3E
+'?' = 3F
+'@' = 40
+'A' = 41
+'B' = 42
+'C' = 43
+'D' = 44
+'E' = 45
+'F' = 46
+'G' = 47
+'H' = 48
+'I' = 49
+'J' = 4A
+'K' = 4B
+'L' = 4C
+'M' = 4D
+'N' = 4E
+'O' = 4F
+'P' = 50
+'Q' = 51
+'R' = 52
+'S' = 53
+'T' = 54
+'U' = 55
+'V' = 56
+'W' = 57
+'X' = 58
+'Y' = 59
+'Z' = 5A
+'[' = 5B
+@'\\' = 5C
+']' = 5D
+'^' = 5E
+'_' = 5F
+'`' = 60
+'a' = 61
+'b' = 62
+'c' = 63
+'d' = 64
+'e' = 65
+'f' = 66
+'g' = 67
+'h' = 68
+'i' = 69
+'j' = 6A
+'k' = 6B
+'l' = 6C
+'m' = 6D
+'n' = 6E
+'o' = 6F
+'p' = 70
+'q' = 71
+'r' = 72
+'s' = 73
+'t' = 74
+'u' = 75
+'v' = 76
+'w' = 77
+'x' = 78
+'y' = 79
+'z' = 7A
+'{' = 7B
+'|' = 7C
+'}' = 7D
+'~' = 7E
+'€' = 80
+'⋯' = 85
+'†' = 86
+'ˆ' = 88
+'‰' = 89
+'Š' = 8A
+'‹' = 8B
+'Œ' = 8C
+'Ž' = 8E
+'•' = 8F
+'‘' = 91
+'’' = 92
+'“' = 93
+'”' = 94
+'™' = 99
+'š' = 9A
+'›' = 9B
+'œ' = 9C
+'ž' = 9E
+'Ÿ' = 9F
+'¡' = A1
+'¢' = A2
+'£' = A3
+'¤' = A4
+'¥' = A5
+'¦' = A6
+'§' = A7
+'¨' = A8
+'©' = A9
+'ª' = AA
+'«' = AB
+'¬' = AC
+'—' = AD
+'®' = AE
+'¯' = AF
+'°' = B0
+'±' = B1
+'²' = B2
+'³' = B3
+'´' = B4
+'µ' = B5
+'¶' = B6
+'„' = B7
+'‚' = B8
+'¹' = B9
+'⁰' = BA
+'»' = BB
+'←' = BC
+'♂' = BD
+'♀' = BE
+'¿' = BF
+'À' = C0
+'Á' = C1
+'Â' = C2
+'Ã' = C3
+'Ä' = C4
+'Å' = C5
+'Æ' = C6
+'Ç' = C7
+'È' = C8
+'É' = C9
+'Ê' = CA
+'Ë' = CB
+'Ì' = CC
+'Í' = CD
+'Î' = CE
+'Ï' = CF
+'Ð' = D0
+'Ñ' = D1
+'Ò' = D2
+'Ó' = D3
+'Ô' = D4
+'Õ' = D5
+'Ö' = D6
+'×' = D7
+'Ø' = D8
+'Ù' = D9
+'Ú' = DA
+'Û' = DB
+'Ü' = DC
+'Ý' = DD
+'Þ' = DE
+'ß' = DF
+'à' = E0
+'á' = E1
+'â' = E2
+'ã' = E3
+'ä' = E4
+'å' = E5
+'æ' = E6
+'ç' = E7
+'è' = E8
+'é' = E9
+'ê' = EA
+'ë' = EB
+'ì' = EC
+'í' = ED
+'î' = EE
+'ï' = EF
+'ð' = F0
+'ñ' = F1
+'ò' = F2
+'ó' = F3
+'ô' = F4
+'õ' = F5
+'ö' = F6
+'÷' = F7
+'ø' = F8
+'ù' = F9
+'ú' = FA
+'û' = FB
+'ü' = FC
+'ý' = FD
+'þ' = FE
+'ÿ' = FF
+
+POKE = 83 BF 83 C4
+
+A_BUTTON = 87 50
+B_BUTTON = 87 51
+
+'\n' = 0A \ No newline at end of file
diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc
new file mode 100644
index 0000000..62ca5bb
--- /dev/null
+++ b/constants/m4a_constants.inc
@@ -0,0 +1,199 @@
+ .equiv ID_NUMBER, 0x68736d53
+
+ .equiv PCM_DMA_BUF_SIZE, 1584
+
+ .equiv TONEDATA_TYPE_CGB, 0x07
+ .equiv TONEDATA_TYPE_FIX, 0x08
+ .equiv TONEDATA_TYPE_SPL, 0x40 @ key split
+ .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm
+
+ .macro struct_begin
+ .struct 0
+ .endm
+
+ .macro struct_field name, size
+\name:
+ .struct \name + \size
+ .endm
+
+ struct_begin
+ struct_field o_SoundInfo_ident, 4
+ struct_field o_SoundInfo_pcmDmaCounter, 1
+ struct_field o_SoundInfo_reverb, 1
+ struct_field o_SoundInfo_maxChans, 1
+ struct_field o_SoundInfo_masterVolume, 1
+ struct_field o_SoundInfo_freq, 1
+ struct_field o_SoundInfo_mode, 1
+ struct_field o_SoundInfo_c15, 1
+ struct_field o_SoundInfo_pcmDmaPeriod, 1
+ struct_field o_SoundInfo_maxLines, 1
+ struct_field o_SoundInfo_gap, 3
+ struct_field o_SoundInfo_pcmSamplesPerVBlank, 4
+ struct_field o_SoundInfo_pcmFreq, 4
+ struct_field o_SoundInfo_divFreq, 4
+ struct_field o_SoundInfo_cgbChans, 4
+ struct_field o_SoundInfo_func, 4
+ struct_field o_SoundInfo_intp, 4
+ struct_field o_SoundInfo_CgbSound, 4
+ struct_field o_SoundInfo_CgbOscOff, 4
+ struct_field o_SoundInfo_MidiKeyToCgbFreq, 4
+ struct_field o_SoundInfo_MPlayJumpTable, 4
+ struct_field o_SoundInfo_plynote, 4
+ struct_field o_SoundInfo_ExtVolPit, 4
+ struct_field o_SoundInfo_gap2, 16
+ struct_field o_SoundInfo_chans, 768
+ struct_field o_SoundInfo_pcmBuffer, PCM_DMA_BUF_SIZE * 2
+ struct_field SoundInfo_size, 0
+
+ struct_begin
+ struct_field o_SoundChannel_status, 1
+ struct_field o_SoundChannel_type, 1
+ struct_field o_SoundChannel_rightVolume, 1
+ struct_field o_SoundChannel_leftVolume, 1
+ struct_field o_SoundChannel_attack, 1
+ struct_field o_SoundChannel_decay, 1
+ struct_field o_SoundChannel_sustain, 1
+ struct_field o_SoundChannel_release, 1
+ struct_field o_SoundChannel_ky, 1
+ struct_field o_SoundChannel_ev, 1
+ struct_field o_SoundChannel_er, 1
+ struct_field o_SoundChannel_el, 1
+ struct_field o_SoundChannel_iev, 1
+ struct_field o_SoundChannel_iel, 1
+ struct_field o_SoundChannel_d1, 1
+ struct_field o_SoundChannel_d2, 1
+ struct_field o_SoundChannel_gt, 1
+ struct_field o_SoundChannel_mk, 1
+ struct_field o_SoundChannel_ve, 1
+ struct_field o_SoundChannel_pr, 1
+ struct_field o_SoundChannel_rp, 1
+ struct_field o_SoundChannel_d3, 3
+ struct_field o_SoundChannel_ct, 4
+ struct_field o_SoundChannel_fw, 4
+ struct_field o_SoundChannel_freq, 4
+ struct_field o_SoundChannel_wav, 4
+ struct_field o_SoundChannel_cp, 4
+ struct_field o_SoundChannel_track, 4
+ struct_field o_SoundChannel_pp, 4
+ struct_field o_SoundChannel_np, 4
+ struct_field o_SoundChannel_d4, 4
+ struct_field o_SoundChannel_xpi, 2
+ struct_field o_SoundChannel_xpc, 2
+ struct_field SoundChannel_size, 0
+
+ struct_begin
+ struct_field o_MusicPlayerTrack_flags, 1
+ struct_field o_MusicPlayerTrack_wait, 1
+ struct_field o_MusicPlayerTrack_patternLevel, 1
+ struct_field o_MusicPlayerTrack_repN, 1
+ struct_field o_MusicPlayerTrack_gateTime, 1
+ struct_field o_MusicPlayerTrack_key, 1
+ struct_field o_MusicPlayerTrack_velocity, 1
+ struct_field o_MusicPlayerTrack_runningStatus, 1
+ struct_field o_MusicPlayerTrack_keyM, 1
+ struct_field o_MusicPlayerTrack_pitM, 1
+ struct_field o_MusicPlayerTrack_keyShift, 1
+ struct_field o_MusicPlayerTrack_keyShiftX, 1
+ struct_field o_MusicPlayerTrack_tune, 1
+ struct_field o_MusicPlayerTrack_pitX, 1
+ struct_field o_MusicPlayerTrack_bend, 1
+ struct_field o_MusicPlayerTrack_bendRange, 1
+ struct_field o_MusicPlayerTrack_volMR, 1
+ struct_field o_MusicPlayerTrack_volML, 1
+ struct_field o_MusicPlayerTrack_vol, 1
+ struct_field o_MusicPlayerTrack_volX, 1
+ struct_field o_MusicPlayerTrack_pan, 1
+ struct_field o_MusicPlayerTrack_panX, 1
+ struct_field o_MusicPlayerTrack_modM, 1
+ struct_field o_MusicPlayerTrack_mod, 1
+ struct_field o_MusicPlayerTrack_modT, 1
+ struct_field o_MusicPlayerTrack_lfoSpeed, 1
+ struct_field o_MusicPlayerTrack_lfoSpeedC, 1
+ struct_field o_MusicPlayerTrack_lfoDelay, 1
+ struct_field o_MusicPlayerTrack_lfoDelayC, 1
+ struct_field o_MusicPlayerTrack_priority, 1
+ struct_field o_MusicPlayerTrack_echoVolume, 1
+ struct_field o_MusicPlayerTrack_echoLength, 1
+ struct_field o_MusicPlayerTrack_chan, 4
+ struct_field o_MusicPlayerTrack_ToneData_type, 1
+ struct_field o_MusicPlayerTrack_ToneData_key, 1
+ struct_field o_MusicPlayerTrack_ToneData_length, 1
+ struct_field o_MusicPlayerTrack_ToneData_pan_sweep, 1
+ struct_field o_MusicPlayerTrack_ToneData_wav, 4
+ struct_field o_MusicPlayerTrack_ToneData_attack, 1
+ struct_field o_MusicPlayerTrack_ToneData_decay, 1
+ struct_field o_MusicPlayerTrack_ToneData_sustain, 1
+ struct_field o_MusicPlayerTrack_ToneData_release, 1
+ struct_field o_MusicPlayerTrack_gap, 10
+ struct_field o_MusicPlayerTrack_unk_3A, 2
+ struct_field o_MusicPlayerTrack_unk_3C, 4
+ struct_field o_MusicPlayerTrack_cmdPtr, 4
+ struct_field o_MusicPlayerTrack_patternStack, 12
+ struct_field MusicPlayerTrack_size, 0
+
+ .equiv o_MusicPlayerTrack_ToneData_keySplitTable, o_MusicPlayerTrack_ToneData_attack
+
+ struct_begin
+ struct_field o_MusicPlayerInfo_songHeader, 4
+ struct_field o_MusicPlayerInfo_status, 4
+ struct_field o_MusicPlayerInfo_trackCount, 1
+ struct_field o_MusicPlayerInfo_priority, 1
+ struct_field o_MusicPlayerInfo_cmd, 1
+ struct_field o_MusicPlayerInfo_unk_B, 1
+ struct_field o_MusicPlayerInfo_clock, 4
+ struct_field o_MusicPlayerInfo_gap, 8
+ struct_field o_MusicPlayerInfo_memAccArea, 4
+ struct_field o_MusicPlayerInfo_tempoD, 2
+ struct_field o_MusicPlayerInfo_tempoU, 2
+ struct_field o_MusicPlayerInfo_tempoI, 2
+ struct_field o_MusicPlayerInfo_tempoC, 2
+ struct_field o_MusicPlayerInfo_fadeOI, 2
+ struct_field o_MusicPlayerInfo_fadeOC, 2
+ struct_field o_MusicPlayerInfo_fadeOV, 2
+ struct_field o_MusicPlayerInfo_padding, 2
+ struct_field o_MusicPlayerInfo_tracks, 4
+ struct_field o_MusicPlayerInfo_tone, 4
+ struct_field o_MusicPlayerInfo_ident, 4
+ struct_field o_MusicPlayerInfo_func, 4
+ struct_field o_MusicPlayerInfo_intp, 4
+ struct_field MusicPlayerInfo_size, 0
+
+ struct_begin
+ struct_field o_CgbChannel_sf, 1
+ struct_field o_CgbChannel_ty, 1
+ struct_field o_CgbChannel_rightVolume, 1
+ struct_field o_CgbChannel_leftVolume, 1
+ struct_field o_CgbChannel_at, 1
+ struct_field o_CgbChannel_de, 1
+ struct_field o_CgbChannel_su, 1
+ struct_field o_CgbChannel_re, 1
+ struct_field o_CgbChannel_ky, 1
+ struct_field o_CgbChannel_ev, 1
+ struct_field o_CgbChannel_eg, 1
+ struct_field o_CgbChannel_ec, 1
+ struct_field o_CgbChannel_echoVolume, 1
+ struct_field o_CgbChannel_echoLength, 1
+ struct_field o_CgbChannel_d1, 1
+ struct_field o_CgbChannel_d2, 1
+ struct_field o_CgbChannel_gt, 1
+ struct_field o_CgbChannel_mk, 1
+ struct_field o_CgbChannel_ve, 1
+ struct_field o_CgbChannel_pr, 1
+ struct_field o_CgbChannel_rp, 1
+ struct_field o_CgbChannel_d3, 3
+ struct_field o_CgbChannel_d5, 1
+ struct_field o_CgbChannel_sg, 1
+ struct_field o_CgbChannel_n4, 1
+ struct_field o_CgbChannel_pan, 1
+ struct_field o_CgbChannel_panMask, 1
+ struct_field o_CgbChannel_mo, 1
+ struct_field o_CgbChannel_le, 1
+ struct_field o_CgbChannel_sw, 1
+ struct_field o_CgbChannel_fr, 4
+ struct_field o_CgbChannel_wp, 4
+ struct_field o_CgbChannel_cp, 4
+ struct_field o_CgbChannel_tp, 4
+ struct_field o_CgbChannel_pp, 4
+ struct_field o_CgbChannel_np, 4
+ struct_field o_CgbChannel_d4, 8
+ struct_field CgbChannel_size, 0
diff --git a/data/data.s b/data/data.s
index 656302e..2486395 100644
--- a/data/data.s
+++ b/data/data.s
@@ -22,37 +22,7 @@ gUnknown_80B69F8: @ 80B69F8
gUnknown_80B6A28: @ 80B6A28
.incbin "baserom.gba", 0xB6A28, 0xC
- .global gUnknown_80B6A34
-gUnknown_80B6A34: @ 80B6A34
- .incbin "baserom.gba", 0xB6A34, 0x48
-
- .global gUnknown_80B6A7C
-gUnknown_80B6A7C: @ 80B6A7C
- .incbin "baserom.gba", 0xB6A7C, 0x24
-
- .global gUnknown_80B6AA0
-gUnknown_80B6AA0: @ 80B6AA0
- .incbin "baserom.gba", 0xB6AA0, 0x74
-
- .global gUnknown_80B6B14
-gUnknown_80B6B14: @ 80B6B14
- .incbin "baserom.gba", 0xB6B14, 0x64
-
- .global gUnknown_80B6B78
-gUnknown_80B6B78: @ 80B6B78
- .incbin "baserom.gba", 0xB6B78, 0x10
-
- .global gUnknown_80B6B88
-gUnknown_80B6B88: @ 80B6B88
- .incbin "baserom.gba", 0xB6B88, 0x54
-
- .global gUnknown_80B6BDC
-gUnknown_80B6BDC: @ 80B6BDC
- .incbin "baserom.gba", 0xB6BDC, 0xDC
-
- .global gUnknown_80B6CB8
-gUnknown_80B6CB8: @ 80B6CB8
- .incbin "baserom.gba", 0xB6CB8, 0xD8
+ .include "data/text/save.inc"
.global gUnknown_80B6D90
gUnknown_80B6D90: @ 80B6D90
diff --git a/data/data_80B9BB8.s b/data/data_80B9BB8.s
index 3b51eba..eb4932c 100644
--- a/data/data_80B9BB8.s
+++ b/data/data_80B9BB8.s
@@ -156,7 +156,9 @@ gUnknown_80D40FC: @ 80D40FC
.global gUnknown_80D4104
gUnknown_80D4104: @ 80D4104
- .incbin "baserom.gba", 0xD4104, 0x1C
+ .string "Where would you like to go?"
+ .byte 0
+ .align 2, 0
.global gUnknown_80D4120
gUnknown_80D4120: @ 80D4120
@@ -1286,85 +1288,7 @@ gUnknown_80DCA24: @ 80DCA24
gUnknown_80DCA2C: @ 80DCA2C
.incbin "baserom.gba", 0xDCA2C, 0x8
- .global gUnknown_80DCA34
-gUnknown_80DCA34: @ 80DCA34
- .incbin "baserom.gba", 0xDCA34, 0x84
-
- .global gUnknown_80DCAB8
-gUnknown_80DCAB8: @ 80DCAB8
- .incbin "baserom.gba", 0xDCAB8, 0x18
-
- .global gUnknown_80DCAD0
-gUnknown_80DCAD0: @ 80DCAD0
- .incbin "baserom.gba", 0xDCAD0, 0x28C
-
- .global gUnknown_80DCD5C
-gUnknown_80DCD5C: @ 80DCD5C
- .incbin "baserom.gba", 0xDCD5C, 0x34
-
- .global gUnknown_80DCD90
-gUnknown_80DCD90: @ 80DCD90
- .incbin "baserom.gba", 0xDCD90, 0x28
-
- .global gUnknown_80DCDB8
-gUnknown_80DCDB8: @ 80DCDB8
- .incbin "baserom.gba", 0xDCDB8, 0x24
-
- .global gUnknown_80DCDDC
-gUnknown_80DCDDC: @ 80DCDDC
- .incbin "baserom.gba", 0xDCDDC, 0x3C
-
- .global gUnknown_80DCE18
-gUnknown_80DCE18: @ 80DCE18
- .incbin "baserom.gba", 0xDCE18, 0x20
-
- .global gUnknown_80DCE38
-gUnknown_80DCE38: @ 80DCE38
- .incbin "baserom.gba", 0xDCE38, 0x30
-
- .global gUnknown_80DCE68
-gUnknown_80DCE68: @ 80DCE68
- .incbin "baserom.gba", 0xDCE68, 0x48
-
- .global gUnknown_80DCEB0
-gUnknown_80DCEB0: @ 80DCEB0
- .incbin "baserom.gba", 0xDCEB0, 0x2C
-
- .global gUnknown_80DCEDC
-gUnknown_80DCEDC: @ 80DCEDC
- .incbin "baserom.gba", 0xDCEDC, 0x68
-
- .global gUnknown_80DCF44
-gUnknown_80DCF44: @ 80DCF44
- .incbin "baserom.gba", 0xDCF44, 0x44
-
- .global gUnknown_80DCF88
-gUnknown_80DCF88: @ 80DCF88
- .incbin "baserom.gba", 0xDCF88, 0x24
-
- .global gUnknown_80DCFAC
-gUnknown_80DCFAC: @ 80DCFAC
- .incbin "baserom.gba", 0xDCFAC, 0x48
-
- .global gUnknown_80DCFF4
-gUnknown_80DCFF4: @ 80DCFF4
- .incbin "baserom.gba", 0xDCFF4, 0x60
-
- .global gUnknown_80DD054
-gUnknown_80DD054: @ 80DD054
- .incbin "baserom.gba", 0xDD054, 0x44
-
- .global gUnknown_80DD098
-gUnknown_80DD098: @ 80DD098
- .incbin "baserom.gba", 0xDD098, 0x48
-
- .global gUnknown_80DD0E0
-gUnknown_80DD0E0: @ 80DD0E0
- .incbin "baserom.gba", 0xDD0E0, 0x24
-
- .global gUnknown_80DD104
-gUnknown_80DD104: @ 80DD104
- .incbin "baserom.gba", 0xDD104, 0x44
+ .include "data/text/luminous_cave.inc"
.global gUnknown_80DD148
gUnknown_80DD148: @ 80DD148
@@ -1458,93 +1382,7 @@ gUnknown_80DD358: @ 80DD358
gUnknown_80DD370: @ 80DD370
.incbin "baserom.gba", 0xDD370, 0x18
- .global gUnknown_80DD388
-gUnknown_80DD388: @ 80DD388
- .incbin "baserom.gba", 0xDD388, 0x98
-
- .global gUnknown_80DD420
-gUnknown_80DD420: @ 80DD420
- .incbin "baserom.gba", 0xDD420, 0xA4
-
- .global gUnknown_80DD4C4
-gUnknown_80DD4C4: @ 80DD4C4
- .incbin "baserom.gba", 0xDD4C4, 0x30
-
- .global gUnknown_80DD4F4
-gUnknown_80DD4F4: @ 80DD4F4
- .incbin "baserom.gba", 0xDD4F4, 0x40
-
- .global gUnknown_80DD534
-gUnknown_80DD534: @ 80DD534
- .incbin "baserom.gba", 0xDD534, 0x30
-
- .global gUnknown_80DD564
-gUnknown_80DD564: @ 80DD564
- .incbin "baserom.gba", 0xDD564, 0x30
-
- .global gUnknown_80DD594
-gUnknown_80DD594: @ 80DD594
- .incbin "baserom.gba", 0xDD594, 0x24
-
- .global gUnknown_80DD5B8
-gUnknown_80DD5B8: @ 80DD5B8
- .incbin "baserom.gba", 0xDD5B8, 0x54
-
- .global gUnknown_80DD60C
-gUnknown_80DD60C: @ 80DD60C
- .incbin "baserom.gba", 0xDD60C, 0x30
-
- .global gUnknown_80DD63C
-gUnknown_80DD63C: @ 80DD63C
- .incbin "baserom.gba", 0xDD63C, 0x28
-
- .global gUnknown_80DD664
-gUnknown_80DD664: @ 80DD664
- .incbin "baserom.gba", 0xDD664, 0xC
-
- .global gUnknown_80DD670
-gUnknown_80DD670: @ 80DD670
- .incbin "baserom.gba", 0xDD670, 0xC
-
- .global gUnknown_80DD67C
-gUnknown_80DD67C: @ 80DD67C
- .incbin "baserom.gba", 0xDD67C, 0xC
-
- .global gUnknown_80DD688
-gUnknown_80DD688: @ 80DD688
- .incbin "baserom.gba", 0xDD688, 0xC
-
- .global gUnknown_80DD694
-gUnknown_80DD694: @ 80DD694
- .incbin "baserom.gba", 0xDD694, 0x8
-
- .global gUnknown_80DD69C
-gUnknown_80DD69C: @ 80DD69C
- .incbin "baserom.gba", 0xDD69C, 0x8
-
- .global gUnknown_80DD6A4
-gUnknown_80DD6A4: @ 80DD6A4
- .incbin "baserom.gba", 0xDD6A4, 0x10
-
- .global gUnknown_80DD6B4
-gUnknown_80DD6B4: @ 80DD6B4
- .incbin "baserom.gba", 0xDD6B4, 0x8
-
- .global gUnknown_80DD6BC
-gUnknown_80DD6BC: @ 80DD6BC
- .incbin "baserom.gba", 0xDD6BC, 0x8
-
- .global gUnknown_80DD6C4
-gUnknown_80DD6C4: @ 80DD6C4
- .incbin "baserom.gba", 0xDD6C4, 0xC
-
- .global gUnknown_80DD6D0
-gUnknown_80DD6D0: @ 80DD6D0
- .incbin "baserom.gba", 0xDD6D0, 0x10
-
- .global gUnknown_80DD6E0
-gUnknown_80DD6E0: @ 80DD6E0
- .incbin "baserom.gba", 0xDD6E0, 0xC
+ .include "data/text/party_menu.inc"
.global gUnknown_80DD6EC
gUnknown_80DD6EC: @ 80DD6EC
@@ -1662,218 +1500,8 @@ gUnknown_80DDB24: @ 80DDB24
gUnknown_80DDB60: @ 80DDB60
.incbin "baserom.gba", 0xDDB60, 0x48
- .global gUnknown_80DDBA8
-gUnknown_80DDBA8: @ 80DDBA8
- .incbin "baserom.gba", 0xDDBA8, 0x54
-
- .global gUnknown_80DDBFC
-gUnknown_80DDBFC: @ 80DDBFC
- .incbin "baserom.gba", 0xDDBFC, 0x34
-
- .global gUnknown_80DDC30
-gUnknown_80DDC30: @ 80DDC30
- .incbin "baserom.gba", 0xDDC30, 0x40
-
- .global gUnknown_80DDC70
-gUnknown_80DDC70: @ 80DDC70
- .incbin "baserom.gba", 0xDDC70, 0x4C
-
- .global gUnknown_80DDCBC
-gUnknown_80DDCBC: @ 80DDCBC
- .incbin "baserom.gba", 0xDDCBC, 0x70
-
- .global gUnknown_80DDD2C
-gUnknown_80DDD2C: @ 80DDD2C
- .incbin "baserom.gba", 0xDDD2C, 0x5C
-
- .global gUnknown_80DDD88
-gUnknown_80DDD88: @ 80DDD88
- .incbin "baserom.gba", 0xDDD88, 0x34
-
- .global gUnknown_80DDDBC
-gUnknown_80DDDBC: @ 80DDDBC
- .incbin "baserom.gba", 0xDDDBC, 0x1C
-
- .global gUnknown_80DDDD8
-gUnknown_80DDDD8: @ 80DDDD8
- .incbin "baserom.gba", 0xDDDD8, 0x48
-
- .global gUnknown_80DDE20
-gUnknown_80DDE20: @ 80DDE20
- .incbin "baserom.gba", 0xDDE20, 0x38
-
- .global gUnknown_80DDE58
-gUnknown_80DDE58: @ 80DDE58
- .incbin "baserom.gba", 0xDDE58, 0x68
-
- .global gUnknown_80DDEC0
-gUnknown_80DDEC0: @ 80DDEC0
- .incbin "baserom.gba", 0xDDEC0, 0x6C
-
- .global gUnknown_80DDF2C
-gUnknown_80DDF2C: @ 80DDF2C
- .incbin "baserom.gba", 0xDDF2C, 0x8C
-
- .global gUnknown_80DDFB8
-gUnknown_80DDFB8: @ 80DDFB8
- .incbin "baserom.gba", 0xDDFB8, 0x64
-
- .global gUnknown_80DE01C
-gUnknown_80DE01C: @ 80DE01C
- .incbin "baserom.gba", 0xDE01C, 0x50
-
- .global gUnknown_80DE06C
-gUnknown_80DE06C: @ 80DE06C
- .incbin "baserom.gba", 0xDE06C, 0x54
-
- .global gUnknown_80DE0C0
-gUnknown_80DE0C0: @ 80DE0C0
- .incbin "baserom.gba", 0xDE0C0, 0x64
-
- .global gUnknown_80DE124
-gUnknown_80DE124: @ 80DE124
- .incbin "baserom.gba", 0xDE124, 0x54
-
- .global gUnknown_80DE178
-gUnknown_80DE178: @ 80DE178
- .incbin "baserom.gba", 0xDE178, 0x3C
-
- .global gUnknown_80DE1B4
-gUnknown_80DE1B4: @ 80DE1B4
- .incbin "baserom.gba", 0xDE1B4, 0x30
-
- .global gUnknown_80DE1E4
-gUnknown_80DE1E4: @ 80DE1E4
- .incbin "baserom.gba", 0xDE1E4, 0x9C
-
- .global gUnknown_80DE280
-gUnknown_80DE280: @ 80DE280
- .incbin "baserom.gba", 0xDE280, 0x30
-
- .global gUnknown_80DE2B0
-gUnknown_80DE2B0: @ 80DE2B0
- .incbin "baserom.gba", 0xDE2B0, 0xB8
-
- .global gUnknown_80DE368
-gUnknown_80DE368: @ 80DE368
- .incbin "baserom.gba", 0xDE368, 0xC8
-
- .global gUnknown_80DE430
-gUnknown_80DE430: @ 80DE430
- .incbin "baserom.gba", 0xDE430, 0x5C
-
- .global gUnknown_80DE48C
-gUnknown_80DE48C: @ 80DE48C
- .incbin "baserom.gba", 0xDE48C, 0x2C
-
- .global gUnknown_80DE4B8
-gUnknown_80DE4B8: @ 80DE4B8
- .incbin "baserom.gba", 0xDE4B8, 0x38
-
- .global gUnknown_80DE4F0
-gUnknown_80DE4F0: @ 80DE4F0
- .incbin "baserom.gba", 0xDE4F0, 0x34
-
- .global gUnknown_80DE524
-gUnknown_80DE524: @ 80DE524
- .incbin "baserom.gba", 0xDE524, 0xF0
-
- .global gUnknown_80DE614
-gUnknown_80DE614: @ 80DE614
- .incbin "baserom.gba", 0xDE614, 0x34
-
- .global gUnknown_80DE648
-gUnknown_80DE648: @ 80DE648
- .incbin "baserom.gba", 0xDE648, 0x4C
-
- .global gUnknown_80DE694
-gUnknown_80DE694: @ 80DE694
- .incbin "baserom.gba", 0xDE694, 0x40
-
- .global gUnknown_80DE6D4
-gUnknown_80DE6D4: @ 80DE6D4
- .incbin "baserom.gba", 0xDE6D4, 0x80
-
- .global gUnknown_80DE754
-gUnknown_80DE754: @ 80DE754
- .incbin "baserom.gba", 0xDE754, 0x64
-
- .global gUnknown_80DE7B8
-gUnknown_80DE7B8: @ 80DE7B8
- .incbin "baserom.gba", 0xDE7B8, 0x30
-
- .global gUnknown_80DE7E8
-gUnknown_80DE7E8: @ 80DE7E8
- .incbin "baserom.gba", 0xDE7E8, 0x20
-
- .global gUnknown_80DE808
-gUnknown_80DE808: @ 80DE808
- .incbin "baserom.gba", 0xDE808, 0x28
-
- .global gUnknown_80DE830
-gUnknown_80DE830: @ 80DE830
- .incbin "baserom.gba", 0xDE830, 0x34
-
- .global gUnknown_80DE864
-gUnknown_80DE864: @ 80DE864
- .incbin "baserom.gba", 0xDE864, 0x50
-
- .global gUnknown_80DE8B4
-gUnknown_80DE8B4: @ 80DE8B4
- .incbin "baserom.gba", 0xDE8B4, 0x64
-
- .global gUnknown_80DE918
-gUnknown_80DE918: @ 80DE918
- .incbin "baserom.gba", 0xDE918, 0x24
-
- .global gUnknown_80DE93C
-gUnknown_80DE93C: @ 80DE93C
- .incbin "baserom.gba", 0xDE93C, 0x18
-
- .global gUnknown_80DE954
-gUnknown_80DE954: @ 80DE954
- .incbin "baserom.gba", 0xDE954, 0x38
-
- .global gUnknown_80DE98C
-gUnknown_80DE98C: @ 80DE98C
- .incbin "baserom.gba", 0xDE98C, 0x64
-
- .global gUnknown_80DE9F0
-gUnknown_80DE9F0: @ 80DE9F0
- .incbin "baserom.gba", 0xDE9F0, 0x68
-
- .global gUnknown_80DEA58
-gUnknown_80DEA58: @ 80DEA58
- .incbin "baserom.gba", 0xDEA58, 0x5C
-
- .global gUnknown_80DEAB4
-gUnknown_80DEAB4: @ 80DEAB4
- .incbin "baserom.gba", 0xDEAB4, 0x64
-
- .global gUnknown_80DEB18
-gUnknown_80DEB18: @ 80DEB18
- .incbin "baserom.gba", 0xDEB18, 0x3C
-
- .global gUnknown_80DEB54
-gUnknown_80DEB54: @ 80DEB54
- .incbin "baserom.gba", 0xDEB54, 0xAC
-
- .global gUnknown_80DEC00
-gUnknown_80DEC00: @ 80DEC00
- .incbin "baserom.gba", 0xDEC00, 0x70
-
- .global gUnknown_80DEC70
-gUnknown_80DEC70: @ 80DEC70
- .incbin "baserom.gba", 0xDEC70, 0x50
-
- .global gUnknown_80DECC0
-gUnknown_80DECC0: @ 80DECC0
- .incbin "baserom.gba", 0xDECC0, 0x3C
-
- .global gUnknown_80DECFC
-gUnknown_80DECFC: @ 80DECFC
- .incbin "baserom.gba", 0xDECFC, 0x48
-
+ .include "data/text/wonder_mail_1.inc"
+
.global gUnknown_80DED44
gUnknown_80DED44: @ 80DED44
.incbin "baserom.gba", 0xDED44, 0x4
@@ -1918,169 +1546,7 @@ gUnknown_80DEEBC: @ 80DEEBC
gUnknown_80DEEE4: @ 80DEEE4
.incbin "baserom.gba", 0xDEEE4, 0x20
- .global gUnknown_80DEF04
-gUnknown_80DEF04: @ 80DEF04
- .incbin "baserom.gba", 0xDEF04, 0x24
-
- .global gUnknown_80DEF28
-gUnknown_80DEF28: @ 80DEF28
- .incbin "baserom.gba", 0xDEF28, 0x58
-
- .global gUnknown_80DEF80
-gUnknown_80DEF80: @ 80DEF80
- .incbin "baserom.gba", 0xDEF80, 0x5C
-
- .global gUnknown_80DEFDC
-gUnknown_80DEFDC: @ 80DEFDC
- .incbin "baserom.gba", 0xDEFDC, 0x68
-
- .global gUnknown_80DF044
-gUnknown_80DF044: @ 80DF044
- .incbin "baserom.gba", 0xDF044, 0x5C
-
- .global gUnknown_80DF0A0
-gUnknown_80DF0A0: @ 80DF0A0
- .incbin "baserom.gba", 0xDF0A0, 0x40
-
- .global gUnknown_80DF0E0
-gUnknown_80DF0E0: @ 80DF0E0
- .incbin "baserom.gba", 0xDF0E0, 0x58
-
- .global gUnknown_80DF138
-gUnknown_80DF138: @ 80DF138
- .incbin "baserom.gba", 0xDF138, 0x5C
-
- .global gUnknown_80DF194
-gUnknown_80DF194: @ 80DF194
- .incbin "baserom.gba", 0xDF194, 0x2C
-
- .global gUnknown_80DF1C0
-gUnknown_80DF1C0: @ 80DF1C0
- .incbin "baserom.gba", 0xDF1C0, 0x48
-
- .global gUnknown_80DF208
-gUnknown_80DF208: @ 80DF208
- .incbin "baserom.gba", 0xDF208, 0x48
-
- .global gUnknown_80DF250
-gUnknown_80DF250: @ 80DF250
- .incbin "baserom.gba", 0xDF250, 0xB4
-
- .global gUnknown_80DF304
-gUnknown_80DF304: @ 80DF304
- .incbin "baserom.gba", 0xDF304, 0x2C
-
- .global gUnknown_80DF330
-gUnknown_80DF330: @ 80DF330
- .incbin "baserom.gba", 0xDF330, 0x50
-
- .global gUnknown_80DF380
-gUnknown_80DF380: @ 80DF380
- .incbin "baserom.gba", 0xDF380, 0x34
-
- .global gUnknown_80DF3B4
-gUnknown_80DF3B4: @ 80DF3B4
- .incbin "baserom.gba", 0xDF3B4, 0x64
-
- .global gUnknown_80DF418
-gUnknown_80DF418: @ 80DF418
- .incbin "baserom.gba", 0xDF418, 0x34
-
- .global gUnknown_80DF44C
-gUnknown_80DF44C: @ 80DF44C
- .incbin "baserom.gba", 0xDF44C, 0x20
-
- .global gUnknown_80DF46C
-gUnknown_80DF46C: @ 80DF46C
- .incbin "baserom.gba", 0xDF46C, 0x88
-
- .global gUnknown_80DF4F4
-gUnknown_80DF4F4: @ 80DF4F4
- .incbin "baserom.gba", 0xDF4F4, 0x50
-
- .global gUnknown_80DF544
-gUnknown_80DF544: @ 80DF544
- .incbin "baserom.gba", 0xDF544, 0x50
-
- .global gUnknown_80DF594
-gUnknown_80DF594: @ 80DF594
- .incbin "baserom.gba", 0xDF594, 0x50
-
- .global gUnknown_80DF5E4
-gUnknown_80DF5E4: @ 80DF5E4
- .incbin "baserom.gba", 0xDF5E4, 0x58
-
- .global gUnknown_80DF63C
-gUnknown_80DF63C: @ 80DF63C
- .incbin "baserom.gba", 0xDF63C, 0x58
-
- .global gUnknown_80DF694
-gUnknown_80DF694: @ 80DF694
- .incbin "baserom.gba", 0xDF694, 0x5C
-
- .global gUnknown_80DF6F0
-gUnknown_80DF6F0: @ 80DF6F0
- .incbin "baserom.gba", 0xDF6F0, 0x20
-
- .global gUnknown_80DF710
-gUnknown_80DF710: @ 80DF710
- .incbin "baserom.gba", 0xDF710, 0x2C
-
- .global gUnknown_80DF73C
-gUnknown_80DF73C: @ 80DF73C
- .incbin "baserom.gba", 0xDF73C, 0x40
-
- .global gUnknown_80DF77C
-gUnknown_80DF77C: @ 80DF77C
- .incbin "baserom.gba", 0xDF77C, 0x58
-
- .global gUnknown_80DF7D4
-gUnknown_80DF7D4: @ 80DF7D4
- .incbin "baserom.gba", 0xDF7D4, 0x9C
-
- .global gUnknown_80DF870
-gUnknown_80DF870: @ 80DF870
- .incbin "baserom.gba", 0xDF870, 0x44
-
- .global gUnknown_80DF8B4
-gUnknown_80DF8B4: @ 80DF8B4
- .incbin "baserom.gba", 0xDF8B4, 0x38
-
- .global gUnknown_80DF8EC
-gUnknown_80DF8EC: @ 80DF8EC
- .incbin "baserom.gba", 0xDF8EC, 0x3C
-
- .global gUnknown_80DF928
-gUnknown_80DF928: @ 80DF928
- .incbin "baserom.gba", 0xDF928, 0x24
-
- .global gUnknown_80DF94C
-gUnknown_80DF94C: @ 80DF94C
- .incbin "baserom.gba", 0xDF94C, 0x20
-
- .global gUnknown_80DF96C
-gUnknown_80DF96C: @ 80DF96C
- .incbin "baserom.gba", 0xDF96C, 0x38
-
- .global gUnknown_80DF9A4
-gUnknown_80DF9A4: @ 80DF9A4
- .incbin "baserom.gba", 0xDF9A4, 0x4C
-
- .global gUnknown_80DF9F0
-gUnknown_80DF9F0: @ 80DF9F0
- .incbin "baserom.gba", 0xDF9F0, 0x8
-
- .global gUnknown_80DF9F8
-gUnknown_80DF9F8: @ 80DF9F8
- .incbin "baserom.gba", 0xDF9F8, 0xB0
-
- .global gUnknown_80DFAA8
-gUnknown_80DFAA8: @ 80DFAA8
- .incbin "baserom.gba", 0xDFAA8, 0x6C
-
- .global gUnknown_80DFB14
-gUnknown_80DFB14: @ 80DFB14
- .incbin "baserom.gba", 0xDFB14, 0xBC
+ .include "data/text/wonder_mail_2.inc"
.global gUnknown_80DFBD0
gUnknown_80DFBD0: @ 80DFBD0
@@ -2194,73 +1660,13 @@ gUnknown_80DFE04: @ 80DFE04
gUnknown_80DFE1C: @ 80DFE1C
.incbin "baserom.gba", 0xDFE1C, 0x30
- .global gUnknown_80DFE4C
-gUnknown_80DFE4C: @ 80DFE4C
- .incbin "baserom.gba", 0xDFE4C, 0x50
-
- .global gUnknown_80DFE9C
-gUnknown_80DFE9C: @ 80DFE9C
- .incbin "baserom.gba", 0xDFE9C, 0x34
-
- .global gUnknown_80DFED0
-gUnknown_80DFED0: @ 80DFED0
- .incbin "baserom.gba", 0xDFED0, 0x5C
-
- .global gUnknown_80DFF2C
-gUnknown_80DFF2C: @ 80DFF2C
- .incbin "baserom.gba", 0xDFF2C, 0x78
-
- .global gUnknown_80DFFA4
-gUnknown_80DFFA4: @ 80DFFA4
- .incbin "baserom.gba", 0xDFFA4, 0x6C
-
- .global gUnknown_80E0010
-gUnknown_80E0010: @ 80E0010
- .incbin "baserom.gba", 0xE0010, 0x64
-
- .global gUnknown_80E0074
-gUnknown_80E0074: @ 80E0074
- .incbin "baserom.gba", 0xE0074, 0x20
-
- .global gUnknown_80E0094
-gUnknown_80E0094: @ 80E0094
- .incbin "baserom.gba", 0xE0094, 0x74
-
- .global gUnknown_80E0108
-gUnknown_80E0108: @ 80E0108
- .incbin "baserom.gba", 0xE0108, 0x44
-
- .global gUnknown_80E014C
-gUnknown_80E014C: @ 80E014C
- .incbin "baserom.gba", 0xE014C, 0xC
-
- .global gUnknown_80E0158
-gUnknown_80E0158: @ 80E0158
- .incbin "baserom.gba", 0xE0158, 0x14
+ .include "data/text/wonder_mail_3.inc"
.global gUnknown_80E016C
gUnknown_80E016C: @ 80E016C
.incbin "baserom.gba", 0xE016C, 0x18
- .global gUnknown_80E0184
-gUnknown_80E0184: @ 80E0184
- .incbin "baserom.gba", 0xE0184, 0x1C
-
- .global gUnknown_80E01A0
-gUnknown_80E01A0: @ 80E01A0
- .incbin "baserom.gba", 0xE01A0, 0x24
-
- .global gUnknown_80E01C4
-gUnknown_80E01C4: @ 80E01C4
- .incbin "baserom.gba", 0xE01C4, 0x2C
-
- .global gUnknown_80E01F0
-gUnknown_80E01F0: @ 80E01F0
- .incbin "baserom.gba", 0xE01F0, 0x28
-
- .global gUnknown_80E0218
-gUnknown_80E0218: @ 80E0218
- .incbin "baserom.gba", 0xE0218, 0x30
+ .include "data/text/wonder_mail_complete.inc"
.global gUnknown_80E0248
gUnknown_80E0248: @ 80E0248
@@ -2530,73 +1936,7 @@ gUnknown_80E0B3C: @ 80E0B3C
gUnknown_80E0BD4: @ 80E0BD4
.incbin "baserom.gba", 0xE0BD4, 0x78
- .global gUnknown_80E0C4C
-gUnknown_80E0C4C: @ 80E0C4C
- .incbin "baserom.gba", 0xE0C4C, 0x24
-
- .global gUnknown_80E0C70
-gUnknown_80E0C70: @ 80E0C70
- .incbin "baserom.gba", 0xE0C70, 0x160
-
- .global gUnknown_80E0DD0
-gUnknown_80E0DD0: @ 80E0DD0
- .incbin "baserom.gba", 0xE0DD0, 0x108
-
- .global gUnknown_80E0ED8
-gUnknown_80E0ED8: @ 80E0ED8
- .incbin "baserom.gba", 0xE0ED8, 0x1F0
-
- .global gUnknown_80E10C8
-gUnknown_80E10C8: @ 80E10C8
- .incbin "baserom.gba", 0xE10C8, 0x144
-
- .global gUnknown_80E120C
-gUnknown_80E120C: @ 80E120C
- .incbin "baserom.gba", 0xE120C, 0x160
-
- .global gUnknown_80E136C
-gUnknown_80E136C: @ 80E136C
- .incbin "baserom.gba", 0xE136C, 0xB4
-
- .global gUnknown_80E1420
-gUnknown_80E1420: @ 80E1420
- .incbin "baserom.gba", 0xE1420, 0x15C
-
- .global gUnknown_80E157C
-gUnknown_80E157C: @ 80E157C
- .incbin "baserom.gba", 0xE157C, 0x120
-
- .global gUnknown_80E169C
-gUnknown_80E169C: @ 80E169C
- .incbin "baserom.gba", 0xE169C, 0x12C
-
- .global gUnknown_80E17C8
-gUnknown_80E17C8: @ 80E17C8
- .incbin "baserom.gba", 0xE17C8, 0x74
-
- .global gUnknown_80E183C
-gUnknown_80E183C: @ 80E183C
- .incbin "baserom.gba", 0xE183C, 0x2C
-
- .global gUnknown_80E1868
-gUnknown_80E1868: @ 80E1868
- .incbin "baserom.gba", 0xE1868, 0x1C8
-
- .global gUnknown_80E1A30
-gUnknown_80E1A30: @ 80E1A30
- .incbin "baserom.gba", 0xE1A30, 0xA8
-
- .global gUnknown_80E1AD8
-gUnknown_80E1AD8: @ 80E1AD8
- .incbin "baserom.gba", 0xE1AD8, 0xB0
-
- .global gUnknown_80E1B88
-gUnknown_80E1B88: @ 80E1B88
- .incbin "baserom.gba", 0xE1B88, 0x1FC
-
- .global gUnknown_80E1D84
-gUnknown_80E1D84: @ 80E1D84
- .incbin "baserom.gba", 0xE1D84, 0x178
+ .include "data/text/wonder_mail_4.inc"
.global gUnknown_80E1EFC
gUnknown_80E1EFC: @ 80E1EFC
@@ -11966,42 +11306,3 @@ gUnknown_812F1F8: @ 812F1F8
gUnknown_813237C: @ 813237C
.incbin "baserom.gba", 0x13237C, 0x13D610
- .global gUnknown_826F98C
-gUnknown_826F98C: @ 826F98C
- .incbin "baserom.gba", 0x26F98C, 0x90
-
- .global gUnknown_826FA1C
-gUnknown_826FA1C: @ 826FA1C
- .incbin "baserom.gba", 0x26FA1C, 0xB4
-
- .global gUnknown_826FAD0
-gUnknown_826FAD0: @ 826FAD0
- .incbin "baserom.gba", 0x26FAD0, 0x30
-
- .global gUnknown_826FB00
-gUnknown_826FB00: @ 826FB00
- .incbin "baserom.gba", 0x26FB00, 0x18
-
- .global gUnknown_826FB18
-gUnknown_826FB18: @ 826FB18
- .incbin "baserom.gba", 0x26FB18, 0x84
-
- .global gUnknown_826FB9C
-gUnknown_826FB9C: @ 826FB9C
- .incbin "baserom.gba", 0x26FB9C, 0x18
-
- .global gUnknown_826FBB4
-gUnknown_826FBB4: @ 826FBB4
- .incbin "baserom.gba", 0x26FBB4, 0x3C
-
- .global gUnknown_826FBF0
-gUnknown_826FBF0: @ 826FBF0
- .incbin "baserom.gba", 0x26FBF0, 0x10
-
- .global gUnknown_826FC00
-gUnknown_826FC00: @ 826FC00
- .incbin "baserom.gba", 0x26FC00, 0x34
-
- .global gUnknown_826FC34
-gUnknown_826FC34: @ 826FC34
- .incbin "baserom.gba", 0x26FC34, 0x30
diff --git a/data/sound_data.s b/data/sound_data.s
index 043b59a..8ac86f7 100644
--- a/data/sound_data.s
+++ b/data/sound_data.s
@@ -1,9 +1,8 @@
.section .rodata
- .global gUnknown_9E8665C
-gUnknown_9E8665C: @ 9E8665C
- .incbin "baserom.gba", 0x1E8665C, 0x60
+ .include "include/macros/m4a.inc"
- .global gUnknown_9E866BC
-gUnknown_9E866BC: @ 9E866BC
- .incbin "baserom.gba", 0x1E866BC
+ .include "sound/music_player_table.inc"
+ .include "sound/song_table.inc"
+
+ .incbin "baserom.gba", 0x1E8841C
diff --git a/data/text/luminous_cave.inc b/data/text/luminous_cave.inc
new file mode 100644
index 0000000..92b9c2d
--- /dev/null
+++ b/data/text/luminous_cave.inc
@@ -0,0 +1,131 @@
+gUnknown_80DCA34:: @ 80DCA34
+ .string "#+...#WA voice emanates from somewhere...#P#+...Ye who seek awak"
+ .string "ening...#P#+This is Luminous Cave.#W\n"
+ .string "#+Do ye seek a new evolution?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCAB8:: @ 80DCAB8
+ .string "#+Do ye seek evolution?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCAD0:: @ 80DCAD0
+ .string "#+There are those among Pokémon\n"
+ .string "#+that can evolve.#P#+Such Pokémon can evolve at this very\n"
+ .string "#+spot if they satisfy certain conditions.#P#+Evolution brings about changes\n"
+ .string "#+in appearance and abilities.#P#+Not only that~2c some Pokémon even change\n"
+ .string "#+type and learn different moves.#P#+However...#W The requirements for\n"
+ .string "#+evolution differ among Pokémon.#P#+Some become ready for evolution\n"
+ .string "#+merely by leveling up.#P#+Still others may need special items\n"
+ .string "#+to attain evolution.#P#+Ye must also be aware of this:#P#+Once it has evolved~2c a Pokémon\n"
+ .string "#+can never regain its previous form.#P#+That is why ye must think carefully\n"
+ .string "#+before committing to evolution."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCD5C:: @ 80DCD5C
+ .string "#+Ye shall return if evolution\n"
+ .string "#+is what ye seek..."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCD90:: @ 80DCD90
+ .string "#+Will ye give an item for evolution?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCDB8:: @ 80DCDB8
+ .string "#+Will ye give yet another item?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCDDC:: @ 80DCDDC
+ .string "#+Alas~2c ye seem to lack what is needed\n"
+ .string "#+for evolution."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCE18:: @ 80DCE18
+ .string "#+Ye seem to have but one item."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCE38:: @ 80DCE38
+ .string "#+...Ye who seek awakening...\n"
+ .string "#+Let us begin."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCE68:: @ 80DCE68
+ .string "#+...#W"
+ .byte 0x24
+ .string "n0 is undergoing changes...#P#+"
+ .byte 0x24
+ .string "n0~27s appearance changed...#P"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCEB0:: @ 80DCEB0
+ .string "#+It evolved from #C4"
+ .byte 0x24
+ .string "m0#R\n"
+ .string "#+to #C6"
+ .byte 0x24
+ .string "m1#R!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCEDC:: @ 80DCEDC
+ .string "#+...#P#+One cannot evolve if one\n"
+ .string "#+is in the company of others.#P#+Come alone if ye wish to evolve."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCF44:: @ 80DCF44
+ .string "#+...#P#+Ye cannot evolve yet.#P#+Ye have not high enough a level."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCF88:: @ 80DCF88
+ .string "#+...#P#+Ye cannot evolve anymore."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCFAC:: @ 80DCFAC
+ .string "#+...#P#+Ye cannot evolve yet.#P#+Ye need your Friend Area to evolve."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DCFF4:: @ 80DCFF4
+ .string "#+...#P#+Ye cannot evolve yet.#P#+The Friend Area to which ye shall go\n"
+ .string "#+has no room for ye."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD054:: @ 80DD054
+ .string "#+...#P#+Ye cannot evolve yet.#P#+Ye seem to lack the IQ to evolve."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD098:: @ 80DD098
+ .string "#+#+...#P#+Ye cannot evolve yet.#P#+Ye seem to lack an item to evolve."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD0E0:: @ 80DD0E0
+ .string "#+#+...#P#+Ye cannot evolve yet. "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD104:: @ 80DD104
+ .string "#+Ye must give a name to\n"
+ .string "#+the evolved Pokémon. "
+ .byte 0
+ .align 2, 0
+
+ .asciz "pksdir0"
+ .align 2, 0
+
+ .asciz "pksdir0"
+ .align 2, 0
diff --git a/data/text/party_menu.inc b/data/text/party_menu.inc
new file mode 100644
index 0000000..eaaabd1
--- /dev/null
+++ b/data/text/party_menu.inc
@@ -0,0 +1,147 @@
+gUnknown_80DD388:: @ 80DD388
+ .string "You have chosen to say farewell\n"
+ .string "to this Pokémon.#PThe Pokémon will leave its Friend Area.\n"
+ .string "It will no longer be available for\n"
+ .string "adventures. Is that OK?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD420:: @ 80DD420
+ .string "If you say farewell to this\n"
+ .string "Pokémon~2c it will be gone forever.#PYou will never be able to get another one\n"
+ .string "like it to join your team.\n"
+ .string "Will you release it anyway?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD4C4:: @ 80DD4C4
+ .string "#+"
+ .byte 0x24
+ .string "m1 joined the\n"
+ .string "#+rescue team for adventures!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD4F4:: @ 80DD4F4
+ .string "#+"
+ .byte 0x24
+ .string "m1 left the team to remain\n"
+ .string "#+on standby in the Friend Area."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD534:: @ 80DD534
+ .string "#+"
+ .byte 0x24
+ .string "m1 became the leader\n"
+ .string "#+of the rescue team."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD564:: @ 80DD564
+ .string "#+"
+ .byte 0x24
+ .string "m1 left\n"
+ .string "#+the Friend Area.\n"
+ .string "#+Bye-bye~2c "
+ .byte 0x24
+ .string "m1!"
+ .byte 0
+gUnknown_80DD594:: @ 80DD594
+ .string "#+The #C4"
+ .byte 0x24
+ .string "i1#R was\n"
+ .string "#+handed over. "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD5B8:: @ 80DD5B8
+ .string "#+The #C4"
+ .byte 0x24
+ .string "i1#R was\n"
+ .string "#+handed over.#P#+The #C4"
+ .byte 0x24
+ .string "i0#R was\n"
+ .string "#+returned to the Toolbox."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD60C:: @ 80DD60C
+ .string "#+The #C4"
+ .byte 0x24
+ .string "i0#R was\n"
+ .string "#+returned to the Toolbox."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD63C:: @ 80DD63C
+ .string "#+The #C4"
+ .byte 0x24
+ .string "i0#R was\n"
+ .string "#+sent to storage."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD664:: @ 80DD664
+ .string "Stand By"
+ .byte 0
+ .align 2, 0
+gUnknown_80DD670:: @ 80DD670
+ .string "Make Leader"
+ .byte 0
+
+gUnknown_80DD67C:: @ 80DD67C
+ .string "Join Team"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD688:: @ 80DD688
+ .string "Give Gummi"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD694:: @ 80DD694
+ .string "Give"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD69C:: @ 80DD69C
+ .string "Take"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6A4:: @ 80DD6A4
+ .string "Say Farewell"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6B4:: @ 80DD6B4
+ .string "Summary"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6BC:: @ 80DD6BC
+ .string "Moves"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6C4:: @ 80DD6C4
+ .string "Check IQ"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6D0:: @ 80DD6D0
+ .string "Item: #C4"
+ .byte 0x24
+ .string "i0#R "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DD6E0:: @ 80DD6E0
+ .string "%s"
+ .byte 0
+ .align 2, 0
+
+ .string "pksdir0"
+ .byte 0
+ .align 2, 0
diff --git a/data/text/save.inc b/data/text/save.inc
new file mode 100644
index 0000000..4843851
--- /dev/null
+++ b/data/text/save.inc
@@ -0,0 +1,57 @@
+gUnknown_80B6A34:: @ 80B6A34
+ .string "#+Quicksaving your adventure...\n"
+ .string "#+Please don~27t turn off the power."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6A7C:: @ 80B6A7C
+ .string "#+Your adventure has been saved."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6AA0:: @ 80B6AA0
+ .string "#+Your adventure has been saved.\n"
+ .string "#+When you are in a dungeon~2c quicksave\n"
+ .string "#+your progress before ending the game."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6B14:: @ 80B6B14
+ .string "#+The data could not be written.\n"
+ .string "#+Please turn off the power and remove\n"
+ .string "#+and reinsert the DS Card."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6B78:: @ 80B6B78
+ .string "#+Save failed."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6B88:: @ 80B6B88
+ .string "#+Error reading data.\n"
+ .string "#+Please turn off the power and reinsert\n"
+ .string "#+the DS Game Card."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6BDC:: @ 80B6BDC
+ .string "#+Your data was not properly saved~2c\n"
+ .string "#+so your game cannot be resumed\n"
+ .string "#+from your last spot.#P#+Your last outing is considered a defeat.\n"
+ .string "#+Before shutting down~2c save in your\n"
+ .string "#+team base~2c or quicksave in a dungeon."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80B6CB8:: @ 80B6CB8
+ .string "#+You may not resume your dungeon\n"
+ .string "#+adventure using this saved data.\n"
+ .string "#+Your last outing is considered a defeat."
+ .byte 0
+ .align 2, 0
+
+ .asciz "pksdir0"
+ .align 2, 0
+
+ .incbin "baserom.gba", 0xB6D30, 0x60
diff --git a/data/text/wonder_mail_1.inc b/data/text/wonder_mail_1.inc
new file mode 100644
index 0000000..3fc142f
--- /dev/null
+++ b/data/text/wonder_mail_1.inc
@@ -0,0 +1,347 @@
+gUnknown_80DDBA8:: @ 80DDBA8
+ .string " What you need to do is\n"
+ .string "tell your friend--the one you rescued--\n"
+ .string "this here password."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDBFC:: @ 80DDBFC
+ .string " All righty!\n"
+ .string "Here~27s your #CGA-OK Mail password#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDC30:: @ 80DDC30
+ .string " Okeydoke! That~27s all done.\n"
+ .string "Come around whenever you need."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDC70:: @ 80DDC70
+ .string " Okeydoke! I sent off your\n"
+ .string "#CGA-OK Mail#R.#P Let me save your adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDCBC:: @ 80DDCBC
+ .string "#+Please choose the Pokémon you want to\n"
+ .string "#+send as a helper to your friend.\n"
+ .string "#+(Its hold item will not be sent.)"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDD2C:: @ 80DDD2C
+ .string " ...Uh~2c no?\n"
+ .string "There appear to be no Pokémon in your\n"
+ .string "Friend Areas. What do you want to do?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDD88:: @ 80DDD88
+ .string " You~27re sure you want to\n"
+ .string "send this here Pokémon?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDDBC:: @ 80DDDBC
+ .string " You~27re sure about this?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDDD8:: @ 80DDDD8
+ .string " All righty. I need you to\n"
+ .string "pick the #CGA-OK Mail#R you want to send."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDE20:: @ 80DDE20
+ .string " ...Uh~2c no?\n"
+ .string "I don~27t see any #CGA-OK Mail#R here."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDE58:: @ 80DDE58
+ .string " Did you know? If you use\n"
+ .string "a #CGGame Link cable#R~2c you can send\n"
+ .string "a #CGhelper Pokémon#R to your friend."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDEC0:: @ 80DDEC0
+ .string " Don~27t you worry. Sending\n"
+ .string "a Pokémon doesn~27t mean it will go away.\n"
+ .string "So! Want to send one to your friend?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDF2C:: @ 80DDF2C
+ .string " ...Uh~2c no?\n"
+ .string "There~27s no space at all to receive\n"
+ .string "any more mail.#P Delete some old mail~2c\n"
+ .string "and then come to me to receive\n"
+ .string "your mail~2c OK?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DDFB8:: @ 80DDFB8
+ .string " All righty! Connect up\n"
+ .string "the #CGGame Link cable#R~2c if you~27d please.\n"
+ .string "Your friend ready~2c too?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE01C:: @ 80DE01C
+ .incbin "baserom.gba", 0xDE01C, 0x50
+
+gUnknown_80DE06C:: @ 80DE06C
+ .string " Okeydoke!\n"
+ .string "I received your friend~27s #CGSOS Mail#R.#P Let me save your adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE0C0:: @ 80DE0C0
+ .string " Okeydoke! You~27re good to go.\n"
+ .string "Just give me a shout when you~27d like\n"
+ .string "to go rescue your friend."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE124:: @ 80DE124
+ .string " OK~2c I need you to enter\n"
+ .string "the #CGSOS Mail password#R that your\n"
+ .string "friend gave you."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE178:: @ 80DE178
+ .string " How do you want to receive\n"
+ .string "your friend~27s #CGSOS Mail#R?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE1B4:: @ 80DE1B4
+ .string " How do you want to send\n"
+ .string "your #CGA-OK Mail#R?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE1E4:: @ 80DE1E4
+ .string " ...Uh~2c no?\n"
+ .string "You don~27t have an #CGSOS Mail#R.#P You~27ll need to arrange\n"
+ .string "to receive your friend~27s #CGSOS Mail#R first.\n"
+ .string "That~27s what you need to do."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE280:: @ 80DE280
+ .string " Okeydoke!\n"
+ .string "Let me show you to the rescue site."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE2B0:: @ 80DE2B0
+ .string " ...Uh~2c no?\n"
+ .string "Doesn~27t look like you can go to the dungeon\n"
+ .string "named in this #CGSOS Mail#R.#P Come see me about doing\n"
+ .string "this rescue when you can actually go\n"
+ .string "to that dungeon~2c all right?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE368:: @ 80DE368
+ .string " ...Uh~2c no?\n"
+ .string "You~27ve blown this rescue mission too\n"
+ .string "often. Your friend~27s team is beyond help.#P I~27m sorry to say this~2c\n"
+ .string "but you~27ll have to tell your friend that\n"
+ .string "your rescue attempts failed."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE430:: @ 80DE430
+ .string " Okeydoke.\n"
+ .string "I~27ll need you to choose the #CGSOS Mail#R\n"
+ .string "for you to go on a rescue mission."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE48C:: @ 80DE48C
+ .string " What kind of mail do you\n"
+ .string "want to delete?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE4B8:: @ 80DE4B8
+ .string " All righty. Choose\n"
+ .string "the #CGSOS Mail#R you don~27t need."
+ .byte 0
+
+gUnknown_80DE4F0:: @ 80DE4F0
+ .string " ...Uh~2c no?\n"
+ .string "You don~27t have any #CGSOS Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE524:: @ 80DE524
+ .string " If you want a reward~2c #C2don~27t\n"
+ .string "delete an A-OK Mail#R before getting a\n"
+ .string "#CGThank-You Mail#R back for it.#P #C2Be careful#R if you~27re going\n"
+ .string "to delete any #CGA-OK Mail#R.#P Okeydoke.\n"
+ .string "Choose an #CGA-OK Mail#R\n"
+ .string "you don~27t need anymore."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE614:: @ 80DE614
+ .string " ...Uh~2c no?\n"
+ .string "You don~27t have any #CGA-OK Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE648:: @ 80DE648
+ .string " Uh~2c OK.\n"
+ .string "So~2c you want me to delete every piece\n"
+ .string "of mail that you have."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE694:: @ 80DE694
+ .string " ...Uh~2c no?\n"
+ .string "You don~27t have a single piece of\n"
+ .string "mail on you!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE6D4:: @ 80DE6D4
+ .string " So~2c delete all your #CGSOS Mail#R~2c\n"
+ .string "#CGA-OK Mail#R~2c and your #CGThank-You Mail#R?\n"
+ .string "You~27re absolutely~2c positively sure?"
+ .byte 0
+
+gUnknown_80DE754:: @ 80DE754
+ .string " If I delete any mail~2c it~27s\n"
+ .string "gone forever and ever. Bye-bye.\n"
+ .string "You~27re really~2c really sure now?"
+ .byte 0
+
+gUnknown_80DE7B8:: @ 80DE7B8
+ .string " OK~2c then.\n"
+ .string "Let me save your adventure now."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE7E8:: @ 80DE7E8
+ .string " Okeydoke. That~27s all done."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE808:: @ 80DE808
+ .string " Do you want to delete\n"
+ .string "any other mail?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE830:: @ 80DE830
+ .string " Okeydoke.\n"
+ .string "I~27ll delete #CGevery piece of mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE864:: @ 80DE864
+ .string " Okeydoke.\n"
+ .string "Every bit of mail has been deleted.#P Let me save your adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE8B4:: @ 80DE8B4
+ .string " Well~2c hello~2c there!\n"
+ .string "This is the #CGFriend Rescue#R counter.\n"
+ .string "What can I help you with today?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE918:: @ 80DE918
+ .string " Help you with anything\n"
+ .string "else today?"
+ .byte 0
+
+gUnknown_80DE93C:: @ 80DE93C
+ .string " Come again anytime!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE954:: @ 80DE954
+ .string " ...Uh~2c no?\n"
+ .string "Something~27s not working right here..."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE98C:: @ 80DE98C
+ .string " ...Uh~2c no?\n"
+ .string "The number of GBA systems isn~27t right.\n"
+ .string "You~27d better try this again from the top."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DE9F0:: @ 80DE9F0
+ .string " ...Uh~2c no? You~27re not in the\n"
+ .string "same mode as your friend.\n"
+ .string "You~27d better try this again from the top."
+ .byte 0
+
+gUnknown_80DEA58:: @ 80DEA58
+ .string " ...Uh~2c no?\n"
+ .string "Your storage space is stuffed full.\n"
+ .string "You~27d better make room and try again."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEAB4:: @ 80DEAB4
+ .string " ...Uh~2c no? It looks like\n"
+ .string "you received this mail before.\n"
+ .string "You can~27t get the same mail twice. "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEB18:: @ 80DEB18
+ .string " ...Uh~2c no?\n"
+ .string "You~27re not eligible to receive this mail."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEB54:: @ 80DEB54
+ .string " ...Uh~2c no?\n"
+ .string "There~27s no room for you to \n"
+ .string "receive any more mail.#P You~27d better delete some\n"
+ .string "mail and make room before you come see\n"
+ .string "me again about receiving new mail."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEC00:: @ 80DEC00
+ .string " ...Uh~2c no? Looks like your\n"
+ .string "friend didn~27t do what needed doing.\n"
+ .string "You~27d better do this again from the top."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEC70:: @ 80DEC70
+ .string " ...Uh~2c no?\n"
+ .string "This here password looks wrong.\n"
+ .string "Do you want to try that again?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DECC0:: @ 80DECC0
+ .string " ...Uh~2c no? This password~27s\n"
+ .string "not for any #CGSOS Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DECFC:: @ 80DECFC
+ .string ": I received the #CGSOS Mail#R.\n"
+ .string "Your adventure will be saved."
+ .byte 0
+ .align 2, 0
+
+ .asciz "pksdir0"
+ .align 2, 0
diff --git a/data/text/wonder_mail_2.inc b/data/text/wonder_mail_2.inc
new file mode 100644
index 0000000..1cc51b9
--- /dev/null
+++ b/data/text/wonder_mail_2.inc
@@ -0,0 +1,283 @@
+gUnknown_80DEF04:: @ 80DEF04
+ .string " ...Oh?\n"
+ .string "Something~27s gone wrong."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEF28:: @ 80DEF28
+ .string " ...Oh? The number of linked\n"
+ .string "GBA systems is incorrect.\n"
+ .string "Please try again from the start."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEF80:: @ 80DEF80
+ .string " ...Oh? It looks like your\n"
+ .string "friend chose a different mode.\n"
+ .string "Please try again from the start."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DEFDC:: @ 80DEFDC
+ .string " ...Oh? It looks like your\n"
+ .string "storage space is full. Please clear some\n"
+ .string "space and try again from the start."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF044:: @ 80DF044
+ .string " ...Oh?\n"
+ .string "I think you~27ve received this mail before.\n"
+ .string "You can~27t get the same mail twice."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF0A0:: @ 80DF0A0
+ .string " ...Oh?\n"
+ .string "I don~27t think you~27re eligible to receive\n"
+ .string "this mail."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF0E0:: @ 80DF0E0
+ .string " ...Oh?\n"
+ .string "There is no room to receive new mail.\n"
+ .string "Please delete some mail and try again."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF138:: @ 80DF138
+ .string " ...Oh? Your friend didn~27t\n"
+ .string "follow through on their side.\n"
+ .string "Please try again from the start."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF194:: @ 80DF194
+ .string " Your #CGThank-You Mail#R\n"
+ .string "has been sent."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF1C0:: @ 80DF1C0
+ .string " ...Oh?\n"
+ .string "This password appears to be wrong.\n"
+ .string "Would you like to try again?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF208:: @ 80DF208
+ .string " ...Oh? This password doesn~27t\n"
+ .string "appear to be for a #CGThank-You Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF250:: @ 80DF250
+ .string ": This is the counter for\n"
+ .string "#CGThank-You Mail#R.#P: Oh~2c hi~2c #CN%s#R.\n"
+ .string "I~27ve been waiting for you. You wanted me\n"
+ .string "to process a #CGThank-You Mail#R?#P: Let me get on it right away"
+ .string "."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF304:: @ 80DF304
+ .string " Is it OK to send this\n"
+ .string "#CGThank-You Mail#R?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF330:: @ 80DF330
+ .string " Please choose the\n"
+ .string "#CGThank-You Mail#R that you want to\n"
+ .string "send to your friend."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF380:: @ 80DF380
+ .string " OK. Please enter the\n"
+ .string "#CGThank-You Mail password#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF3B4:: @ 80DF3B4
+ .string " Please give this password\n"
+ .string "to the friend that rescued your team.#P I also must save your\n"
+ .string "adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF418:: @ 80DF418
+ .string " OK~2c here is your\n"
+ .string "#CGThank-You Mail password#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF44C:: @ 80DF44C
+ .string " I need to save your\n"
+ .string "adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF46C:: @ 80DF46C
+ .string " There we go.\n"
+ .string "I~27m all done.#P Doesn~27t it feel great to\n"
+ .string "be appreciated for doing something good?\n"
+ .string "Please keep up your rescue work!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF4F4:: @ 80DF4F4
+ .string " A #CGThank-You Mail#R has\n"
+ .string "arrived from your friend for your rescue\n"
+ .string "mission."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF544:: @ 80DF544
+ .string "#+Communicating...\n"
+ .string "#+Please wait with the power on.\n"
+ .string "#+To cancel~2c press {B_BUTTON}."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF594:: @ 80DF594
+ .string " There. I~27ve sent your\n"
+ .string "#CGThank-You Mail#R.\n"
+ .string "I need to save your adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF5E4:: @ 80DF5E4
+ .string " Please connect the GBA\n"
+ .string "systems with a #CGGame Link cable#R.\n"
+ .string "Is your friend also ready?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF63C:: @ 80DF63C
+ .string " There~2c all done.\n"
+ .string "#CN%s#R~2c I hope your friend\n"
+ .string "appreciates your sense of gratitude."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF694:: @ 80DF694
+ .string " The item you~27ve chosen\n"
+ .string "here can~27t be exchanged later.\n"
+ .string "Are you certain this item is OK?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF6F0:: @ 80DF6F0
+ .string " I~27ve saved your adventure. "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF710:: @ 80DF710
+ .string " OK~2c please choose\n"
+ .string "the item to be sent."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF73C:: @ 80DF73C
+ .string " ...Oh?\n"
+ .string "Your storage space is empty.\n"
+ .string "What would you like to do?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF77C:: @ 80DF77C
+ .string " Would you like to choose\n"
+ .string "a #CGreward item#R from storage and\n"
+ .string "send it with your mail?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF7D4:: @ 80DF7D4
+ .string " ...Oh?\n"
+ .string "You~27ve already attached a #CGreward item#R\n"
+ .string "to this mail.#P I~27m sorry~2c but once an item\n"
+ .string "has been attached to mail~2c it can~27t be\n"
+ .string "exchanged."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF870:: @ 80DF870
+ .string " Would you like to send it\n"
+ .string "again with the item you chose before?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF8B4:: @ 80DF8B4
+ .string " ...Oh?\n"
+ .string "You don~27t seem to have a #CGThank-You Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF8EC:: @ 80DF8EC
+ .string " Hello.\n"
+ .string "I handle #CGThank-You Mail#R.\n"
+ .string "How may I serve you?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF928:: @ 80DF928
+ .string " May I help you with\n"
+ .string "anything else?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF94C:: @ 80DF94C
+ .string " Please come see me\n"
+ .string "anytime."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF96C:: @ 80DF96C
+ .string " How would you like to send\n"
+ .string "your #CGThank-You Mail#R?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF9A4:: @ 80DF9A4
+ .string " How would you like to\n"
+ .string "receive your friend~27s #CGThank-You Mail#R?"
+ .byte 0
+
+ .string "pksdir0"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF9F0:: @ 80DF9F0
+ .string "????"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DF9F8:: @ 80DF9F8
+ .string " Oh~2c hello!\n"
+ .string "Your rescue mission went well~2c didn~27t it?\n"
+ .string "I wouldn~27t expect any less~2c #CG%s#R!#P Well~2c well!\n"
+ .string "Here is your reward from the Pokémon\n"
+ .string "Rescue Organization!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFAA8:: @ 80DFAA8
+ .string " I hope you will keep on\n"
+ .string "rescuing your friends in\n"
+ .string "dire straits.#P And now~2c I must save\n"
+ .string "your adventure."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFB14:: @ 80DFB14
+ .string " Oh~2c yes~2c that~27s right.\n"
+ .string "Please don~27t forget to send an #CGA-OK Mail#R\n"
+ .string "to the friend you just rescued.#P Please give me a shout if\n"
+ .string "you would like to send #CGA-OK Mail#R."
+ .byte 0
+ .align 2, 0
+
+ .string "pksdir0"
+ .byte 0
diff --git a/data/text/wonder_mail_3.inc b/data/text/wonder_mail_3.inc
new file mode 100644
index 0000000..1aa2213
--- /dev/null
+++ b/data/text/wonder_mail_3.inc
@@ -0,0 +1,68 @@
+gUnknown_80DFE4C:: @ 80DFE4C
+ .string "Are you sure you want to replace the\n"
+ .string "old #CGWonder Mail#R with the new one?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFE9C:: @ 80DFE9C
+ .string "This #CGWonder Mail#R has already been\n"
+ .string "received."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFED0:: @ 80DFED0
+ .string "This #CGWonder Mail#R has already been\n"
+ .string "received.\n"
+ .string "You may not receive the same one again."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFF2C:: @ 80DFF2C
+ .string "Only #CGone piece#R of #CGWonder Mail#R can be held.\n"
+ .string "Please receive it after completing any\n"
+ .string "rescue mission in progress."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80DFFA4:: @ 80DFFA4
+ .string "The rescue team has quicksaved in\n"
+ .string "a dungeon with a mission in progress.\n"
+ .string "Please complete the mission first."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0010:: @ 80E0010
+ .string "The rescue team has quicksaved in\n"
+ .string "a dungeon with a mission in progress.\n"
+ .string "Mail cannot be deleted now."
+ .byte 0
+gUnknown_80E0074:: @ 80E0074
+ .string "Received the #CGWonder Mail#R!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0094:: @ 80E0094
+ .string "Only #CGone piece#R of #CGWonder Mail#R can be held.\n"
+ .string "Is it OK to replace the old #CGWonder Mail#R\n"
+ .string "with the new one?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0108:: @ 80E0108
+ .string "Your #CGJob List#R is full.\n"
+ .string "Please select and delete unwanted mail."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E014C:: @ 80E014C
+ .string "New Mail"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0158:: @ 80E0158
+ .string "Old Mail"
+ .byte 0
+ .align 2, 0
+
+ .string "pksdir0"
+ .byte 0
diff --git a/data/text/wonder_mail_4.inc b/data/text/wonder_mail_4.inc
new file mode 100644
index 0000000..a8b30f9
--- /dev/null
+++ b/data/text/wonder_mail_4.inc
@@ -0,0 +1,190 @@
+gUnknown_80E0C4C:: @ 80E0C4C
+ .string " So~2c what~27d you want to\n"
+ .string "know?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0C70:: @ 80E0C70
+ .string " If you need to call for\n"
+ .string "help~2c first send your friend\n"
+ .string "an #CGSOS Mail#R.#P Once you send that mail~2c\n"
+ .string "wait until your friend sends you back\n"
+ .string "an #CGA-OK Mail#R.#P When you get that\n"
+ .string "#CGA-OK Mail#R back~2c your team\n"
+ .string "can continue from where it went down.#P Make sure you send your\n"
+ .string "friend a #CGThank-You Mail#R.\n"
+ .string "That~27s if you get revived~2c of course."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0DD0:: @ 80E0DD0
+ .string " If your team gets defeated\n"
+ .string "in a dungeon~2c you can send an #CGSOS Mail#R\n"
+ .string "to a friend willing to help.#P But I have to warn you.\n"
+ .string "You can~27t get anyone to rescue you\n"
+ .string "in certain places.#P If you need to send\n"
+ .string "an #CGSOS Mail#R~2c you send it from the\n"
+ .string "#CGmain menu#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0ED8:: @ 80E0ED8
+ .string " If your friend manages to\n"
+ .string "rescue your team~2c you need to receive\n"
+ .string "an #CGA-OK Mail#R from your friend.#P See~2c once you get that\n"
+ .string "#CGA-OK Mail#R~2c your team can continue from\n"
+ .string "where it went down in the dungeon.#P And~2c if you use\n"
+ .string "a #CGGame Link cable#R~2c your friend can\n"
+ .string "even send you a #CGhelper Pokémon#R.#P There~27s just one thing.\n"
+ .string "A #CGhelper Pokémon#R can~27t bring\n"
+ .string "any item it happens to be holding.#P You can receive that\n"
+ .string "team-saving #CGA-OK Mail#R on the #CGmain menu#R~2c\n"
+ .string "all right?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E10C8:: @ 80E10C8
+ .string " If your team gets rescued~2c\n"
+ .string "be sure to send your friend\n"
+ .string "a #CGThank-You Mail#R.#P You do that by going to\n"
+ .string "the #CGright counter#R~2c or\n"
+ .string "by selecting it from the #CGmain menu#R.#P You can attach an item in\n"
+ .string "storage to your #CGThank-You Mail#R\n"
+ .string "as a #CGreward item#R.#P You don~27t want to ever\n"
+ .string "forget to express your thanks."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E120C:: @ 80E120C
+ .string " If you want to go and\n"
+ .string "rescue your friend~27s KO~27d team~2c\n"
+ .string "you need to receive an #CGSOS Mail#R.#P When you get that mail~2c\n"
+ .string "you can rescue your friend at\n"
+ .string "the #CGleft counter#R over there.#P If you do manage to rescue\n"
+ .string "the team~2c you send your friend\n"
+ .string "an #CGA-OK Mail#R.#P After you do that~2c your\n"
+ .string "friend can send back to you\n"
+ .string "a #CGThank-You Mail#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E136C:: @ 80E136C
+ .string " To go off on a rescue~2c\n"
+ .string "you first need to receive your friend~27s\n"
+ .string "#CGSOS Mail#R.#P You do that at\n"
+ .string "the #CGleft counter#R over there~2c\n"
+ .string "or by selecting it from the #CGmain menu#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1420:: @ 80E1420
+ .string " If you succeed in rescuing\n"
+ .string "that team~2c you send your friend an\n"
+ .string "#CGA-OK Mail#R.#P You do that by going to\n"
+ .string "the #CGleft counter#R~2c\n"
+ .string "or from the #CGmain menu#R.#P You can send your friend\n"
+ .string "a Pokémon as a helper from your Friend\n"
+ .string "Areas using a #CGGame Link cable#R.#P This Pokémon won~27t\n"
+ .string "disappear from its Friend Area~2c so\n"
+ .string "don~27t you worry any."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E157C:: @ 80E157C
+ .string " If you get an #CGSOS Mail#R~2c\n"
+ .string "you head off on the rescue from\n"
+ .string "the #CGleft counter#R.#P But~2c I have to warn you.\n"
+ .string "You can~27t go off to rescue in a dungeon\n"
+ .string "if you can~27t get into it.#P You~27ll be able to get\n"
+ .string "there when you go farther in your\n"
+ .string "adventure~2c so it won~27t do to fret."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E169C:: @ 80E169C
+ .string " If you send your friend\n"
+ .string "an #CGA-OK Mail#R~2c you can look forward\n"
+ .string "to getting a #CGThank-You Mail#R back.#P You can receive it at\n"
+ .string "the #CGright counter#R\n"
+ .string "or on the #CGmain menu#R.#P But you need to #C2be careful#R.\n"
+ .string "You #C2must not delete the A-OK Mail#R\n"
+ .string "before you get the #CGThank-You Mail#R back."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E17C8:: @ 80E17C8
+ .string " I~27m your guide to what you\n"
+ .string "can expect at the Pelipper Post Office.\n"
+ .string "If you have any questions~2c just ask away!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E183C:: @ 80E183C
+ .string " Did you want to ask about\n"
+ .string "anything else?"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1868:: @ 80E1868
+ .string " #CGThe Pelipper Post Office#R\n"
+ .string "keeps track of information from\n"
+ .string "around the world.#P We inform folks\n"
+ .string "about everything from gossip to calls\n"
+ .string "for help from fellow Pokémon.#P For the latest news~2c check\n"
+ .string "#CGyour Mailbox#R or the #CGBulletin Board#R\n"
+ .string "outside~2c all right?#P Oh~2c that~27s not all.\n"
+ .string "You can arrange for #CGFriend Rescue#R\n"
+ .string "missions at that counter there.#P The #CGleft counter#R is\n"
+ .string "for rescues~2c and the #CGright counter#R\n"
+ .string "is for Thank-You Mail."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1A30:: @ 80E1A30
+ .string " The #CGBulletin Board#R outside\n"
+ .string "here lists rescue requests.#P Take on rescue jobs from\n"
+ .string "the Bulletin Board. Be a hero and handle\n"
+ .string "the jobs for fellow Pokémon in need!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1AD8:: @ 80E1AD8
+ .string " If your rescue team\n"
+ .string "becomes famous for doing lots of rescues~2c\n"
+ .string "expect to get rescue requests directly.#P Our delivery "
+ .byte 0x24
+ .string "m0\n"
+ .string "will take those jobs straight to your\n"
+ .string "#CGMailbox#R."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1B88:: @ 80E1B88
+ .string " Friend Rescue is what we\n"
+ .string "call rescue missions between friends using\n"
+ .string "a #CGGame Link cable#R~2c #CGpasswords#R~2c etc.#P For instance~2c you can send\n"
+ .string "out for help saying your team wiped out\n"
+ .string "in a dungeon at such and such a place.#P Your friend could play\n"
+ .string "the hero and come to your team~27s rescue.\n"
+ .string "Or it can be the other way around~2c too.#P If you use #CGpasswords#R~2c\n"
+ .string "you can do rescues with friends in\n"
+ .string "far-away places.#P You can apply for Friend\n"
+ .string "Rescue jobs at the #CGleft counter#R of\n"
+ .string "that counter there."
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E1D84:: @ 80E1D84
+ .string " Deleting mail just means\n"
+ .string "getting rid of old mail that you don~27t\n"
+ .string "need anymore.#P If you do lots of Friend\n"
+ .string "Rescues~2c you~27ll find #CGSOS Mail#R and\n"
+ .string "#CGA-OK Mail#R piling up.#P Once you get #CG30 pieces#R~2c\n"
+ .string "you won~27t be able to receive more mail.\n"
+ .string "That~27s why you~27ll need to delete old mail.#P You can look through old\n"
+ .string "mail at the #CGleft counter#R over there."
+ .byte 0
+ .align 2, 0
+
+ .string "pksdir0"
+ .byte 0
diff --git a/data/text/wonder_mail_complete.inc b/data/text/wonder_mail_complete.inc
new file mode 100644
index 0000000..7b6fad1
--- /dev/null
+++ b/data/text/wonder_mail_complete.inc
@@ -0,0 +1,40 @@
+gUnknown_80E0184:: @ 80E0184
+ .string " Thank you for rescuing me!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E01A0:: @ 80E01A0
+ .string " Thank you for rescuing\n"
+ .string "#C5"
+ .byte 0x24
+ .string "m1#R!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E01C4:: @ 80E01C4
+ .string " Thank you for escorting me\n"
+ .string "to #C5"
+ .byte 0x24
+ .string "m1#R! "
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E01F0:: @ 80E01F0
+ .string " Thank you for delivering\n"
+ .string "the #C4"
+ .byte 0x24
+ .string "i0#R!"
+ .byte 0
+ .align 2, 0
+
+gUnknown_80E0218:: @ 80E0218
+ .string " Thank you for getting me\n"
+ .string "the #C4"
+ .byte 0x24
+ .string "i0#R!"
+ .byte 0
+ .align 2, 0
+
+ .string "pksdir0"
+ .byte 0
+ .align 2, 0
diff --git a/include/code_800558C.h b/include/code_800558C.h
new file mode 100644
index 0000000..e1b3432
--- /dev/null
+++ b/include/code_800558C.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_code_800558C_H
+#define GUARD_code_800558C_H
+
+extern void *gUnknown_203B078;
+
+#endif //GUARD_code_800558C_H
diff --git a/include/code_800B540.h b/include/code_800B540.h
new file mode 100644
index 0000000..050998e
--- /dev/null
+++ b/include/code_800B540.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_code_800B540_H
+#define GUARD_code_800B540_H
+
+void sub_800CDA8(int a0);
+
+#endif //GUARD_code_800B540_H
diff --git a/include/file_system.h b/include/file_system.h
new file mode 100644
index 0000000..360f7ac
--- /dev/null
+++ b/include/file_system.h
@@ -0,0 +1,34 @@
+#ifndef GUARD_FILE_SYSTEM_H
+#define GUARD_FILE_SYSTEM_H
+
+struct File
+{
+ char *name;
+ u8 *data;
+};
+
+struct OpenedFile
+{
+ struct File *file;
+ u8 *data;
+};
+
+struct FileArchive
+{
+ char magic[8];
+ s32 count;
+ struct File *entries;
+};
+
+struct SiroArchive
+{
+ u32 magic;
+ u8 *data;
+};
+
+struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc);
+u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused);
+struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
+struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
+
+#endif //GUARD_FILE_SYSTEM_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 7fd429d..5f0123a 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -8,6 +8,8 @@
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
+#define UNUSED __attribute__((unused))
+#define NAKED __attribute__((naked))
#define ALIGNED(n) __attribute__((aligned(n)))
@@ -59,4 +61,4 @@
#define WIN_RANGE(a, b) (((a) << 8) | (b))
-#endif // GUARD_GBA_DEFINES
+#endif // GUARD_GBA_DEFINES \ No newline at end of file
diff --git a/include/global.h b/include/global.h
index 75592d5..b5a4593 100644
--- a/include/global.h
+++ b/include/global.h
@@ -1,10 +1,11 @@
#ifndef GUARD_GLOBAL_H
#define GUARD_GLOBAL_H
+#include <string.h>
#include "gba/gba.h"
// IDE support
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(__CYGWIN__)
#define _(x) x
#define __(x) x
#define INCBIN_U8 {0}
@@ -13,9 +14,6 @@
#define INCBIN_S8 {0}
#define INCBIN_S16 {0}
#define INCBIN_S32 {0}
-void * memcpy (void *, const void *, size_t);
-void * memset (void *, int, size_t);
-int strcmp (const char *, const char *);
#endif
// Prevent cross-jump optimization.
@@ -26,13 +24,7 @@ int strcmp (const char *, const char *);
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided\n")
-#define nonmatching(fndec, x) {\
-__attribute__((naked))\
-fndec\
-{\
- asm_unified(x);\
-}\
-}
+#define NAKED __attribute__((naked))
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
diff --git a/include/macros/m4a.inc b/include/macros/m4a.inc
new file mode 100644
index 0000000..6c5abc0
--- /dev/null
+++ b/include/macros/m4a.inc
@@ -0,0 +1,13 @@
+ .macro song label, music_player, unknown
+ .4byte \label
+ .2byte \music_player
+ .2byte \unknown
+ .endm
+
+ .macro music_player info_struct, track_struct, unknown_1, unknown_2
+ .4byte \info_struct
+ .4byte \track_struct
+ .byte \unknown_1
+ .space 1
+ .2byte \unknown_2
+ .endm
diff --git a/include/memory.h b/include/memory.h
new file mode 100644
index 0000000..4b1e587
--- /dev/null
+++ b/include/memory.h
@@ -0,0 +1,56 @@
+#ifndef GUARD_MEMORY_H
+#define GUARD_MEMORY_H
+
+#define HEAP_SIZE 0x24000
+
+struct HeapSettings
+{
+ u8 *start;
+ u32 size;
+};
+
+struct HeapMemoryBlock {
+ u8 *start;
+ s32 size;
+ s32 allocatedSize;
+};
+
+struct HeapFreeListElement
+{
+ u32 unk_atb;
+ u32 atb;
+ u32 grp;
+ struct HeapMemoryBlock block;
+};
+
+struct HeapDescriptor
+{
+ u32 unk0;
+ struct HeapDescriptor *parentHeap;
+ struct HeapFreeListElement *freeList;
+ s32 freeCount;
+ u32 freeListLength;
+ u8 *start;
+ u32 size;
+};
+
+void InitHeap(void);
+
+void MemoryClear8(u8 *dest, s32 size);
+void MemoryClear16(u16 *dest, s32 size);
+void MemoryClear32(u32 *dest, s32 size);
+void MemoryFill8(u8 *dest, u8 value, s32 size);
+void MemoryFill16(u16 *dest, u16 value, s32 size);
+void MemoryFill32(u32 *dest, u32 value, s32 size);
+void MemoryCopy8(u8 *dest, u8 *src, s32 size);
+void MemoryCopy16(u16 *dest, u16 *src, s32 size);
+void MemoryCopy32(u32 *dest, u32 *src, s32 size);
+void MemoryCopy8(u8 *dest, u8 *src, s32 size);
+void MemoryCopy16(u16 *dest, u16 *src, s32 size);
+void MemoryCopy32(u32 *dest, u32 *src, s32 size);
+
+void InitHeapInternal(void);
+void DoInitHeap(struct HeapDescriptor *, struct HeapSettings *, struct HeapFreeListElement *, u32);
+void InitSubHeap(struct HeapDescriptor *, struct HeapMemoryBlock *, u32);
+
+#endif // GUARD_MEMORY_H
diff --git a/ld_script.sed b/ld_script.sed
deleted file mode 100644
index 65e2610..0000000
--- a/ld_script.sed
+++ /dev/null
@@ -1,14 +0,0 @@
-/<EWRAM>/ {
- r sym_ewram.ld
- d
-}
-
-/<EWRAM2>/ {
- r sym_ewram2.ld
- d
-}
-
-/<IWRAM>/ {
- r sym_iwram.ld
- d
-}
diff --git a/ld_script.txt b/ld_script.txt
index e3a6af7..de750b1 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -1,5 +1,8 @@
ENTRY(Start)
+gNumMusicPlayers = 8;
+gMaxLines = 0;
+
SECTIONS {
. = 0x2000000;
@@ -7,24 +10,16 @@ SECTIONS {
ALIGN(4)
{
ewram_start = .;
- <EWRAM>
- . = ALIGN(4);
+ INCLUDE "sym_ewram.ld"
src/agb_flash.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libgcc.a:fp-bit.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libgcc.a:dp-bit.o(.bss);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:syscalls.o(.bss);
. = ALIGN(16);
- <EWRAM2>
- . = ALIGN(4);
+ INCLUDE "sym_ewram2.ld"
tools/agbcc/lib/libc.a:impure.o(.data);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:locale.o(.data);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:mallocr.o(.data);
- . = ALIGN(4);
gUnknown_203BC04 = .;
. = 0x40000;
}
@@ -35,7 +30,7 @@ SECTIONS {
ALIGN(4)
{
iwram_start = .;
- <IWRAM>
+ INCLUDE "sym_iwram.ld"
. = 0x8000;
}
@@ -48,16 +43,20 @@ SECTIONS {
asm/code.o(.text);
asm/event_flag.o(.text);
asm/code_8002774.o(.text);
+ src/memory.o(.text);
asm/memory.o(.text);
asm/code_80035F0.o(.text);
src/other_random.o(.text);
src/util.o(.text);
- asm/bg_palette_buffer.o(.text);
+ src/bg_palette_buffer.o(.text);
asm/input.o(.text);
asm/code_8004AA0.o(.text);
+ src/sprite.o(.text);
asm/sprite.o(.text);
asm/code_800558C.o(.text);
src/random.o(.text);
+ src/text.o(.text);
+ . = ALIGN(4);
asm/text.o(.text);
asm/code_8009804.o(.text);
src/file_system.o(.text);
@@ -66,9 +65,14 @@ SECTIONS {
asm/code_800B540.o(.text);
src/flash.o(.text);
asm/code_800D090.o(.text);
+ src/save.o(.text);
asm/save.o(.text);
+ src/save1.o(.text);
asm/code_8012A18.o(.text);
- asm/m4a.o(.text);
+ asm/m4a_1.o(.text);
+ src/m4a_2.o(.text);
+ asm/m4a_3.o(.text);
+ src/m4a_4.o(.text);
asm/syscall.o(.text);
src/agb_flash.o(.text);
src/agb_flash_1m.o(.text);
@@ -133,23 +137,17 @@ SECTIONS {
data/data.o(.rodata);
src/file_system.o(.rodata);
data/data_80B9BB8.o(.rodata);
+ src/m4a_tables.o(.rodata);
src/agb_flash.o(.rodata);
src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata);
src/agb_flash_le.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:sprintf.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:vfprintf.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:dtoa.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:impure.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:locale.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:mprec.o(.rodata);
- . = ALIGN(4);
tools/agbcc/lib/libc.a:syscalls.o(.rodata);
. = ALIGN(4);
data/data_8270000.o(.rodata);
@@ -164,7 +162,8 @@ SECTIONS {
unk_code_end = .;
}
- unk_code_ram_end = unk_code_ram + (unk_code_end - unk_code);
+ unk_code_section_size = (unk_code_end - unk_code);
+ unk_code_ram_end = unk_code_ram + unk_code_section_size;
end = unk_code_ram_end;
. = 0x8300000;
diff --git a/red.sha1 b/red.sha1
new file mode 100644
index 0000000..aefd29a
--- /dev/null
+++ b/red.sha1
@@ -0,0 +1 @@
+9f4cfc5b5f4859d17169a485462e977c7aac2b89 pmd_red.gba \ No newline at end of file
diff --git a/rom.md5 b/rom.md5
deleted file mode 100644
index f228854..0000000
--- a/rom.md5
+++ /dev/null
@@ -1 +0,0 @@
-2100cf6f17e12cd34f1513647dfa506b pmd_red.gba
diff --git a/sound/music_player_table.inc b/sound/music_player_table.inc
new file mode 100644
index 0000000..86c4795
--- /dev/null
+++ b/sound/music_player_table.inc
@@ -0,0 +1,10 @@
+ .align 2
+gMPlayTable:: @ 9E8665C
+ music_player 0x20008F0, 0x2000000, 12, 0
+ music_player 0x2000970, 0x20003C0, 6, 0
+ music_player 0x20009B0, 0x20005A0, 1, 0
+ music_player 0x2000A40, 0x20005F0, 1, 0
+ music_player 0x20009F0, 0x2000640, 2, 0
+ music_player 0x2000870, 0x20006E0, 2, 0
+ music_player 0x20008B0, 0x2000780, 2, 0
+ music_player 0x2000930, 0x2000820, 1, 0
diff --git a/sound/song_table.inc b/sound/song_table.inc
new file mode 100644
index 0000000..df66710
--- /dev/null
+++ b/sound/song_table.inc
@@ -0,0 +1,942 @@
+ .align 2
+gSongTable:: @ 9E866BC
+ song 0x9F5185C, 0, 0
+ song 0x9F5218C, 0, 0
+ song 0x9F52D24, 0, 0
+ song 0x9F53728, 0, 0
+ song 0x9F53B10, 0, 0
+ song 0x9F54734, 0, 0
+ song 0x9F5506C, 0, 0
+ song 0x9F56720, 0, 0
+ song 0x9F56B8C, 0, 0
+ song 0x9F57254, 0, 0
+ song 0x9F57C58, 0, 0
+ song 0x9F588BC, 0, 0
+ song 0x9F59210, 0, 0
+ song 0x9F59F68, 0, 0
+ song 0x9F5B598, 0, 0
+ song 0x9F5CF8C, 0, 0
+ song 0x9F5DE00, 0, 0
+ song 0x9F5E8E0, 0, 0
+ song 0x9F5F9C8, 0, 0
+ song 0x9F60510, 0, 0
+ song 0x9F61EA8, 0, 0
+ song 0x9F63224, 0, 0
+ song 0x9F666B8, 0, 0
+ song 0x9F678E8, 0, 0
+ song 0x9F698F0, 0, 0
+ song 0x9F6AED8, 0, 0
+ song 0x9F6CDDC, 0, 0
+ song 0x9F6FBF8, 0, 0
+ song 0x9F71EC8, 0, 0
+ song 0x9F73E7C, 0, 0
+ song 0x9F75DD0, 0, 0
+ song 0x9F77848, 0, 0
+ song 0x9F79C08, 0, 0
+ song 0x9F7A6EC, 0, 0
+ song 0x9F7B9BC, 0, 0
+ song 0x9F7D470, 0, 0
+ song 0x9F7DD20, 0, 0
+ song 0x9F7FA74, 0, 0
+ song 0x9F7FC3C, 0, 0
+ song 0x9F81164, 0, 0
+ song 0x9F8192C, 0, 0
+ song 0x9F82150, 0, 0
+ song 0x9F832D4, 0, 0
+ song 0x9F83A88, 0, 0
+ song 0x9F86808, 0, 0
+ song 0x9F871BC, 0, 0
+ song 0x9F87678, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9F876AC, 0, 0
+ song 0x9F877DC, 0, 0
+ song 0x9F878FC, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9F88B90, 0, 0
+ song 0x9F89B38, 0, 0
+ song 0x9F8AE6C, 0, 0
+ song 0x9F8C1A0, 0, 0
+ song 0x9F8DCFC, 0, 0
+ song 0x9F8F384, 0, 0
+ song 0x9F8FD4C, 0, 0
+ song 0x9F90F70, 0, 0
+ song 0x9F93C60, 0, 0
+ song 0x9F94FBC, 0, 0
+ song 0x9F96190, 0, 0
+ song 0x9F976A0, 0, 0
+ song 0x9F97C6C, 0, 0
+ song 0x9F992BC, 0, 0
+ song 0x9F9961C, 0, 0
+ song 0x9F9B188, 0, 0
+ song 0x9F9BA2C, 0, 0
+ song 0x9F9CC24, 0, 0
+ song 0x9F9DDA0, 0, 0
+ song 0x9F9ECF4, 0, 0
+ song 0x9FA06B0, 0, 0
+ song 0x9FA0F50, 0, 0
+ song 0x9FA3AA0, 0, 0
+ song 0x9FA5254, 0, 0
+ song 0x9FA79C8, 0, 0
+ song 0x9FA8760, 0, 0
+ song 0x9FA9C7C, 0, 0
+ song 0x9FAB3D0, 0, 0
+ song 0x9FAC714, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FAC838, 1, 1
+ song 0x9FAC944, 1, 1
+ song 0x9FAC9C4, 1, 1
+ song 0x9FACA5C, 1, 1
+ song 0x9FACB10, 1, 1
+ song 0x9FACC04, 1, 1
+ song 0x9FACCBC, 1, 1
+ song 0x9FACD28, 1, 1
+ song 0x9FACE3C, 1, 1
+ song 0x9E8841C, 0, 0
+ song 0x9FACF88, 1, 1
+ song 0x9FAD054, 1, 1
+ song 0x9FAD140, 1, 1
+ song 0x9FAD1DC, 1, 1
+ song 0x9FAD270, 1, 1
+ song 0x9FAD394, 1, 1
+ song 0x9FAD494, 1, 1
+ song 0x9FAD694, 1, 1
+ song 0x9FAD784, 1, 1
+ song 0x9FAD91C, 1, 1
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FAD938, 2, 2
+ song 0x9FAD95C, 2, 2
+ song 0x9FAD984, 2, 2
+ song 0x9FAD9A0, 2, 2
+ song 0x9FAD9C0, 4, 4
+ song 0x9FAD9E4, 2, 2
+ song 0x9FADA08, 2, 2
+ song 0x9FADA3C, 2, 2
+ song 0x9FADA6C, 2, 2
+ song 0x9FADA9C, 2, 2
+ song 0x9FADAC0, 2, 2
+ song 0x9FADB14, 6, 6
+ song 0x9FADB20, 6, 6
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FADB58, 2, 2
+ song 0x9FADB94, 2, 2
+ song 0x9FADBB4, 5, 5
+ song 0x9FADBDC, 3, 3
+ song 0x9E8841C, 0, 0
+ song 0x9FADBE8, 3, 3
+ song 0x9FADC30, 3, 3
+ song 0x9FADCB8, 2, 2
+ song 0x9FADD38, 2, 2
+ song 0x9FADD8C, 2, 2
+ song 0x9FADDB4, 5, 5
+ song 0x9FADDDC, 5, 5
+ song 0x9FADE20, 2, 2
+ song 0x9FADE64, 2, 2
+ song 0x9FADE88, 5, 5
+ song 0x9FADF14, 3, 3
+ song 0x9FADF34, 3, 3
+ song 0x9FADF60, 3, 3
+ song 0x9FADF80, 3, 3
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FADFD8, 2, 2
+ song 0x9FAE038, 4, 4
+ song 0x9FAE184, 3, 3
+ song 0x9FAE1C4, 2, 2
+ song 0x9FAE250, 3, 3
+ song 0x9FAE2A4, 2, 2
+ song 0x9FAE2C8, 3, 3
+ song 0x9FAE2FC, 2, 2
+ song 0x9FAE328, 3, 3
+ song 0x9FAE358, 3, 3
+ song 0x9FAE380, 3, 3
+ song 0x9FAE3A8, 2, 2
+ song 0x9FAE3D4, 3, 3
+ song 0x9FAE3E0, 2, 2
+ song 0x9FAE408, 3, 3
+ song 0x9FAE43C, 3, 3
+ song 0x9FAE468, 3, 3
+ song 0x9FAE49C, 2, 2
+ song 0x9FAE4C4, 3, 3
+ song 0x9FAE4EC, 4, 4
+ song 0x9FAE968, 5, 5
+ song 0x9FAEA48, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FAEA78, 5, 5
+ song 0x9FAEB64, 5, 5
+ song 0x9FAEB8C, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FAEBB8, 3, 3
+ song 0x9FAEBEC, 6, 6
+ song 0x9FAEC40, 5, 5
+ song 0x9FAECCC, 5, 5
+ song 0x9FAED10, 2, 2
+ song 0x9FAEDBC, 2, 2
+ song 0x9FAEDF8, 6, 6
+ song 0x9FAEE64, 6, 6
+ song 0x9FAEE84, 6, 6
+ song 0x9FAEEAC, 3, 3
+ song 0x9FAEED4, 3, 3
+ song 0x9FAEEE0, 6, 6
+ song 0x9FAEF34, 6, 6
+ song 0x9FAEF58, 6, 6
+ song 0x9FAEF90, 6, 6
+ song 0x9FAF004, 6, 6
+ song 0x9FAF044, 6, 6
+ song 0x9FAF0E0, 6, 6
+ song 0x9FAF16C, 6, 6
+ song 0x9FAF1F4, 2, 2
+ song 0x9FAF224, 3, 3
+ song 0x9FAF308, 5, 5
+ song 0x9FAF33C, 5, 5
+ song 0x9FAF3F0, 5, 5
+ song 0x9FAF3FC, 5, 5
+ song 0x9FAF4C4, 5, 5
+ song 0x9FAF654, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FAF6A0, 3, 3
+ song 0x9FAF6E8, 3, 3
+ song 0x9FAF750, 3, 3
+ song 0x9FAF784, 3, 3
+ song 0x9FAF844, 4, 4
+ song 0x9FAF88C, 2, 2
+ song 0x9FAF904, 5, 5
+ song 0x9FAF95C, 2, 2
+ song 0x9FAF998, 2, 2
+ song 0x9FAF9F8, 5, 5
+ song 0x9FAFAD4, 3, 3
+ song 0x9FAFB08, 5, 5
+ song 0x9FAFB3C, 5, 5
+ song 0x9FAFB70, 2, 2
+ song 0x9FAFBAC, 5, 5
+ song 0x9FAFBE4, 2, 2
+ song 0x9FAFC20, 5, 5
+ song 0x9FAFC7C, 5, 5
+ song 0x9FAFCB0, 2, 2
+ song 0x9FAFD08, 2, 2
+ song 0x9FAFD74, 2, 2
+ song 0x9FAFDE8, 2, 2
+ song 0x9FAFE38, 2, 2
+ song 0x9FAFE84, 5, 5
+ song 0x9FAFF88, 5, 5
+ song 0x9FAFFB4, 5, 5
+ song 0x9FAFFE0, 5, 5
+ song 0x9FB006C, 5, 5
+ song 0x9FB0148, 5, 5
+ song 0x9FB019C, 5, 5
+ song 0x9FB0200, 5, 5
+ song 0x9FB0254, 5, 5
+ song 0x9FB02CC, 5, 5
+ song 0x9FB035C, 5, 5
+ song 0x9FB043C, 5, 5
+ song 0x9FB04D8, 5, 5
+ song 0x9FB05A8, 4, 4
+ song 0x9FB062C, 5, 5
+ song 0x9FB06C0, 5, 5
+ song 0x9FB08C4, 5, 5
+ song 0x9FB097C, 5, 5
+ song 0x9FB09E0, 5, 5
+ song 0x9FB0B9C, 5, 5
+ song 0x9FB0C20, 5, 5
+ song 0x9FB0CD0, 5, 5
+ song 0x9FB0D40, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9FB0D9C, 3, 3
+ song 0x9FB0DC8, 3, 3
+ song 0x9FB0F4C, 5, 5
+ song 0x9FB11EC, 5, 5
+ song 0x9FB120C, 5, 5
+ song 0x9FB1254, 5, 5
+ song 0x9FB12CC, 5, 5
+ song 0x9FB1358, 5, 5
+ song 0x9FB13E0, 5, 5
+ song 0x9FB14F0, 5, 5
+ song 0x9FB1718, 5, 5
+ song 0x9FB17E4, 5, 5
+ song 0x9FB1874, 5, 5
+ song 0x9FB18A4, 2, 2
+ song 0x9FB1960, 5, 5
+ song 0x9FB198C, 3, 3
+ song 0x9FB1FC4, 5, 5
+ song 0x9FB2020, 5, 5
+ song 0x9FB2090, 3, 3
+ song 0x9FB20D8, 5, 5
+ song 0x9FB2284, 5, 5
+ song 0x9FB23C0, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9E8841C, 0, 0
+ song 0x9FB2438, 5, 5
+ song 0x9FB24F0, 5, 5
+ song 0x9FB254C, 5, 5
+ song 0x9FB257C, 5, 5
+ song 0x9FB25D0, 5, 5
+ song 0x9FB2644, 5, 5
+ song 0x9FB2690, 5, 5
+ song 0x9FB26D0, 3, 3
+ song 0x9FB2708, 3, 3
+ song 0x9FB2748, 3, 3
+ song 0x9FB279C, 3, 3
+ song 0x9FB2808, 5, 5
+ song 0x9FB286C, 2, 2
+ song 0x9FB28D0, 2, 2
+ song 0x9FB291C, 5, 5
+ song 0x9FB29A4, 5, 5
+ song 0x9FB29E0, 5, 5
+ song 0x9FB2A30, 5, 5
+ song 0x9FB2A80, 5, 5
+ song 0x9FB2AC8, 5, 5
+ song 0x9FB2AF8, 5, 5
+ song 0x9FB2B1C, 5, 5
+ song 0x9FB2BB0, 5, 5
+ song 0x9FB2C04, 5, 5
+ song 0x9FB2C8C, 5, 5
+ song 0x9FB2CDC, 5, 5
+ song 0x9FB2D08, 5, 5
+ song 0x9FB2D54, 5, 5
+ song 0x9FB2D7C, 5, 5
+ song 0x9FB2E28, 5, 5
+ song 0x9FB2E80, 5, 5
+ song 0x9FB2EB4, 5, 5
+ song 0x9FB2F20, 5, 5
+ song 0x9FB2F2C, 5, 5
+ song 0x9FB2F34, 5, 5
+ song 0x9FB2F3C, 5, 5
+ song 0x9FB2F68, 5, 5
+ song 0x9FB2F74, 5, 5
+ song 0x9FB2FE4, 5, 5
+ song 0x9FB3008, 5, 5
+ song 0x9FB3074, 5, 5
+ song 0x9FB30F0, 5, 5
+ song 0x9FB314C, 5, 5
+ song 0x9FB31B0, 5, 5
+ song 0x9FB3228, 5, 5
+ song 0x9FB327C, 5, 5
+ song 0x9FB32EC, 5, 5
+ song 0x9FB3334, 5, 5
+ song 0x9FB3378, 5, 5
+ song 0x9FB33F8, 5, 5
+ song 0x9FB3474, 5, 5
+ song 0x9FB34EC, 5, 5
+ song 0x9FB3530, 5, 5
+ song 0x9FB35A4, 5, 5
+ song 0x9FB3618, 5, 5
+ song 0x9FB3698, 5, 5
+ song 0x9FB371C, 5, 5
+ song 0x9FB37D0, 5, 5
+ song 0x9FB37FC, 5, 5
+ song 0x9FB384C, 5, 5
+ song 0x9FB39C0, 5, 5
+ song 0x9FB3A3C, 5, 5
+ song 0x9FB3A9C, 5, 5
+ song 0x9FB3AF4, 5, 5
+ song 0x9FB3C08, 5, 5
+ song 0x9FB3CB0, 5, 5
+ song 0x9FB3D0C, 5, 5
+ song 0x9FB3D5C, 5, 5
+ song 0x9FB3DB0, 5, 5
+ song 0x9FB3E24, 5, 5
+ song 0x9FB3F60, 5, 5
+ song 0x9FB400C, 5, 5
+ song 0x9FB4094, 5, 5
+ song 0x9FB411C, 5, 5
+ song 0x9FB4230, 5, 5
+ song 0x9FB4324, 5, 5
+ song 0x9FB4350, 5, 5
+ song 0x9FB43D0, 5, 5
+ song 0x9FB44E0, 5, 5
+ song 0x9FB4554, 5, 5
+ song 0x9FB45B0, 5, 5
+ song 0x9FB4658, 5, 5
+ song 0x9FB46D4, 5, 5
+ song 0x9FB4750, 5, 5
+ song 0x9FB47C4, 5, 5
+ song 0x9FB4820, 5, 5
+ song 0x9FB4874, 5, 5
+ song 0x9FB48B8, 5, 5
+ song 0x9FB4910, 5, 5
+ song 0x9FB497C, 5, 5
+ song 0x9FB49E4, 5, 5
+ song 0x9FB4A4C, 5, 5
+ song 0x9FB4AF0, 5, 5
+ song 0x9FB4B84, 5, 5
+ song 0x9FB4BE8, 5, 5
+ song 0x9FB4C58, 5, 5
+ song 0x9FB4D44, 5, 5
+ song 0x9FB4E88, 5, 5
+ song 0x9FB4EDC, 5, 5
+ song 0x9FB4F94, 5, 5
+ song 0x9FB508C, 5, 5
+ song 0x9FB5140, 5, 5
+ song 0x9FB51A8, 5, 5
+ song 0x9FB5208, 5, 5
+ song 0x9FB5294, 5, 5
+ song 0x9FB534C, 5, 5
+ song 0x9FB53B0, 5, 5
+ song 0x9FB54DC, 5, 5
+ song 0x9FB55B0, 5, 5
+ song 0x9FB5688, 5, 5
+ song 0x9FB56DC, 5, 5
+ song 0x9FB5730, 5, 5
+ song 0x9FB57B8, 5, 5
+ song 0x9FB57EC, 5, 5
+ song 0x9FB5864, 5, 5
+ song 0x9FB5898, 5, 5
+ song 0x9FB58FC, 5, 5
+ song 0x9FB59DC, 5, 5
+ song 0x9FB5A64, 5, 5
+ song 0x9FB5AB0, 5, 5
+ song 0x9FB5B10, 5, 5
+ song 0x9FB5B98, 5, 5
+ song 0x9FB5CBC, 5, 5
+ song 0x9FB5D24, 5, 5
+ song 0x9FB5DD0, 5, 5
+ song 0x9FB5E88, 5, 5
+ song 0x9FB5ED4, 5, 5
+ song 0x9FB5EFC, 5, 5
+ song 0x9FB5F6C, 2, 2
+ song 0x9FB5FD4, 5, 5
+ song 0x9FB60A8, 5, 5
+ song 0x9FB617C, 5, 5
+ song 0x9FB6210, 5, 5
+ song 0x9FB62A4, 5, 5
+ song 0x9FB62EC, 5, 5
+ song 0x9FB63C4, 5, 5
+ song 0x9FB6440, 5, 5
+ song 0x9FB6484, 5, 5
+ song 0x9FB663C, 5, 5
+ song 0x9FB6740, 5, 5
+ song 0x9FB67C0, 5, 5
+ song 0x9FB6830, 5, 5
+ song 0x9FB68D8, 5, 5
+ song 0x9FB696C, 5, 5
+ song 0x9FB69D4, 5, 5
+ song 0x9FB6A58, 5, 5
+ song 0x9FB6AF8, 5, 5
+ song 0x9FB6B28, 5, 5
+ song 0x9FB6B70, 5, 5
+ song 0x9FB6C30, 5, 5
+ song 0x9FB6C94, 5, 5
+ song 0x9FB6D40, 5, 5
+ song 0x9FB6DB0, 5, 5
+ song 0x9FB6E88, 5, 5
+ song 0x9FB703C, 5, 5
+ song 0x9FB71F0, 5, 5
+ song 0x9FB73A8, 5, 5
+ song 0x9FB7464, 5, 5
+ song 0x9FB74D8, 5, 5
+ song 0x9FB7534, 5, 5
+ song 0x9FB7658, 5, 5
+ song 0x9FB7688, 5, 5
+ song 0x9FB7708, 5, 5
+ song 0x9FB7798, 5, 5
+ song 0x9FB77D8, 5, 5
+ song 0x9FB78F0, 5, 5
+ song 0x9FB792C, 5, 5
+ song 0x9FB79F0, 5, 5
+ song 0x9FB7AA8, 5, 5
+ song 0x9FB7B88, 2, 2
+ song 0x9FB7CDC, 5, 5
+ song 0x9FB7DA0, 5, 5
+ song 0x9FB7E28, 5, 5
+ song 0x9FB7EC4, 5, 5
+ song 0x9FB7F5C, 5, 5
+ song 0x9FB8074, 5, 5
+ song 0x9FB8150, 5, 5
+ song 0x9FB82B8, 5, 5
+ song 0x9FB834C, 5, 5
+ song 0x9FB85C0, 5, 5
+ song 0x9FB8670, 5, 5
+ song 0x9FB86C8, 5, 5
+ song 0x9FB87C4, 5, 5
+ song 0x9FB880C, 5, 5
+ song 0x9FB8884, 5, 5
+ song 0x9FB893C, 5, 5
+ song 0x9FB8B48, 5, 5
+ song 0x9FB8C5C, 5, 5
+ song 0x9FB8D14, 5, 5
+ song 0x9FB8D54, 5, 5
+ song 0x9FB8DF0, 5, 5
+ song 0x9FB8E40, 5, 5
+ song 0x9FB8F18, 5, 5
+ song 0x9FB8F68, 5, 5
+ song 0x9FB9000, 5, 5
+ song 0x9FB9070, 5, 5
+ song 0x9FB90E0, 5, 5
+ song 0x9FB9150, 5, 5
+ song 0x9FB9244, 5, 5
+ song 0x9FB9388, 5, 5
+ song 0x9FB93B4, 5, 5
+ song 0x9FB943C, 5, 5
+ song 0x9FB9528, 5, 5
+ song 0x9FB955C, 5, 5
+ song 0x9FB9568, 5, 5
+ song 0x9FB961C, 5, 5
+ song 0x9E8841C, 0, 0
+ song 0x9FB965C, 5, 5
+ song 0x9FB96B4, 5, 5
+ song 0x9FB9764, 5, 5
+ song 0x9FB97B8, 5, 5
+ song 0x9FB97F8, 5, 5
+ song 0x9FB9854, 5, 5
+ song 0x9FB988C, 5, 5
+ song 0x9FB9984, 5, 5
+ song 0x9FB9A68, 5, 5
+ song 0x9FB9AB0, 5, 5
+ song 0x9FB9AF8, 5, 5
+ song 0x9FB9BD0, 5, 5
+ song 0x9FB9C54, 5, 5
+ song 0x9FB9D58, 5, 5
+ song 0x9FB9D9C, 5, 5
+ song 0x9FB9DFC, 5, 5
+ song 0x9FB9E60, 5, 5
+ song 0x9FB9EBC, 5, 5
+ song 0x9FB9F34, 5, 5
+ song 0x9FBA014, 5, 5
+ song 0x9FBA07C, 5, 5
+ song 0x9FBA110, 5, 5
+ song 0x9FBA178, 5, 5
+ song 0x9FBA270, 5, 5
+ song 0x9FBA31C, 5, 5
+ song 0x9FBA3C8, 5, 5
+ song 0x9FBA4B0, 5, 5
+ song 0x9FBA508, 5, 5
+ song 0x9FBA54C, 5, 5
+ song 0x9FBA5C0, 5, 5
+ song 0x9FBA638, 5, 5
+ song 0x9FBA728, 5, 5
+ song 0x9FBA7A4, 5, 5
+ song 0x9FBA868, 5, 5
+ song 0x9FBA928, 5, 5
+ song 0x9FBA9A0, 5, 5
+ song 0x9FBAA34, 5, 5
+ song 0x9FBAA78, 5, 5
+ song 0x9FBAAD4, 5, 5
+ song 0x9FBAB48, 5, 5
+ song 0x9FBAC60, 5, 5
+ song 0x9FBACB0, 5, 5
+ song 0x9FBAD68, 5, 5
+ song 0x9FBADDC, 5, 5
+ song 0x9FBAE50, 5, 5
+ song 0x9FBAEC8, 5, 5
+ song 0x9FBAF40, 5, 5
+ song 0x9FBAF80, 5, 5
+ song 0x9FBAFDC, 5, 5
+ song 0x9FBB0B4, 5, 5
+ song 0x9FBB110, 5, 5
+ song 0x9FBB364, 5, 5
+ song 0x9FBB454, 5, 5
+ song 0x9FBB56C, 5, 5
+ song 0x9FBB660, 5, 5
+ song 0x9FBB754, 5, 5
+ song 0x9FBB7FC, 5, 5
+ song 0x9FBB848, 5, 5
+ song 0x9FBB894, 5, 5
+ song 0x9FBB90C, 5, 5
+ song 0x9FBB9DC, 5, 5
+ song 0x9FBBA20, 5, 5
+ song 0x9FBBA58, 5, 5
+ song 0x9FBBAC8, 5, 5
+ song 0x9FBBB38, 5, 5
+ song 0x9FBBB74, 5, 5
+ song 0x9FBBC20, 5, 5
+ song 0x9FBBC58, 5, 5
+ song 0x9FBBD08, 5, 5
+ song 0x9FBBD54, 5, 5
+ song 0x9FBBEB4, 5, 5
+ song 0x9FBBF44, 5, 5
+ song 0x9FBBF80, 5, 5
+ song 0x9FBBFC8, 5, 5
+ song 0x9FBC080, 5, 5
+ song 0x9FBC0C8, 5, 5
+ song 0x9FBC0F4, 5, 5
+ song 0x9FBC140, 2, 2
+ song 0x9FBC178, 5, 5
+ song 0x9FBC1B0, 5, 5
+ song 0x9FBC1EC, 5, 5
+ song 0x9FBC25C, 5, 5
+ song 0x9FBC340, 5, 5
+ song 0x9FBC37C, 5, 5
+ song 0x9FBC3AC, 5, 5
+ song 0x9FBC464, 5, 5
+ song 0x9FBC538, 5, 5
+ song 0x9FBC59C, 5, 5
+ song 0x9FBC674, 5, 5
+ song 0x9FBC6D8, 5, 5
+ song 0x9FBC890, 5, 5
+ song 0x9FBC8F4, 5, 5
+ song 0x9FBC990, 5, 5
+ song 0x9FBC9E0, 5, 5
+ song 0x9FBCA38, 2, 2
+ song 0x9FBCA94, 2, 2
+ song 0x9FBCAD4, 2, 2
+ song 0x9FBCB10, 2, 2
+ song 0x9FBCB50, 2, 2
+ song 0x9FBCB8C, 2, 2
+ song 0x9FBCBC4, 3, 3
+ song 0x9FBCBF4, 3, 3
+ song 0x9FBCC30, 2, 2
+ song 0x9FBCC6C, 2, 2
+ song 0x9FBCCB4, 2, 2
+ song 0x9FBCD0C, 5, 5
+ song 0x9FBCD68, 5, 5
+ song 0x9FBCDDC, 5, 5
+ song 0x9FBCE38, 5, 5
+ song 0x9FBCE44, 5, 5
+ song 0x9FBCE4C, 5, 5
+ song 0x9FBCE7C, 5, 5
+ song 0x9FBCEB0, 5, 5
+ song 0x9FBCEDC, 3, 3
+ song 0x9FBCF18, 3, 3
+ song 0x9FBCFA8, 5, 5
+ song 0x9FBCFB4, 3, 3
+ song 0x9FBCFD8, 3, 3
+ song 0x9FBD0E0, 5, 5
+ song 0x9FBD174, 5, 5
+ song 0x9FBD1E4, 6, 6
+ song 0x9FBD218, 6, 6
+ song 0x9FBD268, 2, 2
+ song 0x9FBD2D0, 2, 2
+ song 0x9FBD310, 2, 2
+ song 0x9FBD380, 5, 5
+ song 0x9FBD3B8, 6, 6
+ song 0x9FBD404, 2, 2
+ song 0x9FBD430, 3, 3
+ song 0x9FBD488, 2, 2
+ song 0x9FBD4B4, 2, 2
+ song 0x9FBD4EC, 6, 6
+ song 0x9FBD5C4, 6, 6
diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c
new file mode 100644
index 0000000..9917adf
--- /dev/null
+++ b/src/bg_palette_buffer.c
@@ -0,0 +1,248 @@
+#include "global.h"
+
+#define BG_PALETTE_BUFFER_SIZE 512
+#define BG_PALETTE_BUFFER_CHUNK_SIZE 16
+
+extern u16 gBGPaletteBuffer[BG_PALETTE_BUFFER_SIZE];
+extern bool8 gBGPaletteUsed[BG_PALETTE_BUFFER_SIZE / BG_PALETTE_BUFFER_CHUNK_SIZE];
+
+extern void CpuCopy(void* src, void* dest, u32 size);
+
+#ifndef NONMATCHING
+NAKED
+#endif
+void InitBGPaletteBuffer(void)
+{
+#ifdef NONMATCHING
+ u16 color = 0;
+ u16* ptr;
+ u32 i;
+ bool8 paletteUsed;
+
+ u8* p;
+
+ ptr = gBGPaletteBuffer;
+
+ i = 0x80;
+ i <<= 2;
+
+ do {
+ *ptr++ = color;
+ i--;
+ } while (i);
+
+ paletteUsed = TRUE;
+
+ p = gBGPaletteUsed;
+ p += 31;
+
+ do
+ *p-- = paletteUsed;
+ while ((s32) p >= (s32) &gBGPaletteUsed);
+#else
+ asm_unified("\tpush {lr}\n"
+ "\tmovs r2, 0\n"
+ "\tldr r1, =gBGPaletteBuffer\n"
+ "\tmovs r0, 0x80\n"
+ "\tlsls r0, 2\n"
+ "_0800463E:\n"
+ "\tstrh r2, [r1]\n"
+ "\tadds r1, 0x2\n"
+ "\tsubs r0, 0x1\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0800463E\n"
+ "\tldr r1, =gBGPaletteUsed\n"
+ "\tmovs r2, 0x1\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0x1F\n"
+ "_08004650:\n"
+ "\tstrb r2, [r0]\n"
+ "\tsubs r0, 0x1\n"
+ "\tcmp r0, r1\n"
+ "\tbge _08004650\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "\t.pool");
+#endif
+}
+
+#ifndef NONMATCHING
+NAKED
+#endif
+void SetBGPaletteBufferColorRGB(s32 index, u8 *RGBArray, s32 a1, u8 *a2)
+{
+#ifdef NONMATCHING
+ if (a1 < 0) {
+ a1 = 0;
+ }
+ if (a1 > 31) {
+ a1 = 31;
+ }
+ gBGPaletteUsed[index / 16] = 1;
+ if (!a2) {
+ gBGPaletteBuffer[index] = ((RGBArray[2] * a1 / 256 & 0x1F) << 10) | ((RGBArray[1] * a1 / 256 & 0x1F) << 5) | (RGBArray[0] * a1 / 256 & 0x1F);
+ }
+ else
+ {
+ gBGPaletteBuffer[index] = ((a2[4 * RGBArray[2] + 2] * a1 / 256 & 0x1F) << 10) | ((a2[4 * RGBArray[1] + 1] * a1 / 256 & 0x1F) << 5) | (a2[4 * RGBArray[0]] * a1 / 256 & 0x1F);
+ }
+#else
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tadds r4, r0, 0\n"
+ "\tadds r5, r1, 0\n"
+ "\tcmp r2, 0\n"
+ "\tbge _08004670\n"
+ "\tmovs r2, 0\n"
+ "_08004670:\n"
+ "\tcmp r2, 0x1F\n"
+ "\tble _08004676\n"
+ "\tmovs r2, 0x1F\n"
+ "_08004676:\n"
+ "\tldr r1, =gBGPaletteUsed\n"
+ "\tadds r0, r4, 0\n"
+ "\tcmp r4, 0\n"
+ "\tbge _08004680\n"
+ "\tadds r0, 0xF\n"
+ "_08004680:\n"
+ "\tasrs r0, 4\n"
+ "\tadds r0, r1\n"
+ "\tmovs r1, 0x1\n"
+ "\tstrb r1, [r0]\n"
+ "\tcmp r3, 0\n"
+ "\tbne _080046D4\n"
+ "\tldr r0, =gBGPaletteBuffer\n"
+ "\tlsls r1, r4, 1\n"
+ "\tadds r6, r1, r0\n"
+ "\tldrb r0, [r5, 0x2]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _0800469C\n"
+ "\tadds r0, 0xFF\n"
+ "_0800469C:\n"
+ "\tasrs r0, 8\n"
+ "\tmovs r3, 0x1F\n"
+ "\tands r0, r3\n"
+ "\tlsls r4, r0, 10\n"
+ "\tldrb r0, [r5, 0x1]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _080046AE\n"
+ "\tadds r0, 0xFF\n"
+ "_080046AE:\n"
+ "\tasrs r0, 8\n"
+ "\tands r0, r3\n"
+ "\tlsls r1, r0, 5\n"
+ "\torrs r1, r4\n"
+ "\tldrb r0, [r5]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _080046C0\n"
+ "\tadds r0, 0xFF\n"
+ "_080046C0:\n"
+ "\tasrs r0, 8\n"
+ "\tands r0, r3\n"
+ "\torrs r1, r0\n"
+ "\tstrh r1, [r6]\n"
+ "\tb _08004722\n"
+ "\t.align 2, 0\n"
+ "\t.pool\n"
+ "_080046D4:\n"
+ "\tldr r1, =gBGPaletteBuffer\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r7, r0, r1\n"
+ "\tldrb r0, [r5, 0x2]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0, 0x2]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _080046EA\n"
+ "\tadds r0, 0xFF\n"
+ "_080046EA:\n"
+ "\tasrs r0, 8\n"
+ "\tmovs r4, 0x1F\n"
+ "\tands r0, r4\n"
+ "\tlsls r6, r0, 10\n"
+ "\tldrb r0, [r5, 0x1]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _08004702\n"
+ "\tadds r0, 0xFF\n"
+ "_08004702:\n"
+ "\tasrs r0, 8\n"
+ "\tands r0, r4\n"
+ "\tlsls r1, r0, 5\n"
+ "\torrs r1, r6\n"
+ "\tldrb r0, [r5]\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tmuls r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbge _0800471A\n"
+ "\tadds r0, 0xFF\n"
+ "_0800471A:\n"
+ "\tasrs r0, 8\n"
+ "\tands r0, r4\n"
+ "\torrs r1, r0\n"
+ "\tstrh r1, [r7]\n"
+ "_08004722:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "\t.pool");
+#endif
+}
+
+void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray)
+{
+ gBGPaletteUsed[index / BG_PALETTE_BUFFER_CHUNK_SIZE] = TRUE;
+ gBGPaletteBuffer[index] = (colorArray[2] >> 3) << 10 | (colorArray[1] >> 3) << 5 | colorArray[0] >> 3;
+}
+
+void SetBGPaletteBufferColor(s32 index, u16 *color)
+{
+ gBGPaletteUsed[index / BG_PALETTE_BUFFER_CHUNK_SIZE] = TRUE;
+ gBGPaletteBuffer[index] = *color;
+}
+
+void nullsub_4(void)
+{
+
+}
+void nullsub_5(void)
+{
+
+}
+void nullsub_143(void)
+{
+
+}
+
+void TransferBGPaletteBuffer(void)
+{
+ u32 i;
+ s32 paletteBufferIndex;
+ u16 *dest;
+
+ i = 0;
+ paletteBufferIndex = 0;
+ dest = (u16 *)PLTT;
+ do
+ {
+ if (gBGPaletteUsed[i])
+ {
+ gBGPaletteUsed[i] = 0;
+ CpuCopy(dest, &gBGPaletteBuffer[paletteBufferIndex], sizeof(u16) * 16);
+ }
+ ++i;
+ dest += 16;
+ paletteBufferIndex += 16;
+ }
+ while ( paletteBufferIndex < BG_PALETTE_BUFFER_SIZE );
+}
diff --git a/src/file_system.c b/src/file_system.c
index 296478d..61d9ec4 100644
--- a/src/file_system.c
+++ b/src/file_system.c
@@ -1,33 +1,9 @@
#include "global.h"
+#include "file_system.h"
-struct File
-{
- char *name;
- u8 *data;
-};
-
-struct OpenedFile
-{
- struct File *file;
- u8 *data;
-};
-
-struct FileArchive
-{
- char magic[8];
- s32 count;
- struct File *entries;
-};
-
-struct SiroArchive
-{
- u32 magic;
- u8 *data;
-};
-
-extern struct OpenedFile gUnknown_202D2A8[];
+extern struct OpenedFile gFileCache[64];
-extern u32 gUnknown_203B094;
+extern u32 gFileCacheCursorPosition;
extern u32 gUnknown_202D2A4;
extern int sprintf(char *, const char *, ...);
@@ -41,11 +17,11 @@ void InitFileSystem(void)
for (i = 0; i < 64; i++)
{
- gUnknown_202D2A8[i].file = NULL;
- gUnknown_202D2A8[i].data = NULL;
+ gFileCache[i].file = NULL;
+ gFileCache[i].data = NULL;
}
- gUnknown_203B094 = 0;
+ gFileCacheCursorPosition = 0;
gUnknown_202D2A4 = 1;
}
@@ -56,14 +32,14 @@ u32 sub_800A8F8(u32 value)
return oldValue;
}
-struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
+struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc)
{
char buffer[0x12C];
s32 left, right;
s32 cursor;
s32 i;
- s32 magic = 0;
- s32 magicFound;
+ u32 magic = 0;
+ bool32 magicFound;
struct File *entries;
struct File *file;
@@ -71,7 +47,7 @@ struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
magicFound = 0;
- if (!(u8)magic)
+ if (!(bool8)magic)
magicFound = 1;
if (!magicFound)
@@ -108,18 +84,18 @@ struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
return NULL;
}
- cursor = gUnknown_203B094;
+ cursor = gFileCacheCursorPosition;
for (i = 0; i < 64; i++)
{
cursor++;
if (cursor > 63)
cursor = 0;
- if (!gUnknown_202D2A8[cursor].file)
+ if (!gFileCache[cursor].file)
{
- gUnknown_202D2A8[cursor].file = file;
- gUnknown_202D2A8[cursor].data = NULL;
- return &gUnknown_202D2A8[cursor];
+ gFileCache[cursor].file = file;
+ gFileCache[cursor].data = NULL;
+ return &gFileCache[cursor];
}
}
@@ -138,7 +114,7 @@ u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused)
return GetSiroPtr(openedFile);
}
-struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
+struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
struct OpenedFile *openedFile = OpenFile(filename, arc);
if (openedFile)
@@ -146,7 +122,7 @@ struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive
return openedFile;
}
-struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
+struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
return OpenFileAndGetFileDataPtr(filename, arc);
}
@@ -157,11 +133,11 @@ void CloseFile(struct OpenedFile *openedFile)
for (i = 0; i < 64; i++)
{
- if (&gUnknown_202D2A8[i] == openedFile)
+ if (&gFileCache[i] == openedFile)
{
- gUnknown_202D2A8[i].file = NULL;
- gUnknown_202D2A8[i].data = NULL;
- gUnknown_203B094 = i;
+ gFileCache[i].file = NULL;
+ gFileCache[i].data = NULL;
+ gFileCacheCursorPosition = i;
return;
}
}
diff --git a/src/flash.c b/src/flash.c
index b9ccf40..11520b4 100644
--- a/src/flash.c
+++ b/src/flash.c
@@ -1,12 +1,11 @@
#include "global.h"
#include "gba/flash.h"
#include "flash.h"
+#include "memory.h"
extern u8 gFlashEnabled;
extern FlashIntrFunc *sub_800B6E8(s32);
-extern void MemoryFill8(void *, u8, s32);
-extern void MemoryCopy8(void *, void *, s32);
static u8 TryProgramSector(s32, u8 *);
diff --git a/src/m4a_2.c b/src/m4a_2.c
new file mode 100644
index 0000000..ce9ac19
--- /dev/null
+++ b/src/m4a_2.c
@@ -0,0 +1,947 @@
+#include "gba/m4a_internal.h"
+#include "global.h"
+
+extern char SoundMainRAM_Buffer[0x400];
+
+extern struct SoundInfo gSoundInfo;
+
+
+u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
+{
+ u32 val1;
+ u32 val2;
+ u32 fineAdjustShifted = fineAdjust << 24;
+
+ if (key > 178)
+ {
+ key = 178;
+ fineAdjustShifted = 255 << 24;
+ }
+
+ val1 = gScaleTable[key];
+ val1 = gFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gScaleTable[key + 1];
+ val2 = gFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted));
+}
+
+void UnusedDummyFunc()
+{
+}
+
+void MPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void MPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aSoundInit(void)
+{
+ s32 i;
+
+ CpuCopy32((void *)((s32)SoundMainRAM & ~1), SoundMainRAM_Buffer, sizeof(SoundMainRAM_Buffer));
+
+ SoundInit(&gSoundInfo);
+ MPlayExtender(gCgbChans);
+ m4aSoundMode(SOUND_MODE_DA_BIT_8
+ | SOUND_MODE_FREQ_18157
+ | (14 << SOUND_MODE_MASVOL_SHIFT)
+ | (5 << SOUND_MODE_MAXCHN_SHIFT));
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ {
+ struct MusicPlayerInfo *mplayInfo = gMPlayTable[i].info;
+ MPlayOpen(mplayInfo, gMPlayTable[i].track, gMPlayTable[i].unk_8);
+ mplayInfo->unk_B = gMPlayTable[i].unk_A;
+ mplayInfo->memAccArea = gMPlayMemAccArea;
+ }
+}
+
+void m4aSoundMain(void)
+{
+ SoundMain();
+}
+
+void m4aSongNumStart(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ MPlayStart(mplay->info, song->header);
+}
+
+void m4aSongNumStartOrChange(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ else
+ {
+ if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplay->info->status & MUSICPLAYER_STATUS_PAUSE))
+ {
+ MPlayStart(mplay->info, song->header);
+ }
+ }
+}
+
+void m4aSongNumStartOrContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader != song->header)
+ MPlayStart(mplay->info, song->header);
+ else if ((mplay->info->status & MUSICPLAYER_STATUS_TRACK) == 0)
+ MPlayStart(mplay->info, song->header);
+ else if (mplay->info->status & MUSICPLAYER_STATUS_PAUSE)
+ MPlayContinue(mplay->info);
+}
+
+
+void m4aSongNumStop(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ m4aMPlayStop(mplay->info);
+}
+
+void m4aSongNumContinue(u16 n)
+{
+ const struct MusicPlayer *mplayTable = gMPlayTable;
+ const struct Song *songTable = gSongTable;
+ const struct Song *song = &songTable[n];
+ const struct MusicPlayer *mplay = &mplayTable[song->ms];
+
+ if (mplay->info->songHeader == song->header)
+ MPlayContinue(mplay->info);
+}
+
+void m4aMPlayAllStop(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ m4aMPlayStop(gMPlayTable[i].info);
+}
+
+void m4aMPlayContinue(struct MusicPlayerInfo *mplayInfo)
+{
+ MPlayContinue(mplayInfo);
+}
+
+void m4aMPlayAllContinue(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_MUSIC_PLAYERS; i++)
+ MPlayContinue(gMPlayTable[i].info);
+}
+
+void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ MPlayFadeOut(mplayInfo, speed);
+}
+
+void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT) | TEMPORARY_FADE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->fadeOC = speed;
+ mplayInfo->fadeOI = speed;
+ mplayInfo->fadeOV = (0 << FADE_VOL_SHIFT) | FADE_IN;
+ mplayInfo->status &= ~MUSICPLAYER_STATUS_PAUSE;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 trackCount = mplayInfo->trackCount;
+ struct MusicPlayerTrack *track = mplayInfo->tracks;
+
+ while (trackCount > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ if (track->flags & MPT_FLG_START)
+ {
+ Clear64byte(track);
+ track->flags = MPT_FLG_EXIST;
+ track->bendRange = 2;
+ track->volX = 64;
+ track->lfoSpeed = 22;
+ track->tone.type = 1;
+ }
+ }
+
+ trackCount--;
+ track++;
+ }
+}
+
+void MPlayExtender(struct CgbChannel *cgbChans)
+{
+ struct SoundInfo *soundInfo;
+ u32 ident;
+
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_L = 0; // set master volume to zero
+ REG_NR12 = 0x8;
+ REG_NR22 = 0x8;
+ REG_NR42 = 0x8;
+ REG_NR14 = 0x80;
+ REG_NR24 = 0x80;
+ REG_NR44 = 0x80;
+ REG_NR30 = 0;
+ REG_NR50 = 0x77;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ ident = soundInfo->ident;
+
+ if (ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ gMPlayJumpTable[8] = ply_memacc;
+ gMPlayJumpTable[17] = ply_lfos;
+ gMPlayJumpTable[19] = ply_mod;
+ gMPlayJumpTable[28] = ply_xcmd;
+ gMPlayJumpTable[29] = ply_endtie;
+ gMPlayJumpTable[30] = SampleFreqSet;
+ gMPlayJumpTable[31] = TrackStop;
+ gMPlayJumpTable[32] = FadeOutBody;
+ gMPlayJumpTable[33] = TrkVolPitSet;
+
+ soundInfo->cgbChans = (struct CgbChannel *)cgbChans;
+ soundInfo->CgbSound = CgbSound;
+ soundInfo->CgbOscOff = CgbOscOff;
+ soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq;
+ soundInfo->maxLines = MAX_LINES;
+
+ CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4);
+
+ cgbChans[0].ty = 1;
+ cgbChans[0].panMask = 0x11;
+ cgbChans[1].ty = 2;
+ cgbChans[1].panMask = 0x22;
+ cgbChans[2].ty = 3;
+ cgbChans[2].panMask = 0x44;
+ cgbChans[3].ty = 4;
+ cgbChans[3].panMask = 0x88;
+
+ soundInfo->ident = ident;
+}
+
+void MusicPlayerJumpTableCopy(void)
+{
+ asm("swi 0x2A");
+}
+
+void ClearChain(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[34]);
+ func(x);
+}
+
+void Clear64byte(void *x)
+{
+ void (*func)(void *) = *(&gMPlayJumpTable[35]);
+ func(x);
+}
+
+void SoundInit(struct SoundInfo *soundInfo)
+{
+ soundInfo->ident = 0;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+ REG_SOUNDCNT_X = SOUND_MASTER_ENABLE
+ | SOUND_4_ON
+ | SOUND_3_ON
+ | SOUND_2_ON
+ | SOUND_1_ON;
+ REG_SOUNDCNT_H = SOUND_B_FIFO_RESET | SOUND_B_TIMER_0 | SOUND_B_LEFT_OUTPUT
+ | SOUND_A_FIFO_RESET | SOUND_A_TIMER_0 | SOUND_A_RIGHT_OUTPUT
+ | SOUND_ALL_MIX_FULL;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
+
+ REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
+ REG_DMA1DAD = (s32)&REG_FIFO_A;
+ REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
+ REG_DMA2DAD = (s32)&REG_FIFO_B;
+
+ SOUND_INFO_PTR = soundInfo;
+ CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
+
+ soundInfo->maxChans = 8;
+ soundInfo->masterVolume = 15;
+ soundInfo->plynote = (u32)ply_note;
+ soundInfo->CgbSound = DummyFunc;
+ soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
+ soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
+ soundInfo->ExtVolPit = (u32)DummyFunc;
+
+ MPlayJumpTableCopy(gMPlayJumpTable);
+
+ soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
+
+ SampleFreqSet(SOUND_MODE_FREQ_13379);
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SampleFreqSet(u32 freq)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ freq = (freq & 0xF0000) >> 16;
+ soundInfo->freq = freq;
+ soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
+ soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
+
+ // LCD refresh rate 59.7275Hz
+ soundInfo->pcmFreq = (597275 * soundInfo->pcmSamplesPerVBlank + 5000) / 10000;
+
+ // CPU frequency 16.78Mhz
+ soundInfo->divFreq = (16777216 / soundInfo->pcmFreq + 1) >> 1;
+
+ // Turn off timer 0.
+ REG_TM0CNT_H = 0;
+
+ // cycles per LCD fresh 280896
+ REG_TM0CNT_L = -(280896 / soundInfo->pcmSamplesPerVBlank);
+
+ m4aSoundVSyncOn();
+
+ while (*(vu8 *)REG_ADDR_VCOUNT == 159)
+ ;
+
+ while (*(vu8 *)REG_ADDR_VCOUNT != 159)
+ ;
+
+ REG_TM0CNT_H = TIMER_ENABLE | TIMER_1CLK;
+}
+
+void m4aSoundMode(u32 mode)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 temp;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ temp = mode & (SOUND_MODE_REVERB_SET | SOUND_MODE_REVERB_VAL);
+
+ if (temp)
+ soundInfo->reverb = temp & SOUND_MODE_REVERB_VAL;
+
+ temp = mode & SOUND_MODE_MAXCHN;
+
+ if (temp)
+ {
+ struct SoundChannel *chan;
+
+ soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
+
+ temp = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (temp != 0)
+ {
+ chan->status = 0;
+ temp--;
+ chan++;
+ }
+ }
+
+ temp = mode & SOUND_MODE_MASVOL;
+
+ if (temp)
+ soundInfo->masterVolume = temp >> SOUND_MODE_MASVOL_SHIFT;
+
+ temp = mode & SOUND_MODE_DA_BIT;
+
+ if (temp)
+ {
+ temp = (temp & 0x300000) >> 14;
+ REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | temp;
+ }
+
+ temp = mode & SOUND_MODE_FREQ;
+
+ if (temp)
+ {
+ m4aSoundVSyncOff();
+ SampleFreqSet(temp);
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void SoundClear(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ s32 i;
+ void *chan;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ i = MAX_DIRECTSOUND_CHANNELS;
+ chan = &soundInfo->chans[0];
+
+ while (i > 0)
+ {
+ ((struct SoundChannel *)chan)->status = 0;
+ i--;
+ chan = (void *)((s32)chan + sizeof(struct SoundChannel));
+ }
+
+ chan = soundInfo->cgbChans;
+
+ if (chan)
+ {
+ i = 1;
+
+ while (i <= 4)
+ {
+ soundInfo->CgbOscOff(i);
+ ((struct CgbChannel *)chan)->sf = 0;
+ i++;
+ chan = (void *)((s32)chan + sizeof(struct CgbChannel));
+ }
+ }
+
+ soundInfo->ident = ID_NUMBER;
+}
+
+void m4aSoundVSyncOff(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
+ {
+ soundInfo->ident += 10;
+
+ if (REG_DMA1CNT & (DMA_REPEAT << 16))
+ REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ if (REG_DMA2CNT & (DMA_REPEAT << 16))
+ REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4;
+
+ REG_DMA1CNT_H = DMA_32BIT;
+ REG_DMA2CNT_H = DMA_32BIT;
+
+ CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
+ }
+}
+
+void m4aSoundVSyncOn(void)
+{
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+ u32 ident = soundInfo->ident;
+
+ if (ident == ID_NUMBER)
+ return;
+
+ REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+ REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT;
+
+ soundInfo->pcmDmaCounter = 0;
+ soundInfo->ident = ident - 10;
+}
+
+void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tracks, u8 trackCount)
+{
+ struct SoundInfo *soundInfo;
+
+ if (trackCount == 0)
+ return;
+
+ if (trackCount > MAX_MUSICPLAYER_TRACKS)
+ trackCount = MAX_MUSICPLAYER_TRACKS;
+
+ soundInfo = SOUND_INFO_PTR;
+
+ if (soundInfo->ident != ID_NUMBER)
+ return;
+
+ soundInfo->ident++;
+
+ Clear64byte(mplayInfo);
+
+ mplayInfo->tracks = tracks;
+ mplayInfo->trackCount = trackCount;
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ while (trackCount != 0)
+ {
+ tracks->flags = 0;
+ trackCount--;
+ tracks++;
+ }
+
+ if (soundInfo->func != 0)
+ {
+ mplayInfo->func = soundInfo->func;
+ mplayInfo->intp = soundInfo->intp;
+ soundInfo->func = 0;
+ }
+
+ soundInfo->intp = (u32)mplayInfo;
+ soundInfo->func = (u32)MPlayMain;
+ soundInfo->ident = ID_NUMBER;
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader)
+{
+ s32 i;
+ u8 unk_B;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ unk_B = mplayInfo->unk_B;
+
+ if (!unk_B
+ || ((!mplayInfo->songHeader || !(mplayInfo->tracks[0].flags & MPT_FLG_START))
+ && ((mplayInfo->status & MUSICPLAYER_STATUS_TRACK) == 0
+ || (mplayInfo->status & MUSICPLAYER_STATUS_PAUSE)))
+ || (mplayInfo->priority <= songHeader->priority))
+ {
+ mplayInfo->ident++;
+ mplayInfo->status = 0;
+ mplayInfo->songHeader = songHeader;
+ mplayInfo->tone = songHeader->tone;
+ mplayInfo->priority = songHeader->priority;
+ mplayInfo->clock = 0;
+ mplayInfo->tempoD = 150;
+ mplayInfo->tempoI = 150;
+ mplayInfo->tempoU = 0x100;
+ mplayInfo->tempoC = 0;
+ mplayInfo->fadeOI = 0;
+
+ i = 0;
+ track = mplayInfo->tracks;
+
+ while (i < songHeader->trackCount && i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = MPT_FLG_EXIST | MPT_FLG_START;
+ track->chan = 0;
+ track->cmdPtr = songHeader->part[i];
+ i++;
+ track++;
+ }
+
+ while (i < mplayInfo->trackCount)
+ {
+ TrackStop(mplayInfo, track);
+ track->flags = 0;
+ i++;
+ track++;
+ }
+
+ if (songHeader->reverb & 0x80)
+ m4aSoundMode(songHeader->reverb);
+
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ TrackStop(mplayInfo, track);
+ i--;
+ track++;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
+{
+ s32 i;
+ struct MusicPlayerTrack *track;
+ u16 fadeOI = mplayInfo->fadeOI;
+ register u32 temp asm("r3");
+ register u16 mask asm("r2");
+
+ if (fadeOI == 0)
+ return;
+
+ mplayInfo->fadeOC--;
+
+ temp = 0xFFFF;
+ mask = temp;
+
+ if (mplayInfo->fadeOC != 0)
+ return;
+
+ mplayInfo->fadeOC = fadeOI;
+
+ if (mplayInfo->fadeOV & FADE_IN)
+ {
+ mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT);
+
+ if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT))
+ {
+ mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT);
+ mplayInfo->fadeOI = 0;
+ }
+ }
+ else
+ {
+ mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT);
+
+ if ((s16)(mplayInfo->fadeOV & mask) <= 0)
+ {
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ register u32 fadeOV asm("r7");
+ u32 val;
+
+ TrackStop(mplayInfo, track);
+
+ val = TEMPORARY_FADE;
+ fadeOV = mplayInfo->fadeOV;
+ val &= fadeOV;
+
+ if (!val)
+ track->flags = 0;
+
+ i--;
+ track++;
+ }
+
+ if (mplayInfo->fadeOV & TEMPORARY_FADE)
+ mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
+ else
+ mplayInfo->status = MUSICPLAYER_STATUS_PAUSE;
+
+ mplayInfo->fadeOI = 0;
+ return;
+ }
+ }
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+
+ while (i > 0)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = (mplayInfo->fadeOV >> FADE_VOL_SHIFT);
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+
+ i--;
+ track++;
+ }
+}
+
+void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ if (track->flags & MPT_FLG_VOLSET)
+ {
+ s32 x;
+ s32 y;
+
+ x = (u32)(track->vol * track->volX) >> 5;
+
+ if (track->modT == 1)
+ x = (u32)(x * (track->modM + 128)) >> 7;
+
+ y = 2 * track->pan + track->panX;
+
+ if (track->modT == 2)
+ y += track->modM;
+
+ if (y < -128)
+ y = -128;
+ else if (y > 127)
+ y = 127;
+
+ track->volMR = (u32)((y + 128) * x) >> 8;
+ track->volML = (u32)((127 - y) * x) >> 8;
+ }
+
+ if (track->flags & MPT_FLG_PITSET)
+ {
+ s32 bend = track->bend * track->bendRange;
+ register s32 x asm("r1") = track->tune;
+ x += bend;
+ x *= 4;
+ x += (track->keyShift << 8);
+ x += (track->keyShiftX << 8);
+ x += track->pitX;
+
+ if (track->modT == 0)
+ x += 16 * track->modM;
+
+ track->keyM = x >> 8;
+ track->pitM = x;
+ }
+
+ track->flags &= ~(MPT_FLG_PITSET | MPT_FLG_VOLSET);
+}
+
+u32 MidiKeyToCgbFreq(u8 chanNum, u8 key, u8 fineAdjust)
+{
+ if (chanNum == 4)
+ {
+ if (key <= 20)
+ {
+ key = 0;
+ }
+ else
+ {
+ key -= 21;
+ if (key > 59)
+ key = 59;
+ }
+
+ return gNoiseTable[key];
+ }
+ else
+ {
+ s32 val1;
+ s32 val2;
+
+ if (key <= 35)
+ {
+ fineAdjust = 0;
+ key = 0;
+ }
+ else
+ {
+ key -= 36;
+ if (key > 130)
+ {
+ key = 130;
+ fineAdjust = 255;
+ }
+ }
+
+ val1 = gCgbScaleTable[key];
+ val1 = gCgbFreqTable[val1 & 0xF] >> (val1 >> 4);
+
+ val2 = gCgbScaleTable[key + 1];
+ val2 = gCgbFreqTable[val2 & 0xF] >> (val2 >> 4);
+
+ return val1 + ((fineAdjust * (val2 - val1)) >> 8) + 2048;
+ }
+}
+
+void CgbOscOff(u8 chanNum)
+{
+ switch (chanNum)
+ {
+ case 1:
+ REG_NR12 = 8;
+ REG_NR14 = 0x80;
+ break;
+ case 2:
+ REG_NR22 = 8;
+ REG_NR24 = 0x80;
+ break;
+ case 3:
+ REG_NR30 = 0;
+ break;
+ default:
+ REG_NR42 = 8;
+ REG_NR44 = 0x80;
+ }
+}
+
+static inline int CgbPan(struct CgbChannel *chan)
+{
+ u32 rightVolume = chan->rightVolume;
+ u32 leftVolume = chan->leftVolume;
+
+ if ((rightVolume = (u8)rightVolume) >= (leftVolume = (u8)leftVolume))
+ {
+ if (rightVolume / 2 >= leftVolume)
+ {
+ chan->pan = 0x0F;
+ return 1;
+ }
+ }
+ else
+ {
+ if (leftVolume / 2 >= rightVolume)
+ {
+ chan->pan = 0xF0;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+#ifndef NONMATCHING
+NAKED
+#endif
+void CgbModVol(struct CgbChannel *chan)
+{
+#ifdef NONMATCHING
+ struct SoundInfo *soundInfo = SOUND_INFO_PTR;
+
+ if ((soundInfo->mode & 1) || !CgbPan(chan))
+ {
+ chan->pan = 0xFF;
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ }
+ else
+ {
+ // Force chan->rightVolume and chan->leftVolume to be read from memory again,
+ // even though there is no reason to do so.
+ // The command line option "-fno-gcse" achieves the same result as this.
+ asm("" : : : "memory");
+
+ chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4;
+ if (chan->eg > 15)
+ chan->eg = 15;
+ }
+
+ chan->sg = (chan->eg * chan->su + 15) >> 4;
+ chan->pan &= chan->panMask;
+#else
+ asm_unified("\tpush {r4,lr}\n"
+ "\tadds r1, r0, 0\n"
+ "\tldrb r0, [r1, 0x2]\n"
+ "\tlsls r2, r0, 24\n"
+ "\tlsrs r4, r2, 24\n"
+ "\tldrb r3, [r1, 0x3]\n"
+ "\tlsls r0, r3, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tcmp r4, r3\n"
+ "\tbcc _080AFA94\n"
+ "\tlsrs r0, r2, 25\n"
+ "\tcmp r0, r3\n"
+ "\tbcc _080AFAA0\n"
+ "\tmovs r0, 0xF\n"
+ "\tstrb r0, [r1, 0x1B]\n"
+ "\tb _080AFAAE\n"
+ "_080AFA94:\n"
+ "\tlsrs r0, 25\n"
+ "\tcmp r0, r4\n"
+ "\tbcc _080AFAA0\n"
+ "\tmovs r0, 0xF0\n"
+ "\tstrb r0, [r1, 0x1B]\n"
+ "\tb _080AFAAE\n"
+ "_080AFAA0:\n"
+ "\tmovs r0, 0xFF\n"
+ "\tstrb r0, [r1, 0x1B]\n"
+ "\tldrb r2, [r1, 0x3]\n"
+ "\tldrb r3, [r1, 0x2]\n"
+ "\tadds r0, r2, r3\n"
+ "\tlsrs r0, 4\n"
+ "\tb _080AFABE\n"
+ "_080AFAAE:\n"
+ "\tldrb r2, [r1, 0x3]\n"
+ "\tldrb r3, [r1, 0x2]\n"
+ "\tadds r0, r2, r3\n"
+ "\tlsrs r0, 4\n"
+ "\tstrb r0, [r1, 0xA]\n"
+ "\tcmp r0, 0xF\n"
+ "\tbls _080AFAC0\n"
+ "\tmovs r0, 0xF\n"
+ "_080AFABE:\n"
+ "\tstrb r0, [r1, 0xA]\n"
+ "_080AFAC0:\n"
+ "\tldrb r2, [r1, 0x6]\n"
+ "\tldrb r3, [r1, 0xA]\n"
+ "\tadds r0, r2, 0\n"
+ "\tmuls r0, r3\n"
+ "\tadds r0, 0xF\n"
+ "\tasrs r0, 4\n"
+ "\tstrb r0, [r1, 0x19]\n"
+ "\tldrb r0, [r1, 0x1C]\n"
+ "\tldrb r2, [r1, 0x1B]\n"
+ "\tands r0, r2\n"
+ "\tstrb r0, [r1, 0x1B]\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n");
+#endif
+} \ No newline at end of file
diff --git a/src/m4a_4.c b/src/m4a_4.c
new file mode 100644
index 0000000..595ea5a
--- /dev/null
+++ b/src/m4a_4.c
@@ -0,0 +1,384 @@
+#include "gba/m4a_internal.h"
+
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo)
+{
+ if (mplayInfo->ident == ID_NUMBER)
+ {
+ mplayInfo->ident++;
+ mplayInfo->tempoU = tempo;
+ mplayInfo->tempoI = (mplayInfo->tempoD * mplayInfo->tempoU) >> 8;
+ mplayInfo->ident = ID_NUMBER;
+ }
+}
+
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->volX = volume / 4;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->keyShiftX = pitch >> 8;
+ track->pitX = pitch;
+ track->flags |= MPT_FLG_PITCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->panX = pan;
+ track->flags |= MPT_FLG_VOLCHG;
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void ClearModM(struct MusicPlayerTrack *track)
+{
+ track->lfoSpeedC = 0;
+ track->modM = 0;
+
+ if (track->modT == 0)
+ track->flags |= MPT_FLG_PITCHG;
+ else
+ track->flags |= MPT_FLG_VOLCHG;
+}
+
+void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->mod = modDepth;
+
+ if (!track->mod)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed)
+{
+ s32 i;
+ u32 bit;
+ struct MusicPlayerTrack *track;
+
+ if (mplayInfo->ident != ID_NUMBER)
+ return;
+
+ mplayInfo->ident++;
+
+ i = mplayInfo->trackCount;
+ track = mplayInfo->tracks;
+ bit = 1;
+
+ while (i > 0)
+ {
+ if (trackBits & bit)
+ {
+ if (track->flags & MPT_FLG_EXIST)
+ {
+ track->lfoSpeed = lfoSpeed;
+
+ if (!track->lfoSpeed)
+ ClearModM(track);
+ }
+ }
+
+ i--;
+ track++;
+ bit <<= 1;
+ }
+
+ mplayInfo->ident = ID_NUMBER;
+}
+
+#define MEMACC_COND_JUMP(cond) \
+if (cond) \
+ goto cond_true; \
+else \
+ goto cond_false; \
+
+void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 op;
+ u8 *addr;
+ u8 data;
+
+ op = *track->cmdPtr;
+ track->cmdPtr++;
+
+ addr = mplayInfo->memAccArea + *track->cmdPtr;
+ track->cmdPtr++;
+
+ data = *track->cmdPtr;
+ track->cmdPtr++;
+
+ switch (op)
+ {
+ case 0:
+ *addr = data;
+ return;
+ case 1:
+ *addr += data;
+ return;
+ case 2:
+ *addr -= data;
+ return;
+ case 3:
+ *addr = mplayInfo->memAccArea[data];
+ return;
+ case 4:
+ *addr += mplayInfo->memAccArea[data];
+ return;
+ case 5:
+ *addr -= mplayInfo->memAccArea[data];
+ return;
+ case 6:
+ MEMACC_COND_JUMP(*addr == data)
+ return;
+ case 7:
+ MEMACC_COND_JUMP(*addr != data)
+ return;
+ case 8:
+ MEMACC_COND_JUMP(*addr > data)
+ return;
+ case 9:
+ MEMACC_COND_JUMP(*addr >= data)
+ return;
+ case 10:
+ MEMACC_COND_JUMP(*addr <= data)
+ return;
+ case 11:
+ MEMACC_COND_JUMP(*addr < data)
+ return;
+ case 12:
+ MEMACC_COND_JUMP(*addr == mplayInfo->memAccArea[data])
+ return;
+ case 13:
+ MEMACC_COND_JUMP(*addr != mplayInfo->memAccArea[data])
+ return;
+ case 14:
+ MEMACC_COND_JUMP(*addr > mplayInfo->memAccArea[data])
+ return;
+ case 15:
+ MEMACC_COND_JUMP(*addr >= mplayInfo->memAccArea[data])
+ return;
+ case 16:
+ MEMACC_COND_JUMP(*addr <= mplayInfo->memAccArea[data])
+ return;
+ case 17:
+ MEMACC_COND_JUMP(*addr < mplayInfo->memAccArea[data])
+ return;
+ default:
+ return;
+ }
+
+cond_true:
+ {
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]);
+ func(mplayInfo, track);
+ return;
+ }
+
+cond_false:
+ track->cmdPtr += 4;
+}
+
+void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 n = *track->cmdPtr;
+ track->cmdPtr++;
+
+ gXcmdTable[n](mplayInfo, track);
+}
+
+void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]);
+ func(mplayInfo, track);
+}
+
+#define READ_XCMD_BYTE(var, n) \
+{ \
+ u32 byte = track->cmdPtr[(n)]; \
+ byte <<= n * 8; \
+ (var) &= ~(0xFF << (n * 8)); \
+ (var) |= byte; \
+}
+
+void ply_xwave(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ u32 wav;
+
+ READ_XCMD_BYTE(wav, 0) // UB: uninitialized variable
+ READ_XCMD_BYTE(wav, 1)
+ READ_XCMD_BYTE(wav, 2)
+ READ_XCMD_BYTE(wav, 3)
+
+ track->tone.wav = (struct WaveData *)wav;
+ track->cmdPtr += 4;
+}
+
+void ply_xtype(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.type = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xatta(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.attack = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xdeca(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.decay = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xsust(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.sustain = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.release = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoVolume = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->echoLength = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xleng(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.length = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track)
+{
+ track->tone.pan_sweep = *track->cmdPtr;
+ track->cmdPtr++;
+}
+
+void DummyFunc()
+{
+ ;
+}
diff --git a/src/m4a_tables.c b/src/m4a_tables.c
new file mode 100644
index 0000000..fd289a6
--- /dev/null
+++ b/src/m4a_tables.c
@@ -0,0 +1,223 @@
+#include "gba/m4a_internal.h"
+
+// Some of these functions have different signatures, so we need to make this
+// an array of void pointers or a struct. It's simpler to just make it an array
+// for now.
+void * const gMPlayJumpTableTemplate[] =
+{
+ ply_fine,
+ ply_goto,
+ ply_patt,
+ ply_pend,
+ ply_rept,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_prio,
+ ply_tempo,
+ ply_keysh,
+ ply_voice,
+ ply_vol,
+ ply_pan,
+ ply_bend,
+ ply_bendr,
+ ply_lfos,
+ ply_lfodl,
+ ply_mod,
+ ply_modt,
+ ply_fine,
+ ply_fine,
+ ply_tune,
+ ply_fine,
+ ply_fine,
+ ply_fine,
+ ply_port,
+ ply_fine,
+ ply_endtie,
+ SampleFreqSet,
+ TrackStop,
+ FadeOutBody,
+ TrkVolPitSet,
+ RealClearChain,
+ SoundMainBTM,
+};
+
+const u8 gScaleTable[] =
+{
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
+};
+
+const u32 gFreqTable[] =
+{
+ 2147483648u,
+ 2275179671u,
+ 2410468894u,
+ 2553802834u,
+ 2705659852u,
+ 2866546760u,
+ 3037000500u,
+ 3217589947u,
+ 3408917802u,
+ 3611622603u,
+ 3826380858u,
+ 4053909305u,
+};
+
+const u16 gPcmSamplesPerVBlankTable[] =
+{
+ 96,
+ 132,
+ 176,
+ 224,
+ 264,
+ 304,
+ 352,
+ 448,
+ 528,
+ 608,
+ 672,
+ 704,
+};
+
+const u8 gCgbScaleTable[] =
+{
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
+};
+
+const s16 gCgbFreqTable[] =
+{
+ -2004,
+ -1891,
+ -1785,
+ -1685,
+ -1591,
+ -1501,
+ -1417,
+ -1337,
+ -1262,
+ -1192,
+ -1125,
+ -1062,
+};
+
+const u8 gNoiseTable[] =
+{
+ 0xD7, 0xD6, 0xD5, 0xD4,
+ 0xC7, 0xC6, 0xC5, 0xC4,
+ 0xB7, 0xB6, 0xB5, 0xB4,
+ 0xA7, 0xA6, 0xA5, 0xA4,
+ 0x97, 0x96, 0x95, 0x94,
+ 0x87, 0x86, 0x85, 0x84,
+ 0x77, 0x76, 0x75, 0x74,
+ 0x67, 0x66, 0x65, 0x64,
+ 0x57, 0x56, 0x55, 0x54,
+ 0x47, 0x46, 0x45, 0x44,
+ 0x37, 0x36, 0x35, 0x34,
+ 0x27, 0x26, 0x25, 0x24,
+ 0x17, 0x16, 0x15, 0x14,
+ 0x07, 0x06, 0x05, 0x04,
+ 0x03, 0x02, 0x01, 0x00,
+};
+
+const u8 gCgb3Vol[] =
+{
+ 0x00, 0x00,
+ 0x60, 0x60, 0x60, 0x60,
+ 0x40, 0x40, 0x40, 0x40,
+ 0x80, 0x80, 0x80, 0x80,
+ 0x20, 0x20,
+};
+
+const u8 gClockTable[] =
+{
+ 0x00,
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x05,
+ 0x06,
+ 0x07,
+ 0x08,
+ 0x09,
+ 0x0A,
+ 0x0B,
+ 0x0C,
+ 0x0D,
+ 0x0E,
+ 0x0F,
+ 0x10,
+ 0x11,
+ 0x12,
+ 0x13,
+ 0x14,
+ 0x15,
+ 0x16,
+ 0x17,
+ 0x18,
+ 0x1C,
+ 0x1E,
+ 0x20,
+ 0x24,
+ 0x28,
+ 0x2A,
+ 0x2C,
+ 0x30,
+ 0x34,
+ 0x36,
+ 0x38,
+ 0x3C,
+ 0x40,
+ 0x42,
+ 0x44,
+ 0x48,
+ 0x4C,
+ 0x4E,
+ 0x50,
+ 0x54,
+ 0x58,
+ 0x5A,
+ 0x5C,
+ 0x60,
+};
+
+const XcmdFunc gXcmdTable[] =
+{
+ ply_xxx,
+ ply_xwave,
+ ply_xtype,
+ ply_xxx,
+ ply_xatta,
+ ply_xdeca,
+ ply_xsust,
+ ply_xrele,
+ ply_xiecv,
+ ply_xiecl,
+ ply_xleng,
+ ply_xswee
+};
diff --git a/src/memory.c b/src/memory.c
new file mode 100644
index 0000000..05c89a2
--- /dev/null
+++ b/src/memory.c
@@ -0,0 +1,145 @@
+#include "global.h"
+#include "memory.h"
+
+extern struct HeapFreeListElement gMainHeapFreeList[32];
+extern u8 gMainHeap[HEAP_SIZE];
+extern u32 gHeapCount;
+extern struct HeapDescriptor gMainHeapDescriptor;
+extern struct HeapDescriptor *gHeapDescriptorList[8];
+
+extern void CpuClear(u32 *dest, s32 size);
+
+void InitHeapInternal(void);
+
+void InitHeap(void)
+{
+ InitHeapInternal();
+}
+
+void MemoryClear8(u8 *dest, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = 0;
+ }
+}
+
+void MemoryClear16(u16 *dest, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = 0;
+ }
+}
+void MemoryClear32(u32 *dest, s32 size)
+{
+ CpuClear(dest, size);
+}
+
+void MemoryFill8(u8 *dest, u8 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = value;
+ }
+}
+
+void MemoryFill16(u16 *dest, u16 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = value;
+ }
+}
+
+void MemoryFill32(u32 *dest, u32 value, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 4;
+ *dest++ = value;
+ }
+}
+
+void MemoryCopy8(u8 *dest, u8 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 1;
+ *dest++ = *src++;
+ }
+}
+
+void MemoryCopy16(u16 *dest, u16 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 2;
+ *dest++ = *src++;
+ }
+}
+
+void MemoryCopy32(u32 *dest, u32 *src, s32 size)
+{
+ while (size > 0)
+ {
+ size -= 4;
+ *dest++ = *src++;
+ }
+}
+
+void InitHeapInternal(void)
+{
+ struct HeapSettings settings;
+
+ settings.start = gMainHeap;
+ settings.size = HEAP_SIZE;
+ gHeapCount = 0;
+ DoInitHeap(&gMainHeapDescriptor, &settings, gMainHeapFreeList, sizeof(gMainHeapFreeList) / sizeof(struct HeapFreeListElement));
+}
+
+void DoInitHeap(struct HeapDescriptor *descriptor, struct HeapSettings *settings, struct HeapFreeListElement *freeList, u32 freeListLength)
+{
+ u32 aligned_size;
+
+ aligned_size = settings->size & 0xFFFFFFFC;
+
+ gHeapDescriptorList[gHeapCount++] = descriptor;
+
+ descriptor->start = settings->start;
+ descriptor->size = aligned_size;
+ descriptor->unk0 = 2;
+ descriptor->parentHeap = NULL;
+ descriptor->freeList = freeList;
+ descriptor->freeCount = 1;
+ descriptor->freeListLength = freeListLength;
+
+ freeList->unk_atb = 0;
+ freeList->atb = 0;
+ freeList->block.start = descriptor->start;
+ freeList->block.size = aligned_size;
+ freeList->block.allocatedSize = 0;
+ freeList->grp = 0;
+}
+
+void InitSubHeap(struct HeapDescriptor *parentHeap, struct HeapMemoryBlock *block, u32 freeListMax)
+{
+ u32 freeListSize;
+ u32 aligned_size;
+ u32 alignment;
+ struct HeapFreeListElement *freeList;
+ struct HeapSettings settings;
+
+ freeListSize = freeListMax * 3;
+ alignment = ~3;
+ freeListSize *= 8;
+ aligned_size = (block->size - freeListSize) & alignment;
+ freeList = (struct HeapFreeListElement *)block->start;
+ settings.start = &((u8 *)block->start)[freeListSize];
+ settings.size = aligned_size;
+ DoInitHeap(parentHeap, &settings, freeList, freeListMax);
+}
diff --git a/src/save.c b/src/save.c
new file mode 100644
index 0000000..5d39bfe
--- /dev/null
+++ b/src/save.c
@@ -0,0 +1,64 @@
+#include "global.h"
+
+extern u32 gUnknown_203B17C;
+extern u32 gUnknown_203B180;
+extern u32 *gUnknown_203B184;
+extern u32 gUnknown_202DE28;
+
+
+u32 sub_8011C1C(void)
+{
+ return gUnknown_203B17C;
+}
+
+void sub_8011C28(u32 in)
+{
+ gUnknown_203B17C = in;
+}
+
+u32 sub_8011C34(void)
+{
+ return gUnknown_202DE28;
+}
+
+void sub_8011C40(u32 in)
+{
+ gUnknown_202DE28 = in;
+}
+
+u32 sub_8011C4C(void)
+{
+ return gUnknown_203B180;
+}
+
+void CalculateChecksum(u8 *out, u32 size)
+{
+ u32 checksum = 0;
+ s32 i = size / 4;
+ if (i > 1)
+ {
+ u32 *ptr = (u32 *)&out[4];
+ --i;
+ do
+ checksum += *ptr++;
+ while (--i);
+ }
+ *(u32 *)out = checksum;
+}
+
+bool8 ValidateChecksum(u8 *in, u32 size)
+{
+ u32 checksum = 0;
+ s32 i = size / 4;
+ if (i > 1)
+ {
+ u32 *ptr = (u32 *)&in[4];
+ --i;
+ do
+ checksum += *ptr++;
+ while (--i);
+ }
+ if (*(u32 *)in != checksum)
+ return TRUE;
+ return FALSE;
+}
diff --git a/src/save1.c b/src/save1.c
new file mode 100644
index 0000000..b7de6c6
--- /dev/null
+++ b/src/save1.c
@@ -0,0 +1,13 @@
+#include "global.h"
+
+extern void MemoryFree(void *);
+
+extern u8 *gUnknown_203B194;
+
+void sub_80129FC()
+{
+ if (gUnknown_203B194) {
+ MemoryFree(gUnknown_203B194);
+ gUnknown_203B194 = NULL;
+ }
+}
diff --git a/src/sprite.c b/src/sprite.c
new file mode 100644
index 0000000..d741fce
--- /dev/null
+++ b/src/sprite.c
@@ -0,0 +1,10 @@
+#include "global.h"
+
+void ResetSprites(bool32);
+void SetSavingIconCoords(u32);
+
+void InitSprites(void)
+{
+ ResetSprites(1);
+ SetSavingIconCoords(0);
+}
diff --git a/src/text.c b/src/text.c
new file mode 100644
index 0000000..9de996a
--- /dev/null
+++ b/src/text.c
@@ -0,0 +1,198 @@
+#include "global.h"
+#include "file_system.h"
+#include "code_800558C.h"
+#include "code_800B540.h"
+
+struct UnkTextStruct1 {
+ u8 fill00[4];
+ u16 unk04;
+ u8 fill06[2];
+ u16 unk08;
+ u8 fill04[0x3c];
+ u8 unk46;
+};
+
+struct UnkTextStruct2 {
+ u8 fill00[0x0c];
+ s16 unk0c;
+ u8 fill0e[2];
+ s16 unk10;
+ u8 fill12[0x06];
+};
+
+extern char gUnknown_3000E94[];
+
+EWRAM_DATA struct UnkTextStruct1 gUnknown_2027370[4];
+EWRAM_DATA u8 *gKanji[2];
+EWRAM_DATA u16 gUnknown_2027498;
+EWRAM_DATA u8 gUnknown_20274A5;
+EWRAM_DATA u32 gUnknown_20274AC;
+EWRAM_DATA vu32 gUnknown_20274B0;
+EWRAM_DATA u8 gUnknown_20274B4[0x3b00];
+EWRAM_DATA struct OpenedFile *gKanjiFiles[2];
+EWRAM_DATA struct UnkTextStruct2 gUnknown_202AFC0[4];
+EWRAM_DATA u32 gUnknown_202B020;
+EWRAM_DATA u32 gUnknown_202B024;
+EWRAM_DATA u32 gUnknown_202B028[2];
+EWRAM_DATA u32 gUnknown_202B030;
+EWRAM_DATA u8 gUnknown_202B034;
+EWRAM_DATA u16 gUnknown_202B038[2][32][32];
+
+u32 xxx_update_some_bg_tiles(u32 a0);
+void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3);
+void sub_8006554(void *a0, void *a1, void *a2, void *a3, u32 a4, const struct UnkTextStruct2 *a5, u8 a6, u32 a7, u32 *a8, u32 a9);
+void sub_800898C(void);
+void sub_80089AC(const struct UnkTextStruct2 *a0, void *a1);
+void sub_8009388(void);
+
+extern const struct UnkTextStruct2 gUnknown_80B857C[4];
+extern const char gUnknown_80B87B4[];
+extern const char gUnknown_80B87BC[];
+extern const struct FileArchive gUnknown_8300500;
+extern const u32 gUnknown_80B87C4[8];
+extern const u32 gUnknown_80B87E4[8];
+extern const u32 gUnknown_80B8804[4];
+
+void sub_8006218(void)
+{
+ int i;
+ int j;
+ int k;
+
+ gUnknown_20274AC = 0;
+ gKanjiFiles[0] = OpenFileAndGetFileDataPtr(gUnknown_80B87B4, &gUnknown_8300500);
+ gKanjiFiles[1] = OpenFileAndGetFileDataPtr(gUnknown_80B87BC, &gUnknown_8300500);
+ gKanji[0] = gKanjiFiles[0]->data;
+ gKanji[1] = gKanjiFiles[1]->data;
+ gUnknown_202B028[0] = 11;
+ gUnknown_202B028[1] = 12;
+ for (k = 0; k < 4; k++)
+ {
+ gUnknown_2027370[k].unk04 = 0;
+ gUnknown_2027370[k].unk08 = 0;
+ gUnknown_2027370[k].unk46 = 0;
+ }
+ gUnknown_2027498 = 0;
+ for (i = 0; i < 20; i++)
+ {
+ gUnknown_202B038[0][i][0] = 0xf279;
+ gUnknown_202B038[1][i][0] = 0xf27a;
+ for (j = 1; j < 32; j++)
+ {
+ gUnknown_202B038[0][i][j] = 0;
+ gUnknown_202B038[1][i][j] = 0xf27a;
+ }
+ }
+ gUnknown_202B034 = 1;
+ gUnknown_202B030 = 0x88888888;
+ gUnknown_203B078 = NULL;
+ gUnknown_20274A5 = 0;
+ gUnknown_202B020 = 1;
+ gUnknown_202B024 = 20;
+ xxx_update_some_bg_tiles(0);
+}
+
+u32 xxx_update_some_bg_tiles(u32 a0)
+{
+ u32 r5 = gUnknown_20274B0;
+ u32 *r4 = (u32 *)(VRAM + 0x4f40);
+ const u32 *r2;
+ gUnknown_20274B0 = a0;
+ if (a0 == 0 || a0 == 2)
+ {
+ sub_800CDA8(2);
+ r2 = gUnknown_80B87C4;
+ }
+ else
+ {
+ sub_800CDA8(1);
+ r2 = gUnknown_80B87E4;
+ }
+ gUnknown_202B030 = 0x88888888;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ return r5;
+}
+
+u32 sub_80063B0(void)
+{
+ return gUnknown_20274B0;
+}
+
+u8 sub_80063BC(u8 a0)
+{
+ u8 retval = gUnknown_202B034;
+ gUnknown_202B034 = a0;
+ return retval;
+}
+
+void sub_80063CC(u32 a0)
+{
+ gUnknown_20274AC = a0;
+}
+
+void sub_80063D8(int a0)
+{
+ u32 retval;
+ if (a0 == 0)
+ {
+ gUnknown_20274B0;
+ retval = 0x88888888;
+ }
+ else
+ {
+ retval = (a0 & 0xf) | ((a0 & 0xf) << 4);
+ retval |= ((a0 & 0xf) << 8);
+ retval |= ((a0 & 0xf) << 12);
+ retval |= ((a0 & 0xf) << 16);
+ retval |= ((a0 & 0xf) << 20);
+ retval |= ((a0 & 0xf) << 24);
+ retval |= ((a0 & 0xf) << 28);
+ }
+ gUnknown_202B030 = retval;
+}
+
+void sub_800641C(void *a0, u8 a1, u8 a2)
+{
+ u32 r3 = 0;
+ sub_8006438(a0, a1, a2, &r3);
+}
+
+void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3)
+{
+ int i;
+ u32 r9 = 2;
+
+ if (a0 == NULL)
+ a0 = gUnknown_80B857C;
+ if (a2)
+ sub_8009388();
+ sub_800898C();
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_202AFC0[i] = a0[i];
+ if (a0[i].unk0c)
+ {
+ sub_8006554(gUnknown_2027370, (void *)VRAM, gUnknown_20274B4, gUnknown_202B038, gUnknown_80B8804[i], a0 + i, a1, r9, a3, 0);
+ sub_80089AC(a0 + i, a3);
+ r9 += a0[i].unk0c * a0[i].unk10;
+ }
+ }
+#ifdef NONMATCHING
+ gUnknown_203B078 = gUnknown_3000E94;
+ gUnknown_20274A5 = 1;
+#else
+ asm_unified("\tldr r2, =gUnknown_203B078\n"
+ "\tldr r0, =gUnknown_3000E94\n"
+ "\tldr r1, =gUnknown_20274A5\n"
+ "\tstr r0, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1]");
+#endif
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index ebfde64..1d287ee 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1,1054 +1,1053 @@
- .space 0x8F0
+ . += 0x8F0;
-gUnknown_20008F0: @ 20008F0
- .space 0x80
+gUnknown_20008F0 = .; /* 20008F0 */
+ . += 0x80;
-gUnknown_2000970: @ 2000970
- .space 0xC0
+gUnknown_2000970 = .; /* 2000970 */
+ . += 0xC0;
-gUnknown_2000A30: @ 2000A30
- .space 0x50
+gMPlayMemAccArea = .; /* 2000A30 */
+ . += 0x50;
-gUnknown_2000A80: @ 2000A80
- .space 0x8
+gUnknown_2000A80 = .; /* 2000A80 */
+ . += 0x8;
-gUnknown_2000A88: @ 2000A88
- .space 0x400
+gUnknown_2000A88 = .; /* 2000A88 */
+ . += 0x400;
-gUnknown_2000E88: @ 2000E88
- .space 0x20
+gHeapDescriptorList = .; /* 2000E88 */
+ . += 0x20;
-gUnknown_2000EA8: @ 2000EA8
- .space 0x8
+gHeapCount = .; /* 2000EA8 */
+ . += 0x4;
+ . = ALIGN(16);
-gUnknown_2000EB0: @ 2000EB0
- .space 0x20
+gMainHeapDescriptor = .; /* 2000EB0 */
+ . += 0x20;
-gUnknown_2000ED0: @ 2000ED0
- .space 0x300
+gMainHeapFreeList = .; /* 2000ED0 */
+ . += 0x300;
-gUnknown_20011D0: @ 20011D0
- .space 0x24000
+gMainHeap = .; /* 20011D0 */
+ . += 0x24000;
-gUnknown_20251D0: @ 20251D0
- .space 0x20
+gBGPaletteUsed = .; /* 20251D0 */
+ . += 0x20;
-gUnknown_20251F0: @ 20251F0
- .space 0x400
+gBGPaletteBuffer = .; /* 20251F0 */
+ . += 0x400;
-gUnknown_20255F0: @ 20255F0
- .space 0x10
+gUnknown_20255F0 = .; /* 20255F0 */
+ . += 0x10;
-gUnknown_2025600: @ 2025600
- .space 0x2C
+gUnknown_2025600 = .; /* 2025600 */
+ . += 0x2C;
-gUnknown_202562C: @ 202562C
- .space 0xC
+gUnknown_202562C = .; /* 202562C */
+ . += 0xC;
-gUnknown_2025638: @ 2025638
- .space 0x10
+gUnknown_2025638 = .; /* 2025638 */
+ . += 0x10;
-gUnknown_2025648: @ 2025648
- .space 0x10
+gUnknown_2025648 = .; /* 2025648 */
+ . += 0x10;
-gUnknown_2025658: @ 2025658
- .space 0x10
+gUnknown_2025658 = .; /* 2025658 */
+ . += 0x10;
-gUnknown_2025668: @ 2025668
- .space 0x8
+gUnknown_2025668 = .; /* 2025668 */
+ . += 0x8;
-gUnknown_2025670: @ 2025670
- .space 0x2
+gUnknown_2025670 = .; /* 2025670 */
+ . += 0x2;
-gUnknown_2025672: @ 2025672
- .space 0x10
+gUnknown_2025672 = .; /* 2025672 */
+ . += 0x10;
-gUnknown_2025682: @ 2025682
- .space 0x12
+gUnknown_2025682 = .; /* 2025682 */
+ . += 0x12;
-gUnknown_2025694: @ 2025694
- .space 0x4
+gUnknown_2025694 = .; /* 2025694 */
+ . += 0x4;
-gUnknown_2025698: @ 2025698
- .space 0x8
+gUnknown_2025698 = .; /* 2025698 */
+ . += 0x8;
-gUnknown_20256A0: @ 20256A0
- .space 0x808
+gUnknown_20256A0 = .; /* 20256A0 */
+ . += 0x808;
-gUnknown_2025EA8: @ 2025EA8
- .space 0x400
+gUnknown_2025EA8 = .; /* 2025EA8 */
+ . += 0x400;
-gUnknown_20262A8: @ 20262A8
- .space 0x400
+gUnknown_20262A8 = .; /* 20262A8 */
+ . += 0x400;
-gUnknown_20266A8: @ 20266A8
- .space 0x8
+gSpriteCount = .; /* 20266A8 */
+ . += 0x8;
-gUnknown_20266B0: @ 20266B0
- .space 0x780
+gUnknown_20266B0 = .; /* 20266B0 */
+ . += 0x780;
-gUnknown_2026E30: @ 2026E30
- .space 0x8
+gCharMemCursor = .; /* 2026E30 */
+ . += 0x8;
-gUnknown_2026E38: @ 2026E38
- .space 0x4
+gUnknown_2026E38 = .; /* 2026E38 */
+ . += 0x4;
-gUnknown_2026E3C: @ 2026E3C
- .space 0x4
+gUnknown_2026E3C = .; /* 2026E3C */
+ . += 0x4;
-gUnknown_2026E40: @ 2026E40
- .space 0x4
+gUnknown_2026E40 = .; /* 2026E40 */
+ . += 0x4;
-gUnknown_2026E44: @ 2026E44
- .space 0x4
+gUnknown_2026E44 = .; /* 2026E44 */
+ . += 0x4;
-gUnknown_2026E48: @ 2026E48
- .space 0x4
+gUnknown_2026E48 = .; /* 2026E48 */
+ . += 0x4;
-gUnknown_2026E4C: @ 2026E4C
- .space 0x2
+gUnknown_2026E4C = .; /* 2026E4C */
+ . += 0x2;
-gUnknown_2026E4E: @ 2026E4E
- .space 0x2
+gUnknown_2026E4E = .; /* 2026E4E */
+ . += 0x2;
-gUnknown_2026E50: @ 2026E50
- .space 0x4
+gUnknown_2026E50 = .; /* 2026E50 */
+ . += 0x4;
-gUnknown_2026E54: @ 2026E54
- .space 0x4
+gUnknown_2026E54 = .; /* 2026E54 */
+ . += 0x4;
-gUnknown_2026E58: @ 2026E58
- .space 0x8
+gUnknown_2026E58 = .; /* 2026E58 */
+ . += 0x8;
-gUnknown_2026E60: @ 2026E60
- .space 0x288
+gUnknown_2026E60 = .; /* 2026E60 */
+ . += 0x288;
-gUnknown_20270E8: @ 20270E8
- .space 0x288
+gUnknown_20270E8 = .; /* 20270E8 */
+ . += 0x288;
-gUnknown_2027370: @ 2027370
- .space 0x48
+gUnknown_2027370 = .; /* 2027370 */
+ . += 0x48;
-gUnknown_20273B8: @ 20273B8
- .space 0xD8
+gUnknown_20273B8 = .; /* 20273B8 */
+ . += 0xD8;
-gUnknown_2027490: @ 2027490
- .space 0x8
+gKanji = .; /* 2027490 */
+ . += 0x8;
-gUnknown_2027498: @ 2027498
- .space 0x2
+gUnknown_2027498 = .; /* 2027498 */
+ . += 0x2;
-gUnknown_202749A: @ 202749A
- .space 0xB
+gUnknown_202749A = .; /* 202749A */
+ . += 0xB;
-gUnknown_20274A5: @ 20274A5
- .space 0x1
+gUnknown_20274A5 = .; /* 20274A5 */
+ . += 0x1;
-gUnknown_20274A6: @ 20274A6
- .space 0x6
+gUnknown_20274A6 = .; /* 20274A6 */
+ . += 0x6;
-gUnknown_20274AC: @ 20274AC
- .space 0x4
+gUnknown_20274AC = .; /* 20274AC */
+ . += 0x4;
-gUnknown_20274B0: @ 20274B0
- .space 0x4
+gUnknown_20274B0 = .; /* 20274B0 */
+ . += 0x4;
-gUnknown_20274B4: @ 20274B4
- .space 0x3B00
+gUnknown_20274B4 = .; /* 20274B4 */
+ . += 0x3B00;
-gUnknown_202AFB4: @ 202AFB4
- .space 0xC
+gKanjiFiles = .; /* 202AFB4 */
+ . += 0x8;
-gUnknown_202AFC0: @ 202AFC0
- .space 0x60
+gUnknown_202AFBC = .; /* 202AFBC */
+ . += 0x4;
-gUnknown_202B020: @ 202B020
- .space 0x4
+gUnknown_202AFC0 = .; /* 202AFC0 */
+ . += 0x60;
-gUnknown_202B024: @ 202B024
- .space 0x4
+gUnknown_202B020 = .; /* 202B020 */
+ . += 0x4;
-gUnknown_202B028: @ 202B028
- .space 0x8
+gUnknown_202B024 = .; /* 202B024 */
+ . += 0x4;
-gUnknown_202B030: @ 202B030
- .space 0x4
+gUnknown_202B028 = .; /* 202B028 */
+ . += 0x8;
-gUnknown_202B034: @ 202B034
- .space 0x4
+gUnknown_202B030 = .; /* 202B030 */
+ . += 0x4;
-gUnknown_202B038: @ 202B038
- .space 0x2
+gUnknown_202B034 = .; /* 202B034 */
+ . += 0x4;
-gUnknown_202B03A: @ 202B03A
- .space 0x7FE
+gUnknown_202B038 = .; /* 202B038 */
+ . += 0x2;
-gUnknown_202B838: @ 202B838
- .space 0x800
+gUnknown_202B03A = .; /* 202B03A */
+ . += 0x7FE;
-gUnknown_202C038: @ 202C038
- .space 0x800
+gUnknown_202B838 = .; /* 202B838 */
+ . += 0x800;
-gUnknown_202C838: @ 202C838
- .space 0x720
+gUnknown_202C038 = .; /* 202C038 */
+ . += 0x800;
-gUnknown_202CF58: @ 202CF58
- .space 0xE0
+gUnknown_202C838 = .; /* 202C838 */
+ . += 0x720;
-gUnknown_202D038: @ 202D038
- .space 0x4
+gUnknown_202CF58 = .; /* 202CF58 */
+ . += 0xE0;
-gUnknown_202D03C: @ 202D03C
- .space 0x1C
+gUnknown_202D038 = .; /* 202D038 */
+ . += 0x4;
-gUnknown_202D058: @ 202D058
- .space 0x10
+gUnknown_202D03C = .; /* 202D03C */
+ . += 0x1C;
-gUnknown_202D068: @ 202D068
- .space 0x4
+gUnknown_202D058 = .; /* 202D058 */
+ . += 0x10;
-gUnknown_202D06C: @ 202D06C
- .space 0xC
+gUnknown_202D068 = .; /* 202D068 */
+ . += 0x4;
-gUnknown_202D078: @ 202D078
- .space 0x20
+gUnknown_202D06C = .; /* 202D06C */
+ . += 0xC;
-gUnknown_202D098: @ 202D098
- .space 0x120
+gUnknown_202D078 = .; /* 202D078 */
+ . += 0x20;
-gUnknown_202D1B8: @ 202D1B8
- .space 0x40
+gUnknown_202D098 = .; /* 202D098 */
+ . += 0x120;
-gUnknown_202D1F8: @ 202D1F8
- .space 0x40
+gUnknown_202D1B8 = .; /* 202D1B8 */
+ . += 0x40;
-gUnknown_202D238: @ 202D238
- .space 0x4
+gUnknown_202D1F8 = .; /* 202D1F8 */
+ . += 0x40;
-gUnknown_202D23C: @ 202D23C
- .space 0x4
+gUnknown_202D238 = .; /* 202D238 */
+ . += 0x4;
-gUnknown_202D240: @ 202D240
- .space 0x60
+gUnknown_202D23C = .; /* 202D23C */
+ . += 0x4;
-gUnknown_202D2A0: @ 202D2A0
- .space 0x4
+gUnknown_202D240 = .; /* 202D240 */
+ . += 0x60;
-gUnknown_202D2A4: @ 202D2A4
- .space 0x4
+gUnknown_202D2A0 = .; /* 202D2A0 */
+ . += 0x4;
-gUnknown_202D2A8: @ 202D2A8
- .space 0x110
+gUnknown_202D2A4 = .; /* 202D2A4 */
+ . += 0x4;
-gUnknown_202D3B8: @ 202D3B8
- .space 0xF0
+gFileCache = .; /* 202D2A8 */
+ . += 0x200;
-gUnknown_202D4A8: @ 202D4A8
- .space 0x4
+gUnknown_202D4A8 = .; /* 202D4A8 */
+ . += 0x4;
-gUnknown_202D4AC: @ 202D4AC
- .space 0x4
+gUnknown_202D4AC = .; /* 202D4AC */
+ . += 0x4;
-gUnknown_202D4B0: @ 202D4B0
- .space 0x4
+gUnknown_202D4B0 = .; /* 202D4B0 */
+ . += 0x4;
-gUnknown_202D4B4: @ 202D4B4
- .space 0x4
+gUnknown_202D4B4 = .; /* 202D4B4 */
+ . += 0x4;
-gUnknown_202D4B8: @ 202D4B8
- .space 0x120
+gUnknown_202D4B8 = .; /* 202D4B8 */
+ . += 0x120;
-gIntrTable: @ 202D5D8
- .space 0x18
+gIntrTable = .; /* 202D5D8 */
+ . += 0x18;
-gUnknown_202D5F0: @ 202D5F0
- .space 0x18
+gUnknown_202D5F0 = .; /* 202D5F0 */
+ . += 0x18;
-gUnknown_202D608: @ 202D608
- .space 0x40
+gUnknown_202D608 = .; /* 202D608 */
+ . += 0x40;
-gUnknown_202D648: @ 202D648
- .space 0x40
+gUnknown_202D648 = .; /* 202D648 */
+ . += 0x40;
-gUnknown_202D688: @ 202D688
- .space 0x2
+gUnknown_202D688 = .; /* 202D688 */
+ . += 0x2;
-gUnknown_202D68A: @ 202D68A
- .space 0x2
+gUnknown_202D68A = .; /* 202D68A */
+ . += 0x2;
-gUnknown_202D68C: @ 202D68C
- .space 0x2
+gUnknown_202D68C = .; /* 202D68C */
+ . += 0x2;
-gUnknown_202D68E: @ 202D68E
- .space 0x2
+gUnknown_202D68E = .; /* 202D68E */
+ . += 0x2;
-gUnknown_202D690: @ 202D690
- .space 0x2
+gUnknown_202D690 = .; /* 202D690 */
+ . += 0x2;
-gUnknown_202D692: @ 202D692
- .space 0x2
+gUnknown_202D692 = .; /* 202D692 */
+ . += 0x2;
-gUnknown_202D694: @ 202D694
- .space 0x4
+gUnknown_202D694 = .; /* 202D694 */
+ . += 0x4;
-gUnknown_202D698: @ 202D698
- .space 0x8
+gUnknown_202D698 = .; /* 202D698 */
+ . += 0x8;
-gUnknown_202D6A0: @ 202D6A0
- .space 0x8
+gUnknown_202D6A0 = .; /* 202D6A0 */
+ . += 0x8;
-gUnknown_202D6A8: @ 202D6A8
- .space 0x8
+gUnknown_202D6A8 = .; /* 202D6A8 */
+ . += 0x8;
-gUnknown_202D6B0: @ 202D6B0
- .space 0x8
+gUnknown_202D6B0 = .; /* 202D6B0 */
+ . += 0x8;
-gUnknown_202D6B8: @ 202D6B8
- .space 0x1
+gUnknown_202D6B8 = .; /* 202D6B8 */
+ . += 0x1;
-gUnknown_202D6B9: @ 202D6B9
- .space 0x141
+gUnknown_202D6B9 = .; /* 202D6B9 */
+ . += 0x141;
-gUnknown_202D7FA: @ 202D7FA
- .space 0x2
+gUnknown_202D7FA = .; /* 202D7FA */
+ . += 0x2;
-gUnknown_202D7FC: @ 202D7FC
- .space 0x2
+gUnknown_202D7FC = .; /* 202D7FC */
+ . += 0x2;
-gUnknown_202D7FE: @ 202D7FE
- .space 0x2
+gUnknown_202D7FE = .; /* 202D7FE */
+ . += 0x2;
-gUnknown_202D800: @ 202D800
- .space 0x8
+gUnknown_202D800 = .; /* 202D800 */
+ . += 0x8;
-gUnknown_202D808: @ 202D808
- .space 0x108
+gUnknown_202D808 = .; /* 202D808 */
+ . += 0x108;
-gUnknown_202D910: @ 202D910
- .space 0x4
+gUnknown_202D910 = .; /* 202D910 */
+ . += 0x4;
-gUnknown_202D914: @ 202D914
- .space 0x20C
+gUnknown_202D914 = .; /* 202D914 */
+ . += 0x20C;
-gUnknown_202DB20: @ 202DB20
- .space 0x10
+gUnknown_202DB20 = .; /* 202DB20 */
+ . += 0x10;
-gUnknown_202DB30: @ 202DB30
- .space 0x20
+gUnknown_202DB30 = .; /* 202DB30 */
+ . += 0x20;
-gUnknown_202DB50: @ 202DB50
- .space 0x8
+gUnknown_202DB50 = .; /* 202DB50 */
+ . += 0x8;
-gUnknown_202DB58: @ 202DB58
- .space 0x8
+gUnknown_202DB58 = .; /* 202DB58 */
+ . += 0x8;
-gUnknown_202DB60: @ 202DB60
- .space 0x8
+gUnknown_202DB60 = .; /* 202DB60 */
+ . += 0x8;
-gUnknown_202DB68: @ 202DB68
- .space 0x4
+gUnknown_202DB68 = .; /* 202DB68 */
+ . += 0x4;
-gUnknown_202DB6C: @ 202DB6C
- .space 0x4
+gUnknown_202DB6C = .; /* 202DB6C */
+ . += 0x4;
-gUnknown_202DB70: @ 202DB70
- .space 0x4
+gUnknown_202DB70 = .; /* 202DB70 */
+ . += 0x4;
-gUnknown_202DB74: @ 202DB74
- .space 0x4
+gUnknown_202DB74 = .; /* 202DB74 */
+ . += 0x4;
-gUnknown_202DB78: @ 202DB78
- .space 0x40
+gUnknown_202DB78 = .; /* 202DB78 */
+ . += 0x40;
-gUnknown_202DBB8: @ 202DBB8
- .space 0x140
+gUnknown_202DBB8 = .; /* 202DBB8 */
+ . += 0x140;
-gUnknown_202DCF8: @ 202DCF8
- .space 0x120
+gUnknown_202DCF8 = .; /* 202DCF8 */
+ . += 0x120;
-gUnknown_202DE18: @ 202DE18
- .space 0x1
+gUnknown_202DE18 = .; /* 202DE18 */
+ . += 0x1;
-gUnknown_202DE19: @ 202DE19
- .space 0x3
+gUnknown_202DE19 = .; /* 202DE19 */
+ . += 0x3;
-gUnknown_202DE1C: @ 202DE1C
- .space 0x4
+gUnknown_202DE1C = .; /* 202DE1C */
+ . += 0x4;
-gUnknown_202DE20: @ 202DE20
- .space 0x2
+gUnknown_202DE20 = .; /* 202DE20 */
+ . += 0x2;
-gUnknown_202DE22: @ 202DE22
- .space 0x2
+gUnknown_202DE22 = .; /* 202DE22 */
+ . += 0x2;
-gUnknown_202DE24: @ 202DE24
- .space 0x4
+gUnknown_202DE24 = .; /* 202DE24 */
+ . += 0x4;
-gUnknown_202DE28: @ 202DE28
- .space 0x8
+gUnknown_202DE28 = .; /* 202DE28 */
+ . += 0x4;
+ . = ALIGN(16);
-gUnknown_202DE30: @ 202DE30
- .space 0x28
+gUnknown_202DE30 = .; /* 202DE30 */
+ . += 0x28;
-gUnknown_202DE58: @ 202DE58
- .space 0x50
+gUnknown_202DE58 = .; /* 202DE58 */
+ . += 0x50;
-gUnknown_202DEA8: @ 202DEA8
- .space 0xF0
+gUnknown_202DEA8 = .; /* 202DEA8 */
+ . += 0xF0;
-gUnknown_202DF98: @ 202DF98
- .space 0x50
+gUnknown_202DF98 = .; /* 202DF98 */
+ . += 0x50;
-gUnknown_202DFE8: @ 202DFE8
- .space 0x50
+gUnknown_202DFE8 = .; /* 202DFE8 */
+ . += 0x50;
-gUnknown_202E038: @ 202E038
- .space 0x50
+gUnknown_202E038 = .; /* 202E038 */
+ . += 0x50;
-gUnknown_202E088: @ 202E088
- .space 0xA0
+gUnknown_202E088 = .; /* 202E088 */
+ . += 0xA0;
-gUnknown_202E128: @ 202E128
- .space 0xA0
+gUnknown_202E128 = .; /* 202E128 */
+ . += 0xA0;
-gUnknown_202E1C8: @ 202E1C8
- .space 0x50
+gUnknown_202E1C8 = .; /* 202E1C8 */
+ . += 0x50;
-gUnknown_202E218: @ 202E218
- .space 0xA0
+gUnknown_202E218 = .; /* 202E218 */
+ . += 0xA0;
-gUnknown_202E2B8: @ 202E2B8
- .space 0x320
+gUnknown_202E2B8 = .; /* 202E2B8 */
+ . += 0x320;
-gUnknown_202E5D8: @ 202E5D8
- .space 0x50
+gUnknown_202E5D8 = .; /* 202E5D8 */
+ . += 0x50;
-gUnknown_202E628: @ 202E628
- .space 0xB8
+gUnknown_202E628 = .; /* 202E628 */
+ . += 0xB8;
-gUnknown_202E6E0: @ 202E6E0
- .space 0x8
+gUnknown_202E6E0 = .; /* 202E6E0 */
+ . += 0x8;
-gUnknown_202E6E8: @ 202E6E8
- .space 0x50
+gUnknown_202E6E8 = .; /* 202E6E8 */
+ . += 0x50;
-gUnknown_202E738: @ 202E738
- .space 0x4
+gUnknown_202E738 = .; /* 202E738 */
+ . += 0x4;
-gUnknown_202E73C: @ 202E73C
- .space 0x4
+gUnknown_202E73C = .; /* 202E73C */
+ . += 0x4;
-gUnknown_202E740: @ 202E740
- .space 0x4
+gUnknown_202E740 = .; /* 202E740 */
+ . += 0x4;
-gUnknown_202E744: @ 202E744
- .space 0x4
+gUnknown_202E744 = .; /* 202E744 */
+ . += 0x4;
-gUnknown_202E748: @ 202E748
- .space 0x34
+gUnknown_202E748 = .; /* 202E748 */
+ . += 0x34;
-gUnknown_202E77C: @ 202E77C
- .space 0x4
+gUnknown_202E77C = .; /* 202E77C */
+ . += 0x4;
-gUnknown_202E780: @ 202E780
- .space 0x4
+gUnknown_202E780 = .; /* 202E780 */
+ . += 0x4;
-gUnknown_202E784: @ 202E784
- .space 0x4
+gUnknown_202E784 = .; /* 202E784 */
+ . += 0x4;
-gUnknown_202E788: @ 202E788
- .space 0x4
+gUnknown_202E788 = .; /* 202E788 */
+ . += 0x4;
-gUnknown_202E78C: @ 202E78C
- .space 0x4
+gUnknown_202E78C = .; /* 202E78C */
+ . += 0x4;
-gUnknown_202E790: @ 202E790
- .space 0x1
+gUnknown_202E790 = .; /* 202E790 */
+ . += 0x1;
-gUnknown_202E791: @ 202E791
- .space 0x3
+gUnknown_202E791 = .; /* 202E791 */
+ . += 0x3;
-gUnknown_202E794: @ 202E794
- .space 0x4
+gUnknown_202E794 = .; /* 202E794 */
+ . += 0x4;
-gUnknown_202E798: @ 202E798
- .space 0x3E8
+gUnknown_202E798 = .; /* 202E798 */
+ . += 0x3E8;
-gUnknown_202EB80: @ 202EB80
- .space 0x40
+gUnknown_202EB80 = .; /* 202EB80 */
+ . += 0x40;
-gUnknown_202EBC0: @ 202EBC0
- .space 0x50
+gUnknown_202EBC0 = .; /* 202EBC0 */
+ . += 0x50;
-gUnknown_202EC10: @ 202EC10
- .space 0x4
+gUnknown_202EC10 = .; /* 202EC10 */
+ . += 0x4;
-gUnknown_202EC14: @ 202EC14
- .space 0x4
+gUnknown_202EC14 = .; /* 202EC14 */
+ . += 0x4;
-gUnknown_202EC18: @ 202EC18
- .space 0x4
+gUnknown_202EC18 = .; /* 202EC18 */
+ . += 0x4;
-gUnknown_202EC1C: @ 202EC1C
- .space 0x4
+gUnknown_202EC1C = .; /* 202EC1C */
+ . += 0x4;
-gUnknown_202EC20: @ 202EC20
- .space 0x8
+gUnknown_202EC20 = .; /* 202EC20 */
+ . += 0x8;
-gUnknown_202EC28: @ 202EC28
- .space 0x10
+gUnknown_202EC28 = .; /* 202EC28 */
+ . += 0x10;
-gUnknown_202EC38: @ 202EC38
- .space 0x8
+gUnknown_202EC38 = .; /* 202EC38 */
+ . += 0x8;
-gUnknown_202EC40: @ 202EC40
- .space 0x8
+gUnknown_202EC40 = .; /* 202EC40 */
+ . += 0x8;
-gUnknown_202EC48: @ 202EC48
- .space 0x4
+gUnknown_202EC48 = .; /* 202EC48 */
+ . += 0x4;
-gUnknown_202EC4C: @ 202EC4C
- .space 0x4
+gUnknown_202EC4C = .; /* 202EC4C */
+ . += 0x4;
-gUnknown_202EC50: @ 202EC50
- .space 0x38
+gUnknown_202EC50 = .; /* 202EC50 */
+ . += 0x38;
-gUnknown_202EC88: @ 202EC88
- .space 0x4
+gDungeonNameBannerPalette = .; /* 202EC88 */
+ . += 0x4;
-gUnknown_202EC8C: @ 202EC8C
- .space 0x4
+gDungeonNameBannerFontFile = .; /* 202EC8C */
+ . += 0x4;
-gUnknown_202EC90: @ 202EC90
- .space 0x4
+gDungeonNameBannerFont = .; /* 202EC90 */
+ . += 0x4;
-gUnknown_202EC94: @ 202EC94
- .space 0x4
+gUnknown_202EC94 = .; /* 202EC94 */
+ . += 0x4;
-gUnknown_202EC98: @ 202EC98
- .space 0x4
+gUnknown_202EC98 = .; /* 202EC98 */
+ . += 0x4;
-gUnknown_202EC9C: @ 202EC9C
- .space 0x4
+gUnknown_202EC9C = .; /* 202EC9C */
+ . += 0x4;
-gUnknown_202ECA0: @ 202ECA0
- .space 0x4
+gUnknown_202ECA0 = .; /* 202ECA0 */
+ . += 0x4;
-gUnknown_202ECA4: @ 202ECA4
- .space 0x84
+gUnknown_202ECA4 = .; /* 202ECA4 */
+ . += 0x84;
-gUnknown_202ED28: @ 202ED28
- .space 0x8
+gUnknown_202ED28 = .; /* 202ED28 */
+ . += 0x8;
-gUnknown_202ED30: @ 202ED30
- .space 0x88
+gUnknown_202ED30 = .; /* 202ED30 */
+ . += 0x88;
-gUnknown_202EDB8: @ 202EDB8
- .space 0x8
+gUnknown_202EDB8 = .; /* 202EDB8 */
+ . += 0x8;
-gUnknown_202EDC0: @ 202EDC0
- .space 0x8
+gUnknown_202EDC0 = .; /* 202EDC0 */
+ . += 0x8;
-gUnknown_202EDC8: @ 202EDC8
- .space 0x4
+gUnknown_202EDC8 = .; /* 202EDC8 */
+ . += 0x4;
-gUnknown_202EDCC: @ 202EDCC
- .space 0x4
+gUnknown_202EDCC = .; /* 202EDCC */
+ . += 0x4;
-gUnknown_202EDD0: @ 202EDD0
- .space 0x4
+gUnknown_202EDD0 = .; /* 202EDD0 */
+ . += 0x4;
-gUnknown_202EDD4: @ 202EDD4
- .space 0x4
+gUnknown_202EDD4 = .; /* 202EDD4 */
+ . += 0x4;
-gUnknown_202EDD8: @ 202EDD8
- .space 0x4
+gUnknown_202EDD8 = .; /* 202EDD8 */
+ . += 0x4;
-gUnknown_202EDDC: @ 202EDDC
- .space 0xC
+gUnknown_202EDDC = .; /* 202EDDC */
+ . += 0xC;
-gUnknown_202EDE8: @ 202EDE8
- .space 0x14
+gUnknown_202EDE8 = .; /* 202EDE8 */
+ . += 0x14;
-gUnknown_202EDFC: @ 202EDFC
- .space 0x4
+gUnknown_202EDFC = .; /* 202EDFC */
+ . += 0x4;
-gUnknown_202EE00: @ 202EE00
- .space 0x1
+gUnknown_202EE00 = .; /* 202EE00 */
+ . += 0x1;
-gUnknown_202EE01: @ 202EE01
- .space 0x1
+gUnknown_202EE01 = .; /* 202EE01 */
+ . += 0x1;
-gUnknown_202EE02: @ 202EE02
- .space 0x2
+gUnknown_202EE02 = .; /* 202EE02 */
+ . += 0x2;
-gUnknown_202EE04: @ 202EE04
- .space 0x4
+gUnknown_202EE04 = .; /* 202EE04 */
+ . += 0x4;
-gUnknown_202EE08: @ 202EE08
- .space 0x4
+gUnknown_202EE08 = .; /* 202EE08 */
+ . += 0x4;
-gUnknown_202EE0C: @ 202EE0C
- .space 0x4
+gUnknown_202EE0C = .; /* 202EE0C */
+ . += 0x4;
-gUnknown_202EE10: @ 202EE10
- .space 0x28
+gUnknown_202EE10 = .; /* 202EE10 */
+ . += 0x28;
-gUnknown_202EE38: @ 202EE38
- .space 0x1
+gUnknown_202EE38 = .; /* 202EE38 */
+ . += 0x1;
-gUnknown_202EE39: @ 202EE39
- .space 0x1
+gUnknown_202EE39 = .; /* 202EE39 */
+ . += 0x1;
-gUnknown_202EE3A: @ 202EE3A
- .space 0xA
+gUnknown_202EE3A = .; /* 202EE3A */
+ . += 0xA;
-gUnknown_202EE44: @ 202EE44
- .space 0x28
+gUnknown_202EE44 = .; /* 202EE44 */
+ . += 0x28;
-gUnknown_202EE6C: @ 202EE6C
- .space 0x4
+gUnknown_202EE6C = .; /* 202EE6C */
+ . += 0x4;
-gUnknown_202EE70: @ 202EE70
- .space 0x6
+gUnknown_202EE70 = .; /* 202EE70 */
+ . += 0x6;
-gUnknown_202EE76: @ 202EE76
- .space 0x12
+gUnknown_202EE76 = .; /* 202EE76 */
+ . += 0x12;
-gUnknown_202EE88: @ 202EE88
- .space 0x4
+gUnknown_202EE88 = .; /* 202EE88 */
+ . += 0x4;
-gUnknown_202EE8C: @ 202EE8C
- .space 0x300
+gUnknown_202EE8C = .; /* 202EE8C */
+ . += 0x300;
-gUnknown_202F18C: @ 202F18C
- .space 0x4
+gUnknown_202F18C = .; /* 202F18C */
+ . += 0x4;
-gUnknown_202F190: @ 202F190
- .space 0x18
+gUnknown_202F190 = .; /* 202F190 */
+ . += 0x18;
-gUnknown_202F1A8: @ 202F1A8
- .space 0x1
+gUnknown_202F1A8 = .; /* 202F1A8 */
+ . += 0x1;
-gUnknown_202F1A9: @ 202F1A9
- .space 0x1
+gUnknown_202F1A9 = .; /* 202F1A9 */
+ . += 0x1;
-gUnknown_202F1AA: @ 202F1AA
- .space 0x1
+gUnknown_202F1AA = .; /* 202F1AA */
+ . += 0x1;
-gUnknown_202F1AB: @ 202F1AB
- .space 0x1
+gUnknown_202F1AB = .; /* 202F1AB */
+ . += 0x1;
-gUnknown_202F1AC: @ 202F1AC
- .space 0x1
+gUnknown_202F1AC = .; /* 202F1AC */
+ . += 0x1;
-gUnknown_202F1AD: @ 202F1AD
- .space 0x1
+gUnknown_202F1AD = .; /* 202F1AD */
+ . += 0x1;
-gUnknown_202F1AE: @ 202F1AE
- .space 0x2
+gUnknown_202F1AE = .; /* 202F1AE */
+ . += 0x2;
-gUnknown_202F1B0: @ 202F1B0
- .space 0x2
+gUnknown_202F1B0 = .; /* 202F1B0 */
+ . += 0x2;
-gUnknown_202F1B2: @ 202F1B2
- .space 0x2
+gUnknown_202F1B2 = .; /* 202F1B2 */
+ . += 0x2;
-gUnknown_202F1B4: @ 202F1B4
- .space 0x4
+gUnknown_202F1B4 = .; /* 202F1B4 */
+ . += 0x4;
-gUnknown_202F1B8: @ 202F1B8
- .space 0x10
+gUnknown_202F1B8 = .; /* 202F1B8 */
+ . += 0x10;
-gUnknown_202F1C8: @ 202F1C8
- .space 0x4
+gUnknown_202F1C8 = .; /* 202F1C8 */
+ . += 0x4;
-gUnknown_202F1CC: @ 202F1CC
- .space 0x4
+gUnknown_202F1CC = .; /* 202F1CC */
+ . += 0x4;
-gUnknown_202F1D0: @ 202F1D0
- .space 0x4
+gUnknown_202F1D0 = .; /* 202F1D0 */
+ . += 0x4;
-gUnknown_202F1D4: @ 202F1D4
- .space 0x4
+gUnknown_202F1D4 = .; /* 202F1D4 */
+ . += 0x4;
-gUnknown_202F1D8: @ 202F1D8
- .space 0x4
+gUnknown_202F1D8 = .; /* 202F1D8 */
+ . += 0x4;
-gUnknown_202F1DC: @ 202F1DC
- .space 0x4
+gUnknown_202F1DC = .; /* 202F1DC */
+ . += 0x4;
-gUnknown_202F1E0: @ 202F1E0
- .space 0x1
+gUnknown_202F1E0 = .; /* 202F1E0 */
+ . += 0x1;
-gUnknown_202F1E1: @ 202F1E1
- .space 0x7
+gUnknown_202F1E1 = .; /* 202F1E1 */
+ . += 0x7;
-gUnknown_202F1E8: @ 202F1E8
- .space 0x8
+gUnknown_202F1E8 = .; /* 202F1E8 */
+ . += 0x8;
-gUnknown_202F1F0: @ 202F1F0
- .space 0x8
+gUnknown_202F1F0 = .; /* 202F1F0 */
+ . += 0x8;
-gUnknown_202F1F8: @ 202F1F8
- .space 0x4
+gUnknown_202F1F8 = .; /* 202F1F8 */
+ . += 0x4;
-gUnknown_202F1FC: @ 202F1FC
- .space 0x4
+gUnknown_202F1FC = .; /* 202F1FC */
+ . += 0x4;
-gUnknown_202F200: @ 202F200
- .space 0x8
+gUnknown_202F200 = .; /* 202F200 */
+ . += 0x8;
-gUnknown_202F208: @ 202F208
- .space 0x4
+gUnknown_202F208 = .; /* 202F208 */
+ . += 0x4;
-gUnknown_202F20C: @ 202F20C
- .space 0x4
+gUnknown_202F20C = .; /* 202F20C */
+ . += 0x4;
-gUnknown_202F210: @ 202F210
- .space 0x4
+gUnknown_202F210 = .; /* 202F210 */
+ . += 0x4;
-gUnknown_202F214: @ 202F214
- .space 0x4
+gUnknown_202F214 = .; /* 202F214 */
+ . += 0x4;
-gUnknown_202F218: @ 202F218
- .space 0x1
+gUnknown_202F218 = .; /* 202F218 */
+ . += 0x1;
-gUnknown_202F219: @ 202F219
- .space 0x1
+gUnknown_202F219 = .; /* 202F219 */
+ . += 0x1;
-gUnknown_202F21A: @ 202F21A
- .space 0x2
+gUnknown_202F21A = .; /* 202F21A */
+ . += 0x2;
-gUnknown_202F21C: @ 202F21C
- .space 0x4
+gUnknown_202F21C = .; /* 202F21C */
+ . += 0x4;
-gUnknown_202F220: @ 202F220
- .space 0x1
+gUnknown_202F220 = .; /* 202F220 */
+ . += 0x1;
-gUnknown_202F221: @ 202F221
- .space 0x1
+gUnknown_202F221 = .; /* 202F221 */
+ . += 0x1;
-gUnknown_202F222: @ 202F222
- .space 0x2
+gUnknown_202F222 = .; /* 202F222 */
+ . += 0x2;
-gUnknown_202F224: @ 202F224
- .space 0x4
+gUnknown_202F224 = .; /* 202F224 */
+ . += 0x4;
-gUnknown_202F228: @ 202F228
- .space 0x4
+gUnknown_202F228 = .; /* 202F228 */
+ . += 0x4;
-gUnknown_202F22C: @ 202F22C
- .space 0x1
+gUnknown_202F22C = .; /* 202F22C */
+ . += 0x1;
-gUnknown_202F22D: @ 202F22D
- .space 0x1
+gUnknown_202F22D = .; /* 202F22D */
+ . += 0x1;
-gUnknown_202F22E: @ 202F22E
- .space 0x2
+gUnknown_202F22E = .; /* 202F22E */
+ . += 0x2;
-gUnknown_202F230: @ 202F230
- .space 0x1
+gUnknown_202F230 = .; /* 202F230 */
+ . += 0x1;
-gUnknown_202F231: @ 202F231
- .space 0x7
+gUnknown_202F231 = .; /* 202F231 */
+ . += 0x7;
-gUnknown_202F238: @ 202F238
- .space 0x8
+gUnknown_202F238 = .; /* 202F238 */
+ . += 0x8;
-gUnknown_202F240: @ 202F240
- .space 0x8
+gUnknown_202F240 = .; /* 202F240 */
+ . += 0x8;
-gUnknown_202F248: @ 202F248
- .space 0x10
+gUnknown_202F248 = .; /* 202F248 */
+ . += 0x10;
-gUnknown_202F258: @ 202F258
- .space 0x8
+gUnknown_202F258 = .; /* 202F258 */
+ . += 0x8;
-gUnknown_202F260: @ 202F260
- .space 0x8
+gUnknown_202F260 = .; /* 202F260 */
+ . += 0x8;
-gUnknown_202F268: @ 202F268
- .space 0x8
+gUnknown_202F268 = .; /* 202F268 */
+ . += 0x8;
-gUnknown_202F270: @ 202F270
- .space 0x8
+gUnknown_202F270 = .; /* 202F270 */
+ . += 0x8;
-gUnknown_202F278: @ 202F278
- .space 0x60
+gUnknown_202F278 = .; /* 202F278 */
+ . += 0x60;
-gUnknown_202F2D8: @ 202F2D8
- .space 0x8
+gUnknown_202F2D8 = .; /* 202F2D8 */
+ . += 0x8;
-gUnknown_202F2E0: @ 202F2E0
- .space 0x8
+gUnknown_202F2E0 = .; /* 202F2E0 */
+ . += 0x8;
-gUnknown_202F2E8: @ 202F2E8
- .space 0x10
+gUnknown_202F2E8 = .; /* 202F2E8 */
+ . += 0x10;
-gUnknown_202F2F8: @ 202F2F8
- .space 0x4
+gUnknown_202F2F8 = .; /* 202F2F8 */
+ . += 0x4;
-gUnknown_202F2FC: @ 202F2FC
- .space 0x4
+gUnknown_202F2FC = .; /* 202F2FC */
+ . += 0x4;
-gUnknown_202F300: @ 202F300
- .space 0x8
+gUnknown_202F300 = .; /* 202F300 */
+ . += 0x8;
-gUnknown_202F308: @ 202F308
- .space 0x4
+gUnknown_202F308 = .; /* 202F308 */
+ . += 0x4;
-gUnknown_202F30C: @ 202F30C
- .space 0x4
+gUnknown_202F30C = .; /* 202F30C */
+ . += 0x4;
-gUnknown_202F310: @ 202F310
- .space 0x4
+gUnknown_202F310 = .; /* 202F310 */
+ . += 0x4;
-gUnknown_202F314: @ 202F314
- .space 0x8
+gUnknown_202F314 = .; /* 202F314 */
+ . += 0x8;
-gUnknown_202F31C: @ 202F31C
- .space 0x8
+gUnknown_202F31C = .; /* 202F31C */
+ . += 0x8;
-gUnknown_202F324: @ 202F324
- .space 0x8
+gUnknown_202F324 = .; /* 202F324 */
+ . += 0x8;
-gUnknown_202F32C: @ 202F32C
- .space 0x1
+gUnknown_202F32C = .; /* 202F32C */
+ . += 0x1;
-gUnknown_202F32D: @ 202F32D
- .space 0x3
+gUnknown_202F32D = .; /* 202F32D */
+ . += 0x3;
-gUnknown_202F330: @ 202F330
- .space 0x20
+gUnknown_202F330 = .; /* 202F330 */
+ . += 0x20;
-gUnknown_202F350: @ 202F350
- .space 0x8
+gUnknown_202F350 = .; /* 202F350 */
+ . += 0x8;
-gUnknown_202F358: @ 202F358
- .space 0x20
+gUnknown_202F358 = .; /* 202F358 */
+ . += 0x20;
-gUnknown_202F378: @ 202F378
- .space 0x8
+gUnknown_202F378 = .; /* 202F378 */
+ . += 0x8;
-gUnknown_202F380: @ 202F380
- .space 0x8
+gUnknown_202F380 = .; /* 202F380 */
+ . += 0x8;
-gUnknown_202F388: @ 202F388
- .space 0x8
+gUnknown_202F388 = .; /* 202F388 */
+ . += 0x8;
-gUnknown_202F390: @ 202F390
- .space 0x20
+gUnknown_202F390 = .; /* 202F390 */
+ . += 0x20;
-gUnknown_202F3B0: @ 202F3B0
- .space 0x20
+gUnknown_202F3B0 = .; /* 202F3B0 */
+ . += 0x20;
-gUnknown_202F3D0: @ 202F3D0
- .space 0x8
+gUnknown_202F3D0 = .; /* 202F3D0 */
+ . += 0x8;
-gUnknown_202F3D8: @ 202F3D8
- .space 0x8
+gUnknown_202F3D8 = .; /* 202F3D8 */
+ . += 0x8;
-gUnknown_202F3E0: @ 202F3E0
- .space 0x4
+gMonsterParameters = .; /* 202F3E0 */
+ . += 0x4;
-gUnknown_202F3E4: @ 202F3E4
- .space 0x4
+gMonsterParametersFile = .; /* 202F3E4 */
+ . += 0x4;
-gUnknown_202F3E8: @ 202F3E8
- .space 0x18
+gUnknown_202F3E8 = .; /* 202F3E8 */
+ . += 0x18;
-gUnknown_202F400: @ 202F400
- .space 0x90E8
+gUnknown_202F400 = .; /* 202F400 */
+ . += 0x90E8;
-gUnknown_20384E8: @ 20384E8
- .space 0x8
+gUnknown_20384E8 = .; /* 20384E8 */
+ . += 0x8;
-gUnknown_20384F0: @ 20384F0
- .space 0x4B0
+gUnknown_20384F0 = .; /* 20384F0 */
+ . += 0x4B0;
-gUnknown_20389A0: @ 20389A0
- .space 0x4
+gItemParametersFile = .; /* 20389A0 */
+ . += 0x8;
-gUnknown_20389A4: @ 20389A4
- .space 0x4
+gUnknown_20389A8 = .; /* 20389A8 */
+ . += 0x268;
-gUnknown_20389A8: @ 20389A8
- .space 0x268
+gUnknown_2038C10 = .; /* 2038C10 */
+ . += 0x18;
-gUnknown_2038C10: @ 2038C10
- .space 0x18
+gUnknown_2038C28 = .; /* 2038C28 */
+ . += 0x3C;
-gUnknown_2038C28: @ 2038C28
- .space 0x3C
+gWazaParametersFile = .; /* 2038C64 */
+ . += 0x4;
-gUnknown_2038C64: @ 2038C64
- .space 0x4
+gUnknown_2038C68 = .; /* 2038C68 */
+ . += 0x4;
-gUnknown_2038C68: @ 2038C68
- .space 0x4
+gUnknown_2038C6C = .; /* 2038C6C */
+ . += 0x4;
-gUnknown_2038C6C: @ 2038C6C
- .space 0x4
+gUnknown_2038C70 = .; /* 2038C70 */
+ . += 0x10;
-gUnknown_2038C70: @ 2038C70
- .space 0x10
+gUnknown_2038C80 = .; /* 2038C80 */
+ . += 0x8;
-gUnknown_2038C80: @ 2038C80
- .space 0x8
+gUnknown_2038C88 = .; /* 2038C88 */
+ . += 0x600;
-gUnknown_2038C88: @ 2038C88
- .space 0x600
+gUnknown_2039288 = .; /* 2039288 */
+ . += 0x60;
-gUnknown_2039288: @ 2039288
- .space 0x60
+gUnknown_20392E8 = .; /* 20392E8 */
+ . += 0xD8;
-gUnknown_20392E8: @ 20392E8
- .space 0xD8
+gUnknown_20393C0 = .; /* 20393C0 */
+ . += 0x88;
-gUnknown_20393C0: @ 20393C0
- .space 0x88
+gUnknown_2039448 = .; /* 2039448 */
+ . += 0x330;
-gUnknown_2039448: @ 2039448
- .space 0x330
+gUnknown_2039778 = .; /* 2039778 */
+ . += 0xC8;
-gUnknown_2039778: @ 2039778
- .space 0xC8
+gUnknown_2039840 = .; /* 2039840 */
+ . += 0x68;
-gUnknown_2039840: @ 2039840
- .space 0x68
+gUnknown_20398A8 = .; /* 20398A8 */
+ . += 0x4;
-gUnknown_20398A8: @ 20398A8
- .space 0x4
+gUnknown_20398AC = .; /* 20398AC */
+ . += 0x4;
-gUnknown_20398AC: @ 20398AC
- .space 0x4
+gUnknown_20398B0 = .; /* 20398B0 */
+ . += 0x4;
-gUnknown_20398B0: @ 20398B0
- .space 0x4
+gUnknown_20398B4 = .; /* 20398B4 */
+ . += 0x4;
-gUnknown_20398B4: @ 20398B4
- .space 0x4
+gUnknown_20398B8 = .; /* 20398B8 */
+ . += 0x1;
-gUnknown_20398B8: @ 20398B8
- .space 0x1
+gUnknown_20398B9 = .; /* 20398B9 */
+ . += 0x1;
-gUnknown_20398B9: @ 20398B9
- .space 0x1
+gUnknown_20398BA = .; /* 20398BA */
+ . += 0x2;
-gUnknown_20398BA: @ 20398BA
- .space 0x2
+gUnknown_20398BC = .; /* 20398BC */
+ . += 0x2;
-gUnknown_20398BC: @ 20398BC
- .space 0x2
+gUnknown_20398BE = .; /* 20398BE */
+ . += 0x2;
-gUnknown_20398BE: @ 20398BE
- .space 0x2
+gUnknown_20398C0 = .; /* 20398C0 */
+ . += 0x4;
-gUnknown_20398C0: @ 20398C0
- .space 0x4
+gUnknown_20398C4 = .; /* 20398C4 */
+ . += 0x4;
-gUnknown_20398C4: @ 20398C4
- .space 0x4
+gUnknown_20398C8 = .; /* 20398C8 */
+ . += 0x10;
-gUnknown_20398C8: @ 20398C8
- .space 0x10
+gUnknown_20398D8 = .; /* 20398D8 */
+ . += 0x78;
-gUnknown_20398D8: @ 20398D8
- .space 0x78
+gUnknown_2039950 = .; /* 2039950 */
+ . += 0x8;
-gUnknown_2039950: @ 2039950
- .space 0x8
+gUnknown_2039958 = .; /* 2039958 */
+ . += 0x10;
-gUnknown_2039958: @ 2039958
- .space 0x10
+gUnknown_2039968 = .; /* 2039968 */
+ . += 0x10;
-gUnknown_2039968: @ 2039968
- .space 0x10
+gUnknown_2039978 = .; /* 2039978 */
+ . += 0x8;
-gUnknown_2039978: @ 2039978
- .space 0x8
+gUnknown_2039980 = .; /* 2039980 */
+ . += 0x10;
-gUnknown_2039980: @ 2039980
- .space 0x10
+gUnknown_2039990 = .; /* 2039990 */
+ . += 0x2;
-gUnknown_2039990: @ 2039990
- .space 0x2
+gUnknown_2039992 = .; /* 2039992 */
+ . += 0x6;
-gUnknown_2039992: @ 2039992
- .space 0x6
+gUnknown_2039998 = .; /* 2039998 */
+ . += 0x44;
-gUnknown_2039998: @ 2039998
- .space 0x44
+gUnknown_20399DC = .; /* 20399DC */
+ . += 0x2;
-gUnknown_20399DC: @ 20399DC
- .space 0x2
+gUnknown_20399DE = .; /* 20399DE */
+ . += 0x2;
-gUnknown_20399DE: @ 20399DE
- .space 0x2
+gUnknown_20399E0 = .; /* 20399E0 */
+ . += 0x8;
-gUnknown_20399E0: @ 20399E0
- .space 0x8
+gUnknown_20399E8 = .; /* 20399E8 */
+ . += 0x14;
-gUnknown_20399E8: @ 20399E8
- .space 0x14
+gUnknown_20399FC = .; /* 20399FC */
+ . += 0x34;
-gUnknown_20399FC: @ 20399FC
- .space 0x34
+gUnknown_2039A30 = .; /* 2039A30 */
+ . += 0x2;
-gUnknown_2039A30: @ 2039A30
- .space 0x2
+gUnknown_2039A32 = .; /* 2039A32 */
+ . += 0x2;
-gUnknown_2039A32: @ 2039A32
- .space 0x2
+gUnknown_2039A34 = .; /* 2039A34 */
+ . += 0x2;
-gUnknown_2039A34: @ 2039A34
- .space 0x2
+gUnknown_2039A36 = .; /* 2039A36 */
+ . += 0x2;
-gUnknown_2039A36: @ 2039A36
- .space 0x2
+gUnknown_2039A38 = .; /* 2039A38 */
+ . += 0x88;
-gUnknown_2039A38: @ 2039A38
- .space 0x88
+gUnknown_2039AC0 = .; /* 2039AC0 */
+ . += 0x88;
-gUnknown_2039AC0: @ 2039AC0
- .space 0x88
+gUnknown_2039B48 = .; /* 2039B48 */
+ . += 0x208;
-gUnknown_2039B48: @ 2039B48
- .space 0x208
+gUnknown_2039D50 = .; /* 2039D50 */
+ . += 0x48;
-gUnknown_2039D50: @ 2039D50
- .space 0x48
+gUnknown_2039D98 = .; /* 2039D98 */
+ . += 0xC;
-gUnknown_2039D98: @ 2039D98
- .space 0xC
+gUnknown_2039DA4 = .; /* 2039DA4 */
+ . += 0x4;
-gUnknown_2039DA4: @ 2039DA4
- .space 0x4
+gUnknown_2039DA8 = .; /* 2039DA8 */
+ . += 0x8;
-gUnknown_2039DA8: @ 2039DA8
- .space 0x8
+gUnknown_2039DB0 = .; /* 2039DB0 */
+ . += 0x10;
-gUnknown_2039DB0: @ 2039DB0
- .space 0x10
+gUnknown_2039DC0 = .; /* 2039DC0 */
+ . += 0xC;
-gUnknown_2039DC0: @ 2039DC0
- .space 0xC
+gUnknown_2039DCC = .; /* 2039DCC */
+ . += 0x2;
-gUnknown_2039DCC: @ 2039DCC
- .space 0x2
+gUnknown_2039DCE = .; /* 2039DCE */
+ . += 0x2;
-gUnknown_2039DCE: @ 2039DCE
- .space 0x2
+gUnknown_2039DD0 = .; /* 2039DD0 */
+ . += 0x4;
-gUnknown_2039DD0: @ 2039DD0
- .space 0x4
+gUnknown_2039DD4 = .; /* 2039DD4 */
+ . += 0x4;
-gUnknown_2039DD4: @ 2039DD4
- .space 0x4
+gUnknown_2039DD8 = .; /* 2039DD8 */
+ . += 0x8;
-gUnknown_2039DD8: @ 2039DD8
- .space 0x8
-
-gUnknown_2039DE0: @ 2039DE0
- .space 0x4
+gUnknown_2039DE0 = .; /* 2039DE0 */
+ . += 0x4;
diff --git a/sym_ewram2.txt b/sym_ewram2.txt
index ad9521d..0f91946 100644
--- a/sym_ewram2.txt
+++ b/sym_ewram2.txt
@@ -1,654 +1,651 @@
- .align 2
+ . = ALIGN(2);
-gUnknown_2039ED0: @ 2039ED0
- .space 0xFB0
+gSoundInfo = .; /* 2039ED0 */
+ . += 0xFB0;
-gUnknown_203AE80: @ 203AE80
- .space 0x4
+gMPlayJumpTable = .; /* 203AE80 */
+ . += 0x88;
-gUnknown_203AE84: @ 203AE84
- .space 0x84
+gUnknown_203AF08 = .; /* 203AF08 */
+ . += 0x4;
-gUnknown_203AF08: @ 203AF08
- .space 0x4
+gUnknown_203AF0C = .; /* 203AF0C */
+ . += 0x4;
-gUnknown_203AF0C: @ 203AF0C
- .space 0x4
+gCgbChans = .; /* 203AF10 */
+ . += 0x100;
-gUnknown_203AF10: @ 203AF10
- .space 0x100
+gFlashTimeoutFlag = .; /* 203B010 */
+ . += 0x4;
-gFlashTimeoutFlag: @ 203B010
- .space 0x4
+PollFlashStatus = .; /* 203B014 */
+ . += 0x4;
-PollFlashStatus: @ 203B014
- .space 0x4
+WaitForFlashWrite = .; /* 203B018 */
+ . += 0x4;
-WaitForFlashWrite: @ 203B018
- .space 0x4
+ProgramFlashSector = .; /* 203B01C */
+ . += 0x4;
-ProgramFlashSector: @ 203B01C
- .space 0x4
+gFlash = .; /* 203B020 */
+ . += 0x4;
-gFlash: @ 203B020
- .space 0x4
+gFlashNumRemainingBytes = .; /* 203B024 */
+ . += 0x4;
-gFlashNumRemainingBytes: @ 203B024
- .space 0x4
+EraseFlashChip = .; /* 203B028 */
+ . += 0x4;
-EraseFlashChip: @ 203B028
- .space 0x4
+EraseFlashSector = .; /* 203B02C */
+ . += 0x4;
-EraseFlashSector: @ 203B02C
- .space 0x4
+gFlashMaxTime = .; /* 203B030 */
+ . += 0x4;
-gFlashMaxTime: @ 203B030
- .space 0x4
+errno = .; /* 203B034 */
+ . += 0x4;
-errno: @ 203B034
- .space 0x4
+alt_203B038 = .;
-alt_203B038:
+gUnknown_203B038 = .; /* 203B038 */
+ . += 0x4;
-gUnknown_203B038: @ 203B038
- .space 0x4
+gUnknown_203B03C = .; /* 203B03C */
+ . += 0x4;
-gUnknown_203B03C: @ 203B03C
- .space 0x4
+gUnknown_203B040 = .; /* 203B040 */
+ . += 0x30;
-gUnknown_203B040: @ 203B040
- .space 0x30
+gOtherRngState = .; /* 203B070 */
+ . += 0x4;
-gOtherRngState: @ 203B070
- .space 0x4
+gUnknown_203B074 = .; /* 203B074 */
+ . += 0x4;
-gUnknown_203B074: @ 203B074
- .space 0x4
+gUnknown_203B078 = .; /* 203B078 */
+ . += 0x4;
-gUnknown_203B078: @ 203B078
- .space 0x4
+gRngState = .; /* 203B07C */
+ . += 0x4;
-gRngState: @ 203B07C
- .space 0x4
+gUnknown_203B080 = .; /* 203B080 */
+ . += 0x4;
-gUnknown_203B080: @ 203B080
- .space 0x4
+gUnknown_203B084 = .; /* 203B084 */
+ . += 0x4;
-gUnknown_203B084: @ 203B084
- .space 0x4
+gUnknown_203B088 = .; /* 203B088 */
+ . += 0x4;
-gUnknown_203B088: @ 203B088
- .space 0x4
+gUnknown_203B08C = .; /* 203B08C */
+ . += 0x4;
-gUnknown_203B08C: @ 203B08C
- .space 0x4
+gUnknown_203B090 = .; /* 203B090 */
+ . += 0x4;
-gUnknown_203B090: @ 203B090
- .space 0x4
+gFileCacheCursorPosition = .; /* 203B094 */
+ . += 0x4;
-gUnknown_203B094: @ 203B094
- .space 0x4
+gUnknown_203B098 = .; /* 203B098 */
+ . += 0x1;
-gUnknown_203B098: @ 203B098
- .space 0x1
+gUnknown_203B099 = .; /* 203B099 */
+ . += 0x1;
-gUnknown_203B099: @ 203B099
- .space 0x1
+gUnknown_203B09A = .; /* 203B09A */
+ . += 0x1;
-gUnknown_203B09A: @ 203B09A
- .space 0x1
+gUnknown_203B09B = .; /* 203B09B */
+ . += 0x1;
-gUnknown_203B09B: @ 203B09B
- .space 0x1
+gUnknown_203B09C = .; /* 203B09C */
+ . += 0x4;
-gUnknown_203B09C: @ 203B09C
- .space 0x4
+gUnknown_203B0A0 = .; /* 203B0A0 */
+ . += 0x4;
-gUnknown_203B0A0: @ 203B0A0
- .space 0x4
+gUnknown_203B0A4 = .; /* 203B0A4 */
+ . += 0x4;
-gUnknown_203B0A4: @ 203B0A4
- .space 0x4
+gUnknown_203B0A8 = .; /* 203B0A8 */
+ . += 0x2;
-gUnknown_203B0A8: @ 203B0A8
- .space 0x2
+gUnknown_203B0AA = .; /* 203B0AA */
+ . += 0x2;
-gUnknown_203B0AA: @ 203B0AA
- .space 0x2
+gUnknown_203B0AC = .; /* 203B0AC */
+ . += 0x2;
-gUnknown_203B0AC: @ 203B0AC
- .space 0x2
+gUnknown_203B0AE = .; /* 203B0AE */
+ . += 0x2;
-gUnknown_203B0AE: @ 203B0AE
- .space 0x2
+gUnknown_203B0B0 = .; /* 203B0B0 */
+ . += 0x2;
-gUnknown_203B0B0: @ 203B0B0
- .space 0x2
+gUnknown_203B0B2 = .; /* 203B0B2 */
+ . += 0x2;
-gUnknown_203B0B2: @ 203B0B2
- .space 0x2
+gFlashEnabled = .; /* 203B0B4 */
+ . += 0x4;
-gFlashEnabled: @ 203B0B4
- .space 0x4
+gUnknown_203B0B8 = .; /* 203B0B8 */
+ . += 0x4;
-gUnknown_203B0B8: @ 203B0B8
- .space 0x4
+gUnknown_203B0BC = .; /* 203B0BC */
+ . += 0x2;
-gUnknown_203B0BC: @ 203B0BC
- .space 0x2
+gUnknown_203B0BE = .; /* 203B0BE */
+ . += 0xE;
-gUnknown_203B0BE: @ 203B0BE
- .space 0xE
+gUnknown_203B0CC = .; /* 203B0CC */
+ . += 0x4;
-gUnknown_203B0CC: @ 203B0CC
- .space 0x4
+gUnknown_203B0D0 = .; /* 203B0D0 */
+ . += 0x4;
-gUnknown_203B0D0: @ 203B0D0
- .space 0x4
+gUnknown_203B0D4 = .; /* 203B0D4 */
+ . += 0x4;
-gUnknown_203B0D4: @ 203B0D4
- .space 0x4
+gUnknown_203B0D8 = .; /* 203B0D8 */
+ . += 0x4;
-gUnknown_203B0D8: @ 203B0D8
- .space 0x4
+gUnknown_203B0DC = .; /* 203B0DC */
+ . += 0x8;
-gUnknown_203B0DC: @ 203B0DC
- .space 0x8
+gUnknown_203B0E4 = .; /* 203B0E4 */
+ . += 0x4;
-gUnknown_203B0E4: @ 203B0E4
- .space 0x4
+gUnknown_203B0E8 = .; /* 203B0E8 */
+ . += 0x4;
-gUnknown_203B0E8: @ 203B0E8
- .space 0x4
+gUnknown_203B0EC = .; /* 203B0EC */
+ . += 0x60;
-gUnknown_203B0EC: @ 203B0EC
- .space 0x60
+gUnknown_203B14C = .; /* 203B14C */
+ . += 0x4;
-gUnknown_203B14C: @ 203B14C
- .space 0x4
+gUnknown_203B150 = .; /* 203B150 */
+ . += 0x2C;
-gUnknown_203B150: @ 203B150
- .space 0x2C
+gUnknown_203B17C = .; /* 203B17C */
+ . += 0x4;
-gUnknown_203B17C: @ 203B17C
- .space 0x4
+gUnknown_203B180 = .; /* 203B180 */
+ . += 0x4;
-gUnknown_203B180: @ 203B180
- .space 0x4
+gUnknown_203B184 = .; /* 203B184 */
+ . += 0x4;
-gUnknown_203B184: @ 203B184
- .space 0x4
+gUnknown_203B188 = .; /* 203B188 */
+ . += 0x4;
-gUnknown_203B188: @ 203B188
- .space 0x4
+gUnknown_203B18C = .; /* 203B18C */
+ . += 0x4;
-gUnknown_203B18C: @ 203B18C
- .space 0x4
+gUnknown_203B190 = .; /* 203B190 */
+ . += 0x4;
-gUnknown_203B190: @ 203B190
- .space 0x4
+gUnknown_203B194 = .; /* 203B194 */
+ . += 0x4;
-gUnknown_203B194: @ 203B194
- .space 0x4
+gUnknown_203B198 = .; /* 203B198 */
+ . += 0x60;
-gUnknown_203B198: @ 203B198
- .space 0x60
+gUnknown_203B1F8 = .; /* 203B1F8 */
+ . += 0x4;
-gUnknown_203B1F8: @ 203B1F8
- .space 0x4
+gUnknown_203B1FC = .; /* 203B1FC */
+ . += 0x4;
-gUnknown_203B1FC: @ 203B1FC
- .space 0x4
+gUnknown_203B200 = .; /* 203B200 */
+ . += 0x4;
-gUnknown_203B200: @ 203B200
- .space 0x4
+gUnknown_203B204 = .; /* 203B204 */
+ . += 0x4;
-gUnknown_203B204: @ 203B204
- .space 0x4
+gUnknown_203B208 = .; /* 203B208 */
+ . += 0x4;
-gUnknown_203B208: @ 203B208
- .space 0x4
+gUnknown_203B20C = .; /* 203B20C */
+ . += 0x4;
-gUnknown_203B20C: @ 203B20C
- .space 0x4
+gUnknown_203B210 = .; /* 203B210 */
+ . += 0x4;
-gUnknown_203B210: @ 203B210
- .space 0x4
+gUnknown_203B214 = .; /* 203B214 */
+ . += 0x4;
-gUnknown_203B214: @ 203B214
- .space 0x4
+gUnknown_203B218 = .; /* 203B218 */
+ . += 0x4;
-gUnknown_203B218: @ 203B218
- .space 0x4
+gUnknown_203B21C = .; /* 203B21C */
+ . += 0x4;
-gUnknown_203B21C: @ 203B21C
- .space 0x4
+gUnknown_203B220 = .; /* 203B220 */
+ . += 0x4;
-gUnknown_203B220: @ 203B220
- .space 0x4
+gUnknown_203B224 = .; /* 203B224 */
+ . += 0x4;
-gUnknown_203B224: @ 203B224
- .space 0x4
+gUnknown_203B228 = .; /* 203B228 */
+ . += 0x2;
-gUnknown_203B228: @ 203B228
- .space 0x2
+gUnknown_203B22A = .; /* 203B22A */
+ . += 0x2;
-gUnknown_203B22A: @ 203B22A
- .space 0x2
+gUnknown_203B22C = .; /* 203B22C */
+ . += 0x4;
-gUnknown_203B22C: @ 203B22C
- .space 0x4
+gUnknown_203B230 = .; /* 203B230 */
+ . += 0x4;
-gUnknown_203B230: @ 203B230
- .space 0x4
+gUnknown_203B234 = .; /* 203B234 */
+ . += 0x4;
-gUnknown_203B234: @ 203B234
- .space 0x4
+gUnknown_203B238 = .; /* 203B238 */
+ . += 0x4;
-gUnknown_203B238: @ 203B238
- .space 0x4
+gUnknown_203B23C = .; /* 203B23C */
+ . += 0x4;
-gUnknown_203B23C: @ 203B23C
- .space 0x4
+gUnknown_203B240 = .; /* 203B240 */
+ . += 0x4;
-gUnknown_203B240: @ 203B240
- .space 0x4
+gUnknown_203B244 = .; /* 203B244 */
+ . += 0x4;
-gUnknown_203B244: @ 203B244
- .space 0x4
+gUnknown_203B248 = .; /* 203B248 */
+ . += 0x4;
-gUnknown_203B248: @ 203B248
- .space 0x4
+gUnknown_203B24C = .; /* 203B24C */
+ . += 0x2;
-gUnknown_203B24C: @ 203B24C
- .space 0x2
+gUnknown_203B24E = .; /* 203B24E */
+ . += 0x2;
-gUnknown_203B24E: @ 203B24E
- .space 0x2
+gUnknown_203B250 = .; /* 203B250 */
+ . += 0x4;
-gUnknown_203B250: @ 203B250
- .space 0x4
+gUnknown_203B254 = .; /* 203B254 */
+ . += 0x4;
-gUnknown_203B254: @ 203B254
- .space 0x4
+gUnknown_203B258 = .; /* 203B258 */
+ . += 0x4;
-gUnknown_203B258: @ 203B258
- .space 0x4
+gUnknown_203B25C = .; /* 203B25C */
+ . += 0x4;
-gUnknown_203B25C: @ 203B25C
- .space 0x4
+gUnknown_203B260 = .; /* 203B260 */
+ . += 0x4;
-gUnknown_203B260: @ 203B260
- .space 0x4
+gUnknown_203B264 = .; /* 203B264 */
+ . += 0x4;
-gUnknown_203B264: @ 203B264
- .space 0x4
+gUnknown_203B268 = .; /* 203B268 */
+ . += 0x4;
-gUnknown_203B268: @ 203B268
- .space 0x4
+gUnknown_203B26C = .; /* 203B26C */
+ . += 0x4;
-gUnknown_203B26C: @ 203B26C
- .space 0x4
+gUnknown_203B270 = .; /* 203B270 */
+ . += 0x4;
-gUnknown_203B270: @ 203B270
- .space 0x4
+gUnknown_203B274 = .; /* 203B274 */
+ . += 0x4;
-gUnknown_203B274: @ 203B274
- .space 0x4
+gUnknown_203B278 = .; /* 203B278 */
+ . += 0x4;
-gUnknown_203B278: @ 203B278
- .space 0x4
+gUnknown_203B27C = .; /* 203B27C */
+ . += 0x4;
-gUnknown_203B27C: @ 203B27C
- .space 0x4
+gUnknown_203B280 = .; /* 203B280 */
+ . += 0x4;
-gUnknown_203B280: @ 203B280
- .space 0x4
+gUnknown_203B284 = .; /* 203B284 */
+ . += 0x4;
-gUnknown_203B284: @ 203B284
- .space 0x4
+gUnknown_203B288 = .; /* 203B288 */
+ . += 0x2;
-gUnknown_203B288: @ 203B288
- .space 0x2
+gUnknown_203B28A = .; /* 203B28A */
+ . += 0x2;
-gUnknown_203B28A: @ 203B28A
- .space 0x2
+gUnknown_203B28C = .; /* 203B28C */
+ . += 0x4;
-gUnknown_203B28C: @ 203B28C
- .space 0x4
+gUnknown_203B290 = .; /* 203B290 */
+ . += 0x4;
-gUnknown_203B290: @ 203B290
- .space 0x4
+gUnknown_203B294 = .; /* 203B294 */
+ . += 0x4;
-gUnknown_203B294: @ 203B294
- .space 0x4
+gUnknown_203B298 = .; /* 203B298 */
+ . += 0x4;
-gUnknown_203B298: @ 203B298
- .space 0x4
+gUnknown_203B29C = .; /* 203B29C */
+ . += 0x2;
-gUnknown_203B29C: @ 203B29C
- .space 0x2
+gUnknown_203B29E = .; /* 203B29E */
+ . += 0x2;
-gUnknown_203B29E: @ 203B29E
- .space 0x2
+gUnknown_203B2A0 = .; /* 203B2A0 */
+ . += 0x4;
-gUnknown_203B2A0: @ 203B2A0
- .space 0x4
+gUnknown_203B2A4 = .; /* 203B2A4 */
+ . += 0x4;
-gUnknown_203B2A4: @ 203B2A4
- .space 0x4
+gUnknown_203B2A8 = .; /* 203B2A8 */
+ . += 0x2;
-gUnknown_203B2A8: @ 203B2A8
- .space 0x2
+gUnknown_203B2AA = .; /* 203B2AA */
+ . += 0x2;
-gUnknown_203B2AA: @ 203B2AA
- .space 0x2
+gUnknown_203B2AC = .; /* 203B2AC */
+ . += 0x4;
-gUnknown_203B2AC: @ 203B2AC
- .space 0x4
+gUnknown_203B2B0 = .; /* 203B2B0 */
+ . += 0x4;
-gUnknown_203B2B0: @ 203B2B0
- .space 0x4
+gUnknown_203B2B4 = .; /* 203B2B4 */
+ . += 0x4;
-gUnknown_203B2B4: @ 203B2B4
- .space 0x4
+gUnknown_203B2B8 = .; /* 203B2B8 */
+ . += 0x4;
-gUnknown_203B2B8: @ 203B2B8
- .space 0x4
+gUnknown_203B2BC = .; /* 203B2BC */
+ . += 0x4;
-gUnknown_203B2BC: @ 203B2BC
- .space 0x4
+gUnknown_203B2C0 = .; /* 203B2C0 */
+ . += 0x4;
-gUnknown_203B2C0: @ 203B2C0
- .space 0x4
+gUnknown_203B2C4 = .; /* 203B2C4 */
+ . += 0x4;
-gUnknown_203B2C4: @ 203B2C4
- .space 0x4
+gUnknown_203B2C8 = .; /* 203B2C8 */
+ . += 0x4;
-gUnknown_203B2C8: @ 203B2C8
- .space 0x4
+gUnknown_203B2CC = .; /* 203B2CC */
+ . += 0x4;
-gUnknown_203B2CC: @ 203B2CC
- .space 0x4
+gUnknown_203B2D0 = .; /* 203B2D0 */
+ . += 0x2;
-gUnknown_203B2D0: @ 203B2D0
- .space 0x2
+gUnknown_203B2D2 = .; /* 203B2D2 */
+ . += 0x2;
-gUnknown_203B2D2: @ 203B2D2
- .space 0x2
+gUnknown_203B2D4 = .; /* 203B2D4 */
+ . += 0x4;
-gUnknown_203B2D4: @ 203B2D4
- .space 0x4
+gUnknown_203B2D8 = .; /* 203B2D8 */
+ . += 0x4;
-gUnknown_203B2D8: @ 203B2D8
- .space 0x4
+gUnknown_203B2DC = .; /* 203B2DC */
+ . += 0x4;
-gUnknown_203B2DC: @ 203B2DC
- .space 0x4
+gUnknown_203B2E0 = .; /* 203B2E0 */
+ . += 0x4;
-gUnknown_203B2E0: @ 203B2E0
- .space 0x4
+gUnknown_203B2E4 = .; /* 203B2E4 */
+ . += 0x4;
-gUnknown_203B2E4: @ 203B2E4
- .space 0x4
+gUnknown_203B2E8 = .; /* 203B2E8 */
+ . += 0x4;
-gUnknown_203B2E8: @ 203B2E8
- .space 0x4
+gUnknown_203B2EC = .; /* 203B2EC */
+ . += 0x4;
-gUnknown_203B2EC: @ 203B2EC
- .space 0x4
+gUnknown_203B2F0 = .; /* 203B2F0 */
+ . += 0x4;
-gUnknown_203B2F0: @ 203B2F0
- .space 0x4
+gUnknown_203B2F4 = .; /* 203B2F4 */
+ . += 0x4;
-gUnknown_203B2F4: @ 203B2F4
- .space 0x4
+gUnknown_203B2F8 = .; /* 203B2F8 */
+ . += 0x4;
-gUnknown_203B2F8: @ 203B2F8
- .space 0x4
+gUnknown_203B2FC = .; /* 203B2FC */
+ . += 0x4;
-gUnknown_203B2FC: @ 203B2FC
- .space 0x4
+gUnknown_203B300 = .; /* 203B300 */
+ . += 0x4;
-gUnknown_203B300: @ 203B300
- .space 0x4
+gUnknown_203B304 = .; /* 203B304 */
+ . += 0x4;
-gUnknown_203B304: @ 203B304
- .space 0x4
+gUnknown_203B308 = .; /* 203B308 */
+ . += 0x4;
-gUnknown_203B308: @ 203B308
- .space 0x4
+gUnknown_203B30C = .; /* 203B30C */
+ . += 0x4;
-gUnknown_203B30C: @ 203B30C
- .space 0x4
+gUnknown_203B310 = .; /* 203B310 */
+ . += 0x4;
-gUnknown_203B310: @ 203B310
- .space 0x4
+gUnknown_203B314 = .; /* 203B314 */
+ . += 0x4;
-gUnknown_203B314: @ 203B314
- .space 0x4
+gUnknown_203B318 = .; /* 203B318 */
+ . += 0x4;
-gUnknown_203B318: @ 203B318
- .space 0x4
+gUnknown_203B31C = .; /* 203B31C */
+ . += 0x4;
-gUnknown_203B31C: @ 203B31C
- .space 0x4
+gUnknown_203B320 = .; /* 203B320 */
+ . += 0x4;
-gUnknown_203B320: @ 203B320
- .space 0x4
+gUnknown_203B324 = .; /* 203B324 */
+ . += 0x4;
-gUnknown_203B324: @ 203B324
- .space 0x4
+gUnknown_203B328 = .; /* 203B328 */
+ . += 0x4;
-gUnknown_203B328: @ 203B328
- .space 0x4
+gUnknown_203B32C = .; /* 203B32C */
+ . += 0x4;
-gUnknown_203B32C: @ 203B32C
- .space 0x4
+gUnknown_203B330 = .; /* 203B330 */
+ . += 0x4;
-gUnknown_203B330: @ 203B330
- .space 0x4
+gUnknown_203B334 = .; /* 203B334 */
+ . += 0x4;
-gUnknown_203B334: @ 203B334
- .space 0x4
+gUnknown_203B338 = .; /* 203B338 */
+ . += 0x4;
-gUnknown_203B338: @ 203B338
- .space 0x4
+gUnknown_203B33C = .; /* 203B33C */
+ . += 0x4;
-gUnknown_203B33C: @ 203B33C
- .space 0x4
+gUnknown_203B340 = .; /* 203B340 */
+ . += 0x4;
-gUnknown_203B340: @ 203B340
- .space 0x4
+gUnknown_203B344 = .; /* 203B344 */
+ . += 0x4;
-gUnknown_203B344: @ 203B344
- .space 0x4
+gUnknown_203B348 = .; /* 203B348 */
+ . += 0x4;
-gUnknown_203B348: @ 203B348
- .space 0x4
+gUnknown_203B34C = .; /* 203B34C */
+ . += 0x4;
-gUnknown_203B34C: @ 203B34C
- .space 0x4
+gUnknown_203B350 = .; /* 203B350 */
+ . += 0x4;
-gUnknown_203B350: @ 203B350
- .space 0x4
+gUnknown_203B354 = .; /* 203B354 */
+ . += 0x4;
-gUnknown_203B354: @ 203B354
- .space 0x4
+gUnknown_203B358 = .; /* 203B358 */
+ . += 0x4;
-gUnknown_203B358: @ 203B358
- .space 0x4
+gUnknown_203B35C = .; /* 203B35C */
+ . += 0x4;
-gUnknown_203B35C: @ 203B35C
- .space 0x4
+gUnknown_203B360 = .; /* 203B360 */
+ . += 0x4;
-gUnknown_203B360: @ 203B360
- .space 0x4
+gUnknown_203B364 = .; /* 203B364 */
+ . += 0x4;
-gUnknown_203B364: @ 203B364
- .space 0x4
+gUnknown_203B368 = .; /* 203B368 */
+ . += 0x4;
-gUnknown_203B368: @ 203B368
- .space 0x4
+gUnknown_203B36C = .; /* 203B36C */
+ . += 0x4;
-gUnknown_203B36C: @ 203B36C
- .space 0x4
+gUnknown_203B370 = .; /* 203B370 */
+ . += 0x4;
-gUnknown_203B370: @ 203B370
- .space 0x4
+gUnknown_203B374 = .; /* 203B374 */
+ . += 0x4;
-gUnknown_203B374: @ 203B374
- .space 0x4
+gUnknown_203B378 = .; /* 203B378 */
+ . += 0x10;
-gUnknown_203B378: @ 203B378
- .space 0x10
+gUnknown_203B388 = .; /* 203B388 */
+ . += 0x30;
-gUnknown_203B388: @ 203B388
- .space 0x30
+gUnknown_203B3B8 = .; /* 203B3B8 */
+ . += 0x30;
-gUnknown_203B3B8: @ 203B3B8
- .space 0x30
+gUnknown_203B3E8 = .; /* 203B3E8 */
+ . += 0x4;
-gUnknown_203B3E8: @ 203B3E8
- .space 0x4
+gUnknown_203B3EC = .; /* 203B3EC */
+ . += 0x4;
-gUnknown_203B3EC: @ 203B3EC
- .space 0x4
+gUnknown_203B3F0 = .; /* 203B3F0 */
+ . += 0x4;
-gUnknown_203B3F0: @ 203B3F0
- .space 0x4
+gUnknown_203B3F4 = .; /* 203B3F4 */
+ . += 0x4;
-gUnknown_203B3F4: @ 203B3F4
- .space 0x4
+gUnknown_203B3F8 = .; /* 203B3F8 */
+ . += 0x4;
-gUnknown_203B3F8: @ 203B3F8
- .space 0x4
+gUnknown_203B3FC = .; /* 203B3FC */
+ . += 0x4;
-gUnknown_203B3FC: @ 203B3FC
- .space 0x4
+gUnknown_203B400 = .; /* 203B400 */
+ . += 0x4;
-gUnknown_203B400: @ 203B400
- .space 0x4
+gUnknown_203B404 = .; /* 203B404 */
+ . += 0x4;
-gUnknown_203B404: @ 203B404
- .space 0x4
+gUnknown_203B408 = .; /* 203B408 */
+ . += 0x4;
-gUnknown_203B408: @ 203B408
- .space 0x4
+gUnknown_203B40C = .; /* 203B40C */
+ . += 0x1;
-gUnknown_203B40C: @ 203B40C
- .space 0x1
+gUnknown_203B40D = .; /* 203B40D */
+ . += 0x3;
-gUnknown_203B40D: @ 203B40D
- .space 0x3
+gUnknown_203B410 = .; /* 203B410 */
+ . += 0x4;
-gUnknown_203B410: @ 203B410
- .space 0x4
+gUnknown_203B414 = .; /* 203B414 */
+ . += 0x4;
-gUnknown_203B414: @ 203B414
- .space 0x4
+gUnknown_203B418 = .; /* 203B418 */
+ . += 0x4;
-gUnknown_203B418: @ 203B418
- .space 0x4
+gUnknown_203B41C = .; /* 203B41C */
+ . += 0x4;
-gUnknown_203B41C: @ 203B41C
- .space 0x4
+gUnknown_203B420 = .; /* 203B420 */
+ . += 0x8;
-gUnknown_203B420: @ 203B420
- .space 0x8
+gUnknown_203B428 = .; /* 203B428 */
+ . += 0x8;
-gUnknown_203B428: @ 203B428
- .space 0x8
+gUnknown_203B430 = .; /* 203B430 */
+ . += 0x4;
-gUnknown_203B430: @ 203B430
- .space 0x4
+gUnknown_203B434 = .; /* 203B434 */
+ . += 0x4;
-gUnknown_203B434: @ 203B434
- .space 0x4
+gUnknown_203B438 = .; /* 203B438 */
+ . += 0x4;
-gUnknown_203B438: @ 203B438
- .space 0x4
+gUnknown_203B43C = .; /* 203B43C */
+ . += 0x4;
-gUnknown_203B43C: @ 203B43C
- .space 0x4
+gUnknown_203B440 = .; /* 203B440 */
+ . += 0x4;
-gUnknown_203B440: @ 203B440
- .space 0x4
+gUnknown_203B444 = .; /* 203B444 */
+ . += 0xC;
-gUnknown_203B444: @ 203B444
- .space 0xC
+gUnknown_203B450 = .; /* 203B450 */
+ . += 0x4;
-gUnknown_203B450: @ 203B450
- .space 0x4
+gUnknown_203B454 = .; /* 203B454 */
+ . += 0x4;
-gUnknown_203B454: @ 203B454
- .space 0x4
+gUnknown_203B458 = .; /* 203B458 */
+ . += 0x4;
-gUnknown_203B458: @ 203B458
- .space 0x4
+gUnknown_203B45C = .; /* 203B45C */
+ . += 0x4;
-gUnknown_203B45C: @ 203B45C
- .space 0x4
+gUnknown_203B460 = .; /* 203B460 */
+ . += 0x4;
-gUnknown_203B460: @ 203B460
- .space 0x4
+gUnknown_203B464 = .; /* 203B464 */
+ . += 0x4;
-gUnknown_203B464: @ 203B464
- .space 0x4
+gUnknown_203B468 = .; /* 203B468 */
+ . += 0x4;
-gUnknown_203B468: @ 203B468
- .space 0x4
+gUnknown_203B46C = .; /* 203B46C */
+ . += 0x4;
-gUnknown_203B46C: @ 203B46C
- .space 0x4
+gUnknown_203B470 = .; /* 203B470 */
+ . += 0x4;
-gUnknown_203B470: @ 203B470
- .space 0x4
+gUnknown_203B474 = .; /* 203B474 */
+ . += 0x8;
-gUnknown_203B474: @ 203B474
- .space 0x8
+gUnknown_203B47C = .; /* 203B47C */
+ . += 0x4;
-gUnknown_203B47C: @ 203B47C
- .space 0x4
+gUnknown_203B480 = .; /* 203B480 */
+ . += 0x4;
-gUnknown_203B480: @ 203B480
- .space 0x4
+gUnknown_203B484 = .; /* 203B484 */
+ . += 0x4;
-gUnknown_203B484: @ 203B484
- .space 0x4
+gUnknown_203B488 = .; /* 203B488 */
+ . += 0x4;
-gUnknown_203B488: @ 203B488
- .space 0x4
+gUnknown_203B48C = .; /* 203B48C */
+ . += 0x4;
-gUnknown_203B48C: @ 203B48C
- .space 0x4
+gUnknown_203B490 = .; /* 203B490 */
+ . += 0x4;
-gUnknown_203B490: @ 203B490
- .space 0x4
+gUnknown_203B494 = .; /* 203B494 */
+ . += 0x4;
-gUnknown_203B494: @ 203B494
- .space 0x4
+gUnknown_203B498 = .; /* 203B498 */
+ . += 0x4;
-gUnknown_203B498: @ 203B498
- .space 0x4
+gUnknown_203B49C = .; /* 203B49C */
+ . += 0x1;
-gUnknown_203B49C: @ 203B49C
- .space 0x1
+gUnknown_203B49D = .; /* 203B49D */
+ . += 0x3;
-gUnknown_203B49D: @ 203B49D
- .space 0x3
+gUnknown_203B4A0 = .; /* 203B4A0 */
+ . += 0xC;
-gUnknown_203B4A0: @ 203B4A0
- .space 0xC
+gUnknown_203B4AC = .; /* 203B4AC */
+ . += 0x4;
-gUnknown_203B4AC: @ 203B4AC
- .space 0x4
+gUnknown_203B4B0 = .; /* 203B4B0 */
+ . += 0x4;
-gUnknown_203B4B0: @ 203B4B0
- .space 0x4
+gUnknown_203B4B4 = .; /* 203B4B4 */
+ . += 0x4;
-gUnknown_203B4B4: @ 203B4B4
- .space 0x4
-
-gUnknown_203B4B8: @ 203B4B8
- .space 0x4
+gUnknown_203B4B8 = .; /* 203B4B8 */
+ . += 0x4;
diff --git a/sym_iwram.txt b/sym_iwram.txt
index 918f767..4eafdc5 100644
--- a/sym_iwram.txt
+++ b/sym_iwram.txt
@@ -1,77 +1,77 @@
-SoundMainRAM_Buffer: @ 3000000
- .space 0x400
+SoundMainRAM_Buffer = .; /* 3000000 */
+ . += 0x400;
-gUnknown_3000400: @ 3000400
- .space 0x800
+gUnknown_3000400 = .; /* 3000400 */
+ . += 0x800;
-gUnknown_3000C00: @ 3000C00
- .space 0x294
+gUnknown_3000C00 = .; /* 3000C00 */
+ . += 0x294;
-gUnknown_3000E94: @ 3000E94
- .space 0x144
+gUnknown_3000E94 = .; /* 3000E94 */
+ . += 0x144;
-gUnknown_3000FD8: @ 3000FD8
- .space 0x10
+gUnknown_3000FD8 = .; /* 3000FD8 */
+ . += 0x10;
-gUnknown_3000FE8: @ 3000FE8
- .space 0x30
+gUnknown_3000FE8 = .; /* 3000FE8 */
+ . += 0x30;
-gUnknown_3001018: @ 3001018
- .space 0x180
+gUnknown_3001018 = .; /* 3001018 */
+ . += 0x180;
-gUnknown_3001198: @ 3001198
- .space 0x9C0
+gUnknown_3001198 = .; /* 3001198 */
+ . += 0x9C0;
-alt_3001B58:
+alt_3001B58 = .;
-unk_code_ram: @ 3001B58
+unk_code_ram = .; /* 3001B58 */
-gUnknown_3001B58: @ 3001B58
- .space 0x2
+gUnknown_3001B58 = .; /* 3001B58 */
+ . += 0x2;
-gUnknown_3001B5A: @ 3001B5A
- .space 0x2
+gUnknown_3001B5A = .; /* 3001B5A */
+ . += 0x2;
-gUnknown_3001B5C: @ 3001B5C
- .space 0x4
+gUnknown_3001B5C = .; /* 3001B5C */
+ . += 0x4;
-gUnknown_3001B60: @ 3001B60
- .space 0x4
+gUnknown_3001B60 = .; /* 3001B60 */
+ . += 0x4;
-gUnknown_3001B64: @ 3001B64
- .space 0x4
+gUnknown_3001B64 = .; /* 3001B64 */
+ . += 0x4;
-gUnknown_3001B68: @ 3001B68
- .space 0x4
+gUnknown_3001B68 = .; /* 3001B68 */
+ . += 0x4;
-gUnknown_3001B6C: @ 3001B6C
- .space 0x4
+gUnknown_3001B6C = .; /* 3001B6C */
+ . += 0x4;
-gUnknown_3001B70: @ 3001B70
- .space 0x4
+gUnknown_3001B70 = .; /* 3001B70 */
+ . += 0x4;
-gUnknown_3001B74: @ 3001B74
- .space 0x4
+gUnknown_3001B74 = .; /* 3001B74 */
+ . += 0x4;
-gUnknown_3001B78: @ 3001B78
- .space 0x4
+gUnknown_3001B78 = .; /* 3001B78 */
+ . += 0x4;
-gUnknown_3001B7C: @ 3001B7C
- .space 0x4
+gUnknown_3001B7C = .; /* 3001B7C */
+ . += 0x4;
-gUnknown_3001B80: @ 3001B80
- .space 0x4
+gUnknown_3001B80 = .; /* 3001B80 */
+ . += 0x4;
-gUnknown_3001B84: @ 3001B84
- .space 0x4
+gUnknown_3001B84 = .; /* 3001B84 */
+ . += 0x4;
-gUnknown_3001B88: @ 3001B88
- .space 0x4
+gUnknown_3001B88 = .; /* 3001B88 */
+ . += 0x4;
-gUnknown_3001B8C: @ 3001B8C
- .space 0x4
+gUnknown_3001B8C = .; /* 3001B8C */
+ . += 0x4;
-gUnknown_3001B90: @ 3001B90
- .space 0x2470
+gUnknown_3001B90 = .; /* 3001B90 */
+ . += 0x2470;
-gUnknown_3004000: @ 3004000
+gUnknown_3004000 = .; /* 3004000 */ \ No newline at end of file