diff --git a/.gitignore b/.gitignore index b6cffd404..43a15d119 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 1ffc5c59a..c4f62a60c 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 763dd7149..bfb5ed9e4 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 000000000..d2c2681d0 --- /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 000000000..784c4cbb3 --- /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 similarity index 61% rename from asm/arm7_rom.s rename to arm7/asm/arm7_rom.s index a18e85658..3366eba47 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 000000000..156b2b09e --- /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 000000000..6b9e5f40e --- /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 000000000..478abdaa6 --- /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 000000000..075d22a90 --- /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 000000000..d97cfb950 --- /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 000000000..c5f29baf8 --- /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 000000000..664e85f55 --- /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 000000000..c756e8e24 --- /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 000000000..301ea2339 --- /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 000000000..d5ef358db --- /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 000000000..8fcbff7a1 --- /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 000000000..59a548b26 --- /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 000000000..02dcfbcf3 --- /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 000000000..82747b382 --- /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 000000000..1323e376d --- /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 000000000..331c0fa94 --- /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 000000000..ab3af5de4 --- /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 000000000..8116f8deb --- /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 000000000..a2d1d5fec --- /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 000000000..993517123 --- /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 000000000..915bb22c1 --- /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 000000000..b38ac8e46 --- /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 000000000..cc3e7998e --- /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 000000000..79c0de28d --- /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 similarity index 100% rename from asm/arm9overlay.s rename to arm9/asm/arm9overlay.s diff --git a/asm/crt0.s b/arm9/asm/crt0.s similarity index 98% rename from asm/crt0.s rename to arm9/asm/crt0.s index cfbab5f0e..709bd5f39 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 similarity index 100% rename from asm/filesystem.s rename to arm9/asm/filesystem.s diff --git a/arm9/asm/macros.inc b/arm9/asm/macros.inc new file mode 100644 index 000000000..156b2b09e --- /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 000000000..6b9e5f40e --- /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 000000000..0f18b45a3 --- /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 similarity index 96% rename from asm/rom2_2.s rename to arm9/asm/rom2_2.s index 0682a6b0b..d50557739 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 similarity index 94% rename from asm/scrcmd.s rename to arm9/asm/scrcmd.s index 8468f9f68..d75850de3 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 similarity index 55% rename from asm/secure.s rename to arm9/asm/secure.s index 18313c938..f9d8f1591 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 similarity index 99% rename from asm/unk_02000E0C.s rename to arm9/asm/unk_02000E0C.s index 506ff81a0..50b0dace5 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 similarity index 94% rename from asm/unk_020023C0.s rename to arm9/asm/unk_020023C0.s index ec0f13f12..2024d9d70 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 similarity index 94% rename from asm/unk_02006864.s rename to arm9/asm/unk_02006864.s index b169a5580..dab6adfe0 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 similarity index 94% rename from asm/unk_02038C78.s rename to arm9/asm/unk_02038C78.s index 5b3a52bff..785e5b48d 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 similarity index 94% rename from asm/unk_02046030.s rename to arm9/asm/unk_02046030.s index dfeeba8a1..30b8ee4cb 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 000000000..0adafb8b2 --- /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 000000000..33faec27c --- /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 similarity index 100% rename from asm/unk_10b724.s rename to arm9/asm/unk_10b724.s diff --git a/arm9/global.inc b/arm9/global.inc new file mode 100644 index 000000000..d25362f36 --- /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 similarity index 100% rename from src/FUN_02000DF4.c rename to arm9/src/FUN_02000DF4.c diff --git a/src/main.c b/arm9/src/main.c similarity index 100% rename from src/main.c rename to arm9/src/main.c diff --git a/src/script.c b/arm9/src/script.c similarity index 100% rename from src/script.c rename to arm9/src/script.c diff --git a/src/string_util.c b/arm9/src/string_util.c similarity index 100% rename from src/string_util.c rename to arm9/src/string_util.c diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt new file mode 100644 index 000000000..075d22a90 --- /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 b103a702b..000000000 --- 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 fffa35a6c..000000000 --- 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 bcd66a51f..000000000 --- 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 c5699171a..7ff82dc8c 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 a6ff40d08..478abdaa6 100644 --- a/global.inc +++ b/global.inc @@ -1,40 +1,2376 @@ +.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 StringCopy .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 InitSystemForTheGame -.extern InitGraphicMemory +.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 ErrorHandling +.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 LoadPlayerDataAddress +.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 @@ -50,21 +2386,29 @@ .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_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_020ADFA0 -.extern FUN_020ADFDC -.extern FUN_020ADFE8 +.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 @@ -73,6 +2417,9 @@ .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 @@ -80,8 +2427,6 @@ .extern FUN_020AFBA8 .extern FUN_020AFBFC .extern FUN_020AFC04 -.extern FUN_020AFD88 -.extern FUN_020AFD94 .extern FUN_020AFEB8 .extern FUN_020AFFD8 .extern FUN_020B0030 @@ -116,7 +2461,6 @@ .extern FUN_020B224C .extern FUN_020B23D8 .extern FUN_020B242C -.extern FUN_020B2780 .extern FUN_020B2794 .extern FUN_020B28B4 .extern FUN_020B2A08 @@ -212,263 +2556,8 @@ .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 DC_FlushRange -.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 FS_CloseFile -.extern FS_OpenFile -.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 @@ -600,6 +2689,8 @@ .extern FUN_021E8588 .extern FUN_021E85E4 .extern FUN_021E85FC +.extern FUN_021EAE90 +.extern FUN_021EB044 .extern FUN_021EC57C .extern FUN_021EC71C .extern FUN_021EC854 @@ -905,2341 +2996,522 @@ .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 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 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_02002C84 -.extern FUN_02002CC0 -.extern FUN_02002CF8 -.extern FUN_02002DB0 -.extern FUN_02002DE0 -.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_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_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_020061E8 -.extern FUN_0200621C -.extern FUN_02006268 -.extern FUN_02006278 -.extern FUN_0200627C -.extern FUN_0200628C -.extern LoadFromNARC -.extern LoadFromNarc_2 -.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_02006BB0 -.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_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_0200A344 -.extern FUN_0200A648 -.extern FUN_0200A738 -.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_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_0200CABC -.extern FUN_0200CAFC -.extern FUN_0200CB00 -.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_0200E308 -.extern FUN_0200E388 -.extern FUN_0200E394 -.extern FUN_0200E3BC -.extern FUN_02011B20 -.extern FUN_02012420 -.extern FUN_020126B4 -.extern FUN_020126D8 -.extern FUN_020126FC -.extern FUN_0201277C -.extern FUN_020127A8 -.extern FUN_020127C0 -.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_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_02015EF4 -.extern FUN_02015F10 -.extern FUN_02015F1C -.extern FUN_02015F34 -.extern FUN_020161A4 -.extern FUN_0201669C -.extern FUN_020166C8 -.extern FUN_0201681C -.extern FUN_02016828 -.extern FUN_020168D0 -.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_02017CE8 -.extern FUN_02017DFC -.extern FUN_02017E14 -.extern FUN_02017F18 -.extern FUN_02017FB4 -.extern FUN_02017FE4 -.extern FUN_02018148 -.extern FUN_02018170 -.extern FUN_020186B4 -.extern FUN_02018744 -.extern FUN_0201886C -.extern FUN_02018884 -.extern FUN_0201901C -.extern FUN_02019048 -.extern FUN_02019064 -.extern FUN_020191A4 -.extern FUN_02019220 -.extern FUN_02019548 -.extern FUN_02019570 -.extern FUN_0201958C -.extern FUN_0201AB60 -.extern FUN_0201AC68 -.extern FUN_0201AEE4 -.extern FUN_0201AFBC -.extern FUN_0201B234 -.extern FUN_0201B6C4 -.extern FUN_0201B6D0 -.extern FUN_0201B76C -.extern FUN_0201B7DC -.extern FUN_0201B93C -.extern FUN_0201B970 -.extern FUN_0201B9D4 -.extern FUN_0201BA10 -.extern FUN_0201BA60 -.extern FUN_0201BD5C -.extern FUN_0201BD70 -.extern FUN_0201BD7C -.extern FUN_0201BDE0 -.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_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_020219F4 -.extern FUN_02021A20 -.extern FUN_02021A4C -.extern FUN_02021A74 -.extern FUN_02021CE0 -.extern FUN_02021D3C -.extern FUN_02021E28 -.extern FUN_02021EF0 -.extern FUN_0202212C -.extern FUN_020222AC -.extern FUN_020222B4 -.extern FUN_020222F0 -.extern FUN_02022300 -.extern FUN_02022318 -.extern FUN_020223BC -.extern FUN_02022504 -.extern FUN_02022510 -.extern FUN_02022528 -.extern FUN_02022534 -.extern FUN_02022540 -.extern FUN_02022610 -.extern FUN_0202263C -.extern FUN_02022720 -.extern FUN_02022800 -.extern FUN_02022804 -.extern FUN_0202280C -.extern FUN_0202282C -.extern FUN_02022830 -.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_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_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_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_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_020334E8 -.extern FUN_02033534 -.extern FUN_02033564 -.extern FUN_02033578 -.extern FUN_020335F0 -.extern FUN_0203384C -.extern FUN_02033E74 -.extern FUN_02033ED0 -.extern FUN_02033F20 -.extern FUN_020344AC -.extern FUN_020344D8 -.extern FUN_020344FC -.extern FUN_0203450C -.extern FUN_0203451C -.extern FUN_02034678 -.extern FUN_020346CC -.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_02035D04 -.extern FUN_02036BC4 -.extern FUN_02037024 -.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 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 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 FUN_02038EB0 -.extern FUN_02039438 -.extern FUN_02039460 -.extern FUN_020394B8 -.extern FUN_0203953C -.extern FUN_02039550 -.extern FUN_020395F4 -.extern FUN_02039618 -.extern FUN_0203962C -.extern FUN_02039640 -.extern FUN_0203965C -.extern FUN_02039678 -.extern FUN_02046030 -.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_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_0204AB20 -.extern FUN_0204ABA8 -.extern FUN_0204ABDC -.extern FUN_0204AD0C -.extern FUN_0204B2B4 -.extern FUN_0204B2C0 -.extern FUN_0204B2D8 -.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_0204BAC4 -.extern FUN_0204BAD4 -.extern FUN_0204BAE4 -.extern FUN_0204BEC8 -.extern FUN_0204BED0 -.extern FUN_0204BED8 -.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_0205296C -.extern FUN_02052A10 -.extern FUN_02052C0C -.extern FUN_02052D08 -.extern FUN_02052E10 -.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_02054C14 -.extern FUN_02054CB0 -.extern FUN_02054CC8 -.extern FUN_02054D1C -.extern FUN_02054DEC -.extern FUN_02054E30 -.extern FUN_02054F50 -.extern FUN_0205502C -.extern FUN_02055304 -.extern FUN_020553D4 -.extern FUN_020553E8 -.extern FUN_02055474 -.extern FUN_02055488 -.extern FUN_02055560 -.extern FUN_02055720 -.extern FUN_0205753C -.extern FUN_020575D4 -.extern FUN_02057654 -.extern FUN_02057688 -.extern FUN_02058060 -.extern FUN_020580B4 -.extern FUN_02058448 -.extern FUN_02058480 -.extern FUN_02058488 -.extern FUN_02058510 -.extern FUN_02058738 -.extern FUN_02058854 -.extern FUN_0205889C -.extern FUN_020588B8 -.extern FUN_02058908 -.extern FUN_02058914 -.extern FUN_02058994 -.extern FUN_02058B2C -.extern FUN_02058B4C -.extern FUN_02058B7C -.extern FUN_02058BB4 -.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_0205E7C4 -.extern FUN_0205ECD4 -.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_0205F224 -.extern FUN_0205F234 -.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_0205F368 -.extern FUN_0205F378 -.extern FUN_0205F398 -.extern FUN_0205F3C0 -.extern FUN_0205F3F8 -.extern FUN_0205F478 -.extern FUN_0205F4A0 -.extern FUN_0205F4E4 -.extern FUN_0205F50C -.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_0205F710 -.extern FUN_0205F720 -.extern FUN_0205F740 -.extern FUN_0205F760 -.extern FUN_0205FD38 -.extern FUN_0205FDDC -.extern FUN_0205FE10 -.extern FUN_0205FF5C -.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_02061460 -.extern FUN_02061574 -.extern FUN_02063650 -.extern FUN_0206367C -.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_02065078 -.extern FUN_02065344 -.extern FUN_02066818 -.extern FUN_020669C0 -.extern FUN_02066ED8 -.extern FUN_02068854 -.extern FUN_02068AAC -.extern FUN_020699A4 -.extern FUN_0206A23C -.extern FUN_0206AD4C -.extern FUN_0206B20C -.extern FUN_0206B3E4 -.extern FUN_0206B57C -.extern FUN_0206B5E4 -.extern FUN_0206B620 -.extern FUN_0206B644 -.extern FUN_0206B900 -.extern FUN_0206BAE4 -.extern FUN_0206EA30 -.extern FUN_0206ED24 -.extern FUN_0206ED38 -.extern FUN_0206EDD4 -.extern FUN_0206EE64 -.extern FUN_0206EEF8 -.extern FUN_0206F3B8 -.extern FUN_0206F3D8 -.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_020852E8 -.extern FUN_02085F48 -.extern FUN_0208881C -.extern FUN_02088960 -.extern FUN_02088DD8 -.extern FUN_02088DF0 -.extern FUN_02088DF8 -.extern FUN_02088EF8 -.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 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 f8c76abf1..01161a05d 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 a69542729..075d22a90 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;