summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--INSTALL.md2
-rw-r--r--Makefile21
-rw-r--r--arm7/Makefile175
-rw-r--r--arm7/arm7.lcf10
-rw-r--r--arm7/asm/arm7_rom.s (renamed from asm/arm7_rom.s)89
-rw-r--r--arm7/asm/macros.inc1
-rw-r--r--arm7/asm/macros/function.inc24
-rw-r--r--arm7/global.inc3517
-rw-r--r--arm7/undefined_syms.txt506
-rw-r--r--arm9/Makefile175
-rw-r--r--arm9/arm9.lcf84
-rw-r--r--arm9/asm/CARD_arm9.s1782
-rw-r--r--arm9/asm/CP_arm9.s42
-rw-r--r--arm9/asm/CTRDG_arm9.s3238
-rw-r--r--arm9/asm/DGT_arm9.s1017
-rw-r--r--arm9/asm/FS_arm9.s3011
-rw-r--r--arm9/asm/GX_arm9.s5256
-rw-r--r--arm9/asm/MATH_arm9.s320
-rw-r--r--arm9/asm/MI_arm9.s1082
-rw-r--r--arm9/asm/OS_arm9.s4759
-rw-r--r--arm9/asm/PM_arm9.s1125
-rw-r--r--arm9/asm/PXI_arm9.s266
-rw-r--r--arm9/asm/RTC_arm9.s1028
-rw-r--r--arm9/asm/SDK_AUTOLOAD_LIST.s21
-rw-r--r--arm9/asm/SND_arm9.s1655
-rw-r--r--arm9/asm/SPI_arm9.s1487
-rw-r--r--arm9/asm/STD_arm9.s17117
-rw-r--r--arm9/asm/WM_arm9.s3744
-rw-r--r--arm9/asm/arm9_itcm.s505
-rw-r--r--arm9/asm/arm9overlay.s (renamed from asm/arm9overlay.s)0
-rw-r--r--arm9/asm/crt0.s (renamed from asm/crt0.s)6
-rw-r--r--arm9/asm/filesystem.s (renamed from asm/filesystem.s)0
-rw-r--r--arm9/asm/macros.inc1
-rw-r--r--arm9/asm/macros/function.inc24
-rw-r--r--arm9/asm/rom2.s7
-rw-r--r--arm9/asm/rom2_2.s (renamed from asm/rom2_2.s)28
-rw-r--r--arm9/asm/scrcmd.s (renamed from asm/scrcmd.s)30
-rw-r--r--arm9/asm/secure.s (renamed from asm/secure.s)14
-rw-r--r--arm9/asm/unk_02000E0C.s (renamed from asm/unk_02000E0C.s)10
-rw-r--r--arm9/asm/unk_020023C0.s (renamed from asm/unk_020023C0.s)16680
-rw-r--r--arm9/asm/unk_02006864.s (renamed from asm/unk_02006864.s)720
-rw-r--r--arm9/asm/unk_02038C78.s (renamed from asm/unk_02038C78.s)8
-rw-r--r--arm9/asm/unk_02046030.s (renamed from asm/unk_02046030.s)318
-rw-r--r--arm9/asm/unk_0208AC14.s42449
-rw-r--r--arm9/asm/unk_020AF030.s26835
-rw-r--r--arm9/asm/unk_10b724.s (renamed from asm/unk_10b724.s)0
-rw-r--r--arm9/global.inc3521
-rw-r--r--arm9/src/FUN_02000DF4.c (renamed from src/FUN_02000DF4.c)0
-rw-r--r--arm9/src/main.c (renamed from src/main.c)0
-rw-r--r--arm9/src/script.c (renamed from src/script.c)0
-rw-r--r--arm9/src/string_util.c (renamed from src/string_util.c)0
-rw-r--r--arm9/undefined_syms.txt506
-rw-r--r--asm/FUN_020C9C0C.s13766
-rw-r--r--asm/rom1.5.s7
-rw-r--r--asm/rom2.s150
-rw-r--r--data/filenametable.s104
-rw-r--r--global.inc4174
-rw-r--r--pokediamond.lcf42
-rw-r--r--undefined_syms.txt431
60 files changed, 136630 insertions, 25262 deletions
diff --git a/.gitignore b/.gitignore
index b6cffd40..43a15d11 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,8 @@ tools/mwccarm/**
# Build folder
build/**
+arm7/build/**
+arm9/build/**
# CLion folders
.idea/
diff --git a/INSTALL.md b/INSTALL.md
index 1ffc5c59..c4f62a60 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -19,6 +19,7 @@ Building the ROM requires the following packages:
* build-essentials
* binutils-arm-none-eabi
* wine (to run the mwcc executables)
+* libpng-devel
NOTE: If you are using Arch/Manjaro or Void you will only need base-devel instead of build-essentials or make or git. You will still need wine.
@@ -41,6 +42,7 @@ You will still require the following packages:
* make
* git
* build-essentials
+* libpng-devel
Install them using either the Cygwin package manager or using pacman on Msys2.
diff --git a/Makefile b/Makefile
index 763dd714..bfb5ed9e 100644
--- a/Makefile
+++ b/Makefile
@@ -54,6 +54,9 @@ S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
+ARM9BIN := arm9/build/arm9.bin
+ARM7BIN := arm7/build/arm7.bin
+
##################### Compiler Options #######################
MWCCVERSION := 2.0/base
@@ -107,7 +110,7 @@ else
NODEP := 1
endif
-.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm
+.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm $(ARM9BIN) $(ARM7BIN)
MAKEFLAGS += --no-print-directory
@@ -115,12 +118,18 @@ all: $(ROM)
@$(SHA1SUM) -c $(TARGET).sha1
clean: mostlyclean
+ make -C arm9 clean
+ make -C arm7 clean
make -C tools/mwasmarm_patcher clean
mostlyclean: tidy
+ make -C arm9 mostlyclean
+ make -C arm7 mostlyclean
find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} +
tidy:
+ make -C arm9 tidy
+ make -C arm7 tidy
$(RM) -r $(BUILD_DIR)
tools: $(TOOLDIRS)
@@ -133,6 +142,12 @@ $(MWASMARM): patch_mwasmarm
patch_mwasmarm:
$(MWASMARM_PATCHER) $(MWASMARM)
+$(ARM9BIN):
+ @$(MAKE) -C arm9
+
+$(ARM7BIN):
+ @$(MAKE) -C arm7
+
ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS))
$(BUILD_DIR)/%.o: %.c
@@ -144,8 +159,8 @@ $(BUILD_DIR)/%.o: %.s
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt
$(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<
-$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT)
- $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES)
+$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT) $(ARM9BIN) $(ARM7BIN)
+ $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES) $(ARM9BIN) $(ARM7BIN)
$(ROM): $(ELF)
$(OBJCOPY) -O binary --gap-fill=0xFF --pad-to=0x04000000 $< $@
diff --git a/arm7/Makefile b/arm7/Makefile
new file mode 100644
index 00000000..d2c2681d
--- /dev/null
+++ b/arm7/Makefile
@@ -0,0 +1,175 @@
+# Makefile to build Pokemon Diamond image
+
+.PHONY: clean tidy all default patch_mwasmarm
+
+# Try to include devkitarm if installed
+TOOLCHAIN := $(DEVKITARM)
+
+ifneq (,$(wildcard $(TOOLCHAIN)/base_tools))
+include $(TOOLCHAIN)/base_tools
+endif
+
+### Default target ###
+
+default: all
+
+# If you are using WSL, it is recommended you build with NOWINE=1.
+WSLENV ?= no
+ifeq ($(WSLENV),)
+NOWINE = 1
+else
+NOWINE = 0
+endif
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+WINE :=
+else
+EXE :=
+WINE := wine
+endif
+
+ifeq ($(NOWINE),1)
+WINE :=
+endif
+
+################ Target Executable and Sources ###############
+
+BUILD_DIR := build
+
+TARGET := arm7
+
+ROM := $(BUILD_DIR)/$(TARGET).bin
+ELF := $(BUILD_DIR)/$(TARGET).elf
+LD_SCRIPT := arm7.lcf
+
+# Directories containing source files
+SRC_DIRS := src
+ASM_DIRS := asm data files
+
+C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
+S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
+
+# Object files
+O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
+ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
+
+##################### Compiler Options #######################
+
+MWCCVERSION := 2.0/base
+TOOLS_DIR = ../tools
+
+CROSS := arm-none-eabi-
+
+MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe
+# Argh... due to EABI version shenanigans, we can't use GNU LD to link together
+# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we
+# have to use mwldarm for now.
+# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the
+# only dependency should be MWCCARM.
+MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe
+MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe
+
+AS := $(WINE) $(MWASMARM)
+CC := $(WINE) $(MWCCARM)
+CPP := cpp -P
+LD := $(WINE) $(MWLDARM)
+AR := $(CROSS)ar
+OBJDUMP := $(CROSS)objdump
+OBJCOPY := $(CROSS)objcopy
+
+# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm7_thumb.s -o arm7.o
+ASFLAGS = -proc arm5te -i ..
+CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include
+LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start
+
+####################### Other Tools #########################
+
+# DS TOOLS
+SHA1SUM = sha1sum
+JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc
+GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx
+MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE)
+
+TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*))
+TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
+TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
+
+######################### Targets ###########################
+
+infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
+
+# Build tools when building the rom
+# Disable dependency scanning for clean/tidy/tools
+ifeq (,$(filter-out all,$(MAKECMDGOALS)))
+$(call infoshell, $(MAKE) tools patch_mwasmarm)
+else
+NODEP := 1
+endif
+
+.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm
+
+MAKEFLAGS += --no-print-directory
+
+all: $(ROM)
+ # @$(SHA1SUM) -c $(TARGET).sha1
+
+clean: mostlyclean
+ make -C $(TOOLS_DIR)/mwasmarm_patcher clean
+
+mostlyclean: tidy
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} +
+
+tidy:
+ $(RM) -r $(BUILD_DIR)
+
+tools: $(TOOLDIRS)
+
+$(TOOLDIRS):
+ @$(MAKE) -C $@
+
+$(MWASMARM): patch_mwasmarm
+
+patch_mwasmarm:
+ $(MWASMARM_PATCHER) $(MWASMARM)
+
+ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS))
+
+$(BUILD_DIR)/%.o: %.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(BUILD_DIR)/%.o: %.s
+ $(AS) $(ASFLAGS) $< -o $@
+
+$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt
+ $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<
+
+$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT)
+ $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES)
+
+$(ROM): $(ELF)
+ $(OBJCOPY) -O binary --gap-fill=0xFF $< $@
+
+# Make sure build directory exists before compiling anything
+DUMMY != mkdir -p $(ALL_DIRS)
+
+%.4bpp: %.png
+ $(GFX) $< $@
+
+%.gbapal: %.png
+ $(GFX) $< $@
+
+%.gbapal: %.pal
+ $(GFX) $< $@
+
+%.lz: %
+ $(GFX) $< $@
+
+%.png: ;
+%.pal: ;
+
+$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal
+
+### Debug Print ###
+
+print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true
diff --git a/arm7/arm7.lcf b/arm7/arm7.lcf
new file mode 100644
index 00000000..784c4cbb
--- /dev/null
+++ b/arm7/arm7.lcf
@@ -0,0 +1,10 @@
+MEMORY {
+ .text (RX) : ORIGIN=0x02380000, LENGTH=0
+}
+
+SECTIONS {
+#include "undefined_syms.txt"
+ .text : AT (0x0) {
+ arm7_rom.o (.text)
+ } > .text
+}
diff --git a/asm/arm7_rom.s b/arm7/asm/arm7_rom.s
index a18e8565..3366eba4 100644
--- a/asm/arm7_rom.s
+++ b/arm7/asm/arm7_rom.s
@@ -3,9 +3,9 @@
.global ARM7AutoLoad
.section .text
- arm_func_start Entry_ARM7
+ arm_func_start _start
-Entry_ARM7:
+_start:
mov ip, #67108864 ; 0x4000000
str ip, [ip, #520] ; 0x208
ldr r1, _23800cc
@@ -61,7 +61,7 @@ _023800a4:
ldr r1, _23800f8
ldr lr, _23800fc
bx r1
-_23800cc: .word UNK_23801B0
+_23800cc: .word FUN_023801B0
_23800d0: .word 0x0380ff00
_23800d4: .word 0x0380ffc0
_23800d8: .word 0x0380ff80
@@ -74,7 +74,7 @@ _23800f0: .word 0x0380fffc
_23800f4: .word 0x037f853c
_23800f8: .word 0x037f8468
_23800fc: .word 0xffff0000
- arm_func_end Entry_ARM7
+ arm_func_end _start
arm_func_start FUN_2380100
FUN_2380100:
@@ -129,17 +129,84 @@ _0238018c:
_2380194: .word 0x027ffffa
_2380198:
.word UNK_23A92F8
- .word UNK_23A92FC
- .word UNK_23801B0
- .word UNK_23801B0
- .word UNK_23801B0
+ .word UNK_23A931C
+ .word FUN_023801B0
+ .word FUN_023801B0
+ .word FUN_023801B0
.word 0x00000000
arm_func_end FUN_238015C
-UNK_23801B0:
- .incbin "baserom.nds", 0x30D1B0, 0x29148
+ arm_func_start FUN_023801B0
+FUN_023801B0:
+ .incbin "baserom.nds", 0x30D1B0, 0x91B0
+
+ thumb_func_start ROM7_SVC_SoftReset
+ROM7_SVC_SoftReset: ; 0x02389360
+ swi 0
+ bx lr
+
+ thumb_func_start ROM7_SVC_WaitByLoop
+ROM7_SVC_WaitByLoop: ; 0x02389364
+ swi 3
+ bx lr
+
+ thumb_func_start ROM7_SVC_WaitIntr
+ROM7_SVC_WaitIntr: ; 0x02389368
+ ldr r2, =0x04000000
+ mov ip, r2
+ mov r2, #0x0
+ swi 4
+ bx lr
+ .pool
+
+ thumb_func_start ROM7_SVC_WaitVBlankIntr
+ROM7_SVC_WaitVBlankIntr:
+ mov r2, #0x0
+ swi 5
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Halt
+ROM7_SVC_Halt:
+ swi 6
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Stop
+ROM7_SVC_Stop:
+ swi 7
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_SoundBias
+ROM7_SVC_SoundBias:
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_SoundBiasSet
+ROM7_SVC_SoundBiasSet:
+ add r1, r0, #0x0
+ mov r0, #0x1
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_SoundBiasReset
+ROM7_SVC_SoundBiasReset:
+ add r1, r0, #0x0
+ mov r0, #0x0
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_Div
+ROM7_SVC_Div:
+ swi 9
+ bx lr
+
+ non_word_aligned_thumb_func_start ROM7_SVC_DivRem
+ROM7_SVC_DivRem:
+ swi 9
+ add r0, r1, #0x0
+ bx lr
+ .incbin "baserom.nds", 0x3163a4, 0x1ff54
UNK_23A92F8:
.incbin "baserom.nds", 0x3362F8, 0x24
-UNK_23A92FC:
+UNK_23A931C:
diff --git a/arm7/asm/macros.inc b/arm7/asm/macros.inc
new file mode 100644
index 00000000..156b2b09
--- /dev/null
+++ b/arm7/asm/macros.inc
@@ -0,0 +1 @@
+ .include "asm/macros/function.inc"
diff --git a/arm7/asm/macros/function.inc b/arm7/asm/macros/function.inc
new file mode 100644
index 00000000..6b9e5f40
--- /dev/null
+++ b/arm7/asm/macros/function.inc
@@ -0,0 +1,24 @@
+ .macro arm_func_start name
+ .balign 4, 0
+ .global \name
+ .arm
+ .endm
+
+ .macro arm_func_end name
+ .size \name, .-\name
+ .endm
+
+ .macro thumb_func_start name
+ .balign 4, 0
+ .global \name
+ .thumb
+ .endm
+
+ .macro non_word_aligned_thumb_func_start name
+ .global \name
+ .thumb
+ .endm
+
+ .macro thumb_func_end name
+ .size \name, .-\name
+ .endm
diff --git a/arm7/global.inc b/arm7/global.inc
new file mode 100644
index 00000000..478abdaa
--- /dev/null
+++ b/arm7/global.inc
@@ -0,0 +1,3517 @@
+.extern CARD_CancelBackupAsync
+.extern CARD_GetResultCode
+.extern CARD_IdentifyBackup
+.extern CARD_Init
+.extern CARD_IsPulledOut
+.extern CARD_LockBackup
+.extern CARD_LockRom
+.extern CARD_TryWaitBackupAsync
+.extern CARD_UnlockBackup
+.extern CARD_UnlockRom
+.extern CARD_WaitBackupAsync
+.extern CARDi_ReadRom
+.extern CARDi_RequestStreamCommand
+.extern CP_RestoreContext
+.extern CP_SaveContext
+.extern CTRDG_Init
+.extern CTRDG_IsExisting
+.extern CTRDG_IsPulledOut
+.extern Call_FillMemWithValue
+.extern ConvertUIntToDecimalString
+.extern DC_FlushAll
+.extern DC_FlushRange
+.extern DC_InvalidateAll
+.extern DC_InvalidateRange
+.extern DC_StoreAll
+.extern DC_StoreRange
+.extern DC_WaitWriteBufferEmpty
+.extern DGT_Hash1GetDigest_R
+.extern DGT_Hash1Reset
+.extern DGT_Hash1SetSource
+.extern DGTi_hash2_arm4_small
+.extern ErrorHandling
+.extern FS_CloseFile
+.extern FS_ConvertPathToFileID
+.extern FS_FindArchive
+.extern FS_Init
+.extern FS_InitFile
+.extern FS_IsAvailable
+.extern FS_LoadOverlay
+.extern FS_LoadOverlayImage
+.extern FS_LoadOverlayImageAsync
+.extern FS_LoadOverlayInfo
+.extern FS_OpenFile
+.extern FS_OpenFileFast
+.extern FS_ReadFile
+.extern FS_SeekFile
+.extern FS_SetDefaultDMA
+.extern FS_StartOverlay
+.extern FS_TryLoadTable
+.extern FS_UnloadOverlay
+.extern FS_WaitAsync
+.extern FUNRTC_Init
+.extern FUN_0200019E
+.extern FUN_020002FE
+.extern SVC_WaitByLoop
+.extern OSi_ReferSymbol
+.extern FUN_02000DF4
+.extern FUN_02000E7C
+.extern FUN_02000EE8
+.extern FUN_02000F18
+.extern FUN_02000FA4
+.extern FUN_02000FE8
+.extern FUN_020010A8
+.extern FUN_02001204
+.extern FUN_02001300
+.extern FUN_020013E8
+.extern FUN_02001448
+.extern FUN_02001470
+.extern FUN_02001B8C
+.extern FUN_02001C14
+.extern FUN_02001C5C
+.extern FUN_02001C78
+.extern FUN_02001D2C
+.extern FUN_02001E5C
+.extern FUN_020020EC
+.extern FUN_02002198
+.extern FUN_020021AC
+.extern FUN_02002840
+.extern FUN_02002B60
+.extern FUN_02002B7C
+.extern FUN_02002BB8
+.extern FUN_02002C14
+.extern FUN_02002C50
+.extern FUN_02002C84
+.extern FUN_02002CC0
+.extern FUN_02002CF8
+.extern FUN_02002DB0
+.extern FUN_02002DE0
+.extern FUN_02002E14
+.extern FUN_02002E4C
+.extern FUN_02002ED0
+.extern FUN_02002EEC
+.extern FUN_02002F08
+.extern FUN_02002FD0
+.extern FUN_02002FEC
+.extern FUN_02003008
+.extern FUN_02003038
+.extern FUN_02003054
+.extern FUN_020030E8
+.extern FUN_02003108
+.extern FUN_020031FC
+.extern FUN_02003210
+.extern FUN_0200372C
+.extern FUN_020038E4
+.extern FUN_020038F0
+.extern FUN_02003974
+.extern FUN_02003B98
+.extern FUN_02003C10
+.extern FUN_020040F4
+.extern FUN_02004104
+.extern FUN_02004124
+.extern FUN_0200414C
+.extern FUN_0200415C
+.extern FUN_0200433C
+.extern FUN_02004724
+.extern FUN_020047C8
+.extern FUN_02004810
+.extern FUN_0200488C
+.extern FUN_02004DCC
+.extern FUN_02004E08
+.extern FUN_0200516C
+.extern FUN_020051F4
+.extern FUN_0200521C
+.extern FUN_02005308
+.extern FUN_02005350
+.extern FUN_0200538C
+.extern FUN_020053CC
+.extern FUN_02005404
+.extern FUN_02005410
+.extern FUN_0200541C
+.extern FUN_020054C8
+.extern FUN_020054F0
+.extern FUN_02005508
+.extern FUN_02005514
+.extern FUN_02005578
+.extern FUN_02005670
+.extern FUN_020056AC
+.extern FUN_02005C28
+.extern FUN_02005CBC
+.extern FUN_02005D20
+.extern FUN_02005E28
+.extern FUN_02005E64
+.extern FUN_02005E6C
+.extern FUN_02005E80
+.extern FUN_02005E90
+.extern FUN_02005F14
+.extern FUN_02005F60
+.extern FUN_02005FDC
+.extern FUN_020061E8
+.extern FUN_0200621C
+.extern FUN_02006234
+.extern FUN_02006260
+.extern FUN_02006268
+.extern FUN_02006278
+.extern FUN_0200627C
+.extern FUN_0200628C
+.extern FUN_02006290
+.extern FUN_02006528
+.extern FUN_02006548
+.extern FUN_02006564
+.extern FUN_02006670
+.extern FUN_020066F4
+.extern FUN_02006704
+.extern FUN_02006774
+.extern FUN_02006814
+.extern FUN_0200687C
+.extern FUN_020068C8
+.extern FUN_02006930
+.extern FUN_02006BB0
+.extern FUN_02006C08
+.extern FUN_02006C98
+.extern FUN_02006D98
+.extern FUN_02006ED4
+.extern FUN_020072E8
+.extern FUN_02007314
+.extern FUN_0200737C
+.extern FUN_02007390
+.extern FUN_020073A0
+.extern FUN_02007534
+.extern FUN_02007558
+.extern FUN_0200782C
+.extern FUN_020079E0
+.extern FUN_02007E68
+.extern FUN_02007E98
+.extern FUN_02007F20
+.extern FUN_020080D0
+.extern FUN_020081C4
+.extern FUN_02008AA4
+.extern FUN_02008BE0
+.extern FUN_02008C80
+.extern FUN_02008C9C
+.extern FUN_02008D24
+.extern FUN_02008DEC
+.extern FUN_02008E2C
+.extern FUN_02008F34
+.extern FUN_02008FEC
+.extern FUN_020090AC
+.extern FUN_02009168
+.extern FUN_020093A8
+.extern FUN_02009424
+.extern FUN_02009448
+.extern FUN_02009630
+.extern FUN_0200965C
+.extern FUN_02009668
+.extern FUN_020096B4
+.extern FUN_020096CC
+.extern FUN_02009A50
+.extern FUN_02009B04
+.extern FUN_02009B44
+.extern FUN_02009B78
+.extern FUN_02009C0C
+.extern FUN_02009C30
+.extern FUN_02009CF0
+.extern FUN_02009DAC
+.extern FUN_02009DE0
+.extern FUN_02009E04
+.extern FUN_02009E28
+.extern FUN_02009E88
+.extern FUN_02009EAC
+.extern FUN_02009F80
+.extern FUN_02009FA0
+.extern FUN_0200A208
+.extern FUN_0200A274
+.extern FUN_0200A2AC
+.extern FUN_0200A318
+.extern FUN_0200A344
+.extern FUN_0200A648
+.extern FUN_0200A738
+.extern FUN_0200A86C
+.extern FUN_0200A8B8
+.extern FUN_0200A8E0
+.extern FUN_0200A914
+.extern FUN_0200A968
+.extern FUN_0200A99C
+.extern FUN_0200A9C4
+.extern FUN_0200AA50
+.extern FUN_0200AA80
+.extern FUN_0200AA90
+.extern FUN_0200AB18
+.extern FUN_0200ABB4
+.extern FUN_0200ABC0
+.extern FUN_0200ABE4
+.extern FUN_0200AC0C
+.extern FUN_0200AC60
+.extern FUN_0200ACA4
+.extern FUN_0200ACC0
+.extern FUN_0200ACF8
+.extern FUN_0200AD18
+.extern FUN_0200AD38
+.extern FUN_0200AD5C
+.extern FUN_0200AD94
+.extern FUN_0200ADCC
+.extern FUN_0200AE04
+.extern FUN_0200AE38
+.extern FUN_0200AE70
+.extern FUN_0200AEA8
+.extern FUN_0200AEE0
+.extern FUN_0200AF18
+.extern FUN_0200AF50
+.extern FUN_0200AFF4
+.extern FUN_0200B02C
+.extern FUN_0200B064
+.extern FUN_0200B09C
+.extern FUN_0200B164
+.extern FUN_0200B19C
+.extern FUN_0200B1D4
+.extern FUN_0200B20C
+.extern FUN_0200B244
+.extern FUN_0200B278
+.extern FUN_0200B2AC
+.extern FUN_0200B350
+.extern FUN_0200B388
+.extern FUN_0200B410
+.extern FUN_0200B4A0
+.extern FUN_0200B4D8
+.extern FUN_0200B518
+.extern FUN_0200B534
+.extern FUN_0200B568
+.extern FUN_0200B59C
+.extern FUN_0200B628
+.extern FUN_0200B660
+.extern FUN_0200B698
+.extern FUN_0200B6D0
+.extern FUN_0200B708
+.extern FUN_0200B764
+.extern FUN_0200B7A8
+.extern FUN_0200B7B8
+.extern FUN_0200B870
+.extern FUN_0200B990
+.extern FUN_0200B9A8
+.extern FUN_0200B9EC
+.extern FUN_0200BA78
+.extern FUN_0200BB14
+.extern FUN_0200BB34
+.extern FUN_0200BB68
+.extern FUN_0200BB6C
+.extern FUN_0200BBF0
+.extern FUN_0200BC1C
+.extern FUN_0200BC30
+.extern FUN_0200BCE0
+.extern FUN_0200BD04
+.extern FUN_0200BD20
+.extern FUN_0200BE38
+.extern FUN_0200BF60
+.extern FUN_0200C00C
+.extern FUN_0200C06C
+.extern FUN_0200C0DC
+.extern FUN_0200C124
+.extern FUN_0200C13C
+.extern FUN_0200C154
+.extern FUN_0200C358
+.extern FUN_0200C368
+.extern FUN_0200C378
+.extern FUN_0200C388
+.extern FUN_0200C398
+.extern FUN_0200C3DC
+.extern FUN_0200C5A8
+.extern FUN_0200C61C
+.extern FUN_0200C63C
+.extern FUN_0200C644
+.extern FUN_0200C664
+.extern FUN_0200C66C
+.extern FUN_0200C6E4
+.extern FUN_0200C714
+.extern FUN_0200C75C
+.extern FUN_0200C7A0
+.extern FUN_0200C82C
+.extern FUN_0200C840
+.extern FUN_0200C884
+.extern FUN_0200C9D8
+.extern FUN_0200CA0C
+.extern FUN_0200CA44
+.extern FUN_0200CAB4
+.extern FUN_0200CABC
+.extern FUN_0200CAFC
+.extern FUN_0200CB00
+.extern FUN_0200CCA4
+.extern FUN_0200CCF8
+.extern FUN_0200CD64
+.extern FUN_0200CD68
+.extern FUN_0200D0BC
+.extern FUN_0200D0E0
+.extern FUN_0200D274
+.extern FUN_0200D300
+.extern FUN_0200D6F8
+.extern FUN_0200D858
+.extern FUN_0200DBFC
+.extern FUN_0200DC4C
+.extern FUN_0200DCA4
+.extern FUN_0200E1D0
+.extern FUN_0200E2D8
+.extern FUN_0200E308
+.extern FUN_0200E388
+.extern FUN_0200E394
+.extern FUN_0200E3A0
+.extern FUN_0200E3BC
+.extern FUN_02011B20
+.extern FUN_02012420
+.extern FUN_0201259C
+.extern FUN_020125D4
+.extern FUN_0201265C
+.extern FUN_020126B4
+.extern FUN_020126D8
+.extern FUN_020126FC
+.extern FUN_0201277C
+.extern FUN_020127A8
+.extern FUN_020127C0
+.extern FUN_02012838
+.extern FUN_02012870
+.extern FUN_02012880
+.extern FUN_020128A0
+.extern FUN_02012CC8
+.extern FUN_02012CDC
+.extern FUN_02012DE4
+.extern FUN_0201318C
+.extern FUN_02013194
+.extern FUN_0201327C
+.extern FUN_020132BC
+.extern FUN_02013364
+.extern FUN_02013388
+.extern FUN_020133AC
+.extern FUN_020133C8
+.extern FUN_020133E8
+.extern FUN_0201343C
+.extern FUN_02013440
+.extern FUN_02013690
+.extern FUN_020136C0
+.extern FUN_020136E0
+.extern FUN_020136F8
+.extern FUN_0201373C
+.extern FUN_02013754
+.extern FUN_0201385C
+.extern FUN_02013918
+.extern FUN_02013920
+.extern FUN_02013924
+.extern FUN_02013928
+.extern FUN_02013960
+.extern FUN_020139D8
+.extern FUN_02013A10
+.extern FUN_02013A30
+.extern FUN_02013A9C
+.extern FUN_02013B5C
+.extern FUN_02013B68
+.extern FUN_02013B74
+.extern FUN_02013BC8
+.extern FUN_02013BE4
+.extern FUN_02013C0C
+.extern FUN_02013C18
+.extern FUN_020142EC
+.extern FUN_020143A8
+.extern FUN_020143D0
+.extern FUN_02014BF4
+.extern FUN_02014C28
+.extern FUN_02014C3C
+.extern FUN_02014C54
+.extern FUN_02014D7C
+.extern FUN_02014D9C
+.extern FUN_02015CF8
+.extern FUN_02015E30
+.extern FUN_02015E60
+.extern FUN_02015EF4
+.extern FUN_02015F10
+.extern FUN_02015F1C
+.extern FUN_02015F34
+.extern FUN_020161A4
+.extern FUN_020163BC
+.extern FUN_02016438
+.extern FUN_02016464
+.extern FUN_0201669C
+.extern FUN_020166C8
+.extern FUN_0201681C
+.extern FUN_02016828
+.extern FUN_020168D0
+.extern FUN_02016998
+.extern FUN_020169D8
+.extern FUN_02016A18
+.extern FUN_02016A8C
+.extern FUN_02016AF8
+.extern FUN_02016B94
+.extern FUN_02016BBC
+.extern FUN_02016C18
+.extern FUN_020178A0
+.extern FUN_020178BC
+.extern FUN_0201797C
+.extern FUN_020179E0
+.extern FUN_02017B48
+.extern FUN_02017B54
+.extern FUN_02017CD0
+.extern FUN_02017CE8
+.extern FUN_02017DFC
+.extern FUN_02017E14
+.extern FUN_02017F18
+.extern FUN_02017FB4
+.extern FUN_02017FE4
+.extern FUN_02018148
+.extern FUN_02018170
+.extern FUN_02018540
+.extern FUN_020186B4
+.extern FUN_02018744
+.extern FUN_0201886C
+.extern FUN_02018884
+.extern FUN_02018FF4
+.extern FUN_0201901C
+.extern FUN_02019048
+.extern FUN_02019064
+.extern FUN_02019150
+.extern FUN_02019178
+.extern FUN_020191A4
+.extern FUN_020191D0
+.extern FUN_02019220
+.extern FUN_02019548
+.extern FUN_02019570
+.extern FUN_0201958C
+.extern FUN_02019620
+.extern FUN_02019658
+.extern FUN_020196F4
+.extern FUN_0201974C
+.extern FUN_0201A8C8
+.extern FUN_0201AB08
+.extern FUN_0201AB0C
+.extern FUN_0201AB10
+.extern FUN_0201AB14
+.extern FUN_0201AB18
+.extern FUN_0201AB60
+.extern FUN_0201AC68
+.extern FUN_0201AEE4
+.extern FUN_0201AFBC
+.extern FUN_0201B234
+.extern FUN_0201B5CC
+.extern FUN_0201B6C4
+.extern FUN_0201B6C8
+.extern FUN_0201B6D0
+.extern FUN_0201B76C
+.extern FUN_0201B7DC
+.extern FUN_0201B8B8
+.extern FUN_0201B8E0
+.extern FUN_0201B914
+.extern FUN_0201B93C
+.extern FUN_0201B970
+.extern FUN_0201B9D4
+.extern FUN_0201B9E0
+.extern FUN_0201B9EC
+.extern FUN_0201BA10
+.extern FUN_0201BA1C
+.extern FUN_0201BA60
+.extern FUN_0201BCBC
+.extern FUN_0201BD5C
+.extern FUN_0201BD70
+.extern FUN_0201BD7C
+.extern FUN_0201BD84
+.extern FUN_0201BDE0
+.extern FUN_0201BE3C
+.extern FUN_0201C05C
+.extern FUN_0201C1EC
+.extern FUN_0201C24C
+.extern FUN_0201C29C
+.extern FUN_0201C30C
+.extern FUN_0201C620
+.extern FUN_0201C638
+.extern FUN_0201CC08
+.extern FUN_0201CC24
+.extern FUN_0201CD04
+.extern FUN_0201CDD0
+.extern FUN_0201CE04
+.extern FUN_0201D040
+.extern FUN_0201D12C
+.extern FUN_0201D168
+.extern FUN_0201E00C
+.extern FUN_0201E08C
+.extern FUN_0201E0BC
+.extern FUN_0201E28C
+.extern FUN_0201E66C
+.extern FUN_0201E6D8
+.extern FUN_0201E6E4
+.extern FUN_0201E740
+.extern FUN_0201E74C
+.extern FUN_0201E788
+.extern FUN_0201E7A0
+.extern FUN_0201EB64
+.extern FUN_0201EB70
+.extern FUN_0201EB8C
+.extern FUN_0201EBA4
+.extern FUN_0201EC68
+.extern FUN_0201EC88
+.extern FUN_0201EC94
+.extern FUN_0201ED10
+.extern FUN_0201EEF0
+.extern FUN_0201EF70
+.extern FUN_0201EF90
+.extern FUN_0201EFE0
+.extern FUN_0201EFEC
+.extern FUN_0201F04C
+.extern FUN_0201F854
+.extern FUN_0201FD58
+.extern FUN_0201FDEC
+.extern FUN_0201FE94
+.extern FUN_0201FFC8
+.extern FUN_02020044
+.extern FUN_020200A0
+.extern FUN_020200BC
+.extern FUN_02020100
+.extern FUN_0202011C
+.extern FUN_02020128
+.extern FUN_02020130
+.extern FUN_020201DC
+.extern FUN_020201E4
+.extern FUN_02020208
+.extern FUN_0202022C
+.extern FUN_02020248
+.extern FUN_02020310
+.extern FUN_02020354
+.extern FUN_02020388
+.extern FUN_02020398
+.extern FUN_02020968
+.extern FUN_02020988
+.extern FUN_02020AFC
+.extern FUN_02021590
+.extern FUN_020215C8
+.extern FUN_020215E0
+.extern FUN_02021750
+.extern FUN_020218D8
+.extern FUN_02021934
+.extern FUN_0202199C
+.extern FUN_020219F4
+.extern FUN_02021A20
+.extern FUN_02021A4C
+.extern FUN_02021A74
+.extern FUN_02021CE0
+.extern FUN_02021D3C
+.extern FUN_02021E28
+.extern FUN_02021EF0
+.extern FUN_02021F2C
+.extern FUN_0202212C
+.extern FUN_02022294
+.extern FUN_020222AC
+.extern FUN_020222B4
+.extern FUN_020222C4
+.extern FUN_020222E8
+.extern FUN_020222F0
+.extern FUN_020222F8
+.extern FUN_02022300
+.extern FUN_02022308
+.extern FUN_02022310
+.extern FUN_02022318
+.extern FUN_020223BC
+.extern FUN_02022504
+.extern FUN_02022510
+.extern FUN_02022528
+.extern FUN_02022534
+.extern FUN_02022540
+.extern FUN_0202254C
+.extern FUN_020225F8
+.extern FUN_02022610
+.extern FUN_0202263C
+.extern FUN_02022720
+.extern FUN_020227FC
+.extern FUN_02022800
+.extern FUN_02022804
+.extern FUN_0202280C
+.extern FUN_0202282C
+.extern FUN_02022830
+.extern FUN_0202287C
+.extern FUN_02023788
+.extern FUN_02023794
+.extern FUN_02023818
+.extern FUN_0202381C
+.extern FUN_02023828
+.extern FUN_02023874
+.extern FUN_02023884
+.extern FUN_020238F4
+.extern FUN_0202390C
+.extern FUN_02023918
+.extern FUN_02023924
+.extern FUN_02023928
+.extern FUN_0202393C
+.extern FUN_0202395C
+.extern FUN_0202397C
+.extern FUN_0202398C
+.extern FUN_02023990
+.extern FUN_020239A0
+.extern FUN_020239BC
+.extern FUN_020239C0
+.extern FUN_020239C8
+.extern FUN_020239CC
+.extern FUN_020239D0
+.extern FUN_020239E4
+.extern FUN_02023A10
+.extern FUN_02023A28
+.extern FUN_02023A2C
+.extern FUN_02023A30
+.extern FUN_02023A54
+.extern FUN_02023A68
+.extern FUN_02023A70
+.extern FUN_02023A78
+.extern FUN_02023A88
+.extern FUN_02023A90
+.extern FUN_02023A9C
+.extern FUN_02023AA4
+.extern FUN_02023AF4
+.extern FUN_02023B0C
+.extern FUN_02023BD4
+.extern FUN_02023C90
+.extern FUN_02023D58
+.extern FUN_02023D6C
+.extern FUN_02023D80
+.extern FUN_020243C8
+.extern FUN_02024404
+.extern FUN_02024440
+.extern FUN_0202445C
+.extern FUN_020244A4
+.extern FUN_020244EC
+.extern FUN_02024504
+.extern FUN_02024518
+.extern FUN_02024550
+.extern FUN_020245F0
+.extern FUN_0202471C
+.extern FUN_0202498C
+.extern FUN_02024AF0
+.extern FUN_02024C84
+.extern FUN_02024CA4
+.extern FUN_02024CE0
+.extern FUN_02024D4C
+.extern FUN_02024D64
+.extern FUN_02024D80
+.extern FUN_02024DA0
+.extern FUN_02024EB4
+.extern FUN_02024EC0
+.extern FUN_02024ECC
+.extern FUN_02024ED8
+.extern FUN_02024EE8
+.extern FUN_02024F0C
+.extern FUN_02024F30
+.extern FUN_02024F44
+.extern FUN_02024FF4
+.extern FUN_02025084
+.extern FUN_02025128
+.extern FUN_02025238
+.extern FUN_02025244
+.extern FUN_0202524C
+.extern FUN_02025268
+.extern FUN_02025274
+.extern FUN_020252AC
+.extern FUN_020252C4
+.extern FUN_020252D0
+.extern FUN_020252DC
+.extern FUN_020252E8
+.extern FUN_020252F4
+.extern FUN_020253E0
+.extern FUN_02025484
+.extern FUN_02025490
+.extern FUN_020254A0
+.extern FUN_020254B4
+.extern FUN_020254C0
+.extern FUN_02025520
+.extern FUN_02025614
+.extern FUN_02025658
+.extern FUN_020256AC
+.extern FUN_020256BC
+.extern FUN_020256D0
+.extern FUN_020256DC
+.extern FUN_020257C0
+.extern FUN_020257C4
+.extern FUN_020257C8
+.extern FUN_020257CC
+.extern FUN_020257D0
+.extern FUN_020257D8
+.extern FUN_020257DC
+.extern FUN_020257E0
+.extern FUN_02025814
+.extern FUN_02025824
+.extern FUN_02025838
+.extern FUN_02025864
+.extern FUN_02025878
+.extern FUN_02025888
+.extern FUN_0202589C
+.extern FUN_020258B0
+.extern FUN_020258D4
+.extern FUN_02025A60
+.extern FUN_02025B60
+.extern FUN_02025B94
+.extern FUN_02025BE8
+.extern FUN_02025C30
+.extern FUN_02025C40
+.extern FUN_02025D6C
+.extern FUN_02025D94
+.extern FUN_02025DB0
+.extern FUN_020260C4
+.extern FUN_02026298
+.extern FUN_020266B0
+.extern FUN_020266C8
+.extern FUN_020268D4
+.extern FUN_02026908
+.extern FUN_02026970
+.extern FUN_020269A0
+.extern FUN_020269CC
+.extern FUN_020269D4
+.extern FUN_02026BC8
+.extern FUN_02026C00
+.extern FUN_02026CB4
+.extern FUN_02026CC4
+.extern FUN_02026FE4
+.extern FUN_02026FE8
+.extern FUN_02027008
+.extern FUN_02027044
+.extern FUN_0202708C
+.extern FUN_02027098
+.extern FUN_020270B4
+.extern FUN_020270D8
+.extern FUN_02027100
+.extern FUN_02027114
+.extern FUN_02027168
+.extern FUN_02027184
+.extern FUN_020271A4
+.extern FUN_02027210
+.extern FUN_02027264
+.extern FUN_02027478
+.extern FUN_020275D8
+.extern FUN_02027608
+.extern FUN_0202763C
+.extern FUN_0202769C
+.extern FUN_020276A8
+.extern FUN_02027710
+.extern FUN_02027740
+.extern FUN_0202787C
+.extern FUN_020278AC
+.extern FUN_020278DC
+.extern FUN_02027914
+.extern FUN_02027964
+.extern FUN_02027E24
+.extern FUN_02027E34
+.extern FUN_02027E5C
+.extern FUN_02027F04
+.extern FUN_02027FBC
+.extern FUN_02027FDC
+.extern FUN_02028048
+.extern FUN_02028074
+.extern FUN_02028094
+.extern FUN_020280B8
+.extern FUN_020280F4
+.extern FUN_02028174
+.extern FUN_02028190
+.extern FUN_020281B8
+.extern FUN_02028448
+.extern FUN_020286EC
+.extern FUN_02028700
+.extern FUN_02028754
+.extern FUN_02028788
+.extern FUN_020287A4
+.extern FUN_020287A8
+.extern FUN_020287C0
+.extern FUN_020287EC
+.extern FUN_02028810
+.extern FUN_0202881C
+.extern FUN_02028828
+.extern FUN_02028840
+.extern FUN_02028930
+.extern FUN_02028934
+.extern FUN_02028954
+.extern FUN_0202896C
+.extern FUN_020289A4
+.extern FUN_020289B0
+.extern FUN_02028A20
+.extern FUN_02028AD4
+.extern FUN_02028FA4
+.extern FUN_02029048
+.extern FUN_02029120
+.extern FUN_0202912C
+.extern FUN_02029138
+.extern FUN_0202914C
+.extern FUN_0202918C
+.extern FUN_0202920C
+.extern FUN_0202942C
+.extern FUN_02029500
+.extern FUN_02029880
+.extern FUN_020299C0
+.extern FUN_020299DC
+.extern FUN_02029ABC
+.extern FUN_02029AC8
+.extern FUN_02029ACC
+.extern FUN_02029AD0
+.extern FUN_02029AD8
+.extern FUN_02029AFC
+.extern FUN_02029B38
+.extern FUN_02029B3C
+.extern FUN_02029C08
+.extern FUN_02029C74
+.extern FUN_02029C80
+.extern FUN_02029C8C
+.extern FUN_02029CC8
+.extern FUN_02029CE0
+.extern FUN_02029CEC
+.extern FUN_02029D44
+.extern FUN_02029DD4
+.extern FUN_02029E0C
+.extern FUN_02029E2C
+.extern FUN_02029EBC
+.extern FUN_02029EC0
+.extern FUN_02029EC4
+.extern FUN_02029EE4
+.extern FUN_02029EF8
+.extern FUN_02029F04
+.extern FUN_02029F10
+.extern FUN_02029F14
+.extern FUN_02029F4C
+.extern FUN_02029F9C
+.extern FUN_02029FC8
+.extern FUN_0202A07C
+.extern FUN_0202A0A8
+.extern FUN_0202A0E8
+.extern FUN_0202A11C
+.extern FUN_0202A150
+.extern FUN_0202A170
+.extern FUN_0202A1B8
+.extern FUN_0202A240
+.extern FUN_0202A2C4
+.extern FUN_0202A3B4
+.extern FUN_0202A498
+.extern FUN_0202A520
+.extern FUN_0202A538
+.extern FUN_0202A578
+.extern FUN_0202A5CC
+.extern FUN_0202A5D0
+.extern FUN_0202A5D4
+.extern FUN_0202A5F4
+.extern FUN_0202A74C
+.extern FUN_0202A864
+.extern FUN_0202A8CC
+.extern FUN_0202A8D8
+.extern FUN_0202A8E4
+.extern FUN_0202A918
+.extern FUN_0202A988
+.extern FUN_0202A990
+.extern FUN_0202A9AC
+.extern FUN_0202A9B0
+.extern FUN_0202A9D0
+.extern FUN_0202AA00
+.extern FUN_0202AA14
+.extern FUN_0202AA20
+.extern FUN_0202AA38
+.extern FUN_0202AA40
+.extern FUN_0202AA58
+.extern FUN_0202AA74
+.extern FUN_0202AAA0
+.extern FUN_0202AAFC
+.extern FUN_0202AB40
+.extern FUN_0202AB68
+.extern FUN_0202AF70
+.extern FUN_0202AF88
+.extern FUN_0202AF9C
+.extern FUN_0202AFC0
+.extern FUN_0202AFFC
+.extern FUN_0202B020
+.extern FUN_0202B03C
+.extern FUN_0202B050
+.extern FUN_0202B21C
+.extern FUN_0202B3C4
+.extern FUN_0202B4B0
+.extern FUN_0202B710
+.extern FUN_0202B838
+.extern FUN_0202B844
+.extern FUN_0202B850
+.extern FUN_0202B85C
+.extern FUN_0202B868
+.extern FUN_0202B870
+.extern FUN_0202B87C
+.extern FUN_0202B8E4
+.extern FUN_0202B8F0
+.extern FUN_0202BD6C
+.extern FUN_0202BDF0
+.extern FUN_0202BE6C
+.extern FUN_0202BEDC
+.extern FUN_0202BFD8
+.extern FUN_0202C000
+.extern FUN_0202C108
+.extern FUN_0202C144
+.extern FUN_0202CB8C
+.extern FUN_0202D8B0
+.extern FUN_0202D8D0
+.extern FUN_0202DBE0
+.extern FUN_0202DCF8
+.extern FUN_0202DDE8
+.extern FUN_0202DE78
+.extern FUN_0202DFA4
+.extern FUN_0202E020
+.extern FUN_0202E044
+.extern FUN_0202E25C
+.extern FUN_0202E4C8
+.extern FUN_0202EDD8
+.extern FUN_0202EDF8
+.extern FUN_0202EE0C
+.extern FUN_0202EE24
+.extern FUN_0202EE44
+.extern FUN_0202EF18
+.extern FUN_0202EF84
+.extern FUN_0202F078
+.extern FUN_0202F094
+.extern FUN_0202F0B8
+.extern FUN_0202FA10
+.extern FUN_0202FA1C
+.extern FUN_0202FA48
+.extern FUN_0202FB80
+.extern FUN_02030A78
+.extern FUN_02030ADC
+.extern FUN_02030B3C
+.extern FUN_02030BC4
+.extern FUN_02030C4C
+.extern FUN_02030C58
+.extern FUN_02030E7C
+.extern FUN_02030F20
+.extern FUN_02030F40
+.extern FUN_02030F60
+.extern FUN_02030F74
+.extern FUN_02030F88
+.extern FUN_02030FA8
+.extern FUN_02030FC8
+.extern FUN_02030FE0
+.extern FUN_02031190
+.extern FUN_020311D0
+.extern FUN_020311DC
+.extern FUN_020311E8
+.extern FUN_020311F0
+.extern FUN_02031248
+.extern FUN_02031280
+.extern FUN_020312BC
+.extern FUN_020313B4
+.extern FUN_020313EC
+.extern FUN_02031400
+.extern FUN_02031438
+.extern FUN_02031588
+.extern FUN_020315D8
+.extern FUN_020315FC
+.extern FUN_0203168C
+.extern FUN_020316AC
+.extern FUN_020316E0
+.extern FUN_02031810
+.extern FUN_02031824
+.extern FUN_02031860
+.extern FUN_02031880
+.extern FUN_020318B4
+.extern FUN_020318C4
+.extern FUN_02031914
+.extern FUN_02031924
+.extern FUN_02031934
+.extern FUN_02031948
+.extern FUN_02031990
+.extern FUN_020319D8
+.extern FUN_020319F4
+.extern FUN_02031A08
+.extern FUN_02031A2C
+.extern FUN_02031A7C
+.extern FUN_02031AC8
+.extern FUN_02031AF4
+.extern FUN_02031B2C
+.extern FUN_02031B50
+.extern FUN_02031BD0
+.extern FUN_02031BF4
+.extern FUN_02031C2C
+.extern FUN_02031C54
+.extern FUN_02031C64
+.extern FUN_02032888
+.extern FUN_020328C0
+.extern FUN_020328F4
+.extern FUN_02032B6C
+.extern FUN_02032DAC
+.extern FUN_020334E8
+.extern FUN_02033534
+.extern FUN_02033564
+.extern FUN_02033578
+.extern FUN_020335B8
+.extern FUN_020335F0
+.extern FUN_02033678
+.extern FUN_020337E8
+.extern FUN_0203384C
+.extern FUN_02033E74
+.extern FUN_02033ED0
+.extern FUN_02033F20
+.extern FUN_02033F70
+.extern FUN_02034188
+.extern FUN_020344AC
+.extern FUN_020344D8
+.extern FUN_020344FC
+.extern FUN_0203450C
+.extern FUN_0203451C
+.extern FUN_02034678
+.extern FUN_020346CC
+.extern FUN_02034774
+.extern FUN_02034788
+.extern FUN_020347B0
+.extern FUN_020347C4
+.extern FUN_02034824
+.extern FUN_0203484C
+.extern FUN_02034860
+.extern FUN_0203487C
+.extern FUN_02034898
+.extern FUN_020348B4
+.extern FUN_020348E4
+.extern FUN_02034908
+.extern FUN_02034930
+.extern FUN_02034944
+.extern FUN_02034964
+.extern FUN_02034998
+.extern FUN_020349D8
+.extern FUN_020349E4
+.extern FUN_02034A04
+.extern FUN_02034A60
+.extern FUN_02034AC8
+.extern FUN_02034AF0
+.extern FUN_02034AF8
+.extern FUN_02034B00
+.extern FUN_02034B64
+.extern FUN_02034B6C
+.extern FUN_02034B74
+.extern FUN_02034BAC
+.extern FUN_02034BDC
+.extern FUN_02034C0C
+.extern FUN_02034C24
+.extern FUN_02034C34
+.extern FUN_02034D2C
+.extern FUN_02034D44
+.extern FUN_02034DC4
+.extern FUN_02034DC8
+.extern FUN_02034DCC
+.extern FUN_02034DD0
+.extern FUN_02034DD4
+.extern FUN_02034DE8
+.extern FUN_02034DEC
+.extern FUN_02034DF4
+.extern FUN_02034DFC
+.extern FUN_02034E04
+.extern FUN_02034E0C
+.extern FUN_02034E10
+.extern FUN_02034E18
+.extern FUN_02034E20
+.extern FUN_02034E24
+.extern FUN_02034E28
+.extern FUN_02034E30
+.extern FUN_02034E48
+.extern FUN_02034E60
+.extern FUN_02034E8C
+.extern FUN_02034E90
+.extern FUN_02034EC4
+.extern FUN_02034EF8
+.extern FUN_02034F1C
+.extern FUN_02034F40
+.extern FUN_02034F88
+.extern FUN_02034FC0
+.extern FUN_02034FE4
+.extern FUN_02035068
+.extern FUN_020351A0
+.extern FUN_02035D04
+.extern FUN_02035E50
+.extern FUN_02036A78
+.extern FUN_02036AB8
+.extern FUN_02036B90
+.extern FUN_02036BC4
+.extern FUN_02036BDC
+.extern FUN_02036D94
+.extern FUN_02036DD4
+.extern FUN_02037024
+.extern FUN_02037350
+.extern FUN_02037394
+.extern FUN_0203739C
+.extern FUN_020373AC
+.extern FUN_020373C4
+.extern FUN_020373D4
+.extern FUN_02037760
+.extern FUN_02037778
+.extern FUN_020377A8
+.extern FUN_020377AC
+.extern FUN_020377B0
+.extern FUN_020377C8
+.extern FUN_0203780C
+.extern FUN_0203789C
+.extern FUN_020378FC
+.extern FUN_02037944
+.extern FUN_020379F8
+.extern FUN_02037A1C
+.extern FUN_02037A40
+.extern FUN_02037A48
+.extern FUN_02037A70
+.extern FUN_02037A78
+.extern FUN_02037B44
+.extern FUN_02037BB0
+.extern FUN_02037C00
+.extern FUN_02037CF0
+.extern FUN_02037D5C
+.extern FUN_02037D60
+.extern FUN_02037E18
+.extern FUN_02037E80
+.extern FUN_02037E90
+.extern FUN_02037EB8
+.extern FUN_02037F2C
+.extern FUN_02037F58
+.extern FUN_02037FC4
+.extern FUN_02037FE4
+.extern FUN_020380CC
+.extern FUN_02038130
+.extern FUN_020383D8
+.extern FUN_020383F8
+.extern FUN_0203842C
+.extern FUN_0203846C
+.extern FUN_020385CC
+.extern FUN_02038680
+.extern FUN_020386A4
+.extern FUN_020386B4
+.extern FUN_020386E0
+.extern FUN_02038790
+.extern FUN_02038804
+.extern FUN_02038814
+.extern FUN_02038824
+.extern FUN_02038854
+.extern FUN_02038864
+.extern FUN_0203888C
+.extern FUN_020388B4
+.extern FUN_020389CC
+.extern FUN_02038AD0
+.extern FUN_02038AF4
+.extern FUN_02038B6C
+.extern FUN_02038C78
+.extern FUN_02038CA8
+.extern FUN_02038CD8
+.extern FUN_02038D10
+.extern FUN_02038EB0
+.extern FUN_02039438
+.extern FUN_02039460
+.extern FUN_020394B8
+.extern FUN_020394F0
+.extern FUN_02039504
+.extern FUN_02039528
+.extern FUN_0203953C
+.extern FUN_02039550
+.extern FUN_02039564
+.extern FUN_0203959C
+.extern FUN_020395BC
+.extern FUN_020395F4
+.extern FUN_02039618
+.extern FUN_0203962C
+.extern FUN_02039640
+.extern FUN_0203965C
+.extern FUN_02039678
+.extern FUN_02039694
+.extern FUN_02039874
+.extern FUN_0203989C
+.extern FUN_020399A0
+.extern FUN_020399A4
+.extern FUN_020399A8
+.extern FUN_020399B4
+.extern FUN_02039A10
+.extern FUN_02039A28
+.extern FUN_02039A40
+.extern FUN_02039A5C
+.extern FUN_02039A78
+.extern FUN_02039A90
+.extern FUN_02039AAC
+.extern FUN_02039ACC
+.extern FUN_02039AF8
+.extern FUN_02039B28
+.extern FUN_02039B50
+.extern FUN_02039B78
+.extern FUN_02039BA0
+.extern FUN_02039BBC
+.extern FUN_02039BDC
+.extern FUN_02039C08
+.extern FUN_02039C40
+.extern FUN_02039C78
+.extern FUN_02039CE4
+.extern FUN_02039CF8
+.extern FUN_02039D10
+.extern FUN_02039D48
+.extern FUN_02039D78
+.extern FUN_02039DAC
+.extern FUN_02039DC4
+.extern FUN_02039DD0
+.extern FUN_02039E04
+.extern FUN_02039E38
+.extern FUN_02039E50
+.extern FUN_02039E68
+.extern FUN_02039E84
+.extern FUN_02039EC0
+.extern FUN_02039EE8
+.extern FUN_02039F0C
+.extern FUN_02039F30
+.extern FUN_02039F58
+.extern FUN_02039F88
+.extern FUN_02039FB8
+.extern FUN_02039FDC
+.extern FUN_0203A00C
+.extern FUN_0203A038
+.extern FUN_0203A04C
+.extern FUN_0203A098
+.extern FUN_0203A0FC
+.extern FUN_0203A13C
+.extern FUN_0203A188
+.extern FUN_0203A210
+.extern FUN_0203A288
+.extern FUN_0203A2C4
+.extern FUN_0203A304
+.extern FUN_0203A340
+.extern FUN_0203A388
+.extern FUN_0203A3C4
+.extern FUN_0203A400
+.extern FUN_0203A45C
+.extern FUN_0203A484
+.extern FUN_0203A4D0
+.extern FUN_0203A560
+.extern FUN_0203A590
+.extern FUN_0203A5D8
+.extern FUN_0203A608
+.extern FUN_0203A630
+.extern FUN_0203A780
+.extern FUN_0203A830
+.extern FUN_0203A85C
+.extern FUN_0203A878
+.extern FUN_0203A8B8
+.extern FUN_0203A9F0
+.extern FUN_0203AA90
+.extern FUN_0203AAA0
+.extern FUN_0203AB44
+.extern FUN_0203AB74
+.extern FUN_0203AB8C
+.extern FUN_0203AC14
+.extern FUN_0203AC9C
+.extern FUN_0203ACC4
+.extern FUN_0203AD08
+.extern FUN_0203AD54
+.extern FUN_0203ADC4
+.extern FUN_0203AE4C
+.extern FUN_0203AED4
+.extern FUN_0203AF34
+.extern FUN_0203AF58
+.extern FUN_0203AF84
+.extern FUN_0203AFA4
+.extern FUN_0203AFC4
+.extern FUN_0203B024
+.extern FUN_0203B148
+.extern FUN_0203B1F0
+.extern FUN_0203B2E0
+.extern FUN_0203B3B0
+.extern FUN_0203B3C0
+.extern FUN_0203B3DC
+.extern FUN_0203B3F8
+.extern FUN_0203B440
+.extern FUN_0203B468
+.extern FUN_0203B500
+.extern FUN_0203B544
+.extern FUN_0203B574
+.extern FUN_0203B5B8
+.extern FUN_0203B618
+.extern FUN_0203B640
+.extern FUN_0203B724
+.extern FUN_0203B758
+.extern FUN_0203B790
+.extern FUN_0203B7D8
+.extern FUN_0203B7F0
+.extern FUN_0203B81C
+.extern FUN_0203B85C
+.extern FUN_0203B8A0
+.extern FUN_0203B8E4
+.extern FUN_0203B914
+.extern FUN_0203B944
+.extern FUN_0203B968
+.extern FUN_0203B9B4
+.extern FUN_0203BA3C
+.extern FUN_0203BAB0
+.extern FUN_0203BAF4
+.extern FUN_0203BB34
+.extern FUN_0203BB80
+.extern FUN_0203BB84
+.extern FUN_0203BB88
+.extern FUN_0203BB8C
+.extern FUN_0203BC1C
+.extern FUN_0203BC2C
+.extern FUN_0203BCBC
+.extern FUN_0203BCCC
+.extern FUN_0203BCD8
+.extern FUN_0203BD08
+.extern FUN_0203BD28
+.extern FUN_0203BDB8
+.extern FUN_0203BE50
+.extern FUN_0203BE68
+.extern FUN_0203BE80
+.extern FUN_0203BECC
+.extern FUN_0203BF00
+.extern FUN_0203BF20
+.extern FUN_0203BF2C
+.extern FUN_0203BF84
+.extern FUN_0203BFEC
+.extern FUN_0203C054
+.extern FUN_0203C090
+.extern FUN_0203C0CC
+.extern FUN_0203C0FC
+.extern FUN_0203C118
+.extern FUN_0203C12C
+.extern FUN_0203C174
+.extern FUN_0203C1AC
+.extern FUN_0203C200
+.extern FUN_0203C278
+.extern FUN_0203C2C4
+.extern FUN_0203C2E0
+.extern FUN_0203C2F0
+.extern FUN_0203C300
+.extern FUN_0203C32C
+.extern FUN_0203C33C
+.extern FUN_0203C368
+.extern FUN_0203C3C8
+.extern FUN_0203C3E8
+.extern FUN_0203C430
+.extern FUN_0203C460
+.extern FUN_0203C4B0
+.extern FUN_0203C4F0
+.extern FUN_0203C520
+.extern FUN_0203C58C
+.extern FUN_0203C5BC
+.extern FUN_0203C614
+.extern FUN_0203C680
+.extern FUN_0203C6C4
+.extern FUN_0203C70C
+.extern FUN_0203C730
+.extern FUN_0203C788
+.extern FUN_0203C7E4
+.extern FUN_0203C7F4
+.extern FUN_0203C820
+.extern FUN_0203C844
+.extern FUN_0203C874
+.extern FUN_0203C8B4
+.extern FUN_0203C8E4
+.extern FUN_0203C930
+.extern FUN_0203C960
+.extern FUN_0203C990
+.extern FUN_0203CA20
+.extern FUN_0203CA2C
+.extern FUN_0203CA5C
+.extern FUN_0203CAE8
+.extern FUN_0203CB08
+.extern FUN_0203CB20
+.extern FUN_0203CB48
+.extern FUN_0203CB60
+.extern FUN_0203CB70
+.extern FUN_0203CBBC
+.extern FUN_0203CBE8
+.extern FUN_0203CC88
+.extern FUN_0203CD20
+.extern FUN_0203CDB8
+.extern FUN_0203CDC4
+.extern FUN_0203CDD0
+.extern FUN_0203CE00
+.extern FUN_0203CE0C
+.extern FUN_0203CE8C
+.extern FUN_0203CEBC
+.extern FUN_0203CF04
+.extern FUN_0203CF34
+.extern FUN_0203CF64
+.extern FUN_0203CF94
+.extern FUN_0203CFC4
+.extern FUN_0203CFC8
+.extern FUN_0203D050
+.extern FUN_0203D0A4
+.extern FUN_0203D0F8
+.extern FUN_0203D134
+.extern FUN_0203D140
+.extern FUN_0203D150
+.extern FUN_0203D178
+.extern FUN_0203D194
+.extern FUN_0203D1A4
+.extern FUN_0203D1C0
+.extern FUN_0203D214
+.extern FUN_0203D23C
+.extern FUN_0203D248
+.extern FUN_0203D278
+.extern FUN_0203D2A4
+.extern FUN_0203D2E4
+.extern FUN_0203D330
+.extern FUN_0203D33C
+.extern FUN_0203D36C
+.extern FUN_0203D3A4
+.extern FUN_0203D3DC
+.extern FUN_0203D448
+.extern FUN_0203D458
+.extern FUN_0203D490
+.extern FUN_0203D4E8
+.extern FUN_0203D528
+.extern FUN_0203D560
+.extern FUN_0203D5B0
+.extern FUN_0203D5F8
+.extern FUN_0203D60C
+.extern FUN_0203D61C
+.extern FUN_0203D630
+.extern FUN_0203D66C
+.extern FUN_0203D6C4
+.extern FUN_0203D728
+.extern FUN_0203D738
+.extern FUN_0203D774
+.extern FUN_0203D7DC
+.extern FUN_0203D834
+.extern FUN_0203D868
+.extern FUN_0203D874
+.extern FUN_0203D8A0
+.extern FUN_0203D8D0
+.extern FUN_0203D8E8
+.extern FUN_0203D8EC
+.extern FUN_0203D920
+.extern FUN_0203D938
+.extern FUN_0203D948
+.extern FUN_0203D958
+.extern FUN_0203D998
+.extern FUN_0203D9E8
+.extern FUN_0203DA78
+.extern FUN_0203DAB0
+.extern FUN_0203DAE8
+.extern FUN_0203DB38
+.extern FUN_0203DB88
+.extern FUN_0203DBD4
+.extern FUN_0203DC00
+.extern FUN_0203DC58
+.extern FUN_0203DC70
+.extern FUN_0203DC88
+.extern FUN_0203DCA0
+.extern FUN_0203DCB8
+.extern FUN_0203DCC8
+.extern FUN_0203DCD8
+.extern FUN_0203DCE8
+.extern FUN_0203DCF8
+.extern FUN_0203DD08
+.extern FUN_0203DD18
+.extern FUN_0203DD34
+.extern FUN_0203DD50
+.extern FUN_0203DD60
+.extern FUN_0203DE00
+.extern FUN_0203DE4C
+.extern FUN_0203DE58
+.extern FUN_0203DE80
+.extern FUN_0203DEA8
+.extern FUN_0203DEC4
+.extern FUN_0203DEF8
+.extern FUN_0203DF2C
+.extern FUN_0203DF38
+.extern FUN_0203DF64
+.extern FUN_0203DF84
+.extern FUN_0203DFA8
+.extern FUN_0203DFE0
+.extern FUN_0203E018
+.extern FUN_0203E054
+.extern FUN_0203E078
+.extern FUN_0203E0CC
+.extern FUN_0203E120
+.extern FUN_0203E138
+.extern FUN_0203E168
+.extern FUN_0203E254
+.extern FUN_0203E258
+.extern FUN_0203E29C
+.extern FUN_0203E2F8
+.extern FUN_0203E35C
+.extern FUN_0203E38C
+.extern FUN_0203E3D0
+.extern FUN_0203E408
+.extern FUN_0203E440
+.extern FUN_0203E470
+.extern FUN_0203E4A0
+.extern FUN_0203E4B0
+.extern FUN_0203E4D8
+.extern FUN_0203E4F0
+.extern FUN_0203E510
+.extern FUN_0203E568
+.extern FUN_0203E5DC
+.extern FUN_0203E674
+.extern FUN_0203E684
+.extern FUN_0203E6B4
+.extern FUN_0203E6C4
+.extern FUN_0203E6FC
+.extern FUN_0203E72C
+.extern FUN_0203E744
+.extern FUN_0203E774
+.extern FUN_0203E7F0
+.extern FUN_0203E81C
+.extern FUN_0203E848
+.extern FUN_0203E858
+.extern FUN_0203E870
+.extern FUN_0203E894
+.extern FUN_0203E8C4
+.extern FUN_0203E8F4
+.extern FUN_0203E928
+.extern FUN_0203E940
+.extern FUN_0203E954
+.extern FUN_0203E968
+.extern FUN_0203E9CC
+.extern FUN_0203EA68
+.extern FUN_0203EA90
+.extern FUN_0203EAB0
+.extern FUN_0203EB20
+.extern FUN_0203EB48
+.extern FUN_0203EB88
+.extern FUN_0203EBC8
+.extern FUN_0203EBE4
+.extern FUN_0203ECAC
+.extern FUN_0203ECD8
+.extern FUN_0203ECF4
+.extern FUN_0203ED10
+.extern FUN_0203ED70
+.extern FUN_0203EDA4
+.extern FUN_0203EDC8
+.extern FUN_0203EDE0
+.extern FUN_0203EE08
+.extern FUN_0203EE18
+.extern FUN_0203EE28
+.extern FUN_0203EE58
+.extern FUN_0203EE68
+.extern FUN_0203EE78
+.extern FUN_0203EE98
+.extern FUN_0203EED8
+.extern FUN_0203EF58
+.extern FUN_0203F00C
+.extern FUN_0203F020
+.extern FUN_0203F034
+.extern FUN_0203F058
+.extern FUN_0203F07C
+.extern FUN_0203F110
+.extern FUN_0203F174
+.extern FUN_0203F19C
+.extern FUN_0203F234
+.extern FUN_0203F254
+.extern FUN_0203F26C
+.extern FUN_0203F2AC
+.extern FUN_0203F2E4
+.extern FUN_0203F31C
+.extern FUN_0203F348
+.extern FUN_0203F38C
+.extern FUN_0203F39C
+.extern FUN_0203F3AC
+.extern FUN_0203F418
+.extern FUN_0203F44C
+.extern FUN_0203F484
+.extern FUN_0203F4D8
+.extern FUN_0203F508
+.extern FUN_0203F5D4
+.extern FUN_0203F604
+.extern FUN_0203F634
+.extern FUN_0203F664
+.extern FUN_0203F6E4
+.extern FUN_0203F720
+.extern FUN_0203F760
+.extern FUN_0203F7C8
+.extern FUN_0203F80C
+.extern FUN_0203F880
+.extern FUN_0203F8C0
+.extern FUN_0203F924
+.extern FUN_0203F954
+.extern FUN_0203F988
+.extern FUN_0203F9B0
+.extern FUN_0203F9DC
+.extern FUN_0203FA14
+.extern FUN_0203FA58
+.extern FUN_0203FB4C
+.extern FUN_0203FB64
+.extern FUN_0203FB94
+.extern FUN_0203FBA0
+.extern FUN_0203FBAC
+.extern FUN_0203FBBC
+.extern FUN_0203FC1C
+.extern FUN_0203FC58
+.extern FUN_0203FC80
+.extern FUN_0203FCB0
+.extern FUN_0203FCDC
+.extern FUN_0203FCF4
+.extern FUN_0203FDBC
+.extern FUN_0203FE08
+.extern FUN_0203FE48
+.extern FUN_0203FE80
+.extern FUN_0203FE90
+.extern FUN_0203FEC0
+.extern FUN_0203FF10
+.extern FUN_02040028
+.extern FUN_02040074
+.extern FUN_020400C8
+.extern FUN_0204011C
+.extern FUN_02040170
+.extern FUN_020401CC
+.extern FUN_02040204
+.extern FUN_02040220
+.extern FUN_0204025C
+.extern FUN_02040298
+.extern FUN_020402D4
+.extern FUN_02040304
+.extern FUN_02040340
+.extern FUN_02040370
+.extern FUN_020403A0
+.extern FUN_020403D0
+.extern FUN_02040414
+.extern FUN_02040458
+.extern FUN_02040488
+.extern FUN_020404FC
+.extern FUN_0204052C
+.extern FUN_0204056C
+.extern FUN_0204059C
+.extern FUN_020405B4
+.extern FUN_020405CC
+.extern FUN_020405F8
+.extern FUN_02040638
+.extern FUN_0204064C
+.extern FUN_02040660
+.extern FUN_020406C0
+.extern FUN_020406CC
+.extern FUN_02040700
+.extern FUN_02040724
+.extern FUN_02040748
+.extern FUN_02040790
+.extern FUN_020407C8
+.extern FUN_02040800
+.extern FUN_0204083C
+.extern FUN_02040874
+.extern FUN_020408BC
+.extern FUN_0204091C
+.extern FUN_02040964
+.extern FUN_020409C0
+.extern FUN_020409F8
+.extern FUN_02040A30
+.extern FUN_02040A7C
+.extern FUN_02040B0C
+.extern FUN_02040B5C
+.extern FUN_02040BAC
+.extern FUN_02040BFC
+.extern FUN_02040C34
+.extern FUN_02040C6C
+.extern FUN_02040CA4
+.extern FUN_02040D04
+.extern FUN_02040D7C
+.extern FUN_02040DB4
+.extern FUN_02040DEC
+.extern FUN_02040E4C
+.extern FUN_02040EB4
+.extern FUN_02040EF8
+.extern FUN_02040F34
+.extern FUN_02040F6C
+.extern FUN_02040FA4
+.extern FUN_02040FDC
+.extern FUN_02041014
+.extern FUN_0204104C
+.extern FUN_02041094
+.extern FUN_020410C8
+.extern FUN_02041100
+.extern FUN_02041138
+.extern FUN_02041174
+.extern FUN_02041194
+.extern FUN_020411C4
+.extern FUN_02041340
+.extern FUN_020413C0
+.extern FUN_020413E8
+.extern FUN_020413F8
+.extern FUN_0204140C
+.extern FUN_02041424
+.extern FUN_0204143C
+.extern FUN_02041478
+.extern FUN_0204149C
+.extern FUN_020414B8
+.extern FUN_020414CC
+.extern FUN_020414E0
+.extern FUN_020414FC
+.extern FUN_02041518
+.extern FUN_02041558
+.extern FUN_02041588
+.extern FUN_020415AC
+.extern FUN_020415BC
+.extern FUN_020415E0
+.extern FUN_02041618
+.extern FUN_02041644
+.extern FUN_02041650
+.extern FUN_02041664
+.extern FUN_02041674
+.extern FUN_020416A8
+.extern FUN_02041770
+.extern FUN_020417E0
+.extern FUN_02041808
+.extern FUN_0204185C
+.extern FUN_0204188C
+.extern FUN_0204190C
+.extern FUN_02041970
+.extern FUN_020419F8
+.extern FUN_02041A80
+.extern FUN_02041AB4
+.extern FUN_02041AD4
+.extern FUN_02041AE0
+.extern FUN_02041B10
+.extern FUN_02041B40
+.extern FUN_02041B70
+.extern FUN_02041B9C
+.extern FUN_02041BC4
+.extern FUN_02041BF0
+.extern FUN_02041C38
+.extern FUN_02041E40
+.extern FUN_02041FDC
+.extern FUN_02042000
+.extern FUN_02042038
+.extern FUN_02042110
+.extern FUN_0204214C
+.extern FUN_02042354
+.extern FUN_02042364
+.extern FUN_02042394
+.extern FUN_020423B0
+.extern FUN_02042700
+.extern FUN_02042780
+.extern FUN_020427A8
+.extern FUN_020427D0
+.extern FUN_02042864
+.extern FUN_02042894
+.extern FUN_020428E0
+.extern FUN_02042950
+.extern FUN_02042980
+.extern FUN_02042998
+.extern FUN_020429B8
+.extern FUN_020429E8
+.extern FUN_02042A18
+.extern FUN_02042A48
+.extern FUN_02042A98
+.extern FUN_02042B0C
+.extern FUN_02042B40
+.extern FUN_02042B74
+.extern FUN_02042BA8
+.extern FUN_02042BDC
+.extern FUN_02042C10
+.extern FUN_02042C44
+.extern FUN_02042C8C
+.extern FUN_02042CBC
+.extern FUN_02042D1C
+.extern FUN_0204387C
+.extern FUN_020438D0
+.extern FUN_02043918
+.extern FUN_020439B4
+.extern FUN_02043A44
+.extern FUN_02043A94
+.extern FUN_02043AAC
+.extern FUN_02043ACC
+.extern FUN_02043AFC
+.extern FUN_02043B28
+.extern FUN_02043B54
+.extern FUN_02043B84
+.extern FUN_02043BD0
+.extern FUN_02043C28
+.extern FUN_02043C6C
+.extern FUN_02043C90
+.extern FUN_02043CB4
+.extern FUN_02043CE4
+.extern FUN_02043D28
+.extern FUN_02043D78
+.extern FUN_02043DC8
+.extern FUN_02043DE0
+.extern FUN_02043E00
+.extern FUN_02043E20
+.extern FUN_02043E50
+.extern FUN_02043E68
+.extern FUN_02043E9C
+.extern FUN_02043EFC
+.extern FUN_02043F50
+.extern FUN_02043FA0
+.extern FUN_02043FF4
+.extern FUN_02044034
+.extern FUN_020440C0
+.extern FUN_020440F0
+.extern FUN_02044120
+.extern FUN_02044138
+.extern FUN_0204413C
+.extern FUN_02044140
+.extern FUN_02044158
+.extern FUN_0204416C
+.extern FUN_02044198
+.extern FUN_020442BC
+.extern FUN_0204434C
+.extern FUN_020443A8
+.extern FUN_02044414
+.extern FUN_0204449C
+.extern FUN_020444F4
+.extern FUN_02044598
+.extern FUN_02044658
+.extern FUN_0204469C
+.extern FUN_02044730
+.extern FUN_0204478C
+.extern FUN_02044800
+.extern FUN_0204488C
+.extern FUN_020448D4
+.extern FUN_020449A4
+.extern FUN_02044A0C
+.extern FUN_02044A6C
+.extern FUN_02044A94
+.extern FUN_02044B00
+.extern FUN_02044B2C
+.extern FUN_02044B84
+.extern FUN_02044C0C
+.extern FUN_02044C88
+.extern FUN_02044CE0
+.extern FUN_02044D44
+.extern FUN_02044D8C
+.extern FUN_02044E34
+.extern FUN_02044E78
+.extern FUN_02044ED8
+.extern FUN_02044F20
+.extern FUN_02044F58
+.extern FUN_02044FE8
+.extern FUN_0204505C
+.extern FUN_02045104
+.extern FUN_02045170
+.extern FUN_020451D0
+.extern FUN_02045264
+.extern FUN_02045268
+.extern FUN_020452B4
+.extern FUN_02045308
+.extern FUN_02045398
+.extern FUN_0204539C
+.extern FUN_020453A0
+.extern FUN_020453F4
+.extern FUN_02045424
+.extern FUN_02045438
+.extern FUN_02045468
+.extern FUN_02045484
+.extern FUN_020454CC
+.extern FUN_02045500
+.extern FUN_0204552C
+.extern FUN_0204557C
+.extern FUN_02045590
+.extern FUN_020455BC
+.extern FUN_020455D0
+.extern FUN_020455E4
+.extern FUN_02045610
+.extern FUN_02045624
+.extern FUN_02045638
+.extern FUN_02045664
+.extern FUN_02045678
+.extern FUN_020456D4
+.extern FUN_0204572C
+.extern FUN_02045784
+.extern FUN_020457DC
+.extern FUN_02045834
+.extern FUN_0204588C
+.extern FUN_020458E4
+.extern FUN_02045918
+.extern FUN_02045950
+.extern FUN_02045954
+.extern FUN_02045958
+.extern FUN_020459AC
+.extern FUN_020459E8
+.extern FUN_02045A3C
+.extern FUN_02045A78
+.extern FUN_02045ACC
+.extern FUN_02045B08
+.extern FUN_02045B44
+.extern FUN_02045B80
+.extern FUN_02045BC8
+.extern FUN_02045C04
+.extern FUN_02045C40
+.extern FUN_02045C7C
+.extern FUN_02045CD4
+.extern FUN_02045D10
+.extern FUN_02045D4C
+.extern FUN_02045D88
+.extern FUN_02045DD0
+.extern FUN_02045E1C
+.extern FUN_02045E20
+.extern FUN_02045EE0
+.extern FUN_02045EE4
+.extern FUN_02045F24
+.extern FUN_02045F84
+.extern FUN_02045F88
+.extern FUN_02045FCC
+.extern FUN_02046010
+.extern FUN_0204601C
+.extern FUN_02046028
+.extern FUN_0204602C
+.extern FUN_02046030
+.extern FUN_020462AC
+.extern FUN_020462B8
+.extern FUN_020462E4
+.extern FUN_0204630C
+.extern FUN_02046338
+.extern FUN_02046380
+.extern FUN_020463CC
+.extern FUN_020463EC
+.extern FUN_0204640C
+.extern FUN_02046420
+.extern FUN_0204646C
+.extern FUN_0204647C
+.extern FUN_0204649C
+.extern FUN_020464A4
+.extern FUN_02046500
+.extern FUN_02046528
+.extern FUN_0204652C
+.extern FUN_02046530
+.extern FUN_02046534
+.extern FUN_02046DB4
+.extern FUN_02046E18
+.extern FUN_02046FA0
+.extern FUN_020470AC
+.extern FUN_020470E8
+.extern FUN_02047174
+.extern FUN_020480B8
+.extern FUN_020480C8
+.extern FUN_020480D8
+.extern FUN_02048498
+.extern FUN_02048694
+.extern FUN_02048C58
+.extern FUN_02048D90
+.extern FUN_02048EC8
+.extern FUN_02048FC8
+.extern FUN_02049240
+.extern FUN_02049274
+.extern FUN_02049EA4
+.extern FUN_02049F98
+.extern FUN_02049FFC
+.extern FUN_0204A048
+.extern FUN_0204A0C8
+.extern FUN_0204A120
+.extern FUN_0204A20C
+.extern FUN_0204A248
+.extern FUN_0204A32C
+.extern FUN_0204A6E0
+.extern FUN_0204AB20
+.extern FUN_0204AB58
+.extern FUN_0204ABA8
+.extern FUN_0204ABDC
+.extern FUN_0204AD0C
+.extern FUN_0204ADBC
+.extern FUN_0204ADE0
+.extern FUN_0204AF3C
+.extern FUN_0204AF84
+.extern FUN_0204B2A4
+.extern FUN_0204B2B4
+.extern FUN_0204B2C0
+.extern FUN_0204B2D8
+.extern FUN_0204B33C
+.extern FUN_0204B4FC
+.extern FUN_0204B57C
+.extern FUN_0204B5A8
+.extern FUN_0204B5FC
+.extern FUN_0204B63C
+.extern FUN_0204B660
+.extern FUN_0204B684
+.extern FUN_0204B6A4
+.extern FUN_0204B9A0
+.extern FUN_0204B9CC
+.extern FUN_0204B9EC
+.extern FUN_0204BA1C
+.extern FUN_0204BAB0
+.extern FUN_0204BAC4
+.extern FUN_0204BAD4
+.extern FUN_0204BAE4
+.extern FUN_0204BEC8
+.extern FUN_0204BED0
+.extern FUN_0204BED8
+.extern FUN_0204C104
+.extern FUN_0204C1A8
+.extern FUN_0204D6C0
+.extern FUN_0204E2FC
+.extern FUN_0204F6DC
+.extern FUN_0204FF5C
+.extern FUN_02050024
+.extern FUN_02050048
+.extern FUN_020524CC
+.extern FUN_02052544
+.extern FUN_02052604
+.extern FUN_02052608
+.extern FUN_02052648
+.extern FUN_0205265C
+.extern FUN_02052714
+.extern FUN_02052718
+.extern FUN_020527A8
+.extern FUN_020527D8
+.extern FUN_0205296C
+.extern FUN_02052A10
+.extern FUN_02052B74
+.extern FUN_02052C0C
+.extern FUN_02052CD8
+.extern FUN_02052D08
+.extern FUN_02052DE8
+.extern FUN_02052E10
+.extern FUN_02052F74
+.extern FUN_020534DC
+.extern FUN_0205363C
+.extern FUN_02053678
+.extern FUN_020536D0
+.extern FUN_020545B8
+.extern FUN_02054608
+.extern FUN_02054658
+.extern FUN_020546C8
+.extern FUN_020547A4
+.extern FUN_02054C14
+.extern FUN_02054CB0
+.extern FUN_02054CC8
+.extern FUN_02054D1C
+.extern FUN_02054DEC
+.extern FUN_02054E30
+.extern FUN_02054F50
+.extern FUN_0205502C
+.extern FUN_020552F8
+.extern FUN_02055304
+.extern FUN_02055320
+.extern FUN_0205532C
+.extern FUN_020553A0
+.extern FUN_020553C4
+.extern FUN_020553D4
+.extern FUN_020553E8
+.extern FUN_02055468
+.extern FUN_02055474
+.extern FUN_02055488
+.extern FUN_02055560
+.extern FUN_02055720
+.extern FUN_020557F4
+.extern FUN_02055A38
+.extern FUN_02055B14
+.extern FUN_02055B30
+.extern FUN_02055B8C
+.extern FUN_0205753C
+.extern FUN_020575D4
+.extern FUN_02057654
+.extern FUN_02057688
+.extern FUN_02057800
+.extern FUN_0205785C
+.extern FUN_02057BAC
+.extern FUN_02058060
+.extern FUN_020580B4
+.extern FUN_02058448
+.extern FUN_02058458
+.extern FUN_02058480
+.extern FUN_02058488
+.extern FUN_02058510
+.extern FUN_02058738
+.extern FUN_02058780
+.extern FUN_020587B0
+.extern FUN_02058854
+.extern FUN_0205889C
+.extern FUN_020588B8
+.extern FUN_020588D4
+.extern FUN_02058908
+.extern FUN_02058914
+.extern FUN_02058994
+.extern FUN_02058B2C
+.extern FUN_02058B4C
+.extern FUN_02058B7C
+.extern FUN_02058BB4
+.extern FUN_02058BE4
+.extern FUN_02058D74
+.extern FUN_02058E28
+.extern FUN_02058E90
+.extern FUN_02058EB0
+.extern FUN_02059D1C
+.extern FUN_02059E74
+.extern FUN_0205AE28
+.extern FUN_0205AEA4
+.extern FUN_0205AEF0
+.extern FUN_0205AEFC
+.extern FUN_0205CA4C
+.extern FUN_0205CA64
+.extern FUN_0205CA78
+.extern FUN_0205CE48
+.extern FUN_0205CE80
+.extern FUN_0205DD18
+.extern FUN_0205DD38
+.extern FUN_0205DD40
+.extern FUN_0205E7C4
+.extern FUN_0205ECD4
+.extern FUN_0205ECE0
+.extern FUN_0205ECFC
+.extern FUN_0205ED0C
+.extern FUN_0205ED1C
+.extern FUN_0205ED2C
+.extern FUN_0205ED3C
+.extern FUN_0205ED4C
+.extern FUN_0205ED5C
+.extern FUN_0205ED6C
+.extern FUN_0205F1C4
+.extern FUN_0205F1D4
+.extern FUN_0205F1F4
+.extern FUN_0205F204
+.extern FUN_0205F214
+.extern FUN_0205F224
+.extern FUN_0205F234
+.extern FUN_0205F244
+.extern FUN_0205F264
+.extern FUN_0205F274
+.extern FUN_0205F284
+.extern FUN_0205F294
+.extern FUN_0205F2A4
+.extern FUN_0205F2B4
+.extern FUN_0205F2C4
+.extern FUN_0205F2D4
+.extern FUN_0205F2E4
+.extern FUN_0205F368
+.extern FUN_0205F378
+.extern FUN_0205F388
+.extern FUN_0205F398
+.extern FUN_0205F3C0
+.extern FUN_0205F3F8
+.extern FUN_0205F478
+.extern FUN_0205F4A0
+.extern FUN_0205F4E4
+.extern FUN_0205F50C
+.extern FUN_0205F524
+.extern FUN_0205F54C
+.extern FUN_0205F55C
+.extern FUN_0205F594
+.extern FUN_0205F5A4
+.extern FUN_0205F5D8
+.extern FUN_0205F5FC
+.extern FUN_0205F648
+.extern FUN_0205F668
+.extern FUN_0205F688
+.extern FUN_0205F698
+.extern FUN_0205F6A8
+.extern FUN_0205F6C8
+.extern FUN_0205F6D8
+.extern FUN_0205F710
+.extern FUN_0205F720
+.extern FUN_0205F740
+.extern FUN_0205F760
+.extern FUN_0205F7A0
+.extern FUN_0205FD38
+.extern FUN_0205FDDC
+.extern FUN_0205FE10
+.extern FUN_0205FF5C
+.extern FUN_02060144
+.extern FUN_0206015C
+.extern FUN_02060490
+.extern FUN_02060790
+.extern FUN_020607D4
+.extern FUN_02060F3C
+.extern FUN_02060F88
+.extern FUN_02060F9C
+.extern FUN_02060FD0
+.extern FUN_020612EC
+.extern FUN_020612F8
+.extern FUN_02061374
+.extern FUN_020613CC
+.extern FUN_02061460
+.extern FUN_02061574
+.extern FUN_02061A8C
+.extern FUN_02063650
+.extern FUN_0206367C
+.extern FUN_02063888
+.extern FUN_020638BC
+.extern FUN_02063948
+.extern FUN_02063964
+.extern FUN_0206486C
+.extern FUN_020649B0
+.extern FUN_020649D4
+.extern FUN_02064CA8
+.extern FUN_02064CC8
+.extern FUN_02064D10
+.extern FUN_02064D4C
+.extern FUN_02064D88
+.extern FUN_02064E20
+.extern FUN_02064E60
+.extern FUN_02064E90
+.extern FUN_02065054
+.extern FUN_02065070
+.extern FUN_02065078
+.extern FUN_02065314
+.extern FUN_02065344
+.extern FUN_02066818
+.extern FUN_02066978
+.extern FUN_020669A0
+.extern FUN_020669C0
+.extern FUN_020669D4
+.extern FUN_02066A20
+.extern FUN_02066ACC
+.extern FUN_02066ED8
+.extern FUN_020671BC
+.extern FUN_020672BC
+.extern FUN_02067830
+.extern FUN_02068678
+.extern FUN_02068854
+.extern FUN_020689E0
+.extern FUN_02068AAC
+.extern FUN_02068B68
+.extern FUN_02068C00
+.extern FUN_02068E14
+.extern FUN_020690C4
+.extern FUN_020690CC
+.extern FUN_020690E4
+.extern FUN_02069168
+.extern FUN_020699A4
+.extern FUN_02069A64
+.extern FUN_02069B40
+.extern FUN_02069B88
+.extern FUN_0206A23C
+.extern FUN_0206AC74
+.extern FUN_0206AD4C
+.extern FUN_0206B20C
+.extern FUN_0206B3E4
+.extern FUN_0206B484
+.extern FUN_0206B57C
+.extern FUN_0206B5E4
+.extern FUN_0206B620
+.extern FUN_0206B644
+.extern FUN_0206B6C8
+.extern FUN_0206B7BC
+.extern FUN_0206B900
+.extern FUN_0206B9AC
+.extern FUN_0206B9B0
+.extern FUN_0206BAE4
+.extern FUN_0206BB1C
+.extern FUN_0206BB28
+.extern FUN_0206C700
+.extern FUN_0206C91C
+.extern FUN_0206C92C
+.extern FUN_0206E2F0
+.extern FUN_0206E308
+.extern FUN_0206E314
+.extern FUN_0206E340
+.extern FUN_0206E354
+.extern FUN_0206E358
+.extern FUN_0206E360
+.extern FUN_0206E37C
+.extern FUN_0206E384
+.extern FUN_0206E38C
+.extern FUN_0206E7B8
+.extern FUN_0206EA30
+.extern FUN_0206EA98
+.extern FUN_0206EAB8
+.extern FUN_0206EB1C
+.extern FUN_0206ED24
+.extern FUN_0206ED38
+.extern FUN_0206EDD4
+.extern FUN_0206EE50
+.extern FUN_0206EE64
+.extern FUN_0206EEF8
+.extern FUN_0206EFEC
+.extern FUN_0206F158
+.extern FUN_0206F164
+.extern FUN_0206F17C
+.extern FUN_0206F190
+.extern FUN_0206F3B8
+.extern FUN_0206F3D8
+.extern FUN_02077A84
+.extern FUN_02077AC4
+.extern FUN_02079C70
+.extern FUN_0207B000
+.extern FUN_0207C2A4
+.extern FUN_0207FC5C
+.extern FUN_0207FCE0
+.extern FUN_0208089C
+.extern FUN_02080C38
+.extern FUN_02080E0C
+.extern FUN_02081214
+.extern FUN_020814E8
+.extern FUN_02081DC4
+.extern FUN_02081EB8
+.extern FUN_0208201C
+.extern FUN_02082034
+.extern FUN_0208206C
+.extern FUN_02082090
+.extern FUN_020820B8
+.extern FUN_020820DC
+.extern FUN_0208210C
+.extern FUN_0208213C
+.extern FUN_02082140
+.extern FUN_02082158
+.extern FUN_0208217C
+.extern FUN_02082190
+.extern FUN_020821B4
+.extern FUN_020821C4
+.extern FUN_020821DC
+.extern FUN_020821F0
+.extern FUN_02082214
+.extern FUN_0208223C
+.extern FUN_0208224C
+.extern FUN_02082254
+.extern FUN_02082284
+.extern FUN_020822F0
+.extern FUN_02082444
+.extern FUN_02082508
+.extern FUN_020825A0
+.extern FUN_02082630
+.extern FUN_02085140
+.extern FUN_020851B8
+.extern FUN_020851DC
+.extern FUN_020851F8
+.extern FUN_0208524C
+.extern FUN_02085258
+.extern FUN_02085264
+.extern FUN_0208526C
+.extern FUN_02085290
+.extern FUN_020852E8
+.extern FUN_02085338
+.extern FUN_020853A8
+.extern FUN_020853B0
+.extern FUN_020853B4
+.extern FUN_020853BC
+.extern FUN_020853E4
+.extern FUN_020853E8
+.extern FUN_020853EC
+.extern FUN_020853F0
+.extern FUN_020853FC
+.extern FUN_020854E0
+.extern FUN_02085538
+.extern FUN_02085578
+.extern FUN_020855B0
+.extern FUN_020855E4
+.extern FUN_0208560C
+.extern FUN_0208562C
+.extern FUN_02085F48
+.extern FUN_020863DC
+.extern FUN_02087A1C
+.extern FUN_02087A50
+.extern FUN_02087D00
+.extern FUN_02087E14
+.extern FUN_0208881C
+.extern FUN_02088960
+.extern FUN_02088D40
+.extern FUN_02088DD8
+.extern FUN_02088DF0
+.extern FUN_02088DF8
+.extern FUN_02088EF8
+.extern FUN_02089D90
+.extern FUN_0208A0B8
+.extern FUN_0208A300
+.extern FUN_0208A320
+.extern FUN_0208A338
+.extern FUN_0208A9B8
+.extern FUN_0208ACEC
+.extern FUN_0208AD80
+.extern FUN_0208AF80
+.extern FUN_0208AF94
+.extern FUN_0208AFA8
+.extern FUN_0208B05C
+.extern FUN_0208B128
+.extern FUN_0208B4A0
+.extern FUN_02090CC8
+.extern FUN_02090DB8
+.extern FUN_02096B14
+.extern FUN_02096B78
+.extern FUN_02096CCC
+.extern FUN_02096D2C
+.extern FUN_02096DA0
+.extern FUN_02096F18
+.extern FUN_02096F80
+.extern FUN_02096FB0
+.extern FUN_0209700C
+.extern FUN_020973B4
+.extern FUN_020ADA84
+.extern FUN_020ADA98
+.extern FUN_020ADAB0
+.extern FUN_020ADB18
+.extern FUN_020ADBE8
+.extern FUN_020ADC74
+.extern FUN_020ADDC0
+.extern FUN_020ADDC8
+.extern FUN_020ADDF0
+.extern FUN_020ADE2C
+.extern FUN_020AE554
+.extern FUN_020AE5B0
+.extern FUN_020AE600
+.extern FUN_020AE638
+.extern FUN_020AE684
+.extern FUN_020AE82C
+.extern FUN_020AE84C
+.extern FUN_020AE868
+.extern FUN_020AE8CC
+.extern FUN_020AE918
+.extern FUN_020AEB70
+.extern FUN_020AEC7C
+.extern FUN_020AEC98
+.extern FUN_020AEE40
+.extern FUN_020AEEB8
+.extern FUN_020AEF1C
+.extern FUN_020AF2E0
+.extern FUN_020AF2F4
+.extern FUN_020AF30C
+.extern FUN_020AF894
+.extern FUN_020AF9C4
+.extern FUN_020AFA28
+.extern FUN_020AFA80
+.extern FUN_020AFBA8
+.extern FUN_020AFBFC
+.extern FUN_020AFC04
+.extern FUN_020AFEB8
+.extern FUN_020AFFD8
+.extern FUN_020B0030
+.extern FUN_020B0088
+.extern FUN_020B00F0
+.extern FUN_020B0138
+.extern FUN_020B0180
+.extern FUN_020B0250
+.extern FUN_020B02C8
+.extern FUN_020B0448
+.extern FUN_020B0870
+.extern FUN_020B0BB0
+.extern FUN_020B0C7C
+.extern FUN_020B0E34
+.extern FUN_020B0FC0
+.extern FUN_020B10E8
+.extern FUN_020B1240
+.extern FUN_020B1340
+.extern FUN_020B1528
+.extern FUN_020B1768
+.extern FUN_020B19C4
+.extern FUN_020B19DC
+.extern FUN_020B1A14
+.extern FUN_020B1A24
+.extern FUN_020B1EA4
+.extern FUN_020B1EC4
+.extern FUN_020B1EE4
+.extern FUN_020B1EFC
+.extern FUN_020B1F80
+.extern FUN_020B20C8
+.extern FUN_020B2194
+.extern FUN_020B224C
+.extern FUN_020B23D8
+.extern FUN_020B242C
+.extern FUN_020B2794
+.extern FUN_020B28B4
+.extern FUN_020B2A08
+.extern FUN_020B2B08
+.extern FUN_020B2B58
+.extern FUN_020B2D9C
+.extern FUN_020B317C
+.extern FUN_020B31F0
+.extern FUN_020B326C
+.extern FUN_020B3334
+.extern FUN_020B3390
+.extern FUN_020B33A0
+.extern FUN_020B4358
+.extern FUN_020B43A4
+.extern FUN_020B442C
+.extern FUN_020B4568
+.extern FUN_020B4F38
+.extern FUN_020B502C
+.extern FUN_020B772C
+.extern FUN_020B7790
+.extern FUN_020B7C58
+.extern FUN_020B7C78
+.extern FUN_020B7CDC
+.extern FUN_020B7CE4
+.extern FUN_020B7CF0
+.extern FUN_020B7D28
+.extern FUN_020B7DFC
+.extern FUN_020B7E10
+.extern FUN_020B7E1C
+.extern FUN_020B80B4
+.extern FUN_020B844C
+.extern FUN_020B8474
+.extern FUN_020B849C
+.extern FUN_020BAC98
+.extern FUN_020BAFB8
+.extern FUN_020BB1C0
+.extern FUN_020BB394
+.extern FUN_020BB59C
+.extern FUN_020BB7F4
+.extern FUN_020BC0FC
+.extern FUN_020BC13C
+.extern FUN_020BC2A0
+.extern FUN_020C0174
+.extern FUN_020C01A0
+.extern FUN_020C01D0
+.extern FUN_020C03B8
+.extern FUN_020C041C
+.extern FUN_020C044C
+.extern FUN_020C04DC
+.extern FUN_020C0510
+.extern FUN_020C054C
+.extern FUN_020C0670
+.extern FUN_020C0688
+.extern FUN_020C0DD4
+.extern FUN_020C0E14
+.extern FUN_020C0E7C
+.extern FUN_020C0EA4
+.extern FUN_020C0EF4
+.extern FUN_020C0F30
+.extern FUN_020C0F50
+.extern FUN_020C0F68
+.extern FUN_020C0F80
+.extern FUN_020C0F8C
+.extern FUN_020C0F9C
+.extern FUN_020C0FDC
+.extern FUN_020C1040
+.extern FUN_020C10A4
+.extern FUN_020C1148
+.extern FUN_020C1180
+.extern FUN_020C1E58
+.extern FUN_020C1E68
+.extern FUN_020C1EA4
+.extern FUN_020C1F54
+.extern FUN_020C1FA4
+.extern FUN_020C1FF0
+.extern FUN_020C20DC
+.extern FUN_020C2104
+.extern FUN_020C217C
+.extern FUN_020C226C
+.extern FUN_020C22D0
+.extern FUN_020C23FC
+.extern FUN_020C26F8
+.extern FUN_020C2828
+.extern FUN_020C290C
+.extern FUN_020C2A94
+.extern FUN_020C35E0
+.extern FUN_020C360C
+.extern FUN_020C3640
+.extern FUN_020C3674
+.extern FUN_020C36A8
+.extern FUN_020C3910
+.extern FUN_020C3980
+.extern FUN_020C39CC
+.extern FUN_020C3EA4
+.extern FUN_020C3EB0
+.extern FUN_020C6034
+.extern FUN_020C605C
+.extern FUN_021D74E0
+.extern FUN_021D76AC
+.extern FUN_021D77C4
+.extern FUN_021D7800
+.extern FUN_021D78FC
+.extern FUN_021D79B4
+.extern FUN_021D7CA4
+.extern FUN_021D7F8C
+.extern FUN_021D8018
+.extern FUN_021D8164
+.extern FUN_021D82BC
+.extern FUN_021D8320
+.extern FUN_021D836C
+.extern FUN_021D83A8
+.extern FUN_021D83C0
+.extern FUN_021D844C
+.extern FUN_021D8494
+.extern FUN_021D85FC
+.extern FUN_021D8624
+.extern FUN_021D865C
+.extern FUN_021D8758
+.extern FUN_021D8820
+.extern FUN_021D88E4
+.extern FUN_021D89CC
+.extern FUN_021D8B64
+.extern FUN_021D8C24
+.extern FUN_021D917C
+.extern FUN_021D959C
+.extern FUN_021D967C
+.extern FUN_021D96F4
+.extern FUN_021D9708
+.extern FUN_021D971C
+.extern FUN_021D9820
+.extern FUN_021D99F8
+.extern FUN_021DA464
+.extern FUN_021DA4EC
+.extern FUN_021DA54C
+.extern FUN_021DA58C
+.extern FUN_021DA5B8
+.extern FUN_021DA5C8
+.extern FUN_021DA5D0
+.extern FUN_021DA5D8
+.extern FUN_021DA7B4
+.extern FUN_021DAAA4
+.extern FUN_021DAC70
+.extern FUN_021DAE40
+.extern FUN_021DAED4
+.extern FUN_021DAF28
+.extern FUN_021DAF78
+.extern FUN_021DAF98
+.extern FUN_021DB030
+.extern FUN_021DB7E8
+.extern FUN_021DB858
+.extern FUN_021DC174
+.extern FUN_021DD6F0
+.extern FUN_021DD718
+.extern FUN_021DDB08
+.extern FUN_021E1374
+.extern FUN_021E1858
+.extern FUN_021E1994
+.extern FUN_021E1BF8
+.extern FUN_021E1C4C
+.extern FUN_021E1C54
+.extern FUN_021E1ECC
+.extern FUN_021E1F34
+.extern FUN_021E1F58
+.extern FUN_021E1F60
+.extern FUN_021E2464
+.extern FUN_021E2608
+.extern FUN_021E26CC
+.extern FUN_021E27E8
+.extern FUN_021E288C
+.extern FUN_021E28A0
+.extern FUN_021E2950
+.extern FUN_021E29B4
+.extern FUN_021E29C8
+.extern FUN_021E2A70
+.extern FUN_021E2AD4
+.extern FUN_021E2B80
+.extern FUN_021E2B9C
+.extern FUN_021E2BB8
+.extern FUN_021E2BD0
+.extern FUN_021E2C24
+.extern FUN_021E2C58
+.extern FUN_021E2CBC
+.extern FUN_021E32F0
+.extern FUN_021E331C
+.extern FUN_021E3424
+.extern FUN_021E3444
+.extern FUN_021E495C
+.extern FUN_021E4C54
+.extern FUN_021E4C60
+.extern FUN_021E4DE4
+.extern FUN_021E5614
+.extern FUN_021E57D4
+.extern FUN_021E5970
+.extern FUN_021E5B30
+.extern FUN_021E5FD8
+.extern FUN_021E5FE0
+.extern FUN_021E6410
+.extern FUN_021E643C
+.extern FUN_021E6990
+.extern FUN_021E69BC
+.extern FUN_021E6BF4
+.extern FUN_021E7030
+.extern FUN_021E70F0
+.extern FUN_021E7138
+.extern FUN_021E7184
+.extern FUN_021E71E8
+.extern FUN_021E7750
+.extern FUN_021E799C
+.extern FUN_021E7AC0
+.extern FUN_021E7EA0
+.extern FUN_021E7EB0
+.extern FUN_021E7EC4
+.extern FUN_021E7EC8
+.extern FUN_021E7ED0
+.extern FUN_021E7ED8
+.extern FUN_021E7FBC
+.extern FUN_021E8128
+.extern FUN_021E8130
+.extern FUN_021E8140
+.extern FUN_021E8144
+.extern FUN_021E8148
+.extern FUN_021E8158
+.extern FUN_021E81BC
+.extern FUN_021E84F4
+.extern FUN_021E856C
+.extern FUN_021E8588
+.extern FUN_021E85E4
+.extern FUN_021E85FC
+.extern FUN_021EAE90
+.extern FUN_021EB044
+.extern FUN_021EC57C
+.extern FUN_021EC71C
+.extern FUN_021EC854
+.extern FUN_021EC864
+.extern FUN_021ECD64
+.extern FUN_021ECF14
+.extern FUN_021ED0CC
+.extern FUN_021ED49C
+.extern FUN_021ED4E0
+.extern FUN_021ED52C
+.extern FUN_021ED5C4
+.extern FUN_021ED5EC
+.extern FUN_021ED644
+.extern FUN_021ED940
+.extern FUN_021EDA48
+.extern FUN_021EDBC8
+.extern FUN_021EF5E0
+.extern FUN_021EF604
+.extern FUN_021EF620
+.extern FUN_021EF654
+.extern FUN_021EF824
+.extern FUN_021EF844
+.extern FUN_021EF8C8
+.extern FUN_021EF8DC
+.extern FUN_021EFA9C
+.extern FUN_021F02C4
+.extern FUN_021F1D8C
+.extern FUN_021F1DC8
+.extern FUN_021F1DFC
+.extern FUN_021F1EC0
+.extern FUN_021F1F78
+.extern FUN_021F2094
+.extern FUN_021F20D8
+.extern FUN_021F20F8
+.extern FUN_021F2AF4
+.extern FUN_021F2E0C
+.extern FUN_021F2E28
+.extern FUN_021F2F48
+.extern FUN_021F2F6C
+.extern FUN_021F3A18
+.extern FUN_021F3AB4
+.extern FUN_021F3B4C
+.extern FUN_021F3B7C
+.extern FUN_021F3DA4
+.extern FUN_021F44D8
+.extern FUN_021F4520
+.extern FUN_021F4568
+.extern FUN_021F4594
+.extern FUN_021F45E8
+.extern FUN_021F4608
+.extern FUN_021F4BD0
+.extern FUN_021F4C88
+.extern FUN_021F4D80
+.extern FUN_021F4DC8
+.extern FUN_021F4E7C
+.extern FUN_021F57EC
+.extern FUN_021F5C44
+.extern FUN_021F61DC
+.extern FUN_021F61E8
+.extern FUN_02211E60
+.extern FUN_0222D5C0
+.extern FUN_0222DAEC
+.extern FUN_0222DD1C
+.extern FUN_0222DD38
+.extern FUN_0222E2BC
+.extern FUN_0222E360
+.extern FUN_0222E3A0
+.extern FUN_0222E7E8
+.extern FUN_0222E874
+.extern FUN_0222ED34
+.extern FUN_0222EDBC
+.extern FUN_0222F440
+.extern FUN_0222F480
+.extern FUN_0222F7E0
+.extern FUN_0222F990
+.extern FUN_022300D4
+.extern FUN_022300DC
+.extern FUN_022300E4
+.extern FUN_022300E8
+.extern FUN_022300F4
+.extern FUN_02230100
+.extern FUN_0223010C
+.extern FUN_02230118
+.extern FUN_02230124
+.extern FUN_02230F3C
+.extern FUN_02230F70
+.extern FUN_02230F80
+.extern FUN_02231344
+.extern FUN_02231350
+.extern FUN_0223135C
+.extern FUN_02231368
+.extern FUN_02231374
+.extern FUN_02239944
+.extern FUN_02239AAC
+.extern FUN_0223CACC
+.extern FUN_0223CB08
+.extern FUN_0223CCDC
+.extern FUN_0223CD7C
+.extern FUN_0223D3D0
+.extern FUN_0223D638
+.extern FUN_0223D648
+.extern FUN_0223DFB4
+.extern FUN_0223E060
+.extern FUN_0223E118
+.extern FUN_0223E154
+.extern FUN_0223E1A4
+.extern FUN_0223E1E0
+.extern FUN_0223E2AC
+.extern FUN_0223E4A8
+.extern FUN_0223E4D4
+.extern FUN_0223E554
+.extern FUN_0223E6B8
+.extern FUN_0223E734
+.extern FUN_0223E7FC
+.extern FUN_0223EB8C
+.extern FUN_0223EF7C
+.extern FUN_0223F4D8
+.extern FUN_0223F4F4
+.extern FUN_0223F8D8
+.extern FUN_0223FCE8
+.extern FUN_02240790
+.extern FUN_022407CC
+.extern FUN_022407DC
+.extern FUN_022407F8
+.extern FUN_02240834
+.extern FUN_02240844
+.extern FUN_0224089C
+.extern FUN_022408FC
+.extern FUN_022411F4
+.extern FUN_02241230
+.extern FUN_02241914
+.extern FUN_02242A38
+.extern FUN_02242BE0
+.extern FUN_0224312C
+.extern FUN_022432E4
+.extern FUN_0224339C
+.extern FUN_022433A8
+.extern FUN_022433B0
+.extern FUN_022433B8
+.extern FUN_022433F8
+.extern FUN_02243408
+.extern FUN_02243428
+.extern FUN_02243448
+.extern FUN_0224345C
+.extern FUN_022434AC
+.extern FUN_022434BC
+.extern FUN_022434D0
+.extern FUN_02243694
+.extern FUN_022436C8
+.extern FUN_022436E8
+.extern FUN_02243780
+.extern FUN_02243838
+.extern FUN_022438DC
+.extern FUN_022438E0
+.extern FUN_022438FC
+.extern FUN_02243920
+.extern FUN_022439F8
+.extern FUN_02243AD8
+.extern FUN_02243BA8
+.extern FUN_02243C5C
+.extern FUN_02243D3C
+.extern FUN_02243DA0
+.extern FUN_02243DB8
+.extern FUN_02243DC0
+.extern FUN_02243DC4
+.extern FUN_02243DD8
+.extern FUN_02243DE0
+.extern FUN_02243E34
+.extern FUN_02243E74
+.extern FUN_02243F18
+.extern FUN_02243F50
+.extern FUN_02243F9C
+.extern FUN_02244210
+.extern FUN_02244558
+.extern FUN_02244660
+.extern FUN_022446BC
+.extern FUN_022446E0
+.extern FUN_022446FC
+.extern FUN_02244758
+.extern FUN_02244770
+.extern FUN_02244824
+.extern FUN_0224484C
+.extern FUN_02244D1C
+.extern FUN_02244D20
+.extern FUN_02244D3C
+.extern FUN_02244D40
+.extern FUN_02244D58
+.extern FUN_02244D98
+.extern FUN_02244DA0
+.extern FUN_02244DB0
+.extern FUN_02244DBC
+.extern FUN_02244DC4
+.extern FUN_02244EF8
+.extern FUN_02244F18
+.extern FUN_02244F24
+.extern FUN_02244F2C
+.extern FUN_02245088
+.extern FUN_02245114
+.extern FUN_02245190
+.extern FUN_02245198
+.extern FUN_022451F0
+.extern FUN_0224525C
+.extern FUN_022452A4
+.extern FUN_02245324
+.extern FUN_02245340
+.extern FUN_02245358
+.extern FUN_0224566C
+.extern FUN_022456E8
+.extern FUN_02245844
+.extern FUN_02245910
+.extern FUN_02245F1C
+.extern FUN_02245F4C
+.extern FUN_02245FA0
+.extern FUN_022461A4
+.extern FUN_022461B8
+.extern FUN_0224666C
+.extern FUN_022466A0
+.extern FUN_022466AC
+.extern FUN_02246F1C
+.extern FUN_02247294
+.extern FUN_022472AC
+.extern FUN_02247544
+.extern FUN_02247614
+.extern FUN_02247728
+.extern FUN_02247808
+.extern FUN_02247970
+.extern FUN_02247A34
+.extern FUN_022483BC
+.extern FUN_022483E0
+.extern FUN_022483EC
+.extern FUN_02248724
+.extern FUN_0224884C
+.extern FUN_022488CC
+.extern FUN_022488EC
+.extern FUN_022488F4
+.extern FUN_022488FC
+.extern FUN_0224891C
+.extern FUN_02248B54
+.extern FUN_02248B58
+.extern FUN_02248B5C
+.extern FUN_02248B60
+.extern FUN_02248B6C
+.extern FUN_02248CC0
+.extern FUN_02248CD0
+.extern FUN_02248DF8
+.extern FUN_02248F70
+.extern FUN_02248FE0
+.extern FUN_02249038
+.extern FUN_022490A0
+.extern FUN_022491FC
+.extern FUN_022494C8
+.extern FUN_02249508
+.extern FUN_02249668
+.extern FUN_022497E8
+.extern FUN_02249E6C
+.extern FUN_02249E78
+.extern FUN_02249E84
+.extern FUN_02249E90
+.extern FUN_0224A310
+.extern FUN_0224A528
+.extern FUN_0224A7C8
+.extern FUN_0224ABAC
+.extern FUN_0224B124
+.extern FUN_0224B2C4
+.extern FUN_0224B568
+.extern FUN_0224B818
+.extern FUN_0224B86C
+.extern FUN_0224B9E0
+.extern FUN_0224BBEC
+.extern FUN_0224BD90
+.extern FUN_0224C038
+.extern FUN_0224C27C
+.extern FUN_0224C520
+.extern FUN_0224C678
+.extern FUN_0224C6E8
+.extern FUN_0224C6F4
+.extern FUN_0224C700
+.extern FUN_0224C8C8
+.extern FUN_0224CA2C
+.extern FUN_0224CA54
+.extern FUN_0224CA58
+.extern FUN_0224CA88
+.extern FUN_0224CA94
+.extern FUN_0224CAA0
+.extern FUN_0224CAB4
+.extern FUN_0224CB30
+.extern FUN_0224CBB0
+.extern FUN_0224CC24
+.extern FUN_0224CECC
+.extern FUN_0224D14C
+.extern FUN_0224D2E0
+.extern FUN_0224D3E8
+.extern FUN_0224D70C
+.extern FUN_0224D76C
+.extern FUN_0224D79C
+.extern FUN_0224DCB8
+.extern FUN_0224DD94
+.extern FUN_0224DDB8
+.extern FUN_0224E554
+.extern FUN_0224E764
+.extern FUN_0224E7C4
+.extern FUN_0224F12C
+.extern FUN_02252534
+.extern FUN_02252538
+.extern FUN_022567E0
+.extern FX_Div
+.extern FX_GetDivResult
+.extern FX_GetDivResultFx64c
+.extern FX_Init
+.extern FX_InvAsync
+.extern FX_Modf
+.extern FX_Sqrt
+.extern G2S_GetBG0CharPtr
+.extern G2S_GetBG1CharPtr
+.extern G2S_GetBG2CharPtr
+.extern G2S_GetBG3CharPtr
+.extern G2_GetBG0CharPtr
+.extern G2_GetBG1CharPtr
+.extern G2_GetBG2CharPtr
+.extern G2_GetBG3CharPtr
+.extern G2x_SetBGyAffine_
+.extern G2x_SetBlendAlpha_
+.extern G2x_SetBlendBrightness_
+.extern G3X_GetBoxTestResult
+.extern G3X_GetClipMtx
+.extern G3X_GetVectorMtx
+.extern G3X_Init
+.extern G3X_InitMtxStack
+.extern G3X_ResetMtxStack
+.extern G3X_SetClearColor
+.extern G3X_SetFog
+.extern G3_LoadMtx43
+.extern G3_MultMtx33
+.extern G3_MultMtx43
+.extern G3_RotX
+.extern G3_RotY
+.extern G3_RotZ
+.extern G3i_LookAt_
+.extern G3i_OrthoW_
+.extern G3i_PerspectiveW_
+.extern GXS_BeginLoadBGExtPltt
+.extern GXS_BeginLoadOBJExtPltt
+.extern GXS_EndLoadBGExtPltt
+.extern GXS_EndLoadOBJExtPltt
+.extern GXS_LoadBG0Char
+.extern GXS_LoadBG0Scr
+.extern GXS_LoadBG1Char
+.extern GXS_LoadBG1Scr
+.extern GXS_LoadBG2Char
+.extern GXS_LoadBG2Scr
+.extern GXS_LoadBG3Char
+.extern GXS_LoadBG3Scr
+.extern GXS_LoadBGExtPltt
+.extern GXS_LoadBGPltt
+.extern GXS_LoadOAM
+.extern GXS_LoadOBJ
+.extern GXS_LoadOBJExtPltt
+.extern GXS_LoadOBJPltt
+.extern GXS_SetGraphicsMode
+.extern GX_BeginLoadBGExtPltt
+.extern GX_BeginLoadClearImage
+.extern GX_BeginLoadOBJExtPltt
+.extern GX_BeginLoadTex
+.extern GX_BeginLoadTexPltt
+.extern GX_DisableBankForLCDC
+.extern GX_DispOff
+.extern GX_DispOn
+.extern GX_EndLoadBGExtPltt
+.extern GX_EndLoadClearImage
+.extern GX_EndLoadOBJExtPltt
+.extern GX_EndLoadTex
+.extern GX_EndLoadTexPltt
+.extern GX_GetBankForOBJ
+.extern GX_GetBankForOBJExtPltt
+.extern GX_GetBankForSubOBJ
+.extern GX_GetBankForSubOBJExtPltt
+.extern GX_HBlankIntr
+.extern GX_Init
+.extern GX_LoadBG0Char
+.extern GX_LoadBG0Scr
+.extern GX_LoadBG1Char
+.extern GX_LoadBG1Scr
+.extern GX_LoadBG2Char
+.extern GX_LoadBG2Scr
+.extern GX_LoadBG3Char
+.extern GX_LoadBG3Scr
+.extern GX_LoadBGExtPltt
+.extern GX_LoadBGPltt
+.extern GX_LoadClearImageColor
+.extern GX_LoadClearImageDepth
+.extern GX_LoadOAM
+.extern GX_LoadOBJ
+.extern GX_LoadOBJExtPltt
+.extern GX_LoadOBJPltt
+.extern GX_LoadTex
+.extern GX_LoadTexPltt
+.extern GX_ResetBankForBG
+.extern GX_ResetBankForBGExtPltt
+.extern GX_ResetBankForOBJ
+.extern GX_ResetBankForOBJExtPltt
+.extern GX_ResetBankForSubBG
+.extern GX_ResetBankForSubOBJ
+.extern GX_ResetBankForTex
+.extern GX_ResetBankForTexPltt
+.extern GX_SetBankForBG
+.extern GX_SetBankForBGExtPltt
+.extern GX_SetBankForLCDC
+.extern GX_SetBankForOBJ
+.extern GX_SetBankForOBJExtPltt
+.extern GX_SetBankForSubBG
+.extern GX_SetBankForSubBGExtPltt
+.extern GX_SetBankForSubOBJ
+.extern GX_SetBankForSubOBJExtPltt
+.extern GX_SetBankForTex
+.extern GX_SetBankForTexPltt
+.extern GX_SetGraphicsMode
+.extern GX_VBlankIntr
+.extern GXx_SetMasterBrightness_
+.extern IC_InvalidateAll
+.extern IC_InvalidateRange
+.extern InitGraphicMemory
+.extern InitScriptContext
+.extern InitSystemForTheGame
+.extern LoadFromNARC
+.extern LoadFromNARC_7
+.extern LoadFromNarc_2
+.extern LoadPlayerDataAddress
+.extern MATH_CalcCRC16
+.extern MATH_CalcCRC16CCITT
+.extern MATH_CalcCRC32
+.extern MATH_CalcCRC8
+.extern MATH_CalcHMACSHA1
+.extern MATH_CalcMD5
+.extern MATH_CalcSHA1
+.extern MATH_CountPopulation
+.extern MATH_MD5GetHash
+.extern MATH_MD5Init
+.extern MATH_MD5Update
+.extern MATH_SHA1GetHash
+.extern MATH_SHA1Init
+.extern MATH_SHA1Update
+.extern MATHi_CRC16InitTable
+.extern MATHi_CRC16InitTableRev
+.extern MATHi_CRC32InitTableRev
+.extern MATHi_CRC8InitTable
+.extern MATHi_CalcHMAC
+.extern MIC_DoSamplingAsync
+.extern MIC_Init
+.extern MIC_StartAutoSampling
+.extern MIC_StopAutoSampling
+.extern MI_Copy36B
+.extern MI_Copy48B
+.extern MI_Copy64B
+.extern MI_CpuCopy8
+.extern MI_CpuFill8
+.extern MI_DmaCopy16
+.extern MI_DmaCopy32
+.extern MI_DmaCopy32Async
+.extern MI_DmaFill32
+.extern MI_DmaFill32Async
+.extern MI_HBlankDmaCopy16
+.extern MI_HBlankDmaCopy32
+.extern MI_Init
+.extern MI_SendGXCommandAsync
+.extern MI_SendGXCommandAsyncFast
+.extern MI_StopDma
+.extern MI_SwapWord
+.extern MI_UncompressLZ8
+.extern MI_WaitDma
+.extern MI_Zero36B
+.extern MIi_CardDmaCopy32
+.extern MIi_CheckDma0SourceAddress
+.extern MIi_CpuClear16
+.extern MIi_CpuClear32
+.extern MIi_CpuClearFast
+.extern MIi_CpuCopy16
+.extern MIi_CpuCopy32
+.extern MIi_CpuCopyFast
+.extern MIi_CpuSend32
+.extern MIi_DmaSetParams
+.extern MIi_DmaSetParams_noInt
+.extern MIi_DmaSetParams_wait
+.extern MIi_DmaSetParams_wait_noInt
+.extern MIi_UncompressBackward
+.extern MTX_Concat33
+.extern MTX_Concat43
+.extern MTX_Identity33_
+.extern MTX_Identity43_
+.extern MTX_MultVec33
+.extern MTX_MultVec43
+.extern MTX_RotX33_
+.extern MTX_RotY33_
+.extern MTX_RotZ33_
+.extern MTX_Scale43_
+.extern NitroMain
+.extern OS_AllocFromArenaHi
+.extern OS_AllocFromArenaLo
+.extern OS_AllocFromHeap
+.extern OS_CancelAlarm
+.extern OS_CreateAlarm
+.extern OS_CreateThread
+.extern OS_DestroyThread
+.extern OS_DisableInterrupts
+.extern OS_DisableIrqMask
+.extern OS_DisableScheduler
+.extern OS_EnableIrqMask
+.extern OS_EnableScheduler
+.extern OS_ExitThread
+.extern OS_FreeToHeap
+.extern OS_GetCpsrIrq
+.extern OS_GetDTCMAddress
+.extern OS_GetInitArenaHi
+.extern OS_GetInitArenaLo
+.extern OS_GetIrqFunction
+.extern OS_GetLockID
+.extern OS_GetLowEntropyData
+.extern OS_GetMacAddress
+.extern OS_GetOwnerInfo
+.extern OS_GetOwnerRtcOffset
+.extern OS_GetProcMode
+.extern OS_GetThreadPriority
+.extern OS_GetTick
+.extern OS_GetTickLo
+.extern OS_Halt
+.extern OS_IRQTable
+.extern OS_Init
+.extern OS_InitAlarm
+.extern OS_InitMessageQueue
+.extern OS_InitMutex
+.extern OS_InitTick
+.extern OS_IrqDummy
+.extern OS_IrqHandler
+.extern OS_IsAlarmAvailable
+.extern OS_IsRunOnEmulator
+.extern OS_IsThreadTerminated
+.extern OS_IsTickAvailable
+.extern OS_JamMessage
+.extern OS_JoinThread
+.extern OS_LockCartridge
+.extern OS_LockMutex
+.extern OS_ReadMessage
+.extern OS_ReadOwnerOfLockWord
+.extern OS_ReceiveMessage
+.extern OS_ReleaseLockID
+.extern OS_RescheduleThread
+.extern OS_ResetRequestIrqMask
+.extern OS_ResetSystem
+.extern OS_RestoreInterrupts
+.extern OS_SNPrintf
+.extern OS_SendMessage
+.extern OS_SetAlarm
+.extern OS_SetArenaHi
+.extern OS_SetArenaLo
+.extern OS_SetDPermissionsForProtectionRegion
+.extern OS_SetIrqFunction
+.extern OS_SetIrqMask
+.extern OS_SetThreadPriority
+.extern OS_Sleep
+.extern OS_SleepThread
+.extern OS_SpinWait
+.extern OS_Terminate
+.extern OS_TryLockCard
+.extern OS_TryLockCartridge
+.extern OS_TryLockMutex
+.extern OS_UnlockCard
+.extern OS_UnlockCartridge
+.extern OS_UnlockCartridge2
+.extern OS_UnlockMutex
+.extern OS_WaitIrq
+.extern OS_WakeupThread
+.extern OS_WakeupThreadDirect
+.extern OS_YieldThread
+.extern OSi_DoResetSystem
+.extern OSi_EnterDmaCallback
+.extern OSi_IrqDma0
+.extern OSi_IrqDma1
+.extern OSi_IrqDma2
+.extern OSi_IrqDma3
+.extern OSi_IrqThreadQueue
+.extern OSi_IrqTimer0
+.extern OSi_IrqTimer1
+.extern OSi_IrqTimer2
+.extern OSi_IrqTimer3
+.extern OSi_IsResetOccurred
+.extern OSi_MainExArenaEnabled
+.extern OSi_ThreadInfo
+.extern OSi_TryLockVram
+.extern OSi_UnlockVram
+.extern PM_AppendPostSleepCallback
+.extern PM_DeletePostSleepCallback
+.extern PM_DeletePreSleepCallback
+.extern PM_ForceToPowerOff
+.extern PM_GetBackLight
+.extern PM_GetLCDPower
+.extern PM_GoSleepMode
+.extern PM_Init
+.extern PM_PrependPreSleepCallback
+.extern PM_SetAmp
+.extern PM_SetAmpGain
+.extern PM_SetBackLight
+.extern PM_SetLCDPower
+.extern PMi_Lock
+.extern PMi_ReadRegister
+.extern PMi_SendPxiData
+.extern PMi_SendSleepStart
+.extern PMi_SetLED
+.extern PMi_SetLEDAsync
+.extern PMi_WaitBusy
+.extern PXI_Init
+.extern PXI_IsCallbackReady
+.extern PXI_SendWordByFifo
+.extern PXI_SetFifoRecvCallback
+.extern PXIi_HandlerRecvFifoNotEmpty
+.extern ProcessBlock
+.extern RTC_ConvertDateTimeToSecond
+.extern RTC_ConvertDateToDay
+.extern RTC_ConvertSecondToDateTime
+.extern RTC_GetDate
+.extern RTC_GetDateTimeAsync
+.extern RTC_GetTime
+.extern RTC_Init
+.extern RunScriptCommand
+.extern SDK_AUTOLOAD_DTCM_START
+.extern SDK_AUTOLOAD_LIST
+.extern SDK_AUTOLOAD_LIST_END
+.extern SDK_AUTOLOAD_START
+.extern SDK_MAIN_ARENA_LO
+.extern SDK_SECTION_ARENA_DTCM_START
+.extern SDK_SECTION_ARENA_EX_START
+.extern SDK_SECTION_ARENA_ITCM_START
+.extern SDK_STATIC_BSS_END
+.extern SDK_STATIC_BSS_START
+.extern SND_AssignWaveArc
+.extern SND_CalcChannelVolume
+.extern SND_DestroyBank
+.extern SND_DestroyWaveArc
+.extern SND_FlushCommand
+.extern SND_GetChannelStatus
+.extern SND_GetCurrentCommandTag
+.extern SND_GetFirstInstDataPos
+.extern SND_GetNextInstData
+.extern SND_GetPlayerStatus
+.extern SND_GetPlayerTickCounter
+.extern SND_GetWaveDataAddress
+.extern SND_GetWaveDataCount
+.extern SND_Init
+.extern SND_InvalidateBankData
+.extern SND_InvalidateSeqData
+.extern SND_InvalidateWaveData
+.extern SND_IsFinishedCommandTag
+.extern SND_LockChannel
+.extern SND_PauseSeq
+.extern SND_PrepareSeq
+.extern SND_RecvCommandReply
+.extern SND_ResetMasterPan
+.extern SND_SetChannelPan
+.extern SND_SetChannelTimer
+.extern SND_SetChannelVolume
+.extern SND_SetMasterPan
+.extern SND_SetOutputSelector
+.extern SND_SetPlayerChannelPriority
+.extern SND_SetPlayerVolume
+.extern SND_SetTrackAllocatableChannel
+.extern SND_SetTrackPan
+.extern SND_SetTrackPitch
+.extern SND_SetWaveDataAddress
+.extern SND_SetupAlarm
+.extern SND_SetupCapture
+.extern SND_SetupChannelPcm
+.extern SND_StartPreparedSeq
+.extern SND_StartTimer
+.extern SND_StopSeq
+.extern SND_StopTimer
+.extern SND_UnlockChannel
+.extern SND_WaitForCommandProc
+.extern STD_CopyLString
+.extern ScriptCall
+.extern ScriptJump
+.extern ScriptReadHalfword
+.extern ScriptReadWord
+.extern ScriptReturn
+.extern SetupBytecodeScript
+.extern SetupNativeScript
+.extern StopScript
+.extern StringCopy
+.extern StringCopyN
+.extern StringFillEOS
+.extern StringLength
+.extern StringNotEqual
+.extern StringNotEqualN
+.extern TP_CheckError
+.extern TP_GetCalibratedPoint
+.extern TP_GetLatestIndexInAuto
+.extern TP_GetLatestRawPointInAuto
+.extern TP_GetUserInfo
+.extern TP_Init
+.extern TP_RequestAutoSamplingStartAsync
+.extern TP_RequestAutoSamplingStopAsync
+.extern TP_RequestSamplingAsync
+.extern TP_SetCalibrateParam
+.extern TP_WaitBusy
+.extern TP_WaitRawResult
+.extern VEC_Add
+.extern VEC_CrossProduct
+.extern VEC_DotProduct
+.extern VEC_Fx16CrossProduct
+.extern VEC_Fx16DotProduct
+.extern VEC_Fx16Normalize
+.extern VEC_Mag
+.extern VEC_Normalize
+.extern VEC_Subtract
+.extern WM_Disable
+.extern WM_Disconnect
+.extern WM_Enable
+.extern WM_End
+.extern WM_EndDCF
+.extern WM_EndMP
+.extern WM_EndParent
+.extern WM_EndScan
+.extern WM_Finish
+.extern WM_GetAllowedChannel
+.extern WM_GetDispersionBeaconPeriod
+.extern WM_GetDispersionScanPeriod
+.extern WM_GetLinkLevel
+.extern WM_Init
+.extern WM_Initialize
+.extern WM_MeasureChannel
+.extern WM_PowerOff
+.extern WM_PowerOn
+.extern WM_Reset
+.extern WM_SetBeaconIndication
+.extern WM_SetDCFData
+.extern WM_SetEntry
+.extern WM_SetGameInfo
+.extern WM_SetIndCallback
+.extern WM_SetLifeTime
+.extern WM_SetMPDataToPortEx
+.extern WM_SetParentParameter
+.extern WM_SetPortCallback
+.extern WM_SetWEPKeyEx
+.extern WM_StartConnectEx
+.extern WM_StartDCF
+.extern WM_StartMP
+.extern WM_StartParent
+.extern WM_StartScan
+.extern WM_StartScanEx
+.extern WMi_GetStatusAddress
+.extern __call_static_initializers
+.extern __destroy_global_chain
+.extern _ddiv
+.extern _fadd
+.extern _fdiv
+.extern _feq
+.extern _ffix
+.extern _ffixu
+.extern _fflt
+.extern _ffltu
+.extern _fgr
+.extern _fmul
+.extern _fp_init
+.extern _fsub
+.extern _ll_mod
+.extern _ll_mul
+.extern _ll_sdiv
+.extern _ll_shl
+.extern _ll_udiv
+.extern _s32_div_f
+.extern _u32_div_f
+.extern _u32_div_not_0_f
+.extern abs
+.extern cardi_common
+.extern gScriptCmdTable
+.extern memcmp
+.extern memcpy
+.extern memmove
+.extern strcmp
+.extern strcpy
+.extern strlen
+.extern tempName_NNS_FndAllocFromExpHeapEx
+.extern tempName_NNS_FndCreateExpHeapEx
+.extern thunk_FUN_02096e4c
+.extern thunk_FUN_02097190
+.extern thunk_FUN_020adc8c
+.extern thunk_FUN_020adc8c_2
+.extern thunk_FUN_020afda0
+.extern thunk_FUN_020afda0_2
+.extern thunk_FUN_020b5040
+.extern Unk_0210683C
+.extern Unk_02106840
+.extern Unk_02106900
+.extern Unk_02106A00
+.extern Unk_02106A04
+.extern OSi_IrqCallbackInfo
+.extern OSi_IrqCallbackInfoIndex
+.extern SDK_SYS_STACKSIZE
+.extern SDK_IRQ_STACKSIZE
+.extern OSi_IsThreadInitialized
+.extern OSi_LauncherThread
+.extern OSi_CurrentThreadPtr
+.extern OSi_IdleThread
+.extern OSi_IdleThreadStack
+.extern OSi_RescheduleCount
+.extern OSi_SystemCallbackInSwitchThread
+.extern OSi_Initialized
+.extern OSi_HeapInfo
+.extern OSi_DebuggerHandler
+.extern OSi_ExContext
+.extern OSi_UserExceptionHandler
+.extern OSi_UserExceptionHandlerArg
+.extern OSi_TimerReserved
+.extern OSi_UseTick
+.extern OSi_NeedResetTimer
+.extern OSi_TickCounter
+.extern OSi_UseAlarm
+.extern OSi_AlarmQueue
+.extern OSi_UseVAlarm
+.extern OSi_PreviousVCount
+.extern OSi_VFrameCount
+.extern OSi_VAlarmQueue
+.extern OSi_IsInitReset
+.extern OSi_vramExclusive
+.extern OSi_vramLockId
+.extern OSi_ThreadIdCount
+.extern OSi_StackForDestructor
diff --git a/arm7/undefined_syms.txt b/arm7/undefined_syms.txt
new file mode 100644
index 00000000..075d22a9
--- /dev/null
+++ b/arm7/undefined_syms.txt
@@ -0,0 +1,506 @@
+SDK_SYS_STACKSIZE = 0x00000000;
+CONST_34 = 0x00000034;
+CONST_3F = 0x0000003F;
+SDK_IRQ_STACKSIZE = 0x00000400;
+
+// .data
+// OS
+OSi_IrqCallbackInfoIndex = 0x02106818;
+// DGT
+Unk_0210683C = 0x0210683C;
+Unk_02106840 = 0x02106840;
+Unk_02106900 = 0x02106900;
+Unk_02106A00 = 0x02106A00;
+Unk_02106A04 = 0x02106A04;
+
+// .bss
+gBacklightTop = 0x02106FA0;
+gBacklightTop_2 = 0x02106FA0;
+gUnknown2106FB8 = 0x02106FB8;
+gUnknown21C48B8 = 0x021C48B8;
+gUnk021C4918 = 0x021C4918;
+OSi_IrqCallbackInfo = 0x021D341C;
+isInitialized = 0x021D347C;
+OSi_StackForDestructor = 0x021D3480;
+OSi_RescheduleCount = 0x021D3484;
+OSi_ThreadIdCount = 0x021D3488;
+OSi_SystemCallbackInSwitchThread = 0x021D348C;
+OSi_CurrentThreadPtr = 0x021D3490;
+OSi_IsThreadInitialized = 0x021D3494;
+OSi_ThreadInfo = 0x021D3498;
+OSi_IdleThread = 0x021D34A8;
+OSi_LauncherThread = 0x021D3568;
+OSi_IdleThreadStack = 0x021D3628;
+OSi_Initialized = 0x021D36F0;
+OSi_MainExArenaEnabled = 0x021D36F4;
+OSi_HeapInfo = 0x021D36F8;
+OSi_UserExceptionHandler = 0x021D371C;
+OSi_UserExceptionHandlerArg = 0x21D3720;
+OSi_DebuggerHandler = 0x021D3724;
+OSi_ExContext = 0x021D3728;
+OSi_TimerReserved = 0x021D37A8;
+OSi_UseTick = 0x021D37AC;
+OSi_NeedResetTimer = 0x021D37B0;
+OSi_TickCounter = 0x021D37B4;
+OSi_UseAlarm = 0x021D37BC;
+OSi_AlarmQueue = 0x021D37C0;
+OSi_UseVAlarm = 0x021D37C8;
+OSi_PreviousVCount = 0x021D37CC;
+OSi_VFrameCount = 0x021D37D0;
+OSi_VAlarmQueue = 0x021D37D4;
+OSi_IsInitReset = 0x021D37DC;
+OSi_IsResetOccurred = 0x021D37E0;
+OSi_vramExclusive = 0x021D37E4;
+OSi_vramLockId = 0x021D37E8;
+cardi_common = 0x021D55C0;
+
+// Overlay
+FUN_021D74E0 = 0x021D74E0;
+FUN_021D76AC = 0x021D76AC;
+gUnk021D76C8 = 0x021D76C8;
+FUN_021D77C4 = 0x021D77C4;
+FUN_021D7800 = 0x021D7800;
+FUN_021D78FC = 0x021D78FC;
+FUN_021D79B4 = 0x021D79B4;
+FUN_021D7CA4 = 0x021D7CA4;
+FUN_021D7F8C = 0x021D7F8C;
+FUN_021D8018 = 0x021D8018;
+FUN_021D8164 = 0x021D8164;
+FUN_021D82BC = 0x021D82BC;
+FUN_021D8320 = 0x021D8320;
+FUN_021D836C = 0x021D836C;
+FUN_021D83A8 = 0x021D83A8;
+FUN_021D83C0 = 0x021D83C0;
+FUN_021D844C = 0x021D844C;
+FUN_021D8494 = 0x021D8494;
+FUN_021D85FC = 0x021D85FC;
+FUN_021D8624 = 0x021D8624;
+FUN_021D865C = 0x021D865C;
+FUN_021D8758 = 0x021D8758;
+FUN_021D8820 = 0x021D8820;
+FUN_021D88E4 = 0x021D88E4;
+FUN_021D89CC = 0x021D89CC;
+FUN_021D8B64 = 0x021D8B64;
+FUN_021D8C24 = 0x021D8C24;
+FUN_021D917C = 0x021D917C;
+FUN_021D959C = 0x021D959C;
+FUN_021D967C = 0x021D967C;
+FUN_021D96F4 = 0x021D96F4;
+FUN_021D9708 = 0x021D9708;
+FUN_021D971C = 0x021D971C;
+FUN_021D9820 = 0x021D9820;
+FUN_021D99F8 = 0x021D99F8;
+FUN_021DA464 = 0x021DA464;
+FUN_021DA4EC = 0x021DA4EC;
+FUN_021DA54C = 0x021DA54C;
+FUN_021DA58C = 0x021DA58C;
+FUN_021DA5B8 = 0x021DA5B8;
+FUN_021DA5C8 = 0x021DA5C8;
+FUN_021DA5D0 = 0x021DA5D0;
+FUN_021DA5D8 = 0x021DA5D8;
+FUN_021DA7B4 = 0x021DA7B4;
+FUN_021DAAA4 = 0x021DAAA4;
+FUN_021DAC70 = 0x021DAC70;
+FUN_021DAE40 = 0x021DAE40;
+FUN_021DAED4 = 0x021DAED4;
+FUN_021DAF28 = 0x021DAF28;
+FUN_021DAF78 = 0x021DAF78;
+FUN_021DAF98 = 0x021DAF98;
+FUN_021DB030 = 0x021DB030;
+FUN_021DB7E8 = 0x021DB7E8;
+FUN_021DB858 = 0x021DB858;
+gUnk021DBE18 = 0x021DBE18;
+FUN_021DC174 = 0x021DC174;
+FUN_021DD6F0 = 0x021DD6F0;
+FUN_021DD718 = 0x021DD718;
+FUN_021DDB08 = 0x021DDB08;
+FUN_021E1374 = 0x021E1374;
+FUN_021E1858 = 0x021E1858;
+FUN_021E1994 = 0x021E1994;
+FUN_021E1BF8 = 0x021E1BF8;
+FUN_021E1C4C = 0x021E1C4C;
+FUN_021E1C54 = 0x021E1C54;
+FUN_021E1ECC = 0x021E1ECC;
+FUN_021E1F34 = 0x021E1F34;
+FUN_021E1F58 = 0x021E1F58;
+FUN_021E1F60 = 0x021E1F60;
+FUN_021E2464 = 0x021E2464;
+FUN_021E2608 = 0x021E2608;
+FUN_021E26CC = 0x021E26CC;
+FUN_021E27E8 = 0x021E27E8;
+FUN_021E288C = 0x021E288C;
+FUN_021E28A0 = 0x021E28A0;
+FUN_021E2950 = 0x021E2950;
+FUN_021E29B4 = 0x021E29B4;
+FUN_021E29C8 = 0x021E29C8;
+FUN_021E2A70 = 0x021E2A70;
+FUN_021E2AD4 = 0x021E2AD4;
+FUN_021E2B80 = 0x021E2B80;
+FUN_021E2B9C = 0x021E2B9C;
+FUN_021E2BB8 = 0x021E2BB8;
+FUN_021E2BD0 = 0x021E2BD0;
+FUN_021E2C24 = 0x021E2C24;
+FUN_021E2C58 = 0x021E2C58;
+FUN_021E2CBC = 0x021E2CBC;
+FUN_021E32F0 = 0x021E32F0;
+FUN_021E331C = 0x021E331C;
+FUN_021E3424 = 0x021E3424;
+FUN_021E3444 = 0x021E3444;
+FUN_021E495C = 0x021E495C;
+FUN_021E4C54 = 0x021E4C54;
+FUN_021E4C60 = 0x021E4C60;
+FUN_021E4DE4 = 0x021E4DE4;
+FUN_021E5614 = 0x021E5614;
+FUN_021E57D4 = 0x021E57D4;
+FUN_021E5970 = 0x021E5970;
+FUN_021E5B30 = 0x021E5B30;
+FUN_021E5FD8 = 0x021E5FD8;
+FUN_021E5FE0 = 0x021E5FE0;
+FUN_021E6410 = 0x021E6410;
+FUN_021E643C = 0x021E643C;
+FUN_021E6990 = 0x021E6990;
+FUN_021E69BC = 0x021E69BC;
+FUN_021E6BF4 = 0x021E6BF4;
+FUN_021E7030 = 0x021E7030;
+FUN_021E70F0 = 0x021E70F0;
+FUN_021E7138 = 0x021E7138;
+FUN_021E7184 = 0x021E7184;
+FUN_021E71E8 = 0x021E71E8;
+FUN_021E7750 = 0x021E7750;
+FUN_021E799C = 0x021E799C;
+FUN_021E7AC0 = 0x021E7AC0;
+FUN_021E7EA0 = 0x021E7EA0;
+FUN_021E7EB0 = 0x021E7EB0;
+FUN_021E7EC4 = 0x021E7EC4;
+FUN_021E7EC8 = 0x021E7EC8;
+FUN_021E7ED0 = 0x021E7ED0;
+FUN_021E7ED8 = 0x021E7ED8;
+FUN_021E7FBC = 0x021E7FBC;
+FUN_021E8128 = 0x021E8128;
+FUN_021E8130 = 0x021E8130;
+FUN_021E8140 = 0x021E8140;
+FUN_021E8144 = 0x021E8144;
+FUN_021E8148 = 0x021E8148;
+FUN_021E8158 = 0x021E8158;
+FUN_021E81BC = 0x021E81BC;
+FUN_021E84F4 = 0x021E84F4;
+FUN_021E856C = 0x021E856C;
+FUN_021E8588 = 0x021E8588;
+FUN_021E85E4 = 0x021E85E4;
+FUN_021E85FC = 0x021E85FC;
+FUN_021EAE90 = 0x021EAE90;
+FUN_021EB044 = 0x021EB044;
+FUN_021EC57C = 0x021EC57C;
+FUN_021EC71C = 0x021EC71C;
+FUN_021EC854 = 0x021EC854;
+FUN_021EC864 = 0x021EC864;
+FUN_021ECD64 = 0x021ECD64;
+FUN_021ECF14 = 0x021ECF14;
+FUN_021ED0CC = 0x021ED0CC;
+FUN_021ED49C = 0x021ED49C;
+FUN_021ED4E0 = 0x021ED4E0;
+FUN_021ED52C = 0x021ED52C;
+FUN_021ED5C4 = 0x021ED5C4;
+FUN_021ED5EC = 0x021ED5EC;
+FUN_021ED644 = 0x021ED644;
+FUN_021ED940 = 0x021ED940;
+FUN_021EDA48 = 0x021EDA48;
+FUN_021EDBC8 = 0x021EDBC8;
+FUN_021EF5E0 = 0x021EF5E0;
+FUN_021EF604 = 0x021EF604;
+FUN_021EF620 = 0x021EF620;
+FUN_021EF654 = 0x021EF654;
+FUN_021EF824 = 0x021EF824;
+FUN_021EF844 = 0x021EF844;
+FUN_021EF8C8 = 0x021EF8C8;
+FUN_021EF8DC = 0x021EF8DC;
+FUN_021EFA9C = 0x021EFA9C;
+FUN_021F02C4 = 0x021F02C4;
+FUN_021F1D8C = 0x021F1D8C;
+FUN_021F1DC8 = 0x021F1DC8;
+FUN_021F1DFC = 0x021F1DFC;
+FUN_021F1EC0 = 0x021F1EC0;
+FUN_021F1F78 = 0x021F1F78;
+FUN_021F2094 = 0x021F2094;
+FUN_021F20D8 = 0x021F20D8;
+FUN_021F20F8 = 0x021F20F8;
+FUN_021F2AF4 = 0x021F2AF4;
+FUN_021F2E0C = 0x021F2E0C;
+FUN_021F2E28 = 0x021F2E28;
+FUN_021F2F48 = 0x021F2F48;
+FUN_021F2F6C = 0x021F2F6C;
+FUN_021F3A18 = 0x021F3A18;
+FUN_021F3AB4 = 0x021F3AB4;
+FUN_021F3B4C = 0x021F3B4C;
+FUN_021F3B7C = 0x021F3B7C;
+FUN_021F3DA4 = 0x021F3DA4;
+FUN_021F44D8 = 0x021F44D8;
+FUN_021F4520 = 0x021F4520;
+FUN_021F4568 = 0x021F4568;
+FUN_021F4594 = 0x021F4594;
+FUN_021F45E8 = 0x021F45E8;
+FUN_021F4608 = 0x021F4608;
+FUN_021F4BD0 = 0x021F4BD0;
+FUN_021F4C88 = 0x021F4C88;
+FUN_021F4D80 = 0x021F4D80;
+FUN_021F4DC8 = 0x021F4DC8;
+FUN_021F4E7C = 0x021F4E7C;
+FUN_021F57EC = 0x021F57EC;
+FUN_021F5C44 = 0x021F5C44;
+FUN_021F61DC = 0x021F61DC;
+FUN_021F61E8 = 0x021F61E8;
+FUN_02211E60 = 0x02211E60;
+FUN_0222D5C0 = 0x0222D5C0;
+FUN_0222DAEC = 0x0222DAEC;
+FUN_0222DD1C = 0x0222DD1C;
+FUN_0222DD38 = 0x0222DD38;
+FUN_0222E2BC = 0x0222E2BC;
+FUN_0222E360 = 0x0222E360;
+FUN_0222E3A0 = 0x0222E3A0;
+FUN_0222E7E8 = 0x0222E7E8;
+FUN_0222E874 = 0x0222E874;
+FUN_0222ED34 = 0x0222ED34;
+FUN_0222EDBC = 0x0222EDBC;
+FUN_0222F440 = 0x0222F440;
+FUN_0222F480 = 0x0222F480;
+FUN_0222F7E0 = 0x0222F7E0;
+FUN_0222F990 = 0x0222F990;
+FUN_022300D4 = 0x022300D4;
+FUN_022300DC = 0x022300DC;
+FUN_022300E4 = 0x022300E4;
+FUN_022300E8 = 0x022300E8;
+FUN_022300F4 = 0x022300F4;
+FUN_02230100 = 0x02230100;
+FUN_0223010C = 0x0223010C;
+FUN_02230118 = 0x02230118;
+FUN_02230124 = 0x02230124;
+FUN_02230F3C = 0x02230F3C;
+FUN_02230F70 = 0x02230F70;
+FUN_02230F80 = 0x02230F80;
+FUN_02231344 = 0x02231344;
+FUN_02231350 = 0x02231350;
+FUN_0223135C = 0x0223135C;
+FUN_02231368 = 0x02231368;
+FUN_02231374 = 0x02231374;
+FUN_02239944 = 0x02239944;
+FUN_02239AAC = 0x02239AAC;
+FUN_0223CACC = 0x0223CACC;
+FUN_0223CB08 = 0x0223CB08;
+FUN_0223CCDC = 0x0223CCDC;
+FUN_0223CD7C = 0x0223CD7C;
+FUN_0223D3D0 = 0x0223D3D0;
+FUN_0223D638 = 0x0223D638;
+FUN_0223D648 = 0x0223D648;
+FUN_0223DFB4 = 0x0223DFB4;
+FUN_0223E060 = 0x0223E060;
+FUN_0223E118 = 0x0223E118;
+FUN_0223E154 = 0x0223E154;
+FUN_0223E1A4 = 0x0223E1A4;
+FUN_0223E1E0 = 0x0223E1E0;
+FUN_0223E2AC = 0x0223E2AC;
+FUN_0223E4A8 = 0x0223E4A8;
+FUN_0223E4D4 = 0x0223E4D4;
+FUN_0223E554 = 0x0223E554;
+FUN_0223E6B8 = 0x0223E6B8;
+FUN_0223E734 = 0x0223E734;
+FUN_0223E7FC = 0x0223E7FC;
+FUN_0223EB8C = 0x0223EB8C;
+FUN_0223EF7C = 0x0223EF7C;
+FUN_0223F4D8 = 0x0223F4D8;
+FUN_0223F4F4 = 0x0223F4F4;
+FUN_0223F8D8 = 0x0223F8D8;
+FUN_0223FCE8 = 0x0223FCE8;
+FUN_02240790 = 0x02240790;
+FUN_022407CC = 0x022407CC;
+FUN_022407DC = 0x022407DC;
+FUN_022407F8 = 0x022407F8;
+FUN_02240834 = 0x02240834;
+FUN_02240844 = 0x02240844;
+FUN_0224089C = 0x0224089C;
+FUN_022408FC = 0x022408FC;
+FUN_022411F4 = 0x022411F4;
+FUN_02241230 = 0x02241230;
+FUN_02241914 = 0x02241914;
+FUN_02242A38 = 0x02242A38;
+FUN_02242BE0 = 0x02242BE0;
+FUN_0224312C = 0x0224312C;
+FUN_022432E4 = 0x022432E4;
+FUN_0224339C = 0x0224339C;
+FUN_022433A8 = 0x022433A8;
+FUN_022433B0 = 0x022433B0;
+FUN_022433B8 = 0x022433B8;
+FUN_022433F8 = 0x022433F8;
+FUN_02243408 = 0x02243408;
+FUN_02243428 = 0x02243428;
+FUN_02243448 = 0x02243448;
+FUN_0224345C = 0x0224345C;
+FUN_022434AC = 0x022434AC;
+FUN_022434BC = 0x022434BC;
+FUN_022434D0 = 0x022434D0;
+FUN_02243694 = 0x02243694;
+FUN_022436C8 = 0x022436C8;
+FUN_022436E8 = 0x022436E8;
+FUN_02243780 = 0x02243780;
+FUN_02243838 = 0x02243838;
+FUN_022438DC = 0x022438DC;
+FUN_022438E0 = 0x022438E0;
+FUN_022438FC = 0x022438FC;
+FUN_02243920 = 0x02243920;
+FUN_022439F8 = 0x022439F8;
+FUN_02243AD8 = 0x02243AD8;
+FUN_02243BA8 = 0x02243BA8;
+FUN_02243C5C = 0x02243C5C;
+FUN_02243D3C = 0x02243D3C;
+FUN_02243DA0 = 0x02243DA0;
+FUN_02243DB8 = 0x02243DB8;
+FUN_02243DC0 = 0x02243DC0;
+FUN_02243DC4 = 0x02243DC4;
+FUN_02243DD8 = 0x02243DD8;
+FUN_02243DE0 = 0x02243DE0;
+FUN_02243E34 = 0x02243E34;
+FUN_02243E74 = 0x02243E74;
+FUN_02243F18 = 0x02243F18;
+FUN_02243F50 = 0x02243F50;
+FUN_02243F9C = 0x02243F9C;
+FUN_02244210 = 0x02244210;
+FUN_02244558 = 0x02244558;
+FUN_02244660 = 0x02244660;
+FUN_022446BC = 0x022446BC;
+FUN_022446E0 = 0x022446E0;
+FUN_022446FC = 0x022446FC;
+FUN_02244758 = 0x02244758;
+FUN_02244770 = 0x02244770;
+FUN_02244824 = 0x02244824;
+FUN_0224484C = 0x0224484C;
+FUN_02244D1C = 0x02244D1C;
+FUN_02244D20 = 0x02244D20;
+FUN_02244D3C = 0x02244D3C;
+FUN_02244D40 = 0x02244D40;
+FUN_02244D58 = 0x02244D58;
+FUN_02244D98 = 0x02244D98;
+FUN_02244DA0 = 0x02244DA0;
+FUN_02244DB0 = 0x02244DB0;
+FUN_02244DBC = 0x02244DBC;
+FUN_02244DC4 = 0x02244DC4;
+FUN_02244EF8 = 0x02244EF8;
+FUN_02244F18 = 0x02244F18;
+FUN_02244F24 = 0x02244F24;
+FUN_02244F2C = 0x02244F2C;
+FUN_02245088 = 0x02245088;
+FUN_02245114 = 0x02245114;
+FUN_02245190 = 0x02245190;
+FUN_02245198 = 0x02245198;
+FUN_022451F0 = 0x022451F0;
+FUN_0224525C = 0x0224525C;
+FUN_022452A4 = 0x022452A4;
+FUN_02245324 = 0x02245324;
+FUN_02245340 = 0x02245340;
+FUN_02245358 = 0x02245358;
+FUN_0224566C = 0x0224566C;
+FUN_022456E8 = 0x022456E8;
+FUN_02245844 = 0x02245844;
+FUN_02245910 = 0x02245910;
+FUN_02245F1C = 0x02245F1C;
+FUN_02245F4C = 0x02245F4C;
+FUN_02245FA0 = 0x02245FA0;
+FUN_022461A4 = 0x022461A4;
+FUN_022461B8 = 0x022461B8;
+FUN_0224666C = 0x0224666C;
+FUN_022466A0 = 0x022466A0;
+FUN_022466AC = 0x022466AC;
+FUN_02246F1C = 0x02246F1C;
+FUN_02247294 = 0x02247294;
+FUN_022472AC = 0x022472AC;
+FUN_02247544 = 0x02247544;
+FUN_02247614 = 0x02247614;
+FUN_02247728 = 0x02247728;
+FUN_02247808 = 0x02247808;
+FUN_02247970 = 0x02247970;
+FUN_02247A34 = 0x02247A34;
+FUN_022483BC = 0x022483BC;
+FUN_022483E0 = 0x022483E0;
+FUN_022483EC = 0x022483EC;
+FUN_02248724 = 0x02248724;
+FUN_0224884C = 0x0224884C;
+FUN_022488CC = 0x022488CC;
+FUN_022488EC = 0x022488EC;
+FUN_022488F4 = 0x022488F4;
+FUN_022488FC = 0x022488FC;
+FUN_0224891C = 0x0224891C;
+FUN_02248B54 = 0x02248B54;
+FUN_02248B58 = 0x02248B58;
+FUN_02248B5C = 0x02248B5C;
+FUN_02248B60 = 0x02248B60;
+FUN_02248B6C = 0x02248B6C;
+FUN_02248CC0 = 0x02248CC0;
+FUN_02248CD0 = 0x02248CD0;
+FUN_02248DF8 = 0x02248DF8;
+FUN_02248F70 = 0x02248F70;
+FUN_02248FE0 = 0x02248FE0;
+FUN_02249038 = 0x02249038;
+FUN_022490A0 = 0x022490A0;
+FUN_022491FC = 0x022491FC;
+FUN_022494C8 = 0x022494C8;
+FUN_02249508 = 0x02249508;
+FUN_02249668 = 0x02249668;
+FUN_022497E8 = 0x022497E8;
+FUN_02249E6C = 0x02249E6C;
+FUN_02249E78 = 0x02249E78;
+FUN_02249E84 = 0x02249E84;
+FUN_02249E90 = 0x02249E90;
+FUN_0224A310 = 0x0224A310;
+FUN_0224A528 = 0x0224A528;
+FUN_0224A7C8 = 0x0224A7C8;
+FUN_0224ABAC = 0x0224ABAC;
+FUN_0224B124 = 0x0224B124;
+FUN_0224B2C4 = 0x0224B2C4;
+FUN_0224B568 = 0x0224B568;
+FUN_0224B818 = 0x0224B818;
+FUN_0224B86C = 0x0224B86C;
+FUN_0224B9E0 = 0x0224B9E0;
+FUN_0224BBEC = 0x0224BBEC;
+FUN_0224BD90 = 0x0224BD90;
+FUN_0224C038 = 0x0224C038;
+FUN_0224C27C = 0x0224C27C;
+FUN_0224C520 = 0x0224C520;
+FUN_0224C678 = 0x0224C678;
+FUN_0224C6E8 = 0x0224C6E8;
+FUN_0224C6F4 = 0x0224C6F4;
+FUN_0224C700 = 0x0224C700;
+FUN_0224C8C8 = 0x0224C8C8;
+FUN_0224CA2C = 0x0224CA2C;
+FUN_0224CA54 = 0x0224CA54;
+FUN_0224CA58 = 0x0224CA58;
+FUN_0224CA88 = 0x0224CA88;
+FUN_0224CA94 = 0x0224CA94;
+FUN_0224CAA0 = 0x0224CAA0;
+FUN_0224CAB4 = 0x0224CAB4;
+FUN_0224CB30 = 0x0224CB30;
+FUN_0224CBB0 = 0x0224CBB0;
+FUN_0224CC24 = 0x0224CC24;
+FUN_0224CECC = 0x0224CECC;
+FUN_0224D14C = 0x0224D14C;
+FUN_0224D2E0 = 0x0224D2E0;
+FUN_0224D3E8 = 0x0224D3E8;
+FUN_0224D70C = 0x0224D70C;
+FUN_0224D76C = 0x0224D76C;
+FUN_0224D79C = 0x0224D79C;
+FUN_0224DCB8 = 0x0224DCB8;
+FUN_0224DD94 = 0x0224DD94;
+FUN_0224DDB8 = 0x0224DDB8;
+FUN_0224E554 = 0x0224E554;
+FUN_0224E764 = 0x0224E764;
+FUN_0224E7C4 = 0x0224E7C4;
+FUN_0224F12C = 0x0224F12C;
+FUN_02252534 = 0x02252534;
+FUN_02252538 = 0x02252538;
+FUN_022567E0 = 0x022567E0;
+
+// ???
+SDK_MAIN_ARENA_LO = 0x0225FFA0;
+
+// EWRAM
+SDK_SECTION_ARENA_EX_START = 0x023E0000;
+
+// DTCM
+gUnk027FFC20 = 0x027FFC20;
diff --git a/arm9/Makefile b/arm9/Makefile
new file mode 100644
index 00000000..d97cfb95
--- /dev/null
+++ b/arm9/Makefile
@@ -0,0 +1,175 @@
+# Makefile to build Pokemon Diamond image
+
+.PHONY: clean tidy all default patch_mwasmarm
+
+# Try to include devkitarm if installed
+TOOLCHAIN := $(DEVKITARM)
+
+ifneq (,$(wildcard $(TOOLCHAIN)/base_tools))
+include $(TOOLCHAIN)/base_tools
+endif
+
+### Default target ###
+
+default: all
+
+# If you are using WSL, it is recommended you build with NOWINE=1.
+WSLENV ?= no
+ifeq ($(WSLENV),)
+NOWINE = 1
+else
+NOWINE = 0
+endif
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+WINE :=
+else
+EXE :=
+WINE := wine
+endif
+
+ifeq ($(NOWINE),1)
+WINE :=
+endif
+
+################ Target Executable and Sources ###############
+
+BUILD_DIR := build
+
+TARGET := arm9
+
+ROM := $(BUILD_DIR)/$(TARGET).bin
+ELF := $(BUILD_DIR)/$(TARGET).elf
+LD_SCRIPT := arm9.lcf
+
+# Directories containing source files
+SRC_DIRS := src
+ASM_DIRS := asm data files
+
+C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
+S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
+
+# Object files
+O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
+ $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
+
+##################### Compiler Options #######################
+
+MWCCVERSION := 2.0/base
+TOOLS_DIR = ../tools
+
+CROSS := arm-none-eabi-
+
+MWCCARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwccarm.exe
+# Argh... due to EABI version shenanigans, we can't use GNU LD to link together
+# MWCC built objects and GNU built ones. mwldarm, however, doesn't care, so we
+# have to use mwldarm for now.
+# TODO: Is there a hack workaround to let us go back to GNU LD? Ideally, the
+# only dependency should be MWCCARM.
+MWLDARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwldarm.exe
+MWASMARM := $(TOOLS_DIR)/mwccarm/$(MWCCVERSION)/mwasmarm.exe
+
+AS := $(WINE) $(MWASMARM)
+CC := $(WINE) $(MWCCARM)
+CPP := cpp -P
+LD := $(WINE) $(MWLDARM)
+AR := $(CROSS)ar
+OBJDUMP := $(CROSS)objdump
+OBJCOPY := $(CROSS)objcopy
+
+# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o
+ASFLAGS = -proc arm5te -i ..
+CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -ir ../include
+LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m _start
+
+####################### Other Tools #########################
+
+# DS TOOLS
+SHA1SUM = sha1sum
+JSONPROC = $(TOOLS_DIR)/jsonproc/jsonproc
+GFX = $(TOOLS_DIR)/nitrogfx/nitrogfx
+MWASMARM_PATCHER = $(TOOLS_DIR)/mwasmarm_patcher/mwasmarm_patcher$(EXE)
+
+TOOLDIRS = $(filter-out $(TOOLS_DIR)/mwccarm,$(wildcard $(TOOLS_DIR)/*))
+TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
+TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
+
+######################### Targets ###########################
+
+infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line))))
+
+# Build tools when building the rom
+# Disable dependency scanning for clean/tidy/tools
+ifeq (,$(filter-out all,$(MAKECMDGOALS)))
+$(call infoshell, $(MAKE) tools patch_mwasmarm)
+else
+NODEP := 1
+endif
+
+.PHONY: all clean mostlyclean tidy tools $(TOOLDIRS) patch_mwasmarm
+
+MAKEFLAGS += --no-print-directory
+
+all: $(ROM)
+ # @$(SHA1SUM) -c $(TARGET).sha1
+
+clean: mostlyclean
+ make -C $(TOOLS_DIR)/mwasmarm_patcher clean
+
+mostlyclean: tidy
+ find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' \) -exec $(RM) {} +
+
+tidy:
+ $(RM) -r $(BUILD_DIR)
+
+tools: $(TOOLDIRS)
+
+$(TOOLDIRS):
+ @$(MAKE) -C $@
+
+$(MWASMARM): patch_mwasmarm
+
+patch_mwasmarm:
+ $(MWASMARM_PATCHER) $(MWASMARM)
+
+ALL_DIRS := $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(ASM_DIRS))
+
+$(BUILD_DIR)/%.o: %.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(BUILD_DIR)/%.o: %.s
+ $(AS) $(ASFLAGS) $< -o $@
+
+$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) undefined_syms.txt
+ $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<
+
+$(ELF): $(O_FILES) $(BUILD_DIR)/$(LD_SCRIPT)
+ $(LD) $(LDFLAGS) $(BUILD_DIR)/$(LD_SCRIPT) -o $(ELF) $(O_FILES)
+
+$(ROM): $(ELF)
+ $(OBJCOPY) -O binary --gap-fill=0xFF $< $@
+
+# Make sure build directory exists before compiling anything
+DUMMY != mkdir -p $(ALL_DIRS)
+
+%.4bpp: %.png
+ $(GFX) $< $@
+
+%.gbapal: %.png
+ $(GFX) $< $@
+
+%.gbapal: %.pal
+ $(GFX) $< $@
+
+%.lz: %
+ $(GFX) $< $@
+
+%.png: ;
+%.pal: ;
+
+$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal
+
+### Debug Print ###
+
+print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
new file mode 100644
index 00000000..c5f29baf
--- /dev/null
+++ b/arm9/arm9.lcf
@@ -0,0 +1,84 @@
+MEMORY {
+ .itcm (RWX) : ORIGIN=0x01FF8000, LENGTH=0
+ .text (RX) : ORIGIN=0x02000000, LENGTH=0
+ .data (R) : ORIGIN=0x20EC710, LENGTH=0
+ .autoload (R) : ORIGIN=0x02107700, LENGTH=0
+ .bss (RWX) : ORIGIN=0x02106FA0, LENGTH=0
+ .ewram (RWX) : ORIGIN=0x023E0000, LENGTH=0
+ .dtcm (RW) : ORIGIN=0x027E0000, LENGTH=0
+ .overlay (RX) : ORIGIN=0, LENGTH=0
+}
+
+SECTIONS {
+#include "undefined_syms.txt"
+ .text : AT (0x0) {
+ secure.o (.text)
+ crt0.o (.text)
+ main.o (.text)
+ FUN_02000DF4.o (.text)
+ unk_02000E0C.o (.text)
+ string_util.o (.text)
+ unk_020023C0.o (.text)
+ filesystem.o (.text)
+ unk_02006864.o (.text)
+ script.o (.text)
+ unk_02038C78.o (.text)
+ scrcmd.o (.text)
+ unk_02046030.o (.text)
+ unk_0208AC14.o (.text)
+ unk_020AF030.o (.text)
+ /* SDK */
+ GX_arm9.o (.text)
+ OS_arm9.o (.text)
+ MI_arm9.o (.text)
+ SND_arm9.o (.text)
+ PXI_arm9.o (.text)
+ FS_arm9.o (.text)
+ DGT_arm9.o (.text)
+ CP_arm9.o (.text)
+ SPI_arm9.o (.text)
+ PM_arm9.o (.text)
+ RTC_arm9.o (.text)
+ CARD_arm9.o (.text)
+ WM_arm9.o (.text)
+ CTRDG_arm9.o (.text)
+ MATH_arm9.o (.text)
+ STD_arm9.o (.text)
+ } > .text
+
+ .data : AT (0xEC710) {
+ rom2.o (.data)
+ string_util.o (.data)
+ rom2_2.o (.data)
+ } > .data
+
+ SDK_AUTOLOAD_START = .;
+ SDK_STATIC_BSS_START = .;
+ SDK_STATIC_BSS_END = . + 0xd0540;
+
+ .itcm : AT (0x106FA0)
+ {
+ SDK_AUTOLOAD_ITCM_START = .;
+ arm9_itcm.o (.itcm)
+ SDK_AUTOLOAD_ITCM_END = .;
+ . = 0x01FF8720;
+ SDK_SECTION_ARENA_ITCM_START = .;
+ } > .itcm
+
+ .autoload : AT (0x107700) {
+ SDK_AUTOLOAD_LIST.o (.data)
+ unk_10b724.o (.text)
+ } > .autoload
+
+ .overlay : AT (0x107800) {
+ arm9overlay.o (.text)
+ } > .overlay
+
+ .dtcm : AT (0x1076A0) {
+ SDK_AUTOLOAD_DTCM_START = .;
+ OS_arm9.o (.dtcm)
+ SDK_AUTOLOAD_DTCM_END = .;
+ SDK_SECTION_ARENA_DTCM_START = 0x027E0080;
+ } > .dtcm
+
+}
diff --git a/arm9/asm/CARD_arm9.s b/arm9/asm/CARD_arm9.s
new file mode 100644
index 00000000..664e85f5
--- /dev/null
+++ b/arm9/asm/CARD_arm9.s
@@ -0,0 +1,1782 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CARD_UnlockBackup
+CARD_UnlockBackup: ; 0x020D66A0
+ ldr ip, _020D66AC ; =CARDi_UnlockResource
+ mov r1, #0x2
+ bx r12
+ .balign 4
+_020D66AC: .word CARDi_UnlockResource
+
+ arm_func_start CARD_LockBackup
+CARD_LockBackup: ; 0x020D66B0
+ ldr ip, _020D66BC ; =CARDi_LockResource
+ mov r1, #0x2
+ bx r12
+ .balign 4
+_020D66BC: .word CARDi_LockResource
+
+ arm_func_start CARD_UnlockRom
+CARD_UnlockRom: ; 0x020D66C0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_UnlockCard
+ mov r0, r4
+ mov r1, #0x1
+ bl CARDi_UnlockResource
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CARD_LockRom
+CARD_LockRom: ; 0x020D66E0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, #0x1
+ bl CARDi_LockResource
+ mov r0, r4
+ bl OS_TryLockCard
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CARD_GetResultCode
+CARD_GetResultCode: ; 0x020D6700
+ ldr r0, _020D6710 ; =0x021D55C0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D6710: .word 0x021D55C0
+
+ arm_func_start FUN_020D6714
+FUN_020D6714: ; 0x020D6714
+ ldr r0, _020D672C ; =0x021D55C0
+ ldr r0, [r0, #0x114]
+ ands r0, r0, #0x4
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+ .balign 4
+_020D672C: .word 0x021D55C0
+
+ arm_func_start CARDi_WaitAsync
+CARDi_WaitAsync: ; 0x020D6730
+ stmdb sp!, {r4-r6,lr}
+ ldr r6, _020D6788 ; =0x021D55C0
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x114]
+ mov r5, r0
+ ands r0, r1, #0x4
+ beq _020D6764
+ add r4, r6, #0x10c
+_020D6750:
+ mov r0, r4
+ bl OS_SleepThread
+ ldr r0, [r6, #0x114]
+ ands r0, r0, #0x4
+ bne _020D6750
+_020D6764:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020D676C: ; 0x020D676C
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D6788: .word 0x021D55C0
+
+ arm_func_start CARD_Enable
+CARD_Enable: ; 0x020D678C
+ ldr r1, _020D6798 ; =0x021D555C
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020D6798: .word 0x021D555C
+
+ arm_func_start CARD_CheckEnabled
+CARD_CheckEnabled: ; 0x020D679C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CARD_IsEnabled
+_020D67A8: ; 0x020D67A8
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CARD_IsEnabled
+CARD_IsEnabled:
+ ldr r0, _020D67D4 ; =0x021D555C
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D67D4: .word 0x021D555C
+
+ arm_func_start CARDi_InitCommon
+CARDi_InitCommon: ; 0x020D67D8
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r4, _020D68B8 ; =0x021D55C0
+ ldr r1, _020D68BC ; =0x021D5560
+ mvn r2, #0x2
+ mov r0, #0x0
+ str r2, [r4, #0x8]
+ mov r2, #0x60
+ str r0, [r4, #0xc]
+ str r0, [r4, #0x18]
+ str r1, [r4, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020D68BC ; =0x021D5560
+ mov r1, #0x60
+ bl DC_FlushRange
+ ldr r0, _020D68C0 ; =0x027FFC40
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x2
+ beq _020D6834
+ ldr r0, _020D68C4 ; =0x027FFE00
+ ldr r1, _020D68C8 ; =0x027FFA80
+ mov r2, #0x160
+ bl MI_CpuCopy8
+_020D6834:
+ mov r2, #0x0
+ str r2, [r4, #0x14]
+ ldr r0, [r4, #0x14]
+ mov r1, #0x4
+ str r0, [r4, #0x10]
+ str r2, [r4, #0x110]
+ ldr r3, [r4, #0x110]
+ mov r0, #0x400
+ str r3, [r4, #0x10c]
+ str r1, [r4, #0x108]
+ str r0, [sp, #0x0]
+ ldr r12, [r4, #0x108]
+ ldr r1, _020D68CC ; =CARDi_TaskThread
+ ldr r3, _020D68D0 ; =0x021D5BE0
+ add r0, r4, #0x44
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ add r0, r4, #0x44
+ bl OS_WakeupThreadDirect
+ ldr r1, _020D68D4 ; =CARDi_OnFifoRecv
+ mov r0, #0xb
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _020D68C0 ; =0x027FFC40
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x2
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, #0x1
+ bl CARD_Enable
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D68B8: .word 0x021D55C0
+_020D68BC: .word 0x021D5560
+_020D68C0: .word 0x027FFC40
+_020D68C4: .word 0x027FFE00
+_020D68C8: .word 0x027FFA80
+_020D68CC: .word CARDi_TaskThread
+_020D68D0: .word 0x021D5BE0
+_020D68D4: .word CARDi_OnFifoRecv
+
+ arm_func_start CARDi_UnlockResource
+CARDi_UnlockResource: ; 0x020D68D8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020D6978 ; =0x021D55C0
+ mov r7, r0
+ mov r6, r1
+ bl OS_DisableInterrupts
+ mov r1, r5
+ mov r4, r0
+ ldr r0, [r1, #0x8]
+ cmp r0, r7
+ bne _020D6910
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ bne _020D6918
+_020D6910:
+ bl OS_Terminate
+ b _020D6958
+_020D6918:
+ ldr r0, [r5, #0x18]
+ cmp r0, r6
+ beq _020D6928
+ bl OS_Terminate
+_020D6928:
+ ldr r0, [r5, #0xc]
+ sub r0, r0, #0x1
+ str r0, [r5, #0xc]
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ bne _020D6958
+ mvn r0, #0x2
+ str r0, [r5, #0x8]
+ mov r1, #0x0
+ add r0, r5, #0x10
+ str r1, [r5, #0x18]
+ bl OS_WakeupThread
+_020D6958:
+ ldr r1, [r5, #0x0]
+ mov r2, #0x0
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D6978: .word 0x021D55C0
+
+ arm_func_start CARDi_LockResource
+CARDi_LockResource: ; 0x020D697C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020D6A14 ; =0x021D55C0
+ mov r7, r0
+ mov r6, r1
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x8]
+ mov r4, r0
+ cmp r1, r7
+ bne _020D69B8
+ ldr r0, [r5, #0x18]
+ cmp r0, r6
+ beq _020D69E8
+ bl OS_Terminate
+ b _020D69E8
+_020D69B8:
+ ldr r0, [r5, #0x8]
+ mvn r8, #0x2
+ cmp r0, r8
+ beq _020D69E0
+ add r9, r5, #0x10
+_020D69CC:
+ mov r0, r9
+ bl OS_SleepThread
+ ldr r0, [r5, #0x8]
+ cmp r0, r8
+ bne _020D69CC
+_020D69E0:
+ str r7, [r5, #0x8]
+ str r6, [r5, #0x18]
+_020D69E8:
+ ldr r1, [r5, #0xc]
+ mov r0, r4
+ add r1, r1, #0x1
+ str r1, [r5, #0xc]
+ ldr r1, [r5, #0x0]
+ mov r2, #0x0
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020D6A14: .word 0x021D55C0
+
+ arm_func_start CARDi_SetTask
+CARDi_SetTask: ; 0x020D6A18
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020D6A5C ; =0x021D55C0
+ mov r5, r0
+ ldr r1, [r4, #0x108]
+ add r0, r4, #0x44
+ bl OS_SetThreadPriority
+ add r0, r4, #0x44
+ str r0, [r4, #0x104]
+ str r5, [r4, #0x40]
+ ldr r1, [r4, #0x114]
+ orr r1, r1, #0x8
+ str r1, [r4, #0x114]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D6A5C: .word 0x021D55C0
+
+ arm_func_start FUN_020D6A60
+FUN_020D6A60: ; 0x020D6A60
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D6D60 ; =0x021D55C0
+ mov r5, r0
+ ldr r4, [r1, #0x0]
+ mov r1, #0x0
+ add r0, r4, #0x18
+ mov r2, #0x48
+ bl MI_CpuFill8
+_020D6A84: ; 0x020D6A84
+ cmp r5, #0x0
+ str r5, [r4, #0x4]
+ mov r0, #0x3f
+ addeq sp, sp, #0x4
+ str r0, [r4, #0x4c]
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r0, r5, asr #0x8
+ and r0, r0, #0xff
+ mov r2, #0x1
+ mov r3, r2, lsl r0
+ and r1, r5, #0xff
+ str r3, [r4, #0x18]
+ mov r0, #0xff
+ strb r0, [r4, #0x48]
+ cmp r1, #0x1
+ bne _020D6B80
+ cmp r3, #0x200
+ beq _020D6AE4
+ cmp r3, #0x2000
+ beq _020D6B04
+ cmp r3, #0x10000
+ beq _020D6B28
+ b _020D6D38
+_020D6AE4:
+ mov r0, #0x10
+ str r0, [r4, #0x20]
+ str r2, [r4, #0x24]
+ mov r0, #0x5
+ str r0, [r4, #0x28]
+ mov r0, #0xf0
+ strb r0, [r4, #0x48]
+ b _020D6B48
+_020D6B04:
+ mov r0, #0x20
+ str r0, [r4, #0x20]
+ mov r0, #0x2
+ str r0, [r4, #0x24]
+ mov r0, #0x5
+ str r0, [r4, #0x28]
+ mov r0, #0x0
+ strb r0, [r4, #0x48]
+ b _020D6B48
+_020D6B28:
+ mov r0, #0x80
+ str r0, [r4, #0x20]
+ mov r0, #0x2
+ str r0, [r4, #0x24]
+ mov r0, #0xa
+ str r0, [r4, #0x28]
+ mov r0, #0x0
+ strb r0, [r4, #0x48]
+_020D6B48:
+ ldr r0, [r4, #0x20]
+ add sp, sp, #0x4
+ str r0, [r4, #0x1c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x40
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x100
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x200
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D6B80:
+ cmp r1, #0x2
+ bne _020D6CD8
+ cmp r3, #0x100000
+ bhi _020D6BB8
+ cmp r3, #0x100000
+ bhs _020D6BD8
+ cmp r3, #0x40000
+ bhi _020D6BAC
+ cmp r3, #0x40000
+ beq _020D6BD8
+ b _020D6D38
+_020D6BAC:
+ cmp r3, #0x80000
+ beq _020D6BD8
+ b _020D6D38
+_020D6BB8:
+ cmp r3, #0x200000
+ bhi _020D6BCC
+ cmp r3, #0x200000
+ beq _020D6C10
+ b _020D6D38
+_020D6BCC:
+ cmp r3, #0x800000
+ beq _020D6C48
+ b _020D6D38
+_020D6BD8:
+ mov r0, #0x19
+ str r0, [r4, #0x2c]
+ mov r1, #0x12c
+ str r1, [r4, #0x30]
+ ldr r0, _020D6D64 ; =0x00001388
+ str r1, [r4, #0x44]
+ str r0, [r4, #0x3c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x80
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x400
+ str r0, [r4, #0x4c]
+ b _020D6C7C
+_020D6C10:
+ mov r1, #0x3e8
+ ldr r0, _020D6D68 ; =0x00000BB8
+ str r1, [r4, #0x3c]
+ ldr r1, _020D6D6C ; =0x00004268
+ str r0, [r4, #0x40]
+ ldr r0, _020D6D70 ; =0x00009C40
+ str r1, [r4, #0x34]
+ str r0, [r4, #0x38]
+ mov r0, #0x0
+ strb r0, [r4, #0x48]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x1000
+ str r0, [r4, #0x4c]
+ b _020D6C7C
+_020D6C48:
+ mov r1, #0x3e8
+ ldr r0, _020D6D68 ; =0x00000BB8
+ str r1, [r4, #0x3c]
+ ldr r1, _020D6D74 ; =0x000109A0
+ str r0, [r4, #0x40]
+ ldr r0, _020D6D78 ; =0x00027100
+ str r1, [r4, #0x34]
+ str r0, [r4, #0x38]
+ mov r0, #0x0
+ strb r0, [r4, #0x48]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x1000
+ str r0, [r4, #0x4c]
+_020D6C7C:
+ mov r0, #0x10000
+ str r0, [r4, #0x1c]
+ mov r0, #0x100
+ str r0, [r4, #0x20]
+ mov r0, #0x3
+ str r0, [r4, #0x24]
+ mov r0, #0x5
+ str r0, [r4, #0x28]
+ ldr r0, [r4, #0x4c]
+ add sp, sp, #0x4
+ orr r0, r0, #0x40
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x100
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x200
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x800
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D6CD8:
+ cmp r1, #0x3
+ bne _020D6D38
+ cmp r3, #0x2000
+ beq _020D6CF0
+ cmp r3, #0x8000
+ bne _020D6D38
+_020D6CF0:
+ str r3, [r4, #0x20]
+ str r3, [r4, #0x1c]
+ mov r0, #0x2
+ str r0, [r4, #0x24]
+ mov r0, #0x0
+ strb r0, [r4, #0x48]
+ ldr r0, [r4, #0x4c]
+ add sp, sp, #0x4
+ orr r0, r0, #0x40
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x100
+ str r0, [r4, #0x4c]
+ ldr r0, [r4, #0x4c]
+ orr r0, r0, #0x200
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D6D38:
+ mov r1, #0x0
+ str r1, [r4, #0x4]
+ str r1, [r4, #0x18]
+ ldr r0, _020D6D60 ; =0x021D55C0
+ mov r1, #0x3
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D6D60: .word 0x021D55C0
+_020D6D64: .word 0x00001388
+_020D6D68: .word 0x00000BB8
+_020D6D6C: .word 0x00004268
+_020D6D70: .word 0x00009C40
+_020D6D74: .word 0x000109A0
+_020D6D78: .word 0x00027100
+
+ arm_func_start CARD_CancelBackupAsync
+CARD_CancelBackupAsync: ; 0x020D6D7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r1, _020D6DA8 ; =0x021D55C0
+ ldr r2, [r1, #0x114]
+ orr r2, r2, #0x40
+ str r2, [r1, #0x114]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D6DA8: .word 0x021D55C0
+
+ arm_func_start CARD_TryWaitBackupAsync
+CARD_TryWaitBackupAsync: ; 0x020D6DAC
+ ldr ip, _020D6DB4 ; =FUN_020D6714
+ bx r12
+ .balign 4
+_020D6DB4: .word FUN_020D6714
+
+ arm_func_start CARD_WaitBackupAsync
+CARD_WaitBackupAsync: ; 0x020D6DB8
+ ldr ip, _020D6DC0 ; =CARDi_WaitAsync
+ bx r12
+ .balign 4
+_020D6DC0: .word CARDi_WaitAsync
+
+ arm_func_start CARD_IdentifyBackup
+CARD_IdentifyBackup: ; 0x020D6DC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, _020D6F00 ; =0x02000C3C
+ ldr r7, _020D6F04 ; =0x021D55C0
+ bl OSi_ReferSymbol
+_020D6DDC: ; 0x020D6DDC
+ cmp r5, #0x0
+ bne _020D6DE8
+ bl OS_Terminate
+_020D6DE8:
+ bl CARD_CheckEnabled
+ bl OS_DisableInterrupts
+ ldr r1, [r7, #0x114]
+ mov r4, r0
+ ands r0, r1, #0x4
+ beq _020D6E18
+ add r6, r7, #0x10c
+_020D6E04:
+ mov r0, r6
+ bl OS_SleepThread
+ ldr r0, [r7, #0x114]
+ ands r0, r0, #0x4
+ bne _020D6E04
+_020D6E18:
+ ldr r0, [r7, #0x114]
+ mov r1, #0x0
+ orr r0, r0, #0x4
+ str r0, [r7, #0x114]
+ str r1, [r7, #0x38]
+ mov r0, r4
+ str r1, [r7, #0x3c]
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ bl FUN_020D6A60
+ ldr r0, _020D6F08 ; =0x021D3498
+ ldr r1, _020D6F04 ; =0x021D55C0
+ ldr r2, [r0, #0x4]
+ mov r0, r7
+ str r2, [r1, #0x104]
+ mov r1, #0x2
+ mov r2, #0x1
+ bl CARDi_Request
+_020D6E60: ; 0x020D6E60
+ ldr r0, [r7, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0xc]
+ ldr r0, [r7, #0x0]
+ add r1, r7, #0x120
+ str r1, [r0, #0x10]
+ ldr r1, [r7, #0x0]
+ mov r2, #0x1
+ mov r0, r7
+ str r2, [r1, #0x14]
+ mov r1, #0x6
+ bl CARDi_Request
+ ldr r6, [r7, #0x38]
+ ldr r5, [r7, #0x3c]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r1, [r7, #0x114]
+ add r0, r7, #0x10c
+ bic r1, r1, #0x4c
+ str r1, [r7, #0x114]
+ bl OS_WakeupThread
+ ldr r0, [r7, #0x114]
+ ands r0, r0, #0x10
+ beq _020D6EC8
+ add r0, r7, #0x44
+ bl OS_WakeupThreadDirect
+_020D6EC8:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D6ED0: ; 0x020D6ED0
+ cmp r6, #0x0
+ beq _020D6EE0
+ mov r0, r5
+ blx r6
+_020D6EE0:
+ ldr r0, [r7, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D6F00: .word 0x02000C3C
+_020D6F04: .word 0x021D55C0
+_020D6F08: .word 0x021D3498
+
+ arm_func_start CARD_GetBackupSectorSize
+CARD_GetBackupSectorSize: ; 0x020D6F0C
+ ldr r0, _020D6F1C ; =0x021D55C0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x1c]
+ bx lr
+ .balign 4
+_020D6F1C: .word 0x021D55C0
+
+ arm_func_start CARDi_RequestStreamCommand
+CARDi_RequestStreamCommand: ; 0x020D6F20
+ stmdb sp!, {r4-r10,lr}
+ mov r10, r0
+ ldr r6, _020D7004 ; =0x021D55C0
+ ldr r0, _020D7008 ; =0x02000C3C
+ mov r9, r1
+ mov r8, r2
+ mov r7, r3
+ bl OSi_ReferSymbol
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x114]
+ mov r5, r0
+ ands r0, r1, #0x4
+ beq _020D6F6C
+ add r4, r6, #0x10c
+_020D6F58:
+ mov r0, r4
+ bl OS_SleepThread
+ ldr r0, [r6, #0x114]
+ ands r0, r0, #0x4
+ bne _020D6F58
+_020D6F6C:
+ ldr r0, [r6, #0x114]
+ ldr r1, [sp, #0x20]
+ orr r0, r0, #0x4
+ str r0, [r6, #0x114]
+ str r7, [r6, #0x38]
+ mov r0, r5
+ str r1, [r6, #0x3c]
+ bl OS_RestoreInterrupts
+ str r10, [r6, #0x1c]
+ str r9, [r6, #0x20]
+ ldr r0, [sp, #0x24]
+ ldr r1, [sp, #0x28]
+ str r8, [r6, #0x24]
+ ldr r2, [sp, #0x2c]
+ str r1, [r6, #0x2c]
+ ldr r1, [sp, #0x30]
+ str r2, [r6, #0x30]
+ str r1, [r6, #0x34]
+ cmp r0, #0x0
+ beq _020D6FD0
+ ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore
+ bl CARDi_SetTask
+ mov r0, #0x1
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D6FD0:
+ ldr r0, _020D7010 ; =0x021D3498
+ ldr r1, _020D7004 ; =0x021D55C0
+ ldr r2, [r0, #0x4]
+ mov r0, r6
+ str r2, [r1, #0x104]
+ bl CARDi_RequestStreamCommandCore
+_020D6FE8: ; 0x020D6FE8
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020D7004: .word 0x021D55C0
+_020D7008: .word 0x02000C3C
+_020D700C: .word CARDi_RequestStreamCommandCore
+_020D7010: .word 0x021D3498
+
+ arm_func_start CARDi_RequestStreamCommandCore
+CARDi_RequestStreamCommandCore:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r8, [r9, #0x2c]
+ ldr r0, _020D720C ; =0x02000C3C
+ ldr r7, [r9, #0x34]
+ ldr r10, [r9, #0x30]
+ mov r6, #0x100
+ bl OSi_ReferSymbol
+ cmp r8, #0xb
+ bne _020D7048
+ bl CARD_GetBackupSectorSize
+ mov r6, r0
+_020D7048:
+ mov r0, #0x1
+ add r4, r9, #0x120
+ mov r11, #0x9
+ str r0, [sp, #0x0]
+_020D7058:
+ ldr r5, [r9, #0x24]
+ ldr r0, [r9, #0x0]
+ cmp r6, r5
+ movcc r5, r6
+ str r5, [r0, #0x14]
+ ldr r0, [r9, #0x114]
+ ands r0, r0, #0x40
+ beq _020D7094
+ ldr r0, [r9, #0x114]
+ mov r1, #0x7
+ bic r0, r0, #0x40
+ str r0, [r9, #0x114]
+ ldr r0, [r9, #0x0]
+ str r1, [r0, #0x0]
+ b _020D71A8
+_020D7094:
+ cmp r7, #0x3
+ addls pc, pc, r7, lsl #0x2
+ b _020D7124
+_020D70A0:
+ b _020D70B0
+_020D70A4:
+ b _020D70D4
+_020D70A8:
+ b _020D70D4
+_020D70AC:
+ b _020D710C
+_020D70B0:
+ mov r1, r5
+ add r0, r9, #0x120
+ bl DC_InvalidateRange
+ ldr r1, [r9, #0x1c]
+ ldr r0, [r9, #0x0]
+ str r1, [r0, #0xc]
+ ldr r0, [r9, #0x0]
+ str r4, [r0, #0x10]
+ b _020D7124
+_020D70D4:
+ ldr r0, [r9, #0x1c]
+ mov r1, r4
+ mov r2, r5
+ bl MI_CpuCopy8
+ mov r1, r5
+ add r0, r9, #0x120
+ bl DC_FlushRange
+ bl DC_WaitWriteBufferEmpty
+_020D70F4: ; 0x020D70F4
+ ldr r0, [r9, #0x0]
+ str r4, [r0, #0xc]
+ ldr r1, [r9, #0x20]
+ ldr r0, [r9, #0x0]
+ str r1, [r0, #0x10]
+ b _020D7124
+_020D710C:
+ ldr r1, [r9, #0x1c]
+ ldr r0, [r9, #0x0]
+ str r1, [r0, #0xc]
+ ldr r1, [r9, #0x20]
+ ldr r0, [r9, #0x0]
+ str r1, [r0, #0x10]
+_020D7124:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r10
+ bl CARDi_Request
+_020D7134: ; 0x020D7134
+ cmp r0, #0x0
+ beq _020D71A8
+ cmp r7, #0x2
+ bne _020D7160
+ ldr r2, [sp, #0x0]
+ mov r0, r9
+ mov r1, r11
+ bl CARDi_Request
+_020D7154: ; 0x020D7154
+ cmp r0, #0x0
+ bne _020D7178
+ b _020D71A8
+_020D7160:
+ cmp r7, #0x0
+ bne _020D7178
+ ldr r1, [r9, #0x20]
+ mov r2, r5
+ add r0, r9, #0x120
+ bl MI_CpuCopy8
+_020D7178:
+ ldr r0, [r9, #0x1c]
+ add r0, r0, r5
+ str r0, [r9, #0x1c]
+ ldr r0, [r9, #0x20]
+ add r0, r0, r5
+ str r0, [r9, #0x20]
+ ldr r0, [r9, #0x24]
+ sub r0, r0, r5
+ str r0, [r9, #0x24]
+ ldr r0, [r9, #0x24]
+ cmp r0, #0x0
+ bne _020D7058
+_020D71A8:
+ ldr r6, [r9, #0x38]
+ ldr r5, [r9, #0x3c]
+ bl OS_DisableInterrupts
+ ldr r1, [r9, #0x114]
+ mov r4, r0
+ bic r0, r1, #0x4c
+ str r0, [r9, #0x114]
+ add r0, r9, #0x10c
+ bl OS_WakeupThread
+ ldr r0, [r9, #0x114]
+ ands r0, r0, #0x10
+ beq _020D71E0
+ add r0, r9, #0x44
+ bl OS_WakeupThreadDirect
+_020D71E0:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D71E8: ; 0x020D71E8
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, r5
+ blx r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D720C: .word 0x02000C3C
+
+ arm_func_start CARDi_GetRomAccessor
+CARDi_GetRomAccessor: ; 0x020D7210
+ ldr r0, _020D7218 ; =CARDi_ReadCard
+ bx lr
+ .balign 4
+_020D7218: .word CARDi_ReadCard
+
+ arm_func_start CARD_WaitRomAsync
+CARD_WaitRomAsync: ; 0x020D721C
+ ldr ip, _020D7224 ; =CARDi_WaitAsync
+ bx r12
+ .balign 4
+_020D7224: .word CARDi_WaitAsync
+
+ arm_func_start CARD_Init
+CARD_Init: ; 0x020D7228
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020D72A0 ; =0x021D55C0
+ ldr r0, [r12, #0x114]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r0, #0x1
+ str r0, [r12, #0x114]
+ mov r3, #0x0
+ str r3, [r12, #0x24]
+ ldr r0, [r12, #0x24]
+ mvn r1, #0x0
+ str r0, [r12, #0x20]
+ ldr r2, [r12, #0x20]
+ ldr r0, _020D72A4 ; =0x021D5BE0
+ str r2, [r12, #0x1c]
+ str r1, [r12, #0x28]
+ str r3, [r12, #0x38]
+ str r3, [r12, #0x3c]
+ str r3, [r0, #0x0]
+ bl CARDi_InitCommon
+ bl CARDi_GetRomAccessor
+ ldr r1, _020D72A8 ; =0x021D5C00
+ str r0, [r1, #0x0]
+ bl CARD_InitPulledOutCallback
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D72A0: .word 0x021D55C0
+_020D72A4: .word 0x021D5BE0
+_020D72A8: .word 0x021D5C00
+
+ arm_func_start CARDi_ReadRom
+CARDi_ReadRom: ; 0x020D72AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r6, _020D73C0 ; =0x021D55C0
+ mov r10, r0
+ mov r9, r1
+ mov r8, r2
+ mov r7, r3
+ ldr fp, _020D73C4 ; =0x021D5C00
+ bl CARD_CheckEnabled
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x114]
+ mov r5, r0
+ ands r0, r1, #0x4
+ beq _020D72FC
+ add r4, r6, #0x10c
+_020D72E8:
+ mov r0, r4
+ bl OS_SleepThread
+ ldr r0, [r6, #0x114]
+ ands r0, r0, #0x4
+ bne _020D72E8
+_020D72FC:
+ ldr r1, [r6, #0x114]
+ ldr r0, [sp, #0x28]
+ orr r1, r1, #0x4
+ str r1, [r6, #0x114]
+ ldr r1, [sp, #0x2c]
+ str r0, [r6, #0x38]
+ mov r0, r5
+ str r1, [r6, #0x3c]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D73C8 ; =0x021D5BE0
+ str r10, [r6, #0x28]
+ ldr r0, [r0, #0x0]
+ cmp r10, #0x3
+ add r0, r9, r0
+ str r0, [r6, #0x1c]
+ str r8, [r6, #0x20]
+ str r7, [r6, #0x24]
+ bhi _020D734C
+ mov r0, r10
+ bl MI_StopDma
+_020D734C:
+ mov r0, r11
+ bl CARDi_TryReadCardDma
+_020D7354: ; 0x020D7354
+ cmp r0, #0x0
+ beq _020D7380
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ bl CARD_WaitRomAsync
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D7380:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ beq _020D73A0
+ ldr r0, _020D73CC ; =CARDi_ReadRomSyncCore
+ bl CARDi_SetTask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D73A0:
+ ldr r1, _020D73D0 ; =0x021D3498
+ mov r0, r6
+ ldr r1, [r1, #0x4]
+ str r1, [r6, #0x104]
+ bl CARDi_ReadRomSyncCore
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D73C0: .word 0x021D55C0
+_020D73C4: .word 0x021D5C00
+_020D73C8: .word 0x021D5BE0
+_020D73CC: .word CARDi_ReadRomSyncCore
+_020D73D0: .word 0x021D3498
+
+ arm_func_start CARDi_ReadRomSyncCore
+CARDi_ReadRomSyncCore: ; 0x020D73D4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020D7478 ; =0x021D5C00
+ mov r0, r4
+ bl CARDi_ReadFromCache
+_020D73E8: ; 0x020D73E8
+ cmp r0, #0x0
+ beq _020D73FC
+ ldr r1, [r4, #0x0]
+ mov r0, r4
+ blx r1
+_020D73FC:
+ ldr r7, _020D747C ; =0x021D55C0
+ bl CARDi_ReadRomIDCore
+ bl CARDi_CheckPulledOutCore
+_020D7408: ; 0x020D7408
+ ldr r0, [r7, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ ldr r6, [r7, #0x38]
+ ldr r5, [r7, #0x3c]
+ bl OS_DisableInterrupts
+ ldr r1, [r7, #0x114]
+ mov r4, r0
+ bic r0, r1, #0x4c
+ str r0, [r7, #0x114]
+ add r0, r7, #0x10c
+ bl OS_WakeupThread
+ ldr r0, [r7, #0x114]
+ ands r0, r0, #0x10
+ beq _020D744C
+ add r0, r7, #0x44
+ bl OS_WakeupThreadDirect
+_020D744C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D7454: ; 0x020D7454
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r5
+ blx r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D7478: .word 0x021D5C00
+_020D747C: .word 0x021D55C0
+
+ arm_func_start CARDi_ReadRomIDCore
+CARDi_ReadRomIDCore: ; 0x020D7480
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0xb8000000
+ mov r1, #0x0
+ bl CARDi_SetRomOp
+ ldr r1, _020D74DC ; =0x02106A50
+ mov r0, #0x2000
+ ldr r1, [r1, #0x0]
+ rsb r0, r0, #0x0
+ ldr r2, [r1, #0x60]
+ ldr r1, _020D74E0 ; =0x040001A4
+ bic r2, r2, #0x7000000
+ orr r2, r2, #0xa7000000
+ and r0, r2, r0
+ str r0, [r1, #0x0]
+_020D74BC:
+ ldr r0, [r1, #0x0]
+ ands r0, r0, #0x800000
+ beq _020D74BC
+ ldr r0, _020D74E4 ; =0x04100010
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D74DC: .word 0x02106A50
+_020D74E0: .word 0x040001A4
+_020D74E4: .word 0x04100010
+
+ arm_func_start CARDi_ReadCard
+CARDi_ReadCard: ; 0x020D74E8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ ldr sb, _020D75DC ; =0x021D55C0
+ add r7, r10, #0x20
+ ldr r5, _020D75E0 ; =0x04100010
+ ldr r6, _020D75E4 ; =0x040001A4
+ mov r11, #0x0
+ mov r0, #0x200
+ rsb r4, r0, #0x0
+_020D7510:
+ ldr r0, [r9, #0x1c]
+ and r1, r0, r4
+ cmp r1, r0
+ bne _020D7538
+ ldr r8, [r9, #0x20]
+ ands r0, r8, #0x3
+ bne _020D7538
+ ldr r0, [r9, #0x24]
+ cmp r0, #0x200
+ bhs _020D7540
+_020D7538:
+ mov r8, r7
+ str r1, [r10, #0x8]
+_020D7540:
+ mov r0, r1, lsr #0x8
+ orr r0, r0, #0xb7000000
+ mov r1, r1, lsl #0x18
+ bl CARDi_SetRomOp
+ ldr r1, [r10, #0x4]
+ mov r0, r11
+ str r1, [r6, #0x0]
+_020D755C:
+ ldr r2, [r6, #0x0]
+ ands r1, r2, #0x800000
+ beq _020D7578
+ ldr r1, [r5, #0x0]
+ cmp r0, #0x200
+ strcc r1, [r8, r0, lsl #0x2]
+ addcc r0, r0, #0x1
+_020D7578:
+ ands r1, r2, #0x80000000
+ bne _020D755C
+ ldr r0, [r9, #0x20]
+ cmp r8, r0
+ bne _020D75C0
+ ldr r2, [r9, #0x1c]
+ ldr r1, [r9, #0x20]
+ ldr r0, [r9, #0x24]
+ add r2, r2, #0x200
+ add r1, r1, #0x200
+ subs r0, r0, #0x200
+ str r2, [r9, #0x1c]
+ str r1, [r9, #0x20]
+ str r0, [r9, #0x24]
+ bne _020D7510
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D75C0:
+ mov r0, r10
+ bl CARDi_ReadFromCache
+_020D75C8: ; 0x020D75C8
+ cmp r0, #0x0
+ bne _020D7510
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D75DC: .word 0x021D55C0
+_020D75E0: .word 0x04100010
+_020D75E4: .word 0x040001A4
+
+ arm_func_start CARDi_TryReadCardDma
+CARDi_TryReadCardDma:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr fp, _020D7748 ; =0x021D55C0
+ mov r7, #0x0
+ ldr r9, [r11, #0x20]
+ mov r10, r0
+ mov r6, r7
+ mov r5, r7
+ mov r1, r7
+ ands r4, r9, #0x1f
+ ldr r8, [r11, #0x24]
+ bne _020D7624
+ ldr r0, [r11, #0x28]
+ cmp r0, #0x3
+ movls r1, #0x1
+_020D7624:
+ cmp r1, #0x0
+ beq _020D7678
+ bl OS_GetDTCMAddress
+ ldr r1, _020D774C ; =0x01FF8000
+ add r2, r9, r8
+ cmp r2, r1
+ mov r3, #0x1
+ mov r1, #0x0
+ bls _020D7650
+ cmp r9, #0x2000000
+ movcc r1, r3
+_020D7650:
+ cmp r1, #0x0
+ bne _020D7670
+ cmp r0, r2
+ bhs _020D766C
+ add r0, r0, #0x4000
+ cmp r0, r9
+ bhi _020D7670
+_020D766C:
+ mov r3, #0x0
+_020D7670:
+ cmp r3, #0x0
+ moveq r5, #0x1
+_020D7678:
+ cmp r5, #0x0
+ beq _020D7694
+ ldr r1, [r11, #0x1c]
+ ldr r0, _020D7750 ; =0x000001FF
+ orr r1, r1, r8
+ ands r0, r1, r0
+ moveq r6, #0x1
+_020D7694:
+ cmp r6, #0x0
+ beq _020D76A4
+ cmp r8, #0x0
+ movne r7, #0x1
+_020D76A4:
+ ldr r0, _020D7754 ; =0x02106A50
+ cmp r7, #0x0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x60]
+ bic r0, r0, #0x7000000
+ orr r0, r0, #0xa1000000
+ str r0, [r10, #0x4]
+ beq _020D7738
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, r9
+ mov r1, r8
+ bl IC_InvalidateRange
+_020D76D8: ; 0x020D76D8
+ cmp r4, #0x0
+ beq _020D7700
+ sub r9, r9, r4
+ mov r0, r9
+ mov r1, #0x20
+ bl DC_StoreRange
+ add r0, r9, r8
+ mov r1, #0x20
+ bl DC_StoreRange
+ add r8, r8, #0x20
+_020D7700:
+ mov r0, r9
+ mov r1, r8
+ bl DC_InvalidateRange
+ bl DC_WaitWriteBufferEmpty
+ ldr r1, _020D7758 ; =CARDi_OnReadCard
+ mov r0, #0x80000
+ bl OS_SetIrqFunction
+ mov r0, #0x80000
+ bl OS_ResetRequestIrqMask
+ mov r0, #0x80000
+ bl OS_EnableIrqMask
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ bl CARDi_SetCardDma
+_020D7738:
+ mov r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D7748: .word cardi_common
+_020D774C: .word 0x01FF8000
+_020D7750: .word 0x000001FF
+_020D7754: .word 0x02106A50
+_020D7758: .word CARDi_OnReadCard
+
+ arm_func_start CARDi_OnReadCard
+CARDi_OnReadCard: ; 0x020D775C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D7838 ; =0x021D55C0
+ ldr r0, [r0, #0x28]
+ bl MI_StopDma
+ ldr r0, _020D7838 ; =0x021D55C0
+ ldr r3, [r0, #0x1c]
+ ldr r2, [r0, #0x20]
+ ldr r1, [r0, #0x24]
+ add r3, r3, #0x200
+ add r2, r2, #0x200
+ subs r1, r1, #0x200
+ str r3, [r0, #0x1c]
+ str r2, [r0, #0x20]
+ str r1, [r0, #0x24]
+ bne _020D7828
+ mov r0, #0x80000
+ bl OS_DisableIrqMask
+ mov r0, #0x80000
+ bl OS_ResetRequestIrqMask
+ ldr r7, _020D7838 ; =0x021D55C0
+ bl CARDi_ReadRomIDCore
+ bl CARDi_CheckPulledOutCore
+_020D77B8: ; 0x020D77B8
+ ldr r0, [r7, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ ldr r6, [r7, #0x38]
+ ldr r5, [r7, #0x3c]
+ bl OS_DisableInterrupts
+ ldr r1, [r7, #0x114]
+ mov r4, r0
+ bic r0, r1, #0x4c
+ str r0, [r7, #0x114]
+ add r0, r7, #0x10c
+ bl OS_WakeupThread
+ ldr r0, [r7, #0x114]
+ ands r0, r0, #0x10
+ beq _020D77FC
+ add r0, r7, #0x44
+ bl OS_WakeupThreadDirect
+_020D77FC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D7804: ; 0x020D7804
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r5
+ blx r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D7828:
+ bl CARDi_SetCardDma
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D7838: .word 0x021D55C0
+
+ arm_func_start CARDi_SetCardDma
+CARDi_SetCardDma: ; 0x020D783C
+ stmdb sp!, {r4,lr}
+ ldr r4, _020D7884 ; =0x021D55C0
+ ldr r1, _020D7888 ; =0x04100010
+ ldr r0, [r4, #0x28]
+ ldr r2, [r4, #0x20]
+ mov r3, #0x200
+ bl MIi_CardDmaCopy32
+ ldr r1, [r4, #0x1c]
+ mov r0, r1, lsr #0x8
+ orr r0, r0, #0xb7000000
+ mov r1, r1, lsl #0x18
+ bl CARDi_SetRomOp
+ ldr r0, _020D788C ; =0x021D5C00
+ ldr r1, _020D7890 ; =0x040001A4
+ ldr r0, [r0, #0x4]
+ str r0, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D7884: .word 0x021D55C0
+_020D7888: .word 0x04100010
+_020D788C: .word 0x021D5C00
+_020D7890: .word 0x040001A4
+
+ arm_func_start CARDi_SetRomOp
+CARDi_SetRomOp: ; 0x020D7894
+ ldr r3, _020D790C ; =0x040001A4
+_020D7898:
+ ldr r2, [r3, #0x0]
+ ands r2, r2, #0x80000000
+ bne _020D7898
+ ldr r3, _020D7910 ; =0x040001A1
+ mov r12, #0xc0
+ ldr r2, _020D7914 ; =0x040001A8
+ strb r12, [r3, #0x0]
+ mov r12, r0, lsr #0x18
+ ldr r3, _020D7918 ; =0x040001A9
+ strb r12, [r2, #0x0]
+ mov r12, r0, lsr #0x10
+ ldr r2, _020D791C ; =0x040001AA
+ strb r12, [r3, #0x0]
+ mov r12, r0, lsr #0x8
+ ldr r3, _020D7920 ; =0x040001AB
+ strb r12, [r2, #0x0]
+ ldr r2, _020D7924 ; =0x040001AC
+ strb r0, [r3, #0x0]
+ mov r3, r1, lsr #0x18
+ ldr r0, _020D7928 ; =0x040001AD
+ strb r3, [r2, #0x0]
+ mov r3, r1, lsr #0x10
+ ldr r2, _020D792C ; =0x040001AE
+ strb r3, [r0, #0x0]
+ mov r3, r1, lsr #0x8
+ ldr r0, _020D7930 ; =0x040001AF
+ strb r3, [r2, #0x0]
+ strb r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D790C: .word 0x040001A4
+_020D7910: .word 0x040001A1
+_020D7914: .word 0x040001A8
+_020D7918: .word 0x040001A9
+_020D791C: .word 0x040001AA
+_020D7920: .word 0x040001AB
+_020D7924: .word 0x040001AC
+_020D7928: .word 0x040001AD
+_020D792C: .word 0x040001AE
+_020D7930: .word 0x040001AF
+
+ arm_func_start CARDi_ReadFromCache
+CARDi_ReadFromCache:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020D79C8 ; =0x021D55C0
+ mov r1, #0x200
+ ldr r3, [r5, #0x1c]
+ rsb r1, r1, #0x0
+ ldr r2, [r0, #0x8]
+ and r3, r3, r1
+ cmp r3, r2
+ bne _020D79AC
+ ldr r2, [r5, #0x1c]
+ ldr r1, [r5, #0x24]
+ sub r3, r2, r3
+ rsb r4, r3, #0x200
+ cmp r4, r1
+ movhi r4, r1
+ add r0, r0, #0x20
+ ldr r1, [r5, #0x20]
+ mov r2, r4
+ add r0, r0, r3
+ bl MI_CpuCopy8
+ ldr r0, [r5, #0x1c]
+ add r0, r0, r4
+ str r0, [r5, #0x1c]
+ ldr r0, [r5, #0x20]
+ add r0, r0, r4
+ str r0, [r5, #0x20]
+ ldr r0, [r5, #0x24]
+ sub r0, r0, r4
+ str r0, [r5, #0x24]
+_020D79AC:
+ ldr r0, [r5, #0x24]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D79C8: .word 0x021D55C0
+
+ arm_func_start CARDi_Request
+CARDi_Request:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ ldr r0, [r6, #0x114]
+ mov r5, r1
+ mov r4, r2
+ ands r0, r0, #0x2
+ bne _020D7A44
+ ldr r1, [r6, #0x114]
+ mov r0, #0xb
+ orr r2, r1, #0x2
+ mov r1, #0x1
+ str r2, [r6, #0x114]
+ bl PXI_IsCallbackReady
+_020D7A04: ; 0x020D7A04
+ cmp r0, #0x0
+ bne _020D7A34
+ mov r9, #0x64
+ mov r8, #0xb
+ mov r7, #0x1
+_020D7A18:
+ mov r0, r9
+ bl OS_SpinWait
+ mov r0, r8
+ mov r1, r7
+ bl PXI_IsCallbackReady
+_020D7A2C: ; 0x020D7A2C
+ cmp r0, #0x0
+ beq _020D7A18
+_020D7A34:
+ mov r0, r6
+ mov r1, #0x0
+ mov r2, #0x1
+ bl CARDi_Request
+_020D7A44:
+ ldr r0, [r6, #0x0]
+ mov r1, #0x60
+ bl DC_FlushRange
+ bl DC_WaitWriteBufferEmpty
+ mov r9, #0xb
+ mov r8, #0x1
+ mov r7, #0x0
+ mov r11, #0x60
+_020D7A64:
+ str r5, [r6, #0x4]
+ ldr r0, [r6, #0x114]
+ orr r0, r0, #0x20
+ str r0, [r6, #0x114]
+_020D7A74:
+ mov r0, r9
+ mov r1, r5
+ mov r2, r8
+ bl PXI_SendWordByFifo
+_020D7A84: ; 0x020D7A84
+ cmp r0, #0x0
+ blt _020D7A74
+ cmp r5, #0x0
+ bne _020D7AB0
+ ldr r10, [r6, #0x0]
+_020D7A98:
+ mov r0, r9
+ mov r1, r10
+ mov r2, r8
+ bl PXI_SendWordByFifo
+_020D7AA8: ; 0x020D7AA8
+ cmp r0, #0x0
+ blt _020D7A98
+_020D7AB0:
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x114]
+ mov r10, r0
+ ands r0, r1, #0x20
+ beq _020D7AD8
+_020D7AC4:
+ mov r0, r7
+ bl OS_SleepThread
+ ldr r0, [r6, #0x114]
+ ands r0, r0, #0x20
+ bne _020D7AC4
+_020D7AD8:
+ mov r0, r10
+ bl OS_RestoreInterrupts
+_020D7AE0: ; 0x020D7AE0
+ ldr r0, [r6, #0x0]
+ mov r1, r11
+ bl DC_InvalidateRange
+_020D7AEC: ; 0x020D7AEC
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x4
+ bne _020D7B08
+ sub r4, r4, #0x1
+ cmp r4, #0x0
+ bgt _020D7A64
+_020D7B08:
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start CARDi_TaskThread
+CARDi_TaskThread: ; 0x020D7B20
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020D7B78 ; =0x021D55C0
+ mov r6, #0x0
+ add r7, r5, #0x44
+_020D7B34:
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x114]
+ mov r4, r0
+ ands r0, r1, #0x8
+ bne _020D7B60
+_020D7B48:
+ mov r0, r6
+ str r7, [r5, #0x104]
+ bl OS_SleepThread
+ ldr r0, [r5, #0x114]
+ ands r0, r0, #0x8
+ beq _020D7B48
+_020D7B60:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r1, [r5, #0x40]
+ mov r0, r5
+ blx r1
+ b _020D7B34
+ .balign 4
+_020D7B78: .word 0x021D55C0
+
+ arm_func_start CARDi_OnFifoRecv
+CARDi_OnFifoRecv: ; 0x020D7B7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0xb
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r1, _020D7BC8 ; =0x021D55C0
+ ldr r0, [r1, #0x114]
+ bic r0, r0, #0x20
+ str r0, [r1, #0x114]
+ ldr r0, [r1, #0x104]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7BC8: .word 0x021D55C0
+
+ arm_func_start CARDi_SendtoPxi
+CARDi_SendtoPxi: ; 0x020D7BCC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r1, r7
+ mov r0, #0xe
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D7BEC: ; 0x020D7BEC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r5, #0xe
+ mov r4, #0x0
+_020D7C04:
+ mov r0, r6
+ blx SVC_WaitByLoop
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020D7C1C: ; 0x020D7C1C
+ cmp r0, #0x0
+ bne _020D7C04
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CARDi_CheckPulledOutCore
+CARDi_CheckPulledOutCore:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020D7C94 ; =0x027FFC10
+ ldrh r1, [r1, #0x0]
+ cmp r1, #0x0
+ ldreq r1, _020D7C98 ; =0x027FF800
+ ldrne r1, _020D7C9C ; =0x027FFC00
+ ldr r1, [r1, #0x0]
+ str r1, [sp, #0x0]
+ ldr r1, [sp, #0x0]
+ cmp r0, r1
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #0xe
+ mov r1, #0x11
+ mov r2, #0x0
+ bl CARDi_PulledOutCallback
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D7C94: .word 0x027FFC10
+_020D7C98: .word 0x027FF800
+_020D7C9C: .word 0x027FFC00
+
+ arm_func_start CARD_TerminateForPulledOut
+CARD_TerminateForPulledOut: ; 0x020D7CA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D7D10 ; =0x027FFFA8
+ mov r5, #0x1
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x8000
+ movs r0, r0, asr #0xf
+ beq _020D7CEC
+ bl PM_ForceToPowerOff
+ cmp r0, #0x4
+ bne _020D7CE4
+ ldr r4, _020D7D14 ; =0x000A3A47
+_020D7CD0:
+ mov r0, r4
+ bl OS_SpinWait
+ bl PM_ForceToPowerOff
+ cmp r0, #0x4
+ beq _020D7CD0
+_020D7CE4:
+ cmp r0, #0x0
+ moveq r5, #0x0
+_020D7CEC:
+ cmp r5, #0x0
+ beq _020D7D00
+ mov r0, #0x1
+ mov r1, r0
+ bl CARDi_SendtoPxi
+_020D7D00:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D7D10: .word 0x027FFFA8
+_020D7D14: .word 0x000A3A47
+
+ arm_func_start CARD_IsPulledOut
+CARD_IsPulledOut: ; 0x020D7D18
+ ldr r0, _020D7D24 ; =0x021D5E20
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D7D24: .word 0x021D5E20
+
+ arm_func_start CARDi_PulledOutCallback
+CARDi_PulledOutCallback: ; 0x020D7D28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x11
+ bne _020D7D90
+ ldr r2, _020D7DA0 ; =0x021D5E20
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020D7DA4 ; =0x021D5E24
+ mov r0, #0x1
+ ldr r1, [r1, #0x0]
+ str r0, [r2, #0x0]
+ cmp r1, #0x0
+ beq _020D7D70
+ blx r1
+_020D7D70:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl CARD_TerminateForPulledOut
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020D7D90:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7DA0: .word 0x021D5E20
+_020D7DA4: .word 0x021D5E24
+
+ arm_func_start CARD_InitPulledOutCallback
+CARD_InitPulledOutCallback: ; 0x020D7DA8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl PXI_Init
+ ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback
+ mov r0, #0xe
+ bl PXI_SetFifoRecvCallback
+ ldr r0, _020D7DDC ; =0x021D5E24
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7DD8: .word CARDi_PulledOutCallback
+_020D7DDC: .word 0x021D5E24
diff --git a/arm9/asm/CP_arm9.s b/arm9/asm/CP_arm9.s
new file mode 100644
index 00000000..c756e8e2
--- /dev/null
+++ b/arm9/asm/CP_arm9.s
@@ -0,0 +1,42 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+
+ arm_func_start CP_SaveContext
+CP_SaveContext: ; 0x020D3648
+ ldr r1, _020D3684 ; =0x04000290
+ stmdb sp!, {r4}
+ ldmia r1, {r2-r4,r12}
+ stmia r0!, {r2-r4,r12}
+ ldrh r12, [r1, #-0x10]
+ add r1, r1, #0x28
+ ldmia r1, {r2-r3}
+ stmia r0!, {r2-r3}
+ and r12, r12, #0x3
+ ldrh r2, [r1, #-0x8]
+ strh r12, [r0, #0x0]
+ and r2, r2, #0x1
+ strh r2, [r0, #0x2]
+ ldmia sp!, {r4}
+ bx lr
+ .balign 4
+_020D3684: .word 0x04000290
+
+ arm_func_start CP_RestoreContext
+CP_RestoreContext: ; 0x020D3688
+ stmdb sp!, {r4}
+ ldr r1, _020D36C0 ; =0x04000290
+ ldmia r0, {r2-r4,r12}
+ stmia r1, {r2-r4,r12}
+ ldrh r2, [r0, #0x18]
+ ldrh r3, [r0, #0x1a]
+ strh r2, [r1, #-0x10]
+ strh r3, [r1, #0x20]
+ add r0, r0, #0x10
+ add r1, r1, #0x28
+ ldmia r0, {r2-r3}
+ stmia r1, {r2-r3}
+ ldmia sp!, {r4}
+ bx lr
+ .balign 4
+_020D36C0: .word 0x04000290
diff --git a/arm9/asm/CTRDG_arm9.s b/arm9/asm/CTRDG_arm9.s
new file mode 100644
index 00000000..301ea233
--- /dev/null
+++ b/arm9/asm/CTRDG_arm9.s
@@ -0,0 +1,3238 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CTRDG_CheckEnabled
+CTRDG_CheckEnabled:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsOptionCartridge
+_020DB128: ; 0x020DB128
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl CTRDG_IsEnabled
+_020DB13C: ; 0x020DB13C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_Enable
+CTRDG_Enable: ; 0x020DB15C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020DB1AC ; =0x021D6940
+ mov r4, r0
+ str r5, [r1, #0x0]
+ bl CTRDG_IsOptionCartridge
+_020DB17C: ; 0x020DB17C
+ cmp r0, #0x0
+ bne _020DB198
+ cmp r5, #0x0
+ movne r1, #0x1000
+ moveq r1, #0x5000
+ mov r0, #0xf000
+ bl OS_SetDPermissionsForProtectionRegion
+_020DB198:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DB1AC: .word 0x021D6940
+
+ arm_func_start CTRDG_IsEnabled
+CTRDG_IsEnabled:
+ ldr r0, _020DB1BC ; =0x021D6940
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020DB1BC: .word 0x021D6940
+
+ arm_func_start CTRDGi_AccessCommon
+CTRDGi_AccessCommon: ; 0x020DB1C0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl CTRDG_IsExisting
+_020DB1DC: ; 0x020DB1DC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl CTRDG_CheckEnabled
+ ldr r0, _020DB2BC ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_LockCartridge
+ cmp r4, #0x21
+ bhi _020DB240
+ cmp r4, #0x21
+ bhs _020DB270
+ cmp r4, #0x11
+ bhi _020DB234
+ cmp r4, #0x10
+ blo _020DB294
+ cmp r4, #0x10
+ beq _020DB290
+ cmp r4, #0x11
+ beq _020DB260
+ b _020DB294
+_020DB234:
+ cmp r4, #0x20
+ streqh r6, [r7, #0x0]
+ b _020DB294
+_020DB240:
+ cmp r4, #0x40
+ bhi _020DB254
+ cmp r4, #0x40
+ streq r6, [r7, #0x0]
+ b _020DB294
+_020DB254:
+ cmp r4, #0x41
+ beq _020DB280
+ b _020DB294
+_020DB260:
+ cmp r5, #0x0
+ ldrneb r0, [r7, #0x0]
+ strneb r0, [r5, #0x0]
+ b _020DB294
+_020DB270:
+ cmp r5, #0x0
+ ldrneh r0, [r7, #0x0]
+ strneh r0, [r5, #0x0]
+ b _020DB294
+_020DB280:
+ cmp r5, #0x0
+ ldrne r0, [r7, #0x0]
+ strne r0, [r5, #0x0]
+ b _020DB294
+_020DB290:
+ strb r6, [r7, #0x0]
+_020DB294:
+ ldr r0, _020DB2BC ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_UnlockCartridge
+ bl CTRDG_IsExisting
+_020DB2A4: ; 0x020DB2A4
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB2BC: .word 0x021D6944
+
+ arm_func_start CTRDG_Read32
+CTRDG_Read32: ; 0x020DB2C0
+ ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon
+ mov r2, r1
+ mov r1, #0x0
+ mov r3, #0x41
+ bx r12
+ .balign 4
+_020DB2D4: .word CTRDGi_AccessCommon
+
+ arm_func_start CTRDGi_CopyCommon
+CTRDGi_CopyCommon: ; 0x020DB2D8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl CTRDG_IsExisting
+_020DB2F4: ; 0x020DB2F4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl CTRDG_CheckEnabled
+ ldr r0, _020DB42C ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_LockCartridge
+ ldr r0, [sp, #0x18]
+ ands r0, r0, #0x1
+ bne _020DB338
+ mov r0, r7
+ bl MI_StopDma
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+_020DB338:
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x11
+ bhi _020DB36C
+ cmp r0, #0x10
+ blo _020DB360
+ cmp r0, #0x10
+ beq _020DB38C
+ cmp r0, #0x11
+ beq _020DB3BC
+ b _020DB404
+_020DB360:
+ cmp r0, #0x1
+ beq _020DB3E4
+ b _020DB404
+_020DB36C:
+ cmp r0, #0x20
+ bhi _020DB380
+ cmp r0, #0x20
+ beq _020DB3A4
+ b _020DB404
+_020DB380:
+ cmp r0, #0x21
+ beq _020DB3D0
+ b _020DB404
+_020DB38C:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl MI_DmaCopy16
+ b _020DB404
+_020DB3A4:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl MI_DmaCopy32
+ b _020DB404
+_020DB3BC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MIi_CpuCopy16
+ b _020DB404
+_020DB3D0:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MIi_CpuCopy32
+ b _020DB404
+_020DB3E4:
+ cmp r4, #0x0
+ mov r1, #0x0
+ bls _020DB404
+_020DB3F0:
+ ldrb r0, [r6], #0x1
+ add r1, r1, #0x1
+ cmp r1, r4
+ strb r0, [r5], #0x1
+ blo _020DB3F0
+_020DB404:
+ ldr r0, _020DB42C ; =0x021D6944
+ ldrh r0, [r0, #0x2]
+ bl OS_UnlockCartridge
+ bl CTRDG_IsExisting
+_020DB414: ; 0x020DB414
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB42C: .word 0x021D6944
+
+ arm_func_start CTRDG_CpuCopy32
+CTRDG_CpuCopy32: ; 0x020DB430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x21
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_CpuCopy16
+CTRDG_CpuCopy16: ; 0x020DB464
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x11
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_CpuCopy8
+CTRDG_CpuCopy8: ; 0x020DB498
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ cmp lr, #0x8000000
+ blo _020DB4DC
+ ldr r2, _020DB500 ; =0x0A010000
+ cmp lr, r2
+ bhs _020DB4DC
+ mov r12, #0x1
+ mov r2, r0
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020DB4DC:
+ mov r12, #0x1
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x0
+ str r12, [sp, #0x0]
+ bl CTRDGi_CopyCommon
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB500: .word 0x0A010000
+
+ arm_func_start CTRDGi_SendtoPxi
+CTRDGi_SendtoPxi: ; 0x020DB504
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r1, r7
+ mov r0, #0xd
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020DB520: ; 0x020DB520
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r6, #0x1
+ mov r5, #0xd
+ mov r4, #0x0
+_020DB53C:
+ mov r0, r6
+ blx SVC_WaitByLoop
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020DB554: ; 0x020DB554
+ cmp r0, #0x0
+ bne _020DB53C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CTRDGi_UnlockByProcessor
+CTRDGi_UnlockByProcessor: ; 0x020DB568
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ bne _020DB580
+ bl OS_UnlockCartridge
+_020DB580:
+ ldr r0, [r4, #0x4]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_LockByProcessor
+CTRDGi_LockByProcessor: ; 0x020DB590
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ ldr r5, _020DB60C ; =0x027FFFE8
+ mov r4, #0x1
+_020DB5A8:
+ bl OS_DisableInterrupts
+ str r0, [r6, #0x4]
+ mov r0, r5
+ bl OS_ReadOwnerOfLockWord
+ and r0, r0, #0x40
+ str r0, [r6, #0x0]
+ ldr r0, [r6, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, r7
+ bl OS_TryLockCartridge
+_020DB5DC: ; 0x020DB5DC
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r6, #0x4]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ blx SVC_WaitByLoop
+ b _020DB5A8
+_020DB600: ; 0x020DB600
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DB60C: .word 0x027FFFE8
+
+ arm_func_start CTRDGi_RestoreAccessCycle
+CTRDGi_RestoreAccessCycle: ; 0x020DB610
+ ldr r3, _020DB640 ; =0x04000204
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r3, #0x0]
+ bic r1, r1, #0xc
+ orr r1, r1, r2, lsl #0x2
+ strh r1, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ ldr r2, [r0, #0x4]
+ bic r0, r1, #0x10
+ orr r0, r0, r2, lsl #0x4
+ strh r0, [r3, #0x0]
+ bx lr
+ .balign 4
+_020DB640: .word 0x04000204
+
+ arm_func_start CTRDGi_ChangeLatestAccessCycle
+CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644
+ ldr r2, _020DB688 ; =0x04000204
+ ldrh r1, [r2, #0x0]
+ and r1, r1, #0xc
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x0]
+ ldrh r1, [r2, #0x0]
+ and r1, r1, #0x10
+ mov r1, r1, asr #0x4
+ str r1, [r0, #0x4]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0xc
+ orr r0, r0, #0xc
+ strh r0, [r2, #0x0]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0x10
+ strh r0, [r2, #0x0]
+ bx lr
+ .balign 4
+_020DB688: .word 0x04000204
+
+ arm_func_start CTRDG_IsExisting
+CTRDG_IsExisting:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ ldr r2, _020DB798 ; =0x027FFC30
+ ldr r0, _020DB79C ; =0x0000FFFF
+ ldrh r1, [r2, #0x0]
+ mov r4, #0x1
+ cmp r1, r0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1e
+ mov r0, r0, lsr #0x1f
+ cmp r0, #0x1
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _020DB7A0 ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_LockByProcessor
+ add r0, sp, #0x8
+ bl CTRDGi_ChangeLatestAccessCycle
+ mov r0, #0x8000000
+ ldrb r2, [r0, #0xb2]
+ cmp r2, #0x96
+ bne _020DB714
+ ldr r1, _020DB798 ; =0x027FFC30
+ ldrh r0, [r0, #0xbe]
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ bne _020DB75C
+_020DB714:
+ cmp r2, #0x96
+ beq _020DB734
+ ldr r1, _020DB798 ; =0x027FFC30
+ ldr r0, _020DB7A4 ; =0x0801FFFE
+ ldrh r1, [r1, #0x0]
+ ldrh r0, [r0, #0x0]
+ cmp r1, r0
+ bne _020DB75C
+_020DB734:
+ ldr r2, _020DB798 ; =0x027FFC30
+ mov r0, #0x8000000
+ ldr r1, [r2, #0x8]
+ ldr r0, [r0, #0xac]
+ cmp r1, r0
+ beq _020DB770
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ beq _020DB770
+_020DB75C:
+ ldr r1, _020DB798 ; =0x027FFC30
+ mov r4, #0x0
+ ldrb r0, [r1, #0x5]
+ orr r0, r0, #0x2
+ strb r0, [r1, #0x5]
+_020DB770:
+ add r0, sp, #0x8
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _020DB7A0 ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_UnlockByProcessor
+ mov r0, r4
+ add sp, sp, #0x10
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB798: .word 0x027FFC30
+_020DB79C: .word 0x0000FFFF
+_020DB7A0: .word 0x021D6944
+_020DB7A4: .word 0x0801FFFE
+
+ arm_func_start CTRDG_IsPulledOut
+CTRDG_IsPulledOut: ; 0x020DB7A8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020DB800 ; =0x027FFC30
+ ldr r0, _020DB804 ; =0x0000FFFF
+ ldrh r1, [r2, #0x0]
+ cmp r1, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r0, [r2, #0x5]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, lsr #0x1f
+ bne _020DB7E4
+ bl CTRDG_IsExisting
+_020DB7E4:
+ ldr r0, _020DB800 ; =0x027FFC30
+ ldrb r0, [r0, #0x5]
+ mov r0, r0, lsl #0x1e
+ mov r0, r0, lsr #0x1f
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB800: .word 0x027FFC30
+_020DB804: .word 0x0000FFFF
+
+ arm_func_start CTRDGi_GetAgbMakerCodeAtInit
+CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB814: ; 0x020DB814
+ cmp r0, #0x0
+ ldrne r0, _020DB82C ; =0x027FFC30
+ ldrneh r4, [r0, #0x6]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB82C: .word 0x027FFC30
+
+ arm_func_start CTRDG_GetAgbMakerCode
+CTRDG_GetAgbMakerCode: ; 0x020DB830
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDG_IsExisting
+_020DB83C: ; 0x020DB83C
+ cmp r0, #0x0
+ beq _020DB84C
+ bl CTRDGi_GetAgbMakerCodeAtInit
+ mov r4, r0
+_020DB84C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_GetAgbGameCodeAtInit
+CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB864: ; 0x020DB864
+ cmp r0, #0x0
+ ldrne r0, _020DB87C ; =0x027FFC30
+ ldrne r4, [r0, #0x8]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020DB87C: .word 0x027FFC30
+
+ arm_func_start CTRDG_GetAgbGameCode
+CTRDG_GetAgbGameCode: ; 0x020DB880
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl CTRDG_IsExisting
+_020DB88C: ; 0x020DB88C
+ cmp r0, #0x0
+ beq _020DB89C
+ bl CTRDGi_GetAgbGameCodeAtInit
+ mov r4, r0
+_020DB89C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CTRDGi_IsAgbCartridgeAtInit
+CTRDGi_IsAgbCartridgeAtInit:
+ ldr r0, _020DB8BC ; =0x027FFC30
+ ldrb r0, [r0, #0x5]
+ mov r0, r0, lsl #0x1f
+ mov r0, r0, lsr #0x1f
+ bx lr
+ .balign 4
+_020DB8BC: .word 0x027FFC30
+
+ arm_func_start CTRDG_IsOptionCartridge
+CTRDG_IsOptionCartridge:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsExisting
+_020DB8CC: ; 0x020DB8CC
+ cmp r0, #0x0
+ beq _020DB8EC
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB8D8: ; 0x020DB8D8
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {lr}
+ bxeq lr
+_020DB8EC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_IsAgbCartridge
+CTRDG_IsAgbCartridge: ; 0x020DB8FC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CTRDG_IsExisting
+_020DB908: ; 0x020DB908
+ cmp r0, #0x0
+ beq _020DB928
+ bl CTRDGi_IsAgbCartridgeAtInit
+_020DB914: ; 0x020DB914
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {lr}
+ bxne lr
+_020DB928:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_InitCommon
+CTRDGi_InitCommon: ; 0x020DB938
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020DB970 ; =0x021D6944
+ mov r3, #0x0
+ ldr r2, _020DB974 ; =0x05000001
+ add r0, sp, #0x0
+ str r3, [sp, #0x0]
+ blx FUN_020002FE
+ bl OS_GetLockID
+ ldr r1, _020DB970 ; =0x021D6944
+ strh r0, [r1, #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DB970: .word 0x021D6944
+_020DB974: .word 0x05000001
+
+ arm_func_start CTRDGi_CallbackForSetPhi
+CTRDGi_CallbackForSetPhi: ; 0x020DB978
+ ldr r0, _020DB988 ; =0x021D694C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020DB988: .word 0x021D694C
+
+ arm_func_start CTRDG_TerminateForPulledOut
+CTRDG_TerminateForPulledOut: ; 0x020DB98C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x2
+ bl CTRDGi_SendtoPxi
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_PulledOutCallback
+CTRDGi_PulledOutCallback: ; 0x020DB9AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x11
+ bne _020DBA14
+ ldr r0, _020DBA24 ; =0x021D6954
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020DBA28 ; =0x021D6958
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020DB9F0
+ blx r1
+_020DB9F0:
+ cmp r0, #0x0
+ beq _020DB9FC
+ bl CTRDG_TerminateForPulledOut
+_020DB9FC:
+ ldr r0, _020DBA24 ; =0x021D6954
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020DBA14:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBA24: .word 0x021D6954
+_020DBA28: .word 0x021D6958
+
+ arm_func_start CTRDGi_CallbackForInitModuleInfo
+CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x3f
+ cmp r0, #0x1
+ ldreq r0, _020DBA64 ; =0x021D6944
+ moveq r1, #0x1
+ streqh r1, [r0, #0x0]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBA64: .word 0x021D6944
+
+ arm_func_start CTRDGi_InitModuleInfo
+CTRDGi_InitModuleInfo: ; 0x020DBA68
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ ldr r0, _020DBC50 ; =0x021D6948
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x14
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, _020DBC54 ; =0x04000300
+ mov r2, #0x1
+ str r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x1
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, #0x40000
+ bl OS_SetIrqMask
+ ldr r3, _020DBC58 ; =0x04000208
+ mov r2, #0x1
+ ldrh r4, [r3, #0x0]
+ ldr r1, _020DBC5C ; =0x021D6944
+ mov r6, r0
+ strh r2, [r3, #0x0]
+ ldrh r0, [r1, #0x2]
+ add r1, sp, #0x0
+ bl CTRDGi_LockByProcessor
+ ldr r1, _020DBC60 ; =0x04000204
+ add r0, sp, #0x8
+ ldrh r1, [r1, #0x0]
+ and r1, r1, #0x8000
+ mov r5, r1, asr #0xf
+ bl CTRDGi_ChangeLatestAccessCycle
+ ldr r3, _020DBC60 ; =0x04000204
+ ldr r0, _020DBC64 ; =0x021D6960
+ ldrh r2, [r3, #0x0]
+ add r0, r0, #0x80
+ mov r1, #0x40
+ bic r2, r2, #0x8000
+ strh r2, [r3, #0x0]
+ bl DC_InvalidateRange
+ ldr r2, _020DBC64 ; =0x021D6960
+ ldr r1, _020DBC68 ; =0x08000080
+ mov r0, #0x1
+ mov r3, #0x40
+ add r2, r2, #0x80
+ bl MI_DmaCopy16
+ ldr r2, _020DBC60 ; =0x04000204
+ add r0, sp, #0x8
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x8000
+ orr r1, r1, r5, lsl #0xf
+ strh r1, [r2, #0x0]
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _020DBC5C ; =0x021D6944
+ add r1, sp, #0x0
+ ldrh r0, [r0, #0x2]
+ bl CTRDGi_UnlockByProcessor
+ ldr r0, _020DBC6C ; =0x027FFF9B
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020DBB70
+ ldr r0, _020DBC70 ; =0x027FFF9A
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020DBBDC
+_020DBB70:
+ ldr r2, _020DBC64 ; =0x021D6960
+ ldr r0, _020DBC74 ; =0x027FFC30
+ ldrh r1, [r2, #0xbe]
+ mov r3, #0x0
+ strh r1, [r0, #0x0]
+_020DBB84:
+ add r0, r2, r3
+ ldrb r1, [r0, #0xb5]
+ add r0, r3, #0x2700000
+ add r0, r0, #0xff000
+ add r3, r3, #0x1
+ strb r1, [r0, #0xC32]
+ cmp r3, #0x3
+ blt _020DBB84
+ ldrh r0, [r2, #0xb0]
+ ldr r1, _020DBC74 ; =0x027FFC30
+ strh r0, [r1, #0x6]
+ ldr r0, [r2, #0xac]
+ str r0, [r1, #0x8]
+ bl CTRDG_IsExisting
+_020DBBBC: ; 0x020DBBBC
+ cmp r0, #0x0
+ movne r2, #0x1
+ ldr r1, _020DBC6C ; =0x027FFF9B
+ moveq r2, #0x0
+ strb r2, [r1, #0x0]
+ ldr r0, _020DBC70 ; =0x027FFF9A
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+_020DBBDC:
+ ldr r0, _020DBC78 ; =0xFFFF0020
+ ldr r1, _020DBC7C ; =0x021D6964
+ mov r2, #0x9c
+ bl MIi_CpuCopy32
+ bl DC_FlushAll
+ ldr r0, _020DBC64 ; =0x021D6960
+ add r0, r0, #0xfe000000
+ mov r0, r0, lsr #0x5
+ mov r0, r0, lsl #0x6
+ orr r0, r0, #0x1
+ bl CTRDGi_SendtoPxi
+ ldr r5, _020DBC5C ; =0x021D6944
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x1
+ beq _020DBC30
+ mov r7, #0x1
+_020DBC1C:
+ mov r0, r7
+ blx SVC_WaitByLoop
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x1
+ bne _020DBC1C
+_020DBC30:
+ ldr r2, _020DBC58 ; =0x04000208
+ mov r0, r6
+ ldrh r1, [r2, #0x0]
+ strh r4, [r2, #0x0]
+ bl OS_SetIrqMask
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DBC50: .word 0x021D6948
+_020DBC54: .word 0x04000300
+_020DBC58: .word 0x04000208
+_020DBC5C: .word 0x021D6944
+_020DBC60: .word 0x04000204
+_020DBC64: .word 0x021D6960
+_020DBC68: .word 0x08000080
+_020DBC6C: .word 0x027FFF9B
+_020DBC70: .word 0x027FFF9A
+_020DBC74: .word 0x027FFC30
+_020DBC78: .word 0xFFFF0020
+_020DBC7C: .word 0x021D6964
+
+ arm_func_start CTRDG_Init
+CTRDG_Init: ; 0x020DBC80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DBD34 ; =0x021D6950
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ bl CTRDGi_InitCommon
+ ldr r0, _020DBD38 ; =0x021D6954
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bl PXI_Init
+ mov r5, #0xd
+ mov r4, #0x1
+_020DBCC4:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020DBCD0: ; 0x020DBCD0
+ cmp r0, #0x0
+ beq _020DBCC4
+ ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo
+ mov r0, #0xd
+ bl PXI_SetFifoRecvCallback
+ bl CTRDGi_InitModuleInfo
+ mov r0, #0xd
+ mov r1, #0x0
+ bl PXI_SetFifoRecvCallback
+ ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback
+ mov r0, #0xd
+ bl PXI_SetFifoRecvCallback
+ ldr r1, _020DBD44 ; =0x021D6958
+ mov r2, #0x0
+ ldr r0, _020DBD48 ; =0x021D6A20
+ str r2, [r1, #0x0]
+ bl CTRDGi_InitTaskThread
+ ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi
+ mov r0, #0x11
+ bl PXI_SetFifoRecvCallback
+_020DBD20: ; 0x020DBD20
+ mov r0, #0x0
+ bl CTRDG_Enable
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DBD34: .word 0x021D6950
+_020DBD38: .word 0x021D6954
+_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo
+_020DBD40: .word CTRDGi_PulledOutCallback
+_020DBD44: .word 0x021D6958
+_020DBD48: .word 0x021D6A20
+_020DBD4C: .word CTRDGi_CallbackForSetPhi
+
+ arm_func_start CTRDG_IdentifyAgbBackup
+CTRDG_IdentifyAgbBackup: ; 0x020DBD50
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ cmp r7, #0x1
+ mov r0, #0x1
+ bhi _020DBEAC
+ bl OS_GetLockID
+ ldr r1, _020DBED8 ; =0x021D6B0C
+ strh r0, [r1, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_LockCartridge
+ ldr r6, _020DBEDC ; =0x04000204
+ ldr r1, _020DBEE0 ; =0x02103FE4
+ ldrh r3, [r6, #0x0]
+ ldrh r2, [r6, #0x0]
+ ldr r0, _020DBEE4 ; =0x021D6B28
+ and r4, r3, #0x3
+ bic r2, r2, #0x3
+ orr r2, r2, #0x3
+ strh r2, [r6, #0x0]
+ str r1, [r0, #0x0]
+ bl CTRDGi_ReadFlashID
+ ldr r2, _020DBEDC ; =0x04000204
+ mov r6, r0
+ ldrh r1, [r2, #0x0]
+ cmp r7, #0x0
+ ldreq r5, _020DBEE8 ; =0x02103FF4
+ bic r1, r1, #0x3
+ orr r1, r1, r4
+ cmp r7, #0x1
+ ldr r0, _020DBED8 ; =0x021D6B0C
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ ldreq r5, _020DBEEC ; =0x02103FE8
+ bl OS_UnlockCartridge2
+ ldr r2, [r5, #0x0]
+ mov r0, #0x1
+ ldrh r1, [r2, #0x38]
+ cmp r1, #0x0
+ beq _020DBE14
+ and r3, r6, #0xff
+_020DBDF4:
+ ldrh r1, [r2, #0x38]
+ cmp r3, r1
+ moveq r0, #0x0
+ beq _020DBE14
+ ldr r2, [r5, #0x4]!
+ ldrh r1, [r2, #0x38]
+ cmp r1, #0x0
+ bne _020DBDF4
+_020DBE14:
+ ldr r2, [r2, #0x0]
+ ldr r1, _020DBEF0 ; =0x021D6B14
+ ldr r3, _020DBEF4 ; =0x021D6B34
+ str r2, [r1, #0x0]
+ ldr r1, [r5, #0x0]
+ ldr r2, _020DBEF8 ; =0x021D6B2C
+ ldr r4, [r1, #0x4]
+ ldr r1, _020DBEFC ; =0x021D6B18
+ str r4, [r3, #0x0]
+ ldr r3, [r5, #0x0]
+ ldr r6, _020DBF00 ; =0x021D6B1C
+ ldr r3, [r3, #0x8]
+ ldr r4, _020DBF04 ; =0x021D6B30
+ str r3, [r2, #0x0]
+ ldr r2, [r5, #0x0]
+ ldr r3, _020DBF08 ; =0x021D6B24
+ ldr r7, [r2, #0xc]
+ ldr r2, _020DBEE4 ; =0x021D6B28
+ str r7, [r1, #0x0]
+ ldr r7, [r5, #0x0]
+ ldr r1, _020DBF0C ; =0x021D6B20
+ ldr r7, [r7, #0x10]
+ add sp, sp, #0x4
+ str r7, [r6, #0x0]
+ ldr r6, [r5, #0x0]
+ ldr r6, [r6, #0x14]
+ str r6, [r4, #0x0]
+ ldr r4, [r5, #0x0]
+ ldr r4, [r4, #0x18]
+ str r4, [r3, #0x0]
+ ldr r3, [r5, #0x0]
+ ldr r3, [r3, #0x1c]
+ str r3, [r2, #0x0]
+ ldr r2, [r5, #0x0]
+ add r2, r2, #0x20
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020DBEAC:
+ cmp r7, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ bl OS_GetLockID
+ ldr r1, _020DBF10 ; =0x021D6B4C
+ strh r0, [r1, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DBED8: .word 0x021D6B0C
+_020DBEDC: .word 0x04000204
+_020DBEE0: .word 0x02103FE4
+_020DBEE4: .word 0x021D6B28
+_020DBEE8: .word 0x02103FF4
+_020DBEEC: .word 0x02103FE8
+_020DBEF0: .word 0x021D6B14
+_020DBEF4: .word 0x021D6B34
+_020DBEF8: .word 0x021D6B2C
+_020DBEFC: .word 0x021D6B18
+_020DBF00: .word 0x021D6B1C
+_020DBF04: .word 0x021D6B30
+_020DBF08: .word 0x021D6B24
+_020DBF0C: .word 0x021D6B20
+_020DBF10: .word 0x021D6B4C
+
+ arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync
+CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ str r2, [sp, #0x18]
+ ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore
+ add r0, sp, #0x0
+ mov r2, r3
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore
+
+ arm_func_start CTRDG_VerifyAgbFlash
+CTRDG_VerifyAgbFlash:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ str r2, [sp, #0x18]
+ bl CTRDGi_VerifyAgbFlashCore
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDG_WriteAgbFlashSector
+CTRDG_WriteAgbFlashSector:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020DBF90 ; =0x021D6B14
+ ldr r2, [r2, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DBF90: .word 0x021D6B14
+
+ arm_func_start CTRDG_ReadAgbFlash
+CTRDG_ReadAgbFlash: ; 0x020DBF94
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0x14]
+ str r2, [sp, #0x1c]
+ str r3, [sp, #0x18]
+ bl CTRDGi_ReadAgbFlashCore
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore
+CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r4, r0
+ ldmia r4!, {r0-r3}
+ add r12, sp, #0x0
+ stmia r12!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r0, [r4, #0x0]
+ mov r7, #0x0
+ str r0, [r12, #0x0]
+ ldrh r6, [sp, #0x20]
+ ldr r5, [sp, #0xc]
+ ldr r4, [sp, #0x18]
+_020DBFF8:
+ mov r0, r6
+ mov r1, r5
+ bl CTRDG_WriteAgbFlashSector
+_020DC004: ; 0x020DC004
+ cmp r0, #0x0
+ bne _020DC02C
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl CTRDG_VerifyAgbFlash
+_020DC01C: ; 0x020DC01C
+ cmp r0, #0x0
+ addeq sp, sp, #0x24
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_020DC02C:
+ add r1, r7, #0x1
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ cmp r7, #0x3
+ blo _020DBFF8
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CTRDGi_VerifyAgbFlashCore
+CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC128 ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r6, [sp, #0x20]
+ ldr r5, [sp, #0xc]
+ ldr r4, [sp, #0x18]
+ bl OS_LockCartridge
+ ldr r3, _020DC12C ; =0x04000204
+ ldr r0, _020DC130 ; =0x021D6B20
+ ldrh r2, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ and r7, r2, #0x3
+ bic r1, r1, #0x3
+ orr r1, r1, #0x3
+ strh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x20000
+ bne _020DC0D4
+ mov r0, r6, lsl #0xc
+ mov r0, r0, lsr #0x10
+ bl CTRDGi_SetFlashBankMx
+ and r0, r6, #0xf
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+_020DC0D4:
+ ldr r1, _020DC130 ; =0x021D6B20
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ mov r2, r4
+ ldrh r1, [r1, #0x8]
+ mov r1, r6, lsl r1
+ add r1, r1, #0xa000000
+ bl CTRDGi_VerifyFlashSectorCore
+ ldr r3, _020DC12C ; =0x04000204
+ ldr r1, _020DC128 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r7
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DC128: .word 0x021D6B0C
+_020DC12C: .word 0x04000204
+_020DC130: .word 0x021D6B20
+
+ arm_func_start CTRDGi_VerifyFlashSectorCore
+CTRDGi_VerifyFlashSectorCore: ; 0x020DC134
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ beq _020DC160
+_020DC140:
+ ldrb r12, [r1], #0x1
+ ldrb r3, [r0], #0x1
+ cmp r12, r3
+ subne r0, r1, #0x1
+ bxne lr
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ bne _020DC140
+_020DC160:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start CTRDGi_ReadAgbFlashCore
+CTRDGi_ReadAgbFlashCore: ; 0x020DC168
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC25C ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r7, [sp, #0x20]
+ ldr r6, [sp, #0x14]
+ ldr r5, [sp, #0x1c]
+ ldr r4, [sp, #0x18]
+ bl OS_LockCartridge
+ ldr r3, _020DC260 ; =0x04000204
+ ldr r0, _020DC264 ; =0x021D6B20
+ ldrh r2, [r3, #0x0]
+ ldrh r1, [r3, #0x0]
+ and r8, r2, #0x3
+ bic r1, r1, #0x3
+ orr r1, r1, #0x3
+ strh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x20000
+ bne _020DC1F4
+ mov r0, r7, lsl #0xc
+ mov r0, r0, lsr #0x10
+ bl CTRDGi_SetFlashBankMx
+ and r0, r7, #0xf
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+_020DC1F4:
+ ldr r0, _020DC264 ; =0x021D6B20
+ cmp r4, #0x0
+ ldr r0, [r0, #0x0]
+ sub r4, r4, #0x1
+ ldrh r0, [r0, #0x8]
+ mov r0, r7, lsl r0
+ add r0, r0, #0xa000000
+ add r1, r6, r0
+ beq _020DC22C
+_020DC218:
+ ldrb r0, [r1], #0x1
+ cmp r4, #0x0
+ sub r4, r4, #0x1
+ strb r0, [r5], #0x1
+ bne _020DC218
+_020DC22C:
+ ldr r2, _020DC260 ; =0x04000204
+ ldr r0, _020DC25C ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x3
+ orr r1, r1, r8
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, #0x0
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC25C: .word 0x021D6B0C
+_020DC260: .word 0x04000204
+_020DC264: .word 0x021D6B20
+
+ arm_func_start CTRDGi_PollingSR1MCOMMON
+CTRDGi_PollingSR1MCOMMON: ; 0x020DC268
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, #0x0
+ bl StartFlashTimer
+ ldr r4, _020DC318 ; =0x021D6B10
+_020DC284:
+ bl CheckFlashTimer
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+ cmp r0, r6
+ beq _020DC300
+ ands r0, r0, #0x20
+ beq _020DC2CC
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+_020DC2A8: ; 0x020DC2A8
+ cmp r6, r0
+ beq _020DC300
+ orr r0, r8, #0xa000
+ mov r0, r0, lsl #0x10
+ ldr r1, _020DC31C ; =0x0A005555
+ mov r2, #0xf0
+ strb r2, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+ b _020DC300
+_020DC2CC:
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC284
+ mov r0, r7
+ bl CTRDGi_ReadSrFunc
+_020DC2E0: ; 0x020DC2E0
+ cmp r6, r0
+ beq _020DC300
+ orr r0, r8, #0xc000
+ mov r0, r0, lsl #0x10
+ ldr r1, _020DC31C ; =0x0A005555
+ mov r2, #0xf0
+ strb r2, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+_020DC300:
+ bl CTRDG_IsExisting
+_020DC304: ; 0x020DC304
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ mov r0, r5
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC318: .word 0x021D6B10
+_020DC31C: .word 0x0A005555
+
+ arm_func_start CTRDGi_PollingSR512kCOMMON
+CTRDGi_PollingSR512kCOMMON: ; 0x020DC320
+ stmdb sp!, {r4-r8,lr}
+ mov r4, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, #0x0
+ bl StartFlashTimer
+ ldr r5, _020DC3A8 ; =0x021D6B10
+_020DC33C:
+ mov r0, r8
+ bl CTRDGi_ReadSrFunc
+ cmp r0, r7
+ beq _020DC390
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DC33C
+ mov r0, r8
+ bl CTRDGi_ReadSrFunc
+_020DC360: ; 0x020DC360
+ cmp r7, r0
+ beq _020DC390
+ ldr r0, _020DC3AC ; =0x021D6B20
+ ldr r0, [r0, #0x0]
+ ldrh r0, [r0, #0x18]
+ cmp r0, #0xc2
+ ldreq r0, _020DC3B0 ; =0x0A005555
+ moveq r1, #0xf0
+ streqb r1, [r0, #0x0]
+ orr r0, r4, #0xc000
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+_020DC390:
+ bl CTRDG_IsExisting
+_020DC394: ; 0x020DC394
+ cmp r0, #0x0
+ moveq r6, #0x1000
+ mov r0, r6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DC3A8: .word 0x021D6B10
+_020DC3AC: .word 0x021D6B20
+_020DC3B0: .word 0x0A005555
+
+ arm_func_start CTRDGi_ReadSrFunc
+CTRDGi_ReadSrFunc:
+ ldrb r0, [r0, #0x0]
+ bx lr
+
+ arm_func_start CheckFlashTimer
+CheckFlashTimer: ; 0x020DC3BC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_GetTick
+ ldr r3, _020DC420 ; =0x021D6B44
+ ldr r2, _020DC424 ; =0x000082EA
+ ldr r12, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ subs r12, r0, r12
+ sbc r0, r1, r3
+ mov r1, r0, lsl #0x6
+ orr r1, r1, r12, lsr #0x1a
+ mov r0, r12, lsl #0x6
+ mov r3, #0x0
+ bl _ll_udiv
+ ldr r2, _020DC428 ; =0x021D6B3C
+ ldr r3, [r2, #0x4]
+ ldr r2, [r2, #0x0]
+ cmp r3, r1
+ cmpeq r2, r0
+ ldrls r0, _020DC42C ; =0x021D6B10
+ movls r1, #0x1
+ strlsh r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC420: .word 0x021D6B44
+_020DC424: .word 0x000082EA
+_020DC428: .word 0x021D6B3C
+_020DC42C: .word 0x021D6B10
+
+ arm_func_start StartFlashTimer
+StartFlashTimer: ; 0x020DC430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020DC47C ; =0x021D6B28
+ ldr r2, _020DC480 ; =0x021D6B10
+ mov r3, #0x0
+ ldr r1, [r1, #0x0]
+ strh r3, [r2, #0x0]
+ mov r0, r0, lsl #0x1
+ ldrh r1, [r1, r0]
+ ldr r0, _020DC484 ; =0x021D6B3C
+ str r1, [r0, #0x0]
+ str r3, [r0, #0x4]
+ bl OS_GetTick
+ ldr r2, _020DC488 ; =0x021D6B44
+ str r0, [r2, #0x0]
+ str r1, [r2, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC47C: .word 0x021D6B28
+_020DC480: .word 0x021D6B10
+_020DC484: .word 0x021D6B3C
+_020DC488: .word 0x021D6B44
+
+ arm_func_start CTRDGi_ReadFlashID
+CTRDGi_ReadFlashID: ; 0x020DC48C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020DC590 ; =0x04000208
+ mov r0, #0x0
+ ldrh r2, [r5, #0x0]
+ ldr r1, _020DC594 ; =0x021D6B38
+ ldr r4, _020DC598 ; =0x0A005555
+ strh r0, [r5, #0x0]
+ str r2, [r1, #0x0]
+ mov r3, #0xaa
+ ldr r2, _020DC59C ; =0x0A002AAA
+ strb r3, [r4, #0x0]
+ mov r3, #0x55
+ strb r3, [r2, #0x0]
+ mov r2, #0x90
+ strb r2, [r4, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ strh r1, [r5, #0x0]
+ bl StartFlashTimer
+ ldr r4, _020DC5A0 ; =0x021D6B10
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020DC4FC
+_020DC4EC:
+ bl CheckFlashTimer
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC4EC
+_020DC4FC:
+ ldr r0, _020DC5A4 ; =0x0A000001
+ bl CTRDGi_ReadSrFunc
+ mov r4, r0, lsl #0x18
+ mov r0, #0xa000000
+ bl CTRDGi_ReadSrFunc
+ ldr ip, _020DC590 ; =0x04000208
+ orr r4, r0, r4, lsr #0x10
+ ldrh r2, [r12, #0x0]
+ mov r0, #0x0
+ ldr r1, _020DC594 ; =0x021D6B38
+ strh r0, [r12, #0x0]
+ ldr r5, _020DC598 ; =0x0A005555
+ str r2, [r1, #0x0]
+ mov r3, #0xaa
+ ldr r2, _020DC59C ; =0x0A002AAA
+ strb r3, [r5, #0x0]
+ mov r3, #0x55
+ strb r3, [r2, #0x0]
+ mov r2, #0xf0
+ strb r2, [r5, #0x0]
+ strb r2, [r5, #0x0]
+ ldrh r2, [r12, #0x0]
+ ldr r1, [r1, #0x0]
+ strh r1, [r12, #0x0]
+ bl StartFlashTimer
+ ldr r5, _020DC5A0 ; =0x021D6B10
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ bne _020DC580
+_020DC570:
+ bl CheckFlashTimer
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DC570
+_020DC580:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DC590: .word 0x04000208
+_020DC594: .word 0x021D6B38
+_020DC598: .word 0x0A005555
+_020DC59C: .word 0x0A002AAA
+_020DC5A0: .word 0x021D6B10
+_020DC5A4: .word 0x0A000001
+
+ arm_func_start CTRDGi_SetFlashBankMx
+CTRDGi_SetFlashBankMx: ; 0x020DC5A8
+ ldr r3, _020DC5D4 ; =0x0A005555
+ mov r2, #0xaa
+ ldr r1, _020DC5D8 ; =0x0A002AAA
+ strb r2, [r3, #0x0]
+ mov r2, #0x55
+ strb r2, [r1, #0x0]
+ mov r1, #0xb0
+ strb r1, [r3, #0x0]
+ mov r1, #0xa000000
+ strb r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020DC5D4: .word 0x0A005555
+_020DC5D8: .word 0x0A002AAA
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncAT
+CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC604: .word CTRDGi_WriteFlashSectorCoreAT
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncAT
+CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC630: .word CTRDGi_EraseFlashSectorCoreAT
+
+ arm_func_start CTRDGi_WriteFlashSectorAT
+CTRDGi_WriteFlashSectorAT: ; 0x020DC634
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorAT
+CTRDGi_EraseFlashSectorAT:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlash4KBAsyncAT
+CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT
+
+ arm_func_start CTRDGi_EraseFlash4KBAsyncAT
+CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncAT
+CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DC704: .word CTRDGi_EraseFlashChipCoreAT
+
+ arm_func_start CTRDGi_WriteFlash4KBAT
+CTRDGi_WriteFlash4KBAT: ; 0x020DC708
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlash4KBCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlash4KBAT
+CTRDGi_EraseFlash4KBAT: ; 0x020DC734
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlash4KBCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipAT
+CTRDGi_EraseFlashChipAT: ; 0x020DC75C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreAT
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlash4KBCoreAT
+CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r0, [sp, #0x20]
+ ldr r7, [sp, #0xc]
+ cmp r0, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DC85C ; =0x000080FF
+ ldmcsia sp!, {r4-r9,lr}
+ bxcs lr
+ ldr r1, _020DC860 ; =0x0210400C
+ mov r0, r0, lsl #0x15
+ ldr r1, [r1, #0x24]
+ ldr r4, _020DC864 ; =0x021D6B08
+ mov r8, r0, lsr #0x10
+ strh r1, [r4, #0x0]
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020DC84C
+ ldr r0, _020DC868 ; =0x02104048
+ ldr r6, [r0, #0x24]
+ mov r5, #0x2
+_020DC7F4:
+ mov r9, r5
+_020DC7F8:
+ mov r0, r8
+ mov r1, r7
+ bl CTRDGi_WriteFlashSectorAT
+ movs r12, r0
+ beq _020DC81C
+ sub r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ movs r9, r0, lsr #0x10
+ bne _020DC7F8
+_020DC81C:
+ cmp r12, #0x0
+ bne _020DC84C
+ ldrh r1, [r4, #0x0]
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ sub r1, r1, r6
+ strh r1, [r4, #0x0]
+ ldrh r1, [r4, #0x0]
+ add r7, r7, r6
+ mov r8, r0, lsr #0x10
+ cmp r1, #0x0
+ bne _020DC7F4
+_020DC84C:
+ mov r0, r12
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020DC85C: .word 0x000080FF
+_020DC860: .word 0x0210400C
+_020DC864: .word 0x021D6B08
+_020DC868: .word 0x02104048
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreAT
+CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ add r4, sp, #0x0
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DC984 ; =0x021D6B0C
+ ldr r1, [r5, #0x0]
+ ldrh r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldr r4, [sp, #0xc]
+ bl OS_LockCartridge
+ ldr r5, _020DC988 ; =0x04000204
+ ldr r1, _020DC98C ; =0x021D6B20
+ ldrh r0, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r3, [r1, #0x10]
+ ldr r1, _020DC990 ; =0x02104048
+ bic r2, r2, #0x3
+ orr r2, r2, r3
+ strh r2, [r5, #0x0]
+ ldr r5, _020DC994 ; =0x04000208
+ ldrh lr, [sp, #0x20]
+ ldrh r12, [r1, #0x28]
+ ldrh r2, [r5, #0x0]
+ mov r3, #0x0
+ mov lr, lr, lsl r12
+ strh r3, [r5, #0x0]
+ ldr ip, _020DC998 ; =0x0A005555
+ mov r5, #0xaa
+ strb r5, [r12, #0x0]
+ ldr r3, _020DC99C ; =0x0A002AAA
+ mov r5, #0x55
+ strb r5, [r3, #0x0]
+ mov r3, #0xa0
+ strb r3, [r12, #0x0]
+ ldr r3, [r1, #0x24]
+ and r5, r0, #0x3
+ cmp r3, #0x0
+ add r1, lr, #0xa000000
+ beq _020DC92C
+_020DC91C:
+ ldrb r0, [r4], #0x1
+ subs r3, r3, #0x1
+ strb r0, [r1], #0x1
+ bne _020DC91C
+_020DC92C:
+ ldr ip, _020DC994 ; =0x04000208
+ ldr r3, _020DC9A0 ; =0x021D6B24
+ ldrh r0, [r12, #0x0]
+ sub r1, r1, #0x1
+ mov r0, #0x1
+ strh r2, [r12, #0x0]
+ ldrb r2, [r4, #-0x1]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r3, _020DC988 ; =0x04000204
+ ldr r1, _020DC984 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DC984: .word 0x021D6B0C
+_020DC988: .word 0x04000204
+_020DC98C: .word 0x021D6B20
+_020DC990: .word 0x02104048
+_020DC994: .word 0x04000208
+_020DC998: .word 0x0A005555
+_020DC99C: .word 0x0A002AAA
+_020DC9A0: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlash4KBCoreAT
+CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r0, [sp, #0x20]
+ cmp r0, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DCA54 ; =0x000080FF
+ ldmcsia sp!, {r4-r7,lr}
+ bxcs lr
+ mov r0, r0, lsl #0x15
+ mov r5, r0, lsr #0x10
+ mov r6, #0x0
+ mov r4, #0x2
+_020DC9F4:
+ mov r7, r4
+_020DC9F8:
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorAT
+_020DCA00: ; 0x020DCA00
+ cmp r0, #0x0
+ beq _020DCA18
+ sub r1, r7, #0x1
+ mov r1, r1, lsl #0x10
+ movs r7, r1, lsr #0x10
+ bne _020DC9F8
+_020DCA18:
+ add r1, r5, #0x1
+ mov r1, r1, lsl #0x10
+ cmp r0, #0x0
+ mov r5, r1, lsr #0x10
+ addne sp, sp, #0x24
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ add r1, r6, #0x1
+ mov r1, r1, lsl #0x10
+ mov r6, r1, lsr #0x10
+ cmp r6, #0x20
+ blo _020DC9F4
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DCA54: .word 0x000080FF
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreAT
+CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ ldr r1, _020DCB80 ; =0x02104048
+ str r0, [r4, #0x0]
+ ldr r0, _020DCB84 ; =0x021D6B0C
+ ldrh r2, [sp, #0x20]
+ ldrh r1, [r1, #0x28]
+ ldrh r0, [r0, #0x0]
+ mov r1, r2, lsl r1
+ add r5, r1, #0xa000000
+ bl OS_LockCartridge
+ ldr r4, _020DCB88 ; =0x04000204
+ ldr r1, _020DCB8C ; =0x021D6B20
+ ldrh r0, [r4, #0x0]
+ ldr r2, [r1, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r2, #0x10]
+ ldr r3, _020DCB90 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r2, [r3, #0x0]
+ mov r1, #0x0
+ ldr r4, _020DCB94 ; =0x0A005555
+ strh r1, [r3, #0x0]
+ mov r3, #0xaa
+ strb r3, [r4, #0x0]
+ ldr r1, _020DCB98 ; =0x0A002AAA
+ mov r3, #0x55
+ strb r3, [r1, #0x0]
+ mov r3, #0xa0
+ strb r3, [r4, #0x0]
+ ldr r1, _020DCB80 ; =0x02104048
+ and r4, r0, #0x3
+ ldr r1, [r1, #0x24]
+ cmp r1, #0x0
+ beq _020DCB18
+ mov r0, #0xff
+_020DCB0C:
+ strb r0, [r5], #0x1
+ subs r1, r1, #0x1
+ bne _020DCB0C
+_020DCB18:
+ ldr ip, _020DCB90 ; =0x04000208
+ ldr r3, _020DCB9C ; =0x021D6B24
+ ldrh r0, [r12, #0x0]
+ sub r1, r5, #0x1
+ strh r2, [r12, #0x0]
+ ldr r3, [r3, #0x0]
+ mov r0, #0x1
+ mov r2, #0xff
+ blx r3
+ ldr r2, _020DCB88 ; =0x04000204
+ movs r5, r0
+ ldrh r1, [r2, #0x0]
+ andne r0, r5, #0xff00
+ orrne r0, r0, #0x2
+ movne r0, r0, lsl #0x10
+ bic r1, r1, #0x3
+ movne r5, r0, lsr #0x10
+ orr r1, r1, r4
+ ldr r0, _020DCB84 ; =0x021D6B0C
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r5
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DCB80: .word 0x02104048
+_020DCB84: .word 0x021D6B0C
+_020DCB88: .word 0x04000204
+_020DCB8C: .word 0x021D6B20
+_020DCB90: .word 0x04000208
+_020DCB94: .word 0x0A005555
+_020DCB98: .word 0x0A002AAA
+_020DCB9C: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreAT
+CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DCC7C ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DCC80 ; =0x04000204
+ ldr r0, _020DCC84 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DCC88 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DCC8C ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DCC90 ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DCC94 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DCC98 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DCC80 ; =0x04000204
+ ldr r1, _020DCC7C ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DCC7C: .word 0x021D6B0C
+_020DCC80: .word 0x04000204
+_020DCC84: .word 0x021D6B20
+_020DCC88: .word 0x04000208
+_020DCC8C: .word 0x021D6B38
+_020DCC90: .word 0x0A005555
+_020DCC94: .word 0x0A002AAA
+_020DCC98: .word 0x021D6B24
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncLE
+CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncLE
+CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncLE
+CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DCD18: .word CTRDGi_EraseFlashChipCoreLE
+
+ arm_func_start CTRDGi_WriteFlashSectorLE
+CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorLE
+CTRDGi_EraseFlashSectorLE: ; 0x020DCD48
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipLE
+CTRDGi_EraseFlashChipLE: ; 0x020DCD70
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreLE
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_VerifyFlashErase
+CTRDGi_VerifyFlashErase: ; 0x020DCD94
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020DCE14 ; =0x021D6B0C
+ mov r4, r0
+ ldrh r0, [r2, #0x0]
+ mov r5, r1
+ bl OS_LockCartridge
+ ldr ip, _020DCE18 ; =0x04000204
+ ldr r0, _020DCE1C ; =0x021D6B20
+ ldrh r3, [r12, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r12, #0x0]
+ ldr r2, [r0, #0x10]
+ mov r0, r4
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r12, #0x0]
+ and r6, r3, #0x3
+ mov r4, #0x0
+ blx r5
+ cmp r0, #0x0
+ ldr r2, _020DCE18 ; =0x04000204
+ ldr r0, _020DCE14 ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ ldrne r4, _020DCE20 ; =0x00008004
+ bic r1, r1, #0x3
+ orr r1, r1, r6
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020DCE14: .word 0x021D6B0C
+_020DCE18: .word 0x04000204
+_020DCE1C: .word 0x021D6B20
+_020DCE20: .word 0x00008004
+
+ arm_func_start CTRDGi_VerifyFlashCoreFF
+CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24
+ ldr r1, _020DCE54 ; =0x021D6B20
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x4]
+ cmp r2, #0x0
+ beq _020DCE4C
+_020DCE38:
+ ldrb r1, [r0], #0x1
+ cmp r1, #0xff
+ bne _020DCE4C
+ subs r2, r2, #0x1
+ bne _020DCE38
+_020DCE4C:
+ mov r0, r2
+ bx lr
+ .balign 4
+_020DCE54: .word 0x021D6B20
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreLE
+CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r7, [sp, #0x20]
+ ldr r6, [sp, #0xc]
+ cmp r7, #0x10
+ addcs sp, sp, #0x24
+ ldrhs r0, _020DD018 ; =0x000080FF
+ ldmcsia sp!, {r4-r9,lr}
+ bxcs lr
+ ldr r0, _020DD01C ; =0x021D6B20
+ mov r9, #0x0
+ ldr r0, [r0, #0x0]
+ ldrh r0, [r0, #0x8]
+ mov r0, r7, lsl r0
+ add r4, r0, #0xa000000
+ ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF
+_020DCEB8:
+ mov r0, r7
+ bl CTRDGi_EraseFlashSectorLE
+ movs r8, r0
+ bne _020DCEE0
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_VerifyFlashErase
+ mov r0, r0, lsl #0x10
+ movs r8, r0, lsr #0x10
+ beq _020DCF04
+_020DCEE0:
+ add r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ cmp r9, #0x50
+ mov r9, r0, lsr #0x10
+ bne _020DCEB8
+ add sp, sp, #0x24
+ mov r0, r8
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020DCF04:
+ mov r5, #0x1
+ cmp r9, #0x0
+ movne r5, #0x6
+ cmp r5, #0x1
+ mov r9, #0x1
+ blo _020DCF38
+_020DCF1C:
+ mov r0, r7
+ bl CTRDGi_EraseFlashSectorLE
+ add r0, r9, #0x1
+ mov r0, r0, lsl #0x10
+ mov r9, r0, lsr #0x10
+ cmp r9, r5
+ bls _020DCF1C
+_020DCF38:
+ ldr r0, _020DD024 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r5, _020DD028 ; =0x04000204
+ ldr r1, _020DD01C ; =0x021D6B20
+ ldrh r0, [r5, #0x0]
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r5, #0x0]
+ ldr r3, [r3, #0x10]
+ ldr r7, _020DD02C ; =0x021D6B08
+ bic r2, r2, #0x3
+ orr r2, r2, r3
+ strh r2, [r5, #0x0]
+ ldr r1, [r1, #0x0]
+ ldr sb, _020DD030 ; =0x04000208
+ ldr r1, [r1, #0x4]
+ mov r2, #0x0
+ strh r1, [r7, #0x0]
+ ldrh r3, [r9, #0x0]
+ ldr r1, _020DD034 ; =0x021D6B38
+ and r5, r0, #0x3
+ strh r2, [r9, #0x0]
+ ldrh r0, [r7, #0x0]
+ str r3, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020DCFD4
+_020DCFA0:
+ mov r0, r6
+ mov r1, r4
+ bl CTRDGi_ProgramFlashByteLE
+ movs r8, r0
+ bne _020DCFD4
+ ldrh r0, [r7, #0x0]
+ add r6, r6, #0x1
+ add r4, r4, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r7, #0x0]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x0
+ bne _020DCFA0
+_020DCFD4:
+ ldr r3, _020DD030 ; =0x04000208
+ ldr r0, _020DD034 ; =0x021D6B38
+ ldrh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r2, _020DD028 ; =0x04000204
+ strh r0, [r3, #0x0]
+ ldrh r1, [r2, #0x0]
+ ldr r0, _020DD024 ; =0x021D6B0C
+ bic r1, r1, #0x3
+ orr r1, r1, r5
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r8
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020DD018: .word 0x000080FF
+_020DD01C: .word 0x021D6B20
+_020DD020: .word CTRDGi_VerifyFlashCoreFF
+_020DD024: .word 0x021D6B0C
+_020DD028: .word 0x04000204
+_020DD02C: .word 0x021D6B08
+_020DD030: .word 0x04000208
+_020DD034: .word 0x021D6B38
+
+ arm_func_start CTRDGi_ProgramFlashByteLE
+CTRDGi_ProgramFlashByteLE: ; 0x020DD038
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DD08C ; =0x0A005555
+ mov r3, #0xaa
+ ldr r2, _020DD090 ; =0x0A002AAA
+ strb r3, [r12, #0x0]
+ mov r3, #0x55
+ mov lr, r0
+ strb r3, [r2, #0x0]
+ mov r0, #0xa0
+ strb r0, [r12, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, _020DD094 ; =0x021D6B24
+ mov r0, #0x1
+ strb r2, [r1, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, [r3, #0x0]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD08C: .word 0x0A005555
+_020DD090: .word 0x0A002AAA
+_020DD094: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreLE
+CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, [r5, #0x0]
+ str r0, [r4, #0x0]
+ ldrh r4, [sp, #0x20]
+ cmp r4, #0x10
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD1B8 ; =0x000080FF
+ ldmcsia sp!, {r4-r6,lr}
+ bxcs lr
+ ldr r0, _020DD1BC ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r6, _020DD1C0 ; =0x04000204
+ ldr r1, _020DD1C4 ; =0x021D6B20
+ ldrh r3, [r6, #0x0]
+ ldr r0, [r1, #0x0]
+ ldrh r2, [r6, #0x0]
+ ldr r5, [r0, #0x10]
+ ldr r0, _020DD1C8 ; =0x04000208
+ bic r2, r2, #0x3
+ orr r2, r2, r5
+ strh r2, [r6, #0x0]
+ ldr r1, [r1, #0x0]
+ ldrh r5, [r0, #0x0]
+ ldrh r12, [r1, #0x8]
+ mov r1, #0x0
+ ldr r2, _020DD1CC ; =0x021D6B38
+ strh r1, [r0, #0x0]
+ mov r6, r4, lsl r12
+ ldr lr, _020DD1D0 ; =0x0A005555
+ str r5, [r2, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD1D4 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r1, #0x80
+ strb r1, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ add r1, r6, #0xa000000
+ mov r4, #0x30
+ strb r4, [r1, #0x0]
+ ldrh r4, [r0, #0x0]
+ ldr r4, [r2, #0x0]
+ ldr r2, _020DD1D8 ; =0x021D6B24
+ strh r4, [r0, #0x0]
+ ldr r4, [r2, #0x0]
+ mov r0, #0x2
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD1C0 ; =0x04000204
+ ldr r1, _020DD1BC ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020DD1B8: .word 0x000080FF
+_020DD1BC: .word 0x021D6B0C
+_020DD1C0: .word 0x04000204
+_020DD1C4: .word 0x021D6B20
+_020DD1C8: .word 0x04000208
+_020DD1CC: .word 0x021D6B38
+_020DD1D0: .word 0x0A005555
+_020DD1D4: .word 0x0A002AAA
+_020DD1D8: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreLE
+CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DD2B8 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DD2BC ; =0x04000204
+ ldr r0, _020DD2C0 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DD2C4 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DD2C8 ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DD2CC ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD2D0 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DD2D4 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD2BC ; =0x04000204
+ ldr r1, _020DD2B8 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DD2B8: .word 0x021D6B0C
+_020DD2BC: .word 0x04000204
+_020DD2C0: .word 0x021D6B20
+_020DD2C4: .word 0x04000208
+_020DD2C8: .word 0x021D6B38
+_020DD2CC: .word 0x0A005555
+_020DD2D0: .word 0x0A002AAA
+_020DD2D4: .word 0x021D6B24
+
+ arm_func_start CTRDGi_WriteFlashSectorAsyncMX
+CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD300: .word CTRDGi_WriteFlashSectorCoreMX
+
+ arm_func_start CTRDGi_EraseFlashSectorAsyncMX
+CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ mov r2, r1
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX
+
+ arm_func_start CTRDGi_EraseFlashChipAsyncMX
+CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX
+ mov r2, r0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD354: .word CTRDGi_EraseFlashChipCoreMX
+
+ arm_func_start CTRDGi_WriteFlashSectorMX
+CTRDGi_WriteFlashSectorMX: ; 0x020DD358
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl CTRDGi_WriteFlashSectorCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashSectorMX
+CTRDGi_EraseFlashSectorMX: ; 0x020DD384
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashSectorCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_EraseFlashChipMX
+CTRDGi_EraseFlashChipMX: ; 0x020DD3AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ add r0, sp, #0x0
+ bl CTRDGi_EraseFlashChipCoreMX
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start CTRDGi_WriteFlashSectorCoreMX
+CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD540 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r5, [sp, #0x20]
+ ldrh r0, [r0, #0xa]
+ ldr r4, [sp, #0xc]
+ cmp r5, r0
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD544 ; =0x000080FF
+ ldmcsia sp!, {r4-r8,lr}
+ bxcs lr
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorMX
+ movs r6, r0
+ addne sp, sp, #0x28
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r0, _020DD548 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r7, _020DD54C ; =0x04000204
+ ldr r0, _020DD540 ; =0x021D6B20
+ ldrh r3, [r7, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r7, #0x0]
+ mov r0, r5, lsl #0xc
+ ldr r2, [r2, #0x10]
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ mov r0, r0, lsr #0x10
+ strh r1, [r7, #0x0]
+ and r7, r3, #0x3
+ bl CTRDGi_SetFlashBankMx
+ ldr r0, _020DD540 ; =0x021D6B20
+ and r1, r5, #0xf
+ ldr r3, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ ldr r2, [r3, #0x4]
+ ldr r8, _020DD550 ; =0x021D6B08
+ ldr r1, _020DD554 ; =0x04000208
+ strh r2, [r8, #0x0]
+ ldrh r3, [r3, #0x8]
+ mov r5, r0, lsr #0x10
+ ldrh r2, [r1, #0x0]
+ mov r0, #0x0
+ mov r3, r5, lsl r3
+ strh r0, [r1, #0x0]
+ ldrh r1, [r8, #0x0]
+ ldr r0, _020DD558 ; =0x021D6B38
+ add r5, r3, #0xa000000
+ str r2, [r0, #0x0]
+ cmp r1, #0x0
+ beq _020DD4FC
+_020DD4C8:
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_ProgramFlashByteMX
+ movs r6, r0
+ bne _020DD4FC
+ ldrh r0, [r8, #0x0]
+ add r4, r4, #0x1
+ add r5, r5, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r8, #0x0]
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ bne _020DD4C8
+_020DD4FC:
+ ldr r3, _020DD554 ; =0x04000208
+ ldr r0, _020DD558 ; =0x021D6B38
+ ldrh r1, [r3, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r2, _020DD54C ; =0x04000204
+ strh r0, [r3, #0x0]
+ ldrh r1, [r2, #0x0]
+ ldr r0, _020DD548 ; =0x021D6B0C
+ bic r1, r1, #0x3
+ orr r1, r1, r7
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r6
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DD540: .word 0x021D6B20
+_020DD544: .word 0x000080FF
+_020DD548: .word 0x021D6B0C
+_020DD54C: .word 0x04000204
+_020DD550: .word 0x021D6B08
+_020DD554: .word 0x04000208
+_020DD558: .word 0x021D6B38
+
+ arm_func_start CTRDGi_ProgramFlashByteMX
+CTRDGi_ProgramFlashByteMX: ; 0x020DD55C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DD5B0 ; =0x0A005555
+ mov r3, #0xaa
+ ldr r2, _020DD5B4 ; =0x0A002AAA
+ strb r3, [r12, #0x0]
+ mov r3, #0x55
+ mov lr, r0
+ strb r3, [r2, #0x0]
+ mov r0, #0xa0
+ strb r0, [r12, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, _020DD5B8 ; =0x021D6B24
+ mov r0, #0x1
+ strb r2, [r1, #0x0]
+ ldrb r2, [lr, #0x0]
+ ldr r3, [r3, #0x0]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD5B0: .word 0x0A005555
+_020DD5B4: .word 0x0A002AAA
+_020DD5B8: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashSectorCoreMX
+CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x10
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r4, [sp, #0x30]
+ ldrh r0, [r0, #0xa]
+ cmp r4, r0
+ addcs sp, sp, #0x34
+ ldrhs r0, _020DD74C ; =0x000080FF
+ ldmcsia sp!, {r4-r11,lr}
+ bxcs lr
+ ldr r0, _020DD750 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r5, _020DD754 ; =0x04000204
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldrh r3, [r5, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r5, #0x0]
+ mov r0, r4, lsl #0xc
+ ldr r2, [r2, #0x10]
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r5, #0x0]
+ and r1, r3, #0x3
+ mov r0, r0, lsr #0x10
+ str r1, [sp, #0x0]
+ bl CTRDGi_SetFlashBankMx
+ and r0, r4, #0xf
+ mov r0, r0, lsl #0x10
+ mov r9, r0, lsr #0x10
+ mov r0, #0x2
+ mov r10, #0x0
+ str r0, [sp, #0x8]
+ mov r0, #0xff
+ ldr r8, _020DD758 ; =0x04000208
+ mov r11, r10
+ mov r7, #0xaa
+ mov r6, #0x55
+ mov r5, #0x80
+ mov r4, #0x30
+ str r0, [sp, #0xc]
+_020DD684:
+ ldr r0, _020DD748 ; =0x021D6B20
+ ldrh r12, [r8, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020DD75C ; =0x021D6B38
+ ldrh r1, [r0, #0x8]
+ ldr r0, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ strh r11, [r8, #0x0]
+ str r12, [r3, #0x0]
+ ldr r3, _020DD760 ; =0x0A005555
+ mov r1, r9, lsl r1
+ strb r7, [r3, #0x0]
+ ldr r3, _020DD764 ; =0x0A002AAA
+ add r1, r1, #0xa000000
+ strb r6, [r3, #0x0]
+ ldr r3, _020DD760 ; =0x0A005555
+ strb r5, [r3, #0x0]
+ strb r7, [r3, #0x0]
+ ldr r3, _020DD764 ; =0x0A002AAA
+ strb r6, [r3, #0x0]
+ strb r4, [r1, #0x0]
+ ldrh r3, [r8, #0x0]
+ ldr r3, _020DD75C ; =0x021D6B38
+ ldr r3, [r3, #0x0]
+ strh r3, [r8, #0x0]
+ ldr r3, _020DD768 ; =0x021D6B24
+ ldr r3, [r3, #0x0]
+ blx r3
+ str r0, [sp, #0x4]
+ ands r0, r0, #0xa000
+ beq _020DD714
+ cmp r10, #0x0
+ addeq r0, r10, #0x1
+ moveq r0, r0, lsl #0x10
+ moveq r10, r0, lsr #0x10
+ beq _020DD684
+_020DD714:
+ ldr r2, _020DD754 ; =0x04000204
+ ldr r1, _020DD750 ; =0x021D6B0C
+ ldrh r0, [r2, #0x0]
+ bic r3, r0, #0x3
+ ldr r0, [sp, #0x0]
+ orr r0, r3, r0
+ strh r0, [r2, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ ldr r0, [sp, #0x4]
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020DD748: .word 0x021D6B20
+_020DD74C: .word 0x000080FF
+_020DD750: .word 0x021D6B0C
+_020DD754: .word 0x04000204
+_020DD758: .word 0x04000208
+_020DD75C: .word 0x021D6B38
+_020DD760: .word 0x0A005555
+_020DD764: .word 0x0A002AAA
+_020DD768: .word 0x021D6B24
+
+ arm_func_start CTRDGi_EraseFlashChipCoreMX
+CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020DD848 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r4, _020DD84C ; =0x04000204
+ ldr r0, _020DD850 ; =0x021D6B20
+ ldrh r3, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r0, #0x10]
+ ldr r0, _020DD854 ; =0x04000208
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r4, #0x0]
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020DD858 ; =0x021D6B38
+ strh r2, [r0, #0x0]
+ ldr lr, _020DD85C ; =0x0A005555
+ str r4, [r1, #0x0]
+ mov r5, #0xaa
+ ldr r4, _020DD860 ; =0x0A002AAA
+ strb r5, [lr, #0x0]
+ mov r12, #0x55
+ strb r12, [r4, #0x0]
+ mov r2, #0x80
+ strb r2, [lr, #0x0]
+ strb r5, [lr, #0x0]
+ strb r12, [r4, #0x0]
+ mov r2, #0x10
+ strb r2, [lr, #0x0]
+ ldrh r2, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020DD864 ; =0x021D6B24
+ strh r2, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ mov r0, #0x3
+ mov r1, #0xa000000
+ mov r2, #0xff
+ and r5, r3, #0x3
+ blx r4
+ ldr r3, _020DD84C ; =0x04000204
+ ldr r1, _020DD848 ; =0x021D6B0C
+ ldrh r2, [r3, #0x0]
+ mov r4, r0
+ bic r0, r2, #0x3
+ orr r0, r0, r5
+ strh r0, [r3, #0x0]
+ ldrh r0, [r1, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DD848: .word 0x021D6B0C
+_020DD84C: .word 0x04000204
+_020DD850: .word 0x021D6B20
+_020DD854: .word 0x04000208
+_020DD858: .word 0x021D6B38
+_020DD85C: .word 0x0A005555
+_020DD860: .word 0x0A002AAA
+_020DD864: .word 0x021D6B24
+
+ arm_func_start FUN_020DD868
+FUN_020DD868: ; 0x020DD868
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ str r1, [sp, #0xc]
+ strh r0, [sp, #0x20]
+ ldr r1, _020DD890 ; =FUN_020DD8C0
+ add r0, sp, #0x0
+ bl CTRDGi_SetTask
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DD890: .word FUN_020DD8C0
+
+ arm_func_start FUN_020DD894
+FUN_020DD894: ; 0x020DD894
+ stmdb sp!, {lr}
+ sub sp, sp, #0x24
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ str r1, [sp, #0xc]
+ bl FUN_020DD8C0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x24
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020DD8C0
+FUN_020DD8C0: ; 0x020DD8C0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r5, r0
+ ldmia r5!, {r0-r3}
+ add r4, sp, #0x0
+ stmia r4!, {r0-r3}
+ ldmia r5!, {r0-r3}
+ stmia r4!, {r0-r3}
+ ldr r0, _020DD9E8 ; =0x021D6B20
+ ldr r1, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ str r1, [r4, #0x0]
+ ldrh r5, [sp, #0x20]
+ ldrh r0, [r0, #0xa]
+ ldr r4, [sp, #0xc]
+ cmp r5, r0
+ addcs sp, sp, #0x28
+ ldrhs r0, _020DD9EC ; =0x000080FF
+ ldmcsia sp!, {r4-r8,lr}
+ bxcs lr
+ mov r0, r5
+ bl CTRDGi_EraseFlashSectorLE
+ movs r6, r0
+ addne sp, sp, #0x28
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r0, _020DD9F0 ; =0x021D6B0C
+ ldrh r0, [r0, #0x0]
+ bl OS_LockCartridge
+ ldr r7, _020DD9F4 ; =0x04000204
+ ldr r0, _020DD9E8 ; =0x021D6B20
+ ldrh r3, [r7, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r1, [r7, #0x0]
+ ldr r2, [r2, #0x10]
+ ldr r8, _020DD9F8 ; =0x021D6B08
+ bic r1, r1, #0x3
+ orr r1, r1, r2
+ strh r1, [r7, #0x0]
+ ldr r1, [r0, #0x0]
+ and r7, r3, #0x3
+ ldr r0, [r1, #0x4]
+ strh r0, [r8, #0x0]
+ ldrh r1, [r1, #0x8]
+ ldrh r0, [r8, #0x0]
+ mov r1, r5, lsl r1
+ cmp r0, #0x0
+ add r5, r1, #0xa000000
+ beq _020DD9B8
+_020DD984:
+ mov r0, r4
+ mov r1, r5
+ bl CTRDGi_ProgramFlashByteLE
+ movs r6, r0
+ bne _020DD9B8
+ ldrh r0, [r8, #0x0]
+ add r4, r4, #0x1
+ add r5, r5, #0x1
+ sub r0, r0, #0x1
+ strh r0, [r8, #0x0]
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ bne _020DD984
+_020DD9B8:
+ ldr r2, _020DD9F4 ; =0x04000204
+ ldr r0, _020DD9F0 ; =0x021D6B0C
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x3
+ orr r1, r1, r7
+ strh r1, [r2, #0x0]
+ ldrh r0, [r0, #0x0]
+ bl OS_UnlockCartridge2
+ mov r0, r6
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020DD9E8: .word 0x021D6B20
+_020DD9EC: .word 0x000080FF
+_020DD9F0: .word 0x021D6B0C
+_020DD9F4: .word 0x04000204
+_020DD9F8: .word 0x021D6B08
+
+ arm_func_start CTRDGi_SetTask
+CTRDGi_SetTask: ; 0x020DD9FC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020DDAA8 ; =0x021D6B50
+ mov r7, r0
+ mov r4, r1
+ mov r6, r2
+ ldr r5, [r3, #0x0]
+ bl CTRDGi_IsTaskAvailable
+_020DDA1C: ; 0x020DDA1C
+ cmp r0, #0x0
+ bne _020DDA28
+ bl OS_Terminate
+_020DDA28:
+ ldr r0, _020DDAAC ; =0x021D6B54
+ ldrb r0, [r0, #0x22]
+ cmp r0, #0x0
+ beq _020DDA3C
+ bl OS_Terminate
+_020DDA3C:
+ bl OS_DisableInterrupts
+ mov r1, #0x1
+ strb r1, [r7, #0x22]
+ str r4, [r7, #0x0]
+ add r1, r5, #0xc4
+ cmp r7, r1
+ mov r4, r0
+ ldreq r0, _020DDAA8 ; =0x021D6B50
+ str r6, [r7, #0x4]
+ moveq r1, #0x0
+ streq r1, [r0, #0x0]
+ ldr ip, _020DDAAC ; =0x021D6B54
+ ldmia r7!, {r0-r3}
+ mov r6, r12
+ stmia r12!, {r0-r3}
+ ldmia r7!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [r7, #0x0]
+ mov r0, r5
+ str r1, [r12, #0x0]
+ str r6, [r5, #0xc0]
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DDAA8: .word 0x021D6B50
+_020DDAAC: .word 0x021D6B54
+
+ arm_func_start CTRDGi_TaskThread
+CTRDGi_TaskThread: ; 0x020DDAB0
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ ldr r6, _020DDB94 ; =0x021D6B54
+ ldr r5, _020DDB98 ; =0x021D6B50
+ mov r4, r0
+ add r9, sp, #0x0
+ mov r8, #0x0
+ mov r7, #0x24
+_020DDAD0:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ bl MI_CpuFill8
+ bl OS_DisableInterrupts
+ ldr r1, [r4, #0xc0]
+ mov r10, r0
+ cmp r1, #0x0
+ bne _020DDB08
+_020DDAF4:
+ mov r0, r8
+ bl OS_SleepThread
+ ldr r0, [r4, #0xc0]
+ cmp r0, #0x0
+ beq _020DDAF4
+_020DDB08:
+ ldr lr, [r4, #0xc0]
+ add r12, sp, #0x0
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [lr, #0x0]
+ mov r0, r10
+ str r1, [r12, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r1, [sp, #0x0]
+ cmp r1, #0x0
+ beq _020DDB48
+ mov r0, r9
+ blx r1
+ str r0, [sp, #0x8]
+_020DDB48:
+ bl OS_DisableInterrupts
+ ldr r1, [sp, #0x4]
+ mov r10, r0
+ strb r8, [r6, #0x22]
+ cmp r1, #0x0
+ beq _020DDB68
+ mov r0, r9
+ blx r1
+_020DDB68:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DDB84
+ mov r0, r10
+ str r8, [r4, #0xc0]
+ bl OS_RestoreInterrupts
+ b _020DDAD0
+_020DDB84:
+ bl OS_ExitThread
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020DDB94: .word 0x021D6B54
+_020DDB98: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskInfo
+CTRDGi_InitTaskInfo:
+ ldr ip, _020DDBAC ; =MI_CpuFill8
+ mov r1, #0x0
+ mov r2, #0x24
+ bx r12
+ .balign 4
+_020DDBAC: .word MI_CpuFill8
+
+ arm_func_start CTRDGi_IsTaskAvailable
+CTRDGi_IsTaskAvailable:
+ ldr r0, _020DDBC8 ; =0x021D6B50
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020DDBC8: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskThread
+CTRDGi_InitTaskThread: ; 0x020DDBCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020DDC4C ; =0x021D6B50
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020DDC38
+ add r0, r5, #0xc4
+ str r5, [r1, #0x0]
+ bl CTRDGi_InitTaskInfo
+ ldr r0, _020DDC50 ; =0x021D6B54
+ bl CTRDGi_InitTaskInfo
+_020DDC04: ; 0x020DDC04
+ mov r0, #0x0
+ str r0, [r5, #0xc0]
+ mov r2, #0x400
+ ldr r1, _020DDC54 ; =CTRDGi_TaskThread
+ ldr r3, _020DDC58 ; =0x021D6F78
+ mov r0, r5
+ str r2, [sp, #0x0]
+ mov r2, #0x14
+ str r2, [sp, #0x4]
+ mov r2, r5
+ bl OS_CreateThread
+ mov r0, r5
+ bl OS_WakeupThreadDirect
+_020DDC38:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DDC4C: .word 0x021D6B50
+_020DDC50: .word 0x021D6B54
+_020DDC54: .word CTRDGi_TaskThread
+_020DDC58: .word 0x021D6F78
diff --git a/arm9/asm/DGT_arm9.s b/arm9/asm/DGT_arm9.s
new file mode 100644
index 00000000..d5ef358d
--- /dev/null
+++ b/arm9/asm/DGT_arm9.s
@@ -0,0 +1,1017 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start ProcessBlock
+ProcessBlock: ; 0x020D2798
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ add r3, r0, #0x18
+ ldr r5, [r0, #0x0]
+ ldr r4, [r0, #0x4]
+ ldr lr, [r0, #0x8]
+ ldr r12, [r0, #0xc]
+ ldr r2, _020D2B78 ; =0x02106900
+ mov r8, r3
+ mov r7, #0x0
+_020D27C0:
+ mvn r1, r4
+ and r6, r4, lr
+ and r1, r1, r12
+ orr r1, r6, r1
+ ldr r6, [r8, #0x0]
+ add r1, r5, r1
+ ldr r5, [r2, #0x0]
+ add r1, r6, r1
+ add r5, r5, r1
+ mov r1, r5, lsl #0x7
+ orr r1, r1, r5, lsr #0x19
+ add r5, r4, r1
+ mvn r1, r5
+ and r6, r5, r4
+ and r1, r1, lr
+ orr r1, r6, r1
+ ldr r6, [r8, #0x4]
+ add r1, r12, r1
+ ldr r9, [r2, #0x4]
+ add r1, r6, r1
+ add r6, r9, r1
+ mov r1, r6, lsl #0xc
+ orr r1, r1, r6, lsr #0x14
+ add r12, r5, r1
+ mvn r1, r12
+ and r6, r12, r5
+ and r1, r1, r4
+ orr r6, r6, r1
+ add r1, r8, #0xc
+ ldr r9, [r8, #0x8]
+ add r6, lr, r6
+ add r6, r9, r6
+ ldr r9, [r2, #0x8]
+ ldr r1, [r1, #0x0]
+ add r10, r9, r6
+ add r6, r2, #0xc
+ ldr r6, [r6, #0x0]
+ mov r9, r10, lsl #0x11
+ orr r9, r9, r10, lsr #0xf
+ add lr, r12, r9
+ add r2, r2, #0x10
+ add r8, r8, #0x10
+ and r10, lr, r12
+ mvn r9, lr
+ and r9, r9, r5
+ orr r9, r10, r9
+ add r4, r4, r9
+ add r1, r1, r4
+ add r4, r6, r1
+ mov r1, r4, lsl #0x16
+ orr r1, r1, r4, lsr #0xa
+ add r4, lr, r1
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ blt _020D27C0
+ ldr r6, _020D2B7C ; =0x02106840
+ mov r1, #0x0
+_020D28A4:
+ mvn r7, r12
+ ldr r9, [r6, #0x0]
+ and r8, r4, r12
+ and r7, lr, r7
+ orr r7, r8, r7
+ ldr r8, [r3, r9, lsl #0x2]
+ add r5, r5, r7
+ ldr r7, [r2, #0x0]
+ add r5, r8, r5
+ add r7, r7, r5
+ mov r5, r7, lsl #0x5
+ orr r5, r5, r7, lsr #0x1b
+ add r5, r4, r5
+ mvn r8, lr
+ ldr r7, [r6, #0x4]
+ and r9, r5, lr
+ and r8, r4, r8
+ orr r10, r9, r8
+ mvn r8, r4
+ ldr r9, [r6, #0x8]
+ ldr r11, [r3, r7, lsl #0x2]
+ add r7, r12, r10
+ add r10, r11, r7
+ add r7, r6, #0xc
+ ldr r9, [r3, r9, lsl #0x2]
+ and r8, r5, r8
+ ldr r7, [r7, #0x0]
+ ldr r11, [r2, #0x4]
+ ldr r7, [r3, r7, lsl #0x2]
+ add r11, r11, r10
+ mov r10, r11, lsl #0x9
+ orr r10, r10, r11, lsr #0x17
+ add r12, r5, r10
+ ldr r10, [r2, #0x8]
+ and r11, r12, r4
+ orr r8, r11, r8
+ add r8, lr, r8
+ add r8, r9, r8
+ add r10, r10, r8
+ add r8, r2, #0xc
+ ldr r8, [r8, #0x0]
+ mov r9, r10, lsl #0xe
+ orr r9, r9, r10, lsr #0x12
+ add lr, r12, r9
+ add r2, r2, #0x10
+ add r6, r6, #0x10
+ and r10, lr, r5
+ mvn r9, r5
+ and r9, r12, r9
+ orr r9, r10, r9
+ add r4, r4, r9
+ add r4, r7, r4
+ add r7, r8, r4
+ mov r4, r7, lsl #0x14
+ orr r4, r4, r7, lsr #0xc
+ add r4, lr, r4
+ add r1, r1, #0x1
+ cmp r1, #0x4
+ blt _020D28A4
+ mov r7, #0x0
+_020D2994:
+ ldr r8, [r6, #0x0]
+ eor r1, r4, lr
+ eor r1, r12, r1
+ add r1, r5, r1
+ ldr r8, [r3, r8, lsl #0x2]
+ ldr r5, [r2, #0x0]
+ add r1, r8, r1
+ add r5, r5, r1
+ mov r1, r5, lsl #0x4
+ orr r1, r1, r5, lsr #0x1c
+ add r5, r4, r1
+ ldr r8, [r6, #0x4]
+ eor r1, r5, r4
+ eor r1, lr, r1
+ ldr r8, [r3, r8, lsl #0x2]
+ add r1, r12, r1
+ ldr r9, [r6, #0x8]
+ ldr r10, [r2, #0x4]
+ add r1, r8, r1
+ add r8, r10, r1
+ mov r1, r8, lsl #0xb
+ orr r1, r1, r8, lsr #0x15
+ add r12, r5, r1
+ eor r8, r12, r5
+ eor r8, r4, r8
+ ldr r9, [r3, r9, lsl #0x2]
+ add r8, lr, r8
+ add r9, r9, r8
+ ldr r10, [r2, #0x8]
+ add r1, r2, #0xc
+ ldr r8, [r6, #0xc]
+ add r10, r10, r9
+ ldr r9, [r3, r8, lsl #0x2]
+ mov r8, r10, lsl #0x10
+ orr r8, r8, r10, lsr #0x10
+ add lr, r12, r8
+ eor r8, lr, r12
+ eor r8, r5, r8
+ add r4, r4, r8
+ add r7, r7, #0x1
+ ldr r1, [r1, #0x0]
+ add r4, r9, r4
+ add r4, r1, r4
+ mov r1, r4, lsl #0x17
+ orr r1, r1, r4, lsr #0x9
+ add r2, r2, #0x10
+ add r6, r6, #0x10
+ add r4, lr, r1
+ cmp r7, #0x4
+ blt _020D2994
+ mov r10, #0x0
+_020D2A60:
+ mvn r1, r12
+ ldr r7, [r6, #0x0]
+ orr r1, r4, r1
+ eor r1, lr, r1
+ ldr r7, [r3, r7, lsl #0x2]
+ add r1, r5, r1
+ ldr r5, [r2, #0x0]
+ add r1, r7, r1
+ add r5, r5, r1
+ mov r1, r5, lsl #0x6
+ orr r1, r1, r5, lsr #0x1a
+ add r5, r4, r1
+ mvn r1, lr
+ ldr r7, [r6, #0x4]
+ orr r1, r5, r1
+ eor r1, r4, r1
+ ldr r8, [r6, #0x8]
+ ldr r7, [r3, r7, lsl #0x2]
+ add r1, r12, r1
+ ldr r9, [r2, #0x4]
+ add r1, r7, r1
+ add r9, r9, r1
+ mov r7, r9, lsl #0xa
+ add r1, r6, #0xc
+ orr r9, r7, r9, lsr #0x16
+ ldr r1, [r1, #0x0]
+ add r7, r2, #0xc
+ add r12, r5, r9
+ ldr r8, [r3, r8, lsl #0x2]
+ ldr r7, [r7, #0x0]
+ ldr r1, [r3, r1, lsl #0x2]
+ ldr r9, [r2, #0x8]
+ mvn r11, r4
+ orr r11, r12, r11
+ eor r11, r5, r11
+ add r11, lr, r11
+ add r8, r8, r11
+ add r9, r9, r8
+ mov r8, r9, lsl #0xf
+ orr r8, r8, r9, lsr #0x11
+ add lr, r12, r8
+ add r2, r2, #0x10
+ add r6, r6, #0x10
+ mvn r8, r5
+ orr r8, lr, r8
+ eor r8, r12, r8
+ add r4, r4, r8
+ add r1, r1, r4
+ add r4, r7, r1
+ mov r1, r4, lsl #0x15
+ orr r1, r1, r4, lsr #0xb
+ add r4, lr, r1
+ add r10, r10, #0x1
+ cmp r10, #0x4
+ blt _020D2A60
+ ldr r1, [r0, #0x0]
+ add r1, r1, r5
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, r4
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, lr
+ str r1, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ add r1, r1, r12
+ str r1, [r0, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D2B78: .word Unk_02106900 ; = 0x02106900
+_020D2B7C: .word Unk_02106840 ; = 0x02106840
+
+ arm_func_start DGT_Hash1GetDigest_R
+DGT_Hash1GetDigest_R: ; 0x020D2B80
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldr r1, [r6, #0x14]
+ ldr r3, [r6, #0x10]
+ mov r7, r0
+ mov r4, r1, lsl #0x3
+ ldr r1, _020D2C40 ; =0x0210683C
+ mov r0, r6
+ mov r2, #0x1
+ orr r4, r4, r3, lsr #0x1d
+ mov r5, r3, lsl #0x3
+ bl DGT_Hash1SetSource
+ ldr r0, [r6, #0x10]
+ mov r1, #0x0
+ and r3, r0, #0x3f
+ rsb r2, r3, #0x40
+ cmp r2, #0x8
+ bhs _020D2BE8
+ add r0, r6, #0x18
+ add r0, r0, r3
+ bl MI_CpuFill8
+ mov r0, r6
+ bl ProcessBlock
+ mov r3, #0x0
+ mov r2, #0x40
+_020D2BE8:
+ cmp r2, #0x8
+ bls _020D2C04
+ add r0, r6, #0x18
+ add r0, r0, r3
+ sub r2, r2, #0x8
+ mov r1, #0x0
+ bl MI_CpuFill8
+_020D2C04:
+ str r5, [r6, #0x50]
+ mov r0, r6
+ str r4, [r6, #0x54]
+ bl ProcessBlock
+ mov r0, r6
+ mov r1, r7
+ mov r2, #0x10
+ bl MI_CpuCopy8
+ mov r0, r6
+ mov r1, #0x0
+ mov r2, #0x58
+ bl MI_CpuFill8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D2C40: .word Unk_0210683C ; = 0x0210683C
+
+ arm_func_start DGT_Hash1SetSource
+DGT_Hash1SetSource: ; 0x020D2C44
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ add r12, r8, #0x10
+ ldr r4, [r8, #0x10]
+ mov r6, r2
+ and r3, r4, #0x3f
+ ldr r0, [r12, #0x4]
+ adds r4, r4, r6
+ str r4, [r8, #0x10]
+ adc r0, r0, #0x0
+ rsb r5, r3, #0x40
+ mov r7, r1
+ str r0, [r12, #0x4]
+ cmp r5, r6
+ bls _020D2CB0
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ add r1, r8, #0x18
+ mov r0, r7
+ add r1, r1, r3
+ bl MI_CpuCopy8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020D2CB0:
+ add r1, r8, #0x18
+ mov r0, r7
+ mov r2, r5
+ add r1, r1, r3
+ bl MI_CpuCopy8
+ mov r0, r8
+ bl ProcessBlock
+ sub r6, r6, r5
+ mov r4, r6, lsr #0x6
+ cmp r4, #0x0
+ add r9, r7, r5
+ ble _020D2D10
+ add r7, r8, #0x18
+ mov r5, #0x40
+_020D2CE8:
+ mov r0, r9
+ mov r1, r7
+ mov r2, r5
+ bl MI_CpuCopy8
+ mov r0, r8
+ add r9, r9, #0x40
+ bl ProcessBlock
+ sub r4, r4, #0x1
+ cmp r4, #0x0
+ bgt _020D2CE8
+_020D2D10:
+ ands r2, r6, #0x3f
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, r9
+ add r1, r8, #0x18
+ bl MI_CpuCopy8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start DGT_Hash1Reset
+DGT_Hash1Reset: ; 0x020D2D38
+ ldr r2, _020D2D68 ; =0x67452301
+ ldr r1, _020D2D6C ; =0xEFCDAB89
+ str r2, [r0, #0x0]
+ ldr r2, _020D2D70 ; =0x98BADCFE
+ str r1, [r0, #0x4]
+ ldr r1, _020D2D74 ; =0x10325476
+ str r2, [r0, #0x8]
+ str r1, [r0, #0xc]
+ mov r1, #0x0
+ str r1, [r0, #0x10]
+ str r1, [r0, #0x14]
+ bx lr
+ .balign 4
+_020D2D68: .word 0x67452301
+_020D2D6C: .word 0xEFCDAB89
+_020D2D70: .word 0x98BADCFE
+_020D2D74: .word 0x10325476
+
+ arm_func_start MATH_CalcHMACSHA1
+MATH_CalcHMACSHA1: ; 0x020D2D78
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0xa0
+ ldr lr, _020D2E00 ; =0x02106A04
+ add r12, sp, #0x1c
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ mov r4, r12
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr, {r0-r2}
+ stmia r12, {r0-r2}
+ add lr, sp, #0x38
+ add r12, sp, #0x8
+ str lr, [sp, #0x24]
+ ldr lr, _020D2E04 ; =MATH_SHA1Init
+ str r12, [sp, #0x28]
+ ldr ip, _020D2E08 ; =MATH_SHA1Update
+ str lr, [sp, #0x2c]
+ ldr lr, _020D2E0C ; =MATH_SHA1GetHash
+ str r12, [sp, #0x30]
+ ldr r12, [sp, #0xb8]
+ str lr, [sp, #0x34]
+ str r12, [sp, #0x0]
+ mov r3, r5
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ str r4, [sp, #0x4]
+ bl MATHi_CalcHMAC
+ add sp, sp, #0xa0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D2E00: .word Unk_02106A04 ; = 0x02106A04
+_020D2E04: .word MATH_SHA1Init
+_020D2E08: .word MATH_SHA1Update
+_020D2E0C: .word MATH_SHA1GetHash
+
+ arm_func_start MATH_SHA1GetHash
+MATH_SHA1GetHash: ; 0x020D2E10
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, [sp, #0x10]
+ mov r6, r1
+ ldr r3, [r0, #0x1c]
+ add r5, r0, #0x20
+ ands r1, r3, #0x3
+ mov r0, r3, asr #0x2
+ moveq r1, #0x0
+ streq r1, [r5, r0, lsl #0x2]
+ ldr r2, [sp, #0x10]
+ mov r1, #0x80
+ add r4, r2, #0x20
+ strb r1, [r4, r3]
+ add r3, r3, #0x1
+ ands r1, r3, #0x3
+ beq _020D2E68
+ mov r2, #0x0
+_020D2E58:
+ strb r2, [r4, r3]
+ add r3, r3, #0x1
+ ands r1, r3, #0x3
+ bne _020D2E58
+_020D2E68:
+ ldr r1, [sp, #0x10]
+ add r0, r0, #0x1
+ ldr r1, [r1, #0x1c]
+ cmp r1, #0x38
+ blt _020D2EB4
+ cmp r0, #0x10
+ bge _020D2E98
+ mov r1, #0x0
+_020D2E88:
+ str r1, [r5, r0, lsl #0x2]
+ add r0, r0, #0x1
+ cmp r0, #0x10
+ blt _020D2E88
+_020D2E98:
+ ldr r1, _020D3008 ; =0x02106A00
+ ldr r0, [sp, #0x10]
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ blx r3
+ mov r0, #0x0
+_020D2EB4:
+ cmp r0, #0xe
+ bge _020D2ED0
+ mov r1, #0x0
+_020D2EC0:
+ str r1, [r5, r0, lsl #0x2]
+ add r0, r0, #0x1
+ cmp r0, #0xe
+ blt _020D2EC0
+_020D2ED0:
+ ldr r0, [sp, #0x10]
+ mov r1, r5
+ ldr r2, [r0, #0x14]
+ ldr r3, _020D3008 ; =0x02106A00
+ strb r2, [r4, #0x3f]
+ mov r0, r2, lsr #0x8
+ strb r0, [r4, #0x3e]
+ mov r0, r2, lsr #0x10
+ strb r0, [r4, #0x3d]
+ mov r0, r2, lsr #0x18
+ strb r0, [r4, #0x3c]
+ ldr r0, [sp, #0x10]
+ mov r2, #0x40
+ ldr r5, [r0, #0x18]
+ strb r5, [r4, #0x3b]
+ mov r0, r5, lsr #0x8
+ strb r0, [r4, #0x3a]
+ mov r0, r5, lsr #0x10
+ strb r0, [r4, #0x39]
+ mov r0, r5, lsr #0x18
+ strb r0, [r4, #0x38]
+ ldr r0, [sp, #0x10]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r0, [sp, #0x10]
+ add r1, sp, #0x10
+ ldr r3, [r0, #0x0]
+ mov r0, #0x0
+ mov r2, r3, lsr #0x18
+ strb r2, [r6, #0x0]
+ mov r2, r3, lsr #0x10
+ strb r2, [r6, #0x1]
+ mov r2, r3, lsr #0x8
+ strb r2, [r6, #0x2]
+ strb r3, [r6, #0x3]
+ ldr r3, [sp, #0x10]
+ mov r2, #0x4
+ ldr r4, [r3, #0x4]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x4]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x5]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0x6]
+ strb r4, [r6, #0x7]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0x8]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x8]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x9]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0xa]
+ strb r4, [r6, #0xb]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0xc]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0xc]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0xd]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0xe]
+ strb r4, [r6, #0xf]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0x10]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x10]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x11]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0x12]
+ strb r4, [r6, #0x13]
+ ldr r3, [sp, #0x10]
+ str r0, [r3, #0x1c]
+ bl MIi_CpuClear32
+ ldmia sp!, {r4-r6,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020D3008: .word Unk_02106A00 ; = 0x02106A00
+
+ arm_func_start MATH_SHA1Update
+MATH_SHA1Update: ; 0x020D300C
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ movs r6, r2
+ mov r7, r1
+ add r5, r8, #0x20
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r8, #0x14]
+ add r1, r0, r6, lsl #0x3
+ cmp r1, r0
+ ldrcc r0, [r8, #0x18]
+ addcc r0, r0, #0x1
+ strcc r0, [r8, #0x18]
+ ldr r0, [r8, #0x18]
+ add r0, r0, r6, lsr #0x1d
+ str r0, [r8, #0x18]
+ str r1, [r8, #0x14]
+ ldr r1, [r8, #0x1c]
+ cmp r1, #0x0
+ beq _020D30CC
+ add r0, r1, r6
+ cmp r0, #0x40
+ blo _020D30A8
+ rsb r4, r1, #0x40
+ mov r0, r7
+ mov r2, r4
+ add r1, r5, r1
+ bl MI_CpuCopy8
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ sub r6, r6, r4
+ add r7, r7, r4
+ blx r3
+ mov r0, #0x0
+ str r0, [r8, #0x1c]
+ b _020D30CC
+_020D30A8:
+ mov r0, r7
+ mov r2, r6
+ add r1, r5, r1
+ bl MI_CpuCopy8
+ ldr r0, [r8, #0x1c]
+ add r0, r0, r6
+ str r0, [r8, #0x1c]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020D30CC:
+ cmp r6, #0x40
+ blo _020D313C
+ bic r4, r6, #0x3f
+ sub r6, r6, r4
+ ands r0, r7, #0x3
+ bne _020D3104
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r7
+ mov r2, r4
+ blx r3
+ add r7, r7, r4
+ b _020D313C
+_020D3104:
+ mov r0, r7
+ mov r1, r5
+ mov r2, #0x40
+ bl MI_CpuCopy8
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ add r7, r7, #0x40
+ blx r3
+ sub r4, r4, #0x40
+ cmp r4, #0x0
+ bgt _020D3104
+_020D313C:
+ str r6, [r8, #0x1c]
+ cmp r6, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, r7
+ mov r1, r5
+ mov r2, r6
+ bl MI_CpuCopy8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D3164: .word Unk_02106A00 ; = 0x02106A00
+
+ arm_func_start MATH_SHA1Init
+MATH_SHA1Init: ; 0x020D3168
+ ldr r1, _020D31A4 ; =0x67452301
+ ldr r2, _020D31A8 ; =0xEFCDAB89
+ str r1, [r0, #0x0]
+ ldr r1, _020D31AC ; =0x98BADCFE
+ str r2, [r0, #0x4]
+ ldr r2, _020D31B0 ; =0x10325476
+ str r1, [r0, #0x8]
+ ldr r1, _020D31B4 ; =0xC3D2E1F0
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x10]
+ mov r1, #0x0
+ str r1, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r1, [r0, #0x1c]
+ bx lr
+ .balign 4
+_020D31A4: .word 0x67452301
+_020D31A8: .word 0xEFCDAB89
+_020D31AC: .word 0x98BADCFE
+_020D31B0: .word 0x10325476
+_020D31B4: .word 0xC3D2E1F0
+
+ arm_func_start MATHi_CalcHMAC
+MATHi_CalcHMAC: ; 0x020D31B8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc4
+ ldr r5, [sp, #0xe0]
+ ldr r4, [sp, #0xe4]
+ movs r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r8, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r7, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r6, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r5, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r4, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, [r4, #0x4]
+ cmp r5, r0
+ ble _020D3278
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r3, [r4, #0x14]
+ mov r1, r6
+ mov r2, r5
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x18]
+ add r1, sp, #0x0
+ blx r2
+ ldr r5, [r4, #0x0]
+ add r6, sp, #0x0
+_020D3278:
+ cmp r5, #0x0
+ mov r0, #0x0
+ ble _020D32A0
+ add r2, sp, #0x40
+_020D3288:
+ ldrb r1, [r6, r0]
+ add r0, r0, #0x1
+ cmp r0, r5
+ eor r1, r1, #0x36
+ strb r1, [r2], #0x1
+ blt _020D3288
+_020D32A0:
+ ldr r1, [r4, #0x4]
+ cmp r0, r1
+ bge _020D32CC
+ add r1, sp, #0x40
+ add r3, r1, r0
+ mov r2, #0x36
+_020D32B8:
+ strb r2, [r3], #0x1
+ ldr r1, [r4, #0x4]
+ add r0, r0, #0x1
+ cmp r0, r1
+ blt _020D32B8
+_020D32CC:
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x4]
+ ldr r3, [r4, #0x14]
+ add r1, sp, #0x40
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r3, [r4, #0x14]
+ mov r1, r8
+ mov r2, r7
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x18]
+ blx r2
+ cmp r5, #0x0
+ mov r2, #0x0
+ ble _020D3338
+ add r1, sp, #0x80
+_020D3320:
+ ldrb r0, [r6, r2]
+ add r2, r2, #0x1
+ cmp r2, r5
+ eor r0, r0, #0x5c
+ strb r0, [r1], #0x1
+ blt _020D3320
+_020D3338:
+ ldr r0, [r4, #0x4]
+ cmp r2, r0
+ bge _020D3364
+ add r0, sp, #0x80
+ add r3, r0, r2
+ mov r1, #0x5c
+_020D3350:
+ strb r1, [r3], #0x1
+ ldr r0, [r4, #0x4]
+ add r2, r2, #0x1
+ cmp r2, r0
+ blt _020D3350
+_020D3364:
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x4]
+ ldr r3, [r4, #0x14]
+ add r1, sp, #0x80
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x0]
+ ldr r3, [r4, #0x14]
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x18]
+ mov r1, r9
+ blx r2
+ add sp, sp, #0xc4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020D33B4: .word 0x00FF00FF
+_020D33B8: .word 0x5A827999
+_020D33BC: .word 0x6ED9EBA1
+_020D33C0: .word 0x8F1BBCDC
+_020D33C4: .word 0xCA62C1D6
+
+ arm_func_start DGTi_hash2_arm4_small
+DGTi_hash2_arm4_small: ; 0x020D33C8
+ stmdb sp!, {r4-r12,lr}
+ ldmia r0, {r3,r9-r12}
+ sub sp, sp, #0x84
+ str r2, [sp, #0x80]
+_020D33D8:
+ ldr r8, _020D33B8 ; =0x5A827999
+ ldr r7, _020D33B4 ; =0x00FF00FF
+ mov r6, sp
+ mov r5, #0x0
+_020D33E8:
+ ldr r4, [r1], #0x4
+ add r2, r8, r12
+ add r2, r2, r3, ror #0x1B
+ and lr, r4, r7
+ and r4, r7, r4, ror #0x18
+ orr r4, r4, lr, ror #0x8
+ str r4, [r6, #0x40]
+ str r4, [r6], #0x4
+ add r2, r2, r4
+ eor r4, r10, r11
+ and r4, r4, r9
+ eor r4, r4, r11
+ add r2, r2, r4
+ mov r9, r9, ror #0x2
+ mov r12, r11
+ mov r11, r10
+ mov r10, r9
+ mov r9, r3
+ mov r3, r2
+ add r5, r5, #0x4
+ cmp r5, #0x40
+ blt _020D33E8
+ mov r7, #0x0
+ mov r6, sp
+_020D3448:
+ ldr r2, [r6, #0x0]
+ ldr r5, [r6, #0x8]
+ ldr r4, [r6, #0x20]
+ ldr lr, [r6, #0x34]
+ eor r2, r2, r5
+ eor r4, r4, lr
+ eor r2, r2, r4
+ mov r2, r2, ror #0x1F
+ str r2, [r6, #0x40]
+ str r2, [r6], #0x4
+ add r2, r2, r12
+ add r2, r2, r8
+ add r2, r2, r3, ror #0x1B
+ eor r4, r10, r11
+ and r4, r4, r9
+ eor r4, r4, r11
+ add r2, r2, r4
+ mov r9, r9, ror #0x2
+ mov r12, r11
+ mov r11, r10
+ mov r10, r9
+ mov r9, r3
+ mov r3, r2
+ add r7, r7, #0x4
+ cmp r7, #0x10
+ blt _020D3448
+ ldr r8, _020D33BC ; =0x6ED9EBA1
+ mov r7, #0x0
+_020D34B8:
+ ldr r2, [r6, #0x0]
+ ldr r4, [r6, #0x8]
+ ldr lr, [r6, #0x20]
+ ldr r5, [r6, #0x34]
+ eor r2, r2, r4
+ eor lr, lr, r5
+ eor r2, r2, lr
+ mov r2, r2, ror #0x1F
+ str r2, [r6, #0x40]
+ str r2, [r6], #0x4
+ add r2, r2, r12
+ add r2, r2, r8
+ add r2, r2, r3, ror #0x1B
+ eor lr, r9, r10
+ eor lr, lr, r11
+ add r2, r2, lr
+ mov r9, r9, ror #0x2
+ mov r12, r11
+ mov r11, r10
+ mov r10, r9
+ mov r9, r3
+ mov r3, r2
+ add r7, r7, #0x1
+ cmp r7, #0xc
+ moveq r6, sp
+ cmp r7, #0x14
+ blt _020D34B8
+ ldr r8, _020D33C0 ; =0x8F1BBCDC
+ mov r7, #0x0
+_020D352C:
+ ldr r2, [r6, #0x0]
+ ldr lr, [r6, #0x8]
+ ldr r5, [r6, #0x20]
+ ldr r4, [r6, #0x34]
+ eor r2, r2, lr
+ eor r5, r5, r4
+ eor r2, r2, r5
+ mov r2, r2, ror #0x1F
+ str r2, [r6, #0x40]
+ str r2, [r6], #0x4
+ add r2, r2, r12
+ add r2, r2, r8
+ add r2, r2, r3, ror #0x1B
+ orr r5, r9, r10
+ and r5, r5, r11
+ and r4, r9, r10
+ orr r5, r5, r4
+ add r2, r2, r5
+ mov r9, r9, ror #0x2
+ mov r12, r11
+ mov r11, r10
+ mov r10, r9
+ mov r9, r3
+ mov r3, r2
+ add r7, r7, #0x1
+ cmp r7, #0x8
+ moveq r6, sp
+ cmp r7, #0x14
+ blt _020D352C
+ ldr r8, _020D33C4 ; =0xCA62C1D6
+ mov r7, #0x0
+_020D35A8:
+ ldr r2, [r6, #0x0]
+ ldr r5, [r6, #0x8]
+ ldr r4, [r6, #0x20]
+ ldr lr, [r6, #0x34]
+ eor r2, r2, r5
+ eor r4, r4, lr
+ eor r2, r2, r4
+ mov r2, r2, ror #0x1F
+ str r2, [r6, #0x40]
+ str r2, [r6], #0x4
+ add r2, r2, r12
+ add r2, r2, r8
+ add r2, r2, r3, ror #0x1B
+ eor r4, r9, r10
+ eor r4, r4, r11
+ add r2, r2, r4
+ mov r9, r9, ror #0x2
+ mov r12, r11
+ mov r11, r10
+ mov r10, r9
+ mov r9, r3
+ mov r3, r2
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ moveq r6, sp
+ cmp r7, #0x14
+ blt _020D35A8
+ ldmia r0, {r2,r4,r6-r7,lr}
+ add r3, r3, r2
+ add r9, r9, r4
+ add r10, r10, r6
+ add r11, r11, r7
+ add r12, r12, lr
+ stmia r0, {r3,r9-r12}
+ ldr lr, [sp, #0x80]
+ subs lr, lr, #0x40
+ str lr, [sp, #0x80]
+ bgt _020D33D8
+ add sp, sp, #0x84
+ ldmia sp!, {r4-r12,pc}
diff --git a/arm9/asm/FS_arm9.s b/arm9/asm/FS_arm9.s
new file mode 100644
index 00000000..8fcbff7a
--- /dev/null
+++ b/arm9/asm/FS_arm9.s
@@ -0,0 +1,3011 @@
+ .include "asm/macros.inc
+ .include "global.inc"
+ .section .text
+
+ arm_func_start FSi_TranslateCommand
+FSi_TranslateCommand:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r0, [r8, #0xc]
+ mov r7, r1
+ mov r1, #0x1
+ ldr r5, [r8, #0x8]
+ mov r4, r1, lsl r7
+ ands r0, r0, #0x4
+ moveq r1, #0x0
+ cmp r1, #0x0
+ ldrne r0, [r5, #0x1c]
+ orrne r0, r0, #0x200
+ strne r0, [r5, #0x1c]
+ ldreq r0, [r5, #0x1c]
+ orreq r0, r0, #0x100
+ streq r0, [r5, #0x1c]
+ ldr r0, [r5, #0x58]
+ ands r0, r0, r4
+ beq _020CFFE4
+ ldr r2, [r5, #0x54]
+ mov r0, r8
+ mov r1, r7
+ blx r2
+ mov r6, r0
+ cmp r6, #0x8
+ addls pc, pc, r6, lsl #0x2
+ b _020CFFE8
+_020CFFA0:
+ b _020CFFC4
+ b _020CFFC4
+ b _020CFFE8
+ b _020CFFE8
+ b _020CFFC4
+ b _020CFFE8
+ b _020CFFE8
+ b _020CFFE8
+ b _020CFFCC
+_020CFFC4:
+ str r6, [r8, #0x14]
+ b _020CFFE8
+_020CFFCC:
+ ldr r1, [r5, #0x58]
+ mvn r0, r4
+ and r0, r1, r0
+ str r0, [r5, #0x58]
+ mov r6, #0x7
+ b _020CFFE8
+_020CFFE4:
+ mov r6, #0x7
+_020CFFE8:
+ cmp r6, #0x7
+ bne _020D0004
+ ldr r1, _020D00AC ; =0x02103F80
+ mov r0, r8
+ ldr r1, [r1, r7, lsl #0x2]
+ blx r1
+ mov r6, r0
+_020D0004:
+ cmp r6, #0x6
+ bne _020D0060
+ ldr r0, [r8, #0xc]
+ ands r0, r0, #0x4
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020D00A0
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x1c]
+ mov r4, r0
+ ands r0, r1, #0x200
+ beq _020D0050
+ add r6, r5, #0xc
+_020D003C:
+ mov r0, r6
+ bl OS_SleepThread
+ ldr r0, [r5, #0x1c]
+ ands r0, r0, #0x200
+ bne _020D003C
+_020D0050:
+ mov r0, r4
+ ldr r6, [r8, #0x14]
+ bl OS_RestoreInterrupts
+ b _020D00A0
+_020D0060:
+ ldr r0, [r8, #0xc]
+ ands r0, r0, #0x4
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ ldrne r0, [r5, #0x1c]
+ bicne r0, r0, #0x200
+ strne r0, [r5, #0x1c]
+ strne r6, [r8, #0x14]
+ bne _020D00A0
+ ldr r1, [r5, #0x1c]
+ mov r0, r8
+ bic r2, r1, #0x100
+ mov r1, r6
+ str r2, [r5, #0x1c]
+ bl FSi_ReleaseCommand
+_020D00A0:
+ mov r0, r6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D00AC: .word 0x02103F80
+
+ arm_func_start FSi_ReleaseCommand
+FSi_ReleaseCommand:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x0]
+ mov r4, r0
+ ldr r0, [r6, #0x4]
+ cmp r1, #0x0
+ strne r0, [r1, #0x4]
+ cmp r0, #0x0
+ strne r1, [r0, #0x0]
+ mov r0, #0x0
+ str r0, [r6, #0x0]
+ ldr r1, [r6, #0x0]
+ add r0, r6, #0x18
+ str r1, [r6, #0x4]
+ ldr r1, [r6, #0xc]
+ bic r1, r1, #0x4f
+ str r1, [r6, #0xc]
+ str r5, [r6, #0x14]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FSi_CloseFileCommand
+FSi_CloseFileCommand: ; 0x020D0114
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FSi_OpenFileDirectCommand
+FSi_OpenFileDirectCommand: ; 0x020D011C
+ ldr r1, [r0, #0x30]
+ str r1, [r0, #0x24]
+ ldr r1, [r0, #0x30]
+ str r1, [r0, #0x2c]
+ ldr r1, [r0, #0x34]
+ str r1, [r0, #0x28]
+ ldr r1, [r0, #0x38]
+ str r1, [r0, #0x20]
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FSi_OpenFileFastCommand
+FSi_OpenFileFastCommand: ; 0x020D0144
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ ldr r1, [r5, #0x8]
+ ldr r4, [r5, #0x34]
+ ldr r0, [r1, #0x30]
+ mov r2, r4, lsl #0x3
+ cmp r2, r0
+ addcs sp, sp, #0x14
+ movcs r0, #0x1
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ str r1, [sp, #0x8]
+ ldr r1, [r1, #0x2c]
+ add r0, sp, #0x8
+ add r3, r1, r2
+ add r1, sp, #0x0
+ mov r2, #0x8
+ str r3, [sp, #0xc]
+ bl FSi_ReadTable
+_020D0194:
+ cmp r0, #0
+ addne sp, sp, #0x14
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r1, [sp]
+ mov r0, r5
+ str r1, [r5, #0x30]
+ ldr r2, [sp, #0x4]
+ mov r1, #7
+ str r2, [r5, #0x34]
+ str r4, [r5, #0x38]
+ bl FSi_TranslateCommand
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FSi_GetPathCommand
+FSi_GetPathCommand: ; 0x020D01D0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xe4
+ mov r4, r0
+ ldr r1, [r4, #0x8]
+ add r0, sp, #0x98
+ add r11, r4, #0x30
+ str r1, [sp, #0x0]
+ bl FS_InitFile
+ ldr r0, [r4, #0x8]
+ str r0, [sp, #0xa0]
+ ldr r0, [r4, #0xc]
+ ands r0, r0, #0x20
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ ldrneh r5, [r4, #0x24]
+ movne r4, #0x10000
+ bne _020D02BC
+ ldrh r0, [r11, #0x8]
+ ldr r4, [r4, #0x20]
+ cmp r0, #0x0
+ ldrneh r5, [r11, #0xa]
+ bne _020D02BC
+ mov r10, #0x0
+ mov r9, r10
+ mov r5, #0x10000
+ add r8, sp, #0x98
+ mov r6, #0x3
+ mov r7, #0x1
+_020D0244:
+ mov r0, r8
+ mov r1, r10
+ bl FSi_SeekDirDirect
+ add r2, sp, #0x4
+ cmp r10, #0x0
+ mov r0, r8
+ mov r1, r6
+ ldreq r9, [sp, #0xc4]
+ str r2, [sp, #0xc8]
+ str r7, [sp, #0xcc]
+ bl FSi_TranslateCommand
+_020D0270:
+ cmp r0, #0x0
+ bne _020D02A8
+_020D0278:
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ bne _020D0294
+ ldr r0, [sp, #0x8]
+ cmp r0, r4
+ ldreqh r5, [sp, #0xbc]
+ beq _020D02A8
+_020D0294:
+ mov r0, r8
+ mov r1, r6
+ bl FSi_TranslateCommand
+ cmp r0, #0x0
+ beq _020D0278
+_020D02A8:
+ cmp r5, #0x10000
+ bne _020D02BC
+ add sl, sl, #0x1
+ cmp sl, r9
+ bcc _020D0244
+_020D02BC:
+ cmp r5, #0x10000
+ moveq r0, #0x0
+ streqh r0, [r11, #0x8]
+ addeq sp, sp, #0xe4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r0, [r11, #0x8]
+ cmp r0, #0x0
+ bne _020D03B8
+ ldr r0, [sp, #0x0]
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0xff
+ addls r9, r1, #0x1
+ bls _020D0308
+ cmp r0, #0xff00
+ addls r9, r1, #0x2
+ addhi r9, r1, #0x3
+_020D0308:
+ cmp r4, #0x10000
+ ldrne r0, [sp, #0x14]
+ add r9, r9, #0x2
+ addne r9, r9, r0
+ mov r10, r5
+ cmp r5, #0x0
+ beq _020D03AC
+ add r0, sp, #0x98
+ mov r1, r5
+ bl FSi_SeekDirDirect
+ add r8, sp, #0x98
+ mov r6, #0x3
+ mov r7, #0x1
+_020D033C:
+ ldr r1, [sp, #0xc4]
+ mov r0, r8
+ bl FSi_SeekDirDirect
+ add r2, sp, #0x4
+ mov r0, r8
+ mov r1, r6
+ str r2, [sp, #0xc8]
+ str r7, [sp, #0xcc]
+ bl FSi_TranslateCommand
+_020D0360:
+ cmp r0, #0x0
+ bne _020D03A0
+_020D0368:
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _020D038C
+ ldrh r0, [sp, #0x8]
+ cmp r0, sl
+ ldreq r0, [sp, #0x14]
+ addeq r0, r0, #0x1
+ addeq r9, r9, r0
+ beq _020D03A0
+_020D038C:
+ mov r0, r8
+ mov r1, r6
+ bl FSi_TranslateCommand
+ cmp r0, #0x0
+ beq _020D0368
+_020D03A0:
+ ldrh sl, [sp, #0xbc]
+ cmp sl, #0x0
+ bne _020D033C
+_020D03AC:
+ add r0, r9, #0x1
+ strh r0, [r11, #0x8]
+ strh r5, [r11, #0xa]
+_020D03B8:
+ ldr r7, [r11, #0x0]
+ cmp r7, #0x0
+ addeq sp, sp, #0xe4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r6, [r11, #0x8]
+ ldr r0, [r11, #0x4]
+ cmp r0, r6
+ addcc sp, sp, #0xe4
+ movcc r0, #0x1
+ ldmccia sp!, {r4-r11,lr}
+ bxcc lr
+ ldr r0, [sp, #0x0]
+ mov r9, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0xff
+ movls r8, #0x1
+ bls _020D0410
+ cmp r0, #0xff00
+ movls r8, #0x2
+ movhi r8, #0x3
+_020D0410:
+ ldr r0, [sp, #0x0]
+ mov r1, r7
+ mov r2, r8
+ bl MI_CpuCopy8
+ add r1, r9, r8
+ ldr r0, _020D058C ; =0x0210682C
+ add r1, r7, r1
+ mov r2, #0x2
+ bl MI_CpuCopy8
+ add r0, sp, #0x98
+ mov r1, r5
+ bl FSi_SeekDirDirect
+ cmp r4, #0x10000
+ beq _020D04C4
+ add r3, sp, #0x4
+ mov r2, #0x0
+ add r0, sp, #0x98
+ mov r1, #0x3
+ str r3, [sp, #0xc8]
+ str r2, [sp, #0xcc]
+ bl FSi_TranslateCommand
+_020D0464:
+ cmp r0, #0x0
+ bne _020D04A0
+ add r9, sp, #0x98
+ mov r8, #0x3
+_020D0474:
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ bne _020D048C
+ ldr r0, [sp, #0x8]
+ cmp r0, r4
+ beq _020D04A0
+_020D048C:
+ mov r0, r9
+ mov r1, r8
+ bl FSi_TranslateCommand
+ cmp r0, #0x0
+ beq _020D0474
+_020D04A0:
+ ldr r0, [sp, #0x14]
+ add r1, r7, r6
+ add r4, r0, #0x1
+ add r0, sp, #0x18
+ mov r2, r4
+ sub r1, r1, r4
+ bl MI_CpuCopy8
+ sub r6, r6, r4
+ b _020D04D4
+_020D04C4:
+ add r0, r7, r6
+ mov r1, #0x0
+ strb r1, [r0, #-0x1]
+ sub r6, r6, #0x1
+_020D04D4:
+ cmp r5, #0x0
+ beq _020D057C
+ add r10, sp, #0x98
+ add r11, sp, #0x4
+ mov r4, #0x3
+ mov r9, #0x0
+ mov r8, #0x2f
+_020D04F0:
+ ldr r1, [sp, #0xc4]
+ mov r0, r10
+ bl FSi_SeekDirDirect
+ add r2, r7, r6
+ mov r0, r10
+ mov r1, r4
+ str r11, [sp, #0xc8]
+ str r9, [sp, #0xcc]
+ strb r8, [r2, #-0x1]
+ sub r6, r6, #0x1
+ bl FSi_TranslateCommand
+_020D051C:
+ cmp r0, #0x0
+ bne _020D0570
+_020D0524:
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _020D055C
+ ldrh r0, [sp, #0x8]
+ cmp r0, r5
+ bne _020D055C
+ ldr r5, [sp, #0x14]
+ add r1, r7, r6
+ add r0, sp, #0x18
+ mov r2, r5
+ sub r1, r1, r5
+ bl MI_CpuCopy8
+ sub r6, r6, r5
+ b _020D0570
+_020D055C:
+ mov r0, sl
+ mov r1, r4
+ bl FSi_TranslateCommand
+ cmp r0, #0x0
+ beq _020D0524
+_020D0570:
+ ldrh r5, [sp, #0xbc]
+ cmp r5, #0x0
+ bne _020D04F0
+_020D057C:
+ mov r0, #0x0
+ add sp, sp, #0xe4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D058C: .word 0x0210682C
+
+ arm_func_start FSi_FindPathCommand
+FSi_FindPathCommand: ; 0x020D0590
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x9c
+ mov r10, r0
+ ldr r2, [r10, #0x40]
+ ldr r9, [r10, #0x3c]
+ mov r1, #0x2
+ str r2, [sp, #0x0]
+ bl FSi_TranslateCommand
+ ldrb r1, [r9, #0x0]
+ cmp r1, #0x0
+ beq _020D0780
+ mov r0, #0x2
+ add r11, sp, #0x1c
+ mov r4, #0x3
+ mov r5, #0x1
+ mov r6, #0x0
+ str r0, [sp, #0x4]
+_020D05D4:
+ mov r7, r6
+ b _020D05E0
+_020D05DC:
+ add r7, r7, #0x1
+_020D05E0:
+ ldrb r8, [r9, r7]
+ mov r0, r6
+ cmp r8, #0x0
+ beq _020D0600
+ cmp r8, #0x2f
+ beq _020D0600
+ cmp r8, #0x5c
+ movne r0, r5
+_020D0600:
+ cmp r0, #0x0
+ bne _020D05DC
+ cmp r8, #0x0
+ bne _020D061C
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _020D0620
+_020D061C:
+ mov r8, r5
+_020D0620:
+ cmp r7, #0x0
+ addeq sp, sp, #0x9c
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ cmp r1, #0x2e
+ bne _020D068C
+ cmp r7, #0x1
+ addeq r9, r9, #0x1
+ beq _020D0764
+ ldrb r0, [r9, #0x1]
+ cmp r7, #0x2
+ moveq r1, r5
+ movne r1, r6
+ cmp r0, #0x2e
+ moveq r0, r5
+ movne r0, r6
+ ands r0, r1, r0
+ beq _020D068C
+ ldrh r0, [r10, #0x24]
+ cmp r0, #0x0
+ beq _020D0684
+ ldr r1, [r10, #0x2c]
+ mov r0, r10
+ bl FSi_SeekDirDirect
+_020D0684:
+ add r9, r9, #0x2
+ b _020D0764
+_020D068C:
+ cmp r7, #0x7f
+ addgt sp, sp, #0x9c
+ movgt r0, #0x1
+ ldmgtia sp!, {r4-r11,lr}
+ bxgt lr
+ add r0, sp, #0x8
+ str r0, [r10, #0x30]
+ str r6, [r10, #0x34]
+_020D06AC:
+ mov r0, r10
+ mov r1, r4
+ bl FSi_TranslateCommand
+_020D06B8:
+ cmp r0, #0x0
+ addne sp, sp, #0x9c
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r0, [sp, #0x14]
+ cmp r8, r0
+ bne _020D06AC
+ ldr r0, [sp, #0x18]
+ cmp r7, r0
+ bne _020D06AC
+ mov r0, r9
+ mov r1, fp
+ mov r2, r7
+ bl FSi_StrNICmp
+ cmp r0, #0x0
+ bne _020D06AC
+ cmp r8, #0x0
+ beq _020D0728
+ add r0, sp, #0x8
+ add r3, sl, #0x30
+ ldmia r0, {r0, r1, r2}
+ stmia r3, {r0, r1, r2}
+ ldr r1, [sp, #0x4]
+ mov r0, sl
+ add r9, r9, r7
+ bl FSi_TranslateCommand
+ b _020D0764
+_020D0728:
+ ldr r0, [sp]
+ cmp r0, #0x0
+ addne sp, sp, #0x9c
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r3, [sl, #0x44]
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0xC]
+ add sp, sp, #0x9c
+ str r2, [r3]
+ str r1, [r3, #0x4]
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D0764:
+ ldrb r0, [r9, #0x0]
+ cmp r0, #0x0
+ movne r0, r5
+ moveq r0, r6
+ ldrb r1, [r9, r0]!
+ cmp r1, #0x0
+ bne _020D05D4
+_020D0780:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ addne r0, r10, #0x20
+ ldrne r3, [r10, #0x44]
+ ldmneia r0, {r0-r2}
+ stmneia r3, {r0-r2}
+ movne r0, #0x0
+ add sp, sp, #0x9c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FSi_ReadDirCommand
+FSi_ReadDirCommand: ; 0x020D07AC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ ldr r4, [r5, #0x30]
+ ldr r1, [r5, #0x8]
+ add r0, sp, #0x4
+ str r1, [sp, #0x4]
+ ldr r3, [r5, #0x28]
+ add r1, sp, #0x0
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl FSi_ReadTable
+_020D07DC:
+ cmp r0, #0x0
+ addne sp, sp, #0xC
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldrb r1, [sp]
+ and r2, r1, #0x7F
+ mov r1, r1, asr #0x7
+ str r2, [r4, #0x10]
+ and r1, r1, #0x1
+ str r1, [r4, #0xC]
+ ldr r2, [r4, #0x10]
+ cmp r2, #0x0
+ addeq sp, sp, #0xC
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r5, #0x34]
+ cmp r1, #0x0
+ bne _020D0858
+ add r0, sp, #0x4
+ add r1, r4, #0x14
+ bl FSi_ReadTable
+ cmp r0, #0x0
+ addne sp, sp, #0xC
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r1, [r4, #0x10]
+ mov r2, #0x0
+ add r1, r4, r1
+ strb r2, [r1, #0x14]
+ b _020D0864
+_020D0858:
+ ldr r1, [sp, #0x8]
+ add r1, r1, r2
+ str r1, [sp, #0x8]
+_020D0864:
+ ldr r1, [r4, #0xC]
+ cmp r1, #0x0
+ beq _020D08B8
+ add r0, sp, #0x4
+ add r1, sp, #0x2
+ mov r2, #0x2
+ bl FSi_ReadTable
+ cmp r0, #0x0
+ addne sp, sp, #0xC
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r2, [r5, #0x8]
+ ldr r1, _020D08E8
+ str r2, [r4]
+ ldrh r3, [sp, #0x2]
+ mov r2, #0x0
+ and r1, r3, r1
+ strh r1, [r4, #0x4]
+ strh r2, [r4, #0x6]
+ str r2, [r4, #0x8]
+ b _020D08D4
+_020D08B8:
+ ldr r1, [r5, #0x8]
+ str r1, [r4]
+ ldrh r1, [r5, #0x26]
+ str r1, [r4, #0x4]
+ ldrh r1, [r5, #0x26]
+ add r1, r1, #0x1
+ strh r1, [r5, #0x26]
+_020D08D4:
+ ldr r1, [sp, #0x8]
+ str r1, [r5, #0x28]
+ add sp, sp, #0xC
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D08E8: .word 0x00000FFF
+
+ arm_func_start FSi_SeekDirCommand
+FSi_SeekDirCommand: ; 0x020D08EC
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ mov r6, r0
+ ldr r5, [r6, #0x8]
+ add r4, r6, #0x30
+ str r5, [sp, #0x8]
+ ldrh r1, [r4, #0x4]
+ ldr r2, [r5, #0x34]
+ add r0, sp, #0x8
+ add r3, r2, r1, lsl #0x3
+ add r1, sp, #0x0
+ mov r2, #0x8
+ str r3, [sp, #0xc]
+ bl FSi_ReadTable
+ movs r3, r0
+ bne _020D0978
+ add r12, r6, #0x20
+ ldmia r4, {r0-r2}
+ stmia r12, {r0-r2}
+ ldrh r0, [r4, #0x6]
+ cmp r0, #0x0
+ bne _020D0968
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ bne _020D0968
+ ldrh r0, [sp, #0x4]
+ strh r0, [r6, #0x26]
+ ldr r1, [r5, #0x34]
+ ldr r0, [sp, #0x0]
+ add r0, r1, r0
+ str r0, [r6, #0x28]
+_020D0968:
+ ldrh r1, [sp, #0x6]
+ ldr r0, _020D0988 ; =0x00000FFF
+ and r0, r1, r0
+ str r0, [r6, #0x2c]
+_020D0978:
+ mov r0, r3
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D0988: .word 0x00000FFF
+
+ arm_func_start FSi_WriteFileCommand
+FSi_WriteFileCommand: ; 0x020D098C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x2c]
+ ldr r3, [r0, #0x38]
+ ldr lr, [r0, #0x8]
+ ldr r1, [r0, #0x30]
+ add r12, r2, r3
+ str r12, [r0, #0x2c]
+ ldr r12, [lr, #0x4c]
+ mov r0, lr
+ blx r12
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FSi_ReadFileCommand
+FSi_ReadFileCommand: ; 0x020D09C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x2c]
+ ldr r3, [r0, #0x38]
+ ldr lr, [r0, #0x8]
+ ldr r1, [r0, #0x30]
+ add r12, r2, r3
+ str r12, [r0, #0x2c]
+ ldr r12, [lr, #0x48]
+ mov r0, lr
+ blx r12
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FSi_SeekDirDirect
+FSi_SeekDirDirect: ; 0x020D09FC
+ ldr r3, [r0, #0xc]
+ mov r2, #0x0
+ orr r3, r3, #0x4
+ str r3, [r0, #0xc]
+ ldr r3, [r0, #0x8]
+ ldr ip, _020D0A2C ; =FSi_TranslateCommand
+ str r3, [r0, #0x30]
+ str r2, [r0, #0x38]
+ strh r2, [r0, #0x36]
+ strh r1, [r0, #0x34]
+ mov r1, #0x2
+ bx r12
+ .balign 4
+_020D0A2C: .word FSi_TranslateCommand
+
+ arm_func_start FSi_ReadTable
+FSi_ReadTable:
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ ldr r5, [r7, #0x0]
+ mov r6, r2
+ ldr r2, [r5, #0x1c]
+ mov r0, r5
+ orr r2, r2, #0x200
+ str r2, [r5, #0x1c]
+ ldr r2, [r7, #0x4]
+ ldr r4, [r5, #0x50]
+ mov r3, r6
+ blx r4
+ cmp r0, #0x0
+ beq _020D0A7C
+ cmp r0, #0x1
+ beq _020D0A7C
+ cmp r0, #0x6
+ beq _020D0A8C
+ b _020D0AC8
+_020D0A7C:
+ ldr r1, [r5, #0x1c]
+ bic r1, r1, #0x200
+ str r1, [r5, #0x1c]
+ b _020D0AC8
+_020D0A8C:
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x1c]
+ mov r4, r0
+ ands r0, r1, #0x200
+ beq _020D0AB8
+ add r8, r5, #0xc
+_020D0AA4:
+ mov r0, r8
+ bl OS_SleepThread
+ ldr r0, [r5, #0x1c]
+ ands r0, r0, #0x200
+ bne _020D0AA4
+_020D0AB8:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #0x24]
+ ldr r0, [r0, #0x14]
+_020D0AC8:
+ ldr r1, [r7, #0x4]
+ add r1, r1, r6
+ str r1, [r7, #0x4]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FSi_StrNICmp
+FSi_StrNICmp: ; 0x020D0ADC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ mov lr, #0x0
+ bls _020D0B30
+_020D0AF0:
+ ldrb r12, [r0, lr]
+ ldrb r3, [r1, lr]
+ sub r12, r12, #0x41
+ cmp r12, #0x19
+ sub r3, r3, #0x41
+ addls r12, r12, #0x20
+ cmp r3, #0x19
+ addls r3, r3, #0x20
+ cmp r12, r3
+ addne sp, sp, #0x4
+ subne r0, r12, r3
+ ldmneia sp!, {lr}
+ bxne lr
+ add lr, lr, #0x1
+ cmp lr, r2
+ blo _020D0AF0
+_020D0B30:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FS_NotifyArchiveAsyncEnd
+FS_NotifyArchiveAsyncEnd: ; 0x020D0B40
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x1c]
+ mov r6, r1
+ ands r0, r0, #0x100
+ beq _020D0B8C
+ ldr r2, [r4, #0x1c]
+ ldr r0, [r4, #0x24]
+ bic r2, r2, #0x100
+ str r2, [r4, #0x1c]
+ bl FSi_ReleaseCommand
+ mov r0, r4
+ bl FSi_NextCommand
+_020D0B74:
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl FSi_ExecuteAsyncCommand
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D0B8C:
+ ldr r5, [r4, #0x24]
+ bl OS_DisableInterrupts
+ str r6, [r5, #0x14]
+ ldr r1, [r4, #0x1c]
+ mov r5, r0
+ bic r1, r1, #0x200
+ add r0, r4, #0xc
+ str r1, [r4, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FS_SetArchiveProc
+FS_SetArchiveProc: ; 0x020D0BC0
+ cmp r2, #0x0
+ moveq r1, #0x0
+ beq _020D0BD4
+ cmp r1, #0x0
+ moveq r2, #0x0
+_020D0BD4:
+ str r1, [r0, #0x54]
+ str r2, [r0, #0x58]
+ bx lr
+
+ arm_func_start FS_ResumeArchive
+FS_ResumeArchive:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov r6, #0x0
+ bl OS_DisableInterrupts
+ ldr r1, [r4, #0x1c]
+ mov r5, r0
+ ands r0, r1, #0x8
+ movne r0, #0x1
+ moveq r0, r6
+ cmp r0, #0x0
+ moveq r7, #0x1
+ movne r7, #0x0
+ cmp r7, #0x0
+ bne _020D0C34
+ ldr r1, [r4, #0x1c]
+ mov r0, r4
+ bic r1, r1, #0x8
+ str r1, [r4, #0x1c]
+ bl FSi_NextCommand
+ mov r6, r0
+_020D0C34:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020D0C3C:
+ cmp r6, #0x0
+ beq _020D0C4C
+ mov r0, r6
+ bl FSi_ExecuteAsyncCommand
+_020D0C4C:
+ mov r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7, lr}
+ bx lr
+
+ arm_func_start FS_SuspendArchive
+FS_SuspendArchive: ; 0x020D0C5C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x1c]
+ mov r4, r0
+ ands r0, r1, #0x8
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ moveq r5, #0x1
+ movne r5, #0x0
+ cmp r5, #0x0
+ beq _020D0CD4
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x10
+ beq _020D0CC8
+ ldr r0, [r6, #0x1c]
+ orr r0, r0, #0x40
+ str r0, [r6, #0x1c]
+ add r7, r6, #0x14
+_020D0CB0:
+ mov r0, r7
+ bl OS_SleepThread
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x40
+ bne _020D0CB0
+ b _020D0CD4
+_020D0CC8:
+ ldr r0, [r6, #0x1c]
+ orr r0, r0, #0x8
+ str r0, [r6, #0x1c]
+_020D0CD4:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FS_UnloadArchiveTables
+FS_UnloadArchiveTables: ; 0x020D0CEC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x1c]
+ mov r4, #0x0
+ ands r0, r0, #0x2
+ movne r0, #0x1
+ moveq r0, r4
+ cmp r0, #0x0
+ beq _020D0D74
+ mov r0, r5
+ bl FS_SuspendArchive
+ ldr r1, [r5, #0x1c]
+ ands r1, r1, #0x4
+ movne r1, #0x1
+ moveq r1, #0x0
+ cmp r1, #0x0
+ beq _020D0D64
+ ldr r2, [r5, #0x1c]
+ mov r1, #0x0
+ bic r2, r2, #0x4
+ str r2, [r5, #0x1c]
+ ldr r4, [r5, #0x44]
+ str r1, [r5, #0x44]
+ ldr r1, [r5, #0x3c]
+ str r1, [r5, #0x2c]
+ ldr r1, [r5, #0x40]
+ str r1, [r5, #0x34]
+ ldr r1, [r5, #0x48]
+ str r1, [r5, #0x50]
+_020D0D64:
+ cmp r0, #0x0
+ beq _020D0D74
+ mov r0, r5
+ bl FS_ResumeArchive
+_020D0D74:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020D0D84
+FUN_020D0D84: ; 0x020D0D84
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4c
+ mov r7, r0
+ ldr r3, [r7, #0x30]
+ ldr r0, [r7, #0x38]
+ mov r6, r1
+ add r0, r3, r0
+ add r0, r0, #0x20
+ add r0, r0, #0x1f
+ bic r5, r0, #0x1f
+ cmp r5, r2
+ bhi _020D0E9C
+ add r1, r6, #0x1f
+ add r0, sp, #0x4
+ bic r4, r1, #0x1f
+ bl FS_InitFile
+ ldr r2, [r7, #0x2c]
+ mvn r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r3, [r7, #0x30]
+ add r0, sp, #0x4
+ mov r1, r7
+ add r3, r2, r3
+ bl FS_OpenFileDirect
+_020D0DE4:
+ cmp r0, #0x0
+ beq _020D0E1C
+ ldr r2, [r7, #0x30]
+ add r0, sp, #0x4
+ mov r1, r4
+ bl FS_ReadFile
+ cmp r0, #0x0
+ bge _020D0E14
+ ldr r2, [r7, #0x30]
+ mov r0, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+_020D0E14:
+ add r0, sp, #0x4
+ bl FS_CloseFile
+_020D0E1C:
+ str r4, [r7, #0x2C]
+ ldr ip, [r7, #0x30]
+ ldr r2, [r7, #0x34]
+ mvn r0, #0x0
+ str r0, [sp]
+ ldr r3, [r7, #0x38]
+ add r0, sp, #0x4
+ mov r1, r7
+ add r3, r2, r3
+ add r4, r4, ip
+ bl FS_OpenFileDirect
+ cmp r0, #0x0
+ beq _020D0E80
+ ldr r2, [r7, #0x38]
+ add r0, sp, #0x4
+ mov r1, r4
+ bl FS_ReadFile
+ cmp r0, #0x0
+ bge _020D0E78
+ ldr r2, [r7, #0x38]
+ mov r0, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+_020D0E78:
+ add r0, sp, #0x4
+ bl FS_CloseFile
+_020D0E80:
+ str r4, [r7, #0x34]
+ ldr r0, _020D0EAC
+ str r6, [r7, #0x44]
+ str r0, [r7, #0x50]
+ ldr r0, [r7, #0x1C]
+ orr r0, r0, #0x4
+ str r0, [r7, #0x1C]
+_020D0E9C:
+ mov r0, r5
+ add sp, sp, #0x4C
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D0EAC:
+ .word FSi_ReadMemoryCore
+
+ arm_func_start FUN_020D0EB0
+FUN_020D0EB0: ; 0x020D0EB0
+ stmdb sp!, {r4-r8,lr}
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x1c]
+ mov r4, r0
+ ands r0, r1, #0x2
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020D0F64
+ mov r0, r5
+ ldr r1, [r5, #0x1c]
+ bl FS_SuspendArchive
+ ldr r1, [r5, #0x1c]
+ mov r7, r0
+ orr r0, r1, #0x80
+ str r0, [r5, #0x1c]
+ ldr r0, [r5, #0x24]
+ cmp r0, #0x0
+ beq _020D0F1C
+ mov r6, #0x3
+_020D0F04:
+ ldr r8, [r0, #0x4]
+ mov r1, r6
+ bl FSi_ReleaseCommand
+ mov r0, r8
+ cmp r8, #0x0
+ bne _020D0F04
+_020D0F1C:
+ mov r0, #0x0
+ str r0, [r5, #0x24]
+ cmp r7, #0x0
+ beq _020D0F34
+ mov r0, r5
+ bl FS_ResumeArchive
+_020D0F34:
+ mov r0, #0x0
+ str r0, [r5, #0x28]
+ str r0, [r5, #0x2c]
+ str r0, [r5, #0x30]
+ str r0, [r5, #0x34]
+ str r0, [r5, #0x38]
+ str r0, [r5, #0x40]
+ ldr r0, [r5, #0x40]
+ str r0, [r5, #0x3c]
+ ldr r0, [r5, #0x1c]
+ bic r0, r0, #0xa2
+ str r0, [r5, #0x1c]
+_020D0F64:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FS_LoadArchive
+FS_LoadArchive: ; 0x020D0F78
+ str r1, [r0, #0x28]
+ str r3, [r0, #0x30]
+ str r2, [r0, #0x3c]
+ ldr r1, [r0, #0x3c]
+ ldr r2, [sp, #0x4]
+ str r1, [r0, #0x2c]
+ str r2, [r0, #0x38]
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x8]
+ str r1, [r0, #0x40]
+ ldr r1, [r0, #0x40]
+ cmp r2, #0x0
+ str r1, [r0, #0x34]
+ ldreq r2, _020D0FE8 ; =FSi_ReadMemCallback
+ ldr r1, [sp, #0xc]
+ str r2, [r0, #0x48]
+ cmp r1, #0x0
+ ldreq r1, _020D0FEC ; =FSi_WriteMemCallback
+ str r1, [r0, #0x4c]
+ ldr r2, [r0, #0x48]
+ mov r1, #0x0
+ str r2, [r0, #0x50]
+ str r1, [r0, #0x44]
+ ldr r1, [r0, #0x1c]
+ orr r1, r1, #0x2
+ str r1, [r0, #0x1c]
+ mov r0, #0x1
+ bx lr
+ .balign 4
+_020D0FE8: .word FSi_ReadMemCallback
+_020D0FEC: .word FSi_WriteMemCallback
+
+ arm_func_start FUN_020D0FF0
+FUN_020D0FF0: ; 0x020D0FF0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ ldr r2, [r4, #0x4]
+ mov r3, #0x0
+ cmp r2, #0x0
+ ldrne r1, [r4, #0x8]
+ strne r1, [r2, #0x8]
+ ldr r2, [r4, #0x8]
+ cmp r2, #0x0
+ ldrne r1, [r4, #0x4]
+ strne r1, [r2, #0x4]
+ str r3, [r4, #0x0]
+ str r3, [r4, #0x8]
+ ldr r1, [r4, #0x8]
+ ldr r2, _020D1080 ; =0x021D53EC
+ str r1, [r4, #0x4]
+ ldr r1, [r4, #0x1c]
+ bic r1, r1, #0x1
+ str r1, [r4, #0x1c]
+ ldr r1, [r2, #0x0]
+ cmp r1, r4
+ bne _020D1074
+ ldr r1, _020D1084 ; =0x021D53E8
+ str r3, [r2, #0x8]
+ ldr r1, [r1, #0x0]
+ strh r3, [r2, #0x6]
+ str r1, [r2, #0x0]
+ strh r3, [r2, #0x4]
+_020D1074:
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D1080: .word 0x021D53EC
+_020D1084: .word 0x021D53E8
+
+ arm_func_start FS_RegisterArchiveName
+FS_RegisterArchiveName: ; 0x020D1088
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r7, r0
+ mov r8, #0x0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, r6
+ mov r1, r5
+ bl FS_FindArchive
+_020D10B0:
+ cmp r0, #0x0
+ bne _020D112C
+ ldr r1, _020D1140
+ ldr r2, [r1]
+ cmp r2, #0x0
+ bne _020D10E8
+ ldr r0, _020D1144
+ mov r2, r8
+ str r7, [r1]
+ str r7, [r0]
+ str r2, [r0, #0x8]
+ strh r2, [r0, #0x6]
+ strh r2, [r0, #0x4]
+ b _020D110C
+_020D10E8:
+ ldr r0, [r2, #0x4]
+ cmp r0, #0x0
+ beq _020D1104
+_020D10F4:
+ mov r2, r0
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ bne _020D10F4
+_020D1104:
+ str r7, [r2, #0x4]
+ str r2, [r7, #0x8]
+_020D110C:
+ mov r0, r6
+ mov r1, r5
+ bl FSi_GetPackedName
+ str r0, [r7]
+ ldr r0, [r7, #0x1C]
+ mov r8, #0x1
+ orr r0, r0, #0x1
+ str r0, [r7, #0x1C]
+_020D112C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020D1140: .word 0x021D53E8
+_020D1144: .word 0x021D53EC
+
+ arm_func_start FS_FindArchive
+FS_FindArchive:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl FSi_GetPackedName
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020D1194 ; =0x021D53E8
+ ldr r4, [r1, #0x0]
+ b _020D116C
+_020D1168:
+ ldr r4, [r4, #0x4]
+_020D116C:
+ cmp r4, #0x0
+ beq _020D1180
+ ldr r1, [r4, #0x0]
+ cmp r1, r5
+ bne _020D1168
+_020D1180:
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D1194: .word 0x021D53E8
+
+ arm_func_start FS_InitArchive
+FS_InitArchive: ; 0x020D1198
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r2, #0x5c
+ mov r4, r0
+ bl MI_CpuFill8
+ mov r1, #0x0
+ str r1, [r4, #0x10]
+ ldr r0, [r4, #0x10]
+ str r0, [r4, #0xc]
+ str r1, [r4, #0x18]
+ ldr r0, [r4, #0x18]
+ str r0, [r4, #0x14]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FSi_SendCommand
+FSi_SendCommand:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r6, [r7, #0x8]
+ mov r2, #0x1
+ str r1, [r7, #0x10]
+ mov r0, #0x2
+ str r0, [r7, #0x14]
+ ldr r0, [r7, #0xc]
+ mov r5, r2, lsl r1
+ orr r0, r0, #0x1
+ str r0, [r7, #0xc]
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x1c]
+ mov r4, r0
+ ands r0, r1, #0x80
+ beq _020D1238
+ mov r0, r7
+ mov r1, #0x3
+ bl FSi_ReleaseCommand
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D1238:
+ ands r0, r5, #0x1fc
+ ldrne r0, [r7, #0xc]
+ add r2, r6, #0x20
+ orrne r0, r0, #0x4
+ strne r0, [r7, #0xc]
+ ldr r1, [r7, #0x0]
+ ldr r0, [r7, #0x4]
+ cmp r1, #0x0
+ strne r0, [r1, #0x4]
+ cmp r0, #0x0
+ strne r1, [r0, #0x0]
+ ldr r0, [r2, #0x4]
+ cmp r0, #0x0
+ beq _020D1280
+_020D1270:
+ mov r2, r0
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ bne _020D1270
+_020D1280:
+ str r7, [r2, #0x4]
+ str r2, [r7, #0x0]
+ mov r1, #0x0
+ str r1, [r7, #0x4]
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x8
+ movne r1, #0x1
+ cmp r1, #0x0
+ bne _020D132C
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x10
+ bne _020D132C
+ ldr r1, [r6, #0x1c]
+ mov r0, r4
+ orr r1, r1, #0x10
+ str r1, [r6, #0x1c]
+ bl OS_RestoreInterrupts
+ ldr r0, [r6, #0x58]
+ ands r0, r0, #0x200
+ beq _020D12E0
+ ldr r2, [r6, #0x54]
+ mov r0, r7
+ mov r1, #0x9
+ blx r2
+_020D12E0:
+ bl OS_DisableInterrupts
+ ldr r1, [r7, #0xc]
+ orr r1, r1, #0x40
+ str r1, [r7, #0xc]
+ ldr r1, [r7, #0xc]
+ ands r1, r1, #0x4
+ movne r1, #0x1
+ moveq r1, #0x0
+ cmp r1, #0x0
+ bne _020D1324
+ bl OS_RestoreInterrupts
+ mov r0, r7
+ bl FSi_ExecuteAsyncCommand
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D1324:
+ bl OS_RestoreInterrupts
+ b _020D1378
+_020D132C:
+ ldr r0, [r7, #0xc]
+ ands r0, r0, #0x4
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ bne _020D135C
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D135C:
+ add r0, r7, #0x18
+ bl OS_SleepThread
+ ldr r0, [r7, #0xc]
+ ands r0, r0, #0x40
+ beq _020D135C
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D1378:
+ mov r0, r7
+ bl FSi_ExecuteSyncCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FSi_ExecuteSyncCommand
+FSi_ExecuteSyncCommand: ; 0x020D138C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x10]
+ bl FSi_TranslateCommand
+ mov r1, r0
+ mov r0, r4
+ bl FSi_ReleaseCommand
+ ldr r0, [r4, #0x8]
+ bl FSi_NextCommand
+_020D13B0:
+ cmp r0, #0x0
+ beq _020D13BC
+ bl FSi_ExecuteAsyncCommand
+_020D13BC:
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FSi_ExecuteAsyncCommand
+FSi_ExecuteAsyncCommand: ; 0x020D13D4
+ stmdb sp!, {r4-r8,lr}
+ movs r6, r0
+ ldr r5, [r6, #0x8]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r7, #0x0
+ mov r8, #0x1
+_020D13F0:
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0xc]
+ mov r4, r0
+ orr r0, r1, #0x40
+ str r0, [r6, #0xc]
+ ldr r0, [r6, #0xc]
+ ands r0, r0, #0x4
+ movne r0, r8
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020D1434
+ add r0, r6, #0x18
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020D1434:
+ ldr r1, [r6, #0xc]
+ mov r0, r4
+ orr r1, r1, #0x8
+ str r1, [r6, #0xc]
+ bl OS_RestoreInterrupts
+ ldr r1, [r6, #0x10]
+ mov r0, r6
+ bl FSi_TranslateCommand
+ cmp r0, #0x6
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, r5
+ bl FSi_NextCommand
+ movs r6, r0
+ bne _020D13F0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FSi_NextCommand
+FSi_NextCommand:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4c
+ mov r6, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x1c]
+ mov r5, r0
+ ands r0, r1, #0x20
+ beq _020D1500
+ ldr r0, [r6, #0x1c]
+ bic r0, r0, #0x20
+ str r0, [r6, #0x1c]
+ ldr r0, [r6, #0x24]
+ cmp r0, #0x0
+ beq _020D1500
+ mov r8, #0x0
+ mov r9, #0x1
+ mov r7, #0x3
+_020D14BC:
+ ldr r1, [r0, #0xc]
+ ldr r4, [r0, #0x4]
+ ands r1, r1, #0x2
+ movne r1, r9
+ moveq r1, r8
+ cmp r1, #0x0
+ beq _020D14F4
+ ldr r1, [r6, #0x24]
+ cmp r1, r0
+ mov r1, r7
+ streq r4, [r6, #0x24]
+ bl FSi_ReleaseCommand
+_020D14EC:
+ cmp r4, #0x0
+ ldreq r4, [r6, #0x24]
+_020D14F4:
+ mov r0, r4
+ cmp r4, #0x0
+ bne _020D14BC
+_020D1500:
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x40
+ bne _020D15EC
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x8
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ bne _020D15EC
+ ldr r4, [r6, #0x24]
+ cmp r4, #0x0
+ beq _020D15EC
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x10
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ moveq r7, #0x1
+ movne r7, #0x0
+ cmp r7, #0x0
+ ldrne r0, [r6, #0x1c]
+ orrne r0, r0, #0x10
+ strne r0, [r6, #0x1c]
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020D1564:
+ cmp r7, #0x0
+ beq _020D1588
+ ldr r0, [r6, #0x58]
+ ands r0, r0, #0x200
+ beq _020D1588
+ ldr r2, [r6, #0x54]
+ mov r0, r4
+ mov r1, #0x9
+ blx r2
+_020D1588:
+ bl OS_DisableInterrupts
+ ldr r1, [r4, #0xC]
+ mov r5, r0
+ orr r0, r1, #0x40
+ str r0, [r4, #0xC]
+ ldr r0, [r4, #0xC]
+ ands r0, r0, #0x4
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020D15D4
+ add r0, r4, #0x18
+ bl OS_WakeupThread
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4c
+ mov r0, #0x0
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+_020D15D4:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4c
+ mov r0, r4
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+_020D15EC:
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x10
+ beq _020D162C
+ ldr r0, [r6, #0x1c]
+ bic r0, r0, #0x10
+ str r0, [r6, #0x1c]
+ ldr r0, [r6, #0x58]
+ ands r0, r0, #0x400
+ beq _020D162C
+ add r0, sp, #0x0
+ bl FS_InitFile
+ str r6, [sp, #0x8]
+ ldr r2, [r6, #0x54]
+ add r0, sp, #0x0
+ mov r1, #0xa
+ blx r2
+_020D162C:
+ ldr r0, [r6, #0x1c]
+ ands r0, r0, #0x40
+ beq _020D1658
+ ldr r1, [r6, #0x1c]
+ add r0, r6, #0x14
+ bic r1, r1, #0x40
+ str r1, [r6, #0x1c]
+ ldr r1, [r6, #0x1c]
+ orr r1, r1, #0x8
+ str r1, [r6, #0x1c]
+ bl OS_WakeupThread
+_020D1658:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020D1660:
+ mov r0, #0x0
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+
+ arm_func_start FSi_ReadMemoryCore
+FSi_ReadMemoryCore: ; 0x020D1670
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, r2
+ mov r2, r3
+ bl MI_CpuCopy8
+_020D1684:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+
+ arm_func_start FSi_WriteMemCallback
+FSi_WriteMemCallback: ; 0x020D1694
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r0, #0x28]
+ mov r0, r1
+ add r1, r12, r2
+ mov r2, r3
+ bl MI_CpuCopy8
+_020D16B0:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+
+ arm_func_start FSi_ReadMemCallback
+FSi_ReadMemCallback: ; 0x020D16C0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x28]
+ add r0, r0, r2
+ mov r2, r3
+ bl MI_CpuCopy8
+_020D16D8:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+
+ arm_func_start FSi_GetPackedName
+FSi_GetPackedName: ; 0x020D16E8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x3
+ mov lr, #0x0
+ bgt _020D173C
+ mov r12, lr
+ cmp r1, #0x0
+ ble _020D173C
+ mov r3, lr
+_020D170C:
+ ldrb r2, [r0, r12]
+ cmp r2, #0x0
+ beq _020D173C
+ sub r2, r2, #0x41
+ cmp r2, #0x19
+ addls r2, r2, #0x61
+ addhi r2, r2, #0x41
+ add r12, r12, #0x1
+ orr lr, lr, r2, lsl r3
+ cmp r12, r1
+ add r3, r3, #0x8
+ blt _020D170C
+_020D173C:
+ mov r0, lr
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FS_ChangeDir
+FS_ChangeDir: ; 0x020D174C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x58
+ mov r4, r0
+ add r0, sp, #0xc
+ bl FS_InitFile
+ add r0, sp, #0xc
+ add r3, sp, #0x0
+ mov r1, r4
+ mov r2, #0x0
+ bl FSi_FindPath
+_020D1774:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, sp, #0x0
+ ldrne r3, _020D179C
+ ldmneia r0, {r0, r1, r2}
+ stmneia r3, {r0, r1, r2}
+ movne r0, #0x1
+ add sp, sp, #0x58
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D179C: .word 0x021D53EC
+
+ arm_func_start FS_SeekFile
+FS_SeekFile: ; 0x020D17A0
+ cmp r2, #0x0
+ beq _020D17BC
+ cmp r2, #0x1
+ beq _020D17C8
+ cmp r2, #0x2
+ beq _020D17D4
+ b _020D17E0
+_020D17BC:
+ ldr r2, [r0, #0x24]
+ add r1, r1, r2
+ b _020D17E8
+_020D17C8:
+ ldr r2, [r0, #0x2c]
+ add r1, r1, r2
+ b _020D17E8
+_020D17D4:
+ ldr r2, [r0, #0x28]
+ add r1, r1, r2
+ b _020D17E8
+_020D17E0:
+ mov r0, #0x0
+ bx lr
+_020D17E8:
+ ldr r2, [r0, #0x24]
+ cmp r1, r2
+ movlt r1, r2
+ ldr r2, [r0, #0x28]
+ cmp r1, r2
+ movgt r1, r2
+ str r1, [r0, #0x2c]
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FS_ReadFile
+FS_ReadFile: ; 0x020D180C
+ ldr ip, _020D1818 ; =FUN_020D1AAC
+ mov r3, #0x0
+ bx r12
+ .balign 4
+_020D1818: .word FUN_020D1AAC
+
+ arm_func_start FS_ReadFileAsync
+FS_ReadFileAsync: ; 0x020D181C
+ ldr ip, _020D1828 ; =FUN_020D1AAC
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020D1828: .word FUN_020D1AAC
+
+ arm_func_start FS_WaitAsync
+FS_WaitAsync: ; 0x020D182C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, #0x0
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0xc]
+ mov r4, r0
+ ands r0, r1, #0x1
+ movne r0, #0x1
+ moveq r0, r5
+ cmp r0, #0x0
+ beq _020D18BC
+ ldr r0, [r6, #0xc]
+ ands r0, r0, #0x44
+ moveq r5, #0x1
+ movne r5, #0x0
+ cmp r5, #0x0
+ beq _020D189C
+ ldr r0, [r6, #0xc]
+ orr r0, r0, #0x4
+ str r0, [r6, #0xc]
+ add r7, r6, #0x18
+_020D1884:
+ mov r0, r7
+ bl OS_SleepThread
+ ldr r0, [r6, #0xc]
+ ands r0, r0, #0x40
+ beq _020D1884
+ b _020D18BC
+_020D189C:
+ add r0, r6, #0x18
+ bl OS_SleepThread
+ ldr r0, [r6, #0xc]
+ ands r0, r0, #0x1
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ bne _020D189C
+_020D18BC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020D18C4:
+ cmp r5, #0x0
+ beq _020D18E0
+ mov r0, r6
+ bl FSi_ExecuteSyncCommand
+ add sp, sp, #4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D18E0:
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FS_CloseFile
+FS_CloseFile: ; 0x020D18FC
+ stmdb sp!, {r4,lr}
+ mov r1, #0x8
+ mov r4, r0
+ bl FSi_SendCommand
+_020D190C:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, #0x0
+ str r0, [r4, #0x8]
+ mov r0, #0xE
+ str r0, [r4, #0x10]
+ ldr r1, [r4, #0xC]
+ mov r0, #0x1
+ bic r1, r1, #0x30
+ str r1, [r4, #0xC]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FS_OpenFile
+FS_OpenFile: ; 0x020D1944
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ add r0, sp, #0x0
+ bl FS_ConvertPathToFileID
+_020D1958:
+ cmp r0, #0x0
+ beq _020D1984
+ add r1, sp, #0x0
+ mov r0, r4
+ ldmia r1, {r1, r2}
+ bl FS_OpenFileFast
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ movne r0, #0x1
+ ldmneia sp!, {r4, lr}
+ bxne lr
+_020D1984:
+ mov r0, #0x0
+ add sp, sp, #0x8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FS_OpenFileFast
+FS_OpenFileFast:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4,lr}
+ ldr r1, [sp, #0xc]
+ mov r4, r0
+ cmp r1, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ str r1, [r4, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r2, [sp, #0x10]
+ mov r1, #0x6
+ str r3, [r4, #0x30]
+ str r2, [r4, #0x34]
+ bl FSi_SendCommand
+_020D19D4:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4, lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r1, [r4, #0xC]
+ mov r0, #0x1
+ orr r1, r1, #0x10
+ str r1, [r4, #0xC]
+ ldr r1, [r4, #0xC]
+ bic r1, r1, #0x20
+ str r1, [r4, #0xC]
+ ldmia sp!, {r4, lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start FS_OpenFileDirect
+FS_OpenFileDirect:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ str r1, [r4, #0x8]
+ ldr r12, [sp, #0x8]
+ mov r1, #0x7
+ str r12, [r4, #0x38]
+ str r2, [r4, #0x30]
+ str r3, [r4, #0x34]
+ bl FSi_SendCommand
+_020D1A34:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ ldr r1, [r4, #0xC]
+ mov r0, #0x1
+ orr r1, r1, #0x10
+ str r1, [r4, #0xC]
+ ldr r1, [r4, #0xC]
+ bic r1, r1, #0x20
+ str r1, [r4, #0xC]
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FS_ConvertPathToFileID
+FS_ConvertPathToFileID:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4c
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r4, r1
+ bl FS_InitFile
+_020D1A80:
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, r5
+ mov r3, #0x0
+ bl FSi_FindPath
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4C
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+
+ arm_func_start FUN_020D1AAC
+FUN_020D1AAC: ; 0x020D1AAC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r4, [r7, #0x2c]
+ ldr r0, [r7, #0x28]
+ mov r6, r2
+ str r1, [r7, #0x30]
+ sub r0, r0, r4
+ cmp r6, r0
+ movgt r6, r0
+ cmp r6, #0x0
+ movlt r6, #0x0
+ str r2, [r7, #0x34]
+ mov r5, r3
+ str r6, [r7, #0x38]
+ cmp r5, #0x0
+ ldreq r0, [r7, #0xc]
+ mov r1, #0x0
+ orreq r0, r0, #0x4
+ streq r0, [r7, #0xc]
+ mov r0, r7
+ bl FSi_SendCommand
+_020D1B04:
+ cmp r5, #0x0
+ bne _020D1B24
+ mov r0, r7
+ bl FS_WaitAsync
+ cmp r0, #0x0
+ ldrne r0, [r7, #0x2C]
+ subne r6, r0, r4
+ mvneq r6, #0x0
+_020D1B24:
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7, lr}
+ bx lr
+
+ arm_func_start FSi_FindPath
+FSi_FindPath:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r7, r1
+ ldrb r1, [r7, #0x0]
+ mov r8, r0
+ mov r6, r2
+ mov r5, r3
+ cmp r1, #0x2f
+ beq _020D1B60
+ cmp r1, #0x5c
+ bne _020D1B84
+_020D1B60:
+ ldr r0, _020D1C90 ; =0x021D53EC
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ strh r1, [sp, #0x4]
+ str r0, [sp, #0x0]
+ str r1, [sp, #0x8]
+ strh r1, [sp, #0x6]
+ add r7, r7, #0x1
+ b _020D1C40
+_020D1B84:
+ ldr r0, _020D1C90 ; =0x021D53EC
+ add r3, sp, #0x0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ mov r4, #0x0
+_020D1B98:
+ ldrb r0, [r7, r4]
+ cmp r0, #0x0
+ beq _020D1C40
+ cmp r0, #0x2f
+ beq _020D1C40
+ cmp r0, #0x5c
+ beq _020D1C40
+ cmp r0, #0x3a
+ bne _020D1C34
+ mov r0, r7
+ mov r1, r4
+ bl FS_FindArchive
+_020D1BC8:
+ cmp r0, #0x0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r1, [r0, #0x1C]
+ ands r1, r1, #0x2
+ movne r1, #0x1
+ moveq r1, #0x0
+ cmp r1, #0x0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r1, #0x0
+ str r0, [sp]
+ str r1, [sp, #0x8]
+ strh r1, [sp, #0x6]
+ strh r1, [sp, #0x4]
+ add r0, r4, #0x1
+ ldrb r0, [r7, r0]!
+ cmp r0, #0x2f
+ beq _020D1C2C
+ cmp r0, #0x5c
+ bne _020D1C40
+_020D1C2C:
+ add r7, r7, #0x1
+ b _020D1C40
+_020D1C34:
+ add r4, r4, #0x1
+ cmp r4, #0x3
+ ble _020D1B98
+_020D1C40:
+ ldr r1, [sp, #0x0]
+ add r0, sp, #0x0
+ str r1, [r8, #0x8]
+ str r7, [r8, #0x3c]
+ add r3, r8, #0x30
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ cmp r5, #0x0
+ movne r0, #0x1
+ strne r0, [r8, #0x40]
+ strne r5, [r8, #0x44]
+ moveq r0, #0x0
+ streq r0, [r8, #0x40]
+ mov r0, r8
+ mov r1, #0x4
+ streq r6, [r8, #0x44]
+ bl FSi_SendCommand
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D1C90: .word 0x021D53EC
+
+ arm_func_start FS_InitFile
+FS_InitFile:
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+ ldr r2, [r0, #0x0]
+ mov r1, #0xe
+ str r2, [r0, #0x4]
+ str r3, [r0, #0x1c]
+ ldr r2, [r0, #0x1c]
+ str r2, [r0, #0x18]
+ str r3, [r0, #0x8]
+ str r1, [r0, #0x10]
+ str r3, [r0, #0xc]
+ bx lr
+
+ arm_func_start FS_IsAvailable
+FS_IsAvailable: ; 0x020D1CC4
+ ldr r0, _020D1CD0 ; =0x021D53F8
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D1CD0: .word 0x021D53F8
+
+ arm_func_start FS_Init
+FS_Init: ; 0x020D1CD4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D1D0C ; =0x021D53F8
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl FSi_InitRom
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D1D0C: .word 0x021D53F8
+
+ arm_func_start FS_TryLoadTable
+FS_TryLoadTable: ; 0x020D1D10
+ ldr ip, _020D1D28 ; =FUN_020D0D84
+ mov r3, r0
+ mov r2, r1
+ ldr r0, _020D1D2C ; =0x021D5414
+ mov r1, r3
+ bx r12
+ .balign 4
+_020D1D28: .word FUN_020D0D84
+_020D1D2C: .word 0x021D5414
+
+ arm_func_start FS_SetDefaultDMA
+FS_SetDefaultDMA: ; 0x020D1D30
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ ldr r1, _020D1D7C ; =0x021D5400
+ ldr r0, _020D1D80 ; =0x021D5414
+ ldr r4, [r1, #0x0]
+ bl FS_SuspendArchive
+ ldr r1, _020D1D7C ; =0x021D5400
+ cmp r0, #0x0
+ str r6, [r1, #0x0]
+ beq _020D1D68
+ ldr r0, _020D1D80 ; =0x021D5414
+ bl FS_ResumeArchive
+_020D1D68:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D1D7C: .word 0x021D5400
+_020D1D80: .word 0x021D5414
+
+ arm_func_start FSi_InitRom
+FSi_InitRom: ; 0x020D1D84
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ ldr r1, _020D1EE8 ; =0x021D5400
+ str r0, [r1, #0x0]
+ bl OS_GetLockID
+ ldr r3, _020D1EEC ; =0x021D53FC
+ ldr r2, _020D1EF0 ; =0x021D5404
+ mov r12, #0x0
+ ldr r1, _020D1EF4 ; =0x021D540C
+ str r0, [r3, #0x0]
+ str r12, [r2, #0x0]
+ str r12, [r2, #0x4]
+ str r12, [r1, #0x0]
+ str r12, [r1, #0x4]
+ bl CARD_Init
+ ldr r0, _020D1EF8 ; =0x021D5414
+ bl FS_InitArchive
+ ldr r0, _020D1EF8 ; =0x021D5414
+ ldr r1, _020D1EFC ; =0x02106830
+ mov r2, #0x3
+ bl FS_RegisterArchiveName
+ ldr r0, _020D1F00 ; =0x027FFC40
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x2
+ bne _020D1E4C
+ ldr ip, _020D1EF0 ; =0x021D5404
+ mvn r2, #0x0
+ ldr r3, _020D1EF4 ; =0x021D540C
+ mov lr, #0x0
+ ldr r0, _020D1EF8 ; =0x021D5414
+ ldr r1, _020D1F04 ; =FSi_EmptyArchiveProc
+ str r2, [r12, #0x0]
+ str lr, [r12, #0x4]
+ str r2, [r3, #0x0]
+ str lr, [r3, #0x4]
+ bl FS_SetArchiveProc
+ mov r1, #0x0
+ str r1, [sp, #0x0]
+ ldr r0, _020D1F08 ; =FSi_ReadDummyCallback
+ str r1, [sp, #0x4]
+ str r0, [sp, #0x8]
+ ldr ip, _020D1F0C ; =FSi_WriteDummyCallback
+ ldr r0, _020D1EF8 ; =0x021D5414
+ mov r2, r1
+ mov r3, r1
+ str r12, [sp, #0xc]
+ bl FS_LoadArchive
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D1E4C:
+ ldr r5, _020D1F10 ; =0x027FFE40
+ ldr r0, _020D1EF8 ; =0x021D5414
+ ldr r1, _020D1F14 ; =FSi_RomArchiveProc
+ ldr r2, _020D1F18 ; =0x00000602
+ ldr r4, _020D1F1C ; =0x027FFE48
+ bl FS_SetArchiveProc
+ ldr r1, [r5, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r1, #0x0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [r4, #0x0]
+ cmp r2, r0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r2, #0x0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ str r1, [sp, #0x0]
+ ldr r0, [r5, #0x4]
+ ldr r1, _020D1F20 ; =FSi_ReadRomCallback
+ str r0, [sp, #0x4]
+ ldr r0, _020D1F0C ; =FSi_WriteDummyCallback
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ ldr r3, [r4, #0x4]
+ ldr r0, _020D1EF8 ; =0x021D5414
+ mov r1, #0x0
+ bl FS_LoadArchive
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D1EE8: .word 0x021D5400
+_020D1EEC: .word 0x021D53FC
+_020D1EF0: .word 0x021D5404
+_020D1EF4: .word 0x021D540C
+_020D1EF8: .word 0x021D5414
+_020D1EFC: .word 0x02106830
+_020D1F00: .word 0x027FFC40
+_020D1F04: .word FSi_EmptyArchiveProc
+_020D1F08: .word FSi_ReadDummyCallback
+_020D1F0C: .word FSi_WriteDummyCallback
+_020D1F10: .word 0x027FFE40
+_020D1F14: .word FSi_RomArchiveProc
+_020D1F18: .word 0x00000602
+_020D1F1C: .word 0x027FFE48
+_020D1F20: .word FSi_ReadRomCallback
+
+ arm_func_start FSi_EmptyArchiveProc
+FSi_EmptyArchiveProc: ; 0x020D1F24
+ mov r0, #0x4
+ bx lr
+
+ arm_func_start FSi_ReadDummyCallback
+FSi_ReadDummyCallback: ; 0x020D1F2C
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FSi_RomArchiveProc
+FSi_RomArchiveProc: ; 0x020D1F34
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x1
+ beq _020D1FA0
+ cmp r1, #0x9
+ beq _020D1F58
+ cmp r1, #0xa
+ beq _020D1F7C
+ b _020D1FB0
+_020D1F58:
+ ldr r0, _020D1FC0 ; =0x021D53FC
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl CARD_LockRom
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_020D1F7C:
+ ldr r0, _020D1FC0 ; =0x021D53FC
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl CARD_UnlockRom
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_020D1FA0:
+ add sp, sp, #0x4
+ mov r0, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020D1FB0:
+ mov r0, #0x8
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D1FC0: .word 0x021D53FC
+
+ arm_func_start FSi_WriteDummyCallback
+FSi_WriteDummyCallback: ; 0x020D1FC4
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FSi_ReadRomCallback
+FSi_ReadRomCallback: ; 0x020D1FCC
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ ldr ip, _020D2010 ; =FSi_OnRomReadDone
+ mov lr, r1
+ str r12, [sp, #0x0]
+ str r0, [sp, #0x4]
+ mov r1, #0x1
+ ldr r0, _020D2014 ; =0x021D5400
+ str r1, [sp, #0x8]
+ mov r1, r2
+ ldr r0, [r0, #0x0]
+ mov r2, lr
+ bl CARDi_ReadRom
+ mov r0, #0x6
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D2010: .word FSi_OnRomReadDone
+_020D2014: .word 0x021D5400
+
+ arm_func_start FSi_OnRomReadDone
+FSi_OnRomReadDone: ; 0x020D2018
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl CARD_IsPulledOut
+_020D2024:
+ cmp r0, #0x0
+ movne r1, #0x5
+ moveq r1, #0x0
+ mov r0, r4
+ bl FS_NotifyArchiveAsyncEnd
+ ldmia sp!, {r4,lr}
+ bx lr
+
+
+ arm_func_start FS_UnloadOverlay
+FS_UnloadOverlay: ; 0x020D2040
+ stmdb sp!, {lr}
+ sub sp, sp, #0x2c
+ mov r3, r0
+ mov r2, r1
+ add r0, sp, #0x0
+ mov r1, r3
+ bl FS_LoadOverlayInfo
+_020D205C:
+ cmp r0, #0x0
+ beq _020D2074
+ add r0, sp, #0x0
+ bl FS_UnloadOverlayImage
+ cmp r0, #0x0
+ bne _020D2084
+_020D2074:
+ add sp, sp, #0x2c
+ mov r0, #0x0
+ ldmfd sp!, {lr}
+ bx lr
+_020D2084:
+ mov r0, #0x1
+ add sp, sp, #0x2c
+ ldmfd sp!, {lr}
+ bx lr
+
+ arm_func_start FS_LoadOverlay
+FS_LoadOverlay: ; 0x020D2094
+ stmdb sp!, {lr}
+ sub sp, sp, #0x2c
+ mov r3, r0
+ mov r2, r1
+ add r0, sp, #0x0
+ mov r1, r3
+ bl FS_LoadOverlayInfo
+_020D20B0:
+ cmp r0, #0x0
+ beq _020D20C8
+ add r0, sp, #0x0
+ bl FS_LoadOverlayImage
+ cmp r0, #0x0
+ bne _020D20D8
+_020D20C8:
+ add sp, sp, #0x2c
+ mov r0, #0x0
+ ldmfd sp!, {lr}
+ bx lr
+_020D20D8:
+ add r0, sp, #0x0
+ bl FS_StartOverlay
+ mov r0, #0x1
+ add sp, sp, #0x2c
+ ldmfd sp!, {lr}
+ bx lr
+
+ arm_func_start FS_UnloadOverlayImage
+FS_UnloadOverlayImage: ; 0x020D20F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FS_EndOverlay
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FS_EndOverlay
+FS_EndOverlay: ; 0x020D210C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r8, _020D220C ; =0x021D74C8
+ mov r11, r0
+ mov r9, #0x0
+_020D2120:
+ ldr r1, [r11, #0x8]
+ ldr r0, [r11, #0xc]
+ ldr r5, [r11, #0x4]
+ add r0, r1, r0
+ mov r7, r9
+ mov r6, r9
+ add r4, r5, r0
+ bl OS_DisableInterrupts
+ ldr lr, [r8, #0x0]
+ mov r10, r9
+ mov r12, lr
+ cmp lr, #0x0
+ beq _020D21C4
+_020D2154:
+ ldr r2, [r12, #0x8]
+ ldr r3, [r12, #0x0]
+ cmp r2, #0x0
+ ldr r1, [r12, #0x4]
+ bne _020D2178
+ cmp r1, r5
+ blo _020D2178
+ cmp r1, r4
+ blo _020D2188
+_020D2178:
+ cmp r2, r5
+ blo _020D21B4
+ cmp r2, r4
+ bhs _020D21B4
+_020D2188:
+ cmp r6, #0x0
+ strne r12, [r6, #0x0]
+ moveq r7, r12
+ cmp lr, r12
+ streq r3, [r8, #0x0]
+ moveq lr, r3
+ str r9, [r12, #0x0]
+ cmp r10, #0x0
+ mov r6, r12
+ strne r3, [r10, #0x0]
+ b _020D21B8
+_020D21B4:
+ mov r10, r12
+_020D21B8:
+ mov r12, r3
+ cmp r3, #0x0
+ bne _020D2154
+_020D21C4:
+ bl OS_RestoreInterrupts
+_020D21C8:
+ cmp r7, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11, lr}
+ bxeq lr
+_020D21D8:
+ ldr r1, [r7, #0x4]
+ ldr r4, [r7]
+ cmp r1, #0x0
+ beq _020D21F0
+ ldr r0, [r7, #0x8]
+ blx r1
+_020D21F0:
+ mov r7, r4
+ cmp r4, #0x0
+ bne _020D21D8
+ b _020D2120
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11, lr}
+ bx lr
+_020D220C: .word 0x021D74C8
+
+ arm_func_start FS_StartOverlay
+FS_StartOverlay: ; 0x020D2210
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ bl FSi_GetOverlayBinarySize
+ ldr r1, _020D2300 ; =0x027FFC40
+ mov r4, r0
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x2
+ bne _020D22A4
+ ldrb r1, [r5, #0x1f]
+ mov r0, #0x0
+ ands r1, r1, #0x2
+ beq _020D2280
+ ldr r1, _020D2304 ; =0x02106F84
+ ldr r3, _020D2308 ; =0x02106F84
+ ldr r2, _020D230C ; =0x66666667
+ sub r12, r1, r3
+ smull r1, lr, r2, r12
+ mov lr, lr, asr #0x3
+ mov r1, r12, lsr #0x1f
+ ldr r2, [r5, #0x0]
+ add lr, r1, lr
+ cmp r2, lr
+ bhs _020D2280
+ mov r0, #0x14
+ mla r0, r2, r0, r3
+ ldr r1, [r5, #0x4]
+ mov r2, r4
+ bl FSi_CompareDigest
+_020D2280:
+ cmp r0, #0x0
+ bne _020D22A4
+ ldr r0, [r5, #0x4]
+ mov r2, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+ bl OS_Terminate
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D22A4:
+ ldrb r0, [r5, #0x1f]
+ ands r0, r0, #0x1
+ beq _020D22BC
+ ldr r0, [r5, #0x4]
+ add r0, r0, r4
+ bl MIi_UncompressBackward
+_020D22BC:
+ ldr r0, [r5, #0x4]
+ ldr r1, [r5, #0x8]
+ bl DC_FlushRange
+ ldr r6, [r5, #0x10]
+ ldr r4, [r5, #0x14]
+ cmp r6, r4
+ ldmcsia sp!, {r4-r6,lr}
+ bxcs lr
+_020D22DC:
+ ldr r0, [r6, #0x0]
+ cmp r0, #0x0
+ beq _020D22EC
+ blx r0
+_020D22EC:
+ add r6, r6, #0x4
+ cmp r6, r4
+ blo _020D22DC
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D2300: .word 0x027FFC40
+_020D2304: .word 0x02106F84
+_020D2308: .word 0x02106F84
+_020D230C: .word 0x66666667
+
+ arm_func_start FSi_CompareDigest
+FSi_CompareDigest:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x58
+ mov r4, r0
+ mov r6, r1
+ mov r5, r2
+ add r0, sp, #0x4
+ mov r1, #0x0
+ mov r2, #0x14
+ bl MI_CpuFill8
+ ldr r0, _020D23AC ; =0x02106834
+ ldr r1, _020D23B0 ; =0x02106838
+ ldr r0, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ add r1, sp, #0x18
+ bl MI_CpuCopy8
+ ldr r3, _020D23B0 ; =0x02106838
+ mov r1, r6
+ ldr r12, [r3, #0x0]
+ mov r2, r5
+ add r0, sp, #0x4
+ add r3, sp, #0x18
+ str r12, [sp, #0x0]
+ bl MATH_CalcHMACSHA1
+ add r2, sp, #0x4
+ mov r3, #0x0
+_020D2374:
+ ldr r1, [r2, #0x0]
+ ldr r0, [r4, r3]
+ cmp r1, r0
+ bne _020D2394
+ add r3, r3, #0x4
+ cmp r3, #0x14
+ add r2, r2, #0x4
+ blo _020D2374
+_020D2394:
+ cmp r3, #0x14
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x58
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D23AC: .word 0x02106834
+_020D23B0: .word 0x02106838
+
+ arm_func_start FS_LoadOverlayImage
+FS_LoadOverlayImage: ; 0x020D23B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x54
+ mov r5, r0
+ add r0, sp, #0x8
+ bl FS_InitFile
+_020D23C8:
+ add r0, sp, #0x0
+ mov r1, r5
+ bl FS_GetOverlayFileID
+ add r1, sp, #0x0
+ add r0, sp, #0x8
+ ldmia r1, {r1, r2}
+ bl FS_OpenFileFast
+ cmp r0, #0x0
+ addeq sp, sp, #0x54
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5, lr}
+ bxeq lr
+ mov r0, r5
+ bl FSi_GetOverlayBinarySize
+ mov r4, r0
+ mov r0, r5
+ bl FS_ClearOverlayImage
+ ldr r1, [r5, #0x4]
+ add r0, sp, #0x8
+ mov r2, r4
+ bl FS_ReadFile
+ cmp r4, r0
+ beq _020D243C
+ add r0, sp, #0x8
+ bl FS_CloseFile
+ add sp, sp, #0x54
+ mov r0, #0x0
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020D243C:
+ add r0, sp, #0x8
+ bl FS_CloseFile
+ mov r0, #0x1
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+
+ arm_func_start FS_LoadOverlayImageAsync
+FS_LoadOverlayImageAsync: ; 0x020D2454
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r1
+ mov r6, r0
+ mov r0, r5
+ bl FS_InitFile
+_020D246C:
+ add r0, sp, #0x0
+ mov r1, r6
+ bl FS_GetOverlayFileID
+ add r1, sp, #0x0
+ mov r0, r5
+ ldmia r1, {r1, r2}
+ bl FS_OpenFileFast
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6, lr}
+ bxeq lr
+ mov r0, r6
+ bl FSi_GetOverlayBinarySize
+ mov r4, r0
+ mov r0, r6
+ bl FS_ClearOverlayImage
+ ldr r1, [r6, #0x4]
+ mov r0, r5
+ mov r2, r4
+ bl FS_ReadFileAsync
+ cmp r4, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r6, lr}
+ bxeq lr
+ mov r0, r5
+ bl FS_CloseFile
+ mov r0, #0x0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+
+ arm_func_start FS_LoadOverlayInfo
+FS_LoadOverlayInfo:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x64
+ movs r4, r1
+ mov r5, r0
+ ldreq r0, _020D25EC ; =0x021D5404
+ ldrne r0, _020D25F0 ; =0x021D540C
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ beq _020D25A8
+ ldr r0, [r0, #0x4]
+ mov r2, r2, lsl #0x5
+ cmp r2, r0
+ addcs sp, sp, #0x64
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ add r0, r3, r2
+ mov r1, r5
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ add r0, sp, #0x18
+ str r4, [r5, #0x20]
+ bl FS_InitFile
+ add r0, sp, #0x10
+ mov r1, r5
+ bl FS_GetOverlayFileID
+ add r1, sp, #0x10
+ add r0, sp, #0x18
+ ldmia r1, {r1-r2}
+ bl FS_OpenFileFast
+_020D2564:
+ cmp r0, #0x0
+ addeq sp, sp, #0x64
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [sp, #0x3c]
+ add r0, sp, #0x18
+ str r1, [r5, #0x24]
+ ldr r2, [sp, #0x40]
+ ldr r1, [sp, #0x3c]
+ sub r1, r2, r1
+ str r1, [r5, #0x28]
+ bl FS_CloseFile
+ add sp, sp, #0x64
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D25A8:
+ ldr r1, _020D25F4 ; =0x027FFE50
+ ldr ip, _020D25F8 ; =0x027FFE58
+ ldr r0, [r1, #0x0]
+ ldr r3, _020D25FC ; =0x021D5414
+ str r0, [sp, #0x0]
+ ldr r1, [r1, #0x4]
+ mov r0, r5
+ str r1, [sp, #0x4]
+ ldr r5, [r12, #0x0]
+ mov r1, r4
+ str r5, [sp, #0x8]
+ ldr r4, [r12, #0x4]
+ str r4, [sp, #0xc]
+ bl FSi_LoadOverlayInfoCore
+ add sp, sp, #0x64
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D25EC: .word 0x021D5404
+_020D25F0: .word 0x021D540C
+_020D25F4: .word 0x027FFE50
+_020D25F8: .word 0x027FFE58
+_020D25FC: .word 0x021D5414
+
+ arm_func_start FSi_LoadOverlayInfoCore
+FSi_LoadOverlayInfoCore: ; 0x020D2600
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x54
+ movs r9, r1
+ ldreq r5, [sp, #0x74]
+ ldreq r6, [sp, #0x70]
+ ldrne r5, [sp, #0x7c]
+ ldrne r6, [sp, #0x78]
+ mov r7, r2, lsl #0x5
+ cmp r7, r5
+ mov r4, r0
+ mov r8, r3
+ addcs sp, sp, #0x54
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r9,lr}
+ bxcs lr
+ add r0, sp, #0xc
+ bl FS_InitFile
+ mvn r12, #0x0
+ add r0, sp, #0xc
+ mov r1, r8
+ add r2, r6, r7
+ add r3, r6, r5
+ str r12, [sp, #0x0]
+ bl FS_OpenFileDirect
+_020D2660:
+ cmp r0, #0
+ addeq sp, sp, #0x54
+ moveq r0, #0
+ ldmeqia sp!, {r4-r9, lr}
+ bxeq lr
+ add r0, sp, #12
+ mov r1, r4
+ mov r2, #32
+ bl FS_ReadFile
+ cmp r0, #32
+ beq _020D26A4
+ add r0, sp, #12
+ bl FS_CloseFile
+ add sp, sp, #0x54
+ mov r0, #0x0
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+_020D26A4:
+ add r0, sp, #0xC
+ bl FS_CloseFile
+ add r0, sp, #0x4
+ mov r1, r4
+ str r9, [r4, #0x20]
+ bl FS_GetOverlayFileID
+ add r1, sp, #0x4
+ add r0, sp, #0xC
+ ldmia r1, {r1, r2}
+ bl FS_OpenFileFast
+ cmp r0, #0x0
+ addeq sp, sp, #0x54
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9, lr}
+ bxeq lr
+ ldr r1, [sp, #0x30]
+ add r0, sp, #0xC
+ str r1, [r4, #0x24]
+ ldr r2, [sp, #0x34]
+ ldr r1, [sp, #0x30]
+ sub r1, r2, r1
+ str r1, [r4, #0x28]
+ bl FS_CloseFile
+ mov r0, #0x1
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+
+ arm_func_start FS_GetOverlayFileID
+FS_GetOverlayFileID: ; 0x020D2710
+ sub sp, sp, #0x8
+ ldr r2, _020D2734 ; =0x021D5414
+ str r2, [sp, #0x0]
+ ldr r1, [r1, #0x18]
+ str r1, [sp, #0x4]
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ add sp, sp, #0x8
+ bx lr
+ .balign 4
+_020D2734: .word 0x021D5414
+
+ arm_func_start FS_ClearOverlayImage
+FS_ClearOverlayImage: ; 0x020D2738
+ stmdb sp!, {r4-r6,lr}
+ ldr r5, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ ldr r6, [r0, #0x4]
+ add r4, r5, r1
+ mov r0, r6
+ mov r1, r4
+ bl IC_InvalidateRange
+ mov r0, r6
+ mov r1, r4
+ bl DC_InvalidateRange
+ add r0, r6, r5
+ sub r2, r4, r5
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FSi_GetOverlayBinarySize
+FSi_GetOverlayBinarySize: ; 0x020D277C
+ ldrb r1, [r0, #0x1f]
+ ands r1, r1, #0x1
+ ldrne r0, [r0, #0x1c]
+ movne r0, r0, lsl #0x8
+ movne r0, r0, lsr #0x8
+ ldreq r0, [r0, #0x8]
+ bx lr
diff --git a/arm9/asm/GX_arm9.s b/arm9/asm/GX_arm9.s
new file mode 100644
index 00000000..59a548b2
--- /dev/null
+++ b/arm9/asm/GX_arm9.s
@@ -0,0 +1,5256 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start GXx_SetMasterBrightness_
+GXx_SetMasterBrightness_: ; 0x020C5978
+ cmp r1, #0x0
+ moveq r1, #0x0
+ streqh r1, [r0, #0x0]
+ bxeq lr
+ cmp r1, #0x0
+ orrgt r1, r1, #0x4000
+ strgth r1, [r0, #0x0]
+ rsble r1, r1, #0x0
+ orrle r1, r1, #0x8000
+ strleh r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start GXS_SetGraphicsMode
+GXS_SetGraphicsMode: ; 0x020C59A4
+ ldr r2, _020C59BC ; =0x04001000
+ ldr r1, [r2, #0x0]
+ bic r1, r1, #0x7
+ orr r0, r1, r0
+ str r0, [r2, #0x0]
+ bx lr
+ .balign 4
+_020C59BC: .word 0x04001000
+
+ arm_func_start GX_SetGraphicsMode
+GX_SetGraphicsMode: ; 0x020C59C0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _020C5A28 ; =0x02106810
+ mov lr, #0x4000000
+ ldrh r12, [r3, #0x0]
+ ldr lr, [lr, #0x0]
+ ldr r3, _020C5A2C ; =0x021D33C0
+ cmp r12, #0x0
+ strh r0, [r3, #0x0]
+ ldr r3, _020C5A30 ; =0xFFF0FFF0
+ moveq r0, #0x0
+ and r3, lr, r3
+ orr r0, r3, r0, lsl #0x10
+ orr r0, r1, r0
+ orr r1, r0, r2, lsl #0x3
+ mov r12, #0x4000000
+ ldr r0, _020C5A2C ; =0x021D33C0
+ str r1, [r12, #0x0]
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020C5A28 ; =0x02106810
+ moveq r1, #0x0
+ streqh r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C5A28: .word 0x02106810
+_020C5A2C: .word 0x021D33C0
+_020C5A30: .word 0xFFF0FFF0
+
+ arm_func_start GX_DispOn
+GX_DispOn: ; 0x020C5A34
+ ldr r0, _020C5A78 ; =0x021D33C0
+ ldr r1, _020C5A7C ; =0x02106810
+ ldrh r2, [r0, #0x0]
+ mov r0, #0x1
+ strh r0, [r1, #0x0]
+ cmp r2, #0x0
+ moveq r1, #0x4000000
+ ldreq r0, [r1, #0x0]
+ orreq r0, r0, #0x10000
+ streq r0, [r1, #0x0]
+ bxeq lr
+ mov r1, #0x4000000
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0x30000
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C5A78: .word 0x021D33C0
+_020C5A7C: .word 0x02106810
+
+ arm_func_start GX_DispOff
+GX_DispOff: ; 0x020C5A80
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, #0x4000000
+ ldr r12, [lr, #0x0]
+ ldr r1, _020C5AC0 ; =0x02106810
+ and r2, r12, #0x30000
+ mov r3, #0x0
+ ldr r0, _020C5AC4 ; =0x021D33C0
+ mov r2, r2, lsr #0x10
+ strh r3, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ bic r0, r12, #0x30000
+ str r0, [lr, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C5AC0: .word 0x02106810
+_020C5AC4: .word 0x021D33C0
+
+ arm_func_start GX_VBlankIntr
+GX_VBlankIntr: ; 0x020C5AC8
+ ldr r2, _020C5AF4 ; =0x04000004
+ cmp r0, #0x0
+ ldrh r0, [r2, #0x0]
+ ldrneh r1, [r2, #0x0]
+ and r0, r0, #0x8
+ orrne r1, r1, #0x8
+ strneh r1, [r2, #0x0]
+ ldreqh r1, [r2, #0x0]
+ biceq r1, r1, #0x8
+ streqh r1, [r2, #0x0]
+ bx lr
+ .balign 4
+_020C5AF4: .word 0x04000004
+
+ arm_func_start GX_HBlankIntr
+GX_HBlankIntr: ; 0x020C5AF8
+ ldr r2, _020C5B24 ; =0x04000004
+ cmp r0, #0x0
+ ldrh r0, [r2, #0x0]
+ ldrneh r1, [r2, #0x0]
+ and r0, r0, #0x10
+ orrne r1, r1, #0x10
+ strneh r1, [r2, #0x0]
+ ldreqh r1, [r2, #0x0]
+ biceq r1, r1, #0x10
+ streqh r1, [r2, #0x0]
+ bx lr
+ .balign 4
+_020C5B24: .word 0x04000004
+
+ arm_func_start GX_Init
+GX_Init: ; 0x020C5B28
+ stmdb sp!, {r4-r6,lr}
+ ldr r3, _020C5C68 ; =0x04000304
+ ldr r0, _020C5C6C ; =0xFFFFFDF1
+ ldrh r2, [r3, #0x0]
+ ldr r1, _020C5C70 ; =0x0000020E
+ orr r2, r2, #0x8000
+ strh r2, [r3, #0x0]
+ ldrh r2, [r3, #0x0]
+ and r0, r2, r0
+ orr r0, r0, r1
+ strh r0, [r3, #0x0]
+ ldrh r0, [r3, #0x0]
+ orr r0, r0, #0x1
+ strh r0, [r3, #0x0]
+ bl GX_InitGXState
+ ldr r5, _020C5C74 ; =0x021D33BC
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ bne _020C5B9C
+ mvn r4, #0x2
+_020C5B78:
+ bl OS_GetLockID
+ mov r6, r0
+ cmp r6, r4
+ bne _020C5B8C
+ bl OS_Terminate
+_020C5B8C:
+ strh r6, [r5, #0x0]
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020C5B78
+_020C5B9C:
+ ldr r0, _020C5C78 ; =0x04000004
+ mov r2, #0x0
+ strh r2, [r0, #0x0]
+ mov r1, #0x4000000
+ ldr r0, _020C5C7C ; =0x02106814
+ str r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C5BF4
+ ldr r1, _020C5C80 ; =0x04000008
+ mov r3, #0x60
+ bl MI_DmaFill32
+ ldr r1, _020C5C84 ; =0x0400006C
+ mov r2, #0x0
+ ldr r0, _020C5C7C ; =0x02106814
+ strh r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r1, _020C5C88 ; =0x04001000
+ mov r3, #0x70
+ bl MI_DmaFill32
+ b _020C5C1C
+_020C5BF4:
+ ldr r1, _020C5C80 ; =0x04000008
+ mov r0, r2
+ mov r2, #0x60
+ bl MIi_CpuClear32
+ ldr r3, _020C5C84 ; =0x0400006C
+ mov r0, #0x0
+ ldr r1, _020C5C88 ; =0x04001000
+ mov r2, #0x70
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClear32
+_020C5C1C:
+ ldr r1, _020C5C8C ; =0x04000020
+ mov r2, #0x100
+ ldr r0, _020C5C90 ; =0x04000026
+ strh r2, [r1, #0x0]
+ ldr r1, _020C5C94 ; =0x04000030
+ strh r2, [r0, #0x0]
+ ldr r0, _020C5C98 ; =0x04000036
+ strh r2, [r1, #0x0]
+ ldr r1, _020C5C9C ; =0x04001020
+ strh r2, [r0, #0x0]
+ ldr r0, _020C5CA0 ; =0x04001026
+ strh r2, [r1, #0x0]
+ ldr r1, _020C5CA4 ; =0x04001030
+ strh r2, [r0, #0x0]
+ ldr r0, _020C5CA8 ; =0x04001036
+ strh r2, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C5C68: .word 0x04000304
+_020C5C6C: .word 0xFFFFFDF1
+_020C5C70: .word 0x0000020E
+_020C5C74: .word 0x021D33BC
+_020C5C78: .word 0x04000004
+_020C5C7C: .word 0x02106814
+_020C5C80: .word 0x04000008
+_020C5C84: .word 0x0400006C
+_020C5C88: .word 0x04001000
+_020C5C8C: .word 0x04000020
+_020C5C90: .word 0x04000026
+_020C5C94: .word 0x04000030
+_020C5C98: .word 0x04000036
+_020C5C9C: .word 0x04001020
+_020C5CA0: .word 0x04001026
+_020C5CA4: .word 0x04001030
+_020C5CA8: .word 0x04001036
+
+ arm_func_start GX_InitGXState
+GX_InitGXState: ; 0x020C5CAC
+ ldr r0, _020C5D14 ; =0x021D33C4
+ mov r3, #0x0
+ ldr r2, _020C5D18 ; =0x04000240
+ strh r3, [r0, #0x0]
+ strh r3, [r0, #0x2]
+ strh r3, [r0, #0x4]
+ strh r3, [r0, #0x6]
+ strh r3, [r0, #0x8]
+ strh r3, [r0, #0xa]
+ strh r3, [r0, #0xc]
+ strh r3, [r0, #0xe]
+ strh r3, [r0, #0x10]
+ strh r3, [r0, #0x12]
+ strh r3, [r0, #0x14]
+ strh r3, [r0, #0x16]
+ strh r3, [r0, #0x18]
+ ldr r1, _020C5D1C ; =0x04000244
+ str r3, [r2, #0x0]
+ ldr r0, _020C5D20 ; =0x04000245
+ strb r3, [r1, #0x0]
+ ldr r1, _020C5D24 ; =0x04000246
+ strb r3, [r0, #0x0]
+ ldr r0, _020C5D28 ; =0x04000248
+ strb r3, [r1, #0x0]
+ strh r3, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C5D14: .word 0x021D33C4
+_020C5D18: .word 0x04000240
+_020C5D1C: .word 0x04000244
+_020C5D20: .word 0x04000245
+_020C5D24: .word 0x04000246
+_020C5D28: .word 0x04000248
+
+ arm_func_start GX_GetBankForSubOBJExtPltt
+GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C
+ ldr r0, _020C5D38 ; =0x021D33C4
+ ldrh r0, [r0, #0x18]
+ bx lr
+ .balign 4
+_020C5D38: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForSubBGExtPltt
+GX_GetBankForSubBGExtPltt: ; 0x020C5D3C
+ ldr r0, _020C5D48 ; =0x021D33C4
+ ldrh r0, [r0, #0x16]
+ bx lr
+ .balign 4
+_020C5D48: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForSubOBJ
+GX_GetBankForSubOBJ: ; 0x020C5D4C
+ ldr r0, _020C5D58 ; =0x021D33C4
+ ldrh r0, [r0, #0x14]
+ bx lr
+ .balign 4
+_020C5D58: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForSubBGExtPltt_2
+GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C
+ ldr r0, _020C5D68 ; =0x021D33C4
+ ldrh r0, [r0, #0x12]
+ bx lr
+ .balign 4
+_020C5D68: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForLCDC
+GX_GetBankForLCDC: ; 0x020C5D6C
+ ldr r0, _020C5D78 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C5D78: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForTexPltt
+GX_GetBankForTexPltt: ; 0x020C5D7C
+ ldr r0, _020C5D88 ; =0x021D33C4
+
+ arm_func_start FUN_020C5D80
+FUN_020C5D80: ; 0x020C5D80
+ ldrh r0, [r0, #0xa]
+ bx lr
+ .balign 4
+_020C5D88: .word 0x021D33C4
+
+ arm_func_start FUN_020C5D8C
+FUN_020C5D8C: ; 0x020C5D8C
+ ldr r0, _020C5D98 ; =0x021D33C4
+ ldrh r0, [r0, #0x8]
+ bx lr
+ .balign 4
+_020C5D98: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForOBJExtPltt
+GX_GetBankForOBJExtPltt: ; 0x020C5D9C
+ ldr r0, _020C5DA8 ; =0x021D33C4
+ ldrh r0, [r0, #0x10]
+ bx lr
+ .balign 4
+_020C5DA8: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForBGExtPltt
+GX_GetBankForBGExtPltt: ; 0x020C5DAC
+ ldr r0, _020C5DB8 ; =0x021D33C4
+ ldrh r0, [r0, #0xe]
+ bx lr
+ .balign 4
+_020C5DB8: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForOBJ
+GX_GetBankForOBJ: ; 0x020C5DBC
+ ldr r0, _020C5DC8 ; =0x021D33C4
+ ldrh r0, [r0, #0x4]
+ bx lr
+ .balign 4
+_020C5DC8: .word 0x021D33C4
+
+ arm_func_start GX_GetBankForBGExtPltt_2
+GX_GetBankForBGExtPltt_2: ; 0x020C5DCC
+ ldr r0, _020C5DD8 ; =0x021D33C4
+ ldrh r0, [r0, #0x2]
+ bx lr
+ .balign 4
+_020C5DD8: .word 0x021D33C4
+
+ arm_func_start GX_DisableBankForSubOBJExtPltt
+GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC
+ ldr r2, _020C5DF8 ; =0x04001000
+ ldr ip, _020C5DFC ; =FUN_020C5F28
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C5E00 ; =0x021D33DC
+ bic r1, r1, #0x80000000
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C5DF8: .word 0x04001000
+_020C5DFC: .word FUN_020C5F28
+_020C5E00: .word 0x021D33DC
+
+ arm_func_start FUN_020C5E04
+FUN_020C5E04: ; 0x020C5E04
+ ldr r2, _020C5E20 ; =0x04001000
+ ldr ip, _020C5E24 ; =FUN_020C5F28
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C5E28 ; =0x021D33DA
+ bic r1, r1, #0x40000000
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C5E20: .word 0x04001000
+_020C5E24: .word FUN_020C5F28
+_020C5E28: .word 0x021D33DA
+
+ arm_func_start GX_DisableBankForSubOBJExtPltt_2
+GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C
+ ldr ip, _020C5E38 ; =FUN_020C5F28
+ ldr r0, _020C5E3C ; =0x021D33D8
+ bx r12
+ .balign 4
+_020C5E38: .word FUN_020C5F28
+_020C5E3C: .word 0x021D33D8
+
+ arm_func_start GX_DisableBankForSubBGExtPltt
+GX_DisableBankForSubBGExtPltt: ; 0x020C5E40
+ ldr ip, _020C5E4C ; =FUN_020C5F28
+ ldr r0, _020C5E50 ; =0x021D33D6
+ bx r12
+ .balign 4
+_020C5E4C: .word FUN_020C5F28
+_020C5E50: .word 0x021D33D6
+
+ arm_func_start GX_DisableBankForLCDC
+GX_DisableBankForLCDC: ; 0x020C5E54
+ ldr ip, _020C5E60 ; =FUN_020C5F28
+ ldr r0, _020C5E64 ; =0x021D33C4
+ bx r12
+ .balign 4
+_020C5E60: .word FUN_020C5F28
+_020C5E64: .word 0x021D33C4
+
+ arm_func_start GX_DisableBankForARM7
+GX_DisableBankForARM7: ; 0x020C5E68
+ ldr ip, _020C5E74 ; =FUN_020C5F28
+ ldr r0, _020C5E78 ; =0x021D33CA
+ bx r12
+ .balign 4
+_020C5E74: .word FUN_020C5F28
+_020C5E78: .word 0x021D33CA
+
+ arm_func_start GX_DisableBankForClearImage
+GX_DisableBankForClearImage: ; 0x020C5E7C
+ ldr ip, _020C5E88 ; =FUN_020C5F28
+ ldr r0, _020C5E8C ; =0x021D33D0
+ bx r12
+ .balign 4
+_020C5E88: .word FUN_020C5F28
+_020C5E8C: .word 0x021D33D0
+
+ arm_func_start GX_DisableBankForTexPltt
+GX_DisableBankForTexPltt: ; 0x020C5E90
+ ldr ip, _020C5E9C ; =FUN_020C5F28
+ ldr r0, _020C5EA0 ; =0x021D33CE
+ bx r12
+ .balign 4
+_020C5E9C: .word FUN_020C5F28
+_020C5EA0: .word 0x021D33CE
+
+ arm_func_start GX_DisableBankForTexPltt_2
+GX_DisableBankForTexPltt_2: ; 0x020C5EA4
+ ldr ip, _020C5EB0 ; =FUN_020C5F28
+ ldr r0, _020C5EB4 ; =0x021D33CC
+ bx r12
+ .balign 4
+_020C5EB0: .word FUN_020C5F28
+_020C5EB4: .word 0x021D33CC
+
+ arm_func_start GX_DisableBankForOBJExtPltt
+GX_DisableBankForOBJExtPltt: ; 0x020C5EB8
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr ip, _020C5ED4 ; =FUN_020C5F28
+ bic r1, r1, #0x80000000
+ ldr r0, _020C5ED8 ; =0x021D33D4
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C5ED4: .word FUN_020C5F28
+_020C5ED8: .word 0x021D33D4
+
+ arm_func_start GX_DisableBankForBGExtPltt
+GX_DisableBankForBGExtPltt: ; 0x020C5EDC
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr ip, _020C5EF8 ; =FUN_020C5F28
+ bic r1, r1, #0x40000000
+ ldr r0, _020C5EFC ; =0x021D33D2
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C5EF8: .word FUN_020C5F28
+_020C5EFC: .word 0x021D33D2
+
+ arm_func_start GX_DisableBankForOBJExtPltt_2
+GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00
+ ldr ip, _020C5F0C ; =FUN_020C5F28
+ ldr r0, _020C5F10 ; =0x021D33C8
+ bx r12
+ .balign 4
+_020C5F0C: .word FUN_020C5F28
+_020C5F10: .word 0x021D33C8
+
+ arm_func_start disableBankForX_
+disableBankForX_: ; 0x020C5F14
+ ldr ip, _020C5F20 ; =FUN_020C5F28
+ ldr r0, _020C5F24 ; =0x021D33C6
+ bx r12
+ .balign 4
+_020C5F20: .word FUN_020C5F28
+_020C5F24: .word 0x021D33C6
+
+ arm_func_start FUN_020C5F28
+FUN_020C5F28: ; 0x020C5F28
+ stmdb sp!, {r4,lr}
+ ldrh r4, [r0, #0x0]
+ mov r1, #0x0
+ strh r1, [r0, #0x0]
+ ands r0, r4, #0x1
+ ldrne r0, _020C5FE4 ; =0x04000240
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x2
+ ldrne r0, _020C5FE8 ; =0x04000241
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x4
+ ldrne r0, _020C5FEC ; =0x04000242
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x8
+ ldrne r0, _020C5FF0 ; =0x04000243
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x10
+ ldrne r0, _020C5FF4 ; =0x04000244
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x20
+ ldrne r0, _020C5FF8 ; =0x04000245
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x40
+ ldrne r0, _020C5FFC ; =0x04000246
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x80
+ ldrne r0, _020C6000 ; =0x04000248
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ands r0, r4, #0x100
+ ldrne r0, _020C6004 ; =0x04000249
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ ldr r1, _020C6008 ; =0x021D33BC
+ mov r0, r4, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ bl OSi_UnlockVram
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C5FE4: .word 0x04000240
+_020C5FE8: .word 0x04000241
+_020C5FEC: .word 0x04000242
+_020C5FF0: .word 0x04000243
+_020C5FF4: .word 0x04000244
+_020C5FF8: .word 0x04000245
+_020C5FFC: .word 0x04000246
+_020C6000: .word 0x04000248
+_020C6004: .word 0x04000249
+_020C6008: .word 0x021D33BC
+
+ arm_func_start GX_ResetBankForSubOBJ
+GX_ResetBankForSubOBJ: ; 0x020C600C
+ ldr r2, _020C6028 ; =0x04001000
+ ldr ip, _020C602C ; =FUN_020C6130
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C6030 ; =0x021D33DC
+ bic r1, r1, #0x80000000
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C6028: .word 0x04001000
+_020C602C: .word FUN_020C6130
+_020C6030: .word 0x021D33DC
+
+ arm_func_start FUN_020C6034
+FUN_020C6034: ; 0x020C6034
+ ldr r2, _020C6050 ; =0x04001000
+ ldr ip, _020C6054 ; =FUN_020C6130
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C6058 ; =0x021D33DA
+ bic r1, r1, #0x40000000
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C6050: .word 0x04001000
+_020C6054: .word FUN_020C6130
+_020C6058: .word 0x021D33DA
+
+ arm_func_start FUN_020C605C
+FUN_020C605C: ; 0x020C605C
+ ldr ip, _020C6068 ; =FUN_020C6130
+ ldr r0, _020C606C ; =0x021D33D8
+ bx r12
+ .balign 4
+_020C6068: .word FUN_020C6130
+_020C606C: .word 0x021D33D8
+
+ arm_func_start GX_ResetBankForSubBG
+GX_ResetBankForSubBG: ; 0x020C6070
+ ldr ip, _020C607C ; =FUN_020C6130
+ ldr r0, _020C6080 ; =0x021D33D6
+ bx r12
+ .balign 4
+_020C607C: .word FUN_020C6130
+_020C6080: .word 0x021D33D6
+
+ arm_func_start GX_ResetBankForClearImage
+GX_ResetBankForClearImage: ; 0x020C6084
+ ldr ip, _020C6090 ; =FUN_020C6130
+ ldr r0, _020C6094 ; =0x021D33D0
+ bx r12
+ .balign 4
+_020C6090: .word FUN_020C6130
+_020C6094: .word 0x021D33D0
+
+ arm_func_start GX_ResetBankForTexPltt
+GX_ResetBankForTexPltt: ; 0x020C6098
+ ldr ip, _020C60A4 ; =FUN_020C6130
+ ldr r0, _020C60A8 ; =0x021D33CE
+ bx r12
+ .balign 4
+_020C60A4: .word FUN_020C6130
+_020C60A8: .word 0x021D33CE
+
+ arm_func_start GX_ResetBankForTex
+GX_ResetBankForTex: ; 0x020C60AC
+ ldr ip, _020C60B8 ; =FUN_020C6130
+ ldr r0, _020C60BC ; =0x021D33CC
+ bx r12
+ .balign 4
+_020C60B8: .word FUN_020C6130
+_020C60BC: .word 0x021D33CC
+
+ arm_func_start GX_ResetBankForOBJExtPltt
+GX_ResetBankForOBJExtPltt: ; 0x020C60C0
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr ip, _020C60DC ; =FUN_020C6130
+ bic r1, r1, #0x80000000
+ ldr r0, _020C60E0 ; =0x021D33D4
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C60DC: .word FUN_020C6130
+_020C60E0: .word 0x021D33D4
+
+ arm_func_start GX_ResetBankForBGExtPltt
+GX_ResetBankForBGExtPltt: ; 0x020C60E4
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr ip, _020C6100 ; =FUN_020C6130
+ bic r1, r1, #0x40000000
+ ldr r0, _020C6104 ; =0x021D33D2
+ str r1, [r2, #0x0]
+ bx r12
+ .balign 4
+_020C6100: .word FUN_020C6130
+_020C6104: .word 0x021D33D2
+
+ arm_func_start GX_ResetBankForOBJ
+GX_ResetBankForOBJ: ; 0x020C6108
+ ldr ip, _020C6114 ; =FUN_020C6130
+ ldr r0, _020C6118 ; =0x021D33C8
+ bx r12
+ .balign 4
+_020C6114: .word FUN_020C6130
+_020C6118: .word 0x021D33C8
+
+ arm_func_start GX_ResetBankForBG
+GX_ResetBankForBG: ; 0x020C611C
+ ldr ip, _020C6128 ; =FUN_020C6130
+ ldr r0, _020C612C ; =0x021D33C6
+ bx r12
+ .balign 4
+_020C6128: .word FUN_020C6130
+_020C612C: .word 0x021D33C6
+
+ arm_func_start FUN_020C6130
+FUN_020C6130: ; 0x020C6130
+ stmdb sp!, {r4,lr}
+ ldrh r4, [r0, #0x0]
+ mov r2, #0x0
+ ldr r1, _020C6164 ; =0x021D33C4
+ strh r2, [r0, #0x0]
+ ldrh r2, [r1, #0x0]
+ mov r0, r4
+ orr r2, r2, r4
+ strh r2, [r1, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C6164: .word 0x021D33C4
+
+ arm_func_start GX_SetBankForSubOBJExtPltt
+GX_SetBankForSubOBJExtPltt: ; 0x020C6168
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C61E8 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x18]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x0
+ strh r0, [r1, #0x18]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ beq _020C61C0
+ cmp r0, #0x100
+ bne _020C61D0
+ ldr r3, _020C61EC ; =0x04001000
+ ldr r0, _020C61F0 ; =0x04000249
+ ldr r2, [r3, #0x0]
+ mov r1, #0x83
+ orr r2, r2, #0x80000000
+ str r2, [r3, #0x0]
+ strb r1, [r0, #0x0]
+ b _020C61D0
+_020C61C0:
+ ldr r1, _020C61EC ; =0x04001000
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0x80000000
+ str r0, [r1, #0x0]
+_020C61D0:
+ ldr r0, _020C61E8 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C61E8: .word 0x021D33C4
+_020C61EC: .word 0x04001000
+_020C61F0: .word 0x04000249
+
+ arm_func_start GX_SetBankForSubBGExtPltt
+GX_SetBankForSubBGExtPltt: ; 0x020C61F4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6274 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x16]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x0
+ strh r0, [r1, #0x16]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ beq _020C624C
+ cmp r0, #0x80
+ bne _020C625C
+ ldr r3, _020C6278 ; =0x04001000
+ ldr r0, _020C627C ; =0x04000248
+ ldr r2, [r3, #0x0]
+ mov r1, #0x82
+ orr r2, r2, #0x40000000
+ str r2, [r3, #0x0]
+ strb r1, [r0, #0x0]
+ b _020C625C
+_020C624C:
+ ldr r1, _020C6278 ; =0x04001000
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0x40000000
+ str r0, [r1, #0x0]
+_020C625C:
+ ldr r0, _020C6274 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6274: .word 0x021D33C4
+_020C6278: .word 0x04001000
+_020C627C: .word 0x04000248
+
+ arm_func_start GX_SetBankForSubOBJ
+GX_SetBankForSubOBJ: ; 0x020C6280
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C62F0 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x14]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x0
+ strh r0, [r1, #0x14]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ beq _020C62D8
+ cmp r0, #0x8
+ beq _020C62CC
+ cmp r0, #0x100
+ ldreq r0, _020C62F4 ; =0x04000249
+ moveq r1, #0x82
+ streqb r1, [r0, #0x0]
+ b _020C62D8
+_020C62CC:
+ ldr r0, _020C62F8 ; =0x04000243
+ mov r1, #0x84
+ strb r1, [r0, #0x0]
+_020C62D8:
+ ldr r0, _020C62F0 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C62F0: .word 0x021D33C4
+_020C62F4: .word 0x04000249
+_020C62F8: .word 0x04000243
+
+ arm_func_start GX_SetBankForSubBG
+GX_SetBankForSubBG: ; 0x020C62FC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6398 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x12]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x80
+ strh r0, [r1, #0x12]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C6360
+ cmp r0, #0x80
+ bge _020C6374
+ cmp r0, #0x4
+ bgt _020C6380
+ cmp r0, #0x0
+ blt _020C6380
+ cmp r0, #0x0
+ beq _020C6380
+ cmp r0, #0x4
+ ldreq r0, _020C639C ; =0x04000242
+ moveq r1, #0x84
+ streqb r1, [r0, #0x0]
+ b _020C6380
+_020C6360:
+ cmp r0, #0x180
+ bne _020C6380
+ ldr r0, _020C63A0 ; =0x04000249
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+_020C6374:
+ ldr r0, _020C63A4 ; =0x04000248
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+_020C6380:
+ ldr r0, _020C6398 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6398: .word 0x021D33C4
+_020C639C: .word 0x04000242
+_020C63A0: .word 0x04000249
+_020C63A4: .word 0x04000248
+
+ arm_func_start GX_SetBankForLCDC
+GX_SetBankForLCDC: ; 0x020C63A8
+ ldr r1, _020C63C0 ; =0x021D33C4
+ ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_
+ ldrh r2, [r1, #0x0]
+ orr r2, r2, r0
+ strh r2, [r1, #0x0]
+ bx r12
+ .balign 4
+_020C63C0: .word 0x021D33C4
+_020C63C4: .word GX_VRAMCNT_SetLCDC_
+
+ arm_func_start GX_SetBankForARM7
+GX_SetBankForARM7: ; 0x020C63C8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6474 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x6]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x8
+ strh r0, [r1, #0x6]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C642C
+ cmp r0, #0x8
+ bge _020C6450
+ cmp r0, #0x4
+ bgt _020C645C
+ cmp r0, #0x0
+ blt _020C645C
+ cmp r0, #0x0
+ beq _020C645C
+ cmp r0, #0x4
+ ldreq r0, _020C6478 ; =0x04000242
+ moveq r1, #0x82
+ streqb r1, [r0, #0x0]
+ b _020C645C
+_020C642C:
+ cmp r0, #0xc
+ bne _020C645C
+ ldr r1, _020C647C ; =0x04000243
+ mov r2, #0x8a
+ strb r2, [r1, #0x0]
+ ldr r0, _020C6478 ; =0x04000242
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+ b _020C645C
+_020C6450:
+ ldr r0, _020C647C ; =0x04000243
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+_020C645C:
+ ldr r0, _020C6474 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6474: .word 0x021D33C4
+_020C6478: .word 0x04000242
+_020C647C: .word 0x04000243
+
+ arm_func_start GX_SetBankForClearImage
+GX_SetBankForClearImage: ; 0x020C6480
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C65A8 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0xc]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0xc
+ strh r0, [r1, #0xc]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ addls pc, pc, r0, lsl #0x2
+ b _020C6590
+_020C64B4: ; 0x020C64B4
+ b _020C6540
+_020C64B8: ; 0x020C64B8
+ b _020C6554
+_020C64BC: ; 0x020C64BC
+ b _020C64F4
+_020C64C0: ; 0x020C64C0
+ b _020C64E8
+_020C64C4: ; 0x020C64C4
+ b _020C6574
+_020C64C8: ; 0x020C64C8
+ b _020C6590
+_020C64CC: ; 0x020C64CC
+ b _020C6590
+_020C64D0: ; 0x020C64D0
+ b _020C6590
+_020C64D4: ; 0x020C64D4
+ b _020C6520
+_020C64D8: ; 0x020C64D8
+ b _020C6590
+_020C64DC: ; 0x020C64DC
+ b _020C6590
+_020C64E0: ; 0x020C64E0
+ b _020C6590
+_020C64E4: ; 0x020C64E4
+ b _020C6514
+_020C64E8:
+ ldr r0, _020C65AC ; =0x04000240
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+_020C64F4:
+ ldr r0, _020C65B0 ; =0x04000241
+ mov r2, #0x9b
+ ldr r1, _020C65B4 ; =0x04000060
+ strb r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x4000
+ strh r0, [r1, #0x0]
+ b _020C6590
+_020C6514:
+ ldr r0, _020C65B8 ; =0x04000242
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+_020C6520:
+ ldr r0, _020C65BC ; =0x04000243
+ mov r2, #0x9b
+ ldr r1, _020C65B4 ; =0x04000060
+ strb r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x4000
+ strh r0, [r1, #0x0]
+ b _020C6590
+_020C6540:
+ ldr r1, _020C65B4 ; =0x04000060
+ ldrh r0, [r1, #0x0]
+ bic r0, r0, #0x4000
+ strh r0, [r1, #0x0]
+ b _020C6590
+_020C6554:
+ ldr r0, _020C65AC ; =0x04000240
+ mov r2, #0x9b
+ ldr r1, _020C65B4 ; =0x04000060
+ strb r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x4000
+ strh r0, [r1, #0x0]
+ b _020C6590
+_020C6574:
+ ldr r0, _020C65B8 ; =0x04000242
+ mov r2, #0x9b
+ ldr r1, _020C65B4 ; =0x04000060
+ strb r2, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x4000
+ strh r0, [r1, #0x0]
+_020C6590:
+ ldr r0, _020C65A8 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C65A8: .word 0x021D33C4
+_020C65AC: .word 0x04000240
+_020C65B0: .word 0x04000241
+_020C65B4: .word 0x04000060
+_020C65B8: .word 0x04000242
+_020C65BC: .word 0x04000243
+
+ arm_func_start GX_SetBankForTexPltt
+GX_SetBankForTexPltt: ; 0x020C65C0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C66A4 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0xa]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x30
+ strh r0, [r1, #0xa]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C661C
+ cmp r0, #0x30
+ bge _020C6674
+ cmp r0, #0x10
+ bgt _020C6610
+ cmp r0, #0x10
+ bge _020C6680
+ cmp r0, #0x0
+ b _020C668C
+_020C6610:
+ cmp r0, #0x20
+ beq _020C6658
+ b _020C668C
+_020C661C:
+ cmp r0, #0x60
+ bgt _020C6640
+ cmp r0, #0x60
+ bge _020C664C
+ cmp r0, #0x40
+ ldreq r0, _020C66A8 ; =0x04000246
+ moveq r1, #0x83
+ streqb r1, [r0, #0x0]
+ b _020C668C
+_020C6640:
+ cmp r0, #0x70
+ beq _020C6668
+ b _020C668C
+_020C664C:
+ ldr r0, _020C66A8 ; =0x04000246
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+_020C6658:
+ ldr r0, _020C66AC ; =0x04000245
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+ b _020C668C
+_020C6668:
+ ldr r0, _020C66A8 ; =0x04000246
+ mov r1, #0x9b
+ strb r1, [r0, #0x0]
+_020C6674:
+ ldr r0, _020C66AC ; =0x04000245
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+_020C6680:
+ ldr r0, _020C66B0 ; =0x04000244
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+_020C668C:
+ ldr r0, _020C66A4 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C66A4: .word 0x021D33C4
+_020C66A8: .word 0x04000246
+_020C66AC: .word 0x04000245
+_020C66B0: .word 0x04000244
+
+ arm_func_start GX_SetBankForTex
+GX_SetBankForTex: ; 0x020C66B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C689C ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x8]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x0
+ strh r0, [r1, #0x8]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bne _020C66FC
+ ldr r2, _020C68A0 ; =0x04000060
+ ldr r0, _020C68A4 ; =0x0000CFFE
+ ldrh r1, [r2, #0x0]
+ and r0, r1, r0
+ strh r0, [r2, #0x0]
+ b _020C6884
+_020C66FC:
+ ldr r2, _020C68A0 ; =0x04000060
+ cmp r0, #0xf
+ ldrh r1, [r2, #0x0]
+ bic r1, r1, #0x3000
+ orr r1, r1, #0x1
+ strh r1, [r2, #0x0]
+ addls pc, pc, r0, lsl #0x2
+ b _020C6884
+_020C671C: ; 0x020C671C
+ b _020C6884
+_020C6720: ; 0x020C6720
+ b _020C6878
+_020C6724: ; 0x020C6724
+ b _020C6844
+_020C6728: ; 0x020C6728
+ b _020C686C
+_020C672C: ; 0x020C672C
+ b _020C681C
+_020C6730: ; 0x020C6730
+ b _020C675C
+_020C6734: ; 0x020C6734
+ b _020C6838
+_020C6738: ; 0x020C6738
+ b _020C6860
+_020C673C: ; 0x020C673C
+ b _020C6800
+_020C6740: ; 0x020C6740
+ b _020C6778
+_020C6744: ; 0x020C6744
+ b _020C6794
+_020C6748: ; 0x020C6748
+ b _020C67B0
+_020C674C: ; 0x020C674C
+ b _020C6810
+_020C6750: ; 0x020C6750
+ b _020C67D8
+_020C6754: ; 0x020C6754
+ b _020C682C
+_020C6758: ; 0x020C6758
+ b _020C6854
+_020C675C:
+ ldr r1, _020C68A8 ; =0x04000240
+ mov r2, #0x83
+ ldr r0, _020C68AC ; =0x04000242
+ strb r2, [r1, #0x0]
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C6778:
+ ldr r1, _020C68A8 ; =0x04000240
+ mov r2, #0x83
+ ldr r0, _020C68B0 ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C6794:
+ ldr r1, _020C68B4 ; =0x04000241
+ mov r2, #0x83
+ ldr r0, _020C68B0 ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C67B0:
+ ldr r0, _020C68A8 ; =0x04000240
+ mov r2, #0x83
+ ldr r1, _020C68B4 ; =0x04000241
+ strb r2, [r0, #0x0]
+ mov r2, #0x8b
+ ldr r0, _020C68B0 ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C67D8:
+ ldr r0, _020C68A8 ; =0x04000240
+ mov r2, #0x83
+ ldr r1, _020C68AC ; =0x04000242
+ strb r2, [r0, #0x0]
+ mov r2, #0x8b
+ ldr r0, _020C68B0 ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C6800:
+ ldr r0, _020C68B0 ; =0x04000243
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C6810:
+ ldr r0, _020C68B0 ; =0x04000243
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+_020C681C:
+ ldr r0, _020C68AC ; =0x04000242
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C682C:
+ ldr r0, _020C68B0 ; =0x04000243
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+_020C6838:
+ ldr r0, _020C68AC ; =0x04000242
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+_020C6844:
+ ldr r0, _020C68B4 ; =0x04000241
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+ b _020C6884
+_020C6854:
+ ldr r0, _020C68B0 ; =0x04000243
+ mov r1, #0x9b
+ strb r1, [r0, #0x0]
+_020C6860:
+ ldr r0, _020C68AC ; =0x04000242
+ mov r1, #0x93
+ strb r1, [r0, #0x0]
+_020C686C:
+ ldr r0, _020C68B4 ; =0x04000241
+ mov r1, #0x8b
+ strb r1, [r0, #0x0]
+_020C6878:
+ ldr r0, _020C68A8 ; =0x04000240
+ mov r1, #0x83
+ strb r1, [r0, #0x0]
+_020C6884:
+ ldr r0, _020C689C ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C689C: .word 0x021D33C4
+_020C68A0: .word 0x04000060
+_020C68A4: .word 0x0000CFFE
+_020C68A8: .word 0x04000240
+_020C68AC: .word 0x04000242
+_020C68B0: .word 0x04000243
+_020C68B4: .word 0x04000241
+
+ arm_func_start GX_SetBankForOBJExtPltt
+GX_SetBankForOBJExtPltt: ; 0x020C68B8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6964 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x10]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x0
+ strh r0, [r1, #0x10]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ beq _020C693C
+ cmp r0, #0x20
+ beq _020C68FC
+ cmp r0, #0x40
+ beq _020C691C
+ b _020C694C
+_020C68FC:
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C6968 ; =0x04000245
+ orr r1, r1, #0x80000000
+ str r1, [r2, #0x0]
+ mov r1, #0x85
+ strb r1, [r0, #0x0]
+ b _020C694C
+_020C691C:
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C696C ; =0x04000246
+ orr r1, r1, #0x80000000
+ str r1, [r2, #0x0]
+ mov r1, #0x85
+ strb r1, [r0, #0x0]
+ b _020C694C
+_020C693C:
+ mov r1, #0x4000000
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0x80000000
+ str r0, [r1, #0x0]
+_020C694C:
+ ldr r0, _020C6964 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6964: .word 0x021D33C4
+_020C6968: .word 0x04000245
+_020C696C: .word 0x04000246
+
+ arm_func_start GX_SetBankForBGExtPltt
+GX_SetBankForBGExtPltt: ; 0x020C6970
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6A74 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0xe]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x20
+ strh r0, [r1, #0xe]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C69D4
+ cmp r0, #0x20
+ bge _020C6A40
+ cmp r0, #0x0
+ bgt _020C69C8
+ cmp r0, #0x0
+ moveq r1, #0x4000000
+ ldreq r0, [r1, #0x0]
+ biceq r0, r0, #0x40000000
+ streq r0, [r1, #0x0]
+ b _020C6A5C
+_020C69C8:
+ cmp r0, #0x10
+ beq _020C69F4
+ b _020C6A5C
+_020C69D4:
+ cmp r0, #0x40
+ bgt _020C69E8
+ cmp r0, #0x40
+ beq _020C6A14
+ b _020C6A5C
+_020C69E8:
+ cmp r0, #0x60
+ beq _020C6A34
+ b _020C6A5C
+_020C69F4:
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C6A78 ; =0x04000244
+ orr r1, r1, #0x40000000
+ str r1, [r2, #0x0]
+ mov r1, #0x84
+ strb r1, [r0, #0x0]
+ b _020C6A5C
+_020C6A14:
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldr r0, _020C6A7C ; =0x04000246
+ orr r1, r1, #0x40000000
+ str r1, [r2, #0x0]
+ mov r1, #0x8c
+ strb r1, [r0, #0x0]
+ b _020C6A5C
+_020C6A34:
+ ldr r0, _020C6A7C ; =0x04000246
+ mov r1, #0x8c
+ strb r1, [r0, #0x0]
+_020C6A40:
+ ldr r0, _020C6A80 ; =0x04000245
+ mov r1, #0x84
+ strb r1, [r0, #0x0]
+ mov r1, #0x4000000
+ ldr r0, [r1, #0x0]
+ orr r0, r0, #0x40000000
+ str r0, [r1, #0x0]
+_020C6A5C:
+ ldr r0, _020C6A74 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6A74: .word 0x021D33C4
+_020C6A78: .word 0x04000244
+_020C6A7C: .word 0x04000246
+_020C6A80: .word 0x04000245
+
+ arm_func_start GX_SetBankForOBJ
+GX_SetBankForOBJ: ; 0x020C6A84
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6BD8 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x4]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x30
+ strh r0, [r1, #0x4]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C6AF4
+ cmp r0, #0x30
+ bge _020C6B70
+ cmp r0, #0x10
+ bgt _020C6AE8
+ cmp r0, #0x10
+ bge _020C6B7C
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020C6BC0
+_020C6AD8: ; 0x020C6AD8
+ b _020C6BC0
+_020C6ADC: ; 0x020C6ADC
+ b _020C6B44
+_020C6AE0: ; 0x020C6AE0
+ b _020C6B54
+_020C6AE4: ; 0x020C6AE4
+ b _020C6B38
+_020C6AE8:
+ cmp r0, #0x20
+ beq _020C6BB4
+ b _020C6BC0
+_020C6AF4:
+ cmp r0, #0x50
+ bgt _020C6B18
+ cmp r0, #0x50
+ bge _020C6B8C
+ cmp r0, #0x40
+ ldreq r0, _020C6BDC ; =0x04000246
+ moveq r1, #0x82
+ streqb r1, [r0, #0x0]
+ b _020C6BC0
+_020C6B18:
+ cmp r0, #0x60
+ bgt _020C6B2C
+ cmp r0, #0x60
+ beq _020C6BA8
+ b _020C6BC0
+_020C6B2C:
+ cmp r0, #0x70
+ beq _020C6B64
+ b _020C6BC0
+_020C6B38:
+ ldr r0, _020C6BE0 ; =0x04000241
+ mov r1, #0x8a
+ strb r1, [r0, #0x0]
+_020C6B44:
+ ldr r0, _020C6BE4 ; =0x04000240
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+ b _020C6BC0
+_020C6B54:
+ ldr r0, _020C6BE0 ; =0x04000241
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+ b _020C6BC0
+_020C6B64:
+ ldr r0, _020C6BDC ; =0x04000246
+ mov r1, #0x9a
+ strb r1, [r0, #0x0]
+_020C6B70:
+ ldr r0, _020C6BE8 ; =0x04000245
+ mov r1, #0x92
+ strb r1, [r0, #0x0]
+_020C6B7C:
+ ldr r0, _020C6BEC ; =0x04000244
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+ b _020C6BC0
+_020C6B8C:
+ ldr r1, _020C6BDC ; =0x04000246
+ mov r2, #0x92
+ ldr r0, _020C6BEC ; =0x04000244
+ strb r2, [r1, #0x0]
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+ b _020C6BC0
+_020C6BA8:
+ ldr r0, _020C6BDC ; =0x04000246
+ mov r1, #0x8a
+ strb r1, [r0, #0x0]
+_020C6BB4:
+ ldr r0, _020C6BE8 ; =0x04000245
+ mov r1, #0x82
+ strb r1, [r0, #0x0]
+_020C6BC0:
+ ldr r0, _020C6BD8 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6BD8: .word 0x021D33C4
+_020C6BDC: .word 0x04000246
+_020C6BE0: .word 0x04000241
+_020C6BE4: .word 0x04000240
+_020C6BE8: .word 0x04000245
+_020C6BEC: .word 0x04000244
+
+ arm_func_start GX_SetBankForBG
+GX_SetBankForBG: ; 0x020C6BF0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020C6E88 ; =0x021D33C4
+ mvn r12, r0
+ ldrh r2, [r1, #0x2]
+ ldrh r3, [r1, #0x0]
+ cmp r0, #0x40
+ strh r0, [r1, #0x2]
+ orr r2, r3, r2
+ and r2, r12, r2
+ strh r2, [r1, #0x0]
+ bgt _020C6CCC
+ cmp r0, #0x40
+ bge _020C6E64
+ cmp r0, #0x20
+ bgt _020C6CC0
+ cmp r0, #0x0
+ addge pc, pc, r0, lsl #0x2
+ b _020C6E70
+_020C6C3C: ; 0x020C6C3C
+ b _020C6E70
+_020C6C40: ; 0x020C6C40
+ b _020C6D6C
+_020C6C44: ; 0x020C6C44
+ b _020C6D38
+_020C6C48: ; 0x020C6C48
+ b _020C6D60
+_020C6C4C: ; 0x020C6C4C
+ b _020C6D10
+_020C6C50: ; 0x020C6C50
+ b _020C6DB0
+_020C6C54: ; 0x020C6C54
+ b _020C6D2C
+_020C6C58: ; 0x020C6C58
+ b _020C6D54
+_020C6C5C: ; 0x020C6C5C
+ b _020C6CF4
+_020C6C60: ; 0x020C6C60
+ b _020C6DCC
+_020C6C64: ; 0x020C6C64
+ b _020C6DE8
+_020C6C68: ; 0x020C6C68
+ b _020C6D7C
+_020C6C6C: ; 0x020C6C6C
+ b _020C6D04
+_020C6C70: ; 0x020C6C70
+ b _020C6DA4
+_020C6C74: ; 0x020C6C74
+ b _020C6D20
+_020C6C78: ; 0x020C6C78
+ b _020C6D48
+_020C6C7C: ; 0x020C6C7C
+ b _020C6E1C
+_020C6C80: ; 0x020C6C80
+ b _020C6E70
+_020C6C84: ; 0x020C6C84
+ b _020C6E70
+_020C6C88: ; 0x020C6C88
+ b _020C6E70
+_020C6C8C: ; 0x020C6C8C
+ b _020C6E70
+_020C6C90: ; 0x020C6C90
+ b _020C6E70
+_020C6C94: ; 0x020C6C94
+ b _020C6E70
+_020C6C98: ; 0x020C6C98
+ b _020C6E70
+_020C6C9C: ; 0x020C6C9C
+ b _020C6E70
+_020C6CA0: ; 0x020C6CA0
+ b _020C6E70
+_020C6CA4: ; 0x020C6CA4
+ b _020C6E70
+_020C6CA8: ; 0x020C6CA8
+ b _020C6E70
+_020C6CAC: ; 0x020C6CAC
+ b _020C6E70
+_020C6CB0: ; 0x020C6CB0
+ b _020C6E70
+_020C6CB4: ; 0x020C6CB4
+ b _020C6E70
+_020C6CB8: ; 0x020C6CB8
+ b _020C6E70
+_020C6CBC: ; 0x020C6CBC
+ b _020C6E54
+_020C6CC0:
+ cmp r0, #0x30
+ beq _020C6E10
+ b _020C6E70
+_020C6CCC:
+ cmp r0, #0x60
+ bgt _020C6CE8
+ cmp r0, #0x60
+ bge _020C6E48
+ cmp r0, #0x50
+ beq _020C6E2C
+ b _020C6E70
+_020C6CE8:
+ cmp r0, #0x70
+ beq _020C6E04
+ b _020C6E70
+_020C6CF4:
+ ldr r0, _020C6E8C ; =0x04000243
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6D04:
+ ldr r0, _020C6E8C ; =0x04000243
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+_020C6D10:
+ ldr r0, _020C6E90 ; =0x04000242
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6D20:
+ ldr r0, _020C6E8C ; =0x04000243
+ mov r1, #0x91
+ strb r1, [r0, #0x0]
+_020C6D2C:
+ ldr r0, _020C6E90 ; =0x04000242
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+_020C6D38:
+ ldr r0, _020C6E94 ; =0x04000241
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6D48:
+ ldr r0, _020C6E8C ; =0x04000243
+ mov r1, #0x99
+ strb r1, [r0, #0x0]
+_020C6D54:
+ ldr r0, _020C6E90 ; =0x04000242
+ mov r1, #0x91
+ strb r1, [r0, #0x0]
+_020C6D60:
+ ldr r0, _020C6E94 ; =0x04000241
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+_020C6D6C:
+ ldr r0, _020C6E98 ; =0x04000240
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6D7C:
+ ldr r0, _020C6E98 ; =0x04000240
+ mov r2, #0x81
+ ldr r1, _020C6E94 ; =0x04000241
+ strb r2, [r0, #0x0]
+ mov r2, #0x89
+ ldr r0, _020C6E8C ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x91
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6DA4:
+ ldr r0, _020C6E8C ; =0x04000243
+ mov r1, #0x91
+ strb r1, [r0, #0x0]
+_020C6DB0:
+ ldr r1, _020C6E98 ; =0x04000240
+ mov r2, #0x81
+ ldr r0, _020C6E90 ; =0x04000242
+ strb r2, [r1, #0x0]
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6DCC:
+ ldr r1, _020C6E98 ; =0x04000240
+ mov r2, #0x81
+ ldr r0, _020C6E8C ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6DE8:
+ ldr r1, _020C6E94 ; =0x04000241
+ mov r2, #0x81
+ ldr r0, _020C6E8C ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6E04:
+ ldr r0, _020C6E9C ; =0x04000246
+ mov r1, #0x99
+ strb r1, [r0, #0x0]
+_020C6E10:
+ ldr r0, _020C6EA0 ; =0x04000245
+ mov r1, #0x91
+ strb r1, [r0, #0x0]
+_020C6E1C:
+ ldr r0, _020C6EA4 ; =0x04000244
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6E2C:
+ ldr r1, _020C6E9C ; =0x04000246
+ mov r2, #0x91
+ ldr r0, _020C6EA4 ; =0x04000244
+ strb r2, [r1, #0x0]
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6E48:
+ ldr r0, _020C6E9C ; =0x04000246
+ mov r1, #0x89
+ strb r1, [r0, #0x0]
+_020C6E54:
+ ldr r0, _020C6EA0 ; =0x04000245
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+ b _020C6E70
+_020C6E64:
+ ldr r0, _020C6E9C ; =0x04000246
+ mov r1, #0x81
+ strb r1, [r0, #0x0]
+_020C6E70:
+ ldr r0, _020C6E88 ; =0x021D33C4
+ ldrh r0, [r0, #0x0]
+ bl GX_VRAMCNT_SetLCDC_
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C6E88: .word 0x021D33C4
+_020C6E8C: .word 0x04000243
+_020C6E90: .word 0x04000242
+_020C6E94: .word 0x04000241
+_020C6E98: .word 0x04000240
+_020C6E9C: .word 0x04000246
+_020C6EA0: .word 0x04000245
+_020C6EA4: .word 0x04000244
+
+ arm_func_start GX_VRAMCNT_SetLCDC_
+GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8
+ ands r1, r0, #0x1
+ ldrne r1, _020C6F3C ; =0x04000240
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x2
+ ldrne r1, _020C6F40 ; =0x04000241
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x4
+ ldrne r1, _020C6F44 ; =0x04000242
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x8
+ ldrne r1, _020C6F48 ; =0x04000243
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x10
+ ldrne r1, _020C6F4C ; =0x04000244
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x20
+ ldrne r1, _020C6F50 ; =0x04000245
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x40
+ ldrne r1, _020C6F54 ; =0x04000246
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r1, r0, #0x80
+ ldrne r1, _020C6F58 ; =0x04000248
+ movne r2, #0x80
+ strneb r2, [r1, #0x0]
+ ands r0, r0, #0x100
+ ldrne r0, _020C6F5C ; =0x04000249
+ movne r1, #0x80
+ strneb r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C6F3C: .word 0x04000240
+_020C6F40: .word 0x04000241
+_020C6F44: .word 0x04000242
+_020C6F48: .word 0x04000243
+_020C6F4C: .word 0x04000244
+_020C6F50: .word 0x04000245
+_020C6F54: .word 0x04000246
+_020C6F58: .word 0x04000248
+_020C6F5C: .word 0x04000249
+
+ arm_func_start G2S_GetBG3CharPtr
+G2S_GetBG3CharPtr: ; 0x020C6F60
+ ldr r1, _020C6FA8 ; =0x04001000
+ ldr r0, _020C6FAC ; =0x0400100E
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ and r0, r1, #0x7
+ cmp r0, #0x3
+ blt _020C6F8C
+ cmp r0, #0x6
+ bge _020C6FA0
+ ands r0, r2, #0x80
+ bne _020C6FA0
+_020C6F8C:
+ and r0, r2, #0x3c
+ mov r0, r0, lsr #0x2
+ mov r0, r0, lsl #0xe
+ add r0, r0, #0x6200000
+ bx lr
+_020C6FA0:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C6FA8: .word 0x04001000
+_020C6FAC: .word 0x0400100E
+
+ arm_func_start G2_GetBG3CharPtr
+G2_GetBG3CharPtr: ; 0x020C6FB0
+ mov r0, #0x4000000
+ ldr r1, [r0, #0x0]
+ ldr r0, _020C700C ; =0x0400000E
+ and r1, r1, #0x7
+ cmp r1, #0x3
+ ldrh r2, [r0, #0x0]
+ blt _020C6FDC
+ cmp r1, #0x6
+ bge _020C7004
+ ands r0, r2, #0x80
+ bne _020C7004
+_020C6FDC:
+ mov r0, #0x4000000
+ ldr r1, [r0, #0x0]
+ and r0, r2, #0x3c
+ and r1, r1, #0x7000000
+ mov r1, r1, lsr #0x18
+ mov r1, r1, lsl #0x10
+ add r1, r1, #0x6000000
+ mov r0, r0, lsr #0x2
+ add r0, r1, r0, lsl #0xe
+ bx lr
+_020C7004:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C700C: .word 0x0400000E
+
+ arm_func_start G2S_GetBG2CharPtr
+G2S_GetBG2CharPtr: ; 0x020C7010
+ ldr r1, _020C7050 ; =0x04001000
+ ldr r0, _020C7054 ; =0x0400100C
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ and r0, r1, #0x7
+ cmp r0, #0x5
+ blt _020C7034
+ ands r0, r2, #0x80
+ bne _020C7048
+_020C7034:
+ and r0, r2, #0x3c
+ mov r0, r0, lsr #0x2
+ mov r0, r0, lsl #0xe
+ add r0, r0, #0x6200000
+ bx lr
+_020C7048:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C7050: .word 0x04001000
+_020C7054: .word 0x0400100C
+
+ arm_func_start G2_GetBG2CharPtr
+G2_GetBG2CharPtr: ; 0x020C7058
+ mov r0, #0x4000000
+ ldr r1, [r0, #0x0]
+ ldr r0, _020C70AC ; =0x0400000C
+ and r1, r1, #0x7
+ cmp r1, #0x5
+ ldrh r2, [r0, #0x0]
+ blt _020C707C
+ ands r0, r2, #0x80
+ bne _020C70A4
+_020C707C:
+ mov r0, #0x4000000
+ ldr r1, [r0, #0x0]
+ and r0, r2, #0x3c
+ and r1, r1, #0x7000000
+ mov r1, r1, lsr #0x18
+ mov r1, r1, lsl #0x10
+ add r1, r1, #0x6000000
+ mov r0, r0, lsr #0x2
+ add r0, r1, r0, lsl #0xe
+ bx lr
+_020C70A4:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C70AC: .word 0x0400000C
+
+ arm_func_start G2S_GetBG1CharPtr
+G2S_GetBG1CharPtr: ; 0x020C70B0
+ ldr r0, _020C70CC ; =0x0400100A
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x3c
+ mov r0, r0, asr #0x2
+ mov r0, r0, lsl #0xe
+ add r0, r0, #0x6200000
+ bx lr
+ .balign 4
+_020C70CC: .word 0x0400100A
+
+ arm_func_start G2_GetBG1CharPtr
+G2_GetBG1CharPtr: ; 0x020C70D0
+ ldr r1, _020C7100 ; =0x0400000A
+ mov r0, #0x4000000
+ ldrh r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ and r0, r0, #0x7000000
+ mov r0, r0, lsr #0x18
+ and r1, r1, #0x3c
+ mov r0, r0, lsl #0x10
+ mov r1, r1, asr #0x2
+ add r0, r0, #0x6000000
+ add r0, r0, r1, lsl #0xe
+ bx lr
+ .balign 4
+_020C7100: .word 0x0400000A
+
+ arm_func_start G2S_GetBG0CharPtr
+G2S_GetBG0CharPtr: ; 0x020C7104
+ ldr r0, _020C7120 ; =0x04001008
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x3c
+ mov r0, r0, asr #0x2
+ mov r0, r0, lsl #0xe
+ add r0, r0, #0x6200000
+ bx lr
+ .balign 4
+_020C7120: .word 0x04001008
+
+ arm_func_start G2_GetBG0CharPtr
+G2_GetBG0CharPtr: ; 0x020C7124
+ ldr r1, _020C7154 ; =0x04000008
+ mov r0, #0x4000000
+ ldrh r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ and r0, r0, #0x7000000
+ mov r0, r0, lsr #0x18
+ and r1, r1, #0x3c
+ mov r0, r0, lsl #0x10
+ mov r1, r1, asr #0x2
+ add r0, r0, #0x6000000
+ add r0, r0, r1, lsl #0xe
+ bx lr
+ .balign 4
+_020C7154: .word 0x04000008
+
+ arm_func_start G2S_GetBG3ScrPtr
+G2S_GetBG3ScrPtr: ; 0x020C7158
+ ldr r1, _020C71D0 ; =0x04001000
+ ldr r0, _020C71D4 ; =0x0400100E
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ and r3, r1, #0x7
+ cmp r3, #0x6
+ and r0, r2, #0x1f00
+ mov r1, r0, lsr #0x8
+ addls pc, pc, r3, lsl #0x2
+ b _020C71C8
+_020C7180: ; 0x020C7180
+ b _020C719C
+_020C7184: ; 0x020C7184
+ b _020C719C
+_020C7188: ; 0x020C7188
+ b _020C719C
+_020C718C: ; 0x020C718C
+ b _020C71A8
+_020C7190: ; 0x020C7190
+ b _020C71A8
+_020C7194: ; 0x020C7194
+ b _020C71A8
+_020C7198: ; 0x020C7198
+ b _020C71C0
+_020C719C:
+ mov r0, r1, lsl #0xb
+ add r0, r0, #0x6200000
+ bx lr
+_020C71A8:
+ ands r0, r2, #0x80
+ movne r0, r1, lsl #0xe
+ addne r0, r0, #0x6200000
+ moveq r0, r1, lsl #0xb
+ addeq r0, r0, #0x6200000
+ bx lr
+_020C71C0:
+ mov r0, #0x0
+ bx lr
+_020C71C8:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C71D0: .word 0x04001000
+_020C71D4: .word 0x0400100E
+
+ arm_func_start G2_GetBG3ScrPtr
+G2_GetBG3ScrPtr: ; 0x020C71D8
+ ldr r0, _020C7260 ; =0x0400000E
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldrh r3, [r0, #0x0]
+ ldr r0, [r2, #0x0]
+ and r12, r1, #0x7
+ and r0, r0, #0x38000000
+ mov r1, r0, lsr #0x1b
+ and r0, r3, #0x1f00
+ mov r2, r1, lsl #0x10
+ cmp r12, #0x6
+ mov r1, r0, lsr #0x8
+ addls pc, pc, r12, lsl #0x2
+ b _020C7258
+_020C7210:
+ b _020C722C
+_020C7214:
+ b _020C722C
+_020C7218:
+ b _020C722C
+_020C721C:
+ b _020C7238
+_020C7220:
+ b _020C7238
+_020C7224:
+ b _020C7238
+_020C7228:
+ b _020C7250
+_020C722C:
+ add r0, r2, #0x6000000
+ add r0, r0, r1, lsl #0xb
+ bx lr
+_020C7238:
+ ands r0, r3, #0x80
+ movne r0, r1, lsl #0xe
+ addne r0, r0, #0x6000000
+ addeq r0, r2, #0x6000000
+ addeq r0, r0, r1, lsl #0xb
+ bx lr
+_020C7250:
+ mov r0, #0x0
+ bx lr
+_020C7258:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C7260: .word 0x0400000E
+
+ arm_func_start G2S_GetBG2ScrPtr
+G2S_GetBG2ScrPtr: ; 0x020C7264
+ ldr r1, _020C72DC ; =0x04001000
+ ldr r0, _020C72E0 ; =0x0400100C
+ ldr r1, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ and r3, r1, #0x7
+ cmp r3, #0x6
+ and r0, r2, #0x1f00
+ mov r1, r0, lsr #0x8
+ addls pc, pc, r3, lsl #0x2
+ b _020C72D4
+_020C728C: ; 0x020C728C
+ b _020C72A8
+_020C7290: ; 0x020C7290
+ b _020C72A8
+_020C7294: ; 0x020C7294
+ b _020C72A8
+_020C7298: ; 0x020C7298
+ b _020C72A8
+_020C729C: ; 0x020C729C
+ b _020C72A8
+_020C72A0: ; 0x020C72A0
+ b _020C72B4
+_020C72A4: ; 0x020C72A4
+ b _020C72CC
+_020C72A8:
+ mov r0, r1, lsl #0xb
+ add r0, r0, #0x6200000
+ bx lr
+_020C72B4:
+ ands r0, r2, #0x80
+ movne r0, r1, lsl #0xe
+ addne r0, r0, #0x6200000
+ moveq r0, r1, lsl #0xb
+ addeq r0, r0, #0x6200000
+ bx lr
+_020C72CC:
+ mov r0, #0x0
+ bx lr
+_020C72D4:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C72DC: .word 0x04001000
+_020C72E0: .word 0x0400100C
+
+ arm_func_start G2_GetBG2ScrPtr
+G2_GetBG2ScrPtr: ; 0x020C72E4
+ ldr r0, _020C736C ; =0x0400000C
+ mov r2, #0x4000000
+ ldr r1, [r2, #0x0]
+ ldrh r3, [r0, #0x0]
+ ldr r0, [r2, #0x0]
+ and r12, r1, #0x7
+ and r0, r0, #0x38000000
+ mov r1, r0, lsr #0x1b
+ and r0, r3, #0x1f00
+ mov r2, r1, lsl #0x10
+ cmp r12, #0x6
+ mov r1, r0, lsr #0x8
+ addls pc, pc, r12, lsl #0x2
+ b _020C7364
+_020C731C:
+ b _020C7338
+_020C7320:
+ b _020C7338
+_020C7324:
+ b _020C7338
+_020C7328:
+ b _020C7338
+_020C732C:
+ b _020C7338
+_020C7330:
+ b _020C7344
+_020C7334:
+ b _020C735C
+_020C7338:
+ add r0, r2, #0x6000000
+ add r0, r0, r1, lsl #0xb
+ bx lr
+_020C7344:
+ ands r0, r3, #0x80
+ movne r0, r1, lsl #0xe
+ addne r0, r0, #0x6000000
+ addeq r0, r2, #0x6000000
+ addeq r0, r0, r1, lsl #0xb
+ bx lr
+_020C735C:
+ mov r0, #0x6000000
+ bx lr
+_020C7364:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C736C: .word 0x0400000C
+
+ arm_func_start G2S_GetBG1ScrPtr
+G2S_GetBG1ScrPtr: ; 0x020C7370
+ ldr r0, _020C738C ; =0x0400100A
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x1f00
+ mov r0, r0, asr #0x8
+ mov r0, r0, lsl #0xb
+ add r0, r0, #0x6200000
+ bx lr
+ .balign 4
+_020C738C: .word 0x0400100A
+
+ arm_func_start G2_GetBG1ScrPtr
+G2_GetBG1ScrPtr: ; 0x020C7390
+ ldr r1, _020C73C0 ; =0x0400000A
+ mov r0, #0x4000000
+ ldrh r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ and r0, r0, #0x38000000
+ mov r0, r0, lsr #0x1b
+ and r1, r1, #0x1f00
+ mov r0, r0, lsl #0x10
+ mov r1, r1, asr #0x8
+ add r0, r0, #0x6000000
+ add r0, r0, r1, lsl #0xb
+ bx lr
+ .balign 4
+_020C73C0: .word 0x0400000A
+
+ arm_func_start G2S_GetBG0ScrPtr
+G2S_GetBG0ScrPtr: ; 0x020C73C4
+ ldr r0, _020C73E0 ; =0x04001008
+ ldrh r0, [r0, #0x0]
+ and r0, r0, #0x1f00
+ mov r0, r0, asr #0x8
+ mov r0, r0, lsl #0xb
+ add r0, r0, #0x6200000
+ bx lr
+ .balign 4
+_020C73E0: .word 0x04001008
+
+ arm_func_start G2_GetBG0ScrPtr
+G2_GetBG0ScrPtr: ; 0x020C73E4
+ ldr r1, _020C7414 ; =0x04000008
+ mov r0, #0x4000000
+ ldrh r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ and r0, r0, #0x38000000
+ mov r0, r0, lsr #0x1b
+ and r1, r1, #0x1f00
+ mov r0, r0, lsl #0x10
+ mov r1, r1, asr #0x8
+ add r0, r0, #0x6000000
+ add r0, r0, r1, lsl #0xb
+ bx lr
+ .balign 4
+_020C7414: .word 0x04000008
+
+ arm_func_start G2x_ChangeBlendBrightness_
+G2x_ChangeBlendBrightness_: ; 0x020C7418
+ cmp r1, #0x0
+ ldrh r3, [r0, #0x0]
+ bge _020C7444
+ and r2, r3, #0xc0
+ cmp r2, #0x80
+ biceq r2, r3, #0xc0
+ orreq r2, r2, #0xc0
+ streqh r2, [r0, #0x0]
+ rsb r1, r1, #0x0
+ strh r1, [r0, #0x4]
+ bx lr
+_020C7444:
+ and r2, r3, #0xc0
+ cmp r2, #0xc0
+ biceq r2, r3, #0xc0
+ orreq r2, r2, #0x80
+ streqh r2, [r0, #0x0]
+ strh r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G2x_SetBlendBrightnessExt_
+G2x_SetBlendBrightnessExt_: ; 0x020C7460
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, [sp, #0x8]
+ ldr r12, [sp, #0xc]
+ orr r3, r3, lr, lsl #0x8
+ cmp r12, #0x0
+ orrge r1, r1, #0x80
+ strh r3, [r0, #0x2]
+ orrge r1, r1, r2, lsl #0x8
+ strgeh r1, [r0, #0x0]
+ strgeh r12, [r0, #0x4]
+ addge sp, sp, #0x4
+ ldmgeia sp!, {lr}
+ bxge lr
+ orr r1, r1, #0xc0
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r0, #0x0]
+ rsb r1, r12, #0x0
+ strh r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start G2x_SetBlendBrightness_
+G2x_SetBlendBrightness_: ; 0x020C74B8
+ cmp r2, #0x0
+ orrlt r1, r1, #0xc0
+ strlth r1, [r0, #0x0]
+ rsblt r1, r2, #0x0
+ strlth r1, [r0, #0x4]
+ orrge r1, r1, #0x80
+ strgeh r1, [r0, #0x0]
+ strgeh r2, [r0, #0x4]
+ bx lr
+
+ arm_func_start G2x_SetBlendAlpha_
+G2x_SetBlendAlpha_: ; 0x020C74DC
+ ldr r12, [sp, #0x0]
+ orr r1, r1, #0x40
+ orr r2, r1, r2, lsl #0x8
+ orr r1, r3, r12, lsl #0x8
+ orr r1, r2, r1, lsl #0x10
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start G2x_SetBGyAffine_
+G2x_SetBGyAffine_: ; 0x020C74F8
+ stmdb sp!, {r4-r6,lr}
+ ldr r5, [r1, #0x0]
+ ldr r4, [r1, #0x4]
+ mov r12, r5, lsl #0xc
+ mov lr, r4, lsl #0xc
+ mov r5, r12, asr #0x10
+ mov r4, lr, asr #0x10
+ mov r12, r5, lsl #0x10
+ mov lr, r4, lsl #0x10
+ mov r5, r12, lsr #0x10
+ mov r4, lr, lsr #0x10
+ orr r4, r5, r4, lsl #0x10
+ str r4, [r0, #0x0]
+ ldr r5, [r1, #0x8]
+ ldr r4, [r1, #0xc]
+ mov r12, r5, lsl #0xc
+ mov lr, r4, lsl #0xc
+ mov r5, r12, asr #0x10
+ mov r4, lr, asr #0x10
+ mov r12, r5, lsl #0x10
+ mov lr, r4, lsl #0x10
+ ldr r4, [sp, #0x14]
+ ldr r6, [sp, #0x10]
+ mov r12, r12, lsr #0x10
+ mov r5, lr, lsr #0x10
+ orr r5, r12, r5, lsl #0x10
+ str r5, [r0, #0x4]
+ ldr r12, [r1, #0x4]
+ sub r5, r4, r3
+ ldr r4, [r1, #0xc]
+ mul lr, r12, r5
+ mul r5, r4, r5
+ ldr r12, [r1, #0x0]
+ sub r6, r6, r2
+ ldr r4, [r1, #0x8]
+ mla r1, r12, r6, lr
+ mla r5, r4, r6, r5
+ add r1, r1, r2, lsl #0xc
+ add r2, r5, r3, lsl #0xc
+ mov r1, r1, asr #0x4
+ str r1, [r0, #0x8]
+ mov r1, r2, asr #0x4
+ str r1, [r0, #0xc]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start G3B_End
+G3B_End: ; 0x020C75AC
+ ldr r1, [r0, #0x0]
+ mov r2, #0x41
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_Begin
+G3B_Begin: ; 0x020C75D0
+ ldr r2, [r0, #0x0]
+ mov r3, #0x40
+ str r3, [r2, #0x0]
+ ldr r2, [r0, #0x4]
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_LightColor
+G3B_LightColor: ; 0x020C7600
+ ldr r3, [r0, #0x0]
+ mov r12, #0x33
+ str r12, [r3, #0x0]
+ ldr r3, [r0, #0x4]
+ orr r1, r2, r1, lsl #0x1e
+ str r1, [r3, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_LightVector
+G3B_LightVector: ; 0x020C7634
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020C7694 ; =0x000003FF
+ ldrsh r4, [sp, #0x10]
+ ldr lr, [r0, #0x0]
+ mov r5, #0x32
+ str r5, [lr, #0x0]
+ and lr, r12, r2, asr #0x3
+ and r2, r12, r3, asr #0x3
+ and r3, r12, r4, asr #0x3
+ orr r2, lr, r2, lsl #0xa
+ orr r3, r2, r3, lsl #0x14
+ ldr r2, [r0, #0x4]
+ orr r1, r3, r1, lsl #0x1e
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C7694: .word 0x000003FF
+
+ arm_func_start G3B_MaterialColorSpecEmi
+G3B_MaterialColorSpecEmi: ; 0x020C7698
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r0, #0x0]
+ mov lr, #0x31
+ cmp r3, #0x0
+ movne r3, #0x1
+ str lr, [r12, #0x0]
+ orr r2, r1, r2, lsl #0x10
+ moveq r3, #0x0
+ ldr r1, [r0, #0x4]
+ orr r2, r2, r3, lsl #0xf
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start G3B_MaterialColorDiffAmb
+G3B_MaterialColorDiffAmb: ; 0x020C76EC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r0, #0x0]
+ mov lr, #0x30
+ cmp r3, #0x0
+ movne r3, #0x1
+ str lr, [r12, #0x0]
+ orr r2, r1, r2, lsl #0x10
+ moveq r3, #0x0
+ ldr r1, [r0, #0x4]
+ orr r2, r2, r3, lsl #0xf
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start G3B_PolygonAttr
+G3B_PolygonAttr: ; 0x020C7740
+ orr r1, r1, r2, lsl #0x4
+ ldr r2, [r0, #0x0]
+ mov r12, #0x29
+ str r12, [r2, #0x0]
+ ldr r2, [sp, #0x8]
+ orr r1, r1, r3, lsl #0x6
+ ldr r3, [sp, #0x0]
+ orr r1, r2, r1
+ ldr r12, [sp, #0x4]
+ orr r2, r1, r3, lsl #0x18
+ ldr r1, [r0, #0x4]
+ orr r2, r2, r12, lsl #0x10
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_Vtx
+G3B_Vtx: ; 0x020C7790
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r0, #0x0]
+ mov lr, #0x23
+ str lr, [r12, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r2, r2, lsl #0x10
+ mov lr, r1, lsr #0x10
+ mov r12, r2, lsr #0x10
+ mov r1, r3, lsl #0x10
+ ldr r2, [r0, #0x4]
+ orr r3, lr, r12, lsl #0x10
+ str r3, [r2, #0x0]
+ ldr r2, [r0, #0x4]
+ mov r1, r1, lsr #0x10
+ str r1, [r2, #0x4]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x8
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start G3B_Normal
+G3B_Normal: ; 0x020C77F4
+ stmdb sp!, {r4,lr}
+ ldr ip, _020C7844 ; =0x000003FF
+ ldr lr, [r0, #0x0]
+ mov r4, #0x21
+ str r4, [lr, #0x0]
+ and lr, r12, r1, asr #0x3
+ and r1, r12, r2, asr #0x3
+ and r3, r12, r3, asr #0x3
+ orr r2, lr, r1, lsl #0xa
+ ldr r1, [r0, #0x4]
+ orr r2, r2, r3, lsl #0x14
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C7844: .word 0x000003FF
+
+ arm_func_start G3B_Color
+G3B_Color: ; 0x020C7848
+ ldr r2, [r0, #0x0]
+ mov r3, #0x20
+ str r3, [r2, #0x0]
+ ldr r2, [r0, #0x4]
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_LoadMtx44
+G3B_LoadMtx44: ; 0x020C7878
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl G3BS_LoadMtx44
+ ldr r0, [r4, #0x4]
+ add r0, r0, #0x40
+ str r0, [r4, #0x0]
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x4
+ str r0, [r4, #0x4]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start G3B_PopMtx
+G3B_PopMtx: ; 0x020C78A4
+ ldr r2, [r0, #0x0]
+ mov r3, #0x12
+ str r3, [r2, #0x0]
+ ldr r2, [r0, #0x4]
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x4
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3B_PushMtx
+G3B_PushMtx: ; 0x020C78D4
+ ldr r1, [r0, #0x0]
+ mov r2, #0x11
+ str r2, [r1, #0x0]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start G3BS_LoadMtx44
+G3BS_LoadMtx44: ; 0x020C78F8
+ mov r3, r0
+ ldr r0, [r3, #0x0]
+ mov r2, #0x16
+ str r2, [r0, #0x0]
+ mov r0, r1
+ ldr ip, _020C7918 ; =MI_Copy64B
+ ldr r1, [r3, #0x4]
+ bx r12
+ .balign 4
+_020C7918: .word MI_Copy64B
+
+ arm_func_start G3_MultMtx33
+G3_MultMtx33: ; 0x020C791C
+ ldr r1, _020C7930 ; =0x04000400
+ mov r2, #0x1a
+ ldr ip, _020C7934 ; =MI_Copy36B
+ str r2, [r1, #0x0]
+ bx r12
+ .balign 4
+_020C7930: .word 0x04000400
+_020C7934: .word MI_Copy36B
+
+ arm_func_start G3_MultMtx43
+G3_MultMtx43:
+ ldr r1, _020C794C ; =0x04000400
+ mov r2, #0x19
+ ldr ip, _020C7950 ; =GX_SendFifo48B
+ str r2, [r1, #0x0]
+ bx r12
+ .balign 4
+_020C794C: .word 0x04000400
+_020C7950: .word GX_SendFifo48B
+
+ arm_func_start G3_LoadMtx43
+G3_LoadMtx43: ; 0x020C7954
+ ldr r1, _020C7968 ; =0x04000400
+ mov r2, #0x17
+ ldr ip, _020C796C ; =GX_SendFifo48B
+ str r2, [r1, #0x0]
+ bx r12
+ .balign 4
+_020C7968: .word 0x04000400
+_020C796C: .word GX_SendFifo48B
+
+ arm_func_start GXi_NopClearFifo128_
+GXi_NopClearFifo128_: ; 0x020C7970
+ mov r1, #0x0
+ mov r2, #0x0
+ mov r3, #0x0
+ mov r12, #0x0
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ stmia r0, {r1-r3,r12}
+ bx lr
+
+ arm_func_start G3X_SetHOffset
+G3X_SetHOffset: ; 0x020C7A04
+ ldr r1, _020C7A10 ; =0x04000010
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C7A10: .word 0x04000010
+
+ arm_func_start G3X_GetBoxTestResult
+G3X_GetBoxTestResult: ; 0x020C7A14
+ ldr r2, _020C7A38 ; =0x04000600
+ ldr r1, [r2, #0x0]
+ ands r1, r1, #0x1
+ ldreq r1, [r2, #0x0]
+ mvnne r0, #0x0
+ andeq r1, r1, #0x2
+ streq r1, [r0, #0x0]
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020C7A38: .word 0x04000600
+
+ arm_func_start G3X_GetMtxStackLevelPJ
+G3X_GetMtxStackLevelPJ:
+ ldr r2, _020C7A64 ; =0x04000600
+ ldr r1, [r2, #0x0]
+ ands r1, r1, #0x4000
+ ldreq r1, [r2, #0x0]
+ mvnne r0, #0x0
+ andeq r1, r1, #0x2000
+ moveq r1, r1, lsr #0xd
+ streq r1, [r0, #0x0]
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020C7A64: .word 0x04000600
+
+ arm_func_start G3X_GetMtxStackLevelPV
+G3X_GetMtxStackLevelPV:
+ ldr r2, _020C7A90 ; =0x04000600
+ ldr r1, [r2, #0x0]
+ ands r1, r1, #0x4000
+ ldreq r1, [r2, #0x0]
+ mvnne r0, #0x0
+ andeq r1, r1, #0x1f00
+ moveq r1, r1, lsr #0x8
+ streq r1, [r0, #0x0]
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020C7A90: .word 0x04000600
+
+ arm_func_start G3X_InitTable
+G3X_InitTable: ; 0x020C7A94
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ ldr r0, _020C7B2C ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C7AE4
+ mov r2, #0x0
+ str r2, [sp, #0x0]
+ ldr r1, _020C7B30 ; =0x04000330
+ mov r3, #0x10
+ str r2, [sp, #0x4]
+ bl MI_DmaFill32Async
+ ldr r0, _020C7B2C ; =0x02106814
+ ldr r1, _020C7B34 ; =0x04000360
+ ldr r0, [r0, #0x0]
+ mov r2, #0x0
+ mov r3, #0x60
+ bl MI_DmaFill32
+ b _020C7B04
+_020C7AE4:
+ ldr r1, _020C7B30 ; =0x04000330
+ mov r0, #0x0
+ mov r2, #0x10
+ bl MIi_CpuClear32
+ ldr r1, _020C7B34 ; =0x04000360
+ mov r0, #0x0
+ mov r2, #0x60
+ bl MIi_CpuClear32
+_020C7B04:
+ mov r2, #0x0
+ ldr r0, _020C7B38 ; =0x040004D0
+ mov r1, r2
+_020C7B10:
+ add r2, r2, #0x1
+ str r1, [r0, #0x0]
+ cmp r2, #0x20
+ blt _020C7B10
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7B2C: .word 0x02106814
+_020C7B30: .word 0x04000330
+_020C7B34: .word 0x04000360
+_020C7B38: .word 0x040004D0
+
+ arm_func_start G3X_SetClearColor
+G3X_SetClearColor: ; 0x020C7B3C
+ orr r0, r0, r1, lsl #0x10
+ ldr r12, [sp, #0x0]
+ orr r3, r0, r3, lsl #0x18
+ cmp r12, #0x0
+ ldr r1, _020C7B64 ; =0x04000350
+ orrne r3, r3, #0x8000
+ ldr r0, _020C7B68 ; =0x04000354
+ str r3, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C7B64: .word 0x04000350
+_020C7B68: .word 0x04000354
+
+ arm_func_start G3X_SetFogTable
+G3X_SetFogTable: ; 0x020C7B6C
+ ldr ip, _020C7B78 ; =0x020CE2C4
+ ldr r1, _020C7B7C ; =0x04000360
+ bx r12
+ .balign 4
+_020C7B78: .word 0x020CE2C4
+_020C7B7C: .word 0x04000360
+
+ arm_func_start G3X_SetEdgeColorTable
+G3X_SetEdgeColorTable: ; 0x020C7B80
+ ldr ip, _020C7B90 ; =MIi_CpuCopy16
+ ldr r1, _020C7B94 ; =0x04000330
+ mov r2, #0x10
+ bx r12
+ .balign 4
+_020C7B90: .word MIi_CpuCopy16
+_020C7B94: .word 0x04000330
+
+ arm_func_start G3X_GetVectorMtx
+G3X_GetVectorMtx:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020C7BD8 ; =0x04000600
+ mov r1, r0
+ ldr r0, [r2, #0x0]
+ ands r0, r0, #0x8000000
+ addne sp, sp, #0x4
+ mvnne r0, #0x0
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020C7BDC ; =0x04000680
+ bl MI_Copy36B
+_020C7BC8: ; 0x020C7BC8
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7BD8: .word 0x04000600
+_020C7BDC: .word 0x04000680
+
+ arm_func_start G3X_GetClipMtx
+G3X_GetClipMtx:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020C7C20 ; =0x04000600
+ mov r1, r0
+ ldr r0, [r2, #0x0]
+ ands r0, r0, #0x8000000
+ addne sp, sp, #0x4
+ mvnne r0, #0x0
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020C7C24 ; =0x04000640
+ bl MI_Copy64B
+_020C7C10: ; 0x020C7C10
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7C20: .word 0x04000600
+_020C7C24: .word 0x04000640
+
+ arm_func_start G3X_SetFog
+G3X_SetFog: ; 0x020C7C28
+ cmp r0, #0x0
+ ldreq r2, _020C7C70 ; =0x04000060
+ ldreq r0, _020C7C74 ; =0x0000CF7F
+ ldreqh r1, [r2, #0x0]
+ andeq r0, r1, r0
+ streqh r0, [r2, #0x0]
+ bxeq lr
+ ldr r0, _020C7C78 ; =0x0400035C
+ ldr ip, _020C7C70 ; =0x04000060
+ strh r3, [r0, #0x0]
+ mov r0, r2, lsl #0x8
+ orr r0, r0, r1, lsl #0x6
+ ldrh r3, [r12, #0x0]
+ orr r0, r0, #0x80
+ bic r1, r3, #0x3f40
+ orr r0, r1, r0
+ strh r0, [r12, #0x0]
+ bx lr
+ .balign 4
+_020C7C70: .word 0x04000060
+_020C7C74: .word 0x0000CF7F
+_020C7C78: .word 0x0400035C
+
+ arm_func_start G3X_ResetMtxStack_2
+G3X_ResetMtxStack_2: ; 0x020C7C7C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020C7D18 ; =0x04000600
+ ldr r0, [r1, #0x0]
+ orr r0, r0, #0x8000
+ str r0, [r1, #0x0]
+ add r4, sp, #0x0
+_020C7C98:
+ mov r0, r4
+ bl G3X_GetMtxStackLevelPV
+_020C7CA0: ; 0x020C7CA0
+ cmp r0, #0x0
+ bne _020C7C98
+ add r4, sp, #0x4
+_020C7CAC:
+ mov r0, r4
+ bl G3X_GetMtxStackLevelPJ
+_020C7CB4: ; 0x020C7CB4
+ cmp r0, #0x0
+ bne _020C7CAC
+ ldr r2, _020C7D1C ; =0x04000440
+ mov r1, #0x3
+ str r1, [r2, #0x0]
+ ldr r0, _020C7D20 ; =0x04000454
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r2, #0x0]
+ ldr r1, [sp, #0x4]
+ cmp r1, #0x0
+ ldrne r0, _020C7D24 ; =0x04000448
+ strne r1, [r0, #0x0]
+ ldr r0, _020C7D1C ; =0x04000440
+ mov r1, #0x2
+ str r1, [r0, #0x0]
+ ldr r2, [sp, #0x0]
+ ldr r1, _020C7D24 ; =0x04000448
+ ldr r0, _020C7D20 ; =0x04000454
+ str r2, [r1, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C7D18: .word 0x04000600
+_020C7D1C: .word 0x04000440
+_020C7D20: .word 0x04000454
+_020C7D24: .word 0x04000448
+
+ arm_func_start G3X_InitMtxStack
+G3X_InitMtxStack: ; 0x020C7D28
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020C7DC8 ; =0x04000600
+ ldr r0, [r1, #0x0]
+ orr r0, r0, #0x8000
+ str r0, [r1, #0x0]
+ add r4, sp, #0x0
+_020C7D44:
+ mov r0, r4
+ bl G3X_GetMtxStackLevelPV
+_020C7D4C: ; 0x020C7D4C
+ cmp r0, #0x0
+ bne _020C7D44
+ add r4, sp, #0x4
+_020C7D58:
+ mov r0, r4
+ bl G3X_GetMtxStackLevelPJ
+_020C7D60: ; 0x020C7D60
+ cmp r0, #0x0
+ bne _020C7D58
+ ldr r2, _020C7DCC ; =0x04000440
+ mov r1, #0x3
+ str r1, [r2, #0x0]
+ ldr r0, _020C7DD0 ; =0x04000454
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r2, #0x0]
+ ldr r1, [sp, #0x4]
+ ldr r2, _020C7DD0 ; =0x04000454
+ cmp r1, #0x0
+ ldrne r0, _020C7DD4 ; =0x04000448
+ mov r3, #0x0
+ strne r1, [r0, #0x0]
+ ldr r0, _020C7DCC ; =0x04000440
+ str r3, [r2, #0x0]
+ mov r1, #0x2
+ str r1, [r0, #0x0]
+ ldr r1, [sp, #0x0]
+ ldr r0, _020C7DD4 ; =0x04000448
+ str r1, [r0, #0x0]
+ str r3, [r2, #0x0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C7DC8: .word 0x04000600
+_020C7DCC: .word 0x04000440
+_020C7DD0: .word 0x04000454
+_020C7DD4: .word 0x04000448
+
+ arm_func_start G3X_ClearFifo
+G3X_ClearFifo: ; 0x020C7DD8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C7E04 ; =0x04000400
+ bl GXi_NopClearFifo128_
+ ldr r1, _020C7E08 ; =0x04000600
+_020C7DEC:
+ ldr r0, [r1, #0x0]
+ ands r0, r0, #0x8000000
+ bne _020C7DEC
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7E04: .word 0x04000400
+_020C7E08: .word 0x04000600
+
+ arm_func_start G3X_ResetMtxStack
+G3X_ResetMtxStack: ; 0x020C7E0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020C7E7C ; =0x04000600
+_020C7E18:
+ ldr r0, [r2, #0x0]
+ ands r0, r0, #0x8000000
+ bne _020C7E18
+ ldr r0, [r2, #0x0]
+ ldr r1, _020C7E80 ; =0x04000060
+ orr r0, r0, #0x8000
+ str r0, [r2, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x2000
+ strh r0, [r1, #0x0]
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x1000
+ strh r0, [r1, #0x0]
+ bl G3X_ResetMtxStack_2
+ ldr r2, _020C7E84 ; =0x001F0080
+ ldr r0, _020C7E88 ; =0x040004A4
+ ldr r1, _020C7E8C ; =0x040004A8
+ str r2, [r0, #0x0]
+ mov r2, #0x0
+ ldr r0, _020C7E90 ; =0x040004AC
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7E7C: .word 0x04000600
+_020C7E80: .word 0x04000060
+_020C7E84: .word 0x001F0080
+_020C7E88: .word 0x040004A4
+_020C7E8C: .word 0x040004A8
+_020C7E90: .word 0x040004AC
+
+ arm_func_start G3X_Init
+G3X_Init: ; 0x020C7E94
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl G3X_ClearFifo
+ ldr r0, _020C7FAC ; =0x04000504
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ ldr r1, _020C7FB0 ; =0x04000600
+_020C7EB0:
+ ldr r0, [r1, #0x0]
+ ands r0, r0, #0x8000000
+ bne _020C7EB0
+ ldr r0, _020C7FB4 ; =0x04000060
+ mov r3, #0x0
+ strh r3, [r0, #0x0]
+ ldr r2, _020C7FB8 ; =0x04000010
+ str r3, [r1, #0x0]
+ str r3, [r2, #0x0]
+ ldrh r12, [r0, #0x0]
+ ldr r2, _020C7FBC ; =0xFFFFCFFD
+ ldr r3, _020C7FC0 ; =0x0000CFFB
+ orr r12, r12, #0x2000
+ strh r12, [r0, #0x0]
+ ldrh r12, [r0, #0x0]
+ orr r12, r12, #0x1000
+ strh r12, [r0, #0x0]
+ ldrh r12, [r0, #0x0]
+ and r2, r12, r2
+ strh r2, [r0, #0x0]
+ ldrh r2, [r0, #0x0]
+ bic r2, r2, #0x3000
+ orr r2, r2, #0x10
+ strh r2, [r0, #0x0]
+ ldrh r2, [r0, #0x0]
+ and r2, r2, r3
+ strh r2, [r0, #0x0]
+ ldr r0, [r1, #0x0]
+ orr r0, r0, #0x8000
+ str r0, [r1, #0x0]
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0xc0000000
+ orr r0, r0, #0x80000000
+ str r0, [r1, #0x0]
+ bl G3X_InitMtxStack
+ ldr r0, _020C7FC4 ; =0x04000350
+ mov r3, #0x0
+ ldr r2, _020C7FC8 ; =0x00007FFF
+ ldr r1, _020C7FCC ; =0x04000354
+ str r3, [r0, #0x0]
+ ldr r0, _020C7FD0 ; =0x04000356
+ strh r2, [r1, #0x0]
+ ldr r1, _020C7FD4 ; =0x04000358
+ strh r3, [r0, #0x0]
+ ldr r0, _020C7FD8 ; =0x0400035C
+ str r3, [r1, #0x0]
+ ldr r1, _020C7FDC ; =0x04000008
+ strh r3, [r0, #0x0]
+ ldrh r0, [r1, #0x0]
+ bic r0, r0, #0x3
+ strh r0, [r1, #0x0]
+ bl G3X_InitTable
+ ldr r2, _020C7FE0 ; =0x001F0080
+ ldr r0, _020C7FE4 ; =0x040004A4
+ ldr r1, _020C7FE8 ; =0x040004A8
+ str r2, [r0, #0x0]
+ mov r2, #0x0
+ ldr r0, _020C7FEC ; =0x040004AC
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C7FAC: .word 0x04000504
+_020C7FB0: .word 0x04000600
+_020C7FB4: .word 0x04000060
+_020C7FB8: .word 0x04000010
+_020C7FBC: .word 0xFFFFCFFD
+_020C7FC0: .word 0x0000CFFB
+_020C7FC4: .word 0x04000350
+_020C7FC8: .word 0x00007FFF
+_020C7FCC: .word 0x04000354
+_020C7FD0: .word 0x04000356
+_020C7FD4: .word 0x04000358
+_020C7FD8: .word 0x0400035C
+_020C7FDC: .word 0x04000008
+_020C7FE0: .word 0x001F0080
+_020C7FE4: .word 0x040004A4
+_020C7FE8: .word 0x040004A8
+_020C7FEC: .word 0x040004AC
+
+ arm_func_start G3_RotZ
+G3_RotZ: ; 0x020C7FF0
+ ldr r3, _020C8028 ; =0x04000468
+ mov r2, #0x0
+ str r1, [r3, #0x0]
+ str r0, [r3, #0x0]
+ str r2, [r3, #0x0]
+ rsb r0, r0, #0x0
+ str r0, [r3, #0x0]
+ str r1, [r3, #0x0]
+ str r2, [r3, #0x0]
+ str r2, [r3, #0x0]
+ str r2, [r3, #0x0]
+ mov r0, #0x1000
+ str r0, [r3, #0x0]
+ bx lr
+ .balign 4
+_020C8028: .word 0x04000468
+
+ arm_func_start G3_RotY
+G3_RotY: ; 0x020C802C
+ ldr ip, _020C8064 ; =0x04000468
+ mov r3, #0x0
+ str r1, [r12, #0x0]
+ str r3, [r12, #0x0]
+ rsb r2, r0, #0x0
+ str r2, [r12, #0x0]
+ str r3, [r12, #0x0]
+ mov r2, #0x1000
+ str r2, [r12, #0x0]
+ str r3, [r12, #0x0]
+ str r0, [r12, #0x0]
+ str r3, [r12, #0x0]
+ str r1, [r12, #0x0]
+ bx lr
+ .balign 4
+_020C8064: .word 0x04000468
+
+ arm_func_start G3_RotX
+G3_RotX: ; 0x020C8068
+ ldr r3, _020C80A0 ; =0x04000468
+ mov r2, #0x1000
+ str r2, [r3, #0x0]
+ mov r2, #0x0
+ str r2, [r3, #0x0]
+ str r2, [r3, #0x0]
+ str r2, [r3, #0x0]
+ str r1, [r3, #0x0]
+ str r0, [r3, #0x0]
+ str r2, [r3, #0x0]
+ rsb r0, r0, #0x0
+ str r0, [r3, #0x0]
+ str r1, [r3, #0x0]
+ bx lr
+ .balign 4
+_020C80A0: .word 0x04000468
+
+ arm_func_start G3i_LookAt_
+G3i_LookAt_: ; 0x020C80A4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ mov r9, r0
+ ldr r6, [r9, #0x0]
+ ldr r5, [r2, #0x0]
+ add r0, sp, #0x0
+ sub r5, r6, r5
+ str r5, [sp, #0x0]
+ ldr r7, [r9, #0x4]
+ ldr r6, [r2, #0x4]
+ mov r5, r1
+ sub r1, r7, r6
+ str r1, [sp, #0x4]
+ ldr r6, [r9, #0x8]
+ ldr r2, [r2, #0x8]
+ mov r1, r0
+ sub r2, r6, r2
+ mov r8, r3
+ str r2, [sp, #0x8]
+ ldr r7, [sp, #0x40]
+ bl VEC_Normalize
+ add r1, sp, #0x0
+ add r2, sp, #0xc
+ mov r0, r5
+ bl VEC_CrossProduct
+ add r0, sp, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+_020C8114: ; 0x020C8114
+ add r0, sp, #0x0
+ add r1, sp, #0xc
+ add r2, sp, #0x18
+ bl VEC_CrossProduct
+_020C8124: ; 0x020C8124
+ cmp r8, #0x0
+ beq _020C8184
+ ldr r0, _020C8234 ; =0x04000440
+ mov r1, #0x2
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0xc]
+ ldr r4, _020C8238 ; =0x0400045C
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x18]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x0]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x10]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x1c]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x4]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x14]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x20]
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x8]
+ str r0, [r4, #0x0]
+_020C8184:
+ add r1, sp, #0xc
+ mov r0, r9
+ bl VEC_DotProduct
+ rsb r6, r0, #0x0
+ add r1, sp, #0x18
+ mov r0, r9
+ bl VEC_DotProduct
+ rsb r5, r0, #0x0
+ add r1, sp, #0x0
+ mov r0, r9
+ bl VEC_DotProduct
+_020C81B0: ; 0x020C81B0
+ cmp r8, #0x0
+ strne r6, [r4, #0x0]
+ rsb r0, r0, #0x0
+ strne r5, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ cmp r7, #0x0
+ addeq sp, sp, #0x24
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r1, [sp, #0xc]
+ str r1, [r7, #0x0]
+ ldr r1, [sp, #0x18]
+ str r1, [r7, #0x4]
+ ldr r1, [sp, #0x0]
+ str r1, [r7, #0x8]
+ ldr r1, [sp, #0x10]
+ str r1, [r7, #0xc]
+ ldr r1, [sp, #0x1c]
+ str r1, [r7, #0x10]
+ ldr r1, [sp, #0x4]
+ str r1, [r7, #0x14]
+ ldr r1, [sp, #0x14]
+ str r1, [r7, #0x18]
+ ldr r1, [sp, #0x20]
+ str r1, [r7, #0x1c]
+ ldr r1, [sp, #0x8]
+ str r1, [r7, #0x20]
+ str r6, [r7, #0x24]
+ str r5, [r7, #0x28]
+ str r0, [r7, #0x2c]
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020C8234: .word 0x04000440
+_020C8238: .word 0x0400045C
+
+ arm_func_start G3i_OrthoW_
+G3i_OrthoW_: ; 0x020C823C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ str r2, [sp, #0x8]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x8]
+ mov r2, r3
+ ldr r7, [sp, #0x64]
+ sub r0, r2, r0
+ str r3, [sp, #0xc]
+ str r1, [sp, #0x4]
+ ldr r8, [sp, #0x60]
+ ldr r6, [sp, #0x68]
+ bl FX_InvAsync
+_020C8270: ; 0x020C8270
+ cmp r7, #0x0
+ ldrne r0, _020C8528 ; =0x04000440
+ movne r1, #0x0
+ ldrne r4, _020C852C ; =0x04000458
+ strne r1, [r0, #0x0]
+ cmp r6, #0x0
+ beq _020C82B8
+ mov r0, #0x0
+ str r0, [r6, #0x4]
+ str r0, [r6, #0x8]
+ str r0, [r6, #0xc]
+ str r0, [r6, #0x10]
+ str r0, [r6, #0x18]
+ str r0, [r6, #0x1c]
+ str r0, [r6, #0x20]
+ str r0, [r6, #0x24]
+ str r0, [r6, #0x2c]
+ str r8, [r6, #0x3c]
+_020C82B8:
+ bl FX_GetDivResultFx64c
+ mov r5, r0
+ str r1, [sp, #0x14]
+ ldr sb, _020C8530 ; =0x04000290
+ mov r3, #0x0
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ str r3, [r9, #0x0]
+ mov r2, #0x1000
+ sub r1, r1, r0
+ ldr r0, _020C8534 ; =0x04000298
+ str r2, [r9, #0x4]
+ str r1, [r0, #0x0]
+ cmp r8, #0x1000
+ str r3, [r0, #0x4]
+ beq _020C8318
+ mov r9, r8, asr #0x1f
+ umull r0, r1, r5, r8
+ mla r1, r5, r9, r1
+ ldr r5, [sp, #0x14]
+ mla r1, r5, r8, r1
+ bl _ll_sdiv
+ mov r5, r0
+ str r1, [sp, #0x14]
+_020C8318:
+ ldr r0, [sp, #0x14]
+ mov r2, r5, lsl #0xd
+ mov r1, r0, lsl #0xd
+ mov r0, #0x80000000
+ adds r0, r2, r0
+ orr r1, r1, r5, lsr #0x13
+ adc r1, r1, #0x0
+ cmp r7, #0x0
+ mov r0, #0x0
+ strne r1, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ cmp r6, #0x0
+ strne r1, [r6, #0x0]
+ bl FX_GetDivResultFx64c
+ mov r11, r0
+ str r1, [sp, #0x2c]
+ ldr r0, _020C8530 ; =0x04000290
+ mov r3, #0x0
+ mov r2, #0x1000
+ str r3, [r0, #0x0]
+ str r2, [r0, #0x4]
+ ldr r9, [sp, #0x58]
+ ldr r1, [sp, #0x5c]
+ ldr r0, _020C8534 ; =0x04000298
+ sub r1, r9, r1
+ str r1, [r0, #0x0]
+ cmp r8, #0x1000
+ str r3, [r0, #0x4]
+ beq _020C83B8
+ mov r9, r8, asr #0x1f
+ umull r0, r1, r11, r8
+ mla r1, r11, r9, r1
+ ldr r9, [sp, #0x2c]
+ mla r1, r9, r8, r1
+ bl _ll_sdiv
+ mov r11, r0
+ str r1, [sp, #0x2c]
+_020C83B8:
+ ldr r0, [sp, #0x2c]
+ mov r3, r11, lsl #0xd
+ mov r2, r0, lsl #0xd
+ mov r0, #0x80000000
+ orr r2, r2, r11, lsr #0x13
+ adds r0, r3, r0
+ adc r0, r2, #0x0
+ cmp r7, #0x0
+ mov r1, #0x0
+ strne r0, [r4, #0x0]
+ strne r1, [r4, #0x0]
+ strne r1, [r4, #0x0]
+ strne r1, [r4, #0x0]
+ strne r1, [r4, #0x0]
+ cmp r6, #0x0
+ strne r0, [r6, #0x14]
+ bl FX_GetDivResultFx64c
+ cmp r8, #0x1000
+ beq _020C8428
+ mov r9, r8, asr #0x1f
+ mov r2, #0x1000
+ mov r3, #0x0
+ umull r12, r10, r0, r8
+ mla r10, r0, r9, r10
+ mov r0, r12
+ mla r10, r1, r8, r10
+ mov r1, r10
+ bl _ll_sdiv
+_020C8428:
+ mov r9, r1, lsl #0xd
+ mov r10, r0, lsl #0xd
+ mov r2, #0x80000000
+ orr r9, r9, r0, lsr #0x13
+ adds r2, r10, r2
+ adc r2, r9, #0x0
+ cmp r7, #0x0
+ mov r3, #0x0
+ strne r2, [r4, #0x0]
+ strne r3, [r4, #0x0]
+ cmp r6, #0x0
+ strne r2, [r6, #0x28]
+ ldr r3, [sp, #0xc]
+ ldr r2, [sp, #0x8]
+ add r9, r3, r2
+ rsb lr, r9, #0x0
+ ldr r3, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ ldr r9, [sp, #0x5c]
+ add r2, r3, r2
+ ldr r3, [sp, #0x58]
+ rsb r12, r2, #0x0
+ add r3, r9, r3
+ mov r9, r12, asr #0x1f
+ str r9, [sp, #0x20]
+ mov r9, r3, asr #0x1f
+ str r9, [sp, #0x24]
+ umull r10, r9, r5, lr
+ mov r2, lr, asr #0x1f
+ str r2, [sp, #0x1c]
+ str r10, [sp, #0x18]
+ ldr r10, [sp, #0x1c]
+ mov r2, #0x80000000
+ mla r9, r5, r10, r9
+ ldr r5, [sp, #0x14]
+ mla r9, r5, lr, r9
+ ldr r5, [sp, #0x18]
+ adds r5, r5, r2
+ adc r10, r9, #0x0
+ ldr r5, [sp, #0x20]
+ umull lr, r9, r11, r12
+ mla r9, r11, r5, r9
+ ldr r5, [sp, #0x2c]
+ mla r9, r5, r12, r9
+ adds r5, lr, r2
+ adc r5, r9, #0x0
+ umull r11, r9, r0, r3
+ adds r2, r11, r2
+ ldr r2, [sp, #0x24]
+ mla r9, r0, r2, r9
+ mla r9, r1, r3, r9
+ adc r0, r9, #0x0
+ cmp r7, #0x0
+ strne r10, [r4, #0x0]
+ strne r5, [r4, #0x0]
+ strne r0, [r4, #0x0]
+ strne r8, [r4, #0x0]
+ cmp r6, #0x0
+ strne r10, [r6, #0x30]
+ strne r5, [r6, #0x34]
+ strne r0, [r6, #0x38]
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020C8528: .word 0x04000440
+_020C852C: .word 0x04000458
+_020C8530: .word 0x04000290
+_020C8534: .word 0x04000298
+
+ arm_func_start G3i_PerspectiveW_
+G3i_PerspectiveW_: ; 0x020C8538
+ stmdb sp!, {r4-r10,lr}
+ mov r5, r0
+ mov r0, r1
+ mov r1, r5
+ ldr r6, [sp, #0x24]
+ mov r9, r2
+ mov r8, r3
+ ldr r5, [sp, #0x2c]
+ bl FX_Div
+ mov r7, r0
+ cmp r6, #0x1000
+ mulne r1, r7, r6
+ movne r0, r1, asr #0xb
+ addne r0, r1, r0, lsr #0x14
+ movne r7, r0, asr #0xc
+ ldr r0, [sp, #0x28]
+ ldr r2, _020C8718 ; =0x04000290
+ cmp r0, #0x0
+ mov r3, #0x0
+ str r3, [r2, #0x0]
+ ldr r1, _020C871C ; =0x04000298
+ str r7, [r2, #0x4]
+ str r9, [r1, #0x0]
+ ldrne r0, _020C8720 ; =0x04000440
+ str r3, [r1, #0x4]
+ ldrne r4, _020C8724 ; =0x04000458
+ strne r3, [r0, #0x0]
+ cmp r5, #0x0
+ beq _020C85E4
+ mov r1, #0x0
+ str r1, [r5, #0x4]
+ str r1, [r5, #0x8]
+ str r1, [r5, #0xc]
+ str r1, [r5, #0x10]
+ str r1, [r5, #0x18]
+ str r1, [r5, #0x1c]
+ str r1, [r5, #0x20]
+ str r1, [r5, #0x24]
+ rsb r0, r6, #0x0
+ str r0, [r5, #0x2c]
+ str r1, [r5, #0x30]
+ str r1, [r5, #0x34]
+ str r1, [r5, #0x3c]
+_020C85E4:
+ bl FX_GetDivResult
+ ldr r3, [sp, #0x20]
+ ldr r1, [sp, #0x28]
+ ldr sb, _020C8718 ; =0x04000290
+ mov r12, #0x0
+ str r12, [r9, #0x0]
+ mov r10, #0x1000
+ ldr r2, _020C871C ; =0x04000298
+ str r10, [r9, #0x4]
+ sub r3, r8, r3
+ str r3, [r2, #0x0]
+ str r12, [r2, #0x4]
+ cmp r1, #0x0
+ beq _020C8644
+ str r0, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r7, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+ str r12, [r4, #0x0]
+_020C8644:
+ cmp r5, #0x0
+ strne r0, [r5, #0x0]
+ strne r7, [r5, #0x14]
+ bl FX_GetDivResultFx64c
+ cmp r6, #0x1000
+ beq _020C8680
+ mov r2, r6, asr #0x1f
+ umull r7, r3, r0, r6
+ mla r3, r0, r2, r3
+ mla r3, r1, r6, r3
+ mov r0, r7
+ mov r1, r3
+ mov r2, #0x1000
+ mov r3, #0x0
+ bl _ll_sdiv
+_020C8680:
+ ldr r3, [sp, #0x20]
+ mov r10, r8, lsl #0x1
+ add r12, r3, r8
+ mov r2, r12, asr #0x1f
+ umull r7, lr, r0, r12
+ mla lr, r0, r2, lr
+ mov r9, #0x80000000
+ smull r3, r2, r10, r3
+ mla lr, r1, r12, lr
+ adds r7, r7, r9
+ mov r8, #0x800
+ adc r7, lr, #0x0
+ adds r3, r3, r8
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ umull r10, r8, r0, r3
+ mov r2, r3, asr #0x1f
+ adds r9, r10, r9
+ mla r8, r0, r2, r8
+ mla r8, r1, r3, r8
+ ldr r0, [sp, #0x28]
+ adc r2, r8, #0x0
+ cmp r0, #0x0
+ mov r0, #0x0
+ beq _020C8704
+ str r7, [r4, #0x0]
+ rsb r1, r6, #0x0
+ str r1, [r4, #0x0]
+ str r0, [r4, #0x0]
+ str r0, [r4, #0x0]
+ str r2, [r4, #0x0]
+ str r0, [r4, #0x0]
+_020C8704:
+ cmp r5, #0x0
+ strne r7, [r5, #0x28]
+ strne r2, [r5, #0x38]
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020C8718: .word 0x04000290
+_020C871C: .word 0x04000298
+_020C8720: .word 0x04000440
+_020C8724: .word 0x04000458
+
+ arm_func_start GXS_EndLoadOBJExtPltt
+GXS_EndLoadOBJExtPltt: ; 0x020C8728
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C876C ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C8748
+ bl MI_WaitDma
+_020C8748:
+ ldr r0, _020C8770 ; =0x021D33F8
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForSubOBJExtPltt
+ ldr r0, _020C8770 ; =0x021D33F8
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C876C: .word 0x02106814
+_020C8770: .word 0x021D33F8
+
+ arm_func_start GXS_LoadOBJExtPltt
+GXS_LoadOBJExtPltt: ; 0x020C8774
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ ldr r3, _020C87E0 ; =0x02106814
+ mvn r12, #0x0
+ ldr lr, [r3, #0x0]
+ mov r5, r0
+ mov r4, r1
+ mov r3, r2
+ cmp lr, r12
+ beq _020C87C8
+ ldr r2, _020C87E4 ; =0x068A0000
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r5
+ add r2, r4, r2
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020C87C8:
+ ldr r1, _020C87E4 ; =0x068A0000
+ add r1, r4, r1
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C87E0: .word 0x02106814
+_020C87E4: .word 0x068A0000
+
+ arm_func_start GXS_BeginLoadOBJExtPltt
+GXS_BeginLoadOBJExtPltt: ; 0x020C87E8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForSubOBJ
+ ldr r1, _020C8808 ; =0x021D33F8
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C8808: .word 0x021D33F8
+
+ arm_func_start GXS_EndLoadBGExtPltt
+GXS_EndLoadBGExtPltt: ; 0x020C880C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C8850 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C882C
+ bl MI_WaitDma
+_020C882C:
+ ldr r0, _020C8854 ; =0x021D33E0
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForSubBGExtPltt
+ ldr r0, _020C8854 ; =0x021D33E0
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C8850: .word 0x02106814
+_020C8854: .word 0x021D33E0
+
+ arm_func_start GXS_LoadBGExtPltt
+GXS_LoadBGExtPltt: ; 0x020C8858
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ ldr r3, _020C88C4 ; =0x02106814
+ mvn r12, #0x0
+ ldr lr, [r3, #0x0]
+ mov r5, r0
+ mov r4, r1
+ mov r3, r2
+ cmp lr, r12
+ beq _020C88AC
+ ldr r2, _020C88C8 ; =0x06898000
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r5
+ add r2, r4, r2
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020C88AC:
+ ldr r1, _020C88C8 ; =0x06898000
+ add r1, r4, r1
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C88C4: .word 0x02106814
+_020C88C8: .word 0x06898000
+
+ arm_func_start GXS_BeginLoadBGExtPltt
+GXS_BeginLoadBGExtPltt: ; 0x020C88CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020C6034
+ ldr r1, _020C88EC ; =0x021D33E0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C88EC: .word 0x021D33E0
+
+ arm_func_start GX_EndLoadOBJExtPltt
+GX_EndLoadOBJExtPltt: ; 0x020C88F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C893C ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C8910
+ bl MI_WaitDma
+_020C8910:
+ ldr r0, _020C8940 ; =0x021D33E8
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForOBJExtPltt
+ ldr r1, _020C8940 ; =0x021D33E8
+ mov r2, #0x0
+ ldr r0, _020C8944 ; =0x021D33E4
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C893C: .word 0x02106814
+_020C8940: .word 0x021D33E8
+_020C8944: .word 0x021D33E4
+
+ arm_func_start GX_LoadOBJExtPltt
+GX_LoadOBJExtPltt: ; 0x020C8948
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ ldr ip, _020C89B4 ; =0x021D33E4
+ ldr r3, _020C89B8 ; =0x02106814
+ ldr r4, [r12, #0x0]
+ ldr lr, [r3, #0x0]
+ mvn r12, #0x0
+ mov r5, r0
+ mov r3, r2
+ cmp lr, r12
+ add r4, r4, r1
+ beq _020C89A0
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r5
+ mov r2, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020C89A0:
+ mov r1, r4
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C89B4: .word 0x021D33E4
+_020C89B8: .word 0x02106814
+
+ arm_func_start GX_BeginLoadOBJExtPltt
+GX_BeginLoadOBJExtPltt: ; 0x020C89BC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForOBJExtPltt
+ ldr r1, _020C8A1C ; =0x021D33E8
+ cmp r0, #0x0
+ str r0, [r1, #0x0]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ cmp r0, #0x20
+ beq _020C8A04
+ cmp r0, #0x40
+ ldreq r1, _020C8A20 ; =0x06894000
+ ldreq r0, _020C8A24 ; =0x021D33E4
+ add sp, sp, #0x4
+ streq r1, [r0, #0x0]
+ ldmia sp!, {lr}
+ bx lr
+_020C8A04:
+ ldr r1, _020C8A28 ; =0x06890000
+ ldr r0, _020C8A24 ; =0x021D33E4
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C8A1C: .word 0x021D33E8
+_020C8A20: .word 0x06894000
+_020C8A24: .word 0x021D33E4
+_020C8A28: .word 0x06890000
+
+ arm_func_start GX_EndLoadBGExtPltt
+GX_EndLoadBGExtPltt: ; 0x020C8A2C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C8A80 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C8A4C
+ bl MI_WaitDma
+_020C8A4C:
+ ldr r0, _020C8A84 ; =0x021D33F4
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForBGExtPltt
+ ldr r2, _020C8A84 ; =0x021D33F4
+ mov r3, #0x0
+ ldr r1, _020C8A88 ; =0x021D33F0
+ ldr r0, _020C8A8C ; =0x021D33EC
+ str r3, [r2, #0x0]
+ str r3, [r1, #0x0]
+ str r3, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C8A80: .word 0x02106814
+_020C8A84: .word 0x021D33F4
+_020C8A88: .word 0x021D33F0
+_020C8A8C: .word 0x021D33EC
+
+ arm_func_start GX_LoadBGExtPltt
+GX_LoadBGExtPltt: ; 0x020C8A90
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ ldr lr, _020C8B04 ; =0x021D33F0
+ ldr ip, _020C8B08 ; =0x021D33EC
+ ldr r3, _020C8B0C ; =0x02106814
+ ldr lr, [lr, #0x0]
+ ldr r4, [r12, #0x0]
+ add r5, lr, r1
+ ldr lr, [r3, #0x0]
+ mvn r12, #0x0
+ mov r1, r0
+ mov r3, r2
+ cmp lr, r12
+ sub r4, r5, r4
+ beq _020C8AF0
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r2, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020C8AF0:
+ mov r1, r4
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C8B04: .word 0x021D33F0
+_020C8B08: .word 0x021D33EC
+_020C8B0C: .word 0x02106814
+
+ arm_func_start GX_BeginLoadBGExtPltt
+GX_BeginLoadBGExtPltt: ; 0x020C8B10
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForBGExtPltt
+ ldr r1, _020C8BFC ; =0x021D33F4
+ cmp r0, #0x20
+ str r0, [r1, #0x0]
+ bgt _020C8B60
+ cmp r0, #0x20
+ bge _020C8BD8
+ cmp r0, #0x0
+ bgt _020C8B4C
+ add sp, sp, #0x4
+ cmp r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_020C8B4C:
+ cmp r0, #0x10
+ beq _020C8B90
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C8B60:
+ cmp r0, #0x40
+ bgt _020C8B7C
+ cmp r0, #0x40
+ beq _020C8BB4
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C8B7C:
+ cmp r0, #0x60
+ beq _020C8BD8
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C8B90:
+ ldr r3, _020C8C00 ; =0x06880000
+ ldr r1, _020C8C04 ; =0x021D33F0
+ ldr r0, _020C8C08 ; =0x021D33EC
+ mov r2, #0x0
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C8BB4:
+ ldr r3, _020C8C0C ; =0x06894000
+ ldr r1, _020C8C04 ; =0x021D33F0
+ ldr r0, _020C8C08 ; =0x021D33EC
+ mov r2, #0x4000
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C8BD8:
+ ldr r3, _020C8C10 ; =0x06890000
+ ldr r1, _020C8C04 ; =0x021D33F0
+ ldr r0, _020C8C08 ; =0x021D33EC
+ mov r2, #0x0
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C8BFC: .word 0x021D33F4
+_020C8C00: .word 0x06880000
+_020C8C04: .word 0x021D33F0
+_020C8C08: .word 0x021D33EC
+_020C8C0C: .word 0x06894000
+_020C8C10: .word 0x06890000
+
+ arm_func_start GXS_LoadBG3Char
+GXS_LoadBG3Char: ; 0x020C8C14
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG3CharPtr
+ ldr r1, _020C8C78 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8C60
+ cmp r4, #0x30
+ bls _020C8C60
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8C60:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8C78: .word 0x02106814
+
+ arm_func_start GX_LoadBG3Char
+GX_LoadBG3Char: ; 0x020C8C7C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG3CharPtr
+ ldr r1, _020C8CE0 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8CC8
+ cmp r4, #0x30
+ bls _020C8CC8
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8CC8:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8CE0: .word 0x02106814
+
+ arm_func_start GXS_LoadBG2Char
+GXS_LoadBG2Char: ; 0x020C8CE4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG2CharPtr
+ ldr r1, _020C8D48 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8D30
+ cmp r4, #0x30
+ bls _020C8D30
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8D30:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8D48: .word 0x02106814
+
+ arm_func_start GX_LoadBG2Char
+GX_LoadBG2Char: ; 0x020C8D4C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG2CharPtr
+ ldr r1, _020C8DB0 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8D98
+ cmp r4, #0x30
+ bls _020C8D98
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8D98:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8DB0: .word 0x02106814
+
+ arm_func_start GXS_LoadBG1Char
+GXS_LoadBG1Char: ; 0x020C8DB4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG1CharPtr
+ ldr r1, _020C8E18 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8E00
+ cmp r4, #0x30
+ bls _020C8E00
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8E00:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8E18: .word 0x02106814
+
+ arm_func_start GX_LoadBG1Char
+GX_LoadBG1Char: ; 0x020C8E1C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG1CharPtr
+ ldr r1, _020C8E80 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8E68
+ cmp r4, #0x30
+ bls _020C8E68
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8E68:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8E80: .word 0x02106814
+
+ arm_func_start GXS_LoadBG0Char
+GXS_LoadBG0Char: ; 0x020C8E84
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG0CharPtr
+ ldr r1, _020C8EE8 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8ED0
+ cmp r4, #0x30
+ bls _020C8ED0
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8ED0:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8EE8: .word 0x02106814
+
+ arm_func_start GX_LoadBG0Char
+GX_LoadBG0Char: ; 0x020C8EEC
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG0CharPtr
+ ldr r1, _020C8F50 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8F38
+ cmp r4, #0x30
+ bls _020C8F38
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8F38:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8F50: .word 0x02106814
+
+ arm_func_start GXS_LoadBG3Scr
+GXS_LoadBG3Scr: ; 0x020C8F54
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG3ScrPtr
+ ldr r1, _020C8FB8 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C8FA0
+ cmp r4, #0x1c
+ bls _020C8FA0
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C8FA0:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C8FB8: .word 0x02106814
+
+ arm_func_start GX_LoadBG3Scr
+GX_LoadBG3Scr: ; 0x020C8FBC
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG3ScrPtr
+ ldr r1, _020C9020 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C9008
+ cmp r4, #0x1c
+ bls _020C9008
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C9008:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9020: .word 0x02106814
+
+ arm_func_start GXS_LoadBG2Scr
+GXS_LoadBG2Scr: ; 0x020C9024
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG2ScrPtr
+ ldr r1, _020C9088 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C9070
+ cmp r4, #0x1c
+ bls _020C9070
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C9070:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9088: .word 0x02106814
+
+ arm_func_start GX_LoadBG2Scr
+GX_LoadBG2Scr: ; 0x020C908C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG2ScrPtr
+ ldr r1, _020C90F0 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C90D8
+ cmp r4, #0x1c
+ bls _020C90D8
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C90D8:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C90F0: .word 0x02106814
+
+ arm_func_start GXS_LoadBG1Scr
+GXS_LoadBG1Scr: ; 0x020C90F4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG1ScrPtr
+ ldr r1, _020C9158 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C9140
+ cmp r4, #0x1c
+ bls _020C9140
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C9140:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9158: .word 0x02106814
+
+ arm_func_start GX_LoadBG1Scr
+GX_LoadBG1Scr: ; 0x020C915C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG1ScrPtr
+ ldr r1, _020C91C0 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C91A8
+ cmp r4, #0x1c
+ bls _020C91A8
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C91A8:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C91C0: .word 0x02106814
+
+ arm_func_start GXS_LoadBG0Scr
+GXS_LoadBG0Scr: ; 0x020C91C4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2S_GetBG0ScrPtr
+ ldr r1, _020C9228 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C9210
+ cmp r4, #0x1c
+ bls _020C9210
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C9210:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9228: .word 0x02106814
+
+ arm_func_start GX_LoadBG0Scr
+GX_LoadBG0Scr: ; 0x020C922C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl G2_GetBG0ScrPtr
+ ldr r1, _020C9290 ; =0x02106814
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ mvn r1, #0x0
+ cmp r0, r1
+ beq _020C9278
+ cmp r4, #0x1c
+ bls _020C9278
+ mov r1, r6
+ mov r3, r4
+ add r2, r12, r5
+ bl MI_DmaCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020C9278:
+ mov r0, r6
+ mov r2, r4
+ add r1, r12, r5
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9290: .word 0x02106814
+
+ arm_func_start GXS_LoadOBJ
+GXS_LoadOBJ: ; 0x020C9294
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C92F0 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ mov r12, #0x6600000
+ beq _020C92D8
+ cmp r3, #0x30
+ bls _020C92D8
+ mov r1, r4
+ add r2, r12, lr
+ bl MI_DmaCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C92D8:
+ mov r0, r4
+ mov r2, r3
+ add r1, r12, lr
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C92F0: .word 0x02106814
+
+ arm_func_start GX_LoadOBJ
+GX_LoadOBJ: ; 0x020C92F4
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C9350 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ mov r12, #0x6400000
+ beq _020C9338
+ cmp r3, #0x30
+ bls _020C9338
+ mov r1, r4
+ add r2, r12, lr
+ bl MI_DmaCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C9338:
+ mov r0, r4
+ mov r2, r3
+ add r1, r12, lr
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9350: .word 0x02106814
+
+ arm_func_start GXS_LoadOAM
+GXS_LoadOAM: ; 0x020C9354
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C93B4 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C9398
+ cmp r3, #0x30
+ bls _020C9398
+ ldr r2, _020C93B8 ; =0x07000400
+ mov r1, r4
+ add r2, lr, r2
+ bl MI_DmaCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C9398:
+ ldr r1, _020C93B8 ; =0x07000400
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, r1
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C93B4: .word 0x02106814
+_020C93B8: .word 0x07000400
+
+ arm_func_start GX_LoadOAM
+GX_LoadOAM: ; 0x020C93BC
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C9414 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C93FC
+ cmp r3, #0x30
+ bls _020C93FC
+ mov r1, r4
+ add r2, lr, #0x7000000
+ bl MI_DmaCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C93FC:
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, #0x7000000
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9414: .word 0x02106814
+
+ arm_func_start GXS_LoadOBJPltt
+GXS_LoadOBJPltt: ; 0x020C9418
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C9478 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C945C
+ cmp r3, #0x1c
+ bls _020C945C
+ ldr r2, _020C947C ; =0x05000600
+ mov r1, r4
+ add r2, lr, r2
+ bl MI_DmaCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C945C:
+ ldr r1, _020C947C ; =0x05000600
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, r1
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9478: .word 0x02106814
+_020C947C: .word 0x05000600
+
+ arm_func_start GX_LoadOBJPltt
+GX_LoadOBJPltt: ; 0x020C9480
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C94E0 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C94C4
+ cmp r3, #0x1c
+ bls _020C94C4
+ ldr r2, _020C94E4 ; =0x05000200
+ mov r1, r4
+ add r2, lr, r2
+ bl MI_DmaCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C94C4:
+ ldr r1, _020C94E4 ; =0x05000200
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, r1
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C94E0: .word 0x02106814
+_020C94E4: .word 0x05000200
+
+ arm_func_start GXS_LoadBGPltt
+GXS_LoadBGPltt: ; 0x020C94E8
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C9548 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C952C
+ cmp r3, #0x1c
+ bls _020C952C
+ ldr r2, _020C954C ; =0x05000400
+ mov r1, r4
+ add r2, lr, r2
+ bl MI_DmaCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C952C:
+ ldr r1, _020C954C ; =0x05000400
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, r1
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9548: .word 0x02106814
+_020C954C: .word 0x05000400
+
+ arm_func_start GX_LoadBGPltt
+GX_LoadBGPltt: ; 0x020C9550
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C95A8 ; =0x02106814
+ mov r4, r0
+ ldr r0, [r3, #0x0]
+ mvn r12, #0x0
+ mov lr, r1
+ mov r3, r2
+ cmp r0, r12
+ beq _020C9590
+ cmp r3, #0x1c
+ bls _020C9590
+ mov r1, r4
+ add r2, lr, #0x5000000
+ bl MI_DmaCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C9590:
+ mov r0, r4
+ mov r2, r3
+ add r1, lr, #0x5000000
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C95A8: .word 0x02106814
+
+ arm_func_start GX_EndLoadClearImage
+GX_EndLoadClearImage: ; 0x020C95AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C95F8 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C95CC
+ bl MI_WaitDma
+_020C95CC:
+ ldr r0, _020C95FC ; =0x021D33FC
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForClearImage
+ ldr r1, _020C95FC ; =0x021D33FC
+ mov r2, #0x0
+ ldr r0, _020C9600 ; =0x021D340C
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C95F8: .word 0x02106814
+_020C95FC: .word 0x021D33FC
+_020C9600: .word 0x021D340C
+
+ arm_func_start GX_LoadClearImageDepth
+GX_LoadClearImageDepth: ; 0x020C9604
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r3, _020C9670 ; =0x021D340C
+ ldr r2, _020C9674 ; =0x02106814
+ ldr r12, [r3, #0x0]
+ ldr lr, [r2, #0x0]
+ mvn r2, #0x0
+ mov r4, r0
+ mov r3, r1
+ cmp lr, r2
+ add r2, r12, #0x20000
+ beq _020C9658
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C9658:
+ mov r1, r2
+ mov r2, r3
+ bl MIi_CpuCopy32
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9670: .word 0x021D340C
+_020C9674: .word 0x02106814
+
+ arm_func_start GX_LoadClearImageColor
+GX_LoadClearImageColor: ; 0x020C9678
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r2, _020C96E0 ; =0x02106814
+ ldr ip, _020C96E4 ; =0x021D340C
+ ldr lr, [r2, #0x0]
+ mvn r2, #0x0
+ mov r4, r0
+ mov r3, r1
+ cmp lr, r2
+ ldr r2, [r12, #0x0]
+ beq _020C96C8
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C96C8:
+ mov r1, r2
+ mov r2, r3
+ bl MIi_CpuCopy32
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C96E0: .word 0x02106814
+_020C96E4: .word 0x021D340C
+
+ arm_func_start GX_BeginLoadClearImage
+GX_BeginLoadClearImage: ; 0x020C96E8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForClearImage
+ ldr r1, _020C979C ; =0x021D33FC
+ cmp r0, #0xc
+ str r0, [r1, #0x0]
+ addls pc, pc, r0, lsl #0x2
+ b _020C9790
+_020C9708:
+ b _020C9790
+_020C970C:
+ b _020C976C
+_020C9710:
+ b _020C973C
+_020C9714:
+ b _020C973C
+_020C9718:
+ b _020C9784
+_020C971C:
+ b _020C9790
+_020C9720:
+ b _020C9790
+_020C9724:
+ b _020C9790
+_020C9728:
+ b _020C9754
+_020C972C:
+ b _020C9790
+_020C9730:
+ b _020C9790
+_020C9734:
+ b _020C9790
+_020C9738:
+ b _020C9754
+_020C973C:
+ ldr r0, _020C97A0 ; =0x021D340C
+ mov r1, #0x6800000
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020C9754:
+ ldr r1, _020C97A4 ; =0x06840000
+ ldr r0, _020C97A0 ; =0x021D340C
+ add sp, sp, #0x4
+ str r1, [r0, #0x0]
+ ldmia sp!, {lr}
+ bx lr
+_020C976C:
+ ldr r1, _020C97A8 ; =0x067E0000
+ ldr r0, _020C97A0 ; =0x021D340C
+ add sp, sp, #0x4
+ str r1, [r0, #0x0]
+ ldmia sp!, {lr}
+ bx lr
+_020C9784:
+ ldr r1, _020C97AC ; =0x06820000
+ ldr r0, _020C97A0 ; =0x021D340C
+ str r1, [r0, #0x0]
+_020C9790:
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C979C: .word 0x021D33FC
+_020C97A0: .word 0x021D340C
+_020C97A4: .word 0x06840000
+_020C97A8: .word 0x067E0000
+_020C97AC: .word 0x06820000
+
+ arm_func_start GX_EndLoadTexPltt
+GX_EndLoadTexPltt: ; 0x020C97B0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C97FC ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C97D0
+ bl MI_WaitDma
+_020C97D0:
+ ldr r0, _020C9800 ; =0x021D3408
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForTexPltt
+ ldr r1, _020C9800 ; =0x021D3408
+ mov r2, #0x0
+ ldr r0, _020C9804 ; =0x021D3404
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C97FC: .word 0x02106814
+_020C9800: .word 0x021D3408
+_020C9804: .word 0x021D3404
+
+ arm_func_start GX_LoadTexPltt
+GX_LoadTexPltt: ; 0x020C9808
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ ldr ip, _020C9874 ; =0x021D3404
+ ldr r3, _020C9878 ; =0x02106814
+ ldr r4, [r12, #0x0]
+ ldr lr, [r3, #0x0]
+ mvn r12, #0x0
+ mov r5, r0
+ mov r3, r2
+ cmp lr, r12
+ add r4, r4, r1
+ beq _020C9860
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r0, lr
+ mov r1, r5
+ mov r2, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020C9860:
+ mov r1, r4
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C9874: .word 0x021D3404
+_020C9878: .word 0x02106814
+
+ arm_func_start GX_BeginLoadTexPltt
+GX_BeginLoadTexPltt: ; 0x020C987C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForTexPltt
+ mov r3, r0, asr #0x4
+ ldr r2, _020C98B8 ; =0x021D3408
+ ldr r1, _020C98BC ; =0x02103B3C
+ mov r3, r3, lsl #0x1
+ ldrh r3, [r1, r3]
+ ldr r1, _020C98C0 ; =0x021D3404
+ str r0, [r2, #0x0]
+ mov r0, r3, lsl #0xc
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C98B8: .word 0x021D3408
+_020C98BC: .word 0x02103B3C
+_020C98C0: .word 0x021D3404
+
+ arm_func_start GX_EndLoadTex
+GX_EndLoadTex: ; 0x020C98C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C9920 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C98E4
+ bl MI_WaitDma
+_020C98E4:
+ ldr r0, _020C9924 ; =0x021D3410
+ ldr r0, [r0, #0x0]
+ bl GX_SetBankForTex
+ ldr r3, _020C9928 ; =0x021D3418
+ mov r12, #0x0
+ ldr r2, _020C992C ; =0x021D3414
+ ldr r1, _020C9930 ; =0x021D3400
+ ldr r0, _020C9924 ; =0x021D3410
+ str r12, [r3, #0x0]
+ str r12, [r2, #0x0]
+ str r12, [r1, #0x0]
+ str r12, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C9920: .word 0x02106814
+_020C9924: .word 0x021D3410
+_020C9928: .word 0x021D3418
+_020C992C: .word 0x021D3414
+_020C9930: .word 0x021D3400
+
+ arm_func_start GX_LoadTex
+GX_LoadTex: ; 0x020C9934
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r3, _020C9A88 ; =0x021D3414
+ mov r7, r0
+ ldr r5, [r3, #0x0]
+ mov r6, r2
+ cmp r5, #0x0
+ ldreq r0, _020C9A8C ; =0x021D3400
+ ldreq r0, [r0, #0x0]
+ addeq r2, r0, r1
+ beq _020C9A34
+ ldr r0, _020C9A90 ; =0x021D3418
+ add r2, r1, r6
+ ldr r4, [r0, #0x0]
+ cmp r2, r4
+ ldrlo r0, _020C9A8C ; =0x021D3400
+ ldrcc r0, [r0, #0x0]
+ addcc r2, r0, r1
+ blo _020C9A34
+ cmp r1, r4
+ addcs r0, r5, r1
+ subcs r2, r0, r4
+ bhs _020C9A34
+ ldr r2, _020C9A8C ; =0x021D3400
+ ldr r0, _020C9A94 ; =0x02106814
+ ldr r3, [r2, #0x0]
+ ldr r0, [r0, #0x0]
+ mvn r2, #0x0
+ cmp r0, r2
+ sub r4, r4, r1
+ add r2, r3, r1
+ beq _020C99CC
+ cmp r4, #0x30
+ bls _020C99CC
+ mov r1, r7
+ mov r3, r4
+ bl MI_DmaCopy32
+ b _020C99DC
+_020C99CC:
+ mov r1, r2
+ mov r0, r7
+ mov r2, r4
+ bl MIi_CpuCopy32
+_020C99DC:
+ ldr r0, _020C9A94 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C9A18
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ mov r2, r5
+ add r1, r7, r4
+ sub r3, r6, r4
+ str r12, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020C9A18:
+ mov r1, r5
+ add r0, r7, r4
+ sub r2, r6, r4
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020C9A34:
+ ldr r0, _020C9A94 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020C9A6C
+ mov r4, #0x0
+ str r4, [sp, #0x0]
+ mov r1, r7
+ mov r3, r6
+ str r4, [sp, #0x4]
+ bl MI_DmaCopy32Async
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020C9A6C:
+ mov r1, r2
+ mov r0, r7
+ mov r2, r6
+ bl MIi_CpuCopy32
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020C9A88: .word 0x021D3414
+_020C9A8C: .word 0x021D3400
+_020C9A90: .word 0x021D3418
+_020C9A94: .word 0x02106814
+
+ arm_func_start GX_BeginLoadTex
+GX_BeginLoadTex: ; 0x020C9A98
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl GX_ResetBankForTex
+ mov r1, #0x6
+ mul r12, r0, r1
+ ldr r3, _020C9AFC ; =0x02103B4C
+ ldr r2, _020C9B00 ; =0x02103B4E
+ ldr r1, _020C9B04 ; =0x02103B50
+ ldrh r5, [r3, r12]
+ ldrh r4, [r2, r12]
+ ldrh lr, [r1, r12]
+ ldr ip, _020C9B08 ; =0x021D3410
+ ldr r3, _020C9B0C ; =0x021D3400
+ mov r5, r5, lsl #0xc
+ ldr r2, _020C9B10 ; =0x021D3414
+ mov r4, r4, lsl #0xc
+ ldr r1, _020C9B14 ; =0x021D3418
+ mov lr, lr, lsl #0xc
+ str r0, [r12, #0x0]
+ str r5, [r3, #0x0]
+ str r4, [r2, #0x0]
+ str lr, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C9AFC: .word 0x02103B4C
+_020C9B00: .word 0x02103B4E
+_020C9B04: .word 0x02103B50
+_020C9B08: .word 0x021D3410
+_020C9B0C: .word 0x021D3400
+_020C9B10: .word 0x021D3414
+_020C9B14: .word 0x021D3418
+
+ arm_func_start G3_EndMakeDL
+G3_EndMakeDL: ; 0x020C9B18
+ ldr r3, [r0, #0x0]
+ ldr r2, [r0, #0x8]
+ cmp r2, r3
+ moveq r0, #0x0
+ bxeq lr
+ and r1, r3, #0x3
+ cmp r1, #0x3
+ addls pc, pc, r1, lsl #0x2
+ b _020C9B8C
+_020C9B3C:
+ b _020C9B4C
+_020C9B40:
+ b _020C9B54
+_020C9B44:
+ b _020C9B64
+_020C9B48:
+ b _020C9B78
+_020C9B4C:
+ sub r0, r3, r2
+ bx lr
+_020C9B54:
+ add r1, r3, #0x1
+ str r1, [r0, #0x0]
+ mov r1, #0x0
+ strb r1, [r3, #0x0]
+_020C9B64:
+ ldr r3, [r0, #0x0]
+ mov r1, #0x0
+ add r2, r3, #0x1
+ str r2, [r0, #0x0]
+ strb r1, [r3, #0x0]
+_020C9B78:
+ ldr r3, [r0, #0x0]
+ mov r1, #0x0
+ add r2, r3, #0x1
+ str r2, [r0, #0x0]
+ strb r1, [r3, #0x0]
+_020C9B8C:
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ beq _020C9BB0
+ ldr r3, [r0, #0x4]
+ mov r1, #0x0
+ add r2, r3, #0x4
+ str r2, [r0, #0x4]
+ str r1, [r3, #0x0]
+ str r1, [r0, #0x10]
+_020C9BB0:
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ ldr r0, [r0, #0x8]
+ sub r0, r1, r0
+ bx lr
+
+ arm_func_start G3_BeginMakeDL
+G3_BeginMakeDL: ; 0x020C9BC8
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x8]
+ str r1, [r0, #0x0]
+ add r1, r1, #0x4
+ str r1, [r0, #0x4]
+ mov r1, #0x0
+ str r1, [r0, #0x10]
+ bx lr
+
+ arm_func_start GX_SendFifo48B
+GX_SendFifo48B: ; 0x020C9BE8
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ bx lr
diff --git a/arm9/asm/MATH_arm9.s b/arm9/asm/MATH_arm9.s
new file mode 100644
index 00000000..02dcfbcf
--- /dev/null
+++ b/arm9/asm/MATH_arm9.s
@@ -0,0 +1,320 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start MATH_CountPopulation
+MATH_CountPopulation: ; 0x020DDC5C
+ ldr r1, _020DDC94 ; =0x55555555
+ ldr r2, _020DDC98 ; =0x33333333
+ and r1, r1, r0, lsr #0x1
+ sub r0, r0, r1
+ and r1, r0, r2
+ and r0, r2, r0, lsr #0x2
+ add r1, r1, r0
+ ldr r0, _020DDC9C ; =0x0F0F0F0F
+ add r1, r1, r1, lsr #0x4
+ and r0, r1, r0
+ add r0, r0, r0, lsr #0x8
+ add r0, r0, r0, lsr #0x10
+ and r0, r0, #0xff
+ bx lr
+ .balign 4
+_020DDC94: .word 0x55555555
+_020DDC98: .word 0x33333333
+_020DDC9C: .word 0x0F0F0F0F
+
+ arm_func_start MATH_CalcSHA1
+MATH_CalcSHA1: ; 0x020DDCA0
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x68
+ mov r6, r0
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, r2
+ bl MATH_SHA1Init
+_020DDCBC: ; 0x020DDCBC
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl MATH_SHA1Update
+_020DDCCC: ; 0x020DDCCC
+ add r0, sp, #0x0
+ mov r1, r6
+ bl MATH_SHA1GetHash
+ add sp, sp, #0x68
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MATH_CalcMD5
+MATH_CalcMD5: ; 0x020DDCE4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x58
+ mov r6, r0
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, r2
+ bl DGT_Hash1Reset
+_020DDD00: ; 0x020DDD00
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl DGT_Hash1SetSource
+ add r1, sp, #0x0
+ mov r0, r6
+ bl DGT_Hash1GetDigest_R
+ add sp, sp, #0x58
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC32
+MATH_CalcCRC32: ; 0x020DDD28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mvn r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ str r12, [sp, #0x0]
+ bl MATHi_CRC32UpdateRev
+_020DDD4C: ; 0x020DDD4C
+ ldr r0, [sp, #0x0]
+ mvn r0, r0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC16CCITT
+MATH_CalcCRC16CCITT: ; 0x020DDD60
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020DDD94 ; =0x0000FFFF
+ mov lr, r1
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strh r12, [sp, #0x0]
+ bl MATHi_CRC16Update
+ ldrh r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DDD94: .word 0x0000FFFF
+
+ arm_func_start MATH_CalcCRC16
+MATH_CalcCRC16: ; 0x020DDD98
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strh r12, [sp, #0x0]
+ bl MATHi_CRC16UpdateRev
+ ldrh r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATH_CalcCRC8
+MATH_CalcCRC8: ; 0x020DDDCC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, #0x0
+ mov r3, r2
+ add r1, sp, #0x0
+ mov r2, lr
+ strb r12, [sp, #0x0]
+ bl MATHi_CRC8Update
+_020DDDF0: ; 0x020DDDF0
+ ldrb r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MATHi_CRC32UpdateRev
+MATHi_CRC32UpdateRev:
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldr r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDE38
+_020DDE14:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ ldr r12, [r0, r12, lsl #0x2]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsr #0x8
+ blo _020DDE14
+_020DDE38:
+ str r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC32InitTableRev
+MATHi_CRC32InitTableRev: ; 0x020DDE44
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DDE50:
+ mov r4, lr
+ mov r12, r3
+_020DDE58:
+ ands r2, r4, #0x1
+ eorne r4, r1, r4, lsr #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsr #0x1
+ cmp r12, #0x8
+ blo _020DDE58
+ str r4, [r0, lr, lsl #0x2]
+ add lr, lr, #0x1
+ cmp lr, #0x100
+ blo _020DDE50
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16UpdateRev
+MATHi_CRC16UpdateRev: ; 0x020DDE88
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrh r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDEC4
+_020DDE9C:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ mov r12, r12, lsl #0x1
+ ldrh r12, [r0, r12]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsr #0x8
+ blo _020DDE9C
+_020DDEC4:
+ strh r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16Update
+MATHi_CRC16Update: ; 0x020DDED0
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrh r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDF0C
+_020DDEE4:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r12, r4, lsr #0x8
+ and r12, r12, #0xff
+ mov r12, r12, lsl #0x1
+ ldrh r12, [r0, r12]
+ add r2, r2, #0x1
+ eor r4, r12, r4, lsl #0x8
+ blo _020DDEE4
+_020DDF0C:
+ strh r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16InitTableRev
+MATHi_CRC16InitTableRev: ; 0x020DDF18
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DDF24:
+ mov r4, lr
+ mov r12, r3
+_020DDF2C:
+ ands r2, r4, #0x1
+ eorne r4, r1, r4, lsr #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsr #0x1
+ cmp r12, #0x8
+ blo _020DDF2C
+ mov r2, lr, lsl #0x1
+ add lr, lr, #0x1
+ strh r4, [r0, r2]
+ cmp lr, #0x100
+ blo _020DDF24
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC16InitTable
+MATHi_CRC16InitTable: ; 0x020DDF60
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, #0x0
+ mov r12, r4
+ mov r3, r4
+_020DDF74:
+ mov r5, r12
+ mov lr, r3
+_020DDF7C:
+ ands r2, r5, #0x8000
+ eorne r5, r1, r5, lsl #0x1
+ add lr, lr, #0x1
+ moveq r5, r5, lsl #0x1
+ cmp lr, #0x8
+ blo _020DDF7C
+ mov r2, r4, lsl #0x1
+ add r4, r4, #0x1
+ strh r5, [r0, r2]
+ cmp r4, #0x100
+ add r12, r12, #0x100
+ blo _020DDF74
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC8Update
+MATHi_CRC8Update:
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ ldrb r4, [r1, #0x0]
+ mov lr, #0x0
+ bls _020DDFEC
+_020DDFCC:
+ ldrb r12, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, r3
+ eor r12, r4, r12
+ and r12, r12, #0xff
+ add r2, r2, #0x1
+ ldrb r4, [r0, r12]
+ blo _020DDFCC
+_020DDFEC:
+ strb r4, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MATHi_CRC8InitTable
+MATHi_CRC8InitTable: ; 0x020DDFF8
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r3, lr
+_020DE004:
+ mov r4, lr
+ mov r12, r3
+_020DE00C:
+ ands r2, r4, #0x80
+ eorne r4, r1, r4, lsl #0x1
+ add r12, r12, #0x1
+ moveq r4, r4, lsl #0x1
+ cmp r12, #0x8
+ blo _020DE00C
+ strb r4, [r0, lr]
+ add lr, lr, #0x1
+ cmp lr, #0x100
+ blo _020DE004
+ ldmia sp!, {r4,lr}
+ bx lr
diff --git a/arm9/asm/MI_arm9.s b/arm9/asm/MI_arm9.s
new file mode 100644
index 00000000..82747b38
--- /dev/null
+++ b/arm9/asm/MI_arm9.s
@@ -0,0 +1,1082 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+
+
+ arm_func_start MI_SetWramBank
+MI_SetWramBank:
+ ldr r1, _020CD870 ; =0x04000247
+ strb r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CD870: .word 0x04000247
+
+ arm_func_start MIi_CheckDma0SourceAddress
+MIi_CheckDma0SourceAddress:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ cmp r3, #0x0
+ and r0, r1, #0xff000000
+ beq _020CD8A4
+ cmp r3, #0x800000
+ subeq r1, r1, r2
+ b _020CD8A8
+_020CD8A4:
+ add r1, r1, r2
+_020CD8A8:
+ cmp r0, #0x4000000
+ beq _020CD8D4
+ cmp r0, #0x8000000
+ bhs _020CD8D4
+ and r0, r1, #0xff000000
+ cmp r0, #0x4000000
+ beq _020CD8D4
+ cmp r0, #0x8000000
+ addcc sp, sp, #0x4
+ ldmccia sp!, {lr}
+ bxcc lr
+_020CD8D4:
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MIi_CheckAnotherAutoDMA
+MIi_CheckAnotherAutoDMA: ; 0x020CD8E4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020CD994 ; =0x040000B8
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0x0
+_020CD8FC:
+ cmp r5, r7
+ beq _020CD978
+ ldr r1, [r4, #0x0]
+ ands r0, r1, #0x80000000
+ beq _020CD978
+ and r0, r1, #0x38000000
+ cmp r0, r6
+ beq _020CD978
+ cmp r0, #0x8000000
+ bne _020CD92C
+ cmp r6, #0x10000000
+ beq _020CD978
+_020CD92C:
+ cmp r0, #0x10000000
+ bne _020CD93C
+ cmp r6, #0x8000000
+ beq _020CD978
+_020CD93C:
+ cmp r0, #0x18000000
+ beq _020CD974
+ cmp r0, #0x20000000
+ beq _020CD974
+ cmp r0, #0x28000000
+ beq _020CD974
+ cmp r0, #0x30000000
+ beq _020CD974
+ cmp r0, #0x38000000
+ beq _020CD974
+ cmp r0, #0x8000000
+ beq _020CD974
+ cmp r0, #0x10000000
+ bne _020CD978
+_020CD974:
+ bl OS_Terminate
+_020CD978:
+ add r5, r5, #0x1
+ cmp r5, #0x3
+ add r4, r4, #0xc
+ blt _020CD8FC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020CD994: .word 0x040000B8
+
+ arm_func_start MI_StopDma
+MI_StopDma: ; 0x020CD998
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r1, #0x6
+ mul r1, r4, r1
+ add r1, r1, #0x5
+ mov r1, r1, lsl #0x1
+ add r1, r1, #0x4000000
+ ldrh r2, [r1, #0xb0]
+ cmp r4, #0x0
+ bic r2, r2, #0x3a00
+ strh r2, [r1, #0xb0]
+ ldrh r2, [r1, #0xb0]
+ bic r2, r2, #0x8000
+ strh r2, [r1, #0xb0]
+ ldrh r2, [r1, #0xb0]
+ ldrh r1, [r1, #0xb0]
+ bne _020CDA08
+ mov r1, #0xc
+ mul r12, r4, r1
+ ldr r1, _020CDA14 ; =0x040000B0
+ add r2, r12, #0x4000000
+ mov r3, #0x0
+ str r3, [r2, #0xb0]
+ add r2, r12, r1
+ ldr r1, _020CDA18 ; =0x81400001
+ str r3, [r2, #0x4]
+ str r1, [r2, #0x8]
+_020CDA08:
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CDA14: .word 0x040000B0
+_020CDA18: .word 0x81400001
+
+ arm_func_start MI_WaitDma
+MI_WaitDma:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r1, #0x3
+ mul r2, r4, r1
+ ldr r1, _020CDA84 ; =0x040000B0
+ add r2, r2, #0x2
+ add r2, r1, r2, lsl #0x2
+_020CDA3C:
+ ldr r1, [r2, #0x0]
+ ands r1, r1, #0x80000000
+ bne _020CDA3C
+ cmp r4, #0x0
+ bne _020CDA78
+ mov r1, #0xc
+ mul r12, r4, r1
+ ldr r1, _020CDA84 ; =0x040000B0
+ add r2, r12, #0x4000000
+ mov r3, #0x0
+ str r3, [r2, #0xb0]
+ add r2, r12, r1
+ ldr r1, _020CDA88 ; =0x81400001
+ str r3, [r2, #0x4]
+ str r1, [r2, #0x8]
+_020CDA78:
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CDA84: .word 0x040000B0
+_020CDA88: .word 0x81400001
+
+ arm_func_start MI_DmaCopy32Async
+MI_DmaCopy32Async: ; 0x020CDA8C
+ stmdb sp!, {r4-r8,lr}
+ mov r5, r3
+ mov r6, r2
+ mov r2, r5
+ mov r3, #0x0
+ mov r8, r0
+ mov r7, r1
+ ldr r4, [sp, #0x18]
+ bl MIi_CheckDma0SourceAddress
+_020CDAB0:
+ cmp r5, #0x0
+ bne _020CDAD4
+ cmp r4, #0x0
+ ldmeqia sp!, {r4-r8, lr}
+ bxeq lr
+ ldr r0, [sp, #0x1C]
+ blx r4
+ ldmia sp!, {r4-r8, lr}
+ bx lr
+_020CDAD4:
+ mov r0, r8
+ bl MI_WaitDma
+ cmp r4, #0x0
+ beq _020CDB14
+ ldr r2, [sp, #0x1C]
+ mov r0, r8
+ mov r1, r4
+ bl OSi_EnterDmaCallback
+ mov r3, r5, lsr #0x2
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ orr r3, r3, #0xc4000000
+ bl MIi_DmaSetParams
+ ldmia sp!, {r4-r8, lr}
+ bx lr
+_020CDB14:
+ mov r3, r5, lsr #0x2
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ orr r3, r3, #0x84000000
+ bl MIi_DmaSetParams
+ ldmia sp!, {r4-r8, lr}
+ bx lr
+
+ arm_func_start MI_DmaFill32Async
+MI_DmaFill32Async: ; 0x020CDB34
+ stmdb sp!, {r4-r8,lr}
+ movs r4, r3
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ ldr r8, [sp, #0x18]
+ bne _020CDB6C
+ cmp r8, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [sp, #0x1c]
+ blx r8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CDB6C:
+ bl MI_WaitDma
+_020CDB70:
+ cmp r8, #0x0
+ beq _020CDBC8
+ ldr r2, [sp, #0x1C]
+ mov r0, r7
+ mov r1, r8
+ bl OSi_EnterDmaCallback
+ bl OS_DisableInterrupts
+ mov r3, r4, lsr #2
+ ldr r1, _20CDC08
+ mov r2, r7, lsl #2
+ add r2, r2, #0x4000000
+ str r5, [r2, #0xE0]
+ mov r4, r0
+ add r1, r1, r7, lsl #0x2
+ mov r0, r7
+ mov r2, r6
+ orr r3, r3, #0xc5000000
+ bl MIi_DmaSetParams_noInt
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CDBC8:
+ bl OS_DisableInterrupts
+ ldr r1, _20CDC08
+ mov r2, r7, lsl #0x2
+ mov r3, r4, lsr #0x2
+ mov r4, r0
+ add ip, r2, #0x4000000
+ mov r0, r7
+ mov r2, r6
+ add r1, r1, r7, lsl #0x2
+ orr r3, r3, #0x85000000
+ str r5, [ip, #0xE0]
+ bl MIi_DmaSetParams_noInt
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_20CDC08: .word 0x040000E0
+
+ arm_func_start MI_DmaCopy16
+MI_DmaCopy16: ; 0x020CDC0C
+ stmdb sp!, {r4-r8,lr}
+ movs r5, r3
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r2, r5
+ mov r3, #0x0
+ bl MIi_CheckDma0SourceAddress
+ mov r0, #0x3
+ mul r1, r8, r0
+ ldr r0, _020CDC80 ; =0x040000B0
+ add r1, r1, #0x2
+ add r4, r0, r1, lsl #0x2
+_020CDC48:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x80000000
+ bne _020CDC48
+ mov r3, r5, lsr #0x1
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ orr r3, r3, #0x80000000
+ bl MIi_DmaSetParams_wait
+_020CDC6C:
+ ldr r0, [r4]
+ ands r0, r0, #0x80000000
+ bne _020CDC6C
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CDC80: .word 0x040000B0
+
+ arm_func_start MI_DmaCopy32
+MI_DmaCopy32: ; 0x020CDC84
+ stmdb sp!, {r4-r8,lr}
+ mov r5, r3
+ mov r6, r2
+ mov r2, r5
+ mov r3, #0x0
+ mov r8, r0
+ mov r7, r1
+ bl MIi_CheckDma0SourceAddress
+_020CDCA4:
+ cmp r5, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, #0x3
+ mul r1, r8, r0
+ ldr r0, _020CDCFC
+ add r1, r1, #0x2
+ add r4, r0, r1, lsl #0x2
+_020CDCC4:
+ ldr r0, [r4]
+ ands r0, r0, #0x80000000
+ bne _020CDCC4
+ mov r3, r5, lsr #0x2
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ orr r3, r3, #0x84000000
+ bl MIi_DmaSetParams_wait
+_020CDCE8:
+ ldr r0, [r4]
+ ands r0, r0, #0x80000000
+ bne _020CDCE8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CDCFC: .word 0x040000B0
+
+ arm_func_start MI_DmaFill32
+MI_DmaFill32: ; 0x020CDD00
+ stmdb sp!, {r4-r8,lr}
+ movs r4, r3
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, #0x3
+ mul r1, r8, r0
+ ldr r0, _020CDD88 ; =0x040000B0
+ add r1, r1, #0x2
+ add r5, r0, r1, lsl #0x2
+_020CDD30:
+ ldr r0, [r5, #0x0]
+ ands r0, r0, #0x80000000
+ bne _020CDD30
+ bl OS_DisableInterrupts
+ ldr r1, _020CDD8C ; =0x040000E0
+ mov r2, r8, lsl #0x2
+ mov r3, r4, lsr #0x2
+ mov r4, r0
+ add r12, r2, #0x4000000
+ mov r0, r8
+ mov r2, r7
+ add r1, r1, r8, lsl #0x2
+ orr r3, r3, #0x85000000
+ str r6, [r12, #0xe0]
+ bl MIi_DmaSetParams_wait_noInt
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020CDD74:
+ ldr r0, [r5]
+ ands r0, r0, #0x80000000
+ bne _020CDD74
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CDD88: .word 0x040000B0
+_020CDD8C: .word 0x040000E0
+
+ arm_func_start MI_HBlankDmaCopy16
+MI_HBlankDmaCopy16: ; 0x020CDD90
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ mov r7, r0
+ mov r4, r3
+ mov r1, #0x10000000
+ mov r5, r2
+ bl MIi_CheckAnotherAutoDMA
+ mov r0, r7
+ mov r1, r6
+ mov r2, r4
+ mov r3, #0x0
+ bl MIi_CheckDma0SourceAddress
+_020CDDC4:
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7, lr}
+ bxeq lr
+ mov r0, r7
+ bl MI_WaitDma
+ ldr r3, _020CDE00
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ orr r3, r3, r4, lsr #0x1
+ bl MIi_DmaSetParams
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CDE00: .word 0x92600000
+
+ arm_func_start MI_HBlankDmaCopy32
+MI_HBlankDmaCopy32: ; 0x020CDE04
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ mov r7, r0
+ mov r4, r3
+ mov r1, #0x10000000
+ mov r5, r2
+ bl MIi_CheckAnotherAutoDMA
+ mov r0, r7
+ mov r1, r6
+ mov r2, r4
+ mov r3, #0x0
+ bl MIi_CheckDma0SourceAddress
+_020CDE38:
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r7
+ bl MI_WaitDma
+ ldr r3, _020CDE74
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ orr r3, r3, r4, lsr #0x2
+ bl MIi_DmaSetParams
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CDE74: .word 0x96600000
+
+ arm_func_start MIi_DMAFastCallback
+MIi_DMAFastCallback: ; 0x020CDE78
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CDEB4 ; =0x021D37FC
+ mov r2, #0x0
+ ldr r1, [r0, #0x10]
+ str r2, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldr r0, [r0, #0x14]
+ ldmeqia sp!, {lr}
+ bxeq lr
+ blx r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CDEB4: .word 0x021D37FC
+
+ arm_func_start MI_SendGXCommandAsyncFast
+MI_SendGXCommandAsyncFast: ; 0x020CDEB8
+ stmdb sp!, {r4-r6,lr}
+ movs r4, r2
+ mov r6, r0
+ mov r5, r1
+ bne _020CDEE8
+ cmp r3, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, [sp, #0x10]
+ blx r3
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020CDEE8:
+ ldr r2, _020CDF6C ; =0x021D37FC
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ bne _020CDEE8
+ ldr r12, [sp, #0x10]
+ mov lr, #0x1
+ mov r0, r6
+ mov r1, #0x38000000
+ str lr, [r2, #0x0]
+ str r6, [r2, #0x4]
+ str r3, [r2, #0x10]
+ str r12, [r2, #0x14]
+ bl MIi_CheckAnotherAutoDMA
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r3, #0x0
+ bl MIi_CheckDma0SourceAddress
+ mov r0, r6
+ bl MI_WaitDma
+ mov r0, r6
+ ldr r1, _020CDF70 ; =MIi_DMAFastCallback
+ mov r2, #0x0
+ bl OSi_EnterDmaCallback
+ mov r0, r6
+ mov r1, r5
+ ldr r2, _020CDF74 ; =0x04000400
+ mov r3, #0x3c00000
+ rsb r3, r3, #0x0
+ orr r3, r3, r4, lsr #0x2
+ bl MIi_DmaSetParams
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CDF6C: .word 0x021D37FC
+_020CDF70: .word MIi_DMAFastCallback
+_020CDF74: .word 0x04000400
+
+ arm_func_start MIi_DMACallback
+MIi_DMACallback: ; 0x020CDF78
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x200000
+ bl OS_DisableIrqMask
+ ldr r2, _020CDFE4 ; =0x04000600
+ ldr r0, _020CDFE8 ; =0x021D37FC
+ ldr r1, [r2, #0x0]
+ ldr r3, [r0, #0x18]
+ bic r1, r1, #0xc0000000
+ orr r1, r1, r3, lsl #0x1e
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x1c]
+ mov r0, #0x200000
+ bl OS_SetIrqFunction
+ ldr r0, _020CDFE8 ; =0x021D37FC
+ mov r2, #0x0
+ ldr r1, [r0, #0x10]
+ str r2, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldr r0, [r0, #0x14]
+ ldmeqia sp!, {lr}
+ bxeq lr
+ blx r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CDFE4: .word 0x04000600
+_020CDFE8: .word 0x021D37FC
+
+ arm_func_start MIi_FIFOCallback
+MIi_FIFOCallback: ; 0x020CDFEC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CE0A4 ; =0x021D37FC
+ ldr r4, [r0, #0xc]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, _020CE0A4 ; =0x021D37FC
+ cmp r4, #0x1d8
+ ldr r5, [r0, #0x8]
+ movcs r4, #0x1d8
+ ldr r2, [r0, #0xc]
+ add r1, r5, r4
+ subs r2, r2, r4
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x8]
+ bne _020CE078
+ ldr r0, [r0, #0x4]
+ ldr r1, _020CE0A8 ; =MIi_DMACallback
+ mov r2, #0x0
+ bl OSi_EnterDmaCallback
+ mov r0, #0x3bc00000
+ rsb r3, r0, #0x0
+ ldr r1, _020CE0A4 ; =0x021D37FC
+ ldr r2, _020CE0AC ; =0x04000400
+ ldr r0, [r1, #0x4]
+ mov r1, r5
+ orr r3, r3, r4, lsr #0x2
+ bl MIi_DmaSetParams
+ mov r0, #0x200000
+ bl OS_ResetRequestIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CE078:
+ ldr r3, _020CE0B0 ; =0x84400000
+ ldr r0, [r0, #0x4]
+ ldr r2, _020CE0AC ; =0x04000400
+ mov r1, r5
+ orr r3, r3, r4, lsr #0x2
+ bl MIi_DmaSetParams
+ mov r0, #0x200000
+ bl OS_ResetRequestIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CE0A4: .word 0x021D37FC
+_020CE0A8: .word MIi_DMACallback
+_020CE0AC: .word 0x04000400
+_020CE0B0: .word 0x84400000
+
+ arm_func_start MI_SendGXCommandAsync
+MI_SendGXCommandAsync: ; 0x020CE0B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ cmp r2, #0x0
+ bne _020CE0EC
+ cmp r3, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [sp, #0x10]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CE0EC:
+ ldr r0, _020CE1BC ; =0x021D37FC
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020CE0EC
+ ldr r5, _020CE1C0 ; =0x04000600
+_020CE100:
+ ldr r0, [r5, #0x0]
+ and r0, r0, #0x7000000
+ mov r0, r0, lsr #0x18
+ ands r0, r0, #0x2
+ beq _020CE100
+ ldr ip, _020CE1BC ; =0x021D37FC
+ ldr lr, [sp, #0x10]
+ str r3, [r12, #0x10]
+ mov r5, #0x1
+ mov r0, r4
+ mov r3, #0x0
+ str r5, [r12, #0x0]
+ str r4, [r12, #0x4]
+ str r1, [r12, #0x8]
+ str r2, [r12, #0xc]
+ str lr, [r12, #0x14]
+ bl MIi_CheckDma0SourceAddress
+ mov r0, r4
+ bl MI_WaitDma
+ bl OS_DisableInterrupts
+ ldr r1, _020CE1C0 ; =0x04000600
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ ldr r1, _020CE1BC ; =0x021D37FC
+ and r0, r0, #0xc0000000
+ mov r2, r0, lsr #0x1e
+ mov r0, #0x200000
+ str r2, [r1, #0x18]
+ bl OS_GetIrqFunction
+ ldr r1, _020CE1BC ; =0x021D37FC
+ ldr r2, _020CE1C0 ; =0x04000600
+ str r0, [r1, #0x1c]
+ ldr r0, [r2, #0x0]
+ ldr r1, _020CE1C4 ; =MIi_FIFOCallback
+ bic r0, r0, #0xc0000000
+ orr r3, r0, #0x40000000
+ mov r0, #0x200000
+ str r3, [r2, #0x0]
+ bl OS_SetIrqFunction
+ mov r0, #0x200000
+ bl OS_EnableIrqMask
+ bl MIi_FIFOCallback
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CE1BC: .word 0x021D37FC
+_020CE1C0: .word 0x04000600
+_020CE1C4: .word MIi_FIFOCallback
+
+ arm_func_start MIi_CpuClear16
+MIi_CpuClear16: ; 0x020CE1C8
+ mov r3, #0x0
+_020CE1CC:
+ cmp r3, r2
+ strlth r0, [r1, r3]
+ addlt r3, r3, #0x2
+ blt _020CE1CC
+ bx lr
+
+ arm_func_start MIi_CpuCopy16
+MIi_CpuCopy16: ; 0x020CE1E0
+ mov r12, #0x0
+_020CE1E4:
+ cmp r12, r2
+ ldrlth r3, [r0, r12]
+ strlth r3, [r1, r12]
+ addlt r12, r12, #0x2
+ blt _020CE1E4
+ bx lr
+
+ arm_func_start MIi_CpuClear32
+MIi_CpuClear32: ; 0x020CE1FC
+ add r12, r1, r2
+_020CE200:
+ cmp r1, r12
+ stmltia r1!, {r0}
+ blt _020CE200
+ bx lr
+
+ arm_func_start MIi_CpuCopy32
+MIi_CpuCopy32: ; 0x020CE210
+ add r12, r1, r2
+_020CE214:
+ cmp r1, r12
+ ldmltia r0!, {r2}
+ stmltia r1!, {r2}
+ blt _020CE214
+ bx lr
+
+ arm_func_start MIi_CpuSend32
+MIi_CpuSend32: ; 0x020CE228
+ add r12, r0, r2
+_020CE22C:
+ cmp r0, r12
+ ldmltia r0!, {r2}
+ strlt r2, [r1, #0x0]
+ blt _020CE22C
+ bx lr
+
+ arm_func_start MIi_CpuClearFast
+MIi_CpuClearFast: ; 0x020CE240
+ stmdb sp!, {r4-r9}
+ add r9, r1, r2
+ mov r12, r2, lsr #0x5
+ add r12, r1, r12, lsl #0x5
+ mov r2, r0
+ mov r3, r2
+ mov r4, r2
+ mov r5, r2
+ mov r6, r2
+ mov r7, r2
+ mov r8, r2
+_020CE26C:
+ cmp r1, r12
+ stmltia r1!, {r0,r2-r8}
+ blt _020CE26C
+_020CE278:
+ cmp r1, r9
+ stmltia r1!, {r0}
+ blt _020CE278
+ ldmia sp!, {r4-r9}
+ bx lr
+
+ arm_func_start MIi_CpuCopyFast
+MIi_CpuCopyFast: ; 0x020CE28C
+ stmdb sp!, {r4-r10}
+ add r10, r1, r2
+ mov r12, r2, lsr #0x5
+ add r12, r1, r12, lsl #0x5
+_020CE29C:
+ cmp r1, r12
+ ldmltia r0!, {r2-r9}
+ stmltia r1!, {r2-r9}
+ blt _020CE29C
+_020CE2AC:
+ cmp r1, r10
+ ldmltia r0!, {r2}
+ stmltia r1!, {r2}
+ blt _020CE2AC
+ ldmia sp!, {r4-r10}
+ bx lr
+
+ arm_func_start FUN_020CE2C4
+FUN_020CE2C4:
+ ldmia r0!, {r2, r3, ip}
+ stmia r1!, {r2, r3, ip}
+ ldmia r0!, {r2, r3, ip}
+ stmia r1!, {r2, r3, ip}
+ ldmia r0!, {r2, r3}
+ stmia r1!, {r2, r3}
+ bx lr
+
+ arm_func_start MI_Copy36B
+MI_Copy36B: ; 0x020CE2E0
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ bx lr
+
+ arm_func_start MI_Copy48B
+MI_Copy48B: ; 0x020CE2FC
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ bx lr
+
+ arm_func_start MI_Copy64B
+MI_Copy64B: ; 0x020CE320
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1!, {r2-r3,r12}
+ ldmia r0, {r0,r2-r3,r12}
+ stmia r1!, {r0,r2-r3,r12}
+ bx lr
+
+ arm_func_start MI_CpuFill8
+MI_CpuFill8: ; 0x020CE34C
+ cmp r2, #0x0
+ bxeq lr
+ tst r0, #0x1
+ beq _020CE378
+ ldrh r12, [r0, #-0x1]
+ and r12, r12, #0xff
+ orr r3, r12, r1, lsl #0x8
+ strh r3, [r0, #-0x1]
+ add r0, r0, #0x1
+ subs r2, r2, #0x1
+ bxeq lr
+_020CE378:
+ cmp r2, #0x2
+ blo _020CE3C0
+ orr r1, r1, r1, lsl #0x8
+ tst r0, #0x2
+ beq _020CE398
+ strh r1, [r0], #0x2
+ subs r2, r2, #0x2
+ bxeq lr
+_020CE398:
+ orr r1, r1, r1, lsl #0x10
+ bics r3, r2, #0x3
+ beq _020CE3B8
+ sub r2, r2, r3
+ add r12, r3, r0
+_020CE3AC:
+ str r1, [r0], #0x4
+ cmp r0, r12
+ blo _020CE3AC
+_020CE3B8:
+ tst r2, #0x2
+ strneh r1, [r0], #0x2
+_020CE3C0:
+ tst r2, #0x1
+ bxeq lr
+ ldrh r3, [r0, #0x0]
+ and r3, r3, #0xff00
+ and r1, r1, #0xff
+ orr r1, r1, r3
+ strh r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start MI_CpuCopy8
+MI_CpuCopy8:
+ cmp r2, #0x0
+ bxeq lr
+ tst r1, #0x1
+ beq _020CE420
+ ldrh r12, [r1, #-0x1]
+ and r12, r12, #0xff
+ tst r0, #0x1
+ ldrneh r3, [r0, #-0x1]
+ movne r3, r3, lsr #0x8
+ ldreqh r3, [r0, #0x0]
+ orr r3, r12, r3, lsl #0x8
+ strh r3, [r1, #-0x1]
+ add r0, r0, #0x1
+ add r1, r1, #0x1
+ subs r2, r2, #0x1
+ bxeq lr
+_020CE420:
+ eor r12, r1, r0
+ tst r12, #0x1
+ beq _020CE474
+ bic r0, r0, #0x1
+ ldrh r12, [r0], #0x2
+ mov r3, r12, lsr #0x8
+ subs r2, r2, #0x2
+ blo _020CE458
+_020CE440:
+ ldrh r12, [r0], #0x2
+ orr r12, r3, r12, lsl #0x8
+ strh r12, [r1], #0x2
+ mov r3, r12, lsr #0x10
+ subs r2, r2, #0x2
+ bhs _020CE440
+_020CE458:
+ tst r2, #0x1
+ bxeq lr
+ ldrh r12, [r1, #0x0]
+ and r12, r12, #0xff00
+ orr r12, r12, r3
+ strh r12, [r1, #0x0]
+ bx lr
+_020CE474:
+ tst r12, #0x2
+ beq _020CE4A0
+ bics r3, r2, #0x1
+ beq _020CE4EC
+ sub r2, r2, r3
+ add r12, r3, r1
+_020CE48C:
+ ldrh r3, [r0], #0x2
+ strh r3, [r1], #0x2
+ cmp r1, r12
+ blo _020CE48C
+ b _020CE4EC
+_020CE4A0:
+ cmp r2, #0x2
+ blo _020CE4EC
+ tst r1, #0x2
+ beq _020CE4C0
+ ldrh r3, [r0], #0x2
+ strh r3, [r1], #0x2
+ subs r2, r2, #0x2
+ bxeq lr
+_020CE4C0:
+ bics r3, r2, #0x3
+ beq _020CE4E0
+ sub r2, r2, r3
+ add r12, r3, r1
+_020CE4D0:
+ ldr r3, [r0], #0x4
+ str r3, [r1], #0x4
+ cmp r1, r12
+ blo _020CE4D0
+_020CE4E0:
+ tst r2, #0x2
+ ldrneh r3, [r0], #0x2
+ strneh r3, [r1], #0x2
+_020CE4EC:
+ tst r2, #0x1
+ bxeq lr
+ ldrh r2, [r1, #0x0]
+ ldrh r0, [r0, #0x0]
+ and r2, r2, #0xff00
+ and r0, r0, #0xff
+ orr r0, r2, r0
+ strh r0, [r1, #0x0]
+ bx lr
+
+ thumb_func_start MI_Zero36B
+MI_Zero36B: ; 0x020CE510
+ mov r1, #0x0
+ mov r2, #0x0
+ mov r3, #0x0
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1-r3}
+ bx lr
+
+ arm_func_start MI_SwapWord
+MI_SwapWord: ; 0x020CE520
+ swp r0, r0, [r1]
+ bx lr
+
+ arm_func_start MI_UncompressLZ8
+MI_UncompressLZ8: ; 0x020CE528
+ stmdb sp!, {r4-r6,lr}
+ ldr r5, [r0], #0x4
+ mov r2, r5, lsr #0x8
+_020CE534:
+ cmp r2, #0x0
+ ble _020CE5B4
+ ldrb lr, [r0], #0x1
+ mov r4, #0x8
+_020CE544:
+ subs r4, r4, #0x1
+ blt _020CE534
+ tst lr, #0x80
+ bne _020CE568
+ ldrb r6, [r0], #0x1
+ .word 0xE1416096
+ add r1, r1, #0x1
+ sub r2, r2, #0x1
+ b _020CE5A4
+_020CE568:
+ ldrb r5, [r0, #0x0]
+ mov r6, #0x3
+ add r3, r6, r5, asr #0x4
+ ldrb r6, [r0], #0x1
+ and r5, r6, #0xf
+ mov r12, r5, lsl #0x8
+ ldrb r6, [r0], #0x1
+ orr r5, r6, r12
+ add r12, r5, #0x1
+ sub r2, r2, r3
+_020CE590:
+ ldrb r5, [r1, -r12]
+ .word 0xE1415095
+ add r1, r1, #0x1
+ subs r3, r3, #0x1
+ bgt _020CE590
+_020CE5A4:
+ cmp r2, #0x0
+ movgt lr, lr, lsl #0x1
+ bgt _020CE544
+ b _020CE534
+_020CE5B4:
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MIi_CardDmaCopy32
+MIi_CardDmaCopy32: ; 0x020CE5BC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r6, r0
+ mov r7, r3
+ mvn r1, #0x0
+ mov r4, r2
+ bl MIi_CheckAnotherAutoDMA
+ mov r0, r6
+ mov r1, r5
+ mov r2, r7
+ mov r3, #0x1000000
+ bl MIi_CheckDma0SourceAddress
+_020CE5F0:
+ cmp r7, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7, lr}
+ bxeq lr
+ mov r0, #0x3
+ mul r1, r6, r0
+ ldr r0, _020CE640
+ add r1, r1, #0x2
+ add r1, r0, r1, lsl #0x2
+_020CE614:
+ ldr r0, [r1]
+ ands r0, r0, #0x80000000
+ bne _020CE614
+ ldr r3, _020CE644
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MIi_DmaSetParams
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7, lr}
+ bx lr
+_020CE640: .word 0x040000B0
+_020CE644: .word 0xAf000001
+
+ arm_func_start MI_Init
+MI_Init: ; 0x020CE648
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x3
+ bl MI_SetWramBank
+ mov r0, #0x0
+ bl MI_StopDma
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+
diff --git a/arm9/asm/OS_arm9.s b/arm9/asm/OS_arm9.s
new file mode 100644
index 00000000..1323e376
--- /dev/null
+++ b/arm9/asm/OS_arm9.s
@@ -0,0 +1,4759 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .extern isInitialized
+
+ .section .dtcm
+ .balign 16, 0
+ .global OS_IRQTable
+OS_IRQTable: ; 027E0000 ;10b6a0
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OSi_IrqTimer0
+ .word OSi_IrqTimer1
+ .word OSi_IrqTimer2
+ .word OSi_IrqTimer3
+ .word OS_IrqDummy
+ .word OSi_IrqDma0
+ .word OSi_IrqDma1
+ .word OSi_IrqDma2
+ .word OSi_IrqDma3
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .balign 16, 0
+
+ .global OSi_IrqThreadQueue
+OSi_IrqThreadQueue: ; 027E0060
+
+ .section .text
+
+ arm_func_start OS_WaitIrq
+OS_WaitIrq:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ mov r4, r1
+ bl OS_DisableInterrupts
+ cmp r5, #0x0
+ beq _020C9C3C
+ ldr r1, _020C9C80 ; =0x027E0000
+ mvn r2, r4
+ add r1, r1, #0x3000
+ ldr r3, [r1, #0xff8]
+ and r2, r3, r2
+ str r2, [r1, #0xff8]
+_020C9C3C:
+ bl OS_RestoreInterrupts
+ ldr r1, _020C9C80 ; =0x027E0000
+ add r0, r1, #0x3000
+ ldr r0, [r0, #0xff8]
+ ands r0, r4, r0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldr r0, _020C9C84 ; =0x00003FF8
+ add r6, r1, r0
+ ldr r5, _020C9C88 ; =0x027E0060
+_020C9C64:
+ mov r0, r5
+ bl OS_SleepThread
+ ldr r0, [r6, #0x0]
+ ands r0, r4, r0
+ beq _020C9C64
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9C80: .word 0x027E0000
+_020C9C84: .word 0x00003FF8
+_020C9C88: .word 0x027E0060
+
+ arm_func_start OSi_IrqTimer3
+OSi_IrqTimer3: ; 0x020C9C8C
+ ldr ip, _020C9C98 ; =OSi_IrqCallback
+ mov r0, #0x7
+ bx r12
+ .balign 4
+_020C9C98: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer2
+OSi_IrqTimer2: ; 0x020C9C9C
+ ldr ip, _020C9CA8 ; =OSi_IrqCallback
+ mov r0, #0x6
+ bx r12
+ .balign 4
+_020C9CA8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer1
+OSi_IrqTimer1: ; 0x020C9CAC
+ ldr ip, _020C9CB8 ; =OSi_IrqCallback
+ mov r0, #0x5
+ bx r12
+ .balign 4
+_020C9CB8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer0
+OSi_IrqTimer0: ; 0x020C9CBC
+ ldr ip, _020C9CC8 ; =OSi_IrqCallback
+ mov r0, #0x4
+ bx r12
+ .balign 4
+_020C9CC8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma3
+OSi_IrqDma3: ; 0x020C9CCC
+ ldr ip, _020C9CD8 ; =OSi_IrqCallback
+ mov r0, #0x3
+ bx r12
+ .balign 4
+_020C9CD8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma2
+OSi_IrqDma2: ; 0x020C9CDC
+ ldr ip, _020C9CE8 ; =OSi_IrqCallback
+ mov r0, #0x2
+ bx r12
+ .balign 4
+_020C9CE8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma1
+OSi_IrqDma1: ; 0x020C9CEC
+ ldr ip, _020C9CF8 ; =OSi_IrqCallback
+ mov r0, #0x1
+ bx r12
+ .balign 4
+_020C9CF8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma0
+OSi_IrqDma0: ; 0x020C9CFC
+ ldr ip, _020C9D08 ; =OSi_IrqCallback
+ mov r0, #0x0
+ bx r12
+ .balign 4
+_020C9D08: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqCallback
+OSi_IrqCallback: ; 0x020C9D0C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r1, #0xc
+ mul r4, r0, r1
+ ldr r2, _020C9D94 ; =OSi_IrqCallbackInfo
+ ldr r3, _020C9D98 ; =0x02106818
+ mov r0, r0, lsl #0x1
+ ldr r1, [r2, r4]
+ ldrh r3, [r3, r0]
+ mov r5, #0x1
+ mov r0, #0x0
+ str r0, [r2, r4]
+ cmp r1, #0x0
+ mov r5, r5, lsl r3
+ beq _020C9D54
+ ldr r0, _020C9D9C ; =0x021D3424
+ ldr r0, [r0, r4]
+ blx r1
+_020C9D54:
+ ldr r0, _020C9DA0 ; =0x027E0000
+ ldr r1, _020C9DA4 ; =0x021D3420
+ add r0, r0, #0x3000
+ ldr r2, [r0, #0xff8]
+ orr r2, r2, r5
+ str r2, [r0, #0xff8]
+ ldr r0, [r1, r4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r5
+ bl OS_DisableIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C9D94: .word OSi_IrqCallbackInfo
+_020C9D98: .word OSi_IrqCallbackInfoIndex
+_020C9D9C: .word OSi_IrqCallbackInfo + 8
+_020C9DA0: .word SDK_AUTOLOAD_DTCM_START
+_020C9DA4: .word OSi_IrqCallbackInfo + 4
+
+ arm_func_start OS_IrqDummy
+OS_IrqDummy: ; 0x020C9DA8
+ bx lr
+
+ arm_func_start OS_SetIrqStackChecker
+OS_SetIrqStackChecker: ; 0x020C9DAC
+ ldr ip, _020C9DD0 ; =0x027E0000
+ ldr r3, _020C9DD4 ; =0xFDDB597D
+ add r0, r12, #0x3000
+ ldr r2, _020C9DD8 ; =0x7BF9DD5B
+ ldr r1, _020C9DDC ; =0x00000400
+ str r3, [r0, #0xf7c]
+ add r0, r12, #0x3f80
+ str r2, [r0, -r1]
+ bx lr
+ .balign 4
+_020C9DD0: .word 0x027E0000
+_020C9DD4: .word 0xFDDB597D
+_020C9DD8: .word 0x7BF9DD5B
+_020C9DDC: .word 0x00000400
+
+ arm_func_start OS_ResetRequestIrqMask
+OS_ResetRequestIrqMask: ; 0x020C9DE0
+ ldr ip, _020C9E0C ; =0x04000208
+ mov r1, #0x0
+ ldrh r3, [r12, #0x0]
+ ldr r2, _020C9E10 ; =0x04000214
+ strh r1, [r12, #0x0]
+ ldr r1, [r2, #0x0]
+ str r0, [r2, #0x0]
+ ldrh r0, [r12, #0x0]
+ mov r0, r1
+ strh r3, [r12, #0x0]
+ bx lr
+ .balign 4
+_020C9E0C: .word 0x04000208
+_020C9E10: .word 0x04000214
+
+ arm_func_start OS_DisableIrqMask
+OS_DisableIrqMask: ; 0x020C9E14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, _020C9E54 ; =0x04000208
+ mov r3, #0x0
+ ldrh r12, [lr, #0x0]
+ ldr r2, _020C9E58 ; =0x04000210
+ mvn r1, r0
+ strh r3, [lr, #0x0]
+ ldr r0, [r2, #0x0]
+ and r1, r0, r1
+ str r1, [r2, #0x0]
+ ldrh r1, [lr, #0x0]
+ strh r12, [lr, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C9E54: .word 0x04000208
+_020C9E58: .word 0x04000210
+
+ arm_func_start OS_EnableIrqMask
+OS_EnableIrqMask: ; 0x020C9E5C
+ ldr ip, _020C9E8C ; =0x04000208
+ mov r1, #0x0
+ ldrh r3, [r12, #0x0]
+ ldr r2, _020C9E90 ; =0x04000210
+ strh r1, [r12, #0x0]
+ ldr r1, [r2, #0x0]
+ orr r0, r1, r0
+ str r0, [r2, #0x0]
+ ldrh r0, [r12, #0x0]
+ mov r0, r1
+ strh r3, [r12, #0x0]
+ bx lr
+ .balign 4
+_020C9E8C: .word 0x04000208
+_020C9E90: .word 0x04000210
+
+ arm_func_start OS_SetIrqMask
+OS_SetIrqMask: ; 0x020C9E94
+ ldr ip, _020C9EC0 ; =0x04000208
+ mov r1, #0x0
+ ldrh r3, [r12, #0x0]
+ ldr r2, _020C9EC4 ; =0x04000210
+ strh r1, [r12, #0x0]
+ ldr r1, [r2, #0x0]
+ str r0, [r2, #0x0]
+ ldrh r0, [r12, #0x0]
+ mov r0, r1
+ strh r3, [r12, #0x0]
+ bx lr
+ .balign 4
+_020C9EC0: .word 0x04000208
+_020C9EC4: .word 0x04000210
+
+ arm_func_start OSi_EnterTimerCallback
+OSi_EnterTimerCallback: ; 0x020C9EC8
+ stmdb sp!, {r4,lr}
+ mov r3, #0xc
+ mul r4, r0, r3
+ ldr ip, _020C9F08 ; =0x021D344C
+ add r0, r0, #0x3
+ mov r3, #0x1
+ mov r0, r3, lsl r0
+ ldr r3, _020C9F0C ; =0x021D3454
+ str r1, [r12, r4]
+ str r2, [r3, r4]
+ bl OS_EnableIrqMask
+ ldr r0, _020C9F10 ; =0x021D3450
+ mov r1, #0x1
+ str r1, [r0, r4]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C9F08: .word OSi_IrqCallbackInfo+0x30
+_020C9F0C: .word OSi_IrqCallbackInfo+0x38
+_020C9F10: .word OSi_IrqCallbackInfo+0x34
+
+ arm_func_start OSi_EnterDmaCallback
+OSi_EnterDmaCallback: ; 0x020C9F14
+ stmdb sp!, {r4-r6,lr}
+ mov r3, #0xc
+ mul r6, r0, r3
+ ldr ip, _020C9F54 ; =OSi_IrqCallbackInfo
+ add r4, r0, #0x8
+ mov r5, #0x1
+ mov r0, r5, lsl r4
+ ldr r3, _020C9F58 ; =0x021D3424
+ str r1, [r12, r6]
+ str r2, [r3, r6]
+ bl OS_EnableIrqMask
+ and r1, r0, r5, lsl r4
+ ldr r0, _020C9F5C ; =0x021D3420
+ str r1, [r0, r6]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020C9F54: .word OSi_IrqCallbackInfo
+_020C9F58: .word OSi_IrqCallbackInfo + 8
+_020C9F5C: .word OSi_IrqCallbackInfo + 4
+
+ arm_func_start OS_GetIrqFunction
+OS_GetIrqFunction: ; 0x020C9F60
+ ldr r2, _020C9FE4 ; =0x027E0000
+ mov r3, #0x0
+_020C9F68:
+ ands r1, r0, #0x1
+ beq _020C9FC8
+ cmp r3, #0x8
+ blt _020C9F98
+ cmp r3, #0xb
+ bgt _020C9F98
+ sub r1, r3, #0x8
+ mov r0, #0xc
+ mul r2, r1, r0
+ ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo
+ ldr r0, [r0, r2]
+ bx lr
+_020C9F98:
+ cmp r3, #0x3
+ blt _020C9FC0
+ cmp r3, #0x6
+ bgt _020C9FC0
+ add r1, r3, #0x1
+ mov r0, #0xc
+ mul r2, r1, r0
+ ldr r0, _020C9FE8 ; =OSi_IrqCallbackInfo
+ ldr r0, [r0, r2]
+ bx lr
+_020C9FC0:
+ ldr r0, [r2, #0x0]
+ bx lr
+_020C9FC8:
+ add r3, r3, #0x1
+ cmp r3, #0x16
+ mov r0, r0, lsr #0x1
+ add r2, r2, #0x4
+ blt _020C9F68
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020C9FE4: .word 0x027E0000
+_020C9FE8: .word OSi_IrqCallbackInfo
+
+ arm_func_start OS_SetIrqFunction
+OS_SetIrqFunction: ; 0x020C9FEC
+ stmdb sp!, {r4-r8,lr}
+ mov r8, #0x0
+ ldr lr, _020CA074 ; =0x027E0000
+ ldr r5, _020CA078 ; =OSi_IrqCallbackInfo
+ mov r6, r8
+ mov r12, r8
+ mov r3, #0x1
+ mov r2, #0xc
+_020CA00C:
+ ands r4, r0, #0x1
+ beq _020CA05C
+ mov r7, r6
+ cmp r8, #0x8
+ blt _020CA030
+ cmp r8, #0xb
+ suble r4, r8, #0x8
+ mlale r7, r4, r2, r5
+ ble _020CA04C
+_020CA030:
+ cmp r8, #0x3
+ blt _020CA048
+ cmp r8, #0x6
+ addle r4, r8, #0x1
+ mlale r7, r4, r2, r5
+ ble _020CA04C
+_020CA048:
+ str r1, [lr, r8, lsl #0x2]
+_020CA04C:
+ cmp r7, #0x0
+ strne r1, [r7, #0x0]
+ strne r12, [r7, #0x8]
+ strne r3, [r7, #0x4]
+_020CA05C:
+ add r8, r8, #0x1
+ cmp r8, #0x16
+ mov r0, r0, lsr #0x1
+ blt _020CA00C
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020CA074: .word 0x027E0000
+_020CA078: .word OSi_IrqCallbackInfo
+
+ arm_func_start OS_InitIrqTable
+OS_InitIrqTable: ; 0x020CA07C
+ ldr r0, _020CA090 ; =0x027E0060
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CA090: .word 0x027E0060
+
+ arm_func_start OS_UnlockCartridge
+OS_UnlockCartridge: ; 0x020CA094
+ ldr r1, _020CA09C ; =OS_UnlockCartridge2
+ bx r1
+ .balign 4
+_020CA09C: .word OS_UnlockCartridge2
+
+ arm_func_start OS_GetLockID
+OS_GetLockID: ; 0x020CA0A0
+ ldr r3, _020CA0F0 ; =0x027FFFB0
+ ldr r1, [r3, #0x0]
+ clz r2, r1
+ cmp r2, #0x20
+ movne r0, #0x40
+ bne _020CA0D4
+ add r3, r3, #0x4
+ ldr r1, [r3, #0x0]
+ clz r2, r1
+ cmp r2, #0x20
+ ldr r0, _020CA0F4 ; =0xFFFFFFFD
+ bxeq lr
+ mov r0, #0x60
+_020CA0D4:
+ add r0, r0, r2
+ mov r1, #0x80000000
+ mov r1, r1, lsr r2
+ ldr r2, [r3, #0x0]
+ bic r2, r2, r1
+ str r2, [r3, #0x0]
+ bx lr
+ .balign 4
+_020CA0F0: .word 0x027FFFB0
+_020CA0F4: .word 0xFFFFFFFD
+
+ arm_func_start OS_ReleaseLockID
+OS_ReleaseLockID: ; 0x020CA0F8
+ ldr r3, _020CA124 ; =0x027FFFB0
+ cmp r0, #0x60
+ addpl r3, r3, #0x4
+ subpl r0, r0, #0x60
+ submi r0, r0, #0x40
+ mov r1, #0x80000000
+ mov r1, r1, lsr r0
+ ldr r2, [r3, #0x0]
+ orr r2, r2, r1
+ str r2, [r3, #0x0]
+ bx lr
+ .balign 4
+_020CA124: .word 0x027FFFB0
+
+ arm_func_start OS_ReadOwnerOfLockWord
+OS_ReadOwnerOfLockWord: ; 0x020CA128
+ ldrh r0, [r0, #0x4]
+ bx lr
+
+ arm_func_start OSi_FreeCardBus
+OSi_FreeCardBus: ; 0x020CA130
+ ldr r1, _020CA144 ; =0x04000204
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x800
+ strh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CA144: .word 0x04000204
+
+ arm_func_start OSi_AllocateCardBus
+OSi_AllocateCardBus: ; 0x020CA148
+ ldr r1, _020CA15C ; =0x04000204
+ ldrh r0, [r1, #0x0]
+ bic r0, r0, #0x800
+ strh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CA15C: .word 0x04000204
+
+ arm_func_start OS_UnlockCard
+OS_UnlockCard: ; 0x020CA160
+ ldr ip, _020CA170 ; =OS_UnlockByWord
+ ldr r1, _020CA174 ; =0x027FFFE0
+ ldr r2, _020CA178 ; =OSi_FreeCardBus
+ bx r12
+ .balign 4
+_020CA170: .word OS_UnlockByWord
+_020CA174: .word 0x027FFFE0
+_020CA178: .word OSi_FreeCardBus
+
+ arm_func_start OS_TryLockCard
+OS_TryLockCard: ; 0x020CA17C
+ ldr ip, _020CA18C ; =OS_TryLockByWord
+ ldr r1, _020CA190 ; =0x027FFFE0
+ ldr r2, _020CA194 ; =OSi_AllocateCardBus
+ bx r12
+ .balign 4
+_020CA18C: .word OS_TryLockByWord
+_020CA190: .word 0x027FFFE0
+_020CA194: .word OSi_AllocateCardBus
+
+ arm_func_start OSi_FreeCartridgeBus
+OSi_FreeCartridgeBus: ; 0x020CA198
+ ldr r1, _020CA1AC ; =0x04000204
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x80
+ strh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CA1AC: .word 0x04000204
+
+ arm_func_start OSi_AllocateCartridgeBus
+OSi_AllocateCartridgeBus: ; 0x020CA1B0
+ ldr r1, _020CA1C4 ; =0x04000204
+ ldrh r0, [r1, #0x0]
+ bic r0, r0, #0x80
+ strh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CA1C4: .word 0x04000204
+
+ arm_func_start OS_TryLockCartridge
+OS_TryLockCartridge: ; 0x020CA1C8
+ ldr ip, _020CA1DC ; =OSi_DoTryLockByWord
+ ldr r1, _020CA1E0 ; =0x027FFFE8
+ ldr r2, _020CA1E4 ; =OSi_AllocateCartridgeBus
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020CA1DC: .word OSi_DoTryLockByWord
+_020CA1E0: .word 0x027FFFE8
+_020CA1E4: .word OSi_AllocateCartridgeBus
+
+ arm_func_start OS_UnlockCartridge2
+OS_UnlockCartridge2: ; 0x020CA1E8
+ ldr ip, _020CA1FC ; =FUN_020CA2B8
+ ldr r1, _020CA200 ; =0x027FFFE8
+ ldr r2, _020CA204 ; =OSi_FreeCartridgeBus
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020CA1FC: .word FUN_020CA2B8
+_020CA200: .word 0x027FFFE8
+_020CA204: .word OSi_FreeCartridgeBus
+
+ arm_func_start OS_LockCartridge
+OS_LockCartridge: ; 0x020CA208
+ ldr ip, _020CA21C ; =FUN_020CA358
+ ldr r1, _020CA220 ; =0x027FFFE8
+ ldr r2, _020CA224 ; =OSi_AllocateCartridgeBus
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020CA21C: .word FUN_020CA358
+_020CA220: .word 0x027FFFE8
+_020CA224: .word OSi_AllocateCartridgeBus
+
+ arm_func_start OSi_DoTryLockByWord
+OSi_DoTryLockByWord:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ movs r6, r3
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ beq _020CA250
+ bl OS_DisableInterrupts_IrqAndFiq
+ mov r5, r0
+ b _020CA258
+_020CA250:
+ bl OS_DisableInterrupts
+ mov r5, r0
+_020CA258:
+ mov r0, r9
+ mov r1, r8
+ bl MI_SwapWord
+ movs r4, r0
+ bne _020CA27C
+ cmp r7, #0x0
+ beq _020CA278
+ blx r7
+_020CA278:
+ strh r9, [r8, #0x4]
+_020CA27C:
+ cmp r6, #0x0
+ beq _020CA290
+ mov r0, r5
+ bl OS_RestoreInterrupts_IrqAndFiq
+ b _020CA298
+_020CA290:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020CA298:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start OS_UnlockByWord
+OS_UnlockByWord: ; 0x020CA2A8
+ ldr ip, _020CA2B4 ; =FUN_020CA2B8
+ mov r3, #0x0
+ bx r12
+ .balign 4
+_020CA2B4: .word FUN_020CA2B8
+
+ arm_func_start FUN_020CA2B8
+FUN_020CA2B8: ; 0x020CA2B8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r1
+ ldrh r1, [r7, #0x4]
+ mov r6, r2
+ mov r5, r3
+ cmp r0, r1
+ addne sp, sp, #0x4
+ mvnne r0, #0x1
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r5, #0x0
+ beq _020CA2F8
+ bl OS_DisableInterrupts_IrqAndFiq
+ mov r4, r0
+ b _020CA300
+_020CA2F8:
+ bl OS_DisableInterrupts
+ mov r4, r0
+_020CA300:
+ mov r0, #0x0
+ strh r0, [r7, #0x4]
+ cmp r6, #0x0
+ beq _020CA314
+ blx r6
+_020CA314:
+ mov r0, #0x0
+ str r0, [r7, #0x0]
+ cmp r5, #0x0
+ beq _020CA330
+ mov r0, r4
+ bl OS_RestoreInterrupts_IrqAndFiq
+ b _020CA338
+_020CA330:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020CA338:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start OS_TryLockByWord
+OS_TryLockByWord: ; 0x020CA348
+ ldr ip, _020CA354 ; =FUN_020CA358
+ mov r3, #0x0
+ bx r12
+ .balign 4
+_020CA354: .word FUN_020CA358
+
+ arm_func_start FUN_020CA358
+FUN_020CA358: ; 0x020CA358
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl OSi_DoTryLockByWord
+ cmp r0, #0x0
+ ldmleia sp!, {r4-r8,lr}
+ bxle lr
+ mov r4, #0x400
+_020CA380:
+ mov r0, r4
+ blx SVC_WaitByLoop
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ bl OSi_DoTryLockByWord
+ cmp r0, #0x0
+ bgt _020CA380
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start OS_InitLock
+OS_InitLock: ; 0x020CA3AC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CA484 ; =isInitialized
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r2, #0x1
+ ldr r1, _020CA488 ; =0x027FFFF0
+ str r2, [r0, #0x0]
+ mov r2, #0x0
+ mov r0, #0x7e
+ str r2, [r1, #0x0]
+ bl OS_TryLockByWord
+ ldr r5, _020CA488 ; =0x027FFFF0
+ ldrh r0, [r5, #0x6]
+ cmp r0, #0x0
+ beq _020CA410
+ mov r4, #0x400
+_020CA3FC:
+ mov r0, r4
+ blx SVC_WaitByLoop
+ ldrh r0, [r5, #0x6]
+ cmp r0, #0x0
+ bne _020CA3FC
+_020CA410:
+ ldr r2, _020CA48C ; =0x027FFFB0
+ mvn r12, #0x0
+ mov r0, #0x10000
+ ldr r3, _020CA490 ; =0x027FFFB4
+ ldr r1, _020CA494 ; =0x027FFFC0
+ str r12, [r2, #0x0]
+ rsb r12, r0, #0x0
+ mov r0, #0x0
+ mov r2, #0x28
+ str r12, [r3, #0x0]
+ bl MIi_CpuClear32
+ ldr ip, _020CA498 ; =0x04000204
+ ldr r1, _020CA488 ; =0x027FFFF0
+ ldrh r3, [r12, #0x0]
+ mov r0, #0x7e
+ mov r2, #0x0
+ orr r3, r3, #0x800
+ strh r3, [r12, #0x0]
+ ldrh r3, [r12, #0x0]
+ orr r3, r3, #0x80
+ strh r3, [r12, #0x0]
+ bl OS_UnlockByWord
+ ldr r1, _020CA488 ; =0x027FFFF0
+ mov r0, #0x7f
+ mov r2, #0x0
+ bl OS_TryLockByWord
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CA484: .word isInitialized
+_020CA488: .word 0x027FFFF0
+_020CA48C: .word 0x027FFFB0
+_020CA490: .word 0x027FFFB4
+_020CA494: .word 0x027FFFC0
+_020CA498: .word 0x04000204
+
+ arm_func_start OS_VSNPrintf
+OS_VSNPrintf: ; 0x020CA49C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x64
+ mov r9, r2
+ str r1, [sp, #0x54]
+ str r0, [sp, #0x5c]
+ str r0, [sp, #0x58]
+ ldrsb r0, [r9, #0x0]
+ str r1, [sp, #0x0]
+ mov r11, r3
+ cmp r0, #0x0
+ beq _020CAD18
+ mov r0, #0xa
+ str r0, [sp, #0xc]
+ mov r0, #0x0
+ str r0, [sp, #0x4]
+ mov r0, #0x20
+ str r0, [sp, #0x1c]
+ mov r0, #0x30
+ str r0, [sp, #0x20]
+ mvn r0, #0x0
+ str r0, [sp, #0x8]
+ mov r0, #0x57
+ str r0, [sp, #0x10]
+ mov r0, #0x8
+ str r0, [sp, #0x14]
+ mov r0, #0x37
+ str r0, [sp, #0x18]
+ mov r0, #0x10
+ str r0, [sp, #0x24]
+ mov r0, #0x1
+ str r0, [sp, #0x28]
+ mov r0, #0x2b
+ str r0, [sp, #0x34]
+ mov r0, #0x2d
+ str r0, [sp, #0x30]
+ mov r0, #0x2
+ str r0, [sp, #0x2c]
+_020CA530:
+ ldrsb r1, [r9, #0x0]
+ and r0, r1, #0xff
+ eor r0, r0, #0x20
+ sub r0, r0, #0xa1
+ cmp r0, #0x3c
+ bhs _020CA56C
+ add r0, sp, #0x54
+ bl string_put_char
+ ldrsb r1, [r9, #0x1]!
+ cmp r1, #0x0
+ beq _020CAD0C
+ add r0, sp, #0x54
+ add r9, r9, #0x1
+ bl string_put_char
+ b _020CAD0C
+_020CA56C:
+ cmp r1, #0x25
+ beq _020CA584
+ add r0, sp, #0x54
+ add r9, r9, #0x1
+ bl string_put_char
+ b _020CAD0C
+_020CA584:
+ ldr r6, [sp, #0x4]
+ ldr r5, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ ldr r0, [sp, #0x10]
+ mov r10, r6
+ mov r3, r9
+_020CA59C:
+ ldrsb r4, [r9, #0x1]!
+ cmp r4, #0x20
+ bgt _020CA5B4
+ cmp r4, #0x20
+ beq _020CA5F4
+ b _020CA60C
+_020CA5B4:
+ cmp r4, #0x30
+ bgt _020CA60C
+ cmp r4, #0x2b
+ blt _020CA60C
+ cmp r4, #0x2b
+ beq _020CA5E0
+ cmp r4, #0x2d
+ beq _020CA5FC
+ cmp r4, #0x30
+ beq _020CA604
+ b _020CA60C
+_020CA5E0:
+ ldrsb r1, [r9, #-0x1]
+ cmp r1, #0x20
+ bne _020CA60C
+ orr r6, r6, #0x2
+ b _020CA59C
+_020CA5F4:
+ orr r6, r6, #0x1
+ b _020CA59C
+_020CA5FC:
+ orr r6, r6, #0x8
+ b _020CA59C
+_020CA604:
+ orr r6, r6, #0x10
+ b _020CA59C
+_020CA60C:
+ cmp r4, #0x2a
+ bne _020CA640
+ add r11, r11, #0x4
+ ldr r10, [r11, #-0x4]
+ add r9, r9, #0x1
+ cmp r10, #0x0
+ rsblt r10, r10, #0x0
+ orrlt r6, r6, #0x8
+ b _020CA654
+_020CA630:
+ ldrsb r4, [r9], #0x1
+ mov r1, #0xa
+ mla r1, r10, r1, r4
+ sub r10, r1, #0x30
+_020CA640:
+ ldrsb r1, [r9, #0x0]
+ cmp r1, #0x30
+ blt _020CA654
+ cmp r1, #0x39
+ ble _020CA630
+_020CA654:
+ ldrsb r1, [r9, #0x0]
+ cmp r1, #0x2e
+ bne _020CA6AC
+ ldrsb r1, [r9, #0x1]!
+ ldr r5, [sp, #0x4]
+ cmp r1, #0x2a
+ bne _020CA698
+ add r11, r11, #0x4
+ ldr r5, [r11, #-0x4]
+ add r9, r9, #0x1
+ cmp r5, #0x0
+ ldrlt r5, [sp, #0x8]
+ b _020CA6AC
+_020CA688:
+ ldrsb r4, [r9], #0x1
+ mov r1, #0xa
+ mla r1, r5, r1, r4
+ sub r5, r1, #0x30
+_020CA698:
+ ldrsb r1, [r9, #0x0]
+ cmp r1, #0x30
+ blt _020CA6AC
+ cmp r1, #0x39
+ ble _020CA688
+_020CA6AC:
+ ldrsb r1, [r9, #0x0]
+ cmp r1, #0x68
+ beq _020CA6C4
+ cmp r1, #0x6c
+ beq _020CA6DC
+ b _020CA6F0
+_020CA6C4:
+ ldrsb r1, [r9, #0x1]!
+ cmp r1, #0x68
+ orrne r6, r6, #0x40
+ addeq r9, r9, #0x1
+ orreq r6, r6, #0x100
+ b _020CA6F0
+_020CA6DC:
+ ldrsb r1, [r9, #0x1]!
+ cmp r1, #0x6c
+ orrne r6, r6, #0x20
+ addeq r9, r9, #0x1
+ orreq r6, r6, #0x80
+_020CA6F0:
+ ldrsb r1, [r9, #0x0]
+ cmp r1, #0x69
+ bgt _020CA740
+ cmp r1, #0x63
+ blt _020CA720
+ cmp r1, #0x63
+ beq _020CA7B4
+ cmp r1, #0x64
+ beq _020CA96C
+ cmp r1, #0x69
+ beq _020CA96C
+ b _020CA950
+_020CA720:
+ cmp r1, #0x25
+ bgt _020CA734
+ cmp r1, #0x25
+ beq _020CA934
+ b _020CA950
+_020CA734:
+ cmp r1, #0x58
+ beq _020CA7A0
+ b _020CA950
+_020CA740:
+ cmp r1, #0x6e
+ bgt _020CA754
+ cmp r1, #0x6e
+ beq _020CA8DC
+ b _020CA950
+_020CA754:
+ sub r1, r1, #0x6f
+ cmp r1, #0x9
+ addls pc, pc, r1, lsl #0x2
+ b _020CA950
+_020CA764:
+ b _020CA78C
+ b _020CA7A8
+ b _020CA950
+ b _020CA950
+ b _020CA828
+ b _020CA950
+ b _020CA798
+ b _020CA950
+ b _020CA950
+ b _020CA964
+_020CA78C:
+ ldr r2, [sp, #0x14]
+ orr r6, r6, #0x1000
+ b _020CA96C
+_020CA798:
+ orr r6, r6, #0x1000
+ b _020CA96C
+_020CA7A0:
+ ldr r0, [sp, #0x18]
+ b _020CA964
+_020CA7A8:
+ orr r6, r6, #0x4
+ ldr r5, [sp, #0x14]
+ b _020CA964
+_020CA7B4:
+ cmp r5, #0x0
+ bge _020CA950
+ ands r0, r6, #0x8
+ add r11, r11, #0x4
+ ldr r4, [r11, #-0x4]
+ beq _020CA7F0
+ mov r0, r4, lsl #0x18
+ mov r1, r0, asr #0x18
+ add r0, sp, #0x54
+ bl string_put_char
+ ldr r1, [sp, #0x1c]
+ sub r2, r10, #0x1
+ add r0, sp, #0x54
+ bl string_fill_char
+ b _020CA820
+_020CA7F0:
+ ands r0, r6, #0x10
+ ldrne r0, [sp, #0x20]
+ sub r2, r10, #0x1
+ ldreq r0, [sp, #0x1c]
+ mov r0, r0, lsl #0x18
+ mov r1, r0, asr #0x18
+ add r0, sp, #0x54
+ bl string_fill_char
+ mov r0, r4, lsl #0x18
+ mov r1, r0, asr #0x18
+ add r0, sp, #0x54
+ bl string_put_char
+_020CA820:
+ add r9, r9, #0x1
+ b _020CAD0C
+_020CA828:
+ add fp, fp, #0x4
+ cmp r5, #0x0
+ ldr r7, [sp, #0x4]
+ ldr r4, [fp, #-0x4]
+ bge _020CA860
+ ldrsb r0, [r4]
+ cmp r0, #0x0
+ beq _020CA874
+_020CA848:
+ add r7, r7, #0x1
+ ldrsb r0, [r4, r7]
+ cmp r0, #0x0
+ bne _020CA848
+ b _020CA874
+_020CA85C:
+ add r7, r7, #0x1
+_020CA860:
+ cmp r7, r5
+ bge _020CA874
+ ldrsb r0, [r4, r7]
+ cmp r0, #0x0
+ bne _020CA85C
+_020CA874:
+ ands r0, r6, #0x8
+ sub sl, sl, r7
+ beq _020CA8A4
+ mov r1, r4
+ mov r2, r7
+ add r0, sp, #0x54
+ bl string_put_string
+ ldr r1, [sp, #0x1C]
+ mov r2, sl
+ add r0, sp, #0x54
+ bl string_fill_char
+ b _020CA8D4
+_020CA8A4:
+ ands r0, r6, #0x10
+ ldrne r0, [sp, #0x20]
+ mov r2, sl
+ ldreq r0, [sp, #0x1C]
+ mov r0, r0, lsl #0x18
+ mov r1, r0, asr #0x18
+ add r0, sp, #0x54
+ bl string_fill_char
+ mov r1, r4
+ mov r2, r7
+ add r0, sp, #0x54
+ bl string_put_string
+_020CA8D4:
+ add r9, r9, #0x1
+ b _020CAD0C
+_020CA8DC:
+ ands r0, r6, #0x100
+ ldr r1, [sp, #0x58]
+ ldr r0, [sp, #0x5c]
+ sub r2, r1, r0
+ bne _020CA92C
+ ands r0, r6, #0x40
+ addne r11, r11, #0x4
+ ldrne r0, [r11, #-0x4]
+ strneh r2, [r0, #0x0]
+ bne _020CA92C
+ ands r0, r6, #0x80
+ addeq r11, r11, #0x4
+ ldreq r0, [r11, #-0x4]
+ streq r2, [r0, #0x0]
+ beq _020CA92C
+ add r11, r11, #0x4
+ ldr r0, [r11, #-0x4]
+ mov r1, r2, asr #0x1f
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+_020CA92C:
+ add r9, r9, #0x1
+ b _020CAD0C
+_020CA934:
+ add r0, r3, #0x1
+ cmp r0, r9
+ bne _020CA950
+ add r0, sp, #0x54
+ add r9, r9, #0x1
+ bl string_put_char
+ b _020CAD0C
+_020CA950:
+ add r0, sp, #0x54
+ mov r1, r3
+ sub r2, r9, r3
+ bl string_put_string
+ b _020CAD0C
+_020CA964:
+ ldr r2, [sp, #0x24]
+ orr r6, r6, #0x1000
+_020CA96C:
+ ands r1, r6, #0x8
+ bicne r6, r6, #0x10
+ cmp r5, #0x0
+ bicge r6, r6, #0x10
+ ldrlt r5, [sp, #0x28]
+ ldr r7, [sp, #0x4]
+ ands r1, r6, #0x1000
+ beq _020CAA20
+ ands r1, r6, #0x100
+ addne r11, r11, #0x4
+ ldrneb r4, [r11, #-0x4]
+ movne r1, #0x0
+ bne _020CA9D0
+ ands r1, r6, #0x40
+ addne r11, r11, #0x4
+ ldrneh r4, [r11, #-0x4]
+ movne r1, #0x0
+ bne _020CA9D0
+ ands r1, r6, #0x80
+ addne r11, r11, #0x8
+ ldrne r1, [r11, #-0x4]
+ ldrne r4, [r11, #-0x8]
+ addeq r11, r11, #0x4
+ ldreq r4, [r11, #-0x4]
+ moveq r1, #0x0
+_020CA9D0:
+ bic r6, r6, #0x3
+ ands r3, r6, #0x4
+ beq _020CAAD8
+ cmp r2, #0x10
+ bne _020CAA0C
+ mov r3, #0x0
+ cmp r1, r3
+ cmpeq r4, r3
+ beq _020CAAD8
+ ldr r3, [sp, #0x20]
+ ldr r7, [sp, #0x2c]
+ strb r3, [sp, #0x39]
+ add r3, r0, #0x21
+ strb r3, [sp, #0x38]
+ b _020CAAD8
+_020CAA0C:
+ cmp r2, #0x8
+ ldreq r3, [sp, #0x20]
+ ldreq r7, [sp, #0x28]
+ streqb r3, [sp, #0x38]
+ b _020CAAD8
+_020CAA20:
+ ands r1, r6, #0x100
+ addne r11, r11, #0x4
+ ldrnesb r4, [r11, #-0x4]
+ movne r1, r4, asr #0x1f
+ bne _020CAA64
+ ands r1, r6, #0x40
+ addne r11, r11, #0x4
+ ldrnesh r4, [r11, #-0x4]
+ movne r1, r4, asr #0x1f
+ bne _020CAA64
+ ands r1, r6, #0x80
+ addne r11, r11, #0x8
+ ldrne r4, [r11, #-0x8]
+ ldrne r1, [r11, #-0x4]
+ addeq r11, r11, #0x4
+ ldreq r4, [r11, #-0x4]
+ moveq r1, r4, asr #0x1f
+_020CAA64:
+ mov r3, #0x0
+ and r8, r3, #0x0
+ cmp r8, r3
+ and r8, r1, #0x80000000
+ cmpeq r8, r3
+ beq _020CAAA0
+ ldr r7, [sp, #0x30]
+ mvn r4, r4
+ strb r7, [sp, #0x38]
+ mvn r7, r1
+ mov r1, #0x1
+ adds r4, r4, r1
+ adc r1, r7, r3
+ ldr r7, [sp, #0x28]
+ b _020CAAD8
+_020CAAA0:
+ cmp r1, r3
+ cmpeq r4, r3
+ bne _020CAAB4
+ cmp r5, #0x0
+ beq _020CAAD8
+_020CAAB4:
+ ands r3, r6, #0x2
+ ldrne r3, [sp, #0x34]
+ ldrne r7, [sp, #0x28]
+ strneb r3, [sp, #0x38]
+ bne _020CAAD8
+ ands r3, r6, #0x1
+ ldrne r3, [sp, #0x1c]
+ ldrne r7, [sp, #0x28]
+ strneb r3, [sp, #0x38]
+_020CAAD8:
+ cmp r2, #0x8
+ ldr r8, [sp, #0x4]
+ beq _020CAAF8
+ cmp r2, #0xa
+ beq _020CAB40
+ cmp r2, #0x10
+ beq _020CABDC
+ b _020CAC28
+_020CAAF8:
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r4, r0
+ beq _020CAC28
+_020CAB08:
+ and r0, r4, #0x7
+ add r3, r0, #0x30
+ add r0, sp, #0x3a
+ strb r3, [r0, r8]
+ mov r4, r4, lsr #0x3
+ mov r2, #0x0
+ mov r0, r1, lsr #0x3
+ orr r4, r4, r1, lsl #0x1d
+ cmp r0, r2
+ cmpeq r4, r2
+ mov r1, r0
+ add r8, r8, #0x1
+ bne _020CAB08
+ b _020CAC28
+_020CAB40:
+ mov r0, #0x0
+ cmp r0, r0
+ cmpeq r1, r0
+ bne _020CAB8C
+ cmp r4, #0x0
+ beq _020CAC28
+_020CAB58:
+ ldr r0, _020CAD60 ; =0xCCCCCCCD
+ umull r1, r0, r4, r0
+ movs r0, r0, lsr #0x3
+ mov r1, #0xa
+ mul r1, r0, r1
+ sub r1, r4, r1
+ mov r4, r0
+ add r1, r1, #0x30
+ add r0, sp, #0x3a
+ strb r1, [r0, r8]
+ add r8, r8, #0x1
+ bne _020CAB58
+ b _020CAC28
+_020CAB8C:
+ cmp r1, r0
+ cmpeq r4, r0
+ beq _020CAC28
+_020CAB98:
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x4]
+ mov r0, r4
+ bl _ll_udiv
+ mov r3, #0xa
+ umull r3, r12, r0, r3
+ subs r3, r4, r3
+ mov r2, #0x0
+ add r4, r3, #0x30
+ add r3, sp, #0x3a
+ strb r4, [r3, r8]
+ cmp r1, r2
+ cmpeq r0, r2
+ mov r4, r0
+ add r8, r8, #0x1
+ bne _020CAB98
+ b _020CAC28
+_020CABDC:
+ mov r2, #0x0
+ cmp r1, r2
+ cmpeq r4, r2
+ beq _020CAC28
+_020CABEC:
+ and r3, r4, #0xf
+ cmp r3, #0xa
+ mov r4, r4, lsr #0x4
+ addlt r3, r3, #0x30
+ mov r2, r1, lsr #0x4
+ orr r4, r4, r1, lsl #0x1c
+ mov r1, r2
+ addge r3, r3, r0
+ add r2, sp, #0x3a
+ strb r3, [r2, r8]
+ mov r2, #0x0
+ cmp r1, r2
+ add r8, r8, #0x1
+ cmpeq r4, r2
+ bne _020CABEC
+_020CAC28:
+ cmp r7, #0x0
+ ble _020CAC4C
+ ldrsb r0, [sp, #0x38]
+ cmp r0, #0x30
+ ldreq r1, [sp, #0x20]
+ addeq r0, sp, #0x3a
+ streqb r1, [r0, r8]
+ ldreq r7, [sp, #0x4]
+ addeq r8, r8, #0x1
+_020CAC4C:
+ sub r5, r5, r8
+ ands r0, r6, #0x10
+ beq _020CAC68
+ sub r0, r10, r8
+ sub r0, r0, r7
+ cmp r5, r0
+ movlt r5, r0
+_020CAC68:
+ cmp r5, #0x0
+ subgt r10, r10, r5
+ add r0, r7, r8
+ ands r6, r6, #0x8
+ sub r10, r10, r0
+ bne _020CAC90
+ ldr r1, [sp, #0x1c]
+ add r0, sp, #0x54
+ mov r2, r10
+ bl string_fill_char
+_020CAC90:
+ cmp r7, #0x0
+ ble _020CACB8
+ add r0, sp, #0x38
+ add r4, r0, r7
+_020CACA0:
+ ldrsb r1, [r4, #-0x1]!
+ sub r7, r7, #0x1
+ add r0, sp, #0x54
+ bl string_put_char
+_020CACB0:
+ cmp r7, #0x0
+ bgt _020CACA0
+_020CACB8:
+ ldr r1, [sp, #0x20]
+ mov r2, r5
+ add r0, sp, #0x54
+ bl string_fill_char
+_020CACC8:
+ cmp r8, #0x0
+ ble _020CACF0
+ add r0, sp, #0x3A
+ add r4, r0, r8
+_020CACD8:
+ ldrsb r1, [r4, #-0x1]!
+ sub r8, r8, #0x1
+ add r0, sp, #0x54
+ bl string_put_char
+ cmp r8, #0x0
+ bgt _020CACD8
+_020CACF0:
+ cmp r6, #0x0
+ beq _020CAD08
+ ldr r1, [sp, #0x1C]
+ mov r2, sl
+ add r0, sp, #0x54
+ bl string_fill_char
+_020CAD08:
+ add r9, r9, #0x1
+_020CAD0C:
+ ldrsb r0, [r9, #0x0]
+ cmp r0, #0x0
+ bne _020CA530
+_020CAD18:
+ ldr r0, [sp, #0x54]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x58]
+ movne r1, #0x0
+ strneb r1, [r0, #0x0]
+ bne _020CAD48
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ ldrne r1, [sp, #0x5c]
+ movne r2, #0x0
+ addne r0, r1, r0
+ strneb r2, [r0, #-0x1]
+_020CAD48:
+ ldr r1, [sp, #0x58]
+ ldr r0, [sp, #0x5c]
+ sub r0, r1, r0
+ add sp, sp, #0x64
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020CAD60: .word 0xCCCCCCCD
+
+ arm_func_start OS_SNPrintf
+OS_SNPrintf: ; 0x020CAD64
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r3, sp, #0x10
+ bic r3, r3, #0x3
+ ldr r2, [sp, #0x10]
+ add r3, r3, #0x4
+ bl OS_VSNPrintf
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start OS_VSPrintf
+OS_VSPrintf: ; 0x020CAD94
+ ldr ip, _020CADA8 ; =OS_VSNPrintf
+ mov r3, r2
+ mov r2, r1
+ mvn r1, #0x80000000
+ bx r12
+ .balign 4
+_020CADA8: .word OS_VSNPrintf
+
+ arm_func_start OS_SPrintf
+OS_SPrintf: ; 0x020CADAC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r2, sp, #0xc
+ bic r2, r2, #0x3
+ ldr r1, [sp, #0xc]
+ add r2, r2, #0x4
+ bl OS_VSPrintf
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start string_put_string
+string_put_string: ; 0x020CADDC
+ stmdb sp!, {r4,lr}
+ cmp r2, #0x0
+ ldmleia sp!, {r4,lr}
+ bxle lr
+ ldr lr, [r0, #0x0]
+ mov r4, #0x0
+ cmp lr, r2
+ movhi lr, r2
+ cmp lr, #0x0
+ bls _020CAE1C
+_020CAE04:
+ ldrsb r12, [r1, r4]
+ ldr r3, [r0, #0x4]
+ strb r12, [r3, r4]
+ add r4, r4, #0x1
+ cmp r4, lr
+ blo _020CAE04
+_020CAE1C:
+ ldr r1, [r0, #0x0]
+ sub r1, r1, lr
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, r2
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start string_fill_char
+string_fill_char:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ addle sp, sp, #0x4
+ ldmleia sp!, {lr}
+ bxle lr
+ ldr r12, [r0, #0x0]
+ mov lr, #0x0
+ cmp r12, r2
+ movhi r12, r2
+ cmp r12, #0x0
+ bls _020CAE80
+_020CAE6C:
+ ldr r3, [r0, #0x4]
+ strb r1, [r3, lr]
+ add lr, lr, #0x1
+ cmp lr, r12
+ blo _020CAE6C
+_020CAE80:
+ ldr r1, [r0, #0x0]
+ sub r1, r1, r12
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, r2
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start string_put_char
+string_put_char:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ ldrne r2, [r0, #0x4]
+ strneb r1, [r2, #0x0]
+ ldrne r1, [r0, #0x0]
+ subne r1, r1, #0x1
+ strne r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x1
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start OS_IsThreadAvailable
+OS_IsThreadAvailable: ; 0x020CAED0
+ ldr r0, _020CAEDC ; =OSi_IsThreadInitialized
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CAEDC: .word OSi_IsThreadInitialized
+
+ arm_func_start OS_SetThreadDestructor
+OS_SetThreadDestructor:
+ str r1, [r0, #0xb4]
+ bx lr
+
+ arm_func_start OS_EnableScheduler
+OS_EnableScheduler: ; 0x020CAEE8
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020CAF1C ; =OSi_RescheduleCount
+ mov r4, #0x0
+ ldr r3, [r1, #0x0]
+ cmp r3, #0x0
+ subne r2, r3, #0x1
+ movne r4, r3
+ strne r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CAF1C: .word OSi_RescheduleCount
+
+ arm_func_start OS_DisableScheduler
+OS_DisableScheduler: ; 0x020CAF20
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r2, _020CAF54 ; =OSi_RescheduleCount
+ mvn r1, #0x0
+ ldr r3, [r2, #0x0]
+ cmp r3, r1
+ addcc r1, r3, #0x1
+ movcc r4, r3
+ strcc r1, [r2, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CAF54: .word OSi_RescheduleCount
+
+ arm_func_start OSi_IdleThreadProc
+OSi_IdleThreadProc: ; 0x020CAF58
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_EnableInterrupts
+_020CAF64:
+ bl OS_Halt
+ b _020CAF64
+
+ arm_func_start OS_SetSwitchThreadCallback
+OS_SetSwitchThreadCallback: ; 0x020CAF6C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CAF9C ; =OSi_ThreadInfo
+ ldr r4, [r1, #0xc]
+ str r5, [r1, #0xc]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CAF9C: .word OSi_ThreadInfo
+
+ arm_func_start OSi_SleepAlarmCallback
+OSi_SleepAlarmCallback: ; 0x020CAFA0
+ ldr r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ ldr ip, _020CAFBC ; =OS_WakeupThreadDirect
+ mov r0, r2
+ str r1, [r2, #0xb0]
+ bx r12
+ .balign 4
+_020CAFBC: .word OS_WakeupThreadDirect
+
+ arm_func_start OS_Sleep
+OS_Sleep: ; 0x020CAFC0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x34
+ mov r4, r0
+ add r0, sp, #0x8
+ bl OS_CreateAlarm
+ ldr r0, _020CB060 ; =OSi_CurrentThreadPtr
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ str r0, [sp, #0x4]
+ bl OS_DisableInterrupts
+ ldr r1, _020CB064 ; =0x000082EA
+ mov r2, #0x0
+ umull r5, r3, r4, r1
+ mla r3, r4, r2, r3
+ mla r3, r2, r1, r3
+ mov r1, r5, lsr #0x6
+ mov r4, r0
+ ldr r5, [sp, #0x4]
+ add r0, sp, #0x8
+ add r2, sp, #0x4
+ str r0, [r5, #0xb0]
+ str r2, [sp, #0x0]
+ mov r2, r3, lsr #0x6
+ orr r1, r1, r3, lsl #0x1a
+ ldr r3, _020CB068 ; =OSi_SleepAlarmCallback
+ bl OS_SetAlarm
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020CB04C
+ mov r5, #0x0
+_020CB038:
+ mov r0, r5
+ bl OS_SleepThread
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _020CB038
+_020CB04C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CB060: .word OSi_CurrentThreadPtr
+_020CB064: .word 0x000082EA
+_020CB068: .word OSi_SleepAlarmCallback
+
+ arm_func_start OS_GetThreadPriority
+OS_GetThreadPriority: ; 0x020CB06C
+ ldr r0, [r0, #0x70]
+ bx lr
+
+ arm_func_start OS_SetThreadPriority
+OS_SetThreadPriority: ; 0x020CB074
+ stmdb sp!, {r4-r8,lr}
+ ldr r2, _020CB120 ; =OSi_ThreadInfo
+ mov r6, r0
+ mov r5, r1
+ ldr r8, [r2, #0x8]
+ mov r7, #0x0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ b _020CB0A0
+_020CB098:
+ mov r7, r8
+ ldr r8, [r8, #0x68]
+_020CB0A0:
+ cmp r8, #0x0
+ beq _020CB0B0
+ cmp r8, r6
+ bne _020CB098
+_020CB0B0:
+ cmp r8, #0x0
+ beq _020CB0C4
+ ldr r0, _020CB124 ; =OSi_IdleThread
+ cmp r8, r0
+ bne _020CB0D8
+_020CB0C4:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020CB0CC:
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CB0D8:
+ ldr r0, [r8, #0x70]
+ cmp r0, r5
+ beq _020CB10C
+ cmp r7, #0x0
+ ldreq r1, [r6, #0x68]
+ ldreq r0, _020CB120 ; =OSi_ThreadInfo
+ streq r1, [r0, #0x8]
+ ldrne r0, [r6, #0x68]
+ strne r0, [r7, #0x68]
+ mov r0, r6
+ str r5, [r6, #0x70]
+ bl OSi_InsertThreadToList
+ bl OSi_RescheduleThread
+_020CB10C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020CB120: .word OSi_ThreadInfo
+_020CB124: .word OSi_IdleThread
+
+ arm_func_start OS_YieldThread
+OS_YieldThread: ; 0x020CB128
+ stmdb sp!, {r4-r8,lr}
+ ldr r0, _020CB1E0 ; =OSi_ThreadInfo
+ mov r7, #0x0
+ mov r6, r7
+ mov r5, r7
+ ldr r8, [r0, #0x4]
+ bl OS_DisableInterrupts
+ ldr r1, _020CB1E0 ; =OSi_ThreadInfo
+ mov r4, r0
+ ldr r2, [r1, #0x8]
+ mov r0, r7
+ cmp r2, #0x0
+ beq _020CB188
+ ldr r1, [r8, #0x70]
+_020CB160:
+ cmp r2, r8
+ moveq r7, r0
+ ldr r0, [r2, #0x70]
+ cmp r1, r0
+ moveq r6, r2
+ mov r0, r2
+ ldr r2, [r2, #0x68]
+ addeq r5, r5, #0x1
+ cmp r2, #0x0
+ bne _020CB160
+_020CB188:
+ cmp r5, #0x1
+ ble _020CB198
+ cmp r6, r8
+ bne _020CB1A8
+_020CB198:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CB1A8:
+ cmp r7, #0x0
+ ldreq r1, [r8, #0x68]
+ ldreq r0, _020CB1E0 ; =OSi_ThreadInfo
+ streq r1, [r0, #0x8]
+ ldrne r0, [r8, #0x68]
+ strne r0, [r7, #0x68]
+ ldr r0, [r6, #0x68]
+ str r0, [r8, #0x68]
+ str r8, [r6, #0x68]
+ bl OSi_RescheduleThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020CB1E0: .word OSi_ThreadInfo
+
+ arm_func_start OS_RescheduleThread
+OS_RescheduleThread: ; 0x020CB1E4
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ bl OSi_RescheduleThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start OS_SelectThread
+OS_SelectThread: ; 0x020CB204
+ ldr r0, _020CB22C ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x8]
+ b _020CB214
+_020CB210:
+ ldr r0, [r0, #0x68]
+_020CB214:
+ cmp r0, #0x0
+ bxeq lr
+ ldr r1, [r0, #0x64]
+ cmp r1, #0x1
+ bne _020CB210
+ bx lr
+ .balign 4
+_020CB22C: .word OSi_ThreadInfo
+
+ arm_func_start OS_WakeupThreadDirect
+OS_WakeupThreadDirect: ; 0x020CB230
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ mov r1, #0x1
+ mov r4, r0
+ str r1, [r5, #0x64]
+ bl OSi_RescheduleThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start OS_WakeupThread
+OS_WakeupThread: ; 0x020CB264
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x0]
+ mov r4, r0
+ cmp r1, #0x0
+ beq _020CB2D0
+ cmp r1, #0x0
+ beq _020CB2BC
+ mov r7, #0x1
+ mov r6, #0x0
+_020CB294:
+ mov r0, r5
+ bl OSi_RemoveLinkFromQueue
+ str r7, [r0, #0x64]
+ str r6, [r0, #0x78]
+ str r6, [r0, #0x80]
+ ldr r1, [r0, #0x80]
+ str r1, [r0, #0x7c]
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ bne _020CB294
+_020CB2BC:
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x4]
+ str r0, [r5, #0x0]
+ bl OSi_RescheduleThread
+_020CB2D0:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start OS_SleepThread
+OS_SleepThread:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CB334 ; =OSi_CurrentThreadPtr
+ mov r5, r0
+ ldr r0, [r1, #0x0]
+ cmp r6, #0x0
+ ldr r4, [r0, #0x0]
+ beq _020CB318
+ mov r0, r6
+ mov r1, r4
+ str r6, [r4, #0x78]
+ bl OSi_InsertLinkToQueue
+_020CB318:
+ mov r0, #0x0
+ str r0, [r4, #0x64]
+ bl OSi_RescheduleThread
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CB334: .word OSi_CurrentThreadPtr
+
+ arm_func_start OS_IsThreadTerminated
+OS_IsThreadTerminated: ; 0x020CB338
+ ldr r0, [r0, #0x64]
+ cmp r0, #0x2
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start OS_JoinThread
+OS_JoinThread: ; 0x020CB34C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x64]
+ mov r4, r0
+ cmp r1, #0x2
+ beq _020CB374
+ add r0, r5, #0x9c
+ bl OS_SleepThread
+_020CB374:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start OSi_CancelThreadAlarmForSleep
+OSi_CancelThreadAlarmForSleep: ; 0x020CB388
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0xb0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl OS_CancelAlarm
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start OS_DestroyThread
+OS_DestroyThread: ; 0x020CB3B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CB438 ; =OSi_ThreadInfo
+ mov r4, r0
+ ldr r0, [r1, #0x4]
+ cmp r0, r5
+ bne _020CB3DC
+ bl OSi_ExitThread_Destroy
+_020CB3DC:
+ bl OS_DisableScheduler
+ mov r0, r5
+ bl OSi_UnlockAllMutex
+ mov r0, r5
+ bl OSi_CancelThreadAlarmForSleep
+ ldr r0, [r5, #0x78]
+ cmp r0, #0x0
+ beq _020CB404
+ mov r1, r5
+ bl OSi_RemoveSpecifiedLinkFromQueue
+_020CB404:
+ mov r0, r5
+ bl OSi_RemoveThreadFromList
+ mov r1, #0x2
+ add r0, r5, #0x9c
+ str r1, [r5, #0x64]
+ bl OS_WakeupThread
+ bl OS_EnableScheduler
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ bl OS_RescheduleThread
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CB438: .word OSi_ThreadInfo
+
+ arm_func_start OSi_ExitThread_Destroy
+OSi_ExitThread_Destroy: ; 0x020CB43C
+ stmdb sp!, {r4,lr}
+ ldr r0, _020CB498 ; =OSi_CurrentThreadPtr
+ ldr r0, [r0, #0x0]
+ ldr r4, [r0, #0x0]
+ bl OS_DisableScheduler
+ mov r0, r4
+ bl OSi_UnlockAllMutex
+ ldr r0, [r4, #0x78]
+ cmp r0, #0x0
+ beq _020CB46C
+ mov r1, r4
+ bl OSi_RemoveSpecifiedLinkFromQueue
+_020CB46C:
+ mov r0, r4
+ bl OSi_RemoveThreadFromList
+ mov r1, #0x2
+ add r0, r4, #0x9c
+ str r1, [r4, #0x64]
+ bl OS_WakeupThread
+ bl OS_EnableScheduler
+ bl OS_RescheduleThread
+ bl OS_Terminate
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CB498: .word OSi_CurrentThreadPtr
+
+ arm_func_start OSi_ExitThread_Destroy2
+OSi_ExitThread_Destroy2: ; 0x020CB49C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CB4DC ; =OSi_CurrentThreadPtr
+ ldr r1, [r1, #0x0]
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0xb4]
+ cmp r2, #0x0
+ beq _020CB4CC
+ mov r1, #0x0
+ str r1, [r3, #0xb4]
+ blx r2
+ bl OS_DisableInterrupts
+_020CB4CC:
+ bl OSi_ExitThread_Destroy
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CB4DC: .word OSi_CurrentThreadPtr
+
+ arm_func_start OSi_ExitThread_ArgSpecified
+OSi_ExitThread_ArgSpecified: ; 0x020CB4E0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r2, _020CB548 ; =OSi_StackForDestructor
+ mov r5, r0
+ ldr r2, [r2, #0x0]
+ mov r4, r1
+ cmp r2, #0x0
+ beq _020CB534
+ ldr r1, _020CB54C ; =OSi_ExitThread_Destroy2
+ bl OS_InitContext
+ str r4, [r5, #0x4]
+ ldr r1, [r5, #0x0]
+ mov r0, r5
+ orr r1, r1, #0x80
+ str r1, [r5, #0x0]
+ mov r1, #0x1
+ str r1, [r5, #0x64]
+ bl OS_LoadContext
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CB534:
+ mov r0, r4
+ bl OSi_ExitThread_Destroy2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CB548: .word OSi_StackForDestructor
+_020CB54C: .word OSi_ExitThread_Destroy2
+
+ arm_func_start OS_ExitThread
+OS_ExitThread: ; 0x020CB550
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r0, _020CB578 ; =OSi_ThreadInfo
+ mov r1, #0x0
+ ldr r0, [r0, #0x4]
+ bl OSi_ExitThread_ArgSpecified
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CB578: .word OSi_ThreadInfo
+
+ arm_func_start OS_CreateThread
+OS_CreateThread: ; 0x020CB57C
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r5, r1
+ mov r7, r2
+ mov r6, r3
+ bl OS_DisableInterrupts
+ mov r4, r0
+ bl OSi_GetUnusedThreadId
+ ldr r2, [sp, #0x1c]
+ mov r1, #0x0
+ str r2, [r8, #0x70]
+ str r0, [r8, #0x6c]
+ str r1, [r8, #0x64]
+ str r1, [r8, #0x74]
+ mov r0, r8
+ bl OSi_InsertThreadToList
+ mov r1, r5
+ str r6, [r8, #0x94]
+ ldr r0, [sp, #0x18]
+ mov r12, #0x0
+ sub r5, r6, r0
+ sub r2, r6, #0x4
+ str r5, [r8, #0x90]
+ str r12, [r8, #0x98]
+ ldr r3, _020CB678 ; =0xFDDB597D
+ ldr r0, [r8, #0x94]
+ ldr r6, _020CB67C ; =0x7BF9DD5B
+ str r3, [r0, #-0x4]
+ ldr r3, [r8, #0x90]
+ mov r0, r8
+ str r6, [r3, #0x0]
+ str r12, [r8, #0xa0]
+ ldr r3, [r8, #0xa0]
+ str r3, [r8, #0x9c]
+ bl OS_InitContext
+ str r7, [r8, #0x4]
+ add r1, r5, #0x4
+ ldr r2, _020CB680 ; =OS_ExitThread
+ mov r0, #0x0
+ str r2, [r8, #0x3c]
+ ldr r2, [sp, #0x18]
+ sub r2, r2, #0x8
+ bl MIi_CpuClear32
+ mov r1, #0x0
+ str r1, [r8, #0x84]
+ str r1, [r8, #0x88]
+ str r1, [r8, #0x8c]
+ mov r0, r8
+ bl OS_SetThreadDestructor
+_020CB640:
+ mov r0, #0x0
+ str r0, [r8, #0x78]
+ str r0, [r8, #0x80]
+ ldr r2, [r8, #0x80]
+ add r1, r8, #0xA4
+ str r2, [r8, #0x7C]
+ mov r2, #0xC
+ bl MIi_CpuClear32
+ mov r0, r4
+ mov r1, #0x0
+ str r1, [r8, #0xB0]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8, lr}
+ bx lr
+_020CB678: .word 0xFDDB597D
+_020CB67C: .word 0x7BF9DD5B
+_020CB680: .word OS_ExitThread
+
+ arm_func_start OS_InitThread
+OS_InitThread: ; 0x020CB684
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r3, _020CB7A4 ; =OSi_IsThreadInitialized
+ ldr r0, [r3, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldr ip, _020CB7A8 ; =0x00000000
+ ldr r1, _020CB7AC ; =0x021D3568
+ mov lr, #0x0
+ ldr r0, _020CB7B0 ; =OSi_ThreadInfo
+ mov r6, #0x1
+ mov r4, #0x10
+ str r1, [r0, #0x8]
+ str r1, [r0, #0x4]
+ cmp r12, #0x0
+ ldrle r0, _020CB7B4 ; =0x027E0080
+ str r4, [r1, #0x70]
+ suble r4, r0, r12
+ str lr, [r1, #0x6c]
+ str r6, [r1, #0x64]
+ str lr, [r1, #0x68]
+ str lr, [r1, #0x74]
+ ldrgt r1, _020CB7B8 ; =0x027E0000
+ ldrgt r0, _020CB7BC ; =0x00000400
+ addgt r1, r1, #0x3f80
+ subgt r0, r1, r0
+ subgt r4, r0, r12
+ ldr r1, _020CB7B8 ; =0x027E0000
+ ldr r5, _020CB7C0 ; =0x021D349C
+ ldr r2, _020CB7C4 ; =OSi_CurrentThreadPtr
+ ldr r0, _020CB7BC ; =0x00000400
+ str r5, [r2, #0x0]
+ ldr r2, _020CB7AC ; =0x021D3568
+ add r1, r1, #0x3f80
+ str r6, [r3, #0x0]
+ sub r3, r1, r0
+ mov r0, #0x0
+ ldr r1, _020CB7C8 ; =0xFDDB597D
+ str r3, [r2, #0x94]
+ str r4, [r2, #0x90]
+ str r0, [r2, #0x98]
+ str r1, [r3, #-0x4]
+ ldr r3, [r2, #0x90]
+ ldr ip, _020CB7CC ; =0x7BF9DD5B
+ ldr r1, _020CB7B0 ; =OSi_ThreadInfo
+ str r12, [r3, #0x0]
+ ldr r3, _020CB7D0 ; =0x027FFFA0
+ str r0, [r2, #0xa0]
+ str r0, [r2, #0x9c]
+ strh r0, [r1, #0x0]
+ strh r0, [r1, #0x2]
+ str r1, [r3, #0x0]
+ bl OS_SetSwitchThreadCallback
+ mov r2, #0xc8
+ str r2, [sp, #0x0]
+ mov r12, #0x1f
+ ldr r0, _020CB7D4 ; =OSi_IdleThread
+ ldr r1, _020CB7D8 ; =OSi_IdleThreadProc
+ ldr r3, _020CB7DC ; =OSi_Initialized
+ mov r2, #0x0
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ ldr r0, _020CB7D4 ; =OSi_IdleThread
+ mov r2, #0x20
+ mov r1, #0x1
+ str r2, [r0, #0x70]
+ str r1, [r0, #0x64]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CB7A4: .word OSi_IsThreadInitialized
+_020CB7A8: .word SDK_SYS_STACKSIZE
+_020CB7AC: .word OSi_LauncherThread
+_020CB7B0: .word OSi_ThreadInfo
+_020CB7B4: .word SDK_SECTION_ARENA_DTCM_START
+_020CB7B8: .word SDK_AUTOLOAD_DTCM_START
+_020CB7BC: .word SDK_IRQ_STACKSIZE
+_020CB7C0: .word OSi_ThreadInfo+4
+_020CB7C4: .word OSi_CurrentThreadPtr
+_020CB7C8: .word 0xFDDB597D
+_020CB7CC: .word 0x7BF9DD5B
+_020CB7D0: .word 0x027FFFA0
+_020CB7D4: .word OSi_IdleThread
+_020CB7D8: .word OSi_IdleThreadProc
+_020CB7DC: .word OSi_IdleThreadStack+0xc8
+
+ arm_func_start OSi_RescheduleThread
+OSi_RescheduleThread: ; 0x020CB7E0
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, _020CB8BC ; =OSi_RescheduleCount
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldr r4, _020CB8C0 ; =OSi_ThreadInfo
+ ldrh r0, [r4, #0x2]
+ cmp r0, #0x0
+ bne _020CB814
+ bl OS_GetProcMode
+ cmp r0, #0x12
+ bne _020CB824
+_020CB814:
+ mov r0, #0x1
+ strh r0, [r4, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020CB824:
+ ldr r0, _020CB8C4 ; =OSi_CurrentThreadPtr
+ ldr r0, [r0, #0x0]
+ ldr r6, [r0, #0x0]
+ bl OS_SelectThread
+ mov r5, r0
+ cmp r6, r5
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ cmp r5, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, [r6, #0x64]
+ cmp r0, #0x2
+ beq _020CB870
+ mov r0, r6
+ bl OS_SaveContext
+_020CB864:
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+_020CB870:
+ ldr r0, _020CB8C8 ; =0x021D348C
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _020CB88C
+ mov r0, r6
+ mov r1, r5
+ blx r2
+_020CB88C:
+ ldr r2, [r4, #0xc]
+ cmp r2, #0x0
+ beq _020CB8A4
+ mov r0, r6
+ mov r1, r5
+ blx r2
+_020CB8A4:
+ ldr r1, _020CB8C0 ; =OSi_ThreadInfo
+ mov r0, r5
+ str r5, [r1, #0x4]
+ bl OS_LoadContext
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CB8BC: .word OSi_RescheduleCount
+_020CB8C0: .word OSi_ThreadInfo
+_020CB8C4: .word OSi_CurrentThreadPtr
+_020CB8C8: .word OSi_SystemCallbackInSwitchThread
+
+ arm_func_start OSi_RemoveThreadFromList
+OSi_RemoveThreadFromList: ; 0x020CB8CC
+ ldr r1, _020CB910 ; =OSi_ThreadInfo
+ mov r2, #0x0
+ ldr r1, [r1, #0x8]
+ b _020CB8E4
+_020CB8DC:
+ mov r2, r1
+ ldr r1, [r1, #0x68]
+_020CB8E4:
+ cmp r1, #0x0
+ beq _020CB8F4
+ cmp r1, r0
+ bne _020CB8DC
+_020CB8F4:
+ cmp r2, #0x0
+ ldreq r1, [r0, #0x68]
+ ldreq r0, _020CB910 ; =OSi_ThreadInfo
+ streq r1, [r0, #0x8]
+ ldrne r0, [r0, #0x68]
+ strne r0, [r2, #0x68]
+ bx lr
+ .balign 4
+_020CB910: .word OSi_ThreadInfo
+
+ arm_func_start OSi_InsertThreadToList
+OSi_InsertThreadToList: ; 0x020CB914
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CB978 ; =OSi_ThreadInfo
+ mov r12, #0x0
+ ldr r3, [r1, #0x8]
+ mov lr, r3
+ b _020CB938
+_020CB930:
+ mov r12, lr
+ ldr lr, [lr, #0x68]
+_020CB938:
+ cmp lr, #0x0
+ beq _020CB950
+ ldr r2, [lr, #0x70]
+ ldr r1, [r0, #0x70]
+ cmp r2, r1
+ blo _020CB930
+_020CB950:
+ cmp r12, #0x0
+ ldreq r1, _020CB978 ; =OSi_ThreadInfo
+ streq r3, [r0, #0x68]
+ streq r0, [r1, #0x8]
+ ldrne r1, [r12, #0x68]
+ strne r1, [r0, #0x68]
+ strne r0, [r12, #0x68]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CB978: .word OSi_ThreadInfo
+
+ arm_func_start OSi_RemoveMutexLinkFromQueue
+OSi_RemoveMutexLinkFromQueue: ; 0x020CB97C
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _020CB9A4
+ ldr r1, [r2, #0x10]
+ str r1, [r0, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x14]
+ moveq r1, #0x0
+ streq r1, [r0, #0x4]
+_020CB9A4:
+ mov r0, r2
+ bx lr
+
+ arm_func_start OSi_RemoveSpecifiedLinkFromQueue
+OSi_RemoveSpecifiedLinkFromQueue: ; 0x020CB9AC
+ ldr r2, [r0, #0x0]
+ mov r12, r2
+ cmp r2, #0x0
+ beq _020CB9F8
+_020CB9BC:
+ cmp r12, r1
+ ldr r3, [r12, #0x80]
+ bne _020CB9EC
+ cmp r2, r12
+ ldr r2, [r12, #0x7c]
+ streq r3, [r0, #0x0]
+ strne r3, [r2, #0x80]
+ ldr r1, [r0, #0x4]
+ cmp r1, r12
+ streq r2, [r0, #0x4]
+ strne r2, [r3, #0x7c]
+ b _020CB9F8
+_020CB9EC:
+ mov r12, r3
+ cmp r3, #0x0
+ bne _020CB9BC
+_020CB9F8:
+ mov r0, r12
+ bx lr
+
+ arm_func_start OSi_RemoveLinkFromQueue
+OSi_RemoveLinkFromQueue: ; 0x020CBA00
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _020CBA2C
+ ldr r1, [r2, #0x80]
+ str r1, [r0, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x7c]
+ moveq r1, #0x0
+ streq r1, [r0, #0x4]
+ streq r1, [r2, #0x78]
+_020CBA2C:
+ mov r0, r2
+ bx lr
+
+ arm_func_start OSi_InsertLinkToQueue
+OSi_InsertLinkToQueue:
+ ldr r12, [r0, #0x0]
+ b _020CBA48
+_020CBA3C:
+ cmp r12, r1
+ bxeq lr
+ ldr r12, [r12, #0x80]
+_020CBA48:
+ cmp r12, #0x0
+ beq _020CBA60
+ ldr r3, [r12, #0x70]
+ ldr r2, [r1, #0x70]
+ cmp r3, r2
+ bls _020CBA3C
+_020CBA60:
+ cmp r12, #0x0
+ bne _020CBA8C
+ ldr r2, [r0, #0x4]
+ cmp r2, #0x0
+ streq r1, [r0, #0x0]
+ strne r1, [r2, #0x80]
+ str r2, [r1, #0x7c]
+ mov r2, #0x0
+ str r2, [r1, #0x80]
+ str r1, [r0, #0x4]
+ bx lr
+_020CBA8C:
+ ldr r2, [r12, #0x7c]
+ cmp r2, #0x0
+ streq r1, [r0, #0x0]
+ strne r1, [r2, #0x80]
+ str r2, [r1, #0x7c]
+ str r12, [r1, #0x80]
+ str r1, [r12, #0x7c]
+ bx lr
+
+ arm_func_start OSi_GetUnusedThreadId
+OSi_GetUnusedThreadId: ; 0x020CBAAC
+ ldr r1, _020CBAC0 ; =OSi_ThreadIdCount
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x1
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CBAC0: .word OSi_ThreadIdCount
+
+ arm_func_start OS_InitContext
+OS_InitContext: ; 0x020CBAC4
+ add r1, r1, #0x4
+ str r1, [r0, #0x40]
+ str r2, [r0, #0x44]
+ sub r2, r2, #0x40
+ tst r2, #0x4
+ subne r2, r2, #0x4
+ str r2, [r0, #0x38]
+ ands r1, r1, #0x1
+ movne r1, #0x3f
+ moveq r1, #0x1f
+ str r1, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x8]
+ str r1, [r0, #0xc]
+ str r1, [r0, #0x10]
+ str r1, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r1, [r0, #0x1c]
+ str r1, [r0, #0x20]
+ str r1, [r0, #0x24]
+ str r1, [r0, #0x28]
+ str r1, [r0, #0x2c]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ str r1, [r0, #0x3c]
+ bx lr
+
+ arm_func_start OS_SaveContext
+OS_SaveContext:
+ stmdb sp!, {r0,lr}
+ add r0, r0, #0x48
+ ldr r1, _020CBB78 ; =CP_SaveContext
+ blx r1
+ ldmia sp!, {r0,lr}
+ add r1, r0, #0x0
+ mrs r2, cpsr
+ str r2, [r1], #0x4
+ mov r0, #0xd3
+ msr cpsr_c, r0
+ str sp, [r1, #0x40]
+ msr cpsr_c, r2
+ mov r0, #0x1
+ stmia r1, {r0-lr}
+ add r0, pc, #0x8 ; =_020CBB78
+ str r0, [r1, #0x3c]
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020CBB78: .word CP_SaveContext
+
+ arm_func_start OS_LoadContext
+OS_LoadContext: ; 0x020CBB7C
+ stmdb sp!, {r0,lr}
+ add r0, r0, #0x48
+ ldr r1, _020CBBBC ; =CP_RestoreContext
+ blx r1
+ ldmia sp!, {r0,lr}
+ mrs r1, cpsr
+ bic r1, r1, #0x1f
+ orr r1, r1, #0xd3
+ msr cpsr_c, r1
+ ldr r1, [r0], #0x4
+ msr spsr_fsxc, r1
+ ldr sp, [r0, #0x40]
+ ldr lr, [r0, #0x3c]
+ ldmia r0, {r0-lr}^
+ mov r0, r0
+ subs pc, lr, #0x4
+ .balign 4
+_020CBBBC: .word CP_RestoreContext
+
+ arm_func_start OS_GetConsoleType
+OS_GetConsoleType: ; 0x020CBBC0
+ ldr r0, _020CBBD0 ; =0x82000001
+ ldr r1, _020CBBD4 ; =0x02106828
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CBBD0: .word 0x82000001
+_020CBBD4: .word 0x02106828
+
+ arm_func_start OS_IsRunOnEmulator
+OS_IsRunOnEmulator:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start OS_ReadMessage
+OS_ReadMessage: ; 0x020CBBE0
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x1c]
+ mov r4, r0
+ cmp r1, #0x0
+ bne _020CBC3C
+ and r8, r7, #0x1
+ add r7, r6, #0x8
+_020CBC0C:
+ cmp r8, #0x0
+ bne _020CBC28
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020CBC1C:
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CBC28:
+ mov r0, r7
+ bl OS_SleepThread
+ ldr r0, [r6, #0x1c]
+ cmp r0, #0x0
+ beq _020CBC0C
+_020CBC3C:
+ cmp r5, #0x0
+ ldrne r1, [r6, #0x10]
+ ldrne r0, [r6, #0x18]
+ ldrne r0, [r1, r0, lsl #0x2]
+ strne r0, [r5, #0x0]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start OS_JamMessage
+OS_JamMessage: ; 0x020CBC64
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x14]
+ ldr r2, [r6, #0x1c]
+ mov r4, r0
+ cmp r1, r2
+ bgt _020CBCCC
+ and r7, r7, #0x1
+_020CBC94:
+ cmp r7, #0x0
+ bne _020CBCB4
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CBCB4:
+ mov r0, r6
+ bl OS_SleepThread
+ ldr r1, [r6, #0x14]
+ ldr r0, [r6, #0x1c]
+ cmp r1, r0
+ ble _020CBC94
+_020CBCCC:
+ ldr r0, [r6, #0x18]
+ add r0, r0, r1
+ sub r0, r0, #0x1
+ bl _s32_div_f
+ str r1, [r6, #0x18]
+ ldr r2, [r6, #0x10]
+ ldr r1, [r6, #0x18]
+ add r0, r6, #0x8
+ str r5, [r2, r1, lsl #0x2]
+ ldr r1, [r6, #0x1c]
+ add r1, r1, #0x1
+ str r1, [r6, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start OS_ReceiveMessage
+OS_ReceiveMessage: ; 0x020CBD18
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r1, [r6, #0x1c]
+ mov r4, r0
+ cmp r1, #0x0
+ bne _020CBD74
+ and r8, r7, #0x1
+ add r7, r6, #0x8
+_020CBD44:
+ cmp r8, #0x0
+ bne _020CBD60
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020CBD54:
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CBD60:
+ mov r0, r7
+ bl OS_SleepThread
+ ldr r0, [r6, #0x1c]
+ cmp r0, #0x0
+ beq _020CBD44
+_020CBD74:
+ cmp r5, #0x0
+ ldrne r1, [r6, #0x10]
+ ldrne r0, [r6, #0x18]
+ ldrne r0, [r1, r0, lsl #0x2]
+ strne r0, [r5, #0x0]
+ ldr r0, [r6, #0x18]
+ ldr r1, [r6, #0x14]
+ add r0, r0, #0x1
+ bl _s32_div_f
+ str r1, [r6, #0x18]
+ ldr r1, [r6, #0x1c]
+ mov r0, r6
+ sub r1, r1, #0x1
+ str r1, [r6, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start OS_SendMessage
+OS_SendMessage: ; 0x020CBDC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r2, [r6, #0x1c]
+ ldr r1, [r6, #0x14]
+ mov r4, r0
+ cmp r1, r2
+ bgt _020CBE2C
+ and r7, r7, #0x1
+_020CBDF4:
+ cmp r7, #0x0
+ bne _020CBE14
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CBE14:
+ mov r0, r6
+ bl OS_SleepThread
+ ldr r2, [r6, #0x1c]
+ ldr r1, [r6, #0x14]
+ cmp r1, r2
+ ble _020CBDF4
+_020CBE2C:
+ ldr r0, [r6, #0x18]
+ add r0, r0, r2
+ bl _s32_div_f
+ ldr r2, [r6, #0x10]
+ add r0, r6, #0x8
+ str r5, [r2, r1, lsl #0x2]
+ ldr r1, [r6, #0x1c]
+ add r1, r1, #0x1
+ str r1, [r6, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start OS_InitMessageQueue
+OS_InitMessageQueue: ; 0x020CBE6C
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldr r3, [r0, #0x4]
+ str r3, [r0, #0x0]
+ str r12, [r0, #0xc]
+ ldr r3, [r0, #0xc]
+ str r3, [r0, #0x8]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r12, [r0, #0x18]
+ str r12, [r0, #0x1c]
+ bx lr
+
+ arm_func_start OSi_DequeueItem
+OSi_DequeueItem: ; 0x020CBE9C
+ ldr r2, [r1, #0x10]
+ ldr r1, [r1, #0x14]
+ cmp r2, #0x0
+ streq r1, [r0, #0x8c]
+ strne r1, [r2, #0x14]
+ cmp r1, #0x0
+ streq r2, [r0, #0x88]
+ strne r2, [r1, #0x10]
+ bx lr
+
+ arm_func_start OSi_EnqueueTail
+OSi_EnqueueTail: ; 0x020CBEC0
+ ldr r2, [r0, #0x8c]
+ cmp r2, #0x0
+ streq r1, [r0, #0x88]
+ strne r1, [r2, #0x10]
+ str r2, [r1, #0x14]
+ mov r2, #0x0
+ str r2, [r1, #0x10]
+ str r1, [r0, #0x8c]
+ bx lr
+
+ arm_func_start OS_TryLockMutex
+OS_TryLockMutex: ; 0x020CBEE4
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r2, [r5, #0x8]
+ ldr r1, _020CBF54 ; =OSi_ThreadInfo
+ mov r4, r0
+ cmp r2, #0x0
+ ldr r0, [r1, #0x4]
+ bne _020CBF28
+ str r0, [r5, #0x8]
+ ldr r2, [r5, #0xc]
+ mov r1, r5
+ add r2, r2, #0x1
+ str r2, [r5, #0xc]
+ bl OSi_EnqueueTail
+ mov r6, #0x1
+ b _020CBF40
+_020CBF28:
+ cmp r2, r0
+ ldreq r0, [r5, #0xc]
+ moveq r6, #0x1
+ addeq r0, r0, #0x1
+ streq r0, [r5, #0xc]
+ movne r6, #0x0
+_020CBF40:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CBF54: .word OSi_ThreadInfo
+
+ arm_func_start OSi_UnlockAllMutex
+OSi_UnlockAllMutex: ; 0x020CBF58
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x88]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ add r5, r6, #0x88
+ mov r4, #0x0
+_020CBF78:
+ mov r0, r5
+ bl OSi_RemoveMutexLinkFromQueue
+ str r4, [r0, #0xc]
+ str r4, [r0, #0x8]
+ bl OS_WakeupThread
+ ldr r0, [r6, #0x88]
+ cmp r0, #0x0
+ bne _020CBF78
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start OS_UnlockMutex
+OS_UnlockMutex: ; 0x020CBFA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CC00C ; =OSi_ThreadInfo
+ mov r4, r0
+ ldr r0, [r1, #0x4]
+ ldr r1, [r5, #0x8]
+ cmp r1, r0
+ bne _020CBFF8
+ ldr r1, [r5, #0xc]
+ sub r1, r1, #0x1
+ str r1, [r5, #0xc]
+ ldr r1, [r5, #0xc]
+ cmp r1, #0x0
+ bne _020CBFF8
+ mov r1, r5
+ bl OSi_DequeueItem
+ mov r1, #0x0
+ mov r0, r5
+ str r1, [r5, #0x8]
+ bl OS_WakeupThread
+_020CBFF8:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CC00C: .word OSi_ThreadInfo
+
+ arm_func_start OS_LockMutex
+OS_LockMutex: ; 0x020CC010
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CC098 ; =OSi_ThreadInfo
+ mov r4, r0
+ ldr r7, [r1, #0x4]
+ mov r6, #0x0
+_020CC030:
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x0
+ bne _020CC05C
+ str r7, [r5, #0x8]
+ ldr r1, [r5, #0xc]
+ mov r0, r7
+ add r2, r1, #0x1
+ mov r1, r5
+ str r2, [r5, #0xc]
+ bl OSi_EnqueueTail
+ b _020CC084
+_020CC05C:
+ cmp r0, r7
+ ldreq r0, [r5, #0xc]
+ addeq r0, r0, #0x1
+ streq r0, [r5, #0xc]
+ beq _020CC084
+ mov r0, r5
+ str r5, [r7, #0x84]
+ bl OS_SleepThread
+ str r6, [r7, #0x84]
+ b _020CC030
+_020CC084:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020CC098: .word OSi_ThreadInfo
+
+ arm_func_start OS_InitMutex
+OS_InitMutex: ; 0x020CC09C
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x8]
+ str r2, [r0, #0xc]
+ bx lr
+
+ arm_func_start DC_InvalidateAll
+DC_InvalidateAll: ; 0x020CC0B8
+ mov r0, #0x0
+ mcr p15, 0x0, r0, c7, c6, 0x0
+ bx lr
+
+ arm_func_start DC_StoreAll
+DC_StoreAll: ; 0x020CC0C4
+ mov r1, #0x0
+_020CC0C8:
+ mov r0, #0x0
+_020CC0CC:
+ orr r2, r1, r0
+ mcr p15, 0x0, r2, c7, c10, 0x2
+ add r0, r0, #0x20
+ cmp r0, #0x400
+ blt _020CC0CC
+ add r1, r1, #0x40000000
+ cmp r1, #0x0
+ bne _020CC0C8
+ bx lr
+
+ arm_func_start DC_FlushAll
+DC_FlushAll: ; 0x020CC0F0
+ mov r12, #0x0
+ mov r1, #0x0
+_020CC0F8:
+ mov r0, #0x0
+_020CC0FC:
+ orr r2, r1, r0
+ mcr p15, 0x0, r12, c7, c10, 0x4
+ mcr p15, 0x0, r2, c7, c14, 0x2
+ add r0, r0, #0x20
+ cmp r0, #0x400
+ blt _020CC0FC
+ add r1, r1, #0x40000000
+ cmp r1, #0x0
+ bne _020CC0F8
+ bx lr
+
+ arm_func_start DC_InvalidateRange
+DC_InvalidateRange: ; 0x020CC124
+ add r1, r1, r0
+ bic r0, r0, #0x1f
+_020CC12C:
+ mcr p15, 0x0, r0, c7, c6, 0x1
+ add r0, r0, #0x20
+ cmp r0, r1
+ blt _020CC12C
+ bx lr
+
+ arm_func_start DC_StoreRange
+DC_StoreRange: ; 0x020CC140
+ add r1, r1, r0
+ bic r0, r0, #0x1f
+_020CC148:
+ mcr p15, 0x0, r0, c7, c10, 0x1
+ add r0, r0, #0x20
+ cmp r0, r1
+ blt _020CC148
+ bx lr
+
+ arm_func_start DC_FlushRange
+DC_FlushRange: ; 0x020CC15C
+ mov r12, #0x0
+ add r1, r1, r0
+ bic r0, r0, #0x1f
+_020CC168:
+ mcr p15, 0x0, r12, c7, c10, 0x4
+ mcr p15, 0x0, r0, c7, c14, 0x1
+ add r0, r0, #0x20
+ cmp r0, r1
+ blt _020CC168
+ bx lr
+
+ arm_func_start DC_WaitWriteBufferEmpty
+DC_WaitWriteBufferEmpty: ; 0x020CC180
+ mov r0, #0x0
+ mcr p15, 0x0, r0, c7, c10, 0x4
+ bx lr
+
+ arm_func_start IC_InvalidateAll
+IC_InvalidateAll: ; 0x020CC18C
+ mov r0, #0x0
+ mcr p15, 0x0, r0, c7, c5, 0x0
+ bx lr
+
+ arm_func_start IC_InvalidateRange
+IC_InvalidateRange:
+ add r1, r1, r0
+ bic r0, r0, #0x1f
+_020CC1A0:
+ mcr p15, 0x0, r0, c7, c5, 0x1
+ add r0, r0, #0x20
+ cmp r0, r1
+ blt _020CC1A0
+ bx lr
+
+ arm_func_start OS_Init
+OS_Init: ; 0x020CC1B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_InitArena
+ bl PXI_Init
+ bl OS_InitLock
+ bl OS_InitArenaEx
+ bl OS_InitIrqTable
+ bl OS_SetIrqStackChecker
+ bl OS_InitException
+ bl MI_Init
+ bl OS_InitVAlarm
+ bl OSi_InitVramExclusive
+ bl OS_InitThread
+ bl OS_InitReset
+ bl CTRDG_Init
+ bl CARD_Init
+ bl PM_Init
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start OS_AllocFromArenaHi
+OS_AllocFromArenaHi: ; 0x020CC204
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_GetArenaHi
+_020CC218:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ sub r1, r5, #0x1
+ mvn r2, r1
+ and r0, r0, r2
+ sub r1, r0, r6
+ mov r0, r4
+ and r5, r1, r2
+ bl OS_GetArenaLo
+ cmp r5, r0
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r6, lr}
+ bxcc lr
+ mov r0, r4
+ mov r1, r5
+ bl OS_SetArenaHi
+ mov r0, r5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start OS_AllocFromArenaLo
+OS_AllocFromArenaLo: ; 0x020CC26C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_GetArenaLo
+_020CC284:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7, lr}
+ bxeq lr
+ add r0, r0, r5
+ sub r1, r5, #0x1
+ mvn r2, r1
+ sub r0, r0, #0x1
+ and r4, r2, r0
+ add r0, r4, r6
+ add r0, r0, r5
+ sub r1, r0, #0x1
+ mov r0, r7
+ and r5, r2, r1
+ bl OS_GetArenaHi
+ cmp r5, r0
+ addhi sp, sp, #0x4
+ movhi r0, #0x0
+ ldmhiia sp!, {r4-r7, lr}
+ bxhi lr
+ mov r0, r7
+ mov r1, r5
+ bl OS_SetArenaLo
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7, lr}
+ bx lr
+
+ arm_func_start OS_SetArenaLo
+OS_SetArenaLo: ; 0x020CC2F4
+ mov r0, r0, lsl #0x2
+ add r0, r0, #0x2700000
+ add r0, r0, #0xff000
+ str r1, [r0, #0xda0]
+ bx lr
+
+ arm_func_start OS_SetArenaHi
+OS_SetArenaHi:
+ mov r0, r0, lsl #0x2
+ add r0, r0, #0x2700000
+ add r0, r0, #0xff000
+ str r1, [r0, #0xdc4]
+ bx lr
+
+ arm_func_start OS_GetInitArenaLo
+OS_GetInitArenaLo: ; 0x020CC31C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x6
+ addls pc, pc, r0, lsl #0x2
+ b _020CC3DC
+_020CC330:
+ b _020CC34C
+ b _020CC3DC
+ b _020CC35C
+ b _020CC39C
+ b _020CC3AC
+ b _020CC3BC
+ b _020CC3CC
+_020CC34C:
+ add sp, sp, #0x4
+ ldr r0, _020CC3EC ; =0x0225FFA0
+ ldmfd sp!, {lr}
+ bx lr
+_020CC35C:
+ ldr r0, _020CC3F0 ; =OSi_MainExArenaEnabled
+ ldr r0, [r0]
+ cmp r0, #0x0
+ beq _020CC37C
+ bl OS_GetConsoleType
+ and r0, r0, #0x3
+ cmp r0, #0x1
+ bne _020CC38C
+_020CC37C:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmfd sp!, {lr}
+ bx lr
+_020CC38C:
+ add sp, sp, #0x4
+ ldr r0, _020CC3F4 ; =0x023E0000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC39C:
+ add sp, sp, #0x4
+ ldr r0, _020CC3F8 ; =0x01FF8720
+ ldmfd sp!, {lr}
+ bx lr
+_020CC3AC:
+ add sp, sp, #0x4
+ ldr r0, _020CC3FC ; =0x027E0080
+ ldmfd sp!, {lr}
+ bx lr
+_020CC3BC:
+ add sp, sp, #0x4
+ ldr r0, _020CC400 ; =0x027FF000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC3CC:
+ add sp, sp, #0x4
+ ldr r0, _020CC404 ; =0x037F8000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC3DC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020CC3EC: .word SDK_MAIN_ARENA_LO
+_020CC3F0: .word OSi_MainExArenaEnabled
+_020CC3F4: .word SDK_SECTION_ARENA_EX_START
+_020CC3F8: .word SDK_SECTION_ARENA_ITCM_START
+_020CC3FC: .word SDK_SECTION_ARENA_DTCM_START
+_020CC400: .word 0x027FF000
+_020CC404: .word 0x037F8000
+
+ arm_func_start OS_GetInitArenaHi
+OS_GetInitArenaHi: ; 0x020CC408
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x6
+ addls pc, pc, r0, lsl #0x2
+ b _020CC508
+_020CC41C:
+ b _020CC438
+ b _020CC508
+ b _020CC448
+ b _020CC488
+ b _020CC498
+ b _020CC4E8
+ b _020CC4F8
+_020CC438:
+ add sp, sp, #0x4
+ ldr r0, _020CC518 ; =0x023E0000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC448:
+ ldr r0, _020CC51C ; =OSi_MainExArenaEnabled
+ ldr r0, [r0]
+ cmp r0, #0x0
+ beq _020CC468
+ bl OS_GetConsoleType
+ and r0, r0, #0x3
+ cmp r0, #0x1
+ bne _020CC478
+_020CC468:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmfd sp!, {lr}
+ bx lr
+_020CC478:
+ add sp, sp, #0x4
+ mov r0, #0x2700000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC488:
+ add sp, sp, #0x4
+ mov r0, #0x2000000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC498:
+ ldr r0, _020CC520 ; =0x027E0000
+ ldr r1, _020CC524 ; =0x00000000
+ ldr r2, _020CC528 ; =0x00000400
+ add r3, r0, #0x3f80
+ cmp r1, #0x0
+ sub r2, r3, r2
+ bne _020CC4CC
+ ldr r1, _020CC52C ; =0x027E0080
+ add sp, sp, #0x4
+ cmp r0, r1
+ movcc r0, r1
+ ldmfd sp!, {lr}
+ bx lr
+_020CC4CC:
+ cmp r1, #0x0
+ ldrlt r0, _020CC52C ; =0x027E0080
+ add sp, sp, #0x4
+ sublt r0, r0, r1
+ subge r0, r2, r1
+ ldmfd sp!, {lr}
+ bx lr
+_020CC4E8:
+ add sp, sp, #0x4
+ ldr r0, _020CC530 ; =0x027FF680
+ ldmfd sp!, {lr}
+ bx lr
+_020CC4F8:
+ add sp, sp, #0x4
+ ldr r0, _020CC534 ; =0x037F8000
+ ldmfd sp!, {lr}
+ bx lr
+_020CC508:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020CC518: .word 0x023E0000
+_020CC51C: .word OSi_MainExArenaEnabled
+_020CC520: .word 0x027E0000
+_020CC524: .word 0x00000000
+_020CC528: .word 0x00000400
+_020CC52C: .word 0x027E0080
+_020CC530: .word 0x027FF680
+_020CC534: .word 0x037F8000
+
+ arm_func_start OS_GetArenaLo
+OS_GetArenaLo:
+ mov r0, r0, lsl #0x2
+ add r0, r0, #0x2700000
+ add r0, r0, #0xff000
+ ldr r0, [r0, #0xda0]
+ bx lr
+
+ arm_func_start OS_GetArenaHi
+OS_GetArenaHi:
+ mov r0, r0, lsl #0x2
+ add r0, r0, #0x2700000
+ add r0, r0, #0xff000
+ ldr r0, [r0, #0xdc4]
+ bx lr
+
+ arm_func_start OS_InitArenaEx
+OS_InitArenaEx: ; 0x020CC560
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x2
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x2
+ bl OS_SetArenaHi
+ mov r0, #0x2
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x2
+ bl OS_SetArenaLo
+ ldr r0, _020CC5D4 ; =OSi_MainExArenaEnabled
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020CC5B8
+ bl OS_GetConsoleType
+ and r0, r0, #0x3
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+_020CC5B8:
+ ldr r0, _020CC5D8 ; =0x0200002B
+ bl OS_SetProtectionRegion1
+ ldr r0, _020CC5DC ; =0x023E0021
+ bl OS_SetProtectionRegion2
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CC5D4: .word OSi_MainExArenaEnabled
+_020CC5D8: .word 0x0200002B
+_020CC5DC: .word 0x023E0021
+
+ arm_func_start OS_InitArena
+OS_InitArena: ; 0x020CC5E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CC6F4 ; =OSi_Initialized
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r2, #0x1
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x0
+ bl OS_SetArenaHi
+_020CC61C:
+ mov r0, #0x0
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x0
+ bl OS_SetArenaLo
+ mov r0, #0x2
+ mov r1, #0x0
+ bl OS_SetArenaLo
+ mov r0, #0x2
+ mov r1, #0x0
+ bl OS_SetArenaHi
+ mov r0, #0x3
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x3
+ bl OS_SetArenaHi
+ mov r0, #0x3
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x3
+ bl OS_SetArenaLo
+ mov r0, #0x4
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x4
+ bl OS_SetArenaHi
+ mov r0, #0x4
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x4
+ bl OS_SetArenaLo
+ mov r0, #0x5
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x5
+ bl OS_SetArenaHi
+ mov r0, #0x5
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x5
+ bl OS_SetArenaLo
+ mov r0, #0x6
+ bl OS_GetInitArenaHi
+ mov r1, r0
+ mov r0, #0x6
+ bl OS_SetArenaHi
+ mov r0, #0x6
+ bl OS_GetInitArenaLo
+ mov r1, r0
+ mov r0, #0x6
+ bl OS_SetArenaLo
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020CC6F4: .word OSi_Initialized
+
+ arm_func_start OS_FreeToHeap
+OS_FreeToHeap: ; 0x020CC6F8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r5, r1
+ mov r4, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020CC768 ; =OSi_HeapInfo
+ mov r6, r0
+ ldr r0, [r1, r7, lsl #0x2]
+ cmp r5, #0x0
+ ldrlt r5, [r0, #0x0]
+ ldr r1, [r0, #0x10]
+ mov r0, #0xc
+ mla r7, r5, r0, r1
+ sub r4, r4, #0x20
+ ldr r0, [r7, #0x8]
+ mov r1, r4
+ bl DLExtract
+ str r0, [r7, #0x8]
+ ldr r0, [r7, #0x4]
+ mov r1, r4
+ bl DLInsert
+ str r0, [r7, #0x4]
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020CC768: .word OSi_HeapInfo
+
+ arm_func_start OS_AllocFromHeap
+OS_AllocFromHeap: ; 0x020CC76C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020CC894 ; =OSi_HeapInfo
+ mov r4, r0
+ ldr r1, [r1, r6, lsl #0x2]
+ cmp r1, #0x0
+ bne _020CC7AC
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CC7AC:
+ cmp r5, #0x0
+ ldrlt r5, [r1, #0x0]
+ ldr r1, [r1, #0x10]
+ mov r0, #0xc
+ mla r6, r5, r0, r1
+ ldr r0, [r6, #0x4]
+ add r1, r7, #0x20
+ add r1, r1, #0x1f
+ mov r5, r0
+ cmp r0, #0x0
+ bic r7, r1, #0x1f
+ beq _020CC7F4
+_020CC7DC:
+ ldr r1, [r5, #0x8]
+ cmp r7, r1
+ ble _020CC7F4
+ ldr r5, [r5, #0x4]
+ cmp r5, #0x0
+ bne _020CC7DC
+_020CC7F4:
+ cmp r5, #0x0
+ bne _020CC814
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020CC814:
+ ldr r1, [r5, #0x8]
+ sub r1, r1, r7
+ cmp r1, #0x40
+ bhs _020CC834
+ mov r1, r5
+ bl DLExtract
+ str r0, [r6, #0x4]
+ b _020CC86C
+_020CC834:
+ str r7, [r5, #0x8]
+ add r2, r5, r7
+ str r1, [r2, #0x8]
+ ldr r0, [r5, #0x0]
+ str r0, [r5, r7]
+ ldr r0, [r5, #0x4]
+ str r0, [r2, #0x4]
+ ldr r0, [r2, #0x4]
+ cmp r0, #0x0
+ strne r2, [r0, #0x0]
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ strne r2, [r0, #0x4]
+ streq r2, [r6, #0x4]
+_020CC86C:
+ ldr r0, [r6, #0x8]
+ mov r1, r5
+ bl DLAddFront
+ str r0, [r6, #0x8]
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add r0, r5, #0x20
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020CC894: .word OSi_HeapInfo
+
+ arm_func_start DLInsert
+DLInsert: ; 0x020CC898
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, r0
+ cmp r0, #0x0
+ mov lr, #0x0
+ beq _020CC8C8
+_020CC8B0:
+ cmp r1, r12
+ bls _020CC8C8
+ mov lr, r12
+ ldr r12, [r12, #0x4]
+ cmp r12, #0x0
+ bne _020CC8B0
+_020CC8C8:
+ str r12, [r1, #0x4]
+ str lr, [r1, #0x0]
+ cmp r12, #0x0
+ beq _020CC908
+ str r1, [r12, #0x0]
+ ldr r3, [r1, #0x8]
+ add r2, r1, r3
+ cmp r2, r12
+ bne _020CC908
+ ldr r2, [r12, #0x8]
+ add r2, r3, r2
+ str r2, [r1, #0x8]
+ ldr r12, [r12, #0x4]
+ str r12, [r1, #0x4]
+ cmp r12, #0x0
+ strne r1, [r12, #0x0]
+_020CC908:
+ cmp lr, #0x0
+ beq _020CC950
+ str r1, [lr, #0x4]
+ ldr r2, [lr, #0x8]
+ add r3, lr, r2
+ cmp r3, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, [r1, #0x8]
+ add sp, sp, #0x4
+ add r1, r2, r1
+ str r1, [lr, #0x8]
+ str r12, [lr, #0x4]
+ cmp r12, #0x0
+ strne lr, [r12, #0x0]
+ ldmia sp!, {lr}
+ bx lr
+_020CC950:
+ mov r0, r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start DLExtract
+DLExtract: ; 0x020CC960
+ ldr r3, [r1, #0x4]
+ cmp r3, #0x0
+ ldrne r2, [r1, #0x0]
+ strne r2, [r3, #0x0]
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ ldreq r0, [r1, #0x4]
+ ldrne r1, [r1, #0x4]
+ strne r1, [r2, #0x4]
+ bx lr
+
+ arm_func_start DLAddFront
+DLAddFront: ; 0x020CC988
+ str r0, [r1, #0x4]
+ mov r2, #0x0
+ str r2, [r1, #0x0]
+ cmp r0, #0x0
+ strne r1, [r0, #0x0]
+ mov r0, r1
+ bx lr
+
+ arm_func_start OS_GetDTCMAddress
+OS_GetDTCMAddress: ; 0x020CC9A4
+ mrc p15, 0x0, r0, c9, c1, 0x0
+ ldr r1, _020CC9B4 ; =0xFFFFF000
+ and r0, r0, r1
+ bx lr
+ .balign 4
+_020CC9B4: .word 0xFFFFF000
+
+ arm_func_start OS_EnableProtectionUnit
+OS_EnableProtectionUnit: ; 0x020CC9B8
+ mrc p15, 0x0, r0, c1, c0, 0x0
+ orr r0, r0, #0x1
+ mcr p15, 0x0, r0, c1, c0, 0x0
+ bx lr
+
+ arm_func_start OS_DisableProtectionUnit
+OS_DisableProtectionUnit: ; 0x020CC9C8
+ mrc p15, 0x0, r0, c1, c0, 0x0
+ bic r0, r0, #0x1
+ mcr p15, 0x0, r0, c1, c0, 0x0
+ bx lr
+
+ arm_func_start OS_SetDPermissionsForProtectionRegion
+OS_SetDPermissionsForProtectionRegion: ; 0x020CC9D8
+ mrc p15, 0x0, r2, c5, c0, 0x2
+ bic r2, r2, r0
+ orr r2, r2, r1
+ mcr p15, 0x0, r2, c5, c0, 0x2
+ bx lr
+
+ arm_func_start OS_SetProtectionRegion1
+OS_SetProtectionRegion1: ; 0x020CC9EC
+ mcr p15, 0x0, r0, c6, c1, 0x0
+ bx lr
+
+ arm_func_start OS_SetProtectionRegion2
+OS_SetProtectionRegion2: ; 0x020CC9F4
+ mcr p15, 0x0, r0, c6, c2, 0x0
+ bx lr
+
+ arm_func_start OSi_ExceptionHandler
+OSi_ExceptionHandler: ; 0x020CC9FC
+ ldr ip, _020CCA68 ; =OSi_DebuggerHandler
+ ldr r12, [r12, #0x0]
+ cmp r12, #0x0
+ movne lr, pc
+ bxne r12
+ ldr ip, _020CCA6C ; =0x02000000
+ stmdb r12!, {r0-r3,sp-lr}
+ and r0, sp, #0x1
+ mov sp, r12
+ mrs r1, cpsr
+ and r1, r1, #0x1f
+ teq r1, #0x17
+ bne _020CCA38
+ bl OSi_GetAndDisplayContext
+ b _020CCA44
+_020CCA38:
+ teq r1, #0x1b
+ bne _020CCA44
+ bl OSi_GetAndDisplayContext
+_020CCA44:
+ ldr ip, _020CCA68 ; =OSi_DebuggerHandler
+ ldr r12, [r12, #0x0]
+ cmp r12, #0x0
+_020CCA50:
+ beq _020CCA50
+_020CCA54:
+ mov r0, r0
+ b _020CCA54
+_020CCA5C:
+ ldmia sp!, {r0-r3,ip,lr}
+ mov sp, ip
+ bx lr
+_020CCA68: .word OSi_DebuggerHandler
+_020CCA6C: .word 0x02000000
+
+ arm_func_start OSi_GetAndDisplayContext
+OSi_GetAndDisplayContext: ; 0x020CCA70
+ stmdb sp!, {r0,lr}
+ bl OSi_SetExContext
+ bl OSi_DisplayExContext
+ ldmia sp!, {r0,lr}
+ bx lr
+
+ arm_func_start OSi_SetExContext
+OSi_SetExContext: ; 0x020CCA84
+ ldr r1, _020CCB10 ; =OSi_ExContext
+ mrs r2, cpsr
+ str r2, [r1, #0x74]
+ str r0, [r1, #0x6c]
+ ldr r0, [r12, #0x0]
+ str r0, [r1, #0x4]
+ ldr r0, [r12, #0x4]
+ str r0, [r1, #0x8]
+ ldr r0, [r12, #0x8]
+ str r0, [r1, #0xc]
+ ldr r0, [r12, #0xc]
+ str r0, [r1, #0x10]
+ ldr r2, [r12, #0x10]
+ bic r2, r2, #0x1
+ add r0, r1, #0x14
+ stmia r0, {r4-r11}
+ str r12, [r1, #0x70]
+ ldr r0, [r2, #0x0]
+ str r0, [r1, #0x64]
+ ldr r3, [r2, #0x4]
+ str r3, [r1, #0x0]
+ ldr r0, [r2, #0x8]
+ str r0, [r1, #0x34]
+ ldr r0, [r2, #0xc]
+ str r0, [r1, #0x40]
+ mrs r0, cpsr
+ orr r3, r3, #0x80
+ bic r3, r3, #0x20
+ msr cpsr_fsxc, r3
+ str sp, [r1, #0x38]
+ str lr, [r1, #0x3c]
+ mrs r2, spsr
+ str r2, [r1, #0x7c]
+ msr cpsr_fsxc, r0
+ bx lr
+ .balign 4
+_020CCB10: .word OSi_ExContext
+
+ arm_func_start OSi_DisplayExContext
+OSi_DisplayExContext: ; 0x020CCB14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CCB70 ; =OSi_UserExceptionHandler
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ mov r0, sp
+ ldr r1, _020CCB74 ; =0x0000009F
+ msr cpsr_fsxc, r1
+ mov sp, r0
+ bl OS_EnableProtectionUnit
+ ldr r1, _020CCB78 ; =OSi_UserExceptionHandlerArg
+ ldr r0, _020CCB70 ; =OSi_UserExceptionHandler
+ ldr r1, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r0, _020CCB7C ; =OSi_ExContext
+ blx r2
+ bl OS_DisableProtectionUnit
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCB70: .word OSi_UserExceptionHandler
+_020CCB74: .word 0x0000009F
+_020CCB78: .word OSi_UserExceptionHandlerArg
+_020CCB7C: .word OSi_ExContext
+
+ arm_func_start OS_InitException
+OS_InitException: ; 0x020CCB80
+ ldr r0, _020CCBDC ; =0x027FFD9C
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x2600000
+ blo _020CCBA0
+ cmp r1, #0x2800000
+ ldrlo r0, _020CCBE0 ; =OSi_DebuggerHandler
+ strcc r1, [r0, #0x0]
+ blo _020CCBAC
+_020CCBA0:
+ ldr r0, _020CCBE0 ; =OSi_DebuggerHandler
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020CCBAC:
+ ldr r0, _020CCBE0 ; =OSi_DebuggerHandler
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r2, _020CCBE4 ; =OSi_ExceptionHandler
+ ldreq r1, _020CCBDC ; =0x027FFD9C
+ ldreq r0, _020CCBE8 ; =0x027E3000
+ streq r2, [r1, #0x0]
+ streq r2, [r0, #0xfdc]
+ ldr r0, _020CCBEC ; =OSi_UserExceptionHandler
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CCBDC: .word 0x027FFD9C
+_020CCBE0: .word OSi_DebuggerHandler
+_020CCBE4: .word OSi_ExceptionHandler
+_020CCBE8: .word 0x027E3000
+_020CCBEC: .word OSi_UserExceptionHandler
+
+ arm_func_start OSi_SetTimerReserved
+OSi_SetTimerReserved: ; 0x020CCBF0
+ ldr r1, _020CCC08 ; =OSi_TimerReserved
+ mov r2, #0x1
+ ldrh r3, [r1, #0x0]
+ orr r0, r3, r2, lsl r0
+ strh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020CCC08: .word OSi_TimerReserved
+
+ arm_func_start OS_GetTickLo
+OS_GetTickLo: ; 0x020CCC0C
+ ldr r0, _020CCC18 ; =0x04000100
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CCC18: .word 0x04000100
+
+ arm_func_start OS_GetTick
+OS_GetTick: ; 0x020CCC1C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ bl OS_DisableInterrupts
+ ldr r1, _020CCCBC ; =0x04000100
+ ldr r3, _020CCCC0 ; =OSi_TickCounter
+ ldrh r12, [r1, #0x0]
+ ldr r2, _020CCCC4 ; =0x0000FFFF
+ mvn r1, #0x0
+ strh r12, [sp, #0x0]
+ ldr r12, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ and r1, r12, r1
+ and r2, r3, r2
+ str r1, [sp, #0x4]
+ ldr r1, _020CCCC8 ; =0x04000214
+ str r2, [sp, #0x8]
+ ldr r1, [r1, #0x0]
+ ands r1, r1, #0x8
+ beq _020CCC90
+ ldrh r1, [sp, #0x0]
+ ands r1, r1, #0x8000
+ bne _020CCC90
+ ldr r3, [sp, #0x4]
+ mov r1, #0x1
+ ldr r2, [sp, #0x8]
+ adds r3, r3, r1
+ adc r1, r2, #0x0
+ str r3, [sp, #0x4]
+ str r1, [sp, #0x8]
+_020CCC90:
+ bl OS_RestoreInterrupts
+ ldr r2, [sp, #0x4]
+ ldr r1, [sp, #0x8]
+ ldrh r0, [sp, #0x0]
+ mov r1, r1, lsl #0x10
+ orr r1, r1, r2, lsr #0x10
+ orr r1, r1, r0, asr #0x1f
+ orr r0, r0, r2, lsl #0x10
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCCBC: .word 0x04000100
+_020CCCC0: .word OSi_TickCounter
+_020CCCC4: .word 0x0000FFFF
+_020CCCC8: .word 0x04000214
+
+ arm_func_start OSi_CountUpTick
+OSi_CountUpTick: ; 0x020CCCCC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020CCD40 ; =OSi_TickCounter
+ ldr r1, _020CCD44 ; =OSi_NeedResetTimer
+ ldr r12, [r2, #0x0]
+ mov r0, #0x1
+ ldr r3, [r2, #0x4]
+ adds r12, r12, r0
+ ldr r0, [r1, #0x0]
+ adc r3, r3, #0x0
+ str r12, [r2, #0x0]
+ str r3, [r2, #0x4]
+ cmp r0, #0x0
+ mov r3, #0x0
+ beq _020CCD24
+ ldr r2, _020CCD48 ; =0x04000102
+ ldr r0, _020CCD4C ; =0x04000100
+ strh r3, [r2, #0x0]
+ strh r3, [r0, #0x0]
+ mov r0, #0xc1
+ strh r0, [r2, #0x0]
+ str r3, [r1, #0x0]
+_020CCD24:
+ mov r0, #0x0
+ ldr r1, _020CCD50 ; =OSi_CountUpTick
+ mov r2, r0
+ bl OSi_EnterTimerCallback
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCD40: .word OSi_TickCounter
+_020CCD44: .word OSi_NeedResetTimer
+_020CCD48: .word 0x04000102
+_020CCD4C: .word 0x04000100
+_020CCD50: .word OSi_CountUpTick
+
+ arm_func_start OS_IsTickAvailable
+OS_IsTickAvailable: ; 0x020CCD54
+ ldr r0, _020CCD60 ; =OSi_UseTick
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CCD60: .word OSi_UseTick
+
+ arm_func_start OS_InitTick
+OS_InitTick: ; 0x020CCD64
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CCDE8 ; =OSi_UseTick
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r2, #0x1
+ mov r0, #0x0
+ strh r2, [r1, #0x0]
+ bl OSi_SetTimerReserved
+ ldr r0, _020CCDEC ; =OSi_TickCounter
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ ldr r3, _020CCDF0 ; =0x04000102
+ str r2, [r0, #0x4]
+ ldr r0, _020CCDF4 ; =0x04000100
+ strh r2, [r3, #0x0]
+ ldr r1, _020CCDF8 ; =OSi_CountUpTick
+ strh r2, [r0, #0x0]
+ mov r2, #0xc1
+ mov r0, #0x8
+ strh r2, [r3, #0x0]
+ bl OS_SetIrqFunction
+ mov r0, #0x8
+ bl OS_EnableIrqMask
+ ldr r0, _020CCDFC ; =OSi_NeedResetTimer
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CCDE8: .word OSi_UseTick
+_020CCDEC: .word OSi_TickCounter
+_020CCDF0: .word 0x04000102
+_020CCDF4: .word 0x04000100
+_020CCDF8: .word OSi_CountUpTick
+_020CCDFC: .word OSi_NeedResetTimer
+
+ arm_func_start OSi_AlarmHandler
+OSi_AlarmHandler: ; 0x020CCE00
+ stmdb sp!, {r0,lr}
+ bl OSi_ArrangeTimer
+ ldmia sp!, {r0,lr}
+ bx lr
+
+ arm_func_start OSi_ArrangeTimer
+OSi_ArrangeTimer: ; 0x020CCE10
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CCF1C ; =0x04000106
+ mov r2, #0x0
+ mov r0, #0x10
+ strh r2, [r1, #0x0]
+ bl OS_DisableIrqMask
+ ldr r0, _020CCF20 ; =0x027E0000
+ add r0, r0, #0x3000
+ ldr r1, [r0, #0xff8]
+ orr r1, r1, #0x10
+ str r1, [r0, #0xff8]
+ bl OS_GetTick
+ ldr r2, _020CCF24 ; =OSi_AlarmQueue
+ ldr r4, [r2, #0x0]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r3, [r4, #0x10]
+ ldr r12, [r4, #0xc]
+ cmp r1, r3
+ cmpeq r0, r12
+ bhs _020CCE84
+ mov r0, r4
+ bl OSi_SetTimer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CCE84:
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ streq r0, [r2, #0x4]
+ str r1, [r2, #0x0]
+ movne r0, #0x0
+ strne r0, [r1, #0x14]
+ ldr r2, [r4, #0x1c]
+ ldr r1, [r4, #0x20]
+ mov r0, #0x0
+ cmp r1, r0
+ ldr r5, [r4, #0x0]
+ cmpeq r2, r0
+ streq r0, [r4, #0x0]
+ cmp r5, #0x0
+ beq _020CCECC
+ ldr r0, [r4, #0x4]
+ blx r5
+_020CCECC:
+ ldr r2, [r4, #0x1c]
+ ldr r0, [r4, #0x20]
+ mov r1, #0x0
+ cmp r0, r1
+ cmpeq r2, r1
+ beq _020CCEF4
+ mov r0, r4
+ mov r2, r1
+ str r5, [r4, #0x0]
+ bl OSi_InsertAlarm
+_020CCEF4:
+ ldr r0, _020CCF24 ; =OSi_AlarmQueue
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ bl OSi_SetTimer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CCF1C: .word 0x04000106
+_020CCF20: .word 0x027E0000
+_020CCF24: .word OSi_AlarmQueue
+
+ arm_func_start OS_CancelAlarm
+OS_CancelAlarm: ; 0x020CCF28
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, [r5, #0x0]
+ mov r4, r0
+ cmp r1, #0x0
+ bne _020CCF58
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CCF58:
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x0
+ ldreq r2, [r5, #0x14]
+ ldreq r1, _020CCFBC ; =OSi_AlarmQueue
+ streq r2, [r1, #0x4]
+ ldrne r1, [r5, #0x14]
+ strne r1, [r0, #0x14]
+ ldr r1, [r5, #0x14]
+ cmp r1, #0x0
+ strne r0, [r1, #0x18]
+ bne _020CCF98
+ ldr r1, _020CCFBC ; =OSi_AlarmQueue
+ cmp r0, #0x0
+ str r0, [r1, #0x0]
+ beq _020CCF98
+ bl OSi_SetTimer
+_020CCF98:
+ mov r1, #0x0
+ str r1, [r5, #0x0]
+ str r1, [r5, #0x1c]
+ mov r0, r4
+ str r1, [r5, #0x20]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CCFBC: .word OSi_AlarmQueue
+
+ arm_func_start OS_SetAlarm
+OS_SetAlarm: ; 0x020CCFC0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs r6, r0
+ mov r5, r1
+ mov r4, r2
+ mov r7, r3
+ beq _020CCFE8
+ ldr r0, [r6, #0x0]
+ cmp r0, #0x0
+ beq _020CCFEC
+_020CCFE8:
+ bl OS_Terminate
+_020CCFEC:
+ bl OS_DisableInterrupts
+ mov r1, #0x0
+ str r1, [r6, #0x1c]
+ str r1, [r6, #0x20]
+ str r7, [r6, #0x0]
+ ldr r1, [sp, #0x18]
+ mov r7, r0
+ str r1, [r6, #0x4]
+ bl OS_GetTick
+ adds r3, r5, r0
+ adc r2, r4, r1
+ mov r0, r6
+ mov r1, r3
+ bl OSi_InsertAlarm
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start OSi_InsertAlarm
+OSi_InsertAlarm: ; 0x020CD038
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r4, [r8, #0x1c]
+ ldr r3, [r8, #0x20]
+ mov r0, #0x0
+ cmp r3, r0
+ mov r7, r1
+ mov r6, r2
+ cmpeq r4, r0
+ beq _020CD0B4
+ bl OS_GetTick
+ ldr r6, [r8, #0x28]
+ ldr r7, [r8, #0x24]
+ cmp r6, r1
+ cmpeq r7, r0
+ bhs _020CD0B4
+ ldr r5, [r8, #0x1c]
+ ldr r4, [r8, #0x20]
+ subs r0, r0, r7
+ mov r2, r5
+ mov r3, r4
+ sbc r1, r1, r6
+ bl _ll_udiv
+ mov r2, #0x1
+ adds r2, r0, r2
+ adc r0, r1, #0x0
+ umull r3, r1, r5, r2
+ mla r1, r5, r0, r1
+ mla r1, r4, r2, r1
+ adds r7, r7, r3
+ adc r6, r6, r1
+_020CD0B4:
+ str r7, [r8, #0xc]
+ ldr r0, _020CD174 ; =OSi_AlarmQueue
+ str r6, [r8, #0x10]
+ ldr r4, [r0, #0x0]
+ cmp r4, #0x0
+ beq _020CD134
+ mov r1, #0x0
+_020CD0D0:
+ ldr r2, [r4, #0xc]
+ ldr r0, [r4, #0x10]
+ subs r3, r7, r2
+ sbc r2, r6, r0
+ subs r0, r3, r1
+ sbcs r0, r2, r1
+ bge _020CD128
+ ldr r0, [r4, #0x14]
+ str r0, [r8, #0x14]
+ str r8, [r4, #0x14]
+ str r4, [r8, #0x18]
+ ldr r0, [r8, #0x14]
+ cmp r0, #0x0
+ strne r8, [r0, #0x18]
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r1, _020CD174 ; =OSi_AlarmQueue
+ mov r0, r8
+ str r8, [r1, #0x0]
+ bl OSi_SetTimer
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020CD128:
+ ldr r4, [r4, #0x18]
+ cmp r4, #0x0
+ bne _020CD0D0
+_020CD134:
+ ldr r1, _020CD174 ; =OSi_AlarmQueue
+ mov r0, #0x0
+ str r0, [r8, #0x18]
+ ldr r0, [r1, #0x4]
+ str r8, [r1, #0x4]
+ str r0, [r8, #0x14]
+ cmp r0, #0x0
+ strne r8, [r0, #0x18]
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ mov r0, r8
+ str r8, [r1, #0x4]
+ str r8, [r1, #0x0]
+ bl OSi_SetTimer
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020CD174: .word OSi_AlarmQueue
+
+ arm_func_start OS_CreateAlarm
+OS_CreateAlarm: ; 0x020CD178
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start OS_IsAlarmAvailable
+OS_IsAlarmAvailable: ; 0x020CD188
+ ldr r0, _020CD194 ; =OSi_UseAlarm
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020CD194: .word OSi_UseAlarm
+
+ arm_func_start OS_InitAlarm
+OS_InitAlarm: ; 0x020CD198
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CD1E8 ; =OSi_UseAlarm
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r0, #0x1
+ strh r0, [r1, #0x0]
+ bl OSi_SetTimerReserved
+ ldr r1, _020CD1EC ; =OSi_AlarmQueue
+ mov r2, #0x0
+ mov r0, #0x10
+ str r2, [r1, #0x0]
+ str r2, [r1, #0x4]
+ bl OS_DisableIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CD1E8: .word OSi_UseAlarm
+_020CD1EC: .word OSi_AlarmQueue
+
+ arm_func_start OSi_SetTimer
+OSi_SetTimer: ; 0x020CD1F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl OS_GetTick
+ ldr r3, _020CD27C ; =0x04000106
+ mov r2, #0x0
+ strh r2, [r3, #0x0]
+ ldr r12, [r4, #0xc]
+ ldr r3, [r4, #0x10]
+ subs r5, r12, r0
+ sbc r4, r3, r1
+ ldr r1, _020CD280 ; =OSi_AlarmHandler
+ mov r0, #0x1
+ bl OSi_EnterTimerCallback
+ mov r2, #0x0
+ subs r0, r5, r2
+ sbcs r0, r4, r2
+ ldrlt r2, _020CD284 ; =0x0000FFFE
+ blt _020CD254
+ mov r0, #0x10000
+ subs r0, r5, r0
+ sbcs r0, r4, r2
+ mvnlt r0, r5
+ movlt r0, r0, lsl #0x10
+ movlt r2, r0, lsr #0x10
+_020CD254:
+ ldr r0, _020CD288 ; =0x04000104
+ ldr r1, _020CD27C ; =0x04000106
+ strh r2, [r0, #0x0]
+ mov r2, #0xc1
+ mov r0, #0x10
+ strh r2, [r1, #0x0]
+ bl OS_EnableIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CD27C: .word 0x04000106
+_020CD280: .word OSi_AlarmHandler
+_020CD284: .word 0x0000FFFE
+_020CD288: .word 0x04000104
+
+ arm_func_start OS_InitVAlarm
+OS_InitVAlarm: ; 0x020CD28C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020CD2EC ; =OSi_UseVAlarm
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, _020CD2F0 ; =OSi_VAlarmQueue
+ mov r3, #0x0
+ mov r12, #0x1
+ mov r0, #0x4
+ strh r12, [r2, #0x0]
+ str r3, [r1, #0x0]
+ str r3, [r1, #0x4]
+ bl OS_DisableIrqMask
+ ldr r1, _020CD2F4 ; =OSi_VFrameCount
+ mov r2, #0x0
+ ldr r0, _020CD2F8 ; =OSi_PreviousVCount
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CD2EC: .word OSi_UseVAlarm
+_020CD2F0: .word OSi_VAlarmQueue
+_020CD2F4: .word OSi_VFrameCount
+_020CD2F8: .word OSi_PreviousVCount
+
+ arm_func_start OS_EnableInterrupts
+OS_EnableInterrupts: ; 0x020CD2FC
+ mrs r0, cpsr
+ bic r1, r0, #0x80
+ msr cpsr_c, r1
+ and r0, r0, #0x80
+ bx lr
+
+ arm_func_start OS_DisableInterrupts
+OS_DisableInterrupts:
+ mrs r0, cpsr
+ orr r1, r0, #0x80
+ msr cpsr_c, r1
+ and r0, r0, #0x80
+ bx lr
+
+ arm_func_start OS_RestoreInterrupts
+OS_RestoreInterrupts:
+ mrs r1, cpsr
+ bic r2, r1, #0x80
+ orr r2, r2, r0
+ msr cpsr_c, r2
+ and r0, r1, #0x80
+ bx lr
+
+ arm_func_start OS_DisableInterrupts_IrqAndFiq
+OS_DisableInterrupts_IrqAndFiq: ; 0x020CD33C
+ mrs r0, cpsr
+ orr r1, r0, #0xc0
+ msr cpsr_c, r1
+ and r0, r0, #0xc0
+ bx lr
+
+ arm_func_start OS_RestoreInterrupts_IrqAndFiq
+OS_RestoreInterrupts_IrqAndFiq: ; 0x020CD350
+ mrs r1, cpsr
+ bic r2, r1, #0xc0
+ orr r2, r2, r0
+ msr cpsr_c, r2
+ and r0, r1, #0xc0
+ bx lr
+
+ arm_func_start OS_GetCpsrIrq
+OS_GetCpsrIrq: ; 0x020CD368
+ mrs r0, cpsr
+ and r0, r0, #0x80
+ bx lr
+
+ arm_func_start OS_GetProcMode
+OS_GetProcMode: ; 0x020CD374
+ mrs r0, cpsr
+ and r0, r0, #0x1f
+ bx lr
+
+ arm_func_start OS_SpinWait
+OS_SpinWait:
+ subs r0, r0, #0x4
+ bhs OS_SpinWait
+ bx lr
+
+ arm_func_start OS_WaitVBlankIntr
+OS_WaitVBlankIntr: ; 0x020CD38C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x1
+ blx SVC_WaitByLoop
+ mov r0, #0x1
+ mov r1, r0
+ bl OS_WaitIrq
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start OS_ResetSystem
+OS_ResetSystem: ; 0x020CD3B4
+ stmdb sp!, {r4,lr}
+ ldr r1, _020CD42C ; =0x027FFC40
+ mov r4, r0
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x2
+ bne _020CD3D0
+ bl OS_Terminate
+_020CD3D0:
+ bl OS_GetLockID
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl CARD_LockRom
+_020CD3E0:
+ mov r0, #0x0
+ bl MI_StopDma
+ mov r0, #0x1
+ bl MI_StopDma
+ mov r0, #0x2
+ bl MI_StopDma
+ mov r0, #0x3
+ bl MI_StopDma
+ mov r0, #0x40000
+ bl OS_SetIrqMask
+ mvn r0, #0x0
+ bl OS_ResetRequestIrqMask
+ ldr r1, _020CD430
+ mov r0, #0x10
+ str r4, [r1]
+ bl OSi_SendToPxi
+ bl OSi_DoResetSystem
+ ldmia sp!, {r4, lr}
+ bx lr
+_020CD42C: .word 0x027FFC40
+_020CD430: .word 0x027FFC20
+
+ arm_func_start OSi_SendToPxi
+OSi_SendToPxi: ; 0x020CD434
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0, lsl #0x8
+ mov r5, #0xc
+ mov r4, #0x0
+_020CD444:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020CD454:
+ cmp r0, #0x0
+ bne _020CD444
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+
+ arm_func_start OSi_CommonCallback
+OSi_CommonCallback: ; OSi_CommonCallback
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ and r0, r1, #0x7f00
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ cmp r0, #0x10
+ ldreq r0, _020CD4A4 ; =OSi_IsResetOccurred
+ moveq r1, #0x1
+ streqh r1, [r0, #0x0]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl OS_Terminate
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CD4A4: .word OSi_IsResetOccurred
+
+ arm_func_start OS_InitReset
+OS_InitReset: ; 0x020CD4A8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CD508 ; =0x021D37DC
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r1, #0x1
+ strh r1, [r0, #0x0]
+ bl PXI_Init
+ mov r5, #0xc
+ mov r4, #0x1
+_020CD4DC:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020CD4E8:
+ cmp r0, #0x0
+ beq _020CD4DC
+ ldr r1, _020CD50C
+ mov r0, #0xC
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020CD508: .word OSi_IsInitReset
+_020CD50C: .word OSi_CommonCallback
+
+ arm_func_start OS_GetOwnerRtcOffset
+OS_GetOwnerRtcOffset: ; 0x020CD510
+ ldr r1, _020CD520 ; =0x027FFC80
+ ldr r0, [r1, #0x68]
+ ldr r1, [r1, #0x6c]
+ bx lr
+ .balign 4
+_020CD520: .word 0x027FFC80
+
+ arm_func_start OS_GetOwnerInfo
+OS_GetOwnerInfo: ; 0x020CD524
+ stmdb sp!, {r4,lr}
+ ldr ip, _020CD59C ; =0x027FFC80
+ mov r4, r0
+ ldrh r2, [r12, #0x64]
+ add r0, r12, #0x6
+ add r1, r4, #0x4
+ mov r2, r2, lsl #0x1d
+ mov r2, r2, lsr #0x1d
+ strb r2, [r4, #0x0]
+ ldrb r3, [r12, #0x2]
+ mov r2, #0x14
+ mov r3, r3, lsl #0x1c
+ mov r3, r3, lsr #0x1c
+ strb r3, [r4, #0x1]
+ ldrb r3, [r12, #0x3]
+ strb r3, [r4, #0x2]
+ ldrb r3, [r12, #0x4]
+ strb r3, [r4, #0x3]
+ ldrb r3, [r12, #0x1a]
+ strh r3, [r4, #0x18]
+ ldrb r3, [r12, #0x50]
+ strh r3, [r4, #0x4e]
+ bl MIi_CpuCopy16
+ ldr r0, _020CD59C ; =0x027FFC80
+ add r1, r4, #0x1a
+ add r0, r0, #0x1c
+ mov r2, #0x34
+ bl MIi_CpuCopy16
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CD59C: .word 0x027FFC80
+
+ arm_func_start OS_GetMacAddress
+OS_GetMacAddress: ; 0x020CD5A0
+ ldr ip, _020CD5B4 ; =MI_CpuCopy8
+ mov r1, r0
+ ldr r0, _020CD5B8 ; =0x027FFCF4
+ mov r2, #0x6
+ bx r12
+ .balign 4
+_020CD5B4: .word MI_CpuCopy8
+_020CD5B8: .word 0x027FFCF4
+
+ arm_func_start OsCountZeroBits
+OsCountZeroBits: ; 0x020CD5BC
+ clz r0, r0
+ bx lr
+
+ arm_func_start OSi_UnlockVram
+OSi_UnlockVram: ; 0x020CD5C4
+ stmdb sp!, {r4-r10,lr}
+ mov r5, r0
+ mov r10, r1
+ bl OS_DisableInterrupts
+ ldr r4, _020CD640 ; =OSi_vramExclusive
+ ldr r1, _020CD644 ; =0x000001FF
+ ldr r2, [r4, #0x0]
+ mov r8, r0
+ and r0, r5, r2
+ and r9, r0, r1
+ ldr r6, _020CD648 ; =OSi_vramLockId
+ mov r7, #0x1
+ mov r5, #0x0
+_020CD5F8:
+ mov r0, r9
+ bl OsCountZeroBits
+ rsbs r2, r0, #0x1f
+ bmi _020CD630
+ mov r1, r2, lsl #0x1
+ ldrh r0, [r6, r1]
+ mvn r2, r7, lsl r2
+ cmp r10, r0
+ ldreq r0, [r4, #0x0]
+ and r9, r9, r2
+ andeq r0, r0, r2
+ streqh r5, [r6, r1]
+ streq r0, [r4, #0x0]
+ b _020CD5F8
+_020CD630:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020CD640: .word OSi_vramExclusive
+_020CD644: .word 0x000001FF
+_020CD648: .word OSi_vramLockId
+
+ arm_func_start OSi_TryLockVram
+OSi_TryLockVram: ; 0x020CD64C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r8, r1
+ bl OS_DisableInterrupts
+ ldr r1, _020CD714 ; =OSi_vramExclusive
+ mov r7, r0
+ ldr r0, [r1, #0x0]
+ and r5, r6, r0
+ ldr sb, _020CD718 ; =OSi_vramLockId
+ mov r4, #0x1
+_020CD678:
+ mov r0, r5
+ bl OsCountZeroBits
+ rsbs r1, r0, #0x1f
+ bmi _020CD6B8
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r9, r0]
+ mvn r1, r4, lsl r1
+ cmp r8, r0
+ and r5, r5, r1
+ beq _020CD678
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020CD6B8:
+ ldr r0, _020CD71C ; =0x000001FF
+ and r6, r6, r0
+ ldr r4, _020CD718 ; =OSi_vramLockId
+ ldr sb, _020CD714 ; =OSi_vramExclusive
+ mov r5, #0x1
+_020CD6CC:
+ mov r0, r6
+ bl OsCountZeroBits
+ rsbs r1, r0, #0x1f
+ bmi _020CD6FC
+ ldr r0, [r9, #0x0]
+ mvn r2, r5, lsl r1
+ orr r0, r0, r5, lsl r1
+ mov r1, r1, lsl #0x1
+ strh r8, [r4, r1]
+ str r0, [r9, #0x0]
+ and r6, r6, r2
+ b _020CD6CC
+_020CD6FC:
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020CD714: .word OSi_vramExclusive
+_020CD718: .word OSi_vramLockId
+_020CD71C: .word 0x000001FF
+
+ arm_func_start OSi_InitVramExclusive
+OSi_InitVramExclusive: ; 0x020CD720
+ ldr r0, _020CD74C ; =OSi_vramExclusive
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+ ldr r0, _020CD750 ; =OSi_vramLockId
+ mov r2, r3
+_020CD734:
+ mov r1, r3, lsl #0x1
+ add r3, r3, #0x1
+ strh r2, [r0, r1]
+ cmp r3, #0x9
+ blt _020CD734
+ bx lr
+ .balign 4
+_020CD74C: .word OSi_vramExclusive
+_020CD750: .word OSi_vramLockId
+
+ arm_func_start OS_GetLowEntropyData
+OS_GetLowEntropyData: ; 0x020CD754
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CD82C ; =0x04000006
+ ldr r2, _020CD830 ; =0x027FFC00
+ ldrh r7, [r1, #0x0]
+ add r4, r2, #0x80
+ mov r6, r0
+ add r5, r4, #0x74
+ bl OS_GetTickLo
+ orr r0, r0, r7, lsl #0x10
+ str r0, [r6, #0x0]
+ ldr r1, _020CD834 ; =OSi_TickCounter
+ ldr r0, _020CD830 ; =0x027FFC00
+ ldr r3, [r1, #0x0]
+ ldrh r5, [r5, #0x4]
+ ldr r2, [r1, #0x4]
+ ldr r2, _020CD838 ; =0x04000600
+ eor r3, r3, r5, lsl #0x10
+ str r3, [r6, #0x4]
+ ldr r3, [r1, #0x0]
+ ldr r3, [r1, #0x4]
+ ldr r1, [r4, #0x74]
+ ldr r4, [r0, #0x3c]
+ eor r1, r3, r1
+ eor r1, r4, r1
+ str r1, [r6, #0x8]
+ ldr r3, [r6, #0x8]
+ ldr r2, [r2, #0x0]
+ add r1, r0, #0x300
+ eor r2, r3, r2
+ str r2, [r6, #0x8]
+ ldr r2, [r0, #0x1e8]
+ ldr r3, _020CD83C ; =0x04000130
+ str r2, [r6, #0xc]
+ ldr r4, [r0, #0x1ec]
+ ldr r2, _020CD840 ; =0x027FFFA8
+ str r4, [r6, #0x10]
+ ldrh r4, [r1, #0x94]
+ ldr r0, [r0, #0x390]
+ eor r0, r0, r4, lsl #0x10
+ str r0, [r6, #0x14]
+ ldrh r4, [r1, #0xaa]
+ ldrh r0, [r1, #0xac]
+ orr r0, r0, r4, lsl #0x10
+ str r0, [r6, #0x18]
+ ldrh r3, [r3, #0x0]
+ ldrh r0, [r2, #0x0]
+ ldrh r1, [r1, #0x98]
+ orr r0, r3, r0
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r6, #0x1c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020CD82C: .word 0x04000006
+_020CD830: .word 0x027FFC00
+_020CD834: .word OSi_TickCounter
+_020CD838: .word 0x04000600
+_020CD83C: .word 0x04000130
+_020CD840: .word 0x027FFFA8
+
+ arm_func_start OS_Halt
+OS_Halt: ; 0x020CD844
+ mov r0, #0x0
+ mcr p15, 0x0, r0, c7, c0, 0x4
+ bx lr
+
+ arm_func_start OS_Terminate
+OS_Terminate: ; 0x020CD850
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+_020CD858:
+ bl OS_DisableInterrupts
+ bl OS_Halt
+ b _020CD858
diff --git a/arm9/asm/PM_arm9.s b/arm9/asm/PM_arm9.s
new file mode 100644
index 00000000..331c0fa9
--- /dev/null
+++ b/arm9/asm/PM_arm9.s
@@ -0,0 +1,1125 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start PM_DeletePostSleepCallback
+PM_DeletePostSleepCallback: ; 0x020D4AE8
+ ldr ip, _020D4AF8 ; =0x020D4B78
+ mov r1, r0
+ ldr r0, _020D4AFC ; =0x021D54E0
+ bx r12
+ .balign 4
+_020D4AF8: .word 0x020D4B78
+_020D4AFC: .word 0x021D54E0
+
+ arm_func_start PM_DeletePreSleepCallback
+PM_DeletePreSleepCallback: ; 0x020D4B00
+ ldr ip, _020D4B10 ; =0x020D4B78
+ mov r1, r0
+ ldr r0, _020D4B14 ; =0x021D54D8
+ bx r12
+ .balign 4
+_020D4B10: .word 0x020D4B78
+_020D4B14: .word 0x021D54D8
+
+ arm_func_start PM_AppendPostSleepCallback
+PM_AppendPostSleepCallback: ; 0x020D4B18
+ ldr ip, _020D4B28 ; =FUN_020D4BC4
+ mov r1, r0
+ ldr r0, _020D4B2C ; =0x021D54E0
+ bx r12
+ .balign 4
+_020D4B28: .word FUN_020D4BC4
+_020D4B2C: .word 0x021D54E0
+
+ arm_func_start PM_PrependPreSleepCallback
+PM_PrependPreSleepCallback: ; 0x020D4B30
+ ldr ip, _020D4B40 ; =FUN_020D4C0C
+ mov r1, r0
+ ldr r0, _020D4B44 ; =0x021D54D8
+ bx r12
+ .balign 4
+_020D4B40: .word FUN_020D4C0C
+_020D4B44: .word 0x021D54D8
+
+ arm_func_start PMi_ExecuteList
+PMi_ExecuteList: ; 0x020D4B48
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_020D4B58:
+ ldr r0, [r4, #0x4]
+ ldr r1, [r4, #0x0]
+ blx r1
+ ldr r4, [r4, #0x8]
+ cmp r4, #0x0
+ bne _020D4B58
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020D4B78
+FUN_020D4B78:
+ cmp r0, #0x0
+ bxeq lr
+ ldr r3, [r0]
+ mov r2, r3
+ cmp r3, #0x0
+ bxeq lr
+_020D4B90:
+ cmp r3, r1
+ bne _020D4BB0
+ cmp r3, r2
+ ldreq r1, [r3, #0x8]
+ streq r1, [r0]
+ ldrne r0, [r3, #0x8]
+ strne r0, [r2, #0x8]
+ bx lr
+_020D4BB0:
+ mov r2, r3
+ ldr r3, [r3, #0x8]
+ cmp r3, #0x0
+ bne _020D4B90
+ bx lr
+
+ arm_func_start FUN_020D4BC4
+FUN_020D4BC4: ; 0x020D4BC4
+ cmp r0, #0x0
+ bxeq lr
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ moveq r2, #0x0
+ streq r2, [r1, #0x8]
+ streq r1, [r0, #0x0]
+ bxeq lr
+ ldr r0, [r2, #0x8]
+ cmp r0, #0x0
+ beq _020D4C00
+_020D4BF0:
+ mov r2, r0
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ bne _020D4BF0
+_020D4C00:
+ str r0, [r1, #0x8]
+ str r1, [r2, #0x8]
+ bx lr
+
+ arm_func_start FUN_020D4C0C
+FUN_020D4C0C: ; 0x020D4C0C
+ cmp r0, #0x0
+ ldrne r2, [r0, #0x0]
+ strne r2, [r1, #0x8]
+ strne r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start PM_GetLEDPattern
+PM_GetLEDPattern: ; 0x020D4C20
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4C58 ; =0x020D587C
+ add r2, sp, #0x0
+ bl PM_GetLEDPatternAsync
+_020D4C34:
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmnefd sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+ ldr r0, [sp]
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020D4C58: .word 0x020D587C
+
+ arm_func_start PM_GetLEDPatternAsync
+PM_GetLEDPatternAsync:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl PMi_Lock
+_020D4C70:
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, _020D4CA4
+ ldr r0, _020D4CA8
+ str r5, [r1, #0x4]
+ str r4, [r1, #0x8]
+ str r6, [r1, #0xC]
+ bl PMi_SendPxiData
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D4CA4: .word 0x021D54E4
+_020D4CA8: .word 0x03006700
+
+ arm_func_start PMi_SendLEDPatternCommand
+PMi_SendLEDPatternCommand: ; 0x020D4CAC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4CE4 ; =0x020D587C
+ add r2, sp, #0x0
+ bl PMi_SendLEDPatternCommandAsync
+_020D4CC0:
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmnefd sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+ ldr r0, [sp]
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020D4CE4: .word 0x020D587C
+
+ arm_func_start PMi_SendLEDPatternCommandAsync
+PMi_SendLEDPatternCommandAsync:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl PMi_Lock
+_020D4CFC:
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _020D4D34
+ ldr r1, _020D4D38
+ and r2, r6, #0xff
+ orr r0, r2, r0
+ str r5, [r1, #0x4]
+ str r4, [r1, #0x8]
+ bl PMi_SendPxiData
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D4D34: .word 0x03006600
+_020D4D38: .word 0x021D54E4
+
+ arm_func_start PM_GetLCDPower
+PM_GetLCDPower: ; 0x020D4D3C
+ ldr r0, _020D4D54 ; =0x04000304
+ ldrh r0, [r0, #0x0]
+ ands r0, r0, #0x1
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020D4D54: .word 0x04000304
+
+ arm_func_start PM_SetLCDPower
+PM_SetLCDPower: ; 0x020D4D58
+ ldr ip, _020D4D74 ; =PMi_SetLCDPower
+ mov r1, #0x0
+ cmp r0, #0x1
+ movne r0, #0x0
+ mov r2, r1
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020D4D74: .word PMi_SetLCDPower
+
+ arm_func_start PMi_SetLCDPower
+PMi_SetLCDPower: ; 0x020D4D78
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ beq _020D4E00
+ cmp r0, #0x1
+ bne _020D4E4C
+ cmp r2, #0x0
+ bne _020D4DC0
+ ldr r2, _020D4E5C ; =0x027FFC3C
+ ldr r0, _020D4E60 ; =0x021D54DC
+ ldr r2, [r2, #0x0]
+ ldr r0, [r0, #0x0]
+ sub r0, r2, r0
+ cmp r0, #0x7
+ addls sp, sp, #0x4
+ movls r0, #0x0
+ ldmlsia sp!, {lr}
+ bxls lr
+_020D4DC0:
+ cmp r1, #0x0
+ beq _020D4DEC
+ cmp r3, #0x0
+ beq _020D4DDC
+ mov r0, r1
+ bl PMi_SetLED
+ b _020D4DEC
+_020D4DDC:
+ mov r0, r1
+ mov r1, #0x0
+ mov r2, r1
+ bl PMi_SetLEDAsync
+_020D4DEC:
+ ldr r1, _020D4E64 ; =0x04000304
+ ldrh r0, [r1, #0x0]
+ orr r0, r0, #0x1
+ strh r0, [r1, #0x0]
+ b _020D4E4C
+_020D4E00:
+ ldr lr, _020D4E64 ; =0x04000304
+ ldr r2, _020D4E5C ; =0x027FFC3C
+ ldrh r12, [lr, #0x0]
+ ldr r0, _020D4E60 ; =0x021D54DC
+ cmp r1, #0x0
+ bic r12, r12, #0x1
+ strh r12, [lr, #0x0]
+ ldr r2, [r2, #0x0]
+ str r2, [r0, #0x0]
+ beq _020D4E4C
+ cmp r3, #0x0
+ beq _020D4E3C
+ mov r0, r1
+ bl PMi_SetLED
+ b _020D4E4C
+_020D4E3C:
+ mov r0, r1
+ mov r1, #0x0
+ mov r2, r1
+ bl PMi_SetLEDAsync
+_020D4E4C:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D4E5C: .word 0x027FFC3C
+_020D4E60: .word 0x021D54DC
+_020D4E64: .word 0x04000304
+
+ arm_func_start PM_GoSleepMode
+PM_GoSleepMode: ; 0x020D4E68
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ ldr r3, _020D5084 ; =0x021D54D8
+ mov r10, r0
+ ldr r0, [r3, #0x0]
+ mov r9, r1
+ mov r11, r2
+ mov r8, #0x0
+ bl PMi_ExecuteList
+ ldr r1, _020D5088 ; =0x04000208
+ mov r0, r8
+ ldrh r4, [r1, #0x0]
+ strh r0, [r1, #0x0]
+ bl OS_DisableInterrupts
+_020D4EA0:
+ str r0, [sp]
+ ldr r0, _020D508C
+ bl OS_DisableIrqMask
+ str r0, [sp, #0x4]
+ mov r0, #0x40000
+ bl OS_SetIrqMask
+ ldr r0, [sp]
+ bl OS_RestoreInterrupts
+ ldr r2, _020D5088
+ mov r1, #0x1
+ ldrh r0, [r2]
+ ands r0, sl, #0x8
+ strh r1, [r2]
+ beq _020D4EE8
+ ldr r0, _020D5090
+ ldrh r0, [r0]
+ cmp r0, #0x2
+ biceq sl, sl, #0x8
+_020D4EE8:
+ ands r0, sl, #0x10
+ beq _020D4EFC
+ bl CTRDG_IsExisting
+ cmp r0, #0x0
+ biceq sl, sl, #0x10
+_020D4EFC:
+ ldr r0, _020D5094
+ mov r1, #0x4000000
+ ldr r7, [r1]
+ ldr r6, [r0]
+ bl PM_GetLCDPower
+ str r0, [sp, #0x8]
+ add r0, sp, #0xC
+ add r1, sp, #0x10
+ bl PM_GetBackLight
+ mov r0, #0x2
+ mov r1, #0x0
+ bl PM_SetBackLight
+ ldr r2, _020D5098
+ ldr r0, [r2]
+ str r0, [sp, #0x14]
+_020D4F38:
+ ldr r1, [r2]
+ ldr r0, [sp, #0x14]
+ cmp r0, r1
+ beq _020D4F38
+ ldr r0, [r2]
+ mov r2, #0x4000000
+ str r0, [sp, #0x14]
+ ldr r0, [r2]
+ ldr r1, _020D5094
+ bic r0, r0, #0x30000
+ str r0, [r2]
+ ldr r0, [r1]
+ bic r0, r0, #0x10000
+ str r0, [r1]
+ ldr r2, _020D5098
+_020D4F74:
+ ldr r1, [r2]
+ ldr r0, [sp, #0x14]
+ cmp r0, r1
+ beq _020D4F74
+ ldr r0, [r2]
+ str r0, [sp, #0x14]
+ ldr r2, _020D5098
+_020D4F90:
+ ldr r1, [r2]
+ ldr r0, [sp, #0x14]
+ cmp r0, r1
+ beq _020D4F90
+ ldr r0, [sp, #0xC]
+ ldr r1, [sp, #0x10]
+ orr r0, sl, r0, lsl #0x5
+ orr r0, r0, r1, lsl #0x6
+ mov r0, r0, lsl #0x10
+ mov r5, r0, lsr #0x10
+ orr r0, r9, fp
+ mov r0, r0, lsl #0x10
+ mov r9, r0, lsr #0x10
+_020D4FC4:
+ mov r0, r5
+ mov r1, r9
+ bl PMi_SendSleepStart
+ cmp r0, #0x0
+ bne _020D4FC4
+ bl OS_Halt
+ ldr r0, _020D509C
+ bl OS_SpinWait
+ ands r0, sl, #0x8
+ beq _020D4FFC
+ ldr r0, _020D50A0
+ ldr r0, [r0]
+ ands r0, r0, #0x100000
+ movne r8, #0x1
+_020D4FFC:
+ cmp r8, #0x0
+ bne _020D5040
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x1
+ bne _020D5028
+ mov r0, #0x1
+ mov r1, r0
+ mov r2, r0
+ mov r3, #0x0
+ bl PMi_SetLCDPower
+ b _020D5030
+_020D5028:
+ mov r0, #0x1
+ bl PMi_SetLED
+_020D5030:
+ mov r1, #0x4000000
+ ldr r0, _020D5094
+ str r7, [r1]
+ str r6, [r0]
+_020D5040:
+ bl OS_DisableInterrupts
+ ldr r0, [sp, #0x4]
+ bl OS_SetIrqMask
+ ldr r0, [sp]
+ bl OS_RestoreInterrupts
+ ldr r1, _020D5088
+ cmp r8, #0x0
+ ldrh r0, [r1]
+ strh r4, [r1]
+ beq _020D506C
+ bl PM_ForceToPowerOff
+_020D506C:
+ ldr r0, _020D50A4
+ ldr r0, [r0]
+ bl PMi_ExecuteList
+ add sp, sp, #0x1C
+ ldmia sp!, {r4-r11, lr}
+ bx lr
+_020D5084: .word 0x021D54D8
+_020D5088: .word 0x04000208
+_020D508C: .word 0x003FFFFF
+_020D5090: .word 0x027FFC40
+_020D5094: .word 0x04001000
+_020D5098: .word 0x027FFC3C
+_020D509C: .word 0x00996A00
+_020D50A0: .word 0x04000214
+_020D50A4: .word 0x021D54E0
+
+
+ arm_func_start PMi_SendPxiData
+PMi_SendPxiData: ; 0x020D50A8
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, #0x8
+ mov r4, #0x0
+_020D50B8:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020D50C8:
+ cmp r0, #0
+ bne _020D50B8
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+
+ arm_func_start PM_GetBackLight
+PM_GetBackLight: ; 0x020D50D8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ add r1, sp, #0x0
+ mov r0, #0x0
+ bl PMi_ReadRegister
+_020D50F4:
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r5, #0x0
+ beq _020D5120
+ ldrh r1, [sp]
+ ands r1, r1, #0x8
+ movne r1, #0x1
+ moveq r1, #0x0
+ str r1, [r5]
+_020D5120:
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrh r1, [sp]
+ ands r1, r1, #0x4
+ movne r1, #0x1
+ moveq r1, #0x0
+ str r1, [r4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start PM_SetAmpGain
+PM_SetAmpGain: ; 0x020D5150
+ ldr ip, _020D5164 ; =FUN_020D53DC
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, #0x3
+ bx r12
+ .balign 4
+_020D5164: .word FUN_020D53DC
+
+ arm_func_start PM_SetAmp
+PM_SetAmp: ; 0x020D5168
+ ldr ip, _020D517C ; =FUN_020D53DC
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, #0x2
+ bx r12
+ .balign 4
+_020D517C: .word FUN_020D53DC
+
+ arm_func_start PM_ForceToPowerOff
+PM_ForceToPowerOff: ; 0x020D5180
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D51B8 ; =PMi_DummyCallback
+ add r1, sp, #0x0
+ bl PM_ForceToPowerOffAsync
+_020D5194: ; 0x020D5194
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+_020D51A8: ; 0x020D51A8
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D51B8: .word PMi_DummyCallback
+
+ arm_func_start PM_ForceToPowerOffAsync
+PM_ForceToPowerOffAsync:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ ldr r0, _020D5268 ; =0x00996A00
+ mov r6, r1
+ bl OS_SpinWait
+ bl PM_GetLCDPower
+ cmp r0, #0x1
+ beq _020D524C
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ bl PM_GetBackLight
+_020D51EC: ; 0x020D51EC
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _020D5204
+ mov r0, #0x0
+ mov r1, r0
+ bl PM_SetBackLight
+_020D5204:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020D521C
+ mov r0, #0x1
+ mov r1, #0x0
+ bl PM_SetBackLight
+_020D521C:
+ mov r0, #0x1
+ bl PM_SetLCDPower
+_020D5224: ; 0x020D5224
+ cmp r0, #0x0
+ bne _020D524C
+ ldr r5, _020D5268 ; =0x00996A00
+ mov r4, #0x1
+_020D5234:
+ mov r0, r5
+ bl OS_SpinWait
+ mov r0, r4
+ bl PM_SetLCDPower
+_020D5244: ; 0x020D5244
+ cmp r0, #0x0
+ beq _020D5234
+_020D524C:
+ mov r1, r7
+ mov r2, r6
+ mov r0, #0xe
+ bl PM_SendUtilityCommandAsync
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D5268: .word 0x00996A00
+
+ arm_func_start PM_SetBackLight
+PM_SetBackLight: ; 0x020D526C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020D52A4 ; =PMi_DummyCallback
+ add r3, sp, #0x0
+ bl PM_SetBackLightAsync
+_020D5280: ; 0x020D5280
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+_020D5294: ; 0x020D5294
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D52A4: .word PMi_DummyCallback
+
+ arm_func_start PM_SetBackLightAsync
+PM_SetBackLightAsync:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ mov r12, #0x0
+ bne _020D52D0
+ cmp r1, #0x1
+ moveq r12, #0x6
+ cmp r1, #0x0
+ moveq r12, #0x7
+ b _020D5304
+_020D52D0:
+ cmp r0, #0x1
+ bne _020D52EC
+ cmp r1, #0x1
+ moveq r12, #0x4
+ cmp r1, #0x0
+ moveq r12, #0x5
+ b _020D5304
+_020D52EC:
+ cmp r0, #0x2
+ bne _020D5304
+ cmp r1, #0x1
+ moveq r12, #0x8
+ cmp r1, #0x0
+ moveq r12, #0x9
+_020D5304:
+ cmp r12, #0x0
+ addeq sp, sp, #0x4
+ ldreq r0, _020D5334 ; =0x0000FFFF
+ ldmeqia sp!, {lr}
+ bxeq lr
+ mov r1, r2
+ mov r0, r12
+ mov r2, r3
+ bl PM_SendUtilityCommandAsync
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5334: .word 0x0000FFFF
+
+ arm_func_start PMi_SetLED
+PMi_SetLED: ; 0x020D5338
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D5370 ; =PMi_DummyCallback
+ add r2, sp, #0x0
+ bl PMi_SetLEDAsync
+_020D534C: ; 0x020D534C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+_020D5360: ; 0x020D5360
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5370: .word PMi_DummyCallback
+
+ arm_func_start PMi_SetLEDAsync
+PMi_SetLEDAsync:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x1
+ beq _020D5398
+ cmp r0, #0x2
+ beq _020D53A8
+ cmp r0, #0x3
+ beq _020D53A0
+ b _020D53B0
+_020D5398:
+ mov r0, #0x1
+ b _020D53B4
+_020D53A0:
+ mov r0, #0x2
+ b _020D53B4
+_020D53A8:
+ mov r0, #0x3
+ b _020D53B4
+_020D53B0:
+ mov r0, #0x0
+_020D53B4:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldreq r0, _020D53D8 ; =0x0000FFFF
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl PM_SendUtilityCommandAsync
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D53D8: .word 0x0000FFFF
+
+ arm_func_start FUN_020D53DC
+FUN_020D53DC: ; 0x020D53DC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020D5414 ; =PMi_DummyCallback
+ add r3, sp, #0x0
+ bl PMi_WriteRegisterAsync
+_020D53F0: ; 0x020D53F0
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+_020D5404: ; 0x020D5404
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5414: .word PMi_DummyCallback
+
+ arm_func_start PMi_WriteRegisterAsync
+PMi_WriteRegisterAsync:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r4, r1
+ mov r6, r2
+ mov r5, r3
+ bl PMi_Lock
+_020D5434: ; 0x020D5434
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _020D5488 ; =0x02006400
+ ldr r1, _020D548C ; =0x021D54E4
+ and r2, r7, #0xff
+ orr r0, r2, r0
+ str r6, [r1, #0x4]
+ str r5, [r1, #0x8]
+ bl PMi_SendPxiData
+ ldr r0, _020D5490 ; =0x0000FFFF
+ ldr r1, _020D5494 ; =0x01010000
+ and r0, r4, r0
+ orr r0, r0, r1
+ bl PMi_SendPxiData
+_020D5478: ; 0x020D5478
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D5488: .word 0x02006400
+_020D548C: .word 0x021D54E4
+_020D5490: .word 0x0000FFFF
+_020D5494: .word 0x01010000
+
+ arm_func_start PMi_ReadRegister
+PMi_ReadRegister:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020D54D0 ; =PMi_DummyCallback
+ add r3, sp, #0x0
+ bl PMi_ReadRegisterAsync
+_020D54AC: ; 0x020D54AC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ bl PMi_WaitBusy
+_020D54C0: ; 0x020D54C0
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D54D0: .word PMi_DummyCallback
+
+ arm_func_start PMi_ReadRegisterAsync
+PMi_ReadRegisterAsync:
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl PMi_Lock
+_020D54EC: ; 0x020D54EC
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr ip, _020D553C ; =0x021D550C
+ ldr r1, _020D5540 ; =0x021D54E4
+ ldr r0, _020D5544 ; =0x03006500
+ and r2, r7, #0xff
+ mov lr, r7, lsl #0x3
+ mov r8, #0x0
+ ldr r3, _020D5548 ; =0x021D5510
+ strh r8, [r12, lr]
+ orr r0, r2, r0
+ str r5, [r1, #0x4]
+ str r4, [r1, #0x8]
+ str r6, [r3, r7, lsl #0x3]
+ bl PMi_SendPxiData
+ mov r0, r8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D553C: .word 0x021D550C
+_020D5540: .word 0x021D54E4
+_020D5544: .word 0x03006500
+_020D5548: .word 0x021D5510
+
+ arm_func_start PM_SendUtilityCommandAsync
+PM_SendUtilityCommandAsync: ; 0x020D554C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ mov r6, r1
+ mov r5, r2
+ bl PMi_Lock
+_020D5560: ; 0x020D5560
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r2, r4, lsr #0x10
+ ldr r1, _020D55B0 ; =0x021D54E4
+ ldr r0, _020D55B4 ; =0x02006300
+ and r2, r2, #0xff
+ orr r0, r2, r0
+ str r6, [r1, #0x4]
+ str r5, [r1, #0x8]
+ bl PMi_SendPxiData
+ ldr r0, _020D55B8 ; =0x0000FFFF
+ ldr r1, _020D55BC ; =0x01010000
+ and r0, r4, r0
+ orr r0, r0, r1
+ bl PMi_SendPxiData
+_020D55A4: ; 0x020D55A4
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D55B0: .word 0x021D54E4
+_020D55B4: .word 0x02006300
+_020D55B8: .word 0x0000FFFF
+_020D55BC: .word 0x01010000
+
+ arm_func_start PMi_SendSleepStart
+PMi_SendSleepStart: ; 0x020D55C0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl PMi_Lock
+_020D55D4: ; 0x020D55D4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, _020D5660 ; =0x021D54D0
+ mov r2, #0x0
+ ldr r0, _020D5664 ; =0x03006000
+ str r2, [r1, #0x0]
+ bl PMi_SendPxiData
+ ldr r1, _020D5660 ; =0x021D54D0
+_020D5600:
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020D5600
+ mov r0, #0x0
+ ldr ip, _020D5668 ; =0x021D54D4
+ str r0, [r1, #0x0]
+ mov r2, r0
+ mov r3, r0
+ mov r1, #0x2
+ str r0, [r12, #0x0]
+ bl PMi_SetLCDPower
+ ldr r0, _020D566C ; =0x02006100
+ and r1, r5, #0xff
+ orr r0, r1, r0
+ bl PMi_SendPxiData
+ ldr r0, _020D5670 ; =0x0000FFFF
+ ldr r1, _020D5674 ; =0x01010000
+ and r0, r4, r0
+ orr r0, r0, r1
+ bl PMi_SendPxiData
+_020D5650: ; 0x020D5650
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D5660: .word 0x021D54D0
+_020D5664: .word 0x03006000
+_020D5668: .word 0x021D54D4
+_020D566C: .word 0x02006100
+_020D5670: .word 0x0000FFFF
+_020D5674: .word 0x01010000
+
+ arm_func_start PMi_CommonCallback
+PMi_CommonCallback: ; 0x020D5678
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ beq _020D569C
+ mov r0, #0x2
+ bl PMi_CallCallbackAndUnlock
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020D569C:
+ and r0, r1, #0x7f00
+ mov r0, r0, lsl #0x8
+ and r1, r1, #0xff
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsl #0x10
+ cmp r2, #0x70
+ mov r0, r0, lsr #0x10
+ blo _020D56FC
+ cmp r2, #0x74
+ bhi _020D56FC
+ ldr r1, _020D5750 ; =0x021D5510
+ sub r2, r2, #0x70
+ and r0, r0, #0xff
+ ldr r1, [r1, r2, lsl #0x3]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r1, #0x0
+ strneh r0, [r1, #0x0]
+ mov r1, r2, lsl #0x3
+ ldr r0, _020D5754 ; =0x021D550C
+ mov r2, #0x1
+ strh r2, [r0, r1]
+ mov r0, #0x0
+ b _020D5740
+_020D56FC:
+ cmp r2, #0x60
+ ldreq r1, _020D5758 ; =0x021D54D0
+ moveq r2, #0x1
+ streq r2, [r1, #0x0]
+ beq _020D5740
+ cmp r2, #0x62
+ ldreq r1, _020D575C ; =0x021D54D4
+ moveq r2, #0x1
+ streq r2, [r1, #0x0]
+ beq _020D5740
+ cmp r2, #0x67
+ bne _020D5740
+ ldr r1, _020D5760 ; =0x021D54E4
+ ldr r1, [r1, #0xc]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+_020D5740:
+ bl PMi_CallCallbackAndUnlock
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5750: .word 0x021D5510
+_020D5754: .word 0x021D550C
+_020D5758: .word 0x021D54D0
+_020D575C: .word 0x021D54D4
+_020D5760: .word 0x021D54E4
+
+ arm_func_start PM_Init
+PM_Init: ; 0x020D5764
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D580C ; =0x021D54CC
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, _020D5810 ; =0x021D54E4
+ mov r2, #0x0
+ mov r3, #0x1
+ strh r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ bl PXI_Init
+ mov r5, #0x8
+ mov r4, #0x1
+_020D57A8:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020D57B4: ; 0x020D57B4
+ cmp r0, #0x0
+ beq _020D57A8
+ ldr r1, _020D5814 ; =PMi_CommonCallback
+ mov r0, #0x8
+ bl PXI_SetFifoRecvCallback
+ mov r3, #0x0
+ ldr r0, _020D5818 ; =0x021D550C
+ mov r2, r3
+_020D57D4:
+ mov r1, r3, lsl #0x3
+ add r3, r3, #0x1
+ strh r2, [r0, r1]
+ cmp r3, #0x5
+ blt _020D57D4
+ ldr r0, _020D581C ; =0x021D54F4
+ bl OS_InitMutex
+ ldr r1, _020D5820 ; =0x027FFC3C
+ ldr r0, _020D5824 ; =0x021D54DC
+ ldr r1, [r1, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D580C: .word 0x021D54CC
+_020D5810: .word 0x021D54E4
+_020D5814: .word PMi_CommonCallback
+_020D5818: .word 0x021D550C
+_020D581C: .word 0x021D54F4
+_020D5820: .word 0x027FFC3C
+_020D5824: .word 0x021D54DC
+
+ arm_func_start PMi_CallCallbackAndUnlock
+PMi_CallCallbackAndUnlock: ; 0x020D5828
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020D5878 ; =0x021D54E4
+ ldr r1, [r2, #0x0]
+ ldr r12, [r2, #0x4]
+ cmp r1, #0x0
+ movne r3, #0x0
+ strne r3, [r2, #0x0]
+ cmp r12, #0x0
+ addeq sp, sp, #0x4
+ ldr r1, [r2, #0x8]
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r2, _020D5878 ; =0x021D54E4
+ mov r3, #0x0
+ str r3, [r2, #0x4]
+ blx r12
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5878: .word 0x021D54E4
+
+ arm_func_start PMi_DummyCallback
+PMi_DummyCallback: ; 0x020D587C
+ str r0, [r1, #0x0]
+ bx lr
+
+ arm_func_start PMi_WaitBusy
+PMi_WaitBusy:
+ stmdb sp!, {r4,lr}
+ ldr r4, _020D58C0 ; =0x021D54E4
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_020D589C:
+ bl OS_GetCpsrIrq
+ cmp r0, #0x80
+ bne _020D58AC
+ bl PXIi_HandlerRecvFifoNotEmpty
+_020D58AC:
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020D589C
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D58C0: .word 0x021D54E4
+
+ arm_func_start PMi_Lock
+PMi_Lock:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r1, _020D5910 ; =0x021D54E4
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D58F4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_020D58F4:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D5910: .word 0x021D54E4
diff --git a/arm9/asm/PXI_arm9.s b/arm9/asm/PXI_arm9.s
new file mode 100644
index 00000000..ab3af5de
--- /dev/null
+++ b/arm9/asm/PXI_arm9.s
@@ -0,0 +1,266 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+
+ arm_func_start PXI_Init
+PXI_Init: ; 0x020CFBB0
+ ldr ip, _020CFBB8 ; =PXI_InitFifo
+ bx r12
+ .balign 4
+_020CFBB8: .word PXI_InitFifo
+
+ arm_func_start PXIi_HandlerRecvFifoNotEmpty
+PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x8
+ ldr sl, _020CFCD4 ; =0x04000184
+ ldr r5, _020CFCD8 ; =0x021D5368
+ ldr r4, _020CFCDC ; =0x04000188
+ mov r7, #0x4100000
+ mov r6, #0x0
+ mvn r8, #0x3
+ mvn r9, #0x2
+_020CFBE0:
+ ldrh r0, [r10, #0x0]
+ ands r0, r0, #0x4000
+ ldrneh r0, [r10, #0x0]
+ movne r1, r9
+ orrne r0, r0, #0xc000
+ strneh r0, [r10, #0x0]
+ bne _020CFC28
+ bl OS_DisableInterrupts
+ ldrh r1, [r10, #0x0]
+ ands r1, r1, #0x100
+ beq _020CFC18
+ bl OS_RestoreInterrupts
+ mov r1, r8
+ b _020CFC28
+_020CFC18:
+ ldr r1, [r7, #0x0]
+ str r1, [sp, #0x0]
+ bl OS_RestoreInterrupts
+ mov r1, r6
+_020CFC28:
+ cmp r1, r8
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ mvn r0, #0x2
+ cmp r1, r0
+ beq _020CFBE0
+ ldr r1, [sp, #0x0]
+ mov r0, r1, lsl #0x1b
+ movs r0, r0, lsr #0x1b
+ beq _020CFBE0
+ ldr r3, [r5, r0, lsl #0x2]
+ cmp r3, #0x0
+ beq _020CFC74
+ mov r2, r1, lsl #0x1a
+ mov r1, r1, lsr #0x6
+ mov r2, r2, lsr #0x1f
+ blx r3
+ b _020CFBE0
+_020CFC74:
+ mov r0, r1, lsl #0x1a
+ movs r0, r0, lsr #0x1f
+ bne _020CFBE0
+ orr r0, r1, #0x20
+ str r0, [sp, #0x0]
+ ldrh r0, [r10, #0x0]
+ ands r0, r0, #0x4000
+ ldrneh r0, [r10, #0x0]
+ orrne r0, r0, #0xc000
+ strneh r0, [r10, #0x0]
+ bne _020CFBE0
+ bl OS_DisableInterrupts
+ ldrh r1, [r10, #0x0]
+ ands r1, r1, #0x2
+ beq _020CFCB8
+ bl OS_RestoreInterrupts
+ b _020CFBE0
+_020CFCB8:
+ ldr r1, [sp, #0x0]
+ str r1, [r4, #0x0]
+ bl OS_RestoreInterrupts
+ b _020CFBE0
+_020CFCC8:
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r10, lr}
+ bx lr
+_020CFCD4: .word 0x04000184
+_020CFCD8: .word 0x021D5368
+_020CFCDC: .word 0x04000188
+
+ arm_func_start PXI_SendWordByFifo
+PXI_SendWordByFifo:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [sp, #0x0]
+ and r0, r0, #0x1f
+ bic r3, r3, #0x1f
+ orr r12, r3, r0
+ bic r3, r12, #0x20
+ and r0, r2, #0x1
+ orr r3, r3, r0, lsl #0x5
+ str r12, [sp, #0x0]
+ and r2, r3, #0x3f
+ bic r0, r1, #0xfc000000
+ orr r0, r2, r0, lsl #0x6
+ str r3, [sp, #0x0]
+ ldr r2, _020CFD8C ; =0x04000184
+ str r0, [sp, #0x0]
+ ldrh r0, [r2, #0x0]
+ ands r0, r0, #0x4000
+ ldrneh r1, [r2, #0x0]
+ addne sp, sp, #0x4
+ mvnne r0, #0x0
+ orrne r1, r1, #0xc000
+ strneh r1, [r2, #0x0]
+ ldmneia sp!, {lr}
+ bxne lr
+ bl OS_DisableInterrupts
+ ldr r1, _020CFD8C ; =0x04000184
+ ldrh r1, [r1, #0x0]
+ ands r1, r1, #0x2
+ beq _020CFD6C
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mvn r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020CFD6C:
+ ldr r2, [sp, #0x0]
+ ldr r1, _020CFD90 ; =0x04000188
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+_020CFD7C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020CFD8C: .word 0x04000184
+_020CFD90: .word 0x04000188
+
+ arm_func_start PXI_IsCallbackReady
+PXI_IsCallbackReady:
+ ldr r2, _020CFDB8 ; =0x027FFC00
+ mov r3, #0x1
+ add r1, r2, r1, lsl #0x2
+ mov r2, r3, lsl r0
+ ldr r0, [r1, #0x388]
+ ands r0, r2, r0
+ moveq r3, #0x0
+ mov r0, r3
+ bx lr
+ .balign 4
+_020CFDB8: .word 0x027FFC00
+
+ arm_func_start PXI_SetFifoRecvCallback
+PXI_SetFifoRecvCallback: ; 0x020CFDBC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov r5, r1
+ bl OS_DisableInterrupts
+ ldr r1, _020CFE20 ; =0x021D5368
+ cmp r5, #0x0
+ str r5, [r1, r4, lsl #0x2]
+ beq _020CFDF8
+ ldr r3, _020CFE24 ; =0x027FFC00
+ mov r1, #0x1
+ ldr r2, [r3, #0x388]
+ orr r1, r2, r1, lsl r4
+ str r1, [r3, #0x388]
+ b _020CFE10
+_020CFDF8:
+ ldr r3, _020CFE24 ; =0x027FFC00
+ mov r1, #0x1
+ mvn r1, r1, lsl r4
+ ldr r2, [r3, #0x388]
+ and r1, r2, r1
+ str r1, [r3, #0x388]
+_020CFE10:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CFE20: .word 0x021D5368
+_020CFE24: .word 0x027FFC00
+
+ arm_func_start PXI_InitFifo
+PXI_InitFifo: ; 0x020CFE28
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r1, _020CFF18 ; =0x021D5364
+ mov r4, r0
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020CFF04
+ mov r2, #0x1
+ ldr r0, _020CFF1C ; =0x027FFC00
+ strh r2, [r1, #0x0]
+ mov r2, #0x0
+ str r2, [r0, #0x388]
+ ldr r0, _020CFF20 ; =0x021D5368
+ mov r1, r2
+_020CFE64:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x20
+ blt _020CFE64
+ ldr r2, _020CFF24 ; =0x0000C408
+ ldr r1, _020CFF28 ; =0x04000184
+ mov r0, #0x40000
+ strh r2, [r1, #0x0]
+ bl OS_ResetRequestIrqMask
+ ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty
+ mov r0, #0x40000
+ bl OS_SetIrqFunction
+ mov r0, #0x40000
+ bl OS_EnableIrqMask
+ mov r12, #0x0
+ ldr r3, _020CFF30 ; =0x04000180
+ mov r1, r12
+ mov r2, #0x3e8
+_020CFEAC:
+ ldrh r0, [r3, #0x0]
+ ands lr, r0, #0xf
+ mov r0, lr, lsl #0x8
+ strh r0, [r3, #0x0]
+ bne _020CFEC8
+ cmp r12, #0x4
+ bgt _020CFF04
+_020CFEC8:
+ ldrh r0, [r3, #0x0]
+ mov r5, r2
+ and r0, r0, #0xf
+ cmp r0, lr
+ bne _020CFEFC
+_020CFEDC:
+ cmp r5, #0x0
+ movle r12, r1
+ ble _020CFEFC
+ ldrh r0, [r3, #0x0]
+ sub r5, r5, #0x1
+ and r0, r0, #0xf
+ cmp r0, lr
+ beq _020CFEDC
+_020CFEFC:
+ add r12, r12, #0x1
+ b _020CFEAC
+_020CFF04:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020CFF18: .word 0x021D5364
+_020CFF1C: .word 0x027FFC00
+_020CFF20: .word 0x021D5368
+_020CFF24: .word 0x0000C408
+_020CFF28: .word 0x04000184
+_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty
+_020CFF30: .word 0x04000180
diff --git a/arm9/asm/RTC_arm9.s b/arm9/asm/RTC_arm9.s
new file mode 100644
index 00000000..8116f8de
--- /dev/null
+++ b/arm9/asm/RTC_arm9.s
@@ -0,0 +1,1028 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start RtcWaitBusy
+RtcWaitBusy: ; 0x020D5914
+ ldr ip, _020D5928 ; =0x021D5538
+_020D5918:
+ ldr r0, [r12, #0x0]
+ cmp r0, #0x1
+ beq _020D5918
+ bx lr
+ .balign 4
+_020D5928: .word 0x021D5538
+
+ arm_func_start RtcGetResultCallback
+RtcGetResultCallback: ; 0x020D592C
+ ldr r1, _020D5938 ; =0x021D5538
+ str r0, [r1, #0x20]
+ bx lr
+ .balign 4
+_020D5938: .word 0x021D5538
+
+ arm_func_start RtcBCD2HEX
+RtcBCD2HEX: ; 0x020D593C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, #0x0
+ mov r3, r5
+ mov r2, r5
+_020D5950:
+ mov r1, r0, lsr r2
+ and r1, r1, #0xf
+ cmp r1, #0xa
+ addcs sp, sp, #0x4
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ add r3, r3, #0x1
+ cmp r3, #0x8
+ add r2, r2, #0x4
+ blt _020D5950
+ mov r12, #0x0
+ mov lr, r12
+ mov r4, #0x1
+ mov r2, #0xa
+_020D598C:
+ mov r1, r0, lsr lr
+ and r3, r1, #0xf
+ mul r1, r4, r2
+ mla r5, r4, r3, r5
+ add r12, r12, #0x1
+ mov r4, r1
+ cmp r12, #0x8
+ add lr, lr, #0x4
+ blt _020D598C
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start RtcCommonCallback
+RtcCommonCallback: ; 0x020D59C0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ beq _020D5A30
+ ldr r0, _020D5F30 ; =0x021D5538
+ ldr r2, _020D5F30 ; =0x021D5538
+ ldr r1, [r0, #0x18]
+ ldr r4, [r2, #0x4]
+ cmp r1, #0x0
+ movne r1, #0x0
+ strne r1, [r0, #0x18]
+ ldr r0, _020D5F30 ; =0x021D5538
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r2, #0x10]
+ mov r3, #0x0
+ mov r0, #0x6
+ str r3, [r2, #0x4]
+ blx r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D5A30:
+ and r0, r1, #0x7f00
+ mov r0, r0, lsr #0x8
+ and r0, r0, #0xff
+ cmp r0, #0x30
+ and r2, r1, #0xff
+ bne _020D5A70
+ ldr r0, _020D5F30 ; =0x021D5538
+ ldr r0, [r0, #0x1c]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ blx r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D5A70:
+ cmp r2, #0x0
+ bne _020D5E88
+ ldr r0, _020D5F30 ; =0x021D5538
+ mov r5, #0x0
+ ldr r1, [r0, #0x14]
+ cmp r1, #0xf
+ addls pc, pc, r1, lsl #0x2
+ b _020D5E74
+_020D5A90:
+ b _020D5AD0
+_020D5A94:
+ b _020D5B24
+_020D5A98:
+ b _020D5B74
+_020D5A9C:
+ b _020D5ED0
+_020D5AA0:
+ b _020D5ED0
+_020D5AA4:
+ b _020D5ED0
+_020D5AA8:
+ b _020D5C1C
+_020D5AAC:
+ b _020D5C4C
+_020D5AB0:
+ b _020D5C70
+_020D5AB4:
+ b _020D5D14
+_020D5AB8:
+ b _020D5DC8
+_020D5ABC:
+ b _020D5ED0
+_020D5AC0:
+ b _020D5ED0
+_020D5AC4:
+ b _020D5ED0
+_020D5AC8:
+ b _020D5ED0
+_020D5ACC:
+ b _020D5ED0
+_020D5AD0:
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ ldr r4, [r0, #0x8]
+ ldrb r0, [r1, #0x0]
+ bl RtcBCD2HEX
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ str r0, [r4, #0x0]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x13
+ mov r0, r0, lsr #0x1b
+ bl RtcBCD2HEX
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ str r0, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0xa
+ mov r0, r0, lsr #0x1a
+ bl RtcBCD2HEX
+ str r0, [r4, #0x8]
+ mov r0, r4
+ bl RTC_GetDayOfWeek
+ str r0, [r4, #0xc]
+ b _020D5ED0
+_020D5B24:
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ ldr r4, [r0, #0x8]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x1a
+ mov r0, r0, lsr #0x1a
+ bl RtcBCD2HEX
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0x0]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x11
+ mov r0, r0, lsr #0x19
+ bl RtcBCD2HEX
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x9
+ mov r0, r0, lsr #0x19
+ bl RtcBCD2HEX
+ str r0, [r4, #0x8]
+ b _020D5ED0
+_020D5B74:
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ ldr r4, [r0, #0x8]
+ ldr r0, [r1, #0x0]
+ and r0, r0, #0xff
+ bl RtcBCD2HEX
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ str r0, [r4, #0x0]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x13
+ mov r0, r0, lsr #0x1b
+ bl RtcBCD2HEX
+ ldr r1, _020D5F34 ; =0x027FFDE8
+ str r0, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0xa
+ mov r0, r0, lsr #0x1a
+ bl RtcBCD2HEX
+ str r0, [r4, #0x8]
+ mov r0, r4
+ bl RTC_GetDayOfWeek
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0xc]
+ ldr r0, [r1, #0x0]
+ ldr r1, _020D5F30 ; =0x021D5538
+ mov r0, r0, lsl #0x1a
+ mov r0, r0, lsr #0x1a
+ ldr r4, [r1, #0xc]
+ bl RtcBCD2HEX
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0x0]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x11
+ mov r0, r0, lsr #0x19
+ bl RtcBCD2HEX
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x9
+ mov r0, r0, lsr #0x19
+ bl RtcBCD2HEX
+ str r0, [r4, #0x8]
+ b _020D5ED0
+_020D5C1C:
+ ldr r1, _020D5F3C ; =0x027FFDEA
+ ldr r2, [r0, #0x8]
+ ldrh r0, [r1, #0x0]
+ mov r0, r0, lsl #0x1c
+ mov r0, r0, lsr #0x1c
+ cmp r0, #0x4
+ bne _020D5C44
+ mov r0, #0x1
+ str r0, [r2, #0x0]
+ b _020D5ED0
+_020D5C44:
+ str r5, [r2, #0x0]
+ b _020D5ED0
+_020D5C4C:
+ ldr r1, _020D5F3C ; =0x027FFDEA
+ ldr r2, [r0, #0x8]
+ ldrh r0, [r1, #0x0]
+ mov r0, r0, lsl #0x19
+ movs r0, r0, lsr #0x1f
+ movne r0, #0x1
+ strne r0, [r2, #0x0]
+ streq r5, [r2, #0x0]
+ b _020D5ED0
+_020D5C70:
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ ldr r4, [r0, #0x8]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ str r0, [r4, #0x0]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x12
+ mov r0, r0, lsr #0x1a
+ bl RtcBCD2HEX
+ ldr r1, _020D5F38 ; =0x027FFDEC
+ str r0, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x9
+ mov r0, r0, lsr #0x19
+ bl RtcBCD2HEX
+ str r0, [r4, #0x8]
+ mov r1, r5
+ ldr r0, _020D5F38 ; =0x027FFDEC
+ str r1, [r4, #0xc]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x18
+ movs r0, r0, lsr #0x1f
+ ldrne r0, [r4, #0xc]
+ addne r0, r0, #0x1
+ strne r0, [r4, #0xc]
+ ldr r0, _020D5F38 ; =0x027FFDEC
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ movs r0, r0, lsr #0x1f
+ ldrne r0, [r4, #0xc]
+ addne r0, r0, #0x2
+ strne r0, [r4, #0xc]
+ ldr r0, _020D5F38 ; =0x027FFDEC
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ ldrne r0, [r4, #0xc]
+ addne r0, r0, #0x4
+ strne r0, [r4, #0xc]
+ b _020D5ED0
+_020D5D14:
+ ldr r3, [r0, #0x18]
+ cmp r3, #0x0
+ bne _020D5DC0
+ ldr r1, [r0, #0x8]
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x1
+ bne _020D5D7C
+ ldr r2, _020D5F3C ; =0x027FFDEA
+ ldrh r1, [r2, #0x0]
+ mov r1, r1, lsl #0x1c
+ mov r1, r1, lsr #0x1c
+ cmp r1, #0x4
+ beq _020D5ED0
+ add r1, r3, #0x1
+ str r1, [r0, #0x18]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0xf
+ orr r0, r0, #0x4
+ strh r0, [r2, #0x0]
+ bl RTCi_WriteRawStatus2Async
+_020D5D64: ; 0x020D5D64
+ cmp r0, #0x0
+ moveq r1, r5
+ ldreq r0, _020D5F30 ; =0x021D5538
+ moveq r5, #0x3
+ streq r1, [r0, #0x18]
+ b _020D5ED0
+_020D5D7C:
+ ldr r2, _020D5F3C ; =0x027FFDEA
+ ldrh r1, [r2, #0x0]
+ mov r1, r1, lsl #0x1c
+ movs r1, r1, lsr #0x1c
+ beq _020D5ED0
+ add r1, r3, #0x1
+ str r1, [r0, #0x18]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0xf
+ strh r0, [r2, #0x0]
+ bl RTCi_WriteRawStatus2Async
+_020D5DA8: ; 0x020D5DA8
+ cmp r0, #0x0
+ moveq r1, r5
+ ldreq r0, _020D5F30 ; =0x021D5538
+ moveq r5, #0x3
+ streq r1, [r0, #0x18]
+ b _020D5ED0
+_020D5DC0:
+ str r5, [r0, #0x18]
+ b _020D5ED0
+_020D5DC8:
+ ldr r3, [r0, #0x18]
+ cmp r3, #0x0
+ bne _020D5E6C
+ ldr r1, [r0, #0x8]
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x1
+ bne _020D5E28
+ ldr r2, _020D5F3C ; =0x027FFDEA
+ ldrh r1, [r2, #0x0]
+ mov r1, r1, lsl #0x19
+ movs r1, r1, lsr #0x1f
+ bne _020D5ED0
+ add r1, r3, #0x1
+ str r1, [r0, #0x18]
+ ldrh r0, [r2, #0x0]
+ orr r0, r0, #0x40
+ strh r0, [r2, #0x0]
+ bl RTCi_WriteRawStatus2Async
+_020D5E10: ; 0x020D5E10
+ cmp r0, #0x0
+ moveq r1, r5
+ ldreq r0, _020D5F30 ; =0x021D5538
+ moveq r5, #0x3
+ streq r1, [r0, #0x18]
+ b _020D5ED0
+_020D5E28:
+ ldr r2, _020D5F3C ; =0x027FFDEA
+ ldrh r1, [r2, #0x0]
+ mov r1, r1, lsl #0x19
+ movs r1, r1, lsr #0x1f
+ beq _020D5ED0
+ add r1, r3, #0x1
+ str r1, [r0, #0x18]
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0x40
+ strh r0, [r2, #0x0]
+ bl RTCi_WriteRawStatus2Async
+_020D5E54: ; 0x020D5E54
+ cmp r0, #0x0
+ moveq r1, r5
+ ldreq r0, _020D5F30 ; =0x021D5538
+ moveq r5, #0x3
+ streq r1, [r0, #0x18]
+ b _020D5ED0
+_020D5E6C:
+ str r5, [r0, #0x18]
+ b _020D5ED0
+_020D5E74:
+ ldr r0, _020D5F30 ; =0x021D5538
+ mov r1, #0x0
+ str r1, [r0, #0x18]
+ mov r5, #0x4
+ b _020D5ED0
+_020D5E88:
+ ldr r0, _020D5F30 ; =0x021D5538
+ mov r1, #0x0
+ str r1, [r0, #0x18]
+ cmp r2, #0x4
+ addls pc, pc, r2, lsl #0x2
+ b _020D5ECC
+_020D5EA0:
+ b _020D5ECC
+_020D5EA4:
+ b _020D5EB4
+_020D5EA8:
+ b _020D5EBC
+_020D5EAC:
+ b _020D5EC4
+_020D5EB0:
+ b _020D5ECC
+_020D5EB4:
+ mov r5, #0x4
+ b _020D5ED0
+_020D5EBC:
+ mov r5, #0x5
+ b _020D5ED0
+_020D5EC4:
+ mov r5, #0x1
+ b _020D5ED0
+_020D5ECC:
+ mov r5, #0x6
+_020D5ED0:
+ ldr r0, _020D5F30 ; =0x021D5538
+ ldr r1, [r0, #0x18]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r2, _020D5F30 ; =0x021D5538
+ ldr r1, [r0, #0x0]
+ ldr r4, [r2, #0x4]
+ cmp r1, #0x0
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r2, #0x10]
+ mov r3, #0x0
+ mov r0, r5
+ str r3, [r2, #0x4]
+ blx r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D5F30: .word 0x021D5538
+_020D5F34: .word 0x027FFDE8
+_020D5F38: .word 0x027FFDEC
+_020D5F3C: .word 0x027FFDEA
+
+ arm_func_start RTC_GetDateTimeAsync
+RTC_GetDateTimeAsync: ; 0x020D5F40
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl OS_DisableInterrupts
+ ldr r1, _020D5FCC ; =0x021D5538
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D5F80
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D5F80:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D5FCC ; =0x021D5538
+ mov r2, #0x2
+ mov r1, #0x0
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r7, [r0, #0x8]
+ str r6, [r0, #0xc]
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x10]
+ bl RTCi_ReadRawDateTimeAsync
+_020D5FB4: ; 0x020D5FB4
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D5FCC: .word 0x021D5538
+
+ arm_func_start RTC_GetTime
+RTC_GetTime: ; 0x020D5FD0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D600C ; =RtcGetResultCallback
+ mov r2, #0x0
+ bl RTC_GetTimeAsync
+ ldr r1, _020D6010 ; =0x021D5538
+ cmp r0, #0x0
+ str r0, [r1, #0x20]
+ bne _020D5FF8
+ bl RtcWaitBusy
+_020D5FF8:
+ ldr r0, _020D6010 ; =0x021D5538
+ ldr r0, [r0, #0x20]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D600C: .word RtcGetResultCallback
+_020D6010: .word 0x021D5538
+
+ arm_func_start RTC_GetTimeAsync
+RTC_GetTimeAsync: ; 0x020D6014
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020D608C ; =0x021D5538
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D6048
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D6048:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D608C ; =0x021D5538
+ mov r2, #0x1
+ mov r1, #0x0
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r6, [r0, #0x8]
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x10]
+ bl RTCi_ReadRawTimeAsync
+_020D6078: ; 0x020D6078
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D608C: .word 0x021D5538
+
+ arm_func_start RTC_GetDate
+RTC_GetDate: ; 0x020D6090
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D60CC ; =RtcGetResultCallback
+ mov r2, #0x0
+ bl RTC_GetDateAsync
+ ldr r1, _020D60D0 ; =0x021D5538
+ cmp r0, #0x0
+ str r0, [r1, #0x20]
+ bne _020D60B8
+ bl RtcWaitBusy
+_020D60B8:
+ ldr r0, _020D60D0 ; =0x021D5538
+ ldr r0, [r0, #0x20]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D60CC: .word RtcGetResultCallback
+_020D60D0: .word 0x021D5538
+
+ arm_func_start RTC_GetDateAsync
+RTC_GetDateAsync: ; 0x020D60D4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020D6148 ; =0x021D5538
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D6108
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D6108:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D6148 ; =0x021D5538
+ mov r1, #0x0
+ str r1, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r6, [r0, #0x8]
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x10]
+ bl RTCi_ReadRawDateAsync
+_020D6134: ; 0x020D6134
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D6148: .word 0x021D5538
+
+ arm_func_start RTC_Init
+RTC_Init: ; 0x020D614C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D61C8 ; =0x021D5534
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, _020D61CC ; =0x021D5538
+ mov r2, #0x0
+ mov r3, #0x1
+ strh r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ str r2, [r0, #0x1c]
+ str r2, [r0, #0x8]
+ str r2, [r0, #0xc]
+ bl PXI_Init
+ mov r5, #0x5
+ mov r4, #0x1
+_020D619C:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020D61A8: ; 0x020D61A8
+ cmp r0, #0x0
+ beq _020D619C
+ ldr r1, _020D61D0 ; =RtcCommonCallback
+ mov r0, #0x5
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D61C8: .word 0x021D5534
+_020D61CC: .word 0x021D5538
+_020D61D0: .word RtcCommonCallback
+
+ arm_func_start FUN_020D61D4
+FUN_020D61D4: ; 0x020D61D4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, r0, lsl #0x8
+ and r1, r0, #0x7f00
+ mov r0, #0x5
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D61F0: ; 0x020D61F0
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start RTCi_WriteRawStatus2Async
+RTCi_WriteRawStatus2Async:
+ ldr ip, _020D6214 ; =FUN_020D61D4
+ mov r0, #0x27
+ bx r12
+ .balign 4
+_020D6214: .word FUN_020D61D4
+
+ arm_func_start RTCi_ReadRawTimeAsync
+RTCi_ReadRawTimeAsync:
+ ldr ip, _020D6224 ; =FUN_020D61D4
+ mov r0, #0x12
+ bx r12
+ .balign 4
+_020D6224: .word FUN_020D61D4
+
+ arm_func_start RTCi_ReadRawDateAsync
+RTCi_ReadRawDateAsync:
+ ldr ip, _020D6234 ; =FUN_020D61D4
+ mov r0, #0x11
+ bx r12
+ .balign 4
+_020D6234: .word FUN_020D61D4
+
+ arm_func_start RTCi_ReadRawDateTimeAsync
+RTCi_ReadRawDateTimeAsync:
+ ldr ip, _020D6244 ; =FUN_020D61D4
+ mov r0, #0x10
+ bx r12
+ .balign 4
+_020D6244: .word FUN_020D61D4
+
+ arm_func_start RTC_GetDayOfWeek
+RTC_GetDayOfWeek: ; 0x020D6248
+ stmdb sp!, {r4-r6,lr}
+ ldr r1, [r0, #0x4]
+ ldr r2, [r0, #0x0]
+ sub r3, r1, #0x2
+ cmp r3, #0x1
+ add lr, r2, #0x7d0
+ ldr r4, _020D630C ; =0x51EB851F
+ sublt lr, lr, #0x1
+ ldr r12, [r0, #0x8]
+ smull r0, r2, r4, lr
+ addlt r3, r3, #0xc
+ mov r1, #0x1a
+ mul r0, r3, r1
+ smull r1, r3, r4, lr
+ ldr r5, _020D6310 ; =0x66666667
+ sub r0, r0, #0x2
+ smull r4, r1, r5, r0
+ mov r4, lr, lsr #0x1f
+ mov r2, r2, asr #0x5
+ mov r3, r3, asr #0x5
+ add r3, r4, r3
+ ldr r5, _020D6314 ; =0x00000064
+ add r2, r4, r2
+ smull r2, r4, r5, r2
+ sub r2, lr, r2
+ mov r1, r1, asr #0x2
+ mov r0, r0, lsr #0x1f
+ add r1, r0, r1
+ mov r4, r2, asr #0x1
+ add r0, r12, r1
+ add r1, r2, r4, lsr #0x1e
+ add r2, r2, r0
+ mov r6, r3, asr #0x1
+ add r0, r3, r6, lsr #0x1e
+ add r1, r2, r1, asr #0x2
+ add r1, r1, r0, asr #0x2
+ mov r0, #0x5
+ mla r4, r3, r0, r1
+ ldr r3, _020D6318 ; =0x92492493
+ mov r1, r4, lsr #0x1f
+ smull r2, r0, r3, r4
+ add r0, r4, r0
+ mov r0, r0, asr #0x2
+ ldr r2, _020D631C ; =0x00000007
+ add r0, r1, r0
+ smull r0, r1, r2, r0
+ sub r0, r4, r0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D630C: .word 0x51EB851F
+_020D6310: .word 0x66666667
+_020D6314: .word 0x00000064
+_020D6318: .word 0x92492493
+_020D631C: .word 0x00000007
+
+ arm_func_start RTC_ConvertSecondToDateTime
+RTC_ConvertSecondToDateTime: ; 0x020D6320
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r12, #0x0
+ mov r4, r3
+ subs r2, r5, r12
+ sbcs r2, r4, r12
+ mov r7, r0
+ mov r6, r1
+ movlt r5, r12
+ movlt r4, r12
+ blt _020D6364
+ ldr r1, _020D63B0 ; =0xBC19137F
+ subs r0, r1, r5
+ sbcs r0, r12, r4
+ movlt r5, r1
+ movlt r4, r12
+_020D6364:
+ ldr r2, _020D63B4 ; =0x00015180
+ mov r0, r5
+ mov r1, r4
+ mov r3, #0x0
+ bl _ll_mod
+ mov r1, r0
+ mov r0, r6
+ bl RTCi_ConvertSecondToTime
+ ldr r2, _020D63B4 ; =0x00015180
+ mov r0, r5
+ mov r1, r4
+ mov r3, #0x0
+ bl _ll_sdiv
+ mov r1, r0
+ mov r0, r7
+ bl RTC_ConvertDayToDate
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020D63B0: .word 0xBC19137F
+_020D63B4: .word 0x00015180
+
+ arm_func_start RTCi_ConvertSecondToTime
+RTCi_ConvertSecondToTime: ; 0x020D63B8
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020D6448 ; =0x0001517F
+ cmp r1, #0x0
+ movlt r1, #0x0
+ cmp r1, r2
+ ldr ip, _020D644C ; =0x88888889
+ movgt r1, r2
+ smull r2, r3, r12, r1
+ smull r2, lr, r12, r1
+ ldr r5, _020D6450 ; =0x91A2B3C5
+ add r3, r1, r3
+ smull r4, r2, r5, r1
+ mov r5, r1, lsr #0x1f
+ mov r3, r3, asr #0x5
+ add r3, r5, r3
+ smull r4, r6, r12, r3
+ add lr, r1, lr
+ mov lr, lr, asr #0x5
+ add r6, r3, r6
+ add r2, r1, r2
+ ldr r4, _020D6454 ; =0x0000003C
+ add lr, r5, lr
+ smull r12, lr, r4, lr
+ sub lr, r1, r12
+ mov r2, r2, asr #0xb
+ mov r6, r6, asr #0x5
+ mov r1, r3, lsr #0x1f
+ add r6, r1, r6
+ smull r1, r12, r4, r6
+ str lr, [r0, #0x8]
+ sub r6, r3, r1
+ str r6, [r0, #0x4]
+ add r2, r5, r2
+ str r2, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D6448: .word 0x0001517F
+_020D644C: .word 0x88888889
+_020D6450: .word 0x91A2B3C5
+_020D6454: .word 0x0000003C
+
+ arm_func_start RTC_ConvertDayToDate
+RTC_ConvertDayToDate: ; 0x020D6458
+ stmdb sp!, {r4,lr}
+ ldr r2, _020D6560 ; =0x00008EAC
+ cmp r1, #0x0
+ movlt r1, #0x0
+ cmp r1, r2
+ movgt r1, r2
+ ldr r3, _020D6564 ; =0x92492493
+ add lr, r1, #0x6
+ smull r2, r4, r3, lr
+ add r4, lr, r4
+ mov r4, r4, asr #0x2
+ mov r2, lr, lsr #0x1f
+ ldr ip, _020D6568 ; =0x00000007
+ add r4, r2, r4
+ smull r2, r3, r12, r4
+ sub r4, lr, r2
+ ldr r2, _020D656C ; =0x0000016D
+ ldr r3, _020D6570 ; =0x0000016E
+ str r4, [r0, #0xc]
+ mov lr, #0x0
+_020D64A8:
+ ands r12, lr, #0x3
+ moveq r12, r3
+ movne r12, r2
+ mov r4, r1
+ subs r1, r1, r12
+ movmi r1, r4
+ bmi _020D64D0
+ add lr, lr, #0x1
+ cmp lr, #0x63
+ blo _020D64A8
+_020D64D0:
+ ldr r2, _020D656C ; =0x0000016D
+ str lr, [r0, #0x0]
+ cmp r1, r2
+ movgt r1, r2
+ ands r2, lr, #0x3
+ bne _020D6518
+ cmp r1, #0x3c
+ bge _020D6514
+ cmp r1, #0x1f
+ movlt r2, #0x1
+ subge r1, r1, #0x1f
+ movge r2, #0x2
+ str r2, [r0, #0x4]
+ add r1, r1, #0x1
+ str r1, [r0, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D6514:
+ sub r1, r1, #0x1
+_020D6518:
+ ldr r3, _020D6574 ; =0x02106A20
+ mov r4, #0xb
+_020D6520:
+ ldr r2, [r3, r4, lsl #0x2]
+ mov r12, r4, lsl #0x2
+ cmp r1, r2
+ blt _020D6550
+ add r2, r4, #0x1
+ str r2, [r0, #0x4]
+ ldr r2, [r3, r12]
+ sub r1, r1, r2
+ add r1, r1, #0x1
+ str r1, [r0, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D6550:
+ subs r4, r4, #0x1
+ bpl _020D6520
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D6560: .word 0x00008EAC
+_020D6564: .word 0x92492493
+_020D6568: .word 0x00000007
+_020D656C: .word 0x0000016D
+_020D6570: .word 0x0000016E
+_020D6574: .word 0x02106A20
+
+ arm_func_start RTC_ConvertDateTimeToSecond
+RTC_ConvertDateTimeToSecond: ; 0x020D6578
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ bl RTC_ConvertDateToDay
+ mov r4, r0
+ mvn r0, #0x0
+ cmp r4, r0
+ addeq sp, sp, #0x4
+ moveq r1, r0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r0, r5
+ bl RTCi_ConvertTimeToSecond
+ mvn r2, #0x0
+ cmp r0, r2
+ moveq r1, r2
+ beq _020D65DC
+ ldr r1, _020D65EC ; =0x00015180
+ mov r2, #0x0
+ umull r12, r3, r4, r1
+ mla r3, r4, r2, r3
+ mov r2, r4, asr #0x1f
+ mla r3, r2, r1, r3
+ adds r2, r0, r12
+ adc r1, r3, r0, asr #0x1f
+_020D65DC:
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D65EC: .word 0x00015180
+
+ arm_func_start RTCi_ConvertTimeToSecond
+RTCi_ConvertTimeToSecond: ; 0x020D65F0
+ ldr r3, [r0, #0x4]
+ ldr r2, [r0, #0x0]
+ mov r1, #0x3c
+ mla r3, r2, r1, r3
+ ldr r0, [r0, #0x8]
+ mla r0, r3, r1, r0
+ bx lr
+
+ arm_func_start RTC_ConvertDateToDay
+RTC_ConvertDateToDay: ; 0x020D660C
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x64
+ bhs _020D665C
+ ldr r2, [r0, #0x4]
+ cmp r2, #0x1
+ blo _020D665C
+ cmp r2, #0xc
+ bhi _020D665C
+ ldr r1, [r0, #0x8]
+ cmp r1, #0x1
+ blo _020D665C
+ cmp r1, #0x1f
+ bhi _020D665C
+ ldr r0, [r0, #0xc]
+ cmp r0, #0x7
+ bge _020D665C
+ cmp r2, #0x1
+ blo _020D665C
+ cmp r2, #0xc
+ bls _020D6664
+_020D665C:
+ mvn r0, #0x0
+ bx lr
+_020D6664:
+ ldr r0, _020D6698 ; =0x02106A1C
+ sub r1, r1, #0x1
+ ldr r0, [r0, r2, lsl #0x2]
+ cmp r2, #0x3
+ add r2, r1, r0
+ blo _020D6684
+ ands r0, r3, #0x3
+ addeq r2, r2, #0x1
+_020D6684:
+ ldr r0, _020D669C ; =0x0000016D
+ add r1, r3, #0x3
+ mla r0, r3, r0, r2
+ add r0, r0, r1, lsr #0x2
+ bx lr
+ .balign 4
+_020D6698: .word 0x02106A1C
+_020D669C: .word 0x0000016D
diff --git a/arm9/asm/SDK_AUTOLOAD_LIST.s b/arm9/asm/SDK_AUTOLOAD_LIST.s
new file mode 100644
index 00000000..a2d1d5fe
--- /dev/null
+++ b/arm9/asm/SDK_AUTOLOAD_LIST.s
@@ -0,0 +1,21 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .data
+
+ .global SDK_AUTOLOAD_LIST
+SDK_AUTOLOAD_LIST: ; 0x02107700
+ .word SDK_AUTOLOAD_ITCM_START
+ .word 0x00000700
+ .word 0x00000000
+
+ .word SDK_AUTOLOAD_DTCM_START
+ .word 0x00000060
+ .word 0x00000020
+
+ .word 0x02400000
+ .word 0x00000000
+ .word 0x00000000
+
+ .global SDK_AUTOLOAD_LIST_END
+SDK_AUTOLOAD_LIST_END:
+
diff --git a/arm9/asm/SND_arm9.s b/arm9/asm/SND_arm9.s
new file mode 100644
index 00000000..99351712
--- /dev/null
+++ b/arm9/asm/SND_arm9.s
@@ -0,0 +1,1655 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+
+ arm_func_start PushCommand_impl
+PushCommand_impl: ; 0x020CE66C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r0, #0x1
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl SND_AllocCommand
+_020CE68C:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7, lr}
+ bxeq lr
+ str r7, [r0, #0x4]
+ str r6, [r0, #0x8]
+ str r5, [r0, #0xc]
+ ldr r1, [sp, #0x18]
+ str r4, [r0, #0x10]
+ str r1, [r0, #0x14]
+ bl SND_PushCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7, lr}
+ bx lr
+
+ arm_func_start SNDi_SetTrackParam
+SNDi_SetTrackParam: ; 0x020CE6C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [sp, #0x8]
+ mov lr, r2
+ str r3, [sp, #0x0]
+ mov r2, r1
+ orr r1, r0, r12, lsl #0x18
+ mov r3, lr
+ mov r0, #0x7
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020CE6F8
+FUN_020CE6F8: ; 0x020CE6F8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ mov r1, r0
+ mov r2, lr
+ mov r3, r12
+ mov r0, #0x6
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_ResetMasterPan
+SND_ResetMasterPan: ; 0x020CE72C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ mov r3, r2
+ mov r0, #0x18
+ mvn r1, #0x0
+ str r2, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetMasterPan
+SND_SetMasterPan: ; 0x020CE758
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ mov r1, r0
+ mov r3, r2
+ mov r0, #0x18
+ str r2, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetOutputSelector
+SND_SetOutputSelector: ; 0x020CE784
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ mov r1, r0
+ mov r2, lr
+ mov r3, r12
+ mov r0, #0x19
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_InvalidateWaveData
+SND_InvalidateWaveData: ; 0x020CE7B8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x20
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_InvalidateBankData
+SND_InvalidateBankData: ; 0x020CE7E4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x1f
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_InvalidateSeqData
+SND_InvalidateSeqData: ; 0x020CE810
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x1e
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetupChannelPcm
+SND_SetupChannelPcm: ; 0x020CE83C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r12, [sp, #0x18]
+ mov r3, r3, lsl #0x1a
+ orr r4, r3, r1, lsl #0x18
+ ldr r5, [sp, #0x24]
+ mov r3, r12, lsl #0x18
+ ldr r1, [sp, #0x1c]
+ ldr r12, [sp, #0x10]
+ orr r4, r4, r5, lsl #0x10
+ orr r4, r12, r4
+ ldr lr, [sp, #0x20]
+ orr r3, r3, r1, lsl #0x16
+ ldr r12, [sp, #0x14]
+ orr r1, r0, lr, lsl #0x10
+ orr r3, r12, r3
+ mov r0, #0xe
+ str r4, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SND_SetChannelPan
+SND_SetChannelPan: ; 0x020CE894
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x15
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetChannelVolume
+SND_SetChannelVolume: ; 0x020CE8C0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x0
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x14
+ str r12, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetChannelTimer
+SND_SetChannelTimer: ; 0x020CE8F4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x13
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_UnlockChannel
+SND_UnlockChannel: ; 0x020CE920
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x1b
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_LockChannel
+SND_LockChannel: ; 0x020CE94C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x1a
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetupAlarm
+SND_SetupAlarm: ; 0x020CE978
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r4, r2
+ mov r5, r1
+ ldr r2, [sp, #0x18]
+ mov r6, r0
+ mov r1, r3
+ bl SNDi_SetAlarmHandler
+_020CE998:
+ str r0, [sp]
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ mov r0, #0x12
+ bl PushCommand_impl
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+
+ arm_func_start SND_SetupCapture
+SND_SetupCapture: ; 0x020CE9BC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, r0, lsl #0x1f
+ orr r0, r0, r1, lsl #0x1e
+ ldr r12, [sp, #0x8]
+ mov r1, r2
+ orr r0, r0, r12, lsl #0x1d
+ ldr r2, [sp, #0xc]
+ mov lr, #0x0
+ orr r0, r0, r2, lsl #0x1c
+ ldr r12, [sp, #0x10]
+ mov r2, r3
+ orr r3, r0, r12, lsl #0x1b
+ mov r0, #0x11
+ str lr, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_StopTimer
+SND_StopTimer: ; 0x020CEA08
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r2
+ mov r9, r0
+ mov r8, r1
+ mov r6, r3
+ mov r4, r7
+ mov r5, #0x0
+ b _020CEA44
+_020CEA2C:
+ ands r0, r4, #0x1
+ beq _020CEA3C
+ mov r0, r5
+ bl SNDi_IncAlarmId
+_020CEA3C:
+ add r5, r5, #0x1
+ mov r4, r4, lsr #0x1
+_020CEA44:
+ cmp r5, #0x8
+ bge _020CEA54
+ cmp r4, #0x0
+ bne _020CEA2C
+_020CEA54:
+ mov r1, r9
+ mov r2, r8
+ mov r3, r7
+ mov r0, #0xd
+ str r6, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start SND_StartTimer
+SND_StartTimer: ; 0x020CEA78
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ mov r1, r0
+ mov r2, lr
+ mov r3, r12
+ mov r0, #0xc
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetTrackAllocatableChannel
+SND_SetTrackAllocatableChannel: ; 0x020CEAAC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r3, r2
+ mov r12, #0x0
+ mov r1, r0
+ mov r2, lr
+ mov r0, #0x9
+ str r12, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetTrackPan
+SND_SetTrackPan: ; 0x020CEAE0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r2
+ mov r12, #0x1
+ mov r2, #0x9
+ str r12, [sp, #0x0]
+ bl SNDi_SetTrackParam
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetTrackPitch
+SND_SetTrackPitch: ; 0x020CEB08
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r2
+ mov r12, #0x2
+ mov r2, #0xc
+ str r12, [sp, #0x0]
+ bl SNDi_SetTrackParam
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_SetPlayerChannelPriority
+SND_SetPlayerChannelPriority: ; 0x020CEB30
+ ldr ip, _020CEB44 ; =FUN_020CE6F8
+ mov r2, r1
+ mov r1, #0x4
+ mov r3, #0x1
+ bx r12
+ .balign 4
+_020CEB44: .word FUN_020CE6F8
+
+ arm_func_start SND_SetPlayerVolume
+SND_SetPlayerVolume: ; 0x020CEB48
+ ldr ip, _020CEB5C ; =FUN_020CE6F8
+ mov r2, r1
+ mov r1, #0x6
+ mov r3, #0x2
+ bx r12
+ .balign 4
+_020CEB5C: .word FUN_020CE6F8
+
+ arm_func_start SND_PauseSeq
+SND_PauseSeq: ; 0x020CEB60
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r3, #0x0
+ mov r1, r0
+ mov r0, #0x4
+ str r3, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_StartPreparedSeq
+SND_StartPreparedSeq: ; 0x020CEB8C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ mov r1, r0
+ mov r3, r2
+ mov r0, #0x3
+ str r2, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_PrepareSeq
+SND_PrepareSeq: ; 0x020CEBB8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ mov r1, r0
+ mov r2, lr
+ mov r3, r12
+ mov r0, #0x2
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SND_StopSeq
+SND_StopSeq: ; 0x020CEBEC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ mov r1, r0
+ mov r3, r2
+ mov r0, #0x1
+ str r2, [sp, #0x0]
+ bl PushCommand_impl
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SNDi_UnlockMutex
+SNDi_UnlockMutex: ; 0x020CEC18
+ ldr ip, _020CEC24 ; =OS_UnlockMutex
+ ldr r0, _020CEC28 ; =0x021D3820
+ bx r12
+ .balign 4
+_020CEC24: .word OS_UnlockMutex
+_020CEC28: .word 0x021D3820
+
+ arm_func_start SNDi_LockMutex
+SNDi_LockMutex: ; 0x020CEC2C
+ ldr ip, _020CEC38 ; =OS_LockMutex
+ ldr r0, _020CEC3C ; =0x021D3820
+ bx r12
+ .balign 4
+_020CEC38: .word OS_LockMutex
+_020CEC3C: .word 0x021D3820
+
+ arm_func_start SND_Init
+SND_Init: ; 0x020CEC40
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020CEC84 ; =0x021D381C
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020CEC88 ; =0x021D3820
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_InitMutex
+ bl SND_CommandInit
+ bl SND_AlarmInit
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CEC84: .word 0x021D381C
+_020CEC88: .word 0x021D3820
+
+ arm_func_start IsCommandAvailable
+IsCommandAvailable:
+ stmdb sp!, {r4,lr}
+ bl OS_IsRunOnEmulator
+_020CEC94:
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ ldr r1, _020CECD0
+ mov r2, #0x10
+ str r2, [r1]
+ ldr r4, [r1]
+ bl OS_RestoreInterrupts
+ cmp r4, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r4, lr}
+ bx lr
+_020CECD0: .word 0x04FFF200
+
+ arm_func_start AllocCommand
+AllocCommand: ; 0x020CECD4
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020CED24 ; =0x021D3838
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ bne _020CECFC
+ bl OS_RestoreInterrupts
+_020CECF0:
+ mov r0, #0x0
+ ldmia sp!, {r4, lr}
+ bx lr
+_020CECFC:
+ ldr r2, [r4, #0x0]
+ str r2, [r1, #0x0]
+ cmp r2, #0x0
+ ldreq r1, _020CED28 ; =0x021D3848
+ moveq r2, #0x0
+ streq r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CED24: .word 0x021D3838
+_020CED28: .word 0x021D3848
+
+ arm_func_start RequestCommandProc
+RequestCommandProc: ; 0x020CED2C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, #0x7
+ mov r4, #0x0
+_020CED3C:
+ mov r0, r5
+ mov r1, r4
+ mov r2, r4
+ bl PXI_SendWordByFifo
+_020CED4C:
+ cmp r0, #0
+ blt _020CED3C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start InitPXI
+InitPXI: ; 0x020CED60
+ stmdb sp!, {r4-r6,lr}
+ ldr r1, _020CEDC8 ; =PxiFifoCallback
+ mov r0, #0x7
+ bl PXI_SetFifoRecvCallback
+ bl IsCommandAvailable
+_020CED74:
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6, lr}
+ bxeq lr
+ mov r0, #0x7
+ mov r1, #0x1
+ bl PXI_IsCallbackReady
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6, lr}
+ bxne lr
+ mov r6, #0x64
+ mov r5, #0x7
+ mov r4, #0x1
+_020CEDA4:
+ mov r0, r6
+ bl OS_SpinWait
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+ cmp r0, #0x0
+ beq _020CEDA4
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020CEDC8: .word PxiFifoCallback
+
+ arm_func_start PxiFifoCallback
+PxiFifoCallback: ; 0x020CEDCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, r5
+ bl SNDi_CallAlarmHandler
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SND_CountWaitingCommand
+SND_CountWaitingCommand: ; 0x020CEDFC
+ stmdb sp!, {r4,lr}
+ bl SND_CountFreeCommand
+ mov r4, r0
+ bl SND_CountReservedCommand
+ rsb r1, r4, #0x100
+ sub r0, r1, r0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SND_CountReservedCommand
+SND_CountReservedCommand: ; 0x020CEE1C
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020CEE58 ; =0x021D3840
+ mov r4, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020CEE48
+_020CEE38:
+ ldr r1, [r1, #0x0]
+ add r4, r4, #0x1
+ cmp r1, #0x0
+ bne _020CEE38
+_020CEE48:
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CEE58: .word 0x021D3840
+
+ arm_func_start SND_CountFreeCommand
+SND_CountFreeCommand: ; 0x020CEE5C
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020CEE98 ; =0x021D3838
+ mov r4, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020CEE88
+_020CEE78:
+ ldr r1, [r1, #0x0]
+ add r4, r4, #0x1
+ cmp r1, #0x0
+ bne _020CEE78
+_020CEE88:
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CEE98: .word 0x021D3838
+
+ arm_func_start SND_IsFinishedCommandTag
+SND_IsFinishedCommandTag:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CEEEC ; =0x021D383C
+ ldr r1, [r1, #0x0]
+ cmp r4, r1
+ bls _020CEECC
+ sub r1, r4, r1
+ cmp r1, #0x80000000
+ movcc r4, #0x0
+ movcs r4, #0x1
+ b _020CEEDC
+_020CEECC:
+ sub r1, r1, r4
+ cmp r1, #0x80000000
+ movcc r4, #0x1
+ movcs r4, #0x0
+_020CEEDC:
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CEEEC: .word 0x021D383C
+
+ arm_func_start SND_GetCurrentCommandTag
+SND_GetCurrentCommandTag: ; 0x020CEEF0
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020CEF24 ; =0x021D3840
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ ldreq r1, _020CEF28 ; =0x021D383C
+ ldreq r4, [r1, #0x0]
+ ldrne r1, _020CEF2C ; =0x021D3858
+ ldrne r4, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CEF24: .word 0x021D3840
+_020CEF28: .word 0x021D383C
+_020CEF2C: .word 0x021D3858
+
+ arm_func_start SND_WaitForCommandProc
+SND_WaitForCommandProc: ; 0x020CEF30
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl SND_IsFinishedCommandTag
+_020CEF40:
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5, lr}
+ bxne lr
+ mov r4, #0x0
+_020CEF54:
+ mov r0, r4
+ bl SND_RecvCommandReply
+ cmp r0, #0x0
+ bne _020CEF54
+ mov r0, r5
+ bl SND_IsFinishedCommandTag
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5, lr}
+ bxne lr
+ bl RequestCommandProc
+ mov r0, r5
+ bl SND_IsFinishedCommandTag
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5, lr}
+ bxne lr
+ mov r4, #0x1
+_020CEF9C:
+ mov r0, r4
+ bl SND_RecvCommandReply
+ mov r0, r5
+ bl SND_IsFinishedCommandTag
+ cmp r0, #0x0
+ beq _020CEF9C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+
+ arm_func_start SND_FlushCommand
+SND_FlushCommand: ; 0x020CEFC0
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020CF164 ; =0x021D3840
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020CEFF8
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020CEFF8:
+ ldr r1, _020CF168 ; =0x021D3854
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x8
+ blt _020CF03C
+ ands r1, r5, #0x1
+ bne _020CF024
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020CF024:
+ mov r0, #0x1
+ bl SND_RecvCommandReply
+ ldr r0, _020CF168 ; =0x021D3854
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x8
+ bge _020CF024
+_020CF03C:
+ ldr r0, _020CF16C ; =0x021D3B00
+ mov r1, #0x1800
+ bl DC_FlushRange
+ ldr r1, _020CF164 ; =0x021D3840
+ mov r0, #0x7
+ ldr r1, [r1, #0x0]
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020CF05C:
+ cmp r0, #0x0
+ bge _020CF0E0
+ ands r0, r5, #0x1
+ bne _020CF084
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+_020CF084:
+ ldr r1, _020CF164
+ mov r0, #0x7
+ ldr r1, [r1]
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ bge _020CF0E0
+ ldr r6, _020CF164
+ mov r9, #0x64
+ mov r8, #0x7
+ mov r7, #0x0
+_020CF0B0:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r9
+ bl OS_SpinWait
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, r8
+ ldr r1, [r6]
+ mov r2, r7
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ blt _020CF0B0
+_020CF0E0:
+ ands r0, r5, #0x2
+ beq _020CF0EC
+ bl RequestCommandProc
+_020CF0EC:
+ ldr r0, _020CF170
+ ldr r1, _020CF164
+ ldr r3, [r0]
+ ldr r5, [r1]
+ add r1, r3, #0x1
+ ldr r2, _020CF174
+ str r1, [r0]
+ str r5, [r2, r3, lsl #2]
+ cmp r1, #0x8
+ movgt r1, #0x0
+ ldr r2, _020CF168
+ strgt r1, [r0]
+ ldr r1, _020CF178
+ ldr r3, [r2]
+ ldr r0, [r1]
+ add ip, r3, #0x1
+ add r6, r0, #0x1
+ ldr r5, _020CF164
+ mov lr, #0x0
+ ldr r3, _020CF17C
+ mov r0, r4
+ str lr, [r5]
+ str lr, [r3]
+ str ip, [r2]
+ str r6, [r1]
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9, lr}
+ bx lr
+_020CF164: .word 0x021D3840
+_020CF168: .word 0x021D3854
+_020CF16C: .word 0x021D3B00
+_020CF170: .word 0x021D3850
+_020CF174: .word 0x021D385C
+_020CF178: .word 0x021D3858
+_020CF17C: .word 0x021D3844
+
+ arm_func_start SND_PushCommand
+SND_PushCommand: ; 0x020CF180
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r2, _020CF1C0 ; =0x021D3844
+ ldr r1, [r2, #0x0]
+ cmp r1, #0x0
+ ldreq r1, _020CF1C4 ; =0x021D3840
+ streq r4, [r2, #0x0]
+ streq r4, [r1, #0x0]
+ strne r4, [r1, #0x0]
+ strne r4, [r2, #0x0]
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CF1C0: .word 0x021D3844
+_020CF1C4: .word 0x021D3840
+
+ arm_func_start SND_AllocCommand
+SND_AllocCommand:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl IsCommandAvailable
+_020CF1D4:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl AllocCommand
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ands r0, r4, #0x1
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl SND_CountWaitingCommand
+ cmp r0, #0x0
+ ble _020CF238
+ mov r4, #0x0
+_020CF214:
+ mov r0, r4
+ bl SND_RecvCommandReply
+ cmp r0, #0x0
+ bne _020CF214
+ bl AllocCommand
+ cmp r0, #0x0
+ beq _020CF240
+ ldmia sp!, {r4,lr}
+ bx lr
+_020CF238:
+ mov r0, #0x1
+ bl SND_FlushCommand
+_020CF240:
+ bl RequestCommandProc
+ mov r4, #0x1
+_020CF248:
+ mov r0, r4
+ bl SND_RecvCommandReply
+ bl AllocCommand
+ cmp r0, #0x0
+ beq _020CF248
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SND_RecvCommandReply
+SND_RecvCommandReply: ; 0x020CF264
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ ands r0, r4, #0x1
+ beq _020CF2C0
+ bl SNDi_GetFinishedCommandTag
+ ldr r4, _020CF380 ; =0x021D383C
+ ldr r1, [r4, #0x0]
+ cmp r1, r0
+ bne _020CF2E8
+ mov r6, #0x64
+_020CF294:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ bl OS_SpinWait
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl SNDi_GetFinishedCommandTag
+ ldr r1, [r4, #0x0]
+ cmp r1, r0
+ beq _020CF294
+ b _020CF2E8
+_020CF2C0:
+ bl SNDi_GetFinishedCommandTag
+ ldr r1, _020CF380 ; =0x021D383C
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ bne _020CF2E8
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020CF2DC:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020CF2E8:
+ ldr r0, _020CF384 ; =0x021D384C
+ ldr r2, _020CF388 ; =0x021D385C
+ ldr r3, [r0, #0x0]
+ add r1, r3, #0x1
+ ldr r4, [r2, r3, lsl #0x2]
+ str r1, [r0, #0x0]
+ cmp r1, #0x8
+ movgt r1, #0x0
+ strgt r1, [r0, #0x0]
+ ldr r0, [r4, #0x0]
+ mov r1, r4
+ cmp r0, #0x0
+ beq _020CF32C
+_020CF31C:
+ ldr r1, [r1, #0x0]
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020CF31C
+_020CF32C:
+ ldr r0, _020CF38C ; =0x021D3848
+ ldr r3, _020CF390 ; =0x021D3854
+ ldr r0, [r0, #0x0]
+ ldr r2, _020CF380 ; =0x021D383C
+ cmp r0, #0x0
+ strne r4, [r0, #0x0]
+ ldreq r0, _020CF394 ; =0x021D3838
+ ldr lr, [r3, #0x0]
+ streq r4, [r0, #0x0]
+ ldr ip, _020CF38C ; =0x021D3848
+ sub r6, lr, #0x1
+ ldr r0, [r2, #0x0]
+ str r1, [r12, #0x0]
+ add lr, r0, #0x1
+ mov r0, r5
+ str r6, [r3, #0x0]
+ str lr, [r2, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020CF380: .word 0x021D383C
+_020CF384: .word 0x021D384C
+_020CF388: .word 0x021D385C
+_020CF38C: .word 0x021D3848
+_020CF390: .word 0x021D3854
+_020CF394: .word 0x021D3838
+
+ arm_func_start SND_CommandInit
+SND_CommandInit: ; 0x020CF398
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ bl InitPXI
+ ldr r3, _020CF478 ; =0x021D3B00
+ ldr r0, _020CF47C ; =0x021D3838
+ mov r4, #0x0
+ str r3, [r0, #0x0]
+ mov r1, r3
+ mov r0, #0x18
+_020CF3BC:
+ add r4, r4, #0x1
+ mla r2, r4, r0, r1
+ cmp r4, #0xff
+ str r2, [r3], #0x18
+ blt _020CF3BC
+ ldr r7, _020CF480 ; =0x021D4B00
+ mov r10, #0x0
+ ldr r5, _020CF484 ; =0x021D3840
+ ldr r4, _020CF488 ; =0x021D3844
+ ldr lr, _020CF48C ; =0x021D3854
+ ldr ip, _020CF490 ; =0x021D384C
+ ldr r3, _020CF494 ; =0x021D3850
+ ldr r1, _020CF498 ; =0x021D383C
+ ldr sb, _020CF49C ; =0x021D52E8
+ ldr r6, _020CF4A0 ; =0x021D3848
+ ldr r2, _020CF4A4 ; =0x021D3858
+ mov r8, #0x1
+ ldr r0, _020CF4A8 ; =0x021D3880
+ ldr fp, _020CF4AC ; =0x021D5360
+ str r9, [r6, #0x0]
+ str r10, [r7, #0x7e8]
+ str r10, [r5, #0x0]
+ str r10, [r4, #0x0]
+ str r10, [lr, #0x0]
+ str r10, [r12, #0x0]
+ str r10, [r3, #0x0]
+ str r8, [r2, #0x0]
+ str r10, [r1, #0x0]
+ str r0, [r11, #0x0]
+ bl SNDi_InitSharedWork
+ mov r0, r8
+ bl SND_AllocCommand
+_020CF43C:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11, lr}
+ bxeq lr
+ mov r2, #0x1D
+ mov r1, fp
+ str r2, [r0, #0x4]
+ ldr r1, [r1]
+ str r1, [r0, #0x8]
+ bl SND_PushCommand
+ mov r0, r8
+ bl SND_FlushCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11, lr}
+ bx lr
+_020CF478: .word 0x021D3B00
+_020CF47C: .word 0x021D3838
+_020CF480: .word 0x021D4B00
+_020CF484: .word 0x021D3840
+_020CF488: .word 0x021D3844
+_020CF48C: .word 0x021D3854
+_020CF490: .word 0x021D384C
+_020CF494: .word 0x021D3850
+_020CF498: .word 0x021D383C
+_020CF49C: .word 0x021D52E8
+_020CF4A0: .word 0x021D3848
+_020CF4A4: .word 0x021D3858
+_020CF4A8: .word 0x021D3880
+_020CF4AC: .word 0x021D5360
+
+ arm_func_start SNDi_CallAlarmHandler
+SNDi_CallAlarmHandler: ; 0x020CF4B0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _020CF50C ; =0x021D5300
+ and r2, r0, #0xff
+ mov r1, #0xc
+ mla r3, r2, r1, r3
+ mov r1, r0, asr #0x8
+ ldrb r0, [r3, #0x8]
+ and r1, r1, #0xff
+ cmp r1, r0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, [r3, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, [r3, #0x4]
+ blx r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CF50C: .word 0x021D5300
+
+ arm_func_start SNDi_SetAlarmHandler
+SNDi_SetAlarmHandler:
+ mov r3, #0xc
+ mul r3, r0, r3
+ ldr r0, _020CF53C ; =0x021D5300
+ str r1, [r0, r3]
+ add r1, r0, r3
+ str r2, [r1, #0x4]
+ ldrb r0, [r1, #0x8]
+ add r0, r0, #0x1
+ strb r0, [r1, #0x8]
+ ldrb r0, [r1, #0x8]
+ bx lr
+ .balign 4
+_020CF53C: .word 0x021D5300
+
+ arm_func_start SNDi_IncAlarmId
+SNDi_IncAlarmId: ; 0x020CF540
+ ldr r2, _020CF55C ; =0x021D5300
+ mov r1, #0xc
+ mla r1, r0, r1, r2
+ ldrb r0, [r1, #0x8]
+ add r0, r0, #0x1
+ strb r0, [r1, #0x8]
+ bx lr
+ .balign 4
+_020CF55C: .word 0x021D5300
+
+ arm_func_start SND_AlarmInit
+SND_AlarmInit: ; 0x020CF560
+ ldr r1, _020CF58C ; =0x021D5300
+ mov r2, #0x0
+ mov r0, r2
+_020CF56C:
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x4]
+ add r2, r2, #0x1
+ strb r0, [r1, #0x8]
+ cmp r2, #0x8
+ add r1, r1, #0xc
+ blt _020CF56C
+ bx lr
+ .balign 4
+_020CF58C: .word 0x021D5300
+
+ arm_func_start SNDi_InitSharedWork
+SNDi_InitSharedWork: ; 0x020CF590
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ str r4, [r0, #0x4]
+ strh r4, [r0, #0x8]
+ strh r4, [r0, #0xa]
+ mov r12, r0
+ str r4, [r0, #0x0]
+ mov r3, r4
+ mvn r2, #0x0
+_020CF5B4:
+ mov lr, r3
+ str r3, [r12, #0x40]
+_020CF5BC:
+ add r1, r12, lr, lsl #0x1
+ add lr, lr, #0x1
+ strh r2, [r1, #0x20]
+ cmp lr, #0x10
+ blt _020CF5BC
+ add r4, r4, #0x1
+ cmp r4, #0x10
+ add r12, r12, #0x24
+ blt _020CF5B4
+ mov r3, #0x0
+ mvn r2, #0x0
+_020CF5E8:
+ add r1, r0, r3, lsl #0x1
+ add r1, r1, #0x200
+ add r3, r3, #0x1
+ strh r2, [r1, #0x60]
+ cmp r3, #0x10
+ blt _020CF5E8
+ mov r1, #0x280
+ bl DC_FlushRange
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SNDi_GetFinishedCommandTag
+SNDi_GetFinishedCommandTag: ; 0x020CF610
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CF640 ; =0x021D5360
+ mov r1, #0x4
+ ldr r0, [r0, #0x0]
+ bl DC_InvalidateRange
+ ldr r0, _020CF640 ; =0x021D5360
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CF640: .word 0x021D5360
+
+ arm_func_start SND_GetPlayerTickCounter
+SND_GetPlayerTickCounter: ; 0x020CF644
+ stmdb sp!, {r4,lr}
+ mov r1, #0x24
+ mul r4, r0, r1
+ ldr r0, _020CF680 ; =0x021D5360
+ mov r1, #0x4
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x40
+ add r0, r0, r4
+ bl DC_InvalidateRange
+ ldr r0, _020CF680 ; =0x021D5360
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ ldr r0, [r0, #0x40]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020CF680: .word 0x021D5360
+
+ arm_func_start SND_GetChannelStatus
+SND_GetChannelStatus: ; 0x020CF684
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CF6B8 ; =0x021D5360
+ mov r1, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x8
+ bl DC_InvalidateRange
+ ldr r0, _020CF6B8 ; =0x021D5360
+ ldr r0, [r0, #0x0]
+ ldrh r0, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CF6B8: .word 0x021D5360
+
+ arm_func_start SND_GetPlayerStatus
+SND_GetPlayerStatus: ; 0x020CF6BC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020CF6F0 ; =0x021D5360
+ mov r1, #0x4
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x4
+ bl DC_InvalidateRange
+ ldr r0, _020CF6F0 ; =0x021D5360
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020CF6F0: .word 0x021D5360
+
+ arm_func_start SND_CalcChannelVolume
+SND_CalcChannelVolume: ; 0x020CF6F4
+ ldr r1, _020CF75C ; =0xFFFFFD2D
+ cmp r0, r1
+ movlt r0, r1
+ blt _020CF70C
+ cmp r0, #0x0
+ movgt r0, #0x0
+_020CF70C:
+ ldr r1, _020CF760 ; =0x000002D3
+ ldr r2, _020CF764 ; =0x02103CAC
+ add r3, r0, r1
+ mvn r1, #0xef
+ cmp r0, r1
+ ldrb r2, [r2, r3]
+ movlt r0, #0x3
+ blt _020CF74C
+ mvn r1, #0x77
+ cmp r0, r1
+ movlt r0, #0x2
+ blt _020CF74C
+ mvn r1, #0x3b
+ cmp r0, r1
+ movlt r0, #0x1
+ movge r0, #0x0
+_020CF74C:
+ orr r0, r2, r0, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bx lr
+ .balign 4
+_020CF75C: .word 0xFFFFFD2D
+_020CF760: .word 0x000002D3
+_020CF764: .word 0x02103CAC
+
+ arm_func_start SND_GetWaveDataAddress
+SND_GetWaveDataAddress: ; 0x020CF768
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl SNDi_LockMutex
+ add r0, r5, r4, lsl #0x2
+ ldr r4, [r0, #0x3c]
+ cmp r4, #0x0
+ beq _020CF798
+ cmp r4, #0x2000000
+ addcc r4, r5, r4
+ b _020CF79C
+_020CF798:
+ mov r4, #0x0
+_020CF79C:
+ bl SNDi_UnlockMutex
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SND_SetWaveDataAddress
+SND_SetWaveDataAddress: ; 0x020CF7B0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SNDi_LockMutex
+ add r0, r6, #0x3c
+ add r2, r6, r5, lsl #0x2
+ add r0, r0, r5, lsl #0x2
+ mov r1, #0x4
+ str r4, [r2, #0x3c]
+ bl DC_StoreRange
+ bl SNDi_UnlockMutex
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SND_GetWaveDataCount
+SND_GetWaveDataCount: ; 0x020CF7E8
+ ldr r0, [r0, #0x38]
+ bx lr
+
+ arm_func_start SND_GetNextInstData
+SND_GetNextInstData: ; 0x020CF7F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r2, #0x0]
+ ldr r3, [r0, #0x38]
+ cmp r4, r3
+ bhs _020CF9B8
+ mov r12, #0x0
+_020CF80C:
+ add r3, r0, r4, lsl #0x2
+ ldr r4, [r3, #0x3c]
+ strb r4, [r1, #0x0]
+ ldrb r3, [r1, #0x0]
+ cmp r3, #0x10
+ bgt _020CF850
+ cmp r3, #0x10
+ bge _020CF8A8
+ cmp r3, #0x5
+ addls pc, pc, r3, lsl #0x2
+ b _020CF998
+_020CF838:
+ b _020CF998
+ b _020CF85C
+ b _020CF85C
+ b _020CF85C
+ b _020CF85C
+ b _020CF85C
+_020CF850:
+ cmp r3, #0x11
+ beq _020CF924
+ b _020CF998
+_020CF85C:
+ mov r3, r4, lsr #0x8
+ add r5, r0, r4, lsr #0x8
+ ldrh r4, [r0, r3]
+ ldrh r3, [r5, #0x2]
+ add sp, sp, #0x4
+ mov r0, #0x1
+ strh r4, [r1, #0x2]
+ strh r3, [r1, #0x4]
+ ldrh r4, [r5, #0x4]
+ ldrh r3, [r5, #0x6]
+ strh r4, [r1, #0x6]
+ strh r3, [r1, #0x8]
+ ldrh r3, [r5, #0x8]
+ strh r3, [r1, #0xA]
+ ldr r1, [r2]
+ add r1, r1, #0x1
+ str r1, [r2]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CF8A8:
+ add r5, r0, r4, lsr #0x8
+ b _020CF904
+_020CF8B0:
+ mov r0, #0xc
+ mla r12, lr, r0, r5
+ ldrh r4, [r12, #0x2]
+ ldrh r3, [r12, #0x4]
+ add sp, sp, #0x4
+ mov r0, #0x1
+ strh r4, [r1, #0x0]
+ strh r3, [r1, #0x2]
+ ldrh r4, [r12, #0x6]
+ ldrh r3, [r12, #0x8]
+ strh r4, [r1, #0x4]
+ strh r3, [r1, #0x6]
+ ldrh r4, [r12, #0xa]
+ ldrh r3, [r12, #0xc]
+ strh r4, [r1, #0x8]
+ strh r3, [r1, #0xa]
+ ldr r1, [r2, #0x4]
+ add r1, r1, #0x1
+ str r1, [r2, #0x4]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CF904:
+ ldrb r4, [r5, #0x1]
+ ldrb r3, [r5, #0x0]
+ ldr lr, [r2, #0x4]
+ sub r3, r4, r3
+ add r3, r3, #0x1
+ cmp lr, r3
+ blo _020CF8B0
+ b _020CF998
+_020CF924:
+ add r4, r0, r4, lsr #0x8
+ b _020CF98C
+_020CF92C:
+ ldrb lr, [r4, r3]
+ cmp lr, #0x0
+ beq _020CF998
+ mov r0, #0xc
+ mla lr, r3, r0, r4
+ ldrh r12, [lr, #0x8]
+ ldrh r3, [lr, #0xa]
+ add sp, sp, #0x4
+ mov r0, #0x1
+ strh r12, [r1, #0x0]
+ strh r3, [r1, #0x2]
+ ldrh r12, [lr, #0xc]
+ ldrh r3, [lr, #0xe]
+ strh r12, [r1, #0x4]
+ strh r3, [r1, #0x6]
+ ldrh r12, [lr, #0x10]
+ ldrh r3, [lr, #0x12]
+ strh r12, [r1, #0x8]
+ strh r3, [r1, #0xa]
+ ldr r1, [r2, #0x4]
+ add r1, r1, #0x1
+ str r1, [r2, #0x4]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020CF98C:
+ ldr r3, [r2, #0x4]
+ cmp r3, #0x8
+ blo _020CF92C
+_020CF998:
+ ldr r3, [r2, #0x0]
+ add r3, r3, #0x1
+ str r3, [r2, #0x0]
+ str r12, [r2, #0x4]
+ ldr r4, [r2, #0x0]
+ ldr r3, [r0, #0x38]
+ cmp r4, r3
+ blo _020CF80C
+_020CF9B8:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SND_GetFirstInstDataPos
+SND_GetFirstInstDataPos: ; 0x020CF9C8
+ sub sp, sp, #0x8
+ mov r1, #0x0
+ str r1, [sp, #0x0]
+ str r1, [sp, #0x4]
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+ add sp, sp, #0x8
+ bx lr
+
+ arm_func_start SND_DestroyWaveArc
+SND_DestroyWaveArc: ; 0x020CF9E8
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ bl SNDi_LockMutex
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ beq _020CFA28
+ mov r5, #0x0
+ mov r4, #0x8
+_020CFA08:
+ ldr r6, [r0, #0x4]
+ mov r1, r4
+ str r5, [r0, #0x0]
+ str r5, [r0, #0x4]
+ bl DC_StoreRange
+ mov r0, r6
+ cmp r6, #0x0
+ bne _020CFA08
+_020CFA28:
+ bl SNDi_UnlockMutex
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SND_DestroyBank
+SND_DestroyBank: ; 0x020CFA34
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ bl SNDi_LockMutex
+ add r5, r7, #0x18
+ mov r6, #0x0
+ mov r8, #0x8
+ mov r4, #0x3c
+_020CFA50:
+ add r1, r7, r6, lsl #0x3
+ ldr r0, [r1, #0x18]
+ cmp r0, #0x0
+ beq _020CFAB8
+ ldr r3, [r0, #0x18]
+ cmp r5, r3
+ bne _020CFA80
+ ldr r2, [r1, #0x1c]
+ mov r1, r4
+ str r2, [r0, #0x18]
+ bl DC_StoreRange
+ b _020CFAB8
+_020CFA80:
+ cmp r3, #0x0
+ beq _020CFAA0
+_020CFA88:
+ ldr r0, [r3, #0x4]
+ cmp r5, r0
+ beq _020CFAA0
+ mov r3, r0
+ cmp r0, #0x0
+ bne _020CFA88
+_020CFAA0:
+ add r0, r7, r6, lsl #0x3
+ ldr r2, [r0, #0x1c]
+ mov r0, r3
+ mov r1, r8
+ str r2, [r3, #0x4]
+ bl DC_StoreRange
+_020CFAB8:
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ add r5, r5, #0x8
+ blt _020CFA50
+ bl SNDi_UnlockMutex
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start SND_AssignWaveArc
+SND_AssignWaveArc: ; 0x020CFAD4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SNDi_LockMutex
+ add r3, r6, r5, lsl #0x3
+ ldr r2, [r3, #0x18]
+ mov r12, r5, lsl #0x3
+ cmp r2, #0x0
+ beq _020CFB70
+ cmp r4, r2
+ bne _020CFB10
+ bl SNDi_UnlockMutex
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020CFB10:
+ add r1, r6, #0x18
+ ldr r0, [r2, #0x18]
+ add r12, r1, r12
+ cmp r12, r0
+ bne _020CFB3C
+ ldr r0, [r3, #0x1c]
+ mov r1, #0x3c
+ str r0, [r2, #0x18]
+ ldr r0, [r3, #0x18]
+ bl DC_StoreRange
+ b _020CFB70
+_020CFB3C:
+ cmp r0, #0x0
+ beq _020CFB5C
+_020CFB44:
+ ldr r1, [r0, #0x4]
+ cmp r12, r1
+ beq _020CFB5C
+ mov r0, r1
+ cmp r1, #0x0
+ bne _020CFB44
+_020CFB5C:
+ add r1, r6, r5, lsl #0x3
+ ldr r2, [r1, #0x1c]
+ mov r1, #0x8
+ str r2, [r0, #0x4]
+ bl DC_StoreRange
+_020CFB70:
+ add r0, r6, #0x18
+ ldr r1, [r4, #0x18]
+ add r0, r0, r5, lsl #0x3
+ str r0, [r4, #0x18]
+ add r0, r6, r5, lsl #0x3
+ str r1, [r0, #0x1c]
+ str r4, [r0, #0x18]
+ bl SNDi_UnlockMutex
+ mov r0, r6
+ mov r1, #0x3c
+ bl DC_StoreRange
+ mov r0, r4
+ mov r1, #0x3c
+ bl DC_StoreRange
+ ldmia sp!, {r4-r6,lr}
+ bx lr
diff --git a/arm9/asm/SPI_arm9.s b/arm9/asm/SPI_arm9.s
new file mode 100644
index 00000000..915bb22c
--- /dev/null
+++ b/arm9/asm/SPI_arm9.s
@@ -0,0 +1,1487 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+
+ arm_func_start TP_CheckError
+TP_CheckError: ; 0x020D36C4
+ ldr r1, _020D36D4 ; =0x021D5474
+ ldrh r1, [r1, #0x34]
+ and r0, r1, r0
+ bx lr
+ .balign 4
+_020D36D4: .word 0x021D5474
+
+ arm_func_start TP_WaitBusy
+TP_WaitBusy: ; 0x020D36D8
+ ldr r1, _020D36EC ; =0x021D5474
+_020D36DC:
+ ldrh r2, [r1, #0x36]
+ ands r2, r2, r0
+ bne _020D36DC
+ bx lr
+ .balign 4
+_020D36EC: .word 0x021D5474
+
+ arm_func_start TP_GetCalibratedPoint
+TP_GetCalibratedPoint: ; 0x020D36F0
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020D3818 ; =0x021D5474
+ ldrh r2, [r2, #0x30]
+ cmp r2, #0x0
+ bne _020D372C
+ ldrh r3, [r1, #0x0]
+ ldrh r2, [r1, #0x2]
+ strh r3, [r0, #0x0]
+ strh r2, [r0, #0x2]
+ ldrh r2, [r1, #0x4]
+ ldrh r1, [r1, #0x6]
+ strh r2, [r0, #0x4]
+ strh r1, [r0, #0x6]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D372C:
+ ldrh r3, [r1, #0x4]
+ ldr r2, _020D381C ; =0x021D548C
+ strh r3, [r0, #0x4]
+ ldrh r3, [r1, #0x6]
+ strh r3, [r0, #0x6]
+ ldrh r3, [r1, #0x4]
+ cmp r3, #0x0
+ moveq r1, #0x0
+ streqh r1, [r0, #0x0]
+ streqh r1, [r0, #0x2]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r4, [r1, #0x0]
+ ldr r3, [r2, #0x0]
+ ldr lr, [r2, #0x8]
+ mov r12, r4, lsl #0x2
+ mov r4, r12, asr #0x1f
+ subs r12, r12, r3
+ sbc r3, r4, r3, asr #0x1f
+ umull r6, r5, lr, r12
+ mla r5, lr, r3, r5
+ mov r3, lr, asr #0x1f
+ mla r5, r3, r12, r5
+ mov r3, r6, lsr #0x16
+ orr r3, r3, r5, lsl #0xa
+ strh r3, [r0, #0x0]
+ ldrsh r3, [r0, #0x0]
+ cmp r3, #0x0
+ movlt r3, #0x0
+ strlth r3, [r0, #0x0]
+ blt _020D37B4
+ cmp r3, #0xff
+ movgt r3, #0xff
+ strgth r3, [r0, #0x0]
+_020D37B4:
+ ldrh r3, [r1, #0x2]
+ ldr r1, [r2, #0xc]
+ ldr r12, [r2, #0x14]
+ mov r3, r3, lsl #0x2
+ mov r2, r3, asr #0x1f
+ subs r3, r3, r1
+ sbc r1, r2, r1, asr #0x1f
+ umull r4, lr, r12, r3
+ mla lr, r12, r1, lr
+ mov r1, r12, asr #0x1f
+ mla lr, r1, r3, lr
+ mov r1, r4, lsr #0x16
+ orr r1, r1, lr, lsl #0xa
+ strh r1, [r0, #0x2]
+ ldrsh r1, [r0, #0x2]
+ cmp r1, #0x0
+ movlt r1, #0x0
+ strlth r1, [r0, #0x2]
+ ldmltia sp!, {r4-r6,lr}
+ bxlt lr
+ cmp r1, #0xbf
+ movgt r1, #0xbf
+ strgth r1, [r0, #0x2]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D3818: .word 0x021D5474
+_020D381C: .word 0x021D548C
+
+ arm_func_start TP_CalcCalibrateParam
+TP_CalcCalibrateParam:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ mov r7, r0
+ mov r5, r2
+ mov r4, r3
+ cmp r6, #0x1000
+ bhs _020D3860
+ cmp r5, #0x1000
+ bhs _020D3860
+ ldrh r8, [sp, #0x2c]
+ cmp r8, #0x1000
+ bhs _020D3860
+ ldrh r3, [sp, #0x30]
+ cmp r3, #0x1000
+ blo _020D3870
+_020D3860:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D3870:
+ cmp r4, #0x100
+ bhs _020D389C
+ ldrh r2, [sp, #0x34]
+ cmp r2, #0x100
+ bhs _020D389C
+ ldrh r1, [sp, #0x28]
+ cmp r1, #0xc0
+ bhs _020D389C
+ ldrh r0, [sp, #0x38]
+ cmp r0, #0xc0
+ blo _020D38AC
+_020D389C:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D38AC:
+ cmp r4, r2
+ beq _020D38CC
+ cmp r1, r0
+ beq _020D38CC
+ cmp r6, r8
+ beq _020D38CC
+ cmp r5, r3
+ bne _020D38DC
+_020D38CC:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D38DC:
+ bl OS_DisableInterrupts
+ ldrh r1, [sp, #0x2c]
+ ldr r3, _020D3A80 ; =0x04000280
+ ldr fp, _020D3A84 ; =0x04000290
+ str r1, [sp, #0x0]
+ ldr r2, [sp, #0x0]
+ ldrh r1, [sp, #0x34]
+ sub r9, r6, r2
+ mov r2, #0x0
+ mov r12, r9, lsl #0x8
+ strh r2, [r3, #0x0]
+ str r12, [r11, #0x0]
+ ldrh r8, [sp, #0x30]
+ ldrh r10, [sp, #0x38]
+ ldrh r9, [sp, #0x28]
+ ldr fp, _020D3A88 ; =0x04000298
+ sub r12, r4, r1
+ str r12, [r11, #0x0]
+ str r2, [r11, #0x4]
+ sub r11, r5, r8
+ sub r2, r9, r10
+_020D3930:
+ ldrh r12, [r3, #0x0]
+ ands r12, r12, #0x8000
+ bne _020D3930
+ ldr ip, _020D3A8C ; =0x040002A0
+ mov r11, r11, lsl #0x8
+ ldr lr, [r12, #0x0]
+ mov r12, #0x0
+ strh r12, [r3, #0x0]
+ ldr r3, _020D3A84 ; =0x04000290
+ cmp lr, #0x8000
+ str r11, [r3, #0x0]
+ ldr r3, _020D3A88 ; =0x04000298
+ str r2, [r3, #0x0]
+ mov r2, r3
+ str r12, [r2, #0x4]
+ bge _020D3980
+ mov r2, #0x8000
+ rsb r2, r2, #0x0
+ cmp lr, r2
+ bge _020D3994
+_020D3980:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D3994:
+ strh lr, [r7, #0x4]
+ ldrsh r11, [r7, #0x4]
+ add r3, r4, r1
+ ldr r1, [sp, #0x0]
+ add r4, r6, r1
+ mul r1, r11, r3
+ mov r3, r4, lsl #0x8
+ sub r1, r3, r1
+ mov r1, r1, lsl #0x9
+ mov r1, r1, asr #0x10
+ cmp r1, #0x8000
+ bge _020D39CC
+ cmp r1, r2
+ bge _020D39E0
+_020D39CC:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D39E0:
+ ldr r2, _020D3A80 ; =0x04000280
+ strh r1, [r7, #0x0]
+_020D39E8:
+ ldrh r1, [r2, #0x0]
+ ands r1, r1, #0x8000
+ bne _020D39E8
+ ldr r1, _020D3A8C ; =0x040002A0
+ ldr r4, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ cmp r4, #0x8000
+ bge _020D3A18
+ mov r0, #0x8000
+ rsb r1, r0, #0x0
+ cmp r4, r1
+ bge _020D3A28
+_020D3A18:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D3A28:
+ strh r4, [r7, #0x6]
+ ldrsh r2, [r7, #0x6]
+ add r0, r9, r10
+ add r3, r5, r8
+ mul r0, r2, r0
+ mov r2, r3, lsl #0x8
+ sub r0, r2, r0
+ mov r0, r0, lsl #0x9
+ mov r0, r0, asr #0x10
+ cmp r0, #0x8000
+ bge _020D3A5C
+ cmp r0, r1
+ bge _020D3A6C
+_020D3A5C:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D3A6C:
+ strh r0, [r7, #0x2]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D3A80: .word 0x04000280
+_020D3A84: .word 0x04000290
+_020D3A88: .word 0x04000298
+_020D3A8C: .word 0x040002A0
+
+ arm_func_start TP_GetLatestIndexInAuto
+TP_GetLatestIndexInAuto: ; 0x020D3A90
+ ldr r0, _020D3A9C ; =0x021D5474
+ ldrh r0, [r0, #0xc]
+ bx lr
+ .balign 4
+_020D3A9C: .word 0x021D5474
+
+ arm_func_start TP_GetLatestRawPointInAuto
+TP_GetLatestRawPointInAuto: ; 0x020D3AA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r1, #0x3
+ ldr lr, _020D3C10 ; =0x021D5474
+ strh r1, [r0, #0x6]
+ ldrh r1, [lr, #0xe]
+ ldrh r3, [lr, #0xc]
+ cmp r1, #0x1
+ beq _020D3AD0
+ ldrh r1, [lr, #0x14]
+ cmp r1, #0x1
+ bne _020D3B0C
+_020D3AD0:
+ ldr r1, _020D3C10 ; =0x021D5474
+ mov r2, r3, lsl #0x3
+ ldr r1, [r1, #0x10]
+ add sp, sp, #0x4
+ add r3, r1, r3, lsl #0x3
+ ldrh r2, [r1, r2]
+ ldrh r1, [r3, #0x2]
+ strh r2, [r0, #0x0]
+ strh r1, [r0, #0x2]
+ ldrh r2, [r3, #0x4]
+ ldrh r1, [r3, #0x6]
+ strh r2, [r0, #0x4]
+ strh r1, [r0, #0x6]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D3B0C:
+ add r1, r0, #0x6
+ mov r12, #0x0
+ b _020D3BE0
+_020D3B18:
+ subs r5, r3, r12
+ ldr r2, [lr, #0x10]
+ addmi r5, r5, r4
+ add r2, r2, r5, lsl #0x3
+ ldrh r4, [r2, #0x4]
+ cmp r4, #0x0
+ bne _020D3B60
+ ldrh r3, [r2, #0x0]
+ ldrh r1, [r2, #0x2]
+ add sp, sp, #0x4
+ strh r3, [r0, #0x0]
+ strh r1, [r0, #0x2]
+ ldrh r3, [r2, #0x4]
+ ldrh r1, [r2, #0x6]
+ strh r3, [r0, #0x4]
+ strh r1, [r0, #0x6]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D3B60:
+ ldrh r4, [r0, #0x6]
+ ands r4, r4, #0x1
+ beq _020D3B90
+ ldrh r4, [r2, #0x6]
+ ands r4, r4, #0x1
+ bne _020D3B90
+ ldrh r4, [r2, #0x0]
+ cmp r12, #0x0
+ strh r4, [r0, #0x0]
+ ldrneh r4, [r1, #0x0]
+ bicne r4, r4, #0x1
+ strneh r4, [r1, #0x0]
+_020D3B90:
+ ldrh r4, [r0, #0x6]
+ ands r4, r4, #0x2
+ beq _020D3BC0
+ ldrh r4, [r2, #0x6]
+ ands r4, r4, #0x2
+ bne _020D3BC0
+ ldrh r2, [r2, #0x2]
+ cmp r12, #0x0
+ strh r2, [r0, #0x2]
+ ldrneh r2, [r1, #0x0]
+ bicne r2, r2, #0x2
+ strneh r2, [r1, #0x0]
+_020D3BC0:
+ ldrh r2, [r0, #0x6]
+ cmp r2, #0x0
+ moveq r1, #0x1
+ streqh r1, [r0, #0x4]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ add r12, r12, #0x1
+_020D3BE0:
+ ldrh r2, [lr, #0xe]
+ cmp r12, r2
+ bge _020D3BFC
+ ldrh r4, [lr, #0x14]
+ sub r2, r4, #0x1
+ cmp r12, r2
+ blt _020D3B18
+_020D3BFC:
+ mov r1, #0x1
+ strh r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D3C10: .word 0x021D5474
+
+ arm_func_start TP_RequestAutoSamplingStopAsync
+TP_RequestAutoSamplingStopAsync: ; 0x020D3C14
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r1, _020D3CB0 ; =0x03000200
+ mov r0, #0x6
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D3C30:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ cmp r0, #0x0
+ bne _020D3C84
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, _020D3CB4
+ ldrh r1, [r0, #0x34]
+ ldr r3, [r0]
+ orr r1, r1, #0x4
+ strh r1, [r0, #0x34]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ mov r0, #0x2
+ mov r1, #0x4
+ mov r2, #0x0
+ blx r3
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D3C84:
+ ldr r1, _020D3CB4
+ mov r0, r4
+ ldrh r2, [r1, #0x36]
+ orr r2, r2, #0x4
+ strh r2, [r1, #0x36]
+ ldrh r2, [r1, #0x34]
+ bic r2, r2, #0x4
+ strh r2, [r1, #0x34]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D3CB0: .word 0x03000200
+_020D3CB4: .word 0x021D5474
+
+ arm_func_start TP_RequestAutoSamplingStartAsync
+TP_RequestAutoSamplingStartAsync: ; 0x020D3CB8
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _020D3DC0 ; =0x021D5474
+ mov r5, r1
+ mov r12, #0x0
+ mov r6, r0
+ str r2, [r4, #0x10]
+ strh r12, [r4, #0xc]
+ strh r5, [r4, #0xe]
+ strh r3, [r4, #0x14]
+ cmp r3, #0x0
+ bls _020D3D00
+ mov r1, r12
+_020D3CE8:
+ ldr r0, [r4, #0x10]
+ add r0, r0, r12, lsl #0x3
+ add r12, r12, #0x1
+ strh r1, [r0, #0x4]
+ cmp r12, r3
+ blo _020D3CE8
+_020D3D00:
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _020D3DC4 ; =0x02000100
+ and r1, r5, #0xff
+ orr r1, r1, r0
+ mov r0, #0x6
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D3D20:
+ cmp r0, #0x0
+ movlt r0, #0x0
+ blt _020D3D4C
+ ldr r1, _020D3DC8
+ mov r0, #0x6
+ orr r1, r6, r1
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ movge r0, #0x1
+_020D3D4C:
+ ands r0, r0, #0xFF
+ bne _020D3D94
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, _020D3DC0
+ ldrh r1, [r0, #0x34]
+ ldr r3, [r0]
+ orr r1, r1, #0x2
+ strh r1, [r0, #0x34]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4-r6, lr}
+ bxeq lr
+ mov r0, #0x1
+ mov r1, #0x4
+ mov r2, #0x0
+ blx r3
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020D3D94:
+ ldr r1, _020D3DC0
+ mov r0, r4
+ ldrh r2, [r1, #0x36]
+ orr r2, r2, #0x2
+ strh r2, [r1, #0x36]
+ ldrh r2, [r1, #0x34]
+ bic r2, r2, #0x2
+ strh r2, [r1, #0x34]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020D3DC0: .word 0x021D5474
+_020D3DC4: .word 0x02000100
+_020D3DC8: .word 0x01010000
+
+ arm_func_start TP_WaitRawResult
+TP_WaitRawResult: ; 0x020D3DCC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ bl TP_WaitBusy
+ ldr r1, _020D3E20 ; =0x021D5474
+ ldrh r0, [r1, #0x34]
+ ands r0, r0, #0x1
+ movne r0, #0x1
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrh r3, [r1, #0x4]
+ ldrh r2, [r1, #0x6]
+ mov r0, #0x0
+ strh r3, [r4, #0x0]
+ strh r2, [r4, #0x2]
+ ldrh r2, [r1, #0x8]
+ ldrh r1, [r1, #0xa]
+ strh r2, [r4, #0x4]
+ strh r1, [r4, #0x6]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D3E20: .word 0x021D5474
+
+ arm_func_start TP_RequestSamplingAsync
+TP_RequestSamplingAsync: ; 0x020D3E24
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, #0x6
+ mov r1, #0x3000000
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D3E40:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ cmp r0, #0x0
+ bne _020D3E94
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, _20D3EC0
+ ldrh r1, [r0, #0x34]
+ ldr r3, [r0]
+ orr r1, r1, #0x1
+ strh r1, [r0, #0x34]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ mov r0, #0x0
+ mov r2, r0
+ mov r1, #0x4
+ blx r3
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D3E94:
+ ldr r1, _20D3EC0
+ mov r0, r4
+ ldrh r2, [r1, #0x36]
+ orr r2, r2, #0x1
+ strh r2, [r1, #0x36]
+ ldrh r2, [r1, #0x34]
+ bic r2, r2, #0x1
+ strh r2, [r1, #0x34]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4, lr}
+ bx lr
+_20D3EC0: .word 0x021D5474
+
+ arm_func_start TP_SetCalibrateParam
+TP_SetCalibrateParam: ; 0x020D3EC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r4, r0
+ ldreq r0, _020D3FF8 ; =0x021D5474
+ moveq r1, #0x0
+ streqh r1, [r0, #0x30]
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ ldrsh lr, [r4, #0x4]
+ cmp lr, #0x0
+ beq _020D3F50
+ ldr r5, _020D3FFC ; =0x04000280
+ mov r12, #0x0
+ ldr r2, _020D4000 ; =0x04000290
+ strh r12, [r5, #0x0]
+ mov r3, #0x10000000
+ ldr r1, _020D4004 ; =0x04000298
+ str r3, [r2, #0x0]
+ str lr, [r1, #0x0]
+ str r12, [r1, #0x4]
+ ldrsh r2, [r4, #0x0]
+ ldr r1, _020D3FF8 ; =0x021D5474
+ str r2, [r1, #0x18]
+ ldrsh r2, [r4, #0x4]
+ str r2, [r1, #0x1c]
+_020D3F30:
+ ldrh r1, [r5, #0x0]
+ ands r1, r1, #0x8000
+ bne _020D3F30
+ ldr r2, _020D4008 ; =0x040002A0
+ ldr r1, _020D3FF8 ; =0x021D5474
+ ldr r2, [r2, #0x0]
+ str r2, [r1, #0x20]
+ b _020D3F64
+_020D3F50:
+ ldr r1, _020D3FF8 ; =0x021D5474
+ mov r2, #0x0
+ str r2, [r1, #0x18]
+ str r2, [r1, #0x1c]
+ str r2, [r1, #0x20]
+_020D3F64:
+ ldrsh r5, [r4, #0x6]
+ cmp r5, #0x0
+ beq _020D3FC8
+ ldr ip, _020D3FFC ; =0x04000280
+ mov lr, #0x0
+ ldr r2, _020D4000 ; =0x04000290
+ strh lr, [r12, #0x0]
+ mov r3, #0x10000000
+ ldr r1, _020D4004 ; =0x04000298
+ str r3, [r2, #0x0]
+ str r5, [r1, #0x0]
+ str lr, [r1, #0x4]
+ ldrsh r2, [r4, #0x2]
+ ldr r1, _020D3FF8 ; =0x021D5474
+ str r2, [r1, #0x24]
+ ldrsh r2, [r4, #0x6]
+ str r2, [r1, #0x28]
+_020D3FA8:
+ ldrh r1, [r12, #0x0]
+ ands r1, r1, #0x8000
+ bne _020D3FA8
+ ldr r2, _020D4008 ; =0x040002A0
+ ldr r1, _020D3FF8 ; =0x021D5474
+ ldr r2, [r2, #0x0]
+ str r2, [r1, #0x2c]
+ b _020D3FDC
+_020D3FC8:
+ ldr r1, _020D3FF8 ; =0x021D5474
+ mov r2, #0x0
+ str r2, [r1, #0x24]
+ str r2, [r1, #0x28]
+ str r2, [r1, #0x2c]
+_020D3FDC:
+ bl OS_RestoreInterrupts
+ ldr r0, _020D3FF8 ; =0x021D5474
+ mov r1, #0x1
+ strh r1, [r0, #0x30]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D3FF8: .word 0x021D5474
+_020D3FFC: .word 0x04000280
+_020D4000: .word 0x04000290
+_020D4004: .word 0x04000298
+_020D4008: .word 0x040002A0
+
+ arm_func_start TP_GetUserInfo
+TP_GetUserInfo: ; 0x020D400C
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x18
+ ldr ip, _020D40B4 ; =0x027FFC80
+ mov r4, r0
+ ldrh r1, [r12, #0x58]
+ ldrh r2, [r12, #0x5a]
+ ldrb r3, [r12, #0x5c]
+ cmp r1, #0x0
+ ldrb lr, [r12, #0x5d]
+ ldrh r6, [r12, #0x5e]
+ ldrh r5, [r12, #0x60]
+ ldrb r0, [r12, #0x62]
+ ldrb r12, [r12, #0x63]
+ bne _020D405C
+ cmp r6, #0x0
+ bne _020D405C
+ cmp r2, #0x0
+ bne _020D405C
+ cmp r5, #0x0
+ beq _020D4080
+_020D405C:
+ str lr, [sp, #0x0]
+ str r6, [sp, #0x4]
+ str r5, [sp, #0x8]
+ str r0, [sp, #0xc]
+ mov r0, r4
+ str r12, [sp, #0x10]
+ bl TP_CalcCalibrateParam
+_020D4078:
+ cmp r0, #0
+ beq _020D40A4
+_020D4080:
+ mov r0, #0x0
+ strh r0, [r4, #0x0]
+ strh r0, [r4, #0x2]
+ strh r0, [r4, #0x4]
+ strh r0, [r4, #0x6]
+ add sp, sp, #0x18
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D40A4:
+ mov r0, #0x1
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D40B4: .word 0x027FFC80
+
+ arm_func_start TP_Init
+TP_Init: ; 0x020D40B8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D413C ; =0x021D5470
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r1, #0x1
+ strh r1, [r0, #0x0]
+ bl PXI_Init
+ ldr r0, _020D4140 ; =0x021D5474
+ mov r1, #0x0
+ strh r1, [r0, #0x32]
+ strh r1, [r0, #0x36]
+ strh r1, [r0, #0xc]
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x10]
+ strh r1, [r0, #0x30]
+ strh r1, [r0, #0x34]
+ mov r5, #0x6
+ mov r4, #0x1
+_020D4110:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020D411C:
+ cmp r0, #0x0
+ beq _020D4110
+ ldr r1, _020D4144
+ mov r0, #0x6
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D413C: .word 0x021D5470 ; initial$7594
+_020D4140: .word 0x021D5474 ; tpState
+_020D4144: .word TPi_TpCallback
+
+ arm_func_start TPi_TpCallback
+TPi_TpCallback: ; 0x020D4148
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r0, r1, lsl #0x10
+ mov r3, r0, lsr #0x10
+ and r0, r3, #0x7f00
+ mov r0, r0, lsl #0x8
+ cmp r2, #0x0
+ mov r0, r0, lsr #0x10
+ beq _020D41AC
+ ldr r1, _020D43FC ; =0x021D5474
+ mov r2, #0x1
+ ldrh r4, [r1, #0x34]
+ ldr r3, [r1, #0x0]
+ orr r2, r4, r2, lsl r0
+ cmp r3, #0x0
+ strh r2, [r1, #0x34]
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r1, #0x4
+ mov r2, #0x0
+ blx r3
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D41AC:
+ cmp r0, #0x10
+ bne _020D427C
+ ldr r1, _020D43FC ; =0x021D5474
+ ldrh r3, [r1, #0xc]
+ ldrh r2, [r1, #0x14]
+ add r3, r3, #0x1
+ strh r3, [r1, #0xc]
+ ldrh r3, [r1, #0xc]
+ cmp r3, r2
+ movcs r2, #0x0
+ strcsh r2, [r1, #0xc]
+ ldr r1, _020D4400 ; =0x027FFFAA
+ ldr r2, _020D43FC ; =0x021D5474
+ ldrh r3, [r1, #0x0]
+ ldr r1, _020D4404 ; =0x027FFFAC
+ ldrh r12, [r2, #0xc]
+ strh r3, [sp, #0x0]
+ ldrh r1, [r1, #0x0]
+ ldr r4, [r2, #0x10]
+ mov lr, r12, lsl #0x3
+ strh r1, [sp, #0x2]
+ ldr r3, [sp, #0x0]
+ add r1, r4, r12, lsl #0x3
+ mov r3, r3, lsl #0x14
+ mov r3, r3, lsr #0x14
+ strh r3, [r4, lr]
+ ldr r3, [sp, #0x0]
+ mov r3, r3, lsl #0x8
+ mov r3, r3, lsr #0x14
+ strh r3, [r1, #0x2]
+ ldr r3, [sp, #0x0]
+ mov r3, r3, lsl #0x7
+ mov r3, r3, lsr #0x1f
+ and r3, r3, #0xff
+ strh r3, [r1, #0x4]
+ ldr r3, [sp, #0x0]
+ mov r3, r3, lsl #0x5
+ mov r3, r3, lsr #0x1e
+ and r3, r3, #0xff
+ strh r3, [r1, #0x6]
+ ldr r3, [r2, #0x0]
+ cmp r3, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrh r2, [r2, #0xc]
+ mov r1, #0x0
+ and r2, r2, #0xff
+ blx r3
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D427C:
+ ands r1, r1, #0x1000000
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ and r1, r3, #0xff
+ cmp r1, #0x4
+ addls pc, pc, r1, lsl #0x2
+ b _020D43EC
+_020D429C:
+ b _020D42B0
+ b _020D43EC
+ b _020D4390
+ b _020D4398
+ b _020D4388
+_020D42B0:
+ cmp r0, #0x0
+ beq _020D42D4
+ cmp r0, #0x1
+ beq _020D4338
+ cmp r0, #0x2
+ ldreq r1, _020D43FC
+ moveq r2, #0x0
+ streqh r2, [r1, #0x32]
+ b _020D4344
+_020D42D4:
+ ldr r1, _020D4400
+ ldr r3, _020D4404
+ ldrh ip, [r1]
+ ldr r1, _020D43FC
+ mov r2, #0x0
+ strh ip, [sp, #0x4]
+ ldrh r3, [r3]
+ strh r3, [sp, #0x6]
+ ldr ip, [sp, #0x4]
+ strh r2, [r1, #0x32]
+ mov r3, ip, lsl #0x7
+ mov r2, ip, lsl #0x5
+ mov lr, ip, lsl #0x14
+ mov ip, ip, lsl #0x8
+ mov r3, r3, lsr #0x1F
+ mov r2, r2, lsr #0x1E
+ mov lr, lr, lsr #0x14
+ mov ip, ip, lsr #0x14
+ and r3, r3, #0xFF
+ and r2, r2, #0xFF
+ strh lr, [r1, #0x4]
+ strh ip, [r1, #0x6]
+ strh r3, [r1, #0x8]
+ strh r2, [r1, #0xA]
+ b _020D4344
+_020D4338:
+ ldr r1, _020D43FC
+ mov r2, #0x2
+ strh r2, [r1, #0x32]
+_020D4344:
+ ldr r1, _020D43FC
+ mov r2, #0x1
+ ldrh ip, [r1, #0x36]
+ mvn r2, r2, lsl r0
+ ldr r3, [r1]
+ and r2, ip, r2
+ cmp r3, #0x0
+ strh r2, [r1, #0x36]
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ mov r1, #0x0
+ mov r2, r1
+ blx r3
+ add sp, sp, #0x8
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D4388:
+ mov r4, #0x3
+ b _020D439C
+_020D4390:
+ mov r4, #0x1
+ b _020D439C
+_020D4398:
+ mov r4, #0x2
+_020D439C:
+ ldr r1, _020D43FC
+ mov lr, #0x1
+ ldrh ip, [r1, #0x34]
+ ldr r3, [r1]
+ mvn r2, lr, lsl r0
+ orr ip, ip, lr, lsl r0
+ strh ip, [r1, #0x34]
+ ldrh ip, [r1, #0x36]
+ cmp r3, #0x0
+ addeq sp, sp, #0x8
+ and r2, ip, r2
+ strh r2, [r1, #0x36]
+ ldmeqia sp!, {r4, lr}
+ bxeq lr
+ and r1, r4, #0xff
+ mov r2, #0x0
+ blx r3
+ add sp, sp, #0x8
+ ldmia sp!, {r4, lr}
+ bx lr
+_020D43EC:
+ bl OS_Terminate
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D43FC: .word 0x021D5474
+_020D4400: .word 0x027FFFAA
+_020D4404: .word 0x027FFFAC
+
+ arm_func_start MicWaitBusy
+MicWaitBusy: ; 0x020D4408
+ ldr ip, _020D441C ; =0x021D54B0
+_020D440C:
+ ldr r0, [r12, #0x0]
+ cmp r0, #0x1
+ beq _020D440C
+ bx lr
+ .balign 4
+_020D441C: .word 0x021D54B0
+
+ arm_func_start MicGetResultCallback
+MicGetResultCallback: ; 0x020D4420
+ ldr r1, _020D442C ; =0x021D54B0
+ str r0, [r1, #0xc]
+ bx lr
+ .balign 4
+_020D442C: .word 0x021D54B0
+
+ arm_func_start MicStopAutoSampling
+MicStopAutoSampling:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4460 ; =0x03004200
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D4448:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ add sp, sp, #4
+ ldmfd sp!, {lr}
+ bx lr
+_020D4460: .word 0x03004200
+
+ arm_func_start MicStartAutoSampling
+MicStartAutoSampling: ; 0x020D4464
+ stmdb sp!, {r4-r6,lr}
+ ldr ip, _020D4584 ; =0x02004100
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ orr r1, r3, r12
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+_020D4488:
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r6, lsr #0x10
+ orr r1, r0, #0x10000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r1, _020D4588
+ mov r0, #0x9
+ and r1, r6, r1
+ orr r1, r1, #0x20000
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r5, lsr #0x10
+ orr r1, r0, #0x30000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r1, _020D4588
+ mov r0, #0x9
+ and r1, r5, r1
+ orr r1, r1, #0x40000
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ mov r0, r4, lsr #0x10
+ orr r1, r0, #0x50000
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r6, lr}
+ bxlt lr
+ ldr r0, _020D4588
+ ldr r1, _020D458C
+ and r0, r4, r0
+ orr r1, r0, r1
+ mov r0, #0x9
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ ldmia sp!, {r4-r6, lr}
+ bx lr
+_020D4584: .word 0x02004100
+_020D4588: .word 0x0000FFFF
+_020D458C: .word 0x01060000
+
+ arm_func_start MicDoSampling
+MicDoSampling: ; 0x020D4590
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D45C4 ; =0x03004000
+ mov r2, #0x0
+ orr r1, r0, r1
+ mov r0, #0x9
+ bl PXI_SendWordByFifo
+_020D45AC:
+ cmp r0, #0x0
+ movge r0, #0x1
+ movlt r0, #0x0
+ add sp, sp, #0x4
+ ldmfd sp!, {lr}
+ bx lr
+_020D45C4: .word 0x03004000
+
+ arm_func_start MicCommonCallback
+MicCommonCallback: ; 0x020D45C8
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ cmp r2, #0x0
+ beq _020D4610
+ ldr r0, _020D4700 ; =0x021D54B0
+ ldr r2, _020D4700 ; =0x021D54B0
+ ldr r1, [r0, #0x0]
+ ldr r12, [r2, #0x4]
+ cmp r1, #0x0
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ cmp r12, #0x0
+ beq _020D4610
+ ldr r1, [r2, #0x8]
+ mov r3, #0x0
+ mov r0, #0x6
+ str r3, [r2, #0x4]
+ blx r12
+_020D4610:
+ and r0, r4, #0xff
+ mov r1, r0, lsl #0x10
+ and r2, r4, #0x7f00
+ mov r0, r2, lsl #0x8
+ mov r1, r1, lsr #0x10
+ cmp r1, #0x4
+ mov r2, r0, lsr #0x10
+ addls pc, pc, r1, lsl #0x2
+ b _020D4670
+_020D4634:
+ b _020D4648
+ b _020D4650
+ b _020D4658
+ b _020D4660
+ b _020D4668
+_020D4648:
+ mov r0, #0x0
+ b _020D4674
+_020D4650:
+ mov r0, #0x4
+ b _020D4674
+_020D4658:
+ mov r0, #0x2
+ b _020D4674
+_020D4660:
+ mov r0, #0x5
+ b _020D4674
+_020D4668:
+ mov r0, #0x1
+ b _020D4674
+_020D4670:
+ mov r0, #0x6
+_020D4674:
+ cmp r2, #0x51
+ bne _020D46A0
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x10]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r1, #0x14]
+ blx r2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D46A0:
+ cmp r2, #0x40
+ bne _020D46C0
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x18]
+ cmp r2, #0x0
+ ldrne r1, _020D4704 ; =0x027FFF94
+ ldrneh r1, [r1, #0x0]
+ strneh r1, [r2, #0x0]
+_020D46C0:
+ ldr r1, _020D4700 ; =0x021D54B0
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ movne r2, #0x0
+ strne r2, [r1, #0x0]
+ ldr r2, _020D4700 ; =0x021D54B0
+ ldr r4, [r2, #0x4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r2, #0x8]
+ mov r3, #0x0
+ str r3, [r2, #0x4]
+ blx r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D4700: .word 0x021D54B0
+_020D4704: .word 0x027FFF94
+
+ arm_func_start MIC_GetLastSamplingAddress
+MIC_GetLastSamplingAddress: ; 0x020D4708
+ ldr r0, _020D4714 ; =0x027FFF90
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D4714: .word 0x027FFF90
+
+ arm_func_start MIC_StopAutoSampling
+MIC_StopAutoSampling: ; 0x020D4718
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D4754 ; =MicGetResultCallback
+ mov r1, #0x0
+ bl MIC_StopAutoSamplingAsync
+ ldr r1, _020D4758 ; =0x021D54B0
+ cmp r0, #0x0
+ str r0, [r1, #0xc]
+ bne _020D4740
+ bl MicWaitBusy
+_020D4740:
+ ldr r0, _020D4758 ; =0x021D54B0
+ ldr r0, [r0, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D4754: .word MicGetResultCallback
+_020D4758: .word 0x021D54B0
+
+ arm_func_start MIC_StopAutoSamplingAsync
+MIC_StopAutoSamplingAsync: ; 0x020D475C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl OS_DisableInterrupts
+ ldr r1, _020D47C8 ; =0x021D54B0
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020D4794
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D4794:
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D47C8 ; =0x021D54B0
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x8]
+ bl MicStopAutoSampling
+_020D47B0:
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020D47C8: .word 0x021D54B0
+
+ arm_func_start MIC_StartAutoSampling
+MIC_StartAutoSampling: ; 0x020D47CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4808 ; =MicGetResultCallback
+ mov r2, #0x0
+ bl MIC_StartAutoSamplingAsync
+ ldr r1, _020D480C ; =0x021D54B0
+ cmp r0, #0x0
+ str r0, [r1, #0xc]
+ bne _020D47F4
+ bl MicWaitBusy
+_020D47F4:
+ ldr r0, _020D480C ; =0x021D54B0
+ ldr r0, [r0, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D4808: .word MicGetResultCallback
+_020D480C: .word 0x021D54B0
+
+ arm_func_start MIC_StartAutoSamplingAsync
+MIC_StartAutoSamplingAsync: ; 0x020D4810
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r0, [r7, #0x4]
+ mov r6, r1
+ ands r0, r0, #0x1f
+ mov r5, r2
+ addne sp, sp, #0x4
+ movne r0, #0x2
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, [r7, #0x8]
+ ands r0, r1, #0x1f
+ addne sp, sp, #0x4
+ movne r0, #0x2
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r7, #0xc]
+ cmp r0, #0x400
+ addcc sp, sp, #0x4
+ movcc r0, #0x2
+ ldmccia sp!, {r4-r7,lr}
+ bxcc lr
+ ldr r0, [r7, #0x0]
+ cmp r0, #0x5
+ addls pc, pc, r0, lsl #0x2
+ b _020D48D8
+_020D4890:
+ b _020D48A8
+ b _020D48B0
+ b _020D48B8
+ b _020D48C0
+ b _020D48C8
+ b _020D48D0
+_020D48A8:
+ mov r1, #0x0
+ b _020D48E8
+_020D48B0:
+ mov r1, #0x1
+ b _020D48E8
+_020D48B8:
+ mov r1, #0x2
+ b _020D48E8
+_020D48C0:
+ mov r1, #0x3
+ b _020D48E8
+_020D48C8:
+ mov r1, #0x5
+ b _020D48E8
+_020D48D0:
+ mov r1, #0x7
+ b _020D48E8
+_020D48D8:
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D48E8:
+ ldr r0, [r7, #0x10]
+ cmp r0, #0x0
+ orrne r0, r1, #0x10
+ andne r0, r0, #0xff
+ andeq r0, r1, #0xff
+ and r4, r0, #0xff
+ bl OS_DisableInterrupts
+ ldr r1, _020D497C
+ ldr r2, [r1]
+ cmp r2, #0x0
+ beq _020D4928
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4928:
+ mov r2, #0x1
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+ ldr r0, _020D497C
+ mov r3, r4
+ str r6, [r0, #0x4]
+ str r5, [r0, #0x8]
+ ldr r1, [r7, #0x14]
+ str r1, [r0, #0x10]
+ ldr r1, [r7, #0x18]
+ str r1, [r0, #0x14]
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0x8]
+ ldr r2, [r7, #0xC]
+ bl MicStartAutoSampling
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D497C: .word 0x021D54B0
+
+ arm_func_start MIC_DoSamplingAsync
+MIC_DoSamplingAsync: ; 0x020D4980
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x6
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ addge sp, sp, #0x4
+ movge r0, #0x2
+ ldmgeia sp!, {r4-r7,lr}
+ bxge lr
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020D49E4
+_020D49B4:
+ b _020D49C4
+ b _020D49CC
+ b _020D49D4
+ b _020D49DC
+_020D49C4:
+ mov r4, #0x0
+ b _020D49F4
+_020D49CC:
+ mov r4, #0x1
+ b _020D49F4
+_020D49D4:
+ mov r4, #0x2
+ b _020D49F4
+_020D49DC:
+ mov r4, #0x3
+ b _020D49F4
+_020D49E4:
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D49F4:
+ bl OS_DisableInterrupts
+ ldr r1, _020D4A58
+ ldr r2, [r1]
+ cmp r2, #0x0
+ beq _020D4A1C
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4A1C:
+ mov r2, #0x1
+ str r2, [r1]
+ bl OS_RestoreInterrupts
+ ldr r1, _020D4A58
+ mov r0, r4
+ str r6, [r1, #0x4]
+ str r5, [r1, #0x8]
+ str r7, [r1, #0x18]
+ bl MicDoSampling
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020D4A58: .word 0x021D54B0
+
+ arm_func_start MIC_Init
+MIC_Init: ; 0x020D4A5C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020D4AD8 ; =0x021D54AC
+ ldrh r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, _020D4ADC ; =0x021D54B0
+ mov r2, #0x0
+ mov r3, #0x1
+ strh r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ bl PXI_Init
+ mov r5, #0x9
+ mov r4, #0x1
+_020D4AA0:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_020D4AAC:
+ cmp r0, #0x0
+ beq _020D4AA0
+ ldr r2, _020D4AE0
+ mov r3, #0x0
+ ldr r1, _020D4AE4
+ mov r0, #0x9
+ str r3, [r2]
+ bl PXI_SetFifoRecvCallback
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5, lr}
+ bx lr
+_020D4AD8: .word 0x021D54AC
+_020D4ADC: .word 0x021D54B0
+_020D4AE0: .word 0x027FFF90
+_020D4AE4: .word MicCommonCallback
diff --git a/arm9/asm/STD_arm9.s b/arm9/asm/STD_arm9.s
new file mode 100644
index 00000000..b38ac8e4
--- /dev/null
+++ b/arm9/asm/STD_arm9.s
@@ -0,0 +1,17117 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start STD_CompareNString
+STD_CompareNString: ; 0x020DE03C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ beq _020DE080
+ cmp r2, #0x0
+ mov lr, #0x0
+ ble _020DE080
+_020DE058:
+ ldrb r12, [r0, lr]
+ ldrb r3, [r1, lr]
+ cmp r12, r3
+ addne sp, sp, #0x4
+ subne r0, r12, r3
+ ldmneia sp!, {lr}
+ bxne lr
+ add lr, lr, #0x1
+ cmp lr, r2
+ blt _020DE058
+_020DE080:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start STD_CompareString
+STD_CompareString: ; 0x020DE090
+ b _020DE09C
+_020DE094:
+ add r0, r0, #0x1
+ add r1, r1, #0x1
+_020DE09C:
+ ldrsb r2, [r1, #0x0]
+ ldrsb r3, [r0, #0x0]
+ cmp r3, r2
+ bne _020DE0B4
+ cmp r3, #0x0
+ bne _020DE094
+_020DE0B4:
+ sub r0, r3, r2
+ bx lr
+
+ arm_func_start STD_GetStringLength
+STD_GetStringLength: ; 0x020DE0BC
+ ldrsb r1, [r0, #0x0]
+ mov r2, #0x0
+ cmp r1, #0x0
+ beq _020DE0DC
+_020DE0CC:
+ add r2, r2, #0x1
+ ldrsb r1, [r0, r2]
+ cmp r1, #0x0
+ bne _020DE0CC
+_020DE0DC:
+ mov r0, r2
+ bx lr
+
+ arm_func_start STD_CopyLString
+STD_CopyLString: ; 0x020DE0E4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ sub r12, r2, #0x1
+ cmp r12, #0x0
+ mov lr, #0x0
+ ble _020DE120
+_020DE0FC:
+ ldrsb r3, [r1, #0x0]
+ strb r3, [r0, lr]
+ ldrsb r3, [r1, #0x0]
+ cmp r3, #0x0
+ beq _020DE120
+ add lr, lr, #0x1
+ cmp lr, r12
+ add r1, r1, #0x1
+ blt _020DE0FC
+_020DE120:
+ sub r3, r2, #0x1
+ cmp lr, r3
+ blt _020DE138
+ cmp r2, #0x0
+ movne r2, #0x0
+ strneb r2, [r0, lr]
+_020DE138:
+ mov r0, r1
+ bl STD_GetStringLength
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start abort
+abort: ; 0x020DE14C
+ stmdb sp!, {r3,lr}
+ mov r0, #0x1
+ bl raise
+ ldr r1, _020DE16C ; =0x021D6F78
+ mov r0, #0x1
+ str r0, [r1, #0xc]
+ bl exit
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DE16C: .word 0x021D6F78
+
+ arm_func_start exit
+exit: ; 0x020DE170
+ stmdb sp!, {r4,lr}
+ ldr r1, _020DE1B8 ; =0x021D6F78
+ mov r4, r0
+ ldr r0, [r1, #0xc]
+ cmp r0, #0x0
+ bne _020DE1AC
+ bl __destroy_global_chain
+ ldr r0, _020DE1B8 ; =0x021D6F78
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ beq _020DE1AC
+ blx r0
+ ldr r0, _020DE1B8 ; =0x021D6F78
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+_020DE1AC:
+ mov r0, r4
+ bl __exit
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020DE1B8: .word 0x021D6F78
+
+ arm_func_start __exit
+__exit: ; 0x020DE1BC
+ stmdb sp!, {r3-r5,lr}
+ ldr r0, _020DE2CC ; =0x021D70D0
+ bl OS_TryLockMutex
+_020DE1C8: ; 0x020DE1C8
+ cmp r0, #0x0
+ bne _020DE1F4
+ ldr r0, _020DE2D0 ; =0x021D3498
+ ldr r1, _020DE2D4 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020DE2D8 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ b _020DE24C
+_020DE1F4:
+ ldr r0, _020DE2D0 ; =0x021D3498
+ ldr r1, _020DE2D4 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0x0]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DE224
+ ldr r0, _020DE2D8 ; =0x021D70AC
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ b _020DE24C
+_020DE224:
+ ldr r0, _020DE2CC ; =0x021D70D0
+ bl OS_LockMutex
+ ldr r0, _020DE2D0 ; =0x021D3498
+ ldr r1, _020DE2D4 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020DE2D8 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+_020DE24C:
+ ldr r4, _020DE2DC ; =0x021D6F78
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ble _020DE280
+ ldr r5, _020DE2E0 ; =0x021D6F88
+_020DE260:
+ ldr r0, [r4, #0x8]
+ sub r1, r0, #0x1
+ ldr r0, [r5, r1, lsl #0x2]
+ str r1, [r4, #0x8]
+ blx r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ bgt _020DE260
+_020DE280:
+ ldr r0, _020DE2D8 ; =0x021D70AC
+ ldr r1, [r0, #0x0]
+ subs r1, r1, #0x1
+ str r1, [r0, #0x0]
+ bne _020DE29C
+ ldr r0, _020DE2CC ; =0x021D70D0
+ bl OS_UnlockMutex
+_020DE29C:
+ ldr r0, _020DE2DC ; =0x021D6F78
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020DE2BC
+ blx r0
+ ldr r0, _020DE2DC ; =0x021D6F78
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020DE2BC:
+ mov r0, #0x0
+ bl fflush
+ bl _ExitProcess
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020DE2CC: .word 0x021D70D0
+_020DE2D0: .word 0x021D3498
+_020DE2D4: .word 0x021D7088
+_020DE2D8: .word 0x021D70AC
+_020DE2DC: .word 0x021D6F78
+_020DE2E0: .word 0x021D6F88
+
+ arm_func_start nan
+nan: ; 0x020DE2E4
+ ldr r0, _020DE2F4 ; =0x02106B78
+ ldr ip, _020DE2F8 ; =_f2d
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020DE2F4: .word 0x02106B78
+_020DE2F8: .word _f2d
+
+ arm_func_start __flush_line_buffered_output_files
+__flush_line_buffered_output_files:
+ stmdb sp!, {r3-r9,lr}
+ ldr r0, _020DE384 ; =0x02106A58
+ mov r4, #0x0
+ mov r5, #0x1
+ mov r8, r0
+ mvn r9, #0x0
+ mov r7, r4
+ mov r6, #0x4c
+_020DE31C:
+ ldr r1, [r0, #0x4]
+ mov r2, r1, lsl #0x16
+ movs r2, r2, lsr #0x1d
+ beq _020DE35C
+ mov r1, r1, lsl #0x19
+ mov r1, r1, lsr #0x1e
+ tst r1, #0x1
+ beq _020DE35C
+ ldr r1, [r0, #0x8]
+ mov r1, r1, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x1
+ bne _020DE35C
+ bl fflush
+_020DE354: ; 0x020DE354
+ cmp r0, #0x0
+ movne r4, r9
+_020DE35C:
+ cmp r5, #0x3
+ movge r0, r7
+ bge _020DE374
+ mul r0, r5, r6
+ add r5, r5, #0x1
+ add r0, r8, r0
+_020DE374:
+ cmp r0, #0x0
+ bne _020DE31C
+ mov r0, r4
+ ldmia sp!, {r3-r9,pc}
+ .balign 4
+_020DE384: .word 0x02106A58
+
+ arm_func_start __flush_all
+__flush_all: ; 0x020DE388
+ stmdb sp!, {r3-r9,lr}
+ ldr r0, _020DE3EC ; =0x02106A58
+ mov r4, #0x0
+ mov r5, #0x1
+ mov r8, r0
+ mvn r9, #0x0
+ mov r7, r4
+ mov r6, #0x4c
+_020DE3A8:
+ ldr r1, [r0, #0x4]
+ mov r1, r1, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ beq _020DE3C4
+ bl fflush
+_020DE3BC: ; 0x020DE3BC
+ cmp r0, #0x0
+ movne r4, r9
+_020DE3C4:
+ cmp r5, #0x3
+ movge r0, r7
+ bge _020DE3DC
+ mul r0, r5, r6
+ add r5, r5, #0x1
+ add r0, r8, r0
+_020DE3DC:
+ cmp r0, #0x0
+ bne _020DE3A8
+ mov r0, r4
+ ldmia sp!, {r3-r9,pc}
+ .balign 4
+_020DE3EC: .word 0x02106A58
+
+ arm_func_start abs
+abs: ; 0x020DE3F0
+ cmp r0, #0x0
+ rsblt r0, r0, #0x0
+ bx lr
+
+ arm_func_start __msl_assertion_failed
+__msl_assertion_failed: ; 0x020DE3FC
+ stmdb sp!, {r3-r4,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ ldr r0, _020DE434 ; =0x02106B3C
+ mov r1, r4
+ mov r2, lr
+ mov r3, r12
+ bl printf
+ bl abort
+ add sp, sp, #0x4
+ ldmia sp!, {r3-r4,pc}
+ .balign 4
+_020DE434: .word 0x02106B3C
+
+ arm_func_start __convert_from_newlines
+__convert_from_newlines:
+ bx lr
+
+ arm_func_start __convert_to_newlines
+__convert_to_newlines:
+ bx lr
+
+ arm_func_start __prep_buffer
+__prep_buffer:
+ ldr r1, [r0, #0x1c]
+ str r1, [r0, #0x24]
+ ldr r3, [r0, #0x20]
+ str r3, [r0, #0x28]
+ ldr r2, [r0, #0x18]
+ ldr r1, [r0, #0x2c]
+ and r1, r2, r1
+ sub r1, r3, r1
+ str r1, [r0, #0x28]
+ ldr r1, [r0, #0x18]
+ str r1, [r0, #0x34]
+ bx lr
+
+ arm_func_start __load_buffer
+__load_buffer:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r2
+ mov r4, r0
+ mov r6, r1
+ bl __prep_buffer
+ cmp r5, #0x1
+ ldreq r0, [r4, #0x20]
+ add r2, r4, #0x28
+ streq r0, [r4, #0x28]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r4, #0x1c]
+ ldr r3, [r4, #0x48]
+ ldr r12, [r4, #0x3c]
+ blx r12
+ cmp r0, #0x2
+ moveq r1, #0x0
+ streq r1, [r4, #0x28]
+ cmp r6, #0x0
+ ldrne r1, [r4, #0x28]
+ strne r1, [r6, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+_020DE4C8: ; 0x020DE4C8
+ ldr r1, [r4, #0x18]
+ ldr r0, [r4, #0x28]
+ add r0, r1, r0
+ str r0, [r4, #0x18]
+ ldr r0, [r4, #0x4]
+ mov r0, r0, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ bne _020DE4F4
+ ldr r0, [r4, #0x1c]
+ add r1, r4, #0x28
+ bl __convert_to_newlines
+_020DE4F4:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start __flush_buffer
+__flush_buffer:
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ ldr r2, [r5, #0x24]
+ ldr r0, [r5, #0x1c]
+ mov r4, r1
+ subs r0, r2, r0
+ beq _020DE574
+ str r0, [r5, #0x28]
+ ldr r0, [r5, #0x4]
+ mov r0, r0, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ bne _020DE538
+ ldr r0, [r5, #0x1c]
+ add r1, r5, #0x28
+ bl __convert_from_newlines
+_020DE538:
+ ldr r0, [r5, #0x0]
+ ldr r1, [r5, #0x1c]
+ ldr r3, [r5, #0x48]
+ ldr r12, [r5, #0x40]
+ add r2, r5, #0x28
+ blx r12
+ cmp r4, #0x0
+ ldrne r1, [r5, #0x28]
+ strne r1, [r4, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r3-r5,pc}
+_020DE564: ; 0x020DE564
+ ldr r1, [r5, #0x18]
+ ldr r0, [r5, #0x28]
+ add r0, r1, r0
+ str r0, [r5, #0x18]
+_020DE574:
+ mov r0, r5
+ bl __prep_buffer
+_020DE57C: ; 0x020DE57C
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start fread
+fread: ; 0x020DE584
+ stmdb sp!, {r4-r10,lr}
+ ldr r4, _020DE67C ; =0x02106A58
+ mov r7, r3
+ cmp r7, r4
+ moveq r6, #0x2
+ mov r10, r0
+ movne r6, #0x5
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DE680 ; =0x021D70D0
+ mov r9, r1
+ add r0, r5, r4
+ mov r8, r2
+ bl OS_TryLockMutex
+_020DE5BC: ; 0x020DE5BC
+ cmp r0, #0x0
+ bne _020DE5E8
+ ldr r0, _020DE684 ; =0x021D3498
+ ldr r2, _020DE688 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DE68C ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+ b _020DE640
+_020DE5E8:
+ ldr r0, _020DE684 ; =0x021D3498
+ ldr r1, _020DE688 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DE618
+ ldr r1, _020DE68C ; =0x021D70AC
+ ldr r0, [r1, r6, lsl #0x2]
+ add r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ b _020DE640
+_020DE618:
+ add r0, r5, r4
+ bl OS_LockMutex
+ ldr r0, _020DE684 ; =0x021D3498
+ ldr r2, _020DE688 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DE68C ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+_020DE640:
+ mov r0, r10
+ mov r1, r9
+ mov r2, r8
+ mov r3, r7
+ bl __fread
+ ldr r1, _020DE68C ; =0x021D70AC
+ mov r7, r0
+ ldr r0, [r1, r6, lsl #0x2]
+ subs r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ bne _020DE674
+ add r0, r5, r4
+ bl OS_UnlockMutex
+_020DE674:
+ mov r0, r7
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020DE67C: .word 0x02106A58
+_020DE680: .word 0x021D70D0
+_020DE684: .word 0x021D3498
+_020DE688: .word 0x021D7088
+_020DE68C: .word 0x021D70AC
+
+ arm_func_start __fread
+__fread: ; 0x020DE690
+ stmdb sp!, {r3-r10,lr}
+ sub sp, sp, #0x4
+ mov r7, r3
+ mov r9, r0
+ mov r8, r1
+ mov r0, r7
+ mov r1, #0x0
+ mov r4, r2
+ bl fwide
+_020DE6B4: ; 0x020DE6B4
+ cmp r0, #0x0
+ bne _020DE6C8
+ mov r0, r7
+ mvn r1, #0x0
+ bl fwide
+_020DE6C8:
+ muls r4, r8, r4
+ beq _020DE6EC
+ ldrb r0, [r7, #0xd]
+ cmp r0, #0x0
+ bne _020DE6EC
+ ldr r1, [r7, #0x4]
+ mov r0, r1, lsl #0x16
+ movs r0, r0, lsr #0x1d
+ bne _020DE6F8
+_020DE6EC:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r3-r10,pc}
+_020DE6F8:
+ mov r0, r1, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ movne r0, r1, lsl #0x19
+ movne r0, r0, lsr #0x1e
+ ldr r1, [r7, #0x8]
+ cmpne r0, #0x2
+ mov r6, #0x1
+ mov r0, r1, lsl #0x1d
+ movne r6, #0x0
+ movs r0, r0, lsr #0x1d
+ bne _020DE74C
+ ldr r0, [r7, #0x4]
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ tst r0, #0x1
+ beq _020DE74C
+ bic r0, r1, #0x7
+ orr r0, r0, #0x2
+ str r0, [r7, #0x8]
+ mov r0, #0x0
+ str r0, [r7, #0x28]
+_020DE74C:
+ ldr r0, [r7, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x2
+ bhs _020DE778
+ mov r0, #0x1
+ strb r0, [r7, #0xd]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ str r0, [r7, #0x28]
+ ldmia sp!, {r3-r10,pc}
+_020DE778:
+ ldr r0, [r7, #0x4]
+ mov r0, r0, lsl #0x19
+ mov r0, r0, lsr #0x1e
+ tst r0, #0x1
+ beq _020DE7B0
+ bl __flush_line_buffered_output_files
+_020DE790: ; 0x020DE790
+ cmp r0, #0x0
+ beq _020DE7B0
+ mov r0, #0x1
+ strb r0, [r7, #0xd]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ str r0, [r7, #0x28]
+ ldmia sp!, {r3-r10,pc}
+_020DE7B0:
+ cmp r4, #0x0
+ mov r5, #0x0
+ beq _020DE874
+ ldr r0, [r7, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x3
+ blo _020DE874
+ mov r10, r5
+_020DE7D4:
+ mov r0, r7
+ mov r1, r10
+ bl fwide
+ cmp r0, #0x1
+ ldr r0, [r7, #0x8]
+ bne _020DE808
+ mov r0, r0, lsl #0x1d
+ add r0, r7, r0, lsr #0x1c
+ ldrh r0, [r0, #0xe]
+ add r5, r5, #0x2
+ sub r4, r4, #0x2
+ strh r0, [r9], #0x2
+ b _020DE820
+_020DE808:
+ mov r0, r0, lsl #0x1d
+ add r0, r7, r0, lsr #0x1d
+ ldrb r0, [r0, #0xf]
+ add r5, r5, #0x1
+ sub r4, r4, #0x1
+ strb r0, [r9], #0x1
+_020DE820:
+ ldr r1, [r7, #0x8]
+ cmp r4, #0x0
+ mov r0, r1, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ sub r0, r0, #0x1
+ bic r1, r1, #0x7
+ and r0, r0, #0x7
+ orr r0, r1, r0
+ str r0, [r7, #0x8]
+ beq _020DE85C
+ ldr r0, [r7, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x3
+ bhs _020DE7D4
+_020DE85C:
+ ldr r0, [r7, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x2
+ ldreq r0, [r7, #0x30]
+ streq r0, [r7, #0x28]
+_020DE874:
+ cmp r4, #0x0
+ beq _020DE938
+ ldr r0, [r7, #0x28]
+ cmp r0, #0x0
+ cmpeq r6, #0x0
+ beq _020DE938
+ mov r10, #0x0
+_020DE890:
+ ldr r0, [r7, #0x28]
+ cmp r0, #0x0
+ bne _020DE8E4
+ mov r0, r7
+ mov r1, r10
+ mov r2, r10
+ bl __load_buffer
+_020DE8AC: ; 0x020DE8AC
+ cmp r0, #0x0
+ beq _020DE8E4
+ cmp r0, #0x1
+ mov r0, #0x1
+ streqb r0, [r7, #0xd]
+ beq _020DE8D4
+ ldr r1, [r7, #0x8]
+ bic r1, r1, #0x7
+ str r1, [r7, #0x8]
+ strb r0, [r7, #0xc]
+_020DE8D4:
+ mov r0, #0x0
+ str r0, [r7, #0x28]
+ mov r4, #0x0
+ b _020DE938
+_020DE8E4:
+ ldr r0, [r7, #0x28]
+ str r0, [sp, #0x0]
+ cmp r0, r4
+ strhi r4, [sp, #0x0]
+ ldr r1, [r7, #0x24]
+ ldr r2, [sp, #0x0]
+ mov r0, r9
+ bl memcpy
+ ldr r2, [sp, #0x0]
+ ldr r0, [r7, #0x24]
+ subs r4, r4, r2
+ add r0, r0, r2
+ str r0, [r7, #0x24]
+ ldr r1, [r7, #0x28]
+ ldr r0, [sp, #0x0]
+ add r9, r9, r2
+ sub r0, r1, r0
+ add r5, r5, r2
+ str r0, [r7, #0x28]
+ cmpne r6, #0x0
+ bne _020DE890
+_020DE938:
+ cmp r4, #0x0
+ beq _020DE9C4
+ cmp r6, #0x0
+ bne _020DE9C4
+ ldr r6, [r7, #0x1c]
+ ldr r10, [r7, #0x20]
+ add r1, sp, #0x0
+ str r9, [r7, #0x1c]
+ mov r0, r7
+ mov r2, #0x1
+ str r4, [r7, #0x20]
+ bl __load_buffer
+_020DE968: ; 0x020DE968
+ cmp r0, #0x0
+ beq _020DE9A4
+ cmp r0, #0x1
+ mov r0, #0x1
+ bne _020DE98C
+ strb r0, [r7, #0xd]
+ mov r0, #0x0
+ str r0, [r7, #0x28]
+ b _020DE9A4
+_020DE98C:
+ ldr r1, [r7, #0x8]
+ bic r1, r1, #0x7
+ str r1, [r7, #0x8]
+ strb r0, [r7, #0xc]
+ mov r0, #0x0
+ str r0, [r7, #0x28]
+_020DE9A4:
+ ldr r1, [sp, #0x0]
+ mov r0, r7
+ str r6, [r7, #0x1c]
+ str r10, [r7, #0x20]
+ add r5, r5, r1
+ bl __prep_buffer
+_020DE9BC: ; 0x020DE9BC
+ mov r0, #0x0
+ str r0, [r7, #0x28]
+_020DE9C4:
+ mov r0, r5
+ mov r1, r8
+ bl _u32_div_f
+ add sp, sp, #0x4
+ ldmia sp!, {r3-r10,pc}
+
+ arm_func_start __fwrite
+__fwrite:
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x8
+ mov r9, r3
+ mov r10, r0
+ str r1, [sp, #0x0]
+ mov r0, r9
+ mov r1, #0x0
+ mov r4, r2
+ bl fwide
+_020DE9FC: ; 0x020DE9FC
+ cmp r0, #0x0
+ bne _020DEA10
+ mov r0, r9
+ mvn r1, #0x0
+ bl fwide
+_020DEA10:
+ ldr r0, [sp, #0x0]
+ muls r5, r0, r4
+ beq _020DEA38
+ ldrb r0, [r9, #0xd]
+ cmp r0, #0x0
+ bne _020DEA38
+ ldr r1, [r9, #0x4]
+ mov r0, r1, lsl #0x16
+ movs r0, r0, lsr #0x1d
+ bne _020DEA44
+_020DEA38:
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r3-r11,pc}
+_020DEA44:
+ mov r0, r1, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ movne r0, r1, lsl #0x19
+ movne r0, r0, lsr #0x1e
+ cmpne r0, #0x2
+ ldr r1, [r9, #0x8]
+ cmpne r0, #0x1
+ mov r8, #0x1
+ mov r0, r1, lsl #0x1d
+ movne r8, #0x0
+ movs r0, r0, lsr #0x1d
+ bne _020DEA9C
+ ldr r0, [r9, #0x4]
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ tst r0, #0x2
+ beq _020DEA9C
+ bic r0, r1, #0x7
+ orr r1, r0, #0x1
+ mov r0, r9
+ str r1, [r9, #0x8]
+ bl __prep_buffer
+_020DEA9C:
+ ldr r0, [r9, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x1
+ beq _020DEAC8
+ mov r0, #0x1
+ strb r0, [r9, #0xd]
+ mov r0, #0x0
+ add sp, sp, #0x8
+ str r0, [r9, #0x28]
+ ldmia sp!, {r3-r11,pc}
+_020DEAC8:
+ cmp r5, #0x0
+ mov r6, #0x0
+ beq _020DEBF0
+ ldr r0, [r9, #0x1c]
+ ldr r2, [r9, #0x24]
+ cmp r2, r0
+ cmpeq r8, #0x0
+ beq _020DEBF0
+ ldr r1, [r9, #0x20]
+ sub r0, r2, r0
+ sub r0, r1, r0
+ str r0, [r9, #0x28]
+ mov r11, #0xa
+ mov r4, #0x0
+_020DEB00:
+ ldr r0, [r9, #0x28]
+ mov r7, r4
+ str r0, [sp, #0x4]
+ cmp r0, r5
+ strhi r5, [sp, #0x4]
+ ldr r0, [r9, #0x4]
+ mov r0, r0, lsl #0x19
+ mov r0, r0, lsr #0x1e
+ cmp r0, #0x1
+ bne _020DEB50
+ ldr r2, [sp, #0x4]
+ cmp r2, #0x0
+ beq _020DEB50
+ mov r0, r10
+ mov r1, r11
+ bl __memrchr
+ movs r7, r0
+ addne r0, r7, #0x1
+ subne r0, r0, r10
+ strne r0, [sp, #0x4]
+_020DEB50:
+ ldr r2, [sp, #0x4]
+ cmp r2, #0x0
+ beq _020DEB90
+ ldr r0, [r9, #0x24]
+ mov r1, r10
+ bl memcpy
+ ldr r2, [sp, #0x4]
+ ldr r0, [r9, #0x24]
+ add r10, r10, r2
+ add r0, r0, r2
+ str r0, [r9, #0x24]
+ ldr r1, [r9, #0x28]
+ ldr r0, [sp, #0x4]
+ sub r5, r5, r2
+ sub r0, r1, r0
+ str r0, [r9, #0x28]
+_020DEB90:
+ ldr r0, [r9, #0x28]
+ cmp r0, #0x0
+ beq _020DEBB4
+ cmp r7, #0x0
+ bne _020DEBB4
+ ldr r0, [r9, #0x4]
+ mov r0, r0, lsl #0x19
+ movs r0, r0, lsr #0x1e
+ bne _020DEBDC
+_020DEBB4:
+ mov r0, r9
+ mov r1, #0x0
+ bl __flush_buffer
+_020DEBC0: ; 0x020DEBC0
+ cmp r0, #0x0
+ beq _020DEBDC
+ mov r0, #0x1
+ strb r0, [r9, #0xd]
+ mov r5, #0x0
+ str r5, [r9, #0x28]
+ b _020DEBF0
+_020DEBDC:
+ ldr r0, [sp, #0x4]
+ cmp r5, #0x0
+ add r6, r6, r0
+ cmpne r8, #0x0
+ bne _020DEB00
+_020DEBF0:
+ cmp r5, #0x0
+ beq _020DEC5C
+ cmp r8, #0x0
+ bne _020DEC5C
+ ldr r4, [r9, #0x1c]
+ ldr r7, [r9, #0x20]
+ add r2, r10, r5
+ str r10, [r9, #0x1c]
+ str r5, [r9, #0x20]
+ add r1, sp, #0x4
+ mov r0, r9
+ str r2, [r9, #0x24]
+ bl __flush_buffer
+_020DEC24: ; 0x020DEC24
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x4]
+ addeq r6, r6, r0
+ beq _020DEC44
+ mov r0, #0x1
+ strb r0, [r9, #0xd]
+ mov r0, #0x0
+ str r0, [r9, #0x28]
+_020DEC44:
+ str r4, [r9, #0x1c]
+ mov r0, r9
+ str r7, [r9, #0x20]
+ bl __prep_buffer
+_020DEC54: ; 0x020DEC54
+ mov r0, #0x0
+ str r0, [r9, #0x28]
+_020DEC5C:
+ ldr r0, [r9, #0x4]
+ ldr r1, [sp, #0x0]
+ mov r0, r0, lsl #0x19
+ mov r0, r0, lsr #0x1e
+ cmp r0, #0x2
+ movne r0, #0x0
+ strne r0, [r9, #0x28]
+ mov r0, r6
+ bl _u32_div_f
+ add sp, sp, #0x8
+ ldmia sp!, {r3-r11,pc}
+
+ arm_func_start fclose
+fclose: ; 0x020DEC88
+ stmdb sp!, {r3-r5,lr}
+ movs r5, r0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020DEC98: ; 0x020DEC98
+ ldr r1, [r5, #0x4]
+ mov r1, r1, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ moveq r0, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020DECAC: ; 0x020DECAC
+ bl fflush
+ mov r4, r0
+ ldr r0, [r5, #0x0]
+ ldr r1, [r5, #0x44]
+ blx r1
+ ldr r1, [r5, #0x4]
+ mov r2, #0x0
+ bic r1, r1, #0x380
+ str r1, [r5, #0x4]
+ str r2, [r5, #0x0]
+ ldr r1, [r5, #0x8]
+ mov r1, r1, lsl #0x1c
+ movs r1, r1, lsr #0x1f
+ subne r0, r2, #0x1
+ ldmneia sp!, {r3-r5,pc}
+_020DECE8: ; 0x020DECE8
+ cmp r4, #0x0
+ cmpeq r0, #0x0
+ movne r2, #0x1
+ rsb r0, r2, #0x0
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start fflush
+fflush:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ bne _020DED10
+ bl __flush_all
+ ldmia sp!, {r4,pc}
+_020DED10:
+ ldrb r0, [r4, #0xd]
+ cmp r0, #0x0
+ bne _020DED2C
+ ldr r0, [r4, #0x4]
+ mov r1, r0, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ bne _020DED34
+_020DED2C:
+ mvn r0, #0x0
+ ldmia sp!, {r4,pc}
+_020DED34:
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x1
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020DED48: ; 0x020DED48
+ ldr r0, [r4, #0x8]
+ mov r1, r0, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x3
+ biccs r0, r0, #0x7
+ orrcs r0, r0, #0x2
+ strcs r0, [r4, #0x8]
+ ldr r0, [r4, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x2
+ moveq r0, #0x0
+ streq r0, [r4, #0x28]
+ ldr r0, [r4, #0x8]
+ mov r1, r0, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x1
+ beq _020DEDA0
+ bic r0, r0, #0x7
+ str r0, [r4, #0x8]
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020DEDA0:
+ mov r0, r4
+ mov r1, #0x0
+ bl __flush_buffer
+_020DEDAC: ; 0x020DEDAC
+ cmp r0, #0x0
+ mov r0, #0x0
+ beq _020DEDCC
+ mov r1, #0x1
+ strb r1, [r4, #0xd]
+ str r0, [r4, #0x28]
+ sub r0, r0, #0x1
+ ldmia sp!, {r4,pc}
+_020DEDCC:
+ ldr r1, [r4, #0x8]
+ bic r1, r1, #0x7
+ str r1, [r4, #0x8]
+ str r0, [r4, #0x18]
+ str r0, [r4, #0x28]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start _ftell
+_ftell: ; 0x020DEDE4
+ ldr r1, [r0, #0x4]
+ mov r1, r1, lsl #0x16
+ mov r1, r1, lsr #0x1d
+ and r1, r1, #0xff
+ add r1, r1, #0xff
+ and r1, r1, #0xff
+ cmp r1, #0x1
+ bhi _020DEE10
+ ldrb r1, [r0, #0xd]
+ cmp r1, #0x0
+ beq _020DEE24
+_020DEE10:
+ ldr r0, _020DEE5C ; =0x021D74A8
+ mov r1, #0x28
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ bx lr
+_020DEE24:
+ ldr r1, [r0, #0x8]
+ mov r1, r1, lsl #0x1d
+ movs r12, r1, lsr #0x1d
+ ldreq r0, [r0, #0x18]
+ bxeq lr
+ ldr r2, [r0, #0x24]
+ ldr r1, [r0, #0x1c]
+ ldr r3, [r0, #0x34]
+ sub r0, r2, r1
+ cmp r12, #0x3
+ add r0, r3, r0
+ subcs r1, r12, #0x2
+ subcs r0, r0, r1
+ bx lr
+ .balign 4
+_020DEE5C: .word 0x021D74A8
+
+ arm_func_start ftell
+ftell: ; 0x020DEE60
+ stmdb sp!, {r3-r7,lr}
+ ldr r1, _020DEF60 ; =0x02106A58
+ mov r7, r0
+ cmp r7, r1
+ moveq r6, #0x2
+ beq _020DEE98
+ ldr r0, _020DEF64 ; =0x02106AA4
+ cmp r7, r0
+ moveq r6, #0x3
+ beq _020DEE98
+ ldr r0, _020DEF68 ; =0x02106AF0
+ cmp r7, r0
+ moveq r6, #0x4
+ movne r6, #0x5
+_020DEE98:
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DEF6C ; =0x021D70D0
+ add r0, r5, r4
+ bl OS_TryLockMutex
+_020DEEAC: ; 0x020DEEAC
+ cmp r0, #0x0
+ bne _020DEED8
+ ldr r0, _020DEF70 ; =0x021D3498
+ ldr r2, _020DEF74 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DEF78 ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+ b _020DEF30
+_020DEED8:
+ ldr r0, _020DEF70 ; =0x021D3498
+ ldr r1, _020DEF74 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DEF08
+ ldr r1, _020DEF78 ; =0x021D70AC
+ ldr r0, [r1, r6, lsl #0x2]
+ add r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ b _020DEF30
+_020DEF08:
+ add r0, r5, r4
+ bl OS_LockMutex
+ ldr r0, _020DEF70 ; =0x021D3498
+ ldr r2, _020DEF74 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DEF78 ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+_020DEF30:
+ mov r0, r7
+ bl _ftell
+ ldr r1, _020DEF78 ; =0x021D70AC
+ mov r7, r0
+ ldr r0, [r1, r6, lsl #0x2]
+ subs r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ bne _020DEF58
+ add r0, r5, r4
+ bl OS_UnlockMutex
+_020DEF58:
+ mov r0, r7
+ ldmia sp!, {r3-r7,pc}
+ .balign 4
+_020DEF60: .word 0x02106A58
+_020DEF64: .word 0x02106AA4
+_020DEF68: .word 0x02106AF0
+_020DEF6C: .word 0x021D70D0
+_020DEF70: .word 0x021D3498
+_020DEF74: .word 0x021D7088
+_020DEF78: .word 0x021D70AC
+
+ arm_func_start _fseek
+_fseek: ; 0x020DEF7C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ ldr r1, [r5, #0x4]
+ mov r4, r2
+ mov r1, r1, lsl #0x16
+ mov r1, r1, lsr #0x1d
+ and r1, r1, #0xff
+ cmp r1, #0x1
+ ldreqb r1, [r5, #0xd]
+ cmpeq r1, #0x0
+ beq _020DEFC8
+ ldr r0, _020DF160 ; =0x021D74A8
+ mov r1, #0x28
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DEFC8:
+ ldr r1, [r5, #0x8]
+ mov r1, r1, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x1
+ bne _020DF018
+ mov r1, #0x0
+ bl __flush_buffer
+_020DEFE4: ; 0x020DEFE4
+ cmp r0, #0x0
+ beq _020DF018
+ mov r0, #0x1
+ strb r0, [r5, #0xd]
+ mov r2, #0x0
+ ldr r0, _020DF160 ; =0x021D74A8
+ mov r1, #0x28
+ str r2, [r5, #0x28]
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DF018:
+ cmp r4, #0x1
+ bne _020DF038
+ mov r0, r5
+ mov r4, #0x0
+ bl _ftell
+ ldr r1, [sp, #0x14]
+ add r0, r1, r0
+ str r0, [sp, #0x14]
+_020DF038:
+ cmp r4, #0x2
+ beq _020DF0CC
+ ldr r0, [r5, #0x4]
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x3
+ beq _020DF0CC
+ ldr r0, [r5, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ sub r0, r0, #0x2
+ cmp r0, #0x1
+ bhi _020DF0CC
+ ldr r2, [sp, #0x14]
+ ldr r0, [r5, #0x18]
+ cmp r2, r0
+ bhs _020DF088
+ ldr r0, [r5, #0x34]
+ cmp r2, r0
+ bhs _020DF098
+_020DF088:
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ str r0, [r5, #0x8]
+ b _020DF0D8
+_020DF098:
+ ldr r1, [r5, #0x1c]
+ sub r0, r2, r0
+ add r0, r1, r0
+ str r0, [r5, #0x24]
+ ldr r1, [r5, #0x18]
+ ldr r0, [sp, #0x14]
+ sub r0, r1, r0
+ str r0, [r5, #0x28]
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ orr r0, r0, #0x2
+ str r0, [r5, #0x8]
+ b _020DF0D8
+_020DF0CC:
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ str r0, [r5, #0x8]
+_020DF0D8:
+ ldr r0, [r5, #0x8]
+ mov r0, r0, lsl #0x1d
+ movs r0, r0, lsr #0x1d
+ bne _020DF150
+ ldr r12, [r5, #0x38]
+ cmp r12, #0x0
+ beq _020DF13C
+ ldr r0, [r5, #0x0]
+ ldr r3, [r5, #0x48]
+ add r1, sp, #0x14
+ mov r2, r4
+ blx r12
+ cmp r0, #0x0
+ beq _020DF13C
+ mov r0, #0x1
+ strb r0, [r5, #0xd]
+ mov r2, #0x0
+ ldr r0, _020DF160 ; =0x021D74A8
+ mov r1, #0x28
+ str r2, [r5, #0x28]
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DF13C:
+ mov r1, #0x0
+ strb r1, [r5, #0xc]
+ ldr r0, [sp, #0x14]
+ str r0, [r5, #0x18]
+ str r1, [r5, #0x28]
+_020DF150:
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020DF160: .word 0x021D74A8
+
+ arm_func_start fseek
+fseek:
+ stmdb sp!, {r3-r9,lr}
+ ldr r3, _020DF274 ; =0x02106A58
+ mov r9, r0
+ cmp r9, r3
+ mov r8, r1
+ mov r7, r2
+ moveq r6, #0x2
+ beq _020DF1A4
+ ldr r0, _020DF278 ; =0x02106AA4
+ cmp r9, r0
+ moveq r6, #0x3
+ beq _020DF1A4
+ ldr r0, _020DF27C ; =0x02106AF0
+ cmp r9, r0
+ moveq r6, #0x4
+ movne r6, #0x5
+_020DF1A4:
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DF280 ; =0x021D70D0
+ add r0, r5, r4
+ bl OS_TryLockMutex
+_020DF1B8: ; 0x020DF1B8
+ cmp r0, #0x0
+ bne _020DF1E4
+ ldr r0, _020DF284 ; =0x021D3498
+ ldr r2, _020DF288 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DF28C ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+ b _020DF23C
+_020DF1E4:
+ ldr r0, _020DF284 ; =0x021D3498
+ ldr r1, _020DF288 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DF214
+ ldr r1, _020DF28C ; =0x021D70AC
+ ldr r0, [r1, r6, lsl #0x2]
+ add r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ b _020DF23C
+_020DF214:
+ add r0, r5, r4
+ bl OS_LockMutex
+ ldr r0, _020DF284 ; =0x021D3498
+ ldr r2, _020DF288 ; =0x021D7088
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DF28C ; =0x021D70AC
+ ldr r3, [r1, #0x6c]
+ mov r1, #0x1
+ str r3, [r2, r6, lsl #0x2]
+ str r1, [r0, r6, lsl #0x2]
+_020DF23C:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ bl _fseek
+ ldr r1, _020DF28C ; =0x021D70AC
+ mov r7, r0
+ ldr r0, [r1, r6, lsl #0x2]
+ subs r0, r0, #0x1
+ str r0, [r1, r6, lsl #0x2]
+ bne _020DF26C
+ add r0, r5, r4
+ bl OS_UnlockMutex
+_020DF26C:
+ mov r0, r7
+ ldmia sp!, {r3-r9,pc}
+ .balign 4
+_020DF274: .word 0x02106A58
+_020DF278: .word 0x02106AA4
+_020DF27C: .word 0x02106AF0
+_020DF280: .word 0x021D70D0
+_020DF284: .word 0x021D3498
+_020DF288: .word 0x021D7088
+_020DF28C: .word 0x021D70AC
+
+ arm_func_start rewind
+rewind: ; 0x020DF290
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r4, r0
+ mov r2, r1
+ strb r1, [r4, #0xd]
+ bl fseek
+_020DF2A8: ; 0x020DF2A8
+ mov r0, #0x0
+ strb r0, [r4, #0xd]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start mbtowc
+mbtowc:
+ stmdb sp!, {r3,lr}
+ ldr r3, _020DF2CC ; =0x02106C98
+ ldr r3, [r3, #0x8]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DF2CC: .word 0x02106C98
+
+ arm_func_start __mbtowc_noconv
+__mbtowc_noconv: ; 0x020DF2D0
+ cmp r1, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r2, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ ldrneb r2, [r1, #0x0]
+ strneh r2, [r0, #0x0]
+ ldrsb r0, [r1, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ movne r0, #0x1
+ bx lr
+
+ arm_func_start __wctomb_noconv
+__wctomb_noconv: ; 0x020DF308
+ cmp r0, #0x0
+ moveq r0, #0x0
+ strneb r1, [r0, #0x0]
+ movne r0, #0x1
+ bx lr
+
+ arm_func_start wctomb
+wctomb: ; 0x020DF31C
+ stmdb sp!, {r3,lr}
+ ldr r2, _020DF334 ; =0x02106C98
+ ldr r2, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ blx r2
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DF334: .word 0x02106C98
+
+ arm_func_start mbstowcs
+mbstowcs: ; 0x020DF338
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r8, r0
+ mov r0, r7
+ mov r6, r2
+ bl strlen
+ mov r5, r0
+ cmp r8, #0x0
+ mov r4, #0x0
+ beq _020DF3B8
+ cmp r6, #0x0
+ bls _020DF3B8
+_020DF368:
+ ldrsb r0, [r7, #0x0]
+ cmp r0, #0x0
+ beq _020DF3A0
+ mov r0, r8
+ mov r1, r7
+ mov r2, r5
+ bl mbtowc
+_020DF384: ; 0x020DF384
+ cmp r0, #0x0
+ add r8, r8, #0x2
+ addgt r7, r7, r0
+ subgt r5, r5, r0
+ bgt _020DF3AC
+ mvn r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020DF3A0:
+ mov r0, #0x0
+ strh r0, [r8, #0x0]
+ b _020DF3B8
+_020DF3AC:
+ add r4, r4, #0x1
+ cmp r4, r6
+ blo _020DF368
+_020DF3B8:
+ mov r0, r4
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start wcstombs
+wcstombs:
+ stmdb sp!, {r3-r9,lr}
+ movs r4, r0
+ mov r9, r1
+ cmpne r9, #0x0
+ mov r8, r2
+ mov r7, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r3-r9,pc}
+_020DF3E0: ; 0x020DF3E0
+ add r6, sp, #0x0
+_020DF3E4:
+ ldrh r1, [r9, #0x0]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ streqb r0, [r4, r7]
+ beq _020DF430
+ mov r0, r6
+ add r9, r9, #0x2
+ bl wctomb
+ mov r5, r0
+ add r0, r7, r5
+ cmp r0, r8
+ bhi _020DF430
+ mov r1, r6
+ mov r2, r5
+ add r0, r4, r7
+ bl strncpy
+ add r7, r7, r5
+ cmp r7, r8
+ bls _020DF3E4
+_020DF430:
+ mov r0, r7
+ ldmia sp!, {r3-r9,pc}
+
+ arm_func_start memcpy
+memcpy: ; 0x020DF438
+ mov r12, r0
+ cmp r2, #0x0
+ bxeq lr
+_020DF444:
+ ldrsb r3, [r1], #0x1
+ subs r2, r2, #0x1
+ strb r3, [r12], #0x1
+ bne _020DF444
+ bx lr
+
+ arm_func_start memmove
+memmove: ; 0x020DF458
+ cmp r1, r0
+ blo _020DF480
+ mov r12, r0
+ cmp r2, #0x0
+ bxeq lr
+_020DF46C:
+ ldrsb r3, [r1], #0x1
+ subs r2, r2, #0x1
+ strb r3, [r12], #0x1
+ bne _020DF46C
+ bx lr
+_020DF480:
+ cmp r2, #0x0
+ add r3, r1, r2
+ add r12, r0, r2
+ bxeq lr
+_020DF490:
+ ldrsb r1, [r3, #-0x1]!
+ subs r2, r2, #0x1
+ strb r1, [r12, #-0x1]!
+ bne _020DF490
+ bx lr
+
+ arm_func_start Call_FillMemWithValue
+Call_FillMemWithValue: ; 0x020DF4A4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl __fill_mem
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+
+ arm_func_start memchr
+memchr:
+ cmp r2, #0x0
+ and r3, r1, #0xff
+ beq _020DF4DC
+_020DF4C4:
+ ldrb r1, [r0], #0x1
+ cmp r1, r3
+ subeq r0, r0, #0x1
+ bxeq lr
+ subs r2, r2, #0x1
+ bne _020DF4C4
+_020DF4DC:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start __memrchr
+__memrchr: ; 0x020DF4E4
+ cmp r2, #0x0
+ and r3, r1, #0xff
+ add r0, r0, r2
+ beq _020DF508
+_020DF4F4:
+ ldrb r1, [r0, #-0x1]!
+ cmp r1, r3
+ bxeq lr
+ subs r2, r2, #0x1
+ bne _020DF4F4
+_020DF508:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start memcmp
+memcmp: ; 0x020DF510
+ cmp r2, #0x0
+ beq _020DF548
+_020DF518:
+ ldrb r12, [r0], #0x1
+ ldrb r3, [r1], #0x1
+ cmp r12, r3
+ beq _020DF540
+ ldrb r2, [r0, #-0x1]
+ ldrb r0, [r1, #-0x1]
+ cmp r2, r0
+ mvncc r0, #0x0
+ movcs r0, #0x1
+ bx lr
+_020DF540:
+ subs r2, r2, #0x1
+ bne _020DF518
+_020DF548:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start __fill_mem
+__fill_mem: ; 0x020DF550
+ cmp r2, #0x20
+ and r3, r1, #0xff
+ blo _020DF5E4
+ rsb r1, r0, #0x0
+ ands r12, r1, #0x3
+ beq _020DF57C
+ sub r2, r2, r12
+ and r1, r3, #0xff
+_020DF570:
+ strb r1, [r0], #0x1
+ subs r12, r12, #0x1
+ bne _020DF570
+_020DF57C:
+ cmp r3, #0x0
+ beq _020DF594
+ mov r1, r3, lsl #0x10
+ orr r1, r1, r3, lsl #0x18
+ orr r1, r1, r3, lsl #0x8
+ orr r3, r3, r1
+_020DF594:
+ movs r1, r2, lsr #0x5
+ beq _020DF5C8
+_020DF59C:
+ str r3, [r0, #0x0]
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x8]
+ str r3, [r0, #0xc]
+ str r3, [r0, #0x10]
+ str r3, [r0, #0x14]
+ str r3, [r0, #0x18]
+ str r3, [r0, #0x1c]
+ add r0, r0, #0x20
+ subs r1, r1, #0x1
+ bne _020DF59C
+_020DF5C8:
+ and r1, r2, #0x1f
+ movs r1, r1, lsr #0x2
+ beq _020DF5E0
+_020DF5D4:
+ str r3, [r0], #0x4
+ subs r1, r1, #0x1
+ bne _020DF5D4
+_020DF5E0:
+ and r2, r2, #0x3
+_020DF5E4:
+ cmp r2, #0x0
+ bxeq lr
+ and r1, r3, #0xff
+_020DF5F0:
+ strb r1, [r0], #0x1
+ subs r2, r2, #0x1
+ bne _020DF5F0
+ bx lr
+
+ arm_func_start parse_format_printf
+parse_format_printf: ; 0x020DF600
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldrsb r3, [r0, #0x1]
+ mov r4, #0x0
+ mov r5, #0x1
+ mov lr, r2
+ strb r5, [sp, #0x0]
+ strb r4, [sp, #0x1]
+ strb r4, [sp, #0x2]
+ strb r4, [sp, #0x3]
+ strb r4, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r4, [sp, #0xc]
+ cmp r3, #0x25
+ add r12, r0, #0x1
+ bne _020DF65C
+ add r0, sp, #0x0
+ strb r3, [sp, #0x5]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x1
+ ldmia sp!, {r4-r8,pc}
+_020DF65C:
+ mov r2, #0x2
+ mov r0, r4
+ mov r5, r2
+ mov r6, r4
+ mov r7, #0x1
+_020DF670:
+ mov r8, r7
+ cmp r3, #0x2b
+ bgt _020DF6A0
+ bge _020DF6C8
+ cmp r3, #0x23
+ bgt _020DF6F8
+ cmp r3, #0x20
+ blt _020DF6F8
+ beq _020DF6D0
+ cmp r3, #0x23
+ beq _020DF6E0
+ b _020DF6F8
+_020DF6A0:
+ cmp r3, #0x30
+ bgt _020DF6F8
+ cmp r3, #0x2d
+ blt _020DF6F8
+ beq _020DF6C0
+ cmp r3, #0x30
+ beq _020DF6E8
+ b _020DF6F8
+_020DF6C0:
+ strb r6, [sp, #0x0]
+ b _020DF6FC
+_020DF6C8:
+ strb r7, [sp, #0x1]
+ b _020DF6FC
+_020DF6D0:
+ ldrb r4, [sp, #0x1]
+ cmp r4, #0x1
+ strneb r5, [sp, #0x1]
+ b _020DF6FC
+_020DF6E0:
+ strb r7, [sp, #0x3]
+ b _020DF6FC
+_020DF6E8:
+ ldrb r4, [sp, #0x0]
+ cmp r4, #0x0
+ strneb r2, [sp, #0x0]
+ b _020DF6FC
+_020DF6F8:
+ mov r8, r0
+_020DF6FC:
+ cmp r8, #0x0
+ ldrnesb r3, [r12, #0x1]!
+ bne _020DF670
+ cmp r3, #0x2a
+ bne _020DF744
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ str r0, [sp, #0x8]
+ cmp r0, #0x0
+ bge _020DF73C
+ rsb r0, r0, #0x0
+ mov r2, #0x0
+ strb r2, [sp, #0x0]
+ str r0, [sp, #0x8]
+_020DF73C:
+ ldrsb r3, [r12, #0x1]!
+ b _020DF794
+_020DF744:
+ ldr r4, _020DFB88 ; =0x0210430C
+ mov r5, #0x0
+ mov r0, #0xa
+ b _020DF768
+_020DF754:
+ ldr r2, [sp, #0x8]
+ sub r3, r3, #0x30
+ mla r6, r2, r0, r3
+ ldrsb r3, [r12, #0x1]!
+ str r6, [sp, #0x8]
+_020DF768:
+ cmp r3, #0x0
+ blt _020DF778
+ cmp r3, #0x80
+ blt _020DF780
+_020DF778:
+ mov r2, r5
+ b _020DF78C
+_020DF780:
+ mov r2, r3, lsl #0x1
+ ldrh r2, [r4, r2]
+ and r2, r2, #0x8
+_020DF78C:
+ cmp r2, #0x0
+ bne _020DF754
+_020DF794:
+ ldr r2, [sp, #0x8]
+ ldr r0, _020DFB8C ; =0x000001FD
+ cmp r2, r0
+ ble _020DF7C4
+ mov r1, #0xff
+ add r0, sp, #0x0
+ strb r1, [sp, #0x5]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x1
+ ldmia sp!, {r4-r8,pc}
+_020DF7C4:
+ cmp r3, #0x2e
+ bne _020DF858
+ ldrsb r3, [r12, #0x1]!
+ mov r0, #0x1
+ strb r0, [sp, #0x2]
+ cmp r3, #0x2a
+ bne _020DF808
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ ldrsb r3, [r12, #0x1]!
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ movlt r0, #0x0
+ strltb r0, [sp, #0x2]
+ b _020DF858
+_020DF808:
+ ldr r2, _020DFB88 ; =0x0210430C
+ mov r4, #0x0
+ mov r0, #0xa
+ b _020DF82C
+_020DF818:
+ ldr r1, [sp, #0xc]
+ sub r3, r3, #0x30
+ mla r5, r1, r0, r3
+ ldrsb r3, [r12, #0x1]!
+ str r5, [sp, #0xc]
+_020DF82C:
+ cmp r3, #0x0
+ blt _020DF83C
+ cmp r3, #0x80
+ blt _020DF844
+_020DF83C:
+ mov r1, r4
+ b _020DF850
+_020DF844:
+ mov r1, r3, lsl #0x1
+ ldrh r1, [r2, r1]
+ and r1, r1, #0x8
+_020DF850:
+ cmp r1, #0x0
+ bne _020DF818
+_020DF858:
+ cmp r3, #0x6c
+ mov r0, #0x1
+ bgt _020DF890
+ cmp r3, #0x68
+ blt _020DF884
+ beq _020DF8AC
+ cmp r3, #0x6a
+ beq _020DF8F8
+ cmp r3, #0x6c
+ beq _020DF8C8
+ b _020DF91C
+_020DF884:
+ cmp r3, #0x4c
+ beq _020DF8EC
+ b _020DF91C
+_020DF890:
+ cmp r3, #0x74
+ bgt _020DF8A0
+ beq _020DF904
+ b _020DF91C
+_020DF8A0:
+ cmp r3, #0x7a
+ beq _020DF910
+ b _020DF91C
+_020DF8AC:
+ ldrsb r1, [r12, #0x1]
+ mov r2, #0x2
+ strb r2, [sp, #0x4]
+ cmp r1, #0x68
+ streqb r0, [sp, #0x4]
+ ldreqsb r3, [r12, #0x1]!
+ b _020DF920
+_020DF8C8:
+ ldrsb r1, [r12, #0x1]
+ mov r2, #0x3
+ strb r2, [sp, #0x4]
+ cmp r1, #0x6c
+ bne _020DF920
+ mov r1, #0x4
+ strb r1, [sp, #0x4]
+ ldrsb r3, [r12, #0x1]!
+ b _020DF920
+_020DF8EC:
+ mov r1, #0x9
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF8F8:
+ mov r1, #0x6
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF904:
+ mov r1, #0x8
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF910:
+ mov r1, #0x7
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF91C:
+ mov r0, #0x0
+_020DF920:
+ cmp r0, #0x0
+ ldrnesb r3, [r12, #0x1]!
+ strb r3, [sp, #0x5]
+ cmp r3, #0x61
+ bgt _020DF974
+ bge _020DFA5C
+ cmp r3, #0x47
+ bgt _020DF968
+ subs r0, r3, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020DFB68
+_020DF94C: ; 0x020DF94C
+ b _020DFA5C
+_020DF950: ; 0x020DF950
+ b _020DFB68
+_020DF954: ; 0x020DF954
+ b _020DFB68
+_020DF958: ; 0x020DF958
+ b _020DFB68
+_020DF95C: ; 0x020DF95C
+ b _020DFAA4
+_020DF960: ; 0x020DF960
+ b _020DFA24
+_020DF964: ; 0x020DF964
+ b _020DFA94
+_020DF968:
+ cmp r3, #0x58
+ beq _020DF9E8
+ b _020DFB68
+_020DF974:
+ cmp r3, #0x63
+ bgt _020DF984
+ beq _020DFB04
+ b _020DFB68
+_020DF984:
+ sub r0, r3, #0x64
+ cmp r0, #0x14
+ addls pc, pc, r0, lsl #0x2
+ b _020DFB68
+_020DF994:
+ b _020DF9E8
+_020DF998:
+ b _020DFAA4
+_020DF99C:
+ b _020DFA24
+_020DF9A0:
+ b _020DFA94
+_020DF9A4:
+ b _020DFB68
+_020DF9A8:
+ b _020DF9E8
+_020DF9AC:
+ b _020DFB68
+_020DF9B0:
+ b _020DFB68
+_020DF9B4:
+ b _020DFB68
+_020DF9B8:
+ b _020DFB68
+_020DF9BC:
+ b _020DFB54
+_020DF9C0:
+ b _020DF9E8
+_020DF9C4:
+ b _020DFAE0
+_020DF9C8:
+ b _020DFB68
+_020DF9CC:
+ b _020DFB68
+_020DF9D0:
+ b _020DFB30
+_020DF9D4:
+ b _020DFB68
+_020DF9D8:
+ b _020DF9E8
+_020DF9DC:
+ b _020DFB68
+_020DF9E0:
+ b _020DFB68
+_020DF9E4:
+ b _020DF9E8
+_020DF9E8:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x9
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+ beq _020DFB70
+ ldrb r0, [sp, #0x0]
+ cmp r0, #0x2
+ moveq r0, #0x1
+ streqb r0, [sp, #0x0]
+ b _020DFB70
+_020DFA24:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x6
+ streq r0, [sp, #0xc]
+ b _020DFB70
+_020DFA5C:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0xd
+ streq r0, [sp, #0xc]
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ cmpne r0, #0x1
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ b _020DFB70
+_020DFA94:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+_020DFAA4:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ cmpne r0, #0x1
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x6
+ streq r0, [sp, #0xc]
+ b _020DFB70
+_020DFAE0:
+ mov r3, #0x78
+ mov r2, #0x1
+ mov r1, #0x3
+ mov r0, #0x8
+ strb r3, [sp, #0x5]
+ strb r2, [sp, #0x3]
+ strb r1, [sp, #0x4]
+ str r0, [sp, #0xc]
+ b _020DFB70
+_020DFB04:
+ ldrb r1, [sp, #0x4]
+ cmp r1, #0x3
+ moveq r0, #0x5
+ streqb r0, [sp, #0x4]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ cmpeq r1, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x5]
+ b _020DFB70
+_020DFB30:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x3
+ moveq r0, #0x5
+ streqb r0, [sp, #0x4]
+ beq _020DFB70
+ cmp r0, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x5]
+ b _020DFB70
+_020DFB54:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x9
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ b _020DFB70
+_020DFB68:
+ mov r0, #0xff
+ strb r0, [sp, #0x5]
+_020DFB70:
+ add r0, sp, #0x0
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add r0, r12, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020DFB88: .word 0x0210430C
+_020DFB8C: .word 0x000001FD
+
+ arm_func_start long2str
+long2str: ; 0x020DFB90
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x10
+ movs r10, r0
+ mov r0, #0x0
+ mov r5, r1
+ str r0, [sp, #0xc]
+ ldr r7, [sp, #0x4c]
+ mov r6, r0
+ strb r0, [r5, #-0x1]!
+ ldrb r0, [sp, #0x43]
+ str r1, [sp, #0x0]
+ ldrb r8, [sp, #0x45]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x48]
+ ldrb r11, [sp, #0x41]
+ str r0, [sp, #0x8]
+ cmpeq r7, #0x0
+ bne _020DFC04
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020DFBF0
+ cmp r8, #0x6f
+ beq _020DFC04
+_020DFBF0:
+ add sp, sp, #0x10
+ mov r0, r5
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DFC04:
+ cmp r8, #0x69
+ bgt _020DFC2C
+ bge _020DFC60
+ cmp r8, #0x58
+ bgt _020DFC20
+ beq _020DFC8C
+ b _020DFC94
+_020DFC20:
+ cmp r8, #0x64
+ beq _020DFC60
+ b _020DFC94
+_020DFC2C:
+ cmp r8, #0x6f
+ bgt _020DFC40
+ moveq r4, #0x8
+ moveq r11, #0x0
+ b _020DFC94
+_020DFC40:
+ cmp r8, #0x78
+ bgt _020DFC94
+ cmp r8, #0x75
+ blt _020DFC94
+ beq _020DFC80
+ cmp r8, #0x78
+ beq _020DFC8C
+ b _020DFC94
+_020DFC60:
+ cmp r10, #0x0
+ mov r4, #0xa
+ bge _020DFC94
+ mov r0, #0x1
+ cmp r10, #0x80000000
+ rsbne r10, r10, #0x0
+ str r0, [sp, #0xc]
+ b _020DFC94
+_020DFC80:
+ mov r4, #0xa
+ mov r11, #0x0
+ b _020DFC94
+_020DFC8C:
+ mov r4, #0x10
+ mov r11, #0x0
+_020DFC94:
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ mov r9, r1
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ cmp r9, #0xa
+ mov r10, r0
+ addlt r9, r9, #0x30
+ blt _020DFCCC
+ cmp r8, #0x78
+ addeq r9, r9, #0x57
+ addne r9, r9, #0x37
+_020DFCCC:
+ cmp r10, #0x0
+ strb r9, [r5, #-0x1]!
+ add r6, r6, #0x1
+ bne _020DFC94
+ cmp r4, #0x8
+ bne _020DFD00
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r5, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneb r0, [r5, #-0x1]!
+ addne r6, r6, #0x1
+_020DFD00:
+ ldrb r0, [sp, #0x40]
+ cmp r0, #0x2
+ bne _020DFD34
+ ldr r0, [sp, #0xc]
+ ldr r7, [sp, #0x8]
+ cmp r0, #0x0
+ cmpeq r11, #0x0
+ subne r7, r7, #0x1
+ cmp r4, #0x10
+ bne _020DFD34
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ subne r7, r7, #0x2
+_020DFD34:
+ ldr r0, [sp, #0x0]
+ sub r1, r0, r5
+ ldr r0, _020DFDD8 ; =0x000001FD
+ add r1, r7, r1
+ cmp r1, r0
+ addgt sp, sp, #0x10
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ cmp r6, r7
+ bge _020DFD78
+ mov r0, #0x30
+_020DFD68:
+ add r6, r6, #0x1
+ cmp r6, r7
+ strb r0, [r5, #-0x1]!
+ blt _020DFD68
+_020DFD78:
+ cmp r4, #0x10
+ bne _020DFD94
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneb r8, [r5, #-0x1]
+ strneb r0, [r5, #-0x2]!
+_020DFD94:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r5, #-0x1]!
+ bne _020DFDC4
+ cmp r11, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r5, #-0x1]!
+ beq _020DFDC4
+ cmp r11, #0x2
+ moveq r0, #0x20
+ streqb r0, [r5, #-0x1]!
+_020DFDC4:
+ mov r0, r5
+ add sp, sp, #0x10
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020DFDD8: .word 0x000001FD
+
+ arm_func_start longlong2str
+longlong2str: ; 0x020DFDDC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x18
+ mov r9, r1
+ mov r1, #0x0
+ mov r10, r0
+ mov r6, r2
+ mov r0, r1
+ strb r0, [r6, #-0x1]!
+ ldr r0, [sp, #0x58]
+ cmp r9, #0x0
+ str r0, [sp, #0x10]
+ ldrb r0, [sp, #0x4f]
+ cmpeq r10, #0x0
+ str r2, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x54]
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x8]
+ ldrb r0, [sp, #0x4d]
+ mov r7, r1
+ ldrb r8, [sp, #0x51]
+ str r0, [sp, #0xc]
+ ldreq r0, [sp, #0x10]
+ cmpeq r0, #0x0
+ bne _020DFE6C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020DFE58
+ cmp r8, #0x6f
+ beq _020DFE6C
+_020DFE58:
+ add sp, sp, #0x18
+ mov r0, r6
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DFE6C:
+ cmp r8, #0x69
+ bgt _020DFE94
+ bge _020DFEC4
+ cmp r8, #0x58
+ bgt _020DFE88
+ beq _020DFF18
+ b _020DFF24
+_020DFE88:
+ cmp r8, #0x64
+ beq _020DFEC4
+ b _020DFF24
+_020DFE94:
+ cmp r8, #0x6f
+ bgt _020DFEA4
+ beq _020DFEF8
+ b _020DFF24
+_020DFEA4:
+ cmp r8, #0x78
+ bgt _020DFF24
+ cmp r8, #0x75
+ blt _020DFF24
+ beq _020DFF08
+ cmp r8, #0x78
+ beq _020DFF18
+ b _020DFF24
+_020DFEC4:
+ subs r0, r10, #0x0
+ sbcs r0, r9, #0x0
+ mov r11, #0xa
+ mov r5, #0x0
+ bge _020DFF24
+ cmp r9, #0x80000000
+ cmpeq r10, r5
+ beq _020DFEEC
+ rsbs r10, r10, #0x0
+ rsc r9, r9, #0x0
+_020DFEEC:
+ mov r0, #0x1
+ str r0, [sp, #0x14]
+ b _020DFF24
+_020DFEF8:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x8
+ b _020DFF24
+_020DFF08:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0xa
+ b _020DFF24
+_020DFF18:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x10
+_020DFF24:
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ull_mod
+ mov r4, r0
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ll_udiv
+ mov r10, r0
+ cmp r4, #0xa
+ mov r9, r1
+ addlt r0, r4, #0x30
+ blt _020DFF70
+ cmp r8, #0x78
+ addeq r0, r4, #0x57
+ addne r0, r4, #0x37
+_020DFF70:
+ strb r0, [r6, #-0x1]!
+ mov r0, #0x0
+ cmp r9, r0
+ cmpeq r10, r0
+ add r7, r7, #0x1
+ bne _020DFF24
+ cmp r5, #0x0
+ cmpeq r11, #0x8
+ bne _020DFFB0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r6, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneb r0, [r6, #-0x1]!
+ addne r7, r7, #0x1
+_020DFFB0:
+ ldrb r0, [sp, #0x4c]
+ cmp r0, #0x2
+ bne _020E0000
+ ldr r0, [sp, #0x8]
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0xc]
+ cmpeq r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x1
+ strne r0, [sp, #0x10]
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E0000
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x2
+ strne r0, [sp, #0x10]
+_020E0000:
+ ldr r0, [sp, #0x0]
+ ldr r1, _020E00B8 ; =0x000001FD
+ sub r2, r0, r6
+ ldr r0, [sp, #0x10]
+ add r0, r0, r2
+ cmp r0, r1
+ addgt sp, sp, #0x18
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldr r0, [sp, #0x10]
+ cmp r7, r0
+ bge _020E0050
+ mov r1, #0x30
+_020E003C:
+ ldr r0, [sp, #0x10]
+ add r7, r7, #0x1
+ cmp r7, r0
+ strb r1, [r6, #-0x1]!
+ blt _020E003C
+_020E0050:
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E0070
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneb r8, [r6, #-0x1]
+ strneb r0, [r6, #-0x2]!
+_020E0070:
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r6, #-0x1]!
+ bne _020E00A4
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r6, #-0x1]!
+ beq _020E00A4
+ cmp r0, #0x2
+ moveq r0, #0x20
+ streqb r0, [r6, #-0x1]!
+_020E00A4:
+ mov r0, r6
+ add sp, sp, #0x18
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E00B8: .word 0x000001FD
+
+ arm_func_start double2hex
+double2hex: ; 0x020E00BC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r10,lr}
+ sub sp, sp, #0x44
+ ldr r7, [sp, #0x80]
+ ldr r0, _020E056C ; =0x000001FD
+ mov r8, r2
+ cmp r7, r0
+ ldrb r6, [sp, #0x79]
+ ldrb r5, [sp, #0x77]
+ ldrb r4, [sp, #0x75]
+ ldr r1, [sp, #0x68]
+ ldr r2, [sp, #0x6c]
+ addgt sp, sp, #0x44
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r10,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r10, #0x0
+ mov r9, #0x20
+ add r0, sp, #0x8
+ add r3, sp, #0xc
+ strb r10, [sp, #0x8]
+ strh r9, [sp, #0xa]
+ bl __num2dec_internal2
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x6c]
+ bl fabs
+ mov r2, r0
+ mov r0, r10
+ mov r3, r1
+ mov r1, r0
+ bl _deq
+ bne _020E0188
+ ldr r3, _020E0570 ; =0x02106DA0
+ sub r0, r8, #0x6
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ add sp, sp, #0x44
+ strb r2, [r8, #-0x6]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r2, [r3, #0x4]
+ ldrb r1, [r3, #0x5]
+ strb r2, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0188:
+ ldrb r0, [sp, #0x11]
+ cmp r0, #0x49
+ bne _020E0298
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E0224
+ cmp r6, #0x41
+ sub r0, r8, #0x5
+ bne _020E01E8
+ ldr r3, _020E0574 ; =0x02106DA8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E01E8:
+ ldr r3, _020E0578 ; =0x02106DB0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0224:
+ cmp r6, #0x41
+ sub r0, r8, #0x4
+ bne _020E0264
+ ldr r3, _020E057C ; =0x02106DB8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0264:
+ ldr r3, _020E0580 ; =0x02106DBC
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0298:
+ cmp r0, #0x4e
+ bne _020E03A4
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E0330
+ cmp r6, #0x41
+ sub r0, r8, #0x5
+ bne _020E02F4
+ ldr r3, _020E0584 ; =0x02106DC0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E02F4:
+ ldr r3, _020E0588 ; =0x02106DC8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0330:
+ cmp r6, #0x41
+ sub r0, r8, #0x4
+ bne _020E0370
+ ldr r3, _020E058C ; =0x02106DD0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0370:
+ ldr r3, _020E0590 ; =0x02106DD4
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E03A4:
+ mov r3, r10
+ mov r1, #0x1
+ mov r0, #0x64
+ add r9, sp, #0x68
+ strb r1, [sp, #0x34]
+ strb r1, [sp, #0x35]
+ strb r3, [sp, #0x36]
+ strb r3, [sp, #0x37]
+ strb r3, [sp, #0x38]
+ str r3, [sp, #0x3c]
+ str r1, [sp, #0x40]
+ strb r0, [sp, #0x39]
+_020E03D4:
+ rsb r1, r3, #0x7
+ ldrsb r2, [r9, r3]
+ ldrsb r0, [r9, r1]
+ strb r0, [r9, r3]
+ add r3, r3, #0x1
+ strb r2, [r9, r1]
+ cmp r3, #0x4
+ blt _020E03D4
+ ldrb r0, [sp, #0x69]
+ ldrb r1, [sp, #0x68]
+ ldr sb, _020E0594 ; =0x000007FF
+ mov r0, r0, lsl #0x11
+ orr r1, r0, r1, lsl #0x19
+ add r0, sp, #0x34
+ and lr, r9, r1, lsr #0x15
+ sub r12, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r12, {r0-r3}
+ rsb r0, r9, #0x400
+ mov r1, r8
+ add r0, lr, r0
+ ldmia r12, {r2-r3}
+ bl long2str
+ cmp r6, #0x61
+ moveq r1, #0x70
+ movne r1, #0x50
+ strb r1, [r0, #-0x1]!
+ mov r1, r7, lsl #0x2
+ mov lr, r7
+ cmp r7, #0x1
+ add r8, r1, #0xb
+ add r12, sp, #0x68
+ blt _020E04E4
+ mov r9, #0x30
+_020E045C:
+ cmp r8, #0x40
+ bge _020E04CC
+ ldrb r1, [r12, r8, asr #0x3]
+ and r2, r8, #0x7
+ rsb r3, r2, #0x7
+ mov r2, r1, asr r3
+ sub r10, r8, #0x4
+ bic r1, r8, #0x7
+ bic r10, r10, #0x7
+ cmp r1, r10
+ add r10, r12, r8, asr #0x3
+ and r1, r2, #0xff
+ beq _020E04A0
+ ldrb r2, [r10, #-0x1]
+ mov r2, r2, lsl #0x8
+ orr r1, r1, r2, asr r3
+ and r1, r1, #0xff
+_020E04A0:
+ and r1, r1, #0xf
+ cmp r1, #0xa
+ addcc r1, r1, #0x30
+ andcc r1, r1, #0xff
+ blo _020E04D0
+ cmp r6, #0x61
+ addeq r1, r1, #0x57
+ andeq r1, r1, #0xff
+ addne r1, r1, #0x37
+ andne r1, r1, #0xff
+ b _020E04D0
+_020E04CC:
+ mov r1, r9
+_020E04D0:
+ sub lr, lr, #0x1
+ cmp lr, #0x1
+ strb r1, [r0, #-0x1]!
+ sub r8, r8, #0x4
+ bge _020E045C
+_020E04E4:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneb r1, [r0, #-0x1]!
+ mov r1, #0x31
+ strb r1, [r0, #-0x1]
+ cmp r6, #0x61
+ moveq r1, #0x78
+ movne r1, #0x58
+ strb r1, [r0, #-0x2]!
+ mov r1, #0x30
+ strb r1, [r0, #-0x1]!
+ ldrsb r1, [sp, #0xc]
+ cmp r1, #0x0
+ movne r1, #0x2d
+ strneb r1, [r0, #-0x1]!
+ addne sp, sp, #0x44
+ ldmneia sp!, {r3-r10,lr}
+ addne sp, sp, #0x10
+ bxne lr
+ cmp r4, #0x1
+ moveq r1, #0x2b
+ streqb r1, [r0, #-0x1]!
+ addeq sp, sp, #0x44
+ ldmeqia sp!, {r3-r10,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ cmp r4, #0x2
+ moveq r1, #0x20
+ streqb r1, [r0, #-0x1]!
+ add sp, sp, #0x44
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E056C: .word 0x000001FD
+_020E0570: .word 0x02106DA0
+_020E0574: .word 0x02106DA8
+_020E0578: .word 0x02106DB0
+_020E057C: .word 0x02106DB8
+_020E0580: .word 0x02106DBC
+_020E0584: .word 0x02106DC0
+_020E0588: .word 0x02106DC8
+_020E058C: .word 0x02106DD0
+_020E0590: .word 0x02106DD4
+_020E0594: .word 0x000007FF
+
+ arm_func_start round_decimal
+round_decimal: ; 0x020E0598
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ bge _020E05C0
+_020E05A4:
+ mov r1, #0x0
+ strh r1, [r0, #0x2]
+ mov r1, #0x1
+ strb r1, [r0, #0x4]
+ mov r1, #0x30
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r4,pc}
+_020E05C0:
+ ldrb lr, [r0, #0x4]
+ cmp r1, lr
+ ldmgeia sp!, {r4,pc}
+_020E05CC: ; 0x020E05CC
+ add r12, r0, #0x5
+ add r2, r12, r1
+ add r2, r2, #0x1
+ ldrsb r3, [r2, #-0x1]!
+ sub r3, r3, #0x30
+ mov r3, r3, lsl #0x18
+ mov r3, r3, asr #0x18
+ cmp r3, #0x5
+ bne _020E0620
+ add r12, r12, lr
+_020E05F4:
+ sub r12, r12, #0x1
+ cmp r12, r2
+ bls _020E060C
+ ldrsb r3, [r12, #0x0]
+ cmp r3, #0x30
+ beq _020E05F4
+_020E060C:
+ cmp r12, r2
+ ldreqsb r3, [r2, #-0x1]
+ andeq r4, r3, #0x1
+ movne r4, #0x1
+ b _020E0628
+_020E0620:
+ movgt r4, #0x1
+ movle r4, #0x0
+_020E0628:
+ cmp r1, #0x0
+ beq _020E0684
+ mov r12, #0x0
+ mov lr, #0x1
+_020E0638:
+ ldrsb r3, [r2, #-0x1]!
+ sub r3, r3, #0x30
+ add r3, r3, r4
+ mov r3, r3, lsl #0x18
+ mov r3, r3, asr #0x18
+ cmp r3, #0x9
+ movgt r4, lr
+ movle r4, r12
+ cmp r4, #0x0
+ bne _020E0668
+ cmp r3, #0x0
+ bne _020E0670
+_020E0668:
+ sub r1, r1, #0x1
+ b _020E067C
+_020E0670:
+ add r3, r3, #0x30
+ strb r3, [r2, #0x0]
+ b _020E0684
+_020E067C:
+ cmp r1, #0x0
+ bne _020E0638
+_020E0684:
+ cmp r4, #0x0
+ beq _020E06AC
+ ldrsh r3, [r0, #0x2]
+ mov r2, #0x1
+ mov r1, #0x31
+ add r3, r3, #0x1
+ strh r3, [r0, #0x2]
+ strb r2, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r4,pc}
+_020E06AC:
+ cmp r1, #0x0
+ beq _020E05A4
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start float2str
+float2str: ; 0x020E06BC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x2c
+ ldr r7, [sp, #0x68]
+ ldr r3, _020E0DF4 ; =0x000001FD
+ ldrb r6, [sp, #0x61]
+ ldrb r5, [sp, #0x5f]
+ ldrb r4, [sp, #0x5d]
+ cmp r7, r3
+ mov r10, r0
+ mov r8, r1
+ mov r9, r2
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r12, #0x0
+ mov r11, #0x20
+ add r0, sp, #0x0
+ add r3, sp, #0x4
+ mov r1, r10
+ mov r2, r8
+ strb r12, [sp, #0x0]
+ strh r11, [sp, #0x2]
+ bl __num2dec_internal2
+ ldrb r0, [sp, #0x8]
+ add r1, sp, #0x9
+ add r0, r1, r0
+ b _020E074C
+_020E0734:
+ ldrb r2, [sp, #0x8]
+ ldrsh r1, [sp, #0x6]
+ sub r2, r2, #0x1
+ add r1, r1, #0x1
+ strb r2, [sp, #0x8]
+ strh r1, [sp, #0x6]
+_020E074C:
+ ldrb r1, [sp, #0x8]
+ cmp r1, #0x1
+ bls _020E0764
+ ldrsb r1, [r0, #-0x1]!
+ cmp r1, #0x30
+ beq _020E0734
+_020E0764:
+ ldrb r0, [sp, #0x9]
+ cmp r0, #0x30
+ beq _020E0784
+ cmp r0, #0x49
+ beq _020E0790
+ cmp r0, #0x4e
+ beq _020E08F0
+ b _020E0A44
+_020E0784:
+ mov r0, #0x0
+ strh r0, [sp, #0x6]
+ b _020E0A44
+_020E0790:
+ mov r2, #0x0
+ mov r0, r10
+ mov r1, r8
+ mov r3, r2
+ bl _dls
+ bhs _020E0854
+ cmp r6, #0x0
+ sub r0, r9, #0x5
+ blt _020E07BC
+ cmp r6, #0x80
+ blt _020E07C4
+_020E07BC:
+ mov r1, #0x0
+ b _020E07D4
+_020E07C4:
+ ldr r1, _020E0DF8 ; =0x0210430C
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E07D4:
+ cmp r1, #0x0
+ beq _020E0818
+ ldr r3, _020E0DFC ; =0x02106DA8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0818:
+ ldr r3, _020E0E00 ; =0x02106DB0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0854:
+ cmp r6, #0x0
+ sub r0, r9, #0x4
+ blt _020E0868
+ cmp r6, #0x80
+ blt _020E0870
+_020E0868:
+ mov r1, #0x0
+ b _020E0880
+_020E0870:
+ ldr r1, _020E0DF8 ; =0x0210430C
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E0880:
+ cmp r1, #0x0
+ beq _020E08BC
+ ldr r3, _020E0E04 ; =0x02106DB8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E08BC:
+ ldr r3, _020E0E08 ; =0x02106DBC
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E08F0:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020E09A8
+ cmp r6, #0x0
+ sub r0, r9, #0x5
+ blt _020E0910
+ cmp r6, #0x80
+ blt _020E0918
+_020E0910:
+ mov r1, #0x0
+ b _020E0928
+_020E0918:
+ ldr r1, _020E0DF8 ; =0x0210430C
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E0928:
+ cmp r1, #0x0
+ beq _020E096C
+ ldr r3, _020E0E0C ; =0x02106DC0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E096C:
+ ldr r3, _020E0E10 ; =0x02106DC8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E09A8:
+ cmp r6, #0x0
+ sub r0, r9, #0x4
+ blt _020E09BC
+ cmp r6, #0x80
+ blt _020E09C4
+_020E09BC:
+ mov r1, #0x0
+ b _020E09D4
+_020E09C4:
+ ldr r1, _020E0DF8 ; =0x0210430C
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E09D4:
+ cmp r1, #0x0
+ beq _020E0A10
+ ldr r3, _020E0E14 ; =0x02106DD0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0A10:
+ ldr r3, _020E0E18 ; =0x02106DD4
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0A44:
+ ldrb r0, [sp, #0x8]
+ ldrsh r1, [sp, #0x6]
+ sub r8, r9, #0x1
+ sub r0, r0, #0x1
+ add r0, r1, r0
+ strh r0, [sp, #0x6]
+ mov r0, #0x0
+ strb r0, [r8, #0x0]
+ cmp r6, #0x65
+ bgt _020E0A98
+ bge _020E0B24
+ cmp r6, #0x47
+ bgt _020E0DE0
+ cmp r6, #0x45
+ blt _020E0DE0
+ beq _020E0B24
+ cmp r6, #0x46
+ beq _020E0C6C
+ cmp r6, #0x47
+ beq _020E0AB0
+ b _020E0DE0
+_020E0A98:
+ cmp r6, #0x66
+ bgt _020E0AA8
+ beq _020E0C6C
+ b _020E0DE0
+_020E0AA8:
+ cmp r6, #0x67
+ bne _020E0DE0
+_020E0AB0:
+ ldrb r0, [sp, #0x8]
+ cmp r0, r7
+ ble _020E0AC8
+ add r0, sp, #0x4
+ mov r1, r7
+ bl round_decimal
+_020E0AC8:
+ ldrsh r2, [sp, #0x6]
+ mvn r0, #0x3
+ cmp r2, r0
+ blt _020E0AE0
+ cmp r2, r7
+ blt _020E0B00
+_020E0AE0:
+ cmp r5, #0x0
+ ldreqb r0, [sp, #0x8]
+ subne r7, r7, #0x1
+ subeq r7, r0, #0x1
+ cmp r6, #0x67
+ moveq r6, #0x65
+ movne r6, #0x45
+ b _020E0B24
+_020E0B00:
+ cmp r5, #0x0
+ addne r0, r2, #0x1
+ subne r7, r7, r0
+ bne _020E0C6C
+ ldrb r1, [sp, #0x8]
+ add r0, r2, #0x1
+ subs r7, r1, r0
+ movmi r7, #0x0
+ b _020E0C6C
+_020E0B24:
+ ldrb r0, [sp, #0x8]
+ add r1, r7, #0x1
+ cmp r0, r1
+ ble _020E0B3C
+ add r0, sp, #0x4
+ bl round_decimal
+_020E0B3C:
+ ldrsh lr, [sp, #0x6]
+ mov r11, #0x2b
+ mov r10, #0x0
+ cmp lr, #0x0
+ rsblt lr, lr, #0x0
+ movlt r11, #0x2d
+ ldr r3, _020E0E1C ; =0x66666667
+ mov r0, #0xa
+ b _020E0B90
+_020E0B60:
+ mov r1, lr, lsr #0x1f
+ smull r2, r12, r3, lr
+ add r12, r1, r12, asr #0x2
+ smull r1, r2, r0, r12
+ sub r12, lr, r1
+ add r1, r12, #0x30
+ strb r1, [r8, #-0x1]!
+ mov r2, lr
+ smull r1, lr, r3, r2
+ mov r1, r2, lsr #0x1f
+ add lr, r1, lr, asr #0x2
+ add r10, r10, #0x1
+_020E0B90:
+ cmp lr, #0x0
+ bne _020E0B60
+ cmp r10, #0x2
+ blt _020E0B60
+ strb r11, [r8, #-0x1]
+ strb r6, [r8, #-0x2]!
+ sub r1, r9, r8
+ ldr r0, _020E0DF4 ; =0x000001FD
+ add r1, r7, r1
+ cmp r1, r0
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldrb r1, [sp, #0x8]
+ add r0, r7, #0x1
+ cmp r1, r0
+ bge _020E0BFC
+ add r0, r7, #0x2
+ sub r0, r0, r1
+ subs r1, r0, #0x1
+ beq _020E0BFC
+ mov r0, #0x30
+_020E0BF0:
+ strb r0, [r8, #-0x1]!
+ subs r1, r1, #0x1
+ bne _020E0BF0
+_020E0BFC:
+ ldrb r1, [sp, #0x8]
+ add r0, sp, #0x9
+ add r2, r0, r1
+ subs r1, r1, #0x1
+ beq _020E0C20
+_020E0C10:
+ ldrsb r0, [r2, #-0x1]!
+ subs r1, r1, #0x1
+ strb r0, [r8, #-0x1]!
+ bne _020E0C10
+_020E0C20:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r0, #0x2e
+ strneb r0, [r8, #-0x1]!
+ ldrb r0, [sp, #0x9]
+ strb r0, [r8, #-0x1]!
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E0DE0
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E0DE0
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+ b _020E0DE0
+_020E0C6C:
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+ cmp r1, r7
+ ble _020E0CAC
+ sub r1, r1, r7
+ add r0, sp, #0x4
+ sub r1, r2, r1
+ bl round_decimal
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+_020E0CAC:
+ adds r0, r3, #0x1
+ movmi r0, #0x0
+ ldr r3, _020E0DF4 ; =0x000001FD
+ add r6, r0, r1
+ cmp r6, r3
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ add r3, sp, #0x9
+ sub r6, r7, r1
+ cmp r6, #0x0
+ add r2, r3, r2
+ mov r9, #0x0
+ ble _020E0D00
+ mov r3, #0x30
+_020E0CF0:
+ add r9, r9, #0x1
+ cmp r9, r6
+ strb r3, [r8, #-0x1]!
+ blt _020E0CF0
+_020E0D00:
+ mov r6, #0x0
+ b _020E0D14
+_020E0D08:
+ ldrsb r3, [r2, #-0x1]!
+ add r6, r6, #0x1
+ strb r3, [r8, #-0x1]!
+_020E0D14:
+ cmp r6, r1
+ ldrltb r3, [sp, #0x8]
+ cmplt r6, r3
+ blt _020E0D08
+ cmp r6, r1
+ bge _020E0D40
+ mov r3, #0x30
+_020E0D30:
+ add r6, r6, #0x1
+ cmp r6, r1
+ strb r3, [r8, #-0x1]!
+ blt _020E0D30
+_020E0D40:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneb r1, [r8, #-0x1]!
+ cmp r0, #0x0
+ beq _020E0DA8
+ ldrb r1, [sp, #0x8]
+ mov r5, #0x0
+ sub r1, r0, r1
+ cmp r1, #0x0
+ ble _020E0D88
+ mov r3, #0x30
+_020E0D70:
+ strb r3, [r8, #-0x1]!
+ ldrb r1, [sp, #0x8]
+ add r5, r5, #0x1
+ sub r1, r0, r1
+ cmp r5, r1
+ blt _020E0D70
+_020E0D88:
+ cmp r5, r0
+ bge _020E0DB0
+_020E0D90:
+ ldrsb r1, [r2, #-0x1]!
+ add r5, r5, #0x1
+ cmp r5, r0
+ strb r1, [r8, #-0x1]!
+ blt _020E0D90
+ b _020E0DB0
+_020E0DA8:
+ mov r0, #0x30
+ strb r0, [r8, #-0x1]!
+_020E0DB0:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E0DE0
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E0DE0
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+_020E0DE0:
+ mov r0, r8
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E0DF4: .word 0x000001FD
+_020E0DF8: .word 0x0210430C
+_020E0DFC: .word 0x02106DA8
+_020E0E00: .word 0x02106DB0
+_020E0E04: .word 0x02106DB8
+_020E0E08: .word 0x02106DBC
+_020E0E0C: .word 0x02106DC0
+_020E0E10: .word 0x02106DC8
+_020E0E14: .word 0x02106DD0
+_020E0E18: .word 0x02106DD4
+_020E0E1C: .word 0x66666667
+
+ arm_func_start __pformatter
+__pformatter:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x22c
+ mov r3, #0x20
+ mov r11, r2
+ strb r3, [sp, #0x19]
+ ldrsb r2, [r11, #0x0]
+ mov r9, r0
+ mov r8, r1
+ cmp r2, #0x0
+ mov r10, #0x0
+ beq _020E1628
+_020E0E50:
+ mov r0, r11
+ mov r1, #0x25
+ bl strchr
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _020E0EA4
+ mov r0, r11
+ bl strlen
+ movs r2, r0
+ add r10, r10, r2
+ beq _020E1628
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ bne _020E1628
+ add sp, sp, #0x22c
+ mvn r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0EA4:
+ subs r2, r0, r11
+ add r10, r10, r2
+ beq _020E0ED4
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E0ED4:
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x25c
+ add r2, sp, #0x1c
+ bl parse_format_printf
+ ldrb r1, [sp, #0x21]
+ mov r11, r0
+ cmp r1, #0x61
+ bgt _020E0F40
+ bge _020E12A4
+ cmp r1, #0x47
+ bgt _020E0F34
+ subs r0, r1, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E0F28
+_020E0F0C: ; 0x020E0F0C
+ b _020E12A4
+_020E0F10: ; 0x020E0F10
+ b _020E148C
+_020E0F14: ; 0x020E0F14
+ b _020E148C
+_020E0F18: ; 0x020E0F18
+ b _020E148C
+_020E0F1C: ; 0x020E0F1C
+ b _020E123C
+_020E0F20: ; 0x020E0F20
+ b _020E123C
+_020E0F24: ; 0x020E0F24
+ b _020E123C
+_020E0F28:
+ cmp r1, #0x25
+ beq _020E1478
+ b _020E148C
+_020E0F34:
+ cmp r1, #0x58
+ beq _020E1100
+ b _020E148C
+_020E0F40:
+ cmp r1, #0x75
+ bgt _020E0FA8
+ subs r0, r1, #0x64
+ addpl pc, pc, r0, lsl #0x2
+ b _020E0F9C
+_020E0F54: ; 0x020E0F54
+ b _020E0FC0
+_020E0F58: ; 0x020E0F58
+ b _020E123C
+_020E0F5C: ; 0x020E0F5C
+ b _020E123C
+_020E0F60: ; 0x020E0F60
+ b _020E123C
+_020E0F64: ; 0x020E0F64
+ b _020E148C
+_020E0F68: ; 0x020E0F68
+ b _020E0FC0
+_020E0F6C: ; 0x020E0F6C
+ b _020E148C
+_020E0F70: ; 0x020E0F70
+ b _020E148C
+_020E0F74: ; 0x020E0F74
+ b _020E148C
+_020E0F78: ; 0x020E0F78
+ b _020E148C
+_020E0F7C: ; 0x020E0F7C
+ b _020E13CC
+_020E0F80: ; 0x020E0F80
+ b _020E1100
+_020E0F84: ; 0x020E0F84
+ b _020E148C
+_020E0F88: ; 0x020E0F88
+ b _020E148C
+_020E0F8C: ; 0x020E0F8C
+ b _020E148C
+_020E0F90: ; 0x020E0F90
+ b _020E130C
+_020E0F94: ; 0x020E0F94
+ b _020E148C
+_020E0F98: ; 0x020E0F98
+ b _020E1100
+_020E0F9C:
+ cmp r1, #0x63
+ beq _020E1458
+ b _020E148C
+_020E0FA8:
+ cmp r1, #0x78
+ bgt _020E0FB8
+ beq _020E1100
+ b _020E148C
+_020E0FB8:
+ cmp r1, #0xff
+ b _020E148C
+_020E0FC0:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x3
+ bne _020E0FE0
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E1078
+_020E0FE0:
+ cmp r0, #0x4
+ bne _020E1008
+ ldr r1, [sp, #0x25c]
+ add r2, r1, #0x8
+ str r2, [sp, #0x25c]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E1078
+_020E1008:
+ cmp r0, #0x6
+ bne _020E1030
+ ldr r1, [sp, #0x25c]
+ add r2, r1, #0x8
+ str r2, [sp, #0x25c]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E1078
+_020E1030:
+ cmp r0, #0x7
+ bne _020E104C
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E1078
+_020E104C:
+ cmp r0, #0x8
+ bne _020E1068
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E1078
+_020E1068:
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+_020E1078:
+ cmp r0, #0x2
+ moveq r1, r5, lsl #0x10
+ moveq r5, r1, asr #0x10
+ cmp r0, #0x1
+ moveq r1, r5, lsl #0x18
+ moveq r5, r1, asr #0x18
+ cmp r0, #0x4
+ cmpne r0, #0x6
+ add r0, sp, #0x1c
+ bne _020E10CC
+ sub r4, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ ldr r3, [r4, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r2, sp, #0x22c
+ bl longlong2str
+ movs r7, r0
+ beq _020E148C
+ b _020E10F0
+_020E10CC:
+ sub r4, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ add r1, sp, #0x22c
+ mov r0, r5
+ ldmia r4, {r2-r3}
+ bl long2str
+ movs r7, r0
+ beq _020E148C
+_020E10F0:
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E1100:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x3
+ bne _020E1120
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E1120:
+ cmp r0, #0x4
+ bne _020E1148
+ ldr r1, [sp, #0x25c]
+ add r2, r1, #0x8
+ str r2, [sp, #0x25c]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E11B8
+_020E1148:
+ cmp r0, #0x6
+ bne _020E1170
+ ldr r1, [sp, #0x25c]
+ add r2, r1, #0x8
+ str r2, [sp, #0x25c]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E11B8
+_020E1170:
+ cmp r0, #0x7
+ bne _020E118C
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E118C:
+ cmp r0, #0x8
+ bne _020E11A8
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E11A8:
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+_020E11B8:
+ cmp r0, #0x2
+ moveq r1, r5, lsl #0x10
+ moveq r5, r1, lsr #0x10
+ cmp r0, #0x1
+ andeq r5, r5, #0xff
+ cmp r0, #0x4
+ cmpne r0, #0x6
+ add r0, sp, #0x1c
+ bne _020E1208
+ sub r4, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ ldr r3, [r4, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r2, sp, #0x22c
+ bl longlong2str
+ movs r7, r0
+ beq _020E148C
+ b _020E122C
+_020E1208:
+ sub r4, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ add r1, sp, #0x22c
+ mov r0, r5
+ ldmia r4, {r2-r3}
+ bl long2str
+ movs r7, r0
+ beq _020E148C
+_020E122C:
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E123C:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x9
+ ldrne r0, [sp, #0x25c]
+ addne r0, r0, #0x8
+ strne r0, [sp, #0x25c]
+ bne _020E1260
+ ldr r0, [sp, #0x25c]
+ add r0, r0, #0x8
+ str r0, [sp, #0x25c]
+_020E1260:
+ ldr r7, [r0, #-0x8]
+ ldr r6, [r0, #-0x4]
+ add r0, sp, #0x1c
+ sub r4, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ ldr r3, [r4, #0x0]
+ mov r0, r7
+ mov r1, r6
+ add r2, sp, #0x22c
+ bl float2str
+ movs r7, r0
+ beq _020E148C
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E12A4:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x9
+ ldrne r0, [sp, #0x25c]
+ addne r0, r0, #0x8
+ strne r0, [sp, #0x25c]
+ bne _020E12C8
+ ldr r0, [sp, #0x25c]
+ add r0, r0, #0x8
+ str r0, [sp, #0x25c]
+_020E12C8:
+ ldr r7, [r0, #-0x8]
+ ldr r6, [r0, #-0x4]
+ add r0, sp, #0x1c
+ sub r4, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r4, {r0-r3}
+ ldr r3, [r4, #0x0]
+ mov r0, r7
+ mov r1, r6
+ add r2, sp, #0x22c
+ bl double2hex
+ movs r7, r0
+ beq _020E148C
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E130C:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x5
+ bne _020E134C
+ ldr r0, [sp, #0x25c]
+ mov r2, #0x200
+ add r0, r0, #0x4
+ str r0, [sp, #0x25c]
+ ldr r1, [r0, #-0x4]
+ add r0, sp, #0x2c
+ cmp r1, #0x0
+ ldreq r1, _020E163C ; =0x02106DD8
+ bl wcstombs
+_020E133C: ; 0x020E133C
+ cmp r0, #0x0
+ blt _020E148C
+ add r7, sp, #0x2c
+ b _020E135C
+_020E134C:
+ ldr r0, [sp, #0x25c]
+ add r0, r0, #0x4
+ str r0, [sp, #0x25c]
+ ldr r7, [r0, #-0x4]
+_020E135C:
+ ldrb r0, [sp, #0x1f]
+ cmp r7, #0x0
+ ldreq r7, _020E1640 ; =0x02106DDC
+ cmp r0, #0x0
+ beq _020E1390
+ ldrb r0, [sp, #0x1e]
+ ldrb r6, [r7], #0x1
+ cmp r0, #0x0
+ beq _020E14D8
+ ldr r0, [sp, #0x28]
+ cmp r6, r0
+ movgt r6, r0
+ b _020E14D8
+_020E1390:
+ ldrb r0, [sp, #0x1e]
+ cmp r0, #0x0
+ beq _020E13BC
+ ldr r6, [sp, #0x28]
+ mov r0, r7
+ mov r2, r6
+ mov r1, #0x0
+ bl memchr
+_020E13B0: ; 0x020E13B0
+ cmp r0, #0x0
+ subne r6, r0, r7
+ b _020E14D8
+_020E13BC:
+ mov r0, r7
+ bl strlen
+ mov r6, r0
+ b _020E14D8
+_020E13CC:
+ ldr r1, [sp, #0x25c]
+ ldrb r0, [sp, #0x20]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r1, [r1, #-0x4]
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020E161C
+_020E13EC:
+ b _020E1410
+_020E13F0:
+ b _020E161C
+_020E13F4:
+ b _020E1418
+_020E13F8:
+ b _020E1420
+_020E13FC:
+ b _020E1448
+_020E1400:
+ b _020E161C
+_020E1404:
+ b _020E1428
+_020E1408:
+ b _020E1438
+_020E140C:
+ b _020E1440
+_020E1410:
+ str r10, [r1, #0x0]
+ b _020E161C
+_020E1418:
+ strh r10, [r1, #0x0]
+ b _020E161C
+_020E1420:
+ str r10, [r1, #0x0]
+ b _020E161C
+_020E1428:
+ str r10, [r1, #0x0]
+ mov r0, r10, asr #0x1f
+ str r0, [r1, #0x4]
+ b _020E161C
+_020E1438:
+ str r10, [r1, #0x0]
+ b _020E161C
+_020E1440:
+ str r10, [r1, #0x0]
+ b _020E161C
+_020E1448:
+ str r10, [r1, #0x0]
+ mov r0, r10, asr #0x1f
+ str r0, [r1, #0x4]
+ b _020E161C
+_020E1458:
+ ldr r0, [sp, #0x25c]
+ add r7, sp, #0x2c
+ add r0, r0, #0x4
+ str r0, [sp, #0x25c]
+ ldr r0, [r0, #-0x4]
+ mov r6, #0x1
+ strb r0, [sp, #0x2c]
+ b _020E14D8
+_020E1478:
+ mov r0, #0x25
+ strb r0, [sp, #0x2c]
+ add r7, sp, #0x2c
+ mov r6, #0x1
+ b _020E14D8
+_020E148C:
+ ldr r0, [sp, #0xc]
+ bl strlen
+ movs r4, r0
+ beq _020E14C4
+ ldr r1, [sp, #0xc]
+ mov r0, r8
+ mov r2, r4
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E14C4:
+ add sp, sp, #0x22c
+ add r0, r10, r4
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E14D8:
+ ldrb r0, [sp, #0x1c]
+ mov r4, r6
+ cmp r0, #0x0
+ beq _020E158C
+ cmp r0, #0x2
+ moveq r0, #0x30
+ movne r0, #0x20
+ strb r0, [sp, #0x19]
+ ldrsb r0, [r7, #0x0]
+ cmp r0, #0x2b
+ cmpne r0, #0x2d
+ cmpne r0, #0x20
+ bne _020E1548
+ ldrsb r0, [sp, #0x19]
+ cmp r0, #0x30
+ bne _020E1548
+ mov r0, r8
+ mov r1, r7
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ add r7, r7, #0x1
+ sub r6, r6, #0x1
+_020E1548:
+ ldr r0, [sp, #0x24]
+ cmp r4, r0
+ bge _020E158C
+_020E1554:
+ mov r0, r8
+ add r1, sp, #0x19
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x24]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _020E1554
+_020E158C:
+ cmp r6, #0x0
+ beq _020E15BC
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E15BC:
+ ldrb r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _020E1618
+ ldr r0, [sp, #0x24]
+ cmp r4, r0
+ bge _020E1618
+ mov r6, #0x20
+ add r7, sp, #0x18
+_020E15DC:
+ mov r0, r8
+ mov r1, r7
+ mov r2, #0x1
+ strb r6, [sp, #0x18]
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x24]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _020E15DC
+_020E1618:
+ add r10, r10, r4
+_020E161C:
+ ldrsb r0, [r11, #0x0]
+ cmp r0, #0x0
+ bne _020E0E50
+_020E1628:
+ mov r0, r10
+ add sp, sp, #0x22c
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E163C: .word 0x02106DD8
+_020E1640: .word 0x02106DDC
+
+ arm_func_start __FileWrite
+__FileWrite: ; 0x020E1644
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ mov r0, r1
+ mov r3, r5
+ mov r1, #0x1
+ mov r4, r2
+ bl __fwrite
+_020E1660: ; 0x020E1660
+ cmp r4, r0
+ movne r5, #0x0
+ mov r0, r5
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start __StringWrite
+__StringWrite: ; 0x020E1670
+ stmdb sp!, {r3-r5,lr}
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ mov r5, r2
+ ldr r2, [r4, #0x4]
+ add r0, r3, r5
+ cmp r0, r2
+ ldr r0, [r4, #0x0]
+ subhi r5, r2, r3
+ mov r2, r5
+ add r0, r0, r3
+ bl memcpy
+ ldr r1, [r4, #0x8]
+ mov r0, #0x1
+ add r1, r1, r5
+ str r1, [r4, #0x8]
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start printf
+printf: ; 0x020E16B4
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4,lr}
+ ldr r0, _020E17B4 ; =0x02106AA4
+ mvn r1, #0x0
+ bl fwide
+_020E16C8: ; 0x020E16C8
+ cmp r0, #0x0
+ mvnge r0, #0x0
+ ldmgeia sp!, {r4,lr}
+ addge sp, sp, #0x10
+ bxge lr
+ ldr r0, _020E17B8 ; =0x021D7118
+ bl OS_TryLockMutex
+_020E16E4: ; 0x020E16E4
+ cmp r0, #0x0
+ bne _020E1710
+ ldr r0, _020E17BC ; =0x021D3498
+ ldr r1, _020E17C0 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E17C4 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0xc]
+ str r2, [r0, #0xc]
+ b _020E1768
+_020E1710:
+ ldr r0, _020E17BC ; =0x021D3498
+ ldr r1, _020E17C0 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0xc]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020E1740
+ ldr r0, _020E17C4 ; =0x021D70AC
+ ldr r1, [r0, #0xc]
+ add r1, r1, #0x1
+ str r1, [r0, #0xc]
+ b _020E1768
+_020E1740:
+ ldr r0, _020E17B8 ; =0x021D7118
+ bl OS_LockMutex
+ ldr r0, _020E17BC ; =0x021D3498
+ ldr r1, _020E17C0 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E17C4 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0xc]
+ str r2, [r0, #0xc]
+_020E1768:
+ add r0, sp, #0x8
+ bic r3, r0, #0x3
+ ldr r2, [sp, #0x8]
+ ldr r0, _020E17C8 ; =__FileWrite
+ ldr r1, _020E17B4 ; =0x02106AA4
+ add r3, r3, #0x4
+ bl __pformatter
+ ldr r1, _020E17C4 ; =0x021D70AC
+ mov r4, r0
+ ldr r0, [r1, #0xc]
+ subs r0, r0, #0x1
+ str r0, [r1, #0xc]
+ bne _020E17A4
+ ldr r0, _020E17B8 ; =0x021D7118
+ bl OS_UnlockMutex
+_020E17A4:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E17B4: .word 0x02106AA4
+_020E17B8: .word 0x021D7118
+_020E17BC: .word 0x021D3498
+_020E17C0: .word 0x021D7088
+_020E17C4: .word 0x021D70AC
+_020E17C8: .word __FileWrite
+
+ arm_func_start vsnprintf
+vsnprintf: ; 0x020E17CC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ mov r12, #0x0
+ ldr r0, _020E1830 ; =__StringWrite
+ add r1, sp, #0x0
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str r12, [sp, #0x8]
+ bl __pformatter
+_020E17F8: ; 0x020E17F8
+ cmp r5, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r5,pc}
+_020E1804: ; 0x020E1804
+ cmp r0, r4
+ movcc r1, #0x0
+ addcc sp, sp, #0xc
+ strccb r1, [r5, r0]
+ ldmccia sp!, {r4-r5,pc}
+_020E1818: ; 0x020E1818
+ cmp r4, #0x0
+ addne r1, r5, r4
+ movne r2, #0x0
+ strneb r2, [r1, #-0x1]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020E1830: .word __StringWrite
+
+ arm_func_start snprintf
+snprintf: ; 0x020E1834
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r3, sp, #0x10
+ bic r3, r3, #0x3
+ ldr r2, [sp, #0x10]
+ add r3, r3, #0x4
+ bl vsnprintf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start sprintf
+sprintf: ; 0x020E185C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r1, sp, #0xc
+ bic r1, r1, #0x3
+ add r3, r1, #0x4
+ ldr r2, [sp, #0xc]
+ mvn r1, #0x0
+ bl vsnprintf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start qsort
+qsort: ; 0x020E1888
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x10
+ mov r9, r1
+ cmp r9, #0x2
+ mov r10, r0
+ mov r8, r2
+ mov r7, r3
+ addcc sp, sp, #0x10
+ ldmccia sp!, {r3-r11,pc}
+_020E18AC: ; 0x020E18AC
+ mov r0, r9, lsr #0x1
+ add r11, r0, #0x1
+ sub r0, r11, #0x1
+ mla r0, r8, r0, r10
+ sub r2, r9, #0x1
+ str r0, [sp, #0xc]
+ mla r0, r8, r2, r10
+ str r0, [sp, #0x8]
+ mul r0, r11, r8
+ mvn r1, #0x0
+ str r0, [sp, #0x4]
+ mul r0, r8, r1
+ str r0, [sp, #0x0]
+_020E18E0:
+ cmp r11, #0x1
+ bls _020E1908
+ ldr r0, [sp, #0x4]
+ sub r11, r11, #0x1
+ sub r0, r0, r8
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0xc]
+ sub r0, r0, r8
+ str r0, [sp, #0xc]
+ b _020E1950
+_020E1908:
+ mov r2, r8
+ ldr r4, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ cmp r8, #0x0
+ beq _020E1934
+_020E191C:
+ ldrsb r0, [r4, #0x0]
+ ldrsb r1, [r3, #0x0]
+ subs r2, r2, #0x1
+ strb r0, [r3], #0x1
+ strb r1, [r4], #0x1
+ bne _020E191C
+_020E1934:
+ sub r9, r9, #0x1
+ cmp r9, #0x1
+ addeq sp, sp, #0x10
+ ldmeqia sp!, {r3-r11,pc}
+_020E1944: ; 0x020E1944
+ ldr r0, [sp, #0x8]
+ sub r0, r0, r8
+ str r0, [sp, #0x8]
+_020E1950:
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ mov r4, r11
+ add r0, r1, r0
+ cmp r9, r11, lsl #0x1
+ add r5, r10, r0
+ blo _020E18E0
+_020E196C:
+ mov r4, r4, lsl #0x1
+ sub r0, r4, #0x1
+ mov r6, r5
+ mla r5, r8, r0, r10
+ cmp r9, r4
+ bls _020E199C
+ mov r0, r5
+ add r1, r5, r8
+ blx r7
+ cmp r0, #0x0
+ addlt r4, r4, #0x1
+ addlt r5, r5, r8
+_020E199C:
+ mov r0, r6
+ mov r1, r5
+ blx r7
+ cmp r0, #0x0
+ bge _020E18E0
+ mov r2, r8
+ mov r3, r5
+ cmp r8, #0x0
+ beq _020E19D8
+_020E19C0:
+ ldrsb r1, [r6, #0x0]
+ ldrsb r0, [r3, #0x0]
+ subs r2, r2, #0x1
+ strb r0, [r6], #0x1
+ strb r1, [r3], #0x1
+ bne _020E19C0
+_020E19D8:
+ cmp r9, r4, lsl #0x1
+ bhs _020E196C
+ b _020E18E0
+_020E19E4: ; 0x020E19E4
+ add sp, sp, #0x10
+ ldmia sp!, {r3-r11,pc}
+
+ arm_func_start rand
+rand: ; 0x020E19EC
+ ldr r2, _020E1A14 ; =0x02106DE0
+ ldr r0, _020E1A18 ; =0x41C64E6D
+ ldr r3, [r2, #0x0]
+ ldr r1, _020E1A1C ; =0x00007FFF
+ mul r0, r3, r0
+ add r0, r0, #0x39
+ add r0, r0, #0x3000
+ str r0, [r2, #0x0]
+ and r0, r1, r0, lsr #0x10
+ bx lr
+ .balign 4
+_020E1A14: .word 0x02106DE0
+_020E1A18: .word 0x41C64E6D
+_020E1A1C: .word 0x00007FFF
+
+ arm_func_start srand
+srand: ; 0x020E1A20
+ ldr r1, _020E1A2C ; =0x02106DE0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020E1A2C: .word 0x02106DE0
+
+ arm_func_start parse_format_scanf
+parse_format_scanf: ; 0x020E1A30
+ stmdb sp!, {r3-r7,lr}
+ sub sp, sp, #0x28
+ ldr r6, _020E1F20 ; =0x0210440C
+ add r5, sp, #0x0
+ mov r7, r0
+ mov lr, r1
+ mov r4, r5
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldmia r6, {r0-r1}
+ stmia r5, {r0-r1}
+ ldrsb r0, [r7, #0x1]
+ add r12, r7, #0x1
+ cmp r0, #0x25
+ bne _020E1A9C
+ strb r0, [sp, #0x3]
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add sp, sp, #0x28
+ add r0, r12, #0x1
+ ldmia sp!, {r3-r7,pc}
+_020E1A9C:
+ cmp r0, #0x2a
+ moveq r0, #0x1
+ streqb r0, [sp, #0x0]
+ ldreqsb r0, [r12, #0x1]!
+ cmp r0, #0x0
+ blt _020E1ABC
+ cmp r0, #0x80
+ blt _020E1AC4
+_020E1ABC:
+ mov r1, #0x0
+ b _020E1AD4
+_020E1AC4:
+ ldr r1, _020E1F24 ; =0x0210430C
+ mov r2, r0, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x8
+_020E1AD4:
+ cmp r1, #0x0
+ beq _020E1B74
+ mov r1, #0x0
+ ldr r3, _020E1F24 ; =0x0210430C
+ str r1, [sp, #0x4]
+ mov r4, r1
+ mov r1, #0xa
+_020E1AF0:
+ ldr r2, [sp, #0x4]
+ sub r0, r0, #0x30
+ mla r0, r2, r1, r0
+ str r0, [sp, #0x4]
+ ldrsb r0, [r12, #0x1]!
+ cmp r0, #0x0
+ blt _020E1B14
+ cmp r0, #0x80
+ blt _020E1B1C
+_020E1B14:
+ mov r2, r4
+ b _020E1B28
+_020E1B1C:
+ mov r2, r0, lsl #0x1
+ ldrh r2, [r3, r2]
+ and r2, r2, #0x8
+_020E1B28:
+ cmp r2, #0x0
+ bne _020E1AF0
+ ldr r1, [sp, #0x4]
+ cmp r1, #0x0
+ bne _020E1B6C
+ mov r0, #0xff
+ add r4, sp, #0x0
+ strb r0, [sp, #0x3]
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add sp, sp, #0x28
+ add r0, r12, #0x1
+ ldmia sp!, {r3-r7,pc}
+_020E1B6C:
+ mov r1, #0x1
+ strb r1, [sp, #0x1]
+_020E1B74:
+ cmp r0, #0x6c
+ mov r1, #0x1
+ bgt _020E1BAC
+ cmp r0, #0x68
+ blt _020E1BA0
+ beq _020E1BC8
+ cmp r0, #0x6a
+ beq _020E1C14
+ cmp r0, #0x6c
+ beq _020E1BE4
+ b _020E1C38
+_020E1BA0:
+ cmp r0, #0x4c
+ beq _020E1C08
+ b _020E1C38
+_020E1BAC:
+ cmp r0, #0x74
+ bgt _020E1BBC
+ beq _020E1C2C
+ b _020E1C38
+_020E1BBC:
+ cmp r0, #0x7a
+ beq _020E1C20
+ b _020E1C38
+_020E1BC8:
+ mov r2, #0x2
+ strb r2, [sp, #0x2]
+ ldrsb r2, [r12, #0x1]
+ cmp r2, #0x68
+ streqb r1, [sp, #0x2]
+ ldreqsb r0, [r12, #0x1]!
+ b _020E1C3C
+_020E1BE4:
+ mov r2, #0x3
+ strb r2, [sp, #0x2]
+ ldrsb r2, [r12, #0x1]
+ cmp r2, #0x6c
+ bne _020E1C3C
+ mov r0, #0x7
+ strb r0, [sp, #0x2]
+ ldrsb r0, [r12, #0x1]!
+ b _020E1C3C
+_020E1C08:
+ mov r2, #0x9
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C14:
+ mov r2, #0x4
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C20:
+ mov r2, #0x5
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C2C:
+ mov r2, #0x6
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C38:
+ mov r1, #0x0
+_020E1C3C:
+ cmp r1, #0x0
+ ldrnesb r0, [r12, #0x1]!
+ strb r0, [sp, #0x3]
+ cmp r0, #0x5b
+ bgt _020E1C90
+ bge _020E1DE0
+ cmp r0, #0x47
+ bgt _020E1C84
+ subs r1, r0, #0x41
+ addpl pc, pc, r1, lsl #0x2
+ b _020E1EF0
+_020E1C68: ; 0x020E1C68
+ b _020E1D1C
+_020E1C6C: ; 0x020E1C6C
+ b _020E1EF0
+_020E1C70: ; 0x020E1C70
+ b _020E1EF0
+_020E1C74: ; 0x020E1C74
+ b _020E1EF0
+_020E1C78: ; 0x020E1C78
+ b _020E1D1C
+_020E1C7C: ; 0x020E1C7C
+ b _020E1D1C
+_020E1C80: ; 0x020E1C80
+ b _020E1D1C
+_020E1C84:
+ cmp r0, #0x58
+ beq _020E1D08
+ b _020E1EF0
+_020E1C90:
+ cmp r0, #0x61
+ bgt _020E1CA0
+ beq _020E1D1C
+ b _020E1EF0
+_020E1CA0:
+ sub r0, r0, #0x63
+ cmp r0, #0x15
+ addls pc, pc, r0, lsl #0x2
+ b _020E1EF0
+_020E1CB0:
+ b _020E1D6C
+_020E1CB4:
+ b _020E1D08
+_020E1CB8:
+ b _020E1D1C
+_020E1CBC:
+ b _020E1D1C
+_020E1CC0:
+ b _020E1D1C
+_020E1CC4:
+ b _020E1EF0
+_020E1CC8:
+ b _020E1D08
+_020E1CCC:
+ b _020E1EF0
+_020E1CD0:
+ b _020E1EF0
+_020E1CD4:
+ b _020E1EF0
+_020E1CD8:
+ b _020E1EF0
+_020E1CDC:
+ b _020E1EF8
+_020E1CE0:
+ b _020E1D08
+_020E1CE4:
+ b _020E1D58
+_020E1CE8:
+ b _020E1EF0
+_020E1CEC:
+ b _020E1EF0
+_020E1CF0:
+ b _020E1D90
+_020E1CF4:
+ b _020E1EF0
+_020E1CF8:
+ b _020E1D08
+_020E1CFC:
+ b _020E1EF0
+_020E1D00:
+ b _020E1EF0
+_020E1D04:
+ b _020E1D08
+_020E1D08:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x9
+ moveq r0, #0xff
+ streqb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D1C:
+ ldrb r1, [sp, #0x2]
+ cmp r1, #0x1
+ cmpne r1, #0x2
+ beq _020E1D3C
+ add r0, r1, #0xfc
+ and r0, r0, #0xff
+ cmp r0, #0x3
+ bhi _020E1D48
+_020E1D3C:
+ mov r0, #0xff
+ strb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D48:
+ cmp r1, #0x3
+ moveq r0, #0x8
+ streqb r0, [sp, #0x2]
+ b _020E1EF8
+_020E1D58:
+ mov r1, #0x3
+ mov r0, #0x78
+ strb r1, [sp, #0x2]
+ strb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D6C:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x3
+ moveq r0, #0xa
+ streqb r0, [sp, #0x2]
+ beq _020E1EF8
+ cmp r0, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D90:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x3
+ moveq r0, #0xa
+ streqb r0, [sp, #0x2]
+ beq _020E1DB0
+ cmp r0, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x3]
+_020E1DB0:
+ add r2, sp, #0x8
+ mov r1, #0x20
+ mov r0, #0xff
+_020E1DBC:
+ sub r1, r1, #0x1
+ cmp r1, #0x0
+ strb r0, [r2], #0x1
+ bgt _020E1DBC
+ mov r1, #0xc1
+ mov r0, #0xfe
+ strb r1, [sp, #0x9]
+ strb r0, [sp, #0xc]
+ b _020E1EF8
+_020E1DE0:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x3
+ moveq r0, #0xa
+ streqb r0, [sp, #0x2]
+ beq _020E1E00
+ cmp r0, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x3]
+_020E1E00:
+ ldrsb r2, [r12, #0x1]!
+ mov r1, #0x0
+ cmp r2, #0x5e
+ ldreqsb r2, [r12, #0x1]!
+ moveq r1, #0x1
+ cmp r2, #0x5d
+ bne _020E1EA8
+ ldrb r0, [sp, #0x13]
+ orr r0, r0, #0x20
+ strb r0, [sp, #0x13]
+ ldrsb r2, [r12, #0x1]!
+ b _020E1EA8
+_020E1E30:
+ add r0, sp, #0x0
+ and r3, r2, #0xff
+ add r6, r0, r3, asr #0x3
+ ldrb r5, [r6, #0x8]
+ and r3, r2, #0x7
+ mov r4, #0x1
+ orr r3, r5, r4, lsl r3
+ strb r3, [r6, #0x8]
+ ldrsb r3, [r12, #0x1]
+ cmp r3, #0x2d
+ bne _020E1EA4
+ ldrsb r7, [r12, #0x2]
+ cmp r7, #0x0
+ cmpne r7, #0x5d
+ beq _020E1EA4
+ add r2, r2, #0x1
+ cmp r2, r7
+ bgt _020E1E9C
+_020E1E78:
+ and r3, r2, #0xff
+ add r6, r0, r3, asr #0x3
+ ldrb r5, [r6, #0x8]
+ and r3, r2, #0x7
+ add r2, r2, #0x1
+ orr r3, r5, r4, lsl r3
+ strb r3, [r6, #0x8]
+ cmp r2, r7
+ ble _020E1E78
+_020E1E9C:
+ ldrsb r2, [r12, #0x3]!
+ b _020E1EA8
+_020E1EA4:
+ ldrsb r2, [r12, #0x1]!
+_020E1EA8:
+ cmp r2, #0x0
+ cmpne r2, #0x5d
+ bne _020E1E30
+ cmp r2, #0x0
+ moveq r0, #0xff
+ streqb r0, [sp, #0x3]
+ beq _020E1EF8
+ cmp r1, #0x0
+ beq _020E1EF8
+ add r2, sp, #0x8
+ mov r1, #0x20
+_020E1ED4:
+ ldrb r0, [r2, #0x0]
+ sub r1, r1, #0x1
+ cmp r1, #0x0
+ mvn r0, r0
+ strb r0, [r2], #0x1
+ bgt _020E1ED4
+ b _020E1EF8
+_020E1EF0:
+ mov r0, #0xff
+ strb r0, [sp, #0x3]
+_020E1EF8:
+ add r4, sp, #0x0
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add r0, r12, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r3-r7,pc}
+ .balign 4
+_020E1F20: .word 0x0210440C
+_020E1F24: .word 0x0210430C
+
+ arm_func_start __sformatter
+__sformatter: ; 0x020E1F28
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x88
+ ldrsb r5, [r2, #0x0]
+ str r2, [sp, #0xc]
+ mov r2, #0x0
+ mov r9, r0
+ mov r0, r2
+ str r2, [sp, #0x20]
+ mov r8, r1
+ str r3, [sp, #0x10]
+ str r0, [sp, #0x24]
+ cmp r5, #0x0
+ ldr r10, [sp, #0xb0]
+ str r0, [sp, #0x30]
+ mov r4, r2
+ str r0, [sp, #0x44]
+ str r0, [sp, #0x40]
+ beq _020E2C3C
+_020E1F70:
+ cmp r5, #0x0
+ mov r0, #0x1
+ blt _020E1F84
+ cmp r5, #0x80
+ movlt r0, #0x0
+_020E1F84:
+ cmp r0, #0x0
+ movne r0, #0x0
+ bne _020E1FA0
+ mov r1, r5, lsl #0x1
+ ldr r0, _020E2C74 ; =0x0210430C
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x100
+_020E1FA0:
+ cmp r0, #0x0
+ beq _020E2060
+ mov r2, #0x0
+ ldr r1, _020E2C74 ; =0x0210430C
+ mov r12, r2
+ mov r3, #0x1
+_020E1FB8:
+ ldr r0, [sp, #0xc]
+ ldrsb r5, [r0, #0x1]!
+ str r0, [sp, #0xc]
+ mov r0, r3
+ cmp r5, #0x0
+ blt _020E1FD8
+ cmp r5, #0x80
+ movlt r0, r2
+_020E1FD8:
+ cmp r0, #0x0
+ movne r0, r12
+ moveq r0, r5, lsl #0x1
+ ldreqh r0, [r1, r0]
+ andeq r0, r0, #0x100
+ cmp r0, #0x0
+ bne _020E1FB8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2C2C
+ ldr r5, _020E2C74 ; =0x0210430C
+ b _020E200C
+_020E2008:
+ add r4, r4, #0x1
+_020E200C:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ cmp r1, #0x0
+ blt _020E2034
+ cmp r1, #0x80
+ blt _020E203C
+_020E2034:
+ mov r0, #0x0
+ b _020E2048
+_020E203C:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r5, r0]
+ and r0, r0, #0x100
+_020E2048:
+ cmp r0, #0x0
+ bne _020E2008
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ b _020E2C2C
+_020E2060:
+ cmp r5, #0x25
+ beq _020E20D8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E20D8
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ and r0, r5, #0xff
+ ldrsb r1, [sp, #0x50]
+ cmp r0, r1
+ beq _020E20C4
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ b _020E2C2C
+_020E20C4:
+ ldr r0, [sp, #0xc]
+ add r4, r4, #0x1
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ b _020E2C2C
+_020E20D8:
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x60
+ bl parse_format_scanf
+ str r0, [sp, #0xc]
+ ldrb r0, [sp, #0x60]
+ cmp r0, #0x0
+ bne _020E2114
+ ldrb r0, [sp, #0x63]
+ cmp r0, #0x25
+ beq _020E2114
+ ldr r0, [sp, #0x10]
+ add r0, r0, #0x4
+ str r0, [sp, #0x10]
+ ldr r5, [r0, #-0x4]
+ b _020E2118
+_020E2114:
+ mov r5, #0x0
+_020E2118:
+ ldrb r0, [sp, #0x63]
+ cmp r0, #0x6e
+ beq _020E2158
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2158
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, #0x2
+ blx r9
+ cmp r0, #0x0
+ beq _020E2158
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+_020E2158:
+ ldrb r1, [sp, #0x63]
+ cmp r1, #0x5b
+ bgt _020E21B0
+ bge _020E2984
+ cmp r1, #0x47
+ bgt _020E21A4
+ subs r0, r1, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E2198
+_020E217C: ; 0x020E217C
+ b _020E2600
+_020E2180: ; 0x020E2180
+ b _020E2C3C
+_020E2184: ; 0x020E2184
+ b _020E2C3C
+_020E2188: ; 0x020E2188
+ b _020E2C3C
+_020E218C: ; 0x020E218C
+ b _020E2600
+_020E2190: ; 0x020E2190
+ b _020E2600
+_020E2194: ; 0x020E2194
+ b _020E2600
+_020E2198:
+ cmp r1, #0x25
+ beq _020E287C
+ b _020E2C3C
+_020E21A4:
+ cmp r1, #0x58
+ beq _020E243C
+ b _020E2C3C
+_020E21B0:
+ cmp r1, #0x78
+ bgt _020E2228
+ subs r0, r1, #0x63
+ addpl pc, pc, r0, lsl #0x2
+ b _020E221C
+_020E21C4: ; 0x020E21C4
+ b _020E26C4
+_020E21C8: ; 0x020E21C8
+ b _020E2230
+_020E21CC: ; 0x020E21CC
+ b _020E2600
+_020E21D0: ; 0x020E21D0
+ b _020E2600
+_020E21D4: ; 0x020E21D4
+ b _020E2600
+_020E21D8: ; 0x020E21D8
+ b _020E2C3C
+_020E21DC: ; 0x020E21DC
+ b _020E2238
+_020E21E0: ; 0x020E21E0
+ b _020E2C3C
+_020E21E4: ; 0x020E21E4
+ b _020E2C3C
+_020E21E8: ; 0x020E21E8
+ b _020E2C3C
+_020E21EC: ; 0x020E21EC
+ b _020E2C3C
+_020E21F0: ; 0x020E21F0
+ b _020E2BC8
+_020E21F4: ; 0x020E21F4
+ b _020E242C
+_020E21F8: ; 0x020E21F8
+ b _020E2C3C
+_020E21FC: ; 0x020E21FC
+ b _020E2C3C
+_020E2200: ; 0x020E2200
+ b _020E2C3C
+_020E2204: ; 0x020E2204
+ b _020E2908
+_020E2208: ; 0x020E2208
+ b _020E2C3C
+_020E220C: ; 0x020E220C
+ b _020E2434
+_020E2210: ; 0x020E2210
+ b _020E2C3C
+_020E2214: ; 0x020E2214
+ b _020E2C3C
+_020E2218: ; 0x020E2218
+ b _020E243C
+_020E221C:
+ cmp r1, #0x61
+ beq _020E2600
+ b _020E2C3C
+_020E2228:
+ cmp r1, #0xff
+ b _020E2C3C
+_020E2230:
+ mov r0, #0xa
+ b _020E223C
+_020E2238:
+ mov r0, #0x0
+_020E223C:
+ ldr r1, [sp, #0x30]
+ cmp r1, #0x0
+ beq _020E225C
+ mov r0, #0x0
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x24]
+ b _020E2364
+_020E225C:
+ ldrb r1, [sp, #0x62]
+ add r2, sp, #0x5c
+ cmp r1, #0x7
+ cmpne r1, #0x4
+ add r1, sp, #0x58
+ bne _020E22A0
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add r1, sp, #0x54
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x64]
+ mov r2, r9
+ mov r3, r8
+ bl __strtoull
+ str r0, [sp, #0x34]
+ str r1, [sp, #0x18]
+ b _020E22C4
+_020E22A0:
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add r1, sp, #0x54
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x64]
+ mov r2, r9
+ mov r3, r8
+ bl __strtoul
+ str r0, [sp, #0x3c]
+_020E22C4:
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ bne _020E22F4
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ mov r0, #0x0
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x24]
+ b _020E2364
+_020E22F4:
+ add r4, r4, r0
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ cmpne r0, #0x4
+ bne _020E2344
+ ldr r0, [sp, #0x58]
+ cmp r0, #0x0
+ beq _020E2330
+ ldr r0, [sp, #0x34]
+ rsbs r0, r0, #0x0
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x18]
+ rsc r0, r0, #0x0
+ str r0, [sp, #0x24]
+ b _020E2364
+_020E2330:
+ ldr r0, [sp, #0x34]
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x18]
+ str r0, [sp, #0x24]
+ b _020E2364
+_020E2344:
+ ldr r0, [sp, #0x58]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x3c]
+ streq r0, [sp, #0x1c]
+ beq _020E2364
+ ldr r0, [sp, #0x3c]
+ rsb r0, r0, #0x0
+ str r0, [sp, #0x1c]
+_020E2364:
+ cmp r5, #0x0
+ beq _020E241C
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ addls pc, pc, r0, lsl #0x2
+ b _020E2408
+_020E237C:
+ b _020E239C
+_020E2380:
+ b _020E23A8
+_020E2384:
+ b _020E23B4
+_020E2388:
+ b _020E23C0
+_020E238C:
+ b _020E23CC
+_020E2390:
+ b _020E23E0
+_020E2394:
+ b _020E23EC
+_020E2398:
+ b _020E23F8
+_020E239C:
+ ldr r0, [sp, #0x1c]
+ str r0, [r5, #0x0]
+ b _020E2408
+_020E23A8:
+ ldr r0, [sp, #0x1c]
+ strb r0, [r5, #0x0]
+ b _020E2408
+_020E23B4:
+ ldr r0, [sp, #0x1c]
+ strh r0, [r5, #0x0]
+ b _020E2408
+_020E23C0:
+ ldr r0, [sp, #0x1c]
+ str r0, [r5, #0x0]
+ b _020E2408
+_020E23CC:
+ ldr r0, [sp, #0x20]
+ str r0, [r5, #0x0]
+ ldr r0, [sp, #0x24]
+ str r0, [r5, #0x4]
+ b _020E2408
+_020E23E0:
+ ldr r0, [sp, #0x1c]
+ str r0, [r5, #0x0]
+ b _020E2408
+_020E23EC:
+ ldr r0, [sp, #0x1c]
+ str r0, [r5, #0x0]
+ b _020E2408
+_020E23F8:
+ ldr r0, [sp, #0x20]
+ str r0, [r5, #0x0]
+ ldr r0, [sp, #0x24]
+ str r0, [r5, #0x4]
+_020E2408:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x44]
+ addeq r0, r0, #0x1
+ streq r0, [sp, #0x44]
+_020E241C:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E242C:
+ mov r0, #0x8
+ b _020E2440
+_020E2434:
+ mov r0, #0xa
+ b _020E2440
+_020E243C:
+ mov r0, #0x10
+_020E2440:
+ ldr r1, [sp, #0x30]
+ cmp r1, #0x0
+ beq _020E2460
+ mov r0, #0x0
+ str r0, [sp, #0x3c]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x18]
+ b _020E2538
+_020E2460:
+ ldrb r1, [sp, #0x62]
+ add r2, sp, #0x5c
+ cmp r1, #0x7
+ cmpne r1, #0x4
+ add r1, sp, #0x58
+ bne _020E24A4
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add r1, sp, #0x54
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x64]
+ mov r2, r9
+ mov r3, r8
+ bl __strtoull
+ str r0, [sp, #0x34]
+ str r1, [sp, #0x18]
+ b _020E24C8
+_020E24A4:
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add r1, sp, #0x54
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x64]
+ mov r2, r9
+ mov r3, r8
+ bl __strtoul
+ str r0, [sp, #0x3c]
+_020E24C8:
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ bne _020E24F8
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ mov r0, #0x0
+ str r0, [sp, #0x3c]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x18]
+ b _020E2538
+_020E24F8:
+ add r4, r4, r0
+ ldr r0, [sp, #0x58]
+ cmp r0, #0x0
+ beq _020E2538
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ ldrne r0, [sp, #0x3c]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x3c]
+ bne _020E2538
+ ldr r0, [sp, #0x34]
+ rsbs r0, r0, #0x0
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x18]
+ rsc r0, r0, #0x0
+ str r0, [sp, #0x18]
+_020E2538:
+ cmp r5, #0x0
+ beq _020E25F0
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ addls pc, pc, r0, lsl #0x2
+ b _020E25DC
+_020E2550:
+ b _020E2570
+_020E2554:
+ b _020E257C
+_020E2558:
+ b _020E2588
+_020E255C:
+ b _020E2594
+_020E2560:
+ b _020E25A0
+_020E2564:
+ b _020E25B4
+_020E2568:
+ b _020E25C0
+_020E256C:
+ b _020E25CC
+_020E2570:
+ ldr r0, [sp, #0x3c]
+ str r0, [r5, #0x0]
+ b _020E25DC
+_020E257C:
+ ldr r0, [sp, #0x3c]
+ strb r0, [r5, #0x0]
+ b _020E25DC
+_020E2588:
+ ldr r0, [sp, #0x3c]
+ strh r0, [r5, #0x0]
+ b _020E25DC
+_020E2594:
+ ldr r0, [sp, #0x3c]
+ str r0, [r5, #0x0]
+ b _020E25DC
+_020E25A0:
+ ldr r0, [sp, #0x34]
+ str r0, [r5, #0x0]
+ ldr r0, [sp, #0x18]
+ str r0, [r5, #0x4]
+ b _020E25DC
+_020E25B4:
+ ldr r0, [sp, #0x3c]
+ str r0, [r5, #0x0]
+ b _020E25DC
+_020E25C0:
+ ldr r0, [sp, #0x3c]
+ str r0, [r5, #0x0]
+ b _020E25DC
+_020E25CC:
+ ldr r0, [sp, #0x34]
+ str r0, [r5, #0x0]
+ ldr r0, [sp, #0x18]
+ str r0, [r5, #0x4]
+_020E25DC:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x44]
+ addeq r0, r0, #0x1
+ streq r0, [sp, #0x44]
+_020E25F0:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E2600:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ beq _020E261C
+ ldr r0, _020E2C78 ; =0x02106B78
+ ldr r0, [r0, #0x0]
+ bl _f2d
+ b _020E2668
+_020E261C:
+ add r0, sp, #0x54
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x64]
+ mov r1, r9
+ mov r2, r8
+ add r3, sp, #0x5c
+ bl __strtold
+ ldr r2, [sp, #0x5c]
+ cmp r2, #0x0
+ bne _020E2664
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ ldr r0, _020E2C78 ; =0x02106B78
+ ldr r0, [r0, #0x0]
+ bl _f2d
+_020E2660: ; 0x020E2660
+ b _020E2668
+_020E2664:
+ add r4, r4, r2
+_020E2668:
+ cmp r5, #0x0
+ beq _020E26B4
+ ldrb r2, [sp, #0x62]
+ cmp r2, #0x0
+ beq _020E2690
+ cmp r2, #0x8
+ beq _020E269C
+ cmp r2, #0x9
+ stmeqia r5, {r0-r1}
+ b _020E26A0
+_020E2690:
+ bl _d2f
+_020E2694: ; 0x020E2694
+ str r0, [r5, #0x0]
+ b _020E26A0
+_020E269C:
+ stmia r5, {r0-r1}
+_020E26A0:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x44]
+ addeq r0, r0, #0x1
+ streq r0, [sp, #0x44]
+_020E26B4:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E26C4:
+ ldrb r0, [sp, #0x61]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0x64]
+ cmp r5, #0x0
+ beq _020E280C
+ cmp r10, #0x0
+ beq _020E26F8
+ ldr r0, [sp, #0x10]
+ mov r7, #0x1
+ add r0, r0, #0x4
+ ldr r11, [r0, #-0x4]
+ str r0, [sp, #0x10]
+_020E26F8:
+ ldr r0, [sp, #0x30]
+ mov r1, #0x0
+ cmp r0, #0x0
+ str r1, [sp, #0x5c]
+ beq _020E2718
+ cmp r11, #0x0
+ strneb r1, [r5, #0x0]
+ b _020E2C2C
+_020E2718:
+ mvn r0, #0x0
+ str r5, [sp, #0x2c]
+ str r0, [sp, #0x48]
+ b _020E2760
+_020E2728:
+ ldrb r0, [sp, #0x62]
+ strb r6, [sp, #0x50]
+ cmp r0, #0xa
+ ldrnesb r0, [sp, #0x50]
+ strneb r0, [r5], #0x1
+ bne _020E2754
+ mov r0, r5
+ add r1, sp, #0x50
+ mov r2, #0x1
+ bl mbtowc
+ add r5, r5, #0x1
+_020E2754:
+ ldr r0, [sp, #0x5c]
+ add r1, r0, #0x1
+ str r1, [sp, #0x5c]
+_020E2760:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E27B0
+ cmp r10, #0x0
+ beq _020E2790
+ cmp r11, r1
+ movhi r7, #0x1
+ movls r7, #0x0
+ cmp r7, #0x0
+ beq _020E27B0
+_020E2790:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ ldr r0, [sp, #0x48]
+ cmp r6, r0
+ bne _020E2728
+_020E27B0:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ beq _020E27D0
+ cmp r10, #0x0
+ beq _020E27F8
+ cmp r7, #0x0
+ bne _020E27F8
+_020E27D0:
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ cmp r11, #0x0
+ str r0, [sp, #0x30]
+ beq _020E2C2C
+ ldr r0, [sp, #0x2c]
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ b _020E2C2C
+_020E27F8:
+ add r4, r4, r0
+ ldr r0, [sp, #0x44]
+ add r0, r0, #0x1
+ str r0, [sp, #0x44]
+ b _020E286C
+_020E280C:
+ mov r0, #0x0
+ str r0, [sp, #0x5c]
+ mvn r5, #0x0
+ b _020E282C
+_020E281C:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x5c]
+_020E282C:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E285C
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ cmp r6, r5
+ bne _020E281C
+_020E285C:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ beq _020E2C3C
+_020E286C:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E287C:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2C2C
+ ldr r5, _020E2C74 ; =0x0210430C
+ b _020E2894
+_020E2890:
+ add r4, r4, #0x1
+_020E2894:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ cmp r1, #0x0
+ blt _020E28BC
+ cmp r1, #0x80
+ blt _020E28C4
+_020E28BC:
+ mov r0, #0x0
+ b _020E28D0
+_020E28C4:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r5, r0]
+ and r0, r0, #0x100
+_020E28D0:
+ cmp r0, #0x0
+ bne _020E2890
+ cmp r1, #0x25
+ beq _020E2900
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ b _020E2C2C
+_020E2900:
+ add r4, r4, #0x1
+ b _020E2C2C
+_020E2908:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2984
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ b _020E2944
+_020E292C:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ strb r0, [sp, #0x50]
+_020E2944:
+ ldrsb r1, [sp, #0x50]
+ cmp r1, #0x0
+ blt _020E2958
+ cmp r1, #0x80
+ blt _020E2960
+_020E2958:
+ mov r0, #0x0
+ b _020E2970
+_020E2960:
+ ldr r0, _020E2C74 ; =0x0210430C
+ mov r2, r1, lsl #0x1
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x100
+_020E2970:
+ cmp r0, #0x0
+ bne _020E292C
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+_020E2984:
+ cmp r5, #0x0
+ beq _020E2B00
+ cmp r10, #0x0
+ beq _020E29AC
+ ldr r0, [sp, #0x10]
+ mov r7, #0x1
+ add r0, r0, #0x4
+ str r0, [sp, #0x10]
+ ldr r0, [r0, #-0x4]
+ sub r11, r0, #0x1
+_020E29AC:
+ ldr r0, [sp, #0x30]
+ mov r1, #0x0
+ cmp r0, #0x0
+ str r1, [sp, #0x5c]
+ beq _020E29CC
+ cmp r11, #0x0
+ strneb r1, [r5, #0x0]
+ b _020E2C2C
+_020E29CC:
+ mvn r0, #0x0
+ str r5, [sp, #0x28]
+ str r0, [sp, #0x4c]
+ b _020E2A30
+_020E29DC:
+ strb r6, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ add r2, sp, #0x60
+ and r3, r1, #0xff
+ add r2, r2, r3, asr #0x3
+ ldrb r3, [r2, #0x8]
+ and r0, r1, #0x7
+ mov r2, #0x1
+ tst r3, r2, lsl r0
+ beq _020E2A80
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0xa
+ strneb r1, [r5], #0x1
+ bne _020E2A24
+ mov r0, r5
+ add r1, sp, #0x50
+ bl mbtowc
+ add r5, r5, #0x2
+_020E2A24:
+ ldr r0, [sp, #0x5c]
+ add r1, r0, #0x1
+ str r1, [sp, #0x5c]
+_020E2A30:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E2A80
+ cmp r10, #0x0
+ beq _020E2A60
+ cmp r11, r1
+ movcs r7, #0x1
+ movcc r7, #0x0
+ cmp r7, #0x0
+ beq _020E2A80
+_020E2A60:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ ldr r0, [sp, #0x4c]
+ cmp r6, r0
+ bne _020E29DC
+_020E2A80:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ beq _020E2AA0
+ cmp r10, #0x0
+ beq _020E2AD8
+ cmp r7, #0x0
+ bne _020E2AD8
+_020E2AA0:
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ cmp r11, #0x0
+ str r0, [sp, #0x30]
+ beq _020E2C2C
+ ldr r0, [sp, #0x28]
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ b _020E2C2C
+_020E2AD8:
+ add r4, r4, r0
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0xa
+ mov r0, #0x0
+ streqh r0, [r5, #0x0]
+ strneb r0, [r5, #0x0]
+ ldr r0, [sp, #0x44]
+ add r0, r0, #0x1
+ str r0, [sp, #0x44]
+ b _020E2B9C
+_020E2B00:
+ mov r0, #0x0
+ str r0, [sp, #0x5c]
+ mvn r5, #0x0
+ b _020E2B44
+_020E2B10:
+ strb r6, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ and r0, r1, #0x7
+ and r2, r1, #0xff
+ add r1, sp, #0x60
+ add r1, r1, r2, asr #0x3
+ ldrb r2, [r1, #0x8]
+ mov r1, #0x1
+ tst r2, r1, lsl r0
+ beq _020E2B74
+ ldr r0, [sp, #0x5c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x5c]
+_020E2B44:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E2B74
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ cmp r6, r5
+ bne _020E2B10
+_020E2B74:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ bne _020E2B98
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+ b _020E2C2C
+_020E2B98:
+ add r4, r4, r0
+_020E2B9C:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ blt _020E2BB8
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+_020E2BB8:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E2BC8:
+ cmp r5, #0x0
+ beq _020E2C2C
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ addls pc, pc, r0, lsl #0x2
+ b _020E2C2C
+_020E2BE0:
+ b _020E2C00
+_020E2BE4:
+ b _020E2C18
+_020E2BE8:
+ b _020E2C08
+_020E2BEC:
+ b _020E2C10
+_020E2BF0:
+ b _020E2C2C
+_020E2BF4:
+ b _020E2C2C
+_020E2BF8:
+ b _020E2C2C
+_020E2BFC:
+ b _020E2C20
+_020E2C00:
+ str r4, [r5, #0x0]
+ b _020E2C2C
+_020E2C08:
+ strh r4, [r5, #0x0]
+ b _020E2C2C
+_020E2C10:
+ str r4, [r5, #0x0]
+ b _020E2C2C
+_020E2C18:
+ strb r4, [r5, #0x0]
+ b _020E2C2C
+_020E2C20:
+ str r4, [r5, #0x0]
+ mov r0, r4, asr #0x1f
+ str r0, [r5, #0x4]
+_020E2C2C:
+ ldr r0, [sp, #0xc]
+ ldrsb r5, [r0, #0x0]
+ cmp r5, #0x0
+ bne _020E1F70
+_020E2C3C:
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, #0x2
+ blx r9
+ cmp r0, #0x0
+ beq _020E2C68
+ ldr r0, [sp, #0x40]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,pc}
+_020E2C68:
+ ldr r0, [sp, #0x44]
+ add sp, sp, #0x88
+ ldmia sp!, {r3-r11,pc}
+ .balign 4
+_020E2C74: .word 0x0210430C
+_020E2C78: .word 0x02106B78
+
+ arm_func_start __StringRead
+__StringRead: ; 0x020E2C7C
+ cmp r2, #0x0
+ beq _020E2C98
+ cmp r2, #0x1
+ beq _020E2CC8
+ cmp r2, #0x2
+ beq _020E2CF0
+ b _020E2CF8
+_020E2C98:
+ ldr r1, [r0, #0x0]
+ ldrsb r2, [r1, #0x0]
+ cmp r2, #0x0
+ bne _020E2CB8
+ mov r1, #0x1
+ str r1, [r0, #0x4]
+ sub r0, r1, #0x2
+ bx lr
+_020E2CB8:
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ and r0, r2, #0xff
+ bx lr
+_020E2CC8:
+ ldr r2, [r0, #0x4]
+ cmp r2, #0x0
+ movne r2, #0x0
+ strne r2, [r0, #0x4]
+ bne _020E2CE8
+ ldr r2, [r0, #0x0]
+ sub r2, r2, #0x1
+ str r2, [r0, #0x0]
+_020E2CE8:
+ mov r0, r1
+ bx lr
+_020E2CF0:
+ ldr r0, [r0, #0x4]
+ bx lr
+_020E2CF8:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start vsscanf
+vsscanf: ; 0x020E2D00
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ str r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r0, #0x0]
+ mov lr, r1
+ mov r3, r2
+ cmpne r0, #0x0
+ addeq sp, sp, #0xc
+ mvneq r0, #0x0
+ ldmeqia sp!, {pc}
+ mov r12, #0x0
+ str r12, [sp, #0x8]
+ ldr r0, _020E2D50 ; =__StringRead
+ add r1, sp, #0x4
+ mov r2, lr
+ str r12, [sp, #0x0]
+ bl __sformatter
+ add sp, sp, #0xc
+ ldmia sp!, {pc}
+ .balign 4
+_020E2D50: .word __StringRead
+
+ arm_func_start sscanf
+sscanf: ; 0x020E2D54
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r2, sp, #0xc
+ bic r2, r2, #0x3
+ ldr r1, [sp, #0xc]
+ add r2, r2, #0x4
+ bl vsscanf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start raise
+raise: ; 0x020E2D7C
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ cmp r5, #0x1
+ blt _020E2D94
+ cmp r5, #0x7
+ ble _020E2D9C
+_020E2D94:
+ mvn r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E2D9C:
+ ldr r0, _020E2E98 ; =0x021D7178
+ bl OS_TryLockMutex
+_020E2DA4: ; 0x020E2DA4
+ cmp r0, #0x0
+ bne _020E2DD0
+ ldr r0, _020E2E9C ; =0x021D3498
+ ldr r1, _020E2EA0 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E2EA4 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x1c]
+ str r2, [r0, #0x1c]
+ b _020E2E28
+_020E2DD0:
+ ldr r0, _020E2E9C ; =0x021D3498
+ ldr r1, _020E2EA0 ; =0x021D7088
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0x1c]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020E2E00
+ ldr r0, _020E2EA4 ; =0x021D70AC
+ ldr r1, [r0, #0x1c]
+ add r1, r1, #0x1
+ str r1, [r0, #0x1c]
+ b _020E2E28
+_020E2E00:
+ ldr r0, _020E2E98 ; =0x021D7178
+ bl OS_LockMutex
+ ldr r0, _020E2E9C ; =0x021D3498
+ ldr r1, _020E2EA0 ; =0x021D7088
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E2EA4 ; =0x021D70AC
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x1c]
+ str r2, [r0, #0x1c]
+_020E2E28:
+ ldr r1, _020E2EA8 ; =0x021D74AC
+ sub r2, r5, #0x1
+ ldr r4, [r1, r2, lsl #0x2]
+ cmp r4, #0x1
+ movne r0, #0x0
+ strne r0, [r1, r2, lsl #0x2]
+ ldr r0, _020E2EA4 ; =0x021D70AC
+ ldr r1, [r0, #0x1c]
+ subs r1, r1, #0x1
+ str r1, [r0, #0x1c]
+ bne _020E2E5C
+ ldr r0, _020E2E98 ; =0x021D7178
+ bl OS_UnlockMutex
+_020E2E5C:
+ cmp r4, #0x1
+ beq _020E2E70
+ cmp r4, #0x0
+ cmpeq r5, #0x1
+ bne _020E2E78
+_020E2E70:
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E2E78:
+ cmp r4, #0x0
+ bne _020E2E88
+ mov r0, #0x0
+ bl exit
+_020E2E88:
+ mov r0, r5
+ blx r4
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020E2E98: .word 0x021D7178
+_020E2E9C: .word 0x021D3498
+_020E2EA0: .word 0x021D7088
+_020E2EA4: .word 0x021D70AC
+_020E2EA8: .word 0x021D74AC
+
+ arm_func_start strlen
+strlen: ; 0x020E2EAC
+ mvn r2, #0x0
+_020E2EB0:
+ ldrsb r1, [r0], #0x1
+ add r2, r2, #0x1
+ cmp r1, #0x0
+ bne _020E2EB0
+ mov r0, r2
+ bx lr
+
+ arm_func_start strcpy
+strcpy: ; 0x020E2EC8
+ stmdb sp!, {r3-r5,lr}
+ and r4, r1, #0x3
+ and r3, r0, #0x3
+ mov r2, r0
+ cmp r3, r4
+ bne _020E2F64
+ cmp r4, #0x0
+ beq _020E2F20
+ ldrb r3, [r1, #0x0]
+ strb r3, [r0, #0x0]
+ cmp r3, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020E2EF8: ; 0x020E2EF8
+ rsbs r4, r4, #0x3
+ beq _020E2F18
+_020E2F00:
+ ldrb r3, [r1, #0x1]!
+ cmp r3, #0x0
+ strb r3, [r2, #0x1]!
+ ldmeqia sp!, {r3-r5,pc}
+_020E2F10: ; 0x020E2F10
+ subs r4, r4, #0x1
+ bne _020E2F00
+_020E2F18:
+ add r2, r2, #0x1
+ add r1, r1, #0x1
+_020E2F20:
+ ldr r5, [r1, #0x0]
+ ldr r3, _020E2F88 ; =0xFEFEFEFF
+ mvn r4, r5
+ add lr, r5, r3
+ ldr ip, _020E2F8C ; =0x80808080
+ and r4, lr, r4
+ tst r4, r12
+ bne _020E2F64
+ sub r2, r2, #0x4
+_020E2F44:
+ str r5, [r2, #0x4]!
+ ldr r5, [r1, #0x4]!
+ add r4, r5, r3
+ mvn lr, r5
+ and lr, r4, lr
+ tst lr, r12
+ beq _020E2F44
+ add r2, r2, #0x4
+_020E2F64:
+ ldrb r3, [r1, #0x0]
+ strb r3, [r2, #0x0]
+ cmp r3, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020E2F74:
+ ldrb r3, [r1, #0x1]!
+ cmp r3, #0x0
+ strb r3, [r2, #0x1]!
+ bne _020E2F74
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020E2F88: .word 0xFEFEFEFF
+_020E2F8C: .word 0x80808080
+
+ arm_func_start strncpy
+strncpy: ; 0x020E2F90
+ stmdb sp!, {r3,lr}
+ mov lr, r0
+ cmp r2, #0x0
+ ldmeqia sp!, {r3,pc}
+_020E2FA0:
+ ldrsb r3, [r1], #0x1
+ mov r12, lr
+ strb r3, [lr], #0x1
+ ldrsb r3, [r12, #0x0]
+ cmp r3, #0x0
+ bne _020E2FD4
+ subs r2, r2, #0x1
+ ldmeqia sp!, {r3,pc}
+_020E2FC0: ; 0x020E2FC0
+ mov r1, #0x0
+_020E2FC4:
+ strb r1, [lr], #0x1
+ subs r2, r2, #0x1
+ bne _020E2FC4
+ ldmia sp!, {r3,pc}
+_020E2FD4:
+ subs r2, r2, #0x1
+ bne _020E2FA0
+ ldmia sp!, {r3,pc}
+
+ arm_func_start strcat
+strcat: ; 0x020E2FE0
+ mov r3, r0
+_020E2FE4:
+ ldrsb r2, [r3], #0x1
+ cmp r2, #0x0
+ bne _020E2FE4
+ sub r3, r3, #0x1
+_020E2FF4:
+ ldrsb r2, [r1], #0x1
+ mov r12, r3
+ strb r2, [r3], #0x1
+ ldrsb r2, [r12, #0x0]
+ cmp r2, #0x0
+ bne _020E2FF4
+ bx lr
+
+ arm_func_start strncat
+strncat: ; 0x020E3010
+ stmdb sp!, {r3,lr}
+ mov r12, r0
+_020E3018:
+ ldrsb r3, [r12], #0x1
+ cmp r3, #0x0
+ bne _020E3018
+ cmp r2, #0x0
+ sub r12, r12, #0x1
+ beq _020E3054
+_020E3030:
+ ldrsb r3, [r1], #0x1
+ mov lr, r12
+ strb r3, [r12], #0x1
+ ldrsb r3, [lr, #0x0]
+ cmp r3, #0x0
+ subeq r12, r12, #0x1
+ beq _020E3054
+ subs r2, r2, #0x1
+ bne _020E3030
+_020E3054:
+ mov r1, #0x0
+ strb r1, [r12, #0x0]
+ ldmia sp!, {r3,pc}
+
+ arm_func_start strcmp
+strcmp: ; 0x020E3060
+ stmdb sp!, {r4,lr}
+ ldrb r2, [r0, #0x0]
+ ldrb r3, [r1, #0x0]
+ subs r3, r2, r3
+ movne r0, r3
+ ldmneia sp!, {r4,pc}
+_020E3078: ; 0x020E3078
+ and r4, r0, #0x3
+ and r3, r1, #0x3
+ cmp r3, r4
+ bne _020E313C
+ cmp r4, #0x0
+ beq _020E30D4
+ cmp r2, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020E309C: ; 0x020E309C
+ rsbs r4, r4, #0x3
+ beq _020E30CC
+_020E30A4:
+ ldrb r3, [r0, #0x1]!
+ ldrb r2, [r1, #0x1]!
+ subs r2, r3, r2
+ movne r0, r2
+ ldmneia sp!, {r4,pc}
+_020E30B8: ; 0x020E30B8
+ cmp r3, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020E30C4: ; 0x020E30C4
+ subs r4, r4, #0x1
+ bne _020E30A4
+_020E30CC:
+ add r0, r0, #0x1
+ add r1, r1, #0x1
+_020E30D4:
+ ldr r2, [r0, #0x0]
+ ldr r3, _020E316C ; =0xFEFEFEFF
+ mvn r4, r2
+ add lr, r2, r3
+ ldr ip, _020E3170 ; =0x80808080
+ and r4, lr, r4
+ tst r4, r12
+ ldr r4, [r1, #0x0]
+ bne _020E3128
+ cmp r2, r4
+ bne _020E311C
+_020E3100:
+ ldr r2, [r0, #0x4]!
+ ldr r4, [r1, #0x4]!
+ add lr, r2, r3
+ tst lr, r12
+ bne _020E3128
+ cmp r2, r4
+ beq _020E3100
+_020E311C:
+ sub r0, r0, #0x1
+ sub r1, r1, #0x1
+ b _020E313C
+_020E3128:
+ ldrb r2, [r0, #0x0]
+ ldrb r3, [r1, #0x0]
+ subs r3, r2, r3
+ movne r0, r3
+ ldmneia sp!, {r4,pc}
+_020E313C:
+ cmp r2, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020E3148:
+ ldrb r3, [r0, #0x1]!
+ ldrb r2, [r1, #0x1]!
+ subs r2, r3, r2
+ movne r0, r2
+ ldmneia sp!, {r4,pc}
+_020E315C: ; 0x020E315C
+ cmp r3, #0x0
+ bne _020E3148
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020E316C: .word 0xFEFEFEFF
+_020E3170: .word 0x80808080
+
+ arm_func_start strncmp
+strncmp: ; 0x020E3174
+ cmp r2, #0x0
+ beq _020E31A0
+_020E317C:
+ ldrb r12, [r1], #0x1
+ ldrb r3, [r0], #0x1
+ cmp r3, r12
+ subne r0, r3, r12
+ bxne lr
+ cmp r3, #0x0
+ beq _020E31A0
+ subs r2, r2, #0x1
+ bne _020E317C
+_020E31A0:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start strchr
+strchr: ; 0x020E31A8
+ ldrsb r2, [r0], #0x1
+ mov r1, r1, lsl #0x18
+ mov r1, r1, asr #0x18
+ cmp r2, #0x0
+ beq _020E31D4
+_020E31BC:
+ cmp r2, r1
+ subeq r0, r0, #0x1
+ bxeq lr
+ ldrsb r2, [r0], #0x1
+ cmp r2, #0x0
+ bne _020E31BC
+_020E31D4:
+ cmp r1, #0x0
+ movne r0, #0x0
+ subeq r0, r0, #0x1
+ bx lr
+
+ arm_func_start strspn
+strspn: ; 0x020E31E4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x20
+ add r12, sp, #0x0
+ mov r3, #0x8
+ mov r2, #0x0
+_020E31F8:
+ strb r2, [r12, #0x0]
+ strb r2, [r12, #0x1]
+ strb r2, [r12, #0x2]
+ strb r2, [r12, #0x3]
+ add r12, r12, #0x4
+ subs r3, r3, #0x1
+ bne _020E31F8
+ ldrb r3, [r1, #0x0]
+ add r4, r1, #0x1
+ cmp r3, #0x0
+ beq _020E3254
+ add lr, sp, #0x0
+ mov r2, #0x1
+_020E322C:
+ and r12, r3, #0xff
+ and r1, r3, #0x7
+ mov r1, r2, lsl r1
+ ldrb r3, [lr, r12, asr #0x3]
+ and r1, r1, #0xff
+ orr r1, r3, r1
+ strb r1, [lr, r12, asr #0x3]
+ ldrb r3, [r4], #0x1
+ cmp r3, #0x0
+ bne _020E322C
+_020E3254:
+ ldrb r1, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r1, #0x0
+ beq _020E3294
+ add r12, sp, #0x0
+ mov r2, #0x1
+_020E326C:
+ and r3, r1, #0xff
+ and r1, r1, #0x7
+ mov r1, r2, lsl r1
+ ldrb r3, [r12, r3, asr #0x3]
+ and r1, r1, #0xff
+ tst r3, r1
+ bne _020E3294
+ ldrb r1, [r4], #0x1
+ cmp r1, #0x0
+ bne _020E326C
+_020E3294:
+ sub r0, r4, r0
+ sub r0, r0, #0x1
+ add sp, sp, #0x20
+ ldmia sp!, {r4,pc}
+
+ arm_func_start strstr
+strstr: ; 0x020E32A4
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ ldrneb r2, [r1, #0x0]
+ cmpne r2, #0x0
+ ldmeqia sp!, {r4,pc}
+_020E32B8: ; 0x020E32B8
+ ldrb r3, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r3, #0x0
+ beq _020E3308
+_020E32C8:
+ cmp r3, r2
+ bne _020E32FC
+ mov lr, r4
+ add r12, r1, #0x1
+_020E32D8:
+ ldrb r3, [r12], #0x1
+ ldrb r0, [lr], #0x1
+ cmp r0, r3
+ bne _020E32F0
+ cmp r0, #0x0
+ bne _020E32D8
+_020E32F0:
+ cmp r3, #0x0
+ subeq r0, r4, #0x1
+ ldmeqia sp!, {r4,pc}
+_020E32FC:
+ ldrb r3, [r4], #0x1
+ cmp r3, #0x0
+ bne _020E32C8
+_020E3308:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start __strtold
+__strtold: ; 0x020E3310
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0xa8
+ ldr r4, [sp, #0xd0]
+ mov r10, #0x0
+ str r4, [sp, #0xd0]
+ str r0, [sp, #0x0]
+ add r6, sp, #0x80
+ mov r9, r1
+ mov r8, r2
+ str r3, [sp, #0x4]
+ mov r4, r10
+ str r10, [sp, #0x2c]
+ mov r5, #0x1
+ mov r0, #0x4
+_020E3348:
+ strh r10, [r6, #0x0]
+ strh r10, [r6, #0x2]
+ strh r10, [r6, #0x4]
+ strh r10, [r6, #0x6]
+ add r6, r6, #0x8
+ subs r0, r0, #0x1
+ bne _020E3348
+ mov r0, #0x0
+ str r0, [sp, #0x28]
+ strh r10, [r6, #0x0]
+ strh r10, [r6, #0x2]
+ ldr r2, [sp, #0x28]
+ ldr r1, [sp, #0xd0]
+ strh r10, [r6, #0x4]
+ str r2, [r1, #0x0]
+ mov r1, r2
+ mov r0, r8
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x1c]
+ str r1, [sp, #0x18]
+ str r1, [sp, #0x10]
+ str r1, [sp, #0xc]
+ str r1, [sp, #0x8]
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ ldr r7, _020E42F0 ; =0x02104439
+ add r0, sp, #0x4d
+ mov r6, #0x4
+_020E33C0:
+ ldrb r3, [r7, #0x0]
+ ldrb r2, [r7, #0x1]
+ add r7, r7, #0x2
+ strb r3, [r0, #0x0]
+ strb r2, [r0, #0x1]
+ add r0, r0, #0x2
+ subs r6, r6, #0x1
+ bne _020E33C0
+ ldrb r3, [r7, #0x0]
+ ldr r2, _020E42F4 ; =0x02104434
+ strb r3, [r0, #0x0]
+ ldrb r3, [r2, #0x1]
+ ldrb r0, [r2, #0x2]
+ ldrb r6, [r2, #0x0]
+ strb r3, [sp, #0x31]
+ strb r0, [sp, #0x32]
+ ldrb r3, [r2, #0x3]
+ ldrb r0, [r2, #0x4]
+ strb r6, [sp, #0x30]
+ strb r3, [sp, #0x33]
+ strb r0, [sp, #0x34]
+ b _020E4104
+_020E3418:
+ cmp r5, #0x100
+ bgt _020E3490
+ bge _020E3B98
+ cmp r5, #0x20
+ bgt _020E3474
+ bge _020E3A6C
+ cmp r5, #0x8
+ bgt _020E3468
+ cmp r5, #0x0
+ addge pc, pc, r5, lsl #0x2
+ b _020E4104
+_020E3444: ; 0x020E3444
+ b _020E4104
+_020E3448: ; 0x020E3448
+ b _020E34D4
+_020E344C: ; 0x020E344C
+ b _020E38B8
+_020E3450: ; 0x020E3450
+ b _020E4104
+_020E3454: ; 0x020E3454
+ b _020E3968
+_020E3458: ; 0x020E3458
+ b _020E4104
+_020E345C: ; 0x020E345C
+ b _020E4104
+_020E3460: ; 0x020E3460
+ b _020E4104
+_020E3464: ; 0x020E3464
+ b _020E3990
+_020E3468:
+ cmp r5, #0x10
+ beq _020E3A34
+ b _020E4104
+_020E3474:
+ cmp r5, #0x40
+ bgt _020E3484
+ beq _020E3AF8
+ b _020E4104
+_020E3484:
+ cmp r5, #0x80
+ beq _020E3B44
+ b _020E4104
+_020E3490:
+ cmp r5, #0x2000
+ bgt _020E34B8
+ bge _020E36EC
+ cmp r5, #0x200
+ bgt _020E34AC
+ beq _020E3BF8
+ b _020E4104
+_020E34AC:
+ cmp r5, #0x400
+ beq _020E3C20
+ b _020E4104
+_020E34B8:
+ cmp r5, #0x4000
+ bgt _020E34C8
+ beq _020E35F4
+ b _020E4104
+_020E34C8:
+ cmp r5, #0x8000
+ beq _020E3C98
+ b _020E4104
+_020E34D4:
+ cmp r1, #0x0
+ blt _020E34E4
+ cmp r1, #0x80
+ blt _020E34EC
+_020E34E4:
+ mov r0, #0x0
+ b _020E34FC
+_020E34EC:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x100
+_020E34FC:
+ cmp r0, #0x0
+ beq _020E3528
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ ldr r0, [sp, #0x2c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x2c]
+ b _020E4104
+_020E3528:
+ cmp r1, #0x0
+ blt _020E3538
+ cmp r1, #0x80
+ blt _020E3540
+_020E3538:
+ mov r0, r1
+ b _020E3548
+_020E3540:
+ ldr r0, _020E42FC ; =0x0210428C
+ ldrb r0, [r0, r1]
+_020E3548:
+ cmp r0, #0x49
+ bgt _020E3574
+ bge _020E35AC
+ cmp r0, #0x2d
+ bgt _020E35EC
+ cmp r0, #0x2b
+ blt _020E35EC
+ beq _020E3588
+ cmp r0, #0x2d
+ beq _020E3580
+ b _020E35EC
+_020E3574:
+ cmp r0, #0x4e
+ beq _020E35CC
+ b _020E35EC
+_020E3580:
+ mov r0, #0x1
+ str r0, [sp, #0x28]
+_020E3588:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ mov r0, #0x1
+ str r0, [sp, #0x18]
+ b _020E4104
+_020E35AC:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ mov r5, #0x4000
+ b _020E4104
+_020E35CC:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ mov r5, #0x2000
+ b _020E4104
+_020E35EC:
+ mov r5, #0x2
+ b _020E4104
+_020E35F4:
+ mov r5, #0x1
+ add r7, sp, #0x4d
+ add r0, sp, #0x76
+ mov r6, #0x4
+_020E3604:
+ ldrb r3, [r7, #0x0]
+ ldrb r2, [r7, #0x1]
+ add r7, r7, #0x2
+ strb r3, [r0, #0x0]
+ strb r2, [r0, #0x1]
+ add r0, r0, #0x2
+ subs r6, r6, #0x1
+ bne _020E3604
+ ldrb r2, [r7, #0x0]
+ add r6, sp, #0x77
+ ldr r7, _020E42FC ; =0x0210428C
+ strb r2, [r0, #0x0]
+ b _020E3658
+_020E3638:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r6, r6, #0x1
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E3658:
+ cmp r5, #0x8
+ bge _020E3688
+ cmp r1, #0x0
+ blt _020E3670
+ cmp r1, #0x80
+ blt _020E3678
+_020E3670:
+ mov r2, r1
+ b _020E367C
+_020E3678:
+ ldrb r2, [r7, r1]
+_020E367C:
+ ldrsb r0, [r6, #0x0]
+ cmp r0, r2
+ beq _020E3638
+_020E3688:
+ cmp r5, #0x3
+ cmpne r5, #0x8
+ bne _020E36E4
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ beq _020E36B8
+ ldr r1, _020E4300 ; =0x02106B74
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ bl _fsub
+ bl _f2d
+ b _020E36C4
+_020E36B8:
+ ldr r0, _020E4300 ; =0x02106B74
+ ldr r0, [r0, #0x0]
+ bl _f2d
+_020E36C4:
+ ldr r2, [sp, #0x2c]
+ add r3, r2, r5
+ ldr r2, [sp, #0x18]
+ add r3, r2, r3
+ ldr r2, [sp, #0x4]
+ add sp, sp, #0xa8
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E36E4:
+ mov r5, #0x1000
+ b _020E4104
+_020E36EC:
+ ldrb r3, [sp, #0x30]
+ ldrb r0, [sp, #0x32]
+ ldrb r2, [sp, #0x31]
+ strb r3, [sp, #0x40]
+ strb r0, [sp, #0x42]
+ ldrb r3, [sp, #0x33]
+ ldrb r0, [sp, #0x34]
+ strb r2, [sp, #0x41]
+ mov r5, #0x1
+ strb r0, [sp, #0x44]
+ mov r6, #0x0
+ add r2, sp, #0x56
+ strb r3, [sp, #0x43]
+ mov r0, #0x8
+_020E3724:
+ strb r6, [r2, #0x0]
+ strb r6, [r2, #0x1]
+ strb r6, [r2, #0x2]
+ strb r6, [r2, #0x3]
+ add r2, r2, #0x4
+ subs r0, r0, #0x1
+ bne _020E3724
+ add r7, sp, #0x41
+ b _020E3768
+_020E3748:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r7, r7, #0x1
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E3768:
+ cmp r5, #0x4
+ bge _020E379C
+ cmp r1, #0x0
+ blt _020E3780
+ cmp r1, #0x80
+ blt _020E3788
+_020E3780:
+ mov r2, r1
+ b _020E3790
+_020E3788:
+ ldr r0, _020E42FC ; =0x0210428C
+ ldrb r2, [r0, r1]
+_020E3790:
+ ldrsb r0, [r7, #0x0]
+ cmp r0, r2
+ beq _020E3748
+_020E379C:
+ sub r0, r5, #0x3
+ cmp r0, #0x1
+ bhi _020E38B0
+ cmp r5, #0x4
+ bne _020E3854
+ ldr r7, _020E42F8 ; =0x0210430C
+ b _020E37DC
+_020E37B8:
+ add r0, sp, #0x56
+ strb r1, [r0, r6]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r6, r6, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E37DC:
+ cmp r6, #0x20
+ bge _020E3844
+ cmp r1, #0x0
+ blt _020E37F4
+ cmp r1, #0x80
+ blt _020E37FC
+_020E37F4:
+ mov r0, #0x0
+ b _020E3808
+_020E37FC:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r7, r0]
+ and r0, r0, #0x8
+_020E3808:
+ cmp r0, #0x0
+ bne _020E37B8
+ cmp r1, #0x0
+ blt _020E3820
+ cmp r1, #0x80
+ blt _020E3828
+_020E3820:
+ mov r0, #0x0
+ b _020E3834
+_020E3828:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r7, r0]
+ and r0, r0, #0x1
+_020E3834:
+ cmp r0, #0x0
+ bne _020E37B8
+ cmp r1, #0x2e
+ beq _020E37B8
+_020E3844:
+ cmp r1, #0x29
+ movne r5, #0x1000
+ bne _020E4104
+ add r6, r6, #0x1
+_020E3854:
+ add r0, sp, #0x56
+ mov r1, #0x0
+ strb r1, [r0, r6]
+ ldr r1, [sp, #0x28]
+ cmp r1, #0x0
+ beq _020E3888
+ bl nan
+ mov r2, r0
+ mov r0, #0x0
+ mov r3, r1
+ mov r1, r0
+ bl _dsub
+_020E3884: ; 0x020E3884
+ b _020E388C
+_020E3888:
+ bl nan
+_020E388C:
+ ldr r2, [sp, #0x2c]
+ add r2, r2, r5
+ add r3, r6, r2
+ ldr r2, [sp, #0x18]
+ add r3, r2, r3
+ ldr r2, [sp, #0x4]
+ add sp, sp, #0xa8
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E38B0:
+ mov r5, #0x1000
+ b _020E4104
+_020E38B8:
+ cmp r1, #0x2e
+ bne _020E38E0
+ mov r5, #0x10
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E38E0:
+ cmp r1, #0x0
+ blt _020E38F0
+ cmp r1, #0x80
+ blt _020E38F8
+_020E38F0:
+ mov r0, #0x0
+ b _020E3908
+_020E38F8:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3908:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ beq _020E4104
+ cmp r1, #0x30
+ bne _020E3960
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ cmp r0, #0x0
+ mov r1, r0
+ blt _020E394C
+ cmp r0, #0x80
+ bge _020E394C
+ ldr r2, _020E42FC ; =0x0210428C
+ ldrb r0, [r2, r0]
+_020E394C:
+ cmp r0, #0x58
+ moveq r5, #0x8000
+ moveq r10, #0x1
+ movne r5, #0x4
+ b _020E4104
+_020E3960:
+ mov r5, #0x8
+ b _020E4104
+_020E3968:
+ cmp r1, #0x30
+ movne r5, #0x8
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3990:
+ cmp r1, #0x0
+ blt _020E39A0
+ cmp r1, #0x80
+ blt _020E39A8
+_020E39A0:
+ mov r0, #0x0
+ b _020E39B8
+_020E39A8:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E39B8:
+ cmp r0, #0x0
+ bne _020E39EC
+ cmp r1, #0x2e
+ movne r5, #0x40
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r5, #0x20
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E39EC:
+ ldrb r2, [sp, #0x84]
+ cmp r2, #0x14
+ ldrcs r0, [sp, #0x1c]
+ addcs r0, r0, #0x1
+ strcs r0, [sp, #0x1c]
+ bhs _020E3A18
+ add r0, r2, #0x1
+ strb r0, [sp, #0x84]
+ add r0, sp, #0x80
+ add r0, r0, r2
+ strb r1, [r0, #0x5]
+_020E3A18:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3A34:
+ cmp r1, #0x0
+ blt _020E3A44
+ cmp r1, #0x80
+ blt _020E3A4C
+_020E3A44:
+ mov r0, #0x0
+ b _020E3A5C
+_020E3A4C:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3A5C:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ movne r5, #0x20
+ b _020E4104
+_020E3A6C:
+ cmp r1, #0x0
+ blt _020E3A7C
+ cmp r1, #0x80
+ blt _020E3A84
+_020E3A7C:
+ mov r0, #0x0
+ b _020E3A94
+_020E3A84:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3A94:
+ cmp r0, #0x0
+ moveq r5, #0x40
+ beq _020E4104
+ ldrb r3, [sp, #0x84]
+ cmp r3, #0x14
+ bhs _020E3ADC
+ cmp r1, #0x30
+ cmpeq r3, #0x0
+ beq _020E3AD0
+ ldrb r2, [sp, #0x84]
+ add r0, sp, #0x80
+ add r0, r0, r3
+ add r2, r2, #0x1
+ strb r2, [sp, #0x84]
+ strb r1, [r0, #0x5]
+_020E3AD0:
+ ldr r0, [sp, #0x1c]
+ sub r0, r0, #0x1
+ str r0, [sp, #0x1c]
+_020E3ADC:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3AF8:
+ cmp r1, #0x0
+ blt _020E3B08
+ cmp r1, #0x80
+ blt _020E3B10
+_020E3B08:
+ mov r0, r1
+ b _020E3B18
+_020E3B10:
+ ldr r0, _020E42FC ; =0x0210428C
+ ldrb r0, [r0, r1]
+_020E3B18:
+ cmp r0, #0x45
+ movne r5, #0x800
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r5, #0x80
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3B44:
+ cmp r1, #0x2b
+ bne _020E3B68
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E3B90
+_020E3B68:
+ cmp r1, #0x2d
+ bne _020E3B90
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ mov r0, #0x1
+ str r0, [sp, #0x24]
+_020E3B90:
+ mov r5, #0x100
+ b _020E4104
+_020E3B98:
+ cmp r1, #0x0
+ blt _020E3BA8
+ cmp r1, #0x80
+ blt _020E3BB0
+_020E3BA8:
+ mov r0, #0x0
+ b _020E3BC0
+_020E3BB0:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3BC0:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ beq _020E4104
+ cmp r1, #0x30
+ movne r5, #0x400
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r5, #0x200
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3BF8:
+ cmp r1, #0x30
+ movne r5, #0x400
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3C20:
+ cmp r1, #0x0
+ blt _020E3C30
+ cmp r1, #0x80
+ blt _020E3C38
+_020E3C30:
+ mov r0, #0x0
+ b _020E3C48
+_020E3C38:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3C48:
+ cmp r0, #0x0
+ moveq r5, #0x800
+ beq _020E4104
+ ldr r0, [sp, #0x20]
+ sub r2, r1, #0x30
+ mov r1, #0xa
+ mla r0, r1, r0, r2
+ ldr r1, _020E4304 ; =0x00007FFF
+ str r0, [sp, #0x20]
+ cmp r0, r1
+ ldrgt r0, [sp, #0xd0]
+ movgt r1, #0x1
+ strgt r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3C98:
+ cmp r10, #0x20
+ bgt _020E3CE8
+ bge _020E3FBC
+ cmp r10, #0x8
+ bgt _020E3CDC
+ cmp r10, #0x0
+ addge pc, pc, r10, lsl #0x2
+ b _020E4104
+_020E3CB8: ; 0x020E3CB8
+ b _020E4104
+_020E3CBC: ; 0x020E3CBC
+ b _020E3D0C
+_020E3CC0: ; 0x020E3CC0
+ b _020E3D5C
+_020E3CC4: ; 0x020E3CC4
+ b _020E4104
+_020E3CC8: ; 0x020E3CC8
+ b _020E3D84
+_020E3CCC: ; 0x020E3CCC
+ b _020E4104
+_020E3CD0: ; 0x020E3CD0
+ b _020E4104
+_020E3CD4: ; 0x020E3CD4
+ b _020E4104
+_020E3CD8: ; 0x020E3CD8
+ b _020E3E94
+_020E3CDC:
+ cmp r10, #0x10
+ beq _020E3F70
+ b _020E4104
+_020E3CE8:
+ cmp r10, #0x80
+ bgt _020E3D00
+ bge _020E4064
+ cmp r10, #0x40
+ beq _020E4004
+ b _020E4104
+_020E3D00:
+ cmp r10, #0x100
+ beq _020E408C
+ b _020E4104
+_020E3D0C:
+ mov r1, #0x0
+ add r0, sp, #0x45
+ str r0, [sp, #0x14]
+ strb r1, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ strb r1, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ strb r1, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ strb r1, [r0, #0x6]
+ strb r1, [r0, #0x7]
+ mov r0, r8
+ mov r2, r1
+ str r1, [sp, #0x8]
+ mov r11, r1
+ mov r10, #0x2
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3D5C:
+ cmp r1, #0x30
+ movne r10, #0x4
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3D84:
+ cmp r1, #0x0
+ blt _020E3D94
+ cmp r1, #0x80
+ blt _020E3D9C
+_020E3D94:
+ mov r0, #0x0
+ b _020E3DAC
+_020E3D9C:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x400
+_020E3DAC:
+ cmp r0, #0x0
+ bne _020E3DE0
+ cmp r1, #0x2e
+ movne r10, #0x10
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r10, #0x8
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3DE0:
+ ldr r2, [sp, #0x8]
+ mov r0, #0xe
+ cmp r2, r0
+ bhs _020E3E78
+ mov r0, r2
+ add r0, r0, #0x1
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x14]
+ add r2, r11, r11, lsr #0x1f
+ cmp r1, #0x0
+ ldrb r0, [r0, r2, asr #0x1]
+ blt _020E3E20
+ cmp r1, #0x80
+ bge _020E3E20
+ ldr r2, _020E42FC ; =0x0210428C
+ ldrb r1, [r2, r1]
+_020E3E20:
+ cmp r1, #0x41
+ subge r1, r1, #0x37
+ sublt r1, r1, #0x30
+ mov r2, r11, lsr #0x1f
+ and r3, r1, #0xff
+ rsb r1, r2, r11, lsl #0x1f
+ adds r1, r2, r1, ror #0x1f
+ moveq r1, r3, lsl #0x4
+ add r2, r11, r11, lsr #0x1f
+ orrne r0, r0, r3
+ andeq r1, r1, #0xff
+ orreq r0, r0, r1
+ ldr r1, [sp, #0x14]
+ add r11, r11, #0x1
+ strb r0, [r1, r2, asr #0x1]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3E78:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3E94:
+ cmp r1, #0x0
+ blt _020E3EA4
+ cmp r1, #0x80
+ blt _020E3EAC
+_020E3EA4:
+ mov r0, #0x0
+ b _020E3EBC
+_020E3EAC:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x400
+_020E3EBC:
+ cmp r0, #0x0
+ moveq r10, #0x10
+ beq _020E4104
+ ldr r2, [sp, #0x8]
+ mov r0, #0xe
+ cmp r2, r0
+ bhs _020E3F54
+ ldr r0, [sp, #0x14]
+ add r2, r11, r11, lsr #0x1f
+ cmp r1, #0x0
+ ldrb r0, [r0, r2, asr #0x1]
+ blt _020E3EFC
+ cmp r1, #0x80
+ bge _020E3EFC
+ ldr r2, _020E42FC ; =0x0210428C
+ ldrb r1, [r2, r1]
+_020E3EFC:
+ cmp r1, #0x41
+ subge r1, r1, #0x37
+ sublt r1, r1, #0x30
+ mov r2, r11, lsr #0x1f
+ and r3, r1, #0xff
+ rsb r1, r2, r11, lsl #0x1f
+ adds r1, r2, r1, ror #0x1f
+ moveq r1, r3, lsl #0x4
+ add r2, r11, r11, lsr #0x1f
+ orrne r0, r0, r3
+ andeq r1, r1, #0xff
+ orreq r0, r0, r1
+ ldr r1, [sp, #0x14]
+ add r11, r11, #0x1
+ strb r0, [r1, r2, asr #0x1]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3F54:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3F70:
+ cmp r1, #0x0
+ blt _020E3F80
+ cmp r1, #0x80
+ blt _020E3F88
+_020E3F80:
+ mov r0, r1
+ b _020E3F90
+_020E3F88:
+ ldr r0, _020E42FC ; =0x0210428C
+ ldrb r0, [r0, r1]
+_020E3F90:
+ cmp r0, #0x50
+ movne r5, #0x800
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r10, #0x20
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3FBC:
+ cmp r1, #0x2d
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+ beq _020E3FE4
+ cmp r1, #0x2b
+ beq _020E3FE4
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ sub r4, r4, #0x1
+_020E3FE4:
+ mov r10, #0x40
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E4004:
+ cmp r1, #0x0
+ blt _020E4014
+ cmp r1, #0x80
+ blt _020E401C
+_020E4014:
+ mov r0, #0x0
+ b _020E402C
+_020E401C:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E402C:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ beq _020E4104
+ cmp r1, #0x30
+ movne r10, #0x100
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r10, #0x80
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E4064:
+ cmp r1, #0x30
+ movne r10, #0x100
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E408C:
+ cmp r1, #0x0
+ blt _020E409C
+ cmp r1, #0x80
+ blt _020E40A4
+_020E409C:
+ mov r0, #0x0
+ b _020E40B4
+_020E40A4:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =0x0210430C
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E40B4:
+ cmp r0, #0x0
+ moveq r5, #0x800
+ beq _020E4104
+ ldr r0, [sp, #0x10]
+ sub r2, r1, #0x30
+ mov r1, #0xa
+ mla r0, r1, r0, r2
+ str r0, [sp, #0x10]
+ ldr r1, _020E4304 ; =0x00007FFF
+ ldr r0, [sp, #0x20]
+ add r4, r4, #0x1
+ cmp r0, r1
+ ldrgt r0, [sp, #0xd0]
+ movgt r1, #0x1
+ strgt r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r1, r0
+_020E4104:
+ ldr r0, [sp, #0x0]
+ cmp r4, r0
+ bgt _020E4124
+ mvn r0, #0x0
+ cmp r1, r0
+ beq _020E4124
+ tst r5, #0x1800
+ beq _020E3418
+_020E4124:
+ cmp r5, #0x8000
+ beq _020E4140
+ ldr r0, _020E4308 ; =0x00000E2C
+ tst r5, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ b _020E4164
+_020E4140:
+ sub r0, r4, #0x1
+ cmp r0, #0x2
+ ble _020E4158
+ ldr r0, _020E430C ; =0x0000018E
+ tst r10, r0
+ bne _020E4160
+_020E4158:
+ mov r0, #0x1
+ b _020E4164
+_020E4160:
+ mov r0, #0x0
+_020E4164:
+ cmp r0, #0x0
+ movne r2, #0x0
+ ldrne r0, [sp, #0x4]
+ bne _020E4184
+ ldr r0, [sp, #0x2c]
+ sub r2, r4, #0x1
+ add r2, r2, r0
+ ldr r0, [sp, #0x4]
+_020E4184:
+ str r2, [r0, #0x0]
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ bne _020E4388
+ ldr r0, [sp, #0x24]
+ ldrb r2, [sp, #0x84]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x20]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x20]
+ add r0, sp, #0x85
+ add r1, r0, r2
+ b _020E41CC
+_020E41C0:
+ ldr r0, [sp, #0x1c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x1c]
+_020E41CC:
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ beq _020E41E4
+ ldrb r0, [r1, #-0x1]!
+ cmp r0, #0x30
+ beq _020E41C0
+_020E41E4:
+ add r0, r2, #0x1
+ strb r0, [sp, #0x84]
+ ands r2, r0, #0xff
+ bne _020E4208
+ add r1, r2, #0x1
+ strb r1, [sp, #0x84]
+ add r0, sp, #0x85
+ mov r1, #0x30
+ strb r1, [r0, r2]
+_020E4208:
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x1c]
+ mov r2, #0x8000
+ add r0, r1, r0
+ rsb r2, r2, #0x0
+ str r0, [sp, #0x20]
+ cmp r0, r2
+ blt _020E4230
+ cmp r0, r2, lsr #0x11
+ ble _020E423C
+_020E4230:
+ ldr r0, [sp, #0xd0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020E423C:
+ ldr r0, [sp, #0xd0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020E4298
+ ldr r0, [sp, #0x24]
+ cmp r0, #0x0
+ movne r0, #0x0
+ addne sp, sp, #0xa8
+ movne r1, r0
+ ldmneia sp!, {r3-r11,pc}
+_020E4264: ; 0x020E4264
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ ldreq r1, _020E4310 ; =0x02106B7C
+ addeq sp, sp, #0xa8
+ ldmeqia r1, {r0-r1}
+ ldmeqia sp!, {r3-r11,pc}
+_020E427C: ; 0x020E427C
+ ldr r1, _020E4310 ; =0x02106B7C
+ mov r0, #0x0
+ ldmia r1, {r2-r3}
+ mov r1, r0
+ bl _dsub
+ add sp, sp, #0xa8
+ ldmia sp!, {r3-r11,pc}
+_020E4298:
+ ldr r1, [sp, #0x20]
+ add r0, sp, #0x80
+ strh r1, [sp, #0x82]
+ bl __dec2num
+ mov r4, r0
+ mov r6, r1
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r6
+ bl _dneq
+ beq _020E4318
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x0
+ mov r3, #0x100000
+ bl _dls
+ bhs _020E4318
+ ldr r0, [sp, #0xd0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ b _020E4344
+ .balign 4
+_020E42F0: .word 0x02104439
+_020E42F4: .word 0x02104434
+_020E42F8: .word 0x0210430C
+_020E42FC: .word 0x0210428C
+_020E4300: .word 0x02106B74
+_020E4304: .word 0x00007FFF
+_020E4308: .word 0x00000E2C
+_020E430C: .word 0x0000018E
+_020E4310: .word 0x02106B7C
+_020E4314: .word 0x7FEFFFFF
+_020E4318:
+ ldr r3, _020E4314 ; =0x7FEFFFFF
+ mov r0, r4
+ mov r1, r6
+ mvn r2, #0x0
+ bl _dgr
+ bls _020E4344
+ ldr r0, [sp, #0xd0]
+ mov r2, #0x1
+ ldr r1, _020E4310 ; =0x02106B7C
+ str r2, [r0, #0x0]
+ ldmia r1, {r4,r6}
+_020E4344:
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ beq _020E4378
+ ldr r0, _020E4308 ; =0x00000E2C
+ tst r5, r0
+ beq _020E4378
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r6
+ bl _dsub
+ mov r4, r0
+ mov r6, r1
+_020E4378:
+ add sp, sp, #0xa8
+ mov r0, r4
+ mov r1, r6
+ ldmia sp!, {r3-r11,pc}
+_020E4388:
+ ldr r0, [sp, #0xc]
+ add r4, sp, #0x38
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x10]
+ ldrb r3, [sp, #0x45]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x10]
+ ldr r1, [sp, #0x10]
+ ldr r0, [sp, #0x8]
+ mov r2, #0x0
+ add r0, r1, r0, lsl #0x2
+ str r0, [sp, #0x10]
+ mov r1, #0x80
+ b _020E43D0
+_020E43C0:
+ ldr r0, [sp, #0x10]
+ add r2, r2, #0x1
+ sub r0, r0, #0x1
+ str r0, [sp, #0x10]
+_020E43D0:
+ cmp r2, #0x4
+ bhs _020E43E0
+ tst r3, r1, asr r2
+ beq _020E43C0
+_020E43E0:
+ adds r5, r2, #0x1
+ beq _020E442C
+ add r0, sp, #0x4c
+ add r3, sp, #0x45
+ str r0, [sp, #0x14]
+ mov r1, #0x0
+ cmp r0, r3
+ blo _020E442C
+ rsb r6, r5, #0x8
+_020E4404:
+ ldr r0, [sp, #0x14]
+ ldrb r0, [r0, #0x0]
+ orr r2, r1, r0, lsl r5
+ mov r1, r0, asr r6
+ ldr r0, [sp, #0x14]
+ and r1, r1, #0xff
+ strb r2, [r0], #-0x1
+ str r0, [sp, #0x14]
+ cmp r0, r3
+ bhs _020E4404
+_020E442C:
+ mov r2, #0x0
+ mov r6, r2
+ strb r2, [r4, #0x0]
+ strb r2, [r4, #0x1]
+ strb r2, [r4, #0x2]
+ strb r2, [r4, #0x3]
+ strb r2, [r4, #0x4]
+ strb r2, [r4, #0x5]
+ strb r2, [r4, #0x6]
+ strb r2, [r4, #0x7]
+ mov r3, #0xc
+ mov r7, #0x1
+ mov r0, #0xff
+ add r1, sp, #0x45
+_020E4464:
+ add r5, r2, #0x8
+ cmp r5, #0x34
+ ldrb r5, [r1, r6]
+ rsbhi r8, r2, #0x34
+ and r11, r3, #0x7
+ andhi r5, r5, r0, lsl r8
+ andhi r5, r5, #0xff
+ mov r8, r5, asr r11
+ and r9, r8, #0xff
+ ldrb r10, [r4, r7]
+ rsb r8, r11, #0x8
+ mov r5, r5, lsl r8
+ orr r9, r10, r9
+ strb r9, [r4, r7]
+ add r7, r7, #0x1
+ add r2, r2, #0x8
+ ldrb r8, [r4, r7]
+ and r5, r5, #0xff
+ cmp r2, #0x34
+ orr r5, r8, r5
+ strb r5, [r4, r7]
+ add r3, r3, #0x8
+ add r6, r6, #0x1
+ blo _020E4464
+ ldr r0, [sp, #0x10]
+ mov r1, #0x800
+ add r0, r0, #0xfe
+ add r2, r0, #0x300
+ rsb r1, r1, #0x0
+ tst r2, r1
+ beq _020E44FC
+ ldr r2, [sp, #0xd0]
+ mov r3, #0x1
+ mov r0, #0x0
+ add sp, sp, #0xa8
+ mov r1, r0
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E44FC:
+ ldrb r0, [r4, #0x1]
+ mov r2, r2, lsl #0x15
+ ldrb r1, [r4, #0x0]
+ orr r0, r0, r2, lsr #0x11
+ strb r0, [r4, #0x1]
+ ldr r0, [sp, #0x28]
+ orr r1, r1, r2, lsr #0x19
+ cmp r0, #0x0
+ andne r0, r1, #0xff
+ strb r1, [r4, #0x0]
+ orrne r0, r0, #0x80
+ strneb r0, [r4, #0x0]
+ mov r3, #0x0
+_020E4530:
+ rsb r1, r3, #0x7
+ ldrb r2, [r4, r3]
+ ldrb r0, [r4, r1]
+ strb r0, [r4, r3]
+ add r3, r3, #0x1
+ strb r2, [r4, r1]
+ cmp r3, #0x4
+ blt _020E4530
+ ldmia r4, {r0-r1}
+ add sp, sp, #0xa8
+ ldmia sp!, {r3-r11,pc}
+
+ arm_func_start strtold
+strtold: ; 0x020E455C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r7, r0
+ mov r0, #0x0
+ mov r6, r1
+ str r0, [sp, #0x8]
+ add r4, sp, #0xc
+ str r7, [sp, #0x4]
+ ldr r1, _020E4630 ; =__StringRead
+ add r2, sp, #0x4
+ add r3, sp, #0x10
+ sub r0, r0, #0x80000001
+ str r4, [sp, #0x0]
+ bl __strtold
+ mov r5, r1
+ mov r4, r0
+ cmp r6, #0x0
+ ldrne r0, [sp, #0x10]
+ mov r1, r5
+ addne r0, r7, r0
+ strne r0, [r6, #0x0]
+ mov r0, r4
+ bl fabs
+ ldr r2, [sp, #0xc]
+ mov r6, r0
+ mov r7, r1
+ cmp r2, #0x0
+ bne _020E4614
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r5
+ bl _dneq
+ beq _020E4620
+ mov r0, r6
+ mov r1, r7
+ mov r2, #0x0
+ mov r3, #0x100000
+ bl _dls
+ blo _020E4614
+ ldr r3, _020E4634 ; =0x7FEFFFFF
+ mov r0, r6
+ mov r1, r7
+ mvn r2, #0x0
+ bl _dgr
+ bls _020E4620
+_020E4614:
+ ldr r0, _020E4638 ; =0x021D74A8
+ mov r1, #0x22
+ str r1, [r0, #0x0]
+_020E4620:
+ mov r0, r4
+ mov r1, r5
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020E4630: .word __StringRead
+_020E4634: .word 0x7FEFFFFF
+_020E4638: .word 0x021D74A8
+
+ arm_func_start atod
+atod: ; 0x020E463C
+ ldr ip, _020E4648 ; =strtold
+ mov r1, #0x0
+ bx r12
+ .balign 4
+_020E4648: .word strtold
+
+ arm_func_start __strtoul
+__strtoul:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r4, [sp, #0x38]
+ movs r9, r0
+ ldr r0, [sp, #0x34]
+ str r4, [sp, #0x38]
+ mov r4, #0x0
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x38]
+ str r1, [sp, #0x0]
+ str r4, [r0, #0x0]
+ mov r0, r4
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x34]
+ mov r1, r4
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x30]
+ str r4, [sp, #0x8]
+ mov r8, r2
+ mov r7, r3
+ mov r5, r4
+ mov r10, r4
+ str r0, [sp, #0x30]
+ mov r4, #0x1
+ bmi _020E46CC
+ cmp r9, #0x1
+ beq _020E46CC
+ cmp r9, #0x24
+ bgt _020E46CC
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x1
+ bge _020E46D4
+_020E46CC:
+ mov r4, #0x40
+ b _020E46F0
+_020E46D4:
+ ldr r1, [sp, #0x8]
+ mov r0, r7
+ mov r3, r1
+ mov r2, r1
+ add r5, r3, #0x1
+ blx r8
+ mov r6, r0
+_020E46F0:
+ cmp r9, #0x0
+ beq _020E4708
+ mov r1, r9
+ mvn r0, #0x0
+ bl _u32_div_f
+ str r0, [sp, #0x4]
+_020E4708:
+ mvn r11, #0x0
+ b _020E49C8
+_020E4710:
+ cmp r4, #0x8
+ bgt _020E4748
+ cmp r4, #0x0
+ addge pc, pc, r4, lsl #0x2
+ b _020E49C8
+_020E4724: ; 0x020E4724
+ b _020E49C8
+_020E4728: ; 0x020E4728
+ b _020E4754
+_020E472C: ; 0x020E472C
+ b _020E4800
+_020E4730: ; 0x020E4730
+ b _020E49C8
+_020E4734: ; 0x020E4734
+ b _020E483C
+_020E4738: ; 0x020E4738
+ b _020E49C8
+_020E473C: ; 0x020E473C
+ b _020E49C8
+_020E4740: ; 0x020E4740
+ b _020E49C8
+_020E4744: ; 0x020E4744
+ b _020E487C
+_020E4748:
+ cmp r4, #0x10
+ beq _020E487C
+ b _020E49C8
+_020E4754:
+ cmp r6, #0x0
+ blt _020E4764
+ cmp r6, #0x80
+ blt _020E476C
+_020E4764:
+ mov r0, #0x0
+ b _020E477C
+_020E476C:
+ ldr r0, _020E4A2C ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x100
+_020E477C:
+ cmp r0, #0x0
+ beq _020E47A8
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ blx r8
+ mov r6, r0
+ ldr r0, [sp, #0x8]
+ add r0, r0, #0x1
+ str r0, [sp, #0x8]
+ b _020E49C8
+_020E47A8:
+ cmp r6, #0x2b
+ bne _020E47CC
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E47F8
+_020E47CC:
+ cmp r6, #0x2d
+ bne _020E47F8
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ ldr r0, [sp, #0x34]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020E47F8:
+ mov r4, #0x2
+ b _020E49C8
+_020E4800:
+ cmp r9, #0x0
+ cmpne r9, #0x10
+ bne _020E4834
+ cmp r6, #0x30
+ bne _020E4834
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ mov r4, #0x4
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E49C8
+_020E4834:
+ mov r4, #0x8
+ b _020E49C8
+_020E483C:
+ cmp r6, #0x58
+ cmpne r6, #0x78
+ bne _020E486C
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ mov r9, #0x10
+ mov r4, #0x8
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E49C8
+_020E486C:
+ cmp r9, #0x0
+ moveq r9, #0x8
+ mov r4, #0x10
+ b _020E49C8
+_020E487C:
+ ldr r0, [sp, #0x4]
+ cmp r9, #0x0
+ moveq r9, #0xa
+ cmp r0, #0x0
+ bne _020E48A0
+ mov r0, r11
+ mov r1, r9
+ bl _u32_div_f
+ str r0, [sp, #0x4]
+_020E48A0:
+ cmp r6, #0x0
+ blt _020E48B0
+ cmp r6, #0x80
+ blt _020E48B8
+_020E48B0:
+ mov r0, #0x0
+ b _020E48C8
+_020E48B8:
+ ldr r0, _020E4A2C ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x8
+_020E48C8:
+ cmp r0, #0x0
+ beq _020E48F0
+ sub r6, r6, #0x30
+ cmp r6, r9
+ blt _020E4978
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ add r6, r6, #0x30
+ b _020E49C8
+_020E48F0:
+ cmp r6, #0x0
+ blt _020E4900
+ cmp r6, #0x80
+ blt _020E4908
+_020E4900:
+ mov r0, #0x0
+ b _020E4918
+_020E4908:
+ ldr r0, _020E4A2C ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x1
+_020E4918:
+ cmp r0, #0x0
+ beq _020E494C
+ cmp r6, #0x0
+ blt _020E4930
+ cmp r6, #0x80
+ blt _020E4938
+_020E4930:
+ mov r0, r6
+ b _020E4940
+_020E4938:
+ ldr r0, _020E4A30 ; =0x0210428C
+ ldrb r0, [r0, r6]
+_020E4940:
+ sub r0, r0, #0x37
+ cmp r0, r9
+ blt _020E495C
+_020E494C:
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ b _020E49C8
+_020E495C:
+ cmp r6, #0x0
+ blt _020E4974
+ cmp r6, #0x80
+ bge _020E4974
+ ldr r0, _020E4A30 ; =0x0210428C
+ ldrb r6, [r0, r6]
+_020E4974:
+ sub r6, r6, #0x37
+_020E4978:
+ ldr r0, [sp, #0x4]
+ mov r4, #0x10
+ cmp r10, r0
+ ldrhi r0, [sp, #0x38]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mul r0, r10, r9
+ mov r10, r0
+ sub r0, r11, r0
+ cmp r6, r0
+ ldrhi r0, [sp, #0x38]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r10, r10, r6
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+_020E49C8:
+ ldr r0, [sp, #0x0]
+ cmp r5, r0
+ bgt _020E49E4
+ cmp r6, r11
+ beq _020E49E4
+ tst r4, #0x60
+ beq _020E4710
+_020E49E4:
+ tst r4, #0x34
+ bne _020E49FC
+ ldr r0, [sp, #0x30]
+ mov r10, #0x0
+ str r10, [r0, #0x0]
+ b _020E4A10
+_020E49FC:
+ ldr r0, [sp, #0x8]
+ sub r1, r5, #0x1
+ add r1, r1, r0
+ ldr r0, [sp, #0x30]
+ str r1, [r0, #0x0]
+_020E4A10:
+ mov r0, r7
+ mov r1, r6
+ mov r2, #0x1
+ blx r8
+ mov r0, r10
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020E4A2C: .word 0x0210430C
+_020E4A30: .word 0x0210428C
+
+ arm_func_start __strtoull
+__strtoull: ; 0x020E4A34
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ ldr r4, [sp, #0x48]
+ movs r9, r0
+ ldr r0, [sp, #0x44]
+ str r4, [sp, #0x48]
+ mov r4, #0x0
+ str r0, [sp, #0x44]
+ ldr r0, [sp, #0x48]
+ str r1, [sp, #0x0]
+ str r4, [r0, #0x0]
+ mov r0, r4
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x44]
+ mov r1, r4
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x40]
+ str r4, [sp, #0x14]
+ mov r8, r2
+ mov r7, r3
+ mov r5, r4
+ mov r10, r4
+ mov r11, r4
+ str r0, [sp, #0x40]
+ mov r4, #0x1
+ bmi _020E4ABC
+ cmp r9, #0x1
+ beq _020E4ABC
+ cmp r9, #0x24
+ bgt _020E4ABC
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x1
+ bge _020E4AC4
+_020E4ABC:
+ mov r4, #0x40
+ b _020E4ADC
+_020E4AC4:
+ ldr r1, [sp, #0x14]
+ mov r0, r7
+ mov r2, r1
+ add r5, r1, #0x1
+ blx r8
+ mov r6, r0
+_020E4ADC:
+ cmp r9, #0x0
+ beq _020E4B00
+ mvn r0, #0x0
+ mov r1, r0
+ mov r3, r9, asr #0x1f
+ mov r2, r9
+ bl _ll_udiv
+ str r0, [sp, #0xc]
+ str r1, [sp, #0x8]
+_020E4B00:
+ mvn r0, #0x0
+ str r0, [sp, #0x18]
+ b _020E4E08
+_020E4B0C:
+ cmp r4, #0x8
+ bgt _020E4B44
+ cmp r4, #0x0
+ addge pc, pc, r4, lsl #0x2
+ b _020E4E08
+_020E4B20: ; 0x020E4B20
+ b _020E4E08
+_020E4B24: ; 0x020E4B24
+ b _020E4B50
+_020E4B28: ; 0x020E4B28
+ b _020E4BFC
+_020E4B2C: ; 0x020E4B2C
+ b _020E4E08
+_020E4B30: ; 0x020E4B30
+ b _020E4C38
+_020E4B34: ; 0x020E4B34
+ b _020E4E08
+_020E4B38: ; 0x020E4B38
+ b _020E4E08
+_020E4B3C: ; 0x020E4B3C
+ b _020E4E08
+_020E4B40: ; 0x020E4B40
+ b _020E4C78
+_020E4B44:
+ cmp r4, #0x10
+ beq _020E4C78
+ b _020E4E08
+_020E4B50:
+ cmp r6, #0x0
+ blt _020E4B60
+ cmp r6, #0x80
+ blt _020E4B68
+_020E4B60:
+ mov r0, #0x0
+ b _020E4B78
+_020E4B68:
+ ldr r0, _020E4E78 ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x100
+_020E4B78:
+ cmp r0, #0x0
+ beq _020E4BA4
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ blx r8
+ mov r6, r0
+ ldr r0, [sp, #0x14]
+ add r0, r0, #0x1
+ str r0, [sp, #0x14]
+ b _020E4E08
+_020E4BA4:
+ cmp r6, #0x2b
+ bne _020E4BC8
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E4BF4
+_020E4BC8:
+ cmp r6, #0x2d
+ bne _020E4BF4
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ ldr r0, [sp, #0x44]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020E4BF4:
+ mov r4, #0x2
+ b _020E4E08
+_020E4BFC:
+ cmp r9, #0x0
+ cmpne r9, #0x10
+ bne _020E4C30
+ cmp r6, #0x30
+ bne _020E4C30
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ mov r4, #0x4
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E4E08
+_020E4C30:
+ mov r4, #0x8
+ b _020E4E08
+_020E4C38:
+ cmp r6, #0x58
+ cmpne r6, #0x78
+ bne _020E4C68
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ mov r9, #0x10
+ mov r4, #0x8
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+ b _020E4E08
+_020E4C68:
+ cmp r9, #0x0
+ moveq r9, #0x8
+ mov r4, #0x10
+ b _020E4E08
+_020E4C78:
+ ldr r1, [sp, #0x8]
+ mov r0, #0x0
+ cmp r9, #0x0
+ moveq r9, #0xa
+ cmp r1, r0
+ ldr r1, [sp, #0xc]
+ cmpeq r1, r0
+ bne _020E4CB4
+ ldr r0, [sp, #0x18]
+ mov r3, r9, asr #0x1f
+ mov r1, r0
+ mov r2, r9
+ bl _ll_udiv
+ str r0, [sp, #0xc]
+ str r1, [sp, #0x8]
+_020E4CB4:
+ cmp r6, #0x0
+ blt _020E4CC4
+ cmp r6, #0x80
+ blt _020E4CCC
+_020E4CC4:
+ mov r0, #0x0
+ b _020E4CDC
+_020E4CCC:
+ ldr r0, _020E4E78 ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x8
+_020E4CDC:
+ cmp r0, #0x0
+ beq _020E4D04
+ sub r6, r6, #0x30
+ cmp r6, r9
+ blt _020E4D8C
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ add r6, r6, #0x30
+ b _020E4E08
+_020E4D04:
+ cmp r6, #0x0
+ blt _020E4D14
+ cmp r6, #0x80
+ blt _020E4D1C
+_020E4D14:
+ mov r0, #0x0
+ b _020E4D2C
+_020E4D1C:
+ ldr r0, _020E4E78 ; =0x0210430C
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x1
+_020E4D2C:
+ cmp r0, #0x0
+ beq _020E4D60
+ cmp r6, #0x0
+ blt _020E4D44
+ cmp r6, #0x80
+ blt _020E4D4C
+_020E4D44:
+ mov r0, r6
+ b _020E4D54
+_020E4D4C:
+ ldr r0, _020E4E7C ; =0x0210428C
+ ldrb r0, [r0, r6]
+_020E4D54:
+ sub r0, r0, #0x37
+ cmp r0, r9
+ blt _020E4D70
+_020E4D60:
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ b _020E4E08
+_020E4D70:
+ cmp r6, #0x0
+ blt _020E4D88
+ cmp r6, #0x80
+ bge _020E4D88
+ ldr r0, _020E4E7C ; =0x0210428C
+ ldrb r6, [r0, r6]
+_020E4D88:
+ sub r6, r6, #0x37
+_020E4D8C:
+ ldr r0, [sp, #0x8]
+ umull r2, r3, r10, r9
+ cmp r11, r0
+ ldr r0, [sp, #0xc]
+ mov r4, #0x10
+ cmpeq r10, r0
+ ldrhi r0, [sp, #0x48]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mov r1, r9, asr #0x1f
+ mla r3, r10, r1, r3
+ mla r3, r11, r9, r3
+ ldr r1, [sp, #0x18]
+ mov r10, r2
+ subs r2, r1, r2
+ mov r0, r6, asr #0x1f
+ sbc r1, r1, r3
+ cmp r0, r1
+ cmpeq r6, r2
+ ldrhi r1, [sp, #0x48]
+ movhi r2, #0x1
+ strhi r2, [r1, #0x0]
+ mov r1, #0x0
+ mov r11, r3
+ adds r10, r10, r6
+ adc r11, r11, r0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+_020E4E08:
+ ldr r0, [sp, #0x0]
+ cmp r5, r0
+ bgt _020E4E28
+ ldr r0, [sp, #0x18]
+ cmp r6, r0
+ beq _020E4E28
+ tst r4, #0x60
+ beq _020E4B0C
+_020E4E28:
+ tst r4, #0x34
+ bne _020E4E44
+ ldr r0, [sp, #0x40]
+ mov r10, #0x0
+ mov r11, r10
+ str r10, [r0, #0x0]
+ b _020E4E58
+_020E4E44:
+ ldr r0, [sp, #0x14]
+ sub r1, r5, #0x1
+ add r1, r1, r0
+ ldr r0, [sp, #0x40]
+ str r1, [r0, #0x0]
+_020E4E58:
+ mov r0, r7
+ mov r1, r6
+ mov r2, #0x1
+ blx r8
+ mov r0, r10
+ mov r1, r11
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020E4E78: .word 0x0210430C
+_020E4E7C: .word 0x0210428C
+
+ arm_func_start strtoul
+strtoul: ; 0x020E4E80
+ stmdb sp!, {r3-r5,lr}
+ sub sp, sp, #0x20
+ mov r5, r0
+ mov lr, #0x0
+ mov r0, r2
+ mov r4, r1
+ add r2, sp, #0x1c
+ str r5, [sp, #0xc]
+ str lr, [sp, #0x10]
+ str r2, [sp, #0x0]
+ add r1, sp, #0x18
+ str r1, [sp, #0x4]
+ add r12, sp, #0x14
+ ldr r2, _020E4F10 ; =__StringRead
+ add r3, sp, #0xc
+ sub r1, lr, #0x80000001
+ str r12, [sp, #0x8]
+ bl __strtoul
+_020E4EC8: ; 0x020E4EC8
+ cmp r4, #0x0
+ ldrne r1, [sp, #0x1c]
+ addne r1, r5, r1
+ strne r1, [r4, #0x0]
+ ldr r1, [sp, #0x14]
+ cmp r1, #0x0
+ beq _020E4EFC
+ ldr r0, _020E4F14 ; =0x021D74A8
+ mov r1, #0x22
+ str r1, [r0, #0x0]
+ add sp, sp, #0x20
+ mvn r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E4EFC:
+ ldr r1, [sp, #0x18]
+ cmp r1, #0x0
+ rsbne r0, r0, #0x0
+ add sp, sp, #0x20
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020E4F10: .word __StringRead
+_020E4F14: .word 0x021D74A8
+
+ arm_func_start strtold2
+strtold2: ; 0x020E4F18
+ stmdb sp!, {r3-r5,lr}
+ sub sp, sp, #0x20
+ mov r5, r0
+ mov lr, #0x0
+ mov r0, r2
+ mov r4, r1
+ add r2, sp, #0x1c
+ str r5, [sp, #0xc]
+ str lr, [sp, #0x10]
+ str r2, [sp, #0x0]
+ add r1, sp, #0x18
+ str r1, [sp, #0x4]
+ add r12, sp, #0x14
+ ldr r2, _020E4FD8 ; =__StringRead
+ add r3, sp, #0xc
+ sub r1, lr, #0x80000001
+ str r12, [sp, #0x8]
+ bl __strtoul
+_020E4F60: ; 0x020E4F60
+ cmp r4, #0x0
+ ldrne r1, [sp, #0x1c]
+ addne r1, r5, r1
+ strne r1, [r4, #0x0]
+ ldr r1, [sp, #0x14]
+ cmp r1, #0x0
+ bne _020E4FA4
+ ldr r2, [sp, #0x18]
+ cmp r2, #0x0
+ bne _020E4F94
+ mvn r1, #0x80000000
+ cmp r0, r1
+ bhi _020E4FA4
+_020E4F94:
+ cmp r2, #0x0
+ beq _020E4FC8
+ cmp r0, #0x80000000
+ bls _020E4FC8
+_020E4FA4:
+ ldr r0, [sp, #0x18]
+ ldr r1, _020E4FDC ; =0x021D74A8
+ mov r2, #0x22
+ cmp r0, #0x0
+ movne r0, #0x80000000
+ str r2, [r1, #0x0]
+ add sp, sp, #0x20
+ mvneq r0, #0x80000000
+ ldmia sp!, {r3-r5,pc}
+_020E4FC8:
+ cmp r2, #0x0
+ rsbne r0, r0, #0x0
+ add sp, sp, #0x20
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020E4FD8: .word __StringRead
+_020E4FDC: .word 0x021D74A8
+
+ arm_func_start atol
+atol: ; 0x020E4FE0
+ ldr ip, _020E4FF0 ; =strtold
+ mov r1, #0x0
+ mov r2, #0xa
+ bx r12
+ .balign 4
+_020E4FF0: .word strtold2
+
+ arm_func_start fwide
+fwide:
+ cmp r0, #0x0
+ beq _020E500C
+ ldr r3, [r0, #0x4]
+ mov r2, r3, lsl #0x16
+ movs r2, r2, lsr #0x1d
+ bne _020E5014
+_020E500C:
+ mov r0, #0x0
+ bx lr
+_020E5014:
+ mov r2, r3, lsl #0x14
+ movs r2, r2, lsr #0x1e
+ beq _020E5034
+ cmp r2, #0x1
+ beq _020E505C
+ cmp r2, #0x2
+ moveq r1, #0x1
+ b _020E5060
+_020E5034:
+ cmp r1, #0x0
+ ble _020E504C
+ bic r2, r3, #0xc00
+ orr r2, r2, #0x800
+ str r2, [r0, #0x4]
+ b _020E5060
+_020E504C:
+ biclt r2, r3, #0xc00
+ orrlt r2, r2, #0x400
+ strlt r2, [r0, #0x4]
+ b _020E5060
+_020E505C:
+ mvn r1, #0x0
+_020E5060:
+ mov r0, r1
+ bx lr
+
+ arm_func_start wmemcpy
+wmemcpy: ; 0x020E5068
+ ldr ip, _020E5074 ; =memcpy
+ mov r2, r2, lsl #0x1
+ bx r12
+ .balign 4
+_020E5074: .word memcpy
+
+ arm_func_start wmemchr
+wmemchr:
+ cmp r2, #0x0
+ beq _020E5098
+_020E5080:
+ ldrh r3, [r0, #0x0]
+ cmp r3, r1
+ bxeq lr
+ add r0, r0, #0x2
+ subs r2, r2, #0x1
+ bne _020E5080
+_020E5098:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start parse_format_wprintf
+parse_format_wprintf: ; 0x020E50A0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldrh r3, [r0, #0x2]
+ mov r4, #0x0
+ mov r5, #0x1
+ mov lr, r2
+ strb r5, [sp, #0x0]
+ strb r4, [sp, #0x1]
+ strb r4, [sp, #0x2]
+ strb r4, [sp, #0x3]
+ strb r4, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r4, [sp, #0xc]
+ cmp r3, #0x25
+ add r12, r0, #0x2
+ bne _020E50FC
+ add r0, sp, #0x0
+ strh r3, [sp, #0x6]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x2
+ ldmia sp!, {r4-r8,pc}
+_020E50FC:
+ mov r2, #0x2
+ mov r0, r4
+ mov r5, r2
+ mov r6, r4
+ mov r7, #0x1
+_020E5110:
+ mov r8, r7
+ cmp r3, #0x2b
+ bgt _020E5140
+ bge _020E5168
+ cmp r3, #0x23
+ bgt _020E5198
+ cmp r3, #0x20
+ blt _020E5198
+ beq _020E5170
+ cmp r3, #0x23
+ beq _020E5180
+ b _020E5198
+_020E5140:
+ cmp r3, #0x30
+ bgt _020E5198
+ cmp r3, #0x2d
+ blt _020E5198
+ beq _020E5160
+ cmp r3, #0x30
+ beq _020E5188
+ b _020E5198
+_020E5160:
+ strb r6, [sp, #0x0]
+ b _020E519C
+_020E5168:
+ strb r7, [sp, #0x1]
+ b _020E519C
+_020E5170:
+ ldrb r4, [sp, #0x1]
+ cmp r4, #0x1
+ strneb r5, [sp, #0x1]
+ b _020E519C
+_020E5180:
+ strb r7, [sp, #0x3]
+ b _020E519C
+_020E5188:
+ ldrb r4, [sp, #0x0]
+ cmp r4, #0x0
+ strneb r2, [sp, #0x0]
+ b _020E519C
+_020E5198:
+ mov r8, r0
+_020E519C:
+ cmp r8, #0x0
+ ldrneh r3, [r12, #0x2]!
+ bne _020E5110
+ cmp r3, #0x2a
+ bne _020E51E4
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ str r0, [sp, #0x8]
+ cmp r0, #0x0
+ bge _020E51DC
+ rsb r0, r0, #0x0
+ mov r2, #0x0
+ strb r2, [sp, #0x0]
+ str r0, [sp, #0x8]
+_020E51DC:
+ ldrh r3, [r12, #0x2]!
+ b _020E5228
+_020E51E4:
+ mov r2, #0x0
+ ldr r5, _020E560C ; =0x02104544
+ mov r0, #0xa
+ b _020E5208
+_020E51F4:
+ ldr r4, [sp, #0x8]
+ sub r3, r3, #0x30
+ mla r6, r4, r0, r3
+ ldrh r3, [r12, #0x2]!
+ str r6, [sp, #0x8]
+_020E5208:
+ cmp r3, #0x80
+ movcs r4, r2
+ bhs _020E5220
+ mov r4, r3, lsl #0x1
+ ldrh r4, [r5, r4]
+ and r4, r4, #0x8
+_020E5220:
+ cmp r4, #0x0
+ bne _020E51F4
+_020E5228:
+ ldr r2, [sp, #0x8]
+ ldr r0, _020E5610 ; =0x000001FD
+ cmp r2, r0
+ ble _020E5258
+ ldr r1, _020E5614 ; =0x0000FFFF
+ add r0, sp, #0x0
+ strh r1, [sp, #0x6]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x2
+ ldmia sp!, {r4-r8,pc}
+_020E5258:
+ cmp r3, #0x2e
+ bne _020E52E0
+ ldrh r3, [r12, #0x2]!
+ mov r0, #0x1
+ strb r0, [sp, #0x2]
+ cmp r3, #0x2a
+ bne _020E529C
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ ldrh r3, [r12, #0x2]!
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ movlt r0, #0x0
+ strltb r0, [sp, #0x2]
+ b _020E52E0
+_020E529C:
+ mov r1, #0x0
+ ldr r4, _020E560C ; =0x02104544
+ mov r0, #0xa
+ b _020E52C0
+_020E52AC:
+ ldr r2, [sp, #0xc]
+ sub r3, r3, #0x30
+ mla r5, r2, r0, r3
+ ldrh r3, [r12, #0x2]!
+ str r5, [sp, #0xc]
+_020E52C0:
+ cmp r3, #0x80
+ movcs r2, r1
+ bhs _020E52D8
+ mov r2, r3, lsl #0x1
+ ldrh r2, [r4, r2]
+ and r2, r2, #0x8
+_020E52D8:
+ cmp r2, #0x0
+ bne _020E52AC
+_020E52E0:
+ cmp r3, #0x6c
+ mov r0, #0x1
+ bgt _020E5318
+ cmp r3, #0x68
+ blt _020E530C
+ beq _020E5334
+ cmp r3, #0x6a
+ beq _020E5380
+ cmp r3, #0x6c
+ beq _020E5350
+ b _020E53A4
+_020E530C:
+ cmp r3, #0x4c
+ beq _020E5374
+ b _020E53A4
+_020E5318:
+ cmp r3, #0x74
+ bgt _020E5328
+ beq _020E538C
+ b _020E53A4
+_020E5328:
+ cmp r3, #0x7a
+ beq _020E5398
+ b _020E53A4
+_020E5334:
+ ldrh r1, [r12, #0x2]
+ mov r2, #0x2
+ strb r2, [sp, #0x4]
+ cmp r1, #0x68
+ streqb r0, [sp, #0x4]
+ ldreqh r3, [r12, #0x2]!
+ b _020E53A8
+_020E5350:
+ ldrh r1, [r12, #0x2]
+ mov r2, #0x3
+ strb r2, [sp, #0x4]
+ cmp r1, #0x6c
+ bne _020E53A8
+ mov r1, #0x4
+ strb r1, [sp, #0x4]
+ ldrh r3, [r12, #0x2]!
+ b _020E53A8
+_020E5374:
+ mov r1, #0x9
+ strb r1, [sp, #0x4]
+ b _020E53A8
+_020E5380:
+ mov r1, #0x6
+ strb r1, [sp, #0x4]
+ b _020E53A8
+_020E538C:
+ mov r1, #0x8
+ strb r1, [sp, #0x4]
+ b _020E53A8
+_020E5398:
+ mov r1, #0x7
+ strb r1, [sp, #0x4]
+ b _020E53A8
+_020E53A4:
+ mov r0, #0x0
+_020E53A8:
+ cmp r0, #0x0
+ ldrneh r3, [r12, #0x2]!
+ strh r3, [sp, #0x6]
+ cmp r3, #0x61
+ bgt _020E53FC
+ bge _020E54E0
+ cmp r3, #0x47
+ bgt _020E53F0
+ subs r0, r3, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E55EC
+_020E53D4: ; 0x020E53D4
+ b _020E54E0
+_020E53D8: ; 0x020E53D8
+ b _020E55EC
+_020E53DC: ; 0x020E53DC
+ b _020E55EC
+_020E53E0: ; 0x020E53E0
+ b _020E55EC
+_020E53E4: ; 0x020E53E4
+ b _020E5528
+_020E53E8: ; 0x020E53E8
+ b _020E54A8
+_020E53EC: ; 0x020E53EC
+ b _020E5518
+_020E53F0:
+ cmp r3, #0x58
+ beq _020E5470
+ b _020E55EC
+_020E53FC:
+ cmp r3, #0x63
+ bgt _020E540C
+ beq _020E5588
+ b _020E55EC
+_020E540C:
+ sub r0, r3, #0x64
+ cmp r0, #0x14
+ addls pc, pc, r0, lsl #0x2
+ b _020E55EC
+_020E541C:
+ b _020E5470
+_020E5420:
+ b _020E5528
+_020E5424:
+ b _020E54A8
+_020E5428:
+ b _020E5518
+_020E542C:
+ b _020E55EC
+_020E5430:
+ b _020E5470
+_020E5434:
+ b _020E55EC
+_020E5438:
+ b _020E55EC
+_020E543C:
+ b _020E55EC
+_020E5440:
+ b _020E55EC
+_020E5444:
+ b _020E55D8
+_020E5448:
+ b _020E5470
+_020E544C:
+ b _020E5564
+_020E5450:
+ b _020E55EC
+_020E5454:
+ b _020E55EC
+_020E5458:
+ b _020E55B4
+_020E545C:
+ b _020E55EC
+_020E5460:
+ b _020E5470
+_020E5464:
+ b _020E55EC
+_020E5468:
+ b _020E55EC
+_020E546C:
+ b _020E5470
+_020E5470:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x9
+ moveq r0, #0x4
+ streqb r0, [sp, #0x4]
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+ beq _020E55F4
+ ldrb r0, [sp, #0x0]
+ cmp r0, #0x2
+ moveq r0, #0x1
+ streqb r0, [sp, #0x0]
+ b _020E55F4
+_020E54A8:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ ldreq r0, _020E5614 ; =0x0000FFFF
+ streqh r0, [sp, #0x6]
+ beq _020E55F4
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x6
+ streq r0, [sp, #0xc]
+ b _020E55F4
+_020E54E0:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0xd
+ streq r0, [sp, #0xc]
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ cmpne r0, #0x1
+ ldreq r0, _020E5614 ; =0x0000FFFF
+ streqh r0, [sp, #0x6]
+ b _020E55F4
+_020E5518:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+_020E5528:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x2
+ cmpne r0, #0x6
+ cmpne r0, #0x7
+ cmpne r0, #0x8
+ cmpne r0, #0x4
+ cmpne r0, #0x1
+ ldreq r0, _020E5614 ; =0x0000FFFF
+ streqh r0, [sp, #0x6]
+ beq _020E55F4
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x6
+ streq r0, [sp, #0xc]
+ b _020E55F4
+_020E5564:
+ mov r3, #0x3
+ mov r2, #0x1
+ mov r1, #0x78
+ mov r0, #0x8
+ strb r3, [sp, #0x4]
+ strb r2, [sp, #0x3]
+ strh r1, [sp, #0x6]
+ str r0, [sp, #0xc]
+ b _020E55F4
+_020E5588:
+ ldrb r1, [sp, #0x4]
+ cmp r1, #0x3
+ moveq r0, #0x5
+ streqb r0, [sp, #0x4]
+ beq _020E55F4
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ cmpeq r1, #0x0
+ ldrne r0, _020E5614 ; =0x0000FFFF
+ strneh r0, [sp, #0x6]
+ b _020E55F4
+_020E55B4:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x3
+ moveq r0, #0x5
+ streqb r0, [sp, #0x4]
+ beq _020E55F4
+ cmp r0, #0x0
+ ldrne r0, _020E5614 ; =0x0000FFFF
+ strneh r0, [sp, #0x6]
+ b _020E55F4
+_020E55D8:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x9
+ moveq r0, #0x4
+ streqb r0, [sp, #0x4]
+ b _020E55F4
+_020E55EC:
+ ldr r0, _020E5614 ; =0x0000FFFF
+ strh r0, [sp, #0x6]
+_020E55F4:
+ add r0, sp, #0x0
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add r0, r12, #0x2
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020E560C: .word 0x02104544
+_020E5610: .word 0x000001FD
+_020E5614: .word 0x0000FFFF
+
+ arm_func_start long2str_wide
+long2str_wide: ; 0x020E5618
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x10
+ movs r10, r0
+ mov r0, #0x0
+ mov r5, r1
+ str r0, [sp, #0xc]
+ ldr r7, [sp, #0x4c]
+ mov r6, r0
+ strh r0, [r5, #-0x2]!
+ ldrb r0, [sp, #0x43]
+ str r1, [sp, #0x0]
+ ldrh r8, [sp, #0x46]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x48]
+ ldrb r11, [sp, #0x41]
+ str r0, [sp, #0x8]
+ cmpeq r7, #0x0
+ bne _020E568C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020E5678
+ cmp r8, #0x6f
+ beq _020E568C
+_020E5678:
+ add sp, sp, #0x10
+ mov r0, r5
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E568C:
+ cmp r8, #0x69
+ bgt _020E56B4
+ bge _020E56E8
+ cmp r8, #0x58
+ bgt _020E56A8
+ beq _020E5714
+ b _020E571C
+_020E56A8:
+ cmp r8, #0x64
+ beq _020E56E8
+ b _020E571C
+_020E56B4:
+ cmp r8, #0x6f
+ bgt _020E56C8
+ moveq r4, #0x8
+ moveq r11, #0x0
+ b _020E571C
+_020E56C8:
+ cmp r8, #0x78
+ bgt _020E571C
+ cmp r8, #0x75
+ blt _020E571C
+ beq _020E5708
+ cmp r8, #0x78
+ beq _020E5714
+ b _020E571C
+_020E56E8:
+ cmp r10, #0x0
+ mov r4, #0xa
+ bge _020E571C
+ mov r0, #0x1
+ cmp r10, #0x80000000
+ rsbne r10, r10, #0x0
+ str r0, [sp, #0xc]
+ b _020E571C
+_020E5708:
+ mov r4, #0xa
+ mov r11, #0x0
+ b _020E571C
+_020E5714:
+ mov r4, #0x10
+ mov r11, #0x0
+_020E571C:
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ mov r9, r1
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ cmp r9, #0xa
+ mov r10, r0
+ addlt r9, r9, #0x30
+ blt _020E5754
+ cmp r8, #0x78
+ addeq r9, r9, #0x57
+ addne r9, r9, #0x37
+_020E5754:
+ cmp r10, #0x0
+ strh r9, [r5, #-0x2]!
+ add r6, r6, #0x1
+ bne _020E571C
+ cmp r4, #0x8
+ bne _020E5788
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrneh r0, [r5, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneh r0, [r5, #-0x2]!
+ addne r6, r6, #0x1
+_020E5788:
+ ldrb r0, [sp, #0x40]
+ cmp r0, #0x2
+ bne _020E57BC
+ ldr r0, [sp, #0xc]
+ ldr r7, [sp, #0x8]
+ cmp r0, #0x0
+ cmpeq r11, #0x0
+ subne r7, r7, #0x1
+ cmp r4, #0x10
+ bne _020E57BC
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ subne r7, r7, #0x2
+_020E57BC:
+ ldr r0, [sp, #0x0]
+ ldr r1, _020E5864 ; =0x000001FD
+ sub r0, r0, r5
+ add r0, r0, r0, lsr #0x1f
+ add r0, r7, r0, asr #0x1
+ cmp r0, r1
+ addgt sp, sp, #0x10
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ cmp r6, r7
+ bge _020E5804
+ mov r0, #0x30
+_020E57F4:
+ add r6, r6, #0x1
+ cmp r6, r7
+ strh r0, [r5, #-0x2]!
+ blt _020E57F4
+_020E5804:
+ cmp r4, #0x10
+ bne _020E5820
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneh r8, [r5, #-0x2]
+ strneh r0, [r5, #-0x4]!
+_020E5820:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneh r0, [r5, #-0x2]!
+ bne _020E5850
+ cmp r11, #0x1
+ moveq r0, #0x2b
+ streqh r0, [r5, #-0x2]!
+ beq _020E5850
+ cmp r11, #0x2
+ moveq r0, #0x20
+ streqh r0, [r5, #-0x2]!
+_020E5850:
+ mov r0, r5
+ add sp, sp, #0x10
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E5864: .word 0x000001FD
+
+ arm_func_start longlong2str_wide
+longlong2str_wide: ; 0x020E5868
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x18
+ mov r9, r1
+ mov r1, #0x0
+ mov r10, r0
+ mov r6, r2
+ mov r0, r1
+ strh r0, [r6, #-0x2]!
+ ldr r0, [sp, #0x58]
+ cmp r9, #0x0
+ str r0, [sp, #0x10]
+ ldrb r0, [sp, #0x4f]
+ cmpeq r10, #0x0
+ str r2, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x54]
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x8]
+ ldrb r0, [sp, #0x4d]
+ mov r7, r1
+ ldrh r8, [sp, #0x52]
+ str r0, [sp, #0xc]
+ ldreq r0, [sp, #0x10]
+ cmpeq r0, #0x0
+ bne _020E58F8
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020E58E4
+ cmp r8, #0x6f
+ beq _020E58F8
+_020E58E4:
+ add sp, sp, #0x18
+ mov r0, r6
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E58F8:
+ cmp r8, #0x69
+ bgt _020E5920
+ bge _020E5950
+ cmp r8, #0x58
+ bgt _020E5914
+ beq _020E59A4
+ b _020E59B0
+_020E5914:
+ cmp r8, #0x64
+ beq _020E5950
+ b _020E59B0
+_020E5920:
+ cmp r8, #0x6f
+ bgt _020E5930
+ beq _020E5984
+ b _020E59B0
+_020E5930:
+ cmp r8, #0x78
+ bgt _020E59B0
+ cmp r8, #0x75
+ blt _020E59B0
+ beq _020E5994
+ cmp r8, #0x78
+ beq _020E59A4
+ b _020E59B0
+_020E5950:
+ subs r0, r10, #0x0
+ sbcs r0, r9, #0x0
+ mov r11, #0xa
+ mov r5, #0x0
+ bge _020E59B0
+ cmp r9, #0x80000000
+ cmpeq r10, r5
+ beq _020E5978
+ rsbs r10, r10, #0x0
+ rsc r9, r9, #0x0
+_020E5978:
+ mov r0, #0x1
+ str r0, [sp, #0x14]
+ b _020E59B0
+_020E5984:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x8
+ b _020E59B0
+_020E5994:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0xa
+ b _020E59B0
+_020E59A4:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x10
+_020E59B0:
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ull_mod
+ mov r4, r0
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ll_udiv
+ mov r10, r0
+ cmp r4, #0xa
+ mov r9, r1
+ addlt r0, r4, #0x30
+ blt _020E59FC
+ cmp r8, #0x78
+ addeq r0, r4, #0x57
+ addne r0, r4, #0x37
+_020E59FC:
+ strh r0, [r6, #-0x2]!
+ mov r0, #0x0
+ cmp r9, r0
+ cmpeq r10, r0
+ add r7, r7, #0x1
+ bne _020E59B0
+ cmp r5, #0x0
+ cmpeq r11, #0x8
+ bne _020E5A3C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrneh r0, [r6, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneh r0, [r6, #-0x2]!
+ addne r7, r7, #0x1
+_020E5A3C:
+ ldrb r0, [sp, #0x4c]
+ cmp r0, #0x2
+ bne _020E5A8C
+ ldr r0, [sp, #0x8]
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0xc]
+ cmpeq r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x1
+ strne r0, [sp, #0x10]
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E5A8C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x2
+ strne r0, [sp, #0x10]
+_020E5A8C:
+ ldr r0, [sp, #0x0]
+ ldr r2, _020E5B48 ; =0x000001FD
+ sub r0, r0, r6
+ add r1, r0, r0, lsr #0x1f
+ ldr r0, [sp, #0x10]
+ add r0, r0, r1, asr #0x1
+ cmp r0, r2
+ addgt sp, sp, #0x18
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldr r0, [sp, #0x10]
+ cmp r7, r0
+ bge _020E5AE0
+ mov r1, #0x30
+_020E5ACC:
+ ldr r0, [sp, #0x10]
+ add r7, r7, #0x1
+ cmp r7, r0
+ strh r1, [r6, #-0x2]!
+ blt _020E5ACC
+_020E5AE0:
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E5B00
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneh r8, [r6, #-0x2]
+ strneh r0, [r6, #-0x4]!
+_020E5B00:
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneh r0, [r6, #-0x2]!
+ bne _020E5B34
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x1
+ moveq r0, #0x2b
+ streqh r0, [r6, #-0x2]!
+ beq _020E5B34
+ cmp r0, #0x2
+ moveq r0, #0x20
+ streqh r0, [r6, #-0x2]!
+_020E5B34:
+ mov r0, r6
+ add sp, sp, #0x18
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E5B48: .word 0x000001FD
+
+ arm_func_start double2hex_wide
+double2hex_wide: ; 0x020E5B4C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r10,lr}
+ sub sp, sp, #0x44
+ ldr r7, [sp, #0x80]
+ ldr r0, _020E5EB8 ; =0x000001FD
+ mov r8, r2
+ cmp r7, r0
+ ldrh r6, [sp, #0x7a]
+ ldrb r5, [sp, #0x77]
+ ldrb r4, [sp, #0x75]
+ ldr r1, [sp, #0x68]
+ ldr r2, [sp, #0x6c]
+ addgt sp, sp, #0x44
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r10,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r10, #0x0
+ mov r9, #0x20
+ add r0, sp, #0x8
+ add r3, sp, #0xc
+ strb r10, [sp, #0x8]
+ strh r9, [sp, #0xa]
+ bl __num2dec_internal2
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x6c]
+ bl fabs
+ mov r2, r0
+ mov r0, r10
+ mov r3, r1
+ mov r1, r0
+ bl _deq
+ bne _020E5BF4
+ sub r4, r8, #0xc
+ ldr r1, _020E5EBC ; =0x02106DE4
+ mov r0, r4
+ bl wcscpy
+ add sp, sp, #0x44
+ mov r0, r4
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E5BF4:
+ ldrb r0, [sp, #0x11]
+ cmp r0, #0x49
+ bne _020E5C74
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E5C38
+ cmp r6, #0x41
+ sub r4, r8, #0xa
+ bne _020E5C28
+ ldr r1, _020E5EC0 ; =0x02106DF0
+ mov r0, r4
+ bl wcscpy
+ b _020E5C60
+_020E5C28:
+ ldr r1, _020E5EC4 ; =0x02106DFC
+ mov r0, r4
+ bl wcscpy
+ b _020E5C60
+_020E5C38:
+ cmp r6, #0x41
+ sub r4, r8, #0x8
+ bne _020E5C54
+ ldr r1, _020E5EC8 ; =0x02106E08
+ mov r0, r4
+ bl wcscpy
+ b _020E5C60
+_020E5C54:
+ ldr r1, _020E5ECC ; =0x02106E10
+ mov r0, r4
+ bl wcscpy
+_020E5C60:
+ add sp, sp, #0x44
+ mov r0, r4
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E5C74:
+ cmp r0, #0x4e
+ bne _020E5CF0
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E5CB4
+ cmp r6, #0x41
+ sub r4, r8, #0xa
+ bne _020E5CA4
+ ldr r1, _020E5ED0 ; =0x02106E18
+ mov r0, r4
+ bl wcscpy
+ b _020E5CDC
+_020E5CA4:
+ ldr r1, _020E5ED4 ; =0x02106E24
+ mov r0, r4
+ bl wcscpy
+ b _020E5CDC
+_020E5CB4:
+ cmp r6, #0x41
+ sub r4, r8, #0x8
+ bne _020E5CD0
+ ldr r1, _020E5ED8 ; =0x02106E30
+ mov r0, r4
+ bl wcscpy
+ b _020E5CDC
+_020E5CD0:
+ ldr r1, _020E5EDC ; =0x02106E38
+ mov r0, r4
+ bl wcscpy
+_020E5CDC:
+ add sp, sp, #0x44
+ mov r0, r4
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E5CF0:
+ mov r3, r10
+ mov r1, #0x1
+ mov r0, #0x64
+ add r9, sp, #0x68
+ strb r1, [sp, #0x34]
+ strb r1, [sp, #0x35]
+ strb r3, [sp, #0x36]
+ strb r3, [sp, #0x37]
+ strb r3, [sp, #0x38]
+ str r3, [sp, #0x3c]
+ str r1, [sp, #0x40]
+ strh r0, [sp, #0x3a]
+_020E5D20:
+ rsb r1, r3, #0x7
+ ldrsb r2, [r9, r3]
+ ldrsb r0, [r9, r1]
+ strb r0, [r9, r3]
+ add r3, r3, #0x1
+ strb r2, [r9, r1]
+ cmp r3, #0x4
+ blt _020E5D20
+ ldrb r0, [sp, #0x69]
+ ldrb r1, [sp, #0x68]
+ ldr sb, _020E5EE0 ; =0x000007FF
+ mov r0, r0, lsl #0x11
+ orr r1, r0, r1, lsl #0x19
+ add r0, sp, #0x34
+ and lr, r9, r1, lsr #0x15
+ sub r12, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r12, {r0-r3}
+ rsb r0, r9, #0x400
+ mov r1, r8
+ add r0, lr, r0
+ ldmia r12, {r2-r3}
+ bl long2str_wide
+ cmp r6, #0x61
+ moveq r1, #0x70
+ movne r1, #0x50
+ strh r1, [r0, #-0x2]!
+ mov r1, r7, lsl #0x2
+ mov lr, r7
+ cmp r7, #0x1
+ add r8, r1, #0xb
+ add r12, sp, #0x68
+ blt _020E5E30
+ mov r9, #0x30
+_020E5DA8:
+ cmp r8, #0x40
+ bge _020E5E18
+ ldrb r1, [r12, r8, asr #0x3]
+ and r2, r8, #0x7
+ rsb r3, r2, #0x7
+ mov r2, r1, asr r3
+ sub r10, r8, #0x4
+ bic r1, r8, #0x7
+ bic r10, r10, #0x7
+ cmp r1, r10
+ add r10, r12, r8, asr #0x3
+ and r1, r2, #0xff
+ beq _020E5DEC
+ ldrb r2, [r10, #-0x1]
+ mov r2, r2, lsl #0x8
+ orr r1, r1, r2, asr r3
+ and r1, r1, #0xff
+_020E5DEC:
+ and r1, r1, #0xf
+ cmp r1, #0xa
+ addcc r1, r1, #0x30
+ andcc r1, r1, #0xff
+ blo _020E5E1C
+ cmp r6, #0x61
+ addeq r1, r1, #0x57
+ andeq r1, r1, #0xff
+ addne r1, r1, #0x37
+ andne r1, r1, #0xff
+ b _020E5E1C
+_020E5E18:
+ mov r1, r9
+_020E5E1C:
+ sub lr, lr, #0x1
+ cmp lr, #0x1
+ strh r1, [r0, #-0x2]!
+ sub r8, r8, #0x4
+ bge _020E5DA8
+_020E5E30:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneh r1, [r0, #-0x2]!
+ mov r1, #0x31
+ strh r1, [r0, #-0x2]
+ cmp r6, #0x61
+ moveq r1, #0x78
+ movne r1, #0x58
+ strh r1, [r0, #-0x4]!
+ mov r1, #0x30
+ strh r1, [r0, #-0x2]!
+ ldrsb r1, [sp, #0xc]
+ cmp r1, #0x0
+ movne r1, #0x2d
+ strneh r1, [r0, #-0x2]!
+ addne sp, sp, #0x44
+ ldmneia sp!, {r3-r10,lr}
+ addne sp, sp, #0x10
+ bxne lr
+ cmp r4, #0x1
+ moveq r1, #0x2b
+ streqh r1, [r0, #-0x2]!
+ addeq sp, sp, #0x44
+ ldmeqia sp!, {r3-r10,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ cmp r4, #0x2
+ moveq r1, #0x20
+ streqh r1, [r0, #-0x2]!
+ add sp, sp, #0x44
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E5EB8: .word 0x000001FD
+_020E5EBC: .word 0x02106DE4
+_020E5EC0: .word 0x02106DF0
+_020E5EC4: .word 0x02106DFC
+_020E5EC8: .word 0x02106E08
+_020E5ECC: .word 0x02106E10
+_020E5ED0: .word 0x02106E18
+_020E5ED4: .word 0x02106E24
+_020E5ED8: .word 0x02106E30
+_020E5EDC: .word 0x02106E38
+_020E5EE0: .word 0x000007FF
+
+ arm_func_start round_decimal_wide
+round_decimal_wide: ; 0x020E5EE4
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ bge _020E5F0C
+_020E5EF0:
+ mov r1, #0x0
+ strh r1, [r0, #0x2]
+ mov r1, #0x1
+ strb r1, [r0, #0x4]
+ mov r1, #0x30
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r4,pc}
+_020E5F0C:
+ ldrb lr, [r0, #0x4]
+ cmp r1, lr
+ ldmgeia sp!, {r4,pc}
+_020E5F18: ; 0x020E5F18
+ add r12, r0, #0x5
+ add r2, r12, r1
+ add r2, r2, #0x1
+ ldrsb r3, [r2, #-0x1]!
+ sub r3, r3, #0x30
+ mov r3, r3, lsl #0x18
+ mov r3, r3, asr #0x18
+ cmp r3, #0x5
+ bne _020E5F6C
+ add r12, r12, lr
+_020E5F40:
+ sub r12, r12, #0x1
+ cmp r12, r2
+ bls _020E5F58
+ ldrsb r3, [r12, #0x0]
+ cmp r3, #0x30
+ beq _020E5F40
+_020E5F58:
+ cmp r12, r2
+ ldreqsb r3, [r2, #-0x1]
+ andeq r4, r3, #0x1
+ movne r4, #0x1
+ b _020E5F74
+_020E5F6C:
+ movgt r4, #0x1
+ movle r4, #0x0
+_020E5F74:
+ cmp r1, #0x0
+ beq _020E5FD0
+ mov r12, #0x0
+ mov lr, #0x1
+_020E5F84:
+ ldrsb r3, [r2, #-0x1]!
+ sub r3, r3, #0x30
+ add r3, r3, r4
+ mov r3, r3, lsl #0x18
+ mov r3, r3, asr #0x18
+ cmp r3, #0x9
+ movgt r4, lr
+ movle r4, r12
+ cmp r4, #0x0
+ bne _020E5FB4
+ cmp r3, #0x0
+ bne _020E5FBC
+_020E5FB4:
+ sub r1, r1, #0x1
+ b _020E5FC8
+_020E5FBC:
+ add r3, r3, #0x30
+ strb r3, [r2, #0x0]
+ b _020E5FD0
+_020E5FC8:
+ cmp r1, #0x0
+ bne _020E5F84
+_020E5FD0:
+ cmp r4, #0x0
+ beq _020E5FF8
+ ldrsh r3, [r0, #0x2]
+ mov r2, #0x1
+ mov r1, #0x31
+ add r3, r3, #0x1
+ strh r3, [r0, #0x2]
+ strb r2, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r4,pc}
+_020E5FF8:
+ cmp r1, #0x0
+ beq _020E5EF0
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start float2str_wide
+float2str_wide: ; 0x020E6008
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x22c
+ mov r10, r0
+ add r0, sp, #0x250
+ ldr r7, [sp, #0x268]
+ ldr r3, _020E6628 ; =0x000001FD
+ ldrh r6, [r0, #0x12]
+ cmp r7, r3
+ ldrb r5, [sp, #0x25f]
+ ldrb r4, [sp, #0x25d]
+ mov r8, r1
+ mov r9, r2
+ addgt sp, sp, #0x22c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r12, #0x0
+ mov r11, #0x20
+ add r0, sp, #0x0
+ add r3, sp, #0x4
+ mov r1, r10
+ mov r2, r8
+ strb r12, [sp, #0x0]
+ strh r11, [sp, #0x2]
+ bl __num2dec_internal2
+ ldrb r0, [sp, #0x8]
+ add r1, sp, #0x9
+ add r0, r1, r0
+ b _020E609C
+_020E6084:
+ ldrb r2, [sp, #0x8]
+ ldrsh r1, [sp, #0x6]
+ sub r2, r2, #0x1
+ add r1, r1, #0x1
+ strb r2, [sp, #0x8]
+ strh r1, [sp, #0x6]
+_020E609C:
+ ldrb r1, [sp, #0x8]
+ cmp r1, #0x1
+ bls _020E60B4
+ ldrsb r1, [r0, #-0x1]!
+ cmp r1, #0x30
+ beq _020E6084
+_020E60B4:
+ ldrb r0, [sp, #0x9]
+ cmp r0, #0x30
+ beq _020E60D4
+ cmp r0, #0x49
+ beq _020E60E0
+ cmp r0, #0x4e
+ beq _020E6198
+ b _020E6244
+_020E60D4:
+ mov r0, #0x0
+ strh r0, [sp, #0x6]
+ b _020E6244
+_020E60E0:
+ mov r2, #0x0
+ mov r0, r10
+ mov r1, r8
+ mov r3, r2
+ bl _dls
+ bhs _020E6140
+ cmp r6, #0x80
+ sub r4, r9, #0xa
+ movcs r0, #0x0
+ bhs _020E6118
+ ldr r0, _020E662C ; =0x02104544
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x200
+_020E6118:
+ cmp r0, #0x0
+ beq _020E6130
+ ldr r1, _020E6630 ; =0x02106DF0
+ mov r0, r4
+ bl wcscpy
+ b _020E6184
+_020E6130:
+ ldr r1, _020E6634 ; =0x02106DFC
+ mov r0, r4
+ bl wcscpy
+ b _020E6184
+_020E6140:
+ cmp r6, #0x80
+ sub r4, r9, #0x8
+ movcs r0, #0x0
+ bhs _020E6160
+ ldr r0, _020E662C ; =0x02104544
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x200
+_020E6160:
+ cmp r0, #0x0
+ beq _020E6178
+ ldr r1, _020E6638 ; =0x02106E08
+ mov r0, r4
+ bl wcscpy
+ b _020E6184
+_020E6178:
+ ldr r1, _020E663C ; =0x02106E10
+ mov r0, r4
+ bl wcscpy
+_020E6184:
+ add sp, sp, #0x22c
+ mov r0, r4
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E6198:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020E61EC
+ cmp r6, #0x80
+ sub r4, r9, #0xa
+ movcs r0, #0x0
+ bhs _020E61C4
+ ldr r0, _020E662C ; =0x02104544
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x200
+_020E61C4:
+ cmp r0, #0x0
+ beq _020E61DC
+ ldr r1, _020E6640 ; =0x02106E18
+ mov r0, r4
+ bl wcscpy
+ b _020E6230
+_020E61DC:
+ ldr r1, _020E6644 ; =0x02106E24
+ mov r0, r4
+ bl wcscpy
+ b _020E6230
+_020E61EC:
+ cmp r6, #0x80
+ sub r4, r9, #0x8
+ movcs r0, #0x0
+ bhs _020E620C
+ ldr r0, _020E662C ; =0x02104544
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x200
+_020E620C:
+ cmp r0, #0x0
+ beq _020E6224
+ ldr r1, _020E6648 ; =0x02106E30
+ mov r0, r4
+ bl wcscpy
+ b _020E6230
+_020E6224:
+ ldr r1, _020E664C ; =0x02106E38
+ mov r0, r4
+ bl wcscpy
+_020E6230:
+ add sp, sp, #0x22c
+ mov r0, r4
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E6244:
+ ldrb r1, [sp, #0x8]
+ ldrsh r2, [sp, #0x6]
+ add r0, sp, #0x200
+ sub r1, r1, #0x1
+ add r0, r0, #0x2a
+ add r1, r2, r1
+ sub r8, r0, #0x1
+ strh r1, [sp, #0x6]
+ mov r0, #0x0
+ strb r0, [r8, #0x0]
+ cmp r6, #0x65
+ bgt _020E62A0
+ bge _020E632C
+ cmp r6, #0x47
+ bgt _020E65EC
+ cmp r6, #0x45
+ blt _020E65EC
+ beq _020E632C
+ cmp r6, #0x46
+ beq _020E6478
+ cmp r6, #0x47
+ beq _020E62B8
+ b _020E65EC
+_020E62A0:
+ cmp r6, #0x66
+ bgt _020E62B0
+ beq _020E6478
+ b _020E65EC
+_020E62B0:
+ cmp r6, #0x67
+ bne _020E65EC
+_020E62B8:
+ ldrb r0, [sp, #0x8]
+ cmp r0, r7
+ ble _020E62D0
+ add r0, sp, #0x4
+ mov r1, r7
+ bl round_decimal_wide
+_020E62D0:
+ ldrsh r2, [sp, #0x6]
+ mvn r0, #0x3
+ cmp r2, r0
+ blt _020E62E8
+ cmp r2, r7
+ blt _020E6308
+_020E62E8:
+ cmp r5, #0x0
+ ldreqb r0, [sp, #0x8]
+ subne r7, r7, #0x1
+ subeq r7, r0, #0x1
+ cmp r6, #0x67
+ moveq r6, #0x65
+ movne r6, #0x45
+ b _020E632C
+_020E6308:
+ cmp r5, #0x0
+ addne r0, r2, #0x1
+ subne r7, r7, r0
+ bne _020E6478
+ ldrb r1, [sp, #0x8]
+ add r0, r2, #0x1
+ subs r7, r1, r0
+ movmi r7, #0x0
+ b _020E6478
+_020E632C:
+ ldrb r0, [sp, #0x8]
+ add r1, r7, #0x1
+ cmp r0, r1
+ ble _020E6344
+ add r0, sp, #0x4
+ bl round_decimal_wide
+_020E6344:
+ ldrsh lr, [sp, #0x6]
+ mov r11, #0x2b
+ mov r10, #0x0
+ cmp lr, #0x0
+ rsblt lr, lr, #0x0
+ movlt r11, #0x2d
+ ldr r3, _020E6650 ; =0x66666667
+ mov r0, #0xa
+ b _020E6398
+_020E6368:
+ mov r1, lr, lsr #0x1f
+ smull r2, r12, r3, lr
+ add r12, r1, r12, asr #0x2
+ smull r1, r2, r0, r12
+ sub r12, lr, r1
+ add r1, r12, #0x30
+ strb r1, [r8, #-0x1]!
+ mov r2, lr
+ smull r1, lr, r3, r2
+ mov r1, r2, lsr #0x1f
+ add lr, r1, lr, asr #0x2
+ add r10, r10, #0x1
+_020E6398:
+ cmp lr, #0x0
+ bne _020E6368
+ cmp r10, #0x2
+ blt _020E6368
+ add r0, sp, #0x2a
+ strb r11, [r8, #-0x1]
+ strb r6, [r8, #-0x2]!
+ sub r1, r0, r8
+ ldr r0, _020E6628 ; =0x000001FD
+ add r1, r1, r7
+ cmp r1, r0
+ addgt sp, sp, #0x22c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldrb r1, [sp, #0x8]
+ add r0, r7, #0x1
+ cmp r1, r0
+ bge _020E6408
+ add r0, r7, #0x2
+ sub r0, r0, r1
+ subs r1, r0, #0x1
+ beq _020E6408
+ mov r0, #0x30
+_020E63FC:
+ strb r0, [r8, #-0x1]!
+ subs r1, r1, #0x1
+ bne _020E63FC
+_020E6408:
+ ldrb r1, [sp, #0x8]
+ add r0, sp, #0x9
+ add r2, r0, r1
+ subs r1, r1, #0x1
+ beq _020E642C
+_020E641C:
+ ldrsb r0, [r2, #-0x1]!
+ subs r1, r1, #0x1
+ strb r0, [r8, #-0x1]!
+ bne _020E641C
+_020E642C:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r0, #0x2e
+ strneb r0, [r8, #-0x1]!
+ ldrb r0, [sp, #0x9]
+ strb r0, [r8, #-0x1]!
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E65EC
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E65EC
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+ b _020E65EC
+_020E6478:
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+ cmp r1, r7
+ ble _020E64B8
+ sub r1, r1, r7
+ add r0, sp, #0x4
+ sub r1, r2, r1
+ bl round_decimal_wide
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+_020E64B8:
+ adds r0, r3, #0x1
+ movmi r0, #0x0
+ ldr r3, _020E6628 ; =0x000001FD
+ add r6, r0, r1
+ cmp r6, r3
+ addgt sp, sp, #0x22c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ add r3, sp, #0x9
+ sub r6, r7, r1
+ cmp r6, #0x0
+ add r2, r3, r2
+ mov r10, #0x0
+ ble _020E650C
+ mov r3, #0x30
+_020E64FC:
+ add r10, r10, #0x1
+ cmp r10, r6
+ strb r3, [r8, #-0x1]!
+ blt _020E64FC
+_020E650C:
+ mov r6, #0x0
+ b _020E6520
+_020E6514:
+ ldrsb r3, [r2, #-0x1]!
+ add r6, r6, #0x1
+ strb r3, [r8, #-0x1]!
+_020E6520:
+ cmp r6, r1
+ ldrltb r3, [sp, #0x8]
+ cmplt r6, r3
+ blt _020E6514
+ cmp r6, r1
+ bge _020E654C
+ mov r3, #0x30
+_020E653C:
+ add r6, r6, #0x1
+ cmp r6, r1
+ strb r3, [r8, #-0x1]!
+ blt _020E653C
+_020E654C:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneb r1, [r8, #-0x1]!
+ cmp r0, #0x0
+ beq _020E65B4
+ ldrb r1, [sp, #0x8]
+ mov r5, #0x0
+ sub r1, r0, r1
+ cmp r1, #0x0
+ ble _020E6594
+ mov r3, #0x30
+_020E657C:
+ strb r3, [r8, #-0x1]!
+ ldrb r1, [sp, #0x8]
+ add r5, r5, #0x1
+ sub r1, r0, r1
+ cmp r5, r1
+ blt _020E657C
+_020E6594:
+ cmp r5, r0
+ bge _020E65BC
+_020E659C:
+ ldrsb r1, [r2, #-0x1]!
+ add r5, r5, #0x1
+ cmp r5, r0
+ strb r1, [r8, #-0x1]!
+ blt _020E659C
+ b _020E65BC
+_020E65B4:
+ mov r0, #0x30
+ strb r0, [r8, #-0x1]!
+_020E65BC:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E65EC
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E65EC
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+_020E65EC:
+ mov r0, r8
+ bl strlen
+ sub r1, r9, r0, lsl #0x1
+ mov r0, r8
+ sub r4, r1, #0x2
+ bl strlen
+ mov r2, r0
+ mov r0, r4
+ mov r1, r8
+ bl mbstowcs
+ mov r0, r4
+ add sp, sp, #0x22c
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E6628: .word 0x000001FD
+_020E662C: .word 0x02104544
+_020E6630: .word 0x02106DF0
+_020E6634: .word 0x02106DFC
+_020E6638: .word 0x02106E08
+_020E663C: .word 0x02106E10
+_020E6640: .word 0x02106E18
+_020E6644: .word 0x02106E24
+_020E6648: .word 0x02106E30
+_020E664C: .word 0x02106E38
+_020E6650: .word 0x66666667
+
+ arm_func_start __wpformatter
+__wpformatter:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x430
+ mov r3, #0x20
+ mov r11, r2
+ strh r3, [sp, #0x1c]
+ ldrh r2, [r11, #0x0]
+ mov r9, r0
+ mov r8, r1
+ cmp r2, #0x0
+ mov r4, #0x0
+ beq _020E6F24
+_020E6684:
+ mov r0, r11
+ mov r1, #0x25
+ bl wcschr
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _020E66D8
+ mov r0, r11
+ bl wcslen
+ movs r2, r0
+ add r4, r4, r2
+ beq _020E6F24
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ bne _020E6F24
+ add sp, sp, #0x430
+ mvn r0, #0x0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E66D8:
+ sub r0, r0, r11
+ add r0, r0, r0, lsr #0x1f
+ movs r2, r0, asr #0x1
+ add r4, r4, r2
+ beq _020E6710
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E6710:
+ add r1, sp, #0x400
+ ldr r0, [sp, #0xc]
+ add r1, r1, #0x64
+ add r2, sp, #0x20
+ bl parse_format_wprintf
+ ldrh r1, [sp, #0x26]
+ mov r11, r0
+ cmp r1, #0x61
+ bgt _020E6780
+ bge _020E6AEC
+ cmp r1, #0x47
+ bgt _020E6774
+ subs r0, r1, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E6768
+_020E674C: ; 0x020E674C
+ b _020E6AEC
+_020E6750: ; 0x020E6750
+ b _020E6D90
+_020E6754: ; 0x020E6754
+ b _020E6D90
+_020E6758: ; 0x020E6758
+ b _020E6D90
+_020E675C: ; 0x020E675C
+ b _020E6A7C
+_020E6760: ; 0x020E6760
+ b _020E6A7C
+_020E6764: ; 0x020E6764
+ b _020E6A7C
+_020E6768:
+ cmp r1, #0x25
+ beq _020E6D7C
+ b _020E6D90
+_020E6774:
+ cmp r1, #0x58
+ beq _020E6940
+ b _020E6D90
+_020E6780:
+ cmp r1, #0x75
+ bgt _020E67E8
+ subs r0, r1, #0x64
+ addpl pc, pc, r0, lsl #0x2
+ b _020E67DC
+_020E6794: ; 0x020E6794
+ b _020E6804
+_020E6798: ; 0x020E6798
+ b _020E6A7C
+_020E679C: ; 0x020E679C
+ b _020E6A7C
+_020E67A0: ; 0x020E67A0
+ b _020E6A7C
+_020E67A4: ; 0x020E67A4
+ b _020E6D90
+_020E67A8: ; 0x020E67A8
+ b _020E6804
+_020E67AC: ; 0x020E67AC
+ b _020E6D90
+_020E67B0: ; 0x020E67B0
+ b _020E6D90
+_020E67B4: ; 0x020E67B4
+ b _020E6D90
+_020E67B8: ; 0x020E67B8
+ b _020E6D90
+_020E67BC: ; 0x020E67BC
+ b _020E6C98
+_020E67C0: ; 0x020E67C0
+ b _020E6940
+_020E67C4: ; 0x020E67C4
+ b _020E6D90
+_020E67C8: ; 0x020E67C8
+ b _020E6D90
+_020E67CC: ; 0x020E67CC
+ b _020E6D90
+_020E67D0: ; 0x020E67D0
+ b _020E6B5C
+_020E67D4: ; 0x020E67D4
+ b _020E6D90
+_020E67D8: ; 0x020E67D8
+ b _020E6940
+_020E67DC:
+ cmp r1, #0x63
+ beq _020E6D24
+ b _020E6D90
+_020E67E8:
+ cmp r1, #0x78
+ bgt _020E67F8
+ beq _020E6940
+ b _020E6D90
+_020E67F8:
+ ldr r0, _020E6F38 ; =0x0000FFFF
+ cmp r1, r0
+ b _020E6D90
+_020E6804:
+ ldrb r0, [sp, #0x24]
+ cmp r0, #0x3
+ bne _020E6824
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E68BC
+_020E6824:
+ cmp r0, #0x4
+ bne _020E684C
+ ldr r1, [sp, #0x464]
+ add r2, r1, #0x8
+ str r2, [sp, #0x464]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E68BC
+_020E684C:
+ cmp r0, #0x6
+ bne _020E6874
+ ldr r1, [sp, #0x464]
+ add r2, r1, #0x8
+ str r2, [sp, #0x464]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E68BC
+_020E6874:
+ cmp r0, #0x7
+ bne _020E6890
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E68BC
+_020E6890:
+ cmp r0, #0x8
+ bne _020E68AC
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E68BC
+_020E68AC:
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+_020E68BC:
+ cmp r0, #0x2
+ moveq r1, r10, lsl #0x10
+ moveq r10, r1, asr #0x10
+ cmp r0, #0x4
+ cmpne r0, #0x6
+ add r0, sp, #0x20
+ bne _020E6904
+ sub r5, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr r3, [r5, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r2, sp, #0x430
+ bl longlong2str_wide
+ movs r6, r0
+ beq _020E6D90
+ b _020E6928
+_020E6904:
+ sub r5, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ add r1, sp, #0x430
+ mov r0, r10
+ ldmia r5, {r2-r3}
+ bl long2str_wide
+ movs r6, r0
+ beq _020E6D90
+_020E6928:
+ add r0, sp, #0x400
+ add r0, r0, #0x2e
+ sub r0, r0, r6
+ add r0, r0, r0, lsr #0x1f
+ mov r7, r0, asr #0x1
+ b _020E6DDC
+_020E6940:
+ ldrb r0, [sp, #0x24]
+ cmp r0, #0x3
+ bne _020E6960
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E69F8
+_020E6960:
+ cmp r0, #0x4
+ bne _020E6988
+ ldr r1, [sp, #0x464]
+ add r2, r1, #0x8
+ str r2, [sp, #0x464]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E69F8
+_020E6988:
+ cmp r0, #0x6
+ bne _020E69B0
+ ldr r1, [sp, #0x464]
+ add r2, r1, #0x8
+ str r2, [sp, #0x464]
+ ldr r1, [r2, #-0x8]
+ str r1, [sp, #0x10]
+ ldr r1, [r2, #-0x4]
+ str r1, [sp, #0x14]
+ b _020E69F8
+_020E69B0:
+ cmp r0, #0x7
+ bne _020E69CC
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E69F8
+_020E69CC:
+ cmp r0, #0x8
+ bne _020E69E8
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+ b _020E69F8
+_020E69E8:
+ ldr r1, [sp, #0x464]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r10, [r1, #-0x4]
+_020E69F8:
+ cmp r0, #0x2
+ moveq r1, r10, lsl #0x10
+ moveq r10, r1, lsr #0x10
+ cmp r0, #0x4
+ cmpne r0, #0x6
+ add r0, sp, #0x20
+ bne _020E6A40
+ sub r5, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr r3, [r5, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r2, sp, #0x430
+ bl longlong2str_wide
+ movs r6, r0
+ beq _020E6D90
+ b _020E6A64
+_020E6A40:
+ sub r5, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ add r1, sp, #0x430
+ mov r0, r10
+ ldmia r5, {r2-r3}
+ bl long2str_wide
+ movs r6, r0
+ beq _020E6D90
+_020E6A64:
+ add r0, sp, #0x400
+ add r0, r0, #0x2e
+ sub r0, r0, r6
+ add r0, r0, r0, lsr #0x1f
+ mov r7, r0, asr #0x1
+ b _020E6DDC
+_020E6A7C:
+ ldrb r0, [sp, #0x24]
+ cmp r0, #0x9
+ ldrne r0, [sp, #0x464]
+ addne r0, r0, #0x8
+ strne r0, [sp, #0x464]
+ bne _020E6AA0
+ ldr r0, [sp, #0x464]
+ add r0, r0, #0x8
+ str r0, [sp, #0x464]
+_020E6AA0:
+ ldr r7, [r0, #-0x8]
+ ldr r6, [r0, #-0x4]
+ add r0, sp, #0x20
+ sub r5, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr r3, [r5, #0x0]
+ mov r0, r7
+ mov r1, r6
+ add r2, sp, #0x430
+ bl float2str_wide
+ movs r6, r0
+ beq _020E6D90
+ add r0, sp, #0x400
+ add r0, r0, #0x2e
+ sub r0, r0, r6
+ add r0, r0, r0, lsr #0x1f
+ mov r7, r0, asr #0x1
+ b _020E6DDC
+_020E6AEC:
+ ldrb r0, [sp, #0x24]
+ cmp r0, #0x9
+ ldrne r0, [sp, #0x464]
+ addne r0, r0, #0x8
+ strne r0, [sp, #0x464]
+ bne _020E6B10
+ ldr r0, [sp, #0x464]
+ add r0, r0, #0x8
+ str r0, [sp, #0x464]
+_020E6B10:
+ ldr r7, [r0, #-0x8]
+ ldr r6, [r0, #-0x4]
+ add r0, sp, #0x20
+ sub r5, sp, #0x4
+ ldmia r0, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr r3, [r5, #0x0]
+ mov r0, r7
+ mov r1, r6
+ add r2, sp, #0x430
+ bl double2hex_wide
+ movs r6, r0
+ beq _020E6D90
+ add r0, sp, #0x400
+ add r0, r0, #0x2e
+ sub r0, r0, r6
+ add r0, r0, r0, lsr #0x1f
+ mov r7, r0, asr #0x1
+ b _020E6DDC
+_020E6B5C:
+ ldrb r0, [sp, #0x24]
+ cmp r0, #0x5
+ bne _020E6BF8
+ ldr r0, [sp, #0x464]
+ add r0, r0, #0x4
+ str r0, [sp, #0x464]
+ ldr r6, [r0, #-0x4]
+ ldrb r0, [sp, #0x23]
+ cmp r6, #0x0
+ ldreq r6, _020E6F3C ; =0x02106E40
+ cmp r0, #0x0
+ beq _020E6BB0
+ ldrh r1, [r6], #0x2
+ ldrb r0, [sp, #0x22]
+ and r7, r1, #0xff
+ cmp r0, #0x0
+ beq _020E6DDC
+ ldr r0, [sp, #0x2c]
+ cmp r7, r0
+ movgt r7, r0
+ b _020E6DDC
+_020E6BB0:
+ ldrb r0, [sp, #0x22]
+ cmp r0, #0x0
+ beq _020E6BE8
+ ldr r7, [sp, #0x2c]
+ mov r0, r6
+ mov r2, r7
+ mov r1, #0x0
+ bl wmemchr
+_020E6BD0: ; 0x020E6BD0
+ cmp r0, #0x0
+ beq _020E6DDC
+ sub r0, r0, r6
+ add r0, r0, r0, lsr #0x1f
+ mov r7, r0, asr #0x1
+ b _020E6DDC
+_020E6BE8:
+ mov r0, r6
+ bl wcslen
+ mov r7, r0
+ b _020E6DDC
+_020E6BF8:
+ ldr r0, [sp, #0x464]
+ add r0, r0, #0x4
+ str r0, [sp, #0x464]
+ ldr r5, [r0, #-0x4]
+ ldrb r0, [sp, #0x23]
+ cmp r5, #0x0
+ ldreq r5, _020E6F40 ; =0x02106E44
+ cmp r0, #0x0
+ beq _020E6C40
+ ldrh r1, [r6, #0x0]
+ ldrb r0, [sp, #0x22]
+ and r6, r1, #0xff
+ cmp r0, #0x0
+ beq _020E6C78
+ ldr r0, [sp, #0x2c]
+ cmp r6, r0
+ movgt r6, r0
+ b _020E6C78
+_020E6C40:
+ ldrb r0, [sp, #0x22]
+ cmp r0, #0x0
+ beq _020E6C6C
+ ldr r6, [sp, #0x2c]
+ mov r0, r5
+ mov r2, r6
+ mov r1, #0x0
+ bl memchr
+_020E6C60: ; 0x020E6C60
+ cmp r0, #0x0
+ subne r6, r0, r5
+ b _020E6C78
+_020E6C6C:
+ mov r0, r5
+ bl strlen
+ mov r6, r0
+_020E6C78:
+ add r0, sp, #0x30
+ mov r1, r5
+ mov r2, r6
+ bl mbstowcs
+ movs r7, r0
+ bmi _020E6D90
+ add r6, sp, #0x30
+ b _020E6DDC
+_020E6C98:
+ ldr r1, [sp, #0x464]
+ ldrb r0, [sp, #0x24]
+ add r1, r1, #0x4
+ str r1, [sp, #0x464]
+ ldr r6, [r1, #-0x4]
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020E6F18
+_020E6CB8:
+ b _020E6CDC
+_020E6CBC:
+ b _020E6F18
+_020E6CC0:
+ b _020E6CE4
+_020E6CC4:
+ b _020E6CEC
+_020E6CC8:
+ b _020E6D14
+_020E6CCC:
+ b _020E6F18
+_020E6CD0:
+ b _020E6CF4
+_020E6CD4:
+ b _020E6D04
+_020E6CD8:
+ b _020E6D0C
+_020E6CDC:
+ str r4, [r6, #0x0]
+ b _020E6F18
+_020E6CE4:
+ strh r4, [r6, #0x0]
+ b _020E6F18
+_020E6CEC:
+ str r4, [r6, #0x0]
+ b _020E6F18
+_020E6CF4:
+ str r4, [r6, #0x0]
+ mov r0, r4, asr #0x1f
+ str r0, [r6, #0x4]
+ b _020E6F18
+_020E6D04:
+ str r4, [r6, #0x0]
+ b _020E6F18
+_020E6D0C:
+ str r4, [r6, #0x0]
+ b _020E6F18
+_020E6D14:
+ str r4, [r6, #0x0]
+ mov r0, r4, asr #0x1f
+ str r0, [r6, #0x4]
+ b _020E6F18
+_020E6D24:
+ ldrb r0, [sp, #0x24]
+ add r6, sp, #0x30
+ cmp r0, #0x5
+ bne _020E6D50
+ ldr r0, [sp, #0x464]
+ mov r7, #0x1
+ add r0, r0, #0x4
+ str r0, [sp, #0x464]
+ ldr r0, [r0, #-0x4]
+ strh r0, [r6, #0x0]
+ b _020E6DDC
+_020E6D50:
+ ldr r0, [sp, #0x464]
+ add r1, sp, #0x18
+ add r0, r0, #0x4
+ str r0, [sp, #0x464]
+ ldr r3, [r0, #-0x4]
+ mov r0, r6
+ mov r2, #0x1
+ strb r3, [sp, #0x18]
+ bl mbtowc
+ mov r7, r0
+ b _020E6DDC
+_020E6D7C:
+ mov r0, #0x25
+ strh r0, [sp, #0x30]
+ add r6, sp, #0x30
+ mov r7, #0x1
+ b _020E6DDC
+_020E6D90:
+ ldr r0, [sp, #0xc]
+ bl wcslen
+ movs r5, r0
+ beq _020E6DC8
+ ldr r1, [sp, #0xc]
+ mov r0, r8
+ mov r2, r5
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E6DC8:
+ add sp, sp, #0x430
+ add r0, r4, r5
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E6DDC:
+ ldrb r0, [sp, #0x20]
+ mov r5, r7
+ cmp r0, #0x0
+ beq _020E6E8C
+ cmp r0, #0x2
+ moveq r1, #0x30
+ movne r1, #0x20
+ strh r1, [sp, #0x1c]
+ ldrh r0, [r6, #0x0]
+ cmp r0, #0x2b
+ cmpne r0, #0x2d
+ cmpne r0, #0x20
+ bne _020E6E48
+ cmp r1, #0x30
+ bne _020E6E48
+ mov r0, r8
+ mov r1, r6
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ add r6, r6, #0x2
+ sub r7, r7, #0x1
+_020E6E48:
+ ldr r0, [sp, #0x28]
+ cmp r5, r0
+ bge _020E6E8C
+_020E6E54:
+ mov r0, r8
+ add r1, sp, #0x1c
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x28]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blt _020E6E54
+_020E6E8C:
+ cmp r7, #0x0
+ beq _020E6EBC
+ mov r0, r8
+ mov r1, r6
+ mov r2, r7
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E6EBC:
+ ldrb r0, [sp, #0x20]
+ cmp r0, #0x0
+ bne _020E6F14
+ ldr r0, [sp, #0x28]
+ cmp r5, r0
+ bge _020E6F14
+ mov r7, #0x20
+_020E6ED8:
+ mov r0, r8
+ add r1, sp, #0x1a
+ mov r2, #0x1
+ strh r7, [sp, #0x1a]
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x430
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x28]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blt _020E6ED8
+_020E6F14:
+ add r4, r4, r5
+_020E6F18:
+ ldrh r0, [r11, #0x0]
+ cmp r0, #0x0
+ bne _020E6684
+_020E6F24:
+ mov r0, r4
+ add sp, sp, #0x430
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E6F38: .word 0x0000FFFF
+_020E6F3C: .word 0x02106E40
+_020E6F40: .word 0x02106E44
+
+ arm_func_start __wStringWrite
+__wStringWrite: ; 0x020E6F44
+ stmdb sp!, {r3-r5,lr}
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ mov r5, r2
+ ldr r2, [r4, #0x4]
+ add r0, r3, r5
+ cmp r0, r2
+ ldr r0, [r4, #0x0]
+ subhi r5, r2, r3
+ mov r2, r5
+ add r0, r0, r3, lsl #0x1
+ bl wmemcpy
+ ldr r1, [r4, #0x8]
+ add r1, r1, r5
+ str r1, [r4, #0x8]
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start swprintf
+swprintf: ; 0x020E6F84
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r3, sp, #0x10
+ bic r3, r3, #0x3
+ ldr r2, [sp, #0x10]
+ add r3, r3, #0x4
+ bl vswprintf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start vswprintf
+vswprintf: ; 0x020E6FAC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ mov r12, #0x0
+ ldr r0, _020E7018 ; =__wStringWrite
+ add r1, sp, #0x0
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str r12, [sp, #0x8]
+ bl __wpformatter
+_020E6FD8: ; 0x020E6FD8
+ cmp r0, #0x0
+ addlt sp, sp, #0xc
+ ldmltia sp!, {r4-r5,pc}
+_020E6FE4: ; 0x020E6FE4
+ cmp r0, r4
+ bhs _020E7000
+ mov r1, r0, lsl #0x1
+ mov r2, #0x0
+ add sp, sp, #0xc
+ strh r2, [r5, r1]
+ ldmia sp!, {r4-r5,pc}
+_020E7000:
+ mov r1, #0x0
+ add r0, r5, r4, lsl #0x1
+ strh r1, [r0, #-0x2]
+ sub r0, r1, #0x1
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020E7018: .word __wStringWrite
+
+ arm_func_start wcslen
+wcslen: ; 0x020E701C
+ mvn r2, #0x0
+_020E7020:
+ ldrh r1, [r0], #0x2
+ add r2, r2, #0x1
+ cmp r1, #0x0
+ bne _020E7020
+ mov r0, r2
+ bx lr
+
+ arm_func_start wcscpy
+wcscpy: ; 0x020E7038
+ mov r3, r0
+_020E703C:
+ ldrh r2, [r1], #0x2
+ mov r12, r3
+ strh r2, [r3], #0x2
+ ldrh r2, [r12, #0x0]
+ cmp r2, #0x0
+ bne _020E703C
+ bx lr
+
+ arm_func_start wcschr
+wcschr: ; 0x020E7058
+ ldrh r2, [r0], #0x2
+ cmp r2, #0x0
+ beq _020E707C
+_020E7064:
+ cmp r2, r1
+ subeq r0, r0, #0x2
+ bxeq lr
+ ldrh r2, [r0], #0x2
+ cmp r2, #0x0
+ bne _020E7064
+_020E707C:
+ cmp r1, #0x0
+ movne r0, #0x0
+ subeq r0, r0, #0x2
+ bx lr
+
+ arm_func_start __ieee754_pow
+__ieee754_pow: ; 0x020E708C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x80
+ ldr r8, [sp, #0xb4]
+ ldr r6, [sp, #0xac]
+ ldr r0, [sp, #0xb0]
+ bic r9, r8, #0x80000000
+ orrs r1, r9, r0
+ ldr r7, [sp, #0xa8]
+ bic r4, r6, #0x80000000
+ addeq sp, sp, #0x80
+ moveq r0, #0x0
+ ldreq r1, _020E7638 ; =0x3FF00000
+ ldmeqia sp!, {r3-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r1, _020E763C ; =0x7FF00000
+ cmp r4, r1
+ bgt _020E70FC
+ bne _020E70E4
+ cmp r7, #0x0
+ bne _020E70FC
+_020E70E4:
+ ldr r1, _020E763C ; =0x7FF00000
+ cmp r9, r1
+ bgt _020E70FC
+ bne _020E7120
+ cmp r0, #0x0
+ beq _020E7120
+_020E70FC:
+ ldr r0, [sp, #0xa8]
+ ldr r1, [sp, #0xac]
+ ldr r2, [sp, #0xb0]
+ ldr r3, [sp, #0xb4]
+ bl _dadd
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7120:
+ cmp r6, #0x0
+ mov r5, #0x0
+ bge _020E7188
+ ldr r1, _020E7640 ; =0x43400000
+ cmp r9, r1
+ movge r5, #0x2
+ bge _020E7188
+ sub r1, r1, #0x3500000
+ cmp r9, r1
+ blt _020E7188
+ ldr r1, _020E7644 ; =0xFFFFFC01
+ add r1, r1, r9, asr #0x14
+ cmp r1, #0x14
+ ble _020E7170
+ rsb r2, r1, #0x34
+ mov r1, r0, lsr r2
+ cmp r0, r1, lsl r2
+ andeq r1, r1, #0x1
+ rsbeq r5, r1, #0x2
+ b _020E7188
+_020E7170:
+ cmp r0, #0x0
+ rsbeq r2, r1, #0x14
+ moveq r1, r9, asr r2
+ cmpeq r9, r1, lsl r2
+ andeq r1, r1, #0x1
+ rsbeq r5, r1, #0x2
+_020E7188:
+ cmp r0, #0x0
+ bne _020E72E4
+ ldr r1, _020E763C ; =0x7FF00000
+ cmp r9, r1
+ bne _020E723C
+ add r0, r4, #0x100000
+ add r0, r0, #0xc0000000
+ orrs r0, r0, r7
+ bne _020E71D0
+ ldr r0, [sp, #0xb0]
+ ldr r1, [sp, #0xb4]
+ mov r2, r0
+ mov r3, r1
+ bl _dsub
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E71D0:
+ sub r0, r1, #0x40000000
+ cmp r4, r0
+ blt _020E7200
+ cmp r8, #0x0
+ ldrge r0, [sp, #0xb0]
+ ldrge r1, [sp, #0xb4]
+ movlt r0, #0x0
+ add sp, sp, #0x80
+ movlt r1, r0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7200:
+ cmp r8, #0x0
+ mov r0, #0x0
+ addge sp, sp, #0x80
+ movge r1, r0
+ ldmgeia sp!, {r3-r11,lr}
+ addge sp, sp, #0x10
+ bxge lr
+ ldr r2, [sp, #0xb0]
+ ldr r3, [sp, #0xb4]
+ mov r1, r0
+ bl _dsub
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E723C:
+ sub r0, r1, #0x40000000
+ cmp r9, r0
+ bne _020E7288
+ cmp r8, #0x0
+ ldrge r0, [sp, #0xa8]
+ ldrge r1, [sp, #0xac]
+ addge sp, sp, #0x80
+ ldmgeia sp!, {r3-r11,lr}
+ addge sp, sp, #0x10
+ bxge lr
+ ldr r2, [sp, #0xa8]
+ ldr r3, [sp, #0xac]
+ sub r1, r1, #0x40000000
+ mov r0, #0x0
+ bl _ddiv
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7288:
+ cmp r8, #0x40000000
+ bne _020E72B4
+ ldr r0, [sp, #0xa8]
+ ldr r1, [sp, #0xac]
+ mov r2, r0
+ mov r3, r1
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E72B4:
+ ldr r0, _020E7648 ; =0x3FE00000
+ cmp r8, r0
+ bne _020E72E4
+ cmp r6, #0x0
+ blt _020E72E4
+ ldr r0, [sp, #0xa8]
+ ldr r1, [sp, #0xac]
+ bl _dsqrt
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E72E4:
+ ldr r0, [sp, #0xa8]
+ ldr r1, [sp, #0xac]
+ bl fabs
+ str r0, [sp, #0x70]
+ str r1, [sp, #0x74]
+ cmp r7, #0x0
+ bne _020E73E8
+ ldr r0, _020E763C ; =0x7FF00000
+ cmp r4, r0
+ cmpne r4, #0x0
+ subne r0, r0, #0x40000000
+ cmpne r4, r0
+ bne _020E73E8
+ ldr r2, [sp, #0x70]
+ ldr r3, [sp, #0x74]
+ str r2, [sp, #0x78]
+ str r3, [sp, #0x7c]
+ cmp r8, #0x0
+ bge _020E7344
+ ldr r1, _020E7638 ; =0x3FF00000
+ mov r0, #0x0
+ bl _ddiv
+ str r0, [sp, #0x78]
+ str r1, [sp, #0x7c]
+_020E7344:
+ cmp r6, #0x0
+ bge _020E73D0
+ add r0, r4, #0x100000
+ add r0, r0, #0xc0000000
+ orrs r0, r0, r5
+ bne _020E73AC
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ mov r2, r0
+ mov r3, r1
+ bl _dsub
+ mov r4, r0
+ mov r5, r1
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ mov r2, r0
+ mov r3, r1
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r5
+ bl _ddiv
+ str r0, [sp, #0x78]
+ str r1, [sp, #0x7c]
+ b _020E73D0
+_020E73AC:
+ cmp r5, #0x1
+ bne _020E73D0
+ mov r0, #0x0
+ ldr r2, [sp, #0x78]
+ ldr r3, [sp, #0x7c]
+ mov r1, r0
+ bl _dsub
+ str r0, [sp, #0x78]
+ str r1, [sp, #0x7c]
+_020E73D0:
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E73E8:
+ mov r0, r6, asr #0x1f
+ add r7, r0, #0x1
+ orrs r0, r7, r5
+ bne _020E7420
+ ldr r0, _020E764C ; =0x02106B78
+ ldr r1, _020E7650 ; =0x021D74A8
+ ldr r0, [r0, #0x0]
+ mov r2, #0x21
+ str r2, [r1, #0x0]
+ bl _f2d
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7420:
+ ldr r3, _020E7654 ; =0x41E00000
+ cmp r9, r3
+ ble _020E7724
+ add r0, r3, #0x2100000
+ cmp r9, r0
+ ble _020E7490
+ ldr r1, _020E7658 ; =0x3FEFFFFF
+ cmp r4, r1
+ bgt _020E7464
+ cmp r8, #0x0
+ mov r0, #0x0
+ addlt r1, r1, #0x40000001
+ add sp, sp, #0x80
+ movge r1, r0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7464:
+ add r0, r1, #0x1
+ cmp r4, r0
+ blt _020E7490
+ cmp r8, #0x0
+ mov r0, #0x0
+ addgt r1, r1, #0x40000001
+ add sp, sp, #0x80
+ movle r1, r0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7490:
+ ldr r2, _020E7658 ; =0x3FEFFFFF
+ cmp r4, r2
+ bge _020E74BC
+ cmp r8, #0x0
+ mov r0, #0x0
+ addlt r1, r2, #0x40000001
+ add sp, sp, #0x80
+ movge r1, r0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E74BC:
+ add r0, r2, #0x1
+ cmp r4, r0
+ ble _020E74E8
+ cmp r8, #0x0
+ mov r0, #0x0
+ addgt r1, r2, #0x40000001
+ add sp, sp, #0x80
+ movle r1, r0
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E74E8:
+ ldr r0, [sp, #0xa8]
+ ldr r1, [sp, #0xac]
+ add r3, r2, #0x1
+ mov r2, #0x0
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ str r0, [sp, #0x50]
+ str r1, [sp, #0x54]
+ bl _dmul
+ mov r6, r1
+ mov r4, r0
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ ldr r1, _020E765C ; =0x3FD00000
+ mov r0, #0x0
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7660 ; =0x55555555
+ sub r1, r0, #0x15800000
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, #0x0
+ ldr r1, _020E7648 ; =0x3FE00000
+ bl _dsub
+ mov r2, r0
+ mov r0, r4
+ mov r3, r1
+ mov r1, r6
+ bl _dmul
+ mov r6, r0
+ mov r8, r1
+ mov r0, #0x60000000
+ ldr r1, _020E7664 ; =0x3FF71547
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ bl _dmul
+ mov r4, r0
+ mov r9, r1
+ ldr r0, _020E7668 ; =0xF85DDF44
+ ldr r1, _020E766C ; =0x3E54AE0B
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ bl _dmul
+ mov r11, r0
+ mov r10, r1
+ ldr r0, _020E7670 ; =0x652B82FE
+ ldr r1, _020E7664 ; =0x3FF71547
+ mov r2, r6
+ mov r3, r8
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r11
+ mov r1, r10
+ bl _dsub
+ mov r6, r0
+ mov r8, r1
+ mov r0, r4
+ mov r1, r9
+ mov r2, r6
+ mov r3, r8
+ bl _dadd
+ mov r2, r4
+ mov r3, r9
+ str r1, [sp, #0x5c]
+ mov r0, #0x0
+ str r0, [sp, #0x58]
+ bl _dsub
+ mov r2, r0
+ mov r0, r6
+ mov r3, r1
+ mov r1, r8
+ bl _dsub
+ mov r4, r0
+ mov r8, r1
+ b _020E7C80
+ .balign 4
+_020E7638: .word 0x3FF00000
+_020E763C: .word 0x7FF00000
+_020E7640: .word 0x43400000
+_020E7644: .word 0xFFFFFC01
+_020E7648: .word 0x3FE00000
+_020E764C: .word 0x02106B78
+_020E7650: .word 0x021D74A8
+_020E7654: .word 0x41E00000
+_020E7658: .word 0x3FEFFFFF
+_020E765C: .word 0x3FD00000
+_020E7660: .word 0x55555555
+_020E7664: .word 0x3FF71547
+_020E7668: .word 0xF85DDF44
+_020E766C: .word 0x3E54AE0B
+_020E7670: .word 0x652B82FE
+_020E7674: .word 0x0003988E
+_020E7678: .word 0x000BB67A
+_020E767C: .word 0x02104754
+_020E7680: .word 0x4A454EEF
+_020E7684: .word 0x3FCA7E28
+_020E7688: .word 0x93C9DB65
+_020E768C: .word 0x3FCD864A
+_020E7690: .word 0xA91D4101
+_020E7694: .word 0x3FD17460
+_020E7698: .word 0x518F264D
+_020E769C: .word 0x3FD55555
+_020E76A0: .word 0xDB6FABFF
+_020E76A4: .word 0x3FDB6DB6
+_020E76A8: .word 0x33333303
+_020E76AC: .word 0x3FE33333
+_020E76B0: .word 0x40080000
+_020E76B4: .word 0x3FEEC709
+_020E76B8: .word 0x145B01F5
+_020E76BC: .word 0xBE3E2FE0
+_020E76C0: .word 0xDC3A03FD
+_020E76C4: .word 0x02104764
+_020E76C8: .word 0x02104744
+_020E76CC: .word 0x40900000
+_020E76D0: .word 0x8800759C
+_020E76D4: .word 0x7E37E43C
+_020E76D8: .word 0x3C971547
+_020E76DC: .word 0x3F6F3400
+_020E76E0: .word 0xC2F8F359
+_020E76E4: .word 0x01A56E1F
+_020E76E8: .word 0x3FE62E43
+_020E76EC: .word 0xFEFA39EF
+_020E76F0: .word 0x3FE62E42
+_020E76F4: .word 0x0CA86C39
+_020E76F8: .word 0xBE205C61
+_020E76FC: .word 0x72BEA4D0
+_020E7700: .word 0x3E663769
+_020E7704: .word 0xC5D26BF1
+_020E7708: .word 0xBEBBBD41
+_020E770C: .word 0xAF25DE2C
+_020E7710: .word 0x3F11566A
+_020E7714: .word 0x16BEBD93
+_020E7718: .word 0xBF66C16C
+_020E771C: .word 0x5555553E
+_020E7720: .word 0x3FC55555
+_020E7724:
+ cmp r4, #0x100000
+ mov r6, #0x0
+ bge _020E7754
+ ldr r0, [sp, #0x70]
+ ldr r1, [sp, #0x74]
+ mov r2, r6
+ add r3, r3, #0x1600000
+ bl _dmul
+ mov r4, r1
+ str r0, [sp, #0x70]
+ str r4, [sp, #0x74]
+ sub r6, r6, #0x35
+_020E7754:
+ ldr r0, _020E7644 ; =0xFFFFFC01
+ ldr r1, _020E7674 ; =0x0003988E
+ and r2, r4, r0, lsr #0xc
+ add r0, r0, r4, asr #0x14
+ orr r9, r2, #0xff00000
+ cmp r2, r1
+ add r6, r6, r0
+ orr r9, r9, #0x30000000
+ movle r8, #0x0
+ ble _020E7794
+ ldr r0, _020E7678 ; =0x000BB67A
+ cmp r2, r0
+ movlt r8, #0x1
+ addge r6, r6, #0x1
+ subge r9, r9, #0x100000
+ movge r8, #0x0
+_020E7794:
+ ldr r2, _020E767C ; =0x02104754
+ ldr r0, [sp, #0x70]
+ add r1, r2, r8, lsl #0x3
+ ldr r3, [r1, #0x4]
+ ldr r2, [r2, r8, lsl #0x3]
+ mov r1, r9
+ str r9, [sp, #0x74]
+ bl _dsub
+ ldr r2, _020E767C ; =0x02104754
+ mov r10, r0
+ add r3, r2, r8, lsl #0x3
+ mov r4, r1
+ ldr r0, [sp, #0x70]
+ ldr r2, [r2, r8, lsl #0x3]
+ ldr r3, [r3, #0x4]
+ mov r1, r9
+ bl _dadd
+ mov r3, r1
+ mov r2, r0
+ ldr r1, _020E7638 ; =0x3FF00000
+ mov r0, #0x0
+ bl _ddiv
+ str r1, [sp, #0x24]
+ mov r11, r0
+ ldr r3, [sp, #0x24]
+ mov r0, r10
+ mov r1, r4
+ mov r2, r11
+ bl _dmul
+ mov r2, r9, asr #0x1
+ orr r2, r2, #0x20000000
+ mov r9, r1
+ add r2, r2, #0x80000
+ add r1, r2, r8, lsl #0x12
+ ldr r2, _020E767C ; =0x02104754
+ str r0, [sp, #0x28]
+ add r3, r2, r8, lsl #0x3
+ mov r0, #0x0
+ ldr r2, [r2, r8, lsl #0x3]
+ ldr r3, [r3, #0x4]
+ str r9, [sp, #0x4c]
+ str r1, [sp, #0x44]
+ str r0, [sp, #0x48]
+ str r0, [sp, #0x40]
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x70]
+ ldr r1, [sp, #0x74]
+ bl _dsub
+ str r0, [sp, #0x2c]
+ str r1, [sp, #0x1c]
+ ldr r0, [sp, #0x48]
+ ldr r2, [sp, #0x40]
+ ldr r3, [sp, #0x44]
+ mov r1, r9
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r10
+ mov r1, r4
+ bl _dsub
+ mov r10, r0
+ mov r4, r1
+ ldr r2, [sp, #0x2c]
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0x48]
+ mov r1, r9
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r10
+ mov r1, r4
+ bl _dsub
+ mov r3, r1
+ mov r2, r0
+ ldr r1, [sp, #0x24]
+ mov r0, r11
+ bl _dmul
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0x28]
+ str r1, [sp, #0x14]
+ mov r1, r9
+ mov r2, r0
+ mov r3, r9
+ bl _dmul
+ mov r4, r0
+ mov r10, r1
+ mov r2, r4
+ mov r3, r10
+ bl _dmul
+ str r0, [sp, #0x34]
+ mov r11, r1
+ ldr r0, _020E7680 ; =0x4A454EEF
+ ldr r1, _020E7684 ; =0x3FCA7E28
+ mov r2, r4
+ mov r3, r10
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7688 ; =0x93C9DB65
+ ldr r1, _020E768C ; =0x3FCD864A
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7690 ; =0xA91D4101
+ ldr r1, _020E7694 ; =0x3FD17460
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7698 ; =0x518F264D
+ ldr r1, _020E769C ; =0x3FD55555
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76A0 ; =0xDB6FABFF
+ ldr r1, _020E76A4 ; =0x3FDB6DB6
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76A8 ; =0x33333303
+ ldr r1, _020E76AC ; =0x3FE33333
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x34]
+ mov r1, r11
+ bl _dmul
+ mov r4, r0
+ mov r10, r1
+ ldr r0, [sp, #0x48]
+ ldr r2, [sp, #0x28]
+ mov r1, r9
+ mov r3, r9
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x30]
+ ldr r1, [sp, #0x14]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dadd
+ mov r4, r0
+ ldr r0, [sp, #0x48]
+ mov r10, r1
+ mov r1, r9
+ mov r2, r0
+ mov r3, r1
+ bl _dmul
+ str r1, [sp, #0xc]
+ mov r11, r0
+ ldr r1, _020E76B0 ; =0x40080000
+ ldr r3, [sp, #0xc]
+ mov r0, #0x0
+ mov r2, r11
+ bl _dadd
+ mov r2, r4
+ mov r3, r10
+ bl _dadd
+_020E7A6C: ; 0x020E7A6C
+ mov r0, #0x0
+ ldr r3, _020E76B0 ; =0x40080000
+ mov r2, r0
+ str r1, [sp, #0x44]
+ str r0, [sp, #0x40]
+ bl _dsub
+ ldr r3, [sp, #0xc]
+ mov r2, r11
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dsub
+ str r0, [sp, #0x38]
+ str r1, [sp, #0x4]
+ ldr r0, [sp, #0x48]
+ ldr r2, [sp, #0x40]
+ ldr r3, [sp, #0x44]
+ mov r1, r9
+ bl _dmul
+ mov r4, r0
+ mov r10, r1
+ ldr r0, [sp, #0x30]
+ ldr r1, [sp, #0x14]
+ ldr r2, [sp, #0x40]
+ ldr r3, [sp, #0x44]
+ bl _dmul
+ str r0, [sp, #0x3c]
+ mov r11, r1
+ ldr r0, [sp, #0x38]
+ ldr r1, [sp, #0x4]
+ ldr r2, [sp, #0x28]
+ mov r3, r9
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x3c]
+ mov r1, r11
+ bl _dadd
+ mov r9, r0
+ mov r11, r1
+ mov r0, r4
+ mov r1, r10
+ mov r2, r9
+ mov r3, r11
+ bl _dadd
+_020E7B28: ; 0x020E7B28
+ mov r0, #0x0
+ mov r2, r4
+ mov r3, r10
+ str r1, [sp, #0x6c]
+ str r0, [sp, #0x68]
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r9
+ mov r1, r11
+ bl _dsub
+ mov r10, r1
+ mov r11, r0
+ ldr r1, _020E76B4 ; =0x3FEEC709
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ mov r0, #0xe0000000
+ bl _dmul
+ mov r4, r0
+ mov r9, r1
+ ldr r0, _020E76B8 ; =0x145B01F5
+ ldr r1, _020E76BC ; =0xBE3E2FE0
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ bl _dmul
+ mov r2, r11
+ mov r3, r10
+ mov r11, r0
+ mov r10, r1
+ ldr r0, _020E76C0 ; =0xDC3A03FD
+ ldr r1, _020E76B4 ; =0x3FEEC709
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r11
+ mov r1, r10
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76C4 ; =0x02104764
+ add r1, r0, r8, lsl #0x3
+ ldr r0, [r0, r8, lsl #0x3]
+ ldr r1, [r1, #0x4]
+ bl _dadd
+ mov r11, r0
+ mov r10, r1
+ mov r0, r6
+ bl _dflt
+ str r0, [sp, #0x50]
+ str r1, [sp, #0x54]
+ mov r0, r4
+ mov r1, r9
+ mov r2, r11
+ mov r3, r10
+ bl _dadd
+ ldr r2, _020E76C8 ; =0x02104744
+ add r3, r2, r8, lsl #0x3
+ ldr r2, [r2, r8, lsl #0x3]
+ ldr r3, [r3, #0x4]
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dadd
+ str r1, [sp, #0x5c]
+ mov r0, #0x0
+ str r0, [sp, #0x58]
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ bl _dsub
+ ldr r2, _020E76C8 ; =0x02104744
+ add r3, r2, r8, lsl #0x3
+ ldr r2, [r2, r8, lsl #0x3]
+ ldr r3, [r3, #0x4]
+ bl _dsub
+ mov r2, r4
+ mov r3, r9
+ bl _dsub
+ mov r2, r0
+ mov r0, r11
+ mov r3, r1
+ mov r1, r10
+ bl _dsub
+ mov r4, r0
+ mov r8, r1
+_020E7C80:
+ sub r0, r5, #0x1
+ ldr r1, [sp, #0xb4]
+ orrs r0, r7, r0
+ ldr r5, _020E7638 ; =0x3FF00000
+ mov r2, #0x0
+ ldr r0, [sp, #0xb0]
+ mov r3, r1
+ mov r6, #0x0
+ subeq r5, r5, #0x80000000
+ str r1, [sp, #0x64]
+ str r2, [sp, #0x60]
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x58]
+ ldr r1, [sp, #0x5c]
+ bl _dmul
+ mov r7, r0
+ mov r9, r1
+ ldr r0, [sp, #0xb0]
+ ldr r1, [sp, #0xb4]
+ mov r2, r4
+ mov r3, r8
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r7
+ mov r1, r9
+ bl _dadd
+ mov r7, r0
+ mov r8, r1
+ ldr r0, [sp, #0x60]
+ ldr r1, [sp, #0x64]
+ ldr r2, [sp, #0x58]
+ ldr r3, [sp, #0x5c]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ mov r0, r7
+ mov r1, r8
+ str r2, [sp, #0x68]
+ str r3, [sp, #0x6c]
+ bl _dadd
+ mov r9, r1
+ ldr r2, _020E76CC ; =0x40900000
+ str r0, [sp, #0x78]
+ str r9, [sp, #0x7c]
+ cmp r9, r2
+ blt _020E7E0C
+ add r1, r9, #0xf700000
+ add r1, r1, #0xb0000000
+ orrs r0, r1, r0
+ beq _020E7D8C
+ ldr r0, _020E76D0 ; =0x8800759C
+ ldr r1, _020E76D4 ; =0x7E37E43C
+ mov r2, r6
+ mov r3, r5
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76D0 ; =0x8800759C
+ ldr r1, _020E76D4 ; =0x7E37E43C
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7D8C:
+ ldr r0, _020E7670 ; =0x652B82FE
+ ldr r1, _020E76D8 ; =0x3C971547
+ mov r2, r7
+ mov r3, r8
+ bl _dadd
+ mov r4, r0
+ mov r10, r1
+ ldr r0, [sp, #0x78]
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ mov r1, r9
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r10
+ bl _dgr
+ bls _020E7EC0
+ ldr r0, _020E76D0 ; =0x8800759C
+ ldr r1, _020E76D4 ; =0x7E37E43C
+ mov r2, r6
+ mov r3, r5
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76D0 ; =0x8800759C
+ ldr r1, _020E76D4 ; =0x7E37E43C
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7E0C:
+ bic r3, r9, #0x80000000
+ add r2, r2, #0xcc00
+ cmp r3, r2
+ blt _020E7EC0
+ ldr r2, _020E76DC ; =0x3F6F3400
+ add r2, r9, r2
+ orrs r2, r2, r0
+ beq _020E7E64
+ ldr r0, _020E76E0 ; =0xC2F8F359
+ ldr r1, _020E76E4 ; =0x01A56E1F
+ mov r2, r6
+ mov r3, r5
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76E0 ; =0xC2F8F359
+ ldr r1, _020E76E4 ; =0x01A56E1F
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7E64:
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r7
+ mov r1, r8
+ bl _dleq
+ bhi _020E7EC0
+ ldr r0, _020E76E0 ; =0xC2F8F359
+ ldr r1, _020E76E4 ; =0x01A56E1F
+ mov r2, r6
+ mov r3, r5
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76E0 ; =0xC2F8F359
+ ldr r1, _020E76E4 ; =0x01A56E1F
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E7EC0:
+ ldr r0, _020E7644 ; =0xFFFFFC01
+ bic r3, r9, #0x80000000
+ ldr r1, _020E7648 ; =0x3FE00000
+ add r2, r0, r3, asr #0x14
+ cmp r3, r1
+ mov r4, #0x0
+ ble _020E7F3C
+ mov r1, #0x100000
+ add r2, r2, #0x1
+ add r2, r9, r1, asr r2
+ bic r3, r2, #0x80000000
+ add r0, r0, r3, asr #0x14
+ sub r3, r1, #0x1
+ mvn r3, r3, asr r0
+ sub r1, r1, #0x1
+ and r1, r2, r1
+ and r2, r2, r3
+ str r2, [sp, #0x54]
+ str r4, [sp, #0x50]
+ orr r1, r1, #0x100000
+ rsb r0, r0, #0x14
+ mov r4, r1, asr r0
+ cmp r9, #0x0
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x6c]
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ rsblt r4, r4, #0x0
+ bl _dsub
+ str r0, [sp, #0x68]
+ str r1, [sp, #0x6c]
+_020E7F3C:
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ mov r0, r7
+ mov r1, r8
+ bl _dadd
+ mov r3, r1
+ mov r0, #0x0
+ ldr r1, _020E76E8 ; =0x3FE62E43
+ mov r2, r0
+ str r3, [sp, #0x54]
+ str r0, [sp, #0x50]
+ bl _dmul
+ mov r9, r0
+ mov r10, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ ldr r2, [sp, #0x68]
+ ldr r3, [sp, #0x6c]
+ bl _dsub
+ mov r2, r0
+ mov r0, r7
+ mov r3, r1
+ mov r1, r8
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E76EC ; =0xFEFA39EF
+ ldr r1, _020E76F0 ; =0x3FE62E42
+ bl _dmul
+ mov r7, r0
+ mov r8, r1
+ ldr r0, _020E76F4 ; =0x0CA86C39
+ ldr r1, _020E76F8 ; =0xBE205C61
+ ldr r2, [sp, #0x50]
+ ldr r3, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r0, r7
+ mov r3, r1
+ mov r1, r8
+ bl _dadd
+ mov r7, r0
+ mov r8, r1
+ mov r0, r9
+ mov r1, r10
+ mov r2, r7
+ mov r3, r8
+ bl _dadd
+ mov r2, r9
+ mov r3, r10
+ str r0, [sp, #0x78]
+ str r1, [sp, #0x7c]
+ bl _dsub
+ mov r2, r0
+ mov r3, r1
+ mov r0, r7
+ mov r1, r8
+ bl _dsub
+ mov r8, r0
+ mov r9, r1
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ mov r2, r0
+ mov r3, r1
+ bl _dmul
+ mov r2, r0
+ str r2, [sp, #0x50]
+ mov r3, r1
+ str r3, [sp, #0x54]
+ ldr r0, _020E76FC ; =0x72BEA4D0
+ ldr r1, _020E7700 ; =0x3E663769
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7704 ; =0xC5D26BF1
+ ldr r1, _020E7708 ; =0xBEBBBD41
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E770C ; =0xAF25DE2C
+ ldr r1, _020E7710 ; =0x3F11566A
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E7714 ; =0x16BEBD93
+ ldr r1, _020E7718 ; =0xBF66C16C
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E771C ; =0x5555553E
+ ldr r1, _020E7720 ; =0x3FC55555
+ bl _dadd
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x50]
+ ldr r1, [sp, #0x54]
+ bl _dmul
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ bl _dsub
+ mov r2, r0
+ str r2, [sp, #0x58]
+ mov r3, r1
+ str r3, [sp, #0x5c]
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ bl _dmul
+ mov r7, r0
+ mov r10, r1
+ ldr r0, [sp, #0x58]
+ ldr r1, [sp, #0x5c]
+ mov r2, #0x0
+ mov r3, #0x40000000
+ bl _dsub
+ mov r2, r0
+ mov r0, r7
+ mov r3, r1
+ mov r1, r10
+ bl _ddiv
+ mov r7, r0
+ mov r10, r1
+ ldr r0, [sp, #0x78]
+ ldr r1, [sp, #0x7c]
+ mov r2, r8
+ mov r3, r9
+ bl _dmul
+ mov r2, r0
+ mov r0, r8
+ mov r3, r1
+ mov r1, r9
+ bl _dadd
+ mov r2, r0
+ mov r0, r7
+ mov r3, r1
+ mov r1, r10
+ bl _dsub
+ ldr r2, [sp, #0x78]
+ ldr r3, [sp, #0x7c]
+ bl _dsub
+ mov r3, r1
+ mov r2, r0
+ ldr r1, _020E7638 ; =0x3FF00000
+ mov r0, #0x0
+ bl _dsub
+ add r3, r1, r4, lsl #0x14
+ mov r2, r3, asr #0x14
+ str r0, [sp, #0x78]
+ cmp r2, #0x0
+ str r1, [sp, #0x7c]
+ addgt r0, sp, #0x78
+ strgt r3, [r0, #0x4]
+ bgt _020E81F0
+ mov r2, r4
+ bl scalbn
+ str r0, [sp, #0x78]
+ str r1, [sp, #0x7c]
+_020E81F0:
+ ldr r2, [sp, #0x78]
+ ldr r3, [sp, #0x7c]
+ mov r0, r6
+ mov r1, r5
+ bl _dmul
+ add sp, sp, #0x80
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start copysign
+copysign: ; 0x020E8214
+ stmdb sp!, {r0-r3}
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0xc]
+ bic r1, r1, #0x80000000
+ and r0, r0, #0x80000000
+ orr r1, r1, r0
+ ldr r0, [sp, #0x0]
+ str r1, [sp, #0x4]
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start fabs
+fabs: ; 0x020E823C
+ stmdb sp!, {r0-r3}
+ add r2, sp, #0x0
+ ldr r1, [r2, #0x4]
+ ldr r0, [sp, #0x0]
+ bic r1, r1, #0x80000000
+ str r1, [r2, #0x4]
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start frexp
+frexp: ; 0x020E825C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4,lr}
+ ldr r1, [sp, #0xc]
+ ldr r0, _020E8308 ; =0x7FF00000
+ mov r4, r2
+ bic r3, r1, #0x80000000
+ mov r2, #0x0
+ str r2, [r4, #0x0]
+ cmp r3, r0
+ ldr r0, [sp, #0x8]
+ bge _020E8290
+ orrs r0, r3, r0
+ bne _020E82A4
+_020E8290:
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E82A4:
+ cmp r3, #0x100000
+ bge _020E82D0
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ ldr r3, _020E830C ; =0x43500000
+ bl _dmul
+ mvn r2, #0x35
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+ str r2, [r4, #0x0]
+ bic r3, r1, #0x80000000
+_020E82D0:
+ ldr r2, _020E8310 ; =0x800FFFFF
+ ldr r0, _020E8314 ; =0xFFFFFC02
+ and r1, r1, r2
+ orr r1, r1, #0xfe00000
+ orr r1, r1, #0x30000000
+ ldr r2, [r4, #0x0]
+ add r0, r0, r3, asr #0x14
+ add r2, r2, r0
+ ldr r0, [sp, #0x8]
+ str r2, [r4, #0x0]
+ str r1, [sp, #0xc]
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E8308: .word 0x7FF00000
+_020E830C: .word 0x43500000
+_020E8310: .word 0x800FFFFF
+_020E8314: .word 0xFFFFFC02
+
+ arm_func_start ldexp
+ldexp: ; 0x020E8318
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4,lr}
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ mov r4, r2
+ bl __fpclassifyf
+ cmp r0, #0x2
+ ble _020E8350
+ mov r0, #0x0
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ mov r1, r0
+ bl _deq
+ bne _020E8364
+_020E8350:
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E8364:
+ ldr r3, [sp, #0xc]
+ ldr r0, _020E8538 ; =0x7FF00000
+ ldr r1, [sp, #0x8]
+ and r0, r3, r0
+ movs r12, r0, asr #0x14
+ bne _020E83F0
+ bic r0, r3, #0x80000000
+ orrs r0, r1, r0
+ ldreq r0, [sp, #0x8]
+ ldreq r1, [sp, #0xc]
+ ldmeqia sp!, {r4,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ ldr r3, _020E853C ; =0x43500000
+ mov r2, #0x0
+ bl _dmul
+ mov r3, r1
+ ldr r1, _020E8538 ; =0x7FF00000
+ ldr ip, _020E8540 ; =0xFFFF3CB0
+ and r1, r3, r1
+ mov r2, r0
+ mov r0, r1, asr #0x14
+ str r2, [sp, #0x8]
+ str r3, [sp, #0xc]
+ cmp r4, r12
+ sub r12, r0, #0x36
+ bge _020E83F0
+ ldr r0, _020E8544 ; =0xC2F8F359
+ ldr r1, _020E8548 ; =0x01A56E1F
+ bl _dmul
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E83F0:
+ ldr r0, _020E854C ; =0x000007FF
+ cmp r12, r0
+ bne _020E841C
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ mov r2, r0
+ mov r3, r1
+ bl _dadd
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E841C:
+ add r2, r12, r4
+ sub r0, r0, #0x1
+ cmp r2, r0
+ ble _020E8460
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r0, _020E8550 ; =0x8800759C
+ ldr r1, _020E8554 ; =0x7E37E43C
+ bl copysign
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E8550 ; =0x8800759C
+ ldr r1, _020E8554 ; =0x7E37E43C
+ bl _dmul
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E8460:
+ cmp r2, #0x0
+ ble _020E8488
+ ldr r1, _020E8558 ; =0x800FFFFF
+ ldr r0, [sp, #0x8]
+ and r1, r3, r1
+ orr r1, r1, r2, lsl #0x14
+ str r1, [sp, #0xc]
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E8488:
+ mvn r0, #0x35
+ cmp r2, r0
+ bgt _020E8508
+ ldr r0, _020E855C ; =0x0000C350
+ cmp r4, r0
+ ble _020E84D4
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r0, _020E8550 ; =0x8800759C
+ ldr r1, _020E8554 ; =0x7E37E43C
+ bl copysign
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E8550 ; =0x8800759C
+ ldr r1, _020E8554 ; =0x7E37E43C
+ bl _dmul
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E84D4:
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r0, _020E8544 ; =0xC2F8F359
+ ldr r1, _020E8548 ; =0x01A56E1F
+ bl copysign
+ mov r2, r0
+ mov r3, r1
+ ldr r0, _020E8544 ; =0xC2F8F359
+ ldr r1, _020E8548 ; =0x01A56E1F
+ bl _dmul
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E8508:
+ ldr r0, _020E8558 ; =0x800FFFFF
+ add r1, r2, #0x36
+ and r0, r3, r0
+ orr r3, r0, r1, lsl #0x14
+ ldr r2, [sp, #0x8]
+ ldr r1, _020E8560 ; =0x3C900000
+ mov r0, #0x0
+ str r3, [sp, #0xc]
+ bl _dmul
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E8538: .word 0x7FF00000
+_020E853C: .word 0x43500000
+_020E8540: .word 0xFFFF3CB0
+_020E8544: .word 0xC2F8F359
+_020E8548: .word 0x01A56E1F
+_020E854C: .word 0x000007FF
+_020E8550: .word 0x8800759C
+_020E8554: .word 0x7E37E43C
+_020E8558: .word 0x800FFFFF
+_020E855C: .word 0x0000C350
+_020E8560: .word 0x3C900000
+
+ arm_func_start pow
+pow: ; 0x020E8564
+ ldr ip, _020E856C ; =__ieee754_pow
+ bx r12
+ .balign 4
+_020E856C: .word __ieee754_pow
+
+ arm_func_start __must_round
+__must_round: ; 0x020E8570
+ add r3, r0, #0x5
+ ldrb r2, [r3, r1]
+ add r12, r3, r1
+ cmp r2, #0x5
+ movhi r0, #0x1
+ bxhi lr
+ mvncc r0, #0x0
+ bxcc lr
+ ldrb r2, [r0, #0x4]
+ add r12, r12, #0x1
+ add r3, r3, r2
+ cmp r12, r3
+ bhs _020E85C0
+_020E85A4:
+ ldrb r2, [r12, #0x0]
+ cmp r2, #0x0
+ movne r0, #0x1
+ bxne lr
+ add r12, r12, #0x1
+ cmp r12, r3
+ blo _020E85A4
+_020E85C0:
+ sub r1, r1, #0x1
+ add r0, r0, r1
+ ldrb r0, [r0, #0x5]
+ tst r0, #0x1
+ movne r0, #0x1
+ mvneq r0, #0x0
+ bx lr
+
+ arm_func_start __dorounddecup
+__dorounddecup: ; 0x020E85DC
+ add r3, r0, #0x5
+ add r1, r3, r1
+ sub r12, r1, #0x1
+ mov r1, #0x0
+_020E85EC:
+ ldrb r2, [r12, #0x0]
+ cmp r2, #0x9
+ addcc r0, r2, #0x1
+ strccb r0, [r12, #0x0]
+ bxcc lr
+ cmp r12, r3
+ bne _020E8620
+ mov r1, #0x1
+ strb r1, [r12, #0x0]
+ ldrsh r1, [r0, #0x2]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x2]
+ bx lr
+_020E8620:
+ strb r1, [r12], #-0x1
+ b _020E85EC
+_020E8628: ; 0x020E8628
+ bx lr
+
+ arm_func_start __rounddec
+__rounddec: ; 0x020E862C
+ stmdb sp!, {r3-r5,lr}
+ mov r4, r1
+ mov r5, r0
+ cmp r4, #0x0
+ ldmleia sp!, {r3-r5,pc}
+_020E8640: ; 0x020E8640
+ ldrb r2, [r5, #0x4]
+ cmp r4, r2
+ ldmgeia sp!, {r3-r5,pc}
+_020E864C: ; 0x020E864C
+ bl __must_round
+ strb r4, [r5, #0x4]
+ cmp r0, #0x0
+ ldmltia sp!, {r3-r5,pc}
+_020E865C: ; 0x020E865C
+ mov r0, r5
+ mov r1, r4
+ bl __dorounddecup
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start __ull2dec
+__ull2dec: ; 0x020E866C
+ stmdb sp!, {r3-r11,lr}
+ mov r10, r0
+ mov r0, #0x0
+ mov r8, r2
+ strb r0, [r10, #0x0]
+ mov r9, r1
+ cmp r8, #0x0
+ strb r0, [r10, #0x4]
+ cmpeq r9, #0x0
+ beq _020E86F8
+ mov r6, #0xa
+ mov r11, r0
+ mov r5, r0
+ mov r4, r0
+_020E86A4:
+ ldrb r1, [r10, #0x4]
+ mov r0, r9
+ mov r2, r6
+ add r3, r1, #0x1
+ mov r7, r1
+ strb r3, [r10, #0x4]
+ mov r1, r8
+ mov r3, r11
+ bl _ull_mod
+ add r1, r10, r7
+ strb r0, [r1, #0x5]
+ mov r0, r9
+ mov r1, r8
+ mov r2, #0xa
+ mov r3, #0x0
+ bl _ll_udiv
+ mov r8, r1
+ mov r9, r0
+ cmp r8, r5
+ cmpeq r9, r4
+ bne _020E86A4
+_020E86F8:
+ ldrb r0, [r10, #0x4]
+ add r2, r10, #0x5
+ add r0, r2, r0
+ sub r3, r0, #0x1
+ cmp r2, r3
+ bhs _020E8728
+_020E8710:
+ ldrb r0, [r3, #0x0]
+ ldrb r1, [r2, #0x0]
+ strb r0, [r2], #0x1
+ strb r1, [r3], #-0x1
+ cmp r2, r3
+ blo _020E8710
+_020E8728:
+ ldrb r0, [r10, #0x4]
+ sub r0, r0, #0x1
+ strh r0, [r10, #0x2]
+ ldmia sp!, {r3-r11,pc}
+
+ arm_func_start __timesdec
+__timesdec: ; 0x020E8738
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x40
+ ldrb r6, [r1, #0x4]
+ ldrb r5, [r2, #0x4]
+ mov r4, #0x0
+ add r3, sp, #0x0
+ add r5, r6, r5
+ sub r5, r5, #0x1
+ add r3, r3, r5
+ add r6, r3, #0x1
+ mov r7, r6
+ strb r4, [r0, #0x0]
+ cmp r5, #0x0
+ ble _020E8800
+ add lr, r1, #0x5
+ add r11, r2, #0x5
+_020E8778:
+ ldrb r3, [r2, #0x4]
+ sub r10, r3, #0x1
+ sub r3, r5, r10
+ subs r9, r3, #0x1
+ ldrb r3, [r1, #0x4]
+ movmi r9, #0x0
+ submi r10, r5, #0x1
+ add r8, r10, #0x1
+ sub r3, r3, r9
+ cmp r8, r3
+ movgt r8, r3
+ add r10, r11, r10
+ add r9, lr, r9
+ cmp r8, #0x0
+ ble _020E87CC
+_020E87B4:
+ ldrb r12, [r9], #0x1
+ ldrb r3, [r10], #-0x1
+ sub r8, r8, #0x1
+ cmp r8, #0x0
+ mla r4, r12, r3, r4
+ bgt _020E87B4
+_020E87CC:
+ ldr r3, _020E88B8 ; =0xCCCCCCCD
+ sub r5, r5, #0x1
+ umull r8, r9, r4, r3
+ mov r9, r9, lsr #0x3
+ cmp r5, #0x0
+ mov r10, #0xa
+ umull r8, r9, r10, r9
+ sub r9, r4, r8
+ strb r9, [r6, #-0x1]!
+ mov r8, r4
+ umull r3, r4, r8, r3
+ mov r4, r4, lsr #0x3
+ bgt _020E8778
+_020E8800:
+ ldrsh r3, [r1, #0x2]
+ ldrsh r1, [r2, #0x2]
+ cmp r4, #0x0
+ add r1, r3, r1
+ strh r1, [r0, #0x2]
+ beq _020E8828
+ strb r4, [r6, #-0x1]!
+ ldrsh r1, [r0, #0x2]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x2]
+_020E8828:
+ mov r3, #0x0
+ b _020E8840
+_020E8830:
+ ldrb r2, [r6], #0x1
+ add r1, r0, r3
+ add r3, r3, #0x1
+ strb r2, [r1, #0x5]
+_020E8840:
+ cmp r3, #0x20
+ bge _020E8850
+ cmp r6, r7
+ blo _020E8830
+_020E8850:
+ cmp r6, r7
+ addcs sp, sp, #0x40
+ strb r3, [r0, #0x4]
+ ldmcsia sp!, {r3-r11,pc}
+_020E8860: ; 0x020E8860
+ ldrb r1, [r6, #0x0]
+ cmp r1, #0x5
+ addcc sp, sp, #0x40
+ ldmccia sp!, {r3-r11,pc}
+_020E8870: ; 0x020E8870
+ bne _020E88A8
+ add r2, r6, #0x1
+ cmp r2, r7
+ bhs _020E8898
+_020E8880:
+ ldrb r1, [r2, #0x0]
+ cmp r1, #0x0
+ bne _020E88A8
+ add r2, r2, #0x1
+ cmp r2, r7
+ blo _020E8880
+_020E8898:
+ ldrb r1, [r6, #-0x1]
+ tst r1, #0x1
+ addeq sp, sp, #0x40
+ ldmeqia sp!, {r3-r11,pc}
+_020E88A8:
+ ldrb r1, [r0, #0x4]
+ bl __dorounddecup
+ add sp, sp, #0x40
+ ldmia sp!, {r3-r11,pc}
+ .balign 4
+_020E88B8: .word 0xCCCCCCCD
+
+ arm_func_start __str2dec
+__str2dec: ; 0x020E88BC
+ stmdb sp!, {r3,lr}
+ strh r2, [r0, #0x2]
+ mov r12, #0x0
+ strb r12, [r0, #0x0]
+ b _020E88E4
+_020E88D0:
+ ldrsb r3, [r1], #0x1
+ add r2, r0, r12
+ add r12, r12, #0x1
+ sub r3, r3, #0x30
+ strb r3, [r2, #0x5]
+_020E88E4:
+ cmp r12, #0x20
+ bge _020E88F8
+ ldrsb r2, [r1, #0x0]
+ cmp r2, #0x0
+ bne _020E88D0
+_020E88F8:
+ strb r12, [r0, #0x4]
+ ldrsb r2, [r1, #0x0]
+ cmp r2, #0x0
+ ldmeqia sp!, {r3,pc}
+_020E8908: ; 0x020E8908
+ cmp r2, #0x5
+ ldmltia sp!, {r3,pc}
+_020E8910: ; 0x020E8910
+ bgt _020E894C
+ ldrsb r2, [r1, #0x1]
+ add r1, r1, #0x1
+ cmp r2, #0x0
+ beq _020E8938
+_020E8924:
+ cmp r2, #0x30
+ bne _020E894C
+ ldrsb r2, [r1, #0x1]!
+ cmp r2, #0x0
+ bne _020E8924
+_020E8938:
+ sub r1, r12, #0x1
+ add r1, r0, r1
+ ldrb r1, [r1, #0x5]
+ tst r1, #0x1
+ ldmeqia sp!, {r3,pc}
+_020E894C:
+ ldrb r1, [r0, #0x4]
+ bl __dorounddecup
+ ldmia sp!, {r3,pc}
+
+ arm_func_start __two_exp
+__two_exp: ; 0x020E8958
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4c
+ mov r4, r1
+ mvn r2, #0x34
+ mov r5, r0
+ cmp r4, r2
+ bgt _020E8988
+ bge _020E8A54
+ sub r0, r2, #0xb
+ cmp r4, r0
+ beq _020E8A3C
+ b _020E8BE4
+_020E8988:
+ add r1, r4, #0x20
+ cmp r1, #0x28
+ addls pc, pc, r1, lsl #0x2
+ b _020E8BE4
+_020E8998:
+ b _020E8A68
+_020E899C:
+ b _020E8BE4
+_020E89A0:
+ b _020E8BE4
+_020E89A4:
+ b _020E8BE4
+_020E89A8:
+ b _020E8BE4
+_020E89AC:
+ b _020E8BE4
+_020E89B0:
+ b _020E8BE4
+_020E89B4:
+ b _020E8BE4
+_020E89B8:
+ b _020E8BE4
+_020E89BC:
+ b _020E8BE4
+_020E89C0:
+ b _020E8BE4
+_020E89C4:
+ b _020E8BE4
+_020E89C8:
+ b _020E8BE4
+_020E89CC:
+ b _020E8BE4
+_020E89D0:
+ b _020E8BE4
+_020E89D4:
+ b _020E8BE4
+_020E89D8:
+ b _020E8A7C
+_020E89DC:
+ b _020E8BE4
+_020E89E0:
+ b _020E8BE4
+_020E89E4:
+ b _020E8BE4
+_020E89E8:
+ b _020E8BE4
+_020E89EC:
+ b _020E8BE4
+_020E89F0:
+ b _020E8BE4
+_020E89F4:
+ b _020E8BE4
+_020E89F8:
+ b _020E8A90
+_020E89FC:
+ b _020E8AA4
+_020E8A00:
+ b _020E8AB8
+_020E8A04:
+ b _020E8ACC
+_020E8A08:
+ b _020E8AE0
+_020E8A0C:
+ b _020E8AF4
+_020E8A10:
+ b _020E8B08
+_020E8A14:
+ b _020E8B1C
+_020E8A18:
+ b _020E8B30
+_020E8A1C:
+ b _020E8B44
+_020E8A20:
+ b _020E8B58
+_020E8A24:
+ b _020E8B6C
+_020E8A28:
+ b _020E8B80
+_020E8A2C:
+ b _020E8B94
+_020E8A30:
+ b _020E8BA8
+_020E8A34:
+ b _020E8BBC
+_020E8A38:
+ b _020E8BD0
+_020E8A3C:
+ ldr r1, _020E8C88 ; =0x02106E88
+ mov r0, r5
+ mvn r2, #0x13
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8A54:
+ ldr r1, _020E8C8C ; =0x02106EB8
+ add r2, r2, #0x25
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8A68:
+ ldr r1, _020E8C90 ; =0x02106EE0
+ add r2, r2, #0x2b
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8A7C:
+ ldr r1, _020E8C94 ; =0x02106EF8
+ add r2, r2, #0x30
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8A90:
+ ldr r1, _020E8C98 ; =0x02106F08
+ add r2, r2, #0x32
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8AA4:
+ ldr r1, _020E8C9C ; =0x02106F10
+ add r2, r2, #0x32
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8AB8:
+ ldr r1, _020E8CA0 ; =0x02106F18
+ add r2, r2, #0x33
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8ACC:
+ ldr r1, _020E8CA4 ; =0x02106F20
+ add r2, r2, #0x33
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8AE0:
+ ldr r1, _020E8CA8 ; =0x02106F28
+ add r2, r2, #0x33
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8AF4:
+ ldr r1, _020E8CAC ; =0x02106F2C
+ add r2, r2, #0x34
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B08:
+ ldr r1, _020E8CB0 ; =0x02106F30
+ add r2, r2, #0x34
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B1C:
+ ldr r1, _020E8CB4 ; =0x02106F34
+ add r2, r2, #0x34
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B30:
+ ldr r1, _020E8CB8 ; =0x02106F38
+ mov r2, #0x0
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B44:
+ ldr r1, _020E8CBC ; =0x02106F3C
+ mov r2, #0x0
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B58:
+ ldr r1, _020E8CC0 ; =0x02106F40
+ mov r2, #0x0
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B6C:
+ ldr r1, _020E8CC4 ; =0x02106F44
+ mov r2, #0x0
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B80:
+ ldr r1, _020E8CC8 ; =0x02106F48
+ mov r2, #0x1
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8B94:
+ ldr r1, _020E8CCC ; =0x02106F4C
+ mov r2, #0x1
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8BA8:
+ ldr r1, _020E8CD0 ; =0x02106F50
+ mov r2, #0x1
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8BBC:
+ ldr r1, _020E8CD4 ; =0x02106F54
+ mov r2, #0x2
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8BD0:
+ ldr r1, _020E8CD8 ; =0x02106F58
+ mov r2, #0x2
+ bl __str2dec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+_020E8BE4:
+ and r0, r4, #0x80000000
+ add r1, r4, r0, lsr #0x1f
+ add r0, sp, #0x26
+ mov r1, r1, asr #0x1
+ bl __two_exp
+ add r1, sp, #0x26
+ mov r0, r5
+ mov r2, r1
+ bl __timesdec
+ tst r4, #0x1
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r5,pc}
+_020E8C14: ; 0x020E8C14
+ add r3, sp, #0x0
+ mov r12, r5
+ mov r2, #0x9
+_020E8C20:
+ ldrh r1, [r12, #0x0]
+ ldrh r0, [r12, #0x2]
+ add r12, r12, #0x4
+ subs r2, r2, #0x1
+ strh r1, [r3, #0x0]
+ strh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ bne _020E8C20
+ ldrh r0, [r12, #0x0]
+ cmp r4, #0x0
+ strh r0, [r3, #0x0]
+ add r0, sp, #0x26
+ ble _020E8C64
+ ldr r1, _020E8CBC ; =0x02106F3C
+ mov r2, #0x0
+ bl __str2dec
+ b _020E8C70
+_020E8C64:
+ ldr r1, _020E8CB4 ; =0x02106F34
+ mvn r2, #0x0
+ bl __str2dec
+_020E8C70:
+ add r1, sp, #0x0
+ add r2, sp, #0x26
+ mov r0, r5
+ bl __timesdec
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020E8C88: .word 0x02106E88
+_020E8C8C: .word 0x02106EB8
+_020E8C90: .word 0x02106EE0
+_020E8C94: .word 0x02106EF8
+_020E8C98: .word 0x02106F08
+_020E8C9C: .word 0x02106F10
+_020E8CA0: .word 0x02106F18
+_020E8CA4: .word 0x02106F20
+_020E8CA8: .word 0x02106F28
+_020E8CAC: .word 0x02106F2C
+_020E8CB0: .word 0x02106F30
+_020E8CB4: .word 0x02106F34
+_020E8CB8: .word 0x02106F38
+_020E8CBC: .word 0x02106F3C
+_020E8CC0: .word 0x02106F40
+_020E8CC4: .word 0x02106F44
+_020E8CC8: .word 0x02106F48
+_020E8CCC: .word 0x02106F4C
+_020E8CD0: .word 0x02106F50
+_020E8CD4: .word 0x02106F54
+_020E8CD8: .word 0x02106F58
+
+ arm_func_start __equals_dec
+__equals_dec:
+ stmdb sp!, {r4,lr}
+ ldrb r3, [r0, #0x5]
+ cmp r3, #0x0
+ bne _020E8D00
+ ldrb r0, [r1, #0x5]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020E8D00:
+ ldrb r2, [r1, #0x5]
+ cmp r2, #0x0
+ bne _020E8D1C
+ cmp r3, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020E8D1C:
+ ldrsh r3, [r0, #0x2]
+ ldrsh r2, [r1, #0x2]
+ cmp r3, r2
+ bne _020E8DB4
+ ldrb r4, [r0, #0x4]
+ ldrb r2, [r1, #0x4]
+ mov r12, #0x0
+ mov lr, r4
+ cmp r4, r2
+ movgt lr, r2
+ cmp lr, #0x0
+ ble _020E8D74
+_020E8D4C:
+ add r3, r0, r12
+ add r2, r1, r12
+ ldrb r3, [r3, #0x5]
+ ldrb r2, [r2, #0x5]
+ cmp r3, r2
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020E8D68: ; 0x020E8D68
+ add r12, r12, #0x1
+ cmp r12, lr
+ blt _020E8D4C
+_020E8D74:
+ cmp lr, r4
+ moveq r0, r1
+ ldrb r1, [r0, #0x4]
+ cmp r12, r1
+ bge _020E8DAC
+_020E8D88:
+ add r1, r0, r12
+ ldrb r1, [r1, #0x5]
+ cmp r1, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020E8D9C: ; 0x020E8D9C
+ ldrb r1, [r0, #0x4]
+ add r12, r12, #0x1
+ cmp r12, r1
+ blt _020E8D88
+_020E8DAC:
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+_020E8DB4:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start __less_dec
+__less_dec:
+ stmdb sp!, {r3-r5,lr}
+ ldrb r2, [r0, #0x5]
+ cmp r2, #0x0
+ bne _020E8DE0
+ ldrb r0, [r1, #0x5]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E8DE0:
+ ldrb r2, [r1, #0x5]
+ cmp r2, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020E8DF0: ; 0x020E8DF0
+ ldrsh r3, [r1, #0x2]
+ ldrsh r2, [r0, #0x2]
+ cmp r2, r3
+ bne _020E8E90
+ ldrb r5, [r0, #0x4]
+ ldrb r4, [r1, #0x4]
+ mov r12, #0x0
+ mov lr, r5
+ cmp r5, r4
+ movgt lr, r4
+ cmp lr, #0x0
+ ble _020E8E54
+_020E8E20:
+ add r3, r1, r12
+ add r2, r0, r12
+ ldrb r3, [r3, #0x5]
+ ldrb r2, [r2, #0x5]
+ cmp r2, r3
+ movcc r0, #0x1
+ ldmccia sp!, {r3-r5,pc}
+_020E8E3C: ; 0x020E8E3C
+ cmp r3, r2
+ movcc r0, #0x0
+ ldmccia sp!, {r3-r5,pc}
+_020E8E48: ; 0x020E8E48
+ add r12, r12, #0x1
+ cmp r12, lr
+ blt _020E8E20
+_020E8E54:
+ cmp lr, r5
+ bne _020E8E88
+ cmp r12, r4
+ bge _020E8E88
+_020E8E64:
+ add r0, r1, r12
+ ldrb r0, [r0, #0x5]
+ cmp r0, #0x0
+ movne r0, #0x1
+ ldmneia sp!, {r3-r5,pc}
+_020E8E78: ; 0x020E8E78
+ ldrb r0, [r1, #0x4]
+ add r12, r12, #0x1
+ cmp r12, r0
+ blt _020E8E64
+_020E8E88:
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E8E90:
+ movlt r0, #0x1
+ movge r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start __minus_dec
+__minus_dec: ; 0x020E8E9C
+ stmdb sp!, {r3-r7,lr}
+ mov r6, r0
+ mov r5, #0x9
+_020E8EA8:
+ ldrh r4, [r1, #0x0]
+ ldrh r3, [r1, #0x2]
+ add r1, r1, #0x4
+ subs r5, r5, #0x1
+ strh r4, [r6, #0x0]
+ strh r3, [r6, #0x2]
+ add r6, r6, #0x4
+ bne _020E8EA8
+ ldrh r1, [r1, #0x0]
+ strh r1, [r6, #0x0]
+ ldrb r1, [r2, #0x5]
+ cmp r1, #0x0
+ ldmeqia sp!, {r3-r7,pc}
+_020E8EDC: ; 0x020E8EDC
+ ldrb r7, [r0, #0x4]
+ ldrb r3, [r2, #0x4]
+ ldrsh r4, [r0, #0x2]
+ mov r1, r7
+ cmp r7, r3
+ movlt r1, r3
+ ldrsh r3, [r2, #0x2]
+ sub r6, r4, r3
+ add r1, r1, r6
+ cmp r1, #0x20
+ movgt r1, #0x20
+ cmp r7, r1
+ bge _020E8F34
+ mov r4, #0x0
+_020E8F14:
+ ldrb r5, [r0, #0x4]
+ add r3, r0, r7
+ add r5, r5, #0x1
+ strb r5, [r0, #0x4]
+ strb r4, [r3, #0x5]
+ ldrb r7, [r0, #0x4]
+ cmp r7, r1
+ blt _020E8F14
+_020E8F34:
+ ldrb r4, [r2, #0x4]
+ add r3, r0, #0x5
+ add r12, r3, r1
+ add r4, r4, r6
+ cmp r4, r1
+ addlt r12, r3, r4
+ sub r4, r12, r3
+ add r1, r2, #0x5
+ sub r4, r4, r6
+ add lr, r1, r4
+ mov r4, lr
+ b _020E8FC8
+_020E8F64:
+ ldrb r7, [r12, #-0x1]!
+ ldrb r5, [lr, #-0x1]!
+ cmp r7, r5
+ bhs _020E8FB8
+ ldrb r7, [r12, #-0x1]
+ sub r5, r12, #0x1
+ cmp r7, #0x0
+ bne _020E8F90
+_020E8F84:
+ ldrb r7, [r5, #-0x1]!
+ cmp r7, #0x0
+ beq _020E8F84
+_020E8F90:
+ cmp r5, r12
+ beq _020E8FB8
+_020E8F98:
+ ldrb r7, [r5, #0x0]
+ sub r7, r7, #0x1
+ strb r7, [r5, #0x0]
+ ldrb r7, [r5, #0x1]!
+ cmp r5, r12
+ add r7, r7, #0xa
+ strb r7, [r5, #0x0]
+ bne _020E8F98
+_020E8FB8:
+ ldrb r7, [r12, #0x0]
+ ldrb r5, [lr, #0x0]
+ sub r5, r7, r5
+ strb r5, [r12, #0x0]
+_020E8FC8:
+ cmp r12, r3
+ cmphi lr, r1
+ bhi _020E8F64
+ ldrb r5, [r2, #0x4]
+ sub lr, r4, r1
+ cmp lr, r5
+ bge _020E90A4
+ ldrb r1, [r4, #0x0]
+ mov r7, #0x0
+ cmp r1, #0x5
+ movcc r7, #0x1
+ blo _020E9040
+ bne _020E9040
+ add r1, r2, #0x5
+ add r2, r1, r5
+ add r4, r4, #0x1
+ cmp r4, r2
+ bhs _020E9028
+_020E9010:
+ ldrb r1, [r4, #0x0]
+ cmp r1, #0x0
+ bne _020E90A4
+ add r4, r4, #0x1
+ cmp r4, r2
+ blo _020E9010
+_020E9028:
+ add r1, r3, lr
+ add r2, r1, r6
+ ldrb r1, [r2, #-0x1]
+ sub r12, r2, #0x1
+ tst r1, #0x1
+ movne r7, #0x1
+_020E9040:
+ cmp r7, #0x0
+ beq _020E90A4
+ ldrb r1, [r12, #0x0]
+ cmp r1, #0x1
+ bhs _020E9098
+ ldrb r1, [r12, #-0x1]
+ sub r2, r12, #0x1
+ cmp r1, #0x0
+ bne _020E9070
+_020E9064:
+ ldrb r1, [r2, #-0x1]!
+ cmp r1, #0x0
+ beq _020E9064
+_020E9070:
+ cmp r2, r12
+ beq _020E9098
+_020E9078:
+ ldrb r1, [r2, #0x0]
+ sub r1, r1, #0x1
+ strb r1, [r2, #0x0]
+ ldrb r1, [r2, #0x1]!
+ cmp r2, r12
+ add r1, r1, #0xa
+ strb r1, [r2, #0x0]
+ bne _020E9078
+_020E9098:
+ ldrb r1, [r12, #0x0]
+ sub r1, r1, #0x1
+ strb r1, [r12, #0x0]
+_020E90A4:
+ ldrb r1, [r3, #0x0]
+ mov r5, r3
+ cmp r1, #0x0
+ bne _020E90C0
+_020E90B4:
+ ldrb r1, [r5, #0x1]!
+ cmp r1, #0x0
+ beq _020E90B4
+_020E90C0:
+ cmp r5, r3
+ bls _020E9108
+ ldrsh r1, [r0, #0x2]
+ sub r2, r5, r3
+ and r4, r2, #0xff
+ sub r1, r1, r4
+ strh r1, [r0, #0x2]
+ ldrb r1, [r0, #0x4]
+ add r2, r3, r1
+ cmp r5, r2
+ bhs _020E90FC
+_020E90EC:
+ ldrb r1, [r5], #0x1
+ cmp r5, r2
+ strb r1, [r3], #0x1
+ blo _020E90EC
+_020E90FC:
+ ldrb r1, [r0, #0x4]
+ sub r1, r1, r4
+ strb r1, [r0, #0x4]
+_020E9108:
+ ldrb r1, [r0, #0x4]
+ add r2, r0, #0x5
+ add r3, r2, r1
+ cmp r3, r2
+ bls _020E9130
+_020E911C:
+ ldrb r1, [r3, #-0x1]!
+ cmp r1, #0x0
+ bne _020E9130
+ cmp r3, r2
+ bhi _020E911C
+_020E9130:
+ sub r1, r3, r2
+ add r1, r1, #0x1
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r7,pc}
+
+ arm_func_start __num2dec_internal
+__num2dec_internal:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x58
+ mov r8, r1
+ mov r6, r2
+ mov r7, r0
+ mov r0, r8
+ mov r1, r6
+ bl __signbitf
+_020E9160: ; 0x020E9160
+ cmp r0, #0x0
+ movne r1, #0x1
+ moveq r1, #0x0
+ mov r4, r1, lsl #0x18
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r8
+ mov r3, r6
+ mov r5, r4, asr #0x18
+ bl _deq
+ bne _020E91AC
+ strb r5, [r7, #0x0]
+ mov r1, #0x0
+ strh r1, [r7, #0x2]
+ mov r0, #0x1
+ strb r0, [r7, #0x4]
+ add sp, sp, #0x58
+ strb r1, [r7, #0x5]
+ ldmia sp!, {r4-r8,pc}
+_020E91AC:
+ mov r0, r8
+ mov r1, r6
+ bl __fpclassifyf
+ cmp r0, #0x2
+ bgt _020E91F8
+ strb r5, [r7, #0x0]
+ mov r2, #0x0
+ strh r2, [r7, #0x2]
+ mov r2, #0x1
+ mov r0, r8
+ mov r1, r6
+ strb r2, [r7, #0x4]
+ bl __fpclassifyf
+ cmp r0, #0x1
+ moveq r0, #0x4e
+ movne r0, #0x49
+ add sp, sp, #0x58
+ strb r0, [r7, #0x5]
+ ldmia sp!, {r4-r8,pc}
+_020E91F8:
+ cmp r5, #0x0
+ beq _020E921C
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r8
+ mov r3, r6
+ bl _dsub
+ mov r8, r0
+ mov r6, r1
+_020E921C:
+ add r2, sp, #0x8
+ mov r0, r8
+ mov r1, r6
+ bl frexp
+ mov r4, r0
+ mov r6, r1
+ orr r12, r4, #0x0
+ rsbs r2, r12, #0x0
+ orr r3, r6, #0x100000
+ rsc r1, r3, #0x0
+ mov r0, #0x0
+ and r3, r3, r1
+ sub r1, r0, #0x1
+ and r12, r12, r2
+ mov r2, r1
+ adds r0, r12, r1
+ adc r1, r3, r2
+ str r4, [sp, #0x0]
+ str r6, [sp, #0x4]
+ bl __msl_generic_count_bits64
+ rsb r8, r0, #0x35
+ ldr r1, [sp, #0x8]
+ add r0, sp, #0xc
+ sub r1, r1, r8
+ bl __two_exp
+ mov r0, r4
+ mov r1, r6
+ mov r2, r8
+ bl ldexp
+ bl _ll_ufrom_d
+ mov r2, r1
+ mov r1, r0
+ add r0, sp, #0x32
+ bl __ull2dec
+ mov r0, r7
+ add r1, sp, #0x32
+ add r2, sp, #0xc
+ bl __timesdec
+ strb r5, [r7, #0x0]
+ add sp, sp, #0x58
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start __num2dec_internal2
+__num2dec_internal2: ; 0x020E92C0
+ stmdb sp!, {r3-r5,lr}
+ mov r4, r3
+ ldrsh r5, [r0, #0x2]
+ mov r0, r4
+ bl __num2dec_internal
+ ldrb r0, [r4, #0x5]
+ cmp r0, #0x9
+ ldmhiia sp!, {r3-r5,pc}
+_020E92E0: ; 0x020E92E0
+ cmp r5, #0x20
+ movgt r5, #0x20
+ mov r0, r4
+ mov r1, r5
+ bl __rounddec
+ ldrb r0, [r4, #0x4]
+ cmp r0, r5
+ bge _020E9324
+ mov r1, #0x0
+_020E9304:
+ ldrb r2, [r4, #0x4]
+ add r0, r4, r0
+ add r2, r2, #0x1
+ strb r2, [r4, #0x4]
+ strb r1, [r0, #0x5]
+ ldrb r0, [r4, #0x4]
+ cmp r0, r5
+ blt _020E9304
+_020E9324:
+ ldrsh r1, [r4, #0x2]
+ sub r0, r0, #0x1
+ mov r2, #0x0
+ sub r0, r1, r0
+ strh r0, [r4, #0x2]
+ ldrb r0, [r4, #0x4]
+ cmp r0, #0x0
+ ldmleia sp!, {r3-r5,pc}
+_020E9344:
+ add r1, r4, r2
+ ldrb r0, [r1, #0x5]
+ add r2, r2, #0x1
+ add r0, r0, #0x30
+ strb r0, [r1, #0x5]
+ ldrb r0, [r4, #0x4]
+ cmp r2, r0
+ blt _020E9344
+ ldmia sp!, {r3-r5,pc}
+
+ arm_func_start __dec2num
+__dec2num: ; 0x020E9368
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xfc
+ mov r4, r0
+ ldrb r0, [r4, #0x4]
+ cmp r0, #0x0
+ bne _020E93A8
+ ldrsb r0, [r4, #0x0]
+ mov r2, #0x0
+ cmp r0, #0x0
+ ldreq r3, _020E996C ; =0x3FF00000
+ mov r0, #0x0
+ ldrne r3, _020E9970 ; =0xBFF00000
+ mov r1, r0
+ bl copysign
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+_020E93A8:
+ ldrb r0, [r4, #0x5]
+ cmp r0, #0x30
+ beq _020E93C8
+ cmp r0, #0x49
+ beq _020E93F0
+ cmp r0, #0x4e
+ beq _020E9424
+ b _020E946C
+_020E93C8:
+ ldrsb r0, [r4, #0x0]
+ mov r2, #0x0
+ cmp r0, #0x0
+ ldreq r3, _020E996C ; =0x3FF00000
+ mov r0, #0x0
+ ldrne r3, _020E9970 ; =0xBFF00000
+ mov r1, r0
+ bl copysign
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+_020E93F0:
+ ldrsb r0, [r4, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldreq r4, _020E996C ; =0x3FF00000
+ ldr r0, _020E9974 ; =0x02106B74
+ ldrne r4, _020E9970 ; =0xBFF00000
+ ldr r0, [r0, #0x0]
+ bl _f2d
+ mov r2, r5
+ mov r3, r4
+ bl copysign
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+_020E9424:
+ ldr r1, _020E9978 ; =0x7FF00000
+ add r3, sp, #0x10
+ mov r2, #0x0
+ str r2, [r3, #0x0]
+ str r1, [r3, #0x4]
+ ldrsb r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020E9454
+ orr r0, r1, #0x80000000
+ orr r1, r2, r2
+ str r1, [r3, #0x0]
+ str r0, [r3, #0x4]
+_020E9454:
+ ldmia r3, {r0-r1}
+ orr r0, r0, #0x0
+ orr r1, r1, #0x80000
+ stmia r3, {r0-r1}
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+_020E946C:
+ add r3, sp, #0xd6
+ mov r5, r4
+ mov r2, #0x9
+_020E9478:
+ ldrh r1, [r5, #0x0]
+ ldrh r0, [r5, #0x2]
+ add r5, r5, #0x4
+ subs r2, r2, #0x1
+ strh r1, [r3, #0x0]
+ strh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ bne _020E9478
+ ldrh r0, [r5, #0x0]
+ add r1, sp, #0xdb
+ strh r0, [r3, #0x0]
+ ldrb r0, [sp, #0xda]
+ add r5, r1, r0
+ cmp r1, r5
+ bhs _020E94C8
+_020E94B4:
+ ldrb r0, [r1, #0x0]
+ sub r0, r0, #0x30
+ strb r0, [r1], #0x1
+ cmp r1, r5
+ blo _020E94B4
+_020E94C8:
+ ldrb r1, [sp, #0xda]
+ ldrsh r2, [sp, #0xd8]
+ add r0, sp, #0xb0
+ sub r1, r1, #0x1
+ add r1, r2, r1
+ strh r1, [sp, #0xd8]
+ ldr r1, _020E997C ; =0x02106F5C
+ mov r2, #0x134
+ ldrsh r11, [sp, #0xd8]
+ bl __str2dec
+ add r0, sp, #0xb0
+ add r1, sp, #0xd6
+ bl __less_dec
+_020E94FC: ; 0x020E94FC
+ cmp r0, #0x0
+ beq _020E9538
+ ldrsb r0, [r4, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldreq r4, _020E996C ; =0x3FF00000
+ ldr r0, _020E9974 ; =0x02106B74
+ ldrne r4, _020E9970 ; =0xBFF00000
+ ldr r0, [r0, #0x0]
+ bl _f2d
+ mov r2, r5
+ mov r3, r4
+ bl copysign
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+_020E9538:
+ add r1, sp, #0xdb
+ ldrb r0, [r1, #0x0]
+ add r8, r1, #0x1
+ bl _dfltu
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+ cmp r8, r5
+ bhs _020E9610
+_020E9558:
+ sub r0, r5, r8
+ mov r1, r0, lsr #0x1f
+ rsb r0, r1, r0, lsl #0x1d
+ adds r7, r1, r0, ror #0x1d
+ moveq r7, #0x8
+ mov r6, #0x0
+ mov r2, #0x0
+ cmp r7, #0x0
+ ble _020E9594
+ mov r0, #0xa
+_020E9580:
+ ldrb r1, [r8], #0x1
+ add r2, r2, #0x1
+ cmp r2, r7
+ mla r6, r0, r6, r1
+ blt _020E9580
+_020E9594:
+ ldr r0, _020E9980 ; =0x02106E48
+ ldr r1, [sp, #0xc]
+ add r3, r0, r7, lsl #0x3
+ ldr r2, [r3, #-0x8]
+ ldr r0, [sp, #0x8]
+ ldr r3, [r3, #-0x4]
+ bl _dmul
+ mov r4, r0
+ mov r9, r1
+ mov r0, r6
+ bl _dfltu
+ mov r2, r0
+ mov r3, r1
+ mov r0, r4
+ mov r1, r9
+ bl _dadd
+_020E95D4: ; 0x020E95D4
+ cmp r6, #0x0
+ mov r6, r0
+ mov r10, r1
+ beq _020E95FC
+ mov r0, r4
+ mov r1, r9
+ mov r2, r6
+ mov r3, r10
+ bl _deq
+ beq _020E9610
+_020E95FC:
+ str r6, [sp, #0x8]
+ str r10, [sp, #0xc]
+ cmp r8, r5
+ sub r11, r11, r7
+ blo _020E9558
+_020E9610:
+ cmp r11, #0x0
+ bge _020E9654
+ rsb r0, r11, #0x0
+ bl _dflt
+ mov r3, r1
+ mov r2, r0
+ ldr r1, _020E9984 ; =0x40140000
+ mov r0, #0x0
+ bl pow
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ bl _ddiv
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+ b _020E968C
+_020E9654:
+ mov r0, r11
+ bl _dflt
+ mov r3, r1
+ mov r2, r0
+ ldr r1, _020E9984 ; =0x40140000
+ mov r0, #0x0
+ bl pow
+ mov r2, r0
+ mov r3, r1
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ bl _dmul
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+_020E968C:
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ mov r2, r11
+ bl ldexp
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+ bl __fpclassifyf
+ cmp r0, #0x2
+ bne _020E96C0
+ ldr r0, _020E9988 ; =0x7FEFFFFF
+ mvn r1, #0x0
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+_020E96C0:
+ ldr r1, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ add r0, sp, #0x8a
+ add r4, sp, #0x0
+ mov r5, #0x0
+ bl __num2dec_internal
+ add r0, sp, #0x8a
+ add r1, sp, #0xd6
+ bl __equals_dec
+_020E96E4: ; 0x020E96E4
+ cmp r0, #0x0
+ bne _020E9934
+ add r0, sp, #0x8a
+ add r1, sp, #0xd6
+ bl __less_dec
+_020E96F8: ; 0x020E96F8
+ cmp r0, #0x0
+ movne r5, #0x1
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ cmp r5, #0x0
+ moveq r6, #0x1
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+ movne r6, #0x0
+_020E971C:
+ cmp r6, #0x0
+ bne _020E9744
+ ldmia r4, {r0-r1}
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ stmia r4, {r0-r1}
+ bl __fpclassifyf
+ cmp r0, #0x2
+ beq _020E9934
+ b _020E975C
+_020E9744:
+ ldr r1, [r4, #0x0]
+ ldr r0, [r4, #0x4]
+ subs r1, r1, #0x1
+ sbc r0, r0, #0x0
+ str r1, [r4, #0x0]
+ str r0, [r4, #0x4]
+_020E975C:
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ add r0, sp, #0x64
+ bl __num2dec_internal
+_020E976C: ; 0x020E976C
+ cmp r5, #0x0
+ beq _020E9788
+ add r0, sp, #0x64
+ add r1, sp, #0xd6
+ bl __less_dec
+_020E9780: ; 0x020E9780
+ cmp r0, #0x0
+ beq _020E98AC
+_020E9788:
+ cmp r5, #0x0
+ bne _020E9864
+ add r0, sp, #0xd6
+ add r1, sp, #0x64
+ bl __less_dec
+_020E979C: ; 0x020E979C
+ cmp r0, #0x0
+ bne _020E9864
+ add r3, sp, #0x8a
+ add r5, sp, #0x3e
+ mov r2, #0x9
+_020E97B0:
+ ldrh r1, [r3, #0x0]
+ ldrh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ strh r1, [r5, #0x0]
+ strh r0, [r5, #0x2]
+ add r5, r5, #0x4
+ subs r2, r2, #0x1
+ bne _020E97B0
+ ldrh r0, [r3, #0x0]
+ add r3, sp, #0x64
+ add r4, sp, #0x8a
+ strh r0, [r5, #0x0]
+ mov r2, #0x9
+_020E97E4:
+ ldrh r1, [r3, #0x0]
+ ldrh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ strh r1, [r4, #0x0]
+ strh r0, [r4, #0x2]
+ add r4, r4, #0x4
+ subs r2, r2, #0x1
+ bne _020E97E4
+ ldrh r0, [r3, #0x0]
+ add r3, sp, #0x3e
+ add r5, sp, #0x64
+ strh r0, [r4, #0x0]
+ mov r2, #0x9
+_020E9818:
+ ldrh r1, [r3, #0x0]
+ ldrh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ strh r1, [r5, #0x0]
+ strh r0, [r5, #0x2]
+ add r5, r5, #0x4
+ subs r2, r2, #0x1
+ bne _020E9818
+ ldrh r4, [r3, #0x0]
+ ldr r3, [sp, #0x8]
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0xc]
+ ldr r0, [sp, #0x4]
+ strh r4, [r5, #0x0]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ str r3, [sp, #0x0]
+ str r2, [sp, #0x4]
+ b _020E98AC
+_020E9864:
+ add r7, sp, #0x64
+ add r3, sp, #0x8a
+ mov r2, #0x9
+_020E9870:
+ ldrh r1, [r7, #0x0]
+ ldrh r0, [r7, #0x2]
+ add r7, r7, #0x4
+ strh r1, [r3, #0x0]
+ strh r0, [r3, #0x2]
+ add r3, r3, #0x4
+ subs r2, r2, #0x1
+ bne _020E9870
+ ldrh r2, [r7, #0x0]
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ strh r2, [r3, #0x0]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ b _020E971C
+_020E98AC:
+ add r0, sp, #0x3e
+ add r1, sp, #0xd6
+ add r2, sp, #0x8a
+ bl __minus_dec
+ add r0, sp, #0x18
+ add r1, sp, #0x64
+ add r2, sp, #0xd6
+ bl __minus_dec
+ add r0, sp, #0x3e
+ add r1, sp, #0x18
+ bl __equals_dec
+_020E98D8: ; 0x020E98D8
+ cmp r0, #0x0
+ beq _020E9910
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ and r1, r1, #0x1
+ and r0, r0, #0x0
+ cmp r0, #0x0
+ cmpeq r1, #0x0
+ beq _020E9934
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ b _020E9934
+_020E9910:
+ add r0, sp, #0x3e
+ add r1, sp, #0x18
+ bl __less_dec
+_020E991C: ; 0x020E991C
+ cmp r0, #0x0
+ bne _020E9934
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+_020E9934:
+ ldrsb r0, [sp, #0xd6]
+ cmp r0, #0x0
+ beq _020E995C
+ mov r0, #0x0
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ mov r1, r0
+ bl _dsub
+ str r0, [sp, #0x8]
+ str r1, [sp, #0xc]
+_020E995C:
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ add sp, sp, #0xfc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020E996C: .word 0x3FF00000
+_020E9970: .word 0xBFF00000
+_020E9974: .word 0x02106B74
+_020E9978: .word 0x7FF00000
+_020E997C: .word 0x02106F5C
+_020E9980: .word 0x02106E48
+_020E9984: .word 0x40140000
+_020E9988: .word 0x7FEFFFFF
+
+ arm_func_start __msl_generic_count_bits64
+__msl_generic_count_bits64: ; 0x020E998C
+ mov r3, r0, lsr #0x1
+ ldr r2, _020E9A14 ; =0x55555555
+ orr r3, r3, r1, lsl #0x1f
+ and r3, r3, r2
+ subs r12, r0, r3
+ and r2, r2, r1, lsr #0x1
+ ldr r0, _020E9A18 ; =0x33333333
+ sbc r3, r1, r2
+ mov r1, r12, lsr #0x2
+ orr r1, r1, r3, lsl #0x1e
+ and r2, r12, r0
+ and r1, r1, r0
+ adds r2, r2, r1
+ and r1, r3, r0
+ and r0, r0, r3, lsr #0x2
+ adc r1, r1, r0
+ mov r0, r2, lsr #0x4
+ orr r0, r0, r1, lsl #0x1c
+ adds r2, r2, r0
+ ldr r0, _020E9A1C ; =0x0F0F0F0F
+ adc r1, r1, r1, lsr #0x4
+ and r3, r2, r0
+ and r2, r1, r0
+ mov r0, r3, lsr #0x8
+ orr r0, r0, r2, lsl #0x18
+ adds r1, r3, r0
+ adc r2, r2, r2, lsr #0x8
+ mov r0, r1, lsr #0x10
+ orr r0, r0, r2, lsl #0x10
+ adds r1, r1, r0
+ adc r0, r2, r2, lsr #0x10
+ adds r0, r1, r0
+ and r0, r0, #0xff
+ bx lr
+ .balign 4
+_020E9A14: .word 0x55555555
+_020E9A18: .word 0x33333333
+_020E9A1C: .word 0x0F0F0F0F
+
+ arm_func_start __signbitf
+__signbitf:
+ stmdb sp!, {r0-r3}
+ ldr r0, [sp, #0x4]
+ and r0, r0, #0x80000000
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start __fpclassifyf
+__fpclassifyf: ; 0x020E9A34
+ stmdb sp!, {r0-r3}
+ ldr r2, [sp, #0x4]
+ ldr r0, _020E9A9C ; =0x7FF00000
+ ands r1, r2, r0
+ beq _020E9A70
+ cmp r1, r0
+ bne _020E9A90
+ ldr r0, _020E9AA0 ; =0x000FFFFF
+ tst r2, r0
+ ldreq r0, [sp, #0x0]
+ add sp, sp, #0x10
+ cmpeq r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x2
+ bx lr
+_020E9A70:
+ ldr r0, _020E9AA0 ; =0x000FFFFF
+ tst r2, r0
+ ldreq r0, [sp, #0x0]
+ add sp, sp, #0x10
+ cmpeq r0, #0x0
+ movne r0, #0x5
+ moveq r0, #0x3
+ bx lr
+_020E9A90:
+ mov r0, #0x4
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E9A9C: .word 0x7FF00000
+_020E9AA0: .word 0x000FFFFF
+
+ arm_func_start scalbn
+scalbn: ; 0x020E9AA4
+ stmdb sp!, {r3-r4,lr}
+ sub sp, sp, #0x4
+ mov r4, r2
+ add r2, sp, #0x0
+ bl frexp
+ ldr r2, [sp, #0x0]
+ add r2, r2, r4
+ str r2, [sp, #0x0]
+ bl ldexp
+ add sp, sp, #0x4
+ ldmia sp!, {r3-r4,pc}
+
+ arm_func_start stricmp
+stricmp: ; 0x020E9AD0
+ stmdb sp!, {r3,lr}
+ ldr r3, _020E9B34 ; =0x0210420C
+_020E9AD8:
+ ldrb r2, [r0], #0x1
+ cmp r2, #0x0
+ blt _020E9AF0
+ cmp r2, #0x80
+ bge _020E9AF0
+ ldrb r2, [r3, r2]
+_020E9AF0:
+ ldrb lr, [r1], #0x1
+ and r12, r2, #0xff
+ cmp lr, #0x0
+ blt _020E9B0C
+ cmp lr, #0x80
+ bge _020E9B0C
+ ldrb lr, [r3, lr]
+_020E9B0C:
+ and r2, lr, #0xff
+ cmp r12, r2
+ mvncc r0, #0x0
+ ldmccia sp!, {r3,pc}
+_020E9B1C: ; 0x020E9B1C
+ movhi r0, #0x1
+ ldmhiia sp!, {r3,pc}
+_020E9B24: ; 0x020E9B24
+ cmp r12, #0x0
+ bne _020E9AD8
+ mov r0, #0x0
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020E9B34: .word 0x0210420C
+
+ arm_func_start strnicmp
+strnicmp: ; 0x020E9B38
+ ldr ip, _020E9B40 ; =stricmp
+ bx r12
+ .balign 4
+_020E9B40: .word stricmp
+
+ arm_func_start _dadd
+_dadd:
+ stmdb sp!, {r4,lr}
+ eors r12, r1, r3
+ eormi r3, r3, #0x80000000
+ bmi _020EA5DC
+_020E9B54:
+ subs r12, r0, r2
+ sbcs lr, r1, r3
+ bhs _020E9B70
+ adds r2, r2, r12
+ adc r3, r3, lr
+ subs r0, r0, r12
+ sbc r1, r1, lr
+_020E9B70:
+ mov lr, #0x80000000
+ mov r12, r1, lsr #0x14
+ orr r1, lr, r1, lsl #0xb
+ orr r1, r1, r0, lsr #0x15
+ mov r0, r0, lsl #0xb
+ movs r4, r12, lsl #0x15
+ cmnne r4, #0x200000
+ beq _020E9C6C
+ mov r4, r3, lsr #0x14
+ orr r3, lr, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs lr, r4, lsl #0x15
+ beq _020E9CB4
+_020E9BA8:
+ subs r4, r12, r4
+ beq _020E9C00
+ cmp r4, #0x20
+ ble _020E9BE4
+ cmp r4, #0x38
+ movge r4, #0x3f
+ sub r4, r4, #0x20
+ rsb lr, r4, #0x20
+ orrs lr, r2, r3, lsl lr
+ mov r2, r3, lsr r4
+ orrne r2, r2, #0x1
+ adds r0, r0, r2
+ adcs r1, r1, #0x0
+ blo _020E9C28
+ b _020E9C0C
+_020E9BE4:
+ rsb lr, r4, #0x20
+ movs lr, r2, lsl lr
+ rsb lr, r4, #0x20
+ mov r2, r2, lsr r4
+ orr r2, r2, r3, lsl lr
+ mov r3, r3, lsr r4
+ orrne r2, r2, #0x1
+_020E9C00:
+ adds r0, r0, r2
+ adcs r1, r1, r3
+ blo _020E9C28
+_020E9C0C:
+ add r12, r12, #0x1
+ and r4, r0, #0x1
+ movs r1, r1, rrx
+ orr r0, r4, r0, rrx
+ mov lr, r12, lsl #0x15
+ cmn lr, #0x200000
+ beq _020E9E38
+_020E9C28:
+ movs r2, r0, lsl #0x15
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ tst r2, #0x80000000
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ movs r2, r2, lsl #0x1
+ andeqs r2, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9C6C:
+ cmp r12, #0x800
+ movge lr, #0x80000000
+ movlt lr, #0x0
+ bics r12, r12, #0x800
+ beq _020E9CD8
+ orrs r4, r0, r1, lsl #0x1
+ bne _020E9E14
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r4, r4, lsl #0x15
+ beq _020E9E00
+ cmn r4, #0x200000
+ bne _020E9E00
+ orrs r4, r2, r3, lsl #0x1
+ beq _020E9E00
+ b _020E9E14
+_020E9CB4:
+ cmp r4, #0x800
+ movge lr, #0x80000000
+ movlt lr, #0x0
+ bic r12, r12, #0x800
+ bics r4, r4, #0x800
+ beq _020E9D44
+ orrs r4, r2, r3, lsl #0x1
+ bne _020E9E14
+ b _020E9E00
+_020E9CD8:
+ orrs r4, r0, r1, lsl #0x1
+ beq _020E9D18
+ mov r12, #0x1
+ bic r1, r1, #0x80000000
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r4, r4, lsl #0x15
+ cmnne r4, #0x200000
+ mov r4, r4, lsr #0x15
+ orr r4, r4, lr, lsr #0x14
+ beq _020E9CB4
+ orr r3, r3, #0x80000000
+ orr r12, r12, lr, lsr #0x14
+ b _020E9BA8
+_020E9D18:
+ mov r12, r3, lsr #0x14
+ mov r1, r3, lsl #0xb
+ orr r1, r1, r2, lsr #0x15
+ mov r0, r2, lsl #0xb
+ movs r4, r12, lsl #0x15
+ beq _020E9DCC
+ cmn r4, #0x200000
+ bne _020E9DCC
+ orrs r4, r0, r1, lsl #0x1
+ beq _020E9E00
+ b _020E9E18
+_020E9D44:
+ orrs r4, r2, r3, lsl #0x1
+ beq _020E9DDC
+ mov r4, #0x1
+ bic r3, r3, #0x80000000
+ cmp r1, #0x0
+ bpl _020E9D68
+ orr r12, r12, lr, lsr #0x14
+ orr r4, r4, lr, lsr #0x14
+ b _020E9BA8
+_020E9D68:
+ adds r0, r0, r2
+ adcs r1, r1, r3
+ blo _020E9D88
+ add r12, r12, #0x1
+ and r4, r0, #0x1
+ movs r1, r1, rrx
+ mov r0, r0, rrx
+ orr r0, r0, r4
+_020E9D88:
+ cmp r1, #0x0
+ subges r12, r12, #0x1
+ movs r2, r0, lsl #0x15
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, lr, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ tst r2, #0x80000000
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ movs r2, r2, lsl #0x1
+ andeqs r2, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_020E9DCC:
+ mov r1, r3
+ mov r0, r2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9DDC:
+ cmp r1, #0x0
+ subges r12, r12, #0x1
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, lr, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9E00:
+ ldr r1, _020E9E58 ; =0x7FF00000
+ orr r1, lr, r1
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9E14:
+ mov r1, r3
+_020E9E18:
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9E28: ; 0x020E9E28
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020E9E38:
+ cmp r12, #0x800
+ movge lr, #0x80000000
+ movlt lr, #0x0
+ ldr r1, _020E9E58 ; =0x7FF00000
+ orr r1, lr, r1
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020E9E58: .word 0x7FF00000
+
+ arm_func_start _d2f
+_d2f:
+ and r2, r1, #0x80000000
+ mov r12, r1, lsr #0x14
+ bics r12, r12, #0x800
+ beq _020E9ED4
+ mov r3, r12, lsl #0x15
+ cmn r3, #0x200000
+ bhs _020E9EB8
+ subs r12, r12, #0x380
+ bls _020E9EE4
+ cmp r12, #0xff
+ bge _020E9F54
+ mov r1, r1, lsl #0xc
+ orr r3, r2, r1, lsr #0x9
+ orr r3, r3, r0, lsr #0x1d
+ movs r1, r0, lsl #0x3
+ orr r0, r3, r12, lsl #0x17
+ bxeq lr
+ tst r1, #0x80000000
+ bxeq lr
+ movs r1, r1, lsl #0x1
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020E9EB8:
+ orrs r3, r0, r1, lsl #0xc
+ bne _020E9ECC
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020E9ECC:
+ mvn r0, #0x80000000
+ bx lr
+_020E9ED4:
+ orrs r3, r0, r1, lsl #0xc
+ bne _020E9F4C
+ mov r0, r2
+ bx lr
+_020E9EE4:
+ cmn r12, #0x17
+ beq _020E9F38
+ bmi _020E9F4C
+ mov r1, r1, lsl #0xb
+ orr r1, r1, #0x80000000
+ mov r3, r1, lsr #0x8
+ orr r3, r3, r0, lsr #0x1d
+ rsb r12, r12, #0x1
+ movs r1, r0, lsl #0x3
+ orr r0, r2, r3, lsr r12
+ rsb r12, r12, #0x20
+ mov r3, r3, lsl r12
+ orrne r3, r3, #0x1
+ movs r1, r3
+ bxeq lr
+ tst r1, #0x80000000
+ bxeq lr
+ movs r1, r1, lsl #0x1
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020E9F38:
+ orr r0, r0, r1, lsl #0xc
+ movs r1, r0
+ mov r0, r2
+ addne r0, r0, #0x1
+ bx lr
+_020E9F4C:
+ mov r0, r2
+ bx lr
+_020E9F54:
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+
+ arm_func_start _dfix
+_dfix: ; 0x020E9F60
+ bic r3, r1, #0x80000000
+ ldr r2, _020E9FA8 ; =0x0000041E
+ subs r2, r2, r3, lsr #0x14
+ ble _020E9F9C
+ cmp r2, #0x20
+ bge _020E9F94
+ mov r3, r1, lsl #0xb
+ orr r3, r3, #0x80000000
+ orr r3, r3, r0, lsr #0x15
+ cmp r1, #0x0
+ mov r0, r3, lsr r2
+ rsbmi r0, r0, #0x0
+ bx lr
+_020E9F94:
+ mov r0, #0x0
+ bx lr
+_020E9F9C:
+ mvn r0, r1, asr #0x1f
+ add r0, r0, #0x80000000
+ bx lr
+ .balign 4
+_020E9FA8: .word 0x0000041E
+
+ arm_func_start _ll_ufrom_d
+_ll_ufrom_d: ; 0x020E9FAC
+ tst r1, #0x80000000
+ bne _020EA010
+ ldr r2, _020EA034 ; =0x0000043E
+ subs r2, r2, r1, lsr #0x14
+ blt _020EA028
+ cmp r2, #0x40
+ bge _020EA004
+ mov r12, r1, lsl #0xb
+ orr r12, r12, #0x80000000
+ orr r12, r12, r0, lsr #0x15
+ cmp r2, #0x20
+ ble _020E9FEC
+ sub r2, r2, #0x20
+ mov r1, #0x0
+ mov r0, r12, lsr r2
+ bx lr
+_020E9FEC:
+ mov r3, r0, lsl #0xb
+ mov r1, r12, lsr r2
+ mov r0, r3, lsr r2
+ rsb r2, r2, #0x20
+ orr r0, r0, r12, lsl r2
+ bx lr
+_020EA004:
+ mov r1, #0x0
+ mov r0, #0x0
+ bx lr
+_020EA010:
+ cmn r1, #0x100000
+ cmpeq r0, #0x0
+ bhi _020EA028
+ mov r1, #0x0
+ mov r0, #0x0
+ bx lr
+_020EA028:
+ mvn r1, #0x0
+ mvn r0, #0x0
+ bx lr
+ .balign 4
+_020EA034: .word 0x0000043E
+
+ arm_func_start _dflt
+_dflt: ; 0x020EA038
+ ands r2, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r0, #0x0
+ mov r1, #0x0
+ bxeq lr
+ mov r3, #0x400
+ add r3, r3, #0x1e
+ clz r12, r0
+ movs r0, r0, lsl r12
+ sub r3, r3, r12
+ movs r1, r0
+ mov r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, r2, r1, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ bx lr
+
+ arm_func_start _dfltu
+_dfltu: ; 0x020EA078
+ cmp r0, #0x0
+ mov r1, #0x0
+ bxeq lr
+ mov r3, #0x400
+ add r3, r3, #0x1e
+ bmi _020EA09C
+ clz r12, r0
+ movs r0, r0, lsl r12
+ sub r3, r3, r12
+_020EA09C:
+ mov r1, r0
+ mov r0, r1, lsl #0x15
+ add r1, r1, r1
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ bx lr
+
+ arm_func_start _dmul
+_dmul: ; 0x020EA0B4
+ stmdb sp!, {r4-r7,lr}
+ eor lr, r1, r3
+ and lr, lr, #0x80000000
+ mov r12, r1, lsr #0x14
+ mov r1, r1, lsl #0xb
+ orr r1, r1, r0, lsr #0x15
+ mov r0, r0, lsl #0xb
+ movs r6, r12, lsl #0x15
+ cmnne r6, #0x200000
+ beq _020EA1BC
+ orr r1, r1, #0x80000000
+ bic r12, r12, #0x800
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r5, r4, lsl #0x15
+ cmnne r5, #0x200000
+ beq _020EA204
+ orr r3, r3, #0x80000000
+ bic r4, r4, #0x800
+_020EA108:
+ add r12, r4, r12
+ umull r5, r4, r0, r2
+ umull r7, r6, r0, r3
+ adds r4, r7, r4
+ adc r6, r6, #0x0
+ umull r7, r0, r1, r2
+ adds r4, r7, r4
+ adcs r0, r0, r6
+ umull r7, r2, r1, r3
+ adc r1, r2, #0x0
+ adds r0, r0, r7
+ adc r1, r1, #0x0
+ orrs r4, r4, r5
+ orrne r0, r0, #0x1
+ cmp r1, #0x0
+ blt _020EA154
+ sub r12, r12, #0x1
+ adds r0, r0, r0
+ adc r1, r1, r1
+_020EA154:
+ add r12, r12, #0x2
+ subs r12, r12, #0x400
+ bmi _020EA2F0
+ beq _020EA2F0
+ mov r6, r12, lsl #0x14
+ cmn r6, #0x100000
+ bmi _020EA3F0
+ movs r2, r0, lsl #0x15
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, lr, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ tst r2, #0x80000000
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ movs r2, r2, lsl #0x1
+ andeqs r2, r0, #0x1
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA1BC:
+ bics r12, r12, #0x800
+ beq _020EA218
+ orrs r6, r0, r1, lsl #0x1
+ bne _020EA3A4
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r5, r4, lsl #0x15
+ beq _020EA1F8
+ cmn r5, #0x200000
+ bne _020EA390
+ orrs r5, r2, r3, lsl #0x1
+ beq _020EA390
+ b _020EA3A4
+_020EA1F8:
+ orrs r5, r3, r2
+ beq _020EA3B8
+ b _020EA390
+_020EA204:
+ bics r4, r4, #0x800
+ beq _020EA2AC
+ orrs r6, r2, r3, lsl #0x1
+ bne _020EA3A4
+ b _020EA390
+_020EA218:
+ orrs r6, r0, r1, lsl #0x1
+ beq _020EA280
+ mov r12, #0x1
+ cmp r1, #0x0
+ bne _020EA23C
+ sub r12, r12, #0x20
+ movs r1, r0
+ mov r0, #0x0
+ bmi _020EA258
+_020EA23C:
+ clz r6, r1
+ movs r1, r1, lsl r6
+ rsb r6, r6, #0x20
+ orr r1, r1, r0, lsr r6
+ rsb r6, r6, #0x20
+ mov r0, r0, lsl r6
+ sub r12, r12, r6
+_020EA258:
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r5, r4, lsl #0x15
+ cmnne r5, #0x200000
+ beq _020EA204
+ orr r3, r3, #0x80000000
+ bic r4, r4, #0x800
+ b _020EA108
+_020EA280:
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r5, r4, lsl #0x15
+ beq _020EA404
+ cmn r5, #0x200000
+ bne _020EA404
+ orrs r6, r2, r3, lsl #0x1
+ beq _020EA3B8
+ b _020EA3A4
+_020EA2AC:
+ orrs r5, r2, r3, lsl #0x1
+ beq _020EA404
+ mov r4, #0x1
+ cmp r3, #0x0
+ bne _020EA2D0
+ sub r4, r4, #0x20
+ movs r3, r2
+ mov r2, #0x0
+ bmi _020EA108
+_020EA2D0:
+ clz r6, r3
+ movs r3, r3, lsl r6
+ rsb r6, r6, #0x20
+ orr r3, r3, r2, lsr r6
+ rsb r6, r6, #0x20
+ mov r2, r2, lsl r6
+ sub r4, r4, r6
+ b _020EA108
+_020EA2F0:
+ cmn r12, #0x34
+ beq _020EA388
+ bmi _020EA3E0
+ mov r2, r1
+ mov r3, r0
+ add r4, r12, #0x34
+ cmp r4, #0x20
+ movge r2, r3
+ movge r3, #0x0
+ subge r4, r4, #0x20
+ rsb r5, r4, #0x20
+ mov r2, r2, lsl r4
+ orr r2, r2, r3, lsr r5
+ movs r3, r3, lsl r4
+ orrne r2, r2, #0x1
+ rsb r12, r12, #0xc
+ cmp r12, #0x20
+ movge r0, r1
+ movge r1, #0x0
+ subge r12, r12, #0x20
+ rsb r4, r12, #0x20
+ mov r0, r0, lsr r12
+ orr r0, r0, r1, lsl r4
+ orr r1, lr, r1, lsr r12
+ cmp r2, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ tst r2, #0x80000000
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ movs r2, r2, lsl #0x1
+ andeqs r2, r0, #0x1
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA388:
+ orr r0, r0, r1, lsl #0x1
+ b _020EA3C8
+_020EA390:
+ ldr r1, _020EA414 ; =0x7FF00000
+ orr r1, lr, r1
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA3A4:
+ mov r1, r3
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA3B8:
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA3C8:
+ movs r2, r0
+ mov r1, lr
+ mov r0, #0x0
+ addne r0, r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA3E0:
+ mov r1, lr
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA3F0:
+ ldr r1, _020EA414 ; =0x7FF00000
+ orr r1, lr, r1
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020EA404:
+ mov r1, lr
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020EA414: .word 0x7FF00000
+
+ arm_func_start _dsqrt
+_dsqrt: ; 0x020EA418
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020EA5A8 ; =0x7FF00000
+ cmp r1, r2
+ bhs _020EA564
+ movs r12, r1, lsr #0x14
+ beq _020EA510
+ bic r1, r1, r2
+ orr r1, r1, #0x100000
+_020EA438:
+ movs r12, r12, asr #0x1
+ bhs _020EA44C
+ sub r12, r12, #0x1
+ movs r0, r0, lsl #0x1
+ adc r1, r1, r1
+_020EA44C:
+ movs r3, r0, lsl #0x1
+ adc r1, r1, r1
+ mov r2, #0x0
+ mov r4, #0x0
+ mov lr, #0x200000
+_020EA460:
+ add r6, r4, lr
+ cmp r6, r1
+ addle r4, r6, lr
+ suble r1, r1, r6
+ addle r2, r2, lr
+ movs r3, r3, lsl #0x1
+ adc r1, r1, r1
+ movs lr, lr, lsr #0x1
+ bne _020EA460
+ mov r0, #0x0
+ mov r5, #0x0
+ cmp r1, r4
+ cmpeq r3, #0x80000000
+ blo _020EA4A8
+ subs r3, r3, #0x80000000
+ sbc r1, r1, r4
+ add r4, r4, #0x1
+ mov r0, #0x80000000
+_020EA4A8:
+ movs r3, r3, lsl #0x1
+ adc r1, r1, r1
+ mov lr, #0x40000000
+_020EA4B4:
+ add r6, r5, lr
+ cmp r4, r1
+ cmpeq r6, r3
+ bhi _020EA4D4
+ add r5, r6, lr
+ subs r3, r3, r6
+ sbc r1, r1, r4
+ add r0, r0, lr
+_020EA4D4:
+ movs r3, r3, lsl #0x1
+ adc r1, r1, r1
+ movs lr, lr, lsr #0x1
+ bne _020EA4B4
+ orrs r1, r1, r3
+ biceq r0, r0, #0x1
+ movs r1, r2, lsr #0x1
+ movs r0, r0, rrx
+ adcs r0, r0, #0x0
+ adc r1, r1, #0x0
+ add r1, r1, #0x20000000
+ sub r1, r1, #0x100000
+ add r1, r1, r12, lsl #0x14
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EA510:
+ cmp r1, #0x0
+ bne _020EA540
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mvn r12, #0x13
+ clz r5, r0
+ movs r0, r0, lsl r5
+ sub r12, r12, r5
+ mov r1, r0, lsr #0xb
+ mov r0, r0, lsl #0x15
+ b _020EA438
+_020EA540:
+ clz r2, r1
+ movs r1, r1, lsl r2
+ rsb r2, r2, #0x2b
+ mov r1, r1, lsr #0xb
+ orr r1, r1, r0, lsr r2
+ rsb r2, r2, #0x20
+ mov r0, r0, lsl r2
+ rsb r12, r2, #0x1
+ b _020EA438
+_020EA564:
+ tst r1, #0x80000000
+ beq _020EA580
+ bics r3, r1, #0x80000000
+ cmpeq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ b _020EA58C
+_020EA580:
+ orrs r2, r0, r1, lsl #0xc
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+_020EA58C:
+ ldr r2, _020EA5AC ; =0x7FF80000
+ orr r1, r1, r2
+ ldr r3, _020EA5B0 ; =0x021D74A8
+ mov r4, #0x21
+ str r4, [r3, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020EA5A8: .word 0x7FF00000
+_020EA5AC: .word 0x7FF80000
+_020EA5B0: .word 0x021D74A8
+
+ arm_func_start _drsb
+_drsb: ; 0x020EA5B4
+ eor r1, r1, r3
+ eor r3, r1, r3
+ eor r1, r1, r3
+ eor r0, r0, r2
+ eor r2, r0, r2
+ eor r0, r0, r2
+
+ arm_func_start _dsub
+_dsub:
+ stmdb sp!, {r4,lr}
+ eors r12, r1, r3
+ eormi r3, r3, #0x80000000
+ bmi _020E9B54
+_020EA5DC:
+ subs r12, r0, r2
+ sbcs lr, r1, r3
+ bhs _020EA5FC
+ eor lr, lr, #0x80000000
+ adds r2, r2, r12
+ adc r3, r3, lr
+ subs r0, r0, r12
+ sbc r1, r1, lr
+_020EA5FC:
+ mov lr, #0x80000000
+ mov r12, r1, lsr #0x14
+ orr r1, lr, r1, lsl #0xb
+ orr r1, r1, r0, lsr #0x15
+ mov r0, r0, lsl #0xb
+ movs r4, r12, lsl #0x15
+ cmnne r4, #0x200000
+ beq _020EA800
+ mov r4, r3, lsr #0x14
+ orr r3, lr, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs lr, r4, lsl #0x15
+ beq _020EA848
+_020EA634:
+ subs r4, r12, r4
+ beq _020EA6DC
+ cmp r4, #0x20
+ ble _020EA670
+ cmp r4, #0x38
+ movge r4, #0x3f
+ sub r4, r4, #0x20
+ rsb lr, r4, #0x20
+ orrs lr, r2, r3, lsl lr
+ mov r2, r3, lsr r4
+ orrne r2, r2, #0x1
+ subs r0, r0, r2
+ sbcs r1, r1, #0x0
+ bmi _020EA698
+ b _020EA788
+_020EA670:
+ rsb lr, r4, #0x20
+ movs lr, r2, lsl lr
+ rsb lr, r4, #0x20
+ mov r2, r2, lsr r4
+ orr r2, r2, r3, lsl lr
+ mov r3, r3, lsr r4
+ orrne r2, r2, #0x1
+ subs r0, r0, r2
+ sbcs r1, r1, r3
+ bpl _020EA788
+_020EA698:
+ movs r2, r0, lsl #0x15
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ tst r2, #0x80000000
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ movs r2, r2, lsl #0x1
+ andeqs r2, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA6DC:
+ subs r0, r0, r2
+ sbc r1, r1, r3
+ orrs lr, r1, r0
+ beq _020EA96C
+ mov lr, r12, lsl #0x14
+ and lr, lr, #0x80000000
+ bic r12, r12, #0x800
+ cmp r1, #0x0
+ bmi _020EA764
+ bne _020EA714
+ sub r12, r12, #0x20
+ movs r1, r0
+ mov r0, #0x0
+ bmi _020EA730
+_020EA714:
+ clz r4, r1
+ movs r1, r1, lsl r4
+ rsb r4, r4, #0x20
+ orr r1, r1, r0, lsr r4
+ rsb r4, r4, #0x20
+ mov r0, r0, lsl r4
+ sub r12, r12, r4
+_020EA730:
+ cmp r12, #0x0
+ bgt _020EA76C
+ rsb r12, r12, #0xc
+ cmp r12, #0x20
+ movge r0, r1
+ movge r1, #0x0
+ subge r12, r12, #0x20
+ rsb r4, r12, #0x20
+ mov r0, r0, lsr r12
+ orr r0, r0, r1, lsl r4
+ orr r1, lr, r1, lsr r12
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA764:
+ cmp r1, #0x0
+ subges r12, r12, #0x1
+_020EA76C:
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, lr, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA788:
+ mov lr, r12, lsl #0x14
+ and lr, lr, #0x80000000
+ bic r12, r12, #0x800
+ cmp r1, #0x0
+ bne _020EA7AC
+ sub r12, r12, #0x20
+ movs r1, r0
+ mov r0, #0x0
+ bmi _020EA7C8
+_020EA7AC:
+ clz r4, r1
+ movs r1, r1, lsl r4
+ rsb r4, r4, #0x20
+ orr r1, r1, r0, lsr r4
+ rsb r4, r4, #0x20
+ mov r0, r0, lsl r4
+ sub r12, r12, r4
+_020EA7C8:
+ cmp r12, #0x0
+ orrgt r12, r12, lr, lsr #0x14
+ bgt _020EA698
+ rsb r12, r12, #0xc
+ cmp r12, #0x20
+ movge r0, r1
+ movge r1, #0x0
+ subge r12, r12, #0x20
+ rsb r4, r12, #0x20
+ mov r0, r0, lsr r12
+ orr r0, r0, r1, lsl r4
+ orr r1, lr, r1, lsr r12
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA800:
+ cmp r12, #0x800
+ movge lr, #0x80000000
+ movlt lr, #0x0
+ bics r12, r12, #0x800
+ beq _020EA86C
+ orrs r4, r0, r1, lsl #0x1
+ bne _020EA948
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r4, r4, lsl #0x15
+ beq _020EA934
+ cmn r4, #0x200000
+ bne _020EA934
+ orrs r4, r2, r3, lsl #0x1
+ beq _020EA95C
+ b _020EA948
+_020EA848:
+ cmp r4, #0x800
+ movge lr, #0x80000000
+ movlt lr, #0x0
+ bic r12, r12, #0x800
+ bics r4, r4, #0x800
+ beq _020EA8E4
+ orrs r4, r2, r3, lsl #0x1
+ bne _020EA948
+ b _020EA934
+_020EA86C:
+ orrs r4, r0, r1, lsl #0x1
+ beq _020EA8AC
+ mov r12, #0x1
+ bic r1, r1, #0x80000000
+ mov r4, r3, lsr #0x14
+ mov r3, r3, lsl #0xb
+ orr r3, r3, r2, lsr #0x15
+ mov r2, r2, lsl #0xb
+ movs r4, r4, lsl #0x15
+ cmnne r4, #0x200000
+ mov r4, r4, lsr #0x15
+ orr r4, r4, lr, lsr #0x14
+ beq _020EA848
+ orr r3, r3, #0x80000000
+ orr r12, r12, lr, lsr #0x14
+ b _020EA634
+_020EA8AC:
+ mov r12, r3, lsr #0x14
+ mov r1, r3, lsl #0xb
+ orr r1, r1, r2, lsr #0x15
+ mov r0, r2, lsl #0xb
+ movs r4, r12, lsl #0x15
+ beq _020EA8D8
+ cmn r4, #0x200000
+ bne _020EA900
+ orrs r4, r0, r1, lsl #0x1
+ bne _020EA94C
+ b _020EA934
+_020EA8D8:
+ orrs r4, r0, r1, lsl #0x1
+ beq _020EA96C
+ b _020EA900
+_020EA8E4:
+ orrs r4, r2, r3, lsl #0x1
+ beq _020EA910
+ mov r4, #0x1
+ bic r3, r3, #0x80000000
+ orr r12, r12, lr, lsr #0x14
+ orr r4, r4, lr, lsr #0x14
+ b _020EA634
+_020EA900:
+ mov r1, r3
+ mov r0, r2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA910:
+ cmp r1, #0x0
+ subges r12, r12, #0x1
+ mov r0, r0, lsr #0xb
+ orr r0, r0, r1, lsl #0x15
+ add r1, r1, r1
+ orr r1, lr, r1, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA934:
+ ldr r1, _020EA97C ; =0x7FF00000
+ orr r1, lr, r1
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA948:
+ mov r1, r3
+_020EA94C:
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA95C:
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020EA96C:
+ mov r1, #0x0
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020EA97C: .word 0x7FF00000
+
+ arm_func_start _fadd
+_fadd: ; 0x020EA980
+ eors r2, r0, r1
+ eormi r1, r1, #0x80000000
+ bmi _020EB7BC
+_020EA98C:
+ subs r12, r0, r1
+ subcc r0, r0, r12
+ addcc r1, r1, r12
+ mov r2, #0x80000000
+ mov r3, r0, lsr #0x17
+ orr r0, r2, r0, lsl #0x8
+ ands r12, r3, #0xff
+ cmpne r12, #0xff
+ beq _020EAA20
+ mov r12, r1, lsr #0x17
+ orr r1, r2, r1, lsl #0x8
+ ands r2, r12, #0xff
+ beq _020EAA60
+_020EA9C0:
+ subs r12, r3, r12
+ beq _020EA9D8
+ rsb r2, r12, #0x20
+ movs r2, r1, lsl r2
+ mov r1, r1, lsr r12
+ orrne r1, r1, #0x1
+_020EA9D8:
+ adds r0, r0, r1
+ blo _020EA9F8
+ and r1, r0, #0x1
+ orr r0, r1, r0, rrx
+ add r3, r3, #0x1
+ and r2, r3, #0xff
+ cmp r2, #0xff
+ beq _020EAB68
+_020EA9F8:
+ ands r1, r0, #0xff
+ add r0, r0, r0
+ mov r0, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ tst r1, #0x80
+ bxeq lr
+ ands r1, r1, #0x7f
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EAA20:
+ cmp r3, #0x100
+ movge r2, #0x80000000
+ movlt r2, #0x0
+ ands r3, r3, #0xff
+ beq _020EAA84
+ movs r0, r0, lsl #0x1
+ bne _020EAB94
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EAB88
+ cmp r12, #0xff
+ blt _020EAB88
+ cmp r1, #0x0
+ beq _020EAB88
+ b _020EAB94
+_020EAA60:
+ cmp r3, #0x100
+ movge r2, #0x80000000
+ movlt r2, #0x0
+ and r3, r3, #0xff
+ ands r12, r12, #0xff
+ beq _020EAAE0
+_020EAA78:
+ movs r1, r1, lsl #0x1
+ bne _020EAB94
+ b _020EAB88
+_020EAA84:
+ movs r0, r0, lsl #0x1
+ beq _020EAABC
+ mov r3, #0x1
+ mov r0, r0, lsr #0x1
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x8
+ ands r12, r12, #0xff
+ beq _020EAAE0
+ cmp r12, #0xff
+ beq _020EAA78
+ orr r1, r1, #0x80000000
+ orr r3, r3, r2, lsr #0x17
+ orr r12, r12, r2, lsr #0x17
+ b _020EA9C0
+_020EAABC:
+ mov r3, r1, lsr #0x17
+ mov r0, r1, lsl #0x9
+ ands r3, r3, #0xff
+ beq _020EAB48
+ cmp r3, #0xff
+ blt _020EAB48
+ cmp r0, #0x0
+ beq _020EAB88
+ b _020EAB80
+_020EAAE0:
+ movs r1, r1, lsl #0x1
+ beq _020EAB50
+ mov r1, r1, lsr #0x1
+ mov r12, #0x1
+ orr r3, r3, r2, lsr #0x17
+ orr r12, r12, r2, lsr #0x17
+ cmp r0, #0x0
+ bmi _020EA9C0
+ adds r0, r0, r1
+ blo _020EAB14
+ and r1, r0, #0x1
+ orr r0, r1, r0, rrx
+ add r12, r12, #0x1
+_020EAB14:
+ cmp r0, #0x0
+ subge r12, r12, #0x1
+ ands r1, r0, #0xff
+ add r0, r0, r0
+ mov r0, r0, lsr #0x9
+ orr r0, r0, r12, lsl #0x17
+ bxeq lr
+ tst r1, #0x80
+ bxeq lr
+ ands r1, r1, #0x7f
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EAB48:
+ mov r0, r1
+ bx lr
+_020EAB50:
+ cmp r0, #0x0
+ subges r3, r3, #0x1
+ add r0, r0, r0
+ orr r0, r2, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bx lr
+_020EAB68:
+ cmp r3, #0x100
+ movge r2, #0x80000000
+ movlt r2, #0x0
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020EAB80:
+ mvn r0, #0x80000000
+ bx lr
+_020EAB88:
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020EAB94:
+ mvn r0, #0x80000000
+ bx lr
+_020EAB9C: ; 0x020EAB9C
+ mvn r0, #0x80000000
+ bx lr
+
+ arm_func_start _dgr
+_dgr: ; 0x020EABA4
+ mov r12, #0x200000
+ cmn r12, r1, lsl #0x1
+ bhs _020EAC18
+ cmn r12, r3, lsl #0x1
+ bhs _020EAC2C
+_020EABB8:
+ orrs r12, r3, r1
+ bmi _020EABE8
+ cmp r1, r3
+ cmpeq r0, r2
+ movhi r0, #0x1
+ movls r0, #0x0
+ bx lr
+_020EABD4:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EABE8:
+ orr r12, r0, r12, lsl #0x1
+ orrs r12, r12, r2
+ moveq r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bxeq lr
+ cmp r3, r1
+ cmpeq r2, r0
+ movhi r0, #0x1
+ movls r0, #0x0
+ bx lr
+_020EAC18:
+ bne _020EABD4
+ cmp r0, #0x0
+ bhi _020EABD4
+ cmn r12, r3, lsl #0x1
+ blo _020EABB8
+_020EAC2C:
+ bne _020EABD4
+ cmp r2, #0x0
+ bhi _020EABD4
+ b _020EABB8
+
+ arm_func_start _dleq
+_dleq: ; 0x020EAC3C
+ mov r12, #0x200000
+ cmn r12, r1, lsl #0x1
+ bhs _020EACBC
+ cmn r12, r3, lsl #0x1
+ bhs _020EACD0
+_020EAC50:
+ orrs r12, r3, r1
+ bmi _020EAC84
+ cmp r1, r3
+ cmpeq r0, r2
+ movls r0, #0x1
+ movhi r0, #0x0
+ bx lr
+_020EAC6C:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x40000000
+ orr r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EAC84:
+ orr r12, r0, r12, lsl #0x1
+ orrs r12, r12, r2
+ moveq r0, #0x1
+ bne _020EACA8
+ mrs r12, cpsr
+ bic r12, r12, #0x20000000
+ orr r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bxeq lr
+_020EACA8:
+ cmp r3, r1
+ cmpeq r2, r0
+ movls r0, #0x1
+ movhi r0, #0x0
+ bx lr
+_020EACBC:
+ bne _020EAC6C
+ cmp r0, #0x0
+ bhi _020EAC6C
+ cmn r12, r3, lsl #0x1
+ blo _020EAC50
+_020EACD0:
+ bne _020EAC6C
+ cmp r2, #0x0
+ bhi _020EAC6C
+ b _020EAC50
+
+ arm_func_start _dls
+_dls: ; 0x020EACE0
+ mov r12, #0x200000
+ cmn r12, r1, lsl #0x1
+ bhs _020EAD58
+ cmn r12, r3, lsl #0x1
+ bhs _020EAD6C
+_020EACF4:
+ orrs r12, r3, r1
+ bmi _020EAD24
+ cmp r1, r3
+ cmpeq r0, r2
+ movcc r0, #0x1
+ movcs r0, #0x0
+ bx lr
+_020EAD10:
+ mov r0, #0x0
+ mrs r12, cpsr
+ orr r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EAD24:
+ orr r12, r0, r12, lsl #0x1
+ orrs r12, r12, r2
+ moveq r0, #0x0
+ bne _020EAD44
+ mrs r12, cpsr
+ orr r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bxeq lr
+_020EAD44:
+ cmp r3, r1
+ cmpeq r2, r0
+ movcc r0, #0x1
+ movcs r0, #0x0
+ bx lr
+_020EAD58:
+ bne _020EAD10
+ cmp r0, #0x0
+ bhi _020EAD10
+ cmn r12, r3, lsl #0x1
+ blo _020EACF4
+_020EAD6C:
+ bne _020EAD10
+ cmp r2, #0x0
+ bhi _020EAD10
+ b _020EACF4
+
+ arm_func_start _deq
+_deq: ; 0x020EAD7C
+ mov r12, #0x200000
+ cmn r12, r1, lsl #0x1
+ bhs _020EADE4
+ cmn r12, r3, lsl #0x1
+ bhs _020EADF8
+_020EAD90:
+ orrs r12, r3, r1
+ bmi _020EADC0
+ cmp r1, r3
+ cmpeq r0, r2
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+_020EADAC:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+_020EADC0:
+ orr r12, r0, r12, lsl #0x1
+ orrs r12, r12, r2
+ moveq r0, #0x1
+ bxeq lr
+ cmp r3, r1
+ cmpeq r2, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+_020EADE4:
+ bne _020EADAC
+ cmp r0, #0x0
+ bhi _020EADAC
+ cmn r12, r3, lsl #0x1
+ blo _020EAD90
+_020EADF8:
+ bne _020EADAC
+ cmp r2, #0x0
+ bhi _020EADAC
+ b _020EAD90
+
+ arm_func_start _dneq
+_dneq: ; 0x020EAE08
+ mov r12, #0x200000
+ cmn r12, r1, lsl #0x1
+ bhs _020EAE70
+ cmn r12, r3, lsl #0x1
+ bhs _020EAE84
+_020EAE1C:
+ orrs r12, r3, r1
+ bmi _020EAE4C
+ cmp r1, r3
+ cmpeq r0, r2
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+_020EAE38:
+ mov r0, #0x1
+ mrs r12, cpsr
+ bic r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+_020EAE4C:
+ orr r12, r0, r12, lsl #0x1
+ orrs r12, r12, r2
+ moveq r0, #0x0
+ bxeq lr
+ cmp r3, r1
+ cmpeq r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+_020EAE70:
+ bne _020EAE38
+ cmp r0, #0x0
+ bhi _020EAE38
+ cmn r12, r3, lsl #0x1
+ blo _020EAE1C
+_020EAE84:
+ bne _020EAE38
+ cmp r2, #0x0
+ bhi _020EAE38
+ b _020EAE1C
+
+ arm_func_start _fgeq
+_fgeq: ; 0x020EAE94
+ mov r3, #0xff000000
+ cmp r3, r0, lsl #0x1
+ cmpcs r3, r1, lsl #0x1
+ blo _020EAEDC
+ cmp r0, #0x0
+ bicmi r0, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r1, #0x0
+ bicmi r1, r1, #0x80000000
+ rsbmi r1, r1, #0x0
+ cmp r0, r1
+ movge r0, #0x1
+ movlt r0, #0x0
+ mrs r12, cpsr
+ biclt r12, r12, #0x20000000
+ orrge r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EAEDC:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+
+ arm_func_start _fgr
+_fgr: ; 0x020EAEF0
+ mov r3, #0xff000000
+ cmp r3, r0, lsl #0x1
+ cmpcs r3, r1, lsl #0x1
+ blo _020EAF38
+ cmp r0, #0x0
+ bicmi r0, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r1, #0x0
+ bicmi r1, r1, #0x80000000
+ rsbmi r1, r1, #0x0
+ cmp r0, r1
+ movgt r0, #0x1
+ movle r0, #0x0
+ mrs r12, cpsr
+ bicle r12, r12, #0x20000000
+ orrgt r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EAF38:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+
+ arm_func_start _fleq
+_fleq: ; 0x020EAF4C
+ mov r3, #0xff000000
+ cmp r3, r0, lsl #0x1
+ cmpcs r3, r1, lsl #0x1
+ blo _020EAF9C
+ cmp r0, #0x0
+ bicmi r0, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r1, #0x0
+ bicmi r1, r1, #0x80000000
+ rsbmi r1, r1, #0x0
+ cmp r0, r1
+ movle r0, #0x1
+ movgt r0, #0x0
+ mrs r12, cpsr
+ orrgt r12, r12, #0x20000000
+ bicgt r12, r12, #0x40000000
+ bicle r12, r12, #0x20000000
+ orrle r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+_020EAF9C:
+ mov r0, #0x0
+ mrs r12, cpsr
+ bic r12, r12, #0x40000000
+ orr r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+
+ arm_func_start _fls
+_fls: ; 0x020EAFB4
+ mov r3, #0xff000000
+ cmp r3, r0, lsl #0x1
+ cmpcs r3, r1, lsl #0x1
+ blo _020EAFFC
+ cmp r0, #0x0
+ bicmi r0, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r1, #0x0
+ bicmi r1, r1, #0x80000000
+ rsbmi r1, r1, #0x0
+ cmp r0, r1
+ movlt r0, #0x1
+ movge r0, #0x0
+ mrs r12, cpsr
+ orrge r12, r12, #0x20000000
+ biclt r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+_020EAFFC:
+ mov r0, #0x0
+ mrs r12, cpsr
+ orr r12, r12, #0x20000000
+ msr cpsr_f, r12
+ bx lr
+
+ arm_func_start _feq
+_feq: ; 0x020EB010
+ mov r3, #0xff000000
+ cmp r3, r0, lsl #0x1
+ blo _020EB064
+ cmp r3, r1, lsl #0x1
+ blo _020EB064
+ orr r3, r0, r1
+ movs r3, r3, lsl #0x1
+ moveq r0, #0x0
+ bne _020EB044
+ mrs r12, cpsr
+ orr r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+_020EB044:
+ cmp r0, r1
+ movne r0, #0x1
+ moveq r0, #0x0
+ mrs r12, cpsr
+ bicne r12, r12, #0x40000000
+ orreq r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+_020EB064:
+ mov r0, #0x1
+ mrs r12, cpsr
+ bic r12, r12, #0x40000000
+ msr cpsr_f, r12
+ bx lr
+
+ arm_func_start _frdiv
+_frdiv: ; 0x020EB078
+ eor r0, r0, r1
+ eor r1, r0, r1
+ eor r0, r0, r1
+
+ arm_func_start _fdiv
+_fdiv: ; 0x020EB084
+ stmdb sp!, {lr}
+ mov r12, #0xff
+ ands r3, r12, r0, lsr #0x17
+ cmpne r3, #0xff
+ beq _020EB258
+ ands r12, r12, r1, lsr #0x17
+ cmpne r12, #0xff
+ beq _020EB294
+ orr r1, r1, #0x800000
+ orr r0, r0, #0x800000
+ bic r2, r0, #0xff000000
+ bic lr, r1, #0xff000000
+_020EB0B4:
+ cmp r2, lr
+ movcc r2, r2, lsl #0x1
+ subcc r3, r3, #0x1
+ teq r0, r1
+ sub r0, pc, #0x94
+ ldrb r1, [r0, lr, lsr #0xf]
+ rsb lr, lr, #0x0
+ mov r0, lr, asr #0x1
+ mul r0, r1, r0
+ add r0, r0, #0x80000000
+ mov r0, r0, lsr #0x6
+ mul r0, r1, r0
+ mov r0, r0, lsr #0xe
+ mul r1, lr, r0
+ sub r12, r3, r12
+ mov r1, r1, lsr #0xc
+ mul r1, r0, r1
+ mov r0, r0, lsl #0xe
+ add r0, r0, r1, lsr #0xf
+ umull r1, r0, r2, r0
+ mov r3, r0
+ orrmi r0, r0, #0x80000000
+ adds r12, r12, #0x7e
+ bmi _020EB35C
+ cmp r12, #0xfe
+ bge _020EB410
+ add r0, r0, r12, lsl #0x17
+ mov r12, r1, lsr #0x1c
+ cmp r12, #0x7
+ beq _020EB238
+ add r0, r0, r1, lsr #0x1f
+ ldmia sp!, {lr}
+ bx lr
+_020EB138: ; not code
+ .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9
+ .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA
+ .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE
+ .byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2
+ .byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8
+ .byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF
+ .byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6
+ .byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF
+ .byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7
+ .byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1
+ .byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B
+ .byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95
+ .byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90
+ .byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B
+ .byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86
+ .byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82
+ .byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
+_020EB238:
+ mov r1, r3, lsl #0x1
+ add r1, r1, #0x1
+ rsb lr, lr, #0x0
+ mul r1, lr, r1
+ cmp r1, r2, lsl #0x18
+ addmi r0, r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020EB258:
+ eor lr, r0, r1
+ and lr, lr, #0x80000000
+ cmp r3, #0x0
+ beq _020EB2B0
+ movs r0, r0, lsl #0x9
+ bne _020EB3F8
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EB3E8
+ cmp r12, #0xff
+ blt _020EB3E8
+ cmp r1, #0x0
+ beq _020EB404
+ b _020EB3E0
+_020EB294:
+ eor lr, r0, r1
+ and lr, lr, #0x80000000
+ cmp r12, #0x0
+ beq _020EB314
+_020EB2A4:
+ movs r1, r1, lsl #0x9
+ bne _020EB3E0
+ b _020EB430
+_020EB2B0:
+ movs r2, r0, lsl #0x9
+ beq _020EB2E4
+ clz r3, r2
+ movs r2, r2, lsl r3
+ rsb r3, r3, #0x0
+ mov r2, r2, lsr #0x8
+ ands r12, r12, r1, lsr #0x17
+ beq _020EB33C
+ cmp r12, #0xff
+ beq _020EB2A4
+ orr r1, r1, #0x800000
+ bic lr, r1, #0xff000000
+ b _020EB0B4
+_020EB2E4:
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EB308
+ cmp r12, #0xff
+ blt _020EB430
+ cmp r1, #0x0
+ beq _020EB430
+ b _020EB3E0
+_020EB308:
+ cmp r1, #0x0
+ beq _020EB404
+ b _020EB430
+_020EB314:
+ movs r12, r1, lsl #0x9
+ beq _020EB3E8
+ mov lr, r12
+ clz r12, lr
+ movs lr, lr, lsl r12
+ rsb r12, r12, #0x0
+ mov lr, lr, lsr #0x8
+ orr r0, r0, #0x800000
+ bic r2, r0, #0xff000000
+ b _020EB0B4
+_020EB33C:
+ movs r12, r1, lsl #0x9
+ beq _020EB3E8
+ mov lr, r12
+ clz r12, lr
+ movs lr, lr, lsl r12
+ rsb r12, r12, #0x0
+ mov lr, lr, lsr #0x8
+ b _020EB0B4
+_020EB35C:
+ and r0, r0, #0x80000000
+ cmn r12, #0x18
+ beq _020EB3D0
+ bmi _020EB428
+ add r1, r12, #0x17
+ mov r2, r2, lsl r1
+ rsb r12, r12, #0x0
+ mov r3, r3, lsr r12
+ orr r0, r0, r3
+ rsb lr, lr, #0x0
+ mul r1, lr, r3
+ cmp r1, r2
+ ldmeqia sp!, {lr}
+ bxeq lr
+ add r1, r1, lr
+ cmp r1, r2
+ beq _020EB3C4
+ addmi r0, r0, #0x1
+ subpl r1, r1, lr
+ add r1, lr, r1, lsl #0x1
+ cmp r1, r2, lsl #0x1
+ and r3, r0, #0x1
+ addmi r0, r0, #0x1
+ addeq r0, r0, r3
+ ldmia sp!, {lr}
+ bx lr
+_020EB3C4:
+ add r0, r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020EB3D0:
+ cmn r2, lr
+ addne r0, r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020EB3E0:
+ mov r0, r1
+ b _020EB3F8
+_020EB3E8:
+ mov r0, #0xff000000
+ orr r0, lr, r0, lsr #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020EB3F8:
+ mvn r0, #0x80000000
+ ldmia sp!, {lr}
+ bx lr
+_020EB404:
+ mvn r0, #0x80000000
+ ldmia sp!, {lr}
+ bx lr
+_020EB410:
+ tst r0, #0x80000000
+ mov r0, #0xff000000
+ movne r0, r0, asr #0x1
+ moveq r0, r0, lsr #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020EB428:
+ ldmia sp!, {lr}
+ bx lr
+_020EB430:
+ mov r0, lr
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start _f2d
+_f2d:
+ and r2, r0, #0x80000000
+ mov r12, r0, lsr #0x17
+ mov r3, r0, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EB46C
+ cmp r12, #0xff
+ beq _020EB498
+_020EB458:
+ add r12, r12, #0x380
+ mov r0, r3, lsl #0x14
+ orr r1, r2, r3, lsr #0xc
+ orr r1, r1, r12, lsl #0x14
+ bx lr
+_020EB46C:
+ cmp r3, #0x0
+ bne _020EB480
+ mov r1, r2
+ mov r0, #0x0
+ bx lr
+_020EB480:
+ mov r3, r3, lsr #0x1
+ clz r12, r3
+ movs r3, r3, lsl r12
+ rsb r12, r12, #0x1
+ add r3, r3, r3
+ b _020EB458
+_020EB498:
+ cmp r3, #0x0
+ bhi _020EB4B0
+ ldr r1, _020EB4BC ; =0x7FF00000
+ orr r1, r1, r2
+ mov r0, #0x0
+ bx lr
+_020EB4B0:
+ mvn r0, #0x0
+ bic r1, r0, #0x80000000
+ bx lr
+ .balign 4
+_020EB4BC: .word 0x7FF00000
+
+ arm_func_start _ffix
+_ffix: ; 0x020EB4C0
+ bic r1, r0, #0x80000000
+ mov r2, #0x9e
+ subs r2, r2, r1, lsr #0x17
+ ble _020EB4E8
+ mov r1, r1, lsl #0x8
+ orr r1, r1, #0x80000000
+ cmp r0, #0x0
+ mov r0, r1, lsr r2
+ rsbmi r0, r0, #0x0
+ bx lr
+_020EB4E8:
+ mvn r0, r0, asr #0x1f
+ add r0, r0, #0x80000000
+ bx lr
+
+ arm_func_start _ffixu
+_ffixu: ; 0x020EB4F4
+ tst r0, #0x80000000
+ bne _020EB518
+ mov r1, #0x9e
+ subs r1, r1, r0, lsr #0x17
+ blt _020EB52C
+ mov r2, r0, lsl #0x8
+ orr r0, r2, #0x80000000
+ mov r0, r0, lsr r1
+ bx lr
+_020EB518:
+ mov r2, #0xff000000
+ cmp r2, r0, lsl #0x1
+ movcs r0, #0x0
+ mvncc r0, #0x0
+ bx lr
+_020EB52C:
+ mvn r0, #0x0
+ bx lr
+
+ arm_func_start _fflt
+_fflt: ; 0x020EB534
+ ands r2, r0, #0x80000000
+ rsbmi r0, r0, #0x0
+ cmp r0, #0x0
+ bxeq lr
+ clz r3, r0
+ movs r0, r0, lsl r3
+ rsb r3, r3, #0x9e
+ ands r1, r0, #0xff
+ add r0, r0, r0
+ orr r0, r2, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bxeq lr
+ tst r1, #0x80
+ bxeq lr
+ ands r3, r1, #0x7f
+ andeqs r3, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+
+ arm_func_start _ffltu
+_ffltu: ; 0x020EB57C
+ cmp r0, #0x0
+ bxeq lr
+ mov r3, #0x9e
+ bmi _020EB598
+ clz r12, r0
+ movs r0, r0, lsl r12
+ sub r3, r3, r12
+_020EB598:
+ ands r2, r0, #0xff
+ add r0, r0, r0
+ mov r0, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bxeq lr
+ tst r2, #0x80
+ bxeq lr
+ ands r1, r2, #0x7f
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+
+ arm_func_start _fmul
+_fmul: ; 0x020EB5C4
+ eor r2, r0, r1
+ and r2, r2, #0x80000000
+ mov r12, #0xff
+ ands r3, r12, r0, lsr #0x17
+ mov r0, r0, lsl #0x8
+ cmpne r3, #0xff
+ beq _020EB640
+ orr r0, r0, #0x80000000
+ ands r12, r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x8
+ cmpne r12, #0xff
+ beq _020EB680
+ orr r1, r1, #0x80000000
+_020EB5F8:
+ add r12, r3, r12
+ umull r1, r3, r0, r1
+ movs r0, r3
+ addpl r0, r0, r0
+ subpl r12, r12, #0x1
+ subs r12, r12, #0x7f
+ bmi _020EB70C
+ cmp r12, #0xfe
+ bge _020EB778
+ ands r3, r0, #0xff
+ orr r0, r2, r0, lsr #0x8
+ add r0, r0, r12, lsl #0x17
+ tst r3, #0x80
+ bxeq lr
+ orrs r1, r1, r3, lsl #0x19
+ andeqs r3, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EB640:
+ cmp r3, #0x0
+ beq _020EB694
+ movs r0, r0, lsl #0x1
+ bne _020EB768
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EB674
+ cmp r12, #0xff
+ blt _020EB75C
+ cmp r1, #0x0
+ beq _020EB75C
+ b _020EB768
+_020EB674:
+ cmp r1, #0x0
+ beq _020EB770
+ b _020EB75C
+_020EB680:
+ cmp r12, #0x0
+ beq _020EB6F0
+_020EB688:
+ movs r1, r1, lsl #0x1
+ bne _020EB768
+ b _020EB75C
+_020EB694:
+ movs r0, r0, lsl #0x1
+ beq _020EB6CC
+ mov r0, r0, lsr #0x1
+ clz r3, r0
+ movs r0, r0, lsl r3
+ rsb r3, r3, #0x1
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x8
+ ands r12, r12, #0xff
+ beq _020EB6F0
+ cmp r12, #0xff
+ beq _020EB688
+ orr r1, r1, #0x80000000
+ b _020EB5F8
+_020EB6CC:
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EB79C
+ cmp r12, #0xff
+ blt _020EB79C
+ cmp r1, #0x0
+ beq _020EB770
+ b _020EB768
+_020EB6F0:
+ movs r1, r1, lsl #0x1
+ beq _020EB79C
+ mov r1, r1, lsr #0x1
+ clz r12, r1
+ movs r1, r1, lsl r12
+ rsb r12, r12, #0x1
+ b _020EB5F8
+_020EB70C:
+ cmn r12, #0x18
+ beq _020EB754
+ bmi _020EB794
+ cmp r1, #0x0
+ orrne r0, r0, #0x1
+ mov r3, r0
+ mov r0, r0, lsr #0x8
+ rsb r12, r12, #0x0
+ orr r0, r2, r0, lsr r12
+ rsb r12, r12, #0x18
+ movs r1, r3, lsl r12
+ bxeq lr
+ tst r1, #0x80000000
+ bxeq lr
+ movs r1, r1, lsl #0x1
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EB754:
+ mov r0, r0, lsl #0x1
+ b _020EB784
+_020EB75C:
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020EB768:
+ mvn r0, #0x80000000
+ bx lr
+_020EB770:
+ mvn r0, #0x80000000
+ bx lr
+_020EB778:
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020EB784:
+ movs r1, r0
+ mov r0, r2
+ addne r0, r0, #0x1
+ bx lr
+_020EB794:
+ mov r0, r2
+ bx lr
+_020EB79C:
+ mov r0, r2
+ bx lr
+
+ arm_func_start _frsb
+_frsb: ; 0x020EB7A4
+ eor r0, r0, r1
+ eor r1, r0, r1
+ eor r0, r0, r1
+
+ arm_func_start _fsub
+_fsub: ; 0x020EB7B0
+ eors r2, r0, r1
+ eormi r1, r1, #0x80000000
+ bmi _020EA98C
+_020EB7BC:
+ subs r12, r0, r1
+ eorcc r12, r12, #0x80000000
+ subcc r0, r0, r12
+ addcc r1, r1, r12
+ mov r2, #0x80000000
+ mov r3, r0, lsr #0x17
+ orr r0, r2, r0, lsl #0x8
+ ands r12, r3, #0xff
+ cmpne r12, #0xff
+ beq _020EB8D8
+ mov r12, r1, lsr #0x17
+ orr r1, r2, r1, lsl #0x8
+ ands r2, r12, #0xff
+ beq _020EB918
+_020EB7F4:
+ subs r12, r3, r12
+ beq _020EB83C
+ rsb r2, r12, #0x20
+ movs r2, r1, lsl r2
+ mov r1, r1, lsr r12
+ orrne r1, r1, #0x1
+ subs r0, r0, r1
+ bpl _020EB880
+ ands r1, r0, #0xff
+ add r0, r0, r0
+ mov r0, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ tst r1, #0x80
+ bxeq lr
+ ands r1, r1, #0x7f
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EB83C:
+ subs r0, r0, r1
+ beq _020EB9E4
+ mov r2, r3, lsl #0x17
+ and r2, r2, #0x80000000
+ bic r3, r3, #0x100
+ clz r12, r0
+ movs r0, r0, lsl r12
+ sub r3, r3, r12
+ cmp r3, #0x0
+ bgt _020EB870
+ rsb r3, r3, #0x9
+ orr r0, r2, r0, lsr r3
+ bx lr
+_020EB870:
+ add r0, r0, r0
+ orr r0, r2, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bx lr
+_020EB880:
+ mov r2, r3, lsl #0x17
+ and r2, r2, #0x80000000
+ bic r3, r3, #0x100
+ clz r12, r0
+ movs r0, r0, lsl r12
+ sub r3, r3, r12
+ cmp r3, #0x0
+ bgt _020EB8AC
+ rsb r3, r3, #0x9
+ orr r0, r2, r0, lsr r3
+ bx lr
+_020EB8AC:
+ ands r1, r0, #0xff
+ add r0, r0, r0
+ orr r0, r2, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bxeq lr
+ tst r1, #0x80
+ bxeq lr
+ ands r1, r1, #0x7f
+ andeqs r1, r0, #0x1
+ addne r0, r0, #0x1
+ bx lr
+_020EB8D8:
+ cmp r3, #0x100
+ movge r2, #0x80000000
+ movlt r2, #0x0
+ ands r3, r3, #0xff
+ beq _020EB940
+ movs r0, r0, lsl #0x1
+ bne _020EBA18
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x9
+ ands r12, r12, #0xff
+ beq _020EBA0C
+ cmp r12, #0xff
+ blt _020EBA0C
+ cmp r1, #0x0
+ beq _020EBA20
+ b _020EBA18
+_020EB918:
+ cmp r12, #0x100
+ movge r2, #0x80000000
+ movlt r2, #0x0
+ and r3, r3, #0xff
+ ands r12, r12, #0xff
+ beq _020EB9A8
+_020EB930:
+ eor r2, r2, #0x80000000
+ movs r1, r1, lsl #0x1
+ bne _020EBA18
+ b _020EBA0C
+_020EB940:
+ movs r0, r0, lsl #0x1
+ beq _020EB978
+ mov r0, r0, lsr #0x1
+ mov r3, #0x1
+ mov r12, r1, lsr #0x17
+ mov r1, r1, lsl #0x8
+ ands r12, r12, #0xff
+ beq _020EB9A8
+ cmp r12, #0xff
+ beq _020EB930
+ orr r1, r1, #0x80000000
+ orr r3, r3, r2, lsr #0x17
+ orr r12, r12, r2, lsr #0x17
+ b _020EB7F4
+_020EB978:
+ mov r3, r1, lsr #0x17
+ mov r0, r1, lsl #0x9
+ ands r2, r3, #0xff
+ beq _020EB99C
+ cmp r2, #0xff
+ blt _020EB9C4
+ cmp r0, #0x0
+ bne _020EBA04
+ b _020EBA0C
+_020EB99C:
+ cmp r0, #0x0
+ beq _020EB9E4
+ b _020EB9C4
+_020EB9A8:
+ movs r1, r1, lsl #0x1
+ beq _020EB9CC
+ mov r1, r1, lsr #0x1
+ mov r12, #0x1
+ orr r12, r12, r2, lsr #0x17
+ orr r3, r3, r2, lsr #0x17
+ b _020EB7F4
+_020EB9C4:
+ mov r0, r1
+ bx lr
+_020EB9CC:
+ cmp r0, #0x0
+ subges r3, r3, #0x1
+ add r0, r0, r0
+ orr r0, r2, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bx lr
+_020EB9E4:
+ mov r0, #0x0
+ bx lr
+_020EB9EC: ; 0x020EB9EC
+ cmp r0, #0x0
+ subges r3, r3, #0x1
+ add r0, r0, r0
+ mov r0, r0, lsr #0x9
+ orr r0, r0, r3, lsl #0x17
+ bx lr
+_020EBA04:
+ mvn r0, #0x80000000
+ bx lr
+_020EBA0C:
+ mov r0, #0xff000000
+ orr r0, r2, r0, lsr #0x1
+ bx lr
+_020EBA18:
+ mvn r0, #0x80000000
+ bx lr
+_020EBA20:
+ mvn r0, #0x80000000
+ bx lr
+
+ arm_func_start _ll_mod
+_ll_mod: ; 0x020EBA28
+ stmdb sp!, {r4-r7,r11-r12,lr}
+ mov r4, r1
+ orr r4, r4, #0x1
+ b _020EBA48
+
+ arm_func_start _ll_sdiv
+_ll_sdiv: ; 0x020EBA38
+ stmdb sp!, {r4-r7,r11-r12,lr}
+ eor r4, r1, r3
+ mov r4, r4, asr #0x1
+ mov r4, r4, lsl #0x1
+_020EBA48:
+ orrs r5, r3, r2
+ bne _020EBA58
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+_020EBA58:
+ mov r5, r0, lsr #0x1f
+ add r5, r5, r1
+ mov r6, r2, lsr #0x1f
+ add r6, r6, r3
+ orrs r6, r5, r6
+ bne _020EBA8C
+ mov r1, r2
+ bl _s32_div_f
+ ands r4, r4, #0x1
+ movne r0, r1
+ mov r1, r0, asr #0x1f
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+_020EBA8C:
+ cmp r1, #0x0
+ bge _020EBA9C
+ rsbs r0, r0, #0x0
+ rsc r1, r1, #0x0
+_020EBA9C:
+ cmp r3, #0x0
+ bge _020EBAAC
+ rsbs r2, r2, #0x0
+ rsc r3, r3, #0x0
+_020EBAAC:
+ orrs r5, r1, r0
+ beq _020EBBD0
+ mov r5, #0x0
+ mov r6, #0x1
+ cmp r3, #0x0
+ bmi _020EBAD8
+_020EBAC4:
+ add r5, r5, #0x1
+ adds r2, r2, r2
+ adcs r3, r3, r3
+ bpl _020EBAC4
+ add r6, r6, r5
+_020EBAD8:
+ cmp r1, #0x0
+ blt _020EBAF8
+_020EBAE0:
+ cmp r6, #0x1
+ beq _020EBAF8
+ sub r6, r6, #0x1
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ bpl _020EBAE0
+_020EBAF8:
+ mov r7, #0x0
+ mov r12, #0x0
+ mov r11, #0x0
+ b _020EBB20
+_020EBB08:
+ orr r12, r12, #0x1
+ subs r6, r6, #0x1
+ beq _020EBB78
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adcs r7, r7, r7
+_020EBB20:
+ subs r0, r0, r2
+ sbcs r1, r1, r3
+ sbcs r7, r7, #0x0
+ adds r12, r12, r12
+ adc r11, r11, r11
+ cmp r7, #0x0
+ bge _020EBB08
+_020EBB3C:
+ subs r6, r6, #0x1
+ beq _020EBB70
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adc r7, r7, r7
+ adds r0, r0, r2
+ adcs r1, r1, r3
+ adc r7, r7, #0x0
+ adds r12, r12, r12
+ adc r11, r11, r11
+ cmp r7, #0x0
+ bge _020EBB08
+ b _020EBB3C
+_020EBB70:
+ adds r0, r0, r2
+ adc r1, r1, r3
+_020EBB78:
+ ands r7, r4, #0x1
+ moveq r0, r12
+ moveq r1, r11
+ beq _020EBBB0
+ subs r7, r5, #0x20
+ movge r0, r1, lsr r7
+ bge _020EBBD4
+ rsb r7, r5, #0x20
+ mov r0, r0, lsr r5
+ orr r0, r0, r1, lsl r7
+ mov r1, r1, lsr r5
+ b _020EBBB0
+_020EBBA8: ; 0x020EBBA8
+ mov r0, r1, lsr r7
+ mov r1, #0x0
+_020EBBB0:
+ cmp r4, #0x0
+ blt _020EBBC0
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+_020EBBC0:
+ rsbs r0, r0, #0x0
+ rsc r1, r1, #0x0
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+_020EBBD0:
+ mov r0, #0x0
+_020EBBD4:
+ mov r1, #0x0
+ cmp r4, #0x0
+ blt _020EBBC0
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+
+ arm_func_start _ll_udiv
+_ll_udiv: ; 0x020EBBE8
+ stmdb sp!, {r4-r7,r11-r12,lr}
+ mov r4, #0x0
+ b _020EBBFC
+
+ arm_func_start _ull_mod
+_ull_mod: ; 0x020EBBF4
+ stmdb sp!, {r4-r7,r11-r12,lr}
+ mov r4, #0x1
+_020EBBFC:
+ orrs r5, r3, r2
+ bne _020EBC0C
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+_020EBC0C:
+ orrs r5, r1, r3
+ bne _020EBAAC
+ mov r1, r2
+ bl _u32_div_not_0_f
+_020EBC1C: ; 0x020EBC1C
+ cmp r4, #0x0
+ movne r0, r1
+ mov r1, #0x0
+ ldmia sp!, {r4-r7,r11-r12,lr}
+ bx lr
+
+ arm_func_start _ll_mul
+_ll_mul: ; 0x020EBC30
+ stmdb sp!, {r4-r5,lr}
+ umull r5, r4, r0, r2
+ mla r4, r0, r3, r4
+ mla r4, r2, r1, r4
+ mov r1, r4
+ mov r0, r5
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start _ll_shl
+_ll_shl: ; 0x020EBC50
+ ands r2, r2, #0x3f
+ bxeq lr
+ subs r3, r2, #0x20
+ bge _020EBC74
+ rsb r3, r2, #0x20
+ mov r1, r1, lsl r2
+ orr r1, r1, r0, lsr r3
+ mov r0, r0, lsl r2
+ bx lr
+_020EBC74:
+ mov r1, r0, lsl r3
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start _s32_div_f
+_s32_div_f: ; 0x020EBC80
+ eor r12, r0, r1
+ and r12, r12, #0x80000000
+ cmp r0, #0x0
+ rsblt r0, r0, #0x0
+ addlt r12, r12, #0x1
+ cmp r1, #0x0
+ rsblt r1, r1, #0x0
+ beq _020EBE78
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0x0
+ blo _020EBE78
+ mov r2, #0x1c
+ mov r3, r0, lsr #0x4
+ cmp r1, r3, lsr #0xc
+ suble r2, r2, #0x10
+ movle r3, r3, lsr #0x10
+ cmp r1, r3, lsr #0x4
+ suble r2, r2, #0x8
+ movle r3, r3, lsr #0x8
+ cmp r1, r3
+ suble r2, r2, #0x4
+ movle r3, r3, lsr #0x4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0x0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #0x1
+ add pc, pc, r2, lsl #0x2
+ mov r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+_020EBE78:
+ ands r3, r12, #0x80000000
+ rsbne r0, r0, #0x0
+ ands r3, r12, #0x1
+ rsbne r1, r1, #0x0
+ bx lr
+
+ arm_func_start _u32_div_f
+_u32_div_f: ; 0x020EBE8C
+ cmp r1, #0x0
+ bxeq lr
+
+ arm_func_start _u32_div_not_0_f
+_u32_div_not_0_f:
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0x0
+ bxcc lr
+ mov r2, #0x1c
+ mov r3, r0, lsr #0x4
+ cmp r1, r3, lsr #0xc
+ suble r2, r2, #0x10
+ movle r3, r3, lsr #0x10
+ cmp r1, r3, lsr #0x4
+ suble r2, r2, #0x8
+ movle r3, r3, lsr #0x8
+ cmp r1, r3
+ suble r2, r2, #0x4
+ movle r3, r3, lsr #0x4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0x0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #0x1
+ add pc, pc, r2, lsl #0x2
+ mov r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #0x1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+ bx lr
+
+ arm_func_start _drdiv
+_drdiv: ; 0x020EC070
+ eor r1, r1, r3
+ eor r3, r1, r3
+ eor r1, r1, r3
+ eor r0, r0, r2
+ eor r2, r0, r2
+ eor r0, r0, r2
+
+ arm_func_start _ddiv
+_ddiv: ; 0x020EC088
+ stmdb sp!, {r4-r6,lr}
+ ldr lr, _020EC5C8 ; =0x00000FFE
+ eor r4, r1, r3
+ ands r12, lr, r1, lsr #0x13
+ cmpne r12, lr
+ beq _020EC434
+ bic r1, r1, lr, lsl #0x14
+ orr r1, r1, #0x100000
+ add r12, r12, r4, lsr #0x1f
+_020EC0AC:
+ ands r4, lr, r3, lsr #0x13
+ cmpne r4, lr
+ beq _020EC4CC
+ bic r3, r3, lr, lsl #0x14
+ orr r3, r3, #0x100000
+_020EC0C0:
+ sub r12, r12, r4
+ cmp r1, r3
+ cmpeq r0, r2
+ bhs _020EC0DC
+ adds r0, r0, r0
+ adc r1, r1, r1
+ sub r12, r12, #0x2
+_020EC0DC:
+ sub r4, pc, #0x24
+ ldrb lr, [r4, r3, lsr #0xc]
+ rsbs r2, r2, #0x0
+ rsc r3, r3, #0x0
+ mov r4, #0x20000000
+ mla r5, lr, r3, r4
+ mov r6, r3, lsl #0xa
+ mov r5, r5, lsr #0x7
+ mul lr, r5, lr
+ orr r6, r6, r2, lsr #0x16
+ mov lr, lr, lsr #0xd
+ mul r5, lr, r6
+ mov r6, r1, lsl #0xa
+ orr r6, r6, r0, lsr #0x16
+ mov r5, r5, lsr #0x10
+ mul r5, lr, r5
+ mov lr, lr, lsl #0xe
+ add lr, lr, r5, lsr #0x10
+ umull r5, r6, lr, r6
+ umull r4, r5, r6, r2
+ mla r5, r3, r6, r5
+ mov r4, r4, lsr #0x1a
+ orr r4, r4, r5, lsl #0x6
+ add r4, r4, r0, lsl #0x2
+ umull lr, r5, r4, lr
+ mov r4, #0x0
+ adds r5, r5, r6, lsl #0x18
+ adc r4, r4, r6, lsr #0x8
+ cmp r12, #0x800
+ bge _020EC2C0
+ add r12, r12, #0x7f0
+ adds r12, r12, #0xc
+ bmi _020EC2D8
+ orr r1, r4, r12, lsl #0x1f
+ bic r12, r12, #0x1
+ add r1, r1, r12, lsl #0x13
+ tst lr, #0x80000000
+ bne _020EC1B0
+ rsbs r2, r2, #0x0
+ mov r4, r4, lsl #0x1
+ add r4, r4, r5, lsr #0x1f
+ mul lr, r2, r4
+ mov r6, #0x0
+ mov r4, r5, lsl #0x1
+ orr r4, r4, #0x1
+ umlal r6, lr, r4, r2
+ rsc r3, r3, #0x0
+ mla lr, r4, r3, lr
+ cmp lr, r0, lsl #0x15
+ bmi _020EC1B0
+ mov r0, r5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC1B0:
+ adds r0, r5, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC1C0: ; not code
+ .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1
+ .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4
+ .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8
+ .byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD
+ .byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3
+ .byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA
+ .byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2
+ .byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB
+ .byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4
+ .byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E
+ .byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98
+ .byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92
+ .byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D
+ .byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89
+ .byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84
+ .byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
+_020EC2C0:
+ movs r1, r12, lsl #0x1f
+ orr r1, r1, #0x7f000000
+ orr r1, r1, #0xf00000
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC2D8:
+ mvn r6, r12, asr #0x1
+ cmp r6, #0x34
+ bgt _020EC424
+ beq _020EC400
+ cmp r6, #0x14
+ bge _020EC320
+ rsb r6, r6, #0x13
+ mov lr, r0, lsl r6
+ rsb r6, r6, #0x14
+ mov r0, r5, lsr r6
+ rsb r6, r6, #0x20
+ orr r0, r0, r4, lsl r6
+ rsb r6, r6, #0x20
+ mov r4, r4, lsr r6
+ orr r1, r4, r12, lsl #0x1f
+ mov r12, lr
+ mov lr, #0x0
+ b _020EC350
+_020EC320:
+ rsb r6, r6, #0x33
+ mov lr, r1, lsl r6
+ mov r1, r12, lsl #0x1f
+ rsb r6, r6, #0x20
+ orr r12, lr, r0, lsr r6
+ rsb r6, r6, #0x20
+ mov lr, r0, lsl r6
+ mov r5, r5, lsr #0x15
+ orr r5, r5, r4, lsl #0xb
+ rsb r6, r6, #0x1f
+ mov r0, r5, lsr r6
+ mov r4, #0x0
+_020EC350:
+ rsbs r2, r2, #0x0
+ mul r4, r2, r4
+ mov r5, #0x0
+ umlal r5, r4, r2, r0
+ rsc r3, r3, #0x0
+ mla r4, r0, r3, r4
+ cmp r4, r12
+ cmpeq r5, lr
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ adds r5, r5, r2
+ adc r4, r4, r3
+ cmp r4, r12
+ bmi _020EC3F4
+ bne _020EC398
+ cmp r5, lr
+ beq _020EC3E4
+ blo _020EC3F4
+_020EC398:
+ subs r5, r5, r2
+ sbc r4, r4, r3
+_020EC3A0:
+ adds r5, r5, r5
+ adc r4, r4, r4
+ adds r5, r5, r2
+ adc r4, r4, r3
+ adds lr, lr, lr
+ adc r12, r12, r12
+ cmp r4, r12
+ bmi _020EC3E4
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r5, lr
+ blo _020EC3E4
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ tst r0, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+_020EC3E4:
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC3F4:
+ adds r0, r0, #0x1
+ adc r1, r1, #0x0
+ b _020EC3A0
+_020EC400:
+ rsbs r2, r2, #0x0
+ rsc r3, r3, #0x0
+ cmp r1, r3
+ cmpeq r0, r2
+ mov r1, r12, lsl #0x1f
+ mov r0, #0x0
+ movne r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC424:
+ mov r1, r12, lsl #0x1f
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC434:
+ orrs r5, r0, r1, lsl #0x1
+ beq _020EC558
+ cmp r12, lr
+ beq _020EC49C
+ movs r1, r1, lsl #0xc
+ beq _020EC478
+ clz r5, r1
+ movs r1, r1, lsl r5
+ sub r12, r12, r5
+ add r5, r12, #0x1f
+ mov r1, r1, lsr #0xb
+ orr r1, r1, r0, lsr r5
+ rsb r5, r5, #0x20
+ mov r0, r0, lsl r5
+ mov r12, r12, lsl #0x1
+ orr r12, r12, r4, lsr #0x1f
+ b _020EC0AC
+_020EC478:
+ mvn r12, #0x13
+ clz r5, r0
+ movs r0, r0, lsl r5
+ sub r12, r12, r5
+ mov r1, r0, lsr #0xb
+ mov r0, r0, lsl #0x15
+ mov r12, r12, lsl #0x1
+ orr r12, r12, r4, lsr #0x1f
+ b _020EC0AC
+_020EC49C:
+ orrs r5, r0, r1, lsl #0xc
+ bne _020EC580
+ bic r5, r3, #0x80000000
+ cmp r5, lr, lsl #0x13
+ bhs _020EC4C0
+ and r5, r3, #0x80000000
+ eor r1, r5, r1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC4C0:
+ orrs r5, r2, r3, lsl #0xc
+ bne _020EC5A0
+ b _020EC5B8
+_020EC4CC:
+ orrs r5, r2, r3, lsl #0x1
+ beq _020EC544
+ cmp r4, lr
+ beq _020EC52C
+ movs r3, r3, lsl #0xc
+ beq _020EC50C
+ clz r5, r3
+ movs r3, r3, lsl r5
+ sub r4, r4, r5
+ add r5, r4, #0x1f
+ mov r3, r3, lsr #0xb
+ orr r3, r3, r2, lsr r5
+ rsb r5, r5, #0x20
+ mov r2, r2, lsl r5
+ mov r4, r4, lsl #0x1
+ b _020EC0C0
+_020EC50C:
+ mvn r4, #0x13
+ clz r5, r2
+ movs r2, r2, lsl r5
+ sub r4, r4, r5
+ mov r3, r2, lsr #0xb
+ mov r2, r2, lsl #0x15
+ mov r4, r4, lsl #0x1
+ b _020EC0C0
+_020EC52C:
+ orrs r5, r2, r3, lsl #0xc
+ bne _020EC5A0
+ mov r1, r12, lsl #0x1f
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC544:
+ mov r1, r12, lsl #0x1f
+ orr r1, r1, lr, lsl #0x13
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC558:
+ orrs r5, r2, r3, lsl #0x1
+ beq _020EC5B8
+ bic r5, r3, #0x80000000
+ cmp r5, lr, lsl #0x13
+ cmpeq r2, #0x0
+ bhi _020EC5A0
+ eor r1, r1, r3
+ and r1, r1, #0x80000000
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC580:
+ tst r1, #0x80000
+ beq _020EC5B8
+ bic r5, r3, #0x80000000
+ cmp r5, lr, lsl #0x13
+ cmpeq r2, #0x0
+ bhi _020EC5A0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC5A0:
+ tst r3, #0x80000
+ beq _020EC5B8
+ mov r1, r3
+ mov r0, r2
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020EC5B8:
+ orr r1, r1, #0x7f000000
+ orr r1, r1, #0xf80000
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020EC5C8: .word 0x00000FFE
+
+ arm_func_start _fp_init
+_fp_init: ; 0x020EC5CC
+ bx lr
+
+ arm_func_start sys_writec
+sys_writec: ; 0x020EC5D0
+ str lr, [sp, #-0x4]!
+ mov r1, r0
+ mov r0, #0x3
+ swi 0x123456
+ ldr pc, [sp], #0x4
+
+ arm_func_start sys_readc
+sys_readc: ; 0x020EC5E4
+ str lr, [sp, #-0x4]!
+ mov r1, #0x0
+ mov r0, #0x7
+ swi 0x123456
+ ldr pc, [sp], #0x4
+
+ arm_func_start sys_exit
+sys_exit: ; 0x020EC5F8
+ mov r1, #0x0
+ mov r0, #0x18
+ swi 0x123456
+ mov pc, lr
+
+ arm_func_start __read_console
+__read_console: ; 0x020EC608
+ stmdb sp!, {r3-r7,lr}
+ mov r6, r2
+ ldr r5, [r6, #0x0]
+ mov r7, r1
+ cmp r5, #0x0
+ mov r4, #0x0
+ bls _020EC650
+_020EC624:
+ bl sys_readc
+ and r1, r0, #0xff
+ cmp r1, #0xd
+ strb r0, [r7, r4]
+ cmpne r1, #0xa
+ addeq r0, r4, #0x1
+ streq r0, [r6, #0x0]
+ beq _020EC650
+ add r4, r4, #0x1
+ cmp r4, r5
+ blo _020EC624
+_020EC650:
+ mov r0, #0x0
+ ldmia sp!, {r3-r7,pc}
+
+ arm_func_start __write_console
+__write_console: ; 0x020EC658
+ stmdb sp!, {r4-r6,lr}
+ ldr r5, [r2, #0x0]
+ mov r6, r1
+ cmp r5, #0x0
+ mov r4, #0x0
+ bls _020EC684
+_020EC670:
+ add r0, r6, r4
+ bl sys_writec
+ add r4, r4, #0x1
+ cmp r4, r5
+ blo _020EC670
+_020EC684:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start __close_console
+__close_console: ; 0x020EC68C
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start __call_static_initializers
+__call_static_initializers: ; 0x020EC694
+ stmdb sp!, {r4,lr}
+ ldr r4, _020EC6BC ; =0x02104774
+ b _020EC6A8
+_020EC6A0:
+ blx r0
+ add r4, r4, #0x4
+_020EC6A8:
+ cmp r4, #0x0
+ ldrne r0, [r4, #0x0]
+ cmpne r0, #0x0
+ bne _020EC6A0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020EC6BC: .word 0x02104774
+
+ arm_func_start __destroy_global_chain
+__destroy_global_chain: ; 0x020EC6C0
+ stmdb sp!, {r3-r5,lr}
+ ldr r4, _020EC700 ; =0x021D74C8
+ ldr r2, [r4, #0x0]
+ cmp r2, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020EC6D4: ; 0x020EC6D4
+ mvn r5, #0x0
+_020EC6D8:
+ ldr r0, [r2, #0x0]
+ mov r1, r5
+ str r0, [r4, #0x0]
+ ldr r0, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ blx r2
+ ldr r2, [r4, #0x0]
+ cmp r2, #0x0
+ bne _020EC6D8
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020EC700: .word 0x021D74C8
+
+ arm_func_start _ExitProcess
+_ExitProcess: ; 0x020EC704
+ ldr ip, _020EC70C ; =sys_exit
+ bx r12
+ .balign 4
+_020EC70C: .word sys_exit
diff --git a/arm9/asm/WM_arm9.s b/arm9/asm/WM_arm9.s
new file mode 100644
index 00000000..cc3e7998
--- /dev/null
+++ b/arm9/asm/WM_arm9.s
@@ -0,0 +1,3744 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start WMi_GetMPReadyAIDs
+WMi_GetMPReadyAIDs: ; 0x020D7DE0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r1, _020D7E30 ; =0x021D5E2C
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ moveq r5, #0x0
+ beq _020D7E18
+ ldr r5, [r0, #0x4]
+ mov r1, #0x2
+ add r0, r5, #0x86
+ bl DC_InvalidateRange
+ ldrh r5, [r5, #0x86]
+_020D7E18:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D7E30: .word 0x021D5E2C
+
+ arm_func_start WM_GetConnectedAIDs
+WM_GetConnectedAIDs: ; 0x020D7E34
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020D7E64 ; =0x021D5E2C
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ ldrne r4, [r1, #0x14c]
+ moveq r4, #0x0
+ bl OS_RestoreInterrupts
+ mov r0, r4, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D7E64: .word 0x021D5E2C
+
+ arm_func_start WM_GetAID
+WM_GetAID: ; 0x020D7E68
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020D7E98 ; =0x021D5E2C
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ addne r1, r1, #0x100
+ ldrneh r4, [r1, #0x50]
+ moveq r4, #0x0
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D7E98: .word 0x021D5E2C
+
+ arm_func_start WMi_GetStatusAddress
+WMi_GetStatusAddress: ; 0x020D7E9C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl WMi_CheckInitialized
+_020D7EA8: ; 0x020D7EA8
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldreq r0, _020D7EC8 ; =0x021D5E2C
+ ldreq r0, [r0, #0x0]
+ ldreq r0, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D7EC8: .word 0x021D5E2C
+
+ arm_func_start WmClearFifoRecvFlag
+WmClearFifoRecvFlag: ; 0x020D7ECC
+ ldr r1, _020D7EE4 ; =0x027FFF96
+ ldrh r0, [r1, #0x0]
+ ands r2, r0, #0x1
+ bicne r0, r0, #0x1
+ strneh r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020D7EE4: .word 0x027FFF96
+
+ arm_func_start WmReceiveFifo
+WmReceiveFifo: ; 0x020D7EE8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r0, _020D82B0 ; =0x021D5E2C
+ cmp r2, #0x0
+ ldr r8, [r0, #0x0]
+ mov r10, r1
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r0, [r8, #0x10]
+ mov r1, #0x100
+ bl DC_InvalidateRange
+ ldrh r0, [r8, #0x16]
+ cmp r0, #0x0
+ bne _020D7F30
+ ldr r0, [r8, #0x4]
+ mov r1, #0x800
+ bl DC_InvalidateRange
+_020D7F30:
+ ldr r0, [r8, #0x10]
+ cmp r10, r0
+ beq _020D7F48
+ mov r0, r10
+ mov r1, #0x100
+ bl DC_InvalidateRange
+_020D7F48:
+ ldrh r0, [r10, #0x0]
+ cmp r0, #0x2c
+ blo _020D8000
+ cmp r0, #0x80
+ bne _020D7F84
+ ldrh r0, [r10, #0x2]
+ cmp r0, #0x13
+ bne _020D7F6C
+ bl OS_Terminate
+_020D7F6C:
+ ldr r1, [r8, #0xc8]
+ cmp r1, #0x0
+ beq _020D8268
+ mov r0, r10
+ blx r1
+ b _020D8268
+_020D7F84:
+ cmp r0, #0x82
+ bne _020D7FD8
+ ldrh r0, [r10, #0x6]
+ add r1, r8, r0, lsl #0x2
+ ldr r0, [r1, #0xcc]
+ cmp r0, #0x0
+ beq _020D8268
+ ldr r0, [r1, #0x10c]
+ str r0, [r10, #0x1c]
+ ldr r0, [r8, #0x14c]
+ strh r0, [r10, #0x22]
+ ldr r1, [r8, #0x4]
+ ldr r0, [r10, #0x8]
+ ldrh r1, [r1, #0x72]
+ bl DC_InvalidateRange
+ ldrh r1, [r10, #0x6]
+ mov r0, r10
+ add r1, r8, r1, lsl #0x2
+ ldr r1, [r1, #0xcc]
+ blx r1
+ b _020D8268
+_020D7FD8:
+ cmp r0, #0x81
+ bne _020D8268
+ mov r0, #0xf
+ strh r0, [r10, #0x0]
+ ldr r1, [r10, #0x1c]
+ cmp r1, #0x0
+ beq _020D8268
+ mov r0, r10
+ blx r1
+ b _020D8268
+_020D8000:
+ cmp r0, #0xe
+ bne _020D8040
+ ldrh r1, [r10, #0x4]
+ ldr r0, _020D82B4 ; =0x0000FFF5
+ add r0, r1, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, #0x1
+ bhi _020D8040
+ ldrh r0, [r10, #0x2]
+ cmp r0, #0x0
+ bne _020D8040
+ ldr r1, [r8, #0x4]
+ ldr r0, [r10, #0x8]
+ ldrh r1, [r1, #0x72]
+ bl DC_InvalidateRange
+_020D8040:
+ ldrh r1, [r10, #0x0]
+ cmp r1, #0x2
+ bne _020D8088
+ ldrh r0, [r10, #0x2]
+ cmp r0, #0x0
+ bne _020D8088
+ add r0, r8, r1, lsl #0x2
+ ldr r4, [r0, #0x18]
+ bl WM_Finish
+_020D8064: ; 0x020D8064
+ cmp r4, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, r10
+ blx r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020D8088:
+ add r0, r8, r1, lsl #0x2
+ ldr r1, [r0, #0x18]
+ cmp r1, #0x0
+ beq _020D80B8
+ mov r0, r10
+ blx r1
+ ldr r0, _020D82B8 ; =0x021D5E28
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+_020D80B8:
+ ldrh r0, [r10, #0x0]
+ cmp r0, #0x8
+ beq _020D80CC
+ cmp r0, #0xc
+ bne _020D8268
+_020D80CC:
+ cmp r0, #0x8
+ bne _020D8100
+ add r0, r10, #0xa
+ str r0, [sp, #0x0]
+ ldrh r0, [r10, #0x2c]
+ add r11, r10, #0x14
+ ldrh r7, [r10, #0x8]
+ ldrh r6, [r10, #0x10]
+ ldrh r4, [r10, #0x12]
+ str r0, [sp, #0x4]
+ ldrh r9, [r10, #0x2e]
+ mov r5, #0x0
+ b _020D8130
+_020D8100:
+ cmp r0, #0xc
+ bne _020D8130
+ ldrh r0, [r10, #0x16]
+ mov r6, #0x0
+ ldrh r7, [r10, #0x8]
+ str r0, [sp, #0x4]
+ add r0, r10, #0x10
+ ldrh r5, [r10, #0xa]
+ ldrh r4, [r10, #0xc]
+ ldrh r9, [r10, #0x18]
+ mov r11, r6
+ str r0, [sp, #0x0]
+_020D8130:
+ cmp r7, #0x7
+ beq _020D8148
+ cmp r7, #0x9
+ beq _020D8148
+ cmp r7, #0x1a
+ bne _020D8268
+_020D8148:
+ cmp r7, #0x7
+ ldreq r1, [r8, #0x14c]
+ moveq r0, #0x1
+ orreq r0, r1, r0, lsl r6
+ streq r0, [r8, #0x14c]
+ movne r0, #0x1
+ mvnne r0, r0, lsl r6
+ ldrne r1, [r8, #0x14c]
+ add r3, r8, #0x100
+ andne r0, r1, r0
+ strne r0, [r8, #0x14c]
+ ldr r0, _020D82BC ; =0x021D5E78
+ mov r1, #0x0
+ mov r2, #0x44
+ strh r5, [r3, #0x50]
+ bl MI_CpuFill8
+ ldr r3, _020D82BC ; =0x021D5E78
+ mov r1, #0x0
+ mov r2, #0x82
+ strh r2, [r3, #0x0]
+ strh r7, [r3, #0x4]
+ strh r6, [r3, #0x12]
+ strh r5, [r3, #0x20]
+ strh r1, [r3, #0x2]
+ str r1, [r3, #0x8]
+ str r1, [r3, #0xc]
+ strh r1, [r3, #0x10]
+ ldr r1, [r8, #0x14c]
+ ldr r2, _020D82C0 ; =0x0000FFFF
+ strh r1, [r3, #0x22]
+ strh r2, [r3, #0x1a]
+ ldr r0, [sp, #0x0]
+ ldr r1, _020D82C4 ; =0x021D5E8C
+ mov r2, #0x6
+ strh r4, [r3, #0x3c]
+ bl MI_CpuCopy8
+_020D81D8: ; 0x020D81D8
+ cmp r11, #0x0
+ beq _020D81F4
+ ldr r1, _020D82C8 ; =0x021D5E9C
+ mov r0, r11
+ mov r2, #0x18
+ bl MIi_CpuCopy16
+ b _020D8204
+_020D81F4:
+ ldr r1, _020D82C8 ; =0x021D5E9C
+ mov r0, #0x0
+ mov r2, #0x18
+ bl MIi_CpuClear16
+_020D8204:
+ cmp r5, #0x0
+ ldreq r1, [sp, #0x4]
+ ldr r0, _020D82BC ; =0x021D5E78
+ movne r1, r9
+ cmp r5, #0x0
+ ldrne r9, [sp, #0x4]
+ ldr r5, _020D82BC ; =0x021D5E78
+ strh r1, [r0, #0x40]
+ mov r4, #0x0
+ strh r9, [r5, #0x42]
+_020D822C:
+ strh r4, [r5, #0x6]
+ add r2, r8, r4, lsl #0x2
+ ldr r0, [r2, #0xcc]
+ cmp r0, #0x0
+ beq _020D8254
+ ldr r1, [r2, #0x10c]
+ mov r0, r5
+ str r1, [r5, #0x1c]
+ ldr r1, [r2, #0xcc]
+ blx r1
+_020D8254:
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ cmp r4, #0x10
+ blo _020D822C
+_020D8268:
+ ldr r0, [r8, #0x10]
+ mov r1, #0x100
+ bl DC_InvalidateRange
+ bl WmClearFifoRecvFlag
+ ldr r0, [r8, #0x10]
+ cmp r10, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r2, [r10, #0x0]
+ mov r0, r10
+ mov r1, #0x100
+ orr r2, r2, #0x8000
+ strh r2, [r10, #0x0]
+ bl DC_StoreRange
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020D82B0: .word 0x021D5E2C
+_020D82B4: .word 0x0000FFF5
+_020D82B8: .word 0x021D5E28
+_020D82BC: .word 0x021D5E78
+_020D82C0: .word 0x0000FFFF
+_020D82C4: .word 0x021D5E8C
+_020D82C8: .word 0x021D5E9C
+
+ arm_func_start WMi_CheckStateEx
+WMi_CheckStateEx:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl WMi_CheckInitialized
+_020D82DC: ; 0x020D82DC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ addne sp, sp, #0x10
+ bxne lr
+ ldr r0, _020D8370 ; =0x021D5E2C
+ mov r1, #0x2
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ bl DC_InvalidateRange
+ ldr r0, _020D8370 ; =0x021D5E2C
+ add r1, sp, #0x8
+ ldr r2, [r0, #0x0]
+ ldr r0, [sp, #0x8]
+ ldr r2, [r2, #0x4]
+ cmp r0, #0x0
+ bic r1, r1, #0x3
+ addeq sp, sp, #0x4
+ add r12, r1, #0x4
+ ldrh r3, [r2, #0x0]
+ mov r0, #0x3
+ ldmeqia sp!, {lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ mov r2, #0x0
+_020D8340:
+ add r12, r12, #0x4
+ ldr r1, [r12, #-0x4]
+ cmp r1, r3
+ ldr r1, [sp, #0x8]
+ moveq r0, r2
+ subs r1, r1, #0x1
+ str r1, [sp, #0x8]
+ bne _020D8340
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020D8370: .word 0x021D5E2C
+
+ arm_func_start WMi_CheckIdle
+WMi_CheckIdle:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl WMi_CheckInitialized
+_020D8380: ; 0x020D8380
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020D83CC ; =0x021D5E2C
+ mov r1, #0x2
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ bl DC_InvalidateRange
+ ldr r0, _020D83CC ; =0x021D5E2C
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x1
+ movls r0, #0x3
+ movhi r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D83CC: .word 0x021D5E2C
+
+ arm_func_start WMi_CheckInitialized
+WMi_CheckInitialized:
+ ldr r0, _020D83E8 ; =0x021D5E28
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x0
+ moveq r0, #0x3
+ bx lr
+ .balign 4
+_020D83E8: .word 0x021D5E28
+
+ arm_func_start WMi_GetSystemWork
+WMi_GetSystemWork: ; 0x020D83EC
+ ldr r0, _020D83F8 ; =0x021D5E2C
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020D83F8: .word 0x021D5E2C
+
+ arm_func_start WMi_SendCommandDirect
+WMi_SendCommandDirect:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r4, r1
+ bl WmGetCommandBuffer4Arm7
+ movs r5, r0
+ moveq r0, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, r5
+ mov r1, r4
+ bl DC_StoreRange
+ mov r1, r5
+ mov r0, #0xa
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ mov r4, r0
+ ldr r0, _020D8470 ; =0x021D5E30
+ mov r1, r5
+ mov r2, #0x1
+ bl OS_SendMessage
+_020D845C: ; 0x020D845C
+ cmp r4, #0x0
+ movlt r0, #0x8
+ movge r0, #0x2
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D8470: .word 0x021D5E30
+
+ arm_func_start WMi_SendCommand
+WMi_SendCommand:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl WmGetCommandBuffer4Arm7
+ movs r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x8
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ strh r4, [r5, #0x0]
+ ldrh r2, [sp, #0x14]
+ add r0, sp, #0x14
+ bic r0, r0, #0x3
+ mov r3, #0x0
+ cmp r2, #0x0
+ add r4, r0, #0x4
+ ble _020D84DC
+_020D84C0:
+ add r4, r4, #0x4
+ ldr r1, [r4, #-0x4]
+ add r0, r5, r3, lsl #0x2
+ add r3, r3, #0x1
+ str r1, [r0, #0x4]
+ cmp r3, r2
+ blt _020D84C0
+_020D84DC:
+ mov r0, r5
+ mov r1, #0x100
+ bl DC_StoreRange
+ mov r1, r5
+ mov r0, #0xa
+ mov r2, #0x0
+ bl PXI_SendWordByFifo
+ mov r4, r0
+ ldr r0, _020D8528 ; =0x021D5E30
+ mov r1, r5
+ mov r2, #0x1
+ bl OS_SendMessage
+_020D850C: ; 0x020D850C
+ cmp r4, #0x0
+ movlt r0, #0x8
+ movge r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020D8528: .word 0x021D5E30
+
+ arm_func_start WmGetCommandBuffer4Arm7
+WmGetCommandBuffer4Arm7: ; 0x020D852C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020D859C ; =0x021D5E30
+ add r1, sp, #0x0
+ mov r2, #0x0
+ bl OS_ReceiveMessage
+_020D8544: ; 0x020D8544
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, [sp, #0x0]
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r1, [sp, #0x0]
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x8000
+ addne sp, sp, #0x4
+ movne r0, r1
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020D859C ; =0x021D5E30
+ mov r2, #0x1
+ bl OS_JamMessage
+_020D858C: ; 0x020D858C
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D859C: .word 0x021D5E30
+
+ arm_func_start WMi_SetCallbackTable
+WMi_SetCallbackTable: ; 0x020D85A0
+ ldr r2, _020D85B4 ; =0x021D5E2C
+ ldr r2, [r2, #0x0]
+ add r0, r2, r0, lsl #0x2
+ str r1, [r0, #0x18]
+ bx lr
+ .balign 4
+_020D85B4: .word 0x021D5E2C
+
+ arm_func_start WM_Finish
+WM_Finish:
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ bl WMi_CheckInitialized
+_020D85C8: ; 0x020D85C8
+ cmp r0, #0x0
+ beq _020D85E4
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D85E4:
+ mov r0, #0x1
+ mov r1, #0x0
+ bl WMi_CheckStateEx
+_020D85F0: ; 0x020D85F0
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ bl WmClearFifoRecvFlag
+ mov r0, #0xa
+ mov r1, #0x0
+ bl PXI_SetFifoRecvCallback
+ ldr r2, _020D8634 ; =0x021D5E2C
+ mov r3, #0x0
+ ldr r1, _020D8638 ; =0x021D5E28
+ mov r0, r4
+ str r3, [r2, #0x0]
+ strh r3, [r1, #0x0]
+ bl OS_RestoreInterrupts
+_020D8628: ; 0x020D8628
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D8634: .word 0x021D5E2C
+_020D8638: .word 0x021D5E28
+
+ arm_func_start WmInitCore
+WmInitCore:
+ stmdb sp!, {r4-r10,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020D881C ; =0x021D5E28
+ mov r4, r0
+ ldrh r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020D8674
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D8674:
+ cmp r6, #0x0
+ bne _020D868C
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D868C:
+ cmp r5, #0x3
+ bls _020D86A4
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D86A4:
+ ands r1, r6, #0x1f
+ beq _020D86BC
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D86BC:
+ bl PXI_Init
+ mov r0, #0xa
+ mov r1, #0x1
+ bl PXI_IsCallbackReady
+_020D86CC: ; 0x020D86CC
+ cmp r0, #0x0
+ bne _020D86E8
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x4
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020D86E8:
+ mov r0, r6
+ mov r1, r7
+ bl DC_InvalidateRange
+ mov r0, r5
+ mov r1, r6
+ mov r3, r7
+ mov r2, #0x0
+ bl MI_DmaFill32
+ ldr r0, _020D8820 ; =0x021D5E2C
+ add r1, r6, #0x200
+ str r6, [r0, #0x0]
+ str r1, [r6, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x300
+ str r1, [r2, #0x4]
+ ldr r2, [r0, #0x0]
+ ldr r1, [r2, #0x4]
+ add r1, r1, #0x800
+ str r1, [r2, #0xc]
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0xc]
+ add r0, r0, #0x100
+ str r0, [r1, #0x10]
+ bl WmClearFifoRecvFlag
+ ldr r1, _020D8820 ; =0x021D5E2C
+ mov r3, #0x0
+ ldr r0, [r1, #0x0]
+ strh r5, [r0, #0x14]
+ ldr r0, [r1, #0x0]
+ str r3, [r0, #0x14c]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x100
+ strh r3, [r0, #0x50]
+ mov r2, r3
+_020D8774:
+ ldr r0, [r1, #0x0]
+ add r0, r0, r3, lsl #0x2
+ str r2, [r0, #0xcc]
+ ldr r0, [r1, #0x0]
+ add r0, r0, r3, lsl #0x2
+ add r3, r3, #0x1
+ str r2, [r0, #0x10c]
+ cmp r3, #0x10
+ blt _020D8774
+ ldr r0, _020D8824 ; =0x021D5E30
+ ldr r1, _020D8828 ; =0x021D5E50
+ mov r2, #0xa
+ bl OS_InitMessageQueue
+ ldr sb, _020D882C ; =0x021D5EC0
+ mov r10, #0x0
+ ldr r6, _020D8824 ; =0x021D5E30
+ mov r8, #0x8000
+ mov r7, #0x2
+ mov r5, #0x1
+_020D87C0:
+ mov r0, r9
+ mov r1, r7
+ strh r8, [r9, #0x0]
+ bl DC_StoreRange
+ mov r0, r6
+ mov r1, r9
+ mov r2, r5
+ bl OS_SendMessage
+ add r10, r10, #0x1
+ cmp r10, #0xa
+ add r9, r9, #0x100
+ blt _020D87C0
+ ldr r1, _020D8830 ; =WmReceiveFifo
+ mov r0, #0xa
+ bl PXI_SetFifoRecvCallback
+ ldr r1, _020D881C ; =0x021D5E28
+ mov r2, #0x1
+ mov r0, r4
+ strh r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+_020D8810: ; 0x020D8810
+ mov r0, #0x0
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020D881C: .word 0x021D5E28
+_020D8820: .word 0x021D5E2C
+_020D8824: .word 0x021D5E30
+_020D8828: .word 0x021D5E50
+_020D882C: .word 0x021D5EC0
+_020D8830: .word WmReceiveFifo
+
+ arm_func_start WM_Init
+WM_Init:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0xf00
+ bl WmInitCore
+_020D8844: ; 0x020D8844
+ cmp r0, #0x0
+ ldreq r1, _020D8864 ; =0x021D5E2C
+ moveq r2, #0x0
+ ldreq r1, [r1, #0x0]
+ streqh r2, [r1, #0x16]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D8864: .word 0x021D5E2C
+
+ arm_func_start WM_GetNextTgid
+WM_GetNextTgid: ; 0x020D8868
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+
+ arm_func_start FUN_020D8870
+FUN_020D8870: ; 0x020D8870
+ ldr r0, _020D88DC ; =0x02106A54
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x10000
+ bne _020D88B0
+ bl RTC_Init
+_020D8884: ; 0x020D8884
+ add r0, sp, #0x0
+ bl RTC_GetTime
+_020D888C: ; 0x020D888C
+ cmp r0, #0x0
+ bne _020D88B0
+ ldr r2, [sp, #0x8]
+ ldr r0, [sp, #0x4]
+ ldr r1, _020D88DC ; =0x02106A54
+ add r0, r2, r0, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+_020D88B0:
+ ldr r1, _020D88DC ; =0x02106A54
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r2, lsl #0x10
+ str r2, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D88DC: .word 0x02106A54
+
+ arm_func_start WM_GetOtherElements
+WM_GetOtherElements: ; 0x020D88E0
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x88
+ ldrh r2, [r1, #0x3c]
+ mov lr, r0
+ cmp r2, #0x0
+ beq _020D892C
+ mov r0, #0x0
+ add r5, sp, #0x0
+ strb r0, [sp, #0x0]
+ mov r4, #0x8
+_020D8908:
+ ldmia r5!, {r0-r3}
+ stmia lr!, {r0-r3}
+ subs r4, r4, #0x1
+ bne _020D8908
+ ldr r0, [r5, #0x0]
+ add sp, sp, #0x88
+ str r0, [lr, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D892C:
+ ldrh r0, [r1, #0x3e]
+ strb r0, [sp, #0x0]
+ ldrb r0, [sp, #0x0]
+ cmp r0, #0x0
+ bne _020D896C
+ add r5, sp, #0x0
+ mov r4, #0x8
+_020D8948:
+ ldmia r5!, {r0-r3}
+ stmia lr!, {r0-r3}
+ subs r4, r4, #0x1
+ bne _020D8948
+ ldr r0, [r5, #0x0]
+ add sp, sp, #0x88
+ str r0, [lr, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D896C:
+ cmp r0, #0x10
+ movhi r0, #0x10
+ strhib r0, [sp, #0x0]
+ ldrh r2, [r1, #0x0]
+ ldrb r3, [sp, #0x0]
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ sub r4, r2, #0x40
+ cmp r3, #0x0
+ add r3, r1, #0x40
+ mov r2, r0
+ and r1, r4, #0xff
+ ble _020D8A20
+ add r12, sp, #0x0
+_020D89A4:
+ ldrb r5, [r3, #0x0]
+ add r6, r12, r2, lsl #0x3
+ add r4, r3, #0x2
+ strb r5, [r6, #0x4]
+ ldrb r5, [r3, #0x1]
+ strb r5, [r6, #0x5]
+ str r4, [r6, #0x8]
+ ldrb r4, [r6, #0x5]
+ add r4, r4, #0x2
+ and r5, r4, #0xff
+ add r0, r0, r5
+ and r0, r0, #0xff
+ cmp r0, r1
+ bls _020D8A0C
+ mov r0, #0x0
+ strb r0, [sp, #0x0]
+ mov r4, #0x8
+_020D89E8:
+ ldmia r12!, {r0-r3}
+ stmia lr!, {r0-r3}
+ subs r4, r4, #0x1
+ bne _020D89E8
+ ldr r0, [r12, #0x0]
+ add sp, sp, #0x88
+ str r0, [lr, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D8A0C:
+ ldrb r4, [sp, #0x0]
+ add r2, r2, #0x1
+ add r3, r3, r5
+ cmp r2, r4
+ blt _020D89A4
+_020D8A20:
+ add r4, sp, #0x0
+ mov r12, #0x8
+_020D8A28:
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ subs r12, r12, #0x1
+ bne _020D8A28
+ ldr r0, [r4, #0x0]
+ str r0, [lr, #0x0]
+ add sp, sp, #0x88
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start WM_GetDispersionScanPeriod
+WM_GetDispersionScanPeriod: ; 0x020D8A4C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ mov r2, #0x0
+ add r1, sp, #0x0
+ mov r3, r2
+_020D8A68:
+ ldrb r0, [r1, #0x0]
+ add r2, r2, #0x1
+ cmp r2, #0x6
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ add r1, r1, #0x1
+ blt _020D8A68
+ ldr r0, _020D8AE4 ; =0x027FFC3C
+ mov r1, #0xd
+ ldr r0, [r0, #0x0]
+ ldr r2, _020D8AE8 ; =0x66666667
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mul r0, r3, r1
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ smull r0, r1, r2, r3
+ mov r1, r1, asr #0x2
+ mov r0, r3, lsr #0x1f
+ ldr r2, _020D8AEC ; =0x0000000A
+ add r1, r0, r1
+ smull r0, r1, r2, r1
+ sub r1, r3, r0
+ add r0, r1, #0x1e
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D8AE4: .word 0x027FFC3C
+_020D8AE8: .word 0x66666667
+_020D8AEC: .word 0x0000000A
+
+ arm_func_start WM_GetDispersionBeaconPeriod
+WM_GetDispersionBeaconPeriod: ; 0x020D8AF0
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ mov r2, #0x0
+ add r1, sp, #0x0
+ mov r3, r2
+_020D8B0C:
+ ldrb r0, [r1, #0x0]
+ add r2, r2, #0x1
+ cmp r2, #0x6
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ add r1, r1, #0x1
+ blt _020D8B0C
+ ldr r0, _020D8B88 ; =0x027FFC3C
+ mov r1, #0x7
+ ldr r0, [r0, #0x0]
+ ldr r2, _020D8B8C ; =0x66666667
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mul r0, r3, r1
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ smull r0, r1, r2, r3
+ mov r1, r1, asr #0x3
+ mov r0, r3, lsr #0x1f
+ ldr r2, _020D8B90 ; =0x00000014
+ add r1, r0, r1
+ smull r0, r1, r2, r1
+ sub r1, r3, r0
+ add r0, r1, #0xc8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D8B88: .word 0x027FFC3C
+_020D8B8C: .word 0x66666667
+_020D8B90: .word 0x00000014
+
+ arm_func_start WM_GetLinkLevel
+WM_GetLinkLevel: ; 0x020D8B94
+ stmdb sp!, {r4,lr}
+ bl WMi_GetSystemWork
+ mov r4, r0
+ bl WMi_CheckInitialized
+_020D8BA4: ; 0x020D8BA4
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r2, [r4, #0x4]
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x9
+ beq _020D8BE4
+ cmp r0, #0xa
+ beq _020D8C10
+ cmp r0, #0xb
+ beq _020D8C10
+ b _020D8C2C
+_020D8BE4:
+ ldr r0, _020D8C38 ; =0x00000182
+ mov r1, #0x2
+ add r0, r2, r0
+ bl DC_InvalidateRange
+ ldr r2, [r4, #0x4]
+ add r0, r2, #0x100
+ ldrh r0, [r0, #0x82]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_020D8C10:
+ add r0, r2, #0xbc
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ ldrh r0, [r0, #0xbc]
+ ldmia sp!, {r4,lr}
+ bx lr
+_020D8C2C:
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020D8C38: .word 0x00000182
+
+ arm_func_start WM_GetAllowedChannel
+WM_GetAllowedChannel: ; 0x020D8C3C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl WMi_CheckInitialized
+_020D8C48: ; 0x020D8C48
+ cmp r0, #0x0
+ movne r0, #0x8000
+ ldreq r0, _020D8C64 ; =0x027FFCFA
+ ldreqh r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020D8C64: .word 0x027FFCFA
+
+ arm_func_start WM_ReadMPData
+WM_ReadMPData: ; 0x020D8C68
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x40
+ mov r5, r0
+ mov r4, r1
+ bl WMi_GetSystemWork
+ mov r6, r0
+ bl WMi_CheckInitialized
+_020D8C84: ; 0x020D8C84
+ cmp r0, #0x0
+ addne sp, sp, #0x40
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r4, #0x1
+ blo _020D8CA8
+ cmp r4, #0xf
+ bls _020D8CB8
+_020D8CA8:
+ add sp, sp, #0x40
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D8CB8:
+ ldr r2, [r6, #0x4]
+ ldr r0, _020D8D68 ; =0x00000182
+ mov r1, #0x2
+ add r0, r2, r0
+ bl DC_InvalidateRange
+ ldr r0, [r6, #0x4]
+ mov r1, #0x1
+ add r0, r0, #0x100
+ ldrh r2, [r0, #0x82]
+ mov r0, r1, lsl r4
+ ands r0, r2, r0
+ addeq sp, sp, #0x40
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r0, [r5, #0x4]
+ cmp r0, #0x0
+ addeq sp, sp, #0x40
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ add r0, r5, #0xa
+ str r0, [sp, #0x0]
+ mov r3, #0x0
+ add r2, sp, #0x0
+_020D8D1C:
+ ldr r0, [r2, r3, lsl #0x2]
+ ldrh r1, [r0, #0x4]
+ cmp r4, r1
+ addeq sp, sp, #0x40
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ add r3, r3, #0x1
+ sub r0, r3, #0x1
+ ldrh r1, [r5, #0x6]
+ ldr r0, [r2, r0, lsl #0x2]
+ add r0, r1, r0
+ str r0, [r2, r3, lsl #0x2]
+ ldrh r0, [r5, #0x4]
+ cmp r3, r0
+ blt _020D8D1C
+ mov r0, #0x0
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D8D68: .word 0x00000182
+
+ arm_func_start WM_GetMPReceiveBufferSize
+WM_GetMPReceiveBufferSize:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl WMi_GetSystemWork
+ mov r4, r0
+ mov r0, #0x2
+ mov r1, #0x7
+ mov r2, #0x8
+ bl WMi_CheckStateEx
+_020D8D8C: ; 0x020D8D8C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0xc
+ bl DC_InvalidateRange
+ ldr r1, [r4, #0x4]
+ ldr r0, [r1, #0xc]
+ cmp r0, #0x1
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ add r0, r1, #0x188
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r1, [r4, #0x4]
+ add r0, r1, #0x100
+ ldrh r0, [r0, #0x88]
+ cmp r0, #0x0
+ moveq r5, #0x1
+ add r0, r1, #0x3e
+ mov r1, #0x2
+ movne r5, #0x0
+ bl DC_InvalidateRange
+ cmp r5, #0x1
+ ldr r0, [r4, #0x4]
+ addne sp, sp, #0x4
+ ldrh r5, [r0, #0x3e]
+ addne r0, r5, #0x51
+ bicne r0, r0, #0x1f
+ movne r0, r0, lsl #0x1
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ add r0, r0, #0xf8
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ add r1, r5, #0xc
+ ldrh r0, [r0, #0xf8]
+ mul r0, r1, r0
+ add r0, r0, #0x29
+ bic r0, r0, #0x1f
+ mov r0, r0, lsl #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_GetMPSendBufferSize
+WM_GetMPSendBufferSize:
+ stmdb sp!, {r4,lr}
+ bl WMi_GetSystemWork
+ mov r4, r0
+ mov r0, #0x2
+ mov r1, #0x7
+ mov r2, #0x8
+ bl WMi_CheckStateEx
+_020D8E70: ; 0x020D8E70
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0xc
+ bl DC_InvalidateRange
+ ldr r1, [r4, #0x4]
+ ldr r0, [r1, #0xc]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r0, r1, #0x3c
+ mov r1, #0x4
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ ldrh r0, [r0, #0x3c]
+ add r0, r0, #0x1f
+ bic r0, r0, #0x1f
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_ReadStatus
+WM_ReadStatus: ; 0x020D8ECC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl WMi_GetSystemWork
+ mov r4, r0
+ bl WMi_CheckInitialized
+_020D8EE4: ; 0x020D8EE4
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x7c0
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ mov r1, r5
+ mov r2, #0x7c0
+ bl MIi_CpuCopyFast
+_020D8F24: ; 0x020D8F24
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_SetPortCallback
+WM_SetPortCallback:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x48
+ movs r5, r1
+ mov r6, r0
+ mov r4, r2
+ beq _020D8F9C
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x44
+ bl MI_CpuFill8
+ mov r3, #0x0
+ ldr r1, _020D9010 ; =0x0000FFFF
+ mov r7, #0x82
+ mov r2, #0x19
+ add r0, sp, #0x14
+ strh r7, [sp, #0x0]
+ strh r3, [sp, #0x2]
+ strh r2, [sp, #0x4]
+ strh r6, [sp, #0x6]
+ str r3, [sp, #0x8]
+ str r3, [sp, #0xc]
+ strh r3, [sp, #0x10]
+ strh r1, [sp, #0x1a]
+ str r4, [sp, #0x1c]
+ strh r3, [sp, #0x12]
+ bl OS_GetMacAddress
+_020D8F9C:
+ bl OS_DisableInterrupts
+ mov r8, r0
+ bl WMi_CheckInitialized
+ movs r7, r0
+ beq _020D8FC8
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x48
+ mov r0, r7
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020D8FC8:
+ bl WMi_GetSystemWork
+ add r0, r0, r6, lsl #0x2
+ str r5, [r0, #0xcc]
+ str r4, [r0, #0x10c]
+ cmp r5, #0x0
+ beq _020D8FF8
+ bl WM_GetConnectedAIDs
+ strh r0, [sp, #0x22]
+ bl WM_GetAID
+ strh r0, [sp, #0x20]
+ add r0, sp, #0x0
+ blx r5
+_020D8FF8:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+_020D9000: ; 0x020D9000
+ mov r0, #0x0
+ add sp, sp, #0x48
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D9010: .word 0x0000FFFF
+
+ arm_func_start WM_SetIndCallback
+WM_SetIndCallback: ; 0x020D9014
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl WMi_CheckInitialized
+ movs r4, r0
+ beq _020D9044
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D9044:
+ bl WMi_GetSystemWork
+ str r6, [r0, #0xc8]
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020D9054: ; 0x020D9054
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start WM_Disconnect
+WM_Disconnect: ; 0x020D9060
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ mov r5, r1
+ bl WMi_GetSystemWork
+ mov r1, #0xa
+ mov r4, r0
+ str r1, [sp, #0x0]
+ mov r12, #0xb
+ mov r0, #0x5
+ mov r1, #0x7
+ mov r2, #0x9
+ mov r3, #0x8
+ str r12, [sp, #0x4]
+ bl WMi_CheckStateEx
+_020D909C: ; 0x020D909C
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldr r2, [r4, #0x4]
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x7
+ beq _020D90C4
+ cmp r0, #0x9
+ bne _020D9120
+_020D90C4:
+ cmp r5, #0x1
+ blo _020D90D4
+ cmp r5, #0xf
+ bls _020D90E4
+_020D90D4:
+ add sp, sp, #0x8
+ mov r0, #0x6
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D90E4:
+ ldr r0, _020D9164 ; =0x00000182
+ mov r1, #0x2
+ add r0, r2, r0
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ mov r1, #0x1
+ add r0, r0, #0x100
+ ldrh r2, [r0, #0x82]
+ mov r0, r1, lsl r5
+ ands r0, r2, r0
+ bne _020D9134
+ add sp, sp, #0x8
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020D9120:
+ cmp r5, #0x0
+ addne sp, sp, #0x8
+ movne r0, #0x6
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+_020D9134:
+ mov r1, r6
+ mov r0, #0xd
+ bl WMi_SetCallbackTable
+ mov r1, #0x1
+ mov r2, r1, lsl r5
+ mov r0, #0xd
+ bl WMi_SendCommand
+_020D9150: ; 0x020D9150
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020D9164: .word 0x00000182
+
+ arm_func_start WM_StartConnectEx
+WM_StartConnectEx: ; 0x020D9168
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x2c
+ mov r7, r0
+ mov r6, r1
+ mov r0, #0x1
+ mov r1, #0x2
+ mov r5, r2
+ mov r4, r3
+ bl WMi_CheckStateEx
+_020D918C: ; 0x020D918C
+ cmp r0, #0x0
+ addne sp, sp, #0x2c
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x0
+ addeq sp, sp, #0x2c
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrh r1, [r6, #0x0]
+ mov r0, r6
+ mov r1, r1, lsl #0x1
+ bl DC_StoreRange
+ bl WMi_GetSystemWork
+ add r1, r0, #0x100
+ mov r2, #0x0
+ strh r2, [r1, #0x50]
+ str r2, [r0, #0x14c]
+ mov r1, r7
+ mov r0, #0xc
+ bl WMi_SetCallbackTable
+ mov r0, #0xc
+ strh r0, [sp, #0x0]
+ str r6, [sp, #0x4]
+ cmp r5, #0x0
+ beq _020D9208
+ add r1, sp, #0x8
+ mov r0, r5
+ mov r2, #0x18
+ bl MI_CpuCopy8
+ b _020D9218
+_020D9208:
+ add r0, sp, #0x8
+ mov r1, #0x0
+ mov r2, #0x18
+ bl MI_CpuFill8
+_020D9218:
+ ldrh r2, [sp, #0x40]
+ add r0, sp, #0x0
+ mov r1, #0x28
+ str r4, [sp, #0x20]
+ strh r2, [sp, #0x26]
+ bl WMi_SendCommandDirect
+_020D9230: ; 0x020D9230
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WM_EndScan
+WM_EndScan: ; 0x020D9244
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x5
+ bl WMi_CheckStateEx
+_020D9258: ; 0x020D9258
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0xb
+ bl WMi_SetCallbackTable
+ mov r0, #0xb
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D927C: ; 0x020D927C
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_StartScanEx
+WM_StartScanEx: ; 0x020D928C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x3c
+ mov r5, r0
+ mov r0, #0x3
+ mov r4, r1
+ mov r2, r0
+ mov r1, #0x2
+ mov r3, #0x5
+ bl WMi_CheckStateEx
+_020D92B0: ; 0x020D92B0
+ cmp r0, #0x0
+ addne sp, sp, #0x3c
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ addeq sp, sp, #0x3c
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x3c
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrh r0, [r4, #0x4]
+ cmp r0, #0x400
+ addhi sp, sp, #0x3c
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r5,lr}
+ bxhi lr
+ ldrh r0, [r4, #0x12]
+ cmp r0, #0x20
+ addhi sp, sp, #0x3c
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r5,lr}
+ bxhi lr
+ ldrh r1, [r4, #0x10]
+ cmp r1, #0x0
+ beq _020D934C
+ cmp r1, #0x1
+ beq _020D934C
+ cmp r1, #0x2
+ beq _020D934C
+ cmp r1, #0x3
+ addne sp, sp, #0x3c
+ movne r0, #0x6
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020D934C:
+ ldr r0, _020D9408 ; =0x0000FFFE
+ add r0, r1, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, #0x1
+ bhi _020D937C
+ ldrh r0, [r4, #0x34]
+ cmp r0, #0x20
+ addhi sp, sp, #0x3c
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r5,lr}
+ bxhi lr
+_020D937C:
+ mov r1, r5
+ mov r0, #0x26
+ bl WMi_SetCallbackTable
+ mov r0, #0x26
+ strh r0, [sp, #0x0]
+ ldrh r2, [r4, #0x6]
+ add r1, sp, #0xc
+ add r0, r4, #0xa
+ strh r2, [sp, #0x2]
+ ldr r3, [r4, #0x0]
+ mov r2, #0x6
+ str r3, [sp, #0x4]
+ ldrh r3, [r4, #0x4]
+ strh r3, [sp, #0x8]
+ ldrh r3, [r4, #0x8]
+ strh r3, [sp, #0xa]
+ bl MI_CpuCopy8
+ ldrh r2, [r4, #0x10]
+ add r1, sp, #0x16
+ add r0, r4, #0x14
+ strh r2, [sp, #0x12]
+ ldrh r3, [r4, #0x34]
+ mov r2, #0x20
+ strh r3, [sp, #0x36]
+ ldrh r3, [r4, #0x12]
+ strh r3, [sp, #0x14]
+ bl MI_CpuCopy8
+_020D93E8: ; 0x020D93E8
+ add r0, sp, #0x0
+ mov r1, #0x3c
+ bl WMi_SendCommandDirect
+_020D93F4: ; 0x020D93F4
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020D9408: .word 0x0000FFFE
+
+ arm_func_start WM_StartScan
+WM_StartScan: ; 0x020D940C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ mov r0, #0x3
+ mov r4, r1
+ mov r2, r0
+ mov r1, #0x2
+ mov r3, #0x5
+ bl WMi_CheckStateEx
+_020D9430: ; 0x020D9430
+ cmp r0, #0x0
+ addne sp, sp, #0x14
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrh r0, [r4, #0x4]
+ cmp r0, #0x1
+ blo _020D9480
+ cmp r0, #0xe
+ bls _020D9490
+_020D9480:
+ add sp, sp, #0x14
+ mov r0, #0x6
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D9490:
+ mov r1, r5
+ mov r0, #0xa
+ bl WMi_SetCallbackTable
+ mov r0, #0xa
+ strh r0, [sp, #0x0]
+ ldrh r2, [r4, #0x4]
+ add r0, sp, #0x0
+ mov r1, #0x10
+ strh r2, [sp, #0x2]
+ ldr r2, [r4, #0x0]
+ str r2, [sp, #0x4]
+ ldrh r2, [r4, #0x6]
+ strh r2, [sp, #0x8]
+ ldrb r2, [r4, #0x8]
+ strb r2, [sp, #0xa]
+ ldrb r2, [r4, #0x9]
+ strb r2, [sp, #0xb]
+ ldrb r2, [r4, #0xa]
+ strb r2, [sp, #0xc]
+ ldrb r2, [r4, #0xb]
+ strb r2, [sp, #0xd]
+ ldrb r2, [r4, #0xc]
+ strb r2, [sp, #0xe]
+ ldrb r2, [r4, #0xd]
+ strb r2, [sp, #0xf]
+ bl WMi_SendCommandDirect
+_020D94F8: ; 0x020D94F8
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_EndParent
+WM_EndParent: ; 0x020D950C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x7
+ bl WMi_CheckStateEx
+_020D9520: ; 0x020D9520
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x9
+ bl WMi_SetCallbackTable
+ mov r0, #0x9
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D9544: ; 0x020D9544
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_StartParent
+WM_StartParent: ; 0x020D9554
+ ldr ip, _020D9560 ; =FUN_020D9564
+ mov r1, #0x1
+ bx r12
+ .balign 4
+_020D9560: .word FUN_020D9564
+
+ arm_func_start FUN_020D9564
+FUN_020D9564: ; 0x020D9564
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, #0x1
+ mov r1, #0x2
+ bl WMi_CheckStateEx
+_020D9580: ; 0x020D9580
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ bl WMi_GetSystemWork
+ add r1, r0, #0x100
+ mov r2, #0x0
+ strh r2, [r1, #0x50]
+ str r2, [r0, #0x14c]
+ mov r1, r5
+ mov r0, #0x8
+ bl WMi_SetCallbackTable
+ mov r2, r4
+ mov r0, #0x8
+ mov r1, #0x1
+ bl WMi_SendCommand
+_020D95C0: ; 0x020D95C0
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WmCheckParentParameter
+WmCheckParentParameter: ; 0x020D95D4
+ ldrh r1, [r0, #0x4]
+ cmp r1, #0x70
+ movhi r0, #0x0
+ bxhi lr
+ ldrh r1, [r0, #0x18]
+ cmp r1, #0xa
+ blo _020D95F8
+ cmp r1, #0x3e8
+ bls _020D9600
+_020D95F8:
+ mov r0, #0x0
+ bx lr
+_020D9600:
+ ldrh r0, [r0, #0x32]
+ cmp r0, #0x1
+ blo _020D9614
+ cmp r0, #0xe
+ bls _020D961C
+_020D9614:
+ mov r0, #0x0
+ bx lr
+_020D961C:
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start WM_SetParentParameter
+WM_SetParentParameter: ; 0x020D9624
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, #0x1
+ mov r1, #0x2
+ bl WMi_CheckStateEx
+_020D9640: ; 0x020D9640
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrh r0, [r4, #0x4]
+ cmp r0, #0x0
+ beq _020D9688
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+_020D9688:
+ ldrh r1, [r4, #0x14]
+ ldrh r0, [r4, #0x34]
+ cmp r1, #0x0
+ movne r2, #0x2a
+ moveq r2, #0x0
+ add r0, r0, r2
+ cmp r0, #0x200
+ bgt _020D96C4
+ ldrh r0, [r4, #0x36]
+ cmp r1, #0x0
+ movne r1, #0x6
+ moveq r1, #0x0
+ add r0, r0, r1
+ cmp r0, #0x200
+ ble _020D96D4
+_020D96C4:
+ add sp, sp, #0x4
+ mov r0, #0x6
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020D96D4:
+ mov r0, r4
+ bl WmCheckParentParameter
+ mov r1, r5
+ mov r0, #0x7
+ bl WMi_SetCallbackTable
+ mov r0, r4
+ mov r1, #0x40
+ bl DC_StoreRange
+ ldrh r1, [r4, #0x4]
+ cmp r1, #0x0
+ beq _020D9708
+ ldr r0, [r4, #0x0]
+ bl DC_StoreRange
+_020D9708:
+ mov r2, r4
+ mov r0, #0x7
+ mov r1, #0x1
+ bl WMi_SendCommand
+_020D9718: ; 0x020D9718
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_End
+WM_End: ; 0x020D972C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x2
+ bl WMi_CheckStateEx
+_020D9740: ; 0x020D9740
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x2
+ bl WMi_SetCallbackTable
+ mov r0, #0x2
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D9764: ; 0x020D9764
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_Reset
+WM_Reset: ; 0x020D9774
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl WMi_CheckIdle
+_020D9780: ; 0x020D9780
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x1
+ bl WMi_SetCallbackTable
+ mov r0, #0x1
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D97A4: ; 0x020D97A4
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_Initialize
+WM_Initialize: ; 0x020D97B4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r1
+ mov r1, r2
+ bl WM_Init
+_020D97C8: ; 0x020D97C8
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x0
+ bl WMi_SetCallbackTable
+ bl WMi_GetSystemWork
+ mov r3, r0
+ ldr r1, [r3, #0x10]
+ mov r0, #0x0
+ str r1, [sp, #0x0]
+ ldr r2, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ mov r1, #0x3
+ bl WMi_SendCommand
+_020D9808: ; 0x020D9808
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_PowerOff
+WM_PowerOff: ; 0x020D981C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x2
+ bl WMi_CheckStateEx
+_020D9830: ; 0x020D9830
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x6
+ bl WMi_SetCallbackTable
+ mov r0, #0x6
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D9854: ; 0x020D9854
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_PowerOn
+WM_PowerOn: ; 0x020D9864
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, r0
+ bl WMi_CheckStateEx
+_020D9878: ; 0x020D9878
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x5
+ bl WMi_SetCallbackTable
+ mov r0, #0x5
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D989C: ; 0x020D989C
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_Disable
+WM_Disable: ; 0x020D98AC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, r0
+ bl WMi_CheckStateEx
+_020D98C0: ; 0x020D98C0
+ cmp r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x4
+ bl WMi_SetCallbackTable
+ mov r0, #0x4
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D98E4: ; 0x020D98E4
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_Enable
+WM_Enable: ; 0x020D98F4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x0
+ bl WMi_CheckStateEx
+_020D990C: ; 0x020D990C
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r1, r4
+ mov r0, #0x3
+ bl WMi_SetCallbackTable
+ bl WMi_GetSystemWork
+ mov r3, r0
+ ldr r1, [r3, #0x10]
+ mov r0, #0x3
+ str r1, [sp, #0x0]
+ ldr r2, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ mov r1, r0
+ bl WMi_SendCommand
+_020D994C: ; 0x020D994C
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_EndMP
+WM_EndMP: ; 0x020D9960
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl WMi_GetSystemWork
+ mov r4, r0
+ mov r0, #0x2
+ mov r1, #0x9
+ mov r2, #0xa
+ bl WMi_CheckStateEx
+_020D9984: ; 0x020D9984
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0xc
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r1, r5
+ mov r0, #0x10
+ bl WMi_SetCallbackTable
+ mov r0, #0x10
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D99D8: ; 0x020D99D8
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_SetMPDataToPortEx
+WM_SetMPDataToPortEx: ; 0x020D99EC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x14
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ mov r5, #0x1
+ bl WMi_GetSystemWork
+ ldr r4, [r0, #0x4]
+ mov r0, #0x2
+ mov r1, #0x9
+ mov r2, #0xa
+ bl WMi_CheckStateEx
+_020D9A20: ; 0x020D9A20
+ cmp r0, #0x0
+ addne sp, sp, #0x14
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ add r0, r4, #0x3c
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ add r0, r4, #0x188
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ add r0, r4, #0x100
+ ldrh r0, [r0, #0x88]
+ cmp r0, #0x0
+ bne _020D9A7C
+ ldr r0, _020D9B44 ; =0x00000182
+ mov r1, #0x2
+ add r0, r4, r0
+ bl DC_InvalidateRange
+ add r2, r4, #0x100
+ add r0, r4, #0x86
+ mov r1, #0x2
+ ldrh r5, [r2, #0x82]
+ bl DC_InvalidateRange
+_020D9A7C:
+ cmp r7, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r5, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x7
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ add r0, r4, #0x7c
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x7c]
+ cmp r7, r0
+ addeq sp, sp, #0x14
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r6, #0x200
+ addhi sp, sp, #0x14
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r9,lr}
+ bxhi lr
+ cmp r6, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, r7
+ mov r1, r6
+ bl DC_StoreRange
+ ldrh r2, [sp, #0x30]
+ ldrh r1, [sp, #0x34]
+ ldrh r0, [sp, #0x38]
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ str r0, [sp, #0x8]
+ str r9, [sp, #0xc]
+ mov r2, r7
+ mov r3, r6
+ mov r0, #0xf
+ mov r1, #0x7
+ str r8, [sp, #0x10]
+ bl WMi_SendCommand
+_020D9B30: ; 0x020D9B30
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020D9B44: .word 0x00000182
+
+ arm_func_start WM_StartMP
+WM_StartMP: ; 0x020D9B48
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x24
+ mov r6, r1
+ mov r7, r0
+ mov r5, r2
+ add r1, sp, #0x8
+ mov r0, #0x0
+ mov r2, #0x1c
+ mov r4, r3
+ bl MIi_CpuClear32
+ ldrh r12, [sp, #0x3c]
+ mov r0, #0x3
+ str r0, [sp, #0x8]
+ ldrh lr, [sp, #0x38]
+ strh r12, [sp, #0xc]
+ strh r12, [sp, #0xe]
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ add r12, sp, #0x8
+ str lr, [sp, #0x0]
+ str r12, [sp, #0x4]
+ bl WMi_StartMP
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WM_StartMPEx
+WM_StartMPEx: ; 0x020D9BB4
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x28
+ mov r6, r1
+ mov r7, r0
+ mov r5, r2
+ add r1, sp, #0x8
+ mov r0, #0x0
+ mov r2, #0x1c
+ mov r4, r3
+ bl MIi_CpuClear32
+ ldrh lr, [sp, #0x44]
+ ldr r1, [sp, #0x58]
+ ldrh r12, [sp, #0x48]
+ ldr r0, [sp, #0x54]
+ ldr r8, _020D9C54 ; =0x00001E03
+ cmp r0, #0x0
+ ldr r3, [sp, #0x4c]
+ ldr r2, [sp, #0x50]
+ strb r1, [sp, #0x22]
+ strh r12, [sp, #0x1e]
+ strb r3, [sp, #0x20]
+ strb r2, [sp, #0x21]
+ ldrh r1, [sp, #0x40]
+ str r8, [sp, #0x8]
+ orrne r0, r8, #0x4
+ strne r0, [sp, #0x8]
+ strh lr, [sp, #0xc]
+ strh lr, [sp, #0xe]
+ strneh lr, [sp, #0x10]
+ str r1, [sp, #0x0]
+ add r12, sp, #0x8
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl WMi_StartMP
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D9C54: .word 0x00001E03
+
+ arm_func_start WMi_StartMP
+WMi_StartMP: ; 0x020D9C58
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x34
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl WMi_GetSystemWork
+ ldr r5, [r0, #0x4]
+ mov r0, #0x2
+ mov r1, #0x7
+ mov r2, #0x8
+ bl WMi_CheckStateEx
+_020D9C88: ; 0x020D9C88
+ cmp r0, #0x0
+ addne sp, sp, #0x34
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ add r0, r5, #0x188
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ add r0, r5, #0xc6
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ add r0, r5, #0x100
+ ldrh r0, [r0, #0x88]
+ cmp r0, #0x0
+ beq _020D9CD8
+ ldrh r0, [r5, #0xc6]
+ cmp r0, #0x1
+ addne sp, sp, #0x34
+ movne r0, #0x3
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+_020D9CD8:
+ add r0, r5, #0xc
+ mov r1, #0x4
+ bl DC_InvalidateRange
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x1
+ addeq sp, sp, #0x34
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ands r0, r7, #0x3f
+ addne sp, sp, #0x34
+ movne r0, #0x6
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ ldrh r4, [sp, #0x50]
+ ands r0, r4, #0x1f
+ addne sp, sp, #0x34
+ movne r0, #0x6
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ add r0, r5, #0x9c
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldrh r0, [r5, #0x9c]
+ cmp r0, #0x0
+ bne _020D9D70
+ bl WM_GetMPReceiveBufferSize
+_020D9D44: ; 0x020D9D44
+ cmp r7, r0
+ addlt sp, sp, #0x34
+ movlt r0, #0x6
+ ldmltia sp!, {r4-r9,lr}
+ bxlt lr
+ bl WM_GetMPSendBufferSize
+_020D9D5C: ; 0x020D9D5C
+ cmp r4, r0
+ addlt sp, sp, #0x34
+ movlt r0, #0x6
+ ldmltia sp!, {r4-r9,lr}
+ bxlt lr
+_020D9D70:
+ mov r1, r9
+ mov r0, #0xe
+ bl WMi_SetCallbackTable
+ add r1, sp, #0x0
+ mov r0, #0x0
+ mov r2, #0x30
+ bl MIi_CpuClear32
+ ldrh r3, [sp, #0x50]
+ mov r4, r7, lsr #0x1
+ mov r5, #0xe
+ ldr r0, [sp, #0x54]
+ add r1, sp, #0x14
+ mov r2, #0x1c
+ strh r5, [sp, #0x0]
+ str r8, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r6, [sp, #0xc]
+ str r3, [sp, #0x10]
+ bl MIi_CpuCopy32
+_020D9DBC: ; 0x020D9DBC
+ add r0, sp, #0x0
+ mov r1, #0x30
+ bl WMi_SendCommandDirect
+_020D9DC8: ; 0x020D9DC8
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start WM_EndDCF
+WM_EndDCF: ; 0x020D9DDC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl WMi_GetSystemWork
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0xb
+ bl WMi_CheckStateEx
+_020D9DFC: ; 0x020D9DFC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0x10
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r1, r5
+ mov r0, #0x13
+ bl WMi_SetCallbackTable
+ mov r0, #0x13
+ mov r1, #0x0
+ bl WMi_SendCommand
+_020D9E50: ; 0x020D9E50
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_SetDCFData
+WM_SetDCFData: ; 0x020D9E64
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl WMi_GetSystemWork
+ mov r8, r0
+ mov r0, #0x1
+ mov r1, #0xb
+ bl WMi_CheckStateEx
+_020D9E90: ; 0x020D9E90
+ cmp r0, #0x0
+ addne sp, sp, #0x10
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldr r0, [r8, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0x10
+ bl DC_InvalidateRange
+ ldr r0, [r8, #0x4]
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x10
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, _020D9F3C ; =0x000005E4
+ cmp r4, r0
+ addhi sp, sp, #0x10
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r8,lr}
+ bxhi lr
+ mov r0, r5
+ mov r1, r4
+ bl DC_StoreRange
+ mov r1, r7
+ mov r0, #0x12
+ bl WMi_SetCallbackTable
+ add r1, sp, #0x8
+ mov r0, r6
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ mov r0, #0x12
+ mov r1, #0x4
+ bl WMi_SendCommand
+_020D9F28: ; 0x020D9F28
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D9F3C: .word 0x000005E4
+
+ arm_func_start WM_StartDCF
+WM_StartDCF: ; 0x020D9F40
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl WMi_GetSystemWork
+ mov r4, r0
+ mov r0, #0x1
+ mov r1, #0x8
+ bl WMi_CheckStateEx
+_020D9F68: ; 0x020D9F68
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r0, [r4, #0x4]
+ mov r1, #0x4
+ add r0, r0, #0x10
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x1
+ addeq sp, sp, #0x4
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r5, #0x10
+ addcc sp, sp, #0x4
+ movcc r0, #0x6
+ ldmccia sp!, {r4-r7,lr}
+ bxcc lr
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ mov r1, r5
+ bl DC_StoreRange
+ mov r1, r7
+ mov r0, #0x11
+ bl WMi_SetCallbackTable
+ mov r2, r6
+ mov r3, r5
+ mov r0, #0x11
+ mov r1, #0x2
+ bl WMi_SendCommand
+_020D9FF8: ; 0x020D9FF8
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WmGetSharedDataAddress
+WmGetSharedDataAddress: ; 0x020DA00C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r12, #0x1
+ mov r3, r12, lsl r3
+ sub r3, r3, #0x1
+ mov r5, r0
+ and r0, r1, r3
+ mov r4, r2
+ bl MATH_CountPopulation
+ add r1, r5, #0x800
+ ldrh r1, [r1, #0x10]
+ mla r0, r1, r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_GetSharedDataAddress
+WM_GetSharedDataAddress: ; 0x020DA048
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ ldrh lr, [r4, #0x2]
+ cmp r0, #0x0
+ mov r3, r2
+ mov r1, #0x1
+ mov r12, r1, lsl r3
+ ldrh r1, [r4, #0x0]
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r4, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ands r2, r1, r12
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ands r2, lr, r12
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r2, r4, #0x4
+ bl WmGetSharedDataAddress
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WmDataSharingSendDataSet
+WmDataSharingSendDataSet:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x10
+ mov r10, r0
+ mov r9, r1
+ bl OS_DisableInterrupts
+ add r1, r10, #0x800
+ ldrh r1, [r1, #0x8]
+ mov r7, r0
+ mov r1, r1, lsl #0x9
+ ldrh r1, [r10, r1]
+ cmp r1, #0x0
+ bne _020DA210
+ bl WMi_GetMPReadyAIDs
+ add r1, r10, #0x800
+ ldrh r6, [r1, #0x8]
+ mov r5, r0
+ ldrh r1, [r1, #0x18]
+ add r0, r6, #0x1
+ and r0, r0, #0x3
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ cmp r1, #0x1
+ addeq r0, r4, #0x1
+ andeq r0, r0, #0x3
+ moveq r0, r0, lsl #0x10
+ moveq r8, r0, lsr #0x10
+ movne r8, r4
+ add r1, r10, r8, lsl #0x9
+ mov r0, #0x0
+ mov r2, #0x200
+ bl MIi_CpuClear16
+ add r0, r10, #0x800
+ ldrh r3, [r0, #0xe]
+ orr r2, r5, #0x1
+ mov r1, r8, lsl #0x9
+ and r2, r3, r2
+ strh r2, [r10, r1]
+ strh r4, [r0, #0x8]
+ ldrh r0, [r0, #0xe]
+ mov r1, r6, lsl #0x9
+ cmp r9, #0x1
+ strh r0, [r10, r1]
+ ldreqh r0, [r10, r1]
+ biceq r0, r0, #0x1
+ streqh r0, [r10, r1]
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ add r3, r10, #0x800
+ ldrh r1, [r3, #0xe]
+ mov r4, #0x1
+ ldr r0, _020DA220 ; =WmDataSharingSetDataCallback
+ and r1, r1, r5
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ str r1, [sp, #0x0]
+ ldrh r5, [r3, #0x16]
+ mov r1, r10
+ add r2, r10, r6, lsl #0x9
+ str r5, [sp, #0x4]
+ str r4, [sp, #0x8]
+ ldrh r3, [r3, #0x14]
+ bl WM_SetMPDataToPortEx
+ cmp r0, #0x7
+ bne _020DA1E4
+ add r0, r10, r6, lsl #0x1
+ ldr r1, _020DA224 ; =0x0000FFFF
+ add r0, r0, #0x800
+ strh r1, [r0, #0x0]
+ add r0, r10, #0x800
+ ldrh r1, [r0, #0xa]
+ add sp, sp, #0x10
+ add r1, r1, #0x1
+ and r1, r1, #0x3
+ strh r1, [r0, #0xa]
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020DA1E4:
+ cmp r0, #0x0
+ addeq sp, sp, #0x10
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ cmp r0, #0x2
+ addne r0, r10, #0x800
+ movne r1, #0x5
+ strneh r1, [r0, #0x1c]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020DA210:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020DA220: .word WmDataSharingSetDataCallback
+_020DA224: .word 0x0000FFFF
+
+ arm_func_start WmDataSharingReceiveData
+WmDataSharingReceiveData: ; 0x020DA228
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r3, r1
+ mov r0, #0x1
+ mov r0, r0, lsl r3
+ add r12, r7, #0x800
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r12, #0xe]
+ mov r5, r0, lsr #0x10
+ mov r6, r2
+ ands r0, r1, r5
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrh r4, [r12, #0x8]
+ mov r0, r4, lsl #0x9
+ ldrh r0, [r7, r0]
+ ands r0, r5, r0
+ bne _020DA2B4
+ ldrh r0, [r12, #0x18]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ add r0, r4, #0x1
+ and r0, r0, #0x3
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ mov r0, r4, lsl #0x9
+ ldrh r0, [r7, r0]
+ ands r0, r5, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_020DA2B4:
+ add r2, r7, r4, lsl #0x9
+ mov r0, r7
+ add r2, r2, #0x4
+ bl WmGetSharedDataAddress
+ mov r1, r0
+ cmp r6, #0x0
+ beq _020DA2E4
+ add r0, r7, #0x800
+ ldrh r2, [r0, #0x10]
+ mov r0, r6
+ bl MIi_CpuCopy16
+ b _020DA2F4
+_020DA2E4:
+ add r0, r7, #0x800
+ ldrh r2, [r0, #0x10]
+ mov r0, #0x0
+ bl MIi_CpuClear16
+_020DA2F4:
+ bl OS_DisableInterrupts
+ mov r4, r4, lsl #0x9
+ ldrh r3, [r7, r4]
+ mvn r1, r5
+ add r2, r7, #0x2
+ and r1, r3, r1
+ strh r1, [r7, r4]
+ ldrh r1, [r2, r4]
+ orr r1, r1, r5
+ strh r1, [r2, r4]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WmDataSharingReceiveCallback_Child
+WmDataSharingReceiveCallback_Child: ; 0x020DA32C
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r7, [r8, #0x1c]
+ cmp r7, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldrh r0, [r8, #0x2]
+ cmp r0, #0x0
+ bne _020DA458
+ ldrh r0, [r8, #0x4]
+ cmp r0, #0x15
+ bgt _020DA394
+ cmp r0, #0x15
+ bge _020DA3C4
+ cmp r0, #0x9
+ ldmgtia sp!, {r4-r8,lr}
+ bxgt lr
+ cmp r0, #0x7
+ ldmltia sp!, {r4-r8,lr}
+ bxlt lr
+ cmp r0, #0x7
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ cmp r0, #0x9
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020DA394:
+ cmp r0, #0x1a
+ ldmgtia sp!, {r4-r8,lr}
+ bxgt lr
+ cmp r0, #0x19
+ ldmltia sp!, {r4-r8,lr}
+ bxlt lr
+ cmp r0, #0x19
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ cmp r0, #0x1a
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020DA3C4:
+ ldr r4, [r8, #0xc]
+ ldrh r6, [r8, #0x10]
+ ldrh r5, [r4, #0x0]
+ bl WM_GetAID
+ add r1, r7, #0x800
+ ldrh r1, [r1, #0x14]
+ cmp r6, r1
+ beq _020DA3EC
+ cmp r6, #0x200
+ movhi r6, #0x200
+_020DA3EC:
+ cmp r6, #0x4
+ ldmccia sp!, {r4-r8,lr}
+ bxcc lr
+ mov r1, #0x1
+ mov r0, r1, lsl r0
+ ands r0, r5, r0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ add r0, r7, #0x800
+ ldrh r1, [r0, #0x8]
+ mov r0, r4
+ mov r2, r6
+ add r1, r7, r1, lsl #0x9
+ bl MIi_CpuCopy16
+ add r1, r7, #0x800
+ ldrh r0, [r1, #0x8]
+ ldrh r2, [r8, #0x1a]
+ add r0, r7, r0, lsl #0x1
+ mov r2, r2, asr #0x1
+ add r0, r0, #0x800
+ strh r2, [r0, #0x0]
+ ldrh r0, [r1, #0x8]
+ add r0, r0, #0x1
+ and r0, r0, #0x3
+ strh r0, [r1, #0x8]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020DA458:
+ add r0, r7, #0x800
+ mov r1, #0x5
+ strh r1, [r0, #0x1c]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start WmDataSharingReceiveCallback_Parent
+WmDataSharingReceiveCallback_Parent: ; 0x020DA46C
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, [r0, #0x1c]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r1, [r0, #0x2]
+ cmp r1, #0x0
+ bne _020DA5C4
+ ldrh r1, [r0, #0x4]
+ cmp r1, #0x15
+ bgt _020DA4D0
+ cmp r1, #0x15
+ bge _020DA504
+ cmp r1, #0x9
+ ldmgtia sp!, {r4-r6,lr}
+ bxgt lr
+ cmp r1, #0x7
+ ldmltia sp!, {r4-r6,lr}
+ bxlt lr
+ cmp r1, #0x7
+ beq _020DA528
+ cmp r1, #0x9
+ beq _020DA53C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020DA4D0:
+ cmp r1, #0x1a
+ ldmgtia sp!, {r4-r6,lr}
+ bxgt lr
+ cmp r1, #0x19
+ ldmltia sp!, {r4-r6,lr}
+ bxlt lr
+ cmp r1, #0x19
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ cmp r1, #0x1a
+ beq _020DA53C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020DA504:
+ ldrh r1, [r0, #0x12]
+ ldr r2, [r0, #0xc]
+ mov r0, r4
+ bl WmDataSharingReceiveData
+ mov r0, r4
+ mov r1, #0x0
+ bl WmDataSharingSendDataSet
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020DA528:
+ mov r0, r4
+ mov r1, #0x0
+ bl WmDataSharingSendDataSet
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020DA53C:
+ ldrh r5, [r0, #0x12]
+ mov r6, #0x1
+ bl OS_DisableInterrupts
+ add r1, r4, #0x800
+ ldrh lr, [r1, #0x8]
+ mvn r12, r6, lsl r5
+ mov r3, lr, lsl #0x9
+ ldrh r2, [r4, r3]
+ and r2, r2, r12
+ strh r2, [r4, r3]
+ ldrh r1, [r1, #0x18]
+ cmp r1, #0x1
+ bne _020DA58C
+ add r1, lr, #0x1
+ and r1, r1, #0x3
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x7
+ ldrh r1, [r4, r2]
+ and r1, r1, r12
+ strh r1, [r4, r2]
+_020DA58C:
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ mov r1, #0x0
+ bl WmDataSharingSendDataSet
+ add r0, r4, #0x800
+ ldrh r0, [r0, #0x18]
+ cmp r0, #0x1
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ mov r0, r4
+ mov r1, #0x0
+ bl WmDataSharingSendDataSet
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020DA5C4:
+ add r0, r4, #0x800
+ mov r1, #0x5
+ strh r1, [r0, #0x1c]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start WmDataSharingSetDataCallback
+WmDataSharingSetDataCallback: ; 0x020DA5D8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl WMi_GetSystemWork
+ ldrh r2, [r5, #0xa]
+ ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent
+ add r0, r0, r2, lsl #0x2
+ ldr r2, [r0, #0xcc]
+ ldr r4, [r0, #0x10c]
+ cmp r2, r1
+ beq _020DA618
+ ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child
+ cmp r2, r0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020DA618:
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r5, #0x20]
+ cmp r4, r0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ bl WM_GetAID
+ ldrh r1, [r5, #0x2]
+ cmp r1, #0x0
+ bne _020DA694
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ add r1, r4, #0x800
+ ldrh r0, [r1, #0xa]
+ ldrh r2, [r5, #0x1a]
+ add sp, sp, #0x4
+ add r0, r4, r0, lsl #0x1
+ mov r2, r2, asr #0x1
+ add r0, r0, #0x800
+ strh r2, [r0, #0x0]
+ ldrh r0, [r1, #0xa]
+ add r0, r0, #0x1
+ and r0, r0, #0x3
+ strh r0, [r1, #0xa]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020DA694:
+ cmp r1, #0xa
+ bne _020DA6CC
+ cmp r0, #0x0
+ addne r0, r4, #0x800
+ ldrneh r1, [r0, #0xa]
+ add sp, sp, #0x4
+ addne r1, r1, #0x3
+ andne r1, r1, #0x3
+ strneh r1, [r0, #0xa]
+ add r0, r4, #0x800
+ mov r1, #0x4
+ strh r1, [r0, #0x1c]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020DA6CC:
+ add r0, r4, #0x800
+ mov r1, #0x5
+ strh r1, [r0, #0x1c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DA6E4: .word WmDataSharingReceiveCallback_Parent
+_020DA6E8: .word WmDataSharingReceiveCallback_Child
+
+ arm_func_start WM_StepDataSharing
+WM_StepDataSharing: ; 0x020DA6EC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ mov r9, r1
+ mov r8, r2
+ mov r0, #0x2
+ mov r1, #0x9
+ mov r2, #0xa
+ bl WMi_CheckStateEx
+_020DA710: ; 0x020DA710
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ cmp r10, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ cmp r9, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ cmp r8, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ bl WM_GetAID
+ movs r4, r0
+ bne _020DA770
+ bl WMi_GetMPReadyAIDs
+ mov r7, r0
+_020DA770:
+ add r0, r10, #0x800
+ ldrh r0, [r0, #0x1c]
+ cmp r0, #0x5
+ addeq sp, sp, #0xc
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ cmp r0, #0x1
+ beq _020DA7A8
+ cmp r0, #0x4
+ addne sp, sp, #0xc
+ movne r0, #0x3
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+_020DA7A8:
+ cmp r4, #0x0
+ mov r4, #0x5
+ bne _020DA94C
+ mov r6, #0x0
+ mov r11, r6
+ cmp r0, #0x4
+ bne _020DA870
+ add r1, r10, #0x800
+ mov r3, #0x1
+ strh r3, [r1, #0x1c]
+ ldrh r5, [r1, #0xe]
+ ldrh r2, [r1, #0x8]
+ ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback
+ and r5, r5, r7
+ mov r5, r5, lsl #0x10
+ mov r5, r5, lsr #0x10
+ str r5, [sp, #0x0]
+ ldrh r5, [r1, #0x16]
+ add r2, r2, #0x3
+ and r2, r2, #0x3
+ str r5, [sp, #0x4]
+ str r3, [sp, #0x8]
+ mov r2, r2, lsl #0x10
+ mov r5, r2, lsr #0x10
+ ldrh r3, [r1, #0x14]
+ mov r1, r10
+ add r2, r10, r5, lsl #0x9
+ bl WM_SetMPDataToPortEx
+ cmp r0, #0x7
+ bne _020DA848
+ add r0, r10, r5, lsl #0x1
+ ldr r1, _020DAA68 ; =0x0000FFFF
+ add r0, r0, #0x800
+ strh r1, [r0, #0x0]
+ add r0, r10, #0x800
+ ldrh r1, [r0, #0xa]
+ add r1, r1, #0x1
+ and r1, r1, #0x3
+ strh r1, [r0, #0xa]
+ b _020DA870
+_020DA848:
+ cmp r0, #0x0
+ beq _020DA870
+ cmp r0, #0x2
+ addne r0, r10, #0x800
+ movne r1, r4
+ strneh r1, [r0, #0x1c]
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+_020DA870:
+ add r0, r10, #0x800
+ ldrh r2, [r0, #0xc]
+ ldrh r1, [r0, #0xa]
+ cmp r2, r1
+ beq _020DA908
+ mov r4, r2, lsl #0x9
+ ldrh r3, [r10, r4]
+ mov r1, r8
+ mov r2, #0x200
+ orr r3, r3, #0x1
+ strh r3, [r10, r4]
+ ldrh r0, [r0, #0xc]
+ add r0, r10, r0, lsl #0x9
+ bl MIi_CpuCopy16
+ add r1, r10, #0x800
+ ldrh r0, [r1, #0xc]
+ mov r6, #0x1
+ mov r4, #0x0
+ add r0, r10, r0, lsl #0x1
+ add r0, r0, #0x800
+ ldrh r0, [r0, #0x0]
+ strh r0, [r1, #0x1a]
+ ldrh r0, [r1, #0xc]
+ add r0, r0, #0x1
+ and r0, r0, #0x3
+ strh r0, [r1, #0xc]
+ ldrh r0, [r1, #0x18]
+ cmp r0, #0x0
+ bne _020DA904
+ cmp r7, #0x0
+ beq _020DA904
+ ldrh r0, [r1, #0x8]
+ mov r0, r0, lsl #0x9
+ ldrh r0, [r10, r0]
+ cmp r0, #0x1
+ moveq r11, r6
+ beq _020DA908
+_020DA904:
+ mov r11, #0x0
+_020DA908:
+ mov r0, r10
+ mov r1, #0x0
+ bl WmDataSharingSendDataSet
+_020DA914: ; 0x020DA914
+ cmp r6, #0x0
+ beq _020DAA54
+ mov r0, r10
+ mov r2, r9
+ mov r1, #0x0
+ bl WmDataSharingReceiveData
+ add r0, r10, #0x800
+ ldrh r0, [r0, #0x18]
+ cmp r0, #0x0
+ bne _020DAA54
+ mov r0, r10
+ mov r1, r11
+ bl WmDataSharingSendDataSet
+ b _020DAA54
+_020DA94C:
+ cmp r0, #0x4
+ mov r0, #0x0
+ addeq r1, r10, #0x800
+ moveq r0, #0x1
+ streqh r0, [r1, #0x1c]
+ beq _020DA9D0
+ add r1, r10, #0x800
+ ldrh r2, [r1, #0xc]
+ ldrh r1, [r1, #0x8]
+ cmp r2, r1
+ beq _020DA9D0
+ mov r2, r2, lsl #0x9
+ ldrh r1, [r10, r2]
+ ands r3, r1, #0x1
+ orreq r1, r1, #0x1
+ streqh r1, [r10, r2]
+ beq _020DA9D0
+ mov r1, r8
+ add r0, r10, r2
+ mov r2, #0x200
+ bl MIi_CpuCopy16
+ add r2, r10, #0x800
+ ldrh r1, [r2, #0xc]
+ mov r0, #0x1
+ mov r4, #0x0
+ add r1, r10, r1, lsl #0x1
+ add r1, r1, #0x800
+ ldrh r1, [r1, #0x0]
+ strh r1, [r2, #0x1a]
+ ldrh r1, [r2, #0xc]
+ add r1, r1, #0x1
+ and r1, r1, #0x3
+ strh r1, [r2, #0xc]
+_020DA9D0:
+ cmp r0, #0x0
+ beq _020DAA54
+ add r0, r10, #0x800
+ ldrh r1, [r0, #0xa]
+ ldrh r2, [r0, #0x10]
+ mov r0, r9
+ add r1, r10, r1, lsl #0x9
+ add r7, r1, #0x20
+ mov r1, r7
+ bl MIi_CpuCopy16
+ add r3, r10, #0x800
+ ldrh r1, [r3, #0xe]
+ mov r5, #0x1
+ ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback
+ str r1, [sp, #0x0]
+ ldrh r6, [r3, #0x16]
+ mov r1, r10
+ mov r2, r7
+ str r6, [sp, #0x4]
+ str r5, [sp, #0x8]
+ ldrh r3, [r3, #0x10]
+ bl WM_SetMPDataToPortEx
+ add r1, r10, #0x800
+ ldrh r2, [r1, #0xa]
+ cmp r0, #0x2
+ add r2, r2, #0x1
+ and r2, r2, #0x3
+ strh r2, [r1, #0xa]
+ beq _020DAA54
+ cmp r0, #0x0
+ movne r0, #0x5
+ strneh r0, [r1, #0x1c]
+ movne r4, r5
+_020DAA54:
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020DAA64: .word WmDataSharingSetDataCallback
+_020DAA68: .word 0x0000FFFF
+
+ arm_func_start WM_EndDataSharing
+WM_EndDataSharing: ; 0x020DAA6C
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ moveq r0, #0x6
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r0, r4, #0x800
+ ldrh r1, [r0, #0xe]
+ cmp r1, #0x0
+ moveq r0, #0x3
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrh r0, [r0, #0x16]
+ mov r1, #0x0
+ mov r2, r1
+ bl WM_SetPortCallback
+ add r1, r4, #0x800
+ mov r0, #0x0
+ strh r0, [r1, #0xe]
+ strh r0, [r1, #0x1c]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start WM_StartDataSharing
+WM_StartDataSharing: ; 0x020DAAC0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ mov r7, r1
+ mov r6, r2
+ mov r0, #0x2
+ mov r1, #0x9
+ mov r2, #0xa
+ mov r5, r3
+ mov r9, #0x1
+ bl WMi_CheckStateEx
+_020DAAEC: ; 0x020DAAEC
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ cmp r10, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ cmp r7, #0x10
+ addcs sp, sp, #0xc
+ movcs r0, #0x6
+ ldmcsia sp!, {r4-r11,lr}
+ bxcs lr
+ cmp r6, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ bl WM_GetAID
+ movs r4, r0
+ bne _020DAB4C
+ bl WMi_GetMPReadyAIDs
+ mov r9, r0
+_020DAB4C:
+ mov r1, r10
+ mov r0, #0x0
+ mov r2, #0x820
+ bl MIi_CpuClearFast
+ add r0, r10, #0x800
+ mov r2, #0x0
+ strh r2, [r0, #0x8]
+ strh r2, [r0, #0xa]
+ strh r2, [r0, #0xc]
+ strh r5, [r0, #0x10]
+ strh r7, [r0, #0x16]
+ strh r2, [r0, #0xe]
+ mov r0, #0x1
+ ldr r1, [sp, #0x30]
+ orr r0, r6, r0, lsl r4
+ cmp r1, #0x0
+ mov r0, r0, lsl #0x10
+ movne r2, #0x1
+ add r1, r10, #0x800
+ strh r2, [r1, #0x18]
+ mov r0, r0, lsr #0x10
+ strh r0, [r1, #0xe]
+ bl MATH_CountPopulation
+ add r3, r10, #0x800
+ mul r1, r5, r0
+ strh r0, [r3, #0x12]
+ strh r1, [r3, #0x14]
+ ldrh r0, [r3, #0x14]
+ cmp r0, #0x1fc
+ movhi r0, #0x0
+ strhih r0, [r3, #0xe]
+ addhi sp, sp, #0xc
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r11,lr}
+ bxhi lr
+ add r0, r0, #0x4
+ strh r0, [r3, #0x14]
+ mov r0, #0x1
+ strh r0, [r3, #0x1c]
+ cmp r4, #0x0
+ bne _020DAD04
+ orr r2, r9, #0x1
+ mov r4, #0x0
+_020DABF8:
+ ldrh r1, [r3, #0xe]
+ mov r0, r4, lsl #0x9
+ add r4, r4, #0x1
+ and r1, r1, r2
+ strh r1, [r10, r0]
+ cmp r4, #0x4
+ blt _020DABF8
+ ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent
+ mov r0, r7
+ mov r2, r10
+ bl WM_SetPortCallback
+ mov r8, r10
+ mov r7, #0x0
+ mov r4, #0x2
+ mov r6, #0x1
+ ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback
+ ldr r5, _020DAD34 ; =0x0000FFFF
+ b _020DACE4
+_020DAC40:
+ add r12, r10, #0x800
+ ldrh r2, [r12, #0x8]
+ mov r0, r11
+ mov r1, r10
+ add r2, r2, #0x1
+ and r2, r2, #0x3
+ strh r2, [r12, #0x8]
+ ldrh r3, [r12, #0xe]
+ mov r2, r8
+ and r3, r3, r9
+ mov r3, r3, lsl #0x10
+ mov r3, r3, lsr #0x10
+ str r3, [sp, #0x0]
+ ldrh r3, [r12, #0x16]
+ str r3, [sp, #0x4]
+ str r6, [sp, #0x8]
+ ldrh r3, [r12, #0x14]
+ bl WM_SetMPDataToPortEx
+ cmp r0, #0x7
+ bne _020DACB4
+ add r0, r10, r7, lsl #0x1
+ add r0, r0, #0x800
+ strh r5, [r0, #0x0]
+ add r0, r10, #0x800
+ ldrh r1, [r0, #0xa]
+ add r1, r1, #0x1
+ and r1, r1, #0x3
+ strh r1, [r0, #0xa]
+ b _020DACDC
+_020DACB4:
+ cmp r0, #0x0
+ beq _020DACDC
+ cmp r0, #0x2
+ addne r0, r10, #0x800
+ movne r1, #0x5
+ strneh r1, [r0, #0x1c]
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+_020DACDC:
+ add r8, r8, #0x200
+ add r7, r7, #0x1
+_020DACE4:
+ add r0, r10, #0x800
+ ldrh r0, [r0, #0x18]
+ cmp r0, #0x1
+ movne r0, r6
+ moveq r0, r4
+ cmp r7, r0
+ blt _020DAC40
+ b _020DAD1C
+_020DAD04:
+ ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child
+ mov r4, #0x3
+ mov r0, r7
+ mov r2, r10
+ strh r4, [r3, #0xa]
+ bl WM_SetPortCallback
+_020DAD1C:
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020DAD2C: .word WmDataSharingReceiveCallback_Parent
+_020DAD30: .word WmDataSharingSetDataCallback
+_020DAD34: .word 0x0000FFFF
+_020DAD38: .word WmDataSharingReceiveCallback_Child
+
+ arm_func_start WM_EndKeySharing
+WM_EndKeySharing: ; 0x020DAD3C
+ ldr ip, _020DAD44 ; =WM_EndDataSharing
+ bx r12
+ .balign 4
+_020DAD44: .word WM_EndDataSharing
+
+ arm_func_start WM_StartKeySharing
+WM_StartKeySharing: ; 0x020DAD48
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020DAD70 ; =0x0000FFFF
+ mov r12, #0x1
+ mov r3, #0x2
+ str r12, [sp, #0x0]
+ bl WM_StartDataSharing
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020DAD70: .word 0x0000FFFF
+
+ arm_func_start WM_SetEntry
+WM_SetEntry: ; 0x020DAD74
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, #0x2
+ mov r1, #0x7
+ mov r2, #0x9
+ bl WMi_CheckStateEx
+_020DAD94: ; 0x020DAD94
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r1, r5
+ mov r0, #0x21
+ bl WMi_SetCallbackTable
+ mov r2, r4
+ mov r0, #0x21
+ mov r1, #0x1
+ bl WMi_SendCommand
+_020DADC0: ; 0x020DADC0
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_MeasureChannel
+WM_MeasureChannel: ; 0x020DADD4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl WMi_GetSystemWork
+ mov r0, #0x1
+ mov r1, #0x2
+ bl WMi_CheckStateEx
+_020DADFC: ; 0x020DADFC
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r1, r7
+ mov r0, #0x1e
+ bl WMi_SetCallbackTable
+ ldrh r2, [sp, #0x20]
+ mov r3, #0x1e
+ add r0, sp, #0x0
+ mov r1, #0xa
+ strh r3, [sp, #0x0]
+ strh r6, [sp, #0x2]
+ strh r5, [sp, #0x4]
+ strh r4, [sp, #0x6]
+ strh r2, [sp, #0x8]
+ bl WMi_SendCommandDirect
+_020DAE40: ; 0x020DAE40
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WM_SetLifeTime
+WM_SetLifeTime: ; 0x020DAE54
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl WMi_CheckIdle
+_020DAE70: ; 0x020DAE70
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r1, r7
+ mov r0, #0x1d
+ bl WMi_SetCallbackTable
+ ldrh r12, [sp, #0x20]
+ str r4, [sp, #0x0]
+ mov r2, r6
+ mov r3, r5
+ mov r0, #0x1d
+ mov r1, #0x4
+ str r12, [sp, #0x4]
+ bl WMi_SendCommand
+_020DAEAC: ; 0x020DAEAC
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WM_SetBeaconIndication
+WM_SetBeaconIndication: ; 0x020DAEC0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+_020DAECC: ; 0x020DAECC
+ mov r4, r1
+ bl WMi_CheckIdle
+_020DAED4: ; 0x020DAED4
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ beq _020DAF00
+ cmp r4, #0x1
+ addne sp, sp, #0x4
+ movne r0, #0x6
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020DAF00:
+ mov r1, r5
+ mov r0, #0x19
+ bl WMi_SetCallbackTable
+ mov r2, r4
+ mov r0, #0x19
+ mov r1, #0x1
+ bl WMi_SendCommand
+_020DAF1C: ; 0x020DAF1C
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start WM_SetGameInfo
+WM_SetGameInfo: ; 0x020DAF30
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r0, #0x2
+ mov r1, #0x7
+ mov r2, #0x9
+ mov r4, r3
+ bl WMi_CheckStateEx
+_020DAF58: ; 0x020DAF58
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r5, #0x70
+ addhi sp, sp, #0xc
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r7,lr}
+ bxhi lr
+ ldr r1, _020DAFF4 ; =0x021D68C0
+ mov r0, r6
+ mov r2, r5
+ bl MIi_CpuCopy16
+ ldr r0, _020DAFF4 ; =0x021D68C0
+ mov r1, r5
+ bl DC_StoreRange
+ mov r1, r7
+ mov r0, #0x18
+ bl WMi_SetCallbackTable
+ ldrh r0, [sp, #0x20]
+ str r4, [sp, #0x0]
+ ldrb r1, [sp, #0x24]
+ str r0, [sp, #0x4]
+ ldr r2, _020DAFF4 ; =0x021D68C0
+ str r1, [sp, #0x8]
+ mov r3, r5
+ mov r0, #0x18
+ mov r1, #0x5
+ bl WMi_SendCommand
+_020DAFE0: ; 0x020DAFE0
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DAFF4: .word 0x021D68C0
+
+ arm_func_start WM_SetWEPKeyEx
+WM_SetWEPKeyEx: ; 0x020DAFF8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl WMi_CheckIdle
+_020DB014: ; 0x020DB014
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x3
+ addhi sp, sp, #0x4
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r7,lr}
+ bxhi lr
+ cmp r6, #0x0
+ beq _020DB060
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, #0x50
+ bl DC_StoreRange
+_020DB060:
+ mov r1, r7
+ mov r0, #0x27
+ bl WMi_SetCallbackTable
+ mov r2, r6
+ mov r3, r4
+ mov r0, #0x27
+ mov r1, #0x3
+ str r5, [sp, #0x0]
+ bl WMi_SendCommand
+_020DB084: ; 0x020DB084
+ cmp r0, #0x0
+ moveq r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start WM_SetWEPKeyEx2
+WM_SetWEPKeyEx2: ; 0x020DB098
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl WMi_CheckIdle
+_020DB0AC: ; 0x020DB0AC
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r5, #0x3
+ movhi r0, #0x6
+ ldmhiia sp!, {r4-r6,lr}
+ bxhi lr
+ cmp r5, #0x0
+ beq _020DB0EC
+ cmp r4, #0x0
+ moveq r0, #0x6
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, #0x50
+ bl DC_StoreRange
+_020DB0EC:
+ mov r1, r6
+ mov r0, #0x14
+ bl WMi_SetCallbackTable
+ mov r2, r5
+ mov r3, r4
+ mov r0, #0x14
+ mov r1, #0x2
+ bl WMi_SendCommand
+_020DB10C: ; 0x020DB10C
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmia sp!, {r4-r6,lr}
+ bx lr
diff --git a/arm9/asm/arm9_itcm.s b/arm9/asm/arm9_itcm.s
new file mode 100644
index 00000000..79c0de28
--- /dev/null
+++ b/arm9/asm/arm9_itcm.s
@@ -0,0 +1,505 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .itcm
+
+ ; OS
+ arm_func_start OS_IrqHandler
+OS_IrqHandler: ; 0x01FF8000
+ stmfd sp!, {lr}
+ mov ip, #0x04000000
+ add ip, ip, #0x210
+ ldr r1, [ip, #-8]
+ cmp r1, #0
+ ldmeqfd sp!, {pc}
+ ldmia ip, {r1, r2}
+ ands r1, r1, r2
+ ldmeqfd sp!, {pc}
+ mov r3, #0x80000000
+_01FF8028:
+ clz r0, r1
+ bics r1, r1, r3, lsr r0
+ bne _01FF8028
+ mov r1, r3, lsr r0
+ str r1, [ip, #0x4]
+ rsbs r0, r0, #0x1f
+ ldr r1, _01FF8050 ; =0x027E0000
+ ldr r0, [r1, r0, lsl #2]
+ ldr lr, _01FF8054 ; =0x01FF70B8
+ bx r0
+_01FF8050: .word OS_IRQTable
+_01FF8054: .word OS_IrqHandler_ThreadSwitch
+
+ arm_func_start OS_IrqHandler_ThreadSwitch
+OS_IrqHandler_ThreadSwitch: ; 01FF8058
+ ldr ip, _01FF81A4
+ mov r3, #0x0
+ ldr ip, [ip]
+ mov r2, #0x1
+ cmp ip, #0x0
+ beq _01FF80A8
+_01FF8070:
+ str r2, [ip, #0x64]
+ str r3, [ip, #0x78]
+ str r3, [ip, #0x7c]
+ ldr r0, [ip, #0x80]
+ str r3, [ip, #0x80]
+ mov ip, r0
+ cmp ip, #0x0
+ bne _01FF8070
+ ldr ip, _01FF81A4
+ str r3, [ip]
+ str r3, [ip, #0x4]
+ ldr ip, _01FF81A8
+ mov r1, #0x1
+ strh r1, [ip]
+_01FF80A8:
+ ldr ip, _01FF81A8
+ ldrh r1, [ip]
+ cmp r1, #0x0
+ ldreq pc, [sp], #0x4
+ mov r1, #0x0
+ strh r1, [ip]
+ mov r3, #0xd2
+ msr CPSR_c, r3
+ add r2, ip, #0x8
+ ldr r1, [r2]
+_01FF80D0:
+ cmp r1, #0x0
+ ldrneh r0, [r1, #0x64]
+ cmpne r0, #0x1
+ ldrne r1, [r1, #0x68]
+ bne _01FF80D0
+ cmp r1, #0x0
+ bne _01FF80F8
+_01FF80EC:
+ mov r3, #0x92
+ msr CPSR_c, r3
+ ldr pc, [sp], #0x4
+_01FF80F8:
+ ldr r0, [ip, #0x4]
+ cmp r1, r0
+ beq _01FF80EC
+ ldr r3, [ip, #0xC]
+ cmp r3, #0x0
+ beq _01FF8120
+ stmdb sp!, {r0, r1, ip}
+ mov lr, pc
+ bx r3
+ ldmia sp!, {r0, r1, ip}
+_01FF8120:
+ str r1, [ip, #0x4]
+ mrs r2, SPSR
+ str r2, [r0, #0x0]!
+ stmdb sp!, {r0, r1}
+ add r0, r0, #0x0
+ add r0, r0, #0x48
+ ldr r1, _01FF81AC
+ blx r1
+ ldmia sp!, {r0, r1}
+ ldmib sp!, {r2, r3}
+ stmib r0!, {r2, r3}
+ ldmib sp!, {r2, r3, ip, lr}
+ stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
+ stmib r0!, {lr}
+ mov r3, #0xd3
+ msr CPSR_c, r3
+ stmib r0!, {sp}
+ stmfd sp!, {r1}
+ add r0, r1, #0x0
+ add r0, r0, #0x48
+ ldr r1, _01FF81B0
+ blx r1
+ ldmfd sp!, {r1}
+ ldr sp, [r1, #0x44]
+ mov r3, #0xd2
+ msr CPSR_c, r3
+ ldr r2, [r1, #0x0]!
+ msr SPSR_fc, r2
+ ldr lr, [r1, #0x40]
+ ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
+ nop
+ stmda sp!, {r0, r1, r2, r3, ip, lr}
+ ldmfd sp!, {pc}
+_01FF81A4: .word OSi_IrqThreadQueue
+_01FF81A8: .word OSi_ThreadInfo
+_01FF81AC: .word CP_SaveContext
+_01FF81B0: .word CP_RestoreContext
+
+ .section .itcm
+ arm_func_start OSi_DoBoot
+OSi_DoBoot: ; 0x01FF81B4
+ mov ip, #0x04000000
+ str ip, [ip, #0x208]
+ ldr r1, _01FF8260
+ add r1, r1, #0x3fc0
+ add r1, r1, #0x3c
+ mov r0, #0x0
+ str r0, [r1]
+ ldr r1, _01FF8264
+_01FF81D4:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _01FF81D4
+ mov r0, #0x100
+ strh r0, [r1]
+ mov r0, #0x0
+ ldr r3, _01FF8268
+ ldr r4, [r3]
+ ldr r1, _01FF826C
+ mov r2, #0x80
+ bl OSi_CpuClear32
+ str r4, [r3]
+ ldr r1, _01FF8270
+ mov r2, #0x18
+ bl OSi_CpuClear32
+ ldr r1, _01FF8274
+ strh r0, [r1]
+ ldr r1, _01FF8278
+ mov r2, #0x64
+ bl OSi_CpuClear32
+ ldr r1, _01FF8264
+_01FF822C:
+ ldrh r0, [r1]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ beq _01FF822C
+ mov r0, #0x0
+ strh r0, [r1]
+ ldr r3, _01FF827C
+ ldr ip, [r3, #0x24]
+ mov lr, ip
+ ldr fp, _01FF8270
+ ldmia fp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl}
+ mov fp, #0x0
+ bx ip
+_01FF8260: .word SDK_AUTOLOAD_DTCM_START
+_01FF8264: .word 0x04000180
+_01FF8268: .word 0x027FFD9C
+_01FF826C: .word 0x027FFD80
+_01FF8270: .word 0x027FFF80
+_01FF8274: .word 0x027FFF98
+_01FF8278: .word 0x027FFF9C
+_01FF827C: .word 0x027FFE00
+
+ arm_func_start OSi_CpuClear32
+OSi_CpuClear32: ; 01FF8280
+ add ip, r1, r2
+_01FF8284:
+ cmp r1, ip
+ stmltia r1!, {r0}
+ blt _01FF8284
+ bx lr
+
+ arm_func_start OSi_ReadCardRom32
+OSi_ReadCardRom32: ; 01FF8294
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r4, _01FF8390
+ ldr r3, _01FF8394
+ ldr r4, [r4]
+ and r3, r0, r3
+ bic r4, r4, #117440512 ; 0x7000000
+ orr sl, r4, #-1593835520 ; 0xa1000000
+ rsb r9, r3, #0
+ ldr r4, _01FF8398
+_01FF82BC:
+ ldr r3, [r4]
+ ands r3, r3, #-2147483648 ; 0x80000000
+ bne _01FF82BC
+ ldr r3, _01FF839C
+ mov r4, #128 ; 0x80
+ cmp r9, r2
+ addge sp, sp, #4
+ strb r4, [r3]
+ add r0, r0, r9
+ ldmgeia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bxge lr
+ ldr r3, _01FF83A0
+ ldr ip, _01FF8398
+ ldr r5, _01FF83A4
+ ldr r4, _01FF83A8
+ mov r7, r0, lsr #8
+ mov r6, #183 ; 0xb7
+ mov lr, #0
+_01FF8304:
+ strb r6, [r5]
+ mov r8, r0, lsr #24
+ strb r8, [r4]
+ ldr r8, _01FF83AC
+ mov fp, r0, lsr #16
+ strb fp, [r8]
+ ldr r8, _01FF83B0
+ strb r7, [r8]
+ ldr r8, _01FF83B4
+ strb r0, [r8]
+ ldr r8, _01FF83B8
+ strb lr, [r8]
+ ldr r8, _01FF83BC
+ strb lr, [r8]
+ ldr r8, _01FF83C0
+ strb lr, [r8]
+ str sl, [ip]
+_01FF8348:
+ ldr r8, [ip]
+ ands fp, r8, #8388608 ; 0x800000
+ beq _01FF836C
+ cmp r9, #0
+ ldr fp, [r3]
+ blt _01FF8368
+ cmp r9, r2
+ strlt fp, [r1, r9]
+_01FF8368:
+ add r9, r9, #4
+_01FF836C:
+ ands r8, r8, #-2147483648 ; 0x80000000
+ bne _01FF8348
+ cmp r9, r2
+ add r7, r7, #2
+ add r0, r0, #512 ; 0x200
+ blt _01FF8304
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_01FF8390: .word 0x027FFE60
+_01FF8394: .word 0x000001FF
+_01FF8398: .word 0x040001A4
+_01FF839C: .word 0x040001A1
+_01FF83A0: .word 0x04100010
+_01FF83A4: .word 0x040001A8
+_01FF83A8: .word 0x040001A9
+_01FF83AC: .word 0x040001AA
+_01FF83B0: .word 0x040001AB
+_01FF83B4: .word 0x040001AC
+_01FF83B8: .word 0x040001AD
+_01FF83BC: .word 0x040001AE
+_01FF83C0: .word 0x040001AF
+
+ arm_func_start OSi_ReloadRomData
+OSi_ReloadRomData: ; 0x01FF83C4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r0, _01FF8484
+ ldr sl, [r0]
+ cmp sl, #32768 ; 0x8000
+ bcc _01FF83EC
+ ldr r1, _01FF8488
+ mov r0, sl
+ mov r2, #352 ; 0x160
+ bl OSi_ReadCardRom32
+_01FF83EC:
+ ldr r5, _01FF848C
+ ldr r4, _01FF8490
+ ldr r3, _01FF8494
+ ldr r2, _01FF8498
+ ldr r1, _01FF849C
+ ldr r9, [r5]
+ ldr r0, _01FF84A0
+ ldr r8, [r4]
+ ldr r7, [r3]
+ ldr r6, [r2]
+ ldr r5, [r1]
+ ldr r4, [r0]
+ bl OS_DisableInterrupts ; 0x1e02b0
+ mov fp, r0
+ bl DC_StoreAll ; 0x1df064
+ bl DC_InvalidateAll ; 0x1df058
+ mov r0, fp
+ bl OS_RestoreInterrupts ; 0x1e02c4
+ bl IC_InvalidateAll ; 0x1df12c
+ bl DC_WaitWriteBufferEmpty ; 0x1df120
+ add r9, r9, sl
+ cmp r9, #32768 ; 0x8000
+ rsbcc r0, r9, #32768 ; 0x8000
+ addcc r8, r8, r0
+ subcc r7, r7, r0
+ movcc r9, #32768 ; 0x8000
+ add r6, r6, sl
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ bl OSi_ReadCardRom32 ; 0x10b234
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl OSi_ReadCardRom32
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_01FF8484: .word 0x027FFC2C
+_01FF8488: .word 0x027FFE00
+_01FF848C: .word 0x027FFE20
+_01FF8490: .word 0x027FFE28
+_01FF8494: .word 0x027FFE2C
+_01FF8498: .word 0x027FFE30
+_01FF849C: .word 0x027FFE38
+_01FF84A0: .word 0x027FFE3C
+
+ arm_func_start OSi_DoResetSystem
+OSi_DoResetSystem: ; 0x01FF84A4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _01FF84DC
+_01FF84B0:
+ ldrh r1, [r0]
+ cmp r1, #0
+ beq _01FF84B0
+ ldr r0, _01FF84E0
+ mov r1, #0
+ strh r1, [r0]
+ bl OSi_ReloadRomData
+ bl OSi_DoBoot
+ add sp, sp, #4
+ ldmfd sp!, {lr}
+ bx lr
+_01FF84DC: .word OSi_IsResetOccurred
+_01FF84E0: .word 0x04000208
+
+ ; MI
+ arm_func_start MIi_DmaSetParams_wait_noInt
+MIi_DmaSetParams_wait_noInt: ; 0x01FF84E4
+ stmdb sp!, {r4, lr}
+ mov ip, #12
+ mul r4, r0, ip
+ add ip, r4, #67108864 ; 0x4000000
+ ldr lr, [pc, #64] ; 0x10b4dc
+ str r1, [ip, #176] ; 0xb0
+ add r4, r4, lr
+ str r2, [r4, #4]
+ str r3, [r4, #8]
+ ldr r1, [lr]
+ cmp r0, #0
+ ldr r0, [lr]
+ moveq r1, #0
+ streq r1, [r4]
+ streq r1, [r4, #4]
+ ldreq r0, _01FF8540
+ ldr r1, _01FF853C
+ streq r0, [r4, #8]
+ ldr r0, [r1]
+ ldr r0, [r1]
+ ldmia sp!, {r4, lr}
+ bx lr
+_01FF853C: .word 0x040000B0
+_01FF8540: .word 0x81400001
+
+ arm_func_start MIi_DmaSetParams_noInt
+MIi_DmaSetParams_noInt: ; 01FF8544
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov ip, #12
+ mul lr, r0, ip
+ ldr r0, _01FF8578
+ add ip, lr, #67108864 ; 0x4000000
+ str r1, [ip, #176] ; 0xb0
+ add r0, lr, r0
+ str r2, [r0, #4]
+ str r3, [r0, #8]
+ add sp, sp, #4
+ ldmfd sp!, {lr}
+ bx lr
+_01FF8578: .word 0x040000B0
+
+ arm_func_start MIi_DmaSetParams_wait
+MIi_DmaSetParams_wait: ; 01FF857C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl OS_DisableInterrupts
+ mov r1, #12
+ mul r3, r7, r1
+ add r1, r3, #67108864 ; 0x4000000
+ ldr r2, _01FF85E8
+ str r6, [r1, #176] ; 0xb0
+ add r3, r3, r2
+ str r5, [r3, #4]
+ str r4, [r3, #8]
+ ldr r1, [r2]
+ cmp r7, #0
+ ldr r1, [r2]
+ moveq r2, #0
+ streq r2, [r3]
+ ldreq r1, _01FF85EC
+ streq r2, [r3, #4]
+ streq r1, [r3, #8]
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_01FF85E8: .word 0x040000B0
+_01FF85EC: .word 0x81400001
+
+ arm_func_start MIi_DmaSetParams
+MIi_DmaSetParams: ; 01FF85F0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl OS_DisableInterrupts
+ mov r1, #12
+ mul r3, r7, r1
+ ldr r1, _01FF863C
+ add r2, r3, #67108864 ; 0x4000000
+ str r6, [r2, #176] ; 0xb0
+ add r1, r3, r1
+ str r5, [r1, #4]
+ str r4, [r1, #8]
+ bl OS_RestoreInterrupts
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_01FF863C: .word 0x040000B0
+
+ arm_func_start MI_SendGXCommand
+MI_SendGXCommand: ; 0x01FF8640
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ movs r8, r2
+ mov sl, r0
+ mov r9, r1
+ addeq sp, sp, #4
+ ldmeqia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bxeq lr
+ mov r3, #0
+ bl MIi_CheckDma0SourceAddress
+ mov r0, #3
+ mul r1, sl, r0
+ ldr r0, [pc, #104] ; 0x10b680
+ add r1, r1, #2
+ add r7, r0, r1, lsl #2
+_01FF867C:
+ ldr r0, [r7]
+ ands r0, r0, #-2147483648 ; 0x80000000
+ bne _01FF867C
+ cmp r8, #0
+ beq _01FF86C8
+ ldr fp, [pc, #76] ; 0x10b684
+ mov r5, #472 ; 0x1d8
+ ldr r4, [pc, #72] ; 0x10b688
+_01FF869C:
+ cmp r8, #472 ; 0x1d8
+ movhi r6, r5
+ movls r6, r8
+ mov r0, sl
+ mov r1, r9
+ mov r2, fp
+ orr r3, r4, r6, lsr #2
+ bl MIi_DmaSetParams
+ subs r8, r8, r6
+ add r9, r9, r6
+ bne _01FF869C
+_01FF86C8:
+ ldr r0, [r7]
+ ands r0, r0, #-2147483648 ; 0x80000000
+ bne _01FF86C8
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_01FF86E0: .word 0x040000B0
+_01FF86E4: .word 0x04000400
+_01FF86E8: .word 0x84400000
diff --git a/asm/arm9overlay.s b/arm9/asm/arm9overlay.s
index 70356c52..70356c52 100644
--- a/asm/arm9overlay.s
+++ b/arm9/asm/arm9overlay.s
diff --git a/asm/crt0.s b/arm9/asm/crt0.s
index cfbab5f0..709bd5f3 100644
--- a/asm/crt0.s
+++ b/arm9/asm/crt0.s
@@ -2,7 +2,6 @@
.include "global.inc"
.text
- .set SDK_IRQ_STACKSIZE, 0x400
arm_func_start _start
_start: ; 0x02000800
@@ -264,7 +263,10 @@ _start_ModuleParams:
.word SDK_STATIC_BSS_END
.word 0x00000000
- .byte 0x31, 0x75, 0x02, 0x03, 0x21, 0x06, 0xC0, 0xDE, 0xDE, 0xC0, 0x06, 0x21
+ .ascii "1u" ; 31 75
+ .byte 0x02, 0x03
+ .word 0xdec00621
+ .byte 0xde, 0xc0, 0x06, 0x21
# strings
.balign 4
diff --git a/asm/filesystem.s b/arm9/asm/filesystem.s
index 75af021d..75af021d 100644
--- a/asm/filesystem.s
+++ b/arm9/asm/filesystem.s
diff --git a/arm9/asm/macros.inc b/arm9/asm/macros.inc
new file mode 100644
index 00000000..156b2b09
--- /dev/null
+++ b/arm9/asm/macros.inc
@@ -0,0 +1 @@
+ .include "asm/macros/function.inc"
diff --git a/arm9/asm/macros/function.inc b/arm9/asm/macros/function.inc
new file mode 100644
index 00000000..6b9e5f40
--- /dev/null
+++ b/arm9/asm/macros/function.inc
@@ -0,0 +1,24 @@
+ .macro arm_func_start name
+ .balign 4, 0
+ .global \name
+ .arm
+ .endm
+
+ .macro arm_func_end name
+ .size \name, .-\name
+ .endm
+
+ .macro thumb_func_start name
+ .balign 4, 0
+ .global \name
+ .thumb
+ .endm
+
+ .macro non_word_aligned_thumb_func_start name
+ .global \name
+ .thumb
+ .endm
+
+ .macro thumb_func_end name
+ .size \name, .-\name
+ .endm
diff --git a/arm9/asm/rom2.s b/arm9/asm/rom2.s
new file mode 100644
index 00000000..0f18b45a
--- /dev/null
+++ b/arm9/asm/rom2.s
@@ -0,0 +1,7 @@
+
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .data
+
+.incbin "baserom.nds", 0xF0710, 0x3F8 ; this does not seem to be code
diff --git a/asm/rom2_2.s b/arm9/asm/rom2_2.s
index 0682a6b0..d5055773 100644
--- a/asm/rom2_2.s
+++ b/arm9/asm/rom2_2.s
@@ -732,31 +732,3 @@ gScriptCmdTable: ; 0x020F355C
.word FUN_0203AFA4
.incbin "baserom.nds", 0xF80A0, 0x12F00
-
- ; Used in autoload
- .global SDK_AUTOLOAD_START
- .global SDK_STATIC_BSS_START
-SDK_AUTOLOAD_START:
-SDK_STATIC_BSS_START: ; 0x02106FA0
-.incbin "baserom.nds", 0x10AFA0, 0x700
-
- .global UNK_021076A0
-UNK_021076A0:
-.incbin "baserom.nds", 0x10B6A0, 0x60
-
- .global SDK_AUTOLOAD_LIST
-SDK_AUTOLOAD_LIST: ; 0x02107700
- .word 0x01FF8000
- .word 0x00000700
- .word 0x00000000
-
- .word 0x027e0000
- .word 0x00000060
- .word 0x00000020
-
- .word 0x02400000
- .word 0x00000000
- .word 0x00000000
-
- .global SDK_AUTOLOAD_LIST_END
-SDK_AUTOLOAD_LIST_END:
diff --git a/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 8468f9f6..d75850de 100644
--- a/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -3669,56 +3669,56 @@ FUN_0203B640: ; 0x0203B640
cmp r7, #0x0
beq _0203B696
lsl r0, r7, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0203B6A4
_0203B696:
lsl r0, r7, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0203B6A4:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x0]
cmp r6, #0x0
beq _0203B6C0
lsl r0, r6, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0203B6CE
_0203B6C0:
lsl r0, r6, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0203B6CE:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x4]
cmp r4, #0x0
beq _0203B6EA
lsl r0, r4, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0203B6F8
_0203B6EA:
lsl r0, r4, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0203B6F8:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x8]
add r0, r5, #0x0
add r0, #0x80
diff --git a/asm/secure.s b/arm9/asm/secure.s
index 18313c93..f9d8f159 100644
--- a/asm/secure.s
+++ b/arm9/asm/secure.s
@@ -11,10 +11,18 @@ FUN_0200019E: ; 0x0200019E
bx lr
thumb_func_end FUN_0200019E
-.incbin "baserom.nds", 0x41A2, 0x450
+.incbin "baserom.nds", 0x41A2, 0x15C
- non_word_aligned_thumb_func_start FUN_020005F2
-FUN_020005F2:
+ non_word_aligned_thumb_func_start FUN_020002FE
+FUN_020002FE: ; 0x020002FE
+ swi 11
+ bx lr
+
+.incbin "baserom.nds", 0x4302, 0x2F0
+
+
+ non_word_aligned_thumb_func_start SVC_WaitByLoop
+SVC_WaitByLoop:
swi 3
bx lr
diff --git a/asm/unk_02000E0C.s b/arm9/asm/unk_02000E0C.s
index 506ff81a..50b0dace 100644
--- a/asm/unk_02000E0C.s
+++ b/arm9/asm/unk_02000E0C.s
@@ -106,7 +106,7 @@ FUN_02000EC8: ; 0x02000EC8
bl FUN_02033678
cmp r0, #0x0
beq _02000EE2
- blx FUN_020D6DAC
+ blx CARD_TryWaitBackupAsync
cmp r0, #0x1
bne _02000EE2
add r0, r4, #0x0
@@ -256,7 +256,7 @@ FUN_02000FE8: ; 0x02000FE8
cmp r0, #0x0
bne _02001064
bl FUN_0201CE04
- blx FUN_020DB7A8
+ blx CTRDG_IsPulledOut
cmp r0, #0x1
bne _02001014
ldr r0, _020010A4 ; =0x02106FA0
@@ -286,7 +286,7 @@ _02001032:
blx CARD_IsPulledOut
cmp r0, #0x0
beq _02001048
- blx FUN_020D5180
+ blx PM_ForceToPowerOff
b _0200105C
_02001048:
ldrh r1, [r4, #0x0]
@@ -312,7 +312,7 @@ _02001064:
bne _02001096
mov r0, #0x2
mov r1, #0x0
- blx FUN_020D526C
+ blx PM_SetBackLight
add sp, #0x8
pop {r3-r7, pc}
_0200107E:
@@ -325,7 +325,7 @@ _0200107E:
ldr r1, _020010A4 ; =0x02106FA0
mov r0, #0x2
ldr r1, [r1, #0x0]
- blx FUN_020D526C
+ blx PM_SetBackLight
_02001096:
add sp, #0x8
pop {r3-r7, pc}
diff --git a/asm/unk_020023C0.s b/arm9/asm/unk_020023C0.s
index ec0f13f1..2024d9d7 100644
--- a/asm/unk_020023C0.s
+++ b/arm9/asm/unk_020023C0.s
@@ -1,8340 +1,8340 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_020023C0
-FUN_020023C0: ; 0x020023C0
- push {r3-r6, lr}
- sub sp, #0xc
- add r4, r0, #0x0
- add r1, r4, #0x0
- add r1, #0x24
- ldrb r1, [r1, #0x0]
- add r6, r4, #0x0
- add r6, #0x1c
- cmp r1, #0x6
- bls _020023D6
- b _02002838
-_020023D6:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_020023E2: ; jump table (using 16-bit offset)
- .short _020023F0 - _020023E2 - 2; case 0
- .short _02002742 - _020023E2 - 2; case 1
- .short _0200275C - _020023E2 - 2; case 2
- .short _02002786 - _020023E2 - 2; case 3
- .short _020027B6 - _020023E2 - 2; case 4
- .short _0200280C - _020023E2 - 2; case 5
- .short _02002818 - _020023E2 - 2; case 6
-_020023F0:
- ldr r0, _02002658 ; =0x021C48B8
- ldr r1, [r0, #0x44]
- mov r0, #0x3
- tst r0, r1
- beq _02002402
- ldrb r0, [r6, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- bne _02002414
-_02002402:
- ldr r0, _0200265C ; =0x021C48F8
- ldrh r0, [r0, #0x22]
- cmp r0, #0x0
- beq _02002432
- ldr r0, _02002660 ; =0x02106FC4
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- beq _02002432
-_02002414:
- add r0, r4, #0x0
- mov r1, #0x0
- add r0, #0x26
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x25
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x19
- beq _02002432
- ldr r1, _02002660 ; =0x02106FC4
- mov r0, #0x40
- ldrb r2, [r1, #0x0]
- orr r0, r2
- strb r0, [r1, #0x0]
-_02002432:
- add r0, r4, #0x0
- add r0, #0x26
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0200248C
- add r0, r4, #0x0
- add r0, #0x25
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x19
- beq _0200248C
- add r0, r4, #0x0
- add r0, #0x26
- ldrb r0, [r0, #0x0]
- sub r1, r0, #0x1
- add r0, r4, #0x0
- add r0, #0x26
- strb r1, [r0, #0x0]
- ldr r0, _02002660 ; =0x02106FC4
- ldrb r0, [r0, #0x0]
- lsl r1, r0, #0x1f
- lsr r1, r1, #0x1f
- beq _02002486
- ldr r1, _02002658 ; =0x021C48B8
- ldr r2, [r1, #0x48]
- mov r1, #0x3
- tst r1, r2
- bne _02002478
- ldr r1, _0200265C ; =0x021C48F8
- ldrh r1, [r1, #0x20]
- cmp r1, #0x0
- beq _02002486
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- beq _02002486
-_02002478:
- ldrb r1, [r6, #0x0]
- mov r0, #0x10
- add r4, #0x26
- orr r0, r1
- strb r0, [r6, #0x0]
- mov r0, #0x0
- strb r0, [r4, #0x0]
-_02002486:
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_0200248C:
- add r0, r4, #0x0
- add r0, #0x25
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r1, r0, #0x19
- add r0, r4, #0x0
- add r0, #0x26
- strb r1, [r0, #0x0]
- ldr r0, [r4, #0x0]
- ldrh r5, [r0, #0x0]
- add r0, r0, #0x2
- str r0, [r4, #0x0]
- mov r0, #0xf1
- lsl r0, r0, #0x8
- cmp r5, r0
- bne _020024B0
- bl ErrorHandling
-_020024B0:
- ldr r0, _02002664 ; =0x0000F0FD
- cmp r5, r0
- bgt _020024DA
- bge _0200250E
- ldr r1, _02002668 ; =0x000025BD
- cmp r5, r1
- bgt _020024D0
- sub r0, r1, #0x1
- cmp r5, r0
- blt _020024CE
- bne _020024C8
- b _020026D8
-_020024C8:
- cmp r5, r1
- bne _020024CE
- b _020026EC
-_020024CE:
- b _02002700
-_020024D0:
- mov r0, #0xe
- lsl r0, r0, #0xc
- cmp r5, r0
- beq _020024F2
- b _02002700
-_020024DA:
- ldr r0, _0200266C ; =0x0000FFFE
- cmp r5, r0
- bgt _020024E4
- beq _0200251A
- b _02002700
-_020024E4:
- add r0, r0, #0x1
- cmp r5, r0
- beq _020024EC
- b _02002700
-_020024EC:
- add sp, #0xc
- mov r0, #0x1
- pop {r3-r6, pc}
-_020024F2:
- ldrb r0, [r4, #0xa]
- mov r1, #0x1
- strb r0, [r4, #0xc]
- ldrb r0, [r4, #0x9]
- bl FUN_02002E4C
- ldrb r1, [r4, #0xf]
- ldrb r2, [r4, #0xd]
- add sp, #0xc
- add r0, r1, r0
- add r0, r2, r0
- strb r0, [r4, #0xd]
- mov r0, #0x2
- pop {r3-r6, pc}
-_0200250E:
- ldr r0, [r4, #0x0]
- add sp, #0xc
- add r0, r0, #0x2
- str r0, [r4, #0x0]
- mov r0, #0x2
- pop {r3-r6, pc}
-_0200251A:
- ldr r0, [r4, #0x0]
- sub r0, r0, #0x2
- str r0, [r4, #0x0]
- bl FUN_0201B8E0
- lsl r0, r0, #0x10
- ldr r1, _02002670 ; =0x0000FE06
- lsr r0, r0, #0x10
- cmp r0, r1
- bgt _02002552
- blt _02002532
- b _02002678
-_02002532:
- mov r1, #0x2
- lsl r1, r1, #0x8
- sub r1, r0, r1
- cmp r1, #0x4
- bhi _0200255C
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02002548: ; jump table (using 16-bit offset)
- .short _020025B4 - _02002548 - 2; case 0
- .short _020025DE - _02002548 - 2; case 1
- .short _02002600 - _02002548 - 2; case 2
- .short _02002618 - _02002548 - 2; case 3
- .short _02002624 - _02002548 - 2; case 4
-_02002552:
- mov r1, #0xff
- lsl r1, r1, #0x8
- cmp r0, r1
- bgt _0200255E
- beq _02002566
-_0200255C:
- b _020026CA
-_0200255E:
- add r1, r1, #0x1
- cmp r0, r1
- beq _02002630
- b _020026CA
-_02002566:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0xff
- bne _02002596
- ldrb r0, [r4, #0x11]
- ldrb r2, [r4, #0x17]
- sub r1, r0, #0x1
- lsr r0, r1, #0x1f
- add r0, r1, r0
- asr r0, r0, #0x1
- add r0, #0x64
- strb r0, [r4, #0x17]
- cmp r2, #0x64
- blo _02002644
- cmp r2, #0x6b
- bhs _02002644
- sub r2, #0x64
- lsl r0, r2, #0x10
- lsr r0, r0, #0x10
- b _0200259E
-_02002596:
- cmp r0, #0x64
- blo _0200259E
- strb r0, [r4, #0x17]
- b _020026CA
-_0200259E:
- lsl r1, r0, #0x1
- add r0, r1, #0x1
- strb r0, [r4, #0x11]
- add r0, r1, #0x2
- strb r0, [r4, #0x13]
- ldrb r0, [r4, #0x11]
- ldrb r1, [r4, #0x12]
- ldrb r2, [r4, #0x13]
- bl FUN_0201C05C
- b _020026CA
-_020025B4:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- lsl r0, r0, #0x10
- lsr r3, r0, #0x10
- ldrb r1, [r4, #0xc]
- ldrb r2, [r4, #0xd]
- add r0, r4, #0x0
- bl FUN_0201C1EC
- add r0, r4, #0x0
- add r0, #0x25
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1f
- beq _020026CA
- ldr r0, [r4, #0x4]
- bl FUN_020191D0
- b _020026CA
-_020025DE:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- add r1, r4, #0x0
- add r1, #0x26
- strb r0, [r1, #0x0]
- ldr r0, [r4, #0x0]
- bl FUN_0201B8B8
- str r0, [r4, #0x0]
- mov r0, #0x6
- add r4, #0x24
- strb r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002600:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- strh r0, [r4, #0x2a]
- ldr r0, [r4, #0x0]
- bl FUN_0201B8B8
- str r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002618:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- strb r0, [r4, #0xc]
- b _020026CA
-_02002624:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- strb r0, [r4, #0xd]
- b _020026CA
-_02002630:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- cmp r0, #0x64
- beq _02002646
- cmp r0, #0xc8
- beq _0200264E
-_02002644:
- b _020026CA
-_02002646:
- mov r0, #0x0
- strh r0, [r4, #0x14]
- strb r0, [r4, #0x16]
- b _020026CA
-_0200264E:
- ldr r0, _02002674 ; =0x0000FFFC
- strh r0, [r4, #0x14]
- mov r0, #0x0
- strb r0, [r4, #0x16]
- b _020026CA
- .balign 4
-_02002658: .word 0x021C48B8
-_0200265C: .word 0x021C48F8
-_02002660: .word 0x02106FC4
-_02002664: .word 0x0000F0FD
-_02002668: .word 0x000025BD
-_0200266C: .word 0x0000FFFE
-_02002670: .word 0x0000FE06
-_02002674: .word 0x0000FFFC
-_02002678:
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_0201B914
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- mov r0, #0xfe
- lsl r0, r0, #0x8
- cmp r1, r0
- beq _020026AE
- add r0, r0, #0x1
- cmp r1, r0
- bne _020026CA
- add r0, r4, #0x0
- mov r1, #0x2
- add r0, #0x24
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0200284C
- ldr r0, [r4, #0x0]
- bl FUN_0201B8B8
- str r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_020026AE:
- add r0, r4, #0x0
- mov r1, #0x3
- add r0, #0x24
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0200284C
- ldr r0, [r4, #0x0]
- bl FUN_0201B8B8
- str r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_020026CA:
- ldr r0, [r4, #0x0]
- bl FUN_0201B8B8
- str r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x2
- pop {r3-r6, pc}
-_020026D8:
- add r0, r4, #0x0
- mov r1, #0x2
- add r0, #0x24
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0200284C
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_020026EC:
- add r0, r4, #0x0
- mov r1, #0x3
- add r0, #0x24
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0200284C
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002700:
- ldrb r0, [r6, #0x0]
- add r1, r5, #0x0
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- bl FUN_02002D94
- add r5, r0, #0x0
- ldrb r0, [r4, #0xc]
- add r2, r5, #0x0
- add r3, r5, #0x0
- str r0, [sp, #0x0]
- ldrb r0, [r4, #0xd]
- add r2, #0x80
- add r3, #0x81
- str r0, [sp, #0x4]
- ldrh r0, [r4, #0x14]
- add r1, r5, #0x0
- str r0, [sp, #0x8]
- ldrb r2, [r2, #0x0]
- ldrb r3, [r3, #0x0]
- ldr r0, [r4, #0x4]
- bl FUN_0201974C
- add r5, #0x80
- ldrb r1, [r5, #0x0]
- ldrb r0, [r4, #0xe]
- ldrb r2, [r4, #0xc]
- add sp, #0xc
- add r0, r1, r0
- add r0, r2, r0
- strb r0, [r4, #0xc]
- mov r0, #0x0
- pop {r3-r6, pc}
-_02002742:
- bl FUN_02002B3C
- cmp r0, #0x0
- beq _02002756
- add r0, r4, #0x0
- bl FUN_02002A00
- mov r0, #0x0
- add r4, #0x24
- strb r0, [r4, #0x0]
-_02002756:
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_0200275C:
- bl FUN_02002B18
- cmp r0, #0x0
- beq _02002780
- add r0, r4, #0x0
- bl FUN_02002A00
- ldrb r1, [r4, #0x12]
- ldr r0, [r4, #0x4]
- bl FUN_02019620
- ldrb r0, [r4, #0xa]
- strb r0, [r4, #0xc]
- ldrb r0, [r4, #0xb]
- strb r0, [r4, #0xd]
- mov r0, #0x0
- add r4, #0x24
- strb r0, [r4, #0x0]
-_02002780:
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002786:
- bl FUN_02002B18
- cmp r0, #0x0
- beq _020027B0
- add r0, r4, #0x0
- bl FUN_02002A00
- ldrb r0, [r4, #0x9]
- mov r1, #0x1
- bl FUN_02002E4C
- ldrb r1, [r4, #0xf]
- add r1, r1, r0
- add r0, r4, #0x0
- add r0, #0x27
- strb r1, [r0, #0x0]
- ldrb r0, [r4, #0xa]
- strb r0, [r4, #0xc]
- mov r0, #0x4
- add r4, #0x24
- strb r0, [r4, #0x0]
-_020027B0:
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_020027B6:
- add r0, #0x27
- ldrb r2, [r0, #0x0]
- cmp r2, #0x0
- beq _02002800
- cmp r2, #0x4
- ldrb r5, [r4, #0x12]
- bge _020027D8
- lsl r3, r5, #0x4
- orr r3, r5
- lsl r3, r3, #0x18
- ldr r0, [r4, #0x4]
- mov r1, #0x0
- lsr r3, r3, #0x18
- bl FUN_0201A8C8
- mov r1, #0x0
- b _020027F2
-_020027D8:
- lsl r3, r5, #0x4
- orr r3, r5
- lsl r3, r3, #0x18
- ldr r0, [r4, #0x4]
- mov r1, #0x0
- mov r2, #0x4
- lsr r3, r3, #0x18
- bl FUN_0201A8C8
- add r0, r4, #0x0
- add r0, #0x27
- ldrb r0, [r0, #0x0]
- sub r1, r0, #0x4
-_020027F2:
- add r0, r4, #0x0
- add r0, #0x27
- strb r1, [r0, #0x0]
- ldr r0, [r4, #0x4]
- bl FUN_020191D0
- b _02002806
-_02002800:
- mov r0, #0x0
- add r4, #0x24
- strb r0, [r4, #0x0]
-_02002806:
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_0200280C:
- mov r0, #0x0
- add r4, #0x24
- strb r0, [r4, #0x0]
- add sp, #0xc
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002818:
- add r0, #0x26
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0200282C
- add r0, r4, #0x0
- add r0, #0x26
- ldrb r0, [r0, #0x0]
- add r4, #0x26
- sub r0, r0, #0x1
- b _02002830
-_0200282C:
- mov r0, #0x0
- add r4, #0x24
-_02002830:
- add sp, #0xc
- strb r0, [r4, #0x0]
- mov r0, #0x3
- pop {r3-r6, pc}
-_02002838:
- mov r0, #0x1
- add sp, #0xc
- pop {r3-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02002840
-FUN_02002840: ; 0x02002840
- ldr r1, _02002848 ; =0x02106FC4
- strh r0, [r1, #0x2]
- bx lr
- nop
-_02002848: .word 0x02106FC4
-
- thumb_func_start FUN_0200284C
-FUN_0200284C: ; 0x0200284C
- ldr r1, _02002874 ; =0x02106FC4
- add r0, #0x1c
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1d
- lsr r1, r1, #0x1f
- beq _02002862
- ldrb r2, [r0, #0x2]
- mov r1, #0xff
- bic r2, r1
- strb r2, [r0, #0x2]
- bx lr
-_02002862:
- ldrb r2, [r0, #0x1]
- mov r1, #0x60
- bic r2, r1
- strb r2, [r0, #0x1]
- ldrb r2, [r0, #0x1]
- mov r1, #0x1f
- bic r2, r1
- strb r2, [r0, #0x1]
- bx lr
- .balign 4
-_02002874: .word 0x02106FC4
-
- thumb_func_start FUN_02002878
-FUN_02002878: ; 0x02002878
- push {r4-r7, lr}
- sub sp, #0x2c
- add r5, r0, #0x0
- ldr r0, _020029F8 ; =0x02106FC4
- add r4, r5, #0x0
- ldrb r0, [r0, #0x0]
- add r4, #0x1c
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x1f
- beq _0200288E
- b _020029F4
-_0200288E:
- ldrb r0, [r4, #0x1]
- lsl r1, r0, #0x1b
- lsr r2, r1, #0x1b
- beq _020028AC
- mov r1, #0x1f
- add r2, #0xff
- bic r0, r1
- lsl r1, r2, #0x18
- lsr r2, r1, #0x18
- mov r1, #0x1f
- and r1, r2
- orr r0, r1
- add sp, #0x2c
- strb r0, [r4, #0x1]
- pop {r4-r7, pc}
-_020028AC:
- ldr r0, [r5, #0x4]
- bl FUN_0201AB08
- str r0, [sp, #0x20]
- ldr r0, [r5, #0x4]
- bl FUN_0201AB14
- str r0, [sp, #0x24]
- ldr r0, [r5, #0x4]
- bl FUN_0201AB18
- str r0, [sp, #0x28]
- ldr r0, [r5, #0x4]
- bl FUN_0201AB0C
- ldr r1, _020029F8 ; =0x02106FC4
- ldrh r6, [r1, #0x2]
- ldr r1, [sp, #0x28]
- add r7, r1, #0x2
- ldr r1, [sp, #0x24]
- add r2, r6, #0x0
- add r0, r1, r0
- str r0, [sp, #0x1c]
- add r0, r0, #0x1
- str r0, [sp, #0x18]
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- add r2, #0x12
- mov r12, r2
- ldrb r2, [r4, #0x1]
- ldr r0, [r5, #0x4]
- ldr r1, [sp, #0x20]
- lsl r2, r2, #0x19
- lsr r3, r2, #0x1e
- ldr r2, _020029FC ; =0x020ECB50
- ldr r0, [r0, #0x0]
- ldrb r2, [r2, r3]
- mov r3, r12
- lsl r2, r2, #0x2
- add r2, r3, r2
- ldr r3, [sp, #0x18]
- lsl r2, r2, #0x10
- lsl r3, r3, #0x18
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #0x20]
- add r0, r0, #0x2
- str r0, [sp, #0x10]
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- ldrb r2, [r4, #0x1]
- add r7, r6, #0x0
- ldr r0, [r5, #0x4]
- lsl r2, r2, #0x19
- lsr r3, r2, #0x1e
- ldr r2, _020029FC ; =0x020ECB50
- add r7, #0x13
- ldrb r2, [r2, r3]
- ldr r3, [sp, #0x10]
- ldr r0, [r0, #0x0]
- lsl r2, r2, #0x2
- add r2, r7, r2
- lsl r2, r2, #0x10
- lsl r3, r3, #0x18
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- ldr r0, [sp, #0x28]
- add r7, r6, #0x0
- add r0, r0, #0x3
- str r0, [sp, #0x14]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- ldrb r2, [r4, #0x1]
- ldr r0, [r5, #0x4]
- add r7, #0x14
- lsl r2, r2, #0x19
- lsr r3, r2, #0x1e
- ldr r2, _020029FC ; =0x020ECB50
- ldr r0, [r0, #0x0]
- ldrb r2, [r2, r3]
- ldr r3, [sp, #0x18]
- ldr r1, [sp, #0x20]
- lsl r2, r2, #0x2
- add r2, r7, r2
- lsl r2, r2, #0x10
- lsl r3, r3, #0x18
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- ldr r0, [sp, #0x14]
- add r6, #0x15
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- ldrb r2, [r4, #0x1]
- ldr r0, [r5, #0x4]
- ldr r1, [sp, #0x20]
- lsl r2, r2, #0x19
- lsr r3, r2, #0x1e
- ldr r2, _020029FC ; =0x020ECB50
- ldr r0, [r0, #0x0]
- ldrb r2, [r2, r3]
- ldr r3, [sp, #0x10]
- lsl r2, r2, #0x2
- add r2, r6, r2
- lsl r2, r2, #0x10
- lsl r3, r3, #0x18
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- ldr r0, [r5, #0x4]
- ldr r1, [sp, #0x20]
- ldr r0, [r0, #0x0]
- bl FUN_02017CD0
- ldrb r1, [r4, #0x1]
- mov r0, #0x1f
- bic r1, r0
- mov r0, #0x8
- orr r0, r1
- strb r0, [r4, #0x1]
- ldrb r2, [r4, #0x1]
- mov r1, #0x60
- add r0, r2, #0x0
- bic r0, r1
- lsl r1, r2, #0x19
- lsr r1, r1, #0x1e
- add r1, r1, #0x1
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- lsl r1, r1, #0x1e
- lsr r1, r1, #0x19
- orr r0, r1
- strb r0, [r4, #0x1]
-_020029F4:
- add sp, #0x2c
- pop {r4-r7, pc}
- .balign 4
-_020029F8: .word 0x02106FC4
-_020029FC: .word 0x020ECB50
-
- thumb_func_start FUN_02002A00
-FUN_02002A00: ; 0x02002A00
- push {r3-r7, lr}
- sub sp, #0x18
- add r5, r0, #0x0
- ldr r0, [r5, #0x4]
- bl FUN_0201AB08
- str r0, [sp, #0x10]
- ldr r0, [r5, #0x4]
- bl FUN_0201AB14
- str r0, [sp, #0x14]
- ldr r0, [r5, #0x4]
- bl FUN_0201AB18
- add r6, r0, #0x0
- ldr r0, [r5, #0x4]
- bl FUN_0201AB0C
- ldr r1, _02002A90 ; =0x02106FC4
- add r7, r6, #0x2
- ldrh r4, [r1, #0x2]
- ldr r1, [sp, #0x14]
- add r6, r1, r0
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- mov r0, #0x2
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- ldr r0, [r5, #0x4]
- add r2, r4, #0x0
- add r2, #0xa
- add r3, r6, #0x1
- lsl r2, r2, #0x10
- lsl r3, r3, #0x18
- ldr r0, [r0, #0x0]
- ldr r1, [sp, #0x10]
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x4]
- mov r0, #0x2
- str r0, [sp, #0x8]
- mov r0, #0x10
- str r0, [sp, #0xc]
- ldr r0, [r5, #0x4]
- add r4, #0xb
- add r3, r6, #0x2
- lsl r2, r4, #0x10
- lsl r3, r3, #0x18
- ldr r0, [r0, #0x0]
- ldr r1, [sp, #0x10]
- lsr r2, r2, #0x10
- lsr r3, r3, #0x18
- bl FUN_02018540
- ldr r0, [r5, #0x4]
- ldr r1, [sp, #0x10]
- ldr r0, [r0, #0x0]
- bl FUN_02017CD0
- add sp, #0x18
- pop {r3-r7, pc}
- nop
-_02002A90: .word 0x02106FC4
-
- thumb_func_start FUN_02002A94
-FUN_02002A94: ; 0x02002A94
- push {r3, lr}
- ldr r0, _02002ACC ; =0x021C48B8
- ldr r1, [r0, #0x48]
- mov r0, #0x3
- tst r0, r1
- bne _02002AB2
- ldr r0, _02002AD0 ; =0x021C48F8
- ldrh r0, [r0, #0x20]
- cmp r0, #0x0
- beq _02002AC6
- ldr r0, _02002AD4 ; =0x02106FC4
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- beq _02002AC6
-_02002AB2:
- ldr r0, _02002AD8 ; =0x000005DC
- bl FUN_020054C8
- ldr r1, _02002AD4 ; =0x02106FC4
- mov r0, #0x80
- ldrb r2, [r1, #0x0]
- orr r0, r2
- strb r0, [r1, #0x0]
- mov r0, #0x1
- pop {r3, pc}
-_02002AC6:
- mov r0, #0x0
- pop {r3, pc}
- nop
-_02002ACC: .word 0x021C48B8
-_02002AD0: .word 0x021C48F8
-_02002AD4: .word 0x02106FC4
-_02002AD8: .word 0x000005DC
-
- thumb_func_start FUN_02002ADC
-FUN_02002ADC: ; 0x02002ADC
- push {r4, lr}
- add r2, r0, #0x0
- add r2, #0x1c
- ldrb r1, [r2, #0x2]
- add r4, r1, #0x0
- cmp r4, #0x64
- bne _02002AEE
- mov r0, #0x1
- pop {r4, pc}
-_02002AEE:
- mov r3, #0xff
- bic r1, r3
- add r3, r4, #0x1
- lsl r3, r3, #0x18
- lsr r3, r3, #0x18
- lsl r3, r3, #0x18
- lsr r3, r3, #0x18
- orr r1, r3
- strb r1, [r2, #0x2]
- ldr r1, _02002B14 ; =0x02106FC4
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1a
- lsr r1, r1, #0x1f
- beq _02002B10
- bl FUN_02002A94
- pop {r4, pc}
-_02002B10:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
-_02002B14: .word 0x02106FC4
-
- thumb_func_start FUN_02002B18
-FUN_02002B18: ; 0x02002B18
- push {r4, lr}
- ldr r1, _02002B38 ; =0x02106FC4
- add r4, r0, #0x0
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1d
- lsr r1, r1, #0x1f
- beq _02002B2C
- bl FUN_02002ADC
- pop {r4, pc}
-_02002B2C:
- bl FUN_02002878
- add r0, r4, #0x0
- bl FUN_02002A94
- pop {r4, pc}
- .balign 4
-_02002B38: .word 0x02106FC4
-
- thumb_func_start FUN_02002B3C
-FUN_02002B3C: ; 0x02002B3C
- push {r3, lr}
- ldr r1, _02002B5C ; =0x02106FC4
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1d
- lsr r1, r1, #0x1f
- beq _02002B52
- bl FUN_02002ADC
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- pop {r3, pc}
-_02002B52:
- bl FUN_02002A94
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- pop {r3, pc}
- .balign 4
-_02002B5C: .word 0x02106FC4
-
- thumb_func_start FUN_02002B60
-FUN_02002B60: ; 0x02002B60
- ldr r2, _02002B78 ; =0x02106FC4
- mov r1, #0x1
- ldrb r3, [r2, #0x0]
- lsl r0, r0, #0x18
- bic r3, r1
- lsr r1, r0, #0x18
- mov r0, #0x1
- and r0, r1
- orr r0, r3
- strb r0, [r2, #0x0]
- bx lr
- nop
-_02002B78: .word 0x02106FC4
-
- thumb_func_start FUN_02002B7C
-FUN_02002B7C: ; 0x02002B7C
- push {r3-r4}
- ldr r1, _02002BB4 ; =0x02106FC4
- mov r3, #0x4
- ldrb r2, [r1, #0x0]
- mov r4, #0x1
- bic r2, r3
- add r3, r0, #0x0
- and r3, r4
- lsl r3, r3, #0x18
- lsr r3, r3, #0x18
- lsl r3, r3, #0x1f
- lsr r3, r3, #0x1d
- orr r2, r3
- asr r0, r0, #0x1
- and r0, r4
- strb r2, [r1, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- lsl r0, r0, #0x1f
- ldrb r2, [r1, #0x0]
- mov r3, #0x20
- lsr r0, r0, #0x1a
- bic r2, r3
- orr r0, r2
- strb r0, [r1, #0x0]
- pop {r3-r4}
- bx lr
- nop
-_02002BB4: .word 0x02106FC4
-
- thumb_func_start FUN_02002BB8
-FUN_02002BB8: ; 0x02002BB8
- ldr r2, _02002BD0 ; =0x02106FC4
- lsl r0, r0, #0x18
- ldrb r3, [r2, #0x0]
- lsr r0, r0, #0x18
- mov r1, #0x10
- lsl r0, r0, #0x1f
- bic r3, r1
- lsr r0, r0, #0x1b
- orr r0, r3
- strb r0, [r2, #0x0]
- bx lr
- nop
-_02002BD0: .word 0x02106FC4
-
- thumb_func_start FUN_02002BD4
-FUN_02002BD4: ; 0x02002BD4
- ldr r0, _02002BE0 ; =0x02106FC4
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1f
- bx lr
- nop
-_02002BE0: .word 0x02106FC4
-
- thumb_func_start FUN_02002BE4
-FUN_02002BE4: ; 0x02002BE4
- ldr r1, _02002BF0 ; =0x02106FC4
- mov r0, #0x40
- ldrb r2, [r1, #0x0]
- bic r2, r0
- strb r2, [r1, #0x0]
- bx lr
- .balign 4
-_02002BF0: .word 0x02106FC4
-
- thumb_func_start FUN_02002BF4
-FUN_02002BF4: ; 0x02002BF4
- ldr r0, _02002C00 ; =0x02106FC4
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x1f
- bx lr
- nop
-_02002C00: .word 0x02106FC4
-
- thumb_func_start FUN_02002C04
-FUN_02002C04: ; 0x02002C04
- ldr r1, _02002C10 ; =0x02106FC4
- mov r0, #0x80
- ldrb r2, [r1, #0x0]
- bic r2, r0
- strb r2, [r1, #0x0]
- bx lr
- .balign 4
-_02002C10: .word 0x02106FC4
-
- thumb_func_start FUN_02002C14
-FUN_02002C14: ; 0x02002C14
- push {r4, lr}
- ldr r0, _02002C44 ; =0x02106FCC
- ldr r4, _02002C48 ; =0x02106FC8
- mov r1, #0x0
- str r0, [r4, #0x0]
- add r2, r1, #0x0
- add r0, r1, #0x0
-_02002C22:
- ldr r3, [r4, #0x0]
- add r1, r1, #0x1
- add r3, r3, r2
- add r3, #0x84
- str r0, [r3, #0x0]
- ldr r3, [r4, #0x0]
- add r3, r3, r2
- add r3, #0x94
- add r2, r2, #0x4
- str r0, [r3, #0x0]
- cmp r1, #0x4
- blo _02002C22
- ldr r0, _02002C4C ; =0x020ECB64
- bl FUN_0201BCBC
- pop {r4, pc}
- nop
-_02002C44: .word 0x02106FCC
-_02002C48: .word 0x02106FC8
-_02002C4C: .word 0x020ECB64
-
- thumb_func_start FUN_02002C50
-FUN_02002C50: ; 0x02002C50
- push {r3-r4, lr}
- sub sp, #0x4
- str r1, [sp, #0x0]
- lsl r4, r0, #0x2
- ldr r1, _02002C78 ; =0x020ECB54
- ldr r3, _02002C7C ; =0x020ECB56
- ldrh r1, [r1, r4]
- ldrh r3, [r3, r4]
- mov r0, #0xe
- mov r2, #0x1
- bl FUN_02021590
- ldr r1, _02002C80 ; =0x02106FC8
- ldr r1, [r1, #0x0]
- add r1, r1, r4
- add r1, #0x94
- str r0, [r1, #0x0]
- add sp, #0x4
- pop {r3-r4, pc}
- nop
-_02002C78: .word 0x020ECB54
-_02002C7C: .word 0x020ECB56
-_02002C80: .word 0x02106FC8
-
- thumb_func_start FUN_02002C84
-FUN_02002C84: ; 0x02002C84
- push {r3-r5, lr}
- add r4, r0, #0x0
- add r5, r1, #0x0
- cmp r4, #0x4
- blt _02002C92
- bl ErrorHandling
-_02002C92:
- ldr r0, _02002CBC ; =0x02106FC8
- lsl r4, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002CA6
- bl ErrorHandling
-_02002CA6:
- ldr r0, _02002CBC ; =0x02106FC8
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- add r2, r5, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020215E0
- pop {r3-r5, pc}
- nop
-_02002CBC: .word 0x02106FC8
-
- thumb_func_start FUN_02002CC0
-FUN_02002CC0: ; 0x02002CC0
- push {r4, lr}
- add r4, r0, #0x0
- cmp r4, #0x4
- blt _02002CCC
- bl ErrorHandling
-_02002CCC:
- ldr r0, _02002CF4 ; =0x02106FC8
- lsl r4, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002CE0
- bl ErrorHandling
-_02002CE0:
- ldr r0, _02002CF4 ; =0x02106FC8
- mov r1, #0x1
- ldr r0, [r0, #0x0]
- mov r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020215E0
- pop {r4, pc}
- .balign 4
-_02002CF4: .word 0x02106FC8
-
- thumb_func_start FUN_02002CF8
-FUN_02002CF8: ; 0x02002CF8
- push {r3-r7, lr}
- add r4, r0, #0x0
- cmp r4, #0x4
- blt _02002D04
- bl ErrorHandling
-_02002D04:
- ldr r0, _02002D8C ; =0x02106FC8
- lsl r6, r4, #0x2
- ldr r7, [r0, #0x0]
- add r0, r7, r6
- add r0, #0x84
- ldr r0, [r0, #0x0]
- mov r12, r0
- cmp r0, #0x0
- beq _02002D68
- ldr r2, _02002D90 ; =0x020ECB54
- mov r1, #0x0
- ldrh r0, [r2, r6]
- add r3, r7, #0x0
-_02002D1E:
- cmp r1, r4
- beq _02002D3E
- ldrh r5, [r2, #0x0]
- cmp r5, r0
- bne _02002D3E
- add r5, r3, #0x0
- add r5, #0x94
- ldr r5, [r5, #0x0]
- cmp r5, #0x0
- beq _02002D3E
- lsl r0, r1, #0x2
- add r2, r7, r0
- add r2, #0x84
- mov r0, r12
- str r0, [r2, #0x0]
- b _02002D48
-_02002D3E:
- add r1, r1, #0x1
- add r2, r2, #0x4
- add r3, r3, #0x4
- cmp r1, #0x4
- blo _02002D1E
-_02002D48:
- cmp r1, #0x4
- bne _02002D68
- ldr r0, _02002D8C ; =0x02106FC8
- lsl r5, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r5
- add r0, #0x84
- ldr r0, [r0, #0x0]
- bl FUN_02016A18
- ldr r0, _02002D8C ; =0x02106FC8
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r5
- add r0, #0x84
- str r1, [r0, #0x0]
-_02002D68:
- ldr r0, _02002D8C ; =0x02106FC8
- ldr r0, [r0, #0x0]
- add r0, r0, r6
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _02002D88
- bl FUN_020215C8
- ldr r0, _02002D8C ; =0x02106FC8
- mov r2, #0x0
- ldr r1, [r0, #0x0]
- lsl r0, r4, #0x2
- add r0, r1, r0
- add r0, #0x94
- str r2, [r0, #0x0]
-_02002D88:
- pop {r3-r7, pc}
- nop
-_02002D8C: .word 0x02106FC8
-_02002D90: .word 0x020ECB54
-
- thumb_func_start FUN_02002D94
-FUN_02002D94: ; 0x02002D94
- push {r3, lr}
- ldr r2, _02002DAC ; =0x02106FC8
- lsl r0, r0, #0x2
- ldr r2, [r2, #0x0]
- add r0, r2, r0
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_02021750
- ldr r0, _02002DAC ; =0x02106FC8
- ldr r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-_02002DAC: .word 0x02106FC8
-
- thumb_func_start FUN_02002DB0
-FUN_02002DB0: ; 0x02002DB0
- push {r4, lr}
- add r3, r1, #0x0
- add r3, #0x1c
- ldrb r2, [r3, #0x1]
- lsl r2, r2, #0x18
- lsr r2, r2, #0x1f
- bne _02002DD8
- ldrb r2, [r3, #0x0]
- mov r4, #0xf
- lsl r0, r0, #0x18
- bic r2, r4
- lsr r4, r0, #0x18
- mov r0, #0xf
- and r0, r4
- orr r0, r2
- strb r0, [r3, #0x0]
- ldrb r2, [r3, #0x1]
- mov r0, #0x80
- orr r0, r2
- strb r0, [r3, #0x1]
-_02002DD8:
- add r0, r1, #0x0
- bl FUN_020023C0
- pop {r4, pc}
-
- thumb_func_start FUN_02002DE0
-FUN_02002DE0: ; 0x02002DE0
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002E10 ; =0x02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002DFA
- bl ErrorHandling
-_02002DFA:
- ldr r0, _02002E10 ; =0x02106FC8
- add r1, r5, #0x0
- ldr r0, [r0, #0x0]
- add r2, r6, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020218D8
- pop {r4-r6, pc}
- nop
-_02002E10: .word 0x02106FC8
-
- thumb_func_start FUN_02002E14
-FUN_02002E14: ; 0x02002E14
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002E48 ; =0x02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002E2E
- bl ErrorHandling
-_02002E2E:
- add r0, r5, #0x0
- bl FUN_02021F2C
- add r1, r0, #0x0
- ldr r0, _02002E48 ; =0x02106FC8
- add r2, r6, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020218D8
- pop {r4-r6, pc}
- .balign 4
-_02002E48: .word 0x02106FC8
-
- thumb_func_start FUN_02002E4C
-FUN_02002E4C: ; 0x02002E4C
- mov r2, #0x0
- cmp r1, #0x7
- bhi _02002EAC
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02002E5E: ; jump table (using 16-bit offset)
- .short _02002E6E - _02002E5E - 2; case 0
- .short _02002E76 - _02002E5E - 2; case 1
- .short _02002E7E - _02002E5E - 2; case 2
- .short _02002E86 - _02002E5E - 2; case 3
- .short _02002E8E - _02002E5E - 2; case 4
- .short _02002E96 - _02002E5E - 2; case 5
- .short _02002E9E - _02002E5E - 2; case 6
- .short _02002EA6 - _02002E5E - 2; case 7
-_02002E6E:
- lsl r1, r0, #0x3
- ldr r0, _02002EB0 ; =0x020ECB64
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E76:
- lsl r1, r0, #0x3
- ldr r0, _02002EB4 ; =0x020ECB65
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E7E:
- lsl r1, r0, #0x3
- ldr r0, _02002EB8 ; =0x020ECB66
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E86:
- lsl r1, r0, #0x3
- ldr r0, _02002EBC ; =0x020ECB67
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E8E:
- lsl r1, r0, #0x3
- ldr r0, _02002EC0 ; =0x020ECB68
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E96:
- lsl r1, r0, #0x3
- ldr r0, _02002EC4 ; =0x020ECB69
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E9E:
- lsl r1, r0, #0x3
- ldr r0, _02002EC8 ; =0x020ECB6A
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002EA6:
- lsl r1, r0, #0x3
- ldr r0, _02002ECC ; =0x020ECB6B
- ldrb r2, [r0, r1]
-_02002EAC:
- add r0, r2, #0x0
- bx lr
- .balign 4
-_02002EB0: .word 0x020ECB64
-_02002EB4: .word 0x020ECB65
-_02002EB8: .word 0x020ECB66
-_02002EBC: .word 0x020ECB67
-_02002EC0: .word 0x020ECB68
-_02002EC4: .word 0x020ECB69
-_02002EC8: .word 0x020ECB6A
-_02002ECC: .word 0x020ECB6B
-
- thumb_func_start FUN_02002ED0
-FUN_02002ED0: ; 0x02002ED0
- push {r4, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x20
- str r0, [sp, #0x0]
- add r3, r1, #0x0
- str r2, [sp, #0x4]
- mov r0, #0xe
- mov r1, #0x6
- add r2, r4, #0x0
- bl FUN_02006930
- add sp, #0x8
- pop {r4, pc}
-
- thumb_func_start FUN_02002EEC
-FUN_02002EEC: ; 0x02002EEC
- push {r4, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x20
- str r0, [sp, #0x0]
- add r3, r1, #0x0
- str r2, [sp, #0x4]
- mov r0, #0xe
- mov r1, #0x7
- add r2, r4, #0x0
- bl FUN_02006930
- add sp, #0x8
- pop {r4, pc}
-
- thumb_func_start FUN_02002F08
-FUN_02002F08: ; 0x02002F08
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002F3C ; =0x02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002F22
- bl ErrorHandling
-_02002F22:
- add r0, r5, #0x0
- bl FUN_02021F2C
- add r1, r0, #0x0
- ldr r0, _02002F3C ; =0x02106FC8
- add r2, r6, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_02021934
- pop {r4-r6, pc}
- .balign 4
-_02002F3C: .word 0x02106FC8
-
- thumb_func_start FUN_02002F40
-FUN_02002F40: ; 0x02002F40
- push {r4, lr}
- add r4, r3, #0x0
- bl FUN_02002E14
- cmp r0, r4
- bhs _02002F52
- sub r0, r4, r0
- lsr r0, r0, #0x1
- pop {r4, pc}
-_02002F52:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02002F58
-FUN_02002F58: ; 0x02002F58
- push {r3-r7, lr}
- ldrh r2, [r0, #0x0]
- ldr r1, _02002F8C ; =0x0000FFFF
- mov r5, #0x1
- cmp r2, r1
- beq _02002F88
- mov r6, #0xe
- lsl r6, r6, #0xc
- add r7, r1, #0x0
- sub r4, r1, #0x1
-_02002F6C:
- cmp r2, r4
- bne _02002F76
- bl FUN_0201B8B8
- b _02002F82
-_02002F76:
- cmp r2, r6
- bne _02002F80
- add r5, r5, #0x1
- add r0, r0, #0x2
- b _02002F82
-_02002F80:
- add r0, r0, #0x2
-_02002F82:
- ldrh r2, [r0, #0x0]
- cmp r2, r7
- bne _02002F6C
-_02002F88:
- add r0, r5, #0x0
- pop {r3-r7, pc}
- .balign 4
-_02002F8C: .word 0x0000FFFF
-
- thumb_func_start FUN_02002F90
-FUN_02002F90: ; 0x02002F90
- push {r3, lr}
- bl FUN_02021F2C
- bl FUN_02002F58
- pop {r3, pc}
-
- thumb_func_start FUN_02002F9C
-FUN_02002F9C: ; 0x02002F9C
- push {r3-r5, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002FCC ; =0x02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002FB4
- bl ErrorHandling
-_02002FB4:
- add r0, r5, #0x0
- bl FUN_02021F2C
- add r1, r0, #0x0
- ldr r0, _02002FCC ; =0x02106FC8
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_0202199C
- pop {r3-r5, pc}
- .balign 4
-_02002FCC: .word 0x02106FC8
-
- thumb_func_start FUN_02002FD0
-FUN_02002FD0: ; 0x02002FD0
- push {r4, lr}
- mov r1, #0x12
- lsl r1, r1, #0x4
- bl FUN_02016998
- mov r2, #0x12
- mov r1, #0x0
- lsl r2, r2, #0x4
- add r4, r0, #0x0
- blx MI_CpuFill8
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02002FEC
-FUN_02002FEC: ; 0x02002FEC
- ldr r3, _02002FF0 ; =FUN_02016A18
- bx r3
- .balign 4
-_02002FF0: .word FUN_02016A18
-
- thumb_func_start FUN_02002FF4
-FUN_02002FF4: ; 0x02002FF4
- push {r3-r4}
- mov r4, #0x14
- mul r4, r1
- str r2, [r0, r4]
- add r1, r0, r4
- ldr r0, [sp, #0x8]
- str r3, [r1, #0x4]
- str r0, [r1, #0x8]
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_02003008
-FUN_02003008: ; 0x02003008
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r2, #0x0
- add r5, r0, #0x0
- add r6, r1, #0x0
- str r3, [sp, #0x4]
- add r0, r3, #0x0
- add r1, r4, #0x0
- bl FUN_02016998
- add r7, r0, #0x0
- ldr r0, [sp, #0x4]
- add r1, r4, #0x0
- bl FUN_02016998
- add r3, r0, #0x0
- add r0, r5, #0x0
- add r1, r6, #0x0
- add r2, r7, #0x0
- str r4, [sp, #0x0]
- bl FUN_02002FF4
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003038
-FUN_02003038: ; 0x02003038
- push {r3-r5, lr}
- add r4, r0, #0x0
- mov r0, #0x14
- add r5, r1, #0x0
- mul r5, r0
- ldr r0, [r4, r5]
- bl FUN_02016A18
- add r0, r4, r5
- ldr r0, [r0, #0x4]
- bl FUN_02016A18
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02003054
-FUN_02003054: ; 0x02003054
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r0, sp, #0x8
- ldrh r7, [r0, #0x10]
- add r6, r2, #0x0
- mov r0, #0x14
- mul r6, r0
- str r1, [sp, #0x0]
- add r0, r1, #0x0
- ldr r1, [r5, r6]
- lsl r4, r3, #0x1
- add r1, r1, r4
- add r2, r7, #0x0
- blx MIi_CpuCopy16
- add r1, r5, r6
- ldr r1, [r1, #0x4]
- ldr r0, [sp, #0x0]
- add r1, r1, r4
- add r2, r7, #0x0
- blx MIi_CpuCopy16
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003084
-FUN_02003084: ; 0x02003084
- push {r4-r6, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- add r0, r1, #0x0
- add r1, r2, #0x0
- add r2, sp, #0x4
- ldr r4, [sp, #0x1c]
- bl FUN_02006C08
- add r6, r0, #0x0
- bne _0200309E
- bl ErrorHandling
-_0200309E:
- cmp r4, #0x0
- bne _020030A6
- ldr r0, [sp, #0x4]
- ldr r4, [r0, #0x8]
-_020030A6:
- add r0, sp, #0x8
- ldrh r0, [r0, #0x18]
- ldr r2, [sp, #0x18]
- mov r1, #0x14
- mul r1, r2
- add r1, r5, r1
- lsl r0, r0, #0x1
- ldr r1, [r1, #0x8]
- add r0, r4, r0
- cmp r0, r1
- bls _020030C0
- bl ErrorHandling
-_020030C0:
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- add r3, sp, #0x8
- ldr r2, [r1, #0xc]
- ldrh r1, [r3, #0x1c]
- ldrh r3, [r3, #0x18]
- add r0, r5, #0x0
- lsl r1, r1, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x18]
- bl FUN_02003054
- add r0, r6, #0x0
- bl FUN_02016A18
- add sp, #0x8
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_020030E8
-FUN_020030E8: ; 0x020030E8
- push {r4, lr}
- sub sp, #0x10
- ldr r4, [sp, #0x18]
- str r4, [sp, #0x0]
- ldr r4, [sp, #0x1c]
- str r4, [sp, #0x4]
- add r4, sp, #0x8
- ldrh r4, [r4, #0x18]
- str r4, [sp, #0x8]
- mov r4, #0x0
- str r4, [sp, #0xc]
- bl FUN_02003084
- add sp, #0x10
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02003108
-FUN_02003108: ; 0x02003108
- push {r3-r7, lr}
- add r4, r1, #0x0
- mov r1, #0x14
- add r6, r0, #0x0
- mul r1, r4
- add r5, r2, #0x0
- add r1, r6, r1
- add r7, r3, #0x0
- lsl r0, r5, #0x1
- ldr r1, [r1, #0x8]
- add r0, r7, r0
- cmp r0, r1
- bls _02003126
- bl ErrorHandling
-_02003126:
- cmp r4, #0x3
- bhi _0200315E
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02003136: ; jump table (using 16-bit offset)
- .short _0200313E - _02003136 - 2; case 0
- .short _02003146 - _02003136 - 2; case 1
- .short _0200314E - _02003136 - 2; case 2
- .short _02003156 - _02003136 - 2; case 3
-_0200313E:
- bl FUN_020222E8
- add r1, r0, #0x0
- b _02003164
-_02003146:
- bl FUN_020222F8
- add r1, r0, #0x0
- b _02003164
-_0200314E:
- bl FUN_02022308
- add r1, r0, #0x0
- b _02003164
-_02003156:
- bl FUN_02022310
- add r1, r0, #0x0
- b _02003164
-_0200315E:
- bl ErrorHandling
- pop {r3-r7, pc}
-_02003164:
- lsl r0, r7, #0x10
- lsr r0, r0, #0x10
- lsl r2, r5, #0x1
- str r0, [sp, #0x0]
- add r1, r1, r2
- add r0, r6, #0x0
- add r2, r4, #0x0
- add r3, r5, #0x0
- bl FUN_02003054
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0200317C
-FUN_0200317C: ; 0x0200317C
- push {r3-r5, lr}
- add r4, r2, #0x0
- add r5, r3, #0x0
- add r2, sp, #0x0
- add r3, r4, #0x0
- bl FUN_02006C08
- add r4, r0, #0x0
- bne _02003192
- bl ErrorHandling
-_02003192:
- cmp r5, #0x0
- bne _0200319A
- ldr r0, [sp, #0x0]
- ldr r5, [r0, #0x8]
-_0200319A:
- ldr r0, [sp, #0x0]
- add r2, r5, #0x0
- ldr r1, [r0, #0xc]
- add r0, sp, #0x0
- ldrh r0, [r0, #0x10]
- lsl r0, r0, #0x1
- add r0, r1, r0
- ldr r1, [sp, #0x14]
- blx MIi_CpuCopy16
- add r0, r4, #0x0
- bl FUN_02016A18
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020031B8
-FUN_020031B8: ; 0x020031B8
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, sp, #0x10
- add r5, r0, #0x0
- add r0, r1, #0x0
- ldrh r1, [r4, #0x14]
- add r6, r3, #0x0
- str r1, [sp, #0x0]
- ldrh r1, [r4, #0x10]
- lsl r4, r2, #0x1
- ldr r2, [sp, #0x0]
- lsl r7, r1, #0x1
- mov r1, #0x14
- mul r6, r1
- mul r1, r0
- ldr r0, [r5, r1]
- str r1, [sp, #0x4]
- ldr r1, [r5, r6]
- add r0, r0, r4
- add r1, r1, r7
- blx MIi_CpuCopy16
- ldr r0, [sp, #0x4]
- add r1, r5, r6
- ldr r0, [r5, r0]
- ldr r1, [r1, #0x4]
- ldr r2, [sp, #0x0]
- add r0, r0, r4
- add r1, r1, r7
- blx MIi_CpuCopy16
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020031FC
-FUN_020031FC: ; 0x020031FC
- mov r2, #0x14
- mul r2, r1
- ldr r0, [r0, r2]
- bx lr
-
- thumb_func_start FUN_02003204
-FUN_02003204: ; 0x02003204
- mov r2, #0x14
- mul r2, r1
- add r0, r0, r2
- ldr r0, [r0, #0x4]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02003210
-FUN_02003210: ; 0x02003210
- push {r0-r3}
- push {r3-r7, lr}
- sub sp, #0x10
- str r3, [sp, #0x8]
- add r5, r0, #0x0
- ldr r0, [sp, #0x38]
- mov r6, #0x0
- str r0, [sp, #0x38]
- ldr r0, [sp, #0x3c]
- add r7, r1, #0x0
- str r0, [sp, #0x3c]
- ldr r0, [sp, #0x40]
- add r4, r6, #0x0
- str r0, [sp, #0x40]
- add r0, sp, #0x28
- ldrh r0, [r0, #0x8]
- str r0, [sp, #0xc]
-_02003232:
- add r0, r7, #0x0
- add r1, r4, #0x0
- bl FUN_02003314
- cmp r0, #0x1
- bne _020032A6
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r0, [r5, r0]
- add r1, r4, #0x0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x0
- bne _020032A6
- mov r0, #0x14
- add r6, r4, #0x0
- mul r6, r0
- add r0, r4, #0x0
- add r1, r5, r6
- add r2, sp, #0x30
- bl FUN_02003368
- ldr r0, [sp, #0x3c]
- add r1, sp, #0x28
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x40]
- str r0, [sp, #0x4]
- add r0, r5, r6
- ldrh r1, [r1, #0x8]
- ldr r2, [sp, #0x8]
- ldr r3, [sp, #0x38]
- add r0, #0xc
- bl FUN_020033A4
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02003328
- cmp r4, #0x4
- blo _02003294
- mov r2, #0x1
- add r0, r5, #0x0
- add r1, r4, #0x0
- lsl r2, r2, #0x8
- bl FUN_0200359C
- b _0200329E
-_02003294:
- add r0, r5, #0x0
- add r1, r4, #0x0
- mov r2, #0x10
- bl FUN_0200359C
-_0200329E:
- ldr r1, [sp, #0xc]
- add r0, sp, #0x28
- strh r1, [r0, #0x8]
- mov r6, #0x1
-_020032A6:
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0xe
- blo _02003232
- cmp r6, #0x1
- bne _02003300
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r2, [r5, r0]
- ldr r1, _0200330C ; =0xFFFF0003
- and r1, r2
- lsl r2, r2, #0x10
- lsr r2, r2, #0x12
- orr r2, r7
- lsl r2, r2, #0x12
- lsr r2, r2, #0x10
- orr r1, r2
- strh r1, [r5, r0]
- add r1, r0, #0x2
- ldrh r1, [r5, r1]
- lsl r1, r1, #0x11
- lsr r1, r1, #0x1f
- bne _02003300
- add r1, r0, #0x2
- ldrh r2, [r5, r1]
- mov r1, #0x1
- lsl r1, r1, #0xe
- orr r2, r1
- add r1, r0, #0x2
- strh r2, [r5, r1]
- ldrh r2, [r5, r0]
- mov r1, #0x3
- bic r2, r1
- mov r1, #0x1
- orr r1, r2
- strh r1, [r5, r0]
- mov r2, #0x0
- add r0, r0, #0x4
- strb r2, [r5, r0]
- ldr r0, _02003310 ; =FUN_02003464
- add r1, r5, #0x0
- sub r2, r2, #0x2
- bl FUN_0200CA44
-_02003300:
- add r0, r6, #0x0
- add sp, #0x10
- pop {r3-r7}
- pop {r3}
- add sp, #0x10
- bx r3
- .balign 4
-_0200330C: .word 0xFFFF0003
-_02003310: .word FUN_02003464
-
- thumb_func_start FUN_02003314
-FUN_02003314: ; 0x02003314
- mov r3, #0x1
- add r2, r3, #0x0
- lsl r2, r1
- tst r0, r2
- bne _02003320
- mov r3, #0x0
-_02003320:
- lsl r0, r3, #0x18
- lsr r0, r0, #0x18
- bx lr
- .balign 4
-
- thumb_func_start FUN_02003328
-FUN_02003328: ; 0x02003328
- push {r4-r6, lr}
- add r5, r0, #0x0
- ldr r0, _02003360 ; =0x0000011A
- add r4, r1, #0x0
- ldrh r0, [r5, r0]
- lsl r0, r0, #0x12
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x1
- beq _0200335E
- ldr r3, _02003360 ; =0x0000011A
- ldr r1, _02003364 ; =0xFFFFC000
- ldrh r2, [r5, r3]
- add r0, r2, #0x0
- lsl r2, r2, #0x12
- lsr r6, r2, #0x12
- mov r2, #0x1
- lsl r2, r4
- orr r2, r6
- lsl r2, r2, #0x10
- and r0, r1
- lsr r2, r2, #0x10
- lsr r1, r1, #0x12
- and r1, r2
- orr r0, r1
- strh r0, [r5, r3]
-_0200335E:
- pop {r4-r6, pc}
- .balign 4
-_02003360: .word 0x0000011A
-_02003364: .word 0xFFFFC000
-
- thumb_func_start FUN_02003368
-FUN_02003368: ; 0x02003368
- push {r4-r5}
- cmp r0, #0x4
- ldr r0, [r1, #0x8]
- bge _02003374
- lsl r0, r0, #0x13
- b _02003378
-_02003374:
- lsr r0, r0, #0x9
- lsl r0, r0, #0x18
-_02003378:
- mov r4, #0x0
- lsr r0, r0, #0x18
- add r5, r4, #0x0
- cmp r0, #0x0
- bls _02003398
- mov r3, #0x1
-_02003384:
- add r1, r3, #0x0
- lsl r1, r5
- add r1, r4, r1
- lsl r1, r1, #0x10
- lsr r4, r1, #0x10
- add r1, r5, #0x1
- lsl r1, r1, #0x18
- lsr r5, r1, #0x18
- cmp r5, r0
- blo _02003384
-_02003398:
- ldrh r0, [r2, #0x0]
- and r0, r4
- strh r0, [r2, #0x0]
- pop {r4-r5}
- bx lr
- .balign 4
-
- thumb_func_start FUN_020033A4
-FUN_020033A4: ; 0x020033A4
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r3, #0x0
- cmp r2, #0x0
- bge _020033D4
- add r0, r2, #0x0
- blx FUN_020DE3F0
- add r0, r0, #0x2
- ldrh r1, [r5, #0x6]
- mov r2, #0xf
- lsl r0, r0, #0x10
- bic r1, r2
- lsr r2, r0, #0x10
- mov r0, #0xf
- and r0, r2
- orr r0, r1
- strh r0, [r5, #0x6]
- ldrh r1, [r5, #0x2]
- mov r0, #0x3f
- bic r1, r0
- strh r1, [r5, #0x2]
- b _020033F2
-_020033D4:
- ldrh r1, [r5, #0x6]
- mov r0, #0xf
- bic r1, r0
- mov r0, #0x2
- orr r0, r1
- strh r0, [r5, #0x6]
- ldrh r0, [r5, #0x2]
- mov r1, #0x3f
- bic r0, r1
- lsl r1, r2, #0x10
- lsr r2, r1, #0x10
- mov r1, #0x3f
- and r1, r2
- orr r0, r1
- strh r0, [r5, #0x2]
-_020033F2:
- strh r6, [r5, #0x0]
- ldrh r1, [r5, #0x2]
- ldr r0, _02003454 ; =0xFFFFF83F
- add r3, sp, #0x0
- and r1, r0
- lsl r0, r4, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r5, #0x2]
- ldrh r1, [r5, #0x2]
- ldr r0, _02003458 ; =0xFFFF07FF
- add r2, r1, #0x0
- ldrb r1, [r3, #0x10]
- and r2, r0
- lsl r0, r1, #0x1b
- lsr r0, r0, #0x10
- orr r0, r2
- strh r0, [r5, #0x2]
- ldrh r0, [r5, #0x4]
- ldr r2, _0200345C ; =0xFFFF8000
- ldrh r6, [r3, #0x14]
- lsr r3, r2, #0x11
- and r0, r2
- and r3, r6
- orr r0, r3
- strh r0, [r5, #0x4]
- ldrh r3, [r5, #0x6]
- ldr r0, _02003460 ; =0xFFFFFC0F
- and r0, r3
- ldrh r3, [r5, #0x2]
- lsl r3, r3, #0x1a
- lsr r3, r3, #0x1a
- lsl r3, r3, #0x1a
- lsr r3, r3, #0x16
- orr r0, r3
- strh r0, [r5, #0x6]
- cmp r4, r1
- ldrh r1, [r5, #0x4]
- bhs _02003448
- sub r0, r2, #0x1
- and r0, r1
- strh r0, [r5, #0x4]
- pop {r4-r6, pc}
-_02003448:
- mov r0, #0x2
- lsl r0, r0, #0xe
- orr r0, r1
- strh r0, [r5, #0x4]
- pop {r4-r6, pc}
- nop
-_02003454: .word 0xFFFFF83F
-_02003458: .word 0xFFFF07FF
-_0200345C: .word 0xFFFF8000
-_02003460: .word 0xFFFFFC0F
-
- thumb_func_start FUN_02003464
-FUN_02003464: ; 0x02003464
- push {r4-r6, lr}
- add r4, r1, #0x0
- mov r1, #0x47
- lsl r1, r1, #0x2
- ldrb r2, [r4, r1]
- add r5, r0, #0x0
- cmp r2, #0x1
- bne _020034A4
- mov r2, #0x0
- strb r2, [r4, r1]
- sub r2, r1, #0x2
- ldrh r3, [r4, r2]
- ldr r2, _020034F4 ; =0xFFFFC000
- add r5, r3, #0x0
- and r5, r2
- sub r3, r1, #0x2
- strh r5, [r4, r3]
- sub r3, r1, #0x4
- ldrh r5, [r4, r3]
- ldr r3, _020034F8 ; =0xFFFF0003
- sub r2, r2, #0x1
- and r5, r3
- sub r3, r1, #0x4
- strh r5, [r4, r3]
- sub r3, r1, #0x2
- ldrh r3, [r4, r3]
- sub r1, r1, #0x2
- and r2, r3
- strh r2, [r4, r1]
- bl FUN_0200CAB4
- pop {r4-r6, pc}
-_020034A4:
- sub r0, r1, #0x4
- ldrh r2, [r4, r0]
- lsl r0, r2, #0x1e
- lsr r0, r0, #0x1e
- cmp r0, #0x1
- bne _020034F0
- sub r0, r1, #0x2
- ldrh r0, [r4, r0]
- ldr r3, _020034F4 ; =0xFFFFC000
- lsl r2, r2, #0x10
- lsr r6, r2, #0x12
- lsr r2, r3, #0x12
- and r0, r3
- and r2, r6
- orr r2, r0
- sub r0, r1, #0x2
- strh r2, [r4, r0]
- add r0, r4, #0x0
- bl FUN_02003500
- add r0, r4, #0x0
- bl FUN_02003520
- mov r1, #0x46
- lsl r1, r1, #0x2
- ldrh r0, [r4, r1]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bne _020034F0
- add r0, r1, #0x2
- ldrh r2, [r4, r0]
- ldr r0, _020034FC ; =0xFFFFBFFF
- and r2, r0
- add r0, r1, #0x2
- strh r2, [r4, r0]
- add r0, r5, #0x0
- bl FUN_0200CAB4
-_020034F0:
- pop {r4-r6, pc}
- nop
-_020034F4: .word 0xFFFFC000
-_020034F8: .word 0xFFFF0003
-_020034FC: .word 0xFFFFBFFF
-
- thumb_func_start FUN_02003500
-FUN_02003500: ; 0x02003500
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r4, #0x0
- mov r6, #0x10
-_02003508:
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_02003540
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0x4
- blo _02003508
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02003520
-FUN_02003520: ; 0x02003520
- push {r4-r6, lr}
- mov r4, #0x4
- add r6, r4, #0x0
- add r5, r0, #0x0
- add r6, #0xfc
-_0200352A:
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_02003540
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- cmp r4, #0xe
- blo _0200352A
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02003540
-FUN_02003540: ; 0x02003540
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0x46
- lsl r0, r0, #0x2
- ldrh r0, [r5, r0]
- add r4, r1, #0x0
- add r6, r2, #0x0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bl FUN_02003314
- cmp r0, #0x0
- beq _02003594
- mov r0, #0x14
- mul r0, r4
- add r2, r5, r0
- ldrh r0, [r2, #0x12]
- ldrh r3, [r2, #0xe]
- lsl r1, r0, #0x16
- lsl r3, r3, #0x1a
- lsr r1, r1, #0x1a
- lsr r3, r3, #0x1a
- cmp r1, r3
- bhs _02003584
- ldr r3, _02003598 ; =0xFFFFFC0F
- and r3, r0
- add r0, r1, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1a
- lsr r0, r0, #0x16
- orr r0, r3
- strh r0, [r2, #0x12]
- pop {r4-r6, pc}
-_02003584:
- ldr r1, _02003598 ; =0xFFFFFC0F
- and r0, r1
- strh r0, [r2, #0x12]
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_0200359C
-_02003594:
- pop {r4-r6, pc}
- nop
-_02003598: .word 0xFFFFFC0F
-
- thumb_func_start FUN_0200359C
-FUN_0200359C: ; 0x0200359C
- push {r4-r7, lr}
- sub sp, #0xc
- str r1, [sp, #0x4]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x4]
- mov r1, #0x14
- mul r1, r0
- ldr r0, [sp, #0x0]
- mov r6, #0x0
- add r5, r0, r1
- add r0, r5, #0x0
- str r0, [sp, #0x8]
- add r0, #0xc
- add r7, r2, #0x0
- add r4, r6, #0x0
- str r0, [sp, #0x8]
-_020035BC:
- ldrh r0, [r5, #0xc]
- lsl r1, r6, #0x10
- lsr r1, r1, #0x10
- bl FUN_02003314
- cmp r0, #0x0
- beq _020035DC
- ldr r0, [r5, #0x0]
- lsl r1, r4, #0x1
- ldr r2, [r5, #0x4]
- add r0, r0, r1
- add r1, r2, r1
- ldr r2, [sp, #0x8]
- add r3, r7, #0x0
- bl FUN_020035F8
-_020035DC:
- add r6, r6, #0x1
- add r4, r4, r7
- cmp r6, #0x10
- blo _020035BC
- ldr r1, [sp, #0x4]
- add r5, #0xc
- lsl r1, r1, #0x18
- ldr r0, [sp, #0x0]
- lsr r1, r1, #0x18
- add r2, r5, #0x0
- bl FUN_02003684
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start FUN_020035F8
-FUN_020035F8: ; 0x020035F8
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x4]
- mov r0, #0x0
- add r6, r1, #0x0
- mov r12, r0
- str r2, [sp, #0x0]
- mov lr, r3
- add r0, r3, #0x0
- beq _02003680
-_0200360C:
- ldr r0, [sp, #0x4]
- mov r1, #0x1f
- ldrh r0, [r0, #0x0]
- asr r2, r0, #0x5
- add r5, r2, #0x0
- and r5, r1
- ldr r1, [sp, #0x0]
- asr r4, r0, #0xa
- ldrh r1, [r1, #0x4]
- lsl r1, r1, #0x11
- lsr r3, r1, #0x11
- ldr r1, [sp, #0x0]
- ldrh r1, [r1, #0x2]
- lsl r1, r1, #0x15
- lsr r2, r1, #0x1b
- mov r1, #0x1f
- and r1, r4
- mov r4, #0x1f
- and r0, r4
- and r4, r3
- sub r4, r4, r0
- mul r4, r2
- asr r4, r4, #0x4
- add r0, r0, r4
- lsl r0, r0, #0x18
- lsr r7, r0, #0x18
- asr r4, r3, #0xa
- mov r0, #0x1f
- and r0, r4
- sub r0, r0, r1
- mul r0, r2
- asr r0, r0, #0x4
- add r0, r1, r0
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- asr r3, r3, #0x5
- mov r1, #0x1f
- and r1, r3
- sub r1, r1, r5
- mul r1, r2
- asr r1, r1, #0x4
- add r1, r5, r1
- lsl r1, r1, #0x18
- lsl r0, r0, #0xa
- lsr r1, r1, #0x13
- orr r0, r1
- orr r0, r7
- strh r0, [r6, #0x0]
- ldr r0, [sp, #0x4]
- add r6, r6, #0x2
- add r0, r0, #0x2
- str r0, [sp, #0x4]
- mov r0, r12
- add r1, r0, #0x1
- mov r0, lr
- mov r12, r1
- cmp r1, r0
- blo _0200360C
-_02003680:
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003684
-FUN_02003684: ; 0x02003684
- push {r4-r5}
- ldrh r4, [r2, #0x2]
- lsl r3, r4, #0x10
- lsl r4, r4, #0x15
- lsr r3, r3, #0x1b
- lsr r4, r4, #0x1b
- cmp r4, r3
- bne _020036BE
- mov r3, #0x46
- lsl r3, r3, #0x2
- ldrh r4, [r0, r3]
- mov r2, #0x1
- lsl r2, r1
- lsl r1, r4, #0x10
- lsr r5, r1, #0x12
- add r1, r5, #0x0
- tst r1, r2
- beq _0200371E
- eor r2, r5
- lsl r2, r2, #0x10
- ldr r1, _02003724 ; =0xFFFF0003
- lsr r2, r2, #0x10
- lsl r2, r2, #0x12
- and r1, r4
- lsr r2, r2, #0x10
- orr r1, r2
- strh r1, [r0, r3]
- pop {r4-r5}
- bx lr
-_020036BE:
- ldrh r0, [r2, #0x4]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x1f
- bne _020036F4
- lsl r0, r4, #0x10
- asr r1, r0, #0x10
- ldrh r0, [r2, #0x6]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- add r0, r1, r0
- lsl r0, r0, #0x10
- asr r4, r0, #0x10
- cmp r4, r3
- ble _020036DE
- lsl r0, r3, #0x10
- asr r4, r0, #0x10
-_020036DE:
- ldrh r1, [r2, #0x2]
- ldr r0, _02003728 ; =0xFFFFF83F
- and r1, r0
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r2, #0x2]
- pop {r4-r5}
- bx lr
-_020036F4:
- lsl r0, r4, #0x10
- asr r1, r0, #0x10
- ldrh r0, [r2, #0x6]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1c
- sub r0, r1, r0
- lsl r0, r0, #0x10
- asr r4, r0, #0x10
- cmp r4, r3
- bge _0200370C
- lsl r0, r3, #0x10
- asr r4, r0, #0x10
-_0200370C:
- ldrh r1, [r2, #0x2]
- ldr r0, _02003728 ; =0xFFFFF83F
- and r1, r0
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x15
- orr r0, r1
- strh r0, [r2, #0x2]
-_0200371E:
- pop {r4-r5}
- bx lr
- nop
-_02003724: .word 0xFFFF0003
-_02003728: .word 0xFFFFF83F
-
- thumb_func_start FUN_0200372C
-FUN_0200372C: ; 0x0200372C
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r0, _020038DC ; =0x0000011A
- ldrh r1, [r6, r0]
- lsl r1, r1, #0x10
- lsr r1, r1, #0x1f
- bne _02003748
- sub r0, r0, #0x2
- ldrh r0, [r6, r0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1e
- cmp r0, #0x1
- beq _02003748
- b _020038DA
-_02003748:
- mov r7, #0x2
- mov r5, #0x0
- add r4, r6, #0x0
- lsl r7, r7, #0xc
-_02003750:
- ldr r0, _020038DC ; =0x0000011A
- ldrh r1, [r6, r0]
- lsl r0, r1, #0x10
- lsr r0, r0, #0x1f
- bne _02003770
- ldr r0, [r4, #0x4]
- cmp r0, #0x0
- beq _0200377C
- lsl r0, r1, #0x12
- lsl r1, r5, #0x10
- lsr r0, r0, #0x12
- lsr r1, r1, #0x10
- bl FUN_02003314
- cmp r0, #0x0
- beq _0200377C
-_02003770:
- ldr r0, [r4, #0x4]
- ldr r1, [r4, #0x8]
- blx DC_FlushRange
- cmp r5, #0xd
- bls _0200377E
-_0200377C:
- b _020038A4
-_0200377E:
- add r0, r5, r5
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0200378A: ; jump table (using 16-bit offset)
- .short _020037A6 - _0200378A - 2; case 0
- .short _020037B2 - _0200378A - 2; case 1
- .short _020037BE - _0200378A - 2; case 2
- .short _020037CA - _0200378A - 2; case 3
- .short _020037D6 - _0200378A - 2; case 4
- .short _020037EA - _0200378A - 2; case 5
- .short _020037FE - _0200378A - 2; case 6
- .short _02003814 - _0200378A - 2; case 7
- .short _0200382A - _0200378A - 2; case 8
- .short _0200383E - _0200378A - 2; case 9
- .short _02003852 - _0200378A - 2; case 10
- .short _02003868 - _0200378A - 2; case 11
- .short _0200387E - _0200378A - 2; case 12
- .short _02003892 - _0200378A - 2; case 13
-_020037A6:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C9550
- b _020038A4
-_020037B2:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C94E8
- b _020038A4
-_020037BE:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C9480
- b _020038A4
-_020037CA:
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C9418
- b _020038A4
-_020037D6:
- blx FUN_020C8B10
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C8A90
- blx FUN_020C8A2C
- b _020038A4
-_020037EA:
- blx FUN_020C8B10
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r1, r7, #0x0
- blx FUN_020C8A90
- blx FUN_020C8A2C
- b _020038A4
-_020037FE:
- blx FUN_020C8B10
- mov r1, #0x1
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xe
- blx FUN_020C8A90
- blx FUN_020C8A2C
- b _020038A4
-_02003814:
- blx FUN_020C8B10
- mov r1, #0x6
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xc
- blx FUN_020C8A90
- blx FUN_020C8A2C
- b _020038A4
-_0200382A:
- blx FUN_020C88CC
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C8858
- blx FUN_020C880C
- b _020038A4
-_0200383E:
- blx FUN_020C88CC
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r1, r7, #0x0
- blx FUN_020C8858
- blx FUN_020C880C
- b _020038A4
-_02003852:
- blx FUN_020C88CC
- mov r1, #0x1
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xe
- blx FUN_020C8858
- blx FUN_020C880C
- b _020038A4
-_02003868:
- blx FUN_020C88CC
- mov r1, #0x6
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- lsl r1, r1, #0xc
- blx FUN_020C8858
- blx FUN_020C880C
- b _020038A4
-_0200387E:
- blx FUN_020C89BC
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C8948
- blx FUN_020C88F0
- b _020038A4
-_02003892:
- blx FUN_020C87E8
- ldr r0, [r4, #0x4]
- ldr r2, [r4, #0x8]
- mov r1, #0x0
- blx FUN_020C8774
- blx FUN_020C8728
-_020038A4:
- add r5, r5, #0x1
- add r4, #0x14
- cmp r5, #0xe
- bge _020038AE
- b _02003750
-_020038AE:
- ldr r3, _020038DC ; =0x0000011A
- ldr r1, _020038E0 ; =0xFFFFC000
- sub r2, r3, #0x2
- ldrh r2, [r6, r2]
- ldrh r0, [r6, r3]
- lsl r2, r2, #0x10
- and r0, r1
- lsr r2, r2, #0x12
- lsr r1, r1, #0x12
- and r1, r2
- orr r0, r1
- strh r0, [r6, r3]
- ldrh r0, [r6, r3]
- lsl r0, r0, #0x12
- lsr r0, r0, #0x12
- bne _020038DA
- sub r0, r3, #0x2
- ldrh r1, [r6, r0]
- mov r0, #0x3
- bic r1, r0
- sub r0, r3, #0x2
- strh r1, [r6, r0]
-_020038DA:
- pop {r3-r7, pc}
- .balign 4
-_020038DC: .word 0x0000011A
-_020038E0: .word 0xFFFFC000
-
- thumb_func_start FUN_020038E4
-FUN_020038E4: ; 0x020038E4
- mov r1, #0x46
- lsl r1, r1, #0x2
- ldrh r0, [r0, r1]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x12
- bx lr
-
- thumb_func_start FUN_020038F0
-FUN_020038F0: ; 0x020038F0
- push {r3-r4}
- ldr r3, _0200390C ; =0x0000011A
- lsl r1, r1, #0x10
- ldrh r4, [r0, r3]
- ldr r2, _02003910 ; =0xFFFF7FFF
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- and r2, r4
- lsr r1, r1, #0x10
- orr r1, r2
- strh r1, [r0, r3]
- pop {r3-r4}
- bx lr
- nop
-_0200390C: .word 0x0000011A
-_02003910: .word 0xFFFF7FFF
-
- thumb_func_start FUN_02003914
-FUN_02003914: ; 0x02003914
- push {r3-r7, lr}
- sub sp, #0x8
- add r6, r0, #0x0
- str r3, [sp, #0x0]
- mov r0, #0x14
- add r4, r1, #0x0
- mul r4, r0
- add r0, sp, #0x10
- ldrh r0, [r0, #0x14]
- add r7, r2, #0x0
- ldr r5, [sp, #0x20]
- str r0, [sp, #0x4]
- lsl r1, r0, #0x1
- add r0, r6, r4
- ldr r0, [r0, #0x8]
- cmp r1, r0
- bls _0200393A
- bl ErrorHandling
-_0200393A:
- sub r0, r7, #0x1
- cmp r0, #0x1
- bhi _02003952
- ldr r2, [r6, r4]
- lsl r1, r5, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r2, r2, r5
- lsl r2, r2, #0x1
- blx MIi_CpuClear16
-_02003952:
- cmp r7, #0x0
- beq _0200395A
- cmp r7, #0x2
- bne _0200396E
-_0200395A:
- add r1, r6, r4
- ldr r2, [r1, #0x4]
- lsl r1, r5, #0x1
- add r1, r2, r1
- ldr r2, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r2, r2, r5
- lsl r2, r2, #0x1
- blx MIi_CpuClear16
-_0200396E:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003974
-FUN_02003974: ; 0x02003974
- push {r4-r7, lr}
- sub sp, #0xc
- str r0, [sp, #0x0]
- add r0, sp, #0x10
- ldrh r0, [r0, #0x10]
- str r1, [sp, #0x4]
- add r7, r2, #0x0
- lsl r1, r0, #0x1b
- lsr r1, r1, #0x1b
- mov r12, r1
- lsl r1, r0, #0x16
- lsl r0, r0, #0x11
- lsr r1, r1, #0x1b
- lsr r0, r0, #0x1b
- mov r2, #0x0
- mov lr, r1
- str r0, [sp, #0x8]
- cmp r7, #0x0
- bls _020039E2
-_0200399A:
- ldr r0, [sp, #0x0]
- lsl r6, r2, #0x1
- ldrh r4, [r0, r6]
- lsl r0, r4, #0x1b
- lsr r1, r0, #0x1b
- lsl r0, r4, #0x16
- lsl r4, r4, #0x11
- lsr r5, r4, #0x1b
- ldr r4, [sp, #0x8]
- lsr r0, r0, #0x1b
- sub r4, r4, r5
- mul r4, r3
- asr r4, r4, #0x4
- add r4, r5, r4
- lsl r5, r4, #0xa
- mov r4, r12
- sub r4, r4, r1
- mul r4, r3
- asr r4, r4, #0x4
- add r1, r1, r4
- mov r4, lr
- sub r4, r4, r0
- mul r4, r3
- asr r4, r4, #0x4
- add r0, r0, r4
- lsl r0, r0, #0x5
- orr r0, r1
- add r1, r5, #0x0
- orr r1, r0
- ldr r0, [sp, #0x4]
- strh r1, [r0, r6]
- add r0, r2, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- cmp r2, r7
- blo _0200399A
-_020039E2:
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020039E8
-FUN_020039E8: ; 0x020039E8
- push {r3-r7, lr}
- sub sp, #0x8
- add r7, r2, #0x0
- add r5, r0, #0x0
- mov r2, #0x14
- add r6, r1, #0x0
- mul r6, r2
- str r3, [sp, #0x4]
- ldr r1, [r5, r6]
- mov r0, #0x0
- add r4, r5, r6
- cmp r1, #0x0
- beq _02003A0A
- ldr r1, [r4, #0x4]
- cmp r1, #0x0
- beq _02003A0A
- mov r0, #0x1
-_02003A0A:
- cmp r0, #0x0
- bne _02003A12
- bl ErrorHandling
-_02003A12:
- add r3, sp, #0x10
- ldrh r0, [r3, #0x14]
- add r2, r5, r6
- lsl r1, r7, #0x1
- str r0, [sp, #0x0]
- ldr r0, [r4, #0x0]
- ldr r2, [r2, #0x4]
- add r0, r0, r1
- add r1, r2, r1
- ldrb r3, [r3, #0x10]
- ldr r2, [sp, #0x4]
- bl FUN_02003974
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003A30
-FUN_02003A30: ; 0x02003A30
- push {r3-r7, lr}
- sub sp, #0x8
- str r3, [sp, #0x4]
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r2, #0x0
- ldr r7, [sp, #0x20]
- beq _02003A60
-_02003A40:
- mov r0, #0x1
- tst r0, r4
- beq _02003A54
- str r7, [sp, #0x0]
- ldr r3, [sp, #0x4]
- add r0, r5, #0x0
- add r1, r6, #0x0
- mov r2, #0x10
- bl FUN_02003974
-_02003A54:
- lsl r0, r4, #0xf
- lsr r4, r0, #0x10
- add r6, #0x20
- add r5, #0x20
- cmp r4, #0x0
- bne _02003A40
-_02003A60:
- add sp, #0x8
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02003A64
-FUN_02003A64: ; 0x02003A64
- push {r4-r7, lr}
- sub sp, #0xc
- str r3, [sp, #0x8]
- add r6, r0, #0x0
- add r7, r1, #0x0
- ldr r0, [sp, #0x20]
- add r5, r2, #0x0
- mov r1, #0x14
- add r2, r7, #0x0
- str r0, [sp, #0x20]
- mul r2, r1
- mov r4, #0x0
- ldr r1, [r6, r2]
- add r0, r4, #0x0
- cmp r1, #0x0
- beq _02003A8E
- add r1, r6, r2
- ldr r1, [r1, #0x4]
- cmp r1, #0x0
- beq _02003A8E
- mov r0, #0x1
-_02003A8E:
- cmp r0, #0x0
- bne _02003A96
- bl ErrorHandling
-_02003A96:
- cmp r5, #0x0
- beq _02003AC0
-_02003A9A:
- mov r0, #0x1
- tst r0, r5
- beq _02003AB6
- ldr r0, [sp, #0x8]
- lsl r2, r4, #0x10
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x20]
- add r1, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- lsr r2, r2, #0x10
- mov r3, #0x10
- bl FUN_020039E8
-_02003AB6:
- lsl r0, r5, #0xf
- lsr r5, r0, #0x10
- add r4, #0x10
- cmp r5, #0x0
- bne _02003A9A
-_02003AC0:
- add sp, #0xc
- pop {r4-r7, pc}
-
- thumb_func_start FUN_02003AC4
-FUN_02003AC4: ; 0x02003AC4
- push {r3-r7, lr}
- mov lr, r1
- mov r12, r2
- add r7, r3, #0x0
- mov r4, #0x0
- cmp r1, #0x0
- ble _02003B3C
- ldr r6, [sp, #0x18]
-_02003AD4:
- ldrh r3, [r0, #0x0]
- mov r1, #0x1f
- add r2, r3, #0x0
- asr r5, r3, #0xa
- and r2, r1
- and r5, r1
- mov r1, #0x1d
- mul r1, r5
- mov r5, #0x4c
- mul r5, r2
- asr r3, r3, #0x5
- mov r2, #0x1f
- and r3, r2
- mov r2, #0x97
- mul r2, r3
- add r2, r5, r2
- add r1, r1, r2
- asr r3, r1, #0x8
- mov r1, r12
- add r2, r1, #0x0
- mul r2, r3
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- asr r2, r1, #0x8
- add r1, r7, #0x0
- mul r1, r3
- mul r3, r6
- lsl r1, r1, #0x10
- lsl r3, r3, #0x10
- lsr r1, r1, #0x10
- lsr r3, r3, #0x10
- asr r1, r1, #0x8
- asr r3, r3, #0x8
- cmp r2, #0x1f
- ble _02003B1C
- mov r2, #0x1f
-_02003B1C:
- cmp r1, #0x1f
- ble _02003B22
- mov r1, #0x1f
-_02003B22:
- cmp r3, #0x1f
- ble _02003B28
- mov r3, #0x1f
-_02003B28:
- lsl r3, r3, #0xa
- lsl r1, r1, #0x5
- orr r1, r3
- orr r1, r2
- strh r1, [r0, #0x0]
- add r4, r4, #0x1
- mov r1, lr
- add r0, r0, #0x2
- cmp r4, r1
- blt _02003AD4
-_02003B3C:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02003B40
-FUN_02003B40: ; 0x02003B40
- push {r3-r5, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- add r0, r1, #0x0
- add r1, r2, #0x0
- add r2, sp, #0x4
- bl FUN_02006C08
- add r4, r0, #0x0
- bne _02003B58
- bl ErrorHandling
-_02003B58:
- ldr r0, [sp, #0x1c]
- cmp r0, #0x0
- bne _02003B64
- ldr r0, [sp, #0x4]
- ldr r0, [r0, #0x8]
- str r0, [sp, #0x1c]
-_02003B64:
- ldr r0, [sp, #0x2c]
- ldr r2, [sp, #0x24]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x4]
- ldr r3, [sp, #0x28]
- ldr r0, [r0, #0xc]
- mov r1, #0x10
- bl FUN_02003AC4
- ldr r0, [sp, #0x1c]
- add r3, sp, #0x8
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- ldrh r3, [r3, #0x18]
- ldr r1, [r1, #0xc]
- ldr r2, [sp, #0x18]
- add r0, r5, #0x0
- bl FUN_02003054
- add r0, r4, #0x0
- bl FUN_02016A18
- add sp, #0x8
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02003B98
-FUN_02003B98: ; 0x02003B98
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- bl FUN_02003D30
- add r4, r0, #0x0
- blx FUN_020C01D0
- bl FUN_020040C8
- add r0, r4, #0x0
- bl FUN_02004064
- add r0, r4, #0x0
- ldr r1, _02003C00 ; =0x000BBC00
- add r0, #0x94
- blx FUN_020C2A94
- add r1, r4, #0x0
- add r1, #0x90
- str r0, [r1, #0x0]
- add r2, r4, #0x0
- add r2, #0x90
- ldr r1, _02003C04 ; =0x02104780
- ldr r2, [r2, #0x0]
- add r0, r4, #0x0
- mov r3, #0x0
- blx FUN_020C26F8
- add r0, r4, #0x0
- add r0, #0x90
- ldr r0, [r0, #0x0]
- blx FUN_020C39CC
- add r0, r4, #0x0
- bl FUN_02004088
- add r0, r4, #0x0
- bl FUN_020040A4
- ldr r0, _02003C08 ; =0x02107070
- mov r1, #0x0
- str r1, [r0, #0x4]
- ldr r0, _02003C0C ; =0x000BCD4C
- str r5, [r4, r0]
- ldrh r0, [r6, #0x0]
- lsl r0, r0, #0x1a
- lsr r0, r0, #0x1e
- bl FUN_02004D60
- pop {r4-r6, pc}
- nop
-_02003C00: .word 0x000BBC00
-_02003C04: .word 0x02104780
-_02003C08: .word 0x02107070
-_02003C0C: .word 0x000BCD4C
-
- thumb_func_start FUN_02003C10
-FUN_02003C10: ; 0x02003C10
- push {r4, lr}
- bl FUN_02003D30
- add r4, r0, #0x0
- bl FUN_02003D04
- cmp r0, #0x0
- bne _02003C30
- ldr r0, _02003C3C ; =0x000BCD00
- ldr r1, [r4, r0]
- cmp r1, #0x0
- ble _02003C2C
- sub r1, r1, #0x1
- str r1, [r4, r0]
-_02003C2C:
- bl FUN_02003C40
-_02003C30:
- bl FUN_02005CFC
- blx FUN_020C01A0
- pop {r4, pc}
- nop
-_02003C3C: .word 0x000BCD00
-
- thumb_func_start FUN_02003C40
-FUN_02003C40: ; 0x02003C40
- push {r4, lr}
- bl FUN_02003D30
- add r4, r0, #0x0
- ldr r0, _02003CDC ; =0x02107070
- ldr r0, [r0, #0x0]
- cmp r0, #0x6
- bhi _02003CD8
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02003C5C: ; jump table (using 16-bit offset)
- .short _02003CD8 - _02003C5C - 2; case 0
- .short _02003C6A - _02003C5C - 2; case 1
- .short _02003CD8 - _02003C5C - 2; case 2
- .short _02003C72 - _02003C5C - 2; case 3
- .short _02003C82 - _02003C5C - 2; case 4
- .short _02003C92 - _02003C5C - 2; case 5
- .short _02003CB0 - _02003C5C - 2; case 6
-_02003C6A:
- mov r0, #0x2
- bl FUN_02003CE8
- pop {r4, pc}
-_02003C72:
- bl FUN_02005404
- cmp r0, #0x0
- bne _02003CD8
- mov r0, #0x2
- bl FUN_02003CE8
- pop {r4, pc}
-_02003C82:
- bl FUN_02005404
- cmp r0, #0x0
- bne _02003CD8
- mov r0, #0x2
- bl FUN_02003CE8
- pop {r4, pc}
-_02003C92:
- bl FUN_02005404
- cmp r0, #0x0
- bne _02003CD8
- bl FUN_02004D94
- cmp r0, #0x0
- bne _02003CD8
- bl FUN_020040DC
- ldr r0, _02003CE0 ; =0x000BCD0E
- ldrh r0, [r4, r0]
- bl FUN_0200521C
- pop {r4, pc}
-_02003CB0:
- bl FUN_02005404
- cmp r0, #0x0
- bne _02003CD8
- bl FUN_02004D94
- cmp r0, #0x0
- bne _02003CD8
- bl FUN_020040DC
- ldr r0, _02003CE0 ; =0x000BCD0E
- ldrh r0, [r4, r0]
- bl FUN_0200521C
- ldr r1, _02003CE4 ; =0x000BCD08
- mov r0, #0x7f
- ldr r1, [r4, r1]
- mov r2, #0x0
- bl FUN_0200538C
-_02003CD8:
- pop {r4, pc}
- nop
-_02003CDC: .word 0x02107070
-_02003CE0: .word 0x000BCD0E
-_02003CE4: .word 0x000BCD08
-
- thumb_func_start FUN_02003CE8
-FUN_02003CE8: ; 0x02003CE8
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- ldr r1, _02003CFC ; =0x000BCCFC
- mov r2, #0x0
- strh r2, [r0, r1]
- ldr r0, _02003D00 ; =0x02107070
- str r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-_02003CFC: .word 0x000BCCFC
-_02003D00: .word 0x02107070
-
- thumb_func_start FUN_02003D04
-FUN_02003D04: ; 0x02003D04
- push {r4, lr}
- bl FUN_02003D30
- add r4, r0, #0x0
- mov r0, #0x2
- bl FUN_020048BC
- cmp r0, #0x0
- beq _02003D1A
- mov r0, #0x1
- pop {r4, pc}
-_02003D1A:
- ldr r0, _02003D2C ; =0x000BCD12
- ldrh r0, [r4, r0]
- cmp r0, #0x0
- beq _02003D26
- mov r0, #0x1
- pop {r4, pc}
-_02003D26:
- mov r0, #0x0
- pop {r4, pc}
- nop
-_02003D2C: .word 0x000BCD12
-
- thumb_func_start FUN_02003D30
-FUN_02003D30: ; 0x02003D30
- ldr r0, _02003D34 ; =0x02107078
- bx lr
- .balign 4
-_02003D34: .word 0x02107078
-
- thumb_func_start FUN_02003D38
-FUN_02003D38: ; 0x02003D38
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- cmp r4, #0x27
- bls _02003D46
- b _02003E92
-_02003D46:
- add r1, r4, r4
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02003D52: ; jump table (using 16-bit offset)
- .short _02003DA8 - _02003D52 - 2; case 0
- .short _02003DAE - _02003D52 - 2; case 1
- .short _02003DB4 - _02003D52 - 2; case 2
- .short _02003DBA - _02003D52 - 2; case 3
- .short _02003DC0 - _02003D52 - 2; case 4
- .short _02003DA2 - _02003D52 - 2; case 5
- .short _02003DC6 - _02003D52 - 2; case 6
- .short _02003DCC - _02003D52 - 2; case 7
- .short _02003DD2 - _02003D52 - 2; case 8
- .short _02003DD8 - _02003D52 - 2; case 9
- .short _02003DDE - _02003D52 - 2; case 10
- .short _02003DE4 - _02003D52 - 2; case 11
- .short _02003DEA - _02003D52 - 2; case 12
- .short _02003DF0 - _02003D52 - 2; case 13
- .short _02003DF6 - _02003D52 - 2; case 14
- .short _02003DFC - _02003D52 - 2; case 15
- .short _02003E02 - _02003D52 - 2; case 16
- .short _02003E08 - _02003D52 - 2; case 17
- .short _02003E0E - _02003D52 - 2; case 18
- .short _02003E14 - _02003D52 - 2; case 19
- .short _02003E1A - _02003D52 - 2; case 20
- .short _02003E20 - _02003D52 - 2; case 21
- .short _02003E26 - _02003D52 - 2; case 22
- .short _02003E2C - _02003D52 - 2; case 23
- .short _02003E32 - _02003D52 - 2; case 24
- .short _02003E38 - _02003D52 - 2; case 25
- .short _02003E3E - _02003D52 - 2; case 26
- .short _02003E44 - _02003D52 - 2; case 27
- .short _02003E4A - _02003D52 - 2; case 28
- .short _02003E50 - _02003D52 - 2; case 29
- .short _02003E56 - _02003D52 - 2; case 30
- .short _02003E5C - _02003D52 - 2; case 31
- .short _02003E62 - _02003D52 - 2; case 32
- .short _02003E68 - _02003D52 - 2; case 33
- .short _02003E6E - _02003D52 - 2; case 34
- .short _02003E74 - _02003D52 - 2; case 35
- .short _02003E7A - _02003D52 - 2; case 36
- .short _02003E80 - _02003D52 - 2; case 37
- .short _02003E86 - _02003D52 - 2; case 38
- .short _02003E8C - _02003D52 - 2; case 39
-_02003DA2:
- ldr r1, _02003E9C ; =0x000BCCFE
- add r0, r0, r1
- pop {r4, pc}
-_02003DA8:
- ldr r1, _02003EA0 ; =0x000BBCB8
- add r0, r0, r1
- pop {r4, pc}
-_02003DAE:
- ldr r1, _02003EA4 ; =0x000BBCBC
- add r0, r0, r1
- pop {r4, pc}
-_02003DB4:
- ldr r1, _02003EA8 ; =0x000BBCC0
- add r0, r0, r1
- pop {r4, pc}
-_02003DBA:
- ldr r1, _02003EAC ; =0x000BBCE0
- add r0, r0, r1
- pop {r4, pc}
-_02003DC0:
- ldr r1, _02003EB0 ; =0x000BCCE0
- add r0, r0, r1
- pop {r4, pc}
-_02003DC6:
- ldr r1, _02003EB4 ; =0x000BCD00
- add r0, r0, r1
- pop {r4, pc}
-_02003DCC:
- ldr r1, _02003EB8 ; =0x000BCD04
- add r0, r0, r1
- pop {r4, pc}
-_02003DD2:
- ldr r1, _02003EBC ; =0x000BCD08
- add r0, r0, r1
- pop {r4, pc}
-_02003DD8:
- ldr r1, _02003EC0 ; =0x000BCD0C
- add r0, r0, r1
- pop {r4, pc}
-_02003DDE:
- ldr r1, _02003EC4 ; =0x000BCD0E
- add r0, r0, r1
- pop {r4, pc}
-_02003DE4:
- ldr r1, _02003EC8 ; =0x000BCD10
- add r0, r0, r1
- pop {r4, pc}
-_02003DEA:
- ldr r1, _02003ECC ; =0x000BCD11
- add r0, r0, r1
- pop {r4, pc}
-_02003DF0:
- ldr r1, _02003ED0 ; =0x000BCD12
- add r0, r0, r1
- pop {r4, pc}
-_02003DF6:
- ldr r1, _02003ED4 ; =0x000BCD14
- add r0, r0, r1
- pop {r4, pc}
-_02003DFC:
- ldr r1, _02003ED8 ; =0x000BCD15
- add r0, r0, r1
- pop {r4, pc}
-_02003E02:
- ldr r1, _02003EDC ; =0x000BCD16
- add r0, r0, r1
- pop {r4, pc}
-_02003E08:
- ldr r1, _02003EE0 ; =0x000BCD17
- add r0, r0, r1
- pop {r4, pc}
-_02003E0E:
- ldr r1, _02003EE4 ; =0x000BCD18
- add r0, r0, r1
- pop {r4, pc}
-_02003E14:
- ldr r1, _02003EE8 ; =0x000BCD19
- add r0, r0, r1
- pop {r4, pc}
-_02003E1A:
- ldr r1, _02003EEC ; =0x000BCD1A
- add r0, r0, r1
- pop {r4, pc}
-_02003E20:
- ldr r1, _02003EF0 ; =0x000BCD1B
- add r0, r0, r1
- pop {r4, pc}
-_02003E26:
- ldr r1, _02003EF4 ; =0x000BCD1C
- add r0, r0, r1
- pop {r4, pc}
-_02003E2C:
- ldr r1, _02003EF8 ; =0x000BCD20
- add r0, r0, r1
- pop {r4, pc}
-_02003E32:
- ldr r1, _02003EFC ; =0x000BCD24
- add r0, r0, r1
- pop {r4, pc}
-_02003E38:
- ldr r1, _02003F00 ; =0x000BCD28
- add r0, r0, r1
- pop {r4, pc}
-_02003E3E:
- ldr r1, _02003F04 ; =0x000BCD2C
- add r0, r0, r1
- pop {r4, pc}
-_02003E44:
- ldr r1, _02003F08 ; =0x000BCD30
- add r0, r0, r1
- pop {r4, pc}
-_02003E4A:
- ldr r1, _02003F0C ; =0x000BCD34
- add r0, r0, r1
- pop {r4, pc}
-_02003E50:
- ldr r1, _02003F10 ; =0x000BCD38
- add r0, r0, r1
- pop {r4, pc}
-_02003E56:
- ldr r1, _02003F14 ; =0x000BCD39
- add r0, r0, r1
- pop {r4, pc}
-_02003E5C:
- ldr r1, _02003F18 ; =0x000BCD3A
- add r0, r0, r1
- pop {r4, pc}
-_02003E62:
- ldr r1, _02003F1C ; =0x000BCD3C
- add r0, r0, r1
- pop {r4, pc}
-_02003E68:
- ldr r1, _02003F20 ; =0x000BCD40
- add r0, r0, r1
- pop {r4, pc}
-_02003E6E:
- ldr r1, _02003F24 ; =0x000BCD48
- add r0, r0, r1
- pop {r4, pc}
-_02003E74:
- ldr r1, _02003F28 ; =0x000BCD4C
- add r0, r0, r1
- pop {r4, pc}
-_02003E7A:
- ldr r1, _02003F2C ; =0x000BCD50
- add r0, r0, r1
- pop {r4, pc}
-_02003E80:
- ldr r1, _02003F30 ; =0x000BCD54
- add r0, r0, r1
- pop {r4, pc}
-_02003E86:
- ldr r1, _02003F34 ; =0x000BCD58
- add r0, r0, r1
- pop {r4, pc}
-_02003E8C:
- ldr r1, _02003F38 ; =0x000BCD5C
- add r0, r0, r1
- pop {r4, pc}
-_02003E92:
- bl ErrorHandling
- mov r0, #0x0
- pop {r4, pc}
- nop
-_02003E9C: .word 0x000BCCFE
-_02003EA0: .word 0x000BBCB8
-_02003EA4: .word 0x000BBCBC
-_02003EA8: .word 0x000BBCC0
-_02003EAC: .word 0x000BBCE0
-_02003EB0: .word 0x000BCCE0
-_02003EB4: .word 0x000BCD00
-_02003EB8: .word 0x000BCD04
-_02003EBC: .word 0x000BCD08
-_02003EC0: .word 0x000BCD0C
-_02003EC4: .word 0x000BCD0E
-_02003EC8: .word 0x000BCD10
-_02003ECC: .word 0x000BCD11
-_02003ED0: .word 0x000BCD12
-_02003ED4: .word 0x000BCD14
-_02003ED8: .word 0x000BCD15
-_02003EDC: .word 0x000BCD16
-_02003EE0: .word 0x000BCD17
-_02003EE4: .word 0x000BCD18
-_02003EE8: .word 0x000BCD19
-_02003EEC: .word 0x000BCD1A
-_02003EF0: .word 0x000BCD1B
-_02003EF4: .word 0x000BCD1C
-_02003EF8: .word 0x000BCD20
-_02003EFC: .word 0x000BCD24
-_02003F00: .word 0x000BCD28
-_02003F04: .word 0x000BCD2C
-_02003F08: .word 0x000BCD30
-_02003F0C: .word 0x000BCD34
-_02003F10: .word 0x000BCD38
-_02003F14: .word 0x000BCD39
-_02003F18: .word 0x000BCD3A
-_02003F1C: .word 0x000BCD3C
-_02003F20: .word 0x000BCD40
-_02003F24: .word 0x000BCD48
-_02003F28: .word 0x000BCD4C
-_02003F2C: .word 0x000BCD50
-_02003F30: .word 0x000BCD54
-_02003F34: .word 0x000BCD58
-_02003F38: .word 0x000BCD5C
-
- thumb_func_start FUN_02003F3C
-FUN_02003F3C: ; 0x02003F3C
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- add r0, #0x90
- ldr r0, [r0, #0x0]
- blx FUN_020C290C
- add r4, r0, #0x0
- mov r0, #0x0
- mvn r0, r0
- cmp r4, r0
- bne _02003F5A
- bl ErrorHandling
-_02003F5A:
- cmp r5, #0x0
- beq _02003F60
- str r4, [r5, #0x0]
-_02003F60:
- add r0, r4, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02003F64
-FUN_02003F64: ; 0x02003F64
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- add r0, #0x90
- ldr r0, [r0, #0x0]
- add r1, r4, #0x0
- blx FUN_020C2828
- pop {r4, pc}
-
- thumb_func_start FUN_02003F78
-FUN_02003F78: ; 0x02003F78
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- add r1, r0, #0x0
- add r1, #0x90
- ldr r1, [r1, #0x0]
- add r0, r4, #0x0
- blx FUN_020C36A8
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02003F90
-FUN_02003F90: ; 0x02003F90
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- add r1, r0, #0x0
- add r1, #0x90
- ldr r1, [r1, #0x0]
- add r0, r4, #0x0
- blx FUN_020C3674
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02003FA8
-FUN_02003FA8: ; 0x02003FA8
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl FUN_02003D30
- add r2, r0, #0x0
- add r2, #0x90
- ldr r2, [r2, #0x0]
- add r0, r5, #0x0
- add r1, r4, #0x0
- blx FUN_020C35E0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02003FC4
-FUN_02003FC4: ; 0x02003FC4
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- add r1, r0, #0x0
- add r1, #0x90
- ldr r1, [r1, #0x0]
- add r0, r4, #0x0
- blx FUN_020C360C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02003FDC
-FUN_02003FDC: ; 0x02003FDC
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- add r1, r0, #0x0
- add r1, #0x90
- ldr r1, [r1, #0x0]
- add r0, r4, #0x0
- blx FUN_020C3640
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02003FF4
-FUN_02003FF4: ; 0x02003FF4
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- add r4, r0, #0x0
- cmp r5, #0x9
- blt _02004008
- bl ErrorHandling
- mov r5, #0x0
-_02004008:
- ldr r0, _02004014 ; =0x000BBC94
- add r1, r4, r0
- lsl r0, r5, #0x2
- add r0, r1, r0
- pop {r3-r5, pc}
- nop
-_02004014: .word 0x000BBC94
-
- thumb_func_start FUN_02004018
-FUN_02004018: ; 0x02004018
- push {r3, lr}
- cmp r0, #0x7
- bhi _0200405A
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0200402A: ; jump table (using 16-bit offset)
- .short _0200403E - _0200402A - 2; case 0
- .short _0200403A - _0200402A - 2; case 1
- .short _02004042 - _0200402A - 2; case 2
- .short _02004046 - _0200402A - 2; case 3
- .short _0200404A - _0200402A - 2; case 4
- .short _0200404E - _0200402A - 2; case 5
- .short _02004052 - _0200402A - 2; case 6
- .short _02004056 - _0200402A - 2; case 7
-_0200403A:
- mov r0, #0x0
- pop {r3, pc}
-_0200403E:
- mov r0, #0x1
- pop {r3, pc}
-_02004042:
- mov r0, #0x2
- pop {r3, pc}
-_02004046:
- mov r0, #0x3
- pop {r3, pc}
-_0200404A:
- mov r0, #0x4
- pop {r3, pc}
-_0200404E:
- mov r0, #0x5
- pop {r3, pc}
-_02004052:
- mov r0, #0x6
- pop {r3, pc}
-_02004056:
- mov r0, #0x7
- pop {r3, pc}
-_0200405A:
- bl ErrorHandling
- mov r0, #0x3
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004064
-FUN_02004064: ; 0x02004064
- push {r4, lr}
- ldr r2, _02004080 ; =0x000BCD60
- mov r1, #0x0
- add r4, r0, #0x0
- blx FUN_020DF4A4
- ldr r0, _02004084 ; =0x000BCD1C
- mov r1, #0x0
-_02004074:
- add r1, r1, #0x1
- str r1, [r4, r0]
- add r4, r4, #0x4
- cmp r1, #0x7
- blt _02004074
- pop {r4, pc}
- .balign 4
-_02004080: .word 0x000BCD60
-_02004084: .word 0x000BCD1C
-
- thumb_func_start FUN_02004088
-FUN_02004088: ; 0x02004088
- push {r3-r5, lr}
- ldr r1, _020040A0 ; =0x000BBC94
- mov r4, #0x0
- add r5, r0, r1
-_02004090:
- add r0, r5, #0x0
- blx FUN_020C0F80
- add r4, r4, #0x1
- add r5, r5, #0x4
- cmp r4, #0x9
- blt _02004090
- pop {r3-r5, pc}
- .balign 4
-_020040A0: .word 0x000BBC94
-
- thumb_func_start FUN_020040A4
-FUN_020040A4: ; 0x020040A4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, _020040C0 ; =0x000BCD1C
- add r0, r4, r0
- bl FUN_02003F3C
- mov r0, #0x0
- bl FUN_02003F78
- ldr r0, _020040C4 ; =0x000BCD20
- add r0, r4, r0
- bl FUN_02003F3C
- pop {r4, pc}
- .balign 4
-_020040C0: .word 0x000BCD1C
-_020040C4: .word 0x000BCD20
-
- thumb_func_start FUN_020040C8
-FUN_020040C8: ; 0x020040C8
- push {r3, lr}
- blx MIC_Init
- mov r0, #0x1
- blx FUN_020D5168
- mov r0, #0x2
- blx FUN_020D5150
- pop {r3, pc}
-
- thumb_func_start FUN_020040DC
-FUN_020040DC: ; 0x020040DC
- push {r3, lr}
- mov r0, #0x7
- mov r1, #0x0
- blx FUN_020C1040
- mov r0, #0x7
- bl FUN_02003FF4
- blx FUN_020C0F68
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020040F4
-FUN_020040F4: ; 0x020040F4
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x5
- bl FUN_02003D38
- strb r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004104
-FUN_02004104: ; 0x02004104
- push {r3, lr}
- mov r0, #0x5
- bl FUN_02003D38
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_02004110
-FUN_02004110: ; 0x02004110
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x9
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- mov r0, #0x0
- bl FUN_02004130
- pop {r4, pc}
-
- thumb_func_start FUN_02004124
-FUN_02004124: ; 0x02004124
- push {r3, lr}
- mov r0, #0x9
- bl FUN_02003D38
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_02004130
-FUN_02004130: ; 0x02004130
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0xa
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004140
-FUN_02004140: ; 0x02004140
- push {r3, lr}
- mov r0, #0xa
- bl FUN_02003D38
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_0200414C
-FUN_0200414C: ; 0x0200414C
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- strh r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0200415C
-FUN_0200415C: ; 0x0200415C
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x14
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x15
- bl FUN_02003D38
- cmp r5, #0x33
- bhs _0200417A
- strb r5, [r4, #0x0]
- mov r1, #0x0
- strb r1, [r0, #0x0]
- pop {r3-r5, pc}
-_0200417A:
- strb r5, [r0, #0x0]
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004180
-FUN_02004180: ; 0x02004180
- push {r3, lr}
- cmp r0, #0x39
- bgt _020041DE
- blt _0200418A
- b _020042C8
-_0200418A:
- cmp r0, #0x35
- bgt _020041CC
- blt _02004192
- b _0200429A
-_02004192:
- cmp r0, #0x33
- bgt _020041C6
- bge _0200427C
- cmp r0, #0xe
- bhi _020041CA
- add r2, r0, r0
- add r2, pc
- ldrh r2, [r2, #0x6]
- lsl r2, r2, #0x10
- asr r2, r2, #0x10
- add pc, r2
-_020041A8: ; jump table (using 16-bit offset)
- .short _0200432C - _020041A8 - 2; case 0
- .short _02004222 - _020041A8 - 2; case 1
- .short _0200422C - _020041A8 - 2; case 2
- .short _02004236 - _020041A8 - 2; case 3
- .short _02004240 - _020041A8 - 2; case 4
- .short _0200424A - _020041A8 - 2; case 5
- .short _0200425E - _020041A8 - 2; case 6
- .short _0200429A - _020041A8 - 2; case 7
- .short _02004268 - _020041A8 - 2; case 8
- .short _02004222 - _020041A8 - 2; case 9
- .short _02004222 - _020041A8 - 2; case 10
- .short _02004254 - _020041A8 - 2; case 11
- .short _02004272 - _020041A8 - 2; case 12
- .short _0200422C - _020041A8 - 2; case 13
- .short _02004222 - _020041A8 - 2; case 14
-_020041C6:
- cmp r0, #0x34
- beq _02004290
-_020041CA:
- b _0200432C
-_020041CC:
- cmp r0, #0x37
- bgt _020041D8
- bge _020042AE
- cmp r0, #0x36
- beq _020042A4
- b _0200432C
-_020041D8:
- cmp r0, #0x38
- beq _020042BE
- b _0200432C
-_020041DE:
- cmp r0, #0x3d
- bgt _020041F8
- blt _020041E6
- b _020042F0
-_020041E6:
- cmp r0, #0x3b
- bgt _020041F2
- bge _020042DC
- cmp r0, #0x3a
- beq _020042D2
- b _0200432C
-_020041F2:
- cmp r0, #0x3c
- beq _020042E6
- b _0200432C
-_020041F8:
- cmp r0, #0x3f
- bgt _02004206
- blt _02004200
- b _02004304
-_02004200:
- cmp r0, #0x3e
- beq _020042FA
- b _0200432C
-_02004206:
- sub r0, #0x40
- cmp r0, #0x3
- bls _0200420E
- b _0200432C
-_0200420E:
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_0200421A: ; jump table (using 16-bit offset)
- .short _0200430E - _0200421A - 2; case 0
- .short _0200431E - _0200421A - 2; case 1
- .short _02004286 - _0200421A - 2; case 2
- .short _020042AE - _0200421A - 2; case 3
-_02004222:
- mov r0, #0x1
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200422C:
- mov r0, #0x2
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004236:
- mov r0, #0xd
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004240:
- mov r0, #0x1
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200424A:
- mov r0, #0x2
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004254:
- mov r0, #0x1
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200425E:
- mov r0, #0xb
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004268:
- mov r0, #0x1
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004272:
- mov r0, #0xe
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200427C:
- mov r0, #0x3
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004286:
- mov r0, #0x6
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004290:
- mov r0, #0x5
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200429A:
- mov r0, #0x9
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042A4:
- mov r0, #0xa
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042AE:
- ldr r0, _02004330 ; =0x000005E5
- bl FUN_02003FDC
- ldr r0, _02004330 ; =0x000005E5
- bl FUN_02003FC4
- add r1, r0, #0x0
- b _0200432C
-_020042BE:
- mov r0, #0xc
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042C8:
- mov r0, #0x7
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042D2:
- mov r0, #0x8
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042DC:
- mov r0, #0xf
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042E6:
- mov r0, #0x3
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042F0:
- mov r0, #0x5
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_020042FA:
- mov r0, #0xf
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_02004304:
- mov r0, #0x4
- bl FUN_02003F78
- add r1, r0, #0x0
- b _0200432C
-_0200430E:
- ldr r0, _02004334 ; =0x000005ED
- bl FUN_02003FDC
- ldr r0, _02004334 ; =0x000005ED
- bl FUN_02003FC4
- add r1, r0, #0x0
- b _0200432C
-_0200431E:
- ldr r0, _02004338 ; =0x000005EC
- bl FUN_02003FDC
- ldr r0, _02004338 ; =0x000005EC
- bl FUN_02003FC4
- add r1, r0, #0x0
-_0200432C:
- add r0, r1, #0x0
- pop {r3, pc}
- .balign 4
-_02004330: .word 0x000005E5
-_02004334: .word 0x000005ED
-_02004338: .word 0x000005EC
-
- thumb_func_start FUN_0200433C
-FUN_0200433C: ; 0x0200433C
- push {r3-r7, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x14
- add r5, r1, #0x0
- add r6, r2, #0x0
- bl FUN_02003D38
- str r0, [sp, #0x0]
- mov r0, #0x15
- bl FUN_02003D38
- str r0, [sp, #0x4]
- mov r0, #0xd
- bl FUN_02003D38
- add r7, r0, #0x0
- cmp r4, #0x33
- bhs _02004370
- ldr r0, [sp, #0x0]
- ldrb r0, [r0, #0x0]
- cmp r0, r4
- bne _0200437E
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004370:
- ldr r0, [sp, #0x4]
- ldrb r0, [r0, #0x0]
- cmp r0, r4
- bne _0200437E
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r7, pc}
-_0200437E:
- add r0, r4, #0x0
- bl FUN_0200415C
- cmp r4, #0x39
- bgt _020043DC
- bge _02004458
- cmp r4, #0x35
- bgt _020043CA
- bge _02004458
- cmp r4, #0x33
- bgt _020043C4
- bge _02004458
- cmp r4, #0xe
- bhi _020043C8
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_020043A6: ; jump table (using 16-bit offset)
- .short _020044A0 - _020043A6 - 2; case 0
- .short _02004460 - _020043A6 - 2; case 1
- .short _02004484 - _020043A6 - 2; case 2
- .short _02004496 - _020043A6 - 2; case 3
- .short _0200441C - _020043A6 - 2; case 4
- .short _02004430 - _020043A6 - 2; case 5
- .short _02004444 - _020043A6 - 2; case 6
- .short _0200444E - _020043A6 - 2; case 7
- .short _02004496 - _020043A6 - 2; case 8
- .short _02004496 - _020043A6 - 2; case 9
- .short _02004496 - _020043A6 - 2; case 10
- .short _0200443A - _020043A6 - 2; case 11
- .short _02004496 - _020043A6 - 2; case 12
- .short _02004496 - _020043A6 - 2; case 13
- .short _02004472 - _020043A6 - 2; case 14
-_020043C4:
- cmp r4, #0x34
- beq _02004458
-_020043C8:
- b _020044A0
-_020043CA:
- cmp r4, #0x37
- bgt _020043D6
- bge _02004458
- cmp r4, #0x36
- beq _02004458
- b _020044A0
-_020043D6:
- cmp r4, #0x38
- beq _02004458
- b _020044A0
-_020043DC:
- cmp r4, #0x3d
- bgt _020043F4
- bge _02004458
- cmp r4, #0x3b
- bgt _020043EE
- bge _02004458
- cmp r4, #0x3a
- beq _02004458
- b _020044A0
-_020043EE:
- cmp r4, #0x3c
- beq _02004458
- b _020044A0
-_020043F4:
- cmp r4, #0x3f
- bgt _02004400
- bge _02004458
- cmp r4, #0x3e
- beq _02004458
- b _020044A0
-_02004400:
- add r0, r4, #0x0
- sub r0, #0x40
- cmp r0, #0x3
- bhi _020044A0
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02004414: ; jump table (using 16-bit offset)
- .short _02004458 - _02004414 - 2; case 0
- .short _02004458 - _02004414 - 2; case 1
- .short _02004458 - _02004414 - 2; case 2
- .short _02004458 - _02004414 - 2; case 3
-_0200441C:
- mov r0, #0x0
- bl FUN_0200516C
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020044D4
- mov r0, #0x0
- strh r0, [r7, #0x0]
- b _020044A0
-_02004430:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_02004648
- b _020044A0
-_0200443A:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_02004680
- b _020044A0
-_02004444:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020046A0
- b _020044A0
-_0200444E:
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_020046C4
- b _020044A0
-_02004458:
- add r0, r4, #0x0
- bl FUN_020046E8
- b _020044A0
-_02004460:
- mov r0, #0x1
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004472:
- mov r0, #0x2
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004484:
- mov r0, #0x0
- bl FUN_0200516C
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
- b _020044A0
-_02004496:
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r6, #0x0
- bl FUN_02004704
-_020044A0:
- mov r0, #0x1
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020044A8
-FUN_020044A8: ; 0x020044A8
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- ldr r0, [r0, #0x0]
- bl FUN_02003F64
- mov r0, #0x18
- bl FUN_02003D38
- bl FUN_02003F3C
- add r0, r4, #0x0
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl FUN_02003F3C
- pop {r4, pc}
-
- thumb_func_start FUN_020044D4
-FUN_020044D4: ; 0x020044D4
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0xb
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- mov r0, #0x1f
- bl FUN_02003D38
- mov r0, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- add r4, r0, #0x0
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _0200450E
- cmp r4, r5
- bne _0200450E
- bl FUN_02004140
- mov r1, #0x12
- lsl r1, r1, #0x6
- cmp r0, r1
- bne _02004566
-_0200450E:
- mov r0, #0x1
- bl FUN_02004DBC
- bl FUN_02005454
- cmp r4, r5
- beq _02004528
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
- bl FUN_0200541C
-_02004528:
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02004560
- mov r0, #0x2
- bl FUN_02004748
- bl FUN_02003F64
- mov r0, #0x4
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl FUN_02003F3C
- cmp r4, r5
- beq _02004554
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
-_02004554:
- lsl r1, r4, #0x10
- add r0, r5, #0x0
- lsr r1, r1, #0x10
- bl FUN_02004568
- pop {r4-r6, pc}
-_02004560:
- add r0, r5, #0x0
- bl FUN_0200521C
-_02004566:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004568
-FUN_02004568: ; 0x02004568
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- add r4, r0, #0x0
- ldrh r0, [r4, #0x0]
- bl FUN_02004900
- ldr r1, _020045C0 ; =0x000003E9
- cmp r0, r1
- beq _02004594
- add r1, r1, #0x2
- cmp r0, r1
- beq _02004594
- add r0, r5, #0x0
- mov r1, #0x4
- bl FUN_02003FA8
- bl ErrorHandling
- b _0200459C
-_02004594:
- ldrh r0, [r4, #0x0]
- mov r1, #0x6
- bl FUN_02003FA8
-_0200459C:
- mov r0, #0x1a
- bl FUN_02003D38
- bl FUN_02003F3C
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_020047C8
- mov r0, #0x7f
- mov r1, #0x28
- mov r2, #0x0
- bl FUN_0200538C
- mov r0, #0x0
- bl FUN_02004DBC
- pop {r3-r5, pc}
- .balign 4
-_020045C0: .word 0x000003E9
-
- thumb_func_start FUN_020045C4
-FUN_020045C4: ; 0x020045C4
- push {r3-r7, lr}
- add r7, r0, #0x0
- mov r0, #0x12
- add r5, r1, #0x0
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x1f
- bl FUN_02003D38
- add r4, r0, #0x0
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- beq _020045E4
- cmp r5, #0x0
- bne _02004642
-_020045E4:
- mov r0, #0x1
- bl FUN_02004748
- bl FUN_02003F64
- ldrh r0, [r4, #0x0]
- mov r1, #0x2
- bl FUN_02003FA8
- mov r0, #0x18
- bl FUN_02003D38
- bl FUN_02003F3C
- mov r0, #0x4
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl FUN_02003F3C
- ldrh r0, [r4, #0x0]
- bl FUN_02004900
- ldr r1, _02004644 ; =0x000003E9
- cmp r0, r1
- beq _02004630
- add r1, r1, #0x2
- cmp r0, r1
- beq _02004630
- add r0, r7, #0x0
- mov r1, #0x4
- bl FUN_02003FA8
- bl ErrorHandling
- b _02004638
-_02004630:
- ldrh r0, [r4, #0x0]
- mov r1, #0x4
- bl FUN_02003FA8
-_02004638:
- mov r0, #0x1a
- bl FUN_02003D38
- bl FUN_02003F3C
-_02004642:
- pop {r3-r7, pc}
- .balign 4
-_02004644: .word 0x000003E9
-
- thumb_func_start FUN_02004648
-FUN_02004648: ; 0x02004648
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_020051AC
- mov r0, #0x2
- bl FUN_02004748
- bl FUN_02003F64
- mov r0, #0x5
- bl FUN_02004180
- mov r0, #0x19
- bl FUN_02003D38
- bl FUN_02003F3C
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004680
-FUN_02004680: ; 0x02004680
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- bl FUN_02004810
- mov r0, #0x4
- bl FUN_020044A8
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
-
- thumb_func_start FUN_020046A0
-FUN_020046A0: ; 0x020046A0
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- mov r0, #0x6
- bl FUN_020044A8
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020046C4
-FUN_020046C4: ; 0x020046C4
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x17
- bl FUN_02003D38
- bl FUN_0200541C
- mov r0, #0x7
- bl FUN_020044A8
- mov r0, #0x1
- bl FUN_02004DBC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020046E8
-FUN_020046E8: ; 0x020046E8
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02004738
- add r0, r4, #0x0
- bl FUN_02004180
- mov r0, #0x1b
- bl FUN_02003D38
- bl FUN_02003F3C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004704
-FUN_02004704: ; 0x02004704
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x17
- add r4, r1, #0x0
- bl FUN_02003D38
- bl FUN_0200541C
- add r0, r5, #0x0
- bl FUN_020044A8
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004724
-FUN_02004724: ; 0x02004724
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- bl FUN_020051AC
- add r0, r4, #0x0
- bl FUN_0200521C
- pop {r4, pc}
-
- thumb_func_start FUN_02004738
-FUN_02004738: ; 0x02004738
- push {r3, lr}
- mov r0, #0x4
- bl FUN_02004748
- bl FUN_02003F64
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004748
-FUN_02004748: ; 0x02004748
- push {r3-r5, lr}
- add r4, r0, #0x0
- bl FUN_02003D30
- cmp r4, #0x7
- blt _02004762
- bl ErrorHandling
- mov r0, #0x1a
- bl FUN_02003D38
- ldr r0, [r0, #0x0]
- pop {r3-r5, pc}
-_02004762:
- cmp r4, #0x6
- bhi _020047C4
- add r0, r4, r4
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_02004772: ; jump table (using 16-bit offset)
- .short _02004780 - _02004772 - 2; case 0
- .short _0200478A - _02004772 - 2; case 1
- .short _02004794 - _02004772 - 2; case 2
- .short _0200479E - _02004772 - 2; case 3
- .short _020047A8 - _02004772 - 2; case 4
- .short _020047B2 - _02004772 - 2; case 5
- .short _020047BC - _02004772 - 2; case 6
-_02004780:
- mov r0, #0x16
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_0200478A:
- mov r0, #0x17
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_02004794:
- mov r0, #0x18
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_0200479E:
- mov r0, #0x19
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047A8:
- mov r0, #0x1a
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047B2:
- mov r0, #0x1b
- bl FUN_02003D38
- add r5, r0, #0x0
- b _020047C4
-_020047BC:
- mov r0, #0x1c
- bl FUN_02003D38
- add r5, r0, #0x0
-_020047C4:
- ldr r0, [r5, #0x0]
- pop {r3-r5, pc}
-
- thumb_func_start FUN_020047C8
-FUN_020047C8: ; 0x020047C8
- push {r4-r6, lr}
- add r5, r1, #0x0
- cmp r0, #0x1
- bne _020047DC
- mov r0, #0xb
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r4, #0x0
- b _020047EA
-_020047DC:
- cmp r0, #0x7
- bne _0200480E
- mov r0, #0xc
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r4, #0x7
-_020047EA:
- cmp r5, #0x0
- bne _02004800
- add r0, r4, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- bl FUN_02004110
-_02004800:
- add r0, r4, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C0F8C
- strb r5, [r6, #0x0]
-_0200480E:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004810
-FUN_02004810: ; 0x02004810
- push {r4, lr}
- mov r0, #0xb
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0xc
- bl FUN_02003D38
- mov r1, #0x0
- strb r1, [r4, #0x0]
- strb r1, [r0, #0x0]
- pop {r4, pc}
-
- thumb_func_start FUN_02004828
-FUN_02004828: ; 0x02004828
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- blx FUN_020C0EF4
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0200483C
-FUN_0200483C: ; 0x0200483C
- push {r4, lr}
- add r4, r1, #0x0
- bpl _02004844
- mov r4, #0x0
-_02004844:
- cmp r4, #0x7f
- ble _0200484A
- mov r4, #0x7f
-_0200484A:
- bl FUN_02003FF4
- add r1, r4, #0x0
- blx FUN_020C0F30
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004858
-FUN_02004858: ; 0x02004858
- push {r3-r5, lr}
- add r5, r1, #0x0
- blx FUN_020C23FC
- cmp r5, #0x1
- beq _02004868
- cmp r5, #0x8
- bne _0200486C
-_02004868:
- mov r4, #0x7f
- b _02004872
-_0200486C:
- cmp r0, #0x0
- beq _0200488A
- ldrb r4, [r0, #0x2]
-_02004872:
- bl FUN_020313EC
- cmp r0, #0x1
- bne _0200488A
- add r0, r4, #0x0
- mov r1, #0x5
- blx _s32_div_f
- add r1, r0, #0x0
- add r0, r5, #0x0
- bl FUN_0200483C
-_0200488A:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0200488C
-FUN_0200488C: ; 0x0200488C
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r1, r4, #0x0
- bl FUN_0200483C
- pop {r4, pc}
-
- thumb_func_start FUN_020048A0
-FUN_020048A0: ; 0x020048A0
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- mov r2, #0x0
- mvn r2, r2
- add r1, r5, #0x0
- add r3, r2, #0x0
- str r4, [sp, #0x0]
- blx FUN_020C3910
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020048BC
-FUN_020048BC: ; 0x020048BC
- push {r4, lr}
- add r4, r0, #0x0
- bpl _020048C6
- bl ErrorHandling
-_020048C6:
- add r0, r4, #0x0
- blx FUN_020C0F50
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_020048D0
-FUN_020048D0: ; 0x020048D0
- push {r3, lr}
- cmp r0, #0x0
- bne _020048DA
- mov r0, #0xff
- pop {r3, pc}
-_020048DA:
- blx FUN_020C23FC
- cmp r0, #0x0
- bne _020048E6
- mov r0, #0xff
- pop {r3, pc}
-_020048E6:
- ldrb r0, [r0, #0x5]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020048EC
-FUN_020048EC: ; 0x020048EC
- ldr r3, _020048F0 ; =FUN_020C0E14
- bx r3
- .balign 4
-_020048F0: .word FUN_020C0E14
-
- thumb_func_start FUN_020048F4
-FUN_020048F4: ; 0x020048F4
- push {r3, lr}
- bl FUN_02004900
- blx FUN_020C22D0
- pop {r3, pc}
-
- thumb_func_start FUN_02004900
-FUN_02004900: ; 0x02004900
- push {r3, lr}
- blx FUN_020C23FC
- cmp r0, #0x0
- bne _0200490E
- mov r0, #0x0
- pop {r3, pc}
-_0200490E:
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004914
-FUN_02004914: ; 0x02004914
- ldr r3, _02004918 ; =MIC_StartAutoSampling
- bx r3
- .balign 4
-_02004918: .word MIC_StartAutoSampling
-
- thumb_func_start FUN_0200491C
-FUN_0200491C: ; 0x0200491C
- push {r3, lr}
- bl FUN_02003D30
- blx MIC_StopAutoSampling
- pop {r3, pc}
-
- thumb_func_start FUN_02004928
-FUN_02004928: ; 0x02004928
- push {r3, lr}
- blx MIC_DoSamplingAsync
- pop {r3, pc}
-
- thumb_func_start FUN_02004930
-FUN_02004930: ; 0x02004930
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004954
- cmp r5, #0xf
- beq _02004954
- bl ErrorHandling
-_02004954:
- cmp r5, #0xe
- bne _02004962
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _02004962
- bl ErrorHandling
-_02004962:
- cmp r5, #0xf
- bne _02004970
- ldrb r0, [r4, #0x0]
- cmp r0, #0x0
- bne _02004970
- bl ErrorHandling
-_02004970:
- cmp r5, #0xe
- bne _0200497C
- mov r0, #0x0
- bl FUN_02003D38
- pop {r4-r6, pc}
-_0200497C:
- mov r0, #0x1
- bl FUN_02003D38
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004984
-FUN_02004984: ; 0x02004984
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _020049A8
- cmp r5, #0xf
- beq _020049A8
- bl ErrorHandling
-_020049A8:
- cmp r5, #0xe
- bne _020049D6
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- bne _020049D0
- mov r0, #0x0
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, r5, #0x0
- blx FUN_020C0688
- str r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020049CA
- mov r0, #0x0
- pop {r4-r6, pc}
-_020049CA:
- mov r0, #0x1
- strb r0, [r6, #0x0]
- b _020049FE
-_020049D0:
- bl ErrorHandling
- b _020049FE
-_020049D6:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020049FA
- mov r0, #0x1
- bl FUN_02003D38
- add r6, r0, #0x0
- add r0, r5, #0x0
- blx FUN_020C0688
- str r0, [r6, #0x0]
- cmp r0, #0x0
- bne _020049F4
- mov r0, #0x0
- pop {r4-r6, pc}
-_020049F4:
- mov r0, #0x1
- strb r0, [r4, #0x0]
- b _020049FE
-_020049FA:
- bl ErrorHandling
-_020049FE:
- mov r0, #0x1
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02004A04
-FUN_02004A04: ; 0x02004A04
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004A2A
- cmp r5, #0xf
- beq _02004A2A
- bl ErrorHandling
- pop {r4-r6, pc}
-_02004A2A:
- cmp r5, #0xe
- bne _02004A4C
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02004A46
- add r0, r5, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- blx FUN_020C0670
- mov r0, #0x0
- strb r0, [r6, #0x0]
- pop {r4-r6, pc}
-_02004A46:
- bl ErrorHandling
- pop {r4-r6, pc}
-_02004A4C:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _02004A64
- add r0, r5, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- blx FUN_020C0670
- mov r0, #0x0
- strb r0, [r4, #0x0]
- pop {r4-r6, pc}
-_02004A64:
- bl ErrorHandling
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02004A6C
-FUN_02004A6C: ; 0x02004A6C
- push {r3-r5, lr}
- sub sp, #0x18
- add r3, r0, #0x0
- ldr r0, [r3, #0x10]
- add r4, r1, #0x0
- str r0, [sp, #0x0]
- ldr r0, [r3, #0x14]
- str r0, [sp, #0x4]
- ldr r0, [r3, #0x18]
- str r0, [sp, #0x8]
- ldr r0, [r3, #0x1c]
- str r0, [sp, #0xc]
- ldr r0, [r3, #0x20]
- str r0, [sp, #0x10]
- ldr r0, [r3, #0x24]
- str r0, [sp, #0x14]
- ldr r0, [r3, #0x0]
- ldr r1, [r3, #0x4]
- ldr r2, [r3, #0x8]
- ldr r0, [r0, #0x0]
- ldr r3, [r3, #0xc]
- blx FUN_020C054C
- add r5, r0, #0x0
- bne _02004AA4
- add r0, r4, #0x0
- bl FUN_02004A04
-_02004AA4:
- add r0, r5, #0x0
- add sp, #0x18
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02004AAC
-FUN_02004AAC: ; 0x02004AAC
- push {r3, lr}
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- blx FUN_020C0510
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004ABC
-FUN_02004ABC: ; 0x02004ABC
- push {r3, lr}
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- blx FUN_020C03B8
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004ACC
-FUN_02004ACC: ; 0x02004ACC
- push {r4, lr}
- add r4, r1, #0x0
- cmp r4, #0x7f
- bls _02004AD6
- mov r4, #0x7f
-_02004AD6:
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r4, #0x0
- blx FUN_020C041C
- pop {r4, pc}
-
- thumb_func_start FUN_02004AE4
-FUN_02004AE4: ; 0x02004AE4
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r4, #0x0
- blx FUN_020C044C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004AF8
-FUN_02004AF8: ; 0x02004AF8
- push {r3-r5, lr}
- add r4, r0, #0x0
- add r5, r1, #0x0
- bl FUN_020313EC
- cmp r0, #0x1
- bne _02004B20
- add r0, r4, #0x0
- bl FUN_02004930
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x5
- blx _s32_div_f
- add r1, r0, #0x0
- ldr r0, [r4, #0x0]
- blx FUN_020C04DC
- pop {r3-r5, pc}
-_02004B20:
- add r0, r4, #0x0
- bl FUN_02004930
- ldr r0, [r0, #0x0]
- add r1, r5, #0x0
- blx FUN_020C04DC
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004B30
-FUN_02004B30: ; 0x02004B30
- push {r3-r7, lr}
- sub sp, #0x30
- add r6, r0, #0x0
- str r1, [sp, #0x0]
- str r2, [sp, #0x4]
- add r5, r3, #0x0
- bl FUN_02003D30
- mov r0, #0x21
- bl FUN_02003D38
- add r4, r0, #0x0
- cmp r5, #0xe
- beq _02004B54
- cmp r5, #0xf
- beq _02004B54
- bl ErrorHandling
-_02004B54:
- add r0, r6, #0x0
- blx FUN_020C226C
- add r7, r0, #0x0
- bne _02004B68
- bl ErrorHandling
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B68:
- ldr r0, [r7, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- blx FUN_020C217C
- add r6, r0, #0x0
- bne _02004B80
- bl ErrorHandling
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B80:
- cmp r5, #0xe
- bne _02004BCE
- ldr r0, [sp, #0x48]
- add r1, r6, #0x0
- bl FUN_02016998
- str r0, [r4, #0x0]
- cmp r0, #0x0
- bne _02004B9C
- bl ErrorHandling
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004B9C:
- mov r1, #0x0
- add r2, r6, #0x0
- blx FUN_020DF4A4
- ldr r0, [r7, #0x0]
- ldr r1, [r4, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- add r2, r6, #0x0
- mov r3, #0x0
- blx FUN_020C2104
- mov r1, #0x0
- mvn r1, r1
- cmp r0, r1
- bne _02004BC6
- bl ErrorHandling
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02004BC6:
- ldr r0, [r4, #0x0]
- add r1, r6, #0x0
- bl FUN_02004C1C
-_02004BCE:
- add r0, r5, #0x0
- bl FUN_02004930
- mov r1, #0x0
- str r1, [sp, #0xc]
- str r0, [sp, #0x8]
- ldr r0, [r4, #0x0]
- str r0, [sp, #0x10]
- ldr r0, _02004C18 ; =0x00003443
- str r1, [sp, #0x14]
- str r0, [sp, #0x20]
- ldr r0, [sp, #0x0]
- str r1, [sp, #0x18]
- str r0, [sp, #0x24]
- mov r0, #0x6
- lsl r0, r0, #0xc
- str r0, [sp, #0x28]
- ldr r0, [sp, #0x4]
- add r1, r5, #0x0
- str r0, [sp, #0x2c]
- add r0, sp, #0x8
- str r6, [sp, #0x1c]
- bl FUN_02004A6C
- add r4, r0, #0x0
- ldr r1, [sp, #0x0]
- add r0, r5, #0x0
- bl FUN_02004AF8
- mov r0, #0xe
- bl FUN_02003D38
- mov r1, #0x1
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- add sp, #0x30
- pop {r3-r7, pc}
- .balign 4
-_02004C18: .word 0x00003443
-
- thumb_func_start FUN_02004C1C
-FUN_02004C1C: ; 0x02004C1C
- push {r3-r6}
- mov r5, #0x0
- lsr r6, r1, #0x1
- beq _02004C36
- sub r2, r1, #0x1
-_02004C26:
- sub r3, r2, r5
- ldrb r4, [r0, r5]
- ldrb r1, [r0, r3]
- strb r1, [r0, r5]
- add r5, r5, #0x1
- strb r4, [r0, r3]
- cmp r5, r6
- blo _02004C26
-_02004C36:
- pop {r3-r6}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02004C3C
-FUN_02004C3C: ; 0x02004C3C
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_02003D30
- mov r0, #0xe
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x21
- bl FUN_02003D38
- add r6, r0, #0x0
- cmp r5, #0xe
- beq _02004C60
- cmp r5, #0xf
- beq _02004C60
- bl ErrorHandling
-_02004C60:
- add r0, r5, #0x0
- bl FUN_02004AAC
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _02004C76
- mov r0, #0x0
- strb r0, [r4, #0x0]
- ldr r0, [r6, #0x0]
- bl FUN_02016A18
-_02004C76:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004C78
-FUN_02004C78: ; 0x02004C78
- ldr r3, _02004C7C ; =FUN_020C1E58
- bx r3
- .balign 4
-_02004C7C: .word FUN_020C1E58
-
- thumb_func_start FUN_02004C80
-FUN_02004C80: ; 0x02004C80
- push {r3-r4, lr}
- sub sp, #0x4
- add r4, r0, #0x0
- bl FUN_02003D30
- mov r0, #0x3
- bl FUN_02003D38
- mov r1, #0x1
- mov r3, #0xfa
- lsl r1, r1, #0xc
- mov r2, #0x0
- lsl r3, r3, #0x6
- str r4, [sp, #0x0]
- blx FUN_020C1FF0
- add sp, #0x4
- pop {r3-r4, pc}
-
- thumb_func_start FUN_02004CA4
-FUN_02004CA4: ; 0x02004CA4
- ldr r3, _02004CA8 ; =FUN_020C1F54
- bx r3
- .balign 4
-_02004CA8: .word FUN_020C1F54
-
- thumb_func_start FUN_02004CAC
-FUN_02004CAC: ; 0x02004CAC
- ldr r3, _02004CB0 ; =FUN_020C1FA4
- bx r3
- .balign 4
-_02004CB0: .word FUN_020C1FA4
-
- thumb_func_start FUN_02004CB4
-FUN_02004CB4: ; 0x02004CB4
- push {r3-r4, lr}
- sub sp, #0xc
- bl FUN_02003D30
- mov r0, #0x4
- bl FUN_02003D38
- mov r1, #0x0
- mov r2, #0x1c
- blx MI_CpuFill8
- mov r0, #0x3
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x4
- bl FUN_02003D38
- mov r2, #0x2
- ldr r1, _02004CF4 ; =FUN_02005068
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- str r0, [sp, #0x8]
- lsl r1, r2, #0xb
- ldr r3, _02004CF8 ; =0x000055F0
- add r0, r4, #0x0
- mov r2, #0x0
- blx FUN_020C1EA4
- add sp, #0xc
- pop {r3-r4, pc}
- nop
-_02004CF4: .word FUN_02005068
-_02004CF8: .word 0x000055F0
-
- thumb_func_start FUN_02004CFC
-FUN_02004CFC: ; 0x02004CFC
- ldr r3, _02004D00 ; =FUN_020C1E68
- bx r3
- .balign 4
-_02004D00: .word FUN_020C1E68
-
- thumb_func_start FUN_02004D04
-FUN_02004D04: ; 0x02004D04
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x13
- bl FUN_02003D38
- cmp r4, #0x8
- ble _02004D16
- mov r4, #0x8
- b _02004D1C
-_02004D16:
- cmp r4, #0x0
- bge _02004D1C
- mov r4, #0x0
-_02004D1C:
- strb r4, [r0, #0x0]
- pop {r4, pc}
-
- thumb_func_start FUN_02004D20
-FUN_02004D20: ; 0x02004D20
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- blx FUN_020C0EA4
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D34
-FUN_02004D34: ; 0x02004D34
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl FUN_02004D20
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D4C
-FUN_02004D4C: ; 0x02004D4C
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- blx FUN_020C0E7C
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02004D60
-FUN_02004D60: ; 0x02004D60
- push {r4, lr}
- add r4, r0, #0x0
- blx FUN_020C0174
- ldr r0, _02004D70 ; =0x021C3DD8
- str r4, [r0, #0x0]
- pop {r4, pc}
- nop
-_02004D70: .word 0x021C3DD8
-
- thumb_func_start FUN_02004D74
-FUN_02004D74: ; 0x02004D74
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x6
- bl FUN_02003D38
- str r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004D84
-FUN_02004D84: ; 0x02004D84
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x7
- bl FUN_02003D38
- str r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004D94
-FUN_02004D94: ; 0x02004D94
- push {r3, lr}
- mov r0, #0x7
- bl FUN_02003D38
- ldrh r1, [r0, #0x0]
- cmp r1, #0x0
- bne _02004DAA
- mov r1, #0x0
- strh r1, [r0, #0x0]
- add r0, r1, #0x0
- pop {r3, pc}
-_02004DAA:
- sub r1, r1, #0x1
- strh r1, [r0, #0x0]
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02004DB4
-FUN_02004DB4: ; 0x02004DB4
- ldr r0, _02004DB8 ; =0x021C3DE0
- bx lr
- .balign 4
-_02004DB8: .word 0x021C3DE0
-
- thumb_func_start FUN_02004DBC
-FUN_02004DBC: ; 0x02004DBC
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x12
- bl FUN_02003D38
- strb r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02004DCC
-FUN_02004DCC: ; 0x02004DCC
- push {r4-r7, lr}
- sub sp, #0xc
- add r5, r0, #0x0
- mov r0, #0x15
- add r6, r1, #0x0
- add r7, r2, #0x0
- str r3, [sp, #0x8]
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, sp, #0x10
- ldrb r0, [r0, #0x10]
- ldr r3, [sp, #0x8]
- add r1, r6, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x24]
- add r2, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- bl FUN_02004E44
- mov r0, #0x0
- strb r0, [r4, #0x0]
- mov r0, #0x5
- bl FUN_02003CE8
- mov r0, #0x1
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02004E08
-FUN_02004E08: ; 0x02004E08
- push {r4-r7, lr}
- sub sp, #0xc
- add r5, r0, #0x0
- mov r0, #0x8
- add r6, r1, #0x0
- add r7, r2, #0x0
- str r3, [sp, #0x8]
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, sp, #0x10
- ldrb r0, [r0, #0x14]
- ldr r3, [sp, #0x8]
- add r1, r6, #0x0
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x28]
- add r2, r7, #0x0
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- bl FUN_02004E44
- ldr r0, [sp, #0x20]
- str r0, [r4, #0x0]
- mov r0, #0x6
- bl FUN_02003CE8
- mov r0, #0x1
- add sp, #0xc
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02004E44
-FUN_02004E44: ; 0x02004E44
- push {r3-r7, lr}
- add r6, r2, #0x0
- mov r0, #0x2
- add r5, r1, #0x0
- add r7, r3, #0x0
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x0
- add r1, r6, #0x0
- bl FUN_020053CC
- mov r0, #0x0
- bl FUN_02004110
- add r0, r5, #0x0
- bl FUN_02004130
- add r0, r7, #0x0
- bl FUN_02004D84
- add r0, r5, #0x0
- bl FUN_020048F4
- str r0, [r4, #0x0]
- add r0, sp, #0x8
- ldrb r0, [r0, #0x10]
- bl FUN_02004DBC
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02004E80
-FUN_02004E80: ; 0x02004E80
- cmp r0, #0x0
- bne _02004E88
- mov r0, #0x0
- bx lr
-_02004E88:
- add r0, #0xc
- bx lr
-
- thumb_func_start FUN_02004E8C
-FUN_02004E8C: ; 0x02004E8C
- cmp r0, #0x0
- bne _02004E94
- mov r0, #0x0
- bx lr
-_02004E94:
- ldr r0, [r0, #0x8]
- bx lr
-
- thumb_func_start FUN_02004E98
-FUN_02004E98: ; 0x02004E98
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x5
- bl FUN_02004748
- bl FUN_02003F64
- lsl r0, r5, #0x10
- lsr r4, r0, #0x10
- ldr r0, _02004ECC ; =0x000001B9
- cmp r4, r0
- beq _02004EBC
- add r0, #0x36
- cmp r5, r0
- bgt _02004EBA
- cmp r5, #0x0
- bne _02004EBC
-_02004EBA:
- mov r4, #0x1
-_02004EBC:
- add r0, r4, #0x0
- bl FUN_02003FC4
- add r0, r4, #0x0
- bl FUN_02004ED0
- pop {r3-r5, pc}
- nop
-_02004ECC: .word 0x000001B9
-
- thumb_func_start FUN_02004ED0
-FUN_02004ED0: ; 0x02004ED0
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x20
- bl FUN_02003D38
- add r4, r0, #0x0
- lsl r0, r5, #0x10
- ldr r1, _02004F24 ; =0x000001B9
- lsr r0, r0, #0x10
- cmp r0, r1
- beq _02004EF2
- add r1, #0x36
- cmp r5, r1
- bgt _02004EF0
- cmp r5, #0x0
- bne _02004EF2
-_02004EF0:
- mov r0, #0x1
-_02004EF2:
- blx FUN_020C226C
- cmp r0, #0x0
- bne _02004F02
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r5, pc}
-_02004F02:
- ldr r0, [r0, #0x0]
- lsl r0, r0, #0x8
- lsr r0, r0, #0x8
- blx FUN_020C20DC
- cmp r0, #0x0
- bne _02004F18
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r5, pc}
-_02004F18:
- mov r1, #0x0
- blx SND_GetWaveDataAddress
- str r0, [r4, #0x0]
- pop {r3-r5, pc}
- nop
-_02004F24: .word 0x000001B9
-
- thumb_func_start FUN_02004F28
-FUN_02004F28: ; 0x02004F28
- push {r4-r6, lr}
- mov r0, #0x1
- add r5, r1, #0x0
- add r6, r2, #0x0
- bl FUN_02004F64
- mov r1, #0x3
- add r4, r0, #0x0
- add r0, r6, #0x0
- lsl r1, r1, #0x8
- ldr r5, [r5, #0x8]
- blx _s32_div_f
- lsl r1, r0, #0x1
- bpl _02004F50
- mov r0, #0x20
- blx _s32_div_f
- neg r0, r0
- b _02004F5A
-_02004F50:
- cmp r1, #0x0
- bne _02004F58
- mov r0, #0x20
- b _02004F5A
-_02004F58:
- lsl r0, r1, #0x5
-_02004F5A:
- mul r0, r4
- cmp r0, r5
- blo _02004F62
- mov r0, #0x0
-_02004F62:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02004F64
-FUN_02004F64: ; 0x02004F64
- push {r3, lr}
- bl FUN_02003FF4
- blx FUN_020C0DD4
- pop {r3, pc}
-
- thumb_func_start FUN_02004F70
-FUN_02004F70: ; 0x02004F70
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x0]
- add r4, r1, #0x0
- add r6, r2, #0x0
- ldr r1, [sp, #0x0]
- mov r0, #0x1
- add r2, r3, #0x0
- bl FUN_02004F28
- add r1, r0, #0x0
- mov r12, r0
- sub r1, #0x64
- bpl _02004F8E
- mov r1, #0x0
-_02004F8E:
- ldr r0, [sp, #0x0]
- mov r3, #0x0
- add r0, r0, r1
- ldrb r0, [r0, #0xc]
- add r7, r3, #0x0
- cmp r0, #0x80
- bhs _02004FA0
- mov r0, #0x1
- b _02004FA2
-_02004FA0:
- sub r0, r3, #0x1
-_02004FA2:
- lsl r0, r0, #0x18
- asr r5, r0, #0x18
- mov r0, r12
- cmp r1, r0
- bhs _02005022
-_02004FAC:
- mov r0, #0x0
- cmp r5, #0x0
- ble _02004FC6
- ldr r2, [sp, #0x0]
- add r2, r2, r1
- str r2, [sp, #0x4]
- ldrb r2, [r2, #0xc]
- cmp r2, #0x80
- bls _02004FC2
- mov r0, #0x1
- b _02004FD8
-_02004FC2:
- add r3, r3, #0x1
- b _02004FD8
-_02004FC6:
- ldr r2, [sp, #0x0]
- add r2, r2, r1
- str r2, [sp, #0x4]
- ldrb r2, [r2, #0xc]
- cmp r2, #0x80
- bhs _02004FD6
- mov r0, #0x1
- b _02004FD8
-_02004FD6:
- add r3, r3, #0x1
-_02004FD8:
- cmp r0, #0x1
- bne _0200501A
- ldr r5, _02005064 ; =0x020ECB8C
- mov r2, #0x0
-_02004FE0:
- ldrb r0, [r5, #0x0]
- cmp r3, r0
- bge _02004FEA
- add r7, r2, #0x0
- b _02004FF2
-_02004FEA:
- add r2, r2, #0x1
- add r5, r5, #0x1
- cmp r2, #0x9
- blt _02004FE0
-_02004FF2:
- cmp r7, r6
- blt _02004FF8
- sub r7, r6, #0x1
-_02004FF8:
- cmp r3, #0x0
- beq _02005006
- sub r0, r6, #0x1
- sub r0, r0, r7
- ldrb r2, [r4, r0]
- add r2, r2, #0x1
- strb r2, [r4, r0]
-_02005006:
- ldr r0, [sp, #0x4]
- mov r3, #0x0
- ldrb r0, [r0, #0xc]
- cmp r0, #0x80
- bhs _02005014
- mov r0, #0x1
- b _02005016
-_02005014:
- sub r0, r3, #0x1
-_02005016:
- lsl r0, r0, #0x18
- asr r5, r0, #0x18
-_0200501A:
- add r1, r1, #0x2
- mov r0, r12
- cmp r1, r0
- blo _02004FAC
-_02005022:
- mov r2, #0x0
- cmp r6, #0x0
- ble _02005038
- mov r0, #0x9
-_0200502A:
- ldrb r1, [r4, r2]
- cmp r1, #0xa
- blo _02005032
- strb r0, [r4, r2]
-_02005032:
- add r2, r2, #0x1
- cmp r2, r6
- blt _0200502A
-_02005038:
- sub r2, r6, #0x1
- mov r3, #0x0
- cmp r2, #0x0
- ble _02005060
-_02005040:
- ldrb r0, [r4, r3]
- add r1, r4, r3
- cmp r0, #0x0
- bne _0200505A
- ldrb r0, [r1, #0x1]
- cmp r0, #0x0
- beq _0200505A
- add r0, r3, #0x1
- ldrb r0, [r4, r0]
- add sp, #0x8
- lsr r0, r0, #0x1
- strb r0, [r1, #0x0]
- pop {r3-r7, pc}
-_0200505A:
- add r3, r3, #0x1
- cmp r3, r2
- blt _02005040
-_02005060:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02005064: .word 0x020ECB8C
-
- thumb_func_start FUN_02005068
-FUN_02005068: ; 0x02005068
- push {r3-r7, lr}
- sub sp, #0x30
- add r5, r0, #0x0
- ldr r0, [sp, #0x48]
- add r6, r1, #0x0
- str r0, [sp, #0xc]
- mov r0, #0x13
- str r2, [sp, #0x0]
- add r4, r3, #0x0
- bl FUN_02003D38
- add r7, r0, #0x0
- cmp r4, #0x1
- beq _0200508A
- ldr r0, [sp, #0x0]
- lsr r0, r0, #0x1
- str r0, [sp, #0x0]
-_0200508A:
- ldrb r2, [r7, #0x0]
- cmp r2, #0x0
- beq _0200515A
- mov r0, #0x0
- cmp r2, #0x0
- ble _020050BC
- add r1, sp, #0x10
-_02005098:
- ldr r3, [sp, #0x0]
- sub r2, r3, r2
- add r2, r0, r2
- lsl r2, r2, #0x1
- ldrsh r2, [r5, r2]
- strh r2, [r1, #0x0]
- ldrb r3, [r7, #0x0]
- ldr r2, [sp, #0x0]
- sub r2, r2, r3
- add r2, r0, r2
- lsl r2, r2, #0x1
- ldrsh r2, [r6, r2]
- add r0, r0, #0x1
- strh r2, [r1, #0x2]
- ldrb r2, [r7, #0x0]
- add r1, r1, #0x4
- cmp r0, r2
- blt _02005098
-_020050BC:
- ldr r0, [sp, #0x0]
- sub r4, r0, #0x1
- sub r0, r2, #0x1
- cmp r4, r0
- blt _02005126
- lsl r1, r4, #0x1
- add r0, r5, r1
- str r0, [sp, #0x8]
- add r0, r6, r1
- str r0, [sp, #0x4]
-_020050D0:
- mov r0, #0x0
- add r1, r0, #0x0
- cmp r2, #0x0
- ble _020050E6
-_020050D8:
- sub r3, r4, r1
- lsl r3, r3, #0x1
- ldrsh r3, [r5, r3]
- add r1, r1, #0x1
- add r0, r0, r3
- cmp r1, r2
- blt _020050D8
-_020050E6:
- add r1, r2, #0x0
- blx _s32_div_f
- ldr r1, [sp, #0x8]
- strh r0, [r1, #0x0]
- mov r0, #0x0
- ldrb r1, [r7, #0x0]
- add r2, r0, #0x0
- cmp r1, #0x0
- ble _02005108
-_020050FA:
- sub r3, r4, r2
- lsl r3, r3, #0x1
- ldrsh r3, [r6, r3]
- add r2, r2, #0x1
- add r0, r0, r3
- cmp r2, r1
- blt _020050FA
-_02005108:
- blx _s32_div_f
- ldr r1, [sp, #0x4]
- sub r4, r4, #0x1
- strh r0, [r1, #0x0]
- ldr r0, [sp, #0x8]
- ldrb r2, [r7, #0x0]
- sub r0, r0, #0x2
- str r0, [sp, #0x8]
- add r0, r1, #0x0
- sub r0, r0, #0x2
- str r0, [sp, #0x4]
- sub r0, r2, #0x1
- cmp r4, r0
- bge _020050D0
-_02005126:
- mov r1, #0x0
- cmp r2, #0x0
- ble _0200514A
- add r0, sp, #0x10
- mov r4, #0x2
-_02005130:
- mov r2, #0x0
- ldrsh r3, [r0, r2]
- ldr r2, [sp, #0xc]
- add r1, r1, #0x1
- strh r3, [r2, #0x0]
- ldrsh r3, [r0, r4]
- add r0, r0, #0x4
- strh r3, [r2, #0x2]
- add r2, r2, #0x4
- str r2, [sp, #0xc]
- ldrb r2, [r7, #0x0]
- cmp r1, r2
- blt _02005130
-_0200514A:
- ldr r1, [sp, #0x0]
- add r0, r5, #0x0
- blx DC_FlushRange
- ldr r1, [sp, #0x0]
- add r0, r6, #0x0
- blx DC_FlushRange
-_0200515A:
- add sp, #0x30
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02005160
-FUN_02005160: ; 0x02005160
- ldr r3, _02005168 ; =FUN_020C1148
- add r1, r0, #0x0
- mov r0, #0x7
- bx r3
- .balign 4
-_02005168: .word FUN_020C1148
-
- thumb_func_start FUN_0200516C
-FUN_0200516C: ; 0x0200516C
- push {r3, lr}
- cmp r0, #0x0
- bne _02005180
- ldr r0, _020051A4 ; =0x000007FF
- bl FUN_02005160
- mov r0, #0x0
- bl FUN_02004CA4
- b _0200519C
-_02005180:
- cmp r0, #0x1
- ldr r0, _020051A8 ; =0x00007FFF
- bne _02005192
- bl FUN_02005160
- mov r0, #0x1e
- bl FUN_02004C80
- b _0200519C
-_02005192:
- bl FUN_02005160
- mov r0, #0xf
- bl FUN_02004C80
-_0200519C:
- bl FUN_02004C78
- pop {r3, pc}
- nop
-_020051A4: .word 0x000007FF
-_020051A8: .word 0x00007FFF
-
- thumb_func_start FUN_020051AC
-FUN_020051AC: ; 0x020051AC
- push {r3, lr}
- bl FUN_02005404
- cmp r0, #0x0
- bne _020051E0
- mov r0, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- mov r1, #0x0
- mvn r1, r1
- cmp r0, r1
- beq _020051E0
- bl FUN_02004124
- ldr r1, _020051E8 ; =0x0000047E
- cmp r0, r1
- beq _020051E0
- bl FUN_02005454
- mov r0, #0x1
- add r1, r0, #0x0
- bl FUN_020047C8
- pop {r3, pc}
-_020051E0:
- bl FUN_0200541C
- pop {r3, pc}
- nop
-_020051E8: .word 0x0000047E
-
- thumb_func_start FUN_020051EC
-FUN_020051EC: ; 0x020051EC
- ldr r3, _020051F0 ; =FUN_020C1180
- bx r3
- .balign 4
-_020051F0: .word FUN_020C1180
-
- thumb_func_start FUN_020051F4
-FUN_020051F4: ; 0x020051F4
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r4, r0, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C3980
- add r6, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_0200526C
- add r0, r6, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_0200521C
-FUN_0200521C: ; 0x0200521C
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_020048D0
- add r4, r0, #0x0
- bl FUN_02004018
- add r6, r0, #0x0
- cmp r4, #0x7
- bne _0200523E
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_02005288
- add r4, r0, #0x0
- b _02005258
-_0200523E:
- cmp r4, #0x1
- bne _02005250
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_020052B8
- add r4, r0, #0x0
- b _02005258
-_02005250:
- bl ErrorHandling
- mov r0, #0x0
- pop {r4-r6, pc}
-_02005258:
- mov r0, #0x0
- bl FUN_02004DBC
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl FUN_0200526C
- add r0, r4, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_0200526C
-FUN_0200526C: ; 0x0200526C
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl FUN_02004110
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02004858
- mov r0, #0x1
- bl FUN_02003CE8
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02005288
-FUN_02005288: ; 0x02005288
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x3
- add r4, r2, #0x0
- bl FUN_02004748
- bl FUN_02003F64
- add r0, r5, #0x0
- bl FUN_02003F90
- mov r0, #0x1a
- bl FUN_02003D38
- bl FUN_02003F3C
- add r0, r4, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C3980
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020052B8
-FUN_020052B8: ; 0x020052B8
- push {r3-r6, lr}
- sub sp, #0x4
- add r5, r0, #0x0
- mov r0, #0x12
- add r6, r2, #0x0
- bl FUN_02003D38
- mov r0, #0x1f
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x0
- bl FUN_02003FF4
- bl FUN_020048EC
- bl FUN_02004900
- add r1, r0, #0x0
- add r0, r5, #0x0
- bl FUN_020045C4
- add r0, r6, #0x0
- bl FUN_02003FF4
- add r6, r0, #0x0
- ldrh r0, [r4, #0x0]
- bl FUN_02004900
- mov r1, #0x0
- mvn r1, r1
- add r2, r0, #0x0
- add r0, r6, #0x0
- add r3, r1, #0x0
- str r5, [sp, #0x0]
- blx FUN_020C3910
- add sp, #0x4
- pop {r3-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02005308
-FUN_02005308: ; 0x02005308
- push {r3-r5, lr}
- add r5, r1, #0x0
- cmp r0, #0x4
- beq _02005318
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r5, pc}
-_02005318:
- add r0, r5, #0x0
- bl FUN_020048D0
- cmp r0, #0x7
- beq _0200532A
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r5, pc}
-_0200532A:
- add r0, r5, #0x0
- mov r1, #0x1
- bl FUN_02003FA8
- mov r0, #0x7
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C3980
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl FUN_02004110
- mov r0, #0x1
- bl FUN_02003CE8
- add r0, r4, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005350
-FUN_02005350: ; 0x02005350
- push {r4, lr}
- add r4, r0, #0x0
- blx FUN_020C0FDC
- add r0, r4, #0x0
- bl FUN_020048D0
- cmp r0, #0xff
- beq _0200536E
- bl FUN_02004018
- bl FUN_02003FF4
- blx FUN_020C0F68
-_0200536E:
- bl FUN_02005374
- pop {r4, pc}
-
- thumb_func_start FUN_02005374
-FUN_02005374: ; 0x02005374
- push {r3, lr}
- mov r0, #0x0
- bl FUN_02004110
- mov r0, #0x0
- bl FUN_02004130
- mov r0, #0x0
- bl FUN_02003CE8
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_0200538C
-FUN_0200538C: ; 0x0200538C
- push {r3-r7, lr}
- add r6, r0, #0x0
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_02004124
- bl FUN_020048D0
- cmp r0, #0xff
- beq _020053C8
- bl FUN_02004018
- add r7, r0, #0x0
- cmp r4, #0x0
- bne _020053B2
- mov r1, #0x0
- add r2, r1, #0x0
- bl FUN_02004828
-_020053B2:
- add r0, r7, #0x0
- add r1, r6, #0x0
- add r2, r5, #0x0
- bl FUN_02004828
- add r0, r5, #0x0
- bl FUN_02004D74
- mov r0, #0x3
- bl FUN_02003CE8
-_020053C8:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020053CC
-FUN_020053CC: ; 0x020053CC
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl FUN_02004124
- bl FUN_020048D0
- add r6, r0, #0x0
- cmp r6, #0xff
- beq _02005402
- bl FUN_02005404
- cmp r0, #0x0
- bne _020053FC
- add r0, r6, #0x0
- bl FUN_02004018
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl FUN_02004828
- add r0, r4, #0x0
- bl FUN_02004D74
-_020053FC:
- mov r0, #0x4
- bl FUN_02003CE8
-_02005402:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02005404
-FUN_02005404: ; 0x02005404
- push {r3, lr}
- mov r0, #0x6
- bl FUN_02003D38
- ldrh r0, [r0, #0x0]
- pop {r3, pc}
-
- thumb_func_start FUN_02005410
-FUN_02005410: ; 0x02005410
- push {r3, lr}
- bl FUN_020048D0
- bl FUN_020048BC
- pop {r3, pc}
-
- thumb_func_start FUN_0200541C
-FUN_0200541C: ; 0x0200541C
- push {r3-r5, lr}
- mov r0, #0xf
- bl FUN_02003D38
- add r5, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x0
- blx FUN_020C0F9C
- ldrb r0, [r5, #0x0]
- cmp r0, #0x1
- bne _02005440
- mov r0, #0xe
- bl FUN_02004AAC
-_02005440:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _0200544C
- mov r0, #0xf
- bl FUN_02004AAC
-_0200544C:
- mov r0, #0x0
- bl FUN_02003CE8
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005454
-FUN_02005454: ; 0x02005454
- push {r3-r7, lr}
- mov r0, #0xf
- bl FUN_02003D38
- add r7, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x7
- bl FUN_02003FF4
- mov r1, #0x0
- blx FUN_020C10A4
- bl FUN_02005374
- mov r5, #0x0
- add r4, r5, #0x0
-_0200547A:
- add r0, r5, #0x3
- add r1, r4, #0x0
- bl FUN_020054F8
- add r5, r5, #0x1
- cmp r5, #0x4
- blt _0200547A
- mov r0, #0x0
- bl FUN_02005614
- ldrb r0, [r7, #0x0]
- cmp r0, #0x1
- bne _0200549A
- mov r0, #0xe
- bl FUN_02004AAC
-_0200549A:
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _020054A6
- mov r0, #0xf
- bl FUN_02004AAC
-_020054A6:
- pop {r3-r7, pc}
-
- thumb_func_start FUN_020054A8
-FUN_020054A8: ; 0x020054A8
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- bl FUN_020054C8
- add r6, r0, #0x0
- ldr r1, _020054C4 ; =0x0000FFFF
- add r0, r5, #0x0
- add r2, r4, #0x0
- bl FUN_02005530
- add r0, r6, #0x0
- pop {r4-r6, pc}
- nop
-_020054C4: .word 0x0000FFFF
-
- thumb_func_start FUN_020054C8
-FUN_020054C8: ; 0x020054C8
- push {r4-r6, lr}
- add r5, r0, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- add r4, r0, #0x0
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C3980
- add r6, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02004858
- add r0, r6, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_020054F0
-FUN_020054F0: ; 0x020054F0
- ldr r3, _020054F4 ; =FUN_020C0FDC
- bx r3
- .balign 4
-_020054F4: .word FUN_020C0FDC
-
- thumb_func_start FUN_020054F8
-FUN_020054F8: ; 0x020054F8
- push {r4, lr}
- add r4, r1, #0x0
- bl FUN_02003FF4
- add r1, r4, #0x0
- blx FUN_020C10A4
- pop {r4, pc}
-
- thumb_func_start FUN_02005508
-FUN_02005508: ; 0x02005508
- push {r3, lr}
- bl FUN_020048D0
- bl FUN_020048BC
- pop {r3, pc}
-
- thumb_func_start FUN_02005514
-FUN_02005514: ; 0x02005514
- push {r4, lr}
- mov r4, #0x0
-_02005518:
- add r0, r4, #0x3
- bl FUN_020048BC
- cmp r0, #0x1
- bne _02005526
- mov r0, #0x1
- pop {r4, pc}
-_02005526:
- add r4, r4, #0x1
- cmp r4, #0x4
- blt _02005518
- mov r0, #0x0
- pop {r4, pc}
-
- thumb_func_start FUN_02005530
-FUN_02005530: ; 0x02005530
- push {r3-r5, lr}
- add r5, r1, #0x0
- add r4, r2, #0x0
- bl FUN_020048D0
- bl FUN_02004018
- bl FUN_02003FF4
- add r1, r5, #0x0
- add r2, r4, #0x0
- blx FUN_020C0E7C
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0200554C
-FUN_0200554C: ; 0x0200554C
- push {r3-r7, lr}
- add r6, r0, #0x0
- mov r0, #0x3
- bl FUN_02004018
- ldr r7, _02005574 ; =0x0000FFFF
- add r4, r0, #0x0
- mov r5, #0x0
-_0200555C:
- add r0, r4, r5
- bl FUN_02003FF4
- add r1, r7, #0x0
- add r2, r6, #0x0
- blx FUN_020C0E7C
- add r5, r5, #0x1
- cmp r5, #0x4
- blt _0200555C
- pop {r3-r7, pc}
- nop
-_02005574: .word 0x0000FFFF
-
- thumb_func_start FUN_02005578
-FUN_02005578: ; 0x02005578
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x11
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x23
- bl FUN_02003D38
- ldr r1, _02005610 ; =0x000001B9
- cmp r5, r1
- beq _0200559C
- add r1, #0x36
- cmp r5, r1
- bhi _0200559A
- cmp r5, #0x0
- bne _0200559C
-_0200559A:
- mov r5, #0x1
-_0200559C:
- ldr r1, _02005610 ; =0x000001B9
- cmp r5, r1
- bne _020055BC
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- mov r2, #0x7f
- add r3, r1, #0x0
- bl FUN_02005D48
- cmp r0, #0x1
- bne _020055BC
- mov r0, #0x0
- bl FUN_02005E80
- mov r0, #0x1
- pop {r3-r5, pc}
-_020055BC:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020055E8
- mov r0, #0x0
- bl FUN_02005614
- mov r0, #0x1
- bl FUN_02003FF4
- mov r1, #0x2
- str r1, [sp, #0x0]
- sub r1, r1, #0x3
- add r2, r5, #0x0
- add r3, r1, #0x0
- blx FUN_020C3910
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x1
- bl FUN_02004858
- b _02005606
-_020055E8:
- mov r0, #0x8
- bl FUN_02003FF4
- mov r1, #0x2
- str r1, [sp, #0x0]
- sub r1, r1, #0x3
- add r2, r5, #0x0
- add r3, r1, #0x0
- blx FUN_020C3910
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x8
- bl FUN_02004858
-_02005606:
- mov r0, #0x0
- bl FUN_02005E80
- add r0, r4, #0x0
- pop {r3-r5, pc}
- .balign 4
-_02005610: .word 0x000001B9
-
- thumb_func_start FUN_02005614
-FUN_02005614: ; 0x02005614
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r0, #0xf
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0xe
- bl FUN_02003D38
- mov r0, #0x1
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C10A4
- mov r0, #0x8
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C10A4
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02005658
- mov r0, #0xe
- bl FUN_02004C3C
- mov r0, #0xe
- bl FUN_02004A04
-_02005658:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _0200566A
- mov r0, #0xf
- bl FUN_02004C3C
- mov r0, #0xf
- bl FUN_02004A04
-_0200566A:
- bl FUN_02005DFC
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02005670
-FUN_02005670: ; 0x02005670
- push {r3-r5, lr}
- mov r0, #0xf
- bl FUN_02003D38
- add r5, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0xe
- bl FUN_02003D38
- ldrb r0, [r5, #0x0]
- cmp r0, #0x1
- bne _02005696
- mov r0, #0xe
- bl FUN_02004ABC
- pop {r3-r5, pc}
-_02005696:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _020056A4
- mov r0, #0xf
- bl FUN_02004ABC
- pop {r3-r5, pc}
-_020056A4:
- mov r0, #0x0
- bl FUN_020048BC
- pop {r3-r5, pc}
-
- thumb_func_start FUN_020056AC
-FUN_020056AC: ; 0x020056AC
- push {r3-r7, lr}
- sub sp, #0x20
- str r0, [sp, #0x4]
- mov r0, #0xf
- str r1, [sp, #0x8]
- add r5, r2, #0x0
- add r6, r3, #0x0
- ldr r7, [sp, #0x38]
- bl FUN_02003D38
- str r0, [sp, #0x14]
- mov r0, #0x10
- bl FUN_02003D38
- str r0, [sp, #0x10]
- mov r0, #0x11
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x1d
- bl FUN_02003D38
- str r0, [sp, #0xc]
- mov r0, #0x23
- bl FUN_02003D38
- lsr r0, r5, #0x1f
- add r0, r5, r0
- asr r0, r0, #0x1
- str r0, [sp, #0x1c]
- add r0, #0x40
- str r0, [sp, #0x1c]
- add r0, r6, #0x0
- str r0, [sp, #0x18]
- sub r0, #0x1e
- str r0, [sp, #0x18]
- cmp r0, #0x0
- bgt _020056FC
- mov r0, #0x1
- str r0, [sp, #0x18]
-_020056FC:
- mov r0, #0x0
- strb r0, [r4, #0x0]
- ldr r0, [sp, #0x14]
- ldrb r0, [r0, #0x0]
- cmp r0, #0x1
- bne _02005714
- mov r0, #0xe
- bl FUN_02004C3C
- mov r0, #0xe
- bl FUN_02004A04
-_02005714:
- ldr r0, [sp, #0x10]
- ldrb r0, [r0, #0x0]
- cmp r0, #0x1
- bne _02005728
- mov r0, #0xf
- bl FUN_02004C3C
- mov r0, #0xf
- bl FUN_02004A04
-_02005728:
- ldr r4, [sp, #0x8]
- ldr r0, _02005AB4 ; =0x000001B9
- add r1, r4, #0x0
- cmp r1, r0
- beq _0200573E
- add r0, #0x36
- cmp r1, r0
- bhi _0200573C
- add r0, r4, #0x0
- bne _0200573E
-_0200573C:
- mov r4, #0x1
-_0200573E:
- ldr r0, _02005AB4 ; =0x000001B9
- ldr r1, [sp, #0x8]
- cmp r1, r0
- bne _020057B4
- ldr r1, [sp, #0x4]
- cmp r1, #0xc
- bhi _020057AE
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02005758: ; jump table (using 16-bit offset)
- .short _02005772 - _02005758 - 2; case 0
- .short _02005772 - _02005758 - 2; case 1
- .short _02005772 - _02005758 - 2; case 2
- .short _020057AE - _02005758 - 2; case 3
- .short _020057AE - _02005758 - 2; case 4
- .short _02005772 - _02005758 - 2; case 5
- .short _020057AE - _02005758 - 2; case 6
- .short _020057AE - _02005758 - 2; case 7
- .short _020057AE - _02005758 - 2; case 8
- .short _020057AE - _02005758 - 2; case 9
- .short _020057AE - _02005758 - 2; case 10
- .short _02005772 - _02005758 - 2; case 11
- .short _02005772 - _02005758 - 2; case 12
-_02005772:
- bl FUN_02005578
- ldr r0, [sp, #0xc]
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02005794
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- b _020057A8
-_02005794:
- ldr r1, [sp, #0x1c]
- mov r0, #0xe
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- bl FUN_02004ACC
- mov r0, #0xe
- add r1, r6, #0x0
- bl FUN_02004AF8
-_020057A8:
- add sp, #0x20
- mov r0, #0x1
- pop {r3-r7, pc}
-_020057AE:
- mov r0, #0x1
- bl FUN_02005E80
-_020057B4:
- ldr r0, [sp, #0x4]
- cmp r0, #0xe
- bls _020057BC
- b _02005AC2
-_020057BC:
- add r0, r0, r0
- add r0, pc
- ldrh r0, [r0, #0x6]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- add pc, r0
-_020057C8: ; jump table (using 16-bit offset)
- .short _020057E6 - _020057C8 - 2; case 0
- .short _02005802 - _020057C8 - 2; case 1
- .short _02005826 - _020057C8 - 2; case 2
- .short _02005868 - _020057C8 - 2; case 3
- .short _020058B2 - _020057C8 - 2; case 4
- .short _02005900 - _020057C8 - 2; case 5
- .short _02005928 - _020057C8 - 2; case 6
- .short _0200596C - _020057C8 - 2; case 7
- .short _0200599C - _020057C8 - 2; case 8
- .short _020059CA - _020057C8 - 2; case 9
- .short _020059FE - _020057C8 - 2; case 10
- .short _02005A2E - _020057C8 - 2; case 11
- .short _02005A56 - _020057C8 - 2; case 12
- .short _02005A86 - _020057C8 - 2; case 13
- .short _02005ABC - _020057C8 - 2; case 14
-_020057E6:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- b _02005AC2
-_02005802:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x14
- add r1, r7, #0x0
- bl FUN_02005AE0
- b _02005AC2
-_02005826:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- mov r2, #0x40
- bl FUN_02004D20
- add r0, r4, #0x0
- mov r1, #0x14
- bl FUN_02005BC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x8
- add r2, r5, #0x0
- bl FUN_02004D4C
- ldr r2, [sp, #0x18]
- add r0, r4, #0x0
- mov r1, #0x8
- bl FUN_02005AC8
- b _02005AC2
-_02005868:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x1e
- add r1, r7, #0x0
- bl FUN_02005AE0
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- mov r2, #0xc0
- bl FUN_02004D20
- add r0, r4, #0x0
- mov r1, #0x10
- bl FUN_02005BC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x8
- add r2, r5, #0x0
- bl FUN_02004D4C
- ldr r2, [sp, #0x18]
- add r0, r4, #0x0
- mov r1, #0x8
- bl FUN_02005AC8
- b _02005AC2
-_020058B2:
- mov r0, #0xe
- bl FUN_02004984
- ldr r2, [sp, #0x1c]
- add r0, r4, #0x0
- add r1, r6, #0x0
- mov r3, #0xe
- str r7, [sp, #0x0]
- bl FUN_02004B30
- ldr r1, [sp, #0x1c]
- mov r0, #0xe
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- bl FUN_02004ACC
- mov r0, #0xf
- add r1, r7, #0x0
- bl FUN_02005AE0
- mov r1, #0x86
- mov r0, #0xe
- lsl r1, r1, #0x8
- bl FUN_02004AE4
- mov r1, #0x3f
- ldr r2, [sp, #0x18]
- ldr r3, [sp, #0x1c]
- add r0, r4, #0x0
- mvn r1, r1
- str r7, [sp, #0x0]
- bl FUN_02005BF8
- mov r1, #0x86
- mov r0, #0xf
- lsl r1, r1, #0x8
- bl FUN_02004AE4
- b _02005AC2
-_02005900:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x1
- add r2, r0, #0x0
- ldr r1, _02005AB8 ; =0x0000FFFF
- sub r2, #0xe1
- bl FUN_02004D20
- b _02005AC2
-_02005928:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- mov r2, #0x2c
- bl FUN_02004D20
- mov r1, #0x3f
- add r0, r4, #0x0
- mvn r1, r1
- bl FUN_02005BC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x8
- add r2, r5, #0x0
- bl FUN_02004D4C
- ldr r2, [sp, #0x18]
- add r0, r4, #0x0
- mov r1, #0x8
- bl FUN_02005AC8
- b _02005AC2
-_0200596C:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0xb
- add r1, r7, #0x0
- bl FUN_02005AE0
- mov r0, #0x1
- add r2, r0, #0x0
- ldr r1, _02005AB8 ; =0x0000FFFF
- sub r2, #0x81
- bl FUN_02004D20
- b _02005AC2
-_0200599C:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x3c
- add r1, r7, #0x0
- bl FUN_02005AE0
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- mov r2, #0x3c
- bl FUN_02004D20
- b _02005AC2
-_020059CA:
- mov r0, #0xe
- bl FUN_02004984
- ldr r2, [sp, #0x1c]
- add r0, r4, #0x0
- add r1, r6, #0x0
- mov r3, #0xe
- str r7, [sp, #0x0]
- bl FUN_02004B30
- ldr r1, [sp, #0x1c]
- mov r0, #0xe
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- bl FUN_02004ACC
- mov r0, #0xd
- add r1, r7, #0x0
- bl FUN_02005AE0
- mov r1, #0x1a
- mov r0, #0xe
- lsl r1, r1, #0xa
- bl FUN_02004AE4
- b _02005AC2
-_020059FE:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x64
- add r1, r7, #0x0
- bl FUN_02005AE0
- mov r0, #0x1
- add r2, r0, #0x0
- ldr r1, _02005AB8 ; =0x0000FFFF
- sub r2, #0x2d
- bl FUN_02004D20
- b _02005AC2
-_02005A2E:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x1
- add r2, r0, #0x0
- ldr r1, _02005AB8 ; =0x0000FFFF
- sub r2, #0x61
- bl FUN_02004D20
- b _02005AC2
-_02005A56:
- add r0, r4, #0x0
- bl FUN_02005578
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x1
- add r2, r5, #0x0
- bl FUN_02004D4C
- add r0, r4, #0x0
- mov r1, #0x1
- add r2, r6, #0x0
- bl FUN_02005AC8
- mov r0, #0x14
- add r1, r7, #0x0
- bl FUN_02005AE0
- mov r0, #0x1
- add r2, r0, #0x0
- ldr r1, _02005AB8 ; =0x0000FFFF
- sub r2, #0x61
- bl FUN_02004D20
- b _02005AC2
-_02005A86:
- add r0, r4, #0x0
- bl FUN_02005578
- add r0, r4, #0x0
- mov r1, #0x1
- mov r2, #0x7f
- bl FUN_02005AC8
- add r0, r4, #0x0
- mov r1, #0x14
- bl FUN_02005BC8
- ldr r1, _02005AB8 ; =0x0000FFFF
- mov r0, #0x8
- add r2, r5, #0x0
- bl FUN_02004D4C
- mov r0, #0x8
- add r1, r6, #0x0
- mov r2, #0x0
- bl FUN_02004828
- b _02005AC2
- .balign 4
-_02005AB4: .word 0x000001B9
-_02005AB8: .word 0x0000FFFF
-_02005ABC:
- add r0, r4, #0x0
- bl FUN_02005578
-_02005AC2:
- mov r0, #0x1
- add sp, #0x20
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02005AC8
-FUN_02005AC8: ; 0x02005AC8
- push {r3-r5, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r0, r4, #0x0
- add r1, r2, #0x0
- bl FUN_0200483C
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02004858
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005AE0
-FUN_02005AE0: ; 0x02005AE0
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- mov r0, #0x22
- bl FUN_02003D38
- add r6, r0, #0x0
- bl FUN_02005BA0
- add r0, r4, #0x0
- mov r1, #0x8
- bl FUN_02016998
- add r4, r0, #0x0
- bne _02005B04
- bl ErrorHandling
- pop {r4-r6, pc}
-_02005B04:
- mov r2, #0x0
- strb r2, [r4, #0x0]
- strb r2, [r4, #0x1]
- strb r2, [r4, #0x2]
- strb r2, [r4, #0x3]
- strb r2, [r4, #0x4]
- strb r2, [r4, #0x5]
- strb r2, [r4, #0x6]
- strb r2, [r4, #0x7]
- ldr r0, _02005B28 ; =FUN_02005B2C
- add r1, r4, #0x0
- str r5, [r4, #0x0]
- bl FUN_0200CA44
- str r0, [r4, #0x4]
- str r0, [r6, #0x0]
- pop {r4-r6, pc}
- nop
-_02005B28: .word FUN_02005B2C
-
- thumb_func_start FUN_02005B2C
-FUN_02005B2C: ; 0x02005B2C
- push {r4-r6, lr}
- mov r0, #0xf
- add r5, r1, #0x0
- bl FUN_02003D38
- add r6, r0, #0x0
- mov r0, #0x10
- bl FUN_02003D38
- ldr r2, [r5, #0x0]
- add r4, r0, #0x0
- cmp r2, #0xa
- bne _02005B58
- mov r0, #0x1
- mov r1, #0x0
- bl FUN_02004828
- ldr r2, [r5, #0x0]
- mov r0, #0x8
- mov r1, #0x0
- bl FUN_02004828
-_02005B58:
- ldr r0, [r5, #0x0]
- sub r0, r0, #0x1
- str r0, [r5, #0x0]
- bl FUN_02005670
- cmp r0, #0x0
- bne _02005B6A
- mov r0, #0x0
- str r0, [r5, #0x0]
-_02005B6A:
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- bgt _02005B9E
- mov r0, #0x0
- bl FUN_02005614
- ldrb r0, [r6, #0x0]
- cmp r0, #0x1
- bne _02005B88
- mov r0, #0xe
- bl FUN_02004C3C
- mov r0, #0xe
- bl FUN_02004A04
-_02005B88:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- bne _02005B9A
- mov r0, #0xf
- bl FUN_02004C3C
- mov r0, #0xf
- bl FUN_02004A04
-_02005B9A:
- bl FUN_02005BA0
-_02005B9E:
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02005BA0
-FUN_02005BA0: ; 0x02005BA0
- push {r3-r5, lr}
- mov r0, #0x22
- bl FUN_02003D38
- add r4, r0, #0x0
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- beq _02005BC2
- bl FUN_0201B6C8
- add r5, r0, #0x0
- ldr r0, [r4, #0x0]
- bl FUN_0200CAB4
- add r0, r5, #0x0
- bl FUN_02016A18
-_02005BC2:
- mov r0, #0x0
- str r0, [r4, #0x0]
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005BC8
-FUN_02005BC8: ; 0x02005BC8
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x11
- add r4, r1, #0x0
- bl FUN_02003D38
- mov r1, #0x1
- strb r1, [r0, #0x0]
- add r0, r1, #0x0
- bl FUN_02005E80
- add r0, r5, #0x0
- bl FUN_02005578
- add r5, r0, #0x0
- ldr r1, _02005BF4 ; =0x0000FFFF
- mov r0, #0x8
- add r2, r4, #0x0
- bl FUN_02004D20
- add r0, r5, #0x0
- pop {r3-r5, pc}
- .balign 4
-_02005BF4: .word 0x0000FFFF
-
- thumb_func_start FUN_02005BF8
-FUN_02005BF8: ; 0x02005BF8
- push {r3-r6, lr}
- sub sp, #0x4
- add r5, r0, #0x0
- mov r0, #0x11
- add r4, r2, #0x0
- add r6, r3, #0x0
- bl FUN_02003D38
- mov r1, #0x1
- strb r1, [r0, #0x0]
- mov r0, #0xf
- bl FUN_02004984
- ldr r0, [sp, #0x18]
- add r1, r4, #0x0
- str r0, [sp, #0x0]
- add r0, r5, #0x0
- add r2, r6, #0x0
- mov r3, #0xf
- bl FUN_02004B30
- add sp, #0x4
- pop {r3-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02005C28
-FUN_02005C28: ; 0x02005C28
- push {r3-r5, lr}
- add r5, r0, #0x0
- bl FUN_020048F4
- add r0, r5, #0x0
- bl FUN_02005CEC
- bl FUN_02004124
- bl FUN_020048D0
- cmp r0, #0xff
- beq _02005C48
- mov r1, #0x1
- bl FUN_020047C8
-_02005C48:
- mov r0, #0x1c
- bl FUN_02003D38
- bl FUN_02003F3C
- add r0, r5, #0x0
- mov r1, #0x3
- bl FUN_02003FA8
- mov r0, #0x2
- bl FUN_02003FF4
- add r1, r5, #0x0
- blx FUN_020C3980
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x2
- bl FUN_02004858
- add r0, r4, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005C74
-FUN_02005C74: ; 0x02005C74
- push {r4, lr}
- mov r0, #0xd
- bl FUN_02003D38
- add r4, r0, #0x0
- mov r0, #0x2
- bl FUN_020048BC
- cmp r0, #0x0
- beq _02005C8C
- mov r0, #0x1
- pop {r4, pc}
-_02005C8C:
- ldrh r0, [r4, #0x0]
- cmp r0, #0x0
- beq _02005C9A
- sub r0, r0, #0x1
- strh r0, [r4, #0x0]
- mov r0, #0x1
- pop {r4, pc}
-_02005C9A:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02005CA0
-FUN_02005CA0: ; 0x02005CA0
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x2
- bl FUN_02003FF4
- add r1, r4, #0x0
- blx FUN_020C10A4
- mov r0, #0x6
- bl FUN_02004748
- bl FUN_02003F64
- pop {r4, pc}
-
- thumb_func_start FUN_02005CBC
-FUN_02005CBC: ; 0x02005CBC
- push {r3, lr}
- mov r0, #0xd
- bl FUN_02003D38
- bl FUN_02005C74
- cmp r0, #0x1
- bne _02005CD0
- mov r0, #0x1
- pop {r3, pc}
-_02005CD0:
- mov r0, #0x0
- bl FUN_02005CA0
- bl FUN_02004124
- bl FUN_020048D0
- cmp r0, #0xff
- beq _02005CE8
- mov r1, #0x0
- bl FUN_020047C8
-_02005CE8:
- mov r0, #0x0
- pop {r3, pc}
-
- thumb_func_start FUN_02005CEC
-FUN_02005CEC: ; 0x02005CEC
- push {r3, lr}
- mov r0, #0xd
- bl FUN_02003D38
- mov r1, #0xf
- strh r1, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02005CFC
-FUN_02005CFC: ; 0x02005CFC
- push {r3, lr}
- mov r0, #0x1d
- bl FUN_02003D38
- ldrb r0, [r0, #0x0]
- cmp r0, #0x1
- bne _02005D1C
- mov r0, #0xe
- bl FUN_02004ABC
- cmp r0, #0x0
- bne _02005D1C
- bl FUN_02005DFC
- mov r0, #0x1
- pop {r3, pc}
-_02005D1C:
- mov r0, #0x0
- pop {r3, pc}
-
- thumb_func_start FUN_02005D20
-FUN_02005D20: ; 0x02005D20
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x1e
- bl FUN_02003D38
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl FUN_02029F04
- cmp r0, #0x0
- bne _02005D3A
- mov r0, #0x0
- pop {r3-r5, pc}
-_02005D3A:
- ldrb r0, [r4, #0x0]
- cmp r0, #0x1
- beq _02005D44
- mov r0, #0x1
- pop {r3-r5, pc}
-_02005D44:
- mov r0, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02005D48
-FUN_02005D48: ; 0x02005D48
- push {r3-r7, lr}
- sub sp, #0x30
- add r6, r0, #0x0
- add r5, r2, #0x0
- add r7, r3, #0x0
- bl FUN_02004DB4
- str r0, [sp, #0x0]
- mov r0, #0x1d
- bl FUN_02003D38
- str r0, [sp, #0x4]
- add r0, r6, #0x0
- bl FUN_02005D20
- cmp r0, #0x0
- bne _02005D70
- add sp, #0x30
- mov r0, #0x0
- pop {r3-r7, pc}
-_02005D70:
- mov r0, #0x0
- bl FUN_02005614
- bl FUN_02005DFC
- mov r0, #0xe
- bl FUN_02004984
- bl FUN_0201B9EC
- lsr r2, r0, #0x1f
- lsl r1, r0, #0x13
- sub r1, r1, r2
- mov r0, #0x13
- ror r1, r0
- add r0, r2, r1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- add r0, r6, #0x0
- bl FUN_02029F10
- add r1, r0, #0x0
- ldr r0, [sp, #0x0]
- bl FUN_02029F14
- mov r0, #0xe
- bl FUN_02004930
- str r0, [sp, #0x8]
- mov r0, #0x0
- str r0, [sp, #0xc]
- bl FUN_02004DB4
- str r0, [sp, #0x10]
- mov r0, #0x0
- str r0, [sp, #0x14]
- str r0, [sp, #0x18]
- mov r0, #0x7d
- lsl r0, r0, #0x4
- str r0, [sp, #0x1c]
- str r0, [sp, #0x20]
- mov r0, #0x2
- lsl r0, r0, #0xe
- add r0, r4, r0
- str r0, [sp, #0x28]
- lsr r0, r7, #0x1f
- add r0, r7, r0
- asr r0, r0, #0x1
- add r0, #0x40
- str r0, [sp, #0x2c]
- add r0, sp, #0x8
- mov r1, #0xe
- str r5, [sp, #0x24]
- bl FUN_02004A6C
- add r4, r0, #0x0
- mov r0, #0xe
- add r1, r5, #0x0
- bl FUN_02004AF8
- ldr r0, [sp, #0x4]
- mov r1, #0x1
- strb r1, [r0, #0x0]
- mov r0, #0x0
- bl FUN_02005E80
- add r0, r4, #0x0
- add sp, #0x30
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02005DFC
-FUN_02005DFC: ; 0x02005DFC
- push {r3-r5, lr}
- mov r0, #0xf
- bl FUN_02003D38
- add r5, r0, #0x0
- mov r0, #0x1d
- bl FUN_02003D38
- add r4, r0, #0x0
- ldrb r0, [r5, #0x0]
- cmp r0, #0x1
- bne _02005E20
- mov r0, #0xe
- bl FUN_02004C3C
- mov r0, #0xe
- bl FUN_02004A04
-_02005E20:
- mov r0, #0x0
- strb r0, [r4, #0x0]
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02005E28
-FUN_02005E28: ; 0x02005E28
- push {lr}
- sub sp, #0x1c
- mov r0, #0x2
- str r0, [sp, #0x0]
- bl FUN_02004DB4
- mov r1, #0x7d
- str r0, [sp, #0x4]
- lsl r1, r1, #0x4
- mov r0, #0x1f
- str r1, [sp, #0x8]
- tst r0, r1
- beq _02005E48
- mov r0, #0x1f
- bic r1, r0
- str r1, [sp, #0x8]
-_02005E48:
- ldr r0, _02005E60 ; =0x00004174
- str r0, [sp, #0xc]
- mov r0, #0x0
- str r0, [sp, #0x10]
- str r0, [sp, #0x14]
- str r0, [sp, #0x18]
- add r0, sp, #0x0
- bl FUN_02004914
- add sp, #0x1c
- pop {pc}
- nop
-_02005E60: .word 0x00004174
-
- thumb_func_start FUN_02005E64
-FUN_02005E64: ; 0x02005E64
- ldr r3, _02005E68 ; =FUN_0200491C
- bx r3
- .balign 4
-_02005E68: .word FUN_0200491C
-
- thumb_func_start FUN_02005E6C
-FUN_02005E6C: ; 0x02005E6C
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02004DB4
- add r1, r0, #0x0
- add r0, r4, #0x0
- bl FUN_02029F4C
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02005E80
-FUN_02005E80: ; 0x02005E80
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0x1e
- bl FUN_02003D38
- strb r4, [r0, #0x0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02005E90
-FUN_02005E90: ; 0x02005E90
- push {r3-r7, lr}
- add r5, r0, #0x0
- mov r0, #0x23
- add r7, r1, #0x0
- add r4, r2, #0x0
- add r6, r3, #0x0
- bl FUN_02003D38
- cmp r5, #0x0
- bne _02005EB2
- ldr r0, [r0, #0x0]
- add r1, r7, #0x0
- add r2, r4, #0x0
- add r3, r6, #0x0
- bl FUN_02005D48
- b _02005EBE
-_02005EB2:
- add r0, r5, #0x0
- add r1, r7, #0x0
- add r2, r4, #0x0
- add r3, r6, #0x0
- bl FUN_02005D48
-_02005EBE:
- cmp r0, #0x0
- bne _02005ED8
- mov r0, #0x1
- bl FUN_02005E80
- mov r0, #0xb
- str r0, [sp, #0x0]
- ldr r1, _02005EDC ; =0x000001B9
- mov r0, #0x0
- add r2, r6, #0x0
- add r3, r4, #0x0
- bl FUN_020056AC
-_02005ED8:
- pop {r3-r7, pc}
- nop
-_02005EDC: .word 0x000001B9
-
- thumb_func_start FUN_02005EE0
-FUN_02005EE0: ; 0x02005EE0
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02029F04
- cmp r0, #0x0
- bne _02005EF0
- mov r0, #0x0
- pop {r4, pc}
-_02005EF0:
- add r0, r4, #0x0
- bl FUN_02029F10
- mov r1, #0xf
- ldrsb r0, [r0, r1]
- sub r1, #0x2d
- cmp r0, r1
- bge _02005F04
- mov r0, #0x1
- pop {r4, pc}
-_02005F04:
- cmp r0, #0x1e
- blt _02005F10
- cmp r0, #0x80
- bge _02005F10
- mov r0, #0x2
- pop {r4, pc}
-_02005F10:
- mov r0, #0x0
- pop {r4, pc}
-
- thumb_func_start FUN_02005F14
-FUN_02005F14: ; 0x02005F14
- cmp r0, #0xb
- bgt _02005F2E
- bge _02005F32
- cmp r0, #0x5
- bgt _02005F36
- cmp r0, #0x0
- blt _02005F36
- beq _02005F32
- cmp r0, #0x1
- beq _02005F32
- cmp r0, #0x5
- beq _02005F32
- b _02005F36
-_02005F2E:
- cmp r0, #0xc
- bne _02005F36
-_02005F32:
- mov r0, #0x1
- bx lr
-_02005F36:
- mov r0, #0x0
- bx lr
- .balign 4
-
- thumb_func_start FUN_02005F3C
-FUN_02005F3C: ; 0x02005F3C
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, [r4, #0x4]
- cmp r0, #0x1
- beq _02005F4A
- bl ErrorHandling
-_02005F4A:
- ldr r1, [r4, #0x0]
- mov r0, #0x0
- blx FS_UnloadOverlay
- cmp r0, #0x1
- beq _02005F5A
- bl ErrorHandling
-_02005F5A:
- mov r0, #0x0
- str r0, [r4, #0x4]
- pop {r4, pc}
-
- thumb_func_start FUN_02005F60
-FUN_02005F60: ; 0x02005F60
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_02005F90
- bl FUN_0200610C
- mov r2, #0x0
- add r3, r0, #0x0
-_02005F70:
- ldr r1, [r3, #0x4]
- cmp r1, #0x1
- bne _02005F86
- ldr r1, [r3, #0x0]
- cmp r4, r1
- bne _02005F86
- lsl r1, r2, #0x3
- add r0, r0, r1
- bl FUN_02005F3C
- pop {r4, pc}
-_02005F86:
- add r2, r2, #0x1
- add r3, #0x8
- cmp r2, #0x8
- blt _02005F70
- pop {r4, pc}
-
- thumb_func_start FUN_02005F90
-FUN_02005F90: ; 0x02005F90
- push {lr}
- sub sp, #0x2c
- add r2, r0, #0x0
- add r0, sp, #0x0
- mov r1, #0x0
- blx FS_LoadOverlayInfo
- cmp r0, #0x1
- beq _02005FA6
- bl ErrorHandling
-_02005FA6:
- mov r0, #0x2
- ldr r2, [sp, #0x4]
- lsl r0, r0, #0x18
- cmp r2, r0
- bhi _02005FBC
- lsr r0, r0, #0x1
- cmp r2, r0
- blo _02005FBC
- add sp, #0x2c
- mov r0, #0x1
- pop {pc}
-_02005FBC:
- mov r0, #0x1
- ldr r1, _02005FD8 ; =0x027E0000
- lsl r0, r0, #0xe
- add r0, r1, r0
- cmp r2, r0
- bhi _02005FD2
- cmp r2, r1
- blo _02005FD2
- add sp, #0x2c
- mov r0, #0x2
- pop {pc}
-_02005FD2:
- mov r0, #0x0
- add sp, #0x2c
- pop {pc}
- .balign 4
-_02005FD8: .word 0x027E0000
-
- thumb_func_start FUN_02005FDC
-FUN_02005FDC: ; 0x02005FDC
- push {r3-r7, lr}
- add r4, r1, #0x0
- mov r1, #0x0
- mvn r1, r1
- add r5, r0, #0x0
- str r1, [sp, #0x0]
- bl FUN_02006090
- cmp r0, #0x0
- bne _02005FF4
- mov r0, #0x0
- pop {r3-r7, pc}
-_02005FF4:
- add r0, r5, #0x0
- bl FUN_02005F90
- add r7, r0, #0x0
- bl FUN_0200610C
- add r3, r0, #0x0
- mov r6, #0x0
- add r1, r3, #0x0
-_02006006:
- ldr r0, [r1, #0x4]
- cmp r0, #0x0
- bne _02006018
- lsl r1, r6, #0x3
- add r2, r3, r1
- mov r0, #0x1
- str r0, [r2, #0x4]
- str r5, [r3, r1]
- b _02006020
-_02006018:
- add r6, r6, #0x1
- add r1, #0x8
- cmp r6, #0x8
- blt _02006006
-_02006020:
- cmp r6, #0x8
- blt _0200602C
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r7, pc}
-_0200602C:
- sub r6, r7, #0x1
- cmp r6, #0x1
- bhi _0200603C
- mov r0, #0x0
- mvn r0, r0
- blx FS_SetDefaultDMA
- str r0, [sp, #0x0]
-_0200603C:
- cmp r4, #0x0
- beq _0200604A
- cmp r4, #0x1
- beq _02006056
- cmp r4, #0x2
- beq _02006062
- b _0200606E
-_0200604A:
- mov r0, #0x0
- add r1, r5, #0x0
- bl FUN_02006168
- add r4, r0, #0x0
- b _02006076
-_02006056:
- mov r0, #0x0
- add r1, r5, #0x0
- bl FUN_02006170
- add r4, r0, #0x0
- b _02006076
-_02006062:
- mov r0, #0x0
- add r1, r5, #0x0
- bl FUN_020061A8
- add r4, r0, #0x0
- b _02006076
-_0200606E:
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r7, pc}
-_02006076:
- cmp r6, #0x1
- bhi _02006080
- ldr r0, [sp, #0x0]
- blx FS_SetDefaultDMA
-_02006080:
- cmp r4, #0x0
- bne _0200608C
- bl ErrorHandling
- mov r0, #0x0
- pop {r3-r7, pc}
-_0200608C:
- mov r0, #0x1
- pop {r3-r7, pc}
-
- thumb_func_start FUN_02006090
-FUN_02006090: ; 0x02006090
- push {r3-r7, lr}
- sub sp, #0x10
- add r1, sp, #0xc
- add r2, sp, #0x8
- add r4, r0, #0x0
- bl FUN_02006130
- cmp r0, #0x0
- bne _020060A8
- add sp, #0x10
- mov r0, #0x0
- pop {r3-r7, pc}
-_020060A8:
- add r0, r4, #0x0
- bl FUN_02005F90
- bl FUN_0200610C
- add r5, r0, #0x0
- mov r4, #0x0
- add r6, sp, #0x4
- add r7, sp, #0x0
-_020060BA:
- ldr r0, [r5, #0x4]
- cmp r0, #0x1
- bne _020060FC
- ldr r0, [r5, #0x0]
- add r1, r6, #0x0
- add r2, r7, #0x0
- bl FUN_02006130
- cmp r0, #0x1
- bne _020060FC
- ldr r1, [sp, #0x4]
- ldr r2, [sp, #0xc]
- cmp r2, r1
- blo _020060DC
- ldr r0, [sp, #0x0]
- cmp r2, r0
- blo _020060F2
-_020060DC:
- ldr r3, [sp, #0x8]
- cmp r3, r1
- bls _020060E8
- ldr r0, [sp, #0x0]
- cmp r3, r0
- bls _020060F2
-_020060E8:
- cmp r2, r1
- bhi _020060FC
- ldr r0, [sp, #0x0]
- cmp r3, r0
- blo _020060FC
-_020060F2:
- bl ErrorHandling
- add sp, #0x10
- mov r0, #0x0
- pop {r3-r7, pc}
-_020060FC:
- add r4, r4, #0x1
- add r5, #0x8
- cmp r4, #0x8
- blt _020060BA
- mov r0, #0x1
- add sp, #0x10
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0200610C
-FUN_0200610C: ; 0x0200610C
- cmp r0, #0x0
- beq _02006118
- cmp r0, #0x1
- beq _0200611C
- cmp r0, #0x2
- beq _02006120
-_02006118:
- ldr r0, _02006124 ; =0x021C45B0
- bx lr
-_0200611C:
- ldr r0, _02006128 ; =0x021C45F0
- bx lr
-_02006120:
- ldr r0, _0200612C ; =0x021C4630
- bx lr
- .balign 4
-_02006124: .word 0x021C45B0
-_02006128: .word 0x021C45F0
-_0200612C: .word 0x021C4630
-
- thumb_func_start FUN_02006130
-FUN_02006130: ; 0x02006130
- push {r4-r5, lr}
- sub sp, #0x2c
- add r3, r0, #0x0
- add r5, r1, #0x0
- add r4, r2, #0x0
- add r0, sp, #0x0
- mov r1, #0x0
- add r2, r3, #0x0
- blx FS_LoadOverlayInfo
- cmp r0, #0x0
- bne _02006152
- bl ErrorHandling
- add sp, #0x2c
- mov r0, #0x0
- pop {r4-r5, pc}
-_02006152:
- ldr r2, [sp, #0x4]
- str r2, [r5, #0x0]
- ldr r1, [sp, #0x8]
- ldr r0, [sp, #0xc]
- add r0, r1, r0
- add r0, r2, r0
- str r0, [r4, #0x0]
- mov r0, #0x1
- add sp, #0x2c
- pop {r4-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02006168
-FUN_02006168: ; 0x02006168
- ldr r3, _0200616C ; =FS_LoadOverlay
- bx r3
- .balign 4
-_0200616C: .word FS_LoadOverlay
-
- thumb_func_start FUN_02006170
-FUN_02006170: ; 0x02006170
- push {lr}
- sub sp, #0x2c
- add r3, r0, #0x0
- add r2, r1, #0x0
- add r0, sp, #0x0
- add r1, r3, #0x0
- blx FS_LoadOverlayInfo
- cmp r0, #0x0
- bne _0200618A
- add sp, #0x2c
- mov r0, #0x0
- pop {pc}
-_0200618A:
- add r0, sp, #0x0
- blx FS_LoadOverlayImage
- cmp r0, #0x0
- bne _0200619A
- add sp, #0x2c
- mov r0, #0x0
- pop {pc}
-_0200619A:
- add r0, sp, #0x0
- blx FS_StartOverlay
- mov r0, #0x1
- add sp, #0x2c
- pop {pc}
- .balign 4
-
- thumb_func_start FUN_020061A8
-FUN_020061A8: ; 0x020061A8
- push {lr}
- sub sp, #0x74
- add r3, r0, #0x0
- add r2, r1, #0x0
- add r0, sp, #0x0
- add r1, r3, #0x0
- blx FS_LoadOverlayInfo
- cmp r0, #0x0
- bne _020061C2
- add sp, #0x74
- mov r0, #0x0
- pop {pc}
-_020061C2:
- add r0, sp, #0x2c
- blx FS_InitFile
- add r0, sp, #0x0
- add r1, sp, #0x2c
- blx FS_LoadOverlayImageAsync
- add r0, sp, #0x2c
- blx FS_WaitAsync
- add r0, sp, #0x2c
- blx FS_CloseFile
- add r0, sp, #0x0
- blx FS_StartOverlay
- mov r0, #0x1
- add sp, #0x74
- pop {pc}
-
- thumb_func_start FUN_020061E8
-FUN_020061E8: ; 0x020061E8
- push {r3-r7, lr}
- add r5, r1, #0x0
- add r6, r0, #0x0
- add r7, r2, #0x0
- cmp r5, #0x0
- beq _0200620C
- add r0, r3, #0x0
- bl FUN_02016998
- add r4, r0, #0x0
- bne _02006202
- mov r0, #0x0
- pop {r3-r7, pc}
-_02006202:
- mov r1, #0x0
- add r2, r5, #0x0
- blx FUN_020DF4A4
- b _0200620E
-_0200620C:
- mov r4, #0x0
-_0200620E:
- add r0, r6, #0x0
- add r1, r4, #0x0
- add r2, r7, #0x0
- bl FUN_0200CA44
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0200621C
-FUN_0200621C: ; 0x0200621C
- push {r4, lr}
- add r4, r0, #0x0
- bl FUN_0201B6C8
- cmp r0, #0x0
- beq _0200622C
- bl FUN_02016A18
-_0200622C:
- add r0, r4, #0x0
- bl FUN_0200CAB4
- pop {r4, pc}
-
- thumb_func_start FUN_02006234
-FUN_02006234: ; 0x02006234
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- add r0, r2, #0x0
- mov r1, #0x28
- bl FUN_02016998
- add r3, r0, #0x0
- add r2, r3, #0x0
- ldmia r5!, {r0-r1}
- stmia r2!, {r0-r1}
- ldmia r5!, {r0-r1}
- stmia r2!, {r0-r1}
- mov r0, #0x0
- str r0, [r3, #0x10]
- str r0, [r3, #0x14]
- str r4, [r3, #0x18]
- str r0, [r3, #0x1c]
- str r0, [r3, #0x20]
- str r0, [r3, #0x24]
- add r0, r3, #0x0
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02006260
-FUN_02006260: ; 0x02006260
- ldr r3, _02006264 ; =FUN_02016A18
- bx r3
- .balign 4
-_02006264: .word FUN_02016A18
-
- thumb_func_start FUN_02006268
-FUN_02006268: ; 0x02006268
- push {r4, lr}
- add r4, r0, #0x0
- add r0, r2, #0x0
- bl FUN_02016998
- str r0, [r4, #0x1c]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02006278
-FUN_02006278: ; 0x02006278
- ldr r0, [r0, #0x1c]
- bx lr
-
- thumb_func_start FUN_0200627C
-FUN_0200627C: ; 0x0200627C
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, [r4, #0x1c]
- bl FUN_02016A18
- mov r0, #0x0
- str r0, [r4, #0x1c]
- pop {r4, pc}
-
- thumb_func_start FUN_0200628C
-FUN_0200628C: ; 0x0200628C
- ldr r0, [r0, #0x18]
- bx lr
-
- thumb_func_start FUN_02006290
-FUN_02006290: ; 0x02006290
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x10]
- cmp r1, #0x3
- bhi _0200630E
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_020062A6: ; jump table (using 16-bit offset)
- .short _020062AE - _020062A6 - 2; case 0
- .short _020062C2 - _020062A6 - 2; case 1
- .short _020062DA - _020062A6 - 2; case 2
- .short _020062F0 - _020062A6 - 2; case 3
-_020062AE:
- mov r1, #0x0
- ldr r0, [r4, #0xc]
- mvn r1, r1
- cmp r0, r1
- beq _020062BE
- mov r1, #0x2
- bl FUN_02005FDC
-_020062BE:
- mov r0, #0x1
- str r0, [r4, #0x10]
-_020062C2:
- add r1, r4, #0x0
- ldr r2, [r4, #0x0]
- add r0, r4, #0x0
- add r1, #0x14
- blx r2
- cmp r0, #0x1
- bne _0200630E
- mov r0, #0x2
- str r0, [r4, #0x10]
- mov r0, #0x0
- str r0, [r4, #0x14]
- b _0200630E
-_020062DA:
- add r1, r4, #0x0
- ldr r2, [r4, #0x4]
- add r1, #0x14
- blx r2
- cmp r0, #0x1
- bne _0200630E
- mov r0, #0x3
- str r0, [r4, #0x10]
- mov r0, #0x0
- str r0, [r4, #0x14]
- b _0200630E
-_020062F0:
- add r1, r4, #0x0
- ldr r2, [r4, #0x8]
- add r1, #0x14
- blx r2
- cmp r0, #0x1
- bne _0200630E
- mov r1, #0x0
- ldr r0, [r4, #0xc]
- mvn r1, r1
- cmp r0, r1
- beq _0200630A
- bl FUN_02005F60
-_0200630A:
- mov r0, #0x1
- pop {r4, pc}
-_0200630E:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ thumb_func_start FUN_020023C0
+FUN_020023C0: ; 0x020023C0
+ push {r3-r6, lr}
+ sub sp, #0xc
+ add r4, r0, #0x0
+ add r1, r4, #0x0
+ add r1, #0x24
+ ldrb r1, [r1, #0x0]
+ add r6, r4, #0x0
+ add r6, #0x1c
+ cmp r1, #0x6
+ bls _020023D6
+ b _02002838
+_020023D6:
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_020023E2: ; jump table (using 16-bit offset)
+ .short _020023F0 - _020023E2 - 2; case 0
+ .short _02002742 - _020023E2 - 2; case 1
+ .short _0200275C - _020023E2 - 2; case 2
+ .short _02002786 - _020023E2 - 2; case 3
+ .short _020027B6 - _020023E2 - 2; case 4
+ .short _0200280C - _020023E2 - 2; case 5
+ .short _02002818 - _020023E2 - 2; case 6
+_020023F0:
+ ldr r0, _02002658 ; =0x021C48B8
+ ldr r1, [r0, #0x44]
+ mov r0, #0x3
+ tst r0, r1
+ beq _02002402
+ ldrb r0, [r6, #0x0]
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x1f
+ bne _02002414
+_02002402:
+ ldr r0, _0200265C ; =0x021C48F8
+ ldrh r0, [r0, #0x22]
+ cmp r0, #0x0
+ beq _02002432
+ ldr r0, _02002660 ; =0x02106FC4
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x1f
+ beq _02002432
+_02002414:
+ add r0, r4, #0x0
+ mov r1, #0x0
+ add r0, #0x26
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ add r0, #0x25
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x19
+ beq _02002432
+ ldr r1, _02002660 ; =0x02106FC4
+ mov r0, #0x40
+ ldrb r2, [r1, #0x0]
+ orr r0, r2
+ strb r0, [r1, #0x0]
+_02002432:
+ add r0, r4, #0x0
+ add r0, #0x26
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0200248C
+ add r0, r4, #0x0
+ add r0, #0x25
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x19
+ beq _0200248C
+ add r0, r4, #0x0
+ add r0, #0x26
+ ldrb r0, [r0, #0x0]
+ sub r1, r0, #0x1
+ add r0, r4, #0x0
+ add r0, #0x26
+ strb r1, [r0, #0x0]
+ ldr r0, _02002660 ; =0x02106FC4
+ ldrb r0, [r0, #0x0]
+ lsl r1, r0, #0x1f
+ lsr r1, r1, #0x1f
+ beq _02002486
+ ldr r1, _02002658 ; =0x021C48B8
+ ldr r2, [r1, #0x48]
+ mov r1, #0x3
+ tst r1, r2
+ bne _02002478
+ ldr r1, _0200265C ; =0x021C48F8
+ ldrh r1, [r1, #0x20]
+ cmp r1, #0x0
+ beq _02002486
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x1f
+ beq _02002486
+_02002478:
+ ldrb r1, [r6, #0x0]
+ mov r0, #0x10
+ add r4, #0x26
+ orr r0, r1
+ strb r0, [r6, #0x0]
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+_02002486:
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_0200248C:
+ add r0, r4, #0x0
+ add r0, #0x25
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x19
+ lsr r1, r0, #0x19
+ add r0, r4, #0x0
+ add r0, #0x26
+ strb r1, [r0, #0x0]
+ ldr r0, [r4, #0x0]
+ ldrh r5, [r0, #0x0]
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ mov r0, #0xf1
+ lsl r0, r0, #0x8
+ cmp r5, r0
+ bne _020024B0
+ bl ErrorHandling
+_020024B0:
+ ldr r0, _02002664 ; =0x0000F0FD
+ cmp r5, r0
+ bgt _020024DA
+ bge _0200250E
+ ldr r1, _02002668 ; =0x000025BD
+ cmp r5, r1
+ bgt _020024D0
+ sub r0, r1, #0x1
+ cmp r5, r0
+ blt _020024CE
+ bne _020024C8
+ b _020026D8
+_020024C8:
+ cmp r5, r1
+ bne _020024CE
+ b _020026EC
+_020024CE:
+ b _02002700
+_020024D0:
+ mov r0, #0xe
+ lsl r0, r0, #0xc
+ cmp r5, r0
+ beq _020024F2
+ b _02002700
+_020024DA:
+ ldr r0, _0200266C ; =0x0000FFFE
+ cmp r5, r0
+ bgt _020024E4
+ beq _0200251A
+ b _02002700
+_020024E4:
+ add r0, r0, #0x1
+ cmp r5, r0
+ beq _020024EC
+ b _02002700
+_020024EC:
+ add sp, #0xc
+ mov r0, #0x1
+ pop {r3-r6, pc}
+_020024F2:
+ ldrb r0, [r4, #0xa]
+ mov r1, #0x1
+ strb r0, [r4, #0xc]
+ ldrb r0, [r4, #0x9]
+ bl FUN_02002E4C
+ ldrb r1, [r4, #0xf]
+ ldrb r2, [r4, #0xd]
+ add sp, #0xc
+ add r0, r1, r0
+ add r0, r2, r0
+ strb r0, [r4, #0xd]
+ mov r0, #0x2
+ pop {r3-r6, pc}
+_0200250E:
+ ldr r0, [r4, #0x0]
+ add sp, #0xc
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ mov r0, #0x2
+ pop {r3-r6, pc}
+_0200251A:
+ ldr r0, [r4, #0x0]
+ sub r0, r0, #0x2
+ str r0, [r4, #0x0]
+ bl FUN_0201B8E0
+ lsl r0, r0, #0x10
+ ldr r1, _02002670 ; =0x0000FE06
+ lsr r0, r0, #0x10
+ cmp r0, r1
+ bgt _02002552
+ blt _02002532
+ b _02002678
+_02002532:
+ mov r1, #0x2
+ lsl r1, r1, #0x8
+ sub r1, r0, r1
+ cmp r1, #0x4
+ bhi _0200255C
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02002548: ; jump table (using 16-bit offset)
+ .short _020025B4 - _02002548 - 2; case 0
+ .short _020025DE - _02002548 - 2; case 1
+ .short _02002600 - _02002548 - 2; case 2
+ .short _02002618 - _02002548 - 2; case 3
+ .short _02002624 - _02002548 - 2; case 4
+_02002552:
+ mov r1, #0xff
+ lsl r1, r1, #0x8
+ cmp r0, r1
+ bgt _0200255E
+ beq _02002566
+_0200255C:
+ b _020026CA
+_0200255E:
+ add r1, r1, #0x1
+ cmp r0, r1
+ beq _02002630
+ b _020026CA
+_02002566:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ cmp r0, #0xff
+ bne _02002596
+ ldrb r0, [r4, #0x11]
+ ldrb r2, [r4, #0x17]
+ sub r1, r0, #0x1
+ lsr r0, r1, #0x1f
+ add r0, r1, r0
+ asr r0, r0, #0x1
+ add r0, #0x64
+ strb r0, [r4, #0x17]
+ cmp r2, #0x64
+ blo _02002644
+ cmp r2, #0x6b
+ bhs _02002644
+ sub r2, #0x64
+ lsl r0, r2, #0x10
+ lsr r0, r0, #0x10
+ b _0200259E
+_02002596:
+ cmp r0, #0x64
+ blo _0200259E
+ strb r0, [r4, #0x17]
+ b _020026CA
+_0200259E:
+ lsl r1, r0, #0x1
+ add r0, r1, #0x1
+ strb r0, [r4, #0x11]
+ add r0, r1, #0x2
+ strb r0, [r4, #0x13]
+ ldrb r0, [r4, #0x11]
+ ldrb r1, [r4, #0x12]
+ ldrb r2, [r4, #0x13]
+ bl FUN_0201C05C
+ b _020026CA
+_020025B4:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ lsl r0, r0, #0x10
+ lsr r3, r0, #0x10
+ ldrb r1, [r4, #0xc]
+ ldrb r2, [r4, #0xd]
+ add r0, r4, #0x0
+ bl FUN_0201C1EC
+ add r0, r4, #0x0
+ add r0, #0x25
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x1f
+ beq _020026CA
+ ldr r0, [r4, #0x4]
+ bl FUN_020191D0
+ b _020026CA
+_020025DE:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ add r1, r4, #0x0
+ add r1, #0x26
+ strb r0, [r1, #0x0]
+ ldr r0, [r4, #0x0]
+ bl FUN_0201B8B8
+ str r0, [r4, #0x0]
+ mov r0, #0x6
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002600:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ strh r0, [r4, #0x2a]
+ ldr r0, [r4, #0x0]
+ bl FUN_0201B8B8
+ str r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002618:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ strb r0, [r4, #0xc]
+ b _020026CA
+_02002624:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ strb r0, [r4, #0xd]
+ b _020026CA
+_02002630:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ cmp r0, #0x64
+ beq _02002646
+ cmp r0, #0xc8
+ beq _0200264E
+_02002644:
+ b _020026CA
+_02002646:
+ mov r0, #0x0
+ strh r0, [r4, #0x14]
+ strb r0, [r4, #0x16]
+ b _020026CA
+_0200264E:
+ ldr r0, _02002674 ; =0x0000FFFC
+ strh r0, [r4, #0x14]
+ mov r0, #0x0
+ strb r0, [r4, #0x16]
+ b _020026CA
+ .balign 4
+_02002658: .word 0x021C48B8
+_0200265C: .word 0x021C48F8
+_02002660: .word 0x02106FC4
+_02002664: .word 0x0000F0FD
+_02002668: .word 0x000025BD
+_0200266C: .word 0x0000FFFE
+_02002670: .word 0x0000FE06
+_02002674: .word 0x0000FFFC
+_02002678:
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_0201B914
+ lsl r0, r0, #0x10
+ lsr r1, r0, #0x10
+ mov r0, #0xfe
+ lsl r0, r0, #0x8
+ cmp r1, r0
+ beq _020026AE
+ add r0, r0, #0x1
+ cmp r1, r0
+ bne _020026CA
+ add r0, r4, #0x0
+ mov r1, #0x2
+ add r0, #0x24
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ bl FUN_0200284C
+ ldr r0, [r4, #0x0]
+ bl FUN_0201B8B8
+ str r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_020026AE:
+ add r0, r4, #0x0
+ mov r1, #0x3
+ add r0, #0x24
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ bl FUN_0200284C
+ ldr r0, [r4, #0x0]
+ bl FUN_0201B8B8
+ str r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_020026CA:
+ ldr r0, [r4, #0x0]
+ bl FUN_0201B8B8
+ str r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x2
+ pop {r3-r6, pc}
+_020026D8:
+ add r0, r4, #0x0
+ mov r1, #0x2
+ add r0, #0x24
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ bl FUN_0200284C
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_020026EC:
+ add r0, r4, #0x0
+ mov r1, #0x3
+ add r0, #0x24
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ bl FUN_0200284C
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002700:
+ ldrb r0, [r6, #0x0]
+ add r1, r5, #0x0
+ lsl r0, r0, #0x1c
+ lsr r0, r0, #0x1c
+ bl FUN_02002D94
+ add r5, r0, #0x0
+ ldrb r0, [r4, #0xc]
+ add r2, r5, #0x0
+ add r3, r5, #0x0
+ str r0, [sp, #0x0]
+ ldrb r0, [r4, #0xd]
+ add r2, #0x80
+ add r3, #0x81
+ str r0, [sp, #0x4]
+ ldrh r0, [r4, #0x14]
+ add r1, r5, #0x0
+ str r0, [sp, #0x8]
+ ldrb r2, [r2, #0x0]
+ ldrb r3, [r3, #0x0]
+ ldr r0, [r4, #0x4]
+ bl FUN_0201974C
+ add r5, #0x80
+ ldrb r1, [r5, #0x0]
+ ldrb r0, [r4, #0xe]
+ ldrb r2, [r4, #0xc]
+ add sp, #0xc
+ add r0, r1, r0
+ add r0, r2, r0
+ strb r0, [r4, #0xc]
+ mov r0, #0x0
+ pop {r3-r6, pc}
+_02002742:
+ bl FUN_02002B3C
+ cmp r0, #0x0
+ beq _02002756
+ add r0, r4, #0x0
+ bl FUN_02002A00
+ mov r0, #0x0
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+_02002756:
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_0200275C:
+ bl FUN_02002B18
+ cmp r0, #0x0
+ beq _02002780
+ add r0, r4, #0x0
+ bl FUN_02002A00
+ ldrb r1, [r4, #0x12]
+ ldr r0, [r4, #0x4]
+ bl FUN_02019620
+ ldrb r0, [r4, #0xa]
+ strb r0, [r4, #0xc]
+ ldrb r0, [r4, #0xb]
+ strb r0, [r4, #0xd]
+ mov r0, #0x0
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+_02002780:
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002786:
+ bl FUN_02002B18
+ cmp r0, #0x0
+ beq _020027B0
+ add r0, r4, #0x0
+ bl FUN_02002A00
+ ldrb r0, [r4, #0x9]
+ mov r1, #0x1
+ bl FUN_02002E4C
+ ldrb r1, [r4, #0xf]
+ add r1, r1, r0
+ add r0, r4, #0x0
+ add r0, #0x27
+ strb r1, [r0, #0x0]
+ ldrb r0, [r4, #0xa]
+ strb r0, [r4, #0xc]
+ mov r0, #0x4
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+_020027B0:
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_020027B6:
+ add r0, #0x27
+ ldrb r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _02002800
+ cmp r2, #0x4
+ ldrb r5, [r4, #0x12]
+ bge _020027D8
+ lsl r3, r5, #0x4
+ orr r3, r5
+ lsl r3, r3, #0x18
+ ldr r0, [r4, #0x4]
+ mov r1, #0x0
+ lsr r3, r3, #0x18
+ bl FUN_0201A8C8
+ mov r1, #0x0
+ b _020027F2
+_020027D8:
+ lsl r3, r5, #0x4
+ orr r3, r5
+ lsl r3, r3, #0x18
+ ldr r0, [r4, #0x4]
+ mov r1, #0x0
+ mov r2, #0x4
+ lsr r3, r3, #0x18
+ bl FUN_0201A8C8
+ add r0, r4, #0x0
+ add r0, #0x27
+ ldrb r0, [r0, #0x0]
+ sub r1, r0, #0x4
+_020027F2:
+ add r0, r4, #0x0
+ add r0, #0x27
+ strb r1, [r0, #0x0]
+ ldr r0, [r4, #0x4]
+ bl FUN_020191D0
+ b _02002806
+_02002800:
+ mov r0, #0x0
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+_02002806:
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_0200280C:
+ mov r0, #0x0
+ add r4, #0x24
+ strb r0, [r4, #0x0]
+ add sp, #0xc
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002818:
+ add r0, #0x26
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0200282C
+ add r0, r4, #0x0
+ add r0, #0x26
+ ldrb r0, [r0, #0x0]
+ add r4, #0x26
+ sub r0, r0, #0x1
+ b _02002830
+_0200282C:
+ mov r0, #0x0
+ add r4, #0x24
+_02002830:
+ add sp, #0xc
+ strb r0, [r4, #0x0]
+ mov r0, #0x3
+ pop {r3-r6, pc}
+_02002838:
+ mov r0, #0x1
+ add sp, #0xc
+ pop {r3-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02002840
+FUN_02002840: ; 0x02002840
+ ldr r1, _02002848 ; =0x02106FC4
+ strh r0, [r1, #0x2]
+ bx lr
+ nop
+_02002848: .word 0x02106FC4
+
+ thumb_func_start FUN_0200284C
+FUN_0200284C: ; 0x0200284C
+ ldr r1, _02002874 ; =0x02106FC4
+ add r0, #0x1c
+ ldrb r1, [r1, #0x0]
+ lsl r1, r1, #0x1d
+ lsr r1, r1, #0x1f
+ beq _02002862
+ ldrb r2, [r0, #0x2]
+ mov r1, #0xff
+ bic r2, r1
+ strb r2, [r0, #0x2]
+ bx lr
+_02002862:
+ ldrb r2, [r0, #0x1]
+ mov r1, #0x60
+ bic r2, r1
+ strb r2, [r0, #0x1]
+ ldrb r2, [r0, #0x1]
+ mov r1, #0x1f
+ bic r2, r1
+ strb r2, [r0, #0x1]
+ bx lr
+ .balign 4
+_02002874: .word 0x02106FC4
+
+ thumb_func_start FUN_02002878
+FUN_02002878: ; 0x02002878
+ push {r4-r7, lr}
+ sub sp, #0x2c
+ add r5, r0, #0x0
+ ldr r0, _020029F8 ; =0x02106FC4
+ add r4, r5, #0x0
+ ldrb r0, [r0, #0x0]
+ add r4, #0x1c
+ lsl r0, r0, #0x1d
+ lsr r0, r0, #0x1f
+ beq _0200288E
+ b _020029F4
+_0200288E:
+ ldrb r0, [r4, #0x1]
+ lsl r1, r0, #0x1b
+ lsr r2, r1, #0x1b
+ beq _020028AC
+ mov r1, #0x1f
+ add r2, #0xff
+ bic r0, r1
+ lsl r1, r2, #0x18
+ lsr r2, r1, #0x18
+ mov r1, #0x1f
+ and r1, r2
+ orr r0, r1
+ add sp, #0x2c
+ strb r0, [r4, #0x1]
+ pop {r4-r7, pc}
+_020028AC:
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB08
+ str r0, [sp, #0x20]
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB14
+ str r0, [sp, #0x24]
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB18
+ str r0, [sp, #0x28]
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB0C
+ ldr r1, _020029F8 ; =0x02106FC4
+ ldrh r6, [r1, #0x2]
+ ldr r1, [sp, #0x28]
+ add r7, r1, #0x2
+ ldr r1, [sp, #0x24]
+ add r2, r6, #0x0
+ add r0, r1, r0
+ str r0, [sp, #0x1c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x18]
+ lsl r0, r7, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ add r2, #0x12
+ mov r12, r2
+ ldrb r2, [r4, #0x1]
+ ldr r0, [r5, #0x4]
+ ldr r1, [sp, #0x20]
+ lsl r2, r2, #0x19
+ lsr r3, r2, #0x1e
+ ldr r2, _020029FC ; =0x020ECB50
+ ldr r0, [r0, #0x0]
+ ldrb r2, [r2, r3]
+ mov r3, r12
+ lsl r2, r2, #0x2
+ add r2, r3, r2
+ ldr r3, [sp, #0x18]
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ ldr r0, [sp, #0x1c]
+ ldr r1, [sp, #0x20]
+ add r0, r0, #0x2
+ str r0, [sp, #0x10]
+ lsl r0, r7, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ ldrb r2, [r4, #0x1]
+ add r7, r6, #0x0
+ ldr r0, [r5, #0x4]
+ lsl r2, r2, #0x19
+ lsr r3, r2, #0x1e
+ ldr r2, _020029FC ; =0x020ECB50
+ add r7, #0x13
+ ldrb r2, [r2, r3]
+ ldr r3, [sp, #0x10]
+ ldr r0, [r0, #0x0]
+ lsl r2, r2, #0x2
+ add r2, r7, r2
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ ldr r0, [sp, #0x28]
+ add r7, r6, #0x0
+ add r0, r0, #0x3
+ str r0, [sp, #0x14]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ ldrb r2, [r4, #0x1]
+ ldr r0, [r5, #0x4]
+ add r7, #0x14
+ lsl r2, r2, #0x19
+ lsr r3, r2, #0x1e
+ ldr r2, _020029FC ; =0x020ECB50
+ ldr r0, [r0, #0x0]
+ ldrb r2, [r2, r3]
+ ldr r3, [sp, #0x18]
+ ldr r1, [sp, #0x20]
+ lsl r2, r2, #0x2
+ add r2, r7, r2
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ ldr r0, [sp, #0x14]
+ add r6, #0x15
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ ldrb r2, [r4, #0x1]
+ ldr r0, [r5, #0x4]
+ ldr r1, [sp, #0x20]
+ lsl r2, r2, #0x19
+ lsr r3, r2, #0x1e
+ ldr r2, _020029FC ; =0x020ECB50
+ ldr r0, [r0, #0x0]
+ ldrb r2, [r2, r3]
+ ldr r3, [sp, #0x10]
+ lsl r2, r2, #0x2
+ add r2, r6, r2
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x18
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ ldr r0, [r5, #0x4]
+ ldr r1, [sp, #0x20]
+ ldr r0, [r0, #0x0]
+ bl FUN_02017CD0
+ ldrb r1, [r4, #0x1]
+ mov r0, #0x1f
+ bic r1, r0
+ mov r0, #0x8
+ orr r0, r1
+ strb r0, [r4, #0x1]
+ ldrb r2, [r4, #0x1]
+ mov r1, #0x60
+ add r0, r2, #0x0
+ bic r0, r1
+ lsl r1, r2, #0x19
+ lsr r1, r1, #0x1e
+ add r1, r1, #0x1
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ lsl r1, r1, #0x1e
+ lsr r1, r1, #0x19
+ orr r0, r1
+ strb r0, [r4, #0x1]
+_020029F4:
+ add sp, #0x2c
+ pop {r4-r7, pc}
+ .balign 4
+_020029F8: .word 0x02106FC4
+_020029FC: .word 0x020ECB50
+
+ thumb_func_start FUN_02002A00
+FUN_02002A00: ; 0x02002A00
+ push {r3-r7, lr}
+ sub sp, #0x18
+ add r5, r0, #0x0
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB08
+ str r0, [sp, #0x10]
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB14
+ str r0, [sp, #0x14]
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB18
+ add r6, r0, #0x0
+ ldr r0, [r5, #0x4]
+ bl FUN_0201AB0C
+ ldr r1, _02002A90 ; =0x02106FC4
+ add r7, r6, #0x2
+ ldrh r4, [r1, #0x2]
+ ldr r1, [sp, #0x14]
+ add r6, r1, r0
+ lsl r0, r7, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ mov r0, #0x2
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ ldr r0, [r5, #0x4]
+ add r2, r4, #0x0
+ add r2, #0xa
+ add r3, r6, #0x1
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x18
+ ldr r0, [r0, #0x0]
+ ldr r1, [sp, #0x10]
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ lsl r0, r7, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x4]
+ mov r0, #0x2
+ str r0, [sp, #0x8]
+ mov r0, #0x10
+ str r0, [sp, #0xc]
+ ldr r0, [r5, #0x4]
+ add r4, #0xb
+ add r3, r6, #0x2
+ lsl r2, r4, #0x10
+ lsl r3, r3, #0x18
+ ldr r0, [r0, #0x0]
+ ldr r1, [sp, #0x10]
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x18
+ bl FUN_02018540
+ ldr r0, [r5, #0x4]
+ ldr r1, [sp, #0x10]
+ ldr r0, [r0, #0x0]
+ bl FUN_02017CD0
+ add sp, #0x18
+ pop {r3-r7, pc}
+ nop
+_02002A90: .word 0x02106FC4
+
+ thumb_func_start FUN_02002A94
+FUN_02002A94: ; 0x02002A94
+ push {r3, lr}
+ ldr r0, _02002ACC ; =0x021C48B8
+ ldr r1, [r0, #0x48]
+ mov r0, #0x3
+ tst r0, r1
+ bne _02002AB2
+ ldr r0, _02002AD0 ; =0x021C48F8
+ ldrh r0, [r0, #0x20]
+ cmp r0, #0x0
+ beq _02002AC6
+ ldr r0, _02002AD4 ; =0x02106FC4
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x1f
+ beq _02002AC6
+_02002AB2:
+ ldr r0, _02002AD8 ; =0x000005DC
+ bl FUN_020054C8
+ ldr r1, _02002AD4 ; =0x02106FC4
+ mov r0, #0x80
+ ldrb r2, [r1, #0x0]
+ orr r0, r2
+ strb r0, [r1, #0x0]
+ mov r0, #0x1
+ pop {r3, pc}
+_02002AC6:
+ mov r0, #0x0
+ pop {r3, pc}
+ nop
+_02002ACC: .word 0x021C48B8
+_02002AD0: .word 0x021C48F8
+_02002AD4: .word 0x02106FC4
+_02002AD8: .word 0x000005DC
+
+ thumb_func_start FUN_02002ADC
+FUN_02002ADC: ; 0x02002ADC
+ push {r4, lr}
+ add r2, r0, #0x0
+ add r2, #0x1c
+ ldrb r1, [r2, #0x2]
+ add r4, r1, #0x0
+ cmp r4, #0x64
+ bne _02002AEE
+ mov r0, #0x1
+ pop {r4, pc}
+_02002AEE:
+ mov r3, #0xff
+ bic r1, r3
+ add r3, r4, #0x1
+ lsl r3, r3, #0x18
+ lsr r3, r3, #0x18
+ lsl r3, r3, #0x18
+ lsr r3, r3, #0x18
+ orr r1, r3
+ strb r1, [r2, #0x2]
+ ldr r1, _02002B14 ; =0x02106FC4
+ ldrb r1, [r1, #0x0]
+ lsl r1, r1, #0x1a
+ lsr r1, r1, #0x1f
+ beq _02002B10
+ bl FUN_02002A94
+ pop {r4, pc}
+_02002B10:
+ mov r0, #0x0
+ pop {r4, pc}
+ .balign 4
+_02002B14: .word 0x02106FC4
+
+ thumb_func_start FUN_02002B18
+FUN_02002B18: ; 0x02002B18
+ push {r4, lr}
+ ldr r1, _02002B38 ; =0x02106FC4
+ add r4, r0, #0x0
+ ldrb r1, [r1, #0x0]
+ lsl r1, r1, #0x1d
+ lsr r1, r1, #0x1f
+ beq _02002B2C
+ bl FUN_02002ADC
+ pop {r4, pc}
+_02002B2C:
+ bl FUN_02002878
+ add r0, r4, #0x0
+ bl FUN_02002A94
+ pop {r4, pc}
+ .balign 4
+_02002B38: .word 0x02106FC4
+
+ thumb_func_start FUN_02002B3C
+FUN_02002B3C: ; 0x02002B3C
+ push {r3, lr}
+ ldr r1, _02002B5C ; =0x02106FC4
+ ldrb r1, [r1, #0x0]
+ lsl r1, r1, #0x1d
+ lsr r1, r1, #0x1f
+ beq _02002B52
+ bl FUN_02002ADC
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ pop {r3, pc}
+_02002B52:
+ bl FUN_02002A94
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ pop {r3, pc}
+ .balign 4
+_02002B5C: .word 0x02106FC4
+
+ thumb_func_start FUN_02002B60
+FUN_02002B60: ; 0x02002B60
+ ldr r2, _02002B78 ; =0x02106FC4
+ mov r1, #0x1
+ ldrb r3, [r2, #0x0]
+ lsl r0, r0, #0x18
+ bic r3, r1
+ lsr r1, r0, #0x18
+ mov r0, #0x1
+ and r0, r1
+ orr r0, r3
+ strb r0, [r2, #0x0]
+ bx lr
+ nop
+_02002B78: .word 0x02106FC4
+
+ thumb_func_start FUN_02002B7C
+FUN_02002B7C: ; 0x02002B7C
+ push {r3-r4}
+ ldr r1, _02002BB4 ; =0x02106FC4
+ mov r3, #0x4
+ ldrb r2, [r1, #0x0]
+ mov r4, #0x1
+ bic r2, r3
+ add r3, r0, #0x0
+ and r3, r4
+ lsl r3, r3, #0x18
+ lsr r3, r3, #0x18
+ lsl r3, r3, #0x1f
+ lsr r3, r3, #0x1d
+ orr r2, r3
+ asr r0, r0, #0x1
+ and r0, r4
+ strb r2, [r1, #0x0]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ lsl r0, r0, #0x1f
+ ldrb r2, [r1, #0x0]
+ mov r3, #0x20
+ lsr r0, r0, #0x1a
+ bic r2, r3
+ orr r0, r2
+ strb r0, [r1, #0x0]
+ pop {r3-r4}
+ bx lr
+ nop
+_02002BB4: .word 0x02106FC4
+
+ thumb_func_start FUN_02002BB8
+FUN_02002BB8: ; 0x02002BB8
+ ldr r2, _02002BD0 ; =0x02106FC4
+ lsl r0, r0, #0x18
+ ldrb r3, [r2, #0x0]
+ lsr r0, r0, #0x18
+ mov r1, #0x10
+ lsl r0, r0, #0x1f
+ bic r3, r1
+ lsr r0, r0, #0x1b
+ orr r0, r3
+ strb r0, [r2, #0x0]
+ bx lr
+ nop
+_02002BD0: .word 0x02106FC4
+
+ thumb_func_start FUN_02002BD4
+FUN_02002BD4: ; 0x02002BD4
+ ldr r0, _02002BE0 ; =0x02106FC4
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x19
+ lsr r0, r0, #0x1f
+ bx lr
+ nop
+_02002BE0: .word 0x02106FC4
+
+ thumb_func_start FUN_02002BE4
+FUN_02002BE4: ; 0x02002BE4
+ ldr r1, _02002BF0 ; =0x02106FC4
+ mov r0, #0x40
+ ldrb r2, [r1, #0x0]
+ bic r2, r0
+ strb r2, [r1, #0x0]
+ bx lr
+ .balign 4
+_02002BF0: .word 0x02106FC4
+
+ thumb_func_start FUN_02002BF4
+FUN_02002BF4: ; 0x02002BF4
+ ldr r0, _02002C00 ; =0x02106FC4
+ ldrb r0, [r0, #0x0]
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x1f
+ bx lr
+ nop
+_02002C00: .word 0x02106FC4
+
+ thumb_func_start FUN_02002C04
+FUN_02002C04: ; 0x02002C04
+ ldr r1, _02002C10 ; =0x02106FC4
+ mov r0, #0x80
+ ldrb r2, [r1, #0x0]
+ bic r2, r0
+ strb r2, [r1, #0x0]
+ bx lr
+ .balign 4
+_02002C10: .word 0x02106FC4
+
+ thumb_func_start FUN_02002C14
+FUN_02002C14: ; 0x02002C14
+ push {r4, lr}
+ ldr r0, _02002C44 ; =0x02106FCC
+ ldr r4, _02002C48 ; =0x02106FC8
+ mov r1, #0x0
+ str r0, [r4, #0x0]
+ add r2, r1, #0x0
+ add r0, r1, #0x0
+_02002C22:
+ ldr r3, [r4, #0x0]
+ add r1, r1, #0x1
+ add r3, r3, r2
+ add r3, #0x84
+ str r0, [r3, #0x0]
+ ldr r3, [r4, #0x0]
+ add r3, r3, r2
+ add r3, #0x94
+ add r2, r2, #0x4
+ str r0, [r3, #0x0]
+ cmp r1, #0x4
+ blo _02002C22
+ ldr r0, _02002C4C ; =0x020ECB64
+ bl FUN_0201BCBC
+ pop {r4, pc}
+ nop
+_02002C44: .word 0x02106FCC
+_02002C48: .word 0x02106FC8
+_02002C4C: .word 0x020ECB64
+
+ thumb_func_start FUN_02002C50
+FUN_02002C50: ; 0x02002C50
+ push {r3-r4, lr}
+ sub sp, #0x4
+ str r1, [sp, #0x0]
+ lsl r4, r0, #0x2
+ ldr r1, _02002C78 ; =0x020ECB54
+ ldr r3, _02002C7C ; =0x020ECB56
+ ldrh r1, [r1, r4]
+ ldrh r3, [r3, r4]
+ mov r0, #0xe
+ mov r2, #0x1
+ bl FUN_02021590
+ ldr r1, _02002C80 ; =0x02106FC8
+ ldr r1, [r1, #0x0]
+ add r1, r1, r4
+ add r1, #0x94
+ str r0, [r1, #0x0]
+ add sp, #0x4
+ pop {r3-r4, pc}
+ nop
+_02002C78: .word 0x020ECB54
+_02002C7C: .word 0x020ECB56
+_02002C80: .word 0x02106FC8
+
+ thumb_func_start FUN_02002C84
+FUN_02002C84: ; 0x02002C84
+ push {r3-r5, lr}
+ add r4, r0, #0x0
+ add r5, r1, #0x0
+ cmp r4, #0x4
+ blt _02002C92
+ bl ErrorHandling
+_02002C92:
+ ldr r0, _02002CBC ; =0x02106FC8
+ lsl r4, r4, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002CA6
+ bl ErrorHandling
+_02002CA6:
+ ldr r0, _02002CBC ; =0x02106FC8
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r2, r5, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_020215E0
+ pop {r3-r5, pc}
+ nop
+_02002CBC: .word 0x02106FC8
+
+ thumb_func_start FUN_02002CC0
+FUN_02002CC0: ; 0x02002CC0
+ push {r4, lr}
+ add r4, r0, #0x0
+ cmp r4, #0x4
+ blt _02002CCC
+ bl ErrorHandling
+_02002CCC:
+ ldr r0, _02002CF4 ; =0x02106FC8
+ lsl r4, r4, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002CE0
+ bl ErrorHandling
+_02002CE0:
+ ldr r0, _02002CF4 ; =0x02106FC8
+ mov r1, #0x1
+ ldr r0, [r0, #0x0]
+ mov r2, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_020215E0
+ pop {r4, pc}
+ .balign 4
+_02002CF4: .word 0x02106FC8
+
+ thumb_func_start FUN_02002CF8
+FUN_02002CF8: ; 0x02002CF8
+ push {r3-r7, lr}
+ add r4, r0, #0x0
+ cmp r4, #0x4
+ blt _02002D04
+ bl ErrorHandling
+_02002D04:
+ ldr r0, _02002D8C ; =0x02106FC8
+ lsl r6, r4, #0x2
+ ldr r7, [r0, #0x0]
+ add r0, r7, r6
+ add r0, #0x84
+ ldr r0, [r0, #0x0]
+ mov r12, r0
+ cmp r0, #0x0
+ beq _02002D68
+ ldr r2, _02002D90 ; =0x020ECB54
+ mov r1, #0x0
+ ldrh r0, [r2, r6]
+ add r3, r7, #0x0
+_02002D1E:
+ cmp r1, r4
+ beq _02002D3E
+ ldrh r5, [r2, #0x0]
+ cmp r5, r0
+ bne _02002D3E
+ add r5, r3, #0x0
+ add r5, #0x94
+ ldr r5, [r5, #0x0]
+ cmp r5, #0x0
+ beq _02002D3E
+ lsl r0, r1, #0x2
+ add r2, r7, r0
+ add r2, #0x84
+ mov r0, r12
+ str r0, [r2, #0x0]
+ b _02002D48
+_02002D3E:
+ add r1, r1, #0x1
+ add r2, r2, #0x4
+ add r3, r3, #0x4
+ cmp r1, #0x4
+ blo _02002D1E
+_02002D48:
+ cmp r1, #0x4
+ bne _02002D68
+ ldr r0, _02002D8C ; =0x02106FC8
+ lsl r5, r4, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, r5
+ add r0, #0x84
+ ldr r0, [r0, #0x0]
+ bl FUN_02016A18
+ ldr r0, _02002D8C ; =0x02106FC8
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, r5
+ add r0, #0x84
+ str r1, [r0, #0x0]
+_02002D68:
+ ldr r0, _02002D8C ; =0x02106FC8
+ ldr r0, [r0, #0x0]
+ add r0, r0, r6
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _02002D88
+ bl FUN_020215C8
+ ldr r0, _02002D8C ; =0x02106FC8
+ mov r2, #0x0
+ ldr r1, [r0, #0x0]
+ lsl r0, r4, #0x2
+ add r0, r1, r0
+ add r0, #0x94
+ str r2, [r0, #0x0]
+_02002D88:
+ pop {r3-r7, pc}
+ nop
+_02002D8C: .word 0x02106FC8
+_02002D90: .word 0x020ECB54
+
+ thumb_func_start FUN_02002D94
+FUN_02002D94: ; 0x02002D94
+ push {r3, lr}
+ ldr r2, _02002DAC ; =0x02106FC8
+ lsl r0, r0, #0x2
+ ldr r2, [r2, #0x0]
+ add r0, r2, r0
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_02021750
+ ldr r0, _02002DAC ; =0x02106FC8
+ ldr r0, [r0, #0x0]
+ pop {r3, pc}
+ .balign 4
+_02002DAC: .word 0x02106FC8
+
+ thumb_func_start FUN_02002DB0
+FUN_02002DB0: ; 0x02002DB0
+ push {r4, lr}
+ add r3, r1, #0x0
+ add r3, #0x1c
+ ldrb r2, [r3, #0x1]
+ lsl r2, r2, #0x18
+ lsr r2, r2, #0x1f
+ bne _02002DD8
+ ldrb r2, [r3, #0x0]
+ mov r4, #0xf
+ lsl r0, r0, #0x18
+ bic r2, r4
+ lsr r4, r0, #0x18
+ mov r0, #0xf
+ and r0, r4
+ orr r0, r2
+ strb r0, [r3, #0x0]
+ ldrb r2, [r3, #0x1]
+ mov r0, #0x80
+ orr r0, r2
+ strb r0, [r3, #0x1]
+_02002DD8:
+ add r0, r1, #0x0
+ bl FUN_020023C0
+ pop {r4, pc}
+
+ thumb_func_start FUN_02002DE0
+FUN_02002DE0: ; 0x02002DE0
+ push {r4-r6, lr}
+ lsl r4, r0, #0x2
+ ldr r0, _02002E10 ; =0x02106FC8
+ add r5, r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r6, r2, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002DFA
+ bl ErrorHandling
+_02002DFA:
+ ldr r0, _02002E10 ; =0x02106FC8
+ add r1, r5, #0x0
+ ldr r0, [r0, #0x0]
+ add r2, r6, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_020218D8
+ pop {r4-r6, pc}
+ nop
+_02002E10: .word 0x02106FC8
+
+ thumb_func_start FUN_02002E14
+FUN_02002E14: ; 0x02002E14
+ push {r4-r6, lr}
+ lsl r4, r0, #0x2
+ ldr r0, _02002E48 ; =0x02106FC8
+ add r5, r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r6, r2, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002E2E
+ bl ErrorHandling
+_02002E2E:
+ add r0, r5, #0x0
+ bl FUN_02021F2C
+ add r1, r0, #0x0
+ ldr r0, _02002E48 ; =0x02106FC8
+ add r2, r6, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_020218D8
+ pop {r4-r6, pc}
+ .balign 4
+_02002E48: .word 0x02106FC8
+
+ thumb_func_start FUN_02002E4C
+FUN_02002E4C: ; 0x02002E4C
+ mov r2, #0x0
+ cmp r1, #0x7
+ bhi _02002EAC
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02002E5E: ; jump table (using 16-bit offset)
+ .short _02002E6E - _02002E5E - 2; case 0
+ .short _02002E76 - _02002E5E - 2; case 1
+ .short _02002E7E - _02002E5E - 2; case 2
+ .short _02002E86 - _02002E5E - 2; case 3
+ .short _02002E8E - _02002E5E - 2; case 4
+ .short _02002E96 - _02002E5E - 2; case 5
+ .short _02002E9E - _02002E5E - 2; case 6
+ .short _02002EA6 - _02002E5E - 2; case 7
+_02002E6E:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EB0 ; =0x020ECB64
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E76:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EB4 ; =0x020ECB65
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E7E:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EB8 ; =0x020ECB66
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E86:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EBC ; =0x020ECB67
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E8E:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EC0 ; =0x020ECB68
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E96:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EC4 ; =0x020ECB69
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002E9E:
+ lsl r1, r0, #0x3
+ ldr r0, _02002EC8 ; =0x020ECB6A
+ ldrb r2, [r0, r1]
+ b _02002EAC
+_02002EA6:
+ lsl r1, r0, #0x3
+ ldr r0, _02002ECC ; =0x020ECB6B
+ ldrb r2, [r0, r1]
+_02002EAC:
+ add r0, r2, #0x0
+ bx lr
+ .balign 4
+_02002EB0: .word 0x020ECB64
+_02002EB4: .word 0x020ECB65
+_02002EB8: .word 0x020ECB66
+_02002EBC: .word 0x020ECB67
+_02002EC0: .word 0x020ECB68
+_02002EC4: .word 0x020ECB69
+_02002EC8: .word 0x020ECB6A
+_02002ECC: .word 0x020ECB6B
+
+ thumb_func_start FUN_02002ED0
+FUN_02002ED0: ; 0x02002ED0
+ push {r4, lr}
+ sub sp, #0x8
+ add r4, r0, #0x0
+ mov r0, #0x20
+ str r0, [sp, #0x0]
+ add r3, r1, #0x0
+ str r2, [sp, #0x4]
+ mov r0, #0xe
+ mov r1, #0x6
+ add r2, r4, #0x0
+ bl FUN_02006930
+ add sp, #0x8
+ pop {r4, pc}
+
+ thumb_func_start FUN_02002EEC
+FUN_02002EEC: ; 0x02002EEC
+ push {r4, lr}
+ sub sp, #0x8
+ add r4, r0, #0x0
+ mov r0, #0x20
+ str r0, [sp, #0x0]
+ add r3, r1, #0x0
+ str r2, [sp, #0x4]
+ mov r0, #0xe
+ mov r1, #0x7
+ add r2, r4, #0x0
+ bl FUN_02006930
+ add sp, #0x8
+ pop {r4, pc}
+
+ thumb_func_start FUN_02002F08
+FUN_02002F08: ; 0x02002F08
+ push {r4-r6, lr}
+ lsl r4, r0, #0x2
+ ldr r0, _02002F3C ; =0x02106FC8
+ add r5, r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r6, r2, #0x0
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002F22
+ bl ErrorHandling
+_02002F22:
+ add r0, r5, #0x0
+ bl FUN_02021F2C
+ add r1, r0, #0x0
+ ldr r0, _02002F3C ; =0x02106FC8
+ add r2, r6, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_02021934
+ pop {r4-r6, pc}
+ .balign 4
+_02002F3C: .word 0x02106FC8
+
+ thumb_func_start FUN_02002F40
+FUN_02002F40: ; 0x02002F40
+ push {r4, lr}
+ add r4, r3, #0x0
+ bl FUN_02002E14
+ cmp r0, r4
+ bhs _02002F52
+ sub r0, r4, r0
+ lsr r0, r0, #0x1
+ pop {r4, pc}
+_02002F52:
+ mov r0, #0x0
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02002F58
+FUN_02002F58: ; 0x02002F58
+ push {r3-r7, lr}
+ ldrh r2, [r0, #0x0]
+ ldr r1, _02002F8C ; =0x0000FFFF
+ mov r5, #0x1
+ cmp r2, r1
+ beq _02002F88
+ mov r6, #0xe
+ lsl r6, r6, #0xc
+ add r7, r1, #0x0
+ sub r4, r1, #0x1
+_02002F6C:
+ cmp r2, r4
+ bne _02002F76
+ bl FUN_0201B8B8
+ b _02002F82
+_02002F76:
+ cmp r2, r6
+ bne _02002F80
+ add r5, r5, #0x1
+ add r0, r0, #0x2
+ b _02002F82
+_02002F80:
+ add r0, r0, #0x2
+_02002F82:
+ ldrh r2, [r0, #0x0]
+ cmp r2, r7
+ bne _02002F6C
+_02002F88:
+ add r0, r5, #0x0
+ pop {r3-r7, pc}
+ .balign 4
+_02002F8C: .word 0x0000FFFF
+
+ thumb_func_start FUN_02002F90
+FUN_02002F90: ; 0x02002F90
+ push {r3, lr}
+ bl FUN_02021F2C
+ bl FUN_02002F58
+ pop {r3, pc}
+
+ thumb_func_start FUN_02002F9C
+FUN_02002F9C: ; 0x02002F9C
+ push {r3-r5, lr}
+ lsl r4, r0, #0x2
+ ldr r0, _02002FCC ; =0x02106FC8
+ add r5, r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02002FB4
+ bl ErrorHandling
+_02002FB4:
+ add r0, r5, #0x0
+ bl FUN_02021F2C
+ add r1, r0, #0x0
+ ldr r0, _02002FCC ; =0x02106FC8
+ ldr r0, [r0, #0x0]
+ add r0, r0, r4
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ bl FUN_0202199C
+ pop {r3-r5, pc}
+ .balign 4
+_02002FCC: .word 0x02106FC8
+
+ thumb_func_start FUN_02002FD0
+FUN_02002FD0: ; 0x02002FD0
+ push {r4, lr}
+ mov r1, #0x12
+ lsl r1, r1, #0x4
+ bl FUN_02016998
+ mov r2, #0x12
+ mov r1, #0x0
+ lsl r2, r2, #0x4
+ add r4, r0, #0x0
+ blx MI_CpuFill8
+ add r0, r4, #0x0
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02002FEC
+FUN_02002FEC: ; 0x02002FEC
+ ldr r3, _02002FF0 ; =FUN_02016A18
+ bx r3
+ .balign 4
+_02002FF0: .word FUN_02016A18
+
+ thumb_func_start FUN_02002FF4
+FUN_02002FF4: ; 0x02002FF4
+ push {r3-r4}
+ mov r4, #0x14
+ mul r4, r1
+ str r2, [r0, r4]
+ add r1, r0, r4
+ ldr r0, [sp, #0x8]
+ str r3, [r1, #0x4]
+ str r0, [r1, #0x8]
+ pop {r3-r4}
+ bx lr
+
+ thumb_func_start FUN_02003008
+FUN_02003008: ; 0x02003008
+ push {r3-r7, lr}
+ sub sp, #0x8
+ add r4, r2, #0x0
+ add r5, r0, #0x0
+ add r6, r1, #0x0
+ str r3, [sp, #0x4]
+ add r0, r3, #0x0
+ add r1, r4, #0x0
+ bl FUN_02016998
+ add r7, r0, #0x0
+ ldr r0, [sp, #0x4]
+ add r1, r4, #0x0
+ bl FUN_02016998
+ add r3, r0, #0x0
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ add r2, r7, #0x0
+ str r4, [sp, #0x0]
+ bl FUN_02002FF4
+ add sp, #0x8
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02003038
+FUN_02003038: ; 0x02003038
+ push {r3-r5, lr}
+ add r4, r0, #0x0
+ mov r0, #0x14
+ add r5, r1, #0x0
+ mul r5, r0
+ ldr r0, [r4, r5]
+ bl FUN_02016A18
+ add r0, r4, r5
+ ldr r0, [r0, #0x4]
+ bl FUN_02016A18
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003054
+FUN_02003054: ; 0x02003054
+ push {r3-r7, lr}
+ add r5, r0, #0x0
+ add r0, sp, #0x8
+ ldrh r7, [r0, #0x10]
+ add r6, r2, #0x0
+ mov r0, #0x14
+ mul r6, r0
+ str r1, [sp, #0x0]
+ add r0, r1, #0x0
+ ldr r1, [r5, r6]
+ lsl r4, r3, #0x1
+ add r1, r1, r4
+ add r2, r7, #0x0
+ blx MIi_CpuCopy16
+ add r1, r5, r6
+ ldr r1, [r1, #0x4]
+ ldr r0, [sp, #0x0]
+ add r1, r1, r4
+ add r2, r7, #0x0
+ blx MIi_CpuCopy16
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003084
+FUN_02003084: ; 0x02003084
+ push {r4-r6, lr}
+ sub sp, #0x8
+ add r5, r0, #0x0
+ add r0, r1, #0x0
+ add r1, r2, #0x0
+ add r2, sp, #0x4
+ ldr r4, [sp, #0x1c]
+ bl FUN_02006C08
+ add r6, r0, #0x0
+ bne _0200309E
+ bl ErrorHandling
+_0200309E:
+ cmp r4, #0x0
+ bne _020030A6
+ ldr r0, [sp, #0x4]
+ ldr r4, [r0, #0x8]
+_020030A6:
+ add r0, sp, #0x8
+ ldrh r0, [r0, #0x18]
+ ldr r2, [sp, #0x18]
+ mov r1, #0x14
+ mul r1, r2
+ add r1, r5, r1
+ lsl r0, r0, #0x1
+ ldr r1, [r1, #0x8]
+ add r0, r4, r0
+ cmp r0, r1
+ bls _020030C0
+ bl ErrorHandling
+_020030C0:
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ add r3, sp, #0x8
+ ldr r2, [r1, #0xc]
+ ldrh r1, [r3, #0x1c]
+ ldrh r3, [r3, #0x18]
+ add r0, r5, #0x0
+ lsl r1, r1, #0x1
+ add r1, r2, r1
+ ldr r2, [sp, #0x18]
+ bl FUN_02003054
+ add r0, r6, #0x0
+ bl FUN_02016A18
+ add sp, #0x8
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_020030E8
+FUN_020030E8: ; 0x020030E8
+ push {r4, lr}
+ sub sp, #0x10
+ ldr r4, [sp, #0x18]
+ str r4, [sp, #0x0]
+ ldr r4, [sp, #0x1c]
+ str r4, [sp, #0x4]
+ add r4, sp, #0x8
+ ldrh r4, [r4, #0x18]
+ str r4, [sp, #0x8]
+ mov r4, #0x0
+ str r4, [sp, #0xc]
+ bl FUN_02003084
+ add sp, #0x10
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003108
+FUN_02003108: ; 0x02003108
+ push {r3-r7, lr}
+ add r4, r1, #0x0
+ mov r1, #0x14
+ add r6, r0, #0x0
+ mul r1, r4
+ add r5, r2, #0x0
+ add r1, r6, r1
+ add r7, r3, #0x0
+ lsl r0, r5, #0x1
+ ldr r1, [r1, #0x8]
+ add r0, r7, r0
+ cmp r0, r1
+ bls _02003126
+ bl ErrorHandling
+_02003126:
+ cmp r4, #0x3
+ bhi _0200315E
+ add r0, r4, r4
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02003136: ; jump table (using 16-bit offset)
+ .short _0200313E - _02003136 - 2; case 0
+ .short _02003146 - _02003136 - 2; case 1
+ .short _0200314E - _02003136 - 2; case 2
+ .short _02003156 - _02003136 - 2; case 3
+_0200313E:
+ bl FUN_020222E8
+ add r1, r0, #0x0
+ b _02003164
+_02003146:
+ bl FUN_020222F8
+ add r1, r0, #0x0
+ b _02003164
+_0200314E:
+ bl FUN_02022308
+ add r1, r0, #0x0
+ b _02003164
+_02003156:
+ bl FUN_02022310
+ add r1, r0, #0x0
+ b _02003164
+_0200315E:
+ bl ErrorHandling
+ pop {r3-r7, pc}
+_02003164:
+ lsl r0, r7, #0x10
+ lsr r0, r0, #0x10
+ lsl r2, r5, #0x1
+ str r0, [sp, #0x0]
+ add r1, r1, r2
+ add r0, r6, #0x0
+ add r2, r4, #0x0
+ add r3, r5, #0x0
+ bl FUN_02003054
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200317C
+FUN_0200317C: ; 0x0200317C
+ push {r3-r5, lr}
+ add r4, r2, #0x0
+ add r5, r3, #0x0
+ add r2, sp, #0x0
+ add r3, r4, #0x0
+ bl FUN_02006C08
+ add r4, r0, #0x0
+ bne _02003192
+ bl ErrorHandling
+_02003192:
+ cmp r5, #0x0
+ bne _0200319A
+ ldr r0, [sp, #0x0]
+ ldr r5, [r0, #0x8]
+_0200319A:
+ ldr r0, [sp, #0x0]
+ add r2, r5, #0x0
+ ldr r1, [r0, #0xc]
+ add r0, sp, #0x0
+ ldrh r0, [r0, #0x10]
+ lsl r0, r0, #0x1
+ add r0, r1, r0
+ ldr r1, [sp, #0x14]
+ blx MIi_CpuCopy16
+ add r0, r4, #0x0
+ bl FUN_02016A18
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_020031B8
+FUN_020031B8: ; 0x020031B8
+ push {r3-r7, lr}
+ sub sp, #0x8
+ add r4, sp, #0x10
+ add r5, r0, #0x0
+ add r0, r1, #0x0
+ ldrh r1, [r4, #0x14]
+ add r6, r3, #0x0
+ str r1, [sp, #0x0]
+ ldrh r1, [r4, #0x10]
+ lsl r4, r2, #0x1
+ ldr r2, [sp, #0x0]
+ lsl r7, r1, #0x1
+ mov r1, #0x14
+ mul r6, r1
+ mul r1, r0
+ ldr r0, [r5, r1]
+ str r1, [sp, #0x4]
+ ldr r1, [r5, r6]
+ add r0, r0, r4
+ add r1, r1, r7
+ blx MIi_CpuCopy16
+ ldr r0, [sp, #0x4]
+ add r1, r5, r6
+ ldr r0, [r5, r0]
+ ldr r1, [r1, #0x4]
+ ldr r2, [sp, #0x0]
+ add r0, r0, r4
+ add r1, r1, r7
+ blx MIi_CpuCopy16
+ add sp, #0x8
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_020031FC
+FUN_020031FC: ; 0x020031FC
+ mov r2, #0x14
+ mul r2, r1
+ ldr r0, [r0, r2]
+ bx lr
+
+ thumb_func_start FUN_02003204
+FUN_02003204: ; 0x02003204
+ mov r2, #0x14
+ mul r2, r1
+ add r0, r0, r2
+ ldr r0, [r0, #0x4]
+ bx lr
+ .balign 4
+
+ thumb_func_start FUN_02003210
+FUN_02003210: ; 0x02003210
+ push {r0-r3}
+ push {r3-r7, lr}
+ sub sp, #0x10
+ str r3, [sp, #0x8]
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x38]
+ mov r6, #0x0
+ str r0, [sp, #0x38]
+ ldr r0, [sp, #0x3c]
+ add r7, r1, #0x0
+ str r0, [sp, #0x3c]
+ ldr r0, [sp, #0x40]
+ add r4, r6, #0x0
+ str r0, [sp, #0x40]
+ add r0, sp, #0x28
+ ldrh r0, [r0, #0x8]
+ str r0, [sp, #0xc]
+_02003232:
+ add r0, r7, #0x0
+ add r1, r4, #0x0
+ bl FUN_02003314
+ cmp r0, #0x1
+ bne _020032A6
+ mov r0, #0x46
+ lsl r0, r0, #0x2
+ ldrh r0, [r5, r0]
+ add r1, r4, #0x0
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x12
+ bl FUN_02003314
+ cmp r0, #0x0
+ bne _020032A6
+ mov r0, #0x14
+ add r6, r4, #0x0
+ mul r6, r0
+ add r0, r4, #0x0
+ add r1, r5, r6
+ add r2, sp, #0x30
+ bl FUN_02003368
+ ldr r0, [sp, #0x3c]
+ add r1, sp, #0x28
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x40]
+ str r0, [sp, #0x4]
+ add r0, r5, r6
+ ldrh r1, [r1, #0x8]
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0x38]
+ add r0, #0xc
+ bl FUN_020033A4
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ bl FUN_02003328
+ cmp r4, #0x4
+ blo _02003294
+ mov r2, #0x1
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ lsl r2, r2, #0x8
+ bl FUN_0200359C
+ b _0200329E
+_02003294:
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ mov r2, #0x10
+ bl FUN_0200359C
+_0200329E:
+ ldr r1, [sp, #0xc]
+ add r0, sp, #0x28
+ strh r1, [r0, #0x8]
+ mov r6, #0x1
+_020032A6:
+ add r0, r4, #0x1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ cmp r4, #0xe
+ blo _02003232
+ cmp r6, #0x1
+ bne _02003300
+ mov r0, #0x46
+ lsl r0, r0, #0x2
+ ldrh r2, [r5, r0]
+ ldr r1, _0200330C ; =0xFFFF0003
+ and r1, r2
+ lsl r2, r2, #0x10
+ lsr r2, r2, #0x12
+ orr r2, r7
+ lsl r2, r2, #0x12
+ lsr r2, r2, #0x10
+ orr r1, r2
+ strh r1, [r5, r0]
+ add r1, r0, #0x2
+ ldrh r1, [r5, r1]
+ lsl r1, r1, #0x11
+ lsr r1, r1, #0x1f
+ bne _02003300
+ add r1, r0, #0x2
+ ldrh r2, [r5, r1]
+ mov r1, #0x1
+ lsl r1, r1, #0xe
+ orr r2, r1
+ add r1, r0, #0x2
+ strh r2, [r5, r1]
+ ldrh r2, [r5, r0]
+ mov r1, #0x3
+ bic r2, r1
+ mov r1, #0x1
+ orr r1, r2
+ strh r1, [r5, r0]
+ mov r2, #0x0
+ add r0, r0, #0x4
+ strb r2, [r5, r0]
+ ldr r0, _02003310 ; =FUN_02003464
+ add r1, r5, #0x0
+ sub r2, r2, #0x2
+ bl FUN_0200CA44
+_02003300:
+ add r0, r6, #0x0
+ add sp, #0x10
+ pop {r3-r7}
+ pop {r3}
+ add sp, #0x10
+ bx r3
+ .balign 4
+_0200330C: .word 0xFFFF0003
+_02003310: .word FUN_02003464
+
+ thumb_func_start FUN_02003314
+FUN_02003314: ; 0x02003314
+ mov r3, #0x1
+ add r2, r3, #0x0
+ lsl r2, r1
+ tst r0, r2
+ bne _02003320
+ mov r3, #0x0
+_02003320:
+ lsl r0, r3, #0x18
+ lsr r0, r0, #0x18
+ bx lr
+ .balign 4
+
+ thumb_func_start FUN_02003328
+FUN_02003328: ; 0x02003328
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ ldr r0, _02003360 ; =0x0000011A
+ add r4, r1, #0x0
+ ldrh r0, [r5, r0]
+ lsl r0, r0, #0x12
+ lsr r0, r0, #0x12
+ bl FUN_02003314
+ cmp r0, #0x1
+ beq _0200335E
+ ldr r3, _02003360 ; =0x0000011A
+ ldr r1, _02003364 ; =0xFFFFC000
+ ldrh r2, [r5, r3]
+ add r0, r2, #0x0
+ lsl r2, r2, #0x12
+ lsr r6, r2, #0x12
+ mov r2, #0x1
+ lsl r2, r4
+ orr r2, r6
+ lsl r2, r2, #0x10
+ and r0, r1
+ lsr r2, r2, #0x10
+ lsr r1, r1, #0x12
+ and r1, r2
+ orr r0, r1
+ strh r0, [r5, r3]
+_0200335E:
+ pop {r4-r6, pc}
+ .balign 4
+_02003360: .word 0x0000011A
+_02003364: .word 0xFFFFC000
+
+ thumb_func_start FUN_02003368
+FUN_02003368: ; 0x02003368
+ push {r4-r5}
+ cmp r0, #0x4
+ ldr r0, [r1, #0x8]
+ bge _02003374
+ lsl r0, r0, #0x13
+ b _02003378
+_02003374:
+ lsr r0, r0, #0x9
+ lsl r0, r0, #0x18
+_02003378:
+ mov r4, #0x0
+ lsr r0, r0, #0x18
+ add r5, r4, #0x0
+ cmp r0, #0x0
+ bls _02003398
+ mov r3, #0x1
+_02003384:
+ add r1, r3, #0x0
+ lsl r1, r5
+ add r1, r4, r1
+ lsl r1, r1, #0x10
+ lsr r4, r1, #0x10
+ add r1, r5, #0x1
+ lsl r1, r1, #0x18
+ lsr r5, r1, #0x18
+ cmp r5, r0
+ blo _02003384
+_02003398:
+ ldrh r0, [r2, #0x0]
+ and r0, r4
+ strh r0, [r2, #0x0]
+ pop {r4-r5}
+ bx lr
+ .balign 4
+
+ thumb_func_start FUN_020033A4
+FUN_020033A4: ; 0x020033A4
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r6, r1, #0x0
+ add r4, r3, #0x0
+ cmp r2, #0x0
+ bge _020033D4
+ add r0, r2, #0x0
+ blx abs
+ add r0, r0, #0x2
+ ldrh r1, [r5, #0x6]
+ mov r2, #0xf
+ lsl r0, r0, #0x10
+ bic r1, r2
+ lsr r2, r0, #0x10
+ mov r0, #0xf
+ and r0, r2
+ orr r0, r1
+ strh r0, [r5, #0x6]
+ ldrh r1, [r5, #0x2]
+ mov r0, #0x3f
+ bic r1, r0
+ strh r1, [r5, #0x2]
+ b _020033F2
+_020033D4:
+ ldrh r1, [r5, #0x6]
+ mov r0, #0xf
+ bic r1, r0
+ mov r0, #0x2
+ orr r0, r1
+ strh r0, [r5, #0x6]
+ ldrh r0, [r5, #0x2]
+ mov r1, #0x3f
+ bic r0, r1
+ lsl r1, r2, #0x10
+ lsr r2, r1, #0x10
+ mov r1, #0x3f
+ and r1, r2
+ orr r0, r1
+ strh r0, [r5, #0x2]
+_020033F2:
+ strh r6, [r5, #0x0]
+ ldrh r1, [r5, #0x2]
+ ldr r0, _02003454 ; =0xFFFFF83F
+ add r3, sp, #0x0
+ and r1, r0
+ lsl r0, r4, #0x1b
+ lsr r0, r0, #0x15
+ orr r0, r1
+ strh r0, [r5, #0x2]
+ ldrh r1, [r5, #0x2]
+ ldr r0, _02003458 ; =0xFFFF07FF
+ add r2, r1, #0x0
+ ldrb r1, [r3, #0x10]
+ and r2, r0
+ lsl r0, r1, #0x1b
+ lsr r0, r0, #0x10
+ orr r0, r2
+ strh r0, [r5, #0x2]
+ ldrh r0, [r5, #0x4]
+ ldr r2, _0200345C ; =0xFFFF8000
+ ldrh r6, [r3, #0x14]
+ lsr r3, r2, #0x11
+ and r0, r2
+ and r3, r6
+ orr r0, r3
+ strh r0, [r5, #0x4]
+ ldrh r3, [r5, #0x6]
+ ldr r0, _02003460 ; =0xFFFFFC0F
+ and r0, r3
+ ldrh r3, [r5, #0x2]
+ lsl r3, r3, #0x1a
+ lsr r3, r3, #0x1a
+ lsl r3, r3, #0x1a
+ lsr r3, r3, #0x16
+ orr r0, r3
+ strh r0, [r5, #0x6]
+ cmp r4, r1
+ ldrh r1, [r5, #0x4]
+ bhs _02003448
+ sub r0, r2, #0x1
+ and r0, r1
+ strh r0, [r5, #0x4]
+ pop {r4-r6, pc}
+_02003448:
+ mov r0, #0x2
+ lsl r0, r0, #0xe
+ orr r0, r1
+ strh r0, [r5, #0x4]
+ pop {r4-r6, pc}
+ nop
+_02003454: .word 0xFFFFF83F
+_02003458: .word 0xFFFF07FF
+_0200345C: .word 0xFFFF8000
+_02003460: .word 0xFFFFFC0F
+
+ thumb_func_start FUN_02003464
+FUN_02003464: ; 0x02003464
+ push {r4-r6, lr}
+ add r4, r1, #0x0
+ mov r1, #0x47
+ lsl r1, r1, #0x2
+ ldrb r2, [r4, r1]
+ add r5, r0, #0x0
+ cmp r2, #0x1
+ bne _020034A4
+ mov r2, #0x0
+ strb r2, [r4, r1]
+ sub r2, r1, #0x2
+ ldrh r3, [r4, r2]
+ ldr r2, _020034F4 ; =0xFFFFC000
+ add r5, r3, #0x0
+ and r5, r2
+ sub r3, r1, #0x2
+ strh r5, [r4, r3]
+ sub r3, r1, #0x4
+ ldrh r5, [r4, r3]
+ ldr r3, _020034F8 ; =0xFFFF0003
+ sub r2, r2, #0x1
+ and r5, r3
+ sub r3, r1, #0x4
+ strh r5, [r4, r3]
+ sub r3, r1, #0x2
+ ldrh r3, [r4, r3]
+ sub r1, r1, #0x2
+ and r2, r3
+ strh r2, [r4, r1]
+ bl FUN_0200CAB4
+ pop {r4-r6, pc}
+_020034A4:
+ sub r0, r1, #0x4
+ ldrh r2, [r4, r0]
+ lsl r0, r2, #0x1e
+ lsr r0, r0, #0x1e
+ cmp r0, #0x1
+ bne _020034F0
+ sub r0, r1, #0x2
+ ldrh r0, [r4, r0]
+ ldr r3, _020034F4 ; =0xFFFFC000
+ lsl r2, r2, #0x10
+ lsr r6, r2, #0x12
+ lsr r2, r3, #0x12
+ and r0, r3
+ and r2, r6
+ orr r2, r0
+ sub r0, r1, #0x2
+ strh r2, [r4, r0]
+ add r0, r4, #0x0
+ bl FUN_02003500
+ add r0, r4, #0x0
+ bl FUN_02003520
+ mov r1, #0x46
+ lsl r1, r1, #0x2
+ ldrh r0, [r4, r1]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x12
+ bne _020034F0
+ add r0, r1, #0x2
+ ldrh r2, [r4, r0]
+ ldr r0, _020034FC ; =0xFFFFBFFF
+ and r2, r0
+ add r0, r1, #0x2
+ strh r2, [r4, r0]
+ add r0, r5, #0x0
+ bl FUN_0200CAB4
+_020034F0:
+ pop {r4-r6, pc}
+ nop
+_020034F4: .word 0xFFFFC000
+_020034F8: .word 0xFFFF0003
+_020034FC: .word 0xFFFFBFFF
+
+ thumb_func_start FUN_02003500
+FUN_02003500: ; 0x02003500
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ mov r4, #0x0
+ mov r6, #0x10
+_02003508:
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r6, #0x0
+ bl FUN_02003540
+ add r0, r4, #0x1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ cmp r4, #0x4
+ blo _02003508
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003520
+FUN_02003520: ; 0x02003520
+ push {r4-r6, lr}
+ mov r4, #0x4
+ add r6, r4, #0x0
+ add r5, r0, #0x0
+ add r6, #0xfc
+_0200352A:
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r6, #0x0
+ bl FUN_02003540
+ add r0, r4, #0x1
+ lsl r0, r0, #0x18
+ lsr r4, r0, #0x18
+ cmp r4, #0xe
+ blo _0200352A
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02003540
+FUN_02003540: ; 0x02003540
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ mov r0, #0x46
+ lsl r0, r0, #0x2
+ ldrh r0, [r5, r0]
+ add r4, r1, #0x0
+ add r6, r2, #0x0
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x12
+ bl FUN_02003314
+ cmp r0, #0x0
+ beq _02003594
+ mov r0, #0x14
+ mul r0, r4
+ add r2, r5, r0
+ ldrh r0, [r2, #0x12]
+ ldrh r3, [r2, #0xe]
+ lsl r1, r0, #0x16
+ lsl r3, r3, #0x1a
+ lsr r1, r1, #0x1a
+ lsr r3, r3, #0x1a
+ cmp r1, r3
+ bhs _02003584
+ ldr r3, _02003598 ; =0xFFFFFC0F
+ and r3, r0
+ add r0, r1, #0x1
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ lsl r0, r0, #0x1a
+ lsr r0, r0, #0x16
+ orr r0, r3
+ strh r0, [r2, #0x12]
+ pop {r4-r6, pc}
+_02003584:
+ ldr r1, _02003598 ; =0xFFFFFC0F
+ and r0, r1
+ strh r0, [r2, #0x12]
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r6, #0x0
+ bl FUN_0200359C
+_02003594:
+ pop {r4-r6, pc}
+ nop
+_02003598: .word 0xFFFFFC0F
+
+ thumb_func_start FUN_0200359C
+FUN_0200359C: ; 0x0200359C
+ push {r4-r7, lr}
+ sub sp, #0xc
+ str r1, [sp, #0x4]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r1, #0x14
+ mul r1, r0
+ ldr r0, [sp, #0x0]
+ mov r6, #0x0
+ add r5, r0, r1
+ add r0, r5, #0x0
+ str r0, [sp, #0x8]
+ add r0, #0xc
+ add r7, r2, #0x0
+ add r4, r6, #0x0
+ str r0, [sp, #0x8]
+_020035BC:
+ ldrh r0, [r5, #0xc]
+ lsl r1, r6, #0x10
+ lsr r1, r1, #0x10
+ bl FUN_02003314
+ cmp r0, #0x0
+ beq _020035DC
+ ldr r0, [r5, #0x0]
+ lsl r1, r4, #0x1
+ ldr r2, [r5, #0x4]
+ add r0, r0, r1
+ add r1, r2, r1
+ ldr r2, [sp, #0x8]
+ add r3, r7, #0x0
+ bl FUN_020035F8
+_020035DC:
+ add r6, r6, #0x1
+ add r4, r4, r7
+ cmp r6, #0x10
+ blo _020035BC
+ ldr r1, [sp, #0x4]
+ add r5, #0xc
+ lsl r1, r1, #0x18
+ ldr r0, [sp, #0x0]
+ lsr r1, r1, #0x18
+ add r2, r5, #0x0
+ bl FUN_02003684
+ add sp, #0xc
+ pop {r4-r7, pc}
+
+ thumb_func_start FUN_020035F8
+FUN_020035F8: ; 0x020035F8
+ push {r3-r7, lr}
+ sub sp, #0x8
+ str r0, [sp, #0x4]
+ mov r0, #0x0
+ add r6, r1, #0x0
+ mov r12, r0
+ str r2, [sp, #0x0]
+ mov lr, r3
+ add r0, r3, #0x0
+ beq _02003680
+_0200360C:
+ ldr r0, [sp, #0x4]
+ mov r1, #0x1f
+ ldrh r0, [r0, #0x0]
+ asr r2, r0, #0x5
+ add r5, r2, #0x0
+ and r5, r1
+ ldr r1, [sp, #0x0]
+ asr r4, r0, #0xa
+ ldrh r1, [r1, #0x4]
+ lsl r1, r1, #0x11
+ lsr r3, r1, #0x11
+ ldr r1, [sp, #0x0]
+ ldrh r1, [r1, #0x2]
+ lsl r1, r1, #0x15
+ lsr r2, r1, #0x1b
+ mov r1, #0x1f
+ and r1, r4
+ mov r4, #0x1f
+ and r0, r4
+ and r4, r3
+ sub r4, r4, r0
+ mul r4, r2
+ asr r4, r4, #0x4
+ add r0, r0, r4
+ lsl r0, r0, #0x18
+ lsr r7, r0, #0x18
+ asr r4, r3, #0xa
+ mov r0, #0x1f
+ and r0, r4
+ sub r0, r0, r1
+ mul r0, r2
+ asr r0, r0, #0x4
+ add r0, r1, r0
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ asr r3, r3, #0x5
+ mov r1, #0x1f
+ and r1, r3
+ sub r1, r1, r5
+ mul r1, r2
+ asr r1, r1, #0x4
+ add r1, r5, r1
+ lsl r1, r1, #0x18
+ lsl r0, r0, #0xa
+ lsr r1, r1, #0x13
+ orr r0, r1
+ orr r0, r7
+ strh r0, [r6, #0x0]
+ ldr r0, [sp, #0x4]
+ add r6, r6, #0x2
+ add r0, r0, #0x2
+ str r0, [sp, #0x4]
+ mov r0, r12
+ add r1, r0, #0x1
+ mov r0, lr
+ mov r12, r1
+ cmp r1, r0
+ blo _0200360C
+_02003680:
+ add sp, #0x8
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02003684
+FUN_02003684: ; 0x02003684
+ push {r4-r5}
+ ldrh r4, [r2, #0x2]
+ lsl r3, r4, #0x10
+ lsl r4, r4, #0x15
+ lsr r3, r3, #0x1b
+ lsr r4, r4, #0x1b
+ cmp r4, r3
+ bne _020036BE
+ mov r3, #0x46
+ lsl r3, r3, #0x2
+ ldrh r4, [r0, r3]
+ mov r2, #0x1
+ lsl r2, r1
+ lsl r1, r4, #0x10
+ lsr r5, r1, #0x12
+ add r1, r5, #0x0
+ tst r1, r2
+ beq _0200371E
+ eor r2, r5
+ lsl r2, r2, #0x10
+ ldr r1, _02003724 ; =0xFFFF0003
+ lsr r2, r2, #0x10
+ lsl r2, r2, #0x12
+ and r1, r4
+ lsr r2, r2, #0x10
+ orr r1, r2
+ strh r1, [r0, r3]
+ pop {r4-r5}
+ bx lr
+_020036BE:
+ ldrh r0, [r2, #0x4]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x1f
+ bne _020036F4
+ lsl r0, r4, #0x10
+ asr r1, r0, #0x10
+ ldrh r0, [r2, #0x6]
+ lsl r0, r0, #0x1c
+ lsr r0, r0, #0x1c
+ add r0, r1, r0
+ lsl r0, r0, #0x10
+ asr r4, r0, #0x10
+ cmp r4, r3
+ ble _020036DE
+ lsl r0, r3, #0x10
+ asr r4, r0, #0x10
+_020036DE:
+ ldrh r1, [r2, #0x2]
+ ldr r0, _02003728 ; =0xFFFFF83F
+ and r1, r0
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x15
+ orr r0, r1
+ strh r0, [r2, #0x2]
+ pop {r4-r5}
+ bx lr
+_020036F4:
+ lsl r0, r4, #0x10
+ asr r1, r0, #0x10
+ ldrh r0, [r2, #0x6]
+ lsl r0, r0, #0x1c
+ lsr r0, r0, #0x1c
+ sub r0, r1, r0
+ lsl r0, r0, #0x10
+ asr r4, r0, #0x10
+ cmp r4, r3
+ bge _0200370C
+ lsl r0, r3, #0x10
+ asr r4, r0, #0x10
+_0200370C:
+ ldrh r1, [r2, #0x2]
+ ldr r0, _02003728 ; =0xFFFFF83F
+ and r1, r0
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ lsl r0, r0, #0x1b
+ lsr r0, r0, #0x15
+ orr r0, r1
+ strh r0, [r2, #0x2]
+_0200371E:
+ pop {r4-r5}
+ bx lr
+ nop
+_02003724: .word 0xFFFF0003
+_02003728: .word 0xFFFFF83F
+
+ thumb_func_start FUN_0200372C
+FUN_0200372C: ; 0x0200372C
+ push {r3-r7, lr}
+ add r6, r0, #0x0
+ ldr r0, _020038DC ; =0x0000011A
+ ldrh r1, [r6, r0]
+ lsl r1, r1, #0x10
+ lsr r1, r1, #0x1f
+ bne _02003748
+ sub r0, r0, #0x2
+ ldrh r0, [r6, r0]
+ lsl r0, r0, #0x1e
+ lsr r0, r0, #0x1e
+ cmp r0, #0x1
+ beq _02003748
+ b _020038DA
+_02003748:
+ mov r7, #0x2
+ mov r5, #0x0
+ add r4, r6, #0x0
+ lsl r7, r7, #0xc
+_02003750:
+ ldr r0, _020038DC ; =0x0000011A
+ ldrh r1, [r6, r0]
+ lsl r0, r1, #0x10
+ lsr r0, r0, #0x1f
+ bne _02003770
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x0
+ beq _0200377C
+ lsl r0, r1, #0x12
+ lsl r1, r5, #0x10
+ lsr r0, r0, #0x12
+ lsr r1, r1, #0x10
+ bl FUN_02003314
+ cmp r0, #0x0
+ beq _0200377C
+_02003770:
+ ldr r0, [r4, #0x4]
+ ldr r1, [r4, #0x8]
+ blx DC_FlushRange
+ cmp r5, #0xd
+ bls _0200377E
+_0200377C:
+ b _020038A4
+_0200377E:
+ add r0, r5, r5
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_0200378A: ; jump table (using 16-bit offset)
+ .short _020037A6 - _0200378A - 2; case 0
+ .short _020037B2 - _0200378A - 2; case 1
+ .short _020037BE - _0200378A - 2; case 2
+ .short _020037CA - _0200378A - 2; case 3
+ .short _020037D6 - _0200378A - 2; case 4
+ .short _020037EA - _0200378A - 2; case 5
+ .short _020037FE - _0200378A - 2; case 6
+ .short _02003814 - _0200378A - 2; case 7
+ .short _0200382A - _0200378A - 2; case 8
+ .short _0200383E - _0200378A - 2; case 9
+ .short _02003852 - _0200378A - 2; case 10
+ .short _02003868 - _0200378A - 2; case 11
+ .short _0200387E - _0200378A - 2; case 12
+ .short _02003892 - _0200378A - 2; case 13
+_020037A6:
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GX_LoadBGPltt
+ b _020038A4
+_020037B2:
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GXS_LoadBGPltt
+ b _020038A4
+_020037BE:
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GX_LoadOBJPltt
+ b _020038A4
+_020037CA:
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GXS_LoadOBJPltt
+ b _020038A4
+_020037D6:
+ blx GX_BeginLoadBGExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GX_LoadBGExtPltt
+ blx GX_EndLoadBGExtPltt
+ b _020038A4
+_020037EA:
+ blx GX_BeginLoadBGExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r1, r7, #0x0
+ blx GX_LoadBGExtPltt
+ blx GX_EndLoadBGExtPltt
+ b _020038A4
+_020037FE:
+ blx GX_BeginLoadBGExtPltt
+ mov r1, #0x1
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ lsl r1, r1, #0xe
+ blx GX_LoadBGExtPltt
+ blx GX_EndLoadBGExtPltt
+ b _020038A4
+_02003814:
+ blx GX_BeginLoadBGExtPltt
+ mov r1, #0x6
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ lsl r1, r1, #0xc
+ blx GX_LoadBGExtPltt
+ blx GX_EndLoadBGExtPltt
+ b _020038A4
+_0200382A:
+ blx GXS_BeginLoadBGExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GXS_LoadBGExtPltt
+ blx GXS_EndLoadBGExtPltt
+ b _020038A4
+_0200383E:
+ blx GXS_BeginLoadBGExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r1, r7, #0x0
+ blx GXS_LoadBGExtPltt
+ blx GXS_EndLoadBGExtPltt
+ b _020038A4
+_02003852:
+ blx GXS_BeginLoadBGExtPltt
+ mov r1, #0x1
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ lsl r1, r1, #0xe
+ blx GXS_LoadBGExtPltt
+ blx GXS_EndLoadBGExtPltt
+ b _020038A4
+_02003868:
+ blx GXS_BeginLoadBGExtPltt
+ mov r1, #0x6
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ lsl r1, r1, #0xc
+ blx GXS_LoadBGExtPltt
+ blx GXS_EndLoadBGExtPltt
+ b _020038A4
+_0200387E:
+ blx GX_BeginLoadOBJExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GX_LoadOBJExtPltt
+ blx GX_EndLoadOBJExtPltt
+ b _020038A4
+_02003892:
+ blx GXS_BeginLoadOBJExtPltt
+ ldr r0, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ blx GXS_LoadOBJExtPltt
+ blx GXS_EndLoadOBJExtPltt
+_020038A4:
+ add r5, r5, #0x1
+ add r4, #0x14
+ cmp r5, #0xe
+ bge _020038AE
+ b _02003750
+_020038AE:
+ ldr r3, _020038DC ; =0x0000011A
+ ldr r1, _020038E0 ; =0xFFFFC000
+ sub r2, r3, #0x2
+ ldrh r2, [r6, r2]
+ ldrh r0, [r6, r3]
+ lsl r2, r2, #0x10
+ and r0, r1
+ lsr r2, r2, #0x12
+ lsr r1, r1, #0x12
+ and r1, r2
+ orr r0, r1
+ strh r0, [r6, r3]
+ ldrh r0, [r6, r3]
+ lsl r0, r0, #0x12
+ lsr r0, r0, #0x12
+ bne _020038DA
+ sub r0, r3, #0x2
+ ldrh r1, [r6, r0]
+ mov r0, #0x3
+ bic r1, r0
+ sub r0, r3, #0x2
+ strh r1, [r6, r0]
+_020038DA:
+ pop {r3-r7, pc}
+ .balign 4
+_020038DC: .word 0x0000011A
+_020038E0: .word 0xFFFFC000
+
+ thumb_func_start FUN_020038E4
+FUN_020038E4: ; 0x020038E4
+ mov r1, #0x46
+ lsl r1, r1, #0x2
+ ldrh r0, [r0, r1]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x12
+ bx lr
+
+ thumb_func_start FUN_020038F0
+FUN_020038F0: ; 0x020038F0
+ push {r3-r4}
+ ldr r3, _0200390C ; =0x0000011A
+ lsl r1, r1, #0x10
+ ldrh r4, [r0, r3]
+ ldr r2, _02003910 ; =0xFFFF7FFF
+ lsr r1, r1, #0x10
+ lsl r1, r1, #0x1f
+ and r2, r4
+ lsr r1, r1, #0x10
+ orr r1, r2
+ strh r1, [r0, r3]
+ pop {r3-r4}
+ bx lr
+ nop
+_0200390C: .word 0x0000011A
+_02003910: .word 0xFFFF7FFF
+
+ thumb_func_start FUN_02003914
+FUN_02003914: ; 0x02003914
+ push {r3-r7, lr}
+ sub sp, #0x8
+ add r6, r0, #0x0
+ str r3, [sp, #0x0]
+ mov r0, #0x14
+ add r4, r1, #0x0
+ mul r4, r0
+ add r0, sp, #0x10
+ ldrh r0, [r0, #0x14]
+ add r7, r2, #0x0
+ ldr r5, [sp, #0x20]
+ str r0, [sp, #0x4]
+ lsl r1, r0, #0x1
+ add r0, r6, r4
+ ldr r0, [r0, #0x8]
+ cmp r1, r0
+ bls _0200393A
+ bl ErrorHandling
+_0200393A:
+ sub r0, r7, #0x1
+ cmp r0, #0x1
+ bhi _02003952
+ ldr r2, [r6, r4]
+ lsl r1, r5, #0x1
+ add r1, r2, r1
+ ldr r2, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r2, r2, r5
+ lsl r2, r2, #0x1
+ blx MIi_CpuClear16
+_02003952:
+ cmp r7, #0x0
+ beq _0200395A
+ cmp r7, #0x2
+ bne _0200396E
+_0200395A:
+ add r1, r6, r4
+ ldr r2, [r1, #0x4]
+ lsl r1, r5, #0x1
+ add r1, r2, r1
+ ldr r2, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r2, r2, r5
+ lsl r2, r2, #0x1
+ blx MIi_CpuClear16
+_0200396E:
+ add sp, #0x8
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003974
+FUN_02003974: ; 0x02003974
+ push {r4-r7, lr}
+ sub sp, #0xc
+ str r0, [sp, #0x0]
+ add r0, sp, #0x10
+ ldrh r0, [r0, #0x10]
+ str r1, [sp, #0x4]
+ add r7, r2, #0x0
+ lsl r1, r0, #0x1b
+ lsr r1, r1, #0x1b
+ mov r12, r1
+ lsl r1, r0, #0x16
+ lsl r0, r0, #0x11
+ lsr r1, r1, #0x1b
+ lsr r0, r0, #0x1b
+ mov r2, #0x0
+ mov lr, r1
+ str r0, [sp, #0x8]
+ cmp r7, #0x0
+ bls _020039E2
+_0200399A:
+ ldr r0, [sp, #0x0]
+ lsl r6, r2, #0x1
+ ldrh r4, [r0, r6]
+ lsl r0, r4, #0x1b
+ lsr r1, r0, #0x1b
+ lsl r0, r4, #0x16
+ lsl r4, r4, #0x11
+ lsr r5, r4, #0x1b
+ ldr r4, [sp, #0x8]
+ lsr r0, r0, #0x1b
+ sub r4, r4, r5
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r4, r5, r4
+ lsl r5, r4, #0xa
+ mov r4, r12
+ sub r4, r4, r1
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r1, r1, r4
+ mov r4, lr
+ sub r4, r4, r0
+ mul r4, r3
+ asr r4, r4, #0x4
+ add r0, r0, r4
+ lsl r0, r0, #0x5
+ orr r0, r1
+ add r1, r5, #0x0
+ orr r1, r0
+ ldr r0, [sp, #0x4]
+ strh r1, [r0, r6]
+ add r0, r2, #0x1
+ lsl r0, r0, #0x10
+ lsr r2, r0, #0x10
+ cmp r2, r7
+ blo _0200399A
+_020039E2:
+ add sp, #0xc
+ pop {r4-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_020039E8
+FUN_020039E8: ; 0x020039E8
+ push {r3-r7, lr}
+ sub sp, #0x8
+ add r7, r2, #0x0
+ add r5, r0, #0x0
+ mov r2, #0x14
+ add r6, r1, #0x0
+ mul r6, r2
+ str r3, [sp, #0x4]
+ ldr r1, [r5, r6]
+ mov r0, #0x0
+ add r4, r5, r6
+ cmp r1, #0x0
+ beq _02003A0A
+ ldr r1, [r4, #0x4]
+ cmp r1, #0x0
+ beq _02003A0A
+ mov r0, #0x1
+_02003A0A:
+ cmp r0, #0x0
+ bne _02003A12
+ bl ErrorHandling
+_02003A12:
+ add r3, sp, #0x10
+ ldrh r0, [r3, #0x14]
+ add r2, r5, r6
+ lsl r1, r7, #0x1
+ str r0, [sp, #0x0]
+ ldr r0, [r4, #0x0]
+ ldr r2, [r2, #0x4]
+ add r0, r0, r1
+ add r1, r2, r1
+ ldrb r3, [r3, #0x10]
+ ldr r2, [sp, #0x4]
+ bl FUN_02003974
+ add sp, #0x8
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02003A30
+FUN_02003A30: ; 0x02003A30
+ push {r3-r7, lr}
+ sub sp, #0x8
+ str r3, [sp, #0x4]
+ add r5, r0, #0x0
+ add r6, r1, #0x0
+ add r4, r2, #0x0
+ ldr r7, [sp, #0x20]
+ beq _02003A60
+_02003A40:
+ mov r0, #0x1
+ tst r0, r4
+ beq _02003A54
+ str r7, [sp, #0x0]
+ ldr r3, [sp, #0x4]
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ mov r2, #0x10
+ bl FUN_02003974
+_02003A54:
+ lsl r0, r4, #0xf
+ lsr r4, r0, #0x10
+ add r6, #0x20
+ add r5, #0x20
+ cmp r4, #0x0
+ bne _02003A40
+_02003A60:
+ add sp, #0x8
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02003A64
+FUN_02003A64: ; 0x02003A64
+ push {r4-r7, lr}
+ sub sp, #0xc
+ str r3, [sp, #0x8]
+ add r6, r0, #0x0
+ add r7, r1, #0x0
+ ldr r0, [sp, #0x20]
+ add r5, r2, #0x0
+ mov r1, #0x14
+ add r2, r7, #0x0
+ str r0, [sp, #0x20]
+ mul r2, r1
+ mov r4, #0x0
+ ldr r1, [r6, r2]
+ add r0, r4, #0x0
+ cmp r1, #0x0
+ beq _02003A8E
+ add r1, r6, r2
+ ldr r1, [r1, #0x4]
+ cmp r1, #0x0
+ beq _02003A8E
+ mov r0, #0x1
+_02003A8E:
+ cmp r0, #0x0
+ bne _02003A96
+ bl ErrorHandling
+_02003A96:
+ cmp r5, #0x0
+ beq _02003AC0
+_02003A9A:
+ mov r0, #0x1
+ tst r0, r5
+ beq _02003AB6
+ ldr r0, [sp, #0x8]
+ lsl r2, r4, #0x10
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x20]
+ add r1, r7, #0x0
+ str r0, [sp, #0x4]
+ add r0, r6, #0x0
+ lsr r2, r2, #0x10
+ mov r3, #0x10
+ bl FUN_020039E8
+_02003AB6:
+ lsl r0, r5, #0xf
+ lsr r5, r0, #0x10
+ add r4, #0x10
+ cmp r5, #0x0
+ bne _02003A9A
+_02003AC0:
+ add sp, #0xc
+ pop {r4-r7, pc}
+
+ thumb_func_start FUN_02003AC4
+FUN_02003AC4: ; 0x02003AC4
+ push {r3-r7, lr}
+ mov lr, r1
+ mov r12, r2
+ add r7, r3, #0x0
+ mov r4, #0x0
+ cmp r1, #0x0
+ ble _02003B3C
+ ldr r6, [sp, #0x18]
+_02003AD4:
+ ldrh r3, [r0, #0x0]
+ mov r1, #0x1f
+ add r2, r3, #0x0
+ asr r5, r3, #0xa
+ and r2, r1
+ and r5, r1
+ mov r1, #0x1d
+ mul r1, r5
+ mov r5, #0x4c
+ mul r5, r2
+ asr r3, r3, #0x5
+ mov r2, #0x1f
+ and r3, r2
+ mov r2, #0x97
+ mul r2, r3
+ add r2, r5, r2
+ add r1, r1, r2
+ asr r3, r1, #0x8
+ mov r1, r12
+ add r2, r1, #0x0
+ mul r2, r3
+ lsl r1, r2, #0x10
+ lsr r1, r1, #0x10
+ asr r2, r1, #0x8
+ add r1, r7, #0x0
+ mul r1, r3
+ mul r3, r6
+ lsl r1, r1, #0x10
+ lsl r3, r3, #0x10
+ lsr r1, r1, #0x10
+ lsr r3, r3, #0x10
+ asr r1, r1, #0x8
+ asr r3, r3, #0x8
+ cmp r2, #0x1f
+ ble _02003B1C
+ mov r2, #0x1f
+_02003B1C:
+ cmp r1, #0x1f
+ ble _02003B22
+ mov r1, #0x1f
+_02003B22:
+ cmp r3, #0x1f
+ ble _02003B28
+ mov r3, #0x1f
+_02003B28:
+ lsl r3, r3, #0xa
+ lsl r1, r1, #0x5
+ orr r1, r3
+ orr r1, r2
+ strh r1, [r0, #0x0]
+ add r4, r4, #0x1
+ mov r1, lr
+ add r0, r0, #0x2
+ cmp r4, r1
+ blt _02003AD4
+_02003B3C:
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003B40
+FUN_02003B40: ; 0x02003B40
+ push {r3-r5, lr}
+ sub sp, #0x8
+ add r5, r0, #0x0
+ add r0, r1, #0x0
+ add r1, r2, #0x0
+ add r2, sp, #0x4
+ bl FUN_02006C08
+ add r4, r0, #0x0
+ bne _02003B58
+ bl ErrorHandling
+_02003B58:
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _02003B64
+ ldr r0, [sp, #0x4]
+ ldr r0, [r0, #0x8]
+ str r0, [sp, #0x1c]
+_02003B64:
+ ldr r0, [sp, #0x2c]
+ ldr r2, [sp, #0x24]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ ldr r3, [sp, #0x28]
+ ldr r0, [r0, #0xc]
+ mov r1, #0x10
+ bl FUN_02003AC4
+ ldr r0, [sp, #0x1c]
+ add r3, sp, #0x8
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ ldrh r3, [r3, #0x18]
+ ldr r1, [r1, #0xc]
+ ldr r2, [sp, #0x18]
+ add r0, r5, #0x0
+ bl FUN_02003054
+ add r0, r4, #0x0
+ bl FUN_02016A18
+ add sp, #0x8
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02003B98
+FUN_02003B98: ; 0x02003B98
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r6, r1, #0x0
+ bl FUN_02003D30
+ add r4, r0, #0x0
+ blx FUN_020C01D0
+ bl FUN_020040C8
+ add r0, r4, #0x0
+ bl FUN_02004064
+ add r0, r4, #0x0
+ ldr r1, _02003C00 ; =0x000BBC00
+ add r0, #0x94
+ blx FUN_020C2A94
+ add r1, r4, #0x0
+ add r1, #0x90
+ str r0, [r1, #0x0]
+ add r2, r4, #0x0
+ add r2, #0x90
+ ldr r1, _02003C04 ; =0x02104780
+ ldr r2, [r2, #0x0]
+ add r0, r4, #0x0
+ mov r3, #0x0
+ blx FUN_020C26F8
+ add r0, r4, #0x0
+ add r0, #0x90
+ ldr r0, [r0, #0x0]
+ blx FUN_020C39CC
+ add r0, r4, #0x0
+ bl FUN_02004088
+ add r0, r4, #0x0
+ bl FUN_020040A4
+ ldr r0, _02003C08 ; =0x02107070
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ ldr r0, _02003C0C ; =0x000BCD4C
+ str r5, [r4, r0]
+ ldrh r0, [r6, #0x0]
+ lsl r0, r0, #0x1a
+ lsr r0, r0, #0x1e
+ bl FUN_02004D60
+ pop {r4-r6, pc}
+ nop
+_02003C00: .word 0x000BBC00
+_02003C04: .word 0x02104780
+_02003C08: .word 0x02107070
+_02003C0C: .word 0x000BCD4C
+
+ thumb_func_start FUN_02003C10
+FUN_02003C10: ; 0x02003C10
+ push {r4, lr}
+ bl FUN_02003D30
+ add r4, r0, #0x0
+ bl FUN_02003D04
+ cmp r0, #0x0
+ bne _02003C30
+ ldr r0, _02003C3C ; =0x000BCD00
+ ldr r1, [r4, r0]
+ cmp r1, #0x0
+ ble _02003C2C
+ sub r1, r1, #0x1
+ str r1, [r4, r0]
+_02003C2C:
+ bl FUN_02003C40
+_02003C30:
+ bl FUN_02005CFC
+ blx FUN_020C01A0
+ pop {r4, pc}
+ nop
+_02003C3C: .word 0x000BCD00
+
+ thumb_func_start FUN_02003C40
+FUN_02003C40: ; 0x02003C40
+ push {r4, lr}
+ bl FUN_02003D30
+ add r4, r0, #0x0
+ ldr r0, _02003CDC ; =0x02107070
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x6
+ bhi _02003CD8
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02003C5C: ; jump table (using 16-bit offset)
+ .short _02003CD8 - _02003C5C - 2; case 0
+ .short _02003C6A - _02003C5C - 2; case 1
+ .short _02003CD8 - _02003C5C - 2; case 2
+ .short _02003C72 - _02003C5C - 2; case 3
+ .short _02003C82 - _02003C5C - 2; case 4
+ .short _02003C92 - _02003C5C - 2; case 5
+ .short _02003CB0 - _02003C5C - 2; case 6
+_02003C6A:
+ mov r0, #0x2
+ bl FUN_02003CE8
+ pop {r4, pc}
+_02003C72:
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _02003CD8
+ mov r0, #0x2
+ bl FUN_02003CE8
+ pop {r4, pc}
+_02003C82:
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _02003CD8
+ mov r0, #0x2
+ bl FUN_02003CE8
+ pop {r4, pc}
+_02003C92:
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _02003CD8
+ bl FUN_02004D94
+ cmp r0, #0x0
+ bne _02003CD8
+ bl FUN_020040DC
+ ldr r0, _02003CE0 ; =0x000BCD0E
+ ldrh r0, [r4, r0]
+ bl FUN_0200521C
+ pop {r4, pc}
+_02003CB0:
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _02003CD8
+ bl FUN_02004D94
+ cmp r0, #0x0
+ bne _02003CD8
+ bl FUN_020040DC
+ ldr r0, _02003CE0 ; =0x000BCD0E
+ ldrh r0, [r4, r0]
+ bl FUN_0200521C
+ ldr r1, _02003CE4 ; =0x000BCD08
+ mov r0, #0x7f
+ ldr r1, [r4, r1]
+ mov r2, #0x0
+ bl FUN_0200538C
+_02003CD8:
+ pop {r4, pc}
+ nop
+_02003CDC: .word 0x02107070
+_02003CE0: .word 0x000BCD0E
+_02003CE4: .word 0x000BCD08
+
+ thumb_func_start FUN_02003CE8
+FUN_02003CE8: ; 0x02003CE8
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ ldr r1, _02003CFC ; =0x000BCCFC
+ mov r2, #0x0
+ strh r2, [r0, r1]
+ ldr r0, _02003D00 ; =0x02107070
+ str r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+_02003CFC: .word 0x000BCCFC
+_02003D00: .word 0x02107070
+
+ thumb_func_start FUN_02003D04
+FUN_02003D04: ; 0x02003D04
+ push {r4, lr}
+ bl FUN_02003D30
+ add r4, r0, #0x0
+ mov r0, #0x2
+ bl FUN_020048BC
+ cmp r0, #0x0
+ beq _02003D1A
+ mov r0, #0x1
+ pop {r4, pc}
+_02003D1A:
+ ldr r0, _02003D2C ; =0x000BCD12
+ ldrh r0, [r4, r0]
+ cmp r0, #0x0
+ beq _02003D26
+ mov r0, #0x1
+ pop {r4, pc}
+_02003D26:
+ mov r0, #0x0
+ pop {r4, pc}
+ nop
+_02003D2C: .word 0x000BCD12
+
+ thumb_func_start FUN_02003D30
+FUN_02003D30: ; 0x02003D30
+ ldr r0, _02003D34 ; =0x02107078
+ bx lr
+ .balign 4
+_02003D34: .word 0x02107078
+
+ thumb_func_start FUN_02003D38
+FUN_02003D38: ; 0x02003D38
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ cmp r4, #0x27
+ bls _02003D46
+ b _02003E92
+_02003D46:
+ add r1, r4, r4
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02003D52: ; jump table (using 16-bit offset)
+ .short _02003DA8 - _02003D52 - 2; case 0
+ .short _02003DAE - _02003D52 - 2; case 1
+ .short _02003DB4 - _02003D52 - 2; case 2
+ .short _02003DBA - _02003D52 - 2; case 3
+ .short _02003DC0 - _02003D52 - 2; case 4
+ .short _02003DA2 - _02003D52 - 2; case 5
+ .short _02003DC6 - _02003D52 - 2; case 6
+ .short _02003DCC - _02003D52 - 2; case 7
+ .short _02003DD2 - _02003D52 - 2; case 8
+ .short _02003DD8 - _02003D52 - 2; case 9
+ .short _02003DDE - _02003D52 - 2; case 10
+ .short _02003DE4 - _02003D52 - 2; case 11
+ .short _02003DEA - _02003D52 - 2; case 12
+ .short _02003DF0 - _02003D52 - 2; case 13
+ .short _02003DF6 - _02003D52 - 2; case 14
+ .short _02003DFC - _02003D52 - 2; case 15
+ .short _02003E02 - _02003D52 - 2; case 16
+ .short _02003E08 - _02003D52 - 2; case 17
+ .short _02003E0E - _02003D52 - 2; case 18
+ .short _02003E14 - _02003D52 - 2; case 19
+ .short _02003E1A - _02003D52 - 2; case 20
+ .short _02003E20 - _02003D52 - 2; case 21
+ .short _02003E26 - _02003D52 - 2; case 22
+ .short _02003E2C - _02003D52 - 2; case 23
+ .short _02003E32 - _02003D52 - 2; case 24
+ .short _02003E38 - _02003D52 - 2; case 25
+ .short _02003E3E - _02003D52 - 2; case 26
+ .short _02003E44 - _02003D52 - 2; case 27
+ .short _02003E4A - _02003D52 - 2; case 28
+ .short _02003E50 - _02003D52 - 2; case 29
+ .short _02003E56 - _02003D52 - 2; case 30
+ .short _02003E5C - _02003D52 - 2; case 31
+ .short _02003E62 - _02003D52 - 2; case 32
+ .short _02003E68 - _02003D52 - 2; case 33
+ .short _02003E6E - _02003D52 - 2; case 34
+ .short _02003E74 - _02003D52 - 2; case 35
+ .short _02003E7A - _02003D52 - 2; case 36
+ .short _02003E80 - _02003D52 - 2; case 37
+ .short _02003E86 - _02003D52 - 2; case 38
+ .short _02003E8C - _02003D52 - 2; case 39
+_02003DA2:
+ ldr r1, _02003E9C ; =0x000BCCFE
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DA8:
+ ldr r1, _02003EA0 ; =0x000BBCB8
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DAE:
+ ldr r1, _02003EA4 ; =0x000BBCBC
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DB4:
+ ldr r1, _02003EA8 ; =0x000BBCC0
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DBA:
+ ldr r1, _02003EAC ; =0x000BBCE0
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DC0:
+ ldr r1, _02003EB0 ; =0x000BCCE0
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DC6:
+ ldr r1, _02003EB4 ; =0x000BCD00
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DCC:
+ ldr r1, _02003EB8 ; =0x000BCD04
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DD2:
+ ldr r1, _02003EBC ; =0x000BCD08
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DD8:
+ ldr r1, _02003EC0 ; =0x000BCD0C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DDE:
+ ldr r1, _02003EC4 ; =0x000BCD0E
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DE4:
+ ldr r1, _02003EC8 ; =0x000BCD10
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DEA:
+ ldr r1, _02003ECC ; =0x000BCD11
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DF0:
+ ldr r1, _02003ED0 ; =0x000BCD12
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DF6:
+ ldr r1, _02003ED4 ; =0x000BCD14
+ add r0, r0, r1
+ pop {r4, pc}
+_02003DFC:
+ ldr r1, _02003ED8 ; =0x000BCD15
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E02:
+ ldr r1, _02003EDC ; =0x000BCD16
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E08:
+ ldr r1, _02003EE0 ; =0x000BCD17
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E0E:
+ ldr r1, _02003EE4 ; =0x000BCD18
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E14:
+ ldr r1, _02003EE8 ; =0x000BCD19
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E1A:
+ ldr r1, _02003EEC ; =0x000BCD1A
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E20:
+ ldr r1, _02003EF0 ; =0x000BCD1B
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E26:
+ ldr r1, _02003EF4 ; =0x000BCD1C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E2C:
+ ldr r1, _02003EF8 ; =0x000BCD20
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E32:
+ ldr r1, _02003EFC ; =0x000BCD24
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E38:
+ ldr r1, _02003F00 ; =0x000BCD28
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E3E:
+ ldr r1, _02003F04 ; =0x000BCD2C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E44:
+ ldr r1, _02003F08 ; =0x000BCD30
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E4A:
+ ldr r1, _02003F0C ; =0x000BCD34
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E50:
+ ldr r1, _02003F10 ; =0x000BCD38
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E56:
+ ldr r1, _02003F14 ; =0x000BCD39
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E5C:
+ ldr r1, _02003F18 ; =0x000BCD3A
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E62:
+ ldr r1, _02003F1C ; =0x000BCD3C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E68:
+ ldr r1, _02003F20 ; =0x000BCD40
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E6E:
+ ldr r1, _02003F24 ; =0x000BCD48
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E74:
+ ldr r1, _02003F28 ; =0x000BCD4C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E7A:
+ ldr r1, _02003F2C ; =0x000BCD50
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E80:
+ ldr r1, _02003F30 ; =0x000BCD54
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E86:
+ ldr r1, _02003F34 ; =0x000BCD58
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E8C:
+ ldr r1, _02003F38 ; =0x000BCD5C
+ add r0, r0, r1
+ pop {r4, pc}
+_02003E92:
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r4, pc}
+ nop
+_02003E9C: .word 0x000BCCFE
+_02003EA0: .word 0x000BBCB8
+_02003EA4: .word 0x000BBCBC
+_02003EA8: .word 0x000BBCC0
+_02003EAC: .word 0x000BBCE0
+_02003EB0: .word 0x000BCCE0
+_02003EB4: .word 0x000BCD00
+_02003EB8: .word 0x000BCD04
+_02003EBC: .word 0x000BCD08
+_02003EC0: .word 0x000BCD0C
+_02003EC4: .word 0x000BCD0E
+_02003EC8: .word 0x000BCD10
+_02003ECC: .word 0x000BCD11
+_02003ED0: .word 0x000BCD12
+_02003ED4: .word 0x000BCD14
+_02003ED8: .word 0x000BCD15
+_02003EDC: .word 0x000BCD16
+_02003EE0: .word 0x000BCD17
+_02003EE4: .word 0x000BCD18
+_02003EE8: .word 0x000BCD19
+_02003EEC: .word 0x000BCD1A
+_02003EF0: .word 0x000BCD1B
+_02003EF4: .word 0x000BCD1C
+_02003EF8: .word 0x000BCD20
+_02003EFC: .word 0x000BCD24
+_02003F00: .word 0x000BCD28
+_02003F04: .word 0x000BCD2C
+_02003F08: .word 0x000BCD30
+_02003F0C: .word 0x000BCD34
+_02003F10: .word 0x000BCD38
+_02003F14: .word 0x000BCD39
+_02003F18: .word 0x000BCD3A
+_02003F1C: .word 0x000BCD3C
+_02003F20: .word 0x000BCD40
+_02003F24: .word 0x000BCD48
+_02003F28: .word 0x000BCD4C
+_02003F2C: .word 0x000BCD50
+_02003F30: .word 0x000BCD54
+_02003F34: .word 0x000BCD58
+_02003F38: .word 0x000BCD5C
+
+ thumb_func_start FUN_02003F3C
+FUN_02003F3C: ; 0x02003F3C
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ add r0, #0x90
+ ldr r0, [r0, #0x0]
+ blx FUN_020C290C
+ add r4, r0, #0x0
+ mov r0, #0x0
+ mvn r0, r0
+ cmp r4, r0
+ bne _02003F5A
+ bl ErrorHandling
+_02003F5A:
+ cmp r5, #0x0
+ beq _02003F60
+ str r4, [r5, #0x0]
+_02003F60:
+ add r0, r4, #0x0
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02003F64
+FUN_02003F64: ; 0x02003F64
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ add r0, #0x90
+ ldr r0, [r0, #0x0]
+ add r1, r4, #0x0
+ blx FUN_020C2828
+ pop {r4, pc}
+
+ thumb_func_start FUN_02003F78
+FUN_02003F78: ; 0x02003F78
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ add r1, r0, #0x0
+ add r1, #0x90
+ ldr r1, [r1, #0x0]
+ add r0, r4, #0x0
+ blx FUN_020C36A8
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003F90
+FUN_02003F90: ; 0x02003F90
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ add r1, r0, #0x0
+ add r1, #0x90
+ ldr r1, [r1, #0x0]
+ add r0, r4, #0x0
+ blx FUN_020C3674
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003FA8
+FUN_02003FA8: ; 0x02003FA8
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ bl FUN_02003D30
+ add r2, r0, #0x0
+ add r2, #0x90
+ ldr r2, [r2, #0x0]
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ blx FUN_020C35E0
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003FC4
+FUN_02003FC4: ; 0x02003FC4
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ add r1, r0, #0x0
+ add r1, #0x90
+ ldr r1, [r1, #0x0]
+ add r0, r4, #0x0
+ blx FUN_020C360C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003FDC
+FUN_02003FDC: ; 0x02003FDC
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ add r1, r0, #0x0
+ add r1, #0x90
+ ldr r1, [r1, #0x0]
+ add r0, r4, #0x0
+ blx FUN_020C3640
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02003FF4
+FUN_02003FF4: ; 0x02003FF4
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ add r4, r0, #0x0
+ cmp r5, #0x9
+ blt _02004008
+ bl ErrorHandling
+ mov r5, #0x0
+_02004008:
+ ldr r0, _02004014 ; =0x000BBC94
+ add r1, r4, r0
+ lsl r0, r5, #0x2
+ add r0, r1, r0
+ pop {r3-r5, pc}
+ nop
+_02004014: .word 0x000BBC94
+
+ thumb_func_start FUN_02004018
+FUN_02004018: ; 0x02004018
+ push {r3, lr}
+ cmp r0, #0x7
+ bhi _0200405A
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_0200402A: ; jump table (using 16-bit offset)
+ .short _0200403E - _0200402A - 2; case 0
+ .short _0200403A - _0200402A - 2; case 1
+ .short _02004042 - _0200402A - 2; case 2
+ .short _02004046 - _0200402A - 2; case 3
+ .short _0200404A - _0200402A - 2; case 4
+ .short _0200404E - _0200402A - 2; case 5
+ .short _02004052 - _0200402A - 2; case 6
+ .short _02004056 - _0200402A - 2; case 7
+_0200403A:
+ mov r0, #0x0
+ pop {r3, pc}
+_0200403E:
+ mov r0, #0x1
+ pop {r3, pc}
+_02004042:
+ mov r0, #0x2
+ pop {r3, pc}
+_02004046:
+ mov r0, #0x3
+ pop {r3, pc}
+_0200404A:
+ mov r0, #0x4
+ pop {r3, pc}
+_0200404E:
+ mov r0, #0x5
+ pop {r3, pc}
+_02004052:
+ mov r0, #0x6
+ pop {r3, pc}
+_02004056:
+ mov r0, #0x7
+ pop {r3, pc}
+_0200405A:
+ bl ErrorHandling
+ mov r0, #0x3
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004064
+FUN_02004064: ; 0x02004064
+ push {r4, lr}
+ ldr r2, _02004080 ; =0x000BCD60
+ mov r1, #0x0
+ add r4, r0, #0x0
+ blx Call_FillMemWithValue
+ ldr r0, _02004084 ; =0x000BCD1C
+ mov r1, #0x0
+_02004074:
+ add r1, r1, #0x1
+ str r1, [r4, r0]
+ add r4, r4, #0x4
+ cmp r1, #0x7
+ blt _02004074
+ pop {r4, pc}
+ .balign 4
+_02004080: .word 0x000BCD60
+_02004084: .word 0x000BCD1C
+
+ thumb_func_start FUN_02004088
+FUN_02004088: ; 0x02004088
+ push {r3-r5, lr}
+ ldr r1, _020040A0 ; =0x000BBC94
+ mov r4, #0x0
+ add r5, r0, r1
+_02004090:
+ add r0, r5, #0x0
+ blx FUN_020C0F80
+ add r4, r4, #0x1
+ add r5, r5, #0x4
+ cmp r4, #0x9
+ blt _02004090
+ pop {r3-r5, pc}
+ .balign 4
+_020040A0: .word 0x000BBC94
+
+ thumb_func_start FUN_020040A4
+FUN_020040A4: ; 0x020040A4
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r0, _020040C0 ; =0x000BCD1C
+ add r0, r4, r0
+ bl FUN_02003F3C
+ mov r0, #0x0
+ bl FUN_02003F78
+ ldr r0, _020040C4 ; =0x000BCD20
+ add r0, r4, r0
+ bl FUN_02003F3C
+ pop {r4, pc}
+ .balign 4
+_020040C0: .word 0x000BCD1C
+_020040C4: .word 0x000BCD20
+
+ thumb_func_start FUN_020040C8
+FUN_020040C8: ; 0x020040C8
+ push {r3, lr}
+ blx MIC_Init
+ mov r0, #0x1
+ blx PM_SetAmp
+ mov r0, #0x2
+ blx PM_SetAmpGain
+ pop {r3, pc}
+
+ thumb_func_start FUN_020040DC
+FUN_020040DC: ; 0x020040DC
+ push {r3, lr}
+ mov r0, #0x7
+ mov r1, #0x0
+ blx FUN_020C1040
+ mov r0, #0x7
+ bl FUN_02003FF4
+ blx FUN_020C0F68
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_020040F4
+FUN_020040F4: ; 0x020040F4
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x5
+ bl FUN_02003D38
+ strb r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004104
+FUN_02004104: ; 0x02004104
+ push {r3, lr}
+ mov r0, #0x5
+ bl FUN_02003D38
+ ldrb r0, [r0, #0x0]
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004110
+FUN_02004110: ; 0x02004110
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x9
+ bl FUN_02003D38
+ strh r4, [r0, #0x0]
+ mov r0, #0x0
+ bl FUN_02004130
+ pop {r4, pc}
+
+ thumb_func_start FUN_02004124
+FUN_02004124: ; 0x02004124
+ push {r3, lr}
+ mov r0, #0x9
+ bl FUN_02003D38
+ ldrh r0, [r0, #0x0]
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004130
+FUN_02004130: ; 0x02004130
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0xa
+ bl FUN_02003D38
+ strh r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004140
+FUN_02004140: ; 0x02004140
+ push {r3, lr}
+ mov r0, #0xa
+ bl FUN_02003D38
+ ldrh r0, [r0, #0x0]
+ pop {r3, pc}
+
+ thumb_func_start FUN_0200414C
+FUN_0200414C: ; 0x0200414C
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x1f
+ bl FUN_02003D38
+ strh r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200415C
+FUN_0200415C: ; 0x0200415C
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x14
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x15
+ bl FUN_02003D38
+ cmp r5, #0x33
+ bhs _0200417A
+ strb r5, [r4, #0x0]
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ pop {r3-r5, pc}
+_0200417A:
+ strb r5, [r0, #0x0]
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004180
+FUN_02004180: ; 0x02004180
+ push {r3, lr}
+ cmp r0, #0x39
+ bgt _020041DE
+ blt _0200418A
+ b _020042C8
+_0200418A:
+ cmp r0, #0x35
+ bgt _020041CC
+ blt _02004192
+ b _0200429A
+_02004192:
+ cmp r0, #0x33
+ bgt _020041C6
+ bge _0200427C
+ cmp r0, #0xe
+ bhi _020041CA
+ add r2, r0, r0
+ add r2, pc
+ ldrh r2, [r2, #0x6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_020041A8: ; jump table (using 16-bit offset)
+ .short _0200432C - _020041A8 - 2; case 0
+ .short _02004222 - _020041A8 - 2; case 1
+ .short _0200422C - _020041A8 - 2; case 2
+ .short _02004236 - _020041A8 - 2; case 3
+ .short _02004240 - _020041A8 - 2; case 4
+ .short _0200424A - _020041A8 - 2; case 5
+ .short _0200425E - _020041A8 - 2; case 6
+ .short _0200429A - _020041A8 - 2; case 7
+ .short _02004268 - _020041A8 - 2; case 8
+ .short _02004222 - _020041A8 - 2; case 9
+ .short _02004222 - _020041A8 - 2; case 10
+ .short _02004254 - _020041A8 - 2; case 11
+ .short _02004272 - _020041A8 - 2; case 12
+ .short _0200422C - _020041A8 - 2; case 13
+ .short _02004222 - _020041A8 - 2; case 14
+_020041C6:
+ cmp r0, #0x34
+ beq _02004290
+_020041CA:
+ b _0200432C
+_020041CC:
+ cmp r0, #0x37
+ bgt _020041D8
+ bge _020042AE
+ cmp r0, #0x36
+ beq _020042A4
+ b _0200432C
+_020041D8:
+ cmp r0, #0x38
+ beq _020042BE
+ b _0200432C
+_020041DE:
+ cmp r0, #0x3d
+ bgt _020041F8
+ blt _020041E6
+ b _020042F0
+_020041E6:
+ cmp r0, #0x3b
+ bgt _020041F2
+ bge _020042DC
+ cmp r0, #0x3a
+ beq _020042D2
+ b _0200432C
+_020041F2:
+ cmp r0, #0x3c
+ beq _020042E6
+ b _0200432C
+_020041F8:
+ cmp r0, #0x3f
+ bgt _02004206
+ blt _02004200
+ b _02004304
+_02004200:
+ cmp r0, #0x3e
+ beq _020042FA
+ b _0200432C
+_02004206:
+ sub r0, #0x40
+ cmp r0, #0x3
+ bls _0200420E
+ b _0200432C
+_0200420E:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_0200421A: ; jump table (using 16-bit offset)
+ .short _0200430E - _0200421A - 2; case 0
+ .short _0200431E - _0200421A - 2; case 1
+ .short _02004286 - _0200421A - 2; case 2
+ .short _020042AE - _0200421A - 2; case 3
+_02004222:
+ mov r0, #0x1
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200422C:
+ mov r0, #0x2
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004236:
+ mov r0, #0xd
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004240:
+ mov r0, #0x1
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200424A:
+ mov r0, #0x2
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004254:
+ mov r0, #0x1
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200425E:
+ mov r0, #0xb
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004268:
+ mov r0, #0x1
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004272:
+ mov r0, #0xe
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200427C:
+ mov r0, #0x3
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004286:
+ mov r0, #0x6
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004290:
+ mov r0, #0x5
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200429A:
+ mov r0, #0x9
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042A4:
+ mov r0, #0xa
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042AE:
+ ldr r0, _02004330 ; =0x000005E5
+ bl FUN_02003FDC
+ ldr r0, _02004330 ; =0x000005E5
+ bl FUN_02003FC4
+ add r1, r0, #0x0
+ b _0200432C
+_020042BE:
+ mov r0, #0xc
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042C8:
+ mov r0, #0x7
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042D2:
+ mov r0, #0x8
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042DC:
+ mov r0, #0xf
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042E6:
+ mov r0, #0x3
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042F0:
+ mov r0, #0x5
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_020042FA:
+ mov r0, #0xf
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_02004304:
+ mov r0, #0x4
+ bl FUN_02003F78
+ add r1, r0, #0x0
+ b _0200432C
+_0200430E:
+ ldr r0, _02004334 ; =0x000005ED
+ bl FUN_02003FDC
+ ldr r0, _02004334 ; =0x000005ED
+ bl FUN_02003FC4
+ add r1, r0, #0x0
+ b _0200432C
+_0200431E:
+ ldr r0, _02004338 ; =0x000005EC
+ bl FUN_02003FDC
+ ldr r0, _02004338 ; =0x000005EC
+ bl FUN_02003FC4
+ add r1, r0, #0x0
+_0200432C:
+ add r0, r1, #0x0
+ pop {r3, pc}
+ .balign 4
+_02004330: .word 0x000005E5
+_02004334: .word 0x000005ED
+_02004338: .word 0x000005EC
+
+ thumb_func_start FUN_0200433C
+FUN_0200433C: ; 0x0200433C
+ push {r3-r7, lr}
+ sub sp, #0x8
+ add r4, r0, #0x0
+ mov r0, #0x14
+ add r5, r1, #0x0
+ add r6, r2, #0x0
+ bl FUN_02003D38
+ str r0, [sp, #0x0]
+ mov r0, #0x15
+ bl FUN_02003D38
+ str r0, [sp, #0x4]
+ mov r0, #0xd
+ bl FUN_02003D38
+ add r7, r0, #0x0
+ cmp r4, #0x33
+ bhs _02004370
+ ldr r0, [sp, #0x0]
+ ldrb r0, [r0, #0x0]
+ cmp r0, r4
+ bne _0200437E
+ add sp, #0x8
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02004370:
+ ldr r0, [sp, #0x4]
+ ldrb r0, [r0, #0x0]
+ cmp r0, r4
+ bne _0200437E
+ add sp, #0x8
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_0200437E:
+ add r0, r4, #0x0
+ bl FUN_0200415C
+ cmp r4, #0x39
+ bgt _020043DC
+ bge _02004458
+ cmp r4, #0x35
+ bgt _020043CA
+ bge _02004458
+ cmp r4, #0x33
+ bgt _020043C4
+ bge _02004458
+ cmp r4, #0xe
+ bhi _020043C8
+ add r0, r4, r4
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_020043A6: ; jump table (using 16-bit offset)
+ .short _020044A0 - _020043A6 - 2; case 0
+ .short _02004460 - _020043A6 - 2; case 1
+ .short _02004484 - _020043A6 - 2; case 2
+ .short _02004496 - _020043A6 - 2; case 3
+ .short _0200441C - _020043A6 - 2; case 4
+ .short _02004430 - _020043A6 - 2; case 5
+ .short _02004444 - _020043A6 - 2; case 6
+ .short _0200444E - _020043A6 - 2; case 7
+ .short _02004496 - _020043A6 - 2; case 8
+ .short _02004496 - _020043A6 - 2; case 9
+ .short _02004496 - _020043A6 - 2; case 10
+ .short _0200443A - _020043A6 - 2; case 11
+ .short _02004496 - _020043A6 - 2; case 12
+ .short _02004496 - _020043A6 - 2; case 13
+ .short _02004472 - _020043A6 - 2; case 14
+_020043C4:
+ cmp r4, #0x34
+ beq _02004458
+_020043C8:
+ b _020044A0
+_020043CA:
+ cmp r4, #0x37
+ bgt _020043D6
+ bge _02004458
+ cmp r4, #0x36
+ beq _02004458
+ b _020044A0
+_020043D6:
+ cmp r4, #0x38
+ beq _02004458
+ b _020044A0
+_020043DC:
+ cmp r4, #0x3d
+ bgt _020043F4
+ bge _02004458
+ cmp r4, #0x3b
+ bgt _020043EE
+ bge _02004458
+ cmp r4, #0x3a
+ beq _02004458
+ b _020044A0
+_020043EE:
+ cmp r4, #0x3c
+ beq _02004458
+ b _020044A0
+_020043F4:
+ cmp r4, #0x3f
+ bgt _02004400
+ bge _02004458
+ cmp r4, #0x3e
+ beq _02004458
+ b _020044A0
+_02004400:
+ add r0, r4, #0x0
+ sub r0, #0x40
+ cmp r0, #0x3
+ bhi _020044A0
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02004414: ; jump table (using 16-bit offset)
+ .short _02004458 - _02004414 - 2; case 0
+ .short _02004458 - _02004414 - 2; case 1
+ .short _02004458 - _02004414 - 2; case 2
+ .short _02004458 - _02004414 - 2; case 3
+_0200441C:
+ mov r0, #0x0
+ bl FUN_0200516C
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_020044D4
+ mov r0, #0x0
+ strh r0, [r7, #0x0]
+ b _020044A0
+_02004430:
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_02004648
+ b _020044A0
+_0200443A:
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_02004680
+ b _020044A0
+_02004444:
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_020046A0
+ b _020044A0
+_0200444E:
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_020046C4
+ b _020044A0
+_02004458:
+ add r0, r4, #0x0
+ bl FUN_020046E8
+ b _020044A0
+_02004460:
+ mov r0, #0x1
+ bl FUN_0200516C
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ add r2, r6, #0x0
+ bl FUN_02004704
+ b _020044A0
+_02004472:
+ mov r0, #0x2
+ bl FUN_0200516C
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ add r2, r6, #0x0
+ bl FUN_02004704
+ b _020044A0
+_02004484:
+ mov r0, #0x0
+ bl FUN_0200516C
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ add r2, r6, #0x0
+ bl FUN_02004704
+ b _020044A0
+_02004496:
+ add r0, r4, #0x0
+ add r1, r5, #0x0
+ add r2, r6, #0x0
+ bl FUN_02004704
+_020044A0:
+ mov r0, #0x1
+ add sp, #0x8
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_020044A8
+FUN_020044A8: ; 0x020044A8
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ ldr r0, [r0, #0x0]
+ bl FUN_02003F64
+ mov r0, #0x18
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ add r0, r4, #0x0
+ bl FUN_02004180
+ mov r0, #0x19
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ pop {r4, pc}
+
+ thumb_func_start FUN_020044D4
+FUN_020044D4: ; 0x020044D4
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ mov r0, #0xb
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ mov r0, #0x1f
+ bl FUN_02003D38
+ mov r0, #0x0
+ bl FUN_02003FF4
+ bl FUN_020048EC
+ add r4, r0, #0x0
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x0
+ bne _0200450E
+ cmp r4, r5
+ bne _0200450E
+ bl FUN_02004140
+ mov r1, #0x12
+ lsl r1, r1, #0x6
+ cmp r0, r1
+ bne _02004566
+_0200450E:
+ mov r0, #0x1
+ bl FUN_02004DBC
+ bl FUN_02005454
+ cmp r4, r5
+ beq _02004528
+ mov r0, #0x1
+ mov r1, #0x0
+ bl FUN_020047C8
+ bl FUN_0200541C
+_02004528:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _02004560
+ mov r0, #0x2
+ bl FUN_02004748
+ bl FUN_02003F64
+ mov r0, #0x4
+ bl FUN_02004180
+ mov r0, #0x19
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ cmp r4, r5
+ beq _02004554
+ mov r0, #0x1
+ mov r1, #0x0
+ bl FUN_020047C8
+_02004554:
+ lsl r1, r4, #0x10
+ add r0, r5, #0x0
+ lsr r1, r1, #0x10
+ bl FUN_02004568
+ pop {r4-r6, pc}
+_02004560:
+ add r0, r5, #0x0
+ bl FUN_0200521C
+_02004566:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02004568
+FUN_02004568: ; 0x02004568
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x1f
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ ldrh r0, [r4, #0x0]
+ bl FUN_02004900
+ ldr r1, _020045C0 ; =0x000003E9
+ cmp r0, r1
+ beq _02004594
+ add r1, r1, #0x2
+ cmp r0, r1
+ beq _02004594
+ add r0, r5, #0x0
+ mov r1, #0x4
+ bl FUN_02003FA8
+ bl ErrorHandling
+ b _0200459C
+_02004594:
+ ldrh r0, [r4, #0x0]
+ mov r1, #0x6
+ bl FUN_02003FA8
+_0200459C:
+ mov r0, #0x1a
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ mov r0, #0x1
+ mov r1, #0x0
+ bl FUN_020047C8
+ mov r0, #0x7f
+ mov r1, #0x28
+ mov r2, #0x0
+ bl FUN_0200538C
+ mov r0, #0x0
+ bl FUN_02004DBC
+ pop {r3-r5, pc}
+ .balign 4
+_020045C0: .word 0x000003E9
+
+ thumb_func_start FUN_020045C4
+FUN_020045C4: ; 0x020045C4
+ push {r3-r7, lr}
+ add r7, r0, #0x0
+ mov r0, #0x12
+ add r5, r1, #0x0
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x1f
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ beq _020045E4
+ cmp r5, #0x0
+ bne _02004642
+_020045E4:
+ mov r0, #0x1
+ bl FUN_02004748
+ bl FUN_02003F64
+ ldrh r0, [r4, #0x0]
+ mov r1, #0x2
+ bl FUN_02003FA8
+ mov r0, #0x18
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ mov r0, #0x4
+ bl FUN_02004180
+ mov r0, #0x19
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ ldrh r0, [r4, #0x0]
+ bl FUN_02004900
+ ldr r1, _02004644 ; =0x000003E9
+ cmp r0, r1
+ beq _02004630
+ add r1, r1, #0x2
+ cmp r0, r1
+ beq _02004630
+ add r0, r7, #0x0
+ mov r1, #0x4
+ bl FUN_02003FA8
+ bl ErrorHandling
+ b _02004638
+_02004630:
+ ldrh r0, [r4, #0x0]
+ mov r1, #0x4
+ bl FUN_02003FA8
+_02004638:
+ mov r0, #0x1a
+ bl FUN_02003D38
+ bl FUN_02003F3C
+_02004642:
+ pop {r3-r7, pc}
+ .balign 4
+_02004644: .word 0x000003E9
+
+ thumb_func_start FUN_02004648
+FUN_02004648: ; 0x02004648
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ bl FUN_020051AC
+ mov r0, #0x2
+ bl FUN_02004748
+ bl FUN_02003F64
+ mov r0, #0x5
+ bl FUN_02004180
+ mov r0, #0x19
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ mov r0, #0x1
+ bl FUN_02004DBC
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004680
+FUN_02004680: ; 0x02004680
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ bl FUN_0200541C
+ bl FUN_02004810
+ mov r0, #0x4
+ bl FUN_020044A8
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r4, pc}
+
+ thumb_func_start FUN_020046A0
+FUN_020046A0: ; 0x020046A0
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ bl FUN_0200541C
+ mov r0, #0x6
+ bl FUN_020044A8
+ mov r0, #0x1
+ bl FUN_02004DBC
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_020046C4
+FUN_020046C4: ; 0x020046C4
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x17
+ bl FUN_02003D38
+ bl FUN_0200541C
+ mov r0, #0x7
+ bl FUN_020044A8
+ mov r0, #0x1
+ bl FUN_02004DBC
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_020046E8
+FUN_020046E8: ; 0x020046E8
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02004738
+ add r0, r4, #0x0
+ bl FUN_02004180
+ mov r0, #0x1b
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004704
+FUN_02004704: ; 0x02004704
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x17
+ add r4, r1, #0x0
+ bl FUN_02003D38
+ bl FUN_0200541C
+ add r0, r5, #0x0
+ bl FUN_020044A8
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004724
+FUN_02004724: ; 0x02004724
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ bl FUN_020051AC
+ add r0, r4, #0x0
+ bl FUN_0200521C
+ pop {r4, pc}
+
+ thumb_func_start FUN_02004738
+FUN_02004738: ; 0x02004738
+ push {r3, lr}
+ mov r0, #0x4
+ bl FUN_02004748
+ bl FUN_02003F64
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004748
+FUN_02004748: ; 0x02004748
+ push {r3-r5, lr}
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ cmp r4, #0x7
+ blt _02004762
+ bl ErrorHandling
+ mov r0, #0x1a
+ bl FUN_02003D38
+ ldr r0, [r0, #0x0]
+ pop {r3-r5, pc}
+_02004762:
+ cmp r4, #0x6
+ bhi _020047C4
+ add r0, r4, r4
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02004772: ; jump table (using 16-bit offset)
+ .short _02004780 - _02004772 - 2; case 0
+ .short _0200478A - _02004772 - 2; case 1
+ .short _02004794 - _02004772 - 2; case 2
+ .short _0200479E - _02004772 - 2; case 3
+ .short _020047A8 - _02004772 - 2; case 4
+ .short _020047B2 - _02004772 - 2; case 5
+ .short _020047BC - _02004772 - 2; case 6
+_02004780:
+ mov r0, #0x16
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_0200478A:
+ mov r0, #0x17
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_02004794:
+ mov r0, #0x18
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_0200479E:
+ mov r0, #0x19
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_020047A8:
+ mov r0, #0x1a
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_020047B2:
+ mov r0, #0x1b
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ b _020047C4
+_020047BC:
+ mov r0, #0x1c
+ bl FUN_02003D38
+ add r5, r0, #0x0
+_020047C4:
+ ldr r0, [r5, #0x0]
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_020047C8
+FUN_020047C8: ; 0x020047C8
+ push {r4-r6, lr}
+ add r5, r1, #0x0
+ cmp r0, #0x1
+ bne _020047DC
+ mov r0, #0xb
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r4, #0x0
+ b _020047EA
+_020047DC:
+ cmp r0, #0x7
+ bne _0200480E
+ mov r0, #0xc
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r4, #0x7
+_020047EA:
+ cmp r5, #0x0
+ bne _02004800
+ add r0, r4, #0x0
+ bl FUN_02003FF4
+ bl FUN_020048EC
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ bl FUN_02004110
+_02004800:
+ add r0, r4, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C0F8C
+ strb r5, [r6, #0x0]
+_0200480E:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02004810
+FUN_02004810: ; 0x02004810
+ push {r4, lr}
+ mov r0, #0xb
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0xc
+ bl FUN_02003D38
+ mov r1, #0x0
+ strb r1, [r4, #0x0]
+ strb r1, [r0, #0x0]
+ pop {r4, pc}
+
+ thumb_func_start FUN_02004828
+FUN_02004828: ; 0x02004828
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ blx FUN_020C0EF4
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_0200483C
+FUN_0200483C: ; 0x0200483C
+ push {r4, lr}
+ add r4, r1, #0x0
+ bpl _02004844
+ mov r4, #0x0
+_02004844:
+ cmp r4, #0x7f
+ ble _0200484A
+ mov r4, #0x7f
+_0200484A:
+ bl FUN_02003FF4
+ add r1, r4, #0x0
+ blx FUN_020C0F30
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004858
+FUN_02004858: ; 0x02004858
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ blx FUN_020C23FC
+ cmp r5, #0x1
+ beq _02004868
+ cmp r5, #0x8
+ bne _0200486C
+_02004868:
+ mov r4, #0x7f
+ b _02004872
+_0200486C:
+ cmp r0, #0x0
+ beq _0200488A
+ ldrb r4, [r0, #0x2]
+_02004872:
+ bl FUN_020313EC
+ cmp r0, #0x1
+ bne _0200488A
+ add r0, r4, #0x0
+ mov r1, #0x5
+ blx _s32_div_f
+ add r1, r0, #0x0
+ add r0, r5, #0x0
+ bl FUN_0200483C
+_0200488A:
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_0200488C
+FUN_0200488C: ; 0x0200488C
+ push {r4, lr}
+ add r4, r1, #0x0
+ bl FUN_020048D0
+ bl FUN_02004018
+ add r1, r4, #0x0
+ bl FUN_0200483C
+ pop {r4, pc}
+
+ thumb_func_start FUN_020048A0
+FUN_020048A0: ; 0x020048A0
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_02003FF4
+ mov r2, #0x0
+ mvn r2, r2
+ add r1, r5, #0x0
+ add r3, r2, #0x0
+ str r4, [sp, #0x0]
+ blx FUN_020C3910
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_020048BC
+FUN_020048BC: ; 0x020048BC
+ push {r4, lr}
+ add r4, r0, #0x0
+ bpl _020048C6
+ bl ErrorHandling
+_020048C6:
+ add r0, r4, #0x0
+ blx FUN_020C0F50
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_020048D0
+FUN_020048D0: ; 0x020048D0
+ push {r3, lr}
+ cmp r0, #0x0
+ bne _020048DA
+ mov r0, #0xff
+ pop {r3, pc}
+_020048DA:
+ blx FUN_020C23FC
+ cmp r0, #0x0
+ bne _020048E6
+ mov r0, #0xff
+ pop {r3, pc}
+_020048E6:
+ ldrb r0, [r0, #0x5]
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_020048EC
+FUN_020048EC: ; 0x020048EC
+ ldr r3, _020048F0 ; =FUN_020C0E14
+ bx r3
+ .balign 4
+_020048F0: .word FUN_020C0E14
+
+ thumb_func_start FUN_020048F4
+FUN_020048F4: ; 0x020048F4
+ push {r3, lr}
+ bl FUN_02004900
+ blx FUN_020C22D0
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004900
+FUN_02004900: ; 0x02004900
+ push {r3, lr}
+ blx FUN_020C23FC
+ cmp r0, #0x0
+ bne _0200490E
+ mov r0, #0x0
+ pop {r3, pc}
+_0200490E:
+ ldrh r0, [r0, #0x0]
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004914
+FUN_02004914: ; 0x02004914
+ ldr r3, _02004918 ; =MIC_StartAutoSampling
+ bx r3
+ .balign 4
+_02004918: .word MIC_StartAutoSampling
+
+ thumb_func_start FUN_0200491C
+FUN_0200491C: ; 0x0200491C
+ push {r3, lr}
+ bl FUN_02003D30
+ blx MIC_StopAutoSampling
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004928
+FUN_02004928: ; 0x02004928
+ push {r3, lr}
+ blx MIC_DoSamplingAsync
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004930
+FUN_02004930: ; 0x02004930
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ cmp r5, #0xe
+ beq _02004954
+ cmp r5, #0xf
+ beq _02004954
+ bl ErrorHandling
+_02004954:
+ cmp r5, #0xe
+ bne _02004962
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x0
+ bne _02004962
+ bl ErrorHandling
+_02004962:
+ cmp r5, #0xf
+ bne _02004970
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _02004970
+ bl ErrorHandling
+_02004970:
+ cmp r5, #0xe
+ bne _0200497C
+ mov r0, #0x0
+ bl FUN_02003D38
+ pop {r4-r6, pc}
+_0200497C:
+ mov r0, #0x1
+ bl FUN_02003D38
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02004984
+FUN_02004984: ; 0x02004984
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ cmp r5, #0xe
+ beq _020049A8
+ cmp r5, #0xf
+ beq _020049A8
+ bl ErrorHandling
+_020049A8:
+ cmp r5, #0xe
+ bne _020049D6
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x0
+ bne _020049D0
+ mov r0, #0x0
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ blx FUN_020C0688
+ str r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020049CA
+ mov r0, #0x0
+ pop {r4-r6, pc}
+_020049CA:
+ mov r0, #0x1
+ strb r0, [r6, #0x0]
+ b _020049FE
+_020049D0:
+ bl ErrorHandling
+ b _020049FE
+_020049D6:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020049FA
+ mov r0, #0x1
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ add r0, r5, #0x0
+ blx FUN_020C0688
+ str r0, [r6, #0x0]
+ cmp r0, #0x0
+ bne _020049F4
+ mov r0, #0x0
+ pop {r4-r6, pc}
+_020049F4:
+ mov r0, #0x1
+ strb r0, [r4, #0x0]
+ b _020049FE
+_020049FA:
+ bl ErrorHandling
+_020049FE:
+ mov r0, #0x1
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004A04
+FUN_02004A04: ; 0x02004A04
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ cmp r5, #0xe
+ beq _02004A2A
+ cmp r5, #0xf
+ beq _02004A2A
+ bl ErrorHandling
+ pop {r4-r6, pc}
+_02004A2A:
+ cmp r5, #0xe
+ bne _02004A4C
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _02004A46
+ add r0, r5, #0x0
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ blx FUN_020C0670
+ mov r0, #0x0
+ strb r0, [r6, #0x0]
+ pop {r4-r6, pc}
+_02004A46:
+ bl ErrorHandling
+ pop {r4-r6, pc}
+_02004A4C:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _02004A64
+ add r0, r5, #0x0
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ blx FUN_020C0670
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+ pop {r4-r6, pc}
+_02004A64:
+ bl ErrorHandling
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004A6C
+FUN_02004A6C: ; 0x02004A6C
+ push {r3-r5, lr}
+ sub sp, #0x18
+ add r3, r0, #0x0
+ ldr r0, [r3, #0x10]
+ add r4, r1, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, [r3, #0x14]
+ str r0, [sp, #0x4]
+ ldr r0, [r3, #0x18]
+ str r0, [sp, #0x8]
+ ldr r0, [r3, #0x1c]
+ str r0, [sp, #0xc]
+ ldr r0, [r3, #0x20]
+ str r0, [sp, #0x10]
+ ldr r0, [r3, #0x24]
+ str r0, [sp, #0x14]
+ ldr r0, [r3, #0x0]
+ ldr r1, [r3, #0x4]
+ ldr r2, [r3, #0x8]
+ ldr r0, [r0, #0x0]
+ ldr r3, [r3, #0xc]
+ blx FUN_020C054C
+ add r5, r0, #0x0
+ bne _02004AA4
+ add r0, r4, #0x0
+ bl FUN_02004A04
+_02004AA4:
+ add r0, r5, #0x0
+ add sp, #0x18
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004AAC
+FUN_02004AAC: ; 0x02004AAC
+ push {r3, lr}
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ blx FUN_020C0510
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004ABC
+FUN_02004ABC: ; 0x02004ABC
+ push {r3, lr}
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ blx FUN_020C03B8
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004ACC
+FUN_02004ACC: ; 0x02004ACC
+ push {r4, lr}
+ add r4, r1, #0x0
+ cmp r4, #0x7f
+ bls _02004AD6
+ mov r4, #0x7f
+_02004AD6:
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ add r1, r4, #0x0
+ blx FUN_020C041C
+ pop {r4, pc}
+
+ thumb_func_start FUN_02004AE4
+FUN_02004AE4: ; 0x02004AE4
+ push {r4, lr}
+ add r4, r1, #0x0
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ add r1, r4, #0x0
+ blx FUN_020C044C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004AF8
+FUN_02004AF8: ; 0x02004AF8
+ push {r3-r5, lr}
+ add r4, r0, #0x0
+ add r5, r1, #0x0
+ bl FUN_020313EC
+ cmp r0, #0x1
+ bne _02004B20
+ add r0, r4, #0x0
+ bl FUN_02004930
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ mov r1, #0x5
+ blx _s32_div_f
+ add r1, r0, #0x0
+ ldr r0, [r4, #0x0]
+ blx FUN_020C04DC
+ pop {r3-r5, pc}
+_02004B20:
+ add r0, r4, #0x0
+ bl FUN_02004930
+ ldr r0, [r0, #0x0]
+ add r1, r5, #0x0
+ blx FUN_020C04DC
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02004B30
+FUN_02004B30: ; 0x02004B30
+ push {r3-r7, lr}
+ sub sp, #0x30
+ add r6, r0, #0x0
+ str r1, [sp, #0x0]
+ str r2, [sp, #0x4]
+ add r5, r3, #0x0
+ bl FUN_02003D30
+ mov r0, #0x21
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ cmp r5, #0xe
+ beq _02004B54
+ cmp r5, #0xf
+ beq _02004B54
+ bl ErrorHandling
+_02004B54:
+ add r0, r6, #0x0
+ blx FUN_020C226C
+ add r7, r0, #0x0
+ bne _02004B68
+ bl ErrorHandling
+ add sp, #0x30
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02004B68:
+ ldr r0, [r7, #0x0]
+ lsl r0, r0, #0x8
+ lsr r0, r0, #0x8
+ blx FUN_020C217C
+ add r6, r0, #0x0
+ bne _02004B80
+ bl ErrorHandling
+ add sp, #0x30
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02004B80:
+ cmp r5, #0xe
+ bne _02004BCE
+ ldr r0, [sp, #0x48]
+ add r1, r6, #0x0
+ bl FUN_02016998
+ str r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _02004B9C
+ bl ErrorHandling
+ add sp, #0x30
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02004B9C:
+ mov r1, #0x0
+ add r2, r6, #0x0
+ blx Call_FillMemWithValue
+ ldr r0, [r7, #0x0]
+ ldr r1, [r4, #0x0]
+ lsl r0, r0, #0x8
+ lsr r0, r0, #0x8
+ add r2, r6, #0x0
+ mov r3, #0x0
+ blx FUN_020C2104
+ mov r1, #0x0
+ mvn r1, r1
+ cmp r0, r1
+ bne _02004BC6
+ bl ErrorHandling
+ add sp, #0x30
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02004BC6:
+ ldr r0, [r4, #0x0]
+ add r1, r6, #0x0
+ bl FUN_02004C1C
+_02004BCE:
+ add r0, r5, #0x0
+ bl FUN_02004930
+ mov r1, #0x0
+ str r1, [sp, #0xc]
+ str r0, [sp, #0x8]
+ ldr r0, [r4, #0x0]
+ str r0, [sp, #0x10]
+ ldr r0, _02004C18 ; =0x00003443
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x0]
+ str r1, [sp, #0x18]
+ str r0, [sp, #0x24]
+ mov r0, #0x6
+ lsl r0, r0, #0xc
+ str r0, [sp, #0x28]
+ ldr r0, [sp, #0x4]
+ add r1, r5, #0x0
+ str r0, [sp, #0x2c]
+ add r0, sp, #0x8
+ str r6, [sp, #0x1c]
+ bl FUN_02004A6C
+ add r4, r0, #0x0
+ ldr r1, [sp, #0x0]
+ add r0, r5, #0x0
+ bl FUN_02004AF8
+ mov r0, #0xe
+ bl FUN_02003D38
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+ add r0, r4, #0x0
+ add sp, #0x30
+ pop {r3-r7, pc}
+ .balign 4
+_02004C18: .word 0x00003443
+
+ thumb_func_start FUN_02004C1C
+FUN_02004C1C: ; 0x02004C1C
+ push {r3-r6}
+ mov r5, #0x0
+ lsr r6, r1, #0x1
+ beq _02004C36
+ sub r2, r1, #0x1
+_02004C26:
+ sub r3, r2, r5
+ ldrb r4, [r0, r5]
+ ldrb r1, [r0, r3]
+ strb r1, [r0, r5]
+ add r5, r5, #0x1
+ strb r4, [r0, r3]
+ cmp r5, r6
+ blo _02004C26
+_02004C36:
+ pop {r3-r6}
+ bx lr
+ .balign 4
+
+ thumb_func_start FUN_02004C3C
+FUN_02004C3C: ; 0x02004C3C
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_02003D30
+ mov r0, #0xe
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x21
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ cmp r5, #0xe
+ beq _02004C60
+ cmp r5, #0xf
+ beq _02004C60
+ bl ErrorHandling
+_02004C60:
+ add r0, r5, #0x0
+ bl FUN_02004AAC
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _02004C76
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+ ldr r0, [r6, #0x0]
+ bl FUN_02016A18
+_02004C76:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02004C78
+FUN_02004C78: ; 0x02004C78
+ ldr r3, _02004C7C ; =FUN_020C1E58
+ bx r3
+ .balign 4
+_02004C7C: .word FUN_020C1E58
+
+ thumb_func_start FUN_02004C80
+FUN_02004C80: ; 0x02004C80
+ push {r3-r4, lr}
+ sub sp, #0x4
+ add r4, r0, #0x0
+ bl FUN_02003D30
+ mov r0, #0x3
+ bl FUN_02003D38
+ mov r1, #0x1
+ mov r3, #0xfa
+ lsl r1, r1, #0xc
+ mov r2, #0x0
+ lsl r3, r3, #0x6
+ str r4, [sp, #0x0]
+ blx FUN_020C1FF0
+ add sp, #0x4
+ pop {r3-r4, pc}
+
+ thumb_func_start FUN_02004CA4
+FUN_02004CA4: ; 0x02004CA4
+ ldr r3, _02004CA8 ; =FUN_020C1F54
+ bx r3
+ .balign 4
+_02004CA8: .word FUN_020C1F54
+
+ thumb_func_start FUN_02004CAC
+FUN_02004CAC: ; 0x02004CAC
+ ldr r3, _02004CB0 ; =FUN_020C1FA4
+ bx r3
+ .balign 4
+_02004CB0: .word FUN_020C1FA4
+
+ thumb_func_start FUN_02004CB4
+FUN_02004CB4: ; 0x02004CB4
+ push {r3-r4, lr}
+ sub sp, #0xc
+ bl FUN_02003D30
+ mov r0, #0x4
+ bl FUN_02003D38
+ mov r1, #0x0
+ mov r2, #0x1c
+ blx MI_CpuFill8
+ mov r0, #0x3
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x4
+ bl FUN_02003D38
+ mov r2, #0x2
+ ldr r1, _02004CF4 ; =FUN_02005068
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ str r0, [sp, #0x8]
+ lsl r1, r2, #0xb
+ ldr r3, _02004CF8 ; =0x000055F0
+ add r0, r4, #0x0
+ mov r2, #0x0
+ blx FUN_020C1EA4
+ add sp, #0xc
+ pop {r3-r4, pc}
+ nop
+_02004CF4: .word FUN_02005068
+_02004CF8: .word 0x000055F0
+
+ thumb_func_start FUN_02004CFC
+FUN_02004CFC: ; 0x02004CFC
+ ldr r3, _02004D00 ; =FUN_020C1E68
+ bx r3
+ .balign 4
+_02004D00: .word FUN_020C1E68
+
+ thumb_func_start FUN_02004D04
+FUN_02004D04: ; 0x02004D04
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x13
+ bl FUN_02003D38
+ cmp r4, #0x8
+ ble _02004D16
+ mov r4, #0x8
+ b _02004D1C
+_02004D16:
+ cmp r4, #0x0
+ bge _02004D1C
+ mov r4, #0x0
+_02004D1C:
+ strb r4, [r0, #0x0]
+ pop {r4, pc}
+
+ thumb_func_start FUN_02004D20
+FUN_02004D20: ; 0x02004D20
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ blx FUN_020C0EA4
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02004D34
+FUN_02004D34: ; 0x02004D34
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_020048D0
+ bl FUN_02004018
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ bl FUN_02004D20
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02004D4C
+FUN_02004D4C: ; 0x02004D4C
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ blx FUN_020C0E7C
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02004D60
+FUN_02004D60: ; 0x02004D60
+ push {r4, lr}
+ add r4, r0, #0x0
+ blx FUN_020C0174
+ ldr r0, _02004D70 ; =0x021C3DD8
+ str r4, [r0, #0x0]
+ pop {r4, pc}
+ nop
+_02004D70: .word 0x021C3DD8
+
+ thumb_func_start FUN_02004D74
+FUN_02004D74: ; 0x02004D74
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x6
+ bl FUN_02003D38
+ str r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004D84
+FUN_02004D84: ; 0x02004D84
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x7
+ bl FUN_02003D38
+ str r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004D94
+FUN_02004D94: ; 0x02004D94
+ push {r3, lr}
+ mov r0, #0x7
+ bl FUN_02003D38
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ bne _02004DAA
+ mov r1, #0x0
+ strh r1, [r0, #0x0]
+ add r0, r1, #0x0
+ pop {r3, pc}
+_02004DAA:
+ sub r1, r1, #0x1
+ strh r1, [r0, #0x0]
+ ldrh r0, [r0, #0x0]
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004DB4
+FUN_02004DB4: ; 0x02004DB4
+ ldr r0, _02004DB8 ; =0x021C3DE0
+ bx lr
+ .balign 4
+_02004DB8: .word 0x021C3DE0
+
+ thumb_func_start FUN_02004DBC
+FUN_02004DBC: ; 0x02004DBC
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x12
+ bl FUN_02003D38
+ strb r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004DCC
+FUN_02004DCC: ; 0x02004DCC
+ push {r4-r7, lr}
+ sub sp, #0xc
+ add r5, r0, #0x0
+ mov r0, #0x15
+ add r6, r1, #0x0
+ add r7, r2, #0x0
+ str r3, [sp, #0x8]
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ add r0, sp, #0x10
+ ldrb r0, [r0, #0x10]
+ ldr r3, [sp, #0x8]
+ add r1, r6, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x24]
+ add r2, r7, #0x0
+ str r0, [sp, #0x4]
+ add r0, r5, #0x0
+ bl FUN_02004E44
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+ mov r0, #0x5
+ bl FUN_02003CE8
+ mov r0, #0x1
+ add sp, #0xc
+ pop {r4-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004E08
+FUN_02004E08: ; 0x02004E08
+ push {r4-r7, lr}
+ sub sp, #0xc
+ add r5, r0, #0x0
+ mov r0, #0x8
+ add r6, r1, #0x0
+ add r7, r2, #0x0
+ str r3, [sp, #0x8]
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ add r0, sp, #0x10
+ ldrb r0, [r0, #0x14]
+ ldr r3, [sp, #0x8]
+ add r1, r6, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x28]
+ add r2, r7, #0x0
+ str r0, [sp, #0x4]
+ add r0, r5, #0x0
+ bl FUN_02004E44
+ ldr r0, [sp, #0x20]
+ str r0, [r4, #0x0]
+ mov r0, #0x6
+ bl FUN_02003CE8
+ mov r0, #0x1
+ add sp, #0xc
+ pop {r4-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02004E44
+FUN_02004E44: ; 0x02004E44
+ push {r3-r7, lr}
+ add r6, r2, #0x0
+ mov r0, #0x2
+ add r5, r1, #0x0
+ add r7, r3, #0x0
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x0
+ add r1, r6, #0x0
+ bl FUN_020053CC
+ mov r0, #0x0
+ bl FUN_02004110
+ add r0, r5, #0x0
+ bl FUN_02004130
+ add r0, r7, #0x0
+ bl FUN_02004D84
+ add r0, r5, #0x0
+ bl FUN_020048F4
+ str r0, [r4, #0x0]
+ add r0, sp, #0x8
+ ldrb r0, [r0, #0x10]
+ bl FUN_02004DBC
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02004E80
+FUN_02004E80: ; 0x02004E80
+ cmp r0, #0x0
+ bne _02004E88
+ mov r0, #0x0
+ bx lr
+_02004E88:
+ add r0, #0xc
+ bx lr
+
+ thumb_func_start FUN_02004E8C
+FUN_02004E8C: ; 0x02004E8C
+ cmp r0, #0x0
+ bne _02004E94
+ mov r0, #0x0
+ bx lr
+_02004E94:
+ ldr r0, [r0, #0x8]
+ bx lr
+
+ thumb_func_start FUN_02004E98
+FUN_02004E98: ; 0x02004E98
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x5
+ bl FUN_02004748
+ bl FUN_02003F64
+ lsl r0, r5, #0x10
+ lsr r4, r0, #0x10
+ ldr r0, _02004ECC ; =0x000001B9
+ cmp r4, r0
+ beq _02004EBC
+ add r0, #0x36
+ cmp r5, r0
+ bgt _02004EBA
+ cmp r5, #0x0
+ bne _02004EBC
+_02004EBA:
+ mov r4, #0x1
+_02004EBC:
+ add r0, r4, #0x0
+ bl FUN_02003FC4
+ add r0, r4, #0x0
+ bl FUN_02004ED0
+ pop {r3-r5, pc}
+ nop
+_02004ECC: .word 0x000001B9
+
+ thumb_func_start FUN_02004ED0
+FUN_02004ED0: ; 0x02004ED0
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x20
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ lsl r0, r5, #0x10
+ ldr r1, _02004F24 ; =0x000001B9
+ lsr r0, r0, #0x10
+ cmp r0, r1
+ beq _02004EF2
+ add r1, #0x36
+ cmp r5, r1
+ bgt _02004EF0
+ cmp r5, #0x0
+ bne _02004EF2
+_02004EF0:
+ mov r0, #0x1
+_02004EF2:
+ blx FUN_020C226C
+ cmp r0, #0x0
+ bne _02004F02
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r5, pc}
+_02004F02:
+ ldr r0, [r0, #0x0]
+ lsl r0, r0, #0x8
+ lsr r0, r0, #0x8
+ blx FUN_020C20DC
+ cmp r0, #0x0
+ bne _02004F18
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r5, pc}
+_02004F18:
+ mov r1, #0x0
+ blx SND_GetWaveDataAddress
+ str r0, [r4, #0x0]
+ pop {r3-r5, pc}
+ nop
+_02004F24: .word 0x000001B9
+
+ thumb_func_start FUN_02004F28
+FUN_02004F28: ; 0x02004F28
+ push {r4-r6, lr}
+ mov r0, #0x1
+ add r5, r1, #0x0
+ add r6, r2, #0x0
+ bl FUN_02004F64
+ mov r1, #0x3
+ add r4, r0, #0x0
+ add r0, r6, #0x0
+ lsl r1, r1, #0x8
+ ldr r5, [r5, #0x8]
+ blx _s32_div_f
+ lsl r1, r0, #0x1
+ bpl _02004F50
+ mov r0, #0x20
+ blx _s32_div_f
+ neg r0, r0
+ b _02004F5A
+_02004F50:
+ cmp r1, #0x0
+ bne _02004F58
+ mov r0, #0x20
+ b _02004F5A
+_02004F58:
+ lsl r0, r1, #0x5
+_02004F5A:
+ mul r0, r4
+ cmp r0, r5
+ blo _02004F62
+ mov r0, #0x0
+_02004F62:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02004F64
+FUN_02004F64: ; 0x02004F64
+ push {r3, lr}
+ bl FUN_02003FF4
+ blx FUN_020C0DD4
+ pop {r3, pc}
+
+ thumb_func_start FUN_02004F70
+FUN_02004F70: ; 0x02004F70
+ push {r3-r7, lr}
+ sub sp, #0x8
+ str r0, [sp, #0x0]
+ add r4, r1, #0x0
+ add r6, r2, #0x0
+ ldr r1, [sp, #0x0]
+ mov r0, #0x1
+ add r2, r3, #0x0
+ bl FUN_02004F28
+ add r1, r0, #0x0
+ mov r12, r0
+ sub r1, #0x64
+ bpl _02004F8E
+ mov r1, #0x0
+_02004F8E:
+ ldr r0, [sp, #0x0]
+ mov r3, #0x0
+ add r0, r0, r1
+ ldrb r0, [r0, #0xc]
+ add r7, r3, #0x0
+ cmp r0, #0x80
+ bhs _02004FA0
+ mov r0, #0x1
+ b _02004FA2
+_02004FA0:
+ sub r0, r3, #0x1
+_02004FA2:
+ lsl r0, r0, #0x18
+ asr r5, r0, #0x18
+ mov r0, r12
+ cmp r1, r0
+ bhs _02005022
+_02004FAC:
+ mov r0, #0x0
+ cmp r5, #0x0
+ ble _02004FC6
+ ldr r2, [sp, #0x0]
+ add r2, r2, r1
+ str r2, [sp, #0x4]
+ ldrb r2, [r2, #0xc]
+ cmp r2, #0x80
+ bls _02004FC2
+ mov r0, #0x1
+ b _02004FD8
+_02004FC2:
+ add r3, r3, #0x1
+ b _02004FD8
+_02004FC6:
+ ldr r2, [sp, #0x0]
+ add r2, r2, r1
+ str r2, [sp, #0x4]
+ ldrb r2, [r2, #0xc]
+ cmp r2, #0x80
+ bhs _02004FD6
+ mov r0, #0x1
+ b _02004FD8
+_02004FD6:
+ add r3, r3, #0x1
+_02004FD8:
+ cmp r0, #0x1
+ bne _0200501A
+ ldr r5, _02005064 ; =0x020ECB8C
+ mov r2, #0x0
+_02004FE0:
+ ldrb r0, [r5, #0x0]
+ cmp r3, r0
+ bge _02004FEA
+ add r7, r2, #0x0
+ b _02004FF2
+_02004FEA:
+ add r2, r2, #0x1
+ add r5, r5, #0x1
+ cmp r2, #0x9
+ blt _02004FE0
+_02004FF2:
+ cmp r7, r6
+ blt _02004FF8
+ sub r7, r6, #0x1
+_02004FF8:
+ cmp r3, #0x0
+ beq _02005006
+ sub r0, r6, #0x1
+ sub r0, r0, r7
+ ldrb r2, [r4, r0]
+ add r2, r2, #0x1
+ strb r2, [r4, r0]
+_02005006:
+ ldr r0, [sp, #0x4]
+ mov r3, #0x0
+ ldrb r0, [r0, #0xc]
+ cmp r0, #0x80
+ bhs _02005014
+ mov r0, #0x1
+ b _02005016
+_02005014:
+ sub r0, r3, #0x1
+_02005016:
+ lsl r0, r0, #0x18
+ asr r5, r0, #0x18
+_0200501A:
+ add r1, r1, #0x2
+ mov r0, r12
+ cmp r1, r0
+ blo _02004FAC
+_02005022:
+ mov r2, #0x0
+ cmp r6, #0x0
+ ble _02005038
+ mov r0, #0x9
+_0200502A:
+ ldrb r1, [r4, r2]
+ cmp r1, #0xa
+ blo _02005032
+ strb r0, [r4, r2]
+_02005032:
+ add r2, r2, #0x1
+ cmp r2, r6
+ blt _0200502A
+_02005038:
+ sub r2, r6, #0x1
+ mov r3, #0x0
+ cmp r2, #0x0
+ ble _02005060
+_02005040:
+ ldrb r0, [r4, r3]
+ add r1, r4, r3
+ cmp r0, #0x0
+ bne _0200505A
+ ldrb r0, [r1, #0x1]
+ cmp r0, #0x0
+ beq _0200505A
+ add r0, r3, #0x1
+ ldrb r0, [r4, r0]
+ add sp, #0x8
+ lsr r0, r0, #0x1
+ strb r0, [r1, #0x0]
+ pop {r3-r7, pc}
+_0200505A:
+ add r3, r3, #0x1
+ cmp r3, r2
+ blt _02005040
+_02005060:
+ add sp, #0x8
+ pop {r3-r7, pc}
+ .balign 4
+_02005064: .word 0x020ECB8C
+
+ thumb_func_start FUN_02005068
+FUN_02005068: ; 0x02005068
+ push {r3-r7, lr}
+ sub sp, #0x30
+ add r5, r0, #0x0
+ ldr r0, [sp, #0x48]
+ add r6, r1, #0x0
+ str r0, [sp, #0xc]
+ mov r0, #0x13
+ str r2, [sp, #0x0]
+ add r4, r3, #0x0
+ bl FUN_02003D38
+ add r7, r0, #0x0
+ cmp r4, #0x1
+ beq _0200508A
+ ldr r0, [sp, #0x0]
+ lsr r0, r0, #0x1
+ str r0, [sp, #0x0]
+_0200508A:
+ ldrb r2, [r7, #0x0]
+ cmp r2, #0x0
+ beq _0200515A
+ mov r0, #0x0
+ cmp r2, #0x0
+ ble _020050BC
+ add r1, sp, #0x10
+_02005098:
+ ldr r3, [sp, #0x0]
+ sub r2, r3, r2
+ add r2, r0, r2
+ lsl r2, r2, #0x1
+ ldrsh r2, [r5, r2]
+ strh r2, [r1, #0x0]
+ ldrb r3, [r7, #0x0]
+ ldr r2, [sp, #0x0]
+ sub r2, r2, r3
+ add r2, r0, r2
+ lsl r2, r2, #0x1
+ ldrsh r2, [r6, r2]
+ add r0, r0, #0x1
+ strh r2, [r1, #0x2]
+ ldrb r2, [r7, #0x0]
+ add r1, r1, #0x4
+ cmp r0, r2
+ blt _02005098
+_020050BC:
+ ldr r0, [sp, #0x0]
+ sub r4, r0, #0x1
+ sub r0, r2, #0x1
+ cmp r4, r0
+ blt _02005126
+ lsl r1, r4, #0x1
+ add r0, r5, r1
+ str r0, [sp, #0x8]
+ add r0, r6, r1
+ str r0, [sp, #0x4]
+_020050D0:
+ mov r0, #0x0
+ add r1, r0, #0x0
+ cmp r2, #0x0
+ ble _020050E6
+_020050D8:
+ sub r3, r4, r1
+ lsl r3, r3, #0x1
+ ldrsh r3, [r5, r3]
+ add r1, r1, #0x1
+ add r0, r0, r3
+ cmp r1, r2
+ blt _020050D8
+_020050E6:
+ add r1, r2, #0x0
+ blx _s32_div_f
+ ldr r1, [sp, #0x8]
+ strh r0, [r1, #0x0]
+ mov r0, #0x0
+ ldrb r1, [r7, #0x0]
+ add r2, r0, #0x0
+ cmp r1, #0x0
+ ble _02005108
+_020050FA:
+ sub r3, r4, r2
+ lsl r3, r3, #0x1
+ ldrsh r3, [r6, r3]
+ add r2, r2, #0x1
+ add r0, r0, r3
+ cmp r2, r1
+ blt _020050FA
+_02005108:
+ blx _s32_div_f
+ ldr r1, [sp, #0x4]
+ sub r4, r4, #0x1
+ strh r0, [r1, #0x0]
+ ldr r0, [sp, #0x8]
+ ldrb r2, [r7, #0x0]
+ sub r0, r0, #0x2
+ str r0, [sp, #0x8]
+ add r0, r1, #0x0
+ sub r0, r0, #0x2
+ str r0, [sp, #0x4]
+ sub r0, r2, #0x1
+ cmp r4, r0
+ bge _020050D0
+_02005126:
+ mov r1, #0x0
+ cmp r2, #0x0
+ ble _0200514A
+ add r0, sp, #0x10
+ mov r4, #0x2
+_02005130:
+ mov r2, #0x0
+ ldrsh r3, [r0, r2]
+ ldr r2, [sp, #0xc]
+ add r1, r1, #0x1
+ strh r3, [r2, #0x0]
+ ldrsh r3, [r0, r4]
+ add r0, r0, #0x4
+ strh r3, [r2, #0x2]
+ add r2, r2, #0x4
+ str r2, [sp, #0xc]
+ ldrb r2, [r7, #0x0]
+ cmp r1, r2
+ blt _02005130
+_0200514A:
+ ldr r1, [sp, #0x0]
+ add r0, r5, #0x0
+ blx DC_FlushRange
+ ldr r1, [sp, #0x0]
+ add r0, r6, #0x0
+ blx DC_FlushRange
+_0200515A:
+ add sp, #0x30
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005160
+FUN_02005160: ; 0x02005160
+ ldr r3, _02005168 ; =FUN_020C1148
+ add r1, r0, #0x0
+ mov r0, #0x7
+ bx r3
+ .balign 4
+_02005168: .word FUN_020C1148
+
+ thumb_func_start FUN_0200516C
+FUN_0200516C: ; 0x0200516C
+ push {r3, lr}
+ cmp r0, #0x0
+ bne _02005180
+ ldr r0, _020051A4 ; =0x000007FF
+ bl FUN_02005160
+ mov r0, #0x0
+ bl FUN_02004CA4
+ b _0200519C
+_02005180:
+ cmp r0, #0x1
+ ldr r0, _020051A8 ; =0x00007FFF
+ bne _02005192
+ bl FUN_02005160
+ mov r0, #0x1e
+ bl FUN_02004C80
+ b _0200519C
+_02005192:
+ bl FUN_02005160
+ mov r0, #0xf
+ bl FUN_02004C80
+_0200519C:
+ bl FUN_02004C78
+ pop {r3, pc}
+ nop
+_020051A4: .word 0x000007FF
+_020051A8: .word 0x00007FFF
+
+ thumb_func_start FUN_020051AC
+FUN_020051AC: ; 0x020051AC
+ push {r3, lr}
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _020051E0
+ mov r0, #0x0
+ bl FUN_02003FF4
+ bl FUN_020048EC
+ mov r1, #0x0
+ mvn r1, r1
+ cmp r0, r1
+ beq _020051E0
+ bl FUN_02004124
+ ldr r1, _020051E8 ; =0x0000047E
+ cmp r0, r1
+ beq _020051E0
+ bl FUN_02005454
+ mov r0, #0x1
+ add r1, r0, #0x0
+ bl FUN_020047C8
+ pop {r3, pc}
+_020051E0:
+ bl FUN_0200541C
+ pop {r3, pc}
+ nop
+_020051E8: .word 0x0000047E
+
+ thumb_func_start FUN_020051EC
+FUN_020051EC: ; 0x020051EC
+ ldr r3, _020051F0 ; =FUN_020C1180
+ bx r3
+ .balign 4
+_020051F0: .word FUN_020C1180
+
+ thumb_func_start FUN_020051F4
+FUN_020051F4: ; 0x020051F4
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_020048D0
+ bl FUN_02004018
+ add r4, r0, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C3980
+ add r6, r0, #0x0
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ bl FUN_0200526C
+ add r0, r6, #0x0
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200521C
+FUN_0200521C: ; 0x0200521C
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_020048D0
+ add r4, r0, #0x0
+ bl FUN_02004018
+ add r6, r0, #0x0
+ cmp r4, #0x7
+ bne _0200523E
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r6, #0x0
+ bl FUN_02005288
+ add r4, r0, #0x0
+ b _02005258
+_0200523E:
+ cmp r4, #0x1
+ bne _02005250
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ add r2, r6, #0x0
+ bl FUN_020052B8
+ add r4, r0, #0x0
+ b _02005258
+_02005250:
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r4-r6, pc}
+_02005258:
+ mov r0, #0x0
+ bl FUN_02004DBC
+ add r0, r5, #0x0
+ add r1, r6, #0x0
+ bl FUN_0200526C
+ add r0, r4, #0x0
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200526C
+FUN_0200526C: ; 0x0200526C
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ bl FUN_02004110
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ bl FUN_02004858
+ mov r0, #0x1
+ bl FUN_02003CE8
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005288
+FUN_02005288: ; 0x02005288
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x3
+ add r4, r2, #0x0
+ bl FUN_02004748
+ bl FUN_02003F64
+ add r0, r5, #0x0
+ bl FUN_02003F90
+ mov r0, #0x1a
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ add r0, r4, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C3980
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_020052B8
+FUN_020052B8: ; 0x020052B8
+ push {r3-r6, lr}
+ sub sp, #0x4
+ add r5, r0, #0x0
+ mov r0, #0x12
+ add r6, r2, #0x0
+ bl FUN_02003D38
+ mov r0, #0x1f
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x0
+ bl FUN_02003FF4
+ bl FUN_020048EC
+ bl FUN_02004900
+ add r1, r0, #0x0
+ add r0, r5, #0x0
+ bl FUN_020045C4
+ add r0, r6, #0x0
+ bl FUN_02003FF4
+ add r6, r0, #0x0
+ ldrh r0, [r4, #0x0]
+ bl FUN_02004900
+ mov r1, #0x0
+ mvn r1, r1
+ add r2, r0, #0x0
+ add r0, r6, #0x0
+ add r3, r1, #0x0
+ str r5, [sp, #0x0]
+ blx FUN_020C3910
+ add sp, #0x4
+ pop {r3-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005308
+FUN_02005308: ; 0x02005308
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ cmp r0, #0x4
+ beq _02005318
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r5, pc}
+_02005318:
+ add r0, r5, #0x0
+ bl FUN_020048D0
+ cmp r0, #0x7
+ beq _0200532A
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r5, pc}
+_0200532A:
+ add r0, r5, #0x0
+ mov r1, #0x1
+ bl FUN_02003FA8
+ mov r0, #0x7
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C3980
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ bl FUN_02004110
+ mov r0, #0x1
+ bl FUN_02003CE8
+ add r0, r4, #0x0
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005350
+FUN_02005350: ; 0x02005350
+ push {r4, lr}
+ add r4, r0, #0x0
+ blx FUN_020C0FDC
+ add r0, r4, #0x0
+ bl FUN_020048D0
+ cmp r0, #0xff
+ beq _0200536E
+ bl FUN_02004018
+ bl FUN_02003FF4
+ blx FUN_020C0F68
+_0200536E:
+ bl FUN_02005374
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005374
+FUN_02005374: ; 0x02005374
+ push {r3, lr}
+ mov r0, #0x0
+ bl FUN_02004110
+ mov r0, #0x0
+ bl FUN_02004130
+ mov r0, #0x0
+ bl FUN_02003CE8
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200538C
+FUN_0200538C: ; 0x0200538C
+ push {r3-r7, lr}
+ add r6, r0, #0x0
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_02004124
+ bl FUN_020048D0
+ cmp r0, #0xff
+ beq _020053C8
+ bl FUN_02004018
+ add r7, r0, #0x0
+ cmp r4, #0x0
+ bne _020053B2
+ mov r1, #0x0
+ add r2, r1, #0x0
+ bl FUN_02004828
+_020053B2:
+ add r0, r7, #0x0
+ add r1, r6, #0x0
+ add r2, r5, #0x0
+ bl FUN_02004828
+ add r0, r5, #0x0
+ bl FUN_02004D74
+ mov r0, #0x3
+ bl FUN_02003CE8
+_020053C8:
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_020053CC
+FUN_020053CC: ; 0x020053CC
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ bl FUN_02004124
+ bl FUN_020048D0
+ add r6, r0, #0x0
+ cmp r6, #0xff
+ beq _02005402
+ bl FUN_02005404
+ cmp r0, #0x0
+ bne _020053FC
+ add r0, r6, #0x0
+ bl FUN_02004018
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ bl FUN_02004828
+ add r0, r4, #0x0
+ bl FUN_02004D74
+_020053FC:
+ mov r0, #0x4
+ bl FUN_02003CE8
+_02005402:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02005404
+FUN_02005404: ; 0x02005404
+ push {r3, lr}
+ mov r0, #0x6
+ bl FUN_02003D38
+ ldrh r0, [r0, #0x0]
+ pop {r3, pc}
+
+ thumb_func_start FUN_02005410
+FUN_02005410: ; 0x02005410
+ push {r3, lr}
+ bl FUN_020048D0
+ bl FUN_020048BC
+ pop {r3, pc}
+
+ thumb_func_start FUN_0200541C
+FUN_0200541C: ; 0x0200541C
+ push {r3-r5, lr}
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x0
+ blx FUN_020C0F9C
+ ldrb r0, [r5, #0x0]
+ cmp r0, #0x1
+ bne _02005440
+ mov r0, #0xe
+ bl FUN_02004AAC
+_02005440:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _0200544C
+ mov r0, #0xf
+ bl FUN_02004AAC
+_0200544C:
+ mov r0, #0x0
+ bl FUN_02003CE8
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005454
+FUN_02005454: ; 0x02005454
+ push {r3-r7, lr}
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r7, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x7
+ bl FUN_02003FF4
+ mov r1, #0x0
+ blx FUN_020C10A4
+ bl FUN_02005374
+ mov r5, #0x0
+ add r4, r5, #0x0
+_0200547A:
+ add r0, r5, #0x3
+ add r1, r4, #0x0
+ bl FUN_020054F8
+ add r5, r5, #0x1
+ cmp r5, #0x4
+ blt _0200547A
+ mov r0, #0x0
+ bl FUN_02005614
+ ldrb r0, [r7, #0x0]
+ cmp r0, #0x1
+ bne _0200549A
+ mov r0, #0xe
+ bl FUN_02004AAC
+_0200549A:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _020054A6
+ mov r0, #0xf
+ bl FUN_02004AAC
+_020054A6:
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_020054A8
+FUN_020054A8: ; 0x020054A8
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ bl FUN_020054C8
+ add r6, r0, #0x0
+ ldr r1, _020054C4 ; =0x0000FFFF
+ add r0, r5, #0x0
+ add r2, r4, #0x0
+ bl FUN_02005530
+ add r0, r6, #0x0
+ pop {r4-r6, pc}
+ nop
+_020054C4: .word 0x0000FFFF
+
+ thumb_func_start FUN_020054C8
+FUN_020054C8: ; 0x020054C8
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ bl FUN_020048D0
+ bl FUN_02004018
+ add r4, r0, #0x0
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C3980
+ add r6, r0, #0x0
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ bl FUN_02004858
+ add r0, r6, #0x0
+ pop {r4-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_020054F0
+FUN_020054F0: ; 0x020054F0
+ ldr r3, _020054F4 ; =FUN_020C0FDC
+ bx r3
+ .balign 4
+_020054F4: .word FUN_020C0FDC
+
+ thumb_func_start FUN_020054F8
+FUN_020054F8: ; 0x020054F8
+ push {r4, lr}
+ add r4, r1, #0x0
+ bl FUN_02003FF4
+ add r1, r4, #0x0
+ blx FUN_020C10A4
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005508
+FUN_02005508: ; 0x02005508
+ push {r3, lr}
+ bl FUN_020048D0
+ bl FUN_020048BC
+ pop {r3, pc}
+
+ thumb_func_start FUN_02005514
+FUN_02005514: ; 0x02005514
+ push {r4, lr}
+ mov r4, #0x0
+_02005518:
+ add r0, r4, #0x3
+ bl FUN_020048BC
+ cmp r0, #0x1
+ bne _02005526
+ mov r0, #0x1
+ pop {r4, pc}
+_02005526:
+ add r4, r4, #0x1
+ cmp r4, #0x4
+ blt _02005518
+ mov r0, #0x0
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005530
+FUN_02005530: ; 0x02005530
+ push {r3-r5, lr}
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ bl FUN_020048D0
+ bl FUN_02004018
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ add r2, r4, #0x0
+ blx FUN_020C0E7C
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_0200554C
+FUN_0200554C: ; 0x0200554C
+ push {r3-r7, lr}
+ add r6, r0, #0x0
+ mov r0, #0x3
+ bl FUN_02004018
+ ldr r7, _02005574 ; =0x0000FFFF
+ add r4, r0, #0x0
+ mov r5, #0x0
+_0200555C:
+ add r0, r4, r5
+ bl FUN_02003FF4
+ add r1, r7, #0x0
+ add r2, r6, #0x0
+ blx FUN_020C0E7C
+ add r5, r5, #0x1
+ cmp r5, #0x4
+ blt _0200555C
+ pop {r3-r7, pc}
+ nop
+_02005574: .word 0x0000FFFF
+
+ thumb_func_start FUN_02005578
+FUN_02005578: ; 0x02005578
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x11
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x23
+ bl FUN_02003D38
+ ldr r1, _02005610 ; =0x000001B9
+ cmp r5, r1
+ beq _0200559C
+ add r1, #0x36
+ cmp r5, r1
+ bhi _0200559A
+ cmp r5, #0x0
+ bne _0200559C
+_0200559A:
+ mov r5, #0x1
+_0200559C:
+ ldr r1, _02005610 ; =0x000001B9
+ cmp r5, r1
+ bne _020055BC
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ mov r2, #0x7f
+ add r3, r1, #0x0
+ bl FUN_02005D48
+ cmp r0, #0x1
+ bne _020055BC
+ mov r0, #0x0
+ bl FUN_02005E80
+ mov r0, #0x1
+ pop {r3-r5, pc}
+_020055BC:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020055E8
+ mov r0, #0x0
+ bl FUN_02005614
+ mov r0, #0x1
+ bl FUN_02003FF4
+ mov r1, #0x2
+ str r1, [sp, #0x0]
+ sub r1, r1, #0x3
+ add r2, r5, #0x0
+ add r3, r1, #0x0
+ blx FUN_020C3910
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ mov r1, #0x1
+ bl FUN_02004858
+ b _02005606
+_020055E8:
+ mov r0, #0x8
+ bl FUN_02003FF4
+ mov r1, #0x2
+ str r1, [sp, #0x0]
+ sub r1, r1, #0x3
+ add r2, r5, #0x0
+ add r3, r1, #0x0
+ blx FUN_020C3910
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ mov r1, #0x8
+ bl FUN_02004858
+_02005606:
+ mov r0, #0x0
+ bl FUN_02005E80
+ add r0, r4, #0x0
+ pop {r3-r5, pc}
+ .balign 4
+_02005610: .word 0x000001B9
+
+ thumb_func_start FUN_02005614
+FUN_02005614: ; 0x02005614
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0xe
+ bl FUN_02003D38
+ mov r0, #0x1
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C10A4
+ mov r0, #0x8
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C10A4
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _02005658
+ mov r0, #0xe
+ bl FUN_02004C3C
+ mov r0, #0xe
+ bl FUN_02004A04
+_02005658:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _0200566A
+ mov r0, #0xf
+ bl FUN_02004C3C
+ mov r0, #0xf
+ bl FUN_02004A04
+_0200566A:
+ bl FUN_02005DFC
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02005670
+FUN_02005670: ; 0x02005670
+ push {r3-r5, lr}
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0xe
+ bl FUN_02003D38
+ ldrb r0, [r5, #0x0]
+ cmp r0, #0x1
+ bne _02005696
+ mov r0, #0xe
+ bl FUN_02004ABC
+ pop {r3-r5, pc}
+_02005696:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _020056A4
+ mov r0, #0xf
+ bl FUN_02004ABC
+ pop {r3-r5, pc}
+_020056A4:
+ mov r0, #0x0
+ bl FUN_020048BC
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_020056AC
+FUN_020056AC: ; 0x020056AC
+ push {r3-r7, lr}
+ sub sp, #0x20
+ str r0, [sp, #0x4]
+ mov r0, #0xf
+ str r1, [sp, #0x8]
+ add r5, r2, #0x0
+ add r6, r3, #0x0
+ ldr r7, [sp, #0x38]
+ bl FUN_02003D38
+ str r0, [sp, #0x14]
+ mov r0, #0x10
+ bl FUN_02003D38
+ str r0, [sp, #0x10]
+ mov r0, #0x11
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x1d
+ bl FUN_02003D38
+ str r0, [sp, #0xc]
+ mov r0, #0x23
+ bl FUN_02003D38
+ lsr r0, r5, #0x1f
+ add r0, r5, r0
+ asr r0, r0, #0x1
+ str r0, [sp, #0x1c]
+ add r0, #0x40
+ str r0, [sp, #0x1c]
+ add r0, r6, #0x0
+ str r0, [sp, #0x18]
+ sub r0, #0x1e
+ str r0, [sp, #0x18]
+ cmp r0, #0x0
+ bgt _020056FC
+ mov r0, #0x1
+ str r0, [sp, #0x18]
+_020056FC:
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+ ldr r0, [sp, #0x14]
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _02005714
+ mov r0, #0xe
+ bl FUN_02004C3C
+ mov r0, #0xe
+ bl FUN_02004A04
+_02005714:
+ ldr r0, [sp, #0x10]
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _02005728
+ mov r0, #0xf
+ bl FUN_02004C3C
+ mov r0, #0xf
+ bl FUN_02004A04
+_02005728:
+ ldr r4, [sp, #0x8]
+ ldr r0, _02005AB4 ; =0x000001B9
+ add r1, r4, #0x0
+ cmp r1, r0
+ beq _0200573E
+ add r0, #0x36
+ cmp r1, r0
+ bhi _0200573C
+ add r0, r4, #0x0
+ bne _0200573E
+_0200573C:
+ mov r4, #0x1
+_0200573E:
+ ldr r0, _02005AB4 ; =0x000001B9
+ ldr r1, [sp, #0x8]
+ cmp r1, r0
+ bne _020057B4
+ ldr r1, [sp, #0x4]
+ cmp r1, #0xc
+ bhi _020057AE
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02005758: ; jump table (using 16-bit offset)
+ .short _02005772 - _02005758 - 2; case 0
+ .short _02005772 - _02005758 - 2; case 1
+ .short _02005772 - _02005758 - 2; case 2
+ .short _020057AE - _02005758 - 2; case 3
+ .short _020057AE - _02005758 - 2; case 4
+ .short _02005772 - _02005758 - 2; case 5
+ .short _020057AE - _02005758 - 2; case 6
+ .short _020057AE - _02005758 - 2; case 7
+ .short _020057AE - _02005758 - 2; case 8
+ .short _020057AE - _02005758 - 2; case 9
+ .short _020057AE - _02005758 - 2; case 10
+ .short _02005772 - _02005758 - 2; case 11
+ .short _02005772 - _02005758 - 2; case 12
+_02005772:
+ bl FUN_02005578
+ ldr r0, [sp, #0xc]
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02005794
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ b _020057A8
+_02005794:
+ ldr r1, [sp, #0x1c]
+ mov r0, #0xe
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ bl FUN_02004ACC
+ mov r0, #0xe
+ add r1, r6, #0x0
+ bl FUN_02004AF8
+_020057A8:
+ add sp, #0x20
+ mov r0, #0x1
+ pop {r3-r7, pc}
+_020057AE:
+ mov r0, #0x1
+ bl FUN_02005E80
+_020057B4:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0xe
+ bls _020057BC
+ b _02005AC2
+_020057BC:
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #0x6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_020057C8: ; jump table (using 16-bit offset)
+ .short _020057E6 - _020057C8 - 2; case 0
+ .short _02005802 - _020057C8 - 2; case 1
+ .short _02005826 - _020057C8 - 2; case 2
+ .short _02005868 - _020057C8 - 2; case 3
+ .short _020058B2 - _020057C8 - 2; case 4
+ .short _02005900 - _020057C8 - 2; case 5
+ .short _02005928 - _020057C8 - 2; case 6
+ .short _0200596C - _020057C8 - 2; case 7
+ .short _0200599C - _020057C8 - 2; case 8
+ .short _020059CA - _020057C8 - 2; case 9
+ .short _020059FE - _020057C8 - 2; case 10
+ .short _02005A2E - _020057C8 - 2; case 11
+ .short _02005A56 - _020057C8 - 2; case 12
+ .short _02005A86 - _020057C8 - 2; case 13
+ .short _02005ABC - _020057C8 - 2; case 14
+_020057E6:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ b _02005AC2
+_02005802:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x14
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ b _02005AC2
+_02005826:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ mov r2, #0x40
+ bl FUN_02004D20
+ add r0, r4, #0x0
+ mov r1, #0x14
+ bl FUN_02005BC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x8
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ ldr r2, [sp, #0x18]
+ add r0, r4, #0x0
+ mov r1, #0x8
+ bl FUN_02005AC8
+ b _02005AC2
+_02005868:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x1e
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ mov r2, #0xc0
+ bl FUN_02004D20
+ add r0, r4, #0x0
+ mov r1, #0x10
+ bl FUN_02005BC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x8
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ ldr r2, [sp, #0x18]
+ add r0, r4, #0x0
+ mov r1, #0x8
+ bl FUN_02005AC8
+ b _02005AC2
+_020058B2:
+ mov r0, #0xe
+ bl FUN_02004984
+ ldr r2, [sp, #0x1c]
+ add r0, r4, #0x0
+ add r1, r6, #0x0
+ mov r3, #0xe
+ str r7, [sp, #0x0]
+ bl FUN_02004B30
+ ldr r1, [sp, #0x1c]
+ mov r0, #0xe
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ bl FUN_02004ACC
+ mov r0, #0xf
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ mov r1, #0x86
+ mov r0, #0xe
+ lsl r1, r1, #0x8
+ bl FUN_02004AE4
+ mov r1, #0x3f
+ ldr r2, [sp, #0x18]
+ ldr r3, [sp, #0x1c]
+ add r0, r4, #0x0
+ mvn r1, r1
+ str r7, [sp, #0x0]
+ bl FUN_02005BF8
+ mov r1, #0x86
+ mov r0, #0xf
+ lsl r1, r1, #0x8
+ bl FUN_02004AE4
+ b _02005AC2
+_02005900:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x1
+ add r2, r0, #0x0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ sub r2, #0xe1
+ bl FUN_02004D20
+ b _02005AC2
+_02005928:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ mov r2, #0x2c
+ bl FUN_02004D20
+ mov r1, #0x3f
+ add r0, r4, #0x0
+ mvn r1, r1
+ bl FUN_02005BC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x8
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ ldr r2, [sp, #0x18]
+ add r0, r4, #0x0
+ mov r1, #0x8
+ bl FUN_02005AC8
+ b _02005AC2
+_0200596C:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0xb
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ mov r0, #0x1
+ add r2, r0, #0x0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ sub r2, #0x81
+ bl FUN_02004D20
+ b _02005AC2
+_0200599C:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x3c
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ mov r2, #0x3c
+ bl FUN_02004D20
+ b _02005AC2
+_020059CA:
+ mov r0, #0xe
+ bl FUN_02004984
+ ldr r2, [sp, #0x1c]
+ add r0, r4, #0x0
+ add r1, r6, #0x0
+ mov r3, #0xe
+ str r7, [sp, #0x0]
+ bl FUN_02004B30
+ ldr r1, [sp, #0x1c]
+ mov r0, #0xe
+ lsl r1, r1, #0x18
+ lsr r1, r1, #0x18
+ bl FUN_02004ACC
+ mov r0, #0xd
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ mov r1, #0x1a
+ mov r0, #0xe
+ lsl r1, r1, #0xa
+ bl FUN_02004AE4
+ b _02005AC2
+_020059FE:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x64
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ mov r0, #0x1
+ add r2, r0, #0x0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ sub r2, #0x2d
+ bl FUN_02004D20
+ b _02005AC2
+_02005A2E:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x1
+ add r2, r0, #0x0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ sub r2, #0x61
+ bl FUN_02004D20
+ b _02005AC2
+_02005A56:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x1
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ add r0, r4, #0x0
+ mov r1, #0x1
+ add r2, r6, #0x0
+ bl FUN_02005AC8
+ mov r0, #0x14
+ add r1, r7, #0x0
+ bl FUN_02005AE0
+ mov r0, #0x1
+ add r2, r0, #0x0
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ sub r2, #0x61
+ bl FUN_02004D20
+ b _02005AC2
+_02005A86:
+ add r0, r4, #0x0
+ bl FUN_02005578
+ add r0, r4, #0x0
+ mov r1, #0x1
+ mov r2, #0x7f
+ bl FUN_02005AC8
+ add r0, r4, #0x0
+ mov r1, #0x14
+ bl FUN_02005BC8
+ ldr r1, _02005AB8 ; =0x0000FFFF
+ mov r0, #0x8
+ add r2, r5, #0x0
+ bl FUN_02004D4C
+ mov r0, #0x8
+ add r1, r6, #0x0
+ mov r2, #0x0
+ bl FUN_02004828
+ b _02005AC2
+ .balign 4
+_02005AB4: .word 0x000001B9
+_02005AB8: .word 0x0000FFFF
+_02005ABC:
+ add r0, r4, #0x0
+ bl FUN_02005578
+_02005AC2:
+ mov r0, #0x1
+ add sp, #0x20
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02005AC8
+FUN_02005AC8: ; 0x02005AC8
+ push {r3-r5, lr}
+ add r4, r1, #0x0
+ add r5, r0, #0x0
+ add r0, r4, #0x0
+ add r1, r2, #0x0
+ bl FUN_0200483C
+ add r0, r5, #0x0
+ add r1, r4, #0x0
+ bl FUN_02004858
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005AE0
+FUN_02005AE0: ; 0x02005AE0
+ push {r4-r6, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ mov r0, #0x22
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ bl FUN_02005BA0
+ add r0, r4, #0x0
+ mov r1, #0x8
+ bl FUN_02016998
+ add r4, r0, #0x0
+ bne _02005B04
+ bl ErrorHandling
+ pop {r4-r6, pc}
+_02005B04:
+ mov r2, #0x0
+ strb r2, [r4, #0x0]
+ strb r2, [r4, #0x1]
+ strb r2, [r4, #0x2]
+ strb r2, [r4, #0x3]
+ strb r2, [r4, #0x4]
+ strb r2, [r4, #0x5]
+ strb r2, [r4, #0x6]
+ strb r2, [r4, #0x7]
+ ldr r0, _02005B28 ; =FUN_02005B2C
+ add r1, r4, #0x0
+ str r5, [r4, #0x0]
+ bl FUN_0200CA44
+ str r0, [r4, #0x4]
+ str r0, [r6, #0x0]
+ pop {r4-r6, pc}
+ nop
+_02005B28: .word FUN_02005B2C
+
+ thumb_func_start FUN_02005B2C
+FUN_02005B2C: ; 0x02005B2C
+ push {r4-r6, lr}
+ mov r0, #0xf
+ add r5, r1, #0x0
+ bl FUN_02003D38
+ add r6, r0, #0x0
+ mov r0, #0x10
+ bl FUN_02003D38
+ ldr r2, [r5, #0x0]
+ add r4, r0, #0x0
+ cmp r2, #0xa
+ bne _02005B58
+ mov r0, #0x1
+ mov r1, #0x0
+ bl FUN_02004828
+ ldr r2, [r5, #0x0]
+ mov r0, #0x8
+ mov r1, #0x0
+ bl FUN_02004828
+_02005B58:
+ ldr r0, [r5, #0x0]
+ sub r0, r0, #0x1
+ str r0, [r5, #0x0]
+ bl FUN_02005670
+ cmp r0, #0x0
+ bne _02005B6A
+ mov r0, #0x0
+ str r0, [r5, #0x0]
+_02005B6A:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ bgt _02005B9E
+ mov r0, #0x0
+ bl FUN_02005614
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _02005B88
+ mov r0, #0xe
+ bl FUN_02004C3C
+ mov r0, #0xe
+ bl FUN_02004A04
+_02005B88:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ bne _02005B9A
+ mov r0, #0xf
+ bl FUN_02004C3C
+ mov r0, #0xf
+ bl FUN_02004A04
+_02005B9A:
+ bl FUN_02005BA0
+_02005B9E:
+ pop {r4-r6, pc}
+
+ thumb_func_start FUN_02005BA0
+FUN_02005BA0: ; 0x02005BA0
+ push {r3-r5, lr}
+ mov r0, #0x22
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02005BC2
+ bl FUN_0201B6C8
+ add r5, r0, #0x0
+ ldr r0, [r4, #0x0]
+ bl FUN_0200CAB4
+ add r0, r5, #0x0
+ bl FUN_02016A18
+_02005BC2:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005BC8
+FUN_02005BC8: ; 0x02005BC8
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x11
+ add r4, r1, #0x0
+ bl FUN_02003D38
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+ add r0, r1, #0x0
+ bl FUN_02005E80
+ add r0, r5, #0x0
+ bl FUN_02005578
+ add r5, r0, #0x0
+ ldr r1, _02005BF4 ; =0x0000FFFF
+ mov r0, #0x8
+ add r2, r4, #0x0
+ bl FUN_02004D20
+ add r0, r5, #0x0
+ pop {r3-r5, pc}
+ .balign 4
+_02005BF4: .word 0x0000FFFF
+
+ thumb_func_start FUN_02005BF8
+FUN_02005BF8: ; 0x02005BF8
+ push {r3-r6, lr}
+ sub sp, #0x4
+ add r5, r0, #0x0
+ mov r0, #0x11
+ add r4, r2, #0x0
+ add r6, r3, #0x0
+ bl FUN_02003D38
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+ mov r0, #0xf
+ bl FUN_02004984
+ ldr r0, [sp, #0x18]
+ add r1, r4, #0x0
+ str r0, [sp, #0x0]
+ add r0, r5, #0x0
+ add r2, r6, #0x0
+ mov r3, #0xf
+ bl FUN_02004B30
+ add sp, #0x4
+ pop {r3-r6, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005C28
+FUN_02005C28: ; 0x02005C28
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ bl FUN_020048F4
+ add r0, r5, #0x0
+ bl FUN_02005CEC
+ bl FUN_02004124
+ bl FUN_020048D0
+ cmp r0, #0xff
+ beq _02005C48
+ mov r1, #0x1
+ bl FUN_020047C8
+_02005C48:
+ mov r0, #0x1c
+ bl FUN_02003D38
+ bl FUN_02003F3C
+ add r0, r5, #0x0
+ mov r1, #0x3
+ bl FUN_02003FA8
+ mov r0, #0x2
+ bl FUN_02003FF4
+ add r1, r5, #0x0
+ blx FUN_020C3980
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ mov r1, #0x2
+ bl FUN_02004858
+ add r0, r4, #0x0
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005C74
+FUN_02005C74: ; 0x02005C74
+ push {r4, lr}
+ mov r0, #0xd
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ mov r0, #0x2
+ bl FUN_020048BC
+ cmp r0, #0x0
+ beq _02005C8C
+ mov r0, #0x1
+ pop {r4, pc}
+_02005C8C:
+ ldrh r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02005C9A
+ sub r0, r0, #0x1
+ strh r0, [r4, #0x0]
+ mov r0, #0x1
+ pop {r4, pc}
+_02005C9A:
+ mov r0, #0x0
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005CA0
+FUN_02005CA0: ; 0x02005CA0
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x2
+ bl FUN_02003FF4
+ add r1, r4, #0x0
+ blx FUN_020C10A4
+ mov r0, #0x6
+ bl FUN_02004748
+ bl FUN_02003F64
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005CBC
+FUN_02005CBC: ; 0x02005CBC
+ push {r3, lr}
+ mov r0, #0xd
+ bl FUN_02003D38
+ bl FUN_02005C74
+ cmp r0, #0x1
+ bne _02005CD0
+ mov r0, #0x1
+ pop {r3, pc}
+_02005CD0:
+ mov r0, #0x0
+ bl FUN_02005CA0
+ bl FUN_02004124
+ bl FUN_020048D0
+ cmp r0, #0xff
+ beq _02005CE8
+ mov r1, #0x0
+ bl FUN_020047C8
+_02005CE8:
+ mov r0, #0x0
+ pop {r3, pc}
+
+ thumb_func_start FUN_02005CEC
+FUN_02005CEC: ; 0x02005CEC
+ push {r3, lr}
+ mov r0, #0xd
+ bl FUN_02003D38
+ mov r1, #0xf
+ strh r1, [r0, #0x0]
+ pop {r3, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005CFC
+FUN_02005CFC: ; 0x02005CFC
+ push {r3, lr}
+ mov r0, #0x1d
+ bl FUN_02003D38
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _02005D1C
+ mov r0, #0xe
+ bl FUN_02004ABC
+ cmp r0, #0x0
+ bne _02005D1C
+ bl FUN_02005DFC
+ mov r0, #0x1
+ pop {r3, pc}
+_02005D1C:
+ mov r0, #0x0
+ pop {r3, pc}
+
+ thumb_func_start FUN_02005D20
+FUN_02005D20: ; 0x02005D20
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ mov r0, #0x1e
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ add r0, r5, #0x0
+ bl FUN_02029F04
+ cmp r0, #0x0
+ bne _02005D3A
+ mov r0, #0x0
+ pop {r3-r5, pc}
+_02005D3A:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x1
+ beq _02005D44
+ mov r0, #0x1
+ pop {r3-r5, pc}
+_02005D44:
+ mov r0, #0x0
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02005D48
+FUN_02005D48: ; 0x02005D48
+ push {r3-r7, lr}
+ sub sp, #0x30
+ add r6, r0, #0x0
+ add r5, r2, #0x0
+ add r7, r3, #0x0
+ bl FUN_02004DB4
+ str r0, [sp, #0x0]
+ mov r0, #0x1d
+ bl FUN_02003D38
+ str r0, [sp, #0x4]
+ add r0, r6, #0x0
+ bl FUN_02005D20
+ cmp r0, #0x0
+ bne _02005D70
+ add sp, #0x30
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02005D70:
+ mov r0, #0x0
+ bl FUN_02005614
+ bl FUN_02005DFC
+ mov r0, #0xe
+ bl FUN_02004984
+ bl FUN_0201B9EC
+ lsr r2, r0, #0x1f
+ lsl r1, r0, #0x13
+ sub r1, r1, r2
+ mov r0, #0x13
+ ror r1, r0
+ add r0, r2, r1
+ lsl r0, r0, #0x10
+ lsr r4, r0, #0x10
+ add r0, r6, #0x0
+ bl FUN_02029F10
+ add r1, r0, #0x0
+ ldr r0, [sp, #0x0]
+ bl FUN_02029F14
+ mov r0, #0xe
+ bl FUN_02004930
+ str r0, [sp, #0x8]
+ mov r0, #0x0
+ str r0, [sp, #0xc]
+ bl FUN_02004DB4
+ str r0, [sp, #0x10]
+ mov r0, #0x0
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x18]
+ mov r0, #0x7d
+ lsl r0, r0, #0x4
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ mov r0, #0x2
+ lsl r0, r0, #0xe
+ add r0, r4, r0
+ str r0, [sp, #0x28]
+ lsr r0, r7, #0x1f
+ add r0, r7, r0
+ asr r0, r0, #0x1
+ add r0, #0x40
+ str r0, [sp, #0x2c]
+ add r0, sp, #0x8
+ mov r1, #0xe
+ str r5, [sp, #0x24]
+ bl FUN_02004A6C
+ add r4, r0, #0x0
+ mov r0, #0xe
+ add r1, r5, #0x0
+ bl FUN_02004AF8
+ ldr r0, [sp, #0x4]
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+ mov r0, #0x0
+ bl FUN_02005E80
+ add r0, r4, #0x0
+ add sp, #0x30
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005DFC
+FUN_02005DFC: ; 0x02005DFC
+ push {r3-r5, lr}
+ mov r0, #0xf
+ bl FUN_02003D38
+ add r5, r0, #0x0
+ mov r0, #0x1d
+ bl FUN_02003D38
+ add r4, r0, #0x0
+ ldrb r0, [r5, #0x0]
+ cmp r0, #0x1
+ bne _02005E20
+ mov r0, #0xe
+ bl FUN_02004C3C
+ mov r0, #0xe
+ bl FUN_02004A04
+_02005E20:
+ mov r0, #0x0
+ strb r0, [r4, #0x0]
+ pop {r3-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005E28
+FUN_02005E28: ; 0x02005E28
+ push {lr}
+ sub sp, #0x1c
+ mov r0, #0x2
+ str r0, [sp, #0x0]
+ bl FUN_02004DB4
+ mov r1, #0x7d
+ str r0, [sp, #0x4]
+ lsl r1, r1, #0x4
+ mov r0, #0x1f
+ str r1, [sp, #0x8]
+ tst r0, r1
+ beq _02005E48
+ mov r0, #0x1f
+ bic r1, r0
+ str r1, [sp, #0x8]
+_02005E48:
+ ldr r0, _02005E60 ; =0x00004174
+ str r0, [sp, #0xc]
+ mov r0, #0x0
+ str r0, [sp, #0x10]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x18]
+ add r0, sp, #0x0
+ bl FUN_02004914
+ add sp, #0x1c
+ pop {pc}
+ nop
+_02005E60: .word 0x00004174
+
+ thumb_func_start FUN_02005E64
+FUN_02005E64: ; 0x02005E64
+ ldr r3, _02005E68 ; =FUN_0200491C
+ bx r3
+ .balign 4
+_02005E68: .word FUN_0200491C
+
+ thumb_func_start FUN_02005E6C
+FUN_02005E6C: ; 0x02005E6C
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02004DB4
+ add r1, r0, #0x0
+ add r0, r4, #0x0
+ bl FUN_02029F4C
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005E80
+FUN_02005E80: ; 0x02005E80
+ push {r4, lr}
+ add r4, r0, #0x0
+ mov r0, #0x1e
+ bl FUN_02003D38
+ strb r4, [r0, #0x0]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02005E90
+FUN_02005E90: ; 0x02005E90
+ push {r3-r7, lr}
+ add r5, r0, #0x0
+ mov r0, #0x23
+ add r7, r1, #0x0
+ add r4, r2, #0x0
+ add r6, r3, #0x0
+ bl FUN_02003D38
+ cmp r5, #0x0
+ bne _02005EB2
+ ldr r0, [r0, #0x0]
+ add r1, r7, #0x0
+ add r2, r4, #0x0
+ add r3, r6, #0x0
+ bl FUN_02005D48
+ b _02005EBE
+_02005EB2:
+ add r0, r5, #0x0
+ add r1, r7, #0x0
+ add r2, r4, #0x0
+ add r3, r6, #0x0
+ bl FUN_02005D48
+_02005EBE:
+ cmp r0, #0x0
+ bne _02005ED8
+ mov r0, #0x1
+ bl FUN_02005E80
+ mov r0, #0xb
+ str r0, [sp, #0x0]
+ ldr r1, _02005EDC ; =0x000001B9
+ mov r0, #0x0
+ add r2, r6, #0x0
+ add r3, r4, #0x0
+ bl FUN_020056AC
+_02005ED8:
+ pop {r3-r7, pc}
+ nop
+_02005EDC: .word 0x000001B9
+
+ thumb_func_start FUN_02005EE0
+FUN_02005EE0: ; 0x02005EE0
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02029F04
+ cmp r0, #0x0
+ bne _02005EF0
+ mov r0, #0x0
+ pop {r4, pc}
+_02005EF0:
+ add r0, r4, #0x0
+ bl FUN_02029F10
+ mov r1, #0xf
+ ldrsb r0, [r0, r1]
+ sub r1, #0x2d
+ cmp r0, r1
+ bge _02005F04
+ mov r0, #0x1
+ pop {r4, pc}
+_02005F04:
+ cmp r0, #0x1e
+ blt _02005F10
+ cmp r0, #0x80
+ bge _02005F10
+ mov r0, #0x2
+ pop {r4, pc}
+_02005F10:
+ mov r0, #0x0
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005F14
+FUN_02005F14: ; 0x02005F14
+ cmp r0, #0xb
+ bgt _02005F2E
+ bge _02005F32
+ cmp r0, #0x5
+ bgt _02005F36
+ cmp r0, #0x0
+ blt _02005F36
+ beq _02005F32
+ cmp r0, #0x1
+ beq _02005F32
+ cmp r0, #0x5
+ beq _02005F32
+ b _02005F36
+_02005F2E:
+ cmp r0, #0xc
+ bne _02005F36
+_02005F32:
+ mov r0, #0x1
+ bx lr
+_02005F36:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+
+ thumb_func_start FUN_02005F3C
+FUN_02005F3C: ; 0x02005F3C
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x1
+ beq _02005F4A
+ bl ErrorHandling
+_02005F4A:
+ ldr r1, [r4, #0x0]
+ mov r0, #0x0
+ blx FS_UnloadOverlay
+ cmp r0, #0x1
+ beq _02005F5A
+ bl ErrorHandling
+_02005F5A:
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005F60
+FUN_02005F60: ; 0x02005F60
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_02005F90
+ bl FUN_0200610C
+ mov r2, #0x0
+ add r3, r0, #0x0
+_02005F70:
+ ldr r1, [r3, #0x4]
+ cmp r1, #0x1
+ bne _02005F86
+ ldr r1, [r3, #0x0]
+ cmp r4, r1
+ bne _02005F86
+ lsl r1, r2, #0x3
+ add r0, r0, r1
+ bl FUN_02005F3C
+ pop {r4, pc}
+_02005F86:
+ add r2, r2, #0x1
+ add r3, #0x8
+ cmp r2, #0x8
+ blt _02005F70
+ pop {r4, pc}
+
+ thumb_func_start FUN_02005F90
+FUN_02005F90: ; 0x02005F90
+ push {lr}
+ sub sp, #0x2c
+ add r2, r0, #0x0
+ add r0, sp, #0x0
+ mov r1, #0x0
+ blx FS_LoadOverlayInfo
+ cmp r0, #0x1
+ beq _02005FA6
+ bl ErrorHandling
+_02005FA6:
+ mov r0, #0x2
+ ldr r2, [sp, #0x4]
+ lsl r0, r0, #0x18
+ cmp r2, r0
+ bhi _02005FBC
+ lsr r0, r0, #0x1
+ cmp r2, r0
+ blo _02005FBC
+ add sp, #0x2c
+ mov r0, #0x1
+ pop {pc}
+_02005FBC:
+ mov r0, #0x1
+ ldr r1, _02005FD8 ; =0x027E0000
+ lsl r0, r0, #0xe
+ add r0, r1, r0
+ cmp r2, r0
+ bhi _02005FD2
+ cmp r2, r1
+ blo _02005FD2
+ add sp, #0x2c
+ mov r0, #0x2
+ pop {pc}
+_02005FD2:
+ mov r0, #0x0
+ add sp, #0x2c
+ pop {pc}
+ .balign 4
+_02005FD8: .word 0x027E0000
+
+ thumb_func_start FUN_02005FDC
+FUN_02005FDC: ; 0x02005FDC
+ push {r3-r7, lr}
+ add r4, r1, #0x0
+ mov r1, #0x0
+ mvn r1, r1
+ add r5, r0, #0x0
+ str r1, [sp, #0x0]
+ bl FUN_02006090
+ cmp r0, #0x0
+ bne _02005FF4
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02005FF4:
+ add r0, r5, #0x0
+ bl FUN_02005F90
+ add r7, r0, #0x0
+ bl FUN_0200610C
+ add r3, r0, #0x0
+ mov r6, #0x0
+ add r1, r3, #0x0
+_02006006:
+ ldr r0, [r1, #0x4]
+ cmp r0, #0x0
+ bne _02006018
+ lsl r1, r6, #0x3
+ add r2, r3, r1
+ mov r0, #0x1
+ str r0, [r2, #0x4]
+ str r5, [r3, r1]
+ b _02006020
+_02006018:
+ add r6, r6, #0x1
+ add r1, #0x8
+ cmp r6, #0x8
+ blt _02006006
+_02006020:
+ cmp r6, #0x8
+ blt _0200602C
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_0200602C:
+ sub r6, r7, #0x1
+ cmp r6, #0x1
+ bhi _0200603C
+ mov r0, #0x0
+ mvn r0, r0
+ blx FS_SetDefaultDMA
+ str r0, [sp, #0x0]
+_0200603C:
+ cmp r4, #0x0
+ beq _0200604A
+ cmp r4, #0x1
+ beq _02006056
+ cmp r4, #0x2
+ beq _02006062
+ b _0200606E
+_0200604A:
+ mov r0, #0x0
+ add r1, r5, #0x0
+ bl FUN_02006168
+ add r4, r0, #0x0
+ b _02006076
+_02006056:
+ mov r0, #0x0
+ add r1, r5, #0x0
+ bl FUN_02006170
+ add r4, r0, #0x0
+ b _02006076
+_02006062:
+ mov r0, #0x0
+ add r1, r5, #0x0
+ bl FUN_020061A8
+ add r4, r0, #0x0
+ b _02006076
+_0200606E:
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02006076:
+ cmp r6, #0x1
+ bhi _02006080
+ ldr r0, [sp, #0x0]
+ blx FS_SetDefaultDMA
+_02006080:
+ cmp r4, #0x0
+ bne _0200608C
+ bl ErrorHandling
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_0200608C:
+ mov r0, #0x1
+ pop {r3-r7, pc}
+
+ thumb_func_start FUN_02006090
+FUN_02006090: ; 0x02006090
+ push {r3-r7, lr}
+ sub sp, #0x10
+ add r1, sp, #0xc
+ add r2, sp, #0x8
+ add r4, r0, #0x0
+ bl FUN_02006130
+ cmp r0, #0x0
+ bne _020060A8
+ add sp, #0x10
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_020060A8:
+ add r0, r4, #0x0
+ bl FUN_02005F90
+ bl FUN_0200610C
+ add r5, r0, #0x0
+ mov r4, #0x0
+ add r6, sp, #0x4
+ add r7, sp, #0x0
+_020060BA:
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x1
+ bne _020060FC
+ ldr r0, [r5, #0x0]
+ add r1, r6, #0x0
+ add r2, r7, #0x0
+ bl FUN_02006130
+ cmp r0, #0x1
+ bne _020060FC
+ ldr r1, [sp, #0x4]
+ ldr r2, [sp, #0xc]
+ cmp r2, r1
+ blo _020060DC
+ ldr r0, [sp, #0x0]
+ cmp r2, r0
+ blo _020060F2
+_020060DC:
+ ldr r3, [sp, #0x8]
+ cmp r3, r1
+ bls _020060E8
+ ldr r0, [sp, #0x0]
+ cmp r3, r0
+ bls _020060F2
+_020060E8:
+ cmp r2, r1
+ bhi _020060FC
+ ldr r0, [sp, #0x0]
+ cmp r3, r0
+ blo _020060FC
+_020060F2:
+ bl ErrorHandling
+ add sp, #0x10
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_020060FC:
+ add r4, r4, #0x1
+ add r5, #0x8
+ cmp r4, #0x8
+ blt _020060BA
+ mov r0, #0x1
+ add sp, #0x10
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200610C
+FUN_0200610C: ; 0x0200610C
+ cmp r0, #0x0
+ beq _02006118
+ cmp r0, #0x1
+ beq _0200611C
+ cmp r0, #0x2
+ beq _02006120
+_02006118:
+ ldr r0, _02006124 ; =0x021C45B0
+ bx lr
+_0200611C:
+ ldr r0, _02006128 ; =0x021C45F0
+ bx lr
+_02006120:
+ ldr r0, _0200612C ; =0x021C4630
+ bx lr
+ .balign 4
+_02006124: .word 0x021C45B0
+_02006128: .word 0x021C45F0
+_0200612C: .word 0x021C4630
+
+ thumb_func_start FUN_02006130
+FUN_02006130: ; 0x02006130
+ push {r4-r5, lr}
+ sub sp, #0x2c
+ add r3, r0, #0x0
+ add r5, r1, #0x0
+ add r4, r2, #0x0
+ add r0, sp, #0x0
+ mov r1, #0x0
+ add r2, r3, #0x0
+ blx FS_LoadOverlayInfo
+ cmp r0, #0x0
+ bne _02006152
+ bl ErrorHandling
+ add sp, #0x2c
+ mov r0, #0x0
+ pop {r4-r5, pc}
+_02006152:
+ ldr r2, [sp, #0x4]
+ str r2, [r5, #0x0]
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r4, #0x0]
+ mov r0, #0x1
+ add sp, #0x2c
+ pop {r4-r5, pc}
+ .balign 4
+
+ thumb_func_start FUN_02006168
+FUN_02006168: ; 0x02006168
+ ldr r3, _0200616C ; =FS_LoadOverlay
+ bx r3
+ .balign 4
+_0200616C: .word FS_LoadOverlay
+
+ thumb_func_start FUN_02006170
+FUN_02006170: ; 0x02006170
+ push {lr}
+ sub sp, #0x2c
+ add r3, r0, #0x0
+ add r2, r1, #0x0
+ add r0, sp, #0x0
+ add r1, r3, #0x0
+ blx FS_LoadOverlayInfo
+ cmp r0, #0x0
+ bne _0200618A
+ add sp, #0x2c
+ mov r0, #0x0
+ pop {pc}
+_0200618A:
+ add r0, sp, #0x0
+ blx FS_LoadOverlayImage
+ cmp r0, #0x0
+ bne _0200619A
+ add sp, #0x2c
+ mov r0, #0x0
+ pop {pc}
+_0200619A:
+ add r0, sp, #0x0
+ blx FS_StartOverlay
+ mov r0, #0x1
+ add sp, #0x2c
+ pop {pc}
+ .balign 4
+
+ thumb_func_start FUN_020061A8
+FUN_020061A8: ; 0x020061A8
+ push {lr}
+ sub sp, #0x74
+ add r3, r0, #0x0
+ add r2, r1, #0x0
+ add r0, sp, #0x0
+ add r1, r3, #0x0
+ blx FS_LoadOverlayInfo
+ cmp r0, #0x0
+ bne _020061C2
+ add sp, #0x74
+ mov r0, #0x0
+ pop {pc}
+_020061C2:
+ add r0, sp, #0x2c
+ blx FS_InitFile
+ add r0, sp, #0x0
+ add r1, sp, #0x2c
+ blx FS_LoadOverlayImageAsync
+ add r0, sp, #0x2c
+ blx FS_WaitAsync
+ add r0, sp, #0x2c
+ blx FS_CloseFile
+ add r0, sp, #0x0
+ blx FS_StartOverlay
+ mov r0, #0x1
+ add sp, #0x74
+ pop {pc}
+
+ thumb_func_start FUN_020061E8
+FUN_020061E8: ; 0x020061E8
+ push {r3-r7, lr}
+ add r5, r1, #0x0
+ add r6, r0, #0x0
+ add r7, r2, #0x0
+ cmp r5, #0x0
+ beq _0200620C
+ add r0, r3, #0x0
+ bl FUN_02016998
+ add r4, r0, #0x0
+ bne _02006202
+ mov r0, #0x0
+ pop {r3-r7, pc}
+_02006202:
+ mov r1, #0x0
+ add r2, r5, #0x0
+ blx Call_FillMemWithValue
+ b _0200620E
+_0200620C:
+ mov r4, #0x0
+_0200620E:
+ add r0, r6, #0x0
+ add r1, r4, #0x0
+ add r2, r7, #0x0
+ bl FUN_0200CA44
+ pop {r3-r7, pc}
+ .balign 4
+
+ thumb_func_start FUN_0200621C
+FUN_0200621C: ; 0x0200621C
+ push {r4, lr}
+ add r4, r0, #0x0
+ bl FUN_0201B6C8
+ cmp r0, #0x0
+ beq _0200622C
+ bl FUN_02016A18
+_0200622C:
+ add r0, r4, #0x0
+ bl FUN_0200CAB4
+ pop {r4, pc}
+
+ thumb_func_start FUN_02006234
+FUN_02006234: ; 0x02006234
+ push {r3-r5, lr}
+ add r5, r0, #0x0
+ add r4, r1, #0x0
+ add r0, r2, #0x0
+ mov r1, #0x28
+ bl FUN_02016998
+ add r3, r0, #0x0
+ add r2, r3, #0x0
+ ldmia r5!, {r0-r1}
+ stmia r2!, {r0-r1}
+ ldmia r5!, {r0-r1}
+ stmia r2!, {r0-r1}
+ mov r0, #0x0
+ str r0, [r3, #0x10]
+ str r0, [r3, #0x14]
+ str r4, [r3, #0x18]
+ str r0, [r3, #0x1c]
+ str r0, [r3, #0x20]
+ str r0, [r3, #0x24]
+ add r0, r3, #0x0
+ pop {r3-r5, pc}
+
+ thumb_func_start FUN_02006260
+FUN_02006260: ; 0x02006260
+ ldr r3, _02006264 ; =FUN_02016A18
+ bx r3
+ .balign 4
+_02006264: .word FUN_02016A18
+
+ thumb_func_start FUN_02006268
+FUN_02006268: ; 0x02006268
+ push {r4, lr}
+ add r4, r0, #0x0
+ add r0, r2, #0x0
+ bl FUN_02016998
+ str r0, [r4, #0x1c]
+ pop {r4, pc}
+ .balign 4
+
+ thumb_func_start FUN_02006278
+FUN_02006278: ; 0x02006278
+ ldr r0, [r0, #0x1c]
+ bx lr
+
+ thumb_func_start FUN_0200627C
+FUN_0200627C: ; 0x0200627C
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r0, [r4, #0x1c]
+ bl FUN_02016A18
+ mov r0, #0x0
+ str r0, [r4, #0x1c]
+ pop {r4, pc}
+
+ thumb_func_start FUN_0200628C
+FUN_0200628C: ; 0x0200628C
+ ldr r0, [r0, #0x18]
+ bx lr
+
+ thumb_func_start FUN_02006290
+FUN_02006290: ; 0x02006290
+ push {r4, lr}
+ add r4, r0, #0x0
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x3
+ bhi _0200630E
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #0x6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_020062A6: ; jump table (using 16-bit offset)
+ .short _020062AE - _020062A6 - 2; case 0
+ .short _020062C2 - _020062A6 - 2; case 1
+ .short _020062DA - _020062A6 - 2; case 2
+ .short _020062F0 - _020062A6 - 2; case 3
+_020062AE:
+ mov r1, #0x0
+ ldr r0, [r4, #0xc]
+ mvn r1, r1
+ cmp r0, r1
+ beq _020062BE
+ mov r1, #0x2
+ bl FUN_02005FDC
+_020062BE:
+ mov r0, #0x1
+ str r0, [r4, #0x10]
+_020062C2:
+ add r1, r4, #0x0
+ ldr r2, [r4, #0x0]
+ add r0, r4, #0x0
+ add r1, #0x14
+ blx r2
+ cmp r0, #0x1
+ bne _0200630E
+ mov r0, #0x2
+ str r0, [r4, #0x10]
+ mov r0, #0x0
+ str r0, [r4, #0x14]
+ b _0200630E
+_020062DA:
+ add r1, r4, #0x0
+ ldr r2, [r4, #0x4]
+ add r1, #0x14
+ blx r2
+ cmp r0, #0x1
+ bne _0200630E
+ mov r0, #0x3
+ str r0, [r4, #0x10]
+ mov r0, #0x0
+ str r0, [r4, #0x14]
+ b _0200630E
+_020062F0:
+ add r1, r4, #0x0
+ ldr r2, [r4, #0x8]
+ add r1, #0x14
+ blx r2
+ cmp r0, #0x1
+ bne _0200630E
+ mov r1, #0x0
+ ldr r0, [r4, #0xc]
+ mvn r1, r1
+ cmp r0, r1
+ beq _0200630A
+ bl FUN_02005F60
+_0200630A:
+ mov r0, #0x1
+ pop {r4, pc}
+_0200630E:
+ mov r0, #0x0
+ pop {r4, pc}
+ .balign 4
diff --git a/asm/unk_02006864.s b/arm9/asm/unk_02006864.s
index b169a558..dab6adfe 100644
--- a/asm/unk_02006864.s
+++ b/arm9/asm/unk_02006864.s
@@ -179,7 +179,7 @@ _0200699C: ; jump table (using 16-bit offset)
.short _020069C6 - _0200699C - 2; case 6
.short _020069FA - _0200699C - 2; case 7
_020069AC:
- blx FUN_020C8B10
+ blx GX_BeginLoadBGExtPltt
ldr r0, [sp, #0x8]
ldr r3, _02006A30 ; =0x020ECBB0
lsl r4, r4, #0x2
@@ -188,10 +188,10 @@ _020069AC:
add r1, r6, #0x0
add r2, r5, #0x0
blx r3
- blx FUN_020C8A2C
+ blx GX_EndLoadBGExtPltt
b _02006A24
_020069C6:
- blx FUN_020C88CC
+ blx GXS_BeginLoadBGExtPltt
ldr r0, [sp, #0x8]
ldr r3, _02006A30 ; =0x020ECBB0
lsl r4, r4, #0x2
@@ -200,10 +200,10 @@ _020069C6:
add r1, r6, #0x0
add r2, r5, #0x0
blx r3
- blx FUN_020C880C
+ blx GXS_EndLoadBGExtPltt
b _02006A24
_020069E0:
- blx FUN_020C89BC
+ blx GX_BeginLoadOBJExtPltt
ldr r0, [sp, #0x8]
ldr r3, _02006A30 ; =0x020ECBB0
lsl r4, r4, #0x2
@@ -212,10 +212,10 @@ _020069E0:
add r1, r6, #0x0
add r2, r5, #0x0
blx r3
- blx FUN_020C88F0
+ blx GX_EndLoadOBJExtPltt
b _02006A24
_020069FA:
- blx FUN_020C87E8
+ blx GXS_BeginLoadOBJExtPltt
ldr r0, [sp, #0x8]
ldr r3, _02006A30 ; =0x020ECBB0
lsl r4, r4, #0x2
@@ -224,7 +224,7 @@ _020069FA:
add r1, r6, #0x0
add r2, r5, #0x0
blx r3
- blx FUN_020C8728
+ blx GXS_EndLoadOBJExtPltt
b _02006A24
_02006A14:
ldr r0, [sp, #0x8]
@@ -540,7 +540,7 @@ FUN_02006C5C: ; 0x02006C5C
add r5, r0, #0x0
beq _02006C82
add r1, r4, #0x0
- blx FUN_020AFD94
+ blx thunk_FUN_020afda0_2
cmp r0, #0x0
bne _02006C82
add r0, r5, #0x0
@@ -969,7 +969,7 @@ _02006F7E:
ldrsh r0, [r0, r1]
mov r1, #0x2
ldrsh r1, [r2, r1]
- blx FUN_020C8068
+ blx G3_RotX
ldrh r0, [r4, #0x3a]
asr r0, r0, #0x4
lsl r1, r0, #0x2
@@ -978,7 +978,7 @@ _02006F7E:
ldrsh r0, [r0, r1]
mov r1, #0x2
ldrsh r1, [r2, r1]
- blx FUN_020C802C
+ blx G3_RotY
ldrh r0, [r4, #0x3c]
asr r0, r0, #0x4
lsl r1, r0, #0x2
@@ -987,7 +987,7 @@ _02006F7E:
ldrsh r0, [r0, r1]
mov r1, #0x2
ldrsh r1, [r2, r1]
- blx FUN_020C7FF0
+ blx G3_RotZ
ldr r0, [r4, #0x28]
lsl r0, r0, #0xc
neg r1, r0
@@ -5035,10 +5035,10 @@ FUN_02008D44: ; 0x02008D44
beq _02008D98
b _02008DC4
_02008D5A:
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
cmp r0, #0x40
beq _02008D6A
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
cmp r0, #0x20
bne _02008D7A
_02008D6A:
@@ -5065,10 +5065,10 @@ _02008D8A:
bl FUN_0201D194
pop {r4, pc}
_02008D98:
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
cmp r0, #0x30
beq _02008DA8
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
cmp r0, #0x50
bne _02008DB6
_02008DA8:
@@ -5127,7 +5127,7 @@ FUN_02008DEC: ; 0x02008DEC
mov r1, #0x0
add r2, r7, #0x0
str r0, [r4, #0x4]
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
str r5, [r4, #0x8]
mov r0, #0x0
str r0, [r4, #0xc]
@@ -6286,7 +6286,7 @@ _0200969C:
mov r2, #0x18
add r1, r5, #0x4
mul r2, r3
- blx FUN_020DF438
+ blx memcpy
_020096B0:
pop {r4-r6, pc}
.balign 4
@@ -6608,7 +6608,7 @@ FUN_020098CC: ; 0x020098CC
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- blx FUN_020AFD94
+ blx thunk_FUN_020afda0_2
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -6638,7 +6638,7 @@ FUN_02009904: ; 0x02009904
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- blx FUN_020AFD88
+ blx thunk_FUN_020afda0
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -7757,7 +7757,7 @@ _0200A166:
ldrsh r2, [r5, r2]
ldr r0, _0200A198 ; =0x04000050
ldr r1, [r5, #0x0]
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
b _0200A18E
_0200A17C:
mov r0, #0x2
@@ -7767,7 +7767,7 @@ _0200A17C:
ldrsh r2, [r5, r2]
ldr r0, _0200A19C ; =0x04001050
ldr r1, [r5, #0x0]
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
_0200A18E:
cmp r4, #0x1
bne _0200A196
@@ -7850,7 +7850,7 @@ FUN_0200A208: ; 0x0200A208
beq _0200A23A
ldr r0, _0200A264 ; =0x04000050
add r1, r4, #0x0
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
str r4, [sp, #0x0]
mov r0, #0x1
str r0, [sp, #0x4]
@@ -7867,7 +7867,7 @@ _0200A23A:
ldr r0, _0200A26C ; =0x04001050
add r1, r4, #0x0
add r2, r6, #0x0
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
str r4, [sp, #0x0]
mov r0, #0x2
str r0, [sp, #0x4]
@@ -7896,7 +7896,7 @@ FUN_0200A274: ; 0x0200A274
beq _0200A28A
ldr r0, _0200A2A4 ; =0x04000050
add r2, r5, #0x0
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
_0200A28A:
mov r0, #0x2
tst r0, r4
@@ -7904,7 +7904,7 @@ _0200A28A:
ldr r0, _0200A2A8 ; =0x04001050
add r1, r6, #0x0
add r2, r5, #0x0
- blx FUN_020C74B8
+ blx G2x_SetBlendBrightness_
_0200A29A:
add r0, r4, #0x0
bl FUN_0200A2D8
@@ -11577,20 +11577,20 @@ FUN_0200BE74: ; 0x0200BE74
cmp r3, #0x0
ble _0200BEA0
lsl r0, r3, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200BEAE
_0200BEA0:
lsl r0, r3, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200BEAE:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x8]
add r1, sp, #0x28
mov r0, #0x10
@@ -11598,20 +11598,20 @@ _0200BEAE:
cmp r0, #0x0
ble _0200BED0
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200BEDE
_0200BED0:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200BEDE:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0xc]
add r1, sp, #0x28
mov r0, #0x14
@@ -11619,20 +11619,20 @@ _0200BEDE:
cmp r0, #0x0
ble _0200BF00
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200BF0E
_0200BF00:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200BF0E:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x10]
ldr r0, [sp, #0x4c]
cmp r0, #0x2
@@ -12069,60 +12069,60 @@ _0200C206:
cmp r0, #0x0
ble _0200C260
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200C26E
_0200C260:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200C26E:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x4c]
mov r0, #0x2
ldrsh r0, [r5, r0]
cmp r0, #0x0
ble _0200C28E
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200C29C
_0200C28E:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200C29C:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x50]
mov r0, #0x4
ldrsh r0, [r5, r0]
cmp r0, #0x0
ble _0200C2BC
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _0200C2CA
_0200C2BC:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_0200C2CA:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x54]
ldr r0, [r5, #0x10]
cmp r0, #0x2
@@ -12965,13 +12965,13 @@ FUN_0200C84C: ; 0x0200C84C
add r4, r0, #0x0
ldr r0, _0200C880 ; =0x45800000
add r1, r6, #0x0
- blx FUN_020EB5C4
- blx FUN_020EB4C0
+ blx _fmul
+ blx _ffix
str r0, [r4, #0x0]
ldr r0, _0200C880 ; =0x45800000
add r1, r7, #0x0
- blx FUN_020EB5C4
- blx FUN_020EB4C0
+ blx _fmul
+ blx _ffix
str r0, [r4, #0x4]
add r0, r5, #0x0
add r1, r4, #0x0
@@ -14203,27 +14203,27 @@ _0200D1E0:
add r0, r5, r6
add r1, r4, r1
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r0, r6, #0x0
ldr r1, [sp, #0x38]
add r0, #0x20
add r0, r5, r0
add r1, r4, r1
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r0, r6, #0x0
ldr r1, [sp, #0x34]
add r0, #0x40
add r0, r5, r0
add r1, r4, r1
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
ldr r1, [sp, #0x38]
add r6, #0x60
add r0, r5, r6
add r1, r4, r1
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r0, r7, #0x1
lsl r0, r0, #0x18
lsr r7, r0, #0x18
@@ -14292,7 +14292,7 @@ FUN_0200D274: ; 0x0200D274
ldr r1, [r1, #0x14]
lsl r2, r2, #0x6
add r4, r0, #0x0
- blx FUN_020DF438
+ blx memcpy
mov r0, #0x9
mov r3, #0x0
lsl r0, r0, #0x6
@@ -15015,7 +15015,7 @@ FUN_0200D858: ; 0x0200D858
add r0, r4, r0
add r1, r5, r1
mov r2, #0x80
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x28]
mov r1, #0x80
bl FUN_02016998
@@ -15026,7 +15026,7 @@ FUN_0200D858: ; 0x0200D858
str r1, [sp, #0x2c]
add r1, r5, r1
add r6, r0, #0x0
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x24]
mov r2, #0x20
add r0, #0xb
@@ -15034,18 +15034,18 @@ FUN_0200D858: ; 0x0200D858
add r0, r6, #0x0
add r0, #0x20
add r1, r5, r7
- blx FUN_020DF438
+ blx memcpy
ldr r1, [sp, #0x2c]
add r0, r6, #0x0
add r0, #0x40
add r1, r5, r1
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r0, r6, #0x0
add r0, #0x60
add r1, r5, r7
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
mov r5, #0x0
add r7, r4, #0x4
_0200D8DA:
@@ -15053,7 +15053,7 @@ _0200D8DA:
add r0, r7, r0
add r1, r6, #0x0
mov r2, #0x80
- blx FUN_020DF438
+ blx memcpy
add r0, r5, #0x1
lsl r0, r0, #0x18
lsr r5, r0, #0x18
@@ -15859,7 +15859,7 @@ FUN_0200DEF4: ; 0x0200DEF4
add r0, r4, #0x0
add r1, r7, #0x0
lsl r2, r2, #0x8
- blx FUN_020C92F4
+ blx GX_LoadOBJ
add r0, r4, #0x0
bl FUN_02016A18
ldr r2, _0200DFC8 ; =0x00000162
@@ -15884,7 +15884,7 @@ FUN_0200DEF4: ; 0x0200DEF4
add r0, r4, #0x0
add r1, r5, #0x0
mov r2, #0x20
- blx FUN_020C9480
+ blx GX_LoadOBJPltt
add r0, r4, #0x0
bl FUN_02016A18
add sp, #0x28
@@ -16385,12 +16385,12 @@ FUN_0200E3BC: ; 0x0200E3BC
bne _0200E3D2
mov r1, #0x0
mov r2, #0x2
- blx FUN_020C9550
+ blx GX_LoadBGPltt
b _0200E3DA
_0200E3D2:
mov r1, #0x0
mov r2, #0x2
- blx FUN_020C94E8
+ blx GXS_LoadBGPltt
_0200E3DA:
ldr r0, _0200E41C ; =0x021C4740
mov r1, #0x1
@@ -16430,11 +16430,11 @@ FUN_0200E420: ; 0x0200E420
add r0, sp, #0x8
mov r1, #0x0
mov r2, #0x2
- blx FUN_020C9550
+ blx GX_LoadBGPltt
add r0, sp, #0x8
mov r1, #0x0
mov r2, #0x2
- blx FUN_020C94E8
+ blx GXS_LoadBGPltt
pop {r3}
pop {r3}
add sp, #0x10
@@ -16446,11 +16446,11 @@ FUN_0200E440: ; 0x0200E440
cmp r0, #0x0
bne _0200E44E
ldr r0, _0200E458 ; =0x0400006C
- blx FUN_020C5978
+ blx GXx_SetMasterBrightness_
pop {r3, pc}
_0200E44E:
ldr r0, _0200E45C ; =0x0400106C
- blx FUN_020C5978
+ blx GXx_SetMasterBrightness_
pop {r3, pc}
nop
_0200E458: .word 0x0400006C
@@ -16994,12 +16994,12 @@ _0200E812:
add r0, #0x14
mov r1, #0x0
mov r2, #0x30
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
add r0, #0x44
mov r1, #0x0
mov r2, #0x30
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r2, r4, #0x0
add r2, #0x74
mov r1, #0x18
@@ -17013,7 +17013,7 @@ _0200E83A:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0xc0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
pop {r4, pc}
thumb_func_start FUN_0200E850
@@ -18095,13 +18095,13 @@ FUN_0200F0B4: ; 0x0200F0B4
ldr r2, _0200F0C8 ; =0x020FFA38
add r1, r1, #0x1
lsl r1, r1, #0x1
- ldr r3, _0200F0CC ; =FUN_020C50B8
+ ldr r3, _0200F0CC ; =FX_Div
ldrsh r0, [r2, r0]
ldrsh r1, [r2, r1]
bx r3
.balign 4
_0200F0C8: .word 0x020FFA38
-_0200F0CC: .word FUN_020C50B8
+_0200F0CC: .word FX_Div
thumb_func_start FUN_0200F0D0
FUN_0200F0D0: ; 0x0200F0D0
@@ -18178,7 +18178,7 @@ FUN_0200F14C: ; 0x0200F14C
add r0, r4, r0
asr r0, r0, #0x1
lsl r0, r0, #0xc
- blx FUN_020C50B8
+ blx FX_Div
pop {r4, pc}
thumb_func_start FUN_0200F164
@@ -18829,7 +18829,7 @@ _0200F60C:
bl FUN_0200F5D8
add r1, r0, r6
add r2, r7, #0x0
- blx FUN_020DF438
+ blx memcpy
ldr r0, [r5, #0x4]
add r4, r4, #0x1
cmp r4, r0
@@ -18952,7 +18952,7 @@ FUN_0200F6FC: ; 0x0200F6FC
lsl r2, r2, #0x2
add r5, r0, #0x0
add r7, r3, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
cmp r4, #0x1
bne _0200F726
mov r0, #0x6
@@ -19028,7 +19028,7 @@ _0200F78E:
add r0, #0xc0
add r1, r5, #0x0
add r2, r7, #0x0
- blx FUN_020DF438
+ blx memcpy
add r4, r4, #0x1
add r5, r5, r6
cmp r4, #0x2
@@ -20316,7 +20316,7 @@ _020100FA:
lsr r2, r2, #0xc
orr r2, r1
sub r0, r0, r2
- blx FUN_020C504C
+ blx FX_Sqrt
asr r2, r0, #0xc
ldr r0, [sp, #0x0]
sub r0, r0, r2
@@ -21261,7 +21261,7 @@ FUN_02010894: ; 0x02010894
lsl r2, r2, #0x8
add r0, r0, r2
mov r1, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r6, #0x10]
sub r4, r0, #0x1
bmi _020108C6
@@ -21363,7 +21363,7 @@ FUN_02010948: ; 0x02010948
str r0, [r5, #0x14]
mov r1, #0x0
mov r2, #0x38
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0x10]
add r1, r4, #0x0
str r0, [sp, #0x0]
@@ -21776,7 +21776,7 @@ FUN_02010C7C: ; 0x02010C7C
str r0, [r5, #0x14]
mov r1, #0x0
mov r2, #0x38
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0x10]
add r1, r4, #0x0
str r0, [sp, #0x0]
@@ -22121,7 +22121,7 @@ FUN_02010F2C: ; 0x02010F2C
str r0, [r5, #0x14]
mov r1, #0x0
lsl r2, r2, #0x2
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0x10]
add r1, r4, #0x0
str r0, [sp, #0x0]
@@ -22213,23 +22213,23 @@ FUN_02010FD0: ; 0x02010FD0
add r0, r5, #0x0
mov r1, #0x1
mov r2, #0xc0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
add r0, #0xc0
mov r1, #0x1
mov r2, #0xc0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
b _02011020
_0201100A:
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0xc0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
add r0, #0xc0
mov r1, #0x0
mov r2, #0xc0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
_02011020:
mov r1, #0xc3
lsl r1, r1, #0x2
@@ -22460,7 +22460,7 @@ FUN_020111AC: ; 0x020111AC
mov r1, #0x0
lsl r2, r2, #0x2
str r0, [r5, #0x14]
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r1, r4, #0x0
add r1, #0x23
ldrb r1, [r1, #0x0]
@@ -23257,7 +23257,7 @@ _020117A4:
str r1, [r0, #0x64]
ldr r0, [r0, #0x60]
mov r1, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [sp, #0x8]
add sp, #0xc
pop {r4-r7, pc}
@@ -23780,7 +23780,7 @@ _02011B60:
ldr r1, [r6, #0xc]
add r1, r1, r2
ldr r2, [sp, #0x8]
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x0]
add r4, r4, #0x1
add r5, r5, r7
@@ -24121,7 +24121,7 @@ _02011DC6:
add r0, r7, #0x0
add r1, r6, #0x0
add r2, r4, #0x0
- blx FUN_020C92F4
+ blx GX_LoadOBJ
mov r0, #0x1
str r6, [r5, #0x4]
lsl r0, r0, #0x1a
@@ -24132,7 +24132,7 @@ _02011E08:
add r0, r7, #0x0
add r1, r6, #0x0
add r2, r4, #0x0
- blx FUN_020C9294
+ blx GXS_LoadOBJ
ldr r0, _02011E4C ; =0x04001000
str r6, [r5, #0x8]
ldr r1, [r0, #0x0]
@@ -24423,7 +24423,7 @@ _02012018:
ldr r1, [sp, #0x0]
add r1, r1, r2
add r2, r6, #0x0
- blx FUN_020DF438
+ blx memcpy
ldr r1, [r5, #0x0]
ldr r0, [sp, #0x24]
add r7, r7, #0x1
@@ -24842,7 +24842,7 @@ _0201233C:
add r0, r0, r1
ldr r1, [sp, #0x18]
add r1, r1, r4
- blx FUN_020DF438
+ blx memcpy
ldr r0, [r5, #0x0]
add r6, r6, #0x1
add r0, #0x20
@@ -25156,7 +25156,7 @@ _02012598: .word 0x020ED3C8
thumb_func_start FUN_0201259C
FUN_0201259C: ; 0x0201259C
push {r3, lr}
- blx FUN_020D614C
+ blx RTC_Init
ldr r3, _020125CC ; =0x021C4808
mov r0, #0x0
add r2, r3, #0x0
@@ -25246,7 +25246,7 @@ FUN_02012634: ; 0x02012634
add r0, #0x2c
add r1, #0x3c
add r3, r4, #0x0
- blx FUN_020D5F40
+ blx RTC_GetDateTimeAsync
str r0, [r4, #0xc]
cmp r0, #0x0
beq _02012656
@@ -25345,12 +25345,12 @@ _020126F8: .word 0x021C4828
thumb_func_start FUN_020126FC
FUN_020126FC: ; 0x020126FC
- ldr r3, _02012704 ; =FUN_020D6578
+ ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond
ldr r0, _02012708 ; =0x021C4818
ldr r1, _0201270C ; =0x021C4828
bx r3
.balign 4
-_02012704: .word FUN_020D6578
+_02012704: .word RTC_ConvertDateTimeToSecond
_02012708: .word 0x021C4818
_0201270C: .word 0x021C4828
@@ -25401,9 +25401,9 @@ _02012752:
str r0, [sp, #0x4]
str r0, [sp, #0x8]
add r0, r2, #0x0
- blx FUN_020D660C
+ blx RTC_ConvertDateToDay
add r0, r5, #0x0
- blx FUN_020D660C
+ blx RTC_ConvertDateToDay
add r0, r4, #0x0
add sp, #0x10
pop {r4-r6, pc}
@@ -25477,7 +25477,7 @@ FUN_020127C0: ; 0x020127C0
ldr r1, [sp, #0x4]
str r0, [r2, #0x0]
ldr r0, [sp, #0x0]
- blx FUN_020D6578
+ blx RTC_ConvertDateTimeToSecond
add r2, r1, #0x0
add r3, r0, #0x0
mov r1, #0x0
@@ -25791,7 +25791,7 @@ FUN_02012A00: ; 0x02012A00
ldr r2, _02012A2C ; =0x0000079C
mov r1, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r2, #0x3
lsl r2, r2, #0x8
add r0, r5, #0x0
@@ -25897,7 +25897,7 @@ _02012ACE:
mov r2, #0x3
ldr r1, [r4, r1]
lsl r2, r2, #0x8
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
_02012AF4:
pop {r4, pc}
nop
@@ -26187,7 +26187,7 @@ _02012D14:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0xdc
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r2, r4, #0x0
ldr r0, [sp, #0x8]
str r7, [r4, #0x18]
@@ -26215,7 +26215,7 @@ _02012D14:
str r0, [r2, #0x0]
ldr r2, [sp, #0xc]
add r0, r6, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [sp, #0xc]
str r6, [r4, #0xc]
str r6, [r4, #0x10]
@@ -28859,7 +28859,7 @@ FUN_02013F30: ; 0x02013F30
add r4, r0, #0x0
mov r1, #0x0
mov r2, #0x40
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
mov r1, #0x1f
add r0, #0x3e
@@ -29220,7 +29220,7 @@ _02014172:
lsl r2, r2, #0x1
ldrsh r0, [r1, r0]
ldrsh r1, [r1, r2]
- blx FUN_020C7FF0
+ blx G3_RotZ
ldr r2, [r5, #0x10]
ldr r0, [r5, #0xc]
ldr r1, _02014210 ; =0x0400046C
@@ -29929,7 +29929,7 @@ FUN_020146F0: ; 0x020146F0
add r5, r0, #0x0
mov r1, #0x0
mov r2, #0x9c
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
add r0, #0x9b
ldrb r1, [r0, #0x0]
@@ -30306,7 +30306,7 @@ _020149B4:
add r0, r6, #0x0
mov r1, #0x0
mov r2, #0x38
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add sp, #0x10
pop {r4-r6, pc}
@@ -30499,7 +30499,7 @@ FUN_02014B10: ; 0x02014B10
ldr r1, [r4, #0xc]
ldr r0, [r0, #0xc]
ldr r2, [r4, #0x10]
- blx FUN_020C9550
+ blx GX_LoadBGPltt
b _02014B44
_02014B34:
cmp r0, #0x4
@@ -30508,7 +30508,7 @@ _02014B34:
ldr r1, [r4, #0xc]
ldr r0, [r0, #0xc]
ldr r2, [r4, #0x10]
- blx FUN_020C94E8
+ blx GXS_LoadBGPltt
_02014B44:
add r0, r5, #0x0
bl FUN_0200CAB4
@@ -33301,7 +33301,7 @@ FUN_02015F80: ; 0x02015F80
mov r0, #0x2
blx OS_DisableIrqMask
mov r0, #0x0
- blx FUN_020C5AF8
+ blx GX_HBlankIntr
b _02015FB4
_02015F9E:
ldr r0, [r2, #0x8]
@@ -33311,7 +33311,7 @@ _02015F9E:
mov r0, #0x2
blx OS_EnableIrqMask
mov r0, #0x1
- blx FUN_020C5AF8
+ blx GX_HBlankIntr
_02015FB4:
ldr r1, _02015FC0 ; =0x04000208
ldrh r0, [r1, #0x0]
@@ -33331,7 +33331,7 @@ FUN_02015FC8: ; 0x02015FC8
add r0, sp, #0x0
add r1, sp, #0x10
mov r2, #0x20
- blx FUN_020DDCE4
+ blx MATH_CalcMD5
mov r3, #0x0
add r1, r3, #0x0
add r2, sp, #0x0
@@ -33367,7 +33367,7 @@ _02016010: .word 0x020EDB10
InitSystemForTheGame: ; 0x02016014
push {r3-r5, lr}
blx OS_Init
- blx FUN_020C5974
+ blx FX_Init
ldr r2, _02016124 ; =0x04000304
ldr r0, _02016128 ; =0xFFFFFDF1
ldrh r1, [r2, #0x0]
@@ -33375,7 +33375,7 @@ InitSystemForTheGame: ; 0x02016014
ldr r0, _0201612C ; =0x0000020E
orr r0, r1
strh r0, [r2, #0x0]
- blx FUN_020C5B28
+ blx GX_Init
blx OS_InitTick
bl FUN_02015FC8
mov r0, #0xa0
@@ -33422,7 +33422,7 @@ InitSystemForTheGame: ; 0x02016014
bl FUN_0201B580
ldr r1, _02016130 ; =0x021C48B8
str r0, [r1, #0x24]
- blx FUN_020C5A80
+ blx GX_DispOff
ldr r2, _02016134 ; =0x04001000
ldr r0, _02016138 ; =0xFFFEFFFF
ldr r1, [r2, #0x0]
@@ -33445,7 +33445,7 @@ InitSystemForTheGame: ; 0x02016014
ldrh r0, [r1, #0x0]
mov r0, #0x1
strh r0, [r1, #0x0]
- blx FUN_020C5AC8
+ blx GX_VBlankIntr
mov r0, #0x1
blx FS_Init
bl FUN_02022450
@@ -33489,14 +33489,14 @@ _02016144: .word 0x021C4918
InitGraphicMemory: ; 0x02016148
push {r3, lr}
ldr r0, _02016198 ; =0x000001FF
- blx FUN_020C63A8
+ blx GX_SetBankForLCDC
mov r1, #0x1a
mov r2, #0x29
mov r0, #0x0
lsl r1, r1, #0x16
lsl r2, r2, #0xe
blx MIi_CpuClearFast
- blx FUN_020C5E54
+ blx GX_DisableBankForLCDC
mov r1, #0x7
mov r2, #0x1
mov r0, #0xc0
@@ -33601,7 +33601,7 @@ FUN_02016230: ; 0x02016230
push {r3-r7, lr}
sub sp, #0x8
str r0, [sp, #0x0]
- blx FUN_020E2EAC
+ blx strlen
lsl r0, r0, #0x10
lsr r3, r0, #0x10
lsr r2, r3, #0x1f
@@ -33749,12 +33749,12 @@ FUN_02016324: ; 0x02016324
add r0, sp, #0x0
bne _02016340
add r1, r2, #0x1
- blx FUN_020E2EC8
+ blx strcpy
mov r5, #0x1
b _02016346
_02016340:
add r1, r2, #0x0
- blx FUN_020E2EC8
+ blx strcpy
_02016346:
add r0, sp, #0x0
bl FUN_02016230
@@ -34325,7 +34325,7 @@ _02016772:
beq _0201678E
ldr r1, [r5, #0x0]
mov r2, #0x0
- blx FUN_020ADFE8
+ blx tempName_NNS_FndCreateExpHeapEx
ldr r1, _020167F0 ; =0x021C4D28
ldr r2, [r1, #0x0]
ldr r1, [sp, #0x0]
@@ -34463,7 +34463,7 @@ _0201684C:
ldr r1, [sp, #0x0]
add r0, r6, #0x0
add r2, r7, #0x0
- blx FUN_020ADFA0
+ blx tempName_NNS_FndAllocFromExpHeapEx
str r0, [sp, #0x4]
cmp r0, #0x0
beq _020168B6
@@ -34474,7 +34474,7 @@ _0201684C:
ldr r1, [sp, #0x0]
mov r2, #0x0
lsl r4, r7, #0x2
- blx FUN_020ADFE8
+ blx tempName_NNS_FndCreateExpHeapEx
ldr r1, _020168CC ; =0x021C4D28
ldr r2, [r1, #0x0]
str r0, [r2, r4]
@@ -34530,7 +34530,7 @@ _020168E0:
ldr r0, [r1, r0]
cmp r0, #0x0
beq _0201693E
- blx FUN_020ADFDC
+ blx thunk_FUN_020adc8c
ldr r1, _02016940 ; =0x021C4D28
ldr r0, [r1, #0x10]
ldrb r0, [r0, r4]
@@ -34590,7 +34590,7 @@ _02016956:
add r0, r5, #0x0
add r1, r4, #0x0
add r2, r7, #0x0
- blx FUN_020ADFA0
+ blx tempName_NNS_FndAllocFromExpHeapEx
add r4, r0, #0x0
ldr r0, [sp, #0x0]
blx OS_RestoreInterrupts
@@ -34896,7 +34896,7 @@ FUN_02016B94: ; 0x02016B94
mov r1, #0x0
lsl r2, r2, #0x2
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
str r5, [r4, #0x0]
mov r0, #0x0
strh r0, [r4, #0x4]
@@ -34916,9 +34916,9 @@ FUN_02016BBC: ; 0x02016BBC
ldr r0, [r4, #0x0]
ldr r1, [r4, #0x4]
ldr r2, [r4, #0xc]
- blx FUN_020C59C0
+ blx GX_SetGraphicsMode
ldr r0, [r4, #0x8]
- blx FUN_020C59A4
+ blx GXS_SetGraphicsMode
mov r2, #0x1
lsl r2, r2, #0x1a
ldr r1, [r2, #0x0]
@@ -34944,12 +34944,12 @@ FUN_02016BF4: ; 0x02016BF4
ldr r0, [r2, #0x0]
ldr r1, [r2, #0x4]
ldr r2, [r2, #0xc]
- blx FUN_020C59C0
+ blx GX_SetGraphicsMode
bl FUN_0201E6D8
pop {r3, pc}
_02016C0C:
ldr r0, [r2, #0x8]
- blx FUN_020C59A4
+ blx GXS_SetGraphicsMode
bl FUN_0201E740
pop {r3, pc}
@@ -37134,7 +37134,7 @@ _02017BFC:
ldr r0, [r4, #0x18]
str r0, [sp, #0x4]
ldr r0, _02017C5C ; =0x04000020
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
add sp, #0x8
pop {r3-r5, pc}
_02017C14:
@@ -37146,7 +37146,7 @@ _02017C14:
ldr r0, [r4, #0x18]
str r0, [sp, #0x4]
ldr r0, _02017C60 ; =0x04000030
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
add sp, #0x8
pop {r3-r5, pc}
_02017C2C:
@@ -37158,7 +37158,7 @@ _02017C2C:
ldr r0, [r4, #0x18]
str r0, [sp, #0x4]
ldr r0, _02017C64 ; =0x04001020
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
add sp, #0x8
pop {r3-r5, pc}
_02017C44:
@@ -37170,7 +37170,7 @@ _02017C44:
ldr r0, [r4, #0x18]
str r0, [sp, #0x4]
ldr r0, _02017C68 ; =0x04001030
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
_02017C58:
add sp, #0x8
pop {r3-r5, pc}
@@ -37340,49 +37340,49 @@ _02017D9A:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C922C
+ blx GX_LoadBG0Scr
pop {r3-r7, pc}
_02017DA6:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C915C
+ blx GX_LoadBG1Scr
pop {r3-r7, pc}
_02017DB2:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C908C
+ blx GX_LoadBG2Scr
pop {r3-r7, pc}
_02017DBE:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8FBC
+ blx GX_LoadBG3Scr
pop {r3-r7, pc}
_02017DCA:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C91C4
+ blx GXS_LoadBG0Scr
pop {r3-r7, pc}
_02017DD6:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C90F4
+ blx GXS_LoadBG1Scr
pop {r3-r7, pc}
_02017DE2:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C9024
+ blx GXS_LoadBG2Scr
pop {r3-r7, pc}
_02017DEE:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8F54
+ blx GXS_LoadBG3Scr
_02017DF8:
pop {r3-r7, pc}
.balign 4
@@ -37489,49 +37489,49 @@ _02017EB6:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8EEC
+ blx GX_LoadBG0Char
pop {r3-r7, pc}
_02017EC2:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8E1C
+ blx GX_LoadBG1Char
pop {r3-r7, pc}
_02017ECE:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8D4C
+ blx GX_LoadBG2Char
pop {r3-r7, pc}
_02017EDA:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8C7C
+ blx GX_LoadBG3Char
pop {r3-r7, pc}
_02017EE6:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8E84
+ blx GXS_LoadBG0Char
pop {r3-r7, pc}
_02017EF2:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8DB4
+ blx GXS_LoadBG1Char
pop {r3-r7, pc}
_02017EFE:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8CE4
+ blx GXS_LoadBG2Char
pop {r3-r7, pc}
_02017F0A:
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r6, #0x0
- blx FUN_020C8C14
+ blx GXS_LoadBG3Char
_02017F14:
pop {r3-r7, pc}
.balign 4
@@ -37548,7 +37548,7 @@ FUN_02017F18: ; 0x02017F18
add r4, r0, #0x0
mov r1, #0x0
add r2, r5, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r6, #0x0
add r1, r4, #0x0
add r2, r7, #0x0
@@ -37629,13 +37629,13 @@ FUN_02017FB4: ; 0x02017FB4
add r0, r5, #0x0
add r1, r7, #0x0
add r2, r4, #0x0
- blx FUN_020C9550
+ blx GX_LoadBGPltt
pop {r3-r7, pc}
_02017FD6:
add r0, r5, #0x0
add r1, r7, #0x0
add r2, r4, #0x0
- blx FUN_020C94E8
+ blx GXS_LoadBGPltt
pop {r3-r7, pc}
.balign 4
@@ -38736,28 +38736,28 @@ _020187C2: ; jump table (using 16-bit offset)
.short _020187F6 - _020187C2 - 2; case 6
.short _020187FC - _020187C2 - 2; case 7
_020187D2:
- blx FUN_020C7124
+ blx G2_GetBG0CharPtr
pop {r3, pc}
_020187D8:
- blx FUN_020C70D0
+ blx G2_GetBG1CharPtr
pop {r3, pc}
_020187DE:
- blx FUN_020C7058
+ blx G2_GetBG2CharPtr
pop {r3, pc}
_020187E4:
- blx FUN_020C6FB0
+ blx G2_GetBG3CharPtr
pop {r3, pc}
_020187EA:
- blx FUN_020C7104
+ blx G2S_GetBG0CharPtr
pop {r3, pc}
_020187F0:
- blx FUN_020C70B0
+ blx G2S_GetBG1CharPtr
pop {r3, pc}
_020187F6:
- blx FUN_020C7010
+ blx G2S_GetBG2CharPtr
pop {r3, pc}
_020187FC:
- blx FUN_020C6F60
+ blx G2S_GetBG3CharPtr
pop {r3, pc}
_02018802:
mov r0, #0x0
@@ -40023,7 +40023,7 @@ FUN_020190EC: ; 0x020190EC
lsl r1, r1, #0x18
ldr r2, [sp, #0x4]
lsr r1, r1, #0x18
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
cmp r7, #0x0
beq _02019148
str r5, [r4, #0x0]
@@ -43889,7 +43889,7 @@ _0201ACEA:
ldr r2, [r2, #0x0]
ldr r3, [r3, #0x0]
add r1, sp, #0x38
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
_0201AD1E:
ldrh r1, [r4, #0x4]
mov r0, #0x8
@@ -43945,7 +43945,7 @@ _0201AD4E:
ldr r2, [r2, #0x0]
ldr r3, [r3, #0x0]
add r1, sp, #0x28
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
_0201AD8E:
ldrh r1, [r4, #0x4]
mov r0, #0x10
@@ -44035,7 +44035,7 @@ _0201AE04:
ldr r2, [r4, r2]
ldr r3, [r4, r3]
add r1, sp, #0x18
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
_0201AE3E:
ldrh r0, [r4, #0x4]
mov r3, #0x80
@@ -44090,7 +44090,7 @@ _0201AE72:
ldr r2, [r4, r2]
ldr r3, [r4, r3]
add r1, sp, #0x8
- blx FUN_020C74F8
+ blx G2x_SetBGyAffine_
_0201AEAC:
add sp, #0x48
pop {r4, pc}
@@ -44364,7 +44364,7 @@ _0201B096:
ldr r1, [sp, #0x18]
add r1, r1, r2
mov r2, #0x40
- blx FUN_020DF438
+ blx memcpy
ldrh r1, [r4, r6]
add r0, r7, #0x0
asr r2, r1, #0xa
@@ -44454,7 +44454,7 @@ _0201B142:
add r0, r7, #0x0
add r1, r4, #0x0
mov r2, #0x40
- blx FUN_020DF438
+ blx memcpy
_0201B166:
ldr r0, [sp, #0x0]
mov r1, #0x2
@@ -44484,7 +44484,7 @@ _0201B17E:
add r0, r7, #0x0
add r1, r4, #0x0
mov r2, #0x40
- blx FUN_020DF438
+ blx memcpy
_0201B19E:
add r0, r4, #0x0
bl FUN_02016A18
@@ -44712,13 +44712,13 @@ FUN_0201B314: ; 0x0201B314
add r1, r0, #0x0
add r2, r0, #0x0
add r3, r0, #0x0
- blx FUN_020C7C28
+ blx G3X_SetFog
mov r0, #0x0
ldr r2, _0201B38C ; =0x00007FFF
add r1, r0, #0x0
mov r3, #0x3f
str r0, [sp, #0x0]
- blx FUN_020C7B3C
+ blx G3X_SetClearColor
ldr r1, _0201B390 ; =0xBFFF0000
ldr r0, _0201B394 ; =0x04000580
str r1, [r0, #0x0]
@@ -45401,7 +45401,7 @@ FUN_0201B82C: ; 0x0201B82C
add r4, sp, #0x8
_0201B86A:
add r0, r4, #0x0
- blx FUN_020C7A14
+ blx G3X_GetBoxTestResult
cmp r0, #0x0
bne _0201B86A
ldr r0, [sp, #0x8]
@@ -45928,7 +45928,7 @@ FUN_0201BBD0: ; 0x0201BBD0
str r0, [sp, #0x34]
add r0, sp, #0x2c
add r1, sp, #0x14
- blx FUN_020C5288
+ blx VEC_Normalize
mov r1, #0x0
ldr r0, [sp, #0x0]
str r1, [sp, #0x34]
@@ -45940,10 +45940,10 @@ FUN_0201BBD0: ; 0x0201BBD0
str r5, [sp, #0x2c]
str r4, [sp, #0x30]
str r6, [sp, #0x24]
- blx FUN_020C5600
+ blx VEC_Subtract
add r0, sp, #0x14
add r1, sp, #0x8
- blx FUN_020C5588
+ blx VEC_DotProduct
asr r0, r0, #0xc
bpl _0201BC72
neg r0, r0
@@ -47550,10 +47550,10 @@ FUN_0201C7B0: ; 0x0201C7B0
sub sp, #0x30
add r4, r1, #0x0
add r1, sp, #0x24
- blx FUN_020C5288
+ blx VEC_Normalize
add r0, r4, #0x0
add r1, sp, #0x18
- blx FUN_020C5288
+ blx VEC_Normalize
ldr r0, [sp, #0x24]
ldr r4, [sp, #0x18]
str r0, [sp, #0x0]
@@ -47636,7 +47636,7 @@ _0201C862:
pop {r3-r7, pc}
_0201C86A:
add r1, r5, #0x0
- blx FUN_020C5668
+ blx FX_Modf
add sp, #0x30
pop {r3-r7, pc}
.balign 4
@@ -47934,7 +47934,7 @@ FUN_0201CAA8: ; 0x0201CAA8
ldrsh r1, [r3, r1]
ldrsh r2, [r3, r2]
add r5, r0, #0x0
- bl FUN_020C3F38
+ bl MTX_RotX33_
ldr r0, [r4, #0x4]
ldr r3, _0201CB1C ; =0x020FFA38
lsl r0, r0, #0x10
@@ -47947,11 +47947,11 @@ FUN_0201CAA8: ; 0x0201CAA8
ldrsh r1, [r3, r1]
ldrsh r2, [r3, r2]
add r0, sp, #0x0
- bl FUN_020C3F54
+ bl MTX_RotY33_
add r0, r5, #0x0
add r1, sp, #0x0
add r2, r5, #0x0
- blx FUN_020C400C
+ blx MTX_Concat33
ldr r0, [r4, #0x8]
ldr r3, _0201CB1C ; =0x020FFA38
lsl r0, r0, #0x10
@@ -47964,11 +47964,11 @@ FUN_0201CAA8: ; 0x0201CAA8
ldrsh r1, [r3, r1]
ldrsh r2, [r3, r2]
add r0, sp, #0x0
- bl FUN_020C3F70
+ bl MTX_RotZ33_
add r0, r5, #0x0
add r1, sp, #0x0
add r2, r5, #0x0
- blx FUN_020C400C
+ blx MTX_Concat33
add sp, #0x24
pop {r4-r5, pc}
nop
@@ -47988,7 +47988,7 @@ FUN_0201CB20: ; 0x0201CB20
ldr r1, [r2, r1]
ldr r2, [r2, r3]
add r7, r0, #0x0
- bl FUN_020C3F38
+ bl MTX_RotX33_
lsl r1, r5, #0x2
ldr r3, _0201CB78 ; =0x020EDF50
add r5, #0x5a
@@ -47996,11 +47996,11 @@ FUN_0201CB20: ; 0x0201CB20
ldr r1, [r3, r1]
ldr r2, [r3, r2]
add r0, sp, #0x0
- bl FUN_020C3F54
+ bl MTX_RotY33_
add r0, r7, #0x0
add r1, sp, #0x0
add r2, r7, #0x0
- blx FUN_020C400C
+ blx MTX_Concat33
lsl r1, r4, #0x2
ldr r3, _0201CB78 ; =0x020EDF50
add r4, #0x5a
@@ -48008,11 +48008,11 @@ FUN_0201CB20: ; 0x0201CB20
ldr r1, [r3, r1]
ldr r2, [r3, r2]
add r0, sp, #0x0
- bl FUN_020C3F70
+ bl MTX_RotZ33_
add r0, r7, #0x0
add r1, sp, #0x0
add r2, r7, #0x0
- blx FUN_020C400C
+ blx MTX_Concat33
add sp, #0x24
pop {r4-r7, pc}
.balign 4
@@ -48033,7 +48033,7 @@ FUN_0201CB7C: ; 0x0201CB7C
ldrsh r1, [r1, r2]
add r5, r3, #0x0
ldr r4, [sp, #0x18]
- blx FUN_020C50B8
+ blx FX_Div
add r2, r0, #0x0
asr r1, r6, #0x1f
add r0, r6, #0x0
@@ -48085,7 +48085,7 @@ FUN_0201CBEC: ; 0x0201CBEC
mul r0, r2
add r0, r1, r0
lsl r0, r0, #0xc
- blx FUN_020C504C
+ blx FX_Sqrt
asr r0, r0, #0xc
pop {r3, pc}
.balign 4
@@ -50123,7 +50123,7 @@ _0201DAE4: .word 0x021C5994
thumb_func_start FUN_0201DAE8
FUN_0201DAE8: ; 0x0201DAE8
push {r3, lr}
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
cmp r0, #0x30
bgt _0201DB18
bge _0201DB60
@@ -50224,7 +50224,7 @@ _0201DB90:
ldr r0, [r0, #0x0]
str r1, [r0, #0x14]
_0201DB98:
- blx FUN_020C5D4C
+ blx GX_GetBankForSubOBJ
cmp r0, #0x0
beq _0201DBAE
cmp r0, #0x8
@@ -50427,7 +50427,7 @@ FUN_0201DD00: ; 0x0201DD00
add r0, r4, #0x0
mov r1, #0x0
lsr r2, r2, #0x3
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
_0201DD16:
pop {r4, pc}
@@ -51269,7 +51269,7 @@ FUN_0201E2F8: ; 0x0201E2F8
mov r1, #0x0
mov r2, #0x30
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x0
mvn r0, r0
str r0, [r4, #0xc]
@@ -51463,7 +51463,7 @@ _0201E460: .word 0x021C5998
thumb_func_start FUN_0201E464
FUN_0201E464: ; 0x0201E464
push {r3, lr}
- blx FUN_020C5D9C
+ blx GX_GetBankForOBJExtPltt
cmp r0, #0x20
beq _0201E472
cmp r0, #0x40
@@ -51481,7 +51481,7 @@ _0201E47E:
ldr r0, [r0, #0x0]
str r1, [r0, #0x1c]
_0201E486:
- blx FUN_020C5D2C
+ blx GX_GetBankForSubOBJExtPltt
mov r1, #0x1
lsl r1, r1, #0x8
cmp r0, r1
@@ -51767,36 +51767,36 @@ _0201E666:
FUN_0201E66C: ; 0x0201E66C
push {r4, lr}
add r4, r0, #0x0
- blx FUN_020C611C
- blx FUN_020C60E4
- blx FUN_020C6070
+ blx GX_ResetBankForBG
+ blx GX_ResetBankForBGExtPltt
+ blx GX_ResetBankForSubBG
blx FUN_020C6034
- blx FUN_020C6108
- blx FUN_020C60C0
+ blx GX_ResetBankForOBJ
+ blx GX_ResetBankForOBJExtPltt
blx FUN_020C605C
- blx FUN_020C600C
- blx FUN_020C60AC
- blx FUN_020C6098
+ blx GX_ResetBankForSubOBJ
+ blx GX_ResetBankForTex
+ blx GX_ResetBankForTexPltt
ldr r0, [r4, #0x0]
- blx FUN_020C6BF0
+ blx GX_SetBankForBG
ldr r0, [r4, #0x4]
- blx FUN_020C6970
+ blx GX_SetBankForBGExtPltt
ldr r0, [r4, #0x8]
- blx FUN_020C62FC
+ blx GX_SetBankForSubBG
ldr r0, [r4, #0xc]
- blx FUN_020C61F4
+ blx GX_SetBankForSubBGExtPltt
ldr r0, [r4, #0x10]
- blx FUN_020C6A84
+ blx GX_SetBankForOBJ
ldr r0, [r4, #0x14]
- blx FUN_020C68B8
+ blx GX_SetBankForOBJExtPltt
ldr r0, [r4, #0x18]
- blx FUN_020C6280
+ blx GX_SetBankForSubOBJ
ldr r0, [r4, #0x1c]
- blx FUN_020C6168
+ blx GX_SetBankForSubOBJExtPltt
ldr r0, [r4, #0x20]
- blx FUN_020C66B4
+ blx GX_SetBankForTex
ldr r0, [r4, #0x24]
- blx FUN_020C65C0
+ blx GX_SetBankForTexPltt
pop {r4, pc}
.balign 4
@@ -51906,7 +51906,7 @@ _0201E784: .word 0xFFFFE0FF
thumb_func_start FUN_0201E788
FUN_0201E788: ; 0x0201E788
push {r3, lr}
- blx FUN_020C5A34
+ blx GX_DispOn
ldr r2, _0201E79C ; =0x04001000
mov r0, #0x1
ldr r1, [r2, #0x0]
@@ -52051,7 +52051,7 @@ FUN_0201E7D8: ; 0x0201E7D8
add r5, #0x20
add r1, r5, #0x0
add r2, r0, #0x0
- blx FUN_020C5634
+ blx VEC_Add
pop {r3-r5, pc}
nop
_0201E8B4: .word 0x020FFA38
@@ -52162,7 +52162,7 @@ FUN_0201E8B8: ; 0x0201E8B8
add r5, #0x14
add r1, r5, #0x0
add r2, r0, #0x0
- blx FUN_020C5634
+ blx VEC_Add
pop {r3-r5, pc}
.balign 4
_0201E998: .word 0x020FFA38
@@ -52477,7 +52477,7 @@ FUN_0201EBA4: ; 0x0201EBA4
beq _0201EBEE
add r1, #0x48
add r2, sp, #0x10
- blx FUN_020C5600
+ blx VEC_Subtract
ldr r0, _0201EC40 ; =0x021C59A4
add r1, sp, #0x10
ldr r0, [r0, #0x0]
@@ -52531,7 +52531,7 @@ _0201EBEE:
str r0, [sp, #0x0]
add r0, r4, #0x0
mov r3, #0x0
- blx FUN_020C80A4
+ blx G3i_LookAt_
ldr r1, _0201EC54 ; =0x021CED98
mov r0, #0xe8
ldr r2, [r1, #0x7c]
@@ -52719,9 +52719,9 @@ FUN_0201ED5C: ; 0x0201ED5C
str r0, [r2, #0x0]
add r0, r6, #0x0
add r2, sp, #0x30
- blx FUN_020C5600
+ blx VEC_Subtract
add r0, sp, #0x30
- blx FUN_020C53C8
+ blx VEC_Mag
str r0, [r4, #0x38]
mov r6, #0x0
add r0, sp, #0x24
@@ -52813,7 +52813,7 @@ FUN_0201EE2C: ; 0x0201EE2C
ldr r1, [r5, #0x4]
ldr r2, [r5, #0x8]
ldr r3, [r5, #0xc]
- blx FUN_020C8538
+ blx G3i_PerspectiveW_
ldr r1, _0201EEE8 ; =0x021CED98
mov r0, #0x50
ldr r2, [r1, #0x7c]
@@ -52830,7 +52830,7 @@ _0201EE6C:
ldr r4, [r5, #0x38]
ldr r0, [r5, #0x0]
ldr r1, [r5, #0x4]
- blx FUN_020C50B8
+ blx FX_Div
asr r1, r0, #0x1f
asr r3, r4, #0x1f
add r2, r4, #0x0
@@ -52868,7 +52868,7 @@ _0201EE6C:
neg r2, r3
str r0, [sp, #0x10]
add r0, r4, #0x0
- blx FUN_020C823C
+ blx G3i_OrthoW_
ldr r1, _0201EEE8 ; =0x021CED98
mov r0, #0x50
ldr r2, [r1, #0x7c]
@@ -52962,12 +52962,12 @@ FUN_0201EF70: ; 0x0201EF70
add r0, #0x14
add r1, r5, #0x0
add r2, r0, #0x0
- blx FUN_020C5634
+ blx VEC_Add
add r4, #0x20
add r0, r4, #0x0
add r1, r5, #0x0
add r2, r4, #0x0
- blx FUN_020C5634
+ blx VEC_Add
pop {r3-r5, pc}
thumb_func_start FUN_0201EF90
@@ -53489,7 +53489,7 @@ FUN_0201F318: ; 0x0201F318
bl ErrorHandling
_0201F324:
add r0, sp, #0x0
- blx FUN_020C3F14
+ blx MTX_Identity33_
add r0, r5, #0x0
add r0, #0xbc
ldr r4, [r0, #0x0]
@@ -54907,7 +54907,7 @@ _0201FD0C:
ldr r0, [r4, r1]
add r1, r1, #0x4
add r1, r4, r1
- blx FUN_020AFD94
+ blx thunk_FUN_020afda0_2
mov r0, #0x12
mov r1, #0x1
lsl r0, r0, #0x4
@@ -55078,7 +55078,7 @@ FUN_0201FE6C: ; 0x0201FE6C
mov r1, #0x0
lsl r2, r2, #0x2
str r1, [r4, #0x3c]
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
add r0, #0xb4
blx FUN_020B1A24
@@ -55887,7 +55887,7 @@ FUN_020203CC: ; 0x020203CC
add r0, r4, #0x0
mov r1, #0x0
lsl r2, r2, #0xa
- blx FUN_020C93BC
+ blx GX_LoadOAM
add r0, r4, #0x0
bl FUN_02016A18
pop {r4, pc}
@@ -55909,7 +55909,7 @@ FUN_02020404: ; 0x02020404
add r0, r4, #0x0
mov r1, #0x0
lsl r2, r2, #0xa
- blx FUN_020C9354
+ blx GXS_LoadOAM
add r0, r4, #0x0
bl FUN_02016A18
pop {r4, pc}
@@ -56194,7 +56194,7 @@ FUN_02020618: ; 0x02020618
ldr r0, [r5, r0]
add r1, #0xb4
add r2, #0xd8
- blx FUN_020B2780
+ blx thunk_FUN_020b5040
mov r0, #0x45
lsl r0, r0, #0x2
ldr r0, [r5, r0]
@@ -58016,7 +58016,7 @@ FUN_02021310: ; 0x02021310
add r1, r6, #0x0
add r2, r5, #0x0
add r4, r0, #0x0
- blx FUN_020DF438
+ blx memcpy
add r0, r4, #0x0
pop {r4-r6, pc}
.balign 4
@@ -59038,7 +59038,7 @@ _02021AA2:
add r0, #0x8
add r1, #0x8
lsl r2, r2, #0x1
- blx FUN_020DF438
+ blx memcpy
ldrh r0, [r4, #0x2]
strh r0, [r5, #0x2]
pop {r3-r5, pc}
@@ -59589,7 +59589,7 @@ _02021EA8:
add r0, #0x8
add r1, r7, #0x0
add r2, r6, #0x0
- blx FUN_020DF438
+ blx memcpy
mov r2, #0x0
cmp r4, #0x0
bls _02021ED4
@@ -59643,7 +59643,7 @@ _02021F0C:
add r0, r6, #0x0
add r1, r5, #0x0
lsl r2, r2, #0x1
- blx FUN_020DF438
+ blx memcpy
pop {r4-r6, pc}
_02021F22:
bl ErrorHandling
@@ -59710,7 +59710,7 @@ _02021F7A:
add r2, r2, #0x1
add r1, #0x8
lsl r2, r2, #0x1
- blx FUN_020DF438
+ blx memcpy
ldrh r1, [r5, #0x2]
ldrh r0, [r4, #0x2]
add r0, r1, r0
@@ -60152,10 +60152,10 @@ _020222A8: .word 0x021C59BC
thumb_func_start FUN_020222AC
FUN_020222AC: ; 0x020222AC
- ldr r3, _020222B0 ; =FUN_020C7E0C
+ ldr r3, _020222B0 ; =G3X_ResetMtxStack
bx r3
.balign 4
-_020222B0: .word FUN_020C7E0C
+_020222B0: .word G3X_ResetMtxStack
thumb_func_start FUN_020222B4
FUN_020222B4: ; 0x020222B4
@@ -60243,7 +60243,7 @@ FUN_02022318: ; 0x02022318
add r4, r0, #0x0
str r6, [r4, #0x0]
blx FUN_020BB7F4
- blx FUN_020C7D28
+ blx G3X_InitMtxStack
mov r1, #0x2
ldr r0, _020223B8 ; =0x04000540
cmp r7, #0x0
@@ -60359,13 +60359,13 @@ FUN_020223D4: ; 0x020223D4
add r1, r0, #0x0
add r2, r0, #0x0
add r3, r0, #0x0
- blx FUN_020C7C28
+ blx G3X_SetFog
mov r0, #0x0
ldr r2, _02022444 ; =0x00007FFF
add r1, r0, #0x0
mov r3, #0x3f
str r0, [sp, #0x0]
- blx FUN_020C7B3C
+ blx G3X_SetClearColor
ldr r1, _02022448 ; =0xBFFF0000
ldr r0, _0202244C ; =0x04000580
str r1, [r0, #0x0]
@@ -60534,7 +60534,7 @@ FUN_0202254C: ; 0x0202254C
add r0, r4, #0x0
ldr r1, _020225E8 ; =0x00001021
add r0, #0x14
- blx FUN_020DDF60
+ blx MATHi_CRC16InitTable
ldr r0, _020225EC ; =0x00020224
add r0, r4, r0
bl FUN_020230E4
@@ -60967,12 +60967,12 @@ FUN_0202288C: ; 0x0202288C
thumb_func_start FUN_02022898
FUN_02022898: ; 0x02022898
- ldr r3, _020228A0 ; =FUN_020DDD60
+ ldr r3, _020228A0 ; =MATH_CalcCRC16CCITT
add r0, #0x14
sub r2, #0x14
bx r3
.balign 4
-_020228A0: .word FUN_020DDD60
+_020228A0: .word MATH_CalcCRC16CCITT
thumb_func_start FUN_020228A4
FUN_020228A4: ; 0x020228A4
@@ -61984,14 +61984,14 @@ _02023006:
add r0, r0, #0x4
cmp r3, #0x2
blt _02023006
- blx FUN_020D6DAC
+ blx CARD_TryWaitBackupAsync
cmp r0, #0x0
bne _02023034
- blx FUN_020D6D7C
+ blx CARD_CancelBackupAsync
ldr r0, [r4, #0x10]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66A0
+ blx CARD_UnlockBackup
ldr r0, [r4, #0x10]
lsl r0, r0, #0x10
lsr r0, r0, #0x10
@@ -62290,7 +62290,7 @@ FUN_02023248: ; 0x02023248
add r3, #0xe
strh r2, [r4, #0xc]
add r2, r3, #0x0
- blx FUN_020DDD60
+ blx MATH_CalcCRC16CCITT
strh r0, [r4, #0xe]
pop {r3-r5, pc}
nop
@@ -62323,7 +62323,7 @@ _02023298:
add r3, #0xe
add r0, #0x14
add r2, r3, #0x0
- blx FUN_020DDD60
+ blx MATH_CalcCRC16CCITT
ldrh r1, [r4, #0xe]
cmp r1, r0
bne _020232AC
@@ -62680,16 +62680,16 @@ FUN_02023570: ; 0x02023570
_02023584:
lsl r0, r4, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66B0
+ blx CARD_LockBackup
ldr r0, _020235C8 ; =0x00001302
- blx FUN_020D6DC4
+ blx CARD_IdentifyBackup
cmp r0, #0x0
beq _0202359A
ldr r5, _020235C8 ; =0x00001302
b _020235AA
_0202359A:
ldr r0, _020235CC ; =0x00001202
- blx FUN_020D6DC4
+ blx CARD_IdentifyBackup
cmp r0, #0x0
beq _020235A8
ldr r5, _020235CC ; =0x00001202
@@ -62699,7 +62699,7 @@ _020235A8:
_020235AA:
lsl r0, r4, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66A0
+ blx CARD_UnlockBackup
lsl r0, r4, #0x10
lsr r0, r0, #0x10
blx OS_ReleaseLockID
@@ -62747,7 +62747,7 @@ FUN_020235EC: ; 0x020235EC
_02023608:
lsl r0, r4, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66B0
+ blx CARD_LockBackup
mov r3, #0x0
str r3, [sp, #0x0]
mov r1, #0x1
@@ -62759,12 +62759,12 @@ _02023608:
add r1, r6, #0x0
add r2, r7, #0x0
str r3, [sp, #0x10]
- blx FUN_020D6F20
- blx FUN_020D6DB8
+ blx CARDi_RequestStreamCommand
+ blx CARD_WaitBackupAsync
add r5, r0, #0x0
lsl r0, r4, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66A0
+ blx CARD_UnlockBackup
lsl r0, r4, #0x10
lsr r0, r0, #0x10
blx OS_ReleaseLockID
@@ -62808,7 +62808,7 @@ FUN_02023668: ; 0x02023668
_02023684:
lsl r0, r4, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66B0
+ blx CARD_LockBackup
mov r0, #0x0
str r0, [sp, #0x0]
str r0, [sp, #0x4]
@@ -62820,7 +62820,7 @@ _02023684:
mov r2, #0x4
add r3, r0, #0x0
str r0, [sp, #0x10]
- blx FUN_020D6F20
+ blx CARDi_RequestStreamCommand
cmp r0, #0x0
bne _020236B2
add r0, r4, #0x0
@@ -62843,7 +62843,7 @@ _020236B2:
add r0, r6, #0x0
add r1, r5, #0x0
add r2, r7, #0x0
- blx FUN_020D6F20
+ blx CARDi_RequestStreamCommand
add r0, r4, #0x0
add sp, #0x18
pop {r3-r7, pc}
@@ -62862,11 +62862,11 @@ FUN_020236E4: ; 0x020236E4
bne _02023738
lsl r0, r5, #0x10
lsr r0, r0, #0x10
- blx FUN_020D66A0
+ blx CARD_UnlockBackup
lsl r0, r5, #0x10
lsr r0, r0, #0x10
blx OS_ReleaseLockID
- blx FUN_020D6700
+ blx CARD_GetResultCode
cmp r0, #0x0
beq _02023714
cmp r0, #0x4
@@ -62907,7 +62907,7 @@ FUN_02023740: ; 0x02023740
lsl r0, r5, #0x10
lsr r0, r0, #0x10
add r4, r1, #0x0
- blx FUN_020D66A0
+ blx CARD_UnlockBackup
lsl r0, r5, #0x10
lsr r0, r0, #0x10
blx OS_ReleaseLockID
@@ -63072,12 +63072,12 @@ FUN_02023840: ; 0x02023840
add r1, #0x14
bl FUN_0201265C
add r0, r4, #0x4
- blx FUN_020D660C
+ blx RTC_ConvertDateToDay
add r1, r4, #0x0
str r0, [r4, #0x20]
add r0, r4, #0x4
add r1, #0x14
- blx FUN_020D6578
+ blx RTC_ConvertDateTimeToSecond
str r0, [r4, #0x24]
str r1, [r4, #0x28]
mov r0, #0x0
@@ -63132,7 +63132,7 @@ FUN_020238A4: ; 0x020238A4
add r1, #0x14
bl FUN_0201265C
add r0, r4, #0x4
- blx FUN_020D660C
+ blx RTC_ConvertDateToDay
str r0, [r4, #0x20]
pop {r4, pc}
.balign 4
@@ -63224,7 +63224,7 @@ FUN_02023948: ; 0x02023948
mov r1, #0x0
mov r2, #0x20
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x2
strb r0, [r4, #0x19]
pop {r4, pc}
@@ -63517,12 +63517,12 @@ _02023AD4: .word MI_CpuCopy8
thumb_func_start FUN_02023AD8
FUN_02023AD8: ; 0x02023AD8
- ldr r3, _02023AE0 ; =FUN_020DF4A4
+ ldr r3, _02023AE0 ; =Call_FillMemWithValue
mov r1, #0x0
mov r2, #0x20
bx r3
.balign 4
-_02023AE0: .word FUN_020DF4A4
+_02023AE0: .word Call_FillMemWithValue
thumb_func_start FUN_02023AE4
FUN_02023AE4: ; 0x02023AE4
@@ -63738,7 +63738,7 @@ FUN_02023C48: ; 0x02023C48
add r4, r0, #0x0
mov r1, #0x0
lsl r2, r2, #0x4
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
bl FUN_020669A0
add r0, r4, #0x0
@@ -64792,7 +64792,7 @@ FUN_02024378: ; 0x02024378
mov r1, #0x0
lsl r2, r2, #0x2
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, _020243C0 ; =0xBEEFCAFE
mov r1, #0x0
str r0, [r4, #0x0]
@@ -64802,7 +64802,7 @@ FUN_02024378: ; 0x02024378
sub r0, #0x2d
add r0, r4, r0
mov r1, #0xff
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r1, #0xff
add r0, r1, #0x0
add r0, #0x9
@@ -67248,7 +67248,7 @@ _020254D6:
add r0, r5, #0x0
add r1, r7, #0x0
mov r2, #0x88
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
strh r6, [r5, #0x0]
add r4, r4, #0x1
add r5, #0x88
@@ -67414,7 +67414,7 @@ _020255F8:
ldr r0, [sp, #0x0]
ldr r1, [sp, #0x10]
lsl r2, r2, #0x6
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x10]
bl FUN_02016A18
add sp, #0x2c
@@ -71169,7 +71169,7 @@ _02026F6A:
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x74
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
str r6, [r5, #0x0]
add r4, r4, #0x1
add r5, #0x74
@@ -71183,7 +71183,7 @@ _02026F86:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x98
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r1, _02026FC8 ; =0x00001234
ldr r0, _02026FCC ; =0x000004FC
add r6, r6, #0x1
@@ -71196,7 +71196,7 @@ _02026F86:
mov r1, #0x0
add r0, r7, r0
mov r2, #0x40
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r5, _02026FD4 ; =0x0000081C
mov r4, #0x0
mov r6, #0x12
@@ -71241,7 +71241,7 @@ FUN_02026FE8: ; 0x02026FE8
mov r1, #0x0
mov r2, #0x98
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, _02027004 ; =0x00001234
str r0, [r4, #0x0]
add r0, r4, #0x0
@@ -71708,7 +71708,7 @@ _02027330:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x74
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, _02027340 ; =0x00001234
str r0, [r4, #0x0]
pop {r4, pc}
@@ -71938,7 +71938,7 @@ _020274DA:
add r0, r5, #0x0
add r1, r4, #0x0
mov r2, #0x74
- blx FUN_020DF438
+ blx memcpy
pop {r3-r5, pc}
nop
_020274E8: .word 0x00001234
@@ -72316,7 +72316,7 @@ _02027760:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x98
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, _02027770 ; =0x00001234
str r0, [r4, #0x0]
pop {r4, pc}
@@ -72540,7 +72540,7 @@ _020278FE:
add r0, r5, #0x0
add r1, r4, #0x0
mov r2, #0x98
- blx FUN_020DF438
+ blx memcpy
pop {r3-r5, pc}
nop
_0202790C: .word 0x00001234
@@ -73145,11 +73145,11 @@ FUN_02027D0C: ; 0x02027D0C
bne _02027D6A
ldr r1, _02027D78 ; =0xEDB88320
add r0, sp, #0x4
- blx FUN_020DDE44
+ blx MATHi_CRC32InitTableRev
add r0, sp, #0x4
add r1, r4, #0x0
mov r2, #0x74
- blx FUN_020DDD28
+ blx MATH_CalcCRC32
add r6, r0, #0x0
mov r5, #0x0
_02027D3C:
@@ -73159,11 +73159,11 @@ _02027D3C:
add r4, r0, #0x0
ldr r1, _02027D78 ; =0xEDB88320
add r0, sp, #0x4
- blx FUN_020DDE44
+ blx MATHi_CRC32InitTableRev
add r0, sp, #0x4
add r1, r4, #0x0
mov r2, #0x74
- blx FUN_020DDD28
+ blx MATH_CalcCRC32
cmp r0, r6
bne _02027D62
mov r0, #0x0
@@ -74971,22 +74971,22 @@ FUN_02028980: ; 0x02028980
thumb_func_start FUN_02028988
FUN_02028988: ; 0x02028988
- ldr r3, _02028990 ; =FUN_020DF4A4
+ ldr r3, _02028990 ; =Call_FillMemWithValue
mov r1, #0x0
mov r2, #0x70
bx r3
.balign 4
-_02028990: .word FUN_020DF4A4
+_02028990: .word Call_FillMemWithValue
thumb_func_start FUN_02028994
FUN_02028994: ; 0x02028994
- ldr r3, _020289A0 ; =FUN_020DF4A4
+ ldr r3, _020289A0 ; =Call_FillMemWithValue
mov r2, #0x46
mov r1, #0x0
lsl r2, r2, #0x4
bx r3
nop
-_020289A0: .word FUN_020DF4A4
+_020289A0: .word Call_FillMemWithValue
thumb_func_start FUN_020289A4
FUN_020289A4: ; 0x020289A4
@@ -75445,12 +75445,12 @@ _02028CC0:
add r0, #0x1c
add r1, #0x46
mov r2, #0x2a
- blx FUN_020DF438
+ blx memcpy
add r4, #0x46
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x2a
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r4, pc}
.balign 4
@@ -76317,7 +76317,7 @@ FUN_020292BC: ; 0x020292BC
mov r1, #0x0
mov r2, #0x3a
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r4, pc}
.balign 4
@@ -76866,7 +76866,7 @@ _020296B4:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x3a
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldrb r0, [r6, #0x1c]
cmp r0, #0x10
bhi _02029722
@@ -77396,7 +77396,7 @@ FUN_02029A8C: ; 0x02029A8C
add r4, r0, #0x0
mov r1, #0x0
lsl r2, r2, #0x4
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
bl FUN_02029ACC
add r5, r0, #0x0
@@ -79601,7 +79601,7 @@ FUN_0202A92C: ; 0x0202A92C
add r4, r0, #0x0
mov r1, #0x0
lsl r2, r2, #0x2
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
bl FUN_0201BA60
str r0, [r4, #0x0]
bl FUN_0201BA60
@@ -83178,7 +83178,7 @@ FUN_0202C1C8: ; 0x0202C1C8
ldr r1, _0202C1F0 ; =0x021C59D8
ldr r0, _0202C1F4 ; =FUN_0202C1F8
ldr r1, [r1, #0x4]
- blx FUN_020D9624
+ blx WM_SetParentParameter
cmp r0, #0x2
beq _0202C1EC
bl FUN_0202C1AC
@@ -83225,7 +83225,7 @@ FUN_0202C21C: ; 0x0202C21C
mov r0, #0x1
pop {r4, pc}
_0202C230:
- blx FUN_020D7E9C
+ blx WMi_GetStatusAddress
add r4, r0, #0x0
mov r0, #0x66
lsl r0, r0, #0x2
@@ -83240,7 +83240,7 @@ _0202C230:
mov r1, #0x4
blx DC_FlushRange
ldr r0, _0202C280 ; =FUN_0202C288
- blx FUN_020D9554
+ blx WM_StartParent
cmp r0, #0x2
beq _0202C264
bl FUN_0202C1AC
@@ -83334,13 +83334,13 @@ _0202C2DA:
ldr r0, _0202C38C ; =0x02105D54
add r1, #0x15
mov r2, #0x3
- blx FUN_020DF510
+ blx memcmp
cmp r0, #0x0
beq _0202C330
_0202C318:
ldrh r1, [r5, #0x10]
mov r0, #0x0
- blx FUN_020D9060
+ blx WM_Disconnect
cmp r0, #0x2
beq _0202C378
bl FUN_0202C1AC
@@ -83429,7 +83429,7 @@ _0202C3AC:
ldr r0, _0202C400 ; =FUN_0202C404
lsr r2, r2, #0x10
add r3, r4, r3
- blx FUN_020D9B48
+ blx WM_StartMP
cmp r0, #0x2
beq _0202C3E8
bl FUN_0202C1AC
@@ -83502,7 +83502,7 @@ FUN_0202C460: ; 0x0202C460
mov r0, #0x3
bl FUN_0202C198
ldr r0, _0202C480 ; =FUN_0202C484
- blx FUN_020D9960
+ blx WM_EndMP
cmp r0, #0x2
beq _0202C47A
bl FUN_0202C1AC
@@ -83535,7 +83535,7 @@ _0202C4A2:
FUN_0202C4A4: ; 0x0202C4A4
push {r3, lr}
ldr r0, _0202C4BC ; =FUN_0202C4C0
- blx FUN_020D950C
+ blx WM_EndParent
cmp r0, #0x2
beq _0202C4B8
bl FUN_0202C1AC
@@ -83691,7 +83691,7 @@ _0202C5D4: .word 0x021C59D8
thumb_func_start FUN_0202C5D8
FUN_0202C5D8: ; 0x0202C5D8
push {r3-r7, lr}
- blx FUN_020D8C3C
+ blx WM_GetAllowedChannel
add r5, r0, #0x0
mov r0, #0x2
lsl r0, r0, #0xe
@@ -83751,7 +83751,7 @@ _0202C64C:
sub r0, #0x28
strh r2, [r3, r0]
_0202C650:
- blx FUN_020D8A4C
+ blx WM_GetDispersionScanPeriod
ldr r2, _0202C684 ; =0x021C59D8
ldr r1, _0202C690 ; =0x000012E6
ldr r3, [r2, #0x4]
@@ -83766,7 +83766,7 @@ _0202C650:
sub r1, r1, #0x6
ldr r0, _0202C694 ; =FUN_0202C698
add r1, r2, r1
- blx FUN_020D940C
+ blx WM_StartScan
cmp r0, #0x2
beq _0202C680
bl FUN_0202C1AC
@@ -83910,7 +83910,7 @@ _0202C790: .word 0x00001310
FUN_0202C794: ; 0x0202C794
push {r3, lr}
ldr r0, _0202C7AC ; =FUN_0202C7B0
- blx FUN_020D9244
+ blx WM_EndScan
cmp r0, #0x2
beq _0202C7A8
bl FUN_0202C1AC
@@ -83984,7 +83984,7 @@ _0202C800:
mov r3, #0x1
add r1, r2, r1
add r2, sp, #0x4
- blx FUN_020D9168
+ blx WM_StartConnectEx
cmp r0, #0x2
beq _0202C83E
bl FUN_0202C1AC
@@ -84109,7 +84109,7 @@ FUN_0202C908: ; 0x0202C908
ldr r0, _0202C954 ; =FUN_0202C958
lsr r2, r2, #0x10
add r3, r4, r3
- blx FUN_020D9B48
+ blx WM_StartMP
cmp r0, #0x2
beq _0202C942
bl FUN_0202C1AC
@@ -84185,7 +84185,7 @@ FUN_0202C9BC: ; 0x0202C9BC
mov r0, #0x3
bl FUN_0202C198
ldr r0, _0202C9DC ; =FUN_0202C9E0
- blx FUN_020D9960
+ blx WM_EndMP
cmp r0, #0x2
beq _0202C9D6
bl FUN_0202C1AC
@@ -84223,7 +84223,7 @@ FUN_0202CA04: ; 0x0202CA04
bl FUN_0202C198
ldr r0, _0202CA28 ; =FUN_0202CA2C
mov r1, #0x0
- blx FUN_020D9060
+ blx WM_Disconnect
cmp r0, #0x2
beq _0202CA24
bl FUN_0202C1AC
@@ -84256,7 +84256,7 @@ FUN_0202CA44: ; 0x0202CA44
mov r0, #0x3
bl FUN_0202C198
ldr r0, _0202CA64 ; =FUN_0202CA68
- blx FUN_020D9774
+ blx WM_Reset
cmp r0, #0x2
beq _0202CA5E
bl FUN_0202C1AC
@@ -84312,7 +84312,7 @@ FUN_0202CA88: ; 0x0202CA88
ldr r0, _0202CADC ; =FUN_0202CAE0
add r2, r5, #0x0
add r3, r6, #0x0
- blx FUN_020D99EC
+ blx WM_SetMPDataToPortEx
cmp r0, #0x2
bne _0202CACA
add sp, #0xc
@@ -84566,7 +84566,7 @@ _0202CC94: .word 0x00003039
FUN_0202CC98: ; 0x0202CC98
push {r4, lr}
add r4, r0, #0x0
- blx FUN_020D8C3C
+ blx WM_GetAllowedChannel
mov r1, #0x2
lsl r1, r1, #0xe
cmp r0, r1
@@ -84693,7 +84693,7 @@ FUN_0202CD90: ; 0x0202CD90
str r1, [sp, #0x0]
mov r1, #0x3
mov r2, #0x11
- blx FUN_020DADD4
+ blx WM_MeasureChannel
pop {r3, pc}
.balign 4
@@ -84900,7 +84900,7 @@ FUN_0202CF0C: ; 0x0202CF0C
ldr r0, [r0, #0x4]
mov r2, #0x2
add r0, #0x40
- blx FUN_020D97B4
+ blx WM_Initialize
cmp r0, #0x2
beq _0202CF34
bl FUN_0202C1AC
@@ -84929,7 +84929,7 @@ FUN_0202CF40: ; 0x0202CF40
pop {r3, pc}
_0202CF5A:
ldr r0, _0202CF80 ; =FUN_0202CEF4
- blx FUN_020D9014
+ blx WM_SetIndCallback
cmp r0, #0x0
beq _0202CF76
bl FUN_0202C1AC
@@ -85102,7 +85102,7 @@ FUN_0202D0A0: ; 0x0202D0A0
ldr r1, _0202D0CC ; =FUN_0202CB08
lsr r0, r0, #0x10
mov r2, #0x0
- blx FUN_020D8F34
+ blx WM_SetPortCallback
cmp r0, #0x0
beq _0202D0C2
mov r0, #0x9
@@ -85210,7 +85210,7 @@ FUN_0202D178: ; 0x0202D178
mov r0, #0x3
bl FUN_0202C198
ldr r0, _0202D198 ; =FUN_0202CB50
- blx FUN_020D972C
+ blx WM_End
cmp r0, #0x2
beq _0202D194
mov r0, #0x9
@@ -85344,7 +85344,7 @@ FUN_0202D240: ; 0x0202D240
add r1, r6, #0x0
lsr r2, r2, #0x10
add r3, r4, #0x0
- blx FUN_020DAF30
+ blx WM_SetGameInfo
_0202D26E:
add sp, #0x8
pop {r4-r6, pc}
@@ -85383,7 +85383,7 @@ FUN_0202D298: ; 0x0202D298
cmp r0, #0x4
bne _0202D2BE
ldr r0, _0202D2CC ; =FUN_0202D27C
- blx FUN_020DAD74
+ blx WM_SetEntry
cmp r0, #0x2
bne _0202D2BE
mov r0, #0x1
@@ -89240,7 +89240,7 @@ _0202EEE4: .word 0x0000FFFF
FUN_0202EEE8: ; 0x0202EEE8
push {r3-r5, lr}
add r5, r0, #0x0
- blx FUN_020D8AF0
+ blx WM_GetDispersionBeaconPeriod
add r4, r0, #0x0
cmp r5, #0x1a
blo _0202EEFA
@@ -95249,7 +95249,7 @@ _02031D04:
bl FUN_0202EDF8
cmp r0, #0x0
beq _02031D18
- blx FUN_020D8B94
+ blx WM_GetLinkLevel
mov r1, #0x3
sub r0, r1, r0
bl FUN_02033EEC
@@ -98748,9 +98748,9 @@ FUN_0203380C: ; 0x0203380C
bne _0203382A
ldr r1, _0203382C ; =0x4144414A
add r0, r4, #0x0
- blx FUN_02096FF4
+ blx thunk_FUN_02097190
add r0, r4, #0x0
- blx FUN_02096E90
+ blx thunk_FUN_02096e4c
_0203382A:
pop {r4, pc}
.balign 4
@@ -99234,7 +99234,7 @@ _02033C06:
ldr r0, _02033CB4 ; =0x00300010
add r7, r1, #0x0
and r7, r0
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
b _02033C2C
_02033C1E:
ldr r0, _02033CB8 ; =0x04001000
@@ -99242,7 +99242,7 @@ _02033C1E:
ldr r0, _02033CB4 ; =0x00300010
add r7, r1, #0x0
and r7, r0
- blx FUN_020C5D4C
+ blx GX_GetBankForSubOBJ
_02033C2C:
cmp r7, #0x10
beq _02033C38
@@ -99423,14 +99423,14 @@ FUN_02033D3C: ; 0x02033D3C
add r1, r4, #0x0
ldr r0, [r0, #0xc]
mov r2, #0x20
- blx FUN_020C9480
+ blx GX_LoadOBJPltt
b _02033D8C
_02033D80:
ldr r0, [sp, #0x0]
add r1, r4, #0x0
ldr r0, [r0, #0xc]
mov r2, #0x20
- blx FUN_020C9418
+ blx GXS_LoadOBJPltt
_02033D8C:
ldr r0, [sp, #0x4]
bl FUN_02016A18
@@ -99478,7 +99478,7 @@ _02033DC8:
ldr r0, _02033E64 ; =0x00300010
add r4, r1, #0x0
and r4, r0
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
b _02033E00
_02033DF0:
mov r0, #0x1
@@ -99487,7 +99487,7 @@ _02033DF0:
ldr r0, _02033E64 ; =0x00300010
add r4, r1, #0x0
and r4, r0
- blx FUN_020C5DBC
+ blx GX_GetBankForOBJ
_02033E00:
cmp r4, #0x10
beq _02033E0C
@@ -99529,14 +99529,14 @@ _02033E34:
mov r2, #0x2
ldr r0, [r0, #0x14]
lsl r2, r2, #0x8
- blx FUN_020C92F4
+ blx GX_LoadOBJ
b _02033E52
_02033E46:
ldr r0, [sp, #0x0]
mov r2, #0x2
ldr r0, [r0, #0x14]
lsl r2, r2, #0x8
- blx FUN_020C9294
+ blx GXS_LoadOBJ
_02033E52:
ldr r0, [sp, #0x4]
bl FUN_02016A18
@@ -101482,7 +101482,7 @@ FUN_02034CB4: ; 0x02034CB4
mov r1, #0x0
lsl r2, r2, #0x2
add r5, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
bl FUN_020347D8
cmp r0, #0x0
@@ -101614,7 +101614,7 @@ FUN_02034D98: ; 0x02034D98
add r4, r0, #0x0
mov r1, #0x0
mov r2, #0xa0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
add r0, #0x6c
bl FUN_0204ADE0
@@ -103792,7 +103792,7 @@ FUN_02035E50: ; 0x02035E50
ldr r1, [r4, r1]
mov r2, #0x40
add r6, r0, #0x0
- blx FUN_020DF438
+ blx memcpy
mov r0, #0x7e
lsl r0, r0, #0x2
ldr r0, [r4, r0]
@@ -104326,7 +104326,7 @@ FUN_020362E4: ; 0x020362E4
add r2, r0, #0x0
ldr r0, [sp, #0x8]
ldr r1, [r4, r1]
- blx FUN_020DF438
+ blx memcpy
mov r0, #0x7e
lsl r0, r0, #0x2
ldr r0, [r4, r0]
@@ -104390,7 +104390,7 @@ _0203638A:
mov r1, #0x0
mov r2, #0x40
add r5, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r6, #0xc]
bl FUN_0206BB1C
str r0, [r5, #0x0]
@@ -104490,7 +104490,7 @@ _02036474:
mov r1, #0x0
mov r2, #0x40
add r5, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [sp, #0x4]
str r0, [r5, #0x0]
ldr r0, [r6, #0xc]
@@ -104964,7 +104964,7 @@ FUN_0203684C: ; 0x0203684C
ldr r1, [r4, r1]
mov r2, #0x30
add r7, r0, #0x0
- blx FUN_020DF438
+ blx memcpy
mov r0, #0x7e
lsl r0, r0, #0x2
ldr r0, [r4, r0]
@@ -104982,7 +104982,7 @@ FUN_0203684C: ; 0x0203684C
str r1, [sp, #0x0]
mov r1, #0x0
add r5, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r6, #0xc]
bl FUN_0206BB1C
str r0, [r5, #0x0]
@@ -105511,7 +105511,7 @@ FUN_02036CEC: ; 0x02036CEC
mov r1, #0x0
mov r2, #0x40
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0xc]
bl FUN_0206BB1C
str r0, [r4, #0x0]
@@ -107569,7 +107569,7 @@ FUN_02037CF0: ; 0x02037CF0
mov r1, #0x0
mov r2, #0x30
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0xc]
bl FUN_0206BB1C
str r0, [r4, #0x0]
@@ -107970,7 +107970,7 @@ FUN_0203800C: ; 0x0203800C
mov r1, #0x0
mov r2, #0x20
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
bl FUN_0206BB1C
add r1, r7, #0x0
@@ -109131,7 +109131,7 @@ _02038956:
bl FUN_020127C0
mov r2, #0x3c
mov r3, #0x0
- blx FUN_020EBA38
+ blx _ll_sdiv
add r3, r0, #0x0
ldr r1, [sp, #0x8]
ldr r2, [r5, #0x0]
diff --git a/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s
index 5b3a52bf..785e5b48 100644
--- a/asm/unk_02038C78.s
+++ b/arm9/asm/unk_02038C78.s
@@ -224,7 +224,7 @@ _02038E32:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0xdc
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, _02038E44 ; =0x0003643F
str r0, [r4, #0x0]
add r0, r4, #0x0
@@ -1187,7 +1187,7 @@ FUN_02039564: ; 0x02039564
bl FUN_02046380
mov r1, #0x0
mov r2, #0x40
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
pop {r4, pc}
.balign 4
@@ -1540,14 +1540,14 @@ _020397EC:
sub r1, r0, r1
mov r0, #0x7
sub r0, r0, r1
- blx FUN_020DE3F0
+ blx abs
strh r0, [r5, #0x0]
ldr r1, [r4, #0x8]
ldr r0, [sp, #0x14]
sub r1, r0, r1
mov r0, #0x7
sub r0, r0, r1
- blx FUN_020DE3F0
+ blx abs
strh r0, [r5, #0x2]
add r5, r5, #0x6
add r6, r6, #0x1
diff --git a/asm/unk_02046030.s b/arm9/asm/unk_02046030.s
index dfeeba8a..30b8ee4c 100644
--- a/asm/unk_02046030.s
+++ b/arm9/asm/unk_02046030.s
@@ -298,13 +298,13 @@ FUN_02046294: ; 0x02046294
thumb_func_start FUN_0204629C
FUN_0204629C: ; 0x0204629C
- ldr r3, _020462A8 ; =FUN_020DF4A4
+ ldr r3, _020462A8 ; =Call_FillMemWithValue
mov r2, #0xeb
mov r1, #0x0
lsl r2, r2, #0x2
bx r3
nop
-_020462A8: .word FUN_020DF4A4
+_020462A8: .word Call_FillMemWithValue
thumb_func_start FUN_020462AC
FUN_020462AC: ; 0x020462AC
@@ -4191,7 +4191,7 @@ _0204817A:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x24
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x0
str r0, [r4, #0x0]
str r5, [r4, #0x4]
@@ -10279,7 +10279,7 @@ FUN_0204B130: ; 0x0204B130
add r6, r0, #0x0
add r5, r1, #0x0
add r0, r2, #0x0
- blx FUN_020D660C
+ blx RTC_ConvertDateToDay
ldr r1, [r5, #0x20]
add r4, r0, #0x0
cmp r4, r1
@@ -10306,13 +10306,13 @@ FUN_0204B158: ; 0x0204B158
add r5, r1, #0x0
add r0, r4, #0x0
add r1, r6, #0x0
- blx FUN_020D6578
+ blx RTC_ConvertDateTimeToSecond
str r1, [sp, #0x8]
add r1, r5, #0x0
add r7, r0, #0x0
add r0, r5, #0x4
add r1, #0x14
- blx FUN_020D6578
+ blx RTC_ConvertDateTimeToSecond
add r2, r1, #0x0
sub r1, r7, r0
ldr r1, [sp, #0x8]
@@ -10337,7 +10337,7 @@ _0204B19C:
mov r2, #0x3c
mov r3, #0x0
str r1, [sp, #0x8]
- blx FUN_020EBA38
+ blx _ll_sdiv
add r7, r0, #0x0
cmp r7, #0x0
ble _0204B1D8
@@ -10505,7 +10505,7 @@ FUN_0204B2F0: ; 0x0204B2F0
ldr r3, [r3, #0x28]
add r0, r5, #0x0
add r1, r4, #0x0
- blx FUN_020D6320
+ blx RTC_ConvertSecondToDateTime
pop {r3-r5, pc}
thumb_func_start FUN_0204B30C
@@ -10520,7 +10520,7 @@ FUN_0204B30C: ; 0x0204B30C
ldr r3, [r3, #0x30]
add r0, r5, #0x0
add r1, r4, #0x0
- blx FUN_020D6320
+ blx RTC_ConvertSecondToDateTime
pop {r3-r5, pc}
thumb_func_start FUN_0204B328
@@ -10700,7 +10700,7 @@ FUN_0204B450: ; 0x0204B450
ldr r0, [r3, #0x0]
str r0, [r2, #0x0]
add r0, sp, #0x0
- blx FUN_020C3F14
+ blx MTX_Identity33_
ldr r0, [r5, #0x4]
add r1, r4, #0x0
ldr r0, [r0, #0x18]
@@ -16246,10 +16246,10 @@ _0204DE98:
b _0204DEEC
_0204DEC2:
ldr r0, [sp, #0x10]
- blx FUN_020DE3F0
+ blx abs
add r6, r0, #0x0
add r0, r7, #0x0
- blx FUN_020DE3F0
+ blx abs
cmp r6, r0
ble _0204DEE2
ldr r0, [sp, #0x10]
@@ -16269,9 +16269,9 @@ _0204DEEA:
mov r6, #0x80
_0204DEEC:
add r0, r7, #0x0
- blx FUN_020DE3F0
+ blx abs
ldr r0, [sp, #0x10]
- blx FUN_020DE3F0
+ blx abs
ldrb r3, [r5, #0x5]
add r0, r4, #0x0
add r1, r6, #0x0
@@ -31177,40 +31177,40 @@ FUN_02054F50: ; 0x02054F50
cmp r0, #0x0
beq _02054F8A
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _02054F98
_02054F8A:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_02054F98:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [r4, #0x4]
add r0, sp, #0x8
ldrh r0, [r0, #0x14]
cmp r0, #0x0
beq _02054FB8
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _02054FC6
_02054FB8:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_02054FC6:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [r4, #0x8]
strh r6, [r4, #0xc]
strh r7, [r4, #0x10]
@@ -31430,7 +31430,7 @@ _0205518E:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x3c
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r4, pc}
@@ -36030,7 +36030,7 @@ _0205745A:
add r0, r5, #0x0
mov r1, #0x0
lsl r2, r2, #0x2
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x4a
lsl r0, r0, #0x2
add r6, r4, #0x0
@@ -36045,7 +36045,7 @@ _0205747E:
add r0, r4, #0x0
mov r1, #0x0
add r2, r6, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
add r1, r4, #0x0
bl FUN_020583B4
@@ -36489,7 +36489,7 @@ _02057846:
add r0, r5, #0x0
mov r1, #0x0
mul r2, r4
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
_02057856:
add sp, #0x8
pop {r3-r7, pc}
@@ -36889,7 +36889,7 @@ _02057BD4:
ldr r2, [sp, #0x4]
add r0, r6, #0x0
add r1, r4, #0x0
- blx FUN_020DF438
+ blx memcpy
mov r0, #0xb
mov r1, #0x14
bl FUN_020169D8
@@ -37306,13 +37306,13 @@ _02057F7C: .word 0x021F9080
thumb_func_start FUN_02057F80
FUN_02057F80: ; 0x02057F80
- ldr r3, _02057F8C ; =FUN_020DF4A4
+ ldr r3, _02057F8C ; =Call_FillMemWithValue
mov r2, #0x4a
mov r1, #0x0
lsl r2, r2, #0x2
bx r3
nop
-_02057F8C: .word FUN_020DF4A4
+_02057F8C: .word Call_FillMemWithValue
thumb_func_start FUN_02057F90
FUN_02057F90: ; 0x02057F90
@@ -38313,7 +38313,7 @@ _0205859A:
mov r1, #0x0
add r2, r5, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -38337,7 +38337,7 @@ _020585C2:
mov r1, #0x0
add r2, r5, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -38361,7 +38361,7 @@ _020585EA:
mov r1, #0x0
add r2, r5, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -38385,7 +38385,7 @@ _02058612:
mov r1, #0x0
add r2, r5, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -47960,7 +47960,7 @@ _0205CA9A:
add r0, r4, #0x0
mov r1, #0x0
mov r2, #0x2c
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [sp, #0x0]
str r7, [r4, #0x8]
str r0, [r4, #0xc]
@@ -48724,7 +48724,7 @@ FUN_0205D024: ; 0x0205D024
mov r1, #0x0
mov r2, #0x40
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0xc]
bl FUN_0206BB1C
str r0, [r4, #0x0]
@@ -49207,7 +49207,7 @@ FUN_0205D400: ; 0x0205D400
mov r1, #0x0
mov r2, #0x40
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0xc]
bl FUN_0206BB1C
str r0, [r4, #0x0]
@@ -49574,7 +49574,7 @@ FUN_0205D6BC: ; 0x0205D6BC
ldr r2, [sp, #0x0]
mov r1, #0x0
add r7, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x72
ldr r1, _0205D710 ; =0x021F57F1
lsl r0, r0, #0x2
@@ -49938,7 +49938,7 @@ FUN_0205D9A8: ; 0x0205D9A8
mov r1, #0x0
mov r2, #0x40
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [r5, #0xc]
bl FUN_0206BB1C
str r0, [r4, #0x0]
@@ -50170,7 +50170,7 @@ _0205DB9C:
add r4, r0, #0x0
mov r1, #0x0
mov r2, #0x2c
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
str r5, [r4, #0x0]
ldr r0, [sp, #0x0]
add r1, r4, #0x4
@@ -53977,7 +53977,7 @@ FUN_0205F7A0: ; 0x0205F7A0
add r0, r5, #0x0
mov r1, #0x0
lsl r2, r2, #0x6
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r0, [sp, #0x0]
ldr r0, [r0, #0x38]
bl FUN_02055320
@@ -55975,7 +55975,7 @@ FUN_02060790: ; 0x02060790
mov r1, #0x0
mov r2, #0x2c
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x0
str r0, [r4, #0x4]
str r5, [r4, #0x0]
@@ -63987,7 +63987,7 @@ _02064622:
add r0, r4, #0x0
mov r1, #0x0
add r2, r5, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r3-r5, pc}
@@ -64007,7 +64007,7 @@ FUN_02064640: ; 0x02064640
mov r1, #0x0
mov r2, #0xc8
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r1, _02064680 ; =FUN_0206478C
add r0, r4, #0x0
bl FUN_020646B8
@@ -64166,7 +64166,7 @@ FUN_0206473C: ; 0x0206473C
bl FUN_02064738
mov r1, #0x0
add r2, r4, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
pop {r4, pc}
.balign 4
@@ -65347,7 +65347,7 @@ FUN_02065054: ; 0x02065054
ldr r2, _0206506C ; =0x0000066C
mov r1, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r4, pc}
nop
@@ -79377,7 +79377,7 @@ _0206B8DA:
add r0, r5, #0x0
mov r1, #0x0
lsl r2, r2, #0x4
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r4, #0x0
str r4, [r5, #0x4]
str r6, [r5, #0x0]
@@ -84084,14 +84084,14 @@ FUN_0206DE4C: ; 0x0206DE4C
mov r1, #0x0
mov r2, #0xe
mov r3, #0xb
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
mov r0, #0x8
str r0, [sp, #0x0]
ldr r0, _0206DE74 ; =0x04001050
mov r1, #0x0
mov r2, #0xe
mov r3, #0x7
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
pop {r3, pc}
.balign 4
_0206DE70: .word 0x04000050
@@ -84155,13 +84155,13 @@ FUN_0206DE94: ; 0x0206DE94
add r1, r0, #0x0
add r2, r0, #0x0
add r3, r0, #0x0
- blx FUN_020C7C28
+ blx G3X_SetFog
mov r0, #0x0
ldr r2, _0206DF0C ; =0x00007FFF
add r1, r0, #0x0
mov r3, #0x3f
str r0, [sp, #0x0]
- blx FUN_020C7B3C
+ blx G3X_SetClearColor
ldr r1, _0206DF10 ; =0xBFFF0000
ldr r0, _0206DF14 ; =0x04000580
str r1, [r0, #0x0]
@@ -84720,7 +84720,7 @@ FUN_0206E2F0: ; 0x0206E2F0
mov r1, #0x0
mov r2, #0x78
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
pop {r4, pc}
.balign 4
@@ -88378,7 +88378,7 @@ FUN_0206FD24: ; 0x0206FD24
add r0, r5, r0
add r1, #0x60
lsl r2, r2, #0x8
- blx FUN_020DF438
+ blx memcpy
mov r0, #0xc
add r1, r4, #0x0
bl FUN_02016A8C
@@ -88490,7 +88490,7 @@ FUN_0206FE74: ; 0x0206FE74
ldr r2, _0206FF50 ; =0x00000B38
mov r1, #0x0
add r6, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
bl FUN_0200628C
ldr r1, _0206FF54 ; =0x000005A4
@@ -93303,14 +93303,14 @@ _020724FE:
ldr r1, [sp, #0x0]
add r0, r5, #0x0
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r1, r4, #0x6
lsl r2, r1, #0x6
ldr r1, [sp, #0x4]
add r0, r6, #0x0
add r1, r1, r2
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r1, r4, #0x0
add r1, #0xc
lsl r2, r1, #0x6
@@ -93318,7 +93318,7 @@ _020724FE:
add r0, r7, #0x0
add r1, r1, r2
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x0]
add r4, r4, #0x1
add r0, #0x40
@@ -97348,13 +97348,13 @@ _02074638:
ldr r1, [sp, #0x14]
add r0, r0, r5
add r1, r1, r7
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x1c]
ldr r1, [sp, #0x10]
add r0, r0, r5
add r1, r1, r7
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x4]
mov r2, #0x20
add r0, r0, r4
@@ -97366,13 +97366,13 @@ _02074638:
ldr r1, [sp, #0x14]
add r0, r0, r5
add r1, r1, r7
- blx FUN_020DF438
+ blx memcpy
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x10]
add r0, r0, r5
add r1, r1, r7
mov r2, #0x20
- blx FUN_020DF438
+ blx memcpy
add r0, r4, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
@@ -102727,7 +102727,7 @@ _020772FE:
mov r1, #0x0
lsl r2, r2, #0x4
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x12
bl FUN_02016B94
mov r1, #0x16
@@ -102890,7 +102890,7 @@ FUN_020774B8: ; 0x020774B8
ldr r1, _020774E8 ; =0x000057E0
add r6, r3, #0x0
lsl r2, r2, #0x8
- blx FUN_020C92F4
+ blx GX_LoadOBJ
ldr r4, [r4, #0xc]
add r0, r5, #0x0
add r1, r6, #0x0
@@ -102900,7 +102900,7 @@ FUN_020774B8: ; 0x020774B8
add r0, r4, r0
mov r1, #0xc0
mov r2, #0x20
- blx FUN_020C9480
+ blx GX_LoadOBJPltt
pop {r4-r6, pc}
nop
_020774E8: .word 0x000057E0
@@ -106027,7 +106027,7 @@ _02078E52:
add r0, sp, #0x0
mov r1, #0x3a
mov r2, #0x2
- blx FUN_020C9480
+ blx GX_LoadOBJPltt
pop {r3, pc}
thumb_func_start FUN_02078E7C
@@ -106220,7 +106220,7 @@ _02078FD0:
add r0, r5, #0x0
lsl r2, r2, #0x8
lsl r1, r1, #0x5
- blx FUN_020C9294
+ blx GXS_LoadOBJ
add r0, r4, #0x1
lsl r0, r0, #0x10
lsr r4, r0, #0x10
@@ -106260,7 +106260,7 @@ _02079012:
add r0, r7, #0x0
lsl r1, r1, #0x5
mov r2, #0x80
- blx FUN_020C9294
+ blx GXS_LoadOBJ
add r0, r5, #0x1
lsl r0, r0, #0x10
lsr r5, r0, #0x10
@@ -106854,7 +106854,7 @@ _02079470:
mov r1, #0x0
mov r2, #0x7
str r3, [sp, #0x0]
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
mov r0, #0xd3
lsl r0, r0, #0x2
ldr r0, [r4, r0]
@@ -107924,7 +107924,7 @@ FUN_02079C7C: ; 0x02079C7C
ldr r2, _02079DAC ; =0x0000069C
mov r1, #0x0
add r5, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r4, #0x0
bl FUN_0200628C
mov r1, #0x93
@@ -108459,7 +108459,7 @@ FUN_0207A188: ; 0x0207A188
mov r1, #0x1
mov r2, #0x1e
mov r3, #0x17
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
pop {r3, pc}
.balign 4
_0207A19C: .word 0x04000050
@@ -118029,8 +118029,8 @@ FUN_0207EF6C: ; 0x0207EF6C
push {r3-r4, lr}
sub sp, #0x4
blx FUN_020BB7F4
- blx FUN_020C7E94
- blx FUN_020C7D28
+ blx G3X_Init
+ blx G3X_InitMtxStack
ldr r0, _0207EFEC ; =0x04000060
ldr r1, _0207EFF0 ; =0xFFFFCFFD
ldrh r2, [r0, #0x0]
@@ -118060,13 +118060,13 @@ FUN_0207EF6C: ; 0x0207EF6C
add r1, r0, #0x0
add r2, r0, #0x0
add r3, r0, #0x0
- blx FUN_020C7C28
+ blx G3X_SetFog
mov r0, #0x0
ldr r2, _0207EFF8 ; =0x00007FFF
add r1, r0, #0x0
mov r3, #0x3f
str r0, [sp, #0x0]
- blx FUN_020C7B3C
+ blx G3X_SetClearColor
ldr r1, _0207EFFC ; =0x04000540
mov r0, #0x0
str r0, [r1, #0x0]
@@ -118682,43 +118682,43 @@ FUN_0207F48C: ; 0x0207F48C
add r6, r2, #0x0
sub r7, r1, r0
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
mov r1, #0x0
- blx FUN_020EAEF0
+ blx _fgr
bls _0207F4E0
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
- blx FUN_020EB4C0
+ blx _fadd
+ blx _ffix
b _0207F506
_0207F4E0:
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
- blx FUN_020EB4C0
+ blx _fsub
+ blx _ffix
_0207F506:
lsl r0, r0, #0x10
asr r0, r0, #0x10
@@ -118728,43 +118728,43 @@ _0207F506:
ldrsh r0, [r5, r0]
sub r7, r1, r0
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
mov r1, #0x0
- blx FUN_020EAEF0
+ blx _fgr
bls _0207F558
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
- blx FUN_020EB4C0
+ blx _fadd
+ blx _ffix
b _0207F57E
_0207F558:
add r0, r7, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
- blx FUN_020EB4C0
+ blx _fsub
+ blx _ffix
_0207F57E:
lsl r0, r0, #0x10
asr r0, r0, #0x10
@@ -118774,43 +118774,43 @@ _0207F57E:
ldrsh r0, [r5, r0]
sub r4, r1, r0
add r0, r4, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
mov r1, #0x0
- blx FUN_020EAEF0
+ blx _fgr
bls _0207F5D0
add r0, r4, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
- blx FUN_020EB4C0
+ blx _fadd
+ blx _ffix
b _0207F5F6
_0207F5D0:
add r0, r4, #0x0
- blx FUN_020EB534
+ blx _fflt
ldr r1, _0207F600 ; =0x45800000
- blx FUN_020EB084
+ blx _fdiv
ldr r1, _0207F604 ; =0x40800000
- blx FUN_020EB084
+ blx _fdiv
add r1, r0, #0x0
ldr r0, _0207F600 ; =0x45800000
- blx FUN_020EB5C4
+ blx _fmul
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
- blx FUN_020EB4C0
+ blx _fsub
+ blx _ffix
_0207F5F6:
lsl r0, r0, #0x10
asr r0, r0, #0x10
@@ -127939,7 +127939,7 @@ FUN_02083BAC: ; 0x02083BAC
ldr r0, [r4, r0]
add r1, r6, #0x0
lsl r2, r2, #0x4
- blx FUN_020DF438
+ blx memcpy
ldr r0, [r4, #0x58]
add r0, r0, #0x1
str r0, [r4, #0x58]
@@ -128388,7 +128388,7 @@ _02083ED0:
cmp r1, r0
bne _02083EFE
bl FUN_0202CB8C
- blx FUN_020DDC5C
+ blx MATH_CountPopulation
mov r1, #0xc6
lsl r1, r1, #0x2
ldr r1, [r4, r1]
@@ -128742,7 +128742,7 @@ _0208415E:
cmp r1, r0
bne _02084186
bl FUN_0202CB8C
- blx FUN_020DDC5C
+ blx MATH_CountPopulation
ldr r1, _02084208 ; =0x00004A48
ldr r2, [r4, r1]
cmp r2, r0
@@ -131946,7 +131946,7 @@ FUN_020859C0: ; 0x020859C0
ldr r2, _02085BA0 ; =0x0000042C
mov r1, #0x0
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
bl FUN_0222E2BC
mov r1, #0x23
lsl r1, r1, #0x4
@@ -132596,7 +132596,7 @@ _02085F5E:
mov r1, #0x0
mov r2, #0x30
str r0, [r4, #0x8]
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
bl LoadPlayerDataAddress
ldr r1, [r4, #0x8]
@@ -132609,7 +132609,7 @@ _02085F5E:
mov r1, #0x0
mov r2, #0x40
str r0, [r4, #0xc]
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
ldr r1, _02085FA8 ; =FUN_02085DA4
add r0, r6, #0x0
add r2, r4, #0x0
@@ -132752,7 +132752,7 @@ FUN_02086084: ; 0x02086084
mov r1, #0x0
mov r2, #0x80
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
add r0, r5, #0x0
bl FUN_0200628C
str r0, [r4, #0x0]
@@ -133167,14 +133167,14 @@ FUN_0208643C: ; 0x0208643C
mov r1, #0x0
mov r2, #0xe
mov r3, #0xb
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
mov r0, #0x8
str r0, [sp, #0x0]
ldr r0, _02086464 ; =0x04001050
mov r1, #0x0
mov r2, #0xe
mov r3, #0x7
- blx FUN_020C74DC
+ blx G2x_SetBlendAlpha_
pop {r3, pc}
.balign 4
_02086460: .word 0x04000050
@@ -133239,13 +133239,13 @@ FUN_02086488: ; 0x02086488
add r1, r0, #0x0
add r2, r0, #0x0
add r3, r0, #0x0
- blx FUN_020C7C28
+ blx G3X_SetFog
mov r0, #0x0
ldr r2, _02086500 ; =0x00007FFF
add r1, r0, #0x0
mov r3, #0x3f
str r0, [sp, #0x0]
- blx FUN_020C7B3C
+ blx G3X_SetClearColor
ldr r1, _02086504 ; =0xBFFF0000
ldr r0, _02086508 ; =0x04000580
str r1, [r0, #0x0]
@@ -134325,7 +134325,7 @@ _02086DB4:
bl FUN_0200C82C
mov r0, #0x0
add r1, r7, #0x0
- blx FUN_020EB010
+ blx _feq
beq _02086DD2
ldr r0, [r6, #0x6c]
ldr r2, [sp, #0x0]
@@ -136992,22 +136992,22 @@ _0208826A:
cmp r0, #0x5
beq _020882B8
ldrb r0, [r4, r0]
- blx FUN_020EB57C
+ blx _ffltu
add r1, r0, #0x0
ldr r0, _02088318 ; =0x3F8CCCCD
- blx FUN_020EB5C4
- blx FUN_020EB4F4
+ blx _fmul
+ blx _ffixu
ldr r1, [sp, #0x4]
strb r0, [r4, r1]
add r4, sp, #0x8
ldr r0, [sp, #0x0]
add r4, #0x1
ldrb r0, [r4, r0]
- blx FUN_020EB57C
+ blx _ffltu
add r1, r0, #0x0
ldr r0, _0208831C ; =0x3F666666
- blx FUN_020EB5C4
- blx FUN_020EB4F4
+ blx _fmul
+ blx _ffixu
ldr r1, [sp, #0x0]
strb r0, [r4, r1]
_020882B8:
@@ -137365,59 +137365,59 @@ _020884D8:
str r0, [sp, #0x44]
beq _02088596
lsl r0, r7, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _020885A4
_02088596:
lsl r0, r7, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_020885A4:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x48]
ldr r0, [sp, #0x30]
cmp r0, #0x0
beq _020885C2
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _020885D0
_020885C2:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_020885D0:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x4c]
add r0, sp, #0x78
ldrh r0, [r0, #0x10]
cmp r0, #0x0
beq _020885F0
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
add r1, r0, #0x0
mov r0, #0x3f
lsl r0, r0, #0x18
- blx FUN_020EA980
+ blx _fadd
b _020885FE
_020885F0:
lsl r0, r0, #0xc
- blx FUN_020EB534
+ blx _fflt
mov r1, #0x3f
lsl r1, r1, #0x18
- blx FUN_020EB7B0
+ blx _fsub
_020885FE:
- blx FUN_020EB4C0
+ blx _ffix
str r0, [sp, #0x50]
cmp r6, #0x2
bne _02088612
@@ -138221,7 +138221,7 @@ _02088BBA:
add r2, r0, #0x0
ldr r1, [r4, #0x18]
add r0, r5, #0x0
- blx FUN_020DF438
+ blx memcpy
ldr r0, [r4, #0x18]
bl FUN_02016A18
mov r0, #0x0
@@ -139455,7 +139455,7 @@ FUN_02089498: ; 0x02089498
mov r1, #0x0
mov r2, #0x38
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x58
str r0, [r4, #0x0]
mov r0, #0x0
@@ -140031,7 +140031,7 @@ FUN_02089960: ; 0x02089960
mov r1, #0x0
mov r2, #0x3c
add r4, r0, #0x0
- blx FUN_020DF4A4
+ blx Call_FillMemWithValue
mov r0, #0x58
str r0, [r4, #0x0]
mov r0, #0x0
diff --git a/arm9/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s
new file mode 100644
index 00000000..0adafb8b
--- /dev/null
+++ b/arm9/asm/unk_0208AC14.s
@@ -0,0 +1,42449 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start FUN_0208AC14
+FUN_0208AC14: ; 0x0208AC14
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x4]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+_0208AC34:
+ ldr r4, [r1, #0x0]
+ mov r0, r5
+ bl FUN_0208AC58
+ mov r1, r4
+ cmp r4, #0x0
+ bne _0208AC34
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0208AC58
+FUN_0208AC58: ; 0x0208AC58
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ mov r7, r0
+ add r0, r6, #0x8
+ bl FUN_02090A58
+ movs r1, r0
+ beq _0208AC98
+ add r5, r7, #0x1c
+ add r4, r6, #0x8
+_0208AC80:
+ mov r0, r5
+ bl FUN_02090AA4
+ mov r0, r4
+ bl FUN_02090A58
+ movs r1, r0
+ bne _0208AC80
+_0208AC98:
+ add r0, r6, #0x14
+ bl FUN_02090A58
+ movs r1, r0
+ beq _0208ACC8
+ add r5, r7, #0x1c
+ add r4, r6, #0x14
+_0208ACB0:
+ mov r0, r5
+ bl FUN_02090AA4
+ mov r0, r4
+ bl FUN_02090A58
+ movs r1, r0
+ bne _0208ACB0
+_0208ACC8:
+ mov r1, r6
+ add r0, r7, #0x4
+ bl FUN_020909D8
+ mov r1, r6
+ add r0, r7, #0x10
+ bl FUN_02090AA4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0208ACEC
+FUN_0208ACEC: ; 0x0208ACEC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ ldr r0, [r7, #0x10]
+ mov r6, r1
+ mov r5, r2
+ cmp r0, #0x0
+ mov r4, #0x0
+ beq _0208AD70
+ add r1, sp, #0x0
+ str r4, [r1, #0x0]
+ str r4, [r1, #0x4]
+ add r0, r7, #0x10
+ str r4, [r1, #0x8]
+ bl FUN_02090A58
+ ldr r1, [r7, #0x28]
+ add r2, sp, #0x0
+ add r1, r1, r6, lsl #0x5
+ mov r4, r0
+ bl FUN_0208C138
+_0208AD3C: ; 0x0208AD3C
+ cmp r5, #0x0
+ beq _0208AD4C
+ mov r0, r4
+ blx r5
+_0208AD4C:
+ mov r1, r4
+ add r0, r7, #0x4
+ bl FUN_02090AA4
+ ldr r0, [r4, #0x20]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x11
+ movs r0, r0, lsr #0x1f
+ movne r4, #0x0
+_0208AD70:
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0208AD80
+FUN_0208AD80: ; 0x0208AD80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r2, _0208AE44 ; =0x04000060
+ mov r4, r0
+ ldrh r0, [r2, #0x0]
+ bic r0, r0, #0x3000
+ orr r0, r0, #0x8
+ strh r0, [r2, #0x0]
+ str r1, [r4, #0x44]
+ ldr r0, [r4, #0x38]
+ mov r0, r0, lsl #0x7
+ movs r0, r0, lsr #0x1f
+ bne _0208ADFC
+ ldr r5, [r4, #0x4]
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+_0208ADC8:
+ str r5, [r4, #0x40]
+ ldr r0, [r5, #0x24]
+ mov r0, r0, lsl #0x1c
+ movs r0, r0, lsr #0x1f
+ bne _0208ADE4
+ mov r0, r4
+ bl FUN_0208B6A0
+_0208ADE4:
+ ldr r5, [r5, #0x0]
+ cmp r5, #0x0
+ bne _0208ADC8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0208ADFC:
+ ldr r5, [r4, #0xc]
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+_0208AE10:
+ str r5, [r4, #0x40]
+ ldr r0, [r5, #0x24]
+ mov r0, r0, lsl #0x1c
+ movs r0, r0, lsr #0x1f
+ bne _0208AE2C
+ mov r0, r4
+ bl FUN_0208B6A0
+_0208AE2C:
+ ldr r5, [r5, #0x4]
+ cmp r5, #0x0
+ bne _0208AE10
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0208AE44: .word 0x04000060
+
+ arm_func_start FUN_0208AE48
+FUN_0208AE48: ; 0x0208AE48
+ stmdb sp!, {r4-r10,lr}
+ mov r8, r0
+ ldr r7, [r8, #0x4]
+ cmp r7, #0x0
+ beq _0208AF5C
+ add r10, r8, #0x4
+ add r9, r8, #0x10
+ mov r4, #0x0
+_0208AE68:
+ ldr r2, [r7, #0x24]
+ ldr r1, [r7, #0x20]
+ mov r0, r2, lsl #0x1b
+ movs r0, r0, lsr #0x1f
+ ldr r5, [r1, #0x0]
+ ldr r6, [r7, #0x0]
+ bne _0208AE9C
+ ldrh r1, [r7, #0x4c]
+ ldrh r0, [r5, #0x32]
+ cmp r1, r0
+ orrcs r0, r2, #0x10
+ strcs r0, [r7, #0x24]
+ strcsh r4, [r7, #0x4c]
+_0208AE9C:
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsl #0x1d
+ movs r0, r0, lsr #0x1f
+ bne _0208AED8
+ ldr r0, [r7, #0x80]
+ mov r0, r0, lsl #0xd
+ movs r0, r0, lsr #0x1d
+ beq _0208AECC
+ ldrh r1, [r8, #0x48]
+ sub r0, r0, #0x1
+ cmp r1, r0
+ bne _0208AED8
+_0208AECC:
+ mov r0, r8
+ mov r1, r7
+ bl FUN_0208B8F0
+_0208AED8:
+ ldr r0, [r5, #0x0]
+ mov r0, r0, lsl #0x11
+ movs r0, r0, lsr #0x1f
+ beq _0208AF10
+ ldrh r1, [r5, #0x3c]
+ cmp r1, #0x0
+ beq _0208AF10
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsl #0x1b
+ movs r0, r0, lsr #0x1f
+ beq _0208AF10
+ ldrh r0, [r7, #0x4c]
+ cmp r0, r1
+ bhi _0208AF20
+_0208AF10:
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ beq _0208AF50
+_0208AF20:
+ ldr r0, [r7, #0xc]
+ cmp r0, #0x0
+ bne _0208AF50
+ ldr r0, [r7, #0x18]
+ cmp r0, #0x0
+ bne _0208AF50
+ mov r0, r10
+ mov r1, r7
+ bl FUN_020909D8
+ mov r1, r0
+ mov r0, r9
+ bl FUN_02090AA4
+_0208AF50:
+ mov r7, r6
+ cmp r6, #0x0
+ bne _0208AE68
+_0208AF5C:
+ ldrh r0, [r8, #0x48]
+ add r0, r0, #0x1
+ strh r0, [r8, #0x48]
+ ldrh r0, [r8, #0x48]
+ cmp r0, #0x1
+ movhi r0, #0x0
+ strhih r0, [r8, #0x48]
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_0208AF80
+FUN_0208AF80: ; 0x0208AF80
+ ldr ip, _0208AF8C ; =FUN_0208AFA8
+ ldr r1, _0208AF90 ; =FUN_0208B630
+ bx r12
+ .balign 4
+_0208AF8C: .word FUN_0208AFA8
+_0208AF90: .word FUN_0208B630
+
+ arm_func_start FUN_0208AF94
+FUN_0208AF94: ; 0x0208AF94
+ ldr ip, _0208AFA0 ; =FUN_0208B05C
+ ldr r1, _0208AFA4 ; =FUN_0208B668
+ bx r12
+ .balign 4
+_0208AFA0: .word FUN_0208B05C
+_0208AFA4: .word FUN_0208B668
+
+ arm_func_start FUN_0208AFA8
+FUN_0208AFA8: ; 0x0208AFA8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ mov r11, r1
+ bl GX_BeginLoadTexPltt
+ ldrh r0, [r10, #0x32]
+ mov r9, #0x0
+ cmp r0, #0x0
+ ble _0208B048
+ mov r0, #0x1
+ mov r5, r9
+ mov r4, r9
+ str r0, [sp, #0x0]
+_0208AFDC:
+ ldr r0, [r10, #0x2c]
+ mov r6, r4
+ ldr r7, [r0, r5]
+ add r8, r0, r5
+ ldr r0, [r7, #0x10]
+ cmp r0, #0x0
+ beq _0208B030
+ ldr r1, [r7, #0x4]
+ mov r1, r1, lsl #0x1c
+ mov r1, r1, lsr #0x1c
+ cmp r1, #0x2
+ ldreq r1, [sp, #0x0]
+ movne r1, r4
+ blx r11
+ mov r6, r0
+ ldr r1, [r8, #0x0]
+ ldr r0, [r7, #0xc]
+ ldr r2, [r7, #0x10]
+ add r0, r1, r0
+ mov r1, r6
+ bl GX_LoadTexPltt
+_0208B030:
+ str r6, [r8, #0x8]
+ ldrh r0, [r10, #0x32]
+ add r9, r9, #0x1
+ add r5, r5, #0x14
+ cmp r9, r0
+ blt _0208AFDC
+_0208B048:
+ bl GX_EndLoadTexPltt
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_0208B05C
+FUN_0208B05C: ; 0x0208B05C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ mov r11, r1
+ bl GX_BeginLoadTex
+ ldrh r0, [r10, #0x32]
+ mov r9, #0x0
+ cmp r0, #0x0
+ ble _0208B114
+ mov r0, #0x1
+ mov r6, r9
+ str r9, [sp, #0x4]
+ str r0, [sp, #0x0]
+ mov r4, #0x14
+_0208B094:
+ ldr r2, [r10, #0x2c]
+ ldr r7, [r2, r6]
+ add r8, r2, r6
+ ldr r0, [r7, #0x4]
+ mov r1, r0, lsl #0xe
+ movs r1, r1, lsr #0x1f
+ beq _0208B0C8
+ mov r0, r0, lsl #0x6
+ mov r1, r0, lsr #0x18
+ mla r0, r1, r4, r2
+ ldr r0, [r0, #0x4]
+ str r0, [r8, #0x4]
+ b _0208B100
+_0208B0C8:
+ mov r0, r0, lsl #0x1c
+ mov r0, r0, lsr #0x1c
+ cmp r0, #0x5
+ ldreq r1, [sp, #0x0]
+ ldr r0, [r7, #0x8]
+ ldrne r1, [sp, #0x4]
+ blx r11
+ mov r5, r0
+ ldr r0, [r8, #0x0]
+ ldr r2, [r7, #0x8]
+ add r0, r0, #0x20
+ mov r1, r5
+ bl GX_LoadTex
+ str r5, [r8, #0x4]
+_0208B100:
+ ldrh r0, [r10, #0x32]
+ add r9, r9, #0x1
+ add r6, r6, #0x14
+ cmp r9, r0
+ blt _0208B094
+_0208B114:
+ bl GX_EndLoadTex
+ mov r0, #0x1
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_0208B128
+FUN_0208B128: ; 0x0208B128
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x2c
+ mov r9, r1
+ ldrh r1, [r9, #0x8]
+ mov r10, r0
+ mov r8, #0x20
+ strh r1, [r10, #0x30]
+ ldrh r0, [r9, #0xa]
+ strh r0, [r10, #0x32]
+ ldrh r0, [r10, #0x30]
+ ldr r1, [r10, #0x0]
+ mov r0, r0, lsl #0x5
+ blx r1
+ str r0, [r10, #0x28]
+ ldrh r2, [r10, #0x30]
+ ldr r0, [r10, #0x28]
+ mov r1, #0x0
+ mov r2, r2, lsl #0x5
+ bl MI_CpuFill8
+ ldrh r1, [r10, #0x30]
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ cmp r1, #0x0
+ ble _0208B3C8
+ mov r6, r0
+ str r0, [sp, #0x10]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x18]
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x24]
+_0208B1A4:
+ ldr r1, [r10, #0x28]
+ add r0, r9, r8
+ str r0, [r1, r6]
+ ldr r0, [r1, r6]
+ add r8, r8, #0x58
+ ldr r0, [r0, #0x0]
+ add r7, r1, r6
+ str r0, [sp, #0x28]
+ mov r0, r0, lsl #0x17
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, r8
+ strne r0, [r7, #0x4]
+ ldreq r0, [sp, #0x10]
+ addne r8, r8, #0xc
+ streq r0, [r7, #0x4]
+ ldr r0, [sp, #0x28]
+ mov r0, r0, lsl #0x16
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, r8
+ strne r0, [r7, #0x8]
+ ldreq r0, [sp, #0x14]
+ addne r8, r8, #0xc
+ streq r0, [r7, #0x8]
+ ldr r0, [sp, #0x28]
+ mov r0, r0, lsl #0x15
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, r8
+ strne r0, [r7, #0xc]
+ ldreq r0, [sp, #0x18]
+ addne r8, r8, #0x8
+ streq r0, [r7, #0xc]
+ ldr r0, [sp, #0x28]
+ mov r0, r0, lsl #0x14
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, r8
+ strne r0, [r7, #0x10]
+ ldreq r0, [sp, #0x1c]
+ addne r8, r8, #0xc
+ streq r0, [r7, #0x10]
+ ldr r0, [sp, #0x28]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, r8
+ strne r0, [r7, #0x14]
+ ldreq r0, [sp, #0x20]
+ addne r8, r8, #0x14
+ streq r0, [r7, #0x14]
+ ldr r0, [sp, #0x28]
+ mov r1, r0, lsl #0x7
+ mov r2, r0, lsl #0x6
+ mov r5, r1, lsr #0x1f
+ mov r4, r2, lsr #0x1f
+ add r1, r5, r2, lsr #0x1f
+ mov r2, r0, lsl #0x5
+ add r1, r1, r2, lsr #0x1f
+ mov r3, r0, lsl #0x4
+ mov r11, r2, lsr #0x1f
+ add r2, r1, r3, lsr #0x1f
+ mov r1, r3, lsr #0x1f
+ mov r12, r0, lsl #0x3
+ str r1, [sp, #0x4]
+ mov r3, r0, lsl #0x2
+ mov r0, r12, lsr #0x1f
+ add r1, r2, r12, lsr #0x1f
+ str r0, [sp, #0x8]
+ add r0, r1, r3, lsr #0x1f
+ strh r0, [r7, #0x1c]
+ mov r0, r3, lsr #0x1f
+ str r0, [sp, #0xc]
+ ldrh r0, [r7, #0x1c]
+ cmp r0, #0x0
+ beq _0208B3A4
+ mov r0, r0, lsl #0x3
+ ldr r1, [r10, #0x0]
+ blx r1
+ str r0, [r7, #0x18]
+ cmp r5, #0x0
+ ldr r0, [r7, #0x18]
+ beq _0208B2F8
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B488 ; =FUN_020909A4
+ add r8, r8, #0x8
+ str r1, [r0, #0x0]
+ add r0, r0, #0x8
+_0208B2F8:
+ cmp r4, #0x0
+ beq _0208B318
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B48C ; =FUN_020908DC
+ add r8, r8, #0x8
+ str r1, [r0, #0x0]
+ add r0, r0, #0x8
+_0208B318:
+ cmp r11, #0x0
+ beq _0208B338
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B490 ; =FUN_02090858
+ add r8, r8, #0x10
+ str r1, [r0, #0x0]
+ add r0, r0, #0x8
+_0208B338:
+ ldr r1, [sp, #0x4]
+ cmp r1, #0x0
+ beq _0208B35C
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B494 ; =FUN_02090780
+ add r8, r8, #0x4
+ str r1, [r0, #0x0]
+ add r0, r0, #0x8
+_0208B35C:
+ ldr r1, [sp, #0x8]
+ cmp r1, #0x0
+ beq _0208B380
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B498 ; =FUN_02090664
+ add r8, r8, #0x8
+ str r1, [r0, #0x0]
+ add r0, r0, #0x8
+_0208B380:
+ ldr r1, [sp, #0xc]
+ cmp r1, #0x0
+ beq _0208B3AC
+ add r1, r9, r8
+ str r1, [r0, #0x4]
+ ldr r1, _0208B49C ; =FUN_020905D0
+ add r8, r8, #0x10
+ str r1, [r0, #0x0]
+ b _0208B3AC
+_0208B3A4:
+ ldr r0, [sp, #0x24]
+ str r0, [r7, #0x18]
+_0208B3AC:
+ ldr r0, [sp, #0x0]
+ ldrh r1, [r10, #0x30]
+ add r0, r0, #0x1
+ add r6, r6, #0x20
+ str r0, [sp, #0x0]
+ cmp r0, r1
+ blt _0208B1A4
+_0208B3C8:
+ ldrh r2, [r10, #0x32]
+ mov r0, #0x14
+ ldr r1, [r10, #0x0]
+ mul r0, r2, r0
+ blx r1
+ str r0, [r10, #0x2c]
+ ldrh r3, [r10, #0x32]
+ mov r1, #0x14
+ ldr r0, [r10, #0x2c]
+ mul r2, r3, r1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldrh r0, [r10, #0x32]
+ mov r3, #0x0
+ cmp r0, #0x0
+ addle sp, sp, #0x2c
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ mov r4, r3
+ mov r0, #0x1
+_0208B418:
+ ldr r2, [r10, #0x2c]
+ add r1, r9, r8
+ str r1, [r2, r4]
+ ldr r5, [r1, #0x4]
+ add r2, r2, r4
+ mov r5, r5, lsl #0x18
+ mov r5, r5, lsr #0x1c
+ add r5, r5, #0x3
+ mov r5, r0, lsl r5
+ strh r5, [r2, #0x10]
+ ldr r5, [r1, #0x4]
+ add r3, r3, #0x1
+ mov r5, r5, lsl #0x14
+ mov r5, r5, lsr #0x1c
+ add r5, r5, #0x3
+ mov r5, r0, lsl r5
+ strh r5, [r2, #0x12]
+ ldr r5, [r1, #0x4]
+ add r4, r4, #0x14
+ str r5, [r2, #0xc]
+ ldrh r2, [r10, #0x32]
+ ldr r1, [r1, #0x1c]
+ cmp r3, r2
+ add r8, r8, r1
+ blt _0208B418
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0208B488: .word FUN_020909A4
+_0208B48C: .word FUN_020908DC
+_0208B490: .word FUN_02090858
+_0208B494: .word FUN_02090780
+_0208B498: .word FUN_02090664
+_0208B49C: .word FUN_020905D0
+
+ arm_func_start FUN_0208B4A0
+FUN_0208B4A0: ; 0x0208B4A0
+ stmdb sp!, {r4-r10,lr}
+ mov r8, r0
+ mov r0, #0x4c
+ mov r7, r1
+ mov r6, r2
+ mov r4, r3
+ blx r8
+ mov r5, r0
+ mov r1, #0x0
+ mov r2, #0x4c
+ bl MI_CpuFill8
+ strh r7, [r5, #0x34]
+ strh r6, [r5, #0x36]
+ ldrh r0, [sp, #0x20]
+ and r2, r4, #0x3f
+ ldr r1, [r5, #0x38]
+ and r0, r0, #0x3f
+ bic r1, r1, #0x3f
+ orr r0, r1, r0
+ str r0, [r5, #0x38]
+ ldrh r0, [sp, #0x24]
+ ldr r3, [r5, #0x38]
+ mov r1, #0x0
+ bic r3, r3, #0xfc0
+ and r0, r0, #0x3f
+ orr r0, r3, r0, lsl #0x6
+ str r0, [r5, #0x38]
+ ldr r3, [r5, #0x38]
+ mov r0, #0x9c
+ mul r4, r7, r0
+ bic r12, r3, #0x3f000
+ mov r0, r3, lsl #0x1a
+ mov r0, r0, lsr #0x1a
+ and r0, r0, #0x3f
+ orr r0, r12, r0, lsl #0xc
+ str r0, [r5, #0x38]
+ ldr r3, [r5, #0x38]
+ mov r0, r4
+ bic r3, r3, #0xfc0000
+ orr r2, r3, r2, lsl #0x12
+ str r2, [r5, #0x38]
+ ldr r2, [r5, #0x38]
+ bic r2, r2, #0x1000000
+ str r2, [r5, #0x38]
+ ldr r2, [r5, #0x38]
+ bic r2, r2, #0xfe000000
+ str r2, [r5, #0x38]
+ str r8, [r5, #0x0]
+ str r1, [r5, #0x8]
+ str r1, [r5, #0x14]
+ str r1, [r5, #0x20]
+ str r1, [r5, #0x4]
+ str r1, [r5, #0x10]
+ str r1, [r5, #0x1c]
+ str r1, [r5, #0x3c]
+ strh r1, [r5, #0x48]
+ blx r8
+ mov r2, r4
+ mov r9, r0
+ mov r1, #0x0
+ bl MI_CpuFill8
+_0208B594: ; 0x0208B594
+ cmp r7, #0x0
+ mov r10, #0x0
+ ble _0208B5C0
+ add r4, r5, #0x10
+_0208B5A4:
+ mov r0, r4
+ mov r1, r9
+ bl FUN_02090AA4
+ add r10, r10, #0x1
+ cmp r10, r7
+ add r9, r9, #0x9c
+ blt _0208B5A4
+_0208B5C0:
+ mov r0, #0x44
+ mul r4, r6, r0
+ mov r0, r4
+ blx r8
+ mov r2, r4
+ mov r1, #0x0
+ mov r8, r0
+ bl MI_CpuFill8
+_0208B5E0: ; 0x0208B5E0
+ cmp r6, #0x0
+ mov r7, #0x0
+ ble _0208B60C
+ add r4, r5, #0x1c
+_0208B5F0:
+ mov r0, r4
+ mov r1, r8
+ bl FUN_02090AA4
+ add r7, r7, #0x1
+ cmp r7, r6
+ add r8, r8, #0x44
+ blt _0208B5F0
+_0208B60C:
+ mov r0, #0x0
+ str r0, [r5, #0x28]
+ str r0, [r5, #0x2c]
+ strh r0, [r5, #0x32]
+ ldrh r1, [r5, #0x32]
+ mov r0, r5
+ strh r1, [r5, #0x30]
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_0208B630
+FUN_0208B630: ; 0x0208B630
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _0208B660 ; =0x021064C0
+ mov r2, #0x0
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r1, _0208B664 ; =0x0000FFFF
+ and r0, r0, r1
+ mov r0, r0, lsl #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0208B660: .word 0x021064C0
+_0208B664: .word 0x0000FFFF
+
+ arm_func_start FUN_0208B668
+FUN_0208B668: ; 0x0208B668
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _0208B698 ; =0x021064B8
+ mov r2, #0x0
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r1, _0208B69C ; =0x0000FFFF
+ and r0, r0, r1
+ mov r0, r0, lsl #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0208B698: .word 0x021064B8
+_0208B69C: .word 0x0000FFFF
+
+ arm_func_start FUN_0208B6A0
+FUN_0208B6A0: ; 0x0208B6A0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r1, [r4, #0x40]
+ ldr r1, [r1, #0x20]
+ ldr r5, [r1, #0x0]
+ ldr r1, [r5, #0x0]
+ mov r2, r1, lsl #0xa
+ movs r2, r2, lsr #0x1f
+ beq _0208B6F8
+ bl FUN_0208B71C
+_0208B6CC: ; 0x0208B6CC
+ ldr r0, [r5, #0x0]
+ mov r0, r0, lsl #0x9
+ movs r0, r0, lsr #0x1f
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_0208B804
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0208B6F8:
+ mov r1, r1, lsl #0x9
+ movs r1, r1, lsr #0x1f
+ bne _0208B708
+ bl FUN_0208B804
+_0208B708:
+ mov r0, r4
+ bl FUN_0208B71C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0208B71C
+FUN_0208B71C:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r6, [r7, #0x40]
+ mov r4, #0x0
+ ldr r5, [r6, #0x20]
+ ldr r0, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r5, #0x14]
+ ldr r2, [r7, #0x2c]
+ ldrb r1, [r0, #0xf]
+ mov r0, #0x14
+ mla r0, r1, r0, r2
+ bl FUN_0208C408
+ ldr r0, [r5, #0x14]
+ ldrh r0, [r0, #0x0]
+ mov r0, r0, lsl #0x17
+ mov r0, r0, lsr #0x1e
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _0208B7BC
+_0208B784:
+ b _0208B798
+_0208B788:
+ b _0208B7A0
+_0208B78C:
+ b _0208B7A8
+_0208B790:
+ b _0208B7B0
+_0208B794:
+ b _0208B7B8
+_0208B798:
+ ldr r4, _0208B7F4 ; =FUN_0208E258
+ b _0208B7BC
+_0208B7A0:
+ ldr r4, _0208B7F8 ; =FUN_0208D490
+ b _0208B7BC
+_0208B7A8:
+ ldr r4, _0208B7FC ; =FUN_0208CDF0
+ b _0208B7BC
+_0208B7B0:
+ ldr r4, _0208B800 ; =FUN_0208C4F4
+ b _0208B7BC
+_0208B7B8:
+ ldr r4, _0208B800 ; =FUN_0208C4F4
+_0208B7BC:
+ ldr r5, [r6, #0x14]
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_0208B7D0:
+ mov r0, r7
+ mov r1, r5
+ blx r4
+ ldr r5, [r5, #0x0]
+ cmp r5, #0x0
+ bne _0208B7D0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0208B7F4: .word FUN_0208E258
+_0208B7F8: .word FUN_0208D490
+_0208B7FC: .word FUN_0208CDF0
+_0208B800: .word FUN_0208C4F4
+
+ arm_func_start FUN_0208B804
+FUN_0208B804: ; 0x0208B804
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ ldr r6, [r7, #0x40]
+ ldr r2, [r7, #0x2c]
+ ldr r1, [r6, #0x20]
+ mov r0, #0x14
+ ldr r5, [r1, #0x0]
+ mov r4, #0x0
+ ldrb r1, [r5, #0x47]
+ mla r0, r1, r0, r2
+ bl FUN_0208C408
+_0208B830: ; 0x0208B830
+ ldr r0, [r5, #0x0]
+ mov r0, r0, lsl #0x1a
+ mov r0, r0, lsr #0x1e
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _0208B880
+_0208B848:
+ b _0208B85C
+_0208B84C:
+ b _0208B864
+_0208B850:
+ b _0208B86C
+_0208B854:
+ b _0208B874
+_0208B858:
+ b _0208B87C
+_0208B85C:
+ ldr r4, _0208B8D8 ; =FUN_0208E6AC
+ b _0208B880
+_0208B864:
+ ldr r4, _0208B8DC ; =FUN_0208DB70
+ b _0208B880
+_0208B86C:
+ ldr r4, _0208B8E0 ; =FUN_0208D140
+ b _0208B880
+_0208B874:
+ ldr r4, _0208B8E4 ; =FUN_0208C974
+ b _0208B880
+_0208B87C:
+ ldr r4, _0208B8E4 ; =FUN_0208C974
+_0208B880:
+ ldr r0, [r5, #0x0]
+ ldr r8, [r6, #0x8]
+ mov r0, r0, lsl #0x14
+ movs r0, r0, lsr #0x1f
+ ldrne r5, _0208B8E8 ; =FUN_0208C408
+ ldreq r5, _0208B8EC ; =FUN_0208C404
+ cmp r8, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r6, #0x14
+_0208B8A8:
+ ldrb r1, [r8, #0x2c]
+ ldr r0, [r7, #0x2c]
+ mla r0, r1, r6, r0
+ blx r5
+ mov r0, r7
+ mov r1, r8
+ blx r4
+ ldr r8, [r8, #0x0]
+ cmp r8, #0x0
+ bne _0208B8A8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208B8D8: .word FUN_0208E6AC
+_0208B8DC: .word FUN_0208DB70
+_0208B8E0: .word FUN_0208D140
+_0208B8E4: .word FUN_0208C974
+_0208B8E8: .word FUN_0208C408
+_0208B8EC: .word FUN_0208C404
+
+ arm_func_start FUN_0208B8F0
+FUN_0208B8F0:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x74
+ mov r9, r1
+ ldr r8, [r9, #0x20]
+ mov r10, r0
+ ldr r0, [r8, #0x14]
+ ldr r4, [r8, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [r4, #0x0]
+ mov r6, #0x0
+ str r0, [sp, #0x24]
+ ldrb r0, [r4, #0x46]
+ ldr r2, [r9, #0x90]
+ ldrh r7, [r8, #0x1c]
+ add r0, r0, #0x180
+ cmp r2, #0x0
+ str r0, [sp, #0x8]
+ beq _0208B944
+ mov r0, r9
+ mov r1, r6
+ blx r2
+_0208B944:
+ ldrh r1, [r4, #0x3c]
+ cmp r1, #0x0
+ beq _0208B95C
+ ldrh r0, [r9, #0x4c]
+ cmp r0, r1
+ bhs _0208B9A4
+_0208B95C:
+ ldrh r0, [r9, #0x4c]
+ ldrb r1, [r9, #0x80]
+ bl _s32_div_f
+_0208B968: ; 0x0208B968
+ cmp r1, #0x0
+ bne _0208B9A4
+ ldr r1, [r9, #0x24]
+ mov r0, r1, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ bne _0208B9A4
+ mov r0, r1, lsl #0x1e
+ movs r0, r0, lsr #0x1f
+ bne _0208B9A4
+ mov r0, r1, lsl #0x1b
+ movs r0, r0, lsr #0x1f
+ beq _0208B9A4
+ mov r0, r9
+ add r1, r10, #0x1c
+ bl FUN_0208F07C
+_0208B9A4:
+ ldr r0, [sp, #0x24]
+ mov r0, r0, lsl #0x17
+ movs r0, r0, lsr #0x1f
+ beq _0208B9D4
+ ldr r0, _0208C120 ; =FUN_02090540
+ add r6, r6, #0x1
+ str r0, [sp, #0x28]
+ ldr r0, [r8, #0x4]
+ ldrh r0, [r0, #0x8]
+ mov r0, r0, lsl #0x1f
+ mov r0, r0, lsr #0x1f
+ str r0, [sp, #0x2c]
+_0208B9D4:
+ ldr r0, [sp, #0x24]
+ mov r0, r0, lsl #0x16
+ movs r0, r0, lsr #0x1f
+ beq _0208BA20
+ ldr r3, [r8, #0x8]
+ ldrh r0, [r3, #0x8]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ bne _0208BA20
+ ldr r2, _0208C124 ; =FUN_02090374
+ add r1, sp, #0x28
+ str r2, [r1, r6, lsl #0x3]
+ ldrh r1, [r3, #0x8]
+ mov r2, r6, lsl #0x3
+ add r0, sp, #0x2c
+ mov r1, r1, lsl #0x1e
+ mov r1, r1, lsr #0x1f
+ add r6, r6, #0x1
+ str r1, [r0, r2]
+_0208BA20:
+ ldr r0, [sp, #0x24]
+ mov r0, r0, lsl #0x15
+ movs r0, r0, lsr #0x1f
+ beq _0208BA5C
+ ldr r2, _0208C128 ; =FUN_02090298
+ add r1, sp, #0x28
+ str r2, [r1, r6, lsl #0x3]
+ ldr r1, [r8, #0xc]
+ mov r2, r6, lsl #0x3
+ ldrh r1, [r1, #0x2]
+ add r0, sp, #0x2c
+ add r6, r6, #0x1
+ mov r1, r1, lsl #0x17
+ mov r1, r1, lsr #0x1f
+ str r1, [r0, r2]
+_0208BA5C:
+ ldr r0, [sp, #0x24]
+ mov r0, r0, lsl #0x14
+ movs r0, r0, lsr #0x1f
+ beq _0208BAA4
+ ldr r3, [r8, #0x10]
+ ldr r0, [r3, #0x8]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ bne _0208BAA4
+ ldr r2, _0208C12C ; =FUN_02090234
+ add r1, sp, #0x28
+ str r2, [r1, r6, lsl #0x3]
+ ldr r1, [r3, #0x8]
+ add r0, sp, #0x2c
+ mov r1, r1, lsl #0xe
+ mov r1, r1, lsr #0x1f
+ str r1, [r0, r6, lsl #0x3]
+ add r6, r6, #0x1
+_0208BAA4:
+ ldr r4, [r9, #0x8]
+ cmp r4, #0x0
+ beq _0208BDE0
+ ldr r0, [sp, #0x24]
+ add r11, sp, #0x28
+ mov r2, r0, lsl #0x10
+ mov r1, r0, lsl #0xf
+ mov r0, r2, lsr #0x1f
+ str r0, [sp, #0xc]
+ mov r0, r1, lsr #0x1f
+ str r0, [sp, #0x10]
+ mov r0, #0x0
+ str r0, [sp, #0x18]
+_0208BAD8:
+ ldr r0, [r4, #0x0]
+ ldrh r1, [r4, #0x2a]
+ str r0, [sp, #0x0]
+ ldrh r0, [r4, #0x26]
+ cmp r6, #0x0
+ ldr r5, [sp, #0x18]
+ mul r2, r1, r0
+ mov r1, r2, asr #0x8
+ strb r1, [sp, #0x20]
+ ldrh r1, [r4, #0x28]
+ ldrb r2, [r4, #0x2d]
+ mul r0, r1, r0
+ add r0, r2, r0, asr #0x8
+ strb r0, [sp, #0x21]
+ ble _0208BB40
+_0208BB14:
+ add r2, r11, r5, lsl #0x3
+ ldr r12, [r2, #0x4]
+ add r2, sp, #0x20
+ ldrb r2, [r2, r12]
+ ldr r3, [r11, r5, lsl #0x3]
+ mov r0, r4
+ mov r1, r8
+ blx r3
+ add r5, r5, #0x1
+ cmp r5, r6
+ blt _0208BB14
+_0208BB40:
+ ldr r0, [sp, #0x18]
+ ldr r5, [sp, #0x18]
+ str r0, [sp, #0x70]
+ str r0, [sp, #0x6c]
+ str r0, [sp, #0x68]
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ addne r0, r9, #0x28
+ addne r3, r4, #0x38
+ ldmneia r0, {r0-r2}
+ stmneia r3, {r0-r2}
+ cmp r7, #0x0
+ ble _0208BBA0
+_0208BB74:
+ ldr r2, [r8, #0x18]
+ mov r1, r4
+ add r0, r2, r5, lsl #0x3
+ ldr r12, [r2, r5, lsl #0x3]
+ ldr r0, [r0, #0x4]
+ add r2, sp, #0x68
+ mov r3, r9
+ blx r12
+ add r5, r5, #0x1
+ cmp r5, r7
+ blt _0208BB74
+_0208BBA0:
+ ldr r0, [sp, #0x10]
+ ldrh r1, [r4, #0x20]
+ cmp r0, #0x0
+ ldrsh r0, [r4, #0x22]
+ add r0, r1, r0
+ strh r0, [r4, #0x20]
+ ldr r1, [r4, #0x14]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r4, #0x14]
+ ldr r1, [r4, #0x18]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r4, #0x18]
+ ldr r1, [r4, #0x1c]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r4, #0x1c]
+ ldr r1, [r4, #0x14]
+ ldr r0, [sp, #0x68]
+ add r0, r1, r0
+ str r0, [r4, #0x14]
+ ldr r1, [r4, #0x18]
+ ldr r0, [sp, #0x6c]
+ add r0, r1, r0
+ str r0, [r4, #0x18]
+ ldr r1, [r4, #0x1c]
+ ldr r0, [sp, #0x70]
+ add r0, r1, r0
+ str r0, [r4, #0x1c]
+ ldr r1, [r4, #0x14]
+ ldr r0, [r9, #0x34]
+ ldr r2, [r4, #0x8]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r4, #0x8]
+ ldr r1, [r4, #0x18]
+ ldr r0, [r9, #0x38]
+ ldr r2, [r4, #0xc]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r4, #0xc]
+ ldr r1, [r4, #0x1c]
+ ldr r0, [r9, #0x3c]
+ ldr r2, [r4, #0x10]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r4, #0x10]
+ beq _0208BCD8
+ ldr r0, [sp, #0x4]
+ ldrh r2, [r4, #0x24]
+ ldrb r1, [r0, #0xd]
+ ldrh r3, [r4, #0x26]
+ mov r2, r2, lsl #0xc
+ mov r1, r1, lsl #0xc
+ mov r0, r3, lsl #0xc
+ smull r5, r3, r2, r1
+ mov r1, #0x800
+ adds r2, r5, r1
+ adc r1, r3, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ mov r1, r2, asr #0x8
+ subs r0, r0, r1
+ bmi _0208BCD8
+ ldr r1, [sp, #0x4]
+ mov r0, r0, asr #0xc
+ ldrb r1, [r1, #0xe]
+ bl _s32_div_f
+_0208BCC0: ; 0x0208BCC0
+ cmp r1, #0x0
+ bne _0208BCD8
+ mov r0, r4
+ mov r1, r9
+ add r2, r10, #0x1c
+ bl FUN_0208ED5C
+_0208BCD8:
+ ldr r0, [r9, #0x20]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x1
+ movs r0, r0, lsr #0x1f
+ beq _0208BD1C
+ ldrh r0, [r4, #0x2e]
+ ldr r1, [r10, #0x38]
+ bic r0, r0, #0xfc00
+ mov r1, r1, lsl #0x8
+ mov r1, r1, lsr #0x1a
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ and r1, r1, #0x3f
+ orr r0, r0, r1, lsl #0xa
+ strh r0, [r4, #0x2e]
+ b _0208BD9C
+_0208BD1C:
+ ldrh r0, [r4, #0x2e]
+ ldr r2, [r10, #0x38]
+ add r1, r10, #0x38
+ bic r0, r0, #0xfc00
+ mov r2, r2, lsl #0xe
+ mov r2, r2, lsr #0x1a
+ mov r2, r2, lsl #0x10
+ mov r2, r2, lsr #0x10
+ and r2, r2, #0x3f
+ orr r0, r0, r2, lsl #0xa
+ strh r0, [r4, #0x2e]
+ ldr r2, [r10, #0x38]
+ bic r0, r2, #0x3f000
+ mov r2, r2, lsl #0xe
+ mov r2, r2, lsr #0x1a
+ add r2, r2, #0x1
+ and r2, r2, #0x3f
+ orr r0, r0, r2, lsl #0xc
+ str r0, [r10, #0x38]
+ ldr r2, [r10, #0x38]
+ mov r0, r2, lsl #0xe
+ mov r3, r0, lsr #0x1a
+ mov r0, r2, lsl #0x14
+ cmp r3, r0, lsr #0x1a
+ bls _0208BD9C
+ mov r0, r2, lsl #0x1a
+ mov r0, r0, lsr #0x1a
+ and r0, r0, #0x3f
+ ldr r2, [r1, #0x0]
+ bic r2, r2, #0x3f000
+ orr r0, r2, r0, lsl #0xc
+ str r0, [r1, #0x0]
+_0208BD9C:
+ ldrh r0, [r4, #0x26]
+ add r0, r0, #0x1
+ strh r0, [r4, #0x26]
+ ldrh r1, [r4, #0x26]
+ ldrh r0, [r4, #0x24]
+ cmp r1, r0
+ bls _0208BDD0
+ mov r1, r4
+ add r0, r9, #0x8
+ bl FUN_020909D8
+ mov r1, r0
+ add r0, r10, #0x1c
+ bl FUN_02090AA4
+_0208BDD0:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ mov r4, r0
+ bne _0208BAD8
+_0208BDE0:
+ ldr r0, [sp, #0x24]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ beq _0208C0E8
+ ldr r0, [sp, #0x4]
+ mov r6, #0x0
+ ldrh r0, [r0, #0x0]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, lsr #0x1f
+ ldrne r0, _0208C130 ; =FUN_020901E8
+ strne r6, [sp, #0x4c]
+ strne r0, [sp, #0x48]
+ ldr r0, [sp, #0x4]
+ addne r6, r6, #0x1
+ ldrh r0, [r0, #0x0]
+ mov r0, r0, lsl #0x1d
+ movs r0, r0, lsr #0x1f
+ beq _0208BE44
+ ldr r2, _0208C134 ; =FUN_02090190
+ add r1, sp, #0x48
+ str r2, [r1, r6, lsl #0x3]
+ add r0, sp, #0x4c
+ mov r1, #0x0
+ str r1, [r0, r6, lsl #0x3]
+ add r6, r6, #0x1
+_0208BE44:
+ ldr r0, [sp, #0x4]
+ ldr r5, [r9, #0x14]
+ ldrh r0, [r0, #0x0]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ moveq r7, #0x0
+ cmp r5, #0x0
+ beq _0208C0E8
+ mov r0, #0x0
+ str r0, [sp, #0x1c]
+_0208BE6C:
+ ldrh r2, [r5, #0x26]
+ ldr r0, [r5, #0x0]
+ ldrh r1, [r5, #0x24]
+ str r0, [sp, #0x14]
+ mov r0, r2, lsl #0x8
+ bl _s32_div_f
+ ldr r4, [sp, #0x1c]
+ strb r0, [sp, #0x20]
+ cmp r6, #0x0
+ ble _0208BEBC
+ ldrb r11, [sp, #0x20]
+_0208BE98:
+ add r3, sp, #0x48
+ ldr r3, [r3, r4, lsl #0x3]
+ mov r0, r5
+ mov r1, r8
+ mov r2, r11
+ blx r3
+ add r4, r4, #0x1
+ cmp r4, r6
+ blt _0208BE98
+_0208BEBC:
+ ldr r0, [sp, #0x1c]
+ ldr r4, [sp, #0x1c]
+ str r0, [sp, #0x70]
+ str r0, [sp, #0x6c]
+ str r0, [sp, #0x68]
+ ldr r0, [sp, #0x4]
+ ldrh r0, [r0, #0x0]
+ mov r0, r0, lsl #0x1a
+ movs r0, r0, lsr #0x1f
+ addne r0, r9, #0x28
+ addne r3, r5, #0x38
+ ldmneia r0, {r0-r2}
+ stmneia r3, {r0-r2}
+ cmp r7, #0x0
+ ble _0208BF24
+_0208BEF8:
+ ldr r2, [r8, #0x18]
+ mov r1, r5
+ add r0, r2, r4, lsl #0x3
+ ldr r11, [r2, r4, lsl #0x3]
+ ldr r0, [r0, #0x4]
+ add r2, sp, #0x68
+ mov r3, r9
+ blx r11
+ add r4, r4, #0x1
+ cmp r4, r7
+ blt _0208BEF8
+_0208BF24:
+ ldrh r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x22]
+ add r0, r1, r0
+ strh r0, [r5, #0x20]
+ ldr r1, [r5, #0x14]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r5, #0x18]
+ ldr r1, [r5, #0x1c]
+ ldr r0, [sp, #0x8]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x9
+ str r0, [r5, #0x1c]
+ ldr r1, [r5, #0x14]
+ ldr r0, [sp, #0x68]
+ add r0, r1, r0
+ str r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ ldr r0, [sp, #0x6c]
+ add r0, r1, r0
+ str r0, [r5, #0x18]
+ ldr r1, [r5, #0x1c]
+ ldr r0, [sp, #0x70]
+ add r0, r1, r0
+ str r0, [r5, #0x1c]
+ ldr r1, [r5, #0x14]
+ ldr r0, [r9, #0x34]
+ ldr r2, [r5, #0x8]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r5, #0x8]
+ ldr r1, [r5, #0x18]
+ ldr r0, [r9, #0x38]
+ ldr r2, [r5, #0xc]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r5, #0xc]
+ ldr r1, [r5, #0x1c]
+ ldr r0, [r9, #0x3c]
+ ldr r2, [r5, #0x10]
+ add r0, r1, r0
+ add r0, r2, r0
+ str r0, [r5, #0x10]
+ ldr r0, [r9, #0x20]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ movs r0, r0, lsr #0x1f
+ beq _0208C028
+ ldr r0, [r10, #0x38]
+ ldrh r1, [r5, #0x2e]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x1a
+ bic r1, r1, #0xfc00
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ and r0, r0, #0x3f
+ orr r0, r1, r0, lsl #0xa
+ strh r0, [r5, #0x2e]
+ b _0208C0A8
+_0208C028:
+ ldr r0, [r10, #0x38]
+ ldrh r1, [r5, #0x2e]
+ mov r0, r0, lsl #0xe
+ mov r0, r0, lsr #0x1a
+ bic r1, r1, #0xfc00
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ and r0, r0, #0x3f
+ orr r0, r1, r0, lsl #0xa
+ strh r0, [r5, #0x2e]
+ ldr r1, [r10, #0x38]
+ add r0, r10, #0x38
+ bic r2, r1, #0x3f000
+ mov r1, r1, lsl #0xe
+ mov r1, r1, lsr #0x1a
+ add r1, r1, #0x1
+ and r1, r1, #0x3f
+ orr r1, r2, r1, lsl #0xc
+ str r1, [r10, #0x38]
+ ldr r2, [r10, #0x38]
+ mov r1, r2, lsl #0xe
+ mov r3, r1, lsr #0x1a
+ mov r1, r2, lsl #0x14
+ cmp r3, r1, lsr #0x1a
+ bls _0208C0A8
+ mov r1, r2, lsl #0x1a
+ mov r1, r1, lsr #0x1a
+ and r1, r1, #0x3f
+ ldr r2, [r0, #0x0]
+ bic r2, r2, #0x3f000
+ orr r1, r2, r1, lsl #0xc
+ str r1, [r0, #0x0]
+_0208C0A8:
+ ldrh r0, [r5, #0x26]
+ add r0, r0, #0x1
+ strh r0, [r5, #0x26]
+ ldrh r1, [r5, #0x26]
+ ldrh r0, [r5, #0x24]
+ cmp r1, r0
+ bls _0208C0DC
+ mov r1, r5
+ add r0, r9, #0x14
+ bl FUN_020909D8
+ mov r1, r0
+ add r0, r10, #0x1c
+ bl FUN_02090AA4
+_0208C0DC:
+ ldr r5, [sp, #0x14]
+ movs r0, r5
+ bne _0208BE6C
+_0208C0E8:
+ ldrh r0, [r9, #0x4c]
+ add r0, r0, #0x1
+ strh r0, [r9, #0x4c]
+ ldr r2, [r9, #0x90]
+ cmp r2, #0x0
+ addeq sp, sp, #0x74
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, r9
+ mov r1, #0x1
+ blx r2
+ add sp, sp, #0x74
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0208C120: .word FUN_02090540
+_0208C124: .word FUN_02090374
+_0208C128: .word FUN_02090298
+_0208C12C: .word FUN_02090234
+_0208C130: .word FUN_020901E8
+_0208C134: .word FUN_02090190
+
+ arm_func_start FUN_0208C138
+FUN_0208C138:
+ stmdb sp!, {r4-r6,lr}
+ str r1, [r0, #0x20]
+ mov r3, #0x0
+ str r3, [r0, #0x24]
+ ldr r1, [r0, #0x20]
+ ldr r5, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ ldr r4, _0208C3FC ; =0x00007FFF
+ ldr r1, [r1, #0x4]
+ ldr ip, _0208C400 ; =0x0007FFFF
+ add r1, r5, r1
+ str r1, [r0, #0x28]
+ ldr r1, [r0, #0x20]
+ ldr r6, [r2, #0x4]
+ ldr r1, [r1, #0x0]
+ mov lr, #0x80000000
+ ldr r5, [r1, #0x8]
+ mov r1, #0x1000
+ add r5, r6, r5
+ str r5, [r0, #0x2c]
+ ldr r5, [r0, #0x20]
+ ldr r6, [r2, #0x8]
+ ldr r2, [r5, #0x0]
+ ldr r2, [r2, #0xc]
+ add r2, r6, r2
+ str r2, [r0, #0x30]
+ str r3, [r0, #0x40]
+ str r3, [r0, #0x44]
+ str r3, [r0, #0x48]
+ str r3, [r0, #0x3c]
+ ldr r2, [r0, #0x3c]
+ str r2, [r0, #0x38]
+ ldr r2, [r0, #0x38]
+ str r2, [r0, #0x34]
+ strh r3, [r0, #0x4c]
+ strh r3, [r0, #0x4e]
+ ldr r2, [r0, #0x20]
+ ldr r5, [r2, #0x0]
+ ldrh r3, [r5, #0x1c]
+ ldrh r2, [r5, #0x1e]
+ strh r3, [r0, #0x50]
+ strh r2, [r0, #0x52]
+ ldrh r2, [r5, #0x20]
+ strh r2, [r0, #0x54]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldrh r2, [r2, #0x38]
+ strh r2, [r0, #0x56]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x10]
+ str r2, [r0, #0x58]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x14]
+ str r2, [r0, #0x5c]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x18]
+ str r2, [r0, #0x60]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x24]
+ str r2, [r0, #0x64]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x28]
+ str r2, [r0, #0x68]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x2c]
+ str r2, [r0, #0x6c]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldrh r2, [r2, #0x3e]
+ strh r2, [r0, #0x70]
+ strh r4, [r0, #0x72]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldrb r2, [r2, #0x44]
+ strb r2, [r0, #0x80]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldrb r2, [r2, #0x45]
+ strb r2, [r0, #0x81]
+ ldr r2, [r0, #0x80]
+ bic r2, r2, #0x70000
+ str r2, [r0, #0x80]
+ ldr r2, [r0, #0x80]
+ and r2, r2, r12
+ str r2, [r0, #0x80]
+ str lr, [r0, #0x74]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x48]
+ mov r2, r2, lsl #0x6
+ mov r2, r2, lsr #0x1e
+ mov r2, r1, lsl r2
+ strh r2, [r0, #0x78]
+ ldr r2, [r0, #0x20]
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x48]
+ mov r2, r2, lsl #0x4
+ mov r2, r2, lsr #0x1e
+ mov r1, r1, lsl r2
+ strh r1, [r0, #0x7a]
+ ldr r1, [r0, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x4c]
+ mov r1, r1, lsl #0x1f
+ movs r1, r1, lsr #0x1f
+ ldrnesh r2, [r0, #0x78]
+ mvnne r1, #0x0
+ smulbbne r1, r2, r1
+ strneh r1, [r0, #0x78]
+ ldr r1, [r0, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x4c]
+ mov r1, r1, lsl #0x1e
+ movs r1, r1, lsr #0x1f
+ ldrnesh r2, [r0, #0x7a]
+ mvnne r1, #0x0
+ smulbbne r1, r2, r1
+ strneh r1, [r0, #0x7a]
+ ldr r2, [r0, #0x20]
+ ldr r1, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ mov r1, r1, lsl #0xf
+ movs r1, r1, lsr #0x1f
+ beq _0208C3C0
+ ldr r1, [r2, #0x14]
+ mov r2, #0x1000
+ ldr r1, [r1, #0x10]
+ mov r1, r1, lsl #0x1e
+ mov r1, r1, lsr #0x1e
+ mov r1, r2, lsl r1
+ strh r1, [r0, #0x7c]
+ ldr r1, [r0, #0x20]
+ ldr r1, [r1, #0x14]
+ ldr r1, [r1, #0x10]
+ mov r1, r1, lsl #0x1c
+ mov r1, r1, lsr #0x1e
+ mov r1, r2, lsl r1
+ strh r1, [r0, #0x7e]
+ ldr r1, [r0, #0x20]
+ ldr r1, [r1, #0x14]
+ ldr r1, [r1, #0x10]
+ mov r1, r1, lsl #0x1b
+ movs r1, r1, lsr #0x1f
+ ldrnesh r2, [r0, #0x7c]
+ mvnne r1, #0x0
+ smulbbne r1, r2, r1
+ strneh r1, [r0, #0x7c]
+ ldr r1, [r0, #0x20]
+ ldr r1, [r1, #0x14]
+ ldr r1, [r1, #0x10]
+ mov r1, r1, lsl #0x1a
+ movs r1, r1, lsr #0x1f
+ ldrnesh r2, [r0, #0x7e]
+ mvnne r1, #0x0
+ smulbbne r1, r2, r1
+ strneh r1, [r0, #0x7e]
+_0208C3C0:
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x14]
+ ldr r1, [r0, #0x14]
+ str r1, [r0, #0x8]
+ str r2, [r0, #0x18]
+ ldr r1, [r0, #0x18]
+ str r1, [r0, #0xc]
+ str r2, [r0, #0x90]
+ str r2, [r0, #0x94]
+ str r2, [r0, #0x98]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0208C3FC: .word 0x00007FFF
+_0208C400: .word 0x0007FFFF
+
+ arm_func_start FUN_0208C404
+FUN_0208C404: ; 0x0208C404
+ bx lr
+
+ arm_func_start FUN_0208C408
+FUN_0208C408:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r7, [r0, #0xc]
+ ldr r3, _0208C4E0 ; =0x040004A8
+ str r7, [sp, #0x0]
+ ldr r1, [r0, #0x4]
+ mov r2, r7, lsl #0x1c
+ mov lr, r2, lsr #0x1c
+ mov r1, r1, lsr #0x3
+ orr r12, r1, lr, lsl #0x1a
+ mov r4, r7, lsl #0x18
+ mov r5, r7, lsl #0x14
+ mov r2, r7, lsl #0xf
+ mov r4, r4, lsr #0x1c
+ orr r12, r12, #0x40000000
+ mov r6, r7, lsl #0x12
+ orr r12, r12, r4, lsl #0x14
+ mov r5, r5, lsr #0x1c
+ mov r1, r7, lsl #0x10
+ orr r12, r12, r5, lsl #0x17
+ mov r4, r6, lsr #0x1e
+ mov r5, r1, lsr #0x1e
+ orr r1, r12, r4, lsl #0x10
+ mov r2, r2, lsr #0x1f
+ orr r1, r1, r5, lsl #0x12
+ orr r1, r1, r2, lsl #0x1d
+ str r1, [r3, #0x0]
+ cmp lr, #0x2
+ moveq r1, #0x1
+ movne r1, #0x0
+ ldr r2, [r0, #0x8]
+ rsb r1, r1, #0x4
+ mov r2, r2, lsr r1
+ ldr r1, _0208C4E4 ; =0x040004AC
+ ldr ip, _0208C4E8 ; =0x04000440
+ str r2, [r1, #0x0]
+ mov r2, #0x3
+ ldr r1, _0208C4EC ; =0x04000454
+ str r2, [r12, #0x0]
+ mov r3, #0x0
+ str r3, [r1, #0x0]
+ ldrh r1, [r0, #0x10]
+ ldrh r2, [r0, #0x12]
+ ldr r0, _0208C4F0 ; =0x0400046C
+ mov r1, r1, lsl #0xc
+ str r1, [r0, #0x0]
+ mov r1, r2, lsl #0xc
+ str r1, [r0, #0x0]
+ str r3, [r0, #0x0]
+ mov r0, #0x1
+ str r0, [r12, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0208C4E0: .word 0x040004A8
+_0208C4E4: .word 0x040004AC
+_0208C4E8: .word 0x04000440
+_0208C4EC: .word 0x04000454
+_0208C4F0: .word 0x0400046C
+
+ arm_func_start FUN_0208C4F4
+FUN_0208C4F4: ; 0x0208C4F4
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0xf0
+ mov r4, r1
+ ldrh r2, [r4, #0x2e]
+ mov r5, r0
+ ldr r0, [r5, #0x3c]
+ mov r1, r2, lsl #0x16
+ mov r3, r2, lsl #0x1b
+ mov r1, r1, lsr #0x1b
+ mov r3, r3, lsr #0x1b
+ add r1, r1, #0x1
+ mul r6, r3, r1
+ mov r1, r2, lsl #0x10
+ movs r2, r6, asr #0x5
+ mov r1, r1, lsr #0x1a
+ orr r0, r0, #0xc0
+ orr r1, r0, r1, lsl #0x18
+ ldr r0, _0208C950 ; =0x040004A4
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x0]
+ addeq sp, sp, #0xf0
+ ldr r0, [r0, #0x0]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r5, #0x40]
+ ldrh r1, [r4, #0x20]
+ ldr r0, [r0, #0x20]
+ ldr r6, _0208C954 ; =0x020FFA38
+ ldr r0, [r0, #0x14]
+ mov r1, r1, asr #0x4
+ ldrh r0, [r0, #0x0]
+ mov r2, r1, lsl #0x1
+ add r1, r2, #0x1
+ mov r7, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ mov r0, r0, lsl #0x15
+ mov r3, r0, lsr #0x1e
+ ldr r2, _0208C958 ; =0x02106160
+ ldrsh r0, [r6, r7]
+ ldr r3, [r2, r3, lsl #0x2]
+ ldrsh r1, [r6, r1]
+ add r2, sp, #0x30
+ blx r3
+ add r0, sp, #0xc0
+ bl MTX_Identity43_
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r0, [r0, #0x14]
+ ldr r0, [r0, #0x10]
+ mov r0, r0, lsl #0x19
+ movs r0, r0, lsr #0x1f
+ bne _0208C5D4
+ add r1, sp, #0x90
+ add r0, r4, #0x14
+ bl VEC_Normalize
+ b _0208C604
+_0208C5D4:
+ add r1, sp, #0x90
+ add r0, r4, #0x8
+ bl VEC_Normalize
+ ldr r2, [sp, #0x90]
+ ldr r1, [sp, #0x94]
+ ldr r0, [sp, #0x98]
+ rsb r2, r2, #0x0
+ rsb r1, r1, #0x0
+ rsb r0, r0, #0x0
+ str r2, [sp, #0x90]
+ str r1, [sp, #0x94]
+ str r0, [sp, #0x98]
+_0208C604:
+ mov r3, #0x0
+ mov r2, #0x1000
+ add r0, sp, #0x90
+ add r1, sp, #0xb4
+ str r3, [sp, #0xb4]
+ str r2, [sp, #0xb8]
+ str r3, [sp, #0xbc]
+ bl VEC_DotProduct
+ ldr r1, _0208C95C ; =0x00000CCD
+ cmp r0, r1
+ bgt _0208C63C
+ ldr r1, _0208C960 ; =0xFFFFF333
+ cmp r0, r1
+ bge _0208C650
+_0208C63C:
+ mov r0, #0x0
+ mov r1, #0x1000
+ str r1, [sp, #0xb4]
+ str r0, [sp, #0xb8]
+ str r0, [sp, #0xbc]
+_0208C650:
+ add r0, sp, #0x90
+ add r1, sp, #0xb4
+ add r2, sp, #0x9c
+ bl VEC_CrossProduct
+ add r0, sp, #0x90
+ add r1, sp, #0x9c
+ add r2, sp, #0xa8
+ bl VEC_CrossProduct
+ ldr r7, [sp, #0x9c]
+ ldr r6, [sp, #0xa0]
+ ldr r3, [sp, #0xa4]
+ ldr r0, [sp, #0x90]
+ ldr r1, [sp, #0x94]
+ ldr r2, [sp, #0x98]
+ str r7, [sp, #0xc0]
+ ldr r7, [sp, #0xa8]
+ str r6, [sp, #0xc4]
+ ldr r6, [sp, #0xac]
+ str r3, [sp, #0xc8]
+ ldr r3, [sp, #0xb0]
+ str r0, [sp, #0xcc]
+ str r1, [sp, #0xd0]
+ add r0, sp, #0x30
+ str r2, [sp, #0xd4]
+ add r1, sp, #0xc0
+ mov r2, r0
+ str r7, [sp, #0xd8]
+ str r6, [sp, #0xdc]
+ str r3, [sp, #0xe0]
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0x30]
+ ldr r0, [r0, #0x20]
+ mov r12, #0x800
+ ldr r0, [r0, #0x0]
+ mov r3, r2, asr #0x1f
+ ldrsh r1, [r0, #0x30]
+ ldr r0, [r0, #0x48]
+ mov lr, #0x0
+ smull r6, r1, r2, r1
+ adds r7, r6, r12
+ adc r6, r1, #0x0
+ mov r0, r0, lsl #0x1
+ mov r1, r7, lsr #0xc
+ orr r1, r1, r6, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ beq _0208C720
+ cmp r0, #0x1
+ beq _0208C75C
+ cmp r0, #0x2
+ beq _0208C778
+ b _0208C79C
+_0208C720:
+ ldrsh r0, [r4, #0x34]
+ mov r8, r0, asr #0x1f
+ umull r7, r6, r2, r0
+ mla r6, r2, r8, r6
+ smull r8, r2, r1, r0
+ adds r1, r8, r12
+ adc r8, r2, lr
+ adds r2, r7, r12
+ mla r6, r3, r0, r6
+ mov r1, r1, lsr #0xc
+ adc r0, r6, lr
+ mov r2, r2, lsr #0xc
+ orr r1, r1, r8, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ b _0208C79C
+_0208C75C:
+ ldrsh r0, [r4, #0x34]
+ smull r3, r0, r1, r0
+ adds r1, r3, r12
+ adc r0, r0, lr
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ b _0208C79C
+_0208C778:
+ ldrsh r6, [r4, #0x34]
+ mov r0, r6, asr #0x1f
+ umull r8, r7, r2, r6
+ mla r7, r2, r0, r7
+ adds r2, r8, r12
+ mla r7, r3, r6, r7
+ adc r0, r7, lr
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+_0208C79C:
+ add r0, sp, #0x60
+ mov r3, r2
+ blx MTX_Scale43_
+ add r0, sp, #0x30
+ add r1, sp, #0x60
+ add r2, sp, #0x0
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r3, [r0, #0x0]
+ ldr r0, [r3, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208C818
+ ldr r1, [r4, #0x8]
+ ldr r0, [r4, #0x38]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x3c]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [r4, #0x10]
+ ldr r0, [r4, #0x40]
+ add r0, r1, r0
+ str r0, [sp, #0x2c]
+ ldr r0, [r5, #0x44]
+ bl G3_LoadMtx43
+_0208C80C: ; 0x0208C80C
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+ b _0208C8BC
+_0208C818:
+ ldr r2, [r4, #0x8]
+ ldr r1, [r4, #0x38]
+ ldr r0, [r3, #0x4]
+ add r1, r2, r1
+ sub r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r4, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0x8]
+ ldr r0, _0208C964 ; =0x04000454
+ sub r1, r2, r1
+ str r1, [sp, #0x28]
+ ldr r1, [r5, #0x40]
+ ldr r3, [r4, #0x10]
+ ldr r1, [r1, #0x20]
+ ldr r2, [r4, #0x40]
+ ldr r1, [r1, #0x0]
+ add r3, r3, r2
+ ldr r2, [r1, #0xc]
+ mov r1, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x2c]
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x40]
+ ldr r0, _0208C968 ; =0x04000470
+ ldr r1, [r1, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r3, [r1, #0xc]
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x0]
+ str r3, [r0, #0x0]
+ ldr r0, [r5, #0x44]
+ bl G3_MultMtx43
+_0208C8B4: ; 0x0208C8B4
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+_0208C8BC:
+ ldr r0, [r5, #0x40]
+ ldrh r4, [r4, #0x36]
+ ldrh r12, [r0, #0x72]
+ mov r2, #0x0
+ and r1, r4, #0x1f
+ and r0, r12, #0x1f
+ mul r3, r1, r0
+ and r1, r4, #0x3e0
+ and r0, r12, #0x3e0
+ mul r0, r1, r0
+ and r4, r4, #0x7c00
+ and r1, r12, #0x7c00
+ mul r12, r4, r1
+ mov r1, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r12, asr #0x19
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ ldr r1, _0208C96C ; =0x04000480
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r5, [r5, #0x40]
+ ldr r4, _0208C970 ; =0x02106158
+ ldr r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x7c]
+ ldr r3, [r1, #0x14]
+ ldrsh r1, [r5, #0x7e]
+ ldrh r5, [r3, #0x0]
+ mov r3, r2
+ mov r5, r5, lsl #0x14
+ mov r5, r5, lsr #0x1f
+ ldr r4, [r4, r5, lsl #0x2]
+ blx r4
+ add sp, sp, #0xf0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208C950: .word 0x040004A4
+_0208C954: .word 0x020FFA38
+_0208C958: .word 0x02106160
+_0208C95C: .word 0x00000CCD
+_0208C960: .word 0xFFFFF333
+_0208C964: .word 0x04000454
+_0208C968: .word 0x04000470
+_0208C96C: .word 0x04000480
+_0208C970: .word 0x02106158
+
+ arm_func_start FUN_0208C974
+FUN_0208C974: ; 0x0208C974
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0xf0
+ mov r4, r1
+ ldrh r2, [r4, #0x2e]
+ mov r5, r0
+ ldr r0, [r5, #0x3c]
+ mov r1, r2, lsl #0x16
+ mov r3, r2, lsl #0x1b
+ mov r1, r1, lsr #0x1b
+ mov r3, r3, lsr #0x1b
+ add r1, r1, #0x1
+ mul r6, r3, r1
+ mov r1, r2, lsl #0x10
+ movs r2, r6, asr #0x5
+ mov r1, r1, lsr #0x1a
+ orr r0, r0, #0xc0
+ orr r1, r0, r1, lsl #0x18
+ ldr r0, _0208CDCC ; =0x040004A4
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x0]
+ addeq sp, sp, #0xf0
+ ldr r0, [r0, #0x0]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r5, #0x40]
+ ldrh r1, [r4, #0x20]
+ ldr r0, [r0, #0x20]
+ ldr r6, _0208CDD0 ; =0x020FFA38
+ ldr r0, [r0, #0x0]
+ mov r1, r1, asr #0x4
+ mov r2, r1, lsl #0x1
+ ldr r0, [r0, #0x0]
+ add r1, r2, #0x1
+ mov r7, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ mov r0, r0, lsl #0xd
+ mov r3, r0, lsr #0x1e
+ ldr r2, _0208CDD4 ; =0x02106160
+ ldrsh r0, [r6, r7]
+ ldr r3, [r2, r3, lsl #0x2]
+ ldrsh r1, [r6, r1]
+ add r2, sp, #0x30
+ blx r3
+ add r0, sp, #0xc0
+ bl MTX_Identity43_
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x48]
+ movs r0, r0, lsr #0x1f
+ bne _0208CA50
+ add r1, sp, #0x90
+ add r0, r4, #0x14
+ bl VEC_Normalize
+ b _0208CA80
+_0208CA50:
+ add r1, sp, #0x90
+ add r0, r4, #0x8
+ bl VEC_Normalize
+ ldr r2, [sp, #0x90]
+ ldr r1, [sp, #0x94]
+ ldr r0, [sp, #0x98]
+ rsb r2, r2, #0x0
+ rsb r1, r1, #0x0
+ rsb r0, r0, #0x0
+ str r2, [sp, #0x90]
+ str r1, [sp, #0x94]
+ str r0, [sp, #0x98]
+_0208CA80:
+ mov r3, #0x0
+ mov r2, #0x1000
+ add r0, sp, #0x90
+ add r1, sp, #0xb4
+ str r3, [sp, #0xb4]
+ str r2, [sp, #0xb8]
+ str r3, [sp, #0xbc]
+ bl VEC_DotProduct
+ ldr r1, _0208CDD8 ; =0x00000CCD
+ cmp r0, r1
+ bgt _0208CAB8
+ ldr r1, _0208CDDC ; =0xFFFFF333
+ cmp r0, r1
+ bge _0208CACC
+_0208CAB8:
+ mov r0, #0x0
+ mov r1, #0x1000
+ str r1, [sp, #0xb4]
+ str r0, [sp, #0xb8]
+ str r0, [sp, #0xbc]
+_0208CACC:
+ add r0, sp, #0x90
+ add r1, sp, #0xb4
+ add r2, sp, #0x9c
+ bl VEC_CrossProduct
+ add r0, sp, #0x90
+ add r1, sp, #0x9c
+ add r2, sp, #0xa8
+ bl VEC_CrossProduct
+ ldr r7, [sp, #0x9c]
+ ldr r6, [sp, #0xa0]
+ ldr r3, [sp, #0xa4]
+ ldr r0, [sp, #0x90]
+ ldr r1, [sp, #0x94]
+ ldr r2, [sp, #0x98]
+ str r7, [sp, #0xc0]
+ ldr r7, [sp, #0xa8]
+ str r6, [sp, #0xc4]
+ ldr r6, [sp, #0xac]
+ str r3, [sp, #0xc8]
+ ldr r3, [sp, #0xb0]
+ str r0, [sp, #0xcc]
+ str r1, [sp, #0xd0]
+ add r0, sp, #0x30
+ str r2, [sp, #0xd4]
+ add r1, sp, #0xc0
+ mov r2, r0
+ str r7, [sp, #0xd8]
+ str r6, [sp, #0xdc]
+ str r3, [sp, #0xe0]
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0x30]
+ ldr r0, [r0, #0x20]
+ mov r12, #0x800
+ ldr r0, [r0, #0x0]
+ mov r3, r2, asr #0x1f
+ ldrsh r1, [r0, #0x30]
+ ldr r0, [r0, #0x48]
+ mov lr, #0x0
+ smull r6, r1, r2, r1
+ adds r7, r6, r12
+ adc r6, r1, #0x0
+ mov r0, r0, lsl #0x1
+ mov r1, r7, lsr #0xc
+ orr r1, r1, r6, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ beq _0208CB9C
+ cmp r0, #0x1
+ beq _0208CBD8
+ cmp r0, #0x2
+ beq _0208CBF4
+ b _0208CC18
+_0208CB9C:
+ ldrsh r0, [r4, #0x34]
+ mov r8, r0, asr #0x1f
+ umull r7, r6, r2, r0
+ mla r6, r2, r8, r6
+ smull r8, r2, r1, r0
+ adds r1, r8, r12
+ adc r8, r2, lr
+ adds r2, r7, r12
+ mla r6, r3, r0, r6
+ mov r1, r1, lsr #0xc
+ adc r0, r6, lr
+ mov r2, r2, lsr #0xc
+ orr r1, r1, r8, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ b _0208CC18
+_0208CBD8:
+ ldrsh r0, [r4, #0x34]
+ smull r3, r0, r1, r0
+ adds r1, r3, r12
+ adc r0, r0, lr
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ b _0208CC18
+_0208CBF4:
+ ldrsh r6, [r4, #0x34]
+ mov r0, r6, asr #0x1f
+ umull r8, r7, r2, r6
+ mla r7, r2, r0, r7
+ adds r2, r8, r12
+ mla r7, r3, r6, r7
+ adc r0, r7, lr
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+_0208CC18:
+ add r0, sp, #0x60
+ mov r3, r2
+ blx MTX_Scale43_
+ add r0, sp, #0x60
+ add r1, sp, #0x30
+ add r2, sp, #0x0
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r3, [r0, #0x0]
+ ldr r0, [r3, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208CC94
+ ldr r1, [r4, #0x8]
+ ldr r0, [r4, #0x38]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x3c]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [r4, #0x10]
+ ldr r0, [r4, #0x40]
+ add r0, r1, r0
+ str r0, [sp, #0x2c]
+ ldr r0, [r5, #0x44]
+ bl G3_LoadMtx43
+_0208CC88: ; 0x0208CC88
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+ b _0208CD38
+_0208CC94:
+ ldr r2, [r4, #0x8]
+ ldr r1, [r4, #0x38]
+ ldr r0, [r3, #0x4]
+ add r1, r2, r1
+ sub r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r4, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0x8]
+ ldr r0, _0208CDE0 ; =0x04000454
+ sub r1, r2, r1
+ str r1, [sp, #0x28]
+ ldr r1, [r5, #0x40]
+ ldr r3, [r4, #0x10]
+ ldr r1, [r1, #0x20]
+ ldr r2, [r4, #0x40]
+ ldr r1, [r1, #0x0]
+ add r3, r3, r2
+ ldr r2, [r1, #0xc]
+ mov r1, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x2c]
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x40]
+ ldr r0, _0208CDE4 ; =0x04000470
+ ldr r1, [r1, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r3, [r1, #0xc]
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x0]
+ str r3, [r0, #0x0]
+ ldr r0, [r5, #0x44]
+ bl G3_MultMtx43
+_0208CD30: ; 0x0208CD30
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+_0208CD38:
+ ldr r0, [r5, #0x40]
+ ldrh r4, [r4, #0x36]
+ ldrh r12, [r0, #0x72]
+ ldr r1, _0208CDE8 ; =0x04000480
+ and r2, r4, #0x1f
+ and r0, r12, #0x1f
+ mul r3, r2, r0
+ and r2, r4, #0x3e0
+ and r0, r12, #0x3e0
+ mul r0, r2, r0
+ and r4, r4, #0x7c00
+ and r2, r12, #0x7c00
+ mul r12, r4, r2
+ mov r2, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r12, asr #0x19
+ orr r0, r2, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r2, [r5, #0x40]
+ ldr r4, _0208CDEC ; =0x02106158
+ ldr r1, [r2, #0x20]
+ ldrsh r0, [r2, #0x78]
+ ldr r12, [r1, #0x0]
+ ldrsh r1, [r2, #0x7a]
+ ldr r3, [r12, #0x0]
+ ldrsh r2, [r12, #0x50]
+ mov r3, r3, lsl #0xc
+ mov r5, r3, lsr #0x1f
+ ldrsh r3, [r12, #0x52]
+ ldr r4, [r4, r5, lsl #0x2]
+ blx r4
+ add sp, sp, #0xf0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208CDCC: .word 0x040004A4
+_0208CDD0: .word 0x020FFA38
+_0208CDD4: .word 0x02106160
+_0208CDD8: .word 0x00000CCD
+_0208CDDC: .word 0xFFFFF333
+_0208CDE0: .word 0x04000454
+_0208CDE4: .word 0x04000470
+_0208CDE8: .word 0x04000480
+_0208CDEC: .word 0x02106158
+
+ arm_func_start FUN_0208CDF0
+FUN_0208CDF0: ; 0x0208CDF0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x90
+ mov r4, r1
+ ldrh r2, [r4, #0x2e]
+ mov r5, r0
+ ldr r0, [r5, #0x3c]
+ mov r1, r2, lsl #0x16
+ mov r3, r2, lsl #0x1b
+ mov r1, r1, lsr #0x1b
+ mov r3, r3, lsr #0x1b
+ add r1, r1, #0x1
+ mul r6, r3, r1
+ mov r1, r2, lsl #0x10
+ movs r2, r6, asr #0x5
+ mov r1, r1, lsr #0x1a
+ orr r0, r0, #0xc0
+ orr r1, r0, r1, lsl #0x18
+ ldr r0, _0208D124 ; =0x040004A4
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x0]
+ addeq sp, sp, #0x90
+ ldr r0, [r0, #0x0]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r5, #0x40]
+ ldrh r1, [r4, #0x20]
+ ldr r0, [r0, #0x20]
+ ldr r6, _0208D128 ; =0x020FFA38
+ ldr r0, [r0, #0x14]
+ mov r1, r1, asr #0x4
+ ldrh r0, [r0, #0x0]
+ mov r2, r1, lsl #0x1
+ add r1, r2, #0x1
+ mov r7, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ mov r0, r0, lsl #0x15
+ mov r3, r0, lsr #0x1e
+ ldr r2, _0208D12C ; =0x02106160
+ ldrsh r0, [r6, r7]
+ ldr r3, [r2, r3, lsl #0x2]
+ ldrsh r1, [r6, r1]
+ add r2, sp, #0x30
+ blx r3
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0x30]
+ ldr r0, [r0, #0x20]
+ mov r12, #0x800
+ ldr r0, [r0, #0x0]
+ mov r3, r2, asr #0x1f
+ ldrsh r1, [r0, #0x30]
+ ldr r0, [r0, #0x48]
+ mov lr, #0x0
+ smull r6, r1, r2, r1
+ adds r7, r6, r12
+ adc r6, r1, #0x0
+ mov r1, r7, lsr #0xc
+ mov r0, r0, lsl #0x1
+ orr r1, r1, r6, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ beq _0208CEF4
+ cmp r0, #0x1
+ beq _0208CF30
+ cmp r0, #0x2
+ beq _0208CF4C
+ b _0208CF70
+_0208CEF4:
+ ldrsh r0, [r4, #0x34]
+ mov r8, r0, asr #0x1f
+ umull r7, r6, r2, r0
+ mla r6, r2, r8, r6
+ smull r8, r2, r1, r0
+ adds r1, r8, r12
+ adc r8, r2, lr
+ adds r2, r7, r12
+ mla r6, r3, r0, r6
+ mov r1, r1, lsr #0xc
+ adc r0, r6, lr
+ mov r2, r2, lsr #0xc
+ orr r1, r1, r8, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ b _0208CF70
+_0208CF30:
+ ldrsh r0, [r4, #0x34]
+ smull r3, r0, r1, r0
+ adds r1, r3, r12
+ adc r0, r0, lr
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ b _0208CF70
+_0208CF4C:
+ ldrsh r6, [r4, #0x34]
+ mov r0, r6, asr #0x1f
+ umull r8, r7, r2, r6
+ mla r7, r2, r0, r7
+ adds r2, r8, r12
+ mla r7, r3, r6, r7
+ adc r0, r7, lr
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+_0208CF70:
+ add r0, sp, #0x60
+ mov r3, r2
+ blx MTX_Scale43_
+ add r0, sp, #0x30
+ add r1, sp, #0x60
+ add r2, sp, #0x0
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r3, [r0, #0x0]
+ ldr r0, [r3, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208CFEC
+ ldr r1, [r4, #0x8]
+ ldr r0, [r4, #0x38]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x3c]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [r4, #0x10]
+ ldr r0, [r4, #0x40]
+ add r0, r1, r0
+ str r0, [sp, #0x2c]
+ ldr r0, [r5, #0x44]
+ bl G3_LoadMtx43
+_0208CFE0: ; 0x0208CFE0
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+ b _0208D090
+_0208CFEC:
+ ldr r2, [r4, #0x8]
+ ldr r1, [r4, #0x38]
+ ldr r0, [r3, #0x4]
+ add r1, r2, r1
+ sub r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r4, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0x8]
+ ldr r0, _0208D130 ; =0x04000454
+ sub r1, r2, r1
+ str r1, [sp, #0x28]
+ ldr r1, [r5, #0x40]
+ ldr r3, [r4, #0x10]
+ ldr r1, [r1, #0x20]
+ ldr r2, [r4, #0x40]
+ ldr r1, [r1, #0x0]
+ add r3, r3, r2
+ ldr r2, [r1, #0xc]
+ mov r1, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x2c]
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x40]
+ ldr r0, _0208D134 ; =0x04000470
+ ldr r1, [r1, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r3, [r1, #0xc]
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x0]
+ str r3, [r0, #0x0]
+ ldr r0, [r5, #0x44]
+ bl G3_MultMtx43
+_0208D088: ; 0x0208D088
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+_0208D090:
+ ldr r0, [r5, #0x40]
+ ldrh r4, [r4, #0x36]
+ ldrh r12, [r0, #0x72]
+ mov r2, #0x0
+ and r1, r4, #0x1f
+ and r0, r12, #0x1f
+ mul r3, r1, r0
+ and r1, r4, #0x3e0
+ and r0, r12, #0x3e0
+ mul r0, r1, r0
+ and r4, r4, #0x7c00
+ and r1, r12, #0x7c00
+ mul r12, r4, r1
+ mov r1, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r12, asr #0x19
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ ldr r1, _0208D138 ; =0x04000480
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r5, [r5, #0x40]
+ ldr r4, _0208D13C ; =0x02106158
+ ldr r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x7c]
+ ldr r3, [r1, #0x14]
+ ldrsh r1, [r5, #0x7e]
+ ldrh r5, [r3, #0x0]
+ mov r3, r2
+ mov r5, r5, lsl #0x14
+ mov r5, r5, lsr #0x1f
+ ldr r4, [r4, r5, lsl #0x2]
+ blx r4
+ add sp, sp, #0x90
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208D124: .word 0x040004A4
+_0208D128: .word 0x020FFA38
+_0208D12C: .word 0x02106160
+_0208D130: .word 0x04000454
+_0208D134: .word 0x04000470
+_0208D138: .word 0x04000480
+_0208D13C: .word 0x02106158
+
+ arm_func_start FUN_0208D140
+FUN_0208D140: ; 0x0208D140
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x90
+ mov r4, r1
+ ldrh r2, [r4, #0x2e]
+ mov r5, r0
+ ldr r0, [r5, #0x3c]
+ mov r1, r2, lsl #0x16
+ mov r3, r2, lsl #0x1b
+ mov r1, r1, lsr #0x1b
+ mov r3, r3, lsr #0x1b
+ add r1, r1, #0x1
+ mul r6, r3, r1
+ mov r1, r2, lsl #0x10
+ movs r2, r6, asr #0x5
+ mov r1, r1, lsr #0x1a
+ orr r0, r0, #0xc0
+ orr r1, r0, r1, lsl #0x18
+ ldr r0, _0208D474 ; =0x040004A4
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x0]
+ addeq sp, sp, #0x90
+ ldr r0, [r0, #0x0]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r5, #0x40]
+ ldrh r1, [r4, #0x20]
+ ldr r0, [r0, #0x20]
+ ldr r6, _0208D478 ; =0x020FFA38
+ ldr r0, [r0, #0x0]
+ mov r1, r1, asr #0x4
+ mov r2, r1, lsl #0x1
+ ldr r0, [r0, #0x0]
+ add r1, r2, #0x1
+ mov r7, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ mov r0, r0, lsl #0xd
+ mov r3, r0, lsr #0x1e
+ ldr r2, _0208D47C ; =0x02106160
+ ldrsh r0, [r6, r7]
+ ldr r3, [r2, r3, lsl #0x2]
+ ldrsh r1, [r6, r1]
+ add r2, sp, #0x30
+ blx r3
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0x30]
+ ldr r0, [r0, #0x20]
+ mov r12, #0x800
+ ldr r0, [r0, #0x0]
+ mov r3, r2, asr #0x1f
+ ldrsh r1, [r0, #0x30]
+ ldr r0, [r0, #0x48]
+ mov lr, #0x0
+ smull r6, r1, r2, r1
+ adds r7, r6, r12
+ adc r6, r1, #0x0
+ mov r1, r7, lsr #0xc
+ mov r0, r0, lsl #0x1
+ orr r1, r1, r6, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ beq _0208D244
+ cmp r0, #0x1
+ beq _0208D280
+ cmp r0, #0x2
+ beq _0208D29C
+ b _0208D2C0
+_0208D244:
+ ldrsh r0, [r4, #0x34]
+ mov r8, r0, asr #0x1f
+ umull r7, r6, r2, r0
+ mla r6, r2, r8, r6
+ smull r8, r2, r1, r0
+ adds r1, r8, r12
+ adc r8, r2, lr
+ adds r2, r7, r12
+ mla r6, r3, r0, r6
+ mov r1, r1, lsr #0xc
+ adc r0, r6, lr
+ mov r2, r2, lsr #0xc
+ orr r1, r1, r8, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ b _0208D2C0
+_0208D280:
+ ldrsh r0, [r4, #0x34]
+ smull r3, r0, r1, r0
+ adds r1, r3, r12
+ adc r0, r0, lr
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ b _0208D2C0
+_0208D29C:
+ ldrsh r6, [r4, #0x34]
+ mov r0, r6, asr #0x1f
+ umull r8, r7, r2, r6
+ mla r7, r2, r0, r7
+ adds r2, r8, r12
+ mla r7, r3, r6, r7
+ adc r0, r7, lr
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+_0208D2C0:
+ add r0, sp, #0x60
+ mov r3, r2
+ blx MTX_Scale43_
+ add r0, sp, #0x60
+ add r1, sp, #0x30
+ add r2, sp, #0x0
+ bl MTX_Concat43
+ ldr r0, [r5, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r3, [r0, #0x0]
+ ldr r0, [r3, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208D33C
+ ldr r1, [r4, #0x8]
+ ldr r0, [r4, #0x38]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r1, [r4, #0xc]
+ ldr r0, [r4, #0x3c]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [r4, #0x10]
+ ldr r0, [r4, #0x40]
+ add r0, r1, r0
+ str r0, [sp, #0x2c]
+ ldr r0, [r5, #0x44]
+ bl G3_LoadMtx43
+_0208D330: ; 0x0208D330
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+ b _0208D3E0
+_0208D33C:
+ ldr r2, [r4, #0x8]
+ ldr r1, [r4, #0x38]
+ ldr r0, [r3, #0x4]
+ add r1, r2, r1
+ sub r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [r5, #0x40]
+ ldr r2, [r4, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r4, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0x8]
+ ldr r0, _0208D480 ; =0x04000454
+ sub r1, r2, r1
+ str r1, [sp, #0x28]
+ ldr r1, [r5, #0x40]
+ ldr r3, [r4, #0x10]
+ ldr r1, [r1, #0x20]
+ ldr r2, [r4, #0x40]
+ ldr r1, [r1, #0x0]
+ add r3, r3, r2
+ ldr r2, [r1, #0xc]
+ mov r1, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x2c]
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x40]
+ ldr r0, _0208D484 ; =0x04000470
+ ldr r1, [r1, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r3, [r1, #0xc]
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0x0]
+ str r3, [r0, #0x0]
+ ldr r0, [r5, #0x44]
+ bl G3_MultMtx43
+_0208D3D8: ; 0x0208D3D8
+ add r0, sp, #0x0
+ bl G3_MultMtx43
+_0208D3E0:
+ ldr r0, [r5, #0x40]
+ ldrh r4, [r4, #0x36]
+ ldrh r12, [r0, #0x72]
+ ldr r1, _0208D488 ; =0x04000480
+ and r2, r4, #0x1f
+ and r0, r12, #0x1f
+ mul r3, r2, r0
+ and r2, r4, #0x3e0
+ and r0, r12, #0x3e0
+ mul r0, r2, r0
+ and r4, r4, #0x7c00
+ and r2, r12, #0x7c00
+ mul r12, r4, r2
+ mov r2, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r12, asr #0x19
+ orr r0, r2, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r2, [r5, #0x40]
+ ldr r4, _0208D48C ; =0x02106158
+ ldr r1, [r2, #0x20]
+ ldrsh r0, [r2, #0x78]
+ ldr r12, [r1, #0x0]
+ ldrsh r1, [r2, #0x7a]
+ ldr r3, [r12, #0x0]
+ ldrsh r2, [r12, #0x50]
+ mov r3, r3, lsl #0xc
+ mov r5, r3, lsr #0x1f
+ ldrsh r3, [r12, #0x52]
+ ldr r4, [r4, r5, lsl #0x2]
+ blx r4
+ add sp, sp, #0x90
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208D474: .word 0x040004A4
+_0208D478: .word 0x020FFA38
+_0208D47C: .word 0x02106160
+_0208D480: .word 0x04000454
+_0208D484: .word 0x04000470
+_0208D488: .word 0x04000480
+_0208D48C: .word 0x02106158
+
+ arm_func_start FUN_0208D490
+FUN_0208D490: ; 0x0208D490
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x88
+ mov r6, r1
+ ldrh r1, [r6, #0x2e]
+ mov r7, r0
+ ldr r4, [r7, #0x40]
+ mov r0, r1, lsl #0x16
+ mov r2, r1, lsl #0x1b
+ mov r0, r0, lsr #0x1b
+ mov r2, r2, lsr #0x1b
+ add r0, r0, #0x1
+ mul r3, r2, r0
+ ldr r2, [r4, #0x20]
+ movs r3, r3, asr #0x5
+ ldr r0, [r7, #0x3c]
+ ldr r4, [r2, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x1a
+ orr r1, r0, #0xc0
+ orr r2, r1, r2, lsl #0x18
+ ldrsh r0, [r4, #0x30]
+ ldr r8, [r7, #0x44]
+ ldr r1, _0208DB60 ; =0x040004A4
+ orr r2, r2, r3, lsl #0x10
+ str r2, [r1, #0x0]
+ addeq sp, sp, #0x88
+ ldr r1, [r1, #0x0]
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ ldr r4, [r6, #0x30]
+ ldr r1, [r7, #0x40]
+ smull r2, r5, r4, r0
+ ldr r0, [r1, #0x20]
+ mov r3, #0x800
+ adds r1, r2, r3
+ ldr r2, [r0, #0x0]
+ adc r9, r5, #0x0
+ ldr r0, [r2, #0x48]
+ mov r5, r1, lsr #0xc
+ mov r0, r0, lsl #0x1
+ mov r1, r4, asr #0x1f
+ orr r5, r5, r9, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ mov r9, #0x0
+ beq _0208D558
+ cmp r0, #0x1
+ beq _0208D594
+ cmp r0, #0x2
+ beq _0208D5B0
+ b _0208D5D4
+_0208D558:
+ ldrsh r0, [r6, #0x34]
+ mov lr, r0, asr #0x1f
+ umull r12, r10, r4, r0
+ mla r10, r4, lr, r10
+ smull lr, r4, r5, r0
+ mla r10, r1, r0, r10
+ adds r0, lr, r3
+ adc lr, r4, r9
+ adds r1, r12, r3
+ mov r5, r0, lsr #0xc
+ adc r0, r10, r9
+ mov r4, r1, lsr #0xc
+ orr r5, r5, lr, lsl #0x14
+ orr r4, r4, r0, lsl #0x14
+ b _0208D5D4
+_0208D594:
+ ldrsh r0, [r6, #0x34]
+ smull r1, r0, r5, r0
+ adds r1, r1, r3
+ adc r0, r0, r9
+ mov r5, r1, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ b _0208D5D4
+_0208D5B0:
+ ldrsh r10, [r6, #0x34]
+ mov r0, r10, asr #0x1f
+ umull lr, r12, r4, r10
+ mla r12, r4, r0, r12
+ adds r3, lr, r3
+ mla r12, r1, r10, r12
+ adc r0, r12, r9
+ mov r4, r3, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+_0208D5D4:
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208D83C
+ ldr r1, [r6, #0x8]
+ ldr r0, [r6, #0x38]
+ add r9, sp, #0x18
+ add r0, r1, r0
+ str r0, [sp, #0xc]
+ ldr r2, [r6, #0xc]
+ ldr r1, [r6, #0x3c]
+ add r0, r6, #0x14
+ add r1, r2, r1
+ str r1, [sp, #0x10]
+ ldr r2, [r6, #0x10]
+ ldr r1, [r6, #0x40]
+ add r1, r2, r1
+ str r1, [sp, #0x14]
+ ldmia r0, {r0-r2}
+ stmia r9, {r0-r2}
+ ldr r0, [r8, #0x8]
+ add r1, sp, #0x24
+ str r0, [sp, #0x24]
+ ldr r2, [r8, #0x14]
+ mov r0, r9
+ str r2, [sp, #0x28]
+ ldr r3, [r8, #0x20]
+ mov r2, r9
+ str r3, [sp, #0x2c]
+ bl VEC_CrossProduct
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ bne _0208D678
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _0208D678
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+_0208D678:
+ add r0, sp, #0x18
+ mov r1, r0
+ bl VEC_Normalize
+ add r1, sp, #0x30
+ mov r0, r8
+ bl MI_Copy36B
+ add r0, sp, #0x18
+ add r1, sp, #0x30
+ mov r2, r0
+ bl MTX_MultVec33
+ add r0, sp, #0xc
+ mov r1, r8
+ mov r2, r0
+ bl MTX_MultVec43
+ add r0, r6, #0x14
+ add r3, sp, #0x0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ mov r0, r3
+ mov r1, r3
+ bl VEC_Normalize
+ ldr r0, [r8, #0x20]
+ ldr r1, [sp, #0x8]
+ rsb r0, r0, #0x0
+ smull r3, r0, r1, r0
+ mov r2, #0x800
+ adds r1, r3, r2
+ ldr r3, [r8, #0x14]
+ adc r0, r0, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ ldr r0, [r8, #0x8]
+ ldr r9, [sp, #0x0]
+ rsb r0, r0, #0x0
+ smull r8, r0, r9, r0
+ adds r9, r8, r2
+ adc r8, r0, #0x0
+ mov r0, r9, lsr #0xc
+ orr r0, r0, r8, lsl #0x14
+ ldr r8, [sp, #0x4]
+ rsb r3, r3, #0x0
+ smull r9, r3, r8, r3
+ adds r8, r9, r2
+ adc r2, r3, #0x0
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ add r0, r0, r3
+ adds r1, r1, r0
+ ldr r0, [r7, #0x40]
+ rsbmi r1, r1, #0x0
+ ldr r0, [r0, #0x20]
+ rsb r2, r1, #0x1000
+ ldr r0, [r0, #0x0]
+ mov r9, #0x800
+ ldr r0, [r0, #0x48]
+ ldr r12, [sp, #0x18]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ smull r8, r0, r2, r0
+ adds r2, r8, r9
+ adc r0, r0, #0x0
+ mov r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ add r0, r2, #0x1000
+ smull r2, r0, r4, r0
+ adds r2, r2, r9
+ adc r0, r0, #0x0
+ mov lr, r2, lsr #0xc
+ orr lr, lr, r0, lsl #0x14
+ smull r0, r4, r12, r5
+ adds r8, r0, r9
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0xc]
+ rsb r2, r3, #0x0
+ str r0, [sp, #0x78]
+ ldr r0, [sp, #0x10]
+ smull r10, r5, r3, r5
+ str r0, [sp, #0x7c]
+ smull r3, r0, r2, lr
+ adc r4, r4, #0x0
+ mov r8, r8, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ adds r3, r3, r9
+ smull lr, r2, r12, lr
+ str r8, [sp, #0x54]
+ adc r0, r0, #0x0
+ adds r8, r10, r9
+ adc r4, r5, #0x0
+ adds r5, lr, r9
+ mov r9, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r8, r8, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ ldr r3, [sp, #0x14]
+ adc r0, r2, #0x0
+ mov r5, r5, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ mov r4, #0x1000
+ ldr r2, _0208DB64 ; =0x04000454
+ str r9, [sp, #0x60]
+ str r8, [sp, #0x58]
+ add r0, sp, #0x54
+ str r5, [sp, #0x64]
+ str r1, [sp, #0x6c]
+ str r1, [sp, #0x70]
+ str r1, [sp, #0x5c]
+ str r1, [sp, #0x68]
+ str r4, [sp, #0x74]
+ str r3, [sp, #0x80]
+ str r1, [r2, #0x0]
+ bl G3_MultMtx43
+ b _0208DAE8
+_0208D83C:
+ ldr r3, [r6, #0x8]
+ ldr r1, [r6, #0x38]
+ ldr r0, [r2, #0x4]
+ add r1, r3, r1
+ sub r0, r1, r0
+ str r0, [sp, #0xc]
+ ldr r0, [r7, #0x40]
+ ldr r2, [r6, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r6, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r1, r2, r1
+ ldr r0, [r0, #0x8]
+ add r9, sp, #0x18
+ sub r0, r1, r0
+ str r0, [sp, #0x10]
+ ldr r0, [r7, #0x40]
+ ldr r2, [r6, #0x10]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r6, #0x40]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0xc]
+ add r0, r6, #0x14
+ sub r1, r2, r1
+ str r1, [sp, #0x14]
+ ldmia r0, {r0-r2}
+ stmia r9, {r0-r2}
+ ldr r0, [r8, #0x8]
+ add r1, sp, #0x24
+ str r0, [sp, #0x24]
+ ldr r2, [r8, #0x14]
+ mov r0, r9
+ str r2, [sp, #0x28]
+ ldr r3, [r8, #0x20]
+ mov r2, r9
+ str r3, [sp, #0x2c]
+ bl VEC_CrossProduct
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ bne _0208D900
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _0208D900
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+_0208D900:
+ add r0, sp, #0x18
+ mov r1, r0
+ bl VEC_Normalize
+ add r1, sp, #0x30
+ mov r0, r8
+ bl MI_Copy36B
+ add r0, sp, #0x18
+ add r1, sp, #0x30
+ mov r2, r0
+ bl MTX_MultVec33
+ add r0, sp, #0xc
+ mov r1, r8
+ mov r2, r0
+ bl MTX_MultVec43
+ add r0, r6, #0x14
+ add r3, sp, #0x0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ mov r0, r3
+ mov r1, r3
+ bl VEC_Normalize
+ ldr r0, [r8, #0x20]
+ ldr r1, [sp, #0x8]
+ rsb r0, r0, #0x0
+ smull r3, r0, r1, r0
+ mov r2, #0x800
+ adds r1, r3, r2
+ ldr r3, [r8, #0x14]
+ adc r0, r0, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ ldr r0, [r8, #0x8]
+ ldr r9, [sp, #0x0]
+ rsb r0, r0, #0x0
+ smull r8, r0, r9, r0
+ adds r9, r8, r2
+ adc r8, r0, #0x0
+ mov r0, r9, lsr #0xc
+ orr r0, r0, r8, lsl #0x14
+ ldr r8, [sp, #0x4]
+ rsb r3, r3, #0x0
+ smull r9, r3, r8, r3
+ adds r8, r9, r2
+ adc r2, r3, #0x0
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ add r0, r0, r3
+ adds r1, r1, r0
+ ldr r0, [r7, #0x40]
+ rsbmi r1, r1, #0x0
+ ldr r0, [r0, #0x20]
+ rsb r2, r1, #0x1000
+ ldr r0, [r0, #0x0]
+ mov r9, #0x800
+ ldr r0, [r0, #0x48]
+ ldr lr, [sp, #0x18]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ smull r8, r0, r2, r0
+ adds r2, r8, r9
+ adc r0, r0, #0x0
+ mov r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ add r0, r2, #0x1000
+ smull r2, r0, r4, r0
+ adds r2, r2, r9
+ adc r0, r0, #0x0
+ mov r8, r2, lsr #0xc
+ orr r8, r8, r0, lsl #0x14
+ smull r0, r4, lr, r5
+ adds r12, r0, r9
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0xc]
+ rsb r2, r3, #0x0
+ str r0, [sp, #0x78]
+ ldr r0, [sp, #0x10]
+ smull r10, r5, r3, r5
+ str r0, [sp, #0x7c]
+ smull r3, r0, r2, r8
+ adc r4, r4, #0x0
+ mov r12, r12, lsr #0xc
+ adds r3, r3, r9
+ orr r12, r12, r4, lsl #0x14
+ adc r0, r0, #0x0
+ adds r10, r10, r9
+ smull r8, r2, lr, r8
+ adc r4, r5, #0x0
+ adds r5, r8, r9
+ mov r9, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r8, r10, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ ldr r3, [sp, #0x14]
+ adc r0, r2, #0x0
+ mov r2, r5, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ mov r4, #0x1000
+ ldr r0, _0208DB64 ; =0x04000454
+ str r12, [sp, #0x54]
+ str r9, [sp, #0x60]
+ str r8, [sp, #0x58]
+ str r1, [sp, #0x6c]
+ str r2, [sp, #0x64]
+ str r1, [sp, #0x70]
+ str r1, [sp, #0x5c]
+ str r1, [sp, #0x68]
+ str r4, [sp, #0x74]
+ str r3, [sp, #0x80]
+ str r1, [r0, #0x0]
+ ldr r0, [r7, #0x40]
+ ldr r1, _0208DB68 ; =0x04000470
+ ldr r2, [r0, #0x20]
+ add r0, sp, #0x54
+ ldr r2, [r2, #0x0]
+ ldr r4, [r2, #0xc]
+ ldr r3, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x0]
+ str r4, [r1, #0x0]
+ bl G3_MultMtx43
+_0208DAE8:
+ ldr r0, [r7, #0x40]
+ ldrh r4, [r6, #0x36]
+ ldrh r5, [r0, #0x72]
+ mov r2, #0x0
+ and r1, r4, #0x1f
+ and r0, r5, #0x1f
+ mul r3, r1, r0
+ and r1, r4, #0x3e0
+ and r0, r5, #0x3e0
+ mul r0, r1, r0
+ and r4, r4, #0x7c00
+ and r1, r5, #0x7c00
+ mul r5, r4, r1
+ mov r1, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r5, asr #0x19
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ ldr r1, _0208DB6C ; =0x04000480
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r1, [r7, #0x40]
+ mov r3, r2
+ ldrsh r0, [r1, #0x7c]
+ ldrsh r1, [r1, #0x7e]
+ bl FUN_0208ECA0
+ add sp, sp, #0x88
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_0208DB60: .word 0x040004A4
+_0208DB64: .word 0x04000454
+_0208DB68: .word 0x04000470
+_0208DB6C: .word 0x04000480
+
+ arm_func_start FUN_0208DB70
+FUN_0208DB70: ; 0x0208DB70
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x88
+ mov r6, r1
+ ldrh r1, [r6, #0x2e]
+ mov r7, r0
+ ldr r4, [r7, #0x40]
+ mov r0, r1, lsl #0x16
+ mov r2, r1, lsl #0x1b
+ mov r0, r0, lsr #0x1b
+ mov r2, r2, lsr #0x1b
+ add r0, r0, #0x1
+ mul r3, r2, r0
+ ldr r2, [r4, #0x20]
+ movs r3, r3, asr #0x5
+ ldr r0, [r7, #0x3c]
+ ldr r4, [r2, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x1a
+ orr r1, r0, #0xc0
+ orr r2, r1, r2, lsl #0x18
+ ldrsh r0, [r4, #0x30]
+ ldr r8, [r7, #0x44]
+ ldr r1, _0208E248 ; =0x040004A4
+ orr r2, r2, r3, lsl #0x10
+ str r2, [r1, #0x0]
+ addeq sp, sp, #0x88
+ ldr r1, [r1, #0x0]
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ ldr r4, [r6, #0x30]
+ ldr r1, [r7, #0x40]
+ smull r2, r5, r4, r0
+ ldr r0, [r1, #0x20]
+ mov r3, #0x800
+ adds r1, r2, r3
+ ldr r2, [r0, #0x0]
+ adc r9, r5, #0x0
+ ldr r0, [r2, #0x48]
+ mov r5, r1, lsr #0xc
+ mov r0, r0, lsl #0x1
+ mov r1, r4, asr #0x1f
+ orr r5, r5, r9, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ mov r9, #0x0
+ beq _0208DC38
+ cmp r0, #0x1
+ beq _0208DC74
+ cmp r0, #0x2
+ beq _0208DC90
+ b _0208DCB4
+_0208DC38:
+ ldrsh r0, [r6, #0x34]
+ mov lr, r0, asr #0x1f
+ umull r12, r10, r4, r0
+ mla r10, r4, lr, r10
+ smull lr, r4, r5, r0
+ mla r10, r1, r0, r10
+ adds r0, lr, r3
+ adc lr, r4, r9
+ adds r1, r12, r3
+ mov r5, r0, lsr #0xc
+ adc r0, r10, r9
+ mov r4, r1, lsr #0xc
+ orr r5, r5, lr, lsl #0x14
+ orr r4, r4, r0, lsl #0x14
+ b _0208DCB4
+_0208DC74:
+ ldrsh r0, [r6, #0x34]
+ smull r1, r0, r5, r0
+ adds r1, r1, r3
+ adc r0, r0, r9
+ mov r5, r1, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ b _0208DCB4
+_0208DC90:
+ ldrsh r10, [r6, #0x34]
+ mov r0, r10, asr #0x1f
+ umull lr, r12, r4, r10
+ mla r12, r4, r0, r12
+ adds r3, lr, r3
+ mla r12, r1, r10, r12
+ adc r0, r12, r9
+ mov r4, r3, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+_0208DCB4:
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208DF1C
+ ldr r1, [r6, #0x8]
+ ldr r0, [r6, #0x38]
+ add r9, sp, #0x18
+ add r0, r1, r0
+ str r0, [sp, #0xc]
+ ldr r2, [r6, #0xc]
+ ldr r1, [r6, #0x3c]
+ add r0, r6, #0x14
+ add r1, r2, r1
+ str r1, [sp, #0x10]
+ ldr r2, [r6, #0x10]
+ ldr r1, [r6, #0x40]
+ add r1, r2, r1
+ str r1, [sp, #0x14]
+ ldmia r0, {r0-r2}
+ stmia r9, {r0-r2}
+ ldr r0, [r8, #0x8]
+ add r1, sp, #0x24
+ str r0, [sp, #0x24]
+ ldr r2, [r8, #0x14]
+ mov r0, r9
+ str r2, [sp, #0x28]
+ ldr r3, [r8, #0x20]
+ mov r2, r9
+ str r3, [sp, #0x2c]
+ bl VEC_CrossProduct
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ bne _0208DD58
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _0208DD58
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+_0208DD58:
+ add r0, sp, #0x18
+ mov r1, r0
+ bl VEC_Normalize
+ add r1, sp, #0x30
+ mov r0, r8
+ bl MI_Copy36B
+ add r0, sp, #0x18
+ add r1, sp, #0x30
+ mov r2, r0
+ bl MTX_MultVec33
+ add r0, sp, #0xc
+ mov r1, r8
+ mov r2, r0
+ bl MTX_MultVec43
+ add r0, r6, #0x14
+ add r3, sp, #0x0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ mov r0, r3
+ mov r1, r3
+ bl VEC_Normalize
+ ldr r0, [r8, #0x20]
+ ldr r1, [sp, #0x8]
+ rsb r0, r0, #0x0
+ smull r3, r0, r1, r0
+ mov r2, #0x800
+ adds r1, r3, r2
+ ldr r3, [r8, #0x14]
+ adc r0, r0, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ ldr r0, [r8, #0x8]
+ ldr r9, [sp, #0x0]
+ rsb r0, r0, #0x0
+ smull r8, r0, r9, r0
+ adds r9, r8, r2
+ adc r8, r0, #0x0
+ mov r0, r9, lsr #0xc
+ orr r0, r0, r8, lsl #0x14
+ ldr r8, [sp, #0x4]
+ rsb r3, r3, #0x0
+ smull r9, r3, r8, r3
+ adds r8, r9, r2
+ adc r2, r3, #0x0
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ add r0, r0, r3
+ adds r1, r1, r0
+ ldr r0, [r7, #0x40]
+ rsbmi r1, r1, #0x0
+ ldr r0, [r0, #0x20]
+ rsb r2, r1, #0x1000
+ ldr r0, [r0, #0x0]
+ mov r9, #0x800
+ ldr r0, [r0, #0x48]
+ ldr r12, [sp, #0x18]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ smull r8, r0, r2, r0
+ adds r2, r8, r9
+ adc r0, r0, #0x0
+ mov r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ add r0, r2, #0x1000
+ smull r2, r0, r4, r0
+ adds r2, r2, r9
+ adc r0, r0, #0x0
+ mov lr, r2, lsr #0xc
+ orr lr, lr, r0, lsl #0x14
+ smull r0, r4, r12, r5
+ adds r8, r0, r9
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0xc]
+ rsb r2, r3, #0x0
+ str r0, [sp, #0x78]
+ ldr r0, [sp, #0x10]
+ smull r10, r5, r3, r5
+ str r0, [sp, #0x7c]
+ smull r3, r0, r2, lr
+ adc r4, r4, #0x0
+ mov r8, r8, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ adds r3, r3, r9
+ smull lr, r2, r12, lr
+ str r8, [sp, #0x54]
+ adc r0, r0, #0x0
+ adds r8, r10, r9
+ adc r4, r5, #0x0
+ adds r5, lr, r9
+ mov r9, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r8, r8, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ ldr r3, [sp, #0x14]
+ adc r0, r2, #0x0
+ mov r5, r5, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ mov r4, #0x1000
+ ldr r2, _0208E24C ; =0x04000454
+ str r9, [sp, #0x60]
+ str r8, [sp, #0x58]
+ add r0, sp, #0x54
+ str r5, [sp, #0x64]
+ str r1, [sp, #0x6c]
+ str r1, [sp, #0x70]
+ str r1, [sp, #0x5c]
+ str r1, [sp, #0x68]
+ str r4, [sp, #0x74]
+ str r3, [sp, #0x80]
+ str r1, [r2, #0x0]
+ bl G3_MultMtx43
+ b _0208E1C8
+_0208DF1C:
+ ldr r3, [r6, #0x8]
+ ldr r1, [r6, #0x38]
+ ldr r0, [r2, #0x4]
+ add r1, r3, r1
+ sub r0, r1, r0
+ str r0, [sp, #0xc]
+ ldr r0, [r7, #0x40]
+ ldr r2, [r6, #0xc]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r6, #0x3c]
+ ldr r0, [r0, #0x0]
+ add r1, r2, r1
+ ldr r0, [r0, #0x8]
+ add r9, sp, #0x18
+ sub r0, r1, r0
+ str r0, [sp, #0x10]
+ ldr r0, [r7, #0x40]
+ ldr r2, [r6, #0x10]
+ ldr r0, [r0, #0x20]
+ ldr r1, [r6, #0x40]
+ ldr r0, [r0, #0x0]
+ add r2, r2, r1
+ ldr r1, [r0, #0xc]
+ add r0, r6, #0x14
+ sub r1, r2, r1
+ str r1, [sp, #0x14]
+ ldmia r0, {r0-r2}
+ stmia r9, {r0-r2}
+ ldr r0, [r8, #0x8]
+ add r1, sp, #0x24
+ str r0, [sp, #0x24]
+ ldr r2, [r8, #0x14]
+ mov r0, r9
+ str r2, [sp, #0x28]
+ ldr r3, [r8, #0x20]
+ mov r2, r9
+ str r3, [sp, #0x2c]
+ bl VEC_CrossProduct
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ bne _0208DFE0
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _0208DFE0
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+_0208DFE0:
+ add r0, sp, #0x18
+ mov r1, r0
+ bl VEC_Normalize
+ add r1, sp, #0x30
+ mov r0, r8
+ bl MI_Copy36B
+ add r0, sp, #0x18
+ add r1, sp, #0x30
+ mov r2, r0
+ bl MTX_MultVec33
+ add r0, sp, #0xc
+ mov r1, r8
+ mov r2, r0
+ bl MTX_MultVec43
+ add r0, r6, #0x14
+ add r3, sp, #0x0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ mov r0, r3
+ mov r1, r3
+ bl VEC_Normalize
+ ldr r0, [r8, #0x20]
+ ldr r1, [sp, #0x8]
+ rsb r0, r0, #0x0
+ smull r3, r0, r1, r0
+ mov r2, #0x800
+ adds r1, r3, r2
+ ldr r3, [r8, #0x14]
+ adc r0, r0, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ ldr r0, [r8, #0x8]
+ ldr r9, [sp, #0x0]
+ rsb r0, r0, #0x0
+ smull r8, r0, r9, r0
+ adds r9, r8, r2
+ adc r8, r0, #0x0
+ mov r0, r9, lsr #0xc
+ orr r0, r0, r8, lsl #0x14
+ ldr r8, [sp, #0x4]
+ rsb r3, r3, #0x0
+ smull r9, r3, r8, r3
+ adds r8, r9, r2
+ adc r2, r3, #0x0
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ add r0, r0, r3
+ adds r1, r1, r0
+ ldr r0, [r7, #0x40]
+ rsbmi r1, r1, #0x0
+ ldr r0, [r0, #0x20]
+ rsb r2, r1, #0x1000
+ ldr r0, [r0, #0x0]
+ mov r9, #0x800
+ ldr r0, [r0, #0x48]
+ ldr lr, [sp, #0x18]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ smull r8, r0, r2, r0
+ adds r2, r8, r9
+ adc r0, r0, #0x0
+ mov r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ add r0, r2, #0x1000
+ smull r2, r0, r4, r0
+ adds r2, r2, r9
+ adc r0, r0, #0x0
+ mov r8, r2, lsr #0xc
+ orr r8, r8, r0, lsl #0x14
+ smull r0, r4, lr, r5
+ adds r12, r0, r9
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0xc]
+ rsb r2, r3, #0x0
+ str r0, [sp, #0x78]
+ ldr r0, [sp, #0x10]
+ smull r10, r5, r3, r5
+ str r0, [sp, #0x7c]
+ smull r3, r0, r2, r8
+ adc r4, r4, #0x0
+ mov r12, r12, lsr #0xc
+ adds r3, r3, r9
+ orr r12, r12, r4, lsl #0x14
+ adc r0, r0, #0x0
+ adds r10, r10, r9
+ smull r8, r2, lr, r8
+ adc r4, r5, #0x0
+ adds r5, r8, r9
+ mov r9, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r8, r10, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ ldr r3, [sp, #0x14]
+ adc r0, r2, #0x0
+ mov r2, r5, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ mov r4, #0x1000
+ ldr r0, _0208E24C ; =0x04000454
+ str r12, [sp, #0x54]
+ str r9, [sp, #0x60]
+ str r8, [sp, #0x58]
+ str r1, [sp, #0x6c]
+ str r2, [sp, #0x64]
+ str r1, [sp, #0x70]
+ str r1, [sp, #0x5c]
+ str r1, [sp, #0x68]
+ str r4, [sp, #0x74]
+ str r3, [sp, #0x80]
+ str r1, [r0, #0x0]
+ ldr r0, [r7, #0x40]
+ ldr r1, _0208E250 ; =0x04000470
+ ldr r2, [r0, #0x20]
+ add r0, sp, #0x54
+ ldr r2, [r2, #0x0]
+ ldr r4, [r2, #0xc]
+ ldr r3, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x0]
+ str r4, [r1, #0x0]
+ bl G3_MultMtx43
+_0208E1C8:
+ ldr r0, [r7, #0x40]
+ ldrh r4, [r6, #0x36]
+ ldrh r5, [r0, #0x72]
+ ldr r1, _0208E254 ; =0x04000480
+ and r2, r4, #0x1f
+ and r0, r5, #0x1f
+ mul r3, r2, r0
+ and r2, r4, #0x3e0
+ and r0, r5, #0x3e0
+ mul r0, r2, r0
+ and r4, r4, #0x7c00
+ and r2, r5, #0x7c00
+ mul r5, r4, r2
+ mov r2, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r5, asr #0x19
+ orr r0, r2, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r2, [r7, #0x40]
+ ldr r1, [r2, #0x20]
+ ldrsh r0, [r2, #0x78]
+ ldr r3, [r1, #0x0]
+ ldrsh r1, [r2, #0x7a]
+ ldrsh r2, [r3, #0x50]
+ ldrsh r3, [r3, #0x52]
+ bl FUN_0208ECA0
+ add sp, sp, #0x88
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_0208E248: .word 0x040004A4
+_0208E24C: .word 0x04000454
+_0208E250: .word 0x04000470
+_0208E254: .word 0x04000480
+
+ arm_func_start FUN_0208E258
+FUN_0208E258: ; 0x0208E258
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x40
+ mov r6, r1
+ ldrh r1, [r6, #0x2e]
+ mov r7, r0
+ ldr r4, [r7, #0x40]
+ mov r0, r1, lsl #0x16
+ mov r2, r1, lsl #0x1b
+ mov r0, r0, lsr #0x1b
+ mov r2, r2, lsr #0x1b
+ add r0, r0, #0x1
+ mul r3, r2, r0
+ ldr r2, [r4, #0x20]
+ ldr r0, [r7, #0x3c]
+ ldr r4, [r2, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x1a
+ orr r1, r0, #0xc0
+ ldrsh r0, [r4, #0x30]
+ movs r4, r3, asr #0x5
+ orr r3, r1, r2, lsl #0x18
+ ldr r1, [r7, #0x44]
+ ldr r2, _0208E698 ; =0x040004A4
+ orr r3, r3, r4, lsl #0x10
+ str r3, [r2, #0x0]
+ addeq sp, sp, #0x40
+ ldr r2, [r2, #0x0]
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ ldr r4, [r6, #0x30]
+ ldr r2, [r7, #0x40]
+ smull r3, r5, r4, r0
+ ldr r0, [r2, #0x20]
+ mov r8, #0x800
+ adds r2, r3, r8
+ ldr r3, [r0, #0x0]
+ adc r9, r5, #0x0
+ ldr r0, [r3, #0x48]
+ mov r5, r2, lsr #0xc
+ mov r0, r0, lsl #0x1
+ mov r2, r4, asr #0x1f
+ orr r5, r5, r9, lsl #0x14
+ movs r0, r0, lsr #0x1d
+ mov r9, #0x0
+ beq _0208E320
+ cmp r0, #0x1
+ beq _0208E35C
+ cmp r0, #0x2
+ beq _0208E378
+ b _0208E39C
+_0208E320:
+ ldrsh r0, [r6, #0x34]
+ mov lr, r0, asr #0x1f
+ umull r12, r10, r4, r0
+ mla r10, r4, lr, r10
+ smull lr, r4, r5, r0
+ mla r10, r2, r0, r10
+ adds r0, lr, r8
+ adc lr, r4, r9
+ adds r2, r12, r8
+ mov r5, r0, lsr #0xc
+ adc r0, r10, r9
+ mov r4, r2, lsr #0xc
+ orr r5, r5, lr, lsl #0x14
+ orr r4, r4, r0, lsl #0x14
+ b _0208E39C
+_0208E35C:
+ ldrsh r0, [r6, #0x34]
+ smull r2, r0, r5, r0
+ adds r2, r2, r8
+ adc r0, r0, r9
+ mov r5, r2, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ b _0208E39C
+_0208E378:
+ ldrsh r10, [r6, #0x34]
+ mov r0, r10, asr #0x1f
+ umull lr, r12, r4, r10
+ mla r12, r4, r0, r12
+ adds r4, lr, r8
+ mla r12, r2, r10, r12
+ adc r0, r12, r9
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+_0208E39C:
+ ldr r0, [r3, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208E4BC
+ ldr r3, [r6, #0x8]
+ ldr r2, [r6, #0x38]
+ add r0, sp, #0x0
+ add r2, r3, r2
+ str r2, [sp, #0x0]
+ ldr r8, [r6, #0xc]
+ ldr r3, [r6, #0x3c]
+ mov r2, r0
+ add r3, r8, r3
+ str r3, [sp, #0x4]
+ ldr r8, [r6, #0x10]
+ ldr r3, [r6, #0x40]
+ add r3, r8, r3
+ str r3, [sp, #0x8]
+ bl MTX_MultVec43
+ ldrh r0, [r6, #0x20]
+ ldr r2, _0208E69C ; =0x020FFA38
+ mov r9, #0x0
+ mov r0, r0, asr #0x4
+ mov r3, r0, lsl #0x1
+ mov r0, r3, lsl #0x1
+ ldrsh r1, [r2, r0]
+ add r0, r3, #0x1
+ mov r0, r0, lsl #0x1
+ ldrsh r0, [r2, r0]
+ mov lr, #0x1000
+ ldr r3, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ str r3, [sp, #0x30]
+ smull r12, r10, r1, r5
+ str lr, [sp, #0x2c]
+ rsb r8, r1, #0x0
+ ldr r1, [sp, #0x8]
+ smull lr, r5, r0, r5
+ mov r3, #0x800
+ str r2, [sp, #0x34]
+ adds r2, lr, r3
+ adc r5, r5, #0x0
+ adds r12, r12, r3
+ mov lr, r2, lsr #0xc
+ orr lr, lr, r5, lsl #0x14
+ smull r5, r2, r8, r4
+ adc r10, r10, #0x0
+ mov r8, r12, lsr #0xc
+ orr r8, r8, r10, lsl #0x14
+ adds r5, r5, r3
+ smull r10, r4, r0, r4
+ adc r0, r2, #0x0
+ adds r2, r10, r3
+ mov r5, r5, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ mov r3, r2, lsr #0xc
+ adc r0, r4, #0x0
+ orr r3, r3, r0, lsl #0x14
+ ldr r2, _0208E6A0 ; =0x04000454
+ str lr, [sp, #0xc]
+ add r0, sp, #0xc
+ str r8, [sp, #0x10]
+ str r9, [sp, #0x14]
+ str r5, [sp, #0x18]
+ str r3, [sp, #0x1c]
+ str r9, [sp, #0x20]
+ str r9, [sp, #0x24]
+ str r9, [sp, #0x28]
+ str r1, [sp, #0x38]
+ str r9, [r2, #0x0]
+ bl G3_MultMtx43
+ b _0208E620
+_0208E4BC:
+ ldr r8, [r6, #0x8]
+ ldr r2, [r6, #0x38]
+ ldr r0, [r3, #0x4]
+ add r2, r8, r2
+ sub r0, r2, r0
+ str r0, [sp, #0x0]
+ ldr r2, [r7, #0x40]
+ ldr r8, [r6, #0xc]
+ ldr r2, [r2, #0x20]
+ ldr r3, [r6, #0x3c]
+ ldr r2, [r2, #0x0]
+ add r3, r8, r3
+ ldr r2, [r2, #0x8]
+ add r0, sp, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x4]
+ ldr r2, [r7, #0x40]
+ ldr r8, [r6, #0x10]
+ ldr r2, [r2, #0x20]
+ ldr r3, [r6, #0x40]
+ ldr r2, [r2, #0x0]
+ add r8, r8, r3
+ ldr r3, [r2, #0xc]
+ mov r2, r0
+ sub r3, r8, r3
+ str r3, [sp, #0x8]
+ bl MTX_MultVec43
+ ldrh r0, [r6, #0x20]
+ ldr r2, _0208E69C ; =0x020FFA38
+ mov lr, #0x0
+ mov r0, r0, asr #0x4
+ mov r3, r0, lsl #0x1
+ mov r0, r3, lsl #0x1
+ ldrsh r1, [r2, r0]
+ add r0, r3, #0x1
+ mov r0, r0, lsl #0x1
+ ldrsh r0, [r2, r0]
+ mov r10, #0x1000
+ ldr r3, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ str r3, [sp, #0x30]
+ smull r9, r8, r1, r5
+ str r10, [sp, #0x2c]
+ rsb r12, r1, #0x0
+ smull r10, r5, r0, r5
+ ldr r1, [sp, #0x8]
+ mov r3, #0x800
+ str r2, [sp, #0x34]
+ adds r2, r10, r3
+ adc r5, r5, #0x0
+ mov r10, r2, lsr #0xc
+ orr r10, r10, r5, lsl #0x14
+ str r1, [sp, #0x38]
+ adds r9, r9, r3
+ str r10, [sp, #0xc]
+ adc r10, r8, #0x0
+ smull r5, r2, r12, r4
+ mov r8, r9, lsr #0xc
+ orr r8, r8, r10, lsl #0x14
+ smull r9, r4, r0, r4
+ adds r5, r5, r3
+ adc r0, r2, #0x0
+ adds r2, r9, r3
+ mov r3, r5, lsr #0xc
+ orr r3, r3, r0, lsl #0x14
+ adc r0, r4, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ ldr r0, _0208E6A0 ; =0x04000454
+ str r8, [sp, #0x10]
+ str lr, [sp, #0x14]
+ str r3, [sp, #0x18]
+ str r2, [sp, #0x1c]
+ str lr, [sp, #0x20]
+ str lr, [sp, #0x24]
+ str lr, [sp, #0x28]
+ str lr, [r0, #0x0]
+ ldr r0, [r7, #0x40]
+ ldr r1, _0208E6A4 ; =0x04000470
+ ldr r2, [r0, #0x20]
+ add r0, sp, #0xc
+ ldr r2, [r2, #0x0]
+ ldr r4, [r2, #0xc]
+ ldr r3, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x0]
+ str r4, [r1, #0x0]
+ bl G3_MultMtx43
+_0208E620:
+ ldr r0, [r7, #0x40]
+ ldrh r4, [r6, #0x36]
+ ldrh r5, [r0, #0x72]
+ mov r2, #0x0
+ and r1, r4, #0x1f
+ and r0, r5, #0x1f
+ mul r3, r1, r0
+ and r1, r4, #0x3e0
+ and r0, r5, #0x3e0
+ mul r0, r1, r0
+ and r4, r4, #0x7c00
+ and r1, r5, #0x7c00
+ mul r5, r4, r1
+ mov r1, r3, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r3, r5, asr #0x19
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r3, lsl #0xa
+ mov r0, r0, lsl #0x10
+ ldr r1, _0208E6A8 ; =0x04000480
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r1, [r7, #0x40]
+ mov r3, r2
+ ldrsh r0, [r1, #0x7c]
+ ldrsh r1, [r1, #0x7e]
+ bl FUN_0208ECA0
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_0208E698: .word 0x040004A4
+_0208E69C: .word 0x020FFA38
+_0208E6A0: .word 0x04000454
+_0208E6A4: .word 0x04000470
+_0208E6A8: .word 0x04000480
+
+ arm_func_start FUN_0208E6AC
+FUN_0208E6AC: ; 0x0208E6AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ mov r8, r1
+ ldrh r3, [r8, #0x2e]
+ mov r9, r0
+ ldr r1, [r9, #0x40]
+ mov r0, r3, lsl #0x16
+ mov r2, r3, lsl #0x1b
+ mov r0, r0, lsr #0x1b
+ ldr r4, [r1, #0x20]
+ mov r2, r2, lsr #0x1b
+ ldr r5, [r4, #0x0]
+ add r0, r0, #0x1
+ mul r0, r2, r0
+ movs r11, r0, asr #0x5
+ mov r3, r3, lsl #0x10
+ ldr r2, [r9, #0x3c]
+ mov r6, r3, lsr #0x1a
+ orr r3, r2, #0xc0
+ ldr r4, [r5, #0x48]
+ ldrsh r7, [r5, #0x30]
+ mov r2, r4, lsl #0x1
+ ldrh r4, [r1, #0x72]
+ orr r3, r3, r6, lsl #0x18
+ ldrsh r10, [r8, #0x34]
+ ldrh r5, [r8, #0x36]
+ ldr r1, [r9, #0x44]
+ ldr r0, _0208EAE4 ; =0x040004A4
+ orr r3, r3, r11, lsl #0x10
+ str r3, [r0, #0x0]
+ mov r2, r2, lsr #0x1d
+ addeq sp, sp, #0x3c
+ and r3, r2, #0xff
+ ldr r0, [r0, #0x0]
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r6, [r8, #0x30]
+ mov r0, #0x800
+ smull r7, r2, r6, r7
+ adds r7, r7, r0
+ adc r2, r2, #0x0
+ mov r7, r7, lsr #0xc
+ cmp r3, #0x0
+ mov lr, r6, asr #0x1f
+ orr r7, r7, r2, lsl #0x14
+ mov r2, #0x0
+ bne _0208E7A0
+ mov r12, r10, asr #0x1f
+ umull r11, r3, r6, r10
+ mla r3, r6, r12, r3
+ mla r3, lr, r10, r3
+ smull r6, r10, r7, r10
+ adds r6, r6, r0
+ adc r10, r10, r2
+ adds r11, r11, r0
+ adc r0, r3, r2
+ mov r7, r6, lsr #0xc
+ mov r6, r11, lsr #0xc
+ orr r7, r7, r10, lsl #0x14
+ orr r6, r6, r0, lsl #0x14
+ b _0208E7E0
+_0208E7A0:
+ cmp r3, #0x1
+ bne _0208E7C0
+ smull r10, r3, r7, r10
+ adds r7, r10, r0
+ adc r0, r3, r2
+ mov r7, r7, lsr #0xc
+ orr r7, r7, r0, lsl #0x14
+ b _0208E7E0
+_0208E7C0:
+ mov r12, r10, asr #0x1f
+ umull r11, r3, r6, r10
+ adds r0, r11, r0
+ mla r3, r6, r12, r3
+ mla r3, lr, r10, r3
+ adc r2, r3, r2
+ mov r6, r0, lsr #0xc
+ orr r6, r6, r2, lsl #0x14
+_0208E7E0:
+ ldr r0, [r9, #0x40]
+ ldr r0, [r0, #0x20]
+ ldr r10, [r0, #0x0]
+ ldr r0, [r10, #0x0]
+ mov r0, r0, lsl #0x8
+ movs r0, r0, lsr #0x1f
+ bne _0208E90C
+ ldr r3, [r8, #0x8]
+ ldr r2, [r8, #0x38]
+ add r0, sp, #0x0
+ add r2, r3, r2
+ str r2, [sp, #0x0]
+ ldr r10, [r8, #0xc]
+ ldr r3, [r8, #0x3c]
+ mov r2, r0
+ add r3, r10, r3
+ str r3, [sp, #0x4]
+ ldr r10, [r8, #0x10]
+ ldr r3, [r8, #0x40]
+ add r3, r10, r3
+ str r3, [sp, #0x8]
+ bl MTX_MultVec43
+ ldrh r0, [r8, #0x20]
+ ldr r2, _0208EAE8 ; =0x020FFA38
+ ldr r12, [sp, #0x0]
+ mov r0, r0, asr #0x4
+ mov r3, r0, lsl #0x1
+ mov r0, r3, lsl #0x1
+ ldrsh r1, [r2, r0]
+ add r0, r3, #0x1
+ mov r0, r0, lsl #0x1
+ ldrsh r0, [r2, r0]
+ str r12, [sp, #0x30]
+ mov r12, #0x1000
+ ldr r2, [sp, #0x4]
+ smull r11, r10, r1, r7
+ str r12, [sp, #0x2c]
+ rsb r3, r1, #0x0
+ ldr r1, [sp, #0x8]
+ str r2, [sp, #0x34]
+ mov r8, #0x0
+ smull r12, r7, r0, r7
+ mov r2, #0x800
+ str r1, [sp, #0x38]
+ adds r1, r12, r2
+ adc r12, r7, #0x0
+ adds r7, r11, r2
+ mov r11, r1, lsr #0xc
+ orr r11, r11, r12, lsl #0x14
+ smull r12, r1, r3, r6
+ adc r10, r10, #0x0
+ mov r7, r7, lsr #0xc
+ orr r7, r7, r10, lsl #0x14
+ adds r3, r12, r2
+ smull r10, r6, r0, r6
+ adc r0, r1, #0x0
+ adds r1, r10, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r0, lsl #0x14
+ mov r2, r1, lsr #0xc
+ adc r0, r6, #0x0
+ orr r2, r2, r0, lsl #0x14
+ ldr r1, _0208EAEC ; =0x04000454
+ str r11, [sp, #0xc]
+ add r0, sp, #0xc
+ str r7, [sp, #0x10]
+ str r8, [sp, #0x14]
+ str r3, [sp, #0x18]
+ str r2, [sp, #0x1c]
+ str r8, [sp, #0x20]
+ str r8, [sp, #0x24]
+ str r8, [sp, #0x28]
+ str r8, [r1, #0x0]
+ bl G3_MultMtx43
+ b _0208EA70
+_0208E90C:
+ ldr r3, [r8, #0x8]
+ ldr r2, [r8, #0x38]
+ ldr r0, [r10, #0x4]
+ add r2, r3, r2
+ sub r0, r2, r0
+ str r0, [sp, #0x0]
+ ldr r2, [r9, #0x40]
+ ldr r10, [r8, #0xc]
+ ldr r2, [r2, #0x20]
+ ldr r3, [r8, #0x3c]
+ ldr r2, [r2, #0x0]
+ add r3, r10, r3
+ ldr r2, [r2, #0x8]
+ add r0, sp, #0x0
+ sub r2, r3, r2
+ str r2, [sp, #0x4]
+ ldr r2, [r9, #0x40]
+ ldr r10, [r8, #0x10]
+ ldr r2, [r2, #0x20]
+ ldr r3, [r8, #0x40]
+ ldr r2, [r2, #0x0]
+ add r10, r10, r3
+ ldr r3, [r2, #0xc]
+ mov r2, r0
+ sub r3, r10, r3
+ str r3, [sp, #0x8]
+ bl MTX_MultVec43
+ ldrh r0, [r8, #0x20]
+ ldr r2, _0208EAE8 ; =0x020FFA38
+ mov r8, #0x0
+ mov r0, r0, asr #0x4
+ mov r3, r0, lsl #0x1
+ mov r0, r3, lsl #0x1
+ ldrsh r1, [r2, r0]
+ add r0, r3, #0x1
+ mov r0, r0, lsl #0x1
+ ldrsh r0, [r2, r0]
+ ldr r12, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ str r12, [sp, #0x30]
+ mov r12, #0x1000
+ str r2, [sp, #0x34]
+ smull r11, r10, r1, r7
+ str r12, [sp, #0x2c]
+ rsb r3, r1, #0x0
+ ldr r1, [sp, #0x8]
+ smull r12, r7, r0, r7
+ mov r2, #0x800
+ str r1, [sp, #0x38]
+ adds r1, r12, r2
+ adc r12, r7, #0x0
+ adds r7, r11, r2
+ mov r11, r1, lsr #0xc
+ orr r11, r11, r12, lsl #0x14
+ smull r12, r1, r3, r6
+ adc r10, r10, #0x0
+ mov r7, r7, lsr #0xc
+ orr r7, r7, r10, lsl #0x14
+ smull r10, r6, r0, r6
+ adds r3, r12, r2
+ adc r0, r1, #0x0
+ adds r1, r10, r2
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ adc r0, r6, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x1c]
+ ldr r0, _0208EAEC ; =0x04000454
+ str r11, [sp, #0xc]
+ str r7, [sp, #0x10]
+ str r8, [sp, #0x14]
+ str r2, [sp, #0x18]
+ str r8, [sp, #0x20]
+ str r8, [sp, #0x24]
+ str r8, [sp, #0x28]
+ str r8, [r0, #0x0]
+ ldr r0, [r9, #0x40]
+ ldr r1, _0208EAF0 ; =0x04000470
+ ldr r2, [r0, #0x20]
+ add r0, sp, #0xc
+ ldr r2, [r2, #0x0]
+ ldr r6, [r2, #0xc]
+ ldr r3, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x0]
+ str r6, [r1, #0x0]
+ bl G3_MultMtx43
+_0208EA70:
+ and r1, r5, #0x1f
+ and r0, r4, #0x1f
+ mul r2, r1, r0
+ and r1, r5, #0x3e0
+ and r0, r4, #0x3e0
+ mul r0, r1, r0
+ and r3, r5, #0x7c00
+ and r1, r4, #0x7c00
+ mul r4, r3, r1
+ mov r1, r2, asr #0x5
+ mov r0, r0, asr #0xf
+ mov r2, r4, asr #0x19
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r2, lsl #0xa
+ mov r0, r0, lsl #0x10
+ ldr r1, _0208EAF4 ; =0x04000480
+ mov r0, r0, lsr #0x10
+ str r0, [r1, #0x0]
+ ldr r2, [r9, #0x40]
+ ldr r1, [r2, #0x20]
+ ldrsh r0, [r2, #0x78]
+ ldr r3, [r1, #0x0]
+ ldrsh r1, [r2, #0x7a]
+ ldrsh r2, [r3, #0x50]
+ ldrsh r3, [r3, #0x52]
+ bl FUN_0208ECA0
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0208EAE4: .word 0x040004A4
+_0208EAE8: .word 0x020FFA38
+_0208EAEC: .word 0x04000454
+_0208EAF0: .word 0x04000470
+_0208EAF4: .word 0x04000480
+
+ arm_func_start FUN_0208EAF8
+FUN_0208EAF8: ; 0x0208EAF8
+ str r1, [r2, #0x0]
+ mov r12, #0x0
+ str r12, [r2, #0xc]
+ str r0, [r2, #0x18]
+ str r12, [r2, #0x24]
+ str r12, [r2, #0x4]
+ mov r3, #0x1000
+ str r3, [r2, #0x10]
+ str r12, [r2, #0x1c]
+ str r12, [r2, #0x28]
+ rsb r0, r0, #0x0
+ str r0, [r2, #0x8]
+ str r12, [r2, #0x14]
+ str r1, [r2, #0x20]
+ str r12, [r2, #0x2c]
+ bx lr
+
+ arm_func_start FUN_0208EB38
+FUN_0208EB38: ; 0x0208EB38
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _0208EBDC ; =0x00000555
+ rsb r7, r1, #0x1000
+ ldr ip, _0208EBE0 ; =0x0000093D
+ mov r4, #0x0
+ umull r9, r8, r7, r3
+ umull r6, r5, r0, r12
+ mov lr, #0x800
+ adds r9, r9, lr
+ mla r8, r7, r4, r8
+ mov r7, r7, asr #0x1f
+ mla r8, r7, r3, r8
+ adc r7, r8, #0x0
+ mov r3, r9, lsr #0xc
+ adds r6, r6, lr
+ orr r3, r3, r7, lsl #0x14
+ add r1, r3, r1
+ mla r5, r0, r4, r5
+ mov r0, r0, asr #0x1f
+ mla r5, r0, r12, r5
+ adc r0, r5, #0x0
+ mov r5, r6, lsr #0xc
+ orr r5, r5, r0, lsl #0x14
+ str r1, [r2, #0x0]
+ add r12, r3, r5
+ str r12, [r2, #0xc]
+ sub r0, r3, r5
+ str r0, [r2, #0x18]
+ str r4, [r2, #0x24]
+ str r0, [r2, #0x4]
+ str r1, [r2, #0x10]
+ str r12, [r2, #0x1c]
+ str r4, [r2, #0x28]
+ str r12, [r2, #0x8]
+ str r0, [r2, #0x14]
+ str r1, [r2, #0x20]
+ str r4, [r2, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0208EBDC: .word 0x00000555
+_0208EBE0: .word 0x0000093D
+
+ arm_func_start FUN_0208EBE4
+FUN_0208EBE4: ; 0x0208EBE4
+ stmdb sp!, {r4-r8,lr}
+ sub r7, r2, #0x1000
+ add r5, r3, #0x1000
+ add r4, r2, #0x1000
+ mov r2, r0, lsl #0x8
+ mov r0, r1, lsl #0x8
+ sub r3, r3, #0x1000
+ mov r0, r0, lsr #0x10
+ mov r1, r2, lsr #0x10
+ ldr ip, _0208EC8C ; =0x04000500
+ mov r8, #0x1
+ ldr r6, _0208EC90 ; =0x000003FF
+ mov r2, r7, lsl #0x10
+ mov lr, r5, lsl #0x10
+ mov r4, r4, lsl #0x10
+ mov r5, r3, lsl #0x10
+ ldr r3, _0208EC94 ; =0x04000488
+ str r8, [r12, #0x0]
+ mov r12, #0x0
+ and r2, r6, r2, asr #0x16
+ and r7, r6, lr, asr #0x16
+ and lr, r6, r4, asr #0x16
+ and r4, r6, r5, asr #0x16
+ ldr r6, _0208EC98 ; =0x04000490
+ str r12, [r3, #0x0]
+ orr r5, r2, r7, lsl #0x14
+ str r5, [r6, #0x0]
+ str r1, [r3, #0x0]
+ orr r5, lr, r7, lsl #0x14
+ str r5, [r6, #0x0]
+ orr r1, r1, r0, lsl #0x10
+ str r1, [r3, #0x0]
+ orr r1, lr, r4, lsl #0x14
+ str r1, [r6, #0x0]
+ mov r0, r0, lsl #0x10
+ str r0, [r3, #0x0]
+ orr r1, r2, r4, lsl #0x14
+ ldr r0, _0208EC9C ; =0x04000504
+ str r1, [r6, #0x0]
+ str r12, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208EC8C: .word 0x04000500
+_0208EC90: .word 0x000003FF
+_0208EC94: .word 0x04000488
+_0208EC98: .word 0x04000490
+_0208EC9C: .word 0x04000504
+
+ arm_func_start FUN_0208ECA0
+FUN_0208ECA0: ; 0x0208ECA0
+ stmdb sp!, {r4-r8,lr}
+ add r12, r3, #0x1000
+ sub r5, r2, #0x1000
+ add r4, r2, #0x1000
+ mov r2, r0, lsl #0x8
+ mov r0, r1, lsl #0x8
+ sub r3, r3, #0x1000
+ mov r0, r0, lsr #0x10
+ mov r1, r2, lsr #0x10
+ ldr r7, _0208ED48 ; =0x04000500
+ mov r8, #0x1
+ ldr r6, _0208ED4C ; =0x000003FF
+ mov r2, r12, lsl #0x10
+ mov lr, r5, lsl #0x10
+ mov r4, r4, lsl #0x10
+ mov r5, r3, lsl #0x10
+ ldr r3, _0208ED50 ; =0x04000488
+ str r8, [r7, #0x0]
+ mov r12, #0x0
+ and r7, r6, r2, asr #0x16
+ and r2, r6, lr, asr #0x16
+ and lr, r6, r4, asr #0x16
+ and r4, r6, r5, asr #0x16
+ ldr r6, _0208ED54 ; =0x04000490
+ str r12, [r3, #0x0]
+ orr r5, r2, r7, lsl #0xa
+ str r5, [r6, #0x0]
+ str r1, [r3, #0x0]
+ orr r5, lr, r7, lsl #0xa
+ str r5, [r6, #0x0]
+ orr r1, r1, r0, lsl #0x10
+ str r1, [r3, #0x0]
+ orr r1, lr, r4, lsl #0xa
+ str r1, [r6, #0x0]
+ mov r0, r0, lsl #0x10
+ str r0, [r3, #0x0]
+ orr r1, r2, r4, lsl #0xa
+ ldr r0, _0208ED58 ; =0x04000504
+ str r1, [r6, #0x0]
+ str r12, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0208ED48: .word 0x04000500
+_0208ED4C: .word 0x000003FF
+_0208ED50: .word 0x04000488
+_0208ED54: .word 0x04000490
+_0208ED58: .word 0x04000504
+
+ arm_func_start FUN_0208ED5C
+FUN_0208ED5C: ; 0x0208ED5C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ ldr r3, [r1, #0x20]
+ str r1, [sp, #0x0]
+ ldr r6, [r3, #0x14]
+ mov r8, r0
+ ldrb r3, [r6, #0x8]
+ ldrb r0, [r6, #0xc]
+ str r2, [sp, #0x4]
+ mov r3, r3, lsl #0xc
+ mov r2, r3, asr #0x1f
+ mov r2, r2, lsl #0x4
+ mov r1, #0x800
+ mov r4, r3, lsl #0x4
+ adds r4, r4, r1
+ orr r2, r2, r3, lsr #0x1c
+ adc r1, r2, #0x0
+ mov r5, r4, lsr #0xc
+ cmp r0, #0x0
+ mov r0, #0x0
+ str r0, [sp, #0x8]
+ orr r5, r5, r1, lsl #0x14
+ addle sp, sp, #0x24
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ ldr sb, _0208F06C ; =0x021C8C5C
+ str r0, [sp, #0x18]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ mov r0, #0x1000
+ mov r4, r5, asr #0x1f
+ str r0, [sp, #0x10]
+_0208EDE0:
+ ldr r0, [sp, #0x4]
+ bl FUN_02090A58
+ movs r7, r0
+ addeq sp, sp, #0x24
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, [sp, #0x0]
+ mov r1, r7
+ add r0, r0, #0x14
+ bl FUN_02090AA4
+ add r0, r7, #0x38
+ add r1, r8, #0x8
+ str r0, [sp, #0xc]
+ add r10, r7, #0x8
+ ldmia r1, {r0-r2}
+ stmia r10, {r0-r2}
+ ldr r10, [r8, #0x14]
+ ldr r12, [r9, #0x0]
+ ldr r1, _0208F070 ; =0x5EEDF715
+ ldr r0, _0208F074 ; =0x1B0CB173
+ mov r2, r10, asr #0x1f
+ mla r0, r12, r1, r0
+ str r0, [r9, #0x0]
+ umull lr, r12, r10, r5
+ mla r12, r10, r4, r12
+ ldrsh r1, [r6, #0x2]
+ mov r0, r0, lsr #0x17
+ mla r12, r2, r5, r12
+ mul r0, r1, r0
+ mov r3, #0x800
+ adds r2, lr, r3
+ sub r0, r0, r1, lsl #0x8
+ adc r10, r12, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r10, lsl #0x14
+ add r0, r2, r0, asr #0x8
+ str r0, [r7, #0x14]
+ ldr r10, [r8, #0x18]
+ ldr r12, [r9, #0x0]
+ ldr r1, _0208F070 ; =0x5EEDF715
+ ldr r0, _0208F074 ; =0x1B0CB173
+ mov r2, r10, asr #0x1f
+ mla r0, r12, r1, r0
+ str r0, [r9, #0x0]
+ umull lr, r12, r10, r5
+ mla r12, r10, r4, r12
+ mla r12, r2, r5, r12
+ adds r2, lr, r3
+ ldrsh r1, [r6, #0x2]
+ mov r0, r0, lsr #0x17
+ adc r10, r12, #0x0
+ mul r0, r1, r0
+ mov r2, r2, lsr #0xc
+ sub r0, r0, r1, lsl #0x8
+ orr r2, r2, r10, lsl #0x14
+ add r0, r2, r0, asr #0x8
+ str r0, [r7, #0x18]
+ ldr r12, [r8, #0x1c]
+ ldr r10, [r9, #0x0]
+ ldr r1, _0208F070 ; =0x5EEDF715
+ ldr r0, _0208F074 ; =0x1B0CB173
+ mov r2, r12, asr #0x1f
+ mla r0, r10, r1, r0
+ umull r10, lr, r12, r5
+ str r0, [r9, #0x0]
+ mla lr, r12, r4, lr
+ adds r3, r10, r3
+ mla lr, r2, r5, lr
+ ldrsh r1, [r6, #0x2]
+ mov r0, r0, lsr #0x17
+ adc r2, lr, #0x0
+ mul r0, r1, r0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ sub r0, r0, r1, lsl #0x8
+ add r0, r3, r0, asr #0x8
+ ldr r3, [sp, #0xc]
+ add r11, r8, #0x38
+ str r0, [r7, #0x1c]
+ ldmia r11, {r0-r2}
+ stmia r3, {r0-r2}
+ ldrb r0, [r6, #0x9]
+ ldrsh r1, [r8, #0x34]
+ ldr r2, [r8, #0x30]
+ add r0, r0, #0x1
+ mul r1, r2, r1
+ mov r1, r1, asr #0xc
+ mul r0, r1, r0
+ mov r0, r0, asr #0x6
+ str r0, [r7, #0x30]
+ ldr r0, [sp, #0x10]
+ strh r0, [r7, #0x34]
+ ldrh r0, [r6, #0x0]
+ mov r0, r0, lsl #0x19
+ movs r0, r0, lsr #0x1f
+ ldrneh r0, [r6, #0xa]
+ strneh r0, [r7, #0x36]
+ ldreqh r0, [r8, #0x36]
+ streqh r0, [r7, #0x36]
+ ldrh r1, [r8, #0x2e]
+ ldrh r0, [r7, #0x2e]
+ mov r2, r1, lsl #0x1b
+ mov r1, r1, lsl #0x16
+ mov r1, r1, lsr #0x1b
+ mov r2, r2, lsr #0x1b
+ add r1, r1, #0x1
+ mul r1, r2, r1
+ mov r1, r1, lsl #0xb
+ mov r1, r1, lsr #0x10
+ bic r0, r0, #0x1f
+ and r1, r1, #0x1f
+ orr r0, r0, r1
+ strh r0, [r7, #0x2e]
+ ldrh r0, [r7, #0x2e]
+ bic r0, r0, #0x3e0
+ orr r0, r0, #0x3e0
+ strh r0, [r7, #0x2e]
+ ldrh r0, [r6, #0x0]
+ mov r0, r0, lsl #0x1b
+ movs r0, r0, lsr #0x1e
+ beq _0208EFE4
+ cmp r0, #0x1
+ beq _0208EFF4
+ cmp r0, #0x2
+ ldreqh r0, [r8, #0x20]
+ streqh r0, [r7, #0x20]
+ ldreqsh r0, [r8, #0x22]
+ streqh r0, [r7, #0x22]
+ b _0208F004
+_0208EFE4:
+ ldr r0, [sp, #0x14]
+ strh r0, [r7, #0x20]
+ strh r0, [r7, #0x22]
+ b _0208F004
+_0208EFF4:
+ ldrh r0, [r8, #0x20]
+ strh r0, [r7, #0x20]
+ ldr r0, [sp, #0x18]
+ strh r0, [r7, #0x22]
+_0208F004:
+ ldrh r1, [r6, #0x6]
+ ldr r0, _0208F078 ; =0x0000FFFF
+ strh r1, [r7, #0x24]
+ ldr r1, [sp, #0x1c]
+ strh r1, [r7, #0x26]
+ ldrb r1, [r6, #0xf]
+ strb r1, [r7, #0x2c]
+ ldrh r1, [r8, #0x24]
+ mov r1, r1, lsr #0x1
+ bl _s32_div_f
+ strh r0, [r7, #0x28]
+ ldrh r1, [r8, #0x24]
+ ldr r0, _0208F078 ; =0x0000FFFF
+ bl _s32_div_f
+ strh r0, [r7, #0x2a]
+ ldr r0, [sp, #0x20]
+ strb r0, [r7, #0x2d]
+ ldr r0, [sp, #0x8]
+ ldrb r1, [r6, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0x8]
+ cmp r0, r1
+ blt _0208EDE0
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0208F06C: .word 0x021C8C5C
+_0208F070: .word 0x5EEDF715
+_0208F074: .word 0x1B0CB173
+_0208F078: .word 0x0000FFFF
+
+ arm_func_start FUN_0208F07C
+FUN_0208F07C: ; 0x0208F07C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc4
+ mov r9, r0
+ ldr r0, [r9, #0x20]
+ ldrsh r3, [r9, #0x4e]
+ str r0, [sp, #0x4]
+ ldr r0, [r9, #0x58]
+ ldr r2, _0208FD88 ; =0x00000FFF
+ add r3, r0, r3
+ ldr r0, [sp, #0x4]
+ str r1, [sp, #0x0]
+ ldr r8, [r0, #0x0]
+ and r0, r3, r2
+ strh r0, [r9, #0x4e]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x1c
+ mov r1, r0, lsr #0x1c
+ mov r0, r3, asr #0xc
+ cmp r1, #0x2
+ str r0, [sp, #0xc]
+ beq _0208F0E4
+ cmp r1, #0x3
+ beq _0208F0E4
+ sub r0, r1, #0x5
+ cmp r0, #0x4
+ bhi _0208F0EC
+_0208F0E4:
+ mov r0, r9
+ bl FUN_0208FF08
+_0208F0EC:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ mov r0, #0x0
+ str r0, [sp, #0x8]
+ addle sp, sp, #0xc4
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ str r0, [sp, #0x18]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x1c]
+ mov r0, #0x1000
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x8]
+ ldr r6, _0208FD8C ; =0x021C8C5C
+ ldr r4, _0208FD90 ; =0x5EEDF715
+ ldr r5, _0208FD94 ; =0x1B0CB173
+ str r0, [sp, #0x38]
+ str r0, [sp, #0x3c]
+ str r0, [sp, #0x40]
+_0208F13C:
+ ldr r0, [sp, #0x0]
+ bl FUN_02090A58
+ movs r7, r0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ add r0, r9, #0x8
+ mov r1, r7
+ bl FUN_02090AA4
+_0208F160: ; 0x0208F160
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x1c
+ mov r0, r0, lsr #0x1c
+ cmp r0, #0x9
+ addls pc, pc, r0, lsl #0x2
+ b _0208F87C
+_0208F178:
+ b _0208F1A0
+_0208F17C:
+ b _0208F1BC
+_0208F180:
+ b _0208F22C
+_0208F184:
+ b _0208F294
+_0208F188:
+ b _0208F328
+_0208F18C:
+ b _0208F428
+_0208F190:
+ b _0208F720
+_0208F194:
+ b _0208F7A4
+_0208F198:
+ b _0208F4E4
+_0208F19C:
+ b _0208F5B4
+_0208F1A0:
+ ldr r0, [sp, #0x1c]
+ str r0, [r7, #0x10]
+ ldr r0, [r7, #0x10]
+ str r0, [r7, #0xc]
+ ldr r0, [r7, #0xc]
+ str r0, [r7, #0x8]
+ b _0208F87C
+_0208F1BC:
+ add r0, r7, #0x8
+ bl FUN_02090B50
+ ldr r2, [r7, #0x8]
+ ldr r1, [r9, #0x5c]
+ mov r0, #0x800
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x8]
+ ldr r2, [r7, #0xc]
+ ldr r1, [r9, #0x5c]
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0xc]
+ ldr r2, [r7, #0x10]
+ ldr r1, [r9, #0x5c]
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r0, r1, #0x0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [r7, #0x10]
+ b _0208F87C
+_0208F22C:
+ add r0, sp, #0x58
+ bl FUN_02090AF4
+ ldr r2, [sp, #0x58]
+ ldr r0, [r9, #0x5c]
+ mov r1, #0x800
+ smull r3, r0, r2, r0
+ adds r2, r3, r1
+ adc r0, r0, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x58]
+ ldr r3, [sp, #0x5c]
+ ldr r2, [r9, #0x5c]
+ add r0, r7, #0x8
+ smull r10, r2, r3, r2
+ adds r3, r10, r1
+ adc r1, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ ldr r1, [sp, #0x20]
+ str r2, [sp, #0x5c]
+ str r1, [sp, #0x60]
+ add r1, sp, #0x58
+ mov r2, r9
+ bl FUN_0208FDA8
+ b _0208F87C
+_0208F294:
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0xc]
+ bl _s32_div_f
+ ldr r1, [sp, #0x18]
+ mov r0, r0, asr #0x4
+ add r1, r1, #0x10000
+ mov r2, r0, lsl #0x1
+ str r1, [sp, #0x18]
+ ldr r0, _0208FD98 ; =0x020FFA38
+ mov r1, r2, lsl #0x1
+ ldrsh r0, [r0, r1]
+ add r1, r2, #0x1
+ mov r2, r1, lsl #0x1
+ ldr r1, _0208FD98 ; =0x020FFA38
+ ldrsh r3, [r1, r2]
+ ldr r2, [r9, #0x5c]
+ mov r1, #0x800
+ smull r10, r2, r0, r2
+ adds r10, r10, r1
+ adc r0, r2, #0x0
+ mov r2, r10, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x64]
+ ldr r2, [r9, #0x5c]
+ add r0, r7, #0x8
+ smull r10, r2, r3, r2
+ adds r3, r10, r1
+ adc r1, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ ldr r1, [sp, #0x24]
+ str r2, [sp, #0x68]
+ str r1, [sp, #0x6c]
+ add r1, sp, #0x64
+ mov r2, r9
+ bl FUN_0208FDA8
+ b _0208F87C
+_0208F328:
+ add r0, r7, #0x8
+ bl FUN_02090B50
+ ldr r1, [r6, #0x0]
+ mov r0, #0x800
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x8
+ ldr r3, [r7, #0x8]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x8]
+ ldr r1, [r6, #0x0]
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x8
+ ldr r3, [r7, #0xc]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0xc]
+ ldr r1, [r6, #0x0]
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x8
+ ldr r3, [r7, #0x10]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r0, r1, #0x0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [r7, #0x10]
+ b _0208F87C
+_0208F428:
+ add r0, sp, #0x70
+ bl FUN_02090AF4
+_0208F430: ; 0x0208F430
+ ldr r0, [r6, #0x0]
+ ldr r3, [sp, #0x70]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ ldr r0, [r9, #0x5c]
+ mov r2, #0x800
+ smull r10, r0, r3, r0
+ adds r10, r10, r2
+ adc r3, r0, #0x0
+ mov r0, r10, lsr #0xc
+ orr r0, r0, r3, lsl #0x14
+ mov r3, r1, lsr #0x17
+ mov r3, r3, lsl #0xc
+ sub r3, r3, #0x100000
+ mov r3, r3, asr #0x8
+ smull r10, r3, r0, r3
+ adds r10, r10, r2
+ adc r0, r3, #0x0
+ mov r3, r10, lsr #0xc
+ orr r3, r3, r0, lsl #0x14
+ mla r0, r1, r4, r5
+ str r0, [r6, #0x0]
+ str r3, [sp, #0x70]
+ mov r0, r0, lsr #0x17
+ mov r0, r0, lsl #0xc
+ sub r0, r0, #0x100000
+ mov r1, r0, asr #0x8
+ ldr r10, [sp, #0x74]
+ ldr r3, [r9, #0x5c]
+ add r0, r7, #0x8
+ smull r11, r3, r10, r3
+ adds r10, r11, r2
+ adc r3, r3, #0x0
+ mov r10, r10, lsr #0xc
+ orr r10, r10, r3, lsl #0x14
+ smull r3, r1, r10, r1
+ adds r2, r3, r2
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x74]
+ add r1, sp, #0x70
+ mov r2, r9
+ bl FUN_0208FDA8
+ b _0208F87C
+_0208F4E4:
+ add r0, r7, #0x8
+ bl FUN_02090B50
+ add r0, r9, #0x84
+ add r1, r9, #0x8a
+ add r2, sp, #0x44
+ bl VEC_Fx16CrossProduct
+ ldrsh r1, [sp, #0x46]
+ ldrsh r0, [sp, #0x48]
+ ldrsh r2, [sp, #0x44]
+ str r1, [sp, #0x80]
+ str r0, [sp, #0x84]
+ add r0, sp, #0x7c
+ add r1, r7, #0x8
+ str r2, [sp, #0x7c]
+ bl VEC_DotProduct
+_0208F520: ; 0x0208F520
+ cmp r0, #0x0
+ bgt _0208F54C
+ ldr r0, [r7, #0x8]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0x8]
+ ldr r0, [r7, #0xc]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0xc]
+ ldr r0, [r7, #0x10]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0x10]
+_0208F54C:
+ ldr r2, [r7, #0x8]
+ ldr r1, [r9, #0x5c]
+ mov r0, #0x800
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x8]
+ ldr r2, [r7, #0xc]
+ ldr r1, [r9, #0x5c]
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0xc]
+ ldr r2, [r7, #0x10]
+ ldr r1, [r9, #0x5c]
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r0, r1, #0x0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [r7, #0x10]
+ b _0208F87C
+_0208F5B4:
+ add r0, r7, #0x8
+ bl FUN_02090B50
+ add r0, r9, #0x84
+ add r1, r9, #0x8a
+ add r2, sp, #0x4a
+ bl VEC_Fx16CrossProduct
+ ldrsh r1, [sp, #0x4c]
+ ldrsh r0, [sp, #0x4e]
+ ldrsh r2, [sp, #0x4a]
+ str r1, [sp, #0x8c]
+ str r0, [sp, #0x90]
+ add r0, sp, #0x88
+ add r1, r7, #0x8
+ str r2, [sp, #0x88]
+ bl VEC_DotProduct
+_0208F5F0: ; 0x0208F5F0
+ cmp r0, #0x0
+ bge _0208F61C
+ ldr r0, [r7, #0x8]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0x8]
+ ldr r0, [r7, #0xc]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0xc]
+ ldr r0, [r7, #0x10]
+ rsb r0, r0, #0x0
+ str r0, [r7, #0x10]
+_0208F61C:
+ ldr r1, [r6, #0x0]
+ mov r0, #0x800
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x9
+ add r1, r1, #0x800
+ ldr r3, [r7, #0x8]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x8]
+ ldr r1, [r6, #0x0]
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x9
+ add r1, r1, #0x800
+ ldr r3, [r7, #0xc]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0xc]
+ ldr r1, [r6, #0x0]
+ mla r2, r1, r4, r5
+ str r2, [r6, #0x0]
+ mov r1, r2, lsr #0x17
+ mov r1, r1, lsl #0xc
+ sub r1, r1, #0x100000
+ mov r1, r1, asr #0x9
+ add r1, r1, #0x800
+ ldr r3, [r7, #0x10]
+ ldr r2, [r9, #0x5c]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ smull r2, r1, r3, r1
+ adds r2, r2, r0
+ adc r0, r1, #0x0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [r7, #0x10]
+ b _0208F87C
+_0208F720:
+ add r0, r7, #0x14
+ bl FUN_02090AF4
+ ldr r2, [r7, #0x14]
+ ldr r1, [r9, #0x5c]
+ mov r0, #0x800
+ smull r3, r1, r2, r1
+ adds r2, r3, r0
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x94]
+ ldr r3, [r7, #0x18]
+ ldr r2, [r9, #0x5c]
+ ldr r1, [r6, #0x0]
+ smull r10, r2, r3, r2
+ adds r3, r10, r0
+ adc r0, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ mla r0, r1, r4, r5
+ str r0, [r6, #0x0]
+ str r2, [sp, #0x98]
+ mov r1, r0, lsr #0x17
+ ldr r2, [r9, #0x60]
+ add r0, r7, #0x8
+ mul r1, r2, r1
+ sub r1, r1, r2, lsl #0x8
+ mov r1, r1, asr #0x8
+ str r1, [sp, #0x9c]
+ add r1, sp, #0x94
+ mov r2, r9
+ bl FUN_0208FDA8
+ b _0208F87C
+_0208F7A4:
+ add r0, r7, #0x14
+ bl FUN_02090AF4
+_0208F7AC: ; 0x0208F7AC
+ ldr r0, [r6, #0x0]
+ mov r3, #0x800
+ mla r2, r0, r4, r5
+ str r2, [r6, #0x0]
+ ldr r10, [r7, #0x14]
+ ldr r0, [r9, #0x5c]
+ mov r1, r2, lsr #0x17
+ smull r11, r0, r10, r0
+ adds r11, r11, r3
+ mov r1, r1, lsl #0xc
+ adc r10, r0, #0x0
+ mov r0, r11, lsr #0xc
+ sub r1, r1, #0x100000
+ orr r0, r0, r10, lsl #0x14
+ mov r1, r1, asr #0x8
+ smull r10, r1, r0, r1
+ adds r10, r10, r3
+ adc r0, r1, #0x0
+ mov r1, r10, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0xa0]
+ mla r1, r2, r4, r5
+ str r1, [r6, #0x0]
+ mov r2, r1, lsr #0x17
+ mov r2, r2, lsl #0xc
+ sub r2, r2, #0x100000
+ ldr r10, [r7, #0x18]
+ ldr r0, [r9, #0x5c]
+ mov r2, r2, asr #0x8
+ smull r11, r0, r10, r0
+ adds r11, r11, r3
+ adc r10, r0, #0x0
+ mov r0, r11, lsr #0xc
+ orr r0, r0, r10, lsl #0x14
+ smull r10, r2, r0, r2
+ adds r3, r10, r3
+ adc r0, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ mla r0, r1, r4, r5
+ str r0, [r6, #0x0]
+ str r2, [sp, #0xa4]
+ mov r1, r0, lsr #0x17
+ ldr r2, [r9, #0x60]
+ add r0, r7, #0x8
+ mul r1, r2, r1
+ sub r1, r1, r2, lsl #0x8
+ mov r1, r1, asr #0x8
+ str r1, [sp, #0xa8]
+ add r1, sp, #0xa0
+ mov r2, r9
+ bl FUN_0208FDA8
+_0208F87C:
+ ldr r1, [r6, #0x0]
+ mla r0, r1, r4, r5
+ str r0, [r6, #0x0]
+ ldrb r2, [r8, #0x42]
+ mov r1, r0, lsr #0x18
+ ldr r3, [r9, #0x64]
+ mul r1, r2, r1
+ add r2, r2, #0xff
+ sub r1, r2, r1, asr #0x7
+ mul r1, r3, r1
+ mov r1, r1, asr #0x8
+ str r1, [sp, #0x10]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x18
+ ldrb r2, [r8, #0x42]
+ ldr r3, [r9, #0x68]
+ ldr r1, [r8, #0x0]
+ mul r0, r2, r0
+ add r2, r2, #0xff
+ sub r0, r2, r0, asr #0x7
+ mul r0, r3, r0
+ mov r0, r0, asr #0x8
+ str r0, [sp, #0x14]
+ mov r0, r1, lsl #0x1c
+ mov r0, r0, lsr #0x1c
+ cmp r0, #0x6
+ bne _0208F9C8
+ ldrsh r0, [r9, #0x84]
+ ldr r1, [r7, #0x14]
+ mov r2, #0x800
+ smull r3, r0, r1, r0
+ adds r1, r3, r2
+ ldrsh r3, [r9, #0x8a]
+ ldr lr, [r7, #0x18]
+ mov r12, r1, lsr #0xc
+ smull r10, r3, lr, r3
+ adc r0, r0, #0x0
+ adds r10, r10, r2
+ orr r12, r12, r0, lsl #0x14
+ adc r3, r3, #0x0
+ mov r10, r10, lsr #0xc
+ orr r10, r10, r3, lsl #0x14
+ add r3, r12, r10
+ str r3, [sp, #0xb8]
+ ldrsh r10, [r9, #0x86]
+ ldr r3, [r7, #0x14]
+ ldrsh lr, [r9, #0x8c]
+ smull r12, r10, r3, r10
+ adds r12, r12, r2
+ ldr r11, [r7, #0x18]
+ adc r10, r10, #0x0
+ smull r3, lr, r11, lr
+ mov r12, r12, lsr #0xc
+ adds r3, r3, r2
+ orr r12, r12, r10, lsl #0x14
+ adc r10, lr, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r10, lsl #0x14
+ add r3, r12, r3
+ str r3, [sp, #0xbc]
+ ldr r10, [r7, #0x18]
+ ldrsh r11, [r9, #0x88]
+ ldr r3, [r7, #0x14]
+ str r10, [sp, #0x28]
+ smull r12, r11, r3, r11
+ ldrsh r10, [r9, #0x8e]
+ ldr r3, [sp, #0x28]
+ adds r12, r12, r2
+ smull r10, lr, r3, r10
+ adc r3, r11, #0x0
+ adds r2, r10, r2
+ mov r10, r12, lsr #0xc
+ orr r10, r10, r3, lsl #0x14
+ adc r3, lr, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r3, lsl #0x14
+ add r2, r10, r2
+ add r0, sp, #0xb8
+ add r1, sp, #0xac
+ str r2, [sp, #0xc0]
+ bl VEC_Normalize
+ b _0208FA04
+_0208F9C8:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _0208F9F8
+ ldr r0, [r7, #0xc]
+ cmp r0, #0x0
+ bne _0208F9F8
+ ldr r0, [r7, #0x10]
+ cmp r0, #0x0
+ bne _0208F9F8
+ add r0, sp, #0xac
+ bl FUN_02090B50
+ b _0208FA04
+_0208F9F8:
+ add r0, r7, #0x8
+ add r1, sp, #0xac
+ bl VEC_Normalize
+_0208FA04:
+ ldr r2, [sp, #0xac]
+ ldr r1, [sp, #0x10]
+ mov r0, #0x800
+ smull r10, r1, r2, r1
+ adds r2, r10, r0
+ add r10, r9, #0x28
+ str r10, [sp, #0x2c]
+ add r10, r7, #0x38
+ str r10, [sp, #0x30]
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ ldrsh r1, [r9, #0x50]
+ ldr r10, [sp, #0x14]
+ ldr r3, [r9, #0x40]
+ smull r11, r10, r1, r10
+ adds r11, r11, r0
+ adc r1, r10, #0x0
+ mov r10, r11, lsr #0xc
+ orr r10, r10, r1, lsl #0x14
+ add r1, r2, r10
+ add r1, r3, r1
+ str r1, [r7, #0x14]
+ ldr r3, [sp, #0xb0]
+ ldr r1, [sp, #0x10]
+ ldrsh r10, [r9, #0x52]
+ smull r11, r1, r3, r1
+ adds r11, r11, r0
+ adc r3, r1, #0x0
+ mov r1, r11, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ ldr r3, [sp, #0x14]
+ ldr r2, [r9, #0x44]
+ smull r11, r3, r10, r3
+ adds r10, r11, r0
+ adc r3, r3, #0x0
+ mov r10, r10, lsr #0xc
+ orr r10, r10, r3, lsl #0x14
+ add r1, r1, r10
+ add r1, r2, r1
+ str r1, [r7, #0x18]
+ ldr r1, [sp, #0xb4]
+ ldr r2, [sp, #0x10]
+ ldrsh lr, [r9, #0x54]
+ smull r10, r3, r1, r2
+ ldr r1, [sp, #0x14]
+ adds r10, r10, r0
+ smull r2, r1, lr, r1
+ adc r3, r3, #0x0
+ adds r0, r2, r0
+ mov r2, r10, lsr #0xc
+ orr r2, r2, r3, lsl #0x14
+ adc r1, r1, #0x0
+ mov r0, r0, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ ldr r12, [r9, #0x48]
+ add r0, r2, r0
+ add r0, r12, r0
+ str r0, [r7, #0x1c]
+ ldr r0, [sp, #0x2c]
+ ldr r3, [sp, #0x30]
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r0, [r6, #0x0]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x18
+ ldrb r1, [r8, #0x40]
+ ldr r2, [r9, #0x6c]
+ mul r0, r1, r0
+ add r1, r1, #0xff
+ sub r0, r1, r0, asr #0x7
+ mul r0, r2, r0
+ mov r0, r0, asr #0x8
+ str r0, [r7, #0x30]
+ ldr r0, [sp, #0x34]
+ strh r0, [r7, #0x34]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x16
+ movs r0, r0, lsr #0x1f
+ beq _0208FBBC
+ ldr r0, [sp, #0x4]
+ ldr r0, [r0, #0x8]
+ ldrh r0, [r0, #0x8]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, lsr #0x1f
+ beq _0208FBBC
+ ldr r0, [r6, #0x0]
+ ldr r3, _0208FD9C ; =0x00000003
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x14
+ ldr r1, [sp, #0x4]
+ ldr r2, [r1, #0x8]
+ ldr r1, _0208FDA0 ; =0xAAAAAAAB
+ umull r1, r10, r0, r1
+ mov r10, r10, lsr #0x1
+ umull r10, r11, r3, r10
+ ldrh r1, [r2, #0x0]
+ sub r10, r0, r10
+ strh r1, [sp, #0x50]
+ ldrh r0, [r8, #0x22]
+ mov r1, r10, lsl #0x1
+ strh r0, [sp, #0x52]
+ ldrh r0, [r2, #0x2]
+ strh r0, [sp, #0x54]
+ add r0, sp, #0x50
+ ldrh r0, [r0, r1]
+ strh r0, [r7, #0x36]
+ b _0208FBC4
+_0208FBBC:
+ ldrh r0, [r8, #0x22]
+ strh r0, [r7, #0x36]
+_0208FBC4:
+ ldrh r1, [r7, #0x2e]
+ ldrb r0, [r9, #0x81]
+ bic r1, r1, #0x1f
+ and r0, r0, #0x1f
+ orr r0, r1, r0
+ strh r0, [r7, #0x2e]
+ ldrh r0, [r7, #0x2e]
+ bic r0, r0, #0x3e0
+ orr r0, r0, #0x3e0
+ strh r0, [r7, #0x2e]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x12
+ movs r0, r0, lsr #0x1f
+ ldrne r0, [r6, #0x0]
+ mlane r1, r0, r4, r5
+ strne r1, [r6, #0x0]
+ strneh r1, [r7, #0x20]
+ ldreqh r0, [r9, #0x56]
+ streqh r0, [r7, #0x20]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ ldreq r0, [sp, #0x38]
+ streqh r0, [r7, #0x22]
+ beq _0208FC54
+ ldr r0, [r6, #0x0]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x14
+ ldrsh r2, [r8, #0x34]
+ ldrsh r1, [r8, #0x36]
+ sub r1, r1, r2
+ mul r0, r1, r0
+ add r0, r0, r2, lsl #0xc
+ mov r0, r0, lsr #0xc
+ strh r0, [r7, #0x22]
+_0208FC54:
+ ldr r0, [r6, #0x0]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x18
+ ldrb r1, [r8, #0x41]
+ ldrh r2, [r9, #0x70]
+ mul r0, r1, r0
+ mov r0, r0, asr #0x8
+ rsb r0, r0, #0xff
+ mul r0, r2, r0
+ mov r0, r0, asr #0x8
+ add r0, r0, #0x1
+ strh r0, [r7, #0x24]
+ ldr r0, [sp, #0x3c]
+ strh r0, [r7, #0x26]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0x14
+ movs r1, r0, lsr #0x1f
+ beq _0208FCE4
+ ldr r0, [sp, #0x4]
+ ldr r0, [r0, #0x10]
+ ldr r0, [r0, #0x8]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ beq _0208FCE4
+ ldr r0, [r6, #0x0]
+ mla r1, r0, r4, r5
+ str r1, [r6, #0x0]
+ mov r0, r1, lsr #0x14
+ ldr r1, [sp, #0x4]
+ ldr r10, [r1, #0x10]
+ ldrb r1, [r10, #0x8]
+ bl _u32_div_f
+ ldrb r0, [r10, r1]
+ strb r0, [r7, #0x2c]
+ b _0208FD14
+_0208FCE4:
+ cmp r1, #0x0
+ beq _0208FD0C
+ ldr r0, [sp, #0x4]
+ ldr r1, [r0, #0x10]
+ ldr r0, [r1, #0x8]
+ mov r0, r0, lsl #0xf
+ movs r0, r0, lsr #0x1f
+ ldreqb r0, [r1, #0x0]
+ streqb r0, [r7, #0x2c]
+ beq _0208FD14
+_0208FD0C:
+ ldrb r0, [r8, #0x47]
+ strb r0, [r7, #0x2c]
+_0208FD14:
+ ldr r1, [sp, #0x4]
+ ldr r0, _0208FDA4 ; =0x0000FFFF
+ ldr r1, [r1, #0x0]
+ ldrb r1, [r1, #0x48]
+ bl _s32_div_f
+ strh r0, [r7, #0x28]
+ ldrh r1, [r7, #0x24]
+ ldr r0, _0208FDA4 ; =0x0000FFFF
+ bl _s32_div_f
+ strh r0, [r7, #0x2a]
+ ldr r0, [sp, #0x40]
+ strb r0, [r7, #0x2d]
+ ldr r0, [r8, #0x0]
+ mov r0, r0, lsl #0xb
+ movs r0, r0, lsr #0x1f
+ ldrne r0, [r6, #0x0]
+ mlane r1, r0, r4, r5
+ strne r1, [r6, #0x0]
+ movne r0, r1, lsr #0x18
+ strneb r0, [r7, #0x2d]
+ ldr r0, [sp, #0x8]
+ add r1, r0, #0x1
+ ldr r0, [sp, #0xc]
+ str r1, [sp, #0x8]
+ cmp r1, r0
+ blt _0208F13C
+ add sp, sp, #0xc4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0208FD88: .word 0x00000FFF
+_0208FD8C: .word 0x021C8C5C
+_0208FD90: .word 0x5EEDF715
+_0208FD94: .word 0x1B0CB173
+_0208FD98: .word 0x020FFA38
+_0208FD9C: .word 0x00000003
+_0208FDA0: .word 0xAAAAAAAB
+_0208FDA4: .word 0x0000FFFF
+
+ arm_func_start FUN_0208FDA8
+FUN_0208FDA8: ; 0x0208FDA8
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r4, r2
+ mov r6, r0
+ mov r5, r1
+ add r2, sp, #0x0
+ add r0, r4, #0x84
+ add r1, r4, #0x8a
+ bl VEC_Fx16CrossProduct
+_0208FDCC: ; 0x0208FDCC
+ add r0, sp, #0x0
+ mov r1, r0
+ bl VEC_Fx16Normalize
+ ldrsh r1, [sp, #0x0]
+ ldr lr, [r5, #0x8]
+ ldrsh r0, [r4, #0x84]
+ ldr r12, [r5, #0x0]
+ smull r3, r2, lr, r1
+ smull r1, r0, r12, r0
+ ldrsh r7, [r4, #0x8a]
+ ldr r8, [r5, #0x4]
+ mov r12, #0x800
+ smull lr, r7, r8, r7
+ adds r8, r3, r12
+ adc r3, r2, #0x0
+ mov r2, r8, lsr #0xc
+ adds r1, r1, r12
+ orr r2, r2, r3, lsl #0x14
+ adc r0, r0, #0x0
+ mov r3, r1, lsr #0xc
+ adds r1, lr, r12
+ orr r3, r3, r0, lsl #0x14
+ adc r0, r7, #0x0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r3, r1
+ add r0, r2, r0
+ str r0, [r6, #0x0]
+ ldrsh r0, [sp, #0x2]
+ ldr r1, [r5, #0x8]
+ ldrsh r3, [r4, #0x86]
+ smull r2, r0, r1, r0
+ adds r2, r2, r12
+ ldr lr, [r5, #0x0]
+ adc r1, r0, #0x0
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ smull r8, r7, lr, r3
+ ldrsh r1, [r4, #0x8c]
+ ldr r2, [r5, #0x4]
+ adds r8, r8, r12
+ smull r3, r1, r2, r1
+ adc r2, r7, #0x0
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r2, lsl #0x14
+ adds r2, r3, r12
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ add r1, r7, r2
+ add r0, r0, r1
+ str r0, [r6, #0x4]
+ ldrsh r0, [sp, #0x4]
+ ldr r1, [r5, #0x8]
+ ldr lr, [r5, #0x0]
+ smull r3, r0, r1, r0
+ adds r3, r3, r12
+ adc r1, r0, #0x0
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ ldrsh r3, [r4, #0x88]
+ ldrsh r1, [r4, #0x8e]
+ ldr r2, [r5, #0x4]
+ smull r5, r4, lr, r3
+ adds r5, r5, r12
+ smull r3, r1, r2, r1
+ adc r4, r4, #0x0
+ adds r2, r3, r12
+ mov r3, r5, lsr #0xc
+ adc r1, r1, #0x0
+ mov r2, r2, lsr #0xc
+ orr r3, r3, r4, lsl #0x14
+ orr r2, r2, r1, lsl #0x14
+ add r1, r3, r2
+ add r0, r0, r1
+ str r0, [r6, #0x8]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_0208FF08
+FUN_0208FF08: ; 0x0208FF08
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ ldr r1, _0209018C ; =0x02106168
+ mov r4, r0
+ ldrh r3, [r1, #0x0]
+ ldrh r2, [r1, #0x2]
+ ldrh r0, [r1, #0x4]
+ strh r3, [sp, #0x0]
+ strh r2, [sp, #0x2]
+ strh r0, [sp, #0x4]
+ ldr r0, [r4, #0x20]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x18
+ movs r0, r0, lsr #0x1e
+ beq _0208FF88
+ cmp r0, #0x1
+ beq _0208FF70
+ cmp r0, #0x2
+ bne _0208FFA0
+ mov r0, #0x0
+ mov r1, #0x1000
+ strh r1, [sp, #0x6]
+ strh r0, [sp, #0x8]
+ strh r0, [sp, #0xa]
+ b _0208FFAC
+_0208FF70:
+ mov r1, #0x0
+ mov r0, #0x1000
+ strh r1, [sp, #0x6]
+ strh r0, [sp, #0x8]
+ strh r1, [sp, #0xa]
+ b _0208FFAC
+_0208FF88:
+ mov r1, #0x0
+ mov r0, #0x1000
+ strh r1, [sp, #0x6]
+ strh r1, [sp, #0x8]
+ strh r0, [sp, #0xa]
+ b _0208FFAC
+_0208FFA0:
+ add r1, sp, #0x6
+ add r0, r4, #0x50
+ bl VEC_Fx16Normalize
+_0208FFAC:
+ add r0, sp, #0x0
+ add r1, sp, #0x6
+ bl VEC_Fx16DotProduct
+ cmp r0, #0x1000
+ beq _0208FFD0
+ mov r1, #0x1000
+ rsb r1, r1, #0x0
+ cmp r0, r1
+ bne _0208FFE4
+_0208FFD0:
+ mov r0, #0x0
+ mov r1, #0x1000
+ strh r1, [sp, #0x0]
+ strh r0, [sp, #0x2]
+ strh r0, [sp, #0x4]
+_0208FFE4:
+ ldrsh r3, [sp, #0x8]
+ ldrsh r1, [sp, #0x4]
+ ldrsh r2, [sp, #0xa]
+ ldrsh r0, [sp, #0x2]
+ smull r6, r5, r3, r1
+ mov r1, #0x800
+ adds r6, r6, r1
+ smull r3, r0, r2, r0
+ adc r5, r5, #0x0
+ adds r2, r3, r1
+ mov r3, r6, lsr #0xc
+ adc r0, r0, #0x0
+ mov r2, r2, lsr #0xc
+ orr r3, r3, r5, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ sub r0, r3, r2
+ strh r0, [r4, #0x84]
+ ldrsh r5, [sp, #0xa]
+ ldrsh r3, [sp, #0x0]
+ ldrsh r2, [sp, #0x6]
+ ldrsh r0, [sp, #0x4]
+ smull r3, r6, r5, r3
+ adds r12, r3, r1
+ smull r3, r0, r2, r0
+ adc r5, r6, #0x0
+ adds r2, r3, r1
+ mov r3, r12, lsr #0xc
+ adc r0, r0, #0x0
+ mov r2, r2, lsr #0xc
+ orr r3, r3, r5, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ sub r0, r3, r2
+ strh r0, [r4, #0x86]
+ ldrsh r5, [sp, #0x6]
+ ldrsh r3, [sp, #0x2]
+ ldrsh r2, [sp, #0x8]
+ ldrsh r0, [sp, #0x0]
+ smull r3, r6, r5, r3
+ adds r12, r3, r1
+ smull r3, r0, r2, r0
+ adc r5, r6, #0x0
+ adds r2, r3, r1
+ mov r3, r12, lsr #0xc
+ adc r0, r0, #0x0
+ mov r2, r2, lsr #0xc
+ orr r3, r3, r5, lsl #0x14
+ orr r2, r2, r0, lsl #0x14
+ sub r0, r3, r2
+ strh r0, [r4, #0x88]
+ ldrsh r6, [sp, #0x8]
+ ldrsh r5, [r4, #0x88]
+ add r0, r4, #0x84
+ ldrsh r3, [sp, #0xa]
+ ldrsh r2, [r4, #0x86]
+ smull r5, r12, r6, r5
+ adds lr, r5, r1
+ smull r5, r2, r3, r2
+ adc r6, r12, #0x0
+ adds r3, r5, r1
+ mov r5, lr, lsr #0xc
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r5, r5, r6, lsl #0x14
+ orr r3, r3, r2, lsl #0x14
+ sub r2, r5, r3
+ strh r2, [r4, #0x8a]
+ ldrsh r6, [sp, #0xa]
+ ldrsh r5, [r4, #0x84]
+ ldrsh r3, [sp, #0x6]
+ ldrsh r2, [r4, #0x88]
+ smull lr, r12, r6, r5
+ smull r5, r2, r3, r2
+ adds r6, lr, r1
+ adc r3, r12, #0x0
+ mov r6, r6, lsr #0xc
+ orr r6, r6, r3, lsl #0x14
+ adds r3, r5, r1
+ adc r2, r2, #0x0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ sub r2, r6, r3
+ strh r2, [r4, #0x8c]
+ ldrsh lr, [sp, #0x6]
+ ldrsh r12, [r4, #0x86]
+ ldrsh r3, [sp, #0x8]
+ ldrsh r2, [r4, #0x84]
+ smull r6, r5, lr, r12
+ smull r12, r2, r3, r2
+ adds r6, r6, r1
+ adc r5, r5, #0x0
+ adds r3, r12, r1
+ mov r6, r6, lsr #0xc
+ orr r6, r6, r5, lsl #0x14
+ adc r1, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ sub r1, r6, r2
+ strh r1, [r4, #0x8e]
+ mov r1, r0
+ bl VEC_Fx16Normalize
+ add r0, r4, #0x8a
+ mov r1, r0
+ bl VEC_Fx16Normalize
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209018C: .word 0x02106168
+
+ arm_func_start FUN_02090190
+FUN_02090190: ; 0x02090190
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ rsb r2, r2, #0xff
+ mov r1, #0x1f
+ mul r3, r2, r1
+ ldr r2, _020901E4 ; =0x80808081
+ ldrh lr, [r0, #0x2e]
+ smull r1, r12, r2, r3
+ add r12, r3, r12
+ mov r12, r12, asr #0x7
+ mov r1, r3, lsr #0x1f
+ add r12, r1, r12
+ mov r1, r12, lsl #0x10
+ mov r1, r1, lsr #0x10
+ bic r2, lr, #0x3e0
+ and r1, r1, #0x1f
+ orr r1, r2, r1, lsl #0x5
+ strh r1, [r0, #0x2e]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020901E4: .word 0x80808081
+
+ arm_func_start FUN_020901E8
+FUN_020901E8: ; 0x020901E8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r1, #0x14]
+ sub r1, r2, #0xff
+ ldrsh lr, [r3, #0x4]
+ ldr r2, _02090230 ; =0x80808081
+ sub r3, lr, #0x1000
+ mul r12, r3, r1
+ smull r1, r3, r2, r12
+ add r3, r12, r3
+ mov r3, r3, asr #0x7
+ mov r1, r12, lsr #0x1f
+ add r3, r1, r3
+ add r1, lr, r3
+ strh r1, [r0, #0x34]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02090230: .word 0x80808081
+
+ arm_func_start FUN_02090234
+FUN_02090234: ; 0x02090234
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, [r1, #0x10]
+ mov r4, #0x0
+ ldrb r3, [r5, #0x8]
+ cmp r3, #0x0
+ addle sp, sp, #0x4
+ ldmleia sp!, {r4-r5,lr}
+ bxle lr
+ ldrb r12, [r5, #0x9]
+ mov lr, r4
+_02090260:
+ add r1, lr, r12
+ cmp r2, r1
+ ldrltb r1, [r5, r4]
+ addlt sp, sp, #0x4
+ strltb r1, [r0, #0x2c]
+ ldmltia sp!, {r4-r5,lr}
+ bxlt lr
+ add r4, r4, #0x1
+ cmp r4, r3
+ add lr, lr, r12
+ blt _02090260
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02090298
+FUN_02090298: ; 0x02090298
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, [r1, #0xc]
+ mov r5, r0
+ ldrb r1, [r4, #0x4]
+ ldrb r3, [r4, #0x5]
+ cmp r2, r1
+ bge _020902D8
+ ldrh r3, [r4, #0x0]
+ mov r0, r3, lsl #0x16
+ mov r6, r3, lsl #0x1b
+ mov r0, r0, lsr #0x1b
+ sub r0, r0, r6, lsr #0x1b
+ mul r0, r2, r0
+ bl _s32_div_f
+ add r0, r0, r6, lsr #0x1b
+ b _02090314
+_020902D8:
+ cmp r2, r3
+ ldrlth r0, [r4, #0x0]
+ movlt r0, r0, lsl #0x16
+ movlt r0, r0, lsr #0x1b
+ blt _02090314
+ ldrh r0, [r4, #0x0]
+ sub r2, r2, #0xff
+ rsb r1, r3, #0xff
+ mov r6, r0, lsl #0x11
+ mov r3, r6, lsr #0x1b
+ mov r0, r0, lsl #0x16
+ sub r0, r3, r0, lsr #0x1b
+ mul r0, r2, r0
+ bl _s32_div_f
+ add r0, r0, r6, lsr #0x1b
+_02090314:
+ ldr r3, _02090368 ; =0x021C8C5C
+ ldr r1, _0209036C ; =0x5EEDF715
+ ldr r12, [r3, #0x0]
+ ldr r2, _02090370 ; =0x1B0CB173
+ mla r1, r12, r1, r2
+ str r1, [r3, #0x0]
+ ldrb r2, [r4, #0x2]
+ mov r1, r1, lsr #0x18
+ ldrh r3, [r5, #0x2e]
+ mul r1, r2, r1
+ mov r1, r1, asr #0x8
+ rsb r1, r1, #0xff
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x8
+ mov r0, r0, lsr #0x10
+ bic r1, r3, #0x3e0
+ and r0, r0, #0x1f
+ orr r0, r1, r0, lsl #0x5
+ strh r0, [r5, #0x2e]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02090368: .word 0x021C8C5C
+_0209036C: .word 0x5EEDF715
+_02090370: .word 0x1B0CB173
+
+ arm_func_start FUN_02090374
+FUN_02090374: ; 0x02090374
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+
+ arm_func_start FUN_0209037C
+FUN_0209037C: ; 0x0209037C
+ ldr r4, [r1, #0x8]
+ mov r10, r0
+ ldrb r3, [r4, #0x4]
+ ldr r0, [r1, #0x0]
+ ldrb r1, [r4, #0x5]
+ cmp r2, r3
+ ldrb r11, [r4, #0x6]
+ ldrlth r0, [r4, #0x0]
+ addlt sp, sp, #0x4
+ strlth r0, [r10, #0x36]
+ ldmltia sp!, {r4-r11,lr}
+ bxlt lr
+ cmp r2, r1
+ bge _0209046C
+ ldrh r9, [r0, #0x22]
+ ldrh r0, [r4, #0x8]
+ ldrh r8, [r4, #0x0]
+ mov r7, r9, asr #0x5
+ mov r11, r9, asr #0xa
+ mov r4, r0, lsl #0x1d
+ mov r6, r8, asr #0x5
+ mov r5, r8, asr #0xa
+ movs r4, r4, lsr #0x1f
+ and r9, r9, #0x1f
+ and r7, r7, #0x1f
+ and r0, r11, #0x1f
+ orreq r1, r9, r7, lsl #0x5
+ orreq r0, r1, r0, lsl #0xa
+ and r8, r8, #0x1f
+ and r6, r6, #0x1f
+ and r5, r5, #0x1f
+ addeq sp, sp, #0x4
+ streqh r0, [r10, #0x36]
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ sub r4, r2, r3
+ sub r0, r0, r5
+ mul r0, r4, r0
+ sub r11, r1, r3
+ mov r1, r11
+ bl _s32_div_f
+ sub r1, r9, r8
+ mov r9, r0
+ mul r0, r4, r1
+ mov r1, r11
+ bl _s32_div_f
+ sub r1, r7, r6
+ mov r7, r0
+ mul r0, r4, r1
+ mov r1, r11
+ bl _s32_div_f
+ add r1, r8, r7
+ add r0, r6, r0
+ add r2, r5, r9
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r2, lsl #0xa
+ add sp, sp, #0x4
+ strh r0, [r10, #0x36]
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209046C:
+ cmp r2, r11
+ bge _0209052C
+ ldrh r7, [r4, #0x2]
+ ldrh r8, [r0, #0x22]
+ ldrh r0, [r4, #0x8]
+ mov r5, r7, asr #0x5
+ mov r4, r7, asr #0xa
+ mov r3, r0, lsl #0x1d
+ mov r6, r8, asr #0x5
+ mov r9, r8, asr #0xa
+ movs r3, r3, lsr #0x1f
+ and r7, r7, #0x1f
+ and r5, r5, #0x1f
+ and r0, r4, #0x1f
+ orreq r1, r7, r5, lsl #0x5
+ orreq r0, r1, r0, lsl #0xa
+ and r8, r8, #0x1f
+ and r6, r6, #0x1f
+ and r9, r9, #0x1f
+ addeq sp, sp, #0x4
+ streqh r0, [r10, #0x36]
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ sub r4, r2, r1
+ sub r0, r0, r9
+ mul r0, r4, r0
+ sub r11, r11, r1
+ mov r1, r11
+ bl _s32_div_f
+ sub r1, r7, r8
+ mov r7, r0
+ mul r0, r4, r1
+ mov r1, r11
+ bl _s32_div_f
+ sub r1, r5, r6
+ mov r5, r0
+ mul r0, r4, r1
+ mov r1, r11
+ bl _s32_div_f
+ add r1, r8, r5
+ add r0, r6, r0
+ add r2, r9, r7
+ orr r0, r1, r0, lsl #0x5
+ orr r0, r0, r2, lsl #0xa
+ add sp, sp, #0x4
+ strh r0, [r10, #0x36]
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209052C:
+ ldrh r0, [r4, #0x2]
+ strh r0, [r10, #0x36]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02090540
+FUN_02090540: ; 0x02090540
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r12, [r1, #0x4]
+ mov r4, r0
+ ldrb r1, [r12, #0x6]
+ ldrb r3, [r12, #0x7]
+ cmp r2, r1
+ bge _02090588
+ ldrsh r5, [r12, #0x0]
+ ldrsh r0, [r12, #0x2]
+ sub r0, r0, r5
+ mul r0, r2, r0
+ bl _s32_div_f
+_02090574: ; 0x02090574
+ add r0, r5, r0
+ add sp, sp, #0x4
+ strh r0, [r4, #0x34]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02090588:
+ cmp r2, r3
+ ldrltsh r0, [r12, #0x2]
+ addlt sp, sp, #0x4
+ strlth r0, [r4, #0x34]
+ ldmltia sp!, {r4-r5,lr}
+ bxlt lr
+ ldrsh r5, [r12, #0x4]
+ ldrsh r0, [r12, #0x2]
+ sub r2, r2, #0xff
+ rsb r1, r3, #0xff
+ sub r0, r5, r0
+ mul r0, r2, r0
+ bl _s32_div_f
+_020905BC: ; 0x020905BC
+ add r0, r5, r0
+ strh r0, [r4, #0x34]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020905D0
+FUN_020905D0: ; 0x020905D0
+ stmdb sp!, {r4,lr}
+ ldr lr, [r1, #0x8]
+ ldr r2, [r0, #0x0]
+ ldrsh r4, [r0, #0xc]
+ sub r3, r2, lr
+ mov r2, #0x800
+ smull r12, r3, r4, r3
+ adds r4, r12, r2
+ adc r3, r3, #0x0
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ add r3, lr, r4
+ str r3, [r1, #0x8]
+ ldr r4, [r1, #0xc]
+ ldr r3, [r0, #0x4]
+ ldrsh r12, [r0, #0xc]
+ sub r3, r3, r4
+ smull lr, r3, r12, r3
+ adds r12, lr, r2
+ adc r3, r3, #0x0
+ mov r12, r12, lsr #0xc
+ orr r12, r12, r3, lsl #0x14
+ add r3, r4, r12
+ str r3, [r1, #0xc]
+ ldr lr, [r1, #0x10]
+ ldr r3, [r0, #0x8]
+ ldrsh r12, [r0, #0xc]
+ sub r0, r3, lr
+ smull r3, r0, r12, r0
+ adds r2, r3, r2
+ adc r0, r0, #0x0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ add r0, lr, r2
+ str r0, [r1, #0x10]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02090664
+FUN_02090664: ; 0x02090664
+ ldr r3, [r3, #0x74]
+ ldr r2, [r0, #0x0]
+ cmp r3, #0x80000000
+ movne r2, r3
+ ldrh r3, [r0, #0x6]
+ mov r3, r3, lsl #0x1e
+ movs r3, r3, lsr #0x1e
+ beq _02090690
+ cmp r3, #0x1
+ beq _020906E4
+ bx lr
+_02090690:
+ ldr r3, [r1, #0x3c]
+ cmp r3, r2
+ bge _020906BC
+ ldr r0, [r1, #0xc]
+ add r0, r3, r0
+ cmp r0, r2
+ subgt r0, r2, r3
+ strgt r0, [r1, #0xc]
+ ldrgth r0, [r1, #0x24]
+ strgth r0, [r1, #0x26]
+ bxgt lr
+_020906BC:
+ cmp r3, r2
+ bxlt lr
+ ldr r0, [r1, #0xc]
+ add r0, r3, r0
+ cmp r0, r2
+ sublt r0, r2, r3
+ strlt r0, [r1, #0xc]
+ ldrlth r0, [r1, #0x24]
+ strlth r0, [r1, #0x26]
+ bx lr
+_020906E4:
+ ldr r12, [r1, #0x3c]
+ cmp r12, r2
+ bge _02090734
+ ldr r3, [r1, #0xc]
+ add r3, r12, r3
+ cmp r3, r2
+ ble _02090734
+ sub r2, r2, r12
+ str r2, [r1, #0xc]
+ ldrsh r2, [r0, #0x4]
+ ldr r3, [r1, #0x18]
+ mov r0, #0x800
+ smull r12, r2, r3, r2
+ adds r3, r12, r0
+ adc r0, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ rsb r0, r2, #0x0
+ str r0, [r1, #0x18]
+ bx lr
+_02090734:
+ cmp r12, r2
+ bxlt lr
+ ldr r3, [r1, #0xc]
+ add r3, r12, r3
+ cmp r3, r2
+ bxge lr
+ sub r2, r2, r12
+ str r2, [r1, #0xc]
+ ldrsh r2, [r0, #0x4]
+ ldr r3, [r1, #0x18]
+ mov r0, #0x800
+ smull r12, r2, r3, r2
+ adds r3, r12, r0
+ adc r0, r2, #0x0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ rsb r0, r2, #0x0
+ str r0, [r1, #0x18]
+ bx lr
+
+ arm_func_start FUN_02090780
+FUN_02090780: ; 0x02090780
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x28
+ ldrh r2, [r0, #0x2]
+ mov r4, r1
+ cmp r2, #0x0
+ beq _020907AC
+ cmp r2, #0x1
+ beq _020907DC
+ cmp r2, #0x2
+ beq _0209080C
+ b _02090838
+_020907AC:
+ ldrh r1, [r0, #0x0]
+ ldr r3, _02090854 ; =0x020FFA38
+ add r0, sp, #0x0
+ mov r1, r1, asr #0x4
+ mov r2, r1, lsl #0x1
+ add r1, r2, #0x1
+ mov r12, r2, lsl #0x1
+ mov r2, r1, lsl #0x1
+ ldrsh r1, [r3, r12]
+ ldrsh r2, [r3, r2]
+ blx MTX_RotX33_
+ b _02090838
+_020907DC:
+ ldrh r1, [r0, #0x0]
+ ldr r3, _02090854 ; =0x020FFA38
+ add r0, sp, #0x0
+ mov r1, r1, asr #0x4
+ mov r2, r1, lsl #0x1
+ add r1, r2, #0x1
+ mov r12, r2, lsl #0x1
+ mov r2, r1, lsl #0x1
+ ldrsh r1, [r3, r12]
+ ldrsh r2, [r3, r2]
+ blx MTX_RotY33_
+ b _02090838
+_0209080C:
+ ldrh r1, [r0, #0x0]
+ ldr r3, _02090854 ; =0x020FFA38
+ add r0, sp, #0x0
+ mov r1, r1, asr #0x4
+ mov r2, r1, lsl #0x1
+ add r1, r2, #0x1
+ mov r12, r2, lsl #0x1
+ mov r2, r1, lsl #0x1
+ ldrsh r1, [r3, r12]
+ ldrsh r2, [r3, r2]
+ blx MTX_RotZ33_
+_02090838:
+ add r0, r4, #0x8
+ add r1, sp, #0x0
+ mov r2, r0
+ bl MTX_MultVec33
+ add sp, sp, #0x28
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02090854: .word 0x020FFA38
+
+ arm_func_start FUN_02090858
+FUN_02090858: ; 0x02090858
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x0]
+ ldr r4, [r1, #0x8]
+ ldrsh lr, [r0, #0xc]
+ ldr r3, [r1, #0x14]
+ sub r4, r12, r4
+ sub r3, r4, r3
+ mul r3, lr, r3
+ ldr r4, [r2, #0x0]
+ add r3, r4, r3, asr #0xc
+ str r3, [r2, #0x0]
+ ldr lr, [r0, #0x4]
+ ldr r12, [r1, #0xc]
+ ldrsh r4, [r0, #0xc]
+ ldr r3, [r1, #0x18]
+ sub r12, lr, r12
+ sub r3, r12, r3
+ mul r3, r4, r3
+ ldr r4, [r2, #0x4]
+ add r3, r4, r3, asr #0xc
+ str r3, [r2, #0x4]
+ ldr r12, [r0, #0x8]
+ ldr r3, [r1, #0x10]
+ ldrsh lr, [r0, #0xc]
+ ldr r0, [r1, #0x1c]
+ sub r1, r12, r3
+ sub r0, r1, r0
+ mul r0, lr, r0
+ ldr r1, [r2, #0x8]
+ add r0, r1, r0, asr #0xc
+ str r0, [r2, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020908DC
+FUN_020908DC: ; 0x020908DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r1, #0x26]
+ ldrh r1, [r5, #0x6]
+ mov r4, r2
+ bl _s32_div_f
+_020908F8: ; 0x020908F8
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldr r2, _02090998 ; =0x021C8C5C
+ ldr r0, _0209099C ; =0x5EEDF715
+ ldr r3, [r2, #0x0]
+ ldr r1, _020909A0 ; =0x1B0CB173
+ mla r12, r3, r0, r1
+ str r12, [r2, #0x0]
+ ldrsh lr, [r5, #0x0]
+ mov r3, r12, lsr #0x17
+ ldr r12, [r4, #0x0]
+ mul r3, lr, r3
+ sub r3, r3, lr, lsl #0x8
+ add r3, r12, r3, asr #0x8
+ str r3, [r4, #0x0]
+ ldr r3, [r2, #0x0]
+ mla r12, r3, r0, r1
+ str r12, [r2, #0x0]
+ ldrsh lr, [r5, #0x2]
+ mov r3, r12, lsr #0x17
+ ldr r12, [r4, #0x4]
+ mul r3, lr, r3
+ sub r3, r3, lr, lsl #0x8
+ add r3, r12, r3, asr #0x8
+ str r3, [r4, #0x4]
+ ldr r3, [r2, #0x0]
+ mla r0, r3, r0, r1
+ str r0, [r2, #0x0]
+ ldrsh r2, [r5, #0x4]
+ mov r0, r0, lsr #0x17
+ ldr r1, [r4, #0x8]
+ mul r0, r2, r0
+ sub r0, r0, r2, lsl #0x8
+ add r0, r1, r0, asr #0x8
+ str r0, [r4, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02090998: .word 0x021C8C5C
+_0209099C: .word 0x5EEDF715
+_020909A0: .word 0x1B0CB173
+
+ arm_func_start FUN_020909A4
+FUN_020909A4: ; 0x020909A4
+ ldrsh r1, [r0, #0x0]
+ ldr r3, [r2, #0x0]
+ add r1, r3, r1
+ str r1, [r2, #0x0]
+ ldrsh r1, [r0, #0x2]
+ ldr r3, [r2, #0x4]
+ add r1, r3, r1
+ str r1, [r2, #0x4]
+ ldrsh r0, [r0, #0x4]
+ ldr r1, [r2, #0x8]
+ add r0, r1, r0
+ str r0, [r2, #0x8]
+ bx lr
+
+ arm_func_start FUN_020909D8
+FUN_020909D8: ; 0x020909D8
+ ldr r3, [r1, #0x0]
+ cmp r3, #0x0
+ bne _02090A18
+ ldr r2, [r0, #0x0]
+ cmp r2, r1
+ moveq r2, #0x0
+ streq r2, [r0, #0x0]
+ streq r2, [r0, #0x8]
+ beq _02090A44
+ ldr r2, [r1, #0x4]
+ mov r3, #0x0
+ str r3, [r2, #0x0]
+ ldr r2, [r0, #0x8]
+ ldr r2, [r2, #0x4]
+ str r2, [r0, #0x8]
+ b _02090A44
+_02090A18:
+ ldr r2, [r0, #0x0]
+ cmp r2, r1
+ streq r3, [r0, #0x0]
+ ldreq r2, [r0, #0x0]
+ moveq r3, #0x0
+ streq r3, [r2, #0x4]
+ ldrne r2, [r1, #0x4]
+ strne r2, [r3, #0x4]
+ ldrne r3, [r1, #0x0]
+ ldrne r2, [r1, #0x4]
+ strne r3, [r2, #0x0]
+_02090A44:
+ ldr r2, [r0, #0x4]
+ sub r2, r2, #0x1
+ str r2, [r0, #0x4]
+ mov r0, r1
+ bx lr
+
+ arm_func_start FUN_02090A58
+FUN_02090A58: ; 0x02090A58
+ ldr r2, [r0, #0x0]
+ mov r3, #0x0
+ mov r12, r3
+ cmp r2, #0x0
+ beq _02090A9C
+ ldr r1, [r2, #0x0]
+ mov r12, r2
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ ldrne r1, [r2, #0x0]
+ strne r3, [r1, #0x4]
+ streq r3, [r0, #0x0]
+ streq r3, [r0, #0x8]
+ ldr r1, [r0, #0x4]
+ sub r1, r1, #0x1
+ str r1, [r0, #0x4]
+_02090A9C:
+ mov r0, r12
+ bx lr
+
+ arm_func_start FUN_02090AA4
+FUN_02090AA4:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _02090ACC
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x8]
+ mov r2, #0x0
+ str r2, [r1, #0x0]
+ ldr r2, [r1, #0x0]
+ str r2, [r1, #0x4]
+ b _02090AE4
+_02090ACC:
+ str r2, [r1, #0x0]
+ mov r2, #0x0
+ str r2, [r1, #0x4]
+ ldr r2, [r0, #0x0]
+ str r1, [r2, #0x4]
+ str r1, [r0, #0x0]
+_02090AE4:
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x1
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_02090AF4
+FUN_02090AF4:
+ stmdb sp!, {r4,lr}
+ ldr ip, _02090B44 ; =0x021C8C5C
+ ldr r2, _02090B48 ; =0x5EEDF715
+ ldr r4, [r12, #0x0]
+ ldr r3, _02090B4C ; =0x1B0CB173
+ mov r1, r0
+ mla lr, r4, r2, r3
+ str lr, [r12, #0x0]
+ mov r4, lr, asr #0x8
+ str r4, [r0, #0x0]
+ ldr r4, [r12, #0x0]
+ mov lr, #0x0
+ mla r2, r4, r2, r3
+ str r2, [r12, #0x0]
+ mov r2, r2, asr #0x8
+ str r2, [r0, #0x4]
+ str lr, [r0, #0x8]
+ bl VEC_Normalize
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02090B44: .word 0x021C8C5C
+_02090B48: .word 0x5EEDF715
+_02090B4C: .word 0x1B0CB173
+
+ arm_func_start FUN_02090B50
+FUN_02090B50: ; 0x02090B50
+ stmdb sp!, {r4,lr}
+ ldr ip, _02090BAC ; =0x021C8C5C
+ ldr r2, _02090BB0 ; =0x5EEDF715
+ ldr r4, [r12, #0x0]
+ ldr r3, _02090BB4 ; =0x1B0CB173
+ mov r1, r0
+ mla lr, r4, r2, r3
+ str lr, [r12, #0x0]
+ mov r4, lr, asr #0x8
+ str r4, [r0, #0x0]
+ ldr lr, [r12, #0x0]
+ mla r4, lr, r2, r3
+ str r4, [r12, #0x0]
+ mov lr, r4, asr #0x8
+ str lr, [r0, #0x4]
+ ldr lr, [r12, #0x0]
+ mla r2, lr, r2, r3
+ str r2, [r12, #0x0]
+ mov r2, r2, asr #0x8
+ str r2, [r0, #0x8]
+ bl VEC_Normalize
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02090BAC: .word 0x021C8C5C
+_02090BB0: .word 0x5EEDF715
+_02090BB4: .word 0x1B0CB173
+
+ arm_func_start FUN_02090BB8
+FUN_02090BB8: ; 0x02090BB8
+ bx lr
+
+ arm_func_start FUN_02090BBC
+FUN_02090BBC: ; 0x02090BBC
+ stmdb sp!, {r4-r6,lr}
+ mov r0, #0x10000
+ rsb r0, r0, #0x0
+ ldr r3, _02090CB8 ; =0x021C8C6C
+ ldr r2, _02090CBC ; =0x021C8C68
+ and r0, r1, r0
+ cmp r0, #0x10000
+ and r4, r1, #0xff
+ ldr r6, [r3, #0x0]
+ ldr r5, [r2, #0x0]
+ beq _02090BF4
+ cmp r0, #0x20000
+ beq _02090C38
+ b _02090C84
+_02090BF4:
+ cmp r4, #0x7
+ bne _02090C84
+ ldr r0, _02090CC0 ; =0x021C8C64
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _02090C84
+ ldr r1, _02090CC4 ; =0x021C8C60
+ ldrh r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _02090C84
+ ldrh r0, [r0, #0x0]
+ ldrh r1, [r1, #0x0]
+ bl OSi_UnlockVram
+ ldr r0, _02090CC0 ; =0x021C8C64
+ mov r1, #0x0
+ strh r1, [r0, #0x0]
+ b _02090C84
+_02090C38:
+ cmp r4, #0x0
+ bne _02090C78
+ ldr r0, _02090CC0 ; =0x021C8C64
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _02090C78
+ ldr r1, _02090CC4 ; =0x021C8C60
+ ldrh r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _02090C78
+ ldrh r0, [r0, #0x0]
+ ldrh r1, [r1, #0x0]
+ bl OSi_UnlockVram
+ ldr r0, _02090CC0 ; =0x021C8C64
+ mov r1, #0x0
+ strh r1, [r0, #0x0]
+_02090C78:
+ mov r0, #0xf
+ mov r1, #0x0
+ bl PXI_SetFifoRecvCallback
+_02090C84:
+ cmp r6, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r3, _02090CB8 ; =0x021C8C6C
+ mov r12, #0x0
+ ldr r2, _02090CBC ; =0x021C8C68
+ mov r0, r5
+ mov r1, r4
+ str r12, [r3, #0x0]
+ str r12, [r2, #0x0]
+ blx r6
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02090CB8: .word 0x021C8C6C
+_02090CBC: .word 0x021C8C68
+_02090CC0: .word 0x021C8C64
+_02090CC4: .word 0x021C8C60
+
+ arm_func_start FUN_02090CC8
+FUN_02090CC8: ; 0x02090CC8
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ bl PXI_Init
+ mov r0, #0xf
+ mov r1, #0x1
+ bl PXI_IsCallbackReady
+_02090CE4: ; 0x02090CE4
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl OS_DisableInterrupts
+ ldr r1, _02090DA8 ; =0x021C8C6C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _02090D1C
+ bl OS_RestoreInterrupts
+ mov r0, #0x5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02090D1C:
+ mov r0, #0xf
+ mov r1, #0x0
+ bl PXI_IsCallbackReady
+_02090D28: ; 0x02090D28
+ cmp r0, #0x0
+ bne _02090D3C
+ ldr r1, _02090DAC ; =FUN_02090BBC
+ mov r0, #0xf
+ bl PXI_SetFifoRecvCallback
+_02090D3C:
+ cmp r6, #0x0
+ ldreq r1, _02090DB0 ; =FUN_02090BB8
+ ldreq r0, _02090DA8 ; =0x021C8C6C
+ ldr r3, _02090DB4 ; =0x021C8C68
+ streq r1, [r0, #0x0]
+ ldrne r0, _02090DA8 ; =0x021C8C6C
+ mov r1, #0x20000
+ strne r6, [r0, #0x0]
+ mov r0, #0xf
+ mov r2, #0x0
+ str r5, [r3, #0x0]
+ bl PXI_SendWordByFifo
+_02090D6C: ; 0x02090D6C
+ cmp r0, #0x0
+ bge _02090D94
+ ldr r1, _02090DA8 ; =0x021C8C6C
+ mov r2, #0x0
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, #0x4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02090D94:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02090DA8: .word 0x021C8C6C
+_02090DAC: .word FUN_02090BBC
+_02090DB0: .word FUN_02090BB8
+_02090DB4: .word 0x021C8C68
+
+ arm_func_start FUN_02090DB8
+FUN_02090DB8: ; 0x02090DB8
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl PXI_Init
+ mov r0, #0xf
+ mov r1, #0x1
+ bl PXI_IsCallbackReady
+_02090DD8: ; 0x02090DD8
+ cmp r0, #0x0
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r8, _02091020 ; =0x021C8C60
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ bne _02090E20
+ mvn r4, #0x2
+_02090DFC:
+ bl OS_GetLockID
+ cmp r0, r4
+ moveq r0, #0x7
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ strh r0, [r8, #0x0]
+ ldrh r0, [r8, #0x0]
+ cmp r0, #0x0
+ beq _02090DFC
+_02090E20:
+ bl OS_DisableInterrupts
+ ldr r1, _02091024 ; =0x021C8C6C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _02090E48
+ bl OS_RestoreInterrupts
+ mov r0, #0x5
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090E48:
+ ldr r1, _02091028 ; =0x021C8C64
+ ldrh r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _02090E68
+ bl OS_RestoreInterrupts
+ mov r0, #0x5
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090E68:
+ cmp r7, #0x4
+ beq _02090E84
+ cmp r7, #0x8
+ beq _02090ECC
+ cmp r7, #0xc
+ beq _02090F14
+ b _02090F68
+_02090E84:
+ ldr r1, _02091020 ; =0x021C8C60
+ mov r0, #0x4
+ ldrh r1, [r1, #0x0]
+ bl OSi_TryLockVram
+_02090E94: ; 0x02090E94
+ cmp r0, #0x0
+ bne _02090EB0
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090EB0:
+ ldr r0, _02091028 ; =0x021C8C64
+ mov r2, #0x4
+ ldr r1, _0209102C ; =0x04000242
+ strh r2, [r0, #0x0]
+ mov r0, #0x82
+ strb r0, [r1, #0x0]
+ b _02090F78
+_02090ECC:
+ ldr r1, _02091020 ; =0x021C8C60
+ mov r0, #0x8
+ ldrh r1, [r1, #0x0]
+ bl OSi_TryLockVram
+_02090EDC: ; 0x02090EDC
+ cmp r0, #0x0
+ bne _02090EF8
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090EF8:
+ ldr r0, _02091028 ; =0x021C8C64
+ mov r2, #0x8
+ ldr r1, _02091030 ; =0x04000243
+ strh r2, [r0, #0x0]
+ mov r0, #0x82
+ strb r0, [r1, #0x0]
+ b _02090F78
+_02090F14:
+ ldr r1, _02091020 ; =0x021C8C60
+ mov r0, #0xc
+ ldrh r1, [r1, #0x0]
+ bl OSi_TryLockVram
+_02090F24: ; 0x02090F24
+ cmp r0, #0x0
+ bne _02090F40
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090F40:
+ ldr r0, _02091028 ; =0x021C8C64
+ mov r2, #0xc
+ ldr r1, _0209102C ; =0x04000242
+ strh r2, [r0, #0x0]
+ mov r2, #0x82
+ ldr r0, _02091030 ; =0x04000243
+ strb r2, [r1, #0x0]
+ mov r1, #0x8a
+ strb r1, [r0, #0x0]
+ b _02090F78
+_02090F68:
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02090F78:
+ mov r0, #0xf
+ mov r1, #0x0
+ bl PXI_IsCallbackReady
+_02090F84: ; 0x02090F84
+ cmp r0, #0x0
+ bne _02090F98
+ ldr r1, _02091034 ; =FUN_02090BBC
+ mov r0, #0xf
+ bl PXI_SetFifoRecvCallback
+_02090F98:
+ cmp r6, #0x0
+ ldreq r1, _02091038 ; =FUN_02090BB8
+ ldreq r0, _02091024 ; =0x021C8C6C
+ ldr r3, _0209103C ; =0x021C8C68
+ streq r1, [r0, #0x0]
+ ldrne r0, _02091024 ; =0x021C8C6C
+ mov r1, #0x10000
+ strne r6, [r0, #0x0]
+ mov r0, #0xf
+ mov r2, #0x0
+ str r5, [r3, #0x0]
+ bl PXI_SendWordByFifo
+_02090FC8: ; 0x02090FC8
+ cmp r0, #0x0
+ bge _0209100C
+ ldr r0, _02091028 ; =0x021C8C64
+ ldr r1, _02091020 ; =0x021C8C60
+ ldrh r0, [r0, #0x0]
+ ldrh r1, [r1, #0x0]
+ bl OSi_UnlockVram
+ ldr r2, _02091028 ; =0x021C8C64
+ mov r3, #0x0
+ ldr r1, _02091024 ; =0x021C8C6C
+ mov r0, r4
+ strh r3, [r2, #0x0]
+ str r3, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, #0x4
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209100C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_02091020: .word 0x021C8C60
+_02091024: .word 0x021C8C6C
+_02091028: .word 0x021C8C64
+_0209102C: .word 0x04000242
+_02091030: .word 0x04000243
+_02091034: .word FUN_02090BBC
+_02091038: .word FUN_02090BB8
+_0209103C: .word 0x021C8C68
+
+ arm_func_start FUN_02091040
+FUN_02091040: ; 0x02091040
+ ldr r3, _02091054 ; =0x021C8C70
+ ldr r2, _02091058 ; =0x021C8C74
+ str r0, [r3, #0x0]
+ str r1, [r2, #0x0]
+ bx lr
+ .balign 4
+_02091054: .word 0x021C8C70
+_02091058: .word 0x021C8C74
+
+ arm_func_start FUN_0209105C
+FUN_0209105C: ; 0x0209105C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020910A0 ; =0x021C8C74
+ mov r2, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _02091088
+ blx r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_02091088:
+ mov r0, #0x0
+ mvn r1, #0x0
+ bl OS_FreeToHeap
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020910A0: .word 0x021C8C74
+
+ arm_func_start FUN_020910A4
+FUN_020910A4:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020910E8 ; =0x021C8C70
+ mov r2, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ beq _020910D0
+ blx r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020910D0:
+ mov r0, #0x0
+ mvn r1, #0x0
+ bl OS_AllocFromHeap
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020910E8: .word 0x021C8C70
+
+ arm_func_start FUN_020910EC
+FUN_020910EC: ; 0x020910EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r12, r0
+ mov r4, r1
+ mov r5, r2
+ mov r2, r4
+ add r0, sp, #0x0
+ mov r1, r12
+ mov r4, r3
+ bl MATH_CalcSHA1
+_02091114: ; 0x02091114
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl FUN_02091130
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02091130
+FUN_02091130: ; 0x02091130
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x120
+ mov r3, #0x0
+ str r3, [sp, #0x10]
+ str r3, [sp, #0x18]
+ str r2, [sp, #0x0]
+ mov r3, #0x80
+ mov r4, r0
+ mov r2, r1
+ ldr ip, _0209122C ; =0x00010001
+ str r3, [sp, #0x4]
+ add r0, sp, #0x1c
+ mov r1, #0x100
+ str r12, [sp, #0x8]
+ bl FUN_0209156C
+ mov r1, r0
+ add r0, sp, #0x1c
+ add r2, sp, #0xc
+ add r3, sp, #0x10
+ bl FUN_020913D4
+_02091180: ; 0x02091180
+ cmp r0, #0x0
+ addeq sp, sp, #0x120
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r1, sp, #0x14
+ add r0, sp, #0x18
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+ mov r2, #0x0
+ ldr r0, [sp, #0xc]
+ ldr r1, [sp, #0x10]
+ mov r3, r2
+ bl FUN_02091230
+_020911B8: ; 0x020911B8
+ cmp r0, #0x0
+ addeq sp, sp, #0x120
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x14
+ addne sp, sp, #0x120
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldr r2, [sp, #0x14]
+ mov r3, #0x0
+_020911EC:
+ ldrb r1, [r2, #0x0]
+ ldrb r0, [r4, #0x0]
+ cmp r1, r0
+ addne sp, sp, #0x120
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ add r3, r3, #0x1
+ cmp r3, #0x14
+ add r4, r4, #0x1
+ add r2, r2, #0x1
+ blt _020911EC
+ mov r0, #0x1
+ add sp, sp, #0x120
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209122C: .word 0x00010001
+
+ arm_func_start FUN_02091230
+FUN_02091230:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r4, r3
+ add r0, sp, #0x10
+ add r1, sp, #0x14
+ mov r2, #0x30
+ mov r3, #0x0
+ bl FUN_02091498
+_02091258: ; 0x02091258
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ add r0, sp, #0x10
+ add r1, sp, #0x14
+ mov r2, #0x30
+ mov r3, #0x0
+ bl FUN_02091498
+_02091284: ; 0x02091284
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ add r0, sp, #0x10
+ add r1, sp, #0x14
+ add r3, sp, #0x0
+ mov r2, #0x6
+ bl FUN_02091498
+_020912B0: ; 0x020912B0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ cmp r5, #0x0
+ ldrne r0, [sp, #0x10]
+ strne r0, [r5, #0x0]
+ cmp r4, #0x0
+ ldrne r0, [sp, #0x0]
+ strne r0, [r4, #0x0]
+ ldr r2, [sp, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r0, r0, r2
+ str r0, [sp, #0x10]
+ cmp r1, r2
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,lr}
+ addcc sp, sp, #0x10
+ bxcc lr
+ sub r12, r1, r2
+ add r0, sp, #0x10
+ add r1, sp, #0x14
+ add r3, sp, #0x0
+ mov r2, #0x5
+ str r12, [sp, #0x14]
+ bl FUN_02091498
+_02091328: ; 0x02091328
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r2, [sp, #0x0]
+ ldr r0, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ add r0, r0, r2
+ str r0, [sp, #0x10]
+ cmp r1, r2
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,lr}
+ addcc sp, sp, #0x10
+ bxcc lr
+ sub r12, r1, r2
+ add r0, sp, #0x10
+ add r1, sp, #0x14
+ add r3, sp, #0x0
+ mov r2, #0x4
+ str r12, [sp, #0x14]
+ bl FUN_02091498
+_02091388: ; 0x02091388
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r1, [sp, #0x20]
+ cmp r1, #0x0
+ ldrne r0, [sp, #0x10]
+ strne r0, [r1, #0x0]
+ ldr r1, [sp, #0x24]
+ cmp r1, #0x0
+ ldrne r0, [sp, #0x0]
+ strne r0, [r1, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start FUN_020913D4
+FUN_020913D4:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0xa
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {lr}
+ bxcc lr
+ ldrb r12, [r0, #0x0]
+ add lr, r0, r1
+ cmp r12, #0x1
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {lr}
+ bxne lr
+ add r12, r0, #0x1
+ mov r1, #0x0
+_02091414:
+ ldrb r0, [r12], #0x1
+ cmp r0, #0xff
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {lr}
+ bxne lr
+ add r1, r1, #0x1
+ cmp r1, #0x8
+ blt _02091414
+ cmp r12, lr
+ beq _02091458
+_02091440:
+ ldrb r0, [r12, #0x0]
+ cmp r0, #0xff
+ bne _02091458
+ add r12, r12, #0x1
+ cmp r12, lr
+ bne _02091440
+_02091458:
+ cmp r12, lr
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r0, [r12, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x0
+ addeq r0, r12, #0x1
+ subeq r1, lr, r0
+ streq r1, [r3, #0x0]
+ streq r0, [r2, #0x0]
+ moveq r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_02091498
+FUN_02091498:
+ stmdb sp!, {r4-r6,lr}
+ ldr r5, [r0, #0x0]
+ mov r6, #0x0
+ ldrb r4, [r5, #0x0]
+ add r5, r5, #0x1
+ mov r12, r6
+ cmp r4, r2
+ ldr r2, [r1, #0x0]
+ movne r0, r6
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r2, #0x1
+ movcc r0, r6
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ ldrb lr, [r5, #0x0]
+ sub r4, r2, #0x1
+ ands r2, lr, #0x80
+ beq _02091534
+ and r2, lr, #0x7f
+ and lr, r2, #0xff
+ add r2, lr, #0x1
+ cmp r4, r2
+ movcc r0, r6
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ cmp r3, #0x0
+ sub r6, r4, lr
+ beq _0209152C
+ ldrb r2, [r5, #0x1]
+ add r5, r5, #0x1
+ and r4, r2, #0x7f
+_02091518:
+ sub r2, lr, #0x1
+ add r12, r4, r12, lsl #0x7
+ ands lr, r2, #0xff
+ bne _02091518
+ b _02091550
+_0209152C:
+ add r5, r5, lr
+ b _02091550
+_02091534:
+ add r5, r5, #0x1
+ cmp r4, #0x1
+ mov r12, lr
+ movcc r0, r6
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ sub r6, r4, #0x1
+_02091550:
+ str r5, [r0, #0x0]
+ str r6, [r1, #0x0]
+ cmp r3, #0x0
+ strne r12, [r3, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209156C
+FUN_0209156C: ; 0x0209156C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x58
+ movs r6, r0
+ mov r5, r1
+ mov r8, r2
+ mov r7, r3
+ beq _0209159C
+ cmp r8, #0x0
+ beq _0209159C
+ ldr r0, [sp, #0x70]
+ cmp r0, #0x0
+ bne _020915AC
+_0209159C:
+ add sp, sp, #0x58
+ mvn r0, #0x2
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020915AC:
+ bl FUN_02094FAC
+ mov r4, r0
+ add r0, sp, #0x4
+ bl FUN_0209502C
+ add r0, sp, #0x18
+ bl FUN_0209502C
+ add r0, sp, #0x2c
+ bl FUN_0209502C
+ add r0, sp, #0x40
+ bl FUN_0209502C
+_020915D4: ; 0x020915D4
+ cmp r4, #0x0
+ mvneq r5, #0x1
+ beq _02091688
+ add r2, sp, #0x4
+ mov r0, r8
+ mov r1, r7
+ bl FUN_02094C68
+_020915F0: ; 0x020915F0
+ cmp r0, #0x0
+ mvneq r5, #0x1
+ beq _02091688
+ ldr r1, [sp, #0x78]
+ add r0, sp, #0x2c
+ bl FUN_02094D7C
+_02091608: ; 0x02091608
+ cmp r0, #0x0
+ mvneq r5, #0x1
+ beq _02091688
+ ldr r0, [sp, #0x70]
+ ldr r1, [sp, #0x74]
+ add r2, sp, #0x40
+ bl FUN_02094C68
+_02091624: ; 0x02091624
+ cmp r0, #0x0
+ mvneq r5, #0x1
+ beq _02091688
+ add r0, sp, #0x18
+ add r1, sp, #0x4
+ add r2, sp, #0x2c
+ add r3, sp, #0x40
+ str r4, [sp, #0x0]
+ bl FUN_020931B8
+_02091648: ; 0x02091648
+ cmp r0, #0x0
+ mvneq r5, #0x1
+ beq _02091688
+ add r0, sp, #0x18
+ bl FUN_02095188
+ add r1, r0, #0x7
+ mov r0, r1, asr #0x2
+ add r0, r1, r0, lsr #0x1d
+ mov r0, r0, asr #0x3
+ cmp r0, r5
+ mvngt r5, #0x0
+ bgt _02091688
+ add r0, sp, #0x18
+ mov r1, r6
+ bl FUN_02094BEC
+ mov r5, r0
+_02091688:
+ add r0, sp, #0x4
+ bl FUN_0209510C
+ add r0, sp, #0x18
+ bl FUN_0209510C
+ add r0, sp, #0x2c
+ bl FUN_0209510C
+ add r0, sp, #0x40
+ bl FUN_0209510C
+_020916A8: ; 0x020916A8
+ cmp r4, #0x0
+ beq _020916B8
+ mov r0, r4
+ bl FUN_02094F3C
+_020916B8:
+ mov r0, r5
+ add sp, sp, #0x58
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020916C8
+FUN_020916C8: ; 0x020916C8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x7c
+ mov r4, #0x0
+ mov r5, r3
+ mov r3, r4
+ str r3, [sp, #0x34]
+ ldr r3, [r5, #0x0]
+ str r0, [sp, #0x4]
+ mov r0, r4
+ ldr r3, [r3, #0x0]
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ ands r0, r3, #0x1
+ ldr r0, [sp, #0xa0]
+ str r4, [sp, #0x8]
+ str r0, [sp, #0xa0]
+ mov r7, r1
+ mov r6, r2
+ addeq sp, sp, #0x7c
+ moveq r0, r4
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r1, [r7, #0x4]
+ ldr r0, [r0, #0x0]
+ cmp r1, #0x0
+ str r0, [sp, #0xc]
+ beq _0209174C
+ cmp r1, #0x1
+ bne _02091768
+ ldr r0, [r7, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02091768
+_0209174C:
+ ldr r0, [sp, #0x4]
+ mov r1, #0x0
+ bl FUN_02094D7C
+ add sp, sp, #0x7c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02091768:
+ ldr r1, [r6, #0x4]
+ cmp r1, #0x0
+ beq _0209178C
+ cmp r1, #0x1
+ bne _020917A8
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020917A8
+_0209178C:
+ ldr r0, [sp, #0x4]
+ mov r1, #0x1
+ bl FUN_02094D7C
+ add sp, sp, #0x7c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020917A8:
+ cmp r1, #0x1
+ bne _020917DC
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _020917DC
+ ldr r0, [sp, #0x4]
+ mov r1, r7
+ bl FUN_02094E24
+ add sp, sp, #0x7c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020917DC:
+ ldr r0, [sp, #0xa4]
+ str r0, [sp, #0x18]
+ cmp r0, #0x0
+ bne _02091810
+ bl FUN_02092860
+ str r0, [sp, #0x18]
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r2, [sp, #0xa0]
+ mov r1, r5
+ bl FUN_02092894
+_02091808: ; 0x02091808
+ cmp r0, #0x0
+ beq _02091E6C
+_02091810:
+ ldr r3, [sp, #0xa0]
+ add r1, sp, #0x34
+ mov r4, r3
+ ldr r4, [r4, #0x10c]
+ mov r0, r6
+ mov r2, #0x0
+ str r4, [sp, #0x1c]
+ bl FUN_02092C28
+_02091830: ; 0x02091830
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r0, [sp, #0xa0]
+ ldr r0, [r0, #0x0]
+ add r1, r0, #0x1
+ ldr r0, [sp, #0xa0]
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x34]
+ ldrb r1, [r0, #0x2]
+ ldrb r0, [r0, #0x3]
+ str r0, [sp, #0x10]
+ add r0, r1, #0x3f
+ bl _s32_div_f
+ ldr r1, [sp, #0x34]
+ mov r4, r0
+ add r0, r1, #0x4
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x18]
+ ldr r3, [r7, #0x4]
+ ldr r10, [r0, #0x24]
+ cmp r3, r10
+ bne _020918A8
+ ldr r1, [r7, #0x0]
+ sub r2, r10, #0x1
+ ldr r0, [r5, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ ldr r0, [r0, r2, lsl #0x2]
+ cmp r1, r0
+ strcc r7, [sp, #0x14]
+ blo _02091960
+_020918A8:
+ cmp r3, r10
+ bge _0209191C
+ ldr r0, [sp, #0xa0]
+ ldr r3, [r0, #0x0]
+ add r1, r0, #0x4
+ add r2, r3, #0x1
+ str r2, [r0, #0x0]
+ mov r0, #0x14
+ mla r0, r3, r0, r1
+ ldr r2, [r7, #0x4]
+ mov r1, r0
+ str r2, [r1, #0x4]
+ mov r1, r10
+ str r0, [sp, #0x14]
+ bl FUN_0209508C
+ ldr r0, [r7, #0x4]
+ mov r2, #0x0
+ cmp r0, #0x0
+ ble _02091960
+_020918F4:
+ ldr r1, [r7, #0x0]
+ ldr r0, [sp, #0x14]
+ ldr r1, [r1, r2, lsl #0x2]
+ ldr r0, [r0, #0x0]
+ str r1, [r0, r2, lsl #0x2]
+ ldr r0, [r7, #0x4]
+ add r2, r2, #0x1
+ cmp r2, r0
+ blt _020918F4
+ b _02091960
+_0209191C:
+ ldr r0, [sp, #0xa0]
+ mov r2, r5
+ ldr r3, [r0, #0x0]
+ mov r1, r7
+ add r5, r3, #0x1
+ str r5, [r0, #0x0]
+ add r5, r0, #0x4
+ mov r0, #0x14
+ mla r0, r3, r0, r5
+ ldr r3, [sp, #0xa0]
+ str r0, [sp, #0x14]
+ bl FUN_02093214
+_0209194C: ; 0x0209194C
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r0, [sp, #0x14]
+ mov r1, r10
+ bl FUN_0209508C
+_02091960:
+ ldr r0, [sp, #0xa0]
+ ldr r3, [r0, #0x0]
+ ldr r0, [r6, #0x4]
+ add r1, r3, #0x1
+ mul r2, r0, r4
+ ldr r0, [sp, #0xa0]
+ mov r4, r2, lsl #0x1
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x0]
+ add r4, r4, #0x7
+ add r2, r1, #0x1
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0x10]
+ ldr r0, [r0, #0x0]
+ mul r5, r2, r10
+ mov r2, r4, asr #0x1
+ add r2, r4, r2, lsr #0x1e
+ add r5, r5, r2, asr #0x2
+ ldr r2, [sp, #0xa0]
+ mov r6, #0x14
+ add r2, r2, #0x4
+ mla r8, r1, r6, r2
+ mla r4, r3, r6, r2
+ ldr r1, [sp, #0xa0]
+ add r3, r0, #0x1
+ mla r7, r0, r6, r2
+ str r3, [r1, #0x0]
+ mov r0, r1
+ ldr r0, [r0, #0x0]
+ mla r6, r0, r6, r2
+ add r1, r0, #0x1
+ ldr r0, [sp, #0xa0]
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ ldr r0, [r0, #0x8]
+ cmp r10, r0
+ ldrle r0, [sp, #0x4]
+ ble _02091A04
+ ldr r0, [sp, #0x4]
+ mov r1, r10
+ bl FUN_02094EBC
+_02091A04:
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r0, [r8, #0x8]
+ mov r1, r10, lsl #0x2
+ cmp r1, r0
+ movle r0, r8
+ ble _02091A28
+ mov r0, r8
+ bl FUN_02094EBC
+_02091A28:
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r1, [r7, #0x8]
+ mov r0, r10, lsl #0x1
+ str r0, [sp, #0x24]
+ cmp r0, r1
+ movle r0, r7
+ ble _02091A54
+ ldr r1, [sp, #0x24]
+ mov r0, r7
+ bl FUN_02094EBC
+_02091A54:
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r0, [r4, #0x8]
+ cmp r5, r0
+ movle r0, r4
+ ble _02091A78
+ mov r1, r5
+ mov r0, r4
+ bl FUN_02094EBC
+_02091A78:
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r1, [r6, #0x8]
+ ldr r0, [sp, #0x24]
+ cmp r0, r1
+ movle r0, r6
+ ble _02091AA0
+ ldr r1, [sp, #0x24]
+ mov r0, r6
+ bl FUN_02094EBC
+_02091AA0:
+ cmp r0, #0x0
+ beq _02091E6C
+ ldr r0, [sp, #0x18]
+ ldr r11, [r8, #0x0]
+ ldr r8, [r7, #0x0]
+ ldr r6, [r6, #0x0]
+ ldr r1, [r4, #0x0]
+ ldr r7, [r0, #0x48]
+ ldr r5, [r0, #0x20]
+ ldr r3, [sp, #0x18]
+ str r1, [sp, #0x38]
+ str r10, [sp, #0x0]
+ ldr r1, [sp, #0x14]
+ ldr r3, [r3, #0xc]
+ ldr r1, [r1, #0x0]
+ mov r0, r6
+ mov r2, r10
+ bl FUN_020937E8
+ str r7, [sp, #0x0]
+ ldr r0, [sp, #0x38]
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ bl FUN_02092E30
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x1
+ ble _02091BA8
+ ldr r1, [sp, #0x38]
+ mov r0, r6
+ mov r2, r10
+ mov r3, r11
+ bl FUN_02092F70
+ mov r0, r11
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ str r7, [sp, #0x0]
+ bl FUN_02092E30
+ ldr r0, [sp, #0x10]
+ mov r4, #0x1
+ cmp r0, #0x1
+ ble _02091BA8
+ mov r0, r10, lsl #0x2
+ str r0, [sp, #0x28]
+ add r9, sp, #0x38
+_02091B54:
+ sub r3, r4, #0x1
+ ldr r2, [r9, r3, lsl #0x2]
+ ldr r1, [sp, #0x28]
+ mov r0, r6
+ add r1, r2, r1
+ str r1, [r9, r4, lsl #0x2]
+ str r10, [sp, #0x0]
+ ldr r1, [r9, r3, lsl #0x2]
+ mov r2, r10
+ mov r3, r11
+ bl FUN_020937E8
+ str r7, [sp, #0x0]
+ ldr r0, [r9, r4, lsl #0x2]
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ bl FUN_02092E30
+ ldr r0, [sp, #0x10]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _02091B54
+_02091BA8:
+ ldr r3, [sp, #0x34]
+ add r0, r3, #0x1
+ str r0, [sp, #0x34]
+ add r2, r0, #0x1
+ ldrb r1, [r3, #0x0]
+ str r2, [sp, #0x34]
+ ldrb r9, [r3, #0x1]
+ cmp r9, #0xff
+ bne _02091C28
+ cmp r1, #0x0
+ bne _02091C28
+ add r0, r2, #0x1
+ str r0, [sp, #0x34]
+ ldrb r1, [r2, #0x0]
+ b _02091BF8
+_02091BE4:
+ add r9, r9, #0x100
+ ldr r1, [sp, #0x34]
+ add r1, r1, #0x2
+ str r1, [sp, #0x34]
+ ldrb r1, [r0, #0x1]
+_02091BF8:
+ ldr r0, [sp, #0x34]
+ ldrb r2, [r0, #0x0]
+ cmp r2, #0xff
+ bne _02091C10
+ cmp r1, #0x0
+ beq _02091BE4
+_02091C10:
+ ldr r2, [sp, #0x34]
+ add r2, r2, #0x1
+ str r2, [sp, #0x34]
+ ldrb r0, [r0, #0x0]
+ add r0, r0, #0x1
+ add r9, r9, r0
+_02091C28:
+ mov r2, r1, asr #0x1
+ add r0, sp, #0x38
+ ldr r0, [r0, r2, lsl #0x2]
+ mov r1, r8
+ mov r2, r10, lsl #0x2
+ bl MI_CpuCopy8
+_02091C40: ; 0x02091C40
+ cmp r9, #0x0
+ beq _02091E00
+ mov r0, #0xff
+ str r0, [sp, #0x2c]
+ mov r0, #0x0
+ str r0, [sp, #0x30]
+_02091C58:
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ beq _02091C8C
+ mov r3, r0
+ ldr r1, [sp, #0x2c]
+ ldr r2, [sp, #0x20]
+ ldr r3, [r3, #0x0]
+ blx r3
+ cmp r0, #0x0
+ ldr r0, [sp, #0x20]
+ add r0, r0, #0x1
+ str r0, [sp, #0x20]
+ bne _02091E6C
+_02091C8C:
+ ldr r0, [sp, #0xa0]
+ ldr r0, [r0, #0x108]
+ ands r0, r0, #0x4000
+ bne _02091E6C
+ cmp r9, #0x0
+ ldr r4, [sp, #0x30]
+ ble _02091CE0
+_02091CA8:
+ mov r0, r6
+ mov r1, r8
+ mov r2, r10
+ mov r3, r11
+ bl FUN_02092F70
+ str r7, [sp, #0x0]
+ mov r0, r8
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ bl FUN_02092E30
+ add r4, r4, #0x1
+ cmp r4, r9
+ blt _02091CA8
+_02091CE0:
+ ldr r2, [sp, #0x34]
+ add r0, r2, #0x1
+ str r0, [sp, #0x34]
+ add r1, r0, #0x1
+ ldrb r0, [r2, #0x0]
+ str r1, [sp, #0x34]
+ ldrb r9, [r2, #0x1]
+ cmp r9, #0xff
+ bne _02091D60
+ cmp r0, #0x0
+ bne _02091D60
+ add r0, r1, #0x1
+ str r0, [sp, #0x34]
+ ldrb r0, [r1, #0x0]
+ b _02091D30
+_02091D1C:
+ add r9, r9, #0x100
+ ldr r0, [sp, #0x34]
+ add r0, r0, #0x2
+ str r0, [sp, #0x34]
+ ldrb r0, [r1, #0x1]
+_02091D30:
+ ldr r1, [sp, #0x34]
+ ldrb r2, [r1, #0x0]
+ cmp r2, #0xff
+ bne _02091D48
+ cmp r0, #0x0
+ beq _02091D1C
+_02091D48:
+ ldr r2, [sp, #0x34]
+ add r2, r2, #0x1
+ str r2, [sp, #0x34]
+ ldrb r1, [r1, #0x0]
+ add r1, r1, #0x1
+ add r9, r9, r1
+_02091D60:
+ cmp r0, #0x0
+ bne _02091D70
+ cmp r9, #0x0
+ beq _02091E00
+_02091D70:
+ cmp r9, #0x0
+ bne _02091D80
+ cmp r0, #0x1
+ beq _02091DBC
+_02091D80:
+ mov r1, r0, asr #0x1
+ str r10, [sp, #0x0]
+ add r0, sp, #0x38
+ ldr r3, [r0, r1, lsl #0x2]
+ mov r0, r6
+ mov r1, r8
+ mov r2, r10
+ bl FUN_020937E8
+ mov r0, r8
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ str r7, [sp, #0x0]
+ bl FUN_02092E30
+ b _02091DF8
+_02091DBC:
+ ldr r0, [sp, #0x14]
+ str r10, [sp, #0x0]
+ ldr r3, [r0, #0x0]
+ mov r0, r6
+ mov r1, r8
+ mov r2, r10
+ bl FUN_020937E8
+ ldr r0, [sp, #0x4]
+ str r7, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ bl FUN_02092E30
+ b _02091E44
+_02091DF8:
+ cmp r9, #0x0
+ bne _02091C58
+_02091E00:
+ ldr r0, [sp, #0x24]
+ mov r2, r10
+ cmp r10, r0
+ bge _02091E28
+ mov r1, #0x0
+_02091E14:
+ ldr r0, [sp, #0x24]
+ str r1, [r8, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, r0
+ blt _02091E14
+_02091E28:
+ ldr r0, [sp, #0x4]
+ str r7, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r1, r8
+ mov r2, r5
+ mov r3, r10
+ bl FUN_02092E30
+_02091E44:
+ ldr r0, [sp, #0xa0]
+ ldr r0, [r0, #0x108]
+ ands r0, r0, #0x4000
+ bne _02091E6C
+ ldr r0, [sp, #0x4]
+ mov r1, r0
+ str r10, [r1, #0x4]
+ bl FUN_02095040
+ mov r0, #0x1
+ str r0, [sp, #0x8]
+_02091E6C:
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ beq _02091E94
+ ldr r3, [r0, #0x0]
+ mov r1, #0xff
+ mvn r2, #0x0
+ blx r3
+ cmp r0, #0x0
+ movne r0, #0x0
+ strne r0, [sp, #0x8]
+_02091E94:
+ ldr r0, [sp, #0xa4]
+ cmp r0, #0x0
+ bne _02091EB0
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ beq _02091EB0
+ bl FUN_020927E4
+_02091EB0:
+ ldr r2, [sp, #0xc]
+ ldr r1, [sp, #0xa0]
+ ldr r0, [sp, #0x8]
+ str r2, [r1, #0x0]
+ add sp, sp, #0x7c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02091ECC
+FUN_02091ECC: ; 0x02091ECC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x18c
+ mov r10, r0
+ mov r0, #0x0
+ str r0, [sp, #0x8]
+ mov r5, r1
+ ldr r1, [sp, #0x8]
+ mov r0, r2
+ str r2, [sp, #0x4]
+ mov r4, r3
+ str r1, [sp, #0xc]
+ ldr r9, [sp, #0x1b0]
+ bl FUN_02095188
+ ldr r1, [r5, #0x4]
+ mov r8, r0
+ cmp r1, #0x0
+ beq _02091F28
+ cmp r1, #0x1
+ bne _02091F44
+ ldr r0, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02091F44
+_02091F28:
+ mov r0, r10
+ mov r1, #0x0
+ bl FUN_02094D7C
+ add sp, sp, #0x18c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02091F44:
+ ldr r0, [sp, #0x4]
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ beq _02091F6C
+ cmp r1, #0x1
+ bne _02091F88
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02091F88
+_02091F6C:
+ mov r0, r10
+ mov r1, #0x1
+ bl FUN_02094D7C
+ add sp, sp, #0x18c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02091F88:
+ cmp r1, #0x1
+ bne _02091FC0
+ ldr r0, [sp, #0x4]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _02091FC0
+ mov r0, r10
+ mov r1, r5
+ bl FUN_02094E24
+ add sp, sp, #0x18c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02091FC0:
+ add r0, sp, #0x18
+ bl FUN_020927BC
+ add r0, sp, #0x18
+ mov r1, r4
+ mov r2, r9
+ bl FUN_02092744
+_02091FD8: ; 0x02091FD8
+ cmp r0, #0x0
+ ble _0209220C
+ add r0, sp, #0x4c
+ bl FUN_0209502C
+ ldr r2, [r9, #0x0]
+ add r1, r9, #0x4
+ mov r0, #0x14
+ mla r6, r2, r0, r1
+ add r1, r2, #0x1
+ str r1, [r9, #0x0]
+ mov r2, r4
+ mov r4, #0x1
+ add r0, sp, #0x4c
+ mov r1, r5
+ mov r3, r9
+ str r4, [sp, #0xc]
+ bl FUN_02093214
+_0209201C: ; 0x0209201C
+ cmp r0, #0x0
+ beq _0209220C
+ add r1, sp, #0x4c
+ add r3, sp, #0x18
+ mov r0, r6
+ mov r2, r1
+ str r9, [sp, #0x0]
+ bl FUN_02092698
+_0209203C: ; 0x0209203C
+ cmp r0, #0x0
+ beq _0209220C
+ cmp r8, #0x11
+ movle r11, r4
+ ble _02092068
+ cmp r8, #0x100
+ movge r11, #0x5
+ bge _02092068
+ cmp r8, #0x80
+ movge r11, #0x4
+ movlt r11, #0x3
+_02092068:
+ sub r0, r11, #0x1
+ mov r4, #0x1
+ mov r7, r4, lsl r0
+ cmp r7, #0x1
+ ble _020920C4
+ add r5, sp, #0x60
+_02092080:
+ mov r0, r5
+ bl FUN_0209502C
+ sub r3, r4, #0x1
+ mov r2, #0x14
+ add r1, sp, #0x4c
+ mla r1, r3, r2, r1
+ mov r0, r5
+ mov r2, r6
+ add r3, sp, #0x18
+ str r9, [sp, #0x0]
+ bl FUN_02092698
+_020920AC: ; 0x020920AC
+ cmp r0, #0x0
+ beq _0209220C
+ add r4, r4, #0x1
+ cmp r4, r7
+ add r5, r5, #0x14
+ blt _02092080
+_020920C4:
+ mov r5, #0x1
+ mov r0, r10
+ mov r1, r5
+ str r4, [sp, #0xc]
+ sub r8, r8, #0x1
+ bl FUN_02094D7C
+_020920DC: ; 0x020920DC
+ cmp r0, #0x0
+ beq _0209220C
+ mov r0, r5
+ str r0, [sp, #0x10]
+ mov r0, #0x0
+ str r0, [sp, #0x14]
+_020920F4:
+ ldr r0, [sp, #0x4]
+ mov r1, r8
+ bl FUN_02094A8C
+_02092100: ; 0x02092100
+ cmp r0, #0x0
+ bne _02092140
+ cmp r5, #0x0
+ bne _02092130
+ mov r0, r10
+ mov r1, r10
+ mov r2, r10
+ add r3, sp, #0x18
+ str r9, [sp, #0x0]
+ bl FUN_02092698
+_02092128: ; 0x02092128
+ cmp r0, #0x0
+ beq _0209220C
+_02092130:
+ cmp r8, #0x0
+ beq _02092204
+ sub r8, r8, #0x1
+ b _020920F4
+_02092140:
+ ldr r6, [sp, #0x10]
+ ldr r7, [sp, #0x14]
+ cmp r11, #0x1
+ mov r4, r6
+ ble _02092184
+_02092154:
+ subs r1, r8, r4
+ bmi _02092184
+ ldr r0, [sp, #0x4]
+ bl FUN_02094A8C
+_02092164: ; 0x02092164
+ cmp r0, #0x0
+ subne r0, r4, r7
+ movne r0, r6, lsl r0
+ movne r7, r4
+ add r4, r4, #0x1
+ orrne r6, r0, #0x1
+ cmp r4, r11
+ blt _02092154
+_02092184:
+ cmp r5, #0x0
+ add r5, r7, #0x1
+ bne _020921C8
+ cmp r5, #0x0
+ ldr r4, [sp, #0x14]
+ ble _020921C8
+_0209219C:
+ mov r0, r10
+ mov r1, r10
+ mov r2, r10
+ add r3, sp, #0x18
+ str r9, [sp, #0x0]
+ bl FUN_02092698
+_020921B4: ; 0x020921B4
+ cmp r0, #0x0
+ beq _0209220C
+ add r4, r4, #0x1
+ cmp r4, r5
+ blt _0209219C
+_020921C8:
+ mov r3, r6, asr #0x1
+ mov r1, #0x14
+ add r0, sp, #0x4c
+ mla r2, r3, r1, r0
+ mov r0, r10
+ mov r1, r10
+ add r3, sp, #0x18
+ str r9, [sp, #0x0]
+ bl FUN_02092698
+_020921EC: ; 0x020921EC
+ cmp r0, #0x0
+ beq _0209220C
+ add r0, r7, #0x1
+ ldr r5, [sp, #0x14]
+ subs r8, r8, r0
+ bpl _020920F4
+_02092204:
+ mov r0, #0x1
+ str r0, [sp, #0x8]
+_0209220C:
+ ldr r0, [sp, #0xc]
+ ldr r1, [r9, #0x0]
+ cmp r0, #0x0
+ sub r0, r1, #0x1
+ str r0, [r9, #0x0]
+ mov r4, #0x0
+ ble _02092248
+ add r5, sp, #0x4c
+_0209222C:
+ mov r0, r5
+ bl FUN_02095164
+ ldr r0, [sp, #0xc]
+ add r4, r4, #0x1
+ cmp r4, r0
+ add r5, r5, #0x14
+ blt _0209222C
+_02092248:
+ add r0, sp, #0x18
+ bl FUN_02092788
+ ldr r0, [sp, #0x8]
+ add sp, sp, #0x18c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02092260
+FUN_02092260: ; 0x02092260
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ movs r8, r2
+ mov r10, r0
+ mov r9, r1
+ mov r11, #0x0
+ mov r5, #0x2
+ addeq sp, sp, #0x4
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, r8
+ bl FUN_020951BC
+ cmp r0, #0x20
+ beq _020922B4
+ mov r1, #0x1
+ cmp r10, r1, lsl r0
+ addhi sp, sp, #0x4
+ movhi r0, r11
+ ldmhiia sp!, {r4-r11,lr}
+ bxhi lr
+_020922B4:
+ cmp r10, r8
+ rsb r2, r0, #0x20
+ subcs r10, r10, r8
+ cmp r2, #0x0
+ movne r1, r10, lsl r2
+ rsbne r0, r2, #0x20
+ orrne r10, r1, r9, lsr r0
+ movne r8, r8, lsl r2
+ ldr r4, _0209239C ; =0x0000FFFF
+ movne r9, r9, lsl r2
+ and r7, r4, r8, lsr #0x10
+ and r6, r8, r4
+_020922E4:
+ mov r0, r10, lsr #0x10
+ cmp r0, r7
+ moveq r0, r4
+ beq _02092300
+ mov r0, r10
+ mov r1, r7
+ bl _u32_div_f
+_02092300:
+ mul r12, r0, r7
+ mul r3, r0, r6
+ and r2, r4, r9, lsr #0x10
+_0209230C:
+ mov lr, #0x10000
+ sub r1, r10, r12
+ rsb lr, lr, #0x0
+ ands lr, r1, lr
+ bne _02092338
+ add r1, r2, r1, lsl #0x10
+ cmp r3, r1
+ subhi r12, r12, r7
+ subhi r3, r3, r6
+ subhi r0, r0, #0x1
+ bhi _0209230C
+_02092338:
+ mul r2, r0, r6
+ and r1, r2, r4
+ mul r3, r0, r7
+ mov r1, r1, lsl #0x10
+ cmp r9, r1
+ add r2, r3, r2, lsr #0x10
+ addcc r2, r2, #0x1
+ cmp r10, r2
+ addcc r10, r10, r8
+ sub r9, r9, r1
+ subcc r0, r0, #0x1
+ sub r1, r10, r2
+ subs r5, r5, #0x1
+ beq _0209238C
+ and r2, r0, r4
+ mov r1, r1, lsl #0x10
+ and r0, r9, r4
+ orr r10, r1, r9, lsr #0x10
+ mov r11, r2, lsl #0x10
+ mov r9, r0, lsl #0x10
+ b _020922E4
+_0209238C:
+ orr r0, r11, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209239C: .word 0x0000FFFF
+
+ arm_func_start FUN_020923A0
+FUN_020923A0: ; 0x020923A0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x18
+ mov r8, r0
+ add r0, sp, #0x4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ mvn r4, #0x0
+ bl FUN_0209502C
+ add r0, sp, #0x4
+ mov r1, #0x0
+ bl FUN_02094D7C
+ add r0, sp, #0x4
+ mov r1, r6
+ bl FUN_02094AFC
+_020923DC: ; 0x020923DC
+ cmp r0, #0x0
+ beq _02092404
+ add r2, sp, #0x4
+ mov r0, r8
+ mov r3, r7
+ mov r1, #0x0
+ str r5, [sp, #0x0]
+ bl FUN_02093248
+_020923FC: ; 0x020923FC
+ cmp r0, #0x0
+ movne r4, r6
+_02092404:
+ add r0, sp, #0x4
+ bl FUN_0209510C
+ mov r0, r4
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_0209241C
+FUN_0209241C: ; 0x0209241C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r6, [sp, #0x30]
+ mov r9, r1
+ ldr r11, [r6, #0x0]
+ movs r10, r0
+ add r0, r11, #0x1
+ str r0, [r6, #0x0]
+ ldr r7, [r6, #0x0]
+ add r4, r6, #0x4
+ mov r0, #0x14
+ mla r5, r11, r0, r4
+ add r12, r7, #0x1
+ mov r1, #0x0
+ str r5, [sp, #0x4]
+ mla r5, r7, r0, r4
+ str r12, [r6, #0x0]
+ str r1, [sp, #0x0]
+ ldreq r1, [r6, #0x0]
+ mov r8, r2
+ mlaeq r10, r1, r0, r4
+ addeq r0, r1, #0x1
+ streq r0, [r6, #0x0]
+ mov r7, r3
+ cmp r9, #0x0
+ bne _0209249C
+ ldr r2, [r6, #0x0]
+ add r1, r6, #0x4
+ mov r0, #0x14
+ mla r9, r2, r0, r1
+ add r0, r2, #0x1
+ str r0, [r6, #0x0]
+_0209249C:
+ mov r0, r8
+ mov r1, r7
+ bl FUN_02094B98
+_020924A8: ; 0x020924A8
+ cmp r0, #0x0
+ bge _020924DC
+ mov r0, r10
+ mov r1, #0x0
+ bl FUN_02094D7C
+ mov r0, r9
+ mov r1, r8
+ bl FUN_02094E24
+ add sp, sp, #0xc
+ str r11, [r6, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020924DC:
+ mov r0, r8
+ bl FUN_02095188
+ ldr r1, [r7, #0x28]
+ mov r2, r0
+ mov r0, r1, lsl #0x1
+ cmp r0, r2
+ movgt r2, r0
+ suble r0, r2, r0
+ movgt r4, #0x0
+ addle r0, r0, r0, lsr #0x1f
+ movle r4, r0, asr #0x1
+ ldr r1, [r7, #0x2c]
+ add r0, r2, r2, lsr #0x1f
+ mov r0, r0, asr #0x1
+ cmp r2, r1
+ str r0, [sp, #0x8]
+ beq _02092534
+ mov r1, r7
+ mov r3, r6
+ add r0, r7, #0x14
+ bl FUN_020923A0
+ str r0, [r7, #0x2c]
+_02092534:
+ ldr r2, [sp, #0x8]
+ ldr r0, [sp, #0x4]
+ mov r1, r8
+ sub r2, r2, r4
+ bl FUN_02094134
+_02092548: ; 0x02092548
+ cmp r0, #0x0
+ beq _02092684
+ ldr r1, [sp, #0x4]
+ mov r0, r5
+ mov r3, r6
+ add r2, r7, #0x14
+ bl FUN_0209390C
+_02092564: ; 0x02092564
+ cmp r0, #0x0
+ beq _02092684
+ ldr r2, [sp, #0x8]
+ mov r0, r10
+ mov r1, r5
+ add r2, r2, r4
+ bl FUN_02094134
+_02092580: ; 0x02092580
+ cmp r0, #0x0
+ beq _02092684
+ mov r4, #0x0
+ mov r0, r5
+ mov r1, r7
+ mov r2, r10
+ mov r3, r6
+ str r4, [r10, #0xc]
+ bl FUN_0209390C
+_020925A4: ; 0x020925A4
+ cmp r0, #0x0
+ beq _02092684
+ mov r0, r9
+ mov r1, r8
+ mov r2, r5
+ bl FUN_02093B50
+_020925BC: ; 0x020925BC
+ cmp r0, #0x0
+ beq _02092684
+ mov r5, r4
+ mov r0, r9
+ mov r1, r7
+ str r5, [r9, #0xc]
+ bl FUN_02094B98
+_020925D8: ; 0x020925D8
+ cmp r0, #0x0
+ blt _02092630
+ mov r4, #0x1
+_020925E4:
+ cmp r5, #0x2
+ add r5, r5, #0x1
+ bgt _02092684
+ mov r0, r9
+ mov r1, r9
+ mov r2, r7
+ bl FUN_02093B50
+_02092600: ; 0x02092600
+ cmp r0, #0x0
+ beq _02092684
+ mov r0, r10
+ mov r1, r4
+ bl FUN_0209400C
+_02092614: ; 0x02092614
+ cmp r0, #0x0
+ beq _02092684
+ mov r0, r9
+ mov r1, r7
+ bl FUN_02094B98
+_02092628: ; 0x02092628
+ cmp r0, #0x0
+ bge _020925E4
+_02092630:
+ ldr r0, [r9, #0x4]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209265C
+ cmp r0, #0x1
+ bne _02092658
+ ldr r0, [r9, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209265C
+_02092658:
+ mov r1, #0x0
+_0209265C:
+ cmp r1, #0x0
+ movne r0, #0x0
+ ldreq r0, [r8, #0xc]
+ str r0, [r9, #0xc]
+ mov r0, #0x1
+ ldr r2, [r8, #0xc]
+ ldr r1, [r7, #0xc]
+ str r0, [sp, #0x0]
+ eor r0, r2, r1
+ str r0, [r10, #0xc]
+_02092684:
+ ldr r0, [sp, #0x0]
+ str r11, [r6, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02092698
+FUN_02092698:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r4, [sp, #0x20]
+ mov r12, #0x14
+ ldr r5, [r4, #0x0]
+ add lr, r4, #0x4
+ mla r6, r5, r12, lr
+ add r12, r5, #0x1
+ mov r8, r0
+ mov r7, r3
+ str r12, [r4, #0x0]
+ cmp r2, #0x0
+ mov r5, #0x0
+ beq _02092708
+ cmp r1, r2
+ bne _020926F0
+ mov r0, r6
+ mov r2, r4
+ bl FUN_0209305C
+_020926E4: ; 0x020926E4
+ cmp r0, #0x0
+ bne _0209270C
+ b _02092728
+_020926F0:
+ mov r0, r6
+ mov r3, r4
+ bl FUN_0209390C
+_020926FC: ; 0x020926FC
+ cmp r0, #0x0
+ bne _0209270C
+ b _02092728
+_02092708:
+ mov r6, r1
+_0209270C:
+ mov r1, r8
+ mov r2, r6
+ mov r3, r7
+ mov r0, #0x0
+ str r4, [sp, #0x0]
+ bl FUN_0209241C
+ mov r5, #0x1
+_02092728:
+ ldr r1, [r4, #0x0]
+ mov r0, r5
+ sub r1, r1, #0x1
+ str r1, [r4, #0x0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_02092744
+FUN_02092744:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_02094E24
+ add r0, r5, #0x14
+ mov r1, #0x0
+ bl FUN_02094D7C
+ mov r0, r4
+ bl FUN_02095188
+ str r0, [r5, #0x28]
+ mov r0, #0x0
+ str r0, [r5, #0x2c]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02092788
+FUN_02092788: ; 0x02092788
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_0209510C
+ add r0, r4, #0x14
+ bl FUN_0209510C
+ ldr r0, [r4, #0x30]
+ ands r0, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ bl FUN_0209105C
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020927BC
+FUN_020927BC: ; 0x020927BC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_0209502C
+ add r0, r4, #0x14
+ bl FUN_0209502C
+_020927D0: ; 0x020927D0
+ mov r0, #0x0
+ str r0, [r4, #0x28]
+ str r0, [r4, #0x30]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020927E4
+FUN_020927E4: ; 0x020927E4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r0, r4, #0xc
+ bl FUN_0209510C
+ add r0, r4, #0x20
+ bl FUN_0209510C
+ add r0, r4, #0x34
+ bl FUN_0209510C
+ ldr r0, [r4, #0x4c]
+ ands r0, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ bl FUN_0209105C
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02092824
+FUN_02092824: ; 0x02092824
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ add r0, r4, #0xc
+ str r1, [r4, #0x8]
+ bl FUN_0209502C
+ add r0, r4, #0x20
+ bl FUN_0209502C
+ add r0, r4, #0x34
+ bl FUN_0209502C
+_02092850: ; 0x02092850
+ mov r0, #0x0
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02092860
+FUN_02092860: ; 0x02092860
+ stmdb sp!, {r4,lr}
+ mov r0, #0x50
+ bl FUN_020910A4
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl FUN_02092824
+ mov r1, #0x1
+ mov r0, r4
+ str r1, [r4, #0x4c]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02092894
+FUN_02092894:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r6, r1
+ ldr r3, [r6, #0x4]
+ mov r7, r0
+ cmp r3, #0x0
+ mov r5, r2
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ add r0, r7, #0x20
+ add r4, r7, #0xc
+ bl FUN_02094E24
+_020928CC: ; 0x020928CC
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ add r0, sp, #0x0
+ bl FUN_0209502C
+ mov r1, #0x1
+ mov r0, r6
+ str r1, [r7, #0x0]
+ bl FUN_02095188
+ add r1, r0, #0x1f
+ mov r0, r1, asr #0x4
+ add r0, r1, r0, lsr #0x1b
+ mov r2, r0, asr #0x5
+ mov r0, r4
+ mov r1, #0x0
+ str r2, [r7, #0x8]
+ bl FUN_02094D7C
+_02092918: ; 0x02092918
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, #0x20
+ bl FUN_02094AFC
+_02092938: ; 0x02092938
+ cmp r0, #0x0
+ beq _02092A38
+ ldr r0, [r6, #0x0]
+ ldr r4, [r0, #0x0]
+ mov r0, r4
+ bl FUN_02092D9C
+ mov r1, r0
+ add r0, sp, #0x0
+ bl FUN_02094D7C
+_0209295C: ; 0x0209295C
+ cmp r0, #0x0
+ beq _02092A38
+ add r0, sp, #0x0
+ mov r2, #0x20
+ mov r1, r0
+ bl FUN_02094250
+_02092974: ; 0x02092974
+ cmp r0, #0x0
+ beq _02092A38
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020929B0
+ cmp r0, #0x1
+ bne _020929A0
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020929B0
+_020929A0:
+ add r0, sp, #0x0
+ mov r1, #0x1
+ bl FUN_02093EAC
+ b _020929C4
+_020929B0:
+ add r0, sp, #0x0
+ mvn r1, #0x0
+ bl FUN_02094D7C
+_020929BC: ; 0x020929BC
+ cmp r0, #0x0
+ beq _02092A38
+_020929C4:
+ ldr r2, [sp, #0x4]
+ cmp r2, #0x1
+ ldrge r0, [sp, #0x0]
+ ldrge r1, [r0, #0x0]
+ movlt r1, #0x0
+ cmp r2, #0x2
+ ldrge r0, [sp, #0x0]
+ mov r2, r4
+ ldrge r0, [r0, #0x4]
+ movlt r0, #0x0
+ bl FUN_02092260
+ str r0, [r7, #0x48]
+ add r0, r7, #0xc
+ mov r1, #0x0
+ bl FUN_02094D7C
+ ldr r1, [r7, #0x8]
+ add r0, r7, #0xc
+ mov r1, r1, lsl #0x6
+ bl FUN_02094AFC
+_02092A10: ; 0x02092A10
+ cmp r0, #0x0
+ beq _02092A38
+ add r0, r7, #0xc
+ mov r1, r0
+ mov r3, r5
+ add r2, r7, #0x20
+ bl FUN_02093214
+ ldr r1, [r7, #0x8]
+ add r0, r7, #0xc
+ bl FUN_0209508C
+_02092A38:
+ add r0, sp, #0x0
+ bl FUN_0209510C
+ mov r0, #0x1
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02092A50
+FUN_02092A50: ; 0x02092A50
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r4, r2
+ mov r7, r1
+ cmp r4, #0x6
+ mov r5, r0
+ movgt r4, #0x6
+ mov r1, #0x1
+ mov r2, r1, lsl r4
+ ldr r0, [r7, #0x4]
+ sub r2, r2, #0x1
+ add r0, r4, r0, lsl #0x5
+ ldr r3, _02092C24 ; =0x02106170
+ str r2, [sp, #0x0]
+ ldr r2, [r3, r4, lsl #0x2]
+ mov r1, r4
+ sub r0, r0, #0x1
+ str r2, [sp, #0x4]
+ mov r6, #0x0
+ bl _s32_div_f
+ mov r12, #0x0
+ mov r0, r0, lsl #0x1
+ add r0, r0, #0x2
+ mov r8, r6
+ add r1, r5, r0
+ strb r8, [r5, r0]
+ strb r8, [r1, #-0x1]
+ ldr r0, [r7, #0x0]
+ ldr r2, [r7, #0x4]
+ ldr r7, [r0, #0x0]
+ add lr, r0, #0x4
+ cmp r2, #0x1
+ sub r9, r1, #0x2
+ ldrgt r8, [lr], #0x4
+ mov r10, r7
+ mov r0, r12
+ str r12, [sp, #0x8]
+ mov r1, #0xff
+ mov r11, r12
+_02092AEC:
+ ldr r3, [sp, #0x0]
+ and r3, r10, r3
+ ldr r10, [sp, #0x4]
+ ldrb r10, [r10, r3]
+ cmp r10, #0x0
+ beq _02092B4C
+ add r12, r12, r10
+ add r6, r6, r10
+ cmp r6, #0x20
+ blo _02092B34
+ cmp r2, #0x1
+ ble _02092B4C
+ sub r2, r2, #0x1
+ mov r7, r8
+ cmp r2, #0x1
+ movle r8, r11
+ ldrgt r8, [lr], #0x4
+ sub r6, r6, #0x20
+_02092B34:
+ cmp r6, #0x0
+ moveq r10, r7
+ movne r10, r7, lsr r6
+ rsbne r3, r6, #0x20
+ orrne r10, r10, r8, lsl r3
+ b _02092AEC
+_02092B4C:
+ cmp r3, #0x0
+ beq _02092BD0
+ strb r12, [r9, #0x0]
+ strb r3, [r9, #-0x1]
+ cmp r12, #0x100
+ sub r9, r9, #0x2
+ blo _02092B88
+ cmp r12, #0x100
+ blo _02092B88
+_02092B70:
+ strb r1, [r9, #0x0]
+ sub r12, r12, #0x100
+ strb r0, [r9, #-0x1]
+ sub r9, r9, #0x2
+ cmp r12, #0x100
+ bhs _02092B70
+_02092B88:
+ mov r12, r4
+ add r6, r6, r4
+ cmp r6, #0x20
+ blo _02092BB8
+ cmp r2, #0x1
+ ble _02092BD0
+ sub r2, r2, #0x1
+ mov r7, r8
+ cmp r2, #0x1
+ ldrle r8, [sp, #0x8]
+ sub r6, r6, #0x20
+ ldrgt r8, [lr], #0x4
+_02092BB8:
+ cmp r6, #0x0
+ moveq r10, r7
+ movne r10, r7, lsr r6
+ rsbne r3, r6, #0x20
+ orrne r10, r10, r8, lsl r3
+ b _02092AEC
+_02092BD0:
+ add r9, r9, #0x1
+ mov r0, #0x2
+ b _02092BF4
+_02092BDC:
+ strb r2, [r5, #0x0]
+ ldrb r1, [r9, #0x1]
+ add r9, r9, #0x2
+ add r0, r0, #0x2
+ strb r1, [r5, #0x1]
+ add r5, r5, #0x2
+_02092BF4:
+ ldrb r2, [r9, #0x0]
+ cmp r2, #0x0
+ bne _02092BDC
+ ldrb r1, [r9, #0x1]
+ cmp r1, #0x0
+ bne _02092BDC
+ mov r1, #0x0
+ strb r1, [r5, #0x0]
+ strb r1, [r5, #0x1]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_02092C24: .word 0x02106170
+
+ arm_func_start FUN_02092C28
+FUN_02092C28:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r5, [r3], #0x4
+ mov r2, #0x14
+ mla r4, r5, r2, r3
+ mov r9, r0
+ ldr r0, [r9, #0x4]
+ mov r8, r1
+ cmp r0, #0x0
+ mov r5, #0x0
+ mov r1, r0, lsl #0x5
+ addeq sp, sp, #0x4
+ moveq r0, r5
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r0, #0x1
+ bne _02092CC8
+ cmp r0, #0x1
+ bne _02092C8C
+ ldr r2, [r9, #0x0]
+ ldr r1, _02092D8C ; =0x00010001
+ ldr r2, [r2, #0x0]
+ cmp r2, r1
+ ldreq r5, _02092D90 ; =0x020FF500
+ beq _02092CB8
+_02092C8C:
+ ldr r1, [r9, #0x0]
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x11
+ bne _02092CA8
+ cmp r0, #0x1
+ ldreq r5, _02092D94 ; =0x020FF518
+ beq _02092CB8
+_02092CA8:
+ cmp r1, #0x3
+ bne _02092CB8
+ cmp r0, #0x1
+ ldreq r5, _02092D98 ; =0x020FF50C
+_02092CB8:
+ mov r7, #0x1
+ mov r6, r7
+ mov r1, #0x20
+ b _02092CF8
+_02092CC8:
+ cmp r1, #0x100
+ movge r7, #0x5
+ movge r6, #0x10
+ movge r1, #0x7
+ bge _02092CF8
+ cmp r1, #0x80
+ movge r6, #0x8
+ movge r1, r6
+ movge r7, #0x4
+ movlt r7, #0x3
+ movlt r6, #0x4
+ movlt r1, #0xb
+_02092CF8:
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x1
+ add r1, r0, #0x7
+ mov r0, r1, asr #0x1
+ add r0, r1, r0, lsr #0x1e
+ cmp r5, #0x0
+ mov r1, r0, asr #0x2
+ bne _02092D74
+ ldr r0, [r4, #0x8]
+ cmp r1, r0
+ movle r0, r4
+ ble _02092D30
+ mov r0, r4
+ bl FUN_02094EBC
+_02092D30:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r5, [r4, #0x0]
+ mov r1, r9
+ mov r2, r7
+ add r0, r5, #0x4
+ bl FUN_02092A50
+ add r1, r0, #0x2
+ mov r0, r1, asr #0x8
+ strb r0, [r5, #0x0]
+ strb r1, [r5, #0x1]
+ strb r7, [r5, #0x2]
+ strb r6, [r5, #0x3]
+ b _02092D78
+_02092D74:
+ mov r1, #0x8
+_02092D78:
+ str r5, [r8, #0x0]
+ add r0, r1, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_02092D8C: .word 0x00010001
+_02092D90: .word 0x020FF500
+_02092D94: .word 0x020FF518
+_02092D98: .word 0x020FF50C
+
+ arm_func_start FUN_02092D9C
+FUN_02092D9C: ; 0x02092D9C
+ stmdb sp!, {r4-r10,lr}
+ mov r10, r0
+ mov r1, r10
+ rsb r0, r10, #0x0
+ bl _u32_div_f
+ movs r8, r1
+ mov r7, r10
+ mov r5, #0x0
+ mov r6, #0x1
+ mvn r4, #0x0
+ beq _02092E04
+_02092DC8:
+ mov r0, r7
+ mov r1, r8
+ bl _u32_div_f
+ mov r9, r1
+ mov r0, r7
+ mov r1, r8
+ bl _u32_div_f
+ mla r1, r0, r6, r5
+ mov r5, r6
+ mov r7, r8
+ mov r6, r1
+ mov r8, r9
+ cmp r9, #0x0
+ rsb r4, r4, #0x0
+ bne _02092DC8
+_02092E04:
+ cmp r4, #0x0
+ sublt r5, r10, r5
+ cmp r7, #0x1
+ movne r1, #0x0
+ bne _02092E24
+ mov r0, r5
+ mov r1, r10
+ bl _u32_div_f
+_02092E24:
+ mov r0, r1
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_02092E30
+FUN_02092E30: ; 0x02092E30
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r7, r3
+ mov r9, r1
+ mov r6, #0x0
+ mov r10, r0
+ mov r8, r2
+ mov r4, r6
+ cmp r7, #0x0
+ add r5, r9, r7, lsl #0x2
+ ldr r11, [sp, #0x30]
+ ble _02092EC0
+ mov r0, #0x1
+ str r6, [sp, #0x4]
+ str r0, [sp, #0x0]
+_02092E6C:
+ ldr r1, [r9, #0x0]
+ mov r0, r9
+ mul r3, r1, r11
+ mov r1, r8
+ mov r2, r7
+ bl FUN_020948AC
+ add r1, r0, r6
+ ldr r0, [r5, #0x0]
+ cmp r1, r6
+ ldrcc r6, [sp, #0x0]
+ add r0, r0, r1
+ str r0, [r5, #0x0]
+ ldr r0, [r5, #0x0]
+ ldrcs r6, [sp, #0x4]
+ cmp r0, r1
+ add r4, r4, #0x1
+ addcc r6, r6, #0x1
+ cmp r4, r7
+ add r9, r9, #0x4
+ add r5, r5, #0x4
+ blt _02092E6C
+_02092EC0:
+ cmp r6, #0x0
+ sub r2, r7, #0x1
+ bne _02092F14
+ ldr r1, [r9, r2, lsl #0x2]
+ ldr r0, [r8, r2, lsl #0x2]
+ cmp r1, r0
+ bne _02092F00
+ cmp r2, #0x0
+ ble _02092F00
+_02092EE4:
+ ldr r1, [r9, r2, lsl #0x2]
+ ldr r0, [r8, r2, lsl #0x2]
+ cmp r1, r0
+ bne _02092F00
+ sub r2, r2, #0x1
+ cmp r2, #0x0
+ bgt _02092EE4
+_02092F00:
+ ldr r1, [r9, r2, lsl #0x2]
+ ldr r0, [r8, r2, lsl #0x2]
+ cmp r1, r0
+ movcs r6, #0x1
+ movcc r6, #0x0
+_02092F14:
+ cmp r6, #0x0
+ beq _02092F3C
+ mov r0, r10
+ mov r1, r9
+ mov r2, r8
+ mov r3, r7
+ bl FUN_02094354
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02092F3C:
+ cmp r7, #0x0
+ addle sp, sp, #0xc
+ mov r1, #0x0
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+_02092F50:
+ ldr r0, [r9, r1, lsl #0x2]
+ str r0, [r10, r1, lsl #0x2]
+ add r1, r1, #0x1
+ cmp r1, r7
+ blt _02092F50
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02092F70
+FUN_02092F70:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r11, r2
+ mov r6, r11, lsl #0x1
+ mov r10, r0
+ mov r7, r11
+ mov r9, r1
+ sub r7, r7, #0x1
+ sub r2, r6, #0x1
+ mov r0, #0x0
+ str r0, [r10, r2, lsl #0x2]
+ ldr r0, [r10, r2, lsl #0x2]
+ str r3, [sp, #0x0]
+ mov r5, r9
+ str r0, [r10, #0x0]
+ cmp r7, #0x0
+ add r4, r10, #0x4
+ ble _02092FD8
+ add r5, r5, #0x4
+ ldr r3, [r9, #0x0]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl FUN_0209470C
+ str r0, [r4, r7, lsl #0x2]
+ add r4, r4, #0x8
+_02092FD8:
+ sub r8, r11, #0x2
+ cmp r8, #0x0
+ ble _02093018
+_02092FE4:
+ mov r0, r5
+ sub r7, r7, #0x1
+ add r5, r5, #0x4
+ ldr r3, [r0, #0x0]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl FUN_020948AC
+ sub r8, r8, #0x1
+ str r0, [r4, r7, lsl #0x2]
+ cmp r8, #0x0
+ add r4, r4, #0x8
+ bgt _02092FE4
+_02093018:
+ mov r0, r10
+ mov r1, r10
+ mov r2, r10
+ mov r3, r6
+ bl FUN_02094468
+_0209302C: ; 0x0209302C
+ ldr r0, [sp, #0x0]
+ mov r1, r9
+ mov r2, r11
+ bl FUN_020945B8
+ ldr r2, [sp, #0x0]
+ mov r0, r10
+ mov r1, r10
+ mov r3, r6
+ bl FUN_02094468
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_0209305C
+FUN_0209305C:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x64
+ ldr r5, [r2, #0x0]
+ mov r9, r0
+ mov r8, r1
+ cmp r8, r9
+ add r3, r2, #0x4
+ mov r2, #0x14
+ movne r7, r9
+ addeq r0, r5, #0x1
+ mla r4, r5, r2, r3
+ mlaeq r7, r0, r2, r3
+ ldr r5, [r8, #0x4]
+ cmp r5, #0x0
+ movle r0, #0x0
+ strle r0, [r9, #0x4]
+ addle sp, sp, #0x64
+ movle r0, #0x1
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r0, [r7, #0x8]
+ mov r6, r5, lsl #0x1
+ cmp r6, r0
+ movle r0, r7
+ ble _020930CC
+ mov r0, r7
+ mov r1, r6
+ bl FUN_02094EBC
+_020930CC:
+ cmp r0, #0x0
+ addeq sp, sp, #0x64
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ str r6, [r7, #0x4]
+ mov r0, #0x0
+ str r0, [r7, #0xc]
+ cmp r5, #0x4
+ bne _0209310C
+ ldr r0, [r7, #0x0]
+ ldr r1, [r8, #0x0]
+ add r3, sp, #0x0
+ mov r2, #0x4
+ bl FUN_02092F70
+ b _02093170
+_0209310C:
+ cmp r5, #0x8
+ bne _0209312C
+ ldr r0, [r7, #0x0]
+ ldr r1, [r8, #0x0]
+ add r3, sp, #0x20
+ mov r2, #0x8
+ bl FUN_02092F70
+ b _02093170
+_0209312C:
+ ldr r0, [r4, #0x8]
+ cmp r6, r0
+ movle r0, r4
+ ble _02093148
+ mov r0, r4
+ mov r1, r6
+ bl FUN_02094EBC
+_02093148:
+ cmp r0, #0x0
+ addeq sp, sp, #0x64
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, [r7, #0x0]
+ ldr r1, [r8, #0x0]
+ ldr r3, [r4, #0x0]
+ mov r2, r5
+ bl FUN_02092F70
+_02093170:
+ cmp r6, #0x0
+ ble _02093194
+ ldr r1, [r7, #0x0]
+ sub r0, r6, #0x1
+ ldr r0, [r1, r0, lsl #0x2]
+ cmp r0, #0x0
+ ldreq r0, [r7, #0x4]
+ subeq r0, r0, #0x1
+ streq r0, [r7, #0x4]
+_02093194:
+ cmp r7, r9
+ beq _020931A8
+ mov r0, r9
+ mov r1, r7
+ bl FUN_02094E24
+_020931A8:
+ mov r0, #0x1
+ add sp, sp, #0x64
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_020931B8
+FUN_020931B8:
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ ldr r12, [r3, #0x4]
+ cmp r12, #0x0
+ ble _020931FC
+ ldr r12, [r3, #0x0]
+ ldr r12, [r12, #0x0]
+ ands r12, r12, #0x1
+ beq _020931FC
+ ldr lr, [sp, #0x10]
+ mov r12, #0x0
+ str lr, [sp, #0x0]
+ str r12, [sp, #0x4]
+ bl FUN_020916C8
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+_020931FC:
+ ldr r12, [sp, #0x10]
+ str r12, [sp, #0x0]
+ bl FUN_02091ECC
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_02093214
+FUN_02093214:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ mov r1, r0
+ mov r2, lr
+ mov r3, r12
+ mov r0, #0x0
+ bl FUN_02093248
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_02093248
+FUN_02093248:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ mov r6, r3
+ ldr r3, [r6, #0x4]
+ mov r8, r0
+ str r1, [sp, #0x0]
+ str r2, [sp, #0x4]
+ cmp r3, #0x0
+ ldr r4, [sp, #0x70]
+ beq _02093288
+ cmp r3, #0x1
+ bne _02093298
+ ldr r0, [r6, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02093298
+_02093288:
+ add sp, sp, #0x4c
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02093298:
+ ldr r0, [sp, #0x4]
+ mov r1, r6
+ bl FUN_02094B98
+_020932A4: ; 0x020932A4
+ cmp r0, #0x0
+ bge _020932F8
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _020932D4
+ ldr r1, [sp, #0x4]
+ bl FUN_02094E24
+_020932C0: ; 0x020932C0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+_020932D4:
+ cmp r8, #0x0
+ beq _020932E8
+ mov r0, r8
+ mov r1, #0x0
+ bl FUN_02094D7C
+_020932E8:
+ add sp, sp, #0x4c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020932F8:
+ ldr r3, [r4, #0x0]
+ add r0, r4, #0x4
+ mov r2, #0x14
+ mla r1, r3, r2, r0
+ mov r3, #0x0
+ str r3, [r1, #0xc]
+ ldr r5, [r4, #0x0]
+ str r1, [sp, #0x14]
+ add r4, r5, #0x1
+ mla r1, r4, r2, r0
+ add r3, r5, #0x2
+ str r1, [sp, #0x18]
+ mla r1, r3, r2, r0
+ cmp r8, #0x0
+ str r1, [sp, #0x1c]
+ addeq r1, r5, #0x3
+ mlaeq r8, r1, r2, r0
+ mov r0, r6
+ bl FUN_02095188
+ mov r1, r0, lsr #0x1f
+ rsb r0, r1, r0, lsl #0x1b
+ add r0, r1, r0, ror #0x1b
+ rsb r0, r0, #0x20
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x1c]
+ ldr r2, [sp, #0x8]
+ mov r1, r6
+ bl FUN_02094250
+_02093368: ; 0x02093368
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r2, [sp, #0x8]
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x4]
+ ldr r3, [sp, #0x1c]
+ mov r4, #0x0
+ add r2, r2, #0x20
+ str r4, [r3, #0xc]
+ bl FUN_02094250
+_0209339C: ; 0x0209339C
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ moveq r0, r4
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, [sp, #0x18]
+ mov r1, r4
+ str r1, [r0, #0xc]
+ ldr r0, [sp, #0x1c]
+ ldr r0, [r0, #0x4]
+ str r0, [sp, #0x28]
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x28]
+ ldr r4, [r0, #0x4]
+ add r0, sp, #0x38
+ sub r1, r4, r1
+ str r1, [sp, #0x10]
+ bl FUN_0209502C
+ ldr r0, [sp, #0x18]
+ ldr r2, [r0, #0x0]
+ ldr r0, [sp, #0x28]
+ sub r1, r0, #0x1
+ ldr r0, [sp, #0x10]
+ add r0, r2, r0, lsl #0x2
+ str r0, [sp, #0x38]
+ ldr r0, [sp, #0x28]
+ str r0, [sp, #0x3c]
+ ldr r0, [sp, #0x18]
+ ldr r2, [r0, #0x8]
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x1
+ add r0, r2, #0x1
+ str r0, [sp, #0x40]
+ ldr r0, [sp, #0x1c]
+ moveq r5, #0x0
+ ldr r2, [r0, #0x0]
+ ldr r0, [r2, r1, lsl #0x2]
+ str r0, [sp, #0x24]
+ ldrne r0, [sp, #0x28]
+ subne r0, r0, #0x2
+ ldrne r5, [r2, r0, lsl #0x2]
+ ldr r0, [sp, #0x18]
+ ldr r2, [r8, #0x8]
+ ldr r1, [r0, #0x0]
+ sub r0, r4, #0x1
+ add r7, r1, r0, lsl #0x2
+ ldr r0, [sp, #0x10]
+ add r1, r0, #0x1
+ cmp r1, r2
+ movle r0, r8
+ ble _02093470
+ mov r0, r8
+ bl FUN_02094EBC
+_02093470:
+ cmp r0, #0x0
+ beq _020937D4
+ ldr r0, [sp, #0x4]
+ ldr r1, [r6, #0xc]
+ ldr r3, [r0, #0xc]
+ ldr r0, [sp, #0x10]
+ sub r2, r0, #0x1
+ eor r0, r3, r1
+ str r0, [r8, #0xc]
+ ldr r0, [sp, #0x10]
+ str r0, [r8, #0x4]
+ ldr r0, [sp, #0x28]
+ ldr r3, [r8, #0x0]
+ add r1, r0, #0x1
+ add r0, r3, r2, lsl #0x2
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ ldr r0, [r0, #0x8]
+ cmp r1, r0
+ ldrle r0, [sp, #0x14]
+ ble _020934CC
+ ldr r0, [sp, #0x14]
+ bl FUN_02094EBC
+_020934CC:
+ cmp r0, #0x0
+ beq _020937D4
+ ldr r1, [sp, #0x1c]
+ add r0, sp, #0x38
+ bl FUN_02094B98
+_020934E0: ; 0x020934E0
+ cmp r0, #0x0
+ blt _02093520
+ add r0, sp, #0x38
+ ldr r2, [sp, #0x1c]
+ mov r1, r0
+ bl FUN_02093B50
+_020934F8: ; 0x020934F8
+ cmp r0, #0x0
+ beq _020937D4
+ ldr r0, [sp, #0x20]
+ mov r2, #0x1
+ str r2, [r0, #0x0]
+ ldr r0, [r8, #0x4]
+ ldr r1, [r8, #0x0]
+ sub r0, r0, #0x1
+ str r2, [r1, r0, lsl #0x2]
+ b _0209352C
+_02093520:
+ ldr r0, [r8, #0x4]
+ sub r0, r0, #0x1
+ str r0, [r8, #0x4]
+_0209352C:
+ ldr r0, [sp, #0x10]
+ sub r1, r0, #0x1
+ ldr r0, [sp, #0x20]
+ cmp r1, #0x0
+ sub r0, r0, #0x4
+ str r0, [sp, #0x20]
+ mov r0, #0x0
+ str r0, [sp, #0xc]
+ ble _0209377C
+ ldr r8, _020937E4 ; =0x0000FFFF
+ cmp r1, #0x0
+ and r0, r5, r8
+ str r0, [sp, #0x2c]
+ and r0, r8, r5, lsr #0x10
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0x24]
+ and r4, r0, r8
+ ble _0209377C
+ and r9, r8, r0, lsr #0x10
+ mvn r0, #0x0
+ str r0, [sp, #0x34]
+_02093580:
+ ldr r1, [sp, #0x38]
+ ldr r0, [sp, #0x3c]
+ sub r1, r1, #0x4
+ add r0, r0, #0x1
+ str r0, [sp, #0x3c]
+ str r1, [sp, #0x38]
+ ldr r11, [r7, #0x0]
+ ldr r0, [sp, #0x24]
+ ldr r5, [r7, #-0x4]
+ cmp r11, r0
+ ldreq r6, [sp, #0x34]
+ beq _020935C4
+ ldr r2, [sp, #0x24]
+ mov r0, r11
+ mov r1, r5
+ bl FUN_02092260
+ mov r6, r0
+_020935C4:
+ ldr r0, [sp, #0x2c]
+ and r2, r6, r8
+ mul r12, r0, r2
+ ldr r0, [sp, #0x30]
+ and lr, r8, r6, lsr #0x10
+ ldr r1, [sp, #0x30]
+ mul r0, r2, r0
+ mul r3, r1, lr
+ ldr r1, [sp, #0x2c]
+ mul r10, r9, lr
+ mla r1, lr, r1, r0
+ cmp r1, r0
+ addcc r3, r3, #0x10000
+ and r0, r8, r1, lsr #0x10
+ add r3, r3, r0
+ and r0, r1, r8
+ add r12, r12, r0, lsl #0x10
+ cmp r12, r0, lsl #0x10
+ mul r0, r2, r9
+ mul r1, r4, r2
+ mla r2, lr, r4, r0
+ addcc r3, r3, #0x1
+ cmp r2, r0
+ addcc r10, r10, #0x10000
+ and r0, r8, r2, lsr #0x10
+ add r10, r10, r0
+ and r0, r2, r8
+ add r1, r1, r0, lsl #0x10
+ cmp r1, r0, lsl #0x10
+ addcc r10, r10, #0x1
+ sub r1, r5, r1
+ cmp r1, r5
+ addhi r10, r10, #0x1
+ subs r0, r11, r10
+ bne _02093674
+ cmp r3, r1
+ blo _02093674
+ cmp r3, r1
+ bne _0209366C
+ ldr r0, [r7, #-0x8]
+ cmp r12, r0
+ bls _02093674
+_0209366C:
+ sub r6, r6, #0x1
+ b _020935C4
+_02093674:
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x1c]
+ ldr r0, [r0, #0x0]
+ ldr r1, [r1, #0x0]
+ ldr r2, [sp, #0x28]
+ mov r3, r6
+ bl FUN_0209470C
+ ldr r1, [sp, #0x14]
+ ldr r2, [sp, #0x28]
+ ldr r3, [r1, #0x0]
+ ldr r1, [sp, #0x28]
+ str r0, [r3, r2, lsl #0x2]
+ add r1, r1, #0x1
+ cmp r1, #0x0
+ ble _020936D4
+ ldr r0, [sp, #0x14]
+ ldr r2, [r0, #0x0]
+_020936B8:
+ sub r0, r1, #0x1
+ ldr r0, [r2, r0, lsl #0x2]
+ cmp r0, #0x0
+ bne _020936D4
+ sub r1, r1, #0x1
+ cmp r1, #0x0
+ bgt _020936B8
+_020936D4:
+ ldr r0, [sp, #0x14]
+ ldr r2, [sp, #0x14]
+ str r1, [r0, #0x4]
+ add r0, sp, #0x38
+ mov r1, r0
+ ldr r5, [sp, #0x3c]
+ bl FUN_02093A0C
+ ldr r0, [sp, #0x18]
+ ldr r1, [r0, #0x4]
+ ldr r0, [sp, #0x3c]
+ add r0, r1, r0
+ sub r1, r0, r5
+ ldr r0, [sp, #0x18]
+ str r1, [r0, #0x4]
+ ldr r0, [sp, #0x44]
+ cmp r0, #0x0
+ beq _0209374C
+ add r0, sp, #0x38
+ ldr r2, [sp, #0x1c]
+ mov r1, r0
+ sub r6, r6, #0x1
+ ldr r5, [sp, #0x3c]
+ bl FUN_02093DD0
+ ldr r0, [sp, #0x18]
+ ldr r1, [r0, #0x4]
+ ldr r0, [sp, #0x3c]
+ sub r0, r0, r5
+ add r1, r1, r0
+ ldr r0, [sp, #0x18]
+ str r1, [r0, #0x4]
+_0209374C:
+ ldr r0, [sp, #0x20]
+ sub r7, r7, #0x4
+ str r6, [r0], #-0x4
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x10]
+ sub r1, r0, #0x1
+ ldr r0, [sp, #0xc]
+ cmp r0, r1
+ blt _02093580
+_0209377C:
+ ldr r0, [sp, #0x18]
+ bl FUN_02095040
+_02093784: ; 0x02093784
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _020937C4
+ ldr r2, [sp, #0x8]
+ ldr r3, [sp, #0x4]
+ ldr r1, [sp, #0x18]
+ add r2, r2, #0x20
+ ldr r4, [r3, #0xc]
+ bl FUN_02094134
+_020937A8: ; 0x020937A8
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, [sp, #0x0]
+ str r4, [r0, #0xc]
+_020937C4:
+ add sp, sp, #0x4c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020937D4:
+ mov r0, #0x0
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020937E4: .word 0x0000FFFF
+
+ arm_func_start FUN_020937E8
+FUN_020937E8: ; 0x020937E8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r5, [sp, #0x20]
+ mov r7, r2
+ mov r9, r0
+ mov r8, r1
+ mov r6, r3
+ cmp r7, r5
+ bge _02093824
+ mov r1, r7
+ mov r0, r8
+ mov r7, r5
+ mov r8, r6
+ mov r5, r1
+ mov r6, r0
+_02093824:
+ ldr r3, [r6, #0x0]
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ add r4, r9, r7, lsl #0x2
+ bl FUN_0209470C
+ str r0, [r9, r7, lsl #0x2]
+_02093840:
+ sub r0, r5, #0x1
+ cmp r0, #0x0
+ addle sp, sp, #0x4
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r3, [r6, #0x4]
+ mov r1, r8
+ mov r2, r7
+ add r0, r9, #0x4
+ bl FUN_020948AC
+ sub r1, r5, #0x2
+ cmp r1, #0x0
+ addle sp, sp, #0x4
+ str r0, [r4, #0x4]
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r3, [r6, #0x8]
+ mov r1, r8
+ mov r2, r7
+ add r0, r9, #0x8
+ bl FUN_020948AC
+ sub r1, r5, #0x3
+ cmp r1, #0x0
+ addle sp, sp, #0x4
+ str r0, [r4, #0x8]
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r3, [r6, #0xc]
+ mov r1, r8
+ mov r2, r7
+ add r0, r9, #0xc
+ bl FUN_020948AC
+ sub r5, r5, #0x4
+ cmp r5, #0x0
+ addle sp, sp, #0x4
+ str r0, [r4, #0xc]
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r3, [r6, #0x10]
+ mov r1, r8
+ mov r2, r7
+ add r0, r9, #0x10
+ bl FUN_020948AC
+ str r0, [r4, #0x10]
+ add r4, r4, #0x10
+ add r9, r9, #0x10
+ add r6, r6, #0x10
+ b _02093840
+_02093900: ; 0x02093900
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_0209390C
+FUN_0209390C:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldr r6, [r9, #0x4]
+ mov r8, r2
+ mov r10, r0
+ cmp r6, #0x0
+ ldr r5, [r8, #0x4]
+ beq _02093938
+ cmp r5, #0x0
+ bne _02093954
+_02093938:
+ mov r0, r10
+ mov r1, #0x0
+ bl FUN_02094D7C
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02093954:
+ ldr r1, [r9, #0xc]
+ ldr r0, [r8, #0xc]
+ cmp r10, r9
+ add r7, r6, r5
+ eor r11, r1, r0
+ beq _02093974
+ cmp r10, r8
+ bne _0209398C
+_02093974:
+ ldr r0, [r3, #0x0]
+ add r2, r3, #0x4
+ add r1, r0, #0x1
+ mov r0, #0x14
+ mla r4, r1, r0, r2
+ b _02093990
+_0209398C:
+ mov r4, r10
+_02093990:
+ ldr r0, [r4, #0x8]
+ cmp r7, r0
+ movle r0, r4
+ ble _020939AC
+ mov r0, r4
+ mov r1, r7
+ bl FUN_02094EBC
+_020939AC:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ str r7, [r4, #0x4]
+ str r5, [sp, #0x0]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r9, #0x0]
+ ldr r3, [r8, #0x0]
+ mov r2, r6
+ bl FUN_020937E8
+ mov r0, r4
+ str r11, [r10, #0xc]
+ bl FUN_02095040
+ cmp r10, r4
+ beq _020939FC
+ mov r0, r10
+ mov r1, r4
+ bl FUN_02094E24
+_020939FC:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02093A0C
+FUN_02093A0C: ; 0x02093A0C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldr r1, [r6, #0xc]
+ mov r3, #0x0
+ mov r7, r0
+ mov r5, r2
+ mov r4, r3
+ cmp r1, #0x0
+ beq _02093A54
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ movne r0, r6
+ moveq r3, #0x1
+ movne r6, r5
+ movne r5, r0
+ moveq r4, r3
+ b _02093A60
+_02093A54:
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ movne r3, #0x1
+_02093A60:
+ cmp r3, #0x0
+ beq _02093A94
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_02093CB4
+_02093A78: ; 0x02093A78
+ cmp r0, #0x0
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ strne r4, [r7, #0xc]
+ movne r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_02093A94:
+ ldr r0, [r5, #0x4]
+ ldr r1, [r6, #0x4]
+ cmp r1, r0
+ movle r1, r0
+ ldr r0, [r7, #0x8]
+ cmp r1, r0
+ movle r0, r7
+ ble _02093ABC
+ mov r0, r7
+ bl FUN_02094EBC
+_02093ABC:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ mov r1, r5
+ bl FUN_02094B98
+_02093ADC: ; 0x02093ADC
+ cmp r0, #0x0
+ bge _02093B14
+ mov r0, r7
+ mov r1, r5
+ mov r2, r6
+ bl FUN_02093B50
+_02093AF4: ; 0x02093AF4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, #0x1
+ str r0, [r7, #0xc]
+ b _02093B40
+_02093B14:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_02093B50
+_02093B24: ; 0x02093B24
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, #0x0
+ str r0, [r7, #0xc]
+_02093B40:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02093B50
+FUN_02093B50:
+ stmdb sp!, {r4-r10,lr}
+ mov r8, r1
+ mov r7, r2
+ ldr r5, [r7, #0x4]
+ ldr r6, [r8, #0x4]
+ mov r4, r0
+ cmp r6, r5
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r10,lr}
+ bxlt lr
+ ldr r1, [r4, #0x8]
+ cmp r6, r1
+ ble _02093B8C
+ mov r1, r6
+ bl FUN_02094EBC
+_02093B8C:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ mov r3, #0x0
+ mov r0, r3
+ cmp r5, #0x0
+ ldr r2, [r8, #0x0]
+ ldr r9, [r7, #0x0]
+ ldr r1, [r4, #0x0]
+ ble _02093C0C
+ mov r12, r3
+ mov r7, r3
+ mov lr, #0x1
+_02093BC4:
+ cmp r3, #0x0
+ ldr r10, [r2], #0x4
+ ldr r8, [r9], #0x4
+ beq _02093BEC
+ cmp r10, r8
+ movls r3, lr
+ sub r8, r10, r8
+ movhi r3, r12
+ sub r10, r8, #0x1
+ b _02093BFC
+_02093BEC:
+ cmp r10, r8
+ movcc r3, lr
+ movcs r3, r7
+ sub r10, r10, r8
+_02093BFC:
+ add r0, r0, #0x1
+ cmp r0, r5
+ str r10, [r1], #0x4
+ blt _02093BC4
+_02093C0C:
+ cmp r3, #0x0
+ beq _02093C3C
+ cmp r0, r6
+ bge _02093C3C
+_02093C1C:
+ ldr r5, [r2], #0x4
+ add r0, r0, #0x1
+ sub r3, r5, #0x1
+ cmp r5, r3
+ str r3, [r1], #0x4
+ bhi _02093C3C
+ cmp r0, r6
+ blt _02093C1C
+_02093C3C:
+ cmp r1, r2
+ beq _02093C9C
+_02093C44:
+ cmp r0, r6
+ bge _02093C9C
+ ldr r5, [r2, #0x0]
+ add r3, r0, #0x1
+ str r5, [r1, #0x0]
+ cmp r3, r6
+ bge _02093C9C
+ ldr r5, [r2, #0x4]
+ add r3, r0, #0x2
+ str r5, [r1, #0x4]
+ cmp r3, r6
+ bge _02093C9C
+ ldr r5, [r2, #0x8]
+ add r3, r0, #0x3
+ str r5, [r1, #0x8]
+ cmp r3, r6
+ ldrlt r3, [r2, #0xc]
+ add r0, r0, #0x4
+ strlt r3, [r1, #0xc]
+ addlt r2, r2, #0x10
+ addlt r1, r1, #0x10
+ blt _02093C44
+_02093C9C:
+ mov r0, r4
+ str r6, [r4, #0x4]
+ bl FUN_02095040
+ mov r0, #0x1
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_02093CB4
+FUN_02093CB4:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r8, r2
+ ldr r2, [r4, #0x4]
+ ldr r1, [r8, #0x4]
+ mov r9, r0
+ cmp r2, r1
+ movlt r0, r4
+ movlt r4, r8
+ movlt r8, r0
+ ldr r6, [r4, #0x4]
+ ldr r0, [r9, #0x8]
+ add r1, r6, #0x1
+ cmp r1, r0
+ ldr r7, [r8, #0x4]
+ movle r0, r9
+ ble _02093D04
+ mov r0, r9
+ bl FUN_02094EBC
+_02093D04:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ str r6, [r9, #0x4]
+ ldr r5, [r4, #0x0]
+ ldr r4, [r9, #0x0]
+ ldr r2, [r8, #0x0]
+ mov r0, r4
+ mov r1, r5
+ mov r3, r7
+ bl FUN_02094468
+_02093D38: ; 0x02093D38
+ cmp r0, #0x0
+ add r4, r4, r7, lsl #0x2
+ add r5, r5, r7, lsl #0x2
+ beq _02093D9C
+ cmp r7, r6
+ bge _02093D7C
+_02093D50:
+ ldr r2, [r5], #0x4
+ mov r3, r4
+ add r1, r2, #0x1
+ str r1, [r4], #0x4
+ ldr r1, [r3, #0x0]
+ add r7, r7, #0x1
+ cmp r1, r2
+ movcs r0, #0x0
+ bhs _02093D7C
+ cmp r7, r6
+ blt _02093D50
+_02093D7C:
+ cmp r7, r6
+ blt _02093D9C
+ cmp r0, #0x0
+ movne r0, #0x1
+ strne r0, [r4], #0x4
+ ldrne r0, [r9, #0x4]
+ addne r0, r0, #0x1
+ strne r0, [r9, #0x4]
+_02093D9C:
+ cmp r4, r5
+ beq _02093DC0
+ cmp r7, r6
+ bge _02093DC0
+_02093DAC:
+ ldr r0, [r5], #0x4
+ add r7, r7, #0x1
+ cmp r7, r6
+ str r0, [r4], #0x4
+ blt _02093DAC
+_02093DC0:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_02093DD0
+FUN_02093DD0: ; 0x02093DD0
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, r2
+ ldr r2, [r5, #0xc]
+ ldr r1, [r4, #0xc]
+ mov r6, r0
+ eors r0, r2, r1
+ beq _02093E74
+ cmp r2, #0x0
+ movne r0, r5
+ movne r5, r4
+ movne r4, r0
+ mov r0, r5
+ mov r1, r4
+ bl FUN_02094B98
+_02093E0C: ; 0x02093E0C
+ cmp r0, #0x0
+ bge _02093E40
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_02093B50
+_02093E24: ; 0x02093E24
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, #0x1
+ str r0, [r6, #0xc]
+ b _02093E68
+_02093E40:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_02093B50
+_02093E50: ; 0x02093E50
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, #0x0
+ str r0, [r6, #0xc]
+_02093E68:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02093E74:
+ cmp r2, #0x0
+ movne r0, #0x1
+ strne r0, [r6, #0xc]
+ moveq r0, #0x0
+ streq r0, [r6, #0xc]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_02093CB4
+_02093E98: ; 0x02093E98
+ cmp r0, #0x0
+ moveq r0, #0x0
+ movne r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02093EAC
+FUN_02093EAC: ; 0x02093EAC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r4, r1
+ mov r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [r5, #0xc]
+ cmp r2, #0x0
+ beq _02093EF8
+ mov r2, #0x0
+ str r2, [r5, #0xc]
+ bl FUN_0209400C
+ mov r1, #0x1
+ add sp, sp, #0x4
+ str r1, [r5, #0xc]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02093EF8:
+ ldr r1, [r5, #0x4]
+ cmp r1, #0x1
+ bgt _02093F9C
+ cmp r1, #0x0
+ bne _02093F54
+ ldr r1, [r5, #0x8]
+ cmp r1, #0x1
+ bge _02093F20
+ mov r1, #0x1
+ bl FUN_02094EBC
+_02093F20:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r5, #0x0]
+ mov r0, #0x1
+ str r4, [r1, #0x0]
+ str r0, [r5, #0xc]
+ add sp, sp, #0x4
+ str r0, [r5, #0x4]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02093F54:
+ ldr r2, [r5, #0x0]
+ ldr r1, [r2, #0x0]
+ cmp r1, r4
+ moveq r0, #0x0
+ streq r0, [r5, #0x4]
+ beq _02093F8C
+ cmp r1, r4
+ subhi r0, r1, r4
+ strhi r0, [r2, #0x0]
+ movls r0, #0x1
+ strls r0, [r5, #0xc]
+ ldrls r0, [r5, #0x0]
+ subls r1, r4, r1
+ strls r1, [r0, #0x0]
+_02093F8C:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02093F9C:
+ mov r0, #0x0
+ mov r1, #0x1
+_02093FA4:
+ ldr r12, [r5, #0x0]
+ mov r3, r0, lsl #0x2
+ ldr r2, [r12, r0, lsl #0x2]
+ cmp r2, r4
+ ldrcs r1, [r12, r3]
+ subcs r1, r1, r4
+ strcs r1, [r12, r3]
+ bhs _02093FDC
+ ldr r2, [r12, r3]
+ add r0, r0, #0x1
+ sub r2, r2, r4
+ mov r4, r1
+ str r2, [r12, r3]
+ b _02093FA4
+_02093FDC:
+ ldr r1, [r5, #0x0]
+ ldr r1, [r1, r3]
+ cmp r1, #0x0
+ bne _02093FFC
+ ldr r1, [r5, #0x4]
+ sub r1, r1, #0x1
+ cmp r0, r1
+ streq r1, [r5, #0x4]
+_02093FFC:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209400C
+FUN_0209400C:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r4, r1
+ mov r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [r5, #0xc]
+ cmp r2, #0x0
+ beq _020940B4
+ ldr r2, [r5, #0x4]
+ cmp r2, #0x1
+ ble _02094064
+ mov r2, #0x0
+ str r2, [r5, #0xc]
+ bl FUN_02093EAC
+ mov r1, #0x1
+ add sp, sp, #0x4
+ str r1, [r5, #0xc]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02094064:
+ ldr r2, [r5, #0x0]
+ ldr r1, [r2, #0x0]
+ cmp r1, r4
+ subhi r0, r1, r4
+ strhi r0, [r2, #0x0]
+ bhi _020940A4
+ cmp r1, r4
+ movcs r0, #0x0
+ strcs r0, [r5, #0xc]
+ strcs r0, [r5, #0x4]
+ bhs _020940A4
+ mov r0, #0x0
+ str r0, [r5, #0xc]
+ ldr r0, [r5, #0x0]
+ sub r1, r4, r1
+ str r1, [r0, #0x0]
+_020940A4:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020940B4:
+ ldr r1, [r5, #0x4]
+ ldr r2, [r5, #0x8]
+ add r1, r1, #0x1
+ cmp r1, r2
+ ble _020940CC
+ bl FUN_02094EBC
+_020940CC:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r5, #0x0]
+ ldr r0, [r5, #0x4]
+ mov r3, #0x0
+ str r3, [r1, r0, lsl #0x2]
+ mov r0, #0x1
+_020940F4:
+ ldr r2, [r5, #0x0]
+ ldr r1, [r2, r3, lsl #0x2]
+ add r1, r4, r1
+ cmp r4, r1
+ str r1, [r2, r3, lsl #0x2]
+ movhi r4, r0
+ addhi r3, r3, #0x1
+ bhi _020940F4
+ ldr r0, [r5, #0x4]
+ cmp r3, r0
+ addge r0, r0, #0x1
+ strge r0, [r5, #0x4]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02094134
+FUN_02094134:
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r1, r2, asr #0x4
+ mov r3, r2, lsr #0x1f
+ add r1, r2, r1, lsr #0x1b
+ rsb r2, r3, r2, lsl #0x1b
+ add r4, r3, r2, ror #0x1b
+ ldr r2, [r7, #0x4]
+ mov r6, r1, asr #0x5
+ mov r8, r0
+ cmp r6, r2
+ rsb r5, r4, #0x20
+ ble _0209417C
+ mov r1, #0x0
+ bl FUN_02094D7C
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209417C:
+ cmp r8, r7
+ beq _020941B4
+ sub r1, r2, r6
+ ldr r2, [r8, #0x8]
+ add r1, r1, #0x2
+ cmp r1, r2
+ ble _0209419C
+ bl FUN_02094EBC
+_0209419C:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r7, #0xc]
+ str r0, [r8, #0xc]
+_020941B4:
+ ldr r0, [r7, #0x0]
+ ldr r1, [r7, #0x4]
+ add r2, r0, r6, lsl #0x2
+ ldr r0, [r8, #0x0]
+ sub r7, r1, r6
+ mov r6, r2
+ str r7, [r8, #0x4]
+ cmp r4, #0x0
+ bne _020941FC
+ add r2, r7, #0x1
+ cmp r2, #0x0
+ ble _0209423C
+_020941E4:
+ ldr r1, [r6], #0x4
+ sub r2, r2, #0x1
+ cmp r2, #0x0
+ str r1, [r0], #0x4
+ bgt _020941E4
+ b _0209423C
+_020941FC:
+ cmp r7, #0x1
+ add r6, r2, #0x4
+ ldr r3, [r2, #0x0]
+ mov r2, #0x1
+ ble _0209422C
+_02094210:
+ mov r1, r3, lsr r4
+ ldr r3, [r6], #0x4
+ add r2, r2, #0x1
+ orr r1, r1, r3, lsl r5
+ cmp r2, r7
+ str r1, [r0], #0x4
+ blt _02094210
+_0209422C:
+ mov r1, r3, lsr r4
+ str r1, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+_0209423C:
+ mov r0, r8
+ bl FUN_02095040
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_02094250
+FUN_02094250:
+ stmdb sp!, {r4-r10,lr}
+ mov r4, r1
+ mov r7, r2
+ mov r1, r7, asr #0x4
+ mov r5, r0
+ add r2, r7, r1, lsr #0x1b
+ ldr r1, [r4, #0x4]
+ ldr r3, [r5, #0x8]
+ add r1, r1, r2, asr #0x5
+ add r1, r1, #0x1
+ cmp r1, r3
+ mov r6, r2, asr #0x5
+ ble _02094288
+ bl FUN_02094EBC
+_02094288:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ ldr r0, [r4, #0xc]
+ mov r1, r7, lsr #0x1f
+ str r0, [r5, #0xc]
+ ldr r3, [r4, #0x4]
+ rsb r0, r1, r7, lsl #0x1b
+ adds r12, r1, r0, ror #0x1b
+ ldr r2, [r4, #0x0]
+ ldr r0, [r5, #0x0]
+ add r1, r3, r6
+ mov r3, #0x0
+ str r3, [r0, r1, lsl #0x2]
+ rsb r3, r12, #0x20
+ bne _020942F0
+ ldr r1, [r4, #0x4]
+ subs r7, r1, #0x1
+ bmi _02094324
+_020942D8:
+ ldr r3, [r2, r7, lsl #0x2]
+ add r1, r6, r7
+ str r3, [r0, r1, lsl #0x2]
+ subs r7, r7, #0x1
+ bpl _020942D8
+ b _02094324
+_020942F0:
+ ldr r1, [r4, #0x4]
+ subs r1, r1, #0x1
+ bmi _02094324
+_020942FC:
+ add r9, r6, r1
+ add r8, r9, #0x1
+ ldr r10, [r2, r1, lsl #0x2]
+ ldr lr, [r0, r8, lsl #0x2]
+ mov r7, r10, lsl r12
+ orr lr, lr, r10, lsr r3
+ str lr, [r0, r8, lsl #0x2]
+ str r7, [r0, r9, lsl #0x2]
+ subs r1, r1, #0x1
+ bpl _020942FC
+_02094324:
+ mov r2, r6, lsl #0x2
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldr r1, [r4, #0x4]
+ mov r0, r5
+ add r1, r1, r6
+ add r1, r1, #0x1
+ str r1, [r5, #0x4]
+ bl FUN_02095040
+ mov r0, #0x1
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_02094354
+FUN_02094354: ; 0x02094354
+ stmdb sp!, {r4-r10,lr}
+ cmp r3, #0x0
+ movle r0, #0x0
+ ldmleia sp!, {r4-r10,lr}
+ bxle lr
+ mov r6, #0x0
+ mov r4, r6
+ mov lr, r6
+ mov r12, r6
+ mov r7, r6
+ mov r5, #0x1
+_02094380:
+ ldr r10, [r1, #0x0]
+ ldr r9, [r2, #0x0]
+ sub r8, r10, r9
+ sub r8, r8, r6
+ str r8, [r0, #0x0]
+ cmp r10, r9
+ beq _020943A8
+ cmp r10, r9
+ movcc r6, r5
+ movcs r6, r4
+_020943A8:
+ sub r8, r3, #0x1
+ cmp r8, #0x0
+ ble _0209445C
+ ldr r10, [r1, #0x4]
+ ldr r9, [r2, #0x4]
+ sub r8, r10, r9
+ sub r8, r8, r6
+ str r8, [r0, #0x4]
+ cmp r10, r9
+ beq _020943DC
+ cmp r10, r9
+ movcc r6, r5
+ movcs r6, lr
+_020943DC:
+ sub r8, r3, #0x2
+ cmp r8, #0x0
+ ble _0209445C
+ ldr r10, [r1, #0x8]
+ ldr r9, [r2, #0x8]
+ sub r8, r10, r9
+ sub r8, r8, r6
+ str r8, [r0, #0x8]
+ cmp r10, r9
+ beq _02094410
+ cmp r10, r9
+ movcc r6, r5
+ movcs r6, r12
+_02094410:
+ sub r8, r3, #0x3
+ cmp r8, #0x0
+ ble _0209445C
+ ldr r10, [r1, #0xc]
+ ldr r9, [r2, #0xc]
+ sub r8, r10, r9
+ sub r8, r8, r6
+ str r8, [r0, #0xc]
+ cmp r10, r9
+ beq _02094444
+ cmp r10, r9
+ movcc r6, r5
+ movcs r6, r7
+_02094444:
+ sub r3, r3, #0x4
+ cmp r3, #0x0
+ addgt r1, r1, #0x10
+ addgt r2, r2, #0x10
+ addgt r0, r0, #0x10
+ bgt _02094380
+_0209445C:
+ mov r0, r6
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start FUN_02094468
+FUN_02094468:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ cmp r3, #0x0
+ addle sp, sp, #0xc
+ movle r0, #0x0
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ mov r12, #0x0
+ mov r7, r12
+ mov r6, r12
+ mov r5, r12
+ mov r4, r12
+ mov lr, r12
+ mov r11, r12
+ str r12, [sp, #0x0]
+ str r12, [sp, #0x4]
+ mov r8, #0x1
+_020944AC:
+ ldr r9, [r1, #0x0]
+ add r10, r9, r12
+ ldr r9, [r2, #0x0]
+ cmp r10, r12
+ movcc r12, r8
+ add r9, r10, r9
+ movcs r12, r7
+ cmp r9, r10
+ movcc r10, r8
+ movcs r10, r6
+ str r9, [r0, #0x0]
+ sub r9, r3, #0x1
+ add r12, r12, r10
+ cmp r9, #0x0
+ ble _020945A8
+ ldr r9, [r1, #0x4]
+ ldr r10, [r2, #0x4]
+ add r9, r9, r12
+ cmp r9, r12
+ movcc r12, r8
+ add r10, r9, r10
+ movcs r12, r5
+ cmp r10, r9
+ movcc r9, r8
+ movcs r9, r4
+ add r12, r12, r9
+ sub r9, r3, #0x2
+ str r10, [r0, #0x4]
+ cmp r9, #0x0
+ ble _020945A8
+ ldr r9, [r1, #0x8]
+ ldr r10, [r2, #0x8]
+ add r9, r9, r12
+ cmp r9, r12
+ movcc r12, r8
+ add r10, r9, r10
+ movcs r12, lr
+ cmp r10, r9
+ movcc r9, r8
+ movcs r9, r11
+ add r12, r12, r9
+ sub r9, r3, #0x3
+ str r10, [r0, #0x8]
+ cmp r9, #0x0
+ ble _020945A8
+ ldr r9, [r1, #0xc]
+ ldr r10, [r2, #0xc]
+ add r9, r9, r12
+ cmp r9, r12
+ movcc r12, r8
+ add r10, r9, r10
+ ldrcs r12, [sp, #0x0]
+ cmp r10, r9
+ movcc r9, r8
+ ldrcs r9, [sp, #0x4]
+ sub r3, r3, #0x4
+ cmp r3, #0x0
+ str r10, [r0, #0xc]
+ add r12, r12, r9
+ addgt r1, r1, #0x10
+ addgt r2, r2, #0x10
+ addgt r0, r0, #0x10
+ bgt _020944AC
+_020945A8:
+ mov r0, r12
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_020945B8
+FUN_020945B8: ; 0x020945B8
+ stmdb sp!, {r4-r8,lr}
+ cmp r2, #0x0
+ ldmleia sp!, {r4-r8,lr}
+ bxle lr
+ mov r3, #0x8000
+ ldr lr, _02094708 ; =0x0000FFFF
+ rsb r12, r3, #0x0
+_020945D4:
+ ldr r5, [r1, #0x0]
+ mov r3, #0x8000
+ and r4, r5, lr
+ and r7, lr, r5, lsr #0x10
+ mul r6, r4, r7
+ mul r5, r4, r4
+ and r4, r6, lr
+ add r8, r5, r4, lsl #0x11
+ rsb r3, r3, #0x0
+ mul r5, r7, r7
+ and r3, r6, r3
+ add r3, r5, r3, lsr #0xf
+ cmp r8, r4, lsl #0x11
+ addcc r3, r3, #0x1
+ str r8, [r0, #0x0]
+ str r3, [r0, #0x4]
+ subs r3, r2, #0x1
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r4, [r1, #0x4]
+ and r7, lr, r4, lsr #0x10
+ and r3, r4, lr
+ mul r6, r3, r7
+ mul r4, r3, r3
+ and r3, r6, lr
+ add r8, r4, r3, lsl #0x11
+ mul r5, r7, r7
+ and r4, r6, r12
+ cmp r8, r3, lsl #0x11
+ add r3, r5, r4, lsr #0xf
+ addcc r3, r3, #0x1
+ str r8, [r0, #0x8]
+ str r3, [r0, #0xc]
+ subs r3, r2, #0x2
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r5, [r1, #0x8]
+ mov r3, #0x8000
+ and r4, r5, lr
+ and r7, lr, r5, lsr #0x10
+ mul r6, r4, r7
+ mul r5, r4, r4
+ and r4, r6, lr
+ add r8, r5, r4, lsl #0x11
+ rsb r3, r3, #0x0
+ mul r5, r7, r7
+ and r3, r6, r3
+ add r3, r5, r3, lsr #0xf
+ cmp r8, r4, lsl #0x11
+ addcc r3, r3, #0x1
+ str r8, [r0, #0x10]
+ str r3, [r0, #0x14]
+ subs r3, r2, #0x3
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r5, [r1, #0xc]
+ mov r3, #0x8000
+ and r4, r5, lr
+ and r7, lr, r5, lsr #0x10
+ mul r6, r4, r7
+ mul r5, r4, r4
+ and r4, r6, lr
+ add r8, r5, r4, lsl #0x11
+ rsb r3, r3, #0x0
+ mul r5, r7, r7
+ and r3, r6, r3
+ add r3, r5, r3, lsr #0xf
+ cmp r8, r4, lsl #0x11
+ addcc r3, r3, #0x1
+ str r8, [r0, #0x18]
+ subs r2, r2, #0x4
+ str r3, [r0, #0x1c]
+ addne r1, r1, #0x10
+ addne r0, r0, #0x20
+ bne _020945D4
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_02094708: .word 0x0000FFFF
+
+ arm_func_start FUN_0209470C
+FUN_0209470C: ; 0x0209470C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ mov r4, #0x0
+ addle sp, sp, #0x4
+ movle r0, r4
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r5, _020948A8 ; =0x0000FFFF
+ and lr, r3, r5
+ and r12, r5, r3, lsr #0x10
+_02094738:
+ ldr r3, [r1, #0x0]
+ and r7, r5, r3, lsr #0x10
+ mul r6, lr, r7
+ and r3, r3, r5
+ mla r9, r12, r3, r6
+ mul r8, r3, lr
+ mul r3, r7, r12
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r3, r3, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r3, r3, r7
+ add r6, r8, r4
+ addcc r3, r3, #0x1
+ cmp r6, r4
+ addcc r3, r3, #0x1
+ str r6, [r0, #0x0]
+ mov r4, r3
+ subs r6, r2, #0x1
+ beq _02094898
+ ldr r4, [r1, #0x4]
+ and r7, r5, r4, lsr #0x10
+ mul r6, lr, r7
+ and r4, r4, r5
+ mla r9, r12, r4, r6
+ mul r8, r4, lr
+ mul r4, r7, r12
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r4, r4, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r4, r4, r7
+ add r6, r8, r3
+ addcc r4, r4, #0x1
+ cmp r6, r3
+ addcc r4, r4, #0x1
+ str r6, [r0, #0x4]
+ subs r3, r2, #0x2
+ beq _02094898
+ ldr r3, [r1, #0x8]
+ and r7, r5, r3, lsr #0x10
+ mul r6, lr, r7
+ and r3, r3, r5
+ mla r9, r12, r3, r6
+ mul r8, r3, lr
+ mul r3, r7, r12
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r3, r3, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r3, r3, r7
+ add r6, r8, r4
+ addcc r3, r3, #0x1
+ cmp r6, r4
+ addcc r3, r3, #0x1
+ str r6, [r0, #0x8]
+ mov r4, r3
+ subs r6, r2, #0x3
+ beq _02094898
+ ldr r4, [r1, #0xc]
+ and r7, r5, r4, lsr #0x10
+ mul r6, lr, r7
+ and r4, r4, r5
+ mla r9, r12, r4, r6
+ mul r8, r4, lr
+ mul r4, r7, r12
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r4, r4, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r4, r4, r7
+ add r6, r8, r3
+ addcc r4, r4, #0x1
+ cmp r6, r3
+ addcc r4, r4, #0x1
+ subs r2, r2, #0x4
+ str r6, [r0, #0xc]
+ addne r1, r1, #0x10
+ addne r0, r0, #0x10
+ bne _02094738
+_02094898:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020948A8: .word 0x0000FFFF
+
+ arm_func_start FUN_020948AC
+FUN_020948AC: ; 0x020948AC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ mov r12, #0x0
+ addle sp, sp, #0x4
+ movle r0, r12
+ ldmleia sp!, {r4-r9,lr}
+ bxle lr
+ ldr r5, _02094A88 ; =0x0000FFFF
+ and r4, r3, r5
+ and lr, r5, r3, lsr #0x10
+_020948D8:
+ ldr r3, [r1, #0x0]
+ and r7, r5, r3, lsr #0x10
+ mul r6, r4, r7
+ and r3, r3, r5
+ mla r9, lr, r3, r6
+ mul r8, r3, r4
+ mul r3, r7, lr
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r3, r3, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r3, r3, r7
+ ldr r6, [r0, #0x0]
+ addcc r3, r3, #0x1
+ add r7, r8, r12
+ cmp r7, r12
+ add r7, r7, r6
+ addcc r3, r3, #0x1
+ cmp r7, r6
+ addcc r3, r3, #0x1
+ mov r12, r3
+ str r7, [r0, #0x0]
+ subs r6, r2, #0x1
+ beq _02094A78
+ ldr r12, [r1, #0x4]
+ and r7, r5, r12, lsr #0x10
+ mul r6, r4, r7
+ and r12, r12, r5
+ mla r9, lr, r12, r6
+ mul r8, r12, r4
+ mul r12, r7, lr
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r12, r12, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r12, r12, r7
+ add r6, r8, r3
+ addcc r12, r12, #0x1
+ cmp r6, r3
+ ldr r3, [r0, #0x4]
+ addcc r12, r12, #0x1
+ add r6, r6, r3
+ cmp r6, r3
+ addcc r12, r12, #0x1
+ str r6, [r0, #0x4]
+ subs r3, r2, #0x2
+ beq _02094A78
+ ldr r3, [r1, #0x8]
+ and r7, r5, r3, lsr #0x10
+ mul r6, r4, r7
+ and r3, r3, r5
+ mla r9, lr, r3, r6
+ mul r8, r3, r4
+ mul r3, r7, lr
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r3, r3, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r3, r3, r7
+ ldr r6, [r0, #0x8]
+ addcc r3, r3, #0x1
+ add r7, r8, r12
+ cmp r7, r12
+ add r7, r7, r6
+ addcc r3, r3, #0x1
+ cmp r7, r6
+ addcc r3, r3, #0x1
+ mov r12, r3
+ str r7, [r0, #0x8]
+ subs r6, r2, #0x3
+ beq _02094A78
+ ldr r12, [r1, #0xc]
+ and r7, r5, r12, lsr #0x10
+ mul r6, r4, r7
+ and r12, r12, r5
+ mla r9, lr, r12, r6
+ mul r8, r12, r4
+ mul r12, r7, lr
+ cmp r9, r6
+ and r6, r9, r5
+ addcc r12, r12, #0x10000
+ and r7, r5, r9, lsr #0x10
+ add r8, r8, r6, lsl #0x10
+ cmp r8, r6, lsl #0x10
+ add r12, r12, r7
+ add r6, r8, r3
+ addcc r12, r12, #0x1
+ cmp r6, r3
+ ldr r3, [r0, #0xc]
+ addcc r12, r12, #0x1
+ add r6, r6, r3
+ cmp r6, r3
+ addcc r12, r12, #0x1
+ subs r2, r2, #0x4
+ str r6, [r0, #0xc]
+ addne r1, r1, #0x10
+ addne r0, r0, #0x10
+ bne _020948D8
+_02094A78:
+ mov r0, r12
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_02094A88: .word 0x0000FFFF
+
+ arm_func_start FUN_02094A8C
+FUN_02094A8C:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ addlt sp, sp, #0x4
+ movlt r0, #0x0
+ ldmltia sp!, {lr}
+ bxlt lr
+ mov r2, r1, asr #0x4
+ add r2, r1, r2, lsr #0x1b
+ mov r3, r1, lsr #0x1f
+ ldr r12, [r0, #0x4]
+ mov lr, r2, asr #0x5
+ cmp r12, lr
+ rsb r1, r3, r1, lsl #0x1b
+ addle sp, sp, #0x4
+ add r2, r3, r1, ror #0x1b
+ movle r0, #0x0
+ ldmleia sp!, {lr}
+ bxle lr
+ ldr r1, [r0, #0x0]
+ mov r0, #0x1
+ mov r2, r0, lsl r2
+ ldr r1, [r1, lr, lsl #0x2]
+ ands r1, r2, r1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_02094AFC
+FUN_02094AFC:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r2, r1, asr #0x4
+ add r2, r1, r2, lsr #0x1b
+ mov r3, r1, lsr #0x1f
+ rsb r1, r3, r1, lsl #0x1b
+ ldr r4, [r6, #0x4]
+ mov r5, r2, asr #0x5
+ cmp r4, r5
+ add r4, r3, r1, ror #0x1b
+ bgt _02094B7C
+ ldr r2, [r6, #0x8]
+ add r1, r5, #0x1
+ cmp r1, r2
+ ble _02094B3C
+ bl FUN_02094EBC
+_02094B3C:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r3, [r6, #0x4]
+ add r2, r5, #0x1
+ cmp r3, r2
+ bge _02094B74
+ mov r1, #0x0
+_02094B60:
+ ldr r0, [r6, #0x0]
+ str r1, [r0, r3, lsl #0x2]
+ add r3, r3, #0x1
+ cmp r3, r2
+ blt _02094B60
+_02094B74:
+ add r0, r5, #0x1
+ str r0, [r6, #0x4]
+_02094B7C:
+ ldr r2, [r6, #0x0]
+ mov r0, #0x1
+ ldr r1, [r2, r5, lsl #0x2]
+ orr r1, r1, r0, lsl r4
+ str r1, [r2, r5, lsl #0x2]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02094B98
+FUN_02094B98:
+ ldr r3, [r0, #0x4]
+ ldr r2, [r1, #0x4]
+ subs r2, r3, r2
+ movne r0, r2
+ bxne lr
+ subs r2, r3, #0x1
+ ldr r12, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ bmi _02094BE4
+_02094BBC:
+ ldr r1, [r12, r2, lsl #0x2]
+ ldr r0, [r3, r2, lsl #0x2]
+ cmp r1, r0
+ beq _02094BDC
+ cmp r1, r0
+ movhi r0, #0x1
+ mvnls r0, #0x0
+ bx lr
+_02094BDC:
+ subs r2, r2, #0x1
+ bpl _02094BBC
+_02094BE4:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_02094BEC
+FUN_02094BEC: ; 0x02094BEC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_02095188
+ add r1, r0, #0x7
+ mov r0, r1, asr #0x2
+ add r0, r1, r0, lsr #0x1d
+ mov r0, r0, asr #0x3
+ cmp r0, #0x0
+ addle sp, sp, #0x4
+ sub r12, r0, #0x1
+ ldmleia sp!, {r4-r5,lr}
+ bxle lr
+_02094C24:
+ mov r3, r12, lsr #0x1f
+ mov r1, r12, asr #0x1
+ rsb r2, r3, r12, lsl #0x1e
+ add r1, r12, r1, lsr #0x1e
+ add r2, r3, r2, ror #0x1e
+ ldr r3, [r5, #0x0]
+ mov r1, r1, asr #0x2
+ ldr r3, [r3, r1, lsl #0x2]
+ mov r1, r2, lsl #0x3
+ mov r1, r3, lsr r1
+ cmp r12, #0x0
+ strb r1, [r4], #0x1
+ sub r12, r12, #0x1
+ bgt _02094C24
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02094C68
+FUN_02094C68:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs r5, r2
+ mov r7, r0
+ mov r6, r1
+ bne _02094C88
+ bl FUN_02094FE0
+ mov r5, r0
+_02094C88:
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r6, #0x0
+ mov r4, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, r5
+ streq r4, [r5, #0x4]
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ add r0, r6, #0x2
+ mov r2, r0, lsl #0x3
+ add r1, r2, #0x1f
+ mov r0, r1, asr #0x4
+ add r0, r1, r0, lsr #0x1b
+ ldr r1, [r5, #0x8]
+ mov r0, r0, asr #0x5
+ cmp r0, r1
+ movle r0, r5
+ ble _02094CF8
+ mov r0, r2, asr #0x4
+ add r0, r2, r0, lsr #0x1b
+ mov r1, r0, asr #0x5
+ mov r0, r5
+ add r1, r1, #0x1
+ bl FUN_02094EBC
+_02094CF8:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ sub r0, r6, #0x1
+ mov r1, r0, lsr #0x2
+ add r12, r1, #0x1
+ cmp r6, #0x0
+ str r12, [r5, #0x4]
+ and r3, r0, #0x3
+ sub r6, r6, #0x1
+ beq _02094D64
+ mov r1, #0x0
+ mov r0, #0x3
+_02094D34:
+ ldrb r2, [r7], #0x1
+ cmp r3, #0x0
+ sub r3, r3, #0x1
+ orr r4, r2, r4, lsl #0x8
+ ldreq r2, [r5, #0x0]
+ subeq r12, r12, #0x1
+ streq r4, [r2, r12, lsl #0x2]
+ moveq r4, r1
+ moveq r3, r0
+ cmp r6, #0x0
+ sub r6, r6, #0x1
+ bne _02094D34
+_02094D64:
+ mov r0, r5
+ bl FUN_02095040
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02094D7C
+FUN_02094D7C:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r2, [r4, #0x8]
+ mov r5, r1
+ cmp r2, #0x1
+ bge _02094DA0
+ mov r1, #0x2
+ bl FUN_02094EBC
+_02094DA0:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r0, #0x0
+ str r0, [r4, #0xc]
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ str r5, [r0, #0x0]
+ ldr r0, [r4, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ strne r0, [r4, #0x4]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02094DEC
+FUN_02094DEC: ; 0x02094DEC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02094E10
+ ldr r2, [r4, #0x8]
+ mov r1, #0x0
+ mov r2, r2, lsl #0x2
+ bl MI_CpuFill8
+_02094E10:
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ str r0, [r4, #0xc]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02094E24
+FUN_02094E24:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ cmp r5, r4
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, [r4, #0x4]
+ ldr r2, [r5, #0x8]
+ cmp r1, r2
+ ble _02094E58
+ bl FUN_02094EBC
+_02094E58:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r5, #0x0]
+ mov r2, r2, lsl #0x2
+ bl MI_CpuCopy8
+ ldr r0, [r4, #0x4]
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x0
+ bne _02094EA4
+ ldr r1, [r5, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+_02094EA4:
+ ldr r1, [r4, #0xc]
+ mov r0, r5
+ str r1, [r5, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02094EBC
+FUN_02094EBC:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ mov r4, r1
+ cmp r4, r0
+ ble _02094F30
+ ldr r0, [r5, #0x10]
+ ands r0, r0, #0x2
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x2
+ bl FUN_020910A4
+ movs r6, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _02094F28
+ ldr r2, [r5, #0x4]
+ mov r1, r6
+ mov r2, r2, lsl #0x2
+ bl MI_CpuCopy8
+_02094F20: ; 0x02094F20
+ ldr r0, [r5, #0x0]
+ bl FUN_0209105C
+_02094F28:
+ str r6, [r5, #0x0]
+ str r4, [r5, #0x8]
+_02094F30:
+ mov r0, r5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02094F3C
+FUN_02094F3C: ; 0x02094F3C
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ add r4, r6, #0x4
+ mov r5, #0x0
+_02094F4C:
+ mov r0, r4
+ bl FUN_02095164
+ add r5, r5, #0x1
+ cmp r5, #0xc
+ add r4, r4, #0x14
+ blt _02094F4C
+ ldr r0, [r6, #0x108]
+ ands r0, r0, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, r6
+ bl FUN_0209105C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02094F84
+FUN_02094F84: ; 0x02094F84
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r2, #0x110
+ mov r4, r0
+ bl MI_CpuFill8
+_02094F98: ; 0x02094F98
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ str r0, [r4, #0x108]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02094FAC
+FUN_02094FAC: ; 0x02094FAC
+ stmdb sp!, {r4,lr}
+ mov r0, #0x110
+ bl FUN_020910A4
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl FUN_02094F84
+ mov r1, #0x1
+ mov r0, r4
+ str r1, [r4, #0x108]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02094FE0
+FUN_02094FE0: ; 0x02094FE0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r0, #0x14
+ bl FUN_020910A4
+_02094FF0: ; 0x02094FF0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {lr}
+ bxeq lr
+ mov r1, #0x1
+ str r1, [r0, #0x10]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0xc]
+ str r1, [r0, #0x8]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209502C
+FUN_0209502C:
+ ldr ip, _0209503C ; =MI_CpuFill8
+ mov r1, #0x0
+ mov r2, #0x14
+ bx r12
+ .balign 4
+_0209503C: .word MI_CpuFill8
+
+ arm_func_start FUN_02095040
+FUN_02095040:
+ ldr r3, [r0, #0x4]
+ cmp r3, #0x0
+ bxle lr
+ ldr r2, [r0, #0x0]
+ sub r1, r3, #0x1
+ cmp r3, #0x0
+ add r3, r2, r1, lsl #0x2
+ bxle lr
+ add r2, r0, #0x4
+_02095064:
+ ldr r1, [r3], #-0x4
+ cmp r1, #0x0
+ bxne lr
+ ldr r1, [r2, #0x0]
+ sub r1, r1, #0x1
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ bgt _02095064
+ bx lr
+
+ arm_func_start FUN_0209508C
+FUN_0209508C:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r2, [r5, #0x4]
+ mov r4, r1
+ cmp r2, r4
+ addge sp, sp, #0x4
+ ldmgeia sp!, {r4-r5,lr}
+ bxge lr
+ ldr r2, [r5, #0x8]
+ cmp r4, r2
+ ble _020950C0
+ bl FUN_02094EBC
+_020950C0:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [r5, #0x4]
+ cmp r2, r4
+ addge sp, sp, #0x4
+ ldmgeia sp!, {r4-r5,lr}
+ bxge lr
+ mov r1, #0x0
+_020950EC:
+ ldr r0, [r5, #0x0]
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, r4
+ blt _020950EC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209510C
+FUN_0209510C:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02095138
+ ldr r1, [r4, #0x10]
+ ands r1, r1, #0x2
+ bne _02095138
+ bl FUN_0209105C
+_02095138:
+ ldr r0, [r4, #0x10]
+ orr r0, r0, #0x8000
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x10]
+ ands r0, r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ bl FUN_0209105C
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02095164
+FUN_02095164: ; 0x02095164
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl FUN_02094DEC
+ mov r0, r4
+ bl FUN_0209510C
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02095188
+FUN_02095188: ; 0x02095188
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, [r0, #0x0]
+ sub r4, r1, #0x1
+ ldr r0, [r0, r4, lsl #0x2]
+ bl FUN_020951BC
+ add r0, r0, r4, lsl #0x5
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020951BC
+FUN_020951BC: ; 0x020951BC
+ mov r1, #0x10000
+ rsb r1, r1, #0x0
+ ands r1, r0, r1
+ beq _020951DC
+ ands r1, r0, #0xff000000
+ movne r2, #0x18
+ moveq r2, #0x10
+ b _020951E8
+_020951DC:
+ ands r1, r0, #0xff00
+ movne r2, #0x8
+ moveq r2, #0x0
+_020951E8:
+ mov r1, r0, lsr r2
+ ands r0, r1, #0xf0
+ ldreq r0, _02095218 ; =0x020FF524
+ ldreqsb r0, [r0, r1]
+ addeq r0, r0, r2
+ bxeq lr
+ ldr r0, _02095218 ; =0x020FF524
+ mov r1, r1, lsr #0x4
+ ldrsb r0, [r0, r1]
+ add r0, r0, r2
+ add r0, r0, #0x4
+ bx lr
+ .balign 4
+_02095218: .word 0x020FF524
+
+ arm_func_start FUN_0209521C
+FUN_0209521C: ; 0x0209521C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r3, #0x0
+ strb r3, [r0, #0x0]
+ cmp r2, #0x10
+ strb r3, [r0, #0x1]
+ movhi r2, #0x10
+ add r0, r0, #0x4
+_0209523C:
+ strb r3, [r0, r3]
+ add r3, r3, #0x1
+ cmp r3, #0x100
+ blt _0209523C
+ mov r6, #0x0
+ mov r7, r6
+ mov r4, r6
+ mov r3, r6
+ and r12, r2, #0xff
+_02095260:
+ ldrb r5, [r0, r4]
+ ldrb lr, [r1, r7]
+ add r2, r7, #0x1
+ and r7, r2, #0xff
+ add r2, r5, lr
+ add r2, r6, r2
+ and r6, r2, #0xff
+ ldrb r2, [r0, r6]
+ add lr, r0, r4
+ add r4, r4, #0x1
+ strb r2, [lr, #0x0]
+ cmp r7, r12
+ moveq r7, r3
+ cmp r4, #0x100
+ strb r5, [r0, r6]
+ blt _02095260
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020952AC
+FUN_020952AC: ; 0x020952AC
+ stmdb sp!, {r4-r9,lr}
+ ldrb r7, [r0, #0x0]
+ ldrb r6, [r0, #0x1]
+ add r0, r0, #0x4
+ mov lr, #0x1000000
+ add r7, lr, r7, lsl #0x18
+ mov r6, r6, lsl #0x18
+ ldrb r9, [r0, r7, lsr #0x18]
+ subs r2, r2, #0x1
+ bmi _0209530C
+_020952D4:
+ add r6, r6, r9, lsl #0x18
+ subs r2, r2, #0x1
+ ldrb r8, [r0, r6, lsr #0x18]
+ ldrb r5, [r1], #0x1
+ strb r8, [r0, r7, lsr #0x18]
+ strb r9, [r0, r6, lsr #0x18]
+ add r4, r9, r8
+ and r4, r4, #0xff
+ add r7, r7, lr
+ ldrb r4, [r0, r4]
+ ldrb r9, [r0, r7, lsr #0x18]
+ eor r5, r5, r4
+ strb r5, [r3], #0x1
+ bge _020952D4
+_0209530C:
+ sub r7, r7, lr
+ mov r7, r7, lsr #0x18
+ mov r6, r6, lsr #0x18
+ strb r7, [r0, #-0x4]
+ strb r6, [r0, #-0x3]
+ ldmia sp!, {r4-r9,pc}
+_02095324: ; 0x02095324
+ ldr r0, _0209532C ; =0x021C8C84
+ bx lr
+ .balign 4
+_0209532C: .word 0x021C8C84
+
+ arm_func_start FUN_02095330
+FUN_02095330: ; 0x02095330
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ ldr r2, [r4, #0xc]
+ ldr r1, _020953E4 ; =0x021C8C84
+ str r2, [sp, #0x4]
+ str r3, [sp, #0x0]
+ mov r2, #0x5
+ bl MI_CpuCopy8
+ ldr r1, [sp, #0x0]
+ ldr r2, [r4, #0x4]
+ ldr r0, [sp, #0x4]
+ mov r2, r2, lsr #0x8
+ mov r12, r1, lsr #0x5
+ mov r3, r0, lsr #0x5
+ orr r12, r12, r0, lsl #0x1b
+ and lr, r2, #0x7
+ and r0, r1, #0x1f
+ orr lr, lr, r0, lsl #0x3
+ ldr r2, _020953E4 ; =0x021C8C84
+ ldr r1, _020953E8 ; =0x021C8C8A
+ strb lr, [r2, #0x5]
+ add r0, sp, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldrh r0, [r4, #0x10]
+ ldr r1, [sp, #0x4]
+ ldr r3, _020953E4 ; =0x021C8C84
+ and r1, r1, #0x3f
+ and r0, r0, #0x3
+ orr r0, r1, r0, lsl #0x6
+ strb r0, [r3, #0xa]
+ ldrh r2, [r4, #0x10]
+ add r0, r4, #0x12
+ ldr r1, _020953EC ; =0x021C8C90
+ mov r4, r2, asr #0x2
+ mov r2, #0x2
+ strb r4, [r3, #0xb]
+ bl MI_CpuCopy8
+ ldr r0, _020953E4 ; =0x021C8C84
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020953E4: .word 0x021C8C84
+_020953E8: .word 0x021C8C8A
+_020953EC: .word 0x021C8C90
+
+ arm_func_start FUN_020953F0
+FUN_020953F0: ; 0x020953F0
+ ldr r3, _02095420 ; =0x021C8C78
+ and r12, r1, #0xff
+ ldr r0, _02095424 ; =0x021C8C7C
+ mov r1, #0x1
+ strh r12, [r3, #0x0]
+ str r1, [r0, #0x0]
+ cmp r2, #0x0
+ movne r0, #0xff
+ strneh r0, [r3, #0x0]
+ ldr r0, _02095420 ; =0x021C8C78
+ ldrh r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_02095420: .word 0x021C8C78
+_02095424: .word 0x021C8C7C
+
+ arm_func_start FUN_02095428
+FUN_02095428:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, #0x4
+ mov r4, #0x1
+_02095434:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_02095440: ; 0x02095440
+ cmp r0, #0x0
+ beq _02095434
+ ldr r1, _02095490 ; =FUN_020953F0
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r4, #0x40000
+ mov r6, #0x7
+ mov r5, #0x0
+_02095460:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r5
+ mov r3, r5
+ bl FUN_020955F4
+ cmp r0, #0x1
+ beq _02095488
+ mov r0, r4
+ blx SVC_WaitByLoop
+ b _02095460
+_02095488:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02095490: .word FUN_020953F0
+
+ arm_func_start FUN_02095494
+FUN_02095494:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r2
+ mov r4, r3
+ mov r6, r0
+ mov r0, r1
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209555C
+_020954B4: ; 0x020954B4
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020954C0: ; 0x020954C0
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl memcmp
+_020954D0: ; 0x020954D0
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020954E0
+FUN_020954E0: ; 0x020954E0
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, #0x4
+ mov r4, #0x1
+_020954F8:
+ mov r0, r5
+ mov r1, r4
+ bl PXI_IsCallbackReady
+_02095504: ; 0x02095504
+ cmp r0, #0x0
+ beq _020954F8
+ ldr r1, _02095558 ; =FUN_020953F0
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r0, r6
+ mov r1, r7
+ bl DC_StoreRange
+ mov r4, #0x40000
+ mov r5, #0x2
+_0209552C:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r7
+ mov r3, r6
+ bl FUN_020955F4
+ cmp r0, #0x1
+ ldmeqia sp!, {r4-r8,pc}
+_02095548: ; 0x02095548
+ mov r0, r4
+ blx SVC_WaitByLoop
+ b _0209552C
+_02095554: ; 0x02095554
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_02095558: .word FUN_020953F0
+
+ arm_func_start FUN_0209555C
+FUN_0209555C:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r4, r2
+ mov r6, r0
+ mov r0, r4
+ mov r5, r1
+ bl DC_InvalidateRange
+ mov r8, #0x4
+ mov r7, #0x1
+_02095580:
+ mov r0, r8
+ mov r1, r7
+ bl PXI_IsCallbackReady
+_0209558C: ; 0x0209558C
+ cmp r0, #0x0
+ beq _02095580
+ ldr r1, _020955F0 ; =FUN_020953F0
+ mov r0, #0x4
+ bl PXI_SetFifoRecvCallback
+ mov r0, r5, lsl #0x10
+ mov r8, r0, lsr #0x10
+ mov r7, #0x40000
+ mov r9, #0x1
+_020955B0:
+ mov r0, r9
+ mov r1, r6
+ mov r2, r8
+ mov r3, r4
+ bl FUN_020955F4
+ cmp r0, #0x1
+ beq _020955D8
+ mov r0, r7
+ blx SVC_WaitByLoop
+ b _020955B0
+_020955D8:
+ mov r0, r4
+ mov r1, r5
+ bl DC_InvalidateRange
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020955F0: .word FUN_020953F0
+
+ arm_func_start FUN_020955F4
+FUN_020955F4: ; 0x020955F4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc4
+ ldr ip, _02095AAC ; =0x0000FFFF
+ ldr sl, _02095AB0 ; =0x021C8CA0
+ and r8, r2, r12
+ and r7, r1, r12
+ mov r5, r1, lsr #0x10
+ mov r4, r3, lsr #0x10
+ and r1, r3, r12
+ orr r3, r8, #0x30000
+ str r3, [sp, #0xc]
+ ldr r3, _02095AB4 ; =0x01050000
+ orr r2, r2, #0x20000
+ orr r3, r1, r3
+ str r3, [sp, #0x14]
+ orr r1, r1, #0x1040000
+ mov r9, r0
+ and r0, r5, #0xff
+ str r2, [sp, #0x1c]
+ str r1, [sp, #0x24]
+ ldr r1, _02095AB8 ; =0x02002200
+ mov r8, #0x0
+ orr r2, r4, #0x40000
+ orr r1, r1, r10, lsr #0x18
+ str r1, [sp, #0x28]
+ and r1, r12, r10, lsr #0x8
+ orr r1, r1, #0x10000
+ ldr r3, _02095ABC ; =0x02002300
+ str r2, [sp, #0x10]
+ orr r2, r0, r3
+ str r2, [sp, #0x8]
+ orr r2, r4, #0x30000
+ str r2, [sp, #0x20]
+ ldr r2, _02095AC0 ; =0x02002500
+ mov r6, r10, lsl #0x8
+ str r1, [sp, #0x2c]
+ and r1, r6, #0xff00
+ orr r0, r0, r2
+ ldr r3, _02095AC4 ; =0x01020000
+ str r0, [sp, #0x18]
+ orr r0, r1, r3
+ str r0, [sp, #0x30]
+ mov r0, #0x20000
+ str r0, [sp, #0x40]
+ mov r0, #0x5
+ str r0, [sp, #0xac]
+ mov r0, #0x3
+ str r0, [sp, #0xb0]
+ mov r0, #0x6
+ str r0, [sp, #0xb8]
+ mov r0, #0x4000
+ orr r7, r7, #0x10000
+ str r8, [sp, #0xb4]
+ mov r4, #0x1
+ str r8, [sp, #0xa8]
+ mov r5, #0x4
+ str r8, [sp, #0xa4]
+ str r8, [sp, #0xa0]
+ str r8, [sp, #0x90]
+ str r8, [sp, #0x98]
+ str r8, [sp, #0x9c]
+ str r8, [sp, #0x94]
+ str r8, [sp, #0x8c]
+ str r8, [sp, #0x6c]
+ str r8, [sp, #0x74]
+ str r8, [sp, #0x7c]
+ str r8, [sp, #0x84]
+ str r8, [sp, #0x88]
+ str r8, [sp, #0x80]
+ str r8, [sp, #0x78]
+ str r8, [sp, #0x70]
+ str r8, [sp, #0x68]
+ str r8, [sp, #0x64]
+ str r8, [sp, #0x38]
+ str r8, [sp, #0x44]
+ str r8, [sp, #0x4c]
+ str r8, [sp, #0x54]
+ str r8, [sp, #0x5c]
+ str r8, [sp, #0x60]
+ str r8, [sp, #0x58]
+ str r8, [sp, #0x50]
+ str r8, [sp, #0x48]
+ str r8, [sp, #0x3c]
+ str r8, [sp, #0x34]
+ mov r6, r8
+ str r0, [sp, #0xbc]
+_0209574C:
+ cmp r8, #0x0
+ bne _02095988
+ ldr r0, _02095AC8 ; =0x021C8C7C
+ cmp r9, #0x7
+ str r6, [r0, #0x0]
+ addls pc, pc, r9, lsl #0x2
+ b _0209574C
+_02095768:
+ b _0209574C
+_0209576C:
+ b _02095788
+_02095770:
+ b _02095834
+_02095774:
+ b _02095854
+_02095778:
+ b _020958F0
+_0209577C:
+ b _020958F0
+_02095780:
+ b _02095948
+_02095784:
+ b _02095968
+_02095788:
+ ldr r1, [sp, #0x8]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095798: ; 0x02095798
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x34]
+ blt _0209574C
+ ldr r2, [sp, #0x38]
+ mov r0, r5
+ mov r1, r7
+ bl PXI_SendWordByFifo
+_020957B4: ; 0x020957B4
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x3c]
+ blt _0209574C
+ ldr r1, [sp, #0x40]
+ ldr r2, [sp, #0x44]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_020957D0: ; 0x020957D0
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x48]
+ blt _0209574C
+ ldr r1, [sp, #0xc]
+ ldr r2, [sp, #0x4c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_020957EC: ; 0x020957EC
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x50]
+ blt _0209574C
+ ldr r1, [sp, #0x10]
+ ldr r2, [sp, #0x54]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_02095808: ; 0x02095808
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x58]
+ blt _0209574C
+ ldr r1, [sp, #0x14]
+ ldr r2, [sp, #0x5c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_02095824: ; 0x02095824
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x60]
+ movge r8, r4
+ b _0209574C
+_02095834:
+ ldr r1, _02095ACC ; =0x03002000
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095844: ; 0x02095844
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0x64]
+ b _0209574C
+_02095854:
+ ldr r1, [sp, #0x18]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095864: ; 0x02095864
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x68]
+ blt _020958E0
+ ldr r2, [sp, #0x6c]
+ mov r0, r5
+ mov r1, r7
+ bl PXI_SendWordByFifo
+_02095880: ; 0x02095880
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x70]
+ blt _020958E0
+ ldr r1, [sp, #0x1c]
+ ldr r2, [sp, #0x74]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_0209589C: ; 0x0209589C
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x78]
+ blt _020958E0
+ ldr r1, [sp, #0x20]
+ ldr r2, [sp, #0x7c]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_020958B8: ; 0x020958B8
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x80]
+ blt _020958E0
+ ldr r1, [sp, #0x24]
+ ldr r2, [sp, #0x84]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_020958D4: ; 0x020958D4
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x88]
+ movge r8, r4
+_020958E0:
+ bl OS_GetTick
+_020958E4: ; 0x020958E4
+ str r0, [sp, #0x0]
+ mov r11, r1
+ b _0209574C
+_020958F0:
+ ldr r1, [sp, #0x28]
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095900: ; 0x02095900
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x8c]
+ blt _0209574C
+ ldr r1, [sp, #0x2c]
+ ldr r2, [sp, #0x90]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_0209591C: ; 0x0209591C
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x94]
+ blt _0209574C
+ ldr r1, [sp, #0x30]
+ ldr r2, [sp, #0x98]
+ mov r0, r5
+ bl PXI_SendWordByFifo
+_02095938: ; 0x02095938
+ cmp r0, #0x0
+ ldrlt r8, [sp, #0x9c]
+ movge r8, r4
+ b _0209574C
+_02095948:
+ ldr r1, _02095AD0 ; =0x03002D00
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095958: ; 0x02095958
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0xa0]
+ b _0209574C
+_02095968:
+ ldr r1, _02095AD4 ; =0x03002100
+ mov r0, r5
+ mov r2, r6
+ bl PXI_SendWordByFifo
+_02095978: ; 0x02095978
+ cmp r0, #0x0
+ movge r8, r4
+ ldrlt r8, [sp, #0xa4]
+ b _0209574C
+_02095988:
+ ldr r0, _02095AC8 ; =0x021C8C7C
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _0209574C
+ ldr r0, _02095AD8 ; =0x021C8C78
+ ldr r8, [sp, #0xa8]
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _02095AA0
+ cmp r9, #0x7
+ addls pc, pc, r9, lsl #0x2
+ b _0209574C
+_020959B8: ; 0x020959B8
+ b _0209574C
+_020959BC: ; 0x020959BC
+ b _020959D8
+_020959C0: ; 0x020959C0
+ b _020959E4
+_020959C4: ; 0x020959C4
+ b _020959EC
+_020959C8: ; 0x020959C8
+ b _020959F4
+_020959CC: ; 0x020959CC
+ b _020959F4
+_020959D0: ; 0x020959D0
+ b _02095A88
+_020959D4: ; 0x020959D4
+ b _02095A94
+_020959D8:
+ add sp, sp, #0xc4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020959E4:
+ mov r9, r5
+ b _0209574C
+_020959EC:
+ ldr r9, [sp, #0xac]
+ b _0209574C
+_020959F4:
+ mov r0, r10
+ mov r1, r4
+ bl DC_InvalidateRange
+ cmp r9, #0x4
+ bne _02095A24
+ ldrb r0, [r10, #0x0]
+ ands r0, r0, #0x2
+ ldrne r9, [sp, #0xb0]
+ bne _0209574C
+ add sp, sp, #0xc4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_02095A24:
+ ldrb r1, [r10, #0x0]
+ ands r0, r1, #0x1
+ addeq sp, sp, #0xc4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,pc}
+_02095A38: ; 0x02095A38
+ ands r0, r1, #0x20
+ bne _02095A74
+ bl OS_GetTick
+ ldr r2, [sp, #0x0]
+ ldr r3, [sp, #0xb4]
+ subs r2, r0, r2
+ sbc r0, r1, r11
+ mov r1, r0, lsl #0x6
+ orr r1, r1, r2, lsr #0x1a
+ mov r0, r2, lsl #0x6
+ ldr r2, _02095ADC ; =0x000082EA
+ bl _ll_udiv
+_02095A68: ; 0x02095A68
+ cmp r1, #0x0
+ cmpeq r0, #0xfa0
+ bls _02095A7C
+_02095A74:
+ ldr r9, [sp, #0xb8]
+ b _0209574C
+_02095A7C:
+ ldr r0, [sp, #0xbc]
+ blx SVC_WaitByLoop
+ b _0209574C
+_02095A88:
+ add sp, sp, #0xc4
+ mov r0, r8
+ ldmia sp!, {r4-r11,pc}
+_02095A94:
+ add sp, sp, #0xc4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_02095AA0:
+ mov r0, r8
+ add sp, sp, #0xc4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095AAC: .word 0x0000FFFF
+_02095AB0: .word 0x021C8CA0
+_02095AB4: .word 0x01050000
+_02095AB8: .word 0x02002200
+_02095ABC: .word 0x02002300
+_02095AC0: .word 0x02002500
+_02095AC4: .word 0x01020000
+_02095AC8: .word 0x021C8C7C
+_02095ACC: .word 0x03002000
+_02095AD0: .word 0x03002D00
+_02095AD4: .word 0x03002100
+_02095AD8: .word 0x021C8C78
+_02095ADC: .word 0x000082EA
+
+ arm_func_start FUN_02095AE0
+FUN_02095AE0:
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x7f
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x1
+ movcc r0, #0x0
+ bxcc lr
+ cmp r0, #0xdf
+ movls r0, #0x1
+ movhi r0, #0x0
+ bx lr
+
+ arm_func_start FUN_02095B0C
+FUN_02095B0C:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ bl FUN_02095AE0
+_02095B20: ; 0x02095B20
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_02095B30: ; 0x02095B30
+ add r1, sp, #0x0
+ mov r0, r5
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ add r1, sp, #0x4
+ mov r0, r4
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldr r3, [sp, #0x4]
+ ldr r2, [sp, #0x0]
+ mvn r0, #0x1
+ orr r1, r2, r3
+ cmp r1, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_02095B70: ; 0x02095B70
+ mvn r0, r3
+ ands r0, r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_02095B88
+FUN_02095B88:
+ mov r2, #0x0
+_02095B8C:
+ ldrb r1, [r0, r2]
+ cmp r1, #0x0
+ movne r0, #0x1
+ bxne lr
+ add r2, r2, #0x1
+ cmp r2, #0x20
+ blt _02095B8C
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_02095BB0
+FUN_02095BB0: ; 0x02095BB0
+ mvn r2, #0x0
+ mov r12, #0x0
+ eor r3, r2, r2, lsr r0
+ mov r2, r12
+_02095BC0:
+ rsb r0, r2, #0x18
+ mov r0, r3, lsr r0
+ strb r0, [r1, r12]
+ add r12, r12, #0x1
+ cmp r12, #0x4
+ add r2, r2, #0x8
+ blt _02095BC0
+ bx lr
+
+ arm_func_start FUN_02095BE0
+FUN_02095BE0: ; 0x02095BE0
+ stmdb sp!, {r4,lr}
+ mov lr, #0x0
+ mov r4, lr
+ mov r2, lr
+_02095BF0:
+ ldrb r3, [r0, lr]
+ mov r12, r2
+_02095BF8:
+ mov r1, r3, asr r12
+ ands r1, r1, #0x1
+ add r12, r12, #0x1
+ addne r4, r4, #0x1
+ cmp r12, #0x8
+ blt _02095BF8
+ add lr, lr, #0x1
+ cmp lr, #0x4
+ blt _02095BF0
+ and r0, r4, #0xff
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02095C24
+FUN_02095C24: ; 0x02095C24
+ ldr ip, _02095C34 ; =MI_CpuCopy8
+ ldr r1, _02095C38 ; =0x021C8C84
+ mov r2, #0xe
+ bx r12
+ .balign 4
+_02095C34: .word MI_CpuCopy8
+_02095C38: .word 0x021C8C84
+
+ arm_func_start FUN_02095C3C
+FUN_02095C3C:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095CD8 ; =0x021C8C80
+ mov r10, r0
+ ldr r8, [r1, #0x0]
+ mov r7, r10
+ mov r9, #0x0
+ add r4, r10, #0x400
+ add r6, r10, #0x500
+ mov r5, #0x100
+ mov r11, #0xfe
+_02095C68:
+ mov r0, r6
+ mov r1, r7
+ mov r2, r11
+ bl MATH_CalcCRC16
+ add r1, r10, r9, lsl #0x8
+ strh r0, [r1, #0xfe]
+_02095C80:
+ mov r0, r8
+ mov r1, r5
+ mov r2, r7
+ bl FUN_020954E0
+ mov r0, r7
+ mov r1, r8
+ mov r2, r5
+ mov r3, r4
+ bl FUN_02095494
+_02095CA4: ; 0x02095CA4
+ cmp r0, #0x0
+ beq _02095C80
+ add r9, r9, #0x1
+ cmp r9, #0x4
+ add r7, r7, #0x100
+ add r8, r8, #0x100
+ blt _02095C68
+ bl FUN_02095428
+_02095CC4: ; 0x02095CC4
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095CD8: .word 0x021C8C80
+
+ arm_func_start FUN_02095CDC
+FUN_02095CDC: ; 0x02095CDC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _02095D64 ; =0x021C8C80
+ mov r4, r0
+ ldr r6, [r3, #0x0]
+ mov r9, r1
+ mov r8, r2
+ mov r7, #0x0
+ mov r5, #0x100
+_02095D00:
+ ldr r0, [r9, r7, lsl #0x2]
+ cmp r0, #0x0
+ beq _02095D38
+_02095D0C:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020954E0
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ mov r3, r8
+ bl FUN_02095494
+_02095D30: ; 0x02095D30
+ cmp r0, #0x0
+ beq _02095D0C
+_02095D38:
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ add r4, r4, #0x100
+ add r6, r6, #0x100
+ blt _02095D00
+ bl FUN_02095428
+_02095D50: ; 0x02095D50
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_02095D64: .word 0x021C8C80
+
+ arm_func_start FUN_02095D68
+FUN_02095D68:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095D98 ; =0x021C8C80
+ mov r2, r0
+ ldr r0, [r1, #0x0]
+ mov r1, #0x400
+ bl FUN_0209555C
+_02095D84: ; 0x02095D84
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_02095D98: .word 0x021C8C80
+
+ arm_func_start FUN_02095D9C
+FUN_02095D9C:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x20
+ mov r1, r0
+ mov r2, r4
+ bl FUN_0209555C
+_02095DB4: ; 0x02095DB4
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02095DC0: ; 0x02095DC0
+ ldrh r2, [r4, #0x0]
+ ldr r1, _02095DDC ; =0x021C8C80
+ mov r0, #0x1
+ mov r2, r2, lsl #0x3
+ sub r2, r2, #0x400
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02095DDC: .word 0x021C8C80
+
+ arm_func_start FUN_02095DE0
+FUN_02095DE0:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r2, _02095EBC ; =0x021C8C80
+ mov r10, r1
+ ldr r8, [r2, #0x0]
+ bl FUN_02095330
+ ldr r1, _02095EC0 ; =0x0000A001
+ add r0, r10, #0x200
+ bl MATHi_CRC16InitTableRev
+ mov r9, #0x0
+ add r4, r10, #0x100
+ add r6, r10, #0xf0
+ mov r7, #0x100
+ mov r5, #0xe
+ mov r11, #0xfe
+_02095E1C:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r10
+ bl FUN_0209555C
+_02095E2C: ; 0x02095E2C
+ cmp r0, #0x0
+ bne _02095E44
+ bl OS_Terminate
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_02095E44:
+ ldr r0, _02095EC4 ; =0x021C8C84
+ mov r1, r6
+ mov r2, r5
+ bl MI_CpuCopy8
+ mov r1, r10
+ mov r2, r11
+ add r0, r10, #0x200
+ bl MATH_CalcCRC16
+ strh r0, [r10, #0xfe]
+_02095E68:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r10
+ bl FUN_020954E0
+ mov r0, r10
+ mov r1, r8
+ mov r2, r7
+ mov r3, r4
+ bl FUN_02095494
+_02095E8C: ; 0x02095E8C
+ cmp r0, #0x0
+ beq _02095E68
+ add r9, r9, #0x1
+ cmp r9, #0x2
+ add r8, r8, #0x100
+ blt _02095E1C
+ bl FUN_02095428
+_02095EA8: ; 0x02095EA8
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_02095EBC: .word 0x021C8C80
+_02095EC0: .word 0x0000A001
+_02095EC4: .word 0x021C8C84
+
+ arm_func_start FUN_02095EC8
+FUN_02095EC8:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _02095F90 ; =0x021C8C84
+ mov r1, r4
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r3, [r4, #0x0]
+ mvn r0, #0x0
+ ldr r2, [r4, #0x4]
+ ldr r1, _02095F94 ; =0x000007FF
+ and r0, r3, r0
+ str r0, [r4, #0x0]
+ and r1, r2, r1
+ ldr r0, _02095F98 ; =0x021C8C89
+ str r1, [r4, #0x4]
+ add r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ add r12, r4, #0x8
+ ldr r1, [r4, #0x8]
+ ldr r0, [r12, #0x4]
+ mov r1, r1, lsr #0x3
+ orr r1, r1, r0, lsl #0x1d
+ str r1, [r4, #0x8]
+ mov r0, r0, lsr #0x3
+ str r0, [r12, #0x4]
+ ldr r3, [r4, #0x8]
+ mvn r0, #0x0
+ ldr r2, [r12, #0x4]
+ ldr r1, _02095F94 ; =0x000007FF
+ and r0, r3, r0
+ str r0, [r4, #0x8]
+ and r1, r2, r1
+ ldr r0, _02095F9C ; =0x021C8C8E
+ str r1, [r12, #0x4]
+ add r1, r4, #0x10
+ mov r2, #0x2
+ bl MI_CpuCopy8
+ ldrh r1, [r4, #0x10]
+ ldr r3, _02095FA0 ; =0x000003FF
+ ldr r0, _02095FA4 ; =0x021C8C90
+ mov r1, r1, asr #0x6
+ strh r1, [r4, #0x10]
+ ldrh r12, [r4, #0x10]
+ add r1, r4, #0x12
+ mov r2, #0x2
+ and r3, r12, r3
+ strh r3, [r4, #0x10]
+ bl MI_CpuCopy8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02095F90: .word 0x021C8C84
+_02095F94: .word 0x000007FF
+_02095F98: .word 0x021C8C89
+_02095F9C: .word 0x021C8C8E
+_02095FA0: .word 0x000003FF
+_02095FA4: .word 0x021C8C90
+
+ arm_func_start FUN_02095FA8
+FUN_02095FA8: ; 0x02095FA8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02095FD8 ; =0x021C8C80
+ mov r2, r0
+ ldr r0, [r1, #0x0]
+ mov r1, #0x300
+ bl FUN_0209555C
+_02095FC4: ; 0x02095FC4
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_02095FD8: .word 0x021C8C80
+
+ arm_func_start FUN_02095FDC
+FUN_02095FDC: ; 0x02095FDC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ add r1, r5, r4, lsl #0x8
+ mov r0, #0x0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ add r0, r5, r4, lsl #0x8
+ mov r1, #0xff
+ strb r1, [r0, #0xe7]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_02096010
+FUN_02096010: ; 0x02096010
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r7, r0
+ mov r1, r7
+ mov r0, #0x0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ mov r2, #0x0
+ mov r1, #0xff
+_02096034:
+ add r0, r7, r2, lsl #0x8
+ add r2, r2, #0x1
+ strb r1, [r0, #0xe7]
+ cmp r2, #0x3
+ blt _02096034
+ add r0, sp, #0x0
+ bl FUN_020967A4
+_02096050: ; 0x02096050
+ add r0, sp, #0x0
+ bl FUN_02095330
+ mov r6, r0
+ mov r5, #0x0
+ mov r4, #0xe
+_02096064:
+ mov r0, r6
+ mov r2, r4
+ add r1, r7, #0xf0
+ bl MI_CpuCopy8
+ add r5, r5, #0x1
+ cmp r5, #0x2
+ add r7, r7, #0x100
+ blt _02096064
+ mov r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_02096090
+FUN_02096090:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldrb r0, [r4, #0xe7]
+ cmp r0, #0xff
+ addeq sp, sp, #0x8
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+_020960B0: ; 0x020960B0
+ cmp r0, #0x2
+ addhi sp, sp, #0x8
+ movhi r0, #0x0
+ ldmhiia sp!, {r4,pc}
+_020960C0: ; 0x020960C0
+ add r0, r4, #0x40
+ bl FUN_02095B88
+_020960C8: ; 0x020960C8
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020960D8: ; 0x020960D8
+ ldr r1, _0209618C ; =0x020FF574
+ add r0, r4, #0xc0
+ mov r2, #0x4
+ bl memcmp
+_020960E8: ; 0x020960E8
+ cmp r0, #0x0
+ beq _02096140
+ add r0, r4, #0xc4
+ bl FUN_02095AE0
+_020960F8: ; 0x020960F8
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096108: ; 0x02096108
+ ldrb r0, [r4, #0xd0]
+ cmp r0, #0x20
+ addhi sp, sp, #0x8
+ movhi r0, #0x0
+ ldmhiia sp!, {r4,pc}
+_0209611C: ; 0x0209611C
+ add r1, sp, #0x0
+ bl FUN_02095BB0
+ add r1, sp, #0x0
+ add r0, r4, #0xc0
+ bl FUN_02095B0C
+_02096130: ; 0x02096130
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096140:
+ ldr r1, _0209618C ; =0x020FF574
+ add r0, r4, #0xc8
+ mov r2, #0x4
+ bl memcmp
+_02096150: ; 0x02096150
+ cmp r0, #0x0
+ beq _02096180
+ add r0, r4, #0xc8
+ bl FUN_02095AE0
+_02096160: ; 0x02096160
+ cmp r0, #0x0
+ bne _02096180
+ add r0, r4, #0xcc
+ bl FUN_02095AE0
+_02096170: ; 0x02096170
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096180:
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_0209618C: .word 0x020FF574
+
+ arm_func_start FUN_02096190
+FUN_02096190: ; 0x02096190
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ mov r1, #0x0
+ mov r2, #0x700
+ bl MI_CpuFill8
+ mov r0, r10
+ bl FUN_02095D9C
+_020961B0: ; 0x020961B0
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964B4 ; =0xFFFFD8EF
+ ldmeqia sp!, {r4-r11,pc}
+_020961C0: ; 0x020961C0
+ ldr r1, _020964B8 ; =0x0000A001
+ add r0, r10, #0x500
+ bl MATHi_CRC16InitTableRev
+ mov r0, r10
+ bl FUN_02095D68
+_020961D4: ; 0x020961D4
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964B4 ; =0xFFFFD8EF
+ ldmeqia sp!, {r4-r11,pc}
+_020961E4: ; 0x020961E4
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x10
+ bl MI_CpuFill8
+ mov r8, r10
+ mov r7, r10
+ mov r9, #0x0
+ add r11, sp, #0x0
+ add r6, r10, #0x500
+ mov r4, #0x1
+ mov r5, #0xfe
+_02096210:
+ mov r0, r6
+ mov r1, r8
+ mov r2, r5
+ bl MATH_CalcCRC16
+ add r1, r10, r9, lsl #0x8
+ ldrh r1, [r1, #0xfe]
+ cmp r0, r1
+ bne _02096240
+ mov r0, r7
+ bl FUN_02096090
+_02096238: ; 0x02096238
+ cmp r0, #0x0
+ strne r4, [r11, r9, lsl #0x2]
+_02096240:
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ add r8, r8, #0x100
+ add r7, r7, #0x100
+ blt _02096210
+ add r0, r10, #0x500
+ add r1, r10, #0x300
+ mov r2, #0xfe
+ bl MATH_CalcCRC16
+ add r1, r10, #0x300
+ ldrh r1, [r1, #0xfe]
+ cmp r0, r1
+ moveq r0, #0x1
+ ldr r1, [sp, #0x0]
+ streq r0, [sp, #0xc]
+ cmp r1, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _020962BC
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020962BC
+ add r0, r10, #0xf0
+ bl FUN_02095C24
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020962BC:
+ cmp r1, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bne _0209630C
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _0209630C
+ mov r0, r10
+ bl FUN_02096010
+ mov r0, r10
+ bl FUN_02095C3C
+_020962F8: ; 0x020962F8
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_0209630C:
+ cmp r1, #0x0
+ beq _02096320
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _0209635C
+_02096320:
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _02096338
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _0209635C
+_02096338:
+ mov r0, r10
+ bl FUN_02096010
+ mov r0, r10
+ bl FUN_02095C3C
+_02096348: ; 0x02096348
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_0209635C:
+ cmp r1, #0x0
+ bne _02096394
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _02096394
+ mov r0, r10
+ bl FUN_02096010
+ mov r0, r10
+ bl FUN_02095C3C
+_02096380: ; 0x02096380
+ cmp r0, #0x0
+ ldrne r0, _020964C0 ; =0xFFFFD8ED
+ add sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmia sp!, {r4-r11,pc}
+_02096394:
+ cmp r1, #0x0
+ bne _020963C4
+ mov r0, r10
+ mov r1, #0x0
+ bl FUN_02095FDC
+ add r0, r10, #0x1f0
+ add r1, r10, #0xf0
+ mov r2, #0xe
+ bl MI_CpuCopy8
+ ldrb r0, [r10, #0x1ef]
+ strb r0, [r10, #0xef]
+ b _020963F4
+_020963C4:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ bne _020963F4
+ mov r0, r10
+ mov r1, #0x1
+ bl FUN_02095FDC
+ add r0, r10, #0xf0
+ add r1, r10, #0x1f0
+ mov r2, #0xe
+ bl MI_CpuCopy8
+ ldrb r0, [r10, #0xef]
+ strb r0, [r10, #0x1ef]
+_020963F4:
+ add r0, r10, #0xf0
+ bl FUN_02095C24
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bne _02096414
+ mov r0, r10
+ mov r1, #0x2
+ bl FUN_02095FDC
+_02096414:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _02096430
+ add r1, r10, #0x300
+ mov r0, #0x0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+_02096430:
+ mov r4, #0x0
+ mov r1, r4
+ add r0, sp, #0x0
+ add r5, r10, #0xef
+ mov r6, #0x1
+_02096444:
+ ldr r2, [r0, r1, lsl #0x2]
+ cmp r2, #0x0
+ bne _0209647C
+ ldrb r2, [r10, #0xef]
+ mov r7, r6, lsl r1
+ ands r2, r2, r7
+ beq _0209647C
+ ldrb r3, [r5, #0x0]
+ mvn r2, r7
+ mov r4, r6
+ and r2, r3, r2
+ strb r2, [r5, #0x0]
+ ldrb r2, [r10, #0xef]
+ strb r2, [r10, #0x1ef]
+_0209647C:
+ add r1, r1, #0x1
+ cmp r1, #0x3
+ blt _02096444
+ mov r0, r10
+ bl FUN_02095C3C
+_02096490: ; 0x02096490
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ ldreq r0, _020964BC ; =0xFFFFD8F0
+ ldmeqia sp!, {r4-r11,pc}
+_020964A0: ; 0x020964A0
+ cmp r4, #0x0
+ ldrne r0, _020964C4 ; =0xFFFFD8EE
+ moveq r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020964B4: .word 0xFFFFD8EF
+_020964B8: .word 0x0000A001
+_020964BC: .word 0xFFFFD8F0
+_020964C0: .word 0xFFFFD8ED
+_020964C4: .word 0xFFFFD8EE
+
+ arm_func_start FUN_020964C8
+FUN_020964C8:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ add r0, sp, #0x0
+ bl FUN_02095EC8
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r0
+ bne _0209650C
+ ldr r1, [sp, #0x4]
+ ldr r2, [sp, #0x0]
+ cmp r1, r0
+ cmpeq r2, r0
+ addeq sp, sp, #0x14
+ moveq r0, #0x1
+ ldmeqia sp!, {pc}
+_0209650C:
+ mov r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_02096518
+FUN_02096518: ; 0x02096518
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl FUN_02095EC8
+_0209652C: ; 0x0209652C
+ add r0, sp, #0x0
+ ldmia r0, {r2-r3}
+ stmia r4, {r2-r3}
+ add r1, sp, #0x8
+ add r0, r4, #0x8
+ ldmia r1, {r2-r3}
+ stmia r0, {r2-r3}
+ ldr r2, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r0
+ streq r0, [r4, #0x10]
+ movne r0, #0x1
+ strne r0, [r4, #0x10]
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02096570
+FUN_02096570: ; 0x02096570
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ add r2, sp, #0x0
+ mov r1, #0x0
+ strb r1, [r2, #0x0]
+ strb r1, [r2, #0x1]
+ strb r1, [r2, #0x2]
+ strb r1, [r2, #0x3]
+ strb r1, [r2, #0x4]
+ mov r5, r0
+ strb r1, [r2, #0x5]
+ bl FUN_02095EC8
+ bl RTC_Init
+ add r0, sp, #0x8
+ bl RTC_GetDate
+_020965AC: ; 0x020965AC
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+_020965BC: ; 0x020965BC
+ add r0, sp, #0x18
+ bl RTC_GetTime
+_020965C4: ; 0x020965C4
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+_020965D4: ; 0x020965D4
+ add r0, sp, #0x8
+ add r1, sp, #0x18
+ bl RTC_ConvertDateTimeToSecond
+ mov r4, r0
+ mov r0, #0x0
+ subs r2, r4, r0
+ sbcs r2, r1, r0
+ addlt sp, sp, #0x28
+ ldmltia sp!, {r4-r10,pc}
+_020965F8: ; 0x020965F8
+ bl OS_IsTickAvailable
+_020965FC: ; 0x020965FC
+ cmp r0, #0x0
+ beq _0209660C
+ ldr r0, _02096700 ; =OS_GetTick
+ adds r4, r4, r0
+_0209660C:
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ ldrb r1, [sp, #0x0]
+ ldr r6, _02096704 ; =0x5D588B65
+ ldr r7, _02096708 ; =0x00269EC3
+ ldrb r0, [sp, #0x1]
+ mla r9, r4, r6, r7
+ mov r1, r1, lsl #0x10
+ orr r1, r1, r0, lsl #0x8
+ ldrb r2, [sp, #0x2]
+ ldr r0, _0209670C ; =0x000009BF
+ ldrb r8, [sp, #0x3]
+ orr r1, r2, r1
+ cmp r1, r0
+ movne r1, #0x1
+ mov r2, r9, lsr #0x10
+ mov r0, #0x3e8
+ mul r3, r2, r0
+ mov r2, r3, lsr #0x10
+ mov r3, r8, lsl #0x10
+ ldrb r4, [sp, #0x4]
+ ldrb r0, [sp, #0x5]
+ mov r8, #0x0
+ orr r10, r3, r4, lsl #0x8
+ strh r2, [r5, #0x10]
+ str r8, [r5, #0x8]
+ str r8, [r5, #0xc]
+ moveq r1, #0x0
+ ldr r2, [r5, #0xc]
+ ldr r3, [r5, #0x8]
+ cmp r2, r8
+ cmpeq r3, r8
+ and r4, r1, #0xff
+ orr r10, r0, r10
+ bne _020966F4
+_02096698:
+ mla r9, r6, r9, r7
+ b _020966A4
+_020966A0:
+ mla r9, r6, r9, r7
+_020966A4:
+ cmp r9, #0x0
+ beq _020966A0
+ ldrh r1, [r5, #0x12]
+ mov r0, r9, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r1, r0
+ beq _020966A0
+ strh r0, [r5, #0x12]
+ ldrh r0, [r5, #0x12]
+ mov r1, r10
+ mov r2, r4
+ mov r3, r8
+ bl FUN_02096988
+ str r0, [r5, #0x8]
+ str r1, [r5, #0xc]
+ ldr r0, [r5, #0xc]
+ ldr r1, [r5, #0x8]
+ cmp r0, r8
+ cmpeq r1, r8
+ beq _02096698
+_020966F4:
+ mov r0, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_02096700: .word OS_GetTick
+_02096704: .word 0x5D588B65
+_02096708: .word 0x00269EC3
+_0209670C: .word 0x000009BF
+
+ arm_func_start FUN_02096710
+FUN_02096710: ; 0x02096710
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r4, r1
+ bl FUN_02095EC8
+ add r12, r5, #0x8
+ ldmia r12, {r2-r3}
+ stmia r5, {r2-r3}
+ add r1, sp, #0x8
+ ldmia r1, {r2-r3}
+ mov r0, r5
+ mov r1, r4
+ stmia r12, {r2-r3}
+ bl FUN_02095DE0
+_0209674C: ; 0x0209674C
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_02096760
+FUN_02096760: ; 0x02096760
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl FUN_020967A4
+_02096774: ; 0x02096774
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096784: ; 0x02096784
+ add r0, sp, #0x0
+ mov r1, r4
+ bl FUN_02095DE0
+_02096790: ; 0x02096790
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020967A4
+FUN_020967A4:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ mov r8, r0
+ bl FUN_02095EC8
+ bl RTC_Init
+ add r0, sp, #0x8
+ bl RTC_GetDate
+_020967C0: ; 0x020967C0
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+_020967D0: ; 0x020967D0
+ add r0, sp, #0x18
+ bl RTC_GetTime
+_020967D8: ; 0x020967D8
+ cmp r0, #0x0
+ addne sp, sp, #0x28
+ movne r0, #0x0
+ ldmneia sp!, {r4-r10,pc}
+_020967E8: ; 0x020967E8
+ add r0, sp, #0x8
+ add r1, sp, #0x18
+ bl RTC_ConvertDateTimeToSecond
+ mov r4, r0
+ mov r0, #0x0
+ subs r2, r4, r0
+ sbcs r2, r1, r0
+ addlt sp, sp, #0x28
+ ldmltia sp!, {r4-r10,pc}
+_0209680C: ; 0x0209680C
+ bl OS_IsTickAvailable
+_02096810: ; 0x02096810
+ cmp r0, #0x0
+ beq _02096820
+ ldr r0, _02096978 ; =OS_GetTick
+ adds r4, r4, r0
+_02096820:
+ add r0, sp, #0x0
+ bl OS_GetMacAddress
+ ldrb r1, [sp, #0x0]
+ ldr sb, _0209697C ; =0x5D588B65
+ ldr sl, _02096980 ; =0x00269EC3
+ ldrb r0, [sp, #0x1]
+ mla r5, r4, r9, r10
+ mov r1, r1, lsl #0x10
+ orr r1, r1, r0, lsl #0x8
+ ldrb r2, [sp, #0x2]
+ ldr r0, _02096984 ; =0x000009BF
+ ldrb r6, [sp, #0x3]
+ orr r1, r2, r1
+ cmp r1, r0
+ movne r1, #0x1
+ moveq r1, #0x0
+ mov r2, r5, lsr #0x10
+ mov r0, #0x3e8
+ mul r3, r2, r0
+ mov r2, r3, lsr #0x10
+ ldrb r0, [sp, #0x5]
+ ldrb r4, [sp, #0x4]
+ mov r3, r6, lsl #0x10
+ and r7, r1, #0xff
+ orr r3, r3, r4, lsl #0x8
+ strh r2, [r8, #0x10]
+ mov r4, #0x0
+ str r4, [r8, #0x0]
+ str r4, [r8, #0x4]
+ ldrh r2, [r8, #0x12]
+ orr r6, r0, r3
+ cmp r2, #0x0
+ bne _02096910
+ str r4, [r8, #0x8]
+ str r4, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ bne _0209696C
+_020968C0:
+ mul r0, r5, r9
+ adds r5, r0, r10
+ bne _020968D8
+_020968CC:
+ mul r0, r5, r9
+ adds r5, r0, r10
+ beq _020968CC
+_020968D8:
+ strh r5, [r8, #0x12]
+ ldrh r0, [r8, #0x12]
+ mov r1, r6
+ mov r2, r7
+ mov r3, r4
+ bl FUN_02096988
+ str r0, [r8, #0x8]
+ str r1, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, #0x0
+ beq _020968C0
+ b _0209696C
+_02096910:
+ str r4, [r8, #0x8]
+ str r4, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ bne _0209696C
+ add r5, r8, #0x12
+_02096930:
+ ldrh r0, [r5, #0x0]
+ mov r1, r6
+ mov r2, r7
+ add r0, r0, #0x1
+ strh r0, [r5, #0x0]
+ ldrh r0, [r8, #0x12]
+ mov r3, r4
+ bl FUN_02096988
+ str r0, [r8, #0x8]
+ str r1, [r8, #0xc]
+ ldr r0, [r8, #0xc]
+ ldr r1, [r8, #0x8]
+ cmp r0, r4
+ cmpeq r1, r4
+ beq _02096930
+_0209696C:
+ mov r0, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_02096978: .word OS_GetTick
+_0209697C: .word 0x5D588B65
+_02096980: .word 0x00269EC3
+_02096984: .word 0x000009BF
+
+ arm_func_start FUN_02096988
+FUN_02096988: ; 0x02096988
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov lr, #0x0
+ and r12, lr, #0x0
+ mvn r5, #0xff000000
+ ldr r4, _02096B08 ; =0x0000FFFF
+ and r2, r2, #0x1
+ mov r6, r12, lsl #0x2
+ and r3, r3, #0x3
+ and r5, r1, r5
+ orr r1, r3, r2, lsl #0x2
+ orr r6, r6, r2, lsr #0x1e
+ mov r7, r12, lsl #0x3
+ and r2, r0, r4
+ orr r0, r1, r5, lsl #0x3
+ orr r1, r0, r2, lsl #0x1b
+ mov r3, r12, lsl #0x1b
+ orr r3, r3, r2, lsr #0x5
+ orr r7, r7, r5, lsr #0x1d
+ orr r0, r12, r6
+ orr r0, r7, r0
+ orr r0, r3, r0
+ add r2, sp, #0x0
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+_020969EC:
+ ldrb r0, [r2, #0x0]
+ add lr, lr, #0x1
+ cmp lr, #0x6
+ eor r0, r0, #0xd6
+ strb r0, [r2], #0x1
+ blt _020969EC
+ ldr r2, _02096B0C ; =0x020FF580
+ add r5, sp, #0x0
+ mov r4, #0x0
+_02096A10:
+ ldrb r3, [r5, #0x0]
+ add r4, r4, #0x1
+ cmp r4, #0x5
+ mov r0, r3, asr #0x4
+ and r1, r0, #0xf
+ and r0, r3, #0xf
+ ldrb r1, [r2, r1]
+ ldrb r0, [r2, r0]
+ orr r0, r0, r1, lsl #0x4
+ strb r0, [r5], #0x1
+ blt _02096A10
+ add r0, sp, #0x0
+ add r1, sp, #0x8
+ mov r2, #0x8
+ bl MI_CpuCopy8
+ ldr r4, _02096B10 ; =0x020FF578
+ add r5, sp, #0x8
+ mov r3, #0x0
+ add r1, sp, #0x0
+_02096A5C:
+ ldrb r2, [r5, #0x0]
+ ldrb r0, [r4, #0x0]
+ add r3, r3, #0x1
+ cmp r3, #0x5
+ strb r2, [r1, r0]
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blt _02096A5C
+ ldrb r2, [sp, #0x5]
+ mov r0, #0x0
+ ldr r3, [sp, #0x0]
+ and r2, r2, #0x7
+ strb r0, [sp, #0x7]
+ strb r0, [sp, #0x6]
+ strb r2, [sp, #0x5]
+ ldr r2, [sp, #0x4]
+ mov r4, r3, lsl #0x1
+ mov r2, r2, lsl #0x1
+ orr r2, r2, r3, lsr #0x1f
+ str r2, [sp, #0x4]
+ ldrb r2, [sp, #0x5]
+ str r4, [sp, #0x0]
+ ldrb r3, [sp, #0x0]
+ mov r2, r2, asr #0x3
+ and r2, r2, #0x1
+ orr r2, r3, r2
+ strb r2, [sp, #0x0]
+_02096AC8:
+ ldrb r2, [r1, #0x0]
+ add r0, r0, #0x1
+ cmp r0, #0x6
+ eor r2, r2, #0x67
+ strb r2, [r1], #0x1
+ blt _02096AC8
+ ldrb r0, [sp, #0x5]
+ mov r1, #0x0
+ strb r1, [sp, #0x7]
+ and r0, r0, #0x7
+ strb r1, [sp, #0x6]
+ strb r0, [sp, #0x5]
+ ldr r0, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_02096B08: .word 0x0000FFFF
+_02096B0C: .word 0x020FF580
+_02096B10: .word 0x020FF578
+
+ arm_func_start FUN_02096B14
+FUN_02096B14: ; 0x02096B14
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, _02096B74 ; =0x02000B8C
+ mov r4, #0x0
+ bl OSi_ReferSymbol
+ mov r0, r6
+ bl FUN_02096190
+ mov r5, r0
+ bl FUN_020964C8
+_02096B38: ; 0x02096B38
+ cmp r0, #0x0
+ beq _02096B4C
+ mov r0, r6
+ bl FUN_02096760
+ mov r4, #0x1
+_02096B4C:
+ cmp r5, #0x0
+ bge _02096B64
+ cmp r4, #0x0
+ movne r0, #0x2
+ moveq r0, #0x3
+ ldmia sp!, {r4-r6,pc}
+_02096B64:
+ cmp r4, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02096B74: .word 0x02000B8C
+
+ arm_func_start FUN_02096B78
+FUN_02096B78: ; 0x02096B78
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r7, r0
+ bl FUN_020974C8
+ mov r5, r0
+ mov r0, r4
+ bl FUN_020974C8
+_02096B98: ; 0x02096B98
+ cmp r5, r0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+_02096BA8: ; 0x02096BA8
+ cmp r5, #0x3
+ bne _02096BD8
+ mov r0, r7
+ bl FUN_02097544
+ mov r5, r0
+ mov r0, r4
+ bl FUN_02097544
+_02096BC4: ; 0x02096BC4
+ cmp r5, r0
+ moveq r0, #0x1
+ add sp, sp, #0x4
+ movne r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096BD8:
+ cmp r5, #0x1
+ bne _02096C34
+ mov r0, r7
+ bl FUN_02097568
+ mov r5, r0
+ mov r6, r1
+ mov r0, r4
+ bl FUN_02097568
+ cmp r6, r1
+ cmpeq r5, r0
+ bne _02096C28
+ mov r0, r7
+ bl FUN_02097560
+ mov r5, r0
+ mov r0, r4
+ bl FUN_02097560
+_02096C18: ; 0x02096C18
+ cmp r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r7,pc}
+_02096C28:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096C34:
+ cmp r5, #0x2
+ bne _02096C6C
+ mov r0, r7
+ bl FUN_0209754C
+ mov r5, r0
+ mov r6, r1
+ mov r0, r4
+ bl FUN_0209754C
+ cmp r6, r1
+ cmpeq r5, r0
+ moveq r0, #0x1
+ add sp, sp, #0x4
+ movne r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_02096C6C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_02096C78: ; 0x02096C78
+ ldr ip, _02096C8C ; =FUN_02097218
+ mov r3, r0
+ mov r0, r1
+ ldr r1, [r3, #0x24]
+ bx r12
+ .balign 4
+_02096C8C: .word FUN_02097218
+
+ arm_func_start FUN_02096C90
+FUN_02096C90: ; 0x02096C90
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r5
+ mov r1, r4
+ bl FUN_020974F4
+ mov r0, r5
+ mov r1, #0x3
+ bl FUN_02097440
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_02096CCC
+FUN_02096CCC: ; 0x02096CCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ mov r0, r4
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r5
+ bl FUN_0209702C
+_02096CF4: ; 0x02096CF4
+ cmp r0, #0x0
+ addeq r0, r5, #0x4
+ ldmeqia r0, {r0-r2}
+ addeq sp, sp, #0x4
+ stmeqia r4, {r0-r2}
+ ldmeqia sp!, {r4-r5,pc}
+_02096D0C: ; 0x02096D0C
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ bl FUN_020974F4
+ mov r0, r4
+ mov r1, #0x3
+ bl FUN_02097440
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_02096D2C
+FUN_02096D2C: ; 0x02096D2C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, r2
+ mov r6, r0
+ mov r1, #0x0
+ mov r2, #0xc
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020974FC
+ mov r0, r6
+ mov r1, #0x2
+ bl FUN_02097440
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_02096D68
+FUN_02096D68: ; 0x02096D68
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldr r0, [r3, #0x1c]
+ mov r2, #0x0
+ mov r1, r2
+ cmp r0, #0x0
+ beq _02096D94
+ ldr r1, [r3, #0x24]
+ bl FUN_020973D0
+ mov r2, r0
+_02096D94:
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_02096DA0
+FUN_02096DA0: ; 0x02096DA0
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r1
+ mov r6, r0
+ mov r0, r4
+ bl FUN_020974C8
+ cmp r0, #0x1
+ beq _02096E14
+ cmp r0, #0x2
+ beq _02096DD0
+ cmp r0, #0x3
+ beq _02096E08
+ b _02096E1C
+_02096DD0:
+ mov r0, r4
+ bl FUN_0209754C
+ ldr r2, [r6, #0x24]
+ mov r4, r0
+ mov r5, r1
+ bl FUN_02097344
+_02096DE8: ; 0x02096DE8
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_02096DF4: ; 0x02096DF4
+ ldr r2, [r6, #0x24]
+ mov r0, r4
+ mov r1, r5
+ bl FUN_02097324
+ ldmia sp!, {r4-r6,pc}
+_02096E08:
+ mov r0, r4
+ bl FUN_02097544
+ ldmia sp!, {r4-r6,pc}
+_02096E14:
+ mvn r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+_02096E1C:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_02096E24
+FUN_02096E24: ; 0x02096E24
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020974C8
+ cmp r0, #0x2
+ movne r0, #0x0
+ movne r1, r0
+ ldmneia sp!, {r4,pc}
+_02096E40: ; 0x02096E40
+ mov r0, r4
+ bl FUN_0209754C
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02096E4C
+FUN_02096E4C: ; 0x02096E4C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ mov r4, r0
+ ldr r1, [r4, #0x20]
+ add r0, sp, #0x0
+ bic r2, r1, #0x1
+ ldr r1, _02096E8C ; =0xEDB88320
+ str r2, [r4, #0x20]
+ bl MATHi_CRC32InitTableRev
+_02096E70: ; 0x02096E70
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r4, #0x3c]
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096E8C: .word 0xEDB88320
+
+ arm_func_start thunk_FUN_02096e4c
+thunk_FUN_02096e4c: ; 0x02096E90
+ ldr ip, _02096E98 ; =FUN_02096E4C
+ bx r12
+ .balign 4
+_02096E98: .word FUN_02096E4C
+
+ arm_func_start FUN_02096E9C
+FUN_02096E9C: ; 0x02096E9C
+ ldr r0, [r0, #0x20]
+ and r0, r0, #0x1
+ cmp r0, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start FUN_02096EB4
+FUN_02096EB4: ; 0x02096EB4
+ ldr ip, _02096EBC ; =FUN_02096E9C
+ bx r12
+ .balign 4
+_02096EBC: .word FUN_02096E9C
+
+ arm_func_start FUN_02096EC0
+FUN_02096EC0: ; 0x02096EC0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ mov r4, r0
+ add r3, r4, #0x10
+ mov r12, r2
+ ldmia r1, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r1, _02096F14 ; =0xEDB88320
+ add r0, sp, #0x0
+ str r12, [r4, #0x1c]
+ bl MATHi_CRC32InitTableRev
+_02096EEC: ; 0x02096EEC
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r4, #0x3c]
+ ldr r0, [r4, #0x20]
+ orr r0, r0, #0x1
+ str r0, [r4, #0x20]
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096F14: .word 0xEDB88320
+
+ arm_func_start FUN_02096F18
+FUN_02096F18: ; 0x02096F18
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, r4, #0x10
+ bl FUN_020974C8
+_02096F2C: ; 0x02096F2C
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+_02096F3C: ; 0x02096F3C
+ add r0, sp, #0x0
+ bl FUN_02096518
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x18
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_02096F58: ; 0x02096F58
+ add r0, r4, #0x10
+ bl FUN_02097568
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x0]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02096F80
+FUN_02096F80: ; 0x02096F80
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r0, r4, #0x10
+ bl FUN_0209703C
+_02096F90: ; 0x02096F90
+ cmp r0, #0x0
+ beq _02096FA8
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x0
+ movgt r0, #0x1
+ ldmgtia sp!, {r4,pc}
+_02096FA8:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02096FB0
+FUN_02096FB0: ; 0x02096FB0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x400
+ ldr r1, _02096FF0 ; =0xEDB88320
+ mov r4, r0
+ add r0, sp, #0x0
+ bl MATHi_CRC32InitTableRev
+_02096FC8: ; 0x02096FC8
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ ldr r1, [r4, #0x3c]
+ cmp r0, r1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x400
+ ldmia sp!, {r4,pc}
+ .balign 4
+_02096FF0: .word 0xEDB88320
+
+ arm_func_start thunk_FUN_02097190
+thunk_FUN_02097190: ; 0x02096FF4
+ ldr ip, _02096FFC ; =FUN_02097190
+ bx r12
+ .balign 4
+_02096FFC: .word FUN_02097190
+
+ arm_func_start FUN_02097000
+FUN_02097000: ; 0x02097000
+ ldr ip, _02097008 ; =FUN_0209700C
+ bx r12
+ .balign 4
+_02097008: .word FUN_0209700C
+
+ arm_func_start FUN_0209700C
+FUN_0209700C: ; 0x0209700C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020974C8
+_02097018: ; 0x02097018
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_0209702C
+FUN_0209702C:
+ ldr ip, _02097038 ; =FUN_0209703C
+ add r0, r0, #0x10
+ bx r12
+ .balign 4
+_02097038: .word FUN_0209703C
+
+ arm_func_start FUN_0209703C
+FUN_0209703C:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020974C8
+ cmp r0, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_0209705C
+FUN_0209705C: ; 0x0209705C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ mov r4, r0
+ add r0, sp, #0x0
+ bl FUN_02096518
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _020970A4
+ mov r0, r4
+ bl FUN_02097568
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x0]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ add sp, sp, #0x18
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020970A4:
+ mov r0, r4
+ bl FUN_02097568
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x8]
+ cmp r2, r1
+ cmpeq r3, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020970CC
+FUN_020970CC: ; 0x020970CC
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x38
+ mov r6, r0
+ add r0, sp, #0x14
+ bl OS_GetLowEntropyData
+ mov r3, #0x1
+ add r2, sp, #0x14
+_020970E8:
+ add r0, r2, r3, lsl #0x2
+ ldr r1, [r2, r3, lsl #0x2]
+ ldr r0, [r0, #-0x4]
+ eor r0, r1, r0
+ str r0, [r2, r3, lsl #0x2]
+ add r3, r3, #0x1
+ cmp r3, #0x8
+ blo _020970E8
+ add r0, sp, #0x0
+ ldr r5, [sp, #0x30]
+ mov r4, #0x0
+ bl FUN_02096518
+ ldr r0, [sp, #0x10]
+ cmp r0, #0x0
+ beq _02097138
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ mov r0, r6
+ bl FUN_02097510
+ b _02097148
+_02097138:
+ ldr r1, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r0, r6
+ bl FUN_02097510
+_02097148:
+ ldr r0, _02097184 ; =0x6C078965
+ ldr r1, _02097188 ; =0x5D588B65
+ umull r3, r2, r5, r0
+ mla r2, r5, r1, r2
+ ldr r1, _0209718C ; =0x00269EC3
+ mla r2, r4, r0, r2
+ adds r0, r3, r1
+ mov r0, r6
+ adc r1, r2, #0x0
+ bl FUN_02097508
+ mov r0, r6
+ mov r1, #0x1
+ bl FUN_02097440
+ add sp, sp, #0x38
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_02097184: .word 0x6C078965
+_02097188: .word 0x5D588B65
+_0209718C: .word 0x00269EC3
+
+ arm_func_start FUN_02097190
+FUN_02097190: ; 0x02097190
+ stmdb sp!, {r4-r5,lr}
+ ldr ip, _02097210 ; =0x00000404
+ sub sp, sp, r12
+ mov r4, r1
+ mov r1, #0x0
+ mov r2, #0x40
+ mov r5, r0
+ bl MI_CpuFill8
+ mov r0, #0x40
+ str r0, [r5, #0x0]
+ mov r0, #0x0
+ str r0, [r5, #0x1c]
+ add r0, r5, #0x4
+ str r4, [r5, #0x24]
+ bl FUN_020970CC
+ add r0, r5, #0x10
+ mov r1, #0x0
+ bl FUN_02097440
+ ldr r1, _02097214 ; =0xEDB88320
+ add r0, sp, #0x0
+ bl MATHi_CRC32InitTableRev
+_020971E4: ; 0x020971E4
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, #0x3c
+ bl MATH_CalcCRC32
+ str r0, [r5, #0x3c]
+ ldr r0, [r5, #0x20]
+ orr r0, r0, #0x1
+ str r0, [r5, #0x20]
+ ldr ip, _02097210 ; =0x00000404
+ add sp, sp, r12
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_02097210: .word 0x00000404
+_02097214: .word 0xEDB88320
+
+ arm_func_start FUN_02097218
+FUN_02097218: ; 0x02097218
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x40
+ mov r6, r0
+ mov r4, r1
+ mov r5, r2
+ bl FUN_02097568
+ add r3, sp, #0x14
+ mov r2, #0x2b
+ bl FUN_020972A8
+ mov r0, r6
+ bl FUN_02097560
+ mov r1, #0x0
+ mov r2, #0x20
+ add r3, sp, #0x29
+ bl FUN_020972A8
+ mov r1, r4, lsr #0x18
+ and r1, r1, #0xff
+ str r1, [sp, #0x0]
+ mov r1, r4, lsr #0x10
+ and r1, r1, #0xff
+ str r1, [sp, #0x4]
+ mov r1, r4, lsr #0x8
+ and r1, r1, #0xff
+ str r1, [sp, #0x8]
+ and r1, r4, #0xff
+ str r1, [sp, #0xc]
+ add r2, sp, #0x29
+ str r2, [sp, #0x10]
+ ldr r2, _020972A4 ; =0x0210618C
+ mov r0, r5
+ mov r1, #0x15
+ add r3, sp, #0x14
+ bl OS_SNPrintf
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020972A4: .word 0x0210618C
+
+ arm_func_start FUN_020972A8
+FUN_020972A8: ; 0x020972A8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr lr, _0209731C ; =0x66666667
+ add r4, r2, #0x4
+ smull r12, r2, lr, r4
+ mov r2, r2, asr #0x1
+ mov r12, r4, lsr #0x1f
+ add r2, r12, r2
+ cmp r2, #0x0
+ ldr r6, _02097320 ; =0x0210619C
+ mov r7, #0x0
+ ble _0209730C
+ add r4, r3, r2
+ sub r4, r4, #0x1
+ mov r12, #0x1f
+_020972E4:
+ and r5, r0, r12
+ ldrsb r5, [r6, r5]
+ mov r0, r0, lsr #0x5
+ mov lr, r1, lsr #0x5
+ strb r5, [r4, -r7]
+ add r7, r7, #0x1
+ orr r0, r0, r1, lsl #0x1b
+ mov r1, lr
+ cmp r7, r2
+ blt _020972E4
+_0209730C:
+ mov r0, #0x0
+ strb r0, [r3, r2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_0209731C: .word 0x66666667
+_02097320: .word 0x0210619C
+
+ arm_func_start FUN_02097324
+FUN_02097324: ; 0x02097324
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_02097344
+_02097330: ; 0x02097330
+ cmp r0, #0x0
+ mvnne r0, #0x0
+ andne r0, r4, r0
+ moveq r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02097344
+FUN_02097344:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x108
+ mov r4, r1
+ and r3, r4, #0x0
+ mov r1, #0x0
+ and r12, r0, #0x80000000
+ cmp r3, r1
+ cmpeq r12, r1
+ addne sp, sp, #0x108
+ movne r0, r1
+ ldmneia sp!, {r4,pc}
+_02097370: ; 0x02097370
+ str r0, [sp, #0x0]
+ add r0, sp, #0x8
+ mov r1, #0x7
+ str r2, [sp, #0x4]
+ bl MATHi_CRC8InitTable
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x8
+ bl MATH_CalcCRC8
+ and r2, r0, #0x7f
+ mov r1, r2, asr #0x1f
+ mov r0, #0x0
+ cmp r1, r0
+ cmpeq r2, r4
+ moveq r0, #0x1
+ add sp, sp, #0x108
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020973B4
+FUN_020973B4: ; 0x020973B4
+ ldr ip, _020973CC ; =FUN_02097344
+ mov r3, r0
+ mov r0, r1
+ mov r1, r2
+ ldr r2, [r3, #0x24]
+ bx r12
+ .balign 4
+_020973CC: .word FUN_02097344
+
+ arm_func_start FUN_020973D0
+FUN_020973D0: ; 0x020973D0
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x108
+ mov r4, r0
+ str r1, [sp, #0x4]
+ add r0, sp, #0x8
+ mov r1, #0x7
+ str r4, [sp, #0x0]
+ bl MATHi_CRC8InitTable
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x8
+ bl MATH_CalcCRC8
+ and r0, r0, #0x7f
+ orr r1, r0, #0x0
+ orr r0, r4, #0x0
+ add sp, sp, #0x108
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02097414
+FUN_02097414: ; 0x02097414
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020974C8
+ cmp r0, #0x3
+ ldmneia sp!, {r4,pc}
+_02097428: ; 0x02097428
+ mov r0, r4
+ bl FUN_020974E0
+ orr r1, r0, #0x4
+ mov r0, r4
+ bl FUN_0209746C
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_02097440
+FUN_02097440: ; 0x02097440
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_020974E0
+ bic r1, r0, #0x3
+ mov r0, r5
+ orr r1, r1, r4
+ bl FUN_0209746C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_0209746C
+FUN_0209746C: ; 0x0209746C
+ ldr ip, _0209747C ; =FUN_02097588
+ ldr r3, _02097480 ; =0x001FFFFF
+ mov r2, #0xb
+ bx r12
+ .balign 4
+_0209747C: .word FUN_02097588
+_02097480: .word 0x001FFFFF
+
+ arm_func_start FUN_02097484
+FUN_02097484: ; 0x02097484
+ ldr ip, _0209748C ; =FUN_020974C8
+ bx r12
+ .balign 4
+_0209748C: .word FUN_020974C8
+
+ arm_func_start FUN_02097490
+FUN_02097490: ; 0x02097490
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020974C8
+ cmp r0, #0x3
+ bne _020974C0
+ mov r0, r4
+ bl FUN_020974E0
+ and r0, r0, #0x4
+ cmp r0, #0x4
+ moveq r0, #0x1
+ movne r0, #0x0
+ ldmia sp!, {r4,pc}
+_020974C0:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020974C8
+FUN_020974C8: ; 0x020974C8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020974E0
+ and r0, r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020974E0
+FUN_020974E0: ; 0x020974E0
+ ldr r1, [r0, #0x0]
+ ldr r0, _020974F0 ; =0x001FFFFF
+ and r0, r0, r1, lsr #0xb
+ bx lr
+ .balign 4
+_020974F0: .word 0x001FFFFF
+
+ arm_func_start FUN_020974F4
+FUN_020974F4: ; 0x020974F4
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_020974FC
+FUN_020974FC: ; 0x020974FC
+ str r1, [r0, #0x4]
+ str r2, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_02097508
+FUN_02097508: ; 0x02097508
+ str r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_02097510
+FUN_02097510: ; 0x02097510
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ mov r4, r1
+ mov r1, r2
+ ldr r3, _02097540 ; =0x000007FF
+ mov r2, r12
+ mov r5, r0
+ bl FUN_02097588
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_02097540: .word 0x000007FF
+
+ arm_func_start FUN_02097544
+FUN_02097544:
+ ldr r0, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_0209754C
+FUN_0209754C: ; 0x0209754C
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0x4]
+ orr r1, r1, #0x0
+ orr r0, r0, #0x0
+ bx lr
+
+ arm_func_start FUN_02097560
+FUN_02097560:
+ ldr r0, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_02097568
+FUN_02097568: ; 0x02097568
+ ldr r2, [r0, #0x0]
+ ldr r1, _02097584 ; =0x000007FF
+ ldr r0, [r0, #0x4]
+ and r1, r2, r1
+ orr r1, r1, #0x0
+ orr r0, r0, #0x0
+ bx lr
+ .balign 4
+_02097584: .word 0x000007FF
+
+ arm_func_start FUN_02097588
+FUN_02097588: ; 0x02097588
+ mvn r12, r3
+ ands r12, r1, r12
+ movne r0, #0x0
+ bxne lr
+ mvn r3, r3, lsl r2
+ ldr r12, [r0, #0x0]
+ and r3, r12, r3
+ orr r1, r3, r1, lsl r2
+ str r1, [r0, #0x0]
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FUN_020975B4
+FUN_020975B4: ; 0x020975B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020A8850
+_020975C0: ; 0x020975C0
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020975D8
+FUN_020975D8: ; 0x020975D8
+ ldr r0, _020975EC ; =0x021C8CCC
+ ldr r1, [r0, #0x0]
+ orr r1, r1, #0x2
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020975EC: .word 0x021C8CCC
+
+ arm_func_start FUN_020975F0
+FUN_020975F0: ; 0x020975F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02097654 ; =0x021C8CC0
+ ldr r0, _02097658 ; =0x021C8CCC
+ ldr lr, [r1, #0x0]
+ ldr r3, [r0, #0x0]
+ ldr r12, [lr, #0x4]
+ ldr r2, _0209765C ; =0x021C8F04
+ ldr r1, _02097660 ; =0x021C8ED0
+ str r12, [r2, #0x0]
+ ldr r12, [lr, #0x8]
+ ldr r2, _02097664 ; =0x021C8EE0
+ str r12, [r1, #0x0]
+ ldr r12, [lr, #0xc]
+ ldr r1, _02097668 ; =0x021C8F1C
+ str r12, [r2, #0x0]
+ ldr r12, [lr, #0x10]
+ orr r2, r3, #0x2
+ str r12, [r1, #0x0]
+ ldr r3, [lr, #0x14]
+ str r3, [r1, #0x4]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097654: .word 0x021C8CC0
+_02097658: .word 0x021C8CCC
+_0209765C: .word 0x021C8F04
+_02097660: .word 0x021C8ED0
+_02097664: .word 0x021C8EE0
+_02097668: .word 0x021C8F1C
+
+ arm_func_start FUN_0209766C
+FUN_0209766C: ; 0x0209766C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020977C0 ; =0x021C8CC0
+ ldr r5, _020977C4 ; =0x021C8CD4
+ ldr r4, [r0, #0x0]
+ mov r0, r5
+ mov r1, #0x0
+ mov r2, #0x30
+ bl MI_CpuFill8
+ ldr r0, _020977C8 ; =0x021C8CC4
+ ldr r2, [r4, #0x18]
+ mov r1, r5
+ str r2, [r1, #0x4]
+ ldr r12, [r4, #0x1c]
+ mov r2, #0x0
+ ldr r3, _020977CC ; =FUN_020975B4
+ ldr r0, [r0, #0x0]
+ str r12, [r1, #0x8]
+ str r3, [r1, #0x10]
+ str r2, [r1, #0x14]
+ str r2, [r1, #0x18]
+ str r0, [r1, #0x2c]
+ ldr r0, [r4, #0x24]
+ cmp r0, #0x0
+ strne r0, [r5, #0x20]
+ moveq r0, #0x4000
+ streq r0, [r5, #0x20]
+ ldr r0, [r4, #0x28]
+ cmp r0, #0x0
+ strne r0, [r5, #0x1c]
+ bne _02097700
+ ldr r1, _020977C0 ; =0x021C8CC0
+ ldr r0, [r5, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x18]
+ blx r1
+ str r0, [r5, #0x1c]
+_02097700:
+ ldr r0, [r4, #0x30]
+ ldr r12, [r4, #0x34]
+ cmp r0, #0x0
+ moveq r0, #0x240
+ cmp r12, #0x0
+ sub r2, r0, #0x28
+ moveq r12, #0x10c0
+ add r0, r12, r12, lsr #0x1f
+ str r2, [r5, #0x24]
+ ldr r1, _020977D0 ; =0x021061DC
+ mov r3, r0, asr #0x1
+ ldr r0, _020977D4 ; =0x021C8F04
+ mov r2, #0x0
+ strh r12, [r1, #0x2]
+ strh r3, [r1, #0x4]
+ str r2, [r0, #0x0]
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02097774
+ ldr r0, _020977D8 ; =0x021C8CCC
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ ldr r1, _020977DC ; =FUN_020975D8
+ str r2, [r5, #0x0]
+ ldr r0, _020977E0 ; =0x021C8CC8
+ str r1, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ str r0, [r5, #0x28]
+ b _0209778C
+_02097774:
+ ldr r0, _020977D8 ; =0x021C8CCC
+ mov r1, #0x1
+ str r2, [r0, #0x0]
+ ldr r0, _020977E4 ; =FUN_020975F0
+ str r1, [r5, #0x0]
+ str r0, [r5, #0xc]
+_0209778C:
+ ldr r0, [r4, #0x2c]
+ cmp r0, #0x0
+ moveq r0, #0xb
+ bl FUN_0209FC88
+ ldr r0, _020977E8 ; =FUN_0209F65C
+ bl FUN_020A87BC
+ ldr r0, _020977EC ; =FUN_020996C0
+ bl FUN_0209FD24
+ mov r0, r5
+ bl FUN_0209FD94
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020977C0: .word 0x021C8CC0
+_020977C4: .word 0x021C8CD4
+_020977C8: .word 0x021C8CC4
+_020977CC: .word FUN_020975B4
+_020977D0: .word 0x021061DC
+_020977D4: .word 0x021C8F04
+_020977D8: .word 0x021C8CCC
+_020977DC: .word FUN_020975D8
+_020977E0: .word 0x021C8CC8
+_020977E4: .word FUN_020975F0
+_020977E8: .word FUN_0209F65C
+_020977EC: .word FUN_020996C0
+
+ arm_func_start FUN_020977F0
+FUN_020977F0: ; 0x020977F0
+ stmdb sp!, {r4,lr}
+ ldr r0, _02097828 ; =0x021C8CC0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x20]
+ bl FUN_02097B78
+ movs r4, r0
+ bmi _0209781C
+ ldr r0, _0209782C ; =0x021061F4
+ bl FUN_02097F70
+ ldr r1, _02097830 ; =0x021C8CD0
+ str r0, [r1, #0x0]
+_0209781C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097828: .word 0x021C8CC0
+_0209782C: .word 0x021061F4
+_02097830: .word 0x021C8CD0
+
+ arm_func_start FUN_02097834
+FUN_02097834: ; 0x02097834
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _02097870 ; =0x02000BC4
+ bl OSi_ReferSymbol
+ ldr r0, _02097874 ; =0x021C8CC0
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ str r4, [r0, #0x0]
+ bl FUN_0209766C
+ bl FUN_020977F0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097870: .word 0x02000BC4
+_02097874: .word 0x021C8CC0
+
+ arm_func_start FUN_02097878
+FUN_02097878: ; 0x02097878
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ add r6, sp, #0x0
+ mov r4, #0x0
+ mov r5, #0x1
+_02097890:
+ mov r0, r9
+ mov r1, r6
+ mov r2, r5
+ bl OS_ReadMessage
+_020978A0: ; 0x020978A0
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r1, [r0, #0x0]
+ blx r1
+ mov r7, r0
+ bl OS_DisableInterrupts
+ mov r8, r0
+ bl OS_DisableScheduler
+ mov r0, r9
+ mov r1, r4
+ mov r2, r4
+ bl OS_ReceiveMessage
+_020978DC: ; 0x020978DC
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ strne r7, [r0, #0x6c]
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ beq _02097908
+ mov r1, r7
+ mov r2, r4
+ bl OS_SendMessage
+_02097908:
+ ldr r0, [sp, #0x0]
+ bl FUN_02097A64
+ bl OS_EnableScheduler
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ b _02097890
+_02097920: ; 0x02097920
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_0209792C
+FUN_0209792C: ; 0x0209792C
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl FUN_02097A50
+ mov r1, r4
+ bl FUN_02097968
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02097948
+FUN_02097948:
+ ldr ip, _02097954 ; =FUN_02097968
+ ldr r0, [r0, #0x68]
+ bx r12
+ .balign 4
+_02097954: .word FUN_02097968
+
+ arm_func_start FUN_02097958
+FUN_02097958: ; 0x02097958
+ ldr ip, _02097964 ; =FUN_02097968
+ ldr r0, [r0, #0x64]
+ bx r12
+ .balign 4
+_02097964: .word FUN_02097968
+
+ arm_func_start FUN_02097968
+FUN_02097968: ; 0x02097968
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x2c
+ mov r4, r1
+ ldrsb r2, [r4, #0xd]
+ mov r5, r0
+ cmp r2, #0x1
+ bne _020979BC
+ add r0, sp, #0x8
+ add r1, sp, #0x4
+ mov r2, #0x1
+ bl OS_InitMessageQueue
+ add r2, sp, #0x8
+ mov r0, r5
+ mov r1, r4
+ str r2, [r4, #0x8]
+ bl FUN_020979F8
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x1
+ bl OS_ReceiveMessage
+ b _020979CC
+_020979BC:
+ mov r2, #0x0
+ str r2, [r4, #0x8]
+ bl FUN_020979F8
+_020979C8: ; 0x020979C8
+ str r0, [sp, #0x0]
+_020979CC:
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020979DC
+FUN_020979DC:
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl FUN_02097A50
+ mov r1, r4
+ bl FUN_020979F8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020979F8
+FUN_020979F8:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r1
+ beq _02097A14
+ ldrsb r1, [r5, #0xd]
+ ands r1, r1, #0x1
+ beq _02097A1C
+_02097A14:
+ mov r2, #0x1
+ b _02097A20
+_02097A1C:
+ mov r2, #0x0
+_02097A20:
+ mov r1, r5
+ bl OS_SendMessage
+ movs r4, r0
+ bne _02097A38
+ mov r0, r5
+ bl FUN_02097A64
+_02097A38:
+ cmp r4, #0x0
+ movne r0, #0x0
+ mvneq r0, #0x29
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02097A50
+FUN_02097A50: ; 0x02097A50
+ ldr r1, [r0, #0x64]
+ cmp r1, #0x0
+ ldreq r1, [r0, #0x68]
+ mov r0, r1
+ bx lr
+
+ arm_func_start FUN_02097A64
+FUN_02097A64:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ movs r1, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, _02097A94 ; =0x021C8D08
+ mov r2, #0x0
+ bl OS_SendMessage
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097A94: .word 0x021C8D08
+
+ arm_func_start FUN_02097A98
+FUN_02097A98: ; 0x02097A98
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r2
+ mov r6, r0
+ mov r0, r4
+ mov r5, r1
+ bl FUN_02097AE0
+_02097AB0: ; 0x02097AB0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ str r6, [r0, #0x0]
+ str r5, [r0, #0x4]
+ mov r1, #0x0
+ str r1, [r0, #0x8]
+ ldrsb r1, [r5, #0x73]
+ strb r1, [r0, #0xc]
+ strb r4, [r0, #0xd]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02097AE0
+FUN_02097AE0:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r0
+ ldr r0, _02097B10 ; =0x021C8D08
+ add r1, sp, #0x0
+ bl OS_ReceiveMessage
+_02097AF8: ; 0x02097AF8
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x0]
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097B10: .word 0x021C8D08
+
+ arm_func_start FUN_02097B14
+FUN_02097B14: ; 0x02097B14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _02097B6C ; =0x021C8D08
+ ldr r1, [r0, #0x1c]
+ ldr r0, [r0, #0x14]
+ cmp r1, r0
+ addlt sp, sp, #0x4
+ mvnlt r0, #0x0
+ ldmltia sp!, {lr}
+ bxlt lr
+ ldr r0, _02097B70 ; =0x021C8CC0
+ ldr r1, _02097B74 ; =0x021C8D04
+ ldr r2, [r0, #0x0]
+ ldr r0, [r1, #0x0]
+ ldr r1, [r2, #0x1c]
+ blx r1
+ ldr r1, _02097B74 ; =0x021C8D04
+ mov r0, #0x0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097B6C: .word 0x021C8D08
+_02097B70: .word 0x021C8CC0
+_02097B74: .word 0x021C8D04
+
+ arm_func_start FUN_02097B78
+FUN_02097B78: ; 0x02097B78
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ mov r0, #0x2c
+ mul r1, r4, r0
+ ldr r0, _02097C08 ; =0x021C8CC0
+ mov r2, r4, lsl #0x2
+ add r2, r2, #0x3
+ ldr r0, [r0, #0x0]
+ add r1, r1, #0x3
+ bic r5, r2, #0x3
+ bic r2, r1, #0x3
+ ldr r1, [r0, #0x18]
+ add r0, r2, r5
+ blx r1
+ movs r6, r0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _02097C0C ; =0x021C8D08
+ mov r1, r6
+ mov r2, r4
+ bl OS_InitMessageQueue
+_02097BD0: ; 0x02097BD0
+ cmp r4, #0x0
+ add r5, r6, r5
+ ble _02097BF4
+_02097BDC:
+ mov r0, r5
+ bl FUN_02097A64
+ sub r4, r4, #0x1
+ cmp r4, #0x0
+ add r5, r5, #0x2c
+ bgt _02097BDC
+_02097BF4:
+ ldr r1, _02097C10 ; =0x021C8D04
+ mov r0, #0x0
+ str r6, [r1, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02097C08: .word 0x021C8CC0
+_02097C0C: .word 0x021C8D08
+_02097C10: .word 0x021C8D04
+
+ arm_func_start FUN_02097C14
+FUN_02097C14: ; 0x02097C14
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r5, r2
+ mov r7, r0
+ mov r0, r5
+ mov r6, r1
+ bl FUN_02097DC4
+ add r4, r7, r0
+ ldrb r2, [r5, #0x3]
+ mov r0, r6
+ mov r1, r7
+ bl OS_InitMessageQueue
+ add r0, r6, #0xe0
+ bl OS_InitMutex
+ ldrh r2, [r5, #0x0]
+ add r0, r6, #0x20
+ ldr r1, _02097C88 ; =FUN_02097878
+ str r2, [sp, #0x0]
+ ldrb r12, [r5, #0x2]
+ mov r2, r6
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ add r0, r6, #0x20
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097C88: .word FUN_02097878
+
+ arm_func_start FUN_02097C8C
+FUN_02097C8C: ; 0x02097C8C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ cmp r2, #0x0
+ moveq r0, #0x0
+ str r0, [r1, #0x4]
+ mov r0, r2
+ str r2, [r1, #0x0]
+ bl FUN_02099F6C
+_02097CAC: ; 0x02097CAC
+ add r0, r4, r0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02097CB8
+FUN_02097CB8: ; 0x02097CB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldrsb r1, [r6, #0x0]
+ mov r7, r0
+ add r4, r7, #0x80
+ strb r1, [r7, #0x73]
+ ldrsb r0, [r6, #0x1]
+ strb r0, [r7, #0x72]
+ ldrh r0, [r6, #0x2]
+ cmp r0, #0x0
+ beq _02097D40
+ str r4, [r7, #0x64]
+ ldrh r2, [r6, #0x4]
+ mov r1, r4
+ add r0, r4, #0x114
+ strh r2, [r4, #0xfc]
+ add r2, r6, #0x10
+ mov r5, r4
+ bl FUN_02097C14
+ ldrh r2, [r6, #0x2]
+ add r1, r7, #0x3c
+ bl FUN_02097C8C
+ ldrh r2, [r6, #0x8]
+ add r1, r7, #0x50
+ bl FUN_02097C8C
+ ldrh r3, [r6, #0xe]
+ add r1, r5, #0x100
+ mov r2, #0x0
+ strh r3, [r1, #0xa]
+ str r2, [r5, #0x110]
+ ldr r1, [r5, #0x110]
+ mov r4, r0
+ str r1, [r5, #0x10c]
+_02097D40:
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x0
+ ldreq r0, _02097DC0 ; =0x021C8CD0
+ ldreq r0, [r0, #0x0]
+ ldreq r0, [r0, #0x68]
+ streq r0, [r7, #0x68]
+ beq _02097DB0
+ str r4, [r7, #0x68]
+ mov r1, r4
+ str r7, [r4, #0x10c]
+ add r0, r4, #0x110
+ add r2, r6, #0x14
+ mov r5, r4
+ bl FUN_02097C14
+ ldrh r2, [r6, #0x6]
+ add r1, r7, #0x48
+ bl FUN_02097C8C
+ ldrh r2, [r6, #0xa]
+ add r1, r7, #0x58
+ bl FUN_02097C8C
+ ldrh r2, [r6, #0xc]
+ add r1, r4, #0xf8
+ bl FUN_02097C8C
+ mov r1, #0x0
+ str r1, [r5, #0x108]
+ ldr r1, [r5, #0x108]
+ mov r4, r0
+ str r1, [r5, #0x104]
+_02097DB0:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097DC0: .word 0x021C8CD0
+
+ arm_func_start FUN_02097DC4
+FUN_02097DC4: ; 0x02097DC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x3]
+ mov r0, r0, lsl #0x2
+ bl FUN_02099F6C
+ mov r4, r0
+ ldrh r0, [r5, #0x0]
+ bl FUN_02099F6C
+_02097DE8: ; 0x02097DE8
+ add r0, r4, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02097DF8
+FUN_02097DF8: ; 0x02097DF8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x2]
+ mov r4, #0x80
+ cmp r0, #0x0
+ beq _02097E38
+ add r4, r4, #0x114
+ bl FUN_02099F6C
+ add r4, r4, r0
+ ldrh r0, [r5, #0x8]
+ bl FUN_02099F6C
+ add r4, r4, r0
+ add r0, r5, #0x10
+ bl FUN_02097DC4
+ add r4, r4, r0
+_02097E38:
+ ldrh r0, [r5, #0x6]
+ cmp r0, #0x0
+ beq _02097E74
+ add r4, r4, #0x110
+ bl FUN_02099F6C
+ add r4, r4, r0
+ ldrh r0, [r5, #0xa]
+ bl FUN_02099F6C
+ add r4, r4, r0
+ ldrh r0, [r5, #0xc]
+ bl FUN_02099F6C
+ add r4, r4, r0
+ add r0, r5, #0x14
+ bl FUN_02097DC4
+ add r4, r4, r0
+_02097E74:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02097E84
+FUN_02097E84: ; 0x02097E84
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl FUN_02097DF8
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _02097EF4 ; =0x021C8CC0
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ mov r0, r4
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r6, r0
+ beq _02097EDC
+ mov r2, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r7
+ bl FUN_02097CB8
+ mov r0, r6
+ bl FUN_0209A094
+_02097EDC:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097EF4: .word 0x021C8CC0
+
+ arm_func_start FUN_02097EF8
+FUN_02097EF8: ; 0x02097EF8
+ stmdb sp!, {r4,lr}
+ ldr r4, [r0, #0x4]
+ mov r0, r4
+ bl FUN_0209CC28
+ ldrsb r0, [r4, #0x73]
+ ldr r1, [r4, #0x68]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _02097F58
+_02097F1C:
+ b _02097F30
+_02097F20:
+ b _02097F40
+_02097F24:
+ b _02097F54
+_02097F28:
+ b _02097F58
+_02097F2C:
+ b _02097F30
+_02097F30:
+ add r0, r1, #0x20
+ bl FUN_0209CB0C
+ bl FUN_0209CB44
+ b _02097F58
+_02097F40:
+ bl FUN_0209CB44
+ bl FUN_0209CBE8
+ ldr r0, _02097F6C ; =FUN_02098550
+ bl FUN_0209CAA8
+_02097F50: ; 0x02097F50
+ b _02097F58
+_02097F54:
+ bl FUN_0209CBE8
+_02097F58:
+ mov r0, #0x1
+ strh r0, [r4, #0x70]
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097F6C: .word FUN_02098550
+
+ arm_func_start FUN_02097F70
+FUN_02097F70: ; 0x02097F70
+ stmdb sp!, {r4,lr}
+ bl FUN_02097E84
+ movs r4, r0
+ mvneq r0, #0x30
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _02097FB0 ; =FUN_02097EF8
+ mov r1, r4
+ mov r2, #0x1
+ bl FUN_02097A98
+ mov r1, r0
+ mov r0, r4
+ bl FUN_0209792C
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097FB0: .word FUN_02097EF8
+
+ arm_func_start FUN_02097FB4
+FUN_02097FB4: ; 0x02097FB4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ ldr r4, [r6, #0x4]
+ ldr r5, [r4, #0x64]
+ add r0, r5, #0xe0
+ bl OS_LockMutex
+ mov r1, #0x0
+ ldrh r0, [r6, #0x10]
+ mov r2, r1
+ bl FUN_0209CB78
+ bl FUN_0209CA54
+ mov r2, #0x0
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ str r2, [r5, #0xf8]
+ bl FUN_0209C8E0
+ ldrh r2, [sp, #0x0]
+ ldr r1, [r6, #0x14]
+ strh r2, [r1, #0x0]
+ ldr r1, [r6, #0x18]
+ str r0, [r1, #0x0]
+ ldrsh r1, [r4, #0x70]
+ add r0, r5, #0xe0
+ orr r1, r1, #0x4
+ strh r1, [r4, #0x70]
+ bl OS_UnlockMutex
+_02098020: ; 0x02098020
+ mov r0, #0x0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02098030
+FUN_02098030:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_02099FA8
+_02098044: ; 0x02098044
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _0209806C
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_0209806C:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020980A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020980A8:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsb r2, [r6, #0x72]
+ cmp r2, #0x1
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrh r0, [r6, #0x74]
+ cmp r0, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _0209811C ; =FUN_02097FB4
+ mov r1, r6
+ bl FUN_02097A98
+ mov r1, r0
+ ldrh r2, [r6, #0x74]
+ mov r0, r6
+ strh r2, [r1, #0x10]
+ str r5, [r1, #0x14]
+ str r4, [r1, #0x18]
+ ldrsh r2, [r6, #0x70]
+ orr r2, r2, #0x2
+ strh r2, [r6, #0x70]
+ bl FUN_02097958
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209811C: .word FUN_02097FB4
+
+ arm_func_start FUN_02098120
+FUN_02098120:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_02099FA8
+_02098138: ; 0x02098138
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _02098164
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098164:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020981A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020981A8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsb r0, [r6, #0x72]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r0, _02098228 ; =0x021061DC
+ bl FUN_02097F70
+ movs r7, r0
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r7,lr}
+ bxmi lr
+ ldrh r1, [r6, #0x74]
+ bl FUN_020984B4
+_020981F4: ; 0x020981F4
+ cmp r0, #0x0
+ addlt sp, sp, #0x4
+ ldmltia sp!, {r4-r7,lr}
+ bxlt lr
+ mov r0, r7
+ mov r1, r5
+ mov r2, r4
+ bl FUN_02098030
+_02098214: ; 0x02098214
+ cmp r0, #0x0
+ movge r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02098228: .word 0x021061DC
+
+ arm_func_start FUN_0209822C
+FUN_0209822C: ; 0x0209822C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_02099FA8
+_02098238: ; 0x02098238
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _02098260
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098260:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrsb r0, [r4, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209829C
+ cmp r0, #0x4
+ movne r1, #0x0
+_0209829C:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsb r0, [r4, #0x72]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ mvnne r0, #0x5
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020982C4
+FUN_020982C4: ; 0x020982C4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r4, [r7, #0x4]
+ mov r5, #0x0
+ ldr r6, [r4, #0x64]
+ add r0, r6, #0xe0
+ bl OS_LockMutex
+ ldrh r0, [r7, #0x10]
+ ldrh r1, [r7, #0x12]
+ ldr r2, [r7, #0x14]
+ bl FUN_0209CB78
+ mov r0, r5
+ str r0, [r6, #0xf8]
+ ldrsb r0, [r7, #0xc]
+ cmp r0, #0x0
+ beq _02098310
+ cmp r0, #0x4
+ bne _02098318
+_02098310:
+ bl FUN_0209C934
+ mov r5, r0
+_02098318:
+ add r0, r6, #0xe0
+ bl OS_UnlockMutex
+_02098320: ; 0x02098320
+ cmp r5, #0x0
+ ldrnesh r1, [r4, #0x70]
+ mvnne r0, #0x4b
+ moveq r0, #0x0
+ orrne r1, r1, #0x40
+ strneh r1, [r4, #0x70]
+ ldreqsh r1, [r4, #0x70]
+ orreq r1, r1, #0x4
+ streqh r1, [r4, #0x70]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02098350
+FUN_02098350: ; 0x02098350
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrsb r2, [r4, #0x72]
+ ldr r0, _020983AC ; =FUN_020982C4
+ mov r1, r4
+ bl FUN_02097A98
+ movs r1, r0
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrh r2, [r4, #0x74]
+ mov r0, r4
+ strh r2, [r1, #0x10]
+ ldrh r2, [r4, #0x76]
+ strh r2, [r1, #0x12]
+ ldr r2, [r4, #0x78]
+ str r2, [r1, #0x14]
+ ldrsh r2, [r4, #0x70]
+ orr r2, r2, #0x2
+ strh r2, [r4, #0x70]
+ bl FUN_02097958
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020983AC: .word FUN_020982C4
+
+ arm_func_start FUN_020983B0
+FUN_020983B0: ; 0x020983B0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_02099FA8
+_020983C4: ; 0x020983C4
+ cmp r0, #0x0
+ bne _020983D8
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x8
+ beq _020983E4
+_020983D8:
+ mvn r0, #0x1b
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020983E4:
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _020983FC
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020983FC:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098424
+ cmp r0, #0x4
+ movne r1, #0x0
+_02098424:
+ cmp r1, #0x0
+ beq _0209849C
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x4
+ beq _02098450
+ ldrsb r0, [r6, #0x72]
+ cmp r0, #0x1
+ mvneq r0, #0x1d
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02098450:
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ beq _02098478
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x40
+ ldrne r0, [r6, #0x6c]
+ ldreq r0, _020984B0 ; =0x021061C0
+ ldreq r0, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02098478:
+ strh r5, [r6, #0x76]
+ mov r0, r6
+ str r4, [r6, #0x78]
+ bl FUN_02098350
+ ldrsb r1, [r6, #0x72]
+ cmp r1, #0x1
+ mvnne r0, #0x19
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209849C:
+ strh r5, [r6, #0x76]
+ str r4, [r6, #0x78]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020984B0: .word 0x021061C0
+
+ arm_func_start FUN_020984B4
+FUN_020984B4:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov r5, r1
+ bl FUN_02099FA8
+_020984C8: ; 0x020984C8
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _020984F4
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020984F4:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x6
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ strh r5, [r4, #0x74]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_02098350
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02098550
+FUN_02098550: ; 0x02098550
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r2
+ ldr r6, [r7, #0x64]
+ mov r9, r0
+ mov r8, r1
+ bl OS_DisableInterrupts
+ add r1, r6, #0x100
+ ldrh r2, [r1, #0x8]
+ ldrh r1, [r1, #0xa]
+ mov r4, r0
+ add r0, r2, r8
+ cmp r1, r0
+ blo _02098618
+ ldr r1, _02098668 ; =0x021C8CC0
+ add r0, r8, #0xc
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r5, r0
+ beq _02098604
+ add r1, r6, #0x100
+ ldrh r3, [r1, #0x8]
+ mov r2, #0x0
+ mov r0, r9
+ add r3, r3, r8
+ strh r3, [r1, #0x8]
+ str r2, [r5, #0x0]
+ strh r8, [r5, #0x4]
+ ldrh r3, [r7, #0x18]
+ mov r2, r8
+ add r1, r5, #0xc
+ strh r3, [r5, #0x6]
+ ldr r3, [r7, #0x1c]
+ str r3, [r5, #0x8]
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x100]
+ cmp r0, #0x0
+ ldrne r0, [r6, #0x100]
+ strne r5, [r0, #0x0]
+ str r5, [r6, #0x100]
+ ldr r0, [r6, #0x104]
+ cmp r0, #0x0
+ streq r5, [r6, #0x104]
+ b _02098628
+_02098604:
+ ldr r0, _0209866C ; =0x021C8D28
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ b _02098628
+_02098618:
+ ldr r0, _0209866C ; =0x021C8D28
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x1
+ str r1, [r0, #0x4]
+_02098628:
+ ldrh r0, [r7, #0x74]
+ cmp r0, #0x0
+ ldreqh r0, [r7, #0xa]
+ streqh r0, [r7, #0x74]
+ ldrh r1, [r7, #0x1a]
+ add r0, r6, #0x10c
+ strh r1, [r7, #0x18]
+ ldr r1, [r7, #0x20]
+ str r1, [r7, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_02098668: .word 0x021C8CC0
+_0209866C: .word 0x021C8D28
+
+ arm_func_start FUN_02098670
+FUN_02098670: ; 0x02098670
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r9, [r10, #0x64]
+ str r1, [sp, #0x0]
+ ldr r0, [r9, #0x104]
+ str r2, [sp, #0x4]
+ str r3, [sp, #0x8]
+ bl OS_DisableInterrupts
+ ldr r8, [r9, #0x104]
+ str r0, [sp, #0xc]
+ cmp r8, #0x0
+ bne _02098710
+ ldr r0, [sp, #0x3c]
+ and r7, r0, #0x1
+ add r6, r9, #0x10c
+ mov r4, #0x1
+ mov r5, #0x0
+_020986B8:
+ cmp r7, #0x0
+ mvneq r11, #0x5
+ beq _02098710
+ mov r0, r6
+ bl OS_SleepThread
+ mov r0, r10
+ bl FUN_02099FA8
+_020986D4: ; 0x020986D4
+ cmp r0, #0x0
+ bne _020986FC
+ mov r1, r5
+ cmp r10, #0x0
+ beq _020986F4
+ ldrsh r0, [r10, #0x70]
+ ands r0, r0, #0x1
+ movne r1, r4
+_020986F4:
+ cmp r1, #0x0
+ bne _02098704
+_020986FC:
+ mvn r11, #0x37
+ b _02098710
+_02098704:
+ ldr r8, [r9, #0x104]
+ cmp r8, #0x0
+ beq _020986B8
+_02098710:
+ cmp r8, #0x0
+ beq _020987A4
+ ldrh r1, [r8, #0x4]
+ ldr r0, [sp, #0x4]
+ cmp r0, r1
+ strgt r1, [sp, #0x4]
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ add r0, r8, #0xc
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ ldrneh r1, [r8, #0x6]
+ strneh r1, [r0, #0x0]
+ ldr r1, [sp, #0x38]
+ cmp r1, #0x0
+ ldrne r0, [r8, #0x8]
+ strne r0, [r1, #0x0]
+ ldrsb r0, [r9, #0xfe]
+ ldrh r11, [r8, #0x4]
+ cmp r0, #0x0
+ bne _020987A4
+ ldr r0, [r8, #0x0]
+ ldr r1, _020987BC ; =0x021C8CC0
+ str r0, [r9, #0x104]
+ ldr r0, [r8, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r9, #0x100]
+ ldr r1, [r1, #0x0]
+ mov r0, r8
+ ldr r1, [r1, #0x1c]
+ blx r1
+ add r0, r9, #0x100
+ ldrh r1, [r0, #0x8]
+ sub r1, r1, r11
+ strh r1, [r0, #0x8]
+_020987A4:
+ ldr r0, [sp, #0xc]
+ bl OS_RestoreInterrupts
+ mov r0, r11
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020987BC: .word 0x021C8CC0
+
+ arm_func_start FUN_020987C0
+FUN_020987C0: ; 0x020987C0
+ stmdb sp!, {r4-r6,lr}
+ ldr r6, [r0, #0x64]
+ bl OS_DisableInterrupts
+ ldr r4, [r6, #0xf8]
+ mov r5, r0
+ cmp r4, #0x0
+ beq _020987EC
+ mov r1, #0x0
+ mov r0, r4
+ str r1, [r6, #0xf8]
+ bl FUN_0209C52C
+_020987EC:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02098800
+FUN_02098800: ; 0x02098800
+ ldr ip, _0209880C ; =FUN_020987C0
+ ldr r0, [r0, #0x4]
+ bx r12
+ .balign 4
+_0209880C: .word FUN_020987C0
+
+ arm_func_start FUN_02098810
+FUN_02098810:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x64]
+ ldrh r0, [r1, #0xfc]
+ ldr r1, [r1, #0xf8]
+ cmp r1, r0
+ movlt r0, #0x0
+ ldmltia sp!, {r4,lr}
+ bxlt lr
+ ldr r0, _02098864 ; =FUN_02098800
+ mov r1, r4
+ mov r2, #0x0
+ bl FUN_02097A98
+ movs r1, r0
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ bl FUN_02097958
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02098864: .word FUN_02098800
+
+ arm_func_start FUN_02098868
+FUN_02098868: ; 0x02098868
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ ldr r9, [r0, #0x4]
+ ldr r1, [r0, #0x10]
+ ldr r8, [r9, #0x64]
+ str r1, [sp, #0x4]
+ ldr r1, [r0, #0x18]
+ ldr r10, [r0, #0x14]
+ ldr r0, [r0, #0x1c]
+ ldr r7, [r8, #0xf8]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ add r11, sp, #0x10
+ mov r5, #0x0
+ mov r6, #0x1
+ mov r4, #0xa
+_020988A8:
+ mov r0, r11
+ bl FUN_0209C638
+_020988B0: ; 0x020988B0
+ cmp r0, #0x0
+ beq _02098904
+ ldr r1, [sp, #0x10]
+ sub r1, r1, r7
+ cmp r1, #0x0
+ bgt _02098904
+ ldrsb r0, [r9, #0x73]
+ mov r1, r6
+ cmp r0, #0x0
+ beq _020988E0
+ cmp r0, #0x4
+ movne r1, r5
+_020988E0:
+ cmp r1, #0x0
+ beq _020988F8
+ ldrb r0, [r9, #0x8]
+ cmp r0, #0x4
+ movne r0, #0x0
+ bne _02098904
+_020988F8:
+ mov r0, r4
+ bl OS_Sleep
+ b _020988A8
+_02098904:
+ ldrsb r1, [r9, #0x73]
+ cmp r1, #0x4
+ bne _02098954
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r1, [sp, #0x10]
+ cmp r10, r1
+ movhi r10, r1
+ ldr r1, [sp, #0x4]
+ mov r2, r10
+ bl MI_CpuCopy8
+ mov r0, r10
+ bl FUN_0209C52C
+ add sp, sp, #0x14
+ mov r0, r10
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02098954:
+ cmp r0, #0x0
+ moveq r4, #0x0
+ beq _02098980
+ ldr r4, [sp, #0xc]
+ ldr r1, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ mov r0, r9
+ mov r2, r10
+ str r4, [sp, #0x0]
+ bl FUN_02098AA4
+ mov r4, r0
+_02098980:
+ cmp r4, #0x0
+ addle sp, sp, #0x14
+ movle r0, r4
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ ldrh r0, [r8, #0xfc]
+ ldr r1, [r8, #0xf8]
+ cmp r1, r0
+ blt _020989AC
+ mov r0, r9
+ bl FUN_020987C0
+_020989AC:
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_020989BC
+FUN_020989BC: ; 0x020989BC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ ldr r0, _02098A10 ; =FUN_02098868
+ mov r1, r7
+ mov r2, #0x1
+ mov r4, r3
+ bl FUN_02097A98
+ mov r1, r0
+ str r6, [r1, #0x10]
+ str r5, [r1, #0x14]
+ ldr r2, [sp, #0x18]
+ str r4, [r1, #0x18]
+ mov r0, r7
+ str r2, [r1, #0x1c]
+ bl FUN_02097958
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02098A10: .word FUN_02098868
+
+ arm_func_start FUN_02098A14
+FUN_02098A14:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x64]
+ ldr r5, [r0, #0xc4]
+ ldr r4, [r0, #0xf8]
+ ldr r0, [r5, #0x44]
+ subs lr, r0, r4
+ bmi _02098A78
+ ldrh r12, [r5, #0xa]
+ ldr r0, [sp, #0x10]
+ cmp lr, #0x0
+ strh r12, [r2, #0x0]
+ ldrh r2, [r5, #0x18]
+ strh r2, [r3, #0x0]
+ ldr r2, [r5, #0x1c]
+ str r2, [r0, #0x0]
+ str lr, [r1, #0x0]
+ bne _02098A90
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x4
+ beq _02098A90
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02098A78:
+ mvn r0, #0x0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02098A90:
+ ldr r0, [r5, #0x40]
+ add r0, r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_02098AA4
+FUN_02098AA4: ; 0x02098AA4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x14
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl OS_DisableInterrupts
+ add r1, sp, #0xc
+ mov r5, r0
+ str r1, [sp, #0x0]
+ add r1, sp, #0x8
+ mov r0, r9
+ add r2, sp, #0x4
+ add r3, sp, #0x6
+ bl FUN_02098A14
+_02098AE0: ; 0x02098AE0
+ cmp r0, #0x0
+ beq _02098B48
+ ldr r4, [sp, #0x8]
+ cmp r4, #0x0
+ mvneq r4, #0x5
+ beq _02098B64
+ ldrsb r1, [r9, #0x73]
+ cmp r7, r4
+ movgt r7, r4
+ mov r2, #0x1
+ cmp r1, #0x0
+ beq _02098B18
+ cmp r1, #0x4
+ movne r2, #0x0
+_02098B18:
+ cmp r2, #0x0
+ mov r1, r8
+ mov r2, r7
+ movne r4, r7
+ bl MI_CpuCopy8
+ ldr r1, [r9, #0x64]
+ ldrsb r0, [r1, #0xfe]
+ cmp r0, #0x0
+ ldreq r0, [r1, #0xf8]
+ addeq r0, r0, r4
+ streq r0, [r1, #0xf8]
+ b _02098B64
+_02098B48:
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ ldrsh r0, [r9, #0x70]
+ moveq r4, #0x0
+ mvnne r4, #0x1b
+ bic r0, r0, #0x6
+ strh r0, [r9, #0x70]
+_02098B64:
+ cmp r4, #0x0
+ blt _02098B9C
+ cmp r6, #0x0
+ beq _02098B8C
+ ldr r1, [sp, #0x30]
+ cmp r1, #0x0
+ ldrneh r0, [sp, #0x6]
+ strneh r0, [r6, #0x0]
+ ldrne r0, [sp, #0xc]
+ strne r0, [r1, #0x0]
+_02098B8C:
+ ldrh r0, [r9, #0x74]
+ cmp r0, #0x0
+ ldreqh r0, [sp, #0x4]
+ streqh r0, [r9, #0x74]
+_02098B9C:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_02098BB4
+FUN_02098BB4: ; 0x02098BB4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldrsb r12, [r7, #0x73]
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ cmp r12, #0x4
+ bne _02098BF0
+ ldr r4, [sp, #0x18]
+ str r4, [sp, #0x0]
+ bl FUN_020989BC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_02098BF0:
+ ldr r12, [sp, #0x18]
+ str r12, [sp, #0x0]
+ bl FUN_02098AA4
+ mvn r1, #0x5
+ cmp r0, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, [sp, #0x1c]
+ ands r1, r1, #0x1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r12, [sp, #0x18]
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl FUN_020989BC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02098C4C
+FUN_02098C4C: ; 0x02098C4C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r5, [sp, #0x28]
+ mov r7, r0
+ ands r0, r5, #0x2
+ ldr r5, [r7, #0x64]
+ beq _02098C74
+ cmp r5, #0x0
+ movne r6, #0x1
+ bne _02098C78
+_02098C74:
+ mov r6, #0x0
+_02098C78:
+ cmp r6, #0x0
+ ldrnesb r4, [r5, #0xfe]
+ movne r0, #0x1
+ strneb r0, [r5, #0xfe]
+ ldrsb r0, [r7, #0x73]
+ cmp r0, #0x1
+ bne _02098CB4
+ ldr r0, [sp, #0x20]
+ ldr r12, [sp, #0x24]
+ str r0, [sp, #0x0]
+ mov r0, r7
+ str r12, [sp, #0x4]
+ bl FUN_02098670
+ mov r8, r0
+ b _02098CDC
+_02098CB4:
+ ldr r0, [sp, #0x20]
+ ldr r12, [sp, #0x24]
+ str r0, [sp, #0x0]
+ mov r0, r7
+ str r12, [sp, #0x4]
+ bl FUN_02098BB4
+ movs r8, r0
+ bmi _02098CDC
+ mov r0, r7
+ bl FUN_02098810
+_02098CDC:
+ cmp r6, #0x0
+ strneb r4, [r5, #0xfe]
+ mov r0, r8
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_02098CF4
+FUN_02098CF4:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl FUN_02099FA8
+_02098D10: ; 0x02098D10
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ ldr r0, [sp, #0x2c]
+ ands r0, r0, #0x4
+ bne _02098D3C
+ ldrsb r0, [r9, #0x72]
+ cmp r0, #0x0
+ bne _02098D5C
+_02098D3C:
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x4
+ addeq sp, sp, #0xc
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r4, #0x0
+ b _02098D78
+_02098D5C:
+ bl OS_GetProcMode
+ cmp r0, #0x12
+ addeq sp, sp, #0xc
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r4, #0x1
+_02098D78:
+ cmp r9, #0x0
+ mov r1, #0x0
+ beq _02098D90
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098D90:
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldrsb r0, [r9, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098DBC
+ cmp r0, #0x4
+ movne r1, #0x0
+_02098DBC:
+ cmp r1, #0x0
+ beq _02098DEC
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x4
+ beq _02098DDC
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x8
+ beq _02098DEC
+_02098DDC:
+ add sp, sp, #0xc
+ mvn r0, #0x37
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_02098DEC:
+ ands r0, r4, #0x1
+ ldr r5, [r9, #0x64]
+ bne _02098E18
+ add r0, r5, #0xe0
+ bl OS_TryLockMutex
+_02098E00: ; 0x02098E00
+ cmp r0, #0x0
+ bne _02098E20
+ add sp, sp, #0xc
+ mvn r0, #0x5
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_02098E18:
+ add r0, r5, #0xe0
+ bl OS_LockMutex
+_02098E20:
+ ldr r0, [sp, #0x28]
+ ldr r12, [sp, #0x2c]
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ mov r3, r6
+ str r12, [sp, #0x8]
+ bl FUN_02098C4C
+ mov r4, r0
+ add r0, r5, #0xe0
+ bl OS_UnlockMutex
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_02098E64
+FUN_02098E64: ; 0x02098E64
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r2
+ ldr r5, [r6, #0x14]
+ ldr r4, [r6, #0x1c]
+ cmp r5, r1
+ mov r7, r0
+ movgt r5, r1
+ movgt r4, #0x0
+ bgt _02098E98
+ sub r0, r1, r5
+ cmp r4, r0
+ movgt r4, r0
+_02098E98:
+ cmp r5, #0x0
+ ble _02098EC8
+ ldr r0, [r6, #0x10]
+ mov r1, r7
+ mov r2, r5
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x10]
+ add r0, r0, r5
+ str r0, [r6, #0x10]
+ ldr r0, [r6, #0x14]
+ sub r0, r0, r5
+ str r0, [r6, #0x14]
+_02098EC8:
+ cmp r4, #0x0
+ ble _02098EF8
+ ldr r0, [r6, #0x18]
+ mov r2, r4
+ add r1, r7, r5
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x18]
+ add r0, r0, r4
+ str r0, [r6, #0x18]
+ ldr r0, [r6, #0x1c]
+ sub r0, r0, r4
+ str r0, [r6, #0x1c]
+_02098EF8:
+ add r0, r5, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_02098F08
+FUN_02098F08: ; 0x02098F08
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _02098FBC ; =0x021D3498
+ mov r4, r0
+ ldr r0, [r1, #0x4]
+ ldr r5, [r0, #0xa4]
+ bl OS_DisableInterrupts
+_02098F24: ; 0x02098F24
+ cmp r5, #0x0
+ beq _02098F74
+ ldrh r3, [r5, #0x2e]
+ cmp r3, #0x0
+ beq _02098F64
+ ldrh r2, [r5, #0x2c]
+ cmp r2, #0x0
+ beq _02098F64
+ ldr r1, _02098FC0 ; =0x021C8CD4
+ cmp r3, r2
+ ldr r1, [r1, #0x24]
+ movgt r3, r2
+ cmp r3, r1
+ movgt r3, r1
+ mov r5, r3, lsl #0x1
+ b _02098F80
+_02098F64:
+ ldr r1, _02098FC0 ; =0x021C8CD4
+ ldr r1, [r1, #0x24]
+ mov r5, r1, lsl #0x1
+ b _02098F80
+_02098F74:
+ ldr r1, _02098FC0 ; =0x021C8CD4
+ ldr r1, [r1, #0x24]
+ mov r5, r1, lsl #0x1
+_02098F80:
+ bl OS_RestoreInterrupts
+_02098F84: ; 0x02098F84
+ cmp r5, #0x0
+ ble _02098FAC
+ mov r0, r4
+ mov r1, r5
+ bl _s32_div_f
+_02098F98: ; 0x02098F98
+ cmp r0, #0x0
+ mulgt r0, r5, r0
+ addgt sp, sp, #0x4
+ ldmgtia sp!, {r4-r5,lr}
+ bxgt lr
+_02098FAC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02098FBC: .word 0x021D3498
+_02098FC0: .word 0x021C8CD4
+
+ arm_func_start FUN_02098FC4
+FUN_02098FC4: ; 0x02098FC4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldr r7, [r8, #0x4]
+ mov r4, #0x0
+ ldrsb r0, [r7, #0x73]
+ ldr r6, [r7, #0x68]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098FF4
+ cmp r0, #0x4
+ movne r1, r4
+_02098FF4:
+ cmp r1, #0x0
+ beq _02099008
+ ldrsh r0, [r7, #0x70]
+ ands r0, r0, #0x4
+ beq _020990DC
+_02099008:
+ ldr r2, [r8, #0x28]
+ cmp r2, #0x0
+ beq _02099020
+ ldrh r0, [r8, #0x24]
+ ldrh r1, [r8, #0x26]
+ bl FUN_0209CB78
+_02099020:
+ ldrsb r1, [r7, #0x73]
+ mov r0, #0x1
+ cmp r1, #0x0
+ beq _02099038
+ cmp r1, #0x4
+ movne r0, #0x0
+_02099038:
+ cmp r0, #0x0
+ movne r2, #0x36
+ moveq r2, #0x2a
+ ldr r0, [r7, #0x4c]
+ cmp r1, #0x0
+ add r5, r0, r2
+ beq _0209905C
+ cmp r1, #0x4
+ bne _02099070
+_0209905C:
+ ldr r0, [r7, #0x48]
+ sub r0, r0, r2
+ bl FUN_02098F08
+ mov r9, r0
+ b _02099078
+_02099070:
+ ldr r0, [r7, #0x48]
+ sub r9, r0, r2
+_02099078:
+ mov r0, r5
+ mov r1, r9
+ mov r2, r8
+ bl FUN_02098E64
+ mov r1, r0
+ cmp r1, #0x0
+ ble _020990E0
+ mov r0, r5
+ bl FUN_0209C030
+_0209909C: ; 0x0209909C
+ cmp r0, #0x0
+ bgt _020990D4
+ ldrsb r0, [r7, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020990BC
+ cmp r0, #0x4
+ movne r1, #0x0
+_020990BC:
+ cmp r1, #0x0
+ ldrnesh r0, [r7, #0x70]
+ mvn r4, #0x4b
+ bicne r0, r0, #0xe
+ strneh r0, [r7, #0x70]
+ b _020990E0
+_020990D4:
+ add r4, r4, r0
+ b _02099078
+_020990DC:
+ mvn r4, #0x4b
+_020990E0:
+ ldrh r2, [r8, #0x20]
+ add r1, r6, #0x100
+ add r0, r6, #0x104
+ strh r2, [r1, #0x2]
+ bl OS_WakeupThread
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_02099104
+FUN_02099104:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r6, [r9, #0x68]
+ mov r4, r1
+ mov r8, r2
+ ldr r1, [r6, #0x10c]
+ ldr r2, [sp, #0x28]
+ ldr r0, _0209929C ; =FUN_02098FC4
+ mov r7, r3
+ bl FUN_02097A98
+ movs r5, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, [sp, #0x28]
+ ands r0, r0, #0x1
+ beq _02099164
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x1
+ movne r0, #0x3
+ strneb r0, [r5, #0xd]
+ bne _0209916C
+_02099164:
+ mov r0, #0x0
+ strb r0, [r5, #0xd]
+_0209916C:
+ ldr r2, [r6, #0xf8]
+ add r1, r7, r8
+ cmp r1, r2
+ ldr r3, [r6, #0xfc]
+ bge _020991A0
+ add r0, r3, r7
+ str r0, [r5, #0x10]
+ str r8, [r5, #0x14]
+ mov r0, #0x0
+ str r0, [r5, #0x18]
+ mov r7, r1
+ str r0, [r5, #0x1c]
+ b _020991D8
+_020991A0:
+ add r0, r3, r7
+ str r0, [r5, #0x10]
+ sub r0, r2, r7
+ str r0, [r5, #0x14]
+ str r3, [r5, #0x18]
+ ldr r0, [r5, #0x14]
+ sub r0, r8, r0
+ str r0, [r5, #0x1c]
+ ldr r7, [r5, #0x1c]
+ ldr r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ mov r2, r7
+ add r0, r4, r0
+ bl MI_CpuCopy8
+_020991D8:
+ ldr r1, [r5, #0x10]
+ ldr r2, [r5, #0x14]
+ mov r0, r4
+ bl MI_CpuCopy8
+ add r0, r6, #0x100
+ ldrh r4, [r0, #0x0]
+ strh r7, [r5, #0x20]
+ ldrh r1, [r5, #0x20]
+ strh r1, [r0, #0x0]
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x1
+ bne _02099268
+ ldrh r0, [r9, #0x74]
+ cmp r0, #0x0
+ bne _02099224
+ bl FUN_0209CC8C
+ strh r0, [r9, #0x74]
+ ldrh r0, [r9, #0x74]
+ strh r0, [r9, #0xa]
+_02099224:
+ ldrh r0, [r9, #0x74]
+ strh r0, [r5, #0x24]
+ ldr r1, [r9, #0x78]
+ cmp r1, #0x0
+ beq _02099244
+ ldr r0, [sp, #0x24]
+ cmp r0, #0x0
+ beq _02099258
+_02099244:
+ ldr r1, [sp, #0x24]
+ ldrh r0, [sp, #0x20]
+ str r1, [r5, #0x28]
+ strh r0, [r5, #0x26]
+ b _02099270
+_02099258:
+ str r1, [r5, #0x28]
+ ldrh r0, [r9, #0x76]
+ strh r0, [r5, #0x26]
+ b _02099270
+_02099268:
+ mov r0, #0x0
+ str r0, [r5, #0x28]
+_02099270:
+ ldr r0, [r6, #0x10c]
+ mov r1, r5
+ bl FUN_02097948
+_0209927C: ; 0x0209927C
+ cmp r0, #0x0
+ addne r0, r6, #0x100
+ movne r8, #0x0
+ strneh r4, [r0, #0x0]
+ mov r0, r8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209929C: .word FUN_02098FC4
+
+ arm_func_start FUN_020992A0
+FUN_020992A0:
+ ldr r2, [r0, #0x68]
+ add r0, r2, #0x100
+ ldrh r1, [r0, #0x0]
+ ldrh r0, [r0, #0x2]
+ ldr r2, [r2, #0xf8]
+ sub r0, r0, r1
+ subs r0, r0, #0x1
+ addmi r0, r0, r2
+ bx lr
+
+ arm_func_start FUN_020992C4
+FUN_020992C4: ; 0x020992C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ mov r9, r1
+ mov r8, r2
+ cmp r8, r9
+ mov r11, r3
+ ldr r7, [r10, #0x68]
+ movgt r8, r9
+ bl OS_DisableInterrupts
+ ldr r1, [sp, #0x28]
+ str r0, [sp, #0x0]
+ and r5, r1, #0x1
+ add r4, r7, #0x104
+_020992FC:
+ mov r0, r10
+ bl FUN_020992A0
+ mov r6, r0
+ cmp r6, r8
+ blt _02099328
+ add r0, r7, #0x100
+ ldrh r0, [r0, #0x0]
+ cmp r6, r9
+ movge r6, r9
+ str r0, [r11, #0x0]
+ b _02099340
+_02099328:
+ cmp r5, #0x0
+ moveq r6, #0x0
+ beq _02099340
+ mov r0, r4
+ bl OS_SleepThread
+ b _020992FC
+_02099340:
+ ldr r0, [sp, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02099358
+FUN_02099358: ; 0x02099358
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ mov r10, r0
+ ldr r4, [r10, #0x68]
+ ldrsb r0, [r10, #0x73]
+ ldr r4, [r4, #0x10c]
+ mov r9, r1
+ cmp r0, #0x1
+ ldr r0, [r4, #0x48]
+ mov r8, r2
+ str r3, [sp, #0xc]
+ ldr r7, [sp, #0x40]
+ ldr r6, [sp, #0x44]
+ mov r4, #0x0
+ bne _020993B4
+ sub r0, r0, #0x2a
+ cmp r8, r0
+ addgt sp, sp, #0x1c
+ mvngt r0, #0x22
+ ldmgtia sp!, {r4-r11,lr}
+ bxgt lr
+ str r8, [sp, #0x10]
+ b _020993C4
+_020993B4:
+ sub r0, r0, #0x36
+ str r0, [sp, #0x10]
+ cmp r8, r0
+ strle r8, [sp, #0x10]
+_020993C4:
+ cmp r8, #0x0
+ ble _02099460
+ and r11, r6, #0x1
+_020993D0:
+ ldr r2, [sp, #0x10]
+ mov r0, r10
+ mov r1, r8
+ add r3, sp, #0x14
+ str r6, [sp, #0x0]
+ bl FUN_020992C4
+ mov r5, r0
+ cmp r5, #0x0
+ ble _02099438
+ ldr r0, [sp, #0xc]
+ mov r1, r9
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r6, [sp, #0x8]
+ ldr r3, [sp, #0x14]
+ mov r0, r10
+ mov r2, r5
+ bl FUN_02099104
+_02099418: ; 0x02099418
+ cmp r0, #0x0
+ addle sp, sp, #0x1c
+ mvnle r0, #0x5
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ add r9, r9, r5
+ sub r8, r8, r5
+ add r4, r4, r5
+_02099438:
+ cmp r11, #0x0
+ bne _02099458
+ cmp r5, #0x0
+ bgt _02099460
+ add sp, sp, #0x1c
+ mvn r0, #0x5
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02099458:
+ cmp r8, #0x0
+ bgt _020993D0
+_02099460:
+ mov r0, r4
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_02099470
+FUN_02099470: ; 0x02099470
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl FUN_02099FA8
+_0209948C: ; 0x0209948C
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ cmp r8, #0x0
+ mov r1, #0x0
+ beq _020994B8
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020994B8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x8
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldrsb r0, [r8, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020994E4
+ cmp r0, #0x4
+ movne r1, #0x0
+_020994E4:
+ cmp r1, #0x0
+ beq _02099514
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x4
+ beq _02099504
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x8
+ beq _02099514
+_02099504:
+ add sp, sp, #0x8
+ mvn r0, #0x37
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02099514:
+ ldr r0, [sp, #0x24]
+ ldr r4, [r8, #0x68]
+ ands r0, r0, #0x4
+ bne _02099530
+ ldrsb r0, [r8, #0x72]
+ cmp r0, #0x0
+ bne _02099554
+_02099530:
+ add r0, r4, #0xe0
+ bl OS_TryLockMutex
+_02099538: ; 0x02099538
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ mvneq r0, #0x5
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r12, #0x0
+ b _02099560
+_02099554:
+ add r0, r4, #0xe0
+ bl OS_LockMutex
+ mov r12, #0x1
+_02099560:
+ ldr r1, [sp, #0x20]
+ mov r0, r8
+ str r1, [sp, #0x0]
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ str r12, [sp, #0x4]
+ bl FUN_02099358
+ mov r5, r0
+ add r0, r4, #0xe0
+ bl OS_UnlockMutex
+ mov r0, r5
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_0209959C
+FUN_0209959C: ; 0x0209959C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x4]
+ mov r1, #0x1
+ ldrsb r0, [r0, #0x73]
+ cmp r0, #0x0
+ beq _020995C0
+ cmp r0, #0x4
+ movne r1, #0x0
+_020995C0:
+ cmp r1, #0x0
+ beq _020995CC
+ bl FUN_0209C840
+_020995CC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020995DC
+FUN_020995DC: ; 0x020995DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl FUN_02099FA8
+_020995EC: ; 0x020995EC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _02099618
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02099618:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x4
+ beq _02099644
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x8
+ beq _02099654
+_02099644:
+ add sp, sp, #0x4
+ mvn r0, #0x37
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02099654:
+ ldrsh r0, [r4, #0x70]
+ orr r0, r0, #0x8
+ strh r0, [r4, #0x70]
+ ldr r5, [r4, #0x68]
+ cmp r5, #0x0
+ beq _020996AC
+ ldr r1, [r5, #0x10c]
+ cmp r1, #0x0
+ beq _020996AC
+ ldrsb r2, [r4, #0x72]
+ ldr r0, _020996BC ; =FUN_0209959C
+ bl FUN_02097A98
+ movs r1, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r5, #0x10c]
+ bl FUN_02097948
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020996AC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020996BC: .word FUN_0209959C
+
+ arm_func_start FUN_020996C0
+FUN_020996C0: ; 0x020996C0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r4, _02099704 ; =0x021C8D34
+ mov r5, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020996F0
+_020996E0:
+ bl FUN_020997B8
+_020996E4: ; 0x020996E4
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020996E0
+_020996F0:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02099704: .word 0x021C8D34
+
+ arm_func_start FUN_02099708
+FUN_02099708: ; 0x02099708
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ movs r8, r0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ add r0, r8, #0x20
+ bl OS_JoinThread
+ bl OS_DisableInterrupts
+ mov r7, r0
+ bl OS_DisableScheduler
+ add r1, sp, #0x0
+ mov r0, r8
+ mov r2, #0x0
+ bl OS_ReceiveMessage
+_02099744: ; 0x02099744
+ cmp r0, #0x0
+ beq _0209979C
+ add r4, sp, #0x0
+ mvn r6, #0xa
+ mov r5, #0x0
+_02099758:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _02099784
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ beq _0209977C
+ mov r1, r6
+ mov r2, r5
+ bl OS_SendMessage
+_0209977C:
+ ldr r0, [sp, #0x0]
+ bl FUN_02097A64
+_02099784:
+ mov r0, r8
+ mov r1, r4
+ mov r2, r5
+ bl OS_ReceiveMessage
+_02099794: ; 0x02099794
+ cmp r0, #0x0
+ bne _02099758
+_0209979C:
+ bl OS_EnableScheduler
+ bl OS_RescheduleThread
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020997B8
+FUN_020997B8:
+ stmdb sp!, {r4-r6,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, #0x0
+ strh r0, [r4, #0x70]
+ ldrsb r1, [r4, #0x73]
+ mov r2, #0x1
+ cmp r1, #0x0
+ beq _020997E8
+ cmp r1, #0x4
+ movne r2, r0
+_020997E8:
+ cmp r2, #0x0
+ beq _02099804
+ ldr r0, [r4, #0x68]
+ bl FUN_02099708
+ ldr r0, [r4, #0x64]
+ bl FUN_02099708
+ b _02099884
+_02099804:
+ cmp r1, #0x1
+ bne _02099874
+ ldr r0, [r4, #0x64]
+ ldr r0, [r0, #0x104]
+ cmp r0, #0x0
+ beq _0209983C
+ ldr r5, _020998C0 ; =0x021C8CC0
+_02099820:
+ ldr r1, [r5, #0x0]
+ ldr r6, [r0, #0x0]
+ ldr r1, [r1, #0x1c]
+ blx r1
+ mov r0, r6
+ cmp r6, #0x0
+ bne _02099820
+_0209983C:
+ ldr r0, [r4, #0x64]
+ mov r1, #0x0
+ add r0, r0, #0x100
+ strh r1, [r0, #0x8]
+ ldr r0, [r4, #0x64]
+ str r1, [r0, #0x100]
+ ldr r0, [r4, #0x64]
+ str r1, [r0, #0x104]
+ ldr r0, [r4, #0x64]
+ add r0, r0, #0x10c
+ bl OS_WakeupThread
+ ldr r0, [r4, #0x64]
+ bl FUN_02099708
+ b _02099884
+_02099874:
+ cmp r1, #0x2
+ bne _02099884
+ ldr r0, [r4, #0x68]
+ bl FUN_02099708
+_02099884:
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, r4
+ bl FUN_0209A054
+ mov r0, r4
+ bl FUN_02099FF0
+ ldr r1, _020998C0 ; =0x021C8CC0
+ mov r0, r4
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x1c]
+ blx r1
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020998C0: .word 0x021C8CC0
+
+ arm_func_start FUN_020998C4
+FUN_020998C4: ; 0x020998C4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r0, #0x4]
+ mov r1, #0x1
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x0
+ beq _020998E8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020998E8:
+ cmp r1, #0x0
+ beq _02099908
+ ldr r0, [r4, #0x68]
+ add r0, r0, #0x20
+ bl OS_JoinThread
+ bl FUN_0209C840
+ bl FUN_0209C7AC
+ bl FUN_0209CB24
+_02099908:
+ bl FUN_0209CC10
+ ldrsh r0, [r4, #0x70]
+ mov r1, #0x0
+ bic r0, r0, #0x6
+ strh r0, [r4, #0x70]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x2
+ ldreq r0, [r4, #0x68]
+ ldrne r0, [r4, #0x64]
+ bl FUN_020979F8
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, r4
+ bl FUN_0209A054
+ mov r0, r4
+ bl FUN_0209A06C
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldrsh r1, [r4, #0x70]
+ mov r0, #0x0
+ orr r1, r1, #0x20
+ strh r1, [r4, #0x70]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209996C
+FUN_0209996C: ; 0x0209996C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ cmp r4, #0x0
+ mvnle r0, #0x1b
+ ldmleia sp!, {r4,lr}
+ bxle lr
+ bl FUN_02099F78
+_02099988: ; 0x02099988
+ cmp r0, #0x0
+ mvnne r0, #0x19
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_02099FA8
+_020999A0: ; 0x020999A0
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _020999C8
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020999C8:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x10
+ mvnne r0, #0x19
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrsh r0, [r4, #0x70]
+ mov r1, #0x1
+ orr r0, r0, #0x18
+ strh r0, [r4, #0x70]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x0
+ beq _02099A10
+ cmp r0, #0x4
+ movne r1, #0x0
+_02099A10:
+ cmp r1, #0x0
+ beq _02099A24
+ ldr r0, [r4, #0x68]
+ mov r1, #0x0
+ bl FUN_020979F8
+_02099A24:
+ ldr r0, _02099A54 ; =FUN_020998C4
+ mov r1, r4
+ mov r2, #0x1
+ bl FUN_02097A98
+ mov r1, r0
+ mov r2, #0x0
+ mov r0, r4
+ str r2, [r1, #0x8]
+ bl FUN_020979DC
+_02099A48: ; 0x02099A48
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02099A54: .word FUN_020998C4
+
+ arm_func_start FUN_02099A58
+FUN_02099A58:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ bmi _02099A88
+ bl FUN_02099FA8
+_02099A68: ; 0x02099A68
+ cmp r0, #0x0
+ beq _02099A88
+ mov r0, r4
+ bl FUN_02099F78
+_02099A78: ; 0x02099A78
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_02099A88:
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_02099A94
+FUN_02099A94: ; 0x02099A94
+ stmdb sp!, {r4,lr}
+ ldr r0, _02099B10 ; =0x021C8CD0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _02099AE8
+ bl FUN_02099B14
+ movs r4, r0
+ bne _02099AE0
+ ldr r0, _02099B10 ; =0x021C8CD0
+ ldr r0, [r0, #0x0]
+ bl FUN_0209996C
+ ldr r0, _02099B10 ; =0x021C8CD0
+ ldr r0, [r0, #0x0]
+ bl FUN_02099A58
+_02099ACC: ; 0x02099ACC
+ cmp r0, #0x0
+ ldrne r0, _02099B10 ; =0x021C8CD0
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ mvn r4, #0x19
+_02099AE0:
+ bl FUN_020996C0
+ b _02099B04
+_02099AE8:
+ bl FUN_0209FD34
+_02099AEC: ; 0x02099AEC
+ cmp r0, #0x0
+ mvneq r4, #0x19
+ beq _02099B04
+ mov r0, #0x0
+ bl FUN_020A87BC
+ mov r4, #0x0
+_02099B04:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02099B10: .word 0x021C8CD0
+
+ arm_func_start FUN_02099B14
+FUN_02099B14: ; 0x02099B14
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _02099BBC ; =0x021C8CD0
+ ldr r5, _02099BC0 ; =0x021C8D30
+_02099B20:
+ bl OS_DisableInterrupts
+ ldr r6, [r5, #0x0]
+ cmp r6, #0x0
+ beq _02099B54
+ ldr r2, [r4, #0x0]
+_02099B34:
+ cmp r6, r2
+ beq _02099B48
+ ldrsh r1, [r6, #0x70]
+ ands r1, r1, #0x10
+ beq _02099B54
+_02099B48:
+ ldr r6, [r6, #0x7c]
+ cmp r6, #0x0
+ bne _02099B34
+_02099B54:
+ bl OS_RestoreInterrupts
+_02099B58: ; 0x02099B58
+ cmp r6, #0x0
+ beq _02099B6C
+ mov r0, r6
+ bl FUN_0209996C
+ b _02099B20
+_02099B6C:
+ ldr r0, _02099BC0 ; =0x021C8D30
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _02099B98
+ ldr r0, _02099BBC ; =0x021C8CD0
+ ldr r0, [r0, #0x0]
+ cmp r1, r0
+ bne _02099BB0
+ ldr r0, [r1, #0x7c]
+ cmp r0, #0x0
+ bne _02099BB0
+_02099B98:
+ ldr r0, _02099BC4 ; =0x021C8D34
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+_02099BB0:
+ mvn r0, #0x19
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02099BBC: .word 0x021C8CD0
+_02099BC0: .word 0x021C8D30
+_02099BC4: .word 0x021C8D34
+
+ arm_func_start FUN_02099BC8
+FUN_02099BC8: ; 0x02099BC8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _02099C68 ; =0x021C8CC8
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _02099C6C ; =0x021C8F04
+ ldreq r0, [r0, #0x0]
+ streq r0, [r1, #0x0]
+ bl FUN_02099A94
+ mvn r4, #0x19
+ cmp r0, r4
+ bne _02099C10
+ mov r5, #0x64
+_02099BFC:
+ mov r0, r5
+ bl OS_Sleep
+ bl FUN_02099A94
+ cmp r0, r4
+ beq _02099BFC
+_02099C10:
+ bl FUN_02097B14
+ movs r4, r0
+ bmi _02099C58
+ bl FUN_0209FCC4
+_02099C20: ; 0x02099C20
+ mov r0, #0x0
+ bl FUN_0209FD24
+ ldr r0, _02099C70 ; =0x021C8CC0
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x28]
+ cmp r0, #0x0
+ bne _02099C4C
+ ldr r0, _02099C74 ; =0x021C8CD4
+ ldr r1, [r1, #0x1c]
+ ldr r0, [r0, #0x1c]
+ blx r1
+_02099C4C:
+ ldr r0, _02099C70 ; =0x021C8CC0
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_02099C58:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02099C68: .word 0x021C8CC8
+_02099C6C: .word 0x021C8F04
+_02099C70: .word 0x021C8CC0
+_02099C74: .word 0x021C8CD4
+
+ arm_func_start FUN_02099C78
+FUN_02099C78:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _02099CE0 ; =0x021C8F04
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _02099CBC
+ ldr r0, _02099CE4 ; =0x021C8CCC
+ ldr r0, [r0, #0x0]
+ and r0, r0, #0x3
+ cmp r0, #0x1
+ bne _02099CCC
+ bl OS_GetProcMode
+ cmp r0, #0x12
+ beq _02099CCC
+ mov r0, #0xa
+ bl OS_Sleep
+ b _02099CCC
+_02099CBC:
+ ldr r0, _02099CE8 ; =0x021C8CC8
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ streq r2, [r0, #0x0]
+_02099CCC:
+ ldr r0, _02099CE0 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02099CE0: .word 0x021C8F04
+_02099CE4: .word 0x021C8CCC
+_02099CE8: .word 0x021C8CC8
+
+ arm_func_start FUN_02099CEC
+FUN_02099CEC: ; 0x02099CEC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_02099C78
+_02099D00: ; 0x02099D00
+ cmp r0, #0x0
+ ldrne r1, _02099D24 ; =0x021C8F1C
+ mvneq r0, #0x26
+ movne r0, #0x0
+ strne r5, [r1, #0x0]
+ strne r4, [r1, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02099D24: .word 0x021C8F1C
+
+ arm_func_start FUN_02099D28
+FUN_02099D28:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _02099D84 ; =0x021C8F1C
+ mov r5, r0
+ ldr r7, [r1, #0x0]
+ mov r2, #0x0
+ ldr r6, [r1, #0x4]
+ mov r0, r4
+ str r2, [r1, #0x0]
+ str r2, [r1, #0x4]
+ bl FUN_0209AB80
+ ldr r1, _02099D84 ; =0x021C8F1C
+ mov r4, r0
+ mov r0, r5
+ str r7, [r1, #0x0]
+ str r6, [r1, #0x4]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02099D84: .word 0x021C8F1C
+
+ arm_func_start FUN_02099D88
+FUN_02099D88: ; 0x02099D88
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x64
+ movs r4, r0
+ addeq sp, sp, #0x64
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r1, _02099E34 ; =0x021C8CC0
+ mov r0, #0xfd0
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r5, r0
+ addeq sp, sp, #0x64
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x64
+ bl MI_CpuFill8
+ ldr r3, _02099E38 ; =0x00000B68
+ ldr r1, _02099E3C ; =0x00000466
+ add r2, r5, r3
+ add r0, sp, #0x0
+ str r5, [sp, #0x40]
+ str r3, [sp, #0x3c]
+ str r2, [sp, #0x4c]
+ str r1, [sp, #0x48]
+ bl FUN_0209CC28
+ mov r0, r4
+ bl FUN_0209AB80
+ mov r4, r0
+ bl FUN_0209CC10
+ ldr r1, _02099E34 ; =0x021C8CC0
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x1c]
+ blx r1
+ mov r0, r4
+ add sp, sp, #0x64
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02099E34: .word 0x021C8CC0
+_02099E38: .word 0x00000B68
+_02099E3C: .word 0x00000466
+
+ arm_func_start FUN_02099E40
+FUN_02099E40:
+ ldr r2, [r0, #0x64]
+ mov r3, #0x0
+ cmp r2, #0x0
+ beq _02099E88
+ ldrsb r1, [r0, #0x73]
+ cmp r1, #0x1
+ bne _02099E6C
+ ldr r0, [r2, #0x104]
+ cmp r0, #0x0
+ ldrneh r3, [r0, #0x4]
+ b _02099E88
+_02099E6C:
+ cmp r1, #0x0
+ beq _02099E7C
+ cmp r1, #0x4
+ bne _02099E88
+_02099E7C:
+ ldr r1, [r0, #0x44]
+ ldr r0, [r2, #0xf8]
+ sub r3, r1, r0
+_02099E88:
+ mov r0, r3
+ bx lr
+
+ arm_func_start FUN_02099E90
+FUN_02099E90:
+ stmdb sp!, {r4-r6,lr}
+ mov r4, #0x0
+ mov r5, r0
+ bl FUN_02099FA8
+_02099EA0: ; 0x02099EA0
+ cmp r0, #0x0
+ orrne r4, r4, #0x80
+ bne _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x40
+ ldrsb r0, [r5, #0x73]
+ orrne r4, r4, #0x20
+ cmp r0, #0x1
+ beq _02099ED0
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ beq _02099F00
+_02099ED0:
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r5
+ bl FUN_02099E40
+_02099EE0: ; 0x02099EE0
+ cmp r0, #0x0
+ mov r0, r5
+ orrgt r4, r4, #0x1
+ bl FUN_020992A0
+_02099EF0: ; 0x02099EF0
+ cmp r0, #0x0
+ mov r0, r6
+ orrgt r4, r4, #0x8
+ bl OS_RestoreInterrupts
+_02099F00:
+ ldrsb r0, [r5, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02099F18
+ cmp r0, #0x4
+ movne r1, #0x0
+_02099F18:
+ cmp r1, #0x0
+ beq _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ beq _02099F48
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x4
+ beq _02099F48
+ ands r0, r4, #0x1
+ ldreqsh r0, [r5, #0x70]
+ biceq r0, r0, #0x6
+ streqh r0, [r5, #0x70]
+_02099F48:
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x2
+ bne _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ orreq r4, r4, #0x40
+_02099F60:
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_02099F6C
+FUN_02099F6C:
+ add r0, r0, #0x3
+ bic r0, r0, #0x3
+ bx lr
+
+ arm_func_start FUN_02099F78
+FUN_02099F78:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, r0
+ ldr r0, _02099FA4 ; =0x021C8D34
+ bl FUN_0209A008
+_02099F8C: ; 0x02099F8C
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02099FA4: .word 0x021C8D34
+
+ arm_func_start FUN_02099FA8
+FUN_02099FA8:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, r0
+ cmp r1, #0x0
+ ble _02099FCC
+ ldr r0, _02099FEC ; =0x021C8D30
+ bl FUN_0209A008
+_02099FC4: ; 0x02099FC4
+ cmp r0, #0x0
+ bne _02099FDC
+_02099FCC:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_02099FDC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02099FEC: .word 0x021C8D30
+
+ arm_func_start FUN_02099FF0
+FUN_02099FF0: ; 0x02099FF0
+ ldr ip, _0209A000 ; =FUN_0209A034
+ mov r1, r0
+ ldr r0, _0209A004 ; =0x021C8D34
+ bx r12
+ .balign 4
+_0209A000: .word FUN_0209A034
+_0209A004: .word 0x021C8D34
+
+ arm_func_start FUN_0209A008
+FUN_0209A008:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209A02C
+_0209A014:
+ cmp r2, r1
+ bxeq lr
+ add r0, r2, #0x7c
+ ldr r2, [r2, #0x7c]
+ cmp r2, #0x0
+ bne _0209A014
+_0209A02C:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_0209A034
+FUN_0209A034: ; 0x0209A034
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl FUN_0209A008
+_0209A040: ; 0x0209A040
+ cmp r0, #0x0
+ ldrne r1, [r4, #0x7c]
+ strne r1, [r0, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209A054
+FUN_0209A054: ; 0x0209A054
+ ldr ip, _0209A064 ; =FUN_0209A034
+ mov r1, r0
+ ldr r0, _0209A068 ; =0x021C8D30
+ bx r12
+ .balign 4
+_0209A064: .word FUN_0209A034
+_0209A068: .word 0x021C8D30
+
+ arm_func_start FUN_0209A06C
+FUN_0209A06C: ; 0x0209A06C
+ ldr ip, _0209A07C ; =FUN_0209A084
+ mov r1, r0
+ ldr r0, _0209A080 ; =0x021C8D34
+ bx r12
+ .balign 4
+_0209A07C: .word FUN_0209A084
+_0209A080: .word 0x021C8D34
+
+ arm_func_start FUN_0209A084
+FUN_0209A084: ; 0x0209A084
+ ldr r2, [r0, #0x0]
+ str r2, [r1, #0x7c]
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_0209A094
+FUN_0209A094: ; 0x0209A094
+ ldr ip, _0209A0A4 ; =FUN_0209A084
+ mov r1, r0
+ ldr r0, _0209A0A8 ; =0x021C8D30
+ bx r12
+ .balign 4
+_0209A0A4: .word FUN_0209A084
+_0209A0A8: .word 0x021C8D30
+
+ arm_func_start FUN_0209A0AC
+FUN_0209A0AC: ; 0x0209A0AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r9, r2
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x8]
+ mov r0, #0x0
+ mov r8, r3
+ mvn r2, #0x0
+ cmp r8, r2
+ cmpeq r9, r2
+ movne r11, #0x1
+ mov r10, r1
+ moveq r11, #0x0
+ str r0, [sp, #0x4]
+_0209A0E8:
+ ldr r5, [sp, #0x4]
+ ldr r7, [sp, #0x0]
+ mov r6, r5
+ cmp r10, #0x0
+ bls _0209A128
+_0209A0FC:
+ ldrsh r1, [r7, #0x4]
+ ldr r0, [r7, #0x0]
+ orr r4, r1, #0xe0
+ bl FUN_02099E90
+_0209A10C: ; 0x0209A10C
+ ands r0, r4, r0
+ strh r0, [r7, #0x6]
+ add r6, r6, #0x1
+ addne r5, r5, #0x1
+ cmp r6, r10
+ add r7, r7, #0x8
+ blo _0209A0FC
+_0209A128:
+ cmp r5, #0x0
+ bgt _0209A160
+ cmp r11, #0x0
+ beq _0209A148
+ mov r1, #0x0
+ subs r0, r1, r9
+ sbcs r0, r1, r8
+ bge _0209A160
+_0209A148:
+ ldr r0, [sp, #0x8]
+ bl OS_Sleep
+ ldr r0, _0209A170 ; =0x0000020B
+ subs r9, r9, r0
+ sbc r8, r8, #0x0
+ b _0209A0E8
+_0209A160:
+ mov r0, r5
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209A170: .word 0x0000020B
+
+ arm_func_start FUN_0209A174
+FUN_0209A174: ; 0x0209A174
+ mov r2, r0, lsr #0x18
+ strb r2, [r1, #0x0]
+ mov r2, r0, lsr #0x10
+ strb r2, [r1, #0x1]
+ mov r2, r0, lsr #0x8
+ strb r2, [r1, #0x2]
+ strb r0, [r1, #0x3]
+ bx lr
+
+ arm_func_start FUN_0209A194
+FUN_0209A194: ; 0x0209A194
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ cmp r0, #0x2
+ mov r4, r2
+ addne sp, sp, #0x18
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r3, #0x10
+ addcc sp, sp, #0x18
+ movcc r0, #0x0
+ ldmccia sp!, {r4,lr}
+ bxcc lr
+ mov r0, r1
+ add r1, sp, #0xc
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x10
+ bl FUN_0209A174
+ ldrb r1, [sp, #0x12]
+ ldr r2, _0209A220 ; =0x0210620C
+ mov r0, r4
+ str r1, [sp, #0x0]
+ ldrb r3, [sp, #0x11]
+ mov r1, #0x10
+ str r3, [sp, #0x4]
+ ldrb r3, [sp, #0x10]
+ str r3, [sp, #0x8]
+ ldrb r3, [sp, #0x13]
+ bl OS_SNPrintf
+ mov r0, r4
+ add sp, sp, #0x18
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209A220: .word 0x0210620C
+
+ arm_func_start FUN_0209A224
+FUN_0209A224: ; 0x0209A224
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl FUN_02099D28
+_0209A230: ; 0x0209A230
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r2, r0, lsr #0x18
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r2, r2, #0xff
+ and r0, r1, #0xff00
+ and r1, r3, #0xff0000
+ orr r0, r2, r0
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r4, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209A27C
+FUN_0209A27C: ; 0x0209A27C
+ stmdb sp!, {r0-r3}
+
+ arm_func_start FUN_0209A280
+FUN_0209A280: ; 0x0209A280
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _0209A2B0 ; =0x021C8D5C
+ add r1, sp, #0x8
+ mov r0, #0x2
+ mov r3, #0x10
+ bl FUN_0209A194
+ ldr r0, _0209A2B0 ; =0x021C8D5C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_0209A2B0: .word 0x021C8D5C
+
+ arm_func_start THUNK_FUN_02099BC8
+THUNK_FUN_02099BC8: ; 0x0209A2B4
+ ldr ip, _0209A2BC ; =FUN_02099BC8
+ bx r12
+ .balign 4
+_0209A2BC: .word FUN_02099BC8
+
+ arm_func_start FUN_0209A2C0
+FUN_0209A2C0: ; 0x0209A2C0
+ stmdb sp!, {r4-r8,lr}
+ ldr r1, [r0, #0xc]
+ ldr ip, _0209A430 ; =0x021C8D6C
+ cmp r1, #0x1
+ moveq r1, #0x1
+ movne r1, #0x0
+ str r1, [r12, #0x0]
+ ldr r6, [r0, #0x10]
+ ldr r5, _0209A434 ; =FUN_0209A484
+ mov r2, r6, lsr #0x18
+ mov r1, r6, lsr #0x8
+ mov r3, r6, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ mov r6, r6, lsl #0x18
+ orr r1, r2, r1
+ and r3, r3, #0xff0000
+ orr r1, r3, r1
+ and r2, r6, #0xff000000
+ orr r1, r2, r1
+ str r1, [r12, #0x4]
+ ldr r7, [r0, #0x14]
+ ldr r4, _0209A438 ; =FUN_0209A444
+ mov r2, r7, lsr #0x18
+ mov r1, r7, lsr #0x8
+ mov r6, r7, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ mov r7, r7, lsl #0x18
+ orr r1, r2, r1
+ and r6, r6, #0xff0000
+ and r2, r7, #0xff000000
+ orr r1, r6, r1
+ orr r1, r2, r1
+ str r1, [r12, #0x8]
+ ldr r1, [r0, #0x18]
+ ldr r3, _0209A43C ; =0x021C8D40
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r1, [r12, #0xc]
+ ldr r1, [r0, #0x1c]
+ ldr r2, _0209A440 ; =0x021C8D3C
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r1, [r12, #0x10]
+ ldr r1, [r0, #0x20]
+ mov lr, #0x40
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r5, [r12, #0x18]
+ str r4, [r12, #0x1c]
+ str r1, [r12, #0x14]
+ ldr r1, [r0, #0x4]
+ str r1, [r3, #0x0]
+ ldr r1, [r0, #0x8]
+ str lr, [r12, #0x20]
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x2c]
+ str r1, [r12, #0x30]
+ ldr r1, [r0, #0x30]
+ mov r0, r12
+ str r1, [r12, #0x34]
+ bl FUN_02097834
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209A430: .word 0x021C8D6C
+_0209A434: .word FUN_0209A484
+_0209A438: .word FUN_0209A444
+_0209A43C: .word 0x021C8D40
+_0209A440: .word 0x021C8D3C
+
+ arm_func_start FUN_0209A444
+FUN_0209A444: ; 0x0209A444
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r1, _0209A480 ; =0x021C8D3C
+ ldr r2, [r0, #-0x4]
+ ldr r3, [r1, #0x0]
+ sub r1, r0, #0x4
+ mov r0, #0x0
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209A480: .word 0x021C8D3C
+
+ arm_func_start FUN_0209A484
+FUN_0209A484: ; 0x0209A484
+ stmdb sp!, {r4,lr}
+ ldr r1, _0209A4B0 ; =0x021C8D40
+ add r4, r0, #0x4
+ ldr r2, [r1, #0x0]
+ mov r1, r4
+ mov r0, #0x0
+ blx r2
+ cmp r0, #0x0
+ strne r4, [r0], #0x4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209A4B0: .word 0x021C8D40
+
+ arm_func_start FUN_0209A4B4
+FUN_0209A4B4: ; 0x0209A4B4
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ cmp r1, #0x3
+ beq _0209A4D4
+ cmp r1, #0x4
+ beq _0209A4E8
+ b _0209A4FC
+_0209A4D4:
+ ldrsb r0, [r0, #0x72]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ movne r0, #0x4
+ bx lr
+_0209A4E8:
+ ands r1, r2, #0x4
+ movne r1, #0x0
+ strneb r1, [r0, #0x72]
+ moveq r1, #0x1
+ streqb r1, [r0, #0x72]
+_0209A4FC:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_0209A504
+FUN_0209A504: ; 0x0209A504
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r1
+ add r1, sp, #0x0
+ add r2, sp, #0x4
+ bl FUN_02098120
+_0209A51C: ; 0x0209A51C
+ cmp r0, #0x0
+ addlt sp, sp, #0x8
+ ldmltia sp!, {r4,lr}
+ bxlt lr
+ ldrh r1, [sp, #0x0]
+ mov r2, r1, asr #0x8
+ mov r1, r1, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ orr r1, r2, r1
+ strh r1, [r4, #0x2]
+ ldr r12, [sp, #0x4]
+ mov r2, r12, lsr #0x18
+ mov r1, r12, lsr #0x8
+ mov r3, r12, lsl #0x8
+ mov r12, r12, lsl #0x18
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ and r3, r3, #0xff0000
+ orr r1, r2, r1
+ and r2, r12, #0xff000000
+ orr r1, r3, r1
+ orr r1, r2, r1
+ str r1, [r4, #0x4]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209A588
+FUN_0209A588: ; 0x0209A588
+ ldr ip, _0209A590 ; =FUN_0209822C
+ bx r12
+ .balign 4
+_0209A590: .word FUN_0209822C
+
+ arm_func_start FUN_0209A594
+FUN_0209A594: ; 0x0209A594
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r12, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r2, r12, lsr #0x18
+ mov r4, r0, lsr #0x18
+ mov lr, r0, lsr #0x8
+ mov r1, r12, lsr #0x8
+ mov r5, r0, lsl #0x8
+ mov r3, r12, lsl #0x8
+ mov r0, r0, lsl #0x18
+ mov r12, r12, lsl #0x18
+ and r4, r4, #0xff
+ and lr, lr, #0xff00
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ and r5, r5, #0xff0000
+ orr r4, r4, lr
+ and r3, r3, #0xff0000
+ orr r1, r2, r1
+ and lr, r0, #0xff000000
+ orr r0, r5, r4
+ and r2, r12, #0xff000000
+ orr r1, r3, r1
+ orr r0, lr, r0
+ orr r1, r2, r1
+ bl FUN_02099CEC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209A60C
+FUN_0209A60C: ; 0x0209A60C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_02099C78
+ mov r2, r0, lsr #0x18
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r2, r2, #0xff
+ and r0, r1, #0xff00
+ and r1, r3, #0xff0000
+ orr r0, r2, r0
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ orr r0, r2, r0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209A650
+FUN_0209A650: ; 0x0209A650
+ stmdb sp!, {r4-r6,lr}
+ movs r5, r0
+ mov r4, r1
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl FUN_02099C78
+_0209A66C: ; 0x0209A66C
+ cmp r5, #0x0
+ ldrneh r1, [r5, #0x74]
+ mov r2, r0, lsr #0x18
+ mov r6, #0x8
+ moveq r1, #0x0
+ cmp r0, #0x0
+ moveq r1, #0x0
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r5, r3, asr #0x8
+ mov lr, r3, lsl #0x8
+ strb r6, [r4, #0x0]
+ mov r6, #0x2
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r0, r1, #0xff00
+ and r2, r2, #0xff
+ orr r0, r2, r0
+ and r1, r3, #0xff0000
+ and r5, r5, #0xff
+ and lr, lr, #0xff00
+ strb r6, [r4, #0x1]
+ orr r3, r5, lr
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ strh r3, [r4, #0x2]
+ orr r0, r2, r0
+ str r0, [r4, #0x4]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209A6EC
+FUN_0209A6EC: ; 0x0209A6EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl FUN_02099D88
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, _0209A7A4 ; =0x021C8DA4
+ ldr r2, _0209A7A8 ; =0x00000101
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldr r0, _0209A7A4 ; =0x021C8DA4
+ ldr r2, _0209A7A8 ; =0x00000101
+ mov r1, r5
+ bl STD_CopyLString
+ mov r1, r4, lsr #0x18
+ mov r0, r4, lsr #0x8
+ mov r2, r4, lsl #0x8
+ mov r3, r4, lsl #0x18
+ and r1, r1, #0xff
+ and r0, r0, #0xff00
+ and r2, r2, #0xff0000
+ orr r0, r1, r0
+ and r3, r3, #0xff000000
+ orr r1, r2, r0
+ ldr r5, _0209A7A4 ; =0x021C8DA4
+ ldr r0, _0209A7AC ; =0x021C8D4C
+ ldr ip, _0209A7B0 ; =0x021C8D44
+ mov r4, #0x0
+ ldr r2, _0209A7B4 ; =0x021C8D38
+ orr r1, r3, r1
+ mov lr, #0x2
+ mov r3, #0x4
+ str r5, [r0, #0x0]
+ str r4, [r0, #0x4]
+ strh lr, [r0, #0x8]
+ strh r3, [r0, #0xa]
+ str r12, [r0, #0xc]
+ str r2, [r12, #0x0]
+ str r4, [r12, #0x4]
+ str r1, [r2, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209A7A4: .word 0x021C8DA4
+_0209A7A8: .word 0x00000101
+_0209A7AC: .word 0x021C8D4C
+_0209A7B0: .word 0x021C8D44
+_0209A7B4: .word 0x021C8D38
+
+ arm_func_start thunk_FUN_0209996c
+thunk_FUN_0209996c: ; 0x0209A7B8
+ ldr ip, _0209A7C0 ; =FUN_0209996C
+ bx r12
+ .balign 4
+_0209A7C0: .word FUN_0209996C
+
+ arm_func_start thunk_FUN_020995dc
+thunk_FUN_020995dc: ; 0x0209A7C4
+ ldr ip, _0209A7CC ; =FUN_020995DC
+ bx r12
+ .balign 4
+_0209A7CC: .word FUN_020995DC
+
+ arm_func_start FUN_0209A7D0
+FUN_0209A7D0: ; 0x0209A7D0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r5, [sp, #0x20]
+ cmp r5, #0x0
+ moveq r5, #0x0
+ moveq r4, r5
+ beq _0209A83C
+ ldrh r4, [r5, #0x2]
+ ldr r6, [r5, #0x4]
+ mov r7, r4, asr #0x8
+ mov r12, r4, lsl #0x8
+ mov r4, r6, lsr #0x18
+ mov lr, r6, lsr #0x8
+ mov r5, r6, lsl #0x8
+ mov r6, r6, lsl #0x18
+ and r7, r7, #0xff
+ and r12, r12, #0xff00
+ orr r7, r7, r12
+ and r4, r4, #0xff
+ and lr, lr, #0xff00
+ and r5, r5, #0xff0000
+ orr r4, r4, lr
+ mov r12, r7, lsl #0x10
+ orr r4, r5, r4
+ and r6, r6, #0xff000000
+ mov r5, r12, lsr #0x10
+ orr r4, r6, r4
+_0209A83C:
+ str r4, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r5
+ bl FUN_02099470
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209A858
+FUN_0209A858: ; 0x0209A858
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r12
+ bl FUN_02099470
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209A880
+FUN_0209A880: ; 0x0209A880
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ add r12, sp, #0xc
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ add r3, sp, #0x8
+ bl FUN_02098CF4
+_0209A89C: ; 0x0209A89C
+ cmp r0, #0x0
+ addlt sp, sp, #0x14
+ ldmltia sp!, {lr}
+ bxlt lr
+ ldr r1, [sp, #0x18]
+ cmp r1, #0x0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrh r2, [sp, #0x8]
+ mov r3, r2, asr #0x8
+ mov r2, r2, lsl #0x8
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ orr r2, r3, r2
+ strh r2, [r1, #0x2]
+ ldr lr, [sp, #0xc]
+ mov r3, lr, lsr #0x18
+ mov r2, lr, lsr #0x8
+ mov r12, lr, lsl #0x8
+ mov lr, lr, lsl #0x18
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ and r12, r12, #0xff0000
+ orr r2, r3, r2
+ and r3, lr, #0xff000000
+ orr r2, r12, r2
+ orr r2, r3, r2
+ str r2, [r1, #0x4]
+ add sp, sp, #0x14
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209A91C
+FUN_0209A91C: ; 0x0209A91C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r12
+ bl FUN_02098CF4
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209A944
+FUN_0209A944: ; 0x0209A944
+ stmdb sp!, {r4,lr}
+ ldrh r2, [r1, #0x2]
+ ldr lr, [r1, #0x4]
+ mov r4, r2, asr #0x8
+ mov r1, r2, lsl #0x8
+ mov r3, lr, lsr #0x18
+ mov r2, lr, lsr #0x8
+ mov r12, lr, lsl #0x8
+ mov lr, lr, lsl #0x18
+ and r4, r4, #0xff
+ and r1, r1, #0xff00
+ orr r1, r4, r1
+ mov r1, r1, lsl #0x10
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ and r12, r12, #0xff0000
+ orr r2, r3, r2
+ and r3, lr, #0xff000000
+ orr r2, r12, r2
+ mov r1, r1, lsr #0x10
+ orr r2, r3, r2
+ bl FUN_020983B0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209A9A4
+FUN_0209A9A4: ; 0x0209A9A4
+ ldrh r1, [r1, #0x2]
+ ldr ip, _0209A9CC ; =FUN_020984B4
+ mov r2, r1, asr #0x8
+ mov r1, r1, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ orr r1, r2, r1
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ bx r12
+ .balign 4
+_0209A9CC: .word FUN_020984B4
+
+ arm_func_start FUN_0209A9D0
+FUN_0209A9D0: ; 0x0209A9D0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x1
+ bne _0209A9F4
+ ldr r0, _0209AA08 ; =0x021061DC
+ bl FUN_02097F70
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209A9F4:
+ ldr r0, _0209AA0C ; =0x021061C4
+ bl FUN_02097F70
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209AA08: .word 0x021061DC
+_0209AA0C: .word 0x021061C4
+
+ arm_func_start FUN_0209AA10
+FUN_0209AA10: ; 0x0209AA10
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r6, [r7, #0x4]
+ ldr r5, [r6, #0x64]
+ add r0, r5, #0xe0
+ ldr r4, [r5, #0xc4]
+ bl OS_LockMutex
+ ldr r1, [r7, #0x10]
+ cmp r1, #0x0
+ beq _0209AA54
+ mov r0, #0x1
+ str r1, [r4, #0xc]
+ bl FUN_020A02EC
+ mov r0, #0x4
+ strb r0, [r6, #0x73]
+ b _0209AA68
+_0209AA54:
+ mov r0, #0x0
+ strb r0, [r6, #0x73]
+ bl FUN_020A02EC
+_0209AA60: ; 0x0209AA60
+ mov r0, #0x0
+ str r0, [r4, #0xc]
+_0209AA68:
+ add r0, r5, #0xe0
+ bl OS_UnlockMutex
+_0209AA70: ; 0x0209AA70
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209AA80
+FUN_0209AA80: ; 0x0209AA80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ ldr r0, _0209AACC ; =FUN_0209AA10
+ mov r1, r5
+ mov r2, #0x1
+ bl FUN_02097A98
+ movs r1, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r0, r5
+ str r4, [r1, #0x10]
+ bl FUN_02097958
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209AACC: .word FUN_0209AA10
+
+ arm_func_start FUN_0209AAD0
+FUN_0209AAD0: ; 0x0209AAD0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_02099FA8
+_0209AAE4: ; 0x0209AAE4
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldrsb r0, [r5, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209AB10
+ cmp r0, #0x4
+ movne r1, #0x0
+_0209AB10:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r5, #0x0
+ mov r1, #0x0
+ beq _0209AB3C
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_0209AB3C:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r5
+ mov r1, r4
+ bl FUN_0209AA80
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209AB80
+FUN_0209AB80: ; 0x0209AB80
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r6, _0209ACC0 ; =0x021C8F24
+ mov r9, #0x0
+ ldr r11, [r6, #0x8]
+ ldr r2, [r6, #0x0]
+ ldr r1, [r6, #0x4]
+ umull r5, r4, r11, r2
+ mla r4, r11, r1, r4
+ ldr r10, [r6, #0xc]
+ ldr r3, [r6, #0x10]
+ mla r4, r10, r2, r4
+ adds r5, r3, r5
+ ldr r1, [r6, #0x14]
+ umull r8, r7, r11, r5
+ adc r4, r1, r4
+ mla r7, r11, r4, r7
+ mla r7, r10, r5, r7
+ mov r2, r9, lsl #0x10
+ adds r8, r3, r8
+ str r5, [r6, #0x0]
+ adc r5, r1, r7
+ mov r3, r9, lsl #0x10
+ orr r2, r2, r4, lsr #0x10
+ str r4, [r6, #0x4]
+ orr r3, r3, r5, lsr #0x10
+ add r1, sp, #0x4
+ mov r10, r0
+ strh r2, [sp, #0x8]
+ str r8, [r6, #0x0]
+ str r5, [r6, #0x4]
+ strh r3, [sp, #0xa]
+ bl FUN_0209AD34
+_0209AC04: ; 0x0209AC04
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x4]
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ mov r0, #0x1
+ ldr r6, _0209ACC4 ; =0x021C8F1C
+ strb r0, [sp, #0x0]
+ strb r0, [sp, #0x1]
+ add r5, sp, #0x8
+ mov r4, r9
+ mov r11, r9
+_0209AC34:
+ mov r8, r11
+ add r7, sp, #0x0
+_0209AC3C:
+ ldrb r0, [r7, #0x0]
+ cmp r0, #0x0
+ beq _0209AC80
+ mov r0, r8, lsl #0x1
+ ldrh r2, [r5, r0]
+ ldr r1, [r6, r8, lsl #0x2]
+ mov r0, r10
+ bl FUN_0209ACC8
+ str r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _0209AC74
+ mvn r1, #0x0
+ cmp r0, r1
+ bne _0209AC9C
+_0209AC74:
+ mvn r1, #0x0
+ cmp r0, r1
+ streqb r4, [r7, #0x0]
+_0209AC80:
+ add r8, r8, #0x1
+ cmp r8, #0x2
+ add r7, r7, #0x1
+ blt _0209AC3C
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blt _0209AC34
+_0209AC9C:
+ ldr r1, [sp, #0x4]
+ mvn r0, #0x0
+ cmp r1, r0
+ moveq r0, #0x0
+ streq r0, [sp, #0x4]
+ ldr r0, [sp, #0x4]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209ACC0: .word 0x021C8F24
+_0209ACC4: .word 0x021C8F1C
+
+ arm_func_start FUN_0209ACC8
+FUN_0209ACC8: ; 0x0209ACC8
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ movs r5, r1
+ mov r6, r0
+ mov r4, r2
+ addeq sp, sp, #0x8
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl FUN_0209CB44
+ bl FUN_0209CBE8
+ mov r2, r5
+ mov r0, #0x0
+ mov r1, #0x35
+ bl FUN_0209CB78
+ mov r0, r6
+ mov r2, r4
+ mov r3, #0x0
+ str r3, [sp, #0x0]
+ mov r1, #0x1
+ bl FUN_0209AE18
+ mov r4, r0
+ bl FUN_0209CB24
+ mov r0, r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209AD34
+FUN_0209AD34:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r6, #0x0
+ mov r8, r0
+ mov r7, r1
+ mov r5, r6
+ add r4, sp, #0x0
+_0209AD50:
+ mov r0, r8
+ mov r1, r4
+ mov r6, r6, lsl #0x8
+ bl FUN_0209ADE4
+ ldr r2, [sp, #0x0]
+ cmp r8, r2
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r8, r2
+ cmp r0, #0xff
+ bhi _0209ADB0
+ cmp r5, #0x3
+ beq _0209AD9C
+ ldrb r1, [r2, #0x0]
+ add r8, r2, #0x1
+ cmp r1, #0x2e
+ bne _0209ADB0
+_0209AD9C:
+ cmp r5, #0x3
+ bne _0209ADC0
+ ldrb r1, [r8, #0x0]
+ cmp r1, #0x0
+ beq _0209ADC0
+_0209ADB0:
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209ADC0:
+ add r5, r5, #0x1
+ cmp r5, #0x4
+ orr r6, r6, r0
+ blt _0209AD50
+ str r6, [r7, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_0209ADE4
+FUN_0209ADE4: ; 0x0209ADE4
+ str r0, [r1, #0x0]
+ mov r12, #0x0
+ mov r2, #0xa
+_0209ADF0:
+ ldrb r3, [r0, #0x0]
+ sub r3, r3, #0x30
+ and r3, r3, #0xff
+ cmp r3, #0x9
+ mlals r12, r2, r12, r3
+ addls r0, r0, #0x1
+ strls r0, [r1, #0x0]
+ bls _0209ADF0
+ mov r0, r12
+ bx lr
+
+ arm_func_start FUN_0209AE18
+FUN_0209AE18: ; 0x0209AE18
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ mov r9, r2
+ mov r2, r9, asr #0x8
+ mov r10, r1
+ orr r1, r2, r9, lsl #0x8
+ strh r1, [sp, #0x10]
+ cmp r10, #0x20
+ mov r5, #0x0
+ movne r1, #0x1
+ strneh r1, [sp, #0x12]
+ ldreq r1, _0209B0C8 ; =0x00001001
+ strh r5, [sp, #0x16]
+ streqh r1, [sp, #0x12]
+ mov r1, #0x100
+ strh r1, [sp, #0x14]
+ add r1, sp, #0x1c
+ strh r5, [sp, #0x18]
+ strh r5, [sp, #0x1a]
+ str r5, [sp, #0xc]
+ ldrb r6, [r0], #0x1
+ str r3, [sp, #0x0]
+ ldr r8, [sp, #0x70]
+ add r2, r1, #0x1
+ cmp r6, #0x0
+ beq _0209AED8
+ add r4, sp, #0x10
+_0209AE84:
+ cmp r6, #0x2e
+ beq _0209AEB8
+ sub r3, r2, r4
+ cmp r3, #0x3c
+ addge sp, sp, #0x4c
+ mvnge r0, #0x0
+ ldmgeia sp!, {r4-r11,lr}
+ bxge lr
+ strb r6, [r2], #0x1
+ ldr r3, [sp, #0xc]
+ add r3, r3, #0x1
+ str r3, [sp, #0xc]
+ b _0209AECC
+_0209AEB8:
+ ldr r3, [sp, #0xc]
+ strb r3, [r1, #0x0]
+ mov r1, r2
+ str r5, [sp, #0xc]
+ add r2, r2, #0x1
+_0209AECC:
+ ldrb r6, [r0], #0x1
+ cmp r6, #0x0
+ bne _0209AE84
+_0209AED8:
+ ldr r0, [sp, #0xc]
+ mov r3, #0x0
+ strb r0, [r1, #0x0]
+ strb r3, [r2, #0x0]
+ mov r0, r10, lsr #0x8
+ strb r0, [r2, #0x1]
+ strb r10, [r2, #0x2]
+ strb r3, [r2, #0x3]
+ mov r3, #0x1
+ add r0, sp, #0x10
+ add r1, r2, #0x5
+ sub r1, r1, r0
+ strb r3, [r2, #0x4]
+ bl FUN_0209C030
+ mov r6, #0x0
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ mov r0, #0x2
+ str r0, [sp, #0x8]
+ mov r0, #0x1
+ orr r5, r5, r1, lsl #0x10
+ str r0, [sp, #0x4]
+ mvn r11, #0x0
+ b _0209B084
+_0209AF38:
+ bl FUN_0209BF9C
+_0209AF3C: ; 0x0209AF3C
+ cmp r0, #0x0
+ bne _0209AF4C
+ bl FUN_020A005C
+ b _0209B084
+_0209AF4C:
+ add r0, sp, #0xc
+ bl FUN_0209C638
+ ldr r1, [sp, #0xc]
+ cmp r1, #0xc
+ bls _0209B07C
+ ldrh r3, [r0, #0x0]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r9, r2, lsr #0x10
+ bne _0209B07C
+ ldrb r2, [r0, #0x3]
+ and r2, r2, #0xf
+ cmp r2, #0x3
+ moveq r6, r11
+ beq _0209B07C
+ cmp r2, #0x0
+ bne _0209B07C
+ ldrb r2, [r0, #0x4]
+ add r4, r0, r1
+ ldrb r1, [r0, #0x5]
+ add r0, r0, #0xc
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ sub r7, r1, #0x1
+ beq _0209AFCC
+_0209AFB8:
+ bl FUN_0209B0D0
+_0209AFBC: ; 0x0209AFBC
+ cmp r7, #0x0
+ add r0, r0, #0x4
+ sub r7, r7, #0x1
+ bne _0209AFB8
+_0209AFCC:
+ cmp r0, r4
+ bhs _0209B07C
+_0209AFD4:
+ bl FUN_0209B0D0
+ ldrb r7, [r0, #0x8]
+ ldrb r1, [r0, #0x9]
+ ldrb r3, [r0, #0x0]
+ ldrb r2, [r0, #0x1]
+ orr r1, r1, r7, lsl #0x8
+ mov r1, r1, lsl #0x10
+ orr r3, r2, r3, lsl #0x8
+ mov r2, r1, lsr #0x10
+ mov r1, r3, lsl #0x10
+ cmp r10, r1, lsr #0x10
+ bne _0209B06C
+ cmp r10, #0xc
+ beq _0209B04C
+ add r1, r0, #0x6
+ add r3, r1, r2
+ add r4, r0, #0x8
+ ldrb r1, [r1, r2]
+ ldrb r0, [r3, #0x1]
+ add r3, r4, r2
+ ldrb r2, [r4, r2]
+ orr r0, r0, r1, lsl #0x8
+ ldrb r1, [r3, #0x1]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r2, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r6, r1, r0, lsr #0x10
+ b _0209B07C
+_0209B04C:
+ cmp r2, r8
+ ldrhi r6, [sp, #0x8]
+ bhi _0209B07C
+ ldr r1, [sp, #0x0]
+ add r0, r0, #0xa
+ bl MI_CpuCopy8
+ ldr r6, [sp, #0x4]
+ b _0209B07C
+_0209B06C:
+ add r1, r2, #0xa
+ add r0, r0, r1
+ cmp r0, r4
+ blo _0209AFD4
+_0209B07C:
+ ldr r0, [sp, #0xc]
+ bl FUN_0209C52C
+_0209B084:
+ ldr r0, _0209B0CC ; =0x021C8EFC
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209B0B8
+ cmp r6, #0x0
+ bne _0209B0B8
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ blt _0209AF38
+_0209B0B8:
+ mov r0, r6
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209B0C8: .word 0x00001001
+_0209B0CC: .word 0x021C8EFC
+
+ arm_func_start FUN_0209B0D0
+FUN_0209B0D0:
+ ldrb r2, [r0], #0x1
+ cmp r2, #0x0
+ bxeq lr
+_0209B0DC:
+ and r1, r2, #0xc0
+ cmp r1, #0xc0
+ addeq r0, r0, #0x1
+ bxeq lr
+ add r0, r0, r2
+ ldrb r2, [r0], #0x1
+ cmp r2, #0x0
+ bne _0209B0DC
+ bx lr
+
+ arm_func_start FUN_0209B100
+FUN_0209B100: ; 0x0209B100
+ stmdb sp!, {r4,lr}
+ bl FUN_0209CB44
+ bl FUN_0209CBE8
+ ldr r1, _0209B168 ; =0x021C8ED4
+ mov r0, #0x44
+ ldr r2, [r1, #0x0]
+ mov r1, #0x43
+ bl FUN_0209CB78
+ ldr r4, _0209B16C ; =0x021C924A
+ mov r1, #0x7
+ mov r0, r4
+ mov r2, #0x0
+ bl FUN_0209B8E0
+ mov r1, #0xff
+ add r2, r0, #0x1
+ strb r1, [r0, #0x0]
+ mov r0, #0x0
+ mov r1, #0x12c
+ sub r3, r2, r4
+ bl FUN_0209B8A0
+ sub r1, r0, r4
+ mov r0, r4
+ bl FUN_0209C030
+ bl FUN_0209CB24
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209B168: .word 0x021C8ED4
+_0209B16C: .word 0x021C924A
+
+ arm_func_start FUN_0209B170
+FUN_0209B170:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ bl FUN_0209CB44
+ bl FUN_0209CBE8
+ cmp r4, #0x1
+ bne _0209B1A8
+ ldr r1, _0209B28C ; =0x021C8ED4
+ mov r0, #0x44
+ ldr r2, [r1, #0x0]
+ mov r1, #0x43
+ bl FUN_0209CB78
+ b _0209B1B8
+_0209B1A8:
+ mov r0, #0x44
+ mov r1, #0x43
+ mvn r2, #0x0
+ bl FUN_0209CB78
+_0209B1B8:
+ mov r6, #0x0
+_0209B1BC:
+ mov r0, r4
+ bl FUN_0209B6BC
+ mov r1, r6
+ bl FUN_0209B2FC
+ movs r7, r0
+ bne _0209B1E0
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ blt _0209B1BC
+_0209B1E0:
+ bl FUN_0209CB24
+ cmp r7, #0x2
+ bne _0209B224
+ ldr r0, _0209B290 ; =0x021C8F00
+ mov r1, #0x3
+ ldr r3, [r0, #0x0]
+ ldr r2, _0209B294 ; =0x021C8EEC
+ mov r3, r3, lsr #0x1
+ str r3, [r5, #0x0]
+ ldr r3, [r0, #0x0]
+ add sp, sp, #0x4
+ mul r1, r3, r1
+ mov r1, r1, lsr #0x3
+ str r1, [r2, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209B224:
+ ldr r1, _0209B294 ; =0x021C8EEC
+ cmp r4, #0x1
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x1
+ str r0, [r1, #0x0]
+ str r0, [r5, #0x0]
+ beq _0209B24C
+ cmp r4, #0x2
+ beq _0209B270
+ b _0209B27C
+_0209B24C:
+ cmp r0, #0x3c
+ bhs _0209B27C
+ mov r2, #0x1
+ ldr r0, _0209B290 ; =0x021C8F00
+ str r2, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsr #0x3
+ str r0, [r1, #0x0]
+ b _0209B27C
+_0209B270:
+ cmp r0, #0x3c
+ movcc r0, #0x1
+ strcc r0, [r5, #0x0]
+_0209B27C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209B28C: .word 0x021C8ED4
+_0209B290: .word 0x021C8F00
+_0209B294: .word 0x021C8EEC
+
+ arm_func_start FUN_0209B298
+FUN_0209B298:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl FUN_0209CB44
+ bl FUN_0209CBE8
+ mov r0, #0x44
+ mov r1, #0x43
+ mvn r2, #0x0
+ bl FUN_0209CB78
+ mov r4, #0x0
+_0209B2BC:
+ bl FUN_0209B7D8
+ mov r1, r4
+ bl FUN_0209B2FC
+ mov r5, r0
+ cmp r5, #0x1
+ beq _0209B2E0
+ add r4, r4, #0x1
+ cmp r4, #0x4
+ blt _0209B2BC
+_0209B2E0:
+ bl FUN_0209CB24
+ cmp r5, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209B2FC
+FUN_0209B2FC: ; 0x0209B2FC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ add r2, r1, #0x1
+ mov r1, #0xf
+ mul r1, r2, r1
+ str r1, [sp, #0x8]
+ str r0, [sp, #0x0]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x4]
+ orr r0, r0, r1, lsl #0x10
+ mov r4, #0x0
+ str r0, [sp, #0x4]
+ mov r0, #0x3
+ mov r9, r4
+ ldr r5, _0209B698 ; =0x021C8F1C
+ mov r7, #0x2
+ mov r8, #0x1
+ ldr fp, _0209B69C ; =0x021C8EE0
+ ldr r6, _0209B6A0 ; =0x021C8ED0
+ str r0, [sp, #0xc]
+ b _0209B64C
+_0209B354:
+ bl FUN_0209BF9C
+_0209B358: ; 0x0209B358
+ cmp r0, #0x0
+ bne _0209B368
+ bl FUN_020A005C
+ b _0209B64C
+_0209B368:
+ add r0, sp, #0x10
+ bl FUN_0209C638
+ mov r10, r0
+ ldr r0, [sp, #0x10]
+ cmp r0, #0xf0
+ bls _0209B644
+ ldrb r0, [r10, #0x0]
+ cmp r0, #0x2
+ bne _0209B644
+ ldrh r1, [r10, #0x6]
+ ldrh r2, [r10, #0x4]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r1, r0, lsl #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ orr r1, r0, r1, lsr #0x10
+ ldr r0, [sp, #0x0]
+ cmp r0, r1
+ bne _0209B644
+ ldr r1, _0209B6A4 ; =0x021C8F14
+ add r0, r10, #0x1c
+ bl FUN_0209F9A0
+_0209B3D0: ; 0x0209B3D0
+ cmp r0, #0x0
+ bne _0209B644
+ ldrb r3, [r10, #0x10]
+ ldrb r0, [r10, #0x11]
+ ldrb r2, [r10, #0x12]
+ ldrb r1, [r10, #0x13]
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ orr r1, r1, r2, lsl #0x8
+ mov r0, r0, lsr #0x10
+ mov r2, r0, lsl #0x10
+ mov r0, r1, lsl #0x10
+ orr r0, r2, r0, lsr #0x10
+ ldrb r2, [r10, #0xec]
+ ldr r1, [sp, #0x10]
+ ldr r4, [sp, #0xc]
+ add r1, r10, r1
+ cmp r2, #0x63
+ bne _0209B644
+ ldrb r2, [r10, #0xed]
+ cmp r2, #0x82
+ bne _0209B644
+ ldrb r2, [r10, #0xee]
+ cmp r2, #0x53
+ bne _0209B644
+ add r2, r10, #0xf0
+ ldrb r3, [r10, #0xef]
+ cmp r3, #0x63
+ bne _0209B644
+ b _0209B630
+_0209B448:
+ cmp r3, #0x0
+ beq _0209B630
+ cmp r3, #0x33
+ bgt _0209B48C
+ cmp r3, #0x33
+ bge _0209B588
+ cmp r3, #0x6
+ bgt _0209B624
+ cmp r3, #0x1
+ blt _0209B624
+ cmp r3, #0x1
+ beq _0209B4AC
+ cmp r3, #0x3
+ beq _0209B4E0
+ cmp r3, #0x6
+ beq _0209B514
+ b _0209B624
+_0209B48C:
+ cmp r3, #0x35
+ bgt _0209B4A0
+ cmp r3, #0x35
+ beq _0209B5C0
+ b _0209B624
+_0209B4A0:
+ cmp r3, #0x36
+ beq _0209B5F0
+ b _0209B624
+_0209B4AC:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r6, #0x0]
+ b _0209B624
+_0209B4E0:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r11, #0x0]
+ b _0209B624
+_0209B514:
+ ldrb r3, [r2, #0x0]
+ cmp r3, #0x8
+ strcc r9, [r5, #0x4]
+ blo _0209B554
+ ldrb lr, [r2, #0x5]
+ ldrb r12, [r2, #0x6]
+ ldrb r10, [r2, #0x7]
+ ldrb r3, [r2, #0x8]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r5, #0x4]
+_0209B554:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r5, #0x0]
+ b _0209B624
+_0209B588:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r10, r10, r3, lsr #0x10
+ ldr r3, _0209B6A8 ; =0x021C8F00
+ str r10, [r3, #0x0]
+ b _0209B624
+_0209B5C0:
+ ldrb r3, [r2, #0x1]
+ cmp r3, #0x2
+ beq _0209B5E0
+ cmp r3, #0x5
+ ldreq r3, _0209B6AC ; =0x021C8F04
+ moveq r4, r7
+ streq r0, [r3, #0x0]
+ b _0209B624
+_0209B5E0:
+ ldr r3, _0209B6B0 ; =0x021C8EE8
+ mov r4, r8
+ str r0, [r3, #0x0]
+ b _0209B624
+_0209B5F0:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r10, r10, r3, lsr #0x10
+ ldr r3, _0209B6B4 ; =0x021C8ED4
+ str r10, [r3, #0x0]
+_0209B624:
+ ldrb r3, [r2, #0x0]
+ add r3, r3, #0x1
+ add r2, r2, r3
+_0209B630:
+ cmp r2, r1
+ bhs _0209B644
+ ldrb r3, [r2], #0x1
+ cmp r3, #0xff
+ bne _0209B448
+_0209B644:
+ ldr r0, [sp, #0x10]
+ bl FUN_0209C52C
+_0209B64C:
+ ldr r0, _0209B6B8 ; =0x021C8EFC
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209B688
+ cmp r4, #0x0
+ bne _0209B688
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x4]
+ orr r2, r2, r1, lsl #0x10
+ sub r1, r2, r0
+ ldr r0, [sp, #0x8]
+ cmp r1, r0
+ blt _0209B354
+_0209B688:
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209B698: .word 0x021C8F1C
+_0209B69C: .word 0x021C8EE0
+_0209B6A0: .word 0x021C8ED0
+_0209B6A4: .word 0x021C8F14
+_0209B6A8: .word 0x021C8F00
+_0209B6AC: .word 0x021C8F04
+_0209B6B0: .word 0x021C8EE8
+_0209B6B4: .word 0x021C8ED4
+_0209B6B8: .word 0x021C8EFC
+
+ arm_func_start FUN_0209B6BC
+FUN_0209B6BC: ; 0x0209B6BC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, _0209B7CC ; =0x021C924A
+ mov r5, r0
+ add r2, sp, #0x0
+ mov r0, r4
+ mov r1, #0x3
+ bl FUN_0209B8E0
+ mov r12, r0
+ cmp r5, #0x0
+ bne _0209B790
+ mov r0, #0x32
+ strb r0, [r12, #0x0]
+ mov r0, #0x4
+ ldr r3, _0209B7D0 ; =0x021C8EE8
+ strb r0, [r12, #0x1]
+ ldr r1, [r3, #0x0]
+ mov lr, #0x36
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, asr #0x8
+ strb r1, [r12, #0x2]
+ ldr r1, [r3, #0x0]
+ ldr r2, _0209B7D4 ; =0x021C8ED4
+ mov r1, r1, lsr #0x10
+ strb r1, [r12, #0x3]
+ ldr r1, [r3, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, asr #0x8
+ strb r1, [r12, #0x4]
+ ldr r1, [r3, #0x0]
+ strb r1, [r12, #0x5]
+ strb lr, [r12, #0x6]
+ strb r0, [r12, #0x7]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x8]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsr #0x10
+ strb r0, [r12, #0x9]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0xa]
+ ldr r0, [r2, #0x0]
+ strb r0, [r12, #0xb]
+ add r12, r12, #0xc
+_0209B790:
+ add r2, r12, #0x1
+ mov lr, #0xff
+ sub r3, r2, r4
+ mov r0, #0x0
+ mov r1, #0x12c
+ strb lr, [r12, #0x0]
+ bl FUN_0209B8A0
+ mov r1, r0
+ mov r0, r4
+ sub r1, r1, r4
+ bl FUN_0209C030
+_0209B7BC: ; 0x0209B7BC
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209B7CC: .word 0x021C924A
+_0209B7D0: .word 0x021C8EE8
+_0209B7D4: .word 0x021C8ED4
+
+ arm_func_start FUN_0209B7D8
+FUN_0209B7D8: ; 0x0209B7D8
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r4, _0209B898 ; =0x021C924A
+ add r2, sp, #0x0
+ mov r0, r4
+ mov r1, #0x1
+ bl FUN_0209B8E0
+ ldr r1, _0209B89C ; =0x021C8EE8
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _0209B85C
+ mov r0, #0x32
+ strb r0, [r12, #0x0]
+ mov r0, #0x4
+ strb r0, [r12, #0x1]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x2]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ strb r0, [r12, #0x3]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x4]
+ ldr r0, [r1, #0x0]
+ strb r0, [r12, #0x5]
+ add r12, r12, #0x6
+_0209B85C:
+ add r2, r12, #0x1
+ mov lr, #0xff
+ sub r3, r2, r4
+ mov r0, #0x0
+ mov r1, #0x12c
+ strb lr, [r12, #0x0]
+ bl FUN_0209B8A0
+ mov r1, r0
+ mov r0, r4
+ sub r1, r1, r4
+ bl FUN_0209C030
+_0209B888: ; 0x0209B888
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209B898: .word 0x021C924A
+_0209B89C: .word 0x021C8EE8
+
+ arm_func_start FUN_0209B8A0
+FUN_0209B8A0: ; 0x0209B8A0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r12, r0
+ mov r5, r2
+ cmp r3, r1
+ bhs _0209B8D0
+ sub r4, r1, r3
+ mov r0, r5
+ mov r1, r12
+ mov r2, r4
+ bl MI_CpuFill8
+ add r5, r5, r4
+_0209B8D0:
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209B8E0
+FUN_0209B8E0: ; 0x0209B8E0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r1, #0x0
+ mov r2, #0xec
+ mov r6, r0
+ bl MI_CpuFill8
+ ldr r0, _0209BA5C ; =0x00000101
+ mov r1, #0x6
+ strh r0, [r6, #0x0]
+ ldr r0, _0209BA60 ; =0x021C8F24
+ strb r1, [r6, #0x2]
+ ldr r3, [r0, #0x8]
+ ldr r2, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ umull lr, r12, r3, r2
+ mla r12, r3, r1, r12
+ ldr r1, [r0, #0xc]
+ ldr r7, [r0, #0x10]
+ mla r12, r1, r2, r12
+ adds r3, r7, lr
+ ldr r1, [r0, #0x14]
+ str r3, [r0, #0x0]
+ adc r1, r1, r12
+ str r1, [r0, #0x4]
+ mov r0, r1, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ cmp r4, #0x0
+ mov r2, r3, asr #0x8
+ mov r0, r1, lsl #0x10
+ strne r1, [r4, #0x0]
+ mov r1, r0, lsr #0x10
+ orr r2, r2, r3, lsl #0x8
+ mov r0, r1, asr #0x8
+ strh r2, [r6, #0x4]
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r6, #0x6]
+ ldr r2, _0209BA64 ; =0x021C8F04
+ ldr r0, _0209BA68 ; =0x021C8F14
+ ldr r1, [r2, #0x0]
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ strh r1, [r6, #0xc]
+ ldr r2, [r2, #0x0]
+ add r1, r6, #0x1c
+ mov r2, r2, lsl #0x10
+ mov r3, r2, lsr #0x10
+ mov r2, r3, asr #0x8
+ orr r3, r2, r3, lsl #0x8
+ mov r2, #0x6
+ strh r3, [r6, #0xe]
+ bl MI_CpuCopy8
+ ldr r0, _0209BA6C ; =0x00008263
+ ldr r1, _0209BA70 ; =0x00006353
+ strh r0, [r6, #0xec]
+ strh r1, [r6, #0xee]
+ ldr r0, _0209BA74 ; =0x00000135
+ mov r1, #0x7
+ strh r0, [r6, #0xf0]
+ strb r5, [r6, #0xf2]
+ mov r0, #0x3d
+ strb r0, [r6, #0xf3]
+ strb r1, [r6, #0xf4]
+ mov r3, #0x1
+ ldr r0, _0209BA68 ; =0x021C8F14
+ add r1, r6, #0xf6
+ mov r2, #0x6
+ strb r3, [r6, #0xf5]
+ bl MI_CpuCopy8
+ mov r1, #0xc
+ strb r1, [r6, #0xfc]
+ mov r2, #0xa
+ ldr r0, _0209BA78 ; =0x02106224
+ add r1, r6, #0xfe
+ strb r2, [r6, #0xfd]
+ bl MI_CpuCopy8
+ mov r1, #0x37
+ strb r1, [r6, #0x108]
+ mov r2, #0x3
+ ldr r0, _0209BA7C ; =0x0000010D
+ strb r2, [r6, #0x109]
+ mov r1, #0x1
+ strb r1, [r6, #0x10a]
+ strb r2, [r6, #0x10b]
+ mov r1, #0x6
+ strb r1, [r6, #0x10c]
+ add r0, r6, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209BA5C: .word 0x00000101
+_0209BA60: .word 0x021C8F24
+_0209BA64: .word 0x021C8F04
+_0209BA68: .word 0x021C8F14
+_0209BA6C: .word 0x00008263
+_0209BA70: .word 0x00006353
+_0209BA74: .word 0x00000135
+_0209BA78: .word 0x02106224
+_0209BA7C: .word 0x0000010D
+
+ arm_func_start FUN_0209BA80
+FUN_0209BA80: ; 0x0209BA80
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ ldr r3, _0209BE40 ; =0x021C8EF8
+ mov r1, #0x0
+ ldr r0, _0209BE44 ; =0x021C8FD8
+ mov r2, #0x64
+ str r1, [r3, #0x0]
+ bl MI_CpuFill8
+ ldr r0, _0209BE44 ; =0x021C8FD8
+ mov r3, #0x180
+ ldr r2, _0209BE48 ; =0x021C93A0
+ ldr r1, _0209BE4C ; =0x021C9220
+ str r3, [r0, #0x3c]
+ str r2, [r0, #0x40]
+ str r3, [r0, #0x48]
+ str r1, [r0, #0x4c]
+ bl FUN_0209CC28
+ mov r11, #0x0
+ mov r0, #0x1
+ str r0, [sp, #0x0]
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x4c]
+ mov r1, r0
+ ldr r0, _0209BE50 ; =0x021C8EC0
+ ldr r5, [sp, #0x0]
+ str r1, [r0, #0x0]
+ mov r0, #0x2
+ str r0, [sp, #0x10]
+ mov r0, r5
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x3c]
+ mov r0, #0x3
+ str r0, [sp, #0x1c]
+ mov r0, r5
+ str r0, [sp, #0x30]
+ str r0, [sp, #0x28]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0xc]
+ mov r0, #0x69
+ str r0, [sp, #0x44]
+ mov r0, #0x3e8
+ mov r6, r11
+ mov r4, r11
+ mov r10, r11
+ str r11, [sp, #0x14]
+ str r11, [sp, #0x18]
+ str r11, [sp, #0x38]
+ str r11, [sp, #0x2c]
+ str r11, [sp, #0x40]
+ str r11, [sp, #0x48]
+ str r0, [sp, #0x8]
+_0209BB50:
+ ldr r0, [sp, #0x8]
+ bl OS_Sleep
+ ldr r0, _0209BE40 ; =0x021C8EF8
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _0209BE14
+ bl OS_GetTick
+ mov r9, r0, lsr #0x10
+ ldr r0, _0209BE54 ; =0x021C8EFC
+ orr r9, r9, r1, lsl #0x10
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209BC8C
+ ldr r0, [sp, #0x4c]
+ subs r0, r0, #0x1
+ str r0, [sp, #0x4c]
+ bne _0209BCA4
+ ldr r0, _0209BE58 ; =0x021C8EC4
+ ldr r0, [r0, #0x0]
+ ands r0, r0, #0x1
+ beq _0209BBBC
+ cmp r11, #0x0
+ bne _0209BCA4
+ bl FUN_0209BE78
+ ldr r11, [sp, #0xc]
+ b _0209BCA4
+_0209BBBC:
+ cmp r11, #0x3
+ addls pc, pc, r11, lsl #0x2
+ b _0209BCA4
+_0209BBC8:
+ b _0209BBD8
+_0209BBCC:
+ b _0209BC28
+_0209BBD0:
+ b _0209BC4C
+_0209BBD4:
+ b _0209BCA4
+_0209BBD8:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrne r1, [sp, #0x10]
+ ldrne r0, _0209BE50 ; =0x021C8EC0
+ strne r1, [r0, #0x0]
+ ldrne r0, [sp, #0x14]
+ strne r0, [sp, #0x4]
+ bl FUN_0209B298
+_0209BBF8: ; 0x0209BBF8
+ cmp r0, #0x0
+ beq _0209BC14
+ ldr r1, [sp, #0x18]
+ add r0, sp, #0x4c
+ bl FUN_0209B170
+_0209BC0C: ; 0x0209BC0C
+ cmp r0, #0x0
+ bne _0209BC20
+_0209BC14:
+ bl FUN_0209BE78
+ ldr r11, [sp, #0x1c]
+ b _0209BCA4
+_0209BC20:
+ ldr r11, [sp, #0x20]
+ b _0209BCA4
+_0209BC28:
+ ldr r1, [sp, #0x24]
+ add r0, sp, #0x4c
+ bl FUN_0209B170
+_0209BC34: ; 0x0209BC34
+ cmp r0, #0x0
+ bne _0209BCA4
+ ldr r0, [sp, #0x4c]
+ cmp r0, #0x3c
+ ldrcc r11, [sp, #0x10]
+ b _0209BCA4
+_0209BC4C:
+ ldr r1, [sp, #0x10]
+ add r0, sp, #0x4c
+ bl FUN_0209B170
+_0209BC58: ; 0x0209BC58
+ cmp r0, #0x0
+ ldrne r11, [sp, #0x28]
+ bne _0209BCA4
+ ldr r0, [sp, #0x4c]
+ cmp r0, #0x3c
+ bhs _0209BCA4
+ ldr r0, [sp, #0x1c]
+ bl FUN_020A0098
+ ldr r0, [sp, #0x30]
+ ldr r11, [sp, #0x2c]
+ str r0, [sp, #0x4c]
+ str r0, [sp, #0x0]
+ b _0209BCA4
+_0209BC8C:
+ ldr r0, [sp, #0x34]
+ bl FUN_020A0098
+ ldr r0, [sp, #0x3c]
+ ldr r11, [sp, #0x38]
+ str r0, [sp, #0x4c]
+ str r0, [sp, #0x0]
+_0209BCA4:
+ ldr r1, [sp, #0x40]
+ ldr r0, _0209BE5C ; =0x021C8F78
+_0209BCAC:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209BCD4
+ ldrh r2, [r0, #0xa]
+ sub r2, r9, r2
+ mov r2, r2, lsl #0x10
+ mov r3, r2, asr #0x10
+ ldr r2, _0209BE60 ; =0x000003BD
+ cmp r3, r2
+ strgt r6, [r0, #0x0]
+_0209BCD4:
+ add r0, r0, #0xc
+ add r1, r1, #0x1
+ cmp r1, #0x8
+ blt _0209BCAC
+ ldr r0, _0209BE64 ; =0x021C8EE0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209BD10
+ ldr r1, [sp, #0x0]
+ subs r1, r1, #0x1
+ str r1, [sp, #0x0]
+ bne _0209BD10
+ bl FUN_0209F338
+ ldr r0, [sp, #0x44]
+ str r0, [sp, #0x0]
+_0209BD10:
+ ldr r0, _0209BE68 ; =0x021D3498
+ ldr r7, [r0, #0x8]
+ cmp r7, #0x0
+ beq _0209BDAC
+_0209BD20:
+ ldr r0, [r7, #0xa4]
+ cmp r0, #0x0
+ beq _0209BDA0
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _0209BDA0
+ ldrb r2, [r0, #0x8]
+ cmp r2, #0x3
+ bne _0209BD6C
+ ldr r1, [r0, #0x10]
+ sub r1, r9, r1
+ cmp r1, #0x27
+ ble _0209BD6C
+ strb r5, [r0, #0x8]
+ ldrh r1, [r0, #0x1a]
+ strh r1, [r0, #0x18]
+ ldr r1, [r0, #0x20]
+ str r1, [r0, #0x1c]
+ b _0209BDA0
+_0209BD6C:
+ cmp r2, #0x2
+ bne _0209BDA0
+ ldr r1, [r0, #0x10]
+ sub r1, r9, r1
+ cmp r1, #0x27
+ ble _0209BDA0
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x1
+ bne _0209BDA0
+ strb r4, [r0, #0x8]
+ str r4, [r0, #0x4]
+ ldr r0, [r0, #0x0]
+ bl OS_WakeupThreadDirect
+_0209BDA0:
+ ldr r7, [r7, #0x68]
+ cmp r7, #0x0
+ bne _0209BD20
+_0209BDAC:
+ ldr r7, [sp, #0x48]
+ ldr r8, _0209BE6C ; =0x021C9520
+_0209BDB4:
+ ldrh r0, [r8, #0x4]
+ cmp r0, #0x0
+ beq _0209BDE4
+ ldr r0, [r8, #0x2c]
+ sub r0, r9, r0
+ cmp r0, #0xef
+ ble _0209BDE4
+ ldr r1, _0209BE70 ; =0x021C8EF4
+ ldr r0, [r8, #0x34]
+ ldr r1, [r1, #0x0]
+ blx r1
+ strh r10, [r8, #0x4]
+_0209BDE4:
+ add r8, r8, #0x38
+ add r7, r7, #0x1
+ cmp r7, #0x8
+ blt _0209BDB4
+ mov r0, r9
+ bl FUN_020A01FC
+ ldr r0, _0209BE74 ; =0x021C8EF0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209BB50
+ blx r0
+ b _0209BB50
+_0209BE14:
+ ldr r0, _0209BE58 ; =0x021C8EC4
+ ldr r0, [r0, #0x0]
+ ands r0, r0, #0x1
+ bne _0209BE30
+ cmp r11, #0x3
+ beq _0209BE30
+ bl FUN_0209B100
+_0209BE30:
+ bl FUN_0209CC10
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209BE40: .word 0x021C8EF8
+_0209BE44: .word 0x021C8FD8
+_0209BE48: .word 0x021C93A0
+_0209BE4C: .word 0x021C9220
+_0209BE50: .word 0x021C8EC0
+_0209BE54: .word 0x021C8EFC
+_0209BE58: .word 0x021C8EC4
+_0209BE5C: .word 0x021C8F78
+_0209BE60: .word 0x000003BD
+_0209BE64: .word 0x021C8EE0
+_0209BE68: .word 0x021D3498
+_0209BE6C: .word 0x021C9520
+_0209BE70: .word 0x021C8EF4
+_0209BE74: .word 0x021C8EF0
+
+ arm_func_start FUN_0209BE78
+FUN_0209BE78: ; 0x0209BE78
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209BF3C ; =0x021C8ECC
+ ldr r0, [r0, #0x0]
+ blx r0
+ ldr r0, _0209BF40 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl FUN_0209F338
+ mov r0, #0x64
+ bl OS_Sleep
+ ldr r0, _0209BF40 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ bl FUN_0209F338
+ bl OS_GetTick
+ mov r4, r0, lsr #0x10
+ orr r4, r4, r1, lsl #0x10
+ ldr r6, _0209BF44 ; =0x021C8EAC
+ mov r7, #0x64
+ ldr r5, _0209BF48 ; =0x021C8EFC
+ b _0209BF00
+_0209BED8:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x0
+ beq _0209BEF8
+ mov r0, #0x4
+ bl FUN_020A0098
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209BEF8:
+ mov r0, r7
+ bl OS_Sleep
+_0209BF00:
+ ldr r0, [r5, #0x0]
+ blx r0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r4
+ cmp r0, #0x17
+ blt _0209BED8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209BF3C: .word 0x021C8ECC
+_0209BF40: .word 0x021C8F04
+_0209BF44: .word 0x021C8EAC
+_0209BF48: .word 0x021C8EFC
+
+ arm_func_start FUN_0209BF4C
+FUN_0209BF4C: ; 0x0209BF4C
+ stmdb sp!, {r4,lr}
+ ldr r0, _0209BF98 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r4, #0x60]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r2, #0x0
+ ldr r0, [r4, #0x5c]
+ mov r3, r2
+ bl FUN_0209C0E8
+_0209BF88: ; 0x0209BF88
+ mov r0, #0x0
+ str r0, [r4, #0x60]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209BF98: .word 0x021D3498
+
+ arm_func_start FUN_0209BF9C
+FUN_0209BF9C:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209C02C ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ beq _0209C01C
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209BFD4
+ bl FUN_020A0538
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209BFD4:
+ ldr r1, [r0, #0x44]
+ cmp r1, #0x0
+ bne _0209BFFC
+ ldrb r0, [r0, #0x8]
+ cmp r0, #0x4
+ beq _0209BFFC
+ add r0, r0, #0xf6
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209C00C
+_0209BFFC:
+ add sp, sp, #0x4
+ mov r0, r1
+ ldmia sp!, {lr}
+ bx lr
+_0209C00C:
+ add sp, sp, #0x4
+ mvn r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_0209C01C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C02C: .word 0x021D3498
+
+ arm_func_start FUN_0209C030
+FUN_0209C030:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r3, _0209C0E4 ; =0x021D3498
+ mov r2, r0
+ ldr r4, [r3, #0x4]
+ mov r3, r1
+ ldr r5, [r4, #0xa4]
+ cmp r5, #0x0
+ beq _0209C0D4
+ ldr r4, [r5, #0x60]
+ cmp r4, #0x0
+ beq _0209C0BC
+ ldr r0, [r5, #0x5c]
+ mov r1, r4
+ bl FUN_0209C0E8
+ ldr r1, [r5, #0x60]
+ mov r4, r0
+ cmp r4, r1
+ movcs r0, #0x0
+ strcs r0, [r5, #0x60]
+ addcs sp, sp, #0x4
+ subcs r0, r4, r1
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ ldr r0, [r5, #0x5c]
+ sub r2, r1, r4
+ add r1, r0, r4
+ bl memmove
+ ldr r1, [r5, #0x60]
+ add sp, sp, #0x4
+ sub r1, r1, r4
+ mov r0, #0x0
+ str r1, [r5, #0x60]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0209C0BC:
+ mov r2, #0x0
+ mov r3, r2
+ bl FUN_0209C0E8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0209C0D4:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209C0E4: .word 0x021D3498
+
+ arm_func_start FUN_0209C0E8
+FUN_0209C0E8:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _0209C1CC ; =0x021D3498
+ mov r7, r1
+ ldr r12, [r12, #0x4]
+ mov r6, r2
+ ldr r4, [r12, #0xa4]
+ mov r5, r3
+ cmp r4, #0x0
+ beq _0209C1BC
+ ldrb r12, [r4, #0x8]
+ cmp r12, #0xa
+ bne _0209C14C
+ cmp r7, #0x0
+ beq _0209C12C
+ mov r2, r4
+ bl FUN_0209EB00
+_0209C12C:
+ cmp r5, #0x0
+ beq _0209C144
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209EB00
+_0209C144:
+ add r0, r7, r5
+ b _0209C1A4
+_0209C14C:
+ cmp r12, #0xb
+ bne _0209C184
+ cmp r7, #0x0
+ beq _0209C164
+ mov r2, r4
+ bl FUN_0209EC40
+_0209C164:
+ cmp r5, #0x0
+ beq _0209C17C
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209EC40
+_0209C17C:
+ add r0, r7, r5
+ b _0209C1A4
+_0209C184:
+ ldrb r12, [r4, #0x9]
+ cmp r12, #0x0
+ beq _0209C19C
+ str r4, [sp, #0x0]
+ bl FUN_020A03E0
+ b _0209C1A4
+_0209C19C:
+ str r4, [sp, #0x0]
+ bl FUN_0209C1D4
+_0209C1A4:
+ ldr r1, _0209C1D0 ; =0x021C8EA8
+ ldrb r1, [r1, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_0209C1BC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209C1CC: .word 0x021D3498
+_0209C1D0: .word 0x021C8EA8
+
+ arm_func_start FUN_0209C1D4
+FUN_0209C1D4:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ mov r4, #0x0
+ mov r10, r0
+ ldr r8, [sp, #0x40]
+ mov r0, r4
+ str r4, [sp, #0xc]
+ mov r9, r1
+ mov r11, r2
+ str r3, [sp, #0x8]
+ mov r6, r4
+ str r0, [r8, #0x34]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x10]
+ orr r0, r0, r1, lsl #0x10
+ str r0, [sp, #0x10]
+ mov r0, r6
+ str r0, [sp, #0x18]
+ mov r0, #0x1
+ ldr r4, _0209C3EC ; =0x021C8EFC
+ str r0, [sp, #0x14]
+ b _0209C39C
+_0209C230:
+ ldr r7, [r8, #0x28]
+ ldr r3, [sp, #0x8]
+ str r8, [sp, #0x0]
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ str r6, [sp, #0x4]
+ bl FUN_0209C3F0
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ orr r5, r5, r1, lsl #0x10
+_0209C25C:
+ bl FUN_020A005C
+_0209C260: ; 0x0209C260
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C2B8
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C2B8
+ ldr r1, [r8, #0x28]
+ ldr r0, [r8, #0x30]
+ cmp r1, r0
+ beq _0209C2B8
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ bge _0209C2B8
+ cmp r6, #0x0
+ beq _0209C25C
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ beq _0209C25C
+_0209C2B8:
+ ldr r0, [r8, #0x30]
+ subs r7, r0, r7
+ ldr r0, [sp, #0xc]
+ add r0, r0, r7
+ str r0, [sp, #0xc]
+ beq _0209C2E4
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x10]
+ orr r0, r0, r1, lsl #0x10
+ str r0, [sp, #0x10]
+_0209C2E4:
+ ldr r0, [r8, #0x30]
+ str r0, [r8, #0x28]
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C36C
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ bne _0209C36C
+ cmp r7, #0x0
+ bne _0209C36C
+ cmp r6, #0x0
+ bne _0209C370
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ orr r5, r5, r1, lsl #0x10
+ b _0209C334
+_0209C324:
+ bl FUN_020A005C
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ bne _0209C35C
+_0209C334:
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C35C
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ blt _0209C324
+_0209C35C:
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ ldreq r6, [sp, #0x14]
+ b _0209C370
+_0209C36C:
+ ldr r6, [sp, #0x18]
+_0209C370:
+ cmp r7, r9
+ addcc r10, r10, r7
+ subcc r9, r9, r7
+ blo _0209C39C
+ sub r1, r7, r9
+ add r10, r11, r1
+ ldr r0, [sp, #0x8]
+ ldr r11, [sp, #0x18]
+ sub r9, r0, r1
+ mov r0, r11
+ str r0, [sp, #0x8]
+_0209C39C:
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C3DC
+ cmp r9, #0x0
+ beq _0209C3DC
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C3DC
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x10]
+ orr r2, r2, r1, lsl #0x10
+ sub r0, r2, r0
+ cmp r0, #0x9f
+ blt _0209C230
+_0209C3DC:
+ ldr r0, [sp, #0xc]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209C3EC: .word 0x021C8EFC
+
+ arm_func_start FUN_0209C3F0
+FUN_0209C3F0: ; 0x0209C3F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r4, r3
+ ldr r2, [sp, #0x10]
+ ldr r3, [sp, #0x14]
+ bl FUN_0209C44C
+_0209C40C: ; 0x0209C40C
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [sp, #0x10]
+ mov r0, r5
+ mov r1, r4
+ mov r3, #0x0
+ bl FUN_0209C44C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209C44C
+FUN_0209C44C:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r8, r2
+ ldr r11, [r8, #0x34]
+ mov r10, r0
+ movs r0, r3
+ mov r0, r11, lsl #0x1
+ movne r6, #0x1
+ add r5, r0, #0x4
+ mov r0, #0x18
+ str r3, [sp, #0x4]
+ mov r9, r1
+ ldreqh r6, [r8, #0x2c]
+ mov r4, #0x0
+ str r0, [sp, #0x8]
+ b _0209C504
+_0209C48C:
+ ldr r0, _0209C528 ; =0x021C8EB0
+ ldrh r7, [r8, #0x2e]
+ ldrh r0, [r0, #0x0]
+ ldr r1, [r8, #0x34]
+ cmp r7, r6
+ movcs r7, r6
+ cmp r0, r7
+ movcc r7, r0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ biceq r7, r7, #0x1
+ cmp r9, r7
+ sub r0, r1, r11
+ movcc r7, r9
+ adds r0, r5, r0
+ moveq r7, r4
+ mov r11, r1
+ sub r5, r0, #0x1
+ cmp r7, #0x0
+ beq _0209C518
+ ldr r3, [sp, #0x8]
+ mov r0, r10
+ mov r1, r7
+ mov r2, r8
+ str r4, [sp, #0x0]
+ sub r6, r6, r7
+ bl FUN_0209E878
+ bl OS_YieldThread
+ add r10, r10, r7
+ sub r9, r9, r7
+_0209C504:
+ cmp r9, #0x0
+ beq _0209C518
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ beq _0209C48C
+_0209C518:
+ mov r0, r7
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209C528: .word 0x021C8EB0
+
+ arm_func_start FUN_0209C52C
+FUN_0209C52C: ; 0x0209C52C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209C57C ; =0x021D3498
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r2, [r1, #0x9]
+ cmp r2, #0x0
+ beq _0209C56C
+ bl FUN_020A0738
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C56C:
+ bl FUN_0209C580
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C57C: .word 0x021D3498
+
+ arm_func_start FUN_0209C580
+FUN_0209C580:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r7, r0
+ bl OS_DisableInterrupts
+ ldr r2, [r4, #0x44]
+ ldr r1, [r4, #0x3c]
+ mov r6, r0
+ cmp r2, r1
+ mov r5, #0x0
+ bne _0209C5B4
+ cmp r7, #0x0
+ movne r5, #0x1
+_0209C5B4:
+ cmp r7, r2
+ movcs r0, #0x0
+ strcs r0, [r4, #0x44]
+ bhs _0209C5D8
+ ldr r0, [r4, #0x40]
+ sub r2, r2, r7
+ add r1, r0, r7
+ str r2, [r4, #0x44]
+ bl memmove
+_0209C5D8:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xa
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r0, #0xb
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ beq _0209C620
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_0209C620:
+ mov r0, r4
+ mov r1, #0x1b
+ bl FUN_0209DF84
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209C638
+FUN_0209C638:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209C6BC ; =0x021D3498
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ beq _0209C6A4
+ ldrb r2, [r1, #0x8]
+ add r2, r2, #0xf6
+ and r2, r2, #0xff
+ cmp r2, #0x1
+ bhi _0209C678
+ bl FUN_0209C74C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C678:
+ ldrb r2, [r1, #0x9]
+ cmp r2, #0x0
+ beq _0209C694
+ bl FUN_020A0790
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C694:
+ bl FUN_0209C6C0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C6A4:
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ mov r0, r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C6BC: .word 0x021D3498
+
+ arm_func_start FUN_0209C6C0
+FUN_0209C6C0: ; 0x0209C6C0
+ stmdb sp!, {r4-r8,lr}
+ mov r4, r1
+ ldr r1, [r4, #0x44]
+ mov r5, r0
+ cmp r1, #0x0
+ bne _0209C728
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x4
+ bne _0209C728
+ bl OS_DisableInterrupts
+ mov r8, r0
+ mov r7, #0x2
+ mov r6, #0x0
+ b _0209C704
+_0209C6F8:
+ mov r0, r6
+ str r7, [r4, #0x4]
+ bl OS_SleepThread
+_0209C704:
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209C71C
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x4
+ beq _0209C6F8
+_0209C71C:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+_0209C724: ; 0x0209C724
+ b _0209C72C
+_0209C728:
+ bl OS_YieldThread
+_0209C72C:
+ ldr r0, [r4, #0x44]
+ str r0, [r5, #0x0]
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ ldrne r0, [r4, #0x40]
+ moveq r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_0209C74C
+FUN_0209C74C: ; 0x0209C74C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r1
+ mov r9, r0
+ bl OS_DisableInterrupts
+ ldr r7, [r8, #0x44]
+ mov r6, r0
+ cmp r7, #0x0
+ bne _0209C790
+ mov r5, #0x3
+ mov r4, #0x0
+_0209C778:
+ mov r0, r4
+ str r5, [r8, #0x4]
+ bl OS_SleepThread
+ ldr r7, [r8, #0x44]
+ cmp r7, #0x0
+ beq _0209C778
+_0209C790:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ str r7, [r9, #0x0]
+ ldr r0, [r8, #0x40]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_0209C7AC
+FUN_0209C7AC: ; 0x0209C7AC
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, _0209C838 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrb r0, [r4, #0x9]
+ cmp r0, #0x0
+ beq _0209C7DC
+ mov r0, r4
+ bl FUN_020A0320
+_0209C7DC:
+ bl OS_GetTick
+ mov r6, r0, lsr #0x10
+ orr r6, r6, r1, lsl #0x10
+ ldr r5, _0209C83C ; =0x021C8EFC
+ b _0209C7F4
+_0209C7F0:
+ bl FUN_020A005C
+_0209C7F4:
+ ldr r0, [r5, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C828
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _0209C828
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r6
+ cmp r0, #0x27
+ blt _0209C7F0
+_0209C828:
+ mov r0, #0x0
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209C838: .word 0x021D3498
+_0209C83C: .word 0x021C8EFC
+
+ arm_func_start FUN_0209C840
+FUN_0209C840:
+ stmdb sp!, {r4,lr}
+ ldr r0, _0209C880 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrb r0, [r4, #0x9]
+ cmp r0, #0x0
+ beq _0209C870
+ mov r0, r4
+ bl FUN_020A035C
+_0209C870:
+ mov r0, r4
+ bl FUN_0209C884
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209C880: .word 0x021D3498
+
+ arm_func_start FUN_0209C884
+FUN_0209C884: ; 0x0209C884
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_YieldThread
+ ldrb r1, [r4, #0x8]
+ add r0, r1, #0xfd
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209C8C0
+ mov r0, r4
+ mov r1, #0x19
+ bl FUN_0209DF70
+ mov r0, #0x7
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+_0209C8C0:
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, #0x1a
+ bl FUN_0209DF84
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209C8E0
+FUN_0209C8E0: ; 0x0209C8E0
+ ldr r2, _0209C930 ; =0x021D3498
+ ldr r2, [r2, #0x4]
+ ldr r3, [r2, #0xa4]
+ cmp r3, #0x0
+ beq _0209C928
+ ldrb r2, [r3, #0x8]
+ cmp r2, #0x4
+ beq _0209C908
+ cmp r2, #0xa
+ bne _0209C928
+_0209C908:
+ cmp r0, #0x0
+ ldrneh r2, [r3, #0x18]
+ strneh r2, [r0, #0x0]
+ cmp r1, #0x0
+ ldrne r0, [r3, #0x14]
+ strne r0, [r1, #0x0]
+ ldr r0, [r3, #0x1c]
+ bx lr
+_0209C928:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_0209C930: .word 0x021D3498
+
+ arm_func_start FUN_0209C934
+FUN_0209C934: ; 0x0209C934
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209C98C ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ beq _0209C97C
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209C96C
+ bl FUN_020A0874
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C96C:
+ bl FUN_0209C990
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C97C:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C98C: .word 0x021D3498
+
+ arm_func_start FUN_0209C990
+FUN_0209C990:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ bl FUN_0209CC3C
+ mov r8, r0
+ mov r9, #0x0
+ mov r11, r9
+ mov r4, #0x1
+ mov r6, #0x2
+ mov r5, #0x18
+_0209C9B8:
+ str r8, [r10, #0x28]
+ strb r6, [r10, #0x8]
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ orr r2, r2, r1, lsl #0x10
+ str r2, [r10, #0x10]
+ mov r0, r10
+ mov r1, r6
+ mov r2, r5
+ bl FUN_0209DF98
+ bl OS_DisableInterrupts
+ mov r7, r0
+ ldr r0, _0209CA50 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209CA04
+ mov r0, r11
+ str r4, [r10, #0x4]
+ bl OS_SleepThread
+_0209CA04:
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ ldrb r0, [r10, #0x8]
+ cmp r0, #0x4
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, _0209CA50 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209CA40
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blo _0209C9B8
+_0209CA40:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209CA50: .word 0x021C8F04
+
+ arm_func_start FUN_0209CA54
+FUN_0209CA54: ; 0x0209CA54
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209CAA4 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209CA94
+ bl FUN_020A09CC
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209CA94:
+ bl FUN_0209CAC4
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209CAA4: .word 0x021D3498
+
+ arm_func_start FUN_0209CAA8
+FUN_0209CAA8:
+ ldr r1, _0209CAC0 ; =0x021D3498
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ strne r0, [r1, #0x38]
+ bx lr
+ .balign 4
+_0209CAC0: .word 0x021D3498
+
+ arm_func_start FUN_0209CAC4
+FUN_0209CAC4: ; 0x0209CAC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl FUN_0209CC3C
+ str r0, [r5, #0x28]
+ mov r0, #0x1
+ strb r0, [r5, #0x8]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r1, #0x1
+ mov r0, #0x0
+ str r1, [r5, #0x4]
+ bl OS_SleepThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_0209CB0C
+FUN_0209CB0C: ; 0x0209CB0C
+ ldr r1, _0209CB20 ; =0x021D3498
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ str r1, [r0, #0xa4]
+ bx lr
+ .balign 4
+_0209CB20: .word 0x021D3498
+
+ arm_func_start FUN_0209CB24
+FUN_0209CB24: ; 0x0209CB24
+ ldr r0, _0209CB40 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_0209CB40: .word 0x021D3498
+
+ arm_func_start FUN_0209CB44
+FUN_0209CB44: ; 0x0209CB44
+ ldr r0, _0209CB74 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ bxeq lr
+ str r0, [r1, #0x0]
+ mov r0, #0x0
+ strb r0, [r1, #0x8]
+ str r0, [r1, #0x44]
+ str r0, [r1, #0x60]
+ str r0, [r1, #0x38]
+ bx lr
+ .balign 4
+_0209CB74: .word 0x021D3498
+
+ arm_func_start FUN_0209CB78
+FUN_0209CB78: ; 0x0209CB78
+ stmdb sp!, {r4,lr}
+ ldr r3, _0209CBDC ; =0x021D3498
+ ldr r3, [r3, #0x4]
+ ldr r4, [r3, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r3, _0209CBE0 ; =0x7F000001
+ cmp r2, r3
+ ldreq r2, _0209CBE4 ; =0x021C8F04
+ ldreq r2, [r2, #0x0]
+ cmp r0, #0x0
+ strh r1, [r4, #0x1a]
+ ldrh r1, [r4, #0x1a]
+ strh r1, [r4, #0x18]
+ str r2, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ str r1, [r4, #0x1c]
+ strneh r0, [r4, #0xa]
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ bl FUN_0209CC8C
+ strh r0, [r4, #0xa]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209CBDC: .word 0x021D3498
+_0209CBE0: .word 0x7F000001
+_0209CBE4: .word 0x021C8F04
+
+ arm_func_start FUN_0209CBE8
+FUN_0209CBE8: ; 0x0209CBE8
+ ldr r0, _0209CC0C ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ movne r0, #0xa
+ strneb r0, [r1, #0x8]
+ movne r0, #0x0
+ strne r0, [r1, #0x44]
+ bx lr
+ .balign 4
+_0209CC0C: .word 0x021D3498
+
+ arm_func_start FUN_0209CC10
+FUN_0209CC10: ; 0x0209CC10
+ ldr r0, _0209CC24 ; =0x021D3498
+ mov r1, #0x0
+ ldr r0, [r0, #0x4]
+ str r1, [r0, #0xa4]
+ bx lr
+ .balign 4
+_0209CC24: .word 0x021D3498
+
+ arm_func_start FUN_0209CC28
+FUN_0209CC28: ; 0x0209CC28
+ ldr r1, _0209CC38 ; =0x021D3498
+ ldr r1, [r1, #0x4]
+ str r0, [r1, #0xa4]
+ bx lr
+ .balign 4
+_0209CC38: .word 0x021D3498
+
+ arm_func_start FUN_0209CC3C
+FUN_0209CC3C: ; 0x0209CC3C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209CC88 ; =0x021C8F24
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0x0]
+ ldr r0, [r1, #0x4]
+ umull lr, r12, r3, r2
+ mla r12, r3, r0, r12
+ ldr r0, [r1, #0xc]
+ ldr r3, [r1, #0x10]
+ mla r12, r0, r2, r12
+ adds r2, r3, lr
+ ldr r0, [r1, #0x14]
+ str r2, [r1, #0x0]
+ adc r0, r0, r12
+ str r0, [r1, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209CC88: .word 0x021C8F24
+
+ arm_func_start FUN_0209CC8C
+FUN_0209CC8C: ; 0x0209CC8C
+ stmdb sp!, {r4-r8,lr}
+ ldr r0, _0209CD30 ; =0x021D3498
+ ldr r6, [r0, #0x8]
+ ldr r2, _0209CD34 ; =0x021C8EBC
+ mov r4, #0x400
+ mov r3, #0x1
+ mov r5, #0x0
+ ldr r1, _0209CD38 ; =0x00001388
+_0209CCAC:
+ ldrh r12, [r2, #0x0]
+ mov r0, r5
+ add r12, r12, #0x1
+ strh r12, [r2, #0x0]
+ ldrh r12, [r2, #0x0]
+ cmp r12, #0x400
+ blo _0209CCD0
+ cmp r12, r1
+ blo _0209CCD4
+_0209CCD0:
+ strh r4, [r2, #0x0]
+_0209CCD4:
+ mov r8, r6
+ cmp r6, #0x0
+ beq _0209CD18
+ ldrh r7, [r2, #0x0]
+_0209CCE4:
+ ldr lr, [r8, #0xa4]
+ cmp lr, #0x0
+ beq _0209CD0C
+ ldr r12, [lr, #0x0]
+ cmp r12, #0x0
+ beq _0209CD0C
+ ldrh r12, [lr, #0xa]
+ cmp r12, r7
+ moveq r0, r3
+ beq _0209CD18
+_0209CD0C:
+ ldr r8, [r8, #0x68]
+ cmp r8, #0x0
+ bne _0209CCE4
+_0209CD18:
+ cmp r0, #0x0
+ bne _0209CCAC
+ ldr r0, _0209CD34 ; =0x021C8EBC
+ ldrh r0, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209CD30: .word 0x021D3498
+_0209CD34: .word 0x021C8EBC
+_0209CD38: .word 0x00001388
+
+ arm_func_start FUN_0209CD3C
+FUN_0209CD3C: ; 0x0209CD3C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _0209CDAC ; =0x00000806
+ add r4, sp, #0x0
+_0209CD4C:
+ mov r0, r4
+ bl FUN_0209F57C
+ ldr r3, [sp, #0x0]
+ cmp r3, #0x22
+ bls _0209CDA4
+ ldrh r2, [r0, #0xc]
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ cmp r1, #0x800
+ beq _0209CD88
+ cmp r1, r5
+ beq _0209CD98
+ b _0209CDA4
+_0209CD88:
+ add r0, r0, #0xe
+ sub r1, r3, #0xe
+ bl FUN_0209CDB0
+ b _0209CDA4
+_0209CD98:
+ add r0, r0, #0xe
+ sub r1, r3, #0xe
+ bl FUN_0209E614
+_0209CDA4:
+ bl FUN_0209F51C
+ b _0209CD4C
+ .balign 4
+_0209CDAC: .word 0x00000806
+
+ arm_func_start FUN_0209CDB0
+FUN_0209CDB0: ; 0x0209CDB0
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldrh r12, [r4, #0xc]
+ ldrh r6, [r4, #0x10]
+ ldrh r2, [r4, #0xe]
+ ldrh r0, [r4, #0x12]
+ mov r5, r6, asr #0x8
+ mov r3, r12, asr #0x8
+ orr r5, r5, r6, lsl #0x8
+ orr r12, r3, r12, lsl #0x8
+ mov r3, r5, lsl #0x10
+ mov r5, r0, asr #0x8
+ mov r12, r12, lsl #0x10
+ mov lr, r2, asr #0x8
+ mov r6, r3, lsr #0x10
+ orr r0, r5, r0, lsl #0x8
+ mov r3, r12, lsr #0x10
+ orr r2, lr, r2, lsl #0x8
+ mov r5, r6, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r0, r5, r0, lsr #0x10
+ orr r2, r3, r2, lsr #0x10
+ mov r5, r1
+ cmp r0, r2
+ beq _0209CEF0
+ bl FUN_0209F9CC
+_0209CE24: ; 0x0209CE24
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r1, [r4, #0x2]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r5, r0, lsr #0x10
+ addcc sp, sp, #0x8
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ ldrb r1, [r4, #0x0]
+ mov r0, r4
+ and r1, r1, #0xf
+ mov r1, r1, lsl #0x2
+ bl FUN_0209FB84
+ ldr r1, _0209CFA0 ; =0x0000FFFF
+ cmp r0, r1
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrh r2, [r4, #0x10]
+ ldrh r12, [r4, #0x12]
+ ldr r1, _0209CFA4 ; =0x021C8F04
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ ldr r1, [r1, #0x0]
+ orr r0, r2, r0, lsr #0x10
+ cmp r1, r0
+ bne _0209CEF0
+ ldrh r2, [r4, #0xc]
+ ldrh r12, [r4, #0xe]
+ sub r0, r4, #0x8
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ mov r2, #0x1
+ bl FUN_0209F12C
+_0209CEF0:
+ add r1, sp, #0x0
+ mov r0, r4
+ bl FUN_0209CFAC
+ movs r4, r0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r2, [r4, #0x2]
+ ldrb r3, [r4, #0x0]
+ ldrb r12, [r4, #0x9]
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ and r3, r3, #0xf
+ mov r2, r1, lsr #0x10
+ cmp r12, #0x11
+ add r1, r4, r3, lsl #0x2
+ sub r2, r2, r3, lsl #0x2
+ bne _0209CF44
+ bl FUN_0209D2BC
+ b _0209CF70
+_0209CF44:
+ ldr r3, _0209CFA4 ; =0x021C8F04
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ beq _0209CF70
+ cmp r12, #0x1
+ bne _0209CF64
+ bl FUN_0209E2E0
+ b _0209CF70
+_0209CF64:
+ cmp r12, #0x6
+ bne _0209CF70
+ bl FUN_0209D4D8
+_0209CF70:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, _0209CFA8 ; =0x021C8EF4
+ sub r0, r4, #0xe
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209CFA0: .word 0x0000FFFF
+_0209CFA4: .word 0x021C8F04
+_0209CFA8: .word 0x021C8EF4
+
+ arm_func_start FUN_0209CFAC
+FUN_0209CFAC: ; 0x0209CFAC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r6, #0x0
+ mov r10, r0
+ str r6, [r1, #0x0]
+ ldrh r3, [r10, #0x6]
+ str r1, [sp, #0x0]
+ ldr r2, _0209D2A4 ; =0x00003FFF
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ str r1, [sp, #0x4]
+ ands r1, r1, r2
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r1, [r10, #0xc]
+ ldrh r3, [r10, #0xe]
+ ldrb r4, [r10, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ and r3, r4, #0xf
+ ldrh r9, [r10, #0x4]
+ mov r2, r2, lsl #0x10
+ mov r1, r0, lsl #0x10
+ ldr r5, _0209D2A8 ; =0x021C9520
+ mov r0, r6
+ mov r7, r3, lsl #0x2
+ orr r4, r2, r1, lsr #0x10
+_0209D034:
+ ldrh r2, [r5, #0x4]
+ cmp r2, #0x0
+ beq _0209D058
+ ldr r1, [r5, #0x0]
+ cmp r1, r4
+ bne _0209D058
+ ldrh r1, [r5, #0x6]
+ cmp r1, r9
+ beq _0209D078
+_0209D058:
+ cmp r2, #0x0
+ bne _0209D068
+ cmp r6, #0x0
+ moveq r6, r5
+_0209D068:
+ add r0, r0, #0x1
+ cmp r0, #0x8
+ add r5, r5, #0x38
+ blo _0209D034
+_0209D078:
+ ldrh r2, [r10, #0x2]
+ cmp r0, #0x8
+ ldr r1, _0209D2AC ; =0x00001FFF
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x4]
+ and r8, r0, r1
+ sub r0, r2, r7
+ str r0, [sp, #0x8]
+ mov r0, r8, lsl #0x3
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x8]
+ add r11, r0, r8, lsl #0x3
+ bne _0209D150
+ cmp r6, #0x0
+ beq _0209D0C8
+ cmp r11, #0x1000
+ bls _0209D0D8
+_0209D0C8:
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209D0D8:
+ ldr r1, _0209D2B0 ; =0x021C8EC8
+ ldr r0, _0209D2B4 ; =0x0000100E
+ ldr r1, [r1, #0x0]
+ add r0, r7, r0
+ mov r5, r6
+ blx r1
+ str r0, [r6, #0x34]
+ ldr r0, [r6, #0x34]
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ str r4, [r6, #0x0]
+ strh r9, [r6, #0x6]
+ mov r0, #0x0
+ strh r0, [r6, #0x8]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r6, #0x2c]
+ ldr r1, [r6, #0x34]
+ mov r0, r10
+ add r1, r1, #0xe
+ add r1, r1, r7
+ str r1, [r6, #0x30]
+ ldr r1, [r6, #0x34]
+ mov r2, r7
+ add r1, r1, #0xe
+ bl MI_CpuCopy8
+_0209D150:
+ ldrh r0, [r5, #0x4]
+ cmp r0, #0x8
+ beq _0209D164
+ cmp r11, #0x1000
+ bls _0209D18C
+_0209D164:
+ mov r0, #0x0
+ strh r0, [r5, #0x4]
+ ldr r1, _0209D2B8 ; =0x021C8EF4
+ ldr r0, [r5, #0x34]
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209D18C:
+ ldr r0, [sp, #0x8]
+ ldr r2, [sp, #0x8]
+ add r0, r0, #0x7
+ add r1, r8, r0, lsr #0x3
+ ldr r0, [sp, #0x4]
+ ands r0, r0, #0x2000
+ streqh r11, [r5, #0xa]
+ streqh r1, [r5, #0x8]
+ ldrh r3, [r5, #0x4]
+ add r0, r10, r7
+ add r3, r5, r3, lsl #0x1
+ strh r8, [r3, #0xc]
+ ldrh r3, [r5, #0x4]
+ add r3, r5, r3, lsl #0x1
+ strh r1, [r3, #0x1c]
+ ldrh r1, [r5, #0x4]
+ add r1, r1, #0x1
+ strh r1, [r5, #0x4]
+ ldr r3, [r5, #0x30]
+ ldr r1, [sp, #0xc]
+ add r1, r3, r1
+ bl MI_CpuCopy8
+ ldrh r6, [r5, #0x8]
+ cmp r6, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r7, [r5, #0x4]
+ mov r3, #0x0
+ mov r4, r3
+ cmp r7, #0x0
+ bls _0209D244
+ mov r0, r3
+_0209D214:
+ add r2, r5, r4, lsl #0x1
+ ldrh r1, [r2, #0xc]
+ cmp r1, r3
+ bhi _0209D238
+ ldrh r1, [r2, #0x1c]
+ cmp r3, r1
+ movcc r3, r1
+ movcc r4, r0
+ blo _0209D23C
+_0209D238:
+ add r4, r4, #0x1
+_0209D23C:
+ cmp r4, r7
+ blo _0209D214
+_0209D244:
+ cmp r3, r6
+ addcc sp, sp, #0x14
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r11,lr}
+ bxcc lr
+ ldr r0, [r5, #0x34]
+ ldrh r3, [r5, #0xa]
+ ldrb r1, [r0, #0xe]
+ add r0, r0, #0xe
+ mov r2, #0x0
+ and r1, r1, #0xf
+ add r1, r3, r1, lsl #0x2
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ strh r1, [r0, #0x2]
+ strh r2, [r5, #0x4]
+ ldr r1, [sp, #0x0]
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209D2A4: .word 0x00003FFF
+_0209D2A8: .word 0x021C9520
+_0209D2AC: .word 0x00001FFF
+_0209D2B0: .word 0x021C8EC8
+_0209D2B4: .word 0x0000100E
+_0209D2B8: .word 0x021C8EF4
+
+ arm_func_start FUN_0209D2BC
+FUN_0209D2BC: ; 0x0209D2BC
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r1
+ ldrh r1, [r6, #0x6]
+ mov r7, r0
+ mov r5, r2
+ cmp r1, #0x0
+ beq _0209D2F8
+ mov r0, r6
+ mov r1, r5
+ mov r2, r7
+ mov r3, #0x11
+ bl FUN_0209FB28
+_0209D2EC: ; 0x0209D2EC
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+_0209D2F8:
+ bl OS_DisableInterrupts
+ ldr r1, _0209D4D4 ; =0x021D3498
+ mov r8, r0
+ ldr r2, [r1, #0x8]
+ cmp r2, #0x0
+ beq _0209D4C4
+ mvn r12, #0x0
+_0209D314:
+ ldr r4, [r2, #0xa4]
+ cmp r4, #0x0
+ beq _0209D4B8
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _0209D4B8
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xa
+ bne _0209D4B8
+ ldrh r3, [r6, #0x2]
+ ldrh r1, [r4, #0xa]
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r1, r0, lsr #0x10
+ bne _0209D4B8
+ ldrh r3, [r4, #0x18]
+ cmp r3, #0x0
+ beq _0209D378
+ ldrh r1, [r6, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r3, r0, lsr #0x10
+ bne _0209D4B8
+_0209D378:
+ ldr r1, [r4, #0x1c]
+ cmp r1, #0x0
+ beq _0209D3C0
+ cmp r1, r12
+ beq _0209D3C0
+ ldrh lr, [r7, #0xc]
+ ldrh r0, [r7, #0xe]
+ mov r3, lr, asr #0x8
+ orr r3, r3, lr, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov lr, r0, asr #0x8
+ mov r3, r3, lsr #0x10
+ orr r0, lr, r0, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r3, r0, lsr #0x10
+ cmp r1, r0
+ bne _0209D4B8
+_0209D3C0:
+ ldrh r1, [r7, #0x10]
+ ldrh r3, [r7, #0x12]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ str r0, [r4, #0x14]
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x0
+ bne _0209D43C
+ ldrh r1, [r7, #0xc]
+ ldrh r3, [r7, #0xe]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ str r0, [r4, #0x1c]
+ ldrh r1, [r6, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r4, #0x18]
+_0209D43C:
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209D4C4
+ ldr r1, [r4, #0x3c]
+ sub r0, r5, #0x8
+ cmp r0, r1
+ strhi r1, [r4, #0x44]
+ strls r0, [r4, #0x44]
+ ldr r1, [r4, #0x40]
+ ldr r2, [r4, #0x44]
+ add r0, r6, #0x8
+ bl MI_CpuCopy8
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x3
+ bne _0209D48C
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209D4C4
+_0209D48C:
+ ldr r3, [r4, #0x38]
+ cmp r3, #0x0
+ beq _0209D4C4
+ ldr r0, [r4, #0x40]
+ ldr r1, [r4, #0x44]
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ movne r0, #0x0
+ strne r0, [r4, #0x44]
+ b _0209D4C4
+_0209D4B8:
+ ldr r2, [r2, #0x68]
+ cmp r2, #0x0
+ bne _0209D314
+_0209D4C4:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209D4D4: .word 0x021D3498
+
+ arm_func_start FUN_0209D4D8
+FUN_0209D4D8:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ mov r0, r5
+ mov r1, r4
+ mov r2, r6
+ mov r3, #0x6
+ bl FUN_0209FB28
+_0209D4FC: ; 0x0209D4FC
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrb r0, [r5, #0xc]
+ ldrb r2, [r5, #0xd]
+ and r1, r0, #0xf0
+ mov r0, r1, asr #0x1
+ add r0, r1, r0, lsr #0x1e
+ and r1, r2, #0x17
+ cmp r1, #0x10
+ sub r4, r4, r0, asr #0x2
+ bgt _0209D558
+ cmp r1, #0x10
+ bge _0209D5C4
+ cmp r1, #0x2
+ bgt _0209D5F4
+ cmp r1, #0x1
+ blt _0209D5F4
+ cmp r1, #0x1
+ beq _0209D5DC
+ cmp r1, #0x2
+ beq _0209D57C
+ b _0209D5F4
+_0209D558:
+ cmp r1, #0x12
+ bgt _0209D5F4
+ cmp r1, #0x11
+ blt _0209D5F4
+ cmp r1, #0x11
+ beq _0209D5C4
+ cmp r1, #0x12
+ beq _0209D5A0
+ b _0209D5F4
+_0209D57C:
+ ands r0, r2, #0x28
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209DBB0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5A0:
+ ands r0, r2, #0x28
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209DA9C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5C4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209D774
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5DC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209D674
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5F4:
+ ands r0, r2, #0x4
+ beq _0209D610
+ mov r0, r6
+ mov r1, r5
+ bl FUN_0209D62C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D610:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r3, #0x0
+ bl FUN_0209DE34
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209D62C
+FUN_0209D62C: ; 0x0209D62C
+ stmdb sp!, {r4,lr}
+ bl FUN_0209E0C8
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl OS_YieldThread
+ mov r1, #0x0
+ strb r1, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ sub r0, r0, #0x1
+ cmp r0, #0x1
+ ldmhiia sp!, {r4,lr}
+ bxhi lr
+ str r1, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_0209D674
+FUN_0209D674: ; 0x0209D674
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_0209E0C8
+ movs r4, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrb r1, [r4, #0x8]
+ cmp r1, #0x4
+ beq _0209D72C
+ cmp r1, #0x7
+ beq _0209D6BC
+ cmp r1, #0x8
+ beq _0209D6E4
+ b _0209D754
+_0209D6BC:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl FUN_0209DF84
+ mov r0, #0x9
+ add sp, sp, #0x4
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D6E4:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl FUN_0209DF84
+ mov r1, #0x0
+ strb r1, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ str r1, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D72C:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl FUN_0209DF70
+ mov r0, #0x6
+ add sp, sp, #0x4
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D754:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, #0x0
+ bl FUN_0209DE34
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209D774
+FUN_0209D774: ; 0x0209D774
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ bl FUN_0209E0C8
+ movs r5, r0
+ bne _0209D7B4
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, #0x0
+ bl FUN_0209DE34
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_0209D7B4:
+ ldrh r3, [r7, #0x8]
+ ldrh r1, [r7, #0xa]
+ ldrb r4, [r7, #0xd]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r1, asr #0x8
+ mov r2, r2, lsr #0x10
+ orr r1, r3, r1, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ str r1, [r5, #0x30]
+ ldrh r9, [r7, #0x4]
+ ldrh r1, [r7, #0x6]
+ ldrb r3, [r5, #0x8]
+ mov r2, r9, asr #0x8
+ orr r2, r2, r9, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r9, r1, asr #0x8
+ mov r2, r2, lsr #0x10
+ orr r1, r9, r1, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ cmp r3, #0x4
+ orr r2, r2, r1, lsr #0x10
+ bne _0209D840
+ ldr r1, [r5, #0x24]
+ cmp r1, r2
+ beq _0209D840
+ mov r1, #0x0
+ bl FUN_0209DF84
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_0209D840:
+ ldrh r1, [r7, #0xe]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r5, #0x2c]
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x9
+ addls pc, pc, r0, lsl #0x2
+ b _0209DA70
+_0209D860:
+ b _0209D888
+_0209D864:
+ b _0209DA70
+_0209D868:
+ b _0209D888
+_0209D86C:
+ b _0209D8A0
+_0209D870:
+ b _0209D8CC
+_0209D874:
+ b _0209DA70
+_0209D878:
+ b _0209DA4C
+_0209D87C:
+ b _0209D9D8
+_0209D880:
+ b _0209D9D8
+_0209D884:
+ b _0209DA4C
+_0209D888:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, #0x0
+ bl FUN_0209DE34
+ b _0209DA8C
+_0209D8A0:
+ mov r0, #0x4
+ strb r0, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x1
+ bne _0209D8C4
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+_0209D8C4:
+ cmp r6, #0x0
+ beq _0209DA8C
+_0209D8CC:
+ ldr r0, [r5, #0x34]
+ add r0, r0, #0x1
+ str r0, [r5, #0x34]
+ ldr r1, [r5, #0x3c]
+ ldr r0, [r5, #0x44]
+ sub r0, r1, r0
+ cmp r6, r0
+ movhi r9, #0x0
+ movhi r6, r0
+ movls r9, #0x1
+ cmp r6, #0x0
+ beq _0209D968
+ bl OS_DisableInterrupts
+ ldrb r1, [r7, #0xc]
+ ldr r12, [r5, #0x40]
+ ldr r3, [r5, #0x44]
+ and r2, r1, #0xf0
+ mov r1, r2, asr #0x1
+ add r1, r2, r1, lsr #0x1e
+ mov r8, r0
+ mov r2, r6
+ add r0, r7, r1, asr #0x2
+ add r1, r12, r3
+ bl MI_CpuCopy8
+ ldr r1, [r5, #0x44]
+ mov r0, r8
+ add r1, r1, r6
+ str r1, [r5, #0x44]
+ ldr r1, [r5, #0x24]
+ add r1, r1, r6
+ str r1, [r5, #0x24]
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209D968
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+_0209D968:
+ cmp r9, #0x0
+ beq _0209D9C0
+ ands r0, r4, #0x1
+ beq _0209D9C0
+ mov r0, #0x6
+ strb r0, [r5, #0x8]
+ ldr r1, [r5, #0x24]
+ mov r0, r5
+ add r2, r1, #0x1
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl FUN_0209DF70
+_0209D998: ; 0x0209D998
+ cmp r6, #0x0
+ bne _0209DA8C
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209D9C0:
+ cmp r6, #0x0
+ beq _0209DA8C
+ mov r0, r5
+ mov r1, #0x0
+ bl FUN_0209DF84
+ b _0209DA8C
+_0209D9D8:
+ ands r0, r4, #0x1
+ beq _0209DA20
+ ldr r1, [r5, #0x24]
+ add r0, r6, #0x1
+ add r2, r1, r0
+ mov r0, r5
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl FUN_0209DF84
+ mov r1, #0x0
+ strb r1, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209DA20:
+ cmp r6, #0x0
+ beq _0209DA40
+ ldr r1, [r5, #0x24]
+ mov r0, r5
+ add r2, r1, r6
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl FUN_0209DF84
+_0209DA40:
+ mov r0, #0x8
+ strb r0, [r5, #0x8]
+ b _0209DA8C
+_0209DA4C:
+ mov r1, #0x0
+ strb r1, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209DA70:
+ ands r0, r4, #0x1
+ ldrne r0, [r5, #0x24]
+ mov r1, #0x0
+ addne r0, r0, #0x1
+ strne r0, [r5, #0x24]
+ mov r0, r5
+ bl FUN_0209DF84
+_0209DA8C:
+ bl OS_YieldThread
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_0209DA9C
+FUN_0209DA9C: ; 0x0209DA9C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r5, r1
+ mov r6, r2
+ bl FUN_0209E0C8
+ movs r4, r0
+ beq _0209DAC8
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x2
+ beq _0209DAE8
+_0209DAC8:
+ mov r0, r7
+ mov r1, r5
+ mov r2, r6
+ mov r3, #0x0
+ bl FUN_0209DE34
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209DAE8:
+ bl OS_YieldThread
+ ldrh r2, [r5, #0x4]
+ ldrh r12, [r5, #0x6]
+ mov r0, r5
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ add r1, r1, #0x1
+ str r1, [r4, #0x24]
+ ldrh r3, [r5, #0x8]
+ ldrh lr, [r5, #0xa]
+ mov r1, r4
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, lr, asr #0x8
+ mov r12, r2, lsr #0x10
+ orr r2, r3, lr, lsl #0x8
+ mov r3, r12, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ str r2, [r4, #0x30]
+ ldrh r3, [r5, #0xe]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ strh r2, [r4, #0x2c]
+ bl FUN_0209E044
+ mov r0, r4
+ mov r1, #0x0
+ bl FUN_0209DF84
+ mov r0, #0x4
+ strb r0, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209DBB0
+FUN_0209DBB0: ; 0x0209DBB0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldrh r12, [r4, #0x10]
+ ldrh r7, [r4, #0xc]
+ ldrh r3, [r4, #0x12]
+ mov r5, r12, asr #0x8
+ mov r6, r7, asr #0x8
+ orr r5, r5, r12, lsl #0x8
+ orr r6, r6, r7, lsl #0x8
+ mov r12, r6, lsl #0x10
+ ldrh r0, [r4, #0xe]
+ mov lr, r5, lsl #0x10
+ mov r5, r3, asr #0x8
+ mov r6, r0, asr #0x8
+ mov r7, r12, lsr #0x10
+ orr r0, r6, r0, lsl #0x8
+ orr r3, r5, r3, lsl #0x8
+ mov r12, lr, lsr #0x10
+ mov r6, r7, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r5, r12, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r7, r1
+ orr r1, r5, r3, lsr #0x10
+ orr r0, r6, r0, lsr #0x10
+ mov r5, r2
+ bl FUN_0209E3DC
+_0209DC20: ; 0x0209DC20
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, r7
+ mov r2, r5
+ bl FUN_0209DCB4
+_0209DC40: ; 0x0209DC40
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, r4
+ mov r1, r7
+ bl FUN_0209E200
+ movs r2, r0
+ beq _0209DC7C
+ mov r0, r4
+ mov r1, r7
+ bl FUN_0209DD44
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209DC7C:
+ bl OS_YieldThread
+ mov r0, r4
+ mov r1, r7
+ bl FUN_0209E200
+ movs r2, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, r7
+ bl FUN_0209DD44
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209DCB4
+FUN_0209DCB4:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_0209E0C8
+ movs r2, r0
+ beq _0209DD38
+ ldrb r0, [r2, #0x8]
+ cmp r0, #0x1
+ bne _0209DCEC
+ mov r0, r6
+ mov r1, r5
+ bl FUN_0209DD44
+ b _0209DD2C
+_0209DCEC:
+ add r0, r0, #0xfd
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209DD18
+ ldr r1, [r2, #0x28]
+ mov r0, r6
+ sub r3, r1, #0x1
+ mov r1, r5
+ str r3, [r2, #0x28]
+ bl FUN_0209DD44
+ b _0209DD2C
+_0209DD18:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r3, #0x0
+ bl FUN_0209DE34
+_0209DD2C:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209DD38:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209DD44
+FUN_0209DD44: ; 0x0209DD44
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r2
+ mov r2, #0x3
+ mov r6, r0
+ mov r5, r1
+ strb r2, [r4, #0x8]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r4, #0x10]
+ ldrh r2, [r6, #0x10]
+ ldrh r3, [r6, #0x12]
+ mov r0, r5
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r1, r1, lsr #0x10
+ mov r3, r1, lsl #0x10
+ mov r1, r2, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ str r1, [r4, #0x14]
+ ldrh r3, [r5, #0x0]
+ mov r1, r4
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ strh r2, [r4, #0x18]
+ ldrh r3, [r6, #0xc]
+ ldrh r6, [r6, #0xe]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r6, asr #0x8
+ orr r3, r3, r6, lsl #0x8
+ mov r2, r2, lsr #0x10
+ mov r6, r2, lsl #0x10
+ mov r2, r3, lsl #0x10
+ orr r2, r6, r2, lsr #0x10
+ str r2, [r4, #0x1c]
+ ldrh r3, [r5, #0x4]
+ ldrh r6, [r5, #0x6]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r6, asr #0x8
+ mov r5, r2, lsr #0x10
+ orr r2, r3, r6, lsl #0x8
+ mov r3, r5, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl FUN_0209E044
+ mov r0, r4
+ mov r1, #0x12
+ mov r2, #0x0
+ bl FUN_0209DF98
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209DE34
+FUN_0209DE34: ; 0x0209DE34
+ stmdb sp!, {r4-r8,lr}
+ ldr r4, _0209DF6C ; =0x021C903C
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r0, r4
+ mov r1, #0x0
+ mov r2, #0x64
+ mov r5, r3
+ bl MI_CpuFill8
+ ldrh r2, [r7, #0x2]
+ mov r1, r4
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0xa]
+ ldrh r2, [r7, #0x0]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0x18]
+ ldrh r2, [r8, #0xc]
+ ldrh r8, [r8, #0xe]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r8, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r2, r8, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r2, r0, lsr #0x10
+ str r0, [r1, #0x1c]
+ ldrb r0, [r7, #0xd]
+ ands r0, r0, #0x10
+ beq _0209DF04
+ ldrh r2, [r7, #0x8]
+ ldrh r6, [r7, #0xa]
+ mov r0, r4
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r6, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r6, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r3, r2, r1, lsr #0x10
+ mov r2, r5
+ mov r1, #0x4
+ str r3, [r4, #0x28]
+ bl FUN_0209DF98
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209DF04:
+ mov r0, #0x0
+ str r0, [r4, #0x28]
+ ldrh r1, [r7, #0x4]
+ ldrh r3, [r7, #0x6]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ add r0, r6, r0
+ str r0, [r4, #0x24]
+ ldrb r0, [r7, #0xd]
+ mov r2, r5
+ mov r1, #0x14
+ ands r0, r0, #0x3
+ ldrne r0, [r4, #0x24]
+ addne r0, r0, #0x1
+ strne r0, [r4, #0x24]
+ mov r0, r4
+ bl FUN_0209DF98
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209DF6C: .word 0x021C903C
+
+ arm_func_start FUN_0209DF70
+FUN_0209DF70:
+ ldr ip, _0209DF80 ; =FUN_0209DF98
+ mov r2, r1
+ mov r1, #0x11
+ bx r12
+ .balign 4
+_0209DF80: .word FUN_0209DF98
+
+ arm_func_start FUN_0209DF84
+FUN_0209DF84: ; 0x0209DF84
+ ldr ip, _0209DF94 ; =FUN_0209DF98
+ mov r2, r1
+ mov r1, #0x10
+ bx r12
+ .balign 4
+_0209DF94: .word FUN_0209DF98
+
+ arm_func_start FUN_0209DF98
+FUN_0209DF98: ; 0x0209DF98
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ ldr r0, [r6, #0x1c]
+ mov r5, r1
+ mov r4, r2
+ bl FUN_0209E014
+_0209DFB4: ; 0x0209DFB4
+ cmp r0, #0x0
+ bne _0209DFD0
+ ldr r0, _0209E00C ; =0x021D3498
+ ldr r1, _0209E010 ; =0x021C9160
+ ldr r0, [r0, #0x4]
+ cmp r0, r1
+ beq _0209DFF4
+_0209DFD0:
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r6
+ mov r3, r5
+ str r4, [sp, #0x0]
+ bl FUN_0209E878
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209DFF4:
+ ldr r0, [r6, #0x1c]
+ bl FUN_0209FAB0
+ bl FUN_0209F338
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209E00C: .word 0x021D3498
+_0209E010: .word 0x021C9160
+
+ arm_func_start FUN_0209E014
+FUN_0209E014:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_0209FAB0
+_0209E020: ; 0x0209E020
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl FUN_0209F438
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209E044
+FUN_0209E044: ; 0x0209E044
+ mov r2, #0x218
+ strh r2, [r1, #0x2e]
+ ldrb r2, [r0, #0xc]
+ add r3, r0, #0x14
+ and r2, r2, #0xf0
+ mov r0, r2, asr #0x1
+ add r0, r2, r0, lsr #0x1e
+ mov r0, r0, asr #0x2
+ subs r0, r0, #0x14
+ sub r12, r0, #0x1
+ bxeq lr
+_0209E070:
+ ldrb r0, [r3], #0x1
+ cmp r0, #0x0
+ bxeq lr
+ cmp r0, #0x1
+ beq _0209E0B8
+ cmp r0, #0x2
+ bne _0209E0A8
+ ldrb r2, [r3, #0x1]
+ ldrb r0, [r3, #0x2]
+ add r3, r3, #0x3
+ sub r12, r12, #0x3
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0x2e]
+ b _0209E0B8
+_0209E0A8:
+ ldrb r0, [r3, #0x0]
+ sub r0, r0, #0x1
+ sub r12, r12, r0
+ add r3, r3, r0
+_0209E0B8:
+ cmp r12, #0x0
+ sub r12, r12, #0x1
+ bne _0209E070
+ bx lr
+
+ arm_func_start FUN_0209E0C8
+FUN_0209E0C8: ; 0x0209E0C8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r2, _0209E140 ; =0x021D3498
+ mov r7, r0
+ ldr r4, [r2, #0x8]
+ mov r6, r1
+ cmp r4, #0x0
+ beq _0209E130
+_0209E0E8:
+ ldr r5, [r4, #0xa4]
+ cmp r5, #0x0
+ beq _0209E124
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _0209E124
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_0209E144
+_0209E110: ; 0x0209E110
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, r5
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+_0209E124:
+ ldr r4, [r4, #0x68]
+ cmp r4, #0x0
+ bne _0209E0E8
+_0209E130:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E140: .word 0x021D3498
+
+ arm_func_start FUN_0209E144
+FUN_0209E144:
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r2, #0x8]
+ mov r12, #0x0
+ mov r3, r12
+ mov r6, r12
+ mov r5, r12
+ cmp r4, #0xa
+ beq _0209E16C
+ cmp r4, #0xb
+ movne r5, #0x1
+_0209E16C:
+ cmp r5, #0x0
+ beq _0209E190
+ ldrh lr, [r1, #0x2]
+ ldrh r5, [r2, #0xa]
+ mov r4, lr, asr #0x8
+ orr r4, r4, lr, lsl #0x8
+ mov lr, r4, lsl #0x10
+ cmp r5, lr, lsr #0x10
+ moveq r6, #0x1
+_0209E190:
+ cmp r6, #0x0
+ beq _0209E1B4
+ ldrh r4, [r1, #0x0]
+ ldrh lr, [r2, #0x18]
+ mov r1, r4, asr #0x8
+ orr r1, r1, r4, lsl #0x8
+ mov r1, r1, lsl #0x10
+ cmp lr, r1, lsr #0x10
+ moveq r3, #0x1
+_0209E1B4:
+ cmp r3, #0x0
+ beq _0209E1F4
+ ldrh r1, [r0, #0xc]
+ ldrh lr, [r0, #0xe]
+ ldr r3, [r2, #0x1c]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, lr, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, lr, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ cmp r3, r0
+ moveq r12, #0x1
+_0209E1F4:
+ mov r0, r12
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_0209E200
+FUN_0209E200: ; 0x0209E200
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _0209E2DC ; =0x021D3498
+ ldr r3, [r2, #0x8]
+ cmp r3, #0x0
+ beq _0209E2D0
+_0209E214:
+ ldr r12, [r3, #0xa4]
+ cmp r12, #0x0
+ beq _0209E2C4
+ ldr r2, [r12, #0x0]
+ cmp r2, #0x0
+ beq _0209E2C4
+ ldrb r2, [r12, #0x8]
+ cmp r2, #0x1
+ bne _0209E2C4
+ ldrh r5, [r1, #0x2]
+ ldrh r4, [r12, #0xa]
+ mov r2, r5, asr #0x8
+ orr r2, r2, r5, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r4, r2, lsr #0x10
+ bne _0209E2C4
+ ldrh r5, [r12, #0x18]
+ cmp r5, #0x0
+ beq _0209E278
+ ldrh r4, [r1, #0x0]
+ mov r2, r4, asr #0x8
+ orr r2, r2, r4, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r5, r2, lsr #0x10
+ bne _0209E2C4
+_0209E278:
+ ldr r2, [r12, #0x1c]
+ cmp r2, #0x0
+ beq _0209E2B8
+ ldrh r5, [r0, #0xc]
+ ldrh r6, [r0, #0xe]
+ mov r4, r5, asr #0x8
+ orr r4, r4, r5, lsl #0x8
+ mov lr, r4, lsl #0x10
+ mov r4, r6, asr #0x8
+ mov lr, lr, lsr #0x10
+ orr r4, r4, r6, lsl #0x8
+ mov r5, lr, lsl #0x10
+ mov lr, r4, lsl #0x10
+ orr r4, r5, lr, lsr #0x10
+ cmp r2, r4
+ bne _0209E2C4
+_0209E2B8:
+ mov r0, r12
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209E2C4:
+ ldr r3, [r3, #0x68]
+ cmp r3, #0x0
+ bne _0209E214
+_0209E2D0:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209E2DC: .word 0x021D3498
+
+ arm_func_start FUN_0209E2E0
+FUN_0209E2E0: ; 0x0209E2E0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r6, r0
+ mov r0, r5
+ mov r1, r4
+ bl FUN_0209FB84
+ ldr r1, _0209E3D8 ; =0x0000FFFF
+ cmp r0, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r12, [r6, #0x10]
+ ldrh r7, [r6, #0xc]
+ ldrh r0, [r6, #0xe]
+ ldrh r1, [r6, #0x12]
+ mov r3, r7, asr #0x8
+ mov lr, r0, asr #0x8
+ orr r0, lr, r0, lsl #0x8
+ mov r2, r12, asr #0x8
+ orr r7, r3, r7, lsl #0x8
+ orr r3, r2, r12, lsl #0x8
+ mov r2, r7, lsl #0x10
+ mov r12, r1, asr #0x8
+ orr r1, r12, r1, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r7, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ mov r3, r7, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r0, r3, r0, lsr #0x10
+ orr r1, r2, r1, lsr #0x10
+ bl FUN_0209E3DC
+_0209E370: ; 0x0209E370
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrb r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _0209E3A0
+ cmp r0, #0x8
+ beq _0209E3BC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E3A0:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209E40C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E3BC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_0209E524
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E3D8: .word 0x0000FFFF
+
+ arm_func_start FUN_0209E3DC
+FUN_0209E3DC:
+ cmp r0, #0x0
+ beq _0209E404
+ mvn r2, #0x0
+ cmp r0, r2
+ beq _0209E404
+ cmp r1, #0x0
+ beq _0209E404
+ cmp r1, r2
+ movne r0, #0x1
+ bxne lr
+_0209E404:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_0209E40C
+FUN_0209E40C: ; 0x0209E40C
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_DisableInterrupts
+ ldr r1, _0209E520 ; =0x021D3498
+ mov r8, r0
+ ldr r2, [r1, #0x8]
+ cmp r2, #0x0
+ beq _0209E510
+_0209E434:
+ ldr r4, [r2, #0xa4]
+ cmp r4, #0x0
+ beq _0209E504
+ ldr r3, [r4, #0x0]
+ cmp r3, #0x0
+ beq _0209E504
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xb
+ bne _0209E504
+ ldrh r1, [r6, #0x4]
+ mov r0, r3, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, r1
+ bne _0209E504
+ ldrh r1, [r4, #0xa]
+ ldrh r0, [r6, #0x6]
+ cmp r1, r0
+ bne _0209E504
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209E504
+ ldrh r12, [r7, #0xc]
+ ldrh r1, [r7, #0xe]
+ ldr r0, [r4, #0x1c]
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r12, r1, asr #0x8
+ mov r3, r3, lsr #0x10
+ orr r1, r12, r1, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ cmp r0, r1
+ bne _0209E504
+ ldr r1, [r4, #0x3c]
+ sub r0, r5, #0x8
+ cmp r0, r1
+ strhi r1, [r4, #0x44]
+ strls r0, [r4, #0x44]
+ ldr r1, [r4, #0x40]
+ ldr r2, [r4, #0x44]
+ add r0, r6, #0x8
+ bl MI_CpuCopy8
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x3
+ bne _0209E510
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209E510
+_0209E504:
+ ldr r2, [r2, #0x68]
+ cmp r2, #0x0
+ bne _0209E434
+_0209E510:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209E520: .word 0x021D3498
+
+ arm_func_start FUN_0209E524
+FUN_0209E524: ; 0x0209E524
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r6, r0
+ ldrh r3, [r6, #0xc]
+ ldrh r4, [r6, #0xe]
+ mov r5, r1
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r4, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r4, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ mov r4, r2
+ bl FUN_0209FAB0
+ movs r7, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl FUN_0209F438
+_0209E57C: ; 0x0209E57C
+ cmp r0, #0x0
+ bne _0209E598
+ mov r0, r7
+ bl FUN_0209F338
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E598:
+ mov r2, #0x0
+ strb r2, [r5, #0x0]
+ mov r0, r5
+ mov r1, r4
+ strh r2, [r5, #0x2]
+ bl FUN_0209FB84
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r5, #0x2]
+ ldrh r1, [r6, #0xc]
+ ldrh r6, [r6, #0xe]
+ mov r2, #0x0
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r6, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r6, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r6, r1, r0, lsr #0x10
+ mov r0, r5
+ mov r1, r4
+ mov r3, r2
+ str r6, [sp, #0x0]
+ mov r4, #0x1
+ str r4, [sp, #0x4]
+ bl FUN_0209ECFC
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_0209E614
+FUN_0209E614: ; 0x0209E614
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x1c
+ mov r6, r0
+ addcc sp, sp, #0x4
+ ldmccia sp!, {r4-r7,lr}
+ bxcc lr
+ ldr r1, _0209E7BC ; =0x021C8F14
+ add r0, r6, #0x8
+ bl FUN_0209F9A0
+_0209E63C: ; 0x0209E63C
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _0209E7C0 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrh r0, [r6, #0x0]
+ cmp r0, #0x100
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r0, [r6, #0x2]
+ cmp r0, #0x8
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r1, [r6, #0x4]
+ ldr r0, _0209E7C4 ; =0x00000406
+ cmp r1, r0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r1, [r6, #0x6]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ cmp r4, #0x1
+ beq _0209E6D0
+ cmp r4, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+_0209E6D0:
+ ldrh r1, [r6, #0xe]
+ ldrh r5, [r6, #0x10]
+ ldr r2, _0209E7C0 ; =0x021C8F04
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r1, r5, asr #0x8
+ orr r0, r1, r5, lsl #0x8
+ mov r1, r0, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ ldr r0, [r2, #0x0]
+ ldrh r3, [r6, #0x18]
+ ldrh lr, [r6, #0x1a]
+ cmp r1, r0
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ moveq r5, #0x1
+ mov r3, lr, asr #0x8
+ mov r12, r2, lsr #0x10
+ orr r2, r3, lr, lsl #0x8
+ mov r3, r12, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ movne r5, #0x0
+ cmp r0, r2
+ moveq r7, #0x1
+ movne r7, #0x0
+ cmp r5, #0x0
+ bne _0209E75C
+ mov r2, r7
+ add r0, r6, #0x8
+ bl FUN_0209F12C
+_0209E75C:
+ cmp r4, #0x1
+ bne _0209E780
+ cmp r7, #0x0
+ beq _0209E780
+ mov r0, r6
+ bl FUN_0209E7CC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E780:
+ cmp r4, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r7, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r5, #0x0
+ ldrne r0, _0209E7C8 ; =0x021C8EAC
+ movne r1, #0x1
+ strneb r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E7BC: .word 0x021C8F14
+_0209E7C0: .word 0x021C8F04
+_0209E7C4: .word 0x00000406
+_0209E7C8: .word 0x021C8EAC
+
+ arm_func_start FUN_0209E7CC
+FUN_0209E7CC: ; 0x0209E7CC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r3, #0x200
+ add r0, r4, #0x8
+ add r1, r4, #0x12
+ mov r2, #0xa
+ strh r3, [r4, #0x6]
+ bl MI_CpuCopy8
+ ldr r0, _0209E870 ; =0x021C8F14
+ add r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r3, _0209E874 ; =0x021C8F04
+ add r0, r4, #0x12
+ ldr r2, [r3, #0x0]
+ sub r1, r4, #0xe
+ mov r2, r2, lsr #0x10
+ mov r2, r2, lsl #0x10
+ mov r12, r2, lsr #0x10
+ mov r2, r12, asr #0x8
+ orr r2, r2, r12, lsl #0x8
+ strh r2, [r4, #0xe]
+ ldr r3, [r3, #0x0]
+ mov r2, #0x6
+ mov r3, r3, lsl #0x10
+ mov r12, r3, lsr #0x10
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ strh r3, [r4, #0x10]
+ bl MI_CpuCopy8
+ ldr r0, _0209E870 ; =0x021C8F14
+ sub r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ sub r0, r4, #0xe
+ mov r1, #0x2a
+ mov r2, #0x0
+ mov r3, r2
+ bl FUN_0209F930
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209E870: .word 0x021C8F14
+_0209E874: .word 0x021C8F04
+
+ arm_func_start FUN_0209E878
+FUN_0209E878: ; 0x0209E878
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r7, r2
+ ldrb r2, [r7, #0x8]
+ mov r9, r0
+ mov r8, r1
+ cmp r2, #0x0
+ mov r6, r3
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, _0209EAEC ; =0x021D3498
+ ldr r3, _0209EAF0 ; =0x021C8F04
+ ldr r1, _0209EAF4 ; =0x021C9160
+ ldr r0, [r0, #0x4]
+ ldr r12, [r3, #0x0]
+ cmp r0, r1
+ ldreq r4, _0209EAF8 ; =0x021C8F5E
+ ldrne r0, [r7, #0x4c]
+ addne r4, r0, #0x22
+ ands r0, r6, #0x2
+ movne r5, #0x18
+ moveq r5, #0x14
+ add r1, r5, r8
+ mov r2, r1, lsl #0x10
+ mov r1, r12, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r12, r1, lsr #0x10
+ mov r1, r12, asr #0x8
+ orr r1, r1, r12, lsl #0x8
+ strh r1, [r4, #-0xc]
+ ldr r1, [r3, #0x0]
+ mov r12, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0xa]
+ ldr r1, [r7, #0x1c]
+ mov r3, r12, asr #0x8
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0x8]
+ ldr r1, [r7, #0x1c]
+ mov r2, r5, lsr #0x2
+ mov r1, r1, lsl #0x10
+ mov lr, r1, lsr #0x10
+ mov r1, lr, asr #0x8
+ orr r1, r1, lr, lsl #0x8
+ strh r1, [r4, #-0x6]
+ mov r1, #0x600
+ strh r1, [r4, #-0x4]
+ orr r1, r3, r12, lsl #0x8
+ strh r1, [r4, #-0x2]
+ ldrh r12, [r7, #0xa]
+ cmp r0, #0x0
+ mov r2, r2, lsl #0x4
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ strh r3, [r4, #0x0]
+ ldrh r3, [r7, #0x18]
+ mov r1, #0x0
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x2]
+ ldr r0, [r7, #0x28]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x4]
+ ldr r0, [r7, #0x28]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x6]
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x8]
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0xa]
+ strb r2, [r4, #0xc]
+ strb r6, [r4, #0xd]
+ ldr r2, [r7, #0x3c]
+ ldr r0, [r7, #0x44]
+ sub r0, r2, r0
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r4, #0xe]
+ strh r1, [r4, #0x10]
+ strh r1, [r4, #0x12]
+ beq _0209EA64
+ ldr r1, _0209EAFC ; =0x021C8EB0
+ ldrh r0, [r1, #0x0]
+ add r0, r0, #0x2040000
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r4, #0x14]
+ ldrh r0, [r1, #0x0]
+ add r0, r0, #0x2040000
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r4, #0x16]
+_0209EA64:
+ sub r0, r4, #0xc
+ add r1, r5, #0xc
+ mov r2, #0x0
+ bl FUN_0209FBC8
+ mov r2, r0
+ mov r0, r9
+ mov r1, r8
+ bl FUN_0209FBC8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl FUN_0209FBAC
+ mov r3, r0, asr #0x8
+ orr r0, r3, r0, lsl #0x8
+ strh r0, [r4, #0x10]
+ mov r0, r4
+ ldr r4, [r7, #0x1c]
+ mov r3, #0x6
+ str r4, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r1, r5
+ mov r2, r9
+ mov r3, r8
+ bl FUN_0209ECFC
+ ands r0, r6, #0x3
+ ldr r0, [r7, #0x28]
+ add r1, r7, #0x28
+ add r0, r0, r8
+ str r0, [r7, #0x28]
+ ldrne r0, [r1, #0x0]
+ addne r0, r0, #0x1
+ strne r0, [r1, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209EAEC: .word 0x021D3498
+_0209EAF0: .word 0x021C8F04
+_0209EAF4: .word 0x021C9160
+_0209EAF8: .word 0x021C8F5E
+_0209EAFC: .word 0x021C8EB0
+
+ arm_func_start FUN_0209EB00
+FUN_0209EB00:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r7, _0209EC3C ; =0x021C8F04
+ mov r5, r2
+ ldr r2, [r7, #0x0]
+ mov r6, r1
+ mov r1, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ ldr r3, [r5, #0x4c]
+ mov r1, r2, asr #0x8
+ add r4, r3, #0x22
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0xc]
+ ldr r1, [r7, #0x0]
+ add r2, r6, #0x8
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r1, r1, r7, lsl #0x8
+ strh r1, [r4, #-0xa]
+ ldr r1, [r5, #0x1c]
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r1, r1, r7, lsl #0x8
+ strh r1, [r4, #-0x8]
+ ldr r1, [r5, #0x1c]
+ mov r2, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r7, r1, r7, lsl #0x8
+ mov r1, r2, asr #0x8
+ strh r7, [r4, #-0x6]
+ mov r7, #0x1100
+ strh r7, [r4, #-0x4]
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #0x4]
+ ldrh r1, [r4, #0x4]
+ mov r7, r0
+ sub r0, r4, #0xc
+ strh r1, [r4, #-0x2]
+ ldrh lr, [r5, #0x18]
+ mov r2, #0x0
+ mov r1, #0x14
+ mov r12, lr, asr #0x8
+ orr r12, r12, lr, lsl #0x8
+ strh r12, [r4, #0x2]
+ ldrh lr, [r5, #0xa]
+ mov r12, lr, asr #0x8
+ orr r12, r12, lr, lsl #0x8
+ strh r12, [r3, #0x22]
+ strh r2, [r4, #0x6]
+ bl FUN_0209FBC8
+ mov r2, r0
+ mov r0, r7
+ mov r1, r6
+ bl FUN_0209FBC8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl FUN_0209FBAC
+ mov r2, r7
+ mov r3, r6
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r4, #0x6]
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ str r1, [sp, #0x0]
+ mov r1, #0x11
+ str r1, [sp, #0x4]
+ mov r1, #0x8
+ bl FUN_0209ECFC
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209EC3C: .word 0x021C8F04
+
+ arm_func_start FUN_0209EC40
+FUN_0209EC40:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r5, r2
+ ldr r3, [r5, #0x4c]
+ mov r6, r1
+ mov r1, #0x8
+ ldr r2, _0209ECF4 ; =0x021D3498
+ strh r1, [r3, #0x22]
+ ldr r2, [r2, #0x4]
+ add r4, r3, #0x22
+ strh r2, [r4, #0x4]
+ mov r2, #0x0
+ ldr r3, _0209ECF8 ; =0x021C8EB4
+ strh r2, [r4, #0x2]
+ ldrh lr, [r3, #0x0]
+ mov r7, r0
+ mov r0, r4
+ strh lr, [r5, #0xa]
+ ldrh r12, [r3, #0x0]
+ add r12, r12, #0x1
+ strh r12, [r3, #0x0]
+ strh lr, [r4, #0x6]
+ bl FUN_0209FBC8
+ mov r2, r0
+ mov r0, r7
+ mov r1, r6
+ bl FUN_0209FBC8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl FUN_0209FBAC
+ mov r2, r7
+ mov r3, r6
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r4, #0x2]
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ str r1, [sp, #0x0]
+ mov r1, #0x1
+ str r1, [sp, #0x4]
+ mov r1, #0x8
+ bl FUN_0209ECFC
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209ECF4: .word 0x021D3498
+_0209ECF8: .word 0x021C8EB4
+
+ arm_func_start FUN_0209ECFC
+FUN_0209ECFC: ; 0x0209ECFC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ mov r0, #0x45
+ strb r0, [r10, #-0x14]
+ mov r5, #0x0
+ ldr r0, _0209EF0C ; =0x021C8EB8
+ strb r5, [r10, #-0x13]
+ ldrh r7, [r0, #0x0]
+ ldr r6, [sp, #0x30]
+ ldrb r4, [sp, #0x34]
+ add r7, r7, #0x1
+ strh r7, [r0, #0x0]
+ ldrh r9, [r0, #0x0]
+ mov r0, r6, lsr #0x10
+ mov r7, #0x80
+ mov r8, r9, asr #0x8
+ orr r8, r8, r9, lsl #0x8
+ strh r8, [r10, #-0x10]
+ strb r7, [r10, #-0xc]
+ ldr r7, _0209EF10 ; =0x021C8F04
+ strb r4, [r10, #-0xb]
+ ldr r8, [r7, #0x0]
+ mov r4, r0, lsl #0x10
+ mov r0, r8, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r8, r0, lsr #0x10
+ mov r0, r8, asr #0x8
+ orr r0, r0, r8, lsl #0x8
+ strh r0, [r10, #-0x8]
+ ldr r0, [r7, #0x0]
+ mov r8, r4, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+ mov r4, r7, asr #0x8
+ mov r0, r6, lsl #0x10
+ orr r9, r4, r7, lsl #0x8
+ mov r7, r8, asr #0x8
+ mov r4, r0, lsr #0x10
+ mov r0, r4, asr #0x8
+ strh r9, [r10, #-0x6]
+ orr r7, r7, r8, lsl #0x8
+ ldr fp, _0209EF14 ; =0x000005C8
+ mov r9, r1
+ strh r7, [r10, #-0x4]
+ orr r0, r0, r4, lsl #0x8
+ mov r8, r2
+ mov r7, r3
+ strh r0, [r10, #-0x2]
+ cmp r9, r11
+ bls _0209EE74
+ mov r4, r10
+ cmp r9, r11
+ bls _0209EE14
+ str r5, [sp, #0x8]
+_0209EDD8:
+ ldr r1, [sp, #0x8]
+ mov r0, r10
+ mov r2, r4
+ mov r3, r11
+ str r6, [sp, #0x0]
+ orr r12, r5, #0x2000
+ str r12, [sp, #0x4]
+ bl FUN_0209EF18
+ add r0, r5, #0xb9
+ sub r9, r9, r11
+ mov r0, r0, lsl #0x10
+ cmp r9, r11
+ add r4, r4, r11
+ mov r5, r0, lsr #0x10
+ bhi _0209EDD8
+_0209EE14:
+ cmp r9, #0x0
+ beq _0209EE74
+ cmp r7, #0x0
+ beq _0209EE48
+ mov r0, r10
+ mov r2, r4
+ mov r3, r9
+ str r6, [sp, #0x0]
+ orr r4, r5, #0x2000
+ mov r1, #0x0
+ str r4, [sp, #0x4]
+ bl FUN_0209EF18
+ b _0209EE64
+_0209EE48:
+ str r6, [sp, #0x0]
+ mov r0, r10
+ mov r2, r4
+ mov r3, r9
+ mov r1, #0x0
+ str r5, [sp, #0x4]
+ bl FUN_0209EF18
+_0209EE64:
+ add r0, r5, r9, lsr #0x3
+ mov r0, r0, lsl #0x10
+ mov r5, r0, lsr #0x10
+ mov r9, #0x0
+_0209EE74:
+ ldr r0, _0209EF14 ; =0x000005C8
+ add r1, r9, r7
+ cmp r1, r0
+ bls _0209EED4
+ mov r11, #0x0
+_0209EE88:
+ ldr r0, _0209EF14 ; =0x000005C8
+ mov r1, r9
+ sub r4, r0, r9
+ mov r0, r10
+ mov r2, r8
+ mov r3, r4
+ str r6, [sp, #0x0]
+ orr r9, r5, #0x2000
+ str r9, [sp, #0x4]
+ bl FUN_0209EF18
+ add r0, r5, #0xb9
+ mov r1, r0, lsl #0x10
+ ldr r0, _0209EF14 ; =0x000005C8
+ sub r7, r7, r4
+ mov r9, r11
+ cmp r7, r0
+ add r8, r8, r4
+ mov r5, r1, lsr #0x10
+ bhi _0209EE88
+_0209EED4:
+ adds r0, r9, r7
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ str r6, [sp, #0x0]
+ mov r0, r10
+ mov r1, r9
+ mov r2, r8
+ mov r3, r7
+ str r5, [sp, #0x4]
+ bl FUN_0209EF18
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209EF0C: .word 0x021C8EB8
+_0209EF10: .word 0x021C8F04
+_0209EF14: .word 0x000005C8
+
+ arm_func_start FUN_0209EF18
+FUN_0209EF18: ; 0x0209EF18
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r1
+ mov r5, r3
+ add r1, r7, #0x14
+ add r1, r1, r5
+ ldr r3, [sp, #0x24]
+ mov r1, r1, lsl #0x10
+ mov r4, r1, lsr #0x10
+ mov r1, r3, lsl #0x10
+ mov r3, r4, asr #0x8
+ mov r1, r1, lsr #0x10
+ mov r8, r0
+ orr r3, r3, r4, lsl #0x8
+ mov r0, r1, asr #0x8
+ strh r3, [r8, #-0x12]
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r8, #-0xe]
+ mov r3, #0x0
+ sub r0, r8, #0x14
+ mov r1, #0x14
+ mov r6, r2
+ strh r3, [r8, #-0xa]
+ ldr r4, [sp, #0x20]
+ bl FUN_0209FB84
+ mov r2, r0, asr #0x8
+ ldr r1, _0209F040 ; =0x7F000001
+ orr r0, r2, r0, lsl #0x8
+ strh r0, [r8, #-0xa]
+ cmp r4, r1
+ beq _0209EFC4
+ ldr r0, _0209F044 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r4, r0
+ beq _0209EFC4
+ mov r2, r6
+ mov r3, r5
+ str r4, [sp, #0x0]
+ mov r12, #0x800
+ sub r0, r8, #0x14
+ add r1, r7, #0x14
+ str r12, [sp, #0x4]
+ bl FUN_0209F050
+_0209EFC4:
+ ldr r0, _0209F040 ; =0x7F000001
+ cmp r4, r0
+ beq _0209EFF8
+ ldr r0, _0209F044 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r4, r0
+ beq _0209EFF8
+ mov r0, r4
+ bl FUN_0209FA54
+_0209EFE8: ; 0x0209EFE8
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+_0209EFF8:
+ ldr r0, _0209F048 ; =0x02106230
+ sub r1, r8, #0x1c
+ mov r2, #0x8
+ bl MI_CpuCopy8
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _0209F04C ; =0x021C8F14
+ str r6, [sp, #0x0]
+ mov r1, r0
+ str r5, [sp, #0x4]
+ sub r2, r8, #0x1c
+ add r3, r7, #0x1c
+ bl FUN_0209F6C0
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F040: .word 0x7F000001
+_0209F044: .word 0x021C8F04
+_0209F048: .word 0x02106230
+_0209F04C: .word 0x021C8F14
+
+ arm_func_start FUN_0209F050
+FUN_0209F050: ; 0x0209F050
+ stmdb sp!, {r4-r8,lr}
+ ldrh r5, [sp, #0x1c]
+ ldr r4, [sp, #0x18]
+ mov r8, r0
+ mov r0, r5, asr #0x8
+ orr r12, r0, r5, lsl #0x8
+ mov r0, r4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ strh r12, [r8, #-0x2]
+ bl FUN_0209FA54
+_0209F080: ; 0x0209F080
+ cmp r0, #0x0
+ bne _0209F0CC
+ mov r0, r4
+ bl FUN_0209FAB0
+ movs r4, r0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ bl FUN_0209F438
+_0209F0A0: ; 0x0209F0A0
+ cmp r0, #0x0
+ bne _0209F0B0
+ mov r0, r4
+ bl FUN_0209F2AC
+_0209F0B0:
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ sub r1, r8, #0xe
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ b _0209F0FC
+_0209F0CC:
+ mov r0, #0x1
+ strb r0, [r8, #-0xe]
+ mov r1, #0x0
+ mov r0, r4, lsr #0x10
+ strb r1, [r8, #-0xd]
+ mov r1, #0x5e
+ strb r1, [r8, #-0xc]
+ and r0, r0, #0x7f
+ strb r0, [r8, #-0xb]
+ mov r0, r4, lsr #0x8
+ strb r0, [r8, #-0xa]
+ strb r4, [r8, #-0x9]
+_0209F0FC:
+ ldr r0, _0209F128 ; =0x021C8F14
+ sub r1, r8, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ mov r2, r6
+ mov r3, r5
+ sub r0, r8, #0xe
+ add r1, r7, #0xe
+ bl FUN_0209F930
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F128: .word 0x021C8F14
+
+ arm_func_start FUN_0209F12C
+FUN_0209F12C: ; 0x0209F12C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _0209F29C ; =0x7F000001
+ mov r6, r1
+ cmp r6, r3
+ mov r7, r0
+ mov r4, r2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _0209F2A0 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r6, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ bl FUN_0209FAD8
+_0209F174: ; 0x0209F174
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ bl FUN_0209FA54
+_0209F18C: ; 0x0209F18C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ mov r0, r0, lsl #0x10
+ ldr r1, _0209F2A4 ; =0x021C8F78
+ mov r5, r0, lsr #0x10
+ mov r2, #0x0
+_0209F1B8:
+ ldr r0, [r1, #0x0]
+ cmp r6, r0
+ bne _0209F1F8
+ mov r0, #0xc
+ mul r4, r2, r0
+ ldr r0, _0209F2A4 ; =0x021C8F78
+ ldr r3, _0209F2A8 ; =0x021C8F82
+ add r1, r0, r4
+ mov r0, r7
+ add r1, r1, #0x4
+ mov r2, #0x6
+ strh r5, [r3, r4]
+ bl MI_CpuCopy8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209F1F8:
+ add r2, r2, #0x1
+ cmp r2, #0x8
+ add r1, r1, #0xc
+ blo _0209F1B8
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r12, #0x0
+ ldr r4, _0209F2A4 ; =0x021C8F78
+ mov r0, r12
+ mov r3, r12
+_0209F228:
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ moveq r0, r3
+ beq _0209F264
+ ldrh r1, [r4, #0xa]
+ add r4, r4, #0xc
+ sub r1, r5, r1
+ mov r1, r1, lsl #0x10
+ mov r2, r1, asr #0x10
+ cmp r2, r12
+ movgt r0, r3
+ add r3, r3, #0x1
+ movgt r12, r1, lsr #0x10
+ cmp r3, #0x8
+ blo _0209F228
+_0209F264:
+ mov r1, #0xc
+ mul r4, r0, r1
+ ldr r3, _0209F2A4 ; =0x021C8F78
+ mov r0, r7
+ add r1, r3, r4
+ add r1, r1, #0x4
+ mov r2, #0x6
+ str r6, [r3, r4]
+ bl MI_CpuCopy8
+ ldr r0, _0209F2A8 ; =0x021C8F82
+ strh r5, [r0, r4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209F29C: .word 0x7F000001
+_0209F2A0: .word 0x021C8F04
+_0209F2A4: .word 0x021C8F78
+_0209F2A8: .word 0x021C8F82
+
+ arm_func_start FUN_0209F2AC
+FUN_0209F2AC:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ mov r8, #0x0
+ ldr r4, _0209F334 ; =0x021C8F04
+ mov r6, r8
+ mov r5, #0x64
+_0209F2C8:
+ mov r0, r9
+ bl FUN_0209F338
+ mov r7, r6
+_0209F2D4:
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, r5
+ bl OS_Sleep
+ mov r0, r9
+ bl FUN_0209F438
+_0209F2FC: ; 0x0209F2FC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ add r7, r7, #0x1
+ cmp r7, #0x14
+ blo _0209F2D4
+ add r8, r8, #0x1
+ cmp r8, #0x8
+ blo _0209F2C8
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209F334: .word 0x021C8F04
+
+ arm_func_start FUN_0209F338
+FUN_0209F338: ; 0x0209F338
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x30
+ mov r4, r0
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x2a
+ bl MI_CpuFill8
+_0209F354: ; 0x0209F354
+ add r0, sp, #0x0
+ mov r1, #0xff
+ mov r2, #0x6
+ bl MI_CpuFill8
+ ldr r0, _0209F428 ; =0x021C8F14
+ add r1, sp, #0x6
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ ldr r1, _0209F42C ; =0x00000608
+ strb r0, [sp, #0xf]
+ strh r1, [sp, #0xc]
+ strb r0, [sp, #0x15]
+ mov r0, #0x8
+ ldr r1, _0209F430 ; =0x00000406
+ strb r0, [sp, #0x10]
+ strh r1, [sp, #0x12]
+ ldr r0, _0209F428 ; =0x021C8F14
+ add r1, sp, #0x16
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r0, _0209F434 ; =0x021C8F04
+ mov r1, r4, lsr #0x10
+ ldr r3, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r4, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, r3, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ mov r0, r3, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r4, asr #0x8
+ orr r0, r0, r4, lsl #0x8
+ strh r0, [sp, #0x1c]
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [sp, #0x1e]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [sp, #0x26]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r2, #0x0
+ strh r0, [sp, #0x28]
+ add r0, sp, #0x0
+ mov r1, #0x2a
+ mov r3, r2
+ bl FUN_0209F930
+ add sp, sp, #0x30
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209F428: .word 0x021C8F14
+_0209F42C: .word 0x00000608
+_0209F430: .word 0x00000406
+_0209F434: .word 0x021C8F04
+
+ arm_func_start FUN_0209F438
+FUN_0209F438:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl OS_DisableInterrupts
+ ldr r1, _0209F504 ; =0x7F000001
+ mov r4, r0
+ cmp r7, r1
+ mov r5, #0x0
+ beq _0209F46C
+ ldr r0, _0209F508 ; =0x021C8F04
+ ldr r0, [r0, #0x0]
+ cmp r7, r0
+ bne _0209F474
+_0209F46C:
+ ldr r5, _0209F50C ; =0x021C8F14
+ b _0209F4EC
+_0209F474:
+ mov r0, r7
+ bl FUN_0209FA68
+_0209F47C: ; 0x0209F47C
+ cmp r0, #0x0
+ bne _0209F494
+ mov r0, r7
+ bl FUN_0209FA54
+_0209F48C: ; 0x0209F48C
+ cmp r0, #0x0
+ beq _0209F49C
+_0209F494:
+ ldr r5, _0209F510 ; =0x0210621C
+ b _0209F4EC
+_0209F49C:
+ ldr r1, _0209F514 ; =0x021C8F78
+ mov r6, r5
+_0209F4A4:
+ ldr r0, [r1, #0x0]
+ cmp r7, r0
+ bne _0209F4DC
+ bl OS_GetTick
+ mov r2, #0xc
+ mul r3, r6, r2
+ ldr r2, _0209F514 ; =0x021C8F78
+ mov r5, r0, lsr #0x10
+ add r0, r2, r3
+ ldr r2, _0209F518 ; =0x021C8F82
+ orr r5, r5, r1, lsl #0x10
+ strh r5, [r2, r3]
+ add r5, r0, #0x4
+ b _0209F4EC
+_0209F4DC:
+ add r6, r6, #0x1
+ cmp r6, #0x8
+ add r1, r1, #0xc
+ blo _0209F4A4
+_0209F4EC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209F504: .word 0x7F000001
+_0209F508: .word 0x021C8F04
+_0209F50C: .word 0x021C8F14
+_0209F510: .word 0x0210621C
+_0209F514: .word 0x021C8F78
+_0209F518: .word 0x021C8F82
+
+ arm_func_start FUN_0209F51C
+FUN_0209F51C: ; 0x0209F51C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r2, _0209F570 ; =0x021C8EE4
+ ldr r1, _0209F574 ; =0x021C8F0C
+ ldr lr, [r2, #0x0]
+ ldr r12, [r1, #0x0]
+ ldr r3, [r2, #0x0]
+ ldr r1, _0209F578 ; =0x021C8F10
+ ldrh r3, [r12, r3]
+ add r3, lr, r3
+ str r3, [r2, #0x0]
+ ldr r3, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ cmp r3, r1
+ movcs r1, #0x0
+ strcs r1, [r2, #0x0]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209F570: .word 0x021C8EE4
+_0209F574: .word 0x021C8F0C
+_0209F578: .word 0x021C8F10
+
+ arm_func_start FUN_0209F57C
+FUN_0209F57C: ; 0x0209F57C
+ stmdb sp!, {r4-r10,lr}
+ mov r6, r0
+ bl OS_DisableInterrupts
+ ldr sl, _0209F644 ; =0x021C8EE4
+ ldr sb, _0209F648 ; =0x021C8EDC
+ ldr r2, [r10, #0x0]
+ ldr r1, [r9, #0x0]
+ mov r5, r0
+ cmp r2, r1
+ bne _0209F5D4
+ ldr r8, _0209F64C ; =0x021D3498
+ ldr r7, _0209F650 ; =0x021C8F08
+ mov r4, #0x0
+_0209F5B0:
+ ldr r1, [r8, #0x4]
+ mov r0, r4
+ str r1, [r7, #0x0]
+ bl OS_SleepThread
+ str r4, [r7, #0x0]
+ ldr r1, [r10, #0x0]
+ ldr r0, [r9, #0x0]
+ cmp r1, r0
+ beq _0209F5B0
+_0209F5D4:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, _0209F654 ; =0x021C8F0C
+ ldr r5, [r0, #0x0]
+ ldr r0, _0209F644 ; =0x021C8EE4
+ ldr r1, _0209F658 ; =0x021C8F10
+ mov r3, #0x0
+_0209F5F0:
+ ldr r4, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ sub r2, r4, r2
+ cmp r2, #0x2
+ strcc r3, [r0, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r2, [r5, r2]
+ cmp r2, #0x0
+ streq r3, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209F5F0
+ sub r0, r2, #0x2
+ ldr r1, _0209F654 ; =0x021C8F0C
+ str r0, [r6, #0x0]
+ ldr r0, _0209F644 ; =0x021C8EE4
+ ldr r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ add r0, r1, r0
+ add r0, r0, #0x2
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_0209F644: .word 0x021C8EE4
+_0209F648: .word 0x021C8EDC
+_0209F64C: .word 0x021D3498
+_0209F650: .word 0x021C8F08
+_0209F654: .word 0x021C8F0C
+_0209F658: .word 0x021C8F10
+
+ arm_func_start FUN_0209F65C
+FUN_0209F65C: ; 0x0209F65C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r12, [sp, #0x4]
+ bl FUN_0209F6C0
+ ldr r0, _0209F6BC ; =0x021C8F08
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, [r0, #0x0]
+ bl OS_IsThreadTerminated
+_0209F694: ; 0x0209F694
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _0209F6BC ; =0x021C8F08
+ ldr r0, [r0, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209F6BC: .word 0x021C8F08
+
+ arm_func_start FUN_0209F6C0
+FUN_0209F6C0: ; 0x0209F6C0
+ stmdb sp!, {r4-r8,lr}
+ ldr r4, _0209F918 ; =0x021C8F0C
+ mov r7, r0
+ ldr r0, [r4, #0x0]
+ mov r6, r2
+ mov r5, r3
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r2, _0209F91C ; =0x021C8F10
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r2, [sp, #0x1c]
+ add r2, r5, r2
+ cmp r2, #0x8
+ ldmccia sp!, {r4-r8,lr}
+ bxcc lr
+ ldr r3, _0209F920 ; =0x000005E4
+ cmp r2, r3
+ ldmhiia sp!, {r4-r8,lr}
+ bxhi lr
+ ldr r3, _0209F924 ; =0x02106230
+ ldrb r8, [r6, #0x0]
+ ldrb r4, [r3, #0x0]
+ cmp r8, r4
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r8, [r6, #0x1]
+ ldrb r4, [r3, #0x1]
+ cmp r8, r4
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r4, [r6, #0x2]
+ ldrb r3, [r3, #0x2]
+ cmp r4, r3
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r3, [r6, #0x6]
+ cmp r3, #0x8
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r3, [r6, #0x7]
+ cmp r3, #0x0
+ beq _0209F784
+ cmp r3, #0x6
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+_0209F784:
+ ldr r4, _0209F928 ; =0x021C8EDC
+ add r2, r2, #0x9
+ bic r2, r2, #0x1
+ ldr lr, [r4, #0x0]
+ mov r3, r2, lsl #0x10
+ ldr ip, _0209F92C ; =0x021C8EE4
+ ldr r8, [r4, #0x0]
+ ldr r4, [r12, #0x0]
+ mov r2, r3, lsr #0x10
+ cmp r8, r4
+ add r4, lr, r3, lsr #0x10
+ bhs _0209F7C4
+ ldr r3, [r12, #0x0]
+ cmp r3, r4
+ ldmlsia sp!, {r4-r8,lr}
+ bxls lr
+_0209F7C4:
+ ldr r3, _0209F91C ; =0x021C8F10
+ ldr r8, [r3, #0x0]
+ cmp r4, r8
+ bne _0209F7F0
+ ldr r3, _0209F92C ; =0x021C8EE4
+ mov r4, #0x0
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ bne _0209F814
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209F7F0:
+ ldr r3, [r3, #0x0]
+ cmp r4, r3
+ bls _0209F814
+ ldr r3, _0209F92C ; =0x021C8EE4
+ mov r4, r2
+ ldr r3, [r3, #0x0]
+ cmp r3, r2
+ ldmlsia sp!, {r4-r8,lr}
+ bxls lr
+_0209F814:
+ ldr ip, _0209F928 ; =0x021C8EDC
+ ldr r3, _0209F91C ; =0x021C8F10
+ ldr lr, [r12, #0x0]
+ ldr r8, [r3, #0x0]
+ add lr, lr, r2
+ cmp lr, r8
+ bls _0209F858
+ ldr r8, [r3, #0x0]
+ ldr r3, [r12, #0x0]
+ sub r3, r8, r3
+ cmp r3, #0x2
+ ldrcs r3, [r12, #0x0]
+ movcs r8, #0x0
+ strcsh r8, [r0, r3]
+ ldr r0, _0209F928 ; =0x021C8EDC
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+_0209F858:
+ ldr ip, _0209F918 ; =0x021C8F0C
+ ldr r3, _0209F928 ; =0x021C8EDC
+ ldr r8, [r12, #0x0]
+ ldr lr, [r3, #0x0]
+ mov r0, r1
+ strh r2, [r8, lr]
+ ldr r12, [r12, #0x0]
+ ldr r1, [r3, #0x0]
+ mov r2, #0x6
+ add r1, r12, r1
+ add r1, r1, #0x2
+ bl MI_CpuCopy8
+ ldr r1, _0209F918 ; =0x021C8F0C
+ ldr r0, _0209F928 ; =0x021C8EDC
+ ldr r2, [r1, #0x0]
+ ldr r1, [r0, #0x0]
+ mov r0, r7
+ add r1, r2, r1
+ add r1, r1, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r1, _0209F918 ; =0x021C8F0C
+ ldr r0, _0209F928 ; =0x021C8EDC
+ ldr r2, [r1, #0x0]
+ ldr r1, [r0, #0x0]
+ add r0, r6, #0x6
+ add r1, r2, r1
+ add r1, r1, #0xe
+ sub r2, r5, #0x6
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ beq _0209F908
+ ldr r2, [sp, #0x1c]
+ cmp r2, #0x0
+ beq _0209F908
+ ldr r3, _0209F918 ; =0x021C8F0C
+ ldr r1, _0209F928 ; =0x021C8EDC
+ ldr r3, [r3, #0x0]
+ ldr r1, [r1, #0x0]
+ add r1, r3, r1
+ add r1, r1, #0x8
+ add r1, r1, r5
+ bl MI_CpuCopy8
+_0209F908:
+ ldr r0, _0209F928 ; =0x021C8EDC
+ str r4, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F918: .word 0x021C8F0C
+_0209F91C: .word 0x021C8F10
+_0209F920: .word 0x000005E4
+_0209F924: .word 0x02106230
+_0209F928: .word 0x021C8EDC
+_0209F92C: .word 0x021C8EE4
+
+ arm_func_start FUN_0209F930
+FUN_0209F930: ; 0x0209F930
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ add r1, r6, r5
+ mov r4, r3
+ cmp r1, r2
+ beq _0209F958
+ mov r0, r2
+ mov r2, r4
+ bl MI_CpuCopy8
+_0209F958:
+ ldr r0, _0209F998 ; =0x02106230
+ add r1, r6, #0x6
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ add r2, r5, r4
+ mov r0, r6
+ add r1, r6, #0x6
+ sub r2, r2, #0x6
+ bl FUN_020A8644
+_0209F97C: ; 0x0209F97C
+ cmp r0, #0x0
+ movlt r1, #0x1
+ ldr r0, _0209F99C ; =0x021C8EA8
+ movge r1, #0x0
+ strb r1, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209F998: .word 0x02106230
+_0209F99C: .word 0x021C8EA8
+
+ arm_func_start FUN_0209F9A0
+FUN_0209F9A0:
+ mov r12, #0x0
+_0209F9A4:
+ ldrh r3, [r0], #0x2
+ ldrh r2, [r1], #0x2
+ cmp r3, r2
+ movne r0, #0x1
+ bxne lr
+ add r12, r12, #0x1
+ cmp r12, #0x3
+ blt _0209F9A4
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_0209F9CC
+FUN_0209F9CC:
+ stmdb sp!, {r4-r6,lr}
+ ldr r1, _0209FA4C ; =0x021C8F04
+ mov r5, #0x1
+ ldr r1, [r1, #0x0]
+ mov r6, r0
+ mov r4, r5
+ mov r2, r5
+ mov r0, r5
+ cmp r1, #0x0
+ beq _0209F9FC
+ cmp r6, r1
+ movne r0, #0x0
+_0209F9FC:
+ cmp r0, #0x0
+ bne _0209FA10
+ ldr r0, _0209FA50 ; =0x7F000001
+ cmp r6, r0
+ movne r2, #0x0
+_0209FA10:
+ cmp r2, #0x0
+ bne _0209FA28
+ mov r0, r6
+ bl FUN_0209FA68
+_0209FA20: ; 0x0209FA20
+ cmp r0, #0x0
+ moveq r4, #0x0
+_0209FA28:
+ cmp r4, #0x0
+ bne _0209FA40
+ mov r0, r6
+ bl FUN_0209FA54
+_0209FA38: ; 0x0209FA38
+ cmp r0, #0x0
+ moveq r5, #0x0
+_0209FA40:
+ mov r0, r5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209FA4C: .word 0x021C8F04
+_0209FA50: .word 0x7F000001
+
+ arm_func_start FUN_0209FA54
+FUN_0209FA54:
+ and r0, r0, #0xf0000000
+ cmp r0, #0xe0000000
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start FUN_0209FA68
+FUN_0209FA68:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, #0x0
+ bl FUN_0209FAD8
+_0209FA7C: ; 0x0209FA7C
+ cmp r0, #0x0
+ beq _0209FA9C
+ ldr r0, _0209FAAC ; =0x021C8ED0
+ ldr r0, [r0, #0x0]
+ mvn r1, r0
+ and r0, r1, r5
+ cmp r1, r0
+ moveq r4, #0x1
+_0209FA9C:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FAAC: .word 0x021C8ED0
+
+ arm_func_start FUN_0209FAB0
+FUN_0209FAB0:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_0209FAD8
+_0209FABC: ; 0x0209FABC
+ cmp r0, #0x0
+ ldreq r0, _0209FAD4 ; =0x021C8EE0
+ ldreq r4, [r0, #0x0]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209FAD4: .word 0x021C8EE0
+
+ arm_func_start FUN_0209FAD8
+FUN_0209FAD8:
+ mvn r1, #0x0
+ cmp r0, r1
+ mov r12, #0x1
+ beq _0209FB14
+ ldr r1, _0209FB1C ; =0x7F000001
+ cmp r0, r1
+ beq _0209FB14
+ ldr r2, _0209FB20 ; =0x021C8ED0
+ ldr r1, _0209FB24 ; =0x021C8F04
+ ldr r3, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ and r2, r0, r3
+ and r0, r1, r3
+ cmp r2, r0
+ movne r12, #0x0
+_0209FB14:
+ mov r0, r12
+ bx lr
+ .balign 4
+_0209FB1C: .word 0x7F000001
+_0209FB20: .word 0x021C8ED0
+_0209FB24: .word 0x021C8F04
+
+ arm_func_start FUN_0209FB28
+FUN_0209FB28:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r2
+ mov r2, r3
+ mov r5, r1
+ bl FUN_0209FBC8
+ mov r2, r0
+ add r0, r4, #0xc
+ mov r1, #0x8
+ bl FUN_0209FBC8
+ add r1, r0, r5
+ ands r0, r1, #0x10000
+ ldrne r0, _0209FB80 ; =0x0000FFFF
+ addne r1, r1, #0x1
+ andne r1, r1, r0
+ ldr r0, _0209FB80 ; =0x0000FFFF
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FB80: .word 0x0000FFFF
+
+ arm_func_start FUN_0209FB84
+FUN_0209FB84: ; 0x0209FB84
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ bl FUN_0209FBC8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl FUN_0209FBAC
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_0209FBAC
+FUN_0209FBAC: ; 0x0209FBAC
+ ldr r1, _0209FBC4 ; =0x0000FFFF
+ eor r0, r0, r1
+ mov r0, r0, lsl #0x10
+ movs r0, r0, lsr #0x10
+ moveq r0, r1
+ bx lr
+ .balign 4
+_0209FBC4: .word 0x0000FFFF
+
+ arm_func_start FUN_0209FBC8
+FUN_0209FBC8: ; 0x0209FBC8
+ ands r3, r0, #0x1
+ beq _0209FC00
+ cmp r1, #0x1
+ bls _0209FC54
+_0209FBD8:
+ ldrb r12, [r0, #0x0]
+ ldrb r3, [r0, #0x1]
+ sub r1, r1, #0x2
+ cmp r1, #0x1
+ orr r3, r3, r12, lsl #0x8
+ mov r3, r3, lsl #0x10
+ add r2, r2, r3, lsr #0x10
+ add r0, r0, #0x2
+ bhi _0209FBD8
+ b _0209FC54
+_0209FC00:
+ mov r2, r2, lsl #0x10
+ mov r3, r2, lsr #0x10
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r1, #0x1
+ mov r2, r2, lsr #0x10
+ bls _0209FC38
+_0209FC20:
+ ldrh r3, [r0, #0x0]
+ sub r1, r1, #0x2
+ cmp r1, #0x1
+ add r2, r2, r3
+ add r0, r0, #0x2
+ bhi _0209FC20
+_0209FC38:
+ ldr r3, _0209FC7C ; =0x00FF00FF
+ ldr ip, _0209FC80 ; =0xFF00FF00
+ and r3, r3, r2, lsr #0x8
+ and r2, r12, r2, lsl #0x8
+ orr r3, r3, r2
+ mov r2, r3, lsr #0x10
+ orr r2, r2, r3, lsl #0x10
+_0209FC54:
+ cmp r1, #0x0
+ ldrneb r0, [r0, #0x0]
+ addne r2, r2, r0, lsl #0x8
+ ldr r0, _0209FC84 ; =0x0000FFFF
+ and r0, r2, r0
+ add r0, r0, r2, lsr #0x10
+ add r0, r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bx lr
+ .balign 4
+_0209FC7C: .word 0x00FF00FF
+_0209FC80: .word 0xFF00FF00
+_0209FC84: .word 0x0000FFFF
+
+ arm_func_start FUN_0209FC88
+FUN_0209FC88: ; 0x0209FC88
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r2, _0209FCB8 ; =0x02106218
+ ldr r0, _0209FCBC ; =0x021C9160
+ mov r1, r4
+ str r4, [r2, #0x0]
+ bl OS_SetThreadPriority
+ ldr r0, _0209FCC0 ; =0x021C90A0
+ mov r1, r4
+ bl OS_SetThreadPriority
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209FCB8: .word 0x02106218
+_0209FCBC: .word 0x021C9160
+_0209FCC0: .word 0x021C90A0
+
+ arm_func_start FUN_0209FCC4
+FUN_0209FCC4:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_0209FD34
+ ldr r0, _0209FD10 ; =0x021C90A0
+ bl OS_JoinThread
+ ldr r0, _0209FD14 ; =0x021C9160
+ bl OS_DestroyThread
+ ldr r1, _0209FD18 ; =0x021C8F08
+ mov r0, #0x0
+ str r0, [r1, #0x0]
+ bl FUN_020A0098
+ ldr r1, _0209FD1C ; =0x021C8F0C
+ mov r2, #0x0
+ ldr r0, _0209FD20 ; =0x021C8F10
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209FD10: .word 0x021C90A0
+_0209FD14: .word 0x021C9160
+_0209FD18: .word 0x021C8F08
+_0209FD1C: .word 0x021C8F0C
+_0209FD20: .word 0x021C8F10
+
+ arm_func_start FUN_0209FD24
+FUN_0209FD24: ; 0x0209FD24
+ ldr r1, _0209FD30 ; =0x021C8EF0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_0209FD30: .word 0x021C8EF0
+
+ arm_func_start FUN_0209FD34
+FUN_0209FD34:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ mov r5, r0
+ ldr r0, _0209FD8C ; =0x021C90A0
+ bl OS_IsThreadTerminated
+ movs r4, r0
+ bne _0209FD74
+ ldr r1, _0209FD90 ; =0x021C8EF8
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _0209FD74
+ ldr r0, _0209FD8C ; =0x021C90A0
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_WakeupThreadDirect
+_0209FD74:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FD8C: .word 0x021C90A0
+_0209FD90: .word 0x021C8EF8
+
+ arm_func_start FUN_0209FD94
+FUN_0209FD94: ; 0x0209FD94
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldr r0, _0209FFD4 ; =0x02000BEC
+ bl OSi_ReferSymbol
+ ldr r12, [r4, #0x14]
+ ldr r6, [r4, #0x18]
+ mov r1, #0x0
+ cmp r6, r1
+ cmpeq r12, r1
+ beq _0209FDEC
+ ldr r0, _0209FFD8 ; =0x021C8F24
+ ldr r5, _0209FFDC ; =0x6C078965
+ ldr r3, _0209FFE0 ; =0x5D588B65
+ ldr r2, _0209FFE4 ; =0x00269EC3
+ str r12, [r0, #0x0]
+ str r6, [r0, #0x4]
+ str r5, [r0, #0x8]
+ str r3, [r0, #0xc]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+ b _0209FE1C
+_0209FDEC:
+ bl OS_GetTick
+ ldr r2, _0209FFD8 ; =0x021C8F24
+ ldr ip, _0209FFDC ; =0x6C078965
+ ldr r6, _0209FFE0 ; =0x5D588B65
+ ldr r5, _0209FFE4 ; =0x00269EC3
+ mov r3, #0x0
+ str r0, [r2, #0x0]
+ str r1, [r2, #0x4]
+ str r12, [r2, #0x8]
+ str r6, [r2, #0xc]
+ str r5, [r2, #0x10]
+ str r3, [r2, #0x14]
+_0209FE1C:
+ ldr r2, [r4, #0x4]
+ cmp r2, #0x0
+ beq _0209FE4C
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _0209FE4C
+ ldr r1, _0209FFE8 ; =0x021C8EC8
+ ldr r0, _0209FFEC ; =0x021C8EF4
+ str r2, [r1, #0x0]
+ ldr r1, [r4, #0x8]
+ str r1, [r0, #0x0]
+ b _0209FE60
+_0209FE4C:
+ ldr r2, _0209FFF0 ; =FUN_020A0058
+ ldr r1, _0209FFE8 ; =0x021C8EC8
+ ldr r0, _0209FFEC ; =0x021C8EF4
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+_0209FE60:
+ ldr r1, [r4, #0x0]
+ ldr r0, _0209FFF4 ; =0x021C8EC4
+ ldr ip, _0209FFD8 ; =0x021C8F24
+ str r1, [r0, #0x0]
+ ldr r1, [r4, #0x24]
+ ldr r3, [r12, #0x8]
+ cmp r1, #0x0
+ ldrne r0, _0209FFF8 ; =0x021C8EB0
+ strneh r1, [r0, #0x0]
+ ldreq r1, _0209FFFC ; =0x000005B4
+ ldreq r0, _0209FFF8 ; =0x021C8EB0
+ streqh r1, [r0, #0x0]
+ ldr r2, [r4, #0x28]
+ ldr r1, _020A0000 ; =0x021C8EE8
+ ldr r0, _020A0004 ; =0x021C8ED8
+ str r2, [r1, #0x0]
+ ldr r1, [r4, #0x2c]
+ ldr r2, [r12, #0x0]
+ str r1, [r0, #0x0]
+ ldr r1, [r4, #0xc]
+ umull lr, r5, r3, r2
+ cmp r1, #0x0
+ ldrne r0, _020A0008 ; =0x021C8ECC
+ strne r1, [r0, #0x0]
+ ldreq r1, _0209FFF0 ; =FUN_020A0058
+ ldreq r0, _020A0008 ; =0x021C8ECC
+ streq r1, [r0, #0x0]
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ ldrne r0, _020A000C ; =0x021C8EFC
+ strne r1, [r0, #0x0]
+ ldreq r1, _020A0010 ; =FUN_020A0050
+ ldreq r0, _020A000C ; =0x021C8EFC
+ streq r1, [r0, #0x0]
+ ldr r1, [r12, #0x4]
+ ldr r0, _020A0014 ; =0x00000F88
+ mla r5, r3, r1, r5
+ ldr r1, [r12, #0xc]
+ ldr r3, [r12, #0x10]
+ mla r5, r1, r2, r5
+ adds r2, r3, lr
+ ldr r1, [r12, #0x14]
+ mov r3, #0x0
+ adc r1, r1, r5
+ umull lr, r5, r1, r0
+ mla r5, r1, r3, r5
+ mla r5, r3, r0, r5
+ ldr r6, [r4, #0x1c]
+ ldr r0, _020A0018 ; =0x021C8F0C
+ ldr lr, _020A001C ; =0x021C8F10
+ str r6, [r0, #0x0]
+ ldr r4, [r4, #0x20]
+ ldr r0, _020A0020 ; =0x021C8EE4
+ str r4, [lr, #0x0]
+ str r3, [r0, #0x0]
+ ldr lr, _020A0024 ; =0x021C8EDC
+ ldr r4, _020A0028 ; =0x021C8EBC
+ add r5, r5, #0x400
+ ldr r0, _020A002C ; =0x021C8F14
+ str r3, [lr, #0x0]
+ str r2, [r12, #0x0]
+ str r1, [r12, #0x4]
+ strh r5, [r4, #0x0]
+ bl OS_GetMacAddress
+ ldr r0, _020A0030 ; =0x021C8EAC
+ mov r2, #0x0
+ strb r2, [r0, #0x0]
+ mov r1, #0x800
+ str r1, [sp, #0x0]
+ ldr r0, _020A0034 ; =0x02106218
+ ldr r1, _020A0038 ; =FUN_0209CD3C
+ ldr r4, [r0, #0x0]
+ ldr r0, _020A003C ; =0x021C9160
+ ldr r3, _020A0040 ; =0x021CA6E0
+ str r4, [sp, #0x4]
+ bl OS_CreateThread
+ mov r1, #0x800
+ ldr r0, _020A0034 ; =0x02106218
+ str r1, [sp, #0x0]
+ ldr r1, [r0, #0x0]
+ ldr r0, _020A0044 ; =0x021C90A0
+ str r1, [sp, #0x4]
+ ldr r1, _020A0048 ; =FUN_0209BA80
+ ldr r3, _020A004C ; =0x021C9EE0
+ mov r2, #0x0
+ bl OS_CreateThread
+ ldr r0, _020A003C ; =0x021C9160
+ bl OS_WakeupThreadDirect
+ ldr r0, _020A0044 ; =0x021C90A0
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209FFD4: .word 0x02000BEC
+_0209FFD8: .word 0x021C8F24
+_0209FFDC: .word 0x6C078965
+_0209FFE0: .word 0x5D588B65
+_0209FFE4: .word 0x00269EC3
+_0209FFE8: .word 0x021C8EC8
+_0209FFEC: .word 0x021C8EF4
+_0209FFF0: .word FUN_020A0058
+_0209FFF4: .word 0x021C8EC4
+_0209FFF8: .word 0x021C8EB0
+_0209FFFC: .word 0x000005B4
+_020A0000: .word 0x021C8EE8
+_020A0004: .word 0x021C8ED8
+_020A0008: .word 0x021C8ECC
+_020A000C: .word 0x021C8EFC
+_020A0010: .word FUN_020A0050
+_020A0014: .word 0x00000F88
+_020A0018: .word 0x021C8F0C
+_020A001C: .word 0x021C8F10
+_020A0020: .word 0x021C8EE4
+_020A0024: .word 0x021C8EDC
+_020A0028: .word 0x021C8EBC
+_020A002C: .word 0x021C8F14
+_020A0030: .word 0x021C8EAC
+_020A0034: .word 0x02106218
+_020A0038: .word FUN_0209CD3C
+_020A003C: .word 0x021C9160
+_020A0040: .word 0x021CA6E0
+_020A0044: .word 0x021C90A0
+_020A0048: .word FUN_0209BA80
+_020A004C: .word 0x021C9EE0
+
+ arm_func_start FUN_020A0050
+FUN_020A0050: ; 0x020A0050
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FUN_020A0058
+FUN_020A0058: ; 0x020A0058
+ bx lr
+
+ arm_func_start FUN_020A005C
+FUN_020A005C:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020A0094 ; =0x021C8ED8
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020A0084
+ bl OS_YieldThread
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A0084:
+ bl OS_Sleep
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A0094: .word 0x021C8ED8
+
+ arm_func_start FUN_020A0098
+FUN_020A0098: ; 0x020A0098
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020A01B8 ; =0x021C8F04
+ ldr r5, _020A01BC ; =0x021C8EC0
+ ldr r1, [r1, #0x0]
+ ldr r3, _020A01C0 ; =0x021C8F1C
+ cmp r1, #0x0
+ mov r1, #0x0
+ movne r6, #0x1
+ ldr ip, _020A01C4 ; =0x021C8ED0
+ ldr r2, _020A01C8 ; =0x021C8ED4
+ moveq r6, #0x0
+ ldr lr, _020A01B8 ; =0x021C8F04
+ ldr r4, _020A01CC ; =0x021C8EE0
+ cmp r6, #0x0
+ str r1, [r12, #0x0]
+ str r1, [r3, #0x0]
+ str r1, [r3, #0x4]
+ str r1, [r2, #0x0]
+ addeq sp, sp, #0x4
+ str r0, [r5, #0x0]
+ str r1, [lr, #0x0]
+ str r1, [r4, #0x0]
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _020A01D0 ; =0x021C8F78
+ mov r2, #0x60
+ bl MI_CpuFill8
+ ldr r0, _020A01D4 ; =0x021D3498
+ ldr r5, [r0, #0x8]
+ cmp r5, #0x0
+ beq _020A016C
+ mov r4, #0x0
+_020A011C:
+ ldr r1, [r5, #0xa4]
+ cmp r1, #0x0
+ beq _020A0160
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020A0160
+ ldrb r0, [r1, #0x8]
+ cmp r0, #0xa
+ beq _020A0148
+ cmp r0, #0xb
+ strneb r4, [r1, #0x8]
+_020A0148:
+ ldr r0, [r1, #0x4]
+ cmp r0, #0x0
+ beq _020A0160
+ str r4, [r1, #0x4]
+ ldr r0, [r1, #0x0]
+ bl OS_WakeupThreadDirect
+_020A0160:
+ ldr r5, [r5, #0x68]
+ cmp r5, #0x0
+ bne _020A011C
+_020A016C:
+ ldr r6, _020A01D8 ; =0x021C9520
+ mov r7, #0x0
+ ldr r4, _020A01DC ; =0x021C8EF4
+ mov r5, r7
+_020A017C:
+ ldrh r0, [r6, #0x4]
+ cmp r0, #0x0
+ beq _020A0198
+ ldr r0, [r6, #0x34]
+ ldr r1, [r4, #0x0]
+ blx r1
+ strh r5, [r6, #0x4]
+_020A0198:
+ add r7, r7, #0x1
+ cmp r7, #0x8
+ add r6, r6, #0x38
+ blt _020A017C
+ bl FUN_020A01E0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020A01B8: .word 0x021C8F04
+_020A01BC: .word 0x021C8EC0
+_020A01C0: .word 0x021C8F1C
+_020A01C4: .word 0x021C8ED0
+_020A01C8: .word 0x021C8ED4
+_020A01CC: .word 0x021C8EE0
+_020A01D0: .word 0x021C8F78
+_020A01D4: .word 0x021D3498
+_020A01D8: .word 0x021C9520
+_020A01DC: .word 0x021C8EF4
+
+ arm_func_start FUN_020A01E0
+FUN_020A01E0: ; 0x020A01E0
+ ldr ip, _020A01F4 ; =MI_CpuFill8
+ ldr r0, _020A01F8 ; =0x021CA6FC
+ mov r1, #0x0
+ mov r2, #0x170
+ bx r12
+ .balign 4
+_020A01F4: .word MI_CpuFill8
+_020A01F8: .word 0x021CA6FC
+
+ arm_func_start FUN_020A01FC
+FUN_020A01FC: ; 0x020A01FC
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r4, _020A02E0 ; =0x021CA6FC
+ mov r6, #0x0
+ mov r2, r6
+ ldr r1, _020A02E4 ; =0x000003BD
+_020A0218:
+ ldrb r3, [r4, #0x5a]
+ cmp r3, #0x0
+ beq _020A0234
+ ldr r3, [r4, #0x50]
+ sub r3, r5, r3
+ cmp r3, r1
+ strgtb r2, [r4, #0x5a]
+_020A0234:
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ add r4, r4, #0x5c
+ blt _020A0218
+ bl OS_RestoreInterrupts
+ ldr r0, _020A02E8 ; =0x021D3498
+ ldr r4, [r0, #0x8]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r6, #0x0
+_020A0260:
+ ldr r1, [r4, #0xa4]
+ cmp r1, #0x0
+ beq _020A02CC
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020A02CC
+ ldrb r0, [r1, #0x9]
+ cmp r0, #0x0
+ beq _020A02CC
+ ldrb r0, [r1, #0x8]
+ cmp r0, #0x4
+ bne _020A02CC
+ ldr r0, [r1, #0xc]
+ ldrb r0, [r0, #0x455]
+ cmp r0, #0x8
+ bhs _020A02CC
+ ldr r0, [r1, #0x10]
+ sub r0, r5, r0
+ cmp r0, #0xef
+ ble _020A02CC
+ ldr r0, [r1, #0x4]
+ cmp r0, #0x2
+ bne _020A02CC
+ strb r6, [r1, #0x8]
+ str r6, [r1, #0x4]
+ ldr r0, [r1, #0x0]
+ bl OS_WakeupThreadDirect
+_020A02CC:
+ ldr r4, [r4, #0x68]
+ cmp r4, #0x0
+ bne _020A0260
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A02E0: .word 0x021CA6FC
+_020A02E4: .word 0x000003BD
+_020A02E8: .word 0x021D3498
+
+ arm_func_start FUN_020A02EC
+FUN_020A02EC:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _020A0318 ; =0x02000C04
+ bl OSi_ReferSymbol
+ ldr r0, _020A031C ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ strneb r4, [r0, #0x9]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A0318: .word 0x02000C04
+_020A031C: .word 0x021D3498
+
+ arm_func_start FUN_020A0320
+FUN_020A0320: ; 0x020A0320
+ stmdb sp!, {r4,lr}
+ ldr r4, [r0, #0xc]
+ mov r0, #0x0
+ strb r0, [r4, #0x455]
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ beq _020A0348
+ ldr r1, _020A0358 ; =0x021C8EF4
+ ldr r1, [r1, #0x0]
+ blx r1
+_020A0348:
+ mov r0, #0x0
+ str r0, [r4, #0x824]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A0358: .word 0x021C8EF4
+
+ arm_func_start FUN_020A035C
+FUN_020A035C: ; 0x020A035C
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x20
+ mov r5, r0
+ ldr r4, [r5, #0xc]
+ ldrb r0, [r4, #0x455]
+ cmp r0, #0x8
+ bne _020A03CC
+ mov r12, #0x0
+ mov r6, #0x15
+ mov lr, #0x3
+ mov r3, #0x2
+ mov r2, #0x1
+ add r1, sp, #0x4
+ mov r0, r4
+ strb r6, [sp, #0x4]
+ strb lr, [sp, #0x5]
+ strb r12, [sp, #0x6]
+ strb r12, [sp, #0x7]
+ strb r3, [sp, #0x8]
+ strb r2, [sp, #0x9]
+ strb r12, [sp, #0xa]
+ bl FUN_020A19F4
+ mov r2, #0x0
+ mov r1, r0
+ add r0, sp, #0x4
+ mov r3, r2
+ str r5, [sp, #0x0]
+ bl FUN_0209C1D4
+_020A03CC:
+ mov r0, #0x0
+ strb r0, [r4, #0x455]
+ add sp, sp, #0x20
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A03E0
+FUN_020A03E0: ; 0x020A03E0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ ldr r4, [sp, #0x48]
+ mov r9, r1
+ mov r1, r4
+ mov r10, r0
+ mov r0, #0x0
+ ldr r1, [r1, #0xc]
+ str r0, [sp, #0x8]
+ str r0, [sp, #0x1c]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x18]
+ mov r0, #0x17
+ str r0, [sp, #0xc]
+ mov r0, #0x3
+ str r4, [sp, #0x48]
+ str r1, [sp, #0x4]
+ mov r8, r2
+ add r6, r9, r3
+ str r0, [sp, #0x10]
+_020A0430:
+ ldr r0, _020A052C ; =0x00000B4F
+ ldr r1, _020A0530 ; =0x021C8EC8
+ cmp r6, r0
+ movgt r5, r0
+ movle r5, r6
+ ldr r1, [r1, #0x0]
+ add r0, r5, #0x19
+ blx r1
+ movs r7, r0
+ beq _020A051C
+ cmp r9, r5
+ movcs r4, r5
+ movcc r4, r9
+ mov r0, r10
+ add r1, r7, #0x5
+ mov r2, r4
+ sub r11, r5, r4
+ bl MI_CpuCopy8
+ add r1, r7, #0x5
+ mov r0, r8
+ add r1, r1, r4
+ mov r2, r11
+ add r10, r10, r4
+ sub r9, r9, r4
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0xc]
+ mov r1, r7
+ strb r0, [r7, #0x0]
+ ldr r0, [sp, #0x10]
+ add r8, r8, r11
+ strb r0, [r7, #0x1]
+ ldr r0, [sp, #0x14]
+ strb r0, [r7, #0x2]
+ mov r0, r5, asr #0x8
+ strb r0, [r7, #0x3]
+ ldr r0, [sp, #0x4]
+ strb r5, [r7, #0x4]
+ bl FUN_020A19F4
+ ldr r1, [sp, #0x48]
+ ldr r2, [sp, #0x18]
+ mov r4, r0
+ str r1, [sp, #0x0]
+ mov r0, r7
+ mov r1, r4
+ mov r3, r2
+ bl FUN_0209C1D4
+ cmp r0, r4
+ ldr r1, _020A0534 ; =0x021C8EF4
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ ldrcc r5, [sp, #0x1c]
+ blx r1
+ ldr r0, [sp, #0x8]
+ subs r6, r6, r5
+ add r0, r0, r5
+ str r0, [sp, #0x8]
+ beq _020A051C
+ cmp r5, #0x0
+ bne _020A0430
+_020A051C:
+ ldr r0, [sp, #0x8]
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A052C: .word 0x00000B4F
+_020A0530: .word 0x021C8EC8
+_020A0534: .word 0x021C8EF4
+
+ arm_func_start FUN_020A0538
+FUN_020A0538: ; 0x020A0538
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r4, [r5, #0xc]
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ beq _020A0560
+ ldrb r0, [r4, #0x456]
+ cmp r0, #0x0
+ bne _020A0568
+_020A0560:
+ mov r0, r5
+ bl FUN_020A05D4
+_020A0568:
+ ldr r1, [r4, #0x824]
+ cmp r1, #0x0
+ beq _020A0594
+ ldrb r0, [r4, #0x456]
+ cmp r0, #0x0
+ ldrne r1, [r4, #0x828]
+ ldrne r0, [r4, #0x82c]
+ addne sp, sp, #0x4
+ subne r0, r1, r0
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020A0594:
+ cmp r1, #0x0
+ bne _020A05C4
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x4
+ bne _020A05B4
+ ldrb r0, [r4, #0x455]
+ cmp r0, #0x9
+ bne _020A05C4
+_020A05B4:
+ add sp, sp, #0x4
+ mvn r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A05C4:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A05D4
+FUN_020A05D4: ; 0x020A05D4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r0
+ ldr r4, [r5, #0xc]
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ bne _020A0684
+ ldr r0, [r5, #0x44]
+ cmp r0, #0x5
+ addcc sp, sp, #0x8
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ add r0, sp, #0x0
+ mov r1, r5
+ bl FUN_0209C6C0
+ ldrb r2, [r0, #0x3]
+ ldrb r0, [r0, #0x4]
+ ldr r1, _020A0730 ; =0x00004805
+ add r0, r0, r2, lsl #0x8
+ add r0, r0, #0x5
+ str r0, [sp, #0x0]
+ cmp r0, r1
+ movhi r0, #0x9
+ addhi sp, sp, #0x8
+ strhib r0, [r4, #0x455]
+ ldmhiia sp!, {r4-r6,lr}
+ bxhi lr
+ ldr r1, _020A0734 ; =0x021C8EC8
+ ldr r1, [r1, #0x0]
+ blx r1
+ str r0, [r4, #0x824]
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r4, #0x455]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, [sp, #0x0]
+ mov r0, #0x0
+ str r1, [r4, #0x828]
+ str r0, [r4, #0x82c]
+ strb r0, [r4, #0x456]
+ b _020A0698
+_020A0684:
+ ldr r0, [r5, #0x44]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+_020A0698:
+ add r0, sp, #0x0
+ mov r1, r5
+ bl FUN_0209C6C0
+ ldr r3, [r4, #0x828]
+ ldr r2, [r4, #0x82c]
+ ldr r1, [sp, #0x0]
+ sub r2, r3, r2
+ cmp r1, r2
+ strcs r2, [sp, #0x0]
+ movcs r6, #0x1
+ ldr r3, [r4, #0x824]
+ ldr r1, [r4, #0x82c]
+ ldr r2, [sp, #0x0]
+ add r1, r3, r1
+ movcc r6, #0x0
+ bl MI_CpuCopy8
+_020A06D8: ; 0x020A06D8
+ ldr r0, [sp, #0x0]
+ mov r1, r5
+ bl FUN_0209C580
+_020A06E4: ; 0x020A06E4
+ cmp r6, #0x0
+ beq _020A0714
+ ldr r1, [r4, #0x824]
+ mov r0, r4
+ bl FUN_020A16E8
+ ldrb r0, [r4, #0x456]
+ add sp, sp, #0x8
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r4, #0x824]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A0714:
+ ldr r1, [r4, #0x82c]
+ ldr r0, [sp, #0x0]
+ add r0, r1, r0
+ str r0, [r4, #0x82c]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A0730: .word 0x00004805
+_020A0734: .word 0x021C8EC8
+
+ arm_func_start FUN_020A0738
+FUN_020A0738: ; 0x020A0738
+ stmdb sp!, {r4,lr}
+ ldr r4, [r1, #0xc]
+ ldr r2, [r4, #0x828]
+ ldr r1, [r4, #0x82c]
+ sub r2, r2, r1
+ cmp r0, r2
+ blo _020A077C
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ beq _020A076C
+ ldr r1, _020A078C ; =0x021C8EF4
+ ldr r1, [r1, #0x0]
+ blx r1
+_020A076C:
+ mov r0, #0x0
+ str r0, [r4, #0x824]
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A077C:
+ add r0, r1, r0
+ str r0, [r4, #0x82c]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A078C: .word 0x021C8EF4
+
+ arm_func_start FUN_020A0790
+FUN_020A0790: ; 0x020A0790
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ ldr r4, [r5, #0xc]
+ mov r6, r0
+ ldr r12, [r4, #0x824]
+ cmp r12, #0x0
+ beq _020A0818
+ ldrb r0, [r4, #0x456]
+ cmp r0, #0x0
+ bne _020A0818
+ ldr r3, [r4, #0x82c]
+ ldr r1, [r4, #0x828]
+ mov r2, r5
+ add r0, r12, r3
+ sub r1, r1, r3
+ bl FUN_020A1974
+_020A07D0: ; 0x020A07D0
+ cmp r0, #0x0
+ beq _020A07FC
+ ldr r1, _020A0870 ; =0x021C8EF4
+ ldr r0, [r4, #0x824]
+ ldr r1, [r1, #0x0]
+ blx r1
+ mov r0, #0x0
+ str r0, [r4, #0x824]
+ str r0, [r6, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A07FC:
+ ldr r1, [r4, #0x824]
+ mov r0, r4
+ bl FUN_020A16E8
+ ldrb r0, [r4, #0x456]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r4, #0x824]
+_020A0818:
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ bne _020A084C
+_020A0824:
+ mov r0, r5
+ bl FUN_020A1528
+ cmp r0, #0x9
+ moveq r0, #0x0
+ streq r0, [r6, #0x0]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, [r4, #0x824]
+ cmp r0, #0x0
+ beq _020A0824
+_020A084C:
+ ldr r1, [r4, #0x828]
+ ldr r0, [r4, #0x82c]
+ sub r0, r1, r0
+ str r0, [r6, #0x0]
+ ldr r1, [r4, #0x824]
+ ldr r0, [r4, #0x82c]
+ add r0, r1, r0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A0870: .word 0x021C8EF4
+
+ arm_func_start FUN_020A0874
+FUN_020A0874: ; 0x020A0874
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r1, [r5, #0x8]
+ ldr r4, [r5, #0xc]
+ cmp r1, #0x4
+ beq _020A08A8
+ bl FUN_0209C990
+_020A0894: ; 0x020A0894
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020A08A8:
+ mov r1, #0x0
+ strb r1, [r4, #0x455]
+ str r1, [r4, #0x1d4]
+ add r0, r4, #0x2ec
+ strb r1, [r4, #0x454]
+ bl FUN_020A41CC
+ add r0, r4, #0x3a4
+ bl FUN_020A3B8C
+ mov r0, r5
+ bl FUN_020A08DC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A08DC
+FUN_020A08DC: ; 0x020A08DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r4, [r5, #0xc]
+ bl FUN_020A0DE4
+_020A08F0:
+ mov r0, r5
+ bl FUN_020A1528
+ cmp r0, #0x9
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r0, #0x4
+ beq _020A0920
+ ldrb r0, [r4, #0x31]
+ cmp r0, #0x0
+ beq _020A08F0
+_020A0920:
+ ldrb r0, [r4, #0x31]
+ cmp r0, #0x0
+ beq _020A095C
+ mov r0, r4
+ bl FUN_020A215C
+ mov r0, r5
+ bl FUN_020A0AF4
+_020A093C: ; 0x020A093C
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r5
+ bl FUN_020A0F94
+ b _020A09B4
+_020A095C:
+ mov r0, r5
+ bl FUN_020A0B2C
+ mov r0, r4
+ bl FUN_020A2364
+ ldrb r0, [r4, #0x30]
+ cmp r0, #0x0
+ beq _020A0988
+ ldrh r2, [r5, #0x18]
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ bl FUN_020A3808
+_020A0988:
+ mov r0, r4
+ bl FUN_020A215C
+ mov r0, r5
+ bl FUN_020A0F94
+ mov r0, r5
+ bl FUN_020A0AF4
+_020A09A0: ; 0x020A09A0
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+_020A09B4:
+ mov r0, #0x8
+ strb r0, [r4, #0x455]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A09CC
+FUN_020A09CC: ; 0x020A09CC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r8, [r9, #0xc]
+ add r5, r8, #0x2ec
+ add r4, r8, #0x3a4
+ mov r7, #0x0
+ mov r6, #0x1
+_020A09EC:
+ mov r0, r9
+ bl FUN_0209CAC4
+ strb r7, [r8, #0x455]
+ str r7, [r8, #0x1d4]
+ mov r0, r5
+ strb r6, [r8, #0x454]
+ bl FUN_020A41CC
+ mov r0, r4
+ bl FUN_020A3B8C
+ mov r0, r9
+ bl FUN_020A0A58
+_020A0A18: ; 0x020A0A18
+ cmp r0, #0x0
+ moveq r0, #0x8
+ addeq sp, sp, #0x4
+ streqb r0, [r8, #0x455]
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, r9
+ bl FUN_0209C884
+ ldrh r0, [r9, #0x1a]
+ strh r0, [r9, #0x18]
+ ldr r0, [r9, #0x20]
+ str r0, [r9, #0x1c]
+ b _020A09EC
+_020A0A4C: ; 0x020A0A4C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_020A0A58
+FUN_020A0A58:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020A1528
+ cmp r0, #0x1
+ movne r0, #0x1
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_020A10F4
+_020A0A7C: ; 0x020A0A7C
+ cmp r0, #0x0
+ beq _020A0AB0
+ ldr r0, [r4, #0xc]
+ bl FUN_020A215C
+ mov r0, r4
+ bl FUN_020A0F94
+ mov r0, r4
+ bl FUN_020A0AF4
+_020A0A9C: ; 0x020A0A9C
+ cmp r0, #0x0
+ beq _020A0AE8
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A0AB0:
+ mov r0, r4
+ bl FUN_020A1528
+ cmp r0, #0x5
+ movne r0, #0x1
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_020A0AF4
+_020A0AD0: ; 0x020A0AD0
+ cmp r0, #0x0
+ movne r0, #0x1
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_020A0F94
+_020A0AE8:
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A0AF4
+FUN_020A0AF4:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020A1528
+ cmp r0, #0x7
+ movne r0, #0x1
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl FUN_020A1528
+ cmp r0, #0x6
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A0B2C
+FUN_020A0B2C: ; 0x020A0B2C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r11, r0
+ ldr r10, [r11, #0xc]
+ mov r0, #0x3
+ strb r0, [r10, #0x0]
+ mov r0, #0x0
+ strb r0, [r10, #0x1]
+ add r0, r10, #0x2
+ mov r1, #0x2e
+ bl FUN_020A13E0
+ ldr r4, [r10, #0x594]
+ ldr r0, _020A0DD4 ; =0x021C8EC8
+ mov r1, r4, lsl #0x1
+ ldr r2, [r0, #0x0]
+ add r1, r1, r1, lsr #0x1f
+ mov r0, r4
+ mov r6, r1, asr #0x1
+ blx r2
+ movs r5, r0
+ moveq r0, #0x9
+ addeq sp, sp, #0xc
+ streqb r0, [r10, #0x455]
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, #0x0
+ strb r0, [r5, #0x0]
+ mov r2, #0x2
+ add r0, r5, #0x2
+ sub r1, r4, #0x33
+ strb r2, [r5, #0x1]
+ bl FUN_020A13E0
+ add r1, r5, r4
+ mov r0, r10
+ sub r3, r4, #0x31
+ mov r7, #0x0
+ sub r1, r1, #0x30
+ mov r2, #0x30
+ strb r7, [r5, r3]
+ bl MI_CpuCopy8
+ ldr r1, _020A0DD4 ; =0x021C8EC8
+ mov r0, r6, lsl #0x3
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r9, r0
+ bne _020A0C08
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ blx r1
+ mov r0, #0x9
+ add sp, sp, #0xc
+ strb r0, [r10, #0x455]
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020A0C08:
+ add r0, r9, r6, lsl #0x1
+ add r8, r0, r6, lsl #0x1
+ mov r1, r5
+ mov r2, r4
+ mov r3, r6
+ str r0, [sp, #0x4]
+ add r7, r8, r6, lsl #0x1
+ bl FUN_020A4B50
+ ldr r1, _020A0DDC ; =0x00000598
+ ldr r2, [r10, #0x5a0]
+ mov r0, r8
+ add r1, r10, r1
+ mov r3, r6
+ bl FUN_020A4B50
+ ldr r1, _020A0DE0 ; =0x00000494
+ mov r0, r7
+ mov r2, r4
+ add r1, r10, r1
+ mov r3, r6
+ bl FUN_020A4B50
+ bl FUN_020A36EC
+ mov r3, r6
+ mov r6, r0
+ ldr r1, [sp, #0x4]
+ mov r2, r8
+ mov r0, r9
+ str r7, [sp, #0x0]
+ bl FUN_020A507C
+ mov r0, r6
+ bl FUN_020A36B4
+ ldr r1, _020A0DD4 ; =0x021C8EC8
+ add r0, r4, #0x49
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r6, r0
+ bne _020A0CCC
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r9
+ ldr r1, [r1, #0x0]
+ blx r1
+ mov r0, #0x9
+ add sp, sp, #0xc
+ strb r0, [r10, #0x455]
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020A0CCC:
+ mov r0, #0x16
+ strb r0, [r6, #0x0]
+ mov r1, #0x3
+ add r0, r4, #0x4
+ strb r1, [r6, #0x1]
+ mov r1, #0x0
+ strb r1, [r6, #0x2]
+ mov r1, r0, asr #0x8
+ strb r1, [r6, #0x3]
+ add r2, r6, #0x9
+ strb r0, [r6, #0x4]
+ mov r0, #0x10
+ strb r0, [r6, #0x5]
+ mov r0, r4, asr #0x10
+ strb r0, [r6, #0x6]
+ mov r0, r4, asr #0x8
+ strb r0, [r6, #0x7]
+ mov r0, r2
+ strb r4, [r6, #0x8]
+ ands r1, r4, #0x1
+ beq _020A0D38
+ add r0, r4, r4, lsr #0x1f
+ mov r0, r0, asr #0x1
+ mov r0, r0, lsl #0x1
+ ldrh r1, [r9, r0]
+ add r0, r2, #0x1
+ strb r1, [r2, #0x0]
+_020A0D38:
+ add r1, r4, r4, lsr #0x1f
+ mov r1, r1, asr #0x1
+ subs r7, r1, #0x1
+ bmi _020A0D70
+_020A0D48:
+ mov r3, r7, lsl #0x1
+ ldrh r1, [r9, r3]
+ add r2, r0, #0x1
+ subs r7, r7, #0x1
+ mov r1, r1, asr #0x8
+ strb r1, [r0, #0x0]
+ ldrh r1, [r9, r3]
+ add r0, r0, #0x2
+ strb r1, [r2, #0x0]
+ bpl _020A0D48
+_020A0D70:
+ mov r2, #0x0
+ mov r0, r6
+ mov r3, r2
+ add r1, r4, #0x9
+ str r11, [sp, #0x0]
+ bl FUN_0209C1D4
+ mov r0, r10
+ add r1, r6, #0x5
+ add r2, r4, #0x4
+ bl FUN_020A1944
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r9
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020A0DD8 ; =0x021C8EF4
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A0DD4: .word 0x021C8EC8
+_020A0DD8: .word 0x021C8EF4
+_020A0DDC: .word 0x00000598
+_020A0DE0: .word 0x00000494
+
+ arm_func_start FUN_020A0DE4
+FUN_020A0DE4: ; 0x020A0DE4
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020A0F88 ; =0x021C8EC8
+ mov r8, r0
+ ldr r1, [r1, #0x0]
+ mov r0, #0x98
+ ldr r7, [r8, #0xc]
+ blx r1
+ movs r6, r0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r7, #0x455]
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, #0x3
+ strb r0, [r6, #0x9]
+ add r5, r6, #0x9
+ mov r0, #0x0
+ strb r0, [r5, #0x1]
+ bl FUN_020A375C
+ mov r1, r0, lsr #0x18
+ strb r1, [r7, #0x34]
+ mov r1, r0, lsr #0x10
+ strb r1, [r7, #0x35]
+ mov r1, r0, lsr #0x8
+ strb r1, [r7, #0x36]
+ strb r0, [r7, #0x37]
+ add r0, r7, #0x38
+ mov r1, #0x1c
+ bl FUN_020A13E0
+ add r0, r7, #0x34
+ add r1, r5, #0x2
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ ldrh r2, [r8, #0x18]
+ ldr r1, [r8, #0x1c]
+ mov r0, r7
+ bl FUN_020A3908
+ ldrb r0, [r7, #0x30]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streqb r0, [r5, #0x22]
+ addeq r5, r5, #0x23
+ beq _020A0EAC
+ mov r2, #0x20
+ add r0, r7, #0x74
+ add r1, r5, #0x23
+ strb r2, [r5, #0x22]
+ bl MI_CpuCopy8
+ add r5, r5, #0x43
+_020A0EAC:
+ mov r4, #0x0
+ strb r4, [r5, #0x0]
+ mov r0, #0x4
+ strb r0, [r5, #0x1]
+ ldr r2, _020A0F8C ; =0x0210623C
+ add r5, r5, #0x2
+_020A0EC4:
+ mov r3, r4, lsl #0x1
+ ldrh r0, [r2, r3]
+ add r4, r4, #0x1
+ add r1, r5, #0x1
+ mov r0, r0, asr #0x8
+ strb r0, [r5, #0x0]
+ ldrh r0, [r2, r3]
+ cmp r4, #0x2
+ add r5, r5, #0x2
+ strb r0, [r1, #0x0]
+ blo _020A0EC4
+ mov r3, #0x1
+ mov r2, #0x0
+ strb r3, [r5, #0x0]
+ add r0, r5, #0x2
+ sub r0, r0, r6
+ sub r4, r0, #0x5
+ strb r2, [r5, #0x1]
+ sub r1, r4, #0x4
+ mov r0, #0x16
+ strb r0, [r6, #0x0]
+ mov r0, #0x3
+ strb r0, [r6, #0x1]
+ strb r2, [r6, #0x2]
+ mov r0, r4, asr #0x8
+ strb r0, [r6, #0x3]
+ strb r4, [r6, #0x4]
+ strb r3, [r6, #0x5]
+ mov r0, r1, asr #0x10
+ strb r0, [r6, #0x6]
+ mov r0, r1, asr #0x8
+ strb r0, [r6, #0x7]
+ strb r1, [r6, #0x8]
+ mov r0, r6
+ mov r3, r2
+ add r1, r4, #0x5
+ str r8, [sp, #0x0]
+ bl FUN_0209C1D4
+ mov r0, r7
+ mov r2, r4
+ add r1, r6, #0x5
+ bl FUN_020A1944
+ ldr r1, _020A0F90 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A0F88: .word 0x021C8EC8
+_020A0F8C: .word 0x0210623C
+_020A0F90: .word 0x021C8EF4
+
+ arm_func_start FUN_020A0F94
+FUN_020A0F94:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r1, _020A10EC ; =0x021C8EC8
+ mov r6, r0
+ ldr r1, [r1, #0x0]
+ mov r0, #0x83
+ ldr r5, [r6, #0xc]
+ blx r1
+ movs r4, r0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r5, #0x455]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, #0x14
+ strb r0, [r4, #0x0]
+ mov r0, #0x3
+ strb r0, [r4, #0x1]
+ mov r1, #0x0
+ strb r1, [r4, #0x2]
+ strb r1, [r4, #0x3]
+ mov r3, #0x1
+ strb r3, [r4, #0x4]
+ add r0, r5, #0x1cc
+ mov r2, #0x8
+ strb r3, [r4, #0x5]
+ bl MI_CpuFill8
+ mov r0, #0x16
+ strb r0, [r4, #0x6]
+ mov r0, #0x3
+ strb r0, [r4, #0x7]
+ mov r1, #0x0
+ strb r1, [r4, #0x8]
+ strb r1, [r4, #0x9]
+ mov r0, #0x28
+ strb r0, [r4, #0xa]
+ mov r0, #0x14
+ strb r0, [r4, #0xb]
+ strb r1, [r4, #0xc]
+ strb r1, [r4, #0xd]
+ mov r3, #0x24
+ add r0, r5, #0x3a4
+ add r1, r5, #0x3fc
+ mov r2, #0x58
+ strb r3, [r4, #0xe]
+ bl MI_CpuCopy8
+ mov r0, r5
+ add r1, r4, #0xf
+ mov r2, #0x0
+ bl FUN_020A2034
+ add r0, r5, #0x3fc
+ add r1, r5, #0x3a4
+ mov r2, #0x58
+ bl MI_CpuCopy8
+ add r0, r5, #0x2ec
+ add r1, r5, #0x348
+ mov r2, #0x5c
+ bl MI_CpuCopy8
+ mov r0, r5
+ add r1, r4, #0x1f
+ mov r2, #0x0
+ bl FUN_020A1F4C
+ add r0, r5, #0x348
+ add r1, r5, #0x2ec
+ mov r2, #0x5c
+ bl MI_CpuCopy8
+ mov r0, r5
+ add r1, r4, #0xb
+ mov r2, #0x28
+ bl FUN_020A1944
+ mov r0, r5
+ add r1, r4, #0x6
+ bl FUN_020A19F4
+ mov r2, #0x0
+ add r1, r0, #0x6
+ mov r0, r4
+ mov r3, r2
+ str r6, [sp, #0x0]
+ bl FUN_0209C1D4
+ ldr r1, _020A10F0 ; =0x021C8EF4
+ mov r0, r4
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A10EC: .word 0x021C8EC8
+_020A10F0: .word 0x021C8EF4
+
+ arm_func_start FUN_020A10F4
+FUN_020A10F4:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r7, [r9, #0xc]
+ ldr r4, [r7, #0x820]
+ cmp r4, #0x0
+ ldrne r8, [r4, #0x0]
+ moveq r8, #0x0
+ bl FUN_020A375C
+ mov r1, r0, lsr #0x18
+ strb r1, [r7, #0x54]
+ mov r1, r0, lsr #0x10
+ strb r1, [r7, #0x55]
+ mov r1, r0, lsr #0x8
+ strb r1, [r7, #0x56]
+ strb r0, [r7, #0x57]
+ add r0, r7, #0x58
+ mov r1, #0x1c
+ bl FUN_020A13E0
+ ldr r1, _020A1360 ; =0x021C8EC8
+ add r0, r8, #0x9d
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r6, r0
+ moveq r0, #0x9
+ streqb r0, [r7, #0x455]
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, #0x2
+ add r5, r6, #0x5
+ strb r0, [r6, #0x5]
+ mov r3, #0x0
+ strb r3, [r5, #0x1]
+ strb r3, [r5, #0x2]
+ mov r0, #0x46
+ strb r0, [r5, #0x3]
+ mov r0, #0x3
+ strb r0, [r5, #0x4]
+ add r0, r7, #0x54
+ add r1, r5, #0x6
+ mov r2, #0x20
+ strb r3, [r5, #0x5]
+ bl MI_CpuCopy8
+ mov r2, #0x20
+ strb r2, [r5, #0x26]
+ ldrb r0, [r7, #0x30]
+ cmp r0, #0x0
+ beq _020A11D8
+ add r0, r7, #0x74
+ add r1, r5, #0x27
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ strb r0, [r7, #0x31]
+ add r5, r5, #0x47
+ b _020A1238
+_020A11D8:
+ add r0, r5, #0x27
+ mov r1, #0x1c
+ bl FUN_020A13E0
+ ldr r0, _020A1364 ; =0x021CA6E4
+ add r2, r5, #0x46
+ ldr r3, [r0, #0x0]
+ add r1, r7, #0x74
+ mov r0, r3, lsr #0x18
+ strb r0, [r5, #0x43]
+ mov r0, r3, lsr #0x10
+ strb r0, [r5, #0x44]
+ mov r0, r3, lsr #0x8
+ strb r0, [r5, #0x45]
+ add r5, r5, #0x47
+ sub r0, r5, #0x20
+ strb r3, [r2, #0x0]
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ ldr r0, _020A1364 ; =0x021CA6E4
+ mov r1, #0x0
+ ldr r2, [r0, #0x0]
+ add r2, r2, #0x1
+ str r2, [r0, #0x0]
+ strb r1, [r7, #0x31]
+_020A1238:
+ ldrh r2, [r7, #0x32]
+ mov r0, #0x0
+ mov r2, r2, asr #0x8
+ strb r2, [r5, #0x0]
+ ldrh r2, [r7, #0x32]
+ strb r2, [r5, #0x1]
+ strb r0, [r5, #0x2]
+ ldrb r0, [r7, #0x31]
+ add r5, r5, #0x3
+ cmp r0, #0x0
+ bne _020A12EC
+ cmp r8, #0x0
+ beq _020A12D0
+ mov r0, #0xb
+ add r2, r8, #0x6
+ strb r0, [r5, #0x0]
+ mov r0, r2, asr #0x10
+ strb r0, [r5, #0x1]
+ mov r0, r2, asr #0x8
+ strb r0, [r5, #0x2]
+ add r1, r8, #0x3
+ strb r2, [r5, #0x3]
+ mov r0, r1, asr #0x10
+ strb r0, [r5, #0x4]
+ mov r0, r1, asr #0x8
+ strb r0, [r5, #0x5]
+ strb r1, [r5, #0x6]
+ mov r0, r8, asr #0x10
+ strb r0, [r5, #0x7]
+ mov r0, r8, asr #0x8
+ strb r0, [r5, #0x8]
+ strb r8, [r5, #0x9]
+ add r5, r5, #0xa
+ ldr r0, [r4, #0x4]
+ mov r1, r5
+ mov r2, r8
+ bl MI_CpuCopy8
+ add r5, r5, r8
+_020A12D0:
+ mov r0, #0xe
+ strb r0, [r5, #0x0]
+ mov r1, #0x0
+ strb r1, [r5, #0x1]
+ strb r1, [r5, #0x2]
+ strb r1, [r5, #0x3]
+ add r5, r5, #0x4
+_020A12EC:
+ mov r0, #0x16
+ sub r1, r5, r6
+ sub r4, r1, #0x5
+ strb r0, [r6, #0x0]
+ mov r0, #0x3
+ strb r0, [r6, #0x1]
+ mov r0, #0x0
+ strb r0, [r6, #0x2]
+ mov r0, r4, asr #0x8
+ strb r0, [r6, #0x3]
+ mov r0, r7
+ mov r2, r4
+ add r1, r6, #0x5
+ strb r4, [r6, #0x4]
+ bl FUN_020A1944
+ mov r2, #0x0
+ mov r0, r6
+ mov r3, r2
+ add r1, r4, #0x5
+ str r9, [sp, #0x0]
+ bl FUN_0209C1D4
+ ldr r1, _020A1368 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldrb r0, [r7, #0x31]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020A1360: .word 0x021C8EC8
+_020A1364: .word 0x021CA6E4
+_020A1368: .word 0x021C8EF4
+
+ arm_func_start FUN_020A136C
+FUN_020A136C:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x60
+ mov r6, r0
+ add r0, sp, #0x0
+ mov r5, r1
+ bl FUN_020A41CC
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r1, _020A13D8 ; =0x021CA6E8
+ add r0, sp, #0x0
+ mov r2, #0x14
+ bl FUN_020A410C
+ mov r1, r6
+ mov r2, r5
+ add r0, sp, #0x0
+ bl FUN_020A410C
+ ldr r1, _020A13D8 ; =0x021CA6E8
+ add r0, sp, #0x0
+ bl FUN_020A4098
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldr r0, _020A13DC ; =0x021CA6E0
+ mov r1, #0x1
+ strb r1, [r0, #0x0]
+ add sp, sp, #0x60
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A13D8: .word 0x021CA6E8
+_020A13DC: .word 0x021CA6E0
+
+ arm_func_start FUN_020A13E0
+FUN_020A13E0: ; 0x020A13E0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x7c
+ ldr r2, _020A1518 ; =0x021CA6E0
+ mov r10, r0
+ ldrb r0, [r2, #0x0]
+ mov r9, r1
+ cmp r0, #0x0
+ bne _020A1448
+ ldr r2, _020A151C ; =0x021C8F24
+ add r0, sp, #0x4
+ ldr r4, [r2, #0x8]
+ ldr r3, [r2, #0x0]
+ ldr r1, [r2, #0x4]
+ umull r6, r5, r4, r3
+ mla r5, r4, r1, r5
+ ldr r1, [r2, #0xc]
+ ldr r4, [r2, #0x10]
+ mla r5, r1, r3, r5
+ adds r4, r4, r6
+ ldr r3, [r2, #0x14]
+ mov r1, #0x4
+ adc r3, r3, r5
+ str r4, [r2, #0x0]
+ str r3, [r2, #0x4]
+ str r3, [sp, #0x4]
+ bl FUN_020A136C
+_020A1448:
+ cmp r9, #0x0
+ mov r7, #0x0
+ addle sp, sp, #0x7c
+ mov r1, #0x14
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ add r6, sp, #0x1c
+ mov r11, r1
+ str r7, [sp, #0x0]
+ mov r5, #0x1
+ mov r4, #0x13
+_020A1474:
+ cmp r1, #0x14
+ bne _020A14EC
+ mov r0, r6
+ bl FUN_020A41CC
+ bl OS_DisableInterrupts
+ mov r8, r0
+ ldr r1, _020A1520 ; =0x021CA6E8
+ mov r0, r6
+ mov r2, r11
+ bl FUN_020A410C
+ mov r0, r6
+ add r1, sp, #0x8
+ bl FUN_020A405C
+ ldr r2, _020A1524 ; =0x021CA6FB
+ mov r12, r5
+ mov lr, r4
+ add r3, sp, #0x1b
+_020A14B8:
+ ldrb r1, [r2, #0x0]
+ ldrb r0, [r3], #-0x1
+ subs lr, lr, #0x1
+ add r0, r1, r0
+ add r0, r12, r0
+ strb r0, [r2, #0x0]
+ mov r12, r0, lsr #0x8
+ sub r2, r2, #0x1
+ bpl _020A14B8
+ str r0, [sp, #0x4]
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldr r1, [sp, #0x0]
+_020A14EC:
+ add r0, sp, #0x8
+ ldrb r0, [r0, r1]
+ add r1, r1, #0x1
+ cmp r0, #0x0
+ strneb r0, [r10, r7]
+ addne r7, r7, #0x1
+ cmp r7, r9
+ blt _020A1474
+ add sp, sp, #0x7c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A1518: .word 0x021CA6E0
+_020A151C: .word 0x021C8F24
+_020A1520: .word 0x021CA6E8
+_020A1524: .word 0x021CA6FB
+
+ arm_func_start FUN_020A1528
+FUN_020A1528: ; 0x020A1528
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r0
+ ldr r4, [r5, #0xc]
+ add r6, sp, #0x0
+_020A153C:
+ mov r0, r6
+ mov r1, r5
+ bl FUN_0209C6C0
+ ldr r1, [sp, #0x0]
+ cmp r1, #0x0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r4, #0x455]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ cmp r1, #0x5
+ blo _020A153C
+ ldrb r1, [r0, #0x0]
+ cmp r1, #0x80
+ bne _020A1634
+ ldrb r1, [r4, #0x454]
+ cmp r1, #0x0
+ beq _020A1628
+ ldrb r1, [r4, #0x455]
+ cmp r1, #0x0
+ bne _020A1628
+ ldrb r2, [r0, #0x1]
+ mov r1, r5
+ mov r0, #0x2
+ str r2, [sp, #0x0]
+ bl FUN_0209C580
+ ldr r1, _020A16DC ; =0x021C8EC8
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r6, r0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r4, #0x455]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, [sp, #0x0]
+ mov r2, r5
+ bl FUN_020A1974
+_020A15D8: ; 0x020A15D8
+ cmp r0, #0x0
+ bne _020A15FC
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x1
+ bne _020A15FC
+ mov r0, r4
+ add r1, r6, #0x1
+ bl FUN_020A2774
+ b _020A1604
+_020A15FC:
+ mov r0, #0x9
+ strb r0, [r4, #0x455]
+_020A1604:
+ ldr r2, [sp, #0x0]
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020A1944
+ ldr r1, _020A16E0 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ b _020A16CC
+_020A1628:
+ mov r0, #0x9
+ strb r0, [r4, #0x455]
+ b _020A16CC
+_020A1634:
+ ldrb r2, [r0, #0x3]
+ ldrb r0, [r0, #0x4]
+ ldr r1, _020A16E4 ; =0x00004805
+ add r0, r0, r2, lsl #0x8
+ add r0, r0, #0x5
+ str r0, [sp, #0x0]
+ cmp r0, r1
+ movhi r0, #0x9
+ addhi sp, sp, #0x8
+ strhib r0, [r4, #0x455]
+ ldmhiia sp!, {r4-r6,lr}
+ bxhi lr
+ ldr r1, _020A16DC ; =0x021C8EC8
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r6, r0
+ moveq r0, #0x9
+ addeq sp, sp, #0x8
+ streqb r0, [r4, #0x455]
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, [sp, #0x0]
+ mov r2, r5
+ bl FUN_020A1974
+_020A1694: ; 0x020A1694
+ cmp r0, #0x0
+ beq _020A16C0
+ ldr r1, _020A16E0 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ mov r0, #0x9
+ add sp, sp, #0x8
+ strb r0, [r4, #0x455]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A16C0:
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020A16E8
+_020A16CC:
+ ldrb r0, [r4, #0x455]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A16DC: .word 0x021C8EC8
+_020A16E0: .word 0x021C8EF4
+_020A16E4: .word 0x00004805
+
+ arm_func_start FUN_020A16E8
+FUN_020A16E8: ; 0x020A16E8
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldrb r0, [r8, #0x455]
+ mov r7, r1
+ cmp r0, #0x9
+ bne _020A1718
+ ldr r1, _020A1940 ; =0x021C8EF4
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A1718:
+ ldrb r2, [r7, #0x3]
+ ldrb r1, [r7, #0x4]
+ add r0, r0, #0xf9
+ and r0, r0, #0xff
+ add r1, r1, r2, lsl #0x8
+ cmp r0, #0x1
+ add r5, r1, #0x5
+ ldrb r4, [r7, #0x0]
+ bhi _020A1744
+ cmp r4, #0x15
+ bne _020A1754
+_020A1744:
+ cmp r4, #0x15
+ bne _020A1764
+ cmp r5, #0x7
+ bls _020A1764
+_020A1754:
+ mov r0, r8
+ mov r1, r7
+ bl FUN_020A1C08
+ mov r5, r0
+_020A1764:
+ sub r0, r4, #0x14
+ cmp r0, #0x3
+ add r6, r7, #0x5
+ sub r5, r5, #0x5
+ addls pc, pc, r0, lsl #0x2
+ b _020A1920
+_020A177C: ; 0x020A177C
+ b _020A178C
+_020A1780: ; 0x020A1780
+ b _020A17BC
+_020A1784: ; 0x020A1784
+ b _020A17D0
+_020A1788: ; 0x020A1788
+ b _020A18FC
+_020A178C:
+ ldr r0, [r8, #0x1d4]
+ cmp r0, #0x0
+ moveq r0, #0x9
+ streqb r0, [r8, #0x455]
+ beq _020A1928
+ add r0, r8, #0x2e4
+ mov r1, #0x0
+ mov r2, #0x8
+ bl MI_CpuFill8
+ mov r0, #0x7
+ strb r0, [r8, #0x455]
+ b _020A1928
+_020A17BC:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x2
+ moveq r0, #0x9
+ streqb r0, [r8, #0x455]
+ b _020A1928
+_020A17D0:
+ ldrb r1, [r6, #0x1]
+ ldrb r0, [r6, #0x2]
+ ldrb r3, [r6, #0x0]
+ ldrb r2, [r6, #0x3]
+ mov r1, r1, lsl #0x10
+ add r0, r1, r0, lsl #0x8
+ cmp r3, #0xb
+ add r4, r2, r0
+ add r6, r6, #0x4
+ bgt _020A1824
+ cmp r3, #0xb
+ bge _020A1898
+ cmp r3, #0x2
+ bgt _020A18C4
+ cmp r3, #0x1
+ blt _020A18C4
+ cmp r3, #0x1
+ beq _020A1850
+ cmp r3, #0x2
+ beq _020A1888
+ b _020A18C4
+_020A1824:
+ cmp r3, #0x14
+ bgt _020A18C4
+ cmp r3, #0xe
+ blt _020A18C4
+ cmp r3, #0xe
+ beq _020A18A8
+ cmp r3, #0x10
+ beq _020A1878
+ cmp r3, #0x14
+ beq _020A18B4
+ b _020A18C4
+_020A1850:
+ ldrb r0, [r8, #0x454]
+ cmp r0, #0x0
+ beq _020A18CC
+ ldrb r0, [r8, #0x455]
+ cmp r0, #0x0
+ bne _020A18CC
+ mov r0, r8
+ mov r1, r6
+ bl FUN_020A26D0
+ b _020A18CC
+_020A1878:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_020A211C
+ b _020A18CC
+_020A1888:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_020A2914
+ b _020A18CC
+_020A1898:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_020A29DC
+ b _020A18CC
+_020A18A8:
+ mov r0, #0x4
+ strb r0, [r8, #0x455]
+ b _020A18CC
+_020A18B4:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_020A1E84
+ b _020A18CC
+_020A18C4:
+ mov r0, #0x9
+ strb r0, [r8, #0x455]
+_020A18CC:
+ mov r0, r8
+ sub r1, r6, #0x4
+ add r2, r4, #0x4
+ bl FUN_020A1944
+ add r0, r4, #0x4
+ add r6, r6, r4
+ subs r5, r5, r0
+ beq _020A1928
+ ldrb r0, [r8, #0x455]
+ cmp r0, #0x9
+ bne _020A17D0
+ b _020A1928
+_020A18FC:
+ str r7, [r8, #0x824]
+ mov r0, #0x5
+ str r0, [r8, #0x82c]
+ add r0, r5, #0x5
+ str r0, [r8, #0x828]
+ mov r0, #0x1
+ strb r0, [r8, #0x456]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A1920:
+ mov r0, #0x9
+ strb r0, [r8, #0x455]
+_020A1928:
+ ldr r1, _020A1940 ; =0x021C8EF4
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A1940: .word 0x021C8EF4
+
+ arm_func_start FUN_020A1944
+FUN_020A1944: ; 0x020A1944
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ add r0, r6, #0x2ec
+ bl FUN_020A410C
+ mov r1, r5
+ mov r2, r4
+ add r0, r6, #0x3a4
+ bl FUN_020A3ACC
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A1974
+FUN_020A1974:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ add r4, sp, #0x0
+_020A198C:
+ mov r0, r4
+ mov r1, r5
+ bl FUN_0209C6C0
+ ldr r1, [sp, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r1, r6
+ strhi r6, [sp, #0x0]
+ ldr r2, [sp, #0x0]
+ mov r1, r7
+ bl MI_CpuCopy8
+_020A19C4: ; 0x020A19C4
+ ldr r0, [sp, #0x0]
+ mov r1, r5
+ bl FUN_0209C580
+_020A19D0: ; 0x020A19D0
+ ldr r0, [sp, #0x0]
+ sub r6, r6, r0
+ cmp r6, #0x0
+ add r7, r7, r0
+ bgt _020A198C
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A19F4
+FUN_020A19F4: ; 0x020A19F4
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x30
+ mov r5, r1
+ mov r6, r0
+ ldrh r0, [r6, #0x32]
+ ldrb r3, [r5, #0x3]
+ ldrb r2, [r5, #0x4]
+ add r1, r5, #0x5
+ cmp r0, #0x4
+ add r4, r2, r3, lsl #0x8
+ add r8, r1, r4
+ beq _020A1A30
+ cmp r0, #0x5
+ beq _020A1B04
+ b _020A1BD4
+_020A1A30:
+ add r7, r6, #0x3fc
+ mov r0, r7
+ bl FUN_020A3B8C
+ ldr r1, [r6, #0xbc]
+ mov r0, r7
+ mov r2, #0x10
+ bl FUN_020A3ACC
+_020A1A4C: ; 0x020A1A4C
+ add r0, sp, #0x0
+ mov r1, #0x36
+ mov r2, #0x30
+ bl MI_CpuFill8
+ mov r0, r7
+ add r1, sp, #0x0
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r7
+ add r1, r6, #0x1cc
+ mov r2, #0x8
+ bl FUN_020A3ACC
+ mov r0, r7
+ mov r1, r5
+ mov r2, #0x1
+ bl FUN_020A3ACC
+ mov r0, r7
+ add r1, r5, #0x3
+ add r2, r4, #0x2
+ bl FUN_020A3ACC
+ mov r0, r7
+ mov r1, r8
+ bl FUN_020A3A58
+ mov r0, r7
+ bl FUN_020A3B8C
+ ldr r1, [r6, #0xbc]
+ mov r0, r7
+ mov r2, #0x10
+ bl FUN_020A3ACC
+_020A1AC0: ; 0x020A1AC0
+ add r0, sp, #0x0
+ mov r1, #0x5c
+ mov r2, #0x30
+ bl MI_CpuFill8
+ mov r0, r7
+ add r1, sp, #0x0
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r7
+ mov r1, r8
+ mov r2, #0x10
+ bl FUN_020A3ACC
+ mov r0, r7
+ mov r1, r8
+ bl FUN_020A3A58
+ add r4, r4, #0x10
+ b _020A1BD4
+_020A1B04:
+ add r7, r6, #0x348
+ mov r0, r7
+ bl FUN_020A41CC
+ ldr r1, [r6, #0xbc]
+ mov r0, r7
+ mov r2, #0x14
+ bl FUN_020A410C
+_020A1B20: ; 0x020A1B20
+ add r0, sp, #0x0
+ mov r1, #0x36
+ mov r2, #0x28
+ bl MI_CpuFill8
+ mov r0, r7
+ add r1, sp, #0x0
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r7
+ add r1, r6, #0x1cc
+ mov r2, #0x8
+ bl FUN_020A410C
+ mov r0, r7
+ mov r1, r5
+ mov r2, #0x1
+ bl FUN_020A410C
+ mov r0, r7
+ add r1, r5, #0x3
+ add r2, r4, #0x2
+ bl FUN_020A410C
+ mov r0, r7
+ mov r1, r8
+ bl FUN_020A4098
+ mov r0, r7
+ bl FUN_020A41CC
+ ldr r1, [r6, #0xbc]
+ mov r0, r7
+ mov r2, #0x14
+ bl FUN_020A410C
+_020A1B94: ; 0x020A1B94
+ add r0, sp, #0x0
+ mov r1, #0x5c
+ mov r2, #0x28
+ bl MI_CpuFill8
+ mov r0, r7
+ add r1, sp, #0x0
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r7
+ mov r1, r8
+ mov r2, #0x14
+ bl FUN_020A410C
+ mov r0, r7
+ mov r1, r8
+ bl FUN_020A4098
+ add r4, r4, #0x14
+_020A1BD4:
+ mov r0, r4, asr #0x8
+ strb r0, [r5, #0x3]
+ mov r2, r4
+ add r0, r6, #0xc8
+ add r1, r5, #0x5
+ strb r4, [r5, #0x4]
+ bl FUN_020A49CC
+ add r0, r6, #0x1d4
+ bl FUN_020A1E60
+ add r0, r4, #0x5
+ add sp, sp, #0x30
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020A1C08
+FUN_020A1C08: ; 0x020A1C08
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x44
+ mov r6, r1
+ ldrb r3, [r6, #0x3]
+ ldrb r2, [r6, #0x4]
+ mov r7, r0
+ add r1, r6, #0x5
+ add r2, r2, r3, lsl #0x8
+ bl FUN_020A1E44
+ ldrh r1, [r7, #0x32]
+ mov r5, r0
+ cmp r1, #0x4
+ beq _020A1C48
+ cmp r1, #0x5
+ beq _020A1D2C
+ b _020A1E0C
+_020A1C48:
+ sub r5, r5, #0x10
+ mov r0, r5, asr #0x8
+ strb r0, [r6, #0x3]
+ add r4, r7, #0x3fc
+ mov r0, r4
+ strb r5, [r6, #0x4]
+ bl FUN_020A3B8C
+ ldr r1, [r7, #0x1d4]
+ mov r0, r4
+ mov r2, #0x10
+ bl FUN_020A3ACC
+ add r0, sp, #0x14
+ mov r1, #0x36
+ mov r2, #0x30
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x14
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, r7, #0x2e4
+ mov r2, #0x8
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x1
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, r6, #0x3
+ add r2, r5, #0x2
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, sp, #0x0
+ bl FUN_020A3A58
+ mov r0, r4
+ bl FUN_020A3B8C
+ ldr r1, [r7, #0x1d4]
+ mov r0, r4
+ mov r2, #0x10
+ bl FUN_020A3ACC
+ add r0, sp, #0x14
+ mov r1, #0x5c
+ mov r2, #0x30
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x14
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, sp, #0x0
+ mov r2, #0x10
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, sp, #0x0
+ bl FUN_020A3A58
+ mov r4, #0x10
+ b _020A1E0C
+_020A1D2C:
+ sub r5, r5, #0x14
+ mov r0, r5, asr #0x8
+ strb r0, [r6, #0x3]
+ add r4, r7, #0x348
+ mov r0, r4
+ strb r5, [r6, #0x4]
+ bl FUN_020A41CC
+ ldr r1, [r7, #0x1d4]
+ mov r0, r4
+ mov r2, #0x14
+ bl FUN_020A410C
+ add r0, sp, #0x14
+ mov r1, #0x36
+ mov r2, #0x28
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x14
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, r7, #0x2e4
+ mov r2, #0x8
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x1
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, r6, #0x3
+ add r2, r5, #0x2
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, sp, #0x0
+ bl FUN_020A4098
+ mov r0, r4
+ bl FUN_020A41CC
+ ldr r1, [r7, #0x1d4]
+ mov r0, r4
+ mov r2, #0x14
+ bl FUN_020A410C
+ add r0, sp, #0x14
+ mov r1, #0x5c
+ mov r2, #0x28
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x14
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, sp, #0x0
+ mov r2, #0x14
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, sp, #0x0
+ bl FUN_020A4098
+ mov r4, #0x14
+_020A1E0C:
+ add r0, r6, #0x5
+ add r1, sp, #0x0
+ mov r2, r4
+ add r0, r0, r5
+ bl memcmp
+_020A1E20: ; 0x020A1E20
+ cmp r0, #0x0
+ movne r0, #0x9
+ strneb r0, [r7, #0x455]
+ add r0, r7, #0x2ec
+ bl FUN_020A1E60
+ add r0, r5, #0x5
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A1E44
+FUN_020A1E44: ; 0x020A1E44
+ stmdb sp!, {r4,lr}
+ add r0, r0, #0x1e0
+ mov r4, r2
+ bl FUN_020A49CC
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A1E60
+FUN_020A1E60: ; 0x020A1E60
+ mov r2, #0x8
+_020A1E64:
+ ldrb r1, [r0, #-0x1]!
+ add r1, r1, #0x1
+ ands r1, r1, #0xff
+ strb r1, [r0, #0x0]
+ bxne lr
+ subs r2, r2, #0x1
+ bne _020A1E64
+ bx lr
+
+ arm_func_start FUN_020A1E84
+FUN_020A1E84: ; 0x020A1E84
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x14
+ mov r5, r0
+ mov r4, r1
+ add r0, r5, #0x3a4
+ add r1, r5, #0x3fc
+ mov r2, #0x58
+ bl MI_CpuCopy8
+ add r1, sp, #0x0
+ mov r0, r5
+ mov r2, #0x1
+ bl FUN_020A2034
+ add r0, r5, #0x3fc
+ add r1, r5, #0x3a4
+ mov r2, #0x58
+ bl MI_CpuCopy8
+ add r1, sp, #0x0
+ mov r0, r4
+ mov r2, #0x10
+ bl memcmp
+_020A1ED4: ; 0x020A1ED4
+ cmp r0, #0x0
+ movne r0, #0x9
+ addne sp, sp, #0x14
+ strneb r0, [r5, #0x455]
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ add r0, r5, #0x2ec
+ add r1, r5, #0x348
+ mov r2, #0x5c
+ bl MI_CpuCopy8
+ add r1, sp, #0x0
+ mov r0, r5
+ mov r2, #0x1
+ bl FUN_020A1F4C
+ add r0, r5, #0x348
+ add r1, r5, #0x2ec
+ mov r2, #0x5c
+ bl MI_CpuCopy8
+ add r1, sp, #0x0
+ add r0, r4, #0x10
+ mov r2, #0x14
+ bl memcmp
+_020A1F2C: ; 0x020A1F2C
+ cmp r0, #0x0
+ movne r0, #0x9
+ strneb r0, [r5, #0x455]
+ moveq r0, #0x6
+ streqb r0, [r5, #0x455]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A1F4C
+FUN_020A1F4C: ; 0x020A1F4C
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x28
+ mov r6, r0
+ ldrb r0, [r6, #0x454]
+ mov r5, r1
+ add r4, r6, #0x2ec
+ eors r0, r0, r2
+ beq _020A1F80
+ ldr r1, _020A202C ; =0x02106290
+ mov r0, r4
+ mov r2, #0x4
+ bl FUN_020A410C
+ b _020A1F90
+_020A1F80:
+ ldr r1, _020A2030 ; =0x02106298
+ mov r0, r4
+ mov r2, #0x4
+ bl FUN_020A410C
+_020A1F90:
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x30
+ bl FUN_020A410C
+_020A1FA0: ; 0x020A1FA0
+ add r0, sp, #0x0
+ mov r1, #0x36
+ mov r2, #0x28
+ bl MI_CpuFill8
+ add r1, sp, #0x0
+ mov r0, r4
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020A4098
+ mov r0, r4
+ bl FUN_020A41CC
+ mov r1, r6
+ mov r0, r4
+ mov r2, #0x30
+ bl FUN_020A410C
+_020A1FE4: ; 0x020A1FE4
+ add r0, sp, #0x0
+ mov r1, #0x5c
+ mov r2, #0x28
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x0
+ mov r2, #0x28
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x14
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020A4098
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A202C: .word 0x02106290
+_020A2030: .word 0x02106298
+
+ arm_func_start FUN_020A2034
+FUN_020A2034: ; 0x020A2034
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x30
+ mov r6, r0
+ ldrb r0, [r6, #0x454]
+ mov r5, r1
+ add r4, r6, #0x3a4
+ eors r0, r0, r2
+ beq _020A2068
+ ldr r1, _020A2114 ; =0x02106290
+ mov r0, r4
+ mov r2, #0x4
+ bl FUN_020A3ACC
+ b _020A2078
+_020A2068:
+ ldr r1, _020A2118 ; =0x02106298
+ mov r0, r4
+ mov r2, #0x4
+ bl FUN_020A3ACC
+_020A2078:
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x30
+ bl FUN_020A3ACC
+_020A2088: ; 0x020A2088
+ add r0, sp, #0x0
+ mov r1, #0x36
+ mov r2, #0x30
+ bl MI_CpuFill8
+ add r1, sp, #0x0
+ mov r0, r4
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020A3A58
+ mov r0, r4
+ bl FUN_020A3B8C
+ mov r1, r6
+ mov r0, r4
+ mov r2, #0x30
+ bl FUN_020A3ACC
+_020A20CC: ; 0x020A20CC
+ add r0, sp, #0x0
+ mov r1, #0x5c
+ mov r2, #0x30
+ bl MI_CpuFill8
+ mov r0, r4
+ add r1, sp, #0x0
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x10
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020A3A58
+ add sp, sp, #0x30
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A2114: .word 0x02106290
+_020A2118: .word 0x02106298
+
+ arm_func_start FUN_020A211C
+FUN_020A211C: ; 0x020A211C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r2, [r4, #0x81c]
+ bl FUN_020A2470
+ mov r0, r4
+ bl FUN_020A2364
+ mov r1, #0x0
+ mov r0, r4
+ mov r2, r1
+ bl FUN_020A3808
+ mov r0, r4
+ bl FUN_020A215C
+ mov r0, #0x5
+ strb r0, [r4, #0x455]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A215C
+FUN_020A215C: ; 0x020A215C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r10, r0
+ ldrh r0, [r10, #0x32]
+ cmp r0, #0x4
+ beq _020A2190
+ cmp r0, #0x5
+ moveq r0, #0x14
+ streq r0, [sp, #0x0]
+ moveq r0, #0x10
+ streq r0, [sp, #0x4]
+ moveq r2, #0x0
+ b _020A21A0
+_020A2190:
+ mov r0, #0x10
+ str r0, [sp, #0x0]
+ str r0, [sp, #0x4]
+ mov r2, #0x0
+_020A21A0:
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r9, #0x0
+ add r0, r1, r0
+ add r0, r2, r0
+ mov r0, r0, lsl #0x1
+ str r0, [sp, #0x8]
+ cmp r0, #0x0
+ ble _020A22B8
+ mov r0, #0x20
+ str r0, [sp, #0x10]
+ mov r0, #0x14
+ mov r6, r9
+ add r5, sp, #0x18
+ str r9, [sp, #0xc]
+ mov r4, #0x1
+ mov r11, #0x30
+ str r0, [sp, #0x14]
+_020A21E8:
+ add r7, r10, #0x348
+ mov r0, r7
+ bl FUN_020A41CC
+ add r0, r9, #0x41
+ strb r0, [sp, #0x18]
+ add r0, r9, #0x1
+ ldr r8, [sp, #0xc]
+ cmp r0, #0x0
+ ble _020A222C
+_020A220C:
+ mov r0, r7
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020A410C
+ add r8, r8, #0x1
+ add r0, r9, #0x1
+ cmp r8, r0
+ blt _020A220C
+_020A222C:
+ mov r0, r7
+ mov r1, r10
+ mov r2, r11
+ bl FUN_020A410C
+ ldr r2, [sp, #0x10]
+ mov r0, r7
+ add r1, r10, #0x54
+ bl FUN_020A410C
+ ldr r2, [sp, #0x10]
+ mov r0, r7
+ add r1, r10, #0x34
+ bl FUN_020A410C
+ mov r0, r7
+ add r1, sp, #0x19
+ bl FUN_020A4098
+ add r7, r10, #0x3fc
+ mov r0, r7
+ bl FUN_020A3B8C
+ mov r0, r7
+ mov r1, r10
+ mov r2, r11
+ bl FUN_020A3ACC
+ ldr r2, [sp, #0x14]
+ mov r0, r7
+ add r1, sp, #0x19
+ bl FUN_020A3ACC
+ add r1, r10, #0x74
+ mov r0, r7
+ add r1, r1, r6
+ bl FUN_020A3A58
+ ldr r0, [sp, #0x8]
+ add r6, r6, #0x10
+ cmp r6, r0
+ add r9, r9, #0x1
+ blt _020A21E8
+_020A22B8:
+ ldrb r0, [r10, #0x454]
+ cmp r0, #0x0
+ beq _020A2300
+ add r1, r10, #0x74
+ str r1, [r10, #0x1d4]
+ ldr r0, [sp, #0x0]
+ ldr r2, [r10, #0x1d4]
+ add r1, r1, r0
+ add r0, r2, r0, lsl #0x1
+ str r0, [r10, #0x1d8]
+ str r1, [r10, #0xbc]
+ ldr r1, [r10, #0xbc]
+ ldr r0, [sp, #0x0]
+ add r1, r1, r0
+ ldr r0, [sp, #0x4]
+ add r0, r1, r0
+ str r0, [r10, #0xc0]
+ b _020A2338
+_020A2300:
+ add r1, r10, #0x74
+ str r1, [r10, #0xbc]
+ ldr r0, [sp, #0x0]
+ ldr r2, [r10, #0xbc]
+ add r1, r1, r0
+ add r0, r2, r0, lsl #0x1
+ str r0, [r10, #0xc0]
+ str r1, [r10, #0x1d4]
+ ldr r1, [r10, #0x1d4]
+ ldr r0, [sp, #0x0]
+ add r1, r1, r0
+ ldr r0, [sp, #0x4]
+ add r0, r1, r0
+ str r0, [r10, #0x1d8]
+_020A2338:
+ ldr r1, [r10, #0x1d8]
+ add r0, r10, #0x1e0
+ mov r2, #0x10
+ bl FUN_020A4A3C
+ ldr r1, [r10, #0xc0]
+ add r0, r10, #0xc8
+ mov r2, #0x10
+ bl FUN_020A4A3C
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_020A2364
+FUN_020A2364: ; 0x020A2364
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x30
+ mov r4, r0
+ ldr r1, _020A23BC ; =0x021062A0
+ add r0, sp, #0x0
+ mov r2, r4
+ bl FUN_020A23C8
+ ldr r1, _020A23C0 ; =0x021062A4
+ add r0, sp, #0x10
+ mov r2, r4
+ bl FUN_020A23C8
+ ldr r1, _020A23C4 ; =0x021062A8
+ add r0, sp, #0x20
+ mov r2, r4
+ bl FUN_020A23C8
+_020A23A0: ; 0x020A23A0
+ add r0, sp, #0x0
+ mov r1, r4
+ mov r2, #0x30
+ bl MI_CpuCopy8
+ add sp, sp, #0x30
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A23BC: .word 0x021062A0
+_020A23C0: .word 0x021062A4
+_020A23C4: .word 0x021062A8
+
+ arm_func_start FUN_020A23C8
+FUN_020A23C8:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r5, r2
+ add r4, r5, #0x348
+ mov r7, r0
+ mov r6, r1
+ mov r0, r4
+ bl FUN_020A41CC
+ mov r0, r6
+ bl strlen
+ mov r2, r0
+ mov r1, r6
+ mov r0, r4
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x30
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, r5, #0x34
+ mov r2, #0x40
+ bl FUN_020A410C
+ mov r0, r4
+ add r1, sp, #0x0
+ bl FUN_020A4098
+ add r4, r5, #0x3fc
+ mov r0, r4
+ bl FUN_020A3B8C
+ mov r1, r5
+ mov r0, r4
+ mov r2, #0x30
+ bl FUN_020A3ACC
+ mov r0, r4
+ add r1, sp, #0x0
+ mov r2, #0x14
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r7
+ bl FUN_020A3A58
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A2470
+FUN_020A2470: ; 0x020A2470
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ movs r10, r2
+ str r0, [sp, #0x8]
+ mov r11, r1
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, [r10, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r0, r0, lsl #0x1
+ add r0, r0, r0, lsr #0x1f
+ mov r0, r0, asr #0x1
+ add r9, r0, #0x1
+ mov r0, #0x14
+ mul r0, r9, r0
+ ldr r1, _020A26C8 ; =0x021C8EC8
+ ldr r1, [r1, #0x0]
+ blx r1
+ movs r8, r0
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ add r7, r8, r9, lsl #0x1
+ add r6, r7, r9, lsl #0x1
+ add r1, r6, r9, lsl #0x1
+ str r1, [sp, #0xc]
+ add r1, r1, r9, lsl #0x1
+ add r5, r1, r9, lsl #0x1
+ str r1, [sp, #0x10]
+ ldr r2, [r10, #0x0]
+ add r4, r5, r9, lsl #0x1
+ mov r1, r11
+ mov r3, r9
+ add r11, r4, r9, lsl #0x1
+ bl FUN_020A4B50
+ ldr r1, [r10, #0x1c]
+ ldr r2, [r10, #0x18]
+ mov r0, r7
+ mov r3, r9
+ bl FUN_020A4B50
+ ldr r1, [r10, #0xc]
+ ldr r2, [r10, #0x8]
+ mov r0, r5
+ mov r3, r9
+ bl FUN_020A4B50
+ bl FUN_020A36EC
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #0xc]
+ str r5, [sp, #0x0]
+ mov r1, r8
+ mov r2, r7
+ mov r3, r9
+ bl FUN_020A4BB0
+ ldr r1, [r10, #0x24]
+ ldr r2, [r10, #0x20]
+ mov r0, r7
+ mov r3, r9
+ bl FUN_020A4B50
+ ldr r1, [r10, #0x14]
+ ldr r2, [r10, #0x10]
+ mov r0, r5
+ mov r3, r9
+ bl FUN_020A4B50
+ ldr r0, [sp, #0x10]
+ mov r1, r8
+ mov r2, r7
+ mov r3, r9
+ str r5, [sp, #0x0]
+ bl FUN_020A4BB0
+ ldr r0, [sp, #0x14]
+ bl FUN_020A36B4
+ ldr r1, [sp, #0xc]
+ ldr r2, [sp, #0x10]
+ mov r0, r8
+ mov r3, r9
+ bl FUN_020A57BC
+ ldr r1, [r10, #0x2c]
+ ldr r2, [r10, #0x28]
+ mov r0, r7
+ mov r3, r9
+ bl FUN_020A4B50
+ mov r0, r6
+ mov r1, r8
+ mov r2, r7
+ mov r3, r9
+ bl FUN_020A5608
+ ldr r1, [r10, #0x14]
+ ldr r2, [r10, #0x10]
+ mov r0, r7
+ mov r3, r9
+ bl FUN_020A4B50
+ mov r0, r8
+ mov r1, r6
+ mov r2, r7
+ mov r3, r9
+ bl FUN_020A5608
+ ldr r2, [sp, #0x10]
+ mov r0, r6
+ mov r1, r8
+ mov r3, r9
+ bl FUN_020A5930
+ ldr r1, [r10, #0x4]
+ ldr r2, [r10, #0x0]
+ mov r0, r7
+ mov r3, r9
+ bl FUN_020A4B50
+ mov r0, r6
+ mov r1, r9
+ bl FUN_020A59DC
+_020A2634: ; 0x020A2634
+ cmp r0, #0x0
+ bge _020A267C
+ mov r0, r6
+ mov r1, r9
+ bl FUN_020A5874
+ str r9, [sp, #0x0]
+ mov r1, r6
+ mov r2, r7
+ mov r3, r4
+ mov r0, #0x0
+ str r11, [sp, #0x4]
+ bl FUN_020A5240
+ mov r0, r4
+ mov r1, r7
+ mov r2, r4
+ mov r3, r9
+ bl FUN_020A57BC
+ b _020A2698
+_020A267C:
+ str r9, [sp, #0x0]
+ mov r1, r6
+ mov r2, r7
+ mov r3, r4
+ mov r0, #0x0
+ str r11, [sp, #0x4]
+ bl FUN_020A5240
+_020A2698:
+ ldr r0, [sp, #0x8]
+ mov r1, r4
+ mov r3, r9
+ mov r2, #0x30
+ bl FUN_020A4B08
+ ldr r1, _020A26CC ; =0x021C8EF4
+ mov r0, r8
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A26C8: .word 0x021C8EC8
+_020A26CC: .word 0x021C8EF4
+
+ arm_func_start FUN_020A26D0
+FUN_020A26D0: ; 0x020A26D0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r4, r0
+ ldrb r0, [r6, #0x0]
+ ldrb r1, [r6, #0x1]
+ bl FUN_020A284C
+_020A26E8: ; 0x020A26E8
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ add r0, r6, #0x2
+ add r1, r4, #0x34
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ ldrb r5, [r6, #0x22]
+ add r6, r6, #0x23
+ cmp r5, #0x20
+ movne r0, #0x0
+ strneb r0, [r4, #0x30]
+ bne _020A2734
+ mov r0, r6
+ add r1, r4, #0x74
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r0, r4
+ bl FUN_020A39B0
+_020A2734:
+ add r0, r6, r5
+ ldrb r1, [r0, #0x1]
+ ldrb r3, [r6, r5]
+ add r0, r0, #0x2
+ mov r2, #0x2
+ add r1, r1, r3, lsl #0x8
+ add r1, r1, r1, lsr #0x1f
+ mov r1, r1, asr #0x1
+ bl FUN_020A285C
+ mov r0, r0, lsl #0x10
+ movs r0, r0, lsr #0x10
+ strh r0, [r4, #0x32]
+ movne r0, #0x1
+ strneb r0, [r4, #0x455]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A2774
+FUN_020A2774: ; 0x020A2774
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r6, r0
+ ldrb r0, [r5, #0x0]
+ ldrb r1, [r5, #0x1]
+ bl FUN_020A284C
+_020A278C: ; 0x020A278C
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrb r2, [r5, #0x2]
+ ldrb r1, [r5, #0x3]
+ ldr r3, _020A2848 ; =0x55555556
+ add r0, r5, #0x8
+ add r4, r1, r2, lsl #0x8
+ smull r2, r1, r3, r4
+ add r1, r1, r4, lsr #0x1f
+ mov r2, #0x3
+ bl FUN_020A285C
+ mov r0, r0, lsl #0x10
+ movs r0, r0, lsr #0x10
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ strh r0, [r6, #0x32]
+ ldrb r12, [r5, #0x4]
+ ldrb r0, [r5, #0x5]
+ ldrb r3, [r5, #0x6]
+ ldrb r2, [r5, #0x7]
+ mov r1, #0x0
+ add r12, r0, r12, lsl #0x8
+ add r0, r4, #0x8
+ add r4, r2, r3, lsl #0x8
+ add r0, r0, r12
+ strb r1, [r6, #0x30]
+ cmp r4, #0x20
+ add r5, r5, r0
+ blt _020A2818
+ mov r0, r5
+ add r1, r6, #0x34
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ b _020A2838
+_020A2818:
+ add r0, r6, #0x34
+ rsb r2, r4, #0x20
+ bl MI_CpuFill8
+ add r1, r6, #0x54
+ mov r0, r5
+ mov r2, r4
+ sub r1, r1, r4
+ bl MI_CpuCopy8
+_020A2838:
+ mov r0, #0x1
+ strb r0, [r6, #0x455]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A2848: .word 0x55555556
+
+ arm_func_start FUN_020A284C
+FUN_020A284C:
+ cmp r0, #0x3
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020A285C
+FUN_020A285C: ; 0x020A285C
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, #0x0
+ ldr r4, _020A28BC ; =0x0210623C
+_020A2874:
+ mov r0, r5, lsl #0x1
+ ldrh r3, [r4, r0]
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ bl FUN_020A28C0
+_020A288C: ; 0x020A288C
+ cmp r0, #0x0
+ ldrne r0, _020A28BC ; =0x0210623C
+ movne r1, r5, lsl #0x1
+ ldrneh r0, [r0, r1]
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ add r5, r5, #0x1
+ cmp r5, #0x2
+ blo _020A2874
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A28BC: .word 0x0210623C
+
+ arm_func_start FUN_020A28C0
+FUN_020A28C0:
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ mov r4, #0x0
+ ble _020A2908
+_020A28D0:
+ ldrb lr, [r0, #0x0]
+ ldrb r12, [r0, #0x1]
+ cmp r2, #0x3
+ add lr, r12, lr, lsl #0x8
+ ldreqb r12, [r0, #0x2]
+ addeq lr, r12, lr, lsl #0x8
+ cmp lr, r3
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r4, r4, #0x1
+ cmp r4, r1
+ add r0, r0, r2
+ blt _020A28D0
+_020A2908:
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A2914
+FUN_020A2914: ; 0x020A2914
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ add r0, r5, #0x2
+ add r1, r6, #0x54
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ add r0, r5, #0x22
+ ldrb r7, [r6, #0x30]
+ add r5, r5, #0x23
+ ldrb r4, [r0, #0x0]
+ cmp r7, #0x0
+ beq _020A2974
+ cmp r4, #0x20
+ bne _020A2974
+ mov r1, r5
+ add r0, r6, #0x74
+ mov r2, #0x20
+ bl memcmp
+_020A2964: ; 0x020A2964
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streqb r0, [r6, #0x31]
+ beq _020A29B4
+_020A2974:
+ cmp r7, #0x0
+ beq _020A2984
+ mov r0, r6
+ bl FUN_020A3798
+_020A2984:
+ cmp r4, #0x0
+ moveq r0, #0x0
+ streqb r0, [r6, #0x30]
+ beq _020A29AC
+ mov r0, r5
+ add r1, r6, #0x74
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ strb r0, [r6, #0x30]
+_020A29AC:
+ mov r0, #0x0
+ strb r0, [r6, #0x31]
+_020A29B4:
+ add r0, r5, r4
+ ldrb r2, [r5, r4]
+ ldrb r1, [r0, #0x1]
+ mov r0, #0x2
+ add r1, r1, r2, lsl #0x8
+ strh r1, [r6, #0x32]
+ strb r0, [r6, #0x455]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A29DC
+FUN_020A29DC: ; 0x020A29DC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ ldr r1, [sp, #0x4c]
+ mov r10, r0
+ ldrb r4, [r1, #0x2]
+ ldrb r3, [r1, #0x0]
+ ldrb r2, [r1, #0x1]
+ add r0, r1, #0x3
+ mvn r1, #0x0
+ str r0, [sp, #0x4c]
+ add r2, r2, r3, lsl #0x8
+ add r0, sp, #0x14
+ str r1, [r10, #0x45c]
+ add r7, r4, r2, lsl #0x8
+ bl RTC_GetDate
+ mov r8, #0x0
+ ldr r0, [sp, #0x14]
+ ldr r2, [sp, #0x1c]
+ add r1, r0, #0x7d0
+ ldr r0, [sp, #0x18]
+ mov r1, r1, lsl #0x10
+ add r0, r1, r0, lsl #0x8
+ add r0, r2, r0
+ str r0, [r10, #0x80c]
+ strb r8, [r10, #0x6b0]
+ str r8, [r10, #0x5a0]
+ ldr r0, [r10, #0x5a0]
+ mov r6, r8
+ str r0, [r10, #0x594]
+ add r0, r10, #0x7b0
+ str r0, [sp, #0x4]
+ mov r0, #0x1
+ str r8, [sp, #0x8]
+ mov r4, r8
+ mov r11, #0x2
+ str r0, [sp, #0xc]
+ mvn r5, #0x0
+_020A2A74:
+ ldr r1, [sp, #0x4c]
+ mov r0, r10
+ ldrb r2, [r1, #0x2]
+ ldrb r12, [r1, #0x0]
+ ldrb r3, [r1, #0x1]
+ add r9, r1, #0x3
+ add r1, sp, #0x4c
+ str r9, [sp, #0x4c]
+ str r5, [r10, #0x458]
+ strb r4, [r10, #0x5ad]
+ strb r4, [r10, #0x5ac]
+ strb r4, [r10, #0x5af]
+ strb r4, [r10, #0x6b0]
+ strb r4, [r10, #0x5b0]
+ strb r4, [r10, #0x7b0]
+ add r3, r3, r12, lsl #0x8
+ ldr r9, [sp, #0x4c]
+ add r3, r2, r3, lsl #0x8
+ add r2, r3, #0x3
+ str r9, [r10, #0x804]
+ str r3, [r10, #0x808]
+ sub r7, r7, r2
+ mov r2, r4
+ mov r3, r4
+ str r8, [sp, #0x0]
+ bl FUN_020A2F98
+_020A2ADC: ; 0x020A2ADC
+ cmp r0, #0x0
+ bne _020A2AFC
+ ldr r0, [r10, #0x594]
+ cmp r0, #0x33
+ blo _020A2AFC
+ ldr r0, [r10, #0x5a0]
+ cmp r0, #0x0
+ bne _020A2B14
+_020A2AFC:
+ mov r0, #0x9
+ add sp, sp, #0x24
+ strb r0, [r10, #0x455]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020A2B14:
+ mov r0, r10
+ bl FUN_020A2CBC
+ mov r8, r0
+ cmp r6, #0x0
+ bne _020A2B44
+ ldr r0, [r10, #0x800]
+ cmp r0, #0x0
+ beq _020A2B44
+ ldr r1, [sp, #0x4]
+ bl FUN_020A2C18
+_020A2B3C: ; 0x020A2B3C
+ cmp r0, #0x0
+ orrne r8, r8, #0x4000
+_020A2B44:
+ and r9, r8, #0xff
+ cmp r9, #0x1
+ bne _020A2BB4
+ cmp r7, #0x0
+ beq _020A2BB4
+ ldr r1, [sp, #0x4c]
+ ldr r2, [sp, #0x8]
+ add r1, r1, #0x3
+ str r1, [sp, #0x10]
+ ldr r1, [sp, #0x8]
+ mov r0, r10
+ strb r1, [r10, #0x5ad]
+ add r1, sp, #0x10
+ mov r3, r2
+ str r11, [sp, #0x0]
+ bl FUN_020A2F98
+_020A2B84: ; 0x020A2B84
+ cmp r0, #0x0
+ movne r0, #0x9
+ addne sp, sp, #0x24
+ strneb r0, [r10, #0x455]
+ ldmneia sp!, {r4-r11,lr}
+ addne sp, sp, #0x10
+ bxne lr
+ mov r0, r10
+ add r1, r10, #0x480
+ bl FUN_020A2DBC
+ bic r1, r8, #0xff
+ orr r8, r1, r0
+_020A2BB4:
+ ldr r3, [r10, #0x810]
+ cmp r3, #0x0
+ beq _020A2BD4
+ mov r0, r8
+ mov r1, r10
+ mov r2, r6
+ blx r3
+ mov r8, r0
+_020A2BD4:
+ cmp r9, #0x0
+ add r6, r6, #0x1
+ beq _020A2BF4
+ cmp r8, #0x0
+ bne _020A2BF4
+ cmp r7, #0x0
+ ldrne r8, [sp, #0xc]
+ bne _020A2A74
+_020A2BF4:
+ cmp r8, #0x0
+ moveq r0, #0x3
+ streqb r0, [r10, #0x455]
+ movne r0, #0x9
+ strneb r0, [r10, #0x455]
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+
+ arm_func_start FUN_020A2C18
+FUN_020A2C18:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ b _020A2C38
+_020A2C28:
+ cmp r1, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+_020A2C38:
+ ldrsb r0, [r5], #0x1
+ ldrsb r1, [r6], #0x1
+ cmp r1, r0
+ beq _020A2C28
+ cmp r0, #0x2a
+ movne r0, #0x1
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ sub r6, r6, #0x1
+ mov r0, r6
+ bl FUN_020A2C94
+ mov r4, r0
+ mov r0, r5
+ bl FUN_020A2C94
+ cmp r0, r4
+ movgt r0, #0x1
+ ldmgtia sp!, {r4-r6,lr}
+ bxgt lr
+ sub r0, r4, r0
+ add r6, r6, r0
+ b _020A2C38
+_020A2C8C: ; 0x020A2C8C
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A2C94
+FUN_020A2C94: ; 0x020A2C94
+ mov r2, r0
+ b _020A2CA0
+_020A2C9C:
+ add r0, r0, #0x1
+_020A2CA0:
+ ldrsb r1, [r0, #0x0]
+ cmp r1, #0x2e
+ beq _020A2CB4
+ cmp r1, #0x0
+ bne _020A2C9C
+_020A2CB4:
+ sub r0, r0, r2
+ bx lr
+
+ arm_func_start FUN_020A2CBC
+FUN_020A2CBC: ; 0x020A2CBC
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldrb r0, [r5, #0x5af]
+ ldr r1, [r5, #0x45c]
+ cmp r0, #0x0
+ movne r4, #0x0
+ moveq r4, #0x8000
+ mvn r0, #0x0
+ cmp r1, r0
+ orreq r0, r4, #0x4
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, [r5, #0x458]
+ cmp r0, #0x3
+ beq _020A2D04
+ cmp r0, #0x4
+ beq _020A2D40
+ b _020A2D7C
+_020A2D04:
+ add r6, r5, #0x3fc
+ mov r0, r6
+ bl FUN_020A3B8C
+ ldr r1, [r5, #0x460]
+ ldr r2, [r5, #0x464]
+ mov r0, r6
+ sub r2, r2, r1
+ bl FUN_020A3ACC
+ ldr r1, _020A2DB8 ; =0x00000468
+ mov r0, r6
+ add r1, r5, r1
+ bl FUN_020A3A58
+ mov r0, #0x10
+ str r0, [r5, #0x47c]
+ b _020A2D88
+_020A2D40:
+ add r6, r5, #0x348
+ mov r0, r6
+ bl FUN_020A41CC
+ ldr r1, [r5, #0x460]
+ ldr r2, [r5, #0x464]
+ mov r0, r6
+ sub r2, r2, r1
+ bl FUN_020A410C
+ ldr r1, _020A2DB8 ; =0x00000468
+ mov r0, r6
+ add r1, r5, r1
+ bl FUN_020A4098
+ mov r0, #0x14
+ str r0, [r5, #0x47c]
+ b _020A2D88
+_020A2D7C:
+ orr r0, r4, #0x3
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A2D88:
+ mov r0, r5
+ add r1, r5, #0x5b0
+ bl FUN_020A3628
+ movs r1, r0
+ orreq r0, r4, #0x1
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, r5
+ bl FUN_020A2DBC
+_020A2DAC: ; 0x020A2DAC
+ orr r0, r4, r0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A2DB8: .word 0x00000468
+
+ arm_func_start FUN_020A2DBC
+FUN_020A2DBC:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ ldr r0, [r8, #0x5a4]
+ mov r7, r1
+ cmp r0, #0x0
+ beq _020A2E14
+ ldr r0, [r8, #0x5a8]
+ cmp r0, #0x0
+ beq _020A2E14
+ ldr r0, [r7, #0x10]
+ cmp r0, #0x0
+ beq _020A2E14
+ ldr r0, [r7, #0xc]
+ cmp r0, #0x0
+ beq _020A2E14
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ beq _020A2E14
+ ldr r0, [r7, #0x4]
+ cmp r0, #0x0
+ bne _020A2E24
+_020A2E14:
+ add sp, sp, #0x8
+ mov r0, #0x2
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+_020A2E24:
+ mov r0, r0, lsl #0x1
+ ldr r1, _020A2F8C ; =0x021C8EC8
+ add r0, r0, r0, lsr #0x1f
+ mov r4, r0, asr #0x1
+ ldr r1, [r1, #0x0]
+ mov r0, r4, lsl #0x3
+ blx r1
+ movs r6, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r10,lr}
+ bxeq lr
+ add r5, r6, r4, lsl #0x1
+ add r10, r5, r4, lsl #0x1
+ ldr r1, [r8, #0x5a4]
+ ldr r2, [r8, #0x5a8]
+ mov r0, r5
+ mov r3, r4
+ add r9, r10, r4, lsl #0x1
+ bl FUN_020A4B50
+ ldr r1, [r7, #0x10]
+ ldr r2, [r7, #0xc]
+ mov r0, r10
+ mov r3, r4
+ bl FUN_020A4B50
+ mov r0, r9
+ ldr r1, [r7, #0x8]
+ ldr r2, [r7, #0x4]
+ mov r3, r4
+ bl FUN_020A4B50
+ bl FUN_020A36EC
+ str r9, [sp, #0x0]
+ mov r2, r10
+ mov r9, r0
+ mov r0, r6
+ mov r1, r5
+ mov r3, r4
+ bl FUN_020A507C
+ mov r0, r9
+ bl FUN_020A36B4
+ mov r0, r5
+ mov r1, r6
+ ldr r2, [r7, #0x4]
+ mov r3, r4
+ bl FUN_020A4B08
+ ldrb r0, [r6, r4, lsl #0x1]
+ mov r4, #0x0
+ cmp r0, #0x0
+ bne _020A2EF4
+ ldrb r0, [r5, #0x1]
+ cmp r0, #0x1
+ beq _020A2EFC
+_020A2EF4:
+ mov r4, #0x2
+ b _020A2F6C
+_020A2EFC:
+ ldr r3, [r7, #0x4]
+ mov r2, #0x2
+ cmp r3, #0x2
+ ble _020A2F24
+_020A2F0C:
+ ldrb r0, [r5, r2]
+ cmp r0, #0xff
+ bne _020A2F24
+ add r2, r2, #0x1
+ cmp r2, r3
+ blt _020A2F0C
+_020A2F24:
+ add r1, r2, #0x1
+ cmp r1, r3
+ bge _020A2F68
+ ldrb r0, [r5, r2]
+ cmp r0, #0x0
+ bne _020A2F68
+ ldrb r0, [r5, r1]
+ cmp r0, #0x30
+ bne _020A2F68
+ ldr r0, _020A2F90 ; =0x00000468
+ ldr r2, [r8, #0x47c]
+ add r1, r5, r3
+ add r0, r8, r0
+ sub r1, r1, r2
+ bl memcmp
+_020A2F60: ; 0x020A2F60
+ cmp r0, #0x0
+ beq _020A2F6C
+_020A2F68:
+ mov r4, #0x2
+_020A2F6C:
+ ldr r1, _020A2F94 ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ mov r0, r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020A2F8C: .word 0x021C8EC8
+_020A2F90: .word 0x00000468
+_020A2F94: .word 0x021C8EF4
+
+ arm_func_start FUN_020A2F98
+FUN_020A2F98:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ str r1, [sp, #0x4]
+ ldr r1, [r1, #0x0]
+ mov r9, r0
+ str r1, [sp, #0x8]
+ add r0, r1, #0x1
+ str r0, [sp, #0x8]
+ add r0, sp, #0x8
+ mov r5, r2
+ mov r4, r3
+ ldr r8, [sp, #0x30]
+ ldrb r6, [r1, #0x0]
+ bl FUN_020A35D8
+ movs r7, r0
+ bmi _020A2FE0
+ cmp r7, #0x7d0
+ ble _020A2FF0
+_020A2FE0:
+ add sp, sp, #0xc
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_020A2FF0:
+ and r1, r6, #0x1f
+ cmp r1, #0x18
+ addls pc, pc, r1, lsl #0x2
+ b _020A3430
+_020A3000:
+ b _020A3430
+_020A3004:
+ b _020A3430
+_020A3008:
+ b _020A3064
+_020A300C:
+ b _020A315C
+_020A3010:
+ b _020A3430
+_020A3014:
+ b _020A3430
+_020A3018:
+ b _020A31DC
+_020A301C:
+ b _020A3430
+_020A3020:
+ b _020A3430
+_020A3024:
+ b _020A3430
+_020A3028:
+ b _020A3430
+_020A302C:
+ b _020A3430
+_020A3030:
+ b _020A3274
+_020A3034:
+ b _020A3430
+_020A3038:
+ b _020A3430
+_020A303C:
+ b _020A3430
+_020A3040:
+ b _020A3348
+_020A3044:
+ b _020A33D8
+_020A3048:
+ b _020A3430
+_020A304C:
+ b _020A3274
+_020A3050:
+ b _020A3274
+_020A3054:
+ b _020A3430
+_020A3058:
+ b _020A3274
+_020A305C:
+ b _020A32F4
+_020A3060:
+ b _020A32F4
+_020A3064:
+ ldrb r0, [r9, #0x5ad]
+ cmp r0, #0x0
+ beq _020A314C
+ cmp r4, #0x0
+ bne _020A30E0
+ ldr r0, [sp, #0x8]
+ ldrb r1, [r0, #0x0]
+ cmp r1, #0x0
+ bne _020A30A4
+_020A3088:
+ ldr r1, [sp, #0x8]
+ sub r7, r7, #0x1
+ add r0, r1, #0x1
+ str r0, [sp, #0x8]
+ ldrb r1, [r1, #0x1]
+ cmp r1, #0x0
+ beq _020A3088
+_020A30A4:
+ cmp r8, #0x0
+ beq _020A30C0
+ cmp r8, #0x2
+ streq r7, [r9, #0x484]
+ ldreq r0, [sp, #0x8]
+ streq r0, [r9, #0x488]
+ b _020A314C
+_020A30C0:
+ cmp r7, #0x100
+ bgt _020A314C
+ ldr r1, _020A34B8 ; =0x00000494
+ mov r2, r7
+ add r1, r9, r1
+ bl MI_CpuCopy8
+ str r7, [r9, #0x594]
+ b _020A314C
+_020A30E0:
+ cmp r4, #0x1
+ bne _020A314C
+ ldr r0, [sp, #0x8]
+ ldrb r1, [r0, #0x0]
+ cmp r1, #0x0
+ bne _020A3114
+_020A30F8:
+ ldr r1, [sp, #0x8]
+ sub r7, r7, #0x1
+ add r0, r1, #0x1
+ str r0, [sp, #0x8]
+ ldrb r1, [r1, #0x1]
+ cmp r1, #0x0
+ beq _020A30F8
+_020A3114:
+ cmp r8, #0x0
+ beq _020A3130
+ cmp r8, #0x2
+ streq r7, [r9, #0x48c]
+ ldreq r0, [sp, #0x8]
+ streq r0, [r9, #0x490]
+ b _020A314C
+_020A3130:
+ cmp r7, #0x8
+ bgt _020A314C
+ ldr r1, _020A34BC ; =0x00000598
+ mov r2, r7
+ add r1, r9, r1
+ bl MI_CpuCopy8
+ str r7, [r9, #0x5a0]
+_020A314C:
+ ldr r0, [sp, #0x8]
+ add r0, r0, r7
+ str r0, [sp, #0x8]
+ b _020A349C
+_020A315C:
+ cmp r5, #0x1
+ bne _020A317C
+ cmp r8, #0x2
+ ldrne r1, [sp, #0x8]
+ subne r0, r7, #0x1
+ addne r1, r1, #0x1
+ strne r1, [r9, #0x5a4]
+ strne r0, [r9, #0x5a8]
+_020A317C:
+ ldrb r0, [r9, #0x5ad]
+ cmp r0, #0x0
+ beq _020A31CC
+ ldr r0, [sp, #0x8]
+ add r1, sp, #0x8
+ add r0, r0, #0x1
+ str r0, [sp, #0x8]
+ mov r0, r9
+ mov r2, r5
+ mov r3, #0x0
+ str r8, [sp, #0x0]
+ bl FUN_020A2F98
+_020A31AC: ; 0x020A31AC
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ mov r0, #0x0
+ strb r0, [r9, #0x5ad]
+ b _020A349C
+_020A31CC:
+ ldr r0, [sp, #0x8]
+ add r0, r0, r7
+ str r0, [sp, #0x8]
+ b _020A349C
+_020A31DC:
+ ldr r5, [sp, #0x8]
+ mov r6, #0x0
+ ldr sl, _020A34C0 ; =0x02106278
+_020A31E8:
+ ldr r4, [r10, r6, lsl #0x2]
+ mov r0, r4
+ bl strlen
+ mov r2, r0
+ mov r0, r5
+ mov r1, r4
+ bl memcmp
+_020A3204: ; 0x020A3204
+ cmp r0, #0x0
+ bne _020A3258
+ cmp r6, #0x5
+ addls pc, pc, r6, lsl #0x2
+ b _020A3264
+_020A3218: ; 0x020A3218
+ b _020A3264
+_020A321C: ; 0x020A321C
+ b _020A3230
+_020A3220: ; 0x020A3220
+ b _020A3230
+_020A3224: ; 0x020A3224
+ b _020A3240
+_020A3228: ; 0x020A3228
+ b _020A3240
+_020A322C: ; 0x020A322C
+ b _020A324C
+_020A3230:
+ cmp r8, #0x0
+ streq r6, [r9, #0x45c]
+ strb r6, [r9, #0x5ad]
+ b _020A3264
+_020A3240:
+ cmp r8, #0x2
+ strne r6, [r9, #0x458]
+ b _020A3264
+_020A324C:
+ cmp r8, #0x2
+ strneb r6, [r9, #0x5ae]
+ b _020A3264
+_020A3258:
+ add r6, r6, #0x1
+ cmp r6, #0x6
+ blt _020A31E8
+_020A3264:
+ ldr r0, [sp, #0x8]
+ add r0, r0, r7
+ str r0, [sp, #0x8]
+ b _020A349C
+_020A3274:
+ cmp r8, #0x2
+ beq _020A32DC
+ ldrb r0, [r9, #0x5ac]
+ cmp r0, #0x0
+ beq _020A32CC
+ ldr r1, [sp, #0x8]
+ mov r2, r7
+ add r0, r9, #0x6b0
+ bl FUN_020A3554
+ ldrb r0, [r9, #0x5ae]
+ cmp r0, #0x5
+ bne _020A32DC
+ cmp r7, #0x4f
+ bgt _020A32DC
+ ldr r0, [sp, #0x8]
+ mov r2, r7
+ add r1, r9, #0x7b0
+ bl MI_CpuCopy8
+ add r0, r9, r7
+ mov r1, #0x0
+ strb r1, [r0, #0x7b0]
+ b _020A32DC
+_020A32CC:
+ ldr r1, [sp, #0x8]
+ mov r2, r7
+ add r0, r9, #0x5b0
+ bl FUN_020A3554
+_020A32DC:
+ mov r0, #0x0
+ strb r0, [r9, #0x5ae]
+ ldr r0, [sp, #0x8]
+ add r0, r0, r7
+ str r0, [sp, #0x8]
+ b _020A349C
+_020A32F4:
+ cmp r8, #0x2
+ beq _020A3330
+ ldr r0, [sp, #0x8]
+ bl FUN_020A34C4
+_020A3304: ; 0x020A3304
+ cmp r4, #0x0
+ bne _020A3320
+ ldr r1, [r9, #0x80c]
+ cmp r1, r0
+ movcs r0, #0x1
+ strcsb r0, [r9, #0x5af]
+ b _020A3330
+_020A3320:
+ ldr r1, [r9, #0x80c]
+ cmp r1, r0
+ movhi r0, #0x0
+ strhib r0, [r9, #0x5af]
+_020A3330:
+ ldr r1, [sp, #0x8]
+ mov r0, #0x1
+ add r1, r1, r7
+ str r1, [sp, #0x8]
+ strb r0, [r9, #0x5ac]
+ b _020A349C
+_020A3348:
+ cmp r5, #0x0
+ bne _020A3364
+ cmp r4, #0x0
+ bne _020A3364
+ cmp r8, #0x2
+ ldrne r0, [sp, #0x8]
+ strne r0, [r9, #0x460]
+_020A3364:
+ ldr r0, [sp, #0x8]
+ mov r10, #0x0
+ add r7, r0, r7
+ cmp r0, r7
+ bhs _020A33BC
+ add r11, sp, #0x8
+ add r6, r5, #0x1
+_020A3380:
+ mov r0, r9
+ mov r1, r11
+ mov r2, r6
+ mov r3, r10
+ str r8, [sp, #0x0]
+ bl FUN_020A2F98
+_020A3398: ; 0x020A3398
+ cmp r0, #0x0
+ add r10, r10, #0x1
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r0, [sp, #0x8]
+ cmp r0, r7
+ blo _020A3380
+_020A33BC:
+ cmp r5, #0x1
+ bne _020A349C
+ cmp r4, #0x0
+ bne _020A349C
+ cmp r8, #0x2
+ strne r0, [r9, #0x464]
+ b _020A349C
+_020A33D8:
+ ldr r0, [sp, #0x8]
+ add r6, r0, r7
+ cmp r0, r6
+ bhs _020A349C
+ add r7, r5, #0x1
+ add r4, sp, #0x8
+ mov r5, #0x0
+_020A33F4:
+ mov r0, r9
+ mov r1, r4
+ mov r2, r7
+ mov r3, r5
+ str r8, [sp, #0x0]
+ bl FUN_020A2F98
+_020A340C: ; 0x020A340C
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r0, [sp, #0x8]
+ cmp r0, r6
+ blo _020A33F4
+ b _020A349C
+_020A3430:
+ cmp r6, #0xa0
+ bne _020A3490
+ ldr r0, [sp, #0x8]
+ add r6, r0, r7
+ cmp r0, r6
+ bhs _020A349C
+ add r7, r5, #0x1
+ add r4, sp, #0x8
+ mov r5, #0x0
+_020A3454:
+ mov r0, r9
+ mov r1, r4
+ mov r2, r7
+ mov r3, r5
+ str r8, [sp, #0x0]
+ bl FUN_020A2F98
+_020A346C: ; 0x020A346C
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ movne r0, #0x1
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldr r0, [sp, #0x8]
+ cmp r0, r6
+ blo _020A3454
+ b _020A349C
+_020A3490:
+ ldr r0, [sp, #0x8]
+ add r0, r0, r7
+ str r0, [sp, #0x8]
+_020A349C:
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0x4]
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A34B8: .word 0x00000494
+_020A34BC: .word 0x00000598
+_020A34C0: .word 0x02106278
+
+ arm_func_start FUN_020A34C4
+FUN_020A34C4:
+ stmdb sp!, {r4,lr}
+ ldrb r12, [r0, #0x1]
+ ldrb r3, [r0, #0x0]
+ mov r2, #0xa
+ cmp r1, #0x17
+ mla r1, r3, r2, r12
+ sub lr, r1, #0x210
+ add r0, r0, #0x2
+ bne _020A34FC
+ cmp lr, #0x32
+ ldrhs r1, _020A3550 ; =0x0000076C
+ addcc r4, lr, #0x7d0
+ addcs r4, lr, r1
+ b _020A3518
+_020A34FC:
+ ldrb r12, [r0, #0x1]
+ ldrb r3, [r0, #0x0]
+ mov r1, #0x64
+ add r0, r0, #0x2
+ mla r2, r3, r2, r12
+ sub r2, r2, #0x210
+ mla r4, lr, r1, r2
+_020A3518:
+ ldrb r12, [r0, #0x1]
+ ldrb r3, [r0, #0x0]
+ mov r1, #0xa
+ ldrb r2, [r0, #0x3]
+ ldrb r0, [r0, #0x2]
+ mla r12, r3, r1, r12
+ mla r1, r0, r1, r2
+ mov r2, r4, lsl #0x10
+ sub r0, r12, #0x210
+ add r2, r2, r0, lsl #0x8
+ sub r0, r1, #0x210
+ add r0, r2, r0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A3550: .word 0x0000076C
+
+ arm_func_start FUN_020A3554
+FUN_020A3554:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrsb r3, [r0, #0x0]
+ mov lr, r0
+ cmp r3, #0x0
+ beq _020A35AC
+_020A356C:
+ ldrsb r3, [r0, #0x1]!
+ cmp r3, #0x0
+ bne _020A356C
+ sub r3, r0, lr
+ cmp r3, #0xff
+ addge sp, sp, #0x4
+ ldmgeia sp!, {lr}
+ bxge lr
+ mov r3, #0x2c
+ strb r3, [r0, #0x0]
+ mov r3, #0x20
+ strb r3, [r0, #0x1]
+ add r0, r0, #0x2
+ b _020A35AC
+_020A35A4:
+ ldrsb r3, [r1], #0x1
+ strb r3, [r0], #0x1
+_020A35AC:
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ beq _020A35C4
+ sub r3, r0, lr
+ cmp r3, #0xff
+ blt _020A35A4
+_020A35C4:
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A35D8
+FUN_020A35D8: ; 0x020A35D8
+ ldr r1, [r0, #0x0]
+ ldrb r3, [r1, #0x0]
+ add r12, r1, #0x1
+ ands r1, r3, #0x80
+ beq _020A361C
+ ands r1, r3, #0x7f
+ sub r2, r1, #0x1
+ mov r3, #0x0
+ beq _020A361C
+_020A35FC:
+ ands r1, r3, #0xff000000
+ mvnne r0, #0x0
+ bxne lr
+ ldrb r1, [r12], #0x1
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ add r3, r1, r3, lsl #0x8
+ bne _020A35FC
+_020A361C:
+ str r12, [r0, #0x0]
+ mov r0, r3
+ bx lr
+
+ arm_func_start FUN_020A3628
+FUN_020A3628: ; 0x020A3628
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r0, #0x818]
+ mov r7, r1
+ cmp r4, #0x0
+ mov r6, #0x0
+ ble _020A3678
+ ldr r5, [r0, #0x814]
+_020A3648:
+ ldr r0, [r5, r6, lsl #0x2]
+ mov r1, r7
+ ldr r0, [r0, #0x0]
+ bl strcmp
+_020A3658: ; 0x020A3658
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldreq r0, [r5, r6, lsl #0x2]
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ add r6, r6, #0x1
+ cmp r6, r4
+ blt _020A3648
+_020A3678:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A3688
+FUN_020A3688: ; 0x020A3688
+ ldr r2, _020A36B0 ; =0x021D3498
+ ldr r2, [r2, #0x4]
+ ldr r2, [r2, #0xa4]
+ cmp r2, #0x0
+ bxeq lr
+ ldr r2, [r2, #0xc]
+ cmp r2, #0x0
+ strne r0, [r2, #0x814]
+ strne r1, [r2, #0x818]
+ bx lr
+ .balign 4
+_020A36B0: .word 0x021D3498
+
+ arm_func_start FUN_020A36B4
+FUN_020A36B4: ; 0x020A36B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, r0
+ cmp r1, #0x20
+ addcs sp, sp, #0x4
+ ldmcsia sp!, {lr}
+ bxcs lr
+ ldr r0, _020A36E8 ; =0x021D3498
+ ldr r0, [r0, #0x4]
+ bl OS_SetThreadPriority
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A36E8: .word 0x021D3498
+
+ arm_func_start FUN_020A36EC
+FUN_020A36EC: ; 0x020A36EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020A3744 ; =0x02106244
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x20
+ addcs sp, sp, #0x4
+ mvncs r0, #0x0
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ ldr r0, _020A3748 ; =0x021D3498
+ ldr r5, [r0, #0x4]
+ mov r0, r5
+ bl OS_GetThreadPriority
+ ldr r1, _020A3744 ; =0x02106244
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ mov r0, r5
+ bl OS_SetThreadPriority
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A3744: .word 0x02106244
+_020A3748: .word 0x021D3498
+
+ arm_func_start FUN_020A374C
+FUN_020A374C: ; 0x020A374C
+ ldr r1, _020A3758 ; =0x02106244
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020A3758: .word 0x02106244
+
+ arm_func_start FUN_020A375C
+FUN_020A375C: ; 0x020A375C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x1c
+ add r0, sp, #0x0
+ bl RTC_GetDate
+ add r0, sp, #0x10
+ bl RTC_GetTime
+_020A3774: ; 0x020A3774
+ add r0, sp, #0x0
+ add r1, sp, #0x10
+ bl RTC_ConvertDateTimeToSecond
+ ldr r1, _020A3794 ; =0x386D4380
+ add r0, r0, r1
+ add sp, sp, #0x1c
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A3794: .word 0x386D4380
+
+ arm_func_start FUN_020A3798
+FUN_020A3798:
+ stmdb sp!, {r4-r8,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r6, _020A3804 ; =0x021CA6FC
+ mov r7, r0
+ mov r8, #0x0
+ add r5, r4, #0x74
+ mov r4, #0x20
+_020A37B8:
+ ldrb r0, [r6, #0x5a]
+ cmp r0, #0x0
+ beq _020A37E4
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl memcmp
+_020A37D4: ; 0x020A37D4
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streqb r0, [r6, #0x5a]
+ beq _020A37F4
+_020A37E4:
+ add r8, r8, #0x1
+ cmp r8, #0x4
+ add r6, r6, #0x5c
+ blt _020A37B8
+_020A37F4:
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A3804: .word 0x021CA6FC
+
+ arm_func_start FUN_020A3808
+FUN_020A3808: ; 0x020A3808
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl OS_GetTick
+ ldr r6, _020A3904 ; =0x021CA6FC
+ mov r4, r0, lsr #0x10
+ mov r3, #0x0
+ mov r12, r3
+ mov r2, r6
+ orr r4, r4, r1, lsl #0x10
+ mvn r0, #0x0
+_020A3844:
+ ldrb r1, [r2, #0x5a]
+ cmp r1, #0x0
+ beq _020A387C
+ cmp r8, #0x0
+ beq _020A387C
+ ldr lr, [r2, #0x54]
+ cmp r8, lr
+ bne _020A387C
+ cmp r7, #0x0
+ beq _020A387C
+ ldrh lr, [r2, #0x58]
+ cmp r7, lr
+ moveq r6, r2
+ beq _020A38BC
+_020A387C:
+ mvn lr, #0x0
+ cmp r3, lr
+ beq _020A38AC
+ cmp r1, #0x0
+ moveq r3, r0
+ moveq r6, r2
+ beq _020A38AC
+ ldr r1, [r2, #0x50]
+ sub r1, r4, r1
+ cmp r1, r3
+ movhi r3, r1
+ movhi r6, r2
+_020A38AC:
+ add r12, r12, #0x1
+ cmp r12, #0x4
+ add r2, r2, #0x5c
+ blt _020A3844
+_020A38BC:
+ mov r1, r6
+ add r0, r9, #0x74
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r0, r9
+ add r1, r6, #0x20
+ mov r2, #0x30
+ bl MI_CpuCopy8
+ str r4, [r6, #0x50]
+ mov r0, #0x1
+ strb r0, [r6, #0x5a]
+ str r8, [r6, #0x54]
+ mov r0, r5
+ strh r7, [r6, #0x58]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020A3904: .word 0x021CA6FC
+
+ arm_func_start FUN_020A3908
+FUN_020A3908: ; 0x020A3908
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ bl OS_DisableInterrupts
+ mov r1, #0x0
+ ldr r4, _020A39AC ; =0x021CA6FC
+ mov r5, r0
+ strb r1, [r8, #0x30]
+_020A392C:
+ ldrb r0, [r4, #0x5a]
+ cmp r0, #0x0
+ beq _020A398C
+ ldr r0, [r4, #0x54]
+ cmp r0, r7
+ bne _020A398C
+ ldrh r0, [r4, #0x58]
+ cmp r0, r6
+ bne _020A398C
+ mov r0, r4
+ add r1, r8, #0x74
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r1, r8
+ add r0, r4, #0x20
+ mov r2, #0x30
+ bl MI_CpuCopy8
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r4, #0x50]
+ mov r0, #0x1
+ strb r0, [r8, #0x30]
+ b _020A399C
+_020A398C:
+ add r1, r1, #0x1
+ cmp r1, #0x4
+ add r4, r4, #0x5c
+ blt _020A392C
+_020A399C:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A39AC: .word 0x021CA6FC
+
+ arm_func_start FUN_020A39B0
+FUN_020A39B0: ; 0x020A39B0
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl OS_DisableInterrupts
+ mov r6, #0x0
+ ldr r4, _020A3A54 ; =0x021CA6FC
+ mov r5, r0
+ strb r6, [r7, #0x30]
+ add r9, r7, #0x74
+ mov r8, #0x20
+_020A39D8:
+ ldrb r0, [r4, #0x5a]
+ cmp r0, #0x0
+ beq _020A3A30
+ ldr r0, [r4, #0x54]
+ cmp r0, #0x0
+ bne _020A3A30
+ ldrh r0, [r4, #0x58]
+ cmp r0, #0x0
+ bne _020A3A30
+ mov r0, r4
+ mov r1, r9
+ mov r2, r8
+ bl memcmp
+_020A3A0C: ; 0x020A3A0C
+ cmp r0, #0x0
+ bne _020A3A30
+ mov r1, r7
+ add r0, r4, #0x20
+ mov r2, #0x30
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ strb r0, [r7, #0x30]
+ b _020A3A40
+_020A3A30:
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ add r4, r4, #0x5c
+ blt _020A39D8
+_020A3A40:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_020A3A54: .word 0x021CA6FC
+
+ arm_func_start FUN_020A3A58
+FUN_020A3A58: ; 0x020A3A58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, r4
+ add r1, r5, #0x10
+ mov r2, #0x8
+ bl FUN_020A4044
+ ldr r0, [r5, #0x10]
+ ldr r1, _020A3AC8 ; =0x021062EC
+ mov r0, r0, lsr #0x3
+ and r0, r0, #0x3f
+ cmp r0, #0x38
+ rsblt r2, r0, #0x38
+ rsbge r2, r0, #0x78
+ mov r0, r5
+ bl FUN_020A3ACC
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0x8
+ bl FUN_020A3ACC
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x10
+ bl FUN_020A4044
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A3AC8: .word 0x021062EC
+
+ arm_func_start FUN_020A3ACC
+FUN_020A3ACC:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r3, [r8, #0x10]
+ mov r6, r2
+ add r0, r3, r6, lsl #0x3
+ str r0, [r8, #0x10]
+ ldr r0, [r8, #0x10]
+ mov r2, r3, lsr #0x3
+ cmp r0, r6, lsl #0x3
+ ldrcc r0, [r8, #0x14]
+ and r4, r2, #0x3f
+ addcc r0, r0, #0x1
+ strcc r0, [r8, #0x14]
+ ldr r0, [r8, #0x14]
+ rsb r5, r4, #0x40
+ add r0, r0, r6, lsr #0x1d
+ mov r7, r1
+ str r0, [r8, #0x14]
+ cmp r6, r5
+ blo _020A3B6C
+ add r1, r8, #0x18
+ mov r0, r7
+ mov r2, r5
+ add r1, r1, r4
+ bl MI_CpuCopy8
+ mov r0, r8
+ add r1, r8, #0x18
+ mov r4, #0x0
+ bl FUN_020A3BD8
+ add r0, r5, #0x3f
+ cmp r0, r6
+ bhs _020A3B70
+_020A3B4C:
+ mov r0, r8
+ add r1, r7, r5
+ bl FUN_020A3BD8
+ add r5, r5, #0x40
+ add r0, r5, #0x3f
+ cmp r0, r6
+ blo _020A3B4C
+ b _020A3B70
+_020A3B6C:
+ mov r5, #0x0
+_020A3B70:
+ add r1, r8, #0x18
+ add r0, r7, r5
+ add r1, r1, r4
+ sub r2, r6, r5
+ bl MI_CpuCopy8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020A3B8C
+FUN_020A3B8C: ; 0x020A3B8C
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r2, #0x58
+ mov r4, r0
+ bl MI_CpuFill8
+ ldr r1, _020A3BC8 ; =0x67452301
+ ldr r0, _020A3BCC ; =0xEFCDAB89
+ str r1, [r4, #0x0]
+ ldr r1, _020A3BD0 ; =0x98BADCFE
+ str r0, [r4, #0x4]
+ ldr r0, _020A3BD4 ; =0x10325476
+ str r1, [r4, #0x8]
+ str r0, [r4, #0xc]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A3BC8: .word 0x67452301
+_020A3BCC: .word 0xEFCDAB89
+_020A3BD0: .word 0x98BADCFE
+_020A3BD4: .word 0x10325476
+
+ arm_func_start FUN_020A3BD8
+FUN_020A3BD8: ; 0x020A3BD8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x44
+ str r0, [sp, #0x0]
+ ldr r3, [sp, #0x0]
+ add r0, sp, #0x4
+ mov r2, #0x40
+ ldr r7, [r3, #0x0]
+ ldr r6, [r3, #0x4]
+ ldr r5, [r3, #0x8]
+ ldr r4, [r3, #0xc]
+ bl FUN_020A402C
+ ldr r2, _020A4024 ; =0x021062AC
+ mov r3, #0x0
+ ldr r1, _020A4028 ; =0x0210632C
+ mov r11, r3
+ add r0, sp, #0x4
+ mov r10, r2
+_020A3C1C:
+ ldrb r9, [r2, #0x0]
+ add r8, r3, #0x1
+ eor r12, r5, r4
+ and r12, r6, r12
+ eor r12, r4, r12
+ ldr r9, [r0, r9, lsl #0x2]
+ ldr lr, [r1, r3, lsl #0x2]
+ add r9, r12, r9
+ add r9, lr, r9
+ add r9, r7, r9
+ mov r7, r9, lsl #0x7
+ orr r7, r7, r9, lsr #0x19
+ ldrb r9, [r10, r8]
+ add r7, r6, r7
+ ldr r8, [r1, r8, lsl #0x2]
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r12, r6, r5
+ and r12, r7, r12
+ eor r12, r5, r12
+ add r9, r12, r9
+ add r9, r8, r9
+ add r8, r3, #0x2
+ add r9, r4, r9
+ mov r4, r9, lsl #0xc
+ orr r4, r4, r9, lsr #0x14
+ add r4, r7, r4
+ ldr r9, [r1, r8, lsl #0x2]
+ ldrb r12, [r10, r8]
+ eor r8, r7, r6
+ and r8, r4, r8
+ eor r8, r6, r8
+ ldr lr, [r0, r12, lsl #0x2]
+ add r12, r3, #0x3
+ add r8, r8, lr
+ add r8, r9, r8
+ add r8, r5, r8
+ mov r5, r8, lsl #0x11
+ orr r5, r5, r8, lsr #0xf
+ add r5, r4, r5
+ ldr r9, [r1, r12, lsl #0x2]
+ ldrb r12, [r10, r12]
+ eor r8, r4, r7
+ and r8, r5, r8
+ eor r8, r7, r8
+ ldr r12, [r0, r12, lsl #0x2]
+ add r2, r2, #0x4
+ add r8, r8, r12
+ add r8, r9, r8
+ add r8, r6, r8
+ mov r6, r8, lsl #0x16
+ orr r6, r6, r8, lsr #0xa
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r11, r11, #0x1
+ cmp r11, #0x4
+ blt _020A3C1C
+ add r8, r10, r3
+ mov r2, #0x0
+ ldr r1, _020A4028 ; =0x0210632C
+ add r0, sp, #0x4
+ ldr lr, _020A4024 ; =0x021062AC
+_020A3D10:
+ ldrb r10, [r8, #0x0]
+ add r9, r3, #0x1
+ eor r11, r6, r5
+ and r11, r4, r11
+ eor r11, r5, r11
+ ldr r10, [r0, r10, lsl #0x2]
+ ldr r12, [r1, r3, lsl #0x2]
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r7, r10
+ mov r7, r10, lsl #0x5
+ orr r7, r7, r10, lsr #0x1b
+ ldrb r10, [lr, r9]
+ add r7, r6, r7
+ ldr r9, [r1, r9, lsl #0x2]
+ ldr r10, [r0, r10, lsl #0x2]
+ eor r11, r7, r6
+ and r11, r5, r11
+ eor r11, r6, r11
+ add r10, r11, r10
+ add r10, r9, r10
+ add r9, r3, #0x2
+ add r10, r4, r10
+ mov r4, r10, lsl #0x9
+ orr r4, r4, r10, lsr #0x17
+ add r4, r7, r4
+ ldr r12, [r1, r9, lsl #0x2]
+ ldrb r9, [lr, r9]
+ eor r10, r4, r7
+ and r10, r6, r10
+ eor r11, r7, r10
+ ldr r10, [r0, r9, lsl #0x2]
+ add r9, r3, #0x3
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r5, r10
+ mov r5, r10, lsl #0xe
+ orr r5, r5, r10, lsr #0x12
+ add r5, r4, r5
+ ldr r10, [r1, r9, lsl #0x2]
+ ldrb r11, [lr, r9]
+ eor r9, r5, r4
+ and r9, r7, r9
+ eor r9, r4, r9
+ ldr r11, [r0, r11, lsl #0x2]
+ add r8, r8, #0x4
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r6, r9
+ mov r6, r9, lsl #0x14
+ orr r6, r6, r9, lsr #0xc
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r2, r2, #0x1
+ cmp r2, #0x4
+ blt _020A3D10
+ add r8, lr, r3
+ mov lr, #0x0
+ ldr r2, _020A4028 ; =0x0210632C
+ add r0, sp, #0x4
+_020A3E00:
+ ldrb r1, [r8, #0x0]
+ eor r12, r6, r5
+ add lr, lr, #0x1
+ ldr r11, [r0, r1, lsl #0x2]
+ eor r12, r4, r12
+ ldr r1, [r2, r3, lsl #0x2]
+ add r11, r12, r11
+ add r1, r1, r11
+ add r7, r7, r1
+ mov r1, r7, lsl #0x4
+ orr r1, r1, r7, lsr #0x1c
+ add r7, r6, r1
+ add r10, r3, #0x1
+ ldr r1, _020A4024 ; =0x021062AC
+ ldr r12, [r2, r10, lsl #0x2]
+ ldrb r1, [r1, r10]
+ eor r10, r7, r6
+ eor r11, r5, r10
+ ldr r10, [r0, r1, lsl #0x2]
+ add r9, r3, #0x2
+ add r10, r11, r10
+ add r10, r12, r10
+ add r4, r4, r10
+ ldr sl, _020A4024 ; =0x021062AC
+ ldr r1, [r2, r9, lsl #0x2]
+ ldrb r9, [r10, r9]
+ mov r10, r4, lsl #0xb
+ orr r4, r10, r4, lsr #0x15
+ add r4, r7, r4
+ eor r10, r4, r7
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r10, r6, r10
+ add r9, r10, r9
+ add r1, r1, r9
+ add r5, r5, r1
+ add r10, r3, #0x3
+ ldr sb, _020A4024 ; =0x021062AC
+ mov r1, r5, lsl #0x10
+ ldrb r9, [r9, r10]
+ orr r1, r1, r5, lsr #0x10
+ add r5, r4, r1
+ ldr r1, [r2, r10, lsl #0x2]
+ eor r10, r5, r4
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r10, r7, r10
+ add r9, r10, r9
+ add r1, r1, r9
+ add r6, r6, r1
+ mov r1, r6, lsl #0x17
+ orr r1, r1, r6, lsr #0x9
+ add r8, r8, #0x4
+ add r6, r5, r1
+ add r3, r3, #0x4
+ cmp lr, #0x4
+ blt _020A3E00
+ ldr r0, _020A4024 ; =0x021062AC
+ ldr r1, _020A4028 ; =0x0210632C
+ add r8, r0, r3
+ ldr lr, _020A4024 ; =0x021062AC
+ mov r2, #0x0
+ add r0, sp, #0x4
+_020A3EF4:
+ ldrb r10, [r8, #0x0]
+ add r9, r3, #0x1
+ mvn r11, r4
+ orr r11, r6, r11
+ eor r11, r5, r11
+ ldr r10, [r0, r10, lsl #0x2]
+ ldr r12, [r1, r3, lsl #0x2]
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r7, r10
+ mov r7, r10, lsl #0x6
+ orr r7, r7, r10, lsr #0x1a
+ ldrb r10, [lr, r9]
+ add r7, r6, r7
+ ldr r9, [r1, r9, lsl #0x2]
+ ldr r10, [r0, r10, lsl #0x2]
+ mvn r11, r5
+ orr r11, r7, r11
+ eor r11, r6, r11
+ add r10, r11, r10
+ add r10, r9, r10
+ add r9, r3, #0x2
+ add r10, r4, r10
+ mov r4, r10, lsl #0xa
+ orr r4, r4, r10, lsr #0x16
+ add r4, r7, r4
+ ldr r12, [r1, r9, lsl #0x2]
+ ldrb r9, [lr, r9]
+ mvn r10, r6
+ orr r10, r4, r10
+ eor r11, r7, r10
+ ldr r10, [r0, r9, lsl #0x2]
+ add r9, r3, #0x3
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r5, r10
+ mov r5, r10, lsl #0xf
+ orr r5, r5, r10, lsr #0x11
+ add r5, r4, r5
+ ldr r10, [r1, r9, lsl #0x2]
+ ldrb r11, [lr, r9]
+ mvn r9, r7
+ orr r9, r5, r9
+ eor r9, r4, r9
+ ldr r11, [r0, r11, lsl #0x2]
+ add r8, r8, #0x4
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r6, r9
+ mov r6, r9, lsl #0x15
+ orr r6, r6, r9, lsr #0xb
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r2, r2, #0x1
+ cmp r2, #0x4
+ blt _020A3EF4
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ add r1, r0, r7
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ add r1, r0, r6
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x4]
+ ldr r0, [r0, #0x8]
+ add r1, r0, r5
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x8]
+ ldr r0, [r0, #0xc]
+ add r1, r0, r4
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0xc]
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A4024: .word 0x021062AC
+_020A4028: .word 0x0210632C
+
+ arm_func_start FUN_020A402C
+FUN_020A402C: ; 0x020A402C
+ ldr ip, _020A4040 ; =MI_CpuCopy8
+ mov r3, r0
+ mov r0, r1
+ mov r1, r3
+ bx r12
+ .balign 4
+_020A4040: .word MI_CpuCopy8
+
+ arm_func_start FUN_020A4044
+FUN_020A4044: ; 0x020A4044
+ ldr ip, _020A4058 ; =MI_CpuCopy8
+ mov r3, r0
+ mov r0, r1
+ mov r1, r3
+ bx r12
+ .balign 4
+_020A4058: .word MI_CpuCopy8
+
+ arm_func_start FUN_020A405C
+FUN_020A405C: ; 0x020A405C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ ldr r1, _020A4094 ; =0x0210642D
+ mov r5, r0
+ mov r2, #0x2c
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x14
+ bl FUN_020A4930
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A4094: .word 0x0210642D
+
+ arm_func_start FUN_020A4098
+FUN_020A4098: ; 0x020A4098
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, r4
+ add r1, r5, #0x14
+ mov r2, #0x8
+ bl FUN_020A4930
+ ldr r0, [r5, #0x18]
+ ldr r1, _020A4108 ; =0x0210642C
+ mov r0, r0, lsr #0x3
+ and r0, r0, #0x3f
+ cmp r0, #0x38
+ rsblt r2, r0, #0x38
+ rsbge r2, r0, #0x78
+ mov r0, r5
+ bl FUN_020A410C
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0x8
+ bl FUN_020A410C
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x14
+ bl FUN_020A4930
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A4108: .word 0x0210642C
+
+ arm_func_start FUN_020A410C
+FUN_020A410C:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r3, [r8, #0x18]
+ mov r6, r2
+ add r0, r3, r6, lsl #0x3
+ str r0, [r8, #0x18]
+ ldr r0, [r8, #0x18]
+ mov r2, r3, lsr #0x3
+ cmp r0, r6, lsl #0x3
+ ldrcc r0, [r8, #0x14]
+ and r4, r2, #0x3f
+ addcc r0, r0, #0x1
+ strcc r0, [r8, #0x14]
+ ldr r0, [r8, #0x14]
+ rsb r5, r4, #0x40
+ add r0, r0, r6, lsr #0x1d
+ mov r7, r1
+ str r0, [r8, #0x14]
+ cmp r6, r5
+ blo _020A41AC
+ add r1, r8, #0x1c
+ mov r0, r7
+ mov r2, r5
+ add r1, r1, r4
+ bl MI_CpuCopy8
+ mov r0, r8
+ add r1, r8, #0x1c
+ mov r4, #0x0
+ bl FUN_020A4224
+ add r0, r5, #0x3f
+ cmp r0, r6
+ bhs _020A41B0
+_020A418C:
+ mov r0, r8
+ add r1, r7, r5
+ bl FUN_020A4224
+ add r5, r5, #0x40
+ add r0, r5, #0x3f
+ cmp r0, r6
+ blo _020A418C
+ b _020A41B0
+_020A41AC:
+ mov r5, #0x0
+_020A41B0:
+ add r1, r8, #0x1c
+ add r0, r7, r5
+ add r1, r1, r4
+ sub r2, r6, r5
+ bl MI_CpuCopy8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020A41CC
+FUN_020A41CC: ; 0x020A41CC
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r2, #0x5c
+ mov r4, r0
+ bl MI_CpuFill8
+ ldr r0, _020A4210 ; =0x67452301
+ ldr r1, _020A4214 ; =0xEFCDAB89
+ str r0, [r4, #0x0]
+ ldr r0, _020A4218 ; =0x98BADCFE
+ str r1, [r4, #0x4]
+ ldr r1, _020A421C ; =0x10325476
+ str r0, [r4, #0x8]
+ ldr r0, _020A4220 ; =0xC3D2E1F0
+ str r1, [r4, #0xc]
+ str r0, [r4, #0x10]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A4210: .word 0x67452301
+_020A4214: .word 0xEFCDAB89
+_020A4218: .word 0x98BADCFE
+_020A421C: .word 0x10325476
+_020A4220: .word 0xC3D2E1F0
+
+ arm_func_start FUN_020A4224
+FUN_020A4224: ; 0x020A4224
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ str r0, [sp, #0x0]
+ ldr r3, [sp, #0x0]
+ add r0, sp, #0x10
+ mov r2, #0x40
+ ldr r6, [r3, #0x0]
+ ldr r7, [r3, #0x4]
+ ldr r8, [r3, #0x8]
+ ldr r5, [r3, #0xc]
+ ldr r4, [r3, #0x10]
+ bl FUN_020A48CC
+ mov r2, #0x0
+ ldr r3, _020A48BC ; =0x5A827999
+ mov r0, r2
+ add r1, sp, #0x10
+_020A4264:
+ eor r9, r8, r5
+ mov r10, r6, lsl #0x5
+ and r9, r7, r9
+ orr r10, r10, r6, lsr #0x1b
+ eor r9, r5, r9
+ mov r11, r7, lsl #0x1e
+ orr r7, r11, r7, lsr #0x2
+ eor r11, r7, r8
+ add r9, r10, r9
+ ldr r12, [r1, r2, lsl #0x2]
+ and r10, r6, r11
+ add r9, r12, r9
+ add r9, r9, r3
+ add r4, r4, r9
+ add r9, r2, #0x1
+ ldr r9, [r1, r9, lsl #0x2]
+ eor r10, r8, r10
+ mov r11, r4, lsl #0x5
+ orr r11, r11, r4, lsr #0x1b
+ add r10, r11, r10
+ add r10, r9, r10
+ mov r9, r6, lsl #0x1e
+ add r10, r10, r3
+ add r5, r5, r10
+ orr r6, r9, r6, lsr #0x2
+ add r9, r2, #0x2
+ ldr r10, [r1, r9, lsl #0x2]
+ mov r9, r5, lsl #0x5
+ orr r9, r9, r5, lsr #0x1b
+ eor r11, r6, r7
+ and r11, r4, r11
+ eor r11, r7, r11
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r9, r3
+ add r8, r8, r9
+ mov r9, r4, lsl #0x1e
+ orr r4, r9, r4, lsr #0x2
+ add r9, r2, #0x3
+ ldr r10, [r1, r9, lsl #0x2]
+ mov r9, r8, lsl #0x5
+ orr r9, r9, r8, lsr #0x1b
+ eor r11, r4, r6
+ and r11, r5, r11
+ eor r11, r6, r11
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r9, r3
+ add r7, r7, r9
+ mov r9, r5, lsl #0x1e
+ orr r5, r9, r5, lsr #0x2
+ add r9, r2, #0x4
+ ldr r10, [r1, r9, lsl #0x2]
+ mov r9, r7, lsl #0x5
+ orr r9, r9, r7, lsr #0x1b
+ eor r11, r5, r4
+ and r11, r8, r11
+ eor r11, r4, r11
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r9, r3
+ add r6, r6, r9
+ mov r9, r8, lsl #0x1e
+ orr r8, r9, r8, lsr #0x2
+ add r2, r2, #0x5
+ add r0, r0, #0x1
+ cmp r0, #0x3
+ blt _020A4264
+ eor r0, r8, r5
+ mov r2, r6, lsl #0x5
+ and r0, r7, r0
+ orr r3, r2, r6, lsr #0x1b
+ eor r0, r5, r0
+ add r3, r3, r0
+ ldr r9, [sp, #0x4c]
+ ldr r0, _020A48BC ; =0x5A827999
+ add r3, r9, r3
+ add r3, r3, r0
+ mov r2, r7, lsl #0x1e
+ orr r9, r2, r7, lsr #0x2
+ mov r0, #0x0
+ add r4, r4, r3
+ bl FUN_020A4988
+ eor r1, r9, r8
+ mov r3, r4, lsl #0x5
+ and r1, r6, r1
+ mov r2, r6, lsl #0x1e
+ orr r3, r3, r4, lsr #0x1b
+ eor r1, r8, r1
+ add r1, r3, r1
+ add r3, r1, r0
+ ldr r0, _020A48BC ; =0x5A827999
+ add r1, sp, #0x10
+ add r3, r3, r0
+ orr r10, r2, r6, lsr #0x2
+ mov r0, #0x1
+ add r5, r5, r3
+ bl FUN_020A4988
+ eor r1, r10, r9
+ mov r2, r5, lsl #0x5
+ and r1, r4, r1
+ orr r2, r2, r5, lsr #0x1b
+ eor r1, r9, r1
+ add r1, r2, r1
+ add r2, r1, r0
+ ldr r0, _020A48BC ; =0x5A827999
+ mov r1, r4, lsl #0x1e
+ add r0, r2, r0
+ orr r6, r1, r4, lsr #0x2
+ add r8, r8, r0
+ add r1, sp, #0x10
+ mov r0, #0x2
+ bl FUN_020A4988
+ mov r1, r8, lsl #0x5
+ orr r2, r1, r8, lsr #0x1b
+ eor r1, r6, r10
+ and r1, r5, r1
+ eor r1, r10, r1
+ add r1, r2, r1
+ add r2, r1, r0
+ ldr r0, _020A48BC ; =0x5A827999
+ mov r1, r5, lsl #0x1e
+ add r0, r2, r0
+ orr r7, r1, r5, lsr #0x2
+ add r9, r9, r0
+ mov r0, #0x3
+ add r1, sp, #0x10
+ bl FUN_020A4988
+ mov r1, r9, lsl #0x5
+ orr r2, r1, r9, lsr #0x1b
+ eor r1, r7, r6
+ and r1, r8, r1
+ eor r1, r6, r1
+ add r1, r2, r1
+ add r2, r1, r0
+ ldr r0, _020A48BC ; =0x5A827999
+ mov r1, r8, lsl #0x1e
+ add r0, r2, r0
+ add r10, r10, r0
+ mov r0, #0x0
+ ldr r4, _020A48C0 ; =0x6ED9EBA1
+ orr r8, r1, r8, lsr #0x2
+ mov r5, #0x4
+ str r0, [sp, #0xc]
+ add r11, sp, #0x10
+_020A44A8:
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ mov r2, r10, lsl #0x5
+ eor r1, r9, r8
+ orr r2, r2, r10, lsr #0x1b
+ eor r1, r7, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r1, r0, r4
+ mov r0, r9, lsl #0x1e
+ add r6, r6, r1
+ orr r9, r0, r9, lsr #0x2
+ add r0, r5, #0x1
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r6, lsl #0x5
+ orr r2, r1, r6, lsr #0x1b
+ eor r1, r10, r9
+ eor r1, r8, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r7, r7, r0
+ mov r0, r10, lsl #0x1e
+ orr r10, r0, r10, lsr #0x2
+ add r0, r5, #0x2
+ and r5, r0, #0xf
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r7, lsl #0x5
+ orr r2, r1, r7, lsr #0x1b
+ eor r1, r6, r10
+ eor r1, r9, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r8, r8, r0
+ mov r0, r6, lsl #0x1e
+ orr r6, r0, r6, lsr #0x2
+ add r0, r5, #0x1
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r8, lsl #0x5
+ orr r2, r1, r8, lsr #0x1b
+ eor r1, r7, r6
+ eor r1, r10, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r9, r9, r0
+ mov r0, r7, lsl #0x1e
+ orr r7, r0, r7, lsr #0x2
+ add r0, r5, #0x2
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r9, lsl #0x5
+ orr r2, r1, r9, lsr #0x1b
+ eor r1, r8, r7
+ eor r1, r6, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r10, r10, r0
+ mov r0, r8, lsl #0x1e
+ orr r8, r0, r8, lsr #0x2
+ ldr r0, [sp, #0xc]
+ add r5, r5, #0x3
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ cmp r0, #0x4
+ blt _020A44A8
+ mov r0, #0x0
+ ldr r4, _020A48C4 ; =0x8F1BBCDC
+ str r0, [sp, #0x8]
+ add r11, sp, #0x10
+_020A45DC:
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ orr r2, r8, r7
+ mov r1, r10, lsl #0x5
+ and r3, r9, r2
+ and r2, r8, r7
+ orr r1, r1, r10, lsr #0x1b
+ orr r2, r3, r2
+ add r1, r1, r2
+ add r1, r1, r0
+ mov r0, r9, lsl #0x1e
+ add r1, r1, r4
+ add r6, r6, r1
+ orr r9, r0, r9, lsr #0x2
+ add r0, r5, #0x1
+ mov r1, r11
+ bl FUN_020A4988
+ orr r2, r9, r8
+ mov r1, r6, lsl #0x5
+ and r3, r10, r2
+ and r2, r9, r8
+ orr r1, r1, r6, lsr #0x1b
+ orr r2, r3, r2
+ add r1, r1, r2
+ add r0, r1, r0
+ add r0, r0, r4
+ add r7, r7, r0
+ mov r0, r10, lsl #0x1e
+ orr r10, r0, r10, lsr #0x2
+ add r0, r5, #0x2
+ mov r1, r11
+ bl FUN_020A4988
+ orr r2, r10, r9
+ mov r1, r7, lsl #0x5
+ and r3, r6, r2
+ and r2, r10, r9
+ orr r1, r1, r7, lsr #0x1b
+ orr r2, r3, r2
+ add r1, r1, r2
+ add r0, r1, r0
+ add r0, r0, r4
+ add r8, r8, r0
+ mov r0, r6, lsl #0x1e
+ orr r6, r0, r6, lsr #0x2
+ add r0, r5, #0x3
+ and r5, r0, #0xf
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ orr r2, r6, r10
+ mov r1, r8, lsl #0x5
+ and r3, r7, r2
+ and r2, r6, r10
+ orr r1, r1, r8, lsr #0x1b
+ orr r2, r3, r2
+ add r1, r1, r2
+ add r0, r1, r0
+ add r0, r0, r4
+ add r9, r9, r0
+ mov r0, r7, lsl #0x1e
+ orr r7, r0, r7, lsr #0x2
+ add r0, r5, #0x1
+ mov r1, r11
+ bl FUN_020A4988
+ orr r2, r7, r6
+ mov r1, r9, lsl #0x5
+ and r3, r8, r2
+ and r2, r7, r6
+ orr r1, r1, r9, lsr #0x1b
+ orr r2, r3, r2
+ add r1, r1, r2
+ add r0, r1, r0
+ add r0, r0, r4
+ add r10, r10, r0
+ mov r0, r8, lsl #0x1e
+ orr r8, r0, r8, lsr #0x2
+ ldr r0, [sp, #0x8]
+ add r5, r5, #0x2
+ add r0, r0, #0x1
+ str r0, [sp, #0x8]
+ cmp r0, #0x4
+ blt _020A45DC
+ mov r0, #0x0
+ ldr r4, _020A48C8 ; =0xCA62C1D6
+ str r0, [sp, #0x4]
+ add r11, sp, #0x10
+_020A4738:
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ mov r2, r10, lsl #0x5
+ eor r1, r9, r8
+ orr r2, r2, r10, lsr #0x1b
+ eor r1, r7, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r1, r0, r4
+ mov r0, r9, lsl #0x1e
+ add r6, r6, r1
+ orr r9, r0, r9, lsr #0x2
+ add r0, r5, #0x1
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r6, lsl #0x5
+ orr r2, r1, r6, lsr #0x1b
+ eor r1, r10, r9
+ eor r1, r8, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r7, r7, r0
+ mov r0, r10, lsl #0x1e
+ orr r10, r0, r10, lsr #0x2
+ add r0, r5, #0x2
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r7, lsl #0x5
+ orr r2, r1, r7, lsr #0x1b
+ eor r1, r6, r10
+ eor r1, r9, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r8, r8, r0
+ mov r0, r6, lsl #0x1e
+ orr r6, r0, r6, lsr #0x2
+ add r0, r5, #0x3
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r8, lsl #0x5
+ orr r2, r1, r8, lsr #0x1b
+ eor r1, r7, r6
+ eor r1, r10, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r9, r9, r0
+ mov r0, r7, lsl #0x1e
+ orr r7, r0, r7, lsr #0x2
+ add r0, r5, #0x4
+ and r5, r0, #0xf
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020A4988
+ mov r1, r9, lsl #0x5
+ orr r2, r1, r9, lsr #0x1b
+ eor r1, r8, r7
+ eor r1, r6, r1
+ add r1, r2, r1
+ add r0, r1, r0
+ add r0, r0, r4
+ add r10, r10, r0
+ mov r0, r8, lsl #0x1e
+ orr r8, r0, r8, lsr #0x2
+ ldr r0, [sp, #0x4]
+ add r5, r5, #0x1
+ add r0, r0, #0x1
+ str r0, [sp, #0x4]
+ cmp r0, #0x4
+ blt _020A4738
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ add r1, r0, r10
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ add r1, r0, r9
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x4]
+ ldr r0, [r0, #0x8]
+ add r1, r0, r8
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x8]
+ ldr r0, [r0, #0xc]
+ add r1, r0, r7
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0xc]
+ ldr r0, [r0, #0x10]
+ add r1, r0, r6
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x10]
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A48BC: .word 0x5A827999
+_020A48C0: .word 0x6ED9EBA1
+_020A48C4: .word 0x8F1BBCDC
+_020A48C8: .word 0xCA62C1D6
+
+ arm_func_start FUN_020A48CC
+FUN_020A48CC: ; 0x020A48CC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ addls sp, sp, #0x4
+ mov r3, #0x0
+ ldmlsia sp!, {r4-r5,lr}
+ bxls lr
+_020A48E8:
+ add r12, r3, #0x1
+ ldrb lr, [r1, r3]
+ add r4, r3, #0x2
+ add r5, r3, #0x3
+ ldrb r12, [r1, r12]
+ mov lr, lr, lsl #0x18
+ add r3, r3, #0x4
+ ldrb r4, [r1, r4]
+ orr r12, lr, r12, lsl #0x10
+ ldrb lr, [r1, r5]
+ orr r4, r12, r4, lsl #0x8
+ cmp r3, r2
+ orr r4, lr, r4
+ str r4, [r0], #0x4
+ blo _020A48E8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A4930
+FUN_020A4930: ; 0x020A4930
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ movs r12, r2, lsr #0x2
+ mov lr, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+_020A494C:
+ ldr r3, [r1], #0x4
+ add lr, lr, #0x1
+ mov r2, r3, lsr #0x18
+ strb r2, [r0, #0x0]
+ mov r2, r3, lsr #0x10
+ strb r2, [r0, #0x1]
+ mov r2, r3, lsr #0x8
+ strb r2, [r0, #0x2]
+ strb r3, [r0, #0x3]
+ cmp lr, r12
+ add r0, r0, #0x4
+ blo _020A494C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A4988
+FUN_020A4988: ; 0x020A4988
+ add r2, r0, #0xd
+ add r12, r0, #0x2
+ and r3, r2, #0xf
+ eor r2, r0, #0x8
+ and r12, r12, #0xf
+ ldr r3, [r1, r3, lsl #0x2]
+ ldr r2, [r1, r2, lsl #0x2]
+ ldr r12, [r1, r12, lsl #0x2]
+ eor r2, r3, r2
+ ldr r3, [r1, r0, lsl #0x2]
+ eor r2, r12, r2
+ eor r3, r3, r2
+ mov r2, r3, lsl #0x1
+ orr r2, r2, r3, lsr #0x1f
+ str r2, [r1, r0, lsl #0x2]
+ ldr r0, [r1, r0, lsl #0x2]
+ bx lr
+
+ arm_func_start FUN_020A49CC
+FUN_020A49CC: ; 0x020A49CC
+ stmdb sp!, {r4-r6,lr}
+ cmp r2, #0x0
+ add r3, r0, #0x2
+ ldrb lr, [r0, #0x0]
+ ldrb r12, [r0, #0x1]
+ mov r4, #0x0
+ ble _020A4A2C
+_020A49E8:
+ add r5, lr, #0x1
+ and lr, r5, #0xff
+ ldrb r6, [r3, lr]
+ add r5, r12, r6
+ and r12, r5, #0xff
+ ldrb r5, [r3, r12]
+ strb r5, [r3, lr]
+ add r5, r6, r5
+ strb r6, [r3, r12]
+ and r5, r5, #0xff
+ ldrb r6, [r1, r4]
+ ldrb r5, [r3, r5]
+ eor r5, r6, r5
+ strb r5, [r1, r4]
+ add r4, r4, #0x1
+ cmp r4, r2
+ blt _020A49E8
+_020A4A2C:
+ strb lr, [r0, #0x0]
+ strb r12, [r0, #0x1]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A4A3C
+FUN_020A4A3C: ; 0x020A4A3C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r3, #0x0
+ strb r3, [r0, #0x0]
+ strb r3, [r0, #0x1]
+ add r7, r0, #0x2
+_020A4A54:
+ strb r3, [r7, r3]
+ add r3, r3, #0x1
+ cmp r3, #0x100
+ blt _020A4A54
+ mov r5, #0x0
+ mov r6, r5
+ mov r4, r5
+ mov r0, r5
+_020A4A74:
+ ldrb lr, [r7, r4]
+ ldrb r12, [r1, r5]
+ add r3, r5, #0x1
+ and r5, r3, #0xff
+ add r3, lr, r12
+ add r3, r6, r3
+ and r6, r3, #0xff
+ ldrb r3, [r7, r6]
+ cmp r5, r2
+ movge r5, r0
+ strb r3, [r7, r4]
+ add r4, r4, #0x1
+ strb lr, [r7, r6]
+ cmp r4, #0x100
+ blt _020A4A74
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A4ABC
+FUN_020A4ABC: ; 0x020A4ABC
+ ldrh r1, [r0, #0x0]
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020A4AC8
+FUN_020A4AC8: ; 0x020A4AC8
+ ldrh r1, [r0, #0x0]
+ ldrh r0, [r0, #-0x2]
+ mov r0, r0, lsl #0x10
+ bx lr
+
+ arm_func_start FUN_020A4AD8
+FUN_020A4AD8: ; 0x020A4AD8
+ ldrh r1, [r0, #0x0]
+ ldrh r2, [r0, #-0x2]
+ ldrh r3, [r0, #-0x4]
+ orr r0, r3, r2, lsl #0x10
+ bx lr
+
+ arm_func_start FUN_020A4AEC
+FUN_020A4AEC: ; 0x020A4AEC
+ ldrh r2, [r0, #0x0]
+ ldrh r3, [r0, #-0x2]
+ orr r1, r3, r2, lsl #0x10
+ ldrh r2, [r0, #-0x4]
+ ldrh r3, [r0, #-0x6]
+ orr r0, r3, r2, lsl #0x10
+ bx lr
+
+ arm_func_start FUN_020A4B08
+FUN_020A4B08: ; 0x020A4B08
+ sub r3, r2, #0x1
+ cmp r2, #0x1
+ add r0, r0, r3
+ ble _020A4B40
+_020A4B18:
+ ldrh r3, [r1, #0x0]
+ sub r2, r2, #0x2
+ sub r12, r0, #0x1
+ strb r3, [r0, #0x0]
+ ldrh r3, [r1], #0x2
+ cmp r2, #0x1
+ sub r0, r0, #0x2
+ mov r3, r3, asr #0x8
+ strb r3, [r12, #0x0]
+ bgt _020A4B18
+_020A4B40:
+ cmp r2, #0x0
+ ldrgth r1, [r1, #0x0]
+ strgtb r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020A4B50
+FUN_020A4B50: ; 0x020A4B50
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r2, r3, lsl #0x1
+ mov r1, #0x0
+ mov r4, r0
+ bl MI_CpuFill8
+ sub r0, r5, #0x1
+ cmp r5, #0x1
+ add r6, r6, r0
+ ble _020A4B9C
+_020A4B7C:
+ ldrb r1, [r6, #0x0]
+ ldrb r0, [r6, #-0x1]
+ sub r5, r5, #0x2
+ cmp r5, #0x1
+ add r0, r1, r0, lsl #0x8
+ strh r0, [r4], #0x2
+ sub r6, r6, #0x2
+ bgt _020A4B7C
+_020A4B9C:
+ cmp r5, #0x0
+ ldrgtb r0, [r6, #0x0]
+ strgth r0, [r4, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start FUN_020A4BB0
+FUN_020A4BB0: ; 0x020A4BB0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r10, r3
+ mov r3, #0x16
+ mul r4, r10, r3
+ ldr r3, _020A4DE0 ; =0x021C8EC8
+ mov r11, r0
+ ldr r3, [r3, #0x0]
+ mov r0, r4
+ ldr r9, [sp, #0x58]
+ str r1, [sp, #0x14]
+ str r2, [sp, #0x18]
+ blx r3
+ str r0, [sp, #0x1c]
+ cmp r0, #0x0
+ addeq sp, sp, #0x34
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ mov r2, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldr r0, [sp, #0x1c]
+ mov r1, r10
+ add r6, r0, r10, lsl #0x1
+ add r0, r6, r10, lsl #0x1
+ add r5, r0, r10, lsl #0x1
+ add r4, r5, r10, lsl #0x1
+ str r0, [sp, #0x20]
+ add r0, r4, r10, lsl #0x1
+ str r0, [sp, #0x24]
+ add r7, r0, r10, lsl #0x1
+ mov r0, r9
+ bl thunk_FUN_020a5a28
+ mov r8, r0
+ ldr r0, [sp, #0x1c]
+ mov r2, #0x1
+ mov r1, r8, lsl #0x1
+ strh r2, [r0, r1]
+ ldr r0, [sp, #0x20]
+ ldr r1, [sp, #0x1c]
+ str r0, [sp, #0x0]
+ mov r0, r6
+ mov r2, r9
+ mov r3, r10
+ bl FUN_020A4F2C
+ ldr r1, [sp, #0x1c]
+ mov r0, r5
+ mov r2, r6
+ mov r3, r10
+ bl FUN_020A5608
+ mov r0, r6
+ mov r1, r5
+ mov r2, #0x1
+ mov r3, r10
+ bl FUN_020A5748
+ str r10, [sp, #0x0]
+ mov r0, r6
+ mov r1, r6
+ mov r2, r9
+ mov r3, #0x0
+ str r7, [sp, #0x4]
+ bl FUN_020A5240
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x20]
+ ldr r2, [sp, #0x1c]
+ mov r3, r10
+ bl FUN_020A5608
+ ldr r1, [sp, #0x20]
+ str r10, [sp, #0x0]
+ mov r0, #0x0
+ mov r2, r9
+ mov r3, r1
+ str r7, [sp, #0x4]
+ bl FUN_020A5240
+ str r10, [sp, #0x0]
+ ldr r1, [sp, #0x1c]
+ mov r0, #0x0
+ mov r2, r9
+ mov r3, r11
+ str r7, [sp, #0x4]
+ bl FUN_020A5240
+ movs r0, r8, lsl #0x4
+ mov r7, #0x0
+ str r0, [sp, #0x28]
+ beq _020A4D9C
+ mov r0, #0x1
+ str r0, [sp, #0x2c]
+ mov r0, #0x8000
+ str r0, [sp, #0x30]
+_020A4D14:
+ str r8, [sp, #0x0]
+ str r9, [sp, #0x4]
+ str r6, [sp, #0x8]
+ str r5, [sp, #0xc]
+ ldr r1, [sp, #0x24]
+ ldr r2, [sp, #0x2c]
+ mov r0, r11
+ mov r3, r10
+ str r4, [sp, #0x10]
+ bl FUN_020A4DE8
+ ldr r0, [sp, #0x30]
+ and r1, r7, #0xf
+ mov r0, r0, lsr r1
+ sub r1, r8, r7, asr #0x4
+ sub r1, r1, #0x1
+ mov r2, r1, lsl #0x1
+ ldr r1, [sp, #0x18]
+ ldrh r1, [r1, r2]
+ ands r0, r0, r1
+ beq _020A4D8C
+ str r8, [sp, #0x0]
+ str r9, [sp, #0x4]
+ str r6, [sp, #0x8]
+ str r5, [sp, #0xc]
+ ldr r1, [sp, #0x24]
+ ldr r2, [sp, #0x20]
+ mov r0, r11
+ mov r3, r10
+ str r4, [sp, #0x10]
+ bl FUN_020A4DE8
+_020A4D8C:
+ ldr r0, [sp, #0x28]
+ add r7, r7, #0x1
+ cmp r7, r0
+ blo _020A4D14
+_020A4D9C:
+ str r8, [sp, #0x0]
+ str r9, [sp, #0x4]
+ str r6, [sp, #0x8]
+ str r5, [sp, #0xc]
+ ldr r1, [sp, #0x24]
+ mov r0, r11
+ mov r3, r10
+ mov r2, #0x0
+ str r4, [sp, #0x10]
+ bl FUN_020A4DE8
+ ldr r1, _020A4DE4 ; =0x021C8EF4
+ ldr r0, [sp, #0x1c]
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A4DE0: .word 0x021C8EC8
+_020A4DE4: .word 0x021C8EF4
+
+ arm_func_start FUN_020A4DE8
+FUN_020A4DE8: ; 0x020A4DE8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r5, r3
+ mov r7, r5, lsl #0x1
+ mov r8, r2
+ mov r2, r7
+ mov r6, r0
+ mov r9, r1
+ ldr r4, [sp, #0x20]
+ bl MI_CpuCopy8
+ cmp r8, #0x1
+ bne _020A4E2C
+ mov r0, r6
+ mov r1, r9
+ mov r2, r5
+ bl FUN_020A5438
+ b _020A4E48
+_020A4E2C:
+ cmp r8, #0x0
+ beq _020A4E48
+ mov r0, r6
+ mov r1, r9
+ mov r2, r8
+ mov r3, r5
+ bl FUN_020A5608
+_020A4E48:
+ ldr r0, [sp, #0x2c]
+ ldr r2, [sp, #0x28]
+ mov r1, r6
+ mov r3, r4
+ bl FUN_020A5608
+ sub r1, r5, r4
+ ldr r0, [sp, #0x2c]
+ mov r8, r1, lsl #0x1
+ mov r2, r8
+ add r0, r0, r4, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldr r0, [sp, #0x30]
+ ldr r1, [sp, #0x2c]
+ ldr r2, [sp, #0x24]
+ mov r3, r5
+ bl FUN_020A5608
+ mov r0, r6
+ mov r1, r6
+ ldr r2, [sp, #0x30]
+ mov r3, r5
+ bl FUN_020A5930
+ mov r2, r8
+ mov r0, r6
+ add r1, r6, r4, lsl #0x1
+ bl memmove
+ add r0, r6, r5, lsl #0x1
+ sub r0, r0, r4, lsl #0x1
+ mov r2, r4, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ ldr r1, [sp, #0x24]
+ mov r2, r5
+ bl FUN_020A570C
+_020A4ED4: ; 0x020A4ED4
+ cmp r0, #0x0
+ beq _020A4EF0
+ cmp r0, #0x1
+ beq _020A4F0C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020A4EF0:
+ mov r0, r6
+ mov r2, r7
+ mov r1, #0x0
+ bl MI_CpuFill8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_020A4F0C:
+ ldr r2, [sp, #0x24]
+ mov r0, r6
+ mov r1, r6
+ mov r3, r5
+ bl FUN_020A57BC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start FUN_020A4F2C
+FUN_020A4F2C: ; 0x020A4F2C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ ldr r9, [sp, #0x38]
+ mov r10, r3
+ add r11, r9, r10, lsl #0x1
+ add r8, r11, r10, lsl #0x1
+ add r7, r8, r10, lsl #0x1
+ add r6, r7, r10, lsl #0x1
+ add r5, r6, r10, lsl #0x1
+ str r0, [sp, #0x8]
+ mov r0, r1
+ add r1, r5, r10, lsl #0x1
+ str r1, [sp, #0x10]
+ mov r4, r10, lsl #0x1
+ str r2, [sp, #0xc]
+ mov r1, r9
+ mov r2, r4
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0xc]
+ mov r1, r8
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ strh r0, [r8, r4]
+ mov r0, r9
+ mov r1, r10
+ bl FUN_020A59DC
+_020A4F98: ; 0x020A4F98
+ cmp r0, #0x0
+ ble _020A503C
+_020A4FA0:
+ ldr r3, [sp, #0x10]
+ str r10, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r0, r11
+ mov r1, r8
+ mov r2, r9
+ mov r3, r5
+ bl FUN_020A5240
+ mov r0, r9
+ mov r1, r8
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, r5
+ mov r1, r9
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, r5
+ mov r1, r11
+ mov r2, r7
+ mov r3, r10
+ bl FUN_020A5608
+ mov r0, r5
+ mov r1, r6
+ mov r2, r5
+ mov r3, r10
+ bl FUN_020A57BC
+ mov r0, r7
+ mov r1, r6
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl MI_CpuCopy8
+ mov r0, r9
+ mov r1, r10
+ bl FUN_020A59DC
+_020A5034: ; 0x020A5034
+ cmp r0, #0x0
+ bgt _020A4FA0
+_020A503C:
+ ldr r2, [sp, #0xc]
+ mov r0, r6
+ mov r1, r6
+ mov r3, r10
+ bl FUN_020A5930
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x8]
+ ldr r4, [sp, #0x10]
+ str r10, [sp, #0x0]
+ mov r1, r6
+ mov r0, #0x0
+ str r4, [sp, #0x4]
+ bl FUN_020A5240
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_020A507C
+FUN_020A507C: ; 0x020A507C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ ldr r4, _020A5238 ; =0x021C8EC8
+ mov r8, r3
+ ldr r3, [r4, #0x0]
+ mov r10, r0
+ mov r0, r8, lsl #0x3
+ ldr r7, [sp, #0x40]
+ str r1, [sp, #0x8]
+ mov r9, r2
+ blx r3
+ movs r6, r0
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ sub r1, r8, #0x1
+ add r0, r10, #0x2
+ mov r2, r1, lsl #0x1
+ mov r1, #0x0
+ add r11, r6, r8, lsl #0x1
+ bl MI_CpuFill8
+ mov r2, #0x1
+ mov r0, r9
+ mov r1, r8
+ strh r2, [r10, #0x0]
+ bl thunk_FUN_020a5a28
+_020A50E4: ; 0x020A50E4
+ sub r0, r8, r0
+ mov r5, r0, lsl #0x4
+ mov r4, r8, lsl #0x4
+ cmp r5, r4
+ bhs _020A5140
+ mov r0, #0x8000
+_020A50FC:
+ sub r1, r8, r5, asr #0x4
+ sub r1, r1, #0x1
+ mov r1, r1, lsl #0x1
+ and r2, r5, #0xf
+ ldrh r1, [r9, r1]
+ mov r2, r0, lsr r2
+ ands r1, r2, r1
+ beq _020A5134
+ ldr r0, [sp, #0x8]
+ mov r1, r10
+ mov r2, r8, lsl #0x1
+ bl MI_CpuCopy8
+ add r5, r5, #0x1
+ b _020A5140
+_020A5134:
+ add r5, r5, #0x1
+ cmp r5, r4
+ blo _020A50FC
+_020A5140:
+ cmp r5, r4
+ bhs _020A521C
+ mov r0, r8, lsl #0x1
+ str r0, [sp, #0xc]
+ mov r0, #0x0
+ str r0, [sp, #0x10]
+ mov r0, #0x8000
+ str r0, [sp, #0x14]
+_020A5160:
+ mov r0, r6
+ mov r1, r10
+ mov r2, r8
+ bl FUN_020A5438
+ ldr r2, [sp, #0xc]
+ mov r0, r6
+ mov r1, r10
+ bl MI_CpuCopy8
+_020A5180: ; 0x020A5180
+ cmp r7, #0x0
+ beq _020A51A4
+ ldr r0, [sp, #0x10]
+ str r8, [sp, #0x0]
+ mov r1, r10
+ mov r2, r7
+ mov r3, r10
+ str r11, [sp, #0x4]
+ bl FUN_020A5240
+_020A51A4:
+ sub r0, r8, r5, asr #0x4
+ sub r0, r0, #0x1
+ mov r1, r0, lsl #0x1
+ ldr r0, [sp, #0x14]
+ and r2, r5, #0xf
+ mov r2, r0, lsr r2
+ ldrh r0, [r9, r1]
+ ands r0, r2, r0
+ beq _020A5210
+ ldr r2, [sp, #0x8]
+ mov r0, r6
+ mov r1, r10
+ mov r3, r8
+ bl FUN_020A5608
+ ldr r2, [sp, #0xc]
+ mov r0, r6
+ mov r1, r10
+ bl MI_CpuCopy8
+_020A51EC: ; 0x020A51EC
+ cmp r7, #0x0
+ beq _020A5210
+ ldr r0, [sp, #0x10]
+ str r8, [sp, #0x0]
+ mov r1, r10
+ mov r2, r7
+ mov r3, r10
+ str r11, [sp, #0x4]
+ bl FUN_020A5240
+_020A5210:
+ add r5, r5, #0x1
+ cmp r5, r4
+ blo _020A5160
+_020A521C:
+ ldr r1, _020A523C ; =0x021C8EF4
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A5238: .word 0x021C8EC8
+_020A523C: .word 0x021C8EF4
+
+ arm_func_start FUN_020A5240
+FUN_020A5240: ; 0x020A5240
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ ldr r9, [sp, #0x48]
+ ldr r6, [sp, #0x4c]
+ str r1, [sp, #0x4]
+ add r5, r6, r9, lsl #0x1
+ str r0, [sp, #0x0]
+ mov r10, r2
+ mov r0, r5
+ mov r2, r9, lsl #0x2
+ mov r1, #0x0
+ str r3, [sp, #0x8]
+ add r4, r5, r9, lsl #0x1
+ bl MI_CpuFill8
+ ldr r0, [sp, #0x4]
+ mov r1, r9
+ bl thunk_FUN_020a5a28
+ mov r11, r0
+ mov r0, r10
+ mov r1, r9
+ bl thunk_FUN_020a5a28
+ mov r7, r0
+ cmp r11, #0x0
+ ble _020A53E8
+ cmp r7, #0x0
+ ble _020A53E8
+ sub r0, r9, r11
+ add r0, r7, r0
+ sub r8, r0, #0x1
+ cmp r8, r9
+ blt _020A52D0
+ ldr r0, [sp, #0x4]
+ mov r1, r4
+ mov r2, r9, lsl #0x1
+ bl MI_CpuCopy8
+ b _020A53E8
+_020A52D0:
+ ldr r0, [sp, #0x4]
+ add r1, r5, r8, lsl #0x1
+ mov r2, r11, lsl #0x1
+ bl MI_CpuCopy8
+ cmp r7, #0x2
+ ble _020A5304
+ add r0, r10, r7, lsl #0x1
+ sub r0, r0, #0x2
+ mov r7, r7, lsl #0x1
+ bl FUN_020A4AD8
+ str r0, [sp, #0x14]
+ str r1, [sp, #0x10]
+ b _020A5340
+_020A5304:
+ cmp r7, #0x1
+ ble _020A5328
+ add r0, r10, r7, lsl #0x1
+ sub r0, r0, #0x2
+ mov r7, r7, lsl #0x1
+ bl FUN_020A4AC8
+ str r0, [sp, #0x14]
+ str r1, [sp, #0x10]
+ b _020A5340
+_020A5328:
+ add r0, r10, r7, lsl #0x1
+ sub r0, r0, #0x2
+ mov r7, r7, lsl #0x1
+ bl FUN_020A4ABC
+ str r0, [sp, #0x14]
+ str r1, [sp, #0x10]
+_020A5340:
+ cmp r8, r9
+ bge _020A53E8
+ mov r0, r9, lsl #0x1
+ sub r0, r0, #0x1
+ mov r11, r0, lsl #0x1
+ add r0, r4, r7
+ str r0, [sp, #0x1c]
+_020A535C:
+ mov r1, r5
+ add r0, r5, #0x2
+ mov r2, r11
+ bl memmove
+ ldr r0, [sp, #0x1c]
+ bl FUN_020A4AEC
+ ldr r2, [sp, #0x14]
+ ldr r3, [sp, #0x10]
+ bl _ll_udiv
+ mov r7, r0
+ ldr r0, _020A5434 ; =0x0000FFFF
+ cmp r7, r0
+ movhi r7, r0
+_020A5390:
+ mov r2, r7, lsl #0x10
+ mov r0, r6
+ mov r1, r10
+ mov r2, r2, lsr #0x10
+ mov r3, r9
+ bl FUN_020A5584
+ mov r0, r4
+ mov r1, r6
+ mov r2, r9
+ bl FUN_020A570C
+_020A53B8: ; 0x020A53B8
+ cmp r0, #0x0
+ sublt r7, r7, #0x1
+ blt _020A5390
+ mov r0, r4
+ mov r1, r4
+ mov r2, r6
+ mov r3, r9
+ bl FUN_020A57BC
+ strh r7, [r5, #0x0]
+ add r8, r8, #0x1
+ cmp r8, r9
+ blt _020A535C
+_020A53E8:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _020A5404
+ ldr r1, [sp, #0x0]
+ mov r0, r5
+ mov r2, r9, lsl #0x1
+ bl MI_CpuCopy8
+_020A5404:
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x24
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r1, [sp, #0x8]
+ mov r0, r4
+ mov r2, r9, lsl #0x1
+ bl MI_CpuCopy8
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A5434: .word 0x0000FFFF
+
+ arm_func_start FUN_020A5438
+FUN_020A5438: ; 0x020A5438
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ mov r8, r2
+ mov r10, r0
+ mov r0, r9
+ mov r1, r8
+ bl thunk_FUN_020a5a28
+ mov r11, r0
+ mov r0, r11, lsl #0x1
+ cmp r0, r8
+ bge _020A547C
+ sub r1, r8, r0
+ add r0, r10, r0, lsl #0x1
+ mov r2, r1, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+_020A547C:
+ cmp r11, #0x0
+ mov r1, #0x0
+ ble _020A54D4
+ mov r0, r1
+ sub r4, r8, #0x1
+_020A5490:
+ cmp r0, r8
+ bge _020A54D4
+ mov r2, r1, lsl #0x1
+ ldrh r5, [r9, r2]
+ mov r2, r0, lsl #0x1
+ cmp r0, r4
+ mul r3, r5, r5
+ strh r3, [r10, r2]
+ beq _020A54D4
+ add r2, r0, #0x1
+ add r1, r1, #0x1
+ mov r3, r3, lsr #0x10
+ mov r2, r2, lsl #0x1
+ strh r3, [r10, r2]
+ cmp r1, r11
+ add r0, r0, #0x2
+ blt _020A5490
+_020A54D4:
+ cmp r11, #0x0
+ mov r6, #0x0
+ addle sp, sp, #0x4
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+_020A54E8:
+ add r7, r6, #0x1
+ b _020A5554
+_020A54F0:
+ mov r1, r7, lsl #0x1
+ mov r0, r6, lsl #0x1
+ ldrh r1, [r9, r1]
+ ldrh r0, [r9, r0]
+ mul r4, r1, r0
+ ldr r0, _020A5580 ; =0x7FFF8000
+ cmp r4, r0
+ bhi _020A5528
+ mov r0, r10
+ mov r2, r5
+ mov r3, r8
+ mov r1, r4, lsl #0x1
+ bl FUN_020A56C4
+ b _020A5550
+_020A5528:
+ mov r0, r10
+ mov r1, r4
+ mov r2, r5
+ mov r3, r8
+ bl FUN_020A56C4
+ mov r0, r10
+ mov r1, r4
+ mov r2, r5
+ mov r3, r8
+ bl FUN_020A56C4
+_020A5550:
+ add r7, r7, #0x1
+_020A5554:
+ cmp r7, r11
+ bge _020A5568
+ add r5, r6, r7
+ cmp r5, r8
+ blt _020A54F0
+_020A5568:
+ add r6, r6, #0x1
+ cmp r6, r11
+ blt _020A54E8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A5580: .word 0x7FFF8000
+
+ arm_func_start FUN_020A5584
+FUN_020A5584: ; 0x020A5584
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ mov r4, r3
+ mov r7, r0
+ mov r0, r6
+ mov r1, r4
+ mov r5, r2
+ bl thunk_FUN_020a5a28
+ mov r3, #0x0
+ mov r12, r3
+ cmp r0, #0x0
+ ble _020A55D8
+_020A55B8:
+ mov r2, r12, lsl #0x1
+ ldrh r1, [r6, r2]
+ add r12, r12, #0x1
+ cmp r12, r0
+ mla r1, r5, r1, r3
+ strh r1, [r7, r2]
+ mov r3, r1, lsr #0x10
+ blt _020A55B8
+_020A55D8:
+ cmp r12, r4
+ movlt r0, r12, lsl #0x1
+ addlt r12, r12, #0x1
+ sub r1, r4, r12
+ strlth r3, [r7, r0]
+ mov r2, r1, lsl #0x1
+ add r0, r7, r12, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A5608
+FUN_020A5608: ; 0x020A5608
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r8, r3
+ mov r10, r1
+ mov r9, r2
+ mov r2, r8, lsl #0x1
+ mov r1, #0x0
+ mov r11, r0
+ bl MI_CpuFill8
+ mov r0, r10
+ mov r1, r8
+ bl thunk_FUN_020a5a28
+ mov r5, r0
+ mov r0, r9
+ mov r1, r8
+ bl thunk_FUN_020a5a28
+_020A5648: ; 0x020A5648
+ str r0, [sp, #0x0]
+ cmp r0, #0x0
+ mov r7, #0x0
+ addle sp, sp, #0xc
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ str r7, [sp, #0x4]
+_020A5664:
+ ldr r6, [sp, #0x4]
+ sub r4, r8, r7
+ b _020A5698
+_020A5670:
+ mov r1, r6, lsl #0x1
+ mov r0, r7, lsl #0x1
+ ldrh r2, [r10, r1]
+ ldrh r1, [r9, r0]
+ mov r0, r11
+ mov r3, r8
+ mul r1, r2, r1
+ add r2, r7, r6
+ bl FUN_020A56C4
+ add r6, r6, #0x1
+_020A5698:
+ cmp r6, r5
+ bge _020A56A8
+ cmp r6, r4
+ blt _020A5670
+_020A56A8:
+ ldr r0, [sp, #0x0]
+ add r7, r7, #0x1
+ cmp r7, r0
+ blt _020A5664
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start FUN_020A56C4
+FUN_020A56C4: ; 0x020A56C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ b _020A56E8
+_020A56D0:
+ mov lr, r2, lsl #0x1
+ ldrh r12, [r0, lr]
+ add r2, r2, #0x1
+ add r1, r1, r12
+ strh r1, [r0, lr]
+ mov r1, r1, lsr #0x10
+_020A56E8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ cmp r2, r3
+ blt _020A56D0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A570C
+FUN_020A570C:
+ subs r12, r2, #0x1
+ bmi _020A5740
+_020A5714:
+ mov r2, r12, lsl #0x1
+ ldrh r3, [r1, r2]
+ ldrh r2, [r0, r2]
+ cmp r2, r3
+ movhi r0, #0x1
+ bxhi lr
+ cmp r2, r3
+ mvncc r0, #0x0
+ bxcc lr
+ subs r12, r12, #0x1
+ bpl _020A5714
+_020A5740:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020A5748
+FUN_020A5748: ; 0x020A5748
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ mov r4, #0x0
+ ble _020A5780
+_020A5758:
+ mov lr, r4, lsl #0x1
+ ldrh r12, [r1, lr]
+ sub r12, r12, r2
+ mov r2, r12, lsr #0x10
+ strh r12, [r0, lr]
+ ands r2, r2, #0x1
+ beq _020A5780
+ add r4, r4, #0x1
+ cmp r4, r3
+ blt _020A5758
+_020A5780:
+ cmp r0, r1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r4, r4, #0x1
+ cmp r4, r3
+ ldmgeia sp!, {r4,lr}
+ bxge lr
+_020A579C:
+ mov r12, r4, lsl #0x1
+ ldrh r2, [r1, r12]
+ add r4, r4, #0x1
+ cmp r4, r3
+ strh r2, [r0, r12]
+ blt _020A579C
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A57BC
+FUN_020A57BC: ; 0x020A57BC
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r5, r3
+ mov r8, r0
+ mov r6, r2
+ mov r0, r7
+ mov r1, r5
+ bl thunk_FUN_020a5a28
+ mov r4, r0
+ mov r0, r6
+ mov r1, r5
+ bl thunk_FUN_020a5a28
+_020A57EC: ; 0x020A57EC
+ cmp r4, r0
+ movlt r4, r0
+ mov r3, #0x0
+ cmp r4, r5
+ addne r4, r4, #0x1
+ mov r12, r3
+ b _020A5828
+_020A5808:
+ mov r2, r12, lsl #0x1
+ ldrh r1, [r7, r2]
+ ldrh r0, [r6, r2]
+ add r12, r12, #0x1
+ sub r0, r1, r0
+ add r0, r3, r0
+ strh r0, [r8, r2]
+ mov r3, r0, asr #0x10
+_020A5828:
+ cmp r12, r4
+ blt _020A5808
+ cmp r12, r5
+ bge _020A5840
+ cmp r3, #0x0
+ bne _020A5808
+_020A5840:
+ cmp r8, r7
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ cmp r8, r6
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ sub r1, r5, r12
+ add r0, r8, r12, lsl #0x1
+ mov r2, r1, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020A5874
+FUN_020A5874: ; 0x020A5874
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r1
+ cmp r3, #0x0
+ mov r12, #0x0
+ ble _020A58A8
+_020A588C:
+ mov r2, r12, lsl #0x1
+ ldrh r1, [r0, r2]
+ add r12, r12, #0x1
+ cmp r12, r3
+ mvn r1, r1
+ strh r1, [r0, r2]
+ blt _020A588C
+_020A58A8:
+ mov r1, r0
+ mov r2, #0x1
+ bl FUN_020A58C0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A58C0
+FUN_020A58C0: ; 0x020A58C0
+ stmdb sp!, {r4,lr}
+ cmp r3, #0x0
+ mov r4, #0x0
+ ble _020A58F4
+_020A58D0:
+ mov lr, r4, lsl #0x1
+ ldrh r12, [r1, lr]
+ add r2, r2, r12
+ strh r2, [r0, lr]
+ movs r2, r2, lsr #0x10
+ beq _020A58F4
+ add r4, r4, #0x1
+ cmp r4, r3
+ blt _020A58D0
+_020A58F4:
+ cmp r0, r1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r4, r4, #0x1
+ cmp r4, r3
+ ldmgeia sp!, {r4,lr}
+ bxge lr
+_020A5910:
+ mov r12, r4, lsl #0x1
+ ldrh r2, [r1, r12]
+ add r4, r4, #0x1
+ cmp r4, r3
+ strh r2, [r0, r12]
+ blt _020A5910
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A5930
+FUN_020A5930: ; 0x020A5930
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r5, r3
+ mov r8, r0
+ mov r6, r2
+ mov r0, r7
+ mov r1, r5
+ bl thunk_FUN_020a5a28
+ mov r4, r0
+ mov r0, r6
+ mov r1, r5
+ bl thunk_FUN_020a5a28
+_020A5960: ; 0x020A5960
+ cmp r4, r0
+ movlt r4, r0
+ cmp r4, r5
+ addne r4, r4, #0x1
+ mov r3, #0x0
+ mov r12, r3
+ cmp r4, #0x0
+ ble _020A59A8
+_020A5980:
+ mov r2, r12, lsl #0x1
+ ldrh r1, [r7, r2]
+ ldrh r0, [r6, r2]
+ add r12, r12, #0x1
+ cmp r12, r4
+ add r0, r1, r0
+ add r0, r3, r0
+ strh r0, [r8, r2]
+ mov r3, r0, lsr #0x10
+ blt _020A5980
+_020A59A8:
+ cmp r8, r7
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ cmp r8, r6
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ sub r1, r5, r12
+ add r0, r8, r12, lsl #0x1
+ mov r2, r1, lsl #0x1
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start FUN_020A59DC
+FUN_020A59DC:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ sub r2, r1, #0x1
+ mov r2, r2, lsl #0x1
+ ldrh r2, [r0, r2]
+ ands r2, r2, #0x8000
+ addne sp, sp, #0x4
+ mvnne r0, #0x0
+ ldmneia sp!, {lr}
+ bxne lr
+ bl thunk_FUN_020a5a28
+_020A5A08: ; 0x020A5A08
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start thunk_FUN_020a5a28
+thunk_FUN_020a5a28:
+ b _020A5A28
+_020A5A24:
+ sub r1, r1, #0x1
+_020A5A28:
+ cmp r1, #0x0
+ beq _020A5A44
+ sub r2, r1, #0x1
+ mov r2, r2, lsl #0x1
+ ldrh r2, [r0, r2]
+ cmp r2, #0x0
+ beq _020A5A24
+_020A5A44:
+ mov r0, r1
+ bx lr
+
+ arm_func_start FUN_020A5A4C
+FUN_020A5A4C: ; 0x020A5A4C
+ mov r1, r0
+ mov r0, #0x0
+ mov r3, #0x1
+_020A5A58:
+ clz r2, r1
+ rsbs r2, r2, #0x1f
+ bxcc lr
+ bic r1, r1, r3, lsl r2
+ add r0, r0, #0x1
+ b _020A5A58
+
+ arm_func_start FUN_020A5A70
+FUN_020A5A70: ; 0x020A5A70
+ clz r0, r0
+ bx lr
+
+ arm_func_start FUN_020A5A78
+FUN_020A5A78: ; 0x020A5A78
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x0
+ bne _020A5D80
+ ldr r2, _020A5DA8 ; =0x021CA86C
+ mov r0, #0x0
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2000
+ strb r0, [r1, #0x26b]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r0, [r1, #0x82]
+ ldr r3, [r2, #0x0]
+ add r1, r3, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0xd
+ addls pc, pc, r1, lsl #0x2
+ b _020A5D4C
+_020A5AC4:
+ b _020A5D4C
+_020A5AC8:
+ b _020A5D4C
+_020A5ACC:
+ b _020A5D4C
+_020A5AD0:
+ b _020A5D4C
+_020A5AD4:
+ b _020A5D4C
+_020A5AD8:
+ b _020A5AFC
+_020A5ADC:
+ b _020A5AFC
+_020A5AE0:
+ b _020A5B24
+_020A5AE4:
+ b _020A5B4C
+_020A5AE8:
+ b _020A5C74
+_020A5AEC:
+ b _020A5CA4
+_020A5AF0:
+ b _020A5D4C
+_020A5AF4:
+ b _020A5C74
+_020A5AF8:
+ b _020A5CD4
+_020A5AFC:
+ mov r0, #0x3
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A5DAC ; =0x000008F5
+ mov r2, r1
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5B24:
+ mov r0, #0x3
+ bl FUN_020A6C38
+_020A5B2C: ; 0x020A5B2C
+ mov r0, #0x0
+ ldr r3, _020A5DB0 ; =0x000008FB
+ mov r1, r0
+ mov r2, r0
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5B4C:
+ add r1, r3, #0x2200
+ ldrh r4, [r1, #0xf8]
+ strh r0, [r1, #0xf8]
+ cmp r4, #0x12
+ bne _020A5C44
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2100
+ ldrh r3, [r1, #0x70]
+ and r12, r3, #0x24
+ cmp r12, #0x24
+ beq _020A5C44
+ orr r3, r3, #0x24
+ strh r3, [r1, #0x70]
+ ldr r2, [r2, #0x0]
+ add r1, r2, #0x2000
+ ldr r3, [r1, #0x264]
+ and r1, r3, #0xc0000
+ cmp r1, #0xc0000
+ moveq r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r12, r0, lsr #0x10
+ and r1, r3, #0x30000
+ cmp r1, #0x30000
+ movne r3, #0x1
+ add r1, r2, #0x2140
+ ldr r0, _020A5DB4 ; =FUN_020A6144
+ moveq r3, #0x0
+ mov r2, #0x0
+ str r12, [sp, #0x0]
+ bl WM_StartConnectEx
+ cmp r0, #0x2
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r0, #0x3
+ beq _020A5C14
+ cmp r0, #0x8
+ bne _020A5C14
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldr r0, _020A5DA8 ; =0x021CA86C
+ ldr r3, _020A5DB8 ; =0x0000091C
+ ldr r0, [r0, #0x0]
+ mov r2, r4
+ add r1, r0, #0x2140
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5C14:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A5DA8 ; =0x021CA86C
+ ldr r3, _020A5DBC ; =0x00000925
+ ldr r0, [r0, #0x0]
+ mov r2, r4
+ add r1, r0, #0x2140
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5C44:
+ mov r0, #0x3
+ bl FUN_020A6C38
+ ldr r0, _020A5DA8 ; =0x021CA86C
+ ldr r3, _020A5DC0 ; =0x0000092D
+ ldr r0, [r0, #0x0]
+ mov r2, r4
+ add r1, r0, #0x2140
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5C74:
+ mov r0, #0x3
+ bl FUN_020A6C38
+ ldr r0, _020A5DA8 ; =0x021CA86C
+ ldr r3, _020A5DC4 ; =0x00000935
+ ldr r1, [r0, #0x0]
+ mov r0, #0x0
+ add r1, r1, #0x2140
+ mov r2, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5CA4:
+ mov r0, #0x3
+ bl FUN_020A6C38
+ ldr r1, _020A5DA8 ; =0x021CA86C
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ ldr r3, _020A5DC8 ; =0x0000093C
+ mov r2, r0
+ add r1, r1, #0x2140
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5CD4:
+ ldr r0, _020A5DCC ; =FUN_020A6768
+ bl WM_PowerOff
+ cmp r0, #0x2
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r0, #0x3
+ beq _020A5D24
+ cmp r0, #0x8
+ bne _020A5D24
+ mov r0, #0xc
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A5DD0 ; =0x0000094A
+ mov r2, r1
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5D24:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A5DD4 ; =0x00000953
+ mov r2, r1
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5D4C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A5DA8 ; =0x021CA86C
+ ldr r3, _020A5DD8 ; =0x00000959
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2000
+ ldr r2, [r1, #0x260]
+ mov r1, #0x0
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5D80:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ mov r2, r1
+ mov r0, #0x7
+ mov r3, #0x960
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A5DA8: .word 0x021CA86C
+_020A5DAC: .word 0x000008F5
+_020A5DB0: .word 0x000008FB
+_020A5DB4: .word FUN_020A6144
+_020A5DB8: .word 0x0000091C
+_020A5DBC: .word 0x00000925
+_020A5DC0: .word 0x0000092D
+_020A5DC4: .word 0x00000935
+_020A5DC8: .word 0x0000093C
+_020A5DCC: .word FUN_020A6768
+_020A5DD0: .word 0x0000094A
+_020A5DD4: .word 0x00000953
+_020A5DD8: .word 0x00000959
+
+ arm_func_start FUN_020A5DDC
+FUN_020A5DDC: ; 0x020A5DDC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A5EF4
+_020A5DF4:
+ b _020A5E08
+_020A5DF8:
+ b _020A5EDC
+_020A5DFC:
+ b _020A5EF4
+_020A5E00:
+ b _020A5EDC
+_020A5E04:
+ b _020A5EF4
+_020A5E08:
+ ldr r0, _020A5F24 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0xc
+ bne _020A5E38
+ mov r0, #0xa
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A5E38:
+ ldr r0, _020A5F28 ; =FUN_020A6058
+ mov r1, #0x0
+ bl WM_Disconnect
+ cmp r0, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ cmp r0, #0x3
+ beq _020A5E94
+ cmp r0, #0x8
+ bne _020A5EAC
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldr r0, _020A5F24 ; =0x021CA86C
+ ldr r3, _020A5F2C ; =0x000008B4
+ ldr r1, [r0, #0x0]
+ mov r0, #0x1
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A5E94:
+ mov r0, #0xa
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A5EAC:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r1, _020A5F24 ; =0x021CA86C
+ mov r0, #0x7
+ ldr r1, [r1, #0x0]
+ mov r2, #0x0
+ add r1, r1, #0x2140
+ mov r3, #0x8c0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A5EDC:
+ mov r0, #0xa
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A5EF4:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A5F24 ; =0x021CA86C
+ ldr r3, _020A5F30 ; =0x000008D3
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A5F24: .word 0x021CA86C
+_020A5F28: .word FUN_020A6058
+_020A5F2C: .word 0x000008B4
+_020A5F30: .word 0x000008D3
+
+ arm_func_start FUN_020A5F34
+FUN_020A5F34: ; 0x020A5F34
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrh r0, [r4, #0x2]
+ cmp r0, #0x0
+ beq _020A5F50
+ cmp r0, #0x4
+ b _020A601C
+_020A5F50:
+ ldrh r0, [r4, #0x4]
+ cmp r0, #0xe
+ beq _020A5F68
+ cmp r0, #0xf
+ beq _020A5FC0
+ b _020A5FF0
+_020A5F68:
+ ldr r0, _020A6048 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0xc
+ bne _020A5F94
+ mov r0, #0x8
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5F94:
+ mov r0, #0x9
+ bl FUN_020A6C38
+ ldr r1, _020A6048 ; =0x021CA86C
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ ldr r3, _020A604C ; =0x00000872
+ mov r2, r0
+ add r1, r1, #0x2140
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5FC0:
+ ldr r0, [r4, #0x8]
+ ldrh r0, [r0, #0xe]
+ mov r0, r0, asr #0x8
+ and r0, r0, #0xff
+ bl FUN_020A89D0
+ ldr r0, [r4, #0x8]
+ mov r1, #0x620
+ bl DC_InvalidateRange
+ ldr r0, [r4, #0x8]
+ bl FUN_020A8934
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A5FF0:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A6048 ; =0x021CA86C
+ ldrh r2, [r4, #0x4]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020A6050 ; =0x00000881
+ add r1, r0, #0x2140
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A601C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A6048 ; =0x021CA86C
+ ldr r3, _020A6054 ; =0x0000088C
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A6048: .word 0x021CA86C
+_020A604C: .word 0x00000872
+_020A6050: .word 0x00000881
+_020A6054: .word 0x0000088C
+
+ arm_func_start FUN_020A6058
+FUN_020A6058: ; 0x020A6058
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A6108
+_020A6070:
+ b _020A6084
+_020A6074:
+ b _020A60F0
+_020A6078:
+ b _020A6108
+_020A607C:
+ b _020A60F0
+_020A6080:
+ b _020A6108
+_020A6084:
+ ldr r0, _020A6138 ; =0x021CA86C
+ ldr r1, [r0, #0x0]
+ add r0, r1, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0xc
+ bne _020A60B4
+ mov r0, #0xa
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A60B4:
+ add r1, r1, #0x2200
+ mov r2, #0x0
+ mov r0, #0x3
+ strh r2, [r1, #0x82]
+ bl FUN_020A6C38
+ ldr r1, _020A6138 ; =0x021CA86C
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ ldr r3, _020A613C ; =0x0000083D
+ mov r2, r0
+ add r1, r1, #0x2140
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A60F0:
+ mov r0, #0xa
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6108:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A6138 ; =0x021CA86C
+ ldr r3, _020A6140 ; =0x0000084F
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6138: .word 0x021CA86C
+_020A613C: .word 0x0000083D
+_020A6140: .word 0x0000084F
+
+ arm_func_start FUN_020A6144
+FUN_020A6144: ; 0x020A6144
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrh r0, [r4, #0x2]
+ cmp r0, #0xc
+ addls pc, pc, r0, lsl #0x2
+ b _020A638C
+_020A615C:
+ b _020A6190
+_020A6160:
+ b _020A6364
+_020A6164:
+ b _020A638C
+_020A6168:
+ b _020A638C
+_020A616C:
+ b _020A638C
+_020A6170:
+ b _020A638C
+_020A6174:
+ b _020A6378
+_020A6178:
+ b _020A638C
+_020A617C:
+ b _020A638C
+_020A6180:
+ b _020A638C
+_020A6184:
+ b _020A638C
+_020A6188:
+ b _020A6378
+_020A618C:
+ b _020A6378
+_020A6190:
+ ldrh r0, [r4, #0x8]
+ cmp r0, #0x9
+ bgt _020A61D0
+ cmp r0, #0x0
+ addge pc, pc, r0, lsl #0x2
+ b _020A6338
+_020A61A8: ; 0x020A61A8
+ b _020A6338
+_020A61AC: ; 0x020A61AC
+ b _020A6338
+_020A61B0: ; 0x020A61B0
+ b _020A6338
+_020A61B4: ; 0x020A61B4
+ b _020A6338
+_020A61B8: ; 0x020A61B8
+ b _020A6338
+_020A61BC: ; 0x020A61BC
+ b _020A6338
+_020A61C0: ; 0x020A61C0
+ b _020A63B0
+_020A61C4: ; 0x020A61C4
+ b _020A6258
+_020A61C8: ; 0x020A61C8
+ b _020A61E0
+_020A61CC: ; 0x020A61CC
+ b _020A61E0
+_020A61D0:
+ cmp r0, #0x1a
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ b _020A6338
+_020A61E0:
+ ldr r1, _020A63B8 ; =0x021CA86C
+ ldr r2, [r1, #0x0]
+ add r0, r2, #0x2000
+ ldr r0, [r0, #0x260]
+ sub r0, r0, #0x8
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A63B0
+_020A6200:
+ b _020A6220
+_020A6204:
+ b _020A6230
+_020A6208:
+ b _020A6214
+_020A620C:
+ b _020A63B0
+_020A6210:
+ b _020A624C
+_020A6214:
+ add r0, r2, #0x2200
+ mov r1, #0x0
+ strh r1, [r0, #0x82]
+_020A6220:
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6230:
+ add r0, r2, #0x2200
+ mov r2, #0x0
+ strh r2, [r0, #0x82]
+ ldr r0, [r1, #0x0]
+ mov r1, #0x6
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+_020A624C:
+ bl FUN_020A6B28
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6258:
+ ldr r1, _020A63B8 ; =0x021CA86C
+ ldr r3, [r1, #0x0]
+ add r0, r3, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0xc
+ bne _020A6284
+ mov r0, #0x8
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6284:
+ ldrh r2, [r4, #0xa]
+ cmp r2, #0x1
+ blo _020A632C
+ ldr r0, _020A63BC ; =0x000007D7
+ cmp r2, r0
+ bhi _020A632C
+ add r0, r3, #0x2200
+ strh r2, [r0, #0x82]
+ ldr r1, [r1, #0x0]
+ ldr r0, _020A63C0 ; =FUN_020A5F34
+ add r1, r1, #0x1500
+ mov r2, #0x620
+ bl WM_StartDCF
+ cmp r0, #0x2
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r0, #0x3
+ beq _020A6300
+ cmp r0, #0x8
+ bne _020A6300
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldr r0, _020A63B8 ; =0x021CA86C
+ ldr r3, _020A63C4 ; =0x000007ED
+ ldr r1, [r0, #0x0]
+ mov r0, #0x1
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6300:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A63B8 ; =0x021CA86C
+ ldr r3, _020A63C8 ; =0x000007F6
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A632C:
+ bl FUN_020A6B28
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6338:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A63B8 ; =0x021CA86C
+ ldrh r2, [r4, #0x8]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020A63CC ; =0x00000804
+ add r1, r0, #0x2140
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A6364:
+ ldr r0, _020A63B8 ; =0x021CA86C
+ ldrh r1, [r4, #0xe]
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0xf8]
+_020A6378:
+ mov r0, #0x8
+ bl FUN_020A6C38
+ bl FUN_020A6B28
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A638C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A63B8 ; =0x021CA86C
+ ldr r3, _020A63D0 ; =0x0000081B
+ ldr r1, [r0, #0x0]
+ mov r0, #0x7
+ add r1, r1, #0x2140
+ mov r2, #0x0
+ bl FUN_020A6D3C
+_020A63B0:
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A63B8: .word 0x021CA86C
+_020A63BC: .word 0x000007D7
+_020A63C0: .word FUN_020A5F34
+_020A63C4: .word 0x000007ED
+_020A63C8: .word 0x000007F6
+_020A63CC: .word 0x00000804
+_020A63D0: .word 0x0000081B
+
+ arm_func_start FUN_020A63D4
+FUN_020A63D4: ; 0x020A63D4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A6438
+_020A63EC:
+ b _020A6400
+_020A63F0:
+ b _020A6428
+_020A63F4:
+ b _020A6438
+_020A63F8:
+ b _020A6438
+_020A63FC:
+ b _020A6438
+_020A6400:
+ mov r0, #0x3
+ bl FUN_020A6C38
+_020A6408: ; 0x020A6408
+ mov r0, #0x0
+ ldr r3, _020A6460 ; =0x00000783
+ mov r1, r0
+ mov r2, r0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6428:
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6438:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A6464 ; =0x00000793
+ mov r2, r1
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6460: .word 0x00000783
+_020A6464: .word 0x00000793
+
+ arm_func_start FUN_020A6468
+FUN_020A6468: ; 0x020A6468
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r5, r0
+ ldrh r0, [r5, #0x2]
+ mov r4, #0x14
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A6714
+_020A6488:
+ b _020A649C
+_020A648C:
+ b _020A6704
+_020A6490:
+ b _020A6714
+_020A6494:
+ b _020A6714
+_020A6498:
+ b _020A6714
+_020A649C:
+ ldr r0, _020A673C ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0x5
+ bne _020A64D0
+ mov r0, #0x6
+ bl FUN_020A6C38
+_020A64BC: ; 0x020A64BC
+ mov r0, #0x0
+ ldr r3, _020A6740 ; =0x00000704
+ mov r1, r0
+ mov r2, r0
+ bl FUN_020A6D3C
+_020A64D0:
+ ldr r1, _020A673C ; =0x021CA86C
+ ldr r2, [r1, #0x0]
+ add r0, r2, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0x6
+ beq _020A64FC
+ cmp r0, #0x7
+ beq _020A6674
+ cmp r0, #0xd
+ beq _020A6684
+ b _020A6694
+_020A64FC:
+ add r0, r2, #0x2200
+ mov r2, #0x7
+ strh r2, [r0, #0x80]
+ ldrh r0, [r5, #0x8]
+ cmp r0, #0x5
+ bne _020A6588
+ ldr r0, [r1, #0x0]
+ add r1, r0, #0x2200
+ add r0, r0, #0x2000
+ ldrh r1, [r1, #0x8c]
+ ldr r0, [r0, #0x288]
+ bl DC_InvalidateRange
+ ldrh r0, [r5, #0xe]
+ mov r4, #0x0
+ cmp r0, #0x0
+ ble _020A6588
+ ldr r8, _020A6744 ; =0x0000071A
+ mov r6, r4
+ mov r7, #0x7
+_020A6548:
+ add r0, r5, r4, lsl #0x1
+ add r2, r5, r4, lsl #0x2
+ ldrh r1, [r0, #0x50]
+ ldr r0, [r2, #0x10]
+ bl FUN_020A8298
+ str r8, [sp, #0x0]
+ add r0, r5, r4, lsl #0x2
+ ldr r2, [r0, #0x10]
+ mov r0, r7
+ mov r1, r6
+ mov r3, r5
+ bl FUN_020A6CE0
+ ldrh r0, [r5, #0xe]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _020A6548
+_020A6588:
+ ldr r0, _020A673C ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r1, [r0, #0x264]
+ and r0, r1, #0xc00000
+ cmp r0, #0xc00000
+ bne _020A65F4
+ ldr r0, _020A6748 ; =0x00003FFE
+ and r0, r1, r0
+ bl FUN_020A5A4C
+ movs r1, r0
+ beq _020A65F4
+ ldr r0, _020A673C ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r6, [r0, #0x284]
+ mov r0, r6
+ bl _u32_div_f
+_020A65D0: ; 0x020A65D0
+ cmp r1, #0x0
+ bne _020A65F4
+ ldr r4, _020A674C ; =0x00000728
+ mov r1, #0x0
+ mov r2, r6
+ mov r3, r1
+ mov r0, #0x8
+ str r4, [sp, #0x0]
+ bl FUN_020A6CE0
+_020A65F4:
+ ldrh r0, [r5, #0xa]
+ bl FUN_020A5A70
+ rsb r0, r0, #0x20
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl FUN_020A6D8C
+ ldr r1, _020A673C ; =0x021CA86C
+ mov r2, #0x1
+ mov r2, r2, lsl r0
+ ldr r0, [r1, #0x0]
+ mov r2, r2, asr #0x1
+ add r0, r0, #0x2200
+ strh r2, [r0, #0x8e]
+ ldr r0, [r1, #0x0]
+ add r1, r0, #0x2200
+ add r0, r0, #0x2000
+ ldrh r1, [r1, #0x8c]
+ ldr r0, [r0, #0x288]
+ bl DC_InvalidateRange
+ ldr r3, _020A673C ; =0x021CA86C
+ ldr r2, _020A6750 ; =0x00002288
+ ldr r1, [r3, #0x0]
+ ldr r0, _020A6754 ; =FUN_020A6468
+ add r1, r1, #0x2000
+ ldr r4, [r1, #0x284]
+ add r4, r4, #0x1
+ str r4, [r1, #0x284]
+ ldr r1, [r3, #0x0]
+ add r1, r1, r2
+ bl WM_StartScanEx
+ mov r4, r0
+ b _020A6694
+_020A6674:
+ ldr r0, _020A6758 ; =FUN_020A63D4
+ bl WM_EndScan
+ mov r4, r0
+ b _020A6694
+_020A6684:
+ bl FUN_020A6B28
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A6694:
+ cmp r4, #0x2
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ cmp r4, #0x3
+ beq _020A66DC
+ cmp r4, #0x8
+ bne _020A66DC
+ mov r0, #0xc
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A675C ; =0x00000753
+ mov r2, r1
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A66DC:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A6760 ; =0x0000075C
+ mov r2, r1
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A6704:
+ bl FUN_020A6B28
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A6714:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A6764 ; =0x0000076D
+ mov r2, r1
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A673C: .word 0x021CA86C
+_020A6740: .word 0x00000704
+_020A6744: .word 0x0000071A
+_020A6748: .word 0x00003FFE
+_020A674C: .word 0x00000728
+_020A6750: .word 0x00002288
+_020A6754: .word FUN_020A6468
+_020A6758: .word FUN_020A63D4
+_020A675C: .word 0x00000753
+_020A6760: .word 0x0000075C
+_020A6764: .word 0x0000076D
+
+ arm_func_start FUN_020A6768
+FUN_020A6768: ; 0x020A6768
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r1, [r0, #0x2]
+ mov r2, #0x14
+ cmp r1, #0x4
+ addls pc, pc, r1, lsl #0x2
+ b _020A6A0C
+_020A6784:
+ b _020A6798
+_020A6788:
+ b _020A69CC
+_020A678C:
+ b _020A6A0C
+_020A6790:
+ b _020A6A0C
+_020A6794:
+ b _020A6A0C
+_020A6798:
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x19
+ bgt _020A67D4
+ cmp r0, #0x19
+ bge _020A68B4
+ cmp r0, #0x6
+ addls pc, pc, r0, lsl #0x2
+ b _020A692C
+_020A67B8:
+ b _020A692C
+_020A67BC:
+ b _020A692C
+_020A67C0:
+ b _020A692C
+_020A67C4:
+ b _020A67F4
+_020A67C8:
+ b _020A6804
+_020A67CC:
+ b _020A6868
+_020A67D0:
+ b _020A6890
+_020A67D4:
+ cmp r0, #0x1d
+ bgt _020A67E8
+ cmp r0, #0x1d
+ beq _020A68A0
+ b _020A692C
+_020A67E8:
+ cmp r0, #0x27
+ beq _020A68DC
+ b _020A692C
+_020A67F4:
+ ldr r0, _020A6A4C ; =FUN_020A6768
+ bl WM_PowerOn
+ mov r2, r0
+ b _020A692C
+_020A6804:
+ bl WM_Finish
+_020A6808: ; 0x020A6808
+ cmp r0, #0x0
+ beq _020A6818
+ cmp r0, #0x4
+ b _020A6840
+_020A6818:
+ mov r0, #0x1
+ bl FUN_020A6C38
+_020A6820: ; 0x020A6820
+ mov r0, #0x0
+ ldr r3, _020A6A50 ; =0x00000663
+ mov r1, r0
+ mov r2, r0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6840:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ ldr r3, _020A6A54 ; =0x0000066C
+ mov r2, r1
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6868:
+ mov r0, #0x3
+ bl FUN_020A6C38
+_020A6870: ; 0x020A6870
+ mov r0, #0x0
+ ldr r3, _020A6A58 ; =0x00000673
+ mov r1, r0
+ mov r2, r0
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6890:
+ ldr r0, _020A6A4C ; =FUN_020A6768
+ bl WM_Disable
+ mov r2, r0
+ b _020A692C
+_020A68A0:
+ ldr r0, _020A6A4C ; =FUN_020A6768
+ mov r1, #0x0
+ bl WM_SetBeaconIndication
+ mov r2, r0
+ b _020A692C
+_020A68B4:
+ ldr r1, _020A6A5C ; =0x021CA86C
+ ldr r0, _020A6A4C ; =FUN_020A6768
+ ldr r3, [r1, #0x0]
+ add r2, r3, #0x2000
+ ldrb r1, [r2, #0x250]
+ ldrb r2, [r2, #0x251]
+ add r3, r3, #0x2200
+ bl WM_SetWEPKeyEx
+ mov r2, r0
+ b _020A692C
+_020A68DC:
+ ldr r0, _020A6A5C ; =0x021CA86C
+ ldr r2, [r0, #0x0]
+ add r0, r2, #0x2000
+ ldr r1, [r0, #0x264]
+ and r0, r1, #0xc0000
+ cmp r0, #0xc0000
+ moveq r0, #0x1
+ movne r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r12, r0, lsr #0x10
+ and r1, r1, #0x30000
+ cmp r1, #0x30000
+ movne r3, #0x1
+ add r1, r2, #0x2140
+ ldr r0, _020A6A60 ; =FUN_020A6144
+ moveq r3, #0x0
+ mov r2, #0x0
+ str r12, [sp, #0x0]
+ bl WM_StartConnectEx
+ mov r2, r0
+_020A692C:
+ cmp r2, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ cmp r2, #0x3
+ beq _020A698C
+ cmp r2, #0x8
+ bne _020A698C
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldr r0, _020A6A5C ; =0x021CA86C
+ ldr r3, _020A6A64 ; =0x000006AF
+ ldr r1, [r0, #0x0]
+ mov r2, #0x0
+ add r0, r1, #0x2200
+ ldrsh r0, [r0, #0x80]
+ cmp r0, #0x5
+ addeq r1, r1, #0x2140
+ movne r1, #0x0
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A698C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A6A5C ; =0x021CA86C
+ ldr r3, _020A6A68 ; =0x000006B8
+ ldr r1, [r0, #0x0]
+ mov r2, #0x0
+ add r0, r1, #0x2200
+ ldrsh r0, [r0, #0x80]
+ cmp r0, #0x5
+ addeq r1, r1, #0x2140
+ movne r1, #0x0
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A69CC:
+ mov r0, #0xc
+ bl FUN_020A6C38
+ ldr r0, _020A6A5C ; =0x021CA86C
+ ldr r3, _020A6A6C ; =0x000006DE
+ ldr r1, [r0, #0x0]
+ mov r2, #0x0
+ add r0, r1, #0x2200
+ ldrsh r0, [r0, #0x80]
+ cmp r0, #0x5
+ addeq r1, r1, #0x2140
+ movne r1, #0x0
+ mov r0, #0x1
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6A0C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ ldr r0, _020A6A5C ; =0x021CA86C
+ ldr r3, _020A6A70 ; =0x000006E8
+ ldr r1, [r0, #0x0]
+ mov r2, #0x0
+ add r0, r1, #0x2200
+ ldrsh r0, [r0, #0x80]
+ cmp r0, #0x5
+ addeq r1, r1, #0x2140
+ movne r1, #0x0
+ mov r0, #0x7
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6A4C: .word FUN_020A6768
+_020A6A50: .word 0x00000663
+_020A6A54: .word 0x0000066C
+_020A6A58: .word 0x00000673
+_020A6A5C: .word 0x021CA86C
+_020A6A60: .word FUN_020A6144
+_020A6A64: .word 0x000006AF
+_020A6A68: .word 0x000006B8
+_020A6A6C: .word 0x000006DE
+_020A6A70: .word 0x000006E8
+
+ arm_func_start FUN_020A6A74
+FUN_020A6A74: ; 0x020A6A74
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r1, [r0, #0x2]
+ cmp r1, #0x8
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldrh r1, [r0, #0x4]
+ cmp r1, #0x16
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldrh r0, [r0, #0x6]
+ cmp r0, #0x25
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020A6B24 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r0, [r0, #0x260]
+ sub r0, r0, #0x8
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _020A6B18
+_020A6AD8:
+ b _020A6AEC
+_020A6ADC:
+ b _020A6B00
+_020A6AE0:
+ b _020A6B10
+_020A6AE4:
+ b _020A6B18
+_020A6AE8:
+ b _020A6B00
+_020A6AEC:
+ mov r0, #0xc
+ bl FUN_020A6C38
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6B00:
+ bl FUN_020A6B28
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A6B10:
+ mov r0, #0xc
+ bl FUN_020A6C38
+_020A6B18:
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6B24: .word 0x021CA86C
+
+ arm_func_start FUN_020A6B28
+FUN_020A6B28: ; 0x020A6B28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020A6B98 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r1, r0, #0x2000
+ ldrb r0, [r1, #0x26b]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020A6B9C ; =FUN_020A5A78
+ mov r2, #0x1
+ strb r2, [r1, #0x26b]
+ bl WM_Reset
+ cmp r0, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r1, #0x0
+ mov r2, r1
+ mov r0, #0x7
+ mov r3, #0x610
+ bl FUN_020A6D3C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6B98: .word 0x021CA86C
+_020A6B9C: .word FUN_020A5A78
+
+ arm_func_start FUN_020A6BA0
+FUN_020A6BA0: ; 0x020A6BA0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020A88A8
+ bl FUN_020A6BBC
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A6BBC
+FUN_020A6BBC: ; 0x020A6BBC
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ bl OS_DisableInterrupts
+ ldr r2, _020A6C28 ; =0x021CA86C
+ ldr r1, _020A6C2C ; =0x000022CC
+ ldr r2, [r2, #0x0]
+ mov r4, r0
+ add r0, r2, r1
+ bl OS_CancelAlarm
+ ldr r0, _020A6C28 ; =0x021CA86C
+ ldr r12, [r0, #0x0]
+ add r0, r12, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0x9
+ bne _020A6C14
+ ldr r0, _020A6C2C ; =0x000022CC
+ ldr r1, _020A6C30 ; =0x022F5341
+ mov r2, #0x0
+ ldr r3, _020A6C34 ; =FUN_020A6BA0
+ add r0, r12, r0
+ str r2, [sp, #0x0]
+ bl OS_SetAlarm
+_020A6C14:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A6C28: .word 0x021CA86C
+_020A6C2C: .word 0x000022CC
+_020A6C30: .word 0x022F5341
+_020A6C34: .word FUN_020A6BA0
+
+ arm_func_start FUN_020A6C38
+FUN_020A6C38:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020A6CD0 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ add r0, r1, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0x9
+ bne _020A6C78
+ cmp r5, #0x9
+ beq _020A6C78
+ ldr r0, _020A6CD4 ; =0x000022CC
+ add r0, r1, r0
+ bl OS_CancelAlarm
+_020A6C78:
+ ldr r0, _020A6CD0 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ ldr r1, [r0, #0x260]
+ cmp r1, #0xb
+ strne r5, [r0, #0x260]
+ cmp r5, #0x9
+ bne _020A6CBC
+ mov r2, #0x0
+ ldr r0, _020A6CD0 ; =0x021CA86C
+ str r2, [sp, #0x0]
+ ldr r5, [r0, #0x0]
+ ldr r0, _020A6CD4 ; =0x000022CC
+ ldr r1, _020A6CD8 ; =0x022F5341
+ ldr r3, _020A6CDC ; =FUN_020A6BA0
+ add r0, r5, r0
+ bl OS_SetAlarm
+_020A6CBC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A6CD0: .word 0x021CA86C
+_020A6CD4: .word 0x000022CC
+_020A6CD8: .word 0x022F5341
+_020A6CDC: .word FUN_020A6BA0
+
+ arm_func_start FUN_020A6CE0
+FUN_020A6CE0: ; 0x020A6CE0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ ldr ip, _020A6D38 ; =0x021CA86C
+ ldr r12, [r12, #0x0]
+ add r12, r12, #0x2000
+ ldr lr, [r12, #0x27c]
+ cmp lr, #0x0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr lr, [sp, #0x18]
+ strh r0, [sp, #0x0]
+ str r2, [sp, #0x4]
+ str r3, [sp, #0x8]
+ str lr, [sp, #0xc]
+ strh r1, [sp, #0x2]
+ ldr r1, [r12, #0x27c]
+ add r0, sp, #0x0
+ blx r1
+ add sp, sp, #0x14
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A6D38: .word 0x021CA86C
+
+ arm_func_start FUN_020A6D3C
+FUN_020A6D3C: ; 0x020A6D3C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020A6D88 ; =0x021CA86C
+ mov r5, r0
+ ldr r0, [r12, #0x0]
+ mov r4, r1
+ add r1, r0, #0x2200
+ ldrsh r0, [r1, #0x80]
+ mov r12, #0x0
+ mov lr, r2
+ strh r12, [r1, #0x80]
+ str r3, [sp, #0x0]
+ mov r1, r5
+ mov r2, r4
+ mov r3, lr
+ bl FUN_020A6CE0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A6D88: .word 0x021CA86C
+
+ arm_func_start FUN_020A6D8C
+FUN_020A6D8C: ; 0x020A6D8C
+ stmdb sp!, {r4-r6,lr}
+ ldr r1, _020A6E24 ; =0x021CA86C
+ mov r2, r0
+ ldr r1, [r1, #0x0]
+ mov r3, #0x0
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x264]
+ mov r6, #0x1
+ ldr r5, _020A6E28 ; =0x4EC4EC4F
+ ldr r4, _020A6E2C ; =0x0000000D
+_020A6DB4:
+ smull r12, lr, r5, r2
+ mov lr, lr, asr #0x2
+ mov r12, r2, lsr #0x1f
+ add lr, r12, lr
+ smull r12, lr, r4, lr
+ sub lr, r2, r12
+ add r12, lr, #0x1
+ mov r12, r6, lsl r12
+ ands r12, r1, r12
+ bne _020A6DEC
+ add r3, r3, #0x1
+ cmp r3, #0xd
+ add r2, r2, #0x1
+ blt _020A6DB4
+_020A6DEC:
+ ldr r1, _020A6E28 ; =0x4EC4EC4F
+ add r3, r0, r3
+ smull r0, r4, r1, r3
+ mov r4, r4, asr #0x2
+ mov r0, r3, lsr #0x1f
+ ldr r2, _020A6E2C ; =0x0000000D
+ add r4, r0, r4
+ smull r0, r1, r2, r4
+ sub r4, r3, r0
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A6E24: .word 0x021CA86C
+_020A6E28: .word 0x4EC4EC4F
+_020A6E2C: .word 0x0000000D
+
+ arm_func_start FUN_020A6E30
+FUN_020A6E30: ; 0x020A6E30
+ ldr r0, _020A6E48 ; =0x021CA86C
+ ldr r1, _020A6E4C ; =0x00AAA082
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ str r1, [r0, #0x264]
+ bx lr
+ .balign 4
+_020A6E48: .word 0x021CA86C
+_020A6E4C: .word 0x00AAA082
+
+ arm_func_start FUN_020A6E50
+FUN_020A6E50: ; 0x020A6E50
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r0, r2
+ mov r4, r1
+ bl FUN_020A7148
+ ldr r2, _020A6FF4 ; =0x021CA86C
+ mov r3, #0x400
+ ldr r1, [r2, #0x0]
+ mov r0, #0x0
+ add r12, r1, #0x1500
+ add r1, r1, #0x2000
+ str r12, [r1, #0x288]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r3, [r1, #0x8c]
+ bl FUN_020A6D8C
+ ldr r1, _020A6FF4 ; =0x021CA86C
+ mov r2, #0x1
+ mov r2, r2, lsl r0
+ ldr r0, [r1, #0x0]
+ mov r2, r2, asr #0x1
+ add r0, r0, #0x2200
+ strh r2, [r0, #0x8e]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x2200
+ ldrh r0, [r0, #0x68]
+ cmp r0, #0x0
+ bne _020A6EC8
+ bl WM_GetDispersionScanPeriod
+_020A6EC8:
+ ldr r2, _020A6FF4 ; =0x021CA86C
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r0, [r1, #0x90]
+ ldr r1, [r2, #0x0]
+ add r0, r1, #0x2000
+ ldr r0, [r0, #0x264]
+ and r0, r0, #0x300000
+ cmp r0, #0x300000
+ movne r2, #0x1
+ moveq r2, #0x0
+ add r0, r1, #0x2200
+ strh r2, [r0, #0x98]
+ cmp r5, #0x0
+ bne _020A6F24
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ ldr r1, _020A6FF8 ; =0x00002292
+ ldr r2, [r0, #0x0]
+ ldr r0, _020A6FFC ; =0x020FF590
+ add r1, r2, r1
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ b _020A6F40
+_020A6F24:
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ ldr r1, _020A6FF8 ; =0x00002292
+ ldr r2, [r0, #0x0]
+ mov r0, r5
+ add r1, r2, r1
+ mov r2, #0x6
+ bl MI_CpuCopy8
+_020A6F40:
+ cmp r4, #0x0
+ beq _020A6F54
+ ldr r0, _020A7000 ; =0x020FF598
+ cmp r4, r0
+ bne _020A6F88
+_020A6F54:
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ ldr r1, _020A7004 ; =0x0000229C
+ ldr r2, [r0, #0x0]
+ ldr r0, _020A7000 ; =0x020FF598
+ add r1, r2, r1
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x9a]
+ b _020A6FD4
+_020A6F88:
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ ldr r1, _020A7004 ; =0x0000229C
+ ldr r2, [r0, #0x0]
+ mov r0, r4
+ add r1, r2, r1
+ mov r2, #0x20
+ bl MI_CpuCopy8
+ mov r1, #0x0
+_020A6FA8:
+ ldrb r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020A6FC4
+ add r1, r1, #0x1
+ cmp r1, #0x20
+ add r4, r4, #0x1
+ blt _020A6FA8
+_020A6FC4:
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x9a]
+_020A6FD4:
+ ldr r0, _020A6FF4 ; =0x021CA86C
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ str r1, [r0, #0x284]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A6FF4: .word 0x021CA86C
+_020A6FF8: .word 0x00002292
+_020A6FFC: .word 0x020FF590
+_020A7000: .word 0x020FF598
+_020A7004: .word 0x0000229C
+
+ arm_func_start FUN_020A7008
+FUN_020A7008: ; 0x020A7008
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r0
+ mov r4, r1
+ bne _020A705C
+ ldr r1, _020A7134 ; =0x021CA86C
+ mov r3, #0x3
+ ldr r0, [r1, #0x0]
+ mov r2, #0x0
+ add r0, r0, #0x2000
+ str r3, [r0, #0x26c]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x2000
+ str r2, [r0, #0x270]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x2000
+ str r2, [r0, #0x274]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x2000
+ str r2, [r0, #0x278]
+ b _020A7118
+_020A705C:
+ ldr r1, _020A7134 ; =0x021CA86C
+ ldr r2, [r5, #0x0]
+ ldr r0, [r1, #0x0]
+ and r2, r2, #0x3
+ add r0, r0, #0x2000
+ str r2, [r0, #0x26c]
+ ldr r3, [r5, #0x4]
+ ldr r0, [r5, #0x8]
+ and r2, r3, #0x3
+ rsb r2, r2, #0x4
+ and r2, r2, #0x3
+ add r2, r2, #0xc
+ cmp r2, r0
+ bls _020A70B4
+ ldr r0, [r1, #0x0]
+ mov r2, #0x0
+ add r0, r0, #0x2000
+ str r2, [r0, #0x270]
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x2000
+ str r2, [r0, #0x274]
+ b _020A7104
+_020A70B4:
+ ldr r0, [r1, #0x0]
+ add r2, r3, #0x3
+ bic r2, r2, #0x3
+ add r0, r0, #0x2000
+ str r2, [r0, #0x270]
+ ldr r2, [r5, #0x4]
+ ldr r0, [r1, #0x0]
+ and r2, r2, #0x3
+ rsb r2, r2, #0x4
+ ldr r3, [r5, #0x8]
+ and r2, r2, #0x3
+ sub r2, r3, r2
+ add r0, r0, #0x2000
+ str r2, [r0, #0x274]
+ ldr r0, [r1, #0x0]
+ mov r1, #0x0
+ add r2, r0, #0x2000
+ ldr r0, [r2, #0x270]
+ ldr r2, [r2, #0x274]
+ bl MI_CpuFill8
+_020A7104:
+ ldr r0, _020A7134 ; =0x021CA86C
+ ldr r1, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ str r1, [r0, #0x278]
+_020A7118:
+ ldr r0, _020A7134 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2000
+ str r4, [r0, #0x27c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A7134: .word 0x021CA86C
+
+ arm_func_start FUN_020A7138
+FUN_020A7138:
+ ldr r0, _020A7144 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020A7144: .word 0x021CA86C
+
+ arm_func_start FUN_020A7148
+FUN_020A7148: ; 0x020A7148
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020A71EC ; =0x021CA86C
+ mov r2, #0x0
+ ldr r1, [r1, #0x0]
+ add r3, r1, #0x2000
+ cmp r1, #0x0
+ ldr r4, [r3, #0x264]
+ bne _020A7188
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7188:
+ ands r3, r5, #0x8000
+ beq _020A71A4
+ ldr r3, _020A71F0 ; =0x00003FFE
+ orr r2, r2, r3
+ ands r3, r5, r3
+ ldreq r3, _020A71F4 ; =0x0000A082
+ orreq r5, r5, r3
+_020A71A4:
+ ands r3, r5, #0x20000
+ orrne r2, r2, #0x10000
+ ands r3, r5, #0x80000
+ orrne r2, r2, #0x40000
+ ands r3, r5, #0x200000
+ orrne r2, r2, #0x100000
+ ands r3, r5, #0x800000
+ orrne r2, r2, #0x400000
+ mvn r2, r2
+ and r2, r4, r2
+ orr r2, r5, r2
+ add r1, r1, #0x2000
+ str r2, [r1, #0x264]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A71EC: .word 0x021CA86C
+_020A71F0: .word 0x00003FFE
+_020A71F4: .word 0x0000A082
+
+ arm_func_start FUN_020A71F8
+FUN_020A71F8: ; 0x020A71F8
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020A7228 ; =0x021CA86C
+ mov r4, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ addne r1, r1, #0x2000
+ ldrne r4, [r1, #0x260]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A7228: .word 0x021CA86C
+
+ arm_func_start FUN_020A722C
+FUN_020A722C: ; 0x020A722C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r1, _020A747C ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A7260
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7260:
+ add r1, r1, #0x2000
+ ldr r2, [r1, #0x260]
+ cmp r2, #0xd
+ addls pc, pc, r2, lsl #0x2
+ b _020A7308
+_020A7274:
+ b _020A7308
+_020A7278:
+ b _020A72C0
+_020A727C:
+ b _020A7308
+_020A7280:
+ b _020A7320
+_020A7284:
+ b _020A7308
+_020A7288:
+ b _020A7308
+_020A728C:
+ b _020A72D4
+_020A7290:
+ b _020A7308
+_020A7294:
+ b _020A7308
+_020A7298:
+ b _020A7320
+_020A729C:
+ b _020A7308
+_020A72A0:
+ b _020A7308
+_020A72A4:
+ b _020A7320
+_020A72A8:
+ b _020A72AC
+_020A72AC:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A72C0:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A72D4:
+ mov r0, #0xd
+ bl FUN_020A6C38
+ ldr r1, _020A747C ; =0x021CA86C
+ mov r0, r4
+ ldr r1, [r1, #0x0]
+ mov r2, #0x9
+ add r1, r1, #0x2200
+ strh r2, [r1, #0x80]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x3
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7308:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7320:
+ ldrb r0, [r1, #0x26b]
+ cmp r0, #0x1
+ bne _020A734C
+ mov r0, #0xd
+ bl FUN_020A6C38
+ ldr r0, _020A747C ; =0x021CA86C
+ mov r1, #0x9
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A7464
+_020A734C:
+ bl WMi_GetStatusAddress
+ mov r5, r0
+ mov r1, #0x2
+ bl DC_InvalidateRange
+ ldrh r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020A737C
+ cmp r0, #0x1
+ beq _020A73BC
+ cmp r0, #0x2
+ beq _020A73C8
+ b _020A73D4
+_020A737C:
+ bl WM_Finish
+_020A7380: ; 0x020A7380
+ cmp r0, #0x0
+ bne _020A73F0
+ mov r0, #0x1
+ bl FUN_020A6C38
+ ldr r1, _020A747C ; =0x021CA86C
+ mov r0, r4
+ ldr r1, [r1, #0x0]
+ mov r2, #0x0
+ add r1, r1, #0x2200
+ strh r2, [r1, #0x80]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A73BC:
+ ldr r0, _020A7480 ; =FUN_020A6768
+ bl WM_Disable
+ b _020A73F0
+_020A73C8:
+ ldr r0, _020A7480 ; =FUN_020A6768
+ bl WM_PowerOff
+ b _020A73F0
+_020A73D4:
+ ldr r1, _020A747C ; =0x021CA86C
+ ldr r0, _020A7484 ; =FUN_020A5A78
+ ldr r1, [r1, #0x0]
+ mov r2, #0x1
+ add r1, r1, #0x2000
+ strb r2, [r1, #0x26b]
+ bl WM_Reset
+_020A73F0:
+ cmp r0, #0x2
+ beq _020A740C
+ cmp r0, #0x3
+ beq _020A7444
+ cmp r0, #0x8
+ beq _020A742C
+ b _020A7444
+_020A740C:
+ mov r0, #0xd
+ bl FUN_020A6C38
+ ldr r0, _020A747C ; =0x021CA86C
+ mov r1, #0x9
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A7464
+_020A742C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7444:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x7
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A7464:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A747C: .word 0x021CA86C
+_020A7480: .word FUN_020A6768
+_020A7484: .word FUN_020A5A78
+
+ arm_func_start FUN_020A7488
+FUN_020A7488: ; 0x020A7488
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020A75B8 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A74B4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A74B4:
+ add r1, r1, #0x2000
+ ldr r2, [r1, #0x260]
+ cmp r2, #0x3
+ beq _020A74E4
+ cmp r2, #0x9
+ beq _020A7504
+ cmp r2, #0xa
+ bne _020A74F4
+ bl OS_RestoreInterrupts
+ mov r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A74E4:
+ bl OS_RestoreInterrupts
+_020A74E8: ; 0x020A74E8
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A74F4:
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7504:
+ ldrb r0, [r1, #0x26b]
+ cmp r0, #0x1
+ bne _020A7530
+ mov r0, #0xa
+ bl FUN_020A6C38
+ ldr r0, _020A75B8 ; =0x021CA86C
+ mov r1, #0x6
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A75A4
+_020A7530:
+ ldr r0, _020A75BC ; =FUN_020A5DDC
+ bl WM_EndDCF
+ cmp r0, #0x2
+ beq _020A7554
+ cmp r0, #0x3
+ beq _020A7588
+ cmp r0, #0x8
+ beq _020A7574
+ b _020A7588
+_020A7554:
+ mov r0, #0xa
+ bl FUN_020A6C38
+ ldr r0, _020A75B8 ; =0x021CA86C
+ mov r1, #0x6
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A75A4
+_020A7574:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x4
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7588:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A75A4:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A75B8: .word 0x021CA86C
+_020A75BC: .word FUN_020A5DDC
+
+ arm_func_start FUN_020A75C0
+FUN_020A75C0: ; 0x020A75C0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_DisableInterrupts
+ ldr r2, _020A7814 ; =0x021CA86C
+ mov r4, r0
+ ldr r12, [r2, #0x0]
+ cmp r12, #0x0
+ bne _020A7600
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7600:
+ add r1, r12, #0x2000
+ ldr r3, [r1, #0x260]
+ cmp r3, #0x3
+ beq _020A7624
+ cmp r3, #0x8
+ beq _020A7734
+ cmp r3, #0x9
+ beq _020A7748
+ b _020A775C
+_020A7624:
+ cmp r7, #0x0
+ bne _020A7640
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7640:
+ ldrh r3, [r7, #0x3c]
+ cmp r3, #0x0
+ beq _020A7660
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7660:
+ cmp r6, #0x0
+ beq _020A76E8
+ ldrb r3, [r6, #0x0]
+ cmp r3, #0x4
+ bhs _020A7680
+ ldrb r0, [r6, #0x1]
+ cmp r0, #0x4
+ blo _020A7698
+_020A7680:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7698:
+ strb r3, [r1, #0x250]
+ ldr r0, [r2, #0x0]
+ ldrb r1, [r6, #0x1]
+ add r0, r0, #0x2000
+ strb r1, [r0, #0x251]
+ ldr r1, [r2, #0x0]
+ add r0, r1, #0x2000
+ ldrb r0, [r0, #0x250]
+ cmp r0, #0x0
+ bne _020A76D4
+ add r0, r1, #0x2200
+ mov r1, #0x0
+ mov r2, #0x50
+ bl MI_CpuFill8
+ b _020A76F8
+_020A76D4:
+ add r0, r6, #0x2
+ add r1, r1, #0x2200
+ mov r2, #0x50
+ bl MI_CpuCopy8
+ b _020A76F8
+_020A76E8:
+ add r0, r12, #0x2200
+ mov r1, #0x0
+ mov r2, #0x52
+ bl MI_CpuFill8
+_020A76F8:
+ ldr r1, _020A7814 ; =0x021CA86C
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ mov r2, #0xc0
+ add r1, r1, #0x2140
+ bl MI_CpuCopy8
+ ldr r1, _020A7814 ; =0x021CA86C
+ mov r0, r5
+ ldr r1, [r1, #0x0]
+ add r1, r1, #0x2100
+ ldrh r2, [r1, #0x6e]
+ orr r2, r2, #0x3
+ strh r2, [r1, #0x70]
+ bl FUN_020A7148
+ b _020A7770
+_020A7734:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7748:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A775C:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7770:
+ ldr r1, _020A7818 ; =0x0000FFFF
+ ldr r0, _020A781C ; =FUN_020A6768
+ mov r3, r1
+ mov r2, #0x50
+ str r1, [sp, #0x0]
+ bl WM_SetLifeTime
+ cmp r0, #0x2
+ beq _020A77A4
+ cmp r0, #0x3
+ beq _020A77DC
+ cmp r0, #0x8
+ beq _020A77C4
+ b _020A77DC
+_020A77A4:
+ mov r0, #0x8
+ bl FUN_020A6C38
+ ldr r0, _020A7814 ; =0x021CA86C
+ mov r1, #0x5
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A77FC
+_020A77C4:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A77DC:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x7
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A77FC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020A7814: .word 0x021CA86C
+_020A7818: .word 0x0000FFFF
+_020A781C: .word FUN_020A6768
+
+ arm_func_start FUN_020A7820
+FUN_020A7820: ; 0x020A7820
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020A78D4 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A784C
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A784C:
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0x3
+ beq _020A78A0
+ cmp r1, #0x6
+ beq _020A7870
+ cmp r1, #0x7
+ beq _020A7890
+ b _020A78B0
+_020A7870:
+ mov r0, #0x7
+ bl FUN_020A6C38
+ ldr r0, _020A78D4 ; =0x021CA86C
+ mov r1, #0x4
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A78C0
+_020A7890:
+ bl OS_RestoreInterrupts
+ mov r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A78A0:
+ bl OS_RestoreInterrupts
+_020A78A4: ; 0x020A78A4
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A78B0:
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A78C0:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A78D4: .word 0x021CA86C
+
+ arm_func_start FUN_020A78D8
+FUN_020A78D8: ; 0x020A78D8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_DisableInterrupts
+ ldr r1, _020A7A84 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A7918
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7918:
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0x3
+ beq _020A79A0
+ cmp r1, #0x5
+ beq _020A793C
+ cmp r1, #0x6
+ beq _020A7964
+ b _020A798C
+_020A793C:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_020A6E50
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x2
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7964:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_020A6E50
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A798C:
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A79A0:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_020A6E50
+ ldr r0, _020A7A84 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r1, r0, #0x2200
+ add r0, r0, #0x2000
+ ldrh r1, [r1, #0x8c]
+ ldr r0, [r0, #0x288]
+ bl DC_InvalidateRange
+ ldr r3, _020A7A84 ; =0x021CA86C
+ ldr r2, _020A7A88 ; =0x00002288
+ ldr r1, [r3, #0x0]
+ ldr r0, _020A7A8C ; =FUN_020A6468
+ add r1, r1, #0x2000
+ ldr r5, [r1, #0x284]
+ add r5, r5, #0x1
+ str r5, [r1, #0x284]
+ ldr r1, [r3, #0x0]
+ add r1, r1, r2
+ bl WM_StartScanEx
+ cmp r0, #0x2
+ beq _020A7A14
+ cmp r0, #0x3
+ beq _020A7A4C
+ cmp r0, #0x8
+ beq _020A7A34
+ b _020A7A4C
+_020A7A14:
+ mov r0, #0x5
+ bl FUN_020A6C38
+ ldr r0, _020A7A84 ; =0x021CA86C
+ mov r1, #0x3
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A7A6C
+_020A7A34:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7A4C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x7
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_020A7A6C:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020A7A84: .word 0x021CA86C
+_020A7A88: .word 0x00002288
+_020A7A8C: .word FUN_020A6468
+
+ arm_func_start FUN_020A7A90
+FUN_020A7A90: ; 0x020A7A90
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ beq _020A7AA8
+ cmp r1, #0x0
+ bne _020A7AB8
+_020A7AA8:
+ bl FUN_020A7820
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A7AB8:
+ bl FUN_020A78D8
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A7AC8
+FUN_020A7AC8: ; 0x020A7AC8
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ ldr r1, _020A7BCC ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A7AF4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7AF4:
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0x1
+ beq _020A7B24
+ cmp r1, #0x3
+ beq _020A7B44
+ cmp r1, #0x4
+ bne _020A7B34
+ bl OS_RestoreInterrupts
+ mov r0, #0x2
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7B24:
+ bl OS_RestoreInterrupts
+_020A7B28: ; 0x020A7B28
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7B34:
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7B44:
+ ldr r0, _020A7BD0 ; =FUN_020A6768
+ bl WM_PowerOff
+ cmp r0, #0x2
+ beq _020A7B68
+ cmp r0, #0x3
+ beq _020A7B9C
+ cmp r0, #0x8
+ beq _020A7B88
+ b _020A7B9C
+_020A7B68:
+ mov r0, #0x4
+ bl FUN_020A6C38
+ ldr r0, _020A7BCC ; =0x021CA86C
+ mov r1, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A7BB8
+_020A7B88:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x4
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7B9C:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A7BB8:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A7BCC: .word 0x021CA86C
+_020A7BD0: .word FUN_020A6768
+
+ arm_func_start FUN_020A7BD4
+FUN_020A7BD4: ; 0x020A7BD4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ bl OS_DisableInterrupts
+ ldr r1, _020A7E00 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x0
+ bne _020A7C08
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7C08:
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0x1
+ beq _020A7C2C
+ cmp r1, #0x2
+ beq _020A7C3C
+ cmp r1, #0x3
+ beq _020A7C4C
+ b _020A7C5C
+_020A7C2C:
+ mov r0, r6
+ mov r1, r5
+ bl FUN_020A7008
+ b _020A7C6C
+_020A7C3C:
+ bl OS_RestoreInterrupts
+ mov r0, #0x2
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7C4C:
+ bl OS_RestoreInterrupts
+_020A7C50: ; 0x020A7C50
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7C5C:
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7C6C:
+ ldr r0, _020A7E00 ; =0x021CA86C
+ ldr r0, [r0, #0x0]
+ add r1, r0, #0x2000
+ ldr r1, [r1, #0x26c]
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ bl WM_Init
+ cmp r0, #0x6
+ addls pc, pc, r0, lsl #0x2
+ b _020A7CE0
+_020A7C94:
+ b _020A7CFC
+_020A7C98:
+ b _020A7CE0
+_020A7C9C:
+ b _020A7CE0
+_020A7CA0:
+ b _020A7CB0
+_020A7CA4:
+ b _020A7CCC
+_020A7CA8:
+ b _020A7CE0
+_020A7CAC:
+ b _020A7CE0
+_020A7CB0:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7CCC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7CE0:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7CFC:
+ bl WM_GetAllowedChannel
+_020A7D00: ; 0x020A7D00
+ cmp r0, #0x0
+ bne _020A7D44
+ bl WM_Finish
+_020A7D0C: ; 0x020A7D0C
+ cmp r0, #0x0
+ beq _020A7D30
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7D30:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7D44:
+ ldr r0, _020A7E04 ; =FUN_020A6A74
+ bl WM_SetIndCallback
+_020A7D4C: ; 0x020A7D4C
+ cmp r0, #0x0
+ beq _020A7D70
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7D70:
+ ldr r0, _020A7E08 ; =FUN_020A6768
+ bl WM_Enable
+ cmp r0, #0x2
+ beq _020A7D94
+ cmp r0, #0x3
+ beq _020A7DD0
+ cmp r0, #0x8
+ beq _020A7DB4
+ b _020A7DD0
+_020A7D94:
+ mov r0, #0x2
+ bl FUN_020A6C38
+ ldr r0, _020A7E00 ; =0x021CA86C
+ mov r1, #0x1
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x2200
+ strh r1, [r0, #0x80]
+ b _020A7DEC
+_020A7DB4:
+ mov r0, #0xc
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7DD0:
+ mov r0, #0xb
+ bl FUN_020A6C38
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7DEC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x3
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A7E00: .word 0x021CA86C
+_020A7E04: .word FUN_020A6A74
+_020A7E08: .word FUN_020A6768
+
+ arm_func_start FUN_020A7E0C
+FUN_020A7E0C: ; 0x020A7E0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r2, _020A7E7C ; =0x021CA86C
+ ldr r1, [r2, #0x0]
+ cmp r1, #0x0
+ bne _020A7E3C
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020A7E3C:
+ add r1, r1, #0x2000
+ ldr r1, [r1, #0x260]
+ cmp r1, #0x1
+ beq _020A7E60
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_020A7E60:
+ mov r1, #0x0
+ str r1, [r2, #0x0]
+ bl OS_RestoreInterrupts
+_020A7E6C: ; 0x020A7E6C
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A7E7C: .word 0x021CA86C
+
+ arm_func_start FUN_020A7E80
+FUN_020A7E80: ; 0x020A7E80
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ bl OS_DisableInterrupts
+ ldr r2, _020A7FA8 ; =0x021CA86C
+ mov r4, r0
+ ldr r1, [r2, #0x0]
+ cmp r1, #0x0
+ beq _020A7EB4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7EB4:
+ cmp r6, #0x0
+ bne _020A7ECC
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7ECC:
+ ands r1, r6, #0x1f
+ beq _020A7EE4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7EE4:
+ cmp r5, #0x2300
+ bhs _020A7EFC
+ bl OS_RestoreInterrupts
+ mov r0, #0x6
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020A7EFC:
+ str r6, [r2, #0x0]
+ add r0, r6, #0x2000
+ mov r1, #0x1
+ str r1, [r0, #0x260]
+ ldr r1, [r2, #0x0]
+ mov r0, #0x0
+ add r1, r1, #0x2200
+ strh r0, [r1, #0x80]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r0, [r1, #0x68]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2000
+ strb r0, [r1, #0x26a]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2000
+ strb r0, [r1, #0x26b]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r0, [r1, #0x82]
+ ldr r1, [r2, #0x0]
+ add r1, r1, #0x2200
+ strh r0, [r1, #0xf8]
+ bl FUN_020A6E30
+ bl FUN_020A897C
+ bl OS_IsTickAvailable
+_020A7F64: ; 0x020A7F64
+ cmp r0, #0x0
+ bne _020A7F70
+ bl OS_InitTick
+_020A7F70:
+ bl OS_IsAlarmAvailable
+_020A7F74: ; 0x020A7F74
+ cmp r0, #0x0
+ bne _020A7F80
+ bl OS_InitAlarm
+_020A7F80:
+ ldr r1, _020A7FA8 ; =0x021CA86C
+ ldr r0, _020A7FAC ; =0x000022CC
+ ldr r1, [r1, #0x0]
+ add r0, r1, r0
+ bl OS_CreateAlarm
+ mov r0, r4
+ bl OS_RestoreInterrupts
+_020A7F9C: ; 0x020A7F9C
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020A7FA8: .word 0x021CA86C
+_020A7FAC: .word 0x000022CC
+
+ arm_func_start FUN_020A7FB0
+FUN_020A7FB0: ; 0x020A7FB0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020A7138
+ add r1, r0, #0x2000
+ cmp r4, #0x0
+ ldr r0, [r1, #0x270]
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r1, #0x274]
+ cmp r1, #0xc
+ ldmlsia sp!, {r4,lr}
+ bxls lr
+ ldr r3, [r0, #0x4]
+ cmp r3, #0x0
+ beq _020A8040
+_020A7FF8:
+ cmp r3, r4
+ bne _020A8034
+ ldr r2, [r3, #0x8]
+ cmp r2, #0x0
+ ldrne r1, [r3, #0xc]
+ strne r1, [r2, #0xc]
+ ldreq r1, [r3, #0xc]
+ streq r1, [r0, #0x4]
+ ldr r2, [r3, #0xc]
+ cmp r2, #0x0
+ ldrne r1, [r3, #0x8]
+ strne r1, [r2, #0x8]
+ ldreq r1, [r3, #0x8]
+ streq r1, [r0, #0x8]
+ b _020A8040
+_020A8034:
+ ldr r3, [r3, #0xc]
+ cmp r3, #0x0
+ bne _020A7FF8
+_020A8040:
+ mov r1, #0x0
+ str r1, [r4, #0xc]
+ ldr r1, [r0, #0x8]
+ str r1, [r4, #0x8]
+ str r4, [r0, #0x8]
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ strne r4, [r1, #0xc]
+ streq r4, [r0, #0x4]
+ cmp r3, #0x0
+ ldreq r1, [r0, #0x0]
+ streq r1, [r4, #0x4]
+ ldreq r1, [r0, #0x0]
+ addeq r1, r1, #0x1
+ streq r1, [r0, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A8084
+FUN_020A8084: ; 0x020A8084
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020A7138
+ add r1, r0, #0x2000
+ ldr r2, [r1, #0x270]
+ mov r0, #0x0
+ cmp r2, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r1, #0x274]
+ cmp r1, #0xc
+ ldmlsia sp!, {r4,lr}
+ bxls lr
+ ldr r0, [r2, #0x4]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_020A80C8:
+ ldr r1, [r0, #0x4]
+ cmp r1, r4
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, [r0, #0xc]
+ cmp r0, #0x0
+ bne _020A80C8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A80EC
+FUN_020A80EC: ; 0x020A80EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl FUN_020A7138
+ add r0, r0, #0x2000
+ cmp r5, #0x0
+ mov r4, #0x0
+ ldr r1, [r0, #0x270]
+ addeq sp, sp, #0x4
+ moveq r0, r4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r1, #0x0
+ beq _020A8160
+ ldr r0, [r0, #0x274]
+ cmp r0, #0xc
+ bls _020A8160
+ ldr r4, [r1, #0x4]
+ cmp r4, #0x0
+ beq _020A8160
+_020A813C:
+ add r0, r4, #0x10
+ mov r1, r5
+ add r0, r0, #0x4
+ bl FUN_020A8B78
+_020A814C: ; 0x020A814C
+ cmp r0, #0x0
+ bne _020A8160
+ ldr r4, [r4, #0xc]
+ cmp r4, #0x0
+ bne _020A813C
+_020A8160:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A8170
+FUN_020A8170: ; 0x020A8170
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020A7138
+ add r0, r0, #0x2000
+ ldr r1, [r0, #0x270]
+ cmp r1, #0x0
+ beq _020A81A4
+ ldr r0, [r0, #0x274]
+ cmp r0, #0xc
+ addhi sp, sp, #0x4
+ ldrhi r0, [r1, #0x4]
+ ldmhiia sp!, {lr}
+ bxhi lr
+_020A81A4:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A81B4
+FUN_020A81B4: ; 0x020A81B4
+ stmdb sp!, {r4,lr}
+ bl FUN_020A7138
+ add r2, r0, #0x2000
+ ldr r1, [r2, #0x270]
+ mov r0, #0x0
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r3, [r2, #0x274]
+ cmp r3, #0xc
+ ldmlsia sp!, {r4,lr}
+ bxls lr
+ ldr r2, _020A8294 ; =0x4EC4EC4F
+ sub r3, r3, #0xc
+ umull r2, r4, r3, r2
+ movs r4, r4, lsr #0x6
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r2, [r1, #0x0]
+ cmp r4, r2
+ ldmlsia sp!, {r4,lr}
+ bxls lr
+ mov lr, r0
+ cmp r4, #0x0
+ bls _020A8240
+ add r12, r1, #0xc
+ mov r2, #0xd0
+_020A8220:
+ mul r0, lr, r2
+ ldrb r3, [r12, r0]
+ add r0, r12, r0
+ cmp r3, #0x0
+ beq _020A8240
+ add lr, lr, #0x1
+ cmp lr, r4
+ blo _020A8220
+_020A8240:
+ cmp lr, r4
+ ldmcsia sp!, {r4,lr}
+ bxcs lr
+ mov r2, #0x1
+ strb r2, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ mov r2, #0x0
+ str r3, [r0, #0x4]
+ str r2, [r0, #0xc]
+ ldr r2, [r1, #0x8]
+ str r2, [r0, #0x8]
+ str r0, [r1, #0x8]
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ strne r0, [r2, #0xc]
+ streq r0, [r1, #0x4]
+ ldr r2, [r1, #0x0]
+ add r2, r2, #0x1
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A8294: .word 0x4EC4EC4F
+
+ arm_func_start FUN_020A8298
+FUN_020A8298: ; 0x020A8298
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_020A7138
+ movs r7, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ add r0, r7, #0x2000
+ ldrb r0, [r0, #0x26a]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r0, [r5, #0x3c]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ add r0, r5, #0x4
+ bl FUN_020A80EC
+ movs r6, r0
+ bne _020A8300
+ bl FUN_020A81B4
+ mov r6, r0
+_020A8300:
+ cmp r6, #0x0
+ bne _020A8320
+ add r0, r7, #0x2000
+ ldr r0, [r0, #0x278]
+ cmp r0, #0x1
+ bne _020A8320
+ bl FUN_020A8170
+ mov r6, r0
+_020A8320:
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r5
+ add r1, r6, #0x10
+ mov r2, #0xc0
+ strh r4, [r6, #0x2]
+ bl MIi_CpuCopyFast
+ mov r0, r6
+ bl FUN_020A7FB0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FUN_020A8358
+FUN_020A8358: ; 0x020A8358
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl FUN_020A7138
+_020A8370: ; 0x020A8370
+ cmp r0, #0x0
+ bne _020A8390
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A8390:
+ mov r0, r4
+ bl FUN_020A8084
+ movs r4, r0
+ bne _020A83B8
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A83B8:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add r0, r4, #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A83D0
+FUN_020A83D0: ; 0x020A83D0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ bl FUN_020A7138
+_020A83E8: ; 0x020A83E8
+ cmp r0, #0x0
+ bne _020A8408
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A8408:
+ cmp r5, #0x0
+ beq _020A8434
+ add r1, r0, #0x2000
+ ldrb r1, [r1, #0x26a]
+ add r0, r0, #0x2000
+ cmp r1, #0x0
+ movne r5, #0x1
+ mov r1, #0x1
+ moveq r5, #0x0
+ strb r1, [r0, #0x26a]
+ b _020A8454
+_020A8434:
+ add r1, r0, #0x2000
+ ldrb r1, [r1, #0x26a]
+ add r0, r0, #0x2000
+ cmp r1, #0x0
+ movne r5, #0x1
+ mov r1, #0x0
+ moveq r5, #0x0
+ strb r1, [r0, #0x26a]
+_020A8454:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A846C
+FUN_020A846C: ; 0x020A846C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl FUN_020A7138
+_020A8480: ; 0x020A8480
+ cmp r0, #0x0
+ mov r4, #0x0
+ bne _020A84A4
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ mov r0, r4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020A84A4:
+ add r0, r0, #0x2000
+ ldr r1, [r0, #0x270]
+ cmp r1, #0x0
+ beq _020A84C0
+ ldr r0, [r0, #0x274]
+ cmp r0, #0xc
+ ldrhi r4, [r1, #0x0]
+_020A84C0:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A84D8
+FUN_020A84D8: ; 0x020A84D8
+ stmdb sp!, {r4,lr}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ bl FUN_020A7138
+_020A84E8: ; 0x020A84E8
+ cmp r0, #0x0
+ bne _020A8500
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+_020A8500:
+ add r1, r0, #0x2000
+ ldr r0, [r1, #0x270]
+ cmp r0, #0x0
+ beq _020A8524
+ ldr r2, [r1, #0x274]
+ cmp r2, #0x0
+ ble _020A8524
+ mov r1, #0x0
+ bl MI_CpuFill8
+_020A8524:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start FUN_020A8534
+FUN_020A8534: ; 0x020A8534
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ ldr r1, _020A858C ; =0x01FF8000
+ cmp r2, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r1, [r0, #0xc]
+ sub r1, r1, #0x1
+ str r1, [r0, #0xc]
+ ldr r1, [r0, #0xc]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ mov r1, #0x0
+ str r1, [r0, #0x8]
+ bl OS_WakeupThread
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A858C: .word 0x01FF8000
+
+ arm_func_start FUN_020A8590
+FUN_020A8590:
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ bne _020A85B8
+ ldr r1, _020A85D8 ; =0x01FF8000
+ str r1, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ add r1, r1, #0x1
+ str r1, [r0, #0xc]
+ mov r0, #0x1
+ bx lr
+_020A85B8:
+ ldr r1, _020A85D8 ; =0x01FF8000
+ cmp r2, r1
+ ldreq r1, [r0, #0xc]
+ addeq r1, r1, #0x1
+ streq r1, [r0, #0xc]
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+ .balign 4
+_020A85D8: .word 0x01FF8000
+
+ arm_func_start FUN_020A85DC
+FUN_020A85DC: ; 0x020A85DC
+ ldr ip, _020A85E8 ; =FUN_020A8534
+ ldr r0, _020A85EC ; =0x021CA87C
+ bx r12
+ .balign 4
+_020A85E8: .word FUN_020A8534
+_020A85EC: .word 0x021CA87C
+
+ arm_func_start FUN_020A85F0
+FUN_020A85F0: ; 0x020A85F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x12
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldrh r2, [r0, #0x2]
+ ldr r1, _020A863C ; =0x021CA870
+ str r2, [r1, #0x24]
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x0
+ bne _020A8628
+ bl FUN_020A6BBC
+_020A8628:
+ ldr r0, _020A8640 ; =0x021CA874
+ bl OS_WakeupThread
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A863C: .word 0x021CA870
+_020A8640: .word 0x021CA874
+
+ arm_func_start FUN_020A8644
+FUN_020A8644:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl FUN_020A7138
+_020A8660: ; 0x020A8660
+ cmp r0, #0x0
+ bne _020A867C
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020A8670: ; 0x020A8670
+ mvn r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A867C:
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_LockMutex
+ bl FUN_020A7138
+ movs r4, r0
+ bne _020A86AC
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_UnlockMutex
+ mov r0, r5
+ bl OS_RestoreInterrupts
+_020A86A0: ; 0x020A86A0
+ mvn r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A86AC:
+ add r0, r4, #0x2000
+ ldr r1, [r0, #0x260]
+ cmp r1, #0x9
+ bne _020A86C8
+ ldrb r0, [r0, #0x26b]
+ cmp r0, #0x1
+ bne _020A86E4
+_020A86C8:
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_UnlockMutex
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mvn r0, #0x3
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A86E4:
+ mov r0, r7
+ mov r2, r6
+ add r1, r4, #0xf00
+ bl MI_CpuCopy8
+ mov r3, r6, lsl #0x10
+ ldr r0, _020A87B0 ; =FUN_020A85F0
+ mov r1, r8
+ add r2, r4, #0xf00
+ mov r3, r3, lsr #0x10
+ bl WM_SetDCFData
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020A873C
+_020A8718:
+ b _020A873C
+_020A871C:
+ b _020A873C
+_020A8720:
+ b _020A8758
+_020A8724:
+ b _020A873C
+_020A8728:
+ b _020A873C
+_020A872C:
+ b _020A873C
+_020A8730:
+ b _020A873C
+_020A8734:
+ b _020A873C
+_020A8738:
+ b _020A873C
+_020A873C:
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_UnlockMutex
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mvn r0, #0x4
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A8758:
+ ldr r0, _020A87B4 ; =0x021CA874
+ bl OS_SleepThread
+ ldr r0, _020A87B8 ; =0x021CA870
+ ldr r0, [r0, #0x24]
+ cmp r0, #0x0
+ beq _020A8790
+ cmp r0, #0x1
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_UnlockMutex
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mvn r0, #0x4
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020A8790:
+ ldr r0, _020A87AC ; =0x021CA87C
+ bl OS_UnlockMutex
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020A87AC: .word 0x021CA87C
+_020A87B0: .word FUN_020A85F0
+_020A87B4: .word 0x021CA874
+_020A87B8: .word 0x021CA870
+
+ arm_func_start FUN_020A87BC
+FUN_020A87BC: ; 0x020A87BC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020A87DC ; =0x021CA870
+ str r4, [r1, #0x28]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A87DC: .word 0x021CA870
+
+ arm_func_start FUN_020A87E0
+FUN_020A87E0: ; 0x020A87E0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, #0x0
+ mov r4, r0
+ mov r6, r7
+ bl FUN_020A7138
+ mov r5, r0
+ bl OS_DisableInterrupts
+_020A8800: ; 0x020A8800
+ cmp r5, #0x0
+ beq _020A8830
+ add r1, r5, #0x2000
+ ldr r2, [r1, #0x260]
+ cmp r2, #0x9
+ bne _020A8830
+ ldrb r1, [r1, #0x26b]
+ cmp r1, #0x0
+ addeq r2, r5, #0x2100
+ ldreq r1, _020A884C ; =0x0000214C
+ ldreqh r6, [r2, #0x4a]
+ addeq r7, r5, r1
+_020A8830:
+ bl OS_RestoreInterrupts
+_020A8834: ; 0x020A8834
+ cmp r4, #0x0
+ strneh r6, [r4, #0x0]
+ mov r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020A884C: .word 0x0000214C
+
+ arm_func_start FUN_020A8850
+FUN_020A8850:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, #0x0
+ bl FUN_020A7138
+ mov r4, r0
+ bl OS_DisableInterrupts
+_020A8868: ; 0x020A8868
+ cmp r4, #0x0
+ beq _020A8890
+ add r1, r4, #0x2000
+ ldr r2, [r1, #0x260]
+ cmp r2, #0x9
+ bne _020A8890
+ ldrb r1, [r1, #0x26b]
+ cmp r1, #0x0
+ ldreq r1, _020A88A4 ; =0x00002144
+ addeq r5, r4, r1
+_020A8890:
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A88A4: .word 0x00002144
+
+ arm_func_start FUN_020A88A8
+FUN_020A88A8: ; 0x020A88A8
+ stmdb sp!, {r4,lr}
+ bl FUN_020A7138
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ add r0, r4, #0x2000
+ ldr r1, [r0, #0x260]
+ cmp r1, #0x9
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrb r0, [r0, #0x26b]
+ cmp r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _020A8928 ; =0x021CA87C
+ bl FUN_020A8590
+_020A88E8: ; 0x020A88E8
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, _020A892C ; =0x00002144
+ ldr r0, _020A8930 ; =FUN_020A85DC
+ add r1, r4, r1
+ add r2, r4, #0xf00
+ mov r3, #0x0
+ bl WM_SetDCFData
+ cmp r0, #0x2
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _020A8928 ; =0x021CA87C
+ bl FUN_020A8534
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A8928: .word 0x021CA87C
+_020A892C: .word 0x00002144
+_020A8930: .word FUN_020A85DC
+
+ arm_func_start FUN_020A8934
+FUN_020A8934: ; 0x020A8934
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020A8978 ; =0x021CA870
+ mov r2, r0
+ ldr r12, [r1, #0x28]
+ cmp r12, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrh r3, [r2, #0x6]
+ add r0, r2, #0x1e
+ add r1, r2, #0x18
+ add r2, r2, #0x2c
+ blx r12
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A8978: .word 0x021CA870
+
+ arm_func_start FUN_020A897C
+FUN_020A897C: ; 0x020A897C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020A89C8 ; =0x021CA870
+ ldrb r0, [r1, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _020A89CC ; =0x021CA87C
+ mov r2, #0x0
+ mov r3, #0x1
+ strb r3, [r1, #0x0]
+ str r2, [r1, #0x24]
+ str r2, [r1, #0x8]
+ str r2, [r1, #0x4]
+ bl OS_InitMutex
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A89C8: .word 0x021CA870
+_020A89CC: .word 0x021CA87C
+
+ arm_func_start FUN_020A89D0
+FUN_020A89D0: ; 0x020A89D0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020A8A48 ; =0x021CA89C
+ ands r1, r0, #0x2
+ ldrb r12, [r2, #0x0]
+ movne r0, r0, asr #0x2
+ andne lr, r0, #0xff
+ moveq r0, r0, asr #0x2
+ addeq r0, r0, #0x19
+ andeq lr, r0, #0xff
+ mov r1, r12, lsr #0x1f
+ rsb r0, r1, r12, lsl #0x1c
+ cmp r12, #0x10
+ ldr r3, _020A8A4C ; =0x021CA8A0
+ add r0, r1, r0, ror #0x1c
+ strb lr, [r3, r0]
+ addcc r0, r12, #0x1
+ strccb r0, [r2, #0x0]
+ addcc sp, sp, #0x4
+ ldmccia sp!, {lr}
+ bxcc lr
+ add r0, r12, #0x1
+ mov r1, r0, lsr #0x1f
+ rsb r0, r1, r0, lsl #0x1c
+ add r0, r1, r0, ror #0x1c
+ add r0, r0, #0x10
+ strb r0, [r2, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A8A48: .word 0x021CA89C
+_020A8A4C: .word 0x021CA8A0
+
+ arm_func_start FUN_020A8A50
+FUN_020A8A50: ; 0x020A8A50
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020A8A90
+ mov r1, #0x0
+ cmp r0, #0x1c
+ movcs r1, #0x3
+ bhs _020A8A80
+ cmp r0, #0x16
+ movcs r1, #0x2
+ bhs _020A8A80
+ cmp r0, #0x10
+ movcs r1, #0x1
+_020A8A80:
+ mov r0, r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_020A8A90
+FUN_020A8A90: ; 0x020A8A90
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020A8B20 ; =0x021CA89C
+ mov r0, #0x0
+ ldrb r1, [r1, #0x0]
+ cmp r1, #0x10
+ bls _020A8ADC
+ ldr r2, _020A8B24 ; =0x021CA8A0
+ mov r3, r0
+_020A8AB4:
+ ldrb r1, [r2, #0x0]
+ add r3, r3, #0x1
+ cmp r3, #0x10
+ add r0, r0, r1
+ add r2, r2, #0x1
+ blt _020A8AB4
+ mov r1, r0, asr #0x3
+ add r0, r0, r1, lsr #0x1c
+ mov r0, r0, asr #0x4
+ b _020A8B10
+_020A8ADC:
+ cmp r1, #0x0
+ beq _020A8B10
+ mov r3, r0
+ cmp r1, #0x0
+ ble _020A8B0C
+ ldr ip, _020A8B24 ; =0x021CA8A0
+_020A8AF4:
+ ldrb r2, [r12, #0x0]
+ add r3, r3, #0x1
+ cmp r3, r1
+ add r0, r0, r2
+ add r12, r12, #0x1
+ blt _020A8AF4
+_020A8B0C:
+ bl _s32_div_f
+_020A8B10:
+ and r0, r0, #0xff
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A8B20: .word 0x021CA89C
+_020A8B24: .word 0x021CA8A0
+
+ arm_func_start FUN_020A8B28
+FUN_020A8B28: ; 0x020A8B28
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ mov r5, r0
+ bl FUN_020A7138
+_020A8B3C: ; 0x020A8B3C
+ cmp r0, #0x0
+ mov r4, #0x0
+ beq _020A8B60
+ add r0, r0, #0x2000
+ ldr r0, [r0, #0x260]
+ cmp r0, #0x9
+ bne _020A8B60
+ bl FUN_020A8A50
+ mov r4, r0
+_020A8B60:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start FUN_020A8B78
+FUN_020A8B78:
+ mov r12, #0x0
+_020A8B7C:
+ ldrb r3, [r0, r12]
+ ldrb r2, [r1, r12]
+ cmp r3, r2
+ movne r0, #0x0
+ bxne lr
+ add r12, r12, #0x1
+ cmp r12, #0x6
+ blt _020A8B7C
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start FUN_020A8BA4
+FUN_020A8BA4: ; 0x020A8BA4
+ ldr ip, _020A8BAC ; =DGT_Hash1GetDigest_R
+ bx r12
+ .balign 4
+_020A8BAC: .word DGT_Hash1GetDigest_R
+
+ arm_func_start FUN_020A8BB0
+FUN_020A8BB0: ; 0x020A8BB0
+ ldr ip, _020A8BB8 ; =DGT_Hash1SetSource
+ bx r12
+ .balign 4
+_020A8BB8: .word DGT_Hash1SetSource
+
+ arm_func_start FUN_020A8BBC
+FUN_020A8BBC: ; 0x020A8BBC
+ ldr ip, _020A8BC4 ; =DGT_Hash1Reset
+ bx r12
+ .balign 4
+_020A8BC4: .word DGT_Hash1Reset
+
+ arm_func_start FUN_020A8BC8
+FUN_020A8BC8: ; 0x020A8BC8
+ stmdb sp!, {r4,lr}
+ ldrsh r4, [r3, #0x0]
+ ldr r12, [sp, #0x8]
+ mov lr, #0x0
+ strh r4, [r0, #0x0]
+ ldrb r4, [r3, #0x2]
+ cmp r12, #0x2
+ strb r4, [r0, #0x2]
+ strb lr, [r0, #0x3]
+ beq _020A8C04
+ cmp r12, #0x3
+ beq _020A8C10
+ cmp r12, #0x4
+ beq _020A8C1C
+ ldmia sp!, {r4,pc}
+_020A8C04:
+ add r0, r0, #0x4
+ bl FUN_020A8CA8
+ ldmia sp!, {r4,pc}
+_020A8C10:
+ add r0, r0, #0x4
+ bl FUN_020A91D8
+ ldmia sp!, {r4,pc}
+_020A8C1C:
+ add r0, r0, #0x4
+ bl FUN_020A9D18
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020A8C28
+FUN_020A8C28: ; 0x020A8C28
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrsh r12, [r0, #0x0]
+ cmp r3, #0x2
+ strh r12, [sp, #0x0]
+ ldrb r12, [r0, #0x2]
+ strb r12, [sp, #0x2]
+ beq _020A8C60
+ cmp r3, #0x3
+ beq _020A8C78
+ cmp r3, #0x4
+ beq _020A8C90
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020A8C60:
+ add r3, sp, #0x0
+ add r0, r0, #0x4
+ sub r2, r2, #0x4
+ bl FUN_020A8F58
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020A8C78:
+ add r3, sp, #0x0
+ add r0, r0, #0x4
+ sub r2, r2, #0x4
+ bl FUN_020A97DC
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020A8C90:
+ add r3, sp, #0x0
+ add r0, r0, #0x4
+ sub r2, r2, #0x4
+ bl FUN_020A9F10
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020A8CA8
+FUN_020A8CA8: ; 0x020A8CA8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ movs r2, r2, lsr #0x2
+ str r2, [sp, #0x4]
+ mov r2, #0x0
+ str r2, [sp, #0x0]
+ addeq sp, sp, #0x3c
+ ldmeqia sp!, {r4-r11,pc}
+_020A8CC8: ; 0x020A8CC8
+ mov r5, #0x8000
+ ldr fp, _020A8F4C ; =0x020FF5D4
+ ldr r4, _020A8F50 ; =0x00007FFF
+ str r2, [sp, #0x8]
+ str r2, [sp, #0xc]
+ str r2, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r2, [sp, #0x18]
+ rsb r5, r5, #0x0
+ mov r6, #0x2
+ mov lr, #0x58
+ str r2, [sp, #0x1c]
+ str r2, [sp, #0x20]
+ str r2, [sp, #0x24]
+ str r2, [sp, #0x28]
+ str r2, [sp, #0x2c]
+ str r2, [sp, #0x30]
+ str r2, [sp, #0x34]
+_020A8D10:
+ ldrb r9, [r3, #0x2]
+ ldrsh r2, [r3, #0x0]
+ ldrsh r7, [r1, #0x0]
+ mov r10, r9, lsl #0x1
+ ldrsh r10, [r11, r10]
+ subs r8, r7, r2
+ movmi r7, r6
+ ldrpl r7, [sp, #0x8]
+ rsbmi r8, r8, #0x0
+ cmp r8, r10
+ orrge r7, r7, #0x1
+ ands r8, r7, #0x1
+ ldreq r10, [sp, #0xc]
+ ands r8, r7, #0x2
+ rsbne r10, r10, #0x0
+ mov r8, #0x8000
+ add r2, r2, r10
+ rsb r8, r8, #0x0
+ cmp r2, r8
+ ldr r8, _020A8F54 ; =0x020FF5B8
+ movlt r2, r5
+ cmp r2, r4
+ ldrsb r8, [r8, r7]
+ movgt r2, r4
+ adds r9, r9, r8
+ ldrmi r9, [sp, #0x10]
+ bmi _020A8D84
+ cmp r9, #0x58
+ movgt r9, lr
+_020A8D84:
+ strh r2, [r3, #0x0]
+ strb r9, [r3, #0x2]
+ ldrb r10, [r3, #0x2]
+ and r2, r7, #0xff
+ ldrsh r7, [r3, #0x0]
+ ldrsh r8, [r1, #0x2]
+ mov r12, r10, lsl #0x1
+ ldrsh r12, [r11, r12]
+ subs r9, r8, r7
+ movmi r8, r6
+ ldrpl r8, [sp, #0x14]
+ rsbmi r9, r9, #0x0
+ cmp r9, r12
+ orrge r8, r8, #0x1
+ ands r9, r8, #0x1
+ ldreq r12, [sp, #0x18]
+ ands r9, r8, #0x2
+ rsbne r12, r12, #0x0
+ mov r9, #0x8000
+ add r7, r7, r12
+ rsb r9, r9, #0x0
+ cmp r7, r9
+ ldr sb, _020A8F54 ; =0x020FF5B8
+ movlt r7, r5
+ cmp r7, r4
+ ldrsb r9, [r9, r8]
+ movgt r7, r4
+ adds r10, r10, r9
+ ldrmi r10, [sp, #0x1c]
+ bmi _020A8E04
+ cmp r10, #0x58
+ movgt r10, lr
+_020A8E04:
+ strh r7, [r3, #0x0]
+ strb r10, [r3, #0x2]
+ and r7, r8, #0xff
+ orr r2, r2, r7, lsl #0x2
+ ldrb r10, [r3, #0x2]
+ ldrsh r7, [r3, #0x0]
+ ldrsh r8, [r1, #0x4]
+ mov r12, r10, lsl #0x1
+ ldrsh r12, [r11, r12]
+ subs r9, r8, r7
+ movmi r8, r6
+ ldrpl r8, [sp, #0x20]
+ rsbmi r9, r9, #0x0
+ cmp r9, r12
+ orrge r8, r8, #0x1
+ ands r9, r8, #0x1
+ ldreq r12, [sp, #0x24]
+ ands r9, r8, #0x2
+ rsbne r12, r12, #0x0
+ mov r9, #0x8000
+ add r7, r7, r12
+ rsb r9, r9, #0x0
+ cmp r7, r9
+ ldr sb, _020A8F54 ; =0x020FF5B8
+ movlt r7, r5
+ cmp r7, r4
+ ldrsb r9, [r9, r8]
+ movgt r7, r4
+ and r2, r2, #0xff
+ adds r10, r10, r9
+ ldrmi r10, [sp, #0x28]
+ bmi _020A8E8C
+ cmp r10, #0x58
+ movgt r10, lr
+_020A8E8C:
+ strh r7, [r3, #0x0]
+ strb r10, [r3, #0x2]
+ and r7, r8, #0xff
+ orr r2, r2, r7, lsl #0x4
+ ldrb r10, [r3, #0x2]
+ ldrsh r8, [r1, #0x6]
+ ldrsh r7, [r3, #0x0]
+ mov r12, r10, lsl #0x1
+ ldrsh r12, [r11, r12]
+ subs r9, r8, r7
+ movmi r8, r6
+ ldrpl r8, [sp, #0x2c]
+ rsbmi r9, r9, #0x0
+ cmp r9, r12
+ orrge r8, r8, #0x1
+ ands r9, r8, #0x1
+ ldreq r12, [sp, #0x30]
+ ands r9, r8, #0x2
+ rsbne r12, r12, #0x0
+ mov r9, #0x8000
+ add r7, r7, r12
+ rsb r9, r9, #0x0
+ cmp r7, r9
+ ldr sb, _020A8F54 ; =0x020FF5B8
+ movlt r7, r5
+ cmp r7, r4
+ ldrsb r9, [r9, r8]
+ movgt r7, r4
+ and r2, r2, #0xff
+ adds r10, r10, r9
+ add r1, r1, #0x8
+ ldrmi r10, [sp, #0x34]
+ bmi _020A8F18
+ cmp r10, #0x58
+ movgt r10, lr
+_020A8F18:
+ strh r7, [r3, #0x0]
+ and r7, r8, #0xff
+ strb r10, [r3, #0x2]
+ orr r2, r2, r7, lsl #0x6
+ strb r2, [r0], #0x1
+ ldr r2, [sp, #0x0]
+ add r7, r2, #0x1
+ ldr r2, [sp, #0x4]
+ str r7, [sp, #0x0]
+ cmp r7, r2
+ blo _020A8D10
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020A8F4C: .word 0x020FF5D4
+_020A8F50: .word 0x00007FFF
+_020A8F54: .word 0x020FF5B8
+
+ arm_func_start FUN_020A8F58
+FUN_020A8F58: ; 0x020A8F58
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ cmp r2, #0x0
+ addls sp, sp, #0x34
+ mov r12, #0x0
+ ldmlsia sp!, {r4-r11,pc}
+_020A8F70: ; 0x020A8F70
+ mov r4, #0x8000
+ rsb r6, r4, #0x0
+ ldr r5, _020A91CC ; =0x00007FFF
+ ldr fp, _020A91D0 ; =0x020FF5D4
+ str r12, [sp, #0x0]
+ str r12, [sp, #0x8]
+ str r12, [sp, #0xc]
+ str r12, [sp, #0x14]
+ str r12, [sp, #0x18]
+ mov r4, #0x58
+ str r12, [sp, #0x20]
+ str r12, [sp, #0x24]
+ str r12, [sp, #0x2c]
+_020A8FA4:
+ ldrb r7, [r0, #0x0]
+ ldrb r8, [r3, #0x2]
+ ldrsh r9, [r3, #0x0]
+ and r10, r7, #0x3
+ ands r7, r10, #0x1
+ mov r7, r8, lsl #0x1
+ ldrsh r7, [r11, r7]
+ ldreq r7, [sp, #0x0]
+ ands lr, r10, #0x2
+ str lr, [sp, #0x4]
+ beq _020A8FE8
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r6
+ b _020A8FF4
+_020A8FE8:
+ add r9, r9, r7
+ cmp r9, r5
+ movgt r9, r5
+_020A8FF4:
+ ldr r7, _020A91D4 ; =0x020FF5B8
+ ldrsb r7, [r7, r10]
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x8]
+ bmi _020A9010
+ cmp r8, #0x58
+ movgt r8, r4
+_020A9010:
+ mov r7, r9, lsl #0x10
+ mov r7, r7, asr #0x10
+ strh r7, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r7, [r1, #0x0]
+ ldrb r7, [r0, #0x0]
+ ldrb r8, [r3, #0x2]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r7, asr #0x2
+ and r10, r7, #0x3
+ ands r7, r10, #0x1
+ mov r7, r8, lsl #0x1
+ ldrsh r7, [r11, r7]
+ ldreq r7, [sp, #0xc]
+ ands lr, r10, #0x2
+ str lr, [sp, #0x10]
+ beq _020A906C
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r6
+ b _020A9078
+_020A906C:
+ add r9, r9, r7
+ cmp r9, r5
+ movgt r9, r5
+_020A9078:
+ ldr r7, _020A91D4 ; =0x020FF5B8
+ ldrsb r7, [r7, r10]
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x14]
+ bmi _020A9094
+ cmp r8, #0x58
+ movgt r8, r4
+_020A9094:
+ mov r7, r9, lsl #0x10
+ mov r7, r7, asr #0x10
+ strh r7, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r7, [r1, #0x2]
+ ldrb r7, [r0, #0x0]
+ ldrb r8, [r3, #0x2]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r7, asr #0x4
+ and r10, r7, #0x3
+ ands r7, r10, #0x1
+ mov r7, r8, lsl #0x1
+ ldrsh r7, [r11, r7]
+ ldreq r7, [sp, #0x18]
+ ands lr, r10, #0x2
+ str lr, [sp, #0x1c]
+ beq _020A90F0
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r6
+ b _020A90FC
+_020A90F0:
+ add r9, r9, r7
+ cmp r9, r5
+ movgt r9, r5
+_020A90FC:
+ ldr r7, _020A91D4 ; =0x020FF5B8
+ ldrsb r7, [r7, r10]
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x20]
+ bmi _020A9118
+ cmp r8, #0x58
+ movgt r8, r4
+_020A9118:
+ mov r7, r9, lsl #0x10
+ mov r7, r7, asr #0x10
+ strh r7, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r7, [r1, #0x4]
+ ldrb r7, [r0, #0x0]
+ ldrb r8, [r3, #0x2]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r7, asr #0x6
+ and r10, r7, #0x3
+ ands r7, r10, #0x1
+ mov r7, r8, lsl #0x1
+ ldrsh r7, [r11, r7]
+ ldreq r7, [sp, #0x24]
+ ands lr, r10, #0x2
+ str lr, [sp, #0x28]
+ beq _020A9174
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r6
+ b _020A9180
+_020A9174:
+ add r9, r9, r7
+ cmp r9, r5
+ movgt r9, r5
+_020A9180:
+ ldr r7, _020A91D4 ; =0x020FF5B8
+ ldrsb r7, [r7, r10]
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x2c]
+ bmi _020A919C
+ cmp r8, #0x58
+ movgt r8, r4
+_020A919C:
+ mov r7, r9, lsl #0x10
+ mov r9, r7, asr #0x10
+ strh r9, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ add r12, r12, #0x1
+ strh r9, [r1, #0x6]
+ add r1, r1, #0x8
+ add r0, r0, #0x1
+ cmp r12, r2
+ blo _020A8FA4
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020A91CC: .word 0x00007FFF
+_020A91D0: .word 0x020FF5D4
+_020A91D4: .word 0x020FF5B8
+
+ arm_func_start FUN_020A91D8
+FUN_020A91D8: ; 0x020A91D8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ movs r2, r2, lsr #0x3
+ str r2, [sp, #0x4]
+ mov r2, #0x0
+ str r2, [sp, #0x0]
+ addeq sp, sp, #0x54
+ ldmeqia sp!, {r4-r11,pc}
+_020A91F8: ; 0x020A91F8
+ ldr r5, [sp, #0x0]
+ mov r4, #0x8000
+ rsb lr, r4, #0x0
+ ldr ip, _020A97D0 ; =0x00007FFF
+ str r2, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r2, [sp, #0x18]
+ str r2, [sp, #0x1c]
+ str r2, [sp, #0x20]
+ mov r4, #0x4
+ mov r2, #0x58
+ str r5, [sp, #0x24]
+ str r5, [sp, #0x28]
+ str r5, [sp, #0x2c]
+ str r5, [sp, #0x30]
+ str r5, [sp, #0x34]
+ str r5, [sp, #0x38]
+ str r5, [sp, #0x3c]
+ str r5, [sp, #0x40]
+ str r5, [sp, #0x44]
+ str r5, [sp, #0x48]
+ str r5, [sp, #0x4c]
+_020A9250:
+ ldrsh r8, [r3, #0x0]
+ ldrsh r6, [r1, #0x0]
+ ldrb r5, [r3, #0x2]
+ subs r7, r6, r8
+ movmi r10, r4
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ mov r9, r5, lsl #0x1
+ ldrsh r6, [r6, r9]
+ ldrpl r10, [sp, #0x10]
+ rsbmi r7, r7, #0x0
+ cmp r7, r6
+ orrge r10, r10, #0x2
+ subge r7, r7, r6
+ mov r9, r6, asr #0x1
+ cmp r7, r9
+ orrge r10, r10, #0x1
+ ands r7, r10, #0x2
+ mov r7, r6, asr #0x2
+ addne r7, r7, r6
+ ands r6, r10, #0x1
+ addne r7, r7, r9
+ ands r6, r10, #0x4
+ rsbne r7, r7, #0x0
+ add r6, r8, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r6, r7
+ ldr r7, _020A97D8 ; =0x020FF5BC
+ movlt r6, lr
+ cmp r6, r12
+ ldrsb r7, [r7, r10]
+ movgt r6, r12
+ adds r5, r5, r7
+ ldrmi r5, [sp, #0x14]
+ bmi _020A92E4
+ cmp r5, #0x58
+ movgt r5, r2
+_020A92E4:
+ strh r6, [r3, #0x0]
+ strb r5, [r3, #0x2]
+ and r5, r10, #0xff
+ mov r5, r5, lsl #0x5
+ and r10, r5, #0xff
+ ldrb r8, [r3, #0x2]
+ ldrsh r11, [r3, #0x0]
+ ldrsh r5, [r1, #0x2]
+ mov r9, r8, lsl #0x1
+ subs r7, r5, r11
+ ldr r5, _020A97D4 ; =0x020FF5D4
+ movmi r6, r4
+ ldrsh r9, [r5, r9]
+ ldrpl r6, [sp, #0x18]
+ rsbmi r7, r7, #0x0
+ cmp r7, r9
+ orrge r6, r6, #0x2
+ subge r7, r7, r9
+ mov r5, r9, asr #0x1
+ cmp r7, r5
+ orrge r6, r6, #0x1
+ ands r7, r6, #0x2
+ mov r7, r9, asr #0x2
+ addne r7, r7, r9
+ ands r9, r6, #0x1
+ addne r7, r7, r5
+ ands r5, r6, #0x4
+ rsbne r7, r7, #0x0
+ add r5, r11, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r5, r7
+ ldr r7, _020A97D8 ; =0x020FF5BC
+ movlt r5, lr
+ cmp r5, r12
+ ldrsb r7, [r7, r6]
+ movgt r5, r12
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x1c]
+ bmi _020A938C
+ cmp r8, #0x58
+ movgt r8, r2
+_020A938C:
+ strh r5, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ and r5, r6, #0xff
+ orr r5, r10, r5, lsl #0x2
+ and r10, r5, #0xff
+ ldrb r8, [r3, #0x2]
+ ldrsh r11, [r3, #0x0]
+ ldrsh r5, [r1, #0x4]
+ mov r9, r8, lsl #0x1
+ subs r7, r5, r11
+ ldr r5, _020A97D4 ; =0x020FF5D4
+ movmi r6, r4
+ ldrsh r9, [r5, r9]
+ ldrpl r6, [sp, #0x20]
+ rsbmi r7, r7, #0x0
+ cmp r7, r9
+ orrge r6, r6, #0x2
+ subge r7, r7, r9
+ mov r5, r9, asr #0x1
+ cmp r7, r5
+ orrge r6, r6, #0x1
+ ands r7, r6, #0x2
+ mov r7, r9, asr #0x2
+ addne r7, r7, r9
+ ands r9, r6, #0x1
+ addne r7, r7, r5
+ ands r5, r6, #0x4
+ rsbne r7, r7, #0x0
+ add r5, r11, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r5, r7
+ ldr r7, _020A97D8 ; =0x020FF5BC
+ movlt r5, lr
+ cmp r5, r12
+ ldrsb r7, [r7, r6]
+ movgt r5, r12
+ adds r8, r8, r7
+ ldrmi r8, [sp, #0x24]
+ bmi _020A9434
+ cmp r8, #0x58
+ movgt r8, r2
+_020A9434:
+ strh r5, [r3, #0x0]
+ and r5, r6, #0xff
+ str r5, [sp, #0x8]
+ strb r8, [r3, #0x2]
+ orr r5, r10, r5, asr #0x1
+ strb r5, [r0, #0x0]
+ ldrb r5, [r3, #0x2]
+ ldrsh r8, [r3, #0x0]
+ ldrsh r6, [r1, #0x6]
+ mov r9, r5, lsl #0x1
+ subs r7, r6, r8
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ movmi r10, r4
+ ldrsh r6, [r6, r9]
+ ldrpl r10, [sp, #0x28]
+ rsbmi r7, r7, #0x0
+ cmp r7, r6
+ orrge r10, r10, #0x2
+ subge r7, r7, r6
+ mov r9, r6, asr #0x1
+ cmp r7, r9
+ orrge r10, r10, #0x1
+ ands r7, r10, #0x2
+ mov r7, r6, asr #0x2
+ addne r7, r7, r6
+ ands r6, r10, #0x1
+ addne r7, r7, r9
+ ands r6, r10, #0x4
+ rsbne r7, r7, #0x0
+ add r6, r8, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r6, r7
+ ldr r7, _020A97D8 ; =0x020FF5BC
+ movlt r6, lr
+ cmp r6, r12
+ ldrsb r7, [r7, r10]
+ movgt r6, r12
+ adds r5, r5, r7
+ ldrmi r5, [sp, #0x2c]
+ bmi _020A94E0
+ cmp r5, #0x58
+ movgt r5, r2
+_020A94E0:
+ strh r6, [r3, #0x0]
+ strb r5, [r3, #0x2]
+ ldrsh r11, [r3, #0x0]
+ ldrsh r6, [r1, #0x8]
+ ldrb r9, [r3, #0x2]
+ and r5, r10, #0xff
+ subs r8, r6, r11
+ movmi r7, r4
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ mov r10, r9, lsl #0x1
+ ldrsh r10, [r6, r10]
+ ldrpl r7, [sp, #0x30]
+ rsbmi r8, r8, #0x0
+ cmp r8, r10
+ orrge r7, r7, #0x2
+ subge r8, r8, r10
+ mov r6, r10, asr #0x1
+ cmp r8, r6
+ orrge r7, r7, #0x1
+ ands r8, r7, #0x2
+ mov r8, r10, asr #0x2
+ addne r8, r8, r10
+ ands r10, r7, #0x1
+ addne r8, r8, r6
+ ands r6, r7, #0x4
+ rsbne r8, r8, #0x0
+ add r6, r11, r8
+ mov r8, #0x8000
+ rsb r8, r8, #0x0
+ cmp r6, r8
+ ldr r8, _020A97D8 ; =0x020FF5BC
+ movlt r6, lr
+ mov r5, r5, lsl #0x4
+ cmp r6, r12
+ ldrsb r8, [r8, r7]
+ movgt r6, r12
+ and r5, r5, #0xff
+ adds r9, r9, r8
+ ldrmi r9, [sp, #0x34]
+ bmi _020A9588
+ cmp r9, #0x58
+ movgt r9, r2
+_020A9588:
+ strh r6, [r3, #0x0]
+ strb r9, [r3, #0x2]
+ and r6, r7, #0xff
+ orr r5, r5, r6, lsl #0x1
+ ldrb r9, [r3, #0x2]
+ ldrsh r11, [r3, #0x0]
+ ldrsh r6, [r1, #0xa]
+ mov r10, r9, lsl #0x1
+ and r5, r5, #0xff
+ subs r8, r6, r11
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ movmi r7, r4
+ ldrsh r10, [r6, r10]
+ ldrpl r7, [sp, #0x38]
+ rsbmi r8, r8, #0x0
+ cmp r8, r10
+ orrge r7, r7, #0x2
+ subge r8, r8, r10
+ mov r6, r10, asr #0x1
+ cmp r8, r6
+ orrge r7, r7, #0x1
+ ands r8, r7, #0x2
+ mov r8, r10, asr #0x2
+ addne r8, r8, r10
+ ands r10, r7, #0x1
+ addne r8, r8, r6
+ ands r6, r7, #0x4
+ rsbne r8, r8, #0x0
+ add r6, r11, r8
+ mov r8, #0x8000
+ rsb r8, r8, #0x0
+ cmp r6, r8
+ ldr r8, _020A97D8 ; =0x020FF5BC
+ movlt r6, lr
+ cmp r6, r12
+ ldrsb r8, [r8, r7]
+ movgt r6, r12
+ adds r9, r9, r8
+ ldrmi r9, [sp, #0x3c]
+ bmi _020A9630
+ cmp r9, #0x58
+ movgt r9, r2
+_020A9630:
+ ldr r8, [sp, #0x8]
+ strh r6, [r3, #0x0]
+ orr r8, r5, r8, lsl #0x7
+ and r5, r7, #0xff
+ str r5, [sp, #0xc]
+ strb r9, [r3, #0x2]
+ orr r5, r8, r5, asr #0x2
+ strb r5, [r0, #0x1]
+ ldrb r5, [r3, #0x2]
+ ldrsh r8, [r3, #0x0]
+ ldrsh r6, [r1, #0xc]
+ mov r9, r5, lsl #0x1
+ subs r7, r6, r8
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ movmi r10, r4
+ ldrsh r6, [r6, r9]
+ ldrpl r10, [sp, #0x40]
+ rsbmi r7, r7, #0x0
+ cmp r7, r6
+ orrge r10, r10, #0x2
+ subge r7, r7, r6
+ mov r9, r6, asr #0x1
+ cmp r7, r9
+ orrge r10, r10, #0x1
+ ands r7, r10, #0x2
+ mov r7, r6, asr #0x2
+ addne r7, r7, r6
+ ands r6, r10, #0x1
+ addne r7, r7, r9
+ ands r6, r10, #0x4
+ rsbne r7, r7, #0x0
+ add r6, r8, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r6, r7
+ ldr r7, _020A97D8 ; =0x020FF5BC
+ movlt r6, lr
+ cmp r6, r12
+ ldrsb r7, [r7, r10]
+ movgt r6, r12
+ adds r5, r5, r7
+ ldrmi r5, [sp, #0x44]
+ bmi _020A96E4
+ cmp r5, #0x58
+ movgt r5, r2
+_020A96E4:
+ strh r6, [r3, #0x0]
+ strb r5, [r3, #0x2]
+ and r5, r10, #0xff
+ mov r5, r5, lsl #0x3
+ and r11, r5, #0xff
+ ldrsh r6, [r1, #0xe]
+ ldrsh r5, [r3, #0x0]
+ ldrb r9, [r3, #0x2]
+ add r1, r1, #0x10
+ subs r8, r6, r5
+ movmi r7, r4
+ ldr r6, _020A97D4 ; =0x020FF5D4
+ mov r10, r9, lsl #0x1
+ ldrsh r10, [r6, r10]
+ ldrpl r7, [sp, #0x48]
+ rsbmi r8, r8, #0x0
+ cmp r8, r10
+ orrge r7, r7, #0x2
+ subge r8, r8, r10
+ mov r6, r10, asr #0x1
+ cmp r8, r6
+ orrge r7, r7, #0x1
+ ands r8, r7, #0x2
+ mov r8, r10, asr #0x2
+ addne r8, r8, r10
+ ands r10, r7, #0x1
+ addne r8, r8, r6
+ ands r6, r7, #0x4
+ rsbne r8, r8, #0x0
+ mov r6, #0x8000
+ add r5, r5, r8
+ rsb r6, r6, #0x0
+ cmp r5, r6
+ ldr r6, _020A97D8 ; =0x020FF5BC
+ movlt r5, lr
+ cmp r5, r12
+ ldrsb r6, [r6, r7]
+ movgt r5, r12
+ adds r9, r9, r6
+ ldrmi r9, [sp, #0x4c]
+ bmi _020A9790
+ cmp r9, #0x58
+ movgt r9, r2
+_020A9790:
+ strh r5, [r3, #0x0]
+ and r5, r7, #0xff
+ orr r6, r11, r5
+ ldr r5, [sp, #0xc]
+ strb r9, [r3, #0x2]
+ orr r5, r6, r5, lsl #0x6
+ strb r5, [r0, #0x2]
+ ldr r5, [sp, #0x0]
+ add r0, r0, #0x3
+ add r6, r5, #0x1
+ ldr r5, [sp, #0x4]
+ str r6, [sp, #0x0]
+ cmp r6, r5
+ blo _020A9250
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020A97D0: .word 0x00007FFF
+_020A97D4: .word 0x020FF5D4
+_020A97D8: .word 0x020FF5BC
+
+ arm_func_start FUN_020A97DC
+FUN_020A97DC: ; 0x020A97DC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ ldr r5, _020A9D08 ; =0xAAAAAAAB
+ mov r4, #0x0
+ str r4, [sp, #0x0]
+ umull r5, r4, r2, r5
+ str r4, [sp, #0xc]
+ movs r2, r4, lsr #0x1
+ str r2, [sp, #0xc]
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r11,pc}
+_020A9808: ; 0x020A9808
+ ldr r2, [sp, #0x0]
+ mov r4, #0x8000
+ ldr lr, _020A9D0C ; =0x00007FFF
+ str r2, [sp, #0x18]
+ str r2, [sp, #0x24]
+ str r2, [sp, #0x2c]
+ str r2, [sp, #0x34]
+ str r2, [sp, #0x3c]
+ rsb r4, r4, #0x0
+ mov r12, #0x58
+ str r2, [sp, #0x40]
+ str r2, [sp, #0x44]
+ str r2, [sp, #0x48]
+_020A983C:
+ ldrb r8, [r3, #0x2]
+ ldr r5, _020A9D10 ; =0x020FF5D4
+ ldrb r6, [r0, #0x0]
+ mov r7, r8, lsl #0x1
+ ldrsh r5, [r5, r7]
+ ldrb r11, [r0, #0x1]
+ ldrb r2, [r0, #0x2]
+ str r5, [sp, #0x4]
+ mov r5, r6, asr #0x5
+ ands r7, r5, #0x2
+ ldr r7, [sp, #0x4]
+ ldrne r10, [sp, #0x4]
+ mov r7, r7, asr #0x2
+ addne r7, r7, r10
+ ands r10, r5, #0x1
+ str r10, [sp, #0x10]
+ ldrne r10, [sp, #0x4]
+ ldrsh r9, [r3, #0x0]
+ addne r7, r7, r10, asr #0x1
+ ands r10, r5, #0x4
+ str r10, [sp, #0x14]
+ beq _020A98AC
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r4
+ b _020A98B8
+_020A98AC:
+ add r9, r9, r7
+ cmp r9, lr
+ movgt r9, lr
+_020A98B8:
+ ldr r7, _020A9D14 ; =0x020FF5BC
+ ldrsb r5, [r7, r5]
+ adds r8, r8, r5
+ ldrmi r8, [sp, #0x18]
+ bmi _020A98D4
+ cmp r8, #0x58
+ movgt r8, r12
+_020A98D4:
+ mov r5, r9, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r5, [r1, #0x0]
+ ldrb r8, [r3, #0x2]
+ mov r5, r6, asr #0x2
+ ands r7, r5, #0x2
+ ldr r7, _020A9D10 ; =0x020FF5D4
+ mov r10, r8, lsl #0x1
+ ldrsh r7, [r7, r10]
+ ldrsh r9, [r3, #0x0]
+ str r7, [sp, #0x8]
+ ldrne r10, [sp, #0x8]
+ mov r7, r7, asr #0x2
+ addne r7, r7, r10
+ ands r10, r5, #0x1
+ str r10, [sp, #0x1c]
+ ldrne r10, [sp, #0x8]
+ addne r7, r7, r10, asr #0x1
+ ands r10, r5, #0x4
+ str r10, [sp, #0x20]
+ beq _020A9948
+ sub r9, r9, r7
+ mov r7, #0x8000
+ rsb r7, r7, #0x0
+ cmp r9, r7
+ movlt r9, r4
+ b _020A9954
+_020A9948:
+ add r9, r9, r7
+ cmp r9, lr
+ movgt r9, lr
+_020A9954:
+ and r7, r5, #0x7
+ ldr r5, _020A9D14 ; =0x020FF5BC
+ ldrsb r5, [r5, r7]
+ adds r8, r8, r5
+ ldrmi r8, [sp, #0x24]
+ bmi _020A9974
+ cmp r8, #0x58
+ movgt r8, r12
+_020A9974:
+ mov r5, r9, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ mov r6, r6, lsl #0x1
+ strb r8, [r3, #0x2]
+ strh r5, [r1, #0x2]
+ and r6, r6, #0x7
+ orr r6, r6, r11, asr #0x7
+ ldrb r8, [r3, #0x2]
+ ands r5, r6, #0x2
+ ldr r5, _020A9D10 ; =0x020FF5D4
+ mov r7, r8, lsl #0x1
+ ldrsh r10, [r5, r7]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r10, asr #0x2
+ addne r7, r7, r10
+ ands r5, r6, #0x1
+ str r5, [sp, #0x28]
+ addne r7, r7, r10, asr #0x1
+ ands r5, r6, #0x4
+ beq _020A99E0
+ mov r5, #0x8000
+ sub r9, r9, r7
+ rsb r5, r5, #0x0
+ cmp r9, r5
+ movlt r9, r4
+ b _020A99EC
+_020A99E0:
+ add r9, r9, r7
+ cmp r9, lr
+ movgt r9, lr
+_020A99EC:
+ ldr r5, _020A9D14 ; =0x020FF5BC
+ ldrsb r5, [r5, r6]
+ adds r8, r8, r5
+ ldrmi r8, [sp, #0x2c]
+ bmi _020A9A08
+ cmp r8, #0x58
+ movgt r8, r12
+_020A9A08:
+ mov r5, r9, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r5, [r1, #0x4]
+ ldrb r8, [r3, #0x2]
+ mov r6, r11, asr #0x4
+ ands r5, r6, #0x2
+ ldr r5, _020A9D10 ; =0x020FF5D4
+ mov r7, r8, lsl #0x1
+ ldrsh r10, [r5, r7]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r10, asr #0x2
+ addne r7, r7, r10
+ ands r5, r6, #0x1
+ str r5, [sp, #0x30]
+ addne r7, r7, r10, asr #0x1
+ ands r5, r6, #0x4
+ beq _020A9A6C
+ mov r5, #0x8000
+ sub r9, r9, r7
+ rsb r5, r5, #0x0
+ cmp r9, r5
+ movlt r9, r4
+ b _020A9A78
+_020A9A6C:
+ add r9, r9, r7
+ cmp r9, lr
+ movgt r9, lr
+_020A9A78:
+ ldr r5, _020A9D14 ; =0x020FF5BC
+ and r6, r6, #0x7
+ ldrsb r5, [r5, r6]
+ adds r8, r8, r5
+ ldrmi r8, [sp, #0x34]
+ bmi _020A9A98
+ cmp r8, #0x58
+ movgt r8, r12
+_020A9A98:
+ mov r5, r9, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r5, [r1, #0x6]
+ ldrb r8, [r3, #0x2]
+ mov r6, r11, asr #0x1
+ ands r5, r6, #0x2
+ ldr r5, _020A9D10 ; =0x020FF5D4
+ mov r7, r8, lsl #0x1
+ ldrsh r10, [r5, r7]
+ ldrsh r9, [r3, #0x0]
+ mov r7, r10, asr #0x2
+ addne r7, r7, r10
+ ands r5, r6, #0x1
+ str r5, [sp, #0x38]
+ addne r7, r7, r10, asr #0x1
+ ands r5, r6, #0x4
+ beq _020A9AFC
+ mov r5, #0x8000
+ sub r9, r9, r7
+ rsb r5, r5, #0x0
+ cmp r9, r5
+ movlt r9, r4
+ b _020A9B08
+_020A9AFC:
+ add r9, r9, r7
+ cmp r9, lr
+ movgt r9, lr
+_020A9B08:
+ ldr r5, _020A9D14 ; =0x020FF5BC
+ and r6, r6, #0x7
+ ldrsb r5, [r5, r6]
+ adds r8, r8, r5
+ ldrmi r8, [sp, #0x3c]
+ bmi _020A9B28
+ cmp r8, #0x58
+ movgt r8, r12
+_020A9B28:
+ mov r5, r9, lsl #0x10
+ mov r6, r5, asr #0x10
+ mov r5, r11, lsl #0x2
+ and r5, r5, #0x7
+ strh r6, [r3, #0x0]
+ strb r8, [r3, #0x2]
+ strh r6, [r1, #0x8]
+ orr r5, r5, r2, asr #0x6
+ ands r6, r5, #0x2
+ ldrb r6, [r3, #0x2]
+ ldr r8, _020A9D10 ; =0x020FF5D4
+ ldrsh r7, [r3, #0x0]
+ mov r9, r6, lsl #0x1
+ ldrsh r10, [r8, r9]
+ mov r9, r10, asr #0x2
+ addne r9, r9, r10
+ ands r8, r5, #0x1
+ addne r9, r9, r10, asr #0x1
+ ands r8, r5, #0x4
+ beq _020A9B90
+ mov r8, #0x8000
+ sub r7, r7, r9
+ rsb r8, r8, #0x0
+ cmp r7, r8
+ movlt r7, r4
+ b _020A9B9C
+_020A9B90:
+ add r7, r7, r9
+ cmp r7, lr
+ movgt r7, lr
+_020A9B9C:
+ ldr r8, _020A9D14 ; =0x020FF5BC
+ ldrsb r5, [r8, r5]
+ adds r6, r6, r5
+ ldrmi r6, [sp, #0x40]
+ bmi _020A9BB8
+ cmp r6, #0x58
+ movgt r6, r12
+_020A9BB8:
+ mov r5, r7, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r6, [r3, #0x2]
+ strh r5, [r1, #0xa]
+ ldrb r6, [r3, #0x2]
+ mov r5, r2, asr #0x3
+ ands r8, r5, #0x2
+ ldr r8, _020A9D10 ; =0x020FF5D4
+ mov r9, r6, lsl #0x1
+ ldrsh r10, [r8, r9]
+ ldrsh r7, [r3, #0x0]
+ mov r9, r10, asr #0x2
+ addne r9, r9, r10
+ ands r8, r5, #0x1
+ addne r9, r9, r10, asr #0x1
+ ands r8, r5, #0x4
+ beq _020A9C18
+ mov r8, #0x8000
+ sub r7, r7, r9
+ rsb r8, r8, #0x0
+ cmp r7, r8
+ movlt r7, r4
+ b _020A9C24
+_020A9C18:
+ add r7, r7, r9
+ cmp r7, lr
+ movgt r7, lr
+_020A9C24:
+ and r8, r5, #0x7
+ ldr r5, _020A9D14 ; =0x020FF5BC
+ ldrsb r5, [r5, r8]
+ adds r6, r6, r5
+ ldrmi r6, [sp, #0x44]
+ bmi _020A9C44
+ cmp r6, #0x58
+ movgt r6, r12
+_020A9C44:
+ mov r5, r7, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r6, [r3, #0x2]
+ strh r5, [r1, #0xc]
+ ands r5, r2, #0x2
+ ldrb r5, [r3, #0x2]
+ ldr r7, _020A9D10 ; =0x020FF5D4
+ ldrsh r6, [r3, #0x0]
+ mov r8, r5, lsl #0x1
+ ldrsh r9, [r7, r8]
+ mov r8, r9, asr #0x2
+ addne r8, r8, r9
+ ands r7, r2, #0x1
+ addne r8, r8, r9, asr #0x1
+ ands r7, r2, #0x4
+ beq _020A9CA0
+ mov r7, #0x8000
+ sub r6, r6, r8
+ rsb r7, r7, #0x0
+ cmp r6, r7
+ movlt r6, r4
+ b _020A9CAC
+_020A9CA0:
+ add r6, r6, r8
+ cmp r6, lr
+ movgt r6, lr
+_020A9CAC:
+ and r7, r2, #0x7
+ ldr r2, _020A9D14 ; =0x020FF5BC
+ ldrsb r2, [r2, r7]
+ adds r5, r5, r2
+ ldrmi r5, [sp, #0x48]
+ bmi _020A9CCC
+ cmp r5, #0x58
+ movgt r5, r12
+_020A9CCC:
+ mov r2, r6, lsl #0x10
+ mov r2, r2, asr #0x10
+ strh r2, [r3, #0x0]
+ strb r5, [r3, #0x2]
+ strh r2, [r1, #0xe]
+ ldr r2, [sp, #0x0]
+ add r0, r0, #0x3
+ add r5, r2, #0x1
+ ldr r2, [sp, #0xc]
+ add r1, r1, #0x10
+ str r5, [sp, #0x0]
+ cmp r5, r2
+ blo _020A983C
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020A9D08: .word 0xAAAAAAAB
+_020A9D0C: .word 0x00007FFF
+_020A9D10: .word 0x020FF5D4
+_020A9D14: .word 0x020FF5BC
+
+ arm_func_start FUN_020A9D18
+FUN_020A9D18: ; 0x020A9D18
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ movs r2, r2, lsr #0x1
+ str r2, [sp, #0x4]
+ mov r2, #0x0
+ str r2, [sp, #0x0]
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r11,pc}
+_020A9D38: ; 0x020A9D38
+ mov r4, #0x8000
+ rsb r5, r4, #0x0
+ ldr fp, _020A9F04 ; =0x00007FFF
+ str r2, [sp, #0xc]
+ str r2, [sp, #0x10]
+ str r2, [sp, #0x14]
+ str r2, [sp, #0x18]
+ mov r6, #0x8
+ mov r4, #0x58
+_020A9D5C:
+ ldrb r2, [r3, #0x2]
+ ldrsh r8, [r3, #0x0]
+ ldrsh r7, [r1, #0x0]
+ ldr sb, _020A9F08 ; =0x020FF5D4
+ mov r12, r2, lsl #0x1
+ subs r7, r7, r8
+ ldrsh r12, [r9, r12]
+ movmi r10, r6
+ ldrpl r10, [sp, #0xc]
+ rsbmi r7, r7, #0x0
+ cmp r7, r12
+ orrge r10, r10, #0x4
+ subge r7, r7, r12
+ mov lr, r12, asr #0x1
+ cmp r7, lr
+ orrge r10, r10, #0x2
+ subge r7, r7, lr
+ mov r9, r12, asr #0x2
+ cmp r7, r9
+ orrge r10, r10, #0x1
+ ands r7, r10, #0x4
+ mov r7, r12, asr #0x3
+ addne r7, r7, r12
+ ands r12, r10, #0x2
+ addne r7, r7, lr
+ ands r12, r10, #0x1
+ addne r7, r7, r9
+ ands r9, r10, #0x8
+ rsbne r7, r7, #0x0
+ add r7, r8, r7
+ mov r8, #0x8000
+ rsb r8, r8, #0x0
+ cmp r7, r8
+ ldr r8, _020A9F0C ; =0x020FF5C4
+ movlt r7, r5
+ cmp r7, r11
+ ldrsb r8, [r8, r10]
+ movgt r7, r11
+ adds r2, r2, r8
+ ldrmi r2, [sp, #0x10]
+ bmi _020A9E08
+ cmp r2, #0x58
+ movgt r2, r4
+_020A9E08:
+ strh r7, [r3, #0x0]
+ strb r2, [r3, #0x2]
+ ldrsh r2, [r3, #0x0]
+ ldrsh r8, [r1, #0x2]
+ and lr, r10, #0xff
+ str r2, [sp, #0x8]
+ ldrb r2, [r3, #0x2]
+ ldr r7, [sp, #0x8]
+ add r1, r1, #0x4
+ subs r7, r8, r7
+ movmi r10, r6
+ ldr r8, _020A9F08 ; =0x020FF5D4
+ mov r9, r2, lsl #0x1
+ ldrsh r12, [r8, r9]
+ ldrpl r10, [sp, #0x14]
+ rsbmi r7, r7, #0x0
+ cmp r7, r12
+ orrge r10, r10, #0x4
+ subge r7, r7, r12
+ mov r9, r12, asr #0x1
+ cmp r7, r9
+ orrge r10, r10, #0x2
+ subge r7, r7, r9
+ mov r8, r12, asr #0x2
+ cmp r7, r8
+ orrge r10, r10, #0x1
+ ands r7, r10, #0x4
+ mov r7, r12, asr #0x3
+ addne r7, r7, r12
+ ands r12, r10, #0x2
+ addne r7, r7, r9
+ ands r9, r10, #0x1
+ addne r7, r7, r8
+ ands r8, r10, #0x8
+ ldr r8, [sp, #0x8]
+ rsbne r7, r7, #0x0
+ add r7, r8, r7
+ mov r8, #0x8000
+ rsb r8, r8, #0x0
+ cmp r7, r8
+ ldr r8, _020A9F0C ; =0x020FF5C4
+ movlt r7, r5
+ cmp r7, r11
+ ldrsb r8, [r8, r10]
+ movgt r7, r11
+ adds r2, r2, r8
+ ldrmi r2, [sp, #0x18]
+ bmi _020A9ED0
+ cmp r2, #0x58
+ movgt r2, r4
+_020A9ED0:
+ strh r7, [r3, #0x0]
+ strb r2, [r3, #0x2]
+ and r2, r10, #0xff
+ orr r2, lr, r2, lsl #0x4
+ strb r2, [r0], #0x1
+ ldr r2, [sp, #0x0]
+ add r7, r2, #0x1
+ ldr r2, [sp, #0x4]
+ str r7, [sp, #0x0]
+ cmp r7, r2
+ blo _020A9D5C
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020A9F04: .word 0x00007FFF
+_020A9F08: .word 0x020FF5D4
+_020A9F0C: .word 0x020FF5C4
+
+ arm_func_start FUN_020A9F10
+FUN_020A9F10: ; 0x020A9F10
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ cmp r2, #0x0
+ addls sp, sp, #0x1c
+ mov r12, #0x0
+ ldmlsia sp!, {r4-r11,pc}
+_020A9F28: ; 0x020A9F28
+ mov r4, #0x8000
+ ldr fp, _020AA098 ; =0x00007FFF
+ str r12, [sp, #0x8]
+ str r12, [sp, #0x14]
+ rsb r4, r4, #0x0
+ mov lr, #0x58
+_020A9F40:
+ ldrb r5, [r0, #0x0]
+ ldrb r6, [r3, #0x2]
+ ldrsh r7, [r3, #0x0]
+ and r9, r5, #0xf
+ ldr r5, _020AA09C ; =0x020FF5D4
+ mov r8, r6, lsl #0x1
+ ldrsh r8, [r5, r8]
+ ands r5, r9, #0x4
+ mov r5, r8, asr #0x3
+ addne r5, r5, r8
+ ands r10, r9, #0x2
+ str r10, [sp, #0x0]
+ addne r5, r5, r8, asr #0x1
+ ands r10, r9, #0x1
+ addne r5, r5, r8, asr #0x2
+ str r10, [sp, #0x4]
+ ands r8, r9, #0x8
+ beq _020A9FA0
+ sub r7, r7, r5
+ mov r5, #0x8000
+ rsb r5, r5, #0x0
+ cmp r7, r5
+ movlt r7, r4
+ b _020A9FAC
+_020A9FA0:
+ add r7, r7, r5
+ cmp r7, r11
+ movgt r7, r11
+_020A9FAC:
+ ldr r5, _020AA0A0 ; =0x020FF5C4
+ ldrsb r5, [r5, r9]
+ adds r6, r6, r5
+ ldrmi r6, [sp, #0x8]
+ bmi _020A9FC8
+ cmp r6, #0x58
+ movgt r6, lr
+_020A9FC8:
+ mov r5, r7, lsl #0x10
+ mov r5, r5, asr #0x10
+ strh r5, [r3, #0x0]
+ strb r6, [r3, #0x2]
+ strh r5, [r1, #0x0]
+ ldrb r5, [r0, #0x0]
+ ldrb r6, [r3, #0x2]
+ ldrsh r7, [r3, #0x0]
+ mov r5, r5, asr #0x4
+ and r9, r5, #0xf
+ ldr r5, _020AA09C ; =0x020FF5D4
+ mov r8, r6, lsl #0x1
+ ldrsh r8, [r5, r8]
+ ands r5, r9, #0x4
+ mov r5, r8, asr #0x3
+ addne r5, r5, r8
+ ands r10, r9, #0x2
+ str r10, [sp, #0xc]
+ addne r5, r5, r8, asr #0x1
+ ands r10, r9, #0x1
+ addne r5, r5, r8, asr #0x2
+ str r10, [sp, #0x10]
+ ands r8, r9, #0x8
+ beq _020AA040
+ sub r7, r7, r5
+ mov r5, #0x8000
+ rsb r5, r5, #0x0
+ cmp r7, r5
+ movlt r7, r4
+ b _020AA04C
+_020AA040:
+ add r7, r7, r5
+ cmp r7, r11
+ movgt r7, r11
+_020AA04C:
+ ldr r5, _020AA0A0 ; =0x020FF5C4
+ ldrsb r5, [r5, r9]
+ adds r6, r6, r5
+ ldrmi r6, [sp, #0x14]
+ bmi _020AA068
+ cmp r6, #0x58
+ movgt r6, lr
+_020AA068:
+ mov r5, r7, lsl #0x10
+ mov r7, r5, asr #0x10
+ strh r7, [r3, #0x0]
+ strb r6, [r3, #0x2]
+ add r12, r12, #0x1
+ strh r7, [r1, #0x2]
+ cmp r12, r2
+ add r1, r1, #0x4
+ add r0, r0, #0x1
+ blo _020A9F40
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AA098: .word 0x00007FFF
+_020AA09C: .word 0x020FF5D4
+_020AA0A0: .word 0x020FF5C4
+
+ arm_func_start FUN_020AA0A4
+FUN_020AA0A4:
+ stmdb sp!, {r4-r8,lr}
+ ldr r0, _020AA1B4 ; =0x021CA8D0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r8,pc}
+_020AA0BC: ; 0x020AA0BC
+ ldr r1, _020AA1B8 ; =0x021CAF00
+ ldr r0, [r1, #0x8c8]
+ cmp r0, #0x0
+ bne _020AA0FC
+ bl FUN_020AA4C0
+ ldr r1, _020AA1B8 ; =0x021CAF00
+ cmp r0, #0x0
+ str r0, [r1, #0x8c8]
+ beq _020AA0F4
+ ldr r0, _020AA1BC ; =0x021CA8C8
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4-r8,pc}
+_020AA0F4:
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,pc}
+_020AA0FC:
+ ldr r0, _020AA1C0 ; =0x021CCD20
+ mov r5, #0x1
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x2
+ bne _020AA130
+ ldr r3, [r1, #0x8d4]
+ ldr r2, _020AA1C4 ; =0x020FF694
+ mov r0, #0x3
+ mla r0, r3, r0, r2
+ ldr r3, [r1, #0x8d0]
+ add r2, r3, #0x1
+ ldrb r5, [r3, r0]
+ str r2, [r1, #0x8d0]
+_020AA130:
+ mov r4, #0x0
+ ldr r7, _020AA1B8 ; =0x021CAF00
+ mov r8, #0x80000000
+ ldr r6, _020AA1C8 ; =0x021CA8BC
+ b _020AA1A4
+_020AA144:
+ ldr r1, [r7, #0x8cc]
+ mov r2, r1
+ clz r2, r2
+ cmp r2, #0x20
+ beq _020AA1AC
+ mvn r0, r8, lsr r2
+ and r3, r1, r0
+ rsb r0, r2, #0x1f
+ ldr r1, [r7, #0x8c8]
+ ldr r2, [r6, #0x0]
+ str r3, [r7, #0x8cc]
+ and r0, r0, #0xff
+ bl FUN_021EAE90
+ ldr r0, [r7, #0x8cc]
+ cmp r0, #0x0
+ bne _020AA1A0
+ ldr r1, [r7, #0x8c0]
+ mov r0, #0x0
+ add r1, r1, #0x1
+ str r1, [r7, #0x8c0]
+ str r0, [r7, #0x8c8]
+ str r0, [r7, #0x8cc]
+ b _020AA1AC
+_020AA1A0:
+ add r4, r4, #0x1
+_020AA1A4:
+ cmp r4, r5
+ blt _020AA144
+_020AA1AC:
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020AA1B4: .word 0x021CA8D0
+_020AA1B8: .word 0x021CAF00
+_020AA1BC: .word 0x021CA8C8
+_020AA1C0: .word 0x021CCD20
+_020AA1C4: .word 0x020FF694
+_020AA1C8: .word 0x021CA8BC
+
+ arm_func_start FUN_020AA1CC
+FUN_020AA1CC: ; 0x020AA1CC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ bl FUN_020AB154
+_020AA1D8: ; 0x020AA1D8
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020AA1E8: ; 0x020AA1E8
+ ldrb r5, [r0, #0x11]
+ mov r0, r5
+ bl FUN_020AB144
+ mov r6, r0
+ cmp r6, #0x0
+ mov r7, #0x0
+ ble _020AA294
+_020AA204:
+ mov r0, r5
+ bl FUN_020AB10C
+ mov r4, r0
+ ldr r3, [r4, #0xc]
+ cmp r3, #0x2
+ blt _020AA230
+ ldr r0, [r4, #0x474]
+ ldr r2, [r4, #0x14]
+ add r1, r4, #0x1c
+ bl FUN_020A8C28
+ b _020AA25C
+_020AA230:
+ cmp r3, #0x1
+ bne _020AA24C
+ ldr r0, [r4, #0x474]
+ ldr r2, [r4, #0x14]
+ add r1, r4, #0x1c
+ bl FUN_020AB328
+ b _020AA25C
+_020AA24C:
+ ldr r0, [r4, #0x474]
+ ldr r2, [r4, #0x14]
+ add r1, r4, #0x1c
+ bl FUN_020AB2C0
+_020AA25C:
+ add r1, r4, #0x1c
+ mov r0, r4
+ str r1, [r4, #0x474]
+ bl FUN_020AB088
+ ldrb r1, [r4, #0x11]
+ mov r0, r4
+ bl FUN_020AB500
+_020AA278: ; 0x020AA278
+ cmp r0, #0x0
+ bge _020AA288
+ mov r0, r4
+ bl FUN_020ACD90
+_020AA288:
+ add r7, r7, #0x1
+ cmp r7, r6
+ blt _020AA204
+_020AA294:
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020AA2A0
+FUN_020AA2A0: ; 0x020AA2A0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020AA4A8 ; =0x021CA8D0
+ mov r10, r0
+ ldr r0, [r4, #0x0]
+ ldr r7, [sp, #0x28]
+ cmp r0, #0x0
+ mov r5, #0x0
+ mov r9, r1
+ mov r8, r2
+ mov r11, r3
+ addeq sp, sp, #0x4
+ moveq r0, r5
+ ldmeqia sp!, {r4-r11,pc}
+_020AA2D8: ; 0x020AA2D8
+ ldr r1, _020AA4AC ; =0x021CA8E8
+ mov r2, r5
+_020AA2E0:
+ ldr r0, [r1, #0x38]
+ cmp r10, r0
+ ldreq r1, _020AA4AC ; =0x021CA8E8
+ moveq r0, #0x94
+ mlaeq r5, r2, r0, r1
+ beq _020AA308
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ add r1, r1, #0x94
+ blo _020AA2E0
+_020AA308:
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,pc}
+_020AA318: ; 0x020AA318
+ ldrb r0, [r9, #0x4]
+ cmp r0, #0x41
+ bne _020AA344
+ ldrh r2, [r9, #0x6]
+ mov r0, #0x0
+ mov r1, #0x1
+ str r2, [r5, #0x30]
+ str r0, [r5, #0x4c]
+ add sp, sp, #0x4
+ str r1, [r5, #0x6c]
+ ldmia sp!, {r4-r11,pc}
+_020AA344:
+ cmp r0, #0x40
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r11,pc}
+_020AA354: ; 0x020AA354
+ ldrb r0, [r9, #0x5]
+ and r4, r0, #0x7f
+ cmp r4, #0x5
+ addge sp, sp, #0x4
+ str r4, [r5, #0x24]
+ movge r0, #0x0
+ ldmgeia sp!, {r4-r11,pc}
+_020AA370: ; 0x020AA370
+ ldr r1, _020AA4B0 ; =0x020FF689
+ ldr r0, _020AA4B4 ; =0x020FF688
+ ldrb r2, [r1, r4, lsl #0x1]
+ ldrb r1, [r0, r4, lsl #0x1]
+ mov r0, #0x44
+ mla r0, r1, r0, r2
+ add r0, r0, #0xc
+ cmp r8, r0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r11,pc}
+_020AA39C: ; 0x020AA39C
+ cmp r10, #0x0
+ movne r0, #0x1
+ movne r1, r0, lsl r10
+ ldr r0, _020AA4B8 ; =0x021CA8B4
+ moveq r1, #0x1
+ ldr r0, [r0, #0x0]
+ ands r0, r0, r1
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,pc}
+_020AA3C4: ; 0x020AA3C4
+ bl FUN_020ACDC8
+ movs r6, r0
+ bne _020AA40C
+ ldr r0, [r5, #0x34]
+ bl FUN_020AB6C4
+ ldr r0, [r5, #0x34]
+ bl FUN_020AB234
+ bl FUN_020ACDC8
+ movs r6, r0
+ bne _020AA3FC
+ bl FUN_020AB630
+ bl FUN_020AB1E4
+ bl FUN_020ACDC8
+ mov r6, r0
+_020AA3FC:
+ cmp r6, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,pc}
+_020AA40C:
+ ldr r0, _020AA4BC ; =0x0000045C
+ sub r2, r8, #0xc
+ add r0, r6, r0
+ sub r1, r0, r2
+ add r0, r9, #0xc
+ str r1, [sp, #0x0]
+ bl MI_CpuCopy8
+ ldr r0, [r5, #0x34]
+ sub r1, r8, #0xc
+ strb r0, [r6, #0x11]
+ ldr r0, [sp, #0x0]
+ str r4, [r6, #0xc]
+ str r0, [r6, #0x474]
+ str r1, [r6, #0x14]
+ str r11, [r6, #0x464]
+ str r7, [r6, #0x468]
+ strb r10, [r6, #0x10]
+ ldrb r2, [r9, #0x5]
+ mov r0, r5
+ mov r1, r6
+ and r2, r2, #0x80
+ str r2, [r6, #0x45c]
+ ldr r2, [r9, #0x8]
+ str r2, [r6, #0x460]
+ ldrh r2, [r9, #0x6]
+ str r2, [r6, #0x18]
+ bl FUN_020AB760
+_020AA478: ; 0x020AA478
+ cmp r0, #0x0
+ bne _020AA494
+ mov r0, r6
+ bl FUN_020ACD90
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020AA494:
+ mov r0, r6
+ bl FUN_020AB164
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AA4A8: .word 0x021CA8D0
+_020AA4AC: .word 0x021CA8E8
+_020AA4B0: .word 0x020FF689
+_020AA4B4: .word 0x020FF688
+_020AA4B8: .word 0x021CA8B4
+_020AA4BC: .word 0x0000045C
+
+ arm_func_start FUN_020AA4C0
+FUN_020AA4C0: ; 0x020AA4C0
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r0, _020AA728 ; =0x021CAF00
+ ldr r1, _020AA72C ; =0x021CA8CC
+ ldr r3, [r0, #0x8c4]
+ ldr r2, [r0, #0x8c0]
+ ldr r5, [r1, #0x0]
+ sub r1, r3, r2
+ cmp r1, #0x1
+ subhi r1, r3, #0x1
+ strhi r1, [r0, #0x8c0]
+ movhi r1, #0x1
+ cmp r1, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020AA500: ; 0x020AA500
+ ldr r0, _020AA728 ; =0x021CAF00
+ ldr r0, [r0, #0x8c0]
+ ands r0, r0, #0x1
+ movne r1, #0x0
+ moveq r1, #0x460
+ ldr r0, _020AA728 ; =0x021CAF00
+ cmp r5, #0x2
+ add r8, r0, r1
+ ldr r1, _020AA730 ; =0x021CA8D4
+ add r7, r8, #0xc
+ addge r7, r7, #0x4
+ ldr r1, [r1, #0x0]
+ mov r0, r7
+ bl FUN_020AD500
+ ldr r2, _020AA734 ; =0x040002B0
+ mov r3, #0x0
+ ldr r1, _020AA738 ; =0x040002B8
+ mov r6, r0
+ strh r3, [r2, #0x0]
+ str r6, [r1, #0x0]
+_020AA550:
+ ldrh r0, [r2, #0x0]
+ ands r0, r0, #0x8000
+ bne _020AA550
+ ldr r0, _020AA73C ; =0x021CA8C8
+ ldr r1, _020AA740 ; =0x040002B4
+ ldr r0, [r0, #0x0]
+ ldr r4, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020AA588
+ ldr r1, _020AA730 ; =0x021CA8D4
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ mov r2, r4
+ bl FUN_020AD1CC
+_020AA588:
+ ldr r0, _020AA744 ; =0x0210646C
+ strb r5, [r8, #0x5]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020AA5FC
+ mov r0, r6
+ mov r1, r4
+ mov r2, #0x0
+ bl FUN_020ACF38
+ ldr r1, _020AA748 ; =0x021CA8D8
+ cmp r0, #0x0
+ str r0, [r1, #0x0]
+ beq _020AA5D4
+ cmp r0, #0x1
+ beq _020AA5F0
+ cmp r0, #0x3
+ moveq r0, #0x41
+ streqb r0, [r8, #0x4]
+ b _020AA5FC
+_020AA5D4:
+ ldr r1, _020AA728 ; =0x021CAF00
+ add sp, sp, #0x8
+ ldr r2, [r1, #0x8c0]
+ mov r0, #0x0
+ add r2, r2, #0x1
+ str r2, [r1, #0x8c0]
+ ldmia sp!, {r4-r8,pc}
+_020AA5F0:
+ ldrb r0, [r8, #0x5]
+ orr r0, r0, #0x80
+ strb r0, [r8, #0x5]
+_020AA5FC:
+ ldr r0, _020AA744 ; =0x0210646C
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020AA62C
+ ldr r0, _020AA74C ; =0x021CA8B8
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ ldrneb r2, [r8, #0x5]
+ movne r1, #0x0
+ orrne r2, r2, #0x80
+ strneb r2, [r8, #0x5]
+ strne r1, [r0, #0x0]
+_020AA62C:
+ ldr r0, _020AA750 ; =0x021CA8C4
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ ldrneb r2, [r8, #0x5]
+ movne r1, #0x0
+ orrne r2, r2, #0x80
+ strneb r2, [r8, #0x5]
+ strne r1, [r0, #0x0]
+ cmp r5, #0x2
+ blt _020AA690
+ ldrb r0, [r8, #0x5]
+ ldr r3, _020AA754 ; =0x021CA8C0
+ ands r0, r0, #0x80
+ ldrne r0, _020AA754 ; =0x021CA8C0
+ movne r1, #0x0
+ strneh r1, [r0, #0x0]
+ strneb r1, [r0, #0x2]
+ ldr r0, _020AA730 ; =0x021CA8D4
+ str r5, [sp, #0x0]
+ ldr r2, [r0, #0x0]
+ mov r1, r7
+ sub r0, r7, #0x4
+ mov r2, r2, lsr #0x1
+ bl FUN_020A8BC8
+ b _020AA6D4
+_020AA690:
+ cmp r5, #0x1
+ bne _020AA6B4
+ ldr r1, _020AA730 ; =0x021CA8D4
+ mov r0, r7
+ ldr r2, [r1, #0x0]
+ mov r1, r7
+ mov r2, r2, lsr #0x1
+ bl FUN_020AB37C
+ b _020AA6D4
+_020AA6B4:
+ cmp r5, #0x0
+ bne _020AA6D4
+ ldr r1, _020AA730 ; =0x021CA8D4
+ mov r0, r7
+ ldr r2, [r1, #0x0]
+ mov r1, r7
+ mov r2, r2, lsr #0x1
+ bl FUN_020AB2FC
+_020AA6D4:
+ ldr r0, _020AA758 ; =0x021CCD20
+ ldr r1, _020AA75C ; =0x021CA8B4
+ ldrb r0, [r0, #0x0]
+ mov r2, #0x1
+ ldr r3, [r1, #0x0]
+ mvn r0, r2, lsl r0
+ ldr r1, _020AA728 ; =0x021CAF00
+ and r0, r3, r0
+ str r3, [r1, #0x8cc]
+ str r0, [r1, #0x8cc]
+ bl MATH_CountPopulation
+ sub r0, r0, #0x1
+ ldr r1, _020AA728 ; =0x021CAF00
+ cmp r0, #0x7
+ str r0, [r1, #0x8d4]
+ movgt r0, #0x0
+ movle r2, #0x0
+ movle r0, r8
+ strle r2, [r1, #0x8d0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020AA728: .word 0x021CAF00
+_020AA72C: .word 0x021CA8CC
+_020AA730: .word 0x021CA8D4
+_020AA734: .word 0x040002B0
+_020AA738: .word 0x040002B8
+_020AA73C: .word 0x021CA8C8
+_020AA740: .word 0x040002B4
+_020AA744: .word 0x0210646C
+_020AA748: .word 0x021CA8D8
+_020AA74C: .word 0x021CA8B8
+_020AA750: .word 0x021CA8C4
+_020AA754: .word 0x021CA8C0
+_020AA758: .word 0x021CCD20
+_020AA75C: .word 0x021CA8B4
+
+ arm_func_start FUN_020AA760
+FUN_020AA760: ; 0x020AA760
+ ldr r1, _020AA76C ; =0x021CA8C8
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020AA76C: .word 0x021CA8C8
+
+ arm_func_start FUN_020AA770
+FUN_020AA770: ; 0x020AA770
+ stmdb sp!, {r4,lr}
+ ldr r1, _020AA798 ; =0x0210646C
+ mov r4, r0
+ str r4, [r1, #0x0]
+ bl FUN_020AD170
+_020AA784: ; 0x020AA784
+ cmp r4, #0x0
+ ldreq r0, _020AA79C ; =0x021CA8B8
+ moveq r1, #0x1
+ streq r1, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AA798: .word 0x0210646C
+_020AA79C: .word 0x021CA8B8
+
+ arm_func_start FUN_020AA7A0
+FUN_020AA7A0: ; 0x020AA7A0
+ cmp r0, #0x5
+ movge r0, #0x0
+ bxge lr
+ ldr r1, _020AA80C ; =0x021CCD20
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x1
+ beq _020AA7C8
+ cmp r0, #0x1
+ movls r0, #0x0
+ bxls lr
+_020AA7C8:
+ ldr r2, _020AA810 ; =0x020FF689
+ ldr r1, _020AA814 ; =0x020FF688
+ ldrb r12, [r2, r0, lsl #0x1]
+ ldrb r3, [r1, r0, lsl #0x1]
+ mov r1, #0x44
+ ldr r2, _020AA818 ; =0x021CA8CC
+ mla r12, r3, r1, r12
+ str r0, [r2, #0x0]
+ ldr r1, _020AA81C ; =0x021CA8BC
+ add r3, r12, #0xc
+ ldr r0, _020AA820 ; =0x021CA8C0
+ mov r2, #0x0
+ str r3, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ strb r2, [r0, #0x2]
+ mov r0, #0x1
+ bx lr
+ .balign 4
+_020AA80C: .word 0x021CCD20
+_020AA810: .word 0x020FF689
+_020AA814: .word 0x020FF688
+_020AA818: .word 0x021CA8CC
+_020AA81C: .word 0x021CA8BC
+_020AA820: .word 0x021CA8C0
+
+ arm_func_start FUN_020AA824
+FUN_020AA824: ; 0x020AA824
+ stmdb sp!, {r4-r10,lr}
+ movs r5, r2
+ mov r7, r0
+ movne r0, #0x0
+ strne r0, [r5, #0x0]
+ ldr r0, _020AA958 ; =0x021CA8D4
+ mov r6, r1
+ ldr r0, [r0, #0x0]
+ mov r4, #0x0
+ cmp r6, r0
+ bne _020AA920
+ ldr r8, _020AA95C ; =0x021CA8D0
+ ldr r0, [r8, #0x0]
+ cmp r0, #0x0
+ beq _020AA920
+ mov r9, r4
+ cmp r0, #0x0
+ bls _020AA89C
+_020AA86C:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r9
+ mov r3, r5
+ bl FUN_020AA968
+ cmp r0, #0x1
+ moveq r4, #0x1
+ beq _020AA89C
+ ldr r0, [r8, #0x0]
+ add r9, r9, #0x1
+ cmp r9, r0
+ blo _020AA86C
+_020AA89C:
+ cmp r4, #0x0
+ beq _020AA90C
+ ldr r8, _020AA95C ; =0x021CA8D0
+ add r10, r9, #0x1
+ ldr r0, [r8, #0x0]
+ cmp r10, r0
+ moveq r4, #0x1
+ beq _020AA934
+ cmp r10, r0
+ bhs _020AA934
+ ldr sb, _020AA960 ; =0x021CAAA4
+_020AA8C8:
+ mov r0, r9
+ mov r1, r6
+ mov r2, r10
+ mov r3, r5
+ bl FUN_020AA968
+ cmp r0, #0x1
+ bne _020AA8F8
+ mov r0, r7
+ mov r1, r9
+ mov r2, r7
+ mov r3, r6
+ bl FUN_020AD61C
+_020AA8F8:
+ ldr r0, [r8, #0x0]
+ add r10, r10, #0x1
+ cmp r10, r0
+ blo _020AA8C8
+ b _020AA934
+_020AA90C:
+ mov r1, r7
+ mov r2, r6
+ mov r0, #0x0
+ bl MIi_CpuClearFast
+ b _020AA934
+_020AA920:
+ mov r1, r7
+ mov r2, r6
+ mov r0, #0x0
+ bl MIi_CpuClearFast
+ mov r4, #0x0
+_020AA934:
+ ldr r0, _020AA964 ; =0x021CA8C8
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020AA950
+ mov r0, r7
+ mov r1, r6
+ bl FUN_020AD45C
+_020AA950:
+ mov r0, r4
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020AA958: .word 0x021CA8D4
+_020AA95C: .word 0x021CA8D0
+_020AA960: .word 0x021CAAA4
+_020AA964: .word 0x021CA8C8
+
+ arm_func_start FUN_020AA968
+FUN_020AA968: ; 0x020AA968
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r4, _020AABD4 ; =0x021CA8E8
+ mov r10, r2
+ mov r2, #0x94
+ mla r6, r10, r2, r4
+ str r0, [sp, #0x0]
+ mov r0, r10
+ str r1, [sp, #0x4]
+ str r3, [sp, #0x8]
+ mov r5, #0x1
+ bl FUN_020AB434
+ movs r8, r0
+ beq _020AABB0
+ mov r11, #0x0
+_020AA9A4:
+ bl OS_GetTick
+ mov r4, r0
+ mov r0, r10
+ mov r9, r1
+ bl FUN_020AB4B8
+ movs r7, r0
+ beq _020AAB98
+ mov r0, #0x34
+ adds r2, r4, r0
+ ldr r8, [r7, #0x46c]
+ ldr r3, [r7, #0x470]
+ mov r1, #0x0
+ adc r0, r9, #0x0
+ cmp r3, r0
+ cmpeq r8, r2
+ bls _020AAA68
+ ldr r0, [r7, #0x45c]
+ cmp r0, #0x0
+ bne _020AAA5C
+ ldr r0, [r6, #0x3c]
+ cmp r0, #0x0
+ beq _020AAA5C
+ ldr r0, [r6, #0x20]
+ ldr r1, [sp, #0x0]
+ add r0, r0, #0x1
+ str r0, [r6, #0x20]
+ ldr r0, [r6, #0x3c]
+ ldr r2, [sp, #0x4]
+ ldr r0, [r0, #0x474]
+ bl MIi_CpuCopyFast
+ ldr r0, [r6, #0x3c]
+ bl FUN_020ACD90
+_020AAA24: ; 0x020AAA24
+ mov r0, #0x0
+ str r0, [r6, #0x3c]
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _020AAA50
+ ldrb r1, [r7, #0x10]
+ ldr r2, [r0, #0x0]
+ mov r0, #0x1
+ orr r1, r2, r0, lsl r1
+ ldr r0, [sp, #0x8]
+ str r1, [r0, #0x0]
+_020AAA50:
+ add sp, sp, #0xc
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020AAA5C:
+ add sp, sp, #0xc
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020AAA68:
+ ldr r0, _020AABD8 ; =0x00008B4C
+ adds r2, r8, r0
+ adc r0, r3, r1
+ cmp r9, r0
+ cmpeq r4, r2
+ bls _020AAAA8
+ ldr r2, [r7, #0x18]
+ mov r0, r6
+ mov r1, r7
+ str r2, [r6, #0x58]
+ bl FUN_020ABC0C
+ mov r8, r0
+ mov r0, r10
+ bl FUN_020AB4B8
+ mov r5, r11
+ b _020AABA8
+_020AAAA8:
+ ldr r1, [r6, #0x58]
+ ldr r2, [r7, #0x18]
+ add r0, r1, #0x1
+ cmp r0, r2
+ beq _020AAAE0
+ cmp r1, #0x0
+ beq _020AAAE0
+ cmp r1, r2
+ bhi _020AAAE0
+ ldr r0, [r7, #0x45c]
+ cmp r0, #0x0
+ ldreq r0, [r6, #0x14]
+ addeq r0, r0, #0x1
+ streq r0, [r6, #0x14]
+_020AAAE0:
+ ldr r0, [r7, #0x18]
+ cmp r5, #0x0
+ str r0, [r6, #0x58]
+ beq _020AAB24
+ ldr r0, [r6, #0x70]
+ cmp r0, #0x0
+ beq _020AAB24
+ mov r0, r6
+ mov r1, r7
+ bl FUN_020ABC0C
+ mov r8, r0
+ mov r0, r10
+ bl FUN_020AB4B8
+ ldr r0, [r6, #0x70]
+ sub r0, r0, #0x1
+ str r0, [r6, #0x70]
+ b _020AABA8
+_020AAB24:
+ ldr r1, [r7, #0x464]
+ ldr r0, [r6, #0x28]
+ subs r2, r4, r1
+ str r2, [r6, #0x28]
+ ldr r1, [r6, #0x28]
+ sub r0, r2, r0
+ sub r0, r0, r1
+ add r0, r1, r0, lsr #0x4
+ str r0, [r6, #0x2c]
+ str r0, [r6, #0x0]
+ ldr r0, [r7, #0x474]
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ bl MIi_CpuCopyFast
+ mov r0, r6
+ mov r1, r7
+ bl FUN_020ABC0C
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ beq _020AAB8C
+ ldrb r1, [r7, #0x10]
+ ldr r2, [r0, #0x0]
+ mov r0, #0x1
+ orr r1, r2, r0, lsl r1
+ ldr r0, [sp, #0x8]
+ str r1, [r0, #0x0]
+_020AAB8C:
+ add sp, sp, #0xc
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020AAB98:
+ add sp, sp, #0xc
+ str r8, [r6, #0x8]
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020AABA8:
+ cmp r8, #0x0
+ bne _020AA9A4
+_020AABB0:
+ ldr r0, [r6, #0x3c]
+ cmp r0, #0x0
+ beq _020AABC8
+ bl FUN_020ACD90
+_020AABC0: ; 0x020AABC0
+ mov r0, #0x0
+ str r0, [r6, #0x3c]
+_020AABC8:
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AABD4: .word 0x021CA8E8
+_020AABD8: .word 0x00008B4C
+
+ arm_func_start FUN_020AABDC
+FUN_020AABDC: ; 0x020AABDC
+ stmdb sp!, {r4,lr}
+ ldr r3, _020AACE0 ; =0x021CA8D4
+ mov r2, r1
+ ldr r1, [r3, #0x0]
+ mov r12, #0x0
+ cmp r2, r1
+ movne r0, r12
+ ldmneia sp!, {r4,pc}
+_020AABFC: ; 0x020AABFC
+ ldr r1, _020AACE4 ; =0x021CA8D0
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ moveq r0, r12
+ ldmeqia sp!, {r4,pc}
+_020AAC10: ; 0x020AAC10
+ mov lr, r12
+ cmp r4, #0x0
+ bls _020AAC48
+ ldr r3, _020AACE8 ; =0x021CA8DC
+_020AAC20:
+ ldr r1, [r3, lr, lsl #0x2]
+ cmp r1, #0x0
+ beq _020AAC3C
+ ldr r1, [r1, #0xc]
+ cmp r1, #0x2
+ moveq r12, #0x1
+ beq _020AAC48
+_020AAC3C:
+ add lr, lr, #0x1
+ cmp lr, r4
+ blo _020AAC20
+_020AAC48:
+ cmp r12, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AAC54: ; 0x020AAC54
+ ldr r1, _020AACEC ; =0x021CAF00
+ ldr r4, _020AACEC ; =0x021CAF00
+ ldr r1, [r1, #0x8c4]
+ ldr r3, _020AACF0 ; =0x5F564354
+ ands r1, r1, #0x1
+ movne r12, #0x0
+ moveq r12, #0x460
+ str r3, [r4, r12]
+ ldr r1, _020AACF4 ; =0x021CA8CC
+ add r4, r4, r12
+ ldr r1, [r1, #0x0]
+ cmp r1, #0x2
+ blt _020AAC94
+ add r1, r4, #0x10
+ bl MIi_CpuCopyFast
+ b _020AAC9C
+_020AAC94:
+ add r1, r4, #0xc
+ bl MIi_CpuCopyFast
+_020AAC9C:
+ mov r1, #0x40
+ ldr r0, _020AACF8 ; =0x021CA8B0
+ strb r1, [r4, #0x4]
+ ldrh r2, [r0, #0x0]
+ add r1, r2, #0x1
+ strh r1, [r0, #0x0]
+ strh r2, [r4, #0x6]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x6
+ orr r0, r0, r1, lsl #0x1a
+ ldr r1, _020AACEC ; =0x021CAF00
+ str r0, [r4, #0x8]
+ ldr r2, [r1, #0x8c4]
+ mov r0, #0x1
+ add r2, r2, #0x1
+ str r2, [r1, #0x8c4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AACE0: .word 0x021CA8D4
+_020AACE4: .word 0x021CA8D0
+_020AACE8: .word 0x021CA8DC
+_020AACEC: .word 0x021CAF00
+_020AACF0: .word 0x5F564354
+_020AACF4: .word 0x021CA8CC
+_020AACF8: .word 0x021CA8B0
+
+ arm_func_start FUN_020AACFC
+FUN_020AACFC: ; 0x020AACFC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, #0x0
+ ldr ip, _020AADB8 ; =0x021CA8DC
+_020AAD10:
+ ldr r0, [r12, r4, lsl #0x2]
+ mov lr, r4, lsl #0x2
+ cmp r0, r5
+ bne _020AAD74
+ ldr r1, _020AADBC ; =0x021CA8E8
+ mov r0, #0x94
+ mla r0, r4, r0, r1
+ ldr r1, _020AADC0 ; =0x021CA8D0
+ mov r3, #0x0
+ ldr r2, [r1, #0x0]
+ str r3, [r12, lr]
+ sub r2, r2, #0x1
+ str r2, [r1, #0x0]
+ bl FUN_020ABC40
+ mov r0, r4
+ bl FUN_020AB6C4
+ mov r0, r4
+ bl FUN_020AB234
+ ldr r0, _020AADC4 ; =0x021CA8B4
+ ldr r1, [r5, #0x8]
+ ldr r2, [r0, #0x0]
+ mvn r1, r1
+ and r1, r2, r1
+ str r1, [r0, #0x0]
+ b _020AAD80
+_020AAD74:
+ add r4, r4, #0x1
+ cmp r4, #0x3
+ blo _020AAD10
+_020AAD80:
+ ldr r0, _020AADC0 ; =0x021CA8D0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020AAD94: ; 0x020AAD94
+ ldr r0, _020AADC8 ; =0x021CA8C4
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ bl FUN_020AD170
+ ldr r0, _020AADC4 ; =0x021CA8B4
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AADB8: .word 0x021CA8DC
+_020AADBC: .word 0x021CA8E8
+_020AADC0: .word 0x021CA8D0
+_020AADC4: .word 0x021CA8B4
+_020AADC8: .word 0x021CA8C4
+
+ arm_func_start FUN_020AADCC
+FUN_020AADCC: ; 0x020AADCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020AADE4: ; 0x020AADE4
+ ldr r0, _020AAF24 ; =0x021CA8D0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x3
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020AADFC: ; 0x020AADFC
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x2
+ beq _020AAE18
+ cmp r0, #0x3
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r5,pc}
+_020AAE18:
+ ldr r1, _020AAF28 ; =0x021CA8DC
+ mov r2, #0x0
+_020AAE20:
+ ldr r0, [r1, r2, lsl #0x2]
+ cmp r0, r5
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r5,pc}
+_020AAE34: ; 0x020AAE34
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blo _020AAE20
+ ldr r1, _020AAF28 ; =0x021CA8DC
+ mov r4, #0x0
+_020AAE48:
+ ldr r0, [r1, r4, lsl #0x2]
+ mov r2, r4, lsl #0x2
+ cmp r0, #0x0
+ streq r5, [r1, r2]
+ beq _020AAE68
+ add r4, r4, #0x1
+ cmp r4, #0x3
+ blo _020AAE48
+_020AAE68:
+ ldr r0, _020AAF24 ; =0x021CA8D0
+ ldr r1, _020AAF2C ; =0x021CA8B4
+ ldr r3, [r0, #0x0]
+ ldr r2, _020AAF30 ; =0x021CA8E8
+ add r3, r3, #0x1
+ str r3, [r0, #0x0]
+ mov r0, #0x94
+ ldr r12, [r1, #0x0]
+ ldr r3, [r5, #0x8]
+ mla r0, r4, r0, r2
+ orr r2, r12, r3
+ str r2, [r1, #0x0]
+ ldrb r2, [r5, #0x5]
+ mov r1, r4
+ bl FUN_020ABC6C
+ mov r0, r4
+ bl FUN_020AB714
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x2
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r5,pc}
+_020AAEC0: ; 0x020AAEC0
+ ldr r0, _020AAF24 ; =0x021CA8D0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x1
+ bne _020AAF18
+ bl FUN_020AD170
+ bl OS_GetTickLo
+ ldr r4, _020AAF34 ; =0x021CA8B0
+ ldr r3, _020AAF38 ; =0x021CA8C0
+ mov r12, #0x0
+ ldr r1, _020AAF3C ; =0x021CAF00
+ ldr r2, _020AAF40 ; =0x021CA8C4
+ mov r5, #0x1
+ strh r0, [r4, #0x0]
+ strh r12, [r3, #0x0]
+ strb r12, [r3, #0x2]
+ str r5, [r2, #0x0]
+ str r12, [r1, #0x8c0]
+ str r12, [r1, #0x8c4]
+ str r12, [r1, #0x8cc]
+ str r12, [r1, #0x8c8]
+ str r12, [r1, #0x8d0]
+ str r12, [r1, #0x8d4]
+_020AAF18:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AAF24: .word 0x021CA8D0
+_020AAF28: .word 0x021CA8DC
+_020AAF2C: .word 0x021CA8B4
+_020AAF30: .word 0x021CA8E8
+_020AAF34: .word 0x021CA8B0
+_020AAF38: .word 0x021CA8C0
+_020AAF3C: .word 0x021CAF00
+_020AAF40: .word 0x021CA8C4
+
+ arm_func_start FUN_020AAF44
+FUN_020AAF44: ; 0x020AAF44
+ ldr r0, _020AAF54 ; =0x021CA8D0
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020AAF54: .word 0x021CA8D0
+
+ arm_func_start FUN_020AAF58
+FUN_020AAF58:
+ stmdb sp!, {r4-r8,lr}
+ bl OS_GetTickLo
+ ldr r1, _020AB054 ; =0x021CCD20
+ ldr ip, _020AB058 ; =0x021CA8B0
+ ldr r4, [r1, #0x10]
+ strh r0, [r12, #0x0]
+ cmp r4, #0x1
+ ldreq r0, _020AB05C ; =0x021CA8CC
+ mov r5, #0x0
+ ldr r1, _020AB060 ; =0x021CA8B4
+ streq r5, [r0, #0x0]
+ str r5, [r1, #0x0]
+ ldr r2, _020AB064 ; =0x021CA8D0
+ ldrne r0, _020AB05C ; =0x021CA8CC
+ movne r1, #0x4
+ strne r1, [r0, #0x0]
+ str r5, [r2, #0x0]
+ ldr r0, _020AB05C ; =0x021CA8CC
+ ldr r3, _020AB068 ; =0x0210646C
+ ldr r2, [r0, #0x0]
+ mov r6, #0x1
+ ldr r1, _020AB06C ; =0x020FF689
+ str r6, [r3, #0x0]
+ ldr r0, _020AB070 ; =0x020FF688
+ ldrb r3, [r1, r2, lsl #0x1]
+ ldrb r1, [r0, r2, lsl #0x1]
+ mov r0, #0x44
+ ldr r2, _020AB074 ; =0x021CA8D4
+ mla r0, r1, r0, r3
+ add r4, r0, #0xc
+ ldr r1, _020AB078 ; =0x021CA8BC
+ mov r5, #0x440
+ ldr r0, _020AB07C ; =0x021CAF00
+ mov r3, #0x0
+ str r5, [r2, #0x0]
+ str r4, [r1, #0x0]
+ str r3, [r0, #0x8c0]
+ str r3, [r0, #0x8c4]
+ str r3, [r0, #0x8cc]
+ str r3, [r0, #0x8c8]
+ str r3, [r0, #0x8d0]
+ str r3, [r0, #0x8d4]
+ bl FUN_020ACF10
+ mov r8, #0x0
+ ldr r7, _020AB080 ; =0x021CA8E8
+ ldr r5, _020AB084 ; =0x021CA8DC
+ mov r6, r8
+ mvn r4, #0x0
+_020AB018:
+ mov r0, r8
+ str r6, [r5, r8, lsl #0x2]
+ bl FUN_020AB714
+ mov r0, r7
+ mov r1, r8
+ mov r2, r4
+ bl FUN_020ABC6C
+ add r8, r8, #0x1
+ cmp r8, #0x3
+ add r7, r7, #0x94
+ blo _020AB018
+ bl FUN_020AB284
+ bl FUN_020AD474
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020AB054: .word 0x021CCD20
+_020AB058: .word 0x021CA8B0
+_020AB05C: .word 0x021CA8CC
+_020AB060: .word 0x021CA8B4
+_020AB064: .word 0x021CA8D0
+_020AB068: .word 0x0210646C
+_020AB06C: .word 0x020FF689
+_020AB070: .word 0x020FF688
+_020AB074: .word 0x021CA8D4
+_020AB078: .word 0x021CA8BC
+_020AB07C: .word 0x021CAF00
+_020AB080: .word 0x021CA8E8
+_020AB084: .word 0x021CA8DC
+
+ arm_func_start FUN_020AB088
+FUN_020AB088: ; 0x020AB088
+ ldr r2, [r0, #0x4]
+ cmp r2, #0x0
+ ldrne r1, [r0, #0x8]
+ strne r1, [r2, #0x8]
+ bne _020AB0B4
+ ldr r2, [r0, #0x8]
+ ldr r1, _020AB100 ; =0x021CB7D8
+ cmp r2, #0x0
+ str r2, [r1, #0x0]
+ movne r1, #0x0
+ strne r1, [r2, #0x4]
+_020AB0B4:
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ ldrne r1, [r0, #0x4]
+ strne r1, [r2, #0x4]
+ bne _020AB0E0
+ ldr r2, [r0, #0x4]
+ ldr r1, _020AB104 ; =0x021CB7DC
+ cmp r2, #0x0
+ str r2, [r1, #0x0]
+ movne r1, #0x0
+ strne r1, [r2, #0x8]
+_020AB0E0:
+ ldrb r2, [r0, #0x11]
+ ldr r3, _020AB108 ; =0x021CB7E0
+ ldr r1, [r3, r2, lsl #0x2]
+ sub r1, r1, #0x1
+ str r1, [r3, r2, lsl #0x2]
+ ldrb r0, [r0, #0x11]
+ ldr r0, [r3, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020AB100: .word 0x021CB7D8
+_020AB104: .word 0x021CB7DC
+_020AB108: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB10C
+FUN_020AB10C: ; 0x020AB10C
+ ldr r1, _020AB140 ; =0x021CB7D8
+ ldr r2, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020AB138
+_020AB11C:
+ ldrb r1, [r2, #0x11]
+ cmp r1, r0
+ moveq r0, r2
+ bxeq lr
+ ldr r2, [r2, #0x8]
+ cmp r2, #0x0
+ bne _020AB11C
+_020AB138:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020AB140: .word 0x021CB7D8
+
+ arm_func_start FUN_020AB144
+FUN_020AB144: ; 0x020AB144
+ ldr r1, _020AB150 ; =0x021CB7E0
+ ldr r0, [r1, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020AB150: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB154
+FUN_020AB154:
+ ldr r0, _020AB160 ; =0x021CB7D8
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020AB160: .word 0x021CB7D8
+
+ arm_func_start FUN_020AB164
+FUN_020AB164: ; 0x020AB164
+ ldr r2, _020AB1D8 ; =0x021CB7D8
+ ldr r1, [r2, #0x0]
+ cmp r1, #0x0
+ bne _020AB198
+ str r0, [r2, #0x0]
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldr r3, [r2, #0x0]
+ ldr r1, _020AB1DC ; =0x021CB7DC
+ str r12, [r3, #0x8]
+ ldr r2, [r2, #0x0]
+ str r2, [r1, #0x0]
+ b _020AB1B8
+_020AB198:
+ ldr r1, _020AB1DC ; =0x021CB7DC
+ mov r2, #0x0
+ ldr r3, [r1, #0x0]
+ str r3, [r0, #0x4]
+ str r2, [r0, #0x8]
+ ldr r2, [r1, #0x0]
+ str r0, [r2, #0x8]
+ str r0, [r1, #0x0]
+_020AB1B8:
+ ldrb r2, [r0, #0x11]
+ ldr r3, _020AB1E0 ; =0x021CB7E0
+ ldr r1, [r3, r2, lsl #0x2]
+ add r1, r1, #0x1
+ str r1, [r3, r2, lsl #0x2]
+ ldrb r0, [r0, #0x11]
+ ldr r0, [r3, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020AB1D8: .word 0x021CB7D8
+_020AB1DC: .word 0x021CB7DC
+_020AB1E0: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB1E4
+FUN_020AB1E4: ; 0x020AB1E4
+ stmdb sp!, {r4,lr}
+ ldr r0, _020AB22C ; =0x021CB7D8
+ ldr r4, [r0, #0x0]
+ cmp r4, #0x0
+ beq _020AB20C
+_020AB1F8:
+ mov r0, r4
+ ldr r4, [r4, #0x8]
+ bl FUN_020ACD90
+_020AB204: ; 0x020AB204
+ cmp r4, #0x0
+ bne _020AB1F8
+_020AB20C:
+ mov r2, #0x0
+ ldr r0, _020AB230 ; =0x021CB7E0
+ mov r1, r2
+_020AB218:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020AB218
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AB22C: .word 0x021CB7D8
+_020AB230: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB234
+FUN_020AB234: ; 0x020AB234
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl FUN_020AB10C
+ movs r4, r0
+ beq _020AB26C
+_020AB24C:
+ mov r0, r4
+ bl FUN_020AB088
+ mov r0, r4
+ bl FUN_020ACD90
+ mov r0, r5
+ bl FUN_020AB10C
+ movs r4, r0
+ bne _020AB24C
+_020AB26C:
+ ldr r0, _020AB280 ; =0x021CB7E0
+ mov r1, #0x0
+ str r1, [r0, r5, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AB280: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB284
+FUN_020AB284: ; 0x020AB284
+ ldr r1, _020AB2B4 ; =0x021CB7DC
+ mov r2, #0x0
+ ldr r0, _020AB2B8 ; =0x021CB7D8
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r0, _020AB2BC ; =0x021CB7E0
+ mov r1, r2
+_020AB2A0:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020AB2A0
+ bx lr
+ .balign 4
+_020AB2B4: .word 0x021CB7DC
+_020AB2B8: .word 0x021CB7D8
+_020AB2BC: .word 0x021CB7E0
+
+ arm_func_start FUN_020AB2C0
+FUN_020AB2C0: ; 0x020AB2C0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ addls sp, sp, #0x4
+ mov lr, #0x0
+ ldmlsia sp!, {pc}
+_020AB2D8:
+ ldrsb r12, [r0, lr]
+ mov r3, lr, lsl #0x1
+ add lr, lr, #0x1
+ mov r12, r12, lsl #0x8
+ strh r12, [r1, r3]
+ cmp lr, r2
+ blo _020AB2D8
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AB2FC
+FUN_020AB2FC: ; 0x020AB2FC
+ cmp r2, #0x0
+ mov r12, #0x0
+ bxls lr
+_020AB308:
+ mov r3, r12, lsl #0x1
+ ldrsh r3, [r1, r3]
+ mov r3, r3, asr #0x8
+ strb r3, [r0, r12]
+ add r12, r12, #0x1
+ cmp r12, r2
+ blo _020AB308
+ bx lr
+
+ arm_func_start FUN_020AB328
+FUN_020AB328: ; 0x020AB328
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ cmp r2, #0x0
+ ldmlsia sp!, {r4,pc}
+_020AB338:
+ ldrb r3, [r0, r4]
+ mvn lr, r3
+ and r3, lr, #0xf
+ mov r12, r3, lsl #0x3
+ and r3, lr, #0x70
+ add r12, r12, #0x84
+ mov r3, r3, asr #0x4
+ mov r12, r12, lsl r3
+ ands r3, lr, #0x80
+ rsbne r12, r12, #0x84
+ mov r3, r4, lsl #0x1
+ subeq r12, r12, #0x84
+ add r4, r4, #0x1
+ strh r12, [r1, r3]
+ cmp r4, r2
+ blo _020AB338
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AB37C
+FUN_020AB37C: ; 0x020AB37C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x0
+ mov r8, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r11,pc}
+_020AB394: ; 0x020AB394
+ mov r12, r8
+ mov lr, #0xff
+ mov r4, #0x7f
+ mov r3, #0x8
+_020AB3A4:
+ mov r5, r8, lsl #0x1
+ ldrsh r5, [r1, r5]
+ ldr fp, _020AB42C ; =0x02106470
+ movs r7, r5, asr #0x2
+ movmi r6, r4
+ ldr r5, _020AB430 ; =0x00001FDF
+ rsbmi r7, r7, #0x0
+ movpl r6, lr
+ cmp r7, r5
+ movgt r7, r5
+ mov r5, r12
+ add r10, r7, #0x21
+_020AB3D4:
+ ldr r9, [r11], #0x4
+ cmp r10, r9
+ ble _020AB3F0
+ add r5, r5, #0x1
+ cmp r5, #0x8
+ blt _020AB3D4
+ mov r5, r3
+_020AB3F0:
+ cmp r5, #0x8
+ eorge r5, r6, #0x7f
+ bge _020AB414
+ add r9, r7, #0x21
+ add r7, r5, #0x1
+ mov r7, r9, asr r7
+ and r7, r7, #0xf
+ orr r5, r7, r5, lsl #0x4
+ eor r5, r5, r6
+_020AB414:
+ strb r5, [r0, r8]
+ add r8, r8, #0x1
+ cmp r8, r2
+ blo _020AB3A4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AB42C: .word 0x02106470
+_020AB430: .word 0x00001FDF
+
+ arm_func_start FUN_020AB434
+FUN_020AB434: ; 0x020AB434
+ ldr r1, _020AB440 ; =0x021CB7FC
+ ldr r0, [r1, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020AB440: .word 0x021CB7FC
+
+ arm_func_start FUN_020AB444
+FUN_020AB444: ; 0x020AB444
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r3, _020AB4AC ; =0x021CB7F0
+ ldr r1, _020AB4B0 ; =0x021CB7EC
+ ldr r2, [r3, r4, lsl #0x2]
+ str r0, [r1, #0x0]
+ cmp r2, #0x0
+ mov r12, r4, lsl #0x2
+ beq _020AB494
+ ldr r1, _020AB4B4 ; =0x021CB7FC
+ ldr r2, [r2, #0x8]
+ ldr r0, [r1, r12]
+ sub r0, r0, #0x1
+ str r0, [r1, r12]
+ str r2, [r3, r12]
+ ldr r1, [r3, r12]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x4]
+_020AB494:
+ ldr r0, _020AB4B0 ; =0x021CB7EC
+ ldr r0, [r0, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020AB4B4 ; =0x021CB7FC
+ ldr r0, [r0, r4, lsl #0x2]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AB4AC: .word 0x021CB7F0
+_020AB4B0: .word 0x021CB7EC
+_020AB4B4: .word 0x021CB7FC
+
+ arm_func_start FUN_020AB4B8
+FUN_020AB4B8: ; 0x020AB4B8
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r2, _020AB4F8 ; =0x021CB7F0
+ ldr r1, _020AB4FC ; =0x021CB7EC
+ ldr r2, [r2, r4, lsl #0x2]
+ str r0, [r1, #0x0]
+ cmp r2, #0x0
+ beq _020AB4EC
+ bl OS_RestoreInterrupts
+ ldr r0, _020AB4F8 ; =0x021CB7F0
+ ldr r0, [r0, r4, lsl #0x2]
+ ldmia sp!, {r4,pc}
+_020AB4EC:
+ bl OS_RestoreInterrupts
+_020AB4F0: ; 0x020AB4F0
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AB4F8: .word 0x021CB7F0
+_020AB4FC: .word 0x021CB7EC
+
+ arm_func_start FUN_020AB500
+FUN_020AB500:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r0
+ mov r4, r1
+ addeq sp, sp, #0x4
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020AB51C: ; 0x020AB51C
+ cmp r4, #0x3
+ addcs sp, sp, #0x4
+ mvncs r0, #0x0
+ ldmcsia sp!, {r4-r5,pc}
+_020AB52C: ; 0x020AB52C
+ bl OS_DisableInterrupts
+ ldr r3, _020AB620 ; =0x021CB7F0
+ ldr r1, _020AB624 ; =0x021CB7EC
+ ldr r2, [r3, r4, lsl #0x2]
+ str r0, [r1, #0x0]
+ cmp r2, #0x0
+ mov r12, r4, lsl #0x2
+ bne _020AB574
+ str r5, [r3, r12]
+ ldr r0, [r3, r12]
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ ldr r1, [r3, r12]
+ ldr r0, _020AB628 ; =0x021CB808
+ str r2, [r1, #0x8]
+ ldr r1, [r3, r12]
+ str r1, [r0, r12]
+ b _020AB5F4
+_020AB574:
+ ldr r0, _020AB628 ; =0x021CB808
+ ldr r3, [r0, r12]
+ cmp r3, #0x0
+ beq _020AB5D4
+ ldr r1, [r5, #0x18]
+_020AB588:
+ ldr r0, [r3, #0x18]
+ cmp r0, r1
+ bhs _020AB5C8
+ str r3, [r5, #0x4]
+ ldr r0, [r3, #0x8]
+ ldr r1, _020AB628 ; =0x021CB808
+ str r0, [r5, #0x8]
+ str r5, [r3, #0x8]
+ ldr r0, [r5, #0x8]
+ mov r2, r4, lsl #0x2
+ cmp r0, #0x0
+ strne r5, [r0, #0x4]
+ ldr r0, [r1, r4, lsl #0x2]
+ cmp r3, r0
+ streq r5, [r1, r2]
+ b _020AB5F4
+_020AB5C8:
+ ldr r3, [r3, #0x4]
+ cmp r3, #0x0
+ bne _020AB588
+_020AB5D4:
+ mov r0, #0x0
+ ldr r1, _020AB620 ; =0x021CB7F0
+ str r0, [r5, #0x4]
+ ldr r0, [r1, r4, lsl #0x2]
+ str r0, [r5, #0x8]
+ ldr r0, [r1, r4, lsl #0x2]
+ str r5, [r0, #0x4]
+ str r5, [r1, r4, lsl #0x2]
+_020AB5F4:
+ ldr r2, _020AB62C ; =0x021CB7FC
+ ldr r0, _020AB624 ; =0x021CB7EC
+ ldr r1, [r2, r4, lsl #0x2]
+ add r1, r1, #0x1
+ str r1, [r2, r4, lsl #0x2]
+ ldr r0, [r0, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r0, _020AB62C ; =0x021CB7FC
+ ldr r0, [r0, r4, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AB620: .word 0x021CB7F0
+_020AB624: .word 0x021CB7EC
+_020AB628: .word 0x021CB808
+_020AB62C: .word 0x021CB7FC
+
+ arm_func_start FUN_020AB630
+FUN_020AB630: ; 0x020AB630
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ mov r7, #0x0
+ ldr r1, _020AB6B8 ; =0x021CB7EC
+ mov r4, r7
+ mov r9, r7
+ str r0, [r1, #0x0]
+ ldr r5, _020AB6BC ; =0x021CB7F0
+ ldr r8, _020AB6C0 ; =0x021CB7FC
+ b _020AB69C
+_020AB65C:
+ ldr r0, [r5, r7, lsl #0x2]
+ mov r6, r7, lsl #0x2
+ cmp r0, #0x0
+ beq _020AB694
+_020AB66C:
+ ldr r0, [r5, r6]
+ ldr r1, [r0, #0x8]
+ str r1, [r5, r6]
+ ldr r1, [r5, r6]
+ cmp r1, #0x0
+ strne r4, [r1, #0x4]
+ bl FUN_020ACD90
+ ldr r0, [r5, r6]
+ cmp r0, #0x0
+ bne _020AB66C
+_020AB694:
+ str r9, [r8, r7, lsl #0x2]
+ add r7, r7, #0x1
+_020AB69C:
+ cmp r7, #0x3
+ blt _020AB65C
+ ldr r0, _020AB6B8 ; =0x021CB7EC
+ ldr r0, [r0, #0x0]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020AB6B8: .word 0x021CB7EC
+_020AB6BC: .word 0x021CB7F0
+_020AB6C0: .word 0x021CB7FC
+
+ arm_func_start FUN_020AB6C4
+FUN_020AB6C4: ; 0x020AB6C4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl FUN_020AB4B8
+ movs r4, r0
+ beq _020AB6FC
+_020AB6DC:
+ mov r0, r5
+ bl FUN_020AB444
+ mov r0, r4
+ bl FUN_020ACD90
+ mov r0, r5
+ bl FUN_020AB4B8
+ movs r4, r0
+ bne _020AB6DC
+_020AB6FC:
+ ldr r0, _020AB710 ; =0x021CB7FC
+ mov r1, #0x0
+ str r1, [r0, r5, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AB710: .word 0x021CB7FC
+
+ arm_func_start FUN_020AB714
+FUN_020AB714: ; 0x020AB714
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020AB750 ; =0x021CB7EC
+ ldr r3, _020AB754 ; =0x021CB808
+ mov lr, #0x0
+ str lr, [r3, r4, lsl #0x2]
+ ldr r2, _020AB758 ; =0x021CB7FC
+ ldr r12, [r3, r4, lsl #0x2]
+ ldr r3, _020AB75C ; =0x021CB7F0
+ str r0, [r1, #0x0]
+ str r12, [r3, r4, lsl #0x2]
+ str lr, [r2, r4, lsl #0x2]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AB750: .word 0x021CB7EC
+_020AB754: .word 0x021CB808
+_020AB758: .word 0x021CB7FC
+_020AB75C: .word 0x021CB7F0
+
+ arm_func_start FUN_020AB760
+FUN_020AB760:
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ ldr r2, [r7, #0x5c]
+ mov r6, r1
+ cmp r2, #0x0
+ mov r4, #0x0
+ beq _020AB790
+ ldr r1, [r6, #0x18]
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ bl FUN_020ABBEC
+ b _020AB820
+_020AB790:
+ ldr r2, [r6, #0x18]
+ mov r2, r2, lsl #0x10
+ mov r2, r2, lsr #0x10
+ bl FUN_020ABB1C
+_020AB7A0: ; 0x020AB7A0
+ cmp r0, #0x0
+ ldreq r1, [r7, #0x14]
+ moveq r0, r4
+ addeq r1, r1, #0x1
+ streq r1, [r7, #0x14]
+ ldmeqia sp!, {r4-r8,pc}
+_020AB7B8: ; 0x020AB7B8
+ ldr r0, [r6, #0x18]
+ str r0, [r7, #0x10]
+ ldr r2, [r6, #0x18]
+ ldr r1, [r7, #0x54]
+ cmp r1, r2
+ ldreq r1, [r7, #0x14]
+ moveq r0, r4
+ addeq r1, r1, #0x1
+ streq r1, [r7, #0x14]
+ ldmeqia sp!, {r4-r8,pc}
+_020AB7E0: ; 0x020AB7E0
+ add r0, r1, #0x1
+ cmp r0, r2
+ beq _020AB820
+ ldr r0, [r6, #0x45c]
+ cmp r0, #0x0
+ bne _020AB820
+ subs r0, r2, r1
+ rsbmi r0, r0, #0x0
+ cmp r0, #0x64
+ strgt r2, [r7, #0x54]
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r8,pc}
+_020AB810: ; 0x020AB810
+ cmp r1, r2
+ ldrhi r0, [r7, #0x1c]
+ addhi r0, r0, #0x1
+ strhi r0, [r7, #0x1c]
+_020AB820:
+ ldr r0, [r6, #0x18]
+ str r0, [r7, #0x54]
+ ldr r0, [r7, #0x4c]
+ cmp r0, #0x0
+ bne _020AB858
+ ldr r1, [r6, #0x460]
+ ldr r0, _020ABAF4 ; =0x00000464
+ str r1, [r7, #0x4c]
+ add r1, r6, r0
+ add r0, r7, #0x44
+ ldmia r1, {r2-r3}
+ stmia r0, {r2-r3}
+ mov r0, #0x0
+ str r0, [r7, #0x6c]
+_020AB858:
+ ldr r3, [r6, #0x460]
+ ldr r1, [r7, #0x4c]
+ ldr r2, [r6, #0x464]
+ ldr r0, [r7, #0x44]
+ sub r1, r3, r1
+ ldr r3, [r7, #0x80]
+ mov r1, r1, lsl #0x6
+ subs r0, r2, r0
+ subs r5, r1, r0
+ cmp r3, #0x0
+ mov r0, #0x0
+ beq _020AB894
+ ldr r2, [r6, #0x45c]
+ cmp r2, #0x0
+ beq _020AB89C
+_020AB894:
+ str r5, [r7, #0x80]
+ b _020AB918
+_020AB89C:
+ str r5, [r7, #0x80]
+ subs r2, r5, r3
+ ldr r8, [r7, #0x7c]
+ ldr r3, _020ABAF8 ; =0x00008B18
+ ldr ip, _020ABAFC ; =0x0000CC8D
+ add r3, r8, r3
+ mov r8, r3, lsl #0x1
+ rsbmi r2, r2, #0x0
+ mov r3, r8, asr #0x1f
+ adds r8, r8, r12
+ mov r12, r2, asr #0x1f
+ adc r3, r3, #0x0
+ cmp r12, r3
+ cmpeq r2, r8
+ bls _020AB8F4
+ ldr lr, _020ABB00 ; =0x75CA82CB
+ mov r3, r2, lsr #0x1f
+ smull r12, r8, lr, r2
+ mov r8, r8, asr #0xe
+ add r8, r3, r8
+ add r3, r8, #0x2
+ str r3, [r7, #0x84]
+_020AB8F4:
+ ldr r3, [r7, #0x84]
+ cmp r3, #0x0
+ bgt _020AB918
+ ldr r3, [r7, #0x7c]
+ sub r2, r2, r3
+ add r2, r3, r2, asr #0x4
+ str r2, [r7, #0x7c]
+ ldr r2, [r7, #0x7c]
+ str r2, [r7, #0x18]
+_020AB918:
+ ldr r3, [r7, #0x44]
+ ldr r12, [r7, #0x4]
+ ldr r2, [r7, #0x48]
+ adds r1, r1, r3
+ adc r0, r0, r2
+ adds r1, r12, r1
+ str r1, [r6, #0x46c]
+ adc r0, r0, #0x0
+ str r0, [r6, #0x470]
+ bl OS_GetTick
+ ldr r12, [r6, #0x46c]
+ ldr r2, _020ABAF8 ; =0x00008B18
+ ldr lr, [r6, #0x470]
+ adds r6, r12, r2
+ adc r3, lr, #0x0
+ cmp r3, r1
+ mov r3, #0x0
+ cmpeq r6, r0
+ movcc r0, r3
+ ldmccia sp!, {r4-r8,pc}
+_020AB968: ; 0x020AB968
+ ldr r6, _020ABB04 ; =0x0007FD88
+ adds r6, r0, r6
+ adc r0, r1, r3
+ cmp lr, r0
+ cmpeq r12, r6
+ movhi r0, r3
+ ldmhiia sp!, {r4-r8,pc}
+_020AB984: ; 0x020AB984
+ ldr r0, [r7, #0x84]
+ cmp r0, #0x0
+ bgt _020ABAE0
+ ldr r1, [r7, #0x7c]
+ mov r0, #0x3
+ mul lr, r1, r0
+ ldr r6, _020ABB00 ; =0x75CA82CB
+ ldr r12, [r7, #0x8c]
+ smull r1, r0, r6, lr
+ mov r0, r0, asr #0xe
+ mov r1, lr, lsr #0x1f
+ cmp lr, r12
+ add r0, r1, r0
+ bls _020AB9EC
+ ldr r1, _020ABB08 ; =0x000134DF
+ add r6, r0, #0x1
+ mla r12, r6, r2, r1
+ str r12, [r7, #0x8c]
+ mla r1, r0, r2, r1
+ ldr r2, [r7, #0x8c]
+ ldr r0, _020ABB0C ; =0xFFFF2F5C
+ add r0, r2, r0
+ str r0, [r7, #0x88]
+ str r1, [r7, #0x4]
+ str r3, [r7, #0x90]
+ b _020ABA50
+_020AB9EC:
+ ldr r1, [r7, #0x88]
+ cmp lr, r1
+ bge _020ABA50
+ ldr r1, [r7, #0x90]
+ add r1, r1, #0x1
+ str r1, [r7, #0x90]
+ ldr r1, [r7, #0x90]
+ cmp r1, #0x46
+ bls _020ABA50
+ ldr r1, _020ABB08 ; =0x000134DF
+ add r12, r0, #0x1
+ mla lr, r12, r2, r1
+ ldr r6, _020ABB10 ; =0xFFFFBA74
+ str lr, [r7, #0x8c]
+ mla r1, r0, r2, r6
+ str r1, [r7, #0x88]
+ ldr r1, [r7, #0x88]
+ ldr r2, _020ABB08 ; =0x000134DF
+ cmp r1, #0x0
+ ldr r1, _020ABAF8 ; =0x00008B18
+ strlt r3, [r7, #0x88]
+ mla r1, r0, r1, r2
+ mov r3, #0x0
+ str r1, [r7, #0x4]
+ str r3, [r7, #0x90]
+_020ABA50:
+ ldr r1, [r7, #0x4]
+ ldr r0, _020ABB14 ; =0x00068520
+ cmp r1, r0
+ strhi r0, [r7, #0x4]
+ ldr r0, [r7, #0x6c]
+ cmp r0, #0x10
+ addcc r0, r0, #0x1
+ strcc r0, [r7, #0x6c]
+ strcc r5, [r7, #0x74]
+ strcc r5, [r7, #0x78]
+ blo _020ABA98
+ ldr r1, [r7, #0x74]
+ mov r0, #0x1f
+ mla r2, r1, r0, r5
+ mov r0, r2, asr #0x4
+ add r0, r2, r0, lsr #0x1b
+ mov r0, r0, asr #0x5
+ str r0, [r7, #0x74]
+_020ABA98:
+ ldr r2, [r7, #0x78]
+ ldr r1, [r7, #0x74]
+ ldr r0, _020ABB18 ; =0x00008701
+ sub r1, r2, r1
+ str r1, [r7, #0xc]
+ ldr r1, [r7, #0xc]
+ cmp r1, r0
+ mvn r0, #0x8700
+ movgt r4, #0x1
+ cmp r1, r0
+ ldrlt r0, [r7, #0x70]
+ mvnlt r4, #0x0
+ addlt r0, r0, #0x1
+ strlt r0, [r7, #0x70]
+ cmp r4, #0x0
+ movne r0, #0x0
+ strne r0, [r7, #0x6c]
+ strne r0, [r7, #0x4c]
+_020ABAE0:
+ ldr r1, [r7, #0x84]
+ mov r0, #0x1
+ sub r1, r1, #0x1
+ str r1, [r7, #0x84]
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020ABAF4: .word 0x00000464
+_020ABAF8: .word 0x00008B18
+_020ABAFC: .word 0x0000CC8D
+_020ABB00: .word 0x75CA82CB
+_020ABB04: .word 0x0007FD88
+_020ABB08: .word 0x000134DF
+_020ABB0C: .word 0xFFFF2F5C
+_020ABB10: .word 0xFFFFBA74
+_020ABB14: .word 0x00068520
+_020ABB18: .word 0x00008701
+
+ arm_func_start FUN_020ABB1C
+FUN_020ABB1C:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrh r12, [r6, #0x68]
+ mov r4, r2
+ ldr r3, _020ABBE4 ; =0x00000BB8
+ sub r2, r4, r12
+ mov r2, r2, lsl #0x10
+ mov r2, r2, lsr #0x10
+ mov r5, r1
+ cmp r2, r3
+ bhs _020ABB60
+ cmp r4, r12
+ ldrcc r0, [r6, #0x60]
+ addcc r0, r0, #0x10000
+ strcc r0, [r6, #0x60]
+ strh r4, [r6, #0x68]
+ b _020ABBD0
+_020ABB60:
+ ldr r1, _020ABBE8 ; =0x0000FF9C
+ cmp r2, r1
+ bhi _020ABBAC
+ ldr r1, [r6, #0x64]
+ cmp r4, r1
+ bne _020ABB94
+ mov r1, r4
+ bl FUN_020ABBEC
+ sub r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r6, #0x54]
+ b _020ABBD0
+_020ABB94:
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ str r0, [r6, #0x64]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+_020ABBAC:
+ ldr r2, [r6, #0x60]
+ ldr r0, [r6, #0x54]
+ add r2, r4, r2
+ add r0, r0, r1
+ cmp r2, r0
+ subhi r0, r2, #0x10000
+ strhi r0, [r5, #0x18]
+ movhi r0, #0x1
+ ldmhiia sp!, {r4-r6,pc}
+_020ABBD0:
+ ldr r1, [r6, #0x60]
+ mov r0, #0x1
+ add r1, r4, r1
+ str r1, [r5, #0x18]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020ABBE4: .word 0x00000BB8
+_020ABBE8: .word 0x0000FF9C
+
+ arm_func_start FUN_020ABBEC
+FUN_020ABBEC: ; 0x020ABBEC
+ ldr r2, _020ABC08 ; =0x00010001
+ strh r1, [r0, #0x68]
+ str r2, [r0, #0x64]
+ mov r1, #0x0
+ str r1, [r0, #0x60]
+ str r1, [r0, #0x5c]
+ bx lr
+ .balign 4
+_020ABC08: .word 0x00010001
+
+ arm_func_start FUN_020ABC0C
+FUN_020ABC0C: ; 0x020ABC0C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x3c]
+ mov r4, r1
+ cmp r0, #0x0
+ beq _020ABC2C
+ bl FUN_020ACD90
+_020ABC2C:
+ str r4, [r5, #0x3c]
+ ldr r0, [r5, #0x34]
+ bl FUN_020AB444
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020ABC40
+FUN_020ABC40: ; 0x020ABC40
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x3c]
+ cmp r0, #0x0
+ beq _020ABC60
+ bl FUN_020ACD90
+_020ABC58: ; 0x020ABC58
+ mov r0, #0x0
+ str r0, [r4, #0x3c]
+_020ABC60:
+ mvn r0, #0x0
+ str r0, [r4, #0x38]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020ABC6C
+FUN_020ABC6C: ; 0x020ABC6C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, r2
+ mov r1, #0x0
+ mov r2, #0x28
+ mov r6, r0
+ bl MI_CpuFill8
+ ldr r0, _020ABCF4 ; =0x000134DF
+ mov r1, #0x0
+ str r0, [r6, #0x4]
+ str r1, [r6, #0x28]
+ str r1, [r6, #0x2c]
+ str r5, [r6, #0x34]
+ str r4, [r6, #0x38]
+ str r1, [r6, #0x7c]
+ str r1, [r6, #0x80]
+ str r1, [r6, #0x84]
+ str r1, [r6, #0x88]
+ str r0, [r6, #0x8c]
+ str r1, [r6, #0x90]
+ str r1, [r6, #0x4c]
+ str r1, [r6, #0x44]
+ str r1, [r6, #0x48]
+ str r1, [r6, #0x6c]
+ str r1, [r6, #0x70]
+ str r1, [r6, #0x50]
+ str r1, [r6, #0x54]
+ str r1, [r6, #0x58]
+ mov r0, #0x1
+ str r0, [r6, #0x5c]
+ str r1, [r6, #0x3c]
+ str r1, [r6, #0x40]
+ str r1, [r6, #0x30]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020ABCF4: .word 0x000134DF
+
+ arm_func_start FUN_020ABCF8
+FUN_020ABCF8: ; 0x020ABCF8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _020ABE34 ; =0x021CCD20
+ ldr r2, [r3, #0x10]
+ cmp r2, #0x2
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {pc}
+ ldrb r12, [r3, #0x1]
+ ldrb r2, [r0, #0x8]
+ cmp r12, r2
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {pc}
+ ldrb r2, [r0, #0xa]
+ cmp r2, #0x0
+ beq _020ABD48
+ cmp r2, #0x1
+ beq _020ABDA4
+ b _020ABE1C
+_020ABD48:
+ ldr r0, _020ABE38 ; =0x021CB824
+ ldr r2, [r0, #0x2c]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x38]
+ cmp r0, #0x5
+ beq _020ABD74
+ cmp r0, #0x2
+ bne _020ABD80
+_020ABD74:
+ mov r0, #0x9
+ str r0, [r1, #0x0]
+ b _020ABD88
+_020ABD80:
+ mov r0, #0x5
+ str r0, [r1, #0x0]
+_020ABD88:
+ ldr r0, _020ABE38 ; =0x021CB824
+ mov r3, #0x0
+ ldr r2, _020ABE3C ; =0x021CB850
+ str r3, [r0, #0x2c]
+ str r3, [r0, #0x38]
+ str r2, [r1, #0x4]
+ b _020ABE28
+_020ABDA4:
+ ldr r2, _020ABE38 ; =0x021CB824
+ mov lr, #0x2
+ str lr, [r2, #0x2c]
+ ldrb r12, [r0, #0xb]
+ ldrb r3, [r3, #0x0]
+ cmp r12, r3
+ bne _020ABDD8
+ str lr, [r2, #0x38]
+ mov r3, #0x7
+ str r3, [r1, #0x0]
+ ldr r3, [r0, #0xc]
+ str r3, [r2, #0x34]
+ b _020ABE04
+_020ABDD8:
+ mov r3, #0x3
+ str r3, [r2, #0x38]
+ mov r2, #0x6
+ str r2, [r1, #0x0]
+ ldrb r3, [r0, #0xb]
+ cmp r3, #0x0
+ movne r2, #0x1
+ movne r3, r2, lsl r3
+ ldr r2, _020ABE38 ; =0x021CB824
+ moveq r3, #0x1
+ str r3, [r2, #0x34]
+_020ABE04:
+ ldrb r3, [r0, #0xb]
+ ldr r0, _020ABE38 ; =0x021CB824
+ ldr r2, _020ABE3C ; =0x021CB850
+ strb r3, [r0, #0x31]
+ str r2, [r1, #0x4]
+ b _020ABE28
+_020ABE1C:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020ABE28:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020ABE34: .word 0x021CCD20
+_020ABE38: .word 0x021CB824
+_020ABE3C: .word 0x021CB850
+
+ arm_func_start FUN_020ABE40
+FUN_020ABE40: ; 0x020ABE40
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x4]
+ mov r4, r1
+ cmp r0, #0xff
+ bne _020ABE70
+ ldrb r0, [r5, #0x6]
+ cmp r0, #0x4
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020ABE70:
+ ldrb r0, [r5, #0x8]
+ bl FUN_020AC1E8
+_020ABE78: ; 0x020ABE78
+ cmp r0, #0x0
+ beq _020ABEA4
+ mov r1, #0x2
+ str r1, [r4, #0x0]
+ str r0, [r4, #0x4]
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ bl FUN_020AC708
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,pc}
+_020ABEA4:
+ ldrb r1, [r5, #0x8]
+ ldr r0, _020ABEC8 ; =0x021CB838
+ bl FUN_020AC5A4
+ ldr r0, _020ABEC8 ; =0x021CB838
+ mov r1, #0x2
+ bl FUN_020AC708
+_020ABEBC: ; 0x020ABEBC
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020ABEC8: .word 0x021CB838
+
+ arm_func_start FUN_020ABECC
+FUN_020ABECC: ; 0x020ABECC
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020AC070 ; =0x021CB824
+ mov r6, r0
+ ldr r0, [r2, #0x2c]
+ mov r5, r1
+ cmp r0, #0x2
+ bne _020ABF84
+ ldrb r1, [r2, #0x30]
+ ldrb r0, [r6, #0x8]
+ cmp r1, r0
+ bne _020ABF74
+ ldr r0, _020AC074 ; =0x021CB850
+ mov r1, r6
+ bl FUN_020AC350
+ mov r4, r0
+ mvn r0, #0x2
+ cmp r4, r0
+ beq _020ABF48
+ mvn r0, #0x1
+ cmp r4, r0
+ beq _020ABF30
+ mvn r0, #0x0
+ cmp r4, r0
+ beq _020ABF48
+ b _020ABF50
+_020ABF30:
+ mov r0, #0xc
+ str r0, [r5, #0x0]
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+_020ABF48:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+_020ABF50:
+ ldr r1, _020AC074 ; =0x021CB850
+ mov r0, r6
+ bl FUN_020AC4A0
+ ldr r1, _020AC074 ; =0x021CB850
+ str r0, [r5, #0x0]
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x4]
+ str r4, [r0, #0xc]
+ b _020AC028
+_020ABF74:
+ mov r0, #0x1
+ bl FUN_020AC5E8
+_020ABF7C: ; 0x020ABF7C
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+_020ABF84:
+ ldrb r12, [r6, #0x8]
+ cmp r12, #0x0
+ movne r0, #0x1
+ movne r1, r0, lsl r12
+ ldr r0, _020AC078 ; =0x021CB818
+ moveq r1, #0x1
+ ldr r0, [r0, #0x0]
+ ands r0, r0, r1
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020ABFAC: ; 0x020ABFAC
+ ldr r2, _020AC070 ; =0x021CB824
+ mov r4, #0x2
+ mov r3, #0x0
+ ldr r0, _020AC074 ; =0x021CB850
+ mov r1, r6
+ strb r12, [r2, #0x30]
+ str r4, [r2, #0x2c]
+ str r3, [r2, #0x38]
+ bl FUN_020AC350
+ mov r4, r0
+ mvn r0, #0x2
+ cmp r4, r0
+ beq _020ABFF8
+ mvn r0, #0x1
+ cmp r4, r0
+ beq _020ABFF8
+ mvn r0, #0x0
+ cmp r4, r0
+ bne _020AC008
+_020ABFF8:
+ ldr r1, _020AC070 ; =0x021CB824
+ mov r0, #0x0
+ str r0, [r1, #0x2c]
+ ldmia sp!, {r4-r6,pc}
+_020AC008:
+ ldr r1, _020AC074 ; =0x021CB850
+ mov r0, r6
+ bl FUN_020AC4A0
+ ldr r1, _020AC074 ; =0x021CB850
+ str r0, [r5, #0x0]
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x4]
+ str r4, [r0, #0xc]
+_020AC028:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0xa
+ bne _020AC050
+ mov r0, #0x1
+ bl FUN_020AC5E8
+ bl OS_GetTick
+ ldr r2, _020AC07C ; =0x021CB81C
+ str r0, [r2, #0x0]
+ str r1, [r2, #0x4]
+ b _020AC068
+_020AC050:
+ mov r0, #0x0
+ bl FUN_020AC5E8
+ ldr r0, _020AC07C ; =0x021CB81C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+_020AC068:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AC070: .word 0x021CB824
+_020AC074: .word 0x021CB850
+_020AC078: .word 0x021CB818
+_020AC07C: .word 0x021CB81C
+
+ arm_func_start FUN_020AC080
+FUN_020AC080: ; 0x020AC080
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ ldrb r2, [r6, #0x4]
+ mov r5, r1
+ cmp r2, #0xff
+ bne _020AC0C4
+ ldrb r2, [r6, #0x6]
+ cmp r2, #0x4
+ bne _020AC0B4
+ bl FUN_020ABCF8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020AC0B4:
+ cmp r2, #0x3
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020AC0C4:
+ ldrb r0, [r6, #0x8]
+ bl FUN_020AC1E8
+ movs r4, r0
+ beq _020AC154
+ mov r1, r6
+ bl FUN_020AC350
+ mov r7, r0
+ mvn r0, #0x1
+ cmp r7, r0
+ beq _020AC104
+ mvn r0, #0x0
+ cmp r7, r0
+ bne _020AC124
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AC104:
+ mov r0, #0xc
+ str r0, [r5, #0x0]
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ str r4, [r5, #0x4]
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,pc}
+_020AC124:
+ mov r0, r6
+ mov r1, r4
+ bl FUN_020AC4A0
+_020AC130: ; 0x020AC130
+ str r0, [r5, #0x0]
+ str r4, [r5, #0x4]
+ str r7, [r4, #0xc]
+ ldr r0, [r5, #0x0]
+ add sp, sp, #0x4
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AC154:
+ ldrb r0, [r6, #0x8]
+ bl FUN_020AC790
+ movs r7, r0
+ bne _020AC188
+ ldrb r1, [r6, #0x8]
+ ldr r0, _020AC1E4 ; =0x021CB838
+ bl FUN_020AC5A4
+ ldr r0, _020AC1E4 ; =0x021CB838
+ mov r1, #0x3
+ bl FUN_020AC708
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AC188:
+ mov r1, r6
+ bl FUN_020AC350
+ mov r4, r0
+ add r0, r4, #0x2
+ cmp r0, #0x1
+ bhi _020AC1B4
+ mov r0, r7
+ bl FUN_020ACC84
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AC1B4:
+ mov r0, r6
+ mov r1, r7
+ bl FUN_020AC4A0
+_020AC1C0: ; 0x020AC1C0
+ str r0, [r5, #0x0]
+ str r7, [r5, #0x4]
+ str r4, [r7, #0xc]
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AC1E4: .word 0x021CB838
+
+ arm_func_start FUN_020AC1E8
+FUN_020AC1E8:
+ ldr r1, _020AC25C ; =0x021CCD20
+ ldr r2, _020AC260 ; =0x021CB824
+ ldr r1, [r1, #0x10]
+ ldr r3, [r2, #0x4]
+ cmp r1, #0x2
+ bne _020AC224
+ ldr r1, [r2, #0x2c]
+ cmp r1, #0x0
+ beq _020AC21C
+ ldrb r1, [r2, #0x30]
+ cmp r1, r0
+ ldreq r0, _020AC264 ; =0x021CB850
+ bxeq lr
+_020AC21C:
+ mov r0, #0x0
+ bx lr
+_020AC224:
+ cmp r3, #0x0
+ beq _020AC254
+_020AC22C:
+ ldr r1, [r3, #0x0]
+ cmp r1, #0x0
+ beq _020AC248
+ ldrb r1, [r3, #0x4]
+ cmp r1, r0
+ moveq r0, r3
+ bxeq lr
+_020AC248:
+ ldr r3, [r3, #0x14]
+ cmp r3, #0x0
+ bne _020AC22C
+_020AC254:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_020AC25C: .word 0x021CCD20
+_020AC260: .word 0x021CB824
+_020AC264: .word 0x021CB850
+
+ arm_func_start FUN_020AC268
+FUN_020AC268:
+ ldrb r2, [r1, #0x4]
+ ldrb r12, [r1, #0x6]
+ cmp r2, #0x0
+ addeq r12, r12, #0x5
+ cmp r12, #0x0
+ blt _020AC288
+ cmp r12, #0xb
+ blt _020AC28C
+_020AC288:
+ mvn r12, #0x0
+_020AC28C:
+ cmp r12, #0x0
+ mvnlt r0, #0x0
+ bxlt lr
+ ldr r1, _020AC2F8 ; =0x021CCD20
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x1
+ ldrne r3, [r0, #0xc]
+ ldrne r2, _020AC2FC ; =0x020FF788
+ movne r1, #0xb
+ mlane r1, r3, r1, r2
+ ldrnesb r2, [r12, r1]
+ bne _020AC2D0
+ ldr r3, [r0, #0xc]
+ ldr r2, _020AC300 ; =0x020FF744
+ mov r1, #0xb
+ mla r1, r3, r1, r2
+ ldrsb r2, [r12, r1]
+_020AC2D0:
+ mvn r1, #0x0
+ cmp r2, r1
+ moveq r0, #0x1
+ bxeq lr
+ mvn r1, #0x1
+ cmp r2, r1
+ moveq r0, #0x0
+ strne r2, [r0, #0xc]
+ movne r0, #0x1
+ bx lr
+ .balign 4
+_020AC2F8: .word 0x021CCD20
+_020AC2FC: .word 0x020FF788
+_020AC300: .word 0x020FF744
+
+ arm_func_start FUN_020AC304
+FUN_020AC304:
+ ldr r1, _020AC34C ; =0x021CB824
+ ldr r2, [r1, #0x4]
+ cmp r2, #0x0
+ beq _020AC344
+_020AC314:
+ ldr r1, [r2, #0x0]
+ cmp r1, #0x0
+ beq _020AC338
+ ldr r1, [r2, #0xc]
+ cmp r1, #0x2
+ bne _020AC338
+ cmp r0, r2
+ movne r0, #0x0
+ bxne lr
+_020AC338:
+ ldr r2, [r2, #0x14]
+ cmp r2, #0x0
+ bne _020AC314
+_020AC344:
+ mov r0, #0x1
+ bx lr
+ .balign 4
+_020AC34C: .word 0x021CB824
+
+ arm_func_start FUN_020AC350
+FUN_020AC350: ; 0x020AC350
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r1, #0x4]
+ ldrb r3, [r1, #0x6]
+ mov r4, r0
+ cmp r2, #0x0
+ addeq r3, r3, #0x5
+ cmp r3, #0x0
+ blt _020AC37C
+ cmp r3, #0xb
+ blt _020AC380
+_020AC37C:
+ mvn r3, #0x0
+_020AC380:
+ cmp r3, #0x0
+ addlt sp, sp, #0x4
+ mvnlt r0, #0x0
+ ldmltia sp!, {r4-r5,pc}
+_020AC390: ; 0x020AC390
+ ldr r0, _020AC44C ; =0x021CCD20
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x1
+ ldrne r2, [r4, #0xc]
+ ldrne r1, _020AC450 ; =0x020FF700
+ movne r0, #0xb
+ mlane r0, r2, r0, r1
+ ldrnesb r5, [r3, r0]
+ bne _020AC3C8
+ ldr r2, [r4, #0xc]
+ ldr r1, _020AC454 ; =0x020FF6BC
+ mov r0, #0xb
+ mla r0, r2, r0, r1
+ ldrsb r5, [r3, r0]
+_020AC3C8:
+ mvn r0, #0x2
+ cmp r5, r0
+ beq _020AC41C
+ mvn r0, #0x1
+ cmp r5, r0
+ beq _020AC3F8
+ mvn r0, #0x0
+ cmp r5, r0
+ bne _020AC440
+ add sp, sp, #0x4
+ mov r0, r5
+ ldmia sp!, {r4-r5,pc}
+_020AC3F8:
+ mov r0, r4
+ mov r1, #0x1
+ bl FUN_020AC708
+ mov r1, #0x0
+ str r1, [r4, #0xc]
+ add sp, sp, #0x4
+ mov r0, r5
+ str r1, [r4, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020AC41C:
+ mov r0, r4
+ mov r1, #0x3
+ bl FUN_020AC708
+ mov r1, #0x0
+ str r1, [r4, #0xc]
+ add sp, sp, #0x4
+ mov r0, r5
+ str r1, [r4, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020AC440:
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AC44C: .word 0x021CCD20
+_020AC450: .word 0x020FF700
+_020AC454: .word 0x020FF6BC
+
+ arm_func_start FUN_020AC458
+FUN_020AC458:
+ ldr ip, _020AC498 ; =0x5F564354
+ mov r3, #0x10
+ str r12, [r1, #0x0]
+ strb r3, [r1, #0x5]
+ ldr r3, _020AC49C ; =0x021CCD20
+ strb r2, [r1, #0x6]
+ ldrb r2, [r3, #0x0]
+ strb r2, [r1, #0x8]
+ ldrb r2, [r0, #0x4]
+ mov r0, #0x0
+ strb r2, [r1, #0x9]
+ strb r0, [r1, #0xa]
+ ldrb r2, [r3, #0x0]
+ strb r2, [r1, #0xb]
+ str r0, [r1, #0xc]
+ bx lr
+ .balign 4
+_020AC498: .word 0x5F564354
+_020AC49C: .word 0x021CCD20
+
+ arm_func_start FUN_020AC4A0
+FUN_020AC4A0:
+ ldrb r2, [r0, #0xb]
+ strb r2, [r1, #0x5]
+ ldrb r2, [r0, #0x4]
+ cmp r2, #0xff
+ bne _020AC4E8
+ ldrb r2, [r0, #0x6]
+ cmp r2, #0x0
+ bne _020AC4D8
+ ldrb r3, [r1, #0x4]
+ cmp r3, #0x0
+ movne r2, #0x1
+ movne r2, r2, lsl r3
+ moveq r2, #0x1
+ str r2, [r1, #0x8]
+_020AC4D8:
+ ldrb r1, [r0, #0x6]
+ ldr r0, _020AC54C ; =0x020FF6AC
+ ldrb r0, [r0, r1]
+ bx lr
+_020AC4E8:
+ cmp r2, #0x0
+ bne _020AC544
+ ldrb r2, [r0, #0x6]
+ cmp r2, #0x0
+ bne _020AC538
+ ldr r0, [r1, #0xc]
+ cmp r0, #0x1
+ bne _020AC528
+ ldrb r2, [r1, #0x4]
+ cmp r2, #0x0
+ movne r0, #0x1
+ movne r0, r0, lsl r2
+ moveq r0, #0x1
+ str r0, [r1, #0x8]
+ mov r0, #0x7
+ bx lr
+_020AC528:
+ cmp r0, #0x5
+ moveq r0, #0x9
+ movne r0, #0xc
+ bx lr
+_020AC538:
+ ldr r0, _020AC550 ; =0x020FF6B4
+ ldrb r0, [r0, r2]
+ bx lr
+_020AC544:
+ mov r0, #0xc
+ bx lr
+ .balign 4
+_020AC54C: .word 0x020FF6AC
+_020AC550: .word 0x020FF6B4
+
+ arm_func_start FUN_020AC554
+FUN_020AC554:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r1, #0x4]
+ cmp r2, #0xff
+ bne _020AC57C
+ ldrb r2, [r1, #0x6]
+ cmp r2, #0x4
+ bne _020AC57C
+ bl FUN_020AC628
+ b _020AC598
+_020AC57C:
+ ldrb r0, [r0, #0x4]
+ mov r2, #0x10
+ bl FUN_021EB044
+_020AC588: ; 0x020AC588
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+_020AC598:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AC5A4
+FUN_020AC5A4: ; 0x020AC5A4
+ mov r12, r0
+ mov r3, #0x6
+ mov r2, #0x0
+_020AC5B0:
+ strb r2, [r12], #0x1
+ strb r2, [r12], #0x1
+ strb r2, [r12], #0x1
+ strb r2, [r12], #0x1
+ subs r3, r3, #0x1
+ bne _020AC5B0
+ ldr r2, _020AC5E4 ; =0x021CCD20
+ mov r3, #0x0
+ ldr r2, [r2, #0x10]
+ str r2, [r0, #0x0]
+ str r3, [r0, #0xc]
+ strb r1, [r0, #0x4]
+ bx lr
+ .balign 4
+_020AC5E4: .word 0x021CCD20
+
+ arm_func_start FUN_020AC5E8
+FUN_020AC5E8:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ mov r4, r0
+ mov r3, #0xff
+ ldr r0, _020AC624 ; =0x021CB850
+ add r1, sp, #0x0
+ mov r2, #0x4
+ strb r3, [sp, #0x4]
+ bl FUN_020AC458
+ ldr r0, _020AC624 ; =0x021CB850
+ add r1, sp, #0x0
+ strb r4, [sp, #0xa]
+ bl FUN_020AC628
+ add sp, sp, #0x10
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AC624: .word 0x021CB850
+
+ arm_func_start FUN_020AC628
+FUN_020AC628: ; 0x020AC628
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r11, r0
+ mov r10, r1
+ mov r9, #0x0
+ bl FUN_020AC6E4
+ ldr r4, _020AC6DC ; =0x021CCD20
+ ldr r5, _020AC6E0 ; =0x021CB818
+ mov r8, r9
+ mov r7, #0x1
+ mov r6, #0x10
+_020AC654:
+ cmp r8, #0x0
+ movne r1, r7, lsl r8
+ ldr r0, [r5, #0x0]
+ moveq r1, r7
+ ands r0, r0, r1
+ beq _020AC694
+ ldrb r0, [r4, #0x0]
+ cmp r8, r0
+ beq _020AC694
+ mov r0, r8
+ mov r1, r10
+ mov r2, r6
+ strb r8, [r10, #0x9]
+ bl FUN_021EB044
+_020AC68C: ; 0x020AC68C
+ cmp r0, #0x0
+ addne r9, r9, #0x1
+_020AC694:
+ add r0, r8, #0x1
+ and r8, r0, #0xff
+ cmp r8, #0x20
+ blo _020AC654
+ ldrb r0, [r10, #0xa]
+ cmp r0, #0x1
+ ldreq r0, _020AC6E0 ; =0x021CB818
+ ldreq r0, [r0, #0x0]
+ streq r0, [r11, #0x8]
+ beq _020AC6C8
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r11, #0x8]
+_020AC6C8:
+ cmp r9, #0x0
+ mvneq r0, #0x3
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AC6DC: .word 0x021CCD20
+_020AC6E0: .word 0x021CB818
+
+ arm_func_start FUN_020AC6E4
+FUN_020AC6E4: ; 0x020AC6E4
+ ldrb r2, [r1, #0xa]
+ cmp r2, #0x1
+ ldreqb r2, [r0, #0x4]
+ ldreq r0, _020AC704 ; =0x021CB818
+ streqb r2, [r1, #0xb]
+ ldreq r0, [r0, #0x0]
+ streq r0, [r1, #0xc]
+ bx lr
+ .balign 4
+_020AC704: .word 0x021CB818
+
+ arm_func_start FUN_020AC708
+FUN_020AC708:
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ add r2, sp, #0x0
+ mov r3, #0x10
+ mov r4, r0
+ bl FUN_020ACAE0
+_020AC720: ; 0x020AC720
+ cmp r0, #0x0
+ addne sp, sp, #0x10
+ ldmneia sp!, {r4,pc}
+_020AC72C: ; 0x020AC72C
+ add r1, sp, #0x0
+ mov r0, r4
+ bl FUN_020AC554
+_020AC738: ; 0x020AC738
+ cmp r0, #0x0
+ movne r0, #0x0
+ mvneq r0, #0x3
+ add sp, sp, #0x10
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AC74C
+FUN_020AC74C: ; 0x020AC74C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ add r2, sp, #0x0
+ mov r3, #0x10
+ mov r4, r0
+ bl FUN_020ACBD0
+_020AC764: ; 0x020AC764
+ cmp r0, #0x0
+ addne sp, sp, #0x10
+ ldmneia sp!, {r4,pc}
+_020AC770: ; 0x020AC770
+ add r1, sp, #0x0
+ mov r0, r4
+ bl FUN_020AC554
+_020AC77C: ; 0x020AC77C
+ cmp r0, #0x0
+ movne r0, #0x0
+ mvneq r0, #0x3
+ add sp, sp, #0x10
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AC790
+FUN_020AC790: ; 0x020AC790
+ stmdb sp!, {r4,lr}
+ mov r1, r0
+ cmp r1, #0x20
+ movcs r0, #0x0
+ ldmcsia sp!, {r4,pc}
+_020AC7A4: ; 0x020AC7A4
+ ldr r0, _020AC7F4 ; =0x021CCD20
+ ldrb r0, [r0, #0x0]
+ cmp r1, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AC7B8: ; 0x020AC7B8
+ ldr r2, _020AC7F8 ; =0x021CB824
+ ldr r4, [r2, #0x0]
+ cmp r4, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AC7CC: ; 0x020AC7CC
+ ldr r3, [r4, #0x14]
+ mov r0, r4
+ str r3, [r2, #0x0]
+ bl FUN_020AC5A4
+ ldr r1, _020AC7F8 ; =0x021CB824
+ mov r0, r4
+ ldr r2, [r1, #0x4]
+ str r2, [r4, #0x14]
+ str r4, [r1, #0x4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AC7F4: .word 0x021CCD20
+_020AC7F8: .word 0x021CB824
+
+ arm_func_start FUN_020AC7FC
+FUN_020AC7FC:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r2, #0x10
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {pc}
+ ldrb r2, [r1, #0x8]
+ cmp r2, r0
+ bne _020AC834
+ ldr r0, _020AC894 ; =0x021CCD20
+ ldrb r12, [r1, #0x9]
+ ldrb r2, [r0, #0x0]
+ cmp r12, r2
+ beq _020AC840
+_020AC834:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020AC840:
+ ldrb r2, [r1, #0x5]
+ cmp r2, #0x10
+ beq _020AC860
+ mov r0, r1
+ mov r1, r3
+ bl FUN_020ABE40
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020AC860:
+ ldr r0, [r0, #0xc]
+ cmp r0, #0x0
+ bne _020AC880
+ mov r0, r1
+ mov r1, r3
+ bl FUN_020AC080
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020AC880:
+ mov r0, r1
+ mov r1, r3
+ bl FUN_020ABECC
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AC894: .word 0x021CCD20
+
+ arm_func_start FUN_020AC898
+FUN_020AC898: ; 0x020AC898
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_GetTick
+ ldr r2, _020AC950 ; =0x021CCD20
+ ldr r3, [r2, #0x10]
+ cmp r3, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020AC8B8: ; 0x020AC8B8
+ ldr r2, [r2, #0xc]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020AC8C8: ; 0x020AC8C8
+ ldr r3, _020AC954 ; =0x021CB81C
+ mov r12, #0x0
+ ldr r5, [r3, #0x4]
+ ldr r4, [r3, #0x0]
+ cmp r5, r12
+ cmpeq r4, r12
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020AC8E8: ; 0x020AC8E8
+ ldr r2, _020AC958 ; =0x02106490
+ subs r4, r0, r4
+ ldr lr, [r2, #0x0]
+ ldr r0, [r2, #0x4]
+ sbc r1, r1, r5
+ cmp r1, r0
+ cmpeq r4, lr
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r5,pc}
+_020AC90C: ; 0x020AC90C
+ ldr r1, _020AC95C ; =0x021CB824
+ mov r0, r12
+ str r12, [r3, #0x0]
+ str r12, [r3, #0x4]
+ str r12, [r1, #0x2c]
+ str r12, [r1, #0x38]
+ bl FUN_020AC5E8
+ ldr r1, _020AC950 ; =0x021CCD20
+ ldr r0, _020AC95C ; =0x021CB824
+ ldr r3, [r1, #0x8]
+ ldrb r0, [r0, #0x30]
+ ldr r12, [r1, #0x4]
+ ldr r2, _020AC960 ; =0x021CB850
+ mov r1, #0x9
+ blx r12
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AC950: .word 0x021CCD20
+_020AC954: .word 0x021CB81C
+_020AC958: .word 0x02106490
+_020AC95C: .word 0x021CB824
+_020AC960: .word 0x021CB850
+
+ arm_func_start FUN_020AC964
+FUN_020AC964: ; 0x020AC964
+ ldr r0, _020AC978 ; =0x021CB824
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020AC978: .word 0x021CB824
+
+ arm_func_start FUN_020AC97C
+FUN_020AC97C:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020AC9A8
+ ldr r1, [r4, #0x4]
+ cmp r1, #0x0
+ beq _020AC9A8
+ cmp r1, #0x8
+ bls _020AC9B4
+_020AC9A8:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,pc}
+_020AC9B4:
+ ldr r1, _020ACA8C ; =0x021CB824
+ mov r2, #0x18
+ str r0, [r1, #0x0]
+ ldr r3, [r4, #0x4]
+ mov r1, #0x0
+ mul r2, r3, r2
+ bl MI_CpuFill8
+ ldr r0, _020ACA90 ; =0x021CB850
+ mov r1, #0x0
+ mov r2, #0x18
+ bl MI_CpuFill8
+ ldr r0, _020ACA94 ; =0x021CB838
+ mov r1, #0x0
+ mov r2, #0x18
+ bl MI_CpuFill8
+ ldr r12, [r4, #0x4]
+ mov lr, #0x0
+ subs r0, r12, #0x1
+ beq _020ACA34
+ ldr r1, _020ACA8C ; =0x021CB824
+ mov r5, lr
+ mov r0, #0x18
+_020ACA0C:
+ ldr r2, [r1, #0x0]
+ add lr, lr, #0x1
+ mla r3, lr, r0, r2
+ add r2, r2, r5
+ str r3, [r2, #0x14]
+ ldr r12, [r4, #0x4]
+ add r5, r5, #0x18
+ sub r2, r12, #0x1
+ cmp lr, r2
+ blo _020ACA0C
+_020ACA34:
+ ldr r3, _020ACA8C ; =0x021CB824
+ mov r0, #0x18
+ ldr r1, [r3, #0x0]
+ mov r5, #0x0
+ mla r0, r12, r0, r1
+ str r5, [r0, #-0x4]
+ ldr r2, _020ACA98 ; =0x021CB818
+ ldr r1, _020ACA9C ; =0x021CB814
+ ldr r0, _020ACAA0 ; =0x021CCD20
+ ldr lr, _020ACAA4 ; =OS_GetTick
+ ldr ip, _020ACAA8 ; =0x5D588B65
+ ldr r4, _020ACAAC ; =0x00269EC3
+ str r5, [r3, #0x4]
+ str r5, [r2, #0x0]
+ str r5, [r1, #0x0]
+ str r5, [r0, #0x14]
+ str lr, [r3, #0x8]
+ str r12, [r3, #0xc]
+ str r4, [r3, #0x10]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020ACA8C: .word 0x021CB824
+_020ACA90: .word 0x021CB850
+_020ACA94: .word 0x021CB838
+_020ACA98: .word 0x021CB818
+_020ACA9C: .word 0x021CB814
+_020ACAA0: .word 0x021CCD20
+_020ACAA4: .word OS_GetTick
+_020ACAA8: .word 0x5D588B65
+_020ACAAC: .word 0x00269EC3
+
+ arm_func_start FUN_020ACAB0
+FUN_020ACAB0: ; 0x020ACAB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020ACADC ; =0x021CCD20
+ ldr r2, [r2, #0x10]
+ cmp r2, #0x2
+ addeq sp, sp, #0x4
+ mvneq r0, #0x2
+ ldmeqia sp!, {pc}
+ bl FUN_020AC708
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020ACADC: .word 0x021CCD20
+
+ arm_func_start FUN_020ACAE0
+FUN_020ACAE0:
+ stmdb sp!, {r4-r6,lr}
+ movs r5, r0
+ mov r6, r1
+ mov r4, r2
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020ACAF8: ; 0x020ACAF8
+ cmp r3, #0x10
+ mvncc r0, #0x0
+ ldmccia sp!, {r4-r6,pc}
+_020ACB04: ; 0x020ACB04
+ cmp r6, #0x0
+ blt _020ACB14
+ cmp r6, #0x6
+ blt _020ACB1C
+_020ACB14:
+ mvn r0, #0x2
+ ldmia sp!, {r4-r6,pc}
+_020ACB1C:
+ mov r3, #0x0
+ mov r1, r4
+ and r2, r6, #0xff
+ strb r3, [r4, #0x4]
+ bl FUN_020AC458
+_020ACB30: ; 0x020ACB30
+ cmp r6, #0x0
+ bne _020ACB80
+ ldr r0, _020ACB9C ; =0x021CCD20
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x1
+ bne _020ACB68
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x4
+ bne _020ACB68
+ mov r0, r5
+ bl FUN_020AC304
+_020ACB5C: ; 0x020ACB5C
+ cmp r0, #0x0
+ mvneq r0, #0x2
+ ldmeqia sp!, {r4-r6,pc}
+_020ACB68:
+ ldrb r1, [r5, #0x4]
+ cmp r1, #0x0
+ movne r0, #0x1
+ movne r0, r0, lsl r1
+ moveq r0, #0x1
+ str r0, [r5, #0x8]
+_020ACB80:
+ mov r0, r5
+ mov r1, r4
+ bl FUN_020AC268
+_020ACB8C: ; 0x020ACB8C
+ cmp r0, #0x0
+ mvneq r0, #0x2
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020ACB9C: .word 0x021CCD20
+
+ arm_func_start FUN_020ACBA0
+FUN_020ACBA0: ; 0x020ACBA0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020ACBCC ; =0x021CCD20
+ ldr r2, [r2, #0x10]
+ cmp r2, #0x2
+ addeq sp, sp, #0x4
+ mvneq r0, #0x2
+ ldmeqia sp!, {pc}
+ bl FUN_020AC74C
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020ACBCC: .word 0x021CCD20
+
+ arm_func_start FUN_020ACBD0
+FUN_020ACBD0:
+ stmdb sp!, {r4-r6,lr}
+ movs r5, r0
+ mov r4, r1
+ mov r6, r2
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020ACBE8: ; 0x020ACBE8
+ cmp r3, #0x10
+ mvncc r0, #0x0
+ ldmccia sp!, {r4-r6,pc}
+_020ACBF4: ; 0x020ACBF4
+ ldr r1, _020ACC80 ; =0x021CCD20
+ ldr r1, [r1, #0xc]
+ cmp r1, #0x1
+ mvneq r0, #0x2
+ ldmeqia sp!, {r4-r6,pc}
+_020ACC08: ; 0x020ACC08
+ cmp r4, #0x0
+ blt _020ACC18
+ cmp r4, #0x5
+ blt _020ACC20
+_020ACC18:
+ mvn r0, #0x2
+ ldmia sp!, {r4-r6,pc}
+_020ACC20:
+ mov r3, #0xff
+ mov r1, r6
+ and r2, r4, #0xff
+ strb r3, [r6, #0x4]
+ bl FUN_020AC458
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020AC268
+_020ACC40: ; 0x020ACC40
+ cmp r0, #0x0
+ mvneq r0, #0x2
+ ldmeqia sp!, {r4-r6,pc}
+_020ACC4C: ; 0x020ACC4C
+ ldr r0, _020ACC80 ; =0x021CCD20
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x1
+ bne _020ACC78
+ cmp r4, #0x0
+ bne _020ACC78
+ mov r0, r5
+ bl FUN_020AC304
+_020ACC6C: ; 0x020ACC6C
+ cmp r0, #0x0
+ mvneq r0, #0x2
+ ldmeqia sp!, {r4-r6,pc}
+_020ACC78:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020ACC80: .word 0x021CCD20
+
+ arm_func_start FUN_020ACC84
+FUN_020ACC84: ; 0x020ACC84
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020ACD48 ; =0x021CB824
+ cmp r0, #0x0
+ mov lr, #0x0
+ addeq sp, sp, #0x4
+ ldr r12, [r2, #0x4]
+ moveq r0, lr
+ ldmeqia sp!, {pc}
+ ldr r1, _020ACD4C ; =0x021CCD20
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x2
+ bne _020ACCD0
+ ldr r1, _020ACD50 ; =0x021CB850
+ add sp, sp, #0x4
+ cmp r0, r1
+ streq lr, [r2, #0x2c]
+ mov r0, #0x1
+ ldmia sp!, {pc}
+_020ACCD0:
+ cmp r12, #0x0
+ beq _020ACD3C
+_020ACCD8:
+ cmp r12, r0
+ bne _020ACD2C
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+ cmp lr, #0x0
+ ldrne r1, [r0, #0x14]
+ strne r1, [lr, #0x14]
+ bne _020ACD10
+ ldr r2, [r12, #0x14]
+ cmp r2, #0x0
+ ldrne r1, _020ACD48 ; =0x021CB824
+ strne r2, [r1, #0x4]
+ ldreq r1, _020ACD48 ; =0x021CB824
+ streq r3, [r1, #0x4]
+_020ACD10:
+ ldr r1, _020ACD48 ; =0x021CB824
+ add sp, sp, #0x4
+ ldr r2, [r1, #0x0]
+ str r2, [r0, #0x14]
+ str r0, [r1, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {pc}
+_020ACD2C:
+ mov lr, r12
+ ldr r12, [r12, #0x14]
+ cmp r12, #0x0
+ bne _020ACCD8
+_020ACD3C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020ACD48: .word 0x021CB824
+_020ACD4C: .word 0x021CCD20
+_020ACD50: .word 0x021CB850
+
+ arm_func_start FUN_020ACD54
+FUN_020ACD54: ; 0x020ACD54
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020ACD8C ; =0x021CCD20
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x0
+ beq _020ACD74
+ cmp r1, #0x2
+ bne _020ACD80
+_020ACD74:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020ACD80:
+ bl FUN_020AC790
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020ACD8C: .word 0x021CCD20
+
+ arm_func_start FUN_020ACD90
+FUN_020ACD90:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020ACDC0 ; =0x021CB86C
+ ldr r2, _020ACDC4 ; =0x021CB868
+ ldr r3, [r1, #0x0]
+ str r0, [r2, #0x0]
+ str r3, [r4, #0x0]
+ ldr r0, [r2, #0x0]
+ str r4, [r1, #0x0]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ACDC0: .word 0x021CB86C
+_020ACDC4: .word 0x021CB868
+
+ arm_func_start FUN_020ACDC8
+FUN_020ACDC8: ; 0x020ACDC8
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+ bl OS_DisableInterrupts
+ ldr r1, _020ACE08 ; =0x021CB86C
+ ldr r2, _020ACE0C ; =0x021CB868
+ ldr r3, [r1, #0x0]
+ str r0, [r2, #0x0]
+ cmp r3, #0x0
+ ldrne r0, [r3, #0x0]
+ movne r4, r3
+ strne r0, [r1, #0x0]
+ ldr r0, _020ACE0C ; =0x021CB868
+ ldr r0, [r0, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ACE08: .word 0x021CB86C
+_020ACE0C: .word 0x021CB868
+
+ arm_func_start FUN_020ACE10
+FUN_020ACE10:
+ ldr r1, _020ACE28 ; =0x021CB86C
+ mov r2, #0x0
+ ldr r0, _020ACE2C ; =0x021CB870
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bx lr
+ .balign 4
+_020ACE28: .word 0x021CB86C
+_020ACE2C: .word 0x021CB870
+
+ arm_func_start FUN_020ACE30
+FUN_020ACE30:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020ACF00 ; =0xE525982B
+ mov r2, r1
+ umull r1, r4, r2, r3
+ ldr r1, _020ACF04 ; =0x021CB870
+ mov r4, r4, lsr #0xa
+ str r0, [r1, #0x0]
+ cmp r4, #0x4
+ blo _020ACE60
+ cmp r4, #0x48
+ bls _020ACE6C
+_020ACE60:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,pc}
+_020ACE6C:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020ACE7C: ; 0x020ACE7C
+ ands r3, r0, #0x1f
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020ACE90: ; 0x020ACE90
+ mov r1, r0
+ mov r0, #0x0
+ bl MIi_CpuClearFast
+ subs r12, r4, #0x1
+ mov r5, #0x0
+ beq _020ACED0
+ ldr r1, _020ACF04 ; =0x021CB870
+ ldr r0, _020ACF08 ; =0x00000478
+ mov lr, r5
+_020ACEB4:
+ ldr r3, [r1, #0x0]
+ add r5, r5, #0x1
+ mla r2, r5, r0, r3
+ str r2, [r3, lr]
+ cmp r5, r12
+ add lr, lr, r0
+ blo _020ACEB4
+_020ACED0:
+ ldr r1, _020ACF04 ; =0x021CB870
+ ldr r0, _020ACF08 ; =0x00000478
+ ldr r2, [r1, #0x0]
+ mov r3, #0x0
+ mla r0, r4, r0, r2
+ str r3, [r0, #-0x478]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020ACF0C ; =0x021CB86C
+ mov r0, #0x1
+ str r2, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020ACF00: .word 0xE525982B
+_020ACF04: .word 0x021CB870
+_020ACF08: .word 0x00000478
+_020ACF0C: .word 0x021CB86C
+
+ arm_func_start FUN_020ACF10
+FUN_020ACF10: ; 0x020ACF10
+ mov r2, #0xf
+ mov r0, #0x44
+ mul r1, r2, r0
+ ldr r0, _020ACF30 ; =0x02106498
+ ldr ip, _020ACF34 ; =FUN_020AD170
+ str r2, [r0, #0x8]
+ str r1, [r0, #0xc]
+ bx r12
+ .balign 4
+_020ACF30: .word 0x02106498
+_020ACF34: .word FUN_020AD170
+
+ arm_func_start FUN_020ACF38
+FUN_020ACF38: ; 0x020ACF38
+ stmdb sp!, {r4,lr}
+ ldr r3, _020AD124 ; =0x02106498
+ mov r12, r1, lsr #0x8
+ str r12, [r3, #0x4]
+ cmp r2, #0x0
+ strneb r12, [r2, #0x0]
+ ldr r2, _020AD124 ; =0x02106498
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ bne _020AD05C
+ mov r4, #0x0
+ mov r12, r4
+ ldr r3, _020AD128 ; =0x021CB880
+_020ACF6C:
+ ldr r2, [r3, r12, lsl #0x2]
+ add r12, r12, #0x1
+ cmp r12, #0x4
+ add r4, r4, r2
+ blt _020ACF6C
+ ldr ip, _020AD12C ; =0x040002B0
+ mov r3, #0x0
+ ldr r2, _020AD130 ; =0x040002B8
+ strh r3, [r12, #0x0]
+ mov r3, r4, lsr #0x2
+ str r3, [r2, #0x0]
+_020ACF98:
+ ldrh r2, [r12, #0x0]
+ ands r2, r2, #0x8000
+ bne _020ACF98
+ ldr r2, _020AD134 ; =0x040002B4
+ cmp r1, #0x0
+ ldr r2, [r2, #0x0]
+ beq _020AD038
+ cmp r1, r2, lsl #0x1
+ blo _020AD038
+ mov r4, #0x0
+ mov r3, r4
+ ldr r2, _020AD128 ; =0x021CB880
+_020ACFC8:
+ ldr r1, [r2, r3, lsl #0x2]
+ add r3, r3, #0x1
+ cmp r3, #0x4
+ add r4, r4, r1
+ blo _020ACFC8
+ ldr r3, _020AD12C ; =0x040002B0
+ mov r2, #0x0
+ ldr r1, _020AD130 ; =0x040002B8
+ strh r2, [r3, #0x0]
+ mov r2, r4, lsr #0x2
+ str r2, [r1, #0x0]
+_020ACFF4:
+ ldrh r1, [r3, #0x0]
+ ands r1, r1, #0x8000
+ bne _020ACFF4
+ ldr r2, _020AD134 ; =0x040002B4
+ mov r1, #0x3
+ ldr r2, [r2, #0x0]
+ ldr r3, _020AD138 ; =0x021CB874
+ mul r1, r2, r1
+ mov lr, r1, lsr #0x1
+ ldr r2, _020AD13C ; =0x021CB878
+ mov r12, #0x0
+ ldr r1, _020AD124 ; =0x02106498
+ mov r4, #0x1
+ str lr, [r3, #0x0]
+ str r12, [r2, #0x0]
+ str r4, [r1, #0x0]
+ b _020AD03C
+_020AD038:
+ mov r4, #0x0
+_020AD03C:
+ ldr r1, _020AD13C ; =0x021CB878
+ ldr r3, _020AD128 ; =0x021CB880
+ ldr r12, [r1, #0x0]
+ add r2, r12, #0x1
+ and r2, r2, #0x3
+ str r0, [r3, r12, lsl #0x2]
+ str r2, [r1, #0x0]
+ b _020AD11C
+_020AD05C:
+ ldr r1, _020AD13C ; =0x021CB878
+ mov lr, #0x0
+ ldr r12, [r1, #0x0]
+ ldr r3, _020AD128 ; =0x021CB880
+ add r2, r12, #0x1
+ and r2, r2, #0x3
+ mov r4, lr
+ str r0, [r3, r12, lsl #0x2]
+ str r2, [r1, #0x0]
+_020AD080:
+ ldr r0, [r3, r4, lsl #0x2]
+ add r4, r4, #0x1
+ cmp r4, #0x4
+ add lr, lr, r0
+ blt _020AD080
+ ldr r2, _020AD12C ; =0x040002B0
+ mov r1, #0x0
+ ldr r0, _020AD130 ; =0x040002B8
+ strh r1, [r2, #0x0]
+ mov r1, lr, lsr #0x2
+ str r1, [r0, #0x0]
+_020AD0AC:
+ ldrh r0, [r2, #0x0]
+ ands r0, r0, #0x8000
+ bne _020AD0AC
+ ldr r1, _020AD134 ; =0x040002B4
+ ldr r0, _020AD138 ; =0x021CB874
+ ldr r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r1, r0
+ bhi _020AD10C
+ ldr r2, _020AD140 ; =0x021CB87C
+ ldr r1, _020AD124 ; =0x02106498
+ ldr r3, [r2, #0x0]
+ ldr r0, [r1, #0x8]
+ add r3, r3, #0x1
+ str r3, [r2, #0x0]
+ cmp r3, r0
+ ble _020AD118
+ ldr r0, _020AD13C ; =0x021CB878
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+ str r3, [r1, #0x0]
+ str r3, [r2, #0x0]
+ mov r0, #0x3
+ ldmia sp!, {r4,pc}
+_020AD10C:
+ ldr r0, _020AD140 ; =0x021CB87C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020AD118:
+ mov r4, #0x2
+_020AD11C:
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AD124: .word 0x02106498
+_020AD128: .word 0x021CB880
+_020AD12C: .word 0x040002B0
+_020AD130: .word 0x040002B8
+_020AD134: .word 0x040002B4
+_020AD138: .word 0x021CB874
+_020AD13C: .word 0x021CB878
+_020AD140: .word 0x021CB87C
+
+ arm_func_start FUN_020AD144
+FUN_020AD144: ; 0x020AD144
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ movs r1, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, _020AD16C ; =0x02106498
+ mov r2, #0x10
+ bl MI_CpuCopy8
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AD16C: .word 0x02106498
+
+ arm_func_start FUN_020AD170
+FUN_020AD170:
+ ldr r0, _020AD1B8 ; =0x021CB880
+ mov r2, #0x0
+ mov r1, #0x1000000
+_020AD17C:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x4
+ blt _020AD17C
+ ldr r3, _020AD1BC ; =0x021CB878
+ mov r12, #0x0
+ ldr r1, _020AD1C0 ; =0x02106498
+ ldr r2, _020AD1C4 ; =0x021CB874
+ ldr r0, _020AD1C8 ; =0x021CB87C
+ str r12, [r3, #0x0]
+ str r12, [r2, #0x0]
+ str r12, [r1, #0x0]
+ str r12, [r1, #0x4]
+ str r12, [r0, #0x0]
+ bx lr
+ .balign 4
+_020AD1B8: .word 0x021CB880
+_020AD1BC: .word 0x021CB878
+_020AD1C0: .word 0x02106498
+_020AD1C4: .word 0x021CB874
+_020AD1C8: .word 0x021CB87C
+
+ arm_func_start FUN_020AD1CC
+FUN_020AD1CC: ; 0x020AD1CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, r1
+ mov r3, r2
+ ldr r1, _020AD1F0 ; =0x021CB8D4
+ mov r2, r12
+ bl FUN_020AD1F4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AD1F0: .word 0x021CB8D4
+
+ arm_func_start FUN_020AD1F4
+FUN_020AD1F4: ; 0x020AD1F4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r4, #0x0
+ str r4, [sp, #0x0]
+ str r4, [sp, #0x4]
+ mov r9, r4
+ movs r8, r2, lsr #0x1
+ beq _020AD330
+ mov r4, #0xc0000000
+ ldr ip, _020AD420 ; =0x021CB8BC
+ ldr r2, _020AD424 ; =0x021CB8A4
+ str r4, [sp, #0xc]
+_020AD224:
+ ldr r4, _020AD428 ; =0x021CB894
+ ldr lr, [r2, #0x10]
+ ldr r7, [r4, #0x0]
+ mov r4, r9, lsl #0x1
+ ldrsh r10, [r1, r4]
+ ldr r4, _020AD42C ; =0x021CB898
+ mov r5, r7, lsl #0x1
+ ldr r6, [r4, #0x0]
+ ldr r4, _020AD430 ; =0x021CBD14
+ ldr r11, [r2, #0x14]
+ strh r10, [r4, r5]
+ ldr r10, [r12, #0x10]
+ mov r5, r6, lsl #0x1
+ ldrsh r5, [r4, r5]
+ ldr r4, [r12, #0x14]
+ mul lr, r10, lr
+ str r10, [sp, #0x8]
+ str r10, [r12, #0x14]
+ mla r10, r4, r11, lr
+ ldr r4, [r12, #0xc]
+ ldr r11, [r2, #0xc]
+ str r4, [r12, #0x10]
+ mla r10, r4, r11, r10
+ ldr r4, [r12, #0x8]
+ ldr r11, [r2, #0x8]
+ str r4, [r12, #0xc]
+ mla r10, r4, r11, r10
+ ldr r4, [r12, #0x4]
+ ldr r11, [r2, #0x4]
+ str r4, [r12, #0x8]
+ mla r10, r4, r11, r10
+ ldr r4, [r2, #0x0]
+ str r5, [r12, #0x0]
+ mla r4, r5, r4, r10
+ str r5, [r12, #0x4]
+ ldr r5, _020AD434 ; =0x3FFF8000
+ cmp r4, r5
+ movgt r4, r5
+ bgt _020AD2C8
+ cmp r4, #0xc0000000
+ ldrlt r4, [sp, #0xc]
+_020AD2C8:
+ ldr r5, _020AD438 ; =0x000007FF
+ add r7, r7, #0x1
+ and r7, r7, r5
+ ldr r5, _020AD428 ; =0x021CB894
+ add r6, r6, #0x1
+ str r7, [r5, #0x0]
+ ldr r5, _020AD438 ; =0x000007FF
+ mov r7, r9, lsl #0x1
+ and r6, r6, r5
+ ldr r5, _020AD42C ; =0x021CB898
+ mov r4, r4, asr #0xf
+ str r6, [r5, #0x0]
+ strh r4, [r1, r7]
+ ldrsh r6, [r1, r7]
+ ldrsh r4, [r0, r7]
+ add r9, r9, #0x1
+ mul r5, r6, r6
+ strh r4, [r1, r7]
+ ldr r4, [sp, #0x0]
+ adds r4, r4, r5
+ str r4, [sp, #0x0]
+ ldr r4, [sp, #0x4]
+ adc r4, r4, r5, asr #0x1f
+ str r4, [sp, #0x4]
+ cmp r9, r8
+ blo _020AD224
+_020AD330:
+ ldr r5, _020AD43C ; =0x04000280
+ mov r1, #0x1
+ strh r1, [r5, #0x0]
+ ldr r4, _020AD440 ; =0x04000290
+ ldr r1, [sp, #0x0]
+ ldr r2, _020AD444 ; =0x04000298
+ str r1, [r4, #0x0]
+ ldr r1, [sp, #0x4]
+ str r1, [r4, #0x4]
+ str r8, [r2, #0x0]
+ mov r1, #0x0
+ str r1, [r2, #0x4]
+_020AD360:
+ ldrh r1, [r5, #0x0]
+ ands r1, r1, #0x8000
+ bne _020AD360
+ ldr r1, _020AD448 ; =0x040002A0
+ ldr r2, _020AD44C ; =0x040002B0
+ ldr r5, [r1, #0x0]
+ mov r4, #0x0
+ ldr r1, _020AD450 ; =0x040002B8
+ strh r4, [r2, #0x0]
+ str r5, [r1, #0x0]
+_020AD388:
+ ldrh r1, [r2, #0x0]
+ ands r1, r1, #0x8000
+ bne _020AD388
+ ldr r2, _020AD454 ; =0x040002B4
+ mov r1, #0x3
+ ldr r4, [r2, #0x0]
+ mov r2, r3, lsl #0x1
+ mul r1, r4, r1
+ cmp r2, r1
+ ldrhi r0, _020AD458 ; =0x021CB890
+ movhi r1, #0x0
+ strhih r1, [r0, #0x0]
+ addhi sp, sp, #0x14
+ ldmhiia sp!, {r4-r11,pc}
+_020AD3C0: ; 0x020AD3C0
+ cmp r3, r4
+ ldrlo r1, _020AD458 ; =0x021CB890
+ movcc r2, #0x4
+ strcch r2, [r1, #0x0]
+ ldr r1, _020AD458 ; =0x021CB890
+ mov r3, #0x0
+ ldrsh r2, [r1, #0x0]
+ cmp r2, #0x4
+ addlt r2, r2, #0x1
+ strlth r2, [r1, #0x0]
+ cmp r8, #0x0
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+_020AD3F4: ; 0x020AD3F4
+ ldr r1, _020AD458 ; =0x021CB890
+ ldrsh r4, [r1, #0x0]
+_020AD3FC:
+ mov r2, r3, lsl #0x1
+ ldrsh r1, [r0, r2]
+ add r3, r3, #0x1
+ cmp r3, r8
+ mov r1, r1, asr r4
+ strh r1, [r0, r2]
+ blo _020AD3FC
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AD420: .word 0x021CB8BC
+_020AD424: .word 0x021CB8A4
+_020AD428: .word 0x021CB894
+_020AD42C: .word 0x021CB898
+_020AD430: .word 0x021CBD14
+_020AD434: .word 0x3FFF8000
+_020AD438: .word 0x000007FF
+_020AD43C: .word 0x04000280
+_020AD440: .word 0x04000290
+_020AD444: .word 0x04000298
+_020AD448: .word 0x040002A0
+_020AD44C: .word 0x040002B0
+_020AD450: .word 0x040002B8
+_020AD454: .word 0x040002B4
+_020AD458: .word 0x021CB890
+
+ arm_func_start FUN_020AD45C
+FUN_020AD45C: ; 0x020AD45C
+ ldr ip, _020AD46C ; =MIi_CpuCopyFast
+ mov r2, r1
+ ldr r1, _020AD470 ; =0x021CB8D4
+ bx r12
+ .balign 4
+_020AD46C: .word MIi_CpuCopyFast
+_020AD470: .word 0x021CB8D4
+
+ arm_func_start FUN_020AD474
+FUN_020AD474: ; 0x020AD474
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020AD4E4 ; =0x021CB894
+ mov r3, #0x0
+ ldr r2, _020AD4E8 ; =0x0000019D
+ ldr r0, _020AD4EC ; =0x021CB898
+ ldr lr, _020AD4F0 ; =0x021064A8
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r0, _020AD4F4 ; =0x021CBD14
+ mov r12, r3
+_020AD4A0:
+ mov r1, r3, lsl #0x1
+ add r3, r3, #0x1
+ strh r12, [r0, r1]
+ cmp r3, #0x800
+ blt _020AD4A0
+ ldr r2, _020AD4F8 ; =0x021CB8BC
+ ldr r0, _020AD4FC ; =0x021CB8A4
+ mov r3, #0x0
+_020AD4C0:
+ str r3, [r2, r12, lsl #0x2]
+ mov r1, r12, lsl #0x1
+ ldrsh r1, [lr, r1]
+ str r1, [r0, r12, lsl #0x2]
+ add r12, r12, #0x1
+ cmp r12, #0x6
+ blt _020AD4C0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AD4E4: .word 0x021CB894
+_020AD4E8: .word 0x0000019D
+_020AD4EC: .word 0x021CB898
+_020AD4F0: .word 0x021064A8
+_020AD4F4: .word 0x021CBD14
+_020AD4F8: .word 0x021CB8BC
+_020AD4FC: .word 0x021CB8A4
+
+ arm_func_start FUN_020AD500
+FUN_020AD500: ; 0x020AD500
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldrsh r2, [r0, #0x0]
+ ldr r6, _020AD5FC ; =0x00000E9F
+ ldr sb, _020AD600 ; =0x021CB89C
+ ldr r8, _020AD604 ; =0x021CB8A0
+ smulbb r10, r2, r6
+ ldr r3, [r9, #0x0]
+ ldr r2, [r8, #0x0]
+ ldr r7, _020AD608 ; =0x00000D3E
+ add r3, r10, r3
+ mla r5, r2, r7, r3
+ mov r3, r5, asr #0xc
+ mul r4, r3, r3
+ str r5, [r8, #0x0]
+ rsb r2, r10, #0x0
+ mov r12, r1, lsr #0x1
+ str r3, [r8, #0x0]
+ str r2, [r9, #0x0]
+ cmp r12, #0x1
+ mov lr, r4, asr #0x1f
+ mov r5, #0x1
+ bls _020AD5AC
+_020AD55C:
+ mov r2, r5, lsl #0x1
+ ldrsh r10, [r0, r2]
+ ldr r3, [r8, #0x0]
+ add r2, r0, r5, lsl #0x1
+ strh r3, [r2, #-0x2]
+ smulbb r11, r10, r6
+ ldr r2, [r9, #0x0]
+ rsb r10, r11, #0x0
+ add r2, r11, r2
+ mla r2, r3, r7, r2
+ mov r3, r2, asr #0xc
+ mul r11, r3, r3
+ str r2, [r8, #0x0]
+ adds r4, r4, r11
+ str r10, [r9, #0x0]
+ add r5, r5, #0x1
+ adc lr, lr, r11, asr #0x1f
+ str r3, [r8, #0x0]
+ cmp r5, r12
+ blo _020AD55C
+_020AD5AC:
+ bic r1, r1, #0x1
+ add r0, r0, r1
+ ldr r2, _020AD60C ; =0x04000280
+ strh r3, [r0, #-0x2]
+ mov r0, #0x1
+ ldr r1, _020AD610 ; =0x04000290
+ strh r0, [r2, #0x0]
+ str r4, [r1, #0x0]
+ ldr r0, _020AD614 ; =0x04000298
+ str lr, [r1, #0x4]
+ str r12, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+_020AD5E0:
+ ldrh r0, [r2, #0x0]
+ ands r0, r0, #0x8000
+ bne _020AD5E0
+ ldr r0, _020AD618 ; =0x040002A0
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020AD5FC: .word 0x00000E9F
+_020AD600: .word 0x021CB89C
+_020AD604: .word 0x021CB8A0
+_020AD608: .word 0x00000D3E
+_020AD60C: .word 0x04000280
+_020AD610: .word 0x04000290
+_020AD614: .word 0x04000298
+_020AD618: .word 0x040002A0
+
+ arm_func_start FUN_020AD61C
+FUN_020AD61C:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs lr, r3, lsr #0x1
+ mov r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020AD634: ; 0x020AD634
+ mov r3, #0x8000
+ ldr ip, _020AD720 ; =0x00007FFF
+ rsb r3, r3, #0x0
+_020AD640:
+ mov r5, r4, lsl #0x1
+ ldrsh r6, [r0, r5]
+ ldrsh r5, [r1, r5]
+ add r6, r6, r5
+ cmp r6, r12
+ movgt r6, r12
+ bgt _020AD664
+ cmp r6, r3
+ movlt r6, r3
+_020AD664:
+ mov r5, r4, lsl #0x1
+ add r7, r4, #0x1
+ strh r6, [r2, r5]
+ mov r5, r7, lsl #0x1
+ ldrsh r6, [r0, r5]
+ ldrsh r5, [r1, r5]
+ add r6, r6, r5
+ cmp r6, r12
+ movgt r6, r12
+ bgt _020AD694
+ cmp r6, r3
+ movlt r6, r3
+_020AD694:
+ mov r5, r7, lsl #0x1
+ add r7, r4, #0x2
+ strh r6, [r2, r5]
+ mov r5, r7, lsl #0x1
+ ldrsh r6, [r0, r5]
+ ldrsh r5, [r1, r5]
+ add r6, r6, r5
+ cmp r6, r12
+ movgt r6, r12
+ bgt _020AD6CC
+ mov r5, #0x8000
+ rsb r5, r5, #0x0
+ cmp r6, r5
+ movlt r6, r3
+_020AD6CC:
+ mov r5, r7, lsl #0x1
+ add r7, r4, #0x3
+ strh r6, [r2, r5]
+ mov r5, r7, lsl #0x1
+ ldrsh r6, [r0, r5]
+ ldrsh r5, [r1, r5]
+ add r6, r6, r5
+ cmp r6, r12
+ movgt r6, r12
+ bgt _020AD704
+ mov r5, #0x8000
+ rsb r5, r5, #0x0
+ cmp r6, r5
+ movlt r6, r3
+_020AD704:
+ mov r5, r7, lsl #0x1
+ add r4, r4, #0x4
+ strh r6, [r2, r5]
+ cmp r4, lr
+ blo _020AD640
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AD720: .word 0x00007FFF
+
+ arm_func_start FUN_020AD724
+FUN_020AD724:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs r6, r1
+ mov r7, r0
+ mov r5, r2
+ mov r4, r3
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020AD748: ; 0x020AD748
+ ldr r1, [r6, #0x0]
+ ldr r0, _020AD824 ; =0x5F564354
+ cmp r1, r0
+ addne sp, sp, #0x4
+ movne r0, #0x2
+ ldmneia sp!, {r4-r7,pc}
+_020AD760: ; 0x020AD760
+ ldr r0, _020AD828 ; =0x021CCD20
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x0
+ beq _020AD780
+ ldr r0, _020AD82C ; =0x021CCD1C
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020AD78C
+_020AD780:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AD78C:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ str r0, [r4, #0x4]
+ bl OS_GetTick
+ ldrb r3, [r6, #0x4]
+ and r2, r3, #0xf0
+ cmp r2, #0x40
+ bne _020AD7E0
+ ldr r2, _020AD830 ; =0x021CCD18
+ mov r3, r0
+ ldr r4, [r2, #0x0]
+ mov r0, r7
+ add r4, r4, #0x1
+ str r4, [r2, #0x0]
+ str r1, [sp, #0x0]
+ mov r1, r6
+ mov r2, r5
+ bl FUN_020AA2A0
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AD7E0:
+ cmp r3, #0x0
+ beq _020AD7F0
+ cmp r3, #0xff
+ bne _020AD818
+_020AD7F0:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl FUN_020AC7FC
+_020AD804: ; 0x020AD804
+ cmp r0, #0x0
+ movne r0, #0x1
+ add sp, sp, #0x4
+ moveq r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020AD818:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AD824: .word 0x5F564354
+_020AD828: .word 0x021CCD20
+_020AD82C: .word 0x021CCD1C
+_020AD830: .word 0x021CCD18
+
+ arm_func_start FUN_020AD834
+FUN_020AD834: ; 0x020AD834
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ add r3, sp, #0x0
+ mov r4, r0
+ bl FUN_020AD724
+_020AD848: ; 0x020AD848
+ cmp r0, #0x0
+ beq _020AD898
+ cmp r0, #0x1
+ beq _020AD864
+ cmp r0, #0x2
+ beq _020AD88C
+ b _020AD898
+_020AD864:
+ ldr r0, _020AD8A4 ; =0x021CCD20
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ ldr r3, [r0, #0x8]
+ ldr r12, [r0, #0x4]
+ mov r0, r4
+ blx r12
+ add sp, sp, #0x8
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+_020AD88C:
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020AD898:
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AD8A4: .word 0x021CCD20
+
+ arm_func_start FUN_020AD8A8
+FUN_020AD8A8: ; 0x020AD8A8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020AD8FC ; =0x021CCD1C
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, _020AD900 ; =0x021CCD14
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ ands r0, r1, #0xf
+ bne _020AD8E0
+ bl FUN_020AC898
+_020AD8E0:
+ bl FUN_020AA0A4
+_020AD8E4: ; 0x020AD8E4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ bl FUN_020AA1CC
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AD8FC: .word 0x021CCD1C
+_020AD900: .word 0x021CCD14
+
+ arm_func_start FUN_020AD904
+FUN_020AD904: ; 0x020AD904
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020AAF44
+ bl FUN_020AC964
+ bl FUN_020ACE10
+ ldr r1, _020AD934 ; =0x021CCD20
+ mov r2, #0x0
+ ldr r0, _020AD938 ; =0x021CCD1C
+ str r2, [r1, #0x10]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AD934: .word 0x021CCD20
+_020AD938: .word 0x021CCD1C
+
+ arm_func_start FUN_020AD93C
+FUN_020AD93C: ; 0x020AD93C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _020ADA78 ; =0x02000C1C
+ bl OSi_ReferSymbol
+_020AD94C: ; 0x020AD94C
+ cmp r4, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AD958: ; 0x020AD958
+ ldr r0, _020ADA7C ; =0x021CCD1C
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ ldmneia sp!, {r4,pc}
+_020AD96C: ; 0x020AD96C
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x1
+ beq _020AD98C
+ cmp r0, #0x2
+ beq _020AD98C
+ cmp r0, #0x3
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020AD98C:
+ ldr r0, [r4, #0x18]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AD99C: ; 0x020AD99C
+ ldr r2, [r4, #0x10]
+ cmp r2, #0x0
+ beq _020AD9B4
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ bne _020AD9BC
+_020AD9B4:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020AD9BC:
+ mov r1, r2, lsr #0x1f
+ rsb r0, r1, r2, lsl #0x1b
+ adds r0, r1, r0, ror #0x1b
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020AD9D0: ; 0x020AD9D0
+ ldr r0, _020ADA80 ; =0x021CCD20
+ mov r1, #0x0
+ mov r2, #0x18
+ bl MI_CpuFill8
+ ldr r2, [r4, #0x18]
+ ldr r1, _020ADA80 ; =0x021CCD20
+ mov r0, #0x0
+ str r2, [r1, #0x4]
+ ldr r2, [r4, #0x1c]
+ str r2, [r1, #0x8]
+ ldr r2, [r4, #0x8]
+ str r0, [r1, #0xc]
+ str r2, [r1, #0x10]
+ ldrb r2, [r4, #0xc]
+ cmp r2, #0x20
+ ldmcsia sp!, {r4,pc}
+_020ADA10: ; 0x020ADA10
+ strb r2, [r1, #0x0]
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4, #0x14]
+ bl FUN_020ACE30
+_020ADA20: ; 0x020ADA20
+ cmp r0, #0x0
+ bne _020ADA34
+ bl FUN_020ACE10
+_020ADA2C: ; 0x020ADA2C
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020ADA34:
+ mov r0, r4
+ bl FUN_020AC97C
+_020ADA3C: ; 0x020ADA3C
+ cmp r0, #0x0
+ bne _020ADA50
+ bl FUN_020ACE10
+_020ADA48: ; 0x020ADA48
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020ADA50:
+ bl FUN_020AAF58
+_020ADA54: ; 0x020ADA54
+ cmp r0, #0x0
+ ldrne r1, _020ADA7C ; =0x021CCD1C
+ movne r0, #0x1
+ strne r0, [r1, #0x0]
+ ldmneia sp!, {r4,pc}
+_020ADA68: ; 0x020ADA68
+ bl FUN_020AC964
+ bl FUN_020ACE10
+_020ADA70: ; 0x020ADA70
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ADA78: .word 0x02000C1C
+_020ADA7C: .word 0x021CCD1C
+_020ADA80: .word 0x021CCD20
+
+ arm_func_start FUN_020ADA84
+FUN_020ADA84: ; 0x020ADA84
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x4]
+ ldrneh r0, [r0, #0xa]
+ ldrne r0, [r1, r0]
+ bx lr
+
+ arm_func_start FUN_020ADA98
+FUN_020ADA98: ; 0x020ADA98
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x0]
+ ldrneh r0, [r0, #0xa]
+ addne r0, r1, r0
+ ldrne r0, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_020ADAB0
+FUN_020ADAB0: ; 0x020ADAB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r12, [r0, #0xa]
+ ldr r3, [r1, r12]
+ add lr, r1, r12
+ cmp r3, #0x0
+ ldreq r1, [lr, #0x4]
+ streq r1, [r0, #0x0]
+ ldrne r2, [lr, #0x4]
+ addne r1, r3, r12
+ strne r2, [r1, #0x4]
+ ldr r3, [lr, #0x4]
+ cmp r3, #0x0
+ ldreq r1, [lr, #0x0]
+ streq r1, [r0, #0x4]
+ ldrneh r1, [r0, #0xa]
+ ldrne r2, [lr, #0x0]
+ strne r2, [r3, r1]
+ mov r1, #0x0
+ str r1, [lr, #0x0]
+ str r1, [lr, #0x4]
+ ldrh r1, [r0, #0x8]
+ sub r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020ADB18
+FUN_020ADB18: ; 0x020ADB18
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ bne _020ADB38
+ mov r1, r2
+ bl FUN_020ADBE8
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADB38:
+ ldr r3, [r0, #0x0]
+ cmp r1, r3
+ bne _020ADB54
+ mov r1, r2
+ bl FUN_020ADB8C
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADB54:
+ ldrh lr, [r0, #0xa]
+ ldr r3, [r1, lr]
+ add r12, r2, lr
+ str r3, [r2, lr]
+ str r1, [r12, #0x4]
+ add r3, r3, lr
+ str r2, [r3, #0x4]
+ ldrh r3, [r0, #0xa]
+ str r2, [r1, r3]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020ADB8C
+FUN_020ADB8C: ; 0x020ADB8C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _020ADBAC
+ bl FUN_020ADC48
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADBAC:
+ ldrh r3, [r0, #0xa]
+ mov r2, #0x0
+ str r2, [r1, r3]
+ ldr r2, [r0, #0x0]
+ add r3, r1, r3
+ str r2, [r3, #0x4]
+ ldrh r2, [r0, #0xa]
+ ldr r3, [r0, #0x0]
+ str r1, [r3, r2]
+ str r1, [r0, #0x0]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020ADBE8
+FUN_020ADBE8: ; 0x020ADBE8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _020ADC08
+ bl FUN_020ADC48
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADC08:
+ ldrh r12, [r0, #0xa]
+ ldr r3, [r0, #0x4]
+ mov r2, #0x0
+ str r3, [r1, r12]
+ add r3, r1, r12
+ str r2, [r3, #0x4]
+ ldrh r2, [r0, #0xa]
+ ldr r3, [r0, #0x4]
+ add r2, r3, r2
+ str r1, [r2, #0x4]
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020ADC48
+FUN_020ADC48: ; 0x020ADC48
+ ldrh r3, [r0, #0xa]
+ mov r2, #0x0
+ add r12, r1, r3
+ str r2, [r12, #0x4]
+ str r2, [r1, r3]
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020ADC74
+FUN_020ADC74: ; 0x020ADC74
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ strh r2, [r0, #0x8]
+ strh r1, [r0, #0xa]
+ bx lr
+
+ arm_func_start FUN_020ADC8C
+FUN_020ADC8C: ; 0x020ADC8C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020ADD30
+ mov r1, r4
+ bl FUN_020ADAB0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020ADCA4
+FUN_020ADCA4:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ str r1, [r4, #0x0]
+ str r2, [r4, #0x18]
+ str r3, [r4, #0x1c]
+ mov r0, #0x0
+ str r0, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ ldrh r0, [sp, #0x8]
+ bic r1, r1, #0xff
+ str r1, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ and r0, r0, #0xff
+ orr r2, r1, r0
+ add r0, r4, #0xc
+ mov r1, #0x4
+ str r2, [r4, #0x20]
+ bl FUN_020ADC74
+ ldr r0, _020ADD28 ; =0x021CCD38
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020ADD14
+ ldr r0, _020ADD2C ; =0x021CCD3C
+ mov r1, #0x4
+ bl FUN_020ADC74
+ ldr r0, _020ADD28 ; =0x021CCD38
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020ADD14:
+ mov r0, r4
+ bl FUN_020ADD30
+ mov r1, r4
+ bl FUN_020ADBE8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ADD28: .word 0x021CCD38
+_020ADD2C: .word 0x021CCD3C
+
+ arm_func_start FUN_020ADD30
+FUN_020ADD30: ; 0x020ADD30
+ stmdb sp!, {r4,lr}
+ ldr r4, _020ADD54 ; =0x021CCD3C
+ mov r1, r0
+ mov r0, r4
+ bl FUN_020ADD58
+_020ADD44: ; 0x020ADD44
+ cmp r0, #0x0
+ addne r4, r0, #0xc
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ADD54: .word 0x021CCD3C
+
+ arm_func_start FUN_020ADD58
+FUN_020ADD58:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r1, #0x0
+ mov r6, r0
+ bl FUN_020ADA98
+ movs r4, r0
+ beq _020ADDB8
+_020ADD74:
+ ldr r0, [r4, #0x18]
+ cmp r0, r5
+ bhi _020ADDA4
+ ldr r0, [r4, #0x1c]
+ cmp r5, r0
+ bhs _020ADDA4
+ mov r1, r5
+ add r0, r4, #0xc
+ bl FUN_020ADD58
+_020ADD98: ; 0x020ADD98
+ cmp r0, #0x0
+ moveq r0, r4
+ ldmia sp!, {r4-r6,pc}
+_020ADDA4:
+ mov r0, r6
+ mov r1, r4
+ bl FUN_020ADA98
+ movs r4, r0
+ bne _020ADD74
+_020ADDB8:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020ADDC0
+FUN_020ADDC0: ; 0x020ADDC0
+ ldr r0, [r0, #-0xc]
+ bx lr
+
+ arm_func_start FUN_020ADDC8
+FUN_020ADDC8: ; 0x020ADDC8
+ ldr r2, [r0, #0x24]
+ mov r0, #0x0
+ cmp r2, #0x0
+ bxeq lr
+_020ADDD8:
+ ldr r1, [r2, #0x4]
+ ldr r2, [r2, #0xc]
+ add r0, r0, r1
+ cmp r2, #0x0
+ bne _020ADDD8
+ bx lr
+
+ arm_func_start FUN_020ADDF0
+FUN_020ADDF0: ; 0x020ADDF0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ sub r4, r1, #0x10
+ add r5, r0, #0x24
+ add r0, sp, #0x0
+ mov r1, r4
+ bl FUN_020AE528
+ mov r1, r4
+ add r0, r5, #0x8
+ bl FUN_020AE500
+ add r1, sp, #0x0
+ mov r0, r5
+ bl FUN_020AE02C
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020ADE2C
+FUN_020ADE2C: ; 0x020ADE2C
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x10
+ mov r4, r1
+ mov r10, r2
+ sub r6, r4, #0x10
+ add r1, r10, #0x3
+ mov r5, r0
+ ldr r8, [r6, #0x4]
+ bic r10, r1, #0x3
+ cmp r10, r8
+ add r7, r5, #0x24
+ addeq sp, sp, #0x10
+ moveq r0, r10
+ ldmeqia sp!, {r4-r10,pc}
+_020ADE64: ; 0x020ADE64
+ cmp r10, r8
+ bls _020ADF60
+ ldr r9, [r7, #0x0]
+ add r0, r6, #0x10
+ cmp r9, #0x0
+ add r0, r8, r0
+ beq _020ADE94
+_020ADE80:
+ cmp r9, r0
+ beq _020ADE94
+ ldr r9, [r9, #0xc]
+ cmp r9, #0x0
+ bne _020ADE80
+_020ADE94:
+ cmp r9, #0x0
+ beq _020ADEB0
+ ldr r0, [r9, #0x4]
+ add r1, r8, #0x10
+ add r0, r1, r0
+ cmp r10, r0
+ bls _020ADEBC
+_020ADEB0:
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r10,pc}
+_020ADEBC:
+ add r0, sp, #0x0
+ mov r1, r9
+ bl FUN_020AE528
+ mov r0, r7
+ mov r1, r9
+ bl FUN_020AE500
+ ldr r2, [sp, #0x4]
+ add r3, r10, r4
+ ldr r9, [sp, #0x0]
+ sub r1, r2, r3
+ str r3, [sp, #0x0]
+ cmp r1, #0x10
+ strcc r2, [sp, #0x0]
+ mov r8, r0
+ ldr r0, [sp, #0x0]
+ sub r0, r0, r4
+ str r0, [r6, #0x4]
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ blo _020ADF30
+ ldr r1, _020ADF9C ; =0x00004652
+ add r0, sp, #0x0
+ bl FUN_020AE4A0
+ mov r1, r0
+ mov r0, r7
+ mov r2, r8
+ bl FUN_020AE4D0
+_020ADF30:
+ ldr r0, [r5, #0x20]
+ ldr r1, [sp, #0x0]
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ sub r2, r1, r9
+ ands r0, r0, #0x1
+ beq _020ADF90
+ mov r1, r9
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ b _020ADF90
+_020ADF60:
+ add r0, r10, r4
+ str r0, [sp, #0x8]
+ ldr r1, [r6, #0x4]
+ add r0, r6, #0x10
+ add r0, r1, r0
+ str r0, [sp, #0xc]
+ add r1, sp, #0x8
+ mov r0, r7
+ str r10, [r6, #0x4]
+ bl FUN_020AE02C
+_020ADF88: ; 0x020ADF88
+ cmp r0, #0x0
+ streq r8, [r6, #0x4]
+_020ADF90:
+ ldr r0, [r6, #0x4]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020ADF9C: .word 0x00004652
+
+ arm_func_start tempName_NNS_FndAllocFromExpHeapEx
+tempName_NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ moveq r1, #0x1
+ add r1, r1, #0x3
+ cmp r2, #0x0
+ bic r1, r1, #0x3
+ blt _020ADFCC
+ bl FUN_020AE1D8
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADFCC:
+ rsb r2, r2, #0x0
+ bl FUN_020AE11C
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start thunk_FUN_020adc8c
+thunk_FUN_020adc8c: ; 0x020ADFDC
+ ldr ip, _020ADFE4 ; =FUN_020ADC8C
+ bx r12
+ .balign 4
+_020ADFE4: .word FUN_020ADC8C
+
+ arm_func_start tempName_NNS_FndCreateExpHeapEx
+tempName_NNS_FndCreateExpHeapEx: ; 0x020ADFE8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r1, r1, r0
+ add r0, r0, #0x3
+ bic r1, r1, #0x3
+ bic r0, r0, #0x3
+ cmp r0, r1
+ bhi _020AE014
+ sub r3, r1, r0
+ cmp r3, #0x4c
+ bhs _020AE020
+_020AE014:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020AE020:
+ bl FUN_020AE420
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AE02C
+FUN_020AE02C:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r1
+ ldr r2, [r5, #0x0]
+ ldr r1, [r5, #0x4]
+ mov r6, r0
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r1, [r6, #0x0]
+ mov r4, #0x0
+ cmp r1, #0x0
+ beq _020AE0A0
+ ldr r0, [r5, #0x0]
+_020AE060:
+ cmp r1, r0
+ movcc r4, r1
+ blo _020AE094
+ ldr r0, [r5, #0x4]
+ cmp r1, r0
+ bne _020AE0A0
+ ldr r2, [r1, #0x4]
+ add r0, r1, #0x10
+ add r2, r2, r0
+ mov r0, r6
+ str r2, [sp, #0x4]
+ bl FUN_020AE500
+ b _020AE0A0
+_020AE094:
+ ldr r1, [r1, #0xc]
+ cmp r1, #0x0
+ bne _020AE060
+_020AE0A0:
+ cmp r4, #0x0
+ beq _020AE0D4
+ ldr r2, [r4, #0x4]
+ add r1, r4, #0x10
+ ldr r0, [r5, #0x0]
+ add r1, r2, r1
+ cmp r1, r0
+ bne _020AE0D4
+ mov r0, r6
+ mov r1, r4
+ str r4, [sp, #0x0]
+ bl FUN_020AE500
+ mov r4, r0
+_020AE0D4:
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ addcc sp, sp, #0x8
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r6,pc}
+_020AE0F0: ; 0x020AE0F0
+ ldr r1, _020AE118 ; =0x00004652
+ add r0, sp, #0x0
+ bl FUN_020AE4A0
+ mov r1, r0
+ mov r0, r6
+ mov r2, r4
+ bl FUN_020AE4D0
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AE118: .word 0x00004652
+
+ arm_func_start FUN_020AE11C
+FUN_020AE11C: ; 0x020AE11C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ add r0, r0, #0x24
+ ldrh r4, [r0, #0x12]
+ mov r3, r1
+ mvn lr, #0x0
+ and r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ moveq r5, #0x1
+ mov r1, #0x0
+ ldr r4, [r0, #0x4]
+ movne r5, #0x0
+ mov r12, r1
+ cmp r4, #0x0
+ beq _020AE1B0
+ sub r2, r2, #0x1
+ mvn r2, r2
+_020AE164:
+ ldr r8, [r4, #0x4]
+ add r9, r4, #0x10
+ add r6, r8, r9
+ sub r6, r6, r3
+ and r7, r2, r6
+ subs r6, r7, r9
+ bmi _020AE1A4
+ cmp lr, r8
+ bls _020AE1A4
+ mov r1, r4
+ mov lr, r8
+ mov r12, r7
+ cmp r5, #0x0
+ bne _020AE1B0
+ cmp r8, r3
+ beq _020AE1B0
+_020AE1A4:
+ ldr r4, [r4, #0x8]
+ cmp r4, #0x0
+ bne _020AE164
+_020AE1B0:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020AE1C0: ; 0x020AE1C0
+ mov r4, #0x1
+ mov r2, r12
+ str r4, [sp, #0x0]
+ bl FUN_020AE298
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020AE1D8
+FUN_020AE1D8: ; 0x020AE1D8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ add r0, r0, #0x24
+ ldrh r4, [r0, #0x12]
+ mov r3, r1
+ ldr r5, [r0, #0x0]
+ and r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ moveq r6, #0x1
+ mov r1, #0x0
+ movne r6, #0x0
+ mov lr, r1
+ cmp r5, #0x0
+ mvn r4, #0x0
+ beq _020AE270
+ sub r12, r2, #0x1
+ mvn r2, r12
+_020AE220:
+ add r8, r5, #0x10
+ add r7, r12, r8
+ and r9, r2, r7
+ sub r7, r9, r8
+ ldr r8, [r5, #0x4]
+ add r7, r3, r7
+ cmp r8, r7
+ blo _020AE264
+ cmp r4, r8
+ bls _020AE264
+ mov r1, r5
+ mov r4, r8
+ mov lr, r9
+ cmp r6, #0x0
+ bne _020AE270
+ cmp r8, r3
+ beq _020AE270
+_020AE264:
+ ldr r5, [r5, #0xc]
+ cmp r5, #0x0
+ bne _020AE220
+_020AE270:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020AE280: ; 0x020AE280
+ mov r4, #0x0
+ mov r2, lr
+ str r4, [sp, #0x0]
+ bl FUN_020AE298
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020AE298
+FUN_020AE298: ; 0x020AE298
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x18
+ mov r7, r0
+ add r0, sp, #0x0
+ mov r8, r1
+ mov r6, r2
+ mov r5, r3
+ bl FUN_020AE528
+ ldr r3, [sp, #0x4]
+ sub r4, r6, #0x10
+ add r2, r5, r6
+ mov r0, r7
+ mov r1, r8
+ str r4, [sp, #0x4]
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x8]
+ bl FUN_020AE500
+ ldr r2, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ mov r5, r0
+ sub r0, r1, r2
+ cmp r0, #0x10
+ strcc r2, [sp, #0x4]
+ blo _020AE318
+ ldr r1, _020AE418 ; =0x00004652
+ add r0, sp, #0x0
+ bl FUN_020AE4A0
+ mov r1, r0
+ mov r0, r7
+ mov r2, r5
+ bl FUN_020AE4D0
+ mov r5, r0
+_020AE318:
+ ldr r1, [sp, #0xc]
+ ldr r0, [sp, #0x8]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ strcc r1, [sp, #0x8]
+ blo _020AE34C
+ ldr r1, _020AE418 ; =0x00004652
+ add r0, sp, #0x8
+ bl FUN_020AE4A0
+ mov r1, r0
+ mov r0, r7
+ mov r2, r5
+ bl FUN_020AE4D0
+_020AE34C:
+ ldr r0, [r7, #-0x4]
+ ldr r1, [sp, #0x4]
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ ldr r2, [sp, #0x8]
+ mov r0, r0, lsr #0x10
+ sub r2, r2, r1
+ ands r0, r0, #0x1
+ beq _020AE378
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE378:
+ ldr r2, [sp, #0x8]
+ ldr r1, _020AE41C ; =0x00005544
+ add r0, sp, #0x10
+ str r4, [sp, #0x10]
+ str r2, [sp, #0x14]
+ bl FUN_020AE4A0
+ mov r1, r0
+ ldrh r3, [r1, #0x2]
+ ldrh r2, [sp, #0x30]
+ add r0, r7, #0x8
+ bic r3, r3, #0x8000
+ strh r3, [r1, #0x2]
+ ldrh r3, [r1, #0x2]
+ and r2, r2, #0x1
+ orr r2, r3, r2, lsl #0xf
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ ldr r3, [sp, #0x4]
+ bic r2, r2, #0x7f00
+ strh r2, [r1, #0x2]
+ sub r2, r1, r3
+ mov r2, r2, lsl #0x10
+ mov r2, r2, lsr #0x10
+ ldrh r3, [r1, #0x2]
+ and r2, r2, #0x7f
+ orr r2, r3, r2, lsl #0x8
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ ldrh r3, [r7, #0x10]
+ bic r2, r2, #0xff
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ and r3, r3, #0xff
+ orr r2, r2, r3
+ strh r2, [r1, #0x2]
+ ldr r2, [r7, #0xc]
+ bl FUN_020AE4D0
+ mov r0, r6
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020AE418: .word 0x00004652
+_020AE41C: .word 0x00005544
+
+ arm_func_start FUN_020AE420
+FUN_020AE420: ; 0x020AE420
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r3, r1
+ add r4, r5, #0x24
+ str r2, [sp, #0x0]
+ ldr r1, _020AE498 ; =0x45585048
+ add r2, r4, #0x14
+ bl FUN_020ADCA4
+_020AE444: ; 0x020AE444
+ mov r0, #0x0
+ strh r0, [r4, #0x10]
+ strh r0, [r4, #0x12]
+ ldrh r2, [r4, #0x12]
+ ldr r1, _020AE49C ; =0x00004652
+ add r0, sp, #0x4
+ bic r2, r2, #0x1
+ strh r2, [r4, #0x12]
+ ldr r2, [r5, #0x18]
+ str r2, [sp, #0x4]
+ ldr r2, [r5, #0x1c]
+ str r2, [sp, #0x8]
+ bl FUN_020AE4A0
+ str r0, [r5, #0x24]
+ str r0, [r4, #0x4]
+ mov r1, #0x0
+ str r1, [r4, #0x8]
+ mov r0, r5
+ str r1, [r4, #0xc]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AE498: .word 0x45585048
+_020AE49C: .word 0x00004652
+
+ arm_func_start FUN_020AE4A0
+FUN_020AE4A0: ; 0x020AE4A0
+ ldr r3, [r0, #0x0]
+ mov r2, #0x0
+ strh r1, [r3, #0x0]
+ strh r2, [r3, #0x2]
+ ldr r1, [r0, #0x4]
+ add r0, r3, #0x10
+ sub r0, r1, r0
+ str r0, [r3, #0x4]
+ str r2, [r3, #0x8]
+ mov r0, r3
+ str r2, [r3, #0xc]
+ bx lr
+
+ arm_func_start FUN_020AE4D0
+FUN_020AE4D0: ; 0x020AE4D0
+ str r2, [r1, #0x8]
+ cmp r2, #0x0
+ ldrne r3, [r2, #0xc]
+ strne r1, [r2, #0xc]
+ ldreq r3, [r0, #0x0]
+ streq r1, [r0, #0x0]
+ str r3, [r1, #0xc]
+ cmp r3, #0x0
+ strne r1, [r3, #0x8]
+ streq r1, [r0, #0x4]
+ mov r0, r1
+ bx lr
+
+ arm_func_start FUN_020AE500
+FUN_020AE500: ; 0x020AE500
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0xc]
+ cmp r2, #0x0
+ strne r1, [r2, #0xc]
+ streq r1, [r0, #0x0]
+ cmp r1, #0x0
+ strne r2, [r1, #0x8]
+ streq r2, [r0, #0x4]
+ mov r0, r2
+ bx lr
+
+ arm_func_start FUN_020AE528
+FUN_020AE528: ; 0x020AE528
+ ldrh r2, [r1, #0x2]
+ add r3, r1, #0x10
+ mov r2, r2, asr #0x8
+ and r2, r2, #0x7f
+ mov r2, r2, lsl #0x10
+ sub r2, r1, r2, lsr #0x10
+ str r2, [r0, #0x0]
+ ldr r1, [r1, #0x4]
+ add r1, r1, r3
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_020AE554
+FUN_020AE554: ; 0x020AE554
+ add r2, r0, #0x24
+ cmp r1, #0x0
+ ldr r3, [r2, #0x8]
+ beq _020AE584
+ cmp r3, #0x0
+ beq _020AE584
+_020AE56C:
+ ldr r0, [r3, #0x0]
+ cmp r0, r1
+ beq _020AE584
+ ldr r3, [r3, #0xc]
+ cmp r3, #0x0
+ bne _020AE56C
+_020AE584:
+ cmp r3, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ ldr r1, [r3, #0x4]
+ mov r0, #0x1
+ str r1, [r2, #0x0]
+ ldr r1, [r3, #0x8]
+ str r1, [r2, #0x4]
+ ldr r1, [r3, #0xc]
+ str r1, [r2, #0x8]
+ bx lr
+
+ arm_func_start FUN_020AE5B0
+FUN_020AE5B0: ; 0x020AE5B0
+ stmdb sp!, {r4-r6,lr}
+ add r4, r0, #0x24
+ ldr r5, [r0, #0x24]
+ mov r6, r1
+ mov r0, r4
+ mov r1, #0x10
+ mov r2, #0x4
+ bl FUN_020AE77C
+_020AE5D0: ; 0x020AE5D0
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020AE5DC: ; 0x020AE5DC
+ str r6, [r0, #0x0]
+ str r5, [r0, #0x4]
+ ldr r1, [r4, #0x4]
+ str r1, [r0, #0x8]
+ ldr r1, [r4, #0x8]
+ str r1, [r0, #0xc]
+ str r0, [r4, #0x8]
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AE600
+FUN_020AE600: ; 0x020AE600
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ ands r1, r4, #0x1
+ beq _020AE61C
+ bl FUN_020AE6F8
+_020AE61C:
+ ands r0, r4, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020AE628: ; 0x020AE628
+ mov r0, r5
+ bl FUN_020AE6C8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020AE638
+FUN_020AE638: ; 0x020AE638
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ moveq r1, #0x1
+ add r1, r1, #0x3
+ add r0, r0, #0x24
+ cmp r2, #0x0
+ bic r1, r1, #0x3
+ blt _020AE668
+ bl FUN_020AE77C
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020AE668:
+ rsb r2, r2, #0x0
+ bl FUN_020AE710
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start thunk_FUN_020adc8c_2
+thunk_FUN_020adc8c_2: ; 0x020AE678
+ ldr ip, _020AE680 ; =FUN_020ADC8C
+ bx r12
+ .balign 4
+_020AE680: .word FUN_020ADC8C
+
+ arm_func_start FUN_020AE684
+FUN_020AE684: ; 0x020AE684
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r1, r1, r0
+ add r0, r0, #0x3
+ bic r1, r1, #0x3
+ bic r0, r0, #0x3
+ cmp r0, r1
+ bhi _020AE6B0
+ sub r3, r1, r0
+ cmp r3, #0x30
+ bhs _020AE6BC
+_020AE6B0:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020AE6BC:
+ bl FUN_020AE7E0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AE6C8
+FUN_020AE6C8: ; 0x020AE6C8
+ add r2, r0, #0x24
+ ldr r3, [r2, #0x8]
+ cmp r3, #0x0
+ beq _020AE6EC
+_020AE6D8:
+ ldr r1, [r0, #0x1c]
+ str r1, [r3, #0x8]
+ ldr r3, [r3, #0xc]
+ cmp r3, #0x0
+ bne _020AE6D8
+_020AE6EC:
+ ldr r0, [r0, #0x1c]
+ str r0, [r2, #0x4]
+ bx lr
+
+ arm_func_start FUN_020AE6F8
+FUN_020AE6F8: ; 0x020AE6F8
+ ldr r1, [r0, #0x18]
+ add r2, r0, #0x24
+ str r1, [r0, #0x24]
+ mov r0, #0x0
+ str r0, [r2, #0x8]
+ bx lr
+
+ arm_func_start FUN_020AE710
+FUN_020AE710: ; 0x020AE710
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r3, [r5, #0x4]
+ sub r0, r2, #0x1
+ mvn r2, r0
+ sub r1, r3, r1
+ ldr r0, [r5, #0x0]
+ and r4, r2, r1
+ cmp r4, r0
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,pc}
+_020AE744: ; 0x020AE744
+ ldr r0, [r5, #-0x4]
+ sub r2, r3, r4
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ands r0, r0, #0x1
+ beq _020AE76C
+ mov r1, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE76C:
+ mov r0, r4
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020AE77C
+FUN_020AE77C:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x0]
+ sub r2, r2, #0x1
+ mvn r3, r2
+ add r2, r2, r0
+ and r5, r3, r2
+ ldr r2, [r6, #0x4]
+ add r4, r1, r5
+ cmp r4, r2
+ movhi r0, #0x0
+ ldmhiia sp!, {r4-r6,pc}
+_020AE7AC: ; 0x020AE7AC
+ ldr r1, [r6, #-0x4]
+ sub r2, r4, r0
+ and r1, r1, #0xff
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ ands r1, r1, #0x1
+ beq _020AE7D4
+ mov r1, r0
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE7D4:
+ mov r0, r5
+ str r4, [r6, #0x0]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AE7E0
+FUN_020AE7E0: ; 0x020AE7E0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r3, r1
+ add r4, r5, #0x24
+ str r2, [sp, #0x0]
+ ldr r1, _020AE828 ; =0x46524D48
+ add r2, r4, #0xc
+ bl FUN_020ADCA4
+ ldr r0, [r5, #0x18]
+ mov r1, #0x0
+ str r0, [r5, #0x24]
+ ldr r2, [r5, #0x1c]
+ mov r0, r5
+ str r2, [r4, #0x4]
+ str r1, [r4, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AE828: .word 0x46524D48
+
+ arm_func_start FUN_020AE82C
+FUN_020AE82C: ; 0x020AE82C
+ ldr ip, _020AE848 ; =0x020FF7CC
+ mov r3, #0x0
+ str r12, [r0, #0x0]
+ str r1, [r0, #0x4]
+ str r2, [r0, #0x8]
+ str r3, [r0, #0xc]
+ bx lr
+ .balign 4
+_020AE848: .word 0x020FF7CC
+
+ arm_func_start FUN_020AE84C
+FUN_020AE84C: ; 0x020AE84C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ ldr r2, [r2, #0x4]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AE868
+FUN_020AE868: ; 0x020AE868
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ ldr r2, [r2, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AE884
+FUN_020AE884: ; 0x020AE884
+ ldr ip, _020AE890 ; =FUN_020ADDF0
+ ldr r0, [r0, #0x4]
+ bx r12
+ .balign 4
+_020AE890: .word FUN_020ADDF0
+
+ arm_func_start FUN_020AE894
+FUN_020AE894: ; 0x020AE894
+ ldr ip, _020AE8A8 ; =tempName_NNS_FndAllocFromExpHeapEx
+ mov r2, r0
+ ldr r0, [r2, #0x4]
+ ldr r2, [r2, #0x8]
+ bx r12
+ .balign 4
+_020AE8A8: .word tempName_NNS_FndAllocFromExpHeapEx
+
+ arm_func_start FUN_020AE8AC
+FUN_020AE8AC: ; 0x020AE8AC
+ mvn r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AE8B4
+FUN_020AE8B4: ; 0x020AE8B4
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AE8BC
+FUN_020AE8BC: ; 0x020AE8BC
+ mvn r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AE8C4
+FUN_020AE8C4: ; 0x020AE8C4
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AE8CC
+FUN_020AE8CC: ; 0x020AE8CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, #0x0
+ ldr r3, _020AE914 ; =0x021064E4
+ mov r12, lr
+ mov r2, #0x1
+_020AE8E4:
+ ldr r1, [r0, r12, lsl #0x2]
+ add lr, lr, #0x1
+ str r1, [r3, #0x0]
+ ldr r1, [r0, r2, lsl #0x2]
+ cmp lr, #0x5
+ str r1, [r3, #0x4]
+ add r12, r12, #0x2
+ add r3, r3, #0x18
+ add r2, r2, #0x2
+ blt _020AE8E4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AE914: .word 0x021064E4
+
+ arm_func_start FUN_020AE918
+FUN_020AE918: ; 0x020AE918
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, #0x0
+ ldr ip, _020AE960 ; =0x021064E4
+ mov r3, lr
+ mov r2, #0x1
+_020AE930:
+ ldr r1, [r12, #0x0]
+ add lr, lr, #0x1
+ str r1, [r0, r3, lsl #0x2]
+ ldr r1, [r12, #0x4]
+ cmp lr, #0x5
+ str r1, [r0, r2, lsl #0x2]
+ add r12, r12, #0x18
+ add r3, r3, #0x2
+ add r2, r2, #0x2
+ blt _020AE930
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AE960: .word 0x021064E4
+
+ arm_func_start FUN_020AE964
+FUN_020AE964: ; 0x020AE964
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AE96C
+FUN_020AE96C: ; 0x020AE96C
+ stmdb sp!, {r4-r10,lr}
+ cmp r0, #0x0
+ moveq r7, #0x10
+ addne r0, r0, #0xf
+ bicne r7, r0, #0xf
+ ldr r0, _020AEADC ; =0x0007FFF0
+ cmp r7, r0
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r10,pc}
+_020AE990: ; 0x020AE990
+ cmp r1, #0x0
+ beq _020AEA5C
+ mov lr, r7, lsr #0x1
+ mov r6, #0x0
+ ldr r2, _020AEAE0 ; =0x02106514
+ ldr r3, _020AEAE4 ; =0x021064FC
+ ldr ip, _020AEAE8 ; =0x021064C8
+ mov r0, r6
+_020AE9B0:
+ ldr r5, [r12, r6, lsl #0x2]
+ ldr r4, [r5, #0x8]
+ cmp r4, #0x0
+ beq _020AEA48
+ ldr r9, [r5, #0x4]
+ ldr r4, [r5, #0x0]
+ sub r4, r9, r4
+ cmp r4, r7
+ blo _020AEA48
+ ldrh r4, [r5, #0x10]
+ cmp r4, #0x0
+ beq _020AE9EC
+ cmp r4, #0x3
+ beq _020AE9F4
+ b _020AE9FC
+_020AE9EC:
+ mov r4, r3
+ b _020AEA00
+_020AE9F4:
+ mov r4, r2
+ b _020AEA00
+_020AE9FC:
+ mov r4, r0
+_020AEA00:
+ ldr r9, [r4, #0x8]
+ cmp r9, #0x0
+ beq _020AEA48
+ ldr r10, [r4, #0x4]
+ ldr r9, [r4, #0x0]
+ sub r9, r10, r9
+ cmp r9, lr
+ blo _020AEA48
+ ldr r3, [r5, #0x0]
+ mov r0, #0x1
+ add r2, r3, r7
+ str r2, [r5, #0x0]
+ ldr r2, [r4, #0x0]
+ add r2, r2, lr
+ str r2, [r4, #0x0]
+ ldr r2, [r5, #0x14]
+ add r8, r3, r2
+ b _020AEAB8
+_020AEA48:
+ add r6, r6, #0x1
+ cmp r6, #0x2
+ blt _020AE9B0
+ mov r0, #0x0
+ b _020AEAB8
+_020AEA5C:
+ ldr r3, _020AEAEC ; =0x021064D0
+ mov r5, #0x0
+_020AEA64:
+ ldr r4, [r3, r5, lsl #0x2]
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _020AEAA8
+ ldr r2, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ sub r0, r2, r0
+ cmp r0, r7
+ blo _020AEAA8
+ ldr r2, [r4, #0x4]
+ mov r0, #0x1
+ sub r2, r2, r7
+ str r2, [r4, #0x4]
+ ldr r3, [r4, #0x4]
+ ldr r2, [r4, #0x14]
+ add r8, r3, r2
+ b _020AEAB8
+_020AEAA8:
+ add r5, r5, #0x1
+ cmp r5, #0x5
+ blt _020AEA64
+ mov r0, #0x0
+_020AEAB8:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020AEAC4: ; 0x020AEAC4
+ ldr r0, _020AEAF0 ; =0x0000FFFF
+ mov r2, r7, lsr #0x4
+ and r0, r0, r8, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ orr r0, r0, r1, lsl #0x1f
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020AEADC: .word 0x0007FFF0
+_020AEAE0: .word 0x02106514
+_020AEAE4: .word 0x021064FC
+_020AEAE8: .word 0x021064C8
+_020AEAEC: .word 0x021064D0
+_020AEAF0: .word 0x0000FFFF
+
+ arm_func_start FUN_020AEAF4
+FUN_020AEAF4:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020AEB68 ; =0x021CCD48
+ mov r6, #0x0
+ ldrh r7, [r0, #0x0]
+ ldr r5, _020AEB6C ; =0x021064E4
+ mov lr, r6
+ cmp r7, #0x1
+ addhi r7, r7, #0x1
+ mov r1, r6
+ mov r3, r6
+ mov r4, #0x1
+ mov r0, #0x20000
+ mov r2, #0x10000
+_020AEB2C:
+ cmp r6, r7
+ strlt r4, [r5, #0x8]
+ strge lr, [r5, #0x8]
+ ldr r12, [r5, #0xc]
+ add r6, r6, #0x1
+ cmp r12, #0x0
+ strne r3, [r5, #0x0]
+ strne r2, [r5, #0x4]
+ streq r1, [r5, #0x0]
+ streq r0, [r5, #0x4]
+ cmp r6, #0x5
+ add r5, r5, #0x18
+ blt _020AEB2C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AEB68: .word 0x021CCD48
+_020AEB6C: .word 0x021064E4
+
+ arm_func_start FUN_020AEB70
+FUN_020AEB70: ; 0x020AEB70
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ cmp r5, #0x2
+ bhi _020AEBA8
+ mov r12, #0x1
+ mov r0, #0x4
+ mov r1, #0x3
+ mov r2, #0x2
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl FUN_020AEC10
+ b _020AEBC4
+_020AEBA8:
+ mov r12, #0x1
+ mov r0, #0x4
+ mov r1, #0x3
+ mov r2, #0x0
+ mov r3, #0x2
+ str r12, [sp, #0x0]
+ bl FUN_020AEC10
+_020AEBC4:
+ ldr r0, _020AEBFC ; =0x021CCD48
+ strh r5, [r0, #0x0]
+ bl FUN_020AEAF4
+_020AEBD0: ; 0x020AEBD0
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020AEBDC: ; 0x020AEBDC
+ ldr r3, _020AEC00 ; =FUN_020AE96C
+ ldr r1, _020AEC04 ; =0x021064B8
+ ldr r2, _020AEC08 ; =FUN_020AE964
+ ldr r0, _020AEC0C ; =0x021064BC
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AEBFC: .word 0x021CCD48
+_020AEC00: .word FUN_020AE96C
+_020AEC04: .word 0x021064B8
+_020AEC08: .word FUN_020AE964
+_020AEC0C: .word 0x021064BC
+
+ arm_func_start FUN_020AEC10
+FUN_020AEC10: ; 0x020AEC10
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr lr, [sp, #0x18]
+ ldr r6, _020AEC58 ; =0x021064E4
+ mov r12, #0x18
+ mla r7, r0, r12, r6
+ ldr r0, _020AEC5C ; =0x021064D0
+ mla r5, r1, r12, r6
+ mla r4, r2, r12, r6
+ mla r2, r3, r12, r6
+ mla r1, lr, r12, r6
+ str r7, [r0, #0x0]
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x8]
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AEC58: .word 0x021064E4
+_020AEC5C: .word 0x021064D0
+
+ arm_func_start FUN_020AEC60
+FUN_020AEC60:
+ ldr r0, _020AEC78 ; =0x021CCD4C
+ mov r2, #0x0
+ ldr r1, [r0, #0x8]
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ bx lr
+ .balign 4
+_020AEC78: .word 0x021CCD4C
+
+ arm_func_start FUN_020AEC7C
+FUN_020AEC7C: ; 0x020AEC7C
+ ldr r2, [r0, #0x0]
+ ldr r1, _020AEC94 ; =0x021CCD4C
+ str r2, [r1, #0x0]
+ ldr r0, [r0, #0x4]
+ str r0, [r1, #0x4]
+ bx lr
+ .balign 4
+_020AEC94: .word 0x021CCD4C
+
+ arm_func_start FUN_020AEC98
+FUN_020AEC98: ; 0x020AEC98
+ ldr r1, _020AECB0 ; =0x021CCD4C
+ ldr r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x4]
+ bx lr
+ .balign 4
+_020AECB0: .word 0x021CCD4C
+
+ arm_func_start FUN_020AECB4
+FUN_020AECB4: ; 0x020AECB4
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AECBC
+FUN_020AECBC: ; 0x020AECBC
+ stmdb sp!, {r4,lr}
+ cmp r0, #0x0
+ moveq r0, #0x8
+ addne r0, r0, #0x7
+ ldr ip, _020AEDE8 ; =0x0007FFF8
+ bicne r0, r0, #0x7
+ cmp r0, r12
+ mov r3, #0x0
+ movcs r0, #0x0
+ ldmcsia sp!, {r4,pc}
+_020AECE4: ; 0x020AECE4
+ cmp r2, #0x1
+ bne _020AED64
+ ldr r2, _020AEDEC ; =0x021CCD4C
+ cmp r1, #0x0
+ ldr r12, [r2, #0x0]
+ andne r2, r12, #0x7
+ rsbne r2, r2, #0x8
+ andne r4, r2, #0x7
+ andeq r2, r12, #0xf
+ rsbeq r2, r2, #0x10
+ andeq r4, r2, #0xf
+ ldr r2, _020AEDEC ; =0x021CCD4C
+ add lr, r0, r4
+ ldr r2, [r2, #0x4]
+ sub r2, r2, r12
+ cmp r2, lr
+ blo _020AED5C
+ cmp r1, #0x0
+ add r1, r12, lr
+ beq _020AED40
+ cmp r1, #0x10000
+ movhi r12, #0x0
+ bhi _020AEDCC
+_020AED40:
+ ldr r1, _020AEDEC ; =0x021CCD4C
+ add r3, r12, r4
+ ldr r2, [r1, #0x0]
+ mov r12, #0x1
+ add r2, r2, lr
+ str r2, [r1, #0x0]
+ b _020AEDCC
+_020AED5C:
+ mov r12, #0x0
+ b _020AEDCC
+_020AED64:
+ ldr r2, _020AEDEC ; =0x021CCD4C
+ ldr r12, [r2, #0x4]
+ cmp r12, r0
+ blo _020AEDC8
+ sub r2, r12, r0
+ cmp r1, #0x0
+ andne r4, r2, #0x7
+ andeq r4, r2, #0xf
+ ldr r2, _020AEDEC ; =0x021CCD4C
+ add lr, r0, r4
+ ldr r2, [r2, #0x0]
+ sub r2, r12, r2
+ cmp r2, lr
+ blo _020AEDC8
+ cmp r1, #0x0
+ beq _020AEDB0
+ cmp r12, #0x10000
+ movhi r12, #0x0
+ bhi _020AEDCC
+_020AEDB0:
+ ldr r1, _020AEDEC ; =0x021CCD4C
+ mov r12, #0x1
+ ldr r2, [r1, #0x4]
+ sub r3, r2, lr
+ str r3, [r1, #0x4]
+ b _020AEDCC
+_020AEDC8:
+ mov r12, #0x0
+_020AEDCC:
+ cmp r12, #0x0
+ ldrne r1, _020AEDF0 ; =0x0000FFFF
+ movne r2, r0, lsr #0x3
+ andne r0, r1, r3, lsr #0x3
+ orrne r0, r0, r2, lsl #0x10
+ moveq r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AEDE8: .word 0x0007FFF8
+_020AEDEC: .word 0x021CCD4C
+_020AEDF0: .word 0x0000FFFF
+
+ arm_func_start FUN_020AEDF4
+FUN_020AEDF4: ; 0x020AEDF4
+ stmdb sp!, {r4,lr}
+ ldr r2, _020AEE2C ; =0x021CCD4C
+ mov r4, r1
+ str r0, [r2, #0x8]
+ bl FUN_020AEC60
+_020AEE08: ; 0x020AEE08
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AEE10: ; 0x020AEE10
+ ldr r3, _020AEE30 ; =FUN_020AECBC
+ ldr r1, _020AEE34 ; =0x021064C0
+ ldr r2, _020AEE38 ; =FUN_020AECB4
+ ldr r0, _020AEE3C ; =0x021064C4
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AEE2C: .word 0x021CCD4C
+_020AEE30: .word FUN_020AECBC
+_020AEE34: .word 0x021064C0
+_020AEE38: .word FUN_020AECB4
+_020AEE3C: .word 0x021064C4
+
+ arm_func_start FUN_020AEE40
+FUN_020AEE40: ; 0x020AEE40
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020AEEB4 ; =0x021CCD58
+ mov r9, r0
+ mov r0, r5
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl FUN_020AF2F4
+_020AEE64: ; 0x020AEE64
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+_020AEE74: ; 0x020AEE74
+ mov r0, r5
+ bl FUN_020AEF78
+ mov r4, r0
+ str r9, [r4, #0x0]
+ str r7, [r4, #0x4]
+ str r8, [r4, #0x8]
+ mov r0, r5
+ str r6, [r4, #0xc]
+ bl FUN_020AEF98
+ ldr r2, [r5, #0x10]
+ ldr r1, [r4, #0xc]
+ mov r0, #0x1
+ add r1, r2, r1
+ str r1, [r5, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020AEEB4: .word 0x021CCD58
+
+ arm_func_start FUN_020AEEB8
+FUN_020AEEB8: ; 0x020AEEB8
+ stmdb sp!, {r4-r6,lr}
+ ldr r6, _020AEF18 ; =0x021CCD58
+ mov r0, r6
+ bl FUN_020AEF88
+ mov r5, r0
+ mov r0, r6
+ bl FUN_020AEF3C
+_020AEED4: ; 0x020AEED4
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020AEEDC: ; 0x020AEEDC
+ add r4, r6, #0x10
+_020AEEE0:
+ mov r0, r5
+ bl FUN_020AEFF0
+ ldr r2, [r4, #0x0]
+ ldr r1, [r5, #0xc]
+ mov r0, r6
+ sub r1, r2, r1
+ str r1, [r4, #0x0]
+ bl FUN_020AEF88
+ mov r5, r0
+ mov r0, r6
+ bl FUN_020AEF3C
+_020AEF0C: ; 0x020AEF0C
+ cmp r0, #0x0
+ bne _020AEEE0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AEF18: .word 0x021CCD58
+
+ arm_func_start FUN_020AEF1C
+FUN_020AEF1C: ; 0x020AEF1C
+ ldr r2, _020AEF34 ; =0x021CCD58
+ ldr ip, _020AEF38 ; =FUN_020AEFD4
+ str r0, [r2, #0x0]
+ mov r0, r2
+ str r1, [r2, #0x4]
+ bx r12
+ .balign 4
+_020AEF34: .word 0x021CCD58
+_020AEF38: .word FUN_020AEFD4
+
+ arm_func_start FUN_020AEF3C
+FUN_020AEF3C:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020AF2E0
+_020AEF48: ; 0x020AEF48
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020AEF54: ; 0x020AEF54
+ ldrh r1, [r4, #0x8]
+ mov r0, r4
+ bl FUN_020AF30C
+ strh r0, [r4, #0x8]
+ ldrh r1, [r4, #0xc]
+ mov r0, #0x1
+ sub r1, r1, #0x1
+ strh r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AEF78
+FUN_020AEF78: ; 0x020AEF78
+ ldrh r1, [r0, #0xa]
+ ldr r0, [r0, #0x0]
+ add r0, r0, r1, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020AEF88
+FUN_020AEF88: ; 0x020AEF88
+ ldrh r1, [r0, #0x8]
+ ldr r0, [r0, #0x0]
+ add r0, r0, r1, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020AEF98
+FUN_020AEF98: ; 0x020AEF98
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020AF2F4
+_020AEFA4: ; 0x020AEFA4
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020AEFB0: ; 0x020AEFB0
+ ldrh r1, [r4, #0xa]
+ mov r0, r4
+ bl FUN_020AF30C
+ strh r0, [r4, #0xa]
+ ldrh r1, [r4, #0xc]
+ mov r0, #0x1
+ add r1, r1, #0x1
+ strh r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AEFD4
+FUN_020AEFD4: ; 0x020AEFD4
+ mov r2, #0x0
+ strh r2, [r0, #0xa]
+ ldrh r1, [r0, #0xa]
+ strh r1, [r0, #0x8]
+ strh r2, [r0, #0xc]
+ str r2, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020AEFF0
+FUN_020AEFF0: ; 0x020AEFF0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r3, [r5, #0x0]
+ ldr r2, _020AF02C ; =0x020FF7D4
+ ldr r0, [r5, #0x4]
+ ldr r1, [r5, #0xc]
+ ldr r4, [r2, r3, lsl #0x2]
+ bl DC_FlushRange
+ ldr r0, [r5, #0x4]
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0xc]
+ blx r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AF02C: .word 0x020FF7D4
diff --git a/arm9/asm/unk_020AF030.s b/arm9/asm/unk_020AF030.s
new file mode 100644
index 00000000..33faec27
--- /dev/null
+++ b/arm9/asm/unk_020AF030.s
@@ -0,0 +1,26835 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start GXS_LoadOBJ_2
+GXS_LoadOBJ_2:
+ ldr ip, _020AF038 ; =GXS_LoadOBJ
+ bx r12
+ .balign 4
+_020AF038: .word GXS_LoadOBJ
+
+ arm_func_start GXS_LoadOAM_2
+GXS_LoadOAM_2: ; 0x020AF03C
+ ldr ip, _020AF044 ; =GXS_LoadOAM
+ bx r12
+ .balign 4
+_020AF044: .word GXS_LoadOAM
+
+ arm_func_start FUN_020AF048
+FUN_020AF048: ; 0x020AF048
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GXS_BeginLoadBGExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GXS_LoadBGExtPltt
+ bl GXS_EndLoadBGExtPltt
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AF074
+FUN_020AF074: ; 0x020AF074
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start GXS_LoadBGPltt_2
+GXS_LoadBGPltt_2: ; 0x020AF0A0
+ ldr ip, _020AF0A8 ; =GXS_LoadBGPltt
+ bx r12
+ .balign 4
+_020AF0A8: .word GXS_LoadBGPltt
+
+ arm_func_start GXS_LoadOBJPltt_2
+GXS_LoadOBJPltt_2: ; 0x020AF0AC
+ ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt
+ bx r12
+ .balign 4
+_020AF0B4: .word GXS_LoadOBJPltt
+
+ arm_func_start GXS_LoadBG3Scr_3
+GXS_LoadBG3Scr_3: ; 0x020AF0B8
+ ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF0C0: .word GXS_LoadBG3Scr
+
+ arm_func_start GXS_LoadBG2Scr_3
+GXS_LoadBG2Scr_3: ; 0x020AF0C4
+ ldr ip, _020AF0CC ; =GXS_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF0CC: .word GXS_LoadBG2Scr
+
+ arm_func_start GXS_LoadBG3Scr_2
+GXS_LoadBG3Scr_2: ; 0x020AF0D0
+ ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF0D8: .word GXS_LoadBG3Scr
+
+ arm_func_start GXS_LoadBG2Scr_2
+GXS_LoadBG2Scr_2: ; 0x020AF0DC
+ ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF0E4: .word GXS_LoadBG2Scr
+
+ arm_func_start GXS_LoadBG1Scr_2
+GXS_LoadBG1Scr_2: ; 0x020AF0E8
+ ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr
+ bx r12
+ .balign 4
+_020AF0F0: .word GXS_LoadBG1Scr
+
+ arm_func_start GXS_LoadBG0Scr_2
+GXS_LoadBG0Scr_2: ; 0x020AF0F4
+ ldr ip, _020AF0FC ; =GXS_LoadBG0Scr
+ bx r12
+ .balign 4
+_020AF0FC: .word GXS_LoadBG0Scr
+
+ arm_func_start GXS_LoadBG3Char_2
+GXS_LoadBG3Char_2: ; 0x020AF100
+ ldr ip, _020AF108 ; =GXS_LoadBG3Char
+ bx r12
+ .balign 4
+_020AF108: .word GXS_LoadBG3Char
+
+ arm_func_start GXS_LoadBG2Char_2
+GXS_LoadBG2Char_2: ; 0x020AF10C
+ ldr ip, _020AF114 ; =GXS_LoadBG2Char
+ bx r12
+ .balign 4
+_020AF114: .word GXS_LoadBG2Char
+
+ arm_func_start GXS_LoadBG1Char_2
+GXS_LoadBG1Char_2: ; 0x020AF118
+ ldr ip, _020AF120 ; =GXS_LoadBG1Char
+ bx r12
+ .balign 4
+_020AF120: .word GXS_LoadBG1Char
+
+ arm_func_start GXS_LoadBG0Char_2
+GXS_LoadBG0Char_2: ; 0x020AF124
+ ldr ip, _020AF12C ; =GXS_LoadBG0Char
+ bx r12
+ .balign 4
+_020AF12C: .word GXS_LoadBG0Char
+
+ arm_func_start GX_LoadOBJ_2
+GX_LoadOBJ_2: ; 0x020AF130
+ ldr ip, _020AF138 ; =GX_LoadOBJ
+ bx r12
+ .balign 4
+_020AF138: .word GX_LoadOBJ
+
+ arm_func_start GX_LoadOAM_2
+GX_LoadOAM_2: ; 0x020AF13C
+ ldr ip, _020AF144 ; =GX_LoadOAM
+ bx r12
+ .balign 4
+_020AF144: .word GX_LoadOAM
+
+ arm_func_start FUN_020AF148
+FUN_020AF148: ; 0x020AF148
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadBGExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadBGExtPltt
+ bl GX_EndLoadBGExtPltt
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AF174
+FUN_020AF174: ; 0x020AF174
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start GX_LoadBGPltt_2
+GX_LoadBGPltt_2: ; 0x020AF1A0
+ ldr ip, _020AF1A8 ; =GX_LoadBGPltt
+ bx r12
+ .balign 4
+_020AF1A8: .word GX_LoadBGPltt
+
+ arm_func_start GX_LoadOBJPltt_2
+GX_LoadOBJPltt_2: ; 0x020AF1AC
+ ldr ip, _020AF1B4 ; =GX_LoadOBJPltt
+ bx r12
+ .balign 4
+_020AF1B4: .word GX_LoadOBJPltt
+
+ arm_func_start GX_LoadBG3Scr_3
+GX_LoadBG3Scr_3: ; 0x020AF1B8
+ ldr ip, _020AF1C0 ; =GX_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF1C0: .word GX_LoadBG3Scr
+
+ arm_func_start GX_LoadBG2Scr_3
+GX_LoadBG2Scr_3: ; 0x020AF1C4
+ ldr ip, _020AF1CC ; =GX_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF1CC: .word GX_LoadBG2Scr
+
+ arm_func_start GX_LoadBG3Scr_2
+GX_LoadBG3Scr_2: ; 0x020AF1D0
+ ldr ip, _020AF1D8 ; =GX_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF1D8: .word GX_LoadBG3Scr
+
+ arm_func_start GX_LoadBG2Scr_2
+GX_LoadBG2Scr_2: ; 0x020AF1DC
+ ldr ip, _020AF1E4 ; =GX_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF1E4: .word GX_LoadBG2Scr
+
+ arm_func_start GX_LoadBG1Scr_2
+GX_LoadBG1Scr_2: ; 0x020AF1E8
+ ldr ip, _020AF1F0 ; =GX_LoadBG1Scr
+ bx r12
+ .balign 4
+_020AF1F0: .word GX_LoadBG1Scr
+
+ arm_func_start GX_LoadBG0Scr_2
+GX_LoadBG0Scr_2: ; 0x020AF1F4
+ ldr ip, _020AF1FC ; =GX_LoadBG0Scr
+ bx r12
+ .balign 4
+_020AF1FC: .word GX_LoadBG0Scr
+
+ arm_func_start GX_LoadBG3Char_2
+GX_LoadBG3Char_2: ; 0x020AF200
+ ldr ip, _020AF208 ; =GX_LoadBG3Char
+ bx r12
+ .balign 4
+_020AF208: .word GX_LoadBG3Char
+
+ arm_func_start GX_LoadBG2Char_2
+GX_LoadBG2Char_2: ; 0x020AF20C
+ ldr ip, _020AF214 ; =GX_LoadBG2Char
+ bx r12
+ .balign 4
+_020AF214: .word GX_LoadBG2Char
+
+ arm_func_start GX_LoadBG1Char_2
+GX_LoadBG1Char_2: ; 0x020AF218
+ ldr ip, _020AF220 ; =GX_LoadBG1Char
+ bx r12
+ .balign 4
+_020AF220: .word GX_LoadBG1Char
+
+ arm_func_start GX_LoadBG0Char_2
+GX_LoadBG0Char_2: ; 0x020AF224
+ ldr ip, _020AF22C ; =GX_LoadBG0Char
+ bx r12
+ .balign 4
+_020AF22C: .word GX_LoadBG0Char
+
+ arm_func_start FUN_020AF230
+FUN_020AF230: ; 0x020AF230
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl GX_BeginLoadClearImage
+ mov r0, r5
+ mov r1, r4
+ bl GX_LoadClearImageDepth
+ bl GX_EndLoadClearImage
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020AF25C
+FUN_020AF25C: ; 0x020AF25C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl GX_BeginLoadClearImage
+ mov r0, r5
+ mov r1, r4
+ bl GX_LoadClearImageColor
+ bl GX_EndLoadClearImage
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020AF288
+FUN_020AF288: ; 0x020AF288
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadTexPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AF2B4
+FUN_020AF2B4: ; 0x020AF2B4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadTex
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AF2E0
+FUN_020AF2E0: ; 0x020AF2E0
+ ldrh r0, [r0, #0xc]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AF2F4
+FUN_020AF2F4: ; 0x020AF2F4
+ ldrh r1, [r0, #0xc]
+ ldr r0, [r0, #0x4]
+ cmp r1, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AF30C
+FUN_020AF30C: ; 0x020AF30C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r0
+ add r0, r1, #0x1
+ ldr r1, [r2, #0x4]
+ bl _u32_div_f
+ mov r0, r1, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AF334
+FUN_020AF334:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ add r3, r2, r3
+ str r2, [sp, #0x0]
+ str r2, [sp, #0x8]
+ str r3, [sp, #0x4]
+ str r3, [sp, #0xc]
+ ldr r3, [r0, #0x0]
+ add r12, sp, #0x0
+ cmp r3, #0x0
+ beq _020AF418
+ mov r6, #0x0
+_020AF364:
+ ldr r5, [r3, #0x0]
+ ldr r4, [r12, #0x4]
+ ldr r2, [r3, #0xc]
+ cmp r5, r4
+ bne _020AF3B8
+ ldr r4, [r3, #0x4]
+ add r4, r5, r4
+ str r4, [sp, #0xc]
+ ldr r4, [r3, #0x8]
+ cmp r4, #0x0
+ strne r2, [r4, #0xc]
+ streq r2, [r0, #0x0]
+ cmp r2, #0x0
+ strne r4, [r2, #0x8]
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ strne r3, [r4, #0x8]
+ ldr r4, [r1, #0x0]
+ str r4, [r3, #0xc]
+ str r6, [r3, #0x8]
+ str r3, [r1, #0x0]
+_020AF3B8:
+ ldr r5, [r3, #0x0]
+ ldr lr, [r3, #0x4]
+ ldr r4, [r12, #0x0]
+ add lr, r5, lr
+ cmp r4, lr
+ bne _020AF40C
+ str r5, [sp, #0x8]
+ ldr r5, [r3, #0x8]
+ ldr r4, [r3, #0xc]
+ cmp r5, #0x0
+ strne r4, [r5, #0xc]
+ streq r4, [r0, #0x0]
+ cmp r4, #0x0
+ strne r5, [r4, #0x8]
+ ldr lr, [r1, #0x0]
+ cmp lr, #0x0
+ strne r3, [lr, #0x8]
+ ldr lr, [r1, #0x0]
+ str lr, [r3, #0xc]
+ str r6, [r3, #0x8]
+ str r3, [r1, #0x0]
+_020AF40C:
+ mov r3, r2
+ cmp r2, #0x0
+ bne _020AF364
+_020AF418:
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ ldrne r2, [r4, #0xc]
+ strne r2, [r1, #0x0]
+ cmp r4, #0x0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020AF438: ; 0x020AF438
+ ldr r2, [sp, #0x8]
+ mov r1, #0x0
+ str r2, [r4, #0x0]
+ ldr r3, [sp, #0xc]
+ ldr r2, [sp, #0x8]
+ sub r2, r3, r2
+ str r2, [r4, #0x4]
+ str r1, [r4, #0x8]
+ str r1, [r4, #0xc]
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ strne r4, [r1, #0x8]
+ ldr r2, [r0, #0x0]
+ mov r1, #0x0
+ str r2, [r4, #0xc]
+ str r1, [r4, #0x8]
+ str r4, [r0, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AF488
+FUN_020AF488:
+ stmdb sp!, {r4-r10,lr}
+ ldr r4, [r0, #0x0]
+ ldr r9, [sp, #0x20]
+ cmp r4, #0x0
+ mov r5, #0x0
+ beq _020AF4EC
+ sub r12, r9, #0x1
+ mvn lr, r12
+_020AF4A8:
+ cmp r9, #0x1
+ ldrls r8, [r4, #0x0]
+ movls r6, r5
+ movls r7, r3
+ bls _020AF4D0
+ ldr r7, [r4, #0x0]
+ add r6, r7, r12
+ and r8, lr, r6
+ sub r6, r8, r7
+ add r7, r3, r6
+_020AF4D0:
+ ldr r10, [r4, #0x4]
+ cmp r10, r7
+ movcs r5, r4
+ bhs _020AF4EC
+ ldr r4, [r4, #0xc]
+ cmp r4, #0x0
+ bne _020AF4A8
+_020AF4EC:
+ cmp r5, #0x0
+ beq _020AF5B8
+ cmp r6, #0x0
+ beq _020AF54C
+ ldr r9, [r1, #0x0]
+ cmp r9, #0x0
+ ldrne r3, [r9, #0xc]
+ strne r3, [r1, #0x0]
+ cmp r9, #0x0
+ beq _020AF5B8
+ ldr r4, [r5, #0x0]
+ mov r3, #0x0
+ str r4, [r9, #0x0]
+ str r6, [r9, #0x4]
+ str r3, [r9, #0x8]
+ str r3, [r9, #0xc]
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ strne r9, [r3, #0x8]
+ ldr r4, [r0, #0x0]
+ mov r3, #0x0
+ str r4, [r9, #0xc]
+ str r3, [r9, #0x8]
+ str r9, [r0, #0x0]
+_020AF54C:
+ ldr r3, [r5, #0x4]
+ sub r3, r3, r7
+ str r3, [r5, #0x4]
+ ldr r3, [r5, #0x0]
+ add r3, r3, r7
+ str r3, [r5, #0x0]
+ ldr r3, [r5, #0x4]
+ cmp r3, #0x0
+ bne _020AF5AC
+ ldr r4, [r5, #0x8]
+ ldr r3, [r5, #0xc]
+ cmp r4, #0x0
+ strne r3, [r4, #0xc]
+ streq r3, [r0, #0x0]
+ cmp r3, #0x0
+ strne r4, [r3, #0x8]
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ strne r5, [r0, #0x8]
+ ldr r3, [r1, #0x0]
+ mov r0, #0x0
+ str r3, [r5, #0xc]
+ str r0, [r5, #0x8]
+ str r5, [r1, #0x0]
+_020AF5AC:
+ str r8, [r2, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r10,pc}
+_020AF5B8:
+ mov r0, #0x0
+ str r0, [r2, #0x0]
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start FUN_020AF5C4
+FUN_020AF5C4:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ bl FUN_020AF488
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AF5E0
+FUN_020AF5E0: ; 0x020AF5E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, [r1, #0x0]
+ cmp lr, #0x0
+ ldrne r12, [lr, #0xc]
+ strne r12, [r1, #0x0]
+ cmp lr, #0x0
+ beq _020AF640
+ str r2, [lr, #0x0]
+ str r3, [lr, #0x4]
+ mov r1, #0x0
+ str r1, [lr, #0x8]
+ str r1, [lr, #0xc]
+ ldr r1, [r0, #0x0]
+ add sp, sp, #0x4
+ cmp r1, #0x0
+ strne lr, [r1, #0x8]
+ ldr r2, [r0, #0x0]
+ mov r1, #0x0
+ str r2, [lr, #0xc]
+ str r1, [lr, #0x8]
+ str lr, [r0, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {pc}
+_020AF640:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020AF64C
+FUN_020AF64C: ; 0x020AF64C
+ stmdb sp!, {r4,lr}
+ subs lr, r1, #0x1
+ mov r2, #0x0
+ beq _020AF684
+ mov r4, r0
+_020AF660:
+ add r12, r2, #0x1
+ add r2, r0, r2, lsl #0x4
+ add r3, r0, r12, lsl #0x4
+ str r3, [r2, #0xc]
+ str r4, [r3, #0x8]
+ mov r2, r12
+ cmp r12, lr
+ add r4, r4, #0x10
+ blo _020AF660
+_020AF684:
+ mov r2, #0x0
+ str r2, [r0, #0x8]
+ add r1, r0, r1, lsl #0x4
+ str r2, [r1, #-0x4]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AF698
+FUN_020AF698: ; 0x020AF698
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020AF6A4
+FUN_020AF6A4: ; 0x020AF6A4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x30
+ ldr r6, _020AF884 ; =0x020FF864
+ add r5, sp, #0x0
+ ldmia r6!, {r0-r3}
+ mov r12, r5
+ stmia r5!, {r0-r3}
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldr r4, _020AF888 ; =0x021CCD6C
+ ldmia r6, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr lr, [r4, #0x10]
+ ldr r1, [r4, #0xc]
+ add r0, lr, lr, lsr #0x1
+ mov r4, lr, lsr #0x1
+ sub r0, r1, r0
+ mov r3, #0x0
+_020AF6EC:
+ cmp r3, #0x0
+ beq _020AF6FC
+ cmp r3, #0x2
+ bne _020AF734
+_020AF6FC:
+ ldr r2, [r12, #0x0]
+ cmp r2, #0x0
+ beq _020AF734
+ cmp lr, #0x0
+ beq _020AF734
+ ldr r1, [r12, #0x8]
+ cmp r2, lr
+ movhi r2, lr
+ add r1, r1, r2
+ str r1, [r12, #0x8]
+ ldr r1, [r12, #0x0]
+ sub lr, lr, r2
+ sub r1, r1, r2
+ str r1, [r12, #0x0]
+_020AF734:
+ add r3, r3, #0x1
+ cmp r3, #0x4
+ add r12, r12, #0xc
+ blo _020AF6EC
+ ldr r1, [sp, #0xc]
+ add r5, sp, #0x0
+ sub r1, r1, r4
+ str r1, [sp, #0xc]
+ mov r3, #0x0
+_020AF758:
+ ldr r2, [r5, #0x0]
+ cmp r2, #0x0
+ beq _020AF790
+ cmp r0, #0x0
+ beq _020AF790
+ ldr r1, [r5, #0x4]
+ cmp r2, r0
+ movhi r2, r0
+ add r1, r1, r2
+ str r1, [r5, #0x4]
+ ldr r1, [r5, #0x0]
+ sub r0, r0, r2
+ sub r1, r1, r2
+ str r1, [r5, #0x0]
+_020AF790:
+ add r3, r3, #0x1
+ cmp r3, #0x4
+ add r5, r5, #0xc
+ blo _020AF758
+ ldr r0, _020AF888 ; =0x021CCD6C
+ bl FUN_020AF698
+ ldr r0, _020AF88C ; =0x021CCD70
+ bl FUN_020AF698
+ ldr r0, _020AF888 ; =0x021CCD6C
+ ldr r1, [r0, #0x18]
+ ldr r0, [r0, #0x14]
+ mov r1, r1, lsr #0x4
+ bl FUN_020AF64C
+ ldr r3, [sp, #0x8]
+ ldr r1, _020AF888 ; =0x021CCD6C
+ cmp r3, #0x0
+ str r0, [r1, #0x8]
+ beq _020AF7E8
+ ldr r0, _020AF88C ; =0x021CCD70
+ ldr r1, _020AF890 ; =0x021CCD74
+ mov r2, #0x0
+ bl FUN_020AF5E0
+_020AF7E8:
+ ldr r3, [sp, #0x4]
+ ldr r2, [sp, #0x8]
+ cmp r3, #0x0
+ beq _020AF804
+ ldr r0, _020AF888 ; =0x021CCD6C
+ ldr r1, _020AF890 ; =0x021CCD74
+ bl FUN_020AF5E0
+_020AF804:
+ ldr r3, [sp, #0x20]
+ cmp r3, #0x0
+ beq _020AF820
+ ldr r0, _020AF88C ; =0x021CCD70
+ ldr r1, _020AF890 ; =0x021CCD74
+ mov r2, #0x40000
+ bl FUN_020AF5E0
+_020AF820:
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0x20]
+ cmp r3, #0x0
+ add r2, r0, #0x40000
+ beq _020AF840
+ ldr r0, _020AF888 ; =0x021CCD6C
+ ldr r1, _020AF890 ; =0x021CCD74
+ bl FUN_020AF5E0
+_020AF840:
+ ldr r3, [sp, #0x28]
+ cmp r3, #0x0
+ beq _020AF85C
+ ldr r0, _020AF888 ; =0x021CCD6C
+ ldr r1, _020AF890 ; =0x021CCD74
+ mov r2, #0x60000
+ bl FUN_020AF5E0
+_020AF85C:
+ ldr r3, [sp, #0x10]
+ cmp r3, #0x0
+ addeq sp, sp, #0x30
+ ldmeqia sp!, {r4-r6,pc}
+_020AF86C: ; 0x020AF86C
+ ldr r0, _020AF888 ; =0x021CCD6C
+ ldr r1, _020AF890 ; =0x021CCD74
+ add r2, r4, #0x20000
+ bl FUN_020AF5E0
+ add sp, sp, #0x30
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AF884: .word 0x020FF864
+_020AF888: .word 0x021CCD6C
+_020AF88C: .word 0x021CCD70
+_020AF890: .word 0x021CCD74
+
+ arm_func_start FUN_020AF894
+FUN_020AF894: ; 0x020AF894
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020AF908 ; =0x7FFF0000
+ ldr r1, _020AF90C ; =0x0000FFFF
+ and r2, r0, r2
+ and r3, r0, r1
+ mov r1, r2, lsr #0x10
+ and r0, r0, #0x80000000
+ mov r2, r3, lsl #0x3
+ movs r3, r1, lsl #0x4
+ mov r0, r0, lsr #0x1f
+ beq _020AF8FC
+ cmp r0, #0x0
+ beq _020AF8DC
+ ldr r0, _020AF910 ; =0x021CCD70
+ ldr r1, _020AF914 ; =0x021CCD74
+ bl FUN_020AF334
+ b _020AF8E8
+_020AF8DC:
+ ldr r0, _020AF918 ; =0x021CCD6C
+ ldr r1, _020AF914 ; =0x021CCD74
+ bl FUN_020AF334
+_020AF8E8:
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x4
+ moveq r0, #0x1
+ ldmia sp!, {pc}
+_020AF8FC:
+ mov r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AF908: .word 0x7FFF0000
+_020AF90C: .word 0x0000FFFF
+_020AF910: .word 0x021CCD70
+_020AF914: .word 0x021CCD74
+_020AF918: .word 0x021CCD6C
+
+ arm_func_start FUN_020AF91C
+FUN_020AF91C: ; 0x020AF91C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ moveq r5, #0x10
+ addne r0, r0, #0xf
+ bicne r5, r0, #0xf
+ ldr r0, _020AF9B0 ; =0x0007FFF0
+ mov r4, r1
+ cmp r5, r0
+ addcs sp, sp, #0x4
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r5,pc}
+_020AF94C: ; 0x020AF94C
+ cmp r4, #0x0
+ beq _020AF96C
+ ldr r0, _020AF9B4 ; =0x021CCD70
+ ldr r1, _020AF9B8 ; =0x021CCD74
+ add r2, sp, #0x0
+ mov r3, r5
+ bl FUN_020AF5C4
+ b _020AF980
+_020AF96C:
+ ldr r0, _020AF9BC ; =0x021CCD6C
+ ldr r1, _020AF9B8 ; =0x021CCD74
+ add r2, sp, #0x0
+ mov r3, r5
+ bl FUN_020AF5C4
+_020AF980:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020AF990: ; 0x020AF990
+ ldr r1, [sp, #0x0]
+ ldr r0, _020AF9C0 ; =0x0000FFFF
+ mov r2, r5, lsr #0x4
+ and r0, r0, r1, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ orr r0, r0, r4, lsl #0x1f
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AF9B0: .word 0x0007FFF0
+_020AF9B4: .word 0x021CCD70
+_020AF9B8: .word 0x021CCD74
+_020AF9BC: .word 0x021CCD6C
+_020AF9C0: .word 0x0000FFFF
+
+ arm_func_start FUN_020AF9C4
+FUN_020AF9C4: ; 0x020AF9C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020AFA14 ; =0x021CCD6C
+ str r0, [r12, #0xc]
+ str r1, [r12, #0x10]
+ str r2, [r12, #0x14]
+ str r3, [r12, #0x18]
+ bl FUN_020AF6A4
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r3, _020AFA18 ; =FUN_020AF91C
+ ldr r1, _020AFA1C ; =0x021064B8
+ ldr r2, _020AFA20 ; =FUN_020AF894
+ ldr r0, _020AFA24 ; =0x021064BC
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFA14: .word 0x021CCD6C
+_020AFA18: .word FUN_020AF91C
+_020AFA1C: .word 0x021064B8
+_020AFA20: .word FUN_020AF894
+_020AFA24: .word 0x021064BC
+
+ arm_func_start FUN_020AFA28
+FUN_020AFA28: ; 0x020AFA28
+ mov r0, r0, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020AFA30
+FUN_020AFA30:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020AFA78 ; =0x021CCD88
+ ldr r1, [r0, #0x10]
+ ldr r0, [r0, #0xc]
+ mov r1, r1, lsr #0x4
+ bl FUN_020AF64C
+ ldr r1, _020AFA78 ; =0x021CCD88
+ str r0, [r1, #0x4]
+ mov r0, r1
+ bl FUN_020AF698
+ ldr r0, _020AFA78 ; =0x021CCD88
+ ldr r1, _020AFA7C ; =0x021CCD8C
+ ldr r3, [r0, #0x8]
+ mov r2, #0x0
+ bl FUN_020AF5E0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFA78: .word 0x021CCD88
+_020AFA7C: .word 0x021CCD8C
+
+ arm_func_start FUN_020AFA80
+FUN_020AFA80: ; 0x020AFA80
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, #0x10000
+ rsb r2, r1, #0x0
+ ldr r1, _020AFAC8 ; =0x0000FFFF
+ and r2, r0, r2
+ and r12, r0, r1
+ mov r3, r2, lsr #0x10
+ ldr r0, _020AFACC ; =0x021CCD88
+ ldr r1, _020AFAD0 ; =0x021CCD8C
+ mov r2, r12, lsl #0x3
+ mov r3, r3, lsl #0x3
+ bl FUN_020AF334
+_020AFAB4: ; 0x020AFAB4
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFAC8: .word 0x0000FFFF
+_020AFACC: .word 0x021CCD88
+_020AFAD0: .word 0x021CCD8C
+
+ arm_func_start FUN_020AFAD4
+FUN_020AFAD4: ; 0x020AFAD4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ cmp r0, #0x0
+ moveq r4, #0x8
+ addne r0, r0, #0x7
+ bicne r4, r0, #0x7
+ ldr r0, _020AFB98 ; =0x0007FFF8
+ cmp r4, r0
+ addcs sp, sp, #0x8
+ movcs r0, #0x0
+ ldmcsia sp!, {r4,pc}
+_020AFB00: ; 0x020AFB00
+ cmp r1, #0x0
+ beq _020AFB50
+ mov r12, #0x8
+ ldr r0, _020AFB9C ; =0x021CCD88
+ ldr r1, _020AFBA0 ; =0x021CCD8C
+ add r2, sp, #0x4
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl FUN_020AF488
+ ldr r2, [sp, #0x4]
+ add r1, r2, r4
+ cmp r1, #0x10000
+ bls _020AFB6C
+ ldr r0, _020AFB9C ; =0x021CCD88
+ ldr r1, _020AFBA0 ; =0x021CCD8C
+ mov r3, r4
+ bl FUN_020AF334
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020AFB50:
+ ldr r0, _020AFB9C ; =0x021CCD88
+ mov r12, #0x10
+ ldr r1, _020AFBA0 ; =0x021CCD8C
+ add r2, sp, #0x4
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl FUN_020AF488
+_020AFB6C:
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AFB7C: ; 0x020AFB7C
+ ldr r1, [sp, #0x4]
+ ldr r0, _020AFBA4 ; =0x0000FFFF
+ mov r2, r4, lsr #0x3
+ and r0, r0, r1, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AFB98: .word 0x0007FFF8
+_020AFB9C: .word 0x021CCD88
+_020AFBA0: .word 0x021CCD8C
+_020AFBA4: .word 0x0000FFFF
+
+ arm_func_start FUN_020AFBA8
+FUN_020AFBA8: ; 0x020AFBA8
+ stmdb sp!, {r4,lr}
+ ldr ip, _020AFBE8 ; =0x021CCD88
+ mov r4, r3
+ str r0, [r12, #0x8]
+ str r1, [r12, #0xc]
+ str r2, [r12, #0x10]
+ bl FUN_020AFA30
+_020AFBC4: ; 0x020AFBC4
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AFBCC: ; 0x020AFBCC
+ ldr r3, _020AFBEC ; =FUN_020AFAD4
+ ldr r1, _020AFBF0 ; =0x021064C0
+ ldr r2, _020AFBF4 ; =FUN_020AFA80
+ ldr r0, _020AFBF8 ; =0x021064C4
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AFBE8: .word 0x021CCD88
+_020AFBEC: .word FUN_020AFAD4
+_020AFBF0: .word 0x021064C0
+_020AFBF4: .word FUN_020AFA80
+_020AFBF8: .word 0x021064C4
+
+ arm_func_start FUN_020AFBFC
+FUN_020AFBFC: ; 0x020AFBFC
+ mov r0, r0, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020AFC04
+FUN_020AFC04: ; 0x020AFC04
+ ldrh r2, [r0, #0x0]
+ cmp r2, r1
+ ldrhi r0, [r0, #0x4]
+ addhi r0, r0, r1, lsl #0x4
+ movls r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AFC1C
+FUN_020AFC1C: ; 0x020AFC1C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x4]
+ mov r6, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r0
+ str r1, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ add r1, r1, r0
+ str r1, [r0, #0xc]
+ ldrh r1, [r0, #0x0]
+ ldr r4, [r0, #0x4]
+ ldr lr, [r0, #0x8]
+ cmp r1, #0x0
+ ldr r12, [r0, #0xc]
+ bls _020AFCCC
+ mov r1, r6
+_020AFC68:
+ add r2, r4, r6, lsl #0x4
+ ldr r5, [r2, #0xc]
+ mov r3, r6, lsl #0x4
+ add r5, lr, r5
+ str r5, [r2, #0xc]
+ ldrh r7, [r4, r3]
+ mov r5, r1
+ cmp r7, #0x0
+ bls _020AFCB4
+_020AFC8C:
+ ldr r9, [r2, #0xc]
+ add r7, r5, #0x1
+ ldr r8, [r9, r5, lsl #0x3]
+ mov r7, r7, lsl #0x10
+ add r8, r12, r8
+ str r8, [r9, r5, lsl #0x3]
+ ldrh r8, [r4, r3]
+ mov r5, r7, lsr #0x10
+ cmp r5, r8
+ blo _020AFC8C
+_020AFCB4:
+ add r2, r6, #0x1
+ mov r2, r2, lsl #0x10
+ ldrh r3, [r0, #0x0]
+ mov r6, r2, lsr #0x10
+ cmp r6, r3
+ blo _020AFC68
+_020AFCCC:
+ ldr r1, [r0, #0x14]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,pc}
+_020AFCDC: ; 0x020AFCDC
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ ldr r1, [r0, #0x14]
+ mov r12, #0x0
+ add r2, r1, #0x8
+ ldr r0, [r2, #0x4]
+ add r0, r0, r2
+ str r0, [r2, #0x4]
+ ldrh r0, [r1, #0x8]
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+_020AFD0C: ; 0x020AFD0C
+ mov r0, r12
+ mov r6, r12
+_020AFD14:
+ ldr r5, [r2, #0x4]
+ mov r3, r6
+ add r1, r5, r0
+ ldr r4, [r1, #0x4]
+ add r4, r4, r2
+ str r4, [r1, #0x4]
+ ldr r4, [r1, #0x8]
+ add r4, r4, r2
+ str r4, [r1, #0x8]
+ ldrh r4, [r5, r0]
+ cmp r4, #0x0
+ bls _020AFD6C
+ mov r7, r6
+_020AFD48:
+ ldr r5, [r1, #0x8]
+ add r3, r3, #0x1
+ ldr r4, [r5, r7]
+ add r4, r4, r2
+ str r4, [r5, r7]
+ ldrh r4, [r1, #0x0]
+ add r7, r7, #0x4
+ cmp r3, r4
+ blo _020AFD48
+_020AFD6C:
+ ldrh r1, [r2, #0x0]
+ add r12, r12, #0x1
+ add r0, r0, #0xc
+ cmp r12, r1
+ blo _020AFD14
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start thunk_FUN_020afda0
+thunk_FUN_020afda0: ; 0x020AFD88
+ ldr ip, _020AFD90 ; =FUN_020AFDA0
+ bx r12
+ .balign 4
+_020AFD90: .word FUN_020AFDA0
+
+ arm_func_start thunk_FUN_020afda0_2
+thunk_FUN_020afda0_2: ; 0x020AFD94
+ ldr ip, _020AFD9C ; =FUN_020AFDA0
+ bx r12
+ .balign 4
+_020AFD9C: .word FUN_020AFDA0
+
+ arm_func_start FUN_020AFDA0
+FUN_020AFDA0: ; 0x020AFDA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020AFDE4 ; =0x41424E4B
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020AFDC8: ; 0x020AFDC8
+ add r0, r4, #0x8
+ bl FUN_020AFC1C
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AFDE4: .word 0x41424E4B
+
+ arm_func_start FUN_020AFDE8
+FUN_020AFDE8: ; 0x020AFDE8
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r1, [r5, #0x4]
+ add r1, r1, r5
+ str r1, [r5, #0x4]
+ bl FUN_020AFF10
+ ldrh r1, [r5, #0x0]
+ mov r4, r0
+ mov r6, #0x0
+ cmp r1, #0x0
+ bls _020AFE44
+_020AFE14:
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020AFE8C
+ ldr r2, [r0, #0x4]
+ add r1, r6, #0x1
+ add r2, r2, r4
+ str r2, [r0, #0x4]
+ mov r0, r1, lsl #0x10
+ ldrh r1, [r5, #0x0]
+ mov r6, r0, lsr #0x10
+ cmp r6, r1
+ blo _020AFE14
+_020AFE44:
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ beq _020AFE6C
+ add r0, r0, r5
+ str r0, [r5, #0xc]
+ ldr r1, [r5, #0xc]
+ ldr r0, [r1, #0x4]
+ add r0, r0, r1
+ str r0, [r1, #0x4]
+ str r1, [r5, #0xc]
+_020AFE6C:
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020AFE78: ; 0x020AFE78
+ add r0, r0, r5
+ str r0, [r5, #0x14]
+ ldr r0, [r5, #0x14]
+ bl FUN_020AFF00
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020AFE8C
+FUN_020AFE8C: ; 0x020AFE8C
+ ldrh r2, [r0, #0x0]
+ cmp r1, r2
+ movcs r0, #0x0
+ bxcs lr
+ ldrh r2, [r0, #0x2]
+ ands r2, r2, #0x1
+ ldrne r0, [r0, #0x4]
+ addne r0, r0, r1, lsl #0x4
+ ldreq r0, [r0, #0x4]
+ addeq r0, r0, r1, lsl #0x3
+ bx lr
+
+ arm_func_start FUN_020AFEB8
+FUN_020AFEB8: ; 0x020AFEB8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020AFEFC ; =0x4345424B
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020AFEE0: ; 0x020AFEE0
+ add r0, r4, #0x8
+ bl FUN_020AFDE8
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AFEFC: .word 0x4345424B
+
+ arm_func_start FUN_020AFF00
+FUN_020AFF00: ; 0x020AFF00
+ ldr ip, _020AFF0C ; =FUN_020B01B0
+ add r0, r0, #0x8
+ bx r12
+ .balign 4
+_020AFF0C: .word FUN_020B01B0
+
+ arm_func_start FUN_020AFF10
+FUN_020AFF10: ; 0x020AFF10
+ ldrh r1, [r0, #0x2]
+ ands r1, r1, #0x1
+ ldrneh r1, [r0, #0x0]
+ ldrne r0, [r0, #0x4]
+ addne r0, r0, r1, lsl #0x4
+ ldreqh r1, [r0, #0x0]
+ ldreq r0, [r0, #0x4]
+ addeq r0, r0, r1, lsl #0x3
+ bx lr
+
+ arm_func_start FUN_020AFF34
+FUN_020AFF34: ; 0x020AFF34
+ ldrh r2, [r0, #0x0]
+ cmp r1, r2
+ ldrcc r0, [r0, #0x4]
+ addcc r0, r0, r1, lsl #0x3
+ movcs r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020AFF4C
+FUN_020AFF4C: ; 0x020AFF4C
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0x4]
+ mov r4, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r0
+ str r1, [r0, #0x8]
+ ldrh r1, [r0, #0x0]
+ ldr lr, [r0, #0x4]
+ cmp r1, #0x0
+ bls _020AFFA8
+_020AFF7C:
+ add r3, lr, r4, lsl #0x3
+ ldr r12, [r0, #0x8]
+ ldr r2, [r3, #0x4]
+ add r1, r4, #0x1
+ add r2, r12, r2
+ str r2, [r3, #0x4]
+ mov r1, r1, lsl #0x10
+ ldrh r2, [r0, #0x0]
+ mov r4, r1, lsr #0x10
+ cmp r4, r2
+ blo _020AFF7C
+_020AFFA8:
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+_020AFFB4: ; 0x020AFFB4
+ add r1, r1, r0
+ str r1, [r0, #0x10]
+ ldr r0, [r0, #0x10]
+ bl FUN_020AFFC8
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020AFFC8
+FUN_020AFFC8: ; 0x020AFFC8
+ ldr ip, _020AFFD4 ; =FUN_020B01B0
+ add r0, r0, #0x8
+ bx r12
+ .balign 4
+_020AFFD4: .word FUN_020B01B0
+
+ arm_func_start FUN_020AFFD8
+FUN_020AFFD8: ; 0x020AFFD8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B001C ; =0x4D43424B
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020B0000: ; 0x020B0000
+ add r0, r4, #0x8
+ bl FUN_020AFF4C
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B001C: .word 0x4D43424B
+
+ arm_func_start FUN_020B0020
+FUN_020B0020: ; 0x020B0020
+ ldr r1, [r0, #0x14]
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ bx lr
+
+ arm_func_start FUN_020B0030
+FUN_020B0030: ; 0x020B0030
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B0074 ; =0x43484152
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020B0058: ; 0x020B0058
+ add r0, r4, #0x8
+ bl FUN_020B0020
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0074: .word 0x43484152
+
+ arm_func_start FUN_020B0078
+FUN_020B0078: ; 0x020B0078
+ ldr r1, [r0, #0x14]
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ bx lr
+
+ arm_func_start FUN_020B0088
+FUN_020B0088: ; 0x020B0088
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B00CC ; =0x43484152
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020B00B0: ; 0x020B00B0
+ add r0, r4, #0x8
+ bl FUN_020B0078
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B00CC: .word 0x43484152
+
+ arm_func_start FUN_020B00D0
+FUN_020B00D0: ; 0x020B00D0
+ ldr r1, [r0, #0xc]
+ add r1, r1, r0
+ str r1, [r0, #0xc]
+ bx lr
+
+ arm_func_start FUN_020B00E0
+FUN_020B00E0: ; 0x020B00E0
+ ldr r1, [r0, #0x4]
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_020B00F0
+FUN_020B00F0: ; 0x020B00F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B0134 ; =0x50434D50
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020B0118: ; 0x020B0118
+ add r0, r4, #0x8
+ bl FUN_020B00E0
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0134: .word 0x50434D50
+
+ arm_func_start FUN_020B0138
+FUN_020B0138: ; 0x020B0138
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B017C ; =0x504C5454
+ bl FUN_020B01F8
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+_020B0160: ; 0x020B0160
+ add r0, r4, #0x8
+ bl FUN_020B00D0
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B017C: .word 0x504C5454
+
+ arm_func_start FUN_020B0180
+FUN_020B0180: ; 0x020B0180
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ ldr r1, _020B01AC ; =0x5343524E
+ bl FUN_020B01F8
+_020B0190: ; 0x020B0190
+ cmp r0, #0x0
+ addne r0, r0, #0x8
+ strne r0, [r4, #0x0]
+ movne r0, #0x1
+ moveq r0, #0x0
+ streq r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B01AC: .word 0x5343524E
+
+ arm_func_start FUN_020B01B0
+FUN_020B01B0: ; 0x020B01B0
+ ldr r1, [r0, #0x4]
+ mov r12, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ bxls lr
+_020B01CC:
+ ldr r3, [r0, #0x4]
+ add r1, r12, #0x1
+ ldr r2, [r3, r12, lsl #0x2]
+ mov r1, r1, lsl #0x10
+ add r2, r0, r2
+ str r2, [r3, r12, lsl #0x2]
+ ldrh r2, [r0, #0x0]
+ mov r12, r1, lsr #0x10
+ cmp r12, r2
+ blo _020B01CC
+ bx lr
+
+ arm_func_start FUN_020B01F8
+FUN_020B01F8:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r2, [r0, #0xc]
+ ldrh r12, [r0, #0xe]
+ mov lr, #0x0
+ add r0, r0, r2
+ cmp r12, #0x0
+ bls _020B0244
+_020B0218:
+ ldr r2, [r0, #0x0]
+ cmp r2, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ add r2, lr, #0x1
+ mov r2, r2, lsl #0x10
+ ldr r3, [r0, #0x4]
+ mov lr, r2, lsr #0x10
+ cmp lr, r12
+ add r0, r0, r3
+ blo _020B0218
+_020B0244:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020B0250
+FUN_020B0250: ; 0x020B0250
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020B02C0 ; =0x04000470
+ mov r0, r0, lsl #0xc
+ str r0, [r5, #0x0]
+ mov r4, r1, lsl #0xc
+ ldr r12, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x1c]
+ str r4, [r5, #0x0]
+ mov r4, r2, lsl #0xc
+ ldr r2, [sp, #0x18]
+ ldr lr, _020B02C4 ; =0x0400046C
+ str r4, [r5, #0x0]
+ mov r4, r3, lsl #0xc
+ ldr r3, [sp, #0x20]
+ str r4, [lr, #0x0]
+ mov r12, r12, lsl #0xc
+ str r12, [lr, #0x0]
+ mov r12, #0x1000
+ mov r0, r0, lsl #0xc
+ mov r1, r1, lsl #0xc
+ mov r2, r2, lsl #0xc
+ mov r3, r3, lsl #0xc
+ str r12, [lr, #0x0]
+ bl FUN_020B0340
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B02C0: .word 0x04000470
+_020B02C4: .word 0x0400046C
+
+ arm_func_start FUN_020B02C8
+FUN_020B02C8: ; 0x020B02C8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ ldr r2, _020B0330 ; =0xBFFF0000
+ ldr r0, _020B0334 ; =0x04000580
+ mov r1, #0x400000
+ str r2, [r0, #0x0]
+ rsb r0, r1, #0x0
+ str r0, [sp, #0x0]
+ str r1, [sp, #0x4]
+ mov r0, #0x0
+ str r1, [sp, #0x8]
+ mov r1, #0x1
+ str r1, [sp, #0xc]
+ mov r2, r0
+ mov r1, #0xc0000
+ mov r3, #0x100000
+ str r0, [sp, #0x10]
+ bl G3i_OrthoW_
+ ldr r1, _020B0338 ; =0x0400044C
+ mov r2, #0x0
+ ldr r0, _020B033C ; =0x04000440
+ str r2, [r1, #0x0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+ .balign 4
+_020B0330: .word 0xBFFF0000
+_020B0334: .word 0x04000580
+_020B0338: .word 0x0400044C
+_020B033C: .word 0x04000440
+
+ arm_func_start FUN_020B0340
+FUN_020B0340: ; 0x020B0340
+ stmdb sp!, {r4-r6,lr}
+ mov r3, r3, lsl #0x8
+ mov r0, r0, lsl #0x8
+ mov r4, r3, asr #0x10
+ mov r3, r0, asr #0x10
+ mov r0, r4, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r1, r1, lsl #0x8
+ mov r1, r1, asr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r2, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r2, r2, lsl #0x10
+ ldr ip, _020B03F4 ; =0x04000500
+ mov lr, #0x1
+ mov r6, r0, lsr #0x10
+ mov r5, r3, lsr #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r2, lsr #0x10
+ ldr r4, _020B03F8 ; =0x04000488
+ str lr, [r12, #0x0]
+ orr r0, r5, r6, lsl #0x10
+ ldr lr, _020B03FC ; =0x0400048C
+ str r0, [r4, #0x0]
+ mov r0, #0x10000000
+ str r0, [lr, #0x0]
+ mov r12, #0x0
+ str r12, [lr, #0x0]
+ orr r2, r3, r6, lsl #0x10
+ ldr r0, _020B0400 ; =0x10001000
+ str r2, [r4, #0x0]
+ str r0, [lr, #0x0]
+ str r12, [lr, #0x0]
+ orr r0, r3, r1, lsl #0x10
+ str r0, [r4, #0x0]
+ mov r0, #0x1000
+ str r0, [lr, #0x0]
+ str r12, [lr, #0x0]
+ orr r0, r5, r1, lsl #0x10
+ str r0, [r4, #0x0]
+ str r12, [lr, #0x0]
+ ldr r0, _020B0404 ; =0x04000504
+ str r12, [lr, #0x0]
+ str r12, [r0, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B03F4: .word 0x04000500
+_020B03F8: .word 0x04000488
+_020B03FC: .word 0x0400048C
+_020B0400: .word 0x10001000
+_020B0404: .word 0x04000504
+
+ arm_func_start FUN_020B0408
+FUN_020B0408:
+ ldr r1, [r0, #0x14]
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x18]
+ ldreq r1, [r0, #0x8]
+ cmp r1, #0x2
+ beq _020B0428
+ cmp r1, #0x4
+ bne _020B0430
+_020B0428:
+ mov r0, #0x1
+ bx lr
+_020B0430:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B0438
+FUN_020B0438: ; 0x020B0438
+ ldr ip, _020B0444 ; =FUN_020B0448
+ str r1, [r0, #0x18]
+ bx r12
+ .balign 4
+_020B0444: .word FUN_020B0448
+
+ arm_func_start FUN_020B0448
+FUN_020B0448: ; 0x020B0448
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ movgt r2, #0x1
+ ldr r1, [r0, #0x4]
+ movle r2, #0x0
+ eors r1, r2, r1
+ beq _020B047C
+ ldr r2, [r0, #0x18]
+ ldrh r1, [r2, #0x2]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ str r1, [r0, #0x0]
+ b _020B0494
+_020B047C:
+ ldr r2, [r0, #0x18]
+ ldrh r1, [r2, #0x0]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ sub r1, r1, #0x8
+ str r1, [r0, #0x0]
+_020B0494:
+ ldr ip, _020B04A4 ; =FUN_020B0534
+ mov r1, #0x0
+ str r1, [r0, #0xc]
+ bx r12
+ .balign 4
+_020B04A4: .word FUN_020B0534
+
+ arm_func_start FUN_020B04A8
+FUN_020B04A8: ; 0x020B04A8
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x8]
+ strh r1, [r0, #0xc]
+ bx lr
+
+ arm_func_start FUN_020B04C0
+FUN_020B04C0:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r0, r4, #0x1c
+ bl FUN_020B04A8
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ str r1, [r4, #0x4]
+ mov r0, #0x1
+ str r0, [r4, #0x8]
+ str r1, [r4, #0xc]
+ mov r0, #0x1000
+ str r0, [r4, #0x10]
+ str r1, [r4, #0x14]
+ str r1, [r4, #0x18]
+ ldmia sp!, {r4,pc}
+_020B04FC: ; 0x020B04FC
+ ldr r1, [r0, #0x18]
+ ldr r2, [r0, #0x0]
+ ldr r0, [r1, #0xc]
+ sub r0, r2, r0
+ mov r0, r0, lsl #0xd
+ mov r0, r0, lsr #0x10
+ bx lr
+
+ arm_func_start FUN_020B0518
+FUN_020B0518:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020B06EC
+_020B0524: ; 0x020B0524
+ cmp r0, #0x0
+ movne r1, #0x0
+ strne r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B0534
+FUN_020B0534:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r0, [r8, #0x8]
+ mov r7, #0x0
+ cmp r0, #0x1
+ movne r0, r7
+ ldmneia sp!, {r4-r8,pc}
+_020B0550: ; 0x020B0550
+ ldr r2, [r8, #0x10]
+ mov r0, #0x800
+ smull r3, r1, r2, r1
+ adds r0, r3, r0
+ adc r1, r1, r7
+ mov r0, r0, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ bl abs
+ ldr r1, [r8, #0xc]
+ add r6, r8, #0xc
+ add r0, r1, r0
+ str r0, [r8, #0xc]
+ mov r4, r7
+ mov r5, #0x1
+ b _020B06A8
+_020B058C:
+ ldr r0, [r8, #0x0]
+ ldr r1, [r6, #0x0]
+ ldrh r0, [r0, #0x4]
+ mov r7, r5
+ sub r0, r1, r0, lsl #0xc
+ str r0, [r6, #0x0]
+ ldr r0, [r8, #0x10]
+ cmp r0, #0x0
+ movgt r1, r5
+ ldr r0, [r8, #0x4]
+ movle r1, r4
+ eors r0, r1, r0
+ ldrne r0, [r8, #0x0]
+ addne r0, r0, #0x8
+ strne r0, [r8, #0x0]
+ ldreq r0, [r8, #0x0]
+ subeq r0, r0, #0x8
+ streq r0, [r8, #0x0]
+ ldr r1, [r8, #0x10]
+ ldr r0, [r8, #0x0]
+ cmp r1, #0x0
+ movgt r2, r5
+ ldr r1, [r8, #0x4]
+ movle r2, r4
+ eors r1, r2, r1
+ beq _020B0614
+ ldr r2, [r8, #0x18]
+ ldrh r1, [r2, #0x0]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ cmp r0, r1
+ movcs r0, r5
+ movcc r0, r4
+ b _020B0634
+_020B0614:
+ ldr r2, [r8, #0x18]
+ ldrh r1, [r2, #0x2]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ sub r1, r1, #0x8
+ cmp r0, r1
+ movls r0, r5
+ movhi r0, r4
+_020B0634:
+ cmp r0, #0x0
+ beq _020B0644
+ mov r0, r8
+ bl FUN_020B0710
+_020B0644:
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ beq _020B06A8
+ ldr r0, [r8, #0x18]
+ ldr r2, [r8, #0x1c]
+ ldr r1, [r8, #0x0]
+ ldr r0, [r0, #0xc]
+ cmp r2, #0x2
+ sub r0, r1, r0
+ mov r0, r0, lsl #0xd
+ mov r1, r0, lsr #0x10
+ beq _020B0680
+ cmp r2, #0x3
+ beq _020B069C
+ b _020B06A8
+_020B0680:
+ ldrh r0, [r8, #0x28]
+ cmp r1, r0
+ bne _020B06A8
+ ldr r0, [r8, #0x20]
+ ldr r2, [r8, #0x24]
+ blx r2
+ b _020B06A8
+_020B069C:
+ ldr r0, [r8, #0x20]
+ ldr r2, [r8, #0x24]
+ blx r2
+_020B06A8:
+ ldr r0, [r8, #0x8]
+ cmp r0, #0x0
+ beq _020B06CC
+ ldr r0, [r8, #0x0]
+ ldr r1, [r8, #0xc]
+ ldrh r0, [r0, #0x4]
+ cmp r1, r0, lsl #0xc
+ movge r0, r5
+ bge _020B06D0
+_020B06CC:
+ mov r0, r4
+_020B06D0:
+ cmp r0, #0x0
+ bne _020B058C
+ mov r0, r7
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B06E0
+FUN_020B06E0: ; 0x020B06E0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020B06EC
+FUN_020B06EC:
+ ldr r3, [r0, #0x18]
+ ldrh r2, [r3, #0x0]
+ cmp r1, r2
+ ldrcc r2, [r3, #0xc]
+ addcc r1, r2, r1, lsl #0x3
+ strcc r1, [r0, #0x0]
+ movcc r0, #0x1
+ movcs r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B0710
+FUN_020B0710: ; 0x020B0710
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x3
+ beq _020B0738
+ cmp r0, #0x4
+ bne _020B07B4
+_020B0738:
+ ldr r0, [r4, #0x4]
+ eor r0, r0, #0x1
+ str r0, [r4, #0x4]
+ ldr r1, [r4, #0x18]
+ ldr r2, [r4, #0x0]
+ ldrh r0, [r1, #0x2]
+ ldr r1, [r1, #0xc]
+ add r0, r1, r0, lsl #0x3
+ sub r0, r0, #0x8
+ cmp r2, r0
+ bhi _020B0800
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x1
+ bne _020B0780
+ ldr r0, [r4, #0x20]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x24]
+ blx r2
+_020B0780:
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x2
+ beq _020B07A8
+ cmp r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x8]
+ bne _020B0800
+_020B07A8:
+ mov r0, r4
+ bl FUN_020B0448
+ b _020B0800
+_020B07B4:
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x1
+ bne _020B07D0
+ ldr r0, [r4, #0x20]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x24]
+ blx r2
+_020B07D0:
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x2
+ beq _020B07F8
+ cmp r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x8]
+ bne _020B0800
+_020B07F8:
+ mov r0, r4
+ bl FUN_020B0448
+_020B0800:
+ ldr r1, [r4, #0x18]
+ ldr r2, [r4, #0x0]
+ ldrh r0, [r1, #0x0]
+ ldr r1, [r1, #0xc]
+ add r0, r1, r0, lsl #0x3
+ sub r0, r0, #0x8
+ cmp r2, r0
+ strhi r0, [r4, #0x0]
+ ldmhiia sp!, {r4,pc}
+_020B0824: ; 0x020B0824
+ cmp r2, r1
+ strcc r1, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+_020B0830: ; 0x020B0830
+ ldrh r3, [r0, #0x6]
+ ldrh r2, [r0, #0x8]
+ mov r12, #0x0
+ add r1, r3, #0x1
+ cmp r2, r1
+ bgt _020B0854
+ ldrh r0, [r0, #0x4]
+ cmp r0, r3
+ movls r12, #0x1
+_020B0854:
+ cmp r12, #0x0
+ subne r0, r3, r2
+ addne r0, r0, #0x1
+ movne r0, r0, lsl #0x10
+ movne r0, r0, lsr #0x10
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B0870
+FUN_020B0870: ; 0x020B0870
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020B09B4
+ mov r0, r4
+ bl FUN_020B0888
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B0888
+FUN_020B0888: ; 0x020B0888
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x0
+ beq _020B0944
+ ldrh r2, [r5, #0x6]
+ ldrh r1, [r5, #0x8]
+ mov r3, #0x0
+ add r0, r2, #0x1
+ cmp r1, r0
+ bgt _020B08C0
+ ldrh r0, [r5, #0x4]
+ cmp r0, r2
+ movls r3, #0x1
+_020B08C0:
+ cmp r3, #0x0
+ moveq r4, #0x0
+ beq _020B08E0
+ ldrh r0, [r5, #0x4]
+ sub r0, r2, r0
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0xd
+_020B08E0:
+ ldr r2, [r5, #0x0]
+ ldr r1, _020B09AC ; =0x021CCDA0
+ mov r0, #0x540
+ mla r1, r2, r0, r1
+ ldrh r0, [r5, #0x4]
+ add r2, r1, #0x100
+ mov r1, r4
+ add r6, r2, r0, lsl #0x3
+ mov r0, r6
+ bl DC_InvalidateRange
+ ldr r0, _020B09B0 ; =0x02106814
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020B0930
+ mov r1, r6
+ mov r3, r4
+ mov r2, #0xc0
+ bl MI_DmaFill32
+ b _020B0998
+_020B0930:
+ mov r1, r6
+ mov r2, r4
+ mov r0, #0xc0
+ bl MIi_CpuClear32
+ b _020B0998
+_020B0944:
+ ldr r2, [r5, #0x0]
+ ldr r1, _020B09AC ; =0x021CCDA0
+ mov r0, #0x540
+ mla r1, r2, r0, r1
+ ldrh r2, [r5, #0x4]
+ ldrh r0, [r5, #0x6]
+ add r1, r1, #0x100
+ add r3, r1, r2, lsl #0x3
+ sub r0, r0, r2
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ movs r2, r0, lsr #0x10
+ mov r0, #0x0
+ beq _020B0998
+ mov r1, #0xc0
+_020B0980:
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, r2
+ strh r1, [r3], #0x8
+ blo _020B0980
+_020B0998:
+ ldrh r0, [r5, #0x4]
+ strh r0, [r5, #0x8]
+ ldrh r0, [r5, #0xa]
+ strh r0, [r5, #0xe]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B09AC: .word 0x021CCDA0
+_020B09B0: .word 0x02106814
+
+ arm_func_start FUN_020B09B4
+FUN_020B09B4: ; 0x020B09B4
+ stmdb sp!, {r4-r10,lr}
+ mov r7, r0
+ ldr r0, [r7, #0x14]
+ cmp r0, #0x0
+ beq _020B0A48
+ ldr r5, [r7, #0x0]
+ ldr r1, _020B0BA8 ; =0x021CCDA0
+ mov r0, #0x540
+ mla r1, r5, r0, r1
+ ldrh r2, [r7, #0x4]
+ ldrh r0, [r7, #0x6]
+ add r1, r1, #0x100
+ add r4, r1, r2, lsl #0x3
+ sub r0, r0, r2
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x13
+ mov r6, r0, lsr #0x10
+ mov r2, r2, lsl #0x13
+ mov r0, r4
+ mov r1, r6
+ mov r7, r2, lsr #0x10
+ bl DC_FlushRange
+_020B0A0C: ; 0x020B0A0C
+ cmp r5, #0x0
+ beq _020B0A20
+ cmp r5, #0x1
+ beq _020B0A34
+ ldmia sp!, {r4-r10,pc}
+_020B0A20:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl GX_LoadOAM
+ ldmia sp!, {r4-r10,pc}
+_020B0A34:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl GXS_LoadOAM
+ ldmia sp!, {r4-r10,pc}
+_020B0A48:
+ ldr r0, [r7, #0x0]
+ ldr r2, _020B0BA8 ; =0x021CCDA0
+ mov r1, #0x540
+ mla r2, r0, r1, r2
+ ldrh r5, [r7, #0x4]
+ ldrh r1, [r7, #0x6]
+ ldr r3, _020B0BAC ; =0x0210655C
+ add r4, r2, #0x100
+ sub r1, r1, r5
+ add r1, r1, #0x1
+ mov r1, r1, lsl #0x10
+ mov r2, r5, lsl #0x13
+ add r6, r4, r5, lsl #0x3
+ movs r5, r1, lsr #0x10
+ mov r4, r2, lsr #0x10
+ ldr r9, [r3, r0, lsl #0x2]
+ mov r10, #0x0
+ beq _020B0AC8
+ mov r8, #0x6
+_020B0A94:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r8
+ blx r9
+ add r0, r10, #0x1
+ add r2, r4, #0x8
+ mov r1, r0, lsl #0x10
+ mov r0, r2, lsl #0x10
+ mov r10, r1, lsr #0x10
+ cmp r10, r5
+ mov r4, r0, lsr #0x10
+ add r6, r6, #0x8
+ blo _020B0A94
+_020B0AC8:
+ ldrh r2, [r7, #0xc]
+ ldrh r1, [r7, #0xe]
+ mov r3, #0x0
+ add r0, r2, #0x1
+ cmp r1, r0
+ bgt _020B0AEC
+ ldrh r0, [r7, #0xa]
+ cmp r0, r2
+ movls r3, #0x1
+_020B0AEC:
+ cmp r3, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020B0AF4: ; 0x020B0AF4
+ ldr r0, [r7, #0x0]
+ ldr r2, _020B0BA8 ; =0x021CCDA0
+ mov r1, #0x540
+ mla r2, r0, r1, r2
+ ldrh r5, [r7, #0xa]
+ add r4, r2, #0x100
+ ldrh r1, [r7, #0xc]
+ mov r2, r5, lsl #0x15
+ ldr r3, _020B0BAC ; =0x0210655C
+ sub r1, r1, r5
+ add r1, r1, #0x1
+ mov r1, r1, lsl #0x10
+ add r9, r4, r5, lsl #0x5
+ ldr r5, [r3, r0, lsl #0x2]
+ movs r8, r1, lsr #0x10
+ mov r7, r2, lsr #0x10
+ mov r6, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020B0B3C: ; 0x020B0B3C
+ mov r4, #0x2
+_020B0B40:
+ mov r2, r4
+ add r0, r9, #0x6
+ add r1, r7, #0x6
+ blx r5
+ mov r2, r4
+ add r0, r9, #0xe
+ add r1, r7, #0xe
+ blx r5
+ mov r2, r4
+ add r0, r9, #0x16
+ add r1, r7, #0x16
+ blx r5
+ add r0, r9, #0x1e
+ add r1, r7, #0x1e
+ mov r2, r4
+ blx r5
+ add r0, r7, #0x20
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+ add r9, r9, #0x20
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r8
+ blo _020B0B40
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B0BA8: .word 0x021CCDA0
+_020B0BAC: .word 0x0210655C
+
+ arm_func_start FUN_020B0BB0
+FUN_020B0BB0: ; 0x020B0BB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r12, [r0, #0xc]
+ ldrh r3, [r0, #0xe]
+ mov lr, #0x0
+ add r2, r12, #0x1
+ cmp r3, r2
+ bgt _020B0BDC
+ ldrh r2, [r0, #0xa]
+ cmp r2, r12
+ movls lr, #0x1
+_020B0BDC:
+ cmp lr, #0x0
+ subne r2, r12, r3
+ addne r2, r2, #0x1
+ movne r2, r2, lsl #0x10
+ movne r2, r2, lsr #0x10
+ moveq r2, #0x0
+ cmp r2, #0x1
+ movcs r2, #0x1
+ movcc r2, #0x0
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldreq r0, _020B0C74 ; =0x0000FFFE
+ ldmeqia sp!, {pc}
+ ldr lr, [r0, #0x0]
+ ldr r3, _020B0C78 ; =0x021CCDA0
+ mov r2, #0x540
+ mla r12, lr, r2, r3
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r0, #0xe]
+ add r12, r12, #0x100
+ mov r3, r3, asr #0x4
+ add r12, r12, r2, lsl #0x5
+ strh r3, [r12, #0x6]
+ ldr r3, [r1, #0x4]
+ mov r3, r3, asr #0x4
+ strh r3, [r12, #0xe]
+ ldr r3, [r1, #0x8]
+ mov r3, r3, asr #0x4
+ strh r3, [r12, #0x16]
+ ldr r1, [r1, #0xc]
+ mov r1, r1, asr #0x4
+ strh r1, [r12, #0x1e]
+ ldrh r1, [r0, #0xe]
+ add r1, r1, #0x1
+ strh r1, [r0, #0xe]
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B0C74: .word 0x0000FFFE
+_020B0C78: .word 0x021CCDA0
+
+ arm_func_start FUN_020B0C7C
+FUN_020B0C7C: ; 0x020B0C7C
+ stmdb sp!, {r4,lr}
+ ldrh r12, [r0, #0x6]
+ ldrh r4, [r0, #0x8]
+ mov lr, #0x0
+ add r3, r12, #0x1
+ cmp r4, r3
+ bgt _020B0CA4
+ ldrh r3, [r0, #0x4]
+ cmp r3, r12
+ movls lr, #0x1
+_020B0CA4:
+ cmp lr, #0x0
+ subne r3, r12, r4
+ addne r3, r3, #0x1
+ movne r3, r3, lsl #0x10
+ movne r3, r3, lsr #0x10
+ moveq r3, #0x0
+ cmp r3, #0x1
+ movcs r3, #0x1
+ movcc r3, #0x0
+ cmp r3, #0x0
+ beq _020B0D48
+ ldr r4, [r0, #0x0]
+ ldr ip, _020B0D50 ; =0x021CCDA0
+ mov r3, #0x540
+ mla r12, r4, r3, r12
+ ldrh r3, [r0, #0x8]
+ add r4, r12, #0x100
+ ldrh r12, [r1, #0x0]
+ mov lr, r3, lsl #0x3
+ add r3, r4, r3, lsl #0x3
+ strh r12, [r4, lr]
+ ldrh lr, [r1, #0x2]
+ ldr ip, _020B0D54 ; =0x0000FFFE
+ strh lr, [r3, #0x2]
+ ldrh r1, [r1, #0x4]
+ cmp r2, r12
+ strh r1, [r3, #0x4]
+ beq _020B0D34
+ ldr r1, [r3, #0x0]
+ mov r12, r1, lsl #0x16
+ mov r12, r12, lsr #0x1e
+ ands r12, r12, #0x1
+ bicne r12, r1, #0x3e000000
+ andne r1, r2, #0x1f
+ orrne r1, r12, r1, lsl #0x19
+ strne r1, [r3, #0x0]
+_020B0D34:
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+_020B0D48:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B0D50: .word 0x021CCDA0
+_020B0D54: .word 0x0000FFFE
+
+ arm_func_start FUN_020B0D58
+FUN_020B0D58: ; 0x020B0D58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrh lr, [r0, #0x6]
+ ldrh r12, [r0, #0x8]
+ mov r4, #0x0
+ add r3, lr, #0x1
+ cmp r12, r3
+ bgt _020B0D84
+ ldrh r3, [r0, #0x4]
+ cmp r3, lr
+ movls r4, #0x1
+_020B0D84:
+ cmp r4, #0x0
+ subne r3, lr, r12
+ addne r3, r3, #0x1
+ movne r3, r3, lsl #0x10
+ movne r3, r3, lsr #0x10
+ moveq r3, #0x0
+ cmp r3, r2
+ movcs r3, #0x1
+ movcc r3, #0x0
+ cmp r3, #0x0
+ beq _020B0E24
+ ldr lr, [r0, #0x0]
+ ldr ip, _020B0E30 ; =0x021CCDA0
+ mov r3, #0x540
+ mla r12, lr, r3, r12
+ ldrh r3, [r0, #0x8]
+ add r12, r12, #0x100
+ cmp r2, #0x0
+ add r4, r12, r3, lsl #0x3
+ mov r5, #0x0
+ ble _020B0E18
+ add r3, r0, #0x8
+_020B0DDC:
+ ldrh lr, [r1, #0x0]
+ mov r0, r5, lsl #0x3
+ add r12, r4, r5, lsl #0x3
+ strh lr, [r4, r0]
+ ldrh r0, [r1, #0x2]
+ add r5, r5, #0x1
+ cmp r5, r2
+ strh r0, [r12, #0x2]
+ ldrh r0, [r1, #0x4]
+ add r1, r1, #0x8
+ strh r0, [r12, #0x4]
+ ldrh r0, [r3, #0x0]
+ add r0, r0, #0x1
+ strh r0, [r3, #0x0]
+ blt _020B0DDC
+_020B0E18:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,pc}
+_020B0E24:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0E30: .word 0x021CCDA0
+
+ arm_func_start FUN_020B0E34
+FUN_020B0E34: ; 0x020B0E34
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, [sp, #0x1c]
+ ldr r6, _020B0FB4 ; =0x021CCDA0
+ mov r4, #0x540
+ mla r4, r5, r4, r6
+ mov lr, r1
+ sub r1, r2, #0x1
+ add r1, lr, r1
+ mov r1, r1, lsl #0x10
+ mov r12, r1, lsr #0x10
+ add r7, r4, lr, lsl #0x1
+ add r2, r4, r12, lsl #0x1
+ mov r6, r0
+ mov r5, r3
+ cmp r7, r2
+ mov r3, lr, lsl #0x1
+ bhi _020B0E9C
+ ldr r0, _020B0FB8 ; =0x0000FFFF
+_020B0E80:
+ ldrh r1, [r7, #0x0]
+ cmp r1, r0
+ movne r0, #0x0
+ bne _020B0EA0
+ add r7, r7, #0x2
+ cmp r7, r2
+ bls _020B0E80
+_020B0E9C:
+ mov r0, #0x1
+_020B0EA0:
+ cmp r0, #0x0
+ beq _020B0EE0
+ ldr r0, _020B0FBC ; =0x021CCD9C
+ sub r2, r12, lr
+ ldrh r7, [r0, #0x0]
+ add r1, r4, r3
+ mov r2, r2, lsl #0x1
+ add r3, r7, #0x1
+ strh r3, [r0, #0x0]
+ strh r7, [r6, #0x10]
+ strh lr, [r6, #0x4]
+ strh r12, [r6, #0x6]
+ strh lr, [r6, #0x8]
+ ldrh r0, [r6, #0x10]
+ bl MIi_CpuClear16
+ b _020B0EEC
+_020B0EE0:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020B0EEC:
+ ldrh r0, [sp, #0x18]
+ add r4, r4, #0x500
+ cmp r0, #0x0
+ bne _020B0F18
+ mov r0, #0x20
+ strh r0, [r6, #0xa]
+ mov r0, #0x0
+ strh r0, [r6, #0xc]
+ ldrh r0, [r6, #0xa]
+ strh r0, [r6, #0xe]
+ b _020B0F98
+_020B0F18:
+ sub r0, r0, #0x1
+ add r0, r5, r0
+ mov r0, r0, lsl #0x10
+ mov r12, r0, lsr #0x10
+ add r7, r4, r5, lsl #0x1
+ add r2, r4, r12, lsl #0x1
+ cmp r7, r2
+ mov r3, r5, lsl #0x1
+ bhi _020B0F5C
+ ldr r0, _020B0FB8 ; =0x0000FFFF
+_020B0F40:
+ ldrh r1, [r7, #0x0]
+ cmp r1, r0
+ movne r0, #0x0
+ bne _020B0F60
+ add r7, r7, #0x2
+ cmp r7, r2
+ bls _020B0F40
+_020B0F5C:
+ mov r0, #0x1
+_020B0F60:
+ cmp r0, #0x0
+ beq _020B0F8C
+ strh r5, [r6, #0xa]
+ strh r12, [r6, #0xc]
+ strh r5, [r6, #0xe]
+ ldrh r0, [r6, #0x10]
+ sub r2, r12, r5
+ add r1, r4, r3
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ b _020B0F98
+_020B0F8C:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020B0F98:
+ mov r1, #0x0
+ ldr r0, [sp, #0x1c]
+ str r1, [r6, #0x14]
+ str r0, [r6, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B0FB4: .word 0x021CCDA0
+_020B0FB8: .word 0x0000FFFF
+_020B0FBC: .word 0x021CCD9C
+
+ arm_func_start FUN_020B0FC0
+FUN_020B0FC0: ; 0x020B0FC0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B1060 ; =0x021CCEA0
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r1, _020B1064 ; =0x021CD3E0
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r1, _020B1068 ; =0x021CD920
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1070 ; =0x021CCDA0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1074 ; =0x021CD2E0
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1078 ; =0x021CD820
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B107C ; =0x021CD2A0
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1080 ; =0x021CD7E0
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1084 ; =0x021CDD20
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B1060: .word 0x021CCEA0
+_020B1064: .word 0x021CD3E0
+_020B1068: .word 0x021CD920
+_020B106C: .word 0x0000FFFF
+_020B1070: .word 0x021CCDA0
+_020B1074: .word 0x021CD2E0
+_020B1078: .word 0x021CD820
+_020B107C: .word 0x021CD2A0
+_020B1080: .word 0x021CD7E0
+_020B1084: .word 0x021CDD20
+
+ arm_func_start FUN_020B1088
+FUN_020B1088: ; 0x020B1088
+ ldr ip, _020B1094 ; =MIi_CpuCopy16
+ add r1, r1, #0x7000000
+ bx r12
+ .balign 4
+_020B1094: .word MIi_CpuCopy16
+
+ arm_func_start FUN_020B1098
+FUN_020B1098: ; 0x020B1098
+ ldr r3, _020B10A8 ; =0x07000400
+ ldr ip, _020B10AC ; =MIi_CpuCopy16
+ add r1, r1, r3
+ bx r12
+ .balign 4
+_020B10A8: .word 0x07000400
+_020B10AC: .word MIi_CpuCopy16
+
+ arm_func_start FUN_020B10B0
+FUN_020B10B0: ; 0x020B10B0
+ mov r1, r1, lsl #0x1
+ ldrh r0, [r0, r1]
+ bx lr
+
+ arm_func_start FUN_020B10BC
+FUN_020B10BC: ; 0x020B10BC
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+
+ arm_func_start FUN_020B10C4
+FUN_020B10C4:
+ str r2, [r0, r1, lsl #0x2]
+ bx lr
+
+ arm_func_start FUN_020B10CC
+FUN_020B10CC:
+ mov r2, #0x0
+ mvn r1, #0x0
+_020B10D4:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020B10D4
+ bx lr
+
+ arm_func_start FUN_020B10E8
+FUN_020B10E8: ; 0x020B10E8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ ldr r0, [r10, #0x0]
+ mov r9, r1
+ cmp r0, #0x3
+ ldr r0, [sp, #0x28]
+ moveq r7, #0x20
+ str r0, [sp, #0x28]
+ ldrh r0, [r9, #0x0]
+ movne r7, #0x200
+ mov r11, r2
+ mov r8, r3
+ str r0, [sp, #0x0]
+ mov r6, #0x0
+ cmp r0, #0x0
+ bls _020B1210
+_020B112C:
+ ldr r1, [r9, #0x4]
+ mov r0, r6, lsl #0x1
+ ldrh r2, [r1, r0]
+ ldr r0, [r10, #0xc]
+ ldr r1, [r10, #0x8]
+ mla r5, r7, r2, r11
+ mla r4, r7, r6, r0
+ bl DC_FlushRange
+_020B114C: ; 0x020B114C
+ cmp r8, #0x0
+ beq _020B11E0
+ cmp r8, #0x1
+ beq _020B1168
+ cmp r8, #0x2
+ beq _020B11A4
+ b _020B11F8
+_020B1168:
+ ldr r0, [r10, #0x4]
+ cmp r0, #0x0
+ beq _020B1190
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ b _020B11F8
+_020B1190:
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadOBJPltt
+ b _020B11F8
+_020B11A4:
+ ldr r0, [r10, #0x4]
+ cmp r0, #0x0
+ beq _020B11CC
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ b _020B11F8
+_020B11CC:
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GXS_LoadOBJPltt
+ b _020B11F8
+_020B11E0:
+ bl GX_BeginLoadTexPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+_020B11F8:
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ ldr r0, [sp, #0x0]
+ cmp r6, r0
+ blo _020B112C
+_020B1210:
+ ldr r0, [sp, #0x28]
+ ldr r2, [r10, #0x0]
+ mov r1, r0
+ str r2, [r1, #0x0]
+ ldr r4, [r10, #0x4]
+ mov r3, r0
+ mov r1, r8
+ mov r2, r11
+ str r4, [r3, #0x4]
+ bl FUN_020B19D0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B1240
+FUN_020B1240: ; 0x020B1240
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r5, [r9, #0xc]
+ ldr r4, [r9, #0x8]
+ mov r8, r1
+ mov r7, r2
+ mov r0, r5
+ mov r1, r4
+ mov r6, r3
+ bl DC_FlushRange
+_020B126C: ; 0x020B126C
+ cmp r7, #0x0
+ beq _020B1300
+ cmp r7, #0x1
+ beq _020B1288
+ cmp r7, #0x2
+ beq _020B12C4
+ b _020B1318
+_020B1288:
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ beq _020B12B0
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ b _020B1318
+_020B12B0:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadOBJPltt
+ b _020B1318
+_020B12C4:
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ beq _020B12EC
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ b _020B1318
+_020B12EC:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GXS_LoadOBJPltt
+ b _020B1318
+_020B1300:
+ bl GX_BeginLoadTexPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+_020B1318:
+ ldr r1, [r9, #0x0]
+ mov r0, r6
+ str r1, [r6, #0x0]
+ ldr r3, [r9, #0x4]
+ mov r1, r7
+ mov r2, r8
+ str r3, [r6, #0x4]
+ bl FUN_020B19D0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020B1340
+FUN_020B1340: ; 0x020B1340
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ mov r5, r2
+ mov r4, r3
+ bl DC_FlushRange
+_020B1364: ; 0x020B1364
+ cmp r5, #0x0
+ ldr r0, [r7, #0x8]
+ beq _020B13B8
+ cmp r5, #0x1
+ beq _020B1384
+ cmp r5, #0x2
+ beq _020B13A0
+ b _020B13B8
+_020B1384:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B1520 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B13B8
+_020B13A0:
+ ldr r3, _020B1524 ; =0x04001000
+ ldr r1, _020B1520 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B13B8:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B14D8
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1408
+ cmp r0, #0x10
+ bge _020B1434
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B1444
+_020B13E4:
+ b _020B1444
+_020B13E8:
+ b _020B1414
+_020B13EC:
+ b _020B141C
+_020B13F0:
+ b _020B1444
+_020B13F4:
+ b _020B1424
+_020B13F8:
+ b _020B1444
+_020B13FC:
+ b _020B1444
+_020B1400:
+ b _020B1444
+_020B1404:
+ b _020B142C
+_020B1408:
+ cmp r0, #0x20
+ beq _020B143C
+ b _020B1444
+_020B1414:
+ mov r0, #0x0
+ b _020B1448
+_020B141C:
+ mov r0, #0x1
+ b _020B1448
+_020B1424:
+ mov r0, #0x2
+ b _020B1448
+_020B142C:
+ mov r0, #0x3
+ b _020B1448
+_020B1434:
+ mov r0, #0x4
+ b _020B1448
+_020B143C:
+ mov r0, #0x5
+ b _020B1448
+_020B1444:
+ mov r0, #0x0
+_020B1448:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B1490
+ cmp r0, #0x10
+ bge _020B14BC
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B14CC
+_020B146C:
+ b _020B14CC
+_020B1470:
+ b _020B149C
+_020B1474:
+ b _020B14A4
+_020B1478:
+ b _020B14CC
+_020B147C:
+ b _020B14AC
+_020B1480:
+ b _020B14CC
+_020B1484:
+ b _020B14CC
+_020B1488:
+ b _020B14CC
+_020B148C:
+ b _020B14B4
+_020B1490:
+ cmp r0, #0x20
+ beq _020B14C4
+ b _020B14CC
+_020B149C:
+ mov r0, #0x0
+ b _020B14D0
+_020B14A4:
+ mov r0, #0x1
+ b _020B14D0
+_020B14AC:
+ mov r0, #0x2
+ b _020B14D0
+_020B14B4:
+ mov r0, #0x3
+ b _020B14D0
+_020B14BC:
+ mov r0, #0x4
+ b _020B14D0
+_020B14C4:
+ mov r0, #0x5
+ b _020B14D0
+_020B14CC:
+ mov r0, #0x0
+_020B14D0:
+ str r0, [r4, #0x10]
+ b _020B14E8
+_020B14D8:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B14E8:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl FUN_020B1A1C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B1520: .word 0xFFCFFFEF
+_020B1524: .word 0x04001000
+
+ arm_func_start FUN_020B1528
+FUN_020B1528: ; 0x020B1528
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ movs r5, r2
+ mov r6, r1
+ mov r4, r3
+ ldr r0, [r7, #0x8]
+ beq _020B1590
+ cmp r5, #0x1
+ beq _020B155C
+ cmp r5, #0x2
+ beq _020B1578
+ b _020B1590
+_020B155C:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B1760 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B1590
+_020B1578:
+ ldr r3, _020B1764 ; =0x04001000
+ ldr r1, _020B1760 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B1590:
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ bl DC_FlushRange
+_020B159C: ; 0x020B159C
+ cmp r5, #0x0
+ beq _020B15B8
+ cmp r5, #0x1
+ beq _020B15D4
+ cmp r5, #0x2
+ beq _020B15E8
+ b _020B15F8
+_020B15B8:
+ bl GX_BeginLoadTex
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ b _020B15F8
+_020B15D4:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadOBJ
+ b _020B15F8
+_020B15E8:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GXS_LoadOBJ
+_020B15F8:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B1718
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1648
+ cmp r0, #0x10
+ bge _020B1674
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B1684
+_020B1624:
+ b _020B1684
+_020B1628:
+ b _020B1654
+_020B162C:
+ b _020B165C
+_020B1630:
+ b _020B1684
+_020B1634:
+ b _020B1664
+_020B1638:
+ b _020B1684
+_020B163C:
+ b _020B1684
+_020B1640:
+ b _020B1684
+_020B1644:
+ b _020B166C
+_020B1648:
+ cmp r0, #0x20
+ beq _020B167C
+ b _020B1684
+_020B1654:
+ mov r0, #0x0
+ b _020B1688
+_020B165C:
+ mov r0, #0x1
+ b _020B1688
+_020B1664:
+ mov r0, #0x2
+ b _020B1688
+_020B166C:
+ mov r0, #0x3
+ b _020B1688
+_020B1674:
+ mov r0, #0x4
+ b _020B1688
+_020B167C:
+ mov r0, #0x5
+ b _020B1688
+_020B1684:
+ mov r0, #0x0
+_020B1688:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B16D0
+ cmp r0, #0x10
+ bge _020B16FC
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B170C
+_020B16AC:
+ b _020B170C
+_020B16B0:
+ b _020B16DC
+_020B16B4:
+ b _020B16E4
+_020B16B8:
+ b _020B170C
+_020B16BC:
+ b _020B16EC
+_020B16C0:
+ b _020B170C
+_020B16C4:
+ b _020B170C
+_020B16C8:
+ b _020B170C
+_020B16CC:
+ b _020B16F4
+_020B16D0:
+ cmp r0, #0x20
+ beq _020B1704
+ b _020B170C
+_020B16DC:
+ mov r0, #0x0
+ b _020B1710
+_020B16E4:
+ mov r0, #0x1
+ b _020B1710
+_020B16EC:
+ mov r0, #0x2
+ b _020B1710
+_020B16F4:
+ mov r0, #0x3
+ b _020B1710
+_020B16FC:
+ mov r0, #0x4
+ b _020B1710
+_020B1704:
+ mov r0, #0x5
+ b _020B1710
+_020B170C:
+ mov r0, #0x0
+_020B1710:
+ str r0, [r4, #0x10]
+ b _020B1728
+_020B1718:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B1728:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl FUN_020B1A1C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B1760: .word 0xFFCFFFEF
+_020B1764: .word 0x04001000
+
+ arm_func_start FUN_020B1768
+FUN_020B1768: ; 0x020B1768
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ movs r5, r2
+ mov r6, r1
+ mov r4, r3
+ ldr r0, [r7, #0x8]
+ beq _020B17D0
+ cmp r5, #0x1
+ beq _020B179C
+ cmp r5, #0x2
+ beq _020B17B8
+ b _020B17D0
+_020B179C:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B19A0 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B17D0
+_020B17B8:
+ ldr r3, _020B19A4 ; =0x04001000
+ ldr r1, _020B19A0 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B17D0:
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ bl DC_FlushRange
+_020B17DC: ; 0x020B17DC
+ cmp r5, #0x0
+ beq _020B17F8
+ cmp r5, #0x1
+ beq _020B1814
+ cmp r5, #0x2
+ beq _020B1828
+ b _020B1838
+_020B17F8:
+ bl GX_BeginLoadTex
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ b _020B1838
+_020B1814:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadOBJ
+ b _020B1838
+_020B1828:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GXS_LoadOBJ
+_020B1838:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B1958
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1888
+ cmp r0, #0x10
+ bge _020B18B4
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B18C4
+_020B1864:
+ b _020B18C4
+_020B1868:
+ b _020B1894
+_020B186C:
+ b _020B189C
+_020B1870:
+ b _020B18C4
+_020B1874:
+ b _020B18A4
+_020B1878:
+ b _020B18C4
+_020B187C:
+ b _020B18C4
+_020B1880:
+ b _020B18C4
+_020B1884:
+ b _020B18AC
+_020B1888:
+ cmp r0, #0x20
+ beq _020B18BC
+ b _020B18C4
+_020B1894:
+ mov r0, #0x0
+ b _020B18C8
+_020B189C:
+ mov r0, #0x1
+ b _020B18C8
+_020B18A4:
+ mov r0, #0x2
+ b _020B18C8
+_020B18AC:
+ mov r0, #0x3
+ b _020B18C8
+_020B18B4:
+ mov r0, #0x4
+ b _020B18C8
+_020B18BC:
+ mov r0, #0x5
+ b _020B18C8
+_020B18C4:
+ mov r0, #0x0
+_020B18C8:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B1910
+ cmp r0, #0x10
+ bge _020B193C
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B194C
+_020B18EC:
+ b _020B194C
+_020B18F0:
+ b _020B191C
+_020B18F4:
+ b _020B1924
+_020B18F8:
+ b _020B194C
+_020B18FC:
+ b _020B192C
+_020B1900:
+ b _020B194C
+_020B1904:
+ b _020B194C
+_020B1908:
+ b _020B194C
+_020B190C:
+ b _020B1934
+_020B1910:
+ cmp r0, #0x20
+ beq _020B1944
+ b _020B194C
+_020B191C:
+ mov r0, #0x0
+ b _020B1950
+_020B1924:
+ mov r0, #0x1
+ b _020B1950
+_020B192C:
+ mov r0, #0x2
+ b _020B1950
+_020B1934:
+ mov r0, #0x3
+ b _020B1950
+_020B193C:
+ mov r0, #0x4
+ b _020B1950
+_020B1944:
+ mov r0, #0x5
+ b _020B1950
+_020B194C:
+ mov r0, #0x0
+_020B1950:
+ str r0, [r4, #0x10]
+ b _020B1968
+_020B1958:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B1968:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl FUN_020B1A1C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B19A0: .word 0xFFCFFFEF
+_020B19A4: .word 0x04001000
+
+ arm_func_start FUN_020B19A8
+FUN_020B19A8:
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [r0, #0x8]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B19C4
+FUN_020B19C4: ; 0x020B19C4
+ add r0, r0, r1, lsl #0x2
+ ldr r0, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020B19D0
+FUN_020B19D0: ; 0x020B19D0
+ add r0, r0, r1, lsl #0x2
+ str r2, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020B19DC
+FUN_020B19DC: ; 0x020B19DC
+ mov r3, #0x0
+ mvn r2, #0x0
+_020B19E4:
+ add r1, r0, r3, lsl #0x2
+ add r3, r3, #0x1
+ str r2, [r1, #0x8]
+ cmp r3, #0x3
+ blt _020B19E4
+ bx lr
+
+ arm_func_start FUN_020B19FC
+FUN_020B19FC:
+ ldr r1, [r0, r1, lsl #0x2]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B1A14
+FUN_020B1A14: ; 0x020B1A14
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+
+ arm_func_start FUN_020B1A1C
+FUN_020B1A1C: ; 0x020B1A1C
+ str r2, [r0, r1, lsl #0x2]
+ bx lr
+
+ arm_func_start FUN_020B1A24
+FUN_020B1A24: ; 0x020B1A24
+ mov r2, #0x0
+ mvn r1, #0x0
+_020B1A2C:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020B1A2C
+ bx lr
+
+ arm_func_start FUN_020B1A40
+FUN_020B1A40: ; 0x020B1A40
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r1, r4, #0x4
+ mov r0, #0x0
+ mov r2, #0x18
+ bl MIi_CpuClear16
+ mov r0, #0x1000
+ str r0, [r4, #0x4]
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B1A68
+FUN_020B1A68:
+ ldr ip, _020B1A74 ; =FUN_020B1A40
+ str r1, [r0, #0x0]
+ bx r12
+ .balign 4
+_020B1A74: .word FUN_020B1A40
+
+ arm_func_start FUN_020B1A78
+FUN_020B1A78: ; 0x020B1A78
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x1
+ ldreqh r3, [r0, #0x12]
+ orreq r3, r3, #0x2
+ streqh r3, [r0, #0x12]
+ streq r1, [r0, #0x4]
+ streq r2, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020B1A98
+FUN_020B1A98: ; 0x020B1A98
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x1
+ ldreqh r2, [r0, #0x12]
+ orreq r2, r2, #0x4
+ streqh r2, [r0, #0x12]
+ streqh r1, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020B1AB4
+FUN_020B1AB4: ; 0x020B1AB4
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x1
+ ldreqh r3, [r0, #0x12]
+ orreq r3, r3, #0x8
+ streqh r3, [r0, #0x12]
+ streqh r1, [r0, #0xc]
+ streqh r2, [r0, #0xe]
+ bx lr
+
+ arm_func_start FUN_020B1AD4
+FUN_020B1AD4: ; 0x020B1AD4
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ mov r1, #0x1
+ str r1, [r0, #0x8]
+ ldr ip, _020B1AF4 ; =FUN_020B1A68
+ add r0, r0, #0xc
+ bx r12
+ .balign 4
+_020B1AF4: .word FUN_020B1A68
+
+ arm_func_start FUN_020B1AF8
+FUN_020B1AF8: ; 0x020B1AF8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ ldrh r5, [r2, #0x0]
+ ldr r4, [sp, #0x60]
+ ldr r10, [sp, #0x58]
+ str r4, [sp, #0x60]
+ cmp r1, r5
+ movcs r1, r5
+ mov r4, #0x0
+ cmp r1, #0x0
+ str r4, [sp, #0x0]
+ bls _020B1E7C
+ ldrh r4, [sp, #0x5c]
+ mov r4, r4, lsl #0x19
+ str r4, [sp, #0x4]
+ ldr r4, [sp, #0x0]
+ str r4, [sp, #0x14]
+ mov r4, #0x100
+ str r4, [sp, #0xc]
+ mov r4, #0x300
+ str r4, [sp, #0x8]
+ mov r4, #0x1
+ str r4, [sp, #0x10]
+_020B1B54:
+ ldr r5, [sp, #0x0]
+ mov r6, #0x6
+ mul r6, r5, r6
+ ldr r8, [r2, #0x4]
+ ldr r4, [sp, #0x0]
+ add r7, r0, r5, lsl #0x3
+ ldrh r5, [r8, r6]
+ mov r4, r4, lsl #0x3
+ add r9, r8, r6
+ strh r5, [r0, r4]
+ ldrh r4, [r9, #0x2]
+ cmp r3, #0x0
+ strh r4, [r7, #0x2]
+ ldrh r4, [r9, #0x4]
+ strh r4, [r7, #0x4]
+ bne _020B1B9C
+ cmp r10, #0x0
+ beq _020B1E60
+_020B1B9C:
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E88 ; =0x01FF0000
+ and r4, r5, r4
+ mov r4, r4, lsr #0x10
+ mov r4, r4, lsl #0x10
+ mov r4, r4, asr #0x10
+ cmp r4, #0xff
+ orrgt r4, r4, #0xff00
+ movgt r4, r4, lsl #0x10
+ movgt r4, r4, asr #0x10
+ mov r4, r4, lsl #0xc
+ str r4, [sp, #0x20]
+ ldr r4, [r7, #0x0]
+ and r4, r4, #0xff
+ mov r4, r4, lsl #0x10
+ mov r4, r4, asr #0x10
+ cmp r4, #0x7f
+ orrgt r4, r4, #0xff00
+ movgt r4, r4, lsl #0x10
+ movgt r4, r4, asr #0x10
+ mov r4, r4, lsl #0xc
+ str r4, [sp, #0x24]
+ cmp r3, #0x0
+ beq _020B1E00
+ ldr r5, [r7, #0x0]
+ and r6, r5, #0x300
+ cmp r6, #0x100
+ beq _020B1C1C
+ cmp r6, #0x300
+ beq _020B1C1C
+ and r4, r5, #0x30000000
+ orr r6, r6, r4
+_020B1C1C:
+ cmp r6, #0x300
+ bne _020B1C70
+ ldr r4, _020B1E8C ; =0xC000C000
+ ldr r8, _020B1E90 ; =0x020FF8AC
+ and r5, r5, r4
+ and r4, r5, #0xc000
+ mov r6, r4, asr #0xe
+ and r4, r5, #0xc0000000
+ mov r4, r4, lsr #0x1e
+ mov r4, r4, lsl #0x1
+ add r8, r8, r6, lsl #0x3
+ ldrh r9, [r4, r8]
+ ldr r8, _020B1E94 ; =0x020FF894
+ ldr r5, [sp, #0x20]
+ add r6, r8, r6, lsl #0x3
+ add r5, r5, r9, lsl #0xb
+ str r5, [sp, #0x20]
+ ldrh r4, [r4, r6]
+ ldr r5, [sp, #0x24]
+ add r4, r5, r4, lsl #0xb
+ str r4, [sp, #0x24]
+_020B1C70:
+ ldr r4, [sp, #0x60]
+ ldr r5, [r3, #0x8]
+ cmp r4, #0x0
+ ldrne r8, [sp, #0x8]
+ add r4, sp, #0x20
+ ldreq r8, [sp, #0xc]
+ mov r6, r4
+ cmp r8, #0x300
+ ldreq r9, [sp, #0x10]
+ mov r12, #0x1000
+ ldrne r9, [sp, #0x14]
+ cmp r4, r4
+ ldr r4, [sp, #0x24]
+ addeq r6, sp, #0x28
+ smull r11, r4, r5, r4
+ adds r5, r11, r12
+ adc r11, r4, #0x0
+ ldr r4, [r3, #0x0]
+ ldr lr, [sp, #0x20]
+ smlal r5, r11, r4, lr
+ mov r4, r5, lsr #0xc
+ orr r4, r4, r11, lsl #0x14
+ str r4, [r6, #0x0]
+ ldr r4, [r3, #0xc]
+ ldr r5, [sp, #0x24]
+ ldr lr, [r3, #0x4]
+ smull r11, r5, r4, r5
+ adds r11, r11, r12
+ adc r4, r5, #0x0
+ add r5, sp, #0x28
+ cmp r6, r5
+ ldr r5, [sp, #0x20]
+ smlal r11, r4, lr, r5
+ mov r5, r11, lsr #0xc
+ orr r5, r5, r4, lsl #0x14
+ str r5, [r6, #0x4]
+ ldreq r5, [sp, #0x28]
+ ldreq r4, [sp, #0x2c]
+ streq r5, [sp, #0x20]
+ streq r4, [sp, #0x24]
+ cmp r8, #0x100
+ beq _020B1D38
+ cmp r8, #0x300
+ beq _020B1D38
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E98 ; =0xC1FFFCFF
+ and r4, r5, r4
+ orr r4, r4, r8
+ str r4, [r7, #0x0]
+ b _020B1D54
+_020B1D38:
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E98 ; =0xC1FFFCFF
+ and r4, r5, r4
+ orr r5, r4, r8
+ ldr r4, [sp, #0x4]
+ orr r4, r4, r5
+ str r4, [r7, #0x0]
+_020B1D54:
+ ldr r6, [r7, #0x0]
+ ldr r5, _020B1E8C ; =0xC000C000
+ cmp r9, #0x0
+ and r8, r6, r5
+ and r5, r8, #0xc000
+ mov r6, r5, asr #0xe
+ and r5, r8, #0xc0000000
+ ldr r8, _020B1E90 ; =0x020FF8AC
+ mov r5, r5, lsr #0x1e
+ mov r5, r5, lsl #0x1
+ add r8, r8, r6, lsl #0x3
+ ldrh r9, [r5, r8]
+ ldr r8, _020B1E94 ; =0x020FF894
+ ldr r4, [sp, #0x20]
+ add r6, r8, r6, lsl #0x3
+ mov r11, r9, asr #0x1
+ ldrh r5, [r5, r6]
+ mov r8, r11, lsl #0xc
+ ldr r6, [r3, #0x0]
+ rsb r12, r8, #0x0
+ mov r9, r5, asr #0x1
+ mla r12, r6, r11, r12
+ ldr r5, [r3, #0x8]
+ mla r6, r5, r9, r12
+ add r6, r4, r6
+ str r6, [sp, #0x20]
+ ldr r12, [r3, #0x4]
+ mov r5, r9, lsl #0xc
+ str r12, [sp, #0x1c]
+ ldr r12, [r3, #0xc]
+ rsb lr, r5, #0x0
+ str r12, [sp, #0x18]
+ ldr r12, [sp, #0x1c]
+ ldr r4, [sp, #0x24]
+ mla r11, r12, r11, lr
+ ldr r12, [sp, #0x18]
+ subne r6, r6, r8
+ mla r9, r12, r9, r11
+ add r4, r4, r9
+ str r4, [sp, #0x24]
+ subne r4, r4, r5
+ strne r6, [sp, #0x20]
+ strne r4, [sp, #0x24]
+_020B1E00:
+ cmp r10, #0x0
+ beq _020B1E28
+ ldr r6, [sp, #0x20]
+ ldr r4, [r10, #0x0]
+ ldr r5, [sp, #0x24]
+ add r4, r6, r4
+ str r4, [sp, #0x20]
+ ldr r4, [r10, #0x4]
+ add r4, r5, r4
+ str r4, [sp, #0x24]
+_020B1E28:
+ ldr r4, [sp, #0x20]
+ ldr r6, [r7, #0x0]
+ add r5, r4, #0x800
+ ldr r4, _020B1E9C ; =0x000001FF
+ and r4, r4, r5, asr #0xc
+ ldr r5, _020B1EA0 ; =0xFE00FF00
+ and r6, r6, r5
+ ldr r5, [sp, #0x24]
+ add r5, r5, #0x800
+ mov r5, r5, asr #0xc
+ and r5, r5, #0xff
+ orr r5, r6, r5
+ orr r4, r5, r4, lsl #0x10
+ str r4, [r7, #0x0]
+_020B1E60:
+ ldr r4, [sp, #0x0]
+ add r4, r4, #0x1
+ mov r4, r4, lsl #0x10
+ mov r4, r4, lsr #0x10
+ str r4, [sp, #0x0]
+ cmp r4, r1
+ blo _020B1B54
+_020B1E7C:
+ mov r0, r1
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B1E88: .word 0x01FF0000
+_020B1E8C: .word 0xC000C000
+_020B1E90: .word 0x020FF8AC
+_020B1E94: .word 0x020FF894
+_020B1E98: .word 0xC1FFFCFF
+_020B1E9C: .word 0x000001FF
+_020B1EA0: .word 0xFE00FF00
+
+ arm_func_start FUN_020B1EA4
+FUN_020B1EA4: ; 0x020B1EA4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020B0518
+_020B1EB0: ; 0x020B1EB0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020B1EB8: ; 0x020B1EB8
+ mov r0, r4
+ bl FUN_020B1FC4
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B1EC4
+FUN_020B1EC4: ; 0x020B1EC4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020B0534
+_020B1ED0: ; 0x020B1ED0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020B1ED8: ; 0x020B1ED8
+ mov r0, r4
+ bl FUN_020B1FC4
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B1EE4
+FUN_020B1EE4: ; 0x020B1EE4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020B0438
+ mov r0, r4
+ bl FUN_020B1FC4
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B1EFC
+FUN_020B1EFC: ; 0x020B1EFC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r4, r2
+ ldr r2, [r4, #0xc]
+ mov r5, r1
+ ldr r1, [r2, #0x0]
+ ldr r2, [sp, #0x34]
+ str r1, [sp, #0x0]
+ ldr r1, [sp, #0x38]
+ str r2, [sp, #0x4]
+ mov r6, r3
+ mov r7, r0
+ ldr r12, [sp, #0x3c]
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x2c]
+ ldr r3, [sp, #0x30]
+ mov r0, r6
+ str r12, [sp, #0xc]
+ bl FUN_020B45F0
+ str r6, [r7, #0x34]
+ str r4, [r7, #0x30]
+ add r0, r7, #0x38
+ mov r1, #0x1
+ str r6, [r7, #0x34]
+ bl FUN_020B1A68
+ mov r0, r7
+ bl FUN_020B04C0
+ mov r0, r7
+ mov r1, r5
+ bl FUN_020B1EE4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B1F80
+FUN_020B1F80: ; 0x020B1F80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ str r2, [r5, #0x30]
+ mvn r2, #0x0
+ add r0, r5, #0x38
+ mov r1, #0x1
+ str r2, [r5, #0x34]
+ bl FUN_020B1A68
+ mov r0, r5
+ bl FUN_020B04C0
+ mov r0, r5
+ mov r1, r4
+ bl FUN_020B1EE4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B1FC4
+FUN_020B1FC4: ; 0x020B1FC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ ldrh r1, [r1, #0x4]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020B1FE4: ; 0x020B1FE4
+ bl FUN_020B06E0
+ mov r4, r0
+ ldr r7, [r5, #0x30]
+ ldrh r1, [r4, #0x0]
+ mov r0, r7
+ bl FUN_020AFE8C
+ str r0, [r5, #0x2c]
+ ldr r1, [r5, #0x18]
+ add r0, r5, #0x38
+ ldr r2, [r1, #0x4]
+ mov r1, #0x1
+ and r6, r2, #0xff
+ bl FUN_020B1A68
+_020B2018: ; 0x020B2018
+ cmp r6, #0x0
+ beq _020B2068
+ cmp r6, #0x2
+ bne _020B203C
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r5, #0x38
+ bl FUN_020B1AB4
+ b _020B2068
+_020B203C:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r5, #0x38
+ bl FUN_020B1A78
+ ldrh r1, [r4, #0x2]
+ add r0, r5, #0x38
+ bl FUN_020B1A98
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r5, #0x38
+ bl FUN_020B1AB4
+_020B2068:
+ ldr r2, [r7, #0xc]
+ cmp r2, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020B2084: ; 0x020B2084
+ ldr r1, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020B20A4: ; 0x020B20A4
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r2, #0x4]
+ ldr r0, [r5, #0x34]
+ add r3, r2, r1, lsl #0x3
+ ldr r1, [r2, r1, lsl #0x3]
+ ldr r2, [r3, #0x4]
+ bl FUN_020B4400
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B20C8
+FUN_020B20C8: ; 0x020B20C8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r6, #0x0
+ str r6, [r0, #0x38]
+ ldr r7, [sp, #0x30]
+ str r6, [r0, #0x30]
+ mov r10, r1
+ str r7, [r0, #0x34]
+ str r0, [sp, #0x0]
+ movs r8, r3
+ mov r9, r2
+ str r10, [r0, #0x3c]
+ ldr r11, [sp, #0x34]
+ beq _020B215C
+ mov r0, #0x1
+ str r6, [sp, #0x8]
+ str r0, [sp, #0x4]
+_020B210C:
+ mov r0, #0x28
+ mul r4, r6, r0
+ ldr r1, [sp, #0x4]
+ add r0, r10, r4
+ bl FUN_020B1AD4
+ mov r0, #0x54
+ mla r5, r6, r0, r9
+ ldr r1, [sp, #0x8]
+ mov r0, r7
+ str r5, [r10, r4]
+ bl FUN_020AFC04
+ mov r1, r0
+ mov r0, r5
+ mov r2, r11
+ bl FUN_020B1F80
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r8
+ blo _020B210C
+_020B215C:
+ ldr r0, [sp, #0x0]
+ bl FUN_020B04C0
+_020B2164: ; 0x020B2164
+ ldr r0, [sp, #0x0]
+ ldr r3, [sp, #0x38]
+ ldr r2, [sp, #0x0]
+ add r0, r0, #0x44
+ mov r1, #0x1
+ str r3, [r2, #0x40]
+ bl FUN_020B1A68
+_020B2180: ; 0x020B2180
+ ldr r0, [sp, #0x0]
+ mov r1, #0x0
+ strh r1, [r0, #0x2c]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B2194
+FUN_020B2194: ; 0x020B2194
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl FUN_020B0518
+_020B21A4: ; 0x020B21A4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020B21B0: ; 0x020B21B0
+ mov r0, r7
+ bl FUN_020B06E0
+ mov r4, r0
+ ldrh r1, [r4, #0x0]
+ ldr r0, [r7, #0x40]
+ bl FUN_020AFF34
+ ldr r1, [r7, #0x18]
+ mov r6, r0
+ ldr r1, [r1, #0x4]
+ add r0, r7, #0x44
+ and r5, r1, #0xff
+ mov r1, #0x1
+ bl FUN_020B1A68
+_020B21E4: ; 0x020B21E4
+ cmp r5, #0x0
+ beq _020B2234
+ cmp r5, #0x2
+ bne _020B2208
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r7, #0x44
+ bl FUN_020B1AB4
+ b _020B2234
+_020B2208:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r7, #0x44
+ bl FUN_020B1A78
+ ldrh r1, [r4, #0x2]
+ add r0, r7, #0x44
+ bl FUN_020B1A98
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r7, #0x44
+ bl FUN_020B1AB4
+_020B2234:
+ ldrh r2, [r7, #0x2c]
+ mov r1, r6
+ add r0, r7, #0x30
+ bl FUN_020B24E0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B224C
+FUN_020B224C: ; 0x020B224C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r2, [r4, #0x0]
+ mov r6, r1
+ ldrh r5, [r2, #0x4]
+ bl FUN_020B0534
+_020B2268: ; 0x020B2268
+ cmp r0, #0x0
+ beq _020B2318
+ ldrh r1, [r4, #0x2c]
+ mov r0, r4
+ add r1, r1, r5
+ strh r1, [r4, #0x2c]
+ bl FUN_020B06E0
+ mov r5, r0
+ ldrh r1, [r5, #0x0]
+ ldr r0, [r4, #0x40]
+ bl FUN_020AFF34
+ ldr r1, [r4, #0x18]
+ mov r7, r0
+ ldr r1, [r1, #0x4]
+ add r0, r4, #0x44
+ and r6, r1, #0xff
+ mov r1, #0x1
+ bl FUN_020B1A68
+_020B22B0: ; 0x020B22B0
+ cmp r6, #0x0
+ beq _020B2300
+ cmp r6, #0x2
+ bne _020B22D4
+ ldrsh r1, [r5, #0x4]
+ ldrsh r2, [r5, #0x6]
+ add r0, r4, #0x44
+ bl FUN_020B1AB4
+ b _020B2300
+_020B22D4:
+ ldr r1, [r5, #0x4]
+ ldr r2, [r5, #0x8]
+ add r0, r4, #0x44
+ bl FUN_020B1A78
+ ldrh r1, [r5, #0x2]
+ add r0, r4, #0x44
+ bl FUN_020B1A98
+ ldrsh r1, [r5, #0xc]
+ ldrsh r2, [r5, #0xe]
+ add r0, r4, #0x44
+ bl FUN_020B1AB4
+_020B2300:
+ ldrh r2, [r4, #0x2c]
+ mov r1, r7
+ add r0, r4, #0x30
+ bl FUN_020B24E0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B2318:
+ mov r1, r6
+ add r0, r4, #0x30
+ bl FUN_020B232C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B232C
+FUN_020B232C: ; 0x020B232C
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ ldr r0, [r7, #0x8]
+ mov r6, r1
+ cmp r0, #0x1
+ bne _020B238C
+ ldr r0, [r7, #0x0]
+ ldr r4, [r7, #0xc]
+ ldrh r0, [r0, #0x2]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r8,pc}
+_020B235C: ; 0x020B235C
+ mov r8, #0x58
+_020B2360:
+ mla r0, r5, r8, r4
+ mov r1, r6
+ bl FUN_020B1EC4
+ ldr r1, [r7, #0x0]
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x2]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B2360
+ ldmia sp!, {r4-r8,pc}
+_020B238C:
+ ldr r0, [r7, #0x0]
+ ldr r4, [r7, #0xc]
+ ldrh r0, [r0, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r8,pc}
+_020B23A4: ; 0x020B23A4
+ mov r8, #0x28
+_020B23A8:
+ mul r0, r5, r8
+ ldr r0, [r4, r0]
+ mov r1, r6
+ bl FUN_020B1EC4
+ ldr r1, [r7, #0x0]
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B23A8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B23D8
+FUN_020B23D8: ; 0x020B23D8
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldrh r0, [r5, #0x0]
+ mov r4, #0x0
+ mov r6, r4
+ cmp r0, #0x0
+ bls _020B2424
+_020B23F4:
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020AFF34
+ ldrh r0, [r0, #0x0]
+ ldrh r1, [r5, #0x0]
+ cmp r0, r4
+ movhi r4, r0
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r1
+ blo _020B23F4
+_020B2424:
+ mov r0, r4
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B242C
+FUN_020B242C: ; 0x020B242C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl FUN_020B0438
+ mov r1, #0x0
+ mov r0, r7
+ strh r1, [r7, #0x2c]
+ bl FUN_020B06E0
+ mov r4, r0
+ ldrh r1, [r4, #0x0]
+ ldr r0, [r7, #0x40]
+ bl FUN_020AFF34
+ ldr r1, [r7, #0x18]
+ mov r6, r0
+ ldr r1, [r1, #0x4]
+ add r0, r7, #0x44
+ and r5, r1, #0xff
+ mov r1, #0x1
+ bl FUN_020B1A68
+_020B2478: ; 0x020B2478
+ cmp r5, #0x0
+ beq _020B24C8
+ cmp r5, #0x2
+ bne _020B249C
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r7, #0x44
+ bl FUN_020B1AB4
+ b _020B24C8
+_020B249C:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r7, #0x44
+ bl FUN_020B1A78
+ ldrh r1, [r4, #0x2]
+ add r0, r7, #0x44
+ bl FUN_020B1A98
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r7, #0x44
+ bl FUN_020B1AB4
+_020B24C8:
+ ldrh r2, [r7, #0x2c]
+ mov r1, r6
+ add r0, r7, #0x30
+ bl FUN_020B24E0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B24E0
+FUN_020B24E0: ; 0x020B24E0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r1
+ str r0, [sp, #0x0]
+ str r10, [r0, #0x0]
+ ldr r0, [r0, #0x8]
+ mov r9, r2
+ cmp r0, #0x1
+ bne _020B2654
+ ldrh r1, [r10, #0x2]
+ ldr r0, [sp, #0x0]
+ mov r4, #0x0
+ ldr r8, [r0, #0xc]
+ cmp r1, #0x0
+ bls _020B2544
+ mov r3, r4
+ mov r0, #0x58
+_020B2524:
+ mla r1, r4, r0, r8
+ str r3, [r1, #0x54]
+ add r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ ldrh r2, [r10, #0x2]
+ mov r4, r1, lsr #0x10
+ cmp r4, r2
+ blo _020B2524
+_020B2544:
+ ldrh r0, [r10, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+_020B2558: ; 0x020B2558
+ str r5, [sp, #0x4]
+ mov r11, #0x1
+_020B2560:
+ ldr r0, [r10, #0x4]
+ mov r1, #0x58
+ add r7, r0, r5, lsl #0x3
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ mla r6, r0, r1, r8
+ ldr r0, [r6, #0x54]
+ cmp r0, #0x0
+ bne _020B2634
+ ldr r0, [sp, #0x0]
+ ldrh r1, [r7, #0x0]
+ ldr r0, [r0, #0x4]
+ bl FUN_020AFC04
+ mov r4, r0
+ mov r0, r6
+ mov r1, r4
+ bl FUN_020B1EE4
+ str r11, [r6, #0x8]
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _020B2630
+ ldrh r1, [r4, #0x0]
+ ldr r7, [sp, #0x4]
+ mov r3, r7
+ cmp r1, #0x0
+ bls _020B25F0
+ ldr r2, [r4, #0xc]
+_020B25D8:
+ add r0, r2, r3, lsl #0x3
+ ldrh r0, [r0, #0x4]
+ add r3, r3, #0x1
+ cmp r3, r1
+ add r7, r7, r0
+ blo _020B25D8
+_020B25F0:
+ mov r0, r6
+ bl FUN_020B0408
+_020B25F8: ; 0x020B25F8
+ cmp r0, #0x0
+ beq _020B261C
+ mov r0, r9
+ mov r1, r7
+ bl _u32_div_f
+ mov r0, r6
+ mov r1, r1, lsl #0xc
+ bl FUN_020B1EC4
+ b _020B2630
+_020B261C:
+ cmp r9, r7
+ movcc r7, r9
+ mov r0, r6
+ mov r1, r7, lsl #0xc
+ bl FUN_020B1EC4
+_020B2630:
+ str r11, [r6, #0x54]
+_020B2634:
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r10, #0x0]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B2560
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+_020B2654:
+ ldrh r1, [r10, #0x0]
+ ldr r0, [sp, #0x0]
+ mov r4, #0x0
+ cmp r1, #0x0
+ ldr r11, [r0, #0xc]
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+_020B2670: ; 0x020B2670
+ mov r0, #0x1
+ str r4, [sp, #0xc]
+ str r0, [sp, #0x8]
+_020B267C:
+ mov r0, #0x28
+ mul r2, r4, r0
+ ldr r3, [r10, #0x4]
+ mov r0, r4, lsl #0x3
+ ldrh r1, [r3, r0]
+ ldr r0, [sp, #0x0]
+ ldr r6, [r11, r2]
+ ldr r0, [r0, #0x4]
+ add r7, r3, r4, lsl #0x3
+ bl FUN_020AFC04
+ mov r5, r0
+ mov r0, r6
+ mov r1, r5
+ bl FUN_020B1EE4
+ ldr r0, [sp, #0x8]
+ str r0, [r6, #0x8]
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _020B2740
+ ldrh r1, [r5, #0x0]
+ ldr r8, [sp, #0xc]
+ mov r0, r8
+ cmp r1, #0x0
+ bls _020B2700
+ ldr r3, [r5, #0xc]
+_020B26E4:
+ add r1, r3, r0, lsl #0x3
+ ldrh r2, [r1, #0x4]
+ add r0, r0, #0x1
+ ldrh r1, [r5, #0x0]
+ add r8, r8, r2
+ cmp r0, r1
+ blo _020B26E4
+_020B2700:
+ mov r0, r6
+ bl FUN_020B0408
+_020B2708: ; 0x020B2708
+ cmp r0, #0x0
+ beq _020B272C
+ mov r0, r9
+ mov r1, r8
+ bl _u32_div_f
+ mov r0, r6
+ mov r1, r1, lsl #0xc
+ bl FUN_020B1EC4
+ b _020B2740
+_020B272C:
+ cmp r9, r8
+ movcc r8, r9
+ mov r0, r6
+ mov r1, r8, lsl #0xc
+ bl FUN_020B1EC4
+_020B2740:
+ mov r0, #0x28
+ mla r3, r4, r0, r11
+ ldr r0, [sp, #0x8]
+ str r0, [r3, #0x8]
+ ldrsh r1, [r7, #0x2]
+ ldrsh r2, [r7, #0x4]
+ add r0, r3, #0xc
+ bl FUN_020B1AB4
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r10, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B267C
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start thunk_FUN_020b5040
+thunk_FUN_020b5040: ; 0x020B2780
+ ldr ip, _020B2788 ; =FUN_020B5040
+ bx r12
+ .balign 4
+_020B2788: .word FUN_020B5040
+
+ arm_func_start FUN_020B278C
+FUN_020B278C:
+ ldr r0, [r0, #0x78]
+ bx lr
+
+ arm_func_start FUN_020B2794
+FUN_020B2794: ; 0x020B2794
+ stmdb sp!, {lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B2894 ; =0x021CDD70
+ mov lr, #0x0
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2898 ; =0x021CDEF4
+ mov r2, #0x18
+ str r1, [sp, #0x0]
+ str r1, [sp, #0xc]
+ mla r1, r12, r2, r3
+ rsb r3, r0, #0x0
+ str r0, [sp, #0x4]
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x8]
+ str lr, [sp, #0x10]
+ str lr, [sp, #0x14]
+ bl FUN_020B423C
+ ldr r0, _020B2894 ; =0x021CDD70
+ ldr r1, _020B289C ; =0x021CE1F4
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl FUN_020B423C
+ ldr r0, _020B28A0 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2824
+ ldr r1, _020B28A4 ; =0x02106570
+ ldr r0, _020B28A8 ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B2828
+_020B2824:
+ mov r0, #0x0
+_020B2828:
+ cmp r0, #0x0
+ ldreq r1, _020B2894 ; =0x021CDD70
+ ldreq r0, _020B28A4 ; =0x02106570
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B2894 ; =0x021CDD70
+ ldr r1, _020B28AC ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B288C
+_020B2860:
+ b _020B2870
+_020B2864:
+ b _020B288C
+_020B2868:
+ b _020B2870
+_020B286C:
+ b _020B2870
+_020B2870:
+ ldr r0, _020B28B0 ; =0x021CDD64
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B288C:
+ add sp, sp, #0x1c
+ ldmia sp!, {pc}
+ .balign 4
+_020B2894: .word 0x021CDD70
+_020B2898: .word 0x021CDEF4
+_020B289C: .word 0x021CE1F4
+_020B28A0: .word 0x021CDD68
+_020B28A4: .word 0x02106570
+_020B28A8: .word 0x0000FFFE
+_020B28AC: .word 0x021CDDF4
+_020B28B0: .word 0x021CDD64
+
+ arm_func_start FUN_020B28B4
+FUN_020B28B4: ; 0x020B28B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B29E8 ; =0x021CDD70
+ mov r12, #0x0
+ ldr r3, [r2, #0x0]
+ mov r4, r1
+ ldr r2, _020B29EC ; =0x021CDEF4
+ mov r1, #0x18
+ mla r1, r3, r1, r2
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r2, r1
+ str r5, [sp, #0x0]
+ str r12, [sp, #0x4]
+ str r12, [sp, #0x8]
+ str r4, [sp, #0xc]
+ str r12, [sp, #0x10]
+ str r12, [sp, #0x14]
+ bl FUN_020B423C
+ mov r0, r5
+ bl FX_Inv
+ mov r1, #0x0
+ str r0, [sp, #0x0]
+ mov r0, r4
+ str r1, [sp, #0x4]
+ str r1, [sp, #0x8]
+ bl FX_Inv
+ mov r3, #0x0
+ ldr r1, _020B29E8 ; =0x021CDD70
+ str r0, [sp, #0xc]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B29F0 ; =0x021CE1F4
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x10]
+ str r3, [sp, #0x14]
+ bl FUN_020B423C
+ ldr r0, _020B29F4 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2978
+ ldr r1, _020B29F8 ; =0x02106570
+ ldr r0, _020B29FC ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B297C
+_020B2978:
+ mov r0, #0x0
+_020B297C:
+ cmp r0, #0x0
+ ldreq r1, _020B29E8 ; =0x021CDD70
+ ldreq r0, _020B29F8 ; =0x02106570
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B29E8 ; =0x021CDD70
+ ldr r1, _020B2A00 ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B29E0
+_020B29B4:
+ b _020B29C4
+_020B29B8:
+ b _020B29E0
+_020B29BC:
+ b _020B29C4
+_020B29C0:
+ b _020B29C4
+_020B29C4:
+ ldr r0, _020B2A04 ; =0x021CDD64
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B29E0:
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B29E8: .word 0x021CDD70
+_020B29EC: .word 0x021CDEF4
+_020B29F0: .word 0x021CE1F4
+_020B29F4: .word 0x021CDD68
+_020B29F8: .word 0x02106570
+_020B29FC: .word 0x0000FFFE
+_020B2A00: .word 0x021CDDF4
+_020B2A04: .word 0x021CDD64
+
+ arm_func_start FUN_020B2A08
+FUN_020B2A08: ; 0x020B2A08
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r3, _020B2AEC ; =0x021CDD68
+ mov r4, r2
+ ldr r2, [r3, #0x0]
+ cmp r2, #0x0
+ beq _020B2A6C
+ ldr r2, _020B2AF0 ; =0x021CDD70
+ mov r3, #0x18
+ ldr r2, [r2, #0x0]
+ ldr lr, _020B2AF4 ; =0x021CDF04
+ mul r5, r2, r3
+ ldr r3, [lr, r5]
+ ldr ip, _020B2AF8 ; =0x021CDF08
+ add r0, r3, r0
+ str r0, [lr, r5]
+ ldr r0, [r12, r5]
+ ldr r3, _020B2AFC ; =0x021CDD74
+ add r0, r0, r1
+ str r0, [r12, r5]
+ ldr r0, [r3, r2, lsl #0x2]
+ add sp, sp, #0x1c
+ add r0, r0, r4
+ str r0, [r3, r2, lsl #0x2]
+ ldmia sp!, {r4-r5,pc}
+_020B2A6C:
+ ldr r2, _020B2AF0 ; =0x021CDD70
+ mov lr, #0x1000
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2B00 ; =0x021CDEF4
+ mov r2, #0x18
+ str r1, [sp, #0x14]
+ mla r1, r12, r2, r3
+ mov r3, #0x0
+ str r0, [sp, #0x10]
+ add r0, sp, #0x0
+ mov r2, r1
+ str lr, [sp, #0x0]
+ str r3, [sp, #0x4]
+ str r3, [sp, #0x8]
+ str lr, [sp, #0xc]
+ bl FUN_020B423C
+ ldr r0, _020B2AF0 ; =0x021CDD70
+ ldr r1, _020B2B04 ; =0x021CE1F4
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl FUN_020B423C
+ ldr r0, _020B2AF0 ; =0x021CDD70
+ ldr r2, _020B2AFC ; =0x021CDD74
+ ldr r1, [r0, #0x0]
+ ldr r0, [r2, r1, lsl #0x2]
+ add r0, r0, r4
+ str r0, [r2, r1, lsl #0x2]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B2AEC: .word 0x021CDD68
+_020B2AF0: .word 0x021CDD70
+_020B2AF4: .word 0x021CDF04
+_020B2AF8: .word 0x021CDF08
+_020B2AFC: .word 0x021CDD74
+_020B2B00: .word 0x021CDEF4
+_020B2B04: .word 0x021CE1F4
+
+ arm_func_start FUN_020B2B08
+FUN_020B2B08: ; 0x020B2B08
+ ldr r0, _020B2B4C ; =0x021CDD70
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movle r0, #0x1
+ movgt r0, #0x0
+ cmp r0, #0x0
+ bxne lr
+ ldr r1, _020B2B4C ; =0x021CDD70
+ ldr r0, _020B2B50 ; =0x02106570
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ sub r3, r3, #0x1
+ str r3, [r1, #0x0]
+ cmp r2, r3
+ ldrgt r1, _020B2B54 ; =0x0000FFFE
+ strgth r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B2B4C: .word 0x021CDD70
+_020B2B50: .word 0x02106570
+_020B2B54: .word 0x0000FFFE
+
+ arm_func_start FUN_020B2B58
+FUN_020B2B58: ; 0x020B2B58
+ stmdb sp!, {r4-r10,lr}
+ ldr r0, _020B2D74 ; =0x021CDD6C
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x7c]
+ ands r0, r0, #0x1
+ bne _020B2CA4
+ ldr r0, _020B2D78 ; =0x021CDD70
+ ldr r1, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ add r5, r1, #0x1
+ cmp r5, #0x20
+ mov r4, r0, lsr #0x10
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ beq _020B2C44
+ ldr r0, _020B2D7C ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2BE4
+ ldr r1, _020B2D78 ; =0x021CDD70
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =0x021CDD74
+ mul r8, r3, r0
+ ldr r6, _020B2D84 ; =0x021CDF04
+ mul r7, r5, r0
+ ldr r2, [r6, r8]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =0x021CDF08
+ str r2, [r6, r7]
+ ldr r2, [r3, r8]
+ str r0, [r1, r5, lsl #0x2]
+ str r2, [r3, r7]
+ b _020B2C3C
+_020B2BE4:
+ ldr r1, _020B2D78 ; =0x021CDD70
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r7, _020B2D80 ; =0x021CDD74
+ mul lr, r2, r0
+ ldr r1, _020B2D8C ; =0x021CDEF4
+ mul r12, r5, r0
+ ldr r8, _020B2D90 ; =0x021CE1F4
+ add r10, r1, lr
+ ldr r6, [r7, r2, lsl #0x2]
+ add r9, r1, r12
+ ldmia r10!, {r0-r3}
+ stmia r9!, {r0-r3}
+ ldmia r10, {r0-r1}
+ str r6, [r7, r5, lsl #0x2]
+ add r7, r8, lr
+ stmia r9, {r0-r1}
+ add r6, r8, r12
+ ldmia r7!, {r0-r3}
+ stmia r6!, {r0-r3}
+ ldmia r7, {r0-r1}
+ stmia r6, {r0-r1}
+_020B2C3C:
+ ldr r0, _020B2D78 ; =0x021CDD70
+ str r5, [r0, #0x0]
+_020B2C44:
+ ldr r0, _020B2D78 ; =0x021CDD70
+ ldr r2, _020B2D94 ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ mov r5, r4, lsl #0x3
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ add r4, r2, r4, lsl #0x3
+ mov r6, r3, lsl #0x3
+ ldrh r1, [r2, r5]
+ ldrh r0, [r4, #0x2]
+ add r3, r2, r3, lsl #0x3
+ strh r1, [r2, r6]
+ strh r0, [r3, #0x2]
+ ldrh r2, [r4, #0x4]
+ ldrh r0, [r4, #0x6]
+ ldr r1, _020B2D98 ; =0x021CDDF8
+ strh r2, [r3, #0x4]
+ strh r0, [r3, #0x6]
+ ldrh r0, [r1, r5]
+ cmp r0, #0x1
+ moveq r0, #0x2
+ streqh r0, [r1, r6]
+ strneh r0, [r1, r6]
+ ldmia sp!, {r4-r10,pc}
+_020B2CA4:
+ ldr r0, _020B2D78 ; =0x021CDD70
+ ldr r0, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r4, #0x20
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020B2CC4: ; 0x020B2CC4
+ ldr r0, _020B2D7C ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2D10
+ ldr r1, _020B2D78 ; =0x021CDD70
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =0x021CDD74
+ mul r7, r3, r0
+ ldr r5, _020B2D84 ; =0x021CDF04
+ mul r6, r4, r0
+ ldr r2, [r5, r7]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =0x021CDF08
+ str r2, [r5, r6]
+ ldr r2, [r3, r7]
+ str r0, [r1, r4, lsl #0x2]
+ str r2, [r3, r6]
+ b _020B2D68
+_020B2D10:
+ ldr r1, _020B2D78 ; =0x021CDD70
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr ip, _020B2D80 ; =0x021CDD74
+ mul r9, r2, r0
+ ldr r1, _020B2D8C ; =0x021CDEF4
+ mul r8, r4, r0
+ ldr lr, _020B2D90 ; =0x021CE1F4
+ add r6, r1, r9
+ ldr r5, [r12, r2, lsl #0x2]
+ add r7, r1, r8
+ ldmia r6!, {r0-r3}
+ stmia r7!, {r0-r3}
+ ldmia r6, {r0-r1}
+ add r6, lr, r9
+ stmia r7, {r0-r1}
+ add lr, lr, r8
+ ldmia r6!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r6, {r0-r1}
+ stmia lr, {r0-r1}
+ str r5, [r12, r4, lsl #0x2]
+_020B2D68:
+ ldr r0, _020B2D78 ; =0x021CDD70
+ str r4, [r0, #0x0]
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B2D74: .word 0x021CDD6C
+_020B2D78: .word 0x021CDD70
+_020B2D7C: .word 0x021CDD68
+_020B2D80: .word 0x021CDD74
+_020B2D84: .word 0x021CDF04
+_020B2D88: .word 0x021CDF08
+_020B2D8C: .word 0x021CDEF4
+_020B2D90: .word 0x021CE1F4
+_020B2D94: .word 0x021CDDF4
+_020B2D98: .word 0x021CDDF8
+
+ arm_func_start FUN_020B2D9C
+FUN_020B2D9C: ; 0x020B2D9C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldrh r0, [r4, #0x56]
+ cmp r0, #0x0
+ bne _020B2DBC
+ add r0, r4, #0x30
+ bl FUN_020B2E78
+ ldmia sp!, {r4-r6,pc}
+_020B2DBC:
+ bl FUN_020B2B58
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x8
+ beq _020B2E0C
+ ldr r0, _020B2E70 ; =0x021CDD6C
+ ldrsh r6, [r4, #0x52]
+ ldr r0, [r0, #0x0]
+ ldrsh r5, [r4, #0x50]
+ bl FUN_020B4F88
+_020B2DE0: ; 0x020B2DE0
+ cmp r0, #0x0
+ ldr r0, _020B2E70 ; =0x021CDD6C
+ rsbne r5, r5, #0x0
+ ldr r0, [r0, #0x0]
+ bl FUN_020B4F74
+_020B2DF4: ; 0x020B2DF4
+ cmp r0, #0x0
+ rsbne r6, r6, #0x0
+ mov r0, r5, lsl #0xc
+ mov r1, r6, lsl #0xc
+ mov r2, #0x0
+ bl FUN_020B2A08
+_020B2E0C:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x4
+ beq _020B2E40
+ ldrh r0, [r4, #0x54]
+ ldr r2, _020B2E74 ; =0x020FFA38
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl FUN_020B2794
+_020B2E40:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x2
+ beq _020B2E5C
+ ldr r0, [r4, #0x48]
+ ldr r1, [r4, #0x4c]
+ mov r2, #0x1000
+ bl FUN_020B28B4
+_020B2E5C:
+ add r0, r4, #0x30
+ bl FUN_020B2E78
+ mov r0, #0x1
+ bl FUN_020B2B08
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B2E70: .word 0x021CDD6C
+_020B2E74: .word 0x020FFA38
+
+ arm_func_start FUN_020B2E78
+FUN_020B2E78: ; 0x020B2E78
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x1
+ bne _020B309C
+ ldr r0, [r5, #0x0]
+ mov r2, #0x0
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x0
+ bls _020B2ED0
+ ldr r3, _020B3174 ; =0x021CE8F4
+ mov r4, r2
+_020B2EAC:
+ add r0, r3, r2, lsl #0x2
+ str r4, [r0, #0x4]
+ ldr r0, [r5, #0x0]
+ add r2, r2, #0x1
+ ldrh r1, [r0, #0x2]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0x10
+ cmp r2, r1
+ blo _020B2EAC
+_020B2ED0:
+ ldr r0, _020B3178 ; =0x021CDD6C
+ mov r6, #0x1
+ ldr r1, [r0, #0x0]
+ ldr r0, _020B3174 ; =0x021CE8F4
+ str r6, [r0, #0x404]
+ ldr r0, [r1, #0x80]
+ cmp r0, #0x0
+ beq _020B2FD8
+ bl FUN_020B4948
+_020B2EF4: ; 0x020B2EF4
+ str r0, [sp, #0x0]
+ mov r0, r6
+ bl FUN_020B497C
+ ldr r0, _020B3178 ; =0x021CDD6C
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl FUN_020B4958
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B2FC0
+ mov r11, r7
+_020B2F28:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =0x021CE8F4
+ strh r8, [r0, #0x0]
+ bl FUN_020B2B58
+ ldr r0, _020B3178 ; =0x021CDD6C
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl FUN_020B4F88
+_020B2F64: ; 0x020B2F64
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =0x021CDD6C
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl FUN_020B4F74
+_020B2F78: ; 0x020B2F78
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ mov r2, r11
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl FUN_020B2A08
+ mov r0, #0x58
+ mla r0, r8, r0, r9
+ bl FUN_020B3554
+ mov r0, r6
+ bl FUN_020B2B08
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2F28
+_020B2FC0:
+ mov r0, #0x0
+ bl FUN_020B497C
+_020B2FC8: ; 0x020B2FC8
+ ldr r0, [sp, #0x0]
+ bl FUN_020B4958
+ bl FUN_020B4968
+ b _020B3088
+_020B2FD8:
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B3088
+ str r7, [sp, #0x4]
+ mov r11, #0x58
+_020B2FF4:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =0x021CE8F4
+ strh r8, [r0, #0x0]
+ bl FUN_020B2B58
+ ldr r0, _020B3178 ; =0x021CDD6C
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl FUN_020B4F88
+_020B3030: ; 0x020B3030
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =0x021CDD6C
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl FUN_020B4F74
+_020B3044: ; 0x020B3044
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ ldr r2, [sp, #0x4]
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl FUN_020B2A08
+ mla r0, r8, r11, r9
+ bl FUN_020B3554
+ mov r0, r6
+ bl FUN_020B2B08
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2FF4
+_020B3088:
+ ldr r0, _020B3174 ; =0x021CE8F4
+ mov r1, #0x0
+ str r1, [r0, #0x404]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B309C:
+ ldr r0, _020B3178 ; =0x021CDD6C
+ ldr r7, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ cmp r0, #0x0
+ beq _020B312C
+ bl FUN_020B4948
+ mov r6, r0
+ mov r0, #0x1
+ bl FUN_020B497C
+ ldr r0, _020B3178 ; =0x021CDD6C
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl FUN_020B4958
+_020B30D4: ; 0x020B30D4
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ bls _020B3110
+ mov r8, #0x28
+_020B30EC:
+ mla r0, r4, r8, r7
+ bl FUN_020B3474
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B30EC
+_020B3110:
+ mov r0, #0x0
+ bl FUN_020B497C
+ mov r0, r6
+ bl FUN_020B4958
+ bl FUN_020B4968
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B312C:
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ addls sp, sp, #0xc
+ ldmlsia sp!, {r4-r11,pc}
+_020B3144: ; 0x020B3144
+ mov r6, #0x28
+_020B3148:
+ mla r0, r4, r6, r7
+ bl FUN_020B3474
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B3148
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3174: .word 0x021CE8F4
+_020B3178: .word 0x021CDD6C
+
+ arm_func_start FUN_020B317C
+FUN_020B317C: ; 0x020B317C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B31EC ; =0x021CDD6C
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x80]
+ cmp r1, #0x0
+ beq _020B31E0
+ bl FUN_020B4948
+ mov r4, r0
+ mov r0, #0x1
+ bl FUN_020B497C
+ ldr r0, _020B31EC ; =0x021CDD6C
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl FUN_020B4958
+ mov r0, r5
+ bl FUN_020B3554
+_020B31C4: ; 0x020B31C4
+ mov r0, #0x0
+ bl FUN_020B497C
+ mov r0, r4
+ bl FUN_020B4958
+ bl FUN_020B4968
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B31E0:
+ bl FUN_020B3554
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B31EC: .word 0x021CDD6C
+
+ arm_func_start FUN_020B31F0
+FUN_020B31F0: ; 0x020B31F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B3260 ; =0x04000448
+ mov r2, #0x1
+ ldr r0, _020B3264 ; =0x021CDD6C
+ str r2, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r3, [r2, #0x7c]
+ cmp r3, #0x0
+ beq _020B324C
+ ands r0, r3, #0x1
+ ldrne r0, _020B3268 ; =0x021CDD68
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ ands r0, r3, #0x2
+ beq _020B323C
+ mov r0, #0x0
+ str r0, [r2, #0x74]
+ bl FUN_020B4DA0
+_020B323C:
+ ldr r0, _020B3264 ; =0x021CDD6C
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x7c]
+_020B324C:
+ ldr r0, _020B3264 ; =0x021CDD6C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B3260: .word 0x04000448
+_020B3264: .word 0x021CDD6C
+_020B3268: .word 0x021CDD68
+
+ arm_func_start FUN_020B326C
+FUN_020B326C: ; 0x020B326C
+ stmdb sp!, {r4-r8,lr}
+ ldr r5, _020B330C ; =0x021CDD60
+ ldr r3, _020B3310 ; =0x021CDD6C
+ ldrh r6, [r5, #0x0]
+ ldr r2, _020B3314 ; =0x021CDD70
+ mov r4, #0x0
+ ldr r7, _020B3318 ; =0x0000FFFE
+ ldr r1, _020B331C ; =0x02106570
+ str r0, [r3, #0x0]
+ str r4, [r2, #0x0]
+ strh r7, [r1, #0x0]
+ cmp r6, #0x0
+ ble _020B32D0
+ ldr r8, _020B3320 ; =0x021CE4F4
+ mvn r7, #0x0
+ mov r6, #0x10
+_020B32AC:
+ mov r0, r7
+ mov r2, r6
+ add r1, r8, #0x10
+ bl MIi_CpuClearFast
+ ldrh r0, [r5, #0x0]
+ add r4, r4, #0x1
+ add r8, r8, #0x20
+ cmp r4, r0
+ blt _020B32AC
+_020B32D0:
+ ldr r4, _020B330C ; =0x021CDD60
+ mov r0, #0x0
+ ldr r3, _020B3324 ; =0x021CDD64
+ ldr r1, _020B3328 ; =0x021CDDF4
+ mov r2, #0x100
+ strh r0, [r4, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r1, _020B332C ; =0x04000444
+ mov r2, #0x0
+ ldr r0, _020B3330 ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bl FUN_020B4178
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B330C: .word 0x021CDD60
+_020B3310: .word 0x021CDD6C
+_020B3314: .word 0x021CDD70
+_020B3318: .word 0x0000FFFE
+_020B331C: .word 0x02106570
+_020B3320: .word 0x021CE4F4
+_020B3324: .word 0x021CDD64
+_020B3328: .word 0x021CDDF4
+_020B332C: .word 0x04000444
+_020B3330: .word 0x04000454
+
+ arm_func_start FUN_020B3334
+FUN_020B3334: ; 0x020B3334
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, r4
+ mov r0, #0x0
+ mov r2, #0x48
+ bl MIi_CpuClear16
+ mov r0, #0x1
+ str r0, [r4, #0x10]
+ mov r0, #0x3
+ ldr r1, _020B3380 ; =FUN_020B3EE0
+ str r0, [r4, #0x14]
+ ldr r0, _020B3384 ; =FUN_020B3E48
+ str r1, [r4, #0x18]
+ ldr r1, _020B3388 ; =FUN_020B3C40
+ str r0, [r4, #0x1c]
+ ldr r0, _020B338C ; =FUN_020B3B90
+ str r1, [r4, #0x20]
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3380: .word FUN_020B3EE0
+_020B3384: .word FUN_020B3E48
+_020B3388: .word FUN_020B3C40
+_020B338C: .word FUN_020B3B90
+
+ arm_func_start FUN_020B3390
+FUN_020B3390: ; 0x020B3390
+ ldr r2, [r0, #0x70]
+ str r2, [r1, #0x30]
+ str r1, [r0, #0x70]
+ bx lr
+
+ arm_func_start FUN_020B33A0
+FUN_020B33A0: ; 0x020B33A0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl FUN_020B504C
+ mov r7, #0x0
+ str r7, [r4, #0x70]
+ str r7, [r4, #0x74]
+ str r7, [r4, #0x78]
+ str r7, [r4, #0x7c]
+ str r7, [r4, #0x80]
+ str r7, [r4, #0x84]
+ strh r7, [r4, #0x88]
+ strh r7, [r4, #0x8a]
+ str r7, [r4, #0x8c]
+ str r7, [r4, #0x90]
+ ldr r1, _020B3454 ; =0x021CDD70
+ strh r7, [r4, #0x94]
+ ldr r2, _020B3458 ; =0x0000FFFE
+ ldr r0, _020B345C ; =0x02106570
+ ldr r6, _020B3460 ; =0x021CE4F4
+ str r7, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ mvn r5, #0x0
+ mov r4, #0x10
+_020B3400:
+ mov r0, r5
+ mov r2, r4
+ add r1, r6, #0x10
+ bl MIi_CpuClearFast
+ add r7, r7, #0x1
+ cmp r7, #0x20
+ add r6, r6, #0x20
+ blt _020B3400
+ ldr ip, _020B3464 ; =0x021CDD60
+ mov r0, #0x0
+ ldr r3, _020B3468 ; =0x021CDD64
+ ldr r1, _020B346C ; =0x021CDDF4
+ mov r2, #0x100
+ strh r0, [r12, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B3470 ; =0x021CDD68
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B3454: .word 0x021CDD70
+_020B3458: .word 0x0000FFFE
+_020B345C: .word 0x02106570
+_020B3460: .word 0x021CE4F4
+_020B3464: .word 0x021CDD60
+_020B3468: .word 0x021CDD64
+_020B346C: .word 0x021CDDF4
+_020B3470: .word 0x021CDD68
+
+ arm_func_start FUN_020B3474
+FUN_020B3474: ; 0x020B3474
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020B3490: ; 0x020B3490
+ ldr r4, [r5, #0x0]
+ bl FUN_020B2B58
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x8
+ beq _020B34E4
+ ldr r0, _020B354C ; =0x021CDD6C
+ ldrsh r7, [r5, #0x1a]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x18]
+ bl FUN_020B4F88
+_020B34B8: ; 0x020B34B8
+ cmp r0, #0x0
+ ldr r0, _020B354C ; =0x021CDD6C
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl FUN_020B4F74
+_020B34CC: ; 0x020B34CC
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl FUN_020B2A08
+_020B34E4:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x4
+ beq _020B3518
+ ldrh r0, [r5, #0x1c]
+ ldr r2, _020B3550 ; =0x020FFA38
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl FUN_020B2794
+_020B3518:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x2
+ beq _020B3534
+ ldr r0, [r5, #0x10]
+ ldr r1, [r5, #0x14]
+ mov r2, #0x1000
+ bl FUN_020B28B4
+_020B3534:
+ mov r0, r4
+ bl FUN_020B3554
+ mov r0, #0x1
+ bl FUN_020B2B08
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B354C: .word 0x021CDD6C
+_020B3550: .word 0x020FFA38
+
+ arm_func_start FUN_020B3554
+FUN_020B3554:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x4a]
+ ldr r4, [r5, #0x2c]
+ cmp r0, #0x0
+ bne _020B35C0
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B35B0
+ ldr r1, _020B36B4 ; =0x02106574
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl FUN_020B36C0
+ ldr r0, _020B36B4 ; =0x02106574
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35B0:
+ mov r0, r4
+ bl FUN_020B36C0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35C0:
+ bl FUN_020B2B58
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x8
+ beq _020B3610
+ ldr r0, _020B36B8 ; =0x021CDD6C
+ ldrsh r7, [r5, #0x46]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x44]
+ bl FUN_020B4F88
+_020B35E4: ; 0x020B35E4
+ cmp r0, #0x0
+ ldr r0, _020B36B8 ; =0x021CDD6C
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl FUN_020B4F74
+_020B35F8: ; 0x020B35F8
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl FUN_020B2A08
+_020B3610:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x4
+ beq _020B3644
+ ldrh r0, [r5, #0x48]
+ ldr r2, _020B36BC ; =0x020FFA38
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl FUN_020B2794
+_020B3644:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x2
+ beq _020B3660
+ ldr r0, [r5, #0x3c]
+ ldr r1, [r5, #0x40]
+ mov r2, #0x1000
+ bl FUN_020B28B4
+_020B3660:
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B369C
+ ldr r1, _020B36B4 ; =0x02106574
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl FUN_020B36C0
+ ldr r0, _020B36B4 ; =0x02106574
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ b _020B36A4
+_020B369C:
+ mov r0, r4
+ bl FUN_020B36C0
+_020B36A4:
+ mov r0, #0x1
+ bl FUN_020B2B08
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B36B4: .word 0x02106574
+_020B36B8: .word 0x021CDD6C
+_020B36BC: .word 0x020FFA38
+
+ arm_func_start FUN_020B36C0
+FUN_020B36C0: ; 0x020B36C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020B3B54 ; =0x021CDD6C
+ mov r10, r0
+ ldr r0, [r5, #0x0]
+ ldr r1, [r0, #0x7c]
+ str r0, [sp, #0x0]
+ ldr r9, [r0, #0x70]
+ ands r0, r1, #0x2
+ beq _020B38EC
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3840
+ ldr r0, _020B3B58 ; =0x021CDD68
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3720
+ ldr r2, _020B3B5C ; =0x02106570
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ ldrh r2, [r2, #0x0]
+ cmp r2, r0
+ movne r0, #0x1
+ bne _020B3724
+_020B3720:
+ mov r0, #0x0
+_020B3724:
+ cmp r0, #0x0
+ beq _020B37AC
+ ldr r0, _020B3B64 ; =0x021CE8F4
+ ldr r1, [r0, #0x404]
+ cmp r1, #0x0
+ beq _020B3788
+ ldrh r1, [r0, #0x0]
+ ldr r0, _020B3B68 ; =0x021CE8F8
+ ldr r1, [r0, r1, lsl #0x2]
+ cmp r1, #0x0
+ bne _020B37AC
+ bl FUN_020B4010
+ ldr r0, _020B3B6C ; =0x021CDD70
+ ldr r2, _020B3B70 ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ ldr r1, _020B3B64 ; =0x021CE8F4
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r3, [r2, r0]
+ ldr r4, _020B3B74 ; =0x021CE4F4
+ ldrh r2, [r1, #0x0]
+ ldr r0, _020B3B68 ; =0x021CE8F8
+ add r1, r4, r3, lsl #0x5
+ str r1, [r0, r2, lsl #0x2]
+ b _020B37AC
+_020B3788:
+ bl FUN_020B4010
+ ldr r0, _020B3B6C ; =0x021CDD70
+ ldr r1, _020B3B70 ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ ldr r2, _020B3B74 ; =0x021CE4F4
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r0, [r1, r0]
+ add r1, r2, r0, lsl #0x5
+_020B37AC:
+ ldr r0, _020B3B58 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =0x021CDD70
+ ldreq r3, _020B3B78 ; =0x021CDEF4
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r3
+ beq _020B37FC
+ ldr r2, _020B3B6C ; =0x021CDD70
+ mov r0, #0x18
+ ldr r2, [r2, #0x0]
+ ldr r3, _020B3B7C ; =0x021CDF04
+ mul r4, r2, r0
+ ldr r2, _020B3B80 ; =0x021CDF08
+ ldr r3, [r3, r4]
+ ldr r0, _020B3B84 ; =0x02106578
+ ldr r2, [r2, r4]
+ str r3, [r0, #0x10]
+ str r2, [r0, #0x14]
+_020B37FC:
+ bl FUN_020B4FAC
+ ldr r1, _020B3B88 ; =0x02106574
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B3830
+ mov r0, r10
+ bl FUN_020B4BF4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3830:
+ mov r0, r10
+ bl FUN_020B4CDC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3840:
+ ldr r0, _020B3B6C ; =0x021CDD70
+ ldr r1, _020B3B8C ; =0x021CDD74
+ ldr r2, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl FUN_020B4FA4
+ ldr r0, _020B3B58 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =0x021CDD70
+ ldreq r2, _020B3B78 ; =0x021CDEF4
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r2
+ beq _020B38A8
+ ldr r1, _020B3B6C ; =0x021CDD70
+ mov r0, #0x18
+ ldr r1, [r1, #0x0]
+ ldr r2, _020B3B7C ; =0x021CDF04
+ mul r3, r1, r0
+ ldr r1, _020B3B80 ; =0x021CDF08
+ ldr r2, [r2, r3]
+ ldr r0, _020B3B84 ; =0x02106578
+ ldr r1, [r1, r3]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+_020B38A8:
+ bl FUN_020B4FC4
+ ldr r1, _020B3B88 ; =0x02106574
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B38DC
+ mov r0, r10
+ bl FUN_020B4BF4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38DC:
+ mov r0, r10
+ bl FUN_020B4CDC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38EC:
+ cmp r9, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11,pc}
+_020B38F8: ; 0x020B38F8
+ ldr r4, _020B3B6C ; =0x021CDD70
+ ldr fp, _020B3B78 ; =0x021CDEF4
+ mov r7, #0x0
+ mov r6, #0x1
+_020B3908:
+ ldr r0, [r9, #0x10]
+ cmp r0, #0x0
+ beq _020B3B40
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3A8C
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ str r9, [r8, #0x74]
+ mov r0, r8
+ bl FUN_020B4F9C
+ ldr r1, [r9, #0x28]
+ ldr r2, [r9, #0x2c]
+ mov r0, r8
+ bl FUN_020B5034
+ mov r0, r8
+ bl FUN_020B4E0C
+ ldr r0, _020B3B58 ; =0x021CDD68
+ mov r1, r7
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3978
+ ldr r0, _020B3B5C ; =0x02106570
+ ldrh r2, [r0, #0x0]
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ cmp r2, r0
+ movne r0, r6
+ bne _020B397C
+_020B3978:
+ mov r0, r7
+_020B397C:
+ cmp r0, #0x0
+ beq _020B3A04
+ ldr r0, _020B3B64 ; =0x021CE8F4
+ ldr r0, [r0, #0x404]
+ cmp r0, #0x0
+ beq _020B39E4
+ ldr r0, _020B3B64 ; =0x021CE8F4
+ ldrh r1, [r0, #0x0]
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ bne _020B3A04
+ bl FUN_020B4010
+ ldr r0, _020B3B64 ; =0x021CE8F4
+ ldr r2, [r4, #0x0]
+ ldrh r1, [r0, #0x0]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =0x021CDDF4
+ ldrh r3, [r0, r2]
+ ldr r0, _020B3B64 ; =0x021CE8F4
+ add r2, r0, r1, lsl #0x2
+ ldr r0, _020B3B74 ; =0x021CE4F4
+ add r1, r0, r3, lsl #0x5
+ str r1, [r2, #0x4]
+ b _020B3A04
+_020B39E4:
+ bl FUN_020B4010
+_020B39E8: ; 0x020B39E8
+ ldr r0, [r4, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =0x021CDDF4
+ ldrh r1, [r0, r1]
+ ldr r0, _020B3B74 ; =0x021CE4F4
+ add r1, r0, r1, lsl #0x5
+_020B3A04:
+ ldr r0, _020B3B58 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r2, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r11
+ beq _020B3A44
+ ldr r2, [r4, #0x0]
+ mov r0, #0x18
+ mla r8, r2, r0, r11
+ ldr r0, _020B3B84 ; =0x02106578
+ ldr r3, [r8, #0x10]
+ mov r2, r0
+ str r3, [r2, #0x10]
+ ldr r3, [r8, #0x14]
+ str r3, [r2, #0x14]
+_020B3A44:
+ bl FUN_020B4FAC
+ ldr r0, _020B3B88 ; =0x02106574
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3A74
+ mov r0, r10
+ bl FUN_020B4BF4
+ b _020B3A7C
+_020B3A74:
+ mov r0, r10
+ bl FUN_020B4CDC
+_020B3A7C:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl FUN_020B4DA0
+ b _020B3B40
+_020B3A8C:
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ mov r0, r8
+ str r9, [r8, #0x74]
+ bl FUN_020B4F9C
+ mov r0, r8
+ bl FUN_020B4E0C
+ ldr r2, [r4, #0x0]
+ ldr r1, _020B3B8C ; =0x021CDD74
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl FUN_020B4FA4
+ ldr r0, _020B3B58 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r1, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r11
+ beq _020B3AFC
+ ldr r1, [r4, #0x0]
+ mov r0, #0x18
+ mla r3, r1, r0, r11
+ ldr r0, _020B3B84 ; =0x02106578
+ ldr r2, [r3, #0x10]
+ mov r1, r0
+ str r2, [r1, #0x10]
+ ldr r2, [r3, #0x14]
+ str r2, [r1, #0x14]
+_020B3AFC:
+ bl FUN_020B4FC4
+ ldr r0, _020B3B88 ; =0x02106574
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3B2C
+ mov r0, r10
+ bl FUN_020B4BF4
+ b _020B3B34
+_020B3B2C:
+ mov r0, r10
+ bl FUN_020B4CDC
+_020B3B34:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl FUN_020B4DA0
+_020B3B40:
+ ldr r9, [r9, #0x30]
+ cmp r9, #0x0
+ bne _020B3908
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3B54: .word 0x021CDD6C
+_020B3B58: .word 0x021CDD68
+_020B3B5C: .word 0x02106570
+_020B3B60: .word 0x0000FFFE
+_020B3B64: .word 0x021CE8F4
+_020B3B68: .word 0x021CE8F8
+_020B3B6C: .word 0x021CDD70
+_020B3B70: .word 0x021CDDF4
+_020B3B74: .word 0x021CE4F4
+_020B3B78: .word 0x021CDEF4
+_020B3B7C: .word 0x021CDF04
+_020B3B80: .word 0x021CDF08
+_020B3B84: .word 0x02106578
+_020B3B88: .word 0x02106574
+_020B3B8C: .word 0x021CDD74
+
+ arm_func_start FUN_020B3B90
+FUN_020B3B90: ; 0x020B3B90
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r0, _020B3C24 ; =0x021CDD6C
+ mov r12, r1
+ ldr r0, [r0, #0x0]
+ mov r3, r2
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x44]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+_020B3BBC: ; 0x020B3BBC
+ ldr r2, _020B3C28 ; =0x021CDD68
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3C2C ; =0x021CDD70
+ ldreq r4, _020B3C30 ; =0x021CDEF4
+ ldreq lr, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r6, lr, r2, r4
+ beq _020B3C0C
+ ldr lr, _020B3C2C ; =0x021CDD70
+ mov r2, #0x18
+ ldr lr, [lr, #0x0]
+ ldr r4, _020B3C34 ; =0x021CDF04
+ mul r5, lr, r2
+ ldr r2, _020B3C38 ; =0x021CDF08
+ ldr r4, [r4, r5]
+ ldr r6, _020B3C3C ; =0x02106578
+ ldr r2, [r2, r5]
+ str r4, [r6, #0x10]
+ str r2, [r6, #0x14]
+_020B3C0C:
+ str r6, [sp, #0x0]
+ ldr lr, [r1, #0x44]
+ mov r2, r12
+ blx lr
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3C24: .word 0x021CDD6C
+_020B3C28: .word 0x021CDD68
+_020B3C2C: .word 0x021CDD70
+_020B3C30: .word 0x021CDEF4
+_020B3C34: .word 0x021CDF04
+_020B3C38: .word 0x021CDF08
+_020B3C3C: .word 0x02106578
+
+ arm_func_start FUN_020B3C40
+FUN_020B3C40: ; 0x020B3C40
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r3, _020B3E2C ; =0x021CDD6C
+ add r4, r0, #0x38
+ ldr r0, [r3, #0x0]
+ mov r6, r1
+ mov r5, r2
+ bl FUN_020B278C
+_020B3C60: ; 0x020B3C60
+ cmp r0, #0x0
+ beq _020B3C90
+ ldrh r1, [r4, #0x4]
+ and r1, r1, #0xf000
+ mov r1, r1, lsl #0x4
+ mov r1, r1, lsr #0x10
+ bl FUN_020B10B0
+ ldr r1, [r4, #0x4]
+ and r0, r0, #0xf
+ bic r1, r1, #0xf000
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3C90:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ cmp r0, #0x0
+ beq _020B3DA4
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x1
+ beq _020B3CC8
+ ldrh r0, [r1, #0x88]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xc00
+ and r0, r0, #0x3
+ orr r0, r1, r0, lsl #0xa
+ str r0, [r4, #0x4]
+_020B3CC8:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x2
+ beq _020B3CF4
+ ldrh r0, [r1, #0x8a]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xf000
+ and r0, r0, #0xf
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3CF4:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x10
+ beq _020B3D2C
+ ldr r2, [r4, #0x4]
+ ldrh r0, [r1, #0x94]
+ mov r1, r2, lsl #0x10
+ bic r2, r2, #0xf000
+ add r0, r0, r1, lsr #0x1c
+ and r0, r0, #0xf
+ and r0, r0, #0xf
+ orr r0, r2, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3D2C:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x4
+ beq _020B3D60
+ ldr r0, [r1, #0x90]
+ cmp r0, #0x0
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x1000
+ strne r0, [r4, #0x0]
+ ldreq r0, [r4, #0x0]
+ biceq r0, r0, #0x1000
+ streq r0, [r4, #0x0]
+_020B3D60:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x8
+ beq _020B3DA4
+ ldr r0, [r4, #0x0]
+ ldrh r2, [r4, #0x4]
+ ldr r1, [r1, #0x8c]
+ bic r0, r0, #0xc00
+ orr r0, r0, r1, lsl #0xa
+ str r0, [r4, #0x0]
+ ldrh r0, [r4, #0x4]
+ and r1, r2, #0xf000
+ mov r1, r1, asr #0xc
+ bic r0, r0, #0xf000
+ orr r0, r0, r1, lsl #0xc
+ strh r0, [r4, #0x4]
+_020B3DA4:
+ ldr r0, _020B3E2C ; =0x021CDD6C
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x40]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+_020B3DC0: ; 0x020B3DC0
+ ldr r2, _020B3E30 ; =0x021CDD68
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3E34 ; =0x021CDD70
+ ldreq r4, _020B3E38 ; =0x021CDEF4
+ ldreq r3, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r4, r3, r2, r4
+ beq _020B3E10
+ ldr r3, _020B3E34 ; =0x021CDD70
+ mov r2, #0x18
+ ldr r4, [r3, #0x0]
+ ldr r3, _020B3E3C ; =0x021CDF04
+ mul r12, r4, r2
+ ldr r2, _020B3E40 ; =0x021CDF08
+ ldr r3, [r3, r12]
+ ldr r4, _020B3E44 ; =0x02106578
+ ldr r2, [r2, r12]
+ str r3, [r4, #0x10]
+ str r2, [r4, #0x14]
+_020B3E10:
+ str r4, [sp, #0x0]
+ ldr r4, [r1, #0x40]
+ mov r2, r6
+ mov r3, r5
+ blx r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3E2C: .word 0x021CDD6C
+_020B3E30: .word 0x021CDD68
+_020B3E34: .word 0x021CDD70
+_020B3E38: .word 0x021CDEF4
+_020B3E3C: .word 0x021CDF04
+_020B3E40: .word 0x021CDF08
+_020B3E44: .word 0x02106578
+
+ arm_func_start FUN_020B3E48
+FUN_020B3E48: ; 0x020B3E48
+ stmdb sp!, {r4,lr}
+ ldr r0, _020B3EC4 ; =0x021CDD6C
+ mov r2, r1
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r3, [r1, #0x3c]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4,pc}
+_020B3E68: ; 0x020B3E68
+ ldr r3, _020B3EC8 ; =0x021CDD68
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ ldreq r3, _020B3ECC ; =0x021CDD70
+ ldreq lr, _020B3ED0 ; =0x021CDEF4
+ ldreq r12, [r3, #0x0]
+ moveq r3, #0x18
+ mlaeq r3, r12, r3, lr
+ beq _020B3EB8
+ ldr ip, _020B3ECC ; =0x021CDD70
+ mov r3, #0x18
+ ldr r12, [r12, #0x0]
+ ldr lr, _020B3ED4 ; =0x021CDF04
+ mul r4, r12, r3
+ ldr ip, _020B3ED8 ; =0x021CDF08
+ ldr lr, [lr, r4]
+ ldr r3, _020B3EDC ; =0x02106578
+ ldr r12, [r12, r4]
+ str lr, [r3, #0x10]
+ str r12, [r3, #0x14]
+_020B3EB8:
+ ldr r12, [r1, #0x3c]
+ blx r12
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3EC4: .word 0x021CDD6C
+_020B3EC8: .word 0x021CDD68
+_020B3ECC: .word 0x021CDD70
+_020B3ED0: .word 0x021CDEF4
+_020B3ED4: .word 0x021CDF04
+_020B3ED8: .word 0x021CDF08
+_020B3EDC: .word 0x02106578
+
+ arm_func_start FUN_020B3EE0
+FUN_020B3EE0: ; 0x020B3EE0
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020B3FF4 ; =0x021CDD6C
+ mov r6, r0
+ ldr r0, [r2, #0x0]
+ mov r5, r1
+ ldr r4, [r0, #0x74]
+ ldr r0, [r4, #0x34]
+ cmp r0, #0x0
+ beq _020B3F7C
+ ldr r0, _020B3FF8 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =0x021CDD70
+ ldreq r1, _020B4000 ; =0x021CDEF4
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r1, r2, r0, r1
+ beq _020B3F54
+ ldr r1, _020B3FFC ; =0x021CDD70
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =0x021CDF04
+ mul r3, r2, r0
+ ldr r0, _020B4008 ; =0x021CDF08
+ ldr r2, [r1, r3]
+ ldr r1, _020B400C ; =0x02106578
+ ldr r0, [r0, r3]
+ str r2, [r1, #0x10]
+ str r0, [r1, #0x14]
+_020B3F54:
+ ldr r3, [r4, #0x34]
+ mov r0, r5
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r6, #0x30]
+ ldmeqia sp!, {r4-r6,pc}
+_020B3F74: ; 0x020B3F74
+ mov r0, #0x1
+ str r0, [r6, #0x30]
+_020B3F7C:
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020B3F88: ; 0x020B3F88
+ ldr r0, _020B3FF8 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =0x021CDD70
+ ldreq r2, _020B4000 ; =0x021CDEF4
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r3, r1, r0, r2
+ beq _020B3FD8
+ ldr r1, _020B3FFC ; =0x021CDD70
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =0x021CDF04
+ mul r6, r2, r0
+ ldr r0, _020B4008 ; =0x021CDF08
+ ldr r1, [r1, r6]
+ ldr r3, _020B400C ; =0x02106578
+ ldr r0, [r0, r6]
+ str r1, [r3, #0x10]
+ str r0, [r3, #0x14]
+_020B3FD8:
+ ldr r0, _020B3FF4 ; =0x021CDD6C
+ ldr r6, [r4, #0x38]
+ ldr r0, [r0, #0x0]
+ mov r1, r4
+ mov r2, r5
+ blx r6
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3FF4: .word 0x021CDD6C
+_020B3FF8: .word 0x021CDD68
+_020B3FFC: .word 0x021CDD70
+_020B4000: .word 0x021CDEF4
+_020B4004: .word 0x021CDF04
+_020B4008: .word 0x021CDF08
+_020B400C: .word 0x02106578
+
+ arm_func_start FUN_020B4010
+FUN_020B4010:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4154 ; =0x021CDD70
+ ldr r1, _020B4158 ; =0x021CDDF4
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r0, lsl #0x10
+ add r3, r1, r0, lsr #0xd
+ ldrh r0, [r3, #0x4]
+ cmp r0, #0x1
+ beq _020B4044
+ cmp r0, #0x2
+ movne r2, #0x0
+_020B4044:
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B4050: ; 0x020B4050
+ ldr r0, _020B415C ; =0x021CDD60
+ mov r2, #0x10
+ ldrh r4, [r0, #0x0]
+ cmp r4, #0x1f
+ addcc r1, r4, #0x1
+ strcch r1, [r0, #0x0]
+ ldr r0, _020B4160 ; =0x021CE4F4
+ ldrh r5, [r3, #0x2]
+ add r0, r0, r4, lsl #0x5
+ add r1, r0, #0x10
+ mvn r0, #0x0
+ strh r4, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B4154 ; =0x021CDD70
+ ldr r1, _020B4164 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ mov r1, r0, lsl #0x10
+ cmp r2, #0x0
+ ldr r3, _020B4158 ; =0x021CDDF4
+ mov r1, r1, lsr #0xd
+ ldrh r1, [r3, r1]
+ ldr r3, _020B4160 ; =0x021CE4F4
+ moveq r2, #0x18
+ add r1, r3, r1, lsl #0x5
+ ldreq r3, _020B4168 ; =0x021CE1F4
+ mlaeq r12, r0, r2, r3
+ beq _020B40E4
+ mov r2, #0x18
+ mul r3, r0, r2
+ ldr r2, _020B416C ; =0x021CDF04
+ ldr r0, _020B4170 ; =0x021CDF08
+ ldr r2, [r2, r3]
+ ldr ip, _020B4174 ; =0x02106578
+ ldr r0, [r0, r3]
+ str r2, [r12, #0x10]
+ str r0, [r12, #0x14]
+_020B40E4:
+ ldr r2, [r12, #0x0]
+ ldr r0, _020B4154 ; =0x021CDD70
+ str r2, [r1, #0x0]
+ ldr r2, [r12, #0x4]
+ str r2, [r1, #0x4]
+ ldr r2, [r12, #0x8]
+ str r2, [r1, #0x8]
+ ldr r2, [r12, #0xc]
+ str r2, [r1, #0xc]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ movs lr, r0, lsr #0x10
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r5,pc}
+_020B411C: ; 0x020B411C
+ ldr r3, _020B4158 ; =0x021CDDF4
+ mov r0, #0x3
+_020B4124:
+ add r2, r3, lr, lsl #0x3
+ ldrh r1, [r2, #0x2]
+ mov r12, lr, lsl #0x3
+ cmp r5, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020B413C: ; 0x020B413C
+ strh r0, [r2, #0x4]
+ strh r4, [r3, r12]
+ subs lr, lr, #0x1
+ bpl _020B4124
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4154: .word 0x021CDD70
+_020B4158: .word 0x021CDDF4
+_020B415C: .word 0x021CDD60
+_020B4160: .word 0x021CE4F4
+_020B4164: .word 0x021CDD68
+_020B4168: .word 0x021CE1F4
+_020B416C: .word 0x021CDF04
+_020B4170: .word 0x021CDF08
+_020B4174: .word 0x02106578
+
+ arm_func_start FUN_020B4178
+FUN_020B4178: ; 0x020B4178
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4220 ; =0x021CDD68
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B41B8
+ ldr r1, _020B4224 ; =0x021CDD70
+ mov r0, #0x18
+ ldr r12, [r1, #0x0]
+ ldr r1, _020B4228 ; =0x021CDF04
+ mul r3, r12, r0
+ mov r2, #0x0
+ ldr r0, _020B422C ; =0x021CDF08
+ str r2, [r1, r3]
+ str r2, [r0, r3]
+ b _020B420C
+_020B41B8:
+ ldr r0, _020B4224 ; =0x021CDD70
+ mov lr, #0x18
+ ldr r1, [r0, #0x0]
+ ldr r4, _020B4230 ; =0x021CDEF4
+ mul r3, r1, lr
+ mov r2, #0x1000
+ str r2, [r4, r3]
+ add r5, r4, r3
+ mov r1, #0x0
+ str r1, [r5, #0x4]
+ str r1, [r5, #0x8]
+ str r2, [r5, #0xc]
+ str r1, [r5, #0x10]
+ str r1, [r5, #0x14]
+ ldr r12, [r0, #0x0]
+ ldr r4, _020B4234 ; =0x021CE1F4
+ ldmia r5!, {r0-r3}
+ mla lr, r12, lr, r4
+ stmia lr!, {r0-r3}
+ ldmia r5, {r0-r1}
+ stmia lr, {r0-r1}
+_020B420C:
+ ldr r0, _020B4238 ; =0x021CDD74
+ mov r1, #0x0
+ str r1, [r0, r12, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4220: .word 0x021CDD68
+_020B4224: .word 0x021CDD70
+_020B4228: .word 0x021CDF04
+_020B422C: .word 0x021CDF08
+_020B4230: .word 0x021CDEF4
+_020B4234: .word 0x021CE1F4
+_020B4238: .word 0x021CDD74
+
+ arm_func_start FUN_020B423C
+FUN_020B423C: ; 0x020B423C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x1c
+ ldr r4, [r0, #0x4]
+ ldr r3, [r1, #0x8]
+ mov r12, r2
+ smull r6, r5, r4, r3
+ ldr r4, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ cmp r12, r1
+ smlal r6, r5, r4, r3
+ mov r3, r6, lsr #0xc
+ addeq r2, sp, #0x0
+ orr r3, r3, r5, lsl #0x14
+ str r3, [r2, #0x0]
+ ldr r4, [r0, #0x4]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x0]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x4]
+ add lr, sp, #0x0
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0x4]
+ ldr r4, [r0, #0xc]
+ ldr r3, [r1, #0x8]
+ ldr r5, [r0, #0x8]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x0]
+ cmp r2, lr
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0x8]
+ ldr r4, [r0, #0xc]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x8]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x4]
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0xc]
+ ldr r4, [r0, #0x14]
+ ldr r3, [r1, #0x8]
+ ldr r5, [r0, #0x10]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x0]
+ ldr r4, [r1, #0x10]
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ add r3, r4, r3
+ str r3, [r2, #0x10]
+ ldr r4, [r0, #0x14]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x10]
+ ldr r0, [r1, #0x4]
+ smull r6, r3, r4, r3
+ smlal r6, r3, r5, r0
+ mov r0, r6, lsr #0xc
+ ldr r1, [r1, #0x14]
+ orr r0, r0, r3, lsl #0x14
+ add r0, r1, r0
+ str r0, [r2, #0x14]
+ ldmeqia lr!, {r0-r3}
+ stmeqia r12!, {r0-r3}
+ ldmeqia lr, {r0-r1}
+ stmeqia r12, {r0-r1}
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B4358
+FUN_020B4358: ; 0x020B4358
+ stmdb sp!, {r4,lr}
+ ldr r2, _020B43A0 ; =0x021CED04
+ mov r1, #0x30
+ ldr r2, [r2, #0x0]
+ mla r4, r0, r1, r2
+ mov r0, r4
+ bl FUN_020B10CC
+_020B4374: ; 0x020B4374
+ mov r0, #0x0
+ str r0, [r4, #0xc]
+ str r0, [r4, #0x10]
+ str r0, [r4, #0x14]
+ str r0, [r4, #0x18]
+ str r0, [r4, #0x1c]
+ str r0, [r4, #0x20]
+ str r0, [r4, #0x24]
+ str r0, [r4, #0x28]
+ str r0, [r4, #0x2c]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B43A0: .word 0x021CED04
+
+ arm_func_start FUN_020B43A4
+FUN_020B43A4: ; 0x020B43A4
+ ldr r1, _020B43F8 ; =0x021CED00
+ mov r0, #0x0
+ ldr r3, [r1, #0x0]
+ cmp r3, #0x0
+ bls _020B43F0
+ ldr r1, _020B43FC ; =0x021CED04
+ ldr r2, [r1, #0x0]
+ mov r12, r2
+_020B43C4:
+ ldr r1, [r12, #0x1c]
+ cmp r1, #0x1
+ movne r1, #0x30
+ mlane r1, r0, r1, r2
+ movne r2, #0x1
+ strne r2, [r1, #0x1c]
+ bxne lr
+ add r0, r0, #0x1
+ cmp r0, r3
+ add r12, r12, #0x30
+ blo _020B43C4
+_020B43F0:
+ mvn r0, #0x0
+ bx lr
+ .balign 4
+_020B43F8: .word 0x021CED00
+_020B43FC: .word 0x021CED04
+
+ arm_func_start FUN_020B4400
+FUN_020B4400: ; 0x020B4400
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ bl FUN_020B469C
+ mvn r1, #0x0
+ str r1, [r0, #0x24]
+ str r5, [r0, #0x28]
+ str r4, [r0, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B442C
+FUN_020B442C: ; 0x020B442C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, _020B4558 ; =0x021CED00
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+_020B4450: ; 0x020B4450
+ ldr r0, [sp, #0x0]
+ mov r5, #0x1
+ str r0, [sp, #0x4]
+ mov r11, r0
+ str r0, [sp, #0x8]
+ str r0, [sp, #0xc]
+_020B4468:
+ ldr r0, _020B455C ; =0x021CED04
+ ldr r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ add r8, r1, r0
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ beq _020B4528
+ ldr r9, [sp, #0x8]
+ mov r0, r9
+ cmp r0, #0x3
+ bge _020B4520
+ add r4, r8, #0x24
+_020B4498:
+ mov r6, r5, lsl r9
+ mov r1, r11
+ ldr r0, [r8, #0x24]
+ ands r0, r0, r6
+ beq _020B44B8
+ ldr r0, [r8, #0x20]
+ ands r0, r0, r6
+ movne r1, r5
+_020B44B8:
+ cmp r1, #0x0
+ beq _020B4514
+ ldr r0, _020B4560 ; =0x020FF8C4
+ cmp r9, #0x0
+ ldr r7, [r0, r9, lsl #0x2]
+ ldreq r10, [r8, #0x14]
+ mov r0, r8
+ mov r1, r9
+ ldrne r10, [r8, #0x10]
+ bl FUN_020B10BC
+ mov r1, r0
+ mov r0, r7
+ ldr r7, _020B4564 ; =0x021CECFC
+ ldr r2, [r8, #0x28]
+ ldr r3, [r8, #0x2c]
+ ldr r7, [r7, #0x0]
+ add r2, r10, r2
+ blx r7
+ cmp r0, #0x0
+ ldrne r1, [r4, #0x0]
+ mvnne r0, r6
+ andne r0, r1, r0
+ strne r0, [r4, #0x0]
+_020B4514:
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blt _020B4498
+_020B4520:
+ ldr r0, [sp, #0xc]
+ str r0, [r8, #0x20]
+_020B4528:
+ ldr r0, _020B4558 ; =0x021CED00
+ ldr r1, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ add r0, r0, #0x1
+ str r0, [sp, #0x0]
+ cmp r0, r1
+ ldr r0, [sp, #0x4]
+ add r0, r0, #0x30
+ str r0, [sp, #0x4]
+ blo _020B4468
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B4558: .word 0x021CED00
+_020B455C: .word 0x021CED04
+_020B4560: .word 0x020FF8C4
+_020B4564: .word 0x021CECFC
+
+ arm_func_start FUN_020B4568
+FUN_020B4568: ; 0x020B4568
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020B45E4 ; =0x021CECFC
+ movs r6, r1
+ ldr r1, _020B45E8 ; =0x021CED00
+ ldr r3, _020B45EC ; =0x021CED04
+ mov r7, r0
+ str r2, [r12, #0x0]
+ mov r5, #0x0
+ addeq sp, sp, #0x4
+ str r7, [r3, #0x0]
+ str r6, [r1, #0x0]
+ ldmeqia sp!, {r4-r7,pc}
+_020B459C: ; 0x020B459C
+ mov r4, r5
+_020B45A0:
+ mov r0, r7
+ bl FUN_020B10CC
+ str r4, [r7, #0xc]
+ str r4, [r7, #0x10]
+ str r4, [r7, #0x14]
+ str r4, [r7, #0x18]
+ str r4, [r7, #0x1c]
+ str r4, [r7, #0x20]
+ str r4, [r7, #0x24]
+ str r4, [r7, #0x28]
+ add r5, r5, #0x1
+ str r4, [r7, #0x2c]
+ cmp r5, r6
+ add r7, r7, #0x30
+ blo _020B45A0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B45E4: .word 0x021CECFC
+_020B45E8: .word 0x021CED00
+_020B45EC: .word 0x021CED04
+
+ arm_func_start FUN_020B45F0
+FUN_020B45F0: ; 0x020B45F0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020B4698 ; =0x021CED04
+ mov r4, #0x30
+ ldr r12, [r12, #0x0]
+ mov r7, r1
+ mla r4, r0, r4, r12
+ mov r0, r4
+ mov r6, r2
+ mov r5, r3
+ bl FUN_020B10CC
+_020B461C: ; 0x020B461C
+ mvn r0, #0x0
+ cmp r7, r0
+ beq _020B4638
+ mov r0, r4
+ mov r2, r7
+ mov r1, #0x0
+ bl FUN_020B10C4
+_020B4638:
+ mvn r0, #0x0
+ cmp r6, r0
+ beq _020B4654
+ mov r0, r4
+ mov r2, r6
+ mov r1, #0x1
+ bl FUN_020B10C4
+_020B4654:
+ mvn r0, #0x0
+ cmp r5, r0
+ beq _020B4670
+ mov r0, r4
+ mov r2, r5
+ mov r1, #0x2
+ bl FUN_020B10C4
+_020B4670:
+ ldr r1, [sp, #0x18]
+ ldr r0, [sp, #0x1c]
+ str r1, [r4, #0xc]
+ ldr r1, [sp, #0x20]
+ str r0, [r4, #0x10]
+ ldr r0, [sp, #0x24]
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B4698: .word 0x021CED04
+
+ arm_func_start FUN_020B469C
+FUN_020B469C: ; 0x020B469C
+ ldr r2, _020B46B0 ; =0x021CED04
+ mov r1, #0x30
+ ldr r2, [r2, #0x0]
+ mla r0, r1, r0, r2
+ bx lr
+ .balign 4
+_020B46B0: .word 0x021CED04
+
+ arm_func_start FUN_020B46B4
+FUN_020B46B4: ; 0x020B46B4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x1c
+ add r12, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r7, r3
+ mov r6, r0
+ ldr r1, [sp, #0x30]
+ ldr r2, [sp, #0x34]
+ ldr r3, [sp, #0x38]
+ mov r0, r7
+ str r12, [sp, #0x0]
+ bl FUN_020B498C
+ ldr r2, [r7, #0x0]
+ and r1, r2, #0x300
+ cmp r1, #0x100
+ beq _020B4708
+ cmp r1, #0x300
+ beq _020B4708
+ and r0, r2, #0x30000000
+ orr r1, r1, r0
+_020B4708:
+ cmp r1, #0x300
+ bne _020B478C
+ ldr r0, _020B4914 ; =0xC000C000
+ ldr r1, _020B4918 ; =0x021CED08
+ and r0, r2, r0
+ and r2, r0, #0xc0000000
+ mov r12, r2, lsr #0x1e
+ and r0, r0, #0xc000
+ mov lr, r0, asr #0xe
+ ldr r3, _020B491C ; =0x020FF8AC
+ ldr r0, [r1, #0x0]
+ ldr r2, _020B4920 ; =0x020FF894
+ cmp r0, #0x0
+ ldrne r0, _020B4924 ; =0x021CED10
+ mov r12, r12, lsl #0x1
+ add r1, r2, lr, lsl #0x3
+ add r3, r3, lr, lsl #0x3
+ ldrh r2, [r12, r3]
+ ldrh r1, [r12, r1]
+ ldrne r0, [r0, #0x0]
+ mov r2, r2, asr #0x1
+ addne r3, r0, r4, lsl #0xc
+ mov r1, r1, asr #0x1
+ add r0, r5, r1
+ add r2, r6, r2
+ ldr r1, _020B4928 ; =0x04000470
+ mov r2, r2, lsl #0xc
+ str r2, [r1, #0x0]
+ mov r0, r0, lsl #0xc
+ moveq r3, r4, lsl #0xc
+ str r0, [r1, #0x0]
+ str r3, [r1, #0x0]
+ b _020B47C0
+_020B478C:
+ ldr r0, _020B4918 ; =0x021CED08
+ ldr r1, _020B4928 ; =0x04000470
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldrne r0, _020B4924 ; =0x021CED10
+ ldrne r0, [r0, #0x0]
+ addne r2, r0, r4, lsl #0xc
+ mov r0, r6, lsl #0xc
+ str r0, [r1, #0x0]
+ mov r0, r5, lsl #0xc
+ moveq r2, r4, lsl #0xc
+ str r0, [r1, #0x0]
+ str r2, [r1, #0x0]
+_020B47C0:
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x18]
+ ldr r2, _020B492C ; =0x0400046C
+ mov r0, r0, lsl #0xc
+ str r0, [r2, #0x0]
+ mov r0, r1, lsl #0xc
+ str r0, [r2, #0x0]
+ mov r1, #0x1000
+ str r1, [r2, #0x0]
+ ldr r0, _020B4930 ; =0x04000500
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ ldr r1, [sp, #0x10]
+ mov r0, r0, lsl #0x8
+ mov r1, r1, lsl #0x8
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r2, r2, r0, lsl #0x10
+ ldr r1, _020B4934 ; =0x04000488
+ ldr r0, _020B4938 ; =0x04000490
+ str r2, [r1, #0x0]
+ mov r2, #0x10000
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x10]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r3, r4, r2, lsl #0x10
+ ldr r2, _020B493C ; =0x00010040
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x8]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r2, r4, r2, lsl #0x10
+ str r2, [r1, #0x0]
+ mov r2, #0x40
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r2, r4, r2, lsl #0x10
+ str r2, [r1, #0x0]
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ ldr r1, _020B4940 ; =0x04000504
+ ldr r0, _020B4918 ; =0x021CED08
+ str r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r7,pc}
+_020B48F4: ; 0x020B48F4
+ ldr r1, _020B4924 ; =0x021CED10
+ ldr r0, _020B4944 ; =0x02106590
+ ldr r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ add r0, r2, r0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B4914: .word 0xC000C000
+_020B4918: .word 0x021CED08
+_020B491C: .word 0x020FF8AC
+_020B4920: .word 0x020FF894
+_020B4924: .word 0x021CED10
+_020B4928: .word 0x04000470
+_020B492C: .word 0x0400046C
+_020B4930: .word 0x04000500
+_020B4934: .word 0x04000488
+_020B4938: .word 0x04000490
+_020B493C: .word 0x00010040
+_020B4940: .word 0x04000504
+_020B4944: .word 0x02106590
+
+ arm_func_start FUN_020B4948
+FUN_020B4948:
+ ldr r0, _020B4954 ; =0x02106590
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4954: .word 0x02106590
+
+ arm_func_start FUN_020B4958
+FUN_020B4958:
+ ldr r1, _020B4964 ; =0x02106590
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020B4964: .word 0x02106590
+
+ arm_func_start FUN_020B4968
+FUN_020B4968: ; 0x020B4968
+ ldr r0, _020B4978 ; =0x021CED10
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4978: .word 0x021CED10
+
+ arm_func_start FUN_020B497C
+FUN_020B497C:
+ ldr r1, _020B4988 ; =0x021CED08
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020B4988: .word 0x021CED08
+
+ arm_func_start FUN_020B498C
+FUN_020B498C: ; 0x020B498C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r6, r0
+ ldr r4, [r6, #0x0]
+ ldr r0, _020B4BCC ; =0xC000C000
+ ldr r5, [r6, #0x4]
+ and r4, r4, r0
+ and r0, r4, #0xc0000000
+ and r4, r4, #0xc000
+ mov lr, r0, lsr #0x1e
+ ldr r0, _020B4BD0 ; =0x020FF8AC
+ mov r12, r4, asr #0xe
+ ldr r8, _020B4BD4 ; =0x020FF894
+ mov r4, lr, lsl #0x1
+ add r0, r0, r12, lsl #0x3
+ ldrh r9, [r4, r0]
+ ldr r0, [sp, #0x28]
+ mov r5, r5, lsl #0x16
+ mov r5, r5, lsr #0x16
+ mov r7, r5, lsl #0x10
+ str r9, [r0, #0x10]
+ add r5, r8, r12, lsl #0x3
+ ldrh r8, [r4, r5]
+ mov r5, r1
+ mov r4, r3
+ str r8, [r0, #0x14]
+ ldr r1, [r5, #0x14]
+ mov r7, r7, lsr #0x10
+ cmp r1, #0x0
+ bne _020B4A74
+ ldr r1, [r5, #0x8]
+ mov r2, r2, lsr #0x3
+ orr r1, r2, r1, lsl #0x1a
+ ldr r2, [r5, #0x0]
+ orr r1, r1, #0x40000000
+ ldr r3, [r5, #0x4]
+ orr r1, r1, r2, lsl #0x14
+ orr r2, r1, r3, lsl #0x17
+ ldr r8, [r5, #0x10]
+ ldr r1, _020B4BD8 ; =0x040004A8
+ orr r2, r2, r8, lsl #0x1d
+ str r2, [r1, #0x0]
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0x0]
+ cmp r1, #0x4
+ moveq r1, r7, lsl #0xf
+ moveq r7, r1, lsr #0x10
+ ldr r1, _020B4BDC ; =0x020FF8D8
+ ldr r1, [r1, r2, lsl #0x2]
+ sub r1, r1, #0x1
+ and r1, r7, r1
+ mov r1, r1, lsl #0xf
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x0]
+ mov r1, r7, asr r1
+ mov r1, r1, lsl #0xf
+ str r1, [r0, #0x4]
+ b _020B4AE0
+_020B4A74:
+ and r1, r1, #0x700000
+ mov r1, r1, asr #0x14
+ mov r12, r12, lsl #0x10
+ add r1, r1, #0x5
+ ldr r3, [r5, #0x8]
+ mov lr, lr, lsl #0x10
+ ldr sb, _020B4BE0 ; =0x020FF8F8
+ mov r12, r12, lsr #0x10
+ ldr r8, _020B4BE4 ; =0x020FF928
+ add r1, r2, r7, lsl r1
+ mov r2, r3, lsl #0x1a
+ orr r3, r2, r1, lsr #0x3
+ mov r7, lr, lsr #0x10
+ add r2, r9, r12, lsl #0x4
+ add r1, r8, r12, lsl #0x4
+ ldr r2, [r2, r7, lsl #0x2]
+ orr r3, r3, #0x40000000
+ ldr r1, [r1, r7, lsl #0x2]
+ orr r2, r3, r2, lsl #0x14
+ ldr r3, [r5, #0x10]
+ orr r2, r2, r1, lsl #0x17
+ ldr r1, _020B4BD8 ; =0x040004A8
+ orr r2, r2, r3, lsl #0x1d
+ str r2, [r1, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+_020B4AE0:
+ ldr r2, [r0, #0x0]
+ ldr r1, [r0, #0x10]
+ add r1, r2, r1, lsl #0xc
+ str r1, [r0, #0x8]
+ ldr r2, [r0, #0x4]
+ ldr r1, [r0, #0x14]
+ add r1, r2, r1, lsl #0xc
+ str r1, [r0, #0xc]
+ ldr r1, [r6, #0x0]
+ mov r2, r1, lsl #0x2
+ mov r1, r1, lsl #0x3
+ movs r3, r1, lsr #0x1f
+ mov r12, r2, lsr #0x1f
+ ldrne r2, [r0, #0x0]
+ ldrne r1, [r0, #0x8]
+ strne r1, [r0, #0x0]
+ strne r2, [r0, #0x8]
+ cmp r12, #0x0
+ ldrne r2, [r0, #0x4]
+ ldrne r1, [r0, #0xc]
+ strne r1, [r0, #0x4]
+ ldr r1, _020B4BE8 ; =0x021CED0C
+ strne r2, [r0, #0xc]
+ ldr r7, [r1, #0x0]
+ cmp r7, #0x0
+ beq _020B4B60
+ str r3, [sp, #0x0]
+ add r1, r0, #0x4
+ add r2, r0, #0x8
+ add r3, r0, #0xc
+ str r12, [sp, #0x4]
+ blx r7
+_020B4B60:
+ ldr r0, [r6, #0x4]
+ ldr r1, [r6, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x1c
+ mov r3, r1, lsl #0x12
+ ldr r1, [r5, #0xc]
+ mov r0, r0, lsl #0x10
+ ldr r2, _020B4BEC ; =0x020FF8D0
+ mov r3, r3, lsr #0x1f
+ cmp r1, #0x0
+ mov r0, r0, lsr #0x10
+ ldr r1, [r2, r3, lsl #0x2]
+ movne r0, r0, lsl #0x9
+ bne _020B4BA4
+ cmp r1, #0x4
+ moveq r0, #0x0
+ movne r0, r0, lsl #0x5
+_020B4BA4:
+ cmp r1, #0x2
+ moveq r2, #0x1
+ movne r2, #0x0
+ add r1, r4, r0
+ rsb r0, r2, #0x4
+ mov r1, r1, lsr r0
+ ldr r0, _020B4BF0 ; =0x040004AC
+ str r1, [r0, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B4BCC: .word 0xC000C000
+_020B4BD0: .word 0x020FF8AC
+_020B4BD4: .word 0x020FF894
+_020B4BD8: .word 0x040004A8
+_020B4BDC: .word 0x020FF8D8
+_020B4BE0: .word 0x020FF8F8
+_020B4BE4: .word 0x020FF928
+_020B4BE8: .word 0x021CED0C
+_020B4BEC: .word 0x020FF8D0
+_020B4BF0: .word 0x040004AC
+
+ arm_func_start FUN_020B4BF4
+FUN_020B4BF4: ; 0x020B4BF4
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020B4CD8 ; =0x021CED14
+ mov r6, r0
+ ldr r3, [r2, #0x0]
+ mov r4, r1
+ ldr r5, [r3, #0x0]
+ ldr r0, [r5, #0x10]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020B4C18: ; 0x020B4C18
+ mov r0, #0x1
+ str r0, [r3, #0x30]
+ ldr r3, [r5, #0x18]
+ cmp r3, #0x0
+ beq _020B4C38
+ ldr r0, [r2, #0x0]
+ mov r1, r6
+ blx r3
+_020B4C38:
+ ldr r0, _020B4CD8 ; =0x021CED14
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B4CB8
+ mvn r0, #0x0
+ cmp r4, r0
+ beq _020B4C7C
+ mov r0, r4
+ ldr r4, [r5, #0x14]
+ bl FUN_020B469C
+ mov r3, #0x1
+ mvn r1, r3, lsl r4
+ ldr r2, [r0, #0x20]
+ and r1, r2, r1
+ orr r1, r1, r3, lsl r4
+ str r1, [r0, #0x20]
+_020B4C7C:
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B4CB8
+_020B4C8C:
+ b _020B4C9C
+_020B4C90:
+ b _020B4CAC
+_020B4C94:
+ b _020B4CAC
+_020B4C98:
+ b _020B4CB8
+_020B4C9C:
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020B5090
+ b _020B4CB8
+_020B4CAC:
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020B53B4
+_020B4CB8:
+ ldr r2, [r5, #0x1c]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020B4CC4: ; 0x020B4CC4
+ ldr r0, _020B4CD8 ; =0x021CED14
+ mov r1, r6
+ ldr r0, [r0, #0x0]
+ blx r2
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B4CD8: .word 0x021CED14
+
+ arm_func_start FUN_020B4CDC
+FUN_020B4CDC:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B4D9C ; =0x021CED14
+ mov r5, r0
+ ldr r2, [r1, #0x0]
+ ldr r4, [r2, #0x0]
+ ldr r0, [r4, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B4D04: ; 0x020B4D04
+ mov r0, #0x1
+ str r0, [r2, #0x30]
+ ldr r2, [r4, #0x18]
+ cmp r2, #0x0
+ beq _020B4D24
+ ldr r0, [r1, #0x0]
+ mov r1, r5
+ blx r2
+_020B4D24:
+ ldr r0, _020B4D9C ; =0x021CED14
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B4D74
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B4D74
+_020B4D48:
+ b _020B4D58
+_020B4D4C:
+ b _020B4D68
+_020B4D50:
+ b _020B4D68
+_020B4D54:
+ b _020B4D74
+_020B4D58:
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020B5090
+ b _020B4D74
+_020B4D68:
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020B53B4
+_020B4D74:
+ ldr r2, [r4, #0x1c]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B4D84: ; 0x020B4D84
+ ldr r0, _020B4D9C ; =0x021CED14
+ mov r1, r5
+ ldr r0, [r0, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4D9C: .word 0x021CED14
+
+ arm_func_start FUN_020B4DA0
+FUN_020B4DA0: ; 0x020B4DA0
+ ldr r0, _020B4E00 ; =0x021CED14
+ ldr r3, [r0, #0x0]
+ ldr r1, [r3, #0x0]
+ ldr r1, [r1, #0x14]
+ cmp r1, #0x0
+ bne _020B4DD8
+ ldr r2, _020B4E04 ; =0x04000440
+ mov r1, #0x0
+ ldr r0, _020B4E08 ; =0x04000448
+ str r1, [r2, #0x0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ str r1, [r2, #0x0]
+ b _020B4DF0
+_020B4DD8:
+ mov r2, #0x0
+ str r2, [r3, #0x10]
+ ldr r1, [r0, #0x0]
+ str r2, [r1, #0x2c]
+ ldr r0, [r0, #0x0]
+ str r2, [r0, #0x28]
+_020B4DF0:
+ ldr r0, _020B4E00 ; =0x021CED14
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4E00: .word 0x021CED14
+_020B4E04: .word 0x04000440
+_020B4E08: .word 0x04000448
+
+ arm_func_start FUN_020B4E0C
+FUN_020B4E0C: ; 0x020B4E0C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r2, _020B4F28 ; =0x021CED14
+ mov r4, r0
+ str r4, [r2, #0x0]
+ ldr r0, [r4, #0x0]
+ ldr r5, [r0, #0x14]
+ cmp r5, #0x0
+ bne _020B4ED8
+ ldr lr, _020B4F2C ; =0x04000440
+ mov r1, #0x0
+ ldr r0, _020B4F30 ; =0x04000444
+ str r1, [lr, #0x0]
+ str r1, [r0, #0x0]
+ ldr r12, [r4, #0x0]
+ ldr r0, _020B4F34 ; =0x04000470
+ ldr r3, [r12, #0x0]
+ ldr r12, [r12, #0x4]
+ rsb r3, r3, #0x0
+ str r3, [r0, #0x0]
+ rsb r3, r12, #0x0
+ str r3, [r0, #0x0]
+ str r1, [r0, #0x0]
+ mov r0, #0x1
+ str r0, [lr, #0x0]
+ ldr r0, [r2, #0x0]
+ ldr r5, [r0, #0x8]
+ mov r0, r5
+ bl FUN_020B19FC
+_020B4E80: ; 0x020B4E80
+ cmp r0, #0x0
+ moveq r0, #0x0
+ beq _020B4E98
+ mov r0, r5
+ mov r1, #0x0
+ bl FUN_020B1A14
+_020B4E98:
+ ldr r1, _020B4F28 ; =0x021CED14
+ str r0, [r4, #0x14]
+ ldr r0, [r1, #0x0]
+ mov r1, #0x0
+ ldr r5, [r0, #0xc]
+ mov r0, r5
+ bl FUN_020B19A8
+_020B4EB4: ; 0x020B4EB4
+ cmp r0, #0x0
+ moveq r0, #0x0
+ beq _020B4ECC
+ mov r0, r5
+ mov r1, #0x0
+ bl FUN_020B19C4
+_020B4ECC:
+ add sp, sp, #0x4
+ str r0, [r4, #0x18]
+ ldmia sp!, {r4-r5,pc}
+_020B4ED8:
+ ldr r4, [r4, #0x8]
+ mov r1, r5
+ mov r0, r4
+ bl FUN_020B19FC
+_020B4EE8: ; 0x020B4EE8
+ cmp r0, #0x0
+ moveq r1, #0x0
+ beq _020B4F14
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020B1A14
+ ldr r1, [r4, #0x20]
+ and r1, r1, #0x700000
+ mov r1, r1, asr #0x14
+ add r1, r1, #0x5
+ mov r1, r0, lsr r1
+_020B4F14:
+ ldr r0, _020B4F28 ; =0x021CED14
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4F28: .word 0x021CED14
+_020B4F2C: .word 0x04000440
+_020B4F30: .word 0x04000444
+_020B4F34: .word 0x04000470
+
+ arm_func_start FUN_020B4F38
+FUN_020B4F38: ; 0x020B4F38
+ cmp r1, #0x0
+ ldrne r1, [r0, #0x24]
+ orrne r1, r1, #0x1
+ strne r1, [r0, #0x24]
+ ldreq r1, [r0, #0x24]
+ biceq r1, r1, #0x1
+ streq r1, [r0, #0x24]
+ cmp r2, #0x0
+ ldrne r1, [r0, #0x24]
+ orrne r1, r1, #0x2
+ strne r1, [r0, #0x24]
+ ldreq r1, [r0, #0x24]
+ biceq r1, r1, #0x2
+ streq r1, [r0, #0x24]
+ bx lr
+
+ arm_func_start FUN_020B4F74
+FUN_020B4F74:
+ ldr r0, [r0, #0x24]
+ ands r0, r0, #0x2
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B4F88
+FUN_020B4F88:
+ ldr r0, [r0, #0x24]
+ ands r0, r0, #0x1
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B4F9C
+FUN_020B4F9C: ; 0x020B4F9C
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020B4FA4
+FUN_020B4FA4: ; 0x020B4FA4
+ str r1, [r0, #0x34]
+ bx lr
+
+ arm_func_start FUN_020B4FAC
+FUN_020B4FAC: ; 0x020B4FAC
+ ldr r2, _020B4FC0 ; =0x021CED14
+ ldr r2, [r2, #0x0]
+ str r0, [r2, #0x2c]
+ str r1, [r2, #0x28]
+ bx lr
+ .balign 4
+_020B4FC0: .word 0x021CED14
+
+ arm_func_start FUN_020B4FC4
+FUN_020B4FC4: ; 0x020B4FC4
+ ldr r1, _020B5028 ; =0x021CED14
+ mov r3, #0x0
+ ldr r12, [r1, #0x0]
+ mov r1, #0x1000
+ str r0, [r12, #0x2c]
+ ldr r2, [r0, #0x0]
+ str r2, [r12, #0x40]
+ ldr r2, [r0, #0x4]
+ str r2, [r12, #0x44]
+ str r3, [r12, #0x48]
+ ldr r2, [r0, #0x8]
+ str r2, [r12, #0x4c]
+ ldr r2, [r0, #0xc]
+ str r2, [r12, #0x50]
+ str r3, [r12, #0x54]
+ str r3, [r12, #0x58]
+ str r3, [r12, #0x5c]
+ str r1, [r12, #0x60]
+ ldr r1, [r0, #0x10]
+ str r1, [r12, #0x64]
+ ldr r0, [r0, #0x14]
+ str r0, [r12, #0x68]
+ ldr r0, [r12, #0x34]
+ str r0, [r12, #0x6c]
+ bx lr
+ .balign 4
+_020B5028: .word 0x021CED14
+
+ arm_func_start FUN_020B502C
+FUN_020B502C: ; 0x020B502C
+ str r1, [r0, #0x4]
+ bx lr
+
+ arm_func_start FUN_020B5034
+FUN_020B5034: ; 0x020B5034
+ str r1, [r0, #0x1c]
+ str r2, [r0, #0x20]
+ bx lr
+
+ arm_func_start FUN_020B5040
+FUN_020B5040: ; 0x020B5040
+ str r1, [r0, #0x8]
+ str r2, [r0, #0xc]
+ bx lr
+
+ arm_func_start FUN_020B504C
+FUN_020B504C: ; 0x020B504C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, r4
+ mov r0, #0x0
+ mov r2, #0x70
+ bl MIi_CpuClear16
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ mov r0, #0x2
+ str r0, [r4, #0x4]
+ str r1, [r4, #0x8]
+ str r1, [r4, #0xc]
+ str r1, [r4, #0x24]
+ mov r0, #0x1
+ str r0, [r4, #0x30]
+ str r1, [r4, #0x28]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B5090
+FUN_020B5090: ; 0x020B5090
+ stmdb sp!, {r4-r10,lr}
+ ldr r5, _020B5158 ; =0x021CED14
+ mov r9, r1
+ ldrh r1, [r9, #0x0]
+ ldr r2, [r5, #0x0]
+ mov r10, r0
+ add r7, r2, #0x38
+ mov r8, #0x0
+ cmp r1, #0x0
+ ldmlsia sp!, {r4-r10,pc}
+_020B50B8: ; 0x020B50B8
+ mov r6, #0x1
+ mov r4, #0x6
+_020B50C0:
+ mul r1, r8, r4
+ ldr r0, [r5, #0x0]
+ str r6, [r0, #0x30]
+ ldr r2, [r9, #0x4]
+ ldrh r0, [r2, r1]
+ add r1, r2, r1
+ strh r0, [r7, #0x0]
+ ldrh r0, [r1, #0x2]
+ strh r0, [r7, #0x2]
+ ldrh r0, [r1, #0x4]
+ strh r0, [r7, #0x4]
+ ldr r3, [r10, #0x20]
+ cmp r3, #0x0
+ beq _020B5108
+ ldr r0, [r5, #0x0]
+ mov r1, r9
+ mov r2, r8
+ blx r3
+_020B5108:
+ ldr r0, [r5, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B5120
+ mov r0, r7
+ bl FUN_020B515C
+_020B5120:
+ ldr r3, [r10, #0x24]
+ cmp r3, #0x0
+ beq _020B513C
+ ldr r0, [r5, #0x0]
+ mov r1, r9
+ mov r2, r8
+ blx r3
+_020B513C:
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r9, #0x0]
+ mov r8, r0, lsr #0x10
+ cmp r8, r1
+ blo _020B50C0
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B5158: .word 0x021CED14
+
+ arm_func_start FUN_020B515C
+FUN_020B515C: ; 0x020B515C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldr r1, _020B53A4 ; =0x021CED14
+ mov r7, r0
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x40
+ bl G3_LoadMtx43
+ ldr r0, _020B53A4 ; =0x021CED14
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x24]
+ cmp r1, #0x0
+ beq _020B533C
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B53A8 ; =0xC000C000
+ and r4, r2, r1
+ bl FUN_020B4F88
+_020B519C: ; 0x020B519C
+ cmp r0, #0x0
+ beq _020B51F4
+ ldr r0, [r7, #0x0]
+ and r2, r4, #0xc000
+ mov r0, r0, lsl #0x7
+ mov r3, r0, lsr #0x17
+ and r1, r4, #0xc0000000
+ mov r1, r1, lsr #0x1e
+ ldr r0, _020B53AC ; =0x020FF8AC
+ mov r2, r2, asr #0xe
+ mov r1, r1, lsl #0x1
+ add r0, r0, r2, lsl #0x3
+ cmp r3, #0xff
+ ldrh r1, [r1, r0]
+ orrgt r0, r3, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r3, r0, asr #0x10
+ add r0, r3, r1
+ rsb r0, r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ b _020B5218
+_020B51F4:
+ ldr r0, [r7, #0x0]
+ mov r0, r0, lsl #0x7
+ mov r0, r0, lsr #0x17
+ cmp r0, #0xff
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r0, r0, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+_020B5218:
+ ldr r0, _020B53A4 ; =0x021CED14
+ mov r1, r1, lsl #0x10
+ ldr r0, [r0, #0x0]
+ mov r6, r1, asr #0x10
+ bl FUN_020B4F74
+_020B522C: ; 0x020B522C
+ cmp r0, #0x0
+ beq _020B527C
+ and r1, r4, #0xc000
+ and r0, r4, #0xc0000000
+ ldrb r4, [r7, #0x0]
+ ldr r2, _020B53B0 ; =0x020FF894
+ mov r0, r0, lsr #0x1e
+ mov r3, r1, asr #0xe
+ mov r1, r0, lsl #0x1
+ add r0, r2, r3, lsl #0x3
+ cmp r4, #0x7f
+ ldrh r1, [r1, r0]
+ orrgt r0, r4, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r4, r0, asr #0x10
+ add r0, r4, r1
+ rsb r0, r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ b _020B5298
+_020B527C:
+ ldrb r0, [r7, #0x0]
+ cmp r0, #0x7f
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r0, r0, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+_020B5298:
+ ldr r0, _020B53A4 ; =0x021CED14
+ ldr r1, [r7, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r5, r1, lsl #0x3
+ bl FUN_020B4F88
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B53A4 ; =0x021CED14
+ eor r5, r0, r5, lsr #0x1f
+ ldr r0, [r1, #0x0]
+ mov r8, r2, lsl #0x2
+ bl FUN_020B4F74
+ ldr r2, [r7, #0x0]
+ eor r1, r0, r8, lsr #0x1f
+ bic r0, r2, #0x10000000
+ str r0, [r7, #0x0]
+ ldr r2, [r7, #0x0]
+ ldr r3, _020B53A4 ; =0x021CED14
+ orr r2, r2, r5, lsl #0x1c
+ str r2, [r7, #0x0]
+ ldr r2, [r7, #0x0]
+ mov r0, r6
+ bic r2, r2, #0x20000000
+ str r2, [r7, #0x0]
+ ldr r5, [r7, #0x0]
+ mov r2, r4, lsl #0x10
+ orr r1, r5, r1, lsl #0x1d
+ str r1, [r7, #0x0]
+ ldr r5, [r3, #0x0]
+ mov r1, r2, asr #0x10
+ ldr r4, [r5, #0x8]
+ mov r3, r7
+ add r2, r4, #0xc
+ str r2, [sp, #0x0]
+ ldr r4, [r5, #0x14]
+ mvn r2, #0x0
+ str r4, [sp, #0x4]
+ ldr r4, [r5, #0x18]
+ str r4, [sp, #0x8]
+ bl FUN_020B46B4
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+_020B533C:
+ ldr r2, _020B53A4 ; =0x021CED14
+ ldr r0, [r7, #0x0]
+ ldr r5, [r2, #0x0]
+ mov r0, r0, lsl #0x7
+ ldr r4, [r5, #0x8]
+ mov r0, r0, lsr #0x17
+ cmp r0, #0xff
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ ldrb r1, [r7, #0x0]
+ add r4, r4, #0xc
+ movgt r0, r0, asr #0x10
+ str r4, [sp, #0x0]
+ ldr r4, [r5, #0x14]
+ cmp r1, #0x7f
+ orrgt r1, r1, #0xff00
+ movgt r1, r1, lsl #0x10
+ str r4, [sp, #0x4]
+ ldr r4, [r5, #0x18]
+ movgt r1, r1, asr #0x10
+ mov r3, r7
+ mvn r2, #0x0
+ str r4, [sp, #0x8]
+ bl FUN_020B46B4
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B53A4: .word 0x021CED14
+_020B53A8: .word 0xC000C000
+_020B53AC: .word 0x020FF8AC
+_020B53B0: .word 0x020FF894
+
+ arm_func_start FUN_020B53B4
+FUN_020B53B4: ; 0x020B53B4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x44
+ ldr r2, _020B57B0 ; =0x021CED14
+ mov r10, r0
+ ldr r0, [r2, #0x0]
+ mov r11, r1
+ ldr r9, [r0, #0x2c]
+ ldr r1, _020B57B0 ; =0x021CED14
+ cmp r9, #0x0
+ ldreq sb, _020B57B4 ; =0x020FF958
+ ldr r3, [r1, #0x0]
+ ldr r4, [r9, #0x10]
+ str r4, [sp, #0x18]
+ ldr r2, [r9, #0x14]
+ str r2, [sp, #0x1c]
+ ldr r1, [r10, #0x0]
+ sub r1, r4, r1
+ str r1, [sp, #0x18]
+ ldr r1, [r10, #0x4]
+ sub r1, r2, r1
+ str r1, [sp, #0x1c]
+ ldr r2, [r3, #0x24]
+ ldr r1, [r3, #0x10]
+ cmp r2, #0x0
+ str r1, [sp, #0x4]
+ bne _020B5430
+ ldr r1, [r3, #0x28]
+ cmp r1, #0x0
+ movne r1, #0x1
+ strne r1, [sp, #0x0]
+ bne _020B5438
+_020B5430:
+ mov r1, #0x0
+ str r1, [sp, #0x0]
+_020B5438:
+ ldrh r1, [r11, #0x0]
+ add r7, r0, #0x38
+ mov r8, #0x0
+ cmp r1, #0x0
+ addls sp, sp, #0x44
+ ldmlsia sp!, {r4-r11,pc}
+_020B5450: ; 0x020B5450
+ mov r0, #0x1
+ ldr r4, _020B57B0 ; =0x021CED14
+ str r8, [sp, #0x14]
+ str r0, [sp, #0xc]
+_020B5460:
+ ldr r2, [r4, #0x0]
+ ldr r0, [sp, #0xc]
+ mov r1, #0x6
+ str r0, [r2, #0x30]
+ mul r0, r8, r1
+ ldr r1, [r11, #0x4]
+ add r2, r1, r0
+ ldrh r0, [r1, r0]
+ strh r0, [r7, #0x0]
+ ldrh r0, [r2, #0x2]
+ strh r0, [r7, #0x2]
+ ldrh r0, [r2, #0x4]
+ strh r0, [r7, #0x4]
+ ldr r3, [r10, #0x20]
+ cmp r3, #0x0
+ beq _020B54B0
+ ldr r0, [r4, #0x0]
+ mov r1, r11
+ mov r2, r8
+ blx r3
+_020B54B0:
+ ldr r0, [r4, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B5790
+ ldr r0, [sp, #0x0]
+ ldr r1, [r7, #0x4]
+ cmp r0, #0x0
+ mov r0, #0x400
+ rsb r0, r0, #0x0
+ and r2, r1, r0
+ ldr r0, [sp, #0x4]
+ mov r1, r1, lsl #0x16
+ add r1, r0, r1, lsr #0x16
+ ldr r0, _020B57B8 ; =0x000003FF
+ and r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r7, #0x4]
+ beq _020B5600
+ ldr r0, [r10, #0x14]
+ ldr lr, [r4, #0x0]
+ sub r1, r0, #0x1
+ ldr r0, [r7, #0x0]
+ ldr r6, [lr, #0x28]
+ mov r2, r0, lsl #0x2
+ mov r2, r2, lsr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r0, r0, lsl #0x3
+ orr r5, r2, r0, lsr #0x1f
+ add r0, r6, r5, lsl #0x2
+ add r0, r0, r1, lsl #0x1
+ ldrh r1, [r0, #0x10]
+ ldr r0, _020B57BC ; =0x0000FFFF
+ str r1, [sp, #0x8]
+ cmp r1, r0
+ bne _020B55CC
+ cmp r5, #0x0
+ bne _020B5558
+ ldr r1, [lr, #0x20]
+ mov r0, r6
+ blx r1
+ str r0, [sp, #0x8]
+ b _020B55B4
+_020B5558:
+ ands r0, r5, #0x1
+ add r12, sp, #0x30
+ ldmia r6, {r0-r3}
+ stmia r12, {r0-r3}
+ beq _020B5584
+ ldr r1, [sp, #0x30]
+ ldr r0, [sp, #0x34]
+ rsb r1, r1, #0x0
+ str r1, [sp, #0x30]
+ rsb r0, r0, #0x0
+ str r0, [sp, #0x34]
+_020B5584:
+ ands r0, r5, #0x2
+ beq _020B55A4
+ ldr r1, [sp, #0x38]
+ ldr r0, [sp, #0x3c]
+ rsb r1, r1, #0x0
+ str r1, [sp, #0x38]
+ rsb r0, r0, #0x0
+ str r0, [sp, #0x3c]
+_020B55A4:
+ ldr r1, [lr, #0x20]
+ add r0, sp, #0x30
+ blx r1
+ str r0, [sp, #0x8]
+_020B55B4:
+ ldr r1, [r10, #0x14]
+ add r0, r6, r5, lsl #0x2
+ sub r1, r1, #0x1
+ add r1, r0, r1, lsl #0x1
+ ldr r0, [sp, #0x8]
+ strh r0, [r1, #0x10]
+_020B55CC:
+ ldr r1, [r9, #0x0]
+ add r0, sp, #0x20
+ str r1, [sp, #0x20]
+ ldr r2, [r9, #0x4]
+ mov r1, r7
+ str r2, [sp, #0x24]
+ ldr r3, [r9, #0x8]
+ add r2, sp, #0x18
+ str r3, [sp, #0x28]
+ ldr r3, [r9, #0xc]
+ str r3, [sp, #0x2c]
+ bl FUN_020B57D8
+ b _020B5750
+_020B5600:
+ ldr r0, _020B57C0 ; =0x0000FFFE
+ str r0, [sp, #0x8]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r0, #0x24]
+ cmp r1, #0x0
+ beq _020B5714
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B57C4 ; =0xC000C000
+ mov r6, r2, lsl #0x3
+ and r5, r2, r1
+ bl FUN_020B4F88
+ ldr r1, [r7, #0x0]
+ eor r6, r0, r6, lsr #0x1f
+ mov r1, r1, lsl #0x2
+ ldr r0, [r4, #0x0]
+ str r1, [sp, #0x10]
+ bl FUN_020B4F74
+ ldr r1, [sp, #0x10]
+ eor r0, r0, r1, lsr #0x1f
+ ldr r1, [r7, #0x0]
+ bic r1, r1, #0x10000000
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ orr r1, r1, r6, lsl #0x1c
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ bic r1, r1, #0x20000000
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ orr r0, r1, r0, lsl #0x1d
+ str r0, [r7, #0x0]
+ ldr r0, [r4, #0x0]
+ bl FUN_020B4F88
+_020B5684: ; 0x020B5684
+ cmp r0, #0x0
+ beq _020B56D4
+ and r1, r5, #0xc000
+ mov r2, r1, asr #0xe
+ ldr r1, _020B57C8 ; =0x020FF8AC
+ and r3, r5, #0xc0000000
+ mov r3, r3, lsr #0x1e
+ add r2, r1, r2, lsl #0x3
+ mov r3, r3, lsl #0x1
+ ldr r0, [r7, #0x0]
+ ldr r1, _020B57CC ; =0xFE00FFFF
+ ldrh r2, [r3, r2]
+ and r1, r0, r1
+ mov r0, r0, lsl #0x7
+ add r0, r2, r0, lsr #0x17
+ rsb r2, r0, #0x0
+ ldr r0, _020B57D0 ; =0x000001FF
+ and r0, r2, r0
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r7, #0x0]
+_020B56D4:
+ ldr r0, [r4, #0x0]
+ bl FUN_020B4F74
+_020B56DC: ; 0x020B56DC
+ cmp r0, #0x0
+ beq _020B5714
+ and r1, r5, #0xc000
+ mov r3, r1, asr #0xe
+ and r1, r5, #0xc0000000
+ mov r1, r1, lsr #0x1e
+ mov r2, r1, lsl #0x1
+ ldr r1, _020B57D4 ; =0x020FF894
+ ldrb r0, [r7, #0x0]
+ add r1, r1, r3, lsl #0x3
+ ldrh r1, [r2, r1]
+ add r0, r0, r1
+ rsb r0, r0, #0x0
+ strb r0, [r7, #0x0]
+_020B5714:
+ ldr r2, [r7, #0x0]
+ ldr r0, _020B57CC ; =0xFE00FFFF
+ ldr r1, [sp, #0x18]
+ and r0, r2, r0
+ mov r2, r2, lsl #0x7
+ mov r2, r2, lsr #0x17
+ add r2, r2, r1, asr #0xc
+ ldr r1, _020B57D0 ; =0x000001FF
+ and r1, r2, r1
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r7, #0x0]
+ ldrb r1, [r7, #0x0]
+ ldr r0, [sp, #0x1c]
+ add r0, r1, r0, asr #0xc
+ strb r0, [r7, #0x0]
+_020B5750:
+ ldr r3, [r4, #0x0]
+ ldr r1, [sp, #0x8]
+ ldr r2, [sp, #0x14]
+ ldr r3, [r3, #0x1c]
+ mov r0, r7
+ blx r3
+ cmp r0, #0x1
+ addne sp, sp, #0x44
+ ldmneia sp!, {r4-r11,pc}
+_020B5774: ; 0x020B5774
+ ldr r3, [r10, #0x24]
+ cmp r3, #0x0
+ beq _020B5790
+ ldr r0, [r4, #0x0]
+ mov r1, r11
+ mov r2, r8
+ blx r3
+_020B5790:
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ mov r8, r0, lsr #0x10
+ ldrh r0, [r11, #0x0]
+ cmp r8, r0
+ blo _020B5460
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B57B0: .word 0x021CED14
+_020B57B4: .word 0x020FF958
+_020B57B8: .word 0x000003FF
+_020B57BC: .word 0x0000FFFF
+_020B57C0: .word 0x0000FFFE
+_020B57C4: .word 0xC000C000
+_020B57C8: .word 0x020FF8AC
+_020B57CC: .word 0xFE00FFFF
+_020B57D0: .word 0x000001FF
+_020B57D4: .word 0x020FF894
+
+ arm_func_start FUN_020B57D8
+FUN_020B57D8: ; 0x020B57D8
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldr r4, [r1, #0x0]
+ ldr r3, _020B5A9C ; =0x01FF0000
+ and r3, r4, r3
+ mov r3, r3, lsr #0x10
+ mov r3, r3, lsl #0x10
+ mov r3, r3, asr #0x10
+ cmp r3, #0xff
+ orrgt r3, r3, #0xff00
+ movgt r3, r3, lsl #0x10
+ movgt r3, r3, asr #0x10
+ mov r3, r3, lsl #0xc
+ str r3, [sp, #0x0]
+ ldr r3, [r1, #0x0]
+ and r3, r3, #0xff
+ mov r3, r3, lsl #0x10
+ mov r3, r3, asr #0x10
+ cmp r3, #0x7f
+ orrgt r3, r3, #0xff00
+ movgt r3, r3, lsl #0x10
+ movgt r3, r3, asr #0x10
+ mov r3, r3, lsl #0xc
+ str r3, [sp, #0x4]
+ ldr r5, [r1, #0x0]
+ and r4, r5, #0x300
+ cmp r4, #0x100
+ beq _020B5858
+ cmp r4, #0x300
+ beq _020B5858
+ and r3, r5, #0x30000000
+ orr r4, r4, r3
+_020B5858:
+ cmp r4, #0x300
+ bne _020B58AC
+ ldr r3, _020B5AA0 ; =0xC000C000
+ ldr r4, _020B5AA4 ; =0x020FF8AC
+ and r3, r5, r3
+ and r5, r3, #0xc0000000
+ and r3, r3, #0xc000
+ mov r6, r5, lsr #0x1e
+ mov r5, r3, asr #0xe
+ ldr r3, _020B5AA8 ; =0x020FF894
+ mov r6, r6, lsl #0x1
+ add r4, r4, r5, lsl #0x3
+ add r3, r3, r5, lsl #0x3
+ ldrh r5, [r6, r4]
+ ldr r7, [sp, #0x0]
+ ldrh r3, [r6, r3]
+ ldr r4, [sp, #0x4]
+ add r5, r7, r5, lsl #0xb
+ add r3, r4, r3, lsl #0xb
+ str r5, [sp, #0x0]
+ str r3, [sp, #0x4]
+_020B58AC:
+ ldr r5, [r0, #0x8]
+ ldr r4, [sp, #0x4]
+ add r3, sp, #0x0
+ smull r8, r7, r5, r4
+ cmp r3, r3
+ ldr r6, [r0, #0x0]
+ mov r4, #0x1000
+ addeq r3, sp, #0x8
+ adds r8, r8, r4
+ ldr r5, [sp, #0x0]
+ adc r7, r7, #0x0
+ smlal r8, r7, r6, r5
+ mov r5, r8, lsr #0xc
+ orr r5, r5, r7, lsl #0x14
+ str r5, [r3, #0x0]
+ ldr r7, [r0, #0xc]
+ ldr r6, [sp, #0x4]
+ ldr r5, [r0, #0x4]
+ smull r8, r6, r7, r6
+ adds r7, r8, r4
+ ldr r4, [sp, #0x0]
+ adc r6, r6, #0x0
+ smlal r7, r6, r5, r4
+ mov r5, r7, lsr #0xc
+ add r4, sp, #0x8
+ orr r5, r5, r6, lsl #0x14
+ str r5, [r3, #0x4]
+ cmp r3, r4
+ ldreq r3, [sp, #0xc]
+ ldreq r4, [sp, #0x8]
+ streq r3, [sp, #0x4]
+ ldr r3, _020B5AAC ; =0x021CED14
+ streq r4, [sp, #0x0]
+ ldr r3, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ cmp r3, #0x0
+ beq _020B597C
+ cmp r3, #0x2
+ moveq r5, #0x300
+ movne r5, #0x100
+ cmp r5, #0x100
+ ldreq r4, [r1, #0x0]
+ ldreq r3, _020B5AB0 ; =0xC1FFFCFF
+ andeq r3, r4, r3
+ orreq r3, r3, r5
+ streq r3, [r1, #0x0]
+ beq _020B597C
+ ldr r4, [r1, #0x0]
+ ldr r3, _020B5AB0 ; =0xC1FFFCFF
+ and r3, r4, r3
+ orr r3, r3, r5
+ str r3, [r1, #0x0]
+_020B597C:
+ ldr r6, [r1, #0x0]
+ and r5, r6, #0x300
+ cmp r5, #0x100
+ beq _020B599C
+ cmp r5, #0x300
+ beq _020B599C
+ and r3, r6, #0x30000000
+ orr r5, r5, r3
+_020B599C:
+ ldr r3, _020B5AA0 ; =0xC000C000
+ ldr r4, _020B5AA4 ; =0x020FF8AC
+ and r3, r6, r3
+ and r6, r3, #0xc0000000
+ and r3, r3, #0xc000
+ mov lr, r3, asr #0xe
+ mov r6, r6, lsr #0x1e
+ mov r3, r6, lsl #0x1
+ add r4, r4, lr, lsl #0x3
+ ldrh r4, [r3, r4]
+ ldr r6, [r0, #0x0]
+ ldr r8, _020B5AA8 ; =0x020FF894
+ mov r12, r4, asr #0x1
+ mov r4, r12, lsl #0xc
+ rsb r7, r4, #0x0
+ mla r7, r6, r12, r7
+ add lr, r8, lr, lsl #0x3
+ ldrh r3, [r3, lr]
+ ldr r6, [r0, #0x8]
+ ldr lr, [sp, #0x0]
+ mov r3, r3, asr #0x1
+ mla r7, r6, r3, r7
+ add r6, lr, r7
+ str r6, [sp, #0x0]
+ mov lr, r3, lsl #0xc
+ ldr r6, [r0, #0x4]
+ rsb r7, lr, #0x0
+ mla r7, r6, r12, r7
+ ldr r0, [r0, #0xc]
+ ldr r6, [sp, #0x4]
+ mla r3, r0, r3, r7
+ add r0, r6, r3
+ str r0, [sp, #0x4]
+ cmp r5, #0x300
+ moveq r0, #0x1
+ movne r0, #0x0
+ cmp r0, #0x0
+ beq _020B5A4C
+ ldr r3, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ sub r3, r3, r4
+ sub r0, r0, lr
+ str r3, [sp, #0x0]
+ str r0, [sp, #0x4]
+_020B5A4C:
+ ldr r4, [sp, #0x0]
+ ldr r0, [r2, #0x0]
+ ldr r3, [sp, #0x4]
+ add r5, r4, r0
+ str r5, [sp, #0x0]
+ ldr r2, [r2, #0x4]
+ ldr r0, _020B5AB4 ; =0x000001FF
+ add r2, r3, r2
+ str r2, [sp, #0x4]
+ mov r3, r2, asr #0xc
+ ldr r4, [r1, #0x0]
+ ldr r2, _020B5AB8 ; =0xFE00FF00
+ and r3, r3, #0xff
+ and r2, r4, r2
+ and r4, r0, r5, asr #0xc
+ orr r0, r2, r3
+ orr r0, r0, r4, lsl #0x10
+ str r0, [r1, #0x0]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B5A9C: .word 0x01FF0000
+_020B5AA0: .word 0xC000C000
+_020B5AA4: .word 0x020FF8AC
+_020B5AA8: .word 0x020FF894
+_020B5AAC: .word 0x021CED14
+_020B5AB0: .word 0xC1FFFCFF
+_020B5AB4: .word 0x000001FF
+_020B5AB8: .word 0xFE00FF00
+
+ arm_func_start FUN_020B5ABC
+FUN_020B5ABC: ; 0x020B5ABC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ add r5, sp, #0x0
+ mov r4, #0x0
+ str r4, [r5, #0x0]
+ str r4, [r5, #0x4]
+ mov r8, r2
+ ldr r2, [sp, #0x28]
+ mov r5, r0
+ mov r9, r1
+ mov r4, r3
+ cmp r2, #0x0
+ mov r7, #0x1
+ beq _020B5B24
+ add r6, sp, #0x28
+_020B5AF8:
+ mov r0, r9
+ mov r1, r8
+ mov r3, r6
+ bl FUN_020B5BC8
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x28]
+ cmp r0, r1
+ strgt r0, [sp, #0x0]
+ add r7, r7, #0x1
+ cmp r2, #0x0
+ bne _020B5AF8
+_020B5B24:
+ ldr r0, [r9, #0x0]
+ sub r2, r7, #0x1
+ ldrsb r1, [r0, #0x1]
+ ldr r0, [sp, #0x0]
+ add r1, r4, r1
+ mul r1, r2, r1
+ sub r1, r1, r4
+ str r1, [sp, #0x4]
+ str r0, [r5, #0x0]
+ str r1, [r5, #0x4]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020B5B54
+FUN_020B5B54: ; 0x020B5B54
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ str r2, [sp, #0x0]
+ add r3, sp, #0x4
+ mov r2, #0x0
+ str r2, [r3, #0x0]
+ mov r8, r0
+ str r2, [r3, #0x4]
+ ldr r7, [r8, #0x4]
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, #0x1
+ blx r7
+ cmp r0, #0x0
+ beq _020B5BAC
+ add r6, sp, #0x0
+_020B5B94:
+ cmp r0, #0xa
+ mov r0, r6
+ addeq r4, r4, #0x1
+ blx r7
+ cmp r0, #0x0
+ bne _020B5B94
+_020B5BAC:
+ ldr r0, [r8, #0x0]
+ ldrsb r0, [r0, #0x1]
+ add r0, r5, r0
+ mul r0, r4, r0
+ sub r0, r0, r5
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B5BC8
+FUN_020B5BC8:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ str r2, [sp, #0x0]
+ ldr r4, [r8, #0x4]
+ add r0, sp, #0x0
+ mov r7, r1
+ mov r6, r3
+ mov r5, #0x0
+ blx r4
+ movs r1, r0
+ beq _020B5C58
+ ldr sb, _020B5C84 ; =0x0000FFFF
+ add r10, sp, #0x0
+_020B5C00:
+ cmp r1, #0xa
+ beq _020B5C58
+ mov r0, r8
+ bl FUN_020B5CE4
+ mov r1, r0
+ cmp r1, r9
+ ldreq r0, [r8, #0x0]
+ ldreqh r1, [r0, #0x2]
+ mov r0, r8
+ bl FUN_020B5C88
+ ldrh r1, [r8, #0x8]
+ cmp r1, #0x0
+ ldrnesb r1, [r0, #0x0]
+ ldrneb r0, [r0, #0x1]
+ addne r0, r1, r0
+ ldreqsb r0, [r0, #0x2]
+ add r1, r7, r0
+ mov r0, r10
+ add r5, r5, r1
+ blx r4
+ movs r1, r0
+ bne _020B5C00
+_020B5C58:
+ cmp r6, #0x0
+ beq _020B5C70
+ cmp r1, #0xa
+ ldreq r0, [sp, #0x0]
+ movne r0, #0x0
+ str r0, [r6, #0x0]
+_020B5C70:
+ cmp r5, #0x0
+ subgt r5, r5, r7
+ mov r0, r5
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B5C84: .word 0x0000FFFF
+
+ arm_func_start FUN_020B5C88
+FUN_020B5C88: ; 0x020B5C88
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x0]
+ ldr lr, [r3, #0xc]
+ cmp lr, #0x0
+ beq _020B5CD8
+_020B5CA0:
+ ldrh r12, [lr, #0x0]
+ cmp r12, r1
+ bhi _020B5CCC
+ ldrh r2, [lr, #0x2]
+ cmp r1, r2
+ ldrlsh r2, [r0, #0xa]
+ addls r3, lr, #0x8
+ subls r0, r1, r12
+ mlals r0, r2, r0, r3
+ addls sp, sp, #0x4
+ ldmlsia sp!, {pc}
+_020B5CCC:
+ ldr lr, [lr, #0x4]
+ cmp lr, #0x0
+ bne _020B5CA0
+_020B5CD8:
+ add r0, r3, #0x4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020B5CE4
+FUN_020B5CE4: ; 0x020B5CE4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x0
+ beq _020B5D2C
+_020B5CFC:
+ ldrh r2, [r0, #0x0]
+ cmp r2, r1
+ bhi _020B5D20
+ ldrh r2, [r0, #0x2]
+ cmp r1, r2
+ bhi _020B5D20
+ bl FUN_020B5D7C
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020B5D20:
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ bne _020B5CFC
+_020B5D2C:
+ ldr r0, _020B5D38 ; =0x0000FFFF
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B5D38: .word 0x0000FFFF
+
+ arm_func_start FUN_020B5D3C
+FUN_020B5D3C: ; 0x020B5D3C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, r1
+ mov r1, r4
+ bl FUN_020B7558
+ sub r0, r0, #0x1
+ strh r0, [r4, #0x8]
+ ldrh r0, [r4, #0x8]
+ cmp r0, #0x0
+ movne r1, #0x2
+ moveq r1, #0x3
+ ldr r0, _020B5D78 ; =FUN_020B7718
+ strh r1, [r4, #0xa]
+ str r0, [r4, #0x4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B5D78: .word FUN_020B7718
+
+ arm_func_start FUN_020B5D7C
+FUN_020B5D7C: ; 0x020B5D7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r3, [r0, #0x4]
+ ldr r2, _020B5E4C ; =0x0000FFFF
+ cmp r3, #0x0
+ beq _020B5DA8
+ cmp r3, #0x1
+ beq _020B5DC4
+ cmp r3, #0x2
+ beq _020B5DD8
+ b _020B5E40
+_020B5DA8:
+ ldrh r2, [r0, #0x0]
+ ldrh r3, [r0, #0xc]
+ sub r0, r1, r2
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ b _020B5E40
+_020B5DC4:
+ ldrh r2, [r0, #0x0]
+ sub r1, r1, r2
+ add r0, r0, r1, lsl #0x1
+ ldrh r2, [r0, #0xc]
+ b _020B5E40
+_020B5DD8:
+ ldrh r3, [r0, #0xc]
+ add r0, r0, #0xc
+ add r0, r0, #0x2
+ sub r3, r3, #0x1
+ add lr, r0, r3, lsl #0x2
+ cmp r0, lr
+ bhi _020B5E40
+_020B5DF4:
+ sub r12, lr, r0
+ mov r3, r12, asr #0x1
+ add r3, r12, r3, lsr #0x1e
+ mov r3, r3, asr #0x2
+ add r3, r3, r3, lsr #0x1f
+ mov r12, r3, asr #0x1
+ mov r3, r12, lsl #0x2
+ ldrh r3, [r0, r3]
+ add r12, r0, r12, lsl #0x2
+ cmp r3, r1
+ addcc r0, r12, #0x4
+ blo _020B5E38
+ cmp r1, r3
+ subcc lr, r12, #0x4
+ blo _020B5E38
+ ldrh r2, [r12, #0x2]
+ b _020B5E40
+_020B5E38:
+ cmp r0, lr
+ bls _020B5DF4
+_020B5E40:
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B5E4C: .word 0x0000FFFF
+
+ arm_func_start FUN_020B5E50
+FUN_020B5E50: ; 0x020B5E50
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ mov r7, r0
+ mov r0, r1
+ cmp r0, #0x8
+ ldr r0, [sp, #0x60]
+ str r1, [sp, #0x10]
+ str r0, [sp, #0x60]
+ ldr r0, [sp, #0x6c]
+ str r2, [sp, #0x14]
+ str r0, [sp, #0x6c]
+ ldrlt r0, [sp, #0x10]
+ mov r11, r3
+ ldr r6, [sp, #0x64]
+ ldr r5, [sp, #0x68]
+ movge r2, #0x3
+ clzlt r0, r0
+ rsblt r2, r0, #0x1f
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x8
+ ldrlt r0, [sp, #0x14]
+ movge r1, #0x3
+ clzlt r0, r0
+ rsblt r1, r0, #0x1f
+ ldr r0, _020B6170 ; =0x020FF970
+ mvn r3, #0x0
+ add r1, r0, r1, lsl #0x3
+ add r0, r1, r2, lsl #0x1
+ ldrb r4, [r1, r2, lsl #0x1]
+ ldrb r1, [r0, #0x1]
+ ldr r2, [sp, #0x14]
+ cmp r6, #0x0
+ str r1, [sp, #0x18]
+ ldr r1, [sp, #0x10]
+ and r1, r1, r3, lsl r4
+ str r1, [sp, #0x1c]
+ ldr r1, [sp, #0x18]
+ and r1, r2, r3, lsl r1
+ str r1, [sp, #0x20]
+ moveq r1, #0x1
+ streq r1, [sp, #0x24]
+ movne r1, #0x2
+ strne r1, [sp, #0x24]
+ mov r1, #0x0
+ str r1, [sp, #0x28]
+ bl FUN_020B704C
+ ldr r1, [sp, #0x10]
+ ldr r2, [sp, #0x14]
+ mov r10, r1, asr r4
+ ldr r1, [sp, #0x18]
+ mov r1, r2, asr r1
+ str r1, [sp, #0x2c]
+ ldr r1, [sp, #0x24]
+ mov r2, r1, lsl r4
+ ldr r1, [sp, #0x18]
+ mov r2, r2, lsl r1
+ ldr r1, [sp, #0x6c]
+ mov r9, r2, asr r1
+ mov r1, #0x0
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x34]
+ b _020B5FE8
+_020B5F48:
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x18]
+ ldr r8, [sp, #0x34]
+ mov r2, r2, lsl r1
+ ldr r1, [sp, #0x60]
+ add lr, r1, r2, lsl #0x3
+ b _020B5FD4
+_020B5F64:
+ mov r1, r8, lsl r4
+ add r2, r11, r1, lsl #0x3
+ ldr r1, _020B6174 ; =0x000001FF
+ ldr r3, [r7, #0x0]
+ and r12, r2, r1
+ ldr r1, _020B6178 ; =0xFE00FF00
+ and r2, lr, #0xff
+ and r1, r3, r1
+ orr r1, r1, r2
+ orr r1, r1, r12, lsl #0x10
+ str r1, [r7, #0x0]
+ ldr r3, [r7, #0x0]
+ ldr r1, _020B617C ; =0x3FFF3FFF
+ mov r2, #0x400
+ and r1, r3, r1
+ orr r1, r1, r0
+ str r1, [r7, #0x0]
+ rsb r1, r2, #0x0
+ ldrh r2, [r7, #0x4]
+ add r8, r8, #0x1
+ and r1, r2, r1
+ orr r1, r1, r5
+ strh r1, [r7, #0x4]
+ ldr r1, [r7, #0x0]
+ add r5, r5, r9
+ bic r1, r1, #0x2000
+ orr r1, r1, r6, lsl #0xd
+ str r1, [r7], #0x8
+_020B5FD4:
+ cmp r8, r10
+ blt _020B5F64
+ ldr r1, [sp, #0x30]
+ add r1, r1, #0x1
+ str r1, [sp, #0x30]
+_020B5FE8:
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x2c]
+ cmp r2, r1
+ blt _020B5F48
+ ldr r0, [sp, #0x28]
+ mla r0, r10, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bhs _020B6078
+ ldr r0, [sp, #0x60]
+ ldr r1, [sp, #0x10]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x1c]
+ str r6, [sp, #0x4]
+ sub r4, r1, r0
+ ldr r1, [sp, #0x6c]
+ str r5, [sp, #0x8]
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x1c]
+ ldr r2, [sp, #0x20]
+ add r3, r11, r1, lsl #0x3
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020B5E50
+ ldr r1, [sp, #0x24]
+ add r7, r7, r0, lsl #0x3
+ mul r2, r1, r4
+ ldr r1, [sp, #0x20]
+ mul r2, r1, r2
+ ldr r1, [sp, #0x6c]
+ add r5, r5, r2, lsr r1
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B6078:
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ cmp r1, r0
+ bhs _020B60F0
+ ldr r1, [sp, #0x60]
+ ldr r0, [sp, #0x20]
+ mov r3, r11
+ add r0, r1, r0, lsl #0x3
+ str r0, [sp, #0x0]
+ str r6, [sp, #0x4]
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x20]
+ str r5, [sp, #0x8]
+ sub r4, r1, r0
+ ldr r1, [sp, #0x6c]
+ mov r0, r7
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x1c]
+ mov r2, r4
+ bl FUN_020B5E50
+ ldr r2, [sp, #0x24]
+ ldr r1, [sp, #0x1c]
+ add r7, r7, r0, lsl #0x3
+ mul r1, r2, r1
+ mul r2, r4, r1
+ ldr r1, [sp, #0x6c]
+ add r5, r5, r2, lsr r1
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B60F0:
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bhs _020B6164
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ cmp r1, r0
+ bhs _020B6164
+ ldr r1, [sp, #0x60]
+ ldr r0, [sp, #0x20]
+ ldr r2, [sp, #0x10]
+ add r0, r1, r0, lsl #0x3
+ ldr r1, [sp, #0x1c]
+ ldr r3, [sp, #0x14]
+ str r0, [sp, #0x0]
+ sub r1, r2, r1
+ ldr r2, [sp, #0x20]
+ str r6, [sp, #0x4]
+ sub r2, r3, r2
+ ldr r3, [sp, #0x1c]
+ ldr r4, [sp, #0x6c]
+ str r5, [sp, #0x8]
+ mov r0, r7
+ add r3, r11, r3, lsl #0x3
+ str r4, [sp, #0xc]
+ bl FUN_020B5E50
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B6164:
+ ldr r0, [sp, #0x28]
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B6170: .word 0x020FF970
+_020B6174: .word 0x000001FF
+_020B6178: .word 0xFE00FF00
+_020B617C: .word 0x3FFF3FFF
+
+ arm_func_start FUN_020B6180
+FUN_020B6180: ; 0x020B6180
+ stmdb sp!, {r4-r6,lr}
+ mov r3, r0, lsr #0x3
+ mov r6, r1, lsr #0x3
+ mul r12, r3, r6
+ and r2, r0, #0x4
+ and lr, r0, #0x2
+ and r0, r0, #0x1
+ add r4, r0, lr, lsr #0x1
+ mov r5, r2, lsr #0x2
+ and r0, r1, #0x4
+ add lr, r12, #0x0
+ add r12, r5, r4, lsl #0x1
+ mla r12, r6, r12, lr
+ and lr, r1, #0x2
+ and r1, r1, #0x1
+ add lr, r1, lr, lsr #0x1
+ mov r1, r0, lsr #0x2
+ add r1, r1, lr, lsl #0x1
+ mla r12, r3, r1, r12
+ add r1, r4, r2, lsr #0x2
+ add r0, lr, r0, lsr #0x2
+ mla r0, r1, r0, r12
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B61DC
+FUN_020B61DC: ; 0x020B61DC
+ stmdb sp!, {r4-r8,lr}
+ ldr r12, [sp, #0x1c]
+ ldr r8, [sp, #0x18]
+ mov r12, r12, lsl #0x1c
+ mov r4, r12, lsr #0x10
+ mov r6, #0x0
+ cmp r2, #0x0
+ ldmleia sp!, {r4-r8,pc}
+_020B61FC: ; 0x020B61FC
+ mov lr, r3, lsl #0x1
+ mov r12, r6
+_020B6204:
+ mov r5, r0
+ mov r7, r12
+ cmp r1, #0x0
+ ble _020B622C
+_020B6214:
+ orr r3, r4, r8
+ add r7, r7, #0x1
+ cmp r7, r1
+ add r8, r8, #0x1
+ strh r3, [r5], #0x2
+ blt _020B6214
+_020B622C:
+ add r6, r6, #0x1
+ cmp r6, r2
+ add r0, r0, lr
+ blt _020B6204
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B6240
+FUN_020B6240: ; 0x020B6240
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r5, [sp, #0x24]
+ ldr lr, [sp, #0x20]
+ cmp r5, #0x20
+ ldr r12, [sp, #0x28]
+ bgt _020B6280
+ mla r4, r5, lr, r3
+ ldr lr, [sp, #0x2c]
+ str r12, [sp, #0x0]
+ mov r3, r5
+ add r0, r0, r4, lsl #0x1
+ str lr, [sp, #0x4]
+ bl FUN_020B61DC
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+_020B6280:
+ ldr r4, [sp, #0x2c]
+ add r7, lr, r2
+ mov r2, r4, lsl #0x1c
+ cmp lr, r7
+ add r8, r3, r1
+ mov r4, r2, lsr #0x10
+ addge sp, sp, #0x8
+ ldmgeia sp!, {r4-r8,pc}
+_020B62A0:
+ cmp lr, #0x20
+ movlt r1, lr
+ addge r1, lr, #0x20
+ mov r6, r3
+ cmp r3, r8
+ add r5, r0, r1, lsl #0x6
+ bge _020B62E4
+_020B62BC:
+ cmp r6, #0x20
+ movlt r1, r6
+ addge r1, r6, #0x3e0
+ orr r2, r4, r12
+ mov r1, r1, lsl #0x1
+ add r6, r6, #0x1
+ strh r2, [r5, r1]
+ cmp r6, r8
+ add r12, r12, #0x1
+ blt _020B62BC
+_020B62E4:
+ add lr, lr, #0x1
+ cmp lr, r7
+ blt _020B62A0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B62F8
+FUN_020B62F8: ; 0x020B62F8
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x18
+ cmp r2, #0x8
+ movlt r4, r2
+ movge r12, #0x3
+ clzlt r4, r4
+ rsblt r12, r4, #0x1f
+ cmp r3, #0x8
+ movlt r4, r3
+ movge r6, #0x3
+ clzlt r4, r4
+ rsblt r6, r4, #0x1f
+ ldr r4, _020B6378 ; =0x020FF970
+ ldr r5, [sp, #0x28]
+ add r4, r4, r6, lsl #0x3
+ ldrb r6, [r4, r12, lsl #0x1]
+ add r12, r4, r12, lsl #0x1
+ ldr r4, _020B637C ; =FUN_020B6908
+ strb r6, [sp, #0x14]
+ ldrb r6, [r12, #0x1]
+ ldr lr, _020B6380 ; =FUN_020B68AC
+ ldr ip, _020B6384 ; =FUN_020B64C0
+ strb r6, [sp, #0x15]
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str lr, [sp, #0x8]
+ str r12, [sp, #0xc]
+ ldr r12, [sp, #0x14]
+ str r12, [sp, #0x10]
+ bl FUN_020B6488
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B6378: .word 0x020FF970
+_020B637C: .word FUN_020B6908
+_020B6380: .word FUN_020B68AC
+_020B6384: .word FUN_020B64C0
+
+ arm_func_start FUN_020B6388
+FUN_020B6388: ; 0x020B6388
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ ldr lr, [sp, #0x18]
+ ldr ip, _020B63C0 ; =FUN_020B6B10
+ str lr, [sp, #0x0]
+ ldr lr, _020B63C4 ; =FUN_020B68AC
+ str r12, [sp, #0x4]
+ ldr ip, _020B63C8 ; =FUN_020B66D4
+ str lr, [sp, #0x8]
+ str r12, [sp, #0xc]
+ str r2, [sp, #0x10]
+ bl FUN_020B6488
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+ .balign 4
+_020B63C0: .word FUN_020B6B10
+_020B63C4: .word FUN_020B68AC
+_020B63C8: .word FUN_020B66D4
+
+ arm_func_start FUN_020B63CC
+FUN_020B63CC: ; 0x020B63CC
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r7, r1
+ ldrh r1, [sp, #0x2c]
+ mov r8, r0
+ mov r0, r7
+ mov r6, r2
+ mov r5, r3
+ bl FUN_020B5CE4
+ ldr r1, _020B6484 ; =0x0000FFFF
+ mov r4, r0
+ cmp r4, r1
+ ldreq r0, [r7, #0x0]
+ ldreqh r4, [r0, #0x2]
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020B5C88
+ str r0, [sp, #0x8]
+ ldr r0, [r7, #0x0]
+ ldr r2, [sp, #0x28]
+ ldr r0, [r0, #0x8]
+ add r1, sp, #0x8
+ ldrh r3, [r0, #0x2]
+ add r12, r0, #0x8
+ mov r0, r8
+ mla r3, r4, r3, r12
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r1, [sp, #0x8]
+ ldr r4, [r8, #0x14]
+ ldrsb r2, [r1, #0x0]
+ mov r1, r7
+ mov r3, r5
+ add r2, r6, r2
+ blx r4
+ ldrh r0, [r7, #0x8]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x8]
+ ldrnesb r1, [r0, #0x0]
+ ldrneb r0, [r0, #0x1]
+ addne r0, r1, r0
+ ldreq r0, [sp, #0x8]
+ ldreqsb r0, [r0, #0x2]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B6484: .word 0x0000FFFF
+
+ arm_func_start FUN_020B6488
+FUN_020B6488: ; 0x020B6488
+ str r2, [r0, #0x4]
+ ldr r2, [sp, #0x0]
+ str r3, [r0, #0x8]
+ strb r2, [r0, #0xc]
+ ldr r2, [sp, #0x4]
+ str r1, [r0, #0x0]
+ ldr r1, [sp, #0x8]
+ str r2, [r0, #0x14]
+ ldr r2, [sp, #0xc]
+ str r1, [r0, #0x18]
+ ldr r1, [sp, #0x10]
+ str r2, [r0, #0x1c]
+ str r1, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020B64C0
+FUN_020B64C0: ; 0x020B64C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ ldrb r4, [r0, #0xc]
+ mov r10, r2
+ str r1, [sp, #0xc]
+ str r4, [sp, #0x44]
+ ldr r1, [sp, #0x44]
+ ldr r4, [sp, #0x78]
+ cmp r1, #0x4
+ add r1, r10, r4
+ str r1, [sp, #0x1c]
+ ldr r2, [sp, #0x7c]
+ mov r1, r3
+ add r1, r1, r2
+ str r1, [sp, #0x20]
+ ldrne r1, [sp, #0xc]
+ str r3, [sp, #0x10]
+ orrne r1, r1, r1, lsl #0x8
+ orrne r1, r1, r1, lsl #0x10
+ strne r1, [sp, #0xc]
+ bne _020B6528
+ ldr r1, [sp, #0xc]
+ orr r1, r1, r1, lsl #0x4
+ orr r1, r1, r1, lsl #0x8
+ orr r1, r1, r1, lsl #0x10
+ str r1, [sp, #0xc]
+_020B6528:
+ bic r1, r10, #0x7
+ str r1, [sp, #0x30]
+ ldr r1, [sp, #0x10]
+ ldr r2, [r0, #0x10]
+ bic r1, r1, #0x7
+ str r1, [sp, #0x14]
+ ldr r1, [sp, #0x44]
+ str r2, [sp, #0x4c]
+ mov r3, r1, lsl #0x6
+ mov r2, r3, asr #0x2
+ ldr r1, [sp, #0x20]
+ add r3, r3, r2, lsr #0x1d
+ ldr r2, [sp, #0x1c]
+ add r6, r1, #0x7
+ add r2, r2, #0x7
+ bic r5, r2, #0x7
+ bic r2, r6, #0x7
+ ldr r1, [sp, #0x30]
+ str r2, [sp, #0x24]
+ mov r2, r3, asr #0x3
+ str r2, [sp, #0x48]
+ mov r4, r1, asr #0x2
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x14]
+ add r2, r2, r4, lsr #0x1d
+ mov r2, r2, asr #0x3
+ str r2, [sp, #0x2c]
+ ldr r2, [sp, #0x14]
+ mov r1, r1, asr #0x2
+ add r1, r2, r1, lsr #0x1d
+ mov r6, r1, asr #0x3
+ ldr r1, [sp, #0x24]
+ cmp r2, r1
+ ldr r1, [r0, #0x4]
+ str r1, [sp, #0x40]
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0x0]
+ str r1, [sp, #0x3c]
+ str r0, [sp, #0x28]
+ ldrb r0, [sp, #0x4c]
+ str r0, [sp, #0x38]
+ ldrb r0, [sp, #0x4d]
+ str r0, [sp, #0x34]
+ addge sp, sp, #0x54
+ ldmgeia sp!, {r4-r11,pc}
+_020B65DC: ; 0x020B65DC
+ mov r4, #0x0
+ mov r11, #0x8
+_020B65E4:
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ ldr r7, [sp, #0x2c]
+ cmp r1, r0
+ movlt r1, r0
+ ldrlt r0, [sp, #0x14]
+ sublt r9, r1, r0
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ movge r9, r4
+ sub r0, r1, r0
+ cmp r0, #0x8
+ movgt r0, r11
+ sub r0, r0, r9
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x30]
+ cmp r0, r5
+ mov r8, r0
+ bge _020B66B0
+_020B6630:
+ ldr r0, [sp, #0x38]
+ ldr r2, [sp, #0x40]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x34]
+ ldr r3, [sp, #0x3c]
+ str r0, [sp, #0x4]
+ mov r0, r7
+ mov r1, r6
+ bl FUN_020B7068
+ ldr r2, [sp, #0x1c]
+ cmp r8, r10
+ sublt r1, r10, r8
+ sub r2, r2, r8
+ movge r1, r4
+ cmp r2, #0x8
+ movgt r2, r11
+ sub r3, r2, r1
+ ldr r2, [sp, #0x18]
+ ldr r12, [sp, #0x48]
+ str r2, [sp, #0x0]
+ ldr r2, [sp, #0xc]
+ str r2, [sp, #0x4]
+ ldr r2, [sp, #0x44]
+ str r2, [sp, #0x8]
+ ldr r2, [sp, #0x28]
+ mla r0, r12, r0, r2
+ mov r2, r9
+ bl FUN_020B6F18
+ add r8, r8, #0x8
+ add r7, r7, #0x1
+ cmp r8, r5
+ blt _020B6630
+_020B66B0:
+ ldr r0, [sp, #0x14]
+ add r6, r6, #0x1
+ add r1, r0, #0x8
+ ldr r0, [sp, #0x24]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ blt _020B65E4
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B66D4
+FUN_020B66D4: ; 0x020B66D4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ ldrb r4, [r0, #0xc]
+ mov r10, r2
+ str r1, [sp, #0xc]
+ str r4, [sp, #0x2c]
+ ldr r1, [sp, #0x2c]
+ ldr r4, [sp, #0x60]
+ cmp r1, #0x4
+ add r1, r10, r4
+ str r1, [sp, #0x18]
+ ldr r2, [sp, #0x64]
+ mov r1, r3
+ add r1, r1, r2
+ str r1, [sp, #0x1c]
+ ldrne r1, [sp, #0xc]
+ str r3, [sp, #0x10]
+ orrne r1, r1, r1, lsl #0x8
+ orrne r1, r1, r1, lsl #0x10
+ strne r1, [sp, #0xc]
+ bne _020B673C
+ ldr r1, [sp, #0xc]
+ orr r1, r1, r1, lsl #0x4
+ orr r1, r1, r1, lsl #0x8
+ orr r1, r1, r1, lsl #0x10
+ str r1, [sp, #0xc]
+_020B673C:
+ ldr r1, [sp, #0x10]
+ bic r1, r1, #0x7
+ mov r2, r1, asr #0x2
+ str r1, [sp, #0x14]
+ add r1, r1, r2, lsr #0x1d
+ ldr r2, [r0, #0x10]
+ mov r3, r1, asr #0x3
+ mul r1, r3, r2
+ bic r3, r10, #0x7
+ str r3, [sp, #0x28]
+ ldr r3, [sp, #0x2c]
+ mov r6, r3, lsl #0x6
+ ldr r3, [sp, #0x28]
+ mov r4, r6, asr #0x2
+ mov r5, r3, asr #0x2
+ add r5, r3, r5, lsr #0x1d
+ add r4, r6, r4, lsr #0x1d
+ mov r3, r4, asr #0x3
+ str r3, [sp, #0x30]
+ ldr r3, [sp, #0x1c]
+ add r1, r1, r5, asr #0x3
+ add r4, r3, #0x7
+ ldr r3, [r0, #0x0]
+ ldr r0, [sp, #0x18]
+ add r5, r0, #0x7
+ ldr r0, [sp, #0x30]
+ bic r7, r5, #0x7
+ mla r1, r0, r1, r3
+ bic r0, r4, #0x7
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x30]
+ str r1, [sp, #0x24]
+ mul r0, r2, r0
+ str r0, [sp, #0x34]
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x20]
+ cmp r1, r0
+ addge sp, sp, #0x3c
+ ldmgeia sp!, {r4-r11,pc}
+_020B67D8: ; 0x020B67D8
+ mov r5, #0x0
+ mov r4, #0x8
+_020B67E0:
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ ldr r6, [sp, #0x24]
+ cmp r1, r0
+ movlt r1, r0
+ ldrlt r0, [sp, #0x14]
+ sublt r9, r1, r0
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x14]
+ movge r9, r5
+ sub r0, r1, r0
+ cmp r0, #0x8
+ movgt r0, r4
+ sub r11, r0, r9
+ ldr r0, [sp, #0x28]
+ cmp r0, r7
+ mov r8, r0
+ bge _020B687C
+_020B6828:
+ ldr r0, [sp, #0x18]
+ cmp r8, r10
+ sublt r1, r10, r8
+ sub r0, r0, r8
+ movge r1, r5
+ cmp r0, #0x8
+ movgt r0, r4
+ sub r3, r0, r1
+ ldr r0, [sp, #0xc]
+ str r11, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x2c]
+ mov r2, r9
+ str r0, [sp, #0x8]
+ mov r0, r6
+ bl FUN_020B6F18
+ ldr r0, [sp, #0x30]
+ add r8, r8, #0x8
+ add r6, r6, r0
+ cmp r8, r7
+ blt _020B6828
+_020B687C:
+ ldr r1, [sp, #0x24]
+ ldr r0, [sp, #0x34]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #0x14]
+ add r1, r0, #0x8
+ ldr r0, [sp, #0x20]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ blt _020B67E0
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B68AC
+FUN_020B68AC: ; 0x020B68AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldrb r2, [r3, #0xc]
+ ldr r12, [r3, #0x4]
+ cmp r2, #0x4
+ orreq r0, r1, r1, lsl #0x4
+ orreq r0, r0, r0, lsl #0x8
+ orreq r1, r0, r0, lsl #0x10
+ orrne r0, r1, r1, lsl #0x8
+ orrne r1, r0, r0, lsl #0x10
+ ldr r0, [r3, #0x8]
+ mov r2, r2, lsl #0x6
+ mul lr, r12, r0
+ mov r0, r2, asr #0x2
+ add r0, r2, r0, lsr #0x1d
+ mov r2, r0, asr #0x3
+ mov r0, r1
+ mul r2, lr, r2
+ ldr r1, [r3, #0x0]
+ bl MIi_CpuClearFast
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020B6908
+FUN_020B6908: ; 0x020B6908
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ ldr r7, [sp, #0x74]
+ ldrb r5, [r0, #0xc]
+ ldr r6, [r1, #0x0]
+ ldr r4, [r7, #0x0]
+ ldr r9, [r6, #0x8]
+ mov r8, r5, lsl #0x6
+ ldrb r4, [r4, #0x1]
+ mov r5, r8, asr #0x2
+ add r5, r8, r5, lsr #0x1d
+ ldrb r9, [r9, #0x1]
+ ldr r8, [r0, #0x4]
+ ldr r6, [r0, #0x8]
+ str r2, [sp, #0x8]
+ str r3, [sp, #0xc]
+ cmp r4, #0x0
+ mov r5, r5, asr #0x3
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r11,pc}
+_020B6958: ; 0x020B6958
+ adds r3, r2, r4
+ addmi sp, sp, #0x4c
+ ldmmiia sp!, {r4-r11,pc}
+_020B6964: ; 0x020B6964
+ ldr r2, [sp, #0xc]
+ adds r2, r2, r9
+ addmi sp, sp, #0x4c
+ ldmmiia sp!, {r4-r11,pc}
+_020B6974: ; 0x020B6974
+ ldr r10, [sp, #0x8]
+ add r3, r3, #0x7
+ cmp r10, #0x0
+ movle r10, #0x0
+ strle r10, [sp, #0x10]
+ movgt r10, r10, lsr #0x3
+ strgt r10, [sp, #0x10]
+ ldr r10, [sp, #0xc]
+ add r2, r2, #0x7
+ cmp r10, #0x0
+ movle r10, #0x0
+ mov r11, r2, lsr #0x3
+ mov r3, r3, lsr #0x3
+ movgt r10, r10, lsr #0x3
+ cmp r3, r8
+ movcs r3, r8
+ cmp r11, r6
+ ldr r2, [sp, #0x10]
+ movcs r11, r6
+ subs r8, r3, r2
+ addmi sp, sp, #0x4c
+ sub r3, r11, r10
+ ldmmiia sp!, {r4-r11,pc}
+_020B69D0: ; 0x020B69D0
+ cmp r3, #0x0
+ addlt sp, sp, #0x4c
+ ldmltia sp!, {r4-r11,pc}
+_020B69DC: ; 0x020B69DC
+ ldr r2, [sp, #0x8]
+ ldr r6, [r0, #0x0]
+ cmp r2, #0x0
+ andge r2, r2, #0x7
+ strge r2, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ ldr r11, [sp, #0x8]
+ cmp r2, #0x0
+ andge r2, r2, #0x7
+ strge r2, [sp, #0xc]
+ sub r8, r11, r8, lsl #0x3
+ ldr r11, [sp, #0xc]
+ ldr r2, [sp, #0x70]
+ sub r3, r11, r3, lsl #0x3
+ str r3, [sp, #0x14]
+ ldr r3, [r7, #0x4]
+ sub r2, r2, #0x1
+ str r3, [sp, #0x28]
+ str r2, [sp, #0x48]
+ str r9, [sp, #0x38]
+ str r4, [sp, #0x34]
+ ldr r4, [r1, #0x0]
+ ldr r2, [sp, #0x14]
+ mov r3, r11
+ cmp r3, r2
+ ldr r2, [r4, #0x8]
+ ldrb r3, [r2, #0x6]
+ str r3, [sp, #0x40]
+ ldrb r2, [r0, #0xc]
+ str r2, [sp, #0x44]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x8]
+ ldrb r1, [r1, #0x0]
+ mul r1, r3, r1
+ str r1, [sp, #0x3c]
+ ldr r1, [r0, #0x10]
+ str r1, [sp, #0x20]
+ ldr r1, [r0, #0x4]
+ ldr r0, [r0, #0x8]
+ ldrb r11, [sp, #0x20]
+ ldrb r4, [sp, #0x21]
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x18]
+ addle sp, sp, #0x4c
+ ldmleia sp!, {r4-r11,pc}
+_020B6A90:
+ ldr r0, [sp, #0xc]
+ ldr r7, [sp, #0x10]
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0x8]
+ cmp r0, r8
+ mov r9, r0
+ ble _020B6AEC
+_020B6AAC:
+ ldr r2, [sp, #0x1c]
+ str r11, [sp, #0x0]
+ ldr r3, [sp, #0x18]
+ mov r0, r7
+ mov r1, r10
+ str r4, [sp, #0x4]
+ bl FUN_020B7068
+ mla r1, r0, r5, r6
+ add r0, sp, #0x24
+ str r9, [sp, #0x2c]
+ str r1, [sp, #0x24]
+ bl FUN_020B6CAC
+ sub r9, r9, #0x8
+ add r7, r7, #0x1
+ cmp r9, r8
+ bgt _020B6AAC
+_020B6AEC:
+ ldr r0, [sp, #0xc]
+ add r10, r10, #0x1
+ sub r1, r0, #0x8
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0xc]
+ cmp r1, r0
+ bgt _020B6A90
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B6B10
+FUN_020B6B10: ; 0x020B6B10
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x2c
+ ldr r4, [sp, #0x54]
+ ldrb r5, [r0, #0xc]
+ str r4, [sp, #0x54]
+ ldr r4, [r4, #0x0]
+ ldr r6, [r1, #0x0]
+ mov r7, r5, lsl #0x6
+ ldrb r4, [r4, #0x1]
+ mov r5, r7, asr #0x2
+ add r5, r7, r5, lsr #0x1d
+ cmp r4, #0x0
+ ldr r6, [r6, #0x8]
+ mov r9, r3
+ ldr r8, [r0, #0x4]
+ ldr r7, [r0, #0x8]
+ mov r10, r2
+ mov r5, r5, asr #0x3
+ addeq sp, sp, #0x2c
+ ldr lr, [r0, #0x0]
+ ldrb r3, [r6, #0x1]
+ ldmeqia sp!, {r4-r11,pc}
+_020B6B68: ; 0x020B6B68
+ adds r6, r10, r4
+ addmi sp, sp, #0x2c
+ ldmmiia sp!, {r4-r11,pc}
+_020B6B74: ; 0x020B6B74
+ adds r2, r9, r3
+ addmi sp, sp, #0x2c
+ ldmmiia sp!, {r4-r11,pc}
+_020B6B80: ; 0x020B6B80
+ cmp r10, #0x0
+ movle r11, #0x0
+ add r6, r6, #0x7
+ movgt r11, r10, lsr #0x3
+ cmp r9, #0x0
+ movle r12, #0x0
+ add r2, r2, #0x7
+ mov r6, r6, lsr #0x3
+ movgt r12, r9, lsr #0x3
+ cmp r6, r8
+ movcs r6, r8
+ mov r2, r2, lsr #0x3
+ cmp r2, r7
+ movcs r2, r7
+ subs r7, r6, r11
+ addmi sp, sp, #0x2c
+ sub r2, r2, r12
+ ldmmiia sp!, {r4-r11,pc}
+_020B6BC8: ; 0x020B6BC8
+ cmp r2, #0x0
+ addlt sp, sp, #0x2c
+ ldmltia sp!, {r4-r11,pc}
+_020B6BD4: ; 0x020B6BD4
+ ldr r6, [r0, #0x10]
+ cmp r10, #0x0
+ sub r8, r6, r7
+ mul r8, r5, r8
+ mla r11, r6, r12, r11
+ andge r10, r10, #0x7
+ str r8, [sp, #0x0]
+ ldr r8, [sp, #0x54]
+ mla r6, r5, r11, lr
+ ldr r12, [r8, #0x4]
+ ldr r11, [sp, #0x50]
+ cmp r9, #0x0
+ sub r8, r11, #0x1
+ andge r9, r9, #0x7
+ sub r11, r9, r2, lsl #0x3
+ str r12, [sp, #0x8]
+ str r4, [sp, #0x14]
+ str r8, [sp, #0x28]
+ str r3, [sp, #0x18]
+ ldr r3, [r1, #0x0]
+ cmp r9, r11
+ ldr r2, [r3, #0x8]
+ sub r7, r10, r7, lsl #0x3
+ ldrb r2, [r2, #0x6]
+ str r2, [sp, #0x20]
+ ldrb r0, [r0, #0xc]
+ str r0, [sp, #0x24]
+ ldr r0, [r1, #0x0]
+ ldr r0, [r0, #0x8]
+ ldrb r0, [r0, #0x0]
+ mul r0, r2, r0
+ str r0, [sp, #0x1c]
+ addle sp, sp, #0x2c
+ ldmleia sp!, {r4-r11,pc}
+_020B6C5C: ; 0x020B6C5C
+ add r4, sp, #0x4
+_020B6C60:
+ mov r8, r10
+ str r9, [sp, #0x10]
+ cmp r10, r7
+ ble _020B6C90
+_020B6C70:
+ mov r0, r4
+ str r6, [sp, #0x4]
+ str r8, [sp, #0xc]
+ bl FUN_020B6CAC
+ sub r8, r8, #0x8
+ cmp r8, r7
+ add r6, r6, r5
+ bgt _020B6C70
+_020B6C90:
+ ldr r0, [sp, #0x0]
+ sub r9, r9, #0x8
+ cmp r9, r11
+ add r6, r6, r0
+ bgt _020B6C60
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B6CAC
+FUN_020B6CAC: ; 0x020B6CAC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ ldr r5, [r0, #0x8]
+ ldr r4, [r0, #0xc]
+ cmp r5, #0x0
+ strge r5, [sp, #0x0]
+ movlt r1, #0x0
+ strlt r1, [sp, #0x0]
+ ldr r1, [r0, #0x10]
+ cmp r4, #0x0
+ add r10, r5, r1
+ ldr r1, [r0, #0x14]
+ movge r2, r4
+ movlt r2, #0x0
+ cmp r10, #0x8
+ add r3, r4, r1
+ movge r10, #0x8
+ cmp r3, #0x8
+ movge r3, #0x8
+ cmp r4, #0x0
+ movgt r4, #0x0
+ cmp r5, #0x0
+ ldr r8, [r0, #0x20]
+ movgt r5, #0x0
+ rsb r1, r4, #0x0
+ mul r7, r10, r8
+ ldr r6, [r0, #0x1c]
+ rsb r4, r5, #0x0
+ mul r9, r6, r4
+ ldr r4, [r0, #0x18]
+ mov r10, r7
+ str r4, [sp, #0x8]
+ ldr r4, [sp, #0x0]
+ cmp r8, #0x4
+ mul r5, r4, r8
+ ldr r4, [sp, #0x8]
+ str r5, [sp, #0x0]
+ mla r11, r1, r4, r9
+ ldr r1, [r0, #0x4]
+ str r1, [sp, #0x4]
+ bne _020B6E24
+ ldr r1, [r0, #0x0]
+ ldr r7, [r0, #0x24]
+ add r0, r1, r2, lsl #0x2
+ str r0, [sp, #0xc]
+ add r0, r1, r3, lsl #0x2
+ ldr r1, [sp, #0xc]
+ str r0, [sp, #0x10]
+ cmp r1, r0
+ addcs sp, sp, #0x34
+ ldmcsia sp!, {r4-r11,pc}
+_020B6D78: ; 0x020B6D78
+ mov r0, #0x0
+ add r9, sp, #0x24
+ mov r4, #0xf
+ str r0, [sp, #0x1c]
+_020B6D88:
+ ldr r0, [sp, #0xc]
+ mov r1, r11, lsr #0x1f
+ ldr r5, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ rsb r2, r1, r11, lsl #0x1d
+ add r0, r0, r11, lsr #0x3
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #0x1c]
+ add r1, r1, r2, ror #0x1d
+ strb r0, [sp, #0x28]
+ strb r0, [sp, #0x29]
+ mov r0, r9
+ bl FUN_020B76B0
+ ldr r8, [sp, #0x0]
+ mov r0, r8
+ cmp r0, r10
+ bhs _020B6DF8
+_020B6DCC:
+ mov r0, r9
+ mov r1, r6
+ bl FUN_020B76B0
+_020B6DD8: ; 0x020B6DD8
+ cmp r0, #0x0
+ mvnne r1, r4, lsl r8
+ addne r0, r7, r0
+ andne r1, r5, r1
+ orrne r5, r1, r0, lsl r8
+ add r8, r8, #0x4
+ cmp r8, r10
+ blo _020B6DCC
+_020B6DF8:
+ ldr r0, [sp, #0xc]
+ add r1, r0, #0x4
+ str r5, [r0, #0x0]
+ ldr r0, [sp, #0x10]
+ str r1, [sp, #0xc]
+ cmp r1, r0
+ ldr r0, [sp, #0x8]
+ add r11, r11, r0
+ blo _020B6D88
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+_020B6E24:
+ ldr r1, [r0, #0x0]
+ ldr r9, [r0, #0x24]
+ add r0, r1, r2, lsl #0x3
+ str r0, [sp, #0x14]
+ add r0, r1, r3, lsl #0x3
+ ldr r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ cmp r1, r0
+ addcs sp, sp, #0x34
+ ldmcsia sp!, {r4-r11,pc}
+_020B6E4C: ; 0x020B6E4C
+ mov r0, #0x0
+ mov r4, #0xff
+ str r0, [sp, #0x20]
+_020B6E58:
+ mov r1, r11, lsr #0x1f
+ rsb r0, r1, r11, lsl #0x1d
+ add r1, r1, r0, ror #0x1d
+ ldr r0, [sp, #0x14]
+ ldr r8, [r0, #0x0]
+ ldr r7, [r0, #0x4]
+ ldr r0, [sp, #0x4]
+ add r0, r0, r11, lsr #0x3
+ str r0, [sp, #0x2c]
+ ldr r0, [sp, #0x20]
+ strb r0, [sp, #0x30]
+ strb r0, [sp, #0x31]
+ add r0, sp, #0x2c
+ bl FUN_020B76B0
+_020B6E90: ; 0x020B6E90
+ ldr r0, [sp, #0x0]
+ cmp r0, r10
+ mov r5, r0
+ bhs _020B6EE8
+_020B6EA0:
+ add r0, sp, #0x2c
+ mov r1, r6
+ bl FUN_020B76B0
+_020B6EAC: ; 0x020B6EAC
+ cmp r0, #0x0
+ beq _020B6EDC
+ cmp r5, #0x20
+ mvncc r1, r4, lsl r5
+ addcc r0, r9, r0
+ andcc r1, r8, r1
+ orrcc r8, r1, r0, lsl r5
+ subcs r2, r5, #0x20
+ mvncs r1, r4, lsl r2
+ addcs r0, r9, r0
+ andcs r1, r7, r1
+ orrcs r7, r1, r0, lsl r2
+_020B6EDC:
+ add r5, r5, #0x8
+ cmp r5, r10
+ blo _020B6EA0
+_020B6EE8:
+ ldr r0, [sp, #0x14]
+ str r8, [r0, #0x0]
+ add r1, r0, #0x8
+ str r7, [r0, #0x4]
+ ldr r0, [sp, #0x18]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ ldr r0, [sp, #0x8]
+ add r11, r11, r0
+ blo _020B6E58
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B6F18
+FUN_020B6F18: ; 0x020B6F18
+ stmdb sp!, {r4-r6,lr}
+ mov lr, r0
+ cmp r3, #0x8
+ ldr r0, [sp, #0x14]
+ bne _020B6F4C
+ ldr r4, [sp, #0x10]
+ cmp r4, #0x8
+ bne _020B6F4C
+ ldr r2, [sp, #0x18]
+ mov r1, lr
+ mov r2, r2, lsl #0x3
+ bl MIi_CpuClearFast
+ ldmia sp!, {r4-r6,pc}
+_020B6F4C:
+ ldr r4, [sp, #0x18]
+ cmp r4, #0x4
+ bne _020B6FAC
+ mov r5, r1, lsl #0x2
+ add r4, r5, r3, lsl #0x2
+ mvn r3, #0x0
+ rsb r4, r4, #0x20
+ mov r3, r3, lsr r5
+ add r1, r4, r1, lsl #0x2
+ mov r3, r3, lsl r1
+ ldr r1, [sp, #0x10]
+ add r5, lr, r2, lsl #0x2
+ add r2, r5, r1, lsl #0x2
+ and r6, r0, r3, lsr r4
+ cmp r5, r2
+ mvn r1, r3, lsr r4
+ ldmcsia sp!, {r4-r6,pc}
+_020B6F90:
+ ldr r0, [r5, #0x0]
+ and r0, r0, r1
+ orr r0, r6, r0
+ str r0, [r5], #0x4
+ cmp r5, r2
+ blo _020B6F90
+ ldmia sp!, {r4-r6,pc}
+_020B6FAC:
+ mov r12, r1, lsl #0x3
+ add r1, r12, r3, lsl #0x3
+ rsb r1, r1, #0x40
+ mvn r3, #0x0
+ cmp r1, #0x20
+ mov r5, r3, lsr r12
+ subcs r4, r1, #0x20
+ addcs r3, r12, r4
+ movcs r3, r5, lsl r3
+ movcs r3, r3, lsr r4
+ movcc r3, r5, lsl r12
+ mvn r4, #0x0
+ add r5, lr, r2, lsl #0x3
+ cmp r12, #0x20
+ mov r4, r4, lsl r1
+ subcs r12, r12, #0x20
+ addcs r1, r12, r1
+ movcs r1, r4, lsr r1
+ movcs r6, r1, lsl r12
+ movcc r6, r4, lsr r1
+ ldr r1, [sp, #0x10]
+ and lr, r0, r3
+ add r4, r5, r1, lsl #0x3
+ cmp r5, r4
+ and r12, r0, r6
+ mvn r2, r3
+ mvn r1, r6
+ ldmcsia sp!, {r4-r6,pc}
+_020B701C:
+ ldr r0, [r5, #0x0]
+ and r0, r0, r2
+ orr r0, lr, r0
+ str r0, [r5, #0x0]
+ ldr r0, [r5, #0x4]
+ and r0, r0, r1
+ orr r0, r12, r0
+ str r0, [r5, #0x4]
+ add r5, r5, #0x8
+ cmp r5, r4
+ blo _020B701C
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B704C
+FUN_020B704C: ; 0x020B704C
+ ldrb r3, [r0, #0x1]
+ ldr r2, _020B7064 ; =0x020FF990
+ ldrb r1, [r0, #0x0]
+ add r0, r2, r3, lsl #0x4
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+ .balign 4
+_020B7064: .word 0x020FF990
+
+ arm_func_start FUN_020B7068
+FUN_020B7068: ; 0x020B7068
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr fp, _020B7164 ; =0x020FF970
+ mov r9, #0x0
+ mov r10, #0x3
+ mvn r7, #0x0
+_020B7080:
+ ldr r4, [sp, #0x2c]
+ ldr r6, [sp, #0x28]
+ and r12, r3, r7, lsl r4
+ cmp r12, r1
+ mov r8, r7, lsl r6
+ mov r5, r7, lsl r4
+ and lr, r2, r7, lsl r6
+ bhi _020B70D0
+ mla r9, r2, r12, r9
+ cmp lr, r0
+ movhi r2, lr
+ subhi r1, r1, r12
+ subhi r3, r3, r12
+ bhi _020B7118
+ sub r3, r3, r12
+ mla r9, lr, r3, r9
+ sub r0, r0, lr
+ sub r1, r1, r12
+ sub r2, r2, lr
+ b _020B7118
+_020B70D0:
+ cmp lr, r0
+ mlals r9, lr, r12, r9
+ mvn r3, r5
+ movls r3, r12
+ subls r0, r0, lr
+ subls r2, r2, lr
+ bls _020B7118
+ and r2, r1, r5
+ mla r5, lr, r2, r9
+ and r2, r0, r8
+ and r1, r1, r3
+ add r2, r5, r2, lsl r4
+ mvn r3, r8
+ add r1, r2, r1, lsl r6
+ and r0, r0, r3
+ add sp, sp, #0x4
+ add r0, r1, r0
+ ldmia sp!, {r4-r11,pc}
+_020B7118:
+ cmp r2, #0x8
+ movlt r4, r2
+ movge r5, r10
+ clzlt r4, r4
+ rsblt r5, r4, #0x1f
+ cmp r3, #0x8
+ movge r4, r10
+ movlt r4, r3
+ clzlt r4, r4
+ rsblt r4, r4, #0x1f
+ add r4, r11, r4, lsl #0x3
+ add r6, r4, r5, lsl #0x1
+ ldrb r5, [r4, r5, lsl #0x1]
+ ldrb r4, [r6, #0x1]
+ str r5, [sp, #0x28]
+ str r4, [sp, #0x2c]
+ b _020B7080
+_020B715C: ; 0x020B715C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B7164: .word 0x020FF970
+
+ arm_func_start FUN_020B7168
+FUN_020B7168: ; 0x020B7168
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r12, [sp, #0x28]
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ ands r0, r12, #0x100
+ beq _020B71AC
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0xc]
+ ldr r2, [sp, #0x2c]
+ bl FUN_020B5B54
+ ldr r1, [sp, #0x20]
+ sub r0, r1, r0
+ add r5, r5, r0
+ b _020B71E4
+_020B71AC:
+ ands r0, r12, #0x80
+ beq _020B71E4
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0xc]
+ ldr r2, [sp, #0x2c]
+ bl FUN_020B5B54
+ ldr r2, [sp, #0x20]
+ add r1, r0, #0x1
+ add r0, r2, #0x1
+ add r0, r0, r0, lsr #0x1f
+ mov r2, r0, asr #0x1
+ add r0, r1, r1, lsr #0x1f
+ sub r0, r2, r0, asr #0x1
+ add r5, r5, r0
+_020B71E4:
+ ldr r1, [sp, #0x24]
+ ldr r0, [sp, #0x28]
+ str r1, [sp, #0x0]
+ ldr r12, [sp, #0x2c]
+ str r0, [sp, #0x4]
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ str r12, [sp, #0x8]
+ bl FUN_020B72C4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B7218
+FUN_020B7218: ; 0x020B7218
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x18
+ ldr r4, [sp, #0x34]
+ mov r8, r0
+ str r4, [sp, #0x0]
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r4, [sp, #0x30]
+ ldr r1, [r8, #0x4]
+ ldr r2, [r8, #0x8]
+ ldr r3, [r8, #0xc]
+ add r0, sp, #0xc
+ bl FUN_020B5ABC
+ ands r0, r4, #0x10
+ ldrne r0, [sp, #0xc]
+ addne r0, r0, #0x1
+ addne r0, r0, r0, lsr #0x1f
+ subne r7, r7, r0, asr #0x1
+ bne _020B7274
+ ands r0, r4, #0x20
+ ldrne r0, [sp, #0xc]
+ subne r7, r7, r0
+_020B7274:
+ ands r0, r4, #0x2
+ ldrne r0, [sp, #0x10]
+ addne r0, r0, #0x1
+ addne r0, r0, r0, lsr #0x1f
+ subne r6, r6, r0, asr #0x1
+ bne _020B7298
+ ands r0, r4, #0x4
+ ldrne r0, [sp, #0x10]
+ subne r6, r6, r0
+_020B7298:
+ str r5, [sp, #0x0]
+ ldr r0, [sp, #0x34]
+ str r4, [sp, #0x4]
+ str r0, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ bl FUN_020B72C4
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B72C4
+FUN_020B72C4: ; 0x020B72C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r4, [r10, #0x4]
+ ldr r0, [sp, #0x40]
+ ldr r4, [r4, #0x0]
+ ldr r5, [r10, #0xc]
+ ldrsb r4, [r4, #0x1]
+ cmp r0, #0x0
+ mov r9, r1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x38]
+ mov r8, r2
+ str r0, [sp, #0x38]
+ mov r7, r3
+ add r6, r5, r4
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r11,pc}
+_020B730C: ; 0x020B730C
+ add r0, r7, #0x1
+ ldr r1, [sp, #0x3c]
+ add r0, r0, r0, lsr #0x1f
+ mov r0, r0, asr #0x1
+ and r5, r1, #0x800
+ and r11, r1, #0x400
+ str r0, [sp, #0x8]
+ mov r4, #0x0
+_020B732C:
+ mov r1, r9
+ cmp r5, #0x0
+ beq _020B7358
+ ldr r0, [r10, #0x4]
+ ldr r1, [r10, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r3, r4
+ bl FUN_020B5BC8
+_020B734C: ; 0x020B734C
+ sub r0, r7, r0
+ add r1, r9, r0
+ b _020B7388
+_020B7358:
+ cmp r11, #0x0
+ beq _020B7388
+ ldr r0, [r10, #0x4]
+ ldr r1, [r10, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r3, r4
+ bl FUN_020B5BC8
+ add r0, r0, #0x1
+ add r1, r0, r0, lsr #0x1f
+ ldr r0, [sp, #0x8]
+ sub r0, r0, r1, asr #0x1
+ add r1, r9, r0
+_020B7388:
+ ldr r2, [sp, #0xc]
+ add r3, sp, #0xc
+ str r2, [sp, #0x0]
+ str r3, [sp, #0x4]
+ ldr r3, [sp, #0x38]
+ mov r0, r10
+ mov r2, r8
+ bl FUN_020B73C0
+ ldr r0, [sp, #0xc]
+ add r8, r8, r6
+ cmp r0, #0x0
+ bne _020B732C
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B73C0
+FUN_020B73C0: ; 0x020B73C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ ldr r6, [r10, #0x8]
+ ldr r5, [r10, #0x4]
+ ldr r4, [sp, #0x30]
+ add r0, sp, #0x8
+ str r4, [sp, #0x8]
+ ldr r4, [r5, #0x4]
+ mov r9, r1
+ mov r8, r2
+ mov r7, r3
+ blx r4
+ cmp r0, #0x0
+ beq _020B743C
+ add r11, sp, #0x8
+_020B7400:
+ cmp r0, #0xa
+ beq _020B743C
+ str r7, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [r10, #0x0]
+ mov r1, r5
+ mov r2, r9
+ mov r3, r8
+ bl FUN_020B63CC
+ add r1, r9, r0
+ mov r0, r11
+ add r9, r1, r6
+ blx r4
+ cmp r0, #0x0
+ bne _020B7400
+_020B743C:
+ ldr r1, [sp, #0x34]
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,pc}
+_020B744C: ; 0x020B744C
+ cmp r0, #0xa
+ ldreq r1, [sp, #0x8]
+ ldr r0, [sp, #0x34]
+ movne r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B7468
+FUN_020B7468: ; 0x020B7468
+ stmdb sp!, {r4-r6,lr}
+ ldrh r2, [r0, #0xc]
+ ldrh r3, [r0, #0xe]
+ mov r1, #0x0
+ add r2, r0, r2
+ cmp r3, #0x0
+ ldmleia sp!, {r4-r6,pc}
+_020B7484: ; 0x020B7484
+ ldr r3, _020B7548 ; =0x46494E46
+ ldr ip, _020B754C ; =0x43574448
+ ldr r4, _020B7550 ; =0x434D4150
+ ldr lr, _020B7554 ; =0x43474C50
+_020B7494:
+ ldr r5, [r2, #0x0]
+ cmp r5, r4
+ bhi _020B74B0
+ cmp r5, r4
+ bhs _020B7518
+ cmp r5, lr
+ b _020B752C
+_020B74B0:
+ cmp r5, r12
+ bhi _020B74C4
+ cmp r5, r12
+ beq _020B7500
+ b _020B752C
+_020B74C4:
+ cmp r5, r3
+ bne _020B752C
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x8]
+ add r5, r5, r0
+ str r5, [r6, #0x8]
+ ldr r5, [r6, #0xc]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0xc]
+ ldr r5, [r6, #0x10]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x10]
+ b _020B752C
+_020B7500:
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x4]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x4]
+ b _020B752C
+_020B7518:
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x8]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x8]
+_020B752C:
+ ldrh r5, [r0, #0xe]
+ ldr r6, [r2, #0x4]
+ add r1, r1, #0x1
+ cmp r1, r5
+ add r2, r2, r6
+ blt _020B7494
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B7548: .word 0x46494E46
+_020B754C: .word 0x43574448
+_020B7550: .word 0x434D4150
+_020B7554: .word 0x43474C50
+
+ arm_func_start FUN_020B7558
+FUN_020B7558: ; 0x020B7558
+ stmdb sp!, {r4-r6,lr}
+ movs r6, r0
+ mov r5, r1
+ beq _020B75C8
+ cmp r6, #0x0
+ beq _020B7584
+ ldr r1, [r6, #0x0]
+ ldr r0, _020B76A8 ; =0x4E465452
+ cmp r1, r0
+ moveq r0, #0x1
+ beq _020B7588
+_020B7584:
+ mov r0, #0x0
+_020B7588:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B75CC
+ cmp r6, #0x0
+ beq _020B75B4
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x100
+ movcs r0, #0x1
+ bhs _020B75B8
+_020B75B4:
+ mov r0, #0x0
+_020B75B8:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ b _020B75CC
+_020B75C8:
+ mov r0, #0x0
+_020B75CC:
+ cmp r0, #0x0
+ movne r4, #0x0
+ bne _020B7654
+ cmp r6, #0x0
+ beq _020B7640
+ cmp r6, #0x0
+ beq _020B75FC
+ ldr r1, [r6, #0x0]
+ ldr r0, _020B76A8 ; =0x4E465452
+ cmp r1, r0
+ moveq r0, #0x1
+ beq _020B7600
+_020B75FC:
+ mov r0, #0x0
+_020B7600:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B7644
+ cmp r6, #0x0
+ beq _020B762C
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x1
+ movcs r0, #0x1
+ bhs _020B7630
+_020B762C:
+ mov r0, #0x0
+_020B7630:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ b _020B7644
+_020B7640:
+ mov r0, #0x0
+_020B7644:
+ cmp r0, #0x0
+ movne r4, #0x1
+ bne _020B7654
+ bl OS_Terminate
+_020B7654:
+ mov r0, r6
+ bl FUN_020B7468
+ ldr r1, _020B76AC ; =0x46494E46
+ mov r0, r6
+ bl FUN_020B01F8
+_020B7668: ; 0x020B7668
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r6,pc}
+_020B7678: ; 0x020B7678
+ add r0, r0, #0x8
+ str r0, [r5, #0x0]
+ cmp r4, #0x0
+ beq _020B76A0
+ ldr r2, [r5, #0x0]
+ mov r1, #0x0
+ ldrsb r0, [r2, #0x6]
+ strb r0, [r2, #0x7]
+ ldr r0, [r5, #0x0]
+ strb r1, [r0, #0x6]
+_020B76A0:
+ add r0, r4, #0x1
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B76A8: .word 0x4E465452
+_020B76AC: .word 0x46494E46
+
+ arm_func_start FUN_020B76B0
+FUN_020B76B0:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrsb r2, [r0, #0x4]
+ ldrb r12, [r0, #0x5]
+ mov r4, r1
+ cmp r2, r4
+ subge r1, r2, r4
+ movge r5, r12, lsr r1
+ strgeb r1, [r0, #0x4]
+ bge _020B7704
+ ldr r3, [r0, #0x0]
+ sub r1, r4, r2
+ add r2, r3, #0x1
+ str r2, [r0, #0x0]
+ ldrb r2, [r3, #0x0]
+ mov r5, r12, lsl r1
+ strb r2, [r0, #0x5]
+ mov r2, #0x8
+ strb r2, [r0, #0x4]
+ bl FUN_020B76B0
+ orr r5, r0, r5
+_020B7704:
+ rsb r0, r4, #0x8
+ mov r1, #0xff
+ and r0, r5, r1, asr r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B7718
+FUN_020B7718: ; 0x020B7718
+ ldr r1, [r0, #0x0]
+ ldrh r2, [r1], #0x2
+ str r1, [r0, #0x0]
+ mov r0, r2
+ bx lr
+
+ arm_func_start FUN_020B772C
+FUN_020B772C: ; 0x020B772C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ ldrb r0, [r6, #0x9]
+ mov r5, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r7,pc}
+_020B774C: ; 0x020B774C
+ add r4, r6, #0x8
+_020B7750:
+ ldrh r0, [r6, #0xe]
+ ldrh r1, [r4, r0]
+ add r0, r4, r0
+ mla r0, r1, r5, r0
+ ldr r0, [r0, #0x4]
+ add r7, r6, r0
+ mov r0, r7
+ bl FUN_020B79A4
+ mov r0, r7
+ bl FUN_020B780C
+ ldrb r0, [r6, #0x9]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blo _020B7750
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B7790
+FUN_020B7790: ; 0x020B7790
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldrb r0, [r8, #0x9]
+ mov r7, r1
+ mov r5, #0x1
+ cmp r0, #0x0
+ mov r6, #0x0
+ bls _020B7800
+ add r4, r8, #0x8
+_020B77B8:
+ ldrh r0, [r8, #0xe]
+ mov r1, r7
+ ldrh r2, [r4, r0]
+ add r0, r4, r0
+ mla r0, r2, r6, r0
+ ldr r0, [r0, #0x4]
+ add r9, r8, r0
+ mov r0, r9
+ bl FUN_020B7A04
+ and r5, r5, r0
+ mov r0, r9
+ mov r1, r7
+ bl FUN_020B7864
+ ldrb r1, [r8, #0x9]
+ add r6, r6, #0x1
+ and r5, r5, r0
+ cmp r6, r1
+ blo _020B77B8
+_020B7800:
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020B780C
+FUN_020B780C: ; 0x020B780C
+ ldr r2, [r0, #0x8]
+ mov r1, #0x0
+ add r2, r0, r2
+ ldrh r0, [r2, #0x2]
+ add r12, r2, r0
+ ldrb r0, [r12, #0x1]
+ cmp r0, #0x0
+ bxls lr
+_020B782C:
+ ldrh r2, [r12, #0x6]
+ ldrh r0, [r12, r2]
+ add r2, r12, r2
+ add r2, r2, #0x4
+ mla r3, r0, r1, r2
+ ldrb r0, [r3, #0x3]
+ add r1, r1, #0x1
+ ands r2, r0, #0x1
+ bicne r0, r0, #0x1
+ strneb r0, [r3, #0x3]
+ ldrb r0, [r12, #0x1]
+ cmp r1, r0
+ blo _020B782C
+ bx lr
+
+ arm_func_start FUN_020B7864
+FUN_020B7864: ; 0x020B7864
+ stmdb sp!, {r4-r10,lr}
+ ldr r2, [r0, #0x8]
+ mov r10, r1
+ add r9, r0, r2
+ ldrh r0, [r9, #0x2]
+ mov r6, #0x1
+ mov r7, #0x0
+ add r8, r9, r0
+ ldrb r0, [r8, #0x1]
+ cmp r0, #0x0
+ bls _020B7908
+ mov r5, r7
+ mov r4, r7
+_020B7898:
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r10, #0x34]
+ add r2, r8, r1
+ ldrh r1, [r2, #0x2]
+ add r0, r10, r0
+ add r1, r2, r1
+ add r1, r1, r5
+ bl FUN_020BC2A0
+ movs r3, r0
+ beq _020B78F0
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r8, r1]
+ add r1, r8, r1
+ add r1, r1, #0x4
+ mla r1, r0, r7, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ bne _020B78F4
+ mov r0, r9
+ mov r2, r10
+ bl FUN_020B7910
+_020B78EC: ; 0x020B78EC
+ b _020B78F4
+_020B78F0:
+ mov r6, r4
+_020B78F4:
+ ldrb r0, [r8, #0x1]
+ add r7, r7, #0x1
+ add r5, r5, #0x10
+ cmp r7, r0
+ blo _020B7898
+_020B7908:
+ mov r0, r6
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start FUN_020B7910
+FUN_020B7910:
+ stmdb sp!, {r4-r6,lr}
+ ldrh r5, [r1, #0x0]
+ ldr r2, [r2, #0x2c]
+ ldrh r4, [r3, #0x2]
+ mov r2, r2, lsl #0x10
+ add r12, r0, r5
+ mov r5, r2, lsr #0x10
+ ands r2, r4, #0x1
+ ldrh r4, [r3, #0x0]
+ moveq r3, r5, lsl #0xf
+ moveq r5, r3, lsr #0x10
+ moveq r2, r4, lsl #0xf
+ moveq r4, r2, lsr #0x10
+ ldrb r3, [r1, #0x2]
+ mov r2, #0x0
+ cmp r3, #0x0
+ bls _020B7994
+ add r3, r4, r5
+ mov r3, r3, lsl #0x10
+ add r6, r0, #0x4
+ mov r4, r3, lsr #0x10
+_020B7964:
+ ldrh r5, [r0, #0xa]
+ ldrb r3, [r12, r2]
+ add r2, r2, #0x1
+ ldrh lr, [r6, r5]
+ add r5, r6, r5
+ mla r3, lr, r3, r5
+ ldr r3, [r3, #0x4]
+ add r3, r0, r3
+ strh r4, [r3, #0x1c]
+ ldrb r3, [r1, #0x2]
+ cmp r2, r3
+ blo _020B7964
+_020B7994:
+ ldrb r0, [r1, #0x3]
+ orr r0, r0, #0x1
+ strb r0, [r1, #0x3]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B79A4
+FUN_020B79A4: ; 0x020B79A4
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, [r0, #0x8]
+ mov r4, #0x0
+ ldrh r1, [r0, r2]
+ add r6, r0, r2
+ add r5, r6, r1
+ ldrb r0, [r5, #0x1]
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020B79C8:
+ ldrh r1, [r5, #0x6]
+ ldrh r0, [r5, r1]
+ add r1, r5, r1
+ add r1, r1, #0x4
+ mla r1, r0, r4, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ beq _020B79F0
+ mov r0, r6
+ bl FUN_020B7AB8
+_020B79F0:
+ ldrb r0, [r5, #0x1]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020B79C8
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B7A04
+FUN_020B7A04: ; 0x020B7A04
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ mov r10, r1
+ ldrh r1, [r0, r2]
+ add r9, r0, r2
+ mov r11, #0x1
+ add r8, r9, r1
+ ldrb r0, [r8, #0x1]
+ mov r7, #0x0
+ cmp r0, #0x0
+ bls _020B7AAC
+ mov r6, r7
+ mov r4, r7
+ add r5, r10, #0x3c
+_020B7A40:
+ ldrh r1, [r8, #0x6]
+ mov r0, r5
+ add r2, r8, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl FUN_020BC2A0
+ movs r3, r0
+ beq _020B7A94
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r8, r1]
+ add r1, r8, r1
+ add r1, r1, #0x4
+ mla r1, r0, r7, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ bne _020B7A98
+ mov r0, r9
+ mov r2, r10
+ bl FUN_020B7B40
+_020B7A90: ; 0x020B7A90
+ b _020B7A98
+_020B7A94:
+ mov r11, r4
+_020B7A98:
+ ldrb r0, [r8, #0x1]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020B7A40
+_020B7AAC:
+ mov r0, r11
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B7AB8
+FUN_020B7AB8: ; 0x020B7AB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r1, #0x0]
+ ldrb r2, [r1, #0x2]
+ mov r3, #0x0
+ add r12, r0, r4
+ cmp r2, #0x0
+ bls _020B7B28
+ add r2, r0, #0x4
+ mov r5, #0x1000
+ ldr lr, _020B7B3C ; =0xC00F0000
+_020B7AE4:
+ ldrh r7, [r0, #0xa]
+ ldrb r4, [r12, r3]
+ add r3, r3, #0x1
+ ldrh r6, [r2, r7]
+ add r7, r2, r7
+ mla r4, r6, r4, r7
+ ldr r4, [r4, #0x4]
+ add r6, r0, r4
+ ldr r4, [r6, #0x14]
+ and r4, r4, lr
+ str r4, [r6, #0x14]
+ str r5, [r6, #0x24]
+ ldr r4, [r6, #0x24]
+ str r4, [r6, #0x28]
+ ldrb r4, [r1, #0x2]
+ cmp r3, r4
+ blo _020B7AE4
+_020B7B28:
+ ldrb r0, [r1, #0x3]
+ bic r0, r0, #0x1
+ strb r0, [r1, #0x3]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B7B3C: .word 0xC00F0000
+
+ arm_func_start FUN_020B7B40
+FUN_020B7B40:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r11, r1
+ mov r9, r3
+ ldr r1, [r9, #0x0]
+ mov r10, r0
+ and r0, r1, #0x1c000000
+ cmp r0, #0x14000000
+ ldrh r3, [r11, #0x0]
+ ldrne r1, [r2, #0x8]
+ mov r8, #0x0
+ add r0, r10, r3
+ str r0, [sp, #0x4]
+ ldrne r0, _020B7C50 ; =0x0000FFFF
+ andne r0, r1, r0
+ strne r0, [sp, #0x0]
+ ldreq r1, [r2, #0x18]
+ ldreq r0, _020B7C50 ; =0x0000FFFF
+ andeq r0, r1, r0
+ streq r0, [sp, #0x0]
+ ldrb r0, [r11, #0x2]
+ cmp r0, #0x0
+ bls _020B7C3C
+ mov r4, #0x1000
+ add r5, r10, #0x4
+_020B7BA4:
+ ldrh r6, [r10, #0xa]
+ ldr r0, [sp, #0x4]
+ ldr r1, [r9, #0x0]
+ ldrb r2, [r0, r8]
+ ldrh r3, [r5, r6]
+ ldr r0, [sp, #0x0]
+ add r6, r5, r6
+ add r0, r1, r0
+ mla r1, r3, r2, r6
+ ldr r1, [r1, #0x4]
+ add r6, r10, r1
+ ldr r1, [r6, #0x14]
+ orr r0, r1, r0
+ str r0, [r6, #0x14]
+ ldr r3, [r9, #0x4]
+ ldr r0, _020B7C54 ; =0x000007FF
+ ldrh r1, [r6, #0x20]
+ and r2, r3, r0
+ and r7, r0, r3, lsr #0xb
+ cmp r2, r1
+ moveq r0, r4
+ beq _020B7C08
+ mov r0, r2, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020B7C08:
+ str r0, [r6, #0x24]
+ ldrh r1, [r6, #0x22]
+ cmp r7, r1
+ moveq r0, r4
+ beq _020B7C28
+ mov r0, r7, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020B7C28:
+ str r0, [r6, #0x28]
+ ldrb r0, [r11, #0x2]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blo _020B7BA4
+_020B7C3C:
+ ldrb r0, [r11, #0x3]
+ orr r0, r0, #0x1
+ strb r0, [r11, #0x3]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B7C50: .word 0x0000FFFF
+_020B7C54: .word 0x000007FF
+
+ arm_func_start FUN_020B7C58
+FUN_020B7C58: ; 0x020B7C58
+ ldrh r2, [r0, #0x32]
+ mov r1, #0x0
+ bic r2, r2, #0x1
+ strh r2, [r0, #0x32]
+ ldr r2, [r0, #0x2c]
+ str r1, [r0, #0x2c]
+ mov r0, r2
+ bx lr
+
+ arm_func_start FUN_020B7C78
+FUN_020B7C78: ; 0x020B7C78
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r4, r1
+ mov r5, r0
+ beq _020B7C90
+ bl GX_BeginLoadTexPltt
+_020B7C90:
+ ldrh r2, [r5, #0x30]
+ ldr r0, [r5, #0x38]
+ ldr r3, [r5, #0x2c]
+ ldr r1, _020B7CD8 ; =0x0000FFFF
+ add r0, r5, r0
+ and r1, r3, r1
+ mov r1, r1, lsl #0x3
+ mov r2, r2, lsl #0x3
+ bl GX_LoadTexPltt
+ ldrh r0, [r5, #0x32]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ orr r0, r0, #0x1
+ strh r0, [r5, #0x32]
+ ldmeqia sp!, {r4-r5,pc}
+_020B7CCC: ; 0x020B7CCC
+ bl GX_EndLoadTexPltt
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B7CD8: .word 0x0000FFFF
+
+ arm_func_start FUN_020B7CDC
+FUN_020B7CDC: ; 0x020B7CDC
+ str r1, [r0, #0x2c]
+ bx lr
+
+ arm_func_start FUN_020B7CE4
+FUN_020B7CE4: ; 0x020B7CE4
+ ldrh r0, [r0, #0x30]
+ mov r0, r0, lsl #0x3
+ bx lr
+
+ arm_func_start FUN_020B7CF0
+FUN_020B7CF0: ; 0x020B7CF0
+ ldrh r12, [r0, #0x10]
+ mov r3, #0x0
+ bic r12, r12, #0x1
+ strh r12, [r0, #0x10]
+ ldrh r12, [r0, #0x20]
+ bic r12, r12, #0x1
+ strh r12, [r0, #0x20]
+ ldr r12, [r0, #0x8]
+ str r12, [r1, #0x0]
+ str r3, [r0, #0x8]
+ ldr r1, [r0, #0x18]
+ str r1, [r2, #0x0]
+ str r3, [r0, #0x18]
+ bx lr
+
+ arm_func_start FUN_020B7D28
+FUN_020B7D28: ; 0x020B7D28
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ movs r8, r1
+ mov r9, r0
+ beq _020B7D40
+ bl GX_BeginLoadTex
+_020B7D40:
+ ldrh r0, [r9, #0xc]
+ movs r2, r0, lsl #0x3
+ beq _020B7D74
+ ldr r1, [r9, #0x8]
+ ldr r0, _020B7DF4 ; =0x0000FFFF
+ ldr r3, [r9, #0x14]
+ and r1, r1, r0
+ add r0, r9, r3
+ mov r1, r1, lsl #0x3
+ bl GX_LoadTex
+ ldrh r0, [r9, #0x10]
+ orr r0, r0, #0x1
+ strh r0, [r9, #0x10]
+_020B7D74:
+ ldrh r0, [r9, #0x1c]
+ movs r7, r0, lsl #0x3
+ beq _020B7DDC
+ ldr r1, [r9, #0x18]
+ ldr r0, _020B7DF4 ; =0x0000FFFF
+ ldr r3, [r9, #0x24]
+ and r4, r1, r0
+ mov r5, r4, lsl #0x3
+ ldr r6, [r9, #0x28]
+ mov r1, r5
+ mov r2, r7
+ add r0, r9, r3
+ add r6, r9, r6
+ bl GX_LoadTex
+ ldr r0, _020B7DF8 ; =0x0001FFFF
+ and r1, r5, #0x40000
+ and r0, r0, r4, lsl #0x3
+ mov r0, r0, lsr #0x1
+ add r2, r0, #0x20000
+ mov r0, r6
+ add r1, r2, r1, lsr #0x2
+ mov r2, r7, lsr #0x1
+ bl GX_LoadTex
+ ldrh r0, [r9, #0x20]
+ orr r0, r0, #0x1
+ strh r0, [r9, #0x20]
+_020B7DDC:
+ cmp r8, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,pc}
+_020B7DE8: ; 0x020B7DE8
+ bl GX_EndLoadTex
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B7DF4: .word 0x0000FFFF
+_020B7DF8: .word 0x0001FFFF
+
+ arm_func_start FUN_020B7DFC
+FUN_020B7DFC: ; 0x020B7DFC
+ cmp r1, #0x0
+ strne r1, [r0, #0x8]
+ cmp r2, #0x0
+ strne r2, [r0, #0x18]
+ bx lr
+
+ arm_func_start FUN_020B7E10
+FUN_020B7E10: ; 0x020B7E10
+ ldrh r0, [r0, #0x1c]
+ mov r0, r0, lsl #0x3
+ bx lr
+
+ arm_func_start FUN_020B7E1C
+FUN_020B7E1C: ; 0x020B7E1C
+ ldrh r0, [r0, #0xc]
+ mov r0, r0, lsl #0x3
+ bx lr
+
+ arm_func_start FUN_020B7E28
+FUN_020B7E28: ; 0x020B7E28
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ add r0, r5, #0x8
+ mov r4, r1
+ bl FUN_020B7E88
+_020B7E40: ; 0x020B7E40
+ cmp r0, #0x0
+ bne _020B7E74
+ mov r1, r4
+ add r0, r5, #0x10
+ bl FUN_020B7E88
+_020B7E54: ; 0x020B7E54
+ cmp r0, #0x0
+ bne _020B7E74
+ mov r1, r4
+ add r0, r5, #0x18
+ bl FUN_020B7E88
+_020B7E68: ; 0x020B7E68
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B7E74:
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x10
+ str r0, [r5, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B7E88
+FUN_020B7E88:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r2, r1
+ bne _020B7EB8
+ ldr r3, [r2, #0x10]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ str r2, [r1, #0x10]
+ mov r0, #0x1
+ bx lr
+_020B7EB8:
+ ldr r3, [r2, #0x10]
+ cmp r3, #0x0
+ beq _020B7EF4
+_020B7EC4:
+ cmp r3, r1
+ bne _020B7EE4
+ ldr r1, [r3, #0x10]
+ mov r0, #0x0
+ str r1, [r2, #0x10]
+ str r0, [r3, #0x10]
+ mov r0, #0x1
+ bx lr
+_020B7EE4:
+ mov r2, r3
+ ldr r3, [r3, #0x10]
+ cmp r3, #0x0
+ bne _020B7EC4
+_020B7EF4:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B7EFC
+FUN_020B7EFC: ; 0x020B7EFC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ ldr r2, [r4, #0x8]
+ mov r5, r0
+ ldrb r0, [r2, #0x0]
+ cmp r0, #0x4a
+ beq _020B7F50
+ cmp r0, #0x4d
+ beq _020B7F34
+ cmp r0, #0x56
+ beq _020B7F6C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F34:
+ add r0, r5, #0x3c
+ bl FUN_020B7F88
+ mov r1, r4
+ add r0, r5, #0x8
+ bl FUN_020B7FF8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F50:
+ add r0, r5, #0x44
+ bl FUN_020B7F88
+ mov r1, r4
+ add r0, r5, #0x10
+ bl FUN_020B7FF8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F6C:
+ add r0, r5, #0x4c
+ bl FUN_020B7F88
+ mov r1, r4
+ add r0, r5, #0x18
+ bl FUN_020B7FF8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B7F88
+FUN_020B7F88: ; 0x020B7F88
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B7F9C: ; 0x020B7F9C
+ mov r3, #0x1
+ mov r4, #0x0
+_020B7FA4:
+ ldrb r2, [r1, #0x19]
+ mov r5, r4
+ cmp r2, #0x0
+ ble _020B7FE4
+_020B7FB4:
+ add r2, r1, r5, lsl #0x1
+ ldrh r2, [r2, #0x1a]
+ ands r2, r2, #0x100
+ movne lr, r5, asr #0x5
+ andne r2, r5, #0x1f
+ ldrne r12, [r0, lr, lsl #0x2]
+ add r5, r5, #0x1
+ orrne r2, r12, r3, lsl r2
+ strne r2, [r0, lr, lsl #0x2]
+ ldrb r2, [r1, #0x19]
+ cmp r5, r2
+ blt _020B7FB4
+_020B7FE4:
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x0
+ bne _020B7FA4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020B7FF8
+FUN_020B7FF8: ; 0x020B7FF8
+ ldr r12, [r0, #0x0]
+ cmp r12, #0x0
+ streq r1, [r0, #0x0]
+ bxeq lr
+ ldr r3, [r12, #0x10]
+ cmp r3, #0x0
+ bne _020B8058
+ ldrb r3, [r12, #0x18]
+ ldrb r2, [r1, #0x18]
+ cmp r3, r2
+ bls _020B8050
+ ldr r2, [r1, #0x10]
+ mov r3, r1
+ cmp r2, #0x0
+ beq _020B8044
+_020B8034:
+ ldr r3, [r3, #0x10]
+ ldr r2, [r3, #0x10]
+ cmp r2, #0x0
+ bne _020B8034
+_020B8044:
+ str r12, [r3, #0x10]
+ str r1, [r0, #0x0]
+ bx lr
+_020B8050:
+ str r1, [r12, #0x10]
+ bx lr
+_020B8058:
+ cmp r3, #0x0
+ beq _020B80AC
+ ldrb r2, [r1, #0x18]
+_020B8064:
+ ldrb r0, [r3, #0x18]
+ cmp r0, r2
+ blo _020B809C
+ ldr r0, [r1, #0x10]
+ mov r2, r1
+ cmp r0, #0x0
+ beq _020B8090
+_020B8080:
+ ldr r2, [r2, #0x10]
+ ldr r0, [r2, #0x10]
+ cmp r0, #0x0
+ bne _020B8080
+_020B8090:
+ str r1, [r12, #0x10]
+ str r3, [r2, #0x10]
+ bx lr
+_020B809C:
+ mov r12, r3
+ ldr r3, [r3, #0x10]
+ cmp r3, #0x0
+ bne _020B8064
+_020B80AC:
+ str r1, [r12, #0x10]
+ bx lr
+
+ arm_func_start FUN_020B80B4
+FUN_020B80B4: ; 0x020B80B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r1, r5
+ mov r0, #0x0
+ mov r2, #0x54
+ bl MIi_CpuClear32
+ ldr r0, _020B8104 ; =0x021065B4
+ ldr r1, _020B8108 ; =0x021065B0
+ ldr r2, [r0, #0x0]
+ ldr r0, _020B810C ; =0x021065AC
+ str r2, [r5, #0xc]
+ ldr r1, [r1, #0x0]
+ str r1, [r5, #0x14]
+ ldr r0, [r0, #0x0]
+ str r0, [r5, #0x1c]
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B8104: .word 0x021065B4
+_020B8108: .word 0x021065B0
+_020B810C: .word 0x021065AC
+
+ arm_func_start FUN_020B8110
+FUN_020B8110: ; 0x020B8110
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ str r12, [r0, #0x0]
+ str r1, [r0, #0x8]
+ str r12, [r0, #0x10]
+ mov r4, #0x7f
+ strb r4, [r0, #0x18]
+ mov r4, #0x1000
+ str r4, [r0, #0x4]
+ ldr lr, _020B81A4 ; =0x02106594
+ str r3, [r0, #0x14]
+ ldr r6, [lr, #0x0]
+ cmp r6, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r7,pc}
+_020B8150: ; 0x020B8150
+ ldrb r7, [r1, #0x0]
+ ldr r4, _020B81A8 ; =0x021065B8
+_020B8158:
+ ldrb r3, [r4, r12, lsl #0x3]
+ mov r5, r12, lsl #0x3
+ cmp r7, r3
+ bne _020B8190
+ add r3, r4, r5
+ ldrh lr, [r1, #0x2]
+ ldrh r3, [r3, #0x2]
+ cmp lr, r3
+ bne _020B8190
+ ldr r3, _020B81AC ; =0x021065BC
+ ldr r3, [r3, r5]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B8190:
+ add r12, r12, #0x1
+ cmp r12, r6
+ blo _020B8158
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B81A4: .word 0x02106594
+_020B81A8: .word 0x021065B8
+_020B81AC: .word 0x021065BC
+
+ arm_func_start FUN_020B81B0
+FUN_020B81B0: ; 0x020B81B0
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x4a
+ beq _020B81E4
+ cmp r0, #0x4d
+ beq _020B81D0
+ cmp r0, #0x56
+ beq _020B81E4
+ b _020B81F8
+_020B81D0:
+ ldrb r0, [r1, #0x18]
+ mov r0, r0, lsl #0x1
+ add r0, r0, #0x1c
+ bic r0, r0, #0x3
+ bx lr
+_020B81E4:
+ ldrb r0, [r1, #0x17]
+ mov r0, r0, lsl #0x1
+ add r0, r0, #0x1c
+ bic r0, r0, #0x3
+ bx lr
+_020B81F8:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020B8200
+FUN_020B8200: ; 0x020B8200
+ cmp r0, #0x0
+ ldrne ip, _020B8260 ; =0x021CED18
+ ldrne r12, [r12, #0xa0]
+ andne r12, r12, #0xff
+ strne r12, [r0, #0x0]
+ cmp r1, #0x0
+ ldrne r0, _020B8260 ; =0x021CED18
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x8
+ andne r0, r0, #0xff
+ strne r0, [r1, #0x0]
+ cmp r2, #0x0
+ ldrne r0, _020B8260 ; =0x021CED18
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x10
+ andne r0, r0, #0xff
+ strne r0, [r2, #0x0]
+ cmp r3, #0x0
+ ldrne r0, _020B8260 ; =0x021CED18
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x18
+ andne r0, r0, #0xff
+ strne r0, [r3, #0x0]
+ bx lr
+ .balign 4
+_020B8260: .word 0x021CED18
+
+ arm_func_start FUN_020B8264
+FUN_020B8264: ; 0x020B8264
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B829C ; =0x021CED18
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x80
+ bne _020B8290
+ bl FUN_020B82E4
+ ldr r0, _020B829C ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x80
+ str r1, [r0, #0xfc]
+_020B8290:
+ ldr r0, _020B82A0 ; =0x021CEE78
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B829C: .word 0x021CED18
+_020B82A0: .word 0x021CEE78
+
+ arm_func_start FUN_020B82A4
+FUN_020B82A4: ; 0x020B82A4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B82DC ; =0x021CED18
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x80
+ bne _020B82D0
+ bl FUN_020B82E4
+ ldr r0, _020B82DC ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x80
+ str r1, [r0, #0xfc]
+_020B82D0:
+ ldr r0, _020B82E0 ; =0x021CEE48
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B82DC: .word 0x021CED18
+_020B82E0: .word 0x021CEE48
+
+ arm_func_start FUN_020B82E4
+FUN_020B82E4: ; 0x020B82E4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B8330 ; =0x021CEDD4
+ ldr r1, _020B8334 ; =0x021CED64
+ ldr r2, _020B8338 ; =0x021CEE48
+ bl MTX_Concat43
+ ldr r3, _020B833C ; =0x021CED18
+ ldr r0, _020B8338 ; =0x021CEE48
+ ldr r2, [r3, #0xf4]
+ mov r1, r0
+ str r2, [sp, #0x0]
+ ldr r2, [r3, #0xec]
+ ldr r3, [r3, #0xf0]
+ bl MTX_ScaleApply43
+ ldr r0, _020B8338 ; =0x021CEE48
+ ldr r1, _020B8340 ; =0x021CEE78
+ bl MTX_Inverse43
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B8330: .word 0x021CEDD4
+_020B8334: .word 0x021CED64
+_020B8338: .word 0x021CEE48
+_020B833C: .word 0x021CED18
+_020B8340: .word 0x021CEE78
+
+ arm_func_start FUN_020B8344
+FUN_020B8344: ; 0x020B8344
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B8384 ; =0x021CED18
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x8
+ bne _020B8378
+ ldr r0, _020B8388 ; =0x021CED64
+ ldr r1, _020B838C ; =0x021CEE18
+ bl MTX_Inverse43
+ ldr r0, _020B8384 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x8
+ str r1, [r0, #0xfc]
+_020B8378:
+ ldr r0, _020B838C ; =0x021CEE18
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B8384: .word 0x021CED18
+_020B8388: .word 0x021CED64
+_020B838C: .word 0x021CEE18
+
+ arm_func_start FUN_020B8390
+FUN_020B8390: ; 0x020B8390
+ orr r0, r0, r1, lsl #0x4
+
+ arm_func_start FUN_020B8394
+FUN_020B8394: ; 0x020B8394
+ ldr r1, [sp, #0x4]
+ orr r0, r0, r2, lsl #0x6
+ orr r0, r1, r0
+ ldr r2, [sp, #0x0]
+ orr r1, r0, r3, lsl #0x18
+ ldr r0, _020B83B8 ; =0x021CED18
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x9c]
+ bx lr
+ .balign 4
+_020B83B8: .word 0x021CED18
+
+ arm_func_start FUN_020B83BC
+FUN_020B83BC: ; 0x020B83BC
+ cmp r2, #0x0
+ movne r2, #0x1
+ orr r1, r0, r1, lsl #0x10
+ moveq r2, #0x0
+ ldr r0, _020B83DC ; =0x021CED18
+ orr r1, r1, r2, lsl #0xf
+ str r1, [r0, #0x98]
+ bx lr
+ .balign 4
+_020B83DC: .word 0x021CED18
+
+ arm_func_start FUN_020B83E0
+FUN_020B83E0: ; 0x020B83E0
+ cmp r2, #0x0
+ movne r2, #0x1
+ orr r1, r0, r1, lsl #0x10
+ moveq r2, #0x0
+ ldr r0, _020B8400 ; =0x021CED18
+ orr r1, r1, r2, lsl #0xf
+ str r1, [r0, #0x94]
+ bx lr
+ .balign 4
+_020B8400: .word 0x021CED18
+
+ arm_func_start FUN_020B8404
+FUN_020B8404: ; 0x020B8404
+ ldr r2, _020B8414 ; =0x021CEDC0
+ orr r1, r1, r0, lsl #0x1e
+ str r1, [r2, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020B8414: .word 0x021CEDC0
+
+ arm_func_start FUN_020B8418
+FUN_020B8418: ; 0x020B8418
+ stmdb sp!, {r4,lr}
+ ldr ip, _020B8444 ; =0x000003FF
+ ldr lr, _020B8448 ; =0x021CED98
+ and r4, r12, r1, asr #0x3
+ and r1, r12, r2, asr #0x3
+ and r2, r12, r3, asr #0x3
+ orr r1, r4, r1, lsl #0xa
+ orr r1, r1, r2, lsl #0x14
+ orr r1, r1, r0, lsl #0x1e
+ str r1, [lr, r0, lsl #0x2]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B8444: .word 0x000003FF
+_020B8448: .word 0x021CED98
+
+ arm_func_start FUN_020B844C
+FUN_020B844C: ; 0x020B844C
+ ldr r3, _020B846C ; =0x021CEE04
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r0, _020B8470 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0xa4
+ str r1, [r0, #0xfc]
+ bx lr
+ .balign 4
+_020B846C: .word 0x021CEE04
+_020B8470: .word 0x021CED18
+
+ arm_func_start FUN_020B8474
+FUN_020B8474: ; 0x020B8474
+ ldr r3, _020B8494 ; =0x021CEDF8
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r0, _020B8498 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0xa4
+ str r1, [r0, #0xfc]
+ bx lr
+ .balign 4
+_020B8494: .word 0x021CEDF8
+_020B8498: .word 0x021CED18
+
+ arm_func_start FUN_020B849C
+FUN_020B849C: ; 0x020B849C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B84D4 ; =0x021CED18
+ mov r2, #0x3e
+ ldr r0, [r1], #0x4
+ bl FUN_020BB1C0
+ ldr r0, _020B84D4 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0x1
+ str r1, [r0, #0xfc]
+ bic r1, r1, #0x2
+ str r1, [r0, #0xfc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B84D4: .word 0x021CED18
+
+ arm_func_start FUN_020B84D8
+FUN_020B84D8: ; 0x020B84D8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r8, _020B85F4 ; =0x17101610
+ ldr r1, _020B85F8 ; =0x021CED18
+ ldr r5, _020B85FC ; =0x32323232
+ ldr r4, _020B8600 ; =0x60293130
+ ldr r3, _020B8604 ; =0x33333333
+ ldr r2, _020B8608 ; =0x002A1B19
+ mov r7, #0x0
+ mov r6, #0x2
+ ldr r0, _020B860C ; =0x021CED64
+ str r8, [r1, #0x0]
+ str r7, [r1, #0x4]
+ str r6, [r1, #0x48]
+ str r5, [r1, #0x7c]
+ str r4, [r1, #0x90]
+ str r3, [r1, #0xa4]
+ str r2, [r1, #0xb8]
+ bl MTX_Identity43_
+ ldr r0, _020B8610 ; =0x021CED20
+ bl MTX_Identity44_
+ mov r2, r7
+ ldr r1, _020B85F8 ; =0x021CED18
+ ldr r7, _020B8614 ; =0x4210C210
+ ldr r0, _020B8618 ; =0x40000200
+ ldr lr, _020B861C ; =0x2D8B62D8
+ ldr sb, _020B8620 ; =0x800001FF
+ ldr r8, _020B8624 ; =0xC0080000
+ ldr r6, _020B8628 ; =0x001F008F
+ ldr r5, _020B862C ; =0xBFFF0000
+ ldr r4, _020B8630 ; =0x00007FFF
+ ldr ip, _020B8634 ; =0x800003E0
+ ldr r3, _020B8638 ; =0xC0007C00
+ str r0, [r1, #0x84]
+ str lr, [r1, #0x80]
+ mov lr, #0x4000001f
+ ldr r0, _020B863C ; =0x021CEDD4
+ str r9, [r1, #0x88]
+ str r8, [r1, #0x8c]
+ str r7, [r1, #0x94]
+ str r7, [r1, #0x98]
+ str r6, [r1, #0x9c]
+ str r5, [r1, #0xa0]
+ str r4, [r1, #0xa8]
+ str lr, [r1, #0xac]
+ str r12, [r1, #0xb0]
+ str r3, [r1, #0xb4]
+ str r2, [r1, #0xe0]
+ str r2, [r1, #0xe4]
+ str r2, [r1, #0xe8]
+ bl MTX_Identity33_
+ mov r3, #0x1000
+ ldr r0, _020B85F8 ; =0x021CED18
+ mov r2, #0x0
+ rsb r1, r3, #0x0
+ str r3, [r0, #0xec]
+ str r3, [r0, #0xf0]
+ str r3, [r0, #0xf4]
+ str r2, [r0, #0xf8]
+ str r2, [r0, #0xfc]
+ str r2, [r0, #0x248]
+ str r2, [r0, #0x244]
+ str r2, [r0, #0x240]
+ str r2, [r0, #0x254]
+ str r2, [r0, #0x24c]
+ str r3, [r0, #0x250]
+ str r2, [r0, #0x25c]
+ str r2, [r0, #0x258]
+ str r1, [r0, #0x260]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B85F4: .word 0x17101610
+_020B85F8: .word 0x021CED18
+_020B85FC: .word 0x32323232
+_020B8600: .word 0x60293130
+_020B8604: .word 0x33333333
+_020B8608: .word 0x002A1B19
+_020B860C: .word 0x021CED64
+_020B8610: .word 0x021CED20
+_020B8614: .word 0x4210C210
+_020B8618: .word 0x40000200
+_020B861C: .word 0x2D8B62D8
+_020B8620: .word 0x800001FF
+_020B8624: .word 0xC0080000
+_020B8628: .word 0x001F008F
+_020B862C: .word 0xBFFF0000
+_020B8630: .word 0x00007FFF
+_020B8634: .word 0x800003E0
+_020B8638: .word 0xC0007C00
+_020B863C: .word 0x021CEDD4
+
+ arm_func_start FUN_020B8640
+FUN_020B8640: ; 0x020B8640
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r0
+ mov r0, #0x0
+ mov r6, r1
+ str r0, [r7, #0x0]
+ add r4, sp, #0x0
+ mov r5, r2, lsl #0x1
+ mov r8, #0x1
+_020B8664:
+ add r1, r5, r6
+ ldrh r2, [r1, #0x1a]
+ ands r1, r2, #0x100
+ beq _020B869C
+ ldr r3, [r6, #0xc]
+ mov r0, r4
+ mov r1, r6
+ and r2, r2, #0xff
+ blx r3
+ ldr r2, [r7, #0x0]
+ ldr r1, [sp, #0x0]
+ mov r0, r8
+ orr r1, r2, r1
+ str r1, [r7, #0x0]
+_020B869C:
+ ldr r6, [r6, #0x10]
+ cmp r6, #0x0
+ bne _020B8664
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020B86B0
+FUN_020B86B0: ; 0x020B86B0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x5c
+ mov r9, r1
+ ldr r3, [r9, #0x10]
+ mov r10, r0
+ mov r8, r2
+ cmp r3, #0x0
+ bne _020B8704
+ add r2, r9, r8, lsl #0x1
+ ldrh r4, [r2, #0x1a]
+ and r2, r4, #0x300
+ cmp r2, #0x100
+ addne sp, sp, #0x5c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r11,pc}
+_020B86EC: ; 0x020B86EC
+ ldr r3, [r9, #0xc]
+ and r2, r4, #0xff
+ blx r3
+ add sp, sp, #0x5c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020B8704:
+ mov r7, #0x0
+ mov r3, r7
+ mov r4, r9
+ mov r2, r8, lsl #0x1
+_020B8714:
+ add r0, r2, r4
+ ldrh r0, [r0, #0x1a]
+ and r0, r0, #0x300
+ cmp r0, #0x100
+ ldreq r0, [r4, #0x4]
+ moveq r1, r4
+ ldr r4, [r4, #0x10]
+ addeq r7, r7, r0
+ addeq r3, r3, #0x1
+ cmp r4, #0x0
+ bne _020B8714
+ cmp r7, #0x0
+ addeq sp, sp, #0x5c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,pc}
+_020B8750: ; 0x020B8750
+ cmp r3, #0x1
+ bne _020B877C
+ add r0, r1, r8, lsl #0x1
+ ldrh r2, [r0, #0x1a]
+ ldr r3, [r1, #0xc]
+ mov r0, r10
+ and r2, r2, #0xff
+ blx r3
+ add sp, sp, #0x5c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020B877C:
+ mov r1, r10
+ mov r0, #0x0
+ mov r2, #0x58
+ bl MIi_CpuClearFast
+_020B878C: ; 0x020B878C
+ mvn r0, #0x0
+ str r0, [r10, #0x0]
+ add r5, sp, #0x0
+ add r4, sp, #0x4
+ add r11, sp, #0x10
+_020B87A0:
+ add r0, r9, r8, lsl #0x1
+ ldrh r2, [r0, #0x1a]
+ and r0, r2, #0x300
+ cmp r0, #0x100
+ bne _020B8948
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ ble _020B8948
+ ldr r3, [r9, #0xc]
+ mov r0, r5
+ mov r1, r9
+ and r2, r2, #0xff
+ blx r3
+ cmp r7, #0x1000
+ ldreq r6, [r9, #0x4]
+ beq _020B87F0
+ ldr r0, [r9, #0x4]
+ mov r1, r7
+ bl FX_Div
+ mov r6, r0
+_020B87F0:
+ ldr r3, [sp, #0x0]
+ mov r1, r4
+ mov r2, r6
+ add r0, r10, #0x4
+ and r3, r3, #0x1
+ bl FUN_020B8998
+ ldr r1, [sp, #0x0]
+ add r0, r10, #0x10
+ and r3, r1, #0x8
+ mov r1, r11
+ mov r2, r6
+ bl FUN_020B8998
+ ldr r3, [sp, #0x0]
+ add r0, r10, #0x1c
+ add r1, sp, #0x1c
+ mov r2, r6
+ and r3, r3, #0x10
+ bl FUN_020B8998
+_020B8838: ; 0x020B8838
+ ldr r0, [sp, #0x0]
+ ands r0, r0, #0x4
+ bne _020B8898
+ ldr r0, [sp, #0x4c]
+ ldr r2, [r10, #0x4c]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x4c]
+ ldr r0, [sp, #0x50]
+ ldr r2, [r10, #0x50]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x50]
+ ldr r0, [sp, #0x54]
+ ldr r2, [r10, #0x54]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x54]
+_020B8898:
+ ldr r0, [sp, #0x0]
+ ands r0, r0, #0x2
+ bne _020B8920
+ ldr r0, [sp, #0x28]
+ ldr r1, [r10, #0x28]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x28]
+ ldr r0, [sp, #0x2c]
+ ldr r1, [r10, #0x2c]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x2c]
+ ldr r0, [sp, #0x30]
+ ldr r1, [r10, #0x30]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x30]
+ ldr r0, [sp, #0x34]
+ ldr r1, [r10, #0x34]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x34]
+ ldr r0, [sp, #0x38]
+ ldr r1, [r10, #0x38]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x38]
+ ldr r0, [sp, #0x3c]
+ ldr r1, [r10, #0x3c]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x3c]
+ b _020B8938
+_020B8920:
+ ldr r0, [r10, #0x28]
+ add r0, r0, r6
+ str r0, [r10, #0x28]
+ ldr r0, [r10, #0x38]
+ add r0, r0, r6
+ str r0, [r10, #0x38]
+_020B8938:
+ ldr r1, [r10, #0x0]
+ ldr r0, [sp, #0x0]
+ and r0, r1, r0
+ str r0, [r10, #0x0]
+_020B8948:
+ ldr r9, [r9, #0x10]
+ cmp r9, #0x0
+ bne _020B87A0
+ add r0, r10, #0x28
+ add r1, r10, #0x34
+ add r2, r10, #0x40
+ bl VEC_CrossProduct
+ add r0, r10, #0x28
+ mov r1, r0
+ bl VEC_Normalize
+ add r0, r10, #0x40
+ mov r1, r0
+ bl VEC_Normalize
+ add r0, r10, #0x40
+ add r1, r10, #0x28
+ add r2, r10, #0x34
+ bl VEC_CrossProduct
+ mov r0, #0x1
+ add sp, sp, #0x5c
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020B8998
+FUN_020B8998:
+ cmp r3, #0x0
+ beq _020B89C8
+ ldr r1, [r0, #0x0]
+ add r1, r1, r2
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, r2
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r2
+ str r1, [r0, #0x8]
+ bx lr
+_020B89C8:
+ ldr r3, [r1, #0x0]
+ ldr r12, [r0, #0x0]
+ mul r3, r2, r3
+ add r3, r12, r3, asr #0xc
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x4]
+ ldr r12, [r0, #0x4]
+ mul r3, r2, r3
+ add r3, r12, r3, asr #0xc
+ str r3, [r0, #0x4]
+ ldr r1, [r1, #0x8]
+ ldr r3, [r0, #0x8]
+ mul r1, r2, r1
+ add r1, r3, r1, asr #0xc
+ str r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020B8A08
+FUN_020B8A08: ; 0x020B8A08
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r0, #0x0
+ mov r4, r2, lsl #0x1
+ mov r7, #0x1
+_020B8A24:
+ add r1, r4, r5
+ ldrh r2, [r1, #0x1a]
+ ands r1, r2, #0x100
+ beq _020B8A4C
+ ldr r3, [r5, #0xc]
+ mov r0, r6
+ mov r1, r5
+ and r2, r2, #0xff
+ blx r3
+ mov r0, r7
+_020B8A4C:
+ ldr r5, [r5, #0x10]
+ cmp r5, #0x0
+ bne _020B8A24
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020B8A60
+FUN_020B8A60: ; 0x020B8A60
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x80
+ mov r5, r0
+ ldr r1, [r5, #0x8]
+ ands r0, r1, #0x200
+ bne _020B8DB4
+ ands r0, r1, #0x1
+ beq _020B8DB4
+ add r0, sp, #0x10
+ mov r1, #0x0
+ bl FUN_020BB824
+ mov r0, #0x1e
+ str r0, [sp, #0x0]
+ add r1, sp, #0x0
+ mov r0, #0x13
+ mov r2, #0x1
+ bl FUN_020BB1C0
+ ldr r2, [r5, #0xb0]
+ ldr r0, [r2, #0x10]
+ and r1, r0, #0xc0000000
+ cmp r1, #0xc0000000
+ beq _020B8AF0
+ bic r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r5, #0xb0]
+ ldr r3, _020B8DC8 ; =0x02106630
+ ldr r0, [r2, #0x10]
+ ldr r1, _020B8DCC ; =0x02106634
+ orr r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r5, #0xb0]
+ ldr r0, [r3, #0x0]
+ ldr r4, [r2, #0x10]
+ mov r2, #0x1
+ str r4, [r3, #0x4]
+ bl FUN_020BB1C0
+_020B8AF0:
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020B8B3C
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020B8B40
+_020B8B3C:
+ mov r0, #0x0
+_020B8B40:
+ cmp r0, #0x0
+ bne _020B8B84
+ ldr r0, [r5, #0xb0]
+ ldr r1, _020B8DD0 ; =0x02106660
+ ldrh r6, [r0, #0x2e]
+ ldrh r3, [r0, #0x2c]
+ mov r0, #0x16
+ rsb r2, r6, #0x0
+ mov lr, r3, lsl #0xf
+ mov r12, r2, lsl #0xf
+ mov r3, r6, lsl #0xf
+ mov r2, #0x10
+ str lr, [r1, #0x0]
+ str r12, [r1, #0x14]
+ str lr, [r1, #0x30]
+ str r3, [r1, #0x34]
+ bl FUN_020BB1C0
+_020B8B84:
+ cmp r4, #0x2
+ bne _020B8BC0
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020B8BC4
+_020B8BC0:
+ mov r0, #0x0
+_020B8BC4:
+ cmp r0, #0x0
+ bne _020B8C28
+ ldr r12, [r5, #0xd8]
+ ldr r0, [r5, #0x0]
+ ldrh r2, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrh r2, [r1, #0x1e]
+ ands r0, r2, #0x2000
+ beq _020B8C28
+ add r1, r1, #0x2c
+ ands r0, r2, #0x2
+ addeq r1, r1, #0x8
+ ands r0, r2, #0x4
+ addeq r1, r1, #0x4
+ ands r0, r2, #0x8
+ addeq r1, r1, #0x8
+ mov r0, #0x18
+ mov r2, #0x10
+ bl FUN_020BB1C0
+_020B8C28:
+ cmp r4, #0x3
+ movne r0, #0x0
+ bne _020B8C54
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x8]
+ and r0, r0, #0x40
+_020B8C54:
+ cmp r0, #0x0
+ bne _020B8D84
+ ldr r0, _020B8DD4 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B8CA0
+ ldr r1, _020B8DD8 ; =0x021CEDF8
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ ldr r1, _020B8DDC ; =0x021CEDD4
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ b _020B8CE0
+_020B8CA0:
+ ands r0, r1, #0x2
+ beq _020B8CBC
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ b _020B8CE0
+_020B8CBC:
+ bl FUN_020B8344
+ mov r1, r0
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+_020B8CE0:
+ bl FUN_020BB394
+ ldr r0, _020B8DE0 ; =0x04000440
+ mov r2, #0x0
+ ldr r1, _020B8DE4 ; =0x04000444
+ str r2, [r0, #0x0]
+ ldr r0, _020B8DE8 ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add r4, sp, #0x40
+_020B8D04:
+ mov r0, r4
+ bl G3X_GetClipMtx
+_020B8D0C: ; 0x020B8D0C
+ cmp r0, #0x0
+ bne _020B8D04
+ ldr r1, _020B8DEC ; =0x04000448
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ ldr r0, _020B8DE0 ; =0x04000440
+ mov r2, #0x3
+ str r2, [r0, #0x0]
+ add r1, sp, #0x40
+ mov r0, #0x16
+ mov r2, #0x10
+ bl FUN_020BB1C0
+ ldr r1, [sp, #0x70]
+ ldr r0, [sp, #0x74]
+ mov r2, r1, asr #0x4
+ mov r1, r0, asr #0x4
+ mov r0, r2, lsl #0x8
+ mov r1, r1, lsl #0x8
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r3, r2, r0, lsl #0x10
+ add r1, sp, #0x4
+ mov r0, #0x22
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl FUN_020BB1C0
+_020B8D84:
+ mov r3, #0x2
+ add r1, sp, #0x8
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl FUN_020BB1C0
+ mov r3, #0x1e
+ add r1, sp, #0xc
+ mov r0, #0x14
+ mov r2, #0x1
+ str r3, [sp, #0xc]
+ bl FUN_020BB1C0
+_020B8DB4:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x3
+ str r0, [r5, #0x0]
+ add sp, sp, #0x80
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B8DC8: .word 0x02106630
+_020B8DCC: .word 0x02106634
+_020B8DD0: .word 0x02106660
+_020B8DD4: .word 0x021CED18
+_020B8DD8: .word 0x021CEDF8
+_020B8DDC: .word 0x021CEDD4
+_020B8DE0: .word 0x04000440
+_020B8DE4: .word 0x04000444
+_020B8DE8: .word 0x04000454
+_020B8DEC: .word 0x04000448
+
+ arm_func_start FUN_020B8DF0
+FUN_020B8DF0: ; 0x020B8DF0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x44
+ mov r7, r0
+ ldr r1, [r7, #0x8]
+ ands r0, r1, #0x200
+ bne _020B90E8
+ ands r0, r1, #0x1
+ beq _020B90E8
+ ldr r2, [r7, #0xb0]
+ ldr r0, [r2, #0x10]
+ and r1, r0, #0xc0000000
+ cmp r1, #0x80000000
+ beq _020B8E5C
+ bic r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r7, #0xb0]
+ ldr r3, _020B90FC ; =0x02106638
+ ldr r0, [r2, #0x10]
+ ldr r1, _020B9100 ; =0x0210663C
+ orr r0, r0, #0x80000000
+ str r0, [r2, #0x10]
+ ldr r2, [r7, #0xb0]
+ ldr r0, [r3, #0x0]
+ ldr r4, [r2, #0x10]
+ mov r2, #0x1
+ str r4, [r3, #0x4]
+ bl FUN_020BB1C0
+_020B8E5C:
+ mov r0, #0x3
+ str r0, [sp, #0x0]
+ add r1, sp, #0x0
+ mov r0, #0x10
+ mov r2, #0x1
+ bl FUN_020BB1C0
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ moveq r6, #0x0
+ cmp r6, #0x1
+ bne _020B8EC0
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ ldr r0, [r7, #0x8]
+ moveq r6, #0x0
+ and r0, r0, #0x40
+ b _020B8EC4
+_020B8EC0:
+ mov r0, #0x0
+_020B8EC4:
+ cmp r0, #0x0
+ bne _020B8F3C
+ ldr r0, [r7, #0xb0]
+ add r1, sp, #0x38
+ ldrh r4, [r0, #0x2e]
+ ldrh r5, [r0, #0x2c]
+ mov r3, #0x10000
+ rsb r0, r4, #0x0
+ mov r12, r0, lsl #0xf
+ mov lr, r5, lsl #0xf
+ mov r0, #0x1b
+ mov r2, #0x3
+ str lr, [sp, #0x38]
+ str r12, [sp, #0x3c]
+ str r3, [sp, #0x40]
+ bl FUN_020BB1C0
+ mov r0, r5, lsl #0x13
+ mov r1, r4, lsl #0x13
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r3, r2, r0, lsl #0x10
+ add r1, sp, #0x4
+ mov r0, #0x22
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl FUN_020BB1C0
+_020B8F3C:
+ cmp r6, #0x2
+ bne _020B8F78
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ ldr r0, [r7, #0x8]
+ moveq r6, #0x0
+ and r0, r0, #0x40
+ b _020B8F7C
+_020B8F78:
+ mov r0, #0x0
+_020B8F7C:
+ cmp r0, #0x0
+ bne _020B8FE0
+ ldr r4, [r7, #0xd8]
+ ldr r0, [r7, #0x0]
+ ldrh r2, [r4, #0xa]
+ add r3, r4, #0x4
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldrh r2, [r1, #0x1e]
+ ands r0, r2, #0x2000
+ beq _020B8FE0
+ add r1, r1, #0x2c
+ ands r0, r2, #0x2
+ addeq r1, r1, #0x8
+ ands r0, r2, #0x4
+ addeq r1, r1, #0x4
+ ands r0, r2, #0x8
+ addeq r1, r1, #0x8
+ mov r0, #0x18
+ mov r2, #0x10
+ bl FUN_020BB1C0
+_020B8FE0:
+ cmp r6, #0x3
+ movne r0, #0x0
+ bne _020B900C
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x8]
+ and r0, r0, #0x40
+_020B900C:
+ cmp r0, #0x0
+ bne _020B90D0
+ mov r3, #0x2
+ add r1, sp, #0x8
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl FUN_020BB1C0
+ add r1, sp, #0x14
+ mov r0, #0x0
+ bl FUN_020BB824
+ mov r3, #0x3
+ add r1, sp, #0xc
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0xc]
+ bl FUN_020BB1C0
+ ldr r0, _020B9104 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9094
+ ldr r1, _020B9108 ; =0x021CED64
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ ldr r1, _020B910C ; =0x021CEDD4
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ b _020B90D0
+_020B9094:
+ ands r0, r1, #0x2
+ beq _020B90C0
+ ldr r1, _020B9108 ; =0x021CED64
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ b _020B90D0
+_020B90C0:
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+_020B90D0:
+ mov r3, #0x2
+ add r1, sp, #0x10
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x10]
+ bl FUN_020BB1C0
+_020B90E8:
+ ldr r0, [r7, #0x0]
+ add r0, r0, #0x3
+ str r0, [r7, #0x0]
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B90FC: .word 0x02106638
+_020B9100: .word 0x0210663C
+_020B9104: .word 0x021CED18
+_020B9108: .word 0x021CED64
+_020B910C: .word 0x021CEDD4
+
+ arm_func_start FUN_020B9110
+FUN_020B9110: ; 0x020B9110
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ mov r4, r0
+ ldr r2, [r4, #0x8]
+ ands r0, r2, #0x100
+ bne _020B9164
+ ands r0, r2, #0x200
+ bne _020B9164
+ cmp r1, #0x0
+ ldreq r0, [r4, #0xe0]
+ add r1, sp, #0x0
+ streq r0, [sp, #0x8]
+ streq r0, [sp, #0x4]
+ streq r0, [sp, #0x0]
+ ldrne r0, [r4, #0xe4]
+ mov r2, #0x3
+ strne r0, [sp, #0x8]
+ strne r0, [sp, #0x4]
+ strne r0, [sp, #0x0]
+ mov r0, #0x1b
+ bl FUN_020BB1C0
+_020B9164:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x1
+ str r0, [r4, #0x0]
+ add sp, sp, #0x10
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020B9178
+FUN_020B9178: ; 0x020B9178
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r0, [r5, #0x34]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x96]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020B91CC
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x34]
+ blx r1
+ ldr r0, [r5, #0x34]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x96]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r1, r0, #0x40
+ b _020B91D0
+_020B91CC:
+ mov r1, #0x0
+_020B91D0:
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9228
+ cmp r1, #0x0
+ bne _020B9228
+ ldr r0, [r5, #0x0]
+ ldrb r12, [r0, #0x1]
+ ldrb r3, [r0, #0x2]
+ ldrb lr, [r0, #0x3]
+ ldrb r2, [r0, #0x5]
+ ldrb r1, [r0, #0x6]
+ orr r3, r12, r3, lsl #0x8
+ ldrb r6, [r0, #0x4]
+ orr r12, r3, lr, lsl #0x10
+ ldrb r3, [r0, #0x7]
+ orr r1, r2, r1, lsl #0x8
+ orr r6, r12, r6, lsl #0x18
+ ldrb r2, [r0, #0x8]
+ orr r1, r1, r3, lsl #0x10
+ add r0, r0, r6
+ orr r1, r1, r2, lsl #0x18
+ bl FUN_020BB2B0
+_020B9228:
+ cmp r4, #0x3
+ bne _020B9248
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x34]
+ blx r1
+_020B9248:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x9
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020B9258
+FUN_020B9258: ; 0x020B9258
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x8c
+ ldr r1, [r0, #0x4]
+ ldr r4, [r0, #0x0]
+ ldr r6, [r1, #0x4]
+ ldrb r2, [r4, #0x2]
+ ldr r3, [r6, #0x10]
+ mov r10, #0x0
+ str r0, [sp, #0x0]
+ str r2, [sp, #0x8]
+ add r3, r6, r3
+ add r1, sp, #0x34
+ mov r0, r10
+ mov r2, #0x54
+ mov r9, r10
+ str r3, [sp, #0x4]
+ add r8, r4, #0x3
+ bl MIi_CpuClearFast
+ bl FUN_020BB394
+ ldr r0, _020B98AC ; =0x04000440
+ mov r7, r10
+ str r7, [r0, #0x0]
+ mov r0, #0x1
+ ldr r2, _020B98B0 ; =0x0400044C
+ ldr r1, _020B98B4 ; =0x04000454
+ str r0, [r2, #0x0]
+ str r0, [sp, #0x10]
+ str r7, [r1, #0x0]
+ mov r1, #0x2
+ ldr r0, _020B98AC ; =0x04000440
+ str r1, [sp, #0x14]
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bls _020B96CC
+_020B92E4:
+ ldrb r4, [r8, #0x1]
+ mov r0, #0x64
+ ldr r3, _020B98B8 ; =0x021D0380
+ mul r0, r4, r0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x0]
+ mov r1, r4, lsr #0x5
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [sp, #0x10]
+ and r2, r4, #0x1f
+ mov r1, r1, lsl r2
+ ldr r11, [r0, #0xcc]
+ ldr r2, [sp, #0xc]
+ ands r11, r1, r11
+ add r6, r3, r2
+ bne _020B9358
+ ldr r3, [r0, #0xcc]
+ mov r2, #0x54
+ orr r1, r3, r1
+ str r1, [r0, #0xcc]
+ ldr r0, [sp, #0x4]
+ ldr r1, _020B98BC ; =0x04000450
+ mla r0, r4, r2, r0
+ ldrb r2, [r8, #0x0]
+ str r2, [r1, #0x0]
+ ldr r2, [sp, #0x10]
+ ldr r1, _020B98AC ; =0x04000440
+ str r2, [r1, #0x0]
+ bl G3_MultMtx43
+_020B9358:
+ cmp r7, #0x0
+ beq _020B9500
+ ldr r2, [sp, #0x6c]
+ ldr r1, [r5, #0x0]
+ str r2, [sp, #0x18]
+ ldr r2, [sp, #0x70]
+ mov r0, r1, asr #0x1f
+ str r2, [sp, #0x1c]
+ ldr r2, [sp, #0x74]
+ ldr r12, [sp, #0x64]
+ str r2, [sp, #0x20]
+ ldr r2, [sp, #0x78]
+ ldr lr, [sp, #0x68]
+ str r2, [sp, #0x24]
+ ldr r2, [sp, #0x7c]
+ str r2, [sp, #0x28]
+ ldr r2, [sp, #0x80]
+ str r2, [sp, #0x2c]
+ ldr r2, [sp, #0x84]
+ str r2, [sp, #0x30]
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r12, r0
+ str r0, [sp, #0x64]
+ ldr r1, [r5, #0x4]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, lr, r0
+ str r0, [sp, #0x68]
+ ldr r1, [r5, #0x8]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x18]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x6c]
+ ldr r1, [r5, #0xc]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x1c]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x70]
+ ldr r1, [r5, #0x10]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x20]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x74]
+ ldr r1, [r5, #0x14]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x24]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x78]
+ ldr r1, [r5, #0x18]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x28]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x7c]
+ ldr r1, [r5, #0x1c]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x2c]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x80]
+ ldr r1, [r5, #0x20]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x30]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x84]
+_020B9500:
+ cmp r11, #0x0
+ bne _020B9538
+_020B9508:
+ mov r0, r6
+ bl G3X_GetClipMtx
+_020B9510: ; 0x020B9510
+ cmp r0, #0x0
+ bne _020B9508
+ ldr r1, [sp, #0x14]
+ ldr r0, _020B98AC ; =0x04000440
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r1, #0x54
+ mla r0, r4, r1, r0
+ add r0, r0, #0x30
+ bl G3_MultMtx33
+_020B9538:
+ ldrb r1, [r8, #0x2]
+ ldr r2, [sp, #0x34]
+ ldr r0, [r6, #0x0]
+ mov r10, r1, lsl #0x4
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x34]
+ mov r9, r10, asr #0x1f
+ ldr r2, [sp, #0x38]
+ ldr r0, [r6, #0x4]
+ ldr r3, [sp, #0x3c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x38]
+ ldr r0, [r6, #0x8]
+ ldr r2, [sp, #0x40]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x3c]
+ ldr r0, [r6, #0x10]
+ ldr r3, [sp, #0x44]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x40]
+ ldr r0, [r6, #0x14]
+ ldr r2, [sp, #0x48]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x44]
+ ldr r0, [r6, #0x18]
+ ldr r3, [sp, #0x4c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x48]
+ ldr r0, [r6, #0x20]
+ ldr r2, [sp, #0x50]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x4c]
+ ldr r0, [r6, #0x24]
+ ldr r3, [sp, #0x54]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x50]
+ ldr r0, [r6, #0x28]
+ ldr r2, [sp, #0x58]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x54]
+ ldr r0, [r6, #0x30]
+ ldr r3, [sp, #0x5c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x58]
+ ldr r0, [r6, #0x34]
+ ldr r2, [sp, #0x60]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x5c]
+ ldr r0, [r6, #0x38]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x60]
+ cmp r11, #0x0
+ ldr r1, _020B98C0 ; =0x021D03C0
+ ldr r0, [sp, #0xc]
+ add r5, r1, r0
+ add r8, r8, #0x3
+ bne _020B96BC
+_020B96AC:
+ mov r0, r5
+ bl G3X_GetVectorMtx
+_020B96B4: ; 0x020B96B4
+ cmp r0, #0x0
+ bne _020B96AC
+_020B96BC:
+ ldr r0, [sp, #0x8]
+ add r7, r7, #0x1
+ cmp r7, r0
+ blo _020B92E4
+_020B96CC:
+ ldr r1, [r5, #0x0]
+ ldr r4, [sp, #0x64]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r4, r0
+ str r0, [sp, #0x64]
+ ldr r1, [r5, #0x4]
+ ldr r4, [sp, #0x68]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r4, r0
+ str r0, [sp, #0x68]
+ ldr r1, [r5, #0x8]
+ ldr r4, [sp, #0x6c]
+ umull r0, r2, r10, r1
+ mov r3, r0, lsr #0xc
+ mov r0, r1, asr #0x1f
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ orr r3, r3, r2, lsl #0x14
+ adds r0, r4, r3
+ str r0, [sp, #0x6c]
+ ldr r7, [r5, #0xc]
+ ldr r12, [sp, #0x70]
+ mov r6, r7, asr #0x1f
+ umull r11, r8, r10, r7
+ mla r8, r10, r6, r8
+ mla r8, r9, r7, r8
+ mov r6, r11, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ adds r6, r12, r6
+ str r6, [sp, #0x70]
+ ldr r7, [r5, #0x10]
+ ldr r4, [sp, #0x74]
+ mov r6, r7, asr #0x1f
+ umull r11, r8, r10, r7
+ mla r8, r10, r6, r8
+ mla r8, r9, r7, r8
+ mov r6, r11, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ adds r4, r4, r6
+ str r4, [sp, #0x74]
+ ldr r6, [r5, #0x14]
+ ldr r3, [sp, #0x78]
+ mov r4, r6, asr #0x1f
+ umull r8, r7, r10, r6
+ mla r7, r10, r4, r7
+ mla r7, r9, r6, r7
+ mov r4, r8, lsr #0xc
+ orr r4, r4, r7, lsl #0x14
+ adds r3, r3, r4
+ str r3, [sp, #0x78]
+ ldr r4, [r5, #0x18]
+ ldr r2, [sp, #0x7c]
+ mov r3, r4, asr #0x1f
+ umull r7, r6, r10, r4
+ mla r6, r10, r3, r6
+ mla r6, r9, r4, r6
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ adds r2, r2, r3
+ str r2, [sp, #0x7c]
+ ldr r3, [r5, #0x1c]
+ ldr r1, [sp, #0x80]
+ mov r2, r3, asr #0x1f
+ umull r6, r4, r10, r3
+ mla r4, r10, r2, r4
+ mla r4, r9, r3, r4
+ mov r2, r6, lsr #0xc
+ orr r2, r2, r4, lsl #0x14
+ adds r1, r1, r2
+ str r1, [sp, #0x80]
+ ldr r2, [r5, #0x20]
+ ldr lr, [sp, #0x84]
+ mov r1, r2, asr #0x1f
+ umull r4, r3, r10, r2
+ mla r3, r10, r1, r3
+ mla r3, r9, r2, r3
+ mov r1, r4, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ adds r1, lr, r1
+ add r0, sp, #0x64
+ str r1, [sp, #0x84]
+ bl G3_LoadMtx43
+ ldr r1, _020B98AC ; =0x04000440
+ mov r2, #0x1
+ add r0, sp, #0x34
+ str r2, [r1, #0x0]
+ bl G3_LoadMtx43
+ ldr r3, _020B98AC ; =0x04000440
+ mov r0, #0x0
+ str r0, [r3, #0x0]
+ ldr r1, _020B98BC ; =0x04000450
+ mov r2, #0x1
+ mov r0, #0x2
+ str r2, [r1, #0x0]
+ str r0, [r3, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r1, [r0, #0x0]
+ ldr r0, _020B98B0 ; =0x0400044C
+ ldrb r2, [r1, #0x1]
+ mov r1, #0x3
+ str r2, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrb r0, [r2, #0x2]
+ add r0, r0, #0x1
+ mla r1, r0, r1, r2
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x8c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B98AC: .word 0x04000440
+_020B98B0: .word 0x0400044C
+_020B98B4: .word 0x04000454
+_020B98B8: .word 0x021D0380
+_020B98BC: .word 0x04000450
+_020B98C0: .word 0x021D03C0
+
+ arm_func_start FUN_020B98C4
+FUN_020B98C4: ; 0x020B98C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xcc
+ mov r10, r0
+ ldr r2, [r10, #0x8]
+ mov r9, r1
+ ands r0, r2, #0x200
+ mov r7, #0x2
+ ldr r6, _020B9C28 ; =0x02106718
+ ldr fp, _020B9C2C ; =0x02106724
+ ldr r5, _020B9C30 ; =0x021066F4
+ beq _020B992C
+ cmp r9, #0x40
+ beq _020B9900
+ cmp r9, #0x60
+ bne _020B9904
+_020B9900:
+ add r7, r7, #0x1
+_020B9904:
+ cmp r9, #0x20
+ beq _020B9914
+ cmp r9, #0x60
+ bne _020B9918
+_020B9914:
+ add r7, r7, #0x1
+_020B9918:
+ ldr r0, [r10, #0x0]
+ add sp, sp, #0xcc
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ ldmia sp!, {r4-r11,pc}
+_020B992C:
+ cmp r9, #0x40
+ beq _020B993C
+ cmp r9, #0x60
+ bne _020B9974
+_020B993C:
+ add r7, r7, #0x1
+ ands r0, r2, #0x100
+ bne _020B9974
+ cmp r9, #0x40
+ ldreq r0, [r10, #0x0]
+ add r1, sp, #0x0
+ ldreqb r0, [r0, #0x2]
+ mov r2, #0x1
+ streq r0, [sp, #0x0]
+ ldrne r0, [r10, #0x0]
+ ldrneb r0, [r0, #0x3]
+ strne r0, [sp, #0x0]
+ mov r0, #0x14
+ bl FUN_020BB1C0
+_020B9974:
+ ldr r0, [r10, #0x2c]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x94]
+ moveq r8, #0x0
+ cmp r8, #0x1
+ bne _020B99C0
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x2c]
+ blx r1
+ ldr r0, [r10, #0x2c]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x94]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r1, r0, #0x40
+ b _020B99C4
+_020B99C0:
+ mov r1, #0x0
+_020B99C4:
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9BA4
+ cmp r1, #0x0
+ bne _020B9BA4
+ bl FUN_020BB394
+ ldr r2, _020B9C34 ; =0x00151110
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x0]
+ add r4, sp, #0x8
+_020B99F8:
+ mov r0, r4
+ bl G3X_GetClipMtx
+_020B9A00: ; 0x020B9A00
+ cmp r0, #0x0
+ bne _020B99F8
+ ldr r0, _020B9C3C ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9A38
+ bl FUN_020B82A4
+ add r1, sp, #0x48
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x48
+ mov r2, r0
+ bl MTX_Concat44
+ b _020B9A5C
+_020B9A38:
+ ands r0, r1, #0x2
+ beq _020B9A5C
+ ldr r0, _020B9C40 ; =0x021CED64
+ add r1, sp, #0x88
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x88
+ mov r2, r0
+ bl MTX_Concat44
+_020B9A5C:
+ ldr r1, [sp, #0x38]
+ add r0, sp, #0x8
+ str r1, [r6, #0x0]
+ ldr r1, [sp, #0x3c]
+ str r1, [r6, #0x4]
+ ldr r1, [sp, #0x40]
+ str r1, [r6, #0x8]
+ bl VEC_Mag
+_020B9A7C: ; 0x020B9A7C
+ str r0, [r11, #0x0]
+ add r0, sp, #0x18
+ bl VEC_Mag
+ str r0, [r11, #0x4]
+ add r0, sp, #0x28
+ bl VEC_Mag
+ str r0, [r11, #0x8]
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _020B9AB0
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ beq _020B9AD4
+_020B9AB0:
+ add r0, sp, #0x18
+ add r1, r5, #0xc
+ bl VEC_Normalize
+ ldr r0, [r5, #0x14]
+ rsb r0, r0, #0x0
+ str r0, [r5, #0x1c]
+ ldr r0, [r5, #0x10]
+ str r0, [r5, #0x20]
+ b _020B9AF4
+_020B9AD4:
+ add r0, sp, #0x28
+ add r1, r5, #0x18
+ bl VEC_Normalize
+ ldr r0, [r5, #0x1c]
+ rsb r0, r0, #0x0
+ str r0, [r5, #0x14]
+ ldr r0, [r5, #0x20]
+ str r0, [r5, #0x10]
+_020B9AF4:
+ ldr r0, _020B9C3C ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9B48
+ ldr r3, _020B9C44 ; =0x00171012
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C48 ; =0x021066EC
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl FUN_020B8264
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9C4C ; =0x00001B19
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C30 ; =0x021066F4
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9BA4
+_020B9B48:
+ ands r0, r1, #0x2
+ beq _020B9B94
+ ldr r3, _020B9C44 ; =0x00171012
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C48 ; =0x021066EC
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl FUN_020B8344
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9C4C ; =0x00001B19
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C30 ; =0x021066F4
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9BA4
+_020B9B94:
+ ldr r0, _020B9C50 ; =0x021066E8
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x48
+ bl MIi_CpuSend32
+_020B9BA4:
+ cmp r8, #0x3
+ movne r0, #0x0
+ bne _020B9BD0
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x2c]
+ blx r1
+ ldr r0, [r10, #0x8]
+ and r0, r0, #0x40
+_020B9BD0:
+ cmp r9, #0x20
+ beq _020B9BE0
+ cmp r9, #0x60
+ bne _020B9C14
+_020B9BE0:
+ cmp r0, #0x0
+ add r7, r7, #0x1
+ bne _020B9C14
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9C14
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x4
+ ldrb r3, [r0, #0x2]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl FUN_020BB1C0
+_020B9C14:
+ ldr r0, [r10, #0x0]
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ add sp, sp, #0xcc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B9C28: .word 0x02106718
+_020B9C2C: .word 0x02106724
+_020B9C30: .word 0x021066F4
+_020B9C34: .word 0x00151110
+_020B9C38: .word 0x04000400
+_020B9C3C: .word 0x021CED18
+_020B9C40: .word 0x021CED64
+_020B9C44: .word 0x00171012
+_020B9C48: .word 0x021066EC
+_020B9C4C: .word 0x00001B19
+_020B9C50: .word 0x021066E8
+
+ arm_func_start FUN_020B9C54
+FUN_020B9C54: ; 0x020B9C54
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0xc8
+ mov r9, r0
+ ldr r2, [r9, #0x8]
+ mov r8, r1
+ ands r0, r2, #0x200
+ mov r6, #0x2
+ ldr r5, _020B9F58 ; =0x021066D0
+ ldr r4, _020B9F5C ; =0x021066DC
+ beq _020B9CB8
+ cmp r8, #0x40
+ beq _020B9C8C
+ cmp r8, #0x60
+ bne _020B9C90
+_020B9C8C:
+ add r6, r6, #0x1
+_020B9C90:
+ cmp r8, #0x20
+ beq _020B9CA0
+ cmp r8, #0x60
+ bne _020B9CA4
+_020B9CA0:
+ add r6, r6, #0x1
+_020B9CA4:
+ ldr r0, [r9, #0x0]
+ add sp, sp, #0xc8
+ add r0, r0, r6
+ str r0, [r9, #0x0]
+ ldmia sp!, {r4-r10,pc}
+_020B9CB8:
+ cmp r8, #0x40
+ beq _020B9CC8
+ cmp r8, #0x60
+ bne _020B9D00
+_020B9CC8:
+ add r6, r6, #0x1
+ ands r0, r2, #0x100
+ bne _020B9D00
+ cmp r8, #0x40
+ ldreq r0, [r9, #0x0]
+ add r1, sp, #0x0
+ ldreqb r0, [r0, #0x2]
+ mov r2, #0x1
+ streq r0, [sp, #0x0]
+ ldrne r0, [r9, #0x0]
+ ldrneb r0, [r0, #0x3]
+ strne r0, [sp, #0x0]
+ mov r0, #0x14
+ bl FUN_020BB1C0
+_020B9D00:
+ ldr r0, [r9, #0x28]
+ cmp r0, #0x0
+ ldrneb r7, [r9, #0x93]
+ moveq r7, #0x0
+ cmp r7, #0x1
+ bne _020B9D4C
+ ldr r1, [r9, #0x8]
+ mov r0, r9
+ bic r1, r1, #0x40
+ str r1, [r9, #0x8]
+ ldr r1, [r9, #0x28]
+ blx r1
+ ldr r0, [r9, #0x28]
+ cmp r0, #0x0
+ ldrneb r7, [r9, #0x93]
+ ldr r0, [r9, #0x8]
+ moveq r7, #0x0
+ and r1, r0, #0x40
+ b _020B9D50
+_020B9D4C:
+ mov r1, #0x0
+_020B9D50:
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9ED4
+ cmp r1, #0x0
+ bne _020B9ED4
+ bl FUN_020BB394
+ ldr r2, _020B9F60 ; =0x00151110
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x0]
+ add r10, sp, #0x8
+_020B9D84:
+ mov r0, r10
+ bl G3X_GetClipMtx
+_020B9D8C: ; 0x020B9D8C
+ cmp r0, #0x0
+ bne _020B9D84
+ ldr r0, _020B9F68 ; =0x021CED18
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9DC4
+ bl FUN_020B82A4
+ add r1, sp, #0x48
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x48
+ mov r2, r0
+ bl MTX_Concat44
+ b _020B9DE8
+_020B9DC4:
+ ands r0, r1, #0x2
+ beq _020B9DE8
+ ldr r0, _020B9F6C ; =0x021CED64
+ add r1, sp, #0x88
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x88
+ mov r2, r0
+ bl MTX_Concat44
+_020B9DE8:
+ ldr r1, [sp, #0x38]
+ add r0, sp, #0x8
+ str r1, [r5, #0x0]
+ ldr r1, [sp, #0x3c]
+ str r1, [r5, #0x4]
+ ldr r1, [sp, #0x40]
+ str r1, [r5, #0x8]
+ bl VEC_Mag
+_020B9E08: ; 0x020B9E08
+ str r0, [r4, #0x0]
+ add r0, sp, #0x18
+ bl VEC_Mag
+ str r0, [r4, #0x4]
+ add r0, sp, #0x28
+ bl VEC_Mag
+ ldr r1, _020B9F68 ; =0x021CED18
+ str r0, [r4, #0x8]
+ ldr r1, [r1, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9E78
+ ldr r3, _020B9F70 ; =0x00171012
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F74 ; =0x021066A4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl FUN_020B8264
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9F78 ; =0x00001B19
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F7C ; =0x021066AC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9ED4
+_020B9E78:
+ ands r0, r1, #0x2
+ beq _020B9EC4
+ ldr r3, _020B9F70 ; =0x00171012
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F74 ; =0x021066A4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl FUN_020B8344
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9F78 ; =0x00001B19
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F7C ; =0x021066AC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9ED4
+_020B9EC4:
+ ldr r0, _020B9F80 ; =0x021066A0
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x48
+ bl MIi_CpuSend32
+_020B9ED4:
+ cmp r7, #0x3
+ movne r0, #0x0
+ bne _020B9F00
+ ldr r1, [r9, #0x8]
+ mov r0, r9
+ bic r1, r1, #0x40
+ str r1, [r9, #0x8]
+ ldr r1, [r9, #0x28]
+ blx r1
+ ldr r0, [r9, #0x8]
+ and r0, r0, #0x40
+_020B9F00:
+ cmp r8, #0x20
+ beq _020B9F10
+ cmp r8, #0x60
+ bne _020B9F44
+_020B9F10:
+ cmp r0, #0x0
+ add r6, r6, #0x1
+ bne _020B9F44
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9F44
+ ldr r0, [r9, #0x0]
+ add r1, sp, #0x4
+ ldrb r3, [r0, #0x2]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl FUN_020BB1C0
+_020B9F44:
+ ldr r0, [r9, #0x0]
+ add r0, r0, r6
+ str r0, [r9, #0x0]
+ add sp, sp, #0xc8
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B9F58: .word 0x021066D0
+_020B9F5C: .word 0x021066DC
+_020B9F60: .word 0x00151110
+_020B9F64: .word 0x04000400
+_020B9F68: .word 0x021CED18
+_020B9F6C: .word 0x021CED64
+_020B9F70: .word 0x00171012
+_020B9F74: .word 0x021066A4
+_020B9F78: .word 0x00001B19
+_020B9F7C: .word 0x021066AC
+_020B9F80: .word 0x021066A0
+
+ arm_func_start FUN_020B9F84
+FUN_020B9F84: ; 0x020B9F84
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r0, [r10, #0x0]
+ mov r9, r1
+ ldrb r4, [r0, #0x1]
+ mov r7, #0x4
+ strb r4, [r10, #0xae]
+ ldr r0, [r10, #0x8]
+ orr r0, r0, #0x10
+ str r0, [r10, #0x8]
+ ldr r1, [r10, #0x8]
+ ands r0, r1, #0x400
+ beq _020BA01C
+ cmp r9, #0x40
+ beq _020B9FCC
+ cmp r9, #0x60
+ bne _020B9FD0
+_020B9FCC:
+ add r7, r7, #0x1
+_020B9FD0:
+ cmp r9, #0x20
+ beq _020B9FE0
+ cmp r9, #0x60
+ bne _020BA008
+_020B9FE0:
+ add r7, r7, #0x1
+ ands r0, r1, #0x100
+ bne _020BA008
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x8
+ ldrb r3, [r0, #0x4]
+ mov r0, #0x14
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl FUN_020BB1C0
+_020BA008:
+ ldr r0, [r10, #0x0]
+ add sp, sp, #0x14
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ ldmia sp!, {r4-r11,pc}
+_020BA01C:
+ cmp r9, #0x40
+ beq _020BA02C
+ cmp r9, #0x60
+ bne _020BA068
+_020BA02C:
+ cmp r9, #0x40
+ ldreq r0, [r10, #0x0]
+ add r7, r7, #0x1
+ ldreqb r0, [r0, #0x4]
+ streq r0, [sp, #0xc]
+ ldrne r0, [r10, #0x0]
+ ldrneb r0, [r0, #0x5]
+ strne r0, [sp, #0xc]
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA068
+ add r1, sp, #0xc
+ mov r0, #0x14
+ mov r2, #0x1
+ bl FUN_020BB1C0
+_020BA068:
+ add r0, r10, #0x12c
+ str r0, [r10, #0xb4]
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ moveq r8, #0x0
+ cmp r8, #0x1
+ bne _020BA0BC
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r0, r0, #0x40
+ b _020BA0C0
+_020BA0BC:
+ mov r0, #0x0
+_020BA0C0:
+ cmp r0, #0x0
+ bne _020BA2CC
+ ldr r0, [r10, #0x4]
+ ldr r1, [r0, #0x34]
+ cmp r1, #0x0
+ beq _020BA0F4
+ mov r0, #0x58
+ mla r6, r4, r0, r1
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x80
+ moveq r0, #0x1
+ movne r0, #0x0
+ b _020BA0FC
+_020BA0F4:
+ add r6, r10, #0x12c
+ mov r0, #0x0
+_020BA0FC:
+ cmp r0, #0x0
+ bne _020BA2C8
+ mov r0, #0x0
+ str r0, [r6, #0x0]
+ ldr r0, [r10, #0x4]
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ beq _020BA134
+ ldr r3, [r0, #0x14]
+ mov r0, r6
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ bne _020BA2C8
+_020BA134:
+ ldr r2, [r10, #0xd4]
+ ldrh r0, [r2, #0x6]
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r4, r0
+ ldr r1, [r0, #0x4]
+ ldrh r0, [r2, r1]
+ add r4, r2, r1
+ add r5, r4, #0x4
+ ands r0, r0, #0x1
+ ldrne r0, [r6, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r6, #0x0]
+ bne _020BA188
+ ldr r0, [r5, #0x0]
+ str r0, [r6, #0x4c]
+ ldr r0, [r5, #0x4]
+ str r0, [r6, #0x50]
+ ldr r0, [r5, #0x8]
+ add r5, r5, #0xc
+ str r0, [r6, #0x54]
+_020BA188:
+ ldrh r1, [r4, #0x0]
+ ands r0, r1, #0x2
+ ldrne r0, [r6, #0x0]
+ orrne r0, r0, #0x2
+ strne r0, [r6, #0x0]
+ bne _020BA2B0
+ ands r0, r1, #0x8
+ beq _020BA264
+ and r1, r1, #0xf0
+ mov r11, r1, asr #0x4
+ ldrsh r1, [r5, #0x0]
+ add r0, r6, #0x28
+ str r1, [sp, #0x0]
+ ldrsh r1, [r5, #0x2]
+ str r1, [sp, #0x4]
+ blx MI_Zero36B
+ ldrh r0, [r4, #0x0]
+ add r1, r6, r11, lsl #0x2
+ add r5, r5, #0x4
+ ands r0, r0, #0x100
+ movne r0, #0x1000
+ rsbne r2, r0, #0x0
+ moveq r2, #0x1000
+ str r2, [r1, #0x28]
+ ldr r0, _020BA3B4 ; =0x020FF9F0
+ ldr r1, _020BA3B8 ; =0x020FF9F1
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r2, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x0]
+ str r0, [r2, #0x28]
+ ldrb r0, [r1, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x4]
+ str r0, [r1, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x200
+ ldrne r0, [sp, #0x4]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x4]
+ ldr r0, _020BA3BC ; =0x020FF9F2
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x4]
+ str r0, [r1, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x400
+ ldrne r0, [sp, #0x0]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x0]
+ ldr r0, _020BA3C0 ; =0x020FF9F3
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x0]
+ str r0, [r1, #0x28]
+ b _020BA2B0
+_020BA264:
+ ldrsh r0, [r4, #0x2]
+ str r0, [r6, #0x28]
+ ldrsh r0, [r5, #0x0]
+ str r0, [r6, #0x2c]
+ ldrsh r0, [r5, #0x2]
+ str r0, [r6, #0x30]
+ ldrsh r0, [r5, #0x4]
+ str r0, [r6, #0x34]
+ ldrsh r0, [r5, #0x6]
+ str r0, [r6, #0x38]
+ ldrsh r0, [r5, #0x8]
+ str r0, [r6, #0x3c]
+ ldrsh r0, [r5, #0xa]
+ str r0, [r6, #0x40]
+ ldrsh r0, [r5, #0xc]
+ str r0, [r6, #0x44]
+ ldrsh r0, [r5, #0xe]
+ add r5, r5, #0x10
+ str r0, [r6, #0x48]
+_020BA2B0:
+ ldrh r3, [r4, #0x0]
+ ldr r2, [r10, #0x0]
+ ldr r4, [r10, #0xe8]
+ mov r0, r6
+ mov r1, r5
+ blx r4
+_020BA2C8:
+ str r6, [r10, #0xb4]
+_020BA2CC:
+ cmp r8, #0x2
+ bne _020BA308
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r0, r0, #0x40
+ b _020BA30C
+_020BA308:
+ mov r0, #0x0
+_020BA30C:
+ cmp r0, #0x0
+ bne _020BA32C
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA32C
+ ldr r0, [r10, #0xb4]
+ ldr r1, [r10, #0xec]
+ blx r1
+_020BA32C:
+ mov r0, #0x0
+ str r0, [r10, #0xb4]
+ cmp r8, #0x3
+ bne _020BA35C
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x8]
+ and r0, r0, #0x40
+_020BA35C:
+ cmp r9, #0x20
+ beq _020BA36C
+ cmp r9, #0x60
+ bne _020BA3A0
+_020BA36C:
+ cmp r0, #0x0
+ add r7, r7, #0x1
+ bne _020BA3A0
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA3A0
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x10
+ ldrb r3, [r0, #0x4]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x10]
+ bl FUN_020BB1C0
+_020BA3A0:
+ ldr r0, [r10, #0x0]
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BA3B4: .word 0x020FF9F0
+_020BA3B8: .word 0x020FF9F1
+_020BA3BC: .word 0x020FF9F2
+_020BA3C0: .word 0x020FF9F3
+
+ arm_func_start FUN_020BA3C4
+FUN_020BA3C4: ; 0x020BA3C4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ ands r2, r3, #0x200
+ bne _020BA420
+ ands r2, r3, #0x1
+ beq _020BA420
+ ands r2, r3, #0x2
+ bne _020BA420
+ ldr r5, [r4, #0xdc]
+ ldr r3, [r4, #0x0]
+ ldrh r2, [r5, #0x6]
+ ldrb r3, [r3, #0x1]
+ ldr ip, _020BA434 ; =0x02106650
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ mla r2, lr, r3, r2
+ ldr r2, [r2, #0x4]
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ ldr r12, [r12, lr, lsl #0x2]
+ blx r12
+_020BA420:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BA434: .word 0x02106650
+
+ arm_func_start FUN_020BA438
+FUN_020BA438: ; 0x020BA438
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x20]
+ mov r5, r2
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020BA490
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldr r0, [r6, #0x20]
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ ldr r0, [r6, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020BA494
+_020BA490:
+ mov r0, #0x0
+_020BA494:
+ cmp r0, #0x0
+ bne _020BA4B8
+ ldr r0, [r6, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA4B8
+ ldr r0, [r5, #0x8]
+ ldr r1, [r5, #0xc]
+ add r0, r5, r0
+ bl FUN_020BB2B0
+_020BA4B8:
+ cmp r4, #0x2
+ bne _020BA4E8
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldr r0, [r6, #0x20]
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ moveq r4, #0x0
+_020BA4E8:
+ cmp r4, #0x3
+ ldmneia sp!, {r4-r6,pc}
+_020BA4F0: ; 0x020BA4F0
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BA50C
+FUN_020BA50C: ; 0x020BA50C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldr r5, [r4, #0x8]
+ ands r0, r5, #0x200
+ bne _020BA578
+ ldr r2, [r4, #0x0]
+ ands r0, r5, #0x1
+ ldrb r3, [r2, #0x1]
+ bne _020BA544
+ ands r0, r5, #0x8
+ beq _020BA544
+ ldrb r0, [r4, #0xad]
+ cmp r3, r0
+ beq _020BA578
+_020BA544:
+ ldr r6, [r4, #0xd8]
+ ldr ip, _020BA588 ; =0x02106640
+ ldrh r2, [r6, #0xa]
+ add r5, r6, #0x4
+ mov r0, r4
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ mla r2, lr, r3, r2
+ ldr r2, [r2, #0x4]
+ ldrh lr, [r6, r2]
+ add r2, r6, r2
+ ldr r12, [r12, lr, lsl #0x2]
+ blx r12
+_020BA578:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BA588: .word 0x02106640
+
+ arm_func_start FUN_020BA58C
+FUN_020BA58C: ; 0x020BA58C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x20
+ mov r8, r0
+ mov r6, r3
+ strb r6, [r8, #0xad]
+ ldr r3, [r8, #0x8]
+ add r0, r8, #0xf4
+ orr r3, r3, #0x8
+ str r3, [r8, #0x8]
+ str r0, [r8, #0xb0]
+ ldr r0, [r8, #0x1c]
+ mov r4, r1
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ mov r7, r2
+ moveq r5, #0x0
+ cmp r5, #0x1
+ bne _020BA608
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ ldr r0, [r8, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BA60C
+_020BA608:
+ mov r0, #0x0
+_020BA60C:
+ cmp r0, #0x0
+ bne _020BA8C0
+ ldr r0, [r8, #0x4]
+ ldr r0, [r0, #0x38]
+ cmp r0, #0x0
+ beq _020BA638
+ ldr r1, [r8, #0x8]
+ ands r1, r1, #0x80
+ moveq r1, #0x38
+ mlaeq r4, r6, r1, r0
+ beq _020BA8BC
+_020BA638:
+ cmp r4, #0x20
+ beq _020BA648
+ cmp r4, #0x40
+ bne _020BA684
+_020BA648:
+ mov r1, r6, lsr #0x5
+ add r1, r8, r1, lsl #0x2
+ and r2, r6, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r1, [r1, #0xbc]
+ ands r1, r2, r1
+ beq _020BA684
+ cmp r0, #0x0
+ movne r1, #0x38
+ mlane r4, r6, r1, r0
+ ldreq r1, _020BA9D8 ; =0x021CEF80
+ moveq r0, #0x38
+ mlaeq r4, r6, r0, r1
+ b _020BA8BC
+_020BA684:
+ cmp r0, #0x0
+ beq _020BA6BC
+ add r4, r8, #0xbc
+ mov r3, r6, lsr #0x5
+ ldr r2, [r4, r3, lsl #0x2]
+ and r0, r6, #0x1f
+ mov r1, #0x1
+ orr r0, r2, r1, lsl r0
+ str r0, [r4, r3, lsl #0x2]
+ ldr r1, [r8, #0x4]
+ mov r0, #0x38
+ ldr r1, [r1, #0x38]
+ mla r4, r6, r0, r1
+ b _020BA6F0
+_020BA6BC:
+ cmp r4, #0x40
+ addne r4, r8, #0xf4
+ bne _020BA6F0
+ add lr, r8, #0xbc
+ mov r12, r6, lsr #0x5
+ ldr r1, _020BA9D8 ; =0x021CEF80
+ ldr r4, [lr, r12, lsl #0x2]
+ mov r0, #0x38
+ and r2, r6, #0x1f
+ mov r3, #0x1
+ orr r2, r4, r3, lsl r2
+ mla r4, r6, r0, r1
+ str r2, [lr, r12, lsl #0x2]
+_020BA6F0:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ ldr r3, [r8, #0xd8]
+ ldrh r0, [r3, #0xa]
+ add r2, r3, #0x4
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r6, r0
+ ldr r0, [r0, #0x4]
+ ldr r1, _020BA9DC ; =0x021CED18
+ add r0, r3, r0
+ ldrh r0, [r0, #0x1e]
+ ands r0, r0, #0x20
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x20
+ strne r0, [r4, #0x0]
+ ldrh r2, [r7, #0x1e]
+ ldr r0, _020BA9E0 ; =0x020FF9D0
+ ldr r12, [r1, #0x94]
+ mov r2, r2, asr #0x6
+ and r2, r2, #0x7
+ ldr lr, [r0, r2, lsl #0x2]
+ ldr r2, [r7, #0x4]
+ mvn r3, lr
+ and r3, r12, r3
+ and r2, r2, lr
+ orr r2, r3, r2
+ str r2, [r4, #0x4]
+ ldrh r12, [r7, #0x1e]
+ ldr r3, [r1, #0x98]
+ ldr r2, [r7, #0x8]
+ mov r12, r12, asr #0x9
+ and r12, r12, #0x7
+ ldr r12, [r0, r12, lsl #0x2]
+ mvn r0, r12
+ and r3, r3, r0
+ and r0, r2, r12
+ orr r0, r3, r0
+ str r0, [r4, #0x8]
+ ldr r3, [r7, #0x10]
+ ldr r0, [r7, #0xc]
+ ldr r2, [r1, #0x9c]
+ mvn r1, r3
+ and r1, r2, r1
+ and r0, r0, r3
+ orr r0, r1, r0
+ str r0, [r4, #0xc]
+ ldr r0, [r7, #0x14]
+ str r0, [r4, #0x10]
+ ldrh r0, [r7, #0x1c]
+ str r0, [r4, #0x14]
+ ldrh r1, [r7, #0x1e]
+ ands r0, r1, #0x1
+ beq _020BA850
+ ands r1, r1, #0x2
+ ldrne r1, [r4, #0x0]
+ add r0, r7, #0x2c
+ orrne r1, r1, #0x1
+ strne r1, [r4, #0x0]
+ bne _020BA7F4
+ ldr r1, [r0, #0x0]
+ str r1, [r4, #0x18]
+ ldr r1, [r0, #0x4]
+ add r0, r0, #0x8
+ str r1, [r4, #0x1c]
+_020BA7F4:
+ ldrh r1, [r7, #0x1e]
+ ands r1, r1, #0x4
+ ldrne r1, [r4, #0x0]
+ orrne r1, r1, #0x2
+ strne r1, [r4, #0x0]
+ bne _020BA820
+ ldrsh r1, [r0, #0x0]
+ strh r1, [r4, #0x20]
+ ldrsh r1, [r0, #0x2]
+ add r0, r0, #0x4
+ strh r1, [r4, #0x22]
+_020BA820:
+ ldrh r1, [r7, #0x1e]
+ ands r1, r1, #0x8
+ ldreq r1, [r0, #0x0]
+ streq r1, [r4, #0x24]
+ ldreq r0, [r0, #0x4]
+ streq r0, [r4, #0x28]
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r4, #0x0]
+ ldr r0, [r4, #0x0]
+ orr r0, r0, #0x8
+ str r0, [r4, #0x0]
+_020BA850:
+ ldr r0, [r8, #0x4]
+ ldr r1, [r0, #0x8]
+ cmp r1, #0x0
+ beq _020BA890
+ mov r2, r6, lsr #0x5
+ add r2, r0, r2, lsl #0x2
+ and r3, r6, #0x1f
+ mov r12, #0x1
+ mov r3, r12, lsl r3
+ ldr r2, [r2, #0x3c]
+ ands r2, r3, r2
+ beq _020BA890
+ ldr r3, [r0, #0xc]
+ mov r0, r4
+ mov r2, r6
+ blx r3
+_020BA890:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x18
+ beq _020BA8BC
+ ldrh r0, [r7, #0x20]
+ strh r0, [r4, #0x2c]
+ ldrh r0, [r7, #0x22]
+ strh r0, [r4, #0x2e]
+ ldr r0, [r7, #0x24]
+ str r0, [r4, #0x30]
+ ldr r0, [r7, #0x28]
+ str r0, [r4, #0x34]
+_020BA8BC:
+ str r4, [r8, #0xb0]
+_020BA8C0:
+ cmp r5, #0x2
+ bne _020BA8FC
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ ldr r0, [r8, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BA900
+_020BA8FC:
+ mov r0, #0x0
+_020BA900:
+ cmp r0, #0x0
+ bne _020BA9AC
+ ldr r4, [r8, #0xb0]
+ ldr r1, [r4, #0xc]
+ ands r0, r1, #0x1f0000
+ beq _020BA9A0
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x20
+ bicne r0, r1, #0x1f0000
+ strne r0, [r4, #0xc]
+ ldr r0, [r8, #0x8]
+ bic r0, r0, #0x2
+ str r0, [r8, #0x8]
+ ldr r0, [r8, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA9AC
+ ldr r0, _020BA9E4 ; =0x00293130
+ ldr r3, _020BA9E8 ; =0x00002B2A
+ str r0, [sp, #0x0]
+ ldr r2, [r4, #0x4]
+ add r1, sp, #0x4
+ str r2, [sp, #0x4]
+ ldr r6, [r4, #0x8]
+ mov r2, #0x6
+ str r6, [sp, #0x8]
+ ldr r6, [r4, #0xc]
+ str r6, [sp, #0xc]
+ str r3, [sp, #0x10]
+ ldr r3, [r4, #0x10]
+ str r3, [sp, #0x14]
+ ldr r3, [r4, #0x14]
+ str r3, [sp, #0x18]
+ bl FUN_020BB1C0
+_020BA984: ; 0x020BA984
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x18
+ beq _020BA9AC
+ ldr r1, [r8, #0xf0]
+ mov r0, r4
+ blx r1
+ b _020BA9AC
+_020BA9A0:
+ ldr r0, [r8, #0x8]
+ orr r0, r0, #0x2
+ str r0, [r8, #0x8]
+_020BA9AC:
+ cmp r5, #0x3
+ addne sp, sp, #0x20
+ ldmneia sp!, {r4-r8,pc}
+_020BA9B8: ; 0x020BA9B8
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ add sp, sp, #0x20
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BA9D8: .word 0x021CEF80
+_020BA9DC: .word 0x021CED18
+_020BA9E0: .word 0x020FF9D0
+_020BA9E4: .word 0x00293130
+_020BA9E8: .word 0x00002B2A
+
+ arm_func_start FUN_020BA9EC
+FUN_020BA9EC: ; 0x020BA9EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x8]
+ ands r0, r1, #0x200
+ bne _020BAAAC
+ ands r0, r1, #0x1
+ beq _020BAAAC
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x8f]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020BAA58
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x18]
+ blx r1
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x8f]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020BAA5C
+_020BAA58:
+ mov r0, #0x0
+_020BAA5C:
+ cmp r0, #0x0
+ bne _020BAA8C
+ ldr r0, [r5, #0x0]
+ ldrb r0, [r0, #0x1]
+ str r0, [sp, #0x0]
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x100
+ bne _020BAA8C
+ add r1, sp, #0x0
+ mov r0, #0x14
+ mov r2, #0x1
+ bl FUN_020BB1C0
+_020BAA8C:
+ cmp r4, #0x3
+ bne _020BAAAC
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x18]
+ blx r1
+_020BAAAC:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x2
+ str r0, [r5, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020BAAC0
+FUN_020BAAC0: ; 0x020BAAC0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x8]
+ ands r0, r0, #0x200
+ bne _020BAC38
+ ldr r1, [r6, #0x0]
+ add r0, r6, #0x184
+ ldrb r1, [r1, #0x1]
+ strb r1, [r6, #0xac]
+ ldr r1, [r6, #0x8]
+ ldrb r4, [r6, #0xac]
+ orr r1, r1, #0x4
+ str r1, [r6, #0x8]
+ str r0, [r6, #0xb8]
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ moveq r5, #0x0
+ cmp r5, #0x1
+ bne _020BAB44
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ ldr r0, [r6, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BAB48
+_020BAB44:
+ mov r0, #0x0
+_020BAB48:
+ cmp r0, #0x0
+ bne _020BABAC
+ ldr r12, [r6, #0x4]
+ ldr r1, [r12, #0x18]
+ cmp r1, #0x0
+ beq _020BAB98
+ mov r0, r4, lsr #0x5
+ add r0, r12, r0, lsl #0x2
+ and r2, r4, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r0, [r0, #0x4c]
+ ands r0, r2, r0
+ beq _020BAB98
+ ldr r0, [r6, #0xb8]
+ ldr r3, [r12, #0x1c]
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ bne _020BABAC
+_020BAB98:
+ ldr r1, [r6, #0x0]
+ ldr r0, [r6, #0xb8]
+ ldrb r1, [r1, #0x2]
+ and r1, r1, #0x1
+ str r1, [r0, #0x0]
+_020BABAC:
+ cmp r5, #0x2
+ bne _020BABE8
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ ldr r0, [r6, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BABEC
+_020BABE8:
+ mov r0, #0x0
+_020BABEC:
+ cmp r0, #0x0
+ bne _020BAC18
+ ldr r0, [r6, #0xb8]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldrne r0, [r6, #0x8]
+ orrne r0, r0, #0x1
+ strne r0, [r6, #0x8]
+ ldreq r0, [r6, #0x8]
+ biceq r0, r0, #0x1
+ streq r0, [r6, #0x8]
+_020BAC18:
+ cmp r5, #0x3
+ bne _020BAC38
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+_020BAC38:
+ ldr r0, [r6, #0x0]
+ add r0, r0, #0x3
+ str r0, [r6, #0x0]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BAC48
+FUN_020BAC48: ; 0x020BAC48
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ beq _020BAC60
+ blx r1
+_020BAC60:
+ ldr r0, [r4, #0x8]
+ orr r0, r0, #0x20
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BAC70
+FUN_020BAC70: ; 0x020BAC70
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0xc]
+ cmp r1, #0x0
+ beq _020BAC88
+ blx r1
+_020BAC88:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x1
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BAC98
+FUN_020BAC98: ; 0x020BAC98
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x188
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ and r0, r0, #0x10
+ cmp r0, #0x10
+ bne _020BAD2C
+ add r1, r4, #0x3c
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ add r1, r4, #0x44
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ add r1, r4, #0x4c
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020BACF8
+ add r0, r4, #0x3c
+ bl FUN_020BAD74
+_020BACF8:
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ beq _020BAD0C
+ add r0, r4, #0x44
+ bl FUN_020BAD74
+_020BAD0C:
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _020BAD20
+ add r0, r4, #0x4c
+ bl FUN_020BAD74
+_020BAD20:
+ ldr r0, [r4, #0x0]
+ bic r0, r0, #0x10
+ str r0, [r4, #0x0]
+_020BAD2C:
+ ldr r2, _020BAD70 ; =0x021CEF7C
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ beq _020BAD4C
+ mov r1, r4
+ bl FUN_020BADE4
+ add sp, sp, #0x188
+ ldmia sp!, {r4,pc}
+_020BAD4C:
+ add r0, sp, #0x0
+ mov r1, r4
+ str r0, [r2, #0x0]
+ bl FUN_020BADE4
+ ldr r0, _020BAD70 ; =0x021CEF7C
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x188
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BAD70: .word 0x021CEF7C
+
+ arm_func_start FUN_020BAD74
+FUN_020BAD74:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020BAD88: ; 0x020BAD88
+ mov r3, #0x1
+ mov r4, #0x0
+_020BAD90:
+ ldrb r2, [r1, #0x19]
+ mov r5, r4
+ cmp r2, #0x0
+ ble _020BADD0
+_020BADA0:
+ add r2, r1, r5, lsl #0x1
+ ldrh r2, [r2, #0x1a]
+ ands r2, r2, #0x100
+ movne lr, r5, asr #0x5
+ andne r2, r5, #0x1f
+ ldrne r12, [r0, lr, lsl #0x2]
+ add r5, r5, #0x1
+ orrne r2, r12, r3, lsl r2
+ strne r2, [r0, lr, lsl #0x2]
+ ldrb r2, [r1, #0x19]
+ cmp r5, r2
+ blt _020BADA0
+_020BADD0:
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x0
+ bne _020BAD90
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020BADE4
+FUN_020BADE4: ; 0x020BADE4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r1, r5
+ mov r0, #0x0
+ mov r2, #0x188
+ bl MIi_CpuClearFast
+ mov r0, #0x1
+ str r0, [r5, #0xc4]
+ str r0, [r5, #0x8]
+ ldr r0, [r4, #0x30]
+ ldr r2, _020BAF60 ; =0x02106614
+ cmp r0, #0x0
+ strne r0, [r5, #0x0]
+ ldreq r1, [r4, #0x4]
+ ldreq r0, [r1, #0x4]
+ addeq r0, r1, r0
+ streq r0, [r5, #0x0]
+ str r4, [r5, #0x4]
+ ldr r0, [r4, #0x4]
+ ldr r1, _020BAF64 ; =0x02106608
+ add r0, r0, #0x40
+ str r0, [r5, #0xd4]
+ ldr r12, [r4, #0x4]
+ ldr r0, _020BAF68 ; =0x02106620
+ ldr r3, [r12, #0x8]
+ add r3, r12, r3
+ str r3, [r5, #0xd8]
+ ldr r12, [r4, #0x4]
+ ldr r3, [r12, #0xc]
+ add r3, r12, r3
+ str r3, [r5, #0xdc]
+ ldr r3, [r4, #0x4]
+ ldrb r3, [r3, #0x15]
+ ldr r2, [r2, r3, lsl #0x2]
+ str r2, [r5, #0xe8]
+ ldr r2, [r4, #0x4]
+ ldrb r2, [r2, #0x15]
+ ldr r1, [r1, r2, lsl #0x2]
+ str r1, [r5, #0xec]
+ ldr r1, [r4, #0x4]
+ ldrb r1, [r1, #0x16]
+ ldr r0, [r0, r1, lsl #0x2]
+ str r0, [r5, #0xf0]
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x1c]
+ str r0, [r5, #0xe0]
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x20]
+ str r0, [r5, #0xe4]
+ ldr r1, [r4, #0x20]
+ cmp r1, #0x0
+ beq _020BAEE0
+ ldrb r0, [r4, #0x24]
+ cmp r0, #0x20
+ bhs _020BAEE0
+ add r0, r5, r0, lsl #0x2
+ str r1, [r0, #0xc]
+ ldrb r0, [r4, #0x24]
+ ldrb r1, [r4, #0x25]
+ add r0, r5, r0
+ strb r1, [r0, #0x8c]
+_020BAEE0:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x80
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x2
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x100
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x4
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x200
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x8
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x400
+ strne r0, [r5, #0x8]
+ ldr r1, [r4, #0x28]
+ cmp r1, #0x0
+ beq _020BAF44
+ mov r0, r5
+ blx r1
+_020BAF44:
+ mov r0, r5
+ bl FUN_020BAF6C
+_020BAF4C: ; 0x020BAF4C
+ ldr r0, [r4, #0x0]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BAF60: .word 0x02106614
+_020BAF64: .word 0x02106608
+_020BAF68: .word 0x02106620
+
+ arm_func_start FUN_020BAF6C
+FUN_020BAF6C:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r6, _020BAFB4 ; =0x02106730
+ add r4, r5, #0x8
+_020BAF7C:
+ ldr r1, [r4, #0x0]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r4, #0x0]
+ ldr r1, [r5, #0x0]
+ ldrb r3, [r1, #0x0]
+ and r1, r3, #0x1f
+ ldr r2, [r6, r1, lsl #0x2]
+ and r1, r3, #0xe0
+ blx r2
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x20
+ beq _020BAF7C
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BAFB4: .word 0x02106730
+
+ arm_func_start FUN_020BAFB8
+FUN_020BAFB8: ; 0x020BAFB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x6c
+ mov r6, r0
+ ldr r12, [r6, #0x1c]
+ mov r4, r1
+ mov r5, r2
+ mov r7, r3
+ cmp r12, #0x1000
+ beq _020BAFF8
+ add r1, sp, #0x54
+ mov r0, #0x1b
+ mov r2, #0x3
+ str r12, [sp, #0x54]
+ str r12, [sp, #0x58]
+ str r12, [sp, #0x5c]
+ bl FUN_020BB1C0
+_020BAFF8:
+ cmp r7, #0x0
+ beq _020BB150
+ ldr r0, [r6, #0x8]
+ add r3, r6, r0
+ ldrh r0, [r3, #0xa]
+ add r2, r3, #0x4
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r4, r0
+ ldr r0, [r0, #0x4]
+ add r4, r3, r0
+ ldr r0, [r4, #0xc]
+ ands r0, r0, #0x1f0000
+ addeq sp, sp, #0x6c
+ ldmeqia sp!, {r4-r7,pc}
+_020BB034: ; 0x020BB034
+ ldr r0, _020BB1B4 ; =0x00293130
+ str r0, [sp, #0x0]
+ ldr r0, [r4, #0x4]
+ str r0, [sp, #0x4]
+ ldr r0, [r4, #0x8]
+ str r0, [sp, #0x8]
+ ldr r1, [r4, #0xc]
+ str r1, [sp, #0xc]
+ ldrh r0, [r4, #0x1e]
+ ands r0, r0, #0x20
+ bicne r0, r1, #0x1f0000
+ ldr r1, _020BB1B8 ; =0x00002B2A
+ strne r0, [sp, #0xc]
+ str r1, [sp, #0x10]
+ ldr r2, [r4, #0x14]
+ ldr r0, [sp, #0x0]
+ str r2, [sp, #0x14]
+ ldrh r3, [r4, #0x1c]
+ add r1, sp, #0x4
+ mov r2, #0x6
+ str r3, [sp, #0x18]
+ bl FUN_020BB1C0
+ ldrh r0, [r4, #0x1e]
+ ands r0, r0, #0x1
+ beq _020BB150
+ ldrb r12, [r6, #0x16]
+ mov r3, #0x8
+ ldr r1, _020BB1BC ; =0x02106620
+ str r3, [sp, #0x1c]
+ ldrh r2, [r4, #0x20]
+ add r0, r4, #0x2c
+ ldr r1, [r1, r12, lsl #0x2]
+ strh r2, [sp, #0x48]
+ ldrh r2, [r4, #0x22]
+ strh r2, [sp, #0x4a]
+ ldr r2, [r4, #0x24]
+ str r2, [sp, #0x4c]
+ ldr r2, [r4, #0x28]
+ str r2, [sp, #0x50]
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x2
+ orrne r2, r3, #0x1
+ strne r2, [sp, #0x1c]
+ bne _020BB0F8
+ ldr r2, [r0, #0x0]
+ str r2, [sp, #0x34]
+ ldr r2, [r0, #0x4]
+ add r0, r0, #0x8
+ str r2, [sp, #0x38]
+_020BB0F8:
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x4
+ ldrne r2, [sp, #0x1c]
+ orrne r2, r2, #0x2
+ strne r2, [sp, #0x1c]
+ bne _020BB124
+ ldrsh r2, [r0, #0x0]
+ strh r2, [sp, #0x3c]
+ ldrsh r2, [r0, #0x2]
+ add r0, r0, #0x4
+ strh r2, [sp, #0x3e]
+_020BB124:
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x8
+ ldreq r2, [r0, #0x0]
+ streq r2, [sp, #0x40]
+ ldreq r0, [r0, #0x4]
+ streq r0, [sp, #0x44]
+ ldrne r0, [sp, #0x1c]
+ orrne r0, r0, #0x4
+ strne r0, [sp, #0x1c]
+ add r0, sp, #0x1c
+ blx r1
+_020BB150:
+ ldr r0, [r6, #0xc]
+ add r2, r6, r0
+ ldrh r0, [r2, #0x6]
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r5, r0
+ ldr r0, [r0, #0x4]
+ add r2, r2, r0
+ ldr r0, [r2, #0x8]
+ ldr r1, [r2, #0xc]
+ add r0, r2, r0
+ bl FUN_020BB2B0
+ ldr r3, [r6, #0x20]
+ cmp r3, #0x1000
+ addeq sp, sp, #0x6c
+ ldmeqia sp!, {r4-r7,pc}
+_020BB190: ; 0x020BB190
+ add r1, sp, #0x60
+ mov r0, #0x1b
+ mov r2, #0x3
+ str r3, [sp, #0x60]
+ str r3, [sp, #0x64]
+ str r3, [sp, #0x68]
+ bl FUN_020BB1C0
+ add sp, sp, #0x6c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020BB1B4: .word 0x00293130
+_020BB1B8: .word 0x00002B2A
+_020BB1BC: .word 0x02106620
+
+ arm_func_start FUN_020BB1C0
+FUN_020BB1C0:
+ stmdb sp!, {r4-r6,lr}
+ ldr r3, _020BB2A4 ; =0x021D1C80
+ mov r6, r0
+ ldr r12, [r3, #0x0]
+ mov r5, r1
+ mov r4, r2
+ cmp r12, #0x0
+ beq _020BB278
+ ldr r0, _020BB2A8 ; =0x021D1C84
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB24C
+ ldr r2, [r12, #0x0]
+ add r0, r2, #0x1
+ add r1, r0, r4
+ cmp r1, #0xc0
+ bhi _020BB24C
+ str r0, [r12, #0x0]
+ ldr r0, [r3, #0x0]
+ cmp r4, #0x0
+ add r0, r0, r2, lsl #0x2
+ str r6, [r0, #0x4]
+ ldmeqia sp!, {r4-r6,pc}
+_020BB21C: ; 0x020BB21C
+ ldr r2, [r3, #0x0]
+ mov r0, r5
+ ldr r1, [r2], #0x4
+ add r1, r2, r1, lsl #0x2
+ mov r2, r4, lsl #0x2
+ bl MIi_CpuCopyFast
+ ldr r0, _020BB2A4 ; =0x021D1C80
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x0]
+ add r0, r0, r4
+ str r0, [r1, #0x0]
+ ldmia sp!, {r4-r6,pc}
+_020BB24C:
+ ldr r0, [r12, #0x0]
+ cmp r0, #0x0
+ beq _020BB260
+ bl FUN_020BB394
+ b _020BB28C
+_020BB260:
+ ldr r0, _020BB2A8 ; =0x021D1C84
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB28C
+ bl FUN_020BB37C
+ b _020BB28C
+_020BB278:
+ ldr r0, _020BB2A8 ; =0x021D1C84
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB28C
+ bl FUN_020BB37C
+_020BB28C:
+ ldr r1, _020BB2AC ; =0x04000400
+ mov r0, r5
+ mov r2, r4, lsl #0x2
+ str r6, [r1, #0x0]
+ bl MIi_CpuSend32
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BB2A4: .word 0x021D1C80
+_020BB2A8: .word 0x021D1C84
+_020BB2AC: .word 0x04000400
+
+ arm_func_start FUN_020BB2B0
+FUN_020BB2B0: ; 0x020BB2B0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ cmp r4, #0x100
+ blo _020BB2DC
+ ldr r1, _020BB360 ; =0x02106814
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ bne _020BB2F8
+_020BB2DC:
+ mov r2, r4, lsr #0x2
+ ldr r0, [r5, #0x0]
+ add r1, r5, #0x4
+ sub r2, r2, #0x1
+ bl FUN_020BB1C0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BB2F8:
+ bl FUN_020BB394
+ ldr r0, _020BB364 ; =0x021D1C88
+ ldr r1, _020BB368 ; =0x021D1C84
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020BB33C
+ ldr r0, _020BB360 ; =0x02106814
+ str r1, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020BB36C ; =FUN_020BB370
+ mov r1, r5
+ mov r2, r4
+ bl MI_SendGXCommandAsyncFast
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BB33C:
+ ldr r0, _020BB360 ; =0x02106814
+ str r1, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020BB36C ; =FUN_020BB370
+ mov r1, r5
+ mov r2, r4
+ bl MI_SendGXCommandAsync
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BB360: .word 0x02106814
+_020BB364: .word 0x021D1C88
+_020BB368: .word 0x021D1C84
+_020BB36C: .word FUN_020BB370
+
+ arm_func_start FUN_020BB370
+FUN_020BB370: ; 0x020BB370
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020BB37C
+FUN_020BB37C: ; 0x020BB37C
+ ldr r0, _020BB390 ; =0x021D1C84
+_020BB380:
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ bne _020BB380
+ bx lr
+ .balign 4
+_020BB390: .word 0x021D1C84
+
+ arm_func_start FUN_020BB394
+FUN_020BB394: ; 0x020BB394
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020BB3FC ; =0x021D1C84
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB3B0
+ bl FUN_020BB37C
+_020BB3B0:
+ ldr r0, _020BB400 ; =0x021D1C80
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r1, _020BB404 ; =0x04000400
+ add r0, r0, #0x4
+ mov r2, r2, lsl #0x2
+ bl MIi_CpuSend32
+ ldr r0, _020BB400 ; =0x021D1C80
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BB3FC: .word 0x021D1C84
+_020BB400: .word 0x021D1C80
+_020BB404: .word 0x04000400
+
+ arm_func_start FUN_020BB408
+FUN_020BB408: ; 0x020BB408
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x1c
+ mov r5, r1
+ mov r4, r2
+ ldr r6, _020BB594 ; =0x021CED20
+ ldr r1, _020BB598 ; =0x021CED64
+ add r2, sp, #0x10
+ bl MTX_MultVec43
+ ldr r1, [sp, #0x14]
+ ldr r0, [r6, #0x1c]
+ ldr r2, [sp, #0x10]
+ smull r8, r7, r1, r0
+ ldr r0, [r6, #0xc]
+ ldr r3, [sp, #0x18]
+ smlal r8, r7, r2, r0
+ ldr r1, [r6, #0x2c]
+ ldr r0, [r6, #0x3c]
+ smlal r8, r7, r3, r1
+ mov r1, r8, lsr #0xc
+ orr r1, r1, r7, lsl #0x14
+ add r0, r1, r0
+ bl FX_InvAsync
+ ldr r2, [sp, #0x14]
+ ldr r1, [r6, #0x10]
+ ldr r0, [r6, #0x14]
+ smull lr, r8, r2, r1
+ smull r12, r9, r2, r0
+ ldr r1, [sp, #0x10]
+ ldr r3, [r6, #0x0]
+ ldr r0, [sp, #0x18]
+ smlal lr, r8, r1, r3
+ ldr r7, [r6, #0x20]
+ ldr r2, [r6, #0x30]
+ smlal lr, r8, r0, r7
+ mov r3, lr, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ add r7, r3, r2
+ ldr r3, [r6, #0x4]
+ ldr r8, [r6, #0x24]
+ smlal r12, r9, r1, r3
+ smlal r12, r9, r0, r8
+ mov r0, r12, lsr #0xc
+ ldr r2, [r6, #0x34]
+ orr r0, r0, r9, lsl #0x14
+ add r6, r0, r2
+ bl FX_GetDivResultFx64c
+ mov r2, r7, asr #0x1f
+ umull r9, lr, r0, r7
+ mla lr, r0, r2, lr
+ mov r3, #0x80000000
+ mla lr, r1, r7, lr
+ adds r9, r9, r3
+ adc r2, lr, #0x0
+ add r2, r2, #0x1000
+ add r2, r2, r2, lsr #0x1f
+ mov r7, r2, asr #0x1
+ umull lr, r2, r0, r6
+ mov r12, r6, asr #0x1f
+ mla r2, r0, r12, r2
+ mla r2, r1, r6, r2
+ adds r3, lr, r3
+ adc r0, r2, #0x0
+ add r0, r0, #0x1000
+ add r0, r0, r0, lsr #0x1f
+ mov r8, #0x0
+ mov r6, r0, asr #0x1
+ cmp r7, #0x0
+ blt _020BB530
+ cmp r6, #0x0
+ blt _020BB530
+ cmp r7, #0x1000
+ bgt _020BB530
+ cmp r6, #0x1000
+ ble _020BB534
+_020BB530:
+ mvn r8, #0x0
+_020BB534:
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ add r2, sp, #0x8
+ add r3, sp, #0xc
+ bl FUN_020B8200
+ ldr r2, [sp, #0x0]
+ ldr r0, [sp, #0x8]
+ ldr r12, [sp, #0xc]
+ sub r0, r0, r2
+ mul r0, r7, r0
+ add r1, r0, #0x800
+ ldr r3, [sp, #0x4]
+ add r1, r2, r1, asr #0xc
+ sub r0, r12, r3
+ mul r0, r6, r0
+ str r1, [r5, #0x0]
+ ldr r1, [sp, #0x4]
+ add r0, r0, #0x800
+ rsb r1, r1, #0xbf
+ sub r1, r1, r0, asr #0xc
+ mov r0, r8
+ str r1, [r4, #0x0]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BB594: .word 0x021CED20
+_020BB598: .word 0x021CED64
+
+ arm_func_start FUN_020BB59C
+FUN_020BB59C: ; 0x020BB59C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ ldr r0, _020BB7C8 ; =0x30415642
+ cmp r1, r0
+ bhi _020BB5F4
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7CC ; =0x30414D42
+ cmp r1, r0
+ bhi _020BB5E4
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7D0 ; =0x30414342
+ cmp r1, r0
+ beq _020BB7B0
+ b _020BB7BC
+_020BB5E4:
+ ldr r0, _020BB7D4 ; =0x30415442
+ cmp r1, r0
+ beq _020BB7B0
+ b _020BB7BC
+_020BB5F4:
+ ldr r0, _020BB7D8 ; =0x30505442
+ cmp r1, r0
+ bhi _020BB618
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7DC ; =0x30444D42
+ cmp r1, r0
+ beq _020BB624
+ b _020BB7BC
+_020BB618:
+ ldr r0, _020BB7E0 ; =0x30585442
+ cmp r1, r0
+ bne _020BB7BC
+_020BB624:
+ mov r11, #0x1
+ mov r0, r5
+ mov r9, r11
+ mov r8, r11
+ bl FUN_020BC0FC
+ movs r4, r0
+ beq _020BB77C
+ bl FUN_020B7E1C
+ mov r7, r0
+ mov r0, r4
+ bl FUN_020B7E10
+ mov r6, r0
+ mov r0, r4
+ bl FUN_020B7CE4
+ mov r10, r0
+ cmp r7, #0x0
+ beq _020BB68C
+ ldr r0, _020BB7E4 ; =0x021064B8
+ mov r1, #0x0
+ ldr r3, [r0, #0x0]
+ mov r0, r7
+ mov r2, r1
+ blx r3
+ movs r7, r0
+ moveq r11, #0x0
+ b _020BB690
+_020BB68C:
+ mov r7, #0x0
+_020BB690:
+ cmp r6, #0x0
+ beq _020BB6BC
+ ldr r1, _020BB7E4 ; =0x021064B8
+ mov r0, r6
+ ldr r3, [r1, #0x0]
+ mov r1, #0x1
+ mov r2, #0x0
+ blx r3
+ movs r6, r0
+ moveq r9, #0x0
+ b _020BB6C0
+_020BB6BC:
+ mov r6, #0x0
+_020BB6C0:
+ cmp r10, #0x0
+ beq _020BB6F0
+ ldr r1, _020BB7E8 ; =0x021064C0
+ ldrh r2, [r4, #0x20]
+ ldr r3, [r1, #0x0]
+ mov r0, r10
+ and r1, r2, #0x8000
+ mov r2, #0x0
+ blx r3
+ movs r10, r0
+ moveq r8, #0x0
+ b _020BB6F4
+_020BB6F0:
+ mov r10, #0x0
+_020BB6F4:
+ cmp r11, #0x0
+ beq _020BB70C
+ cmp r9, #0x0
+ beq _020BB70C
+ cmp r8, #0x0
+ bne _020BB748
+_020BB70C:
+ ldr r1, _020BB7EC ; =0x021064C4
+ mov r0, r10
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020BB7F0 ; =0x021064BC
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020BB7F0 ; =0x021064BC
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020BB748:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl FUN_020B7DFC
+ mov r0, r4
+ mov r1, r10
+ bl FUN_020B7CDC
+ mov r0, r4
+ mov r1, #0x1
+ bl FUN_020B7D28
+ mov r0, r4
+ mov r1, #0x1
+ bl FUN_020B7C78
+_020BB77C:
+ ldr r1, [r5, #0x0]
+ ldr r0, _020BB7DC ; =0x30444D42
+ cmp r1, r0
+ bne _020BB7A4
+ mov r0, r5
+ bl FUN_020BC13C
+_020BB794: ; 0x020BB794
+ cmp r4, #0x0
+ beq _020BB7A4
+ mov r1, r4
+ bl FUN_020B7790
+_020BB7A4:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020BB7B0:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020BB7BC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BB7C8: .word 0x30415642
+_020BB7CC: .word 0x30414D42
+_020BB7D0: .word 0x30414342
+_020BB7D4: .word 0x30415442
+_020BB7D8: .word 0x30505442
+_020BB7DC: .word 0x30444D42
+_020BB7E0: .word 0x30585442
+_020BB7E4: .word 0x021064B8
+_020BB7E8: .word 0x021064C0
+_020BB7EC: .word 0x021064C4
+_020BB7F0: .word 0x021064BC
+
+ arm_func_start FUN_020BB7F4
+FUN_020BB7F4: ; 0x020BB7F4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl G3X_Init
+ bl FUN_020B84D8
+ ldr r1, _020BB820 ; =0x04000600
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0xc0000000
+ orr r0, r0, #0x80000000
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BB820: .word 0x04000600
+
+ arm_func_start FUN_020BB824
+FUN_020BB824: ; 0x020BB824
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x40
+ mov r6, r0
+ mov r5, r1
+ bl FUN_020BB394
+ ldr r0, _020BB8B4 ; =0x04000440
+ mov r2, #0x0
+ ldr r1, _020BB8B8 ; =0x04000444
+ str r2, [r0, #0x0]
+ ldr r0, _020BB8BC ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ cmp r6, #0x0
+ beq _020BB87C
+ add r4, sp, #0x0
+_020BB860:
+ mov r0, r4
+ bl G3X_GetClipMtx
+_020BB868: ; 0x020BB868
+ cmp r0, #0x0
+ bne _020BB860
+ add r0, sp, #0x0
+ mov r1, r6
+ bl MTX_Copy44To43_
+_020BB87C:
+ cmp r5, #0x0
+ beq _020BB894
+_020BB884:
+ mov r0, r5
+ bl G3X_GetVectorMtx
+_020BB88C: ; 0x020BB88C
+ cmp r0, #0x0
+ bne _020BB884
+_020BB894:
+ ldr r1, _020BB8C0 ; =0x04000448
+ mov r2, #0x1
+ ldr r0, _020BB8B4 ; =0x04000440
+ str r2, [r1, #0x0]
+ mov r1, #0x2
+ str r1, [r0, #0x0]
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BB8B4: .word 0x04000440
+_020BB8B8: .word 0x04000444
+_020BB8BC: .word 0x04000454
+_020BB8C0: .word 0x04000448
+
+ arm_func_start thunk_FUN_020ae84c
+thunk_FUN_020ae84c: ; 0x020BB8C4
+ ldr ip, _020BB8CC ; =FUN_020AE84C
+ bx r12
+ .balign 4
+_020BB8CC: .word FUN_020AE84C
+
+ arm_func_start FUN_020BB8D0
+FUN_020BB8D0: ; 0x020BB8D0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, r1
+ mov r1, r2
+ bl FUN_020B81B0
+ mov r1, r0
+ mov r0, r4
+ bl FUN_020AE868
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BB8F4
+FUN_020BB8F4: ; 0x020BB8F4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB910:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBC74
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB910
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BB934
+FUN_020BB934: ; 0x020BB934
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB950:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBCB8
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB950
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BB974
+FUN_020BB974: ; 0x020BB974
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB990:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBCFC
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB990
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BB9B4
+FUN_020BB9B4: ; 0x020BB9B4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB9D0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBD40
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB9D0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BB9F4
+FUN_020BB9F4: ; 0x020BB9F4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBD84
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA10
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBA34
+FUN_020BBA34: ; 0x020BBA34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBDC8
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA50
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBA74
+FUN_020BBA74: ; 0x020BBA74
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA90:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBE0C
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA90
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBAB4
+FUN_020BBAB4: ; 0x020BBAB4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBAD0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBE50
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBAD0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBAF4
+FUN_020BBAF4: ; 0x020BBAF4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBE94
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB10
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBB34
+FUN_020BBB34: ; 0x020BBB34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBED8
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB50
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBB74
+FUN_020BBB74: ; 0x020BBB74
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB90:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBF1C
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB90
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBBB4
+FUN_020BBBB4: ; 0x020BBBB4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBBD0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBF60
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBBD0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBBF4
+FUN_020BBBF4: ; 0x020BBBF4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBC10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBFA4
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBC10
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBC34
+FUN_020BBC34: ; 0x020BBC34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBC50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl FUN_020BBFE8
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBC50
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BBC74
+FUN_020BBC74: ; 0x020BBC74
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x800
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x800
+ streq r0, [r1, #0xc]
+ bx lr
+
+ arm_func_start FUN_020BBCB8
+FUN_020BBCB8: ; 0x020BBCB8
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x1000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x1000
+ streq r0, [r1, #0xc]
+ bx lr
+
+ arm_func_start FUN_020BBCFC
+FUN_020BBCFC: ; 0x020BBCFC
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x2000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x2000
+ streq r0, [r1, #0xc]
+ bx lr
+
+ arm_func_start FUN_020BBD40
+FUN_020BBD40: ; 0x020BBD40
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x4000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x4000
+ streq r0, [r1, #0xc]
+ bx lr
+
+ arm_func_start FUN_020BBD84
+FUN_020BBD84: ; 0x020BBD84
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x8000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x8000
+ streq r0, [r1, #0xc]
+ bx lr
+
+ arm_func_start FUN_020BBDC8
+FUN_020BBDC8: ; 0x020BBDC8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x1f0000
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BBE0C
+FUN_020BBE0C: ; 0x020BBE0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x3f000000
+ orr r0, r0, r2, lsl #0x18
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BBE50
+FUN_020BBE50: ; 0x020BBE50
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0xc0
+ orr r0, r0, r2, lsl #0x6
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BBE94
+FUN_020BBE94: ; 0x020BBE94
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x30
+ orr r0, r0, r2, lsl #0x4
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BBED8
+FUN_020BBED8: ; 0x020BBED8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0xf
+ orr r0, r0, r2
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BBF1C
+FUN_020BBF1C: ; 0x020BBF1C
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ ldr r3, _020BBF5C ; =0x8000FFFF
+ add r4, r0, r12
+ ldrh r0, [r4, #0xa]
+ add lr, r4, #0x4
+ ldrh r12, [lr, r0]
+ add r0, lr, r0
+ mla r0, r12, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldr r0, [r1, #0x8]
+ and r0, r0, r3
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0x8]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BBF5C: .word 0x8000FFFF
+
+ arm_func_start FUN_020BBF60
+FUN_020BBF60: ; 0x020BBF60
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ mov r3, #0x8000
+ add r4, r0, r12
+ ldrh r12, [r4, #0xa]
+ add lr, r4, #0x4
+ rsb r0, r3, #0x0
+ ldrh r3, [lr, r12]
+ add r12, lr, r12
+ mla r1, r3, r1, r12
+ ldr r1, [r1, #0x4]
+ add r3, r4, r1
+ ldr r1, [r3, #0x8]
+ and r0, r1, r0
+ orr r0, r0, r2
+ str r0, [r3, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BBFA4
+FUN_020BBFA4: ; 0x020BBFA4
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ ldr r3, _020BBFE4 ; =0x8000FFFF
+ add r4, r0, r12
+ ldrh r0, [r4, #0xa]
+ add lr, r4, #0x4
+ ldrh r12, [lr, r0]
+ add r0, lr, r0
+ mla r0, r12, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldr r0, [r1, #0x4]
+ and r0, r0, r3
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0x4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BBFE4: .word 0x8000FFFF
+
+ arm_func_start FUN_020BBFE8
+FUN_020BBFE8: ; 0x020BBFE8
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ mov r3, #0x8000
+ add r4, r0, r12
+ ldrh r12, [r4, #0xa]
+ add lr, r4, #0x4
+ rsb r0, r3, #0x0
+ ldrh r3, [lr, r12]
+ add r12, lr, r12
+ mla r1, r3, r1, r12
+ ldr r1, [r1, #0x4]
+ add r3, r4, r1
+ ldr r1, [r3, #0x4]
+ and r0, r1, r0
+ orr r0, r0, r2
+ str r0, [r3, #0x4]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BC02C
+FUN_020BC02C: ; 0x020BC02C
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r0, #0x18]
+ ldr r3, [r0, #0x8]
+ mov lr, #0x0
+ cmp r4, #0x0
+ add r12, r0, r3
+ ldmlsia sp!, {r4-r6,pc}
+_020BC048: ; 0x020BC048
+ mvn r3, r2
+ add r0, r12, #0x4
+_020BC050:
+ ldrh r5, [r12, #0xa]
+ cmp r1, #0x0
+ ldrh r6, [r0, r5]
+ add r5, r0, r5
+ mla r5, r6, lr, r5
+ ldr r5, [r5, #0x4]
+ add lr, lr, #0x1
+ add r6, r12, r5
+ ldrne r5, [r6, #0x10]
+ orrne r5, r5, r2
+ strne r5, [r6, #0x10]
+ ldreq r5, [r6, #0x10]
+ andeq r5, r5, r3
+ streq r5, [r6, #0x10]
+ cmp lr, r4
+ blo _020BC050
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BC094
+FUN_020BC094: ; 0x020BC094
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r0, #0x18]
+ ldr r3, [r0, #0x8]
+ mov lr, #0x0
+ cmp r4, #0x0
+ add r12, r0, r3
+ ldmlsia sp!, {r4-r6,pc}
+_020BC0B0: ; 0x020BC0B0
+ mvn r3, r2
+ add r0, r12, #0x4
+_020BC0B8:
+ ldrh r5, [r12, #0xa]
+ cmp r1, #0x0
+ ldrh r6, [r0, r5]
+ add r5, r0, r5
+ mla r5, r6, lr, r5
+ ldr r5, [r5, #0x4]
+ add lr, lr, #0x1
+ add r6, r12, r5
+ ldrneh r5, [r6, #0x1e]
+ orrne r5, r5, r2
+ strneh r5, [r6, #0x1e]
+ ldreqh r5, [r6, #0x1e]
+ andeq r5, r5, r3
+ streqh r5, [r6, #0x1e]
+ cmp lr, r4
+ blo _020BC0B8
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BC0FC
+FUN_020BC0FC: ; 0x020BC0FC
+ ldrh r2, [r0, #0xc]
+ ldrh r1, [r0, #0xe]
+ add r3, r0, r2
+ cmp r1, #0x1
+ bne _020BC12C
+ ldr r2, [r0, #0x0]
+ ldr r1, _020BC138 ; =0x30585442
+ cmp r2, r1
+ ldreq r1, [r3, #0x0]
+ addeq r0, r0, r1
+ movne r0, #0x0
+ bx lr
+_020BC12C:
+ ldr r1, [r3, #0x4]
+ add r0, r0, r1
+ bx lr
+ .balign 4
+_020BC138: .word 0x30585442
+
+ arm_func_start FUN_020BC13C
+FUN_020BC13C:
+ ldrh r1, [r0, #0xc]
+ ldr r1, [r0, r1]
+ add r0, r0, r1
+ bx lr
+
+ arm_func_start FUN_020BC14C
+FUN_020BC14C:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r0, #0x1]
+ cmp r2, #0x10
+ bhs _020BC1E4
+ cmp r2, #0x0
+ ldr lr, [r1, #0x0]
+ ldr r12, [r1, #0x4]
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0xc]
+ mov r4, #0x0
+ bls _020BC294
+ ldrh r5, [r0, #0x6]
+ mov r1, r4
+ add r6, r0, r5
+ ldrh r5, [r6, #0x2]
+ add r6, r6, r5
+_020BC190:
+ ldr r5, [r6, r1]
+ add r7, r6, r1
+ cmp r5, lr
+ bne _020BC1CC
+ ldr r5, [r7, #0x4]
+ cmp r5, r12
+ bne _020BC1CC
+ ldr r5, [r7, #0x8]
+ cmp r5, r3
+ bne _020BC1CC
+ ldr r5, [r7, #0xc]
+ cmp r5, r2
+ addeq sp, sp, #0x4
+ moveq r0, r4
+ ldmeqia sp!, {r4-r7,pc}
+_020BC1CC:
+ ldrb r5, [r0, #0x1]
+ add r4, r4, #0x1
+ add r1, r1, #0x10
+ cmp r4, r5
+ blo _020BC190
+ b _020BC294
+_020BC1E4:
+ add r3, r0, #0x8
+ ldrb r2, [r3, #0x1]
+ cmp r2, #0x0
+ beq _020BC294
+ ldrb r5, [r3, r2, lsl #0x2]
+ ldrb r4, [r3, #0x0]
+ add r2, r3, r2, lsl #0x2
+ cmp r4, r5
+ bls _020BC238
+_020BC208:
+ mov r4, r5, asr #0x5
+ ldr r12, [r1, r4, lsl #0x2]
+ and r4, r5, #0x1f
+ mov r4, r12, lsr r4
+ and r4, r4, #0x1
+ add r4, r2, r4
+ ldrb r12, [r4, #0x1]
+ ldrb r4, [r2, #0x0]
+ ldrb r5, [r3, r12, lsl #0x2]
+ add r2, r3, r12, lsl #0x2
+ cmp r4, r5
+ bhi _020BC208
+_020BC238:
+ ldrh r4, [r0, #0x6]
+ ldr r3, [r1, #0x0]
+ add r12, r0, r4
+ ldrh r4, [r12, #0x2]
+ ldrb r0, [r2, #0x3]
+ add r4, r12, r4
+ ldr r2, [r4, r0, lsl #0x4]
+ add r4, r4, r0, lsl #0x4
+ cmp r2, r3
+ bne _020BC294
+ ldr r3, [r4, #0x4]
+ ldr r2, [r1, #0x4]
+ cmp r3, r2
+ bne _020BC294
+ ldr r3, [r4, #0x8]
+ ldr r2, [r1, #0x8]
+ cmp r3, r2
+ bne _020BC294
+ ldr r2, [r4, #0xc]
+ ldr r1, [r1, #0xc]
+ cmp r2, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020BC294:
+ mvn r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BC2A0
+FUN_020BC2A0: ; 0x020BC2A0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r0, #0x1]
+ cmp r2, #0x10
+ bhs _020BC34C
+ cmp r2, #0x0
+ ldr lr, [r1, #0x0]
+ ldr r12, [r1, #0x4]
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0xc]
+ mov r4, #0x0
+ bls _020BC404
+ ldrh r5, [r0, #0x6]
+ mov r1, r4
+ add r6, r0, r5
+ ldrh r5, [r6, #0x2]
+ add r6, r6, r5
+_020BC2E4:
+ ldr r5, [r6, r1]
+ add r7, r6, r1
+ cmp r5, lr
+ bne _020BC334
+ ldr r5, [r7, #0x4]
+ cmp r5, r12
+ bne _020BC334
+ ldr r5, [r7, #0x8]
+ cmp r5, r3
+ bne _020BC334
+ ldr r5, [r7, #0xc]
+ cmp r5, r2
+ bne _020BC334
+ ldrh r2, [r0, #0x6]
+ add sp, sp, #0x4
+ ldrh r1, [r0, r2]
+ add r0, r0, r2
+ add r0, r0, #0x4
+ mla r0, r1, r4, r0
+ ldmia sp!, {r4-r7,pc}
+_020BC334:
+ ldrb r5, [r0, #0x1]
+ add r4, r4, #0x1
+ add r1, r1, #0x10
+ cmp r4, r5
+ blo _020BC2E4
+ b _020BC404
+_020BC34C:
+ add r3, r0, #0x8
+ ldrb r2, [r3, #0x1]
+ cmp r2, #0x0
+ beq _020BC404
+ ldrb r5, [r3, r2, lsl #0x2]
+ ldrb r4, [r3, #0x0]
+ add r2, r3, r2, lsl #0x2
+ cmp r4, r5
+ bls _020BC3A0
+_020BC370:
+ mov r4, r5, asr #0x5
+ ldr r12, [r1, r4, lsl #0x2]
+ and r4, r5, #0x1f
+ mov r4, r12, lsr r4
+ and r4, r4, #0x1
+ add r4, r2, r4
+ ldrb r12, [r4, #0x1]
+ ldrb r4, [r2, #0x0]
+ ldrb r5, [r3, r12, lsl #0x2]
+ add r2, r3, r12, lsl #0x2
+ cmp r4, r5
+ bhi _020BC370
+_020BC3A0:
+ ldrh r4, [r0, #0x6]
+ ldrb r2, [r2, #0x3]
+ ldr r3, [r1, #0x0]
+ add r0, r0, r4
+ ldrh r4, [r0, #0x2]
+ add r12, r0, r4
+ ldr r4, [r12, r2, lsl #0x4]
+ add r12, r12, r2, lsl #0x4
+ cmp r4, r3
+ bne _020BC404
+ ldr r4, [r12, #0x4]
+ ldr r3, [r1, #0x4]
+ cmp r4, r3
+ bne _020BC404
+ ldr r4, [r12, #0x8]
+ ldr r3, [r1, #0x8]
+ cmp r4, r3
+ bne _020BC404
+ ldr r3, [r12, #0xc]
+ ldr r1, [r1, #0xc]
+ cmp r3, r1
+ ldreqh r1, [r0], #0x4
+ addeq sp, sp, #0x4
+ mlaeq r0, r1, r2, r0
+ ldmeqia sp!, {r4-r7,pc}
+_020BC404:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BC410
+FUN_020BC410: ; 0x020BC410
+ ldrh r3, [r0, #0x12]
+ add r0, r0, #0xc
+ ldrh r2, [r0, r3]
+ add r0, r0, r3
+ add r0, r0, #0x4
+ mla r0, r2, r1, r0
+ bx lr
+
+ arm_func_start FUN_020BC42C
+FUN_020BC42C: ; 0x020BC42C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl FUN_020BC410
+ ldrsh r1, [r0, #0x4]
+ ldrh r3, [r0, #0x6]
+ mul r2, r1, r4
+ add r3, r5, r3
+ mov r2, r2, lsr #0xc
+ b _020BC45C
+_020BC458:
+ sub r2, r2, #0x1
+_020BC45C:
+ cmp r2, #0x0
+ beq _020BC474
+ mov r1, r2, lsl #0x2
+ ldrh r1, [r3, r1]
+ cmp r1, r4
+ bhs _020BC458
+_020BC474:
+ ldrh r1, [r0, #0x0]
+ b _020BC480
+_020BC47C:
+ add r2, r2, #0x1
+_020BC480:
+ add r0, r2, #0x1
+ cmp r0, r1
+ bhs _020BC49C
+ add r0, r3, r2, lsl #0x2
+ ldrh r0, [r0, #0x4]
+ cmp r0, r4
+ bls _020BC47C
+_020BC49C:
+ add r0, r3, r2, lsl #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020BC4A8
+FUN_020BC4A8: ; 0x020BC4A8
+ ldrh r2, [r0, #0xa]
+ add r0, r0, r2
+ add r0, r0, r1, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020BC4B8
+FUN_020BC4B8: ; 0x020BC4B8
+ ldrh r2, [r0, #0x8]
+ add r0, r0, r2
+ add r0, r0, r1, lsl #0x4
+ bx lr
+
+ arm_func_start FUN_020BC4C8
+FUN_020BC4C8: ; 0x020BC4C8
+ ldrh r2, [r0, #0xc]
+ ldr r2, [r0, r2]
+ add r12, r0, r2
+ ldrh r2, [r12, #0xe]
+ add r3, r12, #0x8
+ ldrh r0, [r3, r2]
+ add r2, r3, r2
+ add r2, r2, #0x4
+ mul r1, r0, r1
+ adds r0, r2, r1
+ ldrne r0, [r0, #0x0]
+ addne r0, r12, r0
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020BC500
+FUN_020BC500:
+ stmdb sp!, {r4,lr}
+ ands r4, r3, #0x8000
+ beq _020BC5E0
+ mov r2, #0x0
+ str r2, [r0, #0x20]
+ ldr r4, [r0, #0x20]
+ ldr r2, _020BC684 ; =0x00007FFF
+ str r4, [r0, #0x1c]
+ ldr r4, [r0, #0x1c]
+ and r3, r3, r2
+ str r4, [r0, #0x18]
+ ldr r4, [r0, #0x18]
+ mov r2, #0x3
+ str r4, [r0, #0x14]
+ ldr r4, [r0, #0x14]
+ mul r2, r3, r2
+ str r4, [r0, #0x10]
+ ldr r4, [r0, #0x10]
+ mov r3, r2, lsl #0x1
+ str r4, [r0, #0xc]
+ ldr r4, [r0, #0xc]
+ add r2, r1, r2, lsl #0x1
+ str r4, [r0, #0x8]
+ ldr r4, [r0, #0x8]
+ str r4, [r0, #0x4]
+ ldr r4, [r0, #0x4]
+ str r4, [r0, #0x0]
+ ldrsh r4, [r1, r3]
+ ldrsh r12, [r2, #0x2]
+ ldrsh r3, [r2, #0x4]
+ and r1, r4, #0xf
+ ands r4, r4, #0x10
+ movne lr, #0x1000
+ rsbne lr, lr, #0x0
+ moveq lr, #0x1000
+ str lr, [r0, r1, lsl #0x2]
+ ldr r4, _020BC688 ; =0x020FFA14
+ ldr lr, _020BC68C ; =0x020FFA15
+ ldrb r4, [r4, r1, lsl #0x2]
+ str r12, [r0, r4, lsl #0x2]
+ ldrb lr, [lr, r1, lsl #0x2]
+ str r3, [r0, lr, lsl #0x2]
+ ldrsh lr, [r2, #0x0]
+ ands lr, lr, #0x20
+ ldr lr, _020BC690 ; =0x020FFA16
+ rsbne r3, r3, #0x0
+ ldrb lr, [lr, r1, lsl #0x2]
+ str r3, [r0, lr, lsl #0x2]
+ ldrsh r2, [r2, #0x0]
+ ands r2, r2, #0x40
+ ldr r2, _020BC694 ; =0x020FFA17
+ rsbne r12, r12, #0x0
+ ldrb r1, [r2, r1, lsl #0x2]
+ str r12, [r0, r1, lsl #0x2]
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020BC5E0:
+ ldr r1, _020BC684 ; =0x00007FFF
+ mov r12, #0x5
+ and r1, r3, r1
+ mul r3, r1, r12
+ add r1, r2, r3, lsl #0x1
+ ldrsh lr, [r1, #0x8]
+ mov r12, r3, lsl #0x1
+ mov r3, lr, asr #0x3
+ str r3, [r0, #0x10]
+ ldrsh r12, [r2, r12]
+ and r2, lr, #0x7
+ mov r2, r2, lsl #0x10
+ mov r3, r12, asr #0x3
+ str r3, [r0, #0x0]
+ ldrsh r3, [r1, #0x2]
+ and r12, r12, #0x7
+ orr lr, r12, r2, asr #0xd
+ mov r2, r3, asr #0x3
+ str r2, [r0, #0x4]
+ ldrsh r12, [r1, #0x4]
+ mov r2, lr, lsl #0x10
+ and lr, r3, #0x7
+ mov r3, r12, asr #0x3
+ str r3, [r0, #0x8]
+ ldrsh r3, [r1, #0x6]
+ orr r1, lr, r2, asr #0xd
+ mov r1, r1, lsl #0x10
+ and r2, r12, #0x7
+ orr r1, r2, r1, asr #0xd
+ mov r1, r1, lsl #0x10
+ and r2, r3, #0x7
+ orr r1, r2, r1, asr #0xd
+ mov r1, r1, lsl #0x10
+ mov r1, r1, asr #0x10
+ mov r2, r3, asr #0x3
+ mov r1, r1, lsl #0x13
+ str r2, [r0, #0xc]
+ mov r1, r1, asr #0x13
+ str r1, [r0, #0x14]
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BC684: .word 0x00007FFF
+_020BC688: .word 0x020FFA14
+_020BC68C: .word 0x020FFA15
+_020BC690: .word 0x020FFA16
+_020BC694: .word 0x020FFA17
+
+ arm_func_start FUN_020BC698
+FUN_020BC698: ; 0x020BC698
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x48
+ ldrh r4, [r3, #0x4]
+ ldr r5, [r3, #0xc]
+ ldr r8, [r3, #0x10]
+ ldr r7, [r2, #0x4]
+ mov r12, r1, asr #0xc
+ sub r4, r4, #0x1
+ mov r6, r0
+ cmp r12, r4
+ add r5, r3, r5
+ add r4, r3, r8
+ add r8, r3, r7
+ ldr r7, [r2, #0x0]
+ bne _020BC780
+ ands r0, r7, #0xc0000000
+ beq _020BC6F0
+ ands r0, r7, #0x40000000
+ andne r0, r12, #0x1
+ addne r12, r0, r12, lsr #0x1
+ andeq r0, r12, #0x3
+ addeq r12, r0, r12, lsr #0x2
+_020BC6F0:
+ ldr r0, [r3, #0x8]
+ ands r0, r0, #0x2
+ movne r7, #0x0
+ bne _020BC7F4
+ mov r0, r12, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+_020BC718: ; 0x020BC718
+ cmp r0, #0x0
+ addeq sp, sp, #0x48
+ ldmeqia sp!, {r4-r10,pc}
+_020BC724: ; 0x020BC724
+ ldr r9, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r9
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r9
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x48
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r10,pc}
+_020BC780:
+ ands r0, r7, #0xc0000000
+ beq _020BC7F0
+ ldr r0, _020BC9C4 ; =0x1FFF0000
+ ands r2, r7, #0x40000000
+ and r0, r7, r0
+ mov r0, r0, lsr #0x10
+ beq _020BC7C4
+ cmp r12, r0
+ movcs r12, r0, lsr #0x1
+ addcs r7, r12, #0x1
+ bhs _020BC7F4
+ ldr r0, _020BC9C8 ; =0x00001FFF
+ mov r12, r12, lsr #0x1
+ add r7, r12, #0x1
+ and r10, r1, r0
+ mov r9, #0x2
+ b _020BC800
+_020BC7C4:
+ cmp r12, r0
+ andcs r0, r12, #0x3
+ addcs r12, r0, r12, lsr #0x2
+ addcs r7, r12, #0x1
+ bhs _020BC7F4
+ ldr r0, _020BC9CC ; =0x00003FFF
+ mov r12, r12, lsr #0x2
+ add r7, r12, #0x1
+ and r10, r1, r0
+ mov r9, #0x4
+ b _020BC800
+_020BC7F0:
+ add r7, r12, #0x1
+_020BC7F4:
+ ldr r0, _020BC9D0 ; =0x00000FFF
+ mov r9, #0x1
+ and r10, r1, r0
+_020BC800:
+ mov r0, r12, lsl #0x1
+ ldrh r3, [r8, r0]
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+ mov r1, r7, lsl #0x1
+ ldrh r3, [r8, r1]
+ orr r7, r0, #0x0
+ add r0, sp, #0x24
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+ ldr r3, [sp, #0x0]
+ ldr r1, [sp, #0x24]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x0]
+ ldr r3, [sp, #0x4]
+ ldr r1, [sp, #0x28]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [sp, #0x2c]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r1, [sp, #0x30]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0xc]
+ ldr r2, [sp, #0x10]
+ ldr r1, [sp, #0x34]
+ orr r7, r7, r0
+ sub r0, r1, r2
+ mul r1, r2, r9
+ mul r0, r10, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r6, #0x10]
+ ldr r2, [sp, #0x14]
+ ldr r0, [sp, #0x38]
+ mul r1, r2, r9
+ sub r0, r0, r2
+ mul r0, r10, r0
+ add r2, r1, r0, asr #0xc
+ mov r0, r6
+ mov r1, r6
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+_020BC8F8: ; 0x020BC8F8
+ cmp r7, #0x0
+ bne _020BC968
+ ldr r3, [sp, #0x18]
+ ldr r1, [sp, #0x3c]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x18]
+ ldr r3, [sp, #0x1c]
+ ldr r1, [sp, #0x40]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x1c]
+ ldr r3, [sp, #0x20]
+ ldr r1, [sp, #0x44]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r2, r2, r1, asr #0xc
+ add r0, r6, #0x18
+ mov r1, r0
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x48
+ ldmia sp!, {r4-r10,pc}
+_020BC968:
+ ldr r9, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r8, [r6, #0x0]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ ldr r7, [r6, #0xc]
+ mul r1, r5, r9
+ mul r0, r2, r4
+ sub r0, r1, r0
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r9
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x20]
+ add sp, sp, #0x48
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020BC9C4: .word 0x1FFF0000
+_020BC9C8: .word 0x00001FFF
+_020BC9CC: .word 0x00003FFF
+_020BC9D0: .word 0x00000FFF
+
+ arm_func_start FUN_020BC9D4
+FUN_020BC9D4: ; 0x020BC9D4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4c
+ ldr r5, [r3, #0xc]
+ ldr r4, [r3, #0x10]
+ ldr r12, [r2, #0x0]
+ ldr r2, [r2, #0x4]
+ mov r6, r0
+ mov r0, r1, asr #0xc
+ add r5, r3, r5
+ add r4, r3, r4
+ add r8, r3, r2
+ ands r1, r12, #0xc0000000
+ beq _020BCD40
+ ldr r1, _020BCDC0 ; =0x1FFF0000
+ ands r2, r12, #0x40000000
+ and r1, r12, r1
+ mov r2, r1, lsr #0x10
+ beq _020BCA44
+ ands r1, r0, #0x1
+ beq _020BCA3C
+ cmp r0, r2
+ movhi r0, r2, lsr #0x1
+ addhi r0, r0, #0x1
+ bhi _020BCD40
+ mov r7, r0, lsr #0x1
+ b _020BCBE8
+_020BCA3C:
+ mov r0, r0, lsr #0x1
+ b _020BCD40
+_020BCA44:
+ ands r1, r0, #0x3
+ beq _020BCBE0
+ cmp r0, r2
+ addhi r0, r1, r2, lsr #0x2
+ bhi _020BCD40
+ ands r1, r0, #0x1
+ beq _020BCBD8
+ ands r1, r0, #0x2
+ movne r9, r0, lsr #0x2
+ addne r0, r9, #0x1
+ moveq r0, r0, lsr #0x2
+ addeq r9, r0, #0x1
+ mov r0, r0, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r7, #0x0
+ bl FUN_020BC500
+ mov r1, r9, lsl #0x1
+ ldrh r3, [r8, r1]
+ orr r7, r7, r0
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+ ldr r3, [sp, #0x0]
+ ldr r1, [r6, #0x0]
+ mov r2, #0x3
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x0]
+ ldr r3, [sp, #0x4]
+ ldr r1, [r6, #0x4]
+ orr r7, r7, r0
+ mla r0, r1, r2, r3
+ str r0, [r6, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x8]
+ ldr r4, [sp, #0xc]
+ ldr r3, [r6, #0xc]
+ mov r1, r6
+ mla r4, r3, r2, r4
+ str r4, [r6, #0xc]
+ ldr r4, [sp, #0x10]
+ ldr r3, [r6, #0x10]
+ mla r4, r3, r2, r4
+ str r4, [r6, #0x10]
+ ldr r4, [sp, #0x14]
+ ldr r3, [r6, #0x14]
+ mla r2, r3, r2, r4
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+_020BCB2C: ; 0x020BCB2C
+ cmp r7, #0x0
+ bne _020BCB7C
+ ldr r1, [sp, #0x18]
+ ldr r0, [r6, #0x18]
+ mov r2, #0x3
+ mla r1, r0, r2, r1
+ str r1, [r6, #0x18]
+ ldr r3, [sp, #0x1c]
+ ldr r1, [r6, #0x1c]
+ add r0, r6, #0x18
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x1c]
+ ldr r4, [sp, #0x20]
+ ldr r3, [r6, #0x20]
+ mov r1, r0
+ mla r2, r3, r2, r4
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+_020BCB7C:
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x4c
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r9,pc}
+_020BCBD8:
+ mov r7, r0, lsr #0x2
+ b _020BCBE8
+_020BCBE0:
+ mov r0, r0, lsr #0x2
+ b _020BCD40
+_020BCBE8:
+ mov r0, r7, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+ add r1, r8, r7, lsl #0x1
+ ldrh r3, [r1, #0x2]
+ orr r7, r0, #0x0
+ add r0, sp, #0x24
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+ ldr r2, [r6, #0x0]
+ ldr r1, [sp, #0x24]
+ orr r7, r7, r0
+ add r0, r2, r1
+ str r0, [r6, #0x0]
+ ldr r2, [r6, #0x4]
+ ldr r1, [sp, #0x28]
+ mov r0, r6
+ add r1, r2, r1
+ str r1, [r6, #0x4]
+ ldr r3, [r6, #0x8]
+ ldr r2, [sp, #0x2c]
+ mov r1, r6
+ add r2, r3, r2
+ str r2, [r6, #0x8]
+ ldr r3, [r6, #0xc]
+ ldr r2, [sp, #0x30]
+ add r2, r3, r2
+ str r2, [r6, #0xc]
+ ldr r3, [r6, #0x10]
+ ldr r2, [sp, #0x34]
+ add r2, r3, r2
+ str r2, [r6, #0x10]
+ ldr r3, [r6, #0x14]
+ ldr r2, [sp, #0x38]
+ add r2, r3, r2
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+_020BCC98: ; 0x020BCC98
+ cmp r7, #0x0
+ bne _020BCCE4
+ ldr r2, [r6, #0x18]
+ ldr r1, [sp, #0x3c]
+ add r0, r6, #0x18
+ add r1, r2, r1
+ str r1, [r6, #0x18]
+ ldr r3, [r6, #0x1c]
+ ldr r2, [sp, #0x40]
+ mov r1, r0
+ add r2, r3, r2
+ str r2, [r6, #0x1c]
+ ldr r3, [r6, #0x20]
+ ldr r2, [sp, #0x44]
+ add r2, r3, r2
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+_020BCCE4:
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x4c
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r9,pc}
+_020BCD40:
+ mov r0, r0, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020BC500
+_020BCD58: ; 0x020BCD58
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r9,pc}
+_020BCD64: ; 0x020BCD64
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r8, [r6, #0x0]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ ldr r7, [r6, #0xc]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x20]
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BCDC0: .word 0x1FFF0000
+
+ arm_func_start FUN_020BCDC4
+FUN_020BCDC4: ; 0x020BCDC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r3, #0x4]
+ ldr r6, [r2, #0x4]
+ mov r5, r1, asr #0xc
+ sub r4, r4, #0x1
+ cmp r5, r4
+ add r6, r3, r6
+ ldr r2, [r2, #0x0]
+ bne _020BCE58
+ ands r4, r2, #0xc0000000
+ beq _020BCE08
+ ands r4, r2, #0x40000000
+ andne r4, r5, #0x1
+ addne r5, r4, r5, lsr #0x1
+ andeq r4, r5, #0x3
+ addeq r5, r4, r5, lsr #0x2
+_020BCE08:
+ ldr r3, [r3, #0x8]
+ ands r3, r3, #0x2
+ movne r4, #0x0
+ bne _020BCED4
+ ands r1, r2, #0x20000000
+ ldreq r2, [r6, r5, lsl #0x3]
+ addeq r1, r6, r5, lsl #0x3
+ streq r2, [r0, #0x0]
+ ldreq r1, [r1, #0x4]
+ addeq sp, sp, #0x4
+ streq r1, [r0, #0x4]
+ ldmeqia sp!, {r4-r7,pc}
+_020BCE38: ; 0x020BCE38
+ mov r1, r5, lsl #0x2
+ ldrsh r2, [r6, r1]
+ add r1, r6, r5, lsl #0x2
+ add sp, sp, #0x4
+ str r2, [r0, #0x0]
+ ldrsh r1, [r1, #0x2]
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r7,pc}
+_020BCE58:
+ ands r3, r2, #0xc0000000
+ beq _020BCED0
+ ldr r3, _020BCF60 ; =0x1FFF0000
+ ands r4, r2, #0x40000000
+ and r3, r2, r3
+ mov r3, r3, lsr #0x10
+ beq _020BCEA0
+ cmp r5, r3
+ movcs r5, r3, lsr #0x1
+ addcs r4, r5, #0x1
+ bhs _020BCED4
+ ldr r3, _020BCF64 ; =0x00001FFF
+ mov r5, r5, lsr #0x1
+ add r4, r5, #0x1
+ and lr, r1, r3
+ mov r12, #0x2
+ mov r3, #0x1
+ b _020BCEE4
+_020BCEA0:
+ cmp r5, r3
+ andcs r3, r5, #0x3
+ addcs r5, r3, r5, lsr #0x2
+ addcs r4, r5, #0x1
+ bhs _020BCED4
+ ldr r3, _020BCF68 ; =0x00003FFF
+ mov r5, r5, lsr #0x2
+ add r4, r5, #0x1
+ and lr, r1, r3
+ mov r12, #0x4
+ mov r3, #0x2
+ b _020BCEE4
+_020BCED0:
+ add r4, r5, #0x1
+_020BCED4:
+ ldr r3, _020BCF6C ; =0x00000FFF
+ mov r12, #0x1
+ and lr, r1, r3
+ mov r3, #0x0
+_020BCEE4:
+ ands r1, r2, #0x20000000
+ beq _020BCF10
+ mov r2, r5, lsl #0x2
+ add r1, r6, r5, lsl #0x2
+ mov r5, r4, lsl #0x2
+ add r4, r6, r4, lsl #0x2
+ ldrsh r2, [r6, r2]
+ ldrsh r1, [r1, #0x2]
+ ldrsh r5, [r6, r5]
+ ldrsh r4, [r4, #0x2]
+ b _020BCF28
+_020BCF10:
+ add r1, r6, r5, lsl #0x3
+ add r7, r6, r4, lsl #0x3
+ ldr r2, [r6, r5, lsl #0x3]
+ ldr r1, [r1, #0x4]
+ ldr r5, [r6, r4, lsl #0x3]
+ ldr r4, [r7, #0x4]
+_020BCF28:
+ sub r5, r5, r2
+ sub r4, r4, r1
+ mul r6, r2, r12
+ mul r2, lr, r5
+ add r2, r6, r2, asr #0xc
+ mov r5, r2, asr r3
+ mul r2, r1, r12
+ mul r1, lr, r4
+ add r1, r2, r1, asr #0xc
+ mov r1, r1, asr r3
+ str r5, [r0, #0x0]
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020BCF60: .word 0x1FFF0000
+_020BCF64: .word 0x00001FFF
+_020BCF68: .word 0x00003FFF
+_020BCF6C: .word 0x00000FFF
+
+ arm_func_start FUN_020BCF70
+FUN_020BCF70: ; 0x020BCF70
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r2, #0x4]
+ ldr r12, [r2, #0x0]
+ mov r1, r1, asr #0xc
+ add r3, r3, r4
+ ands r2, r12, #0xc0000000
+ beq _020BD0D0
+ ldr r2, _020BD184 ; =0x1FFF0000
+ ands r4, r12, #0x40000000
+ and r2, r12, r2
+ mov r4, r2, lsr #0x10
+ beq _020BCFCC
+ ands r2, r1, #0x1
+ beq _020BCFC4
+ cmp r1, r4
+ movhi r1, r4, lsr #0x1
+ addhi r1, r1, #0x1
+ bhi _020BD0D0
+ mov r2, r1, lsr #0x1
+ b _020BD110
+_020BCFC4:
+ mov r1, r1, lsr #0x1
+ b _020BD0D0
+_020BCFCC:
+ ands r2, r1, #0x3
+ beq _020BD0CC
+ cmp r1, r4
+ addhi r1, r2, r4, lsr #0x2
+ bhi _020BD0D0
+ ands r2, r1, #0x1
+ beq _020BD0C4
+ ands r2, r1, #0x2
+ movne r1, r1, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r1, lsr #0x2
+ addeq r1, r2, #0x1
+ ands r4, r12, #0x20000000
+ beq _020BD04C
+ mov r5, r2, lsl #0x2
+ mov r4, r1, lsl #0x2
+ ldrsh r12, [r3, r5]
+ ldrsh r5, [r3, r4]
+ add r2, r3, r2, lsl #0x2
+ add r4, r12, r12, lsl #0x1
+ add r4, r5, r4
+ mov r4, r4, asr #0x2
+ str r4, [r0, #0x0]
+ add r1, r3, r1, lsl #0x2
+ ldrsh r3, [r2, #0x2]
+ ldrsh r2, [r1, #0x2]
+ add sp, sp, #0x4
+ add r1, r3, r3, lsl #0x1
+ add r1, r2, r1
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD04C:
+ ldr r5, [r3, r2, lsl #0x3]
+ ldr r4, [r3, r1, lsl #0x3]
+ mov r12, r5, asr #0x1f
+ mov r12, r12, lsl #0x1
+ mov lr, r5, lsl #0x1
+ orr r12, r12, r5, lsr #0x1f
+ adds lr, lr, r5
+ adc r12, r12, r5, asr #0x1f
+ adds lr, lr, r4
+ adc r12, r12, r4, asr #0x1f
+ mov lr, lr, lsr #0x2
+ orr lr, lr, r12, lsl #0x1e
+ str lr, [r0, #0x0]
+ add r2, r3, r2, lsl #0x3
+ ldr r12, [r2, #0x4]
+ add r1, r3, r1, lsl #0x3
+ mov r2, r12, asr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r3, r12, lsl #0x1
+ ldr r1, [r1, #0x4]
+ orr r2, r2, r12, lsr #0x1f
+ adds r3, r3, r12
+ adc r2, r2, r12, asr #0x1f
+ adds r3, r3, r1
+ adc r1, r2, r1, asr #0x1f
+ mov r2, r3, lsr #0x2
+ orr r2, r2, r1, lsl #0x1e
+ str r2, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BD0C4:
+ mov r2, r1, lsr #0x2
+ b _020BD110
+_020BD0CC:
+ mov r1, r1, lsr #0x2
+_020BD0D0:
+ ands r2, r12, #0x20000000
+ ldreq r2, [r3, r1, lsl #0x3]
+ addeq r1, r3, r1, lsl #0x3
+ streq r2, [r0, #0x0]
+ ldreq r1, [r1, #0x4]
+ addeq sp, sp, #0x4
+ streq r1, [r0, #0x4]
+ ldmeqia sp!, {r4-r5,pc}
+_020BD0F0: ; 0x020BD0F0
+ mov r2, r1, lsl #0x2
+ ldrsh r2, [r3, r2]
+ add r1, r3, r1, lsl #0x2
+ add sp, sp, #0x4
+ str r2, [r0, #0x0]
+ ldrsh r1, [r1, #0x2]
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD110:
+ ands r1, r12, #0x20000000
+ beq _020BD150
+ mov r1, r2, lsl #0x2
+ add r12, r3, r2, lsl #0x2
+ ldrsh r2, [r3, r1]
+ ldrsh r1, [r12, #0x4]
+ add sp, sp, #0x4
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldrsh r2, [r12, #0x2]
+ ldrsh r1, [r12, #0x6]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD150:
+ add r12, r3, r2, lsl #0x3
+ ldr r2, [r3, r2, lsl #0x3]
+ ldr r1, [r12, #0x8]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldr r2, [r12, #0x4]
+ ldr r1, [r12, #0xc]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BD184: .word 0x1FFF0000
+
+ arm_func_start FUN_020BD188
+FUN_020BD188: ; 0x020BD188
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r3, #0x4]
+ ldr lr, [r2, #0x4]
+ mov r12, r1, asr #0xc
+ sub r4, r4, #0x1
+ cmp r12, r4
+ add r4, r3, lr
+ ldr lr, [r2, #0x0]
+ bne _020BD230
+ ands r2, lr, #0xc0000000
+ beq _020BD1CC
+ ands r2, lr, #0x40000000
+ andne r2, r12, #0x1
+ addne r12, r2, r12, lsr #0x1
+ andeq r2, r12, #0x3
+ addeq r12, r2, r12, lsr #0x2
+_020BD1CC:
+ ldr r2, [r3, #0x8]
+ ands r2, r2, #0x2
+ beq _020BD210
+ ldr r2, _020BD2E8 ; =0x00000FFF
+ ands r3, lr, #0x20000000
+ and r3, r1, r2
+ movne r1, r12, lsl #0x1
+ ldrnesh r2, [r4, r1]
+ ldrnesh r1, [r4, #0x0]
+ add sp, sp, #0x4
+ ldreq r2, [r4, r12, lsl #0x2]
+ ldreq r1, [r4, #0x0]
+ sub r1, r1, r2
+ mul r1, r3, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r0, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020BD210:
+ ands r1, lr, #0x20000000
+ movne r1, r12, lsl #0x1
+ ldrnesh r1, [r4, r1]
+ add sp, sp, #0x4
+ strne r1, [r0, #0x0]
+ ldreq r1, [r4, r12, lsl #0x2]
+ streq r1, [r0, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020BD230:
+ ands r2, lr, #0xc0000000
+ beq _020BD298
+ ldr r2, _020BD2EC ; =0x1FFF0000
+ ands r3, lr, #0x40000000
+ and r2, lr, r2
+ mov r2, r2, lsr #0x10
+ beq _020BD270
+ cmp r12, r2
+ movcs r12, r2, lsr #0x1
+ bhs _020BD298
+ ldr r2, _020BD2F0 ; =0x00001FFF
+ mov r12, r12, lsr #0x1
+ and r5, r1, r2
+ mov r2, #0x2
+ mov r1, #0x1
+ b _020BD2A8
+_020BD270:
+ cmp r12, r2
+ andcs r2, r12, #0x3
+ addcs r12, r2, r12, lsr #0x2
+ bhs _020BD298
+ ldr r2, _020BD2F4 ; =0x00003FFF
+ mov r12, r12, lsr #0x2
+ and r5, r1, r2
+ mov r2, #0x4
+ mov r1, #0x2
+ b _020BD2A8
+_020BD298:
+ ldr r3, _020BD2E8 ; =0x00000FFF
+ mov r2, #0x1
+ and r5, r1, r3
+ mov r1, #0x0
+_020BD2A8:
+ ands r3, lr, #0x20000000
+ addne r3, r4, r12, lsl #0x1
+ movne lr, r12, lsl #0x1
+ ldrnesh r12, [r4, lr]
+ ldrnesh r3, [r3, #0x2]
+ addeq r3, r4, r12, lsl #0x2
+ ldreq r12, [r4, r12, lsl #0x2]
+ ldreq r3, [r3, #0x4]
+ mul r4, r12, r2
+ sub r3, r3, r12
+ mul r2, r5, r3
+ add r2, r4, r2, asr #0xc
+ mov r1, r2, asr r1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BD2E8: .word 0x00000FFF
+_020BD2EC: .word 0x1FFF0000
+_020BD2F0: .word 0x00001FFF
+_020BD2F4: .word 0x00003FFF
+
+ arm_func_start FUN_020BD2F8
+FUN_020BD2F8: ; 0x020BD2F8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r2, #0x4]
+ ldr r2, [r2, #0x0]
+ mov r1, r1, asr #0xc
+ add r3, r3, r12
+ ands r12, r2, #0xc0000000
+ beq _020BD44C
+ ldr ip, _020BD46C ; =0x1FFF0000
+ ands lr, r2, #0x40000000
+ and r12, r2, r12
+ mov lr, r12, lsr #0x10
+ beq _020BD354
+ ands r12, r1, #0x1
+ beq _020BD34C
+ cmp r1, lr
+ movhi r1, lr, lsr #0x1
+ addhi r1, r1, #0x1
+ bhi _020BD44C
+ mov r12, r1, lsr #0x1
+ b _020BD400
+_020BD34C:
+ mov r1, r1, lsr #0x1
+ b _020BD44C
+_020BD354:
+ ands r12, r1, #0x3
+ beq _020BD3F8
+ cmp r1, lr
+ addhi r1, r12, lr, lsr #0x2
+ bhi _020BD44C
+ ands r12, r1, #0x1
+ beq _020BD3F0
+ ands r12, r1, #0x2
+ movne lr, r1, lsr #0x2
+ addne r12, lr, #0x1
+ moveq r12, r1, lsr #0x2
+ addeq lr, r12, #0x1
+ ands r1, r2, #0x20000000
+ beq _020BD3B4
+ mov r2, r12, lsl #0x1
+ mov r1, lr, lsl #0x1
+ ldrsh r12, [r3, r2]
+ ldrsh r2, [r3, r1]
+ mov r1, #0x3
+ add sp, sp, #0x4
+ smlabb r1, r12, r1, r2
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x0]
+ ldmia sp!, {pc}
+_020BD3B4:
+ ldr r12, [r3, r12, lsl #0x2]
+ ldr r1, [r3, lr, lsl #0x2]
+ mov r2, r12, asr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r3, r12, lsl #0x1
+ orr r2, r2, r12, lsr #0x1f
+ adds r3, r3, r12
+ adc r2, r2, r12, asr #0x1f
+ adds r3, r3, r1
+ adc r1, r2, r1, asr #0x1f
+ mov r2, r3, lsr #0x2
+ orr r2, r2, r1, lsl #0x1e
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020BD3F0:
+ mov r12, r1, lsr #0x2
+ b _020BD400
+_020BD3F8:
+ mov r1, r1, lsr #0x2
+ b _020BD44C
+_020BD400:
+ ands r1, r2, #0x20000000
+ beq _020BD42C
+ mov r2, r12, lsl #0x1
+ add r1, r3, r12, lsl #0x1
+ ldrsh r2, [r3, r2]
+ ldrsh r1, [r1, #0x2]
+ add sp, sp, #0x4
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldmia sp!, {pc}
+_020BD42C:
+ add r1, r3, r12, lsl #0x2
+ ldr r2, [r3, r12, lsl #0x2]
+ ldr r1, [r1, #0x4]
+ mov r2, r2, asr #0x1
+ add r1, r2, r1, asr #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020BD44C:
+ ands r2, r2, #0x20000000
+ movne r1, r1, lsl #0x1
+ ldrnesh r1, [r3, r1]
+ strne r1, [r0, #0x0]
+ ldreq r1, [r3, r1, lsl #0x2]
+ streq r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BD46C: .word 0x1FFF0000
+
+ arm_func_start FUN_020BD470
+FUN_020BD470: ; 0x020BD470
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r9, r0
+ add r0, r9, r1, lsl #0x1
+ ldrh r0, [r0, #0x14]
+ mov r7, r3
+ mov r8, r2
+ ldr r5, [r9, r0]
+ add r1, r9, r0
+ ands r0, r5, #0x1
+ movne r0, #0x7
+ strne r0, [r7, #0x0]
+ bne _020BD814
+ ldr r0, _020BD848 ; =0x00000FFF
+ add r4, r1, #0x4
+ ands r0, r8, r0
+ beq _020BD4C4
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x1
+ movne r6, #0x1
+ bne _020BD4C8
+_020BD4C4:
+ mov r6, #0x0
+_020BD4C8:
+ mov r0, #0x0
+ str r0, [r7, #0x0]
+ ands r0, r5, #0x6
+ bne _020BD5C0
+ ands r0, r5, #0x8
+ bne _020BD51C
+ cmp r6, #0x0
+ beq _020BD500
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x4c
+ bl FUN_020BD188
+ b _020BD514
+_020BD500:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x4c
+ bl FUN_020BD2F8
+_020BD514:
+ add r4, r4, #0x8
+ b _020BD524
+_020BD51C:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x4c]
+_020BD524:
+ ands r0, r5, #0x10
+ bne _020BD568
+ cmp r6, #0x0
+ beq _020BD54C
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x50
+ bl FUN_020BD188
+ b _020BD560
+_020BD54C:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x50
+ bl FUN_020BD2F8
+_020BD560:
+ add r4, r4, #0x8
+ b _020BD570
+_020BD568:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x50]
+_020BD570:
+ ands r0, r5, #0x20
+ bne _020BD5B4
+ cmp r6, #0x0
+ beq _020BD598
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x54
+ bl FUN_020BD188
+ b _020BD5AC
+_020BD598:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x54
+ bl FUN_020BD2F8
+_020BD5AC:
+ add r4, r4, #0x8
+ b _020BD5DC
+_020BD5B4:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x54]
+ b _020BD5DC
+_020BD5C0:
+ ands r0, r5, #0x2
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r7, #0x0]
+ bne _020BD5DC
+ mov r0, r7
+ bl FUN_020BDA08
+_020BD5DC:
+ ands r0, r5, #0xc0
+ bne _020BD6A8
+ ands r0, r5, #0x100
+ bne _020BD628
+ cmp r6, #0x0
+ beq _020BD60C
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x28
+ bl FUN_020BC698
+ b _020BD620
+_020BD60C:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x28
+ bl FUN_020BC9D4
+_020BD620:
+ add r4, r4, #0x8
+ b _020BD6C4
+_020BD628:
+ ldr r1, [r9, #0xc]
+ ldr r2, [r9, #0x10]
+ ldr r3, [r4, #0x0]
+ add r0, r7, #0x28
+ add r1, r9, r1
+ add r2, r9, r2
+ bl FUN_020BC500
+_020BD644: ; 0x020BD644
+ cmp r0, #0x0
+ beq _020BD6A0
+ ldr r12, [r7, #0x3c]
+ ldr r0, [r7, #0x2c]
+ ldr r3, [r7, #0x28]
+ ldr r11, [r7, #0x38]
+ ldr r1, [r7, #0x30]
+ ldr r2, [r7, #0x34]
+ mul r10, r0, r12
+ mul lr, r1, r11
+ sub r10, r10, lr
+ mov r10, r10, asr #0xc
+ mul lr, r1, r2
+ mul r1, r3, r12
+ sub r1, lr, r1
+ mul r11, r3, r11
+ mul r2, r0, r2
+ sub r0, r11, r2
+ str r10, [r7, #0x40]
+ mov r1, r1, asr #0xc
+ str r1, [r7, #0x44]
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x48]
+_020BD6A0:
+ add r4, r4, #0x4
+ b _020BD6C4
+_020BD6A8:
+ ands r0, r5, #0x40
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x2
+ strne r0, [r7, #0x0]
+ bne _020BD6C4
+ mov r0, r7
+ bl FUN_020BD850
+_020BD6C4:
+ ands r0, r5, #0x600
+ bne _020BD7F0
+ ands r0, r5, #0x800
+ bne _020BD71C
+ cmp r6, #0x0
+ beq _020BD6F4
+ add r0, sp, #0x0
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ bl FUN_020BCDC4
+ b _020BD708
+_020BD6F4:
+ add r0, sp, #0x0
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ bl FUN_020BCF70
+_020BD708:
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ str r1, [sp, #0x18]
+ str r0, [sp, #0x24]
+ b _020BD72C
+_020BD71C:
+ ldr r0, [r4, #0x0]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #0x4]
+ str r0, [sp, #0x24]
+_020BD72C:
+ ands r0, r5, #0x1000
+ bne _020BD77C
+ cmp r6, #0x0
+ beq _020BD754
+ add r0, sp, #0x8
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x8
+ bl FUN_020BCDC4
+ b _020BD768
+_020BD754:
+ add r0, sp, #0x8
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x8
+ bl FUN_020BCF70
+_020BD768:
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x28]
+ b _020BD78C
+_020BD77C:
+ ldr r0, [r4, #0x8]
+ str r0, [sp, #0x1c]
+ ldr r0, [r4, #0xc]
+ str r0, [sp, #0x28]
+_020BD78C:
+ ands r0, r5, #0x2000
+ bne _020BD7DC
+ cmp r6, #0x0
+ beq _020BD7B4
+ add r0, sp, #0x10
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x10
+ bl FUN_020BCDC4
+ b _020BD7C8
+_020BD7B4:
+ add r0, sp, #0x10
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x10
+ bl FUN_020BCF70
+_020BD7C8:
+ ldr r1, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0x20]
+ str r0, [sp, #0x2c]
+ b _020BD814
+_020BD7DC:
+ ldr r0, [r4, #0x10]
+ str r0, [sp, #0x20]
+ ldr r0, [r4, #0x14]
+ str r0, [sp, #0x2c]
+ b _020BD814
+_020BD7F0:
+ ands r0, r5, #0x200
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x1
+ strne r0, [r7, #0x0]
+ bne _020BD814
+ mov r0, r7
+ bl FUN_020BD9A4
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+_020BD814:
+ ldr r0, [r7, #0x0]
+ add r1, sp, #0x18
+ ands r0, r0, #0x1
+ ldr r0, _020BD84C ; =0x021CEF7C
+ movne r3, #0x4
+ ldr r4, [r0, #0x0]
+ moveq r3, #0x0
+ ldr r2, [r4, #0x0]
+ ldr r4, [r4, #0xe8]
+ mov r0, r7
+ blx r4
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BD848: .word 0x00000FFF
+_020BD84C: .word 0x021CEF7C
+
+ arm_func_start FUN_020BD850
+FUN_020BD850: ; 0x020BD850
+ stmdb sp!, {r4-r8,lr}
+ ldr r1, _020BD990 ; =0x021CEF7C
+ mov r8, r0
+ ldr r0, [r1, #0x0]
+ ldr r3, [r0, #0xd4]
+ ldr r0, [r0, #0x0]
+ ldrh r2, [r3, #0x6]
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ ldrh r2, [r3, r0]
+ add r4, r3, r0
+ add r1, r4, #0x4
+ ands r0, r2, #0x1
+ addeq r1, r1, #0xc
+ ands r0, r2, #0x2
+ bne _020BD980
+ ands r0, r2, #0x8
+ beq _020BD934
+ and r2, r2, #0xf0
+ add r0, r8, #0x28
+ mov r5, r2, asr #0x4
+ ldrsh r7, [r1, #0x0]
+ ldrsh r6, [r1, #0x2]
+ blx MI_Zero36B
+ ldrh r0, [r4, #0x0]
+ add r1, r8, r5, lsl #0x2
+ ands r0, r0, #0x100
+ movne r0, #0x1000
+ rsbne r2, r0, #0x0
+ moveq r2, #0x1000
+ ldr r0, _020BD994 ; =0x020FFA14
+ str r2, [r1, #0x28]
+ ldrb r1, [r0, r5, lsl #0x2]
+ ldr r0, _020BD998 ; =0x020FFA15
+ add r1, r8, r1, lsl #0x2
+ str r7, [r1, #0x28]
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r6, [r0, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x200
+ ldr r0, _020BD99C ; =0x020FFA16
+ rsbne r6, r6, #0x0
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r6, [r0, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x400
+ ldr r0, _020BD9A0 ; =0x020FFA17
+ rsbne r7, r7, #0x0
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r7, [r0, #0x28]
+ ldmia sp!, {r4-r8,pc}
+_020BD934:
+ ldrsh r0, [r4, #0x2]
+ str r0, [r8, #0x28]
+ ldrsh r0, [r1, #0x0]
+ str r0, [r8, #0x2c]
+ ldrsh r0, [r1, #0x2]
+ str r0, [r8, #0x30]
+ ldrsh r0, [r1, #0x4]
+ str r0, [r8, #0x34]
+ ldrsh r0, [r1, #0x6]
+ str r0, [r8, #0x38]
+ ldrsh r0, [r1, #0x8]
+ str r0, [r8, #0x3c]
+ ldrsh r0, [r1, #0xa]
+ str r0, [r8, #0x40]
+ ldrsh r0, [r1, #0xc]
+ str r0, [r8, #0x44]
+ ldrsh r0, [r1, #0xe]
+ str r0, [r8, #0x48]
+ ldmia sp!, {r4-r8,pc}
+_020BD980:
+ ldr r0, [r8, #0x0]
+ orr r0, r0, #0x2
+ str r0, [r8, #0x0]
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BD990: .word 0x021CEF7C
+_020BD994: .word 0x020FFA14
+_020BD998: .word 0x020FFA15
+_020BD99C: .word 0x020FFA16
+_020BD9A0: .word 0x020FFA17
+
+ arm_func_start FUN_020BD9A4
+FUN_020BD9A4: ; 0x020BD9A4
+ stmdb sp!, {r4,lr}
+ ldr r1, _020BDA04 ; =0x021CEF7C
+ ldr r12, [r1, #0x0]
+ ldr r4, [r12, #0xd4]
+ ldr r2, [r12, #0x0]
+ ldrh lr, [r4, #0x6]
+ ldrb r1, [r2, #0x1]
+ ldrh r3, [r4, lr]
+ add lr, r4, lr
+ mla r1, r3, r1, lr
+ ldr r1, [r1, #0x4]
+ ldrh r3, [r4, r1]
+ add r1, r4, r1
+ add r1, r1, #0x4
+ ands lr, r3, #0x1
+ addeq r1, r1, #0xc
+ ands lr, r3, #0x2
+ bne _020BD9F8
+ ands lr, r3, #0x8
+ addne r1, r1, #0x4
+ addeq r1, r1, #0x10
+_020BD9F8:
+ ldr r12, [r12, #0xe8]
+ blx r12
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BDA04: .word 0x021CEF7C
+
+ arm_func_start FUN_020BDA08
+FUN_020BDA08: ; 0x020BDA08
+ ldr r1, _020BDA6C ; =0x021CEF7C
+ ldr r1, [r1, #0x0]
+ ldr r12, [r1, #0xd4]
+ ldr r1, [r1, #0x0]
+ ldrh r3, [r12, #0x6]
+ ldrb r1, [r1, #0x1]
+ ldrh r2, [r12, r3]
+ add r3, r12, r3
+ mla r1, r2, r1, r3
+ ldr r2, [r1, #0x4]
+ ldrh r1, [r12, r2]
+ add r2, r12, r2
+ ands r1, r1, #0x1
+ ldrne r1, [r0, #0x0]
+ orrne r1, r1, #0x4
+ strne r1, [r0, #0x0]
+ bxne lr
+ ldr r1, [r2, #0x4]
+ add r2, r2, #0x4
+ str r1, [r0, #0x4c]
+ ldr r1, [r2, #0x4]
+ str r1, [r0, #0x50]
+ ldr r1, [r2, #0x8]
+ str r1, [r0, #0x54]
+ bx lr
+ .balign 4
+_020BDA6C: .word 0x021CEF7C
+
+ arm_func_start FUN_020BDA70
+FUN_020BDA70: ; 0x020BDA70
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldr r0, [r1, #0x8]
+ ldr r12, [r1, #0x0]
+ ldrh r1, [r0, #0x4]
+ mov r1, r1, lsl #0xc
+ cmp r12, r1
+ subge r12, r1, #0x1
+ bge _020BDAA0
+ cmp r12, #0x0
+ movlt r12, #0x0
+_020BDAA0:
+ mov r1, r2
+ mov r2, r12
+ bl FUN_020BD470
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BDAB4
+FUN_020BDAB4: ; 0x020BDAB4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ ldr r0, _020BDB3C ; =0x0210659C
+ str r4, [r5, #0x8]
+ ldr r0, [r0, #0x0]
+ add r1, r5, #0x1a
+ str r0, [r5, #0xc]
+ ldrb r2, [r2, #0x17]
+ mov r0, #0x0
+ strb r2, [r5, #0x19]
+ ldrb r2, [r5, #0x19]
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrh r0, [r4, #0x6]
+ add r2, r4, #0x14
+ mov r3, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r5,pc}
+_020BDB08:
+ mov r0, r3, lsl #0x1
+ ldrh r1, [r2, r0]
+ add r0, r5, r3, lsl #0x1
+ add r3, r3, #0x1
+ ldr r1, [r4, r1]
+ mov r1, r1, lsr #0x18
+ orr r1, r1, #0x100
+ strh r1, [r0, #0x1a]
+ ldrh r0, [r4, #0x6]
+ cmp r3, r0
+ blo _020BDB08
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BDB3C: .word 0x0210659C
+
+ arm_func_start FUN_020BDB40
+FUN_020BDB40: ; 0x020BDB40
+ stmdb sp!, {r4-r8,lr}
+ ldr r7, [r1, #0x8]
+ mov r2, r2, lsl #0x10
+ ldrh r4, [r7, #0xe]
+ add r5, r7, #0x8
+ ldr r6, [r1, #0x0]
+ ldrh r3, [r5, r4]
+ mov r1, r2, lsr #0x10
+ add r2, r5, r4
+ mul r4, r3, r1
+ add r3, r2, #0x4
+ mov r6, r6, asr #0xc
+ mov r8, r0
+ ldr r1, [r3, r4]
+ mov r0, r7
+ mov r2, r6
+ add r5, r3, r4
+ bl FUN_020BDDAC
+ mov r4, r0
+ ldr r1, [r5, #0x4]
+ mov r0, r7
+ mov r2, r6
+ bl FUN_020BDDAC
+ ldr r1, [r8, #0x4]
+ mov r2, r6
+ and r1, r1, #0x8000
+ orr r1, r1, r4
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r8, #0x4]
+ mov r0, r7
+ ldr r1, [r5, #0xc]
+ bl FUN_020BDDAC
+ mov r4, r0
+ mov r0, r7
+ ldr r1, [r5, #0x8]
+ mov r2, r6
+ bl FUN_020BDDAC
+ mov r2, r6
+ ldr r1, [r8, #0x8]
+ and r1, r1, #0x8000
+ orr r0, r1, r0
+ orr r0, r0, r4, lsl #0x10
+ str r0, [r8, #0x8]
+ mov r0, r7
+ ldr r1, [r5, #0x10]
+ bl FUN_020BDCB8
+ ldr r1, [r8, #0xc]
+ bic r1, r1, #0x1f0000
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r8, #0xc]
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020BDC0C
+FUN_020BDC0C: ; 0x020BDC0C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BDCB4 ; =0x021065A8
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0x9]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+_020BDC60: ; 0x020BDC60
+ mov r6, r7
+ add r5, r8, #0x8
+ add r4, r4, #0x4
+_020BDC6C:
+ ldrh r1, [r8, #0xe]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl FUN_020BC14C
+_020BDC88: ; 0x020BDC88
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0x9]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BDC6C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BDCB4: .word 0x021065A8
+
+ arm_func_start FUN_020BDCB8
+FUN_020BDCB8: ; 0x020BDCB8
+ ands r3, r1, #0x20000000
+ movne r0, r1, lsl #0x10
+ movne r0, r0, lsr #0x10
+ bxne lr
+ ldr r3, _020BDDA4 ; =0x0000FFFF
+ ands r12, r1, #0xc0000000
+ and r3, r1, r3
+ add r0, r0, r3
+ ldreqb r0, [r0, r2]
+ bxeq lr
+ ldr r3, _020BDDA8 ; =0x1FFF0000
+ ands r12, r1, #0x40000000
+ and r1, r1, r3
+ mov r3, r1, lsr #0x10
+ beq _020BDD30
+ ands r1, r2, #0x1
+ beq _020BDD28
+ cmp r2, r3
+ addhi r0, r0, r3, lsr #0x1
+ ldrhib r0, [r0, #0x1]
+ bxhi lr
+ add r1, r0, r2, lsr #0x1
+ ldrb r2, [r0, r2, lsr #0x1]
+ ldrb r0, [r1, #0x1]
+ add r0, r2, r0
+ mov r0, r0, lsl #0xf
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD28:
+ ldrb r0, [r0, r2, lsr #0x1]
+ bx lr
+_020BDD30:
+ ands r1, r2, #0x3
+ beq _020BDD9C
+ cmp r2, r3
+ addhi r0, r0, r3, lsr #0x2
+ ldrhib r0, [r1, r0]
+ bxhi lr
+ ands r1, r2, #0x1
+ beq _020BDD80
+ ands r1, r2, #0x2
+ movne r1, r2, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r2, lsr #0x2
+ addeq r1, r2, #0x1
+ ldrb r2, [r0, r2]
+ ldrb r1, [r0, r1]
+ mov r0, #0x3
+ mla r0, r2, r0, r1
+ mov r0, r0, lsl #0xe
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD80:
+ add r1, r0, r2, lsr #0x2
+ ldrb r2, [r0, r2, lsr #0x2]
+ ldrb r0, [r1, #0x1]
+ add r0, r2, r0
+ mov r0, r0, lsl #0xf
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD9C:
+ ldrb r0, [r0, r2, lsr #0x2]
+ bx lr
+ .balign 4
+_020BDDA4: .word 0x0000FFFF
+_020BDDA8: .word 0x1FFF0000
+
+ arm_func_start FUN_020BDDAC
+FUN_020BDDAC: ; 0x020BDDAC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ands r3, r1, #0x20000000
+ movne r0, r1, lsl #0x10
+ addne sp, sp, #0x4
+ movne r0, r0, lsr #0x10
+ ldmneia sp!, {pc}
+ ldr r3, _020BDF2C ; =0x0000FFFF
+ ands r12, r1, #0xc0000000
+ and r3, r1, r3
+ add r0, r0, r3
+ moveq r1, r2, lsl #0x1
+ addeq sp, sp, #0x4
+ ldreqh r0, [r0, r1]
+ ldmeqia sp!, {pc}
+ ldr r3, _020BDF30 ; =0x1FFF0000
+ ands r12, r1, #0x40000000
+ and r1, r1, r3
+ mov r3, r1, lsr #0x10
+ beq _020BDE34
+ ands r1, r2, #0x1
+ beq _020BDE24
+ cmp r2, r3
+ bichi r1, r3, #0x1
+ addhi r0, r0, r1
+ addhi sp, sp, #0x4
+ ldrhih r0, [r0, #0x2]
+ ldmhiia sp!, {pc}
+ mov r1, r2, lsr #0x1
+ b _020BDEE0
+_020BDE24:
+ bic r1, r2, #0x1
+ add sp, sp, #0x4
+ ldrh r0, [r0, r1]
+ ldmia sp!, {pc}
+_020BDE34:
+ ands r1, r2, #0x3
+ beq _020BDECC
+ cmp r2, r3
+ movhi r2, r3, lsr #0x2
+ movhi r1, r1, lsl #0x1
+ addhi r0, r0, r2, lsl #0x1
+ addhi sp, sp, #0x4
+ ldrhih r0, [r1, r0]
+ ldmhiia sp!, {pc}
+ ands r1, r2, #0x1
+ beq _020BDEC4
+ ands r1, r2, #0x2
+ movne r1, r2, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r2, lsr #0x2
+ addeq r1, r2, #0x1
+ mov r2, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ ldrh r12, [r0, r2]
+ ldrh lr, [r0, r1]
+ ldr r0, _020BDF34 ; =0x00007C1F
+ and r3, r12, #0x3e0
+ and r2, lr, #0x3e0
+ mov r1, #0x3
+ mla r2, r3, r1, r2
+ and r12, r12, r0
+ and r3, lr, r0
+ mla r1, r12, r1, r3
+ mov r2, r2, lsr #0x2
+ and r1, r0, r1, lsr #0x2
+ and r0, r2, #0x3e0
+ orr r0, r1, r0
+ mov r0, r0, lsl #0x10
+ add sp, sp, #0x4
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {pc}
+_020BDEC4:
+ mov r1, r2, lsr #0x2
+ b _020BDEE0
+_020BDECC:
+ mov r1, r2, lsr #0x2
+ mov r1, r1, lsl #0x1
+ add sp, sp, #0x4
+ ldrh r0, [r0, r1]
+ ldmia sp!, {pc}
+_020BDEE0:
+ mov r2, r1, lsl #0x1
+ add r1, r0, r1, lsl #0x1
+ ldrh r3, [r0, r2]
+ ldrh r12, [r1, #0x2]
+ ldr r0, _020BDF34 ; =0x00007C1F
+ and r2, r3, #0x3e0
+ and r1, r12, #0x3e0
+ add r1, r2, r1
+ mov r1, r1, lsr #0x1
+ and r3, r3, r0
+ and r2, r12, r0
+ add r2, r3, r2
+ and r2, r0, r2, lsr #0x1
+ and r0, r1, #0x3e0
+ orr r0, r2, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BDF2C: .word 0x0000FFFF
+_020BDF30: .word 0x1FFF0000
+_020BDF34: .word 0x00007C1F
+
+ arm_func_start FUN_020BDF38
+FUN_020BDF38: ; 0x020BDF38
+ stmdb sp!, {r4,lr}
+ ldr r12, [r1, #0x0]
+ mov r4, r0
+ mov r2, r2, lsl #0x10
+ ldr r0, [r1, #0x8]
+ mov r1, r2, lsr #0x10
+ mov r3, r4
+ mov r2, r12, asr #0xc
+ bl FUN_020BE030
+ ldr r0, [r4, #0x10]
+ bic r0, r0, #0xc0000000
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x10]
+ orr r0, r0, #0x40000000
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x0]
+ orr r0, r0, #0x8
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BDF84
+FUN_020BDF84: ; 0x020BDF84
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BE02C ; =0x021065A0
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0x9]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+_020BDFD8: ; 0x020BDFD8
+ mov r6, r7
+ add r5, r8, #0x8
+ add r4, r4, #0x4
+_020BDFE4:
+ ldrh r1, [r8, #0xe]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl FUN_020BC14C
+_020BE000: ; 0x020BE000
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0x9]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BDFE4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BE02C: .word 0x021065A0
+
+ arm_func_start FUN_020BE030
+FUN_020BE030: ; 0x020BE030
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldrh r4, [r8, #0xe]
+ add r5, r8, #0x8
+ mov r6, r3
+ ldrh r3, [r5, r4]
+ add r4, r5, r4
+ add r4, r4, #0x4
+ mla r5, r3, r1, r4
+ mov r7, r2
+ ldr r1, [r5, #0x18]
+ ldr r2, [r5, #0x1c]
+ mov r3, r7
+ ldr r4, [r6, #0x0]
+ bl FUN_020BE238
+ mov r9, r0
+ ldr r1, [r5, #0x20]
+ mov r0, r8
+ ldr r2, [r5, #0x24]
+ mov r3, r7
+ bl FUN_020BE238
+_020BE088: ; 0x020BE088
+ cmp r9, #0x0
+ bne _020BE09C
+ cmp r0, #0x0
+ orreq r4, r4, #0x4
+ beq _020BE0A8
+_020BE09C:
+ str r9, [r6, #0x24]
+ str r0, [r6, #0x28]
+ bic r4, r4, #0x4
+_020BE0A8:
+ ldr r1, [r5, #0x10]
+ ldr r2, [r5, #0x14]
+ mov r0, r8
+ mov r3, r7
+ bl FUN_020BE12C
+ cmp r0, #0x10000000
+ strneh r0, [r6, #0x20]
+ movne r0, r0, lsr #0x10
+ strneh r0, [r6, #0x22]
+ orreq r4, r4, #0x2
+ ldr r1, [r5, #0x0]
+ ldr r2, [r5, #0x4]
+ mov r0, r8
+ mov r3, r7
+ bicne r4, r4, #0x2
+ bl FUN_020BE238
+ mov r9, r0
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0xc]
+ mov r0, r8
+ mov r3, r7
+ bl FUN_020BE238
+ cmp r9, #0x1000
+ bne _020BE114
+ cmp r0, #0x1000
+ orreq r4, r4, #0x1
+ beq _020BE120
+_020BE114:
+ str r9, [r6, #0x18]
+ str r0, [r6, #0x1c]
+ bic r4, r4, #0x1
+_020BE120:
+ str r4, [r6, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+
+ arm_func_start FUN_020BE12C
+FUN_020BE12C: ; 0x020BE12C
+ ands r12, r1, #0x20000000
+ movne r0, r2
+ bxne lr
+ add r0, r0, r2
+ ands r2, r1, #0xc0000000
+ beq _020BE1F8
+ ldr r2, _020BE234 ; =0x0000FFFF
+ ands r12, r1, #0x40000000
+ and r2, r1, r2
+ beq _020BE17C
+ ands r1, r3, #0x1
+ beq _020BE174
+ cmp r3, r2
+ movhi r1, r2, lsr #0x1
+ addhi r3, r1, #0x1
+ bhi _020BE1F8
+ mov r2, r3, lsr #0x1
+ b _020BE200
+_020BE174:
+ mov r3, r3, lsr #0x1
+ b _020BE1F8
+_020BE17C:
+ ands r1, r3, #0x3
+ beq _020BE1F4
+ cmp r3, r2
+ addhi r3, r1, r2, lsr #0x2
+ bhi _020BE1F8
+ ands r1, r3, #0x1
+ beq _020BE1EC
+ ands r1, r3, #0x2
+ movne r1, r3, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r3, lsr #0x2
+ addeq r1, r2, #0x1
+ mov r12, r2, lsl #0x2
+ add r3, r0, r2, lsl #0x2
+ mov r2, r1, lsl #0x2
+ add r1, r0, r1, lsl #0x2
+ ldrsh r12, [r0, r12]
+ ldrsh r2, [r0, r2]
+ mov r0, #0x3
+ ldrsh r3, [r3, #0x2]
+ ldrsh r1, [r1, #0x2]
+ mla r2, r12, r0, r2
+ mla r1, r3, r0, r1
+ ldr r0, _020BE234 ; =0x0000FFFF
+ mov r1, r1, asr #0x2
+ and r0, r0, r2, asr #0x2
+ orr r0, r0, r1, lsl #0x10
+ bx lr
+_020BE1EC:
+ mov r2, r3, lsr #0x2
+ b _020BE200
+_020BE1F4:
+ mov r3, r3, lsr #0x2
+_020BE1F8:
+ ldr r0, [r0, r3, lsl #0x2]
+ bx lr
+_020BE200:
+ add r1, r0, r2, lsl #0x2
+ mov r2, r2, lsl #0x2
+ ldrsh r12, [r0, r2]
+ ldrsh r3, [r1, #0x4]
+ ldrsh r2, [r1, #0x2]
+ ldrsh r1, [r1, #0x6]
+ ldr r0, _020BE234 ; =0x0000FFFF
+ add r3, r12, r3
+ add r1, r2, r1
+ and r2, r0, r3, asr #0x1
+ mov r0, r1, asr #0x1
+ orr r0, r2, r0, lsl #0x10
+ bx lr
+ .balign 4
+_020BE234: .word 0x0000FFFF
+
+ arm_func_start FUN_020BE238
+FUN_020BE238:
+ ands r12, r1, #0x20000000
+ movne r0, r2
+ bxne lr
+ add r0, r0, r2
+ ands r2, r1, #0xc0000000
+ beq _020BE2F0
+ ldr r2, _020BE330 ; =0x0000FFFF
+ ands r12, r1, #0x40000000
+ and r12, r1, r2
+ beq _020BE288
+ ands r2, r3, #0x1
+ beq _020BE280
+ cmp r3, r12
+ movhi r2, r12, lsr #0x1
+ addhi r3, r2, #0x1
+ bhi _020BE2F0
+ mov r3, r3, lsr #0x1
+ b _020BE304
+_020BE280:
+ mov r3, r3, lsr #0x1
+ b _020BE2F0
+_020BE288:
+ ands r2, r3, #0x3
+ beq _020BE2EC
+ cmp r3, r12
+ addhi r3, r2, r12, lsr #0x2
+ bhi _020BE2F0
+ ands r2, r3, #0x1
+ beq _020BE2E4
+ ands r2, r3, #0x2
+ movne r3, r3, lsr #0x2
+ addne r2, r3, #0x1
+ moveq r2, r3, lsr #0x2
+ addeq r3, r2, #0x1
+ ands r1, r1, #0x10000000
+ movne r2, r2, lsl #0x1
+ movne r1, r3, lsl #0x1
+ ldrnesh r2, [r0, r2]
+ ldrnesh r1, [r0, r1]
+ ldreq r2, [r0, r2, lsl #0x2]
+ ldreq r1, [r0, r3, lsl #0x2]
+ mov r0, #0x3
+ mla r0, r2, r0, r1
+ mov r0, r0, asr #0x2
+ bx lr
+_020BE2E4:
+ mov r3, r3, lsr #0x2
+ b _020BE304
+_020BE2EC:
+ mov r3, r3, lsr #0x2
+_020BE2F0:
+ ands r1, r1, #0x10000000
+ movne r1, r3, lsl #0x1
+ ldrnesh r0, [r0, r1]
+ ldreq r0, [r0, r3, lsl #0x2]
+ bx lr
+_020BE304:
+ ands r1, r1, #0x10000000
+ movne r2, r3, lsl #0x1
+ addne r1, r0, r3, lsl #0x1
+ ldrnesh r2, [r0, r2]
+ ldrnesh r0, [r1, #0x2]
+ addeq r1, r0, r3, lsl #0x2
+ ldreq r2, [r0, r3, lsl #0x2]
+ ldreq r0, [r1, #0x4]
+ add r0, r2, r0
+ mov r0, r0, asr #0x1
+ bx lr
+ .balign 4
+_020BE330: .word 0x0000FFFF
+
+ arm_func_start FUN_020BE334
+FUN_020BE334: ; 0x020BE334
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldr r3, [r6, #0x0]
+ ldr r5, [r6, #0x8]
+ mov r1, r2, lsl #0x10
+ mov r2, r3, lsl #0x4
+ mov r7, r0
+ mov r0, r5
+ mov r1, r1, lsr #0x10
+ mov r2, r2, lsr #0x10
+ bl FUN_020BC42C
+ mov r4, r0
+ ldrb r1, [r4, #0x2]
+ mov r0, r5
+ bl FUN_020BC4B8
+ mov r1, r0
+ ldr r0, [r6, #0x14]
+ mov r2, r7
+ bl FUN_020BE408
+ ldrb r1, [r4, #0x3]
+ cmp r1, #0xff
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020BE394: ; 0x020BE394
+ mov r0, r5
+ bl FUN_020BC4A8
+ mov r1, r0
+ ldr r0, [r6, #0x14]
+ mov r2, r7
+ bl FUN_020BE3B4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BE3B4
+FUN_020BE3B4: ; 0x020BE3B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x34]
+ mov r4, r2
+ add r0, r5, r0
+ bl FUN_020BC2A0
+ ldr r1, [r5, #0x2c]
+ ldrh r2, [r0, #0x2]
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ ands r1, r2, #0x1
+ ldrh r0, [r0, #0x0]
+ moveq r1, r3, lsl #0xf
+ moveq r3, r1, lsr #0x10
+ moveq r0, r0, lsl #0xf
+ moveq r0, r0, lsr #0x10
+ add r0, r0, r3
+ str r0, [r4, #0x14]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020BE408
+FUN_020BE408: ; 0x020BE408
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ add r0, r5, #0x3c
+ mov r4, r2
+ bl FUN_020BC2A0
+ ldr r1, [r0, #0x0]
+ ldr r3, [r4, #0x10]
+ and r1, r1, #0x1c000000
+ cmp r1, #0x14000000
+ ldrne r2, [r5, #0x8]
+ ldrne r1, _020BE4E0 ; =0x0000FFFF
+ andne r5, r2, r1
+ ldreq r2, [r5, #0x18]
+ ldreq r1, _020BE4E0 ; =0x0000FFFF
+ andeq r5, r2, r1
+ ldr r1, _020BE4E4 ; =0xC00F0000
+ ldr r2, _020BE4E8 ; =0x000007FF
+ and r1, r3, r1
+ str r1, [r4, #0x10]
+ ldr r1, [r0, #0x0]
+ ldr r3, [r4, #0x10]
+ add r1, r1, r5
+ orr r1, r3, r1
+ str r1, [r4, #0x10]
+ ldr r3, [r0, #0x4]
+ ldr r1, _020BE4EC ; =0x003FF800
+ and r3, r3, r2
+ strh r3, [r4, #0x2c]
+ ldr r3, [r0, #0x4]
+ and r1, r3, r1
+ mov r1, r1, lsr #0xb
+ strh r1, [r4, #0x2e]
+ ldr r3, [r0, #0x4]
+ ldrh r1, [r4, #0x2c]
+ and r0, r3, r2
+ and r5, r2, r3, lsr #0xb
+ cmp r0, r1
+ moveq r0, #0x1000
+ beq _020BE4B4
+ mov r0, r0, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020BE4B4:
+ str r0, [r4, #0x30]
+ ldrh r1, [r4, #0x2e]
+ cmp r5, r1
+ moveq r0, #0x1000
+ beq _020BE4D4
+ mov r0, r5, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020BE4D4:
+ str r0, [r4, #0x34]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BE4E0: .word 0x0000FFFF
+_020BE4E4: .word 0xC00F0000
+_020BE4E8: .word 0x000007FF
+_020BE4EC: .word 0x003FF800
+
+ arm_func_start FUN_020BE4F0
+FUN_020BE4F0: ; 0x020BE4F0
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BE59C ; =0x021065A4
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ str r8, [r9, #0x8]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0xd]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+_020BE548: ; 0x020BE548
+ mov r6, r7
+ add r5, r8, #0xc
+ add r4, r4, #0x4
+_020BE554:
+ ldrh r1, [r8, #0x12]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl FUN_020BC14C
+_020BE570: ; 0x020BE570
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0xd]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BE554
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BE59C: .word 0x021065A4
+
+ arm_func_start FUN_020BE5A0
+FUN_020BE5A0: ; 0x020BE5A0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, [r1, #0x8]
+ ldr r3, [r1, #0x0]
+ ldrh r1, [lr, #0x6]
+ mov r12, r3, asr #0xc
+ mov r3, #0x1
+ mla r2, r12, r1, r2
+ mov r1, r2, lsr #0x5
+ add r1, lr, r1, lsl #0x2
+ ldr r1, [r1, #0xc]
+ and r2, r2, #0x1f
+ and r1, r1, r3, lsl r2
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BE5E0
+FUN_020BE5E0: ; 0x020BE5E0
+ ldr r3, _020BE628 ; =0x02106598
+ mov r12, #0x0
+ ldr r3, [r3, #0x0]
+ str r3, [r0, #0xc]
+ ldrb r2, [r2, #0x17]
+ strb r2, [r0, #0x19]
+ str r1, [r0, #0x8]
+ ldrb r1, [r0, #0x19]
+ cmp r1, #0x0
+ bxls lr
+_020BE608:
+ orr r2, r12, #0x100
+ add r1, r0, r12, lsl #0x1
+ strh r2, [r1, #0x1a]
+ ldrb r1, [r0, #0x19]
+ add r12, r12, #0x1
+ cmp r12, r1
+ blo _020BE608
+ bx lr
+ .balign 4
+_020BE628: .word 0x02106598
+
+ arm_func_start FUN_020BE62C
+FUN_020BE62C: ; 0x020BE62C
+ ands r2, r3, #0x4
+ ldrne r1, [r0, #0x0]
+ orrne r1, r1, #0x1
+ strne r1, [r0, #0x0]
+ bne _020BE658
+
+ arm_func_start FUN_020BE640
+FUN_020BE640: ; 0x020BE640
+ ldr r2, [r1, #0x0]
+ str r2, [r0, #0x4]
+ ldr r2, [r1, #0x4]
+ str r2, [r0, #0x8]
+ ldr r1, [r1, #0x8]
+ str r1, [r0, #0xc]
+_020BE658:
+ ldr r1, [r0, #0x0]
+ orr r1, r1, #0x18
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020BE668
+FUN_020BE668: ; 0x020BE668
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x0]
+ ands r0, r1, #0x4
+ bne _020BE6AC
+ ands r0, r1, #0x2
+ bne _020BE698
+ add r1, r4, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ b _020BE6C4
+_020BE698:
+ add r1, r4, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ b _020BE6C4
+_020BE6AC:
+ ands r0, r1, #0x2
+ bne _020BE6C4
+ add r1, r4, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+_020BE6C4:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ ldmneia sp!, {r4,pc}
+_020BE6D0: ; 0x020BE6D0
+ add r1, r4, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BE6E4
+FUN_020BE6E4: ; 0x020BE6E4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ ands r0, r0, #0x8
+ ldrne r0, _020BE820 ; =0x00101610
+ mov r3, #0x3
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BE824 ; =0x00101810
+ mov r2, #0x2
+ streq r0, [sp, #0x0]
+ mov r0, #0x1000
+ str r0, [sp, #0x44]
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x40]
+ str r1, [sp, #0x34]
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x2c]
+ str r1, [sp, #0x28]
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x14]
+ str r1, [sp, #0x10]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BE828 ; =0x021067B0
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BE7B4
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BE7B4:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BE804
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BE804:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl FUN_020BB1C0
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BE820: .word 0x00101610
+_020BE824: .word 0x00101810
+_020BE828: .word 0x021067B0
+
+ arm_func_start FUN_020BE82C
+FUN_020BE82C: ; 0x020BE82C
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+
+ arm_func_start FUN_020BE850
+FUN_020BE850: ; 0x020BE850
+ ldr r2, [r1, #0x18]
+ mov r12, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r12, [r0, #0x4]
+ str r12, [r0, #0x30]
+ ldr r2, [r1, #0x1c]
+ ldrh r3, [r1, #0x2e]
+ mov r1, r2, lsl #0x1
+ rsb r1, r1, #0x0
+ add r1, r1, #0x2000
+ mul r1, r3, r1
+ mov r1, r1, lsl #0x3
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020BE894
+FUN_020BE894: ; 0x020BE894
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ rsb r2, r2, #0x0
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2c]
+ add r0, r1, r0
+ rsb r0, r0, #0x0
+ add r0, r0, #0x1000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r6, #0x30]
+ ldrsh r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2e]
+ sub r0, r1, r0
+ add r0, r0, #0x1000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BE954
+FUN_020BE954: ; 0x020BE954
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r5, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r0, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r6, [r10, #0x0]
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ rsb r2, r5, #0x0
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ sub r1, r5, r4
+ add r0, r7, r6
+ ldrh r3, [r9, #0x2c]
+ ldr r2, [r9, #0x18]
+ sub r0, r2, r0
+ mul r0, r3, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r10, #0x30]
+ ldrh r2, [r9, #0x2e]
+ ldr r0, [r9, #0x1c]
+ sub r0, r1, r0
+ add r0, r0, #0x2000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ mul r0, r7, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020BEA3C
+FUN_020BEA3C: ; 0x020BEA3C
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldrh r2, [r1, #0x2c]
+ ldr r3, [r1, #0x24]
+ mul r2, r3, r2
+ rsb r2, r2, #0x0
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x28]
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020BEA84
+FUN_020BEA84: ; 0x020BEA84
+ stmdb sp!, {r4,lr}
+ ldr r3, [r1, #0x18]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x1c]
+ str r3, [r0, #0x14]
+ str r2, [r0, #0x4]
+ ldr r4, [r1, #0x18]
+ ldr r3, [r1, #0x24]
+ ldrh lr, [r1, #0x2c]
+ smull r12, r3, r4, r3
+ mov r4, r12, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ rsb r3, r4, #0x0
+ mul r3, lr, r3
+ str r3, [r0, #0x30]
+ ldr r4, [r1, #0x1c]
+ ldr r12, [r1, #0x28]
+ mov r3, r4, lsl #0x1
+ smull lr, r12, r4, r12
+ rsb r4, r3, #0x0
+ mov r3, lr, lsr #0x8
+ ldrh lr, [r1, #0x2e]
+ add r1, r4, #0x2000
+ orr r3, r3, r12, lsl #0x18
+ mul r4, lr, r1
+ mul r1, lr, r3
+ add r1, r1, r4, lsl #0x3
+ str r1, [r0, #0x34]
+ str r2, [r0, #0x10]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BEB00
+FUN_020BEB00: ; 0x020BEB00
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ rsb r2, r2, #0x0
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh r2, [r5, #0x20]
+ ldrsh r1, [r5, #0x22]
+ ldrh r3, [r5, #0x2c]
+ ldr r0, [r5, #0x24]
+ add r1, r2, r1
+ rsb r1, r1, #0x0
+ add r1, r1, #0x1000
+ mul r2, r3, r1
+ mul r1, r0, r3
+ mov r0, r2, lsl #0x3
+ sub r0, r0, r1, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrsh r2, [r5, #0x20]
+ ldrsh r1, [r5, #0x22]
+ ldrh r3, [r5, #0x2e]
+ ldr r0, [r5, #0x28]
+ sub r1, r2, r1
+ add r1, r1, #0x1000
+ mul r2, r3, r1
+ mul r1, r0, r3
+ mov r0, r2, lsl #0x3
+ add r0, r0, r1, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BEBD8
+FUN_020BEBD8: ; 0x020BEBD8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r5, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r0, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r6, [r10, #0x0]
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ rsb r2, r5, #0x0
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ sub r1, r5, r4
+ add r2, r7, r6
+ ldr r5, [r9, #0x18]
+ ldrh r0, [r9, #0x2c]
+ sub r3, r5, r2
+ ldr r2, [r9, #0x24]
+ mul r4, r0, r3
+ smull r3, r2, r5, r2
+ mov r4, r4, lsl #0x3
+ mov r3, r3, lsr #0x8
+ orr r3, r3, r2, lsl #0x18
+ mul r2, r0, r3
+ sub r0, r4, r2
+ str r0, [r10, #0x30]
+ ldr r4, [r9, #0x1c]
+ ldrh r3, [r9, #0x2e]
+ sub r0, r1, r4
+ add r0, r0, #0x2000
+ mul r2, r3, r0
+ ldr r0, [r9, #0x28]
+ smull r1, r0, r4, r0
+ mov r1, r1, lsr #0x8
+ orr r1, r1, r0, lsl #0x18
+ mul r0, r3, r1
+ add r0, r0, r2, lsl #0x3
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ mul r0, r7, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020BECEC
+FUN_020BECEC: ; 0x020BECEC
+ stmdb sp!, {r4-r8,lr}
+ mov r12, r0
+ ands r0, r3, #0x4
+ ldrb r3, [r2, #0x3]
+ beq _020BED40
+ ldr r1, [r12, #0x0]
+ ands r0, r3, #0x2
+ orr r0, r1, #0x1
+ str r0, [r12, #0x0]
+ beq _020BEDB8
+ ldr r0, _020BEE2C ; =0x021CEF7C
+ ldrb r7, [r2, #0x1]
+ ldr r0, [r0, #0x0]
+ mov r1, #0x1
+ add r6, r0, #0xc4
+ mov r5, r7, lsr #0x5
+ ldr r4, [r6, r5, lsl #0x2]
+ and r0, r7, #0x1f
+ orr r0, r4, r1, lsl r0
+ str r0, [r6, r5, lsl #0x2]
+ b _020BEDB8
+_020BED40:
+ ldr r4, [r1, #0x0]
+ ands r0, r3, #0x2
+ str r4, [r12, #0x4]
+ ldr r0, [r1, #0x4]
+ str r0, [r12, #0x8]
+ ldr r0, [r1, #0x8]
+ str r0, [r12, #0xc]
+ beq _020BEDB8
+ ldr lr, _020BEE2C ; =0x021CEF7C
+ ldrb r0, [r2, #0x1]
+ ldr r4, [lr, #0x0]
+ mov lr, #0x18
+ add r8, r4, #0xc4
+ mov r7, r0, lsr #0x5
+ and r4, r0, #0x1f
+ mov r5, #0x1
+ mvn r4, r5, lsl r4
+ ldr r6, [r8, r7, lsl #0x2]
+ mul r5, r0, lr
+ and r0, r6, r4
+ str r0, [r8, r7, lsl #0x2]
+ ldr r4, [r1, #0xc]
+ ldr r0, _020BEE30 ; =0x021CFD8C
+ ldr lr, _020BEE34 ; =0x021CFD90
+ str r4, [r0, r5]
+ ldr r4, [r1, #0x10]
+ ldr r0, _020BEE38 ; =0x021CFD94
+ str r4, [lr, r5]
+ ldr r1, [r1, #0x14]
+ str r1, [r0, r5]
+_020BEDB8:
+ ands r0, r3, #0x1
+ beq _020BEE1C
+ ldrb r0, [r2, #0x2]
+ ldr r2, [r12, #0x0]
+ ldr r1, _020BEE2C ; =0x021CEF7C
+ orr r2, r2, #0x20
+ str r2, [r12, #0x0]
+ ldr r2, [r1, #0x0]
+ mov r1, r0, lsr #0x5
+ add r1, r2, r1, lsl #0x2
+ and r2, r0, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r1, [r1, #0xc4]
+ ands r1, r2, r1
+ ldrne r0, [r12, #0x0]
+ orrne r0, r0, #0x8
+ strne r0, [r12, #0x0]
+ bne _020BEE1C
+ ldr r2, _020BEE30 ; =0x021CFD8C
+ mov r1, #0x18
+ mla r1, r0, r1, r2
+ add r3, r12, #0x10
+ ldmia r1, {r0-r2}
+ stmia r3, {r0-r2}
+_020BEE1C:
+ ldr r0, [r12, #0x0]
+ orr r0, r0, #0x10
+ str r0, [r12, #0x0]
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BEE2C: .word 0x021CEF7C
+_020BEE30: .word 0x021CFD8C
+_020BEE34: .word 0x021CFD90
+_020BEE38: .word 0x021CFD94
+
+ arm_func_start FUN_020BEE3C
+FUN_020BEE3C: ; 0x020BEE3C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ mov r4, #0x0
+ ands r0, r1, #0x4
+ moveq r4, #0x1
+ ands r0, r1, #0x20
+ beq _020BEE94
+ ands r0, r1, #0x8
+ bne _020BEE94
+ cmp r4, #0x0
+ beq _020BEE84
+ add r1, r5, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ mov r4, #0x0
+_020BEE84:
+ add r1, r5, #0x10
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+_020BEE94:
+ ldr r0, [r5, #0x0]
+ ands r0, r0, #0x2
+ bne _020BEED0
+ cmp r4, #0x0
+ beq _020BEEBC
+ add r1, r5, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ b _020BEEE8
+_020BEEBC:
+ add r1, r5, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ b _020BEEE8
+_020BEED0:
+ cmp r4, #0x0
+ beq _020BEEE8
+ add r1, r5, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl FUN_020BB1C0
+_020BEEE8:
+ ldr r0, [r5, #0x0]
+ ands r0, r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020BEEF8: ; 0x020BEEF8
+ add r1, r5, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020BEF10
+FUN_020BEF10: ; 0x020BEF10
+ stmdb sp!, {lr}
+ sub sp, sp, #0x3c
+ ldr r1, [r0, #0x0]
+ mov r3, #0x0
+ ands r1, r1, #0x8
+ ldrne r1, _020BF0CC ; =0x00101710
+ mov r2, #0x3
+ strne r1, [sp, #0x0]
+ ldreq r1, _020BF0D0 ; =0x00101910
+ str r3, [sp, #0x34]
+ streq r1, [sp, #0x0]
+ mov r1, #0x2
+ str r1, [sp, #0x38]
+ str r3, [sp, #0x28]
+ str r3, [sp, #0x24]
+ str r3, [sp, #0x20]
+ str r3, [sp, #0x1c]
+ str r3, [sp, #0x14]
+ str r3, [sp, #0x10]
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x4]
+ ldr r2, [r0, #0x0]
+ ands r1, r2, #0x4
+ beq _020BEFA0
+ str r3, [sp, #0x2c]
+ str r3, [sp, #0x30]
+ ldr r1, [r0, #0x0]
+ ands r1, r1, #0x1
+ movne r1, #0x1000
+ strne r1, [sp, #0x8]
+ strne r1, [sp, #0x18]
+ ldreq r1, [r0, #0x18]
+ streq r1, [sp, #0x8]
+ ldreq r1, [r0, #0x1c]
+ streq r1, [sp, #0x18]
+ b _020BF040
+_020BEFA0:
+ ands r1, r2, #0x1
+ beq _020BEFE8
+ ldr r2, [r0, #0x24]
+ ldrh r1, [r0, #0x2c]
+ mov r2, r2, lsl #0x4
+ rsb r2, r2, #0x0
+ mul r1, r2, r1
+ str r1, [sp, #0x2c]
+ ldr r2, [r0, #0x28]
+ ldrh r1, [r0, #0x2e]
+ mov r2, r2, lsl #0x4
+ rsb r2, r2, #0x0
+ mul r3, r2, r1
+ mov r1, #0x1000
+ str r3, [sp, #0x30]
+ str r1, [sp, #0x8]
+ str r1, [sp, #0x18]
+ b _020BF040
+_020BEFE8:
+ ldr r2, [r0, #0x18]
+ ldr r1, [r0, #0x24]
+ ldrh r12, [r0, #0x2c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0x8
+ orr r2, r2, r1, lsl #0x18
+ rsb r1, r2, #0x0
+ mul r1, r12, r1
+ str r1, [sp, #0x2c]
+ ldr r2, [r0, #0x1c]
+ ldr r1, [r0, #0x28]
+ ldrh r12, [r0, #0x2e]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0x8
+ orr r2, r2, r1, lsl #0x18
+ rsb r1, r2, #0x0
+ mul r1, r12, r1
+ str r1, [sp, #0x30]
+ ldr r1, [r0, #0x18]
+ str r1, [sp, #0x8]
+ ldr r1, [r0, #0x1c]
+ str r1, [sp, #0x18]
+_020BF040:
+ ldr r12, [r0, #0x30]
+ cmp r12, #0x1000
+ beq _020BF078
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0x2c]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x8]
+ ldr r2, [r0, #0x30]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x2c]
+_020BF078:
+ ldr r12, [r0, #0x34]
+ cmp r12, #0x1000
+ beq _020BF0B0
+ ldr r2, [sp, #0x18]
+ ldr r1, [sp, #0x30]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x18]
+ ldr r0, [r0, #0x34]
+ smull r2, r1, r0, r1
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ str r0, [sp, #0x30]
+_020BF0B0:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0xe
+ bl FUN_020BB1C0
+ add sp, sp, #0x3c
+ ldmia sp!, {pc}
+ .balign 4
+_020BF0CC: .word 0x00101710
+_020BF0D0: .word 0x00101910
+
+ arm_func_start FUN_020BF0D4
+FUN_020BF0D4: ; 0x020BF0D4
+ stmdb sp!, {r4-r8,lr}
+ mov r5, r0
+ ands r0, r3, #0x4
+ ldrb r4, [r2, #0x1]
+ ldrb r0, [r2, #0x2]
+ beq _020BF174
+ ldr r2, [r5, #0x0]
+ ldr r1, _020BF2E0 ; =0x021CEF7C
+ orr r2, r2, #0x1
+ str r2, [r5, #0x0]
+ ldr r3, [r1, #0x0]
+ mov r1, r0, lsr #0x5
+ add r1, r3, r1, lsl #0x2
+ and r2, r0, #0x1f
+ mov r6, #0x1
+ mov r2, r6, lsl r2
+ ldr r1, [r1, #0xc4]
+ ands r1, r2, r1
+ beq _020BF148
+ add r3, r3, #0xc4
+ mov r2, r4, lsr #0x5
+ ldr r1, [r3, r2, lsl #0x2]
+ and r0, r4, #0x1f
+ orr r0, r1, r6, lsl r0
+ str r0, [r3, r2, lsl #0x2]
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x18
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r8,pc}
+_020BF148:
+ ldr r1, _020BF2E4 ; =0x021CFD80
+ mov r2, #0x18
+ mla r6, r0, r2, r1
+ mla r1, r4, r2, r1
+ mov r0, r6
+ bl MIi_CpuCopy32
+ mov r0, r6
+ add r1, r5, #0x10
+ mov r2, #0x18
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r8,pc}
+_020BF174:
+ ldr r3, [r1, #0x0]
+ ldr r2, _020BF2E0 ; =0x021CEF7C
+ str r3, [r5, #0x4]
+ ldr r3, [r1, #0x4]
+ mov r7, r0, lsr #0x5
+ str r3, [r5, #0x8]
+ ldr r3, [r1, #0x8]
+ and r8, r0, #0x1f
+ str r3, [r5, #0xc]
+ ldr r6, [r2, #0x0]
+ mov r3, #0x1
+ add r2, r6, r7, lsl #0x2
+ mov r7, r3, lsl r8
+ ldr r2, [r2, #0xc4]
+ ands r2, r7, r2
+ beq _020BF200
+ ldr r3, _020BF2E4 ; =0x021CFD80
+ mov r2, #0x18
+ mov r0, r1
+ mla r1, r4, r2, r3
+ bl MIi_CpuCopy32
+ ldr r0, _020BF2E0 ; =0x021CEF7C
+ mov r2, r4, lsr #0x5
+ ldr r1, [r0, #0x0]
+ and r0, r4, #0x1f
+ add r3, r1, #0xc4
+ mov r1, #0x1
+ mvn r0, r1, lsl r0
+ ldr r1, [r3, r2, lsl #0x2]
+ and r0, r1, r0
+ str r0, [r3, r2, lsl #0x2]
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x18
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r8,pc}
+_020BF200:
+ mov r2, #0x18
+ mul r12, r0, r2
+ and r7, r4, #0x1f
+ ldr r0, _020BF2E4 ; =0x021CFD80
+ add r6, r6, #0xc4
+ mov lr, r4, lsr #0x5
+ mvn r7, r3, lsl r7
+ ldr r8, [r6, lr, lsl #0x2]
+ mul r3, r4, r2
+ and r4, r8, r7
+ str r4, [r6, lr, lsl #0x2]
+ ldr r7, [r1, #0x0]
+ ldr r4, [r0, r12]
+ ldr r6, _020BF2E8 ; =0x021CFD84
+ smull r8, r4, r7, r4
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [r0, r3]
+ ldr r8, [r1, #0x4]
+ ldr r4, [r6, r12]
+ ldr r7, _020BF2EC ; =0x021CFD88
+ smull lr, r4, r8, r4
+ mov r8, lr, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ str r8, [r6, r3]
+ ldr r8, [r1, #0x8]
+ ldr r4, [r7, r12]
+ ldr r6, _020BF2F0 ; =0x021CFD8C
+ smull lr, r4, r8, r4
+ mov r8, lr, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ str r8, [r7, r3]
+ ldr r7, [r1, #0xc]
+ ldr r4, [r6, r12]
+ ldr lr, _020BF2F4 ; =0x021CFD90
+ smull r8, r4, r7, r4
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [r6, r3]
+ ldr r7, [r1, #0x10]
+ ldr r4, [lr, r12]
+ ldr r6, _020BF2F8 ; =0x021CFD94
+ smull r8, r4, r7, r4
+ add r0, r0, r12
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [lr, r3]
+ ldr lr, [r1, #0x14]
+ ldr r4, [r6, r12]
+ add r1, r5, #0x10
+ smull r5, r4, lr, r4
+ mov r5, r5, lsr #0xc
+ orr r5, r5, r4, lsl #0x14
+ str r5, [r6, r3]
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BF2E0: .word 0x021CEF7C
+_020BF2E4: .word 0x021CFD80
+_020BF2E8: .word 0x021CFD84
+_020BF2EC: .word 0x021CFD88
+_020BF2F0: .word 0x021CFD8C
+_020BF2F4: .word 0x021CFD90
+_020BF2F8: .word 0x021CFD94
+
+ arm_func_start FUN_020BF2FC
+FUN_020BF2FC: ; 0x020BF2FC
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ mov r6, r0
+ ldr r0, [r6, #0x0]
+ mov r5, #0x0
+ ands r4, r0, #0x18
+ bne _020BF328
+ add r1, r6, #0x1c
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+_020BF328:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x4
+ bne _020BF398
+ cmp r4, #0x0
+ movne r5, #0x1
+ bne _020BF398
+ ldr r2, [r6, #0x4c]
+ ldr r0, [r6, #0x10]
+ add r1, sp, #0x0
+ smull r3, r0, r2, r0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x0]
+ ldr r3, [r6, #0x50]
+ ldr r2, [r6, #0x14]
+ mov r0, #0x1c
+ smull r12, r2, r3, r2
+ mov r3, r12, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x4]
+ ldr r12, [r6, #0x54]
+ ldr r3, [r6, #0x18]
+ mov r2, #0x3
+ smull lr, r3, r12, r3
+ mov r12, lr, lsr #0xc
+ orr r12, r12, r3, lsl #0x14
+ str r12, [sp, #0x8]
+ bl FUN_020BB1C0
+_020BF398:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x2
+ bne _020BF3D4
+ cmp r5, #0x0
+ beq _020BF3C0
+ add r1, r6, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl FUN_020BB1C0
+ b _020BF3EC
+_020BF3C0:
+ add r1, r6, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl FUN_020BB1C0
+ b _020BF3EC
+_020BF3D4:
+ cmp r5, #0x0
+ beq _020BF3EC
+ add r1, r6, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl FUN_020BB1C0
+_020BF3EC:
+ cmp r4, #0x0
+ bne _020BF404
+ add r1, r6, #0x10
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+_020BF404:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x1
+ addne sp, sp, #0x10
+ ldmneia sp!, {r4-r6,pc}
+_020BF414: ; 0x020BF414
+ add r1, r6, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl FUN_020BB1C0
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BF42C
+FUN_020BF42C: ; 0x020BF42C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ ands r0, r0, #0x8
+ ldrne r0, _020BF568 ; =0x00101610
+ mov r3, #0x3
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BF56C ; =0x00101810
+ mov r2, #0x2
+ streq r0, [sp, #0x0]
+ mov r0, #0x1000
+ str r0, [sp, #0x44]
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x40]
+ str r1, [sp, #0x34]
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x2c]
+ str r1, [sp, #0x28]
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x14]
+ str r1, [sp, #0x10]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BF570 ; =0x021067D0
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BF4FC
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BF4FC:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BF54C
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BF54C:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl FUN_020BB1C0
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BF568: .word 0x00101610
+_020BF56C: .word 0x00101810
+_020BF570: .word 0x021067D0
+
+ arm_func_start FUN_020BF574
+FUN_020BF574: ; 0x020BF574
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+
+ arm_func_start FUN_020BF598
+FUN_020BF598: ; 0x020BF598
+ ldr r2, [r1, #0x18]
+ mov r12, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r12, [r0, #0x4]
+ ldr r3, [r1, #0x18]
+ ldrh r2, [r1, #0x2c]
+ rsb r3, r3, #0x1000
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x3
+ str r2, [r0, #0x30]
+ ldr r2, [r1, #0x1c]
+ ldrh r1, [r1, #0x2e]
+ rsb r2, r2, #0x1000
+ mul r1, r2, r1
+ mov r1, r1, lsl #0x3
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020BF5E8
+FUN_020BF5E8: ; 0x020BF5E8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ ldrsh r4, [r5, #0x22]
+ rsb r0, r2, #0x0
+ rsb r1, r1, #0x0
+ mov r0, r0, lsl #0xb
+ ldrsh r3, [r5, #0x20]
+ mov r1, r1, lsl #0xb
+ smull r7, lr, r4, r0
+ smull r12, r4, r3, r1
+ subs r7, r7, r12
+ sbc r3, lr, r4
+ mov r4, r7, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ add r2, r4, r2, lsl #0xf
+ str r2, [r6, #0x30]
+ ldrsh r2, [r5, #0x22]
+ ldrsh r3, [r5, #0x20]
+ ldrh r12, [r5, #0x2e]
+ smull r4, r1, r2, r1
+ smlal r4, r1, r3, r0
+ mov r0, r4, lsr #0x8
+ orr r0, r0, r1, lsl #0x18
+ add r0, r0, r12, lsl #0xf
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BF6C8
+FUN_020BF6C8: ; 0x020BF6C8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r0, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r5, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r7, [r10, #0x0]
+ str r5, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ mul r0, r4, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ ldrh r3, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ rsb r0, r3, #0x0
+ rsb r1, r1, #0x0
+ mov r2, r1, lsl #0xb
+ mov r11, r0, lsl #0xb
+ smull r1, r0, r7, r11
+ smull r8, r7, r5, r2
+ smlal r8, r7, r4, r11
+ mov r4, r8, lsr #0x8
+ orr r4, r4, r7, lsl #0x18
+ smull r5, r2, r6, r2
+ subs r1, r1, r5
+ sbc r0, r0, r2
+ mov r1, r1, lsr #0x8
+ orr r1, r1, r0, lsl #0x18
+ add r0, r1, r3, lsl #0xf
+ str r0, [r10, #0x30]
+ ldrh r0, [r9, #0x2e]
+ add r0, r4, r0, lsl #0xf
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020BF7C8
+FUN_020BF7C8: ; 0x020BF7C8
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldr r3, [r1, #0x24]
+ ldrh r2, [r1, #0x2c]
+ rsb r3, r3, #0x0
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x28]
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020BF810
+FUN_020BF810: ; 0x020BF810
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, [r1, #0x18]
+ mov r3, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r3, [r0, #0x4]
+ ldrh r5, [r1, #0x2c]
+ ldr r12, [r1, #0x24]
+ ldrh r2, [r1, #0x2e]
+ mul lr, r12, r5
+ rsb r12, r5, #0x0
+ mov r12, r12, lsl #0xb
+ ldr r4, [r1, #0x18]
+ sub r12, r12, lr
+ smull lr, r12, r4, r12
+ ldr r6, [r1, #0x28]
+ mov r4, lr, lsr #0x8
+ orr r4, r4, r12, lsl #0x18
+ add r4, r4, r5, lsl #0xf
+ str r4, [r0, #0x30]
+ mul r4, r6, r2
+ rsb r5, r2, #0x0
+ ldr r2, [r1, #0x1c]
+ add r4, r4, r5, lsl #0xb
+ smull lr, r12, r2, r4
+ mov r2, lr, lsr #0x8
+ ldrh r1, [r1, #0x2e]
+ orr r2, r2, r12, lsl #0x18
+ add r1, r2, r1, lsl #0xf
+ str r1, [r0, #0x34]
+ str r3, [r0, #0x10]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020BF894
+FUN_020BF894: ; 0x020BF894
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r2, [r5, #0x2c]
+ ldrh r7, [r5, #0x2e]
+ ldr r1, [r5, #0x28]
+ ldr r0, [r5, #0x24]
+ rsb r4, r2, #0x0
+ mul r3, r1, r7
+ rsb r1, r7, #0x0
+ add r1, r3, r1, lsl #0xb
+ ldrsh r3, [r5, #0x20]
+ mov r7, r4, lsl #0xb
+ mul r4, r0, r2
+ sub r0, r7, r4
+ ldrsh lr, [r5, #0x22]
+ smull r12, r4, r3, r1
+ smull r7, r3, lr, r0
+ subs r7, r7, r12
+ sbc r3, r3, r4
+ mov r4, r7, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ add r2, r4, r2, lsl #0xf
+ str r2, [r6, #0x30]
+ ldrsh r2, [r5, #0x22]
+ ldrsh r3, [r5, #0x20]
+ ldrh r12, [r5, #0x2e]
+ smull r4, r1, r2, r1
+ smlal r4, r1, r3, r0
+ mov r0, r4, lsr #0x8
+ orr r0, r0, r1, lsl #0x18
+ add r0, r0, r12, lsl #0xf
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BF988
+FUN_020BF988: ; 0x020BF988
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r0, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r5, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r7, [r10, #0x0]
+ str r5, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ mul r0, r4, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ ldrh r1, [r9, #0x2c]
+ ldrh r8, [r9, #0x2e]
+ ldr r2, [r9, #0x28]
+ rsb r0, r1, #0x0
+ mul r3, r2, r8
+ rsb r2, r8, #0x0
+ add r8, r3, r2, lsl #0xb
+ mov r0, r0, lsl #0xb
+ smull r3, r2, r5, r8
+ smull r8, r5, r6, r8
+ ldr r11, [r9, #0x24]
+ mul r12, r11, r1
+ sub r0, r0, r12
+ smlal r3, r2, r4, r0
+ smull r4, r0, r7, r0
+ subs r4, r4, r8
+ sbc r0, r0, r5
+ mov r4, r4, lsr #0x8
+ orr r4, r4, r0, lsl #0x18
+ add r0, r4, r1, lsl #0xf
+ str r0, [r10, #0x30]
+ ldrh r1, [r9, #0x2e]
+ mov r0, r3, lsr #0x8
+ orr r0, r0, r2, lsl #0x18
+ add r0, r0, r1, lsl #0xf
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020BFA9C
+FUN_020BFA9C: ; 0x020BFA9C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r3, #0x3
+ ands r0, r0, #0x8
+ ldrne r0, _020BFC1C ; =0x00101610
+ mov r2, #0x2
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BFC20 ; =0x00101810
+ mov r1, #0x1000
+ streq r0, [sp, #0x0]
+ mov r0, #0x0
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x44]
+ str r0, [sp, #0x40]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x30]
+ str r0, [sp, #0x2c]
+ str r0, [sp, #0x28]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x10]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ strne r1, [r4, #0x1c]
+ ldrne r0, [r4, #0x1c]
+ strne r0, [r4, #0x18]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x2
+ movne r0, #0x1000
+ strneh r0, [r4, #0x22]
+ movne r0, #0x0
+ strneh r0, [r4, #0x20]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x28]
+ ldrne r0, [r4, #0x28]
+ strne r0, [r4, #0x24]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BFC24 ; =0x021067F0
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BFBB0
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BFBB0:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BFC00
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BFC00:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl FUN_020BB1C0
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BFC1C: .word 0x00101610
+_020BFC20: .word 0x00101810
+_020BFC24: .word 0x021067F0
+
+ arm_func_start FUN_020BFC28
+FUN_020BFC28: ; 0x020BFC28
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+
+ arm_func_start FUN_020BFC4C
+FUN_020BFC4C: ; 0x020BFC4C
+ ldr r2, [r1, #0x18]
+ mov r3, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x1c]
+ rsb r2, r2, #0x0
+ sub r1, r1, #0x1000
+ mul r1, r2, r1
+ mov r1, r1, lsl #0x4
+ str r1, [r0, #0x34]
+ str r3, [r0, #0x10]
+ bx lr
+
+ arm_func_start FUN_020BFC8C
+FUN_020BFC8C: ; 0x020BFC8C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r1, [r5, #0x2c]
+ ldrsh r0, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrh r1, [r5, #0x2e]
+ ldrsh r0, [r5, #0x22]
+ rsb r1, r1, #0x0
+ sub r0, r0, #0x1000
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BFD38
+FUN_020BFD38: ; 0x020BFD38
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r3, [r9, #0x22]
+ ldr r0, [r9, #0x18]
+ ldrsh r7, [r9, #0x20]
+ ldr r5, [r9, #0x1c]
+ smull r2, r1, r0, r3
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r10, #0x0]
+ smull r2, r1, r5, r3
+ mov r4, r2, lsr #0xc
+ orr r4, r4, r1, lsl #0x14
+ smull r2, r1, r0, r7
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ smull r2, r1, r5, r7
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ mov r1, r11
+ bl FX_DivAsync
+ sub r0, r4, #0x1000
+ ldrh r1, [r9, #0x2c]
+ mul r2, r1, r6
+ mov r1, r2, lsl #0x4
+ str r1, [r10, #0x30]
+ ldrh r1, [r9, #0x2e]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020BFE0C
+FUN_020BFE0C: ; 0x020BFE0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov lr, #0x0
+ str lr, [r0, #0x4]
+ ldr r2, [r1, #0x24]
+ ldrh r3, [r1, #0x2c]
+ rsb r2, r2, #0x0
+ ldr r12, [r1, #0x28]
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r1, [r1, #0x2e]
+ rsb r2, r12, #0x0
+ rsb r1, r1, #0x0
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str lr, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020BFE68
+FUN_020BFE68: ; 0x020BFE68
+ stmdb sp!, {r4,lr}
+ ldr r3, [r1, #0x18]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x1c]
+ str r3, [r0, #0x14]
+ str r2, [r0, #0x4]
+ ldr r12, [r1, #0x24]
+ ldr r3, [r1, #0x18]
+ ldr r4, [r1, #0x28]
+ smull lr, r3, r12, r3
+ mov r12, lr, lsr #0xc
+ orr r12, r12, r3, lsl #0x14
+ ldrh lr, [r1, #0x2c]
+ rsb r3, r12, #0x0
+ ldr r12, [r1, #0x1c]
+ rsb r4, r4, #0x0
+ mul r3, lr, r3
+ smull lr, r12, r4, r12
+ mov r3, r3, lsl #0x4
+ str r3, [r0, #0x30]
+ mov r4, lr, lsr #0xc
+ ldrh r3, [r1, #0x2e]
+ ldr r1, [r1, #0x1c]
+ orr r4, r4, r12, lsl #0x14
+ add r1, r1, r4
+ rsb r3, r3, #0x0
+ sub r1, r1, #0x1000
+ mul r1, r3, r1
+ mov r1, r1, lsl #0x4
+ str r1, [r0, #0x34]
+ str r2, [r0, #0x10]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020BFEEC
+FUN_020BFEEC: ; 0x020BFEEC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh lr, [r5, #0x20]
+ ldr r4, [r5, #0x28]
+ ldrsh r0, [r5, #0x22]
+ ldr r12, [r5, #0x24]
+ smull r3, r2, r4, lr
+ smlal r3, r2, r12, r0
+ smull r1, r0, r4, r0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ sub r4, lr, r3
+ smull r3, r2, r12, lr
+ subs r1, r3, r1
+ sbc r0, r2, r0
+ ldrh r2, [r5, #0x2c]
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ mul r0, r2, r4
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2e]
+ add r0, r0, r1
+ rsb r1, r2, #0x0
+ sub r0, r0, #0x1000
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020BFFD4
+FUN_020BFFD4: ; 0x020BFFD4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldrh r2, [r6, #0x2c]
+ ldrh r1, [r6, #0x2e]
+ mov r7, r0
+ mov r10, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r10
+ bl FX_DivAsync
+ ldrsh r3, [r6, #0x22]
+ ldr r0, [r6, #0x18]
+ ldrsh r9, [r6, #0x20]
+ smull r2, r1, r0, r3
+ mov r2, r2, lsr #0xc
+ ldr r8, [r6, #0x1c]
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x0]
+ smull r2, r1, r8, r3
+ mov r4, r2, lsr #0xc
+ orr r4, r4, r1, lsl #0x14
+ smull r2, r1, r0, r9
+ mov r5, r2, lsr #0xc
+ orr r5, r5, r1, lsl #0x14
+ str r4, [r7, #0x14]
+ bl FX_GetDivResult
+ smull r2, r1, r8, r9
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x4]
+ mov r0, r10
+ mov r1, r11
+ bl FX_DivAsync
+ ldr lr, [r6, #0x1c]
+ ldrsh r2, [r6, #0x20]
+ ldr r8, [r6, #0x24]
+ ldr r0, [r6, #0x28]
+ smull r10, r9, r8, r2
+ ldrh r1, [r6, #0x2c]
+ smull r3, r2, r0, r2
+ ldrsh r12, [r6, #0x22]
+ str r1, [sp, #0x0]
+ mov r11, lr, asr #0x1f
+ smlal r3, r2, r8, r12
+ smull r8, r12, r0, r12
+ subs r8, r10, r8
+ sbc r0, r9, r12
+ mov r9, r8, lsr #0xc
+ mov r12, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r3, r2, asr #0xc
+ orr r12, r12, r2, lsl #0x14
+ umull r10, r2, r9, lr
+ mla r2, r9, r11, r2
+ mov r8, r0, asr #0xc
+ mla r2, r8, lr, r2
+ ldr r1, [r6, #0x18]
+ mov r8, r10, lsr #0xc
+ orr r8, r8, r2, lsl #0x14
+ add r2, r4, r8
+ mov r0, r1, asr #0x1f
+ umull r8, r4, r12, r1
+ mla r4, r12, r0, r4
+ mla r4, r3, r1, r4
+ mov r0, r8, lsr #0xc
+ orr r0, r0, r4, lsl #0x14
+ sub r1, r5, r0
+ ldr r0, [sp, #0x0]
+ sub r2, r2, #0x1000
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x4
+ str r0, [r7, #0x30]
+ ldrh r0, [r6, #0x2e]
+ rsb r0, r0, #0x0
+ mul r1, r0, r2
+ mov r0, r1, lsl #0x4
+ str r0, [r7, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r5, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020C0130
+FUN_020C0130: ; 0x020C0130
+ ldr ip, _020C0138 ; =FUN_020C187C
+ bx r12
+ .balign 4
+_020C0138: .word FUN_020C187C
+
+ arm_func_start FUN_020C013C
+FUN_020C013C: ; 0x020C013C
+ stmdb sp!, {r4,lr}
+ bl FUN_020C18F8
+_020C0144: ; 0x020C0144
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C0174
+FUN_020C0174: ; 0x020C0174
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ beq _020C0194
+ mov r0, #0x40
+ bl SND_SetMasterPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020C0194:
+ bl SND_ResetMasterPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C01A0
+FUN_020C01A0: ; 0x020C01A0
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+_020C01A8:
+ mov r0, r4
+ bl SND_RecvCommandReply
+_020C01B0: ; 0x020C01B0
+ cmp r0, #0x0
+ bne _020C01A8
+ bl FUN_020C0BA0
+ bl FUN_020C1D9C
+ bl FUN_020C3C88
+_020C01C4: ; 0x020C01C4
+ mov r0, #0x0
+ bl SND_FlushCommand
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C01D0
+FUN_020C01D0: ; 0x020C01D0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C0254 ; =0x021D1C94
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ bl SND_Init
+ ldr ip, _020C0258 ; =FUN_020C013C
+ ldr r0, _020C025C ; =0x021D1C98
+ mov r3, #0x0
+ ldr r1, _020C0260 ; =0x021D1CA4
+ ldr r2, _020C0264 ; =FUN_020C0130
+ str r12, [r0, #0x0]
+ str r3, [r0, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x4]
+ bl PM_PrependPreSleepCallback
+ ldr r0, _020C0260 ; =0x021D1CA4
+ bl PM_AppendPostSleepCallback
+ bl FUN_020C0270
+ bl FUN_020C1E38
+ bl FUN_020C0D20
+ ldr r1, _020C0268 ; =0x021D1C8C
+ mvn r3, #0x0
+ ldr r0, _020C026C ; =0x021D1C90
+ mov r2, #0x1
+ strb r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C0254: .word 0x021D1C94
+_020C0258: .word FUN_020C013C
+_020C025C: .word 0x021D1C98
+_020C0260: .word 0x021D1CA4
+_020C0264: .word FUN_020C0130
+_020C0268: .word 0x021D1C8C
+_020C026C: .word 0x021D1C90
+
+ arm_func_start FUN_020C0270
+FUN_020C0270: ; 0x020C0270
+ ldr r2, _020C0290 ; =0x021D1CB8
+ mov r3, #0x0
+ ldr r1, _020C0294 ; =0x021D1CB0
+ ldr r0, _020C0298 ; =0x021D1CB4
+ str r3, [r2, #0x0]
+ str r3, [r1, #0x0]
+ str r3, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C0290: .word 0x021D1CB8
+_020C0294: .word 0x021D1CB0
+_020C0298: .word 0x021D1CB4
+
+ arm_func_start FUN_020C029C
+FUN_020C029C: ; 0x020C029C
+ ldr r1, _020C02B8 ; =0x021D1CB4
+ mov r2, #0x1
+ mvn r0, r2, lsl r0
+ ldr r2, [r1, #0x0]
+ and r0, r2, r0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C02B8: .word 0x021D1CB4
+
+ arm_func_start FUN_020C02BC
+FUN_020C02BC: ; 0x020C02BC
+ ldr r0, _020C02FC ; =0x021D1CB4
+ mov r3, #0x1
+ ldr r2, [r0, #0x0]
+ mov r0, #0x0
+_020C02CC:
+ ands r1, r2, r3
+ ldreq r1, _020C02FC ; =0x021D1CB4
+ ldreq r2, [r1, #0x0]
+ orreq r2, r2, r3
+ streq r2, [r1, #0x0]
+ bxeq lr
+ add r0, r0, #0x1
+ cmp r0, #0x8
+ mov r3, r3, lsl #0x1
+ blt _020C02CC
+ mvn r0, #0x0
+ bx lr
+ .balign 4
+_020C02FC: .word 0x021D1CB4
+
+ arm_func_start FUN_020C0300
+FUN_020C0300: ; 0x020C0300
+ ldr r1, _020C0318 ; =0x021D1CB0
+ mvn r0, r0
+ ldr r2, [r1, #0x0]
+ and r0, r2, r0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C0318: .word 0x021D1CB0
+
+ arm_func_start FUN_020C031C
+FUN_020C031C:
+ ldr r1, _020C033C ; =0x021D1CB0
+ ldr r2, [r1, #0x0]
+ ands r3, r0, r2
+ movne r0, #0x0
+ orreq r0, r2, r0
+ streq r0, [r1, #0x0]
+ moveq r0, #0x1
+ bx lr
+ .balign 4
+_020C033C: .word 0x021D1CB0
+
+ arm_func_start FUN_020C0340
+FUN_020C0340:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4,pc}
+_020C034C: ; 0x020C034C
+ mov r1, #0x0
+ bl SND_UnlockChannel
+ ldr r0, _020C036C ; =0x021D1CB8
+ mvn r1, r4
+ ldr r2, [r0, #0x0]
+ and r1, r2, r1
+ str r1, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C036C: .word 0x021D1CB8
+
+ arm_func_start FUN_020C0370
+FUN_020C0370:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+_020C0380: ; 0x020C0380
+ ldr r1, _020C03B4 ; =0x021D1CB8
+ ldr r1, [r1, #0x0]
+ ands r1, r4, r1
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020C0394: ; 0x020C0394
+ mov r1, #0x0
+ bl SND_LockChannel
+ ldr r1, _020C03B4 ; =0x021D1CB8
+ mov r0, #0x1
+ ldr r2, [r1, #0x0]
+ orr r2, r2, r4
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C03B4: .word 0x021D1CB8
+
+ arm_func_start FUN_020C03B8
+FUN_020C03B8: ; 0x020C03B8
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C03D0: ; 0x020C03D0
+ ldr r0, [r4, #0xc]
+ cmp r0, #0x0
+ bne _020C03F8
+ ldr r0, [r4, #0x10]
+ bl SND_IsFinishedCommandTag
+_020C03E4: ; 0x020C03E4
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+_020C03F0: ; 0x020C03F0
+ mov r0, #0x1
+ str r0, [r4, #0xc]
+_020C03F8:
+ bl SND_GetChannelStatus
+ ldr r1, [r4, #0x0]
+ mov r2, #0x1
+ mov r1, r2, lsl r1
+ ands r0, r1, r0
+ movne r0, r2
+ moveq r0, #0x0
+ streq r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C041C
+FUN_020C041C: ; 0x020C041C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ bl SND_SetChannelPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C044C
+FUN_020C044C: ; 0x020C044C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ mov r4, r1
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020C046C: ; 0x020C046C
+ ldr r2, [r5, #0x4]
+ ldr r0, _020C04D4 ; =0xD87F8000
+ mov r3, r2, asr #0x1f
+ mov r1, #0x7f
+ bl _ll_udiv
+ mov r2, r4
+ mov r3, r4, asr #0x1f
+ bl _ll_udiv
+ mov r2, #0x0
+ mov r3, r0
+ mov r0, #0x10
+ cmp r1, r2
+ cmpeq r3, r0
+ movcc r3, r0
+ blo _020C04B8
+ ldr r0, _020C04D8 ; =0x0000FFFF
+ cmp r1, r2
+ cmpeq r3, r0
+ movhi r3, r0
+_020C04B8:
+ ldr r0, [r5, #0x0]
+ mov r1, #0x1
+ mov r0, r1, lsl r0
+ mov r1, r3
+ bl SND_SetChannelTimer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C04D4: .word 0xD87F8000
+_020C04D8: .word 0x0000FFFF
+
+ arm_func_start FUN_020C04DC
+FUN_020C04DC: ; 0x020C04DC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ mov r2, #0x0
+ bl SND_SetChannelVolume
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0510
+FUN_020C0510: ; 0x020C0510
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C0524: ; 0x020C0524
+ ldr r0, [r4, #0x0]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r0, r2, lsl r0
+ mov r2, r1
+ mov r3, r1
+ bl SND_StopTimer
+_020C0540: ; 0x020C0540
+ mov r0, #0x0
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C054C
+FUN_020C054C: ; 0x020C054C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x1c
+ movs r8, r1
+ mov r9, r0
+ mov r7, r2
+ mov r6, r3
+ beq _020C0584
+ cmp r8, #0x1
+ ldreq r0, [sp, #0x3c]
+ ldreq r1, [sp, #0x38]
+ moveq r0, r0, asr #0x1
+ moveq r5, r1, asr #0x1
+ subeq r4, r0, r1, asr #0x1
+ b _020C0598
+_020C0584:
+ ldr r0, [sp, #0x3c]
+ ldr r1, [sp, #0x38]
+ mov r0, r0, asr #0x2
+ mov r5, r1, asr #0x2
+ sub r4, r0, r1, asr #0x2
+_020C0598:
+ ldr r2, [sp, #0x40]
+ ldr r0, _020C0668 ; =0xD87F8000
+ mov r3, r2, asr #0x1f
+ mov r1, #0x7f
+ bl _ll_udiv
+ ldr r2, [sp, #0x48]
+ mov r3, r2, asr #0x1f
+ bl _ll_udiv
+ mov r3, #0x0
+ mov r2, #0x10
+ cmp r1, r3
+ cmpeq r0, r2
+ movcc r0, r2
+ blo _020C05E0
+ ldr r2, _020C066C ; =0x0000FFFF
+ cmp r1, r3
+ cmpeq r0, r2
+ movhi r0, r2
+_020C05E0:
+ str r5, [sp, #0x0]
+ ldr r1, [sp, #0x44]
+ str r4, [sp, #0x4]
+ str r1, [sp, #0x8]
+ mov r1, #0x0
+ str r1, [sp, #0xc]
+ cmp r6, #0x0
+ movne r3, #0x1
+ ldr r1, [sp, #0x4c]
+ str r0, [sp, #0x10]
+ str r1, [sp, #0x14]
+ ldr r0, [r9, #0x0]
+ moveq r3, #0x2
+ mov r1, r8
+ mov r2, r7
+ bl SND_SetupChannelPcm
+ mov r1, #0x0
+ ldr r0, [r9, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ mov r2, r1
+ mov r3, r1
+ bl SND_StartTimer
+ mov r0, #0x1
+ str r0, [r9, #0x8]
+ mov r0, #0x0
+ str r0, [r9, #0xc]
+ bl SND_GetCurrentCommandTag
+ str r0, [r9, #0x10]
+ ldr r1, [sp, #0x40]
+ mov r0, #0x1
+ str r1, [r9, #0x4]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C0668: .word 0xD87F8000
+_020C066C: .word 0x0000FFFF
+
+ arm_func_start FUN_020C0670
+FUN_020C0670: ; 0x020C0670
+ ldr r0, [r0, #0x0]
+ mov r1, #0x1
+ ldr ip, _020C0684 ; =FUN_020C0340
+ mov r0, r1, lsl r0
+ bx r12
+ .balign 4
+_020C0684: .word FUN_020C0340
+
+ arm_func_start FUN_020C0688
+FUN_020C0688: ; 0x020C0688
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r0, r0, lsl r4
+ bl FUN_020C0370
+_020C069C: ; 0x020C069C
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C06A8: ; 0x020C06A8
+ mov r0, #0x14
+ mul r0, r4, r0
+ ldr r2, _020C06C8 ; =0x021D1CBC
+ mov r1, #0x0
+ str r4, [r2, r0]
+ add r0, r2, r0
+ str r1, [r0, #0x8]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C06C8: .word 0x021D1CBC
+
+ arm_func_start FUN_020C06CC
+FUN_020C06CC: ; 0x020C06CC
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r4, [r6, #0x4]
+ mov r5, r1
+ cmp r4, #0x0
+ beq _020C06F8
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020ADAB0
+_020C06F0: ; 0x020C06F0
+ mov r0, #0x0
+ str r0, [r6, #0x4]
+_020C06F8:
+ ldr r0, _020C0728 ; =0x021D1E08
+ mov r1, r6
+ bl FUN_020ADAB0
+ strb r5, [r6, #0x3d]
+ cmp r4, #0x0
+ beq _020C071C
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020C0910
+_020C071C:
+ mov r0, r6
+ bl FUN_020C08B4
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0728: .word 0x021D1E08
+
+ arm_func_start FUN_020C072C
+FUN_020C072C: ; 0x020C072C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C0740: ; 0x020C0740
+ bl FUN_020C2A7C
+ ldr r1, [r4, #0xc]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x8]
+ ldmneia sp!, {r4,pc}
+_020C0758: ; 0x020C0758
+ ldr r1, [r4, #0x10]
+ ldr r2, _020C0778 ; =0x021D2254
+ mov r0, #0x24
+ mla r0, r1, r0, r2
+ mov r1, r4
+ add r0, r0, #0xc
+ bl FUN_020ADAB0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C0778: .word 0x021D2254
+
+ arm_func_start FUN_020C077C
+FUN_020C077C: ; 0x020C077C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+ strne r0, [r4, #0x0]
+ ldr r5, [r4, #0x4]
+ mov r1, r4
+ mov r0, r5
+ bl FUN_020ADAB0
+_020C07AC: ; 0x020C07AC
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020C07D8
+ add r0, r5, #0xc
+ bl FUN_020ADBE8
+ ldr r0, [r4, #0x8]
+ mov r1, #0x0
+ str r1, [r0, #0xc]
+ str r1, [r4, #0x8]
+_020C07D8:
+ ldr r0, _020C0800 ; =0x021D1E08
+ mov r1, r4
+ bl FUN_020ADAB0
+ ldr r0, _020C0804 ; =0x021D1DFC
+ mov r1, r4
+ bl FUN_020ADBE8
+_020C07F0: ; 0x020C07F0
+ mov r0, #0x0
+ strb r0, [r4, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0800: .word 0x021D1E08
+_020C0804: .word 0x021D1DFC
+
+ arm_func_start FUN_020C0808
+FUN_020C0808: ; 0x020C0808
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, _020C0874 ; =0x021D1DFC
+ mov r1, #0x0
+ bl FUN_020ADA98
+ movs r4, r0
+ bne _020C0850
+ ldr r0, _020C0878 ; =0x021D1E08
+ mov r1, #0x0
+ bl FUN_020ADA98
+ mov r4, r0
+ ldrb r1, [r4, #0x3d]
+ cmp r5, r1
+ addlt sp, sp, #0x4
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r5,pc}
+_020C084C: ; 0x020C084C
+ bl FUN_020C087C
+_020C0850:
+ ldr r0, _020C0874 ; =0x021D1DFC
+ mov r1, r4
+ bl FUN_020ADAB0
+ mov r0, r4
+ strb r5, [r4, #0x3d]
+ bl FUN_020C08B4
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0874: .word 0x021D1DFC
+_020C0878: .word 0x021D1E08
+
+ arm_func_start FUN_020C087C
+FUN_020C087C: ; 0x020C087C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x2
+ bne _020C089C
+ ldrb r0, [r4, #0x3c]
+ ldr r1, _020C08B0 ; =0xFFFFFD2D
+ bl SND_SetPlayerVolume
+_020C089C:
+ ldrb r0, [r4, #0x3c]
+ bl SND_StopSeq
+ mov r0, r4
+ bl FUN_020C077C
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C08B0: .word 0xFFFFFD2D
+
+ arm_func_start FUN_020C08B4
+FUN_020C08B4: ; 0x020C08B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, _020C090C ; =0x021D1E08
+ mov r1, #0x0
+ bl FUN_020ADA98
+ movs r1, r0
+ beq _020C08F8
+ ldr r4, _020C090C ; =0x021D1E08
+_020C08D8:
+ ldrb r2, [r5, #0x3d]
+ ldrb r0, [r1, #0x3d]
+ cmp r2, r0
+ blo _020C08F8
+ mov r0, r4
+ bl FUN_020ADA98
+ movs r1, r0
+ bne _020C08D8
+_020C08F8:
+ ldr r0, _020C090C ; =0x021D1E08
+ mov r2, r5
+ bl FUN_020ADB18
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C090C: .word 0x021D1E08
+
+ arm_func_start FUN_020C0910
+FUN_020C0910: ; 0x020C0910
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, #0x0
+ mov r5, r0
+ bl FUN_020ADA98
+ movs r1, r0
+ beq _020C0950
+_020C0930:
+ ldrb r2, [r4, #0x3d]
+ ldrb r0, [r1, #0x3d]
+ cmp r2, r0
+ blo _020C0950
+ mov r0, r5
+ bl FUN_020ADA98
+ movs r1, r0
+ bne _020C0930
+_020C0950:
+ mov r0, r5
+ mov r2, r4
+ bl FUN_020ADB18
+ str r5, [r4, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C0968
+FUN_020C0968: ; 0x020C0968
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x0
+ strb r0, [r4, #0x2e]
+ strb r0, [r4, #0x2d]
+ strb r0, [r4, #0x2f]
+ strh r0, [r4, #0x34]
+ strh r0, [r4, #0x3e]
+ mov r1, #0x7f
+ strb r1, [r4, #0x40]
+ add r0, r4, #0x1c
+ strb r1, [r4, #0x41]
+ bl FUN_020C3E6C
+ add r0, r4, #0x1c
+ mov r1, #0x7f00
+ mov r2, #0x1
+ bl FUN_020C3E40
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C09B0
+FUN_020C09B0: ; 0x020C09B0
+ stmdb sp!, {r4-r6,lr}
+ ldr r3, _020C0A00 ; =0x021D2254
+ mov r2, #0x24
+ mla r5, r0, r2, r3
+ mov r6, r1
+ add r0, r5, #0xc
+ mov r1, #0x0
+ bl FUN_020ADA98
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C09DC: ; 0x020C09DC
+ mov r1, r4
+ add r0, r5, #0xc
+ bl FUN_020ADAB0
+ str r6, [r4, #0xc]
+ str r4, [r6, #0x8]
+ ldr r0, [r4, #0x8]
+ bl FUN_020C29C0
+ ldr r0, [r4, #0x8]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0A00: .word 0x021D2254
+
+ arm_func_start FUN_020C0A04
+FUN_020C0A04: ; 0x020C0A04
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r0
+ mov r4, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020C0A1C: ; 0x020C0A1C
+ ldrb r0, [r5, #0x2e]
+ cmp r4, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020C0A2C: ; 0x020C0A2C
+ ldrb r0, [r5, #0x3c]
+ bl SND_PauseSeq
+ strb r4, [r5, #0x2e]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C0A40
+FUN_020C0A40: ; 0x020C0A40
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ mov r2, r1
+ ldmeqia sp!, {r4,pc}
+_020C0A50: ; 0x020C0A50
+ ldrb r1, [r4, #0x2c]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C0A5C: ; 0x020C0A5C
+ cmp r2, #0x0
+ bne _020C0A6C
+ bl FUN_020C087C
+ ldmia sp!, {r4,pc}
+_020C0A6C:
+ add r0, r4, #0x1c
+ mov r1, #0x0
+ bl FUN_020C3E40
+ mov r0, r4
+ mov r1, #0x0
+ bl FUN_020C06CC
+ mov r0, #0x2
+ strb r0, [r4, #0x2c]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C0A90
+FUN_020C0A90: ; 0x020C0A90
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x3c]
+ ldr r4, [r5, #0x4]
+ bl SND_PrepareSeq
+ ldr r2, [r4, #0x1c]
+ cmp r2, #0x0
+ beq _020C0AC0
+ ldrb r0, [r5, #0x3c]
+ ldr r1, _020C0AE4 ; =0x0000FFFF
+ bl SND_SetTrackAllocatableChannel
+_020C0AC0:
+ mov r0, r5
+ bl FUN_020C0968
+ bl SND_GetCurrentCommandTag
+ str r0, [r5, #0x30]
+ mov r0, #0x1
+ strb r0, [r5, #0x2f]
+ strb r0, [r5, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0AE4: .word 0x0000FFFF
+
+ arm_func_start thunk_FUN_020c077c
+thunk_FUN_020c077c: ; 0x020C0AE8
+ ldr ip, _020C0AF0 ; =FUN_020C077C
+ bx r12
+ .balign 4
+_020C0AF0: .word FUN_020C077C
+
+ arm_func_start FUN_020C0AF4
+FUN_020C0AF4: ; 0x020C0AF4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020C0B9C ; =0x021D2254
+ mov r3, #0x24
+ mov r4, r0
+ ldr r5, [r4, #0x0]
+ mla r6, r1, r3, r12
+ mov r7, r2
+ cmp r5, #0x0
+ beq _020C0B20
+ bl FUN_020C0F68
+_020C0B20:
+ ldrh r1, [r6, #0x8]
+ ldr r0, [r6, #0x18]
+ cmp r1, r0
+ blo _020C0B64
+ mov r0, r6
+ mov r1, #0x0
+ bl FUN_020ADA98
+_020C0B3C: ; 0x020C0B3C
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C0B4C: ; 0x020C0B4C
+ ldrb r1, [r0, #0x3d]
+ cmp r7, r1
+ addlt sp, sp, #0x4
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r7,pc}
+_020C0B60: ; 0x020C0B60
+ bl FUN_020C087C
+_020C0B64:
+ mov r0, r7
+ bl FUN_020C0808
+ movs r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C0B7C: ; 0x020C0B7C
+ mov r0, r6
+ mov r1, r5
+ bl FUN_020C0910
+ str r4, [r5, #0x0]
+ mov r0, r5
+ str r5, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C0B9C: .word 0x021D2254
+
+ arm_func_start FUN_020C0BA0
+FUN_020C0BA0: ; 0x020C0BA0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ bl SND_GetPlayerStatus
+_020C0BAC: ; 0x020C0BAC
+ str r0, [sp, #0x0]
+ ldr r0, _020C0D14 ; =0x021D1E08
+ mov r1, #0x0
+ bl FUN_020ADA98
+ movs r10, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,pc}
+_020C0BC8: ; 0x020C0BC8
+ mov r0, #0x8000
+ rsb r0, r0, #0x0
+ ldr r4, _020C0D18 ; =0x02103BAC
+ str r0, [sp, #0x4]
+ mov r5, #0x1
+ mov r11, #0x0
+_020C0BE0:
+ ldr r0, _020C0D14 ; =0x021D1E08
+ mov r1, r10
+ bl FUN_020ADA98
+ ldrb r1, [r10, #0x2d]
+ mov r9, r0
+ cmp r1, #0x0
+ bne _020C0C0C
+ ldr r0, [r10, #0x30]
+ bl SND_IsFinishedCommandTag
+_020C0C04: ; 0x020C0C04
+ cmp r0, #0x0
+ strneb r5, [r10, #0x2d]
+_020C0C0C:
+ ldrb r0, [r10, #0x2d]
+ cmp r0, #0x0
+ beq _020C0C38
+ ldrb r0, [r10, #0x3c]
+ mov r1, r5, lsl r0
+ ldr r0, [sp, #0x0]
+ ands r0, r0, r1
+ bne _020C0C38
+ mov r0, r10
+ bl FUN_020C077C
+ b _020C0D00
+_020C0C38:
+ add r0, r10, #0x1c
+ bl FUN_020C3DF4
+ ldr r0, [r10, #0x4]
+ ldrb r2, [r10, #0x41]
+ ldrb r1, [r10, #0x40]
+ ldrb r0, [r0, #0x20]
+ mov r3, r2, lsl #0x1
+ mov r2, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ add r0, r10, #0x1c
+ ldrsh r8, [r4, r3]
+ ldrsh r7, [r4, r2]
+ ldrsh r6, [r4, r1]
+ bl FUN_020C3E0C
+ mov r0, r0, asr #0x8
+ mov r2, r0, lsl #0x1
+ add r1, r7, r8
+ mov r0, #0x8000
+ ldrsh r2, [r4, r2]
+ add r1, r6, r1
+ rsb r0, r0, #0x0
+ add r6, r2, r1
+ cmp r6, r0
+ ldrlt r6, [sp, #0x4]
+ blt _020C0CA8
+ ldr r0, _020C0D1C ; =0x00007FFF
+ cmp r6, r0
+ movgt r6, r0
+_020C0CA8:
+ ldrsh r0, [r10, #0x3e]
+ cmp r6, r0
+ beq _020C0CC4
+ ldrb r0, [r10, #0x3c]
+ mov r1, r6
+ bl SND_SetPlayerVolume
+ strh r6, [r10, #0x3e]
+_020C0CC4:
+ ldrb r0, [r10, #0x2c]
+ cmp r0, #0x2
+ bne _020C0CE8
+ add r0, r10, #0x1c
+ bl FUN_020C3DDC
+_020C0CD8: ; 0x020C0CD8
+ cmp r0, #0x0
+ beq _020C0CE8
+ mov r0, r10
+ bl FUN_020C087C
+_020C0CE8:
+ ldrb r0, [r10, #0x2f]
+ cmp r0, #0x0
+ beq _020C0D00
+ ldrb r0, [r10, #0x3c]
+ bl SND_StartPreparedSeq
+ strb r11, [r10, #0x2f]
+_020C0D00:
+ mov r10, r9
+ cmp r9, #0x0
+ bne _020C0BE0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C0D14: .word 0x021D1E08
+_020C0D18: .word 0x02103BAC
+_020C0D1C: .word 0x00007FFF
+
+ arm_func_start FUN_020C0D20
+FUN_020C0D20: ; 0x020C0D20
+ stmdb sp!, {r4-r10,lr}
+ ldr r0, _020C0DC4 ; =0x021D1E08
+ mov r1, #0x14
+ bl FUN_020ADC74
+ ldr r0, _020C0DC8 ; =0x021D1DFC
+ mov r1, #0x14
+ bl FUN_020ADC74
+ ldr r6, _020C0DCC ; =0x021D1E14
+ mov r7, #0x0
+ ldr r4, _020C0DC8 ; =0x021D1DFC
+ mov r5, r7
+_020C0D4C:
+ strb r5, [r6, #0x2c]
+ mov r0, r4
+ mov r1, r6
+ strb r7, [r6, #0x3c]
+ bl FUN_020ADBE8
+ add r7, r7, #0x1
+ cmp r7, #0x10
+ add r6, r6, #0x44
+ blt _020C0D4C
+ ldr sl, _020C0DD0 ; =0x021D2254
+ mov r9, #0x0
+ mov r7, r9
+ mov r4, r9
+ mov r8, #0xc
+ mov r6, #0x7f
+ mov r5, #0x1
+_020C0D8C:
+ mov r0, r10
+ mov r1, r8
+ bl FUN_020ADC74
+ mov r1, r7
+ add r0, r10, #0xc
+ bl FUN_020ADC74
+ strb r6, [r10, #0x20]
+ str r5, [r10, #0x18]
+ add r9, r9, #0x1
+ str r4, [r10, #0x1c]
+ cmp r9, #0x20
+ add r10, r10, #0x24
+ blt _020C0D8C
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020C0DC4: .word 0x021D1E08
+_020C0DC8: .word 0x021D1DFC
+_020C0DCC: .word 0x021D1E14
+_020C0DD0: .word 0x021D2254
+
+ arm_func_start FUN_020C0DD4
+FUN_020C0DD4: ; 0x020C0DD4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+ ldrb r0, [r1, #0x3c]
+ bl SND_GetPlayerTickCounter
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0E14
+FUN_020C0E14: ; 0x020C0E14
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ ldrh r0, [r1, #0x34]
+ cmp r0, #0x1
+ mvnne r0, #0x0
+ ldreqh r0, [r1, #0x38]
+ bx lr
+
+ arm_func_start FUN_020C0E38
+FUN_020C0E38: ; 0x020C0E38
+ ldr r12, [r0, #0x0]
+ cmp r12, #0x0
+ bxeq lr
+ mov r3, #0x2
+ strh r3, [r12, #0x34]
+ ldr r3, [r0, #0x0]
+ strh r1, [r3, #0x38]
+ ldr r0, [r0, #0x0]
+ strh r2, [r0, #0x3a]
+ bx lr
+
+ arm_func_start FUN_020C0E60
+FUN_020C0E60: ; 0x020C0E60
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ movne r2, #0x1
+ strneh r2, [r3, #0x34]
+ ldrne r0, [r0, #0x0]
+ strneh r1, [r0, #0x38]
+ bx lr
+
+ arm_func_start FUN_020C0E7C
+FUN_020C0E7C: ; 0x020C0E7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetTrackPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0EA4
+FUN_020C0EA4: ; 0x020C0EA4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetTrackPitch
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0ECC
+FUN_020C0ECC: ; 0x020C0ECC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetPlayerChannelPriority
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0EF4
+FUN_020C0EF4: ; 0x020C0EF4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r3, #0x2c]
+ cmp r0, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ add r0, r3, #0x1c
+ mov r1, r1, lsl #0x8
+ bl FUN_020C3E40
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C0F30
+FUN_020C0F30: ; 0x020C0F30
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ strneb r1, [r0, #0x40]
+ bx lr
+
+ arm_func_start FUN_020C0F40
+FUN_020C0F40: ; 0x020C0F40
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ strneb r1, [r0, #0x41]
+ bx lr
+
+ arm_func_start FUN_020C0F50
+FUN_020C0F50: ; 0x020C0F50
+ mov r1, #0x24
+ mul r1, r0, r1
+ ldr r0, _020C0F64 ; =0x021D225C
+ ldrh r0, [r0, r1]
+ bx lr
+ .balign 4
+_020C0F64: .word 0x021D225C
+
+ arm_func_start FUN_020C0F68
+FUN_020C0F68: ; 0x020C0F68
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ movne r1, #0x0
+ strne r1, [r2, #0x0]
+ strne r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020C0F80
+FUN_020C0F80: ; 0x020C0F80
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start FUN_020C0F8C
+FUN_020C0F8C: ; 0x020C0F8C
+ ldr ip, _020C0F98 ; =FUN_020C0A04
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020C0F98: .word FUN_020C0A04
+
+ arm_func_start FUN_020C0F9C
+FUN_020C0F9C: ; 0x020C0F9C
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _020C0FD8 ; =0x021D1E14
+ mov r6, r0
+ mov r5, #0x0
+_020C0FAC:
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x0
+ beq _020C0FC4
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020C0A40
+_020C0FC4:
+ add r5, r5, #0x1
+ cmp r5, #0x10
+ add r4, r4, #0x44
+ blt _020C0FAC
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0FD8: .word 0x021D1E14
+
+ arm_func_start FUN_020C0FDC
+FUN_020C0FDC: ; 0x020C0FDC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020C103C ; =0x021D1E14
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0x0
+_020C0FF4:
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x0
+ beq _020C1024
+ ldrh r0, [r4, #0x34]
+ cmp r0, #0x1
+ bne _020C1024
+ ldrh r0, [r4, #0x38]
+ cmp r0, r7
+ bne _020C1024
+ mov r0, r4
+ mov r1, r6
+ bl FUN_020C0A40
+_020C1024:
+ add r5, r5, #0x1
+ cmp r5, #0x10
+ add r4, r4, #0x44
+ blt _020C0FF4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C103C: .word 0x021D1E14
+
+ arm_func_start FUN_020C1040
+FUN_020C1040: ; 0x020C1040
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020C109C ; =0x021D2254
+ mov r2, #0x24
+ mla r4, r0, r2, r3
+ ldr r5, _020C10A0 ; =0x021D1E14
+ mov r7, r1
+ mov r6, #0x0
+_020C1060:
+ ldrb r0, [r5, #0x2c]
+ cmp r0, #0x0
+ beq _020C1084
+ ldr r0, [r5, #0x4]
+ cmp r0, r4
+ bne _020C1084
+ mov r0, r5
+ mov r1, r7
+ bl FUN_020C0A40
+_020C1084:
+ add r6, r6, #0x1
+ cmp r6, #0x10
+ add r5, r5, #0x44
+ blt _020C1060
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C109C: .word 0x021D2254
+_020C10A0: .word 0x021D1E14
+
+ arm_func_start FUN_020C10A4
+FUN_020C10A4: ; 0x020C10A4
+ ldr ip, _020C10B0 ; =FUN_020C0A40
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020C10B0: .word FUN_020C0A40
+
+ arm_func_start FUN_020C10B4
+FUN_020C10B4:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r2
+ mov r6, r0
+ mov r0, r1
+ mov r3, #0x0
+ ldr r2, _020C1140 ; =FUN_020C072C
+ add r1, r5, #0x14
+ str r3, [sp, #0x0]
+ bl FUN_020C2958
+ movs r4, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C10EC: ; 0x020C10EC
+ mov r2, #0x0
+ str r2, [r4, #0xc]
+ str r6, [r4, #0x10]
+ mov r1, r5
+ add r0, r4, #0x14
+ str r2, [r4, #0x8]
+ bl FUN_020C2A94
+_020C1108: ; 0x020C1108
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C1118: ; 0x020C1118
+ ldr r2, _020C1144 ; =0x021D2254
+ mov r1, #0x24
+ mla r2, r6, r1, r2
+ str r0, [r4, #0x8]
+ mov r1, r4
+ add r0, r2, #0xc
+ bl FUN_020ADBE8
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C1140: .word FUN_020C072C
+_020C1144: .word 0x021D2254
+
+ arm_func_start FUN_020C1148
+FUN_020C1148: ; 0x020C1148
+ mov r2, #0x24
+ mul r2, r0, r2
+ ldr r0, _020C115C ; =0x021D2270
+ str r1, [r0, r2]
+ bx lr
+ .balign 4
+_020C115C: .word 0x021D2270
+
+ arm_func_start FUN_020C1160
+FUN_020C1160: ; 0x020C1160
+ mov r2, #0x24
+ mul r2, r0, r2
+ mov r0, r1, lsl #0x10
+ ldr r1, _020C117C ; =0x021D226C
+ mov r0, r0, lsr #0x10
+ str r0, [r1, r2]
+ bx lr
+ .balign 4
+_020C117C: .word 0x021D226C
+
+ arm_func_start FUN_020C1180
+FUN_020C1180: ; 0x020C1180
+ mov r2, #0x24
+ mul r2, r0, r2
+ ldr r0, _020C1194 ; =0x021D2274
+ strb r1, [r0, r2]
+ bx lr
+ .balign 4
+_020C1194: .word 0x021D2274
+
+ arm_func_start FUN_020C1198
+FUN_020C1198: ; 0x020C1198
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ ldmeqia sp!, {r4-r6,pc}
+_020C11B0: ; 0x020C11B0
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ beq _020C11E8
+ mov r5, #0x1
+_020C11C0:
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r4
+ mov r1, r5
+ bl FUN_020C1254
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ bne _020C11C0
+_020C11E8:
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StartTimer
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020C1208
+FUN_020C1208: ; 0x020C1208
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0x24]
+ mov r1, r1, lsl #0x1e
+ movs r1, r1, asr #0x1f
+ ldmeqia sp!, {r4,pc}
+_020C121C: ; 0x020C121C
+ ldr r2, [r0, #0x40]
+ mov r3, #0x1
+ mov r1, #0x0
+ mov r2, r3, lsl r2
+ ldr r0, [r0, #0x44]
+ mov r3, r1
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C1254
+FUN_020C1254: ; 0x020C1254
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ ldr r0, [r5, #0x28]
+ ldr r1, [r5, #0x2c]
+ bl _u32_div_f
+ ldr r1, [r5, #0x48]
+ ldr r2, [r5, #0x38]
+ mov r3, r0
+ mul lr, r3, r2
+ cmp r1, #0x0
+ mov r12, #0x0
+ ble _020C12B8
+ ldr r2, _020C1300 ; =0x021D2724
+ ldr r0, _020C1304 ; =0x021D26E4
+_020C1294:
+ add r1, r5, r12
+ ldrb r1, [r1, #0x4c]
+ ldr r1, [r2, r1, lsl #0x3]
+ add r1, r1, lr
+ str r1, [r0, r12, lsl #0x2]
+ ldr r1, [r5, #0x48]
+ add r12, r12, #0x1
+ cmp r12, r1
+ blt _020C1294
+_020C12B8:
+ ldr r0, [r5, #0x20]
+ ldr r2, _020C1304 ; =0x021D26E4
+ str r0, [sp, #0x0]
+ ldr r12, [r5, #0x34]
+ mov r0, r4
+ str r12, [sp, #0x4]
+ ldr r4, [r5, #0x30]
+ blx r4
+ ldr r0, [r5, #0x38]
+ add r0, r0, #0x1
+ str r0, [r5, #0x38]
+ ldr r1, [r5, #0x38]
+ ldr r0, [r5, #0x2c]
+ cmp r1, r0
+ movge r0, #0x0
+ strge r0, [r5, #0x38]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C1300: .word 0x021D2724
+_020C1304: .word 0x021D26E4
+
+ arm_func_start FUN_020C1308
+FUN_020C1308: ; 0x020C1308
+ ldr ip, _020C1314 ; =FUN_020C1254
+ mov r1, #0x1
+ bx r12
+ .balign 4
+_020C1314: .word FUN_020C1254
+
+ arm_func_start FUN_020C1318
+FUN_020C1318: ; 0x020C1318
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x40]
+ bl FUN_020C029C
+ ldr r0, _020C1344 ; =0x021D26D8
+ mov r1, r4
+ bl FUN_020ADAB0
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C1344: .word 0x021D26D8
+
+ arm_func_start FUN_020C1348
+FUN_020C1348: ; 0x020C1348
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C13B4
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StopTimer
+ add r0, r4, #0x8
+ bl PM_DeletePreSleepCallback
+ add r0, r4, #0x14
+ bl PM_DeletePostSleepCallback
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x2
+ str r0, [r4, #0x24]
+ bl SND_GetCurrentCommandTag
+ mov r5, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r5
+ bl SND_WaitForCommandProc
+_020C13B4:
+ mov r0, r4
+ bl FUN_020C1318
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C13C4
+FUN_020C13C4: ; 0x020C13C4
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ str r1, [r7, #0x3c]
+ ldr r0, [r7, #0x48]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmleia sp!, {r4-r8,pc}
+_020C13E0: ; 0x020C13E0
+ ldr r4, _020C142C ; =0x021D2724
+ mov r8, #0x1
+_020C13E8:
+ add r0, r7, r5
+ ldrb r6, [r0, #0x4c]
+ ldr r1, [r7, #0x3c]
+ add r0, r4, r6, lsl #0x3
+ ldr r0, [r0, #0x4]
+ add r0, r1, r0
+ bl SND_CalcChannelVolume
+ mov r2, r0
+ mov r0, r8, lsl r6
+ and r1, r2, #0xff
+ mov r2, r2, asr #0x8
+ bl SND_SetChannelVolume
+ ldr r0, [r7, #0x48]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blt _020C13E8
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020C142C: .word 0x021D2724
+
+ arm_func_start FUN_020C1430
+FUN_020C1430: ; 0x020C1430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x24]
+ mov r1, r1, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ bl FUN_020C1348
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C1458
+FUN_020C1458: ; 0x020C1458
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StartTimer
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ ldmneia sp!, {r4,pc}
+_020C148C: ; 0x020C148C
+ add r0, r4, #0x8
+ bl PM_PrependPreSleepCallback
+ add r0, r4, #0x14
+ bl PM_AppendPostSleepCallback
+ ldr r0, [r4, #0x24]
+ orr r0, r0, #0x2
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C14AC
+FUN_020C14AC: ; 0x020C14AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ mov r10, r0
+ ldr r4, [r10, #0x24]
+ mov r9, r1
+ mov r1, r4, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ ldr r1, [sp, #0x4c]
+ str r2, [sp, #0x18]
+ mov r4, r3
+ str r1, [sp, #0x4c]
+ beq _020C14E0
+ bl FUN_020C1430
+_020C14E0:
+ ldr r0, [sp, #0x4c]
+ ldr r2, [r10, #0x48]
+ mov r0, r0, lsl #0x5
+ mul r1, r2, r0
+ mov r0, r4
+ bl _u32_div_f
+ ldr r1, [sp, #0x4c]
+ ldr r2, [sp, #0x48]
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x5
+ str r0, [r10, #0x28]
+ ldr r0, [r10, #0x28]
+ cmp r9, #0x1
+ moveq r0, r0, lsr #0x1
+ mul r0, r2, r0
+ ldr r1, [sp, #0x4c]
+ bl _u32_div_f
+ str r0, [sp, #0x1c]
+ bl FUN_020C02BC
+ str r0, [r10, #0x40]
+ ldr r0, [r10, #0x40]
+ cmp r0, #0x0
+ addlt sp, sp, #0x24
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r11,pc}
+_020C1544: ; 0x020C1544
+ ldr r0, [r10, #0x48]
+ mov r8, #0x0
+ cmp r0, #0x0
+ ble _020C15D4
+ ldr r0, [sp, #0x48]
+ mov r7, r0, lsl #0x5
+ ldr r6, _020C1668 ; =0x021D2724
+ mov r5, r8
+ mov r4, #0x7f
+ mov r11, #0x40
+ mov r0, #0x1
+ str r0, [sp, #0x20]
+_020C1574:
+ ldr r2, [r10, #0x28]
+ ldr r1, [sp, #0x18]
+ add r0, r10, r8
+ mla r1, r2, r8, r1
+ ldrb r0, [r0, #0x4c]
+ ldr r3, [sp, #0x20]
+ str r1, [r6, r0, lsl #0x3]
+ add r1, r6, r0, lsl #0x3
+ str r5, [r1, #0x4]
+ str r5, [sp, #0x0]
+ ldr r2, [r10, #0x28]
+ mov r1, r9
+ mov r2, r2, lsr #0x2
+ str r2, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r5, [sp, #0xc]
+ str r7, [sp, #0x10]
+ str r11, [sp, #0x14]
+ ldr r2, [r6, r0, lsl #0x3]
+ bl SND_SetupChannelPcm
+ ldr r0, [r10, #0x48]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blt _020C1574
+_020C15D4:
+ str r10, [sp, #0x0]
+ ldr r1, [sp, #0x1c]
+ ldr r0, [r10, #0x40]
+ ldr r3, _020C166C ; =FUN_020C1308
+ mov r2, r1
+ bl SND_SetupAlarm
+ ldr r0, _020C1670 ; =0x021D26D8
+ mov r1, r10
+ bl FUN_020ADBE8
+ ldr r0, [sp, #0x4c]
+ str r9, [r10, #0x20]
+ str r0, [r10, #0x2c]
+ ldr r1, [sp, #0x50]
+ ldr r0, [sp, #0x54]
+ str r1, [r10, #0x30]
+ str r0, [r10, #0x34]
+ mov r0, #0x0
+ str r0, [r10, #0x38]
+ str r0, [r10, #0x3c]
+ ldr r0, [r10, #0x24]
+ bic r0, r0, #0x1
+ orr r0, r0, #0x1
+ str r0, [r10, #0x24]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r2, #0x1
+ mov r0, r10
+ mov r1, #0x0
+ str r2, [r10, #0x2c]
+ bl FUN_020C1254
+ ldr r1, [sp, #0x4c]
+ mov r0, r4
+ str r1, [r10, #0x2c]
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C1668: .word 0x021D2724
+_020C166C: .word FUN_020C1308
+_020C1670: .word 0x021D26D8
+
+ arm_func_start FUN_020C1674
+FUN_020C1674: ; 0x020C1674
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C1688: ; 0x020C1688
+ bl FUN_020C0340
+_020C168C: ; 0x020C168C
+ mov r0, #0x0
+ str r0, [r4, #0x44]
+ str r0, [r4, #0x48]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C169C
+FUN_020C169C: ; 0x020C169C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, #0x0
+ mov r6, r0
+ mov r12, r4
+ cmp r5, #0x0
+ ble _020C16DC
+ mov r1, #0x1
+_020C16BC:
+ ldrb r3, [r2, r12]
+ add r0, r6, r12
+ strb r3, [r0, #0x4c]
+ ldrb r0, [r2, r12]
+ add r12, r12, #0x1
+ cmp r12, r5
+ orr r4, r4, r1, lsl r0
+ blt _020C16BC
+_020C16DC:
+ mov r0, r4
+ bl FUN_020C0370
+_020C16E4: ; 0x020C16E4
+ cmp r0, #0x0
+ moveq r0, #0x0
+ strne r5, [r6, #0x48]
+ strne r4, [r6, #0x44]
+ movne r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020C16FC
+FUN_020C16FC: ; 0x020C16FC
+ stmdb sp!, {r4,lr}
+ ldr r1, _020C176C ; =0x021D26D4
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020C172C
+ ldr r0, _020C1770 ; =0x021D26D8
+ mov r1, #0x0
+ bl FUN_020ADC74
+ ldr r0, _020C176C ; =0x021D26D4
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020C172C:
+ ldr r1, _020C1774 ; =FUN_020C1208
+ ldr r0, _020C1778 ; =FUN_020C1198
+ str r1, [r4, #0x8]
+ str r4, [r4, #0xc]
+ str r0, [r4, #0x14]
+ str r4, [r4, #0x18]
+ mov r0, #0x0
+ str r0, [r4, #0x44]
+ str r0, [r4, #0x48]
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x24]
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x2
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C176C: .word 0x021D26D4
+_020C1770: .word 0x021D26D8
+_020C1774: .word FUN_020C1208
+_020C1778: .word FUN_020C1198
+
+ arm_func_start FUN_020C177C
+FUN_020C177C: ; 0x020C177C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r4, [r7, #0x18]
+ ldr r0, [r7, #0x1c]
+ ldr r1, _020C186C ; =0x021D27A4
+ mul r0, r4, r0
+ ldr r3, [r7, #0xc]
+ ldr r2, [r7, #0x10]
+ ldr r1, [r1, #0x0]
+ add r6, r3, r0
+ cmp r1, #0x0
+ add r5, r2, r0
+ beq _020C180C
+ ldr r2, _020C1870 ; =0x021D27A8
+ mov r1, #0x14
+ ldr r2, [r2, #0x0]
+ ldr r3, _020C1874 ; =0x021D2820
+ mul r1, r2, r1
+ str r7, [r3, r1]
+ add r1, r3, r1
+ str r4, [r1, #0x4]
+ str r0, [r1, #0x8]
+ str r6, [r1, #0xc]
+ ldr r0, _020C1878 ; =0x021D27AC
+ mov r2, #0x0
+ str r5, [r1, #0x10]
+ bl OS_SendMessage
+ ldr r0, _020C1870 ; =0x021D27A8
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ cmp r1, #0x8
+ movge r1, #0x0
+ strge r1, [r0, #0x0]
+ b _020C1844
+_020C180C:
+ mov r0, r6
+ mov r1, r4
+ bl DC_InvalidateRange
+ mov r0, r5
+ mov r1, r4
+ bl DC_InvalidateRange
+ ldr r1, [r7, #0x38]
+ mov r0, r6
+ str r1, [sp, #0x0]
+ ldr r3, [r7, #0x8]
+ ldr r6, [r7, #0x34]
+ mov r1, r5
+ mov r2, r4
+ blx r6
+_020C1844:
+ ldr r0, [r7, #0x1c]
+ add r0, r0, #0x1
+ str r0, [r7, #0x1c]
+ ldr r1, [r7, #0x1c]
+ ldr r0, [r7, #0x30]
+ cmp r1, r0
+ movge r0, #0x0
+ strge r0, [r7, #0x1c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C186C: .word 0x021D27A4
+_020C1870: .word 0x021D27A8
+_020C1874: .word 0x021D2820
+_020C1878: .word 0x021D27AC
+
+ arm_func_start FUN_020C187C
+FUN_020C187C: ; 0x020C187C
+ stmdb sp!, {r4,lr}
+ ldr r4, _020C18F4 ; =0x021D27CC
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C1890: ; 0x020C1890
+ mov r0, #0x0
+ str r0, [r4, #0x1c]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x14]
+ bl MIi_CpuClear32
+ ldr r1, [r4, #0x10]
+ ldr r2, [r4, #0x14]
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ ldr r0, [r4, #0xc]
+ ldr r1, [r4, #0x14]
+ bl DC_FlushRange
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4, #0x14]
+ bl DC_FlushRange
+ ldr r1, [r4, #0x2c]
+ mov r3, #0x0
+ cmp r1, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r1
+ ldr r0, [r4, #0x24]
+ ldr r1, [r4, #0x28]
+ movlt r2, #0x0
+ bl SND_StartTimer
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C18F4: .word 0x021D27CC
+
+ arm_func_start FUN_020C18F8
+FUN_020C18F8:
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C194C ; =0x021D27CC
+ ldr r0, [r3, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C190C: ; 0x020C190C
+ ldr r1, [r3, #0x2c]
+ cmp r1, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r1
+ ldr r0, [r3, #0x24]
+ ldr r1, [r3, #0x28]
+ movlt r2, #0x0
+ mov r3, #0x0
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C194C: .word 0x021D27CC
+
+ arm_func_start FUN_020C1950
+FUN_020C1950: ; 0x020C1950
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020C1A3C ; =0x021D27CC
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020C196C: ; 0x020C196C
+ ldr r1, [r4, #0x2c]
+ mov r3, #0x0
+ cmp r1, #0x0
+ movge r7, #0x1
+ movlt r7, #0x0
+ cmp r7, #0x0
+ movne r0, #0x1
+ movne r2, r0, lsl r1
+ ldr r0, [r4, #0x24]
+ ldr r1, [r4, #0x28]
+ moveq r2, #0x0
+ bl SND_StopTimer
+_020C199C: ; 0x020C199C
+ cmp r7, #0x0
+ beq _020C19DC
+ bl SND_GetCurrentCommandTag
+ mov r5, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r5
+ bl SND_WaitForCommandProc
+ ldr r6, _020C1A40 ; =0x021D27AC
+ mov r5, #0x0
+_020C19C4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r5
+ bl OS_ReceiveMessage
+_020C19D4: ; 0x020C19D4
+ cmp r0, #0x0
+ bne _020C19C4
+_020C19DC:
+ ldr r0, [r4, #0x28]
+ cmp r0, #0x0
+ beq _020C19EC
+ bl FUN_020C0300
+_020C19EC:
+ ldr r0, [r4, #0x20]
+ cmp r0, #0x0
+ beq _020C19FC
+ bl FUN_020C0340
+_020C19FC:
+ cmp r7, #0x0
+ beq _020C1A0C
+ ldr r0, [r4, #0x2c]
+ bl FUN_020C029C
+_020C1A0C:
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x1
+ bne _020C1A2C
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ bl SND_SetOutputSelector
+_020C1A2C:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C1A3C: .word 0x021D27CC
+_020C1A40: .word 0x021D27AC
+
+ arm_func_start FUN_020C1A44
+FUN_020C1A44: ; 0x020C1A44
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ mov r10, r3
+ str r0, [sp, #0x18]
+ str r2, [sp, #0x20]
+ mov r2, #0x0
+ str r1, [sp, #0x1c]
+ mov r0, r1
+ mov r1, r10
+ ldr r9, [sp, #0x6c]
+ ldr r8, [sp, #0x74]
+ str r2, [sp, #0x2c]
+ mvn r6, #0x0
+ ldr r4, _020C1D90 ; =0x021D27CC
+ bl DC_FlushRange
+ ldr r0, [sp, #0x20]
+ mov r1, r10
+ bl DC_FlushRange
+ ldr r0, [sp, #0x60]
+ ldr r1, [sp, #0x70]
+ cmp r0, #0x1
+ moveq r7, #0x1
+ ldr r0, _020C1D94 ; =0x00FFB0FF
+ movne r7, #0x0
+ bl _s32_div_f
+ ldr r1, [sp, #0x84]
+ mov r11, r0
+ cmp r1, #0x0
+ beq _020C1B00
+ add r1, r11, #0x10
+ bic r11, r1, #0x1f
+ mov r2, r11, asr #0x5
+ mov r0, r10
+ cmp r7, #0x0
+ ldr r1, [sp, #0x80]
+ moveq r0, r10, lsr #0x1
+ str r2, [sp, #0x34]
+ bl _u32_div_f
+ ldr r1, [sp, #0x34]
+ mov r5, #0x20
+ mul r0, r1, r0
+ str r0, [sp, #0x30]
+ cmp r7, #0x0
+ ldr r0, [sp, #0x34]
+ moveq r5, r5, lsr #0x1
+ mul r0, r5, r0
+ mov r5, r0
+_020C1B00:
+ cmp r7, #0x0
+ movne r0, #0x0
+ strne r0, [sp, #0x28]
+ moveq r0, #0x1
+ streq r0, [sp, #0x28]
+ cmp r7, #0x0
+ movne r0, #0x1
+ strne r0, [sp, #0x24]
+ moveq r0, #0x0
+ streq r0, [sp, #0x24]
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x2
+ movne r0, #0xa
+ strne r0, [sp, #0x2c]
+ ldr r0, [sp, #0x84]
+ cmp r0, #0x0
+ beq _020C1B58
+ bl FUN_020C02BC
+ movs r6, r0
+ addmi sp, sp, #0x3c
+ movmi r0, #0x0
+ ldmmiia sp!, {r4-r11,pc}
+_020C1B58:
+ mov r0, #0x3
+ bl FUN_020C031C
+_020C1B60: ; 0x020C1B60
+ cmp r0, #0x0
+ bne _020C1B84
+ cmp r6, #0x0
+ blt _020C1B78
+ mov r0, r6
+ bl FUN_020C029C
+_020C1B78:
+ add sp, sp, #0x3c
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020C1B84:
+ mov r0, #0xa
+ bl FUN_020C0370
+_020C1B8C: ; 0x020C1B8C
+ cmp r0, #0x0
+ bne _020C1BB8
+ cmp r6, #0x0
+ blt _020C1BA4
+ mov r0, r6
+ bl FUN_020C029C
+_020C1BA4:
+ mov r0, #0x3
+ bl FUN_020C0300
+ add sp, sp, #0x3c
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020C1BB8:
+ mov r0, #0x0
+ mov r7, r10, lsr #0x2
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r8, [sp, #0x8]
+ str r0, [sp, #0xc]
+ cmp r9, #0x0
+ movne r3, #0x1
+ ldr r1, [sp, #0x78]
+ str r11, [sp, #0x10]
+ str r1, [sp, #0x14]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x1c]
+ moveq r3, #0x2
+ mov r0, #0x1
+ bl SND_SetupChannelPcm
+ ldr r1, [sp, #0x64]
+ str r9, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x24]
+ str r0, [sp, #0x8]
+ ldr r2, [sp, #0x1c]
+ mov r0, #0x0
+ mov r3, r7
+ bl SND_SetupCapture
+_020C1C20: ; 0x020C1C20
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r8, [sp, #0x8]
+ str r0, [sp, #0xc]
+ cmp r9, #0x0
+ movne r3, #0x1
+ ldr r2, [sp, #0x7c]
+ str r11, [sp, #0x10]
+ str r2, [sp, #0x14]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x20]
+ moveq r3, #0x2
+ mov r0, #0x3
+ bl SND_SetupChannelPcm
+ ldr r2, [sp, #0x64]
+ str r9, [sp, #0x0]
+ str r2, [sp, #0x4]
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x24]
+ str r0, [sp, #0x8]
+ ldr r2, [sp, #0x20]
+ mov r3, r7
+ mov r0, #0x1
+ bl SND_SetupCapture
+_020C1C84: ; 0x020C1C84
+ cmp r6, #0x0
+ blt _020C1CA8
+ ldr r2, [sp, #0x30]
+ ldr r3, _020C1D98 ; =FUN_020C177C
+ mov r1, r2
+ mov r0, r6
+ add r1, r1, r5
+ str r4, [sp, #0x0]
+ bl SND_SetupAlarm
+_020C1CA8:
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x1
+ bne _020C1CC8
+ mov r0, #0x1
+ mov r2, r0
+ mov r3, r0
+ mov r1, #0x2
+ bl SND_SetOutputSelector
+_020C1CC8:
+ cmp r6, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r6
+ ldr r0, [sp, #0x2c]
+ movlt r2, #0x0
+ mov r1, #0x3
+ mov r3, #0x0
+ bl SND_StartTimer
+ mov r0, #0x1
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x80]
+ str r0, [r4, #0x4]
+ mov r0, #0xa
+ str r0, [r4, #0x20]
+ ldr r0, [sp, #0x2c]
+ str r0, [r4, #0x24]
+ mov r0, #0x3
+ str r0, [r4, #0x28]
+ ldr r0, [sp, #0x60]
+ str r6, [r4, #0x2c]
+ str r0, [r4, #0x8]
+ ldr r0, [sp, #0x1c]
+ str r0, [r4, #0xc]
+ ldr r0, [sp, #0x20]
+ str r0, [r4, #0x10]
+ mov r0, r10
+ str r10, [r4, #0x14]
+ bl _u32_div_f
+ str r0, [r4, #0x18]
+ mov r1, #0x0
+ str r1, [r4, #0x1c]
+ ldr r0, [sp, #0x80]
+ ldr r1, [sp, #0x84]
+ str r0, [r4, #0x30]
+ ldr r0, [sp, #0x88]
+ str r1, [r4, #0x34]
+ str r0, [r4, #0x38]
+ add r0, r4, #0x3c
+ str r8, [r4, #0x50]
+ bl FUN_020C3E6C
+ add r0, r4, #0x3c
+ mov r1, r8, lsl #0x8
+ mov r2, #0x1
+ bl FUN_020C3E40
+_020C1D7C: ; 0x020C1D7C
+ mov r0, #0x0
+ str r0, [r4, #0x4c]
+ mov r0, #0x1
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C1D90: .word 0x021D27CC
+_020C1D94: .word 0x00FFB0FF
+_020C1D98: .word FUN_020C177C
+
+ arm_func_start FUN_020C1D9C
+FUN_020C1D9C: ; 0x020C1D9C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020C1E34 ; =0x021D27CC
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020C1DB8: ; 0x020C1DB8
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+_020C1DC8: ; 0x020C1DC8
+ add r4, r5, #0x3c
+ mov r0, r4
+ bl FUN_020C3DF4
+ ldr r0, [r5, #0x4c]
+ cmp r0, #0x0
+ beq _020C1DFC
+ mov r0, r4
+ bl FUN_020C3DDC
+_020C1DE8: ; 0x020C1DE8
+ cmp r0, #0x0
+ beq _020C1DFC
+ bl FUN_020C1950
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020C1DFC:
+ mov r0, r4
+ bl FUN_020C3E0C
+ ldr r1, [r5, #0x50]
+ mov r4, r0, asr #0x8
+ cmp r4, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020C1E18: ; 0x020C1E18
+ ldr r0, [r5, #0x24]
+ mov r1, r4
+ mov r2, #0x0
+ bl SND_SetChannelVolume
+ str r4, [r5, #0x50]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C1E34: .word 0x021D27CC
+
+ arm_func_start FUN_020C1E38
+FUN_020C1E38: ; 0x020C1E38
+ ldr r1, _020C1E50 ; =0x021D27A4
+ mov r2, #0x0
+ ldr r0, _020C1E54 ; =0x021D27CC
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C1E50: .word 0x021D27A4
+_020C1E54: .word 0x021D27CC
+
+ arm_func_start FUN_020C1E58
+FUN_020C1E58: ; 0x020C1E58
+ ldr r0, _020C1E64 ; =0x021D27CC
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C1E64: .word 0x021D27CC
+
+ arm_func_start FUN_020C1E68
+FUN_020C1E68: ; 0x020C1E68
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C1EA0 ; =0x021D27CC
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ bl FUN_020C1950
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C1EA0: .word 0x021D27CC
+
+ arm_func_start FUN_020C1EA4
+FUN_020C1EA4: ; 0x020C1EA4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x2c
+ mov r5, r0
+ mov r4, r1
+ mov r7, r2
+ mov r6, r3
+ bl FUN_020C1E68
+ ldr r0, _020C1F50 ; =0x021D27CC
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x2c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+_020C1ED8: ; 0x020C1ED8
+ mov r1, r5
+ mov r2, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+ str r7, [sp, #0x0]
+ mov r2, #0x0
+ str r2, [sp, #0x4]
+ str r2, [sp, #0x8]
+ mov r0, #0x1
+ str r0, [sp, #0xc]
+ str r6, [sp, #0x10]
+ mov r1, #0x7f
+ str r1, [sp, #0x14]
+ str r2, [sp, #0x18]
+ ldr r2, [sp, #0x40]
+ str r1, [sp, #0x1c]
+ ldr r1, [sp, #0x44]
+ str r2, [sp, #0x20]
+ ldr r12, [sp, #0x48]
+ str r1, [sp, #0x24]
+ mov r1, r5
+ mov r3, r4, lsr #0x1
+ add r2, r5, r4, lsr #0x1
+ str r12, [sp, #0x28]
+ bl FUN_020C1A44
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C1F50: .word 0x021D27CC
+
+ arm_func_start FUN_020C1F54
+FUN_020C1F54: ; 0x020C1F54
+ stmdb sp!, {r4,lr}
+ ldr r4, _020C1FA0 ; =0x021D27CC
+ mov r2, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C1F6C: ; 0x020C1F6C
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x0
+ ldmneia sp!, {r4,pc}
+_020C1F78: ; 0x020C1F78
+ cmp r2, #0x0
+ bne _020C1F88
+ bl FUN_020C1950
+ ldmia sp!, {r4,pc}
+_020C1F88:
+ add r0, r4, #0x3c
+ mov r1, #0x0
+ bl FUN_020C3E40
+ mov r0, #0x1
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C1FA0: .word 0x021D27CC
+
+ arm_func_start FUN_020C1FA4
+FUN_020C1FA4: ; 0x020C1FA4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _020C1FEC ; =0x021D27CC
+ mov r12, r0
+ ldr r0, [r3, #0x0]
+ mov r2, r1
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r3, #0x4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ add r0, r3, #0x3c
+ mov r1, r12, lsl #0x8
+ bl FUN_020C3E40
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C1FEC: .word 0x021D27CC
+
+ arm_func_start FUN_020C1FF0
+FUN_020C1FF0: ; 0x020C1FF0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x2c
+ mov r5, r0
+ mov r0, #0x0
+ mov r4, r1
+ mov r7, r2
+ mov r6, r3
+ bl FUN_020C1F54
+ ldr r0, _020C2098 ; =0x021D27CC
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x2c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+_020C2028: ; 0x020C2028
+ mov r1, r5
+ mov r2, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+ str r7, [sp, #0x0]
+ mov r0, #0x0
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r1, #0x1
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x40]
+ str r6, [sp, #0x10]
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ mov r1, #0x7f
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x24]
+ mov r1, r5
+ mov r3, r4, lsr #0x1
+ add r2, r5, r4, lsr #0x1
+ str r0, [sp, #0x28]
+ bl FUN_020C1A44
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C2098: .word 0x021D27CC
+
+ arm_func_start FUN_020C209C
+FUN_020C209C: ; 0x020C209C
+ mov r0, #0x0
+ str r0, [r2, #0x88]
+ bx lr
+
+ arm_func_start FUN_020C20A8
+FUN_020C20A8: ; 0x020C20A8
+ mov r0, #0x0
+ str r0, [r2, #0x84]
+ bx lr
+
+ arm_func_start FUN_020C20B4
+FUN_020C20B4: ; 0x020C20B4
+ mov r0, #0x0
+ str r0, [r2, #0x8c]
+ bx lr
+
+ arm_func_start FUN_020C20C0
+FUN_020C20C0: ; 0x020C20C0
+ ldr r2, _020C20D8 ; =0x021D28C0
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x84]
+ add r0, r2, r0, lsl #0x4
+ str r1, [r0, #0x14]
+ bx lr
+ .balign 4
+_020C20D8: .word 0x021D28C0
+
+ arm_func_start FUN_020C20DC
+FUN_020C20DC:
+ ldr r1, _020C2100 ; =0x021D28C0
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ movcs r0, #0x0
+ addcc r0, r2, r0, lsl #0x4
+ ldrcc r0, [r0, #0x14]
+ bx lr
+ .balign 4
+_020C2100: .word 0x021D28C0
+
+ arm_func_start FUN_020C2104
+FUN_020C2104:
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _020C2178 ; =0x021D28C0
+ mov r5, r2
+ ldr r4, [r4, #0x0]
+ mov r6, r1
+ ldr r2, [r4, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ mvncs r0, #0x0
+ ldmcsia sp!, {r4-r6,pc}
+_020C212C: ; 0x020C212C
+ add r1, r2, #0xc
+ add r1, r1, r0, lsl #0x4
+ ldr r0, [r1, #0x4]
+ ldr r1, [r1, #0x0]
+ sub r0, r0, r3
+ cmp r5, r0
+ movhi r5, r0
+ add r0, r4, #0x34
+ add r1, r1, r3
+ mov r2, #0x0
+ bl FS_SeekFile
+_020C2158: ; 0x020C2158
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2164: ; 0x020C2164
+ mov r1, r6
+ mov r2, r5
+ add r0, r4, #0x34
+ bl FS_ReadFile
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C2178: .word 0x021D28C0
+
+ arm_func_start FUN_020C217C
+FUN_020C217C: ; 0x020C217C
+ ldr r1, _020C21A0 ; =0x021D28C0
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ movcs r0, #0x0
+ addcc r0, r2, r0, lsl #0x4
+ ldrcc r0, [r0, #0x10]
+ bx lr
+ .balign 4
+_020C21A0: .word 0x021D28C0
+
+ arm_func_start FUN_020C21A4
+FUN_020C21A4: ; 0x020C21A4
+ ldr r1, _020C2204 ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x1c]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2204: .word 0x021D28C0
+
+ arm_func_start FUN_020C2208
+FUN_020C2208: ; 0x020C2208
+ ldr r1, _020C2268 ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x18]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2268: .word 0x021D28C0
+
+ arm_func_start FUN_020C226C
+FUN_020C226C:
+ ldr r1, _020C22CC ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x14]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C22CC: .word 0x021D28C0
+
+ arm_func_start FUN_020C22D0
+FUN_020C22D0: ; 0x020C22D0
+ ldr r1, _020C2330 ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x10]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2330: .word 0x021D28C0
+
+ arm_func_start FUN_020C2334
+FUN_020C2334:
+ ldr r1, _020C2394 ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0xc]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2394: .word 0x021D28C0
+
+ arm_func_start FUN_020C2398
+FUN_020C2398:
+ ldr r1, _020C23F8 ; =0x021D28C0
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x8]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C23F8: .word 0x021D28C0
+
+ arm_func_start FUN_020C23FC
+FUN_020C23FC: ; 0x020C23FC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020C2398
+_020C2408: ; 0x020C2408
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r0, #0x4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C241C
+FUN_020C241C: ; 0x020C241C
+ ldr r0, _020C2428 ; =0x021D28C0
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C2428: .word 0x021D28C0
+
+ arm_func_start FUN_020C242C
+FUN_020C242C: ; 0x020C242C
+ ldr r1, _020C2440 ; =0x021D28C0
+ ldr r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ mov r0, r2
+ bx lr
+ .balign 4
+_020C2440: .word 0x021D28C0
+
+ arm_func_start FUN_020C2444
+FUN_020C2444: ; 0x020C2444
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x30
+ bl MIi_CpuCopy32
+ ldr r0, [r5, #0x18]
+ mov r12, #0x0
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x8c]
+ ldr r0, [r5, #0x20]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x84]
+ ldr r0, [r5, #0x10]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x88]
+ ldr r2, [r5, #0x84]
+ ldr r0, [r2, #0x8]
+ cmp r0, #0x0
+ bls _020C24F0
+ mov r3, r12
+ mov r1, r12
+_020C24BC:
+ add r2, r2, #0xc
+ ldr r0, [r2, r3]
+ add r2, r2, r3
+ cmp r0, #0x0
+ moveq r0, r1
+ addne r0, r4, r0
+ str r0, [r2, #0x8]
+ ldr r2, [r5, #0x84]
+ add r12, r12, #0x1
+ ldr r0, [r2, #0x8]
+ add r3, r3, #0x10
+ cmp r12, r0
+ blo _020C24BC
+_020C24F0:
+ mov r1, #0x0
+ ldr r0, _020C2508 ; =0x021D28C0
+ str r1, [r5, #0x30]
+ str r5, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C2508: .word 0x021D28C0
+
+ arm_func_start FUN_020C250C
+FUN_020C250C:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ mov r5, r1
+ mov r1, #0x0
+ mov r4, r2
+ mov r2, r1
+ add r0, r6, #0x34
+ bl FS_SeekFile
+_020C2530: ; 0x020C2530
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2540: ; 0x020C2540
+ mov r1, r6
+ add r0, r6, #0x34
+ mov r2, #0x30
+ bl FS_ReadFile
+ cmp r0, #0x30
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+_020C2560: ; 0x020C2560
+ cmp r5, #0x0
+ beq _020C26E0
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r1, [r6, #0x1c]
+ ldr r2, _020C26EC ; =FUN_020C20B4
+ mov r0, r5
+ mov r3, r6
+ bl FUN_020C2958
+ str r0, [r6, #0x8c]
+ ldr r0, [r6, #0x8c]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C259C: ; 0x020C259C
+ ldr r1, [r6, #0x18]
+ add r0, r6, #0x34
+ mov r2, #0x0
+ bl FS_SeekFile
+_020C25AC: ; 0x020C25AC
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C25BC: ; 0x020C25BC
+ ldr r1, [r6, #0x8c]
+ ldr r2, [r6, #0x1c]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x1c]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+_020C25E0: ; 0x020C25E0
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r1, [r6, #0x24]
+ ldr r2, _020C26F0 ; =FUN_020C20A8
+ mov r0, r5
+ mov r3, r6
+ bl FUN_020C2958
+ str r0, [r6, #0x84]
+ ldr r0, [r6, #0x84]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2614: ; 0x020C2614
+ ldr r1, [r6, #0x20]
+ add r0, r6, #0x34
+ mov r2, #0x0
+ bl FS_SeekFile
+_020C2624: ; 0x020C2624
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2634: ; 0x020C2634
+ ldr r1, [r6, #0x84]
+ ldr r2, [r6, #0x24]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x24]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+_020C2658: ; 0x020C2658
+ cmp r4, #0x0
+ beq _020C26E0
+ ldr r1, [r6, #0x14]
+ cmp r1, #0x0
+ beq _020C26E0
+ mov r4, #0x0
+ ldr r2, _020C26F4 ; =FUN_020C209C
+ mov r0, r5
+ mov r3, r6
+ str r4, [sp, #0x0]
+ bl FUN_020C2958
+ str r0, [r6, #0x88]
+ ldr r0, [r6, #0x88]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, r4
+ ldmeqia sp!, {r4-r6,pc}
+_020C269C: ; 0x020C269C
+ ldr r1, [r6, #0x10]
+ add r0, r6, #0x34
+ mov r2, r4
+ bl FS_SeekFile
+_020C26AC: ; 0x020C26AC
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, r4
+ ldmeqia sp!, {r4-r6,pc}
+_020C26BC: ; 0x020C26BC
+ ldr r1, [r6, #0x88]
+ ldr r2, [r6, #0x14]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x14]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, r4
+ ldmneia sp!, {r4-r6,pc}
+_020C26E0:
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C26EC: .word FUN_020C20B4
+_020C26F0: .word FUN_020C20A8
+_020C26F4: .word FUN_020C209C
+
+ arm_func_start FUN_020C26F8
+FUN_020C26F8: ; 0x020C26F8
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r12, #0x0
+ str r12, [r6, #0x8c]
+ str r12, [r6, #0x84]
+ add r0, r6, #0x7c
+ mov r5, r2
+ mov r4, r3
+ str r12, [r6, #0x88]
+ bl FS_ConvertPathToFileID
+_020C2720: ; 0x020C2720
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2728: ; 0x020C2728
+ add r0, r6, #0x34
+ bl FS_InitFile
+ add r1, r6, #0x7c
+ add r0, r6, #0x34
+ ldmia r1, {r1-r2}
+ bl FS_OpenFileFast
+_020C2740: ; 0x020C2740
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+_020C2748: ; 0x020C2748
+ mov r3, #0x1
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ str r3, [r6, #0x30]
+ bl FUN_020C250C
+_020C2760: ; 0x020C2760
+ cmp r0, #0x0
+ ldrne r0, _020C2770 ; =0x021D28C0
+ strne r6, [r0, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C2770: .word 0x021D28C0
+
+ arm_func_start FUN_020C2774
+FUN_020C2774: ; 0x020C2774
+ stmdb sp!, {r4,lr}
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C2794
+FUN_020C2794:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x0]
+ mov r1, #0x14
+ mov r2, #0x4
+ bl FUN_020AE638
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020C27C0: ; 0x020C27C0
+ bl FUN_020C2818
+ mov r1, r4
+ add r0, r5, #0x4
+ bl FUN_020ADBE8
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C27DC
+FUN_020C27DC:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ add r0, r5, #0x4
+ mov r1, #0xc
+ bl FUN_020ADC74
+ mov r0, r5
+ str r4, [r5, #0x0]
+ bl FUN_020C2794
+_020C2804: ; 0x020C2804
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C2818
+FUN_020C2818: ; 0x020C2818
+ ldr ip, _020C2824 ; =FUN_020ADC74
+ mov r1, #0x0
+ bx r12
+ .balign 4
+_020C2824: .word FUN_020ADC74
+
+ arm_func_start FUN_020C2828
+FUN_020C2828: ; 0x020C2828
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r7, #0x0
+ movs r9, r1
+ mov r10, r0
+ mov r6, r7
+ bne _020C2850
+ bl FUN_020C29C0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020C2850:
+ ldrh r0, [r10, #0xc]
+ cmp r9, r0
+ bge _020C28D8
+ mov r11, r7
+ add r5, r10, #0x4
+ mov r4, #0x1
+_020C2868:
+ mov r0, r5
+ mov r1, r11
+ bl FUN_020ADA84
+ mov r1, r7
+ mov r8, r0
+ bl FUN_020ADA84
+ movs r7, r0
+ beq _020C28C0
+_020C2888:
+ ldr r12, [r7, #0xc]
+ cmp r12, #0x0
+ beq _020C28AC
+ ldr r1, [r7, #0x8]
+ ldr r2, [r7, #0x10]
+ ldr r3, [r7, #0x14]
+ add r0, r7, #0x20
+ blx r12
+ mov r6, r4
+_020C28AC:
+ mov r0, r8
+ mov r1, r7
+ bl FUN_020ADA84
+ movs r7, r0
+ bne _020C2888
+_020C28C0:
+ mov r0, r5
+ mov r1, r8
+ bl FUN_020ADAB0
+ ldrh r0, [r10, #0xc]
+ cmp r9, r0
+ blt _020C2868
+_020C28D8:
+ ldr r0, [r10, #0x0]
+ mov r1, r9
+ bl FUN_020AE554
+_020C28E4: ; 0x020C28E4
+ cmp r6, #0x0
+ beq _020C28F0
+ bl FUN_020C2774
+_020C28F0:
+ ldrh r1, [r10, #0xc]
+ ldr r0, [r10, #0x0]
+ bl FUN_020AE5B0
+ mov r0, r10
+ bl FUN_020C2794
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020C290C
+FUN_020C290C: ; 0x020C290C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrh r1, [r4, #0xc]
+ ldr r0, [r4, #0x0]
+ bl FUN_020AE5B0
+_020C2920: ; 0x020C2920
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C292C: ; 0x020C292C
+ mov r0, r4
+ bl FUN_020C2794
+_020C2934: ; 0x020C2934
+ cmp r0, #0x0
+ ldrneh r0, [r4, #0xc]
+ subne r0, r0, #0x1
+ ldmneia sp!, {r4,pc}
+_020C2944: ; 0x020C2944
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl FUN_020AE554
+_020C2950: ; 0x020C2950
+ mvn r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C2958
+FUN_020C2958: ; 0x020C2958
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r8, r0
+ add r0, r7, #0x1f
+ bic r1, r0, #0x1f
+ mov r6, r2
+ ldr r0, [r8, #0x0]
+ add r1, r1, #0x20
+ mov r2, #0x20
+ mov r5, r3
+ bl FUN_020AE638
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C2990: ; 0x020C2990
+ add r0, r8, #0x4
+ mov r1, #0x0
+ bl FUN_020ADA84
+ str r7, [r4, #0x8]
+ str r6, [r4, #0xc]
+ ldr r2, [sp, #0x18]
+ str r5, [r4, #0x10]
+ mov r1, r4
+ str r2, [r4, #0x14]
+ bl FUN_020ADBE8
+ add r0, r4, #0x20
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C29C0
+FUN_020C29C0:
+ stmdb sp!, {r4-r10,lr}
+ mov r8, r0
+ mov r5, #0x0
+ mov r1, r5
+ add r0, r8, #0x4
+ bl FUN_020ADA84
+ movs r7, r0
+ beq _020C2A58
+ add r9, r8, #0x4
+ mov r10, #0x1
+ mov r4, r5
+_020C29EC:
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020ADA84
+ movs r6, r0
+ beq _020C2A38
+_020C2A00:
+ ldr r12, [r6, #0xc]
+ cmp r12, #0x0
+ beq _020C2A24
+ ldr r1, [r6, #0x8]
+ ldr r2, [r6, #0x10]
+ ldr r3, [r6, #0x14]
+ add r0, r6, #0x20
+ blx r12
+ mov r5, r10
+_020C2A24:
+ mov r0, r7
+ mov r1, r6
+ bl FUN_020ADA84
+ movs r6, r0
+ bne _020C2A00
+_020C2A38:
+ mov r0, r9
+ mov r1, r7
+ bl FUN_020ADAB0
+ mov r0, r9
+ mov r1, r4
+ bl FUN_020ADA84
+ movs r7, r0
+ bne _020C29EC
+_020C2A58:
+ ldr r0, [r8, #0x0]
+ mov r1, #0x3
+ bl FUN_020AE600
+_020C2A64: ; 0x020C2A64
+ cmp r5, #0x0
+ beq _020C2A70
+ bl FUN_020C2774
+_020C2A70:
+ mov r0, r8
+ bl FUN_020C2794
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start FUN_020C2A7C
+FUN_020C2A7C: ; 0x020C2A7C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FUN_020C29C0
+_020C2A88: ; 0x020C2A88
+ ldr r0, [r4, #0x0]
+ bl thunk_FUN_020adc8c_2
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C2A94
+FUN_020C2A94:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ add r2, r0, #0x3
+ add r0, r0, r1
+ bic r5, r2, #0x3
+ cmp r5, r0
+ addhi sp, sp, #0x4
+ movhi r0, #0x0
+ ldmhiia sp!, {r4-r5,pc}
+_020C2AB8: ; 0x020C2AB8
+ sub r1, r0, r5
+ cmp r1, #0x10
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,pc}
+_020C2ACC: ; 0x020C2ACC
+ add r0, r5, #0x10
+ sub r1, r1, #0x10
+ mov r2, #0x0
+ bl FUN_020AE684
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020C2AEC: ; 0x020C2AEC
+ mov r0, r5
+ mov r1, r4
+ bl FUN_020C27DC
+_020C2AF8: ; 0x020C2AF8
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, r5
+ ldmneia sp!, {r4-r5,pc}
+_020C2B08: ; 0x020C2B08
+ mov r0, r4
+ bl thunk_FUN_020adc8c_2
+_020C2B10: ; 0x020C2B10
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C2B1C
+FUN_020C2B1C:
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x20
+ mov r8, r0
+ add r0, sp, #0x8
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r4, [sp, #0x40]
+ bl SND_GetFirstInstDataPos
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+ cmp r7, #0x0
+ add r2, sp, #0x0
+ addeq sp, sp, #0x20
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020C2B64: ; 0x020C2B64
+ add r1, sp, #0x10
+ mov r0, r7
+ bl SND_GetNextInstData
+_020C2B70: ; 0x020C2B70
+ cmp r0, #0x0
+ beq _020C2BD4
+ add r10, sp, #0x10
+ add r9, sp, #0x0
+_020C2B80:
+ ldrb r0, [sp, #0x10]
+ cmp r0, #0x1
+ bne _020C2BBC
+ ldrh r0, [sp, #0x14]
+ cmp r6, r0
+ bne _020C2BBC
+ ldrh r1, [sp, #0x12]
+ mov r0, r8
+ mov r2, r5
+ mov r3, r4
+ bl FUN_020C2BE0
+_020C2BAC: ; 0x020C2BAC
+ cmp r0, #0x0
+ addeq sp, sp, #0x20
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020C2BBC:
+ mov r0, r7
+ mov r1, r10
+ mov r2, r9
+ bl SND_GetNextInstData
+_020C2BCC: ; 0x020C2BCC
+ cmp r0, #0x0
+ bne _020C2B80
+_020C2BD4:
+ mov r0, #0x1
+ add sp, sp, #0x20
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start FUN_020C2BE0
+FUN_020C2BE0:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl SND_GetWaveDataAddress
+_020C2BFC: ; 0x020C2BFC
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r9,pc}
+_020C2C0C: ; 0x020C2C0C
+ mov r0, r7
+ bl SND_GetWaveDataCount
+ ldr r1, [r7, #0x38]
+ sub r0, r0, #0x1
+ add r1, r1, r6
+ add r1, r7, r1, lsl #0x2
+ cmp r6, r0
+ ldrcc r0, [r1, #0x40]
+ ldr r8, [r1, #0x3c]
+ ldrcs r0, [r7, #0x8]
+ cmp r4, #0x0
+ sub r9, r0, r8
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020C2C48: ; 0x020C2C48
+ ldr r2, _020C2CBC ; =FUN_020C2CC0
+ mov r0, r4
+ mov r3, r7
+ add r1, r9, #0x20
+ str r6, [sp, #0x0]
+ bl FUN_020C2958
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020C2C70: ; 0x020C2C70
+ mov r0, r5
+ mov r1, r4
+ mov r2, r9
+ mov r3, r8
+ bl FUN_020C2104
+_020C2C84: ; 0x020C2C84
+ cmp r9, r0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+_020C2C94: ; 0x020C2C94
+ mov r0, r4
+ mov r1, r9
+ bl DC_StoreRange
+ mov r0, r7
+ mov r1, r6
+ mov r2, r4
+ bl SND_SetWaveDataAddress
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C2CBC: .word FUN_020C2CC0
+
+ arm_func_start FUN_020C2CC0
+FUN_020C2CC0: ; 0x020C2CC0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r7, r0
+ mov r4, r3
+ mov r6, r1
+ mov r0, r5
+ mov r1, r4
+ bl SND_GetWaveDataAddress
+_020C2CE4: ; 0x020C2CE4
+ cmp r7, r0
+ bne _020C2CFC
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0x0
+ bl SND_SetWaveDataAddress
+_020C2CFC:
+ mov r0, r7
+ add r1, r7, r6
+ bl SND_InvalidateWaveData
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020C2D10
+FUN_020C2D10: ; 0x020C2D10
+ stmdb sp!, {r4,lr}
+ mov r1, r2
+ mov r4, r0
+ mov r2, r3
+ bl FUN_020C2DD0
+ mov r0, r4
+ bl SND_DestroyWaveArc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C2D30
+FUN_020C2D30: ; 0x020C2D30
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl FUN_020C2DD0
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateWaveData
+ mov r0, r5
+ bl SND_DestroyWaveArc
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C2D68
+FUN_020C2D68: ; 0x020C2D68
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl FUN_020C2DD0
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateBankData
+ mov r0, r5
+ bl SND_DestroyBank
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C2DA0
+FUN_020C2DA0: ; 0x020C2DA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl FUN_020C2DD0
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateSeqData
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C2DD0
+FUN_020C2DD0: ; 0x020C2DD0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs r5, r1
+ mov r7, r0
+ mov r6, r2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020C2DEC: ; 0x020C2DEC
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, r5
+ bl FUN_020C242C
+ mov r5, r0
+ mov r0, r6
+ bl FUN_020C20DC
+_020C2E08: ; 0x020C2E08
+ cmp r7, r0
+ bne _020C2E1C
+ mov r0, r6
+ mov r1, #0x0
+ bl FUN_020C20C0
+_020C2E1C:
+ mov r0, r5
+ bl FUN_020C242C
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020C2E34
+FUN_020C2E34: ; 0x020C2E34
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ bl FUN_020C20DC
+ movs r6, r0
+ bne _020C2F40
+ ldr r1, _020C2F4C ; =0x021D28C4
+ mov r0, r9
+ mov r2, #0x3c
+ mov r3, #0x0
+ bl FUN_020C2104
+ cmp r0, #0x3c
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+_020C2E78: ; 0x020C2E78
+ ldr r0, _020C2F4C ; =0x021D28C4
+ cmp r8, #0x0
+ ldr r0, [r0, #0x38]
+ addeq sp, sp, #0x4
+ mov r4, r0, lsl #0x2
+ mov r0, r4, lsl #0x1
+ add r5, r0, #0x3c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020C2E9C: ; 0x020C2E9C
+ cmp r7, #0x0
+ moveq r3, #0x0
+ beq _020C2EB0
+ bl FUN_020C241C
+ mov r3, r0
+_020C2EB0:
+ ldr r2, _020C2F50 ; =FUN_020C2D10
+ mov r0, r8
+ add r1, r5, #0x20
+ str r9, [sp, #0x0]
+ bl FUN_020C2958
+ movs r6, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+_020C2ED4: ; 0x020C2ED4
+ mov r0, r9
+ mov r1, r6
+ add r2, r4, #0x3c
+ mov r3, #0x0
+ bl FUN_020C2104
+ add r1, r4, #0x3c
+ cmp r0, r1
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+_020C2EFC: ; 0x020C2EFC
+ ldr r1, [r6, #0x38]
+ add r0, r6, #0x3c
+ mov r2, r4
+ add r1, r0, r1, lsl #0x2
+ bl MI_CpuCopy8
+ mov r2, r4
+ add r0, r6, #0x3c
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r5
+ bl DC_StoreRange
+_020C2F2C: ; 0x020C2F2C
+ cmp r7, #0x0
+ beq _020C2F40
+ mov r0, r9
+ mov r1, r6
+ bl FUN_020C20C0
+_020C2F40:
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C2F4C: .word 0x021D28C4
+_020C2F50: .word FUN_020C2D10
+
+ arm_func_start FUN_020C2F54
+FUN_020C2F54:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_020C20DC
+ movs r4, r0
+ bne _020C2FBC
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C2F88
+ bl FUN_020C241C
+ mov r2, r0
+_020C2F88:
+ ldr r1, _020C2FC8 ; =FUN_020C2D30
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl FUN_020C3134
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C2FBC
+ cmp r4, #0x0
+ beq _020C2FBC
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020C20C0
+_020C2FBC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C2FC8: .word FUN_020C2D30
+
+ arm_func_start FUN_020C2FCC
+FUN_020C2FCC: ; 0x020C2FCC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_020C20DC
+ movs r4, r0
+ bne _020C3034
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C3000
+ bl FUN_020C241C
+ mov r2, r0
+_020C3000:
+ ldr r1, _020C3040 ; =FUN_020C2D68
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl FUN_020C3134
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C3034
+ cmp r4, #0x0
+ beq _020C3034
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020C20C0
+_020C3034:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3040: .word FUN_020C2D68
+
+ arm_func_start FUN_020C3044
+FUN_020C3044:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_020C20DC
+ movs r4, r0
+ bne _020C30AC
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C3078
+ bl FUN_020C241C
+ mov r2, r0
+_020C3078:
+ ldr r1, _020C30B8 ; =FUN_020C2DA0
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl FUN_020C3134
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C30AC
+ cmp r4, #0x0
+ beq _020C30AC
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020C20C0
+_020C30AC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C30B8: .word FUN_020C2DA0
+
+ arm_func_start FUN_020C30BC
+FUN_020C30BC:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_020C20DC
+ movs r4, r0
+ bne _020C3124
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C30F0
+ bl FUN_020C241C
+ mov r2, r0
+_020C30F0:
+ ldr r1, _020C3130 ; =FUN_020C2DA0
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl FUN_020C3134
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C3124
+ cmp r4, #0x0
+ beq _020C3124
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020C20C0
+_020C3124:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3130: .word FUN_020C2DA0
+
+ arm_func_start FUN_020C3134
+FUN_020C3134: ; 0x020C3134
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r4, r3
+ bl FUN_020C217C
+ movs r5, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C3160: ; 0x020C3160
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C3174: ; 0x020C3174
+ mov r2, r7
+ mov r3, r6
+ add r1, r5, #0x20
+ str r4, [sp, #0x0]
+ bl FUN_020C2958
+ movs r4, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C3198: ; 0x020C3198
+ mov r0, r8
+ mov r1, r4
+ mov r2, r5
+ mov r3, #0x0
+ bl FUN_020C2104
+_020C31AC: ; 0x020C31AC
+ cmp r5, r0
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r8,pc}
+_020C31BC: ; 0x020C31BC
+ mov r0, r4
+ mov r1, r5
+ bl DC_StoreRange
+ mov r0, r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C31D4
+FUN_020C31D4:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl FUN_020C226C
+_020C31E8: ; 0x020C31E8
+ cmp r0, #0x0
+ moveq r0, #0x5
+ ldmeqia sp!, {r4-r6,pc}
+_020C31F4: ; 0x020C31F4
+ ands r1, r6, #0x4
+ beq _020C324C
+ ldrb r1, [r0, #0x3]
+ ands r1, r1, #0x1
+ beq _020C3224
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r0, r0, lsl #0x8
+ mov r2, r4
+ mov r0, r0, lsr #0x8
+ bl FUN_020C2E34
+ b _020C323C
+_020C3224:
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r0, r0, lsl #0x8
+ mov r2, r4
+ mov r0, r0, lsr #0x8
+ bl FUN_020C2F54
+_020C323C:
+ cmp r0, #0x0
+ bne _020C325C
+ mov r0, #0x9
+ ldmia sp!, {r4-r6,pc}
+_020C324C:
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x8
+ bl FUN_020C20DC
+_020C325C:
+ ldr r1, [sp, #0x10]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020C3270
+FUN_020C3270:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r1
+ mov r9, r2
+ mov r11, r3
+ bl FUN_020C22D0
+ movs r8, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x4
+ ldmeqia sp!, {r4-r11,pc}
+_020C3298: ; 0x020C3298
+ ands r0, r10, #0x2
+ beq _020C32C4
+ ldr r0, [r8, #0x0]
+ mov r1, r9
+ mov r2, r11
+ bl FUN_020C2FCC
+ movs r7, r0
+ bne _020C32D0
+ add sp, sp, #0xc
+ mov r0, #0x8
+ ldmia sp!, {r4-r11,pc}
+_020C32C4:
+ ldr r0, [r8, #0x0]
+ bl FUN_020C20DC
+ mov r7, r0
+_020C32D0:
+ and r5, r10, #0x4
+ mov r6, #0x0
+_020C32D8:
+ add r0, r8, r6, lsl #0x1
+ ldrh r0, [r0, #0x4]
+ ldr r1, _020C33B4 ; =0x0000FFFF
+ cmp r0, r1
+ beq _020C3390
+ bl FUN_020C226C
+ movs r4, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x5
+ ldmeqia sp!, {r4-r11,pc}
+_020C3300: ; 0x020C3300
+ add r0, sp, #0x4
+ str r0, [sp, #0x0]
+ add r0, r8, r6, lsl #0x1
+ ldrh r0, [r0, #0x4]
+ mov r1, r10
+ mov r2, r9
+ mov r3, r11
+ bl FUN_020C31D4
+_020C3320: ; 0x020C3320
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,pc}
+_020C332C: ; 0x020C332C
+ ldrb r0, [r4, #0x3]
+ ands r0, r0, #0x1
+ beq _020C3370
+ cmp r5, #0x0
+ beq _020C3370
+ str r9, [sp, #0x0]
+ ldr r1, [r4, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r3, r1, lsl #0x8
+ mov r1, r7
+ mov r2, r6
+ mov r3, r3, lsr #0x8
+ bl FUN_020C2B1C
+_020C3360: ; 0x020C3360
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x9
+ ldmeqia sp!, {r4-r11,pc}
+_020C3370:
+ cmp r7, #0x0
+ beq _020C3390
+ ldr r2, [sp, #0x4]
+ cmp r2, #0x0
+ beq _020C3390
+ mov r0, r7
+ mov r1, r6
+ bl SND_AssignWaveArc
+_020C3390:
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ blt _020C32D8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ strne r7, [r0, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C33B4: .word 0x0000FFFF
+
+ arm_func_start FUN_020C33B8
+FUN_020C33B8:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl FUN_020C2334
+_020C33CC: ; 0x020C33CC
+ cmp r0, #0x0
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r6,pc}
+_020C33D8: ; 0x020C33D8
+ ands r1, r6, #0x8
+ beq _020C3400
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r2, r4
+ bl FUN_020C3044
+_020C33F0: ; 0x020C33F0
+ cmp r0, #0x0
+ bne _020C3408
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,pc}
+_020C3400:
+ ldr r0, [r0, #0x0]
+ bl FUN_020C20DC
+_020C3408:
+ ldr r1, [sp, #0x10]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020C341C
+FUN_020C341C:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl FUN_020C2398
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r7,pc}
+_020C3444: ; 0x020C3444
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldrh r0, [r4, #0x4]
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ bl FUN_020C3270
+_020C3460: ; 0x020C3460
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,pc}
+_020C346C: ; 0x020C346C
+ ands r0, r7, #0x1
+ beq _020C3498
+ ldr r0, [r4, #0x0]
+ mov r1, r6
+ mov r2, r5
+ bl FUN_020C30BC
+_020C3484: ; 0x020C3484
+ cmp r0, #0x0
+ bne _020C34A0
+ add sp, sp, #0x4
+ mov r0, #0x6
+ ldmia sp!, {r4-r7,pc}
+_020C3498:
+ ldr r0, [r4, #0x0]
+ bl FUN_020C20DC
+_020C34A0:
+ ldr r1, [sp, #0x18]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020C34B8
+FUN_020C34B8:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r9, r1
+ bl FUN_020C21A4
+ movs r8, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,pc}
+_020C34D8: ; 0x020C34D8
+ ldr r0, [r8, #0x0]
+ mov r7, #0x0
+ cmp r0, #0x0
+ bls _020C35D4
+ add r6, r8, #0x4
+ str r7, [sp, #0x4]
+ mov r11, r7
+ mov r10, r7
+ mov r5, r7
+ mov r4, #0x1
+_020C3500:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020C35C0
+_020C3510:
+ b _020C3520
+_020C3514:
+ b _020C3570
+_020C3518:
+ b _020C3598
+_020C351C:
+ b _020C3548
+_020C3520:
+ str r5, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl FUN_020C341C
+_020C3538: ; 0x020C3538
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3548:
+ str r10, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl FUN_020C33B8
+_020C3560: ; 0x020C3560
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3570:
+ str r11, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl FUN_020C3270
+_020C3588: ; 0x020C3588
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3598:
+ ldr r0, [sp, #0x4]
+ mov r2, r9
+ str r0, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r3, r4
+ bl FUN_020C31D4
+_020C35B4: ; 0x020C35B4
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,pc}
+_020C35C0:
+ ldr r0, [r8, #0x0]
+ add r7, r7, #0x1
+ cmp r7, r0
+ add r6, r6, #0x8
+ blo _020C3500
+_020C35D4:
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start FUN_020C35E0
+FUN_020C35E0: ; 0x020C35E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl FUN_020C341C
+_020C35F8: ; 0x020C35F8
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C360C
+FUN_020C360C: ; 0x020C360C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl FUN_020C31D4
+_020C362C: ; 0x020C362C
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C3640
+FUN_020C3640: ; 0x020C3640
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl FUN_020C3270
+_020C3660: ; 0x020C3660
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C3674
+FUN_020C3674: ; 0x020C3674
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl FUN_020C341C
+_020C3694: ; 0x020C3694
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C36A8
+FUN_020C36A8: ; 0x020C36A8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FUN_020C34B8
+_020C36B4: ; 0x020C36B4
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C36C8
+FUN_020C36C8: ; 0x020C36C8
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r2
+ mov r2, r3
+ ldr r6, [sp, #0x20]
+ mov r4, r0
+ mov r8, r1
+ bl FUN_020C0AF4
+ movs r5, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C36F8: ; 0x020C36F8
+ mov r0, r8
+ mov r1, r5
+ bl FUN_020C09B0
+ add r12, sp, #0x4
+ mov r2, r0
+ mov r0, r7
+ mov r1, #0x6
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl FUN_020C3270
+_020C3720: ; 0x020C3720
+ cmp r0, #0x0
+ beq _020C373C
+ mov r0, r5
+ bl thunk_FUN_020c077c
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C373C:
+ ldr r12, [sp, #0x24]
+ ldr r2, [r6, #0x0]
+ ldr r1, [r12, #0x18]
+ ldr r3, [sp, #0x4]
+ mov r0, r5
+ add r1, r12, r1
+ bl FUN_020C0A90
+ ldrb r1, [r6, #0x6]
+ mov r0, r4
+ bl FUN_020C0F30
+ ldrb r1, [r6, #0x7]
+ mov r0, r4
+ bl FUN_020C0ECC
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x2c]
+ mov r0, r4
+ bl FUN_020C0E38
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C378C
+FUN_020C378C: ; 0x020C378C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r8, r2
+ mov r2, r3
+ ldr r5, [sp, #0x28]
+ mov r6, r0
+ mov r7, r1
+ bl FUN_020C0AF4
+ movs r4, r0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C37BC: ; 0x020C37BC
+ mov r0, r7
+ mov r1, r4
+ bl FUN_020C09B0
+ mov r7, r0
+ add r12, sp, #0x8
+ mov r0, r8
+ mov r2, r7
+ mov r1, #0x6
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl FUN_020C3270
+_020C37E8: ; 0x020C37E8
+ cmp r0, #0x0
+ beq _020C3804
+ mov r0, r4
+ bl thunk_FUN_020c077c
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C3804:
+ ldr r0, [sp, #0x2c]
+ add r12, sp, #0x4
+ mov r2, r7
+ mov r1, #0x1
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl FUN_020C341C
+_020C3820: ; 0x020C3820
+ cmp r0, #0x0
+ beq _020C383C
+ mov r0, r4
+ bl thunk_FUN_020c077c
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C383C:
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [r2, #0x18]
+ mov r0, r4
+ add r1, r2, r1
+ mov r2, #0x0
+ bl FUN_020C0A90
+ ldrb r1, [r5, #0x6]
+ mov r0, r6
+ bl FUN_020C0F30
+ ldrb r1, [r5, #0x7]
+ mov r0, r6
+ bl FUN_020C0ECC
+ ldr r1, [sp, #0x2c]
+ mov r0, r6
+ bl FUN_020C0E60
+ mov r0, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C3888
+FUN_020C3888: ; 0x020C3888
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r6, r1
+ mov r7, r0
+ mov r0, r6
+ mov r5, r2
+ bl FUN_020C2334
+_020C38A4: ; 0x020C38A4
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C38B4: ; 0x020C38B4
+ ldr r0, [r0, #0x0]
+ bl FUN_020C20DC
+ movs r4, r0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C38CC: ; 0x020C38CC
+ mov r1, r5
+ bl FUN_020C3D9C
+_020C38D4: ; 0x020C38D4
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C38E4: ; 0x020C38E4
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str r6, [sp, #0x8]
+ str r5, [sp, #0xc]
+ ldrb r1, [r0, #0x9]
+ ldrh r2, [r0, #0x4]
+ ldrb r3, [r0, #0x8]
+ mov r0, r7
+ bl FUN_020C36C8
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020C3910
+FUN_020C3910: ; 0x020C3910
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ ldr r0, [sp, #0x20]
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl FUN_020C2398
+_020C3930: ; 0x020C3930
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+_020C3940: ; 0x020C3940
+ cmp r4, #0x0
+ ldrltb r4, [r0, #0x8]
+ cmp r5, #0x0
+ ldrlth r5, [r0, #0x4]
+ cmp r6, #0x0
+ ldrltb r6, [r0, #0x9]
+ ldr r12, [sp, #0x20]
+ mov r2, r5
+ str r0, [sp, #0x0]
+ mov r0, r7
+ mov r1, r6
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl FUN_020C378C
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start FUN_020C3980
+FUN_020C3980: ; 0x020C3980
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r4, r1
+ mov r5, r0
+ mov r0, r4
+ bl FUN_020C2398
+_020C3998: ; 0x020C3998
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+_020C39A8: ; 0x020C39A8
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ ldrb r1, [r0, #0x9]
+ ldrh r2, [r0, #0x4]
+ ldrb r3, [r0, #0x8]
+ mov r0, r5
+ bl FUN_020C378C
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start FUN_020C39CC
+FUN_020C39CC: ; 0x020C39CC
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r0
+ bl FUN_020C241C
+ mov r5, #0x0
+ mov r7, r5
+_020C39E0:
+ mov r0, r5
+ bl FUN_020C2208
+ movs r4, r0
+ beq _020C3A58
+ ldrb r1, [r4, #0x0]
+ mov r0, r5
+ bl FUN_020C1160
+ ldrh r1, [r4, #0x2]
+ mov r0, r5
+ bl FUN_020C1148
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x0
+ beq _020C3A58
+ cmp r6, #0x0
+ beq _020C3A58
+ ldrb r0, [r4, #0x0]
+ mov r8, r7
+ cmp r0, #0x0
+ ble _020C3A58
+_020C3A2C:
+ ldr r2, [r4, #0x4]
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020C10B4
+_020C3A3C: ; 0x020C3A3C
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+_020C3A48: ; 0x020C3A48
+ ldrb r0, [r4, #0x0]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blt _020C3A2C
+_020C3A58:
+ add r5, r5, #0x1
+ cmp r5, #0x20
+ blt _020C39E0
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C3A6C
+FUN_020C3A6C: ; 0x020C3A6C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _020C3A9C ; =0x021D2904
+ mov r1, r5
+ bl FUN_020ADBE8
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C3A9C: .word 0x021D2904
+
+ arm_func_start FUN_020C3AA0
+FUN_020C3AA0: ; 0x020C3AA0
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r8
+ mov r1, #0x0
+ bl FUN_020ADA98
+ movs r5, r0
+ beq _020C3B04
+_020C3AC8:
+ mov r0, r8
+ mov r1, r5
+ bl FUN_020ADA98
+ ldr r1, [r5, #0x8]
+ mov r4, r0
+ cmp r1, r7
+ bne _020C3AF8
+ mov r0, r8
+ mov r1, r5
+ bl FUN_020ADAB0
+ mov r0, r5
+ bl FUN_020C3A6C
+_020C3AF8:
+ mov r5, r4
+ cmp r4, #0x0
+ bne _020C3AC8
+_020C3B04:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FUN_020C3B10
+FUN_020C3B10: ; 0x020C3B10
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x120]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ sub r1, r1, #0x1
+ str r1, [r0, #0x120]
+ ldr r1, [r0, #0x120]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ bl FUN_020C1674
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start FUN_020C3B4C
+FUN_020C3B4C: ; 0x020C3B4C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x110]
+ mov r1, r1, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ ldmeqia sp!, {r4,pc}
+_020C3B64: ; 0x020C3B64
+ bl FUN_020C3B10
+ ldr r1, [r4, #0x164]
+ mov r0, r4
+ blx r1
+ ldr r0, _020C3BA8 ; =0x021D2DF0
+ mov r1, r4
+ bl FUN_020C3AA0
+ ldr r0, _020C3BAC ; =0x021D2900
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020C3B9C
+ mov r1, r4
+ add r0, r0, #0x4e0
+ bl FUN_020C3AA0
+_020C3B9C:
+ mov r0, r4
+ bl FUN_020C3C4C
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C3BA8: .word 0x021D2DF0
+_020C3BAC: .word 0x021D2900
+
+ arm_func_start FUN_020C3BB0
+FUN_020C3BB0: ; 0x020C3BB0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _020C3C40 ; =0x021D2DD8
+ bl OS_LockMutex
+ ldr r0, _020C3C44 ; =0x021D2900
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _020C3BDC
+ ldr r0, _020C3C48 ; =0x000004C8
+ add r0, r1, r0
+ bl OS_LockMutex
+_020C3BDC:
+ ldr r0, [r4, #0x110]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C3BF4
+ mov r0, r4
+ bl FUN_020C1430
+_020C3BF4:
+ ldr r0, [r4, #0x110]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, asr #0x1f
+ beq _020C3C10
+ ldr r1, [r4, #0x16c]
+ mov r0, r4
+ blx r1
+_020C3C10:
+ mov r0, r4
+ bl FUN_020C3B4C
+ ldr r0, _020C3C40 ; =0x021D2DD8
+ bl OS_UnlockMutex
+ ldr r0, _020C3C44 ; =0x021D2900
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+_020C3C30: ; 0x020C3C30
+ ldr r0, _020C3C48 ; =0x000004C8
+ add r0, r1, r0
+ bl OS_UnlockMutex
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C3C40: .word 0x021D2DD8
+_020C3C44: .word 0x021D2900
+_020C3C48: .word 0x000004C8
+
+ arm_func_start FUN_020C3C4C
+FUN_020C3C4C: ; 0x020C3C4C
+ ldr r2, [r0, #0x14c]
+ cmp r2, #0x0
+ movne r1, #0x0
+ strne r1, [r2, #0x0]
+ strne r1, [r0, #0x14c]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x1
+ str r1, [r0, #0x110]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x4
+ str r1, [r0, #0x110]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x2
+ str r1, [r0, #0x110]
+ bx lr
+
+ arm_func_start FUN_020C3C88
+FUN_020C3C88:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020C3D94 ; =0x021D2DFC
+ mov r7, #0x0
+ ldr r4, _020C3D98 ; =0x02103BAC
+_020C3C9C:
+ ldr r1, [r5, #0x110]
+ mov r0, r1, lsl #0x1f
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ ldr r0, [r5, #0x114]
+ cmp r0, #0x0
+ bne _020C3CC4
+ mov r0, r5
+ bl FUN_020C3BB0
+ b _020C3D7C
+_020C3CC4:
+ mov r0, r1, lsl #0x1d
+ movs r0, r0, asr #0x1f
+ beq _020C3CFC
+ ldr r0, [r5, #0x118]
+ cmp r0, #0x0
+ beq _020C3CFC
+ mov r0, r5
+ bl FUN_020C1458
+ ldr r0, [r5, #0x110]
+ orr r0, r0, #0x2
+ str r0, [r5, #0x110]
+ ldr r0, [r5, #0x110]
+ bic r0, r0, #0x4
+ str r0, [r5, #0x110]
+_020C3CFC:
+ ldr r0, [r5, #0x110]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ add r0, r5, #0xe8
+ bl FUN_020C3DF4
+ ldr r1, [r5, #0x154]
+ add r0, r5, #0xe8
+ mov r1, r1, lsl #0x1
+ ldrsh r6, [r4, r1]
+ bl FUN_020C3E0C
+ mov r0, r0, asr #0x8
+ mov r0, r0, lsl #0x1
+ ldrsh r1, [r4, r0]
+ ldr r0, [r5, #0x158]
+ add r6, r1, r6
+ cmp r6, r0
+ beq _020C3D54
+ mov r0, r5
+ mov r1, r6
+ bl FUN_020C13C4
+ str r6, [r5, #0x158]
+_020C3D54:
+ ldr r0, [r5, #0x110]
+ mov r0, r0, lsl #0x1c
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ add r0, r5, #0xe8
+ bl FUN_020C3DDC
+_020C3D6C: ; 0x020C3D6C
+ cmp r0, #0x0
+ beq _020C3D7C
+ mov r0, r5
+ bl FUN_020C3BB0
+_020C3D7C:
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ add r5, r5, #0x170
+ blt _020C3C9C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3D94: .word 0x021D2DFC
+_020C3D98: .word 0x02103BAC
+
+ arm_func_start FUN_020C3D9C
+FUN_020C3D9C:
+ cmp r1, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r2, [r0, #0x1c]
+ cmp r1, r2
+ movcs r0, #0x0
+ bxcs lr
+ mov r2, #0xc
+ mul r2, r1, r2
+ add r3, r0, #0x20
+ ldr r1, [r3, r2]
+ mvn r0, #0x0
+ cmp r1, r0
+ add r0, r3, r2
+ moveq r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020C3DDC
+FUN_020C3DDC:
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0xc]
+ cmp r1, r0
+ movge r0, #0x1
+ movlt r0, #0x0
+ bx lr
+
+ arm_func_start FUN_020C3DF4
+FUN_020C3DF4: ; 0x020C3DF4
+ ldr r2, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ cmp r2, r1
+ addlt r1, r2, #0x1
+ strlt r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020C3E0C
+FUN_020C3E0C:
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0xc]
+ ldr r2, [r0, #0x8]
+ cmp r2, r1
+ ldrge r0, [r0, #0x4]
+ ldmgeia sp!, {r4,pc}
+_020C3E24: ; 0x020C3E24
+ ldr r4, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ sub r0, r0, r4
+ mul r0, r2, r0
+ bl _s32_div_f
+_020C3E38: ; 0x020C3E38
+ add r0, r4, r0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start FUN_020C3E40
+FUN_020C3E40:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_020C3E0C
+_020C3E54: ; 0x020C3E54
+ str r0, [r6, #0x0]
+ str r5, [r6, #0x4]
+ str r4, [r6, #0xc]
+ mov r0, #0x0
+ str r0, [r6, #0x8]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start FUN_020C3E6C
+FUN_020C3E6C: ; 0x020C3E6C
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0xc]
+ ldr r1, [r0, #0xc]
+ str r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start FUN_020C3E8C
+FUN_020C3E8C: ; 0x020C3E8C
+ mov r1, #0x0
+ mov r2, #0x1000
+ mov r3, #0x0
+ stmia r0!, {r2-r3}
+ stmia r0!, {r1-r2}
+ bx lr
+
+ thumb_func_start FUN_020C3EA4
+FUN_020C3EA4: ; 0x020C3EA4
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ neg r1, r1
+ str r1, [r0, #0x8]
+ str r2, [r0, #0xc]
+ bx lr
+
+ arm_func_start FUN_020C3EB0
+FUN_020C3EB0: ; 0x020C3EB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r0, #0x0]
+ smull lr, r12, r2, r12
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r12, lsl #0x14
+ str lr, [r1, #0x0]
+ ldr r12, [r0, #0x4]
+ smull lr, r12, r2, r12
+ mov r2, lr, lsr #0xc
+ orr r2, r2, r12, lsl #0x14
+ str r2, [r1, #0x4]
+ ldr r2, [r0, #0x8]
+ smull r12, r2, r3, r2
+ mov r12, r12, lsr #0xc
+ orr r12, r12, r2, lsl #0x14
+ str r12, [r1, #0x8]
+ ldr r0, [r0, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start MTX_Identity33_
+MTX_Identity33_: ; 0x020C3F14
+ mov r2, #0x1000
+ str r2, [r0, #0x20]
+ mov r3, #0x0
+ stmia r0!, {r2-r3}
+ mov r1, #0x0
+ stmia r0!, {r1,r3}
+ stmia r0!, {r2-r3}
+ stmia r0!, {r1,r3}
+ bx lr
+
+ thumb_func_start MTX_RotX33_
+MTX_RotX33_: ; 0x020C3F38
+ mov r3, #0x1
+ lsl r3, r3, #0xc
+ str r3, [r0, #0x0]
+ mov r3, #0x0
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x8]
+ str r3, [r0, #0xc]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+ str r3, [r0, #0x18]
+ neg r1, r1
+ str r1, [r0, #0x1c]
+ str r2, [r0, #0x20]
+ bx lr
+
+ thumb_func_start MTX_RotY33_
+MTX_RotY33_: ; 0x020C3F54
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x20]
+ mov r3, #0x0
+ str r3, [r0, #0x4]
+ str r3, [r0, #0xc]
+ str r3, [r0, #0x14]
+ str r3, [r0, #0x1c]
+ neg r2, r1
+ mov r3, #0x1
+ lsl r3, r3, #0xc
+ str r1, [r0, #0x18]
+ str r2, [r0, #0x8]
+ str r3, [r0, #0x10]
+ bx lr
+
+ thumb_func_start MTX_RotZ33_
+MTX_RotZ33_: ; 0x020C3F70
+ stmia r0!, {r2}
+ mov r3, #0x0
+ stmia r0!, {r1,r3}
+ neg r1, r1
+ stmia r0!, {r1-r2}
+ mov r1, #0x1
+ lsl r1, r1, #0xc
+ str r3, [r0, #0x0]
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x8]
+ str r1, [r0, #0xc]
+ bx lr
+
+ arm_func_start MTX_MultVec33
+MTX_MultVec33: ; 0x020C3F88
+ stmdb sp!, {r4-r6,lr}
+ ldr r12, [r0, #0x4]
+ ldr r4, [r1, #0xc]
+ ldr r3, [r0, #0x0]
+ smull r6, r5, r12, r4
+ ldr r4, [r1, #0x0]
+ ldr r0, [r0, #0x8]
+ smlal r6, r5, r3, r4
+ ldr r4, [r1, #0x18]
+ smlal r6, r5, r0, r4
+ mov r4, r6, lsr #0xc
+ orr r4, r4, r5, lsl #0x14
+ str r4, [r2, #0x0]
+ ldr r4, [r1, #0x10]
+ ldr r5, [r1, #0x4]
+ smull r6, lr, r12, r4
+ smlal r6, lr, r3, r5
+ ldr r4, [r1, #0x1c]
+ smlal r6, lr, r0, r4
+ mov r4, r6, lsr #0xc
+ orr r4, r4, lr, lsl #0x14
+ str r4, [r2, #0x4]
+ ldr lr, [r1, #0x14]
+ ldr r4, [r1, #0x8]
+ smull r5, lr, r12, lr
+ smlal r5, lr, r3, r4
+ ldr r1, [r1, #0x20]
+ smlal r5, lr, r0, r1
+ mov r0, r5, lsr #0xc
+ orr r0, r0, lr, lsl #0x14
+ str r0, [r2, #0x8]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MTX_Concat33
+MTX_Concat33: ; 0x020C400C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x24
+ ldr r5, [r0, #0x4]
+ ldr r3, [r1, #0xc]
+ mov r12, r2
+ smull r8, r7, r5, r3
+ ldr r6, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ cmp r12, r1
+ smlal r8, r7, r6, r3
+ ldr r4, [r0, #0x8]
+ ldr r3, [r1, #0x18]
+ addeq r2, sp, #0x0
+ smlal r8, r7, r4, r3
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r7, lsl #0x14
+ str r3, [r2, #0x0]
+ ldr r3, [r1, #0x10]
+ ldr r7, [r1, #0x4]
+ smull r9, r8, r5, r3
+ smlal r9, r8, r6, r7
+ ldr r3, [r1, #0x1c]
+ add lr, sp, #0x0
+ smlal r9, r8, r4, r3
+ mov r3, r9, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ str r3, [r2, #0x4]
+ ldr r3, [r1, #0x14]
+ ldr r7, [r1, #0x8]
+ smull r9, r8, r5, r3
+ smlal r9, r8, r6, r7
+ ldr r6, [r1, #0x20]
+ cmp r2, lr
+ smlal r9, r8, r4, r6
+ mov r4, r9, lsr #0xc
+ orr r4, r4, r8, lsl #0x14
+ str r4, [r2, #0x8]
+ ldr r4, [r0, #0x10]
+ ldr r5, [r0, #0xc]
+ smull r9, r8, r4, r3
+ smlal r9, r8, r5, r7
+ ldr r3, [r0, #0x14]
+ addne sp, sp, #0x24
+ smlal r9, r8, r3, r6
+ mov r6, r9, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ str r6, [r2, #0x14]
+ ldr r6, [r1, #0x10]
+ ldr r7, [r1, #0x4]
+ smull r9, r8, r4, r6
+ smlal r9, r8, r5, r7
+ ldr r6, [r1, #0x1c]
+ smlal r9, r8, r3, r6
+ mov r6, r9, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ str r6, [r2, #0x10]
+ ldr r7, [r1, #0xc]
+ ldr r6, [r1, #0x0]
+ smull r9, r8, r4, r7
+ smlal r9, r8, r5, r6
+ ldr r5, [r1, #0x18]
+ smlal r9, r8, r3, r5
+ mov r3, r9, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ str r3, [r2, #0xc]
+ ldr r4, [r0, #0x1c]
+ ldr r3, [r0, #0x18]
+ smull r8, r7, r4, r7
+ smlal r8, r7, r3, r6
+ ldr r0, [r0, #0x20]
+ smlal r8, r7, r0, r5
+ mov r5, r8, lsr #0xc
+ orr r5, r5, r7, lsl #0x14
+ str r5, [r2, #0x18]
+ ldr r5, [r1, #0x10]
+ ldr r6, [r1, #0x4]
+ smull r8, r5, r4, r5
+ smlal r8, r5, r3, r6
+ ldr r7, [r1, #0x1c]
+ smlal r8, r5, r0, r7
+ mov r6, r8, lsr #0xc
+ orr r6, r6, r5, lsl #0x14
+ str r6, [r2, #0x1c]
+ ldr r6, [r1, #0x20]
+ ldr r5, [r1, #0x8]
+ ldr r1, [r1, #0x14]
+ smull r7, r1, r4, r1
+ smlal r7, r1, r3, r5
+ smlal r7, r1, r0, r6
+ mov r0, r7, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ str r0, [r2, #0x20]
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r0, [lr, #0x0]
+ str r0, [r12, #0x0]
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start MTX_ScaleApply33
+MTX_ScaleApply33: ; 0x020C41A8
+ stmdb sp!, {r4,lr}
+ ldr r4, [r0, #0x0]
+ ldr r12, [sp, #0x8]
+ smull lr, r4, r2, r4
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r4, lsl #0x14
+ str lr, [r1, #0x0]
+ ldr r4, [r0, #0x4]
+ smull lr, r4, r2, r4
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r4, lsl #0x14
+ str lr, [r1, #0x4]
+ ldr lr, [r0, #0x8]
+ smull r4, lr, r2, lr
+ mov r2, r4, lsr #0xc
+ orr r2, r2, lr, lsl #0x14
+ str r2, [r1, #0x8]
+ ldr r2, [r0, #0xc]
+ smull lr, r2, r3, r2
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r2, lsl #0x14
+ str lr, [r1, #0xc]
+ ldr r2, [r0, #0x10]
+ smull lr, r2, r3, r2
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r2, lsl #0x14
+ str lr, [r1, #0x10]
+ ldr r2, [r0, #0x14]
+ smull lr, r2, r3, r2
+ mov r3, lr, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [r1, #0x14]
+ ldr r2, [r0, #0x18]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [r1, #0x18]
+ ldr r2, [r0, #0x1c]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [r1, #0x1c]
+ ldr r0, [r0, #0x20]
+ smull r2, r0, r12, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [r1, #0x20]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start MTX_Identity43_
+MTX_Identity43_: ; 0x020C426C
+ mov r2, #0x1000
+ mov r3, #0x0
+ stmia r0!, {r2-r3}
+ mov r1, #0x0
+ stmia r0!, {r1,r3}
+ stmia r0!, {r2-r3}
+ stmia r0!, {r1,r3}
+ stmia r0!, {r2-r3}
+ stmia r0!, {r1,r3}
+ bx lr
+
+ arm_func_start MTX_Copy43To44_
+MTX_Copy43To44_: ; 0x020C4294
+ stmdb sp!, {r4}
+ mov r12, #0x0
+ ldmia r0!, {r2-r4}
+ stmia r1!, {r2-r4,r12}
+ ldmia r0!, {r2-r4}
+ stmia r1!, {r2-r4,r12}
+ ldmia r0!, {r2-r4}
+ stmia r1!, {r2-r4,r12}
+ mov r12, #0x1000
+ ldmia r0!, {r2-r4}
+ stmia r1!, {r2-r4,r12}
+ ldmia sp!, {r4}
+ bx lr
+
+ thumb_func_start MTX_Scale43_
+MTX_Scale43_: ; 0x020C42C8
+ stmia r0!, {r1}
+ mov r1, #0x0
+ str r3, [r0, #0x1c]
+ mov r3, #0x0
+ stmia r0!, {r1,r3}
+ stmia r0!, {r1-r3}
+ mov r2, #0x0
+ stmia r0!, {r1,r3}
+ add r0, #0x4
+ stmia r0!, {r1-r3}
+ bx lr
+ .balign 4
+
+ thumb_func_start MTX_RotX43_
+MTX_RotX43_: ; 0x020C42E0
+ str r1, [r0, #0x14]
+ neg r1, r1
+ str r1, [r0, #0x1c]
+ mov r1, #0x1
+ lsl r1, r1, #0xc
+ stmia r0!, {r1}
+ mov r3, #0x0
+ mov r1, #0x0
+ stmia r0!, {r1,r3}
+ stmia r0!, {r1-r2}
+ str r1, [r0, #0x4]
+ add r0, #0xc
+ stmia r0!, {r2-r3}
+ stmia r0!, {r1,r3}
+ bx lr
+ .balign 4
+
+ thumb_func_start MTX_RotY43_
+MTX_RotY43_: ; 0x020C4300
+ str r1, [r0, #0x18]
+ mov r3, #0x0
+ stmia r0!, {r2-r3}
+ neg r1, r1
+ stmia r0!, {r1,r3}
+ mov r1, #0x1
+ lsl r1, r1, #0xc
+ stmia r0!, {r1,r3}
+ add r0, #0x4
+ mov r1, #0x0
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1,r3}
+ bx lr
+ .balign 4
+
+ arm_func_start MTX_MultVec43
+MTX_MultVec43: ; 0x020C431C
+ stmdb sp!, {r4-r6,lr}
+ ldr r12, [r0, #0x4]
+ ldr r4, [r1, #0xc]
+ ldr r3, [r0, #0x0]
+ smull r6, r5, r12, r4
+ ldr r4, [r1, #0x0]
+ ldr r0, [r0, #0x8]
+ smlal r6, r5, r3, r4
+ ldr r4, [r1, #0x18]
+ smlal r6, r5, r0, r4
+ mov r4, r6, lsr #0xc
+ orr r4, r4, r5, lsl #0x14
+ str r4, [r2, #0x0]
+ ldr r5, [r2, #0x0]
+ ldr r4, [r1, #0x24]
+ add r4, r5, r4
+ str r4, [r2, #0x0]
+ ldr r4, [r1, #0x10]
+ ldr r5, [r1, #0x4]
+ smull r6, lr, r12, r4
+ smlal r6, lr, r3, r5
+ ldr r4, [r1, #0x1c]
+ smlal r6, lr, r0, r4
+ mov r4, r6, lsr #0xc
+ orr r4, r4, lr, lsl #0x14
+ str r4, [r2, #0x4]
+ ldr r5, [r2, #0x4]
+ ldr r4, [r1, #0x28]
+ add r4, r5, r4
+ str r4, [r2, #0x4]
+ ldr lr, [r1, #0x14]
+ ldr r4, [r1, #0x8]
+ smull r5, lr, r12, lr
+ smlal r5, lr, r3, r4
+ ldr r3, [r1, #0x20]
+ smlal r5, lr, r0, r3
+ mov r0, r5, lsr #0xc
+ orr r0, r0, lr, lsl #0x14
+ str r0, [r2, #0x8]
+ ldr r3, [r2, #0x8]
+ ldr r0, [r1, #0x2c]
+ add r0, r3, r0
+ str r0, [r2, #0x8]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start MTX_Concat43
+MTX_Concat43: ; 0x020C43D0
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x30
+ ldr r5, [r0, #0x4]
+ ldr r3, [r1, #0xc]
+ mov r12, r2
+ smull r8, r7, r5, r3
+ ldr r6, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ cmp r12, r1
+ smlal r8, r7, r6, r3
+ ldr r4, [r0, #0x8]
+ ldr r3, [r1, #0x18]
+ addeq r2, sp, #0x0
+ smlal r8, r7, r4, r3
+ mov r3, r8, lsr #0xc
+ orr r3, r3, r7, lsl #0x14
+ str r3, [r2, #0x0]
+ ldr r3, [r1, #0x10]
+ ldr r7, [r1, #0x4]
+ smull r9, r8, r5, r3
+ smlal r9, r8, r6, r7
+ ldr r3, [r1, #0x1c]
+ add lr, sp, #0x0
+ smlal r9, r8, r4, r3
+ mov r3, r9, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ str r3, [r2, #0x4]
+ ldr r3, [r1, #0x14]
+ ldr r7, [r1, #0x8]
+ smull r9, r8, r5, r3
+ smlal r9, r8, r6, r7
+ ldr r6, [r1, #0x20]
+ smlal r9, r8, r4, r6
+ mov r4, r9, lsr #0xc
+ orr r4, r4, r8, lsl #0x14
+ str r4, [r2, #0x8]
+ ldr r4, [r0, #0x10]
+ ldr r5, [r0, #0xc]
+ smull r9, r8, r4, r3
+ smlal r9, r8, r5, r7
+ ldr r3, [r0, #0x14]
+ smlal r9, r8, r3, r6
+ mov r6, r9, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ str r6, [r2, #0x14]
+ ldr r6, [r1, #0x10]
+ ldr r7, [r1, #0x4]
+ smull r9, r8, r4, r6
+ smlal r9, r8, r5, r7
+ ldr r6, [r1, #0x1c]
+ smlal r9, r8, r3, r6
+ mov r6, r9, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ str r6, [r2, #0x10]
+ ldr r7, [r1, #0xc]
+ ldr r8, [r1, #0x0]
+ smull r10, r9, r4, r7
+ smlal r10, r9, r5, r8
+ ldr r6, [r1, #0x18]
+ smlal r10, r9, r3, r6
+ mov r3, r10, lsr #0xc
+ orr r3, r3, r9, lsl #0x14
+ str r3, [r2, #0xc]
+ ldr r4, [r0, #0x1c]
+ ldr r5, [r0, #0x18]
+ smull r9, r7, r4, r7
+ smlal r9, r7, r5, r8
+ ldr r3, [r0, #0x20]
+ smlal r9, r7, r3, r6
+ mov r6, r9, lsr #0xc
+ orr r6, r6, r7, lsl #0x14
+ str r6, [r2, #0x18]
+ ldr r6, [r1, #0x10]
+ ldr r7, [r1, #0x4]
+ smull r9, r6, r4, r6
+ smlal r9, r6, r5, r7
+ ldr r8, [r1, #0x1c]
+ smlal r9, r6, r3, r8
+ mov r7, r9, lsr #0xc
+ orr r7, r7, r6, lsl #0x14
+ str r7, [r2, #0x1c]
+ ldr r7, [r1, #0x14]
+ ldr r6, [r1, #0x8]
+ smull r9, r8, r4, r7
+ smlal r9, r8, r5, r6
+ ldr r5, [r1, #0x20]
+ smlal r9, r8, r3, r5
+ mov r3, r9, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ str r3, [r2, #0x20]
+ ldr r4, [r0, #0x28]
+ ldr r3, [r0, #0x24]
+ smull r8, r7, r4, r7
+ smlal r8, r7, r3, r6
+ ldr r0, [r0, #0x2c]
+ ldr r6, [r1, #0x2c]
+ smlal r8, r7, r0, r5
+ mov r5, r8, lsr #0xc
+ orr r5, r5, r7, lsl #0x14
+ adds r5, r6, r5
+ str r5, [r2, #0x2c]
+ ldr r5, [r1, #0x10]
+ ldr r6, [r1, #0x4]
+ smull r8, r5, r4, r5
+ smlal r8, r5, r3, r6
+ ldr r7, [r1, #0x1c]
+ ldr r9, [r1, #0x28]
+ smlal r8, r5, r0, r7
+ mov r6, r8, lsr #0xc
+ orr r6, r6, r5, lsl #0x14
+ adds r5, r9, r6
+ str r5, [r2, #0x28]
+ ldr r8, [r1, #0x24]
+ ldr r6, [r1, #0x18]
+ ldr r5, [r1, #0x0]
+ ldr r1, [r1, #0xc]
+ smull r7, r1, r4, r1
+ smlal r7, r1, r3, r5
+ smlal r7, r1, r0, r6
+ mov r0, r7, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ adds r0, r8, r0
+ cmp r2, lr
+ str r0, [r2, #0x24]
+ addne sp, sp, #0x30
+ ldmneia sp!, {r4-r10,lr}
+ bxne lr
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr, {r0-r3}
+ stmia r12, {r0-r3}
+ add sp, sp, #0x30
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+
+ arm_func_start MTX_Inverse43
+MTX_Inverse43: ; 0x020C45F0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x5c
+ mov r10, r0
+ ldr r11, [r10, #0x14]
+ cmp r10, r1
+ addeq r9, sp, #0x2c
+ ldr r3, [r10, #0x18]
+ ldr r2, [r10, #0xc]
+ ldr r8, [r10, #0x20]
+ str r1, [sp, #0x0]
+ movne r9, r1
+ smull r7, r5, r2, r8
+ smull r6, r1, r11, r3
+ ldr r4, [r10, #0x1c]
+ subs r12, r7, r6
+ ldr r0, [r10, #0x10]
+ smull r6, lr, r11, r4
+ sbc r11, r5, r1
+ smull r5, r4, r2, r4
+ mov r1, #0x800
+ smull r8, r7, r0, r8
+ smull r3, r2, r0, r3
+ adds r12, r12, r1
+ adc r0, r11, #0x0
+ subs r8, r8, r6
+ sbc r6, r7, lr
+ adds r7, r8, r1
+ adc r11, r6, #0x0
+ mov r7, r7, lsr #0xc
+ mov r8, r12, lsr #0xc
+ orr r7, r7, r11, lsl #0x14
+ orr r8, r8, r0, lsl #0x14
+ subs r0, r5, r3
+ sbc r12, r4, r2
+ ldr r6, [r10, #0x4]
+ ldr r11, [r10, #0x0]
+ smull r3, r2, r6, r8
+ adds r0, r0, r1
+ smull r5, r4, r11, r7
+ adc r11, r12, #0x0
+ mov r6, r0, lsr #0xc
+ subs r3, r5, r3
+ ldr r0, [r10, #0x8]
+ orr r6, r6, r11, lsl #0x14
+ sbc r2, r4, r2
+ smlal r3, r2, r0, r6
+ adds r0, r3, r1
+ mov r1, r8, asr #0x1f
+ str r1, [sp, #0x4]
+ mov r1, r7, asr #0x1f
+ str r1, [sp, #0x8]
+ mov r1, r6, asr #0x1f
+ adc r2, r2, #0x0
+ mov r0, r0, lsr #0xc
+ orrs r0, r0, r2, lsl #0x14
+ str r1, [sp, #0xc]
+ addeq sp, sp, #0x5c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ bl FX_InvAsync
+ ldr r1, [r10, #0x8]
+ ldr r2, [r10, #0x1c]
+ ldr r11, [r10, #0x10]
+ smull r0, r4, r2, r1
+ smull r3, r2, r11, r1
+ ldr r5, [r10, #0x18]
+ str r2, [sp, #0x18]
+ str r3, [sp, #0x14]
+ smull r3, r2, r5, r1
+ str r2, [sp, #0x20]
+ ldr r2, [r10, #0x20]
+ ldr lr, [r10, #0x4]
+ str r2, [sp, #0x10]
+ ldr r5, [sp, #0x10]
+ str r3, [sp, #0x1c]
+ smull r12, r5, lr, r5
+ subs r0, r12, r0
+ ldr r2, [r10, #0xc]
+ sbc r4, r5, r4
+ smull r1, r5, r2, r1
+ str r5, [sp, #0x28]
+ mov r5, r0, lsr #0xc
+ ldr r11, [r10, #0x14]
+ orr r5, r5, r4, lsl #0x14
+ smull r4, r2, lr, r11
+ ldr r0, [sp, #0x14]
+ ldr r3, [r10, #0x0]
+ subs r4, r4, r0
+ ldr r0, [sp, #0x18]
+ mov r4, r4, lsr #0xc
+ sbc r0, r2, r0
+ orr r4, r4, r0, lsl #0x14
+ ldr r0, [sp, #0x10]
+ ldr r2, [sp, #0x1c]
+ smull r12, r0, r3, r0
+ subs r2, r12, r2
+ ldr r12, [sp, #0x20]
+ sbc r0, r0, r12
+ smull r12, r11, r3, r11
+ ldr r3, [sp, #0x28]
+ subs r1, r12, r1
+ sbc r3, r11, r3
+ mov r11, r2, lsr #0xc
+ orr r11, r11, r0, lsl #0x14
+ mov r0, r1, lsr #0xc
+ str r0, [sp, #0x24]
+ orr r0, r0, r3, lsl #0x14
+ str r0, [sp, #0x24]
+ bl FX_GetDivResult
+ smull r2, r1, r0, r5
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ rsb lr, r2, #0x0
+ smull r2, r1, r0, r4
+ mov r4, r2, lsr #0xc
+ orr r4, r4, r1, lsl #0x14
+ smull r2, r1, r0, r11
+ mov r3, r2, lsr #0xc
+ orr r3, r3, r1, lsl #0x14
+ ldr r1, [sp, #0x24]
+ umull r11, r5, r0, r7
+ smull r2, r1, r0, r1
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ ldr r1, [sp, #0x8]
+ mov r12, r0, asr #0x1f
+ mla r5, r0, r1, r5
+ mla r5, r12, r7, r5
+ mov r1, r11, lsr #0xc
+ orr r1, r1, r5, lsl #0x14
+ str r1, [r9, #0x0]
+ str lr, [r9, #0x4]
+ str r4, [r9, #0x8]
+ ldr r1, [sp, #0x4]
+ umull r5, r4, r0, r8
+ mla r4, r0, r1, r4
+ mla r4, r12, r8, r4
+ mov r1, r5, lsr #0xc
+ orr r1, r1, r4, lsl #0x14
+ rsb r1, r1, #0x0
+ str r1, [r9, #0xc]
+ ldr r1, [sp, #0xc]
+ rsb r2, r2, #0x0
+ str r3, [r9, #0x10]
+ str r2, [r9, #0x14]
+ umull r3, r2, r0, r6
+ mla r2, r0, r1, r2
+ mla r2, r12, r6, r2
+ mov r1, r3, lsr #0xc
+ orr r1, r1, r2, lsl #0x14
+ str r1, [r9, #0x18]
+ ldr r3, [r10, #0x0]
+ ldr r1, [r10, #0x1c]
+ ldr r2, [r10, #0x18]
+ smull r5, r4, r3, r1
+ ldr r1, [r10, #0x4]
+ smull r3, r1, r2, r1
+ subs r2, r5, r3
+ sbc r1, r4, r1
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ smull r2, r1, r0, r2
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ rsb r1, r2, #0x0
+ str r1, [r9, #0x1c]
+ ldr r3, [r10, #0x0]
+ ldr r1, [r10, #0x10]
+ ldr r2, [r10, #0xc]
+ smull r5, r4, r3, r1
+ ldr r1, [r10, #0x4]
+ smull r3, r1, r2, r1
+ subs r2, r5, r3
+ sbc r1, r4, r1
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ smull r2, r1, r0, r2
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ str r0, [r9, #0x20]
+ add r0, sp, #0x2c
+ ldr r2, [r9, #0xc]
+ ldr r1, [r10, #0x28]
+ ldr r4, [r9, #0x0]
+ smull r7, r1, r2, r1
+ ldr r3, [r10, #0x24]
+ ldr r6, [r9, #0x18]
+ smlal r7, r1, r4, r3
+ ldr r5, [r10, #0x2c]
+ cmp r9, r0
+ smlal r7, r1, r6, r5
+ mov r2, r7, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ rsb r1, r2, #0x0
+ str r1, [r9, #0x24]
+ ldr r2, [r9, #0x10]
+ ldr r1, [r10, #0x28]
+ ldr r4, [r9, #0x4]
+ smull r7, r1, r2, r1
+ ldr r3, [r10, #0x24]
+ ldr r6, [r9, #0x1c]
+ smlal r7, r1, r4, r3
+ ldr r5, [r10, #0x2c]
+ smlal r7, r1, r6, r5
+ mov r2, r7, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ rsb r1, r2, #0x0
+ str r1, [r9, #0x28]
+ ldr r1, [r10, #0x28]
+ ldr r2, [r9, #0x14]
+ ldr r4, [r9, #0x8]
+ smull r7, r1, r2, r1
+ ldr r3, [r10, #0x24]
+ ldr r6, [r9, #0x20]
+ smlal r7, r1, r4, r3
+ ldr r5, [r10, #0x2c]
+ smlal r7, r1, r6, r5
+ mov r2, r7, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ rsb r1, r2, #0x0
+ str r1, [r9, #0x2c]
+ bne _020C4974
+ ldr r1, [sp, #0x0]
+ bl MI_Copy48B
+_020C4974:
+ mov r0, #0x0
+ add sp, sp, #0x5c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start MTX_ScaleApply43
+MTX_ScaleApply43: ; 0x020C4984
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r12, [sp, #0x10]
+ mov r5, r0
+ str r12, [sp, #0x0]
+ mov r4, r1
+ bl MTX_ScaleApply33
+ ldr r0, [r5, #0x24]
+ str r0, [r4, #0x24]
+ ldr r0, [r5, #0x28]
+ str r0, [r4, #0x28]
+ ldr r0, [r5, #0x2c]
+ str r0, [r4, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start MTX_Identity44_
+MTX_Identity44_: ; 0x020C49C4
+ mov r2, #0x1000
+ mov r3, #0x0
+ stmia r0!, {r2-r3}
+ mov r1, #0x0
+ stmia r0!, {r1,r3}
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1,r3}
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1,r3}
+ stmia r0!, {r1-r2}
+ bx lr
+
+ arm_func_start MTX_Copy44To43_
+MTX_Copy44To43_:
+ ldmia r0!, {r2-r3,r12}
+ add r0, r0, #0x4
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ add r0, r0, #0x4
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ add r0, r0, #0x4
+ stmia r1!, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ add r0, r0, #0x4
+ stmia r1!, {r2-r3,r12}
+ bx lr
+
+ thumb_func_start MTX_RotX44_
+MTX_RotX44_: ; 0x020C4A24
+ str r2, [r0, #0x14]
+ str r2, [r0, #0x28]
+ str r1, [r0, #0x18]
+ neg r1, r1
+ str r1, [r0, #0x24]
+ mov r1, #0x1
+ mov r2, #0x0
+ lsl r1, r1, #0xc
+ mov r3, #0x0
+ stmia r0!, {r1-r3}
+ stmia r0!, {r2-r3}
+ add r0, #0x8
+ stmia r0!, {r2-r3}
+ add r0, #0x8
+ stmia r0!, {r2-r3}
+ stmia r0!, {r2-r3}
+ str r1, [r0, #0x0]
+ bx lr
+
+ thumb_func_start MTX_RotY44_
+MTX_RotY44_: ; 0x020C4A48
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x28]
+ str r1, [r0, #0x20]
+ neg r1, r1
+ str r1, [r0, #0x8]
+ mov r3, #0x1
+ mov r1, #0x0
+ lsl r3, r3, #0xc
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ add r0, #0xc
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1-r2}
+ str r2, [r0, #0x4]
+ add r0, #0xc
+ stmia r0!, {r1-r2}
+ stmia r0!, {r1-r3}
+ bx lr
+
+ thumb_func_start MTX_RotZ44_
+MTX_RotZ44_: ; 0x020C4A6C
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x4]
+ neg r1, r1
+ str r1, [r0, #0x10]
+ mov r3, #0x1
+ mov r1, #0x0
+ lsl r3, r3, #0xc
+ mov r2, #0x0
+ add r0, #0x8
+ stmia r0!, {r1-r2}
+ add r0, #0x8
+ stmia r0!, {r1-r2}
+ stmia r0!, {r1-r3}
+ stmia r0!, {r1-r2}
+ stmia r0!, {r1-r3}
+ bx lr
+ .balign 4
+
+ arm_func_start MTX_Concat44
+MTX_Concat44: ; 0x020C4A90
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x44
+ ldr r5, [r0, #0x4]
+ ldr r3, [r1, #0x10]
+ mov r12, r2
+ smull r6, r4, r5, r3
+ ldr r9, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ cmp r12, r1
+ smlal r6, r4, r9, r3
+ ldr r10, [r0, #0x8]
+ ldr r3, [r1, #0x20]
+ ldr r8, [r0, #0xc]
+ smlal r6, r4, r10, r3
+ ldr r3, [r1, #0x30]
+ addeq r2, sp, #0x0
+ smlal r6, r4, r8, r3
+ mov r3, r6, lsr #0xc
+ orr r3, r3, r4, lsl #0x14
+ str r3, [r2, #0x0]
+ ldr r3, [r1, #0x14]
+ ldr r4, [r1, #0x4]
+ smull r7, r6, r5, r3
+ smlal r7, r6, r9, r4
+ ldr r3, [r1, #0x24]
+ ldr r4, [r1, #0x34]
+ smlal r7, r6, r10, r3
+ smlal r7, r6, r8, r4
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0x4]
+ ldr r3, [r1, #0x1c]
+ ldr r4, [r1, #0xc]
+ smull r7, r6, r5, r3
+ smlal r7, r6, r9, r4
+ ldr r3, [r1, #0x2c]
+ ldr r4, [r1, #0x3c]
+ smlal r7, r6, r10, r3
+ smlal r7, r6, r8, r4
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0xc]
+ ldr r6, [r1, #0x18]
+ ldr r7, [r1, #0x8]
+ smull r4, r3, r5, r6
+ smlal r4, r3, r9, r7
+ ldr r9, [r1, #0x28]
+ ldr r5, [r1, #0x38]
+ smlal r4, r3, r10, r9
+ smlal r4, r3, r8, r5
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x8]
+ ldr r8, [r0, #0x14]
+ ldr r10, [r0, #0x10]
+ smull r4, r3, r8, r6
+ smlal r4, r3, r10, r7
+ ldr r7, [r0, #0x18]
+ ldr r6, [r0, #0x1c]
+ smlal r4, r3, r7, r9
+ smlal r4, r3, r6, r5
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x18]
+ ldr r3, [r1, #0x14]
+ ldr r4, [r1, #0x4]
+ smull r11, r3, r8, r3
+ smlal r11, r3, r10, r4
+ ldr r5, [r1, #0x24]
+ ldr r9, [r1, #0x34]
+ smlal r11, r3, r7, r5
+ smlal r11, r3, r6, r9
+ mov r4, r11, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x14]
+ ldr r3, [r1, #0x1c]
+ ldr r4, [r1, #0xc]
+ smull r11, r3, r8, r3
+ smlal r11, r3, r10, r4
+ ldr r5, [r1, #0x2c]
+ ldr r9, [r1, #0x3c]
+ smlal r11, r3, r7, r5
+ smlal r11, r3, r6, r9
+ mov r4, r11, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x1c]
+ ldr r9, [r1, #0x10]
+ ldr r11, [r1, #0x0]
+ smull r4, r3, r8, r9
+ smlal r4, r3, r10, r11
+ ldr r5, [r1, #0x20]
+ ldr r8, [r1, #0x30]
+ smlal r4, r3, r7, r5
+ smlal r4, r3, r6, r8
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x10]
+ ldr r6, [r0, #0x24]
+ ldr r7, [r0, #0x20]
+ smull r4, r3, r6, r9
+ smlal r4, r3, r7, r11
+ ldr r10, [r0, #0x28]
+ add lr, sp, #0x0
+ smlal r4, r3, r10, r5
+ ldr r5, [r0, #0x2c]
+ cmp r2, lr
+ smlal r4, r3, r5, r8
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x20]
+ ldr r3, [r1, #0x14]
+ ldr r4, [r1, #0x4]
+ smull r11, r3, r6, r3
+ smlal r11, r3, r7, r4
+ ldr r8, [r1, #0x24]
+ ldr r9, [r1, #0x34]
+ smlal r11, r3, r10, r8
+ smlal r11, r3, r5, r9
+ mov r4, r11, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x24]
+ ldr r3, [r1, #0x1c]
+ ldr r4, [r1, #0xc]
+ smull r11, r3, r6, r3
+ smlal r11, r3, r7, r4
+ ldr r8, [r1, #0x2c]
+ ldr r9, [r1, #0x3c]
+ smlal r11, r3, r10, r8
+ smlal r11, r3, r5, r9
+ mov r4, r11, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x2c]
+ ldr r9, [r1, #0x18]
+ ldr r8, [r1, #0x8]
+ smull r4, r3, r6, r9
+ smlal r4, r3, r7, r8
+ ldr r7, [r1, #0x28]
+ ldr r6, [r1, #0x38]
+ smlal r4, r3, r10, r7
+ smlal r4, r3, r5, r6
+ mov r4, r4, lsr #0xc
+ orr r4, r4, r3, lsl #0x14
+ str r4, [r2, #0x28]
+ ldr r5, [r0, #0x34]
+ ldr r4, [r0, #0x30]
+ smull r10, r9, r5, r9
+ ldr r3, [r0, #0x38]
+ smlal r10, r9, r4, r8
+ smlal r10, r9, r3, r7
+ ldr r0, [r0, #0x3c]
+ addne sp, sp, #0x44
+ smlal r10, r9, r0, r6
+ mov r6, r10, lsr #0xc
+ orr r6, r6, r9, lsl #0x14
+ str r6, [r2, #0x38]
+ ldr r6, [r1, #0x14]
+ ldr r7, [r1, #0x4]
+ smull r10, r6, r5, r6
+ smlal r10, r6, r4, r7
+ ldr r8, [r1, #0x24]
+ ldr r9, [r1, #0x34]
+ smlal r10, r6, r3, r8
+ smlal r10, r6, r0, r9
+ mov r7, r10, lsr #0xc
+ orr r7, r7, r6, lsl #0x14
+ str r7, [r2, #0x34]
+ ldr r6, [r1, #0x10]
+ ldr r7, [r1, #0x0]
+ smull r10, r6, r5, r6
+ smlal r10, r6, r4, r7
+ ldr r8, [r1, #0x20]
+ ldr r9, [r1, #0x30]
+ smlal r10, r6, r3, r8
+ smlal r10, r6, r0, r9
+ mov r7, r10, lsr #0xc
+ orr r7, r7, r6, lsl #0x14
+ str r7, [r2, #0x30]
+ ldr r8, [r1, #0x3c]
+ ldr r7, [r1, #0x2c]
+ ldr r6, [r1, #0xc]
+ ldr r1, [r1, #0x1c]
+ smull r9, r1, r5, r1
+ smlal r9, r1, r4, r6
+ smlal r9, r1, r3, r7
+ smlal r9, r1, r0, r8
+ mov r0, r9, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ str r0, [r2, #0x3c]
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr, {r0-r3}
+ stmia r12, {r0-r3}
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start MTX_TransApply44
+MTX_TransApply44: ; 0x020C4DB4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ cmp r7, r6
+ beq _020C4DD8
+ bl MI_Copy48B
+_020C4DD8:
+ ldr r0, [r7, #0x10]
+ ldr r1, [r7, #0x0]
+ smull r3, r2, r4, r0
+ smlal r3, r2, r5, r1
+ ldr r0, [sp, #0x18]
+ ldr r1, [r7, #0x20]
+ ldr r12, [r7, #0x30]
+ smlal r3, r2, r0, r1
+ mov r1, r3, lsr #0xc
+ orr r1, r1, r2, lsl #0x14
+ add r1, r12, r1
+ str r1, [r6, #0x30]
+ ldr r1, [r7, #0x14]
+ ldr r2, [r7, #0x4]
+ smull r12, r3, r4, r1
+ smlal r12, r3, r5, r2
+ ldr r1, [r7, #0x24]
+ ldr r2, [r7, #0x34]
+ smlal r12, r3, r0, r1
+ mov r1, r12, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ add r1, r2, r1
+ str r1, [r6, #0x34]
+ ldr r1, [r7, #0x18]
+ ldr r2, [r7, #0x8]
+ smull r12, r3, r4, r1
+ smlal r12, r3, r5, r2
+ ldr r1, [r7, #0x28]
+ ldr r2, [r7, #0x38]
+ smlal r12, r3, r0, r1
+ mov r1, r12, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ add r1, r2, r1
+ str r1, [r6, #0x38]
+ ldr r1, [r7, #0x1c]
+ ldr r2, [r7, #0xc]
+ smull r12, r3, r4, r1
+ smlal r12, r3, r5, r2
+ ldr r1, [r7, #0x2c]
+ ldr r2, [r7, #0x3c]
+ smlal r12, r3, r0, r1
+ mov r0, r12, lsr #0xc
+ orr r0, r0, r3, lsl #0x14
+ add r0, r2, r0
+ str r0, [r6, #0x3c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start FX_ModS32
+FX_ModS32: ; 0x020C4E98
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020C4EE0 ; =0x04000280
+ mov lr, #0x0
+ ldr r3, _020C4EE4 ; =0x04000290
+ strh lr, [r12, #0x0]
+ ldr r2, _020C4EE8 ; =0x04000298
+ str r0, [r3, #0x0]
+ str r1, [r2, #0x0]
+ str lr, [r2, #0x4]
+_020C4EC0:
+ ldrh r0, [r12, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C4EC0
+ ldr r0, _020C4EEC ; =0x040002A8
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C4EE0: .word 0x04000280
+_020C4EE4: .word 0x04000290
+_020C4EE8: .word 0x04000298
+_020C4EEC: .word 0x040002A8
+
+ arm_func_start FX_DivS32
+FX_DivS32: ; 0x020C4EF0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020C4F38 ; =0x04000280
+ mov lr, #0x0
+ ldr r3, _020C4F3C ; =0x04000290
+ strh lr, [r12, #0x0]
+ ldr r2, _020C4F40 ; =0x04000298
+ str r0, [r3, #0x0]
+ str r1, [r2, #0x0]
+ str lr, [r2, #0x4]
+_020C4F18:
+ ldrh r0, [r12, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C4F18
+ ldr r0, _020C4F44 ; =0x040002A0
+ ldr r0, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C4F38: .word 0x04000280
+_020C4F3C: .word 0x04000290
+_020C4F40: .word 0x04000298
+_020C4F44: .word 0x040002A0
+
+ arm_func_start FX_DivAsync
+FX_DivAsync: ; 0x020C4F48
+ ldr r2, _020C4F74 ; =0x04000280
+ mov r12, #0x1
+ ldr r3, _020C4F78 ; =0x04000290
+ strh r12, [r2, #0x0]
+ mov r12, #0x0
+ str r12, [r3, #0x0]
+ ldr r2, _020C4F7C ; =0x04000298
+ str r0, [r3, #0x4]
+ str r1, [r2, #0x0]
+ str r12, [r2, #0x4]
+ bx lr
+ .balign 4
+_020C4F74: .word 0x04000280
+_020C4F78: .word 0x04000290
+_020C4F7C: .word 0x04000298
+
+ arm_func_start FX_GetSqerResult
+FX_GetSqerResult: ; 0x020C4F80
+ ldr r1, _020C4FA4 ; =0x040002B0
+_020C4F84:
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C4F84
+ ldr r0, _020C4FA8 ; =0x040002B4
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x200
+ mov r0, r0, lsr #0xa
+ bx lr
+ .balign 4
+_020C4FA4: .word 0x040002B0
+_020C4FA8: .word 0x040002B4
+
+ arm_func_start FX_InvAsync
+FX_InvAsync:
+ ldr r1, _020C4FDC ; =0x04000280
+ mov r3, #0x1
+ ldr r2, _020C4FE0 ; =0x04000290
+ strh r3, [r1, #0x0]
+ mov r12, #0x0
+ str r12, [r2, #0x0]
+ mov r3, #0x1000
+ ldr r1, _020C4FE4 ; =0x04000298
+ str r3, [r2, #0x4]
+ str r0, [r1, #0x0]
+ str r12, [r1, #0x4]
+ bx lr
+ .balign 4
+_020C4FDC: .word 0x04000280
+_020C4FE0: .word 0x04000290
+_020C4FE4: .word 0x04000298
+
+ arm_func_start FX_GetDivResult
+FX_GetDivResult: ; 0x020C4FE8
+ ldr r1, _020C501C ; =0x04000280
+_020C4FEC:
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C4FEC
+ ldr r1, _020C5020 ; =0x040002A0
+ mov r0, #0x80000
+ ldr r2, [r1, #0x0]
+ ldr r1, [r1, #0x4]
+ adds r0, r2, r0
+ adc r1, r1, #0x0
+ mov r0, r0, lsr #0x14
+ orr r0, r0, r1, lsl #0xc
+ bx lr
+ .balign 4
+_020C501C: .word 0x04000280
+_020C5020: .word 0x040002A0
+
+ arm_func_start FX_GetDivResultFx64c
+FX_GetDivResultFx64c: ; 0x020C5024
+ ldr r1, _020C5044 ; =0x04000280
+_020C5028:
+ ldrh r0, [r1, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C5028
+ ldr r1, _020C5048 ; =0x040002A0
+ ldr r0, [r1, #0x0]
+ ldr r1, [r1, #0x4]
+ bx lr
+ .balign 4
+_020C5044: .word 0x04000280
+_020C5048: .word 0x040002A0
+
+ arm_func_start FX_Sqrt
+FX_Sqrt: ; 0x020C504C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ addle sp, sp, #0x4
+ movle r0, #0x0
+ ldmleia sp!, {lr}
+ bxle lr
+ ldr r2, _020C5094 ; =0x040002B0
+ mov r3, #0x1
+ strh r3, [r2, #0x0]
+ ldr r1, _020C5098 ; =0x040002B8
+ mov r2, #0x0
+ str r2, [r1, #0x0]
+ str r0, [r1, #0x4]
+ bl FX_GetSqerResult
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C5094: .word 0x040002B0
+_020C5098: .word 0x040002B8
+
+ arm_func_start FX_Inv
+FX_Inv: ; 0x020C509C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FX_InvAsync
+ bl FX_GetDivResult
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FX_Div
+FX_Div: ; 0x020C50B8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl FX_DivAsync
+ bl FX_GetDivResult
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start VEC_MultAdd
+VEC_MultAdd: ; 0x020C50D4
+ stmdb sp!, {r4,lr}
+ ldr r4, [r1, #0x0]
+ ldr lr, [r2, #0x0]
+ smull r12, r4, r0, r4
+ mov r12, r12, lsr #0xc
+ orr r12, r12, r4, lsl #0x14
+ add r4, lr, r12
+ str r4, [r3, #0x0]
+ ldr r12, [r1, #0x4]
+ ldr r4, [r2, #0x4]
+ smull lr, r12, r0, r12
+ mov lr, lr, lsr #0xc
+ orr lr, lr, r12, lsl #0x14
+ add r4, r4, lr
+ str r4, [r3, #0x4]
+ ldr r1, [r1, #0x8]
+ ldr r12, [r2, #0x8]
+ smull r2, r1, r0, r1
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ add r0, r12, r0
+ str r0, [r3, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start VEC_Fx16Normalize
+VEC_Fx16Normalize: ; 0x020C5134
+ stmdb sp!, {r4-r8,lr}
+ ldrsh r4, [r0, #0x0]
+ ldrsh r3, [r0, #0x2]
+ ldrsh r2, [r0, #0x4]
+ mul r8, r4, r4
+ mul r7, r3, r3
+ mul r6, r2, r2
+ ldr r2, _020C526C ; =0x04000280
+ mov r3, #0x2
+ ldr r4, _020C5270 ; =0x04000290
+ strh r3, [r2, #0x0]
+ mov r2, #0x0
+ str r2, [r4, #0x0]
+ mov r5, #0x1000000
+ mov r2, r8, asr #0x1f
+ adds r3, r8, r7
+ adc r2, r2, r7, asr #0x1f
+ adds r7, r3, r6
+ adc r6, r2, r6, asr #0x1f
+ mov r3, r6, lsl #0x2
+ ldr r2, _020C5274 ; =0x04000298
+ str r5, [r4, #0x4]
+ str r7, [r2, #0x0]
+ ldr r5, _020C5278 ; =0x040002B0
+ str r6, [r2, #0x4]
+ mov r4, #0x1
+ ldr r2, _020C527C ; =0x040002B8
+ strh r4, [r5, #0x0]
+ mov r4, r7, lsl #0x2
+ str r4, [r2, #0x0]
+ orr r3, r3, r7, lsr #0x1e
+ str r3, [r2, #0x4]
+_020C51B4:
+ ldrh r2, [r5, #0x0]
+ ands r2, r2, #0x8000
+ bne _020C51B4
+ ldr r2, _020C5280 ; =0x040002B4
+ ldr r12, [r2, #0x0]
+ ldr r3, _020C526C ; =0x04000280
+_020C51CC:
+ ldrh r2, [r3, #0x0]
+ ands r2, r2, #0x8000
+ bne _020C51CC
+ ldr r7, _020C5284 ; =0x040002A0
+ ldrsh r5, [r0, #0x0]
+ ldr r6, [r7, #0x0]
+ mov r4, r12, asr #0x1f
+ umull r3, r2, r6, r12
+ mla r2, r6, r4, r2
+ ldr r8, [r7, #0x4]
+ mov r4, r5, asr #0x1f
+ umull r7, r6, r3, r5
+ mov lr, #0x0
+ mla r2, r8, r12, r2
+ mla r6, r3, r4, r6
+ mla r6, r2, r5, r6
+ adds r4, r7, lr
+ adc r4, r6, #0x1000
+ mov r4, r4, asr #0xd
+ strh r4, [r1, #0x0]
+ ldrsh r5, [r0, #0x2]
+ umull r6, r12, r3, r5
+ mov r4, r5, asr #0x1f
+ mla r12, r3, r4, r12
+ mla r12, r2, r5, r12
+ adds r4, r6, lr
+ adc r4, r12, #0x1000
+ mov r4, r4, asr #0xd
+ strh r4, [r1, #0x2]
+ ldrsh r12, [r0, #0x4]
+ umull r5, r4, r3, r12
+ mov r0, r12, asr #0x1f
+ adds r5, r5, lr
+ mla r4, r3, r0, r4
+ mla r4, r2, r12, r4
+ adc r0, r4, #0x1000
+ mov r0, r0, asr #0xd
+ strh r0, [r1, #0x4]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020C526C: .word 0x04000280
+_020C5270: .word 0x04000290
+_020C5274: .word 0x04000298
+_020C5278: .word 0x040002B0
+_020C527C: .word 0x040002B8
+_020C5280: .word 0x040002B4
+_020C5284: .word 0x040002A0
+
+ arm_func_start VEC_Normalize
+VEC_Normalize:
+ stmdb sp!, {r4-r8,lr}
+ ldr r3, [r0, #0x4]
+ ldr r4, [r0, #0x0]
+ smull r2, r7, r3, r3
+ smlal r2, r7, r4, r4
+ ldr r4, [r0, #0x8]
+ ldr r3, _020C53AC ; =0x04000280
+ smlal r2, r7, r4, r4
+ mov r6, #0x2
+ mov r4, r7, lsl #0x2
+ ldr r5, _020C53B0 ; =0x04000290
+ strh r6, [r3, #0x0]
+ mov r3, #0x0
+ str r3, [r5, #0x0]
+ mov r6, #0x1000000
+ ldr r3, _020C53B4 ; =0x04000298
+ str r6, [r5, #0x4]
+ str r2, [r3, #0x0]
+ ldr r6, _020C53B8 ; =0x040002B0
+ str r7, [r3, #0x4]
+ mov r5, #0x1
+ ldr r3, _020C53BC ; =0x040002B8
+ strh r5, [r6, #0x0]
+ mov r5, r2, lsl #0x2
+ str r5, [r3, #0x0]
+ orr r4, r4, r2, lsr #0x1e
+ str r4, [r3, #0x4]
+_020C52F4:
+ ldrh r2, [r6, #0x0]
+ ands r2, r2, #0x8000
+ bne _020C52F4
+ ldr r2, _020C53C0 ; =0x040002B4
+ ldr r12, [r2, #0x0]
+ ldr r3, _020C53AC ; =0x04000280
+_020C530C:
+ ldrh r2, [r3, #0x0]
+ ands r2, r2, #0x8000
+ bne _020C530C
+ ldr r7, _020C53C4 ; =0x040002A0
+ ldr r5, [r0, #0x0]
+ ldr r6, [r7, #0x0]
+ mov r4, r12, asr #0x1f
+ umull r3, r2, r6, r12
+ mla r2, r6, r4, r2
+ ldr r8, [r7, #0x4]
+ mov r4, r5, asr #0x1f
+ umull r7, r6, r3, r5
+ mov lr, #0x0
+ mla r2, r8, r12, r2
+ mla r6, r3, r4, r6
+ mla r6, r2, r5, r6
+ adds r4, r7, lr
+ adc r4, r6, #0x1000
+ mov r4, r4, asr #0xd
+ str r4, [r1, #0x0]
+ ldr r5, [r0, #0x4]
+ umull r6, r12, r3, r5
+ mov r4, r5, asr #0x1f
+ mla r12, r3, r4, r12
+ mla r12, r2, r5, r12
+ adds r4, r6, lr
+ adc r4, r12, #0x1000
+ mov r4, r4, asr #0xd
+ str r4, [r1, #0x4]
+ ldr r12, [r0, #0x8]
+ umull r5, r4, r3, r12
+ mov r0, r12, asr #0x1f
+ adds r5, r5, lr
+ mla r4, r3, r0, r4
+ mla r4, r2, r12, r4
+ adc r0, r4, #0x1000
+ mov r0, r0, asr #0xd
+ str r0, [r1, #0x8]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020C53AC: .word 0x04000280
+_020C53B0: .word 0x04000290
+_020C53B4: .word 0x04000298
+_020C53B8: .word 0x040002B0
+_020C53BC: .word 0x040002B8
+_020C53C0: .word 0x040002B4
+_020C53C4: .word 0x040002A0
+
+ arm_func_start VEC_Mag
+VEC_Mag:
+ ldr r2, [r0, #0x4]
+ ldr r3, [r0, #0x0]
+ smull r12, r1, r2, r2
+ smlal r12, r1, r3, r3
+ ldr r0, [r0, #0x8]
+ ldr r3, _020C5424 ; =0x040002B0
+ smlal r12, r1, r0, r0
+ mov r2, #0x1
+ mov r1, r1, lsl #0x2
+ ldr r0, _020C5428 ; =0x040002B8
+ strh r2, [r3, #0x0]
+ mov r2, r12, lsl #0x2
+ str r2, [r0, #0x0]
+ orr r1, r1, r12, lsr #0x1e
+ str r1, [r0, #0x4]
+_020C5404:
+ ldrh r0, [r3, #0x0]
+ ands r0, r0, #0x8000
+ bne _020C5404
+ ldr r0, _020C542C ; =0x040002B4
+ ldr r0, [r0, #0x0]
+ add r0, r0, #0x1
+ mov r0, r0, asr #0x1
+ bx lr
+ .balign 4
+_020C5424: .word 0x040002B0
+_020C5428: .word 0x040002B8
+_020C542C: .word 0x040002B4
+
+ arm_func_start VEC_Fx16CrossProduct
+VEC_Fx16CrossProduct: ; 0x020C5430
+ stmdb sp!, {r4-r6,lr}
+ ldrsh r4, [r1, #0x4]
+ ldrsh r12, [r0, #0x2]
+ ldrsh lr, [r0, #0x0]
+ ldrsh r3, [r1, #0x2]
+ ldrsh r6, [r0, #0x4]
+ ldrsh r1, [r1, #0x0]
+ mul r5, r12, r4
+ mul r0, r6, r3
+ sub r0, r5, r0
+ add r0, r0, #0x800
+ mov r0, r0, asr #0xc
+ mul r5, r6, r1
+ mul r4, lr, r4
+ sub r4, r5, r4
+ add r4, r4, #0x800
+ mul r3, lr, r3
+ mul r1, r12, r1
+ sub r1, r3, r1
+ add r1, r1, #0x800
+ strh r0, [r2, #0x0]
+ mov r0, r4, asr #0xc
+ strh r0, [r2, #0x2]
+ mov r0, r1, asr #0xc
+ strh r0, [r2, #0x4]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start VEC_CrossProduct
+VEC_CrossProduct:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r12, [r1, #0x8]
+ ldr r9, [r0, #0x4]
+ ldr r3, [r0, #0x0]
+ ldr r11, [r1, #0x4]
+ ldr r0, [r0, #0x8]
+ ldr r10, [r1, #0x0]
+ smull r4, r7, r9, r12
+ smull r1, r6, r0, r11
+ subs r8, r4, r1
+ smull r5, r4, r0, r10
+ smull lr, r12, r3, r12
+ smull r1, r0, r3, r11
+ smull r10, r3, r9, r10
+ sbc r6, r7, r6
+ mov r9, #0x800
+ adds r7, r8, r9
+ adc r6, r6, #0x0
+ subs r8, r5, lr
+ sbc r5, r4, r12
+ adds r8, r8, r9
+ mov r4, r7, lsr #0xc
+ adc r5, r5, #0x0
+ subs r1, r1, r10
+ orr r4, r4, r6, lsl #0x14
+ mov r6, r8, lsr #0xc
+ sbc r0, r0, r3
+ adds r1, r1, r9
+ str r4, [r2, #0x0]
+ orr r6, r6, r5, lsl #0x14
+ adc r0, r0, #0x0
+ mov r1, r1, lsr #0xc
+ str r6, [r2, #0x4]
+ orr r1, r1, r0, lsl #0x14
+ str r1, [r2, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start VEC_Fx16DotProduct
+VEC_Fx16DotProduct: ; 0x020C5538
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrsh lr, [r0, #0x2]
+ ldrsh r12, [r1, #0x2]
+ ldrsh r3, [r0, #0x4]
+ ldrsh r2, [r1, #0x4]
+ ldrsh r5, [r0, #0x0]
+ ldrsh r4, [r1, #0x0]
+ smulbb r1, lr, r12
+ smulbb r0, r3, r2
+ smlabb r1, r5, r4, r1
+ add r0, r0, #0x800
+ adds r2, r1, r0
+ mov r1, r1, asr #0x1f
+ adc r1, r1, r0, asr #0x1f
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start VEC_DotProduct
+VEC_DotProduct:
+ stmdb sp!, {r4,lr}
+ ldr r3, [r0, #0x4]
+ ldr r2, [r1, #0x4]
+ ldr r12, [r0, #0x0]
+ smull r4, lr, r3, r2
+ ldr r2, [r1, #0x0]
+ ldr r3, [r0, #0x8]
+ smlal r4, lr, r12, r2
+ ldr r1, [r1, #0x8]
+ mov r0, #0x800
+ smlal r4, lr, r3, r1
+ adds r0, r4, r0
+ adc r1, lr, #0x0
+ mov r0, r0, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start VEC_Fx16Add
+VEC_Fx16Add: ; 0x020C55CC
+ ldrsh r12, [r0, #0x0]
+ ldrsh r3, [r1, #0x0]
+ add r3, r12, r3
+ strh r3, [r2, #0x0]
+ ldrsh r12, [r0, #0x2]
+ ldrsh r3, [r1, #0x2]
+ add r3, r12, r3
+ strh r3, [r2, #0x2]
+ ldrsh r3, [r0, #0x4]
+ ldrsh r0, [r1, #0x4]
+ add r0, r3, r0
+ strh r0, [r2, #0x4]
+ bx lr
+
+ arm_func_start VEC_Subtract
+VEC_Subtract: ; 0x020C5600
+ ldr r12, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ sub r3, r12, r3
+ str r3, [r2, #0x0]
+ ldr r12, [r0, #0x4]
+ ldr r3, [r1, #0x4]
+ sub r3, r12, r3
+ str r3, [r2, #0x4]
+ ldr r3, [r0, #0x8]
+ ldr r0, [r1, #0x8]
+ sub r0, r3, r0
+ str r0, [r2, #0x8]
+ bx lr
+
+ arm_func_start VEC_Add
+VEC_Add: ; 0x020C5634
+ ldr r12, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ add r3, r12, r3
+ str r3, [r2, #0x0]
+ ldr r12, [r0, #0x4]
+ ldr r3, [r1, #0x4]
+ add r3, r12, r3
+ str r3, [r2, #0x4]
+ ldr r3, [r0, #0x8]
+ ldr r0, [r1, #0x8]
+ add r0, r3, r0
+ str r0, [r2, #0x8]
+ bx lr
+
+ arm_func_start FX_Modf
+FX_Modf: ; 0x020C5668
+ stmdb sp!, {r4,lr}
+ cmp r0, #0x0
+ ble _020C5704
+ cmp r1, #0x0
+ ble _020C56B4
+ cmp r1, r0
+ movgt r3, r0
+ movgt r4, #0x0
+ movgt r0, #0x1
+ bgt _020C57C8
+ cmp r1, r0
+ movlt r3, r1
+ movlt r1, r0
+ movlt r4, #0x4000
+ movlt r0, #0x0
+ blt _020C57C8
+ mov r0, #0x2000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C56B4:
+ cmp r1, #0x0
+ bge _020C56F8
+ rsb r1, r1, #0x0
+ cmp r1, r0
+ movlt r3, r1
+ movlt r1, r0
+ movlt r4, #0x4000
+ movlt r0, #0x1
+ blt _020C57C8
+ cmp r1, r0
+ movgt r3, r0
+ movgt r4, #0x8000
+ movgt r0, #0x0
+ bgt _020C57C8
+ mov r0, #0x6000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C56F8:
+ mov r0, #0x4000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C5704:
+ cmp r0, #0x0
+ bge _020C57B4
+ cmp r1, #0x0
+ rsb r2, r0, #0x0
+ bge _020C5760
+ rsb r1, r1, #0x0
+ cmp r1, r2
+ movgt r0, #0x8000
+ rsbgt r4, r0, #0x0
+ movgt r3, r2
+ movgt r0, #0x1
+ bgt _020C57C8
+ cmp r1, r2
+ bge _020C5754
+ mov r0, #0x4000
+ mov r3, r1
+ mov r1, r2
+ rsb r4, r0, #0x0
+ mov r0, #0x0
+ b _020C57C8
+_020C5754:
+ mov r0, #0xa000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C5760:
+ cmp r1, #0x0
+ ble _020C57A8
+ cmp r1, r2
+ bge _020C5788
+ mov r0, #0x4000
+ mov r3, r1
+ mov r1, r2
+ rsb r4, r0, #0x0
+ mov r0, #0x1
+ b _020C57C8
+_020C5788:
+ cmp r1, r2
+ movgt r4, #0x0
+ movgt r3, r2
+ movgt r0, r4
+ bgt _020C57C8
+ mov r0, #0xe000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C57A8:
+ mov r0, #0xc000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C57B4:
+ cmp r1, #0x0
+ movge r0, #0x0
+ movlt r0, #0x8000
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C57C8:
+ cmp r1, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ cmp r0, #0x0
+ beq _020C580C
+ mov r0, r3
+ bl FX_Div
+ mov r1, r0, asr #0x5
+ ldr r0, _020C5838 ; =0x02103A38
+ mov r1, r1, lsl #0x1
+ ldrsh r0, [r0, r1]
+ add r0, r4, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {r4,lr}
+ bx lr
+_020C580C:
+ mov r0, r3
+ bl FX_Div
+ mov r1, r0, asr #0x5
+ ldr r0, _020C5838 ; =0x02103A38
+ mov r1, r1, lsl #0x1
+ ldrsh r0, [r0, r1]
+ sub r0, r4, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020C5838: .word 0x02103A38
+
+ arm_func_start FUN_020C583C
+FUN_020C583C: ; 0x020C583C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ blt _020C58A4
+ cmp r0, #0x1000
+ ble _020C5880
+ bl FX_Inv
+ mov r1, r0, asr #0x5
+ ldr r0, _020C5924 ; =0x02103A38
+ mov r1, r1, lsl #0x1
+ ldrsh r0, [r0, r1]
+ add sp, sp, #0x4
+ rsb r0, r0, #0x4000
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {lr}
+ bx lr
+_020C5880:
+ cmp r0, #0x1000
+ movlt r1, r0, asr #0x5
+ ldrlt r0, _020C5924 ; =0x02103A38
+ movlt r1, r1, lsl #0x1
+ ldrlth r0, [r0, r1]
+ add sp, sp, #0x4
+ movge r0, #0x2000
+ ldmia sp!, {lr}
+ bx lr
+_020C58A4:
+ mov r1, #0x1000
+ rsb r1, r1, #0x0
+ cmp r0, r1
+ bge _020C58E4
+ rsb r0, r0, #0x0
+ bl FX_Inv
+ mov r1, r0, asr #0x5
+ ldr r0, _020C5924 ; =0x02103A38
+
+ arm_func_start FUN_020C58C4
+FUN_020C58C4: ; 0x020C58C4
+ mov r1, r1, lsl #0x1
+ ldrsh r0, [r0, r1]
+ add sp, sp, #0x4
+ sub r0, r0, #0x4000
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {lr}
+ bx lr
+_020C58E4:
+ cmp r0, r1
+ addle sp, sp, #0x4
+ movle r0, #0xe000
+ ldmleia sp!, {lr}
+ bxle lr
+ rsb r0, r0, #0x0
+ mov r1, r0, asr #0x5
+ ldr r0, _020C5924 ; =0x02103A38
+ mov r1, r1, lsl #0x1
+ ldrsh r0, [r0, r1]
+ rsb r0, r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020C5924: .word 0x02103A38
+
+ arm_func_start FUN_020C5928
+FUN_020C5928: ; 0x020C5928
+ cmp r0, #0x0
+ blt _020C5948
+ ldr r2, _020C596C ; =0x7FFFF000
+ ldr r3, _020C5970 ; =0x00000FFF
+ and r2, r0, r2
+ str r2, [r1, #0x0]
+ and r0, r0, r3
+ bx lr
+_020C5948:
+ ldr r2, _020C596C ; =0x7FFFF000
+ rsb r3, r0, #0x0
+ ldr r0, _020C5970 ; =0x00000FFF
+ and r2, r3, r2
+ rsb r2, r2, #0x0
+ and r0, r3, r0
+ str r2, [r1, #0x0]
+ rsb r0, r0, #0x0
+ bx lr
+ .balign 4
+_020C596C: .word 0x7FFFF000
+_020C5970: .word 0x00000FFF
+
+ arm_func_start FX_Init
+FX_Init: ; 0x020C5974
+ bx lr
diff --git a/asm/unk_10b724.s b/arm9/asm/unk_10b724.s
index cfa5f27a..cfa5f27a 100644
--- a/asm/unk_10b724.s
+++ b/arm9/asm/unk_10b724.s
diff --git a/arm9/global.inc b/arm9/global.inc
new file mode 100644
index 00000000..d25362f3
--- /dev/null
+++ b/arm9/global.inc
@@ -0,0 +1,3521 @@
+.extern CARD_CancelBackupAsync
+.extern CARD_GetResultCode
+.extern CARD_IdentifyBackup
+.extern CARD_Init
+.extern CARD_IsPulledOut
+.extern CARD_LockBackup
+.extern CARD_LockRom
+.extern CARD_TryWaitBackupAsync
+.extern CARD_UnlockBackup
+.extern CARD_UnlockRom
+.extern CARD_WaitBackupAsync
+.extern CARDi_ReadRom
+.extern CARDi_RequestStreamCommand
+.extern CP_RestoreContext
+.extern CP_SaveContext
+.extern CTRDG_Init
+.extern CTRDG_IsExisting
+.extern CTRDG_IsPulledOut
+.extern Call_FillMemWithValue
+.extern ConvertUIntToDecimalString
+.extern DC_FlushAll
+.extern DC_FlushRange
+.extern DC_InvalidateAll
+.extern DC_InvalidateRange
+.extern DC_StoreAll
+.extern DC_StoreRange
+.extern DC_WaitWriteBufferEmpty
+.extern DGT_Hash1GetDigest_R
+.extern DGT_Hash1Reset
+.extern DGT_Hash1SetSource
+.extern DGTi_hash2_arm4_small
+.extern ErrorHandling
+.extern FS_CloseFile
+.extern FS_ConvertPathToFileID
+.extern FS_FindArchive
+.extern FS_Init
+.extern FS_InitFile
+.extern FS_IsAvailable
+.extern FS_LoadOverlay
+.extern FS_LoadOverlayImage
+.extern FS_LoadOverlayImageAsync
+.extern FS_LoadOverlayInfo
+.extern FS_OpenFile
+.extern FS_OpenFileFast
+.extern FS_ReadFile
+.extern FS_SeekFile
+.extern FS_SetDefaultDMA
+.extern FS_StartOverlay
+.extern FS_TryLoadTable
+.extern FS_UnloadOverlay
+.extern FS_WaitAsync
+.extern FUNRTC_Init
+.extern FUN_0200019E
+.extern FUN_020002FE
+.extern SVC_WaitByLoop
+.extern OSi_ReferSymbol
+.extern FUN_02000DF4
+.extern FUN_02000E7C
+.extern FUN_02000EE8
+.extern FUN_02000F18
+.extern FUN_02000FA4
+.extern FUN_02000FE8
+.extern FUN_020010A8
+.extern FUN_02001204
+.extern FUN_02001300
+.extern FUN_020013E8
+.extern FUN_02001448
+.extern FUN_02001470
+.extern FUN_02001B8C
+.extern FUN_02001C14
+.extern FUN_02001C5C
+.extern FUN_02001C78
+.extern FUN_02001D2C
+.extern FUN_02001E5C
+.extern FUN_020020EC
+.extern FUN_02002198
+.extern FUN_020021AC
+.extern FUN_02002840
+.extern FUN_02002B60
+.extern FUN_02002B7C
+.extern FUN_02002BB8
+.extern FUN_02002C14
+.extern FUN_02002C50
+.extern FUN_02002C84
+.extern FUN_02002CC0
+.extern FUN_02002CF8
+.extern FUN_02002DB0
+.extern FUN_02002DE0
+.extern FUN_02002E14
+.extern FUN_02002E4C
+.extern FUN_02002ED0
+.extern FUN_02002EEC
+.extern FUN_02002F08
+.extern FUN_02002FD0
+.extern FUN_02002FEC
+.extern FUN_02003008
+.extern FUN_02003038
+.extern FUN_02003054
+.extern FUN_020030E8
+.extern FUN_02003108
+.extern FUN_020031FC
+.extern FUN_02003210
+.extern FUN_0200372C
+.extern FUN_020038E4
+.extern FUN_020038F0
+.extern FUN_02003974
+.extern FUN_02003B98
+.extern FUN_02003C10
+.extern FUN_020040F4
+.extern FUN_02004104
+.extern FUN_02004124
+.extern FUN_0200414C
+.extern FUN_0200415C
+.extern FUN_0200433C
+.extern FUN_02004724
+.extern FUN_020047C8
+.extern FUN_02004810
+.extern FUN_0200488C
+.extern FUN_02004DCC
+.extern FUN_02004E08
+.extern FUN_0200516C
+.extern FUN_020051F4
+.extern FUN_0200521C
+.extern FUN_02005308
+.extern FUN_02005350
+.extern FUN_0200538C
+.extern FUN_020053CC
+.extern FUN_02005404
+.extern FUN_02005410
+.extern FUN_0200541C
+.extern FUN_020054C8
+.extern FUN_020054F0
+.extern FUN_02005508
+.extern FUN_02005514
+.extern FUN_02005578
+.extern FUN_02005670
+.extern FUN_020056AC
+.extern FUN_02005C28
+.extern FUN_02005CBC
+.extern FUN_02005D20
+.extern FUN_02005E28
+.extern FUN_02005E64
+.extern FUN_02005E6C
+.extern FUN_02005E80
+.extern FUN_02005E90
+.extern FUN_02005F14
+.extern FUN_02005F60
+.extern FUN_02005FDC
+.extern FUN_020061E8
+.extern FUN_0200621C
+.extern FUN_02006234
+.extern FUN_02006260
+.extern FUN_02006268
+.extern FUN_02006278
+.extern FUN_0200627C
+.extern FUN_0200628C
+.extern FUN_02006290
+.extern FUN_02006528
+.extern FUN_02006548
+.extern FUN_02006564
+.extern FUN_02006670
+.extern FUN_020066F4
+.extern FUN_02006704
+.extern FUN_02006774
+.extern FUN_02006814
+.extern FUN_0200687C
+.extern FUN_020068C8
+.extern FUN_02006930
+.extern FUN_02006BB0
+.extern FUN_02006C08
+.extern FUN_02006C98
+.extern FUN_02006D98
+.extern FUN_02006ED4
+.extern FUN_020072E8
+.extern FUN_02007314
+.extern FUN_0200737C
+.extern FUN_02007390
+.extern FUN_020073A0
+.extern FUN_02007534
+.extern FUN_02007558
+.extern FUN_0200782C
+.extern FUN_020079E0
+.extern FUN_02007E68
+.extern FUN_02007E98
+.extern FUN_02007F20
+.extern FUN_020080D0
+.extern FUN_020081C4
+.extern FUN_02008AA4
+.extern FUN_02008BE0
+.extern FUN_02008C80
+.extern FUN_02008C9C
+.extern FUN_02008D24
+.extern FUN_02008DEC
+.extern FUN_02008E2C
+.extern FUN_02008F34
+.extern FUN_02008FEC
+.extern FUN_020090AC
+.extern FUN_02009168
+.extern FUN_020093A8
+.extern FUN_02009424
+.extern FUN_02009448
+.extern FUN_02009630
+.extern FUN_0200965C
+.extern FUN_02009668
+.extern FUN_020096B4
+.extern FUN_020096CC
+.extern FUN_02009A50
+.extern FUN_02009B04
+.extern FUN_02009B44
+.extern FUN_02009B78
+.extern FUN_02009C0C
+.extern FUN_02009C30
+.extern FUN_02009CF0
+.extern FUN_02009DAC
+.extern FUN_02009DE0
+.extern FUN_02009E04
+.extern FUN_02009E28
+.extern FUN_02009E88
+.extern FUN_02009EAC
+.extern FUN_02009F80
+.extern FUN_02009FA0
+.extern FUN_0200A208
+.extern FUN_0200A274
+.extern FUN_0200A2AC
+.extern FUN_0200A318
+.extern FUN_0200A344
+.extern FUN_0200A648
+.extern FUN_0200A738
+.extern FUN_0200A86C
+.extern FUN_0200A8B8
+.extern FUN_0200A8E0
+.extern FUN_0200A914
+.extern FUN_0200A968
+.extern FUN_0200A99C
+.extern FUN_0200A9C4
+.extern FUN_0200AA50
+.extern FUN_0200AA80
+.extern FUN_0200AA90
+.extern FUN_0200AB18
+.extern FUN_0200ABB4
+.extern FUN_0200ABC0
+.extern FUN_0200ABE4
+.extern FUN_0200AC0C
+.extern FUN_0200AC60
+.extern FUN_0200ACA4
+.extern FUN_0200ACC0
+.extern FUN_0200ACF8
+.extern FUN_0200AD18
+.extern FUN_0200AD38
+.extern FUN_0200AD5C
+.extern FUN_0200AD94
+.extern FUN_0200ADCC
+.extern FUN_0200AE04
+.extern FUN_0200AE38
+.extern FUN_0200AE70
+.extern FUN_0200AEA8
+.extern FUN_0200AEE0
+.extern FUN_0200AF18
+.extern FUN_0200AF50
+.extern FUN_0200AFF4
+.extern FUN_0200B02C
+.extern FUN_0200B064
+.extern FUN_0200B09C
+.extern FUN_0200B164
+.extern FUN_0200B19C
+.extern FUN_0200B1D4
+.extern FUN_0200B20C
+.extern FUN_0200B244
+.extern FUN_0200B278
+.extern FUN_0200B2AC
+.extern FUN_0200B350
+.extern FUN_0200B388
+.extern FUN_0200B410
+.extern FUN_0200B4A0
+.extern FUN_0200B4D8
+.extern FUN_0200B518
+.extern FUN_0200B534
+.extern FUN_0200B568
+.extern FUN_0200B59C
+.extern FUN_0200B628
+.extern FUN_0200B660
+.extern FUN_0200B698
+.extern FUN_0200B6D0
+.extern FUN_0200B708
+.extern FUN_0200B764
+.extern FUN_0200B7A8
+.extern FUN_0200B7B8
+.extern FUN_0200B870
+.extern FUN_0200B990
+.extern FUN_0200B9A8
+.extern FUN_0200B9EC
+.extern FUN_0200BA78
+.extern FUN_0200BB14
+.extern FUN_0200BB34
+.extern FUN_0200BB68
+.extern FUN_0200BB6C
+.extern FUN_0200BBF0
+.extern FUN_0200BC1C
+.extern FUN_0200BC30
+.extern FUN_0200BCE0
+.extern FUN_0200BD04
+.extern FUN_0200BD20
+.extern FUN_0200BE38
+.extern FUN_0200BF60
+.extern FUN_0200C00C
+.extern FUN_0200C06C
+.extern FUN_0200C0DC
+.extern FUN_0200C124
+.extern FUN_0200C13C
+.extern FUN_0200C154
+.extern FUN_0200C358
+.extern FUN_0200C368
+.extern FUN_0200C378
+.extern FUN_0200C388
+.extern FUN_0200C398
+.extern FUN_0200C3DC
+.extern FUN_0200C5A8
+.extern FUN_0200C61C
+.extern FUN_0200C63C
+.extern FUN_0200C644
+.extern FUN_0200C664
+.extern FUN_0200C66C
+.extern FUN_0200C6E4
+.extern FUN_0200C714
+.extern FUN_0200C75C
+.extern FUN_0200C7A0
+.extern FUN_0200C82C
+.extern FUN_0200C840
+.extern FUN_0200C884
+.extern FUN_0200C9D8
+.extern FUN_0200CA0C
+.extern FUN_0200CA44
+.extern FUN_0200CAB4
+.extern FUN_0200CABC
+.extern FUN_0200CAFC
+.extern FUN_0200CB00
+.extern FUN_0200CCA4
+.extern FUN_0200CCF8
+.extern FUN_0200CD64
+.extern FUN_0200CD68
+.extern FUN_0200D0BC
+.extern FUN_0200D0E0
+.extern FUN_0200D274
+.extern FUN_0200D300
+.extern FUN_0200D6F8
+.extern FUN_0200D858
+.extern FUN_0200DBFC
+.extern FUN_0200DC4C
+.extern FUN_0200DCA4
+.extern FUN_0200E1D0
+.extern FUN_0200E2D8
+.extern FUN_0200E308
+.extern FUN_0200E388
+.extern FUN_0200E394
+.extern FUN_0200E3A0
+.extern FUN_0200E3BC
+.extern FUN_02011B20
+.extern FUN_02012420
+.extern FUN_0201259C
+.extern FUN_020125D4
+.extern FUN_0201265C
+.extern FUN_020126B4
+.extern FUN_020126D8
+.extern FUN_020126FC
+.extern FUN_0201277C
+.extern FUN_020127A8
+.extern FUN_020127C0
+.extern FUN_02012838
+.extern FUN_02012870
+.extern FUN_02012880
+.extern FUN_020128A0
+.extern FUN_02012CC8
+.extern FUN_02012CDC
+.extern FUN_02012DE4
+.extern FUN_0201318C
+.extern FUN_02013194
+.extern FUN_0201327C
+.extern FUN_020132BC
+.extern FUN_02013364
+.extern FUN_02013388
+.extern FUN_020133AC
+.extern FUN_020133C8
+.extern FUN_020133E8
+.extern FUN_0201343C
+.extern FUN_02013440
+.extern FUN_02013690
+.extern FUN_020136C0
+.extern FUN_020136E0
+.extern FUN_020136F8
+.extern FUN_0201373C
+.extern FUN_02013754
+.extern FUN_0201385C
+.extern FUN_02013918
+.extern FUN_02013920
+.extern FUN_02013924
+.extern FUN_02013928
+.extern FUN_02013960
+.extern FUN_020139D8
+.extern FUN_02013A10
+.extern FUN_02013A30
+.extern FUN_02013A9C
+.extern FUN_02013B5C
+.extern FUN_02013B68
+.extern FUN_02013B74
+.extern FUN_02013BC8
+.extern FUN_02013BE4
+.extern FUN_02013C0C
+.extern FUN_02013C18
+.extern FUN_020142EC
+.extern FUN_020143A8
+.extern FUN_020143D0
+.extern FUN_02014BF4
+.extern FUN_02014C28
+.extern FUN_02014C3C
+.extern FUN_02014C54
+.extern FUN_02014D7C
+.extern FUN_02014D9C
+.extern FUN_02015CF8
+.extern FUN_02015E30
+.extern FUN_02015E60
+.extern FUN_02015EF4
+.extern FUN_02015F10
+.extern FUN_02015F1C
+.extern FUN_02015F34
+.extern FUN_020161A4
+.extern FUN_020163BC
+.extern FUN_02016438
+.extern FUN_02016464
+.extern FUN_0201669C
+.extern FUN_020166C8
+.extern FUN_0201681C
+.extern FUN_02016828
+.extern FUN_020168D0
+.extern FUN_02016998
+.extern FUN_020169D8
+.extern FUN_02016A18
+.extern FUN_02016A8C
+.extern FUN_02016AF8
+.extern FUN_02016B94
+.extern FUN_02016BBC
+.extern FUN_02016C18
+.extern FUN_020178A0
+.extern FUN_020178BC
+.extern FUN_0201797C
+.extern FUN_020179E0
+.extern FUN_02017B48
+.extern FUN_02017B54
+.extern FUN_02017CD0
+.extern FUN_02017CE8
+.extern FUN_02017DFC
+.extern FUN_02017E14
+.extern FUN_02017F18
+.extern FUN_02017FB4
+.extern FUN_02017FE4
+.extern FUN_02018148
+.extern FUN_02018170
+.extern FUN_02018540
+.extern FUN_020186B4
+.extern FUN_02018744
+.extern FUN_0201886C
+.extern FUN_02018884
+.extern FUN_02018FF4
+.extern FUN_0201901C
+.extern FUN_02019048
+.extern FUN_02019064
+.extern FUN_02019150
+.extern FUN_02019178
+.extern FUN_020191A4
+.extern FUN_020191D0
+.extern FUN_02019220
+.extern FUN_02019548
+.extern FUN_02019570
+.extern FUN_0201958C
+.extern FUN_02019620
+.extern FUN_02019658
+.extern FUN_020196F4
+.extern FUN_0201974C
+.extern FUN_0201A8C8
+.extern FUN_0201AB08
+.extern FUN_0201AB0C
+.extern FUN_0201AB10
+.extern FUN_0201AB14
+.extern FUN_0201AB18
+.extern FUN_0201AB60
+.extern FUN_0201AC68
+.extern FUN_0201AEE4
+.extern FUN_0201AFBC
+.extern FUN_0201B234
+.extern FUN_0201B5CC
+.extern FUN_0201B6C4
+.extern FUN_0201B6C8
+.extern FUN_0201B6D0
+.extern FUN_0201B76C
+.extern FUN_0201B7DC
+.extern FUN_0201B8B8
+.extern FUN_0201B8E0
+.extern FUN_0201B914
+.extern FUN_0201B93C
+.extern FUN_0201B970
+.extern FUN_0201B9D4
+.extern FUN_0201B9E0
+.extern FUN_0201B9EC
+.extern FUN_0201BA10
+.extern FUN_0201BA1C
+.extern FUN_0201BA60
+.extern FUN_0201BCBC
+.extern FUN_0201BD5C
+.extern FUN_0201BD70
+.extern FUN_0201BD7C
+.extern FUN_0201BD84
+.extern FUN_0201BDE0
+.extern FUN_0201BE3C
+.extern FUN_0201C05C
+.extern FUN_0201C1EC
+.extern FUN_0201C24C
+.extern FUN_0201C29C
+.extern FUN_0201C30C
+.extern FUN_0201C620
+.extern FUN_0201C638
+.extern FUN_0201CC08
+.extern FUN_0201CC24
+.extern FUN_0201CD04
+.extern FUN_0201CDD0
+.extern FUN_0201CE04
+.extern FUN_0201D040
+.extern FUN_0201D12C
+.extern FUN_0201D168
+.extern FUN_0201E00C
+.extern FUN_0201E08C
+.extern FUN_0201E0BC
+.extern FUN_0201E28C
+.extern FUN_0201E66C
+.extern FUN_0201E6D8
+.extern FUN_0201E6E4
+.extern FUN_0201E740
+.extern FUN_0201E74C
+.extern FUN_0201E788
+.extern FUN_0201E7A0
+.extern FUN_0201EB64
+.extern FUN_0201EB70
+.extern FUN_0201EB8C
+.extern FUN_0201EBA4
+.extern FUN_0201EC68
+.extern FUN_0201EC88
+.extern FUN_0201EC94
+.extern FUN_0201ED10
+.extern FUN_0201EEF0
+.extern FUN_0201EF70
+.extern FUN_0201EF90
+.extern FUN_0201EFE0
+.extern FUN_0201EFEC
+.extern FUN_0201F04C
+.extern FUN_0201F854
+.extern FUN_0201FD58
+.extern FUN_0201FDEC
+.extern FUN_0201FE94
+.extern FUN_0201FFC8
+.extern FUN_02020044
+.extern FUN_020200A0
+.extern FUN_020200BC
+.extern FUN_02020100
+.extern FUN_0202011C
+.extern FUN_02020128
+.extern FUN_02020130
+.extern FUN_020201DC
+.extern FUN_020201E4
+.extern FUN_02020208
+.extern FUN_0202022C
+.extern FUN_02020248
+.extern FUN_02020310
+.extern FUN_02020354
+.extern FUN_02020388
+.extern FUN_02020398
+.extern FUN_02020968
+.extern FUN_02020988
+.extern FUN_02020AFC
+.extern FUN_02021590
+.extern FUN_020215C8
+.extern FUN_020215E0
+.extern FUN_02021750
+.extern FUN_020218D8
+.extern FUN_02021934
+.extern FUN_0202199C
+.extern FUN_020219F4
+.extern FUN_02021A20
+.extern FUN_02021A4C
+.extern FUN_02021A74
+.extern FUN_02021CE0
+.extern FUN_02021D3C
+.extern FUN_02021E28
+.extern FUN_02021EF0
+.extern FUN_02021F2C
+.extern FUN_0202212C
+.extern FUN_02022294
+.extern FUN_020222AC
+.extern FUN_020222B4
+.extern FUN_020222C4
+.extern FUN_020222E8
+.extern FUN_020222F0
+.extern FUN_020222F8
+.extern FUN_02022300
+.extern FUN_02022308
+.extern FUN_02022310
+.extern FUN_02022318
+.extern FUN_020223BC
+.extern FUN_02022504
+.extern FUN_02022510
+.extern FUN_02022528
+.extern FUN_02022534
+.extern FUN_02022540
+.extern FUN_0202254C
+.extern FUN_020225F8
+.extern FUN_02022610
+.extern FUN_0202263C
+.extern FUN_02022720
+.extern FUN_020227FC
+.extern FUN_02022800
+.extern FUN_02022804
+.extern FUN_0202280C
+.extern FUN_0202282C
+.extern FUN_02022830
+.extern FUN_0202287C
+.extern FUN_02023788
+.extern FUN_02023794
+.extern FUN_02023818
+.extern FUN_0202381C
+.extern FUN_02023828
+.extern FUN_02023874
+.extern FUN_02023884
+.extern FUN_020238F4
+.extern FUN_0202390C
+.extern FUN_02023918
+.extern FUN_02023924
+.extern FUN_02023928
+.extern FUN_0202393C
+.extern FUN_0202395C
+.extern FUN_0202397C
+.extern FUN_0202398C
+.extern FUN_02023990
+.extern FUN_020239A0
+.extern FUN_020239BC
+.extern FUN_020239C0
+.extern FUN_020239C8
+.extern FUN_020239CC
+.extern FUN_020239D0
+.extern FUN_020239E4
+.extern FUN_02023A10
+.extern FUN_02023A28
+.extern FUN_02023A2C
+.extern FUN_02023A30
+.extern FUN_02023A54
+.extern FUN_02023A68
+.extern FUN_02023A70
+.extern FUN_02023A78
+.extern FUN_02023A88
+.extern FUN_02023A90
+.extern FUN_02023A9C
+.extern FUN_02023AA4
+.extern FUN_02023AF4
+.extern FUN_02023B0C
+.extern FUN_02023BD4
+.extern FUN_02023C90
+.extern FUN_02023D58
+.extern FUN_02023D6C
+.extern FUN_02023D80
+.extern FUN_020243C8
+.extern FUN_02024404
+.extern FUN_02024440
+.extern FUN_0202445C
+.extern FUN_020244A4
+.extern FUN_020244EC
+.extern FUN_02024504
+.extern FUN_02024518
+.extern FUN_02024550
+.extern FUN_020245F0
+.extern FUN_0202471C
+.extern FUN_0202498C
+.extern FUN_02024AF0
+.extern FUN_02024C84
+.extern FUN_02024CA4
+.extern FUN_02024CE0
+.extern FUN_02024D4C
+.extern FUN_02024D64
+.extern FUN_02024D80
+.extern FUN_02024DA0
+.extern FUN_02024EB4
+.extern FUN_02024EC0
+.extern FUN_02024ECC
+.extern FUN_02024ED8
+.extern FUN_02024EE8
+.extern FUN_02024F0C
+.extern FUN_02024F30
+.extern FUN_02024F44
+.extern FUN_02024FF4
+.extern FUN_02025084
+.extern FUN_02025128
+.extern FUN_02025238
+.extern FUN_02025244
+.extern FUN_0202524C
+.extern FUN_02025268
+.extern FUN_02025274
+.extern FUN_020252AC
+.extern FUN_020252C4
+.extern FUN_020252D0
+.extern FUN_020252DC
+.extern FUN_020252E8
+.extern FUN_020252F4
+.extern FUN_020253E0
+.extern FUN_02025484
+.extern FUN_02025490
+.extern FUN_020254A0
+.extern FUN_020254B4
+.extern FUN_020254C0
+.extern FUN_02025520
+.extern FUN_02025614
+.extern FUN_02025658
+.extern FUN_020256AC
+.extern FUN_020256BC
+.extern FUN_020256D0
+.extern FUN_020256DC
+.extern FUN_020257C0
+.extern FUN_020257C4
+.extern FUN_020257C8
+.extern FUN_020257CC
+.extern FUN_020257D0
+.extern FUN_020257D8
+.extern FUN_020257DC
+.extern FUN_020257E0
+.extern FUN_02025814
+.extern FUN_02025824
+.extern FUN_02025838
+.extern FUN_02025864
+.extern FUN_02025878
+.extern FUN_02025888
+.extern FUN_0202589C
+.extern FUN_020258B0
+.extern FUN_020258D4
+.extern FUN_02025A60
+.extern FUN_02025B60
+.extern FUN_02025B94
+.extern FUN_02025BE8
+.extern FUN_02025C30
+.extern FUN_02025C40
+.extern FUN_02025D6C
+.extern FUN_02025D94
+.extern FUN_02025DB0
+.extern FUN_020260C4
+.extern FUN_02026298
+.extern FUN_020266B0
+.extern FUN_020266C8
+.extern FUN_020268D4
+.extern FUN_02026908
+.extern FUN_02026970
+.extern FUN_020269A0
+.extern FUN_020269CC
+.extern FUN_020269D4
+.extern FUN_02026BC8
+.extern FUN_02026C00
+.extern FUN_02026CB4
+.extern FUN_02026CC4
+.extern FUN_02026FE4
+.extern FUN_02026FE8
+.extern FUN_02027008
+.extern FUN_02027044
+.extern FUN_0202708C
+.extern FUN_02027098
+.extern FUN_020270B4
+.extern FUN_020270D8
+.extern FUN_02027100
+.extern FUN_02027114
+.extern FUN_02027168
+.extern FUN_02027184
+.extern FUN_020271A4
+.extern FUN_02027210
+.extern FUN_02027264
+.extern FUN_02027478
+.extern FUN_020275D8
+.extern FUN_02027608
+.extern FUN_0202763C
+.extern FUN_0202769C
+.extern FUN_020276A8
+.extern FUN_02027710
+.extern FUN_02027740
+.extern FUN_0202787C
+.extern FUN_020278AC
+.extern FUN_020278DC
+.extern FUN_02027914
+.extern FUN_02027964
+.extern FUN_02027E24
+.extern FUN_02027E34
+.extern FUN_02027E5C
+.extern FUN_02027F04
+.extern FUN_02027FBC
+.extern FUN_02027FDC
+.extern FUN_02028048
+.extern FUN_02028074
+.extern FUN_02028094
+.extern FUN_020280B8
+.extern FUN_020280F4
+.extern FUN_02028174
+.extern FUN_02028190
+.extern FUN_020281B8
+.extern FUN_02028448
+.extern FUN_020286EC
+.extern FUN_02028700
+.extern FUN_02028754
+.extern FUN_02028788
+.extern FUN_020287A4
+.extern FUN_020287A8
+.extern FUN_020287C0
+.extern FUN_020287EC
+.extern FUN_02028810
+.extern FUN_0202881C
+.extern FUN_02028828
+.extern FUN_02028840
+.extern FUN_02028930
+.extern FUN_02028934
+.extern FUN_02028954
+.extern FUN_0202896C
+.extern FUN_020289A4
+.extern FUN_020289B0
+.extern FUN_02028A20
+.extern FUN_02028AD4
+.extern FUN_02028FA4
+.extern FUN_02029048
+.extern FUN_02029120
+.extern FUN_0202912C
+.extern FUN_02029138
+.extern FUN_0202914C
+.extern FUN_0202918C
+.extern FUN_0202920C
+.extern FUN_0202942C
+.extern FUN_02029500
+.extern FUN_02029880
+.extern FUN_020299C0
+.extern FUN_020299DC
+.extern FUN_02029ABC
+.extern FUN_02029AC8
+.extern FUN_02029ACC
+.extern FUN_02029AD0
+.extern FUN_02029AD8
+.extern FUN_02029AFC
+.extern FUN_02029B38
+.extern FUN_02029B3C
+.extern FUN_02029C08
+.extern FUN_02029C74
+.extern FUN_02029C80
+.extern FUN_02029C8C
+.extern FUN_02029CC8
+.extern FUN_02029CE0
+.extern FUN_02029CEC
+.extern FUN_02029D44
+.extern FUN_02029DD4
+.extern FUN_02029E0C
+.extern FUN_02029E2C
+.extern FUN_02029EBC
+.extern FUN_02029EC0
+.extern FUN_02029EC4
+.extern FUN_02029EE4
+.extern FUN_02029EF8
+.extern FUN_02029F04
+.extern FUN_02029F10
+.extern FUN_02029F14
+.extern FUN_02029F4C
+.extern FUN_02029F9C
+.extern FUN_02029FC8
+.extern FUN_0202A07C
+.extern FUN_0202A0A8
+.extern FUN_0202A0E8
+.extern FUN_0202A11C
+.extern FUN_0202A150
+.extern FUN_0202A170
+.extern FUN_0202A1B8
+.extern FUN_0202A240
+.extern FUN_0202A2C4
+.extern FUN_0202A3B4
+.extern FUN_0202A498
+.extern FUN_0202A520
+.extern FUN_0202A538
+.extern FUN_0202A578
+.extern FUN_0202A5CC
+.extern FUN_0202A5D0
+.extern FUN_0202A5D4
+.extern FUN_0202A5F4
+.extern FUN_0202A74C
+.extern FUN_0202A864
+.extern FUN_0202A8CC
+.extern FUN_0202A8D8
+.extern FUN_0202A8E4
+.extern FUN_0202A918
+.extern FUN_0202A988
+.extern FUN_0202A990
+.extern FUN_0202A9AC
+.extern FUN_0202A9B0
+.extern FUN_0202A9D0
+.extern FUN_0202AA00
+.extern FUN_0202AA14
+.extern FUN_0202AA20
+.extern FUN_0202AA38
+.extern FUN_0202AA40
+.extern FUN_0202AA58
+.extern FUN_0202AA74
+.extern FUN_0202AAA0
+.extern FUN_0202AAFC
+.extern FUN_0202AB40
+.extern FUN_0202AB68
+.extern FUN_0202AF70
+.extern FUN_0202AF88
+.extern FUN_0202AF9C
+.extern FUN_0202AFC0
+.extern FUN_0202AFFC
+.extern FUN_0202B020
+.extern FUN_0202B03C
+.extern FUN_0202B050
+.extern FUN_0202B21C
+.extern FUN_0202B3C4
+.extern FUN_0202B4B0
+.extern FUN_0202B710
+.extern FUN_0202B838
+.extern FUN_0202B844
+.extern FUN_0202B850
+.extern FUN_0202B85C
+.extern FUN_0202B868
+.extern FUN_0202B870
+.extern FUN_0202B87C
+.extern FUN_0202B8E4
+.extern FUN_0202B8F0
+.extern FUN_0202BD6C
+.extern FUN_0202BDF0
+.extern FUN_0202BE6C
+.extern FUN_0202BEDC
+.extern FUN_0202BFD8
+.extern FUN_0202C000
+.extern FUN_0202C108
+.extern FUN_0202C144
+.extern FUN_0202CB8C
+.extern FUN_0202D8B0
+.extern FUN_0202D8D0
+.extern FUN_0202DBE0
+.extern FUN_0202DCF8
+.extern FUN_0202DDE8
+.extern FUN_0202DE78
+.extern FUN_0202DFA4
+.extern FUN_0202E020
+.extern FUN_0202E044
+.extern FUN_0202E25C
+.extern FUN_0202E4C8
+.extern FUN_0202EDD8
+.extern FUN_0202EDF8
+.extern FUN_0202EE0C
+.extern FUN_0202EE24
+.extern FUN_0202EE44
+.extern FUN_0202EF18
+.extern FUN_0202EF84
+.extern FUN_0202F078
+.extern FUN_0202F094
+.extern FUN_0202F0B8
+.extern FUN_0202FA10
+.extern FUN_0202FA1C
+.extern FUN_0202FA48
+.extern FUN_0202FB80
+.extern FUN_02030A78
+.extern FUN_02030ADC
+.extern FUN_02030B3C
+.extern FUN_02030BC4
+.extern FUN_02030C4C
+.extern FUN_02030C58
+.extern FUN_02030E7C
+.extern FUN_02030F20
+.extern FUN_02030F40
+.extern FUN_02030F60
+.extern FUN_02030F74
+.extern FUN_02030F88
+.extern FUN_02030FA8
+.extern FUN_02030FC8
+.extern FUN_02030FE0
+.extern FUN_02031190
+.extern FUN_020311D0
+.extern FUN_020311DC
+.extern FUN_020311E8
+.extern FUN_020311F0
+.extern FUN_02031248
+.extern FUN_02031280
+.extern FUN_020312BC
+.extern FUN_020313B4
+.extern FUN_020313EC
+.extern FUN_02031400
+.extern FUN_02031438
+.extern FUN_02031588
+.extern FUN_020315D8
+.extern FUN_020315FC
+.extern FUN_0203168C
+.extern FUN_020316AC
+.extern FUN_020316E0
+.extern FUN_02031810
+.extern FUN_02031824
+.extern FUN_02031860
+.extern FUN_02031880
+.extern FUN_020318B4
+.extern FUN_020318C4
+.extern FUN_02031914
+.extern FUN_02031924
+.extern FUN_02031934
+.extern FUN_02031948
+.extern FUN_02031990
+.extern FUN_020319D8
+.extern FUN_020319F4
+.extern FUN_02031A08
+.extern FUN_02031A2C
+.extern FUN_02031A7C
+.extern FUN_02031AC8
+.extern FUN_02031AF4
+.extern FUN_02031B2C
+.extern FUN_02031B50
+.extern FUN_02031BD0
+.extern FUN_02031BF4
+.extern FUN_02031C2C
+.extern FUN_02031C54
+.extern FUN_02031C64
+.extern FUN_02032888
+.extern FUN_020328C0
+.extern FUN_020328F4
+.extern FUN_02032B6C
+.extern FUN_02032DAC
+.extern FUN_020334E8
+.extern FUN_02033534
+.extern FUN_02033564
+.extern FUN_02033578
+.extern FUN_020335B8
+.extern FUN_020335F0
+.extern FUN_02033678
+.extern FUN_020337E8
+.extern FUN_0203384C
+.extern FUN_02033E74
+.extern FUN_02033ED0
+.extern FUN_02033F20
+.extern FUN_02033F70
+.extern FUN_02034188
+.extern FUN_020344AC
+.extern FUN_020344D8
+.extern FUN_020344FC
+.extern FUN_0203450C
+.extern FUN_0203451C
+.extern FUN_02034678
+.extern FUN_020346CC
+.extern FUN_02034774
+.extern FUN_02034788
+.extern FUN_020347B0
+.extern FUN_020347C4
+.extern FUN_02034824
+.extern FUN_0203484C
+.extern FUN_02034860
+.extern FUN_0203487C
+.extern FUN_02034898
+.extern FUN_020348B4
+.extern FUN_020348E4
+.extern FUN_02034908
+.extern FUN_02034930
+.extern FUN_02034944
+.extern FUN_02034964
+.extern FUN_02034998
+.extern FUN_020349D8
+.extern FUN_020349E4
+.extern FUN_02034A04
+.extern FUN_02034A60
+.extern FUN_02034AC8
+.extern FUN_02034AF0
+.extern FUN_02034AF8
+.extern FUN_02034B00
+.extern FUN_02034B64
+.extern FUN_02034B6C
+.extern FUN_02034B74
+.extern FUN_02034BAC
+.extern FUN_02034BDC
+.extern FUN_02034C0C
+.extern FUN_02034C24
+.extern FUN_02034C34
+.extern FUN_02034D2C
+.extern FUN_02034D44
+.extern FUN_02034DC4
+.extern FUN_02034DC8
+.extern FUN_02034DCC
+.extern FUN_02034DD0
+.extern FUN_02034DD4
+.extern FUN_02034DE8
+.extern FUN_02034DEC
+.extern FUN_02034DF4
+.extern FUN_02034DFC
+.extern FUN_02034E04
+.extern FUN_02034E0C
+.extern FUN_02034E10
+.extern FUN_02034E18
+.extern FUN_02034E20
+.extern FUN_02034E24
+.extern FUN_02034E28
+.extern FUN_02034E30
+.extern FUN_02034E48
+.extern FUN_02034E60
+.extern FUN_02034E8C
+.extern FUN_02034E90
+.extern FUN_02034EC4
+.extern FUN_02034EF8
+.extern FUN_02034F1C
+.extern FUN_02034F40
+.extern FUN_02034F88
+.extern FUN_02034FC0
+.extern FUN_02034FE4
+.extern FUN_02035068
+.extern FUN_020351A0
+.extern FUN_02035D04
+.extern FUN_02035E50
+.extern FUN_02036A78
+.extern FUN_02036AB8
+.extern FUN_02036B90
+.extern FUN_02036BC4
+.extern FUN_02036BDC
+.extern FUN_02036D94
+.extern FUN_02036DD4
+.extern FUN_02037024
+.extern FUN_02037350
+.extern FUN_02037394
+.extern FUN_0203739C
+.extern FUN_020373AC
+.extern FUN_020373C4
+.extern FUN_020373D4
+.extern FUN_02037760
+.extern FUN_02037778
+.extern FUN_020377A8
+.extern FUN_020377AC
+.extern FUN_020377B0
+.extern FUN_020377C8
+.extern FUN_0203780C
+.extern FUN_0203789C
+.extern FUN_020378FC
+.extern FUN_02037944
+.extern FUN_020379F8
+.extern FUN_02037A1C
+.extern FUN_02037A40
+.extern FUN_02037A48
+.extern FUN_02037A70
+.extern FUN_02037A78
+.extern FUN_02037B44
+.extern FUN_02037BB0
+.extern FUN_02037C00
+.extern FUN_02037CF0
+.extern FUN_02037D5C
+.extern FUN_02037D60
+.extern FUN_02037E18
+.extern FUN_02037E80
+.extern FUN_02037E90
+.extern FUN_02037EB8
+.extern FUN_02037F2C
+.extern FUN_02037F58
+.extern FUN_02037FC4
+.extern FUN_02037FE4
+.extern FUN_020380CC
+.extern FUN_02038130
+.extern FUN_020383D8
+.extern FUN_020383F8
+.extern FUN_0203842C
+.extern FUN_0203846C
+.extern FUN_020385CC
+.extern FUN_02038680
+.extern FUN_020386A4
+.extern FUN_020386B4
+.extern FUN_020386E0
+.extern FUN_02038790
+.extern FUN_02038804
+.extern FUN_02038814
+.extern FUN_02038824
+.extern FUN_02038854
+.extern FUN_02038864
+.extern FUN_0203888C
+.extern FUN_020388B4
+.extern FUN_020389CC
+.extern FUN_02038AD0
+.extern FUN_02038AF4
+.extern FUN_02038B6C
+.extern FUN_02038C78
+.extern FUN_02038CA8
+.extern FUN_02038CD8
+.extern FUN_02038D10
+.extern FUN_02038EB0
+.extern FUN_02039438
+.extern FUN_02039460
+.extern FUN_020394B8
+.extern FUN_020394F0
+.extern FUN_02039504
+.extern FUN_02039528
+.extern FUN_0203953C
+.extern FUN_02039550
+.extern FUN_02039564
+.extern FUN_0203959C
+.extern FUN_020395BC
+.extern FUN_020395F4
+.extern FUN_02039618
+.extern FUN_0203962C
+.extern FUN_02039640
+.extern FUN_0203965C
+.extern FUN_02039678
+.extern FUN_02039694
+.extern FUN_02039874
+.extern FUN_0203989C
+.extern FUN_020399A0
+.extern FUN_020399A4
+.extern FUN_020399A8
+.extern FUN_020399B4
+.extern FUN_02039A10
+.extern FUN_02039A28
+.extern FUN_02039A40
+.extern FUN_02039A5C
+.extern FUN_02039A78
+.extern FUN_02039A90
+.extern FUN_02039AAC
+.extern FUN_02039ACC
+.extern FUN_02039AF8
+.extern FUN_02039B28
+.extern FUN_02039B50
+.extern FUN_02039B78
+.extern FUN_02039BA0
+.extern FUN_02039BBC
+.extern FUN_02039BDC
+.extern FUN_02039C08
+.extern FUN_02039C40
+.extern FUN_02039C78
+.extern FUN_02039CE4
+.extern FUN_02039CF8
+.extern FUN_02039D10
+.extern FUN_02039D48
+.extern FUN_02039D78
+.extern FUN_02039DAC
+.extern FUN_02039DC4
+.extern FUN_02039DD0
+.extern FUN_02039E04
+.extern FUN_02039E38
+.extern FUN_02039E50
+.extern FUN_02039E68
+.extern FUN_02039E84
+.extern FUN_02039EC0
+.extern FUN_02039EE8
+.extern FUN_02039F0C
+.extern FUN_02039F30
+.extern FUN_02039F58
+.extern FUN_02039F88
+.extern FUN_02039FB8
+.extern FUN_02039FDC
+.extern FUN_0203A00C
+.extern FUN_0203A038
+.extern FUN_0203A04C
+.extern FUN_0203A098
+.extern FUN_0203A0FC
+.extern FUN_0203A13C
+.extern FUN_0203A188
+.extern FUN_0203A210
+.extern FUN_0203A288
+.extern FUN_0203A2C4
+.extern FUN_0203A304
+.extern FUN_0203A340
+.extern FUN_0203A388
+.extern FUN_0203A3C4
+.extern FUN_0203A400
+.extern FUN_0203A45C
+.extern FUN_0203A484
+.extern FUN_0203A4D0
+.extern FUN_0203A560
+.extern FUN_0203A590
+.extern FUN_0203A5D8
+.extern FUN_0203A608
+.extern FUN_0203A630
+.extern FUN_0203A780
+.extern FUN_0203A830
+.extern FUN_0203A85C
+.extern FUN_0203A878
+.extern FUN_0203A8B8
+.extern FUN_0203A9F0
+.extern FUN_0203AA90
+.extern FUN_0203AAA0
+.extern FUN_0203AB44
+.extern FUN_0203AB74
+.extern FUN_0203AB8C
+.extern FUN_0203AC14
+.extern FUN_0203AC9C
+.extern FUN_0203ACC4
+.extern FUN_0203AD08
+.extern FUN_0203AD54
+.extern FUN_0203ADC4
+.extern FUN_0203AE4C
+.extern FUN_0203AED4
+.extern FUN_0203AF34
+.extern FUN_0203AF58
+.extern FUN_0203AF84
+.extern FUN_0203AFA4
+.extern FUN_0203AFC4
+.extern FUN_0203B024
+.extern FUN_0203B148
+.extern FUN_0203B1F0
+.extern FUN_0203B2E0
+.extern FUN_0203B3B0
+.extern FUN_0203B3C0
+.extern FUN_0203B3DC
+.extern FUN_0203B3F8
+.extern FUN_0203B440
+.extern FUN_0203B468
+.extern FUN_0203B500
+.extern FUN_0203B544
+.extern FUN_0203B574
+.extern FUN_0203B5B8
+.extern FUN_0203B618
+.extern FUN_0203B640
+.extern FUN_0203B724
+.extern FUN_0203B758
+.extern FUN_0203B790
+.extern FUN_0203B7D8
+.extern FUN_0203B7F0
+.extern FUN_0203B81C
+.extern FUN_0203B85C
+.extern FUN_0203B8A0
+.extern FUN_0203B8E4
+.extern FUN_0203B914
+.extern FUN_0203B944
+.extern FUN_0203B968
+.extern FUN_0203B9B4
+.extern FUN_0203BA3C
+.extern FUN_0203BAB0
+.extern FUN_0203BAF4
+.extern FUN_0203BB34
+.extern FUN_0203BB80
+.extern FUN_0203BB84
+.extern FUN_0203BB88
+.extern FUN_0203BB8C
+.extern FUN_0203BC1C
+.extern FUN_0203BC2C
+.extern FUN_0203BCBC
+.extern FUN_0203BCCC
+.extern FUN_0203BCD8
+.extern FUN_0203BD08
+.extern FUN_0203BD28
+.extern FUN_0203BDB8
+.extern FUN_0203BE50
+.extern FUN_0203BE68
+.extern FUN_0203BE80
+.extern FUN_0203BECC
+.extern FUN_0203BF00
+.extern FUN_0203BF20
+.extern FUN_0203BF2C
+.extern FUN_0203BF84
+.extern FUN_0203BFEC
+.extern FUN_0203C054
+.extern FUN_0203C090
+.extern FUN_0203C0CC
+.extern FUN_0203C0FC
+.extern FUN_0203C118
+.extern FUN_0203C12C
+.extern FUN_0203C174
+.extern FUN_0203C1AC
+.extern FUN_0203C200
+.extern FUN_0203C278
+.extern FUN_0203C2C4
+.extern FUN_0203C2E0
+.extern FUN_0203C2F0
+.extern FUN_0203C300
+.extern FUN_0203C32C
+.extern FUN_0203C33C
+.extern FUN_0203C368
+.extern FUN_0203C3C8
+.extern FUN_0203C3E8
+.extern FUN_0203C430
+.extern FUN_0203C460
+.extern FUN_0203C4B0
+.extern FUN_0203C4F0
+.extern FUN_0203C520
+.extern FUN_0203C58C
+.extern FUN_0203C5BC
+.extern FUN_0203C614
+.extern FUN_0203C680
+.extern FUN_0203C6C4
+.extern FUN_0203C70C
+.extern FUN_0203C730
+.extern FUN_0203C788
+.extern FUN_0203C7E4
+.extern FUN_0203C7F4
+.extern FUN_0203C820
+.extern FUN_0203C844
+.extern FUN_0203C874
+.extern FUN_0203C8B4
+.extern FUN_0203C8E4
+.extern FUN_0203C930
+.extern FUN_0203C960
+.extern FUN_0203C990
+.extern FUN_0203CA20
+.extern FUN_0203CA2C
+.extern FUN_0203CA5C
+.extern FUN_0203CAE8
+.extern FUN_0203CB08
+.extern FUN_0203CB20
+.extern FUN_0203CB48
+.extern FUN_0203CB60
+.extern FUN_0203CB70
+.extern FUN_0203CBBC
+.extern FUN_0203CBE8
+.extern FUN_0203CC88
+.extern FUN_0203CD20
+.extern FUN_0203CDB8
+.extern FUN_0203CDC4
+.extern FUN_0203CDD0
+.extern FUN_0203CE00
+.extern FUN_0203CE0C
+.extern FUN_0203CE8C
+.extern FUN_0203CEBC
+.extern FUN_0203CF04
+.extern FUN_0203CF34
+.extern FUN_0203CF64
+.extern FUN_0203CF94
+.extern FUN_0203CFC4
+.extern FUN_0203CFC8
+.extern FUN_0203D050
+.extern FUN_0203D0A4
+.extern FUN_0203D0F8
+.extern FUN_0203D134
+.extern FUN_0203D140
+.extern FUN_0203D150
+.extern FUN_0203D178
+.extern FUN_0203D194
+.extern FUN_0203D1A4
+.extern FUN_0203D1C0
+.extern FUN_0203D214
+.extern FUN_0203D23C
+.extern FUN_0203D248
+.extern FUN_0203D278
+.extern FUN_0203D2A4
+.extern FUN_0203D2E4
+.extern FUN_0203D330
+.extern FUN_0203D33C
+.extern FUN_0203D36C
+.extern FUN_0203D3A4
+.extern FUN_0203D3DC
+.extern FUN_0203D448
+.extern FUN_0203D458
+.extern FUN_0203D490
+.extern FUN_0203D4E8
+.extern FUN_0203D528
+.extern FUN_0203D560
+.extern FUN_0203D5B0
+.extern FUN_0203D5F8
+.extern FUN_0203D60C
+.extern FUN_0203D61C
+.extern FUN_0203D630
+.extern FUN_0203D66C
+.extern FUN_0203D6C4
+.extern FUN_0203D728
+.extern FUN_0203D738
+.extern FUN_0203D774
+.extern FUN_0203D7DC
+.extern FUN_0203D834
+.extern FUN_0203D868
+.extern FUN_0203D874
+.extern FUN_0203D8A0
+.extern FUN_0203D8D0
+.extern FUN_0203D8E8
+.extern FUN_0203D8EC
+.extern FUN_0203D920
+.extern FUN_0203D938
+.extern FUN_0203D948
+.extern FUN_0203D958
+.extern FUN_0203D998
+.extern FUN_0203D9E8
+.extern FUN_0203DA78
+.extern FUN_0203DAB0
+.extern FUN_0203DAE8
+.extern FUN_0203DB38
+.extern FUN_0203DB88
+.extern FUN_0203DBD4
+.extern FUN_0203DC00
+.extern FUN_0203DC58
+.extern FUN_0203DC70
+.extern FUN_0203DC88
+.extern FUN_0203DCA0
+.extern FUN_0203DCB8
+.extern FUN_0203DCC8
+.extern FUN_0203DCD8
+.extern FUN_0203DCE8
+.extern FUN_0203DCF8
+.extern FUN_0203DD08
+.extern FUN_0203DD18
+.extern FUN_0203DD34
+.extern FUN_0203DD50
+.extern FUN_0203DD60
+.extern FUN_0203DE00
+.extern FUN_0203DE4C
+.extern FUN_0203DE58
+.extern FUN_0203DE80
+.extern FUN_0203DEA8
+.extern FUN_0203DEC4
+.extern FUN_0203DEF8
+.extern FUN_0203DF2C
+.extern FUN_0203DF38
+.extern FUN_0203DF64
+.extern FUN_0203DF84
+.extern FUN_0203DFA8
+.extern FUN_0203DFE0
+.extern FUN_0203E018
+.extern FUN_0203E054
+.extern FUN_0203E078
+.extern FUN_0203E0CC
+.extern FUN_0203E120
+.extern FUN_0203E138
+.extern FUN_0203E168
+.extern FUN_0203E254
+.extern FUN_0203E258
+.extern FUN_0203E29C
+.extern FUN_0203E2F8
+.extern FUN_0203E35C
+.extern FUN_0203E38C
+.extern FUN_0203E3D0
+.extern FUN_0203E408
+.extern FUN_0203E440
+.extern FUN_0203E470
+.extern FUN_0203E4A0
+.extern FUN_0203E4B0
+.extern FUN_0203E4D8
+.extern FUN_0203E4F0
+.extern FUN_0203E510
+.extern FUN_0203E568
+.extern FUN_0203E5DC
+.extern FUN_0203E674
+.extern FUN_0203E684
+.extern FUN_0203E6B4
+.extern FUN_0203E6C4
+.extern FUN_0203E6FC
+.extern FUN_0203E72C
+.extern FUN_0203E744
+.extern FUN_0203E774
+.extern FUN_0203E7F0
+.extern FUN_0203E81C
+.extern FUN_0203E848
+.extern FUN_0203E858
+.extern FUN_0203E870
+.extern FUN_0203E894
+.extern FUN_0203E8C4
+.extern FUN_0203E8F4
+.extern FUN_0203E928
+.extern FUN_0203E940
+.extern FUN_0203E954
+.extern FUN_0203E968
+.extern FUN_0203E9CC
+.extern FUN_0203EA68
+.extern FUN_0203EA90
+.extern FUN_0203EAB0
+.extern FUN_0203EB20
+.extern FUN_0203EB48
+.extern FUN_0203EB88
+.extern FUN_0203EBC8
+.extern FUN_0203EBE4
+.extern FUN_0203ECAC
+.extern FUN_0203ECD8
+.extern FUN_0203ECF4
+.extern FUN_0203ED10
+.extern FUN_0203ED70
+.extern FUN_0203EDA4
+.extern FUN_0203EDC8
+.extern FUN_0203EDE0
+.extern FUN_0203EE08
+.extern FUN_0203EE18
+.extern FUN_0203EE28
+.extern FUN_0203EE58
+.extern FUN_0203EE68
+.extern FUN_0203EE78
+.extern FUN_0203EE98
+.extern FUN_0203EED8
+.extern FUN_0203EF58
+.extern FUN_0203F00C
+.extern FUN_0203F020
+.extern FUN_0203F034
+.extern FUN_0203F058
+.extern FUN_0203F07C
+.extern FUN_0203F110
+.extern FUN_0203F174
+.extern FUN_0203F19C
+.extern FUN_0203F234
+.extern FUN_0203F254
+.extern FUN_0203F26C
+.extern FUN_0203F2AC
+.extern FUN_0203F2E4
+.extern FUN_0203F31C
+.extern FUN_0203F348
+.extern FUN_0203F38C
+.extern FUN_0203F39C
+.extern FUN_0203F3AC
+.extern FUN_0203F418
+.extern FUN_0203F44C
+.extern FUN_0203F484
+.extern FUN_0203F4D8
+.extern FUN_0203F508
+.extern FUN_0203F5D4
+.extern FUN_0203F604
+.extern FUN_0203F634
+.extern FUN_0203F664
+.extern FUN_0203F6E4
+.extern FUN_0203F720
+.extern FUN_0203F760
+.extern FUN_0203F7C8
+.extern FUN_0203F80C
+.extern FUN_0203F880
+.extern FUN_0203F8C0
+.extern FUN_0203F924
+.extern FUN_0203F954
+.extern FUN_0203F988
+.extern FUN_0203F9B0
+.extern FUN_0203F9DC
+.extern FUN_0203FA14
+.extern FUN_0203FA58
+.extern FUN_0203FB4C
+.extern FUN_0203FB64
+.extern FUN_0203FB94
+.extern FUN_0203FBA0
+.extern FUN_0203FBAC
+.extern FUN_0203FBBC
+.extern FUN_0203FC1C
+.extern FUN_0203FC58
+.extern FUN_0203FC80
+.extern FUN_0203FCB0
+.extern FUN_0203FCDC
+.extern FUN_0203FCF4
+.extern FUN_0203FDBC
+.extern FUN_0203FE08
+.extern FUN_0203FE48
+.extern FUN_0203FE80
+.extern FUN_0203FE90
+.extern FUN_0203FEC0
+.extern FUN_0203FF10
+.extern FUN_02040028
+.extern FUN_02040074
+.extern FUN_020400C8
+.extern FUN_0204011C
+.extern FUN_02040170
+.extern FUN_020401CC
+.extern FUN_02040204
+.extern FUN_02040220
+.extern FUN_0204025C
+.extern FUN_02040298
+.extern FUN_020402D4
+.extern FUN_02040304
+.extern FUN_02040340
+.extern FUN_02040370
+.extern FUN_020403A0
+.extern FUN_020403D0
+.extern FUN_02040414
+.extern FUN_02040458
+.extern FUN_02040488
+.extern FUN_020404FC
+.extern FUN_0204052C
+.extern FUN_0204056C
+.extern FUN_0204059C
+.extern FUN_020405B4
+.extern FUN_020405CC
+.extern FUN_020405F8
+.extern FUN_02040638
+.extern FUN_0204064C
+.extern FUN_02040660
+.extern FUN_020406C0
+.extern FUN_020406CC
+.extern FUN_02040700
+.extern FUN_02040724
+.extern FUN_02040748
+.extern FUN_02040790
+.extern FUN_020407C8
+.extern FUN_02040800
+.extern FUN_0204083C
+.extern FUN_02040874
+.extern FUN_020408BC
+.extern FUN_0204091C
+.extern FUN_02040964
+.extern FUN_020409C0
+.extern FUN_020409F8
+.extern FUN_02040A30
+.extern FUN_02040A7C
+.extern FUN_02040B0C
+.extern FUN_02040B5C
+.extern FUN_02040BAC
+.extern FUN_02040BFC
+.extern FUN_02040C34
+.extern FUN_02040C6C
+.extern FUN_02040CA4
+.extern FUN_02040D04
+.extern FUN_02040D7C
+.extern FUN_02040DB4
+.extern FUN_02040DEC
+.extern FUN_02040E4C
+.extern FUN_02040EB4
+.extern FUN_02040EF8
+.extern FUN_02040F34
+.extern FUN_02040F6C
+.extern FUN_02040FA4
+.extern FUN_02040FDC
+.extern FUN_02041014
+.extern FUN_0204104C
+.extern FUN_02041094
+.extern FUN_020410C8
+.extern FUN_02041100
+.extern FUN_02041138
+.extern FUN_02041174
+.extern FUN_02041194
+.extern FUN_020411C4
+.extern FUN_02041340
+.extern FUN_020413C0
+.extern FUN_020413E8
+.extern FUN_020413F8
+.extern FUN_0204140C
+.extern FUN_02041424
+.extern FUN_0204143C
+.extern FUN_02041478
+.extern FUN_0204149C
+.extern FUN_020414B8
+.extern FUN_020414CC
+.extern FUN_020414E0
+.extern FUN_020414FC
+.extern FUN_02041518
+.extern FUN_02041558
+.extern FUN_02041588
+.extern FUN_020415AC
+.extern FUN_020415BC
+.extern FUN_020415E0
+.extern FUN_02041618
+.extern FUN_02041644
+.extern FUN_02041650
+.extern FUN_02041664
+.extern FUN_02041674
+.extern FUN_020416A8
+.extern FUN_02041770
+.extern FUN_020417E0
+.extern FUN_02041808
+.extern FUN_0204185C
+.extern FUN_0204188C
+.extern FUN_0204190C
+.extern FUN_02041970
+.extern FUN_020419F8
+.extern FUN_02041A80
+.extern FUN_02041AB4
+.extern FUN_02041AD4
+.extern FUN_02041AE0
+.extern FUN_02041B10
+.extern FUN_02041B40
+.extern FUN_02041B70
+.extern FUN_02041B9C
+.extern FUN_02041BC4
+.extern FUN_02041BF0
+.extern FUN_02041C38
+.extern FUN_02041E40
+.extern FUN_02041FDC
+.extern FUN_02042000
+.extern FUN_02042038
+.extern FUN_02042110
+.extern FUN_0204214C
+.extern FUN_02042354
+.extern FUN_02042364
+.extern FUN_02042394
+.extern FUN_020423B0
+.extern FUN_02042700
+.extern FUN_02042780
+.extern FUN_020427A8
+.extern FUN_020427D0
+.extern FUN_02042864
+.extern FUN_02042894
+.extern FUN_020428E0
+.extern FUN_02042950
+.extern FUN_02042980
+.extern FUN_02042998
+.extern FUN_020429B8
+.extern FUN_020429E8
+.extern FUN_02042A18
+.extern FUN_02042A48
+.extern FUN_02042A98
+.extern FUN_02042B0C
+.extern FUN_02042B40
+.extern FUN_02042B74
+.extern FUN_02042BA8
+.extern FUN_02042BDC
+.extern FUN_02042C10
+.extern FUN_02042C44
+.extern FUN_02042C8C
+.extern FUN_02042CBC
+.extern FUN_02042D1C
+.extern FUN_0204387C
+.extern FUN_020438D0
+.extern FUN_02043918
+.extern FUN_020439B4
+.extern FUN_02043A44
+.extern FUN_02043A94
+.extern FUN_02043AAC
+.extern FUN_02043ACC
+.extern FUN_02043AFC
+.extern FUN_02043B28
+.extern FUN_02043B54
+.extern FUN_02043B84
+.extern FUN_02043BD0
+.extern FUN_02043C28
+.extern FUN_02043C6C
+.extern FUN_02043C90
+.extern FUN_02043CB4
+.extern FUN_02043CE4
+.extern FUN_02043D28
+.extern FUN_02043D78
+.extern FUN_02043DC8
+.extern FUN_02043DE0
+.extern FUN_02043E00
+.extern FUN_02043E20
+.extern FUN_02043E50
+.extern FUN_02043E68
+.extern FUN_02043E9C
+.extern FUN_02043EFC
+.extern FUN_02043F50
+.extern FUN_02043FA0
+.extern FUN_02043FF4
+.extern FUN_02044034
+.extern FUN_020440C0
+.extern FUN_020440F0
+.extern FUN_02044120
+.extern FUN_02044138
+.extern FUN_0204413C
+.extern FUN_02044140
+.extern FUN_02044158
+.extern FUN_0204416C
+.extern FUN_02044198
+.extern FUN_020442BC
+.extern FUN_0204434C
+.extern FUN_020443A8
+.extern FUN_02044414
+.extern FUN_0204449C
+.extern FUN_020444F4
+.extern FUN_02044598
+.extern FUN_02044658
+.extern FUN_0204469C
+.extern FUN_02044730
+.extern FUN_0204478C
+.extern FUN_02044800
+.extern FUN_0204488C
+.extern FUN_020448D4
+.extern FUN_020449A4
+.extern FUN_02044A0C
+.extern FUN_02044A6C
+.extern FUN_02044A94
+.extern FUN_02044B00
+.extern FUN_02044B2C
+.extern FUN_02044B84
+.extern FUN_02044C0C
+.extern FUN_02044C88
+.extern FUN_02044CE0
+.extern FUN_02044D44
+.extern FUN_02044D8C
+.extern FUN_02044E34
+.extern FUN_02044E78
+.extern FUN_02044ED8
+.extern FUN_02044F20
+.extern FUN_02044F58
+.extern FUN_02044FE8
+.extern FUN_0204505C
+.extern FUN_02045104
+.extern FUN_02045170
+.extern FUN_020451D0
+.extern FUN_02045264
+.extern FUN_02045268
+.extern FUN_020452B4
+.extern FUN_02045308
+.extern FUN_02045398
+.extern FUN_0204539C
+.extern FUN_020453A0
+.extern FUN_020453F4
+.extern FUN_02045424
+.extern FUN_02045438
+.extern FUN_02045468
+.extern FUN_02045484
+.extern FUN_020454CC
+.extern FUN_02045500
+.extern FUN_0204552C
+.extern FUN_0204557C
+.extern FUN_02045590
+.extern FUN_020455BC
+.extern FUN_020455D0
+.extern FUN_020455E4
+.extern FUN_02045610
+.extern FUN_02045624
+.extern FUN_02045638
+.extern FUN_02045664
+.extern FUN_02045678
+.extern FUN_020456D4
+.extern FUN_0204572C
+.extern FUN_02045784
+.extern FUN_020457DC
+.extern FUN_02045834
+.extern FUN_0204588C
+.extern FUN_020458E4
+.extern FUN_02045918
+.extern FUN_02045950
+.extern FUN_02045954
+.extern FUN_02045958
+.extern FUN_020459AC
+.extern FUN_020459E8
+.extern FUN_02045A3C
+.extern FUN_02045A78
+.extern FUN_02045ACC
+.extern FUN_02045B08
+.extern FUN_02045B44
+.extern FUN_02045B80
+.extern FUN_02045BC8
+.extern FUN_02045C04
+.extern FUN_02045C40
+.extern FUN_02045C7C
+.extern FUN_02045CD4
+.extern FUN_02045D10
+.extern FUN_02045D4C
+.extern FUN_02045D88
+.extern FUN_02045DD0
+.extern FUN_02045E1C
+.extern FUN_02045E20
+.extern FUN_02045EE0
+.extern FUN_02045EE4
+.extern FUN_02045F24
+.extern FUN_02045F84
+.extern FUN_02045F88
+.extern FUN_02045FCC
+.extern FUN_02046010
+.extern FUN_0204601C
+.extern FUN_02046028
+.extern FUN_0204602C
+.extern FUN_02046030
+.extern FUN_020462AC
+.extern FUN_020462B8
+.extern FUN_020462E4
+.extern FUN_0204630C
+.extern FUN_02046338
+.extern FUN_02046380
+.extern FUN_020463CC
+.extern FUN_020463EC
+.extern FUN_0204640C
+.extern FUN_02046420
+.extern FUN_0204646C
+.extern FUN_0204647C
+.extern FUN_0204649C
+.extern FUN_020464A4
+.extern FUN_02046500
+.extern FUN_02046528
+.extern FUN_0204652C
+.extern FUN_02046530
+.extern FUN_02046534
+.extern FUN_02046DB4
+.extern FUN_02046E18
+.extern FUN_02046FA0
+.extern FUN_020470AC
+.extern FUN_020470E8
+.extern FUN_02047174
+.extern FUN_020480B8
+.extern FUN_020480C8
+.extern FUN_020480D8
+.extern FUN_02048498
+.extern FUN_02048694
+.extern FUN_02048C58
+.extern FUN_02048D90
+.extern FUN_02048EC8
+.extern FUN_02048FC8
+.extern FUN_02049240
+.extern FUN_02049274
+.extern FUN_02049EA4
+.extern FUN_02049F98
+.extern FUN_02049FFC
+.extern FUN_0204A048
+.extern FUN_0204A0C8
+.extern FUN_0204A120
+.extern FUN_0204A20C
+.extern FUN_0204A248
+.extern FUN_0204A32C
+.extern FUN_0204A6E0
+.extern FUN_0204AB20
+.extern FUN_0204AB58
+.extern FUN_0204ABA8
+.extern FUN_0204ABDC
+.extern FUN_0204AD0C
+.extern FUN_0204ADBC
+.extern FUN_0204ADE0
+.extern FUN_0204AF3C
+.extern FUN_0204AF84
+.extern FUN_0204B2A4
+.extern FUN_0204B2B4
+.extern FUN_0204B2C0
+.extern FUN_0204B2D8
+.extern FUN_0204B33C
+.extern FUN_0204B4FC
+.extern FUN_0204B57C
+.extern FUN_0204B5A8
+.extern FUN_0204B5FC
+.extern FUN_0204B63C
+.extern FUN_0204B660
+.extern FUN_0204B684
+.extern FUN_0204B6A4
+.extern FUN_0204B9A0
+.extern FUN_0204B9CC
+.extern FUN_0204B9EC
+.extern FUN_0204BA1C
+.extern FUN_0204BAB0
+.extern FUN_0204BAC4
+.extern FUN_0204BAD4
+.extern FUN_0204BAE4
+.extern FUN_0204BEC8
+.extern FUN_0204BED0
+.extern FUN_0204BED8
+.extern FUN_0204C104
+.extern FUN_0204C1A8
+.extern FUN_0204D6C0
+.extern FUN_0204E2FC
+.extern FUN_0204F6DC
+.extern FUN_0204FF5C
+.extern FUN_02050024
+.extern FUN_02050048
+.extern FUN_020524CC
+.extern FUN_02052544
+.extern FUN_02052604
+.extern FUN_02052608
+.extern FUN_02052648
+.extern FUN_0205265C
+.extern FUN_02052714
+.extern FUN_02052718
+.extern FUN_020527A8
+.extern FUN_020527D8
+.extern FUN_0205296C
+.extern FUN_02052A10
+.extern FUN_02052B74
+.extern FUN_02052C0C
+.extern FUN_02052CD8
+.extern FUN_02052D08
+.extern FUN_02052DE8
+.extern FUN_02052E10
+.extern FUN_02052F74
+.extern FUN_020534DC
+.extern FUN_0205363C
+.extern FUN_02053678
+.extern FUN_020536D0
+.extern FUN_020545B8
+.extern FUN_02054608
+.extern FUN_02054658
+.extern FUN_020546C8
+.extern FUN_020547A4
+.extern FUN_02054C14
+.extern FUN_02054CB0
+.extern FUN_02054CC8
+.extern FUN_02054D1C
+.extern FUN_02054DEC
+.extern FUN_02054E30
+.extern FUN_02054F50
+.extern FUN_0205502C
+.extern FUN_020552F8
+.extern FUN_02055304
+.extern FUN_02055320
+.extern FUN_0205532C
+.extern FUN_020553A0
+.extern FUN_020553C4
+.extern FUN_020553D4
+.extern FUN_020553E8
+.extern FUN_02055468
+.extern FUN_02055474
+.extern FUN_02055488
+.extern FUN_02055560
+.extern FUN_02055720
+.extern FUN_020557F4
+.extern FUN_02055A38
+.extern FUN_02055B14
+.extern FUN_02055B30
+.extern FUN_02055B8C
+.extern FUN_0205753C
+.extern FUN_020575D4
+.extern FUN_02057654
+.extern FUN_02057688
+.extern FUN_02057800
+.extern FUN_0205785C
+.extern FUN_02057BAC
+.extern FUN_02058060
+.extern FUN_020580B4
+.extern FUN_02058448
+.extern FUN_02058458
+.extern FUN_02058480
+.extern FUN_02058488
+.extern FUN_02058510
+.extern FUN_02058738
+.extern FUN_02058780
+.extern FUN_020587B0
+.extern FUN_02058854
+.extern FUN_0205889C
+.extern FUN_020588B8
+.extern FUN_020588D4
+.extern FUN_02058908
+.extern FUN_02058914
+.extern FUN_02058994
+.extern FUN_02058B2C
+.extern FUN_02058B4C
+.extern FUN_02058B7C
+.extern FUN_02058BB4
+.extern FUN_02058BE4
+.extern FUN_02058D74
+.extern FUN_02058E28
+.extern FUN_02058E90
+.extern FUN_02058EB0
+.extern FUN_02059D1C
+.extern FUN_02059E74
+.extern FUN_0205AE28
+.extern FUN_0205AEA4
+.extern FUN_0205AEF0
+.extern FUN_0205AEFC
+.extern FUN_0205CA4C
+.extern FUN_0205CA64
+.extern FUN_0205CA78
+.extern FUN_0205CE48
+.extern FUN_0205CE80
+.extern FUN_0205DD18
+.extern FUN_0205DD38
+.extern FUN_0205DD40
+.extern FUN_0205E7C4
+.extern FUN_0205ECD4
+.extern FUN_0205ECE0
+.extern FUN_0205ECFC
+.extern FUN_0205ED0C
+.extern FUN_0205ED1C
+.extern FUN_0205ED2C
+.extern FUN_0205ED3C
+.extern FUN_0205ED4C
+.extern FUN_0205ED5C
+.extern FUN_0205ED6C
+.extern FUN_0205F1C4
+.extern FUN_0205F1D4
+.extern FUN_0205F1F4
+.extern FUN_0205F204
+.extern FUN_0205F214
+.extern FUN_0205F224
+.extern FUN_0205F234
+.extern FUN_0205F244
+.extern FUN_0205F264
+.extern FUN_0205F274
+.extern FUN_0205F284
+.extern FUN_0205F294
+.extern FUN_0205F2A4
+.extern FUN_0205F2B4
+.extern FUN_0205F2C4
+.extern FUN_0205F2D4
+.extern FUN_0205F2E4
+.extern FUN_0205F368
+.extern FUN_0205F378
+.extern FUN_0205F388
+.extern FUN_0205F398
+.extern FUN_0205F3C0
+.extern FUN_0205F3F8
+.extern FUN_0205F478
+.extern FUN_0205F4A0
+.extern FUN_0205F4E4
+.extern FUN_0205F50C
+.extern FUN_0205F524
+.extern FUN_0205F54C
+.extern FUN_0205F55C
+.extern FUN_0205F594
+.extern FUN_0205F5A4
+.extern FUN_0205F5D8
+.extern FUN_0205F5FC
+.extern FUN_0205F648
+.extern FUN_0205F668
+.extern FUN_0205F688
+.extern FUN_0205F698
+.extern FUN_0205F6A8
+.extern FUN_0205F6C8
+.extern FUN_0205F6D8
+.extern FUN_0205F710
+.extern FUN_0205F720
+.extern FUN_0205F740
+.extern FUN_0205F760
+.extern FUN_0205F7A0
+.extern FUN_0205FD38
+.extern FUN_0205FDDC
+.extern FUN_0205FE10
+.extern FUN_0205FF5C
+.extern FUN_02060144
+.extern FUN_0206015C
+.extern FUN_02060490
+.extern FUN_02060790
+.extern FUN_020607D4
+.extern FUN_02060F3C
+.extern FUN_02060F88
+.extern FUN_02060F9C
+.extern FUN_02060FD0
+.extern FUN_020612EC
+.extern FUN_020612F8
+.extern FUN_02061374
+.extern FUN_020613CC
+.extern FUN_02061460
+.extern FUN_02061574
+.extern FUN_02061A8C
+.extern FUN_02063650
+.extern FUN_0206367C
+.extern FUN_02063888
+.extern FUN_020638BC
+.extern FUN_02063948
+.extern FUN_02063964
+.extern FUN_0206486C
+.extern FUN_020649B0
+.extern FUN_020649D4
+.extern FUN_02064CA8
+.extern FUN_02064CC8
+.extern FUN_02064D10
+.extern FUN_02064D4C
+.extern FUN_02064D88
+.extern FUN_02064E20
+.extern FUN_02064E60
+.extern FUN_02064E90
+.extern FUN_02065054
+.extern FUN_02065070
+.extern FUN_02065078
+.extern FUN_02065314
+.extern FUN_02065344
+.extern FUN_02066818
+.extern FUN_02066978
+.extern FUN_020669A0
+.extern FUN_020669C0
+.extern FUN_020669D4
+.extern FUN_02066A20
+.extern FUN_02066ACC
+.extern FUN_02066ED8
+.extern FUN_020671BC
+.extern FUN_020672BC
+.extern FUN_02067830
+.extern FUN_02068678
+.extern FUN_02068854
+.extern FUN_020689E0
+.extern FUN_02068AAC
+.extern FUN_02068B68
+.extern FUN_02068C00
+.extern FUN_02068E14
+.extern FUN_020690C4
+.extern FUN_020690CC
+.extern FUN_020690E4
+.extern FUN_02069168
+.extern FUN_020699A4
+.extern FUN_02069A64
+.extern FUN_02069B40
+.extern FUN_02069B88
+.extern FUN_0206A23C
+.extern FUN_0206AC74
+.extern FUN_0206AD4C
+.extern FUN_0206B20C
+.extern FUN_0206B3E4
+.extern FUN_0206B484
+.extern FUN_0206B57C
+.extern FUN_0206B5E4
+.extern FUN_0206B620
+.extern FUN_0206B644
+.extern FUN_0206B6C8
+.extern FUN_0206B7BC
+.extern FUN_0206B900
+.extern FUN_0206B9AC
+.extern FUN_0206B9B0
+.extern FUN_0206BAE4
+.extern FUN_0206BB1C
+.extern FUN_0206BB28
+.extern FUN_0206C700
+.extern FUN_0206C91C
+.extern FUN_0206C92C
+.extern FUN_0206E2F0
+.extern FUN_0206E308
+.extern FUN_0206E314
+.extern FUN_0206E340
+.extern FUN_0206E354
+.extern FUN_0206E358
+.extern FUN_0206E360
+.extern FUN_0206E37C
+.extern FUN_0206E384
+.extern FUN_0206E38C
+.extern FUN_0206E7B8
+.extern FUN_0206EA30
+.extern FUN_0206EA98
+.extern FUN_0206EAB8
+.extern FUN_0206EB1C
+.extern FUN_0206ED24
+.extern FUN_0206ED38
+.extern FUN_0206EDD4
+.extern FUN_0206EE50
+.extern FUN_0206EE64
+.extern FUN_0206EEF8
+.extern FUN_0206EFEC
+.extern FUN_0206F158
+.extern FUN_0206F164
+.extern FUN_0206F17C
+.extern FUN_0206F190
+.extern FUN_0206F3B8
+.extern FUN_0206F3D8
+.extern FUN_02077A84
+.extern FUN_02077AC4
+.extern FUN_02079C70
+.extern FUN_0207B000
+.extern FUN_0207C2A4
+.extern FUN_0207FC5C
+.extern FUN_0207FCE0
+.extern FUN_0208089C
+.extern FUN_02080C38
+.extern FUN_02080E0C
+.extern FUN_02081214
+.extern FUN_020814E8
+.extern FUN_02081DC4
+.extern FUN_02081EB8
+.extern FUN_0208201C
+.extern FUN_02082034
+.extern FUN_0208206C
+.extern FUN_02082090
+.extern FUN_020820B8
+.extern FUN_020820DC
+.extern FUN_0208210C
+.extern FUN_0208213C
+.extern FUN_02082140
+.extern FUN_02082158
+.extern FUN_0208217C
+.extern FUN_02082190
+.extern FUN_020821B4
+.extern FUN_020821C4
+.extern FUN_020821DC
+.extern FUN_020821F0
+.extern FUN_02082214
+.extern FUN_0208223C
+.extern FUN_0208224C
+.extern FUN_02082254
+.extern FUN_02082284
+.extern FUN_020822F0
+.extern FUN_02082444
+.extern FUN_02082508
+.extern FUN_020825A0
+.extern FUN_02082630
+.extern FUN_02085140
+.extern FUN_020851B8
+.extern FUN_020851DC
+.extern FUN_020851F8
+.extern FUN_0208524C
+.extern FUN_02085258
+.extern FUN_02085264
+.extern FUN_0208526C
+.extern FUN_02085290
+.extern FUN_020852E8
+.extern FUN_02085338
+.extern FUN_020853A8
+.extern FUN_020853B0
+.extern FUN_020853B4
+.extern FUN_020853BC
+.extern FUN_020853E4
+.extern FUN_020853E8
+.extern FUN_020853EC
+.extern FUN_020853F0
+.extern FUN_020853FC
+.extern FUN_020854E0
+.extern FUN_02085538
+.extern FUN_02085578
+.extern FUN_020855B0
+.extern FUN_020855E4
+.extern FUN_0208560C
+.extern FUN_0208562C
+.extern FUN_02085F48
+.extern FUN_020863DC
+.extern FUN_02087A1C
+.extern FUN_02087A50
+.extern FUN_02087D00
+.extern FUN_02087E14
+.extern FUN_0208881C
+.extern FUN_02088960
+.extern FUN_02088D40
+.extern FUN_02088DD8
+.extern FUN_02088DF0
+.extern FUN_02088DF8
+.extern FUN_02088EF8
+.extern FUN_02089D90
+.extern FUN_0208A0B8
+.extern FUN_0208A300
+.extern FUN_0208A320
+.extern FUN_0208A338
+.extern FUN_0208A9B8
+.extern FUN_0208ACEC
+.extern FUN_0208AD80
+.extern FUN_0208AF80
+.extern FUN_0208AF94
+.extern FUN_0208AFA8
+.extern FUN_0208B05C
+.extern FUN_0208B128
+.extern FUN_0208B4A0
+.extern FUN_02090CC8
+.extern FUN_02090DB8
+.extern FUN_02096B14
+.extern FUN_02096B78
+.extern FUN_02096CCC
+.extern FUN_02096D2C
+.extern FUN_02096DA0
+.extern FUN_02096F18
+.extern FUN_02096F80
+.extern FUN_02096FB0
+.extern FUN_0209700C
+.extern FUN_020973B4
+.extern FUN_020ADA84
+.extern FUN_020ADA98
+.extern FUN_020ADAB0
+.extern FUN_020ADB18
+.extern FUN_020ADBE8
+.extern FUN_020ADC74
+.extern FUN_020ADDC0
+.extern FUN_020ADDC8
+.extern FUN_020ADDF0
+.extern FUN_020ADE2C
+.extern FUN_020AE554
+.extern FUN_020AE5B0
+.extern FUN_020AE600
+.extern FUN_020AE638
+.extern FUN_020AE684
+.extern FUN_020AE82C
+.extern FUN_020AE84C
+.extern FUN_020AE868
+.extern FUN_020AE8CC
+.extern FUN_020AE918
+.extern FUN_020AEB70
+.extern FUN_020AEC7C
+.extern FUN_020AEC98
+.extern FUN_020AEE40
+.extern FUN_020AEEB8
+.extern FUN_020AEF1C
+.extern FUN_020AF2E0
+.extern FUN_020AF2F4
+.extern FUN_020AF30C
+.extern FUN_020AF894
+.extern FUN_020AF9C4
+.extern FUN_020AFA28
+.extern FUN_020AFA80
+.extern FUN_020AFBA8
+.extern FUN_020AFBFC
+.extern FUN_020AFC04
+.extern FUN_020AFEB8
+.extern FUN_020AFFD8
+.extern FUN_020B0030
+.extern FUN_020B0088
+.extern FUN_020B00F0
+.extern FUN_020B0138
+.extern FUN_020B0180
+.extern FUN_020B0250
+.extern FUN_020B02C8
+.extern FUN_020B0448
+.extern FUN_020B0870
+.extern FUN_020B0BB0
+.extern FUN_020B0C7C
+.extern FUN_020B0E34
+.extern FUN_020B0FC0
+.extern FUN_020B10E8
+.extern FUN_020B1240
+.extern FUN_020B1340
+.extern FUN_020B1528
+.extern FUN_020B1768
+.extern FUN_020B19C4
+.extern FUN_020B19DC
+.extern FUN_020B1A14
+.extern FUN_020B1A24
+.extern FUN_020B1EA4
+.extern FUN_020B1EC4
+.extern FUN_020B1EE4
+.extern FUN_020B1EFC
+.extern FUN_020B1F80
+.extern FUN_020B20C8
+.extern FUN_020B2194
+.extern FUN_020B224C
+.extern FUN_020B23D8
+.extern FUN_020B242C
+.extern FUN_020B2794
+.extern FUN_020B28B4
+.extern FUN_020B2A08
+.extern FUN_020B2B08
+.extern FUN_020B2B58
+.extern FUN_020B2D9C
+.extern FUN_020B317C
+.extern FUN_020B31F0
+.extern FUN_020B326C
+.extern FUN_020B3334
+.extern FUN_020B3390
+.extern FUN_020B33A0
+.extern FUN_020B4358
+.extern FUN_020B43A4
+.extern FUN_020B442C
+.extern FUN_020B4568
+.extern FUN_020B4F38
+.extern FUN_020B502C
+.extern FUN_020B772C
+.extern FUN_020B7790
+.extern FUN_020B7C58
+.extern FUN_020B7C78
+.extern FUN_020B7CDC
+.extern FUN_020B7CE4
+.extern FUN_020B7CF0
+.extern FUN_020B7D28
+.extern FUN_020B7DFC
+.extern FUN_020B7E10
+.extern FUN_020B7E1C
+.extern FUN_020B80B4
+.extern FUN_020B844C
+.extern FUN_020B8474
+.extern FUN_020B849C
+.extern FUN_020BAC98
+.extern FUN_020BAFB8
+.extern FUN_020BB1C0
+.extern FUN_020BB394
+.extern FUN_020BB59C
+.extern FUN_020BB7F4
+.extern FUN_020BC0FC
+.extern FUN_020BC13C
+.extern FUN_020BC2A0
+.extern FUN_020C0174
+.extern FUN_020C01A0
+.extern FUN_020C01D0
+.extern FUN_020C03B8
+.extern FUN_020C041C
+.extern FUN_020C044C
+.extern FUN_020C04DC
+.extern FUN_020C0510
+.extern FUN_020C054C
+.extern FUN_020C0670
+.extern FUN_020C0688
+.extern FUN_020C0DD4
+.extern FUN_020C0E14
+.extern FUN_020C0E7C
+.extern FUN_020C0EA4
+.extern FUN_020C0EF4
+.extern FUN_020C0F30
+.extern FUN_020C0F50
+.extern FUN_020C0F68
+.extern FUN_020C0F80
+.extern FUN_020C0F8C
+.extern FUN_020C0F9C
+.extern FUN_020C0FDC
+.extern FUN_020C1040
+.extern FUN_020C10A4
+.extern FUN_020C1148
+.extern FUN_020C1180
+.extern FUN_020C1E58
+.extern FUN_020C1E68
+.extern FUN_020C1EA4
+.extern FUN_020C1F54
+.extern FUN_020C1FA4
+.extern FUN_020C1FF0
+.extern FUN_020C20DC
+.extern FUN_020C2104
+.extern FUN_020C217C
+.extern FUN_020C226C
+.extern FUN_020C22D0
+.extern FUN_020C23FC
+.extern FUN_020C26F8
+.extern FUN_020C2828
+.extern FUN_020C290C
+.extern FUN_020C2A94
+.extern FUN_020C35E0
+.extern FUN_020C360C
+.extern FUN_020C3640
+.extern FUN_020C3674
+.extern FUN_020C36A8
+.extern FUN_020C3910
+.extern FUN_020C3980
+.extern FUN_020C39CC
+.extern FUN_020C3EA4
+.extern FUN_020C3EB0
+.extern FUN_020C6034
+.extern FUN_020C605C
+.extern FUN_021D74E0
+.extern FUN_021D76AC
+.extern FUN_021D77C4
+.extern FUN_021D7800
+.extern FUN_021D78FC
+.extern FUN_021D79B4
+.extern FUN_021D7CA4
+.extern FUN_021D7F8C
+.extern FUN_021D8018
+.extern FUN_021D8164
+.extern FUN_021D82BC
+.extern FUN_021D8320
+.extern FUN_021D836C
+.extern FUN_021D83A8
+.extern FUN_021D83C0
+.extern FUN_021D844C
+.extern FUN_021D8494
+.extern FUN_021D85FC
+.extern FUN_021D8624
+.extern FUN_021D865C
+.extern FUN_021D8758
+.extern FUN_021D8820
+.extern FUN_021D88E4
+.extern FUN_021D89CC
+.extern FUN_021D8B64
+.extern FUN_021D8C24
+.extern FUN_021D917C
+.extern FUN_021D959C
+.extern FUN_021D967C
+.extern FUN_021D96F4
+.extern FUN_021D9708
+.extern FUN_021D971C
+.extern FUN_021D9820
+.extern FUN_021D99F8
+.extern FUN_021DA464
+.extern FUN_021DA4EC
+.extern FUN_021DA54C
+.extern FUN_021DA58C
+.extern FUN_021DA5B8
+.extern FUN_021DA5C8
+.extern FUN_021DA5D0
+.extern FUN_021DA5D8
+.extern FUN_021DA7B4
+.extern FUN_021DAAA4
+.extern FUN_021DAC70
+.extern FUN_021DAE40
+.extern FUN_021DAED4
+.extern FUN_021DAF28
+.extern FUN_021DAF78
+.extern FUN_021DAF98
+.extern FUN_021DB030
+.extern FUN_021DB7E8
+.extern FUN_021DB858
+.extern FUN_021DC174
+.extern FUN_021DD6F0
+.extern FUN_021DD718
+.extern FUN_021DDB08
+.extern FUN_021E1374
+.extern FUN_021E1858
+.extern FUN_021E1994
+.extern FUN_021E1BF8
+.extern FUN_021E1C4C
+.extern FUN_021E1C54
+.extern FUN_021E1ECC
+.extern FUN_021E1F34
+.extern FUN_021E1F58
+.extern FUN_021E1F60
+.extern FUN_021E2464
+.extern FUN_021E2608
+.extern FUN_021E26CC
+.extern FUN_021E27E8
+.extern FUN_021E288C
+.extern FUN_021E28A0
+.extern FUN_021E2950
+.extern FUN_021E29B4
+.extern FUN_021E29C8
+.extern FUN_021E2A70
+.extern FUN_021E2AD4
+.extern FUN_021E2B80
+.extern FUN_021E2B9C
+.extern FUN_021E2BB8
+.extern FUN_021E2BD0
+.extern FUN_021E2C24
+.extern FUN_021E2C58
+.extern FUN_021E2CBC
+.extern FUN_021E32F0
+.extern FUN_021E331C
+.extern FUN_021E3424
+.extern FUN_021E3444
+.extern FUN_021E495C
+.extern FUN_021E4C54
+.extern FUN_021E4C60
+.extern FUN_021E4DE4
+.extern FUN_021E5614
+.extern FUN_021E57D4
+.extern FUN_021E5970
+.extern FUN_021E5B30
+.extern FUN_021E5FD8
+.extern FUN_021E5FE0
+.extern FUN_021E6410
+.extern FUN_021E643C
+.extern FUN_021E6990
+.extern FUN_021E69BC
+.extern FUN_021E6BF4
+.extern FUN_021E7030
+.extern FUN_021E70F0
+.extern FUN_021E7138
+.extern FUN_021E7184
+.extern FUN_021E71E8
+.extern FUN_021E7750
+.extern FUN_021E799C
+.extern FUN_021E7AC0
+.extern FUN_021E7EA0
+.extern FUN_021E7EB0
+.extern FUN_021E7EC4
+.extern FUN_021E7EC8
+.extern FUN_021E7ED0
+.extern FUN_021E7ED8
+.extern FUN_021E7FBC
+.extern FUN_021E8128
+.extern FUN_021E8130
+.extern FUN_021E8140
+.extern FUN_021E8144
+.extern FUN_021E8148
+.extern FUN_021E8158
+.extern FUN_021E81BC
+.extern FUN_021E84F4
+.extern FUN_021E856C
+.extern FUN_021E8588
+.extern FUN_021E85E4
+.extern FUN_021E85FC
+.extern FUN_021EAE90
+.extern FUN_021EB044
+.extern FUN_021EC57C
+.extern FUN_021EC71C
+.extern FUN_021EC854
+.extern FUN_021EC864
+.extern FUN_021ECD64
+.extern FUN_021ECF14
+.extern FUN_021ED0CC
+.extern FUN_021ED49C
+.extern FUN_021ED4E0
+.extern FUN_021ED52C
+.extern FUN_021ED5C4
+.extern FUN_021ED5EC
+.extern FUN_021ED644
+.extern FUN_021ED940
+.extern FUN_021EDA48
+.extern FUN_021EDBC8
+.extern FUN_021EF5E0
+.extern FUN_021EF604
+.extern FUN_021EF620
+.extern FUN_021EF654
+.extern FUN_021EF824
+.extern FUN_021EF844
+.extern FUN_021EF8C8
+.extern FUN_021EF8DC
+.extern FUN_021EFA9C
+.extern FUN_021F02C4
+.extern FUN_021F1D8C
+.extern FUN_021F1DC8
+.extern FUN_021F1DFC
+.extern FUN_021F1EC0
+.extern FUN_021F1F78
+.extern FUN_021F2094
+.extern FUN_021F20D8
+.extern FUN_021F20F8
+.extern FUN_021F2AF4
+.extern FUN_021F2E0C
+.extern FUN_021F2E28
+.extern FUN_021F2F48
+.extern FUN_021F2F6C
+.extern FUN_021F3A18
+.extern FUN_021F3AB4
+.extern FUN_021F3B4C
+.extern FUN_021F3B7C
+.extern FUN_021F3DA4
+.extern FUN_021F44D8
+.extern FUN_021F4520
+.extern FUN_021F4568
+.extern FUN_021F4594
+.extern FUN_021F45E8
+.extern FUN_021F4608
+.extern FUN_021F4BD0
+.extern FUN_021F4C88
+.extern FUN_021F4D80
+.extern FUN_021F4DC8
+.extern FUN_021F4E7C
+.extern FUN_021F57EC
+.extern FUN_021F5C44
+.extern FUN_021F61DC
+.extern FUN_021F61E8
+.extern FUN_02211E60
+.extern FUN_0222D5C0
+.extern FUN_0222DAEC
+.extern FUN_0222DD1C
+.extern FUN_0222DD38
+.extern FUN_0222E2BC
+.extern FUN_0222E360
+.extern FUN_0222E3A0
+.extern FUN_0222E7E8
+.extern FUN_0222E874
+.extern FUN_0222ED34
+.extern FUN_0222EDBC
+.extern FUN_0222F440
+.extern FUN_0222F480
+.extern FUN_0222F7E0
+.extern FUN_0222F990
+.extern FUN_022300D4
+.extern FUN_022300DC
+.extern FUN_022300E4
+.extern FUN_022300E8
+.extern FUN_022300F4
+.extern FUN_02230100
+.extern FUN_0223010C
+.extern FUN_02230118
+.extern FUN_02230124
+.extern FUN_02230F3C
+.extern FUN_02230F70
+.extern FUN_02230F80
+.extern FUN_02231344
+.extern FUN_02231350
+.extern FUN_0223135C
+.extern FUN_02231368
+.extern FUN_02231374
+.extern FUN_02239944
+.extern FUN_02239AAC
+.extern FUN_0223CACC
+.extern FUN_0223CB08
+.extern FUN_0223CCDC
+.extern FUN_0223CD7C
+.extern FUN_0223D3D0
+.extern FUN_0223D638
+.extern FUN_0223D648
+.extern FUN_0223DFB4
+.extern FUN_0223E060
+.extern FUN_0223E118
+.extern FUN_0223E154
+.extern FUN_0223E1A4
+.extern FUN_0223E1E0
+.extern FUN_0223E2AC
+.extern FUN_0223E4A8
+.extern FUN_0223E4D4
+.extern FUN_0223E554
+.extern FUN_0223E6B8
+.extern FUN_0223E734
+.extern FUN_0223E7FC
+.extern FUN_0223EB8C
+.extern FUN_0223EF7C
+.extern FUN_0223F4D8
+.extern FUN_0223F4F4
+.extern FUN_0223F8D8
+.extern FUN_0223FCE8
+.extern FUN_02240790
+.extern FUN_022407CC
+.extern FUN_022407DC
+.extern FUN_022407F8
+.extern FUN_02240834
+.extern FUN_02240844
+.extern FUN_0224089C
+.extern FUN_022408FC
+.extern FUN_022411F4
+.extern FUN_02241230
+.extern FUN_02241914
+.extern FUN_02242A38
+.extern FUN_02242BE0
+.extern FUN_0224312C
+.extern FUN_022432E4
+.extern FUN_0224339C
+.extern FUN_022433A8
+.extern FUN_022433B0
+.extern FUN_022433B8
+.extern FUN_022433F8
+.extern FUN_02243408
+.extern FUN_02243428
+.extern FUN_02243448
+.extern FUN_0224345C
+.extern FUN_022434AC
+.extern FUN_022434BC
+.extern FUN_022434D0
+.extern FUN_02243694
+.extern FUN_022436C8
+.extern FUN_022436E8
+.extern FUN_02243780
+.extern FUN_02243838
+.extern FUN_022438DC
+.extern FUN_022438E0
+.extern FUN_022438FC
+.extern FUN_02243920
+.extern FUN_022439F8
+.extern FUN_02243AD8
+.extern FUN_02243BA8
+.extern FUN_02243C5C
+.extern FUN_02243D3C
+.extern FUN_02243DA0
+.extern FUN_02243DB8
+.extern FUN_02243DC0
+.extern FUN_02243DC4
+.extern FUN_02243DD8
+.extern FUN_02243DE0
+.extern FUN_02243E34
+.extern FUN_02243E74
+.extern FUN_02243F18
+.extern FUN_02243F50
+.extern FUN_02243F9C
+.extern FUN_02244210
+.extern FUN_02244558
+.extern FUN_02244660
+.extern FUN_022446BC
+.extern FUN_022446E0
+.extern FUN_022446FC
+.extern FUN_02244758
+.extern FUN_02244770
+.extern FUN_02244824
+.extern FUN_0224484C
+.extern FUN_02244D1C
+.extern FUN_02244D20
+.extern FUN_02244D3C
+.extern FUN_02244D40
+.extern FUN_02244D58
+.extern FUN_02244D98
+.extern FUN_02244DA0
+.extern FUN_02244DB0
+.extern FUN_02244DBC
+.extern FUN_02244DC4
+.extern FUN_02244EF8
+.extern FUN_02244F18
+.extern FUN_02244F24
+.extern FUN_02244F2C
+.extern FUN_02245088
+.extern FUN_02245114
+.extern FUN_02245190
+.extern FUN_02245198
+.extern FUN_022451F0
+.extern FUN_0224525C
+.extern FUN_022452A4
+.extern FUN_02245324
+.extern FUN_02245340
+.extern FUN_02245358
+.extern FUN_0224566C
+.extern FUN_022456E8
+.extern FUN_02245844
+.extern FUN_02245910
+.extern FUN_02245F1C
+.extern FUN_02245F4C
+.extern FUN_02245FA0
+.extern FUN_022461A4
+.extern FUN_022461B8
+.extern FUN_0224666C
+.extern FUN_022466A0
+.extern FUN_022466AC
+.extern FUN_02246F1C
+.extern FUN_02247294
+.extern FUN_022472AC
+.extern FUN_02247544
+.extern FUN_02247614
+.extern FUN_02247728
+.extern FUN_02247808
+.extern FUN_02247970
+.extern FUN_02247A34
+.extern FUN_022483BC
+.extern FUN_022483E0
+.extern FUN_022483EC
+.extern FUN_02248724
+.extern FUN_0224884C
+.extern FUN_022488CC
+.extern FUN_022488EC
+.extern FUN_022488F4
+.extern FUN_022488FC
+.extern FUN_0224891C
+.extern FUN_02248B54
+.extern FUN_02248B58
+.extern FUN_02248B5C
+.extern FUN_02248B60
+.extern FUN_02248B6C
+.extern FUN_02248CC0
+.extern FUN_02248CD0
+.extern FUN_02248DF8
+.extern FUN_02248F70
+.extern FUN_02248FE0
+.extern FUN_02249038
+.extern FUN_022490A0
+.extern FUN_022491FC
+.extern FUN_022494C8
+.extern FUN_02249508
+.extern FUN_02249668
+.extern FUN_022497E8
+.extern FUN_02249E6C
+.extern FUN_02249E78
+.extern FUN_02249E84
+.extern FUN_02249E90
+.extern FUN_0224A310
+.extern FUN_0224A528
+.extern FUN_0224A7C8
+.extern FUN_0224ABAC
+.extern FUN_0224B124
+.extern FUN_0224B2C4
+.extern FUN_0224B568
+.extern FUN_0224B818
+.extern FUN_0224B86C
+.extern FUN_0224B9E0
+.extern FUN_0224BBEC
+.extern FUN_0224BD90
+.extern FUN_0224C038
+.extern FUN_0224C27C
+.extern FUN_0224C520
+.extern FUN_0224C678
+.extern FUN_0224C6E8
+.extern FUN_0224C6F4
+.extern FUN_0224C700
+.extern FUN_0224C8C8
+.extern FUN_0224CA2C
+.extern FUN_0224CA54
+.extern FUN_0224CA58
+.extern FUN_0224CA88
+.extern FUN_0224CA94
+.extern FUN_0224CAA0
+.extern FUN_0224CAB4
+.extern FUN_0224CB30
+.extern FUN_0224CBB0
+.extern FUN_0224CC24
+.extern FUN_0224CECC
+.extern FUN_0224D14C
+.extern FUN_0224D2E0
+.extern FUN_0224D3E8
+.extern FUN_0224D70C
+.extern FUN_0224D76C
+.extern FUN_0224D79C
+.extern FUN_0224DCB8
+.extern FUN_0224DD94
+.extern FUN_0224DDB8
+.extern FUN_0224E554
+.extern FUN_0224E764
+.extern FUN_0224E7C4
+.extern FUN_0224F12C
+.extern FUN_02252534
+.extern FUN_02252538
+.extern FUN_022567E0
+.extern FX_Div
+.extern FX_GetDivResult
+.extern FX_GetDivResultFx64c
+.extern FX_Init
+.extern FX_InvAsync
+.extern FX_Modf
+.extern FX_Sqrt
+.extern G2S_GetBG0CharPtr
+.extern G2S_GetBG1CharPtr
+.extern G2S_GetBG2CharPtr
+.extern G2S_GetBG3CharPtr
+.extern G2_GetBG0CharPtr
+.extern G2_GetBG1CharPtr
+.extern G2_GetBG2CharPtr
+.extern G2_GetBG3CharPtr
+.extern G2x_SetBGyAffine_
+.extern G2x_SetBlendAlpha_
+.extern G2x_SetBlendBrightness_
+.extern G3X_GetBoxTestResult
+.extern G3X_GetClipMtx
+.extern G3X_GetVectorMtx
+.extern G3X_Init
+.extern G3X_InitMtxStack
+.extern G3X_ResetMtxStack
+.extern G3X_SetClearColor
+.extern G3X_SetFog
+.extern G3_LoadMtx43
+.extern G3_MultMtx33
+.extern G3_MultMtx43
+.extern G3_RotX
+.extern G3_RotY
+.extern G3_RotZ
+.extern G3i_LookAt_
+.extern G3i_OrthoW_
+.extern G3i_PerspectiveW_
+.extern GXS_BeginLoadBGExtPltt
+.extern GXS_BeginLoadOBJExtPltt
+.extern GXS_EndLoadBGExtPltt
+.extern GXS_EndLoadOBJExtPltt
+.extern GXS_LoadBG0Char
+.extern GXS_LoadBG0Scr
+.extern GXS_LoadBG1Char
+.extern GXS_LoadBG1Scr
+.extern GXS_LoadBG2Char
+.extern GXS_LoadBG2Scr
+.extern GXS_LoadBG3Char
+.extern GXS_LoadBG3Scr
+.extern GXS_LoadBGExtPltt
+.extern GXS_LoadBGPltt
+.extern GXS_LoadOAM
+.extern GXS_LoadOBJ
+.extern GXS_LoadOBJExtPltt
+.extern GXS_LoadOBJPltt
+.extern GXS_SetGraphicsMode
+.extern GX_BeginLoadBGExtPltt
+.extern GX_BeginLoadClearImage
+.extern GX_BeginLoadOBJExtPltt
+.extern GX_BeginLoadTex
+.extern GX_BeginLoadTexPltt
+.extern GX_DisableBankForLCDC
+.extern GX_DispOff
+.extern GX_DispOn
+.extern GX_EndLoadBGExtPltt
+.extern GX_EndLoadClearImage
+.extern GX_EndLoadOBJExtPltt
+.extern GX_EndLoadTex
+.extern GX_EndLoadTexPltt
+.extern GX_GetBankForOBJ
+.extern GX_GetBankForOBJExtPltt
+.extern GX_GetBankForSubOBJ
+.extern GX_GetBankForSubOBJExtPltt
+.extern GX_HBlankIntr
+.extern GX_Init
+.extern GX_LoadBG0Char
+.extern GX_LoadBG0Scr
+.extern GX_LoadBG1Char
+.extern GX_LoadBG1Scr
+.extern GX_LoadBG2Char
+.extern GX_LoadBG2Scr
+.extern GX_LoadBG3Char
+.extern GX_LoadBG3Scr
+.extern GX_LoadBGExtPltt
+.extern GX_LoadBGPltt
+.extern GX_LoadClearImageColor
+.extern GX_LoadClearImageDepth
+.extern GX_LoadOAM
+.extern GX_LoadOBJ
+.extern GX_LoadOBJExtPltt
+.extern GX_LoadOBJPltt
+.extern GX_LoadTex
+.extern GX_LoadTexPltt
+.extern GX_ResetBankForBG
+.extern GX_ResetBankForBGExtPltt
+.extern GX_ResetBankForOBJ
+.extern GX_ResetBankForOBJExtPltt
+.extern GX_ResetBankForSubBG
+.extern GX_ResetBankForSubOBJ
+.extern GX_ResetBankForTex
+.extern GX_ResetBankForTexPltt
+.extern GX_SetBankForBG
+.extern GX_SetBankForBGExtPltt
+.extern GX_SetBankForLCDC
+.extern GX_SetBankForOBJ
+.extern GX_SetBankForOBJExtPltt
+.extern GX_SetBankForSubBG
+.extern GX_SetBankForSubBGExtPltt
+.extern GX_SetBankForSubOBJ
+.extern GX_SetBankForSubOBJExtPltt
+.extern GX_SetBankForTex
+.extern GX_SetBankForTexPltt
+.extern GX_SetGraphicsMode
+.extern GX_VBlankIntr
+.extern GXx_SetMasterBrightness_
+.extern IC_InvalidateAll
+.extern IC_InvalidateRange
+.extern InitGraphicMemory
+.extern InitScriptContext
+.extern InitSystemForTheGame
+.extern LoadFromNARC
+.extern LoadFromNARC_7
+.extern LoadFromNarc_2
+.extern LoadPlayerDataAddress
+.extern MATH_CalcCRC16
+.extern MATH_CalcCRC16CCITT
+.extern MATH_CalcCRC32
+.extern MATH_CalcCRC8
+.extern MATH_CalcHMACSHA1
+.extern MATH_CalcMD5
+.extern MATH_CalcSHA1
+.extern MATH_CountPopulation
+.extern MATH_MD5GetHash
+.extern MATH_MD5Init
+.extern MATH_MD5Update
+.extern MATH_SHA1GetHash
+.extern MATH_SHA1Init
+.extern MATH_SHA1Update
+.extern MATHi_CRC16InitTable
+.extern MATHi_CRC16InitTableRev
+.extern MATHi_CRC32InitTableRev
+.extern MATHi_CRC8InitTable
+.extern MATHi_CalcHMAC
+.extern MIC_DoSamplingAsync
+.extern MIC_Init
+.extern MIC_StartAutoSampling
+.extern MIC_StopAutoSampling
+.extern MI_Copy36B
+.extern MI_Copy48B
+.extern MI_Copy64B
+.extern MI_CpuCopy8
+.extern MI_CpuFill8
+.extern MI_DmaCopy16
+.extern MI_DmaCopy32
+.extern MI_DmaCopy32Async
+.extern MI_DmaFill32
+.extern MI_DmaFill32Async
+.extern MI_HBlankDmaCopy16
+.extern MI_HBlankDmaCopy32
+.extern MI_Init
+.extern MI_SendGXCommandAsync
+.extern MI_SendGXCommandAsyncFast
+.extern MI_StopDma
+.extern MI_SwapWord
+.extern MI_UncompressLZ8
+.extern MI_WaitDma
+.extern MI_Zero36B
+.extern MIi_CardDmaCopy32
+.extern MIi_CheckDma0SourceAddress
+.extern MIi_CpuClear16
+.extern MIi_CpuClear32
+.extern MIi_CpuClearFast
+.extern MIi_CpuCopy16
+.extern MIi_CpuCopy32
+.extern MIi_CpuCopyFast
+.extern MIi_CpuSend32
+.extern MIi_DmaSetParams
+.extern MIi_DmaSetParams_noInt
+.extern MIi_DmaSetParams_wait
+.extern MIi_DmaSetParams_wait_noInt
+.extern MIi_UncompressBackward
+.extern MTX_Concat33
+.extern MTX_Concat43
+.extern MTX_Identity33_
+.extern MTX_Identity43_
+.extern MTX_MultVec33
+.extern MTX_MultVec43
+.extern MTX_RotX33_
+.extern MTX_RotY33_
+.extern MTX_RotZ33_
+.extern MTX_Scale43_
+.extern NitroMain
+.extern OS_AllocFromArenaHi
+.extern OS_AllocFromArenaLo
+.extern OS_AllocFromHeap
+.extern OS_CancelAlarm
+.extern OS_CreateAlarm
+.extern OS_CreateThread
+.extern OS_DestroyThread
+.extern OS_DisableInterrupts
+.extern OS_DisableIrqMask
+.extern OS_DisableScheduler
+.extern OS_EnableIrqMask
+.extern OS_EnableScheduler
+.extern OS_ExitThread
+.extern OS_FreeToHeap
+.extern OS_GetCpsrIrq
+.extern OS_GetDTCMAddress
+.extern OS_GetInitArenaHi
+.extern OS_GetInitArenaLo
+.extern OS_GetIrqFunction
+.extern OS_GetLockID
+.extern OS_GetLowEntropyData
+.extern OS_GetMacAddress
+.extern OS_GetOwnerInfo
+.extern OS_GetOwnerRtcOffset
+.extern OS_GetProcMode
+.extern OS_GetThreadPriority
+.extern OS_GetTick
+.extern OS_GetTickLo
+.extern OS_Halt
+.extern OS_IRQTable
+.extern OS_Init
+.extern OS_InitAlarm
+.extern OS_InitMessageQueue
+.extern OS_InitMutex
+.extern OS_InitTick
+.extern OS_IrqDummy
+.extern OS_IrqHandler
+.extern OS_IsAlarmAvailable
+.extern OS_IsRunOnEmulator
+.extern OS_IsThreadTerminated
+.extern OS_IsTickAvailable
+.extern OS_JamMessage
+.extern OS_JoinThread
+.extern OS_LockCartridge
+.extern OS_LockMutex
+.extern OS_ReadMessage
+.extern OS_ReadOwnerOfLockWord
+.extern OS_ReceiveMessage
+.extern OS_ReleaseLockID
+.extern OS_RescheduleThread
+.extern OS_ResetRequestIrqMask
+.extern OS_ResetSystem
+.extern OS_RestoreInterrupts
+.extern OS_SNPrintf
+.extern OS_SendMessage
+.extern OS_SetAlarm
+.extern OS_SetArenaHi
+.extern OS_SetArenaLo
+.extern OS_SetDPermissionsForProtectionRegion
+.extern OS_SetIrqFunction
+.extern OS_SetIrqMask
+.extern OS_SetThreadPriority
+.extern OS_Sleep
+.extern OS_SleepThread
+.extern OS_SpinWait
+.extern OS_Terminate
+.extern OS_TryLockCard
+.extern OS_TryLockCartridge
+.extern OS_TryLockMutex
+.extern OS_UnlockCard
+.extern OS_UnlockCartridge
+.extern OS_UnlockCartridge2
+.extern OS_UnlockMutex
+.extern OS_WaitIrq
+.extern OS_WakeupThread
+.extern OS_WakeupThreadDirect
+.extern OS_YieldThread
+.extern OSi_DoResetSystem
+.extern OSi_EnterDmaCallback
+.extern OSi_IrqDma0
+.extern OSi_IrqDma1
+.extern OSi_IrqDma2
+.extern OSi_IrqDma3
+.extern OSi_IrqThreadQueue
+.extern OSi_IrqTimer0
+.extern OSi_IrqTimer1
+.extern OSi_IrqTimer2
+.extern OSi_IrqTimer3
+.extern OSi_IsResetOccurred
+.extern OSi_MainExArenaEnabled
+.extern OSi_ThreadInfo
+.extern OSi_TryLockVram
+.extern OSi_UnlockVram
+.extern PM_AppendPostSleepCallback
+.extern PM_DeletePostSleepCallback
+.extern PM_DeletePreSleepCallback
+.extern PM_ForceToPowerOff
+.extern PM_GetBackLight
+.extern PM_GetLCDPower
+.extern PM_GoSleepMode
+.extern PM_Init
+.extern PM_PrependPreSleepCallback
+.extern PM_SetAmp
+.extern PM_SetAmpGain
+.extern PM_SetBackLight
+.extern PM_SetLCDPower
+.extern PMi_Lock
+.extern PMi_ReadRegister
+.extern PMi_SendPxiData
+.extern PMi_SendSleepStart
+.extern PMi_SetLED
+.extern PMi_SetLEDAsync
+.extern PMi_WaitBusy
+.extern PXI_Init
+.extern PXI_IsCallbackReady
+.extern PXI_SendWordByFifo
+.extern PXI_SetFifoRecvCallback
+.extern PXIi_HandlerRecvFifoNotEmpty
+.extern ProcessBlock
+.extern RTC_ConvertDateTimeToSecond
+.extern RTC_ConvertDateToDay
+.extern RTC_ConvertSecondToDateTime
+.extern RTC_GetDate
+.extern RTC_GetDateTimeAsync
+.extern RTC_GetTime
+.extern RTC_Init
+.extern RunScriptCommand
+.extern SDK_AUTOLOAD_DTCM_START
+.extern SDK_AUTOLOAD_LIST
+.extern SDK_AUTOLOAD_LIST_END
+.extern SDK_AUTOLOAD_START
+.extern SDK_MAIN_ARENA_LO
+.extern SDK_SECTION_ARENA_DTCM_START
+.extern SDK_SECTION_ARENA_EX_START
+.extern SDK_SECTION_ARENA_ITCM_START
+.extern SDK_STATIC_BSS_END
+.extern SDK_STATIC_BSS_START
+.extern SND_AssignWaveArc
+.extern SND_CalcChannelVolume
+.extern SND_DestroyBank
+.extern SND_DestroyWaveArc
+.extern SND_FlushCommand
+.extern SND_GetChannelStatus
+.extern SND_GetCurrentCommandTag
+.extern SND_GetFirstInstDataPos
+.extern SND_GetNextInstData
+.extern SND_GetPlayerStatus
+.extern SND_GetPlayerTickCounter
+.extern SND_GetWaveDataAddress
+.extern SND_GetWaveDataCount
+.extern SND_Init
+.extern SND_InvalidateBankData
+.extern SND_InvalidateSeqData
+.extern SND_InvalidateWaveData
+.extern SND_IsFinishedCommandTag
+.extern SND_LockChannel
+.extern SND_PauseSeq
+.extern SND_PrepareSeq
+.extern SND_RecvCommandReply
+.extern SND_ResetMasterPan
+.extern SND_SetChannelPan
+.extern SND_SetChannelTimer
+.extern SND_SetChannelVolume
+.extern SND_SetMasterPan
+.extern SND_SetOutputSelector
+.extern SND_SetPlayerChannelPriority
+.extern SND_SetPlayerVolume
+.extern SND_SetTrackAllocatableChannel
+.extern SND_SetTrackPan
+.extern SND_SetTrackPitch
+.extern SND_SetWaveDataAddress
+.extern SND_SetupAlarm
+.extern SND_SetupCapture
+.extern SND_SetupChannelPcm
+.extern SND_StartPreparedSeq
+.extern SND_StartTimer
+.extern SND_StopSeq
+.extern SND_StopTimer
+.extern SND_UnlockChannel
+.extern SND_WaitForCommandProc
+.extern STD_CopyLString
+.extern ScriptCall
+.extern ScriptJump
+.extern ScriptReadHalfword
+.extern ScriptReadWord
+.extern ScriptReturn
+.extern SetupBytecodeScript
+.extern SetupNativeScript
+.extern StopScript
+.extern StringCopy
+.extern StringCopyN
+.extern StringFillEOS
+.extern StringLength
+.extern StringNotEqual
+.extern StringNotEqualN
+.extern TP_CheckError
+.extern TP_GetCalibratedPoint
+.extern TP_GetLatestIndexInAuto
+.extern TP_GetLatestRawPointInAuto
+.extern TP_GetUserInfo
+.extern TP_Init
+.extern TP_RequestAutoSamplingStartAsync
+.extern TP_RequestAutoSamplingStopAsync
+.extern TP_RequestSamplingAsync
+.extern TP_SetCalibrateParam
+.extern TP_WaitBusy
+.extern TP_WaitRawResult
+.extern VEC_Add
+.extern VEC_CrossProduct
+.extern VEC_DotProduct
+.extern VEC_Fx16CrossProduct
+.extern VEC_Fx16DotProduct
+.extern VEC_Fx16Normalize
+.extern VEC_Mag
+.extern VEC_Normalize
+.extern VEC_Subtract
+.extern WM_Disable
+.extern WM_Disconnect
+.extern WM_Enable
+.extern WM_End
+.extern WM_EndDCF
+.extern WM_EndMP
+.extern WM_EndParent
+.extern WM_EndScan
+.extern WM_Finish
+.extern WM_GetAllowedChannel
+.extern WM_GetDispersionBeaconPeriod
+.extern WM_GetDispersionScanPeriod
+.extern WM_GetLinkLevel
+.extern WM_Init
+.extern WM_Initialize
+.extern WM_MeasureChannel
+.extern WM_PowerOff
+.extern WM_PowerOn
+.extern WM_Reset
+.extern WM_SetBeaconIndication
+.extern WM_SetDCFData
+.extern WM_SetEntry
+.extern WM_SetGameInfo
+.extern WM_SetIndCallback
+.extern WM_SetLifeTime
+.extern WM_SetMPDataToPortEx
+.extern WM_SetParentParameter
+.extern WM_SetPortCallback
+.extern WM_SetWEPKeyEx
+.extern WM_StartConnectEx
+.extern WM_StartDCF
+.extern WM_StartMP
+.extern WM_StartParent
+.extern WM_StartScan
+.extern WM_StartScanEx
+.extern WMi_GetStatusAddress
+.extern __call_static_initializers
+.extern __destroy_global_chain
+.extern _ddiv
+.extern _fadd
+.extern _fdiv
+.extern _feq
+.extern _ffix
+.extern _ffixu
+.extern _fflt
+.extern _ffltu
+.extern _fgr
+.extern _fmul
+.extern _fp_init
+.extern _fsub
+.extern _ll_mod
+.extern _ll_mul
+.extern _ll_sdiv
+.extern _ll_shl
+.extern _ll_udiv
+.extern _s32_div_f
+.extern _u32_div_f
+.extern _u32_div_not_0_f
+.extern abs
+.extern cardi_common
+.extern gScriptCmdTable
+.extern memcmp
+.extern memcpy
+.extern memmove
+.extern strcmp
+.extern strcpy
+.extern strlen
+.extern tempName_NNS_FndAllocFromExpHeapEx
+.extern tempName_NNS_FndCreateExpHeapEx
+.extern thunk_FUN_02096e4c
+.extern thunk_FUN_02097190
+.extern thunk_FUN_020adc8c
+.extern thunk_FUN_020adc8c_2
+.extern thunk_FUN_020afda0
+.extern thunk_FUN_020afda0_2
+.extern thunk_FUN_020b5040
+.extern Unk_0210683C
+.extern Unk_02106840
+.extern Unk_02106900
+.extern Unk_02106A00
+.extern Unk_02106A04
+.extern OSi_IrqCallbackInfo
+.extern OSi_IrqCallbackInfoIndex
+.extern SDK_SYS_STACKSIZE
+.extern SDK_IRQ_STACKSIZE
+.extern OSi_IsThreadInitialized
+.extern OSi_LauncherThread
+.extern OSi_CurrentThreadPtr
+.extern OSi_IdleThread
+.extern OSi_IdleThreadStack
+.extern OSi_RescheduleCount
+.extern OSi_SystemCallbackInSwitchThread
+.extern OSi_Initialized
+.extern OSi_HeapInfo
+.extern OSi_DebuggerHandler
+.extern OSi_ExContext
+.extern OSi_UserExceptionHandler
+.extern OSi_UserExceptionHandlerArg
+.extern OSi_TimerReserved
+.extern OSi_UseTick
+.extern OSi_NeedResetTimer
+.extern OSi_TickCounter
+.extern OSi_UseAlarm
+.extern OSi_AlarmQueue
+.extern OSi_UseVAlarm
+.extern OSi_PreviousVCount
+.extern OSi_VFrameCount
+.extern OSi_VAlarmQueue
+.extern OSi_IsInitReset
+.extern OSi_vramExclusive
+.extern OSi_vramLockId
+.extern OSi_ThreadIdCount
+.extern OSi_StackForDestructor
+.extern SDK_AUTOLOAD_ITCM_START
+.extern SDK_AUTOLOAD_ITCM_END
+.extern SDK_AUTOLOAD_DTCM_START
+.extern SDK_AUTOLOAD_DTCM_END
diff --git a/src/FUN_02000DF4.c b/arm9/src/FUN_02000DF4.c
index 0099480c..0099480c 100644
--- a/src/FUN_02000DF4.c
+++ b/arm9/src/FUN_02000DF4.c
diff --git a/src/main.c b/arm9/src/main.c
index bfd6c82e..bfd6c82e 100644
--- a/src/main.c
+++ b/arm9/src/main.c
diff --git a/src/script.c b/arm9/src/script.c
index 7a7ae894..7a7ae894 100644
--- a/src/script.c
+++ b/arm9/src/script.c
diff --git a/src/string_util.c b/arm9/src/string_util.c
index 8f9c96ff..8f9c96ff 100644
--- a/src/string_util.c
+++ b/arm9/src/string_util.c
diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt
new file mode 100644
index 00000000..075d22a9
--- /dev/null
+++ b/arm9/undefined_syms.txt
@@ -0,0 +1,506 @@
+SDK_SYS_STACKSIZE = 0x00000000;
+CONST_34 = 0x00000034;
+CONST_3F = 0x0000003F;
+SDK_IRQ_STACKSIZE = 0x00000400;
+
+// .data
+// OS
+OSi_IrqCallbackInfoIndex = 0x02106818;
+// DGT
+Unk_0210683C = 0x0210683C;
+Unk_02106840 = 0x02106840;
+Unk_02106900 = 0x02106900;
+Unk_02106A00 = 0x02106A00;
+Unk_02106A04 = 0x02106A04;
+
+// .bss
+gBacklightTop = 0x02106FA0;
+gBacklightTop_2 = 0x02106FA0;
+gUnknown2106FB8 = 0x02106FB8;
+gUnknown21C48B8 = 0x021C48B8;
+gUnk021C4918 = 0x021C4918;
+OSi_IrqCallbackInfo = 0x021D341C;
+isInitialized = 0x021D347C;
+OSi_StackForDestructor = 0x021D3480;
+OSi_RescheduleCount = 0x021D3484;
+OSi_ThreadIdCount = 0x021D3488;
+OSi_SystemCallbackInSwitchThread = 0x021D348C;
+OSi_CurrentThreadPtr = 0x021D3490;
+OSi_IsThreadInitialized = 0x021D3494;
+OSi_ThreadInfo = 0x021D3498;
+OSi_IdleThread = 0x021D34A8;
+OSi_LauncherThread = 0x021D3568;
+OSi_IdleThreadStack = 0x021D3628;
+OSi_Initialized = 0x021D36F0;
+OSi_MainExArenaEnabled = 0x021D36F4;
+OSi_HeapInfo = 0x021D36F8;
+OSi_UserExceptionHandler = 0x021D371C;
+OSi_UserExceptionHandlerArg = 0x21D3720;
+OSi_DebuggerHandler = 0x021D3724;
+OSi_ExContext = 0x021D3728;
+OSi_TimerReserved = 0x021D37A8;
+OSi_UseTick = 0x021D37AC;
+OSi_NeedResetTimer = 0x021D37B0;
+OSi_TickCounter = 0x021D37B4;
+OSi_UseAlarm = 0x021D37BC;
+OSi_AlarmQueue = 0x021D37C0;
+OSi_UseVAlarm = 0x021D37C8;
+OSi_PreviousVCount = 0x021D37CC;
+OSi_VFrameCount = 0x021D37D0;
+OSi_VAlarmQueue = 0x021D37D4;
+OSi_IsInitReset = 0x021D37DC;
+OSi_IsResetOccurred = 0x021D37E0;
+OSi_vramExclusive = 0x021D37E4;
+OSi_vramLockId = 0x021D37E8;
+cardi_common = 0x021D55C0;
+
+// Overlay
+FUN_021D74E0 = 0x021D74E0;
+FUN_021D76AC = 0x021D76AC;
+gUnk021D76C8 = 0x021D76C8;
+FUN_021D77C4 = 0x021D77C4;
+FUN_021D7800 = 0x021D7800;
+FUN_021D78FC = 0x021D78FC;
+FUN_021D79B4 = 0x021D79B4;
+FUN_021D7CA4 = 0x021D7CA4;
+FUN_021D7F8C = 0x021D7F8C;
+FUN_021D8018 = 0x021D8018;
+FUN_021D8164 = 0x021D8164;
+FUN_021D82BC = 0x021D82BC;
+FUN_021D8320 = 0x021D8320;
+FUN_021D836C = 0x021D836C;
+FUN_021D83A8 = 0x021D83A8;
+FUN_021D83C0 = 0x021D83C0;
+FUN_021D844C = 0x021D844C;
+FUN_021D8494 = 0x021D8494;
+FUN_021D85FC = 0x021D85FC;
+FUN_021D8624 = 0x021D8624;
+FUN_021D865C = 0x021D865C;
+FUN_021D8758 = 0x021D8758;
+FUN_021D8820 = 0x021D8820;
+FUN_021D88E4 = 0x021D88E4;
+FUN_021D89CC = 0x021D89CC;
+FUN_021D8B64 = 0x021D8B64;
+FUN_021D8C24 = 0x021D8C24;
+FUN_021D917C = 0x021D917C;
+FUN_021D959C = 0x021D959C;
+FUN_021D967C = 0x021D967C;
+FUN_021D96F4 = 0x021D96F4;
+FUN_021D9708 = 0x021D9708;
+FUN_021D971C = 0x021D971C;
+FUN_021D9820 = 0x021D9820;
+FUN_021D99F8 = 0x021D99F8;
+FUN_021DA464 = 0x021DA464;
+FUN_021DA4EC = 0x021DA4EC;
+FUN_021DA54C = 0x021DA54C;
+FUN_021DA58C = 0x021DA58C;
+FUN_021DA5B8 = 0x021DA5B8;
+FUN_021DA5C8 = 0x021DA5C8;
+FUN_021DA5D0 = 0x021DA5D0;
+FUN_021DA5D8 = 0x021DA5D8;
+FUN_021DA7B4 = 0x021DA7B4;
+FUN_021DAAA4 = 0x021DAAA4;
+FUN_021DAC70 = 0x021DAC70;
+FUN_021DAE40 = 0x021DAE40;
+FUN_021DAED4 = 0x021DAED4;
+FUN_021DAF28 = 0x021DAF28;
+FUN_021DAF78 = 0x021DAF78;
+FUN_021DAF98 = 0x021DAF98;
+FUN_021DB030 = 0x021DB030;
+FUN_021DB7E8 = 0x021DB7E8;
+FUN_021DB858 = 0x021DB858;
+gUnk021DBE18 = 0x021DBE18;
+FUN_021DC174 = 0x021DC174;
+FUN_021DD6F0 = 0x021DD6F0;
+FUN_021DD718 = 0x021DD718;
+FUN_021DDB08 = 0x021DDB08;
+FUN_021E1374 = 0x021E1374;
+FUN_021E1858 = 0x021E1858;
+FUN_021E1994 = 0x021E1994;
+FUN_021E1BF8 = 0x021E1BF8;
+FUN_021E1C4C = 0x021E1C4C;
+FUN_021E1C54 = 0x021E1C54;
+FUN_021E1ECC = 0x021E1ECC;
+FUN_021E1F34 = 0x021E1F34;
+FUN_021E1F58 = 0x021E1F58;
+FUN_021E1F60 = 0x021E1F60;
+FUN_021E2464 = 0x021E2464;
+FUN_021E2608 = 0x021E2608;
+FUN_021E26CC = 0x021E26CC;
+FUN_021E27E8 = 0x021E27E8;
+FUN_021E288C = 0x021E288C;
+FUN_021E28A0 = 0x021E28A0;
+FUN_021E2950 = 0x021E2950;
+FUN_021E29B4 = 0x021E29B4;
+FUN_021E29C8 = 0x021E29C8;
+FUN_021E2A70 = 0x021E2A70;
+FUN_021E2AD4 = 0x021E2AD4;
+FUN_021E2B80 = 0x021E2B80;
+FUN_021E2B9C = 0x021E2B9C;
+FUN_021E2BB8 = 0x021E2BB8;
+FUN_021E2BD0 = 0x021E2BD0;
+FUN_021E2C24 = 0x021E2C24;
+FUN_021E2C58 = 0x021E2C58;
+FUN_021E2CBC = 0x021E2CBC;
+FUN_021E32F0 = 0x021E32F0;
+FUN_021E331C = 0x021E331C;
+FUN_021E3424 = 0x021E3424;
+FUN_021E3444 = 0x021E3444;
+FUN_021E495C = 0x021E495C;
+FUN_021E4C54 = 0x021E4C54;
+FUN_021E4C60 = 0x021E4C60;
+FUN_021E4DE4 = 0x021E4DE4;
+FUN_021E5614 = 0x021E5614;
+FUN_021E57D4 = 0x021E57D4;
+FUN_021E5970 = 0x021E5970;
+FUN_021E5B30 = 0x021E5B30;
+FUN_021E5FD8 = 0x021E5FD8;
+FUN_021E5FE0 = 0x021E5FE0;
+FUN_021E6410 = 0x021E6410;
+FUN_021E643C = 0x021E643C;
+FUN_021E6990 = 0x021E6990;
+FUN_021E69BC = 0x021E69BC;
+FUN_021E6BF4 = 0x021E6BF4;
+FUN_021E7030 = 0x021E7030;
+FUN_021E70F0 = 0x021E70F0;
+FUN_021E7138 = 0x021E7138;
+FUN_021E7184 = 0x021E7184;
+FUN_021E71E8 = 0x021E71E8;
+FUN_021E7750 = 0x021E7750;
+FUN_021E799C = 0x021E799C;
+FUN_021E7AC0 = 0x021E7AC0;
+FUN_021E7EA0 = 0x021E7EA0;
+FUN_021E7EB0 = 0x021E7EB0;
+FUN_021E7EC4 = 0x021E7EC4;
+FUN_021E7EC8 = 0x021E7EC8;
+FUN_021E7ED0 = 0x021E7ED0;
+FUN_021E7ED8 = 0x021E7ED8;
+FUN_021E7FBC = 0x021E7FBC;
+FUN_021E8128 = 0x021E8128;
+FUN_021E8130 = 0x021E8130;
+FUN_021E8140 = 0x021E8140;
+FUN_021E8144 = 0x021E8144;
+FUN_021E8148 = 0x021E8148;
+FUN_021E8158 = 0x021E8158;
+FUN_021E81BC = 0x021E81BC;
+FUN_021E84F4 = 0x021E84F4;
+FUN_021E856C = 0x021E856C;
+FUN_021E8588 = 0x021E8588;
+FUN_021E85E4 = 0x021E85E4;
+FUN_021E85FC = 0x021E85FC;
+FUN_021EAE90 = 0x021EAE90;
+FUN_021EB044 = 0x021EB044;
+FUN_021EC57C = 0x021EC57C;
+FUN_021EC71C = 0x021EC71C;
+FUN_021EC854 = 0x021EC854;
+FUN_021EC864 = 0x021EC864;
+FUN_021ECD64 = 0x021ECD64;
+FUN_021ECF14 = 0x021ECF14;
+FUN_021ED0CC = 0x021ED0CC;
+FUN_021ED49C = 0x021ED49C;
+FUN_021ED4E0 = 0x021ED4E0;
+FUN_021ED52C = 0x021ED52C;
+FUN_021ED5C4 = 0x021ED5C4;
+FUN_021ED5EC = 0x021ED5EC;
+FUN_021ED644 = 0x021ED644;
+FUN_021ED940 = 0x021ED940;
+FUN_021EDA48 = 0x021EDA48;
+FUN_021EDBC8 = 0x021EDBC8;
+FUN_021EF5E0 = 0x021EF5E0;
+FUN_021EF604 = 0x021EF604;
+FUN_021EF620 = 0x021EF620;
+FUN_021EF654 = 0x021EF654;
+FUN_021EF824 = 0x021EF824;
+FUN_021EF844 = 0x021EF844;
+FUN_021EF8C8 = 0x021EF8C8;
+FUN_021EF8DC = 0x021EF8DC;
+FUN_021EFA9C = 0x021EFA9C;
+FUN_021F02C4 = 0x021F02C4;
+FUN_021F1D8C = 0x021F1D8C;
+FUN_021F1DC8 = 0x021F1DC8;
+FUN_021F1DFC = 0x021F1DFC;
+FUN_021F1EC0 = 0x021F1EC0;
+FUN_021F1F78 = 0x021F1F78;
+FUN_021F2094 = 0x021F2094;
+FUN_021F20D8 = 0x021F20D8;
+FUN_021F20F8 = 0x021F20F8;
+FUN_021F2AF4 = 0x021F2AF4;
+FUN_021F2E0C = 0x021F2E0C;
+FUN_021F2E28 = 0x021F2E28;
+FUN_021F2F48 = 0x021F2F48;
+FUN_021F2F6C = 0x021F2F6C;
+FUN_021F3A18 = 0x021F3A18;
+FUN_021F3AB4 = 0x021F3AB4;
+FUN_021F3B4C = 0x021F3B4C;
+FUN_021F3B7C = 0x021F3B7C;
+FUN_021F3DA4 = 0x021F3DA4;
+FUN_021F44D8 = 0x021F44D8;
+FUN_021F4520 = 0x021F4520;
+FUN_021F4568 = 0x021F4568;
+FUN_021F4594 = 0x021F4594;
+FUN_021F45E8 = 0x021F45E8;
+FUN_021F4608 = 0x021F4608;
+FUN_021F4BD0 = 0x021F4BD0;
+FUN_021F4C88 = 0x021F4C88;
+FUN_021F4D80 = 0x021F4D80;
+FUN_021F4DC8 = 0x021F4DC8;
+FUN_021F4E7C = 0x021F4E7C;
+FUN_021F57EC = 0x021F57EC;
+FUN_021F5C44 = 0x021F5C44;
+FUN_021F61DC = 0x021F61DC;
+FUN_021F61E8 = 0x021F61E8;
+FUN_02211E60 = 0x02211E60;
+FUN_0222D5C0 = 0x0222D5C0;
+FUN_0222DAEC = 0x0222DAEC;
+FUN_0222DD1C = 0x0222DD1C;
+FUN_0222DD38 = 0x0222DD38;
+FUN_0222E2BC = 0x0222E2BC;
+FUN_0222E360 = 0x0222E360;
+FUN_0222E3A0 = 0x0222E3A0;
+FUN_0222E7E8 = 0x0222E7E8;
+FUN_0222E874 = 0x0222E874;
+FUN_0222ED34 = 0x0222ED34;
+FUN_0222EDBC = 0x0222EDBC;
+FUN_0222F440 = 0x0222F440;
+FUN_0222F480 = 0x0222F480;
+FUN_0222F7E0 = 0x0222F7E0;
+FUN_0222F990 = 0x0222F990;
+FUN_022300D4 = 0x022300D4;
+FUN_022300DC = 0x022300DC;
+FUN_022300E4 = 0x022300E4;
+FUN_022300E8 = 0x022300E8;
+FUN_022300F4 = 0x022300F4;
+FUN_02230100 = 0x02230100;
+FUN_0223010C = 0x0223010C;
+FUN_02230118 = 0x02230118;
+FUN_02230124 = 0x02230124;
+FUN_02230F3C = 0x02230F3C;
+FUN_02230F70 = 0x02230F70;
+FUN_02230F80 = 0x02230F80;
+FUN_02231344 = 0x02231344;
+FUN_02231350 = 0x02231350;
+FUN_0223135C = 0x0223135C;
+FUN_02231368 = 0x02231368;
+FUN_02231374 = 0x02231374;
+FUN_02239944 = 0x02239944;
+FUN_02239AAC = 0x02239AAC;
+FUN_0223CACC = 0x0223CACC;
+FUN_0223CB08 = 0x0223CB08;
+FUN_0223CCDC = 0x0223CCDC;
+FUN_0223CD7C = 0x0223CD7C;
+FUN_0223D3D0 = 0x0223D3D0;
+FUN_0223D638 = 0x0223D638;
+FUN_0223D648 = 0x0223D648;
+FUN_0223DFB4 = 0x0223DFB4;
+FUN_0223E060 = 0x0223E060;
+FUN_0223E118 = 0x0223E118;
+FUN_0223E154 = 0x0223E154;
+FUN_0223E1A4 = 0x0223E1A4;
+FUN_0223E1E0 = 0x0223E1E0;
+FUN_0223E2AC = 0x0223E2AC;
+FUN_0223E4A8 = 0x0223E4A8;
+FUN_0223E4D4 = 0x0223E4D4;
+FUN_0223E554 = 0x0223E554;
+FUN_0223E6B8 = 0x0223E6B8;
+FUN_0223E734 = 0x0223E734;
+FUN_0223E7FC = 0x0223E7FC;
+FUN_0223EB8C = 0x0223EB8C;
+FUN_0223EF7C = 0x0223EF7C;
+FUN_0223F4D8 = 0x0223F4D8;
+FUN_0223F4F4 = 0x0223F4F4;
+FUN_0223F8D8 = 0x0223F8D8;
+FUN_0223FCE8 = 0x0223FCE8;
+FUN_02240790 = 0x02240790;
+FUN_022407CC = 0x022407CC;
+FUN_022407DC = 0x022407DC;
+FUN_022407F8 = 0x022407F8;
+FUN_02240834 = 0x02240834;
+FUN_02240844 = 0x02240844;
+FUN_0224089C = 0x0224089C;
+FUN_022408FC = 0x022408FC;
+FUN_022411F4 = 0x022411F4;
+FUN_02241230 = 0x02241230;
+FUN_02241914 = 0x02241914;
+FUN_02242A38 = 0x02242A38;
+FUN_02242BE0 = 0x02242BE0;
+FUN_0224312C = 0x0224312C;
+FUN_022432E4 = 0x022432E4;
+FUN_0224339C = 0x0224339C;
+FUN_022433A8 = 0x022433A8;
+FUN_022433B0 = 0x022433B0;
+FUN_022433B8 = 0x022433B8;
+FUN_022433F8 = 0x022433F8;
+FUN_02243408 = 0x02243408;
+FUN_02243428 = 0x02243428;
+FUN_02243448 = 0x02243448;
+FUN_0224345C = 0x0224345C;
+FUN_022434AC = 0x022434AC;
+FUN_022434BC = 0x022434BC;
+FUN_022434D0 = 0x022434D0;
+FUN_02243694 = 0x02243694;
+FUN_022436C8 = 0x022436C8;
+FUN_022436E8 = 0x022436E8;
+FUN_02243780 = 0x02243780;
+FUN_02243838 = 0x02243838;
+FUN_022438DC = 0x022438DC;
+FUN_022438E0 = 0x022438E0;
+FUN_022438FC = 0x022438FC;
+FUN_02243920 = 0x02243920;
+FUN_022439F8 = 0x022439F8;
+FUN_02243AD8 = 0x02243AD8;
+FUN_02243BA8 = 0x02243BA8;
+FUN_02243C5C = 0x02243C5C;
+FUN_02243D3C = 0x02243D3C;
+FUN_02243DA0 = 0x02243DA0;
+FUN_02243DB8 = 0x02243DB8;
+FUN_02243DC0 = 0x02243DC0;
+FUN_02243DC4 = 0x02243DC4;
+FUN_02243DD8 = 0x02243DD8;
+FUN_02243DE0 = 0x02243DE0;
+FUN_02243E34 = 0x02243E34;
+FUN_02243E74 = 0x02243E74;
+FUN_02243F18 = 0x02243F18;
+FUN_02243F50 = 0x02243F50;
+FUN_02243F9C = 0x02243F9C;
+FUN_02244210 = 0x02244210;
+FUN_02244558 = 0x02244558;
+FUN_02244660 = 0x02244660;
+FUN_022446BC = 0x022446BC;
+FUN_022446E0 = 0x022446E0;
+FUN_022446FC = 0x022446FC;
+FUN_02244758 = 0x02244758;
+FUN_02244770 = 0x02244770;
+FUN_02244824 = 0x02244824;
+FUN_0224484C = 0x0224484C;
+FUN_02244D1C = 0x02244D1C;
+FUN_02244D20 = 0x02244D20;
+FUN_02244D3C = 0x02244D3C;
+FUN_02244D40 = 0x02244D40;
+FUN_02244D58 = 0x02244D58;
+FUN_02244D98 = 0x02244D98;
+FUN_02244DA0 = 0x02244DA0;
+FUN_02244DB0 = 0x02244DB0;
+FUN_02244DBC = 0x02244DBC;
+FUN_02244DC4 = 0x02244DC4;
+FUN_02244EF8 = 0x02244EF8;
+FUN_02244F18 = 0x02244F18;
+FUN_02244F24 = 0x02244F24;
+FUN_02244F2C = 0x02244F2C;
+FUN_02245088 = 0x02245088;
+FUN_02245114 = 0x02245114;
+FUN_02245190 = 0x02245190;
+FUN_02245198 = 0x02245198;
+FUN_022451F0 = 0x022451F0;
+FUN_0224525C = 0x0224525C;
+FUN_022452A4 = 0x022452A4;
+FUN_02245324 = 0x02245324;
+FUN_02245340 = 0x02245340;
+FUN_02245358 = 0x02245358;
+FUN_0224566C = 0x0224566C;
+FUN_022456E8 = 0x022456E8;
+FUN_02245844 = 0x02245844;
+FUN_02245910 = 0x02245910;
+FUN_02245F1C = 0x02245F1C;
+FUN_02245F4C = 0x02245F4C;
+FUN_02245FA0 = 0x02245FA0;
+FUN_022461A4 = 0x022461A4;
+FUN_022461B8 = 0x022461B8;
+FUN_0224666C = 0x0224666C;
+FUN_022466A0 = 0x022466A0;
+FUN_022466AC = 0x022466AC;
+FUN_02246F1C = 0x02246F1C;
+FUN_02247294 = 0x02247294;
+FUN_022472AC = 0x022472AC;
+FUN_02247544 = 0x02247544;
+FUN_02247614 = 0x02247614;
+FUN_02247728 = 0x02247728;
+FUN_02247808 = 0x02247808;
+FUN_02247970 = 0x02247970;
+FUN_02247A34 = 0x02247A34;
+FUN_022483BC = 0x022483BC;
+FUN_022483E0 = 0x022483E0;
+FUN_022483EC = 0x022483EC;
+FUN_02248724 = 0x02248724;
+FUN_0224884C = 0x0224884C;
+FUN_022488CC = 0x022488CC;
+FUN_022488EC = 0x022488EC;
+FUN_022488F4 = 0x022488F4;
+FUN_022488FC = 0x022488FC;
+FUN_0224891C = 0x0224891C;
+FUN_02248B54 = 0x02248B54;
+FUN_02248B58 = 0x02248B58;
+FUN_02248B5C = 0x02248B5C;
+FUN_02248B60 = 0x02248B60;
+FUN_02248B6C = 0x02248B6C;
+FUN_02248CC0 = 0x02248CC0;
+FUN_02248CD0 = 0x02248CD0;
+FUN_02248DF8 = 0x02248DF8;
+FUN_02248F70 = 0x02248F70;
+FUN_02248FE0 = 0x02248FE0;
+FUN_02249038 = 0x02249038;
+FUN_022490A0 = 0x022490A0;
+FUN_022491FC = 0x022491FC;
+FUN_022494C8 = 0x022494C8;
+FUN_02249508 = 0x02249508;
+FUN_02249668 = 0x02249668;
+FUN_022497E8 = 0x022497E8;
+FUN_02249E6C = 0x02249E6C;
+FUN_02249E78 = 0x02249E78;
+FUN_02249E84 = 0x02249E84;
+FUN_02249E90 = 0x02249E90;
+FUN_0224A310 = 0x0224A310;
+FUN_0224A528 = 0x0224A528;
+FUN_0224A7C8 = 0x0224A7C8;
+FUN_0224ABAC = 0x0224ABAC;
+FUN_0224B124 = 0x0224B124;
+FUN_0224B2C4 = 0x0224B2C4;
+FUN_0224B568 = 0x0224B568;
+FUN_0224B818 = 0x0224B818;
+FUN_0224B86C = 0x0224B86C;
+FUN_0224B9E0 = 0x0224B9E0;
+FUN_0224BBEC = 0x0224BBEC;
+FUN_0224BD90 = 0x0224BD90;
+FUN_0224C038 = 0x0224C038;
+FUN_0224C27C = 0x0224C27C;
+FUN_0224C520 = 0x0224C520;
+FUN_0224C678 = 0x0224C678;
+FUN_0224C6E8 = 0x0224C6E8;
+FUN_0224C6F4 = 0x0224C6F4;
+FUN_0224C700 = 0x0224C700;
+FUN_0224C8C8 = 0x0224C8C8;
+FUN_0224CA2C = 0x0224CA2C;
+FUN_0224CA54 = 0x0224CA54;
+FUN_0224CA58 = 0x0224CA58;
+FUN_0224CA88 = 0x0224CA88;
+FUN_0224CA94 = 0x0224CA94;
+FUN_0224CAA0 = 0x0224CAA0;
+FUN_0224CAB4 = 0x0224CAB4;
+FUN_0224CB30 = 0x0224CB30;
+FUN_0224CBB0 = 0x0224CBB0;
+FUN_0224CC24 = 0x0224CC24;
+FUN_0224CECC = 0x0224CECC;
+FUN_0224D14C = 0x0224D14C;
+FUN_0224D2E0 = 0x0224D2E0;
+FUN_0224D3E8 = 0x0224D3E8;
+FUN_0224D70C = 0x0224D70C;
+FUN_0224D76C = 0x0224D76C;
+FUN_0224D79C = 0x0224D79C;
+FUN_0224DCB8 = 0x0224DCB8;
+FUN_0224DD94 = 0x0224DD94;
+FUN_0224DDB8 = 0x0224DDB8;
+FUN_0224E554 = 0x0224E554;
+FUN_0224E764 = 0x0224E764;
+FUN_0224E7C4 = 0x0224E7C4;
+FUN_0224F12C = 0x0224F12C;
+FUN_02252534 = 0x02252534;
+FUN_02252538 = 0x02252538;
+FUN_022567E0 = 0x022567E0;
+
+// ???
+SDK_MAIN_ARENA_LO = 0x0225FFA0;
+
+// EWRAM
+SDK_SECTION_ARENA_EX_START = 0x023E0000;
+
+// DTCM
+gUnk027FFC20 = 0x027FFC20;
diff --git a/asm/FUN_020C9C0C.s b/asm/FUN_020C9C0C.s
deleted file mode 100644
index b103a702..00000000
--- a/asm/FUN_020C9C0C.s
+++ /dev/null
@@ -1,13766 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
-
-
- arm_func_start OS_WaitIrq
-OS_WaitIrq:
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- mov r4, r1
- bl OS_DisableInterrupts
- cmp r5, #0x0
- beq _020C9C3C
- ldr r1, _020C9C80 ; =0x027E0000
- mvn r2, r4
- add r1, r1, #0x3000
- ldr r3, [r1, #0xff8]
- and r2, r3, r2
- str r2, [r1, #0xff8]
-_020C9C3C:
- bl OS_RestoreInterrupts
- ldr r1, _020C9C80 ; =0x027E0000
- add r0, r1, #0x3000
- ldr r0, [r0, #0xff8]
- ands r0, r4, r0
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldr r0, _020C9C84 ; =0x00003FF8
- add r6, r1, r0
- ldr r5, _020C9C88 ; =0x027E0060
-_020C9C64:
- mov r0, r5
- bl OS_SleepThread
- ldr r0, [r6, #0x0]
- ands r0, r4, r0
- beq _020C9C64
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020C9C80: .word 0x027E0000
-_020C9C84: .word 0x00003FF8
-_020C9C88: .word 0x027E0060
-
- arm_func_start OSi_IrqTimer3
-OSi_IrqTimer3: ; 0x020C9C8C
- ldr ip, _020C9C98 ; =OSi_IrqCallback
- mov r0, #0x7
- bx r12
- .balign 4
-_020C9C98: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqTimer2
-OSi_IrqTimer2: ; 0x020C9C9C
- ldr ip, _020C9CA8 ; =OSi_IrqCallback
- mov r0, #0x6
- bx r12
- .balign 4
-_020C9CA8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqTimer1
-OSi_IrqTimer1: ; 0x020C9CAC
- ldr ip, _020C9CB8 ; =OSi_IrqCallback
- mov r0, #0x5
- bx r12
- .balign 4
-_020C9CB8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqTimer0
-OSi_IrqTimer0: ; 0x020C9CBC
- ldr ip, _020C9CC8 ; =OSi_IrqCallback
- mov r0, #0x4
- bx r12
- .balign 4
-_020C9CC8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqDma3
-OSi_IrqDma3: ; 0x020C9CCC
- ldr ip, _020C9CD8 ; =OSi_IrqCallback
- mov r0, #0x3
- bx r12
- .balign 4
-_020C9CD8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqDma2
-OSi_IrqDma2: ; 0x020C9CDC
- ldr ip, _020C9CE8 ; =OSi_IrqCallback
- mov r0, #0x2
- bx r12
- .balign 4
-_020C9CE8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqDma1
-OSi_IrqDma1: ; 0x020C9CEC
- ldr ip, _020C9CF8 ; =OSi_IrqCallback
- mov r0, #0x1
- bx r12
- .balign 4
-_020C9CF8: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqDma0
-OSi_IrqDma0: ; 0x020C9CFC
- ldr ip, _020C9D08 ; =OSi_IrqCallback
- mov r0, #0x0
- bx r12
- .balign 4
-_020C9D08: .word OSi_IrqCallback
-
- arm_func_start OSi_IrqCallback
-OSi_IrqCallback: ; 0x020C9D0C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r1, #0xc
- mul r4, r0, r1
- ldr r2, _020C9D94 ; =0x021D341C
- ldr r3, _020C9D98 ; =0x02106818
- mov r0, r0, lsl #0x1
- ldr r1, [r2, r4]
- ldrh r3, [r3, r0]
- mov r5, #0x1
- mov r0, #0x0
- str r0, [r2, r4]
- cmp r1, #0x0
- mov r5, r5, lsl r3
- beq _020C9D54
- ldr r0, _020C9D9C ; =0x021D3424
- ldr r0, [r0, r4]
- blx r1
-_020C9D54:
- ldr r0, _020C9DA0 ; =0x027E0000
- ldr r1, _020C9DA4 ; =0x021D3420
- add r0, r0, #0x3000
- ldr r2, [r0, #0xff8]
- orr r2, r2, r5
- str r2, [r0, #0xff8]
- ldr r0, [r1, r4]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r0, r5
- bl OS_DisableIrqMask
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020C9D94: .word 0x021D341C
-_020C9D98: .word 0x02106818
-_020C9D9C: .word 0x021D3424
-_020C9DA0: .word 0x027E0000
-_020C9DA4: .word 0x021D3420
-
- arm_func_start OS_IrqDummy
-OS_IrqDummy: ; 0x020C9DA8
- bx lr
-
- arm_func_start OS_SetIrqStackChecker
-OS_SetIrqStackChecker: ; 0x020C9DAC
- ldr ip, _020C9DD0 ; =0x027E0000
- ldr r3, _020C9DD4 ; =0xFDDB597D
- add r0, r12, #0x3000
- ldr r2, _020C9DD8 ; =0x7BF9DD5B
- ldr r1, _020C9DDC ; =0x00000400
- str r3, [r0, #0xf7c]
- add r0, r12, #0x3f80
- str r2, [r0, -r1]
- bx lr
- .balign 4
-_020C9DD0: .word 0x027E0000
-_020C9DD4: .word 0xFDDB597D
-_020C9DD8: .word 0x7BF9DD5B
-_020C9DDC: .word 0x00000400
-
- arm_func_start OS_ResetRequestIrqMask
-OS_ResetRequestIrqMask: ; 0x020C9DE0
- ldr ip, _020C9E0C ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9E10 ; =0x04000214
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9E0C: .word 0x04000208
-_020C9E10: .word 0x04000214
-
- arm_func_start OS_DisableIrqMask
-OS_DisableIrqMask: ; 0x020C9E14
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr lr, _020C9E54 ; =0x04000208
- mov r3, #0x0
- ldrh r12, [lr, #0x0]
- ldr r2, _020C9E58 ; =0x04000210
- mvn r1, r0
- strh r3, [lr, #0x0]
- ldr r0, [r2, #0x0]
- and r1, r0, r1
- str r1, [r2, #0x0]
- ldrh r1, [lr, #0x0]
- strh r12, [lr, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020C9E54: .word 0x04000208
-_020C9E58: .word 0x04000210
-
- arm_func_start OS_EnableIrqMask
-OS_EnableIrqMask: ; 0x020C9E5C
- ldr ip, _020C9E8C ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9E90 ; =0x04000210
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- orr r0, r1, r0
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9E8C: .word 0x04000208
-_020C9E90: .word 0x04000210
-
- arm_func_start OS_SetIrqMask
-OS_SetIrqMask: ; 0x020C9E94
- ldr ip, _020C9EC0 ; =0x04000208
- mov r1, #0x0
- ldrh r3, [r12, #0x0]
- ldr r2, _020C9EC4 ; =0x04000210
- strh r1, [r12, #0x0]
- ldr r1, [r2, #0x0]
- str r0, [r2, #0x0]
- ldrh r0, [r12, #0x0]
- mov r0, r1
- strh r3, [r12, #0x0]
- bx lr
- .balign 4
-_020C9EC0: .word 0x04000208
-_020C9EC4: .word 0x04000210
-
- arm_func_start OSi_EnterTimerCallback
-OSi_EnterTimerCallback: ; 0x020C9EC8
- stmdb sp!, {r4,lr}
- mov r3, #0xc
- mul r4, r0, r3
- ldr ip, _020C9F08 ; =0x021D344C
- add r0, r0, #0x3
- mov r3, #0x1
- mov r0, r3, lsl r0
- ldr r3, _020C9F0C ; =0x021D3454
- str r1, [r12, r4]
- str r2, [r3, r4]
- bl OS_EnableIrqMask
- ldr r0, _020C9F10 ; =0x021D3450
- mov r1, #0x1
- str r1, [r0, r4]
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020C9F08: .word 0x021D344C
-_020C9F0C: .word 0x021D3454
-_020C9F10: .word 0x021D3450
-
- arm_func_start OSi_EnterDmaCallback
-OSi_EnterDmaCallback: ; 0x020C9F14
- stmdb sp!, {r4-r6,lr}
- mov r3, #0xc
- mul r6, r0, r3
- ldr ip, _020C9F54 ; =0x021D341C
- add r4, r0, #0x8
- mov r5, #0x1
- mov r0, r5, lsl r4
- ldr r3, _020C9F58 ; =0x021D3424
- str r1, [r12, r6]
- str r2, [r3, r6]
- bl OS_EnableIrqMask
- and r1, r0, r5, lsl r4
- ldr r0, _020C9F5C ; =0x021D3420
- str r1, [r0, r6]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020C9F54: .word 0x021D341C
-_020C9F58: .word 0x021D3424
-_020C9F5C: .word 0x021D3420
-
- arm_func_start OS_GetIrqFunction
-OS_GetIrqFunction: ; 0x020C9F60
- ldr r2, _020C9FE4 ; =0x027E0000
- mov r3, #0x0
-_020C9F68:
- ands r1, r0, #0x1
- beq _020C9FC8
- cmp r3, #0x8
- blt _020C9F98
- cmp r3, #0xb
- bgt _020C9F98
- sub r1, r3, #0x8
- mov r0, #0xc
- mul r2, r1, r0
- ldr r0, _020C9FE8 ; =0x021D341C
- ldr r0, [r0, r2]
- bx lr
-_020C9F98:
- cmp r3, #0x3
- blt _020C9FC0
- cmp r3, #0x6
- bgt _020C9FC0
- add r1, r3, #0x1
- mov r0, #0xc
- mul r2, r1, r0
- ldr r0, _020C9FE8 ; =0x021D341C
- ldr r0, [r0, r2]
- bx lr
-_020C9FC0:
- ldr r0, [r2, #0x0]
- bx lr
-_020C9FC8:
- add r3, r3, #0x1
- cmp r3, #0x16
- mov r0, r0, lsr #0x1
- add r2, r2, #0x4
- blt _020C9F68
- mov r0, #0x0
- bx lr
- .balign 4
-_020C9FE4: .word 0x027E0000
-_020C9FE8: .word 0x021D341C
-
- arm_func_start OS_SetIrqFunction
-OS_SetIrqFunction: ; 0x020C9FEC
- stmdb sp!, {r4-r8,lr}
- mov r8, #0x0
- ldr lr, _020CA074 ; =0x027E0000
- ldr r5, _020CA078 ; =0x021D341C
- mov r6, r8
- mov r12, r8
- mov r3, #0x1
- mov r2, #0xc
-_020CA00C:
- ands r4, r0, #0x1
- beq _020CA05C
- mov r7, r6
- cmp r8, #0x8
- blt _020CA030
- cmp r8, #0xb
- suble r4, r8, #0x8
- mlale r7, r4, r2, r5
- ble _020CA04C
-_020CA030:
- cmp r8, #0x3
- blt _020CA048
- cmp r8, #0x6
- addle r4, r8, #0x1
- mlale r7, r4, r2, r5
- ble _020CA04C
-_020CA048:
- str r1, [lr, r8, lsl #0x2]
-_020CA04C:
- cmp r7, #0x0
- strne r1, [r7, #0x0]
- strne r12, [r7, #0x8]
- strne r3, [r7, #0x4]
-_020CA05C:
- add r8, r8, #0x1
- cmp r8, #0x16
- mov r0, r0, lsr #0x1
- blt _020CA00C
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020CA074: .word 0x027E0000
-_020CA078: .word 0x021D341C
-
- arm_func_start OS_InitIrqTable
-OS_InitIrqTable: ; 0x020CA07C
- ldr r0, _020CA090 ; =0x027E0060
- mov r1, #0x0
- str r1, [r0, #0x4]
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020CA090: .word 0x027E0060
-
- arm_func_start OS_UnlockCartridge
-OS_UnlockCartridge: ; 0x020CA094
- ldr r1, _020CA09C ; =OS_UnlockCartridge2
- bx r1
- .balign 4
-_020CA09C: .word OS_UnlockCartridge2
-
- arm_func_start OS_GetLockID
-OS_GetLockID: ; 0x020CA0A0
- ldr r3, _020CA0F0 ; =0x027FFFB0
- ldr r1, [r3, #0x0]
- clz r2, r1
- cmp r2, #0x20
- movne r0, #0x40
- bne _020CA0D4
- add r3, r3, #0x4
- ldr r1, [r3, #0x0]
- clz r2, r1
- cmp r2, #0x20
- ldr r0, _020CA0F4 ; =0xFFFFFFFD
- bxeq lr
- mov r0, #0x60
-_020CA0D4:
- add r0, r0, r2
- mov r1, #0x80000000
- mov r1, r1, lsr r2
- ldr r2, [r3, #0x0]
- bic r2, r2, r1
- str r2, [r3, #0x0]
- bx lr
- .balign 4
-_020CA0F0: .word 0x027FFFB0
-_020CA0F4: .word 0xFFFFFFFD
-
- arm_func_start OS_ReleaseLockID
-OS_ReleaseLockID: ; 0x020CA0F8
- ldr r3, _020CA124 ; =0x027FFFB0
- cmp r0, #0x60
- addpl r3, r3, #0x4
- subpl r0, r0, #0x60
- submi r0, r0, #0x40
- mov r1, #0x80000000
- mov r1, r1, lsr r0
- ldr r2, [r3, #0x0]
- orr r2, r2, r1
- str r2, [r3, #0x0]
- bx lr
- .balign 4
-_020CA124: .word 0x027FFFB0
-
- arm_func_start OS_ReadOwnerOfLockWord
-OS_ReadOwnerOfLockWord: ; 0x020CA128
- ldrh r0, [r0, #0x4]
- bx lr
-
- arm_func_start OSi_FreeCardBus
-OSi_FreeCardBus: ; 0x020CA130
- ldr r1, _020CA144 ; =0x04000204
- ldrh r0, [r1, #0x0]
- orr r0, r0, #0x800
- strh r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CA144: .word 0x04000204
-
- arm_func_start OSi_AllocateCardBus
-OSi_AllocateCardBus: ; 0x020CA148
- ldr r1, _020CA15C ; =0x04000204
- ldrh r0, [r1, #0x0]
- bic r0, r0, #0x800
- strh r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CA15C: .word 0x04000204
-
- arm_func_start OS_UnlockCard
-OS_UnlockCard: ; 0x020CA160
- ldr ip, _020CA170 ; =OS_UnlockByWord
- ldr r1, _020CA174 ; =0x027FFFE0
- ldr r2, _020CA178 ; =OSi_FreeCardBus
- bx r12
- .balign 4
-_020CA170: .word OS_UnlockByWord
-_020CA174: .word 0x027FFFE0
-_020CA178: .word OSi_FreeCardBus
-
- arm_func_start OS_TryLockCard
-OS_TryLockCard: ; 0x020CA17C
- ldr ip, _020CA18C ; =OS_TryLockByWord
- ldr r1, _020CA190 ; =0x027FFFE0
- ldr r2, _020CA194 ; =OSi_AllocateCardBus
- bx r12
- .balign 4
-_020CA18C: .word OS_TryLockByWord
-_020CA190: .word 0x027FFFE0
-_020CA194: .word OSi_AllocateCardBus
-
- arm_func_start OSi_FreeCartridgeBus
-OSi_FreeCartridgeBus: ; 0x020CA198
- ldr r1, _020CA1AC ; =0x04000204
- ldrh r0, [r1, #0x0]
- orr r0, r0, #0x80
- strh r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CA1AC: .word 0x04000204
-
- arm_func_start OSi_AllocateCartridgeBus
-OSi_AllocateCartridgeBus: ; 0x020CA1B0
- ldr r1, _020CA1C4 ; =0x04000204
- ldrh r0, [r1, #0x0]
- bic r0, r0, #0x80
- strh r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CA1C4: .word 0x04000204
-
- arm_func_start OS_TryLockCartridge
-OS_TryLockCartridge: ; 0x020CA1C8
- ldr ip, _020CA1DC ; =OSi_DoTryLockByWord
- ldr r1, _020CA1E0 ; =0x027FFFE8
- ldr r2, _020CA1E4 ; =OSi_AllocateCartridgeBus
- mov r3, #0x1
- bx r12
- .balign 4
-_020CA1DC: .word OSi_DoTryLockByWord
-_020CA1E0: .word 0x027FFFE8
-_020CA1E4: .word OSi_AllocateCartridgeBus
-
- arm_func_start OS_UnlockCartridge2
-OS_UnlockCartridge2: ; 0x020CA1E8
- ldr ip, _020CA1FC ; =FUN_020CA2B8
- ldr r1, _020CA200 ; =0x027FFFE8
- ldr r2, _020CA204 ; =OSi_FreeCartridgeBus
- mov r3, #0x1
- bx r12
- .balign 4
-_020CA1FC: .word FUN_020CA2B8
-_020CA200: .word 0x027FFFE8
-_020CA204: .word OSi_FreeCartridgeBus
-
- arm_func_start OS_LockCartridge
-OS_LockCartridge: ; 0x020CA208
- ldr ip, _020CA21C ; =FUN_020CA358
- ldr r1, _020CA220 ; =0x027FFFE8
- ldr r2, _020CA224 ; =OSi_AllocateCartridgeBus
- mov r3, #0x1
- bx r12
- .balign 4
-_020CA21C: .word FUN_020CA358
-_020CA220: .word 0x027FFFE8
-_020CA224: .word OSi_AllocateCartridgeBus
-
- arm_func_start OSi_DoTryLockByWord
-OSi_DoTryLockByWord:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- movs r6, r3
- mov r9, r0
- mov r8, r1
- mov r7, r2
- beq _020CA250
- bl OS_DisableInterrupts_IrqAndFiq
- mov r5, r0
- b _020CA258
-_020CA250:
- bl OS_DisableInterrupts
- mov r5, r0
-_020CA258:
- mov r0, r9
- mov r1, r8
- bl MI_SwapWord
- movs r4, r0
- bne _020CA27C
- cmp r7, #0x0
- beq _020CA278
- blx r7
-_020CA278:
- strh r9, [r8, #0x4]
-_020CA27C:
- cmp r6, #0x0
- beq _020CA290
- mov r0, r5
- bl OS_RestoreInterrupts_IrqAndFiq
- b _020CA298
-_020CA290:
- mov r0, r5
- bl OS_RestoreInterrupts
-_020CA298:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start OS_UnlockByWord
-OS_UnlockByWord: ; 0x020CA2A8
- ldr ip, _020CA2B4 ; =FUN_020CA2B8
- mov r3, #0x0
- bx r12
- .balign 4
-_020CA2B4: .word FUN_020CA2B8
-
- arm_func_start FUN_020CA2B8
-FUN_020CA2B8: ; 0x020CA2B8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r1
- ldrh r1, [r7, #0x4]
- mov r6, r2
- mov r5, r3
- cmp r0, r1
- addne sp, sp, #0x4
- mvnne r0, #0x1
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- cmp r5, #0x0
- beq _020CA2F8
- bl OS_DisableInterrupts_IrqAndFiq
- mov r4, r0
- b _020CA300
-_020CA2F8:
- bl OS_DisableInterrupts
- mov r4, r0
-_020CA300:
- mov r0, #0x0
- strh r0, [r7, #0x4]
- cmp r6, #0x0
- beq _020CA314
- blx r6
-_020CA314:
- mov r0, #0x0
- str r0, [r7, #0x0]
- cmp r5, #0x0
- beq _020CA330
- mov r0, r4
- bl OS_RestoreInterrupts_IrqAndFiq
- b _020CA338
-_020CA330:
- mov r0, r4
- bl OS_RestoreInterrupts
-_020CA338:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start OS_TryLockByWord
-OS_TryLockByWord: ; 0x020CA348
- ldr ip, _020CA354 ; =FUN_020CA358
- mov r3, #0x0
- bx r12
- .balign 4
-_020CA354: .word FUN_020CA358
-
- arm_func_start FUN_020CA358
-FUN_020CA358: ; 0x020CA358
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, r3
- bl OSi_DoTryLockByWord
- cmp r0, #0x0
- ldmleia sp!, {r4-r8,lr}
- bxle lr
- mov r4, #0x400
-_020CA380:
- mov r0, r4
- blx FUN_020005F2
- mov r0, r8
- mov r1, r7
- mov r2, r6
- mov r3, r5
- bl OSi_DoTryLockByWord
- cmp r0, #0x0
- bgt _020CA380
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start OS_InitLock
-OS_InitLock: ; 0x020CA3AC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020CA484 ; =0x021D347C
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r2, #0x1
- ldr r1, _020CA488 ; =0x027FFFF0
- str r2, [r0, #0x0]
- mov r2, #0x0
- mov r0, #0x7e
- str r2, [r1, #0x0]
- bl OS_TryLockByWord
- ldr r5, _020CA488 ; =0x027FFFF0
- ldrh r0, [r5, #0x6]
- cmp r0, #0x0
- beq _020CA410
- mov r4, #0x400
-_020CA3FC:
- mov r0, r4
- blx FUN_020005F2
- ldrh r0, [r5, #0x6]
- cmp r0, #0x0
- bne _020CA3FC
-_020CA410:
- ldr r2, _020CA48C ; =0x027FFFB0
- mvn r12, #0x0
- mov r0, #0x10000
- ldr r3, _020CA490 ; =0x027FFFB4
- ldr r1, _020CA494 ; =0x027FFFC0
- str r12, [r2, #0x0]
- rsb r12, r0, #0x0
- mov r0, #0x0
- mov r2, #0x28
- str r12, [r3, #0x0]
- bl MIi_CpuClear32
- ldr ip, _020CA498 ; =0x04000204
- ldr r1, _020CA488 ; =0x027FFFF0
- ldrh r3, [r12, #0x0]
- mov r0, #0x7e
- mov r2, #0x0
- orr r3, r3, #0x800
- strh r3, [r12, #0x0]
- ldrh r3, [r12, #0x0]
- orr r3, r3, #0x80
- strh r3, [r12, #0x0]
- bl OS_UnlockByWord
- ldr r1, _020CA488 ; =0x027FFFF0
- mov r0, #0x7f
- mov r2, #0x0
- bl OS_TryLockByWord
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CA484: .word 0x021D347C
-_020CA488: .word 0x027FFFF0
-_020CA48C: .word 0x027FFFB0
-_020CA490: .word 0x027FFFB4
-_020CA494: .word 0x027FFFC0
-_020CA498: .word 0x04000204
-
- arm_func_start OS_VSNPrintf
-OS_VSNPrintf: ; 0x020CA49C
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x64
- mov r9, r2
- str r1, [sp, #0x54]
- str r0, [sp, #0x5c]
- str r0, [sp, #0x58]
- ldrsb r0, [r9, #0x0]
- str r1, [sp, #0x0]
- mov r11, r3
- cmp r0, #0x0
- beq _020CAD18
- mov r0, #0xa
- str r0, [sp, #0xc]
- mov r0, #0x0
- str r0, [sp, #0x4]
- mov r0, #0x20
- str r0, [sp, #0x1c]
- mov r0, #0x30
- str r0, [sp, #0x20]
- mvn r0, #0x0
- str r0, [sp, #0x8]
- mov r0, #0x57
- str r0, [sp, #0x10]
- mov r0, #0x8
- str r0, [sp, #0x14]
- mov r0, #0x37
- str r0, [sp, #0x18]
- mov r0, #0x10
- str r0, [sp, #0x24]
- mov r0, #0x1
- str r0, [sp, #0x28]
- mov r0, #0x2b
- str r0, [sp, #0x34]
- mov r0, #0x2d
- str r0, [sp, #0x30]
- mov r0, #0x2
- str r0, [sp, #0x2c]
-_020CA530:
- ldrsb r1, [r9, #0x0]
- and r0, r1, #0xff
- eor r0, r0, #0x20
- sub r0, r0, #0xa1
- cmp r0, #0x3c
- bhs _020CA56C
- add r0, sp, #0x54
- bl string_put_char
- ldrsb r1, [r9, #0x1]!
- cmp r1, #0x0
- beq _020CAD0C
- add r0, sp, #0x54
- add r9, r9, #0x1
- bl string_put_char
- b _020CAD0C
-_020CA56C:
- cmp r1, #0x25
- beq _020CA584
- add r0, sp, #0x54
- add r9, r9, #0x1
- bl string_put_char
- b _020CAD0C
-_020CA584:
- ldr r6, [sp, #0x4]
- ldr r5, [sp, #0x8]
- ldr r2, [sp, #0xc]
- ldr r0, [sp, #0x10]
- mov r10, r6
- mov r3, r9
-_020CA59C:
- ldrsb r4, [r9, #0x1]!
- cmp r4, #0x20
- bgt _020CA5B4
- cmp r4, #0x20
- beq _020CA5F4
- b _020CA60C
-_020CA5B4:
- cmp r4, #0x30
- bgt _020CA60C
- cmp r4, #0x2b
- blt _020CA60C
- cmp r4, #0x2b
- beq _020CA5E0
- cmp r4, #0x2d
- beq _020CA5FC
- cmp r4, #0x30
- beq _020CA604
- b _020CA60C
-_020CA5E0:
- ldrsb r1, [r9, #-0x1]
- cmp r1, #0x20
- bne _020CA60C
- orr r6, r6, #0x2
- b _020CA59C
-_020CA5F4:
- orr r6, r6, #0x1
- b _020CA59C
-_020CA5FC:
- orr r6, r6, #0x8
- b _020CA59C
-_020CA604:
- orr r6, r6, #0x10
- b _020CA59C
-_020CA60C:
- cmp r4, #0x2a
- bne _020CA640
- add r11, r11, #0x4
- ldr r10, [r11, #-0x4]
- add r9, r9, #0x1
- cmp r10, #0x0
- rsblt r10, r10, #0x0
- orrlt r6, r6, #0x8
- b _020CA654
-_020CA630:
- ldrsb r4, [r9], #0x1
- mov r1, #0xa
- mla r1, r10, r1, r4
- sub r10, r1, #0x30
-_020CA640:
- ldrsb r1, [r9, #0x0]
- cmp r1, #0x30
- blt _020CA654
- cmp r1, #0x39
- ble _020CA630
-_020CA654:
- ldrsb r1, [r9, #0x0]
- cmp r1, #0x2e
- bne _020CA6AC
- ldrsb r1, [r9, #0x1]!
- ldr r5, [sp, #0x4]
- cmp r1, #0x2a
- bne _020CA698
- add r11, r11, #0x4
- ldr r5, [r11, #-0x4]
- add r9, r9, #0x1
- cmp r5, #0x0
- ldrlt r5, [sp, #0x8]
- b _020CA6AC
-_020CA688:
- ldrsb r4, [r9], #0x1
- mov r1, #0xa
- mla r1, r5, r1, r4
- sub r5, r1, #0x30
-_020CA698:
- ldrsb r1, [r9, #0x0]
- cmp r1, #0x30
- blt _020CA6AC
- cmp r1, #0x39
- ble _020CA688
-_020CA6AC:
- ldrsb r1, [r9, #0x0]
- cmp r1, #0x68
- beq _020CA6C4
- cmp r1, #0x6c
- beq _020CA6DC
- b _020CA6F0
-_020CA6C4:
- ldrsb r1, [r9, #0x1]!
- cmp r1, #0x68
- orrne r6, r6, #0x40
- addeq r9, r9, #0x1
- orreq r6, r6, #0x100
- b _020CA6F0
-_020CA6DC:
- ldrsb r1, [r9, #0x1]!
- cmp r1, #0x6c
- orrne r6, r6, #0x20
- addeq r9, r9, #0x1
- orreq r6, r6, #0x80
-_020CA6F0:
- ldrsb r1, [r9, #0x0]
- cmp r1, #0x69
- bgt _020CA740
- cmp r1, #0x63
- blt _020CA720
- cmp r1, #0x63
- beq _020CA7B4
- cmp r1, #0x64
- beq _020CA96C
- cmp r1, #0x69
- beq _020CA96C
- b _020CA950
-_020CA720:
- cmp r1, #0x25
- bgt _020CA734
- cmp r1, #0x25
- beq _020CA934
- b _020CA950
-_020CA734:
- cmp r1, #0x58
- beq _020CA7A0
- b _020CA950
-_020CA740:
- cmp r1, #0x6e
- bgt _020CA754
- cmp r1, #0x6e
- beq _020CA8DC
- b _020CA950
-_020CA754:
- sub r1, r1, #0x6f
- cmp r1, #0x9
- addls pc, pc, r1, lsl #0x2
- b _020CA950
-_020CA764:
- b _020CA78C
- b _020CA7A8
- b _020CA950
- b _020CA950
- b _020CA828
- b _020CA950
- b _020CA798
- b _020CA950
- b _020CA950
- b _020CA964
-_020CA78C:
- ldr r2, [sp, #0x14]
- orr r6, r6, #0x1000
- b _020CA96C
-_020CA798:
- orr r6, r6, #0x1000
- b _020CA96C
-_020CA7A0:
- ldr r0, [sp, #0x18]
- b _020CA964
-_020CA7A8:
- orr r6, r6, #0x4
- ldr r5, [sp, #0x14]
- b _020CA964
-_020CA7B4:
- cmp r5, #0x0
- bge _020CA950
- ands r0, r6, #0x8
- add r11, r11, #0x4
- ldr r4, [r11, #-0x4]
- beq _020CA7F0
- mov r0, r4, lsl #0x18
- mov r1, r0, asr #0x18
- add r0, sp, #0x54
- bl string_put_char
- ldr r1, [sp, #0x1c]
- sub r2, r10, #0x1
- add r0, sp, #0x54
- bl string_fill_char
- b _020CA820
-_020CA7F0:
- ands r0, r6, #0x10
- ldrne r0, [sp, #0x20]
- sub r2, r10, #0x1
- ldreq r0, [sp, #0x1c]
- mov r0, r0, lsl #0x18
- mov r1, r0, asr #0x18
- add r0, sp, #0x54
- bl string_fill_char
- mov r0, r4, lsl #0x18
- mov r1, r0, asr #0x18
- add r0, sp, #0x54
- bl string_put_char
-_020CA820:
- add r9, r9, #0x1
- b _020CAD0C
-_020CA828:
- add fp, fp, #0x4
- cmp r5, #0x0
- ldr r7, [sp, #0x4]
- ldr r4, [fp, #-0x4]
- bge _020CA860
- ldrsb r0, [r4]
- cmp r0, #0x0
- beq _020CA874
-_020CA848:
- add r7, r7, #0x1
- ldrsb r0, [r4, r7]
- cmp r0, #0x0
- bne _020CA848
- b _020CA874
-_020CA85C:
- add r7, r7, #0x1
-_020CA860:
- cmp r7, r5
- bge _020CA874
- ldrsb r0, [r4, r7]
- cmp r0, #0x0
- bne _020CA85C
-_020CA874:
- ands r0, r6, #0x8
- sub sl, sl, r7
- beq _020CA8A4
- mov r1, r4
- mov r2, r7
- add r0, sp, #0x54
- bl string_put_string
- ldr r1, [sp, #0x1C]
- mov r2, sl
- add r0, sp, #0x54
- bl string_fill_char
- b _020CA8D4
-_020CA8A4:
- ands r0, r6, #0x10
- ldrne r0, [sp, #0x20]
- mov r2, sl
- ldreq r0, [sp, #0x1C]
- mov r0, r0, lsl #0x18
- mov r1, r0, asr #0x18
- add r0, sp, #0x54
- bl string_fill_char
- mov r1, r4
- mov r2, r7
- add r0, sp, #0x54
- bl string_put_string
-_020CA8D4:
- add r9, r9, #0x1
- b _020CAD0C
-_020CA8DC:
- ands r0, r6, #0x100
- ldr r1, [sp, #0x58]
- ldr r0, [sp, #0x5c]
- sub r2, r1, r0
- bne _020CA92C
- ands r0, r6, #0x40
- addne r11, r11, #0x4
- ldrne r0, [r11, #-0x4]
- strneh r2, [r0, #0x0]
- bne _020CA92C
- ands r0, r6, #0x80
- addeq r11, r11, #0x4
- ldreq r0, [r11, #-0x4]
- streq r2, [r0, #0x0]
- beq _020CA92C
- add r11, r11, #0x4
- ldr r0, [r11, #-0x4]
- mov r1, r2, asr #0x1f
- str r2, [r0, #0x0]
- str r1, [r0, #0x4]
-_020CA92C:
- add r9, r9, #0x1
- b _020CAD0C
-_020CA934:
- add r0, r3, #0x1
- cmp r0, r9
- bne _020CA950
- add r0, sp, #0x54
- add r9, r9, #0x1
- bl string_put_char
- b _020CAD0C
-_020CA950:
- add r0, sp, #0x54
- mov r1, r3
- sub r2, r9, r3
- bl string_put_string
- b _020CAD0C
-_020CA964:
- ldr r2, [sp, #0x24]
- orr r6, r6, #0x1000
-_020CA96C:
- ands r1, r6, #0x8
- bicne r6, r6, #0x10
- cmp r5, #0x0
- bicge r6, r6, #0x10
- ldrlt r5, [sp, #0x28]
- ldr r7, [sp, #0x4]
- ands r1, r6, #0x1000
- beq _020CAA20
- ands r1, r6, #0x100
- addne r11, r11, #0x4
- ldrneb r4, [r11, #-0x4]
- movne r1, #0x0
- bne _020CA9D0
- ands r1, r6, #0x40
- addne r11, r11, #0x4
- ldrneh r4, [r11, #-0x4]
- movne r1, #0x0
- bne _020CA9D0
- ands r1, r6, #0x80
- addne r11, r11, #0x8
- ldrne r1, [r11, #-0x4]
- ldrne r4, [r11, #-0x8]
- addeq r11, r11, #0x4
- ldreq r4, [r11, #-0x4]
- moveq r1, #0x0
-_020CA9D0:
- bic r6, r6, #0x3
- ands r3, r6, #0x4
- beq _020CAAD8
- cmp r2, #0x10
- bne _020CAA0C
- mov r3, #0x0
- cmp r1, r3
- cmpeq r4, r3
- beq _020CAAD8
- ldr r3, [sp, #0x20]
- ldr r7, [sp, #0x2c]
- strb r3, [sp, #0x39]
- add r3, r0, #0x21
- strb r3, [sp, #0x38]
- b _020CAAD8
-_020CAA0C:
- cmp r2, #0x8
- ldreq r3, [sp, #0x20]
- ldreq r7, [sp, #0x28]
- streqb r3, [sp, #0x38]
- b _020CAAD8
-_020CAA20:
- ands r1, r6, #0x100
- addne r11, r11, #0x4
- ldrnesb r4, [r11, #-0x4]
- movne r1, r4, asr #0x1f
- bne _020CAA64
- ands r1, r6, #0x40
- addne r11, r11, #0x4
- ldrnesh r4, [r11, #-0x4]
- movne r1, r4, asr #0x1f
- bne _020CAA64
- ands r1, r6, #0x80
- addne r11, r11, #0x8
- ldrne r4, [r11, #-0x8]
- ldrne r1, [r11, #-0x4]
- addeq r11, r11, #0x4
- ldreq r4, [r11, #-0x4]
- moveq r1, r4, asr #0x1f
-_020CAA64:
- mov r3, #0x0
- and r8, r3, #0x0
- cmp r8, r3
- and r8, r1, #0x80000000
- cmpeq r8, r3
- beq _020CAAA0
- ldr r7, [sp, #0x30]
- mvn r4, r4
- strb r7, [sp, #0x38]
- mvn r7, r1
- mov r1, #0x1
- adds r4, r4, r1
- adc r1, r7, r3
- ldr r7, [sp, #0x28]
- b _020CAAD8
-_020CAAA0:
- cmp r1, r3
- cmpeq r4, r3
- bne _020CAAB4
- cmp r5, #0x0
- beq _020CAAD8
-_020CAAB4:
- ands r3, r6, #0x2
- ldrne r3, [sp, #0x34]
- ldrne r7, [sp, #0x28]
- strneb r3, [sp, #0x38]
- bne _020CAAD8
- ands r3, r6, #0x1
- ldrne r3, [sp, #0x1c]
- ldrne r7, [sp, #0x28]
- strneb r3, [sp, #0x38]
-_020CAAD8:
- cmp r2, #0x8
- ldr r8, [sp, #0x4]
- beq _020CAAF8
- cmp r2, #0xa
- beq _020CAB40
- cmp r2, #0x10
- beq _020CABDC
- b _020CAC28
-_020CAAF8:
- mov r0, #0x0
- cmp r1, r0
- cmpeq r4, r0
- beq _020CAC28
-_020CAB08:
- and r0, r4, #0x7
- add r3, r0, #0x30
- add r0, sp, #0x3a
- strb r3, [r0, r8]
- mov r4, r4, lsr #0x3
- mov r2, #0x0
- mov r0, r1, lsr #0x3
- orr r4, r4, r1, lsl #0x1d
- cmp r0, r2
- cmpeq r4, r2
- mov r1, r0
- add r8, r8, #0x1
- bne _020CAB08
- b _020CAC28
-_020CAB40:
- mov r0, #0x0
- cmp r0, r0
- cmpeq r1, r0
- bne _020CAB8C
- cmp r4, #0x0
- beq _020CAC28
-_020CAB58:
- ldr r0, _020CAD60 ; =0xCCCCCCCD
- umull r1, r0, r4, r0
- movs r0, r0, lsr #0x3
- mov r1, #0xa
- mul r1, r0, r1
- sub r1, r4, r1
- mov r4, r0
- add r1, r1, #0x30
- add r0, sp, #0x3a
- strb r1, [r0, r8]
- add r8, r8, #0x1
- bne _020CAB58
- b _020CAC28
-_020CAB8C:
- cmp r1, r0
- cmpeq r4, r0
- beq _020CAC28
-_020CAB98:
- ldr r2, [sp, #0xc]
- ldr r3, [sp, #0x4]
- mov r0, r4
- bl _ll_udiv
- mov r3, #0xa
- umull r3, r12, r0, r3
- subs r3, r4, r3
- mov r2, #0x0
- add r4, r3, #0x30
- add r3, sp, #0x3a
- strb r4, [r3, r8]
- cmp r1, r2
- cmpeq r0, r2
- mov r4, r0
- add r8, r8, #0x1
- bne _020CAB98
- b _020CAC28
-_020CABDC:
- mov r2, #0x0
- cmp r1, r2
- cmpeq r4, r2
- beq _020CAC28
-_020CABEC:
- and r3, r4, #0xf
- cmp r3, #0xa
- mov r4, r4, lsr #0x4
- addlt r3, r3, #0x30
- mov r2, r1, lsr #0x4
- orr r4, r4, r1, lsl #0x1c
- mov r1, r2
- addge r3, r3, r0
- add r2, sp, #0x3a
- strb r3, [r2, r8]
- mov r2, #0x0
- cmp r1, r2
- add r8, r8, #0x1
- cmpeq r4, r2
- bne _020CABEC
-_020CAC28:
- cmp r7, #0x0
- ble _020CAC4C
- ldrsb r0, [sp, #0x38]
- cmp r0, #0x30
- ldreq r1, [sp, #0x20]
- addeq r0, sp, #0x3a
- streqb r1, [r0, r8]
- ldreq r7, [sp, #0x4]
- addeq r8, r8, #0x1
-_020CAC4C:
- sub r5, r5, r8
- ands r0, r6, #0x10
- beq _020CAC68
- sub r0, r10, r8
- sub r0, r0, r7
- cmp r5, r0
- movlt r5, r0
-_020CAC68:
- cmp r5, #0x0
- subgt r10, r10, r5
- add r0, r7, r8
- ands r6, r6, #0x8
- sub r10, r10, r0
- bne _020CAC90
- ldr r1, [sp, #0x1c]
- add r0, sp, #0x54
- mov r2, r10
- bl string_fill_char
-_020CAC90:
- cmp r7, #0x0
- ble _020CACB8
- add r0, sp, #0x38
- add r4, r0, r7
-_020CACA0:
- ldrsb r1, [r4, #-0x1]!
- sub r7, r7, #0x1
- add r0, sp, #0x54
- bl string_put_char
-_020CACB0:
- cmp r7, #0x0
- bgt _020CACA0
-_020CACB8:
- ldr r1, [sp, #0x20]
- mov r2, r5
- add r0, sp, #0x54
- bl string_fill_char
-_020CACC8:
- cmp r8, #0x0
- ble _020CACF0
- add r0, sp, #0x3A
- add r4, r0, r8
-_020CACD8:
- ldrsb r1, [r4, #-0x1]!
- sub r8, r8, #0x1
- add r0, sp, #0x54
- bl string_put_char
- cmp r8, #0x0
- bgt _020CACD8
-_020CACF0:
- cmp r6, #0x0
- beq _020CAD08
- ldr r1, [sp, #0x1C]
- mov r2, sl
- add r0, sp, #0x54
- bl string_fill_char
-_020CAD08:
- add r9, r9, #0x1
-_020CAD0C:
- ldrsb r0, [r9, #0x0]
- cmp r0, #0x0
- bne _020CA530
-_020CAD18:
- ldr r0, [sp, #0x54]
- cmp r0, #0x0
- ldrne r0, [sp, #0x58]
- movne r1, #0x0
- strneb r1, [r0, #0x0]
- bne _020CAD48
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- ldrne r1, [sp, #0x5c]
- movne r2, #0x0
- addne r0, r1, r0
- strneb r2, [r0, #-0x1]
-_020CAD48:
- ldr r1, [sp, #0x58]
- ldr r0, [sp, #0x5c]
- sub r0, r1, r0
- add sp, sp, #0x64
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020CAD60: .word 0xCCCCCCCD
-
- arm_func_start OS_SNPrintf
-OS_SNPrintf: ; 0x020CAD64
- stmdb sp!, {r0-r3}
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- add r3, sp, #0x10
- bic r3, r3, #0x3
- ldr r2, [sp, #0x10]
- add r3, r3, #0x4
- bl OS_VSNPrintf
- add sp, sp, #0x4
- ldmia sp!, {lr}
- add sp, sp, #0x10
- bx lr
-
- arm_func_start OS_VSPrintf
-OS_VSPrintf: ; 0x020CAD94
- ldr ip, _020CADA8 ; =OS_VSNPrintf
- mov r3, r2
- mov r2, r1
- mvn r1, #0x80000000
- bx r12
- .balign 4
-_020CADA8: .word OS_VSNPrintf
-
- arm_func_start OS_SPrintf
-OS_SPrintf: ; 0x020CADAC
- stmdb sp!, {r0-r3}
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- add r2, sp, #0xc
- bic r2, r2, #0x3
- ldr r1, [sp, #0xc]
- add r2, r2, #0x4
- bl OS_VSPrintf
- add sp, sp, #0x4
- ldmia sp!, {lr}
- add sp, sp, #0x10
- bx lr
-
- arm_func_start string_put_string
-string_put_string: ; 0x020CADDC
- stmdb sp!, {r4,lr}
- cmp r2, #0x0
- ldmleia sp!, {r4,lr}
- bxle lr
- ldr lr, [r0, #0x0]
- mov r4, #0x0
- cmp lr, r2
- movhi lr, r2
- cmp lr, #0x0
- bls _020CAE1C
-_020CAE04:
- ldrsb r12, [r1, r4]
- ldr r3, [r0, #0x4]
- strb r12, [r3, r4]
- add r4, r4, #0x1
- cmp r4, lr
- blo _020CAE04
-_020CAE1C:
- ldr r1, [r0, #0x0]
- sub r1, r1, lr
- str r1, [r0, #0x0]
- ldr r1, [r0, #0x4]
- add r1, r1, r2
- str r1, [r0, #0x4]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start string_fill_char
-string_fill_char:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r2, #0x0
- addle sp, sp, #0x4
- ldmleia sp!, {lr}
- bxle lr
- ldr r12, [r0, #0x0]
- mov lr, #0x0
- cmp r12, r2
- movhi r12, r2
- cmp r12, #0x0
- bls _020CAE80
-_020CAE6C:
- ldr r3, [r0, #0x4]
- strb r1, [r3, lr]
- add lr, lr, #0x1
- cmp lr, r12
- blo _020CAE6C
-_020CAE80:
- ldr r1, [r0, #0x0]
- sub r1, r1, r12
- str r1, [r0, #0x0]
- ldr r1, [r0, #0x4]
- add r1, r1, r2
- str r1, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start string_put_char
-string_put_char:
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- ldrne r2, [r0, #0x4]
- strneb r1, [r2, #0x0]
- ldrne r1, [r0, #0x0]
- subne r1, r1, #0x1
- strne r1, [r0, #0x0]
- ldr r1, [r0, #0x4]
- add r1, r1, #0x1
- str r1, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020CAED0
-FUN_020CAED0: ; 0x020CAED0
- ldr r0, _020CAEDC ; =0x021D3494
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020CAEDC: .word 0x021D3494
-
- arm_func_start OS_SetThreadDestructor
-OS_SetThreadDestructor:
- str r1, [r0, #0xb4]
- bx lr
-
- arm_func_start OS_EnableScheduler
-OS_EnableScheduler: ; 0x020CAEE8
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r1, _020CAF1C ; =0x021D3484
- mov r4, #0x0
- ldr r3, [r1, #0x0]
- cmp r3, #0x0
- subne r2, r3, #0x1
- movne r4, r3
- strne r2, [r1, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CAF1C: .word 0x021D3484
-
- arm_func_start OS_DisableScheduler
-OS_DisableScheduler: ; 0x020CAF20
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r2, _020CAF54 ; =0x021D3484
- mvn r1, #0x0
- ldr r3, [r2, #0x0]
- cmp r3, r1
- addcc r1, r3, #0x1
- movcc r4, r3
- strcc r1, [r2, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CAF54: .word 0x021D3484
-
- arm_func_start OSi_IdleThreadProc
-OSi_IdleThreadProc: ; 0x020CAF58
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl OS_EnableInterrupts
-_020CAF64:
- bl OS_Halt
- b _020CAF64
-
- arm_func_start OS_SetSwitchThreadCallback
-OS_SetSwitchThreadCallback: ; 0x020CAF6C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020CAF9C ; =0x021D3498
- ldr r4, [r1, #0xc]
- str r5, [r1, #0xc]
- bl OS_RestoreInterrupts
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CAF9C: .word 0x021D3498
-
- arm_func_start OSi_SleepAlarmCallback
-OSi_SleepAlarmCallback: ; 0x020CAFA0
- ldr r2, [r0, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x0]
- ldr ip, _020CAFBC ; =OS_WakeupThreadDirect
- mov r0, r2
- str r1, [r2, #0xb0]
- bx r12
- .balign 4
-_020CAFBC: .word OS_WakeupThreadDirect
-
- arm_func_start OS_Sleep
-OS_Sleep: ; 0x020CAFC0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x34
- mov r4, r0
- add r0, sp, #0x8
- bl OS_CreateAlarm
- ldr r0, _020CB060 ; =0x021D3490
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x0]
- str r0, [sp, #0x4]
- bl OS_DisableInterrupts
- ldr r1, _020CB064 ; =0x000082EA
- mov r2, #0x0
- umull r5, r3, r4, r1
- mla r3, r4, r2, r3
- mla r3, r2, r1, r3
- mov r1, r5, lsr #0x6
- mov r4, r0
- ldr r5, [sp, #0x4]
- add r0, sp, #0x8
- add r2, sp, #0x4
- str r0, [r5, #0xb0]
- str r2, [sp, #0x0]
- mov r2, r3, lsr #0x6
- orr r1, r1, r3, lsl #0x1a
- ldr r3, _020CB068 ; =OSi_SleepAlarmCallback
- bl OS_SetAlarm
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- beq _020CB04C
- mov r5, #0x0
-_020CB038:
- mov r0, r5
- bl OS_SleepThread
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- bne _020CB038
-_020CB04C:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x34
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CB060: .word 0x021D3490
-_020CB064: .word 0x000082EA
-_020CB068: .word OSi_SleepAlarmCallback
-
- arm_func_start OS_GetThreadPriority
-OS_GetThreadPriority: ; 0x020CB06C
- ldr r0, [r0, #0x70]
- bx lr
-
- arm_func_start OS_SetThreadPriority
-OS_SetThreadPriority: ; 0x020CB074
- stmdb sp!, {r4-r8,lr}
- ldr r2, _020CB120 ; =0x021D3498
- mov r6, r0
- mov r5, r1
- ldr r8, [r2, #0x8]
- mov r7, #0x0
- bl OS_DisableInterrupts
- mov r4, r0
- b _020CB0A0
-_020CB098:
- mov r7, r8
- ldr r8, [r8, #0x68]
-_020CB0A0:
- cmp r8, #0x0
- beq _020CB0B0
- cmp r8, r6
- bne _020CB098
-_020CB0B0:
- cmp r8, #0x0
- beq _020CB0C4
- ldr r0, _020CB124 ; =0x021D34A8
- cmp r8, r0
- bne _020CB0D8
-_020CB0C4:
- mov r0, r4
- bl OS_RestoreInterrupts
-_020CB0CC:
- mov r0, #0x0
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CB0D8:
- ldr r0, [r8, #0x70]
- cmp r0, r5
- beq _020CB10C
- cmp r7, #0x0
- ldreq r1, [r6, #0x68]
- ldreq r0, _020CB120 ; =0x021D3498
- streq r1, [r0, #0x8]
- ldrne r0, [r6, #0x68]
- strne r0, [r7, #0x68]
- mov r0, r6
- str r5, [r6, #0x70]
- bl OSi_InsertThreadToList
- bl OSi_RescheduleThread
-_020CB10C:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020CB120: .word 0x021D3498
-_020CB124: .word 0x021D34A8
-
- arm_func_start OS_YieldThread
-OS_YieldThread: ; 0x020CB128
- stmdb sp!, {r4-r8,lr}
- ldr r0, _020CB1E0 ; =0x021D3498
- mov r7, #0x0
- mov r6, r7
- mov r5, r7
- ldr r8, [r0, #0x4]
- bl OS_DisableInterrupts
- ldr r1, _020CB1E0 ; =0x021D3498
- mov r4, r0
- ldr r2, [r1, #0x8]
- mov r0, r7
- cmp r2, #0x0
- beq _020CB188
- ldr r1, [r8, #0x70]
-_020CB160:
- cmp r2, r8
- moveq r7, r0
- ldr r0, [r2, #0x70]
- cmp r1, r0
- moveq r6, r2
- mov r0, r2
- ldr r2, [r2, #0x68]
- addeq r5, r5, #0x1
- cmp r2, #0x0
- bne _020CB160
-_020CB188:
- cmp r5, #0x1
- ble _020CB198
- cmp r6, r8
- bne _020CB1A8
-_020CB198:
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CB1A8:
- cmp r7, #0x0
- ldreq r1, [r8, #0x68]
- ldreq r0, _020CB1E0 ; =0x021D3498
- streq r1, [r0, #0x8]
- ldrne r0, [r8, #0x68]
- strne r0, [r7, #0x68]
- ldr r0, [r6, #0x68]
- str r0, [r8, #0x68]
- str r8, [r6, #0x68]
- bl OSi_RescheduleThread
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020CB1E0: .word 0x021D3498
-
- arm_func_start OS_RescheduleThread
-OS_RescheduleThread: ; 0x020CB1E4
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- mov r4, r0
- bl OSi_RescheduleThread
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start OS_SelectThread
-OS_SelectThread: ; 0x020CB204
- ldr r0, _020CB22C ; =0x021D3498
- ldr r0, [r0, #0x8]
- b _020CB214
-_020CB210:
- ldr r0, [r0, #0x68]
-_020CB214:
- cmp r0, #0x0
- bxeq lr
- ldr r1, [r0, #0x64]
- cmp r1, #0x1
- bne _020CB210
- bx lr
- .balign 4
-_020CB22C: .word 0x021D3498
-
- arm_func_start OS_WakeupThreadDirect
-OS_WakeupThreadDirect: ; 0x020CB230
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r1, #0x1
- mov r4, r0
- str r1, [r5, #0x64]
- bl OSi_RescheduleThread
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start OS_WakeupThread
-OS_WakeupThread: ; 0x020CB264
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x0]
- mov r4, r0
- cmp r1, #0x0
- beq _020CB2D0
- cmp r1, #0x0
- beq _020CB2BC
- mov r7, #0x1
- mov r6, #0x0
-_020CB294:
- mov r0, r5
- bl OSi_RemoveLinkFromQueue
- str r7, [r0, #0x64]
- str r6, [r0, #0x78]
- str r6, [r0, #0x80]
- ldr r1, [r0, #0x80]
- str r1, [r0, #0x7c]
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- bne _020CB294
-_020CB2BC:
- mov r0, #0x0
- str r0, [r5, #0x4]
- ldr r0, [r5, #0x4]
- str r0, [r5, #0x0]
- bl OSi_RescheduleThread
-_020CB2D0:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start OS_SleepThread
-OS_SleepThread:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- bl OS_DisableInterrupts
- ldr r1, _020CB334 ; =0x021D3490
- mov r5, r0
- ldr r0, [r1, #0x0]
- cmp r6, #0x0
- ldr r4, [r0, #0x0]
- beq _020CB318
- mov r0, r6
- mov r1, r4
- str r6, [r4, #0x78]
- bl OSi_InsertLinkToQueue
-_020CB318:
- mov r0, #0x0
- str r0, [r4, #0x64]
- bl OSi_RescheduleThread
- mov r0, r5
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CB334: .word 0x021D3490
-
- arm_func_start OS_IsThreadTerminated
-OS_IsThreadTerminated: ; 0x020CB338
- ldr r0, [r0, #0x64]
- cmp r0, #0x2
- moveq r0, #0x1
- movne r0, #0x0
- bx lr
-
- arm_func_start OS_JoinThread
-OS_JoinThread: ; 0x020CB34C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x64]
- mov r4, r0
- cmp r1, #0x2
- beq _020CB374
- add r0, r5, #0x9c
- bl OS_SleepThread
-_020CB374:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start OSi_CancelThreadAlarmForSleep
-OSi_CancelThreadAlarmForSleep: ; 0x020CB388
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0xb0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- bl OS_CancelAlarm
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start OS_DestroyThread
-OS_DestroyThread: ; 0x020CB3B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020CB438 ; =0x021D3498
- mov r4, r0
- ldr r0, [r1, #0x4]
- cmp r0, r5
- bne _020CB3DC
- bl OSi_ExitThread_Destroy
-_020CB3DC:
- bl OS_DisableScheduler
- mov r0, r5
- bl OSi_UnlockAllMutex
- mov r0, r5
- bl OSi_CancelThreadAlarmForSleep
- ldr r0, [r5, #0x78]
- cmp r0, #0x0
- beq _020CB404
- mov r1, r5
- bl OSi_RemoveSpecifiedLinkFromQueue
-_020CB404:
- mov r0, r5
- bl OSi_RemoveThreadFromList
- mov r1, #0x2
- add r0, r5, #0x9c
- str r1, [r5, #0x64]
- bl OS_WakeupThread
- bl OS_EnableScheduler
- mov r0, r4
- bl OS_RestoreInterrupts
- bl OS_RescheduleThread
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CB438: .word 0x021D3498
-
- arm_func_start OSi_ExitThread_Destroy
-OSi_ExitThread_Destroy: ; 0x020CB43C
- stmdb sp!, {r4,lr}
- ldr r0, _020CB498 ; =0x021D3490
- ldr r0, [r0, #0x0]
- ldr r4, [r0, #0x0]
- bl OS_DisableScheduler
- mov r0, r4
- bl OSi_UnlockAllMutex
- ldr r0, [r4, #0x78]
- cmp r0, #0x0
- beq _020CB46C
- mov r1, r4
- bl OSi_RemoveSpecifiedLinkFromQueue
-_020CB46C:
- mov r0, r4
- bl OSi_RemoveThreadFromList
- mov r1, #0x2
- add r0, r4, #0x9c
- str r1, [r4, #0x64]
- bl OS_WakeupThread
- bl OS_EnableScheduler
- bl OS_RescheduleThread
- bl OS_Terminate
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CB498: .word 0x021D3490
-
- arm_func_start OSi_ExitThread_Destroy2
-OSi_ExitThread_Destroy2: ; 0x020CB49C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CB4DC ; =0x021D3490
- ldr r1, [r1, #0x0]
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0xb4]
- cmp r2, #0x0
- beq _020CB4CC
- mov r1, #0x0
- str r1, [r3, #0xb4]
- blx r2
- bl OS_DisableInterrupts
-_020CB4CC:
- bl OSi_ExitThread_Destroy
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CB4DC: .word 0x021D3490
-
- arm_func_start OSi_ExitThread_ArgSpecified
-OSi_ExitThread_ArgSpecified: ; 0x020CB4E0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r2, _020CB548 ; =0x021D3480
- mov r5, r0
- ldr r2, [r2, #0x0]
- mov r4, r1
- cmp r2, #0x0
- beq _020CB534
- ldr r1, _020CB54C ; =OSi_ExitThread_Destroy2
- bl OS_InitContext
- str r4, [r5, #0x4]
- ldr r1, [r5, #0x0]
- mov r0, r5
- orr r1, r1, #0x80
- str r1, [r5, #0x0]
- mov r1, #0x1
- str r1, [r5, #0x64]
- bl OS_LoadContext
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CB534:
- mov r0, r4
- bl OSi_ExitThread_Destroy2
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CB548: .word 0x021D3480
-_020CB54C: .word OSi_ExitThread_Destroy2
-
- arm_func_start OS_ExitThread
-OS_ExitThread: ; 0x020CB550
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- ldr r0, _020CB578 ; =0x021D3498
- mov r1, #0x0
- ldr r0, [r0, #0x4]
- bl OSi_ExitThread_ArgSpecified
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CB578: .word 0x021D3498
-
- arm_func_start OS_CreateThread
-OS_CreateThread: ; 0x020CB57C
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- mov r5, r1
- mov r7, r2
- mov r6, r3
- bl OS_DisableInterrupts
- mov r4, r0
- bl OSi_GetUnusedThreadId
- ldr r2, [sp, #0x1c]
- mov r1, #0x0
- str r2, [r8, #0x70]
- str r0, [r8, #0x6c]
- str r1, [r8, #0x64]
- str r1, [r8, #0x74]
- mov r0, r8
- bl OSi_InsertThreadToList
- mov r1, r5
- str r6, [r8, #0x94]
- ldr r0, [sp, #0x18]
- mov r12, #0x0
- sub r5, r6, r0
- sub r2, r6, #0x4
- str r5, [r8, #0x90]
- str r12, [r8, #0x98]
- ldr r3, _020CB678 ; =0xFDDB597D
- ldr r0, [r8, #0x94]
- ldr r6, _020CB67C ; =0x7BF9DD5B
- str r3, [r0, #-0x4]
- ldr r3, [r8, #0x90]
- mov r0, r8
- str r6, [r3, #0x0]
- str r12, [r8, #0xa0]
- ldr r3, [r8, #0xa0]
- str r3, [r8, #0x9c]
- bl OS_InitContext
- str r7, [r8, #0x4]
- add r1, r5, #0x4
- ldr r2, _020CB680 ; =OS_ExitThread
- mov r0, #0x0
- str r2, [r8, #0x3c]
- ldr r2, [sp, #0x18]
- sub r2, r2, #0x8
- bl MIi_CpuClear32
- mov r1, #0x0
- str r1, [r8, #0x84]
- str r1, [r8, #0x88]
- str r1, [r8, #0x8c]
- mov r0, r8
- bl OS_SetThreadDestructor
-_020CB640:
- mov r0, #0x0
- str r0, [r8, #0x78]
- str r0, [r8, #0x80]
- ldr r2, [r8, #0x80]
- add r1, r8, #0xA4
- str r2, [r8, #0x7C]
- mov r2, #0xC
- bl MIi_CpuClear32
- mov r0, r4
- mov r1, #0x0
- str r1, [r8, #0xB0]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8, lr}
- bx lr
-_020CB678: .word 0xFDDB597D
-_020CB67C: .word 0x7BF9DD5B
-_020CB680: .word OS_ExitThread
-
- arm_func_start OS_InitThread
-OS_InitThread: ; 0x020CB684
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- ldr r3, _020CB7A4 ; =0x021D3494
- ldr r0, [r3, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x8
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldr ip, _020CB7A8 ; =0x00000000
- ldr r1, _020CB7AC ; =0x021D3568
- mov lr, #0x0
- ldr r0, _020CB7B0 ; =0x021D3498
- mov r6, #0x1
- mov r4, #0x10
- str r1, [r0, #0x8]
- str r1, [r0, #0x4]
- cmp r12, #0x0
- ldrle r0, _020CB7B4 ; =0x027E0080
- str r4, [r1, #0x70]
- suble r4, r0, r12
- str lr, [r1, #0x6c]
- str r6, [r1, #0x64]
- str lr, [r1, #0x68]
- str lr, [r1, #0x74]
- ldrgt r1, _020CB7B8 ; =0x027E0000
- ldrgt r0, _020CB7BC ; =0x00000400
- addgt r1, r1, #0x3f80
- subgt r0, r1, r0
- subgt r4, r0, r12
- ldr r1, _020CB7B8 ; =0x027E0000
- ldr r5, _020CB7C0 ; =0x021D349C
- ldr r2, _020CB7C4 ; =0x021D3490
- ldr r0, _020CB7BC ; =0x00000400
- str r5, [r2, #0x0]
- ldr r2, _020CB7AC ; =0x021D3568
- add r1, r1, #0x3f80
- str r6, [r3, #0x0]
- sub r3, r1, r0
- mov r0, #0x0
- ldr r1, _020CB7C8 ; =0xFDDB597D
- str r3, [r2, #0x94]
- str r4, [r2, #0x90]
- str r0, [r2, #0x98]
- str r1, [r3, #-0x4]
- ldr r3, [r2, #0x90]
- ldr ip, _020CB7CC ; =0x7BF9DD5B
- ldr r1, _020CB7B0 ; =0x021D3498
- str r12, [r3, #0x0]
- ldr r3, _020CB7D0 ; =0x027FFFA0
- str r0, [r2, #0xa0]
- str r0, [r2, #0x9c]
- strh r0, [r1, #0x0]
- strh r0, [r1, #0x2]
- str r1, [r3, #0x0]
- bl OS_SetSwitchThreadCallback
- mov r2, #0xc8
- str r2, [sp, #0x0]
- mov r12, #0x1f
- ldr r0, _020CB7D4 ; =0x021D34A8
- ldr r1, _020CB7D8 ; =OSi_IdleThreadProc
- ldr r3, _020CB7DC ; =0x021D36F0
- mov r2, #0x0
- str r12, [sp, #0x4]
- bl OS_CreateThread
- ldr r0, _020CB7D4 ; =0x021D34A8
- mov r2, #0x20
- mov r1, #0x1
- str r2, [r0, #0x70]
- str r1, [r0, #0x64]
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CB7A4: .word 0x021D3494
-_020CB7A8: .word 0x00000000
-_020CB7AC: .word 0x021D3568
-_020CB7B0: .word 0x021D3498
-_020CB7B4: .word 0x027E0080
-_020CB7B8: .word 0x027E0000
-_020CB7BC: .word 0x00000400
-_020CB7C0: .word 0x021D349C
-_020CB7C4: .word 0x021D3490
-_020CB7C8: .word 0xFDDB597D
-_020CB7CC: .word 0x7BF9DD5B
-_020CB7D0: .word 0x027FFFA0
-_020CB7D4: .word 0x021D34A8
-_020CB7D8: .word OSi_IdleThreadProc
-_020CB7DC: .word 0x021D36F0
-
- arm_func_start OSi_RescheduleThread
-OSi_RescheduleThread: ; 0x020CB7E0
- stmdb sp!, {r4-r6,lr}
- ldr r0, _020CB8BC ; =0x021D3484
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldr r4, _020CB8C0 ; =0x021D3498
- ldrh r0, [r4, #0x2]
- cmp r0, #0x0
- bne _020CB814
- bl OS_GetProcMode
- cmp r0, #0x12
- bne _020CB824
-_020CB814:
- mov r0, #0x1
- strh r0, [r4, #0x0]
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020CB824:
- ldr r0, _020CB8C4 ; =0x021D3490
- ldr r0, [r0, #0x0]
- ldr r6, [r0, #0x0]
- bl OS_SelectThread
- mov r5, r0
- cmp r6, r5
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- cmp r5, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r0, [r6, #0x64]
- cmp r0, #0x2
- beq _020CB870
- mov r0, r6
- bl OS_SaveContext
-_020CB864:
- cmp r0, #0x0
- ldmneia sp!, {r4-r6,lr}
- bxne lr
-_020CB870:
- ldr r0, _020CB8C8 ; =0x021D348C
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- beq _020CB88C
- mov r0, r6
- mov r1, r5
- blx r2
-_020CB88C:
- ldr r2, [r4, #0xc]
- cmp r2, #0x0
- beq _020CB8A4
- mov r0, r6
- mov r1, r5
- blx r2
-_020CB8A4:
- ldr r1, _020CB8C0 ; =0x021D3498
- mov r0, r5
- str r5, [r1, #0x4]
- bl OS_LoadContext
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CB8BC: .word 0x021D3484
-_020CB8C0: .word 0x021D3498
-_020CB8C4: .word 0x021D3490
-_020CB8C8: .word 0x021D348C
-
- arm_func_start OSi_RemoveThreadFromList
-OSi_RemoveThreadFromList: ; 0x020CB8CC
- ldr r1, _020CB910 ; =0x021D3498
- mov r2, #0x0
- ldr r1, [r1, #0x8]
- b _020CB8E4
-_020CB8DC:
- mov r2, r1
- ldr r1, [r1, #0x68]
-_020CB8E4:
- cmp r1, #0x0
- beq _020CB8F4
- cmp r1, r0
- bne _020CB8DC
-_020CB8F4:
- cmp r2, #0x0
- ldreq r1, [r0, #0x68]
- ldreq r0, _020CB910 ; =0x021D3498
- streq r1, [r0, #0x8]
- ldrne r0, [r0, #0x68]
- strne r0, [r2, #0x68]
- bx lr
- .balign 4
-_020CB910: .word 0x021D3498
-
- arm_func_start OSi_InsertThreadToList
-OSi_InsertThreadToList: ; 0x020CB914
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CB978 ; =0x021D3498
- mov r12, #0x0
- ldr r3, [r1, #0x8]
- mov lr, r3
- b _020CB938
-_020CB930:
- mov r12, lr
- ldr lr, [lr, #0x68]
-_020CB938:
- cmp lr, #0x0
- beq _020CB950
- ldr r2, [lr, #0x70]
- ldr r1, [r0, #0x70]
- cmp r2, r1
- blo _020CB930
-_020CB950:
- cmp r12, #0x0
- ldreq r1, _020CB978 ; =0x021D3498
- streq r3, [r0, #0x68]
- streq r0, [r1, #0x8]
- ldrne r1, [r12, #0x68]
- strne r1, [r0, #0x68]
- strne r0, [r12, #0x68]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CB978: .word 0x021D3498
-
- arm_func_start OSi_RemoveMutexLinkFromQueue
-OSi_RemoveMutexLinkFromQueue: ; 0x020CB97C
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- beq _020CB9A4
- ldr r1, [r2, #0x10]
- str r1, [r0, #0x0]
- cmp r1, #0x0
- movne r0, #0x0
- strne r0, [r1, #0x14]
- moveq r1, #0x0
- streq r1, [r0, #0x4]
-_020CB9A4:
- mov r0, r2
- bx lr
-
- arm_func_start OSi_RemoveSpecifiedLinkFromQueue
-OSi_RemoveSpecifiedLinkFromQueue: ; 0x020CB9AC
- ldr r2, [r0, #0x0]
- mov r12, r2
- cmp r2, #0x0
- beq _020CB9F8
-_020CB9BC:
- cmp r12, r1
- ldr r3, [r12, #0x80]
- bne _020CB9EC
- cmp r2, r12
- ldr r2, [r12, #0x7c]
- streq r3, [r0, #0x0]
- strne r3, [r2, #0x80]
- ldr r1, [r0, #0x4]
- cmp r1, r12
- streq r2, [r0, #0x4]
- strne r2, [r3, #0x7c]
- b _020CB9F8
-_020CB9EC:
- mov r12, r3
- cmp r3, #0x0
- bne _020CB9BC
-_020CB9F8:
- mov r0, r12
- bx lr
-
- arm_func_start OSi_RemoveLinkFromQueue
-OSi_RemoveLinkFromQueue: ; 0x020CBA00
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- beq _020CBA2C
- ldr r1, [r2, #0x80]
- str r1, [r0, #0x0]
- cmp r1, #0x0
- movne r0, #0x0
- strne r0, [r1, #0x7c]
- moveq r1, #0x0
- streq r1, [r0, #0x4]
- streq r1, [r2, #0x78]
-_020CBA2C:
- mov r0, r2
- bx lr
-
- arm_func_start OSi_InsertLinkToQueue
-OSi_InsertLinkToQueue:
- ldr r12, [r0, #0x0]
- b _020CBA48
-_020CBA3C:
- cmp r12, r1
- bxeq lr
- ldr r12, [r12, #0x80]
-_020CBA48:
- cmp r12, #0x0
- beq _020CBA60
- ldr r3, [r12, #0x70]
- ldr r2, [r1, #0x70]
- cmp r3, r2
- bls _020CBA3C
-_020CBA60:
- cmp r12, #0x0
- bne _020CBA8C
- ldr r2, [r0, #0x4]
- cmp r2, #0x0
- streq r1, [r0, #0x0]
- strne r1, [r2, #0x80]
- str r2, [r1, #0x7c]
- mov r2, #0x0
- str r2, [r1, #0x80]
- str r1, [r0, #0x4]
- bx lr
-_020CBA8C:
- ldr r2, [r12, #0x7c]
- cmp r2, #0x0
- streq r1, [r0, #0x0]
- strne r1, [r2, #0x80]
- str r2, [r1, #0x7c]
- str r12, [r1, #0x80]
- str r1, [r12, #0x7c]
- bx lr
-
- arm_func_start OSi_GetUnusedThreadId
-OSi_GetUnusedThreadId: ; 0x020CBAAC
- ldr r1, _020CBAC0 ; =0x021D3488
- ldr r0, [r1, #0x0]
- add r0, r0, #0x1
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CBAC0: .word 0x021D3488
-
- arm_func_start OS_InitContext
-OS_InitContext: ; 0x020CBAC4
- add r1, r1, #0x4
- str r1, [r0, #0x40]
- str r2, [r0, #0x44]
- sub r2, r2, #0x40
- tst r2, #0x4
- subne r2, r2, #0x4
- str r2, [r0, #0x38]
- ands r1, r1, #0x1
- movne r1, #0x3f
- moveq r1, #0x1f
- str r1, [r0, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x4]
- str r1, [r0, #0x8]
- str r1, [r0, #0xc]
- str r1, [r0, #0x10]
- str r1, [r0, #0x14]
- str r1, [r0, #0x18]
- str r1, [r0, #0x1c]
- str r1, [r0, #0x20]
- str r1, [r0, #0x24]
- str r1, [r0, #0x28]
- str r1, [r0, #0x2c]
- str r1, [r0, #0x30]
- str r1, [r0, #0x34]
- str r1, [r0, #0x3c]
- bx lr
-
- arm_func_start OS_SaveContext
-OS_SaveContext:
- stmdb sp!, {r0,lr}
- add r0, r0, #0x48
- ldr r1, _020CBB78 ; =CP_SaveContext
- blx r1
- ldmia sp!, {r0,lr}
- add r1, r0, #0x0
- mrs r2, cpsr
- str r2, [r1], #0x4
- mov r0, #0xd3
- msr cpsr_c, r0
- str sp, [r1, #0x40]
- msr cpsr_c, r2
- mov r0, #0x1
- stmia r1, {r0-lr}
- add r0, pc, #0x8 ; =_020CBB78
- str r0, [r1, #0x3c]
- mov r0, #0x0
- bx lr
- .balign 4
-_020CBB78: .word CP_SaveContext
-
- arm_func_start OS_LoadContext
-OS_LoadContext: ; 0x020CBB7C
- stmdb sp!, {r0,lr}
- add r0, r0, #0x48
- ldr r1, _020CBBBC ; =CP_RestoreContext
- blx r1
- ldmia sp!, {r0,lr}
- mrs r1, cpsr
- bic r1, r1, #0x1f
- orr r1, r1, #0xd3
- msr cpsr_c, r1
- ldr r1, [r0], #0x4
- msr spsr_fsxc, r1
- ldr sp, [r0, #0x40]
- ldr lr, [r0, #0x3c]
- ldmia r0, {r0-lr}^
- mov r0, r0
- subs pc, lr, #0x4
- .balign 4
-_020CBBBC: .word CP_RestoreContext
-
- arm_func_start OS_GetConsoleType
-OS_GetConsoleType: ; 0x020CBBC0
- ldr r0, _020CBBD0 ; =0x82000001
- ldr r1, _020CBBD4 ; =0x02106828
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CBBD0: .word 0x82000001
-_020CBBD4: .word 0x02106828
-
- arm_func_start OS_IsRunOnEmulator
-OS_IsRunOnEmulator:
- mov r0, #0x0
- bx lr
-
- arm_func_start OS_ReadMessage
-OS_ReadMessage: ; 0x020CBBE0
- stmdb sp!, {r4-r8,lr}
- mov r6, r0
- mov r5, r1
- mov r7, r2
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x1c]
- mov r4, r0
- cmp r1, #0x0
- bne _020CBC3C
- and r8, r7, #0x1
- add r7, r6, #0x8
-_020CBC0C:
- cmp r8, #0x0
- bne _020CBC28
- mov r0, r4
- bl OS_RestoreInterrupts
-_020CBC1C:
- mov r0, #0x0
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CBC28:
- mov r0, r7
- bl OS_SleepThread
- ldr r0, [r6, #0x1c]
- cmp r0, #0x0
- beq _020CBC0C
-_020CBC3C:
- cmp r5, #0x0
- ldrne r1, [r6, #0x10]
- ldrne r0, [r6, #0x18]
- ldrne r0, [r1, r0, lsl #0x2]
- strne r0, [r5, #0x0]
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start OS_JamMessage
-OS_JamMessage: ; 0x020CBC64
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, r1
- mov r7, r2
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x14]
- ldr r2, [r6, #0x1c]
- mov r4, r0
- cmp r1, r2
- bgt _020CBCCC
- and r7, r7, #0x1
-_020CBC94:
- cmp r7, #0x0
- bne _020CBCB4
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CBCB4:
- mov r0, r6
- bl OS_SleepThread
- ldr r1, [r6, #0x14]
- ldr r0, [r6, #0x1c]
- cmp r1, r0
- ble _020CBC94
-_020CBCCC:
- ldr r0, [r6, #0x18]
- add r0, r0, r1
- sub r0, r0, #0x1
- bl _s32_div_f
- str r1, [r6, #0x18]
- ldr r2, [r6, #0x10]
- ldr r1, [r6, #0x18]
- add r0, r6, #0x8
- str r5, [r2, r1, lsl #0x2]
- ldr r1, [r6, #0x1c]
- add r1, r1, #0x1
- str r1, [r6, #0x1c]
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start OS_ReceiveMessage
-OS_ReceiveMessage: ; 0x020CBD18
- stmdb sp!, {r4-r8,lr}
- mov r6, r0
- mov r5, r1
- mov r7, r2
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x1c]
- mov r4, r0
- cmp r1, #0x0
- bne _020CBD74
- and r8, r7, #0x1
- add r7, r6, #0x8
-_020CBD44:
- cmp r8, #0x0
- bne _020CBD60
- mov r0, r4
- bl OS_RestoreInterrupts
-_020CBD54:
- mov r0, #0x0
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CBD60:
- mov r0, r7
- bl OS_SleepThread
- ldr r0, [r6, #0x1c]
- cmp r0, #0x0
- beq _020CBD44
-_020CBD74:
- cmp r5, #0x0
- ldrne r1, [r6, #0x10]
- ldrne r0, [r6, #0x18]
- ldrne r0, [r1, r0, lsl #0x2]
- strne r0, [r5, #0x0]
- ldr r0, [r6, #0x18]
- ldr r1, [r6, #0x14]
- add r0, r0, #0x1
- bl _s32_div_f
- str r1, [r6, #0x18]
- ldr r1, [r6, #0x1c]
- mov r0, r6
- sub r1, r1, #0x1
- str r1, [r6, #0x1c]
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start OS_SendMessage
-OS_SendMessage: ; 0x020CBDC4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, r1
- mov r7, r2
- bl OS_DisableInterrupts
- ldr r2, [r6, #0x1c]
- ldr r1, [r6, #0x14]
- mov r4, r0
- cmp r1, r2
- bgt _020CBE2C
- and r7, r7, #0x1
-_020CBDF4:
- cmp r7, #0x0
- bne _020CBE14
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CBE14:
- mov r0, r6
- bl OS_SleepThread
- ldr r2, [r6, #0x1c]
- ldr r1, [r6, #0x14]
- cmp r1, r2
- ble _020CBDF4
-_020CBE2C:
- ldr r0, [r6, #0x18]
- add r0, r0, r2
- bl _s32_div_f
- ldr r2, [r6, #0x10]
- add r0, r6, #0x8
- str r5, [r2, r1, lsl #0x2]
- ldr r1, [r6, #0x1c]
- add r1, r1, #0x1
- str r1, [r6, #0x1c]
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start OS_InitMessageQueue
-OS_InitMessageQueue: ; 0x020CBE6C
- mov r12, #0x0
- str r12, [r0, #0x4]
- ldr r3, [r0, #0x4]
- str r3, [r0, #0x0]
- str r12, [r0, #0xc]
- ldr r3, [r0, #0xc]
- str r3, [r0, #0x8]
- str r1, [r0, #0x10]
- str r2, [r0, #0x14]
- str r12, [r0, #0x18]
- str r12, [r0, #0x1c]
- bx lr
-
- arm_func_start OSi_DequeueItem
-OSi_DequeueItem: ; 0x020CBE9C
- ldr r2, [r1, #0x10]
- ldr r1, [r1, #0x14]
- cmp r2, #0x0
- streq r1, [r0, #0x8c]
- strne r1, [r2, #0x14]
- cmp r1, #0x0
- streq r2, [r0, #0x88]
- strne r2, [r1, #0x10]
- bx lr
-
- arm_func_start OSi_EnqueueTail
-OSi_EnqueueTail: ; 0x020CBEC0
- ldr r2, [r0, #0x8c]
- cmp r2, #0x0
- streq r1, [r0, #0x88]
- strne r1, [r2, #0x10]
- str r2, [r1, #0x14]
- mov r2, #0x0
- str r2, [r1, #0x10]
- str r1, [r0, #0x8c]
- bx lr
-
- arm_func_start OS_TryLockMutex
-OS_TryLockMutex: ; 0x020CBEE4
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r2, [r5, #0x8]
- ldr r1, _020CBF54 ; =0x021D3498
- mov r4, r0
- cmp r2, #0x0
- ldr r0, [r1, #0x4]
- bne _020CBF28
- str r0, [r5, #0x8]
- ldr r2, [r5, #0xc]
- mov r1, r5
- add r2, r2, #0x1
- str r2, [r5, #0xc]
- bl OSi_EnqueueTail
- mov r6, #0x1
- b _020CBF40
-_020CBF28:
- cmp r2, r0
- ldreq r0, [r5, #0xc]
- moveq r6, #0x1
- addeq r0, r0, #0x1
- streq r0, [r5, #0xc]
- movne r6, #0x0
-_020CBF40:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r6
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CBF54: .word 0x021D3498
-
- arm_func_start OSi_UnlockAllMutex
-OSi_UnlockAllMutex: ; 0x020CBF58
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r0, [r6, #0x88]
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- add r5, r6, #0x88
- mov r4, #0x0
-_020CBF78:
- mov r0, r5
- bl OSi_RemoveMutexLinkFromQueue
- str r4, [r0, #0xc]
- str r4, [r0, #0x8]
- bl OS_WakeupThread
- ldr r0, [r6, #0x88]
- cmp r0, #0x0
- bne _020CBF78
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start OS_UnlockMutex
-OS_UnlockMutex: ; 0x020CBFA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020CC00C ; =0x021D3498
- mov r4, r0
- ldr r0, [r1, #0x4]
- ldr r1, [r5, #0x8]
- cmp r1, r0
- bne _020CBFF8
- ldr r1, [r5, #0xc]
- sub r1, r1, #0x1
- str r1, [r5, #0xc]
- ldr r1, [r5, #0xc]
- cmp r1, #0x0
- bne _020CBFF8
- mov r1, r5
- bl OSi_DequeueItem
- mov r1, #0x0
- mov r0, r5
- str r1, [r5, #0x8]
- bl OS_WakeupThread
-_020CBFF8:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CC00C: .word 0x021D3498
-
- arm_func_start OS_LockMutex
-OS_LockMutex: ; 0x020CC010
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020CC098 ; =0x021D3498
- mov r4, r0
- ldr r7, [r1, #0x4]
- mov r6, #0x0
-_020CC030:
- ldr r0, [r5, #0x8]
- cmp r0, #0x0
- bne _020CC05C
- str r7, [r5, #0x8]
- ldr r1, [r5, #0xc]
- mov r0, r7
- add r2, r1, #0x1
- mov r1, r5
- str r2, [r5, #0xc]
- bl OSi_EnqueueTail
- b _020CC084
-_020CC05C:
- cmp r0, r7
- ldreq r0, [r5, #0xc]
- addeq r0, r0, #0x1
- streq r0, [r5, #0xc]
- beq _020CC084
- mov r0, r5
- str r5, [r7, #0x84]
- bl OS_SleepThread
- str r6, [r7, #0x84]
- b _020CC030
-_020CC084:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020CC098: .word 0x021D3498
-
- arm_func_start OS_InitMutex
-OS_InitMutex: ; 0x020CC09C
- mov r2, #0x0
- str r2, [r0, #0x4]
- ldr r1, [r0, #0x4]
- str r1, [r0, #0x0]
- str r2, [r0, #0x8]
- str r2, [r0, #0xc]
- bx lr
-
- arm_func_start DC_InvalidateAll
-DC_InvalidateAll: ; 0x020CC0B8
- mov r0, #0x0
- mcr p15, 0x0, r0, c7, c6, 0x0
- bx lr
-
- arm_func_start DC_StoreAll
-DC_StoreAll: ; 0x020CC0C4
- mov r1, #0x0
-_020CC0C8:
- mov r0, #0x0
-_020CC0CC:
- orr r2, r1, r0
- mcr p15, 0x0, r2, c7, c10, 0x2
- add r0, r0, #0x20
- cmp r0, #0x400
- blt _020CC0CC
- add r1, r1, #0x40000000
- cmp r1, #0x0
- bne _020CC0C8
- bx lr
-
- arm_func_start DC_FlushAll
-DC_FlushAll: ; 0x020CC0F0
- mov r12, #0x0
- mov r1, #0x0
-_020CC0F8:
- mov r0, #0x0
-_020CC0FC:
- orr r2, r1, r0
- mcr p15, 0x0, r12, c7, c10, 0x4
- mcr p15, 0x0, r2, c7, c14, 0x2
- add r0, r0, #0x20
- cmp r0, #0x400
- blt _020CC0FC
- add r1, r1, #0x40000000
- cmp r1, #0x0
- bne _020CC0F8
- bx lr
-
- arm_func_start DC_InvalidateRange
-DC_InvalidateRange: ; 0x020CC124
- add r1, r1, r0
- bic r0, r0, #0x1f
-_020CC12C:
- mcr p15, 0x0, r0, c7, c6, 0x1
- add r0, r0, #0x20
- cmp r0, r1
- blt _020CC12C
- bx lr
-
- arm_func_start DC_StoreRange
-DC_StoreRange: ; 0x020CC140
- add r1, r1, r0
- bic r0, r0, #0x1f
-_020CC148:
- mcr p15, 0x0, r0, c7, c10, 0x1
- add r0, r0, #0x20
- cmp r0, r1
- blt _020CC148
- bx lr
-
- arm_func_start DC_FlushRange
-DC_FlushRange: ; 0x020CC15C
- mov r12, #0x0
- add r1, r1, r0
- bic r0, r0, #0x1f
-_020CC168:
- mcr p15, 0x0, r12, c7, c10, 0x4
- mcr p15, 0x0, r0, c7, c14, 0x1
- add r0, r0, #0x20
- cmp r0, r1
- blt _020CC168
- bx lr
-
- arm_func_start DC_WaitWriteBufferEmpty
-DC_WaitWriteBufferEmpty: ; 0x020CC180
- mov r0, #0x0
- mcr p15, 0x0, r0, c7, c10, 0x4
- bx lr
-
- arm_func_start IC_InvalidateAll
-IC_InvalidateAll: ; 0x020CC18C
- mov r0, #0x0
- mcr p15, 0x0, r0, c7, c5, 0x0
- bx lr
-
- arm_func_start IC_InvalidateRange
-IC_InvalidateRange:
- add r1, r1, r0
- bic r0, r0, #0x1f
-_020CC1A0:
- mcr p15, 0x0, r0, c7, c5, 0x1
- add r0, r0, #0x20
- cmp r0, r1
- blt _020CC1A0
- bx lr
-
- arm_func_start OS_Init
-OS_Init: ; 0x020CC1B4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl OS_InitArena
- bl PXI_Init
- bl OS_InitLock
- bl OS_InitArenaEx
- bl OS_InitIrqTable
- bl OS_SetIrqStackChecker
- bl OS_InitException
- bl MI_Init
- bl OS_InitVAlarm
- bl OSi_InitVramExclusive
- bl OS_InitThread
- bl OS_InitReset
- bl CTRDG_Init
- bl CARD_Init
- bl PM_Init
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start OS_AllocFromArenaHi
-OS_AllocFromArenaHi: ; 0x020CC204
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- mov r6, r1
- mov r5, r2
- bl OS_GetArenaHi
-_020CC218:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- sub r1, r5, #0x1
- mvn r2, r1
- and r0, r0, r2
- sub r1, r0, r6
- mov r0, r4
- and r5, r1, r2
- bl OS_GetArenaLo
- cmp r5, r0
- movcc r0, #0x0
- ldmccia sp!, {r4-r6, lr}
- bxcc lr
- mov r0, r4
- mov r1, r5
- bl OS_SetArenaHi
- mov r0, r5
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start OS_AllocFromArenaLo
-OS_AllocFromArenaLo: ; 0x020CC26C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl OS_GetArenaLo
-_020CC284:
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7, lr}
- bxeq lr
- add r0, r0, r5
- sub r1, r5, #0x1
- mvn r2, r1
- sub r0, r0, #0x1
- and r4, r2, r0
- add r0, r4, r6
- add r0, r0, r5
- sub r1, r0, #0x1
- mov r0, r7
- and r5, r2, r1
- bl OS_GetArenaHi
- cmp r5, r0
- addhi sp, sp, #0x4
- movhi r0, #0x0
- ldmhiia sp!, {r4-r7, lr}
- bxhi lr
- mov r0, r7
- mov r1, r5
- bl OS_SetArenaLo
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7, lr}
- bx lr
-
- arm_func_start OS_SetArenaLo
-OS_SetArenaLo: ; 0x020CC2F4
- mov r0, r0, lsl #0x2
- add r0, r0, #0x2700000
- add r0, r0, #0xff000
- str r1, [r0, #0xda0]
- bx lr
-
- arm_func_start OS_SetArenaHi
-OS_SetArenaHi:
- mov r0, r0, lsl #0x2
- add r0, r0, #0x2700000
- add r0, r0, #0xff000
- str r1, [r0, #0xdc4]
- bx lr
-
- arm_func_start OS_GetInitArenaLo
-OS_GetInitArenaLo: ; 0x020CC31C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x6
- addls pc, pc, r0, lsl #0x2
- b _020CC3DC
-_020CC330:
- b _020CC34C
- b _020CC3DC
- b _020CC35C
- b _020CC39C
- b _020CC3AC
- b _020CC3BC
- b _020CC3CC
-_020CC34C:
- add sp, sp, #0x4
- ldr r0, _020CC3EC ; =0x0225FFA0
- ldmfd sp!, {lr}
- bx lr
-_020CC35C:
- ldr r0, _020CC3F0 ; =0x021D36F4
- ldr r0, [r0]
- cmp r0, #0x0
- beq _020CC37C
- bl OS_GetConsoleType
- and r0, r0, #0x3
- cmp r0, #0x1
- bne _020CC38C
-_020CC37C:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmfd sp!, {lr}
- bx lr
-_020CC38C:
- add sp, sp, #0x4
- ldr r0, _020CC3F4 ; =0x023E0000
- ldmfd sp!, {lr}
- bx lr
-_020CC39C:
- add sp, sp, #0x4
- ldr r0, _020CC3F8 ; =0x01FF8720
- ldmfd sp!, {lr}
- bx lr
-_020CC3AC:
- add sp, sp, #0x4
- ldr r0, _020CC3FC ; =0x027E0080
- ldmfd sp!, {lr}
- bx lr
-_020CC3BC:
- add sp, sp, #0x4
- ldr r0, _020CC400 ; =0x027FF000
- ldmfd sp!, {lr}
- bx lr
-_020CC3CC:
- add sp, sp, #0x4
- ldr r0, _020CC404 ; =0x037F8000
- ldmfd sp!, {lr}
- bx lr
-_020CC3DC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020CC3EC: .word 0x0225FFA0
-_020CC3F0: .word 0x021D36F4
-_020CC3F4: .word 0x023E0000
-_020CC3F8: .word 0x01FF8720
-_020CC3FC: .word 0x027E0080
-_020CC400: .word 0x027FF000
-_020CC404: .word 0x037F8000
-
- arm_func_start OS_GetInitArenaHi
-OS_GetInitArenaHi: ; 0x020CC408
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x6
- addls pc, pc, r0, lsl #0x2
- b _020CC508
-_020CC41C:
- b _020CC438
- b _020CC508
- b _020CC448
- b _020CC488
- b _020CC498
- b _020CC4E8
- b _020CC4F8
-_020CC438:
- add sp, sp, #0x4
- ldr r0, _020CC518 ; =0x023E0000
- ldmfd sp!, {lr}
- bx lr
-_020CC448:
- ldr r0, _020CC51C ; =0x021D36F4
- ldr r0, [r0]
- cmp r0, #0x0
- beq _020CC468
- bl OS_GetConsoleType
- and r0, r0, #0x3
- cmp r0, #0x1
- bne _020CC478
-_020CC468:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmfd sp!, {lr}
- bx lr
-_020CC478:
- add sp, sp, #0x4
- mov r0, #0x2700000
- ldmfd sp!, {lr}
- bx lr
-_020CC488:
- add sp, sp, #0x4
- mov r0, #0x2000000
- ldmfd sp!, {lr}
- bx lr
-_020CC498:
- ldr r0, _020CC520 ; =0x027E0000
- ldr r1, _020CC524 ; =0x00000000
- ldr r2, _020CC528 ; =0x00000400
- add r3, r0, #0x3f80
- cmp r1, #0x0
- sub r2, r3, r2
- bne _020CC4CC
- ldr r1, _020CC52C ; =0x027E0080
- add sp, sp, #0x4
- cmp r0, r1
- movcc r0, r1
- ldmfd sp!, {lr}
- bx lr
-_020CC4CC:
- cmp r1, #0x0
- ldrlt r0, _020CC52C ; =0x027E0080
- add sp, sp, #0x4
- sublt r0, r0, r1
- subge r0, r2, r1
- ldmfd sp!, {lr}
- bx lr
-_020CC4E8:
- add sp, sp, #0x4
- ldr r0, _020CC530 ; =0x027FF680
- ldmfd sp!, {lr}
- bx lr
-_020CC4F8:
- add sp, sp, #0x4
- ldr r0, _020CC534 ; =0x037F8000
- ldmfd sp!, {lr}
- bx lr
-_020CC508:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020CC518: .word 0x023E0000
-_020CC51C: .word 0x021D36F4
-_020CC520: .word 0x027E0000
-_020CC524: .word 0x00000000
-_020CC528: .word 0x00000400
-_020CC52C: .word 0x027E0080
-_020CC530: .word 0x027FF680
-_020CC534: .word 0x037F8000
-
- arm_func_start OS_GetArenaLo
-OS_GetArenaLo:
- mov r0, r0, lsl #0x2
- add r0, r0, #0x2700000
- add r0, r0, #0xff000
- ldr r0, [r0, #0xda0]
- bx lr
-
- arm_func_start OS_GetArenaHi
-OS_GetArenaHi:
- mov r0, r0, lsl #0x2
- add r0, r0, #0x2700000
- add r0, r0, #0xff000
- ldr r0, [r0, #0xdc4]
- bx lr
-
- arm_func_start OS_InitArenaEx
-OS_InitArenaEx: ; 0x020CC560
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, #0x2
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x2
- bl OS_SetArenaHi
- mov r0, #0x2
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x2
- bl OS_SetArenaLo
- ldr r0, _020CC5D4 ; =0x021D36F4
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020CC5B8
- bl OS_GetConsoleType
- and r0, r0, #0x3
- cmp r0, #0x1
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
-_020CC5B8:
- ldr r0, _020CC5D8 ; =0x0200002B
- bl OS_SetProtectionRegion1
- ldr r0, _020CC5DC ; =0x023E0021
- bl OS_SetProtectionRegion2
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CC5D4: .word 0x021D36F4
-_020CC5D8: .word 0x0200002B
-_020CC5DC: .word 0x023E0021
-
- arm_func_start OS_InitArena
-OS_InitArena: ; 0x020CC5E0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CC6F4 ; =0x021D36F0
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- mov r2, #0x1
- mov r0, #0x0
- str r2, [r1, #0x0]
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x0
- bl OS_SetArenaHi
-_020CC61C:
- mov r0, #0x0
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x0
- bl OS_SetArenaLo
- mov r0, #0x2
- mov r1, #0x0
- bl OS_SetArenaLo
- mov r0, #0x2
- mov r1, #0x0
- bl OS_SetArenaHi
- mov r0, #0x3
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x3
- bl OS_SetArenaHi
- mov r0, #0x3
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x3
- bl OS_SetArenaLo
- mov r0, #0x4
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x4
- bl OS_SetArenaHi
- mov r0, #0x4
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x4
- bl OS_SetArenaLo
- mov r0, #0x5
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x5
- bl OS_SetArenaHi
- mov r0, #0x5
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x5
- bl OS_SetArenaLo
- mov r0, #0x6
- bl OS_GetInitArenaHi
- mov r1, r0
- mov r0, #0x6
- bl OS_SetArenaHi
- mov r0, #0x6
- bl OS_GetInitArenaLo
- mov r1, r0
- mov r0, #0x6
- bl OS_SetArenaLo
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020CC6F4: .word 0x021D36F0
-
- arm_func_start OS_FreeToHeap
-OS_FreeToHeap: ; 0x020CC6F8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r5, r1
- mov r4, r2
- bl OS_DisableInterrupts
- ldr r1, _020CC768 ; =0x021D36F8
- mov r6, r0
- ldr r0, [r1, r7, lsl #0x2]
- cmp r5, #0x0
- ldrlt r5, [r0, #0x0]
- ldr r1, [r0, #0x10]
- mov r0, #0xc
- mla r7, r5, r0, r1
- sub r4, r4, #0x20
- ldr r0, [r7, #0x8]
- mov r1, r4
- bl DLExtract
- str r0, [r7, #0x8]
- ldr r0, [r7, #0x4]
- mov r1, r4
- bl DLInsert
- str r0, [r7, #0x4]
- mov r0, r6
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020CC768: .word 0x021D36F8
-
- arm_func_start OS_AllocFromHeap
-OS_AllocFromHeap: ; 0x020CC76C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, r1
- mov r7, r2
- bl OS_DisableInterrupts
- ldr r1, _020CC894 ; =0x021D36F8
- mov r4, r0
- ldr r1, [r1, r6, lsl #0x2]
- cmp r1, #0x0
- bne _020CC7AC
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CC7AC:
- cmp r5, #0x0
- ldrlt r5, [r1, #0x0]
- ldr r1, [r1, #0x10]
- mov r0, #0xc
- mla r6, r5, r0, r1
- ldr r0, [r6, #0x4]
- add r1, r7, #0x20
- add r1, r1, #0x1f
- mov r5, r0
- cmp r0, #0x0
- bic r7, r1, #0x1f
- beq _020CC7F4
-_020CC7DC:
- ldr r1, [r5, #0x8]
- cmp r7, r1
- ble _020CC7F4
- ldr r5, [r5, #0x4]
- cmp r5, #0x0
- bne _020CC7DC
-_020CC7F4:
- cmp r5, #0x0
- bne _020CC814
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CC814:
- ldr r1, [r5, #0x8]
- sub r1, r1, r7
- cmp r1, #0x40
- bhs _020CC834
- mov r1, r5
- bl DLExtract
- str r0, [r6, #0x4]
- b _020CC86C
-_020CC834:
- str r7, [r5, #0x8]
- add r2, r5, r7
- str r1, [r2, #0x8]
- ldr r0, [r5, #0x0]
- str r0, [r5, r7]
- ldr r0, [r5, #0x4]
- str r0, [r2, #0x4]
- ldr r0, [r2, #0x4]
- cmp r0, #0x0
- strne r2, [r0, #0x0]
- ldr r0, [r2, #0x0]
- cmp r0, #0x0
- strne r2, [r0, #0x4]
- streq r2, [r6, #0x4]
-_020CC86C:
- ldr r0, [r6, #0x8]
- mov r1, r5
- bl DLAddFront
- str r0, [r6, #0x8]
- mov r0, r4
- bl OS_RestoreInterrupts
- add r0, r5, #0x20
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020CC894: .word 0x021D36F8
-
- arm_func_start DLInsert
-DLInsert: ; 0x020CC898
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r12, r0
- cmp r0, #0x0
- mov lr, #0x0
- beq _020CC8C8
-_020CC8B0:
- cmp r1, r12
- bls _020CC8C8
- mov lr, r12
- ldr r12, [r12, #0x4]
- cmp r12, #0x0
- bne _020CC8B0
-_020CC8C8:
- str r12, [r1, #0x4]
- str lr, [r1, #0x0]
- cmp r12, #0x0
- beq _020CC908
- str r1, [r12, #0x0]
- ldr r3, [r1, #0x8]
- add r2, r1, r3
- cmp r2, r12
- bne _020CC908
- ldr r2, [r12, #0x8]
- add r2, r3, r2
- str r2, [r1, #0x8]
- ldr r12, [r12, #0x4]
- str r12, [r1, #0x4]
- cmp r12, #0x0
- strne r1, [r12, #0x0]
-_020CC908:
- cmp lr, #0x0
- beq _020CC950
- str r1, [lr, #0x4]
- ldr r2, [lr, #0x8]
- add r3, lr, r2
- cmp r3, r1
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- ldr r1, [r1, #0x8]
- add sp, sp, #0x4
- add r1, r2, r1
- str r1, [lr, #0x8]
- str r12, [lr, #0x4]
- cmp r12, #0x0
- strne lr, [r12, #0x0]
- ldmia sp!, {lr}
- bx lr
-_020CC950:
- mov r0, r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start DLExtract
-DLExtract: ; 0x020CC960
- ldr r3, [r1, #0x4]
- cmp r3, #0x0
- ldrne r2, [r1, #0x0]
- strne r2, [r3, #0x0]
- ldr r2, [r1, #0x0]
- cmp r2, #0x0
- ldreq r0, [r1, #0x4]
- ldrne r1, [r1, #0x4]
- strne r1, [r2, #0x4]
- bx lr
-
- arm_func_start DLAddFront
-DLAddFront: ; 0x020CC988
- str r0, [r1, #0x4]
- mov r2, #0x0
- str r2, [r1, #0x0]
- cmp r0, #0x0
- strne r1, [r0, #0x0]
- mov r0, r1
- bx lr
-
- arm_func_start OS_GetDTCMAddress
-OS_GetDTCMAddress: ; 0x020CC9A4
- mrc p15, 0x0, r0, c9, c1, 0x0
- ldr r1, _020CC9B4 ; =0xFFFFF000
- and r0, r0, r1
- bx lr
- .balign 4
-_020CC9B4: .word 0xFFFFF000
-
- arm_func_start OS_EnableProtectionUnit
-OS_EnableProtectionUnit: ; 0x020CC9B8
- mrc p15, 0x0, r0, c1, c0, 0x0
- orr r0, r0, #0x1
- mcr p15, 0x0, r0, c1, c0, 0x0
- bx lr
-
- arm_func_start OS_DisableProtectionUnit
-OS_DisableProtectionUnit: ; 0x020CC9C8
- mrc p15, 0x0, r0, c1, c0, 0x0
- bic r0, r0, #0x1
- mcr p15, 0x0, r0, c1, c0, 0x0
- bx lr
-
- arm_func_start OS_SetDPermissionsForProtectionRegion
-OS_SetDPermissionsForProtectionRegion: ; 0x020CC9D8
- mrc p15, 0x0, r2, c5, c0, 0x2
- bic r2, r2, r0
- orr r2, r2, r1
- mcr p15, 0x0, r2, c5, c0, 0x2
- bx lr
-
- arm_func_start OS_SetProtectionRegion1
-OS_SetProtectionRegion1: ; 0x020CC9EC
- mcr p15, 0x0, r0, c6, c1, 0x0
- bx lr
-
- arm_func_start OS_SetProtectionRegion2
-OS_SetProtectionRegion2: ; 0x020CC9F4
- mcr p15, 0x0, r0, c6, c2, 0x0
- bx lr
-
- arm_func_start OSi_ExceptionHandler
-OSi_ExceptionHandler: ; 0x020CC9FC
- ldr ip, _020CCA68 ; =0x021D3724
- ldr r12, [r12, #0x0]
- cmp r12, #0x0
- movne lr, pc
- bxne r12
- ldr ip, _020CCA6C ; =0x02000000
- stmdb r12!, {r0-r3,sp-lr}
- and r0, sp, #0x1
- mov sp, r12
- mrs r1, cpsr
- and r1, r1, #0x1f
- teq r1, #0x17
- bne _020CCA38
- bl OSi_GetAndDisplayContext
- b _020CCA44
-_020CCA38:
- teq r1, #0x1b
- bne _020CCA44
- bl OSi_GetAndDisplayContext
-_020CCA44:
- ldr ip, _020CCA68 ; =0x021D3724
- ldr r12, [r12, #0x0]
- cmp r12, #0x0
-_020CCA50:
- beq _020CCA50
-_020CCA54:
- mov r0, r0
- b _020CCA54
-_020CCA5C:
- ldmia sp!, {r0-r3,ip,lr}
- mov sp, ip
- bx lr
-_020CCA68: .word 0x021D3724
-_020CCA6C: .word 0x02000000
-
- arm_func_start OSi_GetAndDisplayContext
-OSi_GetAndDisplayContext: ; 0x020CCA70
- stmdb sp!, {r0,lr}
- bl OSi_SetExContext
- bl OSi_DisplayExContext
- ldmia sp!, {r0,lr}
- bx lr
-
- arm_func_start OSi_SetExContext
-OSi_SetExContext: ; 0x020CCA84
- ldr r1, _020CCB10 ; =0x021D3728
- mrs r2, cpsr
- str r2, [r1, #0x74]
- str r0, [r1, #0x6c]
- ldr r0, [r12, #0x0]
- str r0, [r1, #0x4]
- ldr r0, [r12, #0x4]
- str r0, [r1, #0x8]
- ldr r0, [r12, #0x8]
- str r0, [r1, #0xc]
- ldr r0, [r12, #0xc]
- str r0, [r1, #0x10]
- ldr r2, [r12, #0x10]
- bic r2, r2, #0x1
- add r0, r1, #0x14
- stmia r0, {r4-r11}
- str r12, [r1, #0x70]
- ldr r0, [r2, #0x0]
- str r0, [r1, #0x64]
- ldr r3, [r2, #0x4]
- str r3, [r1, #0x0]
- ldr r0, [r2, #0x8]
- str r0, [r1, #0x34]
- ldr r0, [r2, #0xc]
- str r0, [r1, #0x40]
- mrs r0, cpsr
- orr r3, r3, #0x80
- bic r3, r3, #0x20
- msr cpsr_fsxc, r3
- str sp, [r1, #0x38]
- str lr, [r1, #0x3c]
- mrs r2, spsr
- str r2, [r1, #0x7c]
- msr cpsr_fsxc, r0
- bx lr
- .balign 4
-_020CCB10: .word 0x021D3728
-
- arm_func_start OSi_DisplayExContext
-OSi_DisplayExContext: ; 0x020CCB14
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020CCB70 ; =0x021D371C
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- mov r0, sp
- ldr r1, _020CCB74 ; =0x0000009F
- msr cpsr_fsxc, r1
- mov sp, r0
- bl OS_EnableProtectionUnit
- ldr r1, _020CCB78 ; =0x021D3720
- ldr r0, _020CCB70 ; =0x021D371C
- ldr r1, [r1, #0x0]
- ldr r2, [r0, #0x0]
- ldr r0, _020CCB7C ; =0x021D3728
- blx r2
- bl OS_DisableProtectionUnit
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CCB70: .word 0x021D371C
-_020CCB74: .word 0x0000009F
-_020CCB78: .word 0x021D3720
-_020CCB7C: .word 0x021D3728
-
- arm_func_start OS_InitException
-OS_InitException: ; 0x020CCB80
- ldr r0, _020CCBDC ; =0x027FFD9C
- ldr r1, [r0, #0x0]
- cmp r1, #0x2600000
- blo _020CCBA0
- cmp r1, #0x2800000
- ldrlo r0, _020CCBE0 ; =0x021D3724
- strcc r1, [r0, #0x0]
- blo _020CCBAC
-_020CCBA0:
- ldr r0, _020CCBE0 ; =0x021D3724
- mov r1, #0x0
- str r1, [r0, #0x0]
-_020CCBAC:
- ldr r0, _020CCBE0 ; =0x021D3724
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r2, _020CCBE4 ; =OSi_ExceptionHandler
- ldreq r1, _020CCBDC ; =0x027FFD9C
- ldreq r0, _020CCBE8 ; =0x027E3000
- streq r2, [r1, #0x0]
- streq r2, [r0, #0xfdc]
- ldr r0, _020CCBEC ; =0x021D371C
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020CCBDC: .word 0x027FFD9C
-_020CCBE0: .word 0x021D3724
-_020CCBE4: .word OSi_ExceptionHandler
-_020CCBE8: .word 0x027E3000
-_020CCBEC: .word 0x021D371C
-
- arm_func_start OSi_SetTimerReserved
-OSi_SetTimerReserved: ; 0x020CCBF0
- ldr r1, _020CCC08 ; =0x021D37A8
- mov r2, #0x1
- ldrh r3, [r1, #0x0]
- orr r0, r3, r2, lsl r0
- strh r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CCC08: .word 0x021D37A8
-
- arm_func_start OS_GetTickLo
-OS_GetTickLo: ; 0x020CCC0C
- ldr r0, _020CCC18 ; =0x04000100
- ldrh r0, [r0, #0x0]
- bx lr
- .balign 4
-_020CCC18: .word 0x04000100
-
- arm_func_start OS_GetTick
-OS_GetTick: ; 0x020CCC1C
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- bl OS_DisableInterrupts
- ldr r1, _020CCCBC ; =0x04000100
- ldr r3, _020CCCC0 ; =0x021D37B4
- ldrh r12, [r1, #0x0]
- ldr r2, _020CCCC4 ; =0x0000FFFF
- mvn r1, #0x0
- strh r12, [sp, #0x0]
- ldr r12, [r3, #0x0]
- ldr r3, [r3, #0x4]
- and r1, r12, r1
- and r2, r3, r2
- str r1, [sp, #0x4]
- ldr r1, _020CCCC8 ; =0x04000214
- str r2, [sp, #0x8]
- ldr r1, [r1, #0x0]
- ands r1, r1, #0x8
- beq _020CCC90
- ldrh r1, [sp, #0x0]
- ands r1, r1, #0x8000
- bne _020CCC90
- ldr r3, [sp, #0x4]
- mov r1, #0x1
- ldr r2, [sp, #0x8]
- adds r3, r3, r1
- adc r1, r2, #0x0
- str r3, [sp, #0x4]
- str r1, [sp, #0x8]
-_020CCC90:
- bl OS_RestoreInterrupts
- ldr r2, [sp, #0x4]
- ldr r1, [sp, #0x8]
- ldrh r0, [sp, #0x0]
- mov r1, r1, lsl #0x10
- orr r1, r1, r2, lsr #0x10
- orr r1, r1, r0, asr #0x1f
- orr r0, r0, r2, lsl #0x10
- add sp, sp, #0xc
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CCCBC: .word 0x04000100
-_020CCCC0: .word 0x021D37B4
-_020CCCC4: .word 0x0000FFFF
-_020CCCC8: .word 0x04000214
-
- arm_func_start OSi_CountUpTick
-OSi_CountUpTick: ; 0x020CCCCC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020CCD40 ; =0x021D37B4
- ldr r1, _020CCD44 ; =0x021D37B0
- ldr r12, [r2, #0x0]
- mov r0, #0x1
- ldr r3, [r2, #0x4]
- adds r12, r12, r0
- ldr r0, [r1, #0x0]
- adc r3, r3, #0x0
- str r12, [r2, #0x0]
- str r3, [r2, #0x4]
- cmp r0, #0x0
- mov r3, #0x0
- beq _020CCD24
- ldr r2, _020CCD48 ; =0x04000102
- ldr r0, _020CCD4C ; =0x04000100
- strh r3, [r2, #0x0]
- strh r3, [r0, #0x0]
- mov r0, #0xc1
- strh r0, [r2, #0x0]
- str r3, [r1, #0x0]
-_020CCD24:
- mov r0, #0x0
- ldr r1, _020CCD50 ; =OSi_CountUpTick
- mov r2, r0
- bl OSi_EnterTimerCallback
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CCD40: .word 0x021D37B4
-_020CCD44: .word 0x021D37B0
-_020CCD48: .word 0x04000102
-_020CCD4C: .word 0x04000100
-_020CCD50: .word OSi_CountUpTick
-
- arm_func_start OS_IsTickAvailable
-OS_IsTickAvailable: ; 0x020CCD54
- ldr r0, _020CCD60 ; =0x021D37AC
- ldrh r0, [r0, #0x0]
- bx lr
- .balign 4
-_020CCD60: .word 0x021D37AC
-
- arm_func_start OS_InitTick
-OS_InitTick: ; 0x020CCD64
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CCDE8 ; =0x021D37AC
- ldrh r0, [r1, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- mov r2, #0x1
- mov r0, #0x0
- strh r2, [r1, #0x0]
- bl OSi_SetTimerReserved
- ldr r0, _020CCDEC ; =0x021D37B4
- mov r2, #0x0
- str r2, [r0, #0x0]
- ldr r3, _020CCDF0 ; =0x04000102
- str r2, [r0, #0x4]
- ldr r0, _020CCDF4 ; =0x04000100
- strh r2, [r3, #0x0]
- ldr r1, _020CCDF8 ; =OSi_CountUpTick
- strh r2, [r0, #0x0]
- mov r2, #0xc1
- mov r0, #0x8
- strh r2, [r3, #0x0]
- bl OS_SetIrqFunction
- mov r0, #0x8
- bl OS_EnableIrqMask
- ldr r0, _020CCDFC ; =0x021D37B0
- mov r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CCDE8: .word 0x021D37AC
-_020CCDEC: .word 0x021D37B4
-_020CCDF0: .word 0x04000102
-_020CCDF4: .word 0x04000100
-_020CCDF8: .word OSi_CountUpTick
-_020CCDFC: .word 0x021D37B0
-
- arm_func_start OSi_AlarmHandler
-OSi_AlarmHandler: ; 0x020CCE00
- stmdb sp!, {r0,lr}
- bl OSi_ArrangeTimer
- ldmia sp!, {r0,lr}
- bx lr
-
- arm_func_start OSi_ArrangeTimer
-OSi_ArrangeTimer: ; 0x020CCE10
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _020CCF1C ; =0x04000106
- mov r2, #0x0
- mov r0, #0x10
- strh r2, [r1, #0x0]
- bl OS_DisableIrqMask
- ldr r0, _020CCF20 ; =0x027E0000
- add r0, r0, #0x3000
- ldr r1, [r0, #0xff8]
- orr r1, r1, #0x10
- str r1, [r0, #0xff8]
- bl OS_GetTick
- ldr r2, _020CCF24 ; =0x021D37C0
- ldr r4, [r2, #0x0]
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r3, [r4, #0x10]
- ldr r12, [r4, #0xc]
- cmp r1, r3
- cmpeq r0, r12
- bhs _020CCE84
- mov r0, r4
- bl OSi_SetTimer
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CCE84:
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- moveq r0, #0x0
- streq r0, [r2, #0x4]
- str r1, [r2, #0x0]
- movne r0, #0x0
- strne r0, [r1, #0x14]
- ldr r2, [r4, #0x1c]
- ldr r1, [r4, #0x20]
- mov r0, #0x0
- cmp r1, r0
- ldr r5, [r4, #0x0]
- cmpeq r2, r0
- streq r0, [r4, #0x0]
- cmp r5, #0x0
- beq _020CCECC
- ldr r0, [r4, #0x4]
- blx r5
-_020CCECC:
- ldr r2, [r4, #0x1c]
- ldr r0, [r4, #0x20]
- mov r1, #0x0
- cmp r0, r1
- cmpeq r2, r1
- beq _020CCEF4
- mov r0, r4
- mov r2, r1
- str r5, [r4, #0x0]
- bl OSi_InsertAlarm
-_020CCEF4:
- ldr r0, _020CCF24 ; =0x021D37C0
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- bl OSi_SetTimer
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CCF1C: .word 0x04000106
-_020CCF20: .word 0x027E0000
-_020CCF24: .word 0x021D37C0
-
- arm_func_start OS_CancelAlarm
-OS_CancelAlarm: ; 0x020CCF28
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x0]
- mov r4, r0
- cmp r1, #0x0
- bne _020CCF58
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CCF58:
- ldr r0, [r5, #0x18]
- cmp r0, #0x0
- ldreq r2, [r5, #0x14]
- ldreq r1, _020CCFBC ; =0x021D37C0
- streq r2, [r1, #0x4]
- ldrne r1, [r5, #0x14]
- strne r1, [r0, #0x14]
- ldr r1, [r5, #0x14]
- cmp r1, #0x0
- strne r0, [r1, #0x18]
- bne _020CCF98
- ldr r1, _020CCFBC ; =0x021D37C0
- cmp r0, #0x0
- str r0, [r1, #0x0]
- beq _020CCF98
- bl OSi_SetTimer
-_020CCF98:
- mov r1, #0x0
- str r1, [r5, #0x0]
- str r1, [r5, #0x1c]
- mov r0, r4
- str r1, [r5, #0x20]
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CCFBC: .word 0x021D37C0
-
- arm_func_start OS_SetAlarm
-OS_SetAlarm: ; 0x020CCFC0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- movs r6, r0
- mov r5, r1
- mov r4, r2
- mov r7, r3
- beq _020CCFE8
- ldr r0, [r6, #0x0]
- cmp r0, #0x0
- beq _020CCFEC
-_020CCFE8:
- bl OS_Terminate
-_020CCFEC:
- bl OS_DisableInterrupts
- mov r1, #0x0
- str r1, [r6, #0x1c]
- str r1, [r6, #0x20]
- str r7, [r6, #0x0]
- ldr r1, [sp, #0x18]
- mov r7, r0
- str r1, [r6, #0x4]
- bl OS_GetTick
- adds r3, r5, r0
- adc r2, r4, r1
- mov r0, r6
- mov r1, r3
- bl OSi_InsertAlarm
- mov r0, r7
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start OSi_InsertAlarm
-OSi_InsertAlarm: ; 0x020CD038
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- ldr r4, [r8, #0x1c]
- ldr r3, [r8, #0x20]
- mov r0, #0x0
- cmp r3, r0
- mov r7, r1
- mov r6, r2
- cmpeq r4, r0
- beq _020CD0B4
- bl OS_GetTick
- ldr r6, [r8, #0x28]
- ldr r7, [r8, #0x24]
- cmp r6, r1
- cmpeq r7, r0
- bhs _020CD0B4
- ldr r5, [r8, #0x1c]
- ldr r4, [r8, #0x20]
- subs r0, r0, r7
- mov r2, r5
- mov r3, r4
- sbc r1, r1, r6
- bl _ll_udiv
- mov r2, #0x1
- adds r2, r0, r2
- adc r0, r1, #0x0
- umull r3, r1, r5, r2
- mla r1, r5, r0, r1
- mla r1, r4, r2, r1
- adds r7, r7, r3
- adc r6, r6, r1
-_020CD0B4:
- str r7, [r8, #0xc]
- ldr r0, _020CD174 ; =0x021D37C0
- str r6, [r8, #0x10]
- ldr r4, [r0, #0x0]
- cmp r4, #0x0
- beq _020CD134
- mov r1, #0x0
-_020CD0D0:
- ldr r2, [r4, #0xc]
- ldr r0, [r4, #0x10]
- subs r3, r7, r2
- sbc r2, r6, r0
- subs r0, r3, r1
- sbcs r0, r2, r1
- bge _020CD128
- ldr r0, [r4, #0x14]
- str r0, [r8, #0x14]
- str r8, [r4, #0x14]
- str r4, [r8, #0x18]
- ldr r0, [r8, #0x14]
- cmp r0, #0x0
- strne r8, [r0, #0x18]
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldr r1, _020CD174 ; =0x021D37C0
- mov r0, r8
- str r8, [r1, #0x0]
- bl OSi_SetTimer
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CD128:
- ldr r4, [r4, #0x18]
- cmp r4, #0x0
- bne _020CD0D0
-_020CD134:
- ldr r1, _020CD174 ; =0x021D37C0
- mov r0, #0x0
- str r0, [r8, #0x18]
- ldr r0, [r1, #0x4]
- str r8, [r1, #0x4]
- str r0, [r8, #0x14]
- cmp r0, #0x0
- strne r8, [r0, #0x18]
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- mov r0, r8
- str r8, [r1, #0x4]
- str r8, [r1, #0x0]
- bl OSi_SetTimer
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020CD174: .word 0x021D37C0
-
- arm_func_start OS_CreateAlarm
-OS_CreateAlarm: ; 0x020CD178
- mov r1, #0x0
- str r1, [r0, #0x0]
- str r1, [r0, #0x8]
- bx lr
-
- arm_func_start OS_IsAlarmAvailable
-OS_IsAlarmAvailable: ; 0x020CD188
- ldr r0, _020CD194 ; =0x021D37BC
- ldrh r0, [r0, #0x0]
- bx lr
- .balign 4
-_020CD194: .word 0x021D37BC
-
- arm_func_start OS_InitAlarm
-OS_InitAlarm: ; 0x020CD198
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CD1E8 ; =0x021D37BC
- ldrh r0, [r1, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- mov r0, #0x1
- strh r0, [r1, #0x0]
- bl OSi_SetTimerReserved
- ldr r1, _020CD1EC ; =0x021D37C0
- mov r2, #0x0
- mov r0, #0x10
- str r2, [r1, #0x0]
- str r2, [r1, #0x4]
- bl OS_DisableIrqMask
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CD1E8: .word 0x021D37BC
-_020CD1EC: .word 0x021D37C0
-
- arm_func_start OSi_SetTimer
-OSi_SetTimer: ; 0x020CD1F0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- bl OS_GetTick
- ldr r3, _020CD27C ; =0x04000106
- mov r2, #0x0
- strh r2, [r3, #0x0]
- ldr r12, [r4, #0xc]
- ldr r3, [r4, #0x10]
- subs r5, r12, r0
- sbc r4, r3, r1
- ldr r1, _020CD280 ; =OSi_AlarmHandler
- mov r0, #0x1
- bl OSi_EnterTimerCallback
- mov r2, #0x0
- subs r0, r5, r2
- sbcs r0, r4, r2
- ldrlt r2, _020CD284 ; =0x0000FFFE
- blt _020CD254
- mov r0, #0x10000
- subs r0, r5, r0
- sbcs r0, r4, r2
- mvnlt r0, r5
- movlt r0, r0, lsl #0x10
- movlt r2, r0, lsr #0x10
-_020CD254:
- ldr r0, _020CD288 ; =0x04000104
- ldr r1, _020CD27C ; =0x04000106
- strh r2, [r0, #0x0]
- mov r2, #0xc1
- mov r0, #0x10
- strh r2, [r1, #0x0]
- bl OS_EnableIrqMask
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CD27C: .word 0x04000106
-_020CD280: .word OSi_AlarmHandler
-_020CD284: .word 0x0000FFFE
-_020CD288: .word 0x04000104
-
- arm_func_start OS_InitVAlarm
-OS_InitVAlarm: ; 0x020CD28C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020CD2EC ; =0x021D37C8
- ldrh r0, [r2, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- ldr r1, _020CD2F0 ; =0x021D37D4
- mov r3, #0x0
- mov r12, #0x1
- mov r0, #0x4
- strh r12, [r2, #0x0]
- str r3, [r1, #0x0]
- str r3, [r1, #0x4]
- bl OS_DisableIrqMask
- ldr r1, _020CD2F4 ; =0x021D37D0
- mov r2, #0x0
- ldr r0, _020CD2F8 ; =0x021D37CC
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CD2EC: .word 0x021D37C8
-_020CD2F0: .word 0x021D37D4
-_020CD2F4: .word 0x021D37D0
-_020CD2F8: .word 0x021D37CC
-
- arm_func_start OS_EnableInterrupts
-OS_EnableInterrupts: ; 0x020CD2FC
- mrs r0, cpsr
- bic r1, r0, #0x80
- msr cpsr_c, r1
- and r0, r0, #0x80
- bx lr
-
- arm_func_start OS_DisableInterrupts
-OS_DisableInterrupts:
- mrs r0, cpsr
- orr r1, r0, #0x80
- msr cpsr_c, r1
- and r0, r0, #0x80
- bx lr
-
- arm_func_start OS_RestoreInterrupts
-OS_RestoreInterrupts:
- mrs r1, cpsr
- bic r2, r1, #0x80
- orr r2, r2, r0
- msr cpsr_c, r2
- and r0, r1, #0x80
- bx lr
-
- arm_func_start OS_DisableInterrupts_IrqAndFiq
-OS_DisableInterrupts_IrqAndFiq: ; 0x020CD33C
- mrs r0, cpsr
- orr r1, r0, #0xc0
- msr cpsr_c, r1
- and r0, r0, #0xc0
- bx lr
-
- arm_func_start OS_RestoreInterrupts_IrqAndFiq
-OS_RestoreInterrupts_IrqAndFiq: ; 0x020CD350
- mrs r1, cpsr
- bic r2, r1, #0xc0
- orr r2, r2, r0
- msr cpsr_c, r2
- and r0, r1, #0xc0
- bx lr
-
- arm_func_start OS_GetCpsrIrq
-OS_GetCpsrIrq: ; 0x020CD368
- mrs r0, cpsr
- and r0, r0, #0x80
- bx lr
-
- arm_func_start OS_GetProcMode
-OS_GetProcMode: ; 0x020CD374
- mrs r0, cpsr
- and r0, r0, #0x1f
- bx lr
-_020CD380:
- subs r0, r0, #0x4
- bhs _020CD380
- bx lr
-
- arm_func_start OS_WaitVBlankIntr
-OS_WaitVBlankIntr: ; 0x020CD38C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, #0x1
- blx FUN_020005F2
- mov r0, #0x1
- mov r1, r0
- bl OS_WaitIrq
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start OS_ResetSystem
-OS_ResetSystem: ; 0x020CD3B4
- stmdb sp!, {r4,lr}
- ldr r1, _020CD42C ; =0x027FFC40
- mov r4, r0
- ldrh r0, [r1, #0x0]
- cmp r0, #0x2
- bne _020CD3D0
- bl OS_Terminate
-_020CD3D0:
- bl OS_GetLockID
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl CARD_LockRom
-_020CD3E0:
- mov r0, #0x0
- bl MI_StopDma
- mov r0, #0x1
- bl MI_StopDma
- mov r0, #0x2
- bl MI_StopDma
- mov r0, #0x3
- bl MI_StopDma
- mov r0, #0x40000
- bl OS_SetIrqMask
- mvn r0, #0x0
- bl OS_ResetRequestIrqMask
- ldr r1, _020CD430
- mov r0, #0x10
- str r4, [r1]
- bl OSi_SendToPxi
- bl FUN_01FF84A4
- ldmia sp!, {r4, lr}
- bx lr
-_020CD42C: .word 0x027FFC40
-_020CD430: .word 0x027FFC20
-
- arm_func_start OSi_SendToPxi
-OSi_SendToPxi: ; 0x020CD434
- stmdb sp!, {r4-r6,lr}
- mov r6, r0, lsl #0x8
- mov r5, #0xc
- mov r4, #0x0
-_020CD444:
- mov r0, r5
- mov r1, r6
- mov r2, r4
- bl PXI_SendWordByFifo
-_020CD454:
- cmp r0, #0x0
- bne _020CD444
- ldmia sp!, {r4-r6, lr}
- bx lr
-
- arm_func_start OSi_CommonCallback
-OSi_CommonCallback: ; 0x020CD464
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- and r0, r1, #0x7f00
- mov r0, r0, lsl #0x8
- mov r0, r0, lsr #0x10
- cmp r0, #0x10
- ldreq r0, _020CD4A4 ; =0x021D37E0
- moveq r1, #0x1
- streqh r1, [r0, #0x0]
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CD4A4: .word 0x021D37E0
-
- arm_func_start OS_InitReset
-OS_InitReset: ; 0x020CD4A8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020CD508 ; =0x021D37DC
- ldrh r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r1, #0x1
- strh r1, [r0, #0x0]
- bl PXI_Init
- mov r5, #0xc
- mov r4, #0x1
-_020CD4DC:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
-_020CD4E8:
- cmp r0, #0x0
- beq _020CD4DC
- ldr r1, _020CD50C
- mov r0, #0xC
- bl PXI_SetFifoRecvCallback
- add sp, sp, #0x4
- ldmia sp!, {r4-r5, lr}
- bx lr
-_020CD508: .word 0x021D37DC
-_020CD50C: .word 0x020CD464
-
- arm_func_start OS_GetOwnerRtcOffset
-OS_GetOwnerRtcOffset: ; 0x020CD510
- ldr r1, _020CD520 ; =0x027FFC80
- ldr r0, [r1, #0x68]
- ldr r1, [r1, #0x6c]
- bx lr
- .balign 4
-_020CD520: .word 0x027FFC80
-
- arm_func_start OS_GetOwnerInfo
-OS_GetOwnerInfo: ; 0x020CD524
- stmdb sp!, {r4,lr}
- ldr ip, _020CD59C ; =0x027FFC80
- mov r4, r0
- ldrh r2, [r12, #0x64]
- add r0, r12, #0x6
- add r1, r4, #0x4
- mov r2, r2, lsl #0x1d
- mov r2, r2, lsr #0x1d
- strb r2, [r4, #0x0]
- ldrb r3, [r12, #0x2]
- mov r2, #0x14
- mov r3, r3, lsl #0x1c
- mov r3, r3, lsr #0x1c
- strb r3, [r4, #0x1]
- ldrb r3, [r12, #0x3]
- strb r3, [r4, #0x2]
- ldrb r3, [r12, #0x4]
- strb r3, [r4, #0x3]
- ldrb r3, [r12, #0x1a]
- strh r3, [r4, #0x18]
- ldrb r3, [r12, #0x50]
- strh r3, [r4, #0x4e]
- bl MIi_CpuCopy16
- ldr r0, _020CD59C ; =0x027FFC80
- add r1, r4, #0x1a
- add r0, r0, #0x1c
- mov r2, #0x34
- bl MIi_CpuCopy16
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CD59C: .word 0x027FFC80
-
- arm_func_start OS_GetMacAddress
-OS_GetMacAddress: ; 0x020CD5A0
- ldr ip, _020CD5B4 ; =MI_CpuCopy8
- mov r1, r0
- ldr r0, _020CD5B8 ; =0x027FFCF4
- mov r2, #0x6
- bx r12
- .balign 4
-_020CD5B4: .word MI_CpuCopy8
-_020CD5B8: .word 0x027FFCF4
-
- arm_func_start OsCountZeroBits
-OsCountZeroBits: ; 0x020CD5BC
- clz r0, r0
- bx lr
-
- arm_func_start OSi_UnlockVram
-OSi_UnlockVram: ; 0x020CD5C4
- stmdb sp!, {r4-r10,lr}
- mov r5, r0
- mov r10, r1
- bl OS_DisableInterrupts
- ldr r4, _020CD640 ; =0x021D37E4
- ldr r1, _020CD644 ; =0x000001FF
- ldr r2, [r4, #0x0]
- mov r8, r0
- and r0, r5, r2
- and r9, r0, r1
- ldr r6, _020CD648 ; =0x021D37E8
- mov r7, #0x1
- mov r5, #0x0
-_020CD5F8:
- mov r0, r9
- bl OsCountZeroBits
- rsbs r2, r0, #0x1f
- bmi _020CD630
- mov r1, r2, lsl #0x1
- ldrh r0, [r6, r1]
- mvn r2, r7, lsl r2
- cmp r10, r0
- ldreq r0, [r4, #0x0]
- and r9, r9, r2
- andeq r0, r0, r2
- streqh r5, [r6, r1]
- streq r0, [r4, #0x0]
- b _020CD5F8
-_020CD630:
- mov r0, r8
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r10,lr}
- bx lr
- .balign 4
-_020CD640: .word 0x021D37E4
-_020CD644: .word 0x000001FF
-_020CD648: .word 0x021D37E8
-
- arm_func_start OSi_TryLockVram
-OSi_TryLockVram: ; 0x020CD64C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r8, r1
- bl OS_DisableInterrupts
- ldr r1, _020CD714 ; =0x021D37E4
- mov r7, r0
- ldr r0, [r1, #0x0]
- and r5, r6, r0
- ldr sb, _020CD718 ; =0x021D37E8
- mov r4, #0x1
-_020CD678:
- mov r0, r5
- bl OsCountZeroBits
- rsbs r1, r0, #0x1f
- bmi _020CD6B8
- mov r0, r1, lsl #0x1
- ldrh r0, [r9, r0]
- mvn r1, r4, lsl r1
- cmp r8, r0
- and r5, r5, r1
- beq _020CD678
- mov r0, r7
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r9,lr}
- bx lr
-_020CD6B8:
- ldr r0, _020CD71C ; =0x000001FF
- and r6, r6, r0
- ldr r4, _020CD718 ; =0x021D37E8
- ldr sb, _020CD714 ; =0x021D37E4
- mov r5, #0x1
-_020CD6CC:
- mov r0, r6
- bl OsCountZeroBits
- rsbs r1, r0, #0x1f
- bmi _020CD6FC
- ldr r0, [r9, #0x0]
- mvn r2, r5, lsl r1
- orr r0, r0, r5, lsl r1
- mov r1, r1, lsl #0x1
- strh r8, [r4, r1]
- str r0, [r9, #0x0]
- and r6, r6, r2
- b _020CD6CC
-_020CD6FC:
- mov r0, r7
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_020CD714: .word 0x021D37E4
-_020CD718: .word 0x021D37E8
-_020CD71C: .word 0x000001FF
-
- arm_func_start OSi_InitVramExclusive
-OSi_InitVramExclusive: ; 0x020CD720
- ldr r0, _020CD74C ; =0x021D37E4
- mov r3, #0x0
- str r3, [r0, #0x0]
- ldr r0, _020CD750 ; =0x021D37E8
- mov r2, r3
-_020CD734:
- mov r1, r3, lsl #0x1
- add r3, r3, #0x1
- strh r2, [r0, r1]
- cmp r3, #0x9
- blt _020CD734
- bx lr
- .balign 4
-_020CD74C: .word 0x021D37E4
-_020CD750: .word 0x021D37E8
-
- arm_func_start OS_GetLowEntropyData
-OS_GetLowEntropyData: ; 0x020CD754
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r1, _020CD82C ; =0x04000006
- ldr r2, _020CD830 ; =0x027FFC00
- ldrh r7, [r1, #0x0]
- add r4, r2, #0x80
- mov r6, r0
- add r5, r4, #0x74
- bl OS_GetTickLo
- orr r0, r0, r7, lsl #0x10
- str r0, [r6, #0x0]
- ldr r1, _020CD834 ; =0x021D37B4
- ldr r0, _020CD830 ; =0x027FFC00
- ldr r3, [r1, #0x0]
- ldrh r5, [r5, #0x4]
- ldr r2, [r1, #0x4]
- ldr r2, _020CD838 ; =0x04000600
- eor r3, r3, r5, lsl #0x10
- str r3, [r6, #0x4]
- ldr r3, [r1, #0x0]
- ldr r3, [r1, #0x4]
- ldr r1, [r4, #0x74]
- ldr r4, [r0, #0x3c]
- eor r1, r3, r1
- eor r1, r4, r1
- str r1, [r6, #0x8]
- ldr r3, [r6, #0x8]
- ldr r2, [r2, #0x0]
- add r1, r0, #0x300
- eor r2, r3, r2
- str r2, [r6, #0x8]
- ldr r2, [r0, #0x1e8]
- ldr r3, _020CD83C ; =0x04000130
- str r2, [r6, #0xc]
- ldr r4, [r0, #0x1ec]
- ldr r2, _020CD840 ; =0x027FFFA8
- str r4, [r6, #0x10]
- ldrh r4, [r1, #0x94]
- ldr r0, [r0, #0x390]
- eor r0, r0, r4, lsl #0x10
- str r0, [r6, #0x14]
- ldrh r4, [r1, #0xaa]
- ldrh r0, [r1, #0xac]
- orr r0, r0, r4, lsl #0x10
- str r0, [r6, #0x18]
- ldrh r3, [r3, #0x0]
- ldrh r0, [r2, #0x0]
- ldrh r1, [r1, #0x98]
- orr r0, r3, r0
- orr r0, r0, r1, lsl #0x10
- str r0, [r6, #0x1c]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020CD82C: .word 0x04000006
-_020CD830: .word 0x027FFC00
-_020CD834: .word 0x021D37B4
-_020CD838: .word 0x04000600
-_020CD83C: .word 0x04000130
-_020CD840: .word 0x027FFFA8
-
- arm_func_start OS_Halt
-OS_Halt: ; 0x020CD844
- mov r0, #0x0
- mcr p15, 0x0, r0, c7, c0, 0x4
- bx lr
-
- arm_func_start OS_Terminate
-OS_Terminate: ; 0x020CD850
- stmdb sp!, {lr}
- sub sp, sp, #0x4
-_020CD858:
- bl OS_DisableInterrupts
- bl OS_Halt
- b _020CD858
-
- arm_func_start MI_SetWramBank
-MI_SetWramBank:
- ldr r1, _020CD870 ; =0x04000247
- strb r0, [r1, #0x0]
- bx lr
- .balign 4
-_020CD870: .word 0x04000247
-
- arm_func_start MIi_CheckDma0SourceAddress
-MIi_CheckDma0SourceAddress:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- cmp r3, #0x0
- and r0, r1, #0xff000000
- beq _020CD8A4
- cmp r3, #0x800000
- subeq r1, r1, r2
- b _020CD8A8
-_020CD8A4:
- add r1, r1, r2
-_020CD8A8:
- cmp r0, #0x4000000
- beq _020CD8D4
- cmp r0, #0x8000000
- bhs _020CD8D4
- and r0, r1, #0xff000000
- cmp r0, #0x4000000
- beq _020CD8D4
- cmp r0, #0x8000000
- addcc sp, sp, #0x4
- ldmccia sp!, {lr}
- bxcc lr
-_020CD8D4:
- bl OS_Terminate
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start MIi_CheckAnotherAutoDMA
-MIi_CheckAnotherAutoDMA: ; 0x020CD8E4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r4, _020CD994 ; =0x040000B8
- mov r7, r0
- mov r6, r1
- mov r5, #0x0
-_020CD8FC:
- cmp r5, r7
- beq _020CD978
- ldr r1, [r4, #0x0]
- ands r0, r1, #0x80000000
- beq _020CD978
- and r0, r1, #0x38000000
- cmp r0, r6
- beq _020CD978
- cmp r0, #0x8000000
- bne _020CD92C
- cmp r6, #0x10000000
- beq _020CD978
-_020CD92C:
- cmp r0, #0x10000000
- bne _020CD93C
- cmp r6, #0x8000000
- beq _020CD978
-_020CD93C:
- cmp r0, #0x18000000
- beq _020CD974
- cmp r0, #0x20000000
- beq _020CD974
- cmp r0, #0x28000000
- beq _020CD974
- cmp r0, #0x30000000
- beq _020CD974
- cmp r0, #0x38000000
- beq _020CD974
- cmp r0, #0x8000000
- beq _020CD974
- cmp r0, #0x10000000
- bne _020CD978
-_020CD974:
- bl OS_Terminate
-_020CD978:
- add r5, r5, #0x1
- cmp r5, #0x3
- add r4, r4, #0xc
- blt _020CD8FC
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020CD994: .word 0x040000B8
-
- arm_func_start MI_StopDma
-MI_StopDma: ; 0x020CD998
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl OS_DisableInterrupts
- mov r1, #0x6
- mul r1, r4, r1
- add r1, r1, #0x5
- mov r1, r1, lsl #0x1
- add r1, r1, #0x4000000
- ldrh r2, [r1, #0xb0]
- cmp r4, #0x0
- bic r2, r2, #0x3a00
- strh r2, [r1, #0xb0]
- ldrh r2, [r1, #0xb0]
- bic r2, r2, #0x8000
- strh r2, [r1, #0xb0]
- ldrh r2, [r1, #0xb0]
- ldrh r1, [r1, #0xb0]
- bne _020CDA08
- mov r1, #0xc
- mul r12, r4, r1
- ldr r1, _020CDA14 ; =0x040000B0
- add r2, r12, #0x4000000
- mov r3, #0x0
- str r3, [r2, #0xb0]
- add r2, r12, r1
- ldr r1, _020CDA18 ; =0x81400001
- str r3, [r2, #0x4]
- str r1, [r2, #0x8]
-_020CDA08:
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CDA14: .word 0x040000B0
-_020CDA18: .word 0x81400001
-
- arm_func_start MI_WaitDma
-MI_WaitDma:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl OS_DisableInterrupts
- mov r1, #0x3
- mul r2, r4, r1
- ldr r1, _020CDA84 ; =0x040000B0
- add r2, r2, #0x2
- add r2, r1, r2, lsl #0x2
-_020CDA3C:
- ldr r1, [r2, #0x0]
- ands r1, r1, #0x80000000
- bne _020CDA3C
- cmp r4, #0x0
- bne _020CDA78
- mov r1, #0xc
- mul r12, r4, r1
- ldr r1, _020CDA84 ; =0x040000B0
- add r2, r12, #0x4000000
- mov r3, #0x0
- str r3, [r2, #0xb0]
- add r2, r12, r1
- ldr r1, _020CDA88 ; =0x81400001
- str r3, [r2, #0x4]
- str r1, [r2, #0x8]
-_020CDA78:
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CDA84: .word 0x040000B0
-_020CDA88: .word 0x81400001
-
- arm_func_start MI_DmaCopy32Async
-MI_DmaCopy32Async: ; 0x020CDA8C
- stmdb sp!, {r4-r8,lr}
- mov r5, r3
- mov r6, r2
- mov r2, r5
- mov r3, #0x0
- mov r8, r0
- mov r7, r1
- ldr r4, [sp, #0x18]
- bl MIi_CheckDma0SourceAddress
-_020CDAB0:
- cmp r5, #0x0
- bne _020CDAD4
- cmp r4, #0x0
- ldmeqia sp!, {r4-r8, lr}
- bxeq lr
- ldr r0, [sp, #0x1C]
- blx r4
- ldmia sp!, {r4-r8, lr}
- bx lr
-_020CDAD4:
- mov r0, r8
- bl MI_WaitDma
- cmp r4, #0x0
- beq _020CDB14
- ldr r2, [sp, #0x1C]
- mov r0, r8
- mov r1, r4
- bl OSi_EnterDmaCallback
- mov r3, r5, lsr #0x2
- mov r0, r8
- mov r1, r7
- mov r2, r6
- orr r3, r3, #0xc4000000
- bl FUN_01FF85F0
- ldmia sp!, {r4-r8, lr}
- bx lr
-_020CDB14:
- mov r3, r5, lsr #0x2
- mov r0, r8
- mov r1, r7
- mov r2, r6
- orr r3, r3, #0x84000000
- bl FUN_01FF85F0
- ldmia sp!, {r4-r8, lr}
- bx lr
-
- arm_func_start MI_DmaFill32Async
-MI_DmaFill32Async: ; 0x020CDB34
- stmdb sp!, {r4-r8,lr}
- movs r4, r3
- mov r7, r0
- mov r6, r1
- mov r5, r2
- ldr r8, [sp, #0x18]
- bne _020CDB6C
- cmp r8, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldr r0, [sp, #0x1c]
- blx r8
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CDB6C:
- bl MI_WaitDma
-_020CDB70:
- cmp r8, #0x0
- beq _020CDBC8
- ldr r2, [sp, #0x1C]
- mov r0, r7
- mov r1, r8
- bl OSi_EnterDmaCallback
- bl OS_DisableInterrupts
- mov r3, r4, lsr #2
- ldr r1, _20CDC08
- mov r2, r7, lsl #2
- add r2, r2, #0x4000000
- str r5, [r2, #0xE0]
- mov r4, r0
- add r1, r1, r7, lsl #0x2
- mov r0, r7
- mov r2, r6
- orr r3, r3, #0xc5000000
- bl FUN_01FF8544
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CDBC8:
- bl OS_DisableInterrupts
- ldr r1, _20CDC08
- mov r2, r7, lsl #0x2
- mov r3, r4, lsr #0x2
- mov r4, r0
- add ip, r2, #0x4000000
- mov r0, r7
- mov r2, r6
- add r1, r1, r7, lsl #0x2
- orr r3, r3, #0x85000000
- str r5, [ip, #0xE0]
- bl FUN_01FF8544
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
-_20CDC08: .word 0x040000E0
-
- arm_func_start MI_DmaCopy16
-MI_DmaCopy16: ; 0x020CDC0C
- stmdb sp!, {r4-r8,lr}
- movs r5, r3
- mov r8, r0
- mov r7, r1
- mov r6, r2
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r2, r5
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
- mov r0, #0x3
- mul r1, r8, r0
- ldr r0, _020CDC80 ; =0x040000B0
- add r1, r1, #0x2
- add r4, r0, r1, lsl #0x2
-_020CDC48:
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x80000000
- bne _020CDC48
- mov r3, r5, lsr #0x1
- mov r0, r8
- mov r1, r7
- mov r2, r6
- orr r3, r3, #0x80000000
- bl FUN_01FF857C
-_020CDC6C:
- ldr r0, [r4]
- ands r0, r0, #0x80000000
- bne _020CDC6C
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CDC80: .word 0x040000B0
-
- arm_func_start MI_DmaCopy32
-MI_DmaCopy32: ; 0x020CDC84
- stmdb sp!, {r4-r8,lr}
- mov r5, r3
- mov r6, r2
- mov r2, r5
- mov r3, #0x0
- mov r8, r0
- mov r7, r1
- bl MIi_CheckDma0SourceAddress
-_020CDCA4:
- cmp r5, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r0, #0x3
- mul r1, r8, r0
- ldr r0, _020CDCFC
- add r1, r1, #0x2
- add r4, r0, r1, lsl #0x2
-_020CDCC4:
- ldr r0, [r4]
- ands r0, r0, #0x80000000
- bne _020CDCC4
- mov r3, r5, lsr #0x2
- mov r0, r8
- mov r1, r7
- mov r2, r6
- orr r3, r3, #0x84000000
- bl FUN_01FF857C
-_020CDCE8:
- ldr r0, [r4]
- ands r0, r0, #0x80000000
- bne _020CDCE8
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CDCFC: .word 0x040000B0
-
- arm_func_start MI_DmaFill32
-MI_DmaFill32: ; 0x020CDD00
- stmdb sp!, {r4-r8,lr}
- movs r4, r3
- mov r8, r0
- mov r7, r1
- mov r6, r2
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r0, #0x3
- mul r1, r8, r0
- ldr r0, _020CDD88 ; =0x040000B0
- add r1, r1, #0x2
- add r5, r0, r1, lsl #0x2
-_020CDD30:
- ldr r0, [r5, #0x0]
- ands r0, r0, #0x80000000
- bne _020CDD30
- bl OS_DisableInterrupts
- ldr r1, _020CDD8C ; =0x040000E0
- mov r2, r8, lsl #0x2
- mov r3, r4, lsr #0x2
- mov r4, r0
- add r12, r2, #0x4000000
- mov r0, r8
- mov r2, r7
- add r1, r1, r8, lsl #0x2
- orr r3, r3, #0x85000000
- str r6, [r12, #0xe0]
- bl FUN_01FF84E4
- mov r0, r4
- bl OS_RestoreInterrupts
-_020CDD74:
- ldr r0, [r5]
- ands r0, r0, #0x80000000
- bne _020CDD74
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020CDD88: .word 0x040000B0
-_020CDD8C: .word 0x040000E0
-
- arm_func_start MI_HBlankDmaCopy16
-MI_HBlankDmaCopy16: ; 0x020CDD90
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- mov r7, r0
- mov r4, r3
- mov r1, #0x10000000
- mov r5, r2
- bl MIi_CheckAnotherAutoDMA
- mov r0, r7
- mov r1, r6
- mov r2, r4
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
-_020CDDC4:
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7, lr}
- bxeq lr
- mov r0, r7
- bl MI_WaitDma
- ldr r3, _020CDE00
- mov r0, r7
- mov r1, r6
- mov r2, r5
- orr r3, r3, r4, lsr #0x1
- bl FUN_01FF85F0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CDE00: .word 0x92600000
-
- arm_func_start MI_HBlankDmaCopy32
-MI_HBlankDmaCopy32: ; 0x020CDE04
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- mov r7, r0
- mov r4, r3
- mov r1, #0x10000000
- mov r5, r2
- bl MIi_CheckAnotherAutoDMA
- mov r0, r7
- mov r1, r6
- mov r2, r4
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
-_020CDE38:
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r7
- bl MI_WaitDma
- ldr r3, _020CDE74
- mov r0, r7
- mov r1, r6
- mov r2, r5
- orr r3, r3, r4, lsr #0x2
- bl FUN_01FF85F0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020CDE74: .word 0x96600000
-
- arm_func_start MIi_DMAFastCallback
-MIi_DMAFastCallback: ; 0x020CDE78
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020CDEB4 ; =0x021D37FC
- mov r2, #0x0
- ldr r1, [r0, #0x10]
- str r2, [r0, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldr r0, [r0, #0x14]
- ldmeqia sp!, {lr}
- bxeq lr
- blx r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CDEB4: .word 0x021D37FC
-
- arm_func_start MI_SendGXCommandAsyncFast
-MI_SendGXCommandAsyncFast: ; 0x020CDEB8
- stmdb sp!, {r4-r6,lr}
- movs r4, r2
- mov r6, r0
- mov r5, r1
- bne _020CDEE8
- cmp r3, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r0, [sp, #0x10]
- blx r3
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020CDEE8:
- ldr r2, _020CDF6C ; =0x021D37FC
- ldr r0, [r2, #0x0]
- cmp r0, #0x0
- bne _020CDEE8
- ldr r12, [sp, #0x10]
- mov lr, #0x1
- mov r0, r6
- mov r1, #0x38000000
- str lr, [r2, #0x0]
- str r6, [r2, #0x4]
- str r3, [r2, #0x10]
- str r12, [r2, #0x14]
- bl MIi_CheckAnotherAutoDMA
- mov r0, r6
- mov r1, r5
- mov r2, r4
- mov r3, #0x0
- bl MIi_CheckDma0SourceAddress
- mov r0, r6
- bl MI_WaitDma
- mov r0, r6
- ldr r1, _020CDF70 ; =MIi_DMAFastCallback
- mov r2, #0x0
- bl OSi_EnterDmaCallback
- mov r0, r6
- mov r1, r5
- ldr r2, _020CDF74 ; =0x04000400
- mov r3, #0x3c00000
- rsb r3, r3, #0x0
- orr r3, r3, r4, lsr #0x2
- bl FUN_01FF85F0
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CDF6C: .word 0x021D37FC
-_020CDF70: .word MIi_DMAFastCallback
-_020CDF74: .word 0x04000400
-
- arm_func_start MIi_DMACallback
-MIi_DMACallback: ; 0x020CDF78
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, #0x200000
- bl OS_DisableIrqMask
- ldr r2, _020CDFE4 ; =0x04000600
- ldr r0, _020CDFE8 ; =0x021D37FC
- ldr r1, [r2, #0x0]
- ldr r3, [r0, #0x18]
- bic r1, r1, #0xc0000000
- orr r1, r1, r3, lsl #0x1e
- str r1, [r2, #0x0]
- ldr r1, [r0, #0x1c]
- mov r0, #0x200000
- bl OS_SetIrqFunction
- ldr r0, _020CDFE8 ; =0x021D37FC
- mov r2, #0x0
- ldr r1, [r0, #0x10]
- str r2, [r0, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldr r0, [r0, #0x14]
- ldmeqia sp!, {lr}
- bxeq lr
- blx r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CDFE4: .word 0x04000600
-_020CDFE8: .word 0x021D37FC
-
- arm_func_start MIi_FIFOCallback
-MIi_FIFOCallback: ; 0x020CDFEC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020CE0A4 ; =0x021D37FC
- ldr r4, [r0, #0xc]
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r0, _020CE0A4 ; =0x021D37FC
- cmp r4, #0x1d8
- ldr r5, [r0, #0x8]
- movcs r4, #0x1d8
- ldr r2, [r0, #0xc]
- add r1, r5, r4
- subs r2, r2, r4
- str r2, [r0, #0xc]
- str r1, [r0, #0x8]
- bne _020CE078
- ldr r0, [r0, #0x4]
- ldr r1, _020CE0A8 ; =MIi_DMACallback
- mov r2, #0x0
- bl OSi_EnterDmaCallback
- mov r0, #0x3bc00000
- rsb r3, r0, #0x0
- ldr r1, _020CE0A4 ; =0x021D37FC
- ldr r2, _020CE0AC ; =0x04000400
- ldr r0, [r1, #0x4]
- mov r1, r5
- orr r3, r3, r4, lsr #0x2
- bl FUN_01FF85F0
- mov r0, #0x200000
- bl OS_ResetRequestIrqMask
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CE078:
- ldr r3, _020CE0B0 ; =0x84400000
- ldr r0, [r0, #0x4]
- ldr r2, _020CE0AC ; =0x04000400
- mov r1, r5
- orr r3, r3, r4, lsr #0x2
- bl FUN_01FF85F0
- mov r0, #0x200000
- bl OS_ResetRequestIrqMask
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CE0A4: .word 0x021D37FC
-_020CE0A8: .word MIi_DMACallback
-_020CE0AC: .word 0x04000400
-_020CE0B0: .word 0x84400000
-
- arm_func_start MI_SendGXCommandAsync
-MI_SendGXCommandAsync: ; 0x020CE0B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- cmp r2, #0x0
- bne _020CE0EC
- cmp r3, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r0, [sp, #0x10]
- blx r3
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CE0EC:
- ldr r0, _020CE1BC ; =0x021D37FC
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020CE0EC
- ldr r5, _020CE1C0 ; =0x04000600
-_020CE100:
- ldr r0, [r5, #0x0]
- and r0, r0, #0x7000000
- mov r0, r0, lsr #0x18
- ands r0, r0, #0x2
- beq _020CE100
- ldr ip, _020CE1BC ; =0x021D37FC
- ldr lr, [sp, #0x10]
- str r3, [r12, #0x10]
- mov r5, #0x1
- mov r0, r4
- mov r3, #0x0
- str r5, [r12, #0x0]
- str r4, [r12, #0x4]
- str r1, [r12, #0x8]
- str r2, [r12, #0xc]
- str lr, [r12, #0x14]
- bl MIi_CheckDma0SourceAddress
- mov r0, r4
- bl MI_WaitDma
- bl OS_DisableInterrupts
- ldr r1, _020CE1C0 ; =0x04000600
- mov r4, r0
- ldr r0, [r1, #0x0]
- ldr r1, _020CE1BC ; =0x021D37FC
- and r0, r0, #0xc0000000
- mov r2, r0, lsr #0x1e
- mov r0, #0x200000
- str r2, [r1, #0x18]
- bl OS_GetIrqFunction
- ldr r1, _020CE1BC ; =0x021D37FC
- ldr r2, _020CE1C0 ; =0x04000600
- str r0, [r1, #0x1c]
- ldr r0, [r2, #0x0]
- ldr r1, _020CE1C4 ; =MIi_FIFOCallback
- bic r0, r0, #0xc0000000
- orr r3, r0, #0x40000000
- mov r0, #0x200000
- str r3, [r2, #0x0]
- bl OS_SetIrqFunction
- mov r0, #0x200000
- bl OS_EnableIrqMask
- bl MIi_FIFOCallback
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CE1BC: .word 0x021D37FC
-_020CE1C0: .word 0x04000600
-_020CE1C4: .word MIi_FIFOCallback
-
- arm_func_start MIi_CpuClear16
-MIi_CpuClear16: ; 0x020CE1C8
- mov r3, #0x0
-_020CE1CC:
- cmp r3, r2
- strlth r0, [r1, r3]
- addlt r3, r3, #0x2
- blt _020CE1CC
- bx lr
-
- arm_func_start MIi_CpuCopy16
-MIi_CpuCopy16: ; 0x020CE1E0
- mov r12, #0x0
-_020CE1E4:
- cmp r12, r2
- ldrlth r3, [r0, r12]
- strlth r3, [r1, r12]
- addlt r12, r12, #0x2
- blt _020CE1E4
- bx lr
-
- arm_func_start MIi_CpuClear32
-MIi_CpuClear32: ; 0x020CE1FC
- add r12, r1, r2
-_020CE200:
- cmp r1, r12
- stmltia r1!, {r0}
- blt _020CE200
- bx lr
-
- arm_func_start MIi_CpuCopy32
-MIi_CpuCopy32: ; 0x020CE210
- add r12, r1, r2
-_020CE214:
- cmp r1, r12
- ldmltia r0!, {r2}
- stmltia r1!, {r2}
- blt _020CE214
- bx lr
-
- arm_func_start MIi_CpuSend32
-MIi_CpuSend32: ; 0x020CE228
- add r12, r0, r2
-_020CE22C:
- cmp r0, r12
- ldmltia r0!, {r2}
- strlt r2, [r1, #0x0]
- blt _020CE22C
- bx lr
-
- arm_func_start MIi_CpuClearFast
-MIi_CpuClearFast: ; 0x020CE240
- stmdb sp!, {r4-r9}
- add r9, r1, r2
- mov r12, r2, lsr #0x5
- add r12, r1, r12, lsl #0x5
- mov r2, r0
- mov r3, r2
- mov r4, r2
- mov r5, r2
- mov r6, r2
- mov r7, r2
- mov r8, r2
-_020CE26C:
- cmp r1, r12
- stmltia r1!, {r0,r2-r8}
- blt _020CE26C
-_020CE278:
- cmp r1, r9
- stmltia r1!, {r0}
- blt _020CE278
- ldmia sp!, {r4-r9}
- bx lr
-
- arm_func_start MIi_CpuCopyFast
-MIi_CpuCopyFast: ; 0x020CE28C
- stmdb sp!, {r4-r10}
- add r10, r1, r2
- mov r12, r2, lsr #0x5
- add r12, r1, r12, lsl #0x5
-_020CE29C:
- cmp r1, r12
- ldmltia r0!, {r2-r9}
- stmltia r1!, {r2-r9}
- blt _020CE29C
-_020CE2AC:
- cmp r1, r10
- ldmltia r0!, {r2}
- stmltia r1!, {r2}
- blt _020CE2AC
- ldmia sp!, {r4-r10}
- bx lr
-
- arm_func_start FUN_020CE2C4
-FUN_020CE2C4:
- ldmia r0!, {r2, r3, ip}
- stmia r1!, {r2, r3, ip}
- ldmia r0!, {r2, r3, ip}
- stmia r1!, {r2, r3, ip}
- ldmia r0!, {r2, r3}
- stmia r1!, {r2, r3}
- bx lr
-
- arm_func_start MI_Copy36B
-MI_Copy36B: ; 0x020CE2E0
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- bx lr
-
- arm_func_start MI_Copy48B
-MI_Copy48B: ; 0x020CE2FC
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- bx lr
-
- arm_func_start MI_Copy64B
-MI_Copy64B: ; 0x020CE320
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0!, {r2-r3,r12}
- stmia r1!, {r2-r3,r12}
- ldmia r0, {r0,r2-r3,r12}
- stmia r1!, {r0,r2-r3,r12}
- bx lr
-
- arm_func_start MI_CpuFill8
-MI_CpuFill8: ; 0x020CE34C
- cmp r2, #0x0
- bxeq lr
- tst r0, #0x1
- beq _020CE378
- ldrh r12, [r0, #-0x1]
- and r12, r12, #0xff
- orr r3, r12, r1, lsl #0x8
- strh r3, [r0, #-0x1]
- add r0, r0, #0x1
- subs r2, r2, #0x1
- bxeq lr
-_020CE378:
- cmp r2, #0x2
- blo _020CE3C0
- orr r1, r1, r1, lsl #0x8
- tst r0, #0x2
- beq _020CE398
- strh r1, [r0], #0x2
- subs r2, r2, #0x2
- bxeq lr
-_020CE398:
- orr r1, r1, r1, lsl #0x10
- bics r3, r2, #0x3
- beq _020CE3B8
- sub r2, r2, r3
- add r12, r3, r0
-_020CE3AC:
- str r1, [r0], #0x4
- cmp r0, r12
- blo _020CE3AC
-_020CE3B8:
- tst r2, #0x2
- strneh r1, [r0], #0x2
-_020CE3C0:
- tst r2, #0x1
- bxeq lr
- ldrh r3, [r0, #0x0]
- and r3, r3, #0xff00
- and r1, r1, #0xff
- orr r1, r1, r3
- strh r1, [r0, #0x0]
- bx lr
-
- arm_func_start MI_CpuCopy8
-MI_CpuCopy8:
- cmp r2, #0x0
- bxeq lr
- tst r1, #0x1
- beq _020CE420
- ldrh r12, [r1, #-0x1]
- and r12, r12, #0xff
- tst r0, #0x1
- ldrneh r3, [r0, #-0x1]
- movne r3, r3, lsr #0x8
- ldreqh r3, [r0, #0x0]
- orr r3, r12, r3, lsl #0x8
- strh r3, [r1, #-0x1]
- add r0, r0, #0x1
- add r1, r1, #0x1
- subs r2, r2, #0x1
- bxeq lr
-_020CE420:
- eor r12, r1, r0
- tst r12, #0x1
- beq _020CE474
- bic r0, r0, #0x1
- ldrh r12, [r0], #0x2
- mov r3, r12, lsr #0x8
- subs r2, r2, #0x2
- blo _020CE458
-_020CE440:
- ldrh r12, [r0], #0x2
- orr r12, r3, r12, lsl #0x8
- strh r12, [r1], #0x2
- mov r3, r12, lsr #0x10
- subs r2, r2, #0x2
- bhs _020CE440
-_020CE458:
- tst r2, #0x1
- bxeq lr
- ldrh r12, [r1, #0x0]
- and r12, r12, #0xff00
- orr r12, r12, r3
- strh r12, [r1, #0x0]
- bx lr
-_020CE474:
- tst r12, #0x2
- beq _020CE4A0
- bics r3, r2, #0x1
- beq _020CE4EC
- sub r2, r2, r3
- add r12, r3, r1
-_020CE48C:
- ldrh r3, [r0], #0x2
- strh r3, [r1], #0x2
- cmp r1, r12
- blo _020CE48C
- b _020CE4EC
-_020CE4A0:
- cmp r2, #0x2
- blo _020CE4EC
- tst r1, #0x2
- beq _020CE4C0
- ldrh r3, [r0], #0x2
- strh r3, [r1], #0x2
- subs r2, r2, #0x2
- bxeq lr
-_020CE4C0:
- bics r3, r2, #0x3
- beq _020CE4E0
- sub r2, r2, r3
- add r12, r3, r1
-_020CE4D0:
- ldr r3, [r0], #0x4
- str r3, [r1], #0x4
- cmp r1, r12
- blo _020CE4D0
-_020CE4E0:
- tst r2, #0x2
- ldrneh r3, [r0], #0x2
- strneh r3, [r1], #0x2
-_020CE4EC:
- tst r2, #0x1
- bxeq lr
- ldrh r2, [r1, #0x0]
- ldrh r0, [r0, #0x0]
- and r2, r2, #0xff00
- and r0, r0, #0xff
- orr r0, r2, r0
- strh r0, [r1, #0x0]
- bx lr
-
- thumb_func_start MI_Zero36B
-MI_Zero36B: ; 0x020CE510
- mov r1, #0x0
- mov r2, #0x0
- mov r3, #0x0
- stmia r0!, {r1-r3}
- stmia r0!, {r1-r3}
- stmia r0!, {r1-r3}
- bx lr
-
- arm_func_start MI_SwapWord
-MI_SwapWord: ; 0x020CE520
- swp r0, r0, [r1]
- bx lr
-
- arm_func_start MI_UncompressLZ8
-MI_UncompressLZ8: ; 0x020CE528
- stmdb sp!, {r4-r6,lr}
- ldr r5, [r0], #0x4
- mov r2, r5, lsr #0x8
-_020CE534:
- cmp r2, #0x0
- ble _020CE5B4
- ldrb lr, [r0], #0x1
- mov r4, #0x8
-_020CE544:
- subs r4, r4, #0x1
- blt _020CE534
- tst lr, #0x80
- bne _020CE568
- ldrb r6, [r0], #0x1
- .word 0xE1416096
- add r1, r1, #0x1
- sub r2, r2, #0x1
- b _020CE5A4
-_020CE568:
- ldrb r5, [r0, #0x0]
- mov r6, #0x3
- add r3, r6, r5, asr #0x4
- ldrb r6, [r0], #0x1
- and r5, r6, #0xf
- mov r12, r5, lsl #0x8
- ldrb r6, [r0], #0x1
- orr r5, r6, r12
- add r12, r5, #0x1
- sub r2, r2, r3
-_020CE590:
- ldrb r5, [r1, -r12]
- .word 0xE1415095
- add r1, r1, #0x1
- subs r3, r3, #0x1
- bgt _020CE590
-_020CE5A4:
- cmp r2, #0x0
- movgt lr, lr, lsl #0x1
- bgt _020CE544
- b _020CE534
-_020CE5B4:
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start MIi_CardDmaCopy32
-MIi_CardDmaCopy32: ; 0x020CE5BC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- mov r6, r0
- mov r7, r3
- mvn r1, #0x0
- mov r4, r2
- bl MIi_CheckAnotherAutoDMA
- mov r0, r6
- mov r1, r5
- mov r2, r7
- mov r3, #0x1000000
- bl MIi_CheckDma0SourceAddress
-_020CE5F0:
- cmp r7, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7, lr}
- bxeq lr
- mov r0, #0x3
- mul r1, r6, r0
- ldr r0, _020CE640
- add r1, r1, #0x2
- add r1, r0, r1, lsl #0x2
-_020CE614:
- ldr r0, [r1]
- ands r0, r0, #0x80000000
- bne _020CE614
- ldr r3, _020CE644
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_01FF85F0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7, lr}
- bx lr
-_020CE640: .word 0x040000B0
-_020CE644: .word 0xAf000001
-
- arm_func_start MI_Init
-MI_Init: ; 0x020CE648
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, #0x3
- bl MI_SetWramBank
- mov r0, #0x0
- bl MI_StopDma
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start PushCommand_impl
-PushCommand_impl: ; 0x020CE66C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r0, #0x1
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl SND_AllocCommand
-_020CE68C:
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7, lr}
- bxeq lr
- str r7, [r0, #0x4]
- str r6, [r0, #0x8]
- str r5, [r0, #0xc]
- ldr r1, [sp, #0x18]
- str r4, [r0, #0x10]
- str r1, [r0, #0x14]
- bl SND_PushCommand
- add sp, sp, #0x4
- ldmia sp!, {r4-r7, lr}
- bx lr
-
- arm_func_start SNDi_SetTrackParam
-SNDi_SetTrackParam: ; 0x020CE6C4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r12, [sp, #0x8]
- mov lr, r2
- str r3, [sp, #0x0]
- mov r2, r1
- orr r1, r0, r12, lsl #0x18
- mov r3, lr
- mov r0, #0x7
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_020CE6F8
-FUN_020CE6F8: ; 0x020CE6F8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, r2
- str r3, [sp, #0x0]
- mov r1, r0
- mov r2, lr
- mov r3, r12
- mov r0, #0x6
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_ResetMasterPan
-SND_ResetMasterPan: ; 0x020CE72C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x0
- mov r3, r2
- mov r0, #0x18
- mvn r1, #0x0
- str r2, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetMasterPan
-SND_SetMasterPan: ; 0x020CE758
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x0
- mov r1, r0
- mov r3, r2
- mov r0, #0x18
- str r2, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetOutputSelector
-SND_SetOutputSelector: ; 0x020CE784
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, r2
- str r3, [sp, #0x0]
- mov r1, r0
- mov r2, lr
- mov r3, r12
- mov r0, #0x19
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_InvalidateWaveData
-SND_InvalidateWaveData: ; 0x020CE7B8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x20
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_InvalidateBankData
-SND_InvalidateBankData: ; 0x020CE7E4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x1f
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_InvalidateSeqData
-SND_InvalidateSeqData: ; 0x020CE810
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x1e
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetupChannelPcm
-SND_SetupChannelPcm: ; 0x020CE83C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r12, [sp, #0x18]
- mov r3, r3, lsl #0x1a
- orr r4, r3, r1, lsl #0x18
- ldr r5, [sp, #0x24]
- mov r3, r12, lsl #0x18
- ldr r1, [sp, #0x1c]
- ldr r12, [sp, #0x10]
- orr r4, r4, r5, lsl #0x10
- orr r4, r12, r4
- ldr lr, [sp, #0x20]
- orr r3, r3, r1, lsl #0x16
- ldr r12, [sp, #0x14]
- orr r1, r0, lr, lsl #0x10
- orr r3, r12, r3
- mov r0, #0xe
- str r4, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start SND_SetChannelPan
-SND_SetChannelPan: ; 0x020CE894
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x15
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetChannelVolume
-SND_SetChannelVolume: ; 0x020CE8C0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x0
- mov r1, r0
- mov r2, lr
- mov r0, #0x14
- str r12, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetChannelTimer
-SND_SetChannelTimer: ; 0x020CE8F4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x13
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_UnlockChannel
-SND_UnlockChannel: ; 0x020CE920
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x1b
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_LockChannel
-SND_LockChannel: ; 0x020CE94C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x1a
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetupAlarm
-SND_SetupAlarm: ; 0x020CE978
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r4, r2
- mov r5, r1
- ldr r2, [sp, #0x18]
- mov r6, r0
- mov r1, r3
- bl SNDi_SetAlarmHandler
-_020CE998:
- str r0, [sp]
- mov r1, r6
- mov r2, r5
- mov r3, r4
- mov r0, #0x12
- bl PushCommand_impl
- add sp, sp, #0x8
- ldmia sp!, {r4-r6, lr}
- bx lr
-
- arm_func_start SND_SetupCapture
-SND_SetupCapture: ; 0x020CE9BC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, r0, lsl #0x1f
- orr r0, r0, r1, lsl #0x1e
- ldr r12, [sp, #0x8]
- mov r1, r2
- orr r0, r0, r12, lsl #0x1d
- ldr r2, [sp, #0xc]
- mov lr, #0x0
- orr r0, r0, r2, lsl #0x1c
- ldr r12, [sp, #0x10]
- mov r2, r3
- orr r3, r0, r12, lsl #0x1b
- mov r0, #0x11
- str lr, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_StopTimer
-SND_StopTimer: ; 0x020CEA08
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r7, r2
- mov r9, r0
- mov r8, r1
- mov r6, r3
- mov r4, r7
- mov r5, #0x0
- b _020CEA44
-_020CEA2C:
- ands r0, r4, #0x1
- beq _020CEA3C
- mov r0, r5
- bl SNDi_IncAlarmId
-_020CEA3C:
- add r5, r5, #0x1
- mov r4, r4, lsr #0x1
-_020CEA44:
- cmp r5, #0x8
- bge _020CEA54
- cmp r4, #0x0
- bne _020CEA2C
-_020CEA54:
- mov r1, r9
- mov r2, r8
- mov r3, r7
- mov r0, #0xd
- str r6, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start SND_StartTimer
-SND_StartTimer: ; 0x020CEA78
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, r2
- str r3, [sp, #0x0]
- mov r1, r0
- mov r2, lr
- mov r3, r12
- mov r0, #0xc
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetTrackAllocatableChannel
-SND_SetTrackAllocatableChannel: ; 0x020CEAAC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r3, r2
- mov r12, #0x0
- mov r1, r0
- mov r2, lr
- mov r0, #0x9
- str r12, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetTrackPan
-SND_SetTrackPan: ; 0x020CEAE0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r3, r2
- mov r12, #0x1
- mov r2, #0x9
- str r12, [sp, #0x0]
- bl SNDi_SetTrackParam
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetTrackPitch
-SND_SetTrackPitch: ; 0x020CEB08
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r3, r2
- mov r12, #0x2
- mov r2, #0xc
- str r12, [sp, #0x0]
- bl SNDi_SetTrackParam
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_SetPlayerChannelPriority
-SND_SetPlayerChannelPriority: ; 0x020CEB30
- ldr ip, _020CEB44 ; =FUN_020CE6F8
- mov r2, r1
- mov r1, #0x4
- mov r3, #0x1
- bx r12
- .balign 4
-_020CEB44: .word FUN_020CE6F8
-
- arm_func_start SND_SetPlayerVolume
-SND_SetPlayerVolume: ; 0x020CEB48
- ldr ip, _020CEB5C ; =FUN_020CE6F8
- mov r2, r1
- mov r1, #0x6
- mov r3, #0x2
- bx r12
- .balign 4
-_020CEB5C: .word FUN_020CE6F8
-
- arm_func_start SND_PauseSeq
-SND_PauseSeq: ; 0x020CEB60
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r3, #0x0
- mov r1, r0
- mov r0, #0x4
- str r3, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_StartPreparedSeq
-SND_StartPreparedSeq: ; 0x020CEB8C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x0
- mov r1, r0
- mov r3, r2
- mov r0, #0x3
- str r2, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_PrepareSeq
-SND_PrepareSeq: ; 0x020CEBB8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, r1
- mov r12, r2
- str r3, [sp, #0x0]
- mov r1, r0
- mov r2, lr
- mov r3, r12
- mov r0, #0x2
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SND_StopSeq
-SND_StopSeq: ; 0x020CEBEC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x0
- mov r1, r0
- mov r3, r2
- mov r0, #0x1
- str r2, [sp, #0x0]
- bl PushCommand_impl
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start SNDi_UnlockMutex
-SNDi_UnlockMutex: ; 0x020CEC18
- ldr ip, _020CEC24 ; =OS_UnlockMutex
- ldr r0, _020CEC28 ; =0x021D3820
- bx r12
- .balign 4
-_020CEC24: .word OS_UnlockMutex
-_020CEC28: .word 0x021D3820
-
- arm_func_start SNDi_LockMutex
-SNDi_LockMutex: ; 0x020CEC2C
- ldr ip, _020CEC38 ; =OS_LockMutex
- ldr r0, _020CEC3C ; =0x021D3820
- bx r12
- .balign 4
-_020CEC38: .word OS_LockMutex
-_020CEC3C: .word 0x021D3820
-
- arm_func_start SND_Init
-SND_Init: ; 0x020CEC40
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020CEC84 ; =0x021D381C
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- ldr r0, _020CEC88 ; =0x021D3820
- mov r2, #0x1
- str r2, [r1, #0x0]
- bl OS_InitMutex
- bl SND_CommandInit
- bl SND_AlarmInit
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CEC84: .word 0x021D381C
-_020CEC88: .word 0x021D3820
-
- arm_func_start IsCommandAvailable
-IsCommandAvailable:
- stmdb sp!, {r4,lr}
- bl OS_IsRunOnEmulator
-_020CEC94:
- cmp r0, #0x0
- moveq r0, #0x1
- ldmeqia sp!, {r4, lr}
- bxeq lr
- bl OS_DisableInterrupts
- ldr r1, _020CECD0
- mov r2, #0x10
- str r2, [r1]
- ldr r4, [r1]
- bl OS_RestoreInterrupts
- cmp r4, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- ldmia sp!, {r4, lr}
- bx lr
-_020CECD0: .word 0x04FFF200
-
- arm_func_start AllocCommand
-AllocCommand: ; 0x020CECD4
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r1, _020CED24 ; =0x021D3838
- ldr r4, [r1, #0x0]
- cmp r4, #0x0
- bne _020CECFC
- bl OS_RestoreInterrupts
-_020CECF0:
- mov r0, #0x0
- ldmia sp!, {r4, lr}
- bx lr
-_020CECFC:
- ldr r2, [r4, #0x0]
- str r2, [r1, #0x0]
- cmp r2, #0x0
- ldreq r1, _020CED28 ; =0x021D3848
- moveq r2, #0x0
- streq r2, [r1, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CED24: .word 0x021D3838
-_020CED28: .word 0x021D3848
-
- arm_func_start RequestCommandProc
-RequestCommandProc: ; 0x020CED2C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, #0x7
- mov r4, #0x0
-_020CED3C:
- mov r0, r5
- mov r1, r4
- mov r2, r4
- bl PXI_SendWordByFifo
-_020CED4C:
- cmp r0, #0
- blt _020CED3C
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start InitPXI
-InitPXI: ; 0x020CED60
- stmdb sp!, {r4-r6,lr}
- ldr r1, _020CEDC8 ; =PxiFifoCallback
- mov r0, #0x7
- bl PXI_SetFifoRecvCallback
- bl IsCommandAvailable
-_020CED74:
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6, lr}
- bxeq lr
- mov r0, #0x7
- mov r1, #0x1
- bl PXI_IsCallbackReady
- cmp r0, #0x0
- ldmneia sp!, {r4-r6, lr}
- bxne lr
- mov r6, #0x64
- mov r5, #0x7
- mov r4, #0x1
-_020CEDA4:
- mov r0, r6
- bl OS_SpinWait
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
- cmp r0, #0x0
- beq _020CEDA4
- ldmia sp!, {r4-r6, lr}
- bx lr
-_020CEDC8: .word PxiFifoCallback
-
- arm_func_start PxiFifoCallback
-PxiFifoCallback: ; 0x020CEDCC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, r5
- bl SNDi_CallAlarmHandler
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start SND_CountWaitingCommand
-SND_CountWaitingCommand: ; 0x020CEDFC
- stmdb sp!, {r4,lr}
- bl SND_CountFreeCommand
- mov r4, r0
- bl SND_CountReservedCommand
- rsb r1, r4, #0x100
- sub r0, r1, r0
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start SND_CountReservedCommand
-SND_CountReservedCommand: ; 0x020CEE1C
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r1, _020CEE58 ; =0x021D3840
- mov r4, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- beq _020CEE48
-_020CEE38:
- ldr r1, [r1, #0x0]
- add r4, r4, #0x1
- cmp r1, #0x0
- bne _020CEE38
-_020CEE48:
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CEE58: .word 0x021D3840
-
- arm_func_start SND_CountFreeCommand
-SND_CountFreeCommand: ; 0x020CEE5C
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r1, _020CEE98 ; =0x021D3838
- mov r4, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- beq _020CEE88
-_020CEE78:
- ldr r1, [r1, #0x0]
- add r4, r4, #0x1
- cmp r1, #0x0
- bne _020CEE78
-_020CEE88:
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CEE98: .word 0x021D3838
-
- arm_func_start SND_IsFinishedCommandTag
-SND_IsFinishedCommandTag:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl OS_DisableInterrupts
- ldr r1, _020CEEEC ; =0x021D383C
- ldr r1, [r1, #0x0]
- cmp r4, r1
- bls _020CEECC
- sub r1, r4, r1
- cmp r1, #0x80000000
- movcc r4, #0x0
- movcs r4, #0x1
- b _020CEEDC
-_020CEECC:
- sub r1, r1, r4
- cmp r1, #0x80000000
- movcc r4, #0x1
- movcs r4, #0x0
-_020CEEDC:
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CEEEC: .word 0x021D383C
-
- arm_func_start SND_GetCurrentCommandTag
-SND_GetCurrentCommandTag: ; 0x020CEEF0
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- ldr r1, _020CEF24 ; =0x021D3840
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- ldreq r1, _020CEF28 ; =0x021D383C
- ldreq r4, [r1, #0x0]
- ldrne r1, _020CEF2C ; =0x021D3858
- ldrne r4, [r1, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CEF24: .word 0x021D3840
-_020CEF28: .word 0x021D383C
-_020CEF2C: .word 0x021D3858
-
- arm_func_start SND_WaitForCommandProc
-SND_WaitForCommandProc: ; 0x020CEF30
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl SND_IsFinishedCommandTag
-_020CEF40:
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5, lr}
- bxne lr
- mov r4, #0x0
-_020CEF54:
- mov r0, r4
- bl SND_RecvCommandReply
- cmp r0, #0x0
- bne _020CEF54
- mov r0, r5
- bl SND_IsFinishedCommandTag
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5, lr}
- bxne lr
- bl RequestCommandProc
- mov r0, r5
- bl SND_IsFinishedCommandTag
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5, lr}
- bxne lr
- mov r4, #0x1
-_020CEF9C:
- mov r0, r4
- bl SND_RecvCommandReply
- mov r0, r5
- bl SND_IsFinishedCommandTag
- cmp r0, #0x0
- beq _020CEF9C
- add sp, sp, #0x4
- ldmia sp!, {r4-r5, lr}
- bx lr
-
- arm_func_start SND_FlushCommand
-SND_FlushCommand: ; 0x020CEFC0
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020CF164 ; =0x021D3840
- mov r4, r0
- ldr r1, [r1, #0x0]
- cmp r1, #0x0
- bne _020CEFF8
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r9,lr}
- bx lr
-_020CEFF8:
- ldr r1, _020CF168 ; =0x021D3854
- ldr r1, [r1, #0x0]
- cmp r1, #0x8
- blt _020CF03C
- ands r1, r5, #0x1
- bne _020CF024
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r9,lr}
- bx lr
-_020CF024:
- mov r0, #0x1
- bl SND_RecvCommandReply
- ldr r0, _020CF168 ; =0x021D3854
- ldr r0, [r0, #0x0]
- cmp r0, #0x8
- bge _020CF024
-_020CF03C:
- ldr r0, _020CF16C ; =0x021D3B00
- mov r1, #0x1800
- bl DC_FlushRange
- ldr r1, _020CF164 ; =0x021D3840
- mov r0, #0x7
- ldr r1, [r1, #0x0]
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020CF05C:
- cmp r0, #0x0
- bge _020CF0E0
- ands r0, r5, #0x1
- bne _020CF084
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r9, lr}
- bx lr
-_020CF084:
- ldr r1, _020CF164
- mov r0, #0x7
- ldr r1, [r1]
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- bge _020CF0E0
- ldr r6, _020CF164
- mov r9, #0x64
- mov r8, #0x7
- mov r7, #0x0
-_020CF0B0:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r9
- bl OS_SpinWait
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, r8
- ldr r1, [r6]
- mov r2, r7
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- blt _020CF0B0
-_020CF0E0:
- ands r0, r5, #0x2
- beq _020CF0EC
- bl RequestCommandProc
-_020CF0EC:
- ldr r0, _020CF170
- ldr r1, _020CF164
- ldr r3, [r0]
- ldr r5, [r1]
- add r1, r3, #0x1
- ldr r2, _020CF174
- str r1, [r0]
- str r5, [r2, r3, lsl #2]
- cmp r1, #0x8
- movgt r1, #0x0
- ldr r2, _020CF168
- strgt r1, [r0]
- ldr r1, _020CF178
- ldr r3, [r2]
- ldr r0, [r1]
- add ip, r3, #0x1
- add r6, r0, #0x1
- ldr r5, _020CF164
- mov lr, #0x0
- ldr r3, _020CF17C
- mov r0, r4
- str lr, [r5]
- str lr, [r3]
- str ip, [r2]
- str r6, [r1]
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r9, lr}
- bx lr
-_020CF164: .word 0x021D3840
-_020CF168: .word 0x021D3854
-_020CF16C: .word 0x021D3B00
-_020CF170: .word 0x021D3850
-_020CF174: .word 0x021D385C
-_020CF178: .word 0x021D3858
-_020CF17C: .word 0x021D3844
-
- arm_func_start SND_PushCommand
-SND_PushCommand: ; 0x020CF180
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl OS_DisableInterrupts
- ldr r2, _020CF1C0 ; =0x021D3844
- ldr r1, [r2, #0x0]
- cmp r1, #0x0
- ldreq r1, _020CF1C4 ; =0x021D3840
- streq r4, [r2, #0x0]
- streq r4, [r1, #0x0]
- strne r4, [r1, #0x0]
- strne r4, [r2, #0x0]
- mov r1, #0x0
- str r1, [r4, #0x0]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CF1C0: .word 0x021D3844
-_020CF1C4: .word 0x021D3840
-
- arm_func_start SND_AllocCommand
-SND_AllocCommand:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl IsCommandAvailable
-_020CF1D4:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- bl AllocCommand
- cmp r0, #0x0
- ldmneia sp!, {r4,lr}
- bxne lr
- ands r0, r4, #0x1
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- bl SND_CountWaitingCommand
- cmp r0, #0x0
- ble _020CF238
- mov r4, #0x0
-_020CF214:
- mov r0, r4
- bl SND_RecvCommandReply
- cmp r0, #0x0
- bne _020CF214
- bl AllocCommand
- cmp r0, #0x0
- beq _020CF240
- ldmia sp!, {r4,lr}
- bx lr
-_020CF238:
- mov r0, #0x1
- bl SND_FlushCommand
-_020CF240:
- bl RequestCommandProc
- mov r4, #0x1
-_020CF248:
- mov r0, r4
- bl SND_RecvCommandReply
- bl AllocCommand
- cmp r0, #0x0
- beq _020CF248
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start SND_RecvCommandReply
-SND_RecvCommandReply: ; 0x020CF264
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- bl OS_DisableInterrupts
- mov r5, r0
- ands r0, r4, #0x1
- beq _020CF2C0
- bl SNDi_GetFinishedCommandTag
- ldr r4, _020CF380 ; =0x021D383C
- ldr r1, [r4, #0x0]
- cmp r1, r0
- bne _020CF2E8
- mov r6, #0x64
-_020CF294:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r6
- bl OS_SpinWait
- bl OS_DisableInterrupts
- mov r5, r0
- bl SNDi_GetFinishedCommandTag
- ldr r1, [r4, #0x0]
- cmp r1, r0
- beq _020CF294
- b _020CF2E8
-_020CF2C0:
- bl SNDi_GetFinishedCommandTag
- ldr r1, _020CF380 ; =0x021D383C
- ldr r1, [r1, #0x0]
- cmp r1, r0
- bne _020CF2E8
- mov r0, r5
- bl OS_RestoreInterrupts
-_020CF2DC:
- mov r0, #0x0
- ldmia sp!, {r4-r6, lr}
- bx lr
-_020CF2E8:
- ldr r0, _020CF384 ; =0x021D384C
- ldr r2, _020CF388 ; =0x021D385C
- ldr r3, [r0, #0x0]
- add r1, r3, #0x1
- ldr r4, [r2, r3, lsl #0x2]
- str r1, [r0, #0x0]
- cmp r1, #0x8
- movgt r1, #0x0
- strgt r1, [r0, #0x0]
- ldr r0, [r4, #0x0]
- mov r1, r4
- cmp r0, #0x0
- beq _020CF32C
-_020CF31C:
- ldr r1, [r1, #0x0]
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- bne _020CF31C
-_020CF32C:
- ldr r0, _020CF38C ; =0x021D3848
- ldr r3, _020CF390 ; =0x021D3854
- ldr r0, [r0, #0x0]
- ldr r2, _020CF380 ; =0x021D383C
- cmp r0, #0x0
- strne r4, [r0, #0x0]
- ldreq r0, _020CF394 ; =0x021D3838
- ldr lr, [r3, #0x0]
- streq r4, [r0, #0x0]
- ldr ip, _020CF38C ; =0x021D3848
- sub r6, lr, #0x1
- ldr r0, [r2, #0x0]
- str r1, [r12, #0x0]
- add lr, r0, #0x1
- mov r0, r5
- str r6, [r3, #0x0]
- str lr, [r2, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020CF380: .word 0x021D383C
-_020CF384: .word 0x021D384C
-_020CF388: .word 0x021D385C
-_020CF38C: .word 0x021D3848
-_020CF390: .word 0x021D3854
-_020CF394: .word 0x021D3838
-
- arm_func_start SND_CommandInit
-SND_CommandInit: ; 0x020CF398
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- bl InitPXI
- ldr r3, _020CF478 ; =0x021D3B00
- ldr r0, _020CF47C ; =0x021D3838
- mov r4, #0x0
- str r3, [r0, #0x0]
- mov r1, r3
- mov r0, #0x18
-_020CF3BC:
- add r4, r4, #0x1
- mla r2, r4, r0, r1
- cmp r4, #0xff
- str r2, [r3], #0x18
- blt _020CF3BC
- ldr r7, _020CF480 ; =0x021D4B00
- mov r10, #0x0
- ldr r5, _020CF484 ; =0x021D3840
- ldr r4, _020CF488 ; =0x021D3844
- ldr lr, _020CF48C ; =0x021D3854
- ldr ip, _020CF490 ; =0x021D384C
- ldr r3, _020CF494 ; =0x021D3850
- ldr r1, _020CF498 ; =0x021D383C
- ldr sb, _020CF49C ; =0x021D52E8
- ldr r6, _020CF4A0 ; =0x021D3848
- ldr r2, _020CF4A4 ; =0x021D3858
- mov r8, #0x1
- ldr r0, _020CF4A8 ; =0x021D3880
- ldr fp, _020CF4AC ; =0x021D5360
- str r9, [r6, #0x0]
- str r10, [r7, #0x7e8]
- str r10, [r5, #0x0]
- str r10, [r4, #0x0]
- str r10, [lr, #0x0]
- str r10, [r12, #0x0]
- str r10, [r3, #0x0]
- str r8, [r2, #0x0]
- str r10, [r1, #0x0]
- str r0, [r11, #0x0]
- bl SNDi_InitSharedWork
- mov r0, r8
- bl SND_AllocCommand
-_020CF43C:
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r11, lr}
- bxeq lr
- mov r2, #0x1D
- mov r1, fp
- str r2, [r0, #0x4]
- ldr r1, [r1]
- str r1, [r0, #0x8]
- bl SND_PushCommand
- mov r0, r8
- bl SND_FlushCommand
- add sp, sp, #0x4
- ldmia sp!, {r4-r11, lr}
- bx lr
-_020CF478: .word 0x021D3B00
-_020CF47C: .word 0x021D3838
-_020CF480: .word 0x021D4B00
-_020CF484: .word 0x021D3840
-_020CF488: .word 0x021D3844
-_020CF48C: .word 0x021D3854
-_020CF490: .word 0x021D384C
-_020CF494: .word 0x021D3850
-_020CF498: .word 0x021D383C
-_020CF49C: .word 0x021D52E8
-_020CF4A0: .word 0x021D3848
-_020CF4A4: .word 0x021D3858
-_020CF4A8: .word 0x021D3880
-_020CF4AC: .word 0x021D5360
-
- arm_func_start SNDi_CallAlarmHandler
-SNDi_CallAlarmHandler: ; 0x020CF4B0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, _020CF50C ; =0x021D5300
- and r2, r0, #0xff
- mov r1, #0xc
- mla r3, r2, r1, r3
- mov r1, r0, asr #0x8
- ldrb r0, [r3, #0x8]
- and r1, r1, #0xff
- cmp r1, r0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- ldr r1, [r3, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- ldr r0, [r3, #0x4]
- blx r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CF50C: .word 0x021D5300
-
- arm_func_start SNDi_SetAlarmHandler
-SNDi_SetAlarmHandler:
- mov r3, #0xc
- mul r3, r0, r3
- ldr r0, _020CF53C ; =0x021D5300
- str r1, [r0, r3]
- add r1, r0, r3
- str r2, [r1, #0x4]
- ldrb r0, [r1, #0x8]
- add r0, r0, #0x1
- strb r0, [r1, #0x8]
- ldrb r0, [r1, #0x8]
- bx lr
- .balign 4
-_020CF53C: .word 0x021D5300
-
- arm_func_start SNDi_IncAlarmId
-SNDi_IncAlarmId: ; 0x020CF540
- ldr r2, _020CF55C ; =0x021D5300
- mov r1, #0xc
- mla r1, r0, r1, r2
- ldrb r0, [r1, #0x8]
- add r0, r0, #0x1
- strb r0, [r1, #0x8]
- bx lr
- .balign 4
-_020CF55C: .word 0x021D5300
-
- arm_func_start SND_AlarmInit
-SND_AlarmInit: ; 0x020CF560
- ldr r1, _020CF58C ; =0x021D5300
- mov r2, #0x0
- mov r0, r2
-_020CF56C:
- str r0, [r1, #0x0]
- str r0, [r1, #0x4]
- add r2, r2, #0x1
- strb r0, [r1, #0x8]
- cmp r2, #0x8
- add r1, r1, #0xc
- blt _020CF56C
- bx lr
- .balign 4
-_020CF58C: .word 0x021D5300
-
- arm_func_start SNDi_InitSharedWork
-SNDi_InitSharedWork: ; 0x020CF590
- stmdb sp!, {r4,lr}
- mov r4, #0x0
- str r4, [r0, #0x4]
- strh r4, [r0, #0x8]
- strh r4, [r0, #0xa]
- mov r12, r0
- str r4, [r0, #0x0]
- mov r3, r4
- mvn r2, #0x0
-_020CF5B4:
- mov lr, r3
- str r3, [r12, #0x40]
-_020CF5BC:
- add r1, r12, lr, lsl #0x1
- add lr, lr, #0x1
- strh r2, [r1, #0x20]
- cmp lr, #0x10
- blt _020CF5BC
- add r4, r4, #0x1
- cmp r4, #0x10
- add r12, r12, #0x24
- blt _020CF5B4
- mov r3, #0x0
- mvn r2, #0x0
-_020CF5E8:
- add r1, r0, r3, lsl #0x1
- add r1, r1, #0x200
- add r3, r3, #0x1
- strh r2, [r1, #0x60]
- cmp r3, #0x10
- blt _020CF5E8
- mov r1, #0x280
- bl DC_FlushRange
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start SNDi_GetFinishedCommandTag
-SNDi_GetFinishedCommandTag: ; 0x020CF610
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020CF640 ; =0x021D5360
- mov r1, #0x4
- ldr r0, [r0, #0x0]
- bl DC_InvalidateRange
- ldr r0, _020CF640 ; =0x021D5360
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CF640: .word 0x021D5360
-
- arm_func_start SND_GetPlayerTickCounter
-SND_GetPlayerTickCounter: ; 0x020CF644
- stmdb sp!, {r4,lr}
- mov r1, #0x24
- mul r4, r0, r1
- ldr r0, _020CF680 ; =0x021D5360
- mov r1, #0x4
- ldr r0, [r0, #0x0]
- add r0, r0, #0x40
- add r0, r0, r4
- bl DC_InvalidateRange
- ldr r0, _020CF680 ; =0x021D5360
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- ldr r0, [r0, #0x40]
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020CF680: .word 0x021D5360
-
- arm_func_start SND_GetChannelStatus
-SND_GetChannelStatus: ; 0x020CF684
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020CF6B8 ; =0x021D5360
- mov r1, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, #0x8
- bl DC_InvalidateRange
- ldr r0, _020CF6B8 ; =0x021D5360
- ldr r0, [r0, #0x0]
- ldrh r0, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CF6B8: .word 0x021D5360
-
- arm_func_start SND_GetPlayerStatus
-SND_GetPlayerStatus: ; 0x020CF6BC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020CF6F0 ; =0x021D5360
- mov r1, #0x4
- ldr r0, [r0, #0x0]
- add r0, r0, #0x4
- bl DC_InvalidateRange
- ldr r0, _020CF6F0 ; =0x021D5360
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020CF6F0: .word 0x021D5360
-
- arm_func_start SND_CalcChannelVolume
-SND_CalcChannelVolume: ; 0x020CF6F4
- ldr r1, _020CF75C ; =0xFFFFFD2D
- cmp r0, r1
- movlt r0, r1
- blt _020CF70C
- cmp r0, #0x0
- movgt r0, #0x0
-_020CF70C:
- ldr r1, _020CF760 ; =0x000002D3
- ldr r2, _020CF764 ; =0x02103CAC
- add r3, r0, r1
- mvn r1, #0xef
- cmp r0, r1
- ldrb r2, [r2, r3]
- movlt r0, #0x3
- blt _020CF74C
- mvn r1, #0x77
- cmp r0, r1
- movlt r0, #0x2
- blt _020CF74C
- mvn r1, #0x3b
- cmp r0, r1
- movlt r0, #0x1
- movge r0, #0x0
-_020CF74C:
- orr r0, r2, r0, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bx lr
- .balign 4
-_020CF75C: .word 0xFFFFFD2D
-_020CF760: .word 0x000002D3
-_020CF764: .word 0x02103CAC
-
- arm_func_start SND_GetWaveDataAddress
-SND_GetWaveDataAddress: ; 0x020CF768
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- bl SNDi_LockMutex
- add r0, r5, r4, lsl #0x2
- ldr r4, [r0, #0x3c]
- cmp r4, #0x0
- beq _020CF798
- cmp r4, #0x2000000
- addcc r4, r5, r4
- b _020CF79C
-_020CF798:
- mov r4, #0x0
-_020CF79C:
- bl SNDi_UnlockMutex
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start SND_SetWaveDataAddress
-SND_SetWaveDataAddress: ; 0x020CF7B0
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl SNDi_LockMutex
- add r0, r6, #0x3c
- add r2, r6, r5, lsl #0x2
- add r0, r0, r5, lsl #0x2
- mov r1, #0x4
- str r4, [r2, #0x3c]
- bl DC_StoreRange
- bl SNDi_UnlockMutex
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start SND_GetWaveDataCount
-SND_GetWaveDataCount: ; 0x020CF7E8
- ldr r0, [r0, #0x38]
- bx lr
-
- arm_func_start SND_GetNextInstData
-SND_GetNextInstData: ; 0x020CF7F0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r4, [r2, #0x0]
- ldr r3, [r0, #0x38]
- cmp r4, r3
- bhs _020CF9B8
- mov r12, #0x0
-_020CF80C:
- add r3, r0, r4, lsl #0x2
- ldr r4, [r3, #0x3c]
- strb r4, [r1, #0x0]
- ldrb r3, [r1, #0x0]
- cmp r3, #0x10
- bgt _020CF850
- cmp r3, #0x10
- bge _020CF8A8
- cmp r3, #0x5
- addls pc, pc, r3, lsl #0x2
- b _020CF998
-_020CF838:
- b _020CF998
- b _020CF85C
- b _020CF85C
- b _020CF85C
- b _020CF85C
- b _020CF85C
-_020CF850:
- cmp r3, #0x11
- beq _020CF924
- b _020CF998
-_020CF85C:
- mov r3, r4, lsr #0x8
- add r5, r0, r4, lsr #0x8
- ldrh r4, [r0, r3]
- ldrh r3, [r5, #0x2]
- add sp, sp, #0x4
- mov r0, #0x1
- strh r4, [r1, #0x2]
- strh r3, [r1, #0x4]
- ldrh r4, [r5, #0x4]
- ldrh r3, [r5, #0x6]
- strh r4, [r1, #0x6]
- strh r3, [r1, #0x8]
- ldrh r3, [r5, #0x8]
- strh r3, [r1, #0xA]
- ldr r1, [r2]
- add r1, r1, #0x1
- str r1, [r2]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CF8A8:
- add r5, r0, r4, lsr #0x8
- b _020CF904
-_020CF8B0:
- mov r0, #0xc
- mla r12, lr, r0, r5
- ldrh r4, [r12, #0x2]
- ldrh r3, [r12, #0x4]
- add sp, sp, #0x4
- mov r0, #0x1
- strh r4, [r1, #0x0]
- strh r3, [r1, #0x2]
- ldrh r4, [r12, #0x6]
- ldrh r3, [r12, #0x8]
- strh r4, [r1, #0x4]
- strh r3, [r1, #0x6]
- ldrh r4, [r12, #0xa]
- ldrh r3, [r12, #0xc]
- strh r4, [r1, #0x8]
- strh r3, [r1, #0xa]
- ldr r1, [r2, #0x4]
- add r1, r1, #0x1
- str r1, [r2, #0x4]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CF904:
- ldrb r4, [r5, #0x1]
- ldrb r3, [r5, #0x0]
- ldr lr, [r2, #0x4]
- sub r3, r4, r3
- add r3, r3, #0x1
- cmp lr, r3
- blo _020CF8B0
- b _020CF998
-_020CF924:
- add r4, r0, r4, lsr #0x8
- b _020CF98C
-_020CF92C:
- ldrb lr, [r4, r3]
- cmp lr, #0x0
- beq _020CF998
- mov r0, #0xc
- mla lr, r3, r0, r4
- ldrh r12, [lr, #0x8]
- ldrh r3, [lr, #0xa]
- add sp, sp, #0x4
- mov r0, #0x1
- strh r12, [r1, #0x0]
- strh r3, [r1, #0x2]
- ldrh r12, [lr, #0xc]
- ldrh r3, [lr, #0xe]
- strh r12, [r1, #0x4]
- strh r3, [r1, #0x6]
- ldrh r12, [lr, #0x10]
- ldrh r3, [lr, #0x12]
- strh r12, [r1, #0x8]
- strh r3, [r1, #0xa]
- ldr r1, [r2, #0x4]
- add r1, r1, #0x1
- str r1, [r2, #0x4]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020CF98C:
- ldr r3, [r2, #0x4]
- cmp r3, #0x8
- blo _020CF92C
-_020CF998:
- ldr r3, [r2, #0x0]
- add r3, r3, #0x1
- str r3, [r2, #0x0]
- str r12, [r2, #0x4]
- ldr r4, [r2, #0x0]
- ldr r3, [r0, #0x38]
- cmp r4, r3
- blo _020CF80C
-_020CF9B8:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start SND_GetFirstInstDataPos
-SND_GetFirstInstDataPos: ; 0x020CF9C8
- sub sp, sp, #0x8
- mov r1, #0x0
- str r1, [sp, #0x0]
- str r1, [sp, #0x4]
- str r1, [r0, #0x0]
- str r1, [r0, #0x4]
- add sp, sp, #0x8
- bx lr
-
- arm_func_start SND_DestroyWaveArc
-SND_DestroyWaveArc: ; 0x020CF9E8
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- bl SNDi_LockMutex
- ldr r0, [r4, #0x18]
- cmp r0, #0x0
- beq _020CFA28
- mov r5, #0x0
- mov r4, #0x8
-_020CFA08:
- ldr r6, [r0, #0x4]
- mov r1, r4
- str r5, [r0, #0x0]
- str r5, [r0, #0x4]
- bl DC_StoreRange
- mov r0, r6
- cmp r6, #0x0
- bne _020CFA08
-_020CFA28:
- bl SNDi_UnlockMutex
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start SND_DestroyBank
-SND_DestroyBank: ; 0x020CFA34
- stmdb sp!, {r4-r8,lr}
- mov r7, r0
- bl SNDi_LockMutex
- add r5, r7, #0x18
- mov r6, #0x0
- mov r8, #0x8
- mov r4, #0x3c
-_020CFA50:
- add r1, r7, r6, lsl #0x3
- ldr r0, [r1, #0x18]
- cmp r0, #0x0
- beq _020CFAB8
- ldr r3, [r0, #0x18]
- cmp r5, r3
- bne _020CFA80
- ldr r2, [r1, #0x1c]
- mov r1, r4
- str r2, [r0, #0x18]
- bl DC_StoreRange
- b _020CFAB8
-_020CFA80:
- cmp r3, #0x0
- beq _020CFAA0
-_020CFA88:
- ldr r0, [r3, #0x4]
- cmp r5, r0
- beq _020CFAA0
- mov r3, r0
- cmp r0, #0x0
- bne _020CFA88
-_020CFAA0:
- add r0, r7, r6, lsl #0x3
- ldr r2, [r0, #0x1c]
- mov r0, r3
- mov r1, r8
- str r2, [r3, #0x4]
- bl DC_StoreRange
-_020CFAB8:
- add r6, r6, #0x1
- cmp r6, #0x4
- add r5, r5, #0x8
- blt _020CFA50
- bl SNDi_UnlockMutex
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start SND_AssignWaveArc
-SND_AssignWaveArc: ; 0x020CFAD4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl SNDi_LockMutex
- add r3, r6, r5, lsl #0x3
- ldr r2, [r3, #0x18]
- mov r12, r5, lsl #0x3
- cmp r2, #0x0
- beq _020CFB70
- cmp r4, r2
- bne _020CFB10
- bl SNDi_UnlockMutex
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020CFB10:
- add r1, r6, #0x18
- ldr r0, [r2, #0x18]
- add r12, r1, r12
- cmp r12, r0
- bne _020CFB3C
- ldr r0, [r3, #0x1c]
- mov r1, #0x3c
- str r0, [r2, #0x18]
- ldr r0, [r3, #0x18]
- bl DC_StoreRange
- b _020CFB70
-_020CFB3C:
- cmp r0, #0x0
- beq _020CFB5C
-_020CFB44:
- ldr r1, [r0, #0x4]
- cmp r12, r1
- beq _020CFB5C
- mov r0, r1
- cmp r1, #0x0
- bne _020CFB44
-_020CFB5C:
- add r1, r6, r5, lsl #0x3
- ldr r2, [r1, #0x1c]
- mov r1, #0x8
- str r2, [r0, #0x4]
- bl DC_StoreRange
-_020CFB70:
- add r0, r6, #0x18
- ldr r1, [r4, #0x18]
- add r0, r0, r5, lsl #0x3
- str r0, [r4, #0x18]
- add r0, r6, r5, lsl #0x3
- str r1, [r0, #0x1c]
- str r4, [r0, #0x18]
- bl SNDi_UnlockMutex
- mov r0, r6
- mov r1, #0x3c
- bl DC_StoreRange
- mov r0, r4
- mov r1, #0x3c
- bl DC_StoreRange
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start PXI_Init
-PXI_Init: ; 0x020CFBB0
- ldr ip, _020CFBB8 ; =PXI_InitFifo
- bx r12
- .balign 4
-_020CFBB8: .word PXI_InitFifo
-
- arm_func_start PXIi_HandlerRecvFifoNotEmpty
-PXIi_HandlerRecvFifoNotEmpty: ; 0x020CFBBC
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x8
- ldr sl, _020CFCD4 ; =0x04000184
- ldr r5, _020CFCD8 ; =0x021D5368
- ldr r4, _020CFCDC ; =0x04000188
- mov r7, #0x4100000
- mov r6, #0x0
- mvn r8, #0x3
- mvn r9, #0x2
-_020CFBE0:
- ldrh r0, [r10, #0x0]
- ands r0, r0, #0x4000
- ldrneh r0, [r10, #0x0]
- movne r1, r9
- orrne r0, r0, #0xc000
- strneh r0, [r10, #0x0]
- bne _020CFC28
- bl OS_DisableInterrupts
- ldrh r1, [r10, #0x0]
- ands r1, r1, #0x100
- beq _020CFC18
- bl OS_RestoreInterrupts
- mov r1, r8
- b _020CFC28
-_020CFC18:
- ldr r1, [r7, #0x0]
- str r1, [sp, #0x0]
- bl OS_RestoreInterrupts
- mov r1, r6
-_020CFC28:
- cmp r1, r8
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r10,lr}
- bxeq lr
- mvn r0, #0x2
- cmp r1, r0
- beq _020CFBE0
- ldr r1, [sp, #0x0]
- mov r0, r1, lsl #0x1b
- movs r0, r0, lsr #0x1b
- beq _020CFBE0
- ldr r3, [r5, r0, lsl #0x2]
- cmp r3, #0x0
- beq _020CFC74
- mov r2, r1, lsl #0x1a
- mov r1, r1, lsr #0x6
- mov r2, r2, lsr #0x1f
- blx r3
- b _020CFBE0
-_020CFC74:
- mov r0, r1, lsl #0x1a
- movs r0, r0, lsr #0x1f
- bne _020CFBE0
- orr r0, r1, #0x20
- str r0, [sp, #0x0]
- ldrh r0, [r10, #0x0]
- ands r0, r0, #0x4000
- ldrneh r0, [r10, #0x0]
- orrne r0, r0, #0xc000
- strneh r0, [r10, #0x0]
- bne _020CFBE0
- bl OS_DisableInterrupts
- ldrh r1, [r10, #0x0]
- ands r1, r1, #0x2
- beq _020CFCB8
- bl OS_RestoreInterrupts
- b _020CFBE0
-_020CFCB8:
- ldr r1, [sp, #0x0]
- str r1, [r4, #0x0]
- bl OS_RestoreInterrupts
- b _020CFBE0
-_020CFCC8:
- add sp, sp, #0x8
- ldmia sp!, {r4-r10, lr}
- bx lr
-_020CFCD4: .word 0x04000184
-_020CFCD8: .word 0x021D5368
-_020CFCDC: .word 0x04000188
-
- arm_func_start PXI_SendWordByFifo
-PXI_SendWordByFifo:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [sp, #0x0]
- and r0, r0, #0x1f
- bic r3, r3, #0x1f
- orr r12, r3, r0
- bic r3, r12, #0x20
- and r0, r2, #0x1
- orr r3, r3, r0, lsl #0x5
- str r12, [sp, #0x0]
- and r2, r3, #0x3f
- bic r0, r1, #0xfc000000
- orr r0, r2, r0, lsl #0x6
- str r3, [sp, #0x0]
- ldr r2, _020CFD8C ; =0x04000184
- str r0, [sp, #0x0]
- ldrh r0, [r2, #0x0]
- ands r0, r0, #0x4000
- ldrneh r1, [r2, #0x0]
- addne sp, sp, #0x4
- mvnne r0, #0x0
- orrne r1, r1, #0xc000
- strneh r1, [r2, #0x0]
- ldmneia sp!, {lr}
- bxne lr
- bl OS_DisableInterrupts
- ldr r1, _020CFD8C ; =0x04000184
- ldrh r1, [r1, #0x0]
- ands r1, r1, #0x2
- beq _020CFD6C
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mvn r0, #0x1
- ldmia sp!, {lr}
- bx lr
-_020CFD6C:
- ldr r2, [sp, #0x0]
- ldr r1, _020CFD90 ; =0x04000188
- str r2, [r1, #0x0]
- bl OS_RestoreInterrupts
-_020CFD7C:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020CFD8C: .word 0x04000184
-_020CFD90: .word 0x04000188
-
- arm_func_start PXI_IsCallbackReady
-PXI_IsCallbackReady:
- ldr r2, _020CFDB8 ; =0x027FFC00
- mov r3, #0x1
- add r1, r2, r1, lsl #0x2
- mov r2, r3, lsl r0
- ldr r0, [r1, #0x388]
- ands r0, r2, r0
- moveq r3, #0x0
- mov r0, r3
- bx lr
- .balign 4
-_020CFDB8: .word 0x027FFC00
-
- arm_func_start PXI_SetFifoRecvCallback
-PXI_SetFifoRecvCallback: ; 0x020CFDBC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- mov r5, r1
- bl OS_DisableInterrupts
- ldr r1, _020CFE20 ; =0x021D5368
- cmp r5, #0x0
- str r5, [r1, r4, lsl #0x2]
- beq _020CFDF8
- ldr r3, _020CFE24 ; =0x027FFC00
- mov r1, #0x1
- ldr r2, [r3, #0x388]
- orr r1, r2, r1, lsl r4
- str r1, [r3, #0x388]
- b _020CFE10
-_020CFDF8:
- ldr r3, _020CFE24 ; =0x027FFC00
- mov r1, #0x1
- mvn r1, r1, lsl r4
- ldr r2, [r3, #0x388]
- and r1, r2, r1
- str r1, [r3, #0x388]
-_020CFE10:
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CFE20: .word 0x021D5368
-_020CFE24: .word 0x027FFC00
-
- arm_func_start PXI_InitFifo
-PXI_InitFifo: ; 0x020CFE28
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- ldr r1, _020CFF18 ; =0x021D5364
- mov r4, r0
- ldrh r0, [r1, #0x0]
- cmp r0, #0x0
- bne _020CFF04
- mov r2, #0x1
- ldr r0, _020CFF1C ; =0x027FFC00
- strh r2, [r1, #0x0]
- mov r2, #0x0
- str r2, [r0, #0x388]
- ldr r0, _020CFF20 ; =0x021D5368
- mov r1, r2
-_020CFE64:
- str r1, [r0, r2, lsl #0x2]
- add r2, r2, #0x1
- cmp r2, #0x20
- blt _020CFE64
- ldr r2, _020CFF24 ; =0x0000C408
- ldr r1, _020CFF28 ; =0x04000184
- mov r0, #0x40000
- strh r2, [r1, #0x0]
- bl OS_ResetRequestIrqMask
- ldr r1, _020CFF2C ; =PXIi_HandlerRecvFifoNotEmpty
- mov r0, #0x40000
- bl OS_SetIrqFunction
- mov r0, #0x40000
- bl OS_EnableIrqMask
- mov r12, #0x0
- ldr r3, _020CFF30 ; =0x04000180
- mov r1, r12
- mov r2, #0x3e8
-_020CFEAC:
- ldrh r0, [r3, #0x0]
- ands lr, r0, #0xf
- mov r0, lr, lsl #0x8
- strh r0, [r3, #0x0]
- bne _020CFEC8
- cmp r12, #0x4
- bgt _020CFF04
-_020CFEC8:
- ldrh r0, [r3, #0x0]
- mov r5, r2
- and r0, r0, #0xf
- cmp r0, lr
- bne _020CFEFC
-_020CFEDC:
- cmp r5, #0x0
- movle r12, r1
- ble _020CFEFC
- ldrh r0, [r3, #0x0]
- sub r5, r5, #0x1
- and r0, r0, #0xf
- cmp r0, lr
- beq _020CFEDC
-_020CFEFC:
- add r12, r12, #0x1
- b _020CFEAC
-_020CFF04:
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020CFF18: .word 0x021D5364
-_020CFF1C: .word 0x027FFC00
-_020CFF20: .word 0x021D5368
-_020CFF24: .word 0x0000C408
-_020CFF28: .word 0x04000184
-_020CFF2C: .word PXIi_HandlerRecvFifoNotEmpty
-_020CFF30: .word 0x04000180
-
- arm_func_start FSi_TranslateCommand
-FSi_TranslateCommand:
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- ldr r0, [r8, #0xc]
- mov r7, r1
- mov r1, #0x1
- ldr r5, [r8, #0x8]
- mov r4, r1, lsl r7
- ands r0, r0, #0x4
- moveq r1, #0x0
- cmp r1, #0x0
- ldrne r0, [r5, #0x1c]
- orrne r0, r0, #0x200
- strne r0, [r5, #0x1c]
- ldreq r0, [r5, #0x1c]
- orreq r0, r0, #0x100
- streq r0, [r5, #0x1c]
- ldr r0, [r5, #0x58]
- ands r0, r0, r4
- beq _020CFFE4
- ldr r2, [r5, #0x54]
- mov r0, r8
- mov r1, r7
- blx r2
- mov r6, r0
- cmp r6, #0x8
- addls pc, pc, r6, lsl #0x2
- b _020CFFE8
-_020CFFA0:
- b _020CFFC4
- b _020CFFC4
- b _020CFFE8
- b _020CFFE8
- b _020CFFC4
- b _020CFFE8
- b _020CFFE8
- b _020CFFE8
- b _020CFFCC
-_020CFFC4:
- str r6, [r8, #0x14]
- b _020CFFE8
-_020CFFCC:
- ldr r1, [r5, #0x58]
- mvn r0, r4
- and r0, r1, r0
- str r0, [r5, #0x58]
- mov r6, #0x7
- b _020CFFE8
-_020CFFE4:
- mov r6, #0x7
-_020CFFE8:
- cmp r6, #0x7
- bne _020D0004
- ldr r1, _020D00AC ; =0x02103F80
- mov r0, r8
- ldr r1, [r1, r7, lsl #0x2]
- blx r1
- mov r6, r0
-_020D0004:
- cmp r6, #0x6
- bne _020D0060
- ldr r0, [r8, #0xc]
- ands r0, r0, #0x4
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020D00A0
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x1c]
- mov r4, r0
- ands r0, r1, #0x200
- beq _020D0050
- add r6, r5, #0xc
-_020D003C:
- mov r0, r6
- bl OS_SleepThread
- ldr r0, [r5, #0x1c]
- ands r0, r0, #0x200
- bne _020D003C
-_020D0050:
- mov r0, r4
- ldr r6, [r8, #0x14]
- bl OS_RestoreInterrupts
- b _020D00A0
-_020D0060:
- ldr r0, [r8, #0xc]
- ands r0, r0, #0x4
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- ldrne r0, [r5, #0x1c]
- bicne r0, r0, #0x200
- strne r0, [r5, #0x1c]
- strne r6, [r8, #0x14]
- bne _020D00A0
- ldr r1, [r5, #0x1c]
- mov r0, r8
- bic r2, r1, #0x100
- mov r1, r6
- str r2, [r5, #0x1c]
- bl FSi_ReleaseCommand
-_020D00A0:
- mov r0, r6
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020D00AC: .word 0x02103F80
-
- arm_func_start FSi_ReleaseCommand
-FSi_ReleaseCommand:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x0]
- mov r4, r0
- ldr r0, [r6, #0x4]
- cmp r1, #0x0
- strne r0, [r1, #0x4]
- cmp r0, #0x0
- strne r1, [r0, #0x0]
- mov r0, #0x0
- str r0, [r6, #0x0]
- ldr r1, [r6, #0x0]
- add r0, r6, #0x18
- str r1, [r6, #0x4]
- ldr r1, [r6, #0xc]
- bic r1, r1, #0x4f
- str r1, [r6, #0xc]
- str r5, [r6, #0x14]
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FSi_CloseFileCommand
-FSi_CloseFileCommand: ; 0x020D0114
- mov r0, #0x0
- bx lr
-
- arm_func_start FSi_OpenFileDirectCommand
-FSi_OpenFileDirectCommand: ; 0x020D011C
- ldr r1, [r0, #0x30]
- str r1, [r0, #0x24]
- ldr r1, [r0, #0x30]
- str r1, [r0, #0x2c]
- ldr r1, [r0, #0x34]
- str r1, [r0, #0x28]
- ldr r1, [r0, #0x38]
- str r1, [r0, #0x20]
- mov r0, #0x0
- bx lr
-
- arm_func_start FSi_OpenFileFastCommand
-FSi_OpenFileFastCommand: ; 0x020D0144
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x14
- mov r5, r0
- ldr r1, [r5, #0x8]
- ldr r4, [r5, #0x34]
- ldr r0, [r1, #0x30]
- mov r2, r4, lsl #0x3
- cmp r2, r0
- addcs sp, sp, #0x14
- movcs r0, #0x1
- ldmcsia sp!, {r4-r5,lr}
- bxcs lr
- str r1, [sp, #0x8]
- ldr r1, [r1, #0x2c]
- add r0, sp, #0x8
- add r3, r1, r2
- add r1, sp, #0x0
- mov r2, #0x8
- str r3, [sp, #0xc]
- bl FSi_ReadTable
-_020D0194:
- cmp r0, #0
- addne sp, sp, #0x14
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldr r1, [sp]
- mov r0, r5
- str r1, [r5, #0x30]
- ldr r2, [sp, #0x4]
- mov r1, #7
- str r2, [r5, #0x34]
- str r4, [r5, #0x38]
- bl FSi_TranslateCommand
- add sp, sp, #0x14
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FSi_GetPathCommand
-FSi_GetPathCommand: ; 0x020D01D0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xe4
- mov r4, r0
- ldr r1, [r4, #0x8]
- add r0, sp, #0x98
- add r11, r4, #0x30
- str r1, [sp, #0x0]
- bl FS_InitFile
- ldr r0, [r4, #0x8]
- str r0, [sp, #0xa0]
- ldr r0, [r4, #0xc]
- ands r0, r0, #0x20
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- ldrneh r5, [r4, #0x24]
- movne r4, #0x10000
- bne _020D02BC
- ldrh r0, [r11, #0x8]
- ldr r4, [r4, #0x20]
- cmp r0, #0x0
- ldrneh r5, [r11, #0xa]
- bne _020D02BC
- mov r10, #0x0
- mov r9, r10
- mov r5, #0x10000
- add r8, sp, #0x98
- mov r6, #0x3
- mov r7, #0x1
-_020D0244:
- mov r0, r8
- mov r1, r10
- bl FSi_SeekDirDirect
- add r2, sp, #0x4
- cmp r10, #0x0
- mov r0, r8
- mov r1, r6
- ldreq r9, [sp, #0xc4]
- str r2, [sp, #0xc8]
- str r7, [sp, #0xcc]
- bl FSi_TranslateCommand
-_020D0270:
- cmp r0, #0x0
- bne _020D02A8
-_020D0278:
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- bne _020D0294
- ldr r0, [sp, #0x8]
- cmp r0, r4
- ldreqh r5, [sp, #0xbc]
- beq _020D02A8
-_020D0294:
- mov r0, r8
- mov r1, r6
- bl FSi_TranslateCommand
- cmp r0, #0x0
- beq _020D0278
-_020D02A8:
- cmp r5, #0x10000
- bne _020D02BC
- add sl, sl, #0x1
- cmp sl, r9
- bcc _020D0244
-_020D02BC:
- cmp r5, #0x10000
- moveq r0, #0x0
- streqh r0, [r11, #0x8]
- addeq sp, sp, #0xe4
- moveq r0, #0x1
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldrh r0, [r11, #0x8]
- cmp r0, #0x0
- bne _020D03B8
- ldr r0, [sp, #0x0]
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- cmp r0, #0xff
- addls r9, r1, #0x1
- bls _020D0308
- cmp r0, #0xff00
- addls r9, r1, #0x2
- addhi r9, r1, #0x3
-_020D0308:
- cmp r4, #0x10000
- ldrne r0, [sp, #0x14]
- add r9, r9, #0x2
- addne r9, r9, r0
- mov r10, r5
- cmp r5, #0x0
- beq _020D03AC
- add r0, sp, #0x98
- mov r1, r5
- bl FSi_SeekDirDirect
- add r8, sp, #0x98
- mov r6, #0x3
- mov r7, #0x1
-_020D033C:
- ldr r1, [sp, #0xc4]
- mov r0, r8
- bl FSi_SeekDirDirect
- add r2, sp, #0x4
- mov r0, r8
- mov r1, r6
- str r2, [sp, #0xc8]
- str r7, [sp, #0xcc]
- bl FSi_TranslateCommand
-_020D0360:
- cmp r0, #0x0
- bne _020D03A0
-_020D0368:
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- beq _020D038C
- ldrh r0, [sp, #0x8]
- cmp r0, sl
- ldreq r0, [sp, #0x14]
- addeq r0, r0, #0x1
- addeq r9, r9, r0
- beq _020D03A0
-_020D038C:
- mov r0, r8
- mov r1, r6
- bl FSi_TranslateCommand
- cmp r0, #0x0
- beq _020D0368
-_020D03A0:
- ldrh sl, [sp, #0xbc]
- cmp sl, #0x0
- bne _020D033C
-_020D03AC:
- add r0, r9, #0x1
- strh r0, [r11, #0x8]
- strh r5, [r11, #0xa]
-_020D03B8:
- ldr r7, [r11, #0x0]
- cmp r7, #0x0
- addeq sp, sp, #0xe4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldrh r6, [r11, #0x8]
- ldr r0, [r11, #0x4]
- cmp r0, r6
- addcc sp, sp, #0xe4
- movcc r0, #0x1
- ldmccia sp!, {r4-r11,lr}
- bxcc lr
- ldr r0, [sp, #0x0]
- mov r9, #0x0
- ldr r0, [r0, #0x0]
- cmp r0, #0xff
- movls r8, #0x1
- bls _020D0410
- cmp r0, #0xff00
- movls r8, #0x2
- movhi r8, #0x3
-_020D0410:
- ldr r0, [sp, #0x0]
- mov r1, r7
- mov r2, r8
- bl MI_CpuCopy8
- add r1, r9, r8
- ldr r0, _020D058C ; =0x0210682C
- add r1, r7, r1
- mov r2, #0x2
- bl MI_CpuCopy8
- add r0, sp, #0x98
- mov r1, r5
- bl FSi_SeekDirDirect
- cmp r4, #0x10000
- beq _020D04C4
- add r3, sp, #0x4
- mov r2, #0x0
- add r0, sp, #0x98
- mov r1, #0x3
- str r3, [sp, #0xc8]
- str r2, [sp, #0xcc]
- bl FSi_TranslateCommand
-_020D0464:
- cmp r0, #0x0
- bne _020D04A0
- add r9, sp, #0x98
- mov r8, #0x3
-_020D0474:
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- bne _020D048C
- ldr r0, [sp, #0x8]
- cmp r0, r4
- beq _020D04A0
-_020D048C:
- mov r0, r9
- mov r1, r8
- bl FSi_TranslateCommand
- cmp r0, #0x0
- beq _020D0474
-_020D04A0:
- ldr r0, [sp, #0x14]
- add r1, r7, r6
- add r4, r0, #0x1
- add r0, sp, #0x18
- mov r2, r4
- sub r1, r1, r4
- bl MI_CpuCopy8
- sub r6, r6, r4
- b _020D04D4
-_020D04C4:
- add r0, r7, r6
- mov r1, #0x0
- strb r1, [r0, #-0x1]
- sub r6, r6, #0x1
-_020D04D4:
- cmp r5, #0x0
- beq _020D057C
- add r10, sp, #0x98
- add r11, sp, #0x4
- mov r4, #0x3
- mov r9, #0x0
- mov r8, #0x2f
-_020D04F0:
- ldr r1, [sp, #0xc4]
- mov r0, r10
- bl FSi_SeekDirDirect
- add r2, r7, r6
- mov r0, r10
- mov r1, r4
- str r11, [sp, #0xc8]
- str r9, [sp, #0xcc]
- strb r8, [r2, #-0x1]
- sub r6, r6, #0x1
- bl FSi_TranslateCommand
-_020D051C:
- cmp r0, #0x0
- bne _020D0570
-_020D0524:
- ldr r0, [sp, #0x10]
- cmp r0, #0x0
- beq _020D055C
- ldrh r0, [sp, #0x8]
- cmp r0, r5
- bne _020D055C
- ldr r5, [sp, #0x14]
- add r1, r7, r6
- add r0, sp, #0x18
- mov r2, r5
- sub r1, r1, r5
- bl MI_CpuCopy8
- sub r6, r6, r5
- b _020D0570
-_020D055C:
- mov r0, sl
- mov r1, r4
- bl FSi_TranslateCommand
- cmp r0, #0x0
- beq _020D0524
-_020D0570:
- ldrh r5, [sp, #0xbc]
- cmp r5, #0x0
- bne _020D04F0
-_020D057C:
- mov r0, #0x0
- add sp, sp, #0xe4
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020D058C: .word 0x0210682C
-
- arm_func_start FSi_FindPathCommand
-FSi_FindPathCommand: ; 0x020D0590
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x9c
- mov r10, r0
- ldr r2, [r10, #0x40]
- ldr r9, [r10, #0x3c]
- mov r1, #0x2
- str r2, [sp, #0x0]
- bl FSi_TranslateCommand
- ldrb r1, [r9, #0x0]
- cmp r1, #0x0
- beq _020D0780
- mov r0, #0x2
- add r11, sp, #0x1c
- mov r4, #0x3
- mov r5, #0x1
- mov r6, #0x0
- str r0, [sp, #0x4]
-_020D05D4:
- mov r7, r6
- b _020D05E0
-_020D05DC:
- add r7, r7, #0x1
-_020D05E0:
- ldrb r8, [r9, r7]
- mov r0, r6
- cmp r8, #0x0
- beq _020D0600
- cmp r8, #0x2f
- beq _020D0600
- cmp r8, #0x5c
- movne r0, r5
-_020D0600:
- cmp r0, #0x0
- bne _020D05DC
- cmp r8, #0x0
- bne _020D061C
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- beq _020D0620
-_020D061C:
- mov r8, r5
-_020D0620:
- cmp r7, #0x0
- addeq sp, sp, #0x9c
- moveq r0, #0x1
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- cmp r1, #0x2e
- bne _020D068C
- cmp r7, #0x1
- addeq r9, r9, #0x1
- beq _020D0764
- ldrb r0, [r9, #0x1]
- cmp r7, #0x2
- moveq r1, r5
- movne r1, r6
- cmp r0, #0x2e
- moveq r0, r5
- movne r0, r6
- ands r0, r1, r0
- beq _020D068C
- ldrh r0, [r10, #0x24]
- cmp r0, #0x0
- beq _020D0684
- ldr r1, [r10, #0x2c]
- mov r0, r10
- bl FSi_SeekDirDirect
-_020D0684:
- add r9, r9, #0x2
- b _020D0764
-_020D068C:
- cmp r7, #0x7f
- addgt sp, sp, #0x9c
- movgt r0, #0x1
- ldmgtia sp!, {r4-r11,lr}
- bxgt lr
- add r0, sp, #0x8
- str r0, [r10, #0x30]
- str r6, [r10, #0x34]
-_020D06AC:
- mov r0, r10
- mov r1, r4
- bl FSi_TranslateCommand
-_020D06B8:
- cmp r0, #0x0
- addne sp, sp, #0x9c
- movne r0, #0x1
- ldmneia sp!, {r4-r11,lr}
- bxne lr
- ldr r0, [sp, #0x14]
- cmp r8, r0
- bne _020D06AC
- ldr r0, [sp, #0x18]
- cmp r7, r0
- bne _020D06AC
- mov r0, r9
- mov r1, fp
- mov r2, r7
- bl FSi_StrNICmp
- cmp r0, #0x0
- bne _020D06AC
- cmp r8, #0x0
- beq _020D0728
- add r0, sp, #0x8
- add r3, sl, #0x30
- ldmia r0, {r0, r1, r2}
- stmia r3, {r0, r1, r2}
- ldr r1, [sp, #0x4]
- mov r0, sl
- add r9, r9, r7
- bl FSi_TranslateCommand
- b _020D0764
-_020D0728:
- ldr r0, [sp]
- cmp r0, #0x0
- addne sp, sp, #0x9c
- movne r0, #0x1
- ldmneia sp!, {r4-r11,lr}
- bxne lr
- ldr r3, [sl, #0x44]
- ldr r2, [sp, #0x8]
- ldr r1, [sp, #0xC]
- add sp, sp, #0x9c
- str r2, [r3]
- str r1, [r3, #0x4]
- mov r0, #0x0
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D0764:
- ldrb r0, [r9, #0x0]
- cmp r0, #0x0
- movne r0, r5
- moveq r0, r6
- ldrb r1, [r9, r0]!
- cmp r1, #0x0
- bne _020D05D4
-_020D0780:
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- moveq r0, #0x1
- addne r0, r10, #0x20
- ldrne r3, [r10, #0x44]
- ldmneia r0, {r0-r2}
- stmneia r3, {r0-r2}
- movne r0, #0x0
- add sp, sp, #0x9c
- ldmia sp!, {r4-r11,lr}
- bx lr
-
- arm_func_start FSi_ReadDirCommand
-FSi_ReadDirCommand: ; 0x020D07AC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- ldr r4, [r5, #0x30]
- ldr r1, [r5, #0x8]
- add r0, sp, #0x4
- str r1, [sp, #0x4]
- ldr r3, [r5, #0x28]
- add r1, sp, #0x0
- mov r2, #0x1
- str r3, [sp, #0x8]
- bl FSi_ReadTable
-_020D07DC:
- cmp r0, #0x0
- addne sp, sp, #0xC
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldrb r1, [sp]
- and r2, r1, #0x7F
- mov r1, r1, asr #0x7
- str r2, [r4, #0x10]
- and r1, r1, #0x1
- str r1, [r4, #0xC]
- ldr r2, [r4, #0x10]
- cmp r2, #0x0
- addeq sp, sp, #0xC
- moveq r0, #0x1
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r1, [r5, #0x34]
- cmp r1, #0x0
- bne _020D0858
- add r0, sp, #0x4
- add r1, r4, #0x14
- bl FSi_ReadTable
- cmp r0, #0x0
- addne sp, sp, #0xC
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldr r1, [r4, #0x10]
- mov r2, #0x0
- add r1, r4, r1
- strb r2, [r1, #0x14]
- b _020D0864
-_020D0858:
- ldr r1, [sp, #0x8]
- add r1, r1, r2
- str r1, [sp, #0x8]
-_020D0864:
- ldr r1, [r4, #0xC]
- cmp r1, #0x0
- beq _020D08B8
- add r0, sp, #0x4
- add r1, sp, #0x2
- mov r2, #0x2
- bl FSi_ReadTable
- cmp r0, #0x0
- addne sp, sp, #0xC
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldr r2, [r5, #0x8]
- ldr r1, _020D08E8
- str r2, [r4]
- ldrh r3, [sp, #0x2]
- mov r2, #0x0
- and r1, r3, r1
- strh r1, [r4, #0x4]
- strh r2, [r4, #0x6]
- str r2, [r4, #0x8]
- b _020D08D4
-_020D08B8:
- ldr r1, [r5, #0x8]
- str r1, [r4]
- ldrh r1, [r5, #0x26]
- str r1, [r4, #0x4]
- ldrh r1, [r5, #0x26]
- add r1, r1, #0x1
- strh r1, [r5, #0x26]
-_020D08D4:
- ldr r1, [sp, #0x8]
- str r1, [r5, #0x28]
- add sp, sp, #0xC
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D08E8: .word 0x00000FFF
-
- arm_func_start FSi_SeekDirCommand
-FSi_SeekDirCommand: ; 0x020D08EC
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x10
- mov r6, r0
- ldr r5, [r6, #0x8]
- add r4, r6, #0x30
- str r5, [sp, #0x8]
- ldrh r1, [r4, #0x4]
- ldr r2, [r5, #0x34]
- add r0, sp, #0x8
- add r3, r2, r1, lsl #0x3
- add r1, sp, #0x0
- mov r2, #0x8
- str r3, [sp, #0xc]
- bl FSi_ReadTable
- movs r3, r0
- bne _020D0978
- add r12, r6, #0x20
- ldmia r4, {r0-r2}
- stmia r12, {r0-r2}
- ldrh r0, [r4, #0x6]
- cmp r0, #0x0
- bne _020D0968
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- bne _020D0968
- ldrh r0, [sp, #0x4]
- strh r0, [r6, #0x26]
- ldr r1, [r5, #0x34]
- ldr r0, [sp, #0x0]
- add r0, r1, r0
- str r0, [r6, #0x28]
-_020D0968:
- ldrh r1, [sp, #0x6]
- ldr r0, _020D0988 ; =0x00000FFF
- and r0, r1, r0
- str r0, [r6, #0x2c]
-_020D0978:
- mov r0, r3
- add sp, sp, #0x10
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D0988: .word 0x00000FFF
-
- arm_func_start FSi_WriteFileCommand
-FSi_WriteFileCommand: ; 0x020D098C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x2c]
- ldr r3, [r0, #0x38]
- ldr lr, [r0, #0x8]
- ldr r1, [r0, #0x30]
- add r12, r2, r3
- str r12, [r0, #0x2c]
- ldr r12, [lr, #0x4c]
- mov r0, lr
- blx r12
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FSi_ReadFileCommand
-FSi_ReadFileCommand: ; 0x020D09C4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x2c]
- ldr r3, [r0, #0x38]
- ldr lr, [r0, #0x8]
- ldr r1, [r0, #0x30]
- add r12, r2, r3
- str r12, [r0, #0x2c]
- ldr r12, [lr, #0x48]
- mov r0, lr
- blx r12
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FSi_SeekDirDirect
-FSi_SeekDirDirect: ; 0x020D09FC
- ldr r3, [r0, #0xc]
- mov r2, #0x0
- orr r3, r3, #0x4
- str r3, [r0, #0xc]
- ldr r3, [r0, #0x8]
- ldr ip, _020D0A2C ; =FSi_TranslateCommand
- str r3, [r0, #0x30]
- str r2, [r0, #0x38]
- strh r2, [r0, #0x36]
- strh r1, [r0, #0x34]
- mov r1, #0x2
- bx r12
- .balign 4
-_020D0A2C: .word FSi_TranslateCommand
-
- arm_func_start FSi_ReadTable
-FSi_ReadTable:
- stmdb sp!, {r4-r8,lr}
- mov r7, r0
- ldr r5, [r7, #0x0]
- mov r6, r2
- ldr r2, [r5, #0x1c]
- mov r0, r5
- orr r2, r2, #0x200
- str r2, [r5, #0x1c]
- ldr r2, [r7, #0x4]
- ldr r4, [r5, #0x50]
- mov r3, r6
- blx r4
- cmp r0, #0x0
- beq _020D0A7C
- cmp r0, #0x1
- beq _020D0A7C
- cmp r0, #0x6
- beq _020D0A8C
- b _020D0AC8
-_020D0A7C:
- ldr r1, [r5, #0x1c]
- bic r1, r1, #0x200
- str r1, [r5, #0x1c]
- b _020D0AC8
-_020D0A8C:
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x1c]
- mov r4, r0
- ands r0, r1, #0x200
- beq _020D0AB8
- add r8, r5, #0xc
-_020D0AA4:
- mov r0, r8
- bl OS_SleepThread
- ldr r0, [r5, #0x1c]
- ands r0, r0, #0x200
- bne _020D0AA4
-_020D0AB8:
- mov r0, r4
- bl OS_RestoreInterrupts
- ldr r0, [r5, #0x24]
- ldr r0, [r0, #0x14]
-_020D0AC8:
- ldr r1, [r7, #0x4]
- add r1, r1, r6
- str r1, [r7, #0x4]
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FSi_StrNICmp
-FSi_StrNICmp: ; 0x020D0ADC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r2, #0x0
- mov lr, #0x0
- bls _020D0B30
-_020D0AF0:
- ldrb r12, [r0, lr]
- ldrb r3, [r1, lr]
- sub r12, r12, #0x41
- cmp r12, #0x19
- sub r3, r3, #0x41
- addls r12, r12, #0x20
- cmp r3, #0x19
- addls r3, r3, #0x20
- cmp r12, r3
- addne sp, sp, #0x4
- subne r0, r12, r3
- ldmneia sp!, {lr}
- bxne lr
- add lr, lr, #0x1
- cmp lr, r2
- blo _020D0AF0
-_020D0B30:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FS_NotifyArchiveAsyncEnd
-FS_NotifyArchiveAsyncEnd: ; 0x020D0B40
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- ldr r0, [r4, #0x1c]
- mov r6, r1
- ands r0, r0, #0x100
- beq _020D0B8C
- ldr r2, [r4, #0x1c]
- ldr r0, [r4, #0x24]
- bic r2, r2, #0x100
- str r2, [r4, #0x1c]
- bl FSi_ReleaseCommand
- mov r0, r4
- bl FSi_NextCommand
-_020D0B74:
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- bl FSi_ExecuteAsyncCommand
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D0B8C:
- ldr r5, [r4, #0x24]
- bl OS_DisableInterrupts
- str r6, [r5, #0x14]
- ldr r1, [r4, #0x1c]
- mov r5, r0
- bic r1, r1, #0x200
- add r0, r4, #0xc
- str r1, [r4, #0x1c]
- bl OS_WakeupThread
- mov r0, r5
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FS_SetArchiveProc
-FS_SetArchiveProc: ; 0x020D0BC0
- cmp r2, #0x0
- moveq r1, #0x0
- beq _020D0BD4
- cmp r1, #0x0
- moveq r2, #0x0
-_020D0BD4:
- str r1, [r0, #0x54]
- str r2, [r0, #0x58]
- bx lr
-
- arm_func_start FS_ResumeArchive
-FS_ResumeArchive:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r0
- mov r6, #0x0
- bl OS_DisableInterrupts
- ldr r1, [r4, #0x1c]
- mov r5, r0
- ands r0, r1, #0x8
- movne r0, #0x1
- moveq r0, r6
- cmp r0, #0x0
- moveq r7, #0x1
- movne r7, #0x0
- cmp r7, #0x0
- bne _020D0C34
- ldr r1, [r4, #0x1c]
- mov r0, r4
- bic r1, r1, #0x8
- str r1, [r4, #0x1c]
- bl FSi_NextCommand
- mov r6, r0
-_020D0C34:
- mov r0, r5
- bl OS_RestoreInterrupts
-_020D0C3C:
- cmp r6, #0x0
- beq _020D0C4C
- mov r0, r6
- bl FSi_ExecuteAsyncCommand
-_020D0C4C:
- mov r0, r7
- add sp, sp, #0x4
- ldmia sp!, {r4-r7, lr}
- bx lr
-
- arm_func_start FS_SuspendArchive
-FS_SuspendArchive: ; 0x020D0C5C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x1c]
- mov r4, r0
- ands r0, r1, #0x8
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- moveq r5, #0x1
- movne r5, #0x0
- cmp r5, #0x0
- beq _020D0CD4
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x10
- beq _020D0CC8
- ldr r0, [r6, #0x1c]
- orr r0, r0, #0x40
- str r0, [r6, #0x1c]
- add r7, r6, #0x14
-_020D0CB0:
- mov r0, r7
- bl OS_SleepThread
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x40
- bne _020D0CB0
- b _020D0CD4
-_020D0CC8:
- ldr r0, [r6, #0x1c]
- orr r0, r0, #0x8
- str r0, [r6, #0x1c]
-_020D0CD4:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r5
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FS_UnloadArchiveTables
-FS_UnloadArchiveTables: ; 0x020D0CEC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, [r5, #0x1c]
- mov r4, #0x0
- ands r0, r0, #0x2
- movne r0, #0x1
- moveq r0, r4
- cmp r0, #0x0
- beq _020D0D74
- mov r0, r5
- bl FS_SuspendArchive
- ldr r1, [r5, #0x1c]
- ands r1, r1, #0x4
- movne r1, #0x1
- moveq r1, #0x0
- cmp r1, #0x0
- beq _020D0D64
- ldr r2, [r5, #0x1c]
- mov r1, #0x0
- bic r2, r2, #0x4
- str r2, [r5, #0x1c]
- ldr r4, [r5, #0x44]
- str r1, [r5, #0x44]
- ldr r1, [r5, #0x3c]
- str r1, [r5, #0x2c]
- ldr r1, [r5, #0x40]
- str r1, [r5, #0x34]
- ldr r1, [r5, #0x48]
- str r1, [r5, #0x50]
-_020D0D64:
- cmp r0, #0x0
- beq _020D0D74
- mov r0, r5
- bl FS_ResumeArchive
-_020D0D74:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_020D0D84
-FUN_020D0D84: ; 0x020D0D84
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4c
- mov r7, r0
- ldr r3, [r7, #0x30]
- ldr r0, [r7, #0x38]
- mov r6, r1
- add r0, r3, r0
- add r0, r0, #0x20
- add r0, r0, #0x1f
- bic r5, r0, #0x1f
- cmp r5, r2
- bhi _020D0E9C
- add r1, r6, #0x1f
- add r0, sp, #0x4
- bic r4, r1, #0x1f
- bl FS_InitFile
- ldr r2, [r7, #0x2c]
- mvn r0, #0x0
- str r0, [sp, #0x0]
- ldr r3, [r7, #0x30]
- add r0, sp, #0x4
- mov r1, r7
- add r3, r2, r3
- bl FS_OpenFileDirect
-_020D0DE4:
- cmp r0, #0x0
- beq _020D0E1C
- ldr r2, [r7, #0x30]
- add r0, sp, #0x4
- mov r1, r4
- bl FS_ReadFile
- cmp r0, #0x0
- bge _020D0E14
- ldr r2, [r7, #0x30]
- mov r0, r4
- mov r1, #0x0
- bl MI_CpuFill8
-_020D0E14:
- add r0, sp, #0x4
- bl FS_CloseFile
-_020D0E1C:
- str r4, [r7, #0x2C]
- ldr ip, [r7, #0x30]
- ldr r2, [r7, #0x34]
- mvn r0, #0x0
- str r0, [sp]
- ldr r3, [r7, #0x38]
- add r0, sp, #0x4
- mov r1, r7
- add r3, r2, r3
- add r4, r4, ip
- bl FS_OpenFileDirect
- cmp r0, #0x0
- beq _020D0E80
- ldr r2, [r7, #0x38]
- add r0, sp, #0x4
- mov r1, r4
- bl FS_ReadFile
- cmp r0, #0x0
- bge _020D0E78
- ldr r2, [r7, #0x38]
- mov r0, r4
- mov r1, #0x0
- bl MI_CpuFill8
-_020D0E78:
- add r0, sp, #0x4
- bl FS_CloseFile
-_020D0E80:
- str r4, [r7, #0x34]
- ldr r0, _020D0EAC
- str r6, [r7, #0x44]
- str r0, [r7, #0x50]
- ldr r0, [r7, #0x1C]
- orr r0, r0, #0x4
- str r0, [r7, #0x1C]
-_020D0E9C:
- mov r0, r5
- add sp, sp, #0x4C
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D0EAC:
- .word FSi_ReadMemoryCore
-
- arm_func_start FUN_020D0EB0
-FUN_020D0EB0: ; 0x020D0EB0
- stmdb sp!, {r4-r8,lr}
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, [r5, #0x1c]
- mov r4, r0
- ands r0, r1, #0x2
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020D0F64
- mov r0, r5
- ldr r1, [r5, #0x1c]
- bl FS_SuspendArchive
- ldr r1, [r5, #0x1c]
- mov r7, r0
- orr r0, r1, #0x80
- str r0, [r5, #0x1c]
- ldr r0, [r5, #0x24]
- cmp r0, #0x0
- beq _020D0F1C
- mov r6, #0x3
-_020D0F04:
- ldr r8, [r0, #0x4]
- mov r1, r6
- bl FSi_ReleaseCommand
- mov r0, r8
- cmp r8, #0x0
- bne _020D0F04
-_020D0F1C:
- mov r0, #0x0
- str r0, [r5, #0x24]
- cmp r7, #0x0
- beq _020D0F34
- mov r0, r5
- bl FS_ResumeArchive
-_020D0F34:
- mov r0, #0x0
- str r0, [r5, #0x28]
- str r0, [r5, #0x2c]
- str r0, [r5, #0x30]
- str r0, [r5, #0x34]
- str r0, [r5, #0x38]
- str r0, [r5, #0x40]
- ldr r0, [r5, #0x40]
- str r0, [r5, #0x3c]
- ldr r0, [r5, #0x1c]
- bic r0, r0, #0xa2
- str r0, [r5, #0x1c]
-_020D0F64:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FS_LoadArchive
-FS_LoadArchive: ; 0x020D0F78
- str r1, [r0, #0x28]
- str r3, [r0, #0x30]
- str r2, [r0, #0x3c]
- ldr r1, [r0, #0x3c]
- ldr r2, [sp, #0x4]
- str r1, [r0, #0x2c]
- str r2, [r0, #0x38]
- ldr r1, [sp, #0x0]
- ldr r2, [sp, #0x8]
- str r1, [r0, #0x40]
- ldr r1, [r0, #0x40]
- cmp r2, #0x0
- str r1, [r0, #0x34]
- ldreq r2, _020D0FE8 ; =FSi_ReadMemCallback
- ldr r1, [sp, #0xc]
- str r2, [r0, #0x48]
- cmp r1, #0x0
- ldreq r1, _020D0FEC ; =FSi_WriteMemCallback
- str r1, [r0, #0x4c]
- ldr r2, [r0, #0x48]
- mov r1, #0x0
- str r2, [r0, #0x50]
- str r1, [r0, #0x44]
- ldr r1, [r0, #0x1c]
- orr r1, r1, #0x2
- str r1, [r0, #0x1c]
- mov r0, #0x1
- bx lr
- .balign 4
-_020D0FE8: .word FSi_ReadMemCallback
-_020D0FEC: .word FSi_WriteMemCallback
-
- arm_func_start FUN_020D0FF0
-FUN_020D0FF0: ; 0x020D0FF0
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- bl OS_DisableInterrupts
- ldr r2, [r4, #0x4]
- mov r3, #0x0
- cmp r2, #0x0
- ldrne r1, [r4, #0x8]
- strne r1, [r2, #0x8]
- ldr r2, [r4, #0x8]
- cmp r2, #0x0
- ldrne r1, [r4, #0x4]
- strne r1, [r2, #0x4]
- str r3, [r4, #0x0]
- str r3, [r4, #0x8]
- ldr r1, [r4, #0x8]
- ldr r2, _020D1080 ; =0x021D53EC
- str r1, [r4, #0x4]
- ldr r1, [r4, #0x1c]
- bic r1, r1, #0x1
- str r1, [r4, #0x1c]
- ldr r1, [r2, #0x0]
- cmp r1, r4
- bne _020D1074
- ldr r1, _020D1084 ; =0x021D53E8
- str r3, [r2, #0x8]
- ldr r1, [r1, #0x0]
- strh r3, [r2, #0x6]
- str r1, [r2, #0x0]
- strh r3, [r2, #0x4]
-_020D1074:
- bl OS_RestoreInterrupts
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020D1080: .word 0x021D53EC
-_020D1084: .word 0x021D53E8
-
- arm_func_start FS_RegisterArchiveName
-FS_RegisterArchiveName: ; 0x020D1088
- stmdb sp!, {r4-r8,lr}
- mov r6, r1
- mov r5, r2
- mov r7, r0
- mov r8, #0x0
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, r6
- mov r1, r5
- bl FS_FindArchive
-_020D10B0:
- cmp r0, #0x0
- bne _020D112C
- ldr r1, _020D1140
- ldr r2, [r1]
- cmp r2, #0x0
- bne _020D10E8
- ldr r0, _020D1144
- mov r2, r8
- str r7, [r1]
- str r7, [r0]
- str r2, [r0, #0x8]
- strh r2, [r0, #0x6]
- strh r2, [r0, #0x4]
- b _020D110C
-_020D10E8:
- ldr r0, [r2, #0x4]
- cmp r0, #0x0
- beq _020D1104
-_020D10F4:
- mov r2, r0
- ldr r0, [r0, #0x4]
- cmp r0, #0x0
- bne _020D10F4
-_020D1104:
- str r7, [r2, #0x4]
- str r2, [r7, #0x8]
-_020D110C:
- mov r0, r6
- mov r1, r5
- bl FSi_GetPackedName
- str r0, [r7]
- ldr r0, [r7, #0x1C]
- mov r8, #0x1
- orr r0, r0, #0x1
- str r0, [r7, #0x1C]
-_020D112C:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r8
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020D1140: .word 0x021D53E8
-_020D1144: .word 0x021D53EC
-
- arm_func_start FS_FindArchive
-FS_FindArchive:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl FSi_GetPackedName
- mov r5, r0
- bl OS_DisableInterrupts
- ldr r1, _020D1194 ; =0x021D53E8
- ldr r4, [r1, #0x0]
- b _020D116C
-_020D1168:
- ldr r4, [r4, #0x4]
-_020D116C:
- cmp r4, #0x0
- beq _020D1180
- ldr r1, [r4, #0x0]
- cmp r1, r5
- bne _020D1168
-_020D1180:
- bl OS_RestoreInterrupts
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D1194: .word 0x021D53E8
-
- arm_func_start FS_InitArchive
-FS_InitArchive: ; 0x020D1198
- stmdb sp!, {r4,lr}
- mov r1, #0x0
- mov r2, #0x5c
- mov r4, r0
- bl MI_CpuFill8
- mov r1, #0x0
- str r1, [r4, #0x10]
- ldr r0, [r4, #0x10]
- str r0, [r4, #0xc]
- str r1, [r4, #0x18]
- ldr r0, [r4, #0x18]
- str r0, [r4, #0x14]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FSi_SendCommand
-FSi_SendCommand:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r6, [r7, #0x8]
- mov r2, #0x1
- str r1, [r7, #0x10]
- mov r0, #0x2
- str r0, [r7, #0x14]
- ldr r0, [r7, #0xc]
- mov r5, r2, lsl r1
- orr r0, r0, #0x1
- str r0, [r7, #0xc]
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x1c]
- mov r4, r0
- ands r0, r1, #0x80
- beq _020D1238
- mov r0, r7
- mov r1, #0x3
- bl FSi_ReleaseCommand
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D1238:
- ands r0, r5, #0x1fc
- ldrne r0, [r7, #0xc]
- add r2, r6, #0x20
- orrne r0, r0, #0x4
- strne r0, [r7, #0xc]
- ldr r1, [r7, #0x0]
- ldr r0, [r7, #0x4]
- cmp r1, #0x0
- strne r0, [r1, #0x4]
- cmp r0, #0x0
- strne r1, [r0, #0x0]
- ldr r0, [r2, #0x4]
- cmp r0, #0x0
- beq _020D1280
-_020D1270:
- mov r2, r0
- ldr r0, [r0, #0x4]
- cmp r0, #0x0
- bne _020D1270
-_020D1280:
- str r7, [r2, #0x4]
- str r2, [r7, #0x0]
- mov r1, #0x0
- str r1, [r7, #0x4]
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x8
- movne r1, #0x1
- cmp r1, #0x0
- bne _020D132C
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x10
- bne _020D132C
- ldr r1, [r6, #0x1c]
- mov r0, r4
- orr r1, r1, #0x10
- str r1, [r6, #0x1c]
- bl OS_RestoreInterrupts
- ldr r0, [r6, #0x58]
- ands r0, r0, #0x200
- beq _020D12E0
- ldr r2, [r6, #0x54]
- mov r0, r7
- mov r1, #0x9
- blx r2
-_020D12E0:
- bl OS_DisableInterrupts
- ldr r1, [r7, #0xc]
- orr r1, r1, #0x40
- str r1, [r7, #0xc]
- ldr r1, [r7, #0xc]
- ands r1, r1, #0x4
- movne r1, #0x1
- moveq r1, #0x0
- cmp r1, #0x0
- bne _020D1324
- bl OS_RestoreInterrupts
- mov r0, r7
- bl FSi_ExecuteAsyncCommand
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D1324:
- bl OS_RestoreInterrupts
- b _020D1378
-_020D132C:
- ldr r0, [r7, #0xc]
- ands r0, r0, #0x4
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- bne _020D135C
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D135C:
- add r0, r7, #0x18
- bl OS_SleepThread
- ldr r0, [r7, #0xc]
- ands r0, r0, #0x40
- beq _020D135C
- mov r0, r4
- bl OS_RestoreInterrupts
-_020D1378:
- mov r0, r7
- bl FSi_ExecuteSyncCommand
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FSi_ExecuteSyncCommand
-FSi_ExecuteSyncCommand: ; 0x020D138C
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0x10]
- bl FSi_TranslateCommand
- mov r1, r0
- mov r0, r4
- bl FSi_ReleaseCommand
- ldr r0, [r4, #0x8]
- bl FSi_NextCommand
-_020D13B0:
- cmp r0, #0x0
- beq _020D13BC
- bl FSi_ExecuteAsyncCommand
-_020D13BC:
- ldr r0, [r4, #0x14]
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FSi_ExecuteAsyncCommand
-FSi_ExecuteAsyncCommand: ; 0x020D13D4
- stmdb sp!, {r4-r8,lr}
- movs r6, r0
- ldr r5, [r6, #0x8]
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r7, #0x0
- mov r8, #0x1
-_020D13F0:
- bl OS_DisableInterrupts
- ldr r1, [r6, #0xc]
- mov r4, r0
- orr r0, r1, #0x40
- str r0, [r6, #0xc]
- ldr r0, [r6, #0xc]
- ands r0, r0, #0x4
- movne r0, r8
- moveq r0, r7
- cmp r0, #0x0
- beq _020D1434
- add r0, r6, #0x18
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020D1434:
- ldr r1, [r6, #0xc]
- mov r0, r4
- orr r1, r1, #0x8
- str r1, [r6, #0xc]
- bl OS_RestoreInterrupts
- ldr r1, [r6, #0x10]
- mov r0, r6
- bl FSi_TranslateCommand
- cmp r0, #0x6
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r0, r5
- bl FSi_NextCommand
- movs r6, r0
- bne _020D13F0
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FSi_NextCommand
-FSi_NextCommand:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4c
- mov r6, r0
- bl OS_DisableInterrupts
- ldr r1, [r6, #0x1c]
- mov r5, r0
- ands r0, r1, #0x20
- beq _020D1500
- ldr r0, [r6, #0x1c]
- bic r0, r0, #0x20
- str r0, [r6, #0x1c]
- ldr r0, [r6, #0x24]
- cmp r0, #0x0
- beq _020D1500
- mov r8, #0x0
- mov r9, #0x1
- mov r7, #0x3
-_020D14BC:
- ldr r1, [r0, #0xc]
- ldr r4, [r0, #0x4]
- ands r1, r1, #0x2
- movne r1, r9
- moveq r1, r8
- cmp r1, #0x0
- beq _020D14F4
- ldr r1, [r6, #0x24]
- cmp r1, r0
- mov r1, r7
- streq r4, [r6, #0x24]
- bl FSi_ReleaseCommand
-_020D14EC:
- cmp r4, #0x0
- ldreq r4, [r6, #0x24]
-_020D14F4:
- mov r0, r4
- cmp r4, #0x0
- bne _020D14BC
-_020D1500:
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x40
- bne _020D15EC
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x8
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- bne _020D15EC
- ldr r4, [r6, #0x24]
- cmp r4, #0x0
- beq _020D15EC
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x10
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- moveq r7, #0x1
- movne r7, #0x0
- cmp r7, #0x0
- ldrne r0, [r6, #0x1c]
- orrne r0, r0, #0x10
- strne r0, [r6, #0x1c]
- mov r0, r5
- bl OS_RestoreInterrupts
-_020D1564:
- cmp r7, #0x0
- beq _020D1588
- ldr r0, [r6, #0x58]
- ands r0, r0, #0x200
- beq _020D1588
- ldr r2, [r6, #0x54]
- mov r0, r4
- mov r1, #0x9
- blx r2
-_020D1588:
- bl OS_DisableInterrupts
- ldr r1, [r4, #0xC]
- mov r5, r0
- orr r0, r1, #0x40
- str r0, [r4, #0xC]
- ldr r0, [r4, #0xC]
- ands r0, r0, #0x4
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020D15D4
- add r0, r4, #0x18
- bl OS_WakeupThread
- mov r0, r5
- bl OS_RestoreInterrupts
- add sp, sp, #0x4c
- mov r0, #0x0
- ldmia sp!, {r4-r9, lr}
- bx lr
-_020D15D4:
- mov r0, r5
- bl OS_RestoreInterrupts
- add sp, sp, #0x4c
- mov r0, r4
- ldmia sp!, {r4-r9, lr}
- bx lr
-_020D15EC:
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x10
- beq _020D162C
- ldr r0, [r6, #0x1c]
- bic r0, r0, #0x10
- str r0, [r6, #0x1c]
- ldr r0, [r6, #0x58]
- ands r0, r0, #0x400
- beq _020D162C
- add r0, sp, #0x0
- bl FS_InitFile
- str r6, [sp, #0x8]
- ldr r2, [r6, #0x54]
- add r0, sp, #0x0
- mov r1, #0xa
- blx r2
-_020D162C:
- ldr r0, [r6, #0x1c]
- ands r0, r0, #0x40
- beq _020D1658
- ldr r1, [r6, #0x1c]
- add r0, r6, #0x14
- bic r1, r1, #0x40
- str r1, [r6, #0x1c]
- ldr r1, [r6, #0x1c]
- orr r1, r1, #0x8
- str r1, [r6, #0x1c]
- bl OS_WakeupThread
-_020D1658:
- mov r0, r5
- bl OS_RestoreInterrupts
-_020D1660:
- mov r0, #0x0
- add sp, sp, #0x4c
- ldmia sp!, {r4-r9, lr}
- bx lr
-
- arm_func_start FSi_ReadMemoryCore
-FSi_ReadMemoryCore: ; 0x020D1670
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r0, r2
- mov r2, r3
- bl MI_CpuCopy8
-_020D1684:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start FSi_WriteMemCallback
-FSi_WriteMemCallback: ; 0x020D1694
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r12, [r0, #0x28]
- mov r0, r1
- add r1, r12, r2
- mov r2, r3
- bl MI_CpuCopy8
-_020D16B0:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start FSi_ReadMemCallback
-FSi_ReadMemCallback: ; 0x020D16C0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x28]
- add r0, r0, r2
- mov r2, r3
- bl MI_CpuCopy8
-_020D16D8:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start FSi_GetPackedName
-FSi_GetPackedName: ; 0x020D16E8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x3
- mov lr, #0x0
- bgt _020D173C
- mov r12, lr
- cmp r1, #0x0
- ble _020D173C
- mov r3, lr
-_020D170C:
- ldrb r2, [r0, r12]
- cmp r2, #0x0
- beq _020D173C
- sub r2, r2, #0x41
- cmp r2, #0x19
- addls r2, r2, #0x61
- addhi r2, r2, #0x41
- add r12, r12, #0x1
- orr lr, lr, r2, lsl r3
- cmp r12, r1
- add r3, r3, #0x8
- blt _020D170C
-_020D173C:
- mov r0, lr
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FS_ChangeDir
-FS_ChangeDir: ; 0x020D174C
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x58
- mov r4, r0
- add r0, sp, #0xc
- bl FS_InitFile
- add r0, sp, #0xc
- add r3, sp, #0x0
- mov r1, r4
- mov r2, #0x0
- bl FSi_FindPath
-_020D1774:
- cmp r0, #0x0
- moveq r0, #0x0
- addne r0, sp, #0x0
- ldrne r3, _020D179C
- ldmneia r0, {r0, r1, r2}
- stmneia r3, {r0, r1, r2}
- movne r0, #0x1
- add sp, sp, #0x58
- ldmia sp!, {r4, lr}
- bx lr
-_020D179C: .word 0x021D53EC
-
- arm_func_start FS_SeekFile
-FS_SeekFile: ; 0x020D17A0
- cmp r2, #0x0
- beq _020D17BC
- cmp r2, #0x1
- beq _020D17C8
- cmp r2, #0x2
- beq _020D17D4
- b _020D17E0
-_020D17BC:
- ldr r2, [r0, #0x24]
- add r1, r1, r2
- b _020D17E8
-_020D17C8:
- ldr r2, [r0, #0x2c]
- add r1, r1, r2
- b _020D17E8
-_020D17D4:
- ldr r2, [r0, #0x28]
- add r1, r1, r2
- b _020D17E8
-_020D17E0:
- mov r0, #0x0
- bx lr
-_020D17E8:
- ldr r2, [r0, #0x24]
- cmp r1, r2
- movlt r1, r2
- ldr r2, [r0, #0x28]
- cmp r1, r2
- movgt r1, r2
- str r1, [r0, #0x2c]
- mov r0, #0x1
- bx lr
-
- arm_func_start FS_ReadFile
-FS_ReadFile: ; 0x020D180C
- ldr ip, _020D1818 ; =FUN_020D1AAC
- mov r3, #0x0
- bx r12
- .balign 4
-_020D1818: .word FUN_020D1AAC
-
- arm_func_start FS_ReadFileAsync
-FS_ReadFileAsync: ; 0x020D181C
- ldr ip, _020D1828 ; =FUN_020D1AAC
- mov r3, #0x1
- bx r12
- .balign 4
-_020D1828: .word FUN_020D1AAC
-
- arm_func_start FS_WaitAsync
-FS_WaitAsync: ; 0x020D182C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, #0x0
- bl OS_DisableInterrupts
- ldr r1, [r6, #0xc]
- mov r4, r0
- ands r0, r1, #0x1
- movne r0, #0x1
- moveq r0, r5
- cmp r0, #0x0
- beq _020D18BC
- ldr r0, [r6, #0xc]
- ands r0, r0, #0x44
- moveq r5, #0x1
- movne r5, #0x0
- cmp r5, #0x0
- beq _020D189C
- ldr r0, [r6, #0xc]
- orr r0, r0, #0x4
- str r0, [r6, #0xc]
- add r7, r6, #0x18
-_020D1884:
- mov r0, r7
- bl OS_SleepThread
- ldr r0, [r6, #0xc]
- ands r0, r0, #0x40
- beq _020D1884
- b _020D18BC
-_020D189C:
- add r0, r6, #0x18
- bl OS_SleepThread
- ldr r0, [r6, #0xc]
- ands r0, r0, #0x1
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- bne _020D189C
-_020D18BC:
- mov r0, r4
- bl OS_RestoreInterrupts
-_020D18C4:
- cmp r5, #0x0
- beq _020D18E0
- mov r0, r6
- bl FSi_ExecuteSyncCommand
- add sp, sp, #4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D18E0:
- ldr r0, [r6, #0x14]
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FS_CloseFile
-FS_CloseFile: ; 0x020D18FC
- stmdb sp!, {r4,lr}
- mov r1, #0x8
- mov r4, r0
- bl FSi_SendCommand
-_020D190C:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r0, #0x0
- str r0, [r4, #0x8]
- mov r0, #0xE
- str r0, [r4, #0x10]
- ldr r1, [r4, #0xC]
- mov r0, #0x1
- bic r1, r1, #0x30
- str r1, [r4, #0xC]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FS_OpenFile
-FS_OpenFile: ; 0x020D1944
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- mov r4, r0
- add r0, sp, #0x0
- bl FS_ConvertPathToFileID
-_020D1958:
- cmp r0, #0x0
- beq _020D1984
- add r1, sp, #0x0
- mov r0, r4
- ldmia r1, {r1, r2}
- bl FS_OpenFileFast
- cmp r0, #0x0
- addne sp, sp, #0x8
- movne r0, #0x1
- ldmneia sp!, {r4, lr}
- bxne lr
-_020D1984:
- mov r0, #0x0
- add sp, sp, #0x8
- ldmia sp!, {r4, lr}
- bx lr
-
- arm_func_start FS_OpenFileFast
-FS_OpenFileFast:
- stmdb sp!, {r0-r3}
- stmdb sp!, {r4,lr}
- ldr r1, [sp, #0xc]
- mov r4, r0
- cmp r1, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- addeq sp, sp, #0x10
- bxeq lr
- str r1, [r4, #0x8]
- ldr r3, [sp, #0xc]
- ldr r2, [sp, #0x10]
- mov r1, #0x6
- str r3, [r4, #0x30]
- str r2, [r4, #0x34]
- bl FSi_SendCommand
-_020D19D4:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4, lr}
- addeq sp, sp, #0x10
- bxeq lr
- ldr r1, [r4, #0xC]
- mov r0, #0x1
- orr r1, r1, #0x10
- str r1, [r4, #0xC]
- ldr r1, [r4, #0xC]
- bic r1, r1, #0x20
- str r1, [r4, #0xC]
- ldmia sp!, {r4, lr}
- add sp, sp, #0x10
- bx lr
-
- arm_func_start FS_OpenFileDirect
-FS_OpenFileDirect:
- stmdb sp!, {r4,lr}
- mov r4, r0
- str r1, [r4, #0x8]
- ldr r12, [sp, #0x8]
- mov r1, #0x7
- str r12, [r4, #0x38]
- str r2, [r4, #0x30]
- str r3, [r4, #0x34]
- bl FSi_SendCommand
-_020D1A34:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4, lr}
- bxeq lr
- ldr r1, [r4, #0xC]
- mov r0, #0x1
- orr r1, r1, #0x10
- str r1, [r4, #0xC]
- ldr r1, [r4, #0xC]
- bic r1, r1, #0x20
- str r1, [r4, #0xC]
- ldmia sp!, {r4, lr}
- bx lr
-
- arm_func_start FS_ConvertPathToFileID
-FS_ConvertPathToFileID:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4c
- mov r5, r0
- add r0, sp, #0x0
- mov r4, r1
- bl FS_InitFile
-_020D1A80:
- add r0, sp, #0x0
- mov r1, r4
- mov r2, r5
- mov r3, #0x0
- bl FSi_FindPath
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4C
- ldmia sp!, {r4-r5, lr}
- bx lr
-
- arm_func_start FUN_020D1AAC
-FUN_020D1AAC: ; 0x020D1AAC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r4, [r7, #0x2c]
- ldr r0, [r7, #0x28]
- mov r6, r2
- str r1, [r7, #0x30]
- sub r0, r0, r4
- cmp r6, r0
- movgt r6, r0
- cmp r6, #0x0
- movlt r6, #0x0
- str r2, [r7, #0x34]
- mov r5, r3
- str r6, [r7, #0x38]
- cmp r5, #0x0
- ldreq r0, [r7, #0xc]
- mov r1, #0x0
- orreq r0, r0, #0x4
- streq r0, [r7, #0xc]
- mov r0, r7
- bl FSi_SendCommand
-_020D1B04:
- cmp r5, #0x0
- bne _020D1B24
- mov r0, r7
- bl FS_WaitAsync
- cmp r0, #0x0
- ldrne r0, [r7, #0x2C]
- subne r6, r0, r4
- mvneq r6, #0x0
-_020D1B24:
- mov r0, r6
- add sp, sp, #0x4
- ldmia sp!, {r4-r7, lr}
- bx lr
-
- arm_func_start FSi_FindPath
-FSi_FindPath:
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- mov r7, r1
- ldrb r1, [r7, #0x0]
- mov r8, r0
- mov r6, r2
- mov r5, r3
- cmp r1, #0x2f
- beq _020D1B60
- cmp r1, #0x5c
- bne _020D1B84
-_020D1B60:
- ldr r0, _020D1C90 ; =0x021D53EC
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- strh r1, [sp, #0x4]
- str r0, [sp, #0x0]
- str r1, [sp, #0x8]
- strh r1, [sp, #0x6]
- add r7, r7, #0x1
- b _020D1C40
-_020D1B84:
- ldr r0, _020D1C90 ; =0x021D53EC
- add r3, sp, #0x0
- ldmia r0, {r0-r2}
- stmia r3, {r0-r2}
- mov r4, #0x0
-_020D1B98:
- ldrb r0, [r7, r4]
- cmp r0, #0x0
- beq _020D1C40
- cmp r0, #0x2f
- beq _020D1C40
- cmp r0, #0x5c
- beq _020D1C40
- cmp r0, #0x3a
- bne _020D1C34
- mov r0, r7
- mov r1, r4
- bl FS_FindArchive
-_020D1BC8:
- cmp r0, #0x0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldr r1, [r0, #0x1C]
- ands r1, r1, #0x2
- movne r1, #0x1
- moveq r1, #0x0
- cmp r1, #0x0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r1, #0x0
- str r0, [sp]
- str r1, [sp, #0x8]
- strh r1, [sp, #0x6]
- strh r1, [sp, #0x4]
- add r0, r4, #0x1
- ldrb r0, [r7, r0]!
- cmp r0, #0x2f
- beq _020D1C2C
- cmp r0, #0x5c
- bne _020D1C40
-_020D1C2C:
- add r7, r7, #0x1
- b _020D1C40
-_020D1C34:
- add r4, r4, #0x1
- cmp r4, #0x3
- ble _020D1B98
-_020D1C40:
- ldr r1, [sp, #0x0]
- add r0, sp, #0x0
- str r1, [r8, #0x8]
- str r7, [r8, #0x3c]
- add r3, r8, #0x30
- ldmia r0, {r0-r2}
- stmia r3, {r0-r2}
- cmp r5, #0x0
- movne r0, #0x1
- strne r0, [r8, #0x40]
- strne r5, [r8, #0x44]
- moveq r0, #0x0
- streq r0, [r8, #0x40]
- mov r0, r8
- mov r1, #0x4
- streq r6, [r8, #0x44]
- bl FSi_SendCommand
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020D1C90: .word 0x021D53EC
-
- arm_func_start FS_InitFile
-FS_InitFile:
- mov r3, #0x0
- str r3, [r0, #0x0]
- ldr r2, [r0, #0x0]
- mov r1, #0xe
- str r2, [r0, #0x4]
- str r3, [r0, #0x1c]
- ldr r2, [r0, #0x1c]
- str r2, [r0, #0x18]
- str r3, [r0, #0x8]
- str r1, [r0, #0x10]
- str r3, [r0, #0xc]
- bx lr
-
- arm_func_start FS_IsAvailable
-FS_IsAvailable: ; 0x020D1CC4
- ldr r0, _020D1CD0 ; =0x021D53F8
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020D1CD0: .word 0x021D53F8
-
- arm_func_start FS_Init
-FS_Init: ; 0x020D1CD4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D1D0C ; =0x021D53F8
- ldr r2, [r1, #0x0]
- cmp r2, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {lr}
- bxne lr
- mov r2, #0x1
- str r2, [r1, #0x0]
- bl FSi_InitRom
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D1D0C: .word 0x021D53F8
-
- arm_func_start FS_TryLoadTable
-FS_TryLoadTable: ; 0x020D1D10
- ldr ip, _020D1D28 ; =FUN_020D0D84
- mov r3, r0
- mov r2, r1
- ldr r0, _020D1D2C ; =0x021D5414
- mov r1, r3
- bx r12
- .balign 4
-_020D1D28: .word FUN_020D0D84
-_020D1D2C: .word 0x021D5414
-
- arm_func_start FS_SetDefaultDMA
-FS_SetDefaultDMA: ; 0x020D1D30
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- bl OS_DisableInterrupts
- mov r5, r0
- ldr r1, _020D1D7C ; =0x021D5400
- ldr r0, _020D1D80 ; =0x021D5414
- ldr r4, [r1, #0x0]
- bl FS_SuspendArchive
- ldr r1, _020D1D7C ; =0x021D5400
- cmp r0, #0x0
- str r6, [r1, #0x0]
- beq _020D1D68
- ldr r0, _020D1D80 ; =0x021D5414
- bl FS_ResumeArchive
-_020D1D68:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D1D7C: .word 0x021D5400
-_020D1D80: .word 0x021D5414
-
- arm_func_start FSi_InitRom
-FSi_InitRom: ; 0x020D1D84
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x14
- ldr r1, _020D1EE8 ; =0x021D5400
- str r0, [r1, #0x0]
- bl OS_GetLockID
- ldr r3, _020D1EEC ; =0x021D53FC
- ldr r2, _020D1EF0 ; =0x021D5404
- mov r12, #0x0
- ldr r1, _020D1EF4 ; =0x021D540C
- str r0, [r3, #0x0]
- str r12, [r2, #0x0]
- str r12, [r2, #0x4]
- str r12, [r1, #0x0]
- str r12, [r1, #0x4]
- bl CARD_Init
- ldr r0, _020D1EF8 ; =0x021D5414
- bl FS_InitArchive
- ldr r0, _020D1EF8 ; =0x021D5414
- ldr r1, _020D1EFC ; =0x02106830
- mov r2, #0x3
- bl FS_RegisterArchiveName
- ldr r0, _020D1F00 ; =0x027FFC40
- ldrh r0, [r0, #0x0]
- cmp r0, #0x2
- bne _020D1E4C
- ldr ip, _020D1EF0 ; =0x021D5404
- mvn r2, #0x0
- ldr r3, _020D1EF4 ; =0x021D540C
- mov lr, #0x0
- ldr r0, _020D1EF8 ; =0x021D5414
- ldr r1, _020D1F04 ; =FSi_EmptyArchiveProc
- str r2, [r12, #0x0]
- str lr, [r12, #0x4]
- str r2, [r3, #0x0]
- str lr, [r3, #0x4]
- bl FS_SetArchiveProc
- mov r1, #0x0
- str r1, [sp, #0x0]
- ldr r0, _020D1F08 ; =FSi_ReadDummyCallback
- str r1, [sp, #0x4]
- str r0, [sp, #0x8]
- ldr ip, _020D1F0C ; =FSi_WriteDummyCallback
- ldr r0, _020D1EF8 ; =0x021D5414
- mov r2, r1
- mov r3, r1
- str r12, [sp, #0xc]
- bl FS_LoadArchive
- add sp, sp, #0x14
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D1E4C:
- ldr r5, _020D1F10 ; =0x027FFE40
- ldr r0, _020D1EF8 ; =0x021D5414
- ldr r1, _020D1F14 ; =FSi_RomArchiveProc
- ldr r2, _020D1F18 ; =0x00000602
- ldr r4, _020D1F1C ; =0x027FFE48
- bl FS_SetArchiveProc
- ldr r1, [r5, #0x0]
- mvn r0, #0x0
- cmp r1, r0
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- cmp r1, #0x0
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r2, [r4, #0x0]
- cmp r2, r0
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- cmp r2, #0x0
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- str r1, [sp, #0x0]
- ldr r0, [r5, #0x4]
- ldr r1, _020D1F20 ; =FSi_ReadRomCallback
- str r0, [sp, #0x4]
- ldr r0, _020D1F0C ; =FSi_WriteDummyCallback
- str r1, [sp, #0x8]
- str r0, [sp, #0xc]
- ldr r3, [r4, #0x4]
- ldr r0, _020D1EF8 ; =0x021D5414
- mov r1, #0x0
- bl FS_LoadArchive
- add sp, sp, #0x14
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D1EE8: .word 0x021D5400
-_020D1EEC: .word 0x021D53FC
-_020D1EF0: .word 0x021D5404
-_020D1EF4: .word 0x021D540C
-_020D1EF8: .word 0x021D5414
-_020D1EFC: .word 0x02106830
-_020D1F00: .word 0x027FFC40
-_020D1F04: .word FSi_EmptyArchiveProc
-_020D1F08: .word FSi_ReadDummyCallback
-_020D1F0C: .word FSi_WriteDummyCallback
-_020D1F10: .word 0x027FFE40
-_020D1F14: .word FSi_RomArchiveProc
-_020D1F18: .word 0x00000602
-_020D1F1C: .word 0x027FFE48
-_020D1F20: .word FSi_ReadRomCallback
-
- arm_func_start FSi_EmptyArchiveProc
-FSi_EmptyArchiveProc: ; 0x020D1F24
- mov r0, #0x4
- bx lr
-
- arm_func_start FSi_ReadDummyCallback
-FSi_ReadDummyCallback: ; 0x020D1F2C
- mov r0, #0x1
- bx lr
-
- arm_func_start FSi_RomArchiveProc
-FSi_RomArchiveProc: ; 0x020D1F34
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x1
- beq _020D1FA0
- cmp r1, #0x9
- beq _020D1F58
- cmp r1, #0xa
- beq _020D1F7C
- b _020D1FB0
-_020D1F58:
- ldr r0, _020D1FC0 ; =0x021D53FC
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl CARD_LockRom
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {lr}
- bx lr
-_020D1F7C:
- ldr r0, _020D1FC0 ; =0x021D53FC
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl CARD_UnlockRom
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {lr}
- bx lr
-_020D1FA0:
- add sp, sp, #0x4
- mov r0, #0x4
- ldmia sp!, {lr}
- bx lr
-_020D1FB0:
- mov r0, #0x8
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D1FC0: .word 0x021D53FC
-
- arm_func_start FSi_WriteDummyCallback
-FSi_WriteDummyCallback: ; 0x020D1FC4
- mov r0, #0x1
- bx lr
-
- arm_func_start FSi_ReadRomCallback
-FSi_ReadRomCallback: ; 0x020D1FCC
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- ldr ip, _020D2010 ; =FSi_OnRomReadDone
- mov lr, r1
- str r12, [sp, #0x0]
- str r0, [sp, #0x4]
- mov r1, #0x1
- ldr r0, _020D2014 ; =0x021D5400
- str r1, [sp, #0x8]
- mov r1, r2
- ldr r0, [r0, #0x0]
- mov r2, lr
- bl CARDi_ReadRom
- mov r0, #0x6
- add sp, sp, #0xc
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D2010: .word FSi_OnRomReadDone
-_020D2014: .word 0x021D5400
-
- arm_func_start FSi_OnRomReadDone
-FSi_OnRomReadDone: ; 0x020D2018
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl CARD_IsPulledOut
-_020D2024:
- cmp r0, #0x0
- movne r1, #0x5
- moveq r1, #0x0
- mov r0, r4
- bl FS_NotifyArchiveAsyncEnd
- ldmia sp!, {r4,lr}
- bx lr
-
-
- arm_func_start FS_UnloadOverlay
-FS_UnloadOverlay: ; 0x020D2040
- stmdb sp!, {lr}
- sub sp, sp, #0x2c
- mov r3, r0
- mov r2, r1
- add r0, sp, #0x0
- mov r1, r3
- bl FS_LoadOverlayInfo
-_020D205C:
- cmp r0, #0x0
- beq _020D2074
- add r0, sp, #0x0
- bl FS_UnloadOverlayImage
- cmp r0, #0x0
- bne _020D2084
-_020D2074:
- add sp, sp, #0x2c
- mov r0, #0x0
- ldmfd sp!, {lr}
- bx lr
-_020D2084:
- mov r0, #0x1
- add sp, sp, #0x2c
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start FS_LoadOverlay
-FS_LoadOverlay: ; 0x020D2094
- stmdb sp!, {lr}
- sub sp, sp, #0x2c
- mov r3, r0
- mov r2, r1
- add r0, sp, #0x0
- mov r1, r3
- bl FS_LoadOverlayInfo
-_020D20B0:
- cmp r0, #0x0
- beq _020D20C8
- add r0, sp, #0x0
- bl FS_LoadOverlayImage
- cmp r0, #0x0
- bne _020D20D8
-_020D20C8:
- add sp, sp, #0x2c
- mov r0, #0x0
- ldmfd sp!, {lr}
- bx lr
-_020D20D8:
- add r0, sp, #0x0
- bl FS_StartOverlay
- mov r0, #0x1
- add sp, sp, #0x2c
- ldmfd sp!, {lr}
- bx lr
-
- arm_func_start FS_UnloadOverlayImage
-FS_UnloadOverlayImage: ; 0x020D20F0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FS_EndOverlay
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FS_EndOverlay
-FS_EndOverlay: ; 0x020D210C
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr r8, _020D220C ; =0x021D74C8
- mov r11, r0
- mov r9, #0x0
-_020D2120:
- ldr r1, [r11, #0x8]
- ldr r0, [r11, #0xc]
- ldr r5, [r11, #0x4]
- add r0, r1, r0
- mov r7, r9
- mov r6, r9
- add r4, r5, r0
- bl OS_DisableInterrupts
- ldr lr, [r8, #0x0]
- mov r10, r9
- mov r12, lr
- cmp lr, #0x0
- beq _020D21C4
-_020D2154:
- ldr r2, [r12, #0x8]
- ldr r3, [r12, #0x0]
- cmp r2, #0x0
- ldr r1, [r12, #0x4]
- bne _020D2178
- cmp r1, r5
- blo _020D2178
- cmp r1, r4
- blo _020D2188
-_020D2178:
- cmp r2, r5
- blo _020D21B4
- cmp r2, r4
- bhs _020D21B4
-_020D2188:
- cmp r6, #0x0
- strne r12, [r6, #0x0]
- moveq r7, r12
- cmp lr, r12
- streq r3, [r8, #0x0]
- moveq lr, r3
- str r9, [r12, #0x0]
- cmp r10, #0x0
- mov r6, r12
- strne r3, [r10, #0x0]
- b _020D21B8
-_020D21B4:
- mov r10, r12
-_020D21B8:
- mov r12, r3
- cmp r3, #0x0
- bne _020D2154
-_020D21C4:
- bl OS_RestoreInterrupts
-_020D21C8:
- cmp r7, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r11, lr}
- bxeq lr
-_020D21D8:
- ldr r1, [r7, #0x4]
- ldr r4, [r7]
- cmp r1, #0x0
- beq _020D21F0
- ldr r0, [r7, #0x8]
- blx r1
-_020D21F0:
- mov r7, r4
- cmp r4, #0x0
- bne _020D21D8
- b _020D2120
- add sp, sp, #0x4
- ldmia sp!, {r4-r11, lr}
- bx lr
-_020D220C: .word 0x021D74C8
-
- arm_func_start FS_StartOverlay
-FS_StartOverlay: ; 0x020D2210
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- bl FSi_GetOverlayBinarySize
- ldr r1, _020D2300 ; =0x027FFC40
- mov r4, r0
- ldrh r0, [r1, #0x0]
- cmp r0, #0x2
- bne _020D22A4
- ldrb r1, [r5, #0x1f]
- mov r0, #0x0
- ands r1, r1, #0x2
- beq _020D2280
- ldr r1, _020D2304 ; =0x02106F84
- ldr r3, _020D2308 ; =0x02106F84
- ldr r2, _020D230C ; =0x66666667
- sub r12, r1, r3
- smull r1, lr, r2, r12
- mov lr, lr, asr #0x3
- mov r1, r12, lsr #0x1f
- ldr r2, [r5, #0x0]
- add lr, r1, lr
- cmp r2, lr
- bhs _020D2280
- mov r0, #0x14
- mla r0, r2, r0, r3
- ldr r1, [r5, #0x4]
- mov r2, r4
- bl FSi_CompareDigest
-_020D2280:
- cmp r0, #0x0
- bne _020D22A4
- ldr r0, [r5, #0x4]
- mov r2, r4
- mov r1, #0x0
- bl MI_CpuFill8
- bl OS_Terminate
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D22A4:
- ldrb r0, [r5, #0x1f]
- ands r0, r0, #0x1
- beq _020D22BC
- ldr r0, [r5, #0x4]
- add r0, r0, r4
- bl MIi_UncompressBackward
-_020D22BC:
- ldr r0, [r5, #0x4]
- ldr r1, [r5, #0x8]
- bl DC_FlushRange
- ldr r6, [r5, #0x10]
- ldr r4, [r5, #0x14]
- cmp r6, r4
- ldmcsia sp!, {r4-r6,lr}
- bxcs lr
-_020D22DC:
- ldr r0, [r6, #0x0]
- cmp r0, #0x0
- beq _020D22EC
- blx r0
-_020D22EC:
- add r6, r6, #0x4
- cmp r6, r4
- blo _020D22DC
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D2300: .word 0x027FFC40
-_020D2304: .word 0x02106F84
-_020D2308: .word 0x02106F84
-_020D230C: .word 0x66666667
-
- arm_func_start FSi_CompareDigest
-FSi_CompareDigest:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x58
- mov r4, r0
- mov r6, r1
- mov r5, r2
- add r0, sp, #0x4
- mov r1, #0x0
- mov r2, #0x14
- bl MI_CpuFill8
- ldr r0, _020D23AC ; =0x02106834
- ldr r1, _020D23B0 ; =0x02106838
- ldr r0, [r0, #0x0]
- ldr r2, [r1, #0x0]
- add r1, sp, #0x18
- bl MI_CpuCopy8
- ldr r3, _020D23B0 ; =0x02106838
- mov r1, r6
- ldr r12, [r3, #0x0]
- mov r2, r5
- add r0, sp, #0x4
- add r3, sp, #0x18
- str r12, [sp, #0x0]
- bl MATH_CalcHMACSHA1
- add r2, sp, #0x4
- mov r3, #0x0
-_020D2374:
- ldr r1, [r2, #0x0]
- ldr r0, [r4, r3]
- cmp r1, r0
- bne _020D2394
- add r3, r3, #0x4
- cmp r3, #0x14
- add r2, r2, #0x4
- blo _020D2374
-_020D2394:
- cmp r3, #0x14
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x58
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D23AC: .word 0x02106834
-_020D23B0: .word 0x02106838
-
- arm_func_start FS_LoadOverlayImage
-FS_LoadOverlayImage: ; 0x020D23B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x54
- mov r5, r0
- add r0, sp, #0x8
- bl FS_InitFile
-_020D23C8:
- add r0, sp, #0x0
- mov r1, r5
- bl FS_GetOverlayFileID
- add r1, sp, #0x0
- add r0, sp, #0x8
- ldmia r1, {r1, r2}
- bl FS_OpenFileFast
- cmp r0, #0x0
- addeq sp, sp, #0x54
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5, lr}
- bxeq lr
- mov r0, r5
- bl FSi_GetOverlayBinarySize
- mov r4, r0
- mov r0, r5
- bl FS_ClearOverlayImage
- ldr r1, [r5, #0x4]
- add r0, sp, #0x8
- mov r2, r4
- bl FS_ReadFile
- cmp r4, r0
- beq _020D243C
- add r0, sp, #0x8
- bl FS_CloseFile
- add sp, sp, #0x54
- mov r0, #0x0
- ldmia sp!, {r4-r5, lr}
- bx lr
-_020D243C:
- add r0, sp, #0x8
- bl FS_CloseFile
- mov r0, #0x1
- add sp, sp, #0x54
- ldmia sp!, {r4-r5, lr}
- bx lr
-
- arm_func_start FS_LoadOverlayImageAsync
-FS_LoadOverlayImageAsync: ; 0x020D2454
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r5, r1
- mov r6, r0
- mov r0, r5
- bl FS_InitFile
-_020D246C:
- add r0, sp, #0x0
- mov r1, r6
- bl FS_GetOverlayFileID
- add r1, sp, #0x0
- mov r0, r5
- ldmia r1, {r1, r2}
- bl FS_OpenFileFast
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6, lr}
- bxeq lr
- mov r0, r6
- bl FSi_GetOverlayBinarySize
- mov r4, r0
- mov r0, r6
- bl FS_ClearOverlayImage
- ldr r1, [r6, #0x4]
- mov r0, r5
- mov r2, r4
- bl FS_ReadFileAsync
- cmp r4, r0
- addeq sp, sp, #0x8
- moveq r0, #0x1
- ldmeqia sp!, {r4-r6, lr}
- bxeq lr
- mov r0, r5
- bl FS_CloseFile
- mov r0, #0x0
- add sp, sp, #0x8
- ldmia sp!, {r4-r6, lr}
- bx lr
-
- arm_func_start FS_LoadOverlayInfo
-FS_LoadOverlayInfo:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x64
- movs r4, r1
- mov r5, r0
- ldreq r0, _020D25EC ; =0x021D5404
- ldrne r0, _020D25F0 ; =0x021D540C
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- beq _020D25A8
- ldr r0, [r0, #0x4]
- mov r2, r2, lsl #0x5
- cmp r2, r0
- addcs sp, sp, #0x64
- movcs r0, #0x0
- ldmcsia sp!, {r4-r5,lr}
- bxcs lr
- add r0, r3, r2
- mov r1, r5
- mov r2, #0x20
- bl MI_CpuCopy8
- add r0, sp, #0x18
- str r4, [r5, #0x20]
- bl FS_InitFile
- add r0, sp, #0x10
- mov r1, r5
- bl FS_GetOverlayFileID
- add r1, sp, #0x10
- add r0, sp, #0x18
- ldmia r1, {r1-r2}
- bl FS_OpenFileFast
-_020D2564:
- cmp r0, #0x0
- addeq sp, sp, #0x64
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r1, [sp, #0x3c]
- add r0, sp, #0x18
- str r1, [r5, #0x24]
- ldr r2, [sp, #0x40]
- ldr r1, [sp, #0x3c]
- sub r1, r2, r1
- str r1, [r5, #0x28]
- bl FS_CloseFile
- add sp, sp, #0x64
- mov r0, #0x1
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D25A8:
- ldr r1, _020D25F4 ; =0x027FFE50
- ldr ip, _020D25F8 ; =0x027FFE58
- ldr r0, [r1, #0x0]
- ldr r3, _020D25FC ; =0x021D5414
- str r0, [sp, #0x0]
- ldr r1, [r1, #0x4]
- mov r0, r5
- str r1, [sp, #0x4]
- ldr r5, [r12, #0x0]
- mov r1, r4
- str r5, [sp, #0x8]
- ldr r4, [r12, #0x4]
- str r4, [sp, #0xc]
- bl FSi_LoadOverlayInfoCore
- add sp, sp, #0x64
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D25EC: .word 0x021D5404
-_020D25F0: .word 0x021D540C
-_020D25F4: .word 0x027FFE50
-_020D25F8: .word 0x027FFE58
-_020D25FC: .word 0x021D5414
-
- arm_func_start FSi_LoadOverlayInfoCore
-FSi_LoadOverlayInfoCore: ; 0x020D2600
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x54
- movs r9, r1
- ldreq r5, [sp, #0x74]
- ldreq r6, [sp, #0x70]
- ldrne r5, [sp, #0x7c]
- ldrne r6, [sp, #0x78]
- mov r7, r2, lsl #0x5
- cmp r7, r5
- mov r4, r0
- mov r8, r3
- addcs sp, sp, #0x54
- movcs r0, #0x0
- ldmcsia sp!, {r4-r9,lr}
- bxcs lr
- add r0, sp, #0xc
- bl FS_InitFile
- mvn r12, #0x0
- add r0, sp, #0xc
- mov r1, r8
- add r2, r6, r7
- add r3, r6, r5
- str r12, [sp, #0x0]
- bl FS_OpenFileDirect
-_020D2660:
- cmp r0, #0
- addeq sp, sp, #0x54
- moveq r0, #0
- ldmeqia sp!, {r4-r9, lr}
- bxeq lr
- add r0, sp, #12
- mov r1, r4
- mov r2, #32
- bl FS_ReadFile
- cmp r0, #32
- beq _020D26A4
- add r0, sp, #12
- bl FS_CloseFile
- add sp, sp, #0x54
- mov r0, #0x0
- ldmia sp!, {r4-r9, lr}
- bx lr
-_020D26A4:
- add r0, sp, #0xC
- bl FS_CloseFile
- add r0, sp, #0x4
- mov r1, r4
- str r9, [r4, #0x20]
- bl FS_GetOverlayFileID
- add r1, sp, #0x4
- add r0, sp, #0xC
- ldmia r1, {r1, r2}
- bl FS_OpenFileFast
- cmp r0, #0x0
- addeq sp, sp, #0x54
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9, lr}
- bxeq lr
- ldr r1, [sp, #0x30]
- add r0, sp, #0xC
- str r1, [r4, #0x24]
- ldr r2, [sp, #0x34]
- ldr r1, [sp, #0x30]
- sub r1, r2, r1
- str r1, [r4, #0x28]
- bl FS_CloseFile
- mov r0, #0x1
- add sp, sp, #0x54
- ldmia sp!, {r4-r9, lr}
- bx lr
-
- arm_func_start FS_GetOverlayFileID
-FS_GetOverlayFileID: ; 0x020D2710
- sub sp, sp, #0x8
- ldr r2, _020D2734 ; =0x021D5414
- str r2, [sp, #0x0]
- ldr r1, [r1, #0x18]
- str r1, [sp, #0x4]
- str r2, [r0, #0x0]
- str r1, [r0, #0x4]
- add sp, sp, #0x8
- bx lr
- .balign 4
-_020D2734: .word 0x021D5414
-
- arm_func_start FS_ClearOverlayImage
-FS_ClearOverlayImage: ; 0x020D2738
- stmdb sp!, {r4-r6,lr}
- ldr r5, [r0, #0x8]
- ldr r1, [r0, #0xc]
- ldr r6, [r0, #0x4]
- add r4, r5, r1
- mov r0, r6
- mov r1, r4
- bl IC_InvalidateRange
- mov r0, r6
- mov r1, r4
- bl DC_InvalidateRange
- add r0, r6, r5
- sub r2, r4, r5
- mov r1, #0x0
- bl MI_CpuFill8
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FSi_GetOverlayBinarySize
-FSi_GetOverlayBinarySize: ; 0x020D277C
- ldrb r1, [r0, #0x1f]
- ands r1, r1, #0x1
- ldrne r0, [r0, #0x1c]
- movne r0, r0, lsl #0x8
- movne r0, r0, lsr #0x8
- ldreq r0, [r0, #0x8]
- bx lr
-
- arm_func_start ProcessBlock
-ProcessBlock: ; 0x020D2798
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- add r3, r0, #0x18
- ldr r5, [r0, #0x0]
- ldr r4, [r0, #0x4]
- ldr lr, [r0, #0x8]
- ldr r12, [r0, #0xc]
- ldr r2, _020D2B78 ; =0x02106900
- mov r8, r3
- mov r7, #0x0
-_020D27C0:
- mvn r1, r4
- and r6, r4, lr
- and r1, r1, r12
- orr r1, r6, r1
- ldr r6, [r8, #0x0]
- add r1, r5, r1
- ldr r5, [r2, #0x0]
- add r1, r6, r1
- add r5, r5, r1
- mov r1, r5, lsl #0x7
- orr r1, r1, r5, lsr #0x19
- add r5, r4, r1
- mvn r1, r5
- and r6, r5, r4
- and r1, r1, lr
- orr r1, r6, r1
- ldr r6, [r8, #0x4]
- add r1, r12, r1
- ldr r9, [r2, #0x4]
- add r1, r6, r1
- add r6, r9, r1
- mov r1, r6, lsl #0xc
- orr r1, r1, r6, lsr #0x14
- add r12, r5, r1
- mvn r1, r12
- and r6, r12, r5
- and r1, r1, r4
- orr r6, r6, r1
- add r1, r8, #0xc
- ldr r9, [r8, #0x8]
- add r6, lr, r6
- add r6, r9, r6
- ldr r9, [r2, #0x8]
- ldr r1, [r1, #0x0]
- add r10, r9, r6
- add r6, r2, #0xc
- ldr r6, [r6, #0x0]
- mov r9, r10, lsl #0x11
- orr r9, r9, r10, lsr #0xf
- add lr, r12, r9
- add r2, r2, #0x10
- add r8, r8, #0x10
- and r10, lr, r12
- mvn r9, lr
- and r9, r9, r5
- orr r9, r10, r9
- add r4, r4, r9
- add r1, r1, r4
- add r4, r6, r1
- mov r1, r4, lsl #0x16
- orr r1, r1, r4, lsr #0xa
- add r4, lr, r1
- add r7, r7, #0x1
- cmp r7, #0x4
- blt _020D27C0
- ldr r6, _020D2B7C ; =0x02106840
- mov r1, #0x0
-_020D28A4:
- mvn r7, r12
- ldr r9, [r6, #0x0]
- and r8, r4, r12
- and r7, lr, r7
- orr r7, r8, r7
- ldr r8, [r3, r9, lsl #0x2]
- add r5, r5, r7
- ldr r7, [r2, #0x0]
- add r5, r8, r5
- add r7, r7, r5
- mov r5, r7, lsl #0x5
- orr r5, r5, r7, lsr #0x1b
- add r5, r4, r5
- mvn r8, lr
- ldr r7, [r6, #0x4]
- and r9, r5, lr
- and r8, r4, r8
- orr r10, r9, r8
- mvn r8, r4
- ldr r9, [r6, #0x8]
- ldr r11, [r3, r7, lsl #0x2]
- add r7, r12, r10
- add r10, r11, r7
- add r7, r6, #0xc
- ldr r9, [r3, r9, lsl #0x2]
- and r8, r5, r8
- ldr r7, [r7, #0x0]
- ldr r11, [r2, #0x4]
- ldr r7, [r3, r7, lsl #0x2]
- add r11, r11, r10
- mov r10, r11, lsl #0x9
- orr r10, r10, r11, lsr #0x17
- add r12, r5, r10
- ldr r10, [r2, #0x8]
- and r11, r12, r4
- orr r8, r11, r8
- add r8, lr, r8
- add r8, r9, r8
- add r10, r10, r8
- add r8, r2, #0xc
- ldr r8, [r8, #0x0]
- mov r9, r10, lsl #0xe
- orr r9, r9, r10, lsr #0x12
- add lr, r12, r9
- add r2, r2, #0x10
- add r6, r6, #0x10
- and r10, lr, r5
- mvn r9, r5
- and r9, r12, r9
- orr r9, r10, r9
- add r4, r4, r9
- add r4, r7, r4
- add r7, r8, r4
- mov r4, r7, lsl #0x14
- orr r4, r4, r7, lsr #0xc
- add r4, lr, r4
- add r1, r1, #0x1
- cmp r1, #0x4
- blt _020D28A4
- mov r7, #0x0
-_020D2994:
- ldr r8, [r6, #0x0]
- eor r1, r4, lr
- eor r1, r12, r1
- add r1, r5, r1
- ldr r8, [r3, r8, lsl #0x2]
- ldr r5, [r2, #0x0]
- add r1, r8, r1
- add r5, r5, r1
- mov r1, r5, lsl #0x4
- orr r1, r1, r5, lsr #0x1c
- add r5, r4, r1
- ldr r8, [r6, #0x4]
- eor r1, r5, r4
- eor r1, lr, r1
- ldr r8, [r3, r8, lsl #0x2]
- add r1, r12, r1
- ldr r9, [r6, #0x8]
- ldr r10, [r2, #0x4]
- add r1, r8, r1
- add r8, r10, r1
- mov r1, r8, lsl #0xb
- orr r1, r1, r8, lsr #0x15
- add r12, r5, r1
- eor r8, r12, r5
- eor r8, r4, r8
- ldr r9, [r3, r9, lsl #0x2]
- add r8, lr, r8
- add r9, r9, r8
- ldr r10, [r2, #0x8]
- add r1, r2, #0xc
- ldr r8, [r6, #0xc]
- add r10, r10, r9
- ldr r9, [r3, r8, lsl #0x2]
- mov r8, r10, lsl #0x10
- orr r8, r8, r10, lsr #0x10
- add lr, r12, r8
- eor r8, lr, r12
- eor r8, r5, r8
- add r4, r4, r8
- add r7, r7, #0x1
- ldr r1, [r1, #0x0]
- add r4, r9, r4
- add r4, r1, r4
- mov r1, r4, lsl #0x17
- orr r1, r1, r4, lsr #0x9
- add r2, r2, #0x10
- add r6, r6, #0x10
- add r4, lr, r1
- cmp r7, #0x4
- blt _020D2994
- mov r10, #0x0
-_020D2A60:
- mvn r1, r12
- ldr r7, [r6, #0x0]
- orr r1, r4, r1
- eor r1, lr, r1
- ldr r7, [r3, r7, lsl #0x2]
- add r1, r5, r1
- ldr r5, [r2, #0x0]
- add r1, r7, r1
- add r5, r5, r1
- mov r1, r5, lsl #0x6
- orr r1, r1, r5, lsr #0x1a
- add r5, r4, r1
- mvn r1, lr
- ldr r7, [r6, #0x4]
- orr r1, r5, r1
- eor r1, r4, r1
- ldr r8, [r6, #0x8]
- ldr r7, [r3, r7, lsl #0x2]
- add r1, r12, r1
- ldr r9, [r2, #0x4]
- add r1, r7, r1
- add r9, r9, r1
- mov r7, r9, lsl #0xa
- add r1, r6, #0xc
- orr r9, r7, r9, lsr #0x16
- ldr r1, [r1, #0x0]
- add r7, r2, #0xc
- add r12, r5, r9
- ldr r8, [r3, r8, lsl #0x2]
- ldr r7, [r7, #0x0]
- ldr r1, [r3, r1, lsl #0x2]
- ldr r9, [r2, #0x8]
- mvn r11, r4
- orr r11, r12, r11
- eor r11, r5, r11
- add r11, lr, r11
- add r8, r8, r11
- add r9, r9, r8
- mov r8, r9, lsl #0xf
- orr r8, r8, r9, lsr #0x11
- add lr, r12, r8
- add r2, r2, #0x10
- add r6, r6, #0x10
- mvn r8, r5
- orr r8, lr, r8
- eor r8, r12, r8
- add r4, r4, r8
- add r1, r1, r4
- add r4, r7, r1
- mov r1, r4, lsl #0x15
- orr r1, r1, r4, lsr #0xb
- add r4, lr, r1
- add r10, r10, #0x1
- cmp r10, #0x4
- blt _020D2A60
- ldr r1, [r0, #0x0]
- add r1, r1, r5
- str r1, [r0, #0x0]
- ldr r1, [r0, #0x4]
- add r1, r1, r4
- str r1, [r0, #0x4]
- ldr r1, [r0, #0x8]
- add r1, r1, lr
- str r1, [r0, #0x8]
- ldr r1, [r0, #0xc]
- add r1, r1, r12
- str r1, [r0, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020D2B78: .word 0x02106900
-_020D2B7C: .word 0x02106840
-
- arm_func_start MATH_MD5GetHash
-MATH_MD5GetHash: ; 0x020D2B80
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- ldr r1, [r6, #0x14]
- ldr r3, [r6, #0x10]
- mov r7, r0
- mov r4, r1, lsl #0x3
- ldr r1, _020D2C40 ; =0x0210683C
- mov r0, r6
- mov r2, #0x1
- orr r4, r4, r3, lsr #0x1d
- mov r5, r3, lsl #0x3
- bl MATH_MD5Update
- ldr r0, [r6, #0x10]
- mov r1, #0x0
- and r3, r0, #0x3f
- rsb r2, r3, #0x40
- cmp r2, #0x8
- bhs _020D2BE8
- add r0, r6, #0x18
- add r0, r0, r3
- bl MI_CpuFill8
- mov r0, r6
- bl ProcessBlock
- mov r3, #0x0
- mov r2, #0x40
-_020D2BE8:
- cmp r2, #0x8
- bls _020D2C04
- add r0, r6, #0x18
- add r0, r0, r3
- sub r2, r2, #0x8
- mov r1, #0x0
- bl MI_CpuFill8
-_020D2C04:
- str r5, [r6, #0x50]
- mov r0, r6
- str r4, [r6, #0x54]
- bl ProcessBlock
- mov r0, r6
- mov r1, r7
- mov r2, #0x10
- bl MI_CpuCopy8
- mov r0, r6
- mov r1, #0x0
- mov r2, #0x58
- bl MI_CpuFill8
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020D2C40: .word 0x0210683C
-
- arm_func_start MATH_MD5Update
-MATH_MD5Update: ; 0x020D2C44
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r0
- add r12, r8, #0x10
- ldr r4, [r8, #0x10]
- mov r6, r2
- and r3, r4, #0x3f
- ldr r0, [r12, #0x4]
- adds r4, r4, r6
- str r4, [r8, #0x10]
- adc r0, r0, #0x0
- rsb r5, r3, #0x40
- mov r7, r1
- str r0, [r12, #0x4]
- cmp r5, r6
- bls _020D2CB0
- cmp r6, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- add r1, r8, #0x18
- mov r0, r7
- add r1, r1, r3
- bl MI_CpuCopy8
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-_020D2CB0:
- add r1, r8, #0x18
- mov r0, r7
- mov r2, r5
- add r1, r1, r3
- bl MI_CpuCopy8
- mov r0, r8
- bl ProcessBlock
- sub r6, r6, r5
- mov r4, r6, lsr #0x6
- cmp r4, #0x0
- add r9, r7, r5
- ble _020D2D10
- add r7, r8, #0x18
- mov r5, #0x40
-_020D2CE8:
- mov r0, r9
- mov r1, r7
- mov r2, r5
- bl MI_CpuCopy8
- mov r0, r8
- add r9, r9, #0x40
- bl ProcessBlock
- sub r4, r4, #0x1
- cmp r4, #0x0
- bgt _020D2CE8
-_020D2D10:
- ands r2, r6, #0x3f
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- mov r0, r9
- add r1, r8, #0x18
- bl MI_CpuCopy8
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start MATH_MD5Init
-MATH_MD5Init: ; 0x020D2D38
- ldr r2, _020D2D68 ; =0x67452301
- ldr r1, _020D2D6C ; =0xEFCDAB89
- str r2, [r0, #0x0]
- ldr r2, _020D2D70 ; =0x98BADCFE
- str r1, [r0, #0x4]
- ldr r1, _020D2D74 ; =0x10325476
- str r2, [r0, #0x8]
- str r1, [r0, #0xc]
- mov r1, #0x0
- str r1, [r0, #0x10]
- str r1, [r0, #0x14]
- bx lr
- .balign 4
-_020D2D68: .word 0x67452301
-_020D2D6C: .word 0xEFCDAB89
-_020D2D70: .word 0x98BADCFE
-_020D2D74: .word 0x10325476
-
- arm_func_start MATH_CalcHMACSHA1
-MATH_CalcHMACSHA1: ; 0x020D2D78
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0xa0
- ldr lr, _020D2E00 ; =0x02106A04
- add r12, sp, #0x1c
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, r3
- mov r4, r12
- ldmia lr!, {r0-r3}
- stmia r12!, {r0-r3}
- ldmia lr, {r0-r2}
- stmia r12, {r0-r2}
- add lr, sp, #0x38
- add r12, sp, #0x8
- str lr, [sp, #0x24]
- ldr lr, _020D2E04 ; =MATH_SHA1Init
- str r12, [sp, #0x28]
- ldr ip, _020D2E08 ; =MATH_SHA1Update
- str lr, [sp, #0x2c]
- ldr lr, _020D2E0C ; =MATH_SHA1GetHash
- str r12, [sp, #0x30]
- ldr r12, [sp, #0xb8]
- str lr, [sp, #0x34]
- str r12, [sp, #0x0]
- mov r3, r5
- mov r0, r8
- mov r1, r7
- mov r2, r6
- str r4, [sp, #0x4]
- bl MATHi_CalcHMAC
- add sp, sp, #0xa0
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020D2E00: .word 0x02106A04
-_020D2E04: .word MATH_SHA1Init
-_020D2E08: .word MATH_SHA1Update
-_020D2E0C: .word MATH_SHA1GetHash
-
- arm_func_start MATH_SHA1GetHash
-MATH_SHA1GetHash: ; 0x020D2E10
- stmdb sp!, {r0-r3}
- stmdb sp!, {r4-r6,lr}
- ldr r0, [sp, #0x10]
- mov r6, r1
- ldr r3, [r0, #0x1c]
- add r5, r0, #0x20
- ands r1, r3, #0x3
- mov r0, r3, asr #0x2
- moveq r1, #0x0
- streq r1, [r5, r0, lsl #0x2]
- ldr r2, [sp, #0x10]
- mov r1, #0x80
- add r4, r2, #0x20
- strb r1, [r4, r3]
- add r3, r3, #0x1
- ands r1, r3, #0x3
- beq _020D2E68
- mov r2, #0x0
-_020D2E58:
- strb r2, [r4, r3]
- add r3, r3, #0x1
- ands r1, r3, #0x3
- bne _020D2E58
-_020D2E68:
- ldr r1, [sp, #0x10]
- add r0, r0, #0x1
- ldr r1, [r1, #0x1c]
- cmp r1, #0x38
- blt _020D2EB4
- cmp r0, #0x10
- bge _020D2E98
- mov r1, #0x0
-_020D2E88:
- str r1, [r5, r0, lsl #0x2]
- add r0, r0, #0x1
- cmp r0, #0x10
- blt _020D2E88
-_020D2E98:
- ldr r1, _020D3008 ; =0x02106A00
- ldr r0, [sp, #0x10]
- ldr r3, [r1, #0x0]
- mov r1, r5
- mov r2, #0x40
- blx r3
- mov r0, #0x0
-_020D2EB4:
- cmp r0, #0xe
- bge _020D2ED0
- mov r1, #0x0
-_020D2EC0:
- str r1, [r5, r0, lsl #0x2]
- add r0, r0, #0x1
- cmp r0, #0xe
- blt _020D2EC0
-_020D2ED0:
- ldr r0, [sp, #0x10]
- mov r1, r5
- ldr r2, [r0, #0x14]
- ldr r3, _020D3008 ; =0x02106A00
- strb r2, [r4, #0x3f]
- mov r0, r2, lsr #0x8
- strb r0, [r4, #0x3e]
- mov r0, r2, lsr #0x10
- strb r0, [r4, #0x3d]
- mov r0, r2, lsr #0x18
- strb r0, [r4, #0x3c]
- ldr r0, [sp, #0x10]
- mov r2, #0x40
- ldr r5, [r0, #0x18]
- strb r5, [r4, #0x3b]
- mov r0, r5, lsr #0x8
- strb r0, [r4, #0x3a]
- mov r0, r5, lsr #0x10
- strb r0, [r4, #0x39]
- mov r0, r5, lsr #0x18
- strb r0, [r4, #0x38]
- ldr r0, [sp, #0x10]
- ldr r3, [r3, #0x0]
- blx r3
- ldr r0, [sp, #0x10]
- add r1, sp, #0x10
- ldr r3, [r0, #0x0]
- mov r0, #0x0
- mov r2, r3, lsr #0x18
- strb r2, [r6, #0x0]
- mov r2, r3, lsr #0x10
- strb r2, [r6, #0x1]
- mov r2, r3, lsr #0x8
- strb r2, [r6, #0x2]
- strb r3, [r6, #0x3]
- ldr r3, [sp, #0x10]
- mov r2, #0x4
- ldr r4, [r3, #0x4]
- mov r3, r4, lsr #0x18
- strb r3, [r6, #0x4]
- mov r3, r4, lsr #0x10
- strb r3, [r6, #0x5]
- mov r3, r4, lsr #0x8
- strb r3, [r6, #0x6]
- strb r4, [r6, #0x7]
- ldr r3, [sp, #0x10]
- ldr r4, [r3, #0x8]
- mov r3, r4, lsr #0x18
- strb r3, [r6, #0x8]
- mov r3, r4, lsr #0x10
- strb r3, [r6, #0x9]
- mov r3, r4, lsr #0x8
- strb r3, [r6, #0xa]
- strb r4, [r6, #0xb]
- ldr r3, [sp, #0x10]
- ldr r4, [r3, #0xc]
- mov r3, r4, lsr #0x18
- strb r3, [r6, #0xc]
- mov r3, r4, lsr #0x10
- strb r3, [r6, #0xd]
- mov r3, r4, lsr #0x8
- strb r3, [r6, #0xe]
- strb r4, [r6, #0xf]
- ldr r3, [sp, #0x10]
- ldr r4, [r3, #0x10]
- mov r3, r4, lsr #0x18
- strb r3, [r6, #0x10]
- mov r3, r4, lsr #0x10
- strb r3, [r6, #0x11]
- mov r3, r4, lsr #0x8
- strb r3, [r6, #0x12]
- strb r4, [r6, #0x13]
- ldr r3, [sp, #0x10]
- str r0, [r3, #0x1c]
- bl MIi_CpuClear32
- ldmia sp!, {r4-r6,lr}
- add sp, sp, #0x10
- bx lr
- .balign 4
-_020D3008: .word 0x02106A00
-
- arm_func_start MATH_SHA1Update
-MATH_SHA1Update: ; 0x020D300C
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- movs r6, r2
- mov r7, r1
- add r5, r8, #0x20
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldr r0, [r8, #0x14]
- add r1, r0, r6, lsl #0x3
- cmp r1, r0
- ldrcc r0, [r8, #0x18]
- addcc r0, r0, #0x1
- strcc r0, [r8, #0x18]
- ldr r0, [r8, #0x18]
- add r0, r0, r6, lsr #0x1d
- str r0, [r8, #0x18]
- str r1, [r8, #0x14]
- ldr r1, [r8, #0x1c]
- cmp r1, #0x0
- beq _020D30CC
- add r0, r1, r6
- cmp r0, #0x40
- blo _020D30A8
- rsb r4, r1, #0x40
- mov r0, r7
- mov r2, r4
- add r1, r5, r1
- bl MI_CpuCopy8
- ldr r1, _020D3164 ; =0x02106A00
- mov r0, r8
- ldr r3, [r1, #0x0]
- mov r1, r5
- mov r2, #0x40
- sub r6, r6, r4
- add r7, r7, r4
- blx r3
- mov r0, #0x0
- str r0, [r8, #0x1c]
- b _020D30CC
-_020D30A8:
- mov r0, r7
- mov r2, r6
- add r1, r5, r1
- bl MI_CpuCopy8
- ldr r0, [r8, #0x1c]
- add r0, r0, r6
- str r0, [r8, #0x1c]
- ldmia sp!, {r4-r8,lr}
- bx lr
-_020D30CC:
- cmp r6, #0x40
- blo _020D313C
- bic r4, r6, #0x3f
- sub r6, r6, r4
- ands r0, r7, #0x3
- bne _020D3104
- ldr r1, _020D3164 ; =0x02106A00
- mov r0, r8
- ldr r3, [r1, #0x0]
- mov r1, r7
- mov r2, r4
- blx r3
- add r7, r7, r4
- b _020D313C
-_020D3104:
- mov r0, r7
- mov r1, r5
- mov r2, #0x40
- bl MI_CpuCopy8
- ldr r1, _020D3164 ; =0x02106A00
- mov r0, r8
- ldr r3, [r1, #0x0]
- mov r1, r5
- mov r2, #0x40
- add r7, r7, #0x40
- blx r3
- sub r4, r4, #0x40
- cmp r4, #0x0
- bgt _020D3104
-_020D313C:
- str r6, [r8, #0x1c]
- cmp r6, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r0, r7
- mov r1, r5
- mov r2, r6
- bl MI_CpuCopy8
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_020D3164: .word 0x02106A00
-
- arm_func_start MATH_SHA1Init
-MATH_SHA1Init: ; 0x020D3168
- ldr r1, _020D31A4 ; =0x67452301
- ldr r2, _020D31A8 ; =0xEFCDAB89
- str r1, [r0, #0x0]
- ldr r1, _020D31AC ; =0x98BADCFE
- str r2, [r0, #0x4]
- ldr r2, _020D31B0 ; =0x10325476
- str r1, [r0, #0x8]
- ldr r1, _020D31B4 ; =0xC3D2E1F0
- str r2, [r0, #0xc]
- str r1, [r0, #0x10]
- mov r1, #0x0
- str r1, [r0, #0x14]
- str r1, [r0, #0x18]
- str r1, [r0, #0x1c]
- bx lr
- .balign 4
-_020D31A4: .word 0x67452301
-_020D31A8: .word 0xEFCDAB89
-_020D31AC: .word 0x98BADCFE
-_020D31B0: .word 0x10325476
-_020D31B4: .word 0xC3D2E1F0
-
- arm_func_start MATHi_CalcHMAC
-MATHi_CalcHMAC: ; 0x020D31B8
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0xc4
- ldr r5, [sp, #0xe0]
- ldr r4, [sp, #0xe4]
- movs r9, r0
- mov r8, r1
- mov r7, r2
- mov r6, r3
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- cmp r8, #0x0
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- cmp r7, #0x0
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- cmp r6, #0x0
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- cmp r5, #0x0
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- cmp r4, #0x0
- addeq sp, sp, #0xc4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- ldr r0, [r4, #0x4]
- cmp r5, r0
- ble _020D3278
- ldr r0, [r4, #0x8]
- ldr r1, [r4, #0x10]
- blx r1
- ldr r0, [r4, #0x8]
- ldr r3, [r4, #0x14]
- mov r1, r6
- mov r2, r5
- blx r3
- ldr r0, [r4, #0x8]
- ldr r2, [r4, #0x18]
- add r1, sp, #0x0
- blx r2
- ldr r5, [r4, #0x0]
- add r6, sp, #0x0
-_020D3278:
- cmp r5, #0x0
- mov r0, #0x0
- ble _020D32A0
- add r2, sp, #0x40
-_020D3288:
- ldrb r1, [r6, r0]
- add r0, r0, #0x1
- cmp r0, r5
- eor r1, r1, #0x36
- strb r1, [r2], #0x1
- blt _020D3288
-_020D32A0:
- ldr r1, [r4, #0x4]
- cmp r0, r1
- bge _020D32CC
- add r1, sp, #0x40
- add r3, r1, r0
- mov r2, #0x36
-_020D32B8:
- strb r2, [r3], #0x1
- ldr r1, [r4, #0x4]
- add r0, r0, #0x1
- cmp r0, r1
- blt _020D32B8
-_020D32CC:
- ldr r0, [r4, #0x8]
- ldr r1, [r4, #0x10]
- blx r1
- ldr r0, [r4, #0x8]
- ldr r2, [r4, #0x4]
- ldr r3, [r4, #0x14]
- add r1, sp, #0x40
- blx r3
- ldr r0, [r4, #0x8]
- ldr r3, [r4, #0x14]
- mov r1, r8
- mov r2, r7
- blx r3
- ldr r0, [r4, #0x8]
- ldr r1, [r4, #0xc]
- ldr r2, [r4, #0x18]
- blx r2
- cmp r5, #0x0
- mov r2, #0x0
- ble _020D3338
- add r1, sp, #0x80
-_020D3320:
- ldrb r0, [r6, r2]
- add r2, r2, #0x1
- cmp r2, r5
- eor r0, r0, #0x5c
- strb r0, [r1], #0x1
- blt _020D3320
-_020D3338:
- ldr r0, [r4, #0x4]
- cmp r2, r0
- bge _020D3364
- add r0, sp, #0x80
- add r3, r0, r2
- mov r1, #0x5c
-_020D3350:
- strb r1, [r3], #0x1
- ldr r0, [r4, #0x4]
- add r2, r2, #0x1
- cmp r2, r0
- blt _020D3350
-_020D3364:
- ldr r0, [r4, #0x8]
- ldr r1, [r4, #0x10]
- blx r1
- ldr r0, [r4, #0x8]
- ldr r2, [r4, #0x4]
- ldr r3, [r4, #0x14]
- add r1, sp, #0x80
- blx r3
- ldr r0, [r4, #0x8]
- ldr r1, [r4, #0xc]
- ldr r2, [r4, #0x0]
- ldr r3, [r4, #0x14]
- blx r3
- ldr r0, [r4, #0x8]
- ldr r2, [r4, #0x18]
- mov r1, r9
- blx r2
- add sp, sp, #0xc4
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_020D33B4: .word 0x00FF00FF
-_020D33B8: .word 0x5A827999
-_020D33BC: .word 0x6ED9EBA1
-_020D33C0: .word 0x8F1BBCDC
-_020D33C4: .word 0xCA62C1D6
-
- arm_func_start MATHi_SHA1ProcessBlock
-MATHi_SHA1ProcessBlock: ; 0x020D33C8
- stmdb sp!, {r4-r12,lr}
- ldmia r0, {r3,r9-r12}
- sub sp, sp, #0x84
- str r2, [sp, #0x80]
-_020D33D8:
- ldr r8, _020D33B8 ; =0x5A827999
- ldr r7, _020D33B4 ; =0x00FF00FF
- mov r6, sp
- mov r5, #0x0
-_020D33E8:
- ldr r4, [r1], #0x4
- add r2, r8, r12
- add r2, r2, r3, ror #0x1B
- and lr, r4, r7
- and r4, r7, r4, ror #0x18
- orr r4, r4, lr, ror #0x8
- str r4, [r6, #0x40]
- str r4, [r6], #0x4
- add r2, r2, r4
- eor r4, r10, r11
- and r4, r4, r9
- eor r4, r4, r11
- add r2, r2, r4
- mov r9, r9, ror #0x2
- mov r12, r11
- mov r11, r10
- mov r10, r9
- mov r9, r3
- mov r3, r2
- add r5, r5, #0x4
- cmp r5, #0x40
- blt _020D33E8
- mov r7, #0x0
- mov r6, sp
-_020D3448:
- ldr r2, [r6, #0x0]
- ldr r5, [r6, #0x8]
- ldr r4, [r6, #0x20]
- ldr lr, [r6, #0x34]
- eor r2, r2, r5
- eor r4, r4, lr
- eor r2, r2, r4
- mov r2, r2, ror #0x1F
- str r2, [r6, #0x40]
- str r2, [r6], #0x4
- add r2, r2, r12
- add r2, r2, r8
- add r2, r2, r3, ror #0x1B
- eor r4, r10, r11
- and r4, r4, r9
- eor r4, r4, r11
- add r2, r2, r4
- mov r9, r9, ror #0x2
- mov r12, r11
- mov r11, r10
- mov r10, r9
- mov r9, r3
- mov r3, r2
- add r7, r7, #0x4
- cmp r7, #0x10
- blt _020D3448
- ldr r8, _020D33BC ; =0x6ED9EBA1
- mov r7, #0x0
-_020D34B8:
- ldr r2, [r6, #0x0]
- ldr r4, [r6, #0x8]
- ldr lr, [r6, #0x20]
- ldr r5, [r6, #0x34]
- eor r2, r2, r4
- eor lr, lr, r5
- eor r2, r2, lr
- mov r2, r2, ror #0x1F
- str r2, [r6, #0x40]
- str r2, [r6], #0x4
- add r2, r2, r12
- add r2, r2, r8
- add r2, r2, r3, ror #0x1B
- eor lr, r9, r10
- eor lr, lr, r11
- add r2, r2, lr
- mov r9, r9, ror #0x2
- mov r12, r11
- mov r11, r10
- mov r10, r9
- mov r9, r3
- mov r3, r2
- add r7, r7, #0x1
- cmp r7, #0xc
- moveq r6, sp
- cmp r7, #0x14
- blt _020D34B8
- ldr r8, _020D33C0 ; =0x8F1BBCDC
- mov r7, #0x0
-_020D352C:
- ldr r2, [r6, #0x0]
- ldr lr, [r6, #0x8]
- ldr r5, [r6, #0x20]
- ldr r4, [r6, #0x34]
- eor r2, r2, lr
- eor r5, r5, r4
- eor r2, r2, r5
- mov r2, r2, ror #0x1F
- str r2, [r6, #0x40]
- str r2, [r6], #0x4
- add r2, r2, r12
- add r2, r2, r8
- add r2, r2, r3, ror #0x1B
- orr r5, r9, r10
- and r5, r5, r11
- and r4, r9, r10
- orr r5, r5, r4
- add r2, r2, r5
- mov r9, r9, ror #0x2
- mov r12, r11
- mov r11, r10
- mov r10, r9
- mov r9, r3
- mov r3, r2
- add r7, r7, #0x1
- cmp r7, #0x8
- moveq r6, sp
- cmp r7, #0x14
- blt _020D352C
- ldr r8, _020D33C4 ; =0xCA62C1D6
- mov r7, #0x0
-_020D35A8:
- ldr r2, [r6, #0x0]
- ldr r5, [r6, #0x8]
- ldr r4, [r6, #0x20]
- ldr lr, [r6, #0x34]
- eor r2, r2, r5
- eor r4, r4, lr
- eor r2, r2, r4
- mov r2, r2, ror #0x1F
- str r2, [r6, #0x40]
- str r2, [r6], #0x4
- add r2, r2, r12
- add r2, r2, r8
- add r2, r2, r3, ror #0x1B
- eor r4, r9, r10
- eor r4, r4, r11
- add r2, r2, r4
- mov r9, r9, ror #0x2
- mov r12, r11
- mov r11, r10
- mov r10, r9
- mov r9, r3
- mov r3, r2
- add r7, r7, #0x1
- cmp r7, #0x4
- moveq r6, sp
- cmp r7, #0x14
- blt _020D35A8
- ldmia r0, {r2,r4,r6-r7,lr}
- add r3, r3, r2
- add r9, r9, r4
- add r10, r10, r6
- add r11, r11, r7
- add r12, r12, lr
- stmia r0, {r3,r9-r12}
- ldr lr, [sp, #0x80]
- subs lr, lr, #0x40
- str lr, [sp, #0x80]
- bgt _020D33D8
- add sp, sp, #0x84
- ldmia sp!, {r4-r12,pc}
-
- arm_func_start CP_SaveContext
-CP_SaveContext: ; 0x020D3648
- ldr r1, _020D3684 ; =0x04000290
- stmdb sp!, {r4}
- ldmia r1, {r2-r4,r12}
- stmia r0!, {r2-r4,r12}
- ldrh r12, [r1, #-0x10]
- add r1, r1, #0x28
- ldmia r1, {r2-r3}
- stmia r0!, {r2-r3}
- and r12, r12, #0x3
- ldrh r2, [r1, #-0x8]
- strh r12, [r0, #0x0]
- and r2, r2, #0x1
- strh r2, [r0, #0x2]
- ldmia sp!, {r4}
- bx lr
- .balign 4
-_020D3684: .word 0x04000290
-
- arm_func_start CP_RestoreContext
-CP_RestoreContext: ; 0x020D3688
- stmdb sp!, {r4}
- ldr r1, _020D36C0 ; =0x04000290
- ldmia r0, {r2-r4,r12}
- stmia r1, {r2-r4,r12}
- ldrh r2, [r0, #0x18]
- ldrh r3, [r0, #0x1a]
- strh r2, [r1, #-0x10]
- strh r3, [r1, #0x20]
- add r0, r0, #0x10
- add r1, r1, #0x28
- ldmia r0, {r2-r3}
- stmia r1, {r2-r3}
- ldmia sp!, {r4}
- bx lr
- .balign 4
-_020D36C0: .word 0x04000290
-
- arm_func_start TP_CheckError
-TP_CheckError: ; 0x020D36C4
- ldr r1, _020D36D4 ; =0x021D5474
- ldrh r1, [r1, #0x34]
- and r0, r1, r0
- bx lr
- .balign 4
-_020D36D4: .word 0x021D5474
-
- arm_func_start TP_WaitBusy
-TP_WaitBusy: ; 0x020D36D8
- ldr r1, _020D36EC ; =0x021D5474
-_020D36DC:
- ldrh r2, [r1, #0x36]
- ands r2, r2, r0
- bne _020D36DC
- bx lr
- .balign 4
-_020D36EC: .word 0x021D5474
-
- arm_func_start TP_GetCalibratedPoint
-TP_GetCalibratedPoint: ; 0x020D36F0
- stmdb sp!, {r4-r6,lr}
- ldr r2, _020D3818 ; =0x021D5474
- ldrh r2, [r2, #0x30]
- cmp r2, #0x0
- bne _020D372C
- ldrh r3, [r1, #0x0]
- ldrh r2, [r1, #0x2]
- strh r3, [r0, #0x0]
- strh r2, [r0, #0x2]
- ldrh r2, [r1, #0x4]
- ldrh r1, [r1, #0x6]
- strh r2, [r0, #0x4]
- strh r1, [r0, #0x6]
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D372C:
- ldrh r3, [r1, #0x4]
- ldr r2, _020D381C ; =0x021D548C
- strh r3, [r0, #0x4]
- ldrh r3, [r1, #0x6]
- strh r3, [r0, #0x6]
- ldrh r3, [r1, #0x4]
- cmp r3, #0x0
- moveq r1, #0x0
- streqh r1, [r0, #0x0]
- streqh r1, [r0, #0x2]
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrh r4, [r1, #0x0]
- ldr r3, [r2, #0x0]
- ldr lr, [r2, #0x8]
- mov r12, r4, lsl #0x2
- mov r4, r12, asr #0x1f
- subs r12, r12, r3
- sbc r3, r4, r3, asr #0x1f
- umull r6, r5, lr, r12
- mla r5, lr, r3, r5
- mov r3, lr, asr #0x1f
- mla r5, r3, r12, r5
- mov r3, r6, lsr #0x16
- orr r3, r3, r5, lsl #0xa
- strh r3, [r0, #0x0]
- ldrsh r3, [r0, #0x0]
- cmp r3, #0x0
- movlt r3, #0x0
- strlth r3, [r0, #0x0]
- blt _020D37B4
- cmp r3, #0xff
- movgt r3, #0xff
- strgth r3, [r0, #0x0]
-_020D37B4:
- ldrh r3, [r1, #0x2]
- ldr r1, [r2, #0xc]
- ldr r12, [r2, #0x14]
- mov r3, r3, lsl #0x2
- mov r2, r3, asr #0x1f
- subs r3, r3, r1
- sbc r1, r2, r1, asr #0x1f
- umull r4, lr, r12, r3
- mla lr, r12, r1, lr
- mov r1, r12, asr #0x1f
- mla lr, r1, r3, lr
- mov r1, r4, lsr #0x16
- orr r1, r1, lr, lsl #0xa
- strh r1, [r0, #0x2]
- ldrsh r1, [r0, #0x2]
- cmp r1, #0x0
- movlt r1, #0x0
- strlth r1, [r0, #0x2]
- ldmltia sp!, {r4-r6,lr}
- bxlt lr
- cmp r1, #0xbf
- movgt r1, #0xbf
- strgth r1, [r0, #0x2]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020D3818: .word 0x021D5474
-_020D381C: .word 0x021D548C
-
- arm_func_start TP_CalcCalibrateParam
-TP_CalcCalibrateParam:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r6, r1
- mov r7, r0
- mov r5, r2
- mov r4, r3
- cmp r6, #0x1000
- bhs _020D3860
- cmp r5, #0x1000
- bhs _020D3860
- ldrh r8, [sp, #0x2c]
- cmp r8, #0x1000
- bhs _020D3860
- ldrh r3, [sp, #0x30]
- cmp r3, #0x1000
- blo _020D3870
-_020D3860:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D3870:
- cmp r4, #0x100
- bhs _020D389C
- ldrh r2, [sp, #0x34]
- cmp r2, #0x100
- bhs _020D389C
- ldrh r1, [sp, #0x28]
- cmp r1, #0xc0
- bhs _020D389C
- ldrh r0, [sp, #0x38]
- cmp r0, #0xc0
- blo _020D38AC
-_020D389C:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D38AC:
- cmp r4, r2
- beq _020D38CC
- cmp r1, r0
- beq _020D38CC
- cmp r6, r8
- beq _020D38CC
- cmp r5, r3
- bne _020D38DC
-_020D38CC:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D38DC:
- bl OS_DisableInterrupts
- ldrh r1, [sp, #0x2c]
- ldr r3, _020D3A80 ; =0x04000280
- ldr fp, _020D3A84 ; =0x04000290
- str r1, [sp, #0x0]
- ldr r2, [sp, #0x0]
- ldrh r1, [sp, #0x34]
- sub r9, r6, r2
- mov r2, #0x0
- mov r12, r9, lsl #0x8
- strh r2, [r3, #0x0]
- str r12, [r11, #0x0]
- ldrh r8, [sp, #0x30]
- ldrh r10, [sp, #0x38]
- ldrh r9, [sp, #0x28]
- ldr fp, _020D3A88 ; =0x04000298
- sub r12, r4, r1
- str r12, [r11, #0x0]
- str r2, [r11, #0x4]
- sub r11, r5, r8
- sub r2, r9, r10
-_020D3930:
- ldrh r12, [r3, #0x0]
- ands r12, r12, #0x8000
- bne _020D3930
- ldr ip, _020D3A8C ; =0x040002A0
- mov r11, r11, lsl #0x8
- ldr lr, [r12, #0x0]
- mov r12, #0x0
- strh r12, [r3, #0x0]
- ldr r3, _020D3A84 ; =0x04000290
- cmp lr, #0x8000
- str r11, [r3, #0x0]
- ldr r3, _020D3A88 ; =0x04000298
- str r2, [r3, #0x0]
- mov r2, r3
- str r12, [r2, #0x4]
- bge _020D3980
- mov r2, #0x8000
- rsb r2, r2, #0x0
- cmp lr, r2
- bge _020D3994
-_020D3980:
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D3994:
- strh lr, [r7, #0x4]
- ldrsh r11, [r7, #0x4]
- add r3, r4, r1
- ldr r1, [sp, #0x0]
- add r4, r6, r1
- mul r1, r11, r3
- mov r3, r4, lsl #0x8
- sub r1, r3, r1
- mov r1, r1, lsl #0x9
- mov r1, r1, asr #0x10
- cmp r1, #0x8000
- bge _020D39CC
- cmp r1, r2
- bge _020D39E0
-_020D39CC:
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D39E0:
- ldr r2, _020D3A80 ; =0x04000280
- strh r1, [r7, #0x0]
-_020D39E8:
- ldrh r1, [r2, #0x0]
- ands r1, r1, #0x8000
- bne _020D39E8
- ldr r1, _020D3A8C ; =0x040002A0
- ldr r4, [r1, #0x0]
- bl OS_RestoreInterrupts
- cmp r4, #0x8000
- bge _020D3A18
- mov r0, #0x8000
- rsb r1, r0, #0x0
- cmp r4, r1
- bge _020D3A28
-_020D3A18:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D3A28:
- strh r4, [r7, #0x6]
- ldrsh r2, [r7, #0x6]
- add r0, r9, r10
- add r3, r5, r8
- mul r0, r2, r0
- mov r2, r3, lsl #0x8
- sub r0, r2, r0
- mov r0, r0, lsl #0x9
- mov r0, r0, asr #0x10
- cmp r0, #0x8000
- bge _020D3A5C
- cmp r0, r1
- bge _020D3A6C
-_020D3A5C:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,lr}
- bx lr
-_020D3A6C:
- strh r0, [r7, #0x2]
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020D3A80: .word 0x04000280
-_020D3A84: .word 0x04000290
-_020D3A88: .word 0x04000298
-_020D3A8C: .word 0x040002A0
-
- arm_func_start TP_GetLatestIndexInAuto
-TP_GetLatestIndexInAuto: ; 0x020D3A90
- ldr r0, _020D3A9C ; =0x021D5474
- ldrh r0, [r0, #0xc]
- bx lr
- .balign 4
-_020D3A9C: .word 0x021D5474
-
- arm_func_start TP_GetLatestRawPointInAuto
-TP_GetLatestRawPointInAuto: ; 0x020D3AA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r1, #0x3
- ldr lr, _020D3C10 ; =0x021D5474
- strh r1, [r0, #0x6]
- ldrh r1, [lr, #0xe]
- ldrh r3, [lr, #0xc]
- cmp r1, #0x1
- beq _020D3AD0
- ldrh r1, [lr, #0x14]
- cmp r1, #0x1
- bne _020D3B0C
-_020D3AD0:
- ldr r1, _020D3C10 ; =0x021D5474
- mov r2, r3, lsl #0x3
- ldr r1, [r1, #0x10]
- add sp, sp, #0x4
- add r3, r1, r3, lsl #0x3
- ldrh r2, [r1, r2]
- ldrh r1, [r3, #0x2]
- strh r2, [r0, #0x0]
- strh r1, [r0, #0x2]
- ldrh r2, [r3, #0x4]
- ldrh r1, [r3, #0x6]
- strh r2, [r0, #0x4]
- strh r1, [r0, #0x6]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D3B0C:
- add r1, r0, #0x6
- mov r12, #0x0
- b _020D3BE0
-_020D3B18:
- subs r5, r3, r12
- ldr r2, [lr, #0x10]
- addmi r5, r5, r4
- add r2, r2, r5, lsl #0x3
- ldrh r4, [r2, #0x4]
- cmp r4, #0x0
- bne _020D3B60
- ldrh r3, [r2, #0x0]
- ldrh r1, [r2, #0x2]
- add sp, sp, #0x4
- strh r3, [r0, #0x0]
- strh r1, [r0, #0x2]
- ldrh r3, [r2, #0x4]
- ldrh r1, [r2, #0x6]
- strh r3, [r0, #0x4]
- strh r1, [r0, #0x6]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D3B60:
- ldrh r4, [r0, #0x6]
- ands r4, r4, #0x1
- beq _020D3B90
- ldrh r4, [r2, #0x6]
- ands r4, r4, #0x1
- bne _020D3B90
- ldrh r4, [r2, #0x0]
- cmp r12, #0x0
- strh r4, [r0, #0x0]
- ldrneh r4, [r1, #0x0]
- bicne r4, r4, #0x1
- strneh r4, [r1, #0x0]
-_020D3B90:
- ldrh r4, [r0, #0x6]
- ands r4, r4, #0x2
- beq _020D3BC0
- ldrh r4, [r2, #0x6]
- ands r4, r4, #0x2
- bne _020D3BC0
- ldrh r2, [r2, #0x2]
- cmp r12, #0x0
- strh r2, [r0, #0x2]
- ldrneh r2, [r1, #0x0]
- bicne r2, r2, #0x2
- strneh r2, [r1, #0x0]
-_020D3BC0:
- ldrh r2, [r0, #0x6]
- cmp r2, #0x0
- moveq r1, #0x1
- streqh r1, [r0, #0x4]
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- add r12, r12, #0x1
-_020D3BE0:
- ldrh r2, [lr, #0xe]
- cmp r12, r2
- bge _020D3BFC
- ldrh r4, [lr, #0x14]
- sub r2, r4, #0x1
- cmp r12, r2
- blt _020D3B18
-_020D3BFC:
- mov r1, #0x1
- strh r1, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D3C10: .word 0x021D5474
-
- arm_func_start TP_RequestAutoSamplingStopAsync
-TP_RequestAutoSamplingStopAsync: ; 0x020D3C14
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r1, _020D3CB0 ; =0x03000200
- mov r0, #0x6
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020D3C30:
- cmp r0, #0x0
- movge r0, #0x1
- movlt r0, #0x0
- cmp r0, #0x0
- bne _020D3C84
- mov r0, r4
- bl OS_RestoreInterrupts
- ldr r0, _020D3CB4
- ldrh r1, [r0, #0x34]
- ldr r3, [r0]
- orr r1, r1, #0x4
- strh r1, [r0, #0x34]
- cmp r3, #0x0
- ldmeqia sp!, {r4, lr}
- bxeq lr
- mov r0, #0x2
- mov r1, #0x4
- mov r2, #0x0
- blx r3
- ldmia sp!, {r4, lr}
- bx lr
-_020D3C84:
- ldr r1, _020D3CB4
- mov r0, r4
- ldrh r2, [r1, #0x36]
- orr r2, r2, #0x4
- strh r2, [r1, #0x36]
- ldrh r2, [r1, #0x34]
- bic r2, r2, #0x4
- strh r2, [r1, #0x34]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4, lr}
- bx lr
-_020D3CB0: .word 0x03000200
-_020D3CB4: .word 0x021D5474
-
- arm_func_start TP_RequestAutoSamplingStartAsync
-TP_RequestAutoSamplingStartAsync: ; 0x020D3CB8
- stmdb sp!, {r4-r6,lr}
- ldr r4, _020D3DC0 ; =0x021D5474
- mov r5, r1
- mov r12, #0x0
- mov r6, r0
- str r2, [r4, #0x10]
- strh r12, [r4, #0xc]
- strh r5, [r4, #0xe]
- strh r3, [r4, #0x14]
- cmp r3, #0x0
- bls _020D3D00
- mov r1, r12
-_020D3CE8:
- ldr r0, [r4, #0x10]
- add r0, r0, r12, lsl #0x3
- add r12, r12, #0x1
- strh r1, [r0, #0x4]
- cmp r12, r3
- blo _020D3CE8
-_020D3D00:
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, _020D3DC4 ; =0x02000100
- and r1, r5, #0xff
- orr r1, r1, r0
- mov r0, #0x6
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020D3D20:
- cmp r0, #0x0
- movlt r0, #0x0
- blt _020D3D4C
- ldr r1, _020D3DC8
- mov r0, #0x6
- orr r1, r6, r1
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- movge r0, #0x1
-_020D3D4C:
- ands r0, r0, #0xFF
- bne _020D3D94
- mov r0, r4
- bl OS_RestoreInterrupts
- ldr r0, _020D3DC0
- ldrh r1, [r0, #0x34]
- ldr r3, [r0]
- orr r1, r1, #0x2
- strh r1, [r0, #0x34]
- cmp r3, #0x0
- ldmeqia sp!, {r4-r6, lr}
- bxeq lr
- mov r0, #0x1
- mov r1, #0x4
- mov r2, #0x0
- blx r3
- ldmia sp!, {r4-r6, lr}
- bx lr
-_020D3D94:
- ldr r1, _020D3DC0
- mov r0, r4
- ldrh r2, [r1, #0x36]
- orr r2, r2, #0x2
- strh r2, [r1, #0x36]
- ldrh r2, [r1, #0x34]
- bic r2, r2, #0x2
- strh r2, [r1, #0x34]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r6, lr}
- bx lr
-_020D3DC0: .word 0x021D5474
-_020D3DC4: .word 0x02000100
-_020D3DC8: .word 0x01010000
-
- arm_func_start TP_WaitRawResult
-TP_WaitRawResult: ; 0x020D3DCC
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, #0x1
- bl TP_WaitBusy
- ldr r1, _020D3E20 ; =0x021D5474
- ldrh r0, [r1, #0x34]
- ands r0, r0, #0x1
- movne r0, #0x1
- ldmneia sp!, {r4,lr}
- bxne lr
- ldrh r3, [r1, #0x4]
- ldrh r2, [r1, #0x6]
- mov r0, #0x0
- strh r3, [r4, #0x0]
- strh r2, [r4, #0x2]
- ldrh r2, [r1, #0x8]
- ldrh r1, [r1, #0xa]
- strh r2, [r4, #0x4]
- strh r1, [r4, #0x6]
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020D3E20: .word 0x021D5474
-
- arm_func_start TP_RequestSamplingAsync
-TP_RequestSamplingAsync: ; 0x020D3E24
- stmdb sp!, {r4,lr}
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, #0x6
- mov r1, #0x3000000
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020D3E40:
- cmp r0, #0x0
- movge r0, #0x1
- movlt r0, #0x0
- cmp r0, #0x0
- bne _020D3E94
- mov r0, r4
- bl OS_RestoreInterrupts
- ldr r0, _20D3EC0
- ldrh r1, [r0, #0x34]
- ldr r3, [r0]
- orr r1, r1, #0x1
- strh r1, [r0, #0x34]
- cmp r3, #0x0
- ldmeqia sp!, {r4, lr}
- bxeq lr
- mov r0, #0x0
- mov r2, r0
- mov r1, #0x4
- blx r3
- ldmia sp!, {r4, lr}
- bx lr
-_020D3E94:
- ldr r1, _20D3EC0
- mov r0, r4
- ldrh r2, [r1, #0x36]
- orr r2, r2, #0x1
- strh r2, [r1, #0x36]
- ldrh r2, [r1, #0x34]
- bic r2, r2, #0x1
- strh r2, [r1, #0x34]
- bl OS_RestoreInterrupts
- ldmia sp!, {r4, lr}
- bx lr
-_20D3EC0: .word 0x021D5474
-
- arm_func_start TP_SetCalibrateParam
-TP_SetCalibrateParam: ; 0x020D3EC4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- movs r4, r0
- ldreq r0, _020D3FF8 ; =0x021D5474
- moveq r1, #0x0
- streqh r1, [r0, #0x30]
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- bl OS_DisableInterrupts
- ldrsh lr, [r4, #0x4]
- cmp lr, #0x0
- beq _020D3F50
- ldr r5, _020D3FFC ; =0x04000280
- mov r12, #0x0
- ldr r2, _020D4000 ; =0x04000290
- strh r12, [r5, #0x0]
- mov r3, #0x10000000
- ldr r1, _020D4004 ; =0x04000298
- str r3, [r2, #0x0]
- str lr, [r1, #0x0]
- str r12, [r1, #0x4]
- ldrsh r2, [r4, #0x0]
- ldr r1, _020D3FF8 ; =0x021D5474
- str r2, [r1, #0x18]
- ldrsh r2, [r4, #0x4]
- str r2, [r1, #0x1c]
-_020D3F30:
- ldrh r1, [r5, #0x0]
- ands r1, r1, #0x8000
- bne _020D3F30
- ldr r2, _020D4008 ; =0x040002A0
- ldr r1, _020D3FF8 ; =0x021D5474
- ldr r2, [r2, #0x0]
- str r2, [r1, #0x20]
- b _020D3F64
-_020D3F50:
- ldr r1, _020D3FF8 ; =0x021D5474
- mov r2, #0x0
- str r2, [r1, #0x18]
- str r2, [r1, #0x1c]
- str r2, [r1, #0x20]
-_020D3F64:
- ldrsh r5, [r4, #0x6]
- cmp r5, #0x0
- beq _020D3FC8
- ldr ip, _020D3FFC ; =0x04000280
- mov lr, #0x0
- ldr r2, _020D4000 ; =0x04000290
- strh lr, [r12, #0x0]
- mov r3, #0x10000000
- ldr r1, _020D4004 ; =0x04000298
- str r3, [r2, #0x0]
- str r5, [r1, #0x0]
- str lr, [r1, #0x4]
- ldrsh r2, [r4, #0x2]
- ldr r1, _020D3FF8 ; =0x021D5474
- str r2, [r1, #0x24]
- ldrsh r2, [r4, #0x6]
- str r2, [r1, #0x28]
-_020D3FA8:
- ldrh r1, [r12, #0x0]
- ands r1, r1, #0x8000
- bne _020D3FA8
- ldr r2, _020D4008 ; =0x040002A0
- ldr r1, _020D3FF8 ; =0x021D5474
- ldr r2, [r2, #0x0]
- str r2, [r1, #0x2c]
- b _020D3FDC
-_020D3FC8:
- ldr r1, _020D3FF8 ; =0x021D5474
- mov r2, #0x0
- str r2, [r1, #0x24]
- str r2, [r1, #0x28]
- str r2, [r1, #0x2c]
-_020D3FDC:
- bl OS_RestoreInterrupts
- ldr r0, _020D3FF8 ; =0x021D5474
- mov r1, #0x1
- strh r1, [r0, #0x30]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020D3FF8: .word 0x021D5474
-_020D3FFC: .word 0x04000280
-_020D4000: .word 0x04000290
-_020D4004: .word 0x04000298
-_020D4008: .word 0x040002A0
-
- arm_func_start TP_GetUserInfo
-TP_GetUserInfo: ; 0x020D400C
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x18
- ldr ip, _020D40B4 ; =0x027FFC80
- mov r4, r0
- ldrh r1, [r12, #0x58]
- ldrh r2, [r12, #0x5a]
- ldrb r3, [r12, #0x5c]
- cmp r1, #0x0
- ldrb lr, [r12, #0x5d]
- ldrh r6, [r12, #0x5e]
- ldrh r5, [r12, #0x60]
- ldrb r0, [r12, #0x62]
- ldrb r12, [r12, #0x63]
- bne _020D405C
- cmp r6, #0x0
- bne _020D405C
- cmp r2, #0x0
- bne _020D405C
- cmp r5, #0x0
- beq _020D4080
-_020D405C:
- str lr, [sp, #0x0]
- str r6, [sp, #0x4]
- str r5, [sp, #0x8]
- str r0, [sp, #0xc]
- mov r0, r4
- str r12, [sp, #0x10]
- bl TP_CalcCalibrateParam
-_020D4078:
- cmp r0, #0
- beq _020D40A4
-_020D4080:
- mov r0, #0x0
- strh r0, [r4, #0x0]
- strh r0, [r4, #0x2]
- strh r0, [r4, #0x4]
- strh r0, [r4, #0x6]
- add sp, sp, #0x18
- mov r0, #0x1
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D40A4:
- mov r0, #0x1
- add sp, sp, #0x18
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D40B4: .word 0x027FFC80
-
- arm_func_start TP_Init
-TP_Init: ; 0x020D40B8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020D413C ; =0x021D5470
- ldrh r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r1, #0x1
- strh r1, [r0, #0x0]
- bl PXI_Init
- ldr r0, _020D4140 ; =0x021D5474
- mov r1, #0x0
- strh r1, [r0, #0x32]
- strh r1, [r0, #0x36]
- strh r1, [r0, #0xc]
- str r1, [r0, #0x0]
- str r1, [r0, #0x10]
- strh r1, [r0, #0x30]
- strh r1, [r0, #0x34]
- mov r5, #0x6
- mov r4, #0x1
-_020D4110:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
-_020D411C:
- cmp r0, #0x0
- beq _020D4110
- ldr r1, _020D4144
- mov r0, #0x6
- bl PXI_SetFifoRecvCallback
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D413C: .word 0x021D5470
-_020D4140: .word 0x021D5474
-_020D4144: .word FUN_020D4148
-
- arm_func_start FUN_020D4148
-FUN_020D4148: ; 0x020D4148
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- mov r0, r1, lsl #0x10
- mov r3, r0, lsr #0x10
- and r0, r3, #0x7f00
- mov r0, r0, lsl #0x8
- cmp r2, #0x0
- mov r0, r0, lsr #0x10
- beq _020D41AC
- ldr r1, _020D43FC ; =0x021D5474
- mov r2, #0x1
- ldrh r4, [r1, #0x34]
- ldr r3, [r1, #0x0]
- orr r2, r4, r2, lsl r0
- cmp r3, #0x0
- strh r2, [r1, #0x34]
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r1, #0x4
- mov r2, #0x0
- blx r3
- add sp, sp, #0x8
- ldmia sp!, {r4,lr}
- bx lr
-_020D41AC:
- cmp r0, #0x10
- bne _020D427C
- ldr r1, _020D43FC ; =0x021D5474
- ldrh r3, [r1, #0xc]
- ldrh r2, [r1, #0x14]
- add r3, r3, #0x1
- strh r3, [r1, #0xc]
- ldrh r3, [r1, #0xc]
- cmp r3, r2
- movcs r2, #0x0
- strcsh r2, [r1, #0xc]
- ldr r1, _020D4400 ; =0x027FFFAA
- ldr r2, _020D43FC ; =0x021D5474
- ldrh r3, [r1, #0x0]
- ldr r1, _020D4404 ; =0x027FFFAC
- ldrh r12, [r2, #0xc]
- strh r3, [sp, #0x0]
- ldrh r1, [r1, #0x0]
- ldr r4, [r2, #0x10]
- mov lr, r12, lsl #0x3
- strh r1, [sp, #0x2]
- ldr r3, [sp, #0x0]
- add r1, r4, r12, lsl #0x3
- mov r3, r3, lsl #0x14
- mov r3, r3, lsr #0x14
- strh r3, [r4, lr]
- ldr r3, [sp, #0x0]
- mov r3, r3, lsl #0x8
- mov r3, r3, lsr #0x14
- strh r3, [r1, #0x2]
- ldr r3, [sp, #0x0]
- mov r3, r3, lsl #0x7
- mov r3, r3, lsr #0x1f
- and r3, r3, #0xff
- strh r3, [r1, #0x4]
- ldr r3, [sp, #0x0]
- mov r3, r3, lsl #0x5
- mov r3, r3, lsr #0x1e
- and r3, r3, #0xff
- strh r3, [r1, #0x6]
- ldr r3, [r2, #0x0]
- cmp r3, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrh r2, [r2, #0xc]
- mov r1, #0x0
- and r2, r2, #0xff
- blx r3
- add sp, sp, #0x8
- ldmia sp!, {r4,lr}
- bx lr
-_020D427C:
- ands r1, r1, #0x1000000
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4,lr}
- bxeq lr
- and r1, r3, #0xff
- cmp r1, #0x4
- addls pc, pc, r1, lsl #0x2
- b _020D43EC
-_020D429C:
- b _020D42B0
- b _020D43EC
- b _020D4390
- b _020D4398
- b _020D4388
-_020D42B0:
- cmp r0, #0x0
- beq _020D42D4
- cmp r0, #0x1
- beq _020D4338
- cmp r0, #0x2
- ldreq r1, _020D43FC
- moveq r2, #0x0
- streqh r2, [r1, #0x32]
- b _020D4344
-_020D42D4:
- ldr r1, _020D4400
- ldr r3, _020D4404
- ldrh ip, [r1]
- ldr r1, _020D43FC
- mov r2, #0x0
- strh ip, [sp, #0x4]
- ldrh r3, [r3]
- strh r3, [sp, #0x6]
- ldr ip, [sp, #0x4]
- strh r2, [r1, #0x32]
- mov r3, ip, lsl #0x7
- mov r2, ip, lsl #0x5
- mov lr, ip, lsl #0x14
- mov ip, ip, lsl #0x8
- mov r3, r3, lsr #0x1F
- mov r2, r2, lsr #0x1E
- mov lr, lr, lsr #0x14
- mov ip, ip, lsr #0x14
- and r3, r3, #0xFF
- and r2, r2, #0xFF
- strh lr, [r1, #0x4]
- strh ip, [r1, #0x6]
- strh r3, [r1, #0x8]
- strh r2, [r1, #0xA]
- b _020D4344
-_020D4338:
- ldr r1, _020D43FC
- mov r2, #0x2
- strh r2, [r1, #0x32]
-_020D4344:
- ldr r1, _020D43FC
- mov r2, #0x1
- ldrh ip, [r1, #0x36]
- mvn r2, r2, lsl r0
- ldr r3, [r1]
- and r2, ip, r2
- cmp r3, #0x0
- strh r2, [r1, #0x36]
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4, lr}
- bxeq lr
- mov r1, #0x0
- mov r2, r1
- blx r3
- add sp, sp, #0x8
- ldmia sp!, {r4, lr}
- bx lr
-_020D4388:
- mov r4, #0x3
- b _020D439C
-_020D4390:
- mov r4, #0x1
- b _020D439C
-_020D4398:
- mov r4, #0x2
-_020D439C:
- ldr r1, _020D43FC
- mov lr, #0x1
- ldrh ip, [r1, #0x34]
- ldr r3, [r1]
- mvn r2, lr, lsl r0
- orr ip, ip, lr, lsl r0
- strh ip, [r1, #0x34]
- ldrh ip, [r1, #0x36]
- cmp r3, #0x0
- addeq sp, sp, #0x8
- and r2, ip, r2
- strh r2, [r1, #0x36]
- ldmeqia sp!, {r4, lr}
- bxeq lr
- and r1, r4, #0xff
- mov r2, #0x0
- blx r3
- add sp, sp, #0x8
- ldmia sp!, {r4, lr}
- bx lr
-_020D43EC:
- bl OS_Terminate
- add sp, sp, #0x8
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020D43FC: .word 0x021D5474
-_020D4400: .word 0x027FFFAA
-_020D4404: .word 0x027FFFAC
-
- arm_func_start MicWaitBusy
-MicWaitBusy: ; 0x020D4408
- ldr ip, _020D441C ; =0x021D54B0
-_020D440C:
- ldr r0, [r12, #0x0]
- cmp r0, #0x1
- beq _020D440C
- bx lr
- .balign 4
-_020D441C: .word 0x021D54B0
-
- arm_func_start MicGetResultCallback
-MicGetResultCallback: ; 0x020D4420
- ldr r1, _020D442C ; =0x021D54B0
- str r0, [r1, #0xc]
- bx lr
- .balign 4
-_020D442C: .word 0x021D54B0
-
- arm_func_start MicStopAutoSampling
-MicStopAutoSampling:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D4460 ; =0x03004200
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020D4448:
- cmp r0, #0x0
- movge r0, #0x1
- movlt r0, #0x0
- add sp, sp, #4
- ldmfd sp!, {lr}
- bx lr
-_020D4460: .word 0x03004200
-
- arm_func_start MicStartAutoSampling
-MicStartAutoSampling: ; 0x020D4464
- stmdb sp!, {r4-r6,lr}
- ldr ip, _020D4584 ; =0x02004100
- mov r6, r0
- mov r5, r1
- mov r4, r2
- orr r1, r3, r12
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
-_020D4488:
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- mov r0, r6, lsr #0x10
- orr r1, r0, #0x10000
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- ldr r1, _020D4588
- mov r0, #0x9
- and r1, r6, r1
- orr r1, r1, #0x20000
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- mov r0, r5, lsr #0x10
- orr r1, r0, #0x30000
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- ldr r1, _020D4588
- mov r0, #0x9
- and r1, r5, r1
- orr r1, r1, #0x40000
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- mov r0, r4, lsr #0x10
- orr r1, r0, #0x50000
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movlt r0, #0x0
- ldmltia sp!, {r4-r6, lr}
- bxlt lr
- ldr r0, _020D4588
- ldr r1, _020D458C
- and r0, r4, r0
- orr r1, r0, r1
- mov r0, #0x9
- mov r2, #0x0
- bl PXI_SendWordByFifo
- cmp r0, #0x0
- movge r0, #0x1
- movlt r0, #0x0
- ldmia sp!, {r4-r6, lr}
- bx lr
-_020D4584: .word 0x02004100
-_020D4588: .word 0x0000FFFF
-_020D458C: .word 0x01060000
-
- arm_func_start MicDoSampling
-MicDoSampling: ; 0x020D4590
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D45C4 ; =0x03004000
- mov r2, #0x0
- orr r1, r0, r1
- mov r0, #0x9
- bl PXI_SendWordByFifo
-_020D45AC:
- cmp r0, #0x0
- movge r0, #0x1
- movlt r0, #0x0
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020D45C4: .word 0x03004000
-
- arm_func_start MicCommonCallback
-MicCommonCallback: ; 0x020D45C8
- stmdb sp!, {r4,lr}
- mov r4, r1
- cmp r2, #0x0
- beq _020D4610
- ldr r0, _020D4700 ; =0x021D54B0
- ldr r2, _020D4700 ; =0x021D54B0
- ldr r1, [r0, #0x0]
- ldr r12, [r2, #0x4]
- cmp r1, #0x0
- movne r1, #0x0
- strne r1, [r0, #0x0]
- cmp r12, #0x0
- beq _020D4610
- ldr r1, [r2, #0x8]
- mov r3, #0x0
- mov r0, #0x6
- str r3, [r2, #0x4]
- blx r12
-_020D4610:
- and r0, r4, #0xff
- mov r1, r0, lsl #0x10
- and r2, r4, #0x7f00
- mov r0, r2, lsl #0x8
- mov r1, r1, lsr #0x10
- cmp r1, #0x4
- mov r2, r0, lsr #0x10
- addls pc, pc, r1, lsl #0x2
- b _020D4670
-_020D4634:
- b _020D4648
- b _020D4650
- b _020D4658
- b _020D4660
- b _020D4668
-_020D4648:
- mov r0, #0x0
- b _020D4674
-_020D4650:
- mov r0, #0x4
- b _020D4674
-_020D4658:
- mov r0, #0x2
- b _020D4674
-_020D4660:
- mov r0, #0x5
- b _020D4674
-_020D4668:
- mov r0, #0x1
- b _020D4674
-_020D4670:
- mov r0, #0x6
-_020D4674:
- cmp r2, #0x51
- bne _020D46A0
- ldr r1, _020D4700 ; =0x021D54B0
- ldr r2, [r1, #0x10]
- cmp r2, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r1, [r1, #0x14]
- blx r2
- ldmia sp!, {r4,lr}
- bx lr
-_020D46A0:
- cmp r2, #0x40
- bne _020D46C0
- ldr r1, _020D4700 ; =0x021D54B0
- ldr r2, [r1, #0x18]
- cmp r2, #0x0
- ldrne r1, _020D4704 ; =0x027FFF94
- ldrneh r1, [r1, #0x0]
- strneh r1, [r2, #0x0]
-_020D46C0:
- ldr r1, _020D4700 ; =0x021D54B0
- ldr r2, [r1, #0x0]
- cmp r2, #0x0
- movne r2, #0x0
- strne r2, [r1, #0x0]
- ldr r2, _020D4700 ; =0x021D54B0
- ldr r4, [r2, #0x4]
- cmp r4, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r1, [r2, #0x8]
- mov r3, #0x0
- str r3, [r2, #0x4]
- blx r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020D4700: .word 0x021D54B0
-_020D4704: .word 0x027FFF94
-
- arm_func_start MIC_GetLastSamplingAddress
-MIC_GetLastSamplingAddress: ; 0x020D4708
- ldr r0, _020D4714 ; =0x027FFF90
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020D4714: .word 0x027FFF90
-
- arm_func_start MIC_StopAutoSampling
-MIC_StopAutoSampling: ; 0x020D4718
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020D4754 ; =MicGetResultCallback
- mov r1, #0x0
- bl MIC_StopAutoSamplingAsync
- ldr r1, _020D4758 ; =0x021D54B0
- cmp r0, #0x0
- str r0, [r1, #0xc]
- bne _020D4740
- bl MicWaitBusy
-_020D4740:
- ldr r0, _020D4758 ; =0x021D54B0
- ldr r0, [r0, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D4754: .word MicGetResultCallback
-_020D4758: .word 0x021D54B0
-
- arm_func_start MIC_StopAutoSamplingAsync
-MIC_StopAutoSamplingAsync: ; 0x020D475C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- bl OS_DisableInterrupts
- ldr r1, _020D47C8 ; =0x021D54B0
- ldr r2, [r1, #0x0]
- cmp r2, #0x0
- beq _020D4794
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020D4794:
- mov r2, #0x1
- str r2, [r1, #0x0]
- bl OS_RestoreInterrupts
- ldr r0, _020D47C8 ; =0x021D54B0
- str r5, [r0, #0x4]
- str r4, [r0, #0x8]
- bl MicStopAutoSampling
-_020D47B0:
- cmp r0, #0x0
- movne r0, #0x0
- moveq r0, #0x3
- add sp, sp, #0x4
- ldmia sp!, {r4-r5, lr}
- bx lr
-_020D47C8: .word 0x021D54B0
-
- arm_func_start MIC_StartAutoSampling
-MIC_StartAutoSampling: ; 0x020D47CC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D4808 ; =MicGetResultCallback
- mov r2, #0x0
- bl MIC_StartAutoSamplingAsync
- ldr r1, _020D480C ; =0x021D54B0
- cmp r0, #0x0
- str r0, [r1, #0xc]
- bne _020D47F4
- bl MicWaitBusy
-_020D47F4:
- ldr r0, _020D480C ; =0x021D54B0
- ldr r0, [r0, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D4808: .word MicGetResultCallback
-_020D480C: .word 0x021D54B0
-
- arm_func_start MIC_StartAutoSamplingAsync
-MIC_StartAutoSamplingAsync: ; 0x020D4810
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r0, [r7, #0x4]
- mov r6, r1
- ands r0, r0, #0x1f
- mov r5, r2
- addne sp, sp, #0x4
- movne r0, #0x2
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldr r1, [r7, #0x8]
- ands r0, r1, #0x1f
- addne sp, sp, #0x4
- movne r0, #0x2
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x2
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, [r7, #0xc]
- cmp r0, #0x400
- addcc sp, sp, #0x4
- movcc r0, #0x2
- ldmccia sp!, {r4-r7,lr}
- bxcc lr
- ldr r0, [r7, #0x0]
- cmp r0, #0x5
- addls pc, pc, r0, lsl #0x2
- b _020D48D8
-_020D4890:
- b _020D48A8
- b _020D48B0
- b _020D48B8
- b _020D48C0
- b _020D48C8
- b _020D48D0
-_020D48A8:
- mov r1, #0x0
- b _020D48E8
-_020D48B0:
- mov r1, #0x1
- b _020D48E8
-_020D48B8:
- mov r1, #0x2
- b _020D48E8
-_020D48C0:
- mov r1, #0x3
- b _020D48E8
-_020D48C8:
- mov r1, #0x5
- b _020D48E8
-_020D48D0:
- mov r1, #0x7
- b _020D48E8
-_020D48D8:
- add sp, sp, #0x4
- mov r0, #0x2
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D48E8:
- ldr r0, [r7, #0x10]
- cmp r0, #0x0
- orrne r0, r1, #0x10
- andne r0, r0, #0xff
- andeq r0, r1, #0xff
- and r4, r0, #0xff
- bl OS_DisableInterrupts
- ldr r1, _020D497C
- ldr r2, [r1]
- cmp r2, #0x0
- beq _020D4928
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D4928:
- mov r2, #0x1
- str r2, [r1]
- bl OS_RestoreInterrupts
- ldr r0, _020D497C
- mov r3, r4
- str r6, [r0, #0x4]
- str r5, [r0, #0x8]
- ldr r1, [r7, #0x14]
- str r1, [r0, #0x10]
- ldr r1, [r7, #0x18]
- str r1, [r0, #0x14]
- ldr r0, [r7, #0x4]
- ldr r1, [r7, #0x8]
- ldr r2, [r7, #0xC]
- bl MicStartAutoSampling
- cmp r0, #0x0
- movne r0, #0x0
- moveq r0, #0x3
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D497C: .word 0x021D54B0
-
- arm_func_start MIC_DoSamplingAsync
-MIC_DoSamplingAsync: ; 0x020D4980
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- cmp r0, #0x6
- mov r7, r1
- mov r6, r2
- mov r5, r3
- addge sp, sp, #0x4
- movge r0, #0x2
- ldmgeia sp!, {r4-r7,lr}
- bxge lr
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020D49E4
-_020D49B4:
- b _020D49C4
- b _020D49CC
- b _020D49D4
- b _020D49DC
-_020D49C4:
- mov r4, #0x0
- b _020D49F4
-_020D49CC:
- mov r4, #0x1
- b _020D49F4
-_020D49D4:
- mov r4, #0x2
- b _020D49F4
-_020D49DC:
- mov r4, #0x3
- b _020D49F4
-_020D49E4:
- add sp, sp, #0x4
- mov r0, #0x2
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D49F4:
- bl OS_DisableInterrupts
- ldr r1, _020D4A58
- ldr r2, [r1]
- cmp r2, #0x0
- beq _020D4A1C
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D4A1C:
- mov r2, #0x1
- str r2, [r1]
- bl OS_RestoreInterrupts
- ldr r1, _020D4A58
- mov r0, r4
- str r6, [r1, #0x4]
- str r5, [r1, #0x8]
- str r7, [r1, #0x18]
- bl MicDoSampling
- cmp r0, #0x0
- movne r0, #0x0
- moveq r0, #0x3
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_020D4A58: .word 0x021D54B0
-
- arm_func_start MIC_Init
-MIC_Init: ; 0x020D4A5C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _020D4AD8 ; =0x021D54AC
- ldrh r0, [r1, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldr r0, _020D4ADC ; =0x021D54B0
- mov r2, #0x0
- mov r3, #0x1
- strh r3, [r1, #0x0]
- str r2, [r0, #0x0]
- str r2, [r0, #0x4]
- bl PXI_Init
- mov r5, #0x9
- mov r4, #0x1
-_020D4AA0:
- mov r0, r5
- mov r1, r4
- bl PXI_IsCallbackReady
-_020D4AAC:
- cmp r0, #0x0
- beq _020D4AA0
- ldr r2, _020D4AE0
- mov r3, #0x0
- ldr r1, _020D4AE4
- mov r0, #0x9
- str r3, [r2]
- bl PXI_SetFifoRecvCallback
- add sp, sp, #0x4
- ldmia sp!, {r4-r5, lr}
- bx lr
-_020D4AD8: .word 0x021D54AC
-_020D4ADC: .word 0x021D54B0
-_020D4AE0: .word 0x027FFF90
-_020D4AE4: .word MicCommonCallback
-
- arm_func_start PM_DeletePostSleepCallback
-PM_DeletePostSleepCallback: ; 0x020D4AE8
- ldr ip, _020D4AF8 ; =0x020D4B78
- mov r1, r0
- ldr r0, _020D4AFC ; =0x021D54E0
- bx r12
- .balign 4
-_020D4AF8: .word 0x020D4B78
-_020D4AFC: .word 0x021D54E0
-
- arm_func_start PM_DeletePreSleepCallback
-PM_DeletePreSleepCallback: ; 0x020D4B00
- ldr ip, _020D4B10 ; =0x020D4B78
- mov r1, r0
- ldr r0, _020D4B14 ; =0x021D54D8
- bx r12
- .balign 4
-_020D4B10: .word 0x020D4B78
-_020D4B14: .word 0x021D54D8
-
- arm_func_start PM_AppendPostSleepCallback
-PM_AppendPostSleepCallback: ; 0x020D4B18
- ldr ip, _020D4B28 ; =FUN_020D4BC4
- mov r1, r0
- ldr r0, _020D4B2C ; =0x021D54E0
- bx r12
- .balign 4
-_020D4B28: .word FUN_020D4BC4
-_020D4B2C: .word 0x021D54E0
-
- arm_func_start PM_PrependPreSleepCallback
-PM_PrependPreSleepCallback: ; 0x020D4B30
- ldr ip, _020D4B40 ; =FUN_020D4C0C
- mov r1, r0
- ldr r0, _020D4B44 ; =0x021D54D8
- bx r12
- .balign 4
-_020D4B40: .word FUN_020D4C0C
-_020D4B44: .word 0x021D54D8
-
- arm_func_start PMi_ExecuteList
-PMi_ExecuteList: ; 0x020D4B48
- stmdb sp!, {r4,lr}
- movs r4, r0
- ldmeqia sp!, {r4,lr}
- bxeq lr
-_020D4B58:
- ldr r0, [r4, #0x4]
- ldr r1, [r4, #0x0]
- blx r1
- ldr r4, [r4, #0x8]
- cmp r4, #0x0
- bne _020D4B58
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_020D4B78
-FUN_020D4B78:
- cmp r0, #0x0
- bxeq lr
- ldr r3, [r0]
- mov r2, r3
- cmp r3, #0x0
- bxeq lr
-_020D4B90:
- cmp r3, r1
- bne _020D4BB0
- cmp r3, r2
- ldreq r1, [r3, #0x8]
- streq r1, [r0]
- ldrne r0, [r3, #0x8]
- strne r0, [r2, #0x8]
- bx lr
-_020D4BB0:
- mov r2, r3
- ldr r3, [r3, #0x8]
- cmp r3, #0x0
- bne _020D4B90
- bx lr
-
- arm_func_start FUN_020D4BC4
-FUN_020D4BC4: ; 0x020D4BC4
- cmp r0, #0x0
- bxeq lr
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- moveq r2, #0x0
- streq r2, [r1, #0x8]
- streq r1, [r0, #0x0]
- bxeq lr
- ldr r0, [r2, #0x8]
- cmp r0, #0x0
- beq _020D4C00
-_020D4BF0:
- mov r2, r0
- ldr r0, [r0, #0x8]
- cmp r0, #0x0
- bne _020D4BF0
-_020D4C00:
- str r0, [r1, #0x8]
- str r1, [r2, #0x8]
- bx lr
-
- arm_func_start FUN_020D4C0C
-FUN_020D4C0C: ; 0x020D4C0C
- cmp r0, #0x0
- ldrne r2, [r0, #0x0]
- strne r2, [r1, #0x8]
- strne r1, [r0, #0x0]
- bx lr
-
- arm_func_start PM_GetLEDPattern
-PM_GetLEDPattern: ; 0x020D4C20
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D4C58 ; =0x020D587C
- add r2, sp, #0x0
- bl PM_GetLEDPatternAsync
-_020D4C34:
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmnefd sp!, {lr}
- bxne lr
- bl PMi_WaitBusy
- ldr r0, [sp]
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020D4C58: .word 0x020D587C
-
- arm_func_start PM_GetLEDPatternAsync
-PM_GetLEDPatternAsync:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl PMi_Lock
-_020D4C70:
- cmp r0, #0x0
- moveq r0, #0x1
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r1, _020D4CA4
- ldr r0, _020D4CA8
- str r5, [r1, #0x4]
- str r4, [r1, #0x8]
- str r6, [r1, #0xC]
- bl PMi_SendPxiData
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D4CA4: .word 0x021D54E4
-_020D4CA8: .word 0x03006700
-
- arm_func_start PMi_SendLEDPatternCommand
-PMi_SendLEDPatternCommand: ; 0x020D4CAC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020D4CE4 ; =0x020D587C
- add r2, sp, #0x0
- bl PMi_SendLEDPatternCommandAsync
-_020D4CC0:
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmnefd sp!, {lr}
- bxne lr
- bl PMi_WaitBusy
- ldr r0, [sp]
- add sp, sp, #0x4
- ldmfd sp!, {lr}
- bx lr
-_020D4CE4: .word 0x020D587C
-
- arm_func_start PMi_SendLEDPatternCommandAsync
-PMi_SendLEDPatternCommandAsync:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl PMi_Lock
-_020D4CFC:
- cmp r0, #0x0
- moveq r0, #0x1
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r0, _020D4D34
- ldr r1, _020D4D38
- and r2, r6, #0xff
- orr r0, r2, r0
- str r5, [r1, #0x4]
- str r4, [r1, #0x8]
- bl PMi_SendPxiData
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020D4D34: .word 0x03006600
-_020D4D38: .word 0x021D54E4
-
- arm_func_start PM_GetLCDPower
-PM_GetLCDPower: ; 0x020D4D3C
- ldr r0, _020D4D54 ; =0x04000304
- ldrh r0, [r0, #0x0]
- ands r0, r0, #0x1
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
- .balign 4
-_020D4D54: .word 0x04000304
-
- arm_func_start PM_SetLCDPower
-PM_SetLCDPower: ; 0x020D4D58
- ldr ip, _020D4D74 ; =PMi_SetLCDPower
- mov r1, #0x0
- cmp r0, #0x1
- movne r0, #0x0
- mov r2, r1
- mov r3, #0x1
- bx r12
- .balign 4
-_020D4D74: .word PMi_SetLCDPower
-
- arm_func_start PMi_SetLCDPower
-PMi_SetLCDPower: ; 0x020D4D78
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x0
- beq _020D4E00
- cmp r0, #0x1
- bne _020D4E4C
- cmp r2, #0x0
- bne _020D4DC0
- ldr r2, _020D4E5C ; =0x027FFC3C
- ldr r0, _020D4E60 ; =0x021D54DC
- ldr r2, [r2, #0x0]
- ldr r0, [r0, #0x0]
- sub r0, r2, r0
- cmp r0, #0x7
- addls sp, sp, #0x4
- movls r0, #0x0
- ldmlsia sp!, {lr}
- bxls lr
-_020D4DC0:
- cmp r1, #0x0
- beq _020D4DEC
- cmp r3, #0x0
- beq _020D4DDC
- mov r0, r1
- bl PMi_SetLED
- b _020D4DEC
-_020D4DDC:
- mov r0, r1
- mov r1, #0x0
- mov r2, r1
- bl PMi_SetLEDAsync
-_020D4DEC:
- ldr r1, _020D4E64 ; =0x04000304
- ldrh r0, [r1, #0x0]
- orr r0, r0, #0x1
- strh r0, [r1, #0x0]
- b _020D4E4C
-_020D4E00:
- ldr lr, _020D4E64 ; =0x04000304
- ldr r2, _020D4E5C ; =0x027FFC3C
- ldrh r12, [lr, #0x0]
- ldr r0, _020D4E60 ; =0x021D54DC
- cmp r1, #0x0
- bic r12, r12, #0x1
- strh r12, [lr, #0x0]
- ldr r2, [r2, #0x0]
- str r2, [r0, #0x0]
- beq _020D4E4C
- cmp r3, #0x0
- beq _020D4E3C
- mov r0, r1
- bl PMi_SetLED
- b _020D4E4C
-_020D4E3C:
- mov r0, r1
- mov r1, #0x0
- mov r2, r1
- bl PMi_SetLEDAsync
-_020D4E4C:
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020D4E5C: .word 0x027FFC3C
-_020D4E60: .word 0x021D54DC
-_020D4E64: .word 0x04000304
-
- arm_func_start PM_GoSleepMode
-PM_GoSleepMode: ; 0x020D4E68
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x1c
- ldr r3, _020D5084 ; =0x021D54D8
- mov r10, r0
- ldr r0, [r3, #0x0]
- mov r9, r1
- mov r11, r2
- mov r8, #0x0
- bl PMi_ExecuteList
- ldr r1, _020D5088 ; =0x04000208
- mov r0, r8
- ldrh r4, [r1, #0x0]
- strh r0, [r1, #0x0]
- bl OS_DisableInterrupts
-_020D4EA0:
- str r0, [sp]
- ldr r0, _020D508C
- bl OS_DisableIrqMask
- str r0, [sp, #0x4]
- mov r0, #0x40000
- bl OS_SetIrqMask
- ldr r0, [sp]
- bl OS_RestoreInterrupts
- ldr r2, _020D5088
- mov r1, #0x1
- ldrh r0, [r2]
- ands r0, sl, #0x8
- strh r1, [r2]
- beq _020D4EE8
- ldr r0, _020D5090
- ldrh r0, [r0]
- cmp r0, #0x2
- biceq sl, sl, #0x8
-_020D4EE8:
- ands r0, sl, #0x10
- beq _020D4EFC
- bl CTRDG_IsExisting
- cmp r0, #0x0
- biceq sl, sl, #0x10
-_020D4EFC:
- ldr r0, _020D5094
- mov r1, #0x4000000
- ldr r7, [r1]
- ldr r6, [r0]
- bl PM_GetLCDPower
- str r0, [sp, #0x8]
- add r0, sp, #0xC
- add r1, sp, #0x10
- bl PM_GetBackLight
- mov r0, #0x2
- mov r1, #0x0
- bl FUN_020D526C
- ldr r2, _020D5098
- ldr r0, [r2]
- str r0, [sp, #0x14]
-_020D4F38:
- ldr r1, [r2]
- ldr r0, [sp, #0x14]
- cmp r0, r1
- beq _020D4F38
- ldr r0, [r2]
- mov r2, #0x4000000
- str r0, [sp, #0x14]
- ldr r0, [r2]
- ldr r1, _020D5094
- bic r0, r0, #0x30000
- str r0, [r2]
- ldr r0, [r1]
- bic r0, r0, #0x10000
- str r0, [r1]
- ldr r2, _020D5098
-_020D4F74:
- ldr r1, [r2]
- ldr r0, [sp, #0x14]
- cmp r0, r1
- beq _020D4F74
- ldr r0, [r2]
- str r0, [sp, #0x14]
- ldr r2, _020D5098
-_020D4F90:
- ldr r1, [r2]
- ldr r0, [sp, #0x14]
- cmp r0, r1
- beq _020D4F90
- ldr r0, [sp, #0xC]
- ldr r1, [sp, #0x10]
- orr r0, sl, r0, lsl #0x5
- orr r0, r0, r1, lsl #0x6
- mov r0, r0, lsl #0x10
- mov r5, r0, lsr #0x10
- orr r0, r9, fp
- mov r0, r0, lsl #0x10
- mov r9, r0, lsr #0x10
-_020D4FC4:
- mov r0, r5
- mov r1, r9
- bl PMi_SendSleepStart
- cmp r0, #0x0
- bne _020D4FC4
- bl OS_Halt
- ldr r0, _020D509C
- bl OS_SpinWait
- ands r0, sl, #0x8
- beq _020D4FFC
- ldr r0, _020D50A0
- ldr r0, [r0]
- ands r0, r0, #0x100000
- movne r8, #0x1
-_020D4FFC:
- cmp r8, #0x0
- bne _020D5040
- ldr r0, [sp, #0x8]
- cmp r0, #0x1
- bne _020D5028
- mov r0, #0x1
- mov r1, r0
- mov r2, r0
- mov r3, #0x0
- bl PMi_SetLCDPower
- b _020D5030
-_020D5028:
- mov r0, #0x1
- bl PMi_SetLED
-_020D5030:
- mov r1, #0x4000000
- ldr r0, _020D5094
- str r7, [r1]
- str r6, [r0]
-_020D5040:
- bl OS_DisableInterrupts
- ldr r0, [sp, #0x4]
- bl OS_SetIrqMask
- ldr r0, [sp]
- bl OS_RestoreInterrupts
- ldr r1, _020D5088
- cmp r8, #0x0
- ldrh r0, [r1]
- strh r4, [r1]
- beq _020D506C
- bl FUN_020D5180
-_020D506C:
- ldr r0, _020D50A4
- ldr r0, [r0]
- bl PMi_ExecuteList
- add sp, sp, #0x1C
- ldmia sp!, {r4-r11, lr}
- bx lr
-_020D5084: .word 0x021D54D8
-_020D5088: .word 0x04000208
-_020D508C: .word 0x003FFFFF
-_020D5090: .word 0x027FFC40
-_020D5094: .word 0x04001000
-_020D5098: .word 0x027FFC3C
-_020D509C: .word 0x00996A00
-_020D50A0: .word 0x04000214
-_020D50A4: .word 0x021D54E0
-
-
- arm_func_start PMi_SendPxiData
-PMi_SendPxiData: ; 0x020D50A8
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, #0x8
- mov r4, #0x0
-_020D50B8:
- mov r0, r5
- mov r1, r6
- mov r2, r4
- bl PXI_SendWordByFifo
-_020D50C8:
- cmp r0, #0
- bne _020D50B8
- ldmia sp!, {r4-r6, lr}
- bx lr
-
- arm_func_start PM_GetBackLight
-PM_GetBackLight: ; 0x020D50D8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- add r1, sp, #0x0
- mov r0, #0x0
- bl PMi_ReadRegister
-_020D50F4:
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- cmp r5, #0x0
- beq _020D5120
- ldrh r1, [sp]
- ands r1, r1, #0x8
- movne r1, #0x1
- moveq r1, #0x0
- str r1, [r5]
-_020D5120:
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldrh r1, [sp]
- ands r1, r1, #0x4
- movne r1, #0x1
- moveq r1, #0x0
- str r1, [r4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
diff --git a/asm/rom1.5.s b/asm/rom1.5.s
deleted file mode 100644
index fffa35a6..00000000
--- a/asm/rom1.5.s
+++ /dev/null
@@ -1,7 +0,0 @@
-/* rom1.5.s TODO: Disassemble */
- .include "asm/macros.inc"
- .section .text
-
- arm_func_start FUN_0208AC14
-FUN_0208AC14:
- .incbin "baserom.nds", 0x8EC14, 0x3EFF8
diff --git a/asm/rom2.s b/asm/rom2.s
deleted file mode 100644
index bcd66a51..00000000
--- a/asm/rom2.s
+++ /dev/null
@@ -1,150 +0,0 @@
-/* rom2.s TODO: Disassemble */
- .include "asm/macros.inc"
-
- .section .text
-
- .incbin "baserom.nds", 0xD9150, 0x16AE0
-
- arm_func_start _ll_mul
-_ll_mul: ; 0x020EBC30
- stmdb sp!, {r4, r5, lr}
- umull r5, r4, r0, r2
- mla r4, r0, r3, r4
- mla r4, r2, r1, r4
- mov r1, r4
- mov r0, r5
- ldmia sp!, {r4, r5, lr}
- bx lr
-
- arm_func_start _ll_shl
-_ll_shl: ; 0x020EBC50
- ands r2, r2, #0x3F
- bxeq lr
- subs r3, r2, #0x20
- bge _020EBC74
- rsb r3, r2, #0x20
- mov r1, r1, lsl r2
- orr r1, r1, r0, lsr r3
- mov r0, r0, lsl r2
- bx lr
-_020EBC74:
- mov r1, r0, lsl r3
- mov r0, #0x0
- bx lr
-
- arm_func_start _s32_div_f
-_s32_div_f: ; 0x20EBC80
- ; Test whether the args have different signs
- eor ip, r0, r1
- and ip, ip, #0x80000000
- ; Test the sign of the numerator, and make it positive
- cmp r0, #0x0
- rsblt r0, r0, #0x0
- addlt ip, ip, #1
- ; Make the denominator positive, also test for div0
- cmp r1, #0x0
- rsblt r1, r1, #0x0
- beq _020EBE78
- ; If the numerator is less than the denominator, return (0, numerator)
- cmp r0, r1
- movcc r1, r0
- movcc r0, #0x0
- bcc _020EBE78
- ; Do the actual division
- mov r2, #0x1c
- mov r3, r0, lsr #0x4
- cmp r1, r3, lsr #0xc
- suble r2, r2, #0x10
- movle r3, r3, lsr #0x10
- cmp r1, r3, lsr #0x4
- suble r2, r2, #0x8
- movle r3, r3, lsr #0x8
- cmp r1, r3
- suble r2, r2, #0x4
- movle r3, r3, lsr #0x4
- mov r0, r0, lsl r2
- rsb r1, r1, #0x0
- adds r0, r0, r0
- add r2, r2, r2, lsl #0x1
- add pc, pc, r2, lsl #0x2
- nop
- .rept 32
- adcs r3, r1, r3, lsl #0x1
- subcc r3, r3, r1
- adcs r0, r0, r0
- .endr
- mov r1, r3
-_020EBE78:
- ; If the signs differed originally, negate quotient
- ands r3, ip, #0x80000000
- rsbne r0, r0, #0x0
- ; If the numerator was negative, negate remainder
- ands r3, ip, #0x1
- rsbne r1, r1, #0x0
- bx lr
-
-; required to make the linker happy :
-
- arm_func_start _u32_div_f
-_u32_div_f: ; 0x020EBE8C
- cmp r1, #0x0
- bxeq lr ; About as wrong as we can be
- cmp r0, r1
- movcc r1, r0
- movcc r0, #0x0
- bxcc lr
- mov r2, #0x1c
- mov r3, r0, lsr #0x4
- cmp r1, r3, lsr #0xc
- suble r2, r2, #0x10
- movle r3, r3, lsr #0x10
- cmp r1, r3, lsr #0x4
- suble r2, r2, #0x8
- movle r3, r3, lsr #0x8
- cmp r1, r3
- suble r2, r2, #0x4
- movle r3, r3, lsr #0x4
- mov r0, r0, lsl r2
- rsb r1, r1, #0x0
- adds r0, r0, r0
- add r2, r2, r2, lsl #0x1
- add pc, pc, r2, lsl #0x2
- nop
- .rept 32
- adcs r3, r1, r3, lsl #0x1
- subcc r3, r3, r1
- adcs r0, r0, r0
- .endr
- mov r1, r3
- bx lr
-
- .incbin "baserom.nds", 0xF0070, 0x55C
-
- arm_func_start _fp_init
-_fp_init: ; 0x020EC5CC
- bx lr
-
- arm_func_start sys_writec
-sys_writec: ; 0x020EC5D0
- str lr, [sp, #-4]!
- mov r1, r0
- mov r0, #0x3
- swi 0x123456
- ldr pc, [sp], #0x4
-
- arm_func_start sys_readc
-sys_readc: ; 0x020EC5E4
- str lr, [sp, #-4]!
- mov r1, #0x0
- mov r0, #0x7
- swi 0x123456
- ldr pc, [sp], #0x4
-
- .incbin "baserom.nds", 0xF05F8, 0x9C
-
- arm_func_start __call_static_initializers
-__call_static_initializers: ; 0x020EC694
-.incbin "baserom.nds", 0xF0694, 0x7C
-
- .section .data
-.incbin "baserom.nds", 0xF0710, 0x3F8
diff --git a/data/filenametable.s b/data/filenametable.s
index c5699171..7ff82dc8 100644
--- a/data/filenametable.s
+++ b/data/filenametable.s
@@ -272,31 +272,31 @@ FileNameTable:
.byte 0x05, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /custom_ball
+ ; Directory: /application/custom_ball
.byte 4 | 0x80
.ascii "data"
.byte 0x03, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /application/data
+ ; Directory: /application/custom_ball/data
.byte 12
.ascii "cb_data.narc"
.byte 0 ; end
- ; Directory: /wifi_earth
+ ; Directory: /application/wifi_earth
.byte 15
.ascii "wifi_earth.narc"
.byte 21
.ascii "wifi_earth_place.narc"
.byte 0 ; end
- ; Directory: /zukanlist
+ ; Directory: /application/zukanlist
.byte 8 | 0x80
.ascii "zkn_data"
.byte 0x06, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /application/zkn_data
+ ; Directory: /application/zukanlist/zkn_data
.byte 15
.ascii "zukan_data.narc"
.byte 22
@@ -335,14 +335,14 @@ FileNameTable:
.byte 0x0C, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /b_tower
+ ; Directory: /battle/b_tower
.byte 10
.ascii "btdpm.narc"
.byte 10
.ascii "btdtr.narc"
.byte 0 ; end
- ; Directory: /graphic
+ ; Directory: /battle/graphic
.byte 14
.ascii "b_bag_gra.narc"
.byte 16
@@ -355,7 +355,7 @@ FileNameTable:
.ascii "vs_demo_gra.narc"
.byte 0 ; end
- ; Directory: /skill
+ ; Directory: /battle/skill
.byte 11
.ascii "be_seq.narc"
.byte 12
@@ -364,7 +364,7 @@ FileNameTable:
.ascii "waza_seq.narc"
.byte 0 ; end
- ; Directory: /tr_ai
+ ; Directory: /battle/tr_ai
.byte 14
.ascii "tr_ai_seq.narc"
.byte 0 ; end
@@ -378,12 +378,12 @@ FileNameTable:
.byte 0x0F, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /data
+ ; Directory: /contest/data
.byte 17
.ascii "contest_data.narc"
.byte 0 ; end
- ; Directory: /graphic
+ ; Directory: /contest/graphic
.byte 15
.ascii "contest_bg.narc"
.byte 16
@@ -661,14 +661,14 @@ FileNameTable:
.byte 0x12, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /mmodel
+ ; Directory: /data/mmodel
.byte 11
.ascii "fldeff.narc"
.byte 11
.ascii "mmodel.narc"
.byte 0 ; end
- ; Directory: /sound
+ ; Directory: /data/sound
.byte 15
.ascii "sound_data.sdat"
.byte 0 ; end
@@ -691,13 +691,13 @@ FileNameTable:
.byte 0x1C, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /egg
+ ; Directory: /demo/egg
.byte 4 | 0x80
.ascii "data"
.byte 0x15, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /demo/data
+ ; Directory: /demo/egg/data
.byte 13
.ascii "egg_data.narc"
.byte 8 | 0x80
@@ -705,41 +705,41 @@ FileNameTable:
.byte 0x16, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /egg/particle
+ ; Directory: /demo/egg/data/particle
.byte 22
.ascii "egg_demo_particle.narc"
.byte 0 ; end
- ; Directory: /intro
+ ; Directory: /demo/intro
.byte 10
.ascii "intro.narc"
.byte 13
.ascii "intro_tv.narc"
.byte 0 ; end
- ; Directory: /shinka
+ ; Directory: /demo/shinka
.byte 4 | 0x80
.ascii "data"
.byte 0x19, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /demo/data
+ ; Directory: /demo/shinka/data
.byte 8 | 0x80
.ascii "particle"
.byte 0x1A, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /shinka/particle
+ ; Directory: /demo/shinka/data/particle
.byte 25
.ascii "shinka_demo_particle.narc"
.byte 0 ; end
- ; Directory: /syoujyou
+ ; Directory: /demo/syoujyou
.byte 13
.ascii "syoujyou.narc"
.byte 0 ; end
- ; Directory: /title
+ ; Directory: /demo/title
.byte 12
.ascii "op_demo.narc"
.byte 14
@@ -784,7 +784,7 @@ FileNameTable:
.byte 0x2B, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /areadata
+ ; Directory: /fielddata/areadata
.byte 14
.ascii "area_data.narc"
.byte 16 | 0x80
@@ -798,68 +798,68 @@ FileNameTable:
.byte 0x22, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /fielddata/area_build_model
+ ; Directory: /fielddata/areadata/area_build_model
.byte 15
.ascii "area_build.narc"
.byte 18
.ascii "areabm_texset.narc"
.byte 0 ; end
- ; Directory: /fielddata/area_map_tex
+ ; Directory: /fielddata/areadata/area_map_tex
.byte 16
.ascii "map_tex_set.narc"
.byte 0 ; end
- ; Directory: /fielddata/area_move_model
+ ; Directory: /fielddata/areadata/area_move_model
.byte 20
.ascii "move_model_list.narc"
.byte 0 ; end
- ; Directory: /build_model
+ ; Directory: /fielddata/build_model
.byte 16
.ascii "build_model.narc"
.byte 22
.ascii "build_model_matshp.dat"
.byte 0 ; end
- ; Directory: /encountdata
+ ; Directory: /fielddata/encountdata
.byte 15
.ascii "d_enc_data.narc"
.byte 15
.ascii "p_enc_data.narc"
.byte 0 ; end
- ; Directory: /eventdata
+ ; Directory: /fielddata/eventdata
.byte 23
.ascii "zone_event_release.narc"
.byte 0 ; end
- ; Directory: /land_data
+ ; Directory: /fielddata/land_data
.byte 22
.ascii "land_data_release.narc"
.byte 0 ; end
- ; Directory: /mapmatrix
+ ; Directory: /fielddata/mapmatrix
.byte 15
.ascii "map_matrix.narc"
.byte 0 ; end
- ; Directory: /maptable
+ ; Directory: /fielddata/maptable
.byte 11
.ascii "mapname.bin"
.byte 0 ; end
- ; Directory: /mm_list
+ ; Directory: /fielddata/mm_list
.byte 20
.ascii "move_model_list.narc"
.byte 0 ; end
- ; Directory: /pokemon_trade
+ ; Directory: /fielddata/pokemon_trade
.byte 14
.ascii "fld_trade.narc"
.byte 0 ; end
- ; Directory: /script
+ ; Directory: /fielddata/script
.byte 20
.ascii "scr_seq_release.narc"
.byte 0 ; end
@@ -957,7 +957,7 @@ FileNameTable:
.byte 0x2E, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /itemdata
+ ; Directory: /itemtool/itemdata
.byte 14
.ascii "item_data.narc"
.byte 14
@@ -974,7 +974,7 @@ FileNameTable:
.byte 0x30, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /scenario
+ ; Directory: /msgdata/scenario
.byte 12
.ascii "scr_msg.narc"
.byte 0 ; end
@@ -1023,12 +1023,12 @@ FileNameTable:
.byte 0x3C, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /icongra
+ ; Directory: /poketool/icongra
.byte 14
.ascii "poke_icon.narc"
.byte 0 ; end
- ; Directory: /personal
+ ; Directory: /poketool/personal
.byte 8
.ascii "evo.narc"
.byte 12
@@ -1041,17 +1041,17 @@ FileNameTable:
.ascii "wotbl.narc"
.byte 0 ; end
- ; Directory: /pokeanm
+ ; Directory: /poketool/pokeanm
.byte 12
.ascii "pokeanm.narc"
.byte 0 ; end
- ; Directory: /pokefoot
+ ; Directory: /poketool/pokefoot
.byte 13
.ascii "pokefoot.narc"
.byte 0 ; end
- ; Directory: /pokegra
+ ; Directory: /poketool/pokegra
.byte 11
.ascii "height.narc"
.byte 13
@@ -1068,28 +1068,28 @@ FileNameTable:
.ascii "pokegra.narc"
.byte 0 ; end
- ; Directory: /trainer
+ ; Directory: /poketool/trainer
.byte 11
.ascii "trdata.narc"
.byte 11
.ascii "trpoke.narc"
.byte 0 ; end
- ; Directory: /trgra
+ ; Directory: /poketool/trgra
.byte 11
.ascii "trbgra.narc"
.byte 11
.ascii "trfgra.narc"
.byte 0 ; end
- ; Directory: /trmsg
+ ; Directory: /poketool/trmsg
.byte 10
.ascii "trtbl.narc"
.byte 13
.ascii "trtblofs.narc"
.byte 0 ; end
- ; Directory: /waza
+ ; Directory: /poketool/waza
.byte 13
.ascii "waza_tbl.narc"
.byte 0 ; end
@@ -1100,7 +1100,7 @@ FileNameTable:
.byte 0x3E, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /eng
+ ; Directory: /resource/eng
.byte 5 | 0x80
.ascii "trial"
.byte 0x3F, 0xF0 ; dir ID
@@ -1109,12 +1109,12 @@ FileNameTable:
.byte 0x40, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /resource/trial
+ ; Directory: /resource/eng/trial
.byte 10
.ascii "trial.narc"
.byte 0 ; end
- ; Directory: /resource/zukan
+ ; Directory: /resource/eng/zukan
.byte 10
.ascii "zukan.narc"
.byte 0 ; end
@@ -1135,7 +1135,7 @@ FileNameTable:
.byte 0x44, 0xF0 ; dir ID
.byte 0 ; end
- ; Directory: /effectclact
+ ; Directory: /wazaeffect/effectclact
.byte 11
.ascii "wecell.narc"
.byte 14
@@ -1146,14 +1146,14 @@ FileNameTable:
.ascii "wepltt.narc"
.byte 0 ; end
- ; Directory: /effectdata
+ ; Directory: /wazaeffect/effectdata
.byte 18
.ascii "ball_particle.narc"
.byte 18
.ascii "waza_particle.narc"
.byte 0 ; end
- ; Directory: /pt_debug
+ ; Directory: /wazaeffect/pt_debug
.byte 19
.ascii "debug_particle.narc"
.byte 0 ; end
diff --git a/global.inc b/global.inc
index a6ff40d0..478abdaa 100644
--- a/global.inc
+++ b/global.inc
@@ -1,933 +1,65 @@
-.extern FUN_0200019E
-.extern FUN_02000DF4
-.extern StringCopy
-.extern FUN_02000E7C
-.extern FUN_02000EE8
-.extern FUN_02000F18
-.extern FUN_02000FA4
-.extern FUN_02000FE8
-.extern FUN_02002C14
-.extern FUN_02002C50
-.extern FUN_02003B98
-.extern FUN_02003C10
-.extern FUN_0200A2AC
-.extern FUN_0200A318
-.extern FUN_0200E2D8
-.extern FUN_0201259C
-.extern FUN_020125D4
-.extern FUN_02015E30
-.extern FUN_02015E60
-.extern InitSystemForTheGame
-.extern InitGraphicMemory
-.extern FUN_020163BC
-.extern FUN_02016438
-.extern FUN_02016464
-.extern FUN_0201B5CC
-.extern FUN_02020AFC
-.extern ErrorHandling
-.extern FUN_02022294
-.extern FUN_020222C4
-.extern FUN_0202254C
-.extern FUN_020227FC
-.extern LoadPlayerDataAddress
-.extern FUN_02029EF8
-.extern FUN_0202FB80
-.extern FUN_020337E8
-.extern FUN_02034188
-.extern FUN_02089D90
-.extern FUN_0208ACEC
-.extern FUN_0208AD80
-.extern FUN_0208AF80
-.extern FUN_0208AF94
-.extern FUN_0208AFA8
-.extern FUN_0208B05C
-.extern FUN_0208B128
-.extern FUN_0208B4A0
-.extern FUN_02090CC8
-.extern FUN_02090DB8
-.extern FUN_02096B14
-.extern FUN_02096B78
-.extern FUN_02096CCC
-.extern FUN_02096D2C
-.extern FUN_02096DA0
-.extern FUN_02096E90
-.extern FUN_02096F18
-.extern FUN_02096F80
-.extern FUN_02096FB0
-.extern FUN_02096FF4
-.extern FUN_0209700C
-.extern FUN_020973B4
-.extern FUN_020ADDC0
-.extern FUN_020ADDC8
-.extern FUN_020ADDF0
-.extern FUN_020ADE2C
-.extern FUN_020ADFA0
-.extern FUN_020ADFDC
-.extern FUN_020ADFE8
-.extern FUN_020AE82C
-.extern FUN_020AE8CC
-.extern FUN_020AE918
-.extern FUN_020AEB70
-.extern FUN_020AEC7C
-.extern FUN_020AEC98
-.extern FUN_020AEE40
-.extern FUN_020AEEB8
-.extern FUN_020AEF1C
-.extern FUN_020AF894
-.extern FUN_020AF9C4
-.extern FUN_020AFA28
-.extern FUN_020AFA80
-.extern FUN_020AFBA8
-.extern FUN_020AFBFC
-.extern FUN_020AFC04
-.extern FUN_020AFD88
-.extern FUN_020AFD94
-.extern FUN_020AFEB8
-.extern FUN_020AFFD8
-.extern FUN_020B0030
-.extern FUN_020B0088
-.extern FUN_020B00F0
-.extern FUN_020B0138
-.extern FUN_020B0180
-.extern FUN_020B0250
-.extern FUN_020B02C8
-.extern FUN_020B0448
-.extern FUN_020B0870
-.extern FUN_020B0BB0
-.extern FUN_020B0C7C
-.extern FUN_020B0E34
-.extern FUN_020B0FC0
-.extern FUN_020B10E8
-.extern FUN_020B1240
-.extern FUN_020B1340
-.extern FUN_020B1528
-.extern FUN_020B1768
-.extern FUN_020B19C4
-.extern FUN_020B19DC
-.extern FUN_020B1A14
-.extern FUN_020B1A24
-.extern FUN_020B1EA4
-.extern FUN_020B1EC4
-.extern FUN_020B1EE4
-.extern FUN_020B1EFC
-.extern FUN_020B1F80
-.extern FUN_020B20C8
-.extern FUN_020B2194
-.extern FUN_020B224C
-.extern FUN_020B23D8
-.extern FUN_020B242C
-.extern FUN_020B2780
-.extern FUN_020B2794
-.extern FUN_020B28B4
-.extern FUN_020B2A08
-.extern FUN_020B2B08
-.extern FUN_020B2B58
-.extern FUN_020B2D9C
-.extern FUN_020B317C
-.extern FUN_020B31F0
-.extern FUN_020B326C
-.extern FUN_020B3334
-.extern FUN_020B3390
-.extern FUN_020B33A0
-.extern FUN_020B4358
-.extern FUN_020B43A4
-.extern FUN_020B442C
-.extern FUN_020B4568
-.extern FUN_020B4F38
-.extern FUN_020B502C
-.extern FUN_020B772C
-.extern FUN_020B7790
-.extern FUN_020B7C58
-.extern FUN_020B7C78
-.extern FUN_020B7CDC
-.extern FUN_020B7CE4
-.extern FUN_020B7CF0
-.extern FUN_020B7D28
-.extern FUN_020B7DFC
-.extern FUN_020B7E10
-.extern FUN_020B7E1C
-.extern FUN_020B80B4
-.extern FUN_020B844C
-.extern FUN_020B8474
-.extern FUN_020B849C
-.extern FUN_020BAC98
-.extern FUN_020BAFB8
-.extern FUN_020BB1C0
-.extern FUN_020BB394
-.extern FUN_020BB59C
-.extern FUN_020BB7F4
-.extern FUN_020BC0FC
-.extern FUN_020BC13C
-.extern FUN_020BC2A0
-.extern FUN_020C0174
-.extern FUN_020C01A0
-.extern FUN_020C01D0
-.extern FUN_020C03B8
-.extern FUN_020C041C
-.extern FUN_020C044C
-.extern FUN_020C04DC
-.extern FUN_020C0510
-.extern FUN_020C054C
-.extern FUN_020C0670
-.extern FUN_020C0688
-.extern FUN_020C0DD4
-.extern FUN_020C0E14
-.extern FUN_020C0E7C
-.extern FUN_020C0EA4
-.extern FUN_020C0EF4
-.extern FUN_020C0F30
-.extern FUN_020C0F50
-.extern FUN_020C0F68
-.extern FUN_020C0F80
-.extern FUN_020C0F8C
-.extern FUN_020C0F9C
-.extern FUN_020C0FDC
-.extern FUN_020C1040
-.extern FUN_020C10A4
-.extern FUN_020C1148
-.extern FUN_020C1180
-.extern FUN_020C1E58
-.extern FUN_020C1E68
-.extern FUN_020C1EA4
-.extern FUN_020C1F54
-.extern FUN_020C1FA4
-.extern FUN_020C1FF0
-.extern FUN_020C20DC
-.extern FUN_020C2104
-.extern FUN_020C217C
-.extern FUN_020C226C
-.extern FUN_020C22D0
-.extern FUN_020C23FC
-.extern FUN_020C26F8
-.extern FUN_020C2828
-.extern FUN_020C290C
-.extern FUN_020C2A94
-.extern FUN_020C35E0
-.extern FUN_020C360C
-.extern FUN_020C3640
-.extern FUN_020C3674
-.extern FUN_020C36A8
-.extern FUN_020C3910
-.extern FUN_020C3980
-.extern FUN_020C39CC
-.extern FUN_020C3EA4
-.extern FUN_020C3EB0
-.extern FUN_020C3F14
-.extern FUN_020C3F38
-.extern FUN_020C3F54
-.extern FUN_020C3F70
-.extern FUN_020C400C
-.extern FUN_020C504C
-.extern FUN_020C50B8
-.extern FUN_020C5288
-.extern FUN_020C53C8
-.extern FUN_020C5588
-.extern FUN_020C5600
-.extern FUN_020C5634
-.extern FUN_020C5668
-.extern FUN_020C5974
-.extern FUN_020C5978
-.extern FUN_020C59A4
-.extern FUN_020C59C0
-.extern FUN_020C5A34
-.extern FUN_020C5A80
-.extern FUN_020C5AC8
-.extern FUN_020C5AF8
-.extern FUN_020C5B28
-.extern FUN_020C5D2C
-.extern FUN_020C5D4C
-.extern FUN_020C5D9C
-.extern FUN_020C5DBC
-.extern FUN_020C5E54
-.extern FUN_020C600C
-.extern FUN_020C6034
-.extern FUN_020C605C
-.extern FUN_020C6070
-.extern FUN_020C6098
-.extern FUN_020C60AC
-.extern FUN_020C60C0
-.extern FUN_020C60E4
-.extern FUN_020C6108
-.extern FUN_020C611C
-.extern FUN_020C6168
-.extern FUN_020C61F4
-.extern FUN_020C6280
-.extern FUN_020C62FC
-.extern FUN_020C63A8
-.extern FUN_020C65C0
-.extern FUN_020C66B4
-.extern FUN_020C68B8
-.extern FUN_020C6970
-.extern FUN_020C6A84
-.extern FUN_020C6BF0
-.extern FUN_020C6F60
-.extern FUN_020C6FB0
-.extern FUN_020C7010
-.extern FUN_020C7058
-.extern FUN_020C70B0
-.extern FUN_020C70D0
-.extern FUN_020C7104
-.extern FUN_020C7124
-.extern FUN_020C74B8
-.extern FUN_020C74DC
-.extern FUN_020C74F8
-.extern FUN_020C7A14
-.extern FUN_020C7B3C
-.extern FUN_020C7C28
-.extern FUN_020C7D28
-.extern FUN_020C7E0C
-.extern FUN_020C7E94
-.extern FUN_020C7FF0
-.extern FUN_020C802C
-.extern FUN_020C8068
-.extern FUN_020C80A4
-.extern FUN_020C823C
-.extern FUN_020C8538
-.extern FUN_020C8728
-.extern FUN_020C8774
-.extern FUN_020C87E8
-.extern FUN_020C880C
-.extern FUN_020C8858
-.extern FUN_020C88CC
-.extern FUN_020C88F0
-.extern FUN_020C8948
-.extern FUN_020C89BC
-.extern FUN_020C8A2C
-.extern FUN_020C8A90
-.extern FUN_020C8B10
-.extern FUN_020C8C14
-.extern FUN_020C8C7C
-.extern FUN_020C8CE4
-.extern FUN_020C8D4C
-.extern FUN_020C8DB4
-.extern FUN_020C8E1C
-.extern FUN_020C8E84
-.extern FUN_020C8EEC
-.extern FUN_020C8F54
-.extern FUN_020C8FBC
-.extern FUN_020C9024
-.extern FUN_020C908C
-.extern FUN_020C90F4
-.extern FUN_020C915C
-.extern FUN_020C91C4
-.extern FUN_020C922C
-.extern FUN_020C9294
-.extern FUN_020C92F4
-.extern FUN_020C9354
-.extern FUN_020C93BC
-.extern FUN_020C9418
-.extern FUN_020C9480
-.extern FUN_020C94E8
-.extern FUN_020C9550
-.extern OS_WaitIrq
-.extern OS_DisableIrqMask
-.extern OS_EnableIrqMask
-.extern OS_SetIrqFunction
-.extern OS_GetLockID
-.extern OS_ReleaseLockID
-.extern DC_InvalidateRange
+.extern CARD_CancelBackupAsync
+.extern CARD_GetResultCode
+.extern CARD_IdentifyBackup
+.extern CARD_Init
+.extern CARD_IsPulledOut
+.extern CARD_LockBackup
+.extern CARD_LockRom
+.extern CARD_TryWaitBackupAsync
+.extern CARD_UnlockBackup
+.extern CARD_UnlockRom
+.extern CARD_WaitBackupAsync
+.extern CARDi_ReadRom
+.extern CARDi_RequestStreamCommand
+.extern CP_RestoreContext
+.extern CP_SaveContext
+.extern CTRDG_Init
+.extern CTRDG_IsExisting
+.extern CTRDG_IsPulledOut
+.extern Call_FillMemWithValue
+.extern ConvertUIntToDecimalString
+.extern DC_FlushAll
.extern DC_FlushRange
+.extern DC_InvalidateAll
+.extern DC_InvalidateRange
+.extern DC_StoreAll
+.extern DC_StoreRange
.extern DC_WaitWriteBufferEmpty
-.extern OS_Init
-.extern OS_AllocFromArenaHi
-.extern OS_AllocFromArenaLo
-.extern OS_SetArenaLo
-.extern OS_SetArenaHi
-.extern OS_GetInitArenaLo
-.extern OS_GetInitArenaHi
-.extern OS_GetTick
-.extern OS_InitTick
-.extern OS_DisableInterrupts
-.extern OS_RestoreInterrupts
-.extern OS_GetProcMode
-.extern OS_ResetSystem
-.extern OS_GetOwnerRtcOffset
-.extern OS_GetOwnerInfo
-.extern OS_GetMacAddress
-.extern OS_GetLowEntropyData
-.extern OS_Terminate
-.extern MI_StopDma
-.extern MI_WaitDma
-.extern MI_HBlankDmaCopy16
-.extern MI_HBlankDmaCopy32
-.extern MIi_CpuClear16
-.extern MIi_CpuCopy16
-.extern MIi_CpuClear32
-.extern MIi_CpuCopy32
-.extern MIi_CpuClearFast
-.extern MIi_CpuCopyFast
-.extern MI_Copy36B
-.extern MI_CpuFill8
-.extern MI_CpuCopy8
-.extern MI_UncompressLZ8
-.extern SND_GetWaveDataAddress
-.extern FS_FindArchive
-.extern FS_SeekFile
-.extern FS_ReadFile
-.extern FS_WaitAsync
+.extern DGT_Hash1GetDigest_R
+.extern DGT_Hash1Reset
+.extern DGT_Hash1SetSource
+.extern DGTi_hash2_arm4_small
+.extern ErrorHandling
.extern FS_CloseFile
-.extern FS_OpenFile
+.extern FS_ConvertPathToFileID
+.extern FS_FindArchive
+.extern FS_Init
.extern FS_InitFile
.extern FS_IsAvailable
-.extern FS_Init
-.extern FS_TryLoadTable
-.extern FS_SetDefaultDMA
-.extern FS_UnloadOverlay
.extern FS_LoadOverlay
-.extern FS_StartOverlay
.extern FS_LoadOverlayImage
.extern FS_LoadOverlayImageAsync
.extern FS_LoadOverlayInfo
-.extern TP_CheckError
-.extern TP_WaitBusy
-.extern TP_GetCalibratedPoint
-.extern TP_GetLatestIndexInAuto
-.extern TP_GetLatestRawPointInAuto
-.extern TP_RequestAutoSamplingStopAsync
-.extern TP_RequestAutoSamplingStartAsync
-.extern TP_WaitRawResult
-.extern TP_RequestSamplingAsync
-.extern TP_SetCalibrateParam
-.extern TP_GetUserInfo
-.extern TP_Init
-.extern MIC_StopAutoSampling
-.extern MIC_StartAutoSampling
-.extern MIC_DoSamplingAsync
-.extern MIC_Init
-.extern PM_GoSleepMode
-.extern PM_GetBackLight
-.extern FUN_020D5150
-.extern FUN_020D5168
-.extern FUN_020D5180
-.extern FUN_020D526C
-.extern FUN_020D5F40
-.extern FUN_020D614C
-.extern FUN_020D6320
-.extern FUN_020D6578
-.extern FUN_020D660C
-.extern FUN_020D66A0
-.extern FUN_020D66B0
-.extern FUN_020D6700
-.extern FUN_020D6D7C
-.extern FUN_020D6DAC
-.extern FUN_020D6DB8
-.extern FUN_020D6DC4
-.extern FUN_020D6F20
-.extern CARD_Init
-.extern CARD_IsPulledOut
-.extern FUN_020D7E9C
-.extern FUN_020D8A4C
-.extern FUN_020D8AF0
-.extern FUN_020D8B94
-.extern FUN_020D8C3C
-.extern FUN_020D8F34
-.extern FUN_020D9014
-.extern FUN_020D9060
-.extern FUN_020D9168
-.extern FUN_020D9244
-.extern FUN_020D940C
-.extern FUN_020D950C
-.extern FUN_020D9554
-.extern FUN_020D9624
-.extern FUN_020D972C
-.extern FUN_020D9774
-.extern FUN_020D97B4
-.extern FUN_020D9960
-.extern FUN_020D99EC
-.extern FUN_020D9B48
-.extern FUN_020DAD74
-.extern FUN_020DADD4
-.extern FUN_020DAF30
-.extern FUN_020DB7A8
-.extern FUN_020DDC5C
-.extern FUN_020DDCE4
-.extern FUN_020DDD28
-.extern FUN_020DDD60
-.extern FUN_020DDE44
-.extern FUN_020DDF60
-.extern FUN_020DE3F0
-.extern FUN_020DF438
-.extern FUN_020DF4A4
-.extern FUN_020DF510
-.extern FUN_020E2EAC
-.extern FUN_020E2EC8
-.extern FUN_020EA980
-.extern FUN_020EAEF0
-.extern FUN_020EB010
-.extern FUN_020EB084
-.extern FUN_020EB4C0
-.extern FUN_020EB4F4
-.extern FUN_020EB534
-.extern FUN_020EB57C
-.extern FUN_020EB5C4
-.extern FUN_020EB7B0
-.extern FUN_020EBA38
-.extern _ll_udiv
-.extern _ll_mul
-.extern _ll_shl
-.extern _s32_div_f
-.extern _u32_div_f
-.extern _fp_init
-.extern __call_static_initializers
-.extern FUN_021D74E0
-.extern FUN_021D76AC
-.extern FUN_021D77C4
-.extern FUN_021D7800
-.extern FUN_021D78FC
-.extern FUN_021D79B4
-.extern FUN_021D7CA4
-.extern FUN_021D7F8C
-.extern FUN_021D8018
-.extern FUN_021D8164
-.extern FUN_021D82BC
-.extern FUN_021D8320
-.extern FUN_021D836C
-.extern FUN_021D83A8
-.extern FUN_021D83C0
-.extern FUN_021D844C
-.extern FUN_021D8494
-.extern FUN_021D85FC
-.extern FUN_021D8624
-.extern FUN_021D865C
-.extern FUN_021D8758
-.extern FUN_021D8820
-.extern FUN_021D88E4
-.extern FUN_021D89CC
-.extern FUN_021D8B64
-.extern FUN_021D8C24
-.extern FUN_021D917C
-.extern FUN_021D959C
-.extern FUN_021D967C
-.extern FUN_021D96F4
-.extern FUN_021D9708
-.extern FUN_021D971C
-.extern FUN_021D9820
-.extern FUN_021D99F8
-.extern FUN_021DA464
-.extern FUN_021DA4EC
-.extern FUN_021DA54C
-.extern FUN_021DA58C
-.extern FUN_021DA5B8
-.extern FUN_021DA5C8
-.extern FUN_021DA5D0
-.extern FUN_021DA5D8
-.extern FUN_021DA7B4
-.extern FUN_021DAAA4
-.extern FUN_021DAC70
-.extern FUN_021DAE40
-.extern FUN_021DAED4
-.extern FUN_021DAF28
-.extern FUN_021DAF78
-.extern FUN_021DAF98
-.extern FUN_021DB030
-.extern FUN_021DB7E8
-.extern FUN_021DB858
-.extern FUN_021DC174
-.extern FUN_021DD6F0
-.extern FUN_021DD718
-.extern FUN_021DDB08
-.extern FUN_021E1374
-.extern FUN_021E1858
-.extern FUN_021E1994
-.extern FUN_021E1BF8
-.extern FUN_021E1C4C
-.extern FUN_021E1C54
-.extern FUN_021E1ECC
-.extern FUN_021E1F34
-.extern FUN_021E1F58
-.extern FUN_021E1F60
-.extern FUN_021E2464
-.extern FUN_021E2608
-.extern FUN_021E26CC
-.extern FUN_021E27E8
-.extern FUN_021E288C
-.extern FUN_021E28A0
-.extern FUN_021E2950
-.extern FUN_021E29B4
-.extern FUN_021E29C8
-.extern FUN_021E2A70
-.extern FUN_021E2AD4
-.extern FUN_021E2B80
-.extern FUN_021E2B9C
-.extern FUN_021E2BB8
-.extern FUN_021E2BD0
-.extern FUN_021E2C24
-.extern FUN_021E2C58
-.extern FUN_021E2CBC
-.extern FUN_021E32F0
-.extern FUN_021E331C
-.extern FUN_021E3424
-.extern FUN_021E3444
-.extern FUN_021E495C
-.extern FUN_021E4C54
-.extern FUN_021E4C60
-.extern FUN_021E4DE4
-.extern FUN_021E5614
-.extern FUN_021E57D4
-.extern FUN_021E5970
-.extern FUN_021E5B30
-.extern FUN_021E5FD8
-.extern FUN_021E5FE0
-.extern FUN_021E6410
-.extern FUN_021E643C
-.extern FUN_021E6990
-.extern FUN_021E69BC
-.extern FUN_021E6BF4
-.extern FUN_021E7030
-.extern FUN_021E70F0
-.extern FUN_021E7138
-.extern FUN_021E7184
-.extern FUN_021E71E8
-.extern FUN_021E7750
-.extern FUN_021E799C
-.extern FUN_021E7AC0
-.extern FUN_021E7EA0
-.extern FUN_021E7EB0
-.extern FUN_021E7EC4
-.extern FUN_021E7EC8
-.extern FUN_021E7ED0
-.extern FUN_021E7ED8
-.extern FUN_021E7FBC
-.extern FUN_021E8128
-.extern FUN_021E8130
-.extern FUN_021E8140
-.extern FUN_021E8144
-.extern FUN_021E8148
-.extern FUN_021E8158
-.extern FUN_021E81BC
-.extern FUN_021E84F4
-.extern FUN_021E856C
-.extern FUN_021E8588
-.extern FUN_021E85E4
-.extern FUN_021E85FC
-.extern FUN_021EC57C
-.extern FUN_021EC71C
-.extern FUN_021EC854
-.extern FUN_021EC864
-.extern FUN_021ECD64
-.extern FUN_021ECF14
-.extern FUN_021ED0CC
-.extern FUN_021ED49C
-.extern FUN_021ED4E0
-.extern FUN_021ED52C
-.extern FUN_021ED5C4
-.extern FUN_021ED5EC
-.extern FUN_021ED644
-.extern FUN_021ED940
-.extern FUN_021EDA48
-.extern FUN_021EDBC8
-.extern FUN_021EF5E0
-.extern FUN_021EF604
-.extern FUN_021EF620
-.extern FUN_021EF654
-.extern FUN_021EF824
-.extern FUN_021EF844
-.extern FUN_021EF8C8
-.extern FUN_021EF8DC
-.extern FUN_021EFA9C
-.extern FUN_021F02C4
-.extern FUN_021F1D8C
-.extern FUN_021F1DC8
-.extern FUN_021F1DFC
-.extern FUN_021F1EC0
-.extern FUN_021F1F78
-.extern FUN_021F2094
-.extern FUN_021F20D8
-.extern FUN_021F20F8
-.extern FUN_021F2AF4
-.extern FUN_021F2E0C
-.extern FUN_021F2E28
-.extern FUN_021F2F48
-.extern FUN_021F2F6C
-.extern FUN_021F3A18
-.extern FUN_021F3AB4
-.extern FUN_021F3B4C
-.extern FUN_021F3B7C
-.extern FUN_021F3DA4
-.extern FUN_021F44D8
-.extern FUN_021F4520
-.extern FUN_021F4568
-.extern FUN_021F4594
-.extern FUN_021F45E8
-.extern FUN_021F4608
-.extern FUN_021F4BD0
-.extern FUN_021F4C88
-.extern FUN_021F4D80
-.extern FUN_021F4DC8
-.extern FUN_021F4E7C
-.extern FUN_021F57EC
-.extern FUN_021F5C44
-.extern FUN_021F61DC
-.extern FUN_021F61E8
-.extern FUN_02211E60
-.extern FUN_0222D5C0
-.extern FUN_0222DAEC
-.extern FUN_0222DD1C
-.extern FUN_0222DD38
-.extern FUN_0222E2BC
-.extern FUN_0222E360
-.extern FUN_0222E3A0
-.extern FUN_0222E7E8
-.extern FUN_0222E874
-.extern FUN_0222ED34
-.extern FUN_0222EDBC
-.extern FUN_0222F440
-.extern FUN_0222F480
-.extern FUN_0222F7E0
-.extern FUN_0222F990
-.extern FUN_022300D4
-.extern FUN_022300DC
-.extern FUN_022300E4
-.extern FUN_022300E8
-.extern FUN_022300F4
-.extern FUN_02230100
-.extern FUN_0223010C
-.extern FUN_02230118
-.extern FUN_02230124
-.extern FUN_02230F3C
-.extern FUN_02230F70
-.extern FUN_02230F80
-.extern FUN_02231344
-.extern FUN_02231350
-.extern FUN_0223135C
-.extern FUN_02231368
-.extern FUN_02231374
-.extern FUN_02239944
-.extern FUN_02239AAC
-.extern FUN_0223CACC
-.extern FUN_0223CB08
-.extern FUN_0223CCDC
-.extern FUN_0223CD7C
-.extern FUN_0223D3D0
-.extern FUN_0223D638
-.extern FUN_0223D648
-.extern FUN_0223DFB4
-.extern FUN_0223E060
-.extern FUN_0223E118
-.extern FUN_0223E154
-.extern FUN_0223E1A4
-.extern FUN_0223E1E0
-.extern FUN_0223E2AC
-.extern FUN_0223E4A8
-.extern FUN_0223E4D4
-.extern FUN_0223E554
-.extern FUN_0223E6B8
-.extern FUN_0223E734
-.extern FUN_0223E7FC
-.extern FUN_0223EB8C
-.extern FUN_0223EF7C
-.extern FUN_0223F4D8
-.extern FUN_0223F4F4
-.extern FUN_0223F8D8
-.extern FUN_0223FCE8
-.extern FUN_02240790
-.extern FUN_022407CC
-.extern FUN_022407DC
-.extern FUN_022407F8
-.extern FUN_02240834
-.extern FUN_02240844
-.extern FUN_0224089C
-.extern FUN_022408FC
-.extern FUN_022411F4
-.extern FUN_02241230
-.extern FUN_02241914
-.extern FUN_02242A38
-.extern FUN_02242BE0
-.extern FUN_0224312C
-.extern FUN_022432E4
-.extern FUN_0224339C
-.extern FUN_022433A8
-.extern FUN_022433B0
-.extern FUN_022433B8
-.extern FUN_022433F8
-.extern FUN_02243408
-.extern FUN_02243428
-.extern FUN_02243448
-.extern FUN_0224345C
-.extern FUN_022434AC
-.extern FUN_022434BC
-.extern FUN_022434D0
-.extern FUN_02243694
-.extern FUN_022436C8
-.extern FUN_022436E8
-.extern FUN_02243780
-.extern FUN_02243838
-.extern FUN_022438DC
-.extern FUN_022438E0
-.extern FUN_022438FC
-.extern FUN_02243920
-.extern FUN_022439F8
-.extern FUN_02243AD8
-.extern FUN_02243BA8
-.extern FUN_02243C5C
-.extern FUN_02243D3C
-.extern FUN_02243DA0
-.extern FUN_02243DB8
-.extern FUN_02243DC0
-.extern FUN_02243DC4
-.extern FUN_02243DD8
-.extern FUN_02243DE0
-.extern FUN_02243E34
-.extern FUN_02243E74
-.extern FUN_02243F18
-.extern FUN_02243F50
-.extern FUN_02243F9C
-.extern FUN_02244210
-.extern FUN_02244558
-.extern FUN_02244660
-.extern FUN_022446BC
-.extern FUN_022446E0
-.extern FUN_022446FC
-.extern FUN_02244758
-.extern FUN_02244770
-.extern FUN_02244824
-.extern FUN_0224484C
-.extern FUN_02244D1C
-.extern FUN_02244D20
-.extern FUN_02244D3C
-.extern FUN_02244D40
-.extern FUN_02244D58
-.extern FUN_02244D98
-.extern FUN_02244DA0
-.extern FUN_02244DB0
-.extern FUN_02244DBC
-.extern FUN_02244DC4
-.extern FUN_02244EF8
-.extern FUN_02244F18
-.extern FUN_02244F24
-.extern FUN_02244F2C
-.extern FUN_02245088
-.extern FUN_02245114
-.extern FUN_02245190
-.extern FUN_02245198
-.extern FUN_022451F0
-.extern FUN_0224525C
-.extern FUN_022452A4
-.extern FUN_02245324
-.extern FUN_02245340
-.extern FUN_02245358
-.extern FUN_0224566C
-.extern FUN_022456E8
-.extern FUN_02245844
-.extern FUN_02245910
-.extern FUN_02245F1C
-.extern FUN_02245F4C
-.extern FUN_02245FA0
-.extern FUN_022461A4
-.extern FUN_022461B8
-.extern FUN_0224666C
-.extern FUN_022466A0
-.extern FUN_022466AC
-.extern FUN_02246F1C
-.extern FUN_02247294
-.extern FUN_022472AC
-.extern FUN_02247544
-.extern FUN_02247614
-.extern FUN_02247728
-.extern FUN_02247808
-.extern FUN_02247970
-.extern FUN_02247A34
-.extern FUN_022483BC
-.extern FUN_022483E0
-.extern FUN_022483EC
-.extern FUN_02248724
-.extern FUN_0224884C
-.extern FUN_022488CC
-.extern FUN_022488EC
-.extern FUN_022488F4
-.extern FUN_022488FC
-.extern FUN_0224891C
-.extern FUN_02248B54
-.extern FUN_02248B58
-.extern FUN_02248B5C
-.extern FUN_02248B60
-.extern FUN_02248B6C
-.extern FUN_02248CC0
-.extern FUN_02248CD0
-.extern FUN_02248DF8
-.extern FUN_02248F70
-.extern FUN_02248FE0
-.extern FUN_02249038
-.extern FUN_022490A0
-.extern FUN_022491FC
-.extern FUN_022494C8
-.extern FUN_02249508
-.extern FUN_02249668
-.extern FUN_022497E8
-.extern FUN_02249E6C
-.extern FUN_02249E78
-.extern FUN_02249E84
-.extern FUN_02249E90
-.extern FUN_0224A310
-.extern FUN_0224A528
-.extern FUN_0224A7C8
-.extern FUN_0224ABAC
-.extern FUN_0224B124
-.extern FUN_0224B2C4
-.extern FUN_0224B568
-.extern FUN_0224B818
-.extern FUN_0224B86C
-.extern FUN_0224B9E0
-.extern FUN_0224BBEC
-.extern FUN_0224BD90
-.extern FUN_0224C038
-.extern FUN_0224C27C
-.extern FUN_0224C520
-.extern FUN_0224C678
-.extern FUN_0224C6E8
-.extern FUN_0224C6F4
-.extern FUN_0224C700
-.extern FUN_0224C8C8
-.extern FUN_0224CA2C
-.extern FUN_0224CA54
-.extern FUN_0224CA58
-.extern FUN_0224CA88
-.extern FUN_0224CA94
-.extern FUN_0224CAA0
-.extern FUN_0224CAB4
-.extern FUN_0224CB30
-.extern FUN_0224CBB0
-.extern FUN_0224CC24
-.extern FUN_0224CECC
-.extern FUN_0224D14C
-.extern FUN_0224D2E0
-.extern FUN_0224D3E8
-.extern FUN_0224D70C
-.extern FUN_0224D76C
-.extern FUN_0224D79C
-.extern FUN_0224DCB8
-.extern FUN_0224DD94
-.extern FUN_0224DDB8
-.extern FUN_0224E554
-.extern FUN_0224E764
-.extern FUN_0224E7C4
-.extern FUN_0224F12C
-.extern FUN_02252534
-.extern FUN_02252538
-.extern FUN_022567E0
-.extern NitroMain
-
-.extern FUN_020005F2
-.extern CTRDG_Init
-.extern PM_Init
-.extern CARD_LockRom
-.extern CARD_UnlockRom
-.extern CARDi_ReadRom
-.extern MIi_UncompressBackward
-.extern PMi_SetLED
-.extern OS_SpinWait
-.extern PMi_Lock
-.extern PMi_SetLEDAsync
-.extern PMi_ReadRegister
-.extern PMi_WaitBusy
-.extern CTRDG_IsExisting
-.extern PMi_SendSleepStart
-.extern FUN_01FF857C
-.extern FUN_01FF84E4
-.extern FUN_01FF85F0
-.extern FUN_01FF84A4
-.extern FUN_01FF8544
-
+.extern FS_OpenFile
+.extern FS_OpenFileFast
+.extern FS_ReadFile
+.extern FS_SeekFile
+.extern FS_SetDefaultDMA
+.extern FS_StartOverlay
+.extern FS_TryLoadTable
+.extern FS_UnloadOverlay
+.extern FS_WaitAsync
+.extern FUNRTC_Init
+.extern FUN_0200019E
+.extern FUN_020002FE
+.extern SVC_WaitByLoop
+.extern OSi_ReferSymbol
+.extern FUN_02000DF4
+.extern FUN_02000E7C
+.extern FUN_02000EE8
+.extern FUN_02000F18
+.extern FUN_02000FA4
+.extern FUN_02000FE8
.extern FUN_020010A8
.extern FUN_02001204
.extern FUN_02001300
@@ -943,105 +75,19 @@
.extern FUN_020020EC
.extern FUN_02002198
.extern FUN_020021AC
-.extern StringCopy
-.extern StringCopyN
-.extern StringLength
-.extern StringNotEqual
-.extern StringNotEqualN
-.extern StringFillEOS
-.extern ConvertUIntToDecimalString
-
-.extern FUN_02002E14
-.extern FUN_02002E4C
-.extern FUN_020054C8
-.extern FUN_02005F60
-.extern FUN_02005FDC
-.extern FUN_02006234
-.extern FUN_02006260
-.extern FUN_02006290
-.extern FUN_0200A86C
-.extern FUN_0200A8B8
-.extern FUN_0200CCA4
-.extern FUN_0200CCF8
-.extern FUN_0200E3A0
-.extern FUN_0201265C
-.extern FUN_02012838
-.extern FUN_02012870
-.extern FUN_02012880
-.extern FUN_02013690
-.extern FUN_020136C0
-.extern FUN_020136E0
-.extern FUN_020136F8
-.extern FUN_02016998
-.extern FUN_02016A8C
-.extern FUN_02018FF4
-.extern FUN_02019150
-.extern FUN_02019178
-.extern FUN_020191D0
-.extern FUN_02019620
-.extern FUN_02019658
-.extern FUN_020196F4
-.extern FUN_0201A8C8
-.extern FUN_0201AB0C
-.extern FUN_0201AB10
-.extern FUN_0201B9E0
-.extern FUN_0201BA1C
-.extern FUN_0201BD84
-.extern FUN_0201BE3C
-.extern FUN_0201CDD0
-.extern FUN_0201CE04
-.extern FUN_020225F8
-.extern FUN_0202287C
-.extern FUN_02032DAC
-.extern FUN_020335B8
-.extern FUN_02033678
-.extern FUN_02033F70
-.extern FUN_02006930
-.extern FUN_02006C08
-.extern FUN_0200CA44
-.extern FUN_0200CAB4
-.extern FUN_02016A18
-.extern FUN_02017CD0
-.extern FUN_02018540
-.extern FUN_0201974C
-.extern FUN_0201AB08
-.extern FUN_0201AB14
-.extern FUN_0201AB18
-.extern FUN_0201B6C8
-.extern FUN_0201B8B8
-.extern FUN_0201B8E0
-.extern FUN_0201B914
-.extern FUN_0201B9EC
-.extern FUN_0201BCBC
-.extern FUN_0201C05C
-.extern FUN_0201C1EC
-.extern FUN_02021590
-.extern FUN_020215C8
-.extern FUN_020215E0
-.extern FUN_02021750
-.extern FUN_020218D8
-.extern FUN_02021934
-.extern FUN_0202199C
-.extern FUN_02021F2C
-.extern FUN_020222E8
-.extern FUN_020222F8
-.extern FUN_02022308
-.extern FUN_02022310
-.extern FUN_02029F04
-.extern FUN_02029F10
-.extern FUN_02029F14
-.extern FUN_02029F4C
-.extern FUN_020313EC
-.extern FUN_020169D8
.extern FUN_02002840
.extern FUN_02002B60
.extern FUN_02002B7C
.extern FUN_02002BB8
+.extern FUN_02002C14
+.extern FUN_02002C50
.extern FUN_02002C84
.extern FUN_02002CC0
.extern FUN_02002CF8
.extern FUN_02002DB0
.extern FUN_02002DE0
+.extern FUN_02002E14
+.extern FUN_02002E4C
.extern FUN_02002ED0
.extern FUN_02002EEC
.extern FUN_02002F08
@@ -1058,6 +104,8 @@
.extern FUN_020038E4
.extern FUN_020038F0
.extern FUN_02003974
+.extern FUN_02003B98
+.extern FUN_02003C10
.extern FUN_020040F4
.extern FUN_02004104
.extern FUN_02004124
@@ -1080,6 +128,7 @@
.extern FUN_02005404
.extern FUN_02005410
.extern FUN_0200541C
+.extern FUN_020054C8
.extern FUN_020054F0
.extern FUN_02005508
.extern FUN_02005514
@@ -1095,923 +144,30 @@
.extern FUN_02005E80
.extern FUN_02005E90
.extern FUN_02005F14
+.extern FUN_02005F60
+.extern FUN_02005FDC
.extern FUN_020061E8
.extern FUN_0200621C
+.extern FUN_02006234
+.extern FUN_02006260
.extern FUN_02006268
.extern FUN_02006278
.extern FUN_0200627C
.extern FUN_0200628C
-.extern LoadFromNARC
-.extern LoadFromNarc_2
+.extern FUN_02006290
.extern FUN_02006528
.extern FUN_02006548
.extern FUN_02006564
-.extern LoadFromNARC_7
.extern FUN_02006670
.extern FUN_020066F4
.extern FUN_02006704
.extern FUN_02006774
.extern FUN_02006814
-.extern gScriptCmdTable
-.extern FUN_020399A0
-.extern FUN_020399A4
-.extern FUN_020399A8
-.extern FUN_020399B4
-.extern FUN_02039A28
-.extern FUN_02039A40
-.extern FUN_02039A5C
-.extern FUN_02039A78
-.extern FUN_02039A90
-.extern FUN_02039AAC
-.extern FUN_02039ACC
-.extern FUN_02039AF8
-.extern FUN_02039B28
-.extern FUN_02039B50
-.extern FUN_02039B78
-.extern FUN_02039BA0
-.extern FUN_02039BBC
-.extern FUN_02039BDC
-.extern FUN_02039C08
-.extern FUN_02039C40
-.extern FUN_02039C78
-.extern FUN_02039CE4
-.extern FUN_02039CF8
-.extern FUN_02039D10
-.extern FUN_02039D48
-.extern FUN_02039D78
-.extern FUN_02039DAC
-.extern FUN_02039DC4
-.extern FUN_02039DD0
-.extern FUN_02039E04
-.extern FUN_02039E38
-.extern FUN_02039E50
-.extern FUN_02039E68
-.extern FUN_02039E84
-.extern FUN_02039EC0
-.extern FUN_02039EE8
-.extern FUN_02039F0C
-.extern FUN_02039F30
-.extern FUN_02039F58
-.extern FUN_02039F88
-.extern FUN_02039FB8
-.extern FUN_02039FDC
-.extern FUN_0203A00C
-.extern FUN_0203A038
-.extern FUN_0203A2C4
-.extern FUN_0203A304
-.extern FUN_0203A388
-.extern FUN_0203A400
-.extern FUN_0203A45C
-.extern FUN_0203A4D0
-.extern FUN_0203A560
-.extern FUN_0203A590
-.extern FUN_0203A5D8
-.extern FUN_0203A608
-.extern FUN_0203A780
-.extern FUN_0203A830
-.extern FUN_0203A85C
-.extern FUN_0203A878
-.extern FUN_0203A8B8
-.extern FUN_0203A9F0
-.extern FUN_0203AA90
-.extern FUN_0203A630
-.extern FUN_0203AAA0
-.extern FUN_0203DEA8
-.extern FUN_0203AB8C
-.extern FUN_0203AC14
-.extern FUN_0203AC9C
-.extern FUN_0203AD08
-.extern FUN_0203ADC4
-.extern FUN_0203AE4C
-.extern FUN_0203AED4
-.extern FUN_0203AF34
-.extern FUN_0203AF58
-.extern FUN_020414E0
-.extern FUN_020414FC
-.extern FUN_02041518
-.extern FUN_02041558
-.extern FUN_02041588
-.extern FUN_020415AC
-.extern FUN_020415BC
-.extern FUN_020413E8
-.extern FUN_020413F8
-.extern FUN_0204140C
-.extern FUN_02041424
-.extern FUN_0204143C
-.extern FUN_02041478
-.extern FUN_0204149C
-.extern FUN_020414B8
-.extern FUN_020414CC
-.extern FUN_020415E0
-.extern FUN_02041618
-.extern FUN_02041644
-.extern FUN_02041650
-.extern FUN_02041664
-.extern FUN_0203AFC4
-.extern FUN_0203B148
-.extern FUN_0203B1F0
-.extern FUN_0203B3B0
-.extern FUN_0203B3C0
-.extern FUN_0203B3DC
-.extern FUN_0203B3F8
-.extern FUN_0203B440
-.extern FUN_0203B468
-.extern FUN_0203B500
-.extern FUN_0203B544
-.extern FUN_0203B574
-.extern FUN_0203B5B8
-.extern FUN_0203B640
-.extern FUN_0203B724
-.extern FUN_0203B758
-.extern FUN_0203B7D8
-.extern FUN_02043C6C
-.extern FUN_02043C90
-.extern FUN_02043CE4
-.extern FUN_02043D78
-.extern FUN_02043DC8
-.extern FUN_02043DE0
-.extern FUN_02043A44
-.extern FUN_02043A94
-.extern FUN_02043AAC
-.extern FUN_02043ACC
-.extern FUN_02043AFC
-.extern FUN_02043B28
-.extern FUN_02045784
-.extern FUN_020457DC
-.extern FUN_02045834
-.extern FUN_0204588C
-.extern FUN_020458E4
-.extern FUN_02045918
-.extern FUN_02045950
-.extern FUN_02045954
-.extern FUN_02045958
-.extern FUN_020459AC
-.extern FUN_020459E8
-.extern FUN_02045A3C
-.extern FUN_02045A78
-.extern FUN_02045ACC
-.extern FUN_02045B08
-.extern FUN_02045B44
-.extern FUN_02045B80
-.extern FUN_02045BC8
-.extern FUN_02045C04
-.extern FUN_02045C40
-.extern FUN_02045C7C
-.extern FUN_02045CD4
-.extern FUN_02045D10
-.extern FUN_02045D4C
-.extern FUN_0203B81C
-.extern FUN_0203B85C
-.extern FUN_0203B8A0
-.extern FUN_020442BC
-.extern FUN_02044414
-.extern FUN_0204449C
-.extern FUN_020444F4
-.extern FUN_02044598
-.extern FUN_0203BB34
-.extern FUN_0203BB80
-.extern FUN_0203BB84
-.extern FUN_0203BB88
-.extern FUN_0203BB8C
-.extern FUN_02045264
-.extern FUN_0203BC1C
-.extern FUN_0203BCBC
-.extern FUN_0203BCCC
-.extern FUN_0203BCD8
-.extern FUN_0203BF20
-.extern FUN_0203BF2C
-.extern FUN_0203BF84
-.extern FUN_0203BFEC
-.extern FUN_0203C118
-.extern FUN_0203C12C
-.extern FUN_0203C278
-.extern FUN_0203C2C4
-.extern FUN_0203C2E0
-.extern FUN_0203C2F0
-.extern FUN_0203C300
-.extern FUN_0203C32C
-.extern FUN_0203C33C
-.extern FUN_0203C368
-.extern FUN_0203C3C8
-.extern FUN_0203C3E8
-.extern FUN_0203C430
-.extern FUN_020416A8
-.extern FUN_02041770
-.extern FUN_020417E0
-.extern FUN_02041808
-.extern FUN_0203C4F0
-.extern FUN_0203C520
-.extern FUN_0203C6C4
-.extern FUN_0203C70C
-.extern FUN_0203C730
-.extern FUN_0203C844
-.extern FUN_0203C874
-.extern FUN_0203C8B4
-.extern FUN_0203C8E4
-.extern FUN_0203C930
-.extern FUN_0203C960
-.extern FUN_0203C990
-.extern FUN_0203CA20
-.extern FUN_0203CA2C
-.extern FUN_0203CA5C
-.extern FUN_0203CB08
-.extern FUN_0203CB20
-.extern FUN_0203CB48
-.extern FUN_0203CB60
-.extern FUN_020406CC
-.extern FUN_02040700
-.extern FUN_02040724
-.extern FUN_02040748
-.extern FUN_02040790
-.extern FUN_020407C8
-.extern FUN_02040800
-.extern FUN_0204083C
-.extern FUN_02040874
-.extern FUN_0204091C
-.extern FUN_020409C0
-.extern FUN_020409F8
-.extern FUN_02040A30
-.extern FUN_02040A7C
-.extern FUN_02040B0C
-.extern FUN_02040B5C
-.extern FUN_02040BAC
-.extern FUN_0203CBBC
-.extern FUN_02040BFC
-.extern FUN_02040C34
-.extern FUN_02040C6C
-.extern FUN_02040CA4
-.extern FUN_0203CB70
-.extern FUN_0204185C
-.extern FUN_0204188C
-.extern FUN_0203CBE8
-.extern FUN_02041970
-.extern FUN_020419F8
-.extern FUN_02041A80
-.extern FUN_02041AB4
-.extern FUN_02041AD4
-.extern FUN_02041AE0
-.extern FUN_02041B10
-.extern FUN_02041B70
-.extern FUN_02041B9C
-.extern FUN_02041BC4
-.extern FUN_02041BF0
-.extern FUN_0203CC88
-.extern FUN_0203CD20
-.extern FUN_0203CDB8
-.extern FUN_0203CDC4
-.extern FUN_0203CDD0
-.extern FUN_0203CE00
-.extern FUN_0203FE90
-.extern FUN_0203FEC0
-.extern FUN_0203FF10
-.extern FUN_02040028
-.extern FUN_02040074
-.extern FUN_020400C8
-.extern FUN_0204011C
-.extern FUN_02040170
-.extern FUN_020401CC
-.extern FUN_02040204
-.extern FUN_02040220
-.extern FUN_0204025C
-.extern FUN_02040298
-.extern FUN_020402D4
-.extern FUN_02040304
-.extern FUN_02040340
-.extern FUN_02040370
-.extern FUN_020403A0
-.extern FUN_020403D0
-.extern FUN_02040414
-.extern FUN_02040458
-.extern FUN_020404FC
-.extern FUN_0204052C
-.extern FUN_0204056C
-.extern FUN_02040488
-.extern FUN_020405CC
-.extern FUN_020405F8
-.extern FUN_02040638
-.extern FUN_0204064C
-.extern FUN_02040660
-.extern FUN_020406C0
-.extern FUN_0204059C
-.extern FUN_020405B4
-.extern FUN_02044CE0
-.extern FUN_02044D44
-.extern FUN_0203CE0C
-.extern FUN_0203CE8C
-.extern FUN_0203CEBC
-.extern FUN_0203CF04
-.extern FUN_0203CF34
-.extern FUN_0203CF64
-.extern FUN_0203CF94
-.extern FUN_0203CFC4
-.extern FUN_0203CFC8
-.extern FUN_0203D050
-.extern FUN_0203D0F8
-.extern FUN_0203D134
-.extern FUN_0203D140
-.extern FUN_0203D150
-.extern FUN_0203D178
-.extern FUN_0203D194
-.extern FUN_0203D1A4
-.extern FUN_0203D1C0
-.extern FUN_0203D214
-.extern FUN_0203C054
-.extern FUN_0203C090
-.extern FUN_0203C0CC
-.extern FUN_0203D23C
-.extern FUN_0203D248
-.extern FUN_0203D278
-.extern FUN_0203D2A4
-.extern FUN_0203D2E4
-.extern FUN_0203D330
-.extern FUN_0203D33C
-.extern FUN_0203D36C
-.extern FUN_0203D3A4
-.extern FUN_0203D60C
-.extern FUN_0203D61C
-.extern FUN_0203D3DC
-.extern FUN_0203D448
-.extern FUN_0203D458
-.extern FUN_0203D490
-.extern FUN_0203D528
-.extern FUN_0203D5B0
-.extern FUN_0203D5F8
-.extern FUN_0203D630
-.extern FUN_0203D66C
-.extern FUN_0203D6C4
-.extern FUN_0203D560
-.extern FUN_0203FCF4
-.extern FUN_0203FDBC
-.extern FUN_0203FE08
-.extern FUN_0203FE48
-.extern FUN_0203D868
-.extern FUN_0203D874
-.extern FUN_0203D8A0
-.extern FUN_0203D8D0
-.extern FUN_0203D8E8
-.extern FUN_0203D8EC
-.extern FUN_0203D938
-.extern FUN_0203D948
-.extern FUN_0203D728
-.extern FUN_0203D738
-.extern FUN_0203D774
-.extern FUN_0203D834
-.extern FUN_020453F4
-.extern FUN_02045424
-.extern FUN_02045438
-.extern FUN_02045468
-.extern FUN_02045484
-.extern FUN_020454CC
-.extern FUN_0204552C
-.extern FUN_02045500
-.extern FUN_0204557C
-.extern FUN_02045590
-.extern FUN_020455BC
-.extern FUN_020455D0
-.extern FUN_020455E4
-.extern FUN_02045610
-.extern FUN_02045624
-.extern FUN_02045638
-.extern FUN_02045664
-.extern FUN_0203DC00
-.extern FUN_0203DC58
-.extern FUN_0203DC70
-.extern FUN_0203DC88
-.extern FUN_0203DCA0
-.extern FUN_02043E00
-.extern FUN_02043E20
-.extern FUN_0203DCB8
-.extern FUN_0203DCC8
-.extern FUN_0203DCD8
-.extern FUN_0203DCE8
-.extern FUN_0203DCF8
-.extern FUN_0203DD08
-.extern FUN_0203DD18
-.extern FUN_0203DD34
-.extern FUN_02044B00
-.extern FUN_0203C460
-.extern FUN_0203C4B0
-.extern FUN_0203D958
-.extern FUN_02040D04
-.extern FUN_02040D7C
-.extern FUN_02042B0C
-.extern FUN_02042B40
-.extern FUN_02042B74
-.extern FUN_02042BA8
-.extern FUN_02042BDC
-.extern FUN_02042C10
-.extern FUN_02042C44
-.extern FUN_02042C8C
-.extern FUN_02042CBC
-.extern FUN_0203D998
-.extern FUN_0203D9E8
-.extern FUN_0203DA78
-.extern FUN_0203DAB0
-.extern FUN_0203DAE8
-.extern FUN_0203DB38
-.extern FUN_0203DB88
-.extern FUN_0203AB44
-.extern FUN_0203AB74
-.extern FUN_0203DBD4
-.extern FUN_0203A484
-.extern FUN_0203B8E4
-.extern FUN_0203B944
-.extern FUN_0203B968
-.extern FUN_0203B9B4
-.extern FUN_0203BA3C
-.extern FUN_0203BAB0
-.extern FUN_0203BAF4
-.extern FUN_0204434C
-.extern FUN_020443A8
-.extern FUN_02044B2C
-.extern FUN_02044B84
-.extern FUN_02044C0C
-.extern FUN_02044C88
-.extern FUN_0203DD60
-.extern FUN_0203DE00
-.extern FUN_0203DE4C
-.extern FUN_0203DE58
-.extern FUN_0203DE80
-.extern FUN_02043CB4
-.extern FUN_02043E9C
-.extern FUN_02044120
-.extern FUN_02044138
-.extern FUN_0204413C
-.extern FUN_02043E50
-.extern FUN_02043E68
-.extern FUN_02043EFC
-.extern FUN_02043D28
-.extern FUN_0203DD50
-.extern FUN_02044140
-.extern FUN_02043F50
-.extern FUN_02043FA0
-.extern FUN_02043FF4
-.extern FUN_0203DEC4
-.extern FUN_0203DEF8
-.extern FUN_0203DF2C
-.extern FUN_0203DF38
-.extern FUN_0203DF64
-.extern FUN_0203DF84
-.extern FUN_0203DFA8
-.extern FUN_0203DFE0
-.extern FUN_0204488C
-.extern FUN_020448D4
-.extern FUN_020449A4
-.extern FUN_02044034
-.extern FUN_0203B618
-.extern FUN_020440C0
-.extern FUN_020440F0
-.extern FUN_02044F58
-.extern FUN_0203E018
-.extern FUN_0203E054
-.extern FUN_0203E078
-.extern FUN_0203E0CC
-.extern FUN_0203E120
-.extern FUN_02045D88
-.extern FUN_02045DD0
-.extern FUN_02044D8C
-.extern FUN_02044E34
-.extern FUN_02044E78
-.extern FUN_02040E4C
-.extern FUN_0203E138
-.extern FUN_0203E168
-.extern FUN_0203E254
-.extern FUN_02045678
-.extern FUN_020456D4
-.extern FUN_0204572C
-.extern FUN_0203E258
-.extern FUN_0203E29C
-.extern FUN_0203E2F8
-.extern FUN_0203E35C
-.extern FUN_0203E38C
-.extern FUN_0203C174
-.extern FUN_0203C1AC
-.extern FUN_0203C200
-.extern FUN_02042354
-.extern FUN_02042364
-.extern FUN_02042394
-.extern FUN_020423B0
-.extern FUN_02042700
-.extern FUN_02042780
-.extern FUN_020427A8
-.extern FUN_020427D0
-.extern FUN_02042864
-.extern FUN_02042894
-.extern FUN_020428E0
-.extern FUN_0203E4F0
-.extern FUN_0203E510
-.extern FUN_0203E568
-.extern FUN_0203E3D0
-.extern FUN_0203E408
-.extern FUN_0203E440
-.extern FUN_0203E470
-.extern FUN_0203E4A0
-.extern FUN_0203E4B0
-.extern FUN_02044ED8
-.extern FUN_0203E4D8
-.extern FUN_02044F20
-.extern FUN_02045268
-.extern FUN_02045398
-.extern FUN_0204539C
-.extern FUN_020452B4
-.extern FUN_02045308
-.extern FUN_0204469C
-.extern FUN_02044658
-.extern FUN_0203BC2C
-.extern FUN_02039A10
-.extern FUN_0203A04C
-.extern FUN_0203A098
-.extern FUN_0203A0FC
-.extern FUN_0203A13C
-.extern FUN_0203A188
-.extern FUN_0203A210
-.extern FUN_0203C7F4
-.extern FUN_0203C820
-.extern FUN_0203E5DC
-.extern FUN_0203C788
-.extern FUN_0203C7E4
-.extern FUN_0203C0FC
-.extern FUN_0203E674
-.extern FUN_0203BD08
-.extern FUN_0203BD28
-.extern FUN_0203BE50
-.extern FUN_0203BECC
-.extern FUN_0203BF00
-.extern FUN_0203A3C4
-.extern FUN_0203E684
-.extern FUN_0203E6B4
-.extern FUN_0203E6C4
-.extern FUN_0203E6FC
-.extern FUN_0203E72C
-.extern FUN_0204478C
-.extern FUN_02044800
-.extern FUN_0203E744
-.extern FUN_02044158
-.extern FUN_0204416C
-.extern FUN_02044198
-.extern FUN_0203E774
-.extern FUN_0203E7F0
-.extern FUN_0203E81C
-.extern FUN_0203E848
-.extern FUN_0203E858
-.extern FUN_02041C38
-.extern FUN_02045E1C
-.extern FUN_02045E20
-.extern FUN_02045EE0
-.extern FUN_02045EE4
-.extern FUN_02045F84
-.extern FUN_02045F88
-.extern FUN_02045F24
-.extern FUN_02045FCC
-.extern FUN_0203E870
-.extern FUN_0203E894
-.extern FUN_0203E8C4
-.extern FUN_0203E8F4
-.extern FUN_0203E928
-.extern FUN_0203E940
-.extern FUN_0203E954
-.extern FUN_0203E968
-.extern FUN_02044FE8
-.extern FUN_0204505C
-.extern FUN_02045104
-.extern FUN_02045170
-.extern FUN_02040EB4
-.extern FUN_0203E9CC
-.extern FUN_0203EA68
-.extern FUN_02041E40
-.extern FUN_02041FDC
-.extern FUN_02042038
-.extern FUN_02042110
-.extern FUN_0203EA90
-.extern FUN_0203EAB0
-.extern FUN_0203EB20
-.extern FUN_0203EB48
-.extern FUN_0203EB88
-.extern FUN_02042D1C
-.extern FUN_02046010
-.extern FUN_0204601C
-.extern FUN_02046028
-.extern FUN_0204602C
-.extern FUN_0203C5BC
-.extern FUN_0203C614
-.extern FUN_0203C680
-.extern FUN_0203EBC8
-.extern FUN_02044A6C
-.extern FUN_02044A94
-.extern FUN_0203EBE4
-.extern FUN_0203ECAC
-.extern FUN_0203ECD8
-.extern FUN_0203ECF4
-.extern FUN_0203ED10
-.extern FUN_02041194
-.extern FUN_020411C4
-.extern FUN_02041340
-.extern FUN_02040964
-.extern FUN_0203ED70
-.extern FUN_0204387C
-.extern FUN_020438D0
-.extern FUN_02043918
-.extern FUN_020439B4
-.extern FUN_0203FE80
-.extern FUN_0203EDA4
-.extern FUN_0203EDC8
-.extern FUN_0203EDE0
-.extern FUN_0203EE08
-.extern FUN_0203EE18
-.extern FUN_0203EE28
-.extern FUN_0203EE58
-.extern FUN_0203EE68
-.extern FUN_0203EE78
-.extern FUN_02040DB4
-.extern FUN_0203EE98
-.extern FUN_0203EED8
-.extern FUN_0203EF58
-.extern FUN_0203F00C
-.extern FUN_0203F020
-.extern FUN_0203F034
-.extern FUN_0203F058
-.extern FUN_0203F07C
-.extern FUN_0203F110
-.extern FUN_0203F174
-.extern FUN_0203F19C
-.extern FUN_0203A288
-.extern FUN_0203F234
-.extern FUN_0203F254
-.extern FUN_0203F26C
-.extern FUN_0203C58C
-.extern FUN_02040DEC
-.extern FUN_0203F2AC
-.extern FUN_02043B84
-.extern FUN_0203F2E4
-.extern FUN_02043C28
-.extern FUN_0203F31C
-.extern FUN_02044730
-.extern FUN_0203F348
-.extern FUN_0203F38C
-.extern FUN_0203F39C
-.extern FUN_0204214C
-.extern FUN_0203F3AC
-.extern FUN_0203F44C
-.extern FUN_0203F418
-.extern FUN_020408BC
-.extern FUN_02044A0C
-.extern FUN_0203F484
-.extern FUN_02041674
-.extern FUN_0203F4D8
-.extern FUN_0203F508
-.extern FUN_0203F5D4
-.extern FUN_0203F604
-.extern FUN_0203F634
-.extern FUN_0203F664
-.extern FUN_0203F6E4
-.extern FUN_0203F720
-.extern FUN_0203BDB8
-.extern FUN_0203BE68
-.extern FUN_0203BE80
-.extern FUN_0203F760
-.extern FUN_0203F7C8
-.extern FUN_0203F80C
-.extern FUN_0203F880
-.extern FUN_0203F924
-.extern FUN_02042950
-.extern FUN_02042980
-.extern FUN_02042998
-.extern FUN_020429B8
-.extern FUN_020429E8
-.extern FUN_02042A18
-.extern FUN_02042A48
-.extern FUN_02042A98
-.extern FUN_0203D7DC
-.extern FUN_0203ACC4
-.extern FUN_0203F8C0
-.extern FUN_0203F954
-.extern FUN_0204190C
-.extern FUN_0203B024
-.extern FUN_0203F9DC
-.extern FUN_0203F988
-.extern FUN_0203F9B0
-.extern FUN_0203B914
-.extern FUN_020453A0
-.extern FUN_0203FA14
-.extern FUN_02043B54
-.extern FUN_02043BD0
-.extern FUN_0203FA58
-.extern FUN_0203B7F0
-.extern FUN_0203FB4C
-.extern FUN_0203B790
-.extern FUN_020413C0
-.extern FUN_0203FB64
-.extern FUN_0203FB94
-.extern FUN_0203FBA0
-.extern FUN_0203FBAC
-.extern FUN_02040EF8
-.extern FUN_0203B2E0
-.extern FUN_0203FBBC
-.extern FUN_0203FC1C
-.extern FUN_020451D0
-.extern FUN_02042000
-.extern FUN_0203AD54
-.extern FUN_0203D4E8
-.extern FUN_0203D920
-.extern FUN_02041B40
-.extern FUN_0203D0A4
-.extern FUN_0203FC58
-.extern FUN_0203CAE8
-.extern FUN_0203A340
-.extern FUN_0203FC80
-.extern FUN_0203FCB0
-.extern FUN_0203FCDC
-.extern FUN_02040F34
-.extern FUN_02040F6C
-.extern FUN_02040FA4
-.extern FUN_02040FDC
-.extern FUN_02041014
-.extern FUN_0204104C
-.extern FUN_02041094
-.extern FUN_020410C8
-.extern FUN_02041100
-.extern FUN_02041138
-.extern FUN_02041174
-.extern FUN_0203AF84
-.extern FUN_0203AFA4
-.extern FUN_02038CD8
-.extern FUN_02038D10
-.extern FUN_020394F0
-.extern FUN_02039528
-.extern FUN_02039694
-.extern FUN_020462AC
-.extern FUN_020463CC
-.extern FUN_020463EC
-.extern FUN_0204640C
-.extern FUN_02046420
-.extern FUN_0204646C
-.extern FUN_0204647C
-.extern FUN_0204649C
-.extern FUN_020464A4
-.extern FUN_02046500
-.extern FUN_02046528
-.extern FUN_0204652C
-.extern FUN_02046530
-.extern FUN_02048D90
-.extern FUN_02048EC8
-.extern FUN_02048FC8
-.extern FUN_0204A6E0
-.extern FUN_0204AB58
-.extern FUN_0204ADBC
-.extern FUN_0204ADE0
-.extern FUN_0204AF3C
-.extern FUN_0204AF84
-.extern FUN_0204B2A4
-.extern FUN_0204B33C
-.extern FUN_0204BAB0
-.extern FUN_0204C104
-.extern FUN_0204C1A8
-.extern FUN_0204D6C0
-.extern FUN_0204E2FC
-.extern FUN_020527D8
-.extern FUN_02052B74
-.extern FUN_02052CD8
-.extern FUN_02052DE8
-.extern FUN_02052F74
-.extern FUN_020547A4
-.extern FUN_020552F8
-.extern FUN_02055320
-.extern FUN_0205532C
-.extern FUN_020553A0
-.extern FUN_020553C4
-.extern FUN_02055468
-.extern FUN_020557F4
-.extern FUN_02055A38
-.extern FUN_02055B14
-.extern FUN_02055B30
-.extern FUN_02055B8C
-.extern FUN_02057800
-.extern FUN_0205785C
-.extern FUN_02057BAC
-.extern FUN_02058458
-.extern FUN_02058780
-.extern FUN_020587B0
-.extern FUN_020588D4
-.extern FUN_02058BE4
-.extern FUN_02058D74
-.extern FUN_0205CE48
-.extern FUN_0205CE80
-.extern FUN_0205DD18
-.extern FUN_0205DD38
-.extern FUN_0205DD40
-.extern FUN_0205ECE0
-.extern FUN_0205F214
-.extern FUN_0205F244
-.extern FUN_0205F2E4
-.extern FUN_0205F388
-.extern FUN_0205F524
-.extern FUN_0205F6C8
-.extern FUN_0205F6D8
-.extern FUN_0205F7A0
-.extern FUN_02060144
-.extern FUN_020613CC
-.extern FUN_02061A8C
-.extern FUN_02063888
-.extern FUN_02063948
-.extern FUN_02063964
-.extern FUN_02064E90
-.extern FUN_02065054
-.extern FUN_02065070
-.extern FUN_02065314
-.extern FUN_02066978
-.extern FUN_020669A0
-.extern FUN_020669D4
-.extern FUN_02066A20
-.extern FUN_02066ACC
-.extern FUN_020671BC
-.extern FUN_020672BC
-.extern FUN_02067830
-.extern FUN_02068678
-.extern FUN_020689E0
-.extern FUN_02068B68
-.extern FUN_02068C00
-.extern FUN_02068E14
-.extern FUN_020690C4
-.extern FUN_020690CC
-.extern FUN_020690E4
-.extern FUN_02069168
-.extern FUN_02069B40
-.extern FUN_02069B88
-.extern FUN_0206B484
-.extern FUN_0206B6C8
-.extern FUN_0206B7BC
-.extern FUN_0206B9AC
-.extern FUN_0206B9B0
-.extern FUN_0206BB1C
-.extern FUN_0206BB28
-.extern FUN_0206C700
-.extern FUN_0206C91C
-.extern FUN_0206C92C
-.extern FUN_0206E2F0
-.extern FUN_0206E308
-.extern FUN_0206E314
-.extern FUN_0206E340
-.extern FUN_0206E354
-.extern FUN_0206E358
-.extern FUN_0206E360
-.extern FUN_0206E37C
-.extern FUN_0206E384
-.extern FUN_0206E38C
-.extern FUN_0206E7B8
-.extern FUN_0206EA98
-.extern FUN_0206EAB8
-.extern FUN_0206EB1C
-.extern FUN_0206EE50
-.extern FUN_0206EFEC
-.extern FUN_0206F158
-.extern FUN_0206F164
-.extern FUN_0206F17C
-.extern FUN_0206F190
-.extern FUN_02077A84
-.extern FUN_02077AC4
-.extern FUN_02079C70
-.extern FUN_0207B000
-.extern FUN_0207C2A4
-.extern FUN_020851B8
-.extern FUN_020851DC
-.extern FUN_020851F8
-.extern FUN_0208524C
-.extern FUN_02085258
-.extern FUN_02085264
-.extern FUN_0208526C
-.extern FUN_02085290
-.extern FUN_02085338
-.extern FUN_020853A8
-.extern FUN_020853B0
-.extern FUN_020853B4
-.extern FUN_020853BC
-.extern FUN_020853E4
-.extern FUN_020853E8
-.extern FUN_020853EC
-.extern FUN_020853F0
-.extern FUN_020853FC
-.extern FUN_020854E0
-.extern FUN_02085538
-.extern FUN_02085578
-.extern FUN_020855B0
-.extern FUN_020855E4
-.extern FUN_0208560C
-.extern FUN_0208562C
-.extern FUN_020863DC
-.extern FUN_02087A1C
-.extern FUN_02087A50
-.extern FUN_02087D00
-.extern FUN_02087E14
-.extern FUN_02088D40
-.extern FUN_0208A0B8
-.extern FUN_0208A300
-.extern FUN_0208A320
-.extern FUN_0208A9B8
-.extern FUN_02069A64
-.extern FUN_020638BC
.extern FUN_0200687C
.extern FUN_020068C8
+.extern FUN_02006930
.extern FUN_02006BB0
+.extern FUN_02006C08
.extern FUN_02006C98
.extern FUN_02006D98
.extern FUN_02006ED4
@@ -2020,6 +176,7 @@
.extern FUN_0200737C
.extern FUN_02007390
.extern FUN_020073A0
+.extern FUN_02007534
.extern FUN_02007558
.extern FUN_0200782C
.extern FUN_020079E0
@@ -2064,9 +221,13 @@
.extern FUN_02009FA0
.extern FUN_0200A208
.extern FUN_0200A274
+.extern FUN_0200A2AC
+.extern FUN_0200A318
.extern FUN_0200A344
.extern FUN_0200A648
.extern FUN_0200A738
+.extern FUN_0200A86C
+.extern FUN_0200A8B8
.extern FUN_0200A8E0
.extern FUN_0200A914
.extern FUN_0200A968
@@ -2147,6 +308,8 @@
.extern FUN_0200C124
.extern FUN_0200C13C
.extern FUN_0200C154
+.extern FUN_0200C358
+.extern FUN_0200C368
.extern FUN_0200C378
.extern FUN_0200C388
.extern FUN_0200C398
@@ -2166,9 +329,13 @@
.extern FUN_0200C884
.extern FUN_0200C9D8
.extern FUN_0200CA0C
+.extern FUN_0200CA44
+.extern FUN_0200CAB4
.extern FUN_0200CABC
.extern FUN_0200CAFC
.extern FUN_0200CB00
+.extern FUN_0200CCA4
+.extern FUN_0200CCF8
.extern FUN_0200CD64
.extern FUN_0200CD68
.extern FUN_0200D0BC
@@ -2181,18 +348,26 @@
.extern FUN_0200DC4C
.extern FUN_0200DCA4
.extern FUN_0200E1D0
+.extern FUN_0200E2D8
.extern FUN_0200E308
.extern FUN_0200E388
.extern FUN_0200E394
+.extern FUN_0200E3A0
.extern FUN_0200E3BC
.extern FUN_02011B20
.extern FUN_02012420
+.extern FUN_0201259C
+.extern FUN_020125D4
+.extern FUN_0201265C
.extern FUN_020126B4
.extern FUN_020126D8
.extern FUN_020126FC
.extern FUN_0201277C
.extern FUN_020127A8
.extern FUN_020127C0
+.extern FUN_02012838
+.extern FUN_02012870
+.extern FUN_02012880
.extern FUN_020128A0
.extern FUN_02012CC8
.extern FUN_02012CDC
@@ -2208,6 +383,10 @@
.extern FUN_020133E8
.extern FUN_0201343C
.extern FUN_02013440
+.extern FUN_02013690
+.extern FUN_020136C0
+.extern FUN_020136E0
+.extern FUN_020136F8
.extern FUN_0201373C
.extern FUN_02013754
.extern FUN_0201385C
@@ -2237,16 +416,25 @@
.extern FUN_02014D7C
.extern FUN_02014D9C
.extern FUN_02015CF8
+.extern FUN_02015E30
+.extern FUN_02015E60
.extern FUN_02015EF4
.extern FUN_02015F10
.extern FUN_02015F1C
.extern FUN_02015F34
.extern FUN_020161A4
+.extern FUN_020163BC
+.extern FUN_02016438
+.extern FUN_02016464
.extern FUN_0201669C
.extern FUN_020166C8
.extern FUN_0201681C
.extern FUN_02016828
.extern FUN_020168D0
+.extern FUN_02016998
+.extern FUN_020169D8
+.extern FUN_02016A18
+.extern FUN_02016A8C
.extern FUN_02016AF8
.extern FUN_02016B94
.extern FUN_02016BBC
@@ -2257,6 +445,7 @@
.extern FUN_020179E0
.extern FUN_02017B48
.extern FUN_02017B54
+.extern FUN_02017CD0
.extern FUN_02017CE8
.extern FUN_02017DFC
.extern FUN_02017E14
@@ -2265,36 +454,64 @@
.extern FUN_02017FE4
.extern FUN_02018148
.extern FUN_02018170
+.extern FUN_02018540
.extern FUN_020186B4
.extern FUN_02018744
.extern FUN_0201886C
.extern FUN_02018884
+.extern FUN_02018FF4
.extern FUN_0201901C
.extern FUN_02019048
.extern FUN_02019064
+.extern FUN_02019150
+.extern FUN_02019178
.extern FUN_020191A4
+.extern FUN_020191D0
.extern FUN_02019220
.extern FUN_02019548
.extern FUN_02019570
.extern FUN_0201958C
+.extern FUN_02019620
+.extern FUN_02019658
+.extern FUN_020196F4
+.extern FUN_0201974C
+.extern FUN_0201A8C8
+.extern FUN_0201AB08
+.extern FUN_0201AB0C
+.extern FUN_0201AB10
+.extern FUN_0201AB14
+.extern FUN_0201AB18
.extern FUN_0201AB60
.extern FUN_0201AC68
.extern FUN_0201AEE4
.extern FUN_0201AFBC
.extern FUN_0201B234
+.extern FUN_0201B5CC
.extern FUN_0201B6C4
+.extern FUN_0201B6C8
.extern FUN_0201B6D0
.extern FUN_0201B76C
.extern FUN_0201B7DC
+.extern FUN_0201B8B8
+.extern FUN_0201B8E0
+.extern FUN_0201B914
.extern FUN_0201B93C
.extern FUN_0201B970
.extern FUN_0201B9D4
+.extern FUN_0201B9E0
+.extern FUN_0201B9EC
.extern FUN_0201BA10
+.extern FUN_0201BA1C
.extern FUN_0201BA60
+.extern FUN_0201BCBC
.extern FUN_0201BD5C
.extern FUN_0201BD70
.extern FUN_0201BD7C
+.extern FUN_0201BD84
.extern FUN_0201BDE0
+.extern FUN_0201BE3C
+.extern FUN_0201C05C
+.extern FUN_0201C1EC
.extern FUN_0201C24C
.extern FUN_0201C29C
.extern FUN_0201C30C
@@ -2303,6 +520,8 @@
.extern FUN_0201CC08
.extern FUN_0201CC24
.extern FUN_0201CD04
+.extern FUN_0201CDD0
+.extern FUN_0201CE04
.extern FUN_0201D040
.extern FUN_0201D12C
.extern FUN_0201D168
@@ -2354,6 +573,14 @@
.extern FUN_02020398
.extern FUN_02020968
.extern FUN_02020988
+.extern FUN_02020AFC
+.extern FUN_02021590
+.extern FUN_020215C8
+.extern FUN_020215E0
+.extern FUN_02021750
+.extern FUN_020218D8
+.extern FUN_02021934
+.extern FUN_0202199C
.extern FUN_020219F4
.extern FUN_02021A20
.extern FUN_02021A4C
@@ -2362,11 +589,18 @@
.extern FUN_02021D3C
.extern FUN_02021E28
.extern FUN_02021EF0
+.extern FUN_02021F2C
.extern FUN_0202212C
+.extern FUN_02022294
.extern FUN_020222AC
.extern FUN_020222B4
+.extern FUN_020222C4
+.extern FUN_020222E8
.extern FUN_020222F0
+.extern FUN_020222F8
.extern FUN_02022300
+.extern FUN_02022308
+.extern FUN_02022310
.extern FUN_02022318
.extern FUN_020223BC
.extern FUN_02022504
@@ -2374,14 +608,18 @@
.extern FUN_02022528
.extern FUN_02022534
.extern FUN_02022540
+.extern FUN_0202254C
+.extern FUN_020225F8
.extern FUN_02022610
.extern FUN_0202263C
.extern FUN_02022720
+.extern FUN_020227FC
.extern FUN_02022800
.extern FUN_02022804
.extern FUN_0202280C
.extern FUN_0202282C
.extern FUN_02022830
+.extern FUN_0202287C
.extern FUN_02023788
.extern FUN_02023794
.extern FUN_02023818
@@ -2619,6 +857,11 @@
.extern FUN_02029EC0
.extern FUN_02029EC4
.extern FUN_02029EE4
+.extern FUN_02029EF8
+.extern FUN_02029F04
+.extern FUN_02029F10
+.extern FUN_02029F14
+.extern FUN_02029F4C
.extern FUN_02029F9C
.extern FUN_02029FC8
.extern FUN_0202A07C
@@ -2715,6 +958,7 @@
.extern FUN_0202FA10
.extern FUN_0202FA1C
.extern FUN_0202FA48
+.extern FUN_0202FB80
.extern FUN_02030A78
.extern FUN_02030ADC
.extern FUN_02030B3C
@@ -2724,6 +968,7 @@
.extern FUN_02030E7C
.extern FUN_02030F20
.extern FUN_02030F40
+.extern FUN_02030F60
.extern FUN_02030F74
.extern FUN_02030F88
.extern FUN_02030FA8
@@ -2738,6 +983,7 @@
.extern FUN_02031280
.extern FUN_020312BC
.extern FUN_020313B4
+.extern FUN_020313EC
.extern FUN_02031400
.extern FUN_02031438
.extern FUN_02031588
@@ -2775,15 +1021,21 @@
.extern FUN_020328C0
.extern FUN_020328F4
.extern FUN_02032B6C
+.extern FUN_02032DAC
.extern FUN_020334E8
.extern FUN_02033534
.extern FUN_02033564
.extern FUN_02033578
+.extern FUN_020335B8
.extern FUN_020335F0
+.extern FUN_02033678
+.extern FUN_020337E8
.extern FUN_0203384C
.extern FUN_02033E74
.extern FUN_02033ED0
.extern FUN_02033F20
+.extern FUN_02033F70
+.extern FUN_02034188
.extern FUN_020344AC
.extern FUN_020344D8
.extern FUN_020344FC
@@ -2791,6 +1043,7 @@
.extern FUN_0203451C
.extern FUN_02034678
.extern FUN_020346CC
+.extern FUN_02034774
.extern FUN_02034788
.extern FUN_020347B0
.extern FUN_020347C4
@@ -2853,9 +1106,18 @@
.extern FUN_02034FC0
.extern FUN_02034FE4
.extern FUN_02035068
+.extern FUN_020351A0
.extern FUN_02035D04
+.extern FUN_02035E50
+.extern FUN_02036A78
+.extern FUN_02036AB8
+.extern FUN_02036B90
.extern FUN_02036BC4
+.extern FUN_02036BDC
+.extern FUN_02036D94
+.extern FUN_02036DD4
.extern FUN_02037024
+.extern FUN_02037350
.extern FUN_02037394
.extern FUN_0203739C
.extern FUN_020373AC
@@ -2913,44 +1175,772 @@
.extern FUN_020389CC
.extern FUN_02038AD0
.extern FUN_02038AF4
-.extern SetupBytecodeScript
-.extern SetupNativeScript
-.extern StopScript
.extern FUN_02038B6C
-.extern ScriptJump
-.extern ScriptCall
-.extern ScriptReturn
-.extern ScriptReadHalfword
-.extern ScriptReadWord
-.extern FUN_02007534
-.extern FUN_0200C358
-.extern FUN_0200C368
-.extern FUN_02030F60
-.extern FUN_02034774
-.extern FUN_020351A0
-.extern FUN_02035E50
-.extern FUN_02036A78
-.extern FUN_02036AB8
-.extern FUN_02036B90
-.extern FUN_02036BDC
-.extern FUN_02036D94
-.extern FUN_02036DD4
-.extern FUN_02037350
-.extern RunScriptCommand
-.extern InitScriptContext
+.extern FUN_02038C78
+.extern FUN_02038CA8
+.extern FUN_02038CD8
+.extern FUN_02038D10
.extern FUN_02038EB0
.extern FUN_02039438
.extern FUN_02039460
.extern FUN_020394B8
+.extern FUN_020394F0
+.extern FUN_02039504
+.extern FUN_02039528
.extern FUN_0203953C
.extern FUN_02039550
+.extern FUN_02039564
+.extern FUN_0203959C
+.extern FUN_020395BC
.extern FUN_020395F4
.extern FUN_02039618
.extern FUN_0203962C
.extern FUN_02039640
.extern FUN_0203965C
.extern FUN_02039678
+.extern FUN_02039694
+.extern FUN_02039874
+.extern FUN_0203989C
+.extern FUN_020399A0
+.extern FUN_020399A4
+.extern FUN_020399A8
+.extern FUN_020399B4
+.extern FUN_02039A10
+.extern FUN_02039A28
+.extern FUN_02039A40
+.extern FUN_02039A5C
+.extern FUN_02039A78
+.extern FUN_02039A90
+.extern FUN_02039AAC
+.extern FUN_02039ACC
+.extern FUN_02039AF8
+.extern FUN_02039B28
+.extern FUN_02039B50
+.extern FUN_02039B78
+.extern FUN_02039BA0
+.extern FUN_02039BBC
+.extern FUN_02039BDC
+.extern FUN_02039C08
+.extern FUN_02039C40
+.extern FUN_02039C78
+.extern FUN_02039CE4
+.extern FUN_02039CF8
+.extern FUN_02039D10
+.extern FUN_02039D48
+.extern FUN_02039D78
+.extern FUN_02039DAC
+.extern FUN_02039DC4
+.extern FUN_02039DD0
+.extern FUN_02039E04
+.extern FUN_02039E38
+.extern FUN_02039E50
+.extern FUN_02039E68
+.extern FUN_02039E84
+.extern FUN_02039EC0
+.extern FUN_02039EE8
+.extern FUN_02039F0C
+.extern FUN_02039F30
+.extern FUN_02039F58
+.extern FUN_02039F88
+.extern FUN_02039FB8
+.extern FUN_02039FDC
+.extern FUN_0203A00C
+.extern FUN_0203A038
+.extern FUN_0203A04C
+.extern FUN_0203A098
+.extern FUN_0203A0FC
+.extern FUN_0203A13C
+.extern FUN_0203A188
+.extern FUN_0203A210
+.extern FUN_0203A288
+.extern FUN_0203A2C4
+.extern FUN_0203A304
+.extern FUN_0203A340
+.extern FUN_0203A388
+.extern FUN_0203A3C4
+.extern FUN_0203A400
+.extern FUN_0203A45C
+.extern FUN_0203A484
+.extern FUN_0203A4D0
+.extern FUN_0203A560
+.extern FUN_0203A590
+.extern FUN_0203A5D8
+.extern FUN_0203A608
+.extern FUN_0203A630
+.extern FUN_0203A780
+.extern FUN_0203A830
+.extern FUN_0203A85C
+.extern FUN_0203A878
+.extern FUN_0203A8B8
+.extern FUN_0203A9F0
+.extern FUN_0203AA90
+.extern FUN_0203AAA0
+.extern FUN_0203AB44
+.extern FUN_0203AB74
+.extern FUN_0203AB8C
+.extern FUN_0203AC14
+.extern FUN_0203AC9C
+.extern FUN_0203ACC4
+.extern FUN_0203AD08
+.extern FUN_0203AD54
+.extern FUN_0203ADC4
+.extern FUN_0203AE4C
+.extern FUN_0203AED4
+.extern FUN_0203AF34
+.extern FUN_0203AF58
+.extern FUN_0203AF84
+.extern FUN_0203AFA4
+.extern FUN_0203AFC4
+.extern FUN_0203B024
+.extern FUN_0203B148
+.extern FUN_0203B1F0
+.extern FUN_0203B2E0
+.extern FUN_0203B3B0
+.extern FUN_0203B3C0
+.extern FUN_0203B3DC
+.extern FUN_0203B3F8
+.extern FUN_0203B440
+.extern FUN_0203B468
+.extern FUN_0203B500
+.extern FUN_0203B544
+.extern FUN_0203B574
+.extern FUN_0203B5B8
+.extern FUN_0203B618
+.extern FUN_0203B640
+.extern FUN_0203B724
+.extern FUN_0203B758
+.extern FUN_0203B790
+.extern FUN_0203B7D8
+.extern FUN_0203B7F0
+.extern FUN_0203B81C
+.extern FUN_0203B85C
+.extern FUN_0203B8A0
+.extern FUN_0203B8E4
+.extern FUN_0203B914
+.extern FUN_0203B944
+.extern FUN_0203B968
+.extern FUN_0203B9B4
+.extern FUN_0203BA3C
+.extern FUN_0203BAB0
+.extern FUN_0203BAF4
+.extern FUN_0203BB34
+.extern FUN_0203BB80
+.extern FUN_0203BB84
+.extern FUN_0203BB88
+.extern FUN_0203BB8C
+.extern FUN_0203BC1C
+.extern FUN_0203BC2C
+.extern FUN_0203BCBC
+.extern FUN_0203BCCC
+.extern FUN_0203BCD8
+.extern FUN_0203BD08
+.extern FUN_0203BD28
+.extern FUN_0203BDB8
+.extern FUN_0203BE50
+.extern FUN_0203BE68
+.extern FUN_0203BE80
+.extern FUN_0203BECC
+.extern FUN_0203BF00
+.extern FUN_0203BF20
+.extern FUN_0203BF2C
+.extern FUN_0203BF84
+.extern FUN_0203BFEC
+.extern FUN_0203C054
+.extern FUN_0203C090
+.extern FUN_0203C0CC
+.extern FUN_0203C0FC
+.extern FUN_0203C118
+.extern FUN_0203C12C
+.extern FUN_0203C174
+.extern FUN_0203C1AC
+.extern FUN_0203C200
+.extern FUN_0203C278
+.extern FUN_0203C2C4
+.extern FUN_0203C2E0
+.extern FUN_0203C2F0
+.extern FUN_0203C300
+.extern FUN_0203C32C
+.extern FUN_0203C33C
+.extern FUN_0203C368
+.extern FUN_0203C3C8
+.extern FUN_0203C3E8
+.extern FUN_0203C430
+.extern FUN_0203C460
+.extern FUN_0203C4B0
+.extern FUN_0203C4F0
+.extern FUN_0203C520
+.extern FUN_0203C58C
+.extern FUN_0203C5BC
+.extern FUN_0203C614
+.extern FUN_0203C680
+.extern FUN_0203C6C4
+.extern FUN_0203C70C
+.extern FUN_0203C730
+.extern FUN_0203C788
+.extern FUN_0203C7E4
+.extern FUN_0203C7F4
+.extern FUN_0203C820
+.extern FUN_0203C844
+.extern FUN_0203C874
+.extern FUN_0203C8B4
+.extern FUN_0203C8E4
+.extern FUN_0203C930
+.extern FUN_0203C960
+.extern FUN_0203C990
+.extern FUN_0203CA20
+.extern FUN_0203CA2C
+.extern FUN_0203CA5C
+.extern FUN_0203CAE8
+.extern FUN_0203CB08
+.extern FUN_0203CB20
+.extern FUN_0203CB48
+.extern FUN_0203CB60
+.extern FUN_0203CB70
+.extern FUN_0203CBBC
+.extern FUN_0203CBE8
+.extern FUN_0203CC88
+.extern FUN_0203CD20
+.extern FUN_0203CDB8
+.extern FUN_0203CDC4
+.extern FUN_0203CDD0
+.extern FUN_0203CE00
+.extern FUN_0203CE0C
+.extern FUN_0203CE8C
+.extern FUN_0203CEBC
+.extern FUN_0203CF04
+.extern FUN_0203CF34
+.extern FUN_0203CF64
+.extern FUN_0203CF94
+.extern FUN_0203CFC4
+.extern FUN_0203CFC8
+.extern FUN_0203D050
+.extern FUN_0203D0A4
+.extern FUN_0203D0F8
+.extern FUN_0203D134
+.extern FUN_0203D140
+.extern FUN_0203D150
+.extern FUN_0203D178
+.extern FUN_0203D194
+.extern FUN_0203D1A4
+.extern FUN_0203D1C0
+.extern FUN_0203D214
+.extern FUN_0203D23C
+.extern FUN_0203D248
+.extern FUN_0203D278
+.extern FUN_0203D2A4
+.extern FUN_0203D2E4
+.extern FUN_0203D330
+.extern FUN_0203D33C
+.extern FUN_0203D36C
+.extern FUN_0203D3A4
+.extern FUN_0203D3DC
+.extern FUN_0203D448
+.extern FUN_0203D458
+.extern FUN_0203D490
+.extern FUN_0203D4E8
+.extern FUN_0203D528
+.extern FUN_0203D560
+.extern FUN_0203D5B0
+.extern FUN_0203D5F8
+.extern FUN_0203D60C
+.extern FUN_0203D61C
+.extern FUN_0203D630
+.extern FUN_0203D66C
+.extern FUN_0203D6C4
+.extern FUN_0203D728
+.extern FUN_0203D738
+.extern FUN_0203D774
+.extern FUN_0203D7DC
+.extern FUN_0203D834
+.extern FUN_0203D868
+.extern FUN_0203D874
+.extern FUN_0203D8A0
+.extern FUN_0203D8D0
+.extern FUN_0203D8E8
+.extern FUN_0203D8EC
+.extern FUN_0203D920
+.extern FUN_0203D938
+.extern FUN_0203D948
+.extern FUN_0203D958
+.extern FUN_0203D998
+.extern FUN_0203D9E8
+.extern FUN_0203DA78
+.extern FUN_0203DAB0
+.extern FUN_0203DAE8
+.extern FUN_0203DB38
+.extern FUN_0203DB88
+.extern FUN_0203DBD4
+.extern FUN_0203DC00
+.extern FUN_0203DC58
+.extern FUN_0203DC70
+.extern FUN_0203DC88
+.extern FUN_0203DCA0
+.extern FUN_0203DCB8
+.extern FUN_0203DCC8
+.extern FUN_0203DCD8
+.extern FUN_0203DCE8
+.extern FUN_0203DCF8
+.extern FUN_0203DD08
+.extern FUN_0203DD18
+.extern FUN_0203DD34
+.extern FUN_0203DD50
+.extern FUN_0203DD60
+.extern FUN_0203DE00
+.extern FUN_0203DE4C
+.extern FUN_0203DE58
+.extern FUN_0203DE80
+.extern FUN_0203DEA8
+.extern FUN_0203DEC4
+.extern FUN_0203DEF8
+.extern FUN_0203DF2C
+.extern FUN_0203DF38
+.extern FUN_0203DF64
+.extern FUN_0203DF84
+.extern FUN_0203DFA8
+.extern FUN_0203DFE0
+.extern FUN_0203E018
+.extern FUN_0203E054
+.extern FUN_0203E078
+.extern FUN_0203E0CC
+.extern FUN_0203E120
+.extern FUN_0203E138
+.extern FUN_0203E168
+.extern FUN_0203E254
+.extern FUN_0203E258
+.extern FUN_0203E29C
+.extern FUN_0203E2F8
+.extern FUN_0203E35C
+.extern FUN_0203E38C
+.extern FUN_0203E3D0
+.extern FUN_0203E408
+.extern FUN_0203E440
+.extern FUN_0203E470
+.extern FUN_0203E4A0
+.extern FUN_0203E4B0
+.extern FUN_0203E4D8
+.extern FUN_0203E4F0
+.extern FUN_0203E510
+.extern FUN_0203E568
+.extern FUN_0203E5DC
+.extern FUN_0203E674
+.extern FUN_0203E684
+.extern FUN_0203E6B4
+.extern FUN_0203E6C4
+.extern FUN_0203E6FC
+.extern FUN_0203E72C
+.extern FUN_0203E744
+.extern FUN_0203E774
+.extern FUN_0203E7F0
+.extern FUN_0203E81C
+.extern FUN_0203E848
+.extern FUN_0203E858
+.extern FUN_0203E870
+.extern FUN_0203E894
+.extern FUN_0203E8C4
+.extern FUN_0203E8F4
+.extern FUN_0203E928
+.extern FUN_0203E940
+.extern FUN_0203E954
+.extern FUN_0203E968
+.extern FUN_0203E9CC
+.extern FUN_0203EA68
+.extern FUN_0203EA90
+.extern FUN_0203EAB0
+.extern FUN_0203EB20
+.extern FUN_0203EB48
+.extern FUN_0203EB88
+.extern FUN_0203EBC8
+.extern FUN_0203EBE4
+.extern FUN_0203ECAC
+.extern FUN_0203ECD8
+.extern FUN_0203ECF4
+.extern FUN_0203ED10
+.extern FUN_0203ED70
+.extern FUN_0203EDA4
+.extern FUN_0203EDC8
+.extern FUN_0203EDE0
+.extern FUN_0203EE08
+.extern FUN_0203EE18
+.extern FUN_0203EE28
+.extern FUN_0203EE58
+.extern FUN_0203EE68
+.extern FUN_0203EE78
+.extern FUN_0203EE98
+.extern FUN_0203EED8
+.extern FUN_0203EF58
+.extern FUN_0203F00C
+.extern FUN_0203F020
+.extern FUN_0203F034
+.extern FUN_0203F058
+.extern FUN_0203F07C
+.extern FUN_0203F110
+.extern FUN_0203F174
+.extern FUN_0203F19C
+.extern FUN_0203F234
+.extern FUN_0203F254
+.extern FUN_0203F26C
+.extern FUN_0203F2AC
+.extern FUN_0203F2E4
+.extern FUN_0203F31C
+.extern FUN_0203F348
+.extern FUN_0203F38C
+.extern FUN_0203F39C
+.extern FUN_0203F3AC
+.extern FUN_0203F418
+.extern FUN_0203F44C
+.extern FUN_0203F484
+.extern FUN_0203F4D8
+.extern FUN_0203F508
+.extern FUN_0203F5D4
+.extern FUN_0203F604
+.extern FUN_0203F634
+.extern FUN_0203F664
+.extern FUN_0203F6E4
+.extern FUN_0203F720
+.extern FUN_0203F760
+.extern FUN_0203F7C8
+.extern FUN_0203F80C
+.extern FUN_0203F880
+.extern FUN_0203F8C0
+.extern FUN_0203F924
+.extern FUN_0203F954
+.extern FUN_0203F988
+.extern FUN_0203F9B0
+.extern FUN_0203F9DC
+.extern FUN_0203FA14
+.extern FUN_0203FA58
+.extern FUN_0203FB4C
+.extern FUN_0203FB64
+.extern FUN_0203FB94
+.extern FUN_0203FBA0
+.extern FUN_0203FBAC
+.extern FUN_0203FBBC
+.extern FUN_0203FC1C
+.extern FUN_0203FC58
+.extern FUN_0203FC80
+.extern FUN_0203FCB0
+.extern FUN_0203FCDC
+.extern FUN_0203FCF4
+.extern FUN_0203FDBC
+.extern FUN_0203FE08
+.extern FUN_0203FE48
+.extern FUN_0203FE80
+.extern FUN_0203FE90
+.extern FUN_0203FEC0
+.extern FUN_0203FF10
+.extern FUN_02040028
+.extern FUN_02040074
+.extern FUN_020400C8
+.extern FUN_0204011C
+.extern FUN_02040170
+.extern FUN_020401CC
+.extern FUN_02040204
+.extern FUN_02040220
+.extern FUN_0204025C
+.extern FUN_02040298
+.extern FUN_020402D4
+.extern FUN_02040304
+.extern FUN_02040340
+.extern FUN_02040370
+.extern FUN_020403A0
+.extern FUN_020403D0
+.extern FUN_02040414
+.extern FUN_02040458
+.extern FUN_02040488
+.extern FUN_020404FC
+.extern FUN_0204052C
+.extern FUN_0204056C
+.extern FUN_0204059C
+.extern FUN_020405B4
+.extern FUN_020405CC
+.extern FUN_020405F8
+.extern FUN_02040638
+.extern FUN_0204064C
+.extern FUN_02040660
+.extern FUN_020406C0
+.extern FUN_020406CC
+.extern FUN_02040700
+.extern FUN_02040724
+.extern FUN_02040748
+.extern FUN_02040790
+.extern FUN_020407C8
+.extern FUN_02040800
+.extern FUN_0204083C
+.extern FUN_02040874
+.extern FUN_020408BC
+.extern FUN_0204091C
+.extern FUN_02040964
+.extern FUN_020409C0
+.extern FUN_020409F8
+.extern FUN_02040A30
+.extern FUN_02040A7C
+.extern FUN_02040B0C
+.extern FUN_02040B5C
+.extern FUN_02040BAC
+.extern FUN_02040BFC
+.extern FUN_02040C34
+.extern FUN_02040C6C
+.extern FUN_02040CA4
+.extern FUN_02040D04
+.extern FUN_02040D7C
+.extern FUN_02040DB4
+.extern FUN_02040DEC
+.extern FUN_02040E4C
+.extern FUN_02040EB4
+.extern FUN_02040EF8
+.extern FUN_02040F34
+.extern FUN_02040F6C
+.extern FUN_02040FA4
+.extern FUN_02040FDC
+.extern FUN_02041014
+.extern FUN_0204104C
+.extern FUN_02041094
+.extern FUN_020410C8
+.extern FUN_02041100
+.extern FUN_02041138
+.extern FUN_02041174
+.extern FUN_02041194
+.extern FUN_020411C4
+.extern FUN_02041340
+.extern FUN_020413C0
+.extern FUN_020413E8
+.extern FUN_020413F8
+.extern FUN_0204140C
+.extern FUN_02041424
+.extern FUN_0204143C
+.extern FUN_02041478
+.extern FUN_0204149C
+.extern FUN_020414B8
+.extern FUN_020414CC
+.extern FUN_020414E0
+.extern FUN_020414FC
+.extern FUN_02041518
+.extern FUN_02041558
+.extern FUN_02041588
+.extern FUN_020415AC
+.extern FUN_020415BC
+.extern FUN_020415E0
+.extern FUN_02041618
+.extern FUN_02041644
+.extern FUN_02041650
+.extern FUN_02041664
+.extern FUN_02041674
+.extern FUN_020416A8
+.extern FUN_02041770
+.extern FUN_020417E0
+.extern FUN_02041808
+.extern FUN_0204185C
+.extern FUN_0204188C
+.extern FUN_0204190C
+.extern FUN_02041970
+.extern FUN_020419F8
+.extern FUN_02041A80
+.extern FUN_02041AB4
+.extern FUN_02041AD4
+.extern FUN_02041AE0
+.extern FUN_02041B10
+.extern FUN_02041B40
+.extern FUN_02041B70
+.extern FUN_02041B9C
+.extern FUN_02041BC4
+.extern FUN_02041BF0
+.extern FUN_02041C38
+.extern FUN_02041E40
+.extern FUN_02041FDC
+.extern FUN_02042000
+.extern FUN_02042038
+.extern FUN_02042110
+.extern FUN_0204214C
+.extern FUN_02042354
+.extern FUN_02042364
+.extern FUN_02042394
+.extern FUN_020423B0
+.extern FUN_02042700
+.extern FUN_02042780
+.extern FUN_020427A8
+.extern FUN_020427D0
+.extern FUN_02042864
+.extern FUN_02042894
+.extern FUN_020428E0
+.extern FUN_02042950
+.extern FUN_02042980
+.extern FUN_02042998
+.extern FUN_020429B8
+.extern FUN_020429E8
+.extern FUN_02042A18
+.extern FUN_02042A48
+.extern FUN_02042A98
+.extern FUN_02042B0C
+.extern FUN_02042B40
+.extern FUN_02042B74
+.extern FUN_02042BA8
+.extern FUN_02042BDC
+.extern FUN_02042C10
+.extern FUN_02042C44
+.extern FUN_02042C8C
+.extern FUN_02042CBC
+.extern FUN_02042D1C
+.extern FUN_0204387C
+.extern FUN_020438D0
+.extern FUN_02043918
+.extern FUN_020439B4
+.extern FUN_02043A44
+.extern FUN_02043A94
+.extern FUN_02043AAC
+.extern FUN_02043ACC
+.extern FUN_02043AFC
+.extern FUN_02043B28
+.extern FUN_02043B54
+.extern FUN_02043B84
+.extern FUN_02043BD0
+.extern FUN_02043C28
+.extern FUN_02043C6C
+.extern FUN_02043C90
+.extern FUN_02043CB4
+.extern FUN_02043CE4
+.extern FUN_02043D28
+.extern FUN_02043D78
+.extern FUN_02043DC8
+.extern FUN_02043DE0
+.extern FUN_02043E00
+.extern FUN_02043E20
+.extern FUN_02043E50
+.extern FUN_02043E68
+.extern FUN_02043E9C
+.extern FUN_02043EFC
+.extern FUN_02043F50
+.extern FUN_02043FA0
+.extern FUN_02043FF4
+.extern FUN_02044034
+.extern FUN_020440C0
+.extern FUN_020440F0
+.extern FUN_02044120
+.extern FUN_02044138
+.extern FUN_0204413C
+.extern FUN_02044140
+.extern FUN_02044158
+.extern FUN_0204416C
+.extern FUN_02044198
+.extern FUN_020442BC
+.extern FUN_0204434C
+.extern FUN_020443A8
+.extern FUN_02044414
+.extern FUN_0204449C
+.extern FUN_020444F4
+.extern FUN_02044598
+.extern FUN_02044658
+.extern FUN_0204469C
+.extern FUN_02044730
+.extern FUN_0204478C
+.extern FUN_02044800
+.extern FUN_0204488C
+.extern FUN_020448D4
+.extern FUN_020449A4
+.extern FUN_02044A0C
+.extern FUN_02044A6C
+.extern FUN_02044A94
+.extern FUN_02044B00
+.extern FUN_02044B2C
+.extern FUN_02044B84
+.extern FUN_02044C0C
+.extern FUN_02044C88
+.extern FUN_02044CE0
+.extern FUN_02044D44
+.extern FUN_02044D8C
+.extern FUN_02044E34
+.extern FUN_02044E78
+.extern FUN_02044ED8
+.extern FUN_02044F20
+.extern FUN_02044F58
+.extern FUN_02044FE8
+.extern FUN_0204505C
+.extern FUN_02045104
+.extern FUN_02045170
+.extern FUN_020451D0
+.extern FUN_02045264
+.extern FUN_02045268
+.extern FUN_020452B4
+.extern FUN_02045308
+.extern FUN_02045398
+.extern FUN_0204539C
+.extern FUN_020453A0
+.extern FUN_020453F4
+.extern FUN_02045424
+.extern FUN_02045438
+.extern FUN_02045468
+.extern FUN_02045484
+.extern FUN_020454CC
+.extern FUN_02045500
+.extern FUN_0204552C
+.extern FUN_0204557C
+.extern FUN_02045590
+.extern FUN_020455BC
+.extern FUN_020455D0
+.extern FUN_020455E4
+.extern FUN_02045610
+.extern FUN_02045624
+.extern FUN_02045638
+.extern FUN_02045664
+.extern FUN_02045678
+.extern FUN_020456D4
+.extern FUN_0204572C
+.extern FUN_02045784
+.extern FUN_020457DC
+.extern FUN_02045834
+.extern FUN_0204588C
+.extern FUN_020458E4
+.extern FUN_02045918
+.extern FUN_02045950
+.extern FUN_02045954
+.extern FUN_02045958
+.extern FUN_020459AC
+.extern FUN_020459E8
+.extern FUN_02045A3C
+.extern FUN_02045A78
+.extern FUN_02045ACC
+.extern FUN_02045B08
+.extern FUN_02045B44
+.extern FUN_02045B80
+.extern FUN_02045BC8
+.extern FUN_02045C04
+.extern FUN_02045C40
+.extern FUN_02045C7C
+.extern FUN_02045CD4
+.extern FUN_02045D10
+.extern FUN_02045D4C
+.extern FUN_02045D88
+.extern FUN_02045DD0
+.extern FUN_02045E1C
+.extern FUN_02045E20
+.extern FUN_02045EE0
+.extern FUN_02045EE4
+.extern FUN_02045F24
+.extern FUN_02045F84
+.extern FUN_02045F88
+.extern FUN_02045FCC
+.extern FUN_02046010
+.extern FUN_0204601C
+.extern FUN_02046028
+.extern FUN_0204602C
.extern FUN_02046030
+.extern FUN_020462AC
+.extern FUN_020462B8
+.extern FUN_020462E4
+.extern FUN_0204630C
+.extern FUN_02046338
+.extern FUN_02046380
+.extern FUN_020463CC
+.extern FUN_020463EC
+.extern FUN_0204640C
+.extern FUN_02046420
+.extern FUN_0204646C
+.extern FUN_0204647C
+.extern FUN_0204649C
+.extern FUN_020464A4
+.extern FUN_02046500
+.extern FUN_02046528
+.extern FUN_0204652C
+.extern FUN_02046530
.extern FUN_02046534
.extern FUN_02046DB4
.extern FUN_02046E18
@@ -2964,6 +1954,9 @@
.extern FUN_02048498
.extern FUN_02048694
.extern FUN_02048C58
+.extern FUN_02048D90
+.extern FUN_02048EC8
+.extern FUN_02048FC8
.extern FUN_02049240
.extern FUN_02049274
.extern FUN_02049EA4
@@ -2975,13 +1968,21 @@
.extern FUN_0204A20C
.extern FUN_0204A248
.extern FUN_0204A32C
+.extern FUN_0204A6E0
.extern FUN_0204AB20
+.extern FUN_0204AB58
.extern FUN_0204ABA8
.extern FUN_0204ABDC
.extern FUN_0204AD0C
+.extern FUN_0204ADBC
+.extern FUN_0204ADE0
+.extern FUN_0204AF3C
+.extern FUN_0204AF84
+.extern FUN_0204B2A4
.extern FUN_0204B2B4
.extern FUN_0204B2C0
.extern FUN_0204B2D8
+.extern FUN_0204B33C
.extern FUN_0204B4FC
.extern FUN_0204B57C
.extern FUN_0204B5A8
@@ -2994,12 +1995,17 @@
.extern FUN_0204B9CC
.extern FUN_0204B9EC
.extern FUN_0204BA1C
+.extern FUN_0204BAB0
.extern FUN_0204BAC4
.extern FUN_0204BAD4
.extern FUN_0204BAE4
.extern FUN_0204BEC8
.extern FUN_0204BED0
.extern FUN_0204BED8
+.extern FUN_0204C104
+.extern FUN_0204C1A8
+.extern FUN_0204D6C0
+.extern FUN_0204E2FC
.extern FUN_0204F6DC
.extern FUN_0204FF5C
.extern FUN_02050024
@@ -3013,11 +2019,16 @@
.extern FUN_02052714
.extern FUN_02052718
.extern FUN_020527A8
+.extern FUN_020527D8
.extern FUN_0205296C
.extern FUN_02052A10
+.extern FUN_02052B74
.extern FUN_02052C0C
+.extern FUN_02052CD8
.extern FUN_02052D08
+.extern FUN_02052DE8
.extern FUN_02052E10
+.extern FUN_02052F74
.extern FUN_020534DC
.extern FUN_0205363C
.extern FUN_02053678
@@ -3026,6 +2037,7 @@
.extern FUN_02054608
.extern FUN_02054658
.extern FUN_020546C8
+.extern FUN_020547A4
.extern FUN_02054C14
.extern FUN_02054CB0
.extern FUN_02054CC8
@@ -3034,27 +2046,45 @@
.extern FUN_02054E30
.extern FUN_02054F50
.extern FUN_0205502C
+.extern FUN_020552F8
.extern FUN_02055304
+.extern FUN_02055320
+.extern FUN_0205532C
+.extern FUN_020553A0
+.extern FUN_020553C4
.extern FUN_020553D4
.extern FUN_020553E8
+.extern FUN_02055468
.extern FUN_02055474
.extern FUN_02055488
.extern FUN_02055560
.extern FUN_02055720
+.extern FUN_020557F4
+.extern FUN_02055A38
+.extern FUN_02055B14
+.extern FUN_02055B30
+.extern FUN_02055B8C
.extern FUN_0205753C
.extern FUN_020575D4
.extern FUN_02057654
.extern FUN_02057688
+.extern FUN_02057800
+.extern FUN_0205785C
+.extern FUN_02057BAC
.extern FUN_02058060
.extern FUN_020580B4
.extern FUN_02058448
+.extern FUN_02058458
.extern FUN_02058480
.extern FUN_02058488
.extern FUN_02058510
.extern FUN_02058738
+.extern FUN_02058780
+.extern FUN_020587B0
.extern FUN_02058854
.extern FUN_0205889C
.extern FUN_020588B8
+.extern FUN_020588D4
.extern FUN_02058908
.extern FUN_02058914
.extern FUN_02058994
@@ -3062,6 +2092,8 @@
.extern FUN_02058B4C
.extern FUN_02058B7C
.extern FUN_02058BB4
+.extern FUN_02058BE4
+.extern FUN_02058D74
.extern FUN_02058E28
.extern FUN_02058E90
.extern FUN_02058EB0
@@ -3074,8 +2106,14 @@
.extern FUN_0205CA4C
.extern FUN_0205CA64
.extern FUN_0205CA78
+.extern FUN_0205CE48
+.extern FUN_0205CE80
+.extern FUN_0205DD18
+.extern FUN_0205DD38
+.extern FUN_0205DD40
.extern FUN_0205E7C4
.extern FUN_0205ECD4
+.extern FUN_0205ECE0
.extern FUN_0205ECFC
.extern FUN_0205ED0C
.extern FUN_0205ED1C
@@ -3088,8 +2126,10 @@
.extern FUN_0205F1D4
.extern FUN_0205F1F4
.extern FUN_0205F204
+.extern FUN_0205F214
.extern FUN_0205F224
.extern FUN_0205F234
+.extern FUN_0205F244
.extern FUN_0205F264
.extern FUN_0205F274
.extern FUN_0205F284
@@ -3098,8 +2138,10 @@
.extern FUN_0205F2B4
.extern FUN_0205F2C4
.extern FUN_0205F2D4
+.extern FUN_0205F2E4
.extern FUN_0205F368
.extern FUN_0205F378
+.extern FUN_0205F388
.extern FUN_0205F398
.extern FUN_0205F3C0
.extern FUN_0205F3F8
@@ -3107,6 +2149,7 @@
.extern FUN_0205F4A0
.extern FUN_0205F4E4
.extern FUN_0205F50C
+.extern FUN_0205F524
.extern FUN_0205F54C
.extern FUN_0205F55C
.extern FUN_0205F594
@@ -3118,14 +2161,18 @@
.extern FUN_0205F688
.extern FUN_0205F698
.extern FUN_0205F6A8
+.extern FUN_0205F6C8
+.extern FUN_0205F6D8
.extern FUN_0205F710
.extern FUN_0205F720
.extern FUN_0205F740
.extern FUN_0205F760
+.extern FUN_0205F7A0
.extern FUN_0205FD38
.extern FUN_0205FDDC
.extern FUN_0205FE10
.extern FUN_0205FF5C
+.extern FUN_02060144
.extern FUN_0206015C
.extern FUN_02060490
.extern FUN_02060790
@@ -3137,10 +2184,16 @@
.extern FUN_020612EC
.extern FUN_020612F8
.extern FUN_02061374
+.extern FUN_020613CC
.extern FUN_02061460
.extern FUN_02061574
+.extern FUN_02061A8C
.extern FUN_02063650
.extern FUN_0206367C
+.extern FUN_02063888
+.extern FUN_020638BC
+.extern FUN_02063948
+.extern FUN_02063964
.extern FUN_0206486C
.extern FUN_020649B0
.extern FUN_020649D4
@@ -3151,32 +2204,92 @@
.extern FUN_02064D88
.extern FUN_02064E20
.extern FUN_02064E60
+.extern FUN_02064E90
+.extern FUN_02065054
+.extern FUN_02065070
.extern FUN_02065078
+.extern FUN_02065314
.extern FUN_02065344
.extern FUN_02066818
+.extern FUN_02066978
+.extern FUN_020669A0
.extern FUN_020669C0
+.extern FUN_020669D4
+.extern FUN_02066A20
+.extern FUN_02066ACC
.extern FUN_02066ED8
+.extern FUN_020671BC
+.extern FUN_020672BC
+.extern FUN_02067830
+.extern FUN_02068678
.extern FUN_02068854
+.extern FUN_020689E0
.extern FUN_02068AAC
+.extern FUN_02068B68
+.extern FUN_02068C00
+.extern FUN_02068E14
+.extern FUN_020690C4
+.extern FUN_020690CC
+.extern FUN_020690E4
+.extern FUN_02069168
.extern FUN_020699A4
+.extern FUN_02069A64
+.extern FUN_02069B40
+.extern FUN_02069B88
.extern FUN_0206A23C
+.extern FUN_0206AC74
.extern FUN_0206AD4C
.extern FUN_0206B20C
.extern FUN_0206B3E4
+.extern FUN_0206B484
.extern FUN_0206B57C
.extern FUN_0206B5E4
.extern FUN_0206B620
.extern FUN_0206B644
+.extern FUN_0206B6C8
+.extern FUN_0206B7BC
.extern FUN_0206B900
+.extern FUN_0206B9AC
+.extern FUN_0206B9B0
.extern FUN_0206BAE4
+.extern FUN_0206BB1C
+.extern FUN_0206BB28
+.extern FUN_0206C700
+.extern FUN_0206C91C
+.extern FUN_0206C92C
+.extern FUN_0206E2F0
+.extern FUN_0206E308
+.extern FUN_0206E314
+.extern FUN_0206E340
+.extern FUN_0206E354
+.extern FUN_0206E358
+.extern FUN_0206E360
+.extern FUN_0206E37C
+.extern FUN_0206E384
+.extern FUN_0206E38C
+.extern FUN_0206E7B8
.extern FUN_0206EA30
+.extern FUN_0206EA98
+.extern FUN_0206EAB8
+.extern FUN_0206EB1C
.extern FUN_0206ED24
.extern FUN_0206ED38
.extern FUN_0206EDD4
+.extern FUN_0206EE50
.extern FUN_0206EE64
.extern FUN_0206EEF8
+.extern FUN_0206EFEC
+.extern FUN_0206F158
+.extern FUN_0206F164
+.extern FUN_0206F17C
+.extern FUN_0206F190
.extern FUN_0206F3B8
.extern FUN_0206F3D8
+.extern FUN_02077A84
+.extern FUN_02077AC4
+.extern FUN_02079C70
+.extern FUN_0207B000
+.extern FUN_0207C2A4
.extern FUN_0207FC5C
.extern FUN_0207FCE0
.extern FUN_0208089C
@@ -3213,33 +2326,1192 @@
.extern FUN_020825A0
.extern FUN_02082630
.extern FUN_02085140
+.extern FUN_020851B8
+.extern FUN_020851DC
+.extern FUN_020851F8
+.extern FUN_0208524C
+.extern FUN_02085258
+.extern FUN_02085264
+.extern FUN_0208526C
+.extern FUN_02085290
.extern FUN_020852E8
+.extern FUN_02085338
+.extern FUN_020853A8
+.extern FUN_020853B0
+.extern FUN_020853B4
+.extern FUN_020853BC
+.extern FUN_020853E4
+.extern FUN_020853E8
+.extern FUN_020853EC
+.extern FUN_020853F0
+.extern FUN_020853FC
+.extern FUN_020854E0
+.extern FUN_02085538
+.extern FUN_02085578
+.extern FUN_020855B0
+.extern FUN_020855E4
+.extern FUN_0208560C
+.extern FUN_0208562C
.extern FUN_02085F48
+.extern FUN_020863DC
+.extern FUN_02087A1C
+.extern FUN_02087A50
+.extern FUN_02087D00
+.extern FUN_02087E14
.extern FUN_0208881C
.extern FUN_02088960
+.extern FUN_02088D40
.extern FUN_02088DD8
.extern FUN_02088DF0
.extern FUN_02088DF8
.extern FUN_02088EF8
+.extern FUN_02089D90
+.extern FUN_0208A0B8
+.extern FUN_0208A300
+.extern FUN_0208A320
.extern FUN_0208A338
-.extern FUN_02038C78
-.extern FUN_02038CA8
-.extern FUN_02039504
-.extern FUN_02039564
-.extern FUN_0203959C
-.extern FUN_020395BC
-.extern FUN_02039874
-.extern FUN_0203989C
-.extern FUN_020462B8
-.extern FUN_020462E4
-.extern FUN_0204630C
-.extern FUN_02046338
-.extern FUN_02046380
-.extern FUN_0206AC74
+.extern FUN_0208A9B8
+.extern FUN_0208ACEC
+.extern FUN_0208AD80
+.extern FUN_0208AF80
+.extern FUN_0208AF94
+.extern FUN_0208AFA8
+.extern FUN_0208B05C
+.extern FUN_0208B128
+.extern FUN_0208B4A0
+.extern FUN_02090CC8
+.extern FUN_02090DB8
+.extern FUN_02096B14
+.extern FUN_02096B78
+.extern FUN_02096CCC
+.extern FUN_02096D2C
+.extern FUN_02096DA0
+.extern FUN_02096F18
+.extern FUN_02096F80
+.extern FUN_02096FB0
+.extern FUN_0209700C
+.extern FUN_020973B4
+.extern FUN_020ADA84
+.extern FUN_020ADA98
+.extern FUN_020ADAB0
+.extern FUN_020ADB18
+.extern FUN_020ADBE8
+.extern FUN_020ADC74
+.extern FUN_020ADDC0
+.extern FUN_020ADDC8
+.extern FUN_020ADDF0
+.extern FUN_020ADE2C
+.extern FUN_020AE554
+.extern FUN_020AE5B0
+.extern FUN_020AE600
+.extern FUN_020AE638
+.extern FUN_020AE684
+.extern FUN_020AE82C
+.extern FUN_020AE84C
+.extern FUN_020AE868
+.extern FUN_020AE8CC
+.extern FUN_020AE918
+.extern FUN_020AEB70
+.extern FUN_020AEC7C
+.extern FUN_020AEC98
+.extern FUN_020AEE40
+.extern FUN_020AEEB8
+.extern FUN_020AEF1C
+.extern FUN_020AF2E0
+.extern FUN_020AF2F4
+.extern FUN_020AF30C
+.extern FUN_020AF894
+.extern FUN_020AF9C4
+.extern FUN_020AFA28
+.extern FUN_020AFA80
+.extern FUN_020AFBA8
+.extern FUN_020AFBFC
+.extern FUN_020AFC04
+.extern FUN_020AFEB8
+.extern FUN_020AFFD8
+.extern FUN_020B0030
+.extern FUN_020B0088
+.extern FUN_020B00F0
+.extern FUN_020B0138
+.extern FUN_020B0180
+.extern FUN_020B0250
+.extern FUN_020B02C8
+.extern FUN_020B0448
+.extern FUN_020B0870
+.extern FUN_020B0BB0
+.extern FUN_020B0C7C
+.extern FUN_020B0E34
+.extern FUN_020B0FC0
+.extern FUN_020B10E8
+.extern FUN_020B1240
+.extern FUN_020B1340
+.extern FUN_020B1528
+.extern FUN_020B1768
+.extern FUN_020B19C4
+.extern FUN_020B19DC
+.extern FUN_020B1A14
+.extern FUN_020B1A24
+.extern FUN_020B1EA4
+.extern FUN_020B1EC4
+.extern FUN_020B1EE4
+.extern FUN_020B1EFC
+.extern FUN_020B1F80
+.extern FUN_020B20C8
+.extern FUN_020B2194
+.extern FUN_020B224C
+.extern FUN_020B23D8
+.extern FUN_020B242C
+.extern FUN_020B2794
+.extern FUN_020B28B4
+.extern FUN_020B2A08
+.extern FUN_020B2B08
+.extern FUN_020B2B58
+.extern FUN_020B2D9C
+.extern FUN_020B317C
+.extern FUN_020B31F0
+.extern FUN_020B326C
+.extern FUN_020B3334
+.extern FUN_020B3390
+.extern FUN_020B33A0
+.extern FUN_020B4358
+.extern FUN_020B43A4
+.extern FUN_020B442C
+.extern FUN_020B4568
+.extern FUN_020B4F38
+.extern FUN_020B502C
+.extern FUN_020B772C
+.extern FUN_020B7790
+.extern FUN_020B7C58
+.extern FUN_020B7C78
+.extern FUN_020B7CDC
+.extern FUN_020B7CE4
+.extern FUN_020B7CF0
+.extern FUN_020B7D28
+.extern FUN_020B7DFC
+.extern FUN_020B7E10
+.extern FUN_020B7E1C
+.extern FUN_020B80B4
+.extern FUN_020B844C
+.extern FUN_020B8474
+.extern FUN_020B849C
+.extern FUN_020BAC98
+.extern FUN_020BAFB8
+.extern FUN_020BB1C0
+.extern FUN_020BB394
+.extern FUN_020BB59C
+.extern FUN_020BB7F4
+.extern FUN_020BC0FC
+.extern FUN_020BC13C
+.extern FUN_020BC2A0
+.extern FUN_020C0174
+.extern FUN_020C01A0
+.extern FUN_020C01D0
+.extern FUN_020C03B8
+.extern FUN_020C041C
+.extern FUN_020C044C
+.extern FUN_020C04DC
+.extern FUN_020C0510
+.extern FUN_020C054C
+.extern FUN_020C0670
+.extern FUN_020C0688
+.extern FUN_020C0DD4
+.extern FUN_020C0E14
+.extern FUN_020C0E7C
+.extern FUN_020C0EA4
+.extern FUN_020C0EF4
+.extern FUN_020C0F30
+.extern FUN_020C0F50
+.extern FUN_020C0F68
+.extern FUN_020C0F80
+.extern FUN_020C0F8C
+.extern FUN_020C0F9C
+.extern FUN_020C0FDC
+.extern FUN_020C1040
+.extern FUN_020C10A4
+.extern FUN_020C1148
+.extern FUN_020C1180
+.extern FUN_020C1E58
+.extern FUN_020C1E68
+.extern FUN_020C1EA4
+.extern FUN_020C1F54
+.extern FUN_020C1FA4
+.extern FUN_020C1FF0
+.extern FUN_020C20DC
+.extern FUN_020C2104
+.extern FUN_020C217C
+.extern FUN_020C226C
+.extern FUN_020C22D0
+.extern FUN_020C23FC
+.extern FUN_020C26F8
+.extern FUN_020C2828
+.extern FUN_020C290C
+.extern FUN_020C2A94
+.extern FUN_020C35E0
+.extern FUN_020C360C
+.extern FUN_020C3640
+.extern FUN_020C3674
+.extern FUN_020C36A8
+.extern FUN_020C3910
+.extern FUN_020C3980
+.extern FUN_020C39CC
+.extern FUN_020C3EA4
+.extern FUN_020C3EB0
+.extern FUN_020C6034
+.extern FUN_020C605C
+.extern FUN_021D74E0
+.extern FUN_021D76AC
+.extern FUN_021D77C4
+.extern FUN_021D7800
+.extern FUN_021D78FC
+.extern FUN_021D79B4
+.extern FUN_021D7CA4
+.extern FUN_021D7F8C
+.extern FUN_021D8018
+.extern FUN_021D8164
+.extern FUN_021D82BC
+.extern FUN_021D8320
+.extern FUN_021D836C
+.extern FUN_021D83A8
+.extern FUN_021D83C0
+.extern FUN_021D844C
+.extern FUN_021D8494
+.extern FUN_021D85FC
+.extern FUN_021D8624
+.extern FUN_021D865C
+.extern FUN_021D8758
+.extern FUN_021D8820
+.extern FUN_021D88E4
+.extern FUN_021D89CC
+.extern FUN_021D8B64
+.extern FUN_021D8C24
+.extern FUN_021D917C
+.extern FUN_021D959C
+.extern FUN_021D967C
+.extern FUN_021D96F4
+.extern FUN_021D9708
+.extern FUN_021D971C
+.extern FUN_021D9820
+.extern FUN_021D99F8
+.extern FUN_021DA464
+.extern FUN_021DA4EC
+.extern FUN_021DA54C
+.extern FUN_021DA58C
+.extern FUN_021DA5B8
+.extern FUN_021DA5C8
+.extern FUN_021DA5D0
+.extern FUN_021DA5D8
+.extern FUN_021DA7B4
+.extern FUN_021DAAA4
+.extern FUN_021DAC70
+.extern FUN_021DAE40
+.extern FUN_021DAED4
+.extern FUN_021DAF28
+.extern FUN_021DAF78
+.extern FUN_021DAF98
+.extern FUN_021DB030
+.extern FUN_021DB7E8
+.extern FUN_021DB858
+.extern FUN_021DC174
+.extern FUN_021DD6F0
+.extern FUN_021DD718
+.extern FUN_021DDB08
+.extern FUN_021E1374
+.extern FUN_021E1858
+.extern FUN_021E1994
+.extern FUN_021E1BF8
+.extern FUN_021E1C4C
+.extern FUN_021E1C54
+.extern FUN_021E1ECC
+.extern FUN_021E1F34
+.extern FUN_021E1F58
+.extern FUN_021E1F60
+.extern FUN_021E2464
+.extern FUN_021E2608
+.extern FUN_021E26CC
+.extern FUN_021E27E8
+.extern FUN_021E288C
+.extern FUN_021E28A0
+.extern FUN_021E2950
+.extern FUN_021E29B4
+.extern FUN_021E29C8
+.extern FUN_021E2A70
+.extern FUN_021E2AD4
+.extern FUN_021E2B80
+.extern FUN_021E2B9C
+.extern FUN_021E2BB8
+.extern FUN_021E2BD0
+.extern FUN_021E2C24
+.extern FUN_021E2C58
+.extern FUN_021E2CBC
+.extern FUN_021E32F0
+.extern FUN_021E331C
+.extern FUN_021E3424
+.extern FUN_021E3444
+.extern FUN_021E495C
+.extern FUN_021E4C54
+.extern FUN_021E4C60
+.extern FUN_021E4DE4
+.extern FUN_021E5614
+.extern FUN_021E57D4
+.extern FUN_021E5970
+.extern FUN_021E5B30
+.extern FUN_021E5FD8
+.extern FUN_021E5FE0
+.extern FUN_021E6410
+.extern FUN_021E643C
+.extern FUN_021E6990
+.extern FUN_021E69BC
+.extern FUN_021E6BF4
+.extern FUN_021E7030
+.extern FUN_021E70F0
+.extern FUN_021E7138
+.extern FUN_021E7184
+.extern FUN_021E71E8
+.extern FUN_021E7750
+.extern FUN_021E799C
+.extern FUN_021E7AC0
+.extern FUN_021E7EA0
+.extern FUN_021E7EB0
+.extern FUN_021E7EC4
+.extern FUN_021E7EC8
+.extern FUN_021E7ED0
+.extern FUN_021E7ED8
+.extern FUN_021E7FBC
+.extern FUN_021E8128
+.extern FUN_021E8130
+.extern FUN_021E8140
+.extern FUN_021E8144
+.extern FUN_021E8148
+.extern FUN_021E8158
+.extern FUN_021E81BC
+.extern FUN_021E84F4
+.extern FUN_021E856C
+.extern FUN_021E8588
+.extern FUN_021E85E4
+.extern FUN_021E85FC
+.extern FUN_021EAE90
+.extern FUN_021EB044
+.extern FUN_021EC57C
+.extern FUN_021EC71C
+.extern FUN_021EC854
+.extern FUN_021EC864
+.extern FUN_021ECD64
+.extern FUN_021ECF14
+.extern FUN_021ED0CC
+.extern FUN_021ED49C
+.extern FUN_021ED4E0
+.extern FUN_021ED52C
+.extern FUN_021ED5C4
+.extern FUN_021ED5EC
+.extern FUN_021ED644
+.extern FUN_021ED940
+.extern FUN_021EDA48
+.extern FUN_021EDBC8
+.extern FUN_021EF5E0
+.extern FUN_021EF604
+.extern FUN_021EF620
+.extern FUN_021EF654
+.extern FUN_021EF824
+.extern FUN_021EF844
+.extern FUN_021EF8C8
+.extern FUN_021EF8DC
+.extern FUN_021EFA9C
+.extern FUN_021F02C4
+.extern FUN_021F1D8C
+.extern FUN_021F1DC8
+.extern FUN_021F1DFC
+.extern FUN_021F1EC0
+.extern FUN_021F1F78
+.extern FUN_021F2094
+.extern FUN_021F20D8
+.extern FUN_021F20F8
+.extern FUN_021F2AF4
+.extern FUN_021F2E0C
+.extern FUN_021F2E28
+.extern FUN_021F2F48
+.extern FUN_021F2F6C
+.extern FUN_021F3A18
+.extern FUN_021F3AB4
+.extern FUN_021F3B4C
+.extern FUN_021F3B7C
+.extern FUN_021F3DA4
+.extern FUN_021F44D8
+.extern FUN_021F4520
+.extern FUN_021F4568
+.extern FUN_021F4594
+.extern FUN_021F45E8
+.extern FUN_021F4608
+.extern FUN_021F4BD0
+.extern FUN_021F4C88
+.extern FUN_021F4D80
+.extern FUN_021F4DC8
+.extern FUN_021F4E7C
+.extern FUN_021F57EC
+.extern FUN_021F5C44
+.extern FUN_021F61DC
+.extern FUN_021F61E8
+.extern FUN_02211E60
+.extern FUN_0222D5C0
+.extern FUN_0222DAEC
+.extern FUN_0222DD1C
+.extern FUN_0222DD38
+.extern FUN_0222E2BC
+.extern FUN_0222E360
+.extern FUN_0222E3A0
+.extern FUN_0222E7E8
+.extern FUN_0222E874
+.extern FUN_0222ED34
+.extern FUN_0222EDBC
+.extern FUN_0222F440
+.extern FUN_0222F480
+.extern FUN_0222F7E0
+.extern FUN_0222F990
+.extern FUN_022300D4
+.extern FUN_022300DC
+.extern FUN_022300E4
+.extern FUN_022300E8
+.extern FUN_022300F4
+.extern FUN_02230100
+.extern FUN_0223010C
+.extern FUN_02230118
+.extern FUN_02230124
+.extern FUN_02230F3C
+.extern FUN_02230F70
+.extern FUN_02230F80
+.extern FUN_02231344
+.extern FUN_02231350
+.extern FUN_0223135C
+.extern FUN_02231368
+.extern FUN_02231374
+.extern FUN_02239944
+.extern FUN_02239AAC
+.extern FUN_0223CACC
+.extern FUN_0223CB08
+.extern FUN_0223CCDC
+.extern FUN_0223CD7C
+.extern FUN_0223D3D0
+.extern FUN_0223D638
+.extern FUN_0223D648
+.extern FUN_0223DFB4
+.extern FUN_0223E060
+.extern FUN_0223E118
+.extern FUN_0223E154
+.extern FUN_0223E1A4
+.extern FUN_0223E1E0
+.extern FUN_0223E2AC
+.extern FUN_0223E4A8
+.extern FUN_0223E4D4
+.extern FUN_0223E554
+.extern FUN_0223E6B8
+.extern FUN_0223E734
+.extern FUN_0223E7FC
+.extern FUN_0223EB8C
+.extern FUN_0223EF7C
+.extern FUN_0223F4D8
+.extern FUN_0223F4F4
+.extern FUN_0223F8D8
+.extern FUN_0223FCE8
+.extern FUN_02240790
+.extern FUN_022407CC
+.extern FUN_022407DC
+.extern FUN_022407F8
+.extern FUN_02240834
+.extern FUN_02240844
+.extern FUN_0224089C
+.extern FUN_022408FC
+.extern FUN_022411F4
+.extern FUN_02241230
+.extern FUN_02241914
+.extern FUN_02242A38
+.extern FUN_02242BE0
+.extern FUN_0224312C
+.extern FUN_022432E4
+.extern FUN_0224339C
+.extern FUN_022433A8
+.extern FUN_022433B0
+.extern FUN_022433B8
+.extern FUN_022433F8
+.extern FUN_02243408
+.extern FUN_02243428
+.extern FUN_02243448
+.extern FUN_0224345C
+.extern FUN_022434AC
+.extern FUN_022434BC
+.extern FUN_022434D0
+.extern FUN_02243694
+.extern FUN_022436C8
+.extern FUN_022436E8
+.extern FUN_02243780
+.extern FUN_02243838
+.extern FUN_022438DC
+.extern FUN_022438E0
+.extern FUN_022438FC
+.extern FUN_02243920
+.extern FUN_022439F8
+.extern FUN_02243AD8
+.extern FUN_02243BA8
+.extern FUN_02243C5C
+.extern FUN_02243D3C
+.extern FUN_02243DA0
+.extern FUN_02243DB8
+.extern FUN_02243DC0
+.extern FUN_02243DC4
+.extern FUN_02243DD8
+.extern FUN_02243DE0
+.extern FUN_02243E34
+.extern FUN_02243E74
+.extern FUN_02243F18
+.extern FUN_02243F50
+.extern FUN_02243F9C
+.extern FUN_02244210
+.extern FUN_02244558
+.extern FUN_02244660
+.extern FUN_022446BC
+.extern FUN_022446E0
+.extern FUN_022446FC
+.extern FUN_02244758
+.extern FUN_02244770
+.extern FUN_02244824
+.extern FUN_0224484C
+.extern FUN_02244D1C
+.extern FUN_02244D20
+.extern FUN_02244D3C
+.extern FUN_02244D40
+.extern FUN_02244D58
+.extern FUN_02244D98
+.extern FUN_02244DA0
+.extern FUN_02244DB0
+.extern FUN_02244DBC
+.extern FUN_02244DC4
+.extern FUN_02244EF8
+.extern FUN_02244F18
+.extern FUN_02244F24
+.extern FUN_02244F2C
+.extern FUN_02245088
+.extern FUN_02245114
+.extern FUN_02245190
+.extern FUN_02245198
+.extern FUN_022451F0
+.extern FUN_0224525C
+.extern FUN_022452A4
+.extern FUN_02245324
+.extern FUN_02245340
+.extern FUN_02245358
+.extern FUN_0224566C
+.extern FUN_022456E8
+.extern FUN_02245844
+.extern FUN_02245910
+.extern FUN_02245F1C
+.extern FUN_02245F4C
+.extern FUN_02245FA0
+.extern FUN_022461A4
+.extern FUN_022461B8
+.extern FUN_0224666C
+.extern FUN_022466A0
+.extern FUN_022466AC
+.extern FUN_02246F1C
+.extern FUN_02247294
+.extern FUN_022472AC
+.extern FUN_02247544
+.extern FUN_02247614
+.extern FUN_02247728
+.extern FUN_02247808
+.extern FUN_02247970
+.extern FUN_02247A34
+.extern FUN_022483BC
+.extern FUN_022483E0
+.extern FUN_022483EC
+.extern FUN_02248724
+.extern FUN_0224884C
+.extern FUN_022488CC
+.extern FUN_022488EC
+.extern FUN_022488F4
+.extern FUN_022488FC
+.extern FUN_0224891C
+.extern FUN_02248B54
+.extern FUN_02248B58
+.extern FUN_02248B5C
+.extern FUN_02248B60
+.extern FUN_02248B6C
+.extern FUN_02248CC0
+.extern FUN_02248CD0
+.extern FUN_02248DF8
+.extern FUN_02248F70
+.extern FUN_02248FE0
+.extern FUN_02249038
+.extern FUN_022490A0
+.extern FUN_022491FC
+.extern FUN_022494C8
+.extern FUN_02249508
+.extern FUN_02249668
+.extern FUN_022497E8
+.extern FUN_02249E6C
+.extern FUN_02249E78
+.extern FUN_02249E84
+.extern FUN_02249E90
+.extern FUN_0224A310
+.extern FUN_0224A528
+.extern FUN_0224A7C8
+.extern FUN_0224ABAC
+.extern FUN_0224B124
+.extern FUN_0224B2C4
+.extern FUN_0224B568
+.extern FUN_0224B818
+.extern FUN_0224B86C
+.extern FUN_0224B9E0
+.extern FUN_0224BBEC
+.extern FUN_0224BD90
+.extern FUN_0224C038
+.extern FUN_0224C27C
+.extern FUN_0224C520
+.extern FUN_0224C678
+.extern FUN_0224C6E8
+.extern FUN_0224C6F4
+.extern FUN_0224C700
+.extern FUN_0224C8C8
+.extern FUN_0224CA2C
+.extern FUN_0224CA54
+.extern FUN_0224CA58
+.extern FUN_0224CA88
+.extern FUN_0224CA94
+.extern FUN_0224CAA0
+.extern FUN_0224CAB4
+.extern FUN_0224CB30
+.extern FUN_0224CBB0
+.extern FUN_0224CC24
+.extern FUN_0224CECC
+.extern FUN_0224D14C
+.extern FUN_0224D2E0
+.extern FUN_0224D3E8
+.extern FUN_0224D70C
+.extern FUN_0224D76C
+.extern FUN_0224D79C
+.extern FUN_0224DCB8
+.extern FUN_0224DD94
+.extern FUN_0224DDB8
+.extern FUN_0224E554
+.extern FUN_0224E764
+.extern FUN_0224E7C4
+.extern FUN_0224F12C
+.extern FUN_02252534
+.extern FUN_02252538
+.extern FUN_022567E0
+.extern FX_Div
+.extern FX_GetDivResult
+.extern FX_GetDivResultFx64c
+.extern FX_Init
+.extern FX_InvAsync
+.extern FX_Modf
+.extern FX_Sqrt
+.extern G2S_GetBG0CharPtr
+.extern G2S_GetBG1CharPtr
+.extern G2S_GetBG2CharPtr
+.extern G2S_GetBG3CharPtr
+.extern G2_GetBG0CharPtr
+.extern G2_GetBG1CharPtr
+.extern G2_GetBG2CharPtr
+.extern G2_GetBG3CharPtr
+.extern G2x_SetBGyAffine_
+.extern G2x_SetBlendAlpha_
+.extern G2x_SetBlendBrightness_
+.extern G3X_GetBoxTestResult
+.extern G3X_GetClipMtx
+.extern G3X_GetVectorMtx
+.extern G3X_Init
+.extern G3X_InitMtxStack
+.extern G3X_ResetMtxStack
+.extern G3X_SetClearColor
+.extern G3X_SetFog
+.extern G3_LoadMtx43
+.extern G3_MultMtx33
+.extern G3_MultMtx43
+.extern G3_RotX
+.extern G3_RotY
+.extern G3_RotZ
+.extern G3i_LookAt_
+.extern G3i_OrthoW_
+.extern G3i_PerspectiveW_
+.extern GXS_BeginLoadBGExtPltt
+.extern GXS_BeginLoadOBJExtPltt
+.extern GXS_EndLoadBGExtPltt
+.extern GXS_EndLoadOBJExtPltt
+.extern GXS_LoadBG0Char
+.extern GXS_LoadBG0Scr
+.extern GXS_LoadBG1Char
+.extern GXS_LoadBG1Scr
+.extern GXS_LoadBG2Char
+.extern GXS_LoadBG2Scr
+.extern GXS_LoadBG3Char
+.extern GXS_LoadBG3Scr
+.extern GXS_LoadBGExtPltt
+.extern GXS_LoadBGPltt
+.extern GXS_LoadOAM
+.extern GXS_LoadOBJ
+.extern GXS_LoadOBJExtPltt
+.extern GXS_LoadOBJPltt
+.extern GXS_SetGraphicsMode
+.extern GX_BeginLoadBGExtPltt
+.extern GX_BeginLoadClearImage
+.extern GX_BeginLoadOBJExtPltt
+.extern GX_BeginLoadTex
+.extern GX_BeginLoadTexPltt
+.extern GX_DisableBankForLCDC
+.extern GX_DispOff
+.extern GX_DispOn
+.extern GX_EndLoadBGExtPltt
+.extern GX_EndLoadClearImage
+.extern GX_EndLoadOBJExtPltt
+.extern GX_EndLoadTex
+.extern GX_EndLoadTexPltt
+.extern GX_GetBankForOBJ
+.extern GX_GetBankForOBJExtPltt
+.extern GX_GetBankForSubOBJ
+.extern GX_GetBankForSubOBJExtPltt
+.extern GX_HBlankIntr
+.extern GX_Init
+.extern GX_LoadBG0Char
+.extern GX_LoadBG0Scr
+.extern GX_LoadBG1Char
+.extern GX_LoadBG1Scr
+.extern GX_LoadBG2Char
+.extern GX_LoadBG2Scr
+.extern GX_LoadBG3Char
+.extern GX_LoadBG3Scr
+.extern GX_LoadBGExtPltt
+.extern GX_LoadBGPltt
+.extern GX_LoadClearImageColor
+.extern GX_LoadClearImageDepth
+.extern GX_LoadOAM
+.extern GX_LoadOBJ
+.extern GX_LoadOBJExtPltt
+.extern GX_LoadOBJPltt
+.extern GX_LoadTex
+.extern GX_LoadTexPltt
+.extern GX_ResetBankForBG
+.extern GX_ResetBankForBGExtPltt
+.extern GX_ResetBankForOBJ
+.extern GX_ResetBankForOBJExtPltt
+.extern GX_ResetBankForSubBG
+.extern GX_ResetBankForSubOBJ
+.extern GX_ResetBankForTex
+.extern GX_ResetBankForTexPltt
+.extern GX_SetBankForBG
+.extern GX_SetBankForBGExtPltt
+.extern GX_SetBankForLCDC
+.extern GX_SetBankForOBJ
+.extern GX_SetBankForOBJExtPltt
+.extern GX_SetBankForSubBG
+.extern GX_SetBankForSubBGExtPltt
+.extern GX_SetBankForSubOBJ
+.extern GX_SetBankForSubOBJExtPltt
+.extern GX_SetBankForTex
+.extern GX_SetBankForTexPltt
+.extern GX_SetGraphicsMode
+.extern GX_VBlankIntr
+.extern GXx_SetMasterBrightness_
+.extern IC_InvalidateAll
+.extern IC_InvalidateRange
+.extern InitGraphicMemory
+.extern InitScriptContext
+.extern InitSystemForTheGame
+.extern LoadFromNARC
+.extern LoadFromNARC_7
+.extern LoadFromNarc_2
+.extern LoadPlayerDataAddress
+.extern MATH_CalcCRC16
+.extern MATH_CalcCRC16CCITT
+.extern MATH_CalcCRC32
+.extern MATH_CalcCRC8
+.extern MATH_CalcHMACSHA1
+.extern MATH_CalcMD5
+.extern MATH_CalcSHA1
+.extern MATH_CountPopulation
+.extern MATH_MD5GetHash
+.extern MATH_MD5Init
+.extern MATH_MD5Update
+.extern MATH_SHA1GetHash
+.extern MATH_SHA1Init
+.extern MATH_SHA1Update
+.extern MATHi_CRC16InitTable
+.extern MATHi_CRC16InitTableRev
+.extern MATHi_CRC32InitTableRev
+.extern MATHi_CRC8InitTable
+.extern MATHi_CalcHMAC
+.extern MIC_DoSamplingAsync
+.extern MIC_Init
+.extern MIC_StartAutoSampling
+.extern MIC_StopAutoSampling
+.extern MI_Copy36B
+.extern MI_Copy48B
+.extern MI_Copy64B
+.extern MI_CpuCopy8
+.extern MI_CpuFill8
+.extern MI_DmaCopy16
+.extern MI_DmaCopy32
+.extern MI_DmaCopy32Async
+.extern MI_DmaFill32
+.extern MI_DmaFill32Async
+.extern MI_HBlankDmaCopy16
+.extern MI_HBlankDmaCopy32
+.extern MI_Init
+.extern MI_SendGXCommandAsync
+.extern MI_SendGXCommandAsyncFast
+.extern MI_StopDma
+.extern MI_SwapWord
+.extern MI_UncompressLZ8
+.extern MI_WaitDma
+.extern MI_Zero36B
+.extern MIi_CardDmaCopy32
+.extern MIi_CheckDma0SourceAddress
+.extern MIi_CpuClear16
+.extern MIi_CpuClear32
+.extern MIi_CpuClearFast
+.extern MIi_CpuCopy16
+.extern MIi_CpuCopy32
+.extern MIi_CpuCopyFast
+.extern MIi_CpuSend32
+.extern MIi_DmaSetParams
+.extern MIi_DmaSetParams_noInt
+.extern MIi_DmaSetParams_wait
+.extern MIi_DmaSetParams_wait_noInt
+.extern MIi_UncompressBackward
+.extern MTX_Concat33
+.extern MTX_Concat43
+.extern MTX_Identity33_
+.extern MTX_Identity43_
+.extern MTX_MultVec33
+.extern MTX_MultVec43
+.extern MTX_RotX33_
+.extern MTX_RotY33_
+.extern MTX_RotZ33_
+.extern MTX_Scale43_
+.extern NitroMain
+.extern OS_AllocFromArenaHi
+.extern OS_AllocFromArenaLo
+.extern OS_AllocFromHeap
+.extern OS_CancelAlarm
+.extern OS_CreateAlarm
+.extern OS_CreateThread
+.extern OS_DestroyThread
+.extern OS_DisableInterrupts
+.extern OS_DisableIrqMask
+.extern OS_DisableScheduler
+.extern OS_EnableIrqMask
+.extern OS_EnableScheduler
+.extern OS_ExitThread
+.extern OS_FreeToHeap
+.extern OS_GetCpsrIrq
+.extern OS_GetDTCMAddress
+.extern OS_GetInitArenaHi
+.extern OS_GetInitArenaLo
+.extern OS_GetIrqFunction
+.extern OS_GetLockID
+.extern OS_GetLowEntropyData
+.extern OS_GetMacAddress
+.extern OS_GetOwnerInfo
+.extern OS_GetOwnerRtcOffset
+.extern OS_GetProcMode
+.extern OS_GetThreadPriority
+.extern OS_GetTick
+.extern OS_GetTickLo
+.extern OS_Halt
+.extern OS_IRQTable
+.extern OS_Init
+.extern OS_InitAlarm
+.extern OS_InitMessageQueue
+.extern OS_InitMutex
+.extern OS_InitTick
+.extern OS_IrqDummy
+.extern OS_IrqHandler
+.extern OS_IsAlarmAvailable
+.extern OS_IsRunOnEmulator
+.extern OS_IsThreadTerminated
+.extern OS_IsTickAvailable
+.extern OS_JamMessage
+.extern OS_JoinThread
+.extern OS_LockCartridge
+.extern OS_LockMutex
+.extern OS_ReadMessage
+.extern OS_ReadOwnerOfLockWord
+.extern OS_ReceiveMessage
+.extern OS_ReleaseLockID
+.extern OS_RescheduleThread
+.extern OS_ResetRequestIrqMask
+.extern OS_ResetSystem
+.extern OS_RestoreInterrupts
+.extern OS_SNPrintf
+.extern OS_SendMessage
+.extern OS_SetAlarm
+.extern OS_SetArenaHi
+.extern OS_SetArenaLo
+.extern OS_SetDPermissionsForProtectionRegion
+.extern OS_SetIrqFunction
+.extern OS_SetIrqMask
+.extern OS_SetThreadPriority
+.extern OS_Sleep
+.extern OS_SleepThread
+.extern OS_SpinWait
+.extern OS_Terminate
+.extern OS_TryLockCard
+.extern OS_TryLockCartridge
+.extern OS_TryLockMutex
+.extern OS_UnlockCard
+.extern OS_UnlockCartridge
+.extern OS_UnlockCartridge2
+.extern OS_UnlockMutex
+.extern OS_WaitIrq
+.extern OS_WakeupThread
+.extern OS_WakeupThreadDirect
+.extern OS_YieldThread
+.extern OSi_DoResetSystem
+.extern OSi_EnterDmaCallback
+.extern OSi_IrqDma0
+.extern OSi_IrqDma1
+.extern OSi_IrqDma2
+.extern OSi_IrqDma3
+.extern OSi_IrqThreadQueue
+.extern OSi_IrqTimer0
+.extern OSi_IrqTimer1
+.extern OSi_IrqTimer2
+.extern OSi_IrqTimer3
+.extern OSi_IsResetOccurred
+.extern OSi_MainExArenaEnabled
+.extern OSi_ThreadInfo
+.extern OSi_TryLockVram
+.extern OSi_UnlockVram
+.extern PM_AppendPostSleepCallback
+.extern PM_DeletePostSleepCallback
+.extern PM_DeletePreSleepCallback
+.extern PM_ForceToPowerOff
+.extern PM_GetBackLight
+.extern PM_GetLCDPower
+.extern PM_GoSleepMode
+.extern PM_Init
+.extern PM_PrependPreSleepCallback
+.extern PM_SetAmp
+.extern PM_SetAmpGain
+.extern PM_SetBackLight
+.extern PM_SetLCDPower
+.extern PMi_Lock
+.extern PMi_ReadRegister
+.extern PMi_SendPxiData
+.extern PMi_SendSleepStart
+.extern PMi_SetLED
+.extern PMi_SetLEDAsync
+.extern PMi_WaitBusy
+.extern PXI_Init
+.extern PXI_IsCallbackReady
+.extern PXI_SendWordByFifo
+.extern PXI_SetFifoRecvCallback
+.extern PXIi_HandlerRecvFifoNotEmpty
+.extern ProcessBlock
+.extern RTC_ConvertDateTimeToSecond
+.extern RTC_ConvertDateToDay
+.extern RTC_ConvertSecondToDateTime
+.extern RTC_GetDate
+.extern RTC_GetDateTimeAsync
+.extern RTC_GetTime
+.extern RTC_Init
+.extern RunScriptCommand
.extern SDK_AUTOLOAD_DTCM_START
.extern SDK_AUTOLOAD_LIST
.extern SDK_AUTOLOAD_LIST_END
.extern SDK_AUTOLOAD_START
-.extern SDK_STATIC_BSS_START
+.extern SDK_MAIN_ARENA_LO
+.extern SDK_SECTION_ARENA_DTCM_START
+.extern SDK_SECTION_ARENA_EX_START
+.extern SDK_SECTION_ARENA_ITCM_START
.extern SDK_STATIC_BSS_END
-.extern OS_IrqHandler
+.extern SDK_STATIC_BSS_START
+.extern SND_AssignWaveArc
+.extern SND_CalcChannelVolume
+.extern SND_DestroyBank
+.extern SND_DestroyWaveArc
+.extern SND_FlushCommand
+.extern SND_GetChannelStatus
+.extern SND_GetCurrentCommandTag
+.extern SND_GetFirstInstDataPos
+.extern SND_GetNextInstData
+.extern SND_GetPlayerStatus
+.extern SND_GetPlayerTickCounter
+.extern SND_GetWaveDataAddress
+.extern SND_GetWaveDataCount
+.extern SND_Init
+.extern SND_InvalidateBankData
+.extern SND_InvalidateSeqData
+.extern SND_InvalidateWaveData
+.extern SND_IsFinishedCommandTag
+.extern SND_LockChannel
+.extern SND_PauseSeq
+.extern SND_PrepareSeq
+.extern SND_RecvCommandReply
+.extern SND_ResetMasterPan
+.extern SND_SetChannelPan
+.extern SND_SetChannelTimer
+.extern SND_SetChannelVolume
+.extern SND_SetMasterPan
+.extern SND_SetOutputSelector
+.extern SND_SetPlayerChannelPriority
+.extern SND_SetPlayerVolume
+.extern SND_SetTrackAllocatableChannel
+.extern SND_SetTrackPan
+.extern SND_SetTrackPitch
+.extern SND_SetWaveDataAddress
+.extern SND_SetupAlarm
+.extern SND_SetupCapture
+.extern SND_SetupChannelPcm
+.extern SND_StartPreparedSeq
+.extern SND_StartTimer
+.extern SND_StopSeq
+.extern SND_StopTimer
+.extern SND_UnlockChannel
+.extern SND_WaitForCommandProc
+.extern STD_CopyLString
+.extern ScriptCall
+.extern ScriptJump
+.extern ScriptReadHalfword
+.extern ScriptReadWord
+.extern ScriptReturn
+.extern SetupBytecodeScript
+.extern SetupNativeScript
+.extern StopScript
+.extern StringCopy
+.extern StringCopyN
+.extern StringFillEOS
+.extern StringLength
+.extern StringNotEqual
+.extern StringNotEqualN
+.extern TP_CheckError
+.extern TP_GetCalibratedPoint
+.extern TP_GetLatestIndexInAuto
+.extern TP_GetLatestRawPointInAuto
+.extern TP_GetUserInfo
+.extern TP_Init
+.extern TP_RequestAutoSamplingStartAsync
+.extern TP_RequestAutoSamplingStopAsync
+.extern TP_RequestSamplingAsync
+.extern TP_SetCalibrateParam
+.extern TP_WaitBusy
+.extern TP_WaitRawResult
+.extern VEC_Add
+.extern VEC_CrossProduct
+.extern VEC_DotProduct
+.extern VEC_Fx16CrossProduct
+.extern VEC_Fx16DotProduct
+.extern VEC_Fx16Normalize
+.extern VEC_Mag
+.extern VEC_Normalize
+.extern VEC_Subtract
+.extern WM_Disable
+.extern WM_Disconnect
+.extern WM_Enable
+.extern WM_End
+.extern WM_EndDCF
+.extern WM_EndMP
+.extern WM_EndParent
+.extern WM_EndScan
+.extern WM_Finish
+.extern WM_GetAllowedChannel
+.extern WM_GetDispersionBeaconPeriod
+.extern WM_GetDispersionScanPeriod
+.extern WM_GetLinkLevel
+.extern WM_Init
+.extern WM_Initialize
+.extern WM_MeasureChannel
+.extern WM_PowerOff
+.extern WM_PowerOn
+.extern WM_Reset
+.extern WM_SetBeaconIndication
+.extern WM_SetDCFData
+.extern WM_SetEntry
+.extern WM_SetGameInfo
+.extern WM_SetIndCallback
+.extern WM_SetLifeTime
+.extern WM_SetMPDataToPortEx
+.extern WM_SetParentParameter
+.extern WM_SetPortCallback
+.extern WM_SetWEPKeyEx
+.extern WM_StartConnectEx
+.extern WM_StartDCF
+.extern WM_StartMP
+.extern WM_StartParent
+.extern WM_StartScan
+.extern WM_StartScanEx
+.extern WMi_GetStatusAddress
+.extern __call_static_initializers
+.extern __destroy_global_chain
+.extern _ddiv
+.extern _fadd
+.extern _fdiv
+.extern _feq
+.extern _ffix
+.extern _ffixu
+.extern _fflt
+.extern _ffltu
+.extern _fgr
+.extern _fmul
+.extern _fp_init
+.extern _fsub
+.extern _ll_mod
+.extern _ll_mul
+.extern _ll_sdiv
+.extern _ll_shl
+.extern _ll_udiv
+.extern _s32_div_f
+.extern _u32_div_f
+.extern _u32_div_not_0_f
+.extern abs
+.extern cardi_common
+.extern gScriptCmdTable
+.extern memcmp
+.extern memcpy
+.extern memmove
+.extern strcmp
+.extern strcpy
+.extern strlen
+.extern tempName_NNS_FndAllocFromExpHeapEx
+.extern tempName_NNS_FndCreateExpHeapEx
+.extern thunk_FUN_02096e4c
+.extern thunk_FUN_02097190
+.extern thunk_FUN_020adc8c
+.extern thunk_FUN_020adc8c_2
+.extern thunk_FUN_020afda0
+.extern thunk_FUN_020afda0_2
+.extern thunk_FUN_020b5040
+.extern Unk_0210683C
+.extern Unk_02106840
+.extern Unk_02106900
+.extern Unk_02106A00
+.extern Unk_02106A04
+.extern OSi_IrqCallbackInfo
+.extern OSi_IrqCallbackInfoIndex
+.extern SDK_SYS_STACKSIZE
+.extern SDK_IRQ_STACKSIZE
+.extern OSi_IsThreadInitialized
+.extern OSi_LauncherThread
+.extern OSi_CurrentThreadPtr
+.extern OSi_IdleThread
+.extern OSi_IdleThreadStack
+.extern OSi_RescheduleCount
+.extern OSi_SystemCallbackInSwitchThread
+.extern OSi_Initialized
+.extern OSi_HeapInfo
+.extern OSi_DebuggerHandler
+.extern OSi_ExContext
+.extern OSi_UserExceptionHandler
+.extern OSi_UserExceptionHandlerArg
+.extern OSi_TimerReserved
+.extern OSi_UseTick
+.extern OSi_NeedResetTimer
+.extern OSi_TickCounter
+.extern OSi_UseAlarm
+.extern OSi_AlarmQueue
+.extern OSi_UseVAlarm
+.extern OSi_PreviousVCount
+.extern OSi_VFrameCount
+.extern OSi_VAlarmQueue
+.extern OSi_IsInitReset
+.extern OSi_vramExclusive
+.extern OSi_vramLockId
+.extern OSi_ThreadIdCount
+.extern OSi_StackForDestructor
diff --git a/pokediamond.lcf b/pokediamond.lcf
index f8c76abf..01161a05 100644
--- a/pokediamond.lcf
+++ b/pokediamond.lcf
@@ -1,10 +1,8 @@
/* TEST */
MEMORY {
header (RWX) : ORIGIN=0, LENGTH=0
- arm9 (RWX) : ORIGIN=0x2000000, LENGTH=0
- unk_10b724 (RWX) : ORIGIN=0, LENGTH=0
- arm9overlay (RWX) : ORIGIN=0, LENGTH=0
- arm7 (RWX) : ORIGIN=0x2380000, LENGTH=0
+ arm9 (RWX) : ORIGIN=0x02000000, LENGTH=0
+ arm7 (RWX) : ORIGIN=0x02380000, LENGTH=0
filenametable (RWX) : ORIGIN=0, LENGTH=0
fileallocationtable (RWX) : ORIGIN=0, LENGTH=0
icon_title (RWX) : ORIGIN=0, LENGTH=0
@@ -374,35 +372,10 @@ SECTIONS {
} > header
.arm9 : AT (0x4000) {
- secure.o (.text)
- crt0.o (.text)
- main.o (.text)
- FUN_02000DF4.o (.text)
- unk_02000E0C.o (.text)
- string_util.o (.text)
- unk_020023C0.o (.text)
- filesystem.o (.text)
- unk_02006864.o (.text)
- script.o (.text)
- unk_02038C78.o (.text)
- scrcmd.o (.text)
- unk_02046030.o (.text)
- rom1.5.o (.text)
- FUN_020C9C0C.o (.text)
- rom2.o (.text)
- /* rodata */
- rom2.o (.data)
- string_util.o (.data)
- rom2_2.o (.data)
- } > arm9
-
- .unk_10b724 : AT (0x10B724) {
- unk_10b724.o (.text)
- } > unk_10b724
-
- .arm9overlay : AT (0x10B800) {
- arm9overlay.o (.text)
- } > arm9overlay
+ _start = .;
+ _start_AutoloadDoneCallback = . + 0xA74;
+ INCLUDE arm9.bin
+ } > arm9
.FILE_10C400 : AT (0x10C400) {
FILE_10C400.o (.text) /* 0x10C400 */
@@ -667,7 +640,8 @@ SECTIONS {
} > rom3.FILE_30C600
.arm7 : AT(0x30D000) {
- arm7_rom.o(.text)
+ ARM7AutoLoad = 0x02380158;
+ INCLUDE arm7.bin
} > arm7
.filenametable : AT(0x336400) {
diff --git a/undefined_syms.txt b/undefined_syms.txt
index a6954272..075d22a9 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -1,381 +1,60 @@
+SDK_SYS_STACKSIZE = 0x00000000;
CONST_34 = 0x00000034;
CONST_3F = 0x0000003F;
-OS_IrqHandler = 0x01FF8000;
-FUN_01FF84A4 = 0x01FF84A4;
-FUN_01FF84E4 = 0x01FF84E4;
-FUN_01FF8544 = 0x01FF8544;
-FUN_01FF857C = 0x01FF857C;
-FUN_01FF85F0 = 0x01FF85F0;
-FUN_0208ACEC = 0x0208ACEC;
-FUN_0208AD80 = 0x0208AD80;
-FUN_0208AF80 = 0x0208AF80;
-FUN_0208AF94 = 0x0208AF94;
-FUN_0208AFA8 = 0x0208AFA8;
-FUN_0208B05C = 0x0208B05C;
-FUN_0208B128 = 0x0208B128;
-FUN_0208B4A0 = 0x0208B4A0;
-FUN_02090CC8 = 0x02090CC8;
-FUN_02090DB8 = 0x02090DB8;
-FUN_02096B14 = 0x02096B14;
-FUN_02096B78 = 0x02096B78;
-FUN_02096CCC = 0x02096CCC;
-FUN_02096D2C = 0x02096D2C;
-FUN_02096DA0 = 0x02096DA0;
-FUN_02096E90 = 0x02096E90;
-FUN_02096F18 = 0x02096F18;
-FUN_02096F80 = 0x02096F80;
-FUN_02096FB0 = 0x02096FB0;
-FUN_02096FF4 = 0x02096FF4;
-FUN_0209700C = 0x0209700C;
-FUN_020973B4 = 0x020973B4;
-FUN_020ADDC0 = 0x020ADDC0;
-FUN_020ADDC8 = 0x020ADDC8;
-FUN_020ADDF0 = 0x020ADDF0;
-FUN_020ADE2C = 0x020ADE2C;
-FUN_020ADFA0 = 0x020ADFA0;
-FUN_020ADFDC = 0x020ADFDC;
-FUN_020ADFE8 = 0x020ADFE8;
-FUN_020AE82C = 0x020AE82C;
-FUN_020AE8CC = 0x020AE8CC;
-FUN_020AE918 = 0x020AE918;
-FUN_020AEB70 = 0x020AEB70;
-FUN_020AEC7C = 0x020AEC7C;
-FUN_020AEC98 = 0x020AEC98;
-FUN_020AEE40 = 0x020AEE40;
-FUN_020AEEB8 = 0x020AEEB8;
-FUN_020AEF1C = 0x020AEF1C;
-FUN_020AF894 = 0x020AF894;
-FUN_020AF9C4 = 0x020AF9C4;
-FUN_020AFA28 = 0x020AFA28;
-FUN_020AFA80 = 0x020AFA80;
-FUN_020AFBA8 = 0x020AFBA8;
-FUN_020AFBFC = 0x020AFBFC;
-FUN_020AFC04 = 0x020AFC04;
-FUN_020AFD88 = 0x020AFD88;
-FUN_020AFD94 = 0x020AFD94;
-FUN_020AFEB8 = 0x020AFEB8;
-FUN_020AFFD8 = 0x020AFFD8;
-FUN_020B0030 = 0x020B0030;
-FUN_020B0088 = 0x020B0088;
-FUN_020B00F0 = 0x020B00F0;
-FUN_020B0138 = 0x020B0138;
-FUN_020B0180 = 0x020B0180;
-FUN_020B0250 = 0x020B0250;
-FUN_020B02C8 = 0x020B02C8;
-FUN_020B0448 = 0x020B0448;
-FUN_020B0870 = 0x020B0870;
-FUN_020B0BB0 = 0x020B0BB0;
-FUN_020B0C7C = 0x020B0C7C;
-FUN_020B0E34 = 0x020B0E34;
-FUN_020B0FC0 = 0x020B0FC0;
-FUN_020B10E8 = 0x020B10E8;
-FUN_020B1240 = 0x020B1240;
-FUN_020B1340 = 0x020B1340;
-FUN_020B1528 = 0x020B1528;
-FUN_020B1768 = 0x020B1768;
-FUN_020B19C4 = 0x020B19C4;
-FUN_020B19DC = 0x020B19DC;
-FUN_020B1A14 = 0x020B1A14;
-FUN_020B1A24 = 0x020B1A24;
-FUN_020B1EA4 = 0x020B1EA4;
-FUN_020B1EC4 = 0x020B1EC4;
-FUN_020B1EE4 = 0x020B1EE4;
-FUN_020B1EFC = 0x020B1EFC;
-FUN_020B1F80 = 0x020B1F80;
-FUN_020B20C8 = 0x020B20C8;
-FUN_020B2194 = 0x020B2194;
-FUN_020B224C = 0x020B224C;
-FUN_020B23D8 = 0x020B23D8;
-FUN_020B242C = 0x020B242C;
-FUN_020B2780 = 0x020B2780;
-FUN_020B2794 = 0x020B2794;
-FUN_020B28B4 = 0x020B28B4;
-FUN_020B2A08 = 0x020B2A08;
-FUN_020B2B08 = 0x020B2B08;
-FUN_020B2B58 = 0x020B2B58;
-FUN_020B2D9C = 0x020B2D9C;
-FUN_020B317C = 0x020B317C;
-FUN_020B31F0 = 0x020B31F0;
-FUN_020B326C = 0x020B326C;
-FUN_020B3334 = 0x020B3334;
-FUN_020B3390 = 0x020B3390;
-FUN_020B33A0 = 0x020B33A0;
-FUN_020B4358 = 0x020B4358;
-FUN_020B43A4 = 0x020B43A4;
-FUN_020B442C = 0x020B442C;
-FUN_020B4568 = 0x020B4568;
-FUN_020B4F38 = 0x020B4F38;
-FUN_020B502C = 0x020B502C;
-FUN_020B772C = 0x020B772C;
-FUN_020B7790 = 0x020B7790;
-FUN_020B7C58 = 0x020B7C58;
-FUN_020B7C78 = 0x020B7C78;
-FUN_020B7CDC = 0x020B7CDC;
-FUN_020B7CE4 = 0x020B7CE4;
-FUN_020B7CF0 = 0x020B7CF0;
-FUN_020B7D28 = 0x020B7D28;
-FUN_020B7DFC = 0x020B7DFC;
-FUN_020B7E10 = 0x020B7E10;
-FUN_020B7E1C = 0x020B7E1C;
-FUN_020B80B4 = 0x020B80B4;
-FUN_020B844C = 0x020B844C;
-FUN_020B8474 = 0x020B8474;
-FUN_020B849C = 0x020B849C;
-FUN_020BAC98 = 0x020BAC98;
-FUN_020BAFB8 = 0x020BAFB8;
-FUN_020BB1C0 = 0x020BB1C0;
-FUN_020BB394 = 0x020BB394;
-FUN_020BB59C = 0x020BB59C;
-FUN_020BB7F4 = 0x020BB7F4;
-FUN_020BC0FC = 0x020BC0FC;
-FUN_020BC13C = 0x020BC13C;
-FUN_020BC2A0 = 0x020BC2A0;
-FUN_020C0174 = 0x020C0174;
-FUN_020C01A0 = 0x020C01A0;
-FUN_020C01D0 = 0x020C01D0;
-FUN_020C03B8 = 0x020C03B8;
-FUN_020C041C = 0x020C041C;
-FUN_020C044C = 0x020C044C;
-FUN_020C04DC = 0x020C04DC;
-FUN_020C0510 = 0x020C0510;
-FUN_020C054C = 0x020C054C;
-FUN_020C0670 = 0x020C0670;
-FUN_020C0688 = 0x020C0688;
-FUN_020C0DD4 = 0x020C0DD4;
-FUN_020C0E14 = 0x020C0E14;
-FUN_020C0E7C = 0x020C0E7C;
-FUN_020C0EA4 = 0x020C0EA4;
-FUN_020C0EF4 = 0x020C0EF4;
-FUN_020C0F30 = 0x020C0F30;
-FUN_020C0F50 = 0x020C0F50;
-FUN_020C0F68 = 0x020C0F68;
-FUN_020C0F80 = 0x020C0F80;
-FUN_020C0F8C = 0x020C0F8C;
-FUN_020C0F9C = 0x020C0F9C;
-FUN_020C0FDC = 0x020C0FDC;
-FUN_020C1040 = 0x020C1040;
-FUN_020C10A4 = 0x020C10A4;
-FUN_020C1148 = 0x020C1148;
-FUN_020C1180 = 0x020C1180;
-FUN_020C1E58 = 0x020C1E58;
-FUN_020C1E68 = 0x020C1E68;
-FUN_020C1EA4 = 0x020C1EA4;
-FUN_020C1F54 = 0x020C1F54;
-FUN_020C1FA4 = 0x020C1FA4;
-FUN_020C1FF0 = 0x020C1FF0;
-FUN_020C20DC = 0x020C20DC;
-FUN_020C2104 = 0x020C2104;
-FUN_020C217C = 0x020C217C;
-FUN_020C226C = 0x020C226C;
-FUN_020C22D0 = 0x020C22D0;
-FUN_020C23FC = 0x020C23FC;
-FUN_020C26F8 = 0x020C26F8;
-FUN_020C2828 = 0x020C2828;
-FUN_020C290C = 0x020C290C;
-FUN_020C2A94 = 0x020C2A94;
-FUN_020C35E0 = 0x020C35E0;
-FUN_020C360C = 0x020C360C;
-FUN_020C3640 = 0x020C3640;
-FUN_020C3674 = 0x020C3674;
-FUN_020C36A8 = 0x020C36A8;
-FUN_020C3910 = 0x020C3910;
-FUN_020C3980 = 0x020C3980;
-FUN_020C39CC = 0x020C39CC;
-FUN_020C3EA4 = 0x020C3EA4;
-FUN_020C3EB0 = 0x020C3EB0;
-FUN_020C3F14 = 0x020C3F14;
-FUN_020C3F38 = 0x020C3F38;
-FUN_020C3F54 = 0x020C3F54;
-FUN_020C3F70 = 0x020C3F70;
-FUN_020C400C = 0x020C400C;
-FUN_020C504C = 0x020C504C;
-FUN_020C50B8 = 0x020C50B8;
-FUN_020C5288 = 0x020C5288;
-FUN_020C53C8 = 0x020C53C8;
-FUN_020C5588 = 0x020C5588;
-FUN_020C5600 = 0x020C5600;
-FUN_020C5634 = 0x020C5634;
-FUN_020C5668 = 0x020C5668;
-FUN_020C5974 = 0x020C5974;
-FUN_020C5978 = 0x020C5978;
-FUN_020C59A4 = 0x020C59A4;
-FUN_020C59C0 = 0x020C59C0;
-FUN_020C5A34 = 0x020C5A34;
-FUN_020C5A80 = 0x020C5A80;
-FUN_020C5AC8 = 0x020C5AC8;
-FUN_020C5AF8 = 0x020C5AF8;
-FUN_020C5B28 = 0x020C5B28;
-FUN_020C5D2C = 0x020C5D2C;
-FUN_020C5D4C = 0x020C5D4C;
-FUN_020C5D9C = 0x020C5D9C;
-FUN_020C5DBC = 0x020C5DBC;
-FUN_020C5E54 = 0x020C5E54;
-FUN_020C600C = 0x020C600C;
-FUN_020C6034 = 0x020C6034;
-FUN_020C605C = 0x020C605C;
-FUN_020C6070 = 0x020C6070;
-FUN_020C6098 = 0x020C6098;
-FUN_020C60AC = 0x020C60AC;
-FUN_020C60C0 = 0x020C60C0;
-FUN_020C60E4 = 0x020C60E4;
-FUN_020C6108 = 0x020C6108;
-FUN_020C611C = 0x020C611C;
-FUN_020C6168 = 0x020C6168;
-FUN_020C61F4 = 0x020C61F4;
-FUN_020C6280 = 0x020C6280;
-FUN_020C62FC = 0x020C62FC;
-FUN_020C63A8 = 0x020C63A8;
-FUN_020C65C0 = 0x020C65C0;
-FUN_020C66B4 = 0x020C66B4;
-FUN_020C68B8 = 0x020C68B8;
-FUN_020C6970 = 0x020C6970;
-FUN_020C6A84 = 0x020C6A84;
-FUN_020C6BF0 = 0x020C6BF0;
-FUN_020C6F60 = 0x020C6F60;
-FUN_020C6FB0 = 0x020C6FB0;
-FUN_020C7010 = 0x020C7010;
-FUN_020C7058 = 0x020C7058;
-FUN_020C70B0 = 0x020C70B0;
-FUN_020C70D0 = 0x020C70D0;
-FUN_020C7104 = 0x020C7104;
-FUN_020C7124 = 0x020C7124;
-FUN_020C74B8 = 0x020C74B8;
-FUN_020C74DC = 0x020C74DC;
-FUN_020C74F8 = 0x020C74F8;
-FUN_020C7A14 = 0x020C7A14;
-FUN_020C7B3C = 0x020C7B3C;
-FUN_020C7C28 = 0x020C7C28;
-FUN_020C7D28 = 0x020C7D28;
-FUN_020C7E0C = 0x020C7E0C;
-FUN_020C7E94 = 0x020C7E94;
-FUN_020C7FF0 = 0x020C7FF0;
-FUN_020C802C = 0x020C802C;
-FUN_020C8068 = 0x020C8068;
-FUN_020C80A4 = 0x020C80A4;
-FUN_020C823C = 0x020C823C;
-FUN_020C8538 = 0x020C8538;
-FUN_020C8728 = 0x020C8728;
-FUN_020C8774 = 0x020C8774;
-FUN_020C87E8 = 0x020C87E8;
-FUN_020C880C = 0x020C880C;
-FUN_020C8858 = 0x020C8858;
-FUN_020C88CC = 0x020C88CC;
-FUN_020C88F0 = 0x020C88F0;
-FUN_020C8948 = 0x020C8948;
-FUN_020C89BC = 0x020C89BC;
-FUN_020C8A2C = 0x020C8A2C;
-FUN_020C8A90 = 0x020C8A90;
-FUN_020C8B10 = 0x020C8B10;
-FUN_020C8C14 = 0x020C8C14;
-FUN_020C8C7C = 0x020C8C7C;
-FUN_020C8CE4 = 0x020C8CE4;
-FUN_020C8D4C = 0x020C8D4C;
-FUN_020C8DB4 = 0x020C8DB4;
-FUN_020C8E1C = 0x020C8E1C;
-FUN_020C8E84 = 0x020C8E84;
-FUN_020C8EEC = 0x020C8EEC;
-FUN_020C8F54 = 0x020C8F54;
-FUN_020C8FBC = 0x020C8FBC;
-FUN_020C9024 = 0x020C9024;
-FUN_020C908C = 0x020C908C;
-FUN_020C90F4 = 0x020C90F4;
-FUN_020C915C = 0x020C915C;
-FUN_020C91C4 = 0x020C91C4;
-FUN_020C922C = 0x020C922C;
-FUN_020C9294 = 0x020C9294;
-FUN_020C92F4 = 0x020C92F4;
-FUN_020C9354 = 0x020C9354;
-FUN_020C93BC = 0x020C93BC;
-FUN_020C9418 = 0x020C9418;
-FUN_020C9480 = 0x020C9480;
-FUN_020C94E8 = 0x020C94E8;
-FUN_020C9550 = 0x020C9550;
-OS_SpinWait = 0x020CD380;
-FUN_020D5150 = 0x020D5150;
-FUN_020D5168 = 0x020D5168;
-FUN_020D5180 = 0x020D5180;
-FUN_020D526C = 0x020D526C;
-PMi_SetLED = 0x020D5338;
-PMi_SetLEDAsync = 0x020D5374;
-PMi_ReadRegister = 0x020D5498;
-PMi_SendSleepStart = 0x020D55C0;
-PM_Init = 0x020D5764;
-PMi_WaitBusy = 0x020D5884;
-PMi_Lock = 0x020D58C4;
-FUN_020D5F40 = 0x020D5F40;
-FUN_020D614C = 0x020D614C;
-FUN_020D6320 = 0x020D6320;
-FUN_020D6578 = 0x020D6578;
-FUN_020D660C = 0x020D660C;
-FUN_020D66A0 = 0x020D66A0;
-FUN_020D66B0 = 0x020D66B0;
-CARD_UnlockRom = 0x020D66C0;
-CARD_LockRom = 0x020D66E0;
-FUN_020D6700 = 0x020D6700;
-FUN_020D6D7C = 0x020D6D7C;
-FUN_020D6DAC = 0x020D6DAC;
-FUN_020D6DB8 = 0x020D6DB8;
-FUN_020D6DC4 = 0x020D6DC4;
-FUN_020D6F20 = 0x020D6F20;
-CARD_Init = 0x020D7228;
-CARDi_ReadRom = 0x020D72AC;
-CARD_IsPulledOut = 0x020D7D18;
-FUN_020D7E9C = 0x020D7E9C;
-FUN_020D8A4C = 0x020D8A4C;
-FUN_020D8AF0 = 0x020D8AF0;
-FUN_020D8B94 = 0x020D8B94;
-FUN_020D8C3C = 0x020D8C3C;
-FUN_020D8F34 = 0x020D8F34;
-FUN_020D9014 = 0x020D9014;
-FUN_020D9060 = 0x020D9060;
-FUN_020D9168 = 0x020D9168;
-FUN_020D9244 = 0x020D9244;
-FUN_020D940C = 0x020D940C;
-FUN_020D950C = 0x020D950C;
-FUN_020D9554 = 0x020D9554;
-FUN_020D9624 = 0x020D9624;
-FUN_020D972C = 0x020D972C;
-FUN_020D9774 = 0x020D9774;
-FUN_020D97B4 = 0x020D97B4;
-FUN_020D9960 = 0x020D9960;
-FUN_020D99EC = 0x020D99EC;
-FUN_020D9B48 = 0x020D9B48;
-FUN_020DAD74 = 0x020DAD74;
-FUN_020DADD4 = 0x020DADD4;
-FUN_020DAF30 = 0x020DAF30;
-CTRDG_IsExisting = 0x020DB68C;
-FUN_020DB7A8 = 0x020DB7A8;
-CTRDG_Init = 0x020DBC80;
-FUN_020DDC5C = 0x020DDC5C;
-FUN_020DDCE4 = 0x020DDCE4;
-FUN_020DDD28 = 0x020DDD28;
-FUN_020DDD60 = 0x020DDD60;
-FUN_020DDE44 = 0x020DDE44;
-FUN_020DDF60 = 0x020DDF60;
-FUN_020DE3F0 = 0x020DE3F0;
-FUN_020DF438 = 0x020DF438;
-FUN_020DF4A4 = 0x020DF4A4;
-FUN_020DF510 = 0x020DF510;
-FUN_020E2EAC = 0x020E2EAC;
-FUN_020E2EC8 = 0x020E2EC8;
-FUN_020EA980 = 0x020EA980;
-FUN_020EAEF0 = 0x020EAEF0;
-FUN_020EB010 = 0x020EB010;
-FUN_020EB084 = 0x020EB084;
-FUN_020EB4C0 = 0x020EB4C0;
-FUN_020EB4F4 = 0x020EB4F4;
-FUN_020EB534 = 0x020EB534;
-FUN_020EB57C = 0x020EB57C;
-FUN_020EB5C4 = 0x020EB5C4;
-FUN_020EB7B0 = 0x020EB7B0;
-FUN_020EBA38 = 0x020EBA38;
-_ll_udiv = 0x020EBBE8;
+SDK_IRQ_STACKSIZE = 0x00000400;
+
+// .data
+// OS
+OSi_IrqCallbackInfoIndex = 0x02106818;
+// DGT
+Unk_0210683C = 0x0210683C;
+Unk_02106840 = 0x02106840;
+Unk_02106900 = 0x02106900;
+Unk_02106A00 = 0x02106A00;
+Unk_02106A04 = 0x02106A04;
+
+// .bss
gBacklightTop = 0x02106FA0;
gBacklightTop_2 = 0x02106FA0;
gUnknown2106FB8 = 0x02106FB8;
gUnknown21C48B8 = 0x021C48B8;
gUnk021C4918 = 0x021C4918;
+OSi_IrqCallbackInfo = 0x021D341C;
+isInitialized = 0x021D347C;
+OSi_StackForDestructor = 0x021D3480;
+OSi_RescheduleCount = 0x021D3484;
+OSi_ThreadIdCount = 0x021D3488;
+OSi_SystemCallbackInSwitchThread = 0x021D348C;
+OSi_CurrentThreadPtr = 0x021D3490;
+OSi_IsThreadInitialized = 0x021D3494;
+OSi_ThreadInfo = 0x021D3498;
+OSi_IdleThread = 0x021D34A8;
+OSi_LauncherThread = 0x021D3568;
+OSi_IdleThreadStack = 0x021D3628;
+OSi_Initialized = 0x021D36F0;
OSi_MainExArenaEnabled = 0x021D36F4;
+OSi_HeapInfo = 0x021D36F8;
+OSi_UserExceptionHandler = 0x021D371C;
+OSi_UserExceptionHandlerArg = 0x21D3720;
+OSi_DebuggerHandler = 0x021D3724;
+OSi_ExContext = 0x021D3728;
+OSi_TimerReserved = 0x021D37A8;
+OSi_UseTick = 0x021D37AC;
+OSi_NeedResetTimer = 0x021D37B0;
+OSi_TickCounter = 0x021D37B4;
+OSi_UseAlarm = 0x021D37BC;
+OSi_AlarmQueue = 0x021D37C0;
+OSi_UseVAlarm = 0x021D37C8;
+OSi_PreviousVCount = 0x021D37CC;
+OSi_VFrameCount = 0x021D37D0;
+OSi_VAlarmQueue = 0x021D37D4;
+OSi_IsInitReset = 0x021D37DC;
+OSi_IsResetOccurred = 0x021D37E0;
+OSi_vramExclusive = 0x021D37E4;
+OSi_vramLockId = 0x021D37E8;
+cardi_common = 0x021D55C0;
+
+// Overlay
FUN_021D74E0 = 0x021D74E0;
FUN_021D76AC = 0x021D76AC;
gUnk021D76C8 = 0x021D76C8;
@@ -509,6 +188,8 @@ FUN_021E856C = 0x021E856C;
FUN_021E8588 = 0x021E8588;
FUN_021E85E4 = 0x021E85E4;
FUN_021E85FC = 0x021E85FC;
+FUN_021EAE90 = 0x021EAE90;
+FUN_021EB044 = 0x021EB044;
FUN_021EC57C = 0x021EC57C;
FUN_021EC71C = 0x021EC71C;
FUN_021EC854 = 0x021EC854;
@@ -814,6 +495,12 @@ FUN_0224F12C = 0x0224F12C;
FUN_02252534 = 0x02252534;
FUN_02252538 = 0x02252538;
FUN_022567E0 = 0x022567E0;
-SDK_AUTOLOAD_DTCM_START = 0x027E0000;
-SDK_STATIC_BSS_END = 0x021D74E0;
+
+// ???
+SDK_MAIN_ARENA_LO = 0x0225FFA0;
+
+// EWRAM
+SDK_SECTION_ARENA_EX_START = 0x023E0000;
+
+// DTCM
gUnk027FFC20 = 0x027FFC20;