diff options
author | Cleverking2003 <30466983+Cleverking2003@users.noreply.github.com> | 2020-05-26 23:41:28 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-26 23:41:28 +0300 |
commit | c9ccaa3ed131b5bb9b8b7100a2f380cbd13d209d (patch) | |
tree | c0e3904a8823d30ddf1c89696f8a50f65ab16e74 | |
parent | 227da51c377f621f542ffdb52ef56bfb807f29ab (diff) | |
parent | 01388739e46f6e073da45702038f83681fcae711 (diff) |
Merge pull request #111 from PikalaxALT/pikalax_work
Split known libs
59 files changed, 32057 insertions, 31856 deletions
diff --git a/.travis.yml b/.travis.yml index bf0c9a04..681bddc5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,9 @@ dist: bionic sudo: false language: c +env: + global: + - LM_LICENSE_FILE="$TRAVIS_BUILD_DIR/tools/mwccarm/license.dat" addons: apt: packages: @@ -24,8 +27,10 @@ install: - mv NITRO\ SDK\ v3.0/include/nitro/specfiles/ARM9-TS.lcf.template arm9 script: - - export LM_LICENSE_FILE="$(pwd)/tools/mwccarm/license.dat" - make notifications: email: false + +after_success: + - .travis/calcrom/webhook.sh diff --git a/.travis/calcrom/.gitignore b/.travis/calcrom/.gitignore new file mode 100644 index 00000000..a2e06b56 --- /dev/null +++ b/.travis/calcrom/.gitignore @@ -0,0 +1 @@ +calcrom diff --git a/.travis/calcrom/Makefile b/.travis/calcrom/Makefile new file mode 100644 index 00000000..e3b6ff50 --- /dev/null +++ b/.travis/calcrom/Makefile @@ -0,0 +1,17 @@ +CXX := g++ +CXXFLAGS := -O3 -std=c++11 + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +TARGET := calcrom$(EXE) + +.PHONY: all + +all: $(TARGET) + +$(TARGET): calcrom.cpp + $(CXX) $(CXXFLAGS) -o $@ $^ diff --git a/.travis/calcrom/calcrom.cpp b/.travis/calcrom/calcrom.cpp new file mode 100644 index 00000000..8b43e010 --- /dev/null +++ b/.travis/calcrom/calcrom.cpp @@ -0,0 +1,121 @@ +/* + * CALCROM.CPP + * © PikalaxALT 2020 + * + * Simple C++ executable to measure the completion rate of Pokémon Diamond + * reverse engineering (decompilation). + * + * Requirements: + * - Must have C++11 compliant compiler. + * - MacOS X: Must provide elf.h on the include (-I) path. + * - Must be placed in ".travis/calcrom/". + * + * Changelog: + * - 1.0 (26 May 2020): Initial implementation + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <elf.h> +#include <glob.h> +#include <string.h> +#include <vector> +#include <string> + +using namespace std; + +struct Glob : public vector<char const *> { + glob_t glob_result; +public: + Glob(string const & pattern) { + int result = glob(pattern.c_str(), GLOB_TILDE | GLOB_BRACE, NULL, &glob_result); + if (result) { + stringstream ss; + ss << "Glob(" << pattern << ") failed with error " << result << endl; + throw runtime_error(ss.str()); + } + assign(glob_result.gl_pathv, glob_result.gl_pathv + glob_result.gl_pathc); + }; + void operator~() { + globfree(&glob_result); + } +}; + +int main() +{ + fstream elf; + Elf32_Ehdr ehdr; + vector<Elf32_Shdr> shdr; + + // Accumulate sizes + // src asm + // data _____|_____ + // text | + unsigned sizes[2][2] = {{0, 0}, {0, 0}}; + char * shstrtab = NULL; + size_t shstrsz = 0; + for (char const * & fname : Glob("../../arm9/{src,asm,lib/{src,asm},modules/*/{src,asm}}/*.{c,s,cpp}")) + { + string fname_s(fname); + string ext = fname_s.substr(fname_s.rfind('.'), 4); + bool is_asm = ext == ".s"; + fname_s = fname_s.replace(fname_s.find("arm9"), 4, "arm9/build"); + fname_s = fname_s.replace(fname_s.rfind('.'), 4, ".o"); + elf.open(fname_s, ios_base::in | ios_base::binary); + elf.read((char *)&ehdr, sizeof(ehdr)); + if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0) { + elf.close(); + stringstream ss; + ss << "Error validating " << fname_s << " as an ELF file" << endl; + throw runtime_error(ss.str()); + } + // Read ELF sections + elf.seekg(ehdr.e_shoff); + shdr.resize(ehdr.e_shnum); + elf.read((char *)shdr.data(), ehdr.e_shnum * ehdr.e_shentsize); + + // Read .shstrtab + if (shstrsz < shdr[ehdr.e_shstrndx].sh_size) { + shstrtab = (char *)realloc(shstrtab, shdr[ehdr.e_shstrndx].sh_size); + shstrsz = shdr[ehdr.e_shstrndx].sh_size; + } + elf.seekg(shdr[ehdr.e_shstrndx].sh_offset); + elf.read(shstrtab, shdr[ehdr.e_shstrndx].sh_size); + elf.close(); + + // Analyze sections + for (Elf32_Shdr & hdr : shdr) { + string shname = shstrtab + hdr.sh_name; + bool is_text = (shname == ".text" || shname == ".init"); + bool is_data = (shname == ".data" || shname == ".rodata" || shname == ".sdata"); + size_t size = hdr.sh_size + (hdr.sh_size & 3 ? 4 - (hdr.sh_size & 3) : 0); + if (is_text || is_data) + { + sizes[is_text][is_asm] += size; + } + } + } + free(shstrtab); + + cout << "Analysis of ARM9 binary:" << endl; + // Report code + unsigned total_text = sizes[1][0] + sizes[1][1]; + double total_text_d = total_text; + double src_text_d = sizes[1][0]; + double asm_text_d = sizes[1][1]; + cout << total_text << " total bytes of code" << endl; + cout << " " << sizes[1][0] << " bytes of code in src (" << (src_text_d / total_text_d * 100.0) << "%)" << endl; + cout << " " << sizes[1][1] << " bytes of code in asm (" << (asm_text_d / total_text_d * 100.0) << "%)" << endl; + cout << endl; + // Report data + unsigned total_data = sizes[0][0] + sizes[0][1]; + double total_data_d = total_data; + double src_data_d = sizes[0][0]; + double asm_data_d = sizes[0][1]; + cout << total_data << " total bytes of data" << endl; + cout << " " << sizes[0][0] << " bytes of data in src (" << (src_data_d / total_data_d * 100.0) << "%)" << endl; + cout << " " << sizes[0][1] << " bytes of data in asm (" << (asm_data_d / total_data_d * 100.0) << "%)" << endl; + // Let vectors fall to gc + return 0; +} diff --git a/.travis/calcrom/webhook.sh b/.travis/calcrom/webhook.sh new file mode 100644 index 00000000..fc02eef1 --- /dev/null +++ b/.travis/calcrom/webhook.sh @@ -0,0 +1,19 @@ +#!/bin/bash -ex + +# Only run this script if it's the master branch build. +if [[ "$TRAVIS_BRANCH" != "master" || "$TRAVIS_PULL_REQUEST" != "false" ]]; then + exit 0 +fi + +build_name=$1 +map_file=$(dirname "$0")/../../arm9/build/arm9.elf.xMAP +if [ ! -f $map_file ]; then + echo "$map_file does not exist!" + exit 1 +fi + +pushd $(dirname "$0") +make +output=$(./calcrom | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g') +curl -d "{\"username\": \"$CALCROM_DISCORD_WEBHOOK_USERNAME\", \"avatar_url\": \"$CALCROM_DISCORD_WEBHOOK_AVATAR_URL\", \"content\":\"\`\`\`$build_name progress:\\n$output\`\`\`\"}" -H "Content-Type: application/json" -X POST $CALCROM_DISCORD_WEBHOOK_URL +popd diff --git a/CMakeLists.txt b/CMakeLists.txt index f2537aad..aac9651e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required (VERSION 2.8.11) project(PokeDiamond) +set(CMAKE_CXX_STANDARD 11) # TODO: Add commands @@ -9,3 +10,6 @@ file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp") add_executable(PokeDiamond ${SOURCES}) target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include) + +add_executable(calcrom .travis/calcrom/calcrom.cpp) +target_include_directories(calcrom PRIVATE /usr/local/include) diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 09c128ec..57c4e18a 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -431,7 +431,38 @@ SECTIONS { unk_0208AC14.o (.text) custom_allocator.o (.text) unk_020910EC.o (.text) - unk_020AF030.o (.text) + DWC_backup.o (.text) + DWC_bm_init.o (.text) + DWC_util_wifiidtool.o (.text) + DWC_init.o (.text) + DWC_account.o (.text) + SOC_socl_startup.o (.text) + SOC_socl_command.o (.text) + SOC_socl_create.o (.text) + SOC_socl_bind.o (.text) + SOC_socl_read.o (.text) + SOC_socl_shutdown.o (.text) + SOC_socl_close.o (.text) + SOC_socl_cleanup.o (.text) + SOC_socl_poll.o (.text) + SOC_socl_const.o (.text) + SOC_socl_misc.o (.text) + SOC_socl_list.o (.text) + SOC_soc.o (.text) + SOC_socl_ssl.o (.text) + CPS_network.o (.text) + SSL_ssl.o (.text) + SSL_md5.o (.text) + SSL_sha1.o (.text) + SSL_rca4.o (.text) + SSL_biginteger.o (.text) + WCM_system.o (.text) + WCM_aplist.o (.text) + WCM_cpsif.o (.text) + WCM_util.o (.text) + WIFI_stubsmd5_dummy.o (.text) + libVCT.o (.text) + unk_020ADA84.o (.text) /* Nitro SDK */ FX_mtx22.o (.text) FX_mtx33.o (.text) @@ -706,7 +737,18 @@ SECTIONS { unk_02089F24.o (.rodata) unk_0208A998.o (.rodata) unk_020910EC.o (.rodata) - unk_020AF030.o (.rodata) + DWC_bm_init.o (.rodata) + DWC_util_wifiidtool.o (.rodata) + SOC_soc.o (.rodata) + CPS_network.o (.rodata) + SSL_ssl.o (.rodata) + SSL_md5.o (.rodata) + SSL_sha1.o (.rodata) + SSL_rca4.o (.rodata) + SSL_biginteger.o (.rodata) + WCM_system.o (.rodata) + libVCT.o (.rodata) + unk_020ADA84.o (.rodata) FX_atan.o (.rodata) GX_load3d.o (.rodata) SND_util.o (.rodata) @@ -760,7 +802,18 @@ SECTIONS { unk_020893E0.o (.data) unk_0208AC14.o (.data) unk_020910EC.o (.data) - unk_020AF030.o (.data) + DWC_backup.o (.data) + DWC_account.o (.data) + SOC_socl_bind.o (.data) + SOC_soc.o (.data) + CPS_network.o (.data) + SSL_ssl.o (.data) + SSL_md5.o (.data) + SSL_sha1.o (.data) + SSL_rca4.o (.data) + SSL_biginteger.o (.data) + libVCT.o (.data) + unk_020ADA84.o (.data) GX.o (.data) OS_irqHandler.o (.data) OS_emulator.o (.data) @@ -840,7 +893,23 @@ SECTIONS { unk_0208AC14.o (.bss) custom_allocator.o (.bss) unk_020910EC.o (.bss) - unk_020AF030.o (.bss) + DWC_backup.o (.bss) + SOC_socl_startup.o (.bss) + SOC_socl_command.o (.bss) + SOC_socl_read.o (.bss) + SOC_socl_list.o (.bss) + SOC_soc.o (.bss) + CPS_network.o (.bss) + SSL_ssl.o (.bss) + SSL_md5.o (.bss) + SSL_sha1.o (.bss) + SSL_rca4.o (.bss) + SSL_biginteger.o (.bss) + WCM_system.o (.bss) + WCM_cpsif.o (.bss) + WCM_util.o (.bss) + libVCT.o (.bss) + unk_020ADA84.o (.bss) GX.o (.bss) GX_state.o (.bss) GX_load2d.o (.bss) diff --git a/arm9/asm/CPS_network.s b/arm9/asm/CPS_network.s new file mode 100644 index 00000000..898a32a3 --- /dev/null +++ b/arm9/asm/CPS_network.s @@ -0,0 +1,6410 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global helper_threads_priority +helper_threads_priority: ; 0x02106218 + .byte 0x10, 0x00, 0x00, 0x00 + + .global mac_broadcast +mac_broadcast: ; 0x0210621C + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 + + .global UNK_02106224 +UNK_02106224: ; 0x02106224 + .asciz "NintendoDS" + + .balign 4, 0 + .global UNK_02106230 +UNK_02106230: ; 0x02106230 + .byte 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .bss + + .global wfailed +wfailed: ; 0x021C8EA8 + .space 0x4 + + .global ip_conflict +ip_conflict: ; 0x021C8EAC + .space 0x4 + + .global mymss +mymss: ; 0x021C8EB0 + .space 0x4 + + .global UNK_021C8EB4 +UNK_021C8EB4: ; 0x021C8EB4 + .space 0x4 + + .global ipid +ipid: ; 0x021C8EB8 + .space 0x4 + + .global eport +eport: ; 0x021C8EBC + .space 0x4 + + .global CPSNoIpReason +CPSNoIpReason: ; 0x021C8EC0 + .space 0x4 + + .global mode +mode: ; 0x021C8EC4 + .space 0x4 + + .global CPSiAlloc +CPSiAlloc: ; 0x021C8EC8 + .space 0x4 + + .global dhcp_callback +dhcp_callback: ; 0x021C8ECC + .space 0x4 + + .global CPSNetMask +CPSNetMask: ; 0x021C8ED0 + .space 0x4 + + .global CPSDhcpServerIp +CPSDhcpServerIp: ; 0x021C8ED4 + .space 0x4 + + .global yield_wait +yield_wait: ; 0x021C8ED8 + .space 0x4 + + .global wlan_putpnt +wlan_putpnt: ; 0x021C8EDC + .space 0x4 + + .global CPSGatewayIp +CPSGatewayIp: ; 0x021C8EE0 + .space 0x4 + + .global wlan_getpnt +wlan_getpnt: ; 0x021C8EE4 + .space 0x4 + + .global offered_myip +offered_myip: ; 0x021C8EE8 + .space 0x4 + + .global UNK_021C8EEC +UNK_021C8EEC: ; 0x021C8EEC + .space 0x4 + + .global scavenger_callback +scavenger_callback: ; 0x021C8EF0 + .space 0x4 + + .global CPSiFree +CPSiFree: ; 0x021C8EF4 + .space 0x4 + + .global scavenger_force_exit +scavenger_force_exit: ; 0x021C8EF8 + .space 0x4 + + .global link_is_on +link_is_on: ; 0x021C8EFC + .space 0x4 + + .global lease_time +lease_time: ; 0x021C8F00 + .space 0x4 + + .global CPSMyIp +CPSMyIp: ; 0x021C8F04 + .space 0x4 + + .global receiver_thread +receiver_thread: ; 0x021C8F08 + .space 0x4 + + .global wlan_buf +wlan_buf: ; 0x021C8F0C + .space 0x4 + + .global wlan_buflen +wlan_buflen: ; 0x021C8F10 + .space 0x4 + + .global CPSMyMac +CPSMyMac: ; 0x021C8F14 + .space 0x8 + + .global CPSDnsIp +CPSDnsIp: ; 0x021C8F1C + .space 0x8 + + .global CPSiRand32ctx +CPSiRand32ctx: ; 0x021C8F24 + .space 0x18 + + .global tmpbuf +tmpbuf: ; 0x021C8F3C + .space 0x3C + + .global arpcache +arpcache: ; 0x021C8F78 + .space 0x60 + + .global scavenger_soc +scavenger_soc: ; 0x021C8FD8 + .space 0x64 + + .global tmpsoc +tmpsoc: ; 0x021C903C + .space 0x64 + + .global scavenger_thread +scavenger_thread: ; 0x021C90A0 + .space 0xc0 + + .global tcpip_thread +tcpip_thread: ; 0x021C9160 + .space 0xc0 + + .global scavenger_sndbuf +scavenger_sndbuf: ; 0x021C9220 + .space 0x180 + + .global scavenger_rcvbuf +scavenger_rcvbuf: ; 0x021C93A0 + .space 0x180 + + .global fragtable +fragtable: ; 0x021C9520 + .space 0x1c0 + + .global scavenger_stack +scavenger_stack: ; 0x021C96E0 + .space 0x800 + + .global tcpip_stack +tcpip_stack: ; 0x021C9EE0 + .space 0x800 + + .text + + arm_func_start CPS_Resolve +CPS_Resolve: ; 0x0209AB80 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r6, _0209ACC0 ; =CPSiRand32ctx + 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 rawip + cmp r0, #0x0 + ldrne r0, [sp, #0x4] + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + mov r0, #0x1 + ldr r6, _0209ACC4 ; =CPSDnsIp + 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 resolve_sub + 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 CPSiRand32ctx +_0209ACC4: .word CPSDnsIp + + arm_func_start resolve_sub +resolve_sub: ; 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 CPS_SocUse + bl CPS_SocDatagramMode + mov r2, r5 + mov r0, #0x0 + mov r1, #0x35 + bl CPS_SocPingMode + mov r0, r6 + mov r2, r4 + mov r3, #0x0 + str r3, [sp, #0x0] + mov r1, #0x1 + bl resolve_common + mov r4, r0 + bl CPS_SocRelease + mov r0, r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start rawip +rawip: + 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 strtol10 + 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 strtol10 +strtol10: ; 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 resolve_common +resolve_common: ; 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 CPS_SocWrite + 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 CPS_SocGetLength + cmp r0, #0x0 + bne _0209AF4C + bl OS_YieldThread__ + b _0209B084 +_0209AF4C: + add r0, sp, #0xc + bl CPS_SocRead + 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 dns_skipname + cmp r7, #0x0 + add r0, r0, #0x4 + sub r7, r7, #0x1 + bne _0209AFB8 +_0209AFCC: + cmp r0, r4 + bhs _0209B07C +_0209AFD4: + bl dns_skipname + 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 CPS_SocConsume +_0209B084: + ldr r0, _0209B0CC ; =link_is_on + 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 link_is_on + + arm_func_start dns_skipname +dns_skipname: + 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 dhcp_release_server +dhcp_release_server: ; 0x0209B100 + stmdb sp!, {r4,lr} + bl CPS_SocUse + bl CPS_SocDatagramMode + ldr r1, _0209B168 ; =CPSDhcpServerIp + mov r0, #0x44 + ldr r2, [r1, #0x0] + mov r1, #0x43 + bl CPS_SocPingMode + ldr r4, _0209B16C ; =scavenger_sndbuf + 0x2A + mov r1, #0x7 + mov r0, r4 + mov r2, #0x0 + bl dhcp_setcommon + mov r1, #0xff + add r2, r0, #0x1 + strb r1, [r0, #0x0] + mov r0, #0x0 + mov r1, #0x12c + sub r3, r2, r4 + bl pad_mem + sub r1, r0, r4 + mov r0, r4 + bl CPS_SocWrite + bl CPS_SocRelease + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209B168: .word CPSDhcpServerIp +_0209B16C: .word scavenger_sndbuf + 0x2A + + arm_func_start dhcp_request_server +dhcp_request_server: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + bl CPS_SocUse + bl CPS_SocDatagramMode + cmp r4, #0x1 + bne _0209B1A8 + ldr r1, _0209B28C ; =CPSDhcpServerIp + mov r0, #0x44 + ldr r2, [r1, #0x0] + mov r1, #0x43 + bl CPS_SocPingMode + b _0209B1B8 +_0209B1A8: + mov r0, #0x44 + mov r1, #0x43 + mvn r2, #0x0 + bl CPS_SocPingMode +_0209B1B8: + mov r6, #0x0 +_0209B1BC: + mov r0, r4 + bl dhcp_send_request + mov r1, r6 + bl dhcp_analyze_response + movs r7, r0 + bne _0209B1E0 + add r6, r6, #0x1 + cmp r6, #0x4 + blt _0209B1BC +_0209B1E0: + bl CPS_SocRelease + cmp r7, #0x2 + bne _0209B224 + ldr r0, _0209B290 ; =lease_time + mov r1, #0x3 + ldr r3, [r0, #0x0] + ldr r2, _0209B294 ; =UNK_021C8EEC + 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 ; =UNK_021C8EEC + 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 ; =lease_time + 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 CPSDhcpServerIp +_0209B290: .word lease_time +_0209B294: .word UNK_021C8EEC + + arm_func_start dhcp_discover_server +dhcp_discover_server: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl CPS_SocUse + bl CPS_SocDatagramMode + mov r0, #0x44 + mov r1, #0x43 + mvn r2, #0x0 + bl CPS_SocPingMode + mov r4, #0x0 +_0209B2BC: + bl dhcp_send_discover + mov r1, r4 + bl dhcp_analyze_response + mov r5, r0 + cmp r5, #0x1 + beq _0209B2E0 + add r4, r4, #0x1 + cmp r4, #0x4 + blt _0209B2BC +_0209B2E0: + bl CPS_SocRelease + cmp r5, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start dhcp_analyze_response +dhcp_analyze_response: ; 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 ; =CPSDnsIp + mov r7, #0x2 + mov r8, #0x1 + ldr fp, _0209B69C ; =CPSGatewayIp + ldr r6, _0209B6A0 ; =CPSNetMask + str r0, [sp, #0xc] + b _0209B64C +_0209B354: + bl CPS_SocGetLength + cmp r0, #0x0 + bne _0209B368 + bl OS_YieldThread__ + b _0209B64C +_0209B368: + add r0, sp, #0x10 + bl CPS_SocRead + 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 ; =CPSMyMac + add r0, r10, #0x1c + bl maccmp + 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 ; =lease_time + str r10, [r3, #0x0] + b _0209B624 +_0209B5C0: + ldrb r3, [r2, #0x1] + cmp r3, #0x2 + beq _0209B5E0 + cmp r3, #0x5 + ldreq r3, _0209B6AC ; =CPSMyIp + moveq r4, r7 + streq r0, [r3, #0x0] + b _0209B624 +_0209B5E0: + ldr r3, _0209B6B0 ; =offered_myip + 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 ; =CPSDhcpServerIp + 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 CPS_SocConsume +_0209B64C: + ldr r0, _0209B6B8 ; =link_is_on + 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 CPSDnsIp +_0209B69C: .word CPSGatewayIp +_0209B6A0: .word CPSNetMask +_0209B6A4: .word CPSMyMac +_0209B6A8: .word lease_time +_0209B6AC: .word CPSMyIp +_0209B6B0: .word offered_myip +_0209B6B4: .word CPSDhcpServerIp +_0209B6B8: .word link_is_on + + arm_func_start dhcp_send_request +dhcp_send_request: ; 0x0209B6BC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _0209B7CC ; =scavenger_sndbuf + 0x2A + mov r5, r0 + add r2, sp, #0x0 + mov r0, r4 + mov r1, #0x3 + bl dhcp_setcommon + mov r12, r0 + cmp r5, #0x0 + bne _0209B790 + mov r0, #0x32 + strb r0, [r12, #0x0] + mov r0, #0x4 + ldr r3, _0209B7D0 ; =offered_myip + 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 ; =CPSDhcpServerIp + 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 pad_mem + mov r1, r0 + mov r0, r4 + sub r1, r1, r4 + bl CPS_SocWrite + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209B7CC: .word scavenger_sndbuf + 0x2A +_0209B7D0: .word offered_myip +_0209B7D4: .word CPSDhcpServerIp + + arm_func_start dhcp_send_discover +dhcp_send_discover: ; 0x0209B7D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _0209B898 ; =scavenger_sndbuf + 0x2A + add r2, sp, #0x0 + mov r0, r4 + mov r1, #0x1 + bl dhcp_setcommon + ldr r1, _0209B89C ; =offered_myip + 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 pad_mem + mov r1, r0 + mov r0, r4 + sub r1, r1, r4 + bl CPS_SocWrite + ldr r0, [sp, #0x0] + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209B898: .word scavenger_sndbuf + 0x2A +_0209B89C: .word offered_myip + + arm_func_start pad_mem +pad_mem: ; 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 dhcp_setcommon +dhcp_setcommon: ; 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 ; =CPSiRand32ctx + 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 ; =CPSMyIp + ldr r0, _0209BA68 ; =CPSMyMac + 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 ; =CPSMyMac + 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 ; =UNK_02106224 + 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 CPSiRand32ctx +_0209BA64: .word CPSMyIp +_0209BA68: .word CPSMyMac +_0209BA6C: .word 0x00008263 +_0209BA70: .word 0x00006353 +_0209BA74: .word 0x00000135 +_0209BA78: .word UNK_02106224 +_0209BA7C: .word 0x0000010D + + arm_func_start scavenger +scavenger: ; 0x0209BA80 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + ldr r3, _0209BE40 ; =scavenger_force_exit + mov r1, #0x0 + ldr r0, _0209BE44 ; =scavenger_soc + mov r2, #0x64 + str r1, [r3, #0x0] + bl MI_CpuFill8 + ldr r0, _0209BE44 ; =scavenger_soc + mov r3, #0x180 + ldr r2, _0209BE48 ; =scavenger_rcvbuf + ldr r1, _0209BE4C ; =scavenger_sndbuf + str r3, [r0, #0x3c] + str r2, [r0, #0x40] + str r3, [r0, #0x48] + str r1, [r0, #0x4c] + bl CPS_SocRegister + mov r11, #0x0 + mov r0, #0x1 + str r0, [sp, #0x0] + str r0, [sp, #0x4] + str r0, [sp, #0x4c] + mov r1, r0 + ldr r0, _0209BE50 ; =CPSNoIpReason + 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 ; =scavenger_force_exit + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _0209BE14 + bl OS_GetTick + mov r9, r0, lsr #0x10 + ldr r0, _0209BE54 ; =link_is_on + 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 ; =mode + ldr r0, [r0, #0x0] + ands r0, r0, #0x1 + beq _0209BBBC + cmp r11, #0x0 + bne _0209BCA4 + bl set_fixed_ip + ldr r11, [sp, #0xc] + b _0209BCA4 +_0209BBBC: + cmp r11, #0x3 + addls pc, pc, r11, lsl #0x2 + b _0209BCA4 +_0209BBC8: ; jump table + b _0209BBD8 ; case 0 + b _0209BC28 ; case 1 + b _0209BC4C ; case 2 + b _0209BCA4 ; case 3 +_0209BBD8: + ldr r0, [sp, #0x4] + cmp r0, #0x0 + ldrne r1, [sp, #0x10] + ldrne r0, _0209BE50 ; =CPSNoIpReason + strne r1, [r0, #0x0] + ldrne r0, [sp, #0x14] + strne r0, [sp, #0x4] + bl dhcp_discover_server + cmp r0, #0x0 + beq _0209BC14 + ldr r1, [sp, #0x18] + add r0, sp, #0x4c + bl dhcp_request_server + cmp r0, #0x0 + bne _0209BC20 +_0209BC14: + bl set_fixed_ip + ldr r11, [sp, #0x1c] + b _0209BCA4 +_0209BC20: + ldr r11, [sp, #0x20] + b _0209BCA4 +_0209BC28: + ldr r1, [sp, #0x24] + add r0, sp, #0x4c + bl dhcp_request_server + 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 dhcp_request_server + cmp r0, #0x0 + ldrne r11, [sp, #0x28] + bne _0209BCA4 + ldr r0, [sp, #0x4c] + cmp r0, #0x3c + bhs _0209BCA4 + ldr r0, [sp, #0x1c] + bl reset_network_vars + ldr r0, [sp, #0x30] + ldr r11, [sp, #0x2c] + str r0, [sp, #0x4c] + str r0, [sp, #0x0] + b _0209BCA4 +_0209BC8C: + ldr r0, [sp, #0x34] + bl reset_network_vars + ldr r0, [sp, #0x3c] + ldr r11, [sp, #0x38] + str r0, [sp, #0x4c] + str r0, [sp, #0x0] +_0209BCA4: + ldr r1, [sp, #0x40] + ldr r0, _0209BE5C ; =arpcache +_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 ; =CPSGatewayIp + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209BD10 + ldr r1, [sp, #0x0] + subs r1, r1, #0x1 + str r1, [sp, #0x0] + bne _0209BD10 + bl send_arprequest + ldr r0, [sp, #0x44] + str r0, [sp, #0x0] +_0209BD10: + ldr r0, _0209BE68 ; =OSi_ThreadInfo + 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 ; =fragtable +_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 ; =CPSiFree + 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 CPSi_SslPeriodical + ldr r0, _0209BE74 ; =scavenger_callback + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _0209BB50 + blx r0 + b _0209BB50 +_0209BE14: + ldr r0, _0209BE58 ; =mode + ldr r0, [r0, #0x0] + ands r0, r0, #0x1 + bne _0209BE30 + cmp r11, #0x3 + beq _0209BE30 + bl dhcp_release_server +_0209BE30: + bl CPS_SocUnRegister + add sp, sp, #0x54 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209BE40: .word scavenger_force_exit +_0209BE44: .word scavenger_soc +_0209BE48: .word scavenger_rcvbuf +_0209BE4C: .word scavenger_sndbuf +_0209BE50: .word CPSNoIpReason +_0209BE54: .word link_is_on +_0209BE58: .word mode +_0209BE5C: .word arpcache +_0209BE60: .word 0x000003BD +_0209BE64: .word CPSGatewayIp +_0209BE68: .word OSi_ThreadInfo +_0209BE6C: .word fragtable +_0209BE70: .word CPSiFree +_0209BE74: .word scavenger_callback + + arm_func_start set_fixed_ip +set_fixed_ip: ; 0x0209BE78 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _0209BF3C ; =dhcp_callback + ldr r0, [r0, #0x0] + blx r0 + ldr r0, _0209BF40 ; =CPSMyIp + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl send_arprequest + mov r0, #0x64 + bl OS_Sleep + ldr r0, _0209BF40 ; =CPSMyIp + ldr r0, [r0, #0x0] + bl send_arprequest + bl OS_GetTick + mov r4, r0, lsr #0x10 + orr r4, r4, r1, lsl #0x10 + ldr r6, _0209BF44 ; =ip_conflict + mov r7, #0x64 + ldr r5, _0209BF48 ; =link_is_on + b _0209BF00 +_0209BED8: + ldrb r0, [r6, #0x0] + cmp r0, #0x0 + beq _0209BEF8 + mov r0, #0x4 + bl reset_network_vars + 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 dhcp_callback +_0209BF40: .word CPSMyIp +_0209BF44: .word ip_conflict +_0209BF48: .word link_is_on + + arm_func_start CPS_SocGetChar +CPS_SocGetChar: ; 0x0209BF4C + stmdb sp!, {r4,lr} + ldr r0, _0209BF98 ; =OSi_ThreadInfo + 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 CPSi_SocWrite2 + mov r0, #0x0 + str r0, [r4, #0x60] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209BF98: .word OSi_ThreadInfo + + arm_func_start CPS_SocGetLength +CPS_SocGetLength: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209C02C ; =OSi_ThreadInfo + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + beq _0209C01C + ldrb r1, [r0, #0x9] + cmp r1, #0x0 + beq _0209BFD4 + bl CPSi_SslGetLength + 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 OSi_ThreadInfo + + arm_func_start CPS_SocWrite +CPS_SocWrite: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r3, _0209C0E4 ; =OSi_ThreadInfo + 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 CPSi_SocWrite2 + 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 CPSi_SocWrite2 + 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 OSi_ThreadInfo + + arm_func_start CPSi_SocWrite2 +CPSi_SocWrite2: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _0209C1CC ; =OSi_ThreadInfo + 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 send_udp +_0209C12C: + cmp r5, #0x0 + beq _0209C144 + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl send_udp +_0209C144: + add r0, r7, r5 + b _0209C1A4 +_0209C14C: + cmp r12, #0xb + bne _0209C184 + cmp r7, #0x0 + beq _0209C164 + mov r2, r4 + bl send_ping +_0209C164: + cmp r5, #0x0 + beq _0209C17C + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl send_ping +_0209C17C: + add r0, r7, r5 + b _0209C1A4 +_0209C184: + ldrb r12, [r4, #0x9] + cmp r12, #0x0 + beq _0209C19C + str r4, [sp, #0x0] + bl CPSi_SslWrite2 + b _0209C1A4 +_0209C19C: + str r4, [sp, #0x0] + bl CPSi_TcpWrite2Raw +_0209C1A4: + ldr r1, _0209C1D0 ; =wfailed + 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 OSi_ThreadInfo +_0209C1D0: .word wfailed + + arm_func_start CPSi_TcpWrite2Raw +CPSi_TcpWrite2Raw: + 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 ; =link_is_on + 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 tcp_write_do2 + bl OS_GetTick + mov r5, r0, lsr #0x10 + orr r5, r5, r1, lsl #0x10 +_0209C25C: + bl OS_YieldThread__ + 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 OS_YieldThread__ + 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 link_is_on + + arm_func_start tcp_write_do2 +tcp_write_do2: ; 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 tcp_write_do + 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 tcp_write_do + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start tcp_write_do +tcp_write_do: + 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 ; =mymss + 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 send_tcp + 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 mymss + + arm_func_start CPS_SocConsume +CPS_SocConsume: ; 0x0209C52C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209C57C ; =OSi_ThreadInfo + 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 CPSi_SslConsume + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C56C: + bl CPSi_SocConsumeRaw + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209C57C: .word OSi_ThreadInfo + + arm_func_start CPSi_SocConsumeRaw +CPSi_SocConsumeRaw: + 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 tck_send_ack + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CPS_SocRead +CPS_SocRead: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209C6BC ; =OSi_ThreadInfo + 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 udp_read_raw + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C678: + ldrb r2, [r1, #0x9] + cmp r2, #0x0 + beq _0209C694 + bl CPSi_SslRead + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C694: + bl CPSi_TcpReadRaw + 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 OSi_ThreadInfo + + arm_func_start CPSi_TcpReadRaw +CPSi_TcpReadRaw: ; 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 + 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 udp_read_raw +udp_read_raw: ; 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 CPS_TcpClose +CPS_TcpClose: ; 0x0209C7AC + stmdb sp!, {r4-r6,lr} + ldr r0, _0209C838 ; =OSi_ThreadInfo + 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 CPSi_SslClose +_0209C7DC: + bl OS_GetTick + mov r6, r0, lsr #0x10 + orr r6, r6, r1, lsl #0x10 + ldr r5, _0209C83C ; =link_is_on + b _0209C7F4 +_0209C7F0: + bl OS_YieldThread__ +_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 OSi_ThreadInfo +_0209C83C: .word link_is_on + + arm_func_start CPS_TcpShutdown +CPS_TcpShutdown: + stmdb sp!, {r4,lr} + ldr r0, _0209C880 ; =OSi_ThreadInfo + 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 CPSi_SslShutdown +_0209C870: + mov r0, r4 + bl CPSi_TcpShutdownRaw + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209C880: .word OSi_ThreadInfo + + arm_func_start CPSi_TcpShutdownRaw +CPSi_TcpShutdownRaw: ; 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 tck_send_finack + 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 tck_send_ack + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CPS_SocWho +CPS_SocWho: ; 0x0209C8E0 + ldr r2, _0209C930 ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start CPS_TcpConnect +CPS_TcpConnect: ; 0x0209C934 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209C98C ; =OSi_ThreadInfo + ldr r0, [r0, #0x4] + ldr r0, [r0, #0xa4] + cmp r0, #0x0 + beq _0209C97C + ldrb r1, [r0, #0x9] + cmp r1, #0x0 + beq _0209C96C + bl CPSi_SslConnect + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209C96C: + bl CPSi_TcpConnectRaw + 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 OSi_ThreadInfo + + arm_func_start CPSi_TcpConnectRaw +CPSi_TcpConnectRaw: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + bl get_seqno + 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 tcp_send_handshake + bl OS_DisableInterrupts + mov r7, r0 + ldr r0, _0209CA50 ; =CPSMyIp + 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 ; =CPSMyIp + 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 CPSMyIp + + arm_func_start CPS_TcpListen +CPS_TcpListen: ; 0x0209CA54 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _0209CAA4 ; =OSi_ThreadInfo + 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 CPSi_SslListen + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209CA94: + bl CPSi_TcpListenRaw + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209CAA4: .word OSi_ThreadInfo + + arm_func_start CPS_SetUdpCallback +CPS_SetUdpCallback: + ldr r1, _0209CAC0 ; =OSi_ThreadInfo + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + cmp r1, #0x0 + strne r0, [r1, #0x38] + bx lr + .balign 4 +_0209CAC0: .word OSi_ThreadInfo + + arm_func_start CPSi_TcpListenRaw +CPSi_TcpListenRaw: ; 0x0209CAC4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl get_seqno + 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 CPS_SocDup +CPS_SocDup: ; 0x0209CB0C + ldr r1, _0209CB20 ; =OSi_ThreadInfo + ldr r1, [r1, #0x4] + ldr r1, [r1, #0xa4] + str r1, [r0, #0xa4] + bx lr + .balign 4 +_0209CB20: .word OSi_ThreadInfo + + arm_func_start CPS_SocRelease +CPS_SocRelease: ; 0x0209CB24 + ldr r0, _0209CB40 ; =OSi_ThreadInfo + ldr r0, [r0, #0x4] + ldr r1, [r0, #0xa4] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x0] + bx lr + .balign 4 +_0209CB40: .word OSi_ThreadInfo + + arm_func_start CPS_SocUse +CPS_SocUse: ; 0x0209CB44 + ldr r0, _0209CB74 ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start CPS_SocPingMode +CPS_SocPingMode: ; 0x0209CB78 + stmdb sp!, {r4,lr} + ldr r3, _0209CBDC ; =OSi_ThreadInfo + 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 ; =CPSMyIp + 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 CPS_SocGetEport + strh r0, [r4, #0xa] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209CBDC: .word OSi_ThreadInfo +_0209CBE0: .word 0x7F000001 +_0209CBE4: .word CPSMyIp + + arm_func_start CPS_SocDatagramMode +CPS_SocDatagramMode: ; 0x0209CBE8 + ldr r0, _0209CC0C ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start CPS_SocUnRegister +CPS_SocUnRegister: ; 0x0209CC10 + ldr r0, _0209CC24 ; =OSi_ThreadInfo + mov r1, #0x0 + ldr r0, [r0, #0x4] + str r1, [r0, #0xa4] + bx lr + .balign 4 +_0209CC24: .word OSi_ThreadInfo + + arm_func_start CPS_SocRegister +CPS_SocRegister: ; 0x0209CC28 + ldr r1, _0209CC38 ; =OSi_ThreadInfo + ldr r1, [r1, #0x4] + str r0, [r1, #0xa4] + bx lr + .balign 4 +_0209CC38: .word OSi_ThreadInfo + + arm_func_start get_seqno +get_seqno: ; 0x0209CC3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _0209CC88 ; =CPSiRand32ctx + 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 CPSiRand32ctx + + arm_func_start CPS_SocGetEport +CPS_SocGetEport: ; 0x0209CC8C + stmdb sp!, {r4-r8,lr} + ldr r0, _0209CD30 ; =OSi_ThreadInfo + ldr r6, [r0, #0x8] + ldr r2, _0209CD34 ; =eport + 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 ; =eport + ldrh r0, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209CD30: .word OSi_ThreadInfo +_0209CD34: .word eport +_0209CD38: .word 0x00001388 + + arm_func_start tcpip +tcpip: ; 0x0209CD3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _0209CDAC ; =0x00000806 + add r4, sp, #0x0 +_0209CD4C: + mov r0, r4 + bl receive_packet + 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 dispatch_ip + b _0209CDA4 +_0209CD98: + add r0, r0, #0xe + sub r1, r3, #0xe + bl dispatch_arp +_0209CDA4: + bl throw_packet + b _0209CD4C + .balign 4 +_0209CDAC: .word 0x00000806 + + arm_func_start dispatch_ip +dispatch_ip: ; 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 ip_isme + 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 calc_checksum + 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 ; =CPSMyIp + 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 reg_arprequest +_0209CEF0: + add r1, sp, #0x0 + mov r0, r4 + bl check_frag + 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 dispatch_udp + b _0209CF70 +_0209CF44: + ldr r3, _0209CFA4 ; =CPSMyIp + ldr r3, [r3, #0x0] + cmp r3, #0x0 + beq _0209CF70 + cmp r12, #0x1 + bne _0209CF64 + bl dispatch_icmp + b _0209CF70 +_0209CF64: + cmp r12, #0x6 + bne _0209CF70 + bl dispatch_tcp +_0209CF70: + ldr r0, [sp, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, _0209CFA8 ; =CPSiFree + 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 CPSMyIp +_0209CFA8: .word CPSiFree + + arm_func_start check_frag +check_frag: ; 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 ; =fragtable + 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 ; =CPSiAlloc + 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 ; =CPSiFree + 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 fragtable +_0209D2AC: .word 0x00001FFF +_0209D2B0: .word CPSiAlloc +_0209D2B4: .word 0x0000100E +_0209D2B8: .word CPSiFree + + arm_func_start dispatch_udp +dispatch_udp: ; 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 check_tcpudpsum + cmp r0, #0x0 + ldmneia sp!, {r4-r8,lr} + bxne lr +_0209D2F8: + bl OS_DisableInterrupts + ldr r1, _0209D4D4 ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start dispatch_tcp +dispatch_tcp: + 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 check_tcpudpsum + 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 dt_syn + 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 dt_synack + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5C4: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl dt_ack + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5DC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl dt_fin + ldmia sp!, {r4-r6,lr} + bx lr +_0209D5F4: + ands r0, r2, #0x4 + beq _0209D610 + mov r0, r6 + mov r1, r5 + bl dt_rst + ldmia sp!, {r4-r6,lr} + bx lr +_0209D610: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0x0 + bl tcp_send_rst + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start dt_rst +dt_rst: ; 0x0209D62C + stmdb sp!, {r4,lr} + bl find_socket + 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 dt_fin +dt_fin: ; 0x0209D674 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl find_socket + 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 tck_send_ack + 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 tck_send_ack + 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 tck_send_finack + 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 tcp_send_rst + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start dt_ack +dt_ack: ; 0x0209D774 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl find_socket + movs r5, r0 + bne _0209D7B4 + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x0 + bl tcp_send_rst + 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 tck_send_ack + 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: ; jump table + b _0209D888 ; case 0 + b _0209DA70 ; case 1 + b _0209D888 ; case 2 + b _0209D8A0 ; case 3 + b _0209D8CC ; case 4 + b _0209DA70 ; case 5 + b _0209DA4C ; case 6 + b _0209D9D8 ; case 7 + b _0209D9D8 ; case 8 + b _0209DA4C ; case 9 +_0209D888: + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x0 + bl tcp_send_rst + 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 tck_send_finack + 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 tck_send_ack + 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 tck_send_ack + 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 tck_send_ack +_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 tck_send_ack +_0209DA8C: + bl OS_YieldThread + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start dt_synack +dt_synack: ; 0x0209DA9C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r5, r1 + mov r6, r2 + bl find_socket + 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 tcp_send_rst + 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 parse_mss + mov r0, r4 + mov r1, #0x0 + bl tck_send_ack + 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 dt_syn +dt_syn: ; 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 valid_IP + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, r7 + mov r2, r5 + bl find_specific_socket + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r4 + mov r1, r7 + bl check_listener + movs r2, r0 + beq _0209DC7C + mov r0, r4 + mov r1, r7 + bl dt_syn_LISTEN + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209DC7C: + bl OS_YieldThread + mov r0, r4 + mov r1, r7 + bl check_listener + movs r2, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, r7 + bl dt_syn_LISTEN + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start find_specific_socket +find_specific_socket: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl find_socket + movs r2, r0 + beq _0209DD38 + ldrb r0, [r2, #0x8] + cmp r0, #0x1 + bne _0209DCEC + mov r0, r6 + mov r1, r5 + bl dt_syn_LISTEN + 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 dt_syn_LISTEN + b _0209DD2C +_0209DD18: + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0x0 + bl tcp_send_rst +_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 dt_syn_LISTEN +dt_syn_LISTEN: ; 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 parse_mss + mov r0, r4 + mov r1, #0x12 + mov r2, #0x0 + bl tcp_send_handshake + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start tcp_send_rst +tcp_send_rst: ; 0x0209DE34 + stmdb sp!, {r4-r8,lr} + ldr r4, _0209DF6C ; =tmpsoc + 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 tcp_send_handshake + 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 tcp_send_handshake + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209DF6C: .word tmpsoc + + arm_func_start tck_send_finack +tck_send_finack: + ldr ip, _0209DF80 ; =tcp_send_handshake + mov r2, r1 + mov r1, #0x11 + bx r12 + .balign 4 +_0209DF80: .word tcp_send_handshake + + arm_func_start tck_send_ack +tck_send_ack: ; 0x0209DF84 + ldr ip, _0209DF94 ; =tcp_send_handshake + mov r2, r1 + mov r1, #0x10 + bx r12 + .balign 4 +_0209DF94: .word tcp_send_handshake + + arm_func_start tcp_send_handshake +tcp_send_handshake: ; 0x0209DF98 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + ldr r0, [r6, #0x1c] + mov r5, r1 + mov r4, r2 + bl no_need_inq + cmp r0, #0x0 + bne _0209DFD0 + ldr r0, _0209E00C ; =OSi_ThreadInfo + ldr r1, _0209E010 ; =tcpip_thread + 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 send_tcp + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr +_0209DFF4: + ldr r0, [r6, #0x1c] + bl get_targetip + bl send_arprequest + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209E00C: .word OSi_ThreadInfo +_0209E010: .word tcpip_thread + + arm_func_start no_need_inq +no_need_inq: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl get_targetip + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {lr} + bxeq lr + bl inq_arpcache + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start parse_mss +parse_mss: ; 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 find_socket +find_socket: ; 0x0209E0C8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r2, _0209E140 ; =OSi_ThreadInfo + 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 check_socket + 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 OSi_ThreadInfo + + arm_func_start check_socket +check_socket: + 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 check_listener +check_listener: ; 0x0209E200 + stmdb sp!, {r4-r6,lr} + ldr r2, _0209E2DC ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start dispatch_icmp +dispatch_icmp: ; 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 calc_checksum + 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 valid_IP + 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 process_icmp_reply + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_0209E3BC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl reply_icmp + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209E3D8: .word 0x0000FFFF + + arm_func_start valid_IP +valid_IP: + 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 process_icmp_reply +process_icmp_reply: ; 0x0209E40C + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r1, _0209E520 ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start reply_icmp +reply_icmp: ; 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 get_targetip + movs r7, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl inq_arpcache + cmp r0, #0x0 + bne _0209E598 + mov r0, r7 + bl send_arprequest + 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 calc_checksum + 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 send_ip + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start dispatch_arp +dispatch_arp: ; 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 ; =CPSMyMac + add r0, r6, #0x8 + bl maccmp + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _0209E7C0 ; =CPSMyIp + 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 ; =CPSMyIp + 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 reg_arprequest +_0209E75C: + cmp r4, #0x1 + bne _0209E780 + cmp r7, #0x0 + beq _0209E780 + mov r0, r6 + bl reply_arp + 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 ; =ip_conflict + movne r1, #0x1 + strneb r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209E7BC: .word CPSMyMac +_0209E7C0: .word CPSMyIp +_0209E7C4: .word 0x00000406 +_0209E7C8: .word ip_conflict + + arm_func_start reply_arp +reply_arp: ; 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 ; =CPSMyMac + add r1, r4, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r3, _0209E874 ; =CPSMyIp + 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 ; =CPSMyMac + sub r1, r4, #0x8 + mov r2, #0x6 + bl MI_CpuCopy8 + sub r0, r4, #0xe + mov r1, #0x2a + mov r2, #0x0 + mov r3, r2 + bl send_packet + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209E870: .word CPSMyMac +_0209E874: .word CPSMyIp + + arm_func_start send_tcp +send_tcp: ; 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 ; =OSi_ThreadInfo + ldr r3, _0209EAF0 ; =CPSMyIp + ldr r1, _0209EAF4 ; =tcpip_thread + ldr r0, [r0, #0x4] + ldr r12, [r3, #0x0] + cmp r0, r1 + ldreq r4, _0209EAF8 ; =tmpbuf + 0x22 + 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 ; =mymss + 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 calc_checksum_do + mov r2, r0 + mov r0, r9 + mov r1, r8 + bl calc_checksum_do + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl invert_checksum + 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 send_ip + 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 OSi_ThreadInfo +_0209EAF0: .word CPSMyIp +_0209EAF4: .word tcpip_thread +_0209EAF8: .word tmpbuf + 0x22 +_0209EAFC: .word mymss + + arm_func_start send_udp +send_udp: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r7, _0209EC3C ; =CPSMyIp + 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 calc_checksum_do + mov r2, r0 + mov r0, r7 + mov r1, r6 + bl calc_checksum_do + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl invert_checksum + 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 send_ip + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209EC3C: .word CPSMyIp + + arm_func_start send_ping +send_ping: + 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 ; =OSi_ThreadInfo + strh r1, [r3, #0x22] + ldr r2, [r2, #0x4] + add r4, r3, #0x22 + strh r2, [r4, #0x4] + mov r2, #0x0 + ldr r3, _0209ECF8 ; =UNK_021C8EB4 + 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 calc_checksum_do + mov r2, r0 + mov r0, r7 + mov r1, r6 + bl calc_checksum_do + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl invert_checksum + 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 send_ip + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209ECF4: .word OSi_ThreadInfo +_0209ECF8: .word UNK_021C8EB4 + + arm_func_start send_ip +send_ip: ; 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 ; =ipid + 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 ; =CPSMyIp + 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 send_ip_frag + 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 send_ip_frag + b _0209EE64 +_0209EE48: + str r6, [sp, #0x0] + mov r0, r10 + mov r2, r4 + mov r3, r9 + mov r1, #0x0 + str r5, [sp, #0x4] + bl send_ip_frag +_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 send_ip_frag + 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 send_ip_frag + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_0209EF0C: .word ipid +_0209EF10: .word CPSMyIp +_0209EF14: .word 0x000005C8 + + arm_func_start send_ip_frag +send_ip_frag: ; 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 calc_checksum + 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 ; =CPSMyIp + 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 send_ether +_0209EFC4: + ldr r0, _0209F040 ; =0x7F000001 + cmp r4, r0 + beq _0209EFF8 + ldr r0, _0209F044 ; =CPSMyIp + ldr r0, [r0, #0x0] + cmp r4, r0 + beq _0209EFF8 + mov r0, r4 + bl is_multicast + cmp r0, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r8,lr} + bxeq lr +_0209EFF8: + ldr r0, _0209F048 ; =UNK_02106230 + sub r1, r8, #0x1c + mov r2, #0x8 + bl MI_CpuCopy8 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _0209F04C ; =CPSMyMac + str r6, [sp, #0x0] + mov r1, r0 + str r5, [sp, #0x4] + sub r2, r8, #0x1c + add r3, r7, #0x1c + bl put_in_buffer + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F040: .word 0x7F000001 +_0209F044: .word CPSMyIp +_0209F048: .word UNK_02106230 +_0209F04C: .word CPSMyMac + + arm_func_start send_ether +send_ether: ; 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 is_multicast + cmp r0, #0x0 + bne _0209F0CC + mov r0, r4 + bl get_targetip + movs r4, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + bl inq_arpcache + cmp r0, #0x0 + bne _0209F0B0 + mov r0, r4 + bl arprequest +_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 ; =CPSMyMac + 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 send_packet + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F128: .word CPSMyMac + + arm_func_start reg_arprequest +reg_arprequest: ; 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 ; =CPSMyIp + ldr r0, [r0, #0x0] + cmp r6, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + bl ip_islocal + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + bl is_multicast + 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 ; =arpcache + 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 ; =arpcache + ldr r3, _0209F2A8 ; =arpcache+10 + 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 ; =arpcache + 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 ; =arpcache + mov r0, r7 + add r1, r3, r4 + add r1, r1, #0x4 + mov r2, #0x6 + str r6, [r3, r4] + bl MI_CpuCopy8 + ldr r0, _0209F2A8 ; =arpcache+10 + strh r5, [r0, r4] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_0209F29C: .word 0x7F000001 +_0209F2A0: .word CPSMyIp +_0209F2A4: .word arpcache +_0209F2A8: .word arpcache+10 + + arm_func_start arprequest +arprequest: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + mov r8, #0x0 + ldr r4, _0209F334 ; =CPSMyIp + mov r6, r8 + mov r5, #0x64 +_0209F2C8: + mov r0, r9 + bl send_arprequest + 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 inq_arpcache + 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 CPSMyIp + + arm_func_start send_arprequest +send_arprequest: ; 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 + add r0, sp, #0x0 + mov r1, #0xff + mov r2, #0x6 + bl MI_CpuFill8 + ldr r0, _0209F428 ; =CPSMyMac + 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 ; =CPSMyMac + add r1, sp, #0x16 + mov r2, #0x6 + bl MI_CpuCopy8 + ldr r0, _0209F434 ; =CPSMyIp + 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 send_packet + add sp, sp, #0x30 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209F428: .word CPSMyMac +_0209F42C: .word 0x00000608 +_0209F430: .word 0x00000406 +_0209F434: .word CPSMyIp + + arm_func_start inq_arpcache +inq_arpcache: + 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 ; =CPSMyIp + ldr r0, [r0, #0x0] + cmp r7, r0 + bne _0209F474 +_0209F46C: + ldr r5, _0209F50C ; =CPSMyMac + b _0209F4EC +_0209F474: + mov r0, r7 + bl is_broadcast + cmp r0, #0x0 + bne _0209F494 + mov r0, r7 + bl is_multicast + cmp r0, #0x0 + beq _0209F49C +_0209F494: + ldr r5, _0209F510 ; =mac_broadcast + b _0209F4EC +_0209F49C: + ldr r1, _0209F514 ; =arpcache + 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 ; =arpcache + mov r5, r0, lsr #0x10 + add r0, r2, r3 + ldr r2, _0209F518 ; =arpcache+10 + 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 CPSMyIp +_0209F50C: .word CPSMyMac +_0209F510: .word mac_broadcast +_0209F514: .word arpcache +_0209F518: .word arpcache+10 + + arm_func_start throw_packet +throw_packet: ; 0x0209F51C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r2, _0209F570 ; =wlan_getpnt + ldr r1, _0209F574 ; =wlan_buf + ldr lr, [r2, #0x0] + ldr r12, [r1, #0x0] + ldr r3, [r2, #0x0] + ldr r1, _0209F578 ; =wlan_buflen + 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 wlan_getpnt +_0209F574: .word wlan_buf +_0209F578: .word wlan_buflen + + arm_func_start receive_packet +receive_packet: ; 0x0209F57C + stmdb sp!, {r4-r10,lr} + mov r6, r0 + bl OS_DisableInterrupts + ldr sl, _0209F644 ; =wlan_getpnt + ldr sb, _0209F648 ; =wlan_putpnt + ldr r2, [r10, #0x0] + ldr r1, [r9, #0x0] + mov r5, r0 + cmp r2, r1 + bne _0209F5D4 + ldr r8, _0209F64C ; =OSi_ThreadInfo + ldr r7, _0209F650 ; =receiver_thread + 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 ; =wlan_buf + ldr r5, [r0, #0x0] + ldr r0, _0209F644 ; =wlan_getpnt + ldr r1, _0209F658 ; =wlan_buflen + 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 ; =wlan_buf + str r0, [r6, #0x0] + ldr r0, _0209F644 ; =wlan_getpnt + 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 wlan_getpnt +_0209F648: .word wlan_putpnt +_0209F64C: .word OSi_ThreadInfo +_0209F650: .word receiver_thread +_0209F654: .word wlan_buf +_0209F658: .word wlan_buflen + + arm_func_start CPSi_RecvCallbackFunc +CPSi_RecvCallbackFunc: ; 0x0209F65C + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r12, [sp, #0x4] + bl put_in_buffer + ldr r0, _0209F6BC ; =receiver_thread + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [r0, #0x0] + bl OS_IsThreadTerminated + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {lr} + bxne lr + ldr r0, _0209F6BC ; =receiver_thread + ldr r0, [r0, #0x0] + bl OS_WakeupThreadDirect + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_0209F6BC: .word receiver_thread + + arm_func_start put_in_buffer +put_in_buffer: ; 0x0209F6C0 + stmdb sp!, {r4-r8,lr} + ldr r4, _0209F918 ; =wlan_buf + 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 ; =wlan_buflen + 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 ; =UNK_02106230 + 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 ; =wlan_putpnt + add r2, r2, #0x9 + bic r2, r2, #0x1 + ldr lr, [r4, #0x0] + mov r3, r2, lsl #0x10 + ldr ip, _0209F92C ; =wlan_getpnt + 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 ; =wlan_buflen + ldr r8, [r3, #0x0] + cmp r4, r8 + bne _0209F7F0 + ldr r3, _0209F92C ; =wlan_getpnt + 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 ; =wlan_getpnt + mov r4, r2 + ldr r3, [r3, #0x0] + cmp r3, r2 + ldmlsia sp!, {r4-r8,lr} + bxls lr +_0209F814: + ldr ip, _0209F928 ; =wlan_putpnt + ldr r3, _0209F91C ; =wlan_buflen + 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 ; =wlan_putpnt + mov r3, #0x0 + str r3, [r0, #0x0] +_0209F858: + ldr ip, _0209F918 ; =wlan_buf + ldr r3, _0209F928 ; =wlan_putpnt + 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 ; =wlan_buf + ldr r0, _0209F928 ; =wlan_putpnt + 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 ; =wlan_buf + ldr r0, _0209F928 ; =wlan_putpnt + 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 ; =wlan_buf + ldr r1, _0209F928 ; =wlan_putpnt + 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 ; =wlan_putpnt + str r4, [r0, #0x0] + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209F918: .word wlan_buf +_0209F91C: .word wlan_buflen +_0209F920: .word 0x000005E4 +_0209F924: .word UNK_02106230 +_0209F928: .word wlan_putpnt +_0209F92C: .word wlan_getpnt + + arm_func_start send_packet +send_packet: ; 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 ; =UNK_02106230 + 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 WCM_SendDCFData + cmp r0, #0x0 + movlt r1, #0x1 + ldr r0, _0209F99C ; =wfailed + movge r1, #0x0 + strb r1, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209F998: .word UNK_02106230 +_0209F99C: .word wfailed + + arm_func_start maccmp +maccmp: + 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 ip_isme +ip_isme: + stmdb sp!, {r4-r6,lr} + ldr r1, _0209FA4C ; =CPSMyIp + 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 is_broadcast + cmp r0, #0x0 + moveq r4, #0x0 +_0209FA28: + cmp r4, #0x0 + bne _0209FA40 + mov r0, r6 + bl is_multicast + cmp r0, #0x0 + moveq r5, #0x0 +_0209FA40: + mov r0, r5 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209FA4C: .word CPSMyIp +_0209FA50: .word 0x7F000001 + + arm_func_start is_multicast +is_multicast: + and r0, r0, #0xf0000000 + cmp r0, #0xe0000000 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start is_broadcast +is_broadcast: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, #0x0 + bl ip_islocal + cmp r0, #0x0 + beq _0209FA9C + ldr r0, _0209FAAC ; =CPSNetMask + 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 CPSNetMask + + arm_func_start get_targetip +get_targetip: + stmdb sp!, {r4,lr} + mov r4, r0 + bl ip_islocal + cmp r0, #0x0 + ldreq r0, _0209FAD4 ; =CPSGatewayIp + ldreq r4, [r0, #0x0] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209FAD4: .word CPSGatewayIp + + arm_func_start ip_islocal +ip_islocal: + mvn r1, #0x0 + cmp r0, r1 + mov r12, #0x1 + beq _0209FB14 + ldr r1, _0209FB1C ; =0x7F000001 127.0.0.1 + cmp r0, r1 + beq _0209FB14 + ldr r2, _0209FB20 ; =CPSNetMask + ldr r1, _0209FB24 ; =CPSMyIp + 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 CPSNetMask +_0209FB24: .word CPSMyIp + + arm_func_start check_tcpudpsum +check_tcpudpsum: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r2 + mov r2, r3 + mov r5, r1 + bl calc_checksum_do + mov r2, r0 + add r0, r4, #0xc + mov r1, #0x8 + bl calc_checksum_do + 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 calc_checksum +calc_checksum: ; 0x0209FB84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x0 + bl calc_checksum_do + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl invert_checksum + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start invert_checksum +invert_checksum: ; 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 calc_checksum_do +calc_checksum_do: ; 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 CPS_SetThreadPriority +CPS_SetThreadPriority: ; 0x0209FC88 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r2, _0209FCB8 ; =helper_threads_priority + ldr r0, _0209FCBC ; =tcpip_thread + mov r1, r4 + str r4, [r2, #0x0] + bl OS_SetThreadPriority + ldr r0, _0209FCC0 ; =scavenger_thread + mov r1, r4 + bl OS_SetThreadPriority + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_0209FCB8: .word helper_threads_priority +_0209FCBC: .word tcpip_thread +_0209FCC0: .word scavenger_thread + + arm_func_start CPS_Cleanup +CPS_Cleanup: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CPS_CalmDown + ldr r0, _0209FD10 ; =scavenger_thread + bl OS_JoinThread + ldr r0, _0209FD14 ; =tcpip_thread + bl OS_DestroyThread + ldr r1, _0209FD18 ; =receiver_thread + mov r0, #0x0 + str r0, [r1, #0x0] + bl reset_network_vars + ldr r1, _0209FD1C ; =wlan_buf + mov r2, #0x0 + ldr r0, _0209FD20 ; =wlan_buflen + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209FD10: .word scavenger_thread +_0209FD14: .word tcpip_thread +_0209FD18: .word receiver_thread +_0209FD1C: .word wlan_buf +_0209FD20: .word wlan_buflen + + arm_func_start CPS_SetScavengerCallback +CPS_SetScavengerCallback: ; 0x0209FD24 + ldr r1, _0209FD30 ; =scavenger_callback + str r0, [r1, #0x0] + bx lr + .balign 4 +_0209FD30: .word scavenger_callback + + arm_func_start CPS_CalmDown +CPS_CalmDown: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + ldr r0, _0209FD8C ; =scavenger_thread + bl OS_IsThreadTerminated + movs r4, r0 + bne _0209FD74 + ldr r1, _0209FD90 ; =scavenger_force_exit + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _0209FD74 + ldr r0, _0209FD8C ; =scavenger_thread + 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 scavenger_thread +_0209FD90: .word scavenger_force_exit + + .extern _SDK_UbiquitousCPS + + arm_func_start CPS_Startup +CPS_Startup: ; 0x0209FD94 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldr r0, _0209FFD4 ; =_SDK_UbiquitousCPS + 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 ; =CPSiRand32ctx + 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 ; =CPSiRand32ctx + 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 ; =CPSiAlloc + ldr r0, _0209FFEC ; =CPSiFree + str r2, [r1, #0x0] + ldr r1, [r4, #0x8] + str r1, [r0, #0x0] + b _0209FE60 +_0209FE4C: + ldr r2, _0209FFF0 ; =empty_func + ldr r1, _0209FFE8 ; =CPSiAlloc + ldr r0, _0209FFEC ; =CPSiFree + str r2, [r1, #0x0] + str r2, [r0, #0x0] +_0209FE60: + ldr r1, [r4, #0x0] + ldr r0, _0209FFF4 ; =mode + ldr ip, _0209FFD8 ; =CPSiRand32ctx + str r1, [r0, #0x0] + ldr r1, [r4, #0x24] + ldr r3, [r12, #0x8] + cmp r1, #0x0 + ldrne r0, _0209FFF8 ; =mymss + strneh r1, [r0, #0x0] + ldreq r1, _0209FFFC ; =0x000005B4 + ldreq r0, _0209FFF8 ; =mymss + streqh r1, [r0, #0x0] + ldr r2, [r4, #0x28] + ldr r1, _020A0000 ; =offered_myip + ldr r0, _020A0004 ; =yield_wait + 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 ; =dhcp_callback + strne r1, [r0, #0x0] + ldreq r1, _0209FFF0 ; =empty_func + ldreq r0, _020A0008 ; =dhcp_callback + streq r1, [r0, #0x0] + ldr r1, [r4, #0x10] + cmp r1, #0x0 + ldrne r0, _020A000C ; =link_is_on + strne r1, [r0, #0x0] + ldreq r1, _020A0010 ; =default_link_is_on + ldreq r0, _020A000C ; =link_is_on + 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 ; =wlan_buf + ldr lr, _020A001C ; =wlan_buflen + str r6, [r0, #0x0] + ldr r4, [r4, #0x20] + ldr r0, _020A0020 ; =wlan_getpnt + str r4, [lr, #0x0] + str r3, [r0, #0x0] + ldr lr, _020A0024 ; =wlan_putpnt + ldr r4, _020A0028 ; =eport + add r5, r5, #0x400 + ldr r0, _020A002C ; =CPSMyMac + str r3, [lr, #0x0] + str r2, [r12, #0x0] + str r1, [r12, #0x4] + strh r5, [r4, #0x0] + bl OS_GetMacAddress + ldr r0, _020A0030 ; =ip_conflict + mov r2, #0x0 + strb r2, [r0, #0x0] + mov r1, #0x800 + str r1, [sp, #0x0] + ldr r0, _020A0034 ; =helper_threads_priority + ldr r1, _020A0038 ; =tcpip + ldr r4, [r0, #0x0] + ldr r0, _020A003C ; =tcpip_thread + ldr r3, _020A0040 ; =tcpip_stack+0x800 + str r4, [sp, #0x4] + bl OS_CreateThread + mov r1, #0x800 + ldr r0, _020A0034 ; =helper_threads_priority + str r1, [sp, #0x0] + ldr r1, [r0, #0x0] + ldr r0, _020A0044 ; =scavenger_thread + str r1, [sp, #0x4] + ldr r1, _020A0048 ; =scavenger + ldr r3, _020A004C ; =scavenger_stack+0x800 + mov r2, #0x0 + bl OS_CreateThread + ldr r0, _020A003C ; =tcpip_thread + bl OS_WakeupThreadDirect + ldr r0, _020A0044 ; =scavenger_thread + bl OS_WakeupThreadDirect + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209FFD4: .word _SDK_UbiquitousCPS +_0209FFD8: .word CPSiRand32ctx +_0209FFDC: .word 0x6C078965 +_0209FFE0: .word 0x5D588B65 +_0209FFE4: .word 0x00269EC3 +_0209FFE8: .word CPSiAlloc +_0209FFEC: .word CPSiFree +_0209FFF0: .word empty_func +_0209FFF4: .word mode +_0209FFF8: .word mymss +_0209FFFC: .word 0x000005B4 +_020A0000: .word offered_myip +_020A0004: .word yield_wait +_020A0008: .word dhcp_callback +_020A000C: .word link_is_on +_020A0010: .word default_link_is_on +_020A0014: .word 0x00000F88 +_020A0018: .word wlan_buf +_020A001C: .word wlan_buflen +_020A0020: .word wlan_getpnt +_020A0024: .word wlan_putpnt +_020A0028: .word eport +_020A002C: .word CPSMyMac +_020A0030: .word ip_conflict +_020A0034: .word helper_threads_priority +_020A0038: .word tcpip +_020A003C: .word tcpip_thread +_020A0040: .word tcpip_stack+0x800 +_020A0044: .word scavenger_thread +_020A0048: .word scavenger +_020A004C: .word scavenger_stack+0x800 + + arm_func_start default_link_is_on +default_link_is_on: ; 0x020A0050 + mov r0, #0x1 + bx lr + + arm_func_start empty_func +empty_func: ; 0x020A0058 + bx lr + + arm_func_start OS_YieldThread__ +OS_YieldThread__: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020A0094 ; =yield_wait + 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 yield_wait + + arm_func_start reset_network_vars +reset_network_vars: ; 0x020A0098 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r1, _020A01B8 ; =CPSMyIp + ldr r5, _020A01BC ; =CPSNoIpReason + ldr r1, [r1, #0x0] + ldr r3, _020A01C0 ; =CPSDnsIp + cmp r1, #0x0 + mov r1, #0x0 + movne r6, #0x1 + ldr ip, _020A01C4 ; =CPSNetMask + ldr r2, _020A01C8 ; =CPSDhcpServerIp + moveq r6, #0x0 + ldr lr, _020A01B8 ; =CPSMyIp + ldr r4, _020A01CC ; =CPSGatewayIp + 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 ; =arpcache + mov r2, #0x60 + bl MI_CpuFill8 + ldr r0, _020A01D4 ; =OSi_ThreadInfo + 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 ; =fragtable + mov r7, #0x0 + ldr r4, _020A01DC ; =CPSiFree + 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 CPSi_SslCleanup + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A01B8: .word CPSMyIp +_020A01BC: .word CPSNoIpReason +_020A01C0: .word CPSDnsIp +_020A01C4: .word CPSNetMask +_020A01C8: .word CPSDhcpServerIp +_020A01CC: .word CPSGatewayIp +_020A01D0: .word arpcache +_020A01D4: .word OSi_ThreadInfo +_020A01D8: .word fragtable +_020A01DC: .word CPSiFree diff --git a/arm9/asm/DWC_account.s b/arm9/asm/DWC_account.s new file mode 100644 index 00000000..45db0c45 --- /dev/null +++ b/arm9/asm/DWC_account.s @@ -0,0 +1,847 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global UNK_0210618C +UNK_0210618C: ; 0x0210618C + .asciz "%s%c%c%c%c%s" + + .balign 4, 0 + .global UNK_0210619C +UNK_0210619C: ; 0x0210619C + ; .asciz "0123456789abcdefghijklmnopqrstuvwxyz" + .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 + .byte 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76 + .byte 0x00, 0x00, 0x00, 0x00 + + .text + + arm_func_start DWC_IsEqualFriendData +DWC_IsEqualFriendData: ; 0x02096B78 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r7, r0 + bl DWCi_Acc_GetFlag_DataType + mov r5, r0 + mov r0, r4 + bl DWCi_Acc_GetFlag_DataType + cmp r5, r0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} + cmp r5, #0x3 + bne _02096BD8 + mov r0, r7 + bl DWCi_Acc_GetGsProfileId + mov r5, r0 + mov r0, r4 + bl DWCi_Acc_GetGsProfileId + 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 DWCi_Acc_GetUserId + mov r5, r0 + mov r6, r1 + mov r0, r4 + bl DWCi_Acc_GetUserId + cmp r6, r1 + cmpeq r5, r0 + bne _02096C28 + mov r0, r7 + bl DWCi_Acc_GetPlayerId + mov r5, r0 + mov r0, r4 + bl DWCi_Acc_GetPlayerId + 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 DWCi_Acc_GetFriendKey + mov r5, r0 + mov r6, r1 + mov r0, r4 + bl DWCi_Acc_GetFriendKey + 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} + + arm_func_start DWC_LoginIdToUserName +DWC_LoginIdToUserName: ; 0x02096C78 + ldr ip, _02096C8C ; =DWCi_Acc_LoginIdToUserName + mov r3, r0 + mov r0, r1 + ldr r1, [r3, #0x24] + bx r12 + .balign 4 +_02096C8C: .word DWCi_Acc_LoginIdToUserName + + arm_func_start DWC_SetGsProfileId +DWC_SetGsProfileId: ; 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 DWCi_Acc_SetGsProfileId + mov r0, r5 + mov r1, #0x3 + bl DWCi_Acc_SetFlag_DataType + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start DWC_CreateExchangeToken +DWC_CreateExchangeToken: ; 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 DWCi_Acc_IsAuthentic + cmp r0, #0x0 + addeq r0, r5, #0x4 + ldmeqia r0, {r0-r2} + addeq sp, sp, #0x4 + stmeqia r4, {r0-r2} + ldmeqia sp!, {r4-r5,pc} + ldr r1, [r5, #0x1c] + mov r0, r4 + bl DWCi_Acc_SetGsProfileId + mov r0, r4 + mov r1, #0x3 + bl DWCi_Acc_SetFlag_DataType + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start DWC_CreateFriendKeyToken +DWC_CreateFriendKeyToken: ; 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 DWCi_Acc_SetFriendKey + mov r0, r6 + mov r1, #0x2 + bl DWCi_Acc_SetFlag_DataType + ldmia sp!, {r4-r6,pc} + + arm_func_start DWC_CreateFriendKey +DWC_CreateFriendKey: ; 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 DWC_Acc_CreateFriendKey + mov r2, r0 +_02096D94: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start DWC_GetGsProfileId +DWC_GetGsProfileId: ; 0x02096DA0 + stmdb sp!, {r4-r6,lr} + mov r4, r1 + mov r6, r0 + mov r0, r4 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x1 + beq _02096E14 + cmp r0, #0x2 + beq _02096DD0 + cmp r0, #0x3 + beq _02096E08 + b _02096E1C +_02096DD0: + mov r0, r4 + bl DWCi_Acc_GetFriendKey + ldr r2, [r6, #0x24] + mov r4, r0 + mov r5, r1 + bl DWC_Acc_CheckFriendKey + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r2, [r6, #0x24] + mov r0, r4 + mov r1, r5 + bl DWC_Acc_FriendKeyToGsProfileId + ldmia sp!, {r4-r6,pc} +_02096E08: + mov r0, r4 + bl DWCi_Acc_GetGsProfileId + 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 DWC_GetFriendKey +DWC_GetFriendKey: ; 0x02096E24 + stmdb sp!, {r4,lr} + mov r4, r0 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x2 + movne r0, #0x0 + movne r1, r0 + ldmneia sp!, {r4,pc} + mov r0, r4 + bl DWCi_Acc_GetFriendKey + ldmia sp!, {r4,pc} + + arm_func_start DWCi_Acc_ClearDirty +DWCi_Acc_ClearDirty: ; 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 + 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 DWC_ClearDirtyFlag +DWC_ClearDirtyFlag: ; 0x02096E90 + ldr ip, _02096E98 ; =DWCi_Acc_ClearDirty + bx r12 + .balign 4 +_02096E98: .word DWCi_Acc_ClearDirty + + arm_func_start DWCi_Acc_IsDirty +DWCi_Acc_IsDirty: ; 0x02096E9C + ldr r0, [r0, #0x20] + and r0, r0, #0x1 + cmp r0, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start DWC_CheckDirtyFlag +DWC_CheckDirtyFlag: ; 0x02096EB4 + ldr ip, _02096EBC ; =DWCi_Acc_IsDirty + bx r12 + .balign 4 +_02096EBC: .word DWCi_Acc_IsDirty + + arm_func_start DWCi_Acc_SetLoginIdToUserData +DWCi_Acc_SetLoginIdToUserData: ; 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 + 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 DWC_CheckValidConsole +DWC_CheckValidConsole: ; 0x02096F18 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, r4, #0x10 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} + add r0, sp, #0x0 + bl DWC_Auth_GetId + ldr r0, [sp, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + add r0, r4, #0x10 + bl DWCi_Acc_GetUserId + 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 DWC_CheckHasProfile +DWC_CheckHasProfile: ; 0x02096F80 + stmdb sp!, {r4,lr} + mov r4, r0 + add r0, r4, #0x10 + bl DWCi_Acc_IsValidLoginId + 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 DWC_CheckUserData +DWC_CheckUserData: ; 0x02096FB0 + stmdb sp!, {r4,lr} + sub sp, sp, #0x400 + ldr r1, _02096FF0 ; =0xEDB88320 + mov r4, r0 + add r0, sp, #0x0 + bl MATHi_CRC32InitTableRev + 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 DWC_CreateUserData +DWC_CreateUserData: ; 0x02096FF4 + ldr ip, _02096FFC ; =DWCi_Acc_CreateUserData + bx r12 + .balign 4 +_02096FFC: .word DWCi_Acc_CreateUserData + + arm_func_start DWCi_Acc_IsValidFriendData +DWCi_Acc_IsValidFriendData: ; 0x02097000 + ldr ip, _02097008 ; =DWC_IsValidFriendData + bx r12 + .balign 4 +_02097008: .word DWC_IsValidFriendData + + arm_func_start DWC_IsValidFriendData +DWC_IsValidFriendData: ; 0x0209700C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start DWCi_Acc_IsAuthentic +DWCi_Acc_IsAuthentic: + ldr ip, _02097038 ; =DWCi_Acc_IsValidLoginId + add r0, r0, #0x10 + bx r12 + .balign 4 +_02097038: .word DWCi_Acc_IsValidLoginId + + arm_func_start DWCi_Acc_IsValidLoginId +DWCi_Acc_IsValidLoginId: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x1 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start DWCi_Acc_CheckConsoleUserId +DWCi_Acc_CheckConsoleUserId: ; 0x0209705C + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl DWC_Auth_GetId + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _020970A4 + mov r0, r4 + bl DWCi_Acc_GetUserId + 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 DWCi_Acc_GetUserId + 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 DWCi_Acc_CreateTempLoginId +DWCi_Acc_CreateTempLoginId: ; 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 DWC_Auth_GetId + ldr r0, [sp, #0x10] + cmp r0, #0x0 + beq _02097138 + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + mov r0, r6 + bl DWCi_Acc_SetUserId + b _02097148 +_02097138: + ldr r1, [sp, #0x8] + ldr r2, [sp, #0xc] + mov r0, r6 + bl DWCi_Acc_SetUserId +_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 DWCi_Acc_SetPlayerId + mov r0, r6 + mov r1, #0x1 + bl DWCi_Acc_SetFlag_DataType + add sp, sp, #0x38 + ldmia sp!, {r4-r6,pc} + .balign 4 +_02097184: .word 0x6C078965 +_02097188: .word 0x5D588B65 +_0209718C: .word 0x00269EC3 + + arm_func_start DWCi_Acc_CreateUserData +DWCi_Acc_CreateUserData: ; 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 DWCi_Acc_CreateTempLoginId + add r0, r5, #0x10 + mov r1, #0x0 + bl DWCi_Acc_SetFlag_DataType + ldr r1, _02097214 ; =0xEDB88320 + add r0, sp, #0x0 + bl MATHi_CRC32InitTableRev + 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 DWCi_Acc_LoginIdToUserName +DWCi_Acc_LoginIdToUserName: ; 0x02097218 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r6, r0 + mov r4, r1 + mov r5, r2 + bl DWCi_Acc_GetUserId + add r3, sp, #0x14 + mov r2, #0x2b + bl DWCi_Acc_U64ToString32 + mov r0, r6 + bl DWCi_Acc_GetPlayerId + mov r1, #0x0 + mov r2, #0x20 + add r3, sp, #0x29 + bl DWCi_Acc_U64ToString32 + 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 ; =UNK_0210618C + 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 UNK_0210618C + + arm_func_start DWCi_Acc_U64ToString32 +DWCi_Acc_U64ToString32: ; 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 ; =UNK_0210619C + 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 UNK_0210619C + + arm_func_start DWC_Acc_FriendKeyToGsProfileId +DWC_Acc_FriendKeyToGsProfileId: ; 0x02097324 + stmdb sp!, {r4,lr} + mov r4, r0 + bl DWC_Acc_CheckFriendKey + cmp r0, #0x0 + mvnne r0, #0x0 + andne r0, r4, r0 + moveq r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start DWC_Acc_CheckFriendKey +DWC_Acc_CheckFriendKey: ; 0x02097334 + 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} + 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 DWC_CheckFriendKey +DWC_CheckFriendKey: ; 0x020973B4 + ldr ip, _020973CC ; =DWC_Acc_CheckFriendKey + mov r3, r0 + mov r0, r1 + mov r1, r2 + ldr r2, [r3, #0x24] + bx r12 + .balign 4 +_020973CC: .word DWC_Acc_CheckFriendKey + + arm_func_start DWC_Acc_CreateFriendKey +DWC_Acc_CreateFriendKey: ; 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 DWCi_SetBuddyFriendData +DWCi_SetBuddyFriendData: ; 0x02097414 + stmdb sp!, {r4,lr} + mov r4, r0 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x3 + ldmneia sp!, {r4,pc} + mov r0, r4 + bl DWCi_Acc_GetFlags + orr r1, r0, #0x4 + mov r0, r4 + bl DWCi_Acc_SetFlags + ldmia sp!, {r4,pc} + + arm_func_start DWCi_Acc_SetFlag_DataType +DWCi_Acc_SetFlag_DataType: ; 0x02097440 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl DWCi_Acc_GetFlags + bic r1, r0, #0x3 + mov r0, r5 + orr r1, r1, r4 + bl DWCi_Acc_SetFlags + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start DWCi_Acc_SetFlags +DWCi_Acc_SetFlags: ; 0x0209746C + ldr ip, _0209747C ; =DWCi_Acc_SetMaskBits + ldr r3, _02097480 ; =0x001FFFFF + mov r2, #0xb + bx r12 + .balign 4 +_0209747C: .word DWCi_Acc_SetMaskBits +_02097480: .word 0x001FFFFF + + arm_func_start DWC_GetFriendDataType +DWC_GetFriendDataType: ; 0x02097484 + ldr ip, _0209748C ; =DWCi_Acc_GetFlag_DataType + bx r12 + .balign 4 +_0209748C: .word DWCi_Acc_GetFlag_DataType + + arm_func_start DWC_IsBuddyFriendData +DWC_IsBuddyFriendData: ; 0x02097490 + stmdb sp!, {r4,lr} + mov r4, r0 + bl DWCi_Acc_GetFlag_DataType + cmp r0, #0x3 + bne _020974C0 + mov r0, r4 + bl DWCi_Acc_GetFlags + 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 DWCi_Acc_GetFlag_DataType +DWCi_Acc_GetFlag_DataType: ; 0x020974C8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl DWCi_Acc_GetFlags + and r0, r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start DWCi_Acc_GetFlags +DWCi_Acc_GetFlags: ; 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 DWCi_Acc_SetGsProfileId +DWCi_Acc_SetGsProfileId: ; 0x020974F4 + str r1, [r0, #0x4] + bx lr + + arm_func_start DWCi_Acc_SetFriendKey +DWCi_Acc_SetFriendKey: ; 0x020974FC + str r1, [r0, #0x4] + str r2, [r0, #0x8] + bx lr + + arm_func_start DWCi_Acc_SetPlayerId +DWCi_Acc_SetPlayerId: ; 0x02097508 + str r1, [r0, #0x8] + bx lr + + arm_func_start DWCi_Acc_SetUserId +DWCi_Acc_SetUserId: ; 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 DWCi_Acc_SetMaskBits + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_02097540: .word 0x000007FF + + arm_func_start DWCi_Acc_GetGsProfileId +DWCi_Acc_GetGsProfileId: + ldr r0, [r0, #0x4] + bx lr + + arm_func_start DWCi_Acc_GetFriendKey +DWCi_Acc_GetFriendKey: ; 0x0209754C + ldr r1, [r0, #0x8] + ldr r0, [r0, #0x4] + orr r1, r1, #0x0 + orr r0, r0, #0x0 + bx lr + + arm_func_start DWCi_Acc_GetPlayerId +DWCi_Acc_GetPlayerId: + ldr r0, [r0, #0x8] + bx lr + + arm_func_start DWCi_Acc_GetUserId +DWCi_Acc_GetUserId: ; 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 DWCi_Acc_SetMaskBits +DWCi_Acc_SetMaskBits: ; 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 diff --git a/arm9/asm/DWC_backup.s b/arm9/asm/DWC_backup.s new file mode 100644 index 00000000..6a06652f --- /dev/null +++ b/arm9/asm/DWC_backup.s @@ -0,0 +1,959 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global nv_result +nv_result: ; 0x021C8C78 + .space 0x4 + + .global nv_cb_occurred +nv_cb_occurred: ; 0x021C8C7C + .space 0x4 + + .global Address +Address: ; 0x021C8C80 + .space 0x4 + + .global Wifi +Wifi: ; 0x021C8C84 + .space 0x1c + + .global Work +Work: ; 0x021C8CA0 + .space 0x20 + + .text + + arm_func_start DWCi_BACKUPlGetWifi +DWCi_BACKUPlGetWifi: ; 0x02095324 + ldr r0, _0209532C ; =Wifi + bx lr + .balign 4 +_0209532C: .word Wifi + + arm_func_start DWCi_BACKUPlConvWifiInfo +DWCi_BACKUPlConvWifiInfo: ; 0x02095330 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + ldr r3, [r4, #0x8] + ldr r2, [r4, #0xc] + ldr r1, _020953E4 ; =Wifi + 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 ; =Wifi + ldr r1, _020953E8 ; =Wifi + 0x6 + 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 ; =Wifi + 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 ; =Wifi + 0xc + mov r4, r2, asr #0x2 + mov r2, #0x2 + strb r4, [r3, #0xb] + bl MI_CpuCopy8 + ldr r0, _020953E4 ; =Wifi + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_020953E4: .word Wifi +_020953E8: .word Wifi + 0x6 +_020953EC: .word Wifi + 0xc + + arm_func_start Callback_NVRAM +Callback_NVRAM: ; 0x020953F0 + ldr r3, _02095420 ; =nv_result + and r12, r1, #0xff + ldr r0, _02095424 ; =nv_cb_occurred + mov r1, #0x1 + strh r12, [r3, #0x0] + str r1, [r0, #0x0] + cmp r2, #0x0 + movne r0, #0xff + strneh r0, [r3, #0x0] + ldr r0, _02095420 ; =nv_result + ldrh r0, [r0, #0x0] + bx lr + .balign 4 +_02095420: .word nv_result +_02095424: .word nv_cb_occurred + + arm_func_start writeDisable +writeDisable: + stmdb sp!, {r4-r6,lr} + mov r5, #0x4 + mov r4, #0x1 +_02095434: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady + cmp r0, #0x0 + beq _02095434 + ldr r1, _02095490 ; =Callback_NVRAM + 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 NVRAMm_ExecuteCommand + cmp r0, #0x1 + beq _02095488 + mov r0, r4 + bl SVC_WaitByLoop + b _02095460 +_02095488: + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_02095490: .word Callback_NVRAM + + arm_func_start verify +verify: + stmdb sp!, {r4-r6,lr} + mov r5, r2 + mov r4, r3 + mov r6, r0 + mov r0, r1 + mov r1, r5 + mov r2, r4 + bl readNvram + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl memcmp + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start writeNvram +writeNvram: ; 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 + cmp r0, #0x0 + beq _020954F8 + ldr r1, _02095558 ; =Callback_NVRAM + 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 NVRAMm_ExecuteCommand + cmp r0, #0x1 + ldmeqia sp!, {r4-r8,pc} + mov r0, r4 + bl SVC_WaitByLoop + b _0209552C + ldmia sp!, {r4-r8,pc} + .balign 4 +_02095558: .word Callback_NVRAM + + arm_func_start readNvram +readNvram: + 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 + cmp r0, #0x0 + beq _02095580 + ldr r1, _020955F0 ; =Callback_NVRAM + 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 NVRAMm_ExecuteCommand + cmp r0, #0x1 + beq _020955D8 + mov r0, r7 + bl 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 Callback_NVRAM + + arm_func_start NVRAMm_ExecuteCommand +NVRAMm_ExecuteCommand: ; 0x020955F4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc4 + ldr ip, _02095AAC ; =0x0000FFFF + ldr sl, _02095AB0 ; =Work + 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 ; =nv_cb_occurred + cmp r9, #0x7 + str r6, [r0, #0x0] + addls pc, pc, r9, lsl #0x2 + b _0209574C +_02095768: ; jump table + b _0209574C ; case 0 + b _02095788 ; case 1 + b _02095834 ; case 2 + b _02095854 ; case 3 + b _020958F0 ; case 4 + b _020958F0 ; case 5 + b _02095948 ; case 6 + b _02095968 ; case 7 +_02095788: + ldr r1, [sp, #0x8] + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x34] + blt _0209574C + ldr r2, [sp, #0x38] + mov r0, r5 + mov r1, r7 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x3c] + blt _0209574C + ldr r1, [sp, #0x40] + ldr r2, [sp, #0x44] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x48] + blt _0209574C + ldr r1, [sp, #0xc] + ldr r2, [sp, #0x4c] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x50] + blt _0209574C + ldr r1, [sp, #0x10] + ldr r2, [sp, #0x54] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x58] + blt _0209574C + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x5c] + mov r0, r5 + bl PXI_SendWordByFifo + 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 + 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 + cmp r0, #0x0 + ldrlt r8, [sp, #0x68] + blt _020958E0 + ldr r2, [sp, #0x6c] + mov r0, r5 + mov r1, r7 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x70] + blt _020958E0 + ldr r1, [sp, #0x1c] + ldr r2, [sp, #0x74] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x78] + blt _020958E0 + ldr r1, [sp, #0x20] + ldr r2, [sp, #0x7c] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x80] + blt _020958E0 + ldr r1, [sp, #0x24] + ldr r2, [sp, #0x84] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x88] + movge r8, r4 +_020958E0: + bl OS_GetTick + str r0, [sp, #0x0] + mov r11, r1 + b _0209574C +_020958F0: + ldr r1, [sp, #0x28] + mov r0, r5 + mov r2, r6 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x8c] + blt _0209574C + ldr r1, [sp, #0x2c] + ldr r2, [sp, #0x90] + mov r0, r5 + bl PXI_SendWordByFifo + cmp r0, #0x0 + ldrlt r8, [sp, #0x94] + blt _0209574C + ldr r1, [sp, #0x30] + ldr r2, [sp, #0x98] + mov r0, r5 + bl PXI_SendWordByFifo + 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 + 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 + cmp r0, #0x0 + movge r8, r4 + ldrlt r8, [sp, #0xa4] + b _0209574C +_02095988: + ldr r0, _02095AC8 ; =nv_cb_occurred + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _0209574C + ldr r0, _02095AD8 ; =nv_result + 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: ; jump table + b _0209574C ; case 0 + b _020959D8 ; case 1 + b _020959E4 ; case 2 + b _020959EC ; case 3 + b _020959F4 ; case 4 + b _020959F4 ; case 5 + b _02095A88 ; case 6 + b _02095A94 ; case 7 +_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} + 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 + cmp r1, #0x0 + cmpeq r0, #0xfa0 + bls _02095A7C +_02095A74: + ldr r9, [sp, #0xb8] + b _0209574C +_02095A7C: + ldr r0, [sp, #0xbc] + bl 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 Work +_02095AB4: .word 0x01050000 +_02095AB8: .word 0x02002200 +_02095ABC: .word 0x02002300 +_02095AC0: .word 0x02002500 +_02095AC4: .word 0x01020000 +_02095AC8: .word nv_cb_occurred +_02095ACC: .word 0x03002000 +_02095AD0: .word 0x03002D00 +_02095AD4: .word 0x03002100 +_02095AD8: .word nv_result +_02095ADC: .word 0x000082EA + + arm_func_start DWC_BACKUPlCheckAddress +DWC_BACKUPlCheckAddress: + 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 DWC_BACKUPlCheckIp +DWC_BACKUPlCheckIp: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + bl DWC_BACKUPlCheckAddress + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + 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} + 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 DWC_BACKUPlCheckSsid +DWC_BACKUPlCheckSsid: + 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 DWCi_BACKUPlConvMaskAddr +DWCi_BACKUPlConvMaskAddr: ; 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 DWCi_BACKUPlConvMaskCidr +DWCi_BACKUPlConvMaskCidr: ; 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 DWCi_BACKUPlSetWiFi +DWCi_BACKUPlSetWiFi: ; 0x02095C24 + ldr ip, _02095C34 ; =MI_CpuCopy8 + ldr r1, _02095C38 ; =Wifi + mov r2, #0xe + bx r12 + .balign 4 +_02095C34: .word MI_CpuCopy8 +_02095C38: .word Wifi + + arm_func_start DWCi_BACKUPlWriteAll +DWCi_BACKUPlWriteAll: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r1, _02095CD8 ; =Address + 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 writeNvram + mov r0, r7 + mov r1, r8 + mov r2, r5 + mov r3, r4 + bl verify + cmp r0, #0x0 + beq _02095C80 + add r9, r9, #0x1 + cmp r9, #0x4 + add r7, r7, #0x100 + add r8, r8, #0x100 + blt _02095C68 + bl writeDisable + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_02095CD8: .word Address + + arm_func_start DWCi_BACKUPlWritePage +DWCi_BACKUPlWritePage: ; 0x02095CDC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _02095D64 ; =Address + 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 writeNvram + mov r0, r4 + mov r1, r6 + mov r2, r5 + mov r3, r8 + bl verify + cmp r0, #0x0 + beq _02095D0C +_02095D38: + add r7, r7, #0x1 + cmp r7, #0x4 + add r4, r4, #0x100 + add r6, r6, #0x100 + blt _02095D00 + bl writeDisable + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_02095D64: .word Address + + arm_func_start DWCi_BACKUPlRead +DWCi_BACKUPlRead: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02095D98 ; =Address + mov r2, r0 + ldr r0, [r1, #0x0] + mov r1, #0x400 + bl readNvram + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_02095D98: .word Address + + arm_func_start DWCi_BACKUPlInit +DWCi_BACKUPlInit: + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x20 + mov r1, r0 + mov r2, r4 + bl readNvram + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldrh r2, [r4, #0x0] + ldr r1, _02095DDC ; =Address + mov r0, #0x1 + mov r2, r2, lsl #0x3 + sub r2, r2, #0x400 + str r2, [r1, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_02095DDC: .word Address + + arm_func_start DWCi_BM_SetWiFiInfo +DWCi_BM_SetWiFiInfo: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r2, _02095EBC ; =Address + mov r10, r1 + ldr r8, [r2, #0x0] + bl DWCi_BACKUPlConvWifiInfo + 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 readNvram + cmp r0, #0x0 + bne _02095E44 + bl OS_Terminate + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_02095E44: + ldr r0, _02095EC4 ; =Wifi + 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 writeNvram + mov r0, r10 + mov r1, r8 + mov r2, r7 + mov r3, r4 + bl verify + cmp r0, #0x0 + beq _02095E68 + add r9, r9, #0x1 + cmp r9, #0x2 + add r8, r8, #0x100 + blt _02095E1C + bl writeDisable + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_02095EBC: .word Address +_02095EC0: .word 0x0000A001 +_02095EC4: .word Wifi + + arm_func_start DWCi_BM_GetWiFiInfo +DWCi_BM_GetWiFiInfo: + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _02095F90 ; =Wifi + 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 ; =Wifi + 0x5 + 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 ; =Wifi + 0xa + 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 ; =Wifi + 0xc + 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 Wifi +_02095F94: .word 0x000007FF +_02095F98: .word Wifi + 0x5 +_02095F9C: .word Wifi + 0xa +_02095FA0: .word 0x000003FF +_02095FA4: .word Wifi + 0xc + + arm_func_start DWCi_BM_GetApInfo +DWCi_BM_GetApInfo: ; 0x02095FA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02095FD8 ; =Address + mov r2, r0 + ldr r0, [r1, #0x0] + mov r1, #0x300 + bl readNvram + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_02095FD8: .word Address diff --git a/arm9/asm/DWC_bm_init.s b/arm9/asm/DWC_bm_init.s new file mode 100644 index 00000000..038abe94 --- /dev/null +++ b/arm9/asm/DWC_bm_init.s @@ -0,0 +1,357 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global DWCi_SETTING_NONE +DWCi_SETTING_NONE: ; 0x020FF574 + .byte 0x00, 0x00, 0x00, 0x00 + + .text + + arm_func_start initPage +initPage: ; 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 init +init: ; 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 DWCi_AUTH_GetNewWiFiInfo + add r0, sp, #0x0 + bl DWCi_BACKUPlConvWifiInfo + 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 checkAp +checkAp: + 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} + cmp r0, #0x2 + addhi sp, sp, #0x8 + movhi r0, #0x0 + ldmhiia sp!, {r4,pc} + add r0, r4, #0x40 + bl DWC_BACKUPlCheckSsid + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r1, _0209618C ; =DWCi_SETTING_NONE + add r0, r4, #0xc0 + mov r2, #0x4 + bl memcmp + cmp r0, #0x0 + beq _02096140 + add r0, r4, #0xc4 + bl DWC_BACKUPlCheckAddress + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldrb r0, [r4, #0xd0] + cmp r0, #0x20 + addhi sp, sp, #0x8 + movhi r0, #0x0 + ldmhiia sp!, {r4,pc} + add r1, sp, #0x0 + bl DWCi_BACKUPlConvMaskAddr + add r1, sp, #0x0 + add r0, r4, #0xc0 + bl DWC_BACKUPlCheckIp + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_02096140: + ldr r1, _0209618C ; =DWCi_SETTING_NONE + add r0, r4, #0xc8 + mov r2, #0x4 + bl memcmp + cmp r0, #0x0 + beq _02096180 + add r0, r4, #0xc8 + bl DWC_BACKUPlCheckAddress + cmp r0, #0x0 + bne _02096180 + add r0, r4, #0xcc + bl DWC_BACKUPlCheckAddress + 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 DWCi_SETTING_NONE + + arm_func_start DWC_BM_Init +DWC_BM_Init: ; 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 DWCi_BACKUPlInit + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964B4 ; =0xFFFFD8EF + ldmeqia sp!, {r4-r11,pc} + ldr r1, _020964B8 ; =0x0000A001 + add r0, r10, #0x500 + bl MATHi_CRC16InitTableRev + mov r0, r10 + bl DWCi_BACKUPlRead + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964B4 ; =0xFFFFD8EF + ldmeqia sp!, {r4-r11,pc} + 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 checkAp + 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 DWCi_BACKUPlSetWiFi + 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 init + mov r0, r10 + bl DWCi_BACKUPlWriteAll + 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 init + mov r0, r10 + bl DWCi_BACKUPlWriteAll + 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 init + mov r0, r10 + bl DWCi_BACKUPlWriteAll + 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 initPage + 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 initPage + 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 DWCi_BACKUPlSetWiFi + ldr r0, [sp, #0x8] + cmp r0, #0x0 + bne _02096414 + mov r0, r10 + mov r1, #0x2 + bl initPage +_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 DWCi_BACKUPlWriteAll + cmp r0, #0x0 + addeq sp, sp, #0x14 + ldreq r0, _020964BC ; =0xFFFFD8F0 + ldmeqia sp!, {r4-r11,pc} + 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 diff --git a/arm9/asm/DWC_init.s b/arm9/asm/DWC_init.s new file mode 100644 index 00000000..24395f70 --- /dev/null +++ b/arm9/asm/DWC_init.s @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + .extern _SDK_NintendoDWC + + arm_func_start DWC_Init +DWC_Init: ; 0x02096B14 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, _02096B74 ; =_SDK_NintendoDWC + mov r4, #0x0 + bl OSi_ReferSymbol + mov r0, r6 + bl DWC_BM_Init + mov r5, r0 + bl DWC_Auth_CheckWiFiIDNeedCreate + cmp r0, #0x0 + beq _02096B4C + mov r0, r6 + bl DWCi_AUTH_MakeWiFiID + 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 _SDK_NintendoDWC diff --git a/arm9/asm/DWC_report.s b/arm9/asm/DWC_report.s new file mode 100644 index 00000000..1a4b032e --- /dev/null +++ b/arm9/asm/DWC_report.s @@ -0,0 +1,2 @@ + .include "asm/macros.inc" + .include "global.inc" diff --git a/arm9/asm/DWC_util_wifiidtool.s b/arm9/asm/DWC_util_wifiidtool.s new file mode 100644 index 00000000..660db18e --- /dev/null +++ b/arm9/asm/DWC_util_wifiidtool.s @@ -0,0 +1,458 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global UNK_020FF578 +UNK_020FF578: ; 0x020FF578 + .byte 0x01, 0x02, 0x00, 0x04, 0x03, 0x05, 0x06, 0x07 + + .global UNK_020FF580 +UNK_020FF580: ; 0x020FF580 + .byte 0x05, 0x09, 0x01, 0x0E, 0x0C, 0x02, 0x0A, 0x00, 0x0B, 0x0D, 0x03, 0x04, 0x08, 0x06, 0x0F, 0x07 + + .text + + arm_func_start DWC_Auth_CheckWiFiIDNeedCreate +DWC_Auth_CheckWiFiIDNeedCreate: + stmdb sp!, {lr} + sub sp, sp, #0x14 + add r0, sp, #0x0 + bl DWCi_BM_GetWiFiInfo + 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 DWC_Auth_GetId +DWC_Auth_GetId: ; 0x02096518 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl DWCi_BM_GetWiFiInfo + 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 DWCi_BM_GetWiFiInfo + bl RTC_Init + add r0, sp, #0x8 + bl RTC_GetDate + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} + add r0, sp, #0x18 + bl RTC_GetTime + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} + 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} + bl OS_IsTickAvailable + 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 DWCi_BM_GetWiFiInfo + 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 DWCi_BM_SetWiFiInfo + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,pc} + + arm_func_start DWCi_AUTH_MakeWiFiID +DWCi_AUTH_MakeWiFiID: ; 0x02096760 + stmdb sp!, {r4,lr} + sub sp, sp, #0x18 + mov r4, r0 + add r0, sp, #0x0 + bl DWCi_AUTH_GetNewWiFiInfo + cmp r0, #0x0 + addeq sp, sp, #0x18 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + add r0, sp, #0x0 + mov r1, r4 + bl DWCi_BM_SetWiFiInfo + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x18 + ldmia sp!, {r4,pc} + + arm_func_start DWCi_AUTH_GetNewWiFiInfo +DWCi_AUTH_GetNewWiFiInfo: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x28 + mov r8, r0 + bl DWCi_BM_GetWiFiInfo + bl RTC_Init + add r0, sp, #0x8 + bl RTC_GetDate + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} + add r0, sp, #0x18 + bl RTC_GetTime + cmp r0, #0x0 + addne sp, sp, #0x28 + movne r0, #0x0 + ldmneia sp!, {r4-r10,pc} + 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} + bl OS_IsTickAvailable + 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 ; =UNK_020FF580 + 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 ; =UNK_020FF578 + 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 UNK_020FF580 +_02096B10: .word UNK_020FF578 diff --git a/arm9/asm/SOC_soc.s b/arm9/asm/SOC_soc.s new file mode 100644 index 00000000..506a16eb --- /dev/null +++ b/arm9/asm/SOC_soc.s @@ -0,0 +1,758 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global SOCLSocketParamUDP +SOCLSocketParamUDP: ; 0x021061C4 + .byte 0x01, 0x01, 0xC0, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 + .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x00, 0x00, 0x00 + + .global SOCLSocketParamTCP +SOCLSocketParamTCP: ; 0x021061DC + .byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, 0x00, 0x00 + .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x08, 0x0D, 0x20 + + .global SOCLSocketParamUDPSend +SOCLSocketParamUDPSend: ; 0x021061F4 + .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x06, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x20 + + .global UNK_0210620C +UNK_0210620C: ; 0x0210620C + .byte 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x00 + + .section .bss + + .global UNK_021C8D38 +UNK_021C8D38: ; 0x021C8D38 + .space 0x4 + + .global FreeFunc_SOC +FreeFunc_SOC: ; 0x021C8D3C + .space 0x4 + + .global AllocFunc_SOC +AllocFunc_SOC: ; 0x021C8D40 + .space 0x4 + + .global UNK_021C8D44 +UNK_021C8D44: ; 0x021C8D44 + .space 0x8 + + .global UNK_021C8D4C +UNK_021C8D4C: ; 0x021C8D4C + .space 0x10 + + .global UNK_021C8D5C +UNK_021C8D5C: ; 0x021C8D5C + .space 0x10 + + .global UNK_021C8D6C +UNK_021C8D6C: ; 0x021C8D6C + .space 0x38 + + .global UNK_021C8DA4 +UNK_021C8DA4: ; 0x021C8DA4 + .space 0x104 + + .text + + arm_func_start SOC_Poll +SOC_Poll: ; 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 SOCL_GetStatus + 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 SOC_U32to4U8 +SOC_U32to4U8: ; 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 SOC_InetNtoP +SOC_InetNtoP: ; 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 SOC_U32to4U8 + ldrb r1, [sp, #0x12] + ldr r2, _0209A220 ; =UNK_0210620C + 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 UNK_0210620C + + arm_func_start SOC_InetAtoN +SOC_InetAtoN: ; 0x0209A224 + stmdb sp!, {r4,lr} + mov r4, r1 + bl SOCL_InetAtoH + 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 SOC_InetNtoA +SOC_InetNtoA: ; 0x0209A27C + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _0209A2B0 ; =UNK_021C8D5C + add r1, sp, #0x8 + mov r0, #0x2 + mov r3, #0x10 + bl SOC_InetNtoP + ldr r0, _0209A2B0 ; =UNK_021C8D5C + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_0209A2B0: .word UNK_021C8D5C + + arm_func_start SOC_Cleanup +SOC_Cleanup: ; 0x0209A2B4 + ldr ip, _0209A2BC ; =SOCL_Cleanup + bx r12 + .balign 4 +_0209A2BC: .word SOCL_Cleanup + + arm_func_start SOC_Startup +SOC_Startup: ; 0x0209A2C0 + stmdb sp!, {r4-r8,lr} + ldr r1, [r0, #0xc] + ldr ip, _0209A430 ; =UNK_021C8D6C + cmp r1, #0x1 + moveq r1, #0x1 + movne r1, #0x0 + str r1, [r12, #0x0] + ldr r6, [r0, #0x10] + ldr r5, _0209A434 ; =AllocFunc_SOCL + 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 ; =FreeFunc_SOCL + 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 ; =AllocFunc_SOC + 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 ; =FreeFunc_SOC + 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 SOCL_Startup + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_0209A430: .word UNK_021C8D6C +_0209A434: .word AllocFunc_SOCL +_0209A438: .word FreeFunc_SOCL +_0209A43C: .word AllocFunc_SOC +_0209A440: .word FreeFunc_SOC + + arm_func_start FreeFunc_SOCL +FreeFunc_SOCL: ; 0x0209A444 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _0209A480 ; =FreeFunc_SOC + 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 FreeFunc_SOC + + arm_func_start AllocFunc_SOCL +AllocFunc_SOCL: ; 0x0209A484 + stmdb sp!, {r4,lr} + ldr r1, _0209A4B0 ; =AllocFunc_SOC + 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 AllocFunc_SOC + + arm_func_start SOC_Fcntl +SOC_Fcntl: ; 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 SOC_Accept +SOC_Accept: ; 0x0209A504 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + add r1, sp, #0x0 + add r2, sp, #0x4 + bl SOCL_Accept + 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 SOC_Listen +SOC_Listen: ; 0x0209A588 + ldr ip, _0209A590 ; =SOCL_Listen + bx r12 + .balign 4 +_0209A590: .word SOCL_Listen + + arm_func_start SOC_GetResolver +SOC_GetResolver: ; 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 SOCL_SetResolver + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SOC_GetHostID +SOC_GetHostID: ; 0x0209A60C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl SOCL_GetHostID + 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 SOC_GetSockName +SOC_GetSockName: ; 0x0209A650 + stmdb sp!, {r4-r6,lr} + movs r5, r0 + mov r4, r1 + mvneq r0, #0x26 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + bl SOCL_GetHostID + 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 SOC_GetHostByAddr +SOC_GetHostByAddr: ; 0x0209A6EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl SOCL_Resolve + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, _0209A7A4 ; =UNK_021C8DA4 + ldr r2, _0209A7A8 ; =0x00000101 + mov r1, #0x0 + bl MI_CpuFill8 + ldr r0, _0209A7A4 ; =UNK_021C8DA4 + 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 ; =UNK_021C8DA4 + ldr r0, _0209A7AC ; =UNK_021C8D4C + ldr ip, _0209A7B0 ; =UNK_021C8D44 + mov r4, #0x0 + ldr r2, _0209A7B4 ; =UNK_021C8D38 + 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 UNK_021C8DA4 ; entName +_0209A7A8: .word 0x00000101 +_0209A7AC: .word UNK_021C8D4C ; hostent +_0209A7B0: .word UNK_021C8D44 ; hostAddrList +_0209A7B4: .word UNK_021C8D38 ; hostip + + arm_func_start SOC_Close +SOC_Close: ; 0x0209A7B8 + ldr ip, _0209A7C0 ; =SOCL_Close + bx r12 + .balign 4 +_0209A7C0: .word SOCL_Close + + arm_func_start SOC_Shutdown +SOC_Shutdown: ; 0x0209A7C4 + ldr ip, _0209A7CC ; =SOCL_Shutdown + bx r12 + .balign 4 +_0209A7CC: .word SOCL_Shutdown + + arm_func_start SOC_SendTo +SOC_SendTo: ; 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 SOCL_WriteTo + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start SOC_Send +SOC_Send: ; 0x0209A858 + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r3, [sp, #0x4] + mov r3, r12 + bl SOCL_WriteTo + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + + arm_func_start SOC_RecvFrom +SOC_RecvFrom: ; 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 SOCLi_ReadFrom + 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 SOC_Read +SOC_Read: ; 0x0209A91C + stmdb sp!, {lr} + sub sp, sp, #0xc + mov r12, #0x0 + str r12, [sp, #0x0] + str r3, [sp, #0x4] + mov r3, r12 + bl SOCLi_ReadFrom + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + + arm_func_start SOC_Connect +SOC_Connect: ; 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 SOCL_Connect + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SOC_Bind +SOC_Bind: ; 0x0209A9A4 + ldrh r1, [r1, #0x2] + ldr ip, _0209A9CC ; =SOCL_Bind + 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 SOCL_Bind + + arm_func_start SOC_Socket +SOC_Socket: ; 0x0209A9D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x1 + bne _0209A9F4 + ldr r0, _0209AA08 ; =SOCLSocketParamTCP + bl SOCL_CreateSocket + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_0209A9F4: + ldr r0, _0209AA0C ; =SOCLSocketParamUDP + bl SOCL_CreateSocket + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_0209AA08: .word SOCLSocketParamTCP +_0209AA0C: .word SOCLSocketParamUDP diff --git a/arm9/asm/SOC_socl_bind.s b/arm9/asm/SOC_socl_bind.s new file mode 100644 index 00000000..4f9c54e5 --- /dev/null +++ b/arm9/asm/SOC_socl_bind.s @@ -0,0 +1,198 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .balign 4, 0 + .global SOCLiResultCodeInConnecting +SOCLiResultCodeInConnecting: ; 0x021061C0 + .word -26 + + .text + + arm_func_start SOCLi_BindCallBack +SOCLi_BindCallBack: ; 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 CPS_SocPingMode + mov r0, r5 + str r0, [r6, #0xf8] + ldrsb r0, [r7, #0xc] + cmp r0, #0x0 + beq _02098310 + cmp r0, #0x4 + bne _02098318 +_02098310: + bl CPS_TcpConnect + mov r5, r0 +_02098318: + add r0, r6, #0xe0 + bl OS_UnlockMutex + 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 SOCLi_ExecBindCommand +SOCLi_ExecBindCommand: ; 0x02098350 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrsb r2, [r4, #0x72] + ldr r0, _020983AC ; =SOCLi_BindCallBack + mov r1, r4 + bl SOCLi_CreateCommandPacket + 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 SOCLi_ExecCommandPacketInRecvPipe + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020983AC: .word SOCLi_BindCallBack + + arm_func_start SOCL_Connect +SOCL_Connect: ; 0x020983B0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SOCL_SocketIsInvalid + 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 ; =SOCLiResultCodeInConnecting + ldreq r0, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_02098478: + strh r5, [r6, #0x76] + mov r0, r6 + str r4, [r6, #0x78] + bl SOCLi_ExecBindCommand + 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 SOCLiResultCodeInConnecting + + arm_func_start SOCL_Bind +SOCL_Bind: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + mov r5, r1 + bl SOCL_SocketIsInvalid + 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 SOCLi_ExecBindCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr diff --git a/arm9/asm/SOC_socl_cleanup.s b/arm9/asm/SOC_socl_cleanup.s new file mode 100644 index 00000000..5eb8b949 --- /dev/null +++ b/arm9/asm/SOC_socl_cleanup.s @@ -0,0 +1,283 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCL_CalmDown +SOCL_CalmDown: ; 0x02099A94 + stmdb sp!, {r4,lr} + ldr r0, _02099B10 ; =SOCLiUDPSendSocket + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _02099AE8 + bl SOCL_CloseAll + movs r4, r0 + bne _02099AE0 + ldr r0, _02099B10 ; =SOCLiUDPSendSocket + ldr r0, [r0, #0x0] + bl SOCL_Close + ldr r0, _02099B10 ; =SOCLiUDPSendSocket + ldr r0, [r0, #0x0] + bl SOCL_IsClosed + cmp r0, #0x0 + ldrne r0, _02099B10 ; =SOCLiUDPSendSocket + movne r1, #0x0 + strne r1, [r0, #0x0] + mvn r4, #0x19 +_02099AE0: + bl SOCLi_TrashSocket + b _02099B04 +_02099AE8: + bl CPS_CalmDown + cmp r0, #0x0 + mvneq r4, #0x19 + beq _02099B04 + mov r0, #0x0 + bl WCM_SetRecvDCFCallback + mov r4, #0x0 +_02099B04: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02099B10: .word SOCLiUDPSendSocket + + arm_func_start SOCL_CloseAll +SOCL_CloseAll: ; 0x02099B14 + stmdb sp!, {r4-r6,lr} + ldr r4, _02099BBC ; =SOCLiUDPSendSocket + ldr r5, _02099BC0 ; =SOCLiSocketList +_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 + cmp r6, #0x0 + beq _02099B6C + mov r0, r6 + bl SOCL_Close + b _02099B20 +_02099B6C: + ldr r0, _02099BC0 ; =SOCLiSocketList + ldr r1, [r0, #0x0] + cmp r1, #0x0 + beq _02099B98 + ldr r0, _02099BBC ; =SOCLiUDPSendSocket + ldr r0, [r0, #0x0] + cmp r1, r0 + bne _02099BB0 + ldr r0, [r1, #0x7c] + cmp r0, #0x0 + bne _02099BB0 +_02099B98: + ldr r0, _02099BC4 ; =SOCLiSocketListTrash + 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 SOCLiUDPSendSocket +_02099BC0: .word SOCLiSocketList +_02099BC4: .word SOCLiSocketListTrash + + arm_func_start SOCL_Cleanup +SOCL_Cleanup: ; 0x02099BC8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _02099C68 ; =SOCLiRequestedIP + ldr r0, [r1, #0x0] + cmp r0, #0x0 + ldreq r0, _02099C6C ; =CPSMyIp + ldreq r0, [r0, #0x0] + streq r0, [r1, #0x0] + bl SOCL_CalmDown + mvn r4, #0x19 + cmp r0, r4 + bne _02099C10 + mov r5, #0x64 +_02099BFC: + mov r0, r5 + bl OS_Sleep + bl SOCL_CalmDown + cmp r0, r4 + beq _02099BFC +_02099C10: + bl SOCLi_CleanupCommandPacketQueue + movs r4, r0 + bmi _02099C58 + bl CPS_Cleanup + mov r0, #0x0 + bl CPS_SetScavengerCallback + ldr r0, _02099C70 ; =SOCLiConfigPtr + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x28] + cmp r0, #0x0 + bne _02099C4C + ldr r0, _02099C74 ; =SOCLiCPSConfig + ldr r1, [r1, #0x1c] + ldr r0, [r0, #0x1c] + blx r1 +_02099C4C: + ldr r0, _02099C70 ; =SOCLiConfigPtr + 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 SOCLiRequestedIP +_02099C6C: .word CPSMyIp +_02099C70: .word SOCLiConfigPtr +_02099C74: .word SOCLiCPSConfig + + arm_func_start SOCL_GetHostID +SOCL_GetHostID: ; 02099C78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _02099CE0 ; =CPSMyIp + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _02099CBC + ldr r0, _02099CE4 ; =SOCLiDhcpState + 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 ; =SOCLiRequestedIP + ldr r1, [r0, #0x0] + cmp r1, #0x0 + streq r2, [r0, #0x0] +_02099CCC: + ldr r0, _02099CE0 ; =CPSMyIp + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02099CE0: .word CPSMyIp +_02099CE4: .word SOCLiDhcpState +_02099CE8: .word SOCLiRequestedIP + + arm_func_start SOCL_SetResolver +SOCL_SetResolver: ; 0x02099CEC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl SOCL_GetHostID + cmp r0, #0x0 + ldrne r1, _02099D24 ; =CPSDnsIp + 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 CPSDnsIp + + arm_func_start SOCL_InetAtoH +SOCL_InetAtoH: ; 0x022099D28 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _02099D84 ; =CPSDnsIp + 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 CPS_Resolve + ldr r1, _02099D84 ; =CPSDnsIp + 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 CPSDnsIp + + arm_func_start SOCL_Resolve +SOCL_Resolve: ; 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 ; =SOCLiConfigPtr + 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 CPS_SocRegister + mov r0, r4 + bl CPS_Resolve + mov r4, r0 + bl CPS_SocUnRegister + ldr r1, _02099E34 ; =SOCLiConfigPtr + 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 SOCLiConfigPtr +_02099E38: .word 0x00000B68 +_02099E3C: .word 0x00000466 diff --git a/arm9/asm/SOC_socl_close.s b/arm9/asm/SOC_socl_close.s new file mode 100644 index 00000000..b15b611d --- /dev/null +++ b/arm9/asm/SOC_socl_close.s @@ -0,0 +1,288 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_TrashSocket +SOCLi_TrashSocket: ; 0x020996C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r4, _02099704 ; =SOCLiSocketListTrash + mov r5, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + beq _020996F0 +_020996E0: + bl SOCLi_CleanupSocket + 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 SOCLiSocketListTrash + + arm_func_start SOCLi_FreeCommandPipe +SOCLi_FreeCommandPipe: ; 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 + 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 SOCLi_FreeCommandPacket +_02099784: + mov r0, r8 + mov r1, r4 + mov r2, r5 + bl OS_ReceiveMessage + 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 SOCLi_CleanupSocket +SOCLi_CleanupSocket: + 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 SOCLi_FreeCommandPipe + ldr r0, [r4, #0x64] + bl SOCLi_FreeCommandPipe + b _02099884 +_02099804: + cmp r1, #0x1 + bne _02099874 + ldr r0, [r4, #0x64] + ldr r0, [r0, #0x104] + cmp r0, #0x0 + beq _0209983C + ldr r5, _020998C0 ; =SOCLiConfigPtr +_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 SOCLi_FreeCommandPipe + b _02099884 +_02099874: + cmp r1, #0x2 + bne _02099884 + ldr r0, [r4, #0x68] + bl SOCLi_FreeCommandPipe +_02099884: + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r4 + bl SOCLi_SocketUnregister + mov r0, r4 + bl SOCLi_SocketUnregisterTrash + ldr r1, _020998C0 ; =SOCLiConfigPtr + 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 SOCLiConfigPtr + + arm_func_start SOCLi_CloseCallBack +SOCLi_CloseCallBack: ; 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 CPS_TcpShutdown + bl CPS_TcpClose + bl CPS_SocRelease +_02099908: + bl CPS_SocUnRegister + 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 SOCLi_SendCommandPacket + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r4 + bl SOCLi_SocketUnregister + mov r0, r4 + bl SOCLi_SocketRegisterTrash + 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 SOCL_Close +SOCL_Close: ; 0x0209996C + stmdb sp!, {r4,lr} + mov r4, r0 + cmp r4, #0x0 + mvnle r0, #0x1b + ldmleia sp!, {r4,lr} + bxle lr + bl SOCL_SocketIsInTrash + cmp r0, #0x0 + mvnne r0, #0x19 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl SOCL_SocketIsInvalid + 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 SOCLi_SendCommandPacket +_02099A24: + ldr r0, _02099A54 ; =SOCLi_CloseCallBack + mov r1, r4 + mov r2, #0x1 + bl SOCLi_CreateCommandPacket + mov r1, r0 + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x8] + bl SOCLi_SendCommandPacketToCtrlPipe + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02099A54: .word SOCLi_CloseCallBack + + arm_func_start SOCL_IsClosed +SOCL_IsClosed: + stmdb sp!, {r4,lr} + movs r4, r0 + bmi _02099A88 + bl SOCL_SocketIsInvalid + cmp r0, #0x0 + beq _02099A88 + mov r0, r4 + bl SOCL_SocketIsInTrash + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr +_02099A88: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr diff --git a/arm9/asm/SOC_socl_command.s b/arm9/asm/SOC_socl_command.s new file mode 100644 index 00000000..693af250 --- /dev/null +++ b/arm9/asm/SOC_socl_command.s @@ -0,0 +1,300 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global SOCLiCommandPackets +SOCLiCommandPackets: ; 0x021C8D04 + .space 0x4 + + .global SOCLiCommandPacketQueue +SOCLiCommandPacketQueue: ; 0x021C8D08 + .space 0x20 + + .text + + arm_func_start SOCLi_CommandPacketHandler +SOCLi_CommandPacketHandler: ; 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 + 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 + 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 SOCLi_FreeCommandPacket + bl OS_EnableScheduler + mov r0, r8 + bl OS_RestoreInterrupts + b _02097890 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start SOCLi_ExecCommandPacketInCtrlPipe +SOCLi_ExecCommandPacketInCtrlPipe: ; 0x0209792C + stmdb sp!, {r4,lr} + mov r4, r1 + bl SOCLi_GetCtrlPipe + mov r1, r4 + bl SOCLi_ExecCommandPacket + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SOCLi_ExecCommandPacketInSendPipe +SOCLi_ExecCommandPacketInSendPipe: + ldr ip, _02097954 ; =SOCLi_ExecCommandPacket + ldr r0, [r0, #0x68] + bx r12 + .balign 4 +_02097954: .word SOCLi_ExecCommandPacket + + arm_func_start SOCLi_ExecCommandPacketInRecvPipe +SOCLi_ExecCommandPacketInRecvPipe: ; 0x02097958 + ldr ip, _02097964 ; =SOCLi_ExecCommandPacket + ldr r0, [r0, #0x64] + bx r12 + .balign 4 +_02097964: .word SOCLi_ExecCommandPacket + + arm_func_start SOCLi_ExecCommandPacket +SOCLi_ExecCommandPacket: ; 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 SOCLi_SendCommandPacket + 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 SOCLi_SendCommandPacket + str r0, [sp, #0x0] +_020979CC: + ldr r0, [sp, #0x0] + add sp, sp, #0x2c + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SOCLi_SendCommandPacketToCtrlPipe +SOCLi_SendCommandPacketToCtrlPipe: + stmdb sp!, {r4,lr} + mov r4, r1 + bl SOCLi_GetCtrlPipe + mov r1, r4 + bl SOCLi_SendCommandPacket + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SOCLi_SendCommandPacket +SOCLi_SendCommandPacket: + 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 SOCLi_FreeCommandPacket +_02097A38: + cmp r4, #0x0 + movne r0, #0x0 + mvneq r0, #0x29 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SOCLi_GetCtrlPipe +SOCLi_GetCtrlPipe: ; 0x02097A50 + ldr r1, [r0, #0x64] + cmp r1, #0x0 + ldreq r1, [r0, #0x68] + mov r0, r1 + bx lr + + arm_func_start SOCLi_FreeCommandPacket +SOCLi_FreeCommandPacket: + stmdb sp!, {lr} + sub sp, sp, #0x4 + movs r1, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, _02097A94 ; =SOCLiCommandPacketQueue + mov r2, #0x0 + bl OS_SendMessage + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097A94: .word SOCLiCommandPacketQueue + + arm_func_start SOCLi_CreateCommandPacket +SOCLi_CreateCommandPacket: ; 0x02097A98 + stmdb sp!, {r4-r6,lr} + mov r4, r2 + mov r6, r0 + mov r0, r4 + mov r5, r1 + bl SOCLi_AllocCommandPacket + 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 SOCLi_AllocCommandPacket +SOCLi_AllocCommandPacket: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r0 + ldr r0, _02097B10 ; =SOCLiCommandPacketQueue + add r1, sp, #0x0 + bl OS_ReceiveMessage + cmp r0, #0x0 + ldrne r0, [sp, #0x0] + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097B10: .word SOCLiCommandPacketQueue + + arm_func_start SOCLi_CleanupCommandPacketQueue +SOCLi_CleanupCommandPacketQueue: ; 0x02097B14 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _02097B6C ; =SOCLiCommandPacketQueue + 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 ; =SOCLiConfigPtr + ldr r1, _02097B74 ; =SOCLiCommandPackets + ldr r2, [r0, #0x0] + ldr r0, [r1, #0x0] + ldr r1, [r2, #0x1c] + blx r1 + ldr r1, _02097B74 ; =SOCLiCommandPackets + mov r0, #0x0 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02097B6C: .word SOCLiCommandPacketQueue +_02097B70: .word SOCLiConfigPtr +_02097B74: .word SOCLiCommandPackets + + arm_func_start SOCLi_StartupCommandPacketQueue +SOCLi_StartupCommandPacketQueue: ; 0x02097B78 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r0, #0x2c + mul r1, r4, r0 + ldr r0, _02097C08 ; =SOCLiConfigPtr + 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 ; =SOCLiCommandPacketQueue + mov r1, r6 + mov r2, r4 + bl OS_InitMessageQueue + cmp r4, #0x0 + add r5, r6, r5 + ble _02097BF4 +_02097BDC: + mov r0, r5 + bl SOCLi_FreeCommandPacket + sub r4, r4, #0x1 + cmp r4, #0x0 + add r5, r5, #0x2c + bgt _02097BDC +_02097BF4: + ldr r1, _02097C10 ; =SOCLiCommandPackets + mov r0, #0x0 + str r6, [r1, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_02097C08: .word SOCLiConfigPtr +_02097C0C: .word SOCLiCommandPacketQueue +_02097C10: .word SOCLiCommandPackets diff --git a/arm9/asm/SOC_socl_const.s b/arm9/asm/SOC_socl_const.s new file mode 100644 index 00000000..1a4b032e --- /dev/null +++ b/arm9/asm/SOC_socl_const.s @@ -0,0 +1,2 @@ + .include "asm/macros.inc" + .include "global.inc" diff --git a/arm9/asm/SOC_socl_create.s b/arm9/asm/SOC_socl_create.s new file mode 100644 index 00000000..8f8f42b2 --- /dev/null +++ b/arm9/asm/SOC_socl_create.s @@ -0,0 +1,491 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_InitCommandPipe +SOCLi_InitCommandPipe: ; 0x02097C14 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r5, r2 + mov r7, r0 + mov r0, r5 + mov r6, r1 + bl SOCLi_GetSizeCommandPipe + 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 ; =SOCLi_CommandPacketHandler + 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 SOCLi_CommandPacketHandler + + arm_func_start SOCLi_InitSocketBuffer +SOCLi_InitSocketBuffer: ; 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 SOCLi_RoundUp4 + add r0, r4, r0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SOCLi_InitSocket +SOCLi_InitSocket: ; 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 SOCLi_InitCommandPipe + ldrh r2, [r6, #0x2] + add r1, r7, #0x3c + bl SOCLi_InitSocketBuffer + ldrh r2, [r6, #0x8] + add r1, r7, #0x50 + bl SOCLi_InitSocketBuffer + 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 ; =SOCLiUDPSendSocket + 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 SOCLi_InitCommandPipe + ldrh r2, [r6, #0x6] + add r1, r7, #0x48 + bl SOCLi_InitSocketBuffer + ldrh r2, [r6, #0xa] + add r1, r7, #0x58 + bl SOCLi_InitSocketBuffer + ldrh r2, [r6, #0xc] + add r1, r4, #0xf8 + bl SOCLi_InitSocketBuffer + 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 SOCLiUDPSendSocket + + arm_func_start SOCLi_GetSizeCommandPipe +SOCLi_GetSizeCommandPipe: ; 0x02097DC4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r0, [r5, #0x3] + mov r0, r0, lsl #0x2 + bl SOCLi_RoundUp4 + mov r4, r0 + ldrh r0, [r5, #0x0] + bl SOCLi_RoundUp4 + add r0, r4, r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SOCLi_GetSizeSocket +SOCLi_GetSizeSocket: ; 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 SOCLi_RoundUp4 + add r4, r4, r0 + ldrh r0, [r5, #0x8] + bl SOCLi_RoundUp4 + add r4, r4, r0 + add r0, r5, #0x10 + bl SOCLi_GetSizeCommandPipe + add r4, r4, r0 +_02097E38: + ldrh r0, [r5, #0x6] + cmp r0, #0x0 + beq _02097E74 + add r4, r4, #0x110 + bl SOCLi_RoundUp4 + add r4, r4, r0 + ldrh r0, [r5, #0xa] + bl SOCLi_RoundUp4 + add r4, r4, r0 + ldrh r0, [r5, #0xc] + bl SOCLi_RoundUp4 + add r4, r4, r0 + add r0, r5, #0x14 + bl SOCLi_GetSizeCommandPipe + add r4, r4, r0 +_02097E74: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start SOCLi_StartupSocket +SOCLi_StartupSocket: ; 0x02097E84 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl SOCLi_GetSizeSocket + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _02097EF4 ; =SOCLiConfigPtr + 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 SOCLi_InitSocket + mov r0, r6 + bl SOCLi_SocketRegister +_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 SOCLiConfigPtr + + arm_func_start SOCLi_CreateSocketCallBack +SOCLi_CreateSocketCallBack: ; 0x02097EF8 + stmdb sp!, {r4,lr} + ldr r4, [r0, #0x4] + mov r0, r4 + bl CPS_SocRegister + ldrsb r0, [r4, #0x73] + ldr r1, [r4, #0x68] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _02097F58 +_02097F1C: ; jump table + b _02097F30 ; case 0 + b _02097F40 ; case 1 + b _02097F54 ; case 2 + b _02097F58 ; case 3 + b _02097F30 ; case 4 +_02097F30: + add r0, r1, #0x20 + bl CPS_SocDup + bl CPS_SocUse + b _02097F58 +_02097F40: + bl CPS_SocUse + bl CPS_SocDatagramMode + ldr r0, _02097F6C ; =SOCLi_UdpRecvCallback + bl CPS_SetUdpCallback + b _02097F58 +_02097F54: + bl CPS_SocDatagramMode +_02097F58: + mov r0, #0x1 + strh r0, [r4, #0x70] + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097F6C: .word SOCLi_UdpRecvCallback + + arm_func_start SOCL_CreateSocket +SOCL_CreateSocket: ; 0x02097F70 + stmdb sp!, {r4,lr} + bl SOCLi_StartupSocket + movs r4, r0 + mvneq r0, #0x30 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _02097FB0 ; =SOCLi_CreateSocketCallBack + mov r1, r4 + mov r2, #0x1 + bl SOCLi_CreateCommandPacket + mov r1, r0 + mov r0, r4 + bl SOCLi_ExecCommandPacketInCtrlPipe + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097FB0: .word SOCLi_CreateSocketCallBack + + arm_func_start SOCLi_ListenAcceptCallBack +SOCLi_ListenAcceptCallBack: ; 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 CPS_SocPingMode + bl CPS_TcpListen + mov r2, #0x0 + add r0, sp, #0x0 + add r1, sp, #0x4 + str r2, [r5, #0xf8] + bl CPS_SocWho + 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 + mov r0, #0x0 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SOCL_ListenAccept +SOCL_ListenAccept: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SOCL_SocketIsInvalid + 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 ; =SOCLi_ListenAcceptCallBack + mov r1, r6 + bl SOCLi_CreateCommandPacket + 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 SOCLi_ExecCommandPacketInRecvPipe + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_0209811C: .word SOCLi_ListenAcceptCallBack + + arm_func_start SOCL_Accept +SOCL_Accept: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl SOCL_SocketIsInvalid + 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 ; =SOCLSocketParamTCP + bl SOCL_CreateSocket + movs r7, r0 + addmi sp, sp, #0x4 + ldmmiia sp!, {r4-r7,lr} + bxmi lr + ldrh r1, [r6, #0x74] + bl SOCL_Bind + cmp r0, #0x0 + addlt sp, sp, #0x4 + ldmltia sp!, {r4-r7,lr} + bxlt lr + mov r0, r7 + mov r1, r5 + mov r2, r4 + bl SOCL_ListenAccept + cmp r0, #0x0 + movge r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02098228: .word SOCLSocketParamTCP + + arm_func_start SOCL_Listen +SOCL_Listen: ; 0x0209822C + stmdb sp!, {r4,lr} + mov r4, r0 + bl SOCL_SocketIsInvalid + 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 diff --git a/arm9/asm/SOC_socl_list.s b/arm9/asm/SOC_socl_list.s new file mode 100644 index 00000000..08f780d1 --- /dev/null +++ b/arm9/asm/SOC_socl_list.s @@ -0,0 +1,128 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global SOCLiSocketList +SOCLiSocketList: ; 0x021C8D30 + .space 0x4 + + .global SOCLiSocketListTrash +SOCLiSocketListTrash: ; 0x021C8D34 + .space 0x4 + + .text + + arm_func_start SOCL_SocketIsInTrash +SOCL_SocketIsInTrash: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, r0 + ldr r0, _02099FA4 ; =SOCLiSocketListTrash + bl SOCLi_SocketGetNextPtr + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_02099FA4: .word SOCLiSocketListTrash + + arm_func_start SOCL_SocketIsInvalid +SOCL_SocketIsInvalid: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, r0 + cmp r1, #0x0 + ble _02099FCC + ldr r0, _02099FEC ; =SOCLiSocketList + bl SOCLi_SocketGetNextPtr + 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 SOCLiSocketList + + arm_func_start SOCLi_SocketUnregisterTrash +SOCLi_SocketUnregisterTrash: ; 0x02099FF0 + ldr ip, _0209A000 ; =SOCLi_SocketUnregisterList + mov r1, r0 + ldr r0, _0209A004 ; =SOCLiSocketListTrash + bx r12 + .balign 4 +_0209A000: .word SOCLi_SocketUnregisterList +_0209A004: .word SOCLiSocketListTrash + + arm_func_start SOCLi_SocketGetNextPtr +SOCLi_SocketGetNextPtr: + 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 SOCLi_SocketUnregisterList +SOCLi_SocketUnregisterList: ; 0x0209A034 + stmdb sp!, {r4,lr} + mov r4, r1 + bl SOCLi_SocketGetNextPtr + cmp r0, #0x0 + ldrne r1, [r4, #0x7c] + strne r1, [r0, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start SOCLi_SocketUnregister +SOCLi_SocketUnregister: ; 0x0209A054 + ldr ip, _0209A064 ; =SOCLi_SocketUnregisterList + mov r1, r0 + ldr r0, _0209A068 ; =SOCLiSocketList + bx r12 + .balign 4 +_0209A064: .word SOCLi_SocketUnregisterList +_0209A068: .word SOCLiSocketList + + arm_func_start SOCLi_SocketRegisterTrash +SOCLi_SocketRegisterTrash: ; 0x0209A06C + ldr ip, _0209A07C ; =SOCLi_SocketRegisterList + mov r1, r0 + ldr r0, _0209A080 ; =SOCLiSocketListTrash + bx r12 + .balign 4 +_0209A07C: .word SOCLi_SocketRegisterList +_0209A080: .word SOCLiSocketListTrash + + arm_func_start SOCLi_SocketRegisterList +SOCLi_SocketRegisterList: ; 0x0209A084 + ldr r2, [r0, #0x0] + str r2, [r1, #0x7c] + str r1, [r0, #0x0] + bx lr + + arm_func_start SOCLi_SocketRegister +SOCLi_SocketRegister: ; 0x0209A094 + ldr ip, _0209A0A4 ; =SOCLi_SocketRegisterList + mov r1, r0 + ldr r0, _0209A0A8 ; =SOCLiSocketList + bx r12 + .balign 4 +_0209A0A4: .word SOCLi_SocketRegisterList +_0209A0A8: .word SOCLiSocketList diff --git a/arm9/asm/SOC_socl_misc.s b/arm9/asm/SOC_socl_misc.s new file mode 100644 index 00000000..91330d45 --- /dev/null +++ b/arm9/asm/SOC_socl_misc.s @@ -0,0 +1,10 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_RoundUp4 +SOCLi_RoundUp4: + add r0, r0, #0x3 + bic r0, r0, #0x3 + bx lr diff --git a/arm9/asm/SOC_socl_poll.s b/arm9/asm/SOC_socl_poll.s new file mode 100644 index 00000000..811fbdda --- /dev/null +++ b/arm9/asm/SOC_socl_poll.s @@ -0,0 +1,93 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_GetReadBufferOccpiedSize +SOCLi_GetReadBufferOccpiedSize: + 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 SOCL_GetStatus +SOCL_GetStatus: + stmdb sp!, {r4-r6,lr} + mov r4, #0x0 + mov r5, r0 + bl SOCL_SocketIsInvalid + 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 SOCLi_GetReadBufferOccpiedSize + cmp r0, #0x0 + mov r0, r5 + orrgt r4, r4, #0x1 + bl SOCLi_GetWriteBufferFreeSize + 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 diff --git a/arm9/asm/SOC_socl_read.s b/arm9/asm/SOC_socl_read.s new file mode 100644 index 00000000..9bf5aa69 --- /dev/null +++ b/arm9/asm/SOC_socl_read.s @@ -0,0 +1,1203 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global SOCLi_CheckCount +SOCLi_CheckCount: ; 0x021C8D28 + .space 0x8 + + .text + + arm_func_start SOCLi_UdpRecvCallback +SOCLi_UdpRecvCallback: ; 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 ; =SOCLiConfigPtr + 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 ; =SOCLi_CheckCount + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + b _02098628 +_02098618: + ldr r0, _0209866C ; =SOCLi_CheckCount + 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 SOCLiConfigPtr +_0209866C: .word SOCLi_CheckCount + + arm_func_start SOCLi_ReadUdpBuffer +SOCLi_ReadUdpBuffer: ; 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 SOCL_SocketIsInvalid + 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 ; =SOCLiConfigPtr + 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 SOCLiConfigPtr + + arm_func_start SOCLi_ConsumeCPSBuffer +SOCLi_ConsumeCPSBuffer: ; 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 CPS_SocConsume +_020987EC: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start SOCLi_ConsumeCallBack +SOCLi_ConsumeCallBack: ; 0x02098800 + ldr ip, _0209880C ; =SOCLi_ConsumeCPSBuffer + ldr r0, [r0, #0x4] + bx r12 + .balign 4 +_0209880C: .word SOCLi_ConsumeCPSBuffer + + arm_func_start SOCLi_ConsumeBuffer +SOCLi_ConsumeBuffer: + 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 ; =SOCLi_ConsumeCallBack + mov r1, r4 + mov r2, #0x0 + bl SOCLi_CreateCommandPacket + movs r1, r0 + mvneq r0, #0x20 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, r4 + bl SOCLi_ExecCommandPacketInRecvPipe + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02098864: .word SOCLi_ConsumeCallBack + + arm_func_start SOCLi_ReadCallBack +SOCLi_ReadCallBack: ; 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 CPS_SocRead + 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 CPS_SocConsume + 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 SOCLi_CopyCPSBuffer + 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 SOCLi_ConsumeCPSBuffer +_020989AC: + mov r0, r4 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start SOCLi_ExecReadCommand +SOCLi_ExecReadCommand: ; 0x020989BC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + ldr r0, _02098A10 ; =SOCLi_ReadCallBack + mov r1, r7 + mov r2, #0x1 + mov r4, r3 + bl SOCLi_CreateCommandPacket + 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 SOCLi_ExecCommandPacketInRecvPipe + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_02098A10: .word SOCLi_ReadCallBack + + arm_func_start SOCLi_ReadCPSBuffer +SOCLi_ReadCPSBuffer: + 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 SOCLi_CopyCPSBuffer +SOCLi_CopyCPSBuffer: ; 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 SOCLi_ReadCPSBuffer + 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 SOCLi_ReadBuffer +SOCLi_ReadBuffer: ; 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 SOCLi_ExecReadCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_02098BF0: + ldr r12, [sp, #0x18] + str r12, [sp, #0x0] + bl SOCLi_CopyCPSBuffer + 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 SOCLi_ExecReadCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start SOCLi_ReadAndConsumeBuffer +SOCLi_ReadAndConsumeBuffer: ; 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 SOCLi_ReadUdpBuffer + 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 SOCLi_ReadBuffer + movs r8, r0 + bmi _02098CDC + mov r0, r7 + bl SOCLi_ConsumeBuffer +_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 SOCLi_ReadFrom +SOCLi_ReadFrom: + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl SOCL_SocketIsInvalid + 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 + 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 SOCLi_ReadAndConsumeBuffer + mov r4, r0 + add r0, r5, #0xe0 + bl OS_UnlockMutex + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r9,lr} + bx lr + +; libsoc.a:socl_write.a + + arm_func_start SOCLi_MemCpy +SOCLi_MemCpy: ; 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 SOCLi_GetOptimumSendBufLen +SOCLi_GetOptimumSendBufLen: ; 0x02098F08 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _02098FBC ; =OSi_ThreadInfo + mov r4, r0 + ldr r0, [r1, #0x4] + ldr r5, [r0, #0xa4] + bl OS_DisableInterrupts + 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 ; =SOCLiCPSConfig + 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 ; =SOCLiCPSConfig + ldr r1, [r1, #0x24] + mov r5, r1, lsl #0x1 + b _02098F80 +_02098F74: + ldr r1, _02098FC0 ; =SOCLiCPSConfig + ldr r1, [r1, #0x24] + mov r5, r1, lsl #0x1 +_02098F80: + bl OS_RestoreInterrupts + cmp r5, #0x0 + ble _02098FAC + mov r0, r4 + mov r1, r5 + bl _s32_div_f + 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 OSi_ThreadInfo +_02098FC0: .word SOCLiCPSConfig + + arm_func_start SOCLi_WriteCallBack +SOCLi_WriteCallBack: ; 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 CPS_SocPingMode +_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 SOCLi_GetOptimumSendBufLen + 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 SOCLi_MemCpy + mov r1, r0 + cmp r1, #0x0 + ble _020990E0 + mov r0, r5 + bl CPS_SocWrite + 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 SOCLi_ExecWriteCommand +SOCLi_ExecWriteCommand: + 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 ; =SOCLi_WriteCallBack + mov r7, r3 + bl SOCLi_CreateCommandPacket + 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 CPS_SocGetEport + 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 SOCLi_ExecCommandPacketInSendPipe + 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 SOCLi_WriteCallBack + + arm_func_start SOCLi_GetWriteBufferFreeSize +SOCLi_GetWriteBufferFreeSize: + 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 SOCLi_AllocWriteBuffer +SOCLi_AllocWriteBuffer: ; 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 SOCLi_GetWriteBufferFreeSize + 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 SOCLi_WriteBuffer +SOCLi_WriteBuffer: ; 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 SOCLi_AllocWriteBuffer + 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 SOCLi_ExecWriteCommand + 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 SOCL_WriteTo +SOCL_WriteTo: ; 0x02099470 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl SOCL_SocketIsInvalid + 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 + 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 SOCLi_WriteBuffer + mov r5, r0 + add r0, r4, #0xe0 + bl OS_UnlockMutex + mov r0, r5 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr diff --git a/arm9/asm/SOC_socl_shutdown.s b/arm9/asm/SOC_socl_shutdown.s new file mode 100644 index 00000000..f1f43e90 --- /dev/null +++ b/arm9/asm/SOC_socl_shutdown.s @@ -0,0 +1,90 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_ShutdownCallBack +SOCLi_ShutdownCallBack: ; 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 CPS_TcpShutdown +_020995CC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SOCL_Shutdown +SOCL_Shutdown: ; 0x020995DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl SOCL_SocketIsInvalid + 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 ; =SOCLi_ShutdownCallBack + bl SOCLi_CreateCommandPacket + movs r1, r0 + addeq sp, sp, #0x4 + mvneq r0, #0x20 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x10c] + bl SOCLi_ExecCommandPacketInSendPipe + 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 SOCLi_ShutdownCallBack diff --git a/arm9/asm/SOC_socl_ssl.s b/arm9/asm/SOC_socl_ssl.s new file mode 100644 index 00000000..99848655 --- /dev/null +++ b/arm9/asm/SOC_socl_ssl.s @@ -0,0 +1,110 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SOCLi_EnableSslCallBack +SOCLi_EnableSslCallBack: ; 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 CPS_SetSsl + mov r0, #0x4 + strb r0, [r6, #0x73] + b _0209AA68 +_0209AA54: + mov r0, #0x0 + strb r0, [r6, #0x73] + bl CPS_SetSsl + mov r0, #0x0 + str r0, [r4, #0xc] +_0209AA68: + add r0, r5, #0xe0 + bl OS_UnlockMutex + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start SOCLi_ExecEnableSslCommand +SOCLi_ExecEnableSslCommand: ; 0x0209AA80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + ldr r0, _0209AACC ; =SOCLi_EnableSslCallBack + mov r1, r5 + mov r2, #0x1 + bl SOCLi_CreateCommandPacket + 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 SOCLi_ExecCommandPacketInRecvPipe + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_0209AACC: .word SOCLi_EnableSslCallBack + + arm_func_start SOCL_EnableSsl +SOCL_EnableSsl: ; 0x0209AAD0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl SOCL_SocketIsInvalid + 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 SOCLi_ExecEnableSslCommand + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr diff --git a/arm9/asm/SOC_socl_startup.s b/arm9/asm/SOC_socl_startup.s new file mode 100644 index 00000000..61147b6a --- /dev/null +++ b/arm9/asm/SOC_socl_startup.s @@ -0,0 +1,236 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global SOCLiConfigPtr +SOCLiConfigPtr: ; 0x021C8CC0 + .space 0x4 + + .global SOCLiYieldWait +SOCLiYieldWait: ; 0x021C8CC4 + .space 0x4 + + .global SOCLiRequestedIP +SOCLiRequestedIP: ; 0x021C8CC8 + .space 0x4 + + .global SOCLiDhcpState +SOCLiDhcpState: ; 0x021C8CCC + .space 0x4 + + .global SOCLiUDPSendSocket +SOCLiUDPSendSocket: ; 0x021C8CD0 + .space 0x4 + + .global SOCLiCPSConfig +SOCLiCPSConfig: ; 0x021C8CD4 + .space 0x30 + + .text + + arm_func_start SOCL_LinkIsOn +SOCL_LinkIsOn: ; 0x020975B4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCM_GetApMacAddress + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start SOCLi_DhcpTimeout +SOCLi_DhcpTimeout: ; 0x020975D8 + ldr r0, _020975EC ; =SOCLiDhcpState + ldr r1, [r0, #0x0] + orr r1, r1, #0x2 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020975EC: .word SOCLiDhcpState + + arm_func_start SOCLi_SetMyIP +SOCLi_SetMyIP: ; 0x020975F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _02097654 ; =SOCLiConfigPtr + ldr r0, _02097658 ; =SOCLiDhcpState + ldr lr, [r1, #0x0] + ldr r3, [r0, #0x0] + ldr r12, [lr, #0x4] + ldr r2, _0209765C ; =CPSMyIp + ldr r1, _02097660 ; =CPSNetMask + str r12, [r2, #0x0] + ldr r12, [lr, #0x8] + ldr r2, _02097664 ; =CPSGatewayIp + str r12, [r1, #0x0] + ldr r12, [lr, #0xc] + ldr r1, _02097668 ; =CPSDnsIp + 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 SOCLiConfigPtr +_02097658: .word SOCLiDhcpState +_0209765C: .word CPSMyIp +_02097660: .word CPSNetMask +_02097664: .word CPSGatewayIp +_02097668: .word CPSDnsIp + + arm_func_start SOCLi_StartupCPS +SOCLi_StartupCPS: ; 0x0209766C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020977C0 ; =SOCLiConfigPtr + ldr r5, _020977C4 ; =SOCLiCPSConfig + ldr r4, [r0, #0x0] + mov r0, r5 + mov r1, #0x0 + mov r2, #0x30 + bl MI_CpuFill8 + ldr r0, _020977C8 ; =SOCLiYieldWait + ldr r2, [r4, #0x18] + mov r1, r5 + str r2, [r1, #0x4] + ldr r12, [r4, #0x1c] + mov r2, #0x0 + ldr r3, _020977CC ; =SOCL_LinkIsOn + 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 ; =SOCLiConfigPtr + 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 ; =SOCLSocketParamTCP + mov r3, r0, asr #0x1 + ldr r0, _020977D4 ; =CPSMyIp + 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 ; =SOCLiDhcpState + mov r1, #0x1 + str r1, [r0, #0x0] + ldr r1, _020977DC ; =SOCLi_DhcpTimeout + str r2, [r5, #0x0] + ldr r0, _020977E0 ; =SOCLiRequestedIP + str r1, [r5, #0xc] + ldr r0, [r0, #0x0] + str r0, [r5, #0x28] + b _0209778C +_02097774: + ldr r0, _020977D8 ; =SOCLiDhcpState + mov r1, #0x1 + str r2, [r0, #0x0] + ldr r0, _020977E4 ; =SOCLi_SetMyIP + str r1, [r5, #0x0] + str r0, [r5, #0xc] +_0209778C: + ldr r0, [r4, #0x2c] + cmp r0, #0x0 + moveq r0, #0xb + bl CPS_SetThreadPriority + ldr r0, _020977E8 ; =CPSi_RecvCallbackFunc + bl WCM_SetRecvDCFCallback + ldr r0, _020977EC ; =SOCLi_TrashSocket + bl CPS_SetScavengerCallback + mov r0, r5 + bl CPS_Startup + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020977C0: .word SOCLiConfigPtr +_020977C4: .word SOCLiCPSConfig +_020977C8: .word SOCLiYieldWait +_020977CC: .word SOCL_LinkIsOn +_020977D0: .word SOCLSocketParamTCP +_020977D4: .word CPSMyIp +_020977D8: .word SOCLiDhcpState +_020977DC: .word SOCLi_DhcpTimeout +_020977E0: .word SOCLiRequestedIP +_020977E4: .word SOCLi_SetMyIP +_020977E8: .word CPSi_RecvCallbackFunc +_020977EC: .word SOCLi_TrashSocket + + arm_func_start SOCLi_StartupSOCL +SOCLi_StartupSOCL: ; 0x020977F0 + stmdb sp!, {r4,lr} + ldr r0, _02097828 ; =SOCLiConfigPtr + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x20] + bl SOCLi_StartupCommandPacketQueue + movs r4, r0 + bmi _0209781C + ldr r0, _0209782C ; =SOCLSocketParamUDPSend + bl SOCL_CreateSocket + ldr r1, _02097830 ; =SOCLiUDPSendSocket + str r0, [r1, #0x0] +_0209781C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097828: .word SOCLiConfigPtr +_0209782C: .word SOCLSocketParamUDPSend +_02097830: .word SOCLiUDPSendSocket + + .extern _SDK_NintendoWiFi + + arm_func_start SOCL_Startup +SOCL_Startup: ; 0x02097834 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _02097870 ; =_SDK_NintendoWiFi + bl OSi_ReferSymbol + ldr r0, _02097874 ; =SOCLiConfigPtr + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + str r4, [r0, #0x0] + bl SOCLi_StartupCPS + bl SOCLi_StartupSOCL + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_02097870: .word _SDK_NintendoWiFi +_02097874: .word SOCLiConfigPtr diff --git a/arm9/asm/SSL_biginteger.s b/arm9/asm/SSL_biginteger.s new file mode 100644 index 00000000..56d31636 --- /dev/null +++ b/arm9/asm/SSL_biginteger.s @@ -0,0 +1,1136 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start get48bits_1 +get48bits_1: ; 0x020A4ABC + ldrh r1, [r0, #0x0] + mov r0, #0x0 + bx lr + + arm_func_start get48bits_2 +get48bits_2: ; 0x020A4AC8 + ldrh r1, [r0, #0x0] + ldrh r0, [r0, #-0x2] + mov r0, r0, lsl #0x10 + bx lr + + arm_func_start get48bits_3 +get48bits_3: ; 0x020A4AD8 + ldrh r1, [r0, #0x0] + ldrh r2, [r0, #-0x2] + ldrh r3, [r0, #-0x4] + orr r0, r3, r2, lsl #0x10 + bx lr + + arm_func_start get64bits +get64bits: ; 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 CPSi_char_from_big +CPSi_char_from_big: ; 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 CPSi_big_from_char +CPSi_big_from_char: ; 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 CPSi_big_montpower +CPSi_big_montpower: ; 0x020A4BB0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r10, r3 + mov r3, #0x16 + mul r4, r10, r3 + ldr r3, _020A4DE0 ; =CPSiAlloc + 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 count_digits + 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 CPSi_big_modinv + ldr r1, [sp, #0x1c] + mov r0, r5 + mov r2, r6 + mov r3, r10 + bl CPSi_big_mult + mov r0, r6 + mov r1, r5 + mov r2, #0x1 + mov r3, r10 + bl CPSi_big_subsmall + str r10, [sp, #0x0] + mov r0, r6 + mov r1, r6 + mov r2, r9 + mov r3, #0x0 + str r7, [sp, #0x4] + bl CPSi_big_div + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + ldr r2, [sp, #0x1c] + mov r3, r10 + bl CPSi_big_mult + ldr r1, [sp, #0x20] + str r10, [sp, #0x0] + mov r0, #0x0 + mov r2, r9 + mov r3, r1 + str r7, [sp, #0x4] + bl CPSi_big_div + str r10, [sp, #0x0] + ldr r1, [sp, #0x1c] + mov r0, #0x0 + mov r2, r9 + mov r3, r11 + str r7, [sp, #0x4] + bl CPSi_big_div + 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 CPSi_big_montmult + 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 CPSi_big_montmult +_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 CPSi_big_montmult + ldr r1, _020A4DE4 ; =CPSiFree + 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 CPSiAlloc +_020A4DE4: .word CPSiFree + + arm_func_start CPSi_big_montmult +CPSi_big_montmult: ; 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 CPSi_big_sqr + b _020A4E48 +_020A4E2C: + cmp r8, #0x0 + beq _020A4E48 + mov r0, r6 + mov r1, r9 + mov r2, r8 + mov r3, r5 + bl CPSi_big_mult +_020A4E48: + ldr r0, [sp, #0x2c] + ldr r2, [sp, #0x28] + mov r1, r6 + mov r3, r4 + bl CPSi_big_mult + 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 CPSi_big_mult + mov r0, r6 + mov r1, r6 + ldr r2, [sp, #0x30] + mov r3, r5 + bl CPSi_big_add + 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 CPSi_big_compare + 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 CPSi_big_sub + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start CPSi_big_modinv +CPSi_big_modinv: ; 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 CPSi_big_sign + 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 CPSi_big_div + 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 CPSi_big_mult + mov r0, r5 + mov r1, r6 + mov r2, r5 + mov r3, r10 + bl CPSi_big_sub + 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 CPSi_big_sign + cmp r0, #0x0 + bgt _020A4FA0 +_020A503C: + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r6 + mov r3, r10 + bl CPSi_big_add + 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 CPSi_big_div + add sp, sp, #0x14 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start CPSi_big_power +CPSi_big_power: ; 0x020A507C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r4, _020A5238 ; =CPSiAlloc + 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 count_digits + 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 CPSi_big_sqr + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r10 + bl MI_CpuCopy8 + 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 CPSi_big_div +_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 CPSi_big_mult + ldr r2, [sp, #0xc] + mov r0, r6 + mov r1, r10 + bl MI_CpuCopy8 + 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 CPSi_big_div +_020A5210: + add r5, r5, #0x1 + cmp r5, r4 + blo _020A5160 +_020A521C: + ldr r1, _020A523C ; =CPSiFree + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A5238: .word CPSiAlloc +_020A523C: .word CPSiFree + + arm_func_start CPSi_big_div +CPSi_big_div: ; 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 count_digits + mov r11, r0 + mov r0, r10 + mov r1, r9 + bl count_digits + 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 get48bits_3 + 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 get48bits_2 + 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 get48bits_1 + 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 get64bits + 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 CPSi_big_mult_small + mov r0, r4 + mov r1, r6 + mov r2, r9 + bl CPSi_big_compare + cmp r0, #0x0 + sublt r7, r7, #0x1 + blt _020A5390 + mov r0, r4 + mov r1, r4 + mov r2, r6 + mov r3, r9 + bl CPSi_big_sub + 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 CPSi_big_sqr +CPSi_big_sqr: ; 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 count_digits + 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 CPSi_big_add_part + b _020A5550 +_020A5528: + mov r0, r10 + mov r1, r4 + mov r2, r5 + mov r3, r8 + bl CPSi_big_add_part + mov r0, r10 + mov r1, r4 + mov r2, r5 + mov r3, r8 + bl CPSi_big_add_part +_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 CPSi_big_mult_small +CPSi_big_mult_small: ; 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 count_digits + 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 CPSi_big_mult +CPSi_big_mult: ; 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 count_digits + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl count_digits + 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 CPSi_big_add_part + 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 CPSi_big_add_part +CPSi_big_add_part: ; 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 CPSi_big_compare +CPSi_big_compare: + 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 CPSi_big_subsmall +CPSi_big_subsmall: ; 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 CPSi_big_sub +CPSi_big_sub: ; 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 count_digits + mov r4, r0 + mov r0, r6 + mov r1, r5 + bl count_digits + 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 CPSi_big_negate +CPSi_big_negate: ; 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 CPSi_big_add_small + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CPSi_big_add_small +CPSi_big_add_small: ; 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 CPSi_big_add +CPSi_big_add: ; 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 count_digits + mov r4, r0 + mov r0, r6 + mov r1, r5 + bl count_digits + 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 CPSi_big_sign +CPSi_big_sign: + 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 count_digits + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start count_digits +count_digits: + 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 diff --git a/arm9/asm/SSL_md5.s b/arm9/asm/SSL_md5.s new file mode 100644 index 00000000..16b6aeb4 --- /dev/null +++ b/arm9/asm/SSL_md5.s @@ -0,0 +1,454 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global itab +itab: ; 0x021062AC + .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + .byte 0x01, 0x06, 0x0B, 0x00, 0x05, 0x0A, 0x0F, 0x04, 0x09, 0x0E, 0x03, 0x08, 0x0D, 0x02, 0x07, 0x0C + .byte 0x05, 0x08, 0x0B, 0x0E, 0x01, 0x04, 0x07, 0x0A, 0x0D, 0x00, 0x03, 0x06, 0x09, 0x0C, 0x0F, 0x02 + .byte 0x00, 0x07, 0x0E, 0x05, 0x0C, 0x03, 0x0A, 0x01, 0x08, 0x0F, 0x06, 0x0D, 0x04, 0x0B, 0x02, 0x09 + + .global padding +padding: ; 0x021062EC + .byte 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global ktab +ktab: ; 0x0210632C + .byte 0x78, 0xA4, 0x6A, 0xD7, 0x56, 0xB7, 0xC7, 0xE8, 0xDB, 0x70, 0x20, 0x24, 0xEE, 0xCE, 0xBD, 0xC1 + .byte 0xAF, 0x0F, 0x7C, 0xF5, 0x2A, 0xC6, 0x87, 0x47, 0x13, 0x46, 0x30, 0xA8, 0x01, 0x95, 0x46, 0xFD + .byte 0xD8, 0x98, 0x80, 0x69, 0xAF, 0xF7, 0x44, 0x8B, 0xB1, 0x5B, 0xFF, 0xFF, 0xBE, 0xD7, 0x5C, 0x89 + .byte 0x22, 0x11, 0x90, 0x6B, 0x93, 0x71, 0x98, 0xFD, 0x8E, 0x43, 0x79, 0xA6, 0x21, 0x08, 0xB4, 0x49 + .byte 0x62, 0x25, 0x1E, 0xF6, 0x40, 0xB3, 0x40, 0xC0, 0x51, 0x5A, 0x5E, 0x26, 0xAA, 0xC7, 0xB6, 0xE9 + .byte 0x5D, 0x10, 0x2F, 0xD6, 0x53, 0x14, 0x44, 0x02, 0x81, 0xE6, 0xA1, 0xD8, 0xC8, 0xFB, 0xD3, 0xE7 + .byte 0xE6, 0xCD, 0xE1, 0x21, 0xD6, 0x07, 0x37, 0xC3, 0x87, 0x0D, 0xD5, 0xF4, 0xED, 0x14, 0x5A, 0x45 + .byte 0x05, 0xE9, 0xE3, 0xA9, 0xF8, 0xA3, 0xEF, 0xFC, 0xD9, 0x02, 0x6F, 0x67, 0x8A, 0x4C, 0x2A, 0x8D + .byte 0x42, 0x39, 0xFA, 0xFF, 0x81, 0xF6, 0x71, 0x87, 0x22, 0x61, 0x9D, 0x6D, 0x0C, 0x38, 0xE5, 0xFD + .byte 0x44, 0xEA, 0xBE, 0xA4, 0xA9, 0xCF, 0xDE, 0x4B, 0x60, 0x4B, 0xBB, 0xF6, 0x70, 0xBC, 0xBF, 0xBE + .byte 0xC6, 0x7E, 0x9B, 0x28, 0xFA, 0x27, 0xA1, 0xEA, 0x85, 0x30, 0xEF, 0xD4, 0x05, 0x1D, 0x88, 0x04 + .byte 0x39, 0xD0, 0xD4, 0xD9, 0xE5, 0x99, 0xDB, 0xE6, 0xF8, 0x7C, 0xA2, 0x1F, 0x65, 0x56, 0xAC, 0xC4 + .byte 0x44, 0x22, 0x29, 0xF4, 0x97, 0xFF, 0x2A, 0x43, 0xA7, 0x23, 0x94, 0xAB, 0x39, 0xA0, 0x93, 0xFC + .byte 0xC3, 0x59, 0x5B, 0x65, 0x92, 0xCC, 0x0C, 0x8F, 0x7D, 0xF4, 0xEF, 0xFF, 0xD1, 0x5D, 0x84, 0x85 + .byte 0x4F, 0x7E, 0xA8, 0x6F, 0xE0, 0xE6, 0x2C, 0xFE, 0x14, 0x43, 0x01, 0xA3, 0xA1, 0x11, 0x08, 0x4E + .byte 0x82, 0x7E, 0x53, 0xF7, 0x35, 0xF2, 0x3A, 0xBD, 0xBB, 0xD2, 0xD7, 0x2A, 0x91, 0xD3, 0x86, 0xEB + + .section .text + + arm_func_start CPSi_md5_result +CPSi_md5_result: ; 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 char_from_long + ldr r0, [r5, #0x10] + ldr r1, _020A3AC8 ; =padding + mov r0, r0, lsr #0x3 + and r0, r0, #0x3f + cmp r0, #0x38 + rsblt r2, r0, #0x38 + rsbge r2, r0, #0x78 + mov r0, r5 + bl CPSi_md5_calc + mov r0, r5 + mov r1, r4 + mov r2, #0x8 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x10 + bl char_from_long + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A3AC8: .word padding + + arm_func_start CPSi_md5_calc +CPSi_md5_calc: + 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 CPSi_md5_block + add r0, r5, #0x3f + cmp r0, r6 + bhs _020A3B70 +_020A3B4C: + mov r0, r8 + add r1, r7, r5 + bl CPSi_md5_block + 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 CPSi_md5_init +CPSi_md5_init: ; 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 CPSi_md5_block +CPSi_md5_block: ; 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 long_from_char + ldr r2, _020A4024 ; =itab + mov r3, #0x0 + ldr r1, _020A4028 ; =ktab + 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 ; =ktab + add r0, sp, #0x4 + ldr lr, _020A4024 ; =itab +_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 ; =ktab + 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 ; =itab + 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 ; =itab + 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 ; =itab + 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 ; =itab + ldr r1, _020A4028 ; =ktab + add r8, r0, r3 + ldr lr, _020A4024 ; =itab + 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 itab +_020A4028: .word ktab + + arm_func_start long_from_char +long_from_char: ; 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 char_from_long +char_from_long: ; 0x020A4044 + ldr ip, _020A4058 ; =MI_CpuCopy8 + mov r3, r0 + mov r0, r1 + mov r1, r3 + bx r12 + .balign 4 +_020A4058: .word MI_CpuCopy8 diff --git a/arm9/asm/SSL_rca4.s b/arm9/asm/SSL_rca4.s new file mode 100644 index 00000000..9dfc9402 --- /dev/null +++ b/arm9/asm/SSL_rca4.s @@ -0,0 +1,74 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start CPSi_rc4_crypt +CPSi_rc4_crypt: ; 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 CPSi_rc4_init +CPSi_rc4_init: ; 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 diff --git a/arm9/asm/SSL_sha1.s b/arm9/asm/SSL_sha1.s new file mode 100644 index 00000000..721ad80d --- /dev/null +++ b/arm9/asm/SSL_sha1.s @@ -0,0 +1,655 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global ssl_sha1_padding +ssl_sha1_padding: ; 0x0210642C + .byte 0x80 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .text + + arm_func_start CPSi_sha1_result_prng +CPSi_sha1_result_prng: ; 0x020A405C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + ldr r1, _020A4094 ; =ssl_sha1_padding+1 + mov r5, r0 + mov r2, #0x2c + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl ssl_sha1_char_from_long + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A4094: .word ssl_sha1_padding+1 + + arm_func_start CPSi_sha1_result +CPSi_sha1_result: ; 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 ssl_sha1_char_from_long + ldr r0, [r5, #0x18] + ldr r1, _020A4108 ; =ssl_sha1_padding + mov r0, r0, lsr #0x3 + and r0, r0, #0x3f + cmp r0, #0x38 + rsblt r2, r0, #0x38 + rsbge r2, r0, #0x78 + mov r0, r5 + bl CPSi_sha1_calc + mov r0, r5 + mov r1, r4 + mov r2, #0x8 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl ssl_sha1_char_from_long + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A4108: .word ssl_sha1_padding + + arm_func_start CPSi_sha1_calc +CPSi_sha1_calc: + 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 CPSi_sha1_block + add r0, r5, #0x3f + cmp r0, r6 + bhs _020A41B0 +_020A418C: + mov r0, r8 + add r1, r7, r5 + bl CPSi_sha1_block + 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 CPSi_sha1_init +CPSi_sha1_init: ; 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 CPSi_sha1_block +CPSi_sha1_block: ; 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 ssl_sha1_long_from_char + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 R + 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 ssl_sha1_long_from_char +ssl_sha1_long_from_char: ; 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 ssl_sha1_char_from_long +ssl_sha1_char_from_long: ; 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 R +R: ; 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 diff --git a/arm9/asm/SSL_ssl.s b/arm9/asm/SSL_ssl.s new file mode 100644 index 00000000..4605b1e8 --- /dev/null +++ b/arm9/asm/SSL_ssl.s @@ -0,0 +1,4114 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global pairlist +pairlist: ; 0x0210623C + .byte 0x04, 0x00, 0x05, 0x00 + + .global UNK_02106240 +UNK_02106240: ; 0x02106240 + .byte 0xFF, 0xFF, 0xFF, 0x00 + + .global ssl_handshake_priority +ssl_handshake_priority: ; 0x02106244 + .byte 0xFF, 0xFF, 0xFF, 0xFF + + .global UNK_02106248 +UNK_02106248: ; 0x02106248 + .byte 0x55, 0x04, 0x03, 0x00 + + .global UNK_0210624C +UNK_0210624C: ; 0x0210624C + .byte 0x55, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 + + .global UNK_02106254 +UNK_02106254: ; 0x02106254 + .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 + + .global UNK_02106260 +UNK_02106260: ; 0x02106260 + .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00 + + .global UNK_0210626C +UNK_0210626C: ; 0x0210626C + .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x00, 0x00, 0x00 + + .global object +object: ; 0x02106278 + .word UNK_02106240 + .word UNK_02106254 + .word UNK_0210624C + .word UNK_02106260 + .word UNK_0210626C + .word UNK_02106248 + + .global UNK_02106290 +UNK_02106290: ; 0x02106290 + .byte 0x53, 0x52, 0x56, 0x52, 0x00, 0x00, 0x00, 0x00 + + .global UNK_02106298 +UNK_02106298: ; 0x02106298 + .byte 0x43, 0x4C, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00 + + .global UNK_021062A0 +UNK_021062A0: ; 0x021062A0 + .byte 0x41, 0x00, 0x00, 0x00 + + .global UNK_021062A4 +UNK_021062A4: ; 0x021062A4 + .byte 0x42, 0x42, 0x00, 0x00 + + .global UNK_021062A8 +UNK_021062A8: ; 0x021062A8 + .byte 0x43, 0x43, 0x43, 0x00 + + .section .bss + + .global pool_initialized +pool_initialized: ; 0x021CA6E0 + .space 0x4 + + .global UNK_021CA6E4 +UNK_021CA6E4: ; 0x021CA6E4 + .space 0x4 + + .global pool +pool: ; 0x021CA6E8 + .space 0x14 + + .global session +session: ; 0x021CA6FC + .space 0x170 + + .section .text + + arm_func_start CPSi_SslCleanup +CPSi_SslCleanup: ; 0x020A01E0 + ldr ip, _020A01F4 ; =MI_CpuFill8 + ldr r0, _020A01F8 ; =session + mov r1, #0x0 + mov r2, #0x170 + bx r12 + .balign 4 +_020A01F4: .word MI_CpuFill8 +_020A01F8: .word session + + arm_func_start CPSi_SslPeriodical +CPSi_SslPeriodical: ; 0x020A01FC + stmdb sp!, {r4-r6,lr} + mov r5, r0 + bl OS_DisableInterrupts + ldr r4, _020A02E0 ; =session + 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 ; =OSi_ThreadInfo + 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 session +_020A02E4: .word 0x000003BD +_020A02E8: .word OSi_ThreadInfo + + .extern _SDK_UbiquitousSSL + ; SDK_DEFINE_MIDDLEWARE(id_string, "UBIQUITOUS", "SSL"); + + arm_func_start CPS_SetSsl +CPS_SetSsl: + stmdb sp!, {r4,lr} + mov r4, r0 + ; SDK_USING_MIDDLEWARE(id_string) + ldr r0, _020A0318 ; =_SDK_UbiquitousSSL + bl OSi_ReferSymbol + ldr r0, _020A031C ; =OSi_ThreadInfo + 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 _SDK_UbiquitousSSL +_020A031C: .word OSi_ThreadInfo + + arm_func_start CPSi_SslClose +CPSi_SslClose: ; 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 ; =CPSiFree + ldr r1, [r1, #0x0] + blx r1 +_020A0348: + mov r0, #0x0 + str r0, [r4, #0x824] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A0358: .word CPSiFree + + arm_func_start CPSi_SslShutdown +CPSi_SslShutdown: ; 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 make_ciphertext + mov r2, #0x0 + mov r1, r0 + add r0, sp, #0x4 + mov r3, r2 + str r5, [sp, #0x0] + bl CPSi_TcpWrite2Raw +_020A03CC: + mov r0, #0x0 + strb r0, [r4, #0x455] + add sp, sp, #0x20 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start CPSi_SslWrite2 +CPSi_SslWrite2: ; 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 ; =CPSiAlloc + 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 make_ciphertext + 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 CPSi_TcpWrite2Raw + cmp r0, r4 + ldr r1, _020A0534 ; =CPSiFree + 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 CPSiAlloc +_020A0534: .word CPSiFree + + arm_func_start CPSi_SslGetLength +CPSi_SslGetLength: ; 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 try_fill_record +_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 try_fill_record +try_fill_record: ; 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 CPSi_TcpReadRaw + 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 ; =CPSiAlloc + 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 CPSi_TcpReadRaw + 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 + ldr r0, [sp, #0x0] + mov r1, r5 + bl CPSi_SocConsumeRaw + cmp r6, #0x0 + beq _020A0714 + ldr r1, [r4, #0x824] + mov r0, r4 + bl parse_record_in_buf + 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 CPSiAlloc + + arm_func_start CPSi_SslConsume +CPSi_SslConsume: ; 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 ; =CPSiFree + 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 CPSiFree + + arm_func_start CPSi_SslRead +CPSi_SslRead: ; 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 tcp_read_raw_nbytes + cmp r0, #0x0 + beq _020A07FC + ldr r1, _020A0870 ; =CPSiFree + 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 parse_record_in_buf + 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 parse_record + 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 CPSiFree + + arm_func_start CPSi_SslConnect +CPSi_SslConnect: ; 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 CPSi_TcpConnectRaw + 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 CPSi_sha1_init + add r0, r4, #0x3a4 + bl CPSi_md5_init + mov r0, r5 + bl ssl_connect_try + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start ssl_connect_try +ssl_connect_try: ; 0x020A08DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r4, [r5, #0xc] + bl send_client_hello +_020A08F0: + mov r0, r5 + bl parse_record + 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 create_key_block + mov r0, r5 + bl mustget_change_cipher_spec_and_finished + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r0, r5 + bl send_change_cipher_spec_and_finished + b _020A09B4 +_020A095C: + mov r0, r5 + bl send_client_key_exchange + mov r0, r4 + bl create_master_secret + ldrb r0, [r4, #0x30] + cmp r0, #0x0 + beq _020A0988 + ldrh r2, [r5, #0x18] + ldr r1, [r5, #0x1c] + mov r0, r4 + bl cache_session +_020A0988: + mov r0, r4 + bl create_key_block + mov r0, r5 + bl send_change_cipher_spec_and_finished + mov r0, r5 + bl mustget_change_cipher_spec_and_finished + 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 CPSi_SslListen +CPSi_SslListen: ; 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 CPSi_TcpListenRaw + strb r7, [r8, #0x455] + str r7, [r8, #0x1d4] + mov r0, r5 + strb r6, [r8, #0x454] + bl CPSi_sha1_init + mov r0, r4 + bl CPSi_md5_init + mov r0, r9 + bl ssl_listen_try + 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 CPSi_TcpShutdownRaw + ldrh r0, [r9, #0x1a] + strh r0, [r9, #0x18] + ldr r0, [r9, #0x20] + str r0, [r9, #0x1c] + b _020A09EC + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start ssl_listen_try +ssl_listen_try: + stmdb sp!, {r4,lr} + mov r4, r0 + bl parse_record + cmp r0, #0x1 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl send_server_hello + cmp r0, #0x0 + beq _020A0AB0 + ldr r0, [r4, #0xc] + bl create_key_block + mov r0, r4 + bl send_change_cipher_spec_and_finished + mov r0, r4 + bl mustget_change_cipher_spec_and_finished + cmp r0, #0x0 + beq _020A0AE8 + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A0AB0: + mov r0, r4 + bl parse_record + cmp r0, #0x5 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl mustget_change_cipher_spec_and_finished + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl send_change_cipher_spec_and_finished +_020A0AE8: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start mustget_change_cipher_spec_and_finished +mustget_change_cipher_spec_and_finished: + stmdb sp!, {r4,lr} + mov r4, r0 + bl parse_record + cmp r0, #0x7 + movne r0, #0x1 + ldmneia sp!, {r4,lr} + bxne lr + mov r0, r4 + bl parse_record + cmp r0, #0x6 + movne r0, #0x1 + moveq r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start send_client_key_exchange +send_client_key_exchange: ; 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 set_random + ldr r4, [r10, #0x594] + ldr r0, _020A0DD4 ; =CPSiAlloc + 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 set_random + 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 ; =CPSiAlloc + mov r0, r6, lsl #0x3 + ldr r1, [r1, #0x0] + blx r1 + movs r9, r0 + bne _020A0C08 + ldr r1, _020A0DD8 ; =CPSiFree + 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 CPSi_big_from_char + ldr r1, _020A0DDC ; =0x00000598 + ldr r2, [r10, #0x5a0] + mov r0, r8 + add r1, r10, r1 + mov r3, r6 + bl CPSi_big_from_char + ldr r1, _020A0DE0 ; =0x00000494 + mov r0, r7 + mov r2, r4 + add r1, r10, r1 + mov r3, r6 + bl CPSi_big_from_char + bl enter_computebound + mov r3, r6 + mov r6, r0 + ldr r1, [sp, #0x4] + mov r2, r8 + mov r0, r9 + str r7, [sp, #0x0] + bl CPSi_big_power + mov r0, r6 + bl exit_computebound + ldr r1, _020A0DD4 ; =CPSiAlloc + add r0, r4, #0x49 + ldr r1, [r1, #0x0] + blx r1 + movs r6, r0 + bne _020A0CCC + ldr r1, _020A0DD8 ; =CPSiFree + mov r0, r5 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =CPSiFree + 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 CPSi_TcpWrite2Raw + mov r0, r10 + add r1, r6, #0x5 + add r2, r4, #0x4 + bl update_digest + ldr r1, _020A0DD8 ; =CPSiFree + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =CPSiFree + mov r0, r9 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020A0DD8 ; =CPSiFree + mov r0, r5 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A0DD4: .word CPSiAlloc +_020A0DD8: .word CPSiFree +_020A0DDC: .word 0x00000598 +_020A0DE0: .word 0x00000494 + + arm_func_start send_client_hello +send_client_hello: ; 0x020A0DE4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r1, _020A0F88 ; =CPSiAlloc + 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 date2sec + 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 set_random + 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 find_session_from_IP + 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 ; =pairlist + 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 CPSi_TcpWrite2Raw + mov r0, r7 + mov r2, r4 + add r1, r6, #0x5 + bl update_digest + ldr r1, _020A0F90 ; =CPSiFree + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A0F88: .word CPSiAlloc +_020A0F8C: .word pairlist +_020A0F90: .word CPSiFree + + arm_func_start send_change_cipher_spec_and_finished +send_change_cipher_spec_and_finished: ; 0x020A0F94 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r1, _020A10EC ; =CPSiAlloc + 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 finished_md5 + 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 finished_sha1 + 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 update_digest + mov r0, r5 + add r1, r4, #0x6 + bl make_ciphertext + mov r2, #0x0 + add r1, r0, #0x6 + mov r0, r4 + mov r3, r2 + str r6, [sp, #0x0] + bl CPSi_TcpWrite2Raw + ldr r1, _020A10F0 ; =CPSiFree + mov r0, r4 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A10EC: .word CPSiAlloc +_020A10F0: .word CPSiFree + + arm_func_start send_server_hello +send_server_hello: + 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 date2sec + 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 set_random + ldr r1, _020A1360 ; =CPSiAlloc + 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 set_random + ldr r0, _020A1364 ; =UNK_021CA6E4 + 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 ; =UNK_021CA6E4 + 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 update_digest + mov r2, #0x0 + mov r0, r6 + mov r3, r2 + add r1, r4, #0x5 + str r9, [sp, #0x0] + bl CPSi_TcpWrite2Raw + ldr r1, _020A1368 ; =CPSiFree + 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 CPSiAlloc +_020A1364: .word UNK_021CA6E4 ; anonymous +_020A1368: .word CPSiFree + + arm_func_start CPS_SslAddRandomSeed +CPS_SslAddRandomSeed: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x60 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + bl CPSi_sha1_init + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, _020A13D8 ; =pool + add r0, sp, #0x0 + mov r2, #0x14 + bl CPSi_sha1_calc + mov r1, r6 + mov r2, r5 + add r0, sp, #0x0 + bl CPSi_sha1_calc + ldr r1, _020A13D8 ; =pool + add r0, sp, #0x0 + bl CPSi_sha1_result + mov r0, r4 + bl OS_RestoreInterrupts + ldr r0, _020A13DC ; =pool_initialized + mov r1, #0x1 + strb r1, [r0, #0x0] + add sp, sp, #0x60 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A13D8: .word pool +_020A13DC: .word pool_initialized + + arm_func_start set_random +set_random: ; 0x020A13E0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x7c + ldr r2, _020A1518 ; =pool_initialized + mov r10, r0 + ldrb r0, [r2, #0x0] + mov r9, r1 + cmp r0, #0x0 + bne _020A1448 + ldr r2, _020A151C ; =CPSiRand32ctx + 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 CPS_SslAddRandomSeed +_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 CPSi_sha1_init + bl OS_DisableInterrupts + mov r8, r0 + ldr r1, _020A1520 ; =pool + mov r0, r6 + mov r2, r11 + bl CPSi_sha1_calc + mov r0, r6 + add r1, sp, #0x8 + bl CPSi_sha1_result_prng + ldr r2, _020A1524 ; =pool+0x13 + 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 pool_initialized +_020A151C: .word CPSiRand32ctx +_020A1520: .word pool +_020A1524: .word pool+0x13 + + arm_func_start parse_record +parse_record: ; 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 CPSi_TcpReadRaw + 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 CPSi_SocConsumeRaw + ldr r1, _020A16DC ; =CPSiAlloc + 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 tcp_read_raw_nbytes + cmp r0, #0x0 + bne _020A15FC + ldrb r0, [r6, #0x0] + cmp r0, #0x1 + bne _020A15FC + mov r0, r4 + add r1, r6, #0x1 + bl client_hello_v2 + b _020A1604 +_020A15FC: + mov r0, #0x9 + strb r0, [r4, #0x455] +_020A1604: + ldr r2, [sp, #0x0] + mov r0, r4 + mov r1, r6 + bl update_digest + ldr r1, _020A16E0 ; =CPSiFree + 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 ; =CPSiAlloc + 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 tcp_read_raw_nbytes + cmp r0, #0x0 + beq _020A16C0 + ldr r1, _020A16E0 ; =CPSiFree + 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 parse_record_in_buf +_020A16CC: + ldrb r0, [r4, #0x455] + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A16DC: .word CPSiAlloc +_020A16E0: .word CPSiFree +_020A16E4: .word 0x00004805 + + arm_func_start parse_record_in_buf +parse_record_in_buf: ; 0x020A16E8 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldrb r0, [r8, #0x455] + mov r7, r1 + cmp r0, #0x9 + bne _020A1718 + ldr r1, _020A1940 ; =CPSiFree + 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 make_plaintext + 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 + b _020A178C + b _020A17BC + b _020A17D0 + 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 client_hello + b _020A18CC +_020A1878: + mov r0, r8 + mov r1, r6 + bl rcv_client_key_exchange + b _020A18CC +_020A1888: + mov r0, r8 + mov r1, r6 + bl rcv_server_hello + b _020A18CC +_020A1898: + mov r0, r8 + mov r1, r6 + bl rcv_certificate + b _020A18CC +_020A18A8: + mov r0, #0x4 + strb r0, [r8, #0x455] + b _020A18CC +_020A18B4: + mov r0, r8 + mov r1, r6 + bl rcv_finished + b _020A18CC +_020A18C4: + mov r0, #0x9 + strb r0, [r8, #0x455] +_020A18CC: + mov r0, r8 + sub r1, r6, #0x4 + add r2, r4, #0x4 + bl update_digest + 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 ; =CPSiFree + mov r0, r7 + ldr r1, [r1, #0x0] + blx r1 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A1940: .word CPSiFree + + arm_func_start update_digest +update_digest: ; 0x020A1944 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + add r0, r6, #0x2ec + bl CPSi_sha1_calc + mov r1, r5 + mov r2, r4 + add r0, r6, #0x3a4 + bl CPSi_md5_calc + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start tcp_read_raw_nbytes +tcp_read_raw_nbytes: + 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 CPSi_TcpReadRaw + 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 + ldr r0, [sp, #0x0] + mov r1, r5 + bl CPSi_SocConsumeRaw + 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 make_ciphertext +make_ciphertext: ; 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 CPSi_md5_init + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x10 + bl CPSi_md5_calc + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r7 + add r1, r6, #0x1cc + mov r2, #0x8 + bl CPSi_md5_calc + mov r0, r7 + mov r1, r5 + mov r2, #0x1 + bl CPSi_md5_calc + mov r0, r7 + add r1, r5, #0x3 + add r2, r4, #0x2 + bl CPSi_md5_calc + mov r0, r7 + mov r1, r8 + bl CPSi_md5_result + mov r0, r7 + bl CPSi_md5_init + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x10 + bl CPSi_md5_calc + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r7 + mov r1, r8 + mov r2, #0x10 + bl CPSi_md5_calc + mov r0, r7 + mov r1, r8 + bl CPSi_md5_result + add r4, r4, #0x10 + b _020A1BD4 +_020A1B04: + add r7, r6, #0x348 + mov r0, r7 + bl CPSi_sha1_init + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x14 + bl CPSi_sha1_calc + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r7 + add r1, r6, #0x1cc + mov r2, #0x8 + bl CPSi_sha1_calc + mov r0, r7 + mov r1, r5 + mov r2, #0x1 + bl CPSi_sha1_calc + mov r0, r7 + add r1, r5, #0x3 + add r2, r4, #0x2 + bl CPSi_sha1_calc + mov r0, r7 + mov r1, r8 + bl CPSi_sha1_result + mov r0, r7 + bl CPSi_sha1_init + ldr r1, [r6, #0xbc] + mov r0, r7 + mov r2, #0x14 + bl CPSi_sha1_calc + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r7 + add r1, sp, #0x0 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r7 + mov r1, r8 + mov r2, #0x14 + bl CPSi_sha1_calc + mov r0, r7 + mov r1, r8 + bl CPSi_sha1_result + 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 CPSi_rc4_crypt + add r0, r6, #0x1d4 + bl add1_be8 + add r0, r4, #0x5 + add sp, sp, #0x30 + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start make_plaintext +make_plaintext: ; 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 decrypt + 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 CPSi_md5_init + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x10 + bl CPSi_md5_calc + add r0, sp, #0x14 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r4 + add r1, r7, #0x2e4 + mov r2, #0x8 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r6 + mov r2, #0x1 + bl CPSi_md5_calc + mov r0, r4 + add r1, r6, #0x3 + add r2, r5, #0x2 + bl CPSi_md5_calc + mov r0, r4 + add r1, sp, #0x0 + bl CPSi_md5_result + mov r0, r4 + bl CPSi_md5_init + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x10 + bl CPSi_md5_calc + add r0, sp, #0x14 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x10 + bl CPSi_md5_calc + mov r0, r4 + add r1, sp, #0x0 + bl CPSi_md5_result + 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 CPSi_sha1_init + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x14 + bl CPSi_sha1_calc + add r0, sp, #0x14 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r4 + add r1, r7, #0x2e4 + mov r2, #0x8 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r6 + mov r2, #0x1 + bl CPSi_sha1_calc + mov r0, r4 + add r1, r6, #0x3 + add r2, r5, #0x2 + bl CPSi_sha1_calc + mov r0, r4 + add r1, sp, #0x0 + bl CPSi_sha1_result + mov r0, r4 + bl CPSi_sha1_init + ldr r1, [r7, #0x1d4] + mov r0, r4 + mov r2, #0x14 + bl CPSi_sha1_calc + add r0, sp, #0x14 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x14 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x14 + bl CPSi_sha1_calc + mov r0, r4 + add r1, sp, #0x0 + bl CPSi_sha1_result + mov r4, #0x14 +_020A1E0C: + add r0, r6, #0x5 + add r1, sp, #0x0 + mov r2, r4 + add r0, r0, r5 + bl memcmp + cmp r0, #0x0 + movne r0, #0x9 + strneb r0, [r7, #0x455] + add r0, r7, #0x2ec + bl add1_be8 + add r0, r5, #0x5 + add sp, sp, #0x44 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start decrypt +decrypt: ; 0x020A1E44 + stmdb sp!, {r4,lr} + add r0, r0, #0x1e0 + mov r4, r2 + bl CPSi_rc4_crypt + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start add1_be8 +add1_be8: ; 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 rcv_finished +rcv_finished: ; 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 finished_md5 + 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 + 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 finished_sha1 + 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 + 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 finished_sha1 +finished_sha1: ; 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 ; =UNK_02106290 + mov r0, r4 + mov r2, #0x4 + bl CPSi_sha1_calc + b _020A1F90 +_020A1F80: + ldr r1, _020A2030 ; =UNK_02106298 + mov r0, r4 + mov r2, #0x4 + bl CPSi_sha1_calc +_020A1F90: + mov r0, r4 + mov r1, r6 + mov r2, #0x30 + bl CPSi_sha1_calc + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x28 + bl MI_CpuFill8 + add r1, sp, #0x0 + mov r0, r4 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + bl CPSi_sha1_result + mov r0, r4 + bl CPSi_sha1_init + mov r1, r6 + mov r0, r4 + mov r2, #0x30 + bl CPSi_sha1_calc + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x28 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x28 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x14 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + bl CPSi_sha1_result + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A202C: .word UNK_02106290 +_020A2030: .word UNK_02106298 + + arm_func_start finished_md5 +finished_md5: ; 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 ; =UNK_02106290 + mov r0, r4 + mov r2, #0x4 + bl CPSi_md5_calc + b _020A2078 +_020A2068: + ldr r1, _020A2118 ; =UNK_02106298 + mov r0, r4 + mov r2, #0x4 + bl CPSi_md5_calc +_020A2078: + mov r0, r4 + mov r1, r6 + mov r2, #0x30 + bl CPSi_md5_calc + add r0, sp, #0x0 + mov r1, #0x36 + mov r2, #0x30 + bl MI_CpuFill8 + add r1, sp, #0x0 + mov r0, r4 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r5 + bl CPSi_md5_result + mov r0, r4 + bl CPSi_md5_init + mov r1, r6 + mov r0, r4 + mov r2, #0x30 + bl CPSi_md5_calc + add r0, sp, #0x0 + mov r1, #0x5c + mov r2, #0x30 + bl MI_CpuFill8 + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x10 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r5 + bl CPSi_md5_result + add sp, sp, #0x30 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A2114: .word UNK_02106290 +_020A2118: .word UNK_02106298 + + arm_func_start rcv_client_key_exchange +rcv_client_key_exchange: ; 0x020A211C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r2, [r4, #0x81c] + bl decrypt_premaster_secret + mov r0, r4 + bl create_master_secret + mov r1, #0x0 + mov r0, r4 + mov r2, r1 + bl cache_session + mov r0, r4 + bl create_key_block + mov r0, #0x5 + strb r0, [r4, #0x455] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start create_key_block +create_key_block: ; 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 CPSi_sha1_init + 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 CPSi_sha1_calc + add r8, r8, #0x1 + add r0, r9, #0x1 + cmp r8, r0 + blt _020A220C +_020A222C: + mov r0, r7 + mov r1, r10 + mov r2, r11 + bl CPSi_sha1_calc + ldr r2, [sp, #0x10] + mov r0, r7 + add r1, r10, #0x54 + bl CPSi_sha1_calc + ldr r2, [sp, #0x10] + mov r0, r7 + add r1, r10, #0x34 + bl CPSi_sha1_calc + mov r0, r7 + add r1, sp, #0x19 + bl CPSi_sha1_result + add r7, r10, #0x3fc + mov r0, r7 + bl CPSi_md5_init + mov r0, r7 + mov r1, r10 + mov r2, r11 + bl CPSi_md5_calc + ldr r2, [sp, #0x14] + mov r0, r7 + add r1, sp, #0x19 + bl CPSi_md5_calc + add r1, r10, #0x74 + mov r0, r7 + add r1, r1, r6 + bl CPSi_md5_result + 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 CPSi_rc4_init + ldr r1, [r10, #0xc0] + add r0, r10, #0xc8 + mov r2, #0x10 + bl CPSi_rc4_init + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start create_master_secret +create_master_secret: ; 0x020A2364 + stmdb sp!, {r4,lr} + sub sp, sp, #0x30 + mov r4, r0 + ldr r1, _020A23BC ; =UNK_021062A0 + add r0, sp, #0x0 + mov r2, r4 + bl create_ms_sub + ldr r1, _020A23C0 ; =UNK_021062A4 + add r0, sp, #0x10 + mov r2, r4 + bl create_ms_sub + ldr r1, _020A23C4 ; =UNK_021062A8 + add r0, sp, #0x20 + mov r2, r4 + bl create_ms_sub + 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 UNK_021062A0 +_020A23C0: .word UNK_021062A4 +_020A23C4: .word UNK_021062A8 + + arm_func_start create_ms_sub +create_ms_sub: + 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 CPSi_sha1_init + mov r0, r6 + bl strlen + mov r2, r0 + mov r1, r6 + mov r0, r4 + bl CPSi_sha1_calc + mov r0, r4 + mov r1, r5 + mov r2, #0x30 + bl CPSi_sha1_calc + mov r0, r4 + add r1, r5, #0x34 + mov r2, #0x40 + bl CPSi_sha1_calc + mov r0, r4 + add r1, sp, #0x0 + bl CPSi_sha1_result + add r4, r5, #0x3fc + mov r0, r4 + bl CPSi_md5_init + mov r1, r5 + mov r0, r4 + mov r2, #0x30 + bl CPSi_md5_calc + mov r0, r4 + add r1, sp, #0x0 + mov r2, #0x14 + bl CPSi_md5_calc + mov r0, r4 + mov r1, r7 + bl CPSi_md5_result + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start decrypt_premaster_secret +decrypt_premaster_secret: ; 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 ; =CPSiAlloc + 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 CPSi_big_from_char + ldr r1, [r10, #0x1c] + ldr r2, [r10, #0x18] + mov r0, r7 + mov r3, r9 + bl CPSi_big_from_char + ldr r1, [r10, #0xc] + ldr r2, [r10, #0x8] + mov r0, r5 + mov r3, r9 + bl CPSi_big_from_char + bl enter_computebound + str r0, [sp, #0x14] + ldr r0, [sp, #0xc] + str r5, [sp, #0x0] + mov r1, r8 + mov r2, r7 + mov r3, r9 + bl CPSi_big_montpower + ldr r1, [r10, #0x24] + ldr r2, [r10, #0x20] + mov r0, r7 + mov r3, r9 + bl CPSi_big_from_char + ldr r1, [r10, #0x14] + ldr r2, [r10, #0x10] + mov r0, r5 + mov r3, r9 + bl CPSi_big_from_char + ldr r0, [sp, #0x10] + mov r1, r8 + mov r2, r7 + mov r3, r9 + str r5, [sp, #0x0] + bl CPSi_big_montpower + ldr r0, [sp, #0x14] + bl exit_computebound + ldr r1, [sp, #0xc] + ldr r2, [sp, #0x10] + mov r0, r8 + mov r3, r9 + bl CPSi_big_sub + ldr r1, [r10, #0x2c] + ldr r2, [r10, #0x28] + mov r0, r7 + mov r3, r9 + bl CPSi_big_from_char + mov r0, r6 + mov r1, r8 + mov r2, r7 + mov r3, r9 + bl CPSi_big_mult + ldr r1, [r10, #0x14] + ldr r2, [r10, #0x10] + mov r0, r7 + mov r3, r9 + bl CPSi_big_from_char + mov r0, r8 + mov r1, r6 + mov r2, r7 + mov r3, r9 + bl CPSi_big_mult + ldr r2, [sp, #0x10] + mov r0, r6 + mov r1, r8 + mov r3, r9 + bl CPSi_big_add + ldr r1, [r10, #0x4] + ldr r2, [r10, #0x0] + mov r0, r7 + mov r3, r9 + bl CPSi_big_from_char + mov r0, r6 + mov r1, r9 + bl CPSi_big_sign + cmp r0, #0x0 + bge _020A267C + mov r0, r6 + mov r1, r9 + bl CPSi_big_negate + str r9, [sp, #0x0] + mov r1, r6 + mov r2, r7 + mov r3, r4 + mov r0, #0x0 + str r11, [sp, #0x4] + bl CPSi_big_div + mov r0, r4 + mov r1, r7 + mov r2, r4 + mov r3, r9 + bl CPSi_big_sub + b _020A2698 +_020A267C: + str r9, [sp, #0x0] + mov r1, r6 + mov r2, r7 + mov r3, r4 + mov r0, #0x0 + str r11, [sp, #0x4] + bl CPSi_big_div +_020A2698: + ldr r0, [sp, #0x8] + mov r1, r4 + mov r3, r9 + mov r2, #0x30 + bl CPSi_char_from_big + ldr r1, _020A26CC ; =CPSiFree + mov r0, r8 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x1c + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020A26C8: .word CPSiAlloc +_020A26CC: .word CPSiFree + + arm_func_start client_hello +client_hello: ; 0x020A26D0 + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r4, r0 + ldrb r0, [r6, #0x0] + ldrb r1, [r6, #0x1] + bl version_ok + 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 find_session_from_id +_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 select_method + 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 client_hello_v2 +client_hello_v2: ; 0x020A2774 + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r6, r0 + ldrb r0, [r5, #0x0] + ldrb r1, [r5, #0x1] + bl version_ok + 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 select_method + 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 version_ok +version_ok: + cmp r0, #0x3 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + + arm_func_start select_method +select_method: ; 0x020A285C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + ldr r4, _020A28BC ; =pairlist +_020A2874: + mov r0, r5, lsl #0x1 + ldrh r3, [r4, r0] + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl has_method + cmp r0, #0x0 + ldrne r0, _020A28BC ; =pairlist + 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 pairlist + + arm_func_start has_method +has_method: + 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 rcv_server_hello +rcv_server_hello: ; 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 + cmp r0, #0x0 + moveq r0, #0x1 + streqb r0, [r6, #0x31] + beq _020A29B4 +_020A2974: + cmp r7, #0x0 + beq _020A2984 + mov r0, r6 + bl purge_session +_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 rcv_certificate +rcv_certificate: ; 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 cert_item + 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 auth_cert + mov r8, r0 + cmp r6, #0x0 + bne _020A2B44 + ldr r0, [r10, #0x800] + cmp r0, #0x0 + beq _020A2B44 + ldr r1, [sp, #0x4] + bl compare_fqdn + 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 cert_item + 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 validate_signature + 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 compare_fqdn +compare_fqdn: + 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 chars_till_end + mov r4, r0 + mov r0, r5 + bl chars_till_end + cmp r0, r4 + movgt r0, #0x1 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + sub r0, r4, r0 + add r6, r6, r0 + b _020A2C38 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start chars_till_end +chars_till_end: ; 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 auth_cert +auth_cert: ; 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 CPSi_md5_init + ldr r1, [r5, #0x460] + ldr r2, [r5, #0x464] + mov r0, r6 + sub r2, r2, r1 + bl CPSi_md5_calc + ldr r1, _020A2DB8 ; =0x00000468 + mov r0, r6 + add r1, r5, r1 + bl CPSi_md5_result + mov r0, #0x10 + str r0, [r5, #0x47c] + b _020A2D88 +_020A2D40: + add r6, r5, #0x348 + mov r0, r6 + bl CPSi_sha1_init + ldr r1, [r5, #0x460] + ldr r2, [r5, #0x464] + mov r0, r6 + sub r2, r2, r1 + bl CPSi_sha1_calc + ldr r1, _020A2DB8 ; =0x00000468 + mov r0, r6 + add r1, r5, r1 + bl CPSi_sha1_result + 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 get_rootCA + movs r1, r0 + orreq r0, r4, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r5 + bl validate_signature + orr r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A2DB8: .word 0x00000468 + + arm_func_start validate_signature +validate_signature: + 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 ; =CPSiAlloc + 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 CPSi_big_from_char + ldr r1, [r7, #0x10] + ldr r2, [r7, #0xc] + mov r0, r10 + mov r3, r4 + bl CPSi_big_from_char + mov r0, r9 + ldr r1, [r7, #0x8] + ldr r2, [r7, #0x4] + mov r3, r4 + bl CPSi_big_from_char + bl enter_computebound + str r9, [sp, #0x0] + mov r2, r10 + mov r9, r0 + mov r0, r6 + mov r1, r5 + mov r3, r4 + bl CPSi_big_power + mov r0, r9 + bl exit_computebound + mov r0, r5 + mov r1, r6 + ldr r2, [r7, #0x4] + mov r3, r4 + bl CPSi_char_from_big + 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 + cmp r0, #0x0 + beq _020A2F6C +_020A2F68: + mov r4, #0x2 +_020A2F6C: + ldr r1, _020A2F94 ; =CPSiFree + 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 CPSiAlloc +_020A2F90: .word 0x00000468 +_020A2F94: .word CPSiFree + + arm_func_start cert_item +cert_item: + 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 cert_item_len + 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: ; jump table + b _020A3430 ; case 0 + b _020A3430 ; case 1 + b _020A3064 ; case 2 + b _020A315C ; case 3 + b _020A3430 ; case 4 + b _020A3430 ; case 5 + b _020A31DC ; case 6 + b _020A3430 ; case 7 + b _020A3430 ; case 8 + b _020A3430 ; case 9 + b _020A3430 ; case 10 + b _020A3430 ; case 11 + b _020A3274 ; case 12 + b _020A3430 ; case 13 + b _020A3430 ; case 14 + b _020A3430 ; case 15 + b _020A3348 ; case 16 + b _020A33D8 ; case 17 + b _020A3430 ; case 18 + b _020A3274 ; case 19 + b _020A3274 ; case 20 + b _020A3430 ; case 21 + b _020A3274 ; case 22 + b _020A32F4 ; case 23 + b _020A32F4 ; case 24 +_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 cert_item + 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 ; =object +_020A31E8: + ldr r4, [r10, r6, lsl #0x2] + mov r0, r4 + bl strlen + mov r2, r0 + mov r0, r5 + mov r1, r4 + bl memcmp + cmp r0, #0x0 + bne _020A3258 + cmp r6, #0x5 + addls pc, pc, r6, lsl #0x2 + b _020A3264 +_020A3218: ; jump table + b _020A3264 ; case 0 + b _020A3230 ; case 1 + b _020A3230 ; case 2 + b _020A3240 ; case 3 + b _020A3240 ; case 4 + b _020A324C ; case 5 +_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 make_dn + 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 make_dn +_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 parse_time + 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 cert_item + 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 cert_item + 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 cert_item + 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 object + + arm_func_start parse_time +parse_time: + 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 make_dn +make_dn: + 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 cert_item_len +cert_item_len: ; 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 get_rootCA +get_rootCA: ; 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 + 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 CPS_SetRootCa +CPS_SetRootCa: ; 0x020A3688 + ldr r2, _020A36B0 ; =OSi_ThreadInfo + 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 OSi_ThreadInfo + + arm_func_start exit_computebound +exit_computebound: ; 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 ; =OSi_ThreadInfo + ldr r0, [r0, #0x4] + bl OS_SetThreadPriority + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A36E8: .word OSi_ThreadInfo + + arm_func_start enter_computebound +enter_computebound: ; 0x020A36EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020A3744 ; =ssl_handshake_priority + ldr r0, [r0, #0x0] + cmp r0, #0x20 + addcs sp, sp, #0x4 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + ldr r0, _020A3748 ; =OSi_ThreadInfo + ldr r5, [r0, #0x4] + mov r0, r5 + bl OS_GetThreadPriority + ldr r1, _020A3744 ; =ssl_handshake_priority + 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 ssl_handshake_priority +_020A3748: .word OSi_ThreadInfo + + arm_func_start CPS_SetSslHandshakePriority +CPS_SetSslHandshakePriority: ; 0x020A374C + ldr r1, _020A3758 ; =ssl_handshake_priority + str r0, [r1, #0x0] + bx lr + .balign 4 +_020A3758: .word ssl_handshake_priority + + arm_func_start date2sec +date2sec: ; 0x020A375C + stmdb sp!, {lr} + sub sp, sp, #0x1c + add r0, sp, #0x0 + bl RTC_GetDate + add r0, sp, #0x10 + bl RTC_GetTime + 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 purge_session +purge_session: + stmdb sp!, {r4-r8,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r6, _020A3804 ; =session + 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 + 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 session + + arm_func_start cache_session +cache_session: ; 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 ; =session + 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 session + + arm_func_start find_session_from_IP +find_session_from_IP: ; 0x020A3908 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl OS_DisableInterrupts + mov r1, #0x0 + ldr r4, _020A39AC ; =session + 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 session + + arm_func_start find_session_from_id +find_session_from_id: ; 0x020A39B0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl OS_DisableInterrupts + mov r6, #0x0 + ldr r4, _020A3A54 ; =session + 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 + 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 session diff --git a/arm9/asm/WCM_aplist.s b/arm9/asm/WCM_aplist.s new file mode 100644 index 00000000..69067574 --- /dev/null +++ b/arm9/asm/WCM_aplist.s @@ -0,0 +1,408 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WcmAppendApList +WcmAppendApList: ; 0x020A7FB0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WCMi_GetSystemWork + 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 WcmSearchIndexedApList +WcmSearchIndexedApList: ; 0x020A8084 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WCMi_GetSystemWork + 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 WcmSearchApList +WcmSearchApList: ; 0x020A80EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WCMi_GetSystemWork + 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 WCM_CompareBssID + 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 WcmGetLastApList +WcmGetLastApList: ; 0x020A8170 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_GetSystemWork + 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 WcmAllocApList +WcmAllocApList: ; 0x020A81B4 + stmdb sp!, {r4,lr} + bl WCMi_GetSystemWork + 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 WCMi_EntryApList +WCMi_EntryApList: ; 0x020A8298 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl WCMi_GetSystemWork + 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 WcmSearchApList + movs r6, r0 + bne _020A8300 + bl WcmAllocApList + mov r6, r0 +_020A8300: + cmp r6, #0x0 + bne _020A8320 + add r0, r7, #0x2000 + ldr r0, [r0, #0x278] + cmp r0, #0x1 + bne _020A8320 + bl WcmGetLastApList + 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 WcmAppendApList + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WCM_PointApList +WCM_PointApList: ; 0x020A8358 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + 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 WcmSearchIndexedApList + 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 WCM_LockApList +WCM_LockApList: ; 0x020A83D0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + bl WCMi_GetSystemWork + 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 WCM_CountApList +WCM_CountApList: ; 0x020A846C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + 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 WCM_ClearApList +WCM_ClearApList: ; 0x020A84D8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WCMi_GetSystemWork + 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 diff --git a/arm9/asm/WCM_cpsif.s b/arm9/asm/WCM_cpsif.s new file mode 100644 index 00000000..09b72e80 --- /dev/null +++ b/arm9/asm/WCM_cpsif.s @@ -0,0 +1,361 @@ + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global wcmCpsifw +wcmCpsifw: ; 0x021CA870 + .space 0x2C + + .text + + arm_func_start WcmCpsifUnlockMutexInIRQ +WcmCpsifUnlockMutexInIRQ: ; 0x020A8534 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + ldr r1, _020A858C ; =OS_IrqHandler + 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 OS_IrqHandler + + arm_func_start WcmCpsifTryLockMutexInIRQ +WcmCpsifTryLockMutexInIRQ: ; 0x020A8590 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + bne _020A85B8 + ldr r1, _020A85D8 ; =OS_IrqHandler + 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 ; =OS_IrqHandler + 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 OS_IrqHandler + + arm_func_start WcmCpsifKACallback +WcmCpsifKACallback: ; 0x020A85DC + ldr ip, _020A85E8 ; =WcmCpsifUnlockMutexInIRQ + ldr r0, _020A85EC ; =wcmCpsifw+0xC + bx r12 + .balign 4 +_020A85E8: .word WcmCpsifUnlockMutexInIRQ +_020A85EC: .word wcmCpsifw+0xC + + arm_func_start WcmCpsifWmCallback +WcmCpsifWmCallback: ; 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 ; =wcmCpsifw + str r2, [r1, #0x24] + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A8628 + bl WCMi_ResetKeepAliveAlarm +_020A8628: + ldr r0, _020A8640 ; =wcmCpsifw+0x4 + bl OS_WakeupThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A863C: .word wcmCpsifw +_020A8640: .word wcmCpsifw+0x4 + + arm_func_start WCM_SendDCFData +WCM_SendDCFData: ; 0x020A8644 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + bne _020A867C + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020A867C: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_LockMutex + bl WCMi_GetSystemWork + movs r4, r0 + bne _020A86AC + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + 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 ; =wcmCpsifw+0xC + 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 ; =WcmCpsifWmCallback + 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: ; jump table + b _020A873C ; case 0 + b _020A873C ; case 1 + b _020A8758 ; case 2 + b _020A873C ; case 3 + b _020A873C ; case 4 + b _020A873C ; case 5 + b _020A873C ; case 6 + b _020A873C ; case 7 + b _020A873C ; case 8 +_020A873C: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8758: + ldr r0, _020A87B4 ; =wcmCpsifw+0x4 + bl OS_SleepThread + ldr r0, _020A87B8 ; =wcmCpsifw + ldr r0, [r0, #0x24] + cmp r0, #0x0 + beq _020A8790 + cmp r0, #0x1 + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8790: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A87AC: .word wcmCpsifw+0xC +_020A87B0: .word WcmCpsifWmCallback +_020A87B4: .word wcmCpsifw+0x4 +_020A87B8: .word wcmCpsifw + + arm_func_start WCM_SetRecvDCFCallback +WCM_SetRecvDCFCallback: ; 0x020A87BC + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020A87DC ; =wcmCpsifw + str r4, [r1, #0x28] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A87DC: .word wcmCpsifw + + arm_func_start WCM_GetApEssid +WCM_GetApEssid: ; 0x020A87E0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, #0x0 + mov r4, r0 + mov r6, r7 + bl WCMi_GetSystemWork + mov r5, r0 + bl OS_DisableInterrupts + 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 + 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 WCM_GetApMacAddress +WCM_GetApMacAddress: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + bl WCMi_GetSystemWork + mov r4, r0 + bl OS_DisableInterrupts + 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 WCMi_CpsifSendNullPacket +WCMi_CpsifSendNullPacket: ; 0x020A88A8 + stmdb sp!, {r4,lr} + bl WCMi_GetSystemWork + 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 ; =wcmCpsifw+0xC + bl WcmCpsifTryLockMutexInIRQ + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, _020A892C ; =0x00002144 + ldr r0, _020A8930 ; =WcmCpsifKACallback + 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 ; =wcmCpsifw+0xC + bl WcmCpsifUnlockMutexInIRQ + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A8928: .word wcmCpsifw+0xC +_020A892C: .word 0x00002144 +_020A8930: .word WcmCpsifKACallback + + arm_func_start WCMi_CpsifRecvCallback +WCMi_CpsifRecvCallback: ; 0x020A8934 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8978 ; =wcmCpsifw + 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 wcmCpsifw + + arm_func_start WCMi_InitCpsif +WCMi_InitCpsif: ; 0x020A897C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A89C8 ; =wcmCpsifw + ldrb r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A89CC ; =wcmCpsifw+0xC + 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 wcmCpsifw +_020A89CC: .word wcmCpsifw+0xC diff --git a/arm9/asm/WCM_system.s b/arm9/asm/WCM_system.s new file mode 100644 index 00000000..ff427b90 --- /dev/null +++ b/arm9/asm/WCM_system.s @@ -0,0 +1,2748 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global WCM_Bssid_Any +WCM_Bssid_Any: ; 0x020FF590 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 + + .global WCM_Essid_Any +WCM_Essid_Any: ; 0x020FF598 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + + .bss + + .global wcmw +wcmw: ; 0x021CA86C + .space 0x4 + + .text + + arm_func_start WcmCountBits +WcmCountBits: ; 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 WcmCountLeadingZero +WcmCountLeadingZero: ; 0x020A5A70 + clz r0, r0 + bx lr + + arm_func_start WcmWcmbReset +WcmWcmbReset: ; 0x020A5A78 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A5D80 + ldr r2, _020A5DA8 ; =wcmw + 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: ; jump table + b _020A5D4C ; case 0 + b _020A5D4C ; case 1 + b _020A5D4C ; case 2 + b _020A5D4C ; case 3 + b _020A5D4C ; case 4 + b _020A5AFC ; case 5 + b _020A5AFC ; case 6 + b _020A5B24 ; case 7 + b _020A5B4C ; case 8 + b _020A5C74 ; case 9 + b _020A5CA4 ; case 10 + b _020A5D4C ; case 11 + b _020A5C74 ; case 12 + b _020A5CD4 ; case 13 +_020A5AFC: + mov r0, #0x3 + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DAC ; =0x000008F5 + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5B24: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A5DB0 ; =0x000008FB + mov r1, r0 + mov r2, r0 + bl WcmNotify + 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 ; =WcmWmcbConnect + 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 WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DB8 ; =0x0000091C + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C14: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DBC ; =0x00000925 + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C44: + mov r0, #0x3 + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DC0 ; =0x0000092D + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C74: + mov r0, #0x3 + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DC4 ; =0x00000935 + ldr r1, [r0, #0x0] + mov r0, #0x0 + add r1, r1, #0x2140 + mov r2, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CA4: + mov r0, #0x3 + bl WcmSetPhase + ldr r1, _020A5DA8 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A5DC8 ; =0x0000093C + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CD4: + ldr r0, _020A5DCC ; =WcmWmcbCommon + 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 WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DD0 ; =0x0000094A + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D24: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DD4 ; =0x00000953 + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D4C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DD8 ; =0x00000959 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + mov r1, #0x0 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D80: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x960 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A5DA8: .word wcmw +_020A5DAC: .word 0x000008F5 +_020A5DB0: .word 0x000008FB +_020A5DB4: .word WcmWmcbConnect +_020A5DB8: .word 0x0000091C +_020A5DBC: .word 0x00000925 +_020A5DC0: .word 0x0000092D +_020A5DC4: .word 0x00000935 +_020A5DC8: .word 0x0000093C +_020A5DCC: .word WcmWmcbCommon +_020A5DD0: .word 0x0000094A +_020A5DD4: .word 0x00000953 +_020A5DD8: .word 0x00000959 + + arm_func_start WcmWmcbEndDCF +WcmWmcbEndDCF: ; 0x020A5DDC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A5EF4 +_020A5DF4: ; jump table + b _020A5E08 ; case 0 + b _020A5EDC ; case 1 + b _020A5EF4 ; case 2 + b _020A5EDC ; case 3 + b _020A5EF4 ; case 4 +_020A5E08: + ldr r0, _020A5F24 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5E38 + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E38: + ldr r0, _020A5F28 ; =WcmWmcbDisconnect + 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 WcmSetPhase + ldr r0, _020A5F24 ; =wcmw + ldr r3, _020A5F2C ; =0x000008B4 + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E94: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EAC: + mov r0, #0xb + bl WcmSetPhase + ldr r1, _020A5F24 ; =wcmw + mov r0, #0x7 + ldr r1, [r1, #0x0] + mov r2, #0x0 + add r1, r1, #0x2140 + mov r3, #0x8c0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EDC: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EF4: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5F24 ; =wcmw + ldr r3, _020A5F30 ; =0x000008D3 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A5F24: .word wcmw +_020A5F28: .word WcmWmcbDisconnect +_020A5F2C: .word 0x000008B4 +_020A5F30: .word 0x000008D3 + + arm_func_start WcmWmcbStartDCF +WcmWmcbStartDCF: ; 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 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5F94 + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A5F94: + mov r0, #0x9 + bl WcmSetPhase + ldr r1, _020A6048 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A604C ; =0x00000872 + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + 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 WCMi_ShelterRssi + ldr r0, [r4, #0x8] + mov r1, #0x620 + bl DC_InvalidateRange + ldr r0, [r4, #0x8] + bl WCMi_CpsifRecvCallback + ldmia sp!, {r4,lr} + bx lr +_020A5FF0: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6048 ; =wcmw + ldrh r2, [r4, #0x4] + ldr r0, [r0, #0x0] + ldr r3, _020A6050 ; =0x00000881 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A601C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6048 ; =wcmw + ldr r3, _020A6054 ; =0x0000088C + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A6048: .word wcmw +_020A604C: .word 0x00000872 +_020A6050: .word 0x00000881 +_020A6054: .word 0x0000088C + + arm_func_start WcmWmcbDisconnect +WcmWmcbDisconnect: ; 0x020A6058 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6108 +_020A6070: ; jump table + b _020A6084 ; case 0 + b _020A60F0 ; case 1 + b _020A6108 ; case 2 + b _020A60F0 ; case 3 + b _020A6108 ; case 4 +_020A6084: + ldr r0, _020A6138 ; =wcmw + ldr r1, [r0, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A60B4 + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + 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 WcmSetPhase + ldr r1, _020A6138 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A613C ; =0x0000083D + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A60F0: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6108: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6138 ; =wcmw + ldr r3, _020A6140 ; =0x0000084F + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6138: .word wcmw +_020A613C: .word 0x0000083D +_020A6140: .word 0x0000084F + + arm_func_start WcmWmcbConnect +WcmWmcbConnect: ; 0x020A6144 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r0, [r4, #0x2] + cmp r0, #0xc + addls pc, pc, r0, lsl #0x2 + b _020A638C +_020A615C: ; jump table + b _020A6190 ; case 0 + b _020A6364 ; case 1 + b _020A638C ; case 2 + b _020A638C ; case 3 + b _020A638C ; case 4 + b _020A638C ; case 5 + b _020A6378 ; case 6 + b _020A638C ; case 7 + b _020A638C ; case 8 + b _020A638C ; case 9 + b _020A638C ; case 10 + b _020A6378 ; case 11 + b _020A6378 ; case 12 +_020A6190: + ldrh r0, [r4, #0x8] + cmp r0, #0x9 + bgt _020A61D0 + cmp r0, #0x0 + addge pc, pc, r0, lsl #0x2 + b _020A6338 ; case 0 + b _020A6338 ; case 1 + b _020A6338 ; case 2 + b _020A6338 ; case 3 + b _020A6338 ; case 4 + b _020A6338 ; case 5 + b _020A6338 ; case 6 + b _020A63B0 ; case 7 + b _020A6258 ; case 8 + b _020A61E0 ; case 9 + b _020A61E0 ; case 10 +_020A61D0: + cmp r0, #0x1a + ldmeqia sp!, {r4,lr} + bxeq lr + b _020A6338 +_020A61E0: + ldr r1, _020A63B8 ; =wcmw + 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: ; jump table + b _020A6220 ; case 0 + b _020A6230 ; case 1 + b _020A6214 ; case 2 + b _020A63B0 ; case 3 + b _020A624C ; case 4 +_020A6214: + add r0, r2, #0x2200 + mov r1, #0x0 + strh r1, [r0, #0x82] +_020A6220: + mov r0, #0xc + bl WcmSetPhase + 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 WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A6258: + ldr r1, _020A63B8 ; =wcmw + ldr r3, [r1, #0x0] + add r0, r3, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A6284 + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + 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 ; =WcmWmcbStartDCF + 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 WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63C4 ; =0x000007ED + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A6300: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63C8 ; =0x000007F6 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A632C: + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A6338: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldrh r2, [r4, #0x8] + ldr r0, [r0, #0x0] + ldr r3, _020A63CC ; =0x00000804 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A6364: + ldr r0, _020A63B8 ; =wcmw + ldrh r1, [r4, #0xe] + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0xf8] +_020A6378: + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A638C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63D0 ; =0x0000081B + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify +_020A63B0: + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A63B8: .word wcmw +_020A63BC: .word 0x000007D7 +_020A63C0: .word WcmWmcbStartDCF +_020A63C4: .word 0x000007ED +_020A63C8: .word 0x000007F6 +_020A63CC: .word 0x00000804 +_020A63D0: .word 0x0000081B + + arm_func_start WcmWmcbEndScan +WcmWmcbEndScan: ; 0x020A63D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6438 +_020A63EC: ; jump table + b _020A6400 ; case 0 + b _020A6428 ; case 1 + b _020A6438 ; case 2 + b _020A6438 ; case 3 + b _020A6438 ; case 4 +_020A6400: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6460 ; =0x00000783 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6428: + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6438: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6464 ; =0x00000793 + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6460: .word 0x00000783 +_020A6464: .word 0x00000793 + + arm_func_start WcmWmcbScanEx +WcmWmcbScanEx: ; 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: ; jump table + b _020A649C ; case 0 + b _020A6704 ; case 1 + b _020A6714 ; case 2 + b _020A6714 ; case 3 + b _020A6714 ; case 4 +_020A649C: + ldr r0, _020A673C ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x5 + bne _020A64D0 + mov r0, #0x6 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6740 ; =0x00000704 + mov r1, r0 + mov r2, r0 + bl WcmNotify +_020A64D0: + ldr r1, _020A673C ; =wcmw + 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 WCMi_EntryApList + str r8, [sp, #0x0] + add r0, r5, r4, lsl #0x2 + ldr r2, [r0, #0x10] + mov r0, r7 + mov r1, r6 + mov r3, r5 + bl WcmNotifyEx + ldrh r0, [r5, #0xe] + add r4, r4, #0x1 + cmp r4, r0 + blt _020A6548 +_020A6588: + ldr r0, _020A673C ; =wcmw + 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 WcmCountBits + movs r1, r0 + beq _020A65F4 + ldr r0, _020A673C ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r6, [r0, #0x284] + mov r0, r6 + bl _u32_div_f + 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 WcmNotifyEx +_020A65F4: + ldrh r0, [r5, #0xa] + bl WcmCountLeadingZero + rsb r0, r0, #0x20 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl WcmGetNextScanChannel + ldr r1, _020A673C ; =wcmw + 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 ; =wcmw + ldr r2, _020A6750 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A6754 ; =WcmWmcbScanEx + 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 ; =WcmWmcbEndScan + bl WM_EndScan + mov r4, r0 + b _020A6694 +_020A6684: + bl WcmWmReset + 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 WcmSetPhase + mov r1, #0x0 + ldr r3, _020A675C ; =0x00000753 + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A66DC: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6760 ; =0x0000075C + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6704: + bl WcmWmReset + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6714: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6764 ; =0x0000076D + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A673C: .word wcmw +_020A6740: .word 0x00000704 +_020A6744: .word 0x0000071A +_020A6748: .word 0x00003FFE +_020A674C: .word 0x00000728 +_020A6750: .word 0x00002288 +_020A6754: .word WcmWmcbScanEx +_020A6758: .word WcmWmcbEndScan +_020A675C: .word 0x00000753 +_020A6760: .word 0x0000075C +_020A6764: .word 0x0000076D + + arm_func_start WcmWmcbCommon +WcmWmcbCommon: ; 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: ; jump table + b _020A6798 ; case 0 + b _020A69CC ; case 1 + b _020A6A0C ; case 2 + b _020A6A0C ; case 3 + b _020A6A0C ; case 4 +_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: ; jump table + b _020A692C ; case 0 + b _020A692C ; case 1 + b _020A692C ; case 2 + b _020A67F4 ; case 3 + b _020A6804 ; case 4 + b _020A6868 ; case 5 + b _020A6890 ; case 6 +_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 ; =WcmWmcbCommon + bl WM_PowerOn + mov r2, r0 + b _020A692C +_020A6804: + bl WM_Finish + cmp r0, #0x0 + beq _020A6818 + cmp r0, #0x4 + b _020A6840 +_020A6818: + mov r0, #0x1 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6A50 ; =0x00000663 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6840: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6A54 ; =0x0000066C + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6868: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6A58 ; =0x00000673 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6890: + ldr r0, _020A6A4C ; =WcmWmcbCommon + bl WM_Disable + mov r2, r0 + b _020A692C +_020A68A0: + ldr r0, _020A6A4C ; =WcmWmcbCommon + mov r1, #0x0 + bl WM_SetBeaconIndication + mov r2, r0 + b _020A692C +_020A68B4: + ldr r1, _020A6A5C ; =wcmw + ldr r0, _020A6A4C ; =WcmWmcbCommon + 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 ; =wcmw + 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 ; =WcmWmcbConnect + 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 WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + 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 WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A698C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + 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 WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A69CC: + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + 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 WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6A0C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + 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 WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6A4C: .word WcmWmcbCommon +_020A6A50: .word 0x00000663 +_020A6A54: .word 0x0000066C +_020A6A58: .word 0x00000673 +_020A6A5C: .word wcmw +_020A6A60: .word WcmWmcbConnect +_020A6A64: .word 0x000006AF +_020A6A68: .word 0x000006B8 +_020A6A6C: .word 0x000006DE +_020A6A70: .word 0x000006E8 + + arm_func_start WcmWmcbIndication +WcmWmcbIndication: ; 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 ; =wcmw + 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: ; jump table + b _020A6AEC ; case 0 + b _020A6B00 ; case 1 + b _020A6B10 ; case 2 + b _020A6B18 ; case 3 + b _020A6B00 ; case 4 +_020A6AEC: + mov r0, #0xc + bl WcmSetPhase + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B00: + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B10: + mov r0, #0xc + bl WcmSetPhase +_020A6B18: + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B24: .word wcmw + + arm_func_start WcmWmReset +WcmWmReset: ; 0x020A6B28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020A6B98 ; =wcmw + 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 ; =WcmWcmbReset + 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 WcmSetPhase + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x610 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B98: .word wcmw +_020A6B9C: .word WcmWcmbReset + + arm_func_start WcmKeepAliveAlarm +WcmKeepAliveAlarm: ; 0x020A6BA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_CpsifSendNullPacket + bl WCMi_ResetKeepAliveAlarm + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WCMi_ResetKeepAliveAlarm +WCMi_ResetKeepAliveAlarm: ; 0x020A6BBC + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + bl OS_DisableInterrupts + ldr r2, _020A6C28 ; =wcmw + ldr r1, _020A6C2C ; =0x000022CC + ldr r2, [r2, #0x0] + mov r4, r0 + add r0, r2, r1 + bl OS_CancelAlarm + ldr r0, _020A6C28 ; =wcmw + 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 ; =WcmKeepAliveAlarm + 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 wcmw +_020A6C2C: .word 0x000022CC +_020A6C30: .word 0x022F5341 +_020A6C34: .word WcmKeepAliveAlarm + + arm_func_start WcmSetPhase +WcmSetPhase: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A6CD0 ; =wcmw + 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 ; =wcmw + 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 ; =wcmw + str r2, [sp, #0x0] + ldr r5, [r0, #0x0] + ldr r0, _020A6CD4 ; =0x000022CC + ldr r1, _020A6CD8 ; =0x022F5341 + ldr r3, _020A6CDC ; =WcmKeepAliveAlarm + 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 wcmw +_020A6CD4: .word 0x000022CC +_020A6CD8: .word 0x022F5341 +_020A6CDC: .word WcmKeepAliveAlarm + + arm_func_start WcmNotifyEx +WcmNotifyEx: ; 0x020A6CE0 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr ip, _020A6D38 ; =wcmw + 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 wcmw + + arm_func_start WcmNotify +WcmNotify: ; 0x020A6D3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr ip, _020A6D88 ; =wcmw + 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 WcmNotifyEx + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6D88: .word wcmw + + arm_func_start WcmGetNextScanChannel +WcmGetNextScanChannel: ; 0x020A6D8C + stmdb sp!, {r4-r6,lr} + ldr r1, _020A6E24 ; =wcmw + 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 wcmw +_020A6E28: .word 0x4EC4EC4F +_020A6E2C: .word 0x0000000D + + arm_func_start WcmInitOption +WcmInitOption: ; 0x020A6E30 + ldr r0, _020A6E48 ; =wcmw + ldr r1, _020A6E4C ; =0x00AAA082 + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x264] + bx lr + .balign 4 +_020A6E48: .word wcmw +_020A6E4C: .word 0x00AAA082 + + arm_func_start WcmEditScanExParam +WcmEditScanExParam: ; 0x020A6E50 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r0, r2 + mov r4, r1 + bl WCM_UpdateOption + ldr r2, _020A6FF4 ; =wcmw + 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 WcmGetNextScanChannel + ldr r1, _020A6FF4 ; =wcmw + 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 ; =wcmw + 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 ; =wcmw + ldr r1, _020A6FF8 ; =0x00002292 + ldr r2, [r0, #0x0] + ldr r0, _020A6FFC ; =WCM_Bssid_Any + add r1, r2, r1 + mov r2, #0x6 + bl MI_CpuCopy8 + b _020A6F40 +_020A6F24: + ldr r0, _020A6FF4 ; =wcmw + 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 ; =WCM_Essid_Any + cmp r4, r0 + bne _020A6F88 +_020A6F54: + ldr r0, _020A6FF4 ; =wcmw + ldr r1, _020A7004 ; =0x0000229C + ldr r2, [r0, #0x0] + ldr r0, _020A7000 ; =WCM_Essid_Any + add r1, r2, r1 + mov r2, #0x20 + bl MI_CpuCopy8 + ldr r0, _020A6FF4 ; =wcmw + mov r1, #0x0 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] + b _020A6FD4 +_020A6F88: + ldr r0, _020A6FF4 ; =wcmw + 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 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] +_020A6FD4: + ldr r0, _020A6FF4 ; =wcmw + 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 wcmw +_020A6FF8: .word 0x00002292 +_020A6FFC: .word WCM_Bssid_Any +_020A7000: .word WCM_Essid_Any +_020A7004: .word 0x0000229C + + arm_func_start WcmConfigure +WcmConfigure: ; 0x020A7008 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + bne _020A705C + ldr r1, _020A7134 ; =wcmw + 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 ; =wcmw + 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 ; =wcmw + ldr r1, [r5, #0xc] + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x278] +_020A7118: + ldr r0, _020A7134 ; =wcmw + 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 wcmw + + arm_func_start WCMi_GetSystemWork +WCMi_GetSystemWork: + ldr r0, _020A7144 ; =wcmw + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020A7144: .word wcmw + + arm_func_start WCM_UpdateOption +WCM_UpdateOption: ; 0x020A7148 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A71EC ; =wcmw + 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 wcmw +_020A71F0: .word 0x00003FFE +_020A71F4: .word 0x0000A082 + + arm_func_start WCM_GetPhase +WCM_GetPhase: ; 0x020A71F8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7228 ; =wcmw + 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 wcmw + + arm_func_start WCM_TerminateAsync +WCM_TerminateAsync: ; 0x020A722C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020A747C ; =wcmw + 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: ; jump table + b _020A7308 ; case 0 + b _020A72C0 ; case 1 + b _020A7308 ; case 2 + b _020A7320 ; case 3 + b _020A7308 ; case 4 + b _020A7308 ; case 5 + b _020A72D4 ; case 6 + b _020A7308 ; case 7 + b _020A7308 ; case 8 + b _020A7320 ; case 9 + b _020A7308 ; case 10 + b _020A7308 ; case 11 + b _020A7320 ; case 12 + b _020A72AC ; case 13 +_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 WcmSetPhase + ldr r1, _020A747C ; =wcmw + 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 WcmSetPhase + ldr r0, _020A747C ; =wcmw + 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 + cmp r0, #0x0 + bne _020A73F0 + mov r0, #0x1 + bl WcmSetPhase + ldr r1, _020A747C ; =wcmw + 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 ; =WcmWmcbCommon + bl WM_Disable + b _020A73F0 +_020A73C8: + ldr r0, _020A7480 ; =WcmWmcbCommon + bl WM_PowerOff + b _020A73F0 +_020A73D4: + ldr r1, _020A747C ; =wcmw + ldr r0, _020A7484 ; =WcmWcmbReset + 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 WcmSetPhase + ldr r0, _020A747C ; =wcmw + 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 WcmSetPhase + 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 wcmw +_020A7480: .word WcmWmcbCommon +_020A7484: .word WcmWcmbReset + + arm_func_start WCM_DisconnectAsync +WCM_DisconnectAsync: ; 0x020A7488 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A75B8 ; =wcmw + 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 + 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 WcmSetPhase + ldr r0, _020A75B8 ; =wcmw + mov r1, #0x6 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A75A4 +_020A7530: + ldr r0, _020A75BC ; =WcmWmcbEndDCF + 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 WcmSetPhase + ldr r0, _020A75B8 ; =wcmw + 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 WcmSetPhase + 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 wcmw +_020A75BC: .word WcmWmcbEndDCF + + arm_func_start WCM_ConnectAsync +WCM_ConnectAsync: ; 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 ; =wcmw + 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 ; =wcmw + mov r0, r7 + ldr r1, [r1, #0x0] + mov r2, #0xc0 + add r1, r1, #0x2140 + bl MI_CpuCopy8 + ldr r1, _020A7814 ; =wcmw + mov r0, r5 + ldr r1, [r1, #0x0] + add r1, r1, #0x2100 + ldrh r2, [r1, #0x6e] + orr r2, r2, #0x3 + strh r2, [r1, #0x70] + bl WCM_UpdateOption + 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 ; =WcmWmcbCommon + 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 WcmSetPhase + ldr r0, _020A7814 ; =wcmw + 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 WcmSetPhase + 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 wcmw +_020A7818: .word 0x0000FFFF +_020A781C: .word WcmWmcbCommon + + arm_func_start WCM_EndSearchAsync +WCM_EndSearchAsync: ; 0x020A7820 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A78D4 ; =wcmw + 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 WcmSetPhase + ldr r0, _020A78D4 ; =wcmw + 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 + 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 wcmw + + arm_func_start WCM_BeginSearchAsync +WCM_BeginSearchAsync: ; 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 ; =wcmw + 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 WcmEditScanExParam + 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 WcmEditScanExParam + 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 WcmEditScanExParam + ldr r0, _020A7A84 ; =wcmw + 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 ; =wcmw + ldr r2, _020A7A88 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A7A8C ; =WcmWmcbScanEx + 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 WcmSetPhase + ldr r0, _020A7A84 ; =wcmw + 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 WcmSetPhase + 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 wcmw +_020A7A88: .word 0x00002288 +_020A7A8C: .word WcmWmcbScanEx + + arm_func_start WCM_SearchAsync +WCM_SearchAsync: ; 0x020A7A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020A7AA8 + cmp r1, #0x0 + bne _020A7AB8 +_020A7AA8: + bl WCM_EndSearchAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A7AB8: + bl WCM_BeginSearchAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WCM_CleanupAsync +WCM_CleanupAsync: ; 0x020A7AC8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7BCC ; =wcmw + 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 + 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 ; =WcmWmcbCommon + 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 WcmSetPhase + ldr r0, _020A7BCC ; =wcmw + 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 WcmSetPhase + 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 wcmw +_020A7BD0: .word WcmWmcbCommon + + arm_func_start WCM_StartupAsync +WCM_StartupAsync: ; 0x020A7BD4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r1, _020A7E00 ; =wcmw + 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 WcmConfigure + b _020A7C6C +_020A7C3C: + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C4C: + bl OS_RestoreInterrupts + 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 ; =wcmw + 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: ; jump table + b _020A7CFC ; case 0 + b _020A7CE0 ; case 1 + b _020A7CE0 ; case 2 + b _020A7CB0 ; case 3 + b _020A7CCC ; case 4 + b _020A7CE0 ; case 5 + b _020A7CE0 ; case 6 +_020A7CB0: + mov r0, #0xb + bl WcmSetPhase + 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 WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CFC: + bl WM_GetAllowedChannel + cmp r0, #0x0 + bne _020A7D44 + bl WM_Finish + cmp r0, #0x0 + beq _020A7D30 + mov r0, #0xb + bl WcmSetPhase + 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 ; =WcmWmcbIndication + bl WM_SetIndCallback + cmp r0, #0x0 + beq _020A7D70 + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D70: + ldr r0, _020A7E08 ; =WcmWmcbCommon + 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 WcmSetPhase + ldr r0, _020A7E00 ; =wcmw + mov r1, #0x1 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7DEC +_020A7DB4: + mov r0, #0xc + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7DD0: + mov r0, #0xb + bl WcmSetPhase + 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 wcmw +_020A7E04: .word WcmWmcbIndication +_020A7E08: .word WcmWmcbCommon + + arm_func_start WCM_Finish +WCM_Finish: ; 0x020A7E0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r2, _020A7E7C ; =wcmw + 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 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A7E7C: .word wcmw + + arm_func_start WCM_Init +WCM_Init: ; 0x020A7E80 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r2, _020A7FA8 ; =wcmw + 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 WcmInitOption + bl WCMi_InitCpsif + bl OS_IsTickAvailable + cmp r0, #0x0 + bne _020A7F70 + bl OS_InitTick +_020A7F70: + bl OS_IsAlarmAvailable + cmp r0, #0x0 + bne _020A7F80 + bl OS_InitAlarm +_020A7F80: + ldr r1, _020A7FA8 ; =wcmw + ldr r0, _020A7FAC ; =0x000022CC + ldr r1, [r1, #0x0] + add r0, r1, r0 + bl OS_CreateAlarm + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A7FA8: .word wcmw +_020A7FAC: .word 0x000022CC diff --git a/arm9/asm/WCM_util.s b/arm9/asm/WCM_util.s new file mode 100644 index 00000000..e5ba5702 --- /dev/null +++ b/arm9/asm/WCM_util.s @@ -0,0 +1,156 @@ + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global wcmRssiIndex +wcmRssiIndex: ; 0x021CA89C + .space 0x4 + + .global wcmRssi +wcmRssi: ; 0x021CA8A0 + .space 0x10 + + .text + + arm_func_start WCMi_ShelterRssi +WCMi_ShelterRssi: ; 0x020A89D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020A8A48 ; =wcmRssiIndex + 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 ; =wcmRssi + 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 wcmRssiIndex +_020A8A4C: .word wcmRssi + + arm_func_start WcmGetLinkLevel +WcmGetLinkLevel: ; 0x020A8A50 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_GetRssiAverage + 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 WCMi_GetRssiAverage +WCMi_GetRssiAverage: ; 0x020A8A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8B20 ; =wcmRssiIndex + mov r0, #0x0 + ldrb r1, [r1, #0x0] + cmp r1, #0x10 + bls _020A8ADC + ldr r2, _020A8B24 ; =wcmRssi + 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 ; =wcmRssi +_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 wcmRssiIndex +_020A8B24: .word wcmRssi + + arm_func_start WCM_GetLinkLevel +WCM_GetLinkLevel: ; 0x020A8B28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + mov r4, #0x0 + beq _020A8B60 + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A8B60 + bl WcmGetLinkLevel + 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 WCM_CompareBssID +WCM_CompareBssID: + 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 diff --git a/arm9/asm/WIFI_stubsmd5_dummy.s b/arm9/asm/WIFI_stubsmd5_dummy.s new file mode 100644 index 00000000..dd3f79a7 --- /dev/null +++ b/arm9/asm/WIFI_stubsmd5_dummy.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MD5Final +MD5Final: ; 0x020A8BA4 + ldr ip, _020A8BAC ; =DGT_Hash1GetDigest_R + bx r12 + .balign 4 +_020A8BAC: .word DGT_Hash1GetDigest_R + + arm_func_start MD5Update +MD5Update: ; 0x020A8BB0 + ldr ip, _020A8BB8 ; =DGT_Hash1SetSource + bx r12 + .balign 4 +_020A8BB8: .word DGT_Hash1SetSource + + arm_func_start MD5Init +MD5Init: ; 0x020A8BBC + ldr ip, _020A8BC4 ; =DGT_Hash1Reset + bx r12 + .balign 4 +_020A8BC4: .word DGT_Hash1Reset diff --git a/arm9/asm/libVCT.s b/arm9/asm/libVCT.s new file mode 100644 index 00000000..ee05bcce --- /dev/null +++ b/arm9/asm/libVCT.s @@ -0,0 +1,6020 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global cAdpcmIndexTable2 +cAdpcmIndexTable2: ; 0x020FF5B8 + .byte 0xFF, 0x01, 0xFF, 0x01 + + .global cAdpcmIndexTable3 +cAdpcmIndexTable3: ; 0x020FF5BC + .byte 0xFF, 0xFF, 0x01, 0x02, 0xFF, 0xFF, 0x01, 0x02 + + .global cAdpcmIndexTable4 +cAdpcmIndexTable4: ; 0x020FF5C4 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x04, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x04, 0x06, 0x08 + + .global cAdpcmStepSizeTable +cAdpcmStepSizeTable: ; 0x020FF5D4 + .byte 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00 + .byte 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x15, 0x00, 0x17, 0x00, 0x19, 0x00, 0x1C, 0x00, 0x1F, 0x00 + .byte 0x22, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x37, 0x00, 0x3C, 0x00, 0x42, 0x00 + .byte 0x49, 0x00, 0x50, 0x00, 0x58, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x76, 0x00, 0x82, 0x00, 0x8F, 0x00 + .byte 0x9D, 0x00, 0xAD, 0x00, 0xBE, 0x00, 0xD1, 0x00, 0xE6, 0x00, 0xFD, 0x00, 0x17, 0x01, 0x33, 0x01 + .byte 0x51, 0x01, 0x73, 0x01, 0x98, 0x01, 0xC1, 0x01, 0xEE, 0x01, 0x20, 0x02, 0x56, 0x02, 0x92, 0x02 + .byte 0xD4, 0x02, 0x1C, 0x03, 0x6C, 0x03, 0xC3, 0x03, 0x24, 0x04, 0x8E, 0x04, 0x02, 0x05, 0x83, 0x05 + .byte 0x10, 0x06, 0xAB, 0x06, 0x56, 0x07, 0x12, 0x08, 0xE0, 0x08, 0xC3, 0x09, 0xBD, 0x0A, 0xD0, 0x0B + .byte 0xFF, 0x0C, 0x4C, 0x0E, 0xBA, 0x0F, 0x4C, 0x11, 0x07, 0x13, 0xEE, 0x14, 0x06, 0x17, 0x54, 0x19 + .byte 0xDC, 0x1B, 0xA5, 0x1E, 0xB6, 0x21, 0x15, 0x25, 0xCA, 0x28, 0xDF, 0x2C, 0x5B, 0x31, 0x4B, 0x36 + .byte 0xB9, 0x3B, 0xB2, 0x41, 0x44, 0x48, 0x7E, 0x4F, 0x71, 0x57, 0x2F, 0x60, 0xCE, 0x69, 0x62, 0x74 + .byte 0xFF, 0x7F, 0x00, 0x00 + + .global sCodecInfo +sCodecInfo: ; 0x020FF688 + .byte 0x08, 0x00, 0x08, 0x00, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00 + + .global UNK_020FF694 +UNK_020FF694: ; 0x020FF694 + .byte 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02 + .byte 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00 + + .global UNK_020FF6AC +UNK_020FF6AC: ; 0x020FF6AC + .byte 0x01, 0x08, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00 + + .global UNK_020FF6B4 +UNK_020FF6B4: ; 0x020FF6B4 + .byte 0x07, 0x0C, 0x02, 0x03, 0x09, 0x02, 0x00, 0x00 + + .global UNK_020FF6BC +UNK_020FF6BC: ; 0x020FF6BC + .byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF + .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x05, 0xFE + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF + .byte 0x00, 0xFF, 0x00, 0x00 + + .global UNK_020FF700 +UNK_020FF700: ; 0x020FF700 + .byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF + .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0xFF, 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF + .byte 0x00, 0xFF, 0x00, 0x00 + + .global UNK_020FF744 +UNK_020FF744: ; 0x020FF744 + .byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE + .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE + .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE + .byte 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE + .byte 0x00, 0xFE, 0x00, 0x00 + + .global UNK_020FF788 +UNK_020FF788: ; 0x020FF788 + .byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x05, 0x05, 0xFE, 0xFF + .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE + .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE + .byte 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE + .byte 0x00, 0xFE, 0x00, 0x00 + + .section .data + + .global UNK_0210646C +UNK_0210646C: ; 0x0210646C + .byte 0x01, 0x00, 0x00, 0x00 + + .global UNK_02106470 +UNK_02106470: ; 0x02106470 + .byte 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00 + .byte 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00 + + .global UNK_02106490 +UNK_02106490: ; 0x02106490 + .byte 0xF7, 0xB5, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global UNK_02106498 +UNK_02106498: ; 0x02106498 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00 + + .global UNK_021064A8 +UNK_021064A8: ; 0x021064A8 + .byte 0xFB, 0xE9, 0x3D, 0x40, 0xBC, 0xC7, 0xD1, 0x2C, 0x2A, 0xD0, 0x7C, 0x03, 0xF0, 0x08, 0x93, 0xF5 + + .bss + + .global UNK_021CA8B0 +UNK_021CA8B0: ; 0x021CA8B0 + .space 0x4 + + .global sBitmap +sBitmap: ; 0x021CA8B4 + .space 0x4 + + .global UNK_021CA8B8 +UNK_021CA8B8: ; 0x021CA8B8 + .space 0x4 + + .global UNK_021CA8BC +UNK_021CA8BC: ; 0x021CA8BC + .space 0x4 + + .global UNK_021CA8C0 +UNK_021CA8C0: ; 0x021CA8C0 + .space 0x4 + + .global UNK_021CA8C4 +UNK_021CA8C4: ; 0x021CA8C4 + .space 0x4 + + .global UNK_021CA8C8 +UNK_021CA8C8: ; 0x021CA8C8 + .space 0x4 + + .global UNK_021CA8CC +UNK_021CA8CC: ; 0x021CA8CC + .space 0x4 + + .global sNumStream +sNumStream: ; 0x021CA8D0 + .space 0x4 + + .global UNK_021CA8D4 +UNK_021CA8D4: ; 0x021CA8D4 + .space 0x4 + + .global UNK_021CA8D8 +UNK_021CA8D8: ; 0x021CA8D8 + .space 0x4 + + .global UNK_021CA8DC +UNK_021CA8DC: ; 0x021CA8DC + .space 0xc + + .global sStream +sStream: ; 0x021CA8E8 + .space 0x1bc + + .global UNK_021CAAA4 +UNK_021CAAA4: ; 0x021CAAA4 + .space 0x45c + + .global UNK_021CAF00 +UNK_021CAF00: ; 0x021CAF00 + .space 0x8d8 + + .global UNK_021CB7D8 +UNK_021CB7D8: ; 0x021CB7D8 + .space 0x4 + + .global UNK_021CB7DC +UNK_021CB7DC: ; 0x021CB7DC + .space 0x4 + + .global UNK_021CB7E0 +UNK_021CB7E0: ; 0x021CB7E0 + .space 0xc + + .global UNK_021CB7EC +UNK_021CB7EC: ; 0x021CB7EC + .space 0x4 + + .global UNK_021CB7F0 +UNK_021CB7F0: ; 0x021CB7F0 + .space 0xc + + .global sCount +sCount: ; 0x021CB7FC + .space 0xc + + .global UNK_021CB808 +UNK_021CB808: ; 0x021CB808 + .space 0xc + + .global UNK_021CB814 +UNK_021CB814: ; 0x021CB814 + .space 0x4 + + .global UNK_021CB818 +UNK_021CB818: ; 0x021CB818 + .space 0x4 + + .global UNK_021CB81C +UNK_021CB81C: ; 0x021CB81C + .space 0x8 + + .global UNK_021CB824 +UNK_021CB824: ; 0x021CB824 + .space 0x14 + + .global UNK_021CB838 +UNK_021CB838: ; 0x021CB838 + .space 0x18 + + .global UNK_021CB850 +UNK_021CB850: ; 0x021CB850 + .space 0x18 + + .global UNK_021CB868 +UNK_021CB868: ; 0x021CB868 + .space 0x4 + + .global UNK_021CB86C +UNK_021CB86C: ; 0x021CB86C + .space 0x4 + + .global UNK_021CB870 +UNK_021CB870: ; 0x021CB870 + .space 0x4 + + .global UNK_021CB874 +UNK_021CB874: ; 0x021CB874 + .space 0x4 + + .global UNK_021CB878 +UNK_021CB878: ; 0x021CB878 + .space 0x4 + + .global UNK_021CB87C +UNK_021CB87C: ; 0x021CB87C + .space 0x4 + + .global UNK_021CB880 +UNK_021CB880: ; 0x021CB880 + .space 0x10 + + .global UNK_021CB890 +UNK_021CB890: ; 0x021CB890 + .space 0x4 + + .global UNK_021CB894 +UNK_021CB894: ; 0x021CB894 + .space 0x4 + + .global UNK_021CB898 +UNK_021CB898: ; 0x021CB898 + .space 0x4 + + .global UNK_021CB89C +UNK_021CB89C: ; 0x021CB89C + .space 0x4 + + .global UNK_021CB8A0 +UNK_021CB8A0: ; 0x021CB8A0 + .space 0x4 + + .global UNK_021CB8A4 +UNK_021CB8A4: ; 0x021CB8A4 + .space 0x18 + + .global UNK_021CB8BC +UNK_021CB8BC: ; 0x021CB8BC + .space 0x18 + + .global UNK_021CB8D4 +UNK_021CB8D4: ; 0x021CB8D4 + .space 0x440 + + .global UNK_021CBD14 +UNK_021CBD14: ; 0x021CBD14 + .space 0x1000 + + .global UNK_021CCD14 +UNK_021CCD14: ; 0x021CCD14 + .space 0x4 + + .global sRecvPerFrame +sRecvPerFrame: ; 0x021CCD18 + .space 0x4 + + .global initialized +initialized: ; 0x021CCD1C + .space 0x4 + + .global __vct +__vct: ; 0x021CCD20 + .space 0x18 + + .text + +; libvct.a:adpcm.o + + arm_func_start vct_encode_adpcm +vct_encode_adpcm: ; 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 vct_encode_adpcm_16 + ldmia sp!, {r4,pc} +_020A8C10: + add r0, r0, #0x4 + bl vct_encode_adpcm_24 + ldmia sp!, {r4,pc} +_020A8C1C: + add r0, r0, #0x4 + bl vct_encode_adpcm_32 + ldmia sp!, {r4,pc} + + arm_func_start vct_decode_adpcm +vct_decode_adpcm: ; 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 vct_decode_adpcm_16 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020A8C78: + add r3, sp, #0x0 + add r0, r0, #0x4 + sub r2, r2, #0x4 + bl vct_decode_adpcm_24 + add sp, sp, #0x4 + ldmia sp!, {pc} +_020A8C90: + add r3, sp, #0x0 + add r0, r0, #0x4 + sub r2, r2, #0x4 + bl vct_decode_adpcm_32 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start vct_encode_adpcm_16 +vct_encode_adpcm_16: ; 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} + mov r5, #0x8000 + ldr fp, _020A8F4C ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 cAdpcmStepSizeTable +_020A8F50: .word 0x00007FFF +_020A8F54: .word cAdpcmIndexTable2 + + arm_func_start vct_decode_adpcm_16 +vct_decode_adpcm_16: ; 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} + mov r4, #0x8000 + rsb r6, r4, #0x0 + ldr r5, _020A91CC ; =0x00007FFF + ldr fp, _020A91D0 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 ; =cAdpcmIndexTable2 + 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 cAdpcmStepSizeTable +_020A91D4: .word cAdpcmIndexTable2 + + arm_func_start vct_encode_adpcm_24 +vct_encode_adpcm_24: ; 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} + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 cAdpcmStepSizeTable +_020A97D8: .word cAdpcmIndexTable3 + + arm_func_start vct_decode_adpcm_24 +vct_decode_adpcm_24: ; 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} + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable3 + 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 cAdpcmStepSizeTable +_020A9D14: .word cAdpcmIndexTable3 + + arm_func_start vct_encode_adpcm_32 +vct_encode_adpcm_32: ; 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} + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable4 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable4 + 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 cAdpcmStepSizeTable +_020A9F0C: .word cAdpcmIndexTable4 + + arm_func_start vct_decode_adpcm_32 +vct_decode_adpcm_32: ; 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} + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable4 + 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 ; =cAdpcmStepSizeTable + 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 ; =cAdpcmIndexTable4 + 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 cAdpcmStepSizeTable +_020AA0A0: .word cAdpcmIndexTable4 + +; libvct.a:audio.o + + arm_func_start vct_flush_send_buffer +vct_flush_send_buffer: + stmdb sp!, {r4-r8,lr} + ldr r0, _020AA1B4 ; =sNumStream + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r8,pc} + ldr r1, _020AA1B8 ; =UNK_021CAF00 + ldr r0, [r1, #0x8c8] + cmp r0, #0x0 + bne _020AA0FC + bl FUN_020AA4C0 + ldr r1, _020AA1B8 ; =UNK_021CAF00 + cmp r0, #0x0 + str r0, [r1, #0x8c8] + beq _020AA0F4 + ldr r0, _020AA1BC ; =UNK_021CA8C8 + 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 ; =__vct + mov r5, #0x1 + ldr r0, [r0, #0x10] + cmp r0, #0x2 + bne _020AA130 + ldr r3, [r1, #0x8d4] + ldr r2, _020AA1C4 ; =UNK_020FF694 + 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 ; =UNK_021CAF00 + mov r8, #0x80000000 + ldr r6, _020AA1C8 ; =UNK_021CA8BC + 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 MOD04_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 sNumStream +_020AA1B8: .word UNK_021CAF00 +_020AA1BC: .word UNK_021CA8C8 +_020AA1C0: .word __vct +_020AA1C4: .word UNK_020FF694 +_020AA1C8: .word UNK_021CA8BC + + arm_func_start vct_decode_audio_buffer +vct_decode_audio_buffer: ; 0x020AA1CC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + bl FUN_020AB154 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + 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 vct_decode_adpcm + 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 + cmp r0, #0x0 + bge _020AA288 + mov r0, r4 + bl vct_free_packet_buffer +_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 vct_handle_audio +vct_handle_audio: ; 0x020AA2A0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r4, _020AA4A8 ; =sNumStream + 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} + ldr r1, _020AA4AC ; =sStream + mov r2, r5 +_020AA2E0: + ldr r0, [r1, #0x38] + cmp r10, r0 + ldreq r1, _020AA4AC ; =sStream + 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} + 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} + 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} + ldr r1, _020AA4B0 ; =sCodecInfo+1 + ldr r0, _020AA4B4 ; =sCodecInfo + 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} + cmp r10, #0x0 + movne r0, #0x1 + movne r1, r0, lsl r10 + ldr r0, _020AA4B8 ; =sBitmap + moveq r1, #0x1 + ldr r0, [r0, #0x0] + ands r0, r0, r1 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} + bl vct_alloc_packet_buffer + movs r6, r0 + bne _020AA40C + ldr r0, [r5, #0x34] + bl vct_flush_audio_queue + ldr r0, [r5, #0x34] + bl FUN_020AB234 + bl vct_alloc_packet_buffer + movs r6, r0 + bne _020AA3FC + bl FUN_020AB630 + bl FUN_020AB1E4 + bl vct_alloc_packet_buffer + 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 vct_calc_jitter_and_skew + cmp r0, #0x0 + bne _020AA494 + mov r0, r6 + bl vct_free_packet_buffer + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020AA494: + mov r0, r6 + bl vct_insert_decoder + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AA4A8: .word sNumStream +_020AA4AC: .word sStream +_020AA4B0: .word sCodecInfo+1 +_020AA4B4: .word sCodecInfo +_020AA4B8: .word sBitmap +_020AA4BC: .word 0x0000045C + + arm_func_start FUN_020AA4C0 +FUN_020AA4C0: ; 0x020AA4C0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r0, _020AA728 ; =UNK_021CAF00 + ldr r1, _020AA72C ; =UNK_021CA8CC + 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} + ldr r0, _020AA728 ; =UNK_021CAF00 + ldr r0, [r0, #0x8c0] + ands r0, r0, #0x1 + movne r1, #0x0 + moveq r1, #0x460 + ldr r0, _020AA728 ; =UNK_021CAF00 + cmp r5, #0x2 + add r8, r0, r1 + ldr r1, _020AA730 ; =UNK_021CA8D4 + 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 ; =UNK_021CA8C8 + ldr r1, _020AA740 ; =0x040002B4 + ldr r0, [r0, #0x0] + ldr r4, [r1, #0x0] + cmp r0, #0x0 + beq _020AA588 + ldr r1, _020AA730 ; =UNK_021CA8D4 + mov r0, r7 + ldr r1, [r1, #0x0] + mov r2, r4 + bl FUN_020AD1CC +_020AA588: + ldr r0, _020AA744 ; =UNK_0210646C + 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 ; =UNK_021CA8D8 + 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 ; =UNK_021CAF00 + 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 ; =UNK_0210646C + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020AA62C + ldr r0, _020AA74C ; =UNK_021CA8B8 + 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 ; =UNK_021CA8C4 + 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 ; =UNK_021CA8C0 + ands r0, r0, #0x80 + ldrne r0, _020AA754 ; =UNK_021CA8C0 + movne r1, #0x0 + strneh r1, [r0, #0x0] + strneb r1, [r0, #0x2] + ldr r0, _020AA730 ; =UNK_021CA8D4 + str r5, [sp, #0x0] + ldr r2, [r0, #0x0] + mov r1, r7 + sub r0, r7, #0x4 + mov r2, r2, lsr #0x1 + bl vct_encode_adpcm + b _020AA6D4 +_020AA690: + cmp r5, #0x1 + bne _020AA6B4 + ldr r1, _020AA730 ; =UNK_021CA8D4 + 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 ; =UNK_021CA8D4 + mov r0, r7 + ldr r2, [r1, #0x0] + mov r1, r7 + mov r2, r2, lsr #0x1 + bl FUN_020AB2FC +_020AA6D4: + ldr r0, _020AA758 ; =__vct + ldr r1, _020AA75C ; =sBitmap + ldrb r0, [r0, #0x0] + mov r2, #0x1 + ldr r3, [r1, #0x0] + mvn r0, r2, lsl r0 + ldr r1, _020AA728 ; =UNK_021CAF00 + and r0, r3, r0 + str r3, [r1, #0x8cc] + str r0, [r1, #0x8cc] + bl MATH_CountPopulation + sub r0, r0, #0x1 + ldr r1, _020AA728 ; =UNK_021CAF00 + 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 UNK_021CAF00 +_020AA72C: .word UNK_021CA8CC +_020AA730: .word UNK_021CA8D4 +_020AA734: .word 0x040002B0 +_020AA738: .word 0x040002B8 +_020AA73C: .word UNK_021CA8C8 +_020AA740: .word 0x040002B4 +_020AA744: .word UNK_0210646C +_020AA748: .word UNK_021CA8D8 +_020AA74C: .word UNK_021CA8B8 +_020AA750: .word UNK_021CA8C4 +_020AA754: .word UNK_021CA8C0 +_020AA758: .word __vct +_020AA75C: .word sBitmap + + arm_func_start FUN_020AA760 +FUN_020AA760: ; 0x020AA760 + ldr r1, _020AA76C ; =UNK_021CA8C8 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020AA76C: .word UNK_021CA8C8 + + arm_func_start FUN_020AA770 +FUN_020AA770: ; 0x020AA770 + stmdb sp!, {r4,lr} + ldr r1, _020AA798 ; =UNK_0210646C + mov r4, r0 + str r4, [r1, #0x0] + bl FUN_020AD170 + cmp r4, #0x0 + ldreq r0, _020AA79C ; =UNK_021CA8B8 + moveq r1, #0x1 + streq r1, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AA798: .word UNK_0210646C +_020AA79C: .word UNK_021CA8B8 + + arm_func_start FUN_020AA7A0 +FUN_020AA7A0: ; 0x020AA7A0 + cmp r0, #0x5 + movge r0, #0x0 + bxge lr + ldr r1, _020AA80C ; =__vct + ldr r1, [r1, #0x10] + cmp r1, #0x1 + beq _020AA7C8 + cmp r0, #0x1 + movls r0, #0x0 + bxls lr +_020AA7C8: + ldr r2, _020AA810 ; =sCodecInfo+1 + ldr r1, _020AA814 ; =sCodecInfo + ldrb r12, [r2, r0, lsl #0x1] + ldrb r3, [r1, r0, lsl #0x1] + mov r1, #0x44 + ldr r2, _020AA818 ; =UNK_021CA8CC + mla r12, r3, r1, r12 + str r0, [r2, #0x0] + ldr r1, _020AA81C ; =UNK_021CA8BC + add r3, r12, #0xc + ldr r0, _020AA820 ; =UNK_021CA8C0 + mov r2, #0x0 + str r3, [r1, #0x0] + strh r2, [r0, #0x0] + strb r2, [r0, #0x2] + mov r0, #0x1 + bx lr + .balign 4 +_020AA80C: .word __vct +_020AA810: .word sCodecInfo+1 +_020AA814: .word sCodecInfo +_020AA818: .word UNK_021CA8CC +_020AA81C: .word UNK_021CA8BC +_020AA820: .word UNK_021CA8C0 + + 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 ; =UNK_021CA8D4 + mov r6, r1 + ldr r0, [r0, #0x0] + mov r4, #0x0 + cmp r6, r0 + bne _020AA920 + ldr r8, _020AA95C ; =sNumStream + 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 ; =sNumStream + add r10, r9, #0x1 + ldr r0, [r8, #0x0] + cmp r10, r0 + moveq r4, #0x1 + beq _020AA934 + cmp r10, r0 + bhs _020AA934 + ldr sb, _020AA960 ; =UNK_021CAAA4 +_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 vct_mix_audio +_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 ; =UNK_021CA8C8 + 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 UNK_021CA8D4 +_020AA95C: .word sNumStream +_020AA960: .word UNK_021CAAA4 +_020AA964: .word UNK_021CA8C8 + + arm_func_start FUN_020AA968 +FUN_020AA968: ; 0x020AA968 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r4, _020AABD4 ; =sStream + 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 vct_top_audio_queue + 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 vct_free_packet_buffer + 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 vct_top_audio_queue + 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 vct_top_audio_queue + 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 vct_free_packet_buffer + mov r0, #0x0 + str r0, [r6, #0x3c] +_020AABC8: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020AABD4: .word sStream +_020AABD8: .word 0x00008B4C + + arm_func_start FUN_020AABDC +FUN_020AABDC: ; 0x020AABDC + stmdb sp!, {r4,lr} + ldr r3, _020AACE0 ; =UNK_021CA8D4 + mov r2, r1 + ldr r1, [r3, #0x0] + mov r12, #0x0 + cmp r2, r1 + movne r0, r12 + ldmneia sp!, {r4,pc} + ldr r1, _020AACE4 ; =sNumStream + ldr r4, [r1, #0x0] + cmp r4, #0x0 + moveq r0, r12 + ldmeqia sp!, {r4,pc} + mov lr, r12 + cmp r4, #0x0 + bls _020AAC48 + ldr r3, _020AACE8 ; =UNK_021CA8DC +_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} + ldr r1, _020AACEC ; =UNK_021CAF00 + ldr r4, _020AACEC ; =UNK_021CAF00 + 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 ; =UNK_021CA8CC + 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 ; =UNK_021CA8B0 + 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 ; =UNK_021CAF00 + 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 UNK_021CA8D4 +_020AACE4: .word sNumStream +_020AACE8: .word UNK_021CA8DC +_020AACEC: .word UNK_021CAF00 +_020AACF0: .word 0x5F564354 +_020AACF4: .word UNK_021CA8CC +_020AACF8: .word UNK_021CA8B0 + + 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 ; =UNK_021CA8DC +_020AAD10: + ldr r0, [r12, r4, lsl #0x2] + mov lr, r4, lsl #0x2 + cmp r0, r5 + bne _020AAD74 + ldr r1, _020AADBC ; =sStream + mov r0, #0x94 + mla r0, r4, r0, r1 + ldr r1, _020AADC0 ; =sNumStream + 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 vct_flush_audio_queue + mov r0, r4 + bl FUN_020AB234 + ldr r0, _020AADC4 ; =sBitmap + 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 ; =sNumStream + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + ldr r0, _020AADC8 ; =UNK_021CA8C4 + mov r1, #0x1 + str r1, [r0, #0x0] + bl FUN_020AD170 + ldr r0, _020AADC4 ; =sBitmap + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AADB8: .word UNK_021CA8DC +_020AADBC: .word sStream +_020AADC0: .word sNumStream +_020AADC4: .word sBitmap +_020AADC8: .word UNK_021CA8C4 + + 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} + ldr r0, _020AAF24 ; =sNumStream + ldr r0, [r0, #0x0] + cmp r0, #0x3 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + 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 ; =UNK_021CA8DC + 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} + add r2, r2, #0x1 + cmp r2, #0x3 + blo _020AAE20 + ldr r1, _020AAF28 ; =UNK_021CA8DC + 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 ; =sNumStream + ldr r1, _020AAF2C ; =sBitmap + ldr r3, [r0, #0x0] + ldr r2, _020AAF30 ; =sStream + 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} + ldr r0, _020AAF24 ; =sNumStream + ldr r0, [r0, #0x0] + cmp r0, #0x1 + bne _020AAF18 + bl FUN_020AD170 + bl OS_GetTickLo + ldr r4, _020AAF34 ; =UNK_021CA8B0 + ldr r3, _020AAF38 ; =UNK_021CA8C0 + mov r12, #0x0 + ldr r1, _020AAF3C ; =UNK_021CAF00 + ldr r2, _020AAF40 ; =UNK_021CA8C4 + 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 sNumStream +_020AAF28: .word UNK_021CA8DC +_020AAF2C: .word sBitmap +_020AAF30: .word sStream +_020AAF34: .word UNK_021CA8B0 +_020AAF38: .word UNK_021CA8C0 +_020AAF3C: .word UNK_021CAF00 +_020AAF40: .word UNK_021CA8C4 + + arm_func_start vct_finish_audio +vct_finish_audio: ; 0x020AAF44 + ldr r0, _020AAF54 ; =sNumStream + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020AAF54: .word sNumStream + + arm_func_start FUN_020AAF58 +FUN_020AAF58: + stmdb sp!, {r4-r8,lr} + bl OS_GetTickLo + ldr r1, _020AB054 ; =__vct + ldr ip, _020AB058 ; =UNK_021CA8B0 + ldr r4, [r1, #0x10] + strh r0, [r12, #0x0] + cmp r4, #0x1 + ldreq r0, _020AB05C ; =UNK_021CA8CC + mov r5, #0x0 + ldr r1, _020AB060 ; =sBitmap + streq r5, [r0, #0x0] + str r5, [r1, #0x0] + ldr r2, _020AB064 ; =sNumStream + ldrne r0, _020AB05C ; =UNK_021CA8CC + movne r1, #0x4 + strne r1, [r0, #0x0] + str r5, [r2, #0x0] + ldr r0, _020AB05C ; =UNK_021CA8CC + ldr r3, _020AB068 ; =UNK_0210646C + ldr r2, [r0, #0x0] + mov r6, #0x1 + ldr r1, _020AB06C ; =sCodecInfo+1 + str r6, [r3, #0x0] + ldr r0, _020AB070 ; =sCodecInfo + ldrb r3, [r1, r2, lsl #0x1] + ldrb r1, [r0, r2, lsl #0x1] + mov r0, #0x44 + ldr r2, _020AB074 ; =UNK_021CA8D4 + mla r0, r1, r0, r3 + add r4, r0, #0xc + ldr r1, _020AB078 ; =UNK_021CA8BC + mov r5, #0x440 + ldr r0, _020AB07C ; =UNK_021CAF00 + 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 ; =sStream + ldr r5, _020AB084 ; =UNK_021CA8DC + 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 __vct +_020AB058: .word UNK_021CA8B0 +_020AB05C: .word UNK_021CA8CC +_020AB060: .word sBitmap +_020AB064: .word sNumStream +_020AB068: .word UNK_0210646C +_020AB06C: .word sCodecInfo+1 +_020AB070: .word sCodecInfo +_020AB074: .word UNK_021CA8D4 +_020AB078: .word UNK_021CA8BC +_020AB07C: .word UNK_021CAF00 +_020AB080: .word sStream +_020AB084: .word UNK_021CA8DC + + 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 ; =UNK_021CB7D8 + 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 ; =UNK_021CB7DC + cmp r2, #0x0 + str r2, [r1, #0x0] + movne r1, #0x0 + strne r1, [r2, #0x8] +_020AB0E0: + ldrb r2, [r0, #0x11] + ldr r3, _020AB108 ; =UNK_021CB7E0 + 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 UNK_021CB7D8 +_020AB104: .word UNK_021CB7DC +_020AB108: .word UNK_021CB7E0 + + arm_func_start FUN_020AB10C +FUN_020AB10C: ; 0x020AB10C + ldr r1, _020AB140 ; =UNK_021CB7D8 + 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 UNK_021CB7D8 + + arm_func_start FUN_020AB144 +FUN_020AB144: ; 0x020AB144 + ldr r1, _020AB150 ; =UNK_021CB7E0 + ldr r0, [r1, r0, lsl #0x2] + bx lr + .balign 4 +_020AB150: .word UNK_021CB7E0 + + arm_func_start FUN_020AB154 +FUN_020AB154: + ldr r0, _020AB160 ; =UNK_021CB7D8 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020AB160: .word UNK_021CB7D8 + + arm_func_start vct_insert_decoder +vct_insert_decoder: ; 0x020AB164 + ldr r2, _020AB1D8 ; =UNK_021CB7D8 + 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 ; =UNK_021CB7DC + str r12, [r3, #0x8] + ldr r2, [r2, #0x0] + str r2, [r1, #0x0] + b _020AB1B8 +_020AB198: + ldr r1, _020AB1DC ; =UNK_021CB7DC + 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 ; =UNK_021CB7E0 + 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 UNK_021CB7D8 +_020AB1DC: .word UNK_021CB7DC +_020AB1E0: .word UNK_021CB7E0 + + arm_func_start FUN_020AB1E4 +FUN_020AB1E4: ; 0x020AB1E4 + stmdb sp!, {r4,lr} + ldr r0, _020AB22C ; =UNK_021CB7D8 + ldr r4, [r0, #0x0] + cmp r4, #0x0 + beq _020AB20C +_020AB1F8: + mov r0, r4 + ldr r4, [r4, #0x8] + bl vct_free_packet_buffer + cmp r4, #0x0 + bne _020AB1F8 +_020AB20C: + mov r2, #0x0 + ldr r0, _020AB230 ; =UNK_021CB7E0 + 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 UNK_021CB7D8 +_020AB230: .word UNK_021CB7E0 + + 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 vct_free_packet_buffer + mov r0, r5 + bl FUN_020AB10C + movs r4, r0 + bne _020AB24C +_020AB26C: + ldr r0, _020AB280 ; =UNK_021CB7E0 + mov r1, #0x0 + str r1, [r0, r5, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB280: .word UNK_021CB7E0 + + arm_func_start FUN_020AB284 +FUN_020AB284: ; 0x020AB284 + ldr r1, _020AB2B4 ; =UNK_021CB7DC + mov r2, #0x0 + ldr r0, _020AB2B8 ; =UNK_021CB7D8 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + ldr r0, _020AB2BC ; =UNK_021CB7E0 + 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 UNK_021CB7DC +_020AB2B8: .word UNK_021CB7D8 +_020AB2BC: .word UNK_021CB7E0 + + 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} + 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 ; =UNK_02106470 + 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 UNK_02106470 +_020AB430: .word 0x00001FDF + + arm_func_start FUN_020AB434 +FUN_020AB434: ; 0x020AB434 + ldr r1, _020AB440 ; =sCount + ldr r0, [r1, r0, lsl #0x2] + bx lr + .balign 4 +_020AB440: .word sCount + + arm_func_start vct_pop_audio_queue +vct_pop_audio_queue: ; 0x020AB444 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r3, _020AB4AC ; =UNK_021CB7F0 + ldr r1, _020AB4B0 ; =UNK_021CB7EC + ldr r2, [r3, r4, lsl #0x2] + str r0, [r1, #0x0] + cmp r2, #0x0 + mov r12, r4, lsl #0x2 + beq _020AB494 + ldr r1, _020AB4B4 ; =sCount + 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 ; =UNK_021CB7EC + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020AB4B4 ; =sCount + ldr r0, [r0, r4, lsl #0x2] + ldmia sp!, {r4,pc} + .balign 4 +_020AB4AC: .word UNK_021CB7F0 +_020AB4B0: .word UNK_021CB7EC +_020AB4B4: .word sCount + + arm_func_start vct_top_audio_queue +vct_top_audio_queue: ; 0x020AB4B8 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r2, _020AB4F8 ; =UNK_021CB7F0 + ldr r1, _020AB4FC ; =UNK_021CB7EC + ldr r2, [r2, r4, lsl #0x2] + str r0, [r1, #0x0] + cmp r2, #0x0 + beq _020AB4EC + bl OS_RestoreInterrupts + ldr r0, _020AB4F8 ; =UNK_021CB7F0 + ldr r0, [r0, r4, lsl #0x2] + ldmia sp!, {r4,pc} +_020AB4EC: + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020AB4F8: .word UNK_021CB7F0 +_020AB4FC: .word UNK_021CB7EC + + 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} + cmp r4, #0x3 + addcs sp, sp, #0x4 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r5,pc} + bl OS_DisableInterrupts + ldr r3, _020AB620 ; =UNK_021CB7F0 + ldr r1, _020AB624 ; =UNK_021CB7EC + 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 ; =UNK_021CB808 + str r2, [r1, #0x8] + ldr r1, [r3, r12] + str r1, [r0, r12] + b _020AB5F4 +_020AB574: + ldr r0, _020AB628 ; =UNK_021CB808 + 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 ; =UNK_021CB808 + 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 ; =UNK_021CB7F0 + 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 ; =sCount + ldr r0, _020AB624 ; =UNK_021CB7EC + 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 ; =sCount + ldr r0, [r0, r4, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB620: .word UNK_021CB7F0 +_020AB624: .word UNK_021CB7EC +_020AB628: .word UNK_021CB808 +_020AB62C: .word sCount + + 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 ; =UNK_021CB7EC + mov r4, r7 + mov r9, r7 + str r0, [r1, #0x0] + ldr r5, _020AB6BC ; =UNK_021CB7F0 + ldr r8, _020AB6C0 ; =sCount + 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 vct_free_packet_buffer + 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 ; =UNK_021CB7EC + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020AB6B8: .word UNK_021CB7EC +_020AB6BC: .word UNK_021CB7F0 +_020AB6C0: .word sCount + + arm_func_start vct_flush_audio_queue +vct_flush_audio_queue: ; 0x020AB6C4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl vct_top_audio_queue + movs r4, r0 + beq _020AB6FC +_020AB6DC: + mov r0, r5 + bl vct_pop_audio_queue + mov r0, r4 + bl vct_free_packet_buffer + mov r0, r5 + bl vct_top_audio_queue + movs r4, r0 + bne _020AB6DC +_020AB6FC: + ldr r0, _020AB710 ; =sCount + mov r1, #0x0 + str r1, [r0, r5, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AB710: .word sCount + + arm_func_start FUN_020AB714 +FUN_020AB714: ; 0x020AB714 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020AB750 ; =UNK_021CB7EC + ldr r3, _020AB754 ; =UNK_021CB808 + mov lr, #0x0 + str lr, [r3, r4, lsl #0x2] + ldr r2, _020AB758 ; =sCount + ldr r12, [r3, r4, lsl #0x2] + ldr r3, _020AB75C ; =UNK_021CB7F0 + 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 UNK_021CB7EC +_020AB754: .word UNK_021CB808 +_020AB758: .word sCount +_020AB75C: .word UNK_021CB7F0 + + arm_func_start vct_calc_jitter_and_skew +vct_calc_jitter_and_skew: + 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 + cmp r0, #0x0 + ldreq r1, [r7, #0x14] + moveq r0, r4 + addeq r1, r1, #0x1 + streq r1, [r7, #0x14] + ldmeqia sp!, {r4-r8,pc} + 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} + 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} + 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} + 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} + 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 vct_free_packet_buffer +_020ABC2C: + str r4, [r5, #0x3c] + ldr r0, [r5, #0x34] + bl vct_pop_audio_queue + 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 vct_free_packet_buffer + 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 ; =__vct + 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 ; =UNK_021CB824 + 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 ; =UNK_021CB824 + mov r3, #0x0 + ldr r2, _020ABE3C ; =UNK_021CB850 + str r3, [r0, #0x2c] + str r3, [r0, #0x38] + str r2, [r1, #0x4] + b _020ABE28 +_020ABDA4: + ldr r2, _020ABE38 ; =UNK_021CB824 + 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 ; =UNK_021CB824 + moveq r3, #0x1 + str r3, [r2, #0x34] +_020ABE04: + ldrb r3, [r0, #0xb] + ldr r0, _020ABE38 ; =UNK_021CB824 + ldr r2, _020ABE3C ; =UNK_021CB850 + 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 __vct +_020ABE38: .word UNK_021CB824 +_020ABE3C: .word UNK_021CB850 + + 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 + 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 ; =UNK_021CB838 + bl FUN_020AC5A4 + ldr r0, _020ABEC8 ; =UNK_021CB838 + mov r1, #0x2 + bl FUN_020AC708 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020ABEC8: .word UNK_021CB838 + + arm_func_start FUN_020ABECC +FUN_020ABECC: ; 0x020ABECC + stmdb sp!, {r4-r6,lr} + ldr r2, _020AC070 ; =UNK_021CB824 + 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 ; =UNK_021CB850 + 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 ; =UNK_021CB850 + mov r0, r6 + bl FUN_020AC4A0 + ldr r1, _020AC074 ; =UNK_021CB850 + 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 + 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 ; =UNK_021CB818 + moveq r1, #0x1 + ldr r0, [r0, #0x0] + ands r0, r0, r1 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r2, _020AC070 ; =UNK_021CB824 + mov r4, #0x2 + mov r3, #0x0 + ldr r0, _020AC074 ; =UNK_021CB850 + 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 ; =UNK_021CB824 + mov r0, #0x0 + str r0, [r1, #0x2c] + ldmia sp!, {r4-r6,pc} +_020AC008: + ldr r1, _020AC074 ; =UNK_021CB850 + mov r0, r6 + bl FUN_020AC4A0 + ldr r1, _020AC074 ; =UNK_021CB850 + 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 ; =UNK_021CB81C + str r0, [r2, #0x0] + str r1, [r2, #0x4] + b _020AC068 +_020AC050: + mov r0, #0x0 + bl FUN_020AC5E8 + ldr r0, _020AC07C ; =UNK_021CB81C + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] +_020AC068: + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AC070: .word UNK_021CB824 +_020AC074: .word UNK_021CB850 +_020AC078: .word UNK_021CB818 +_020AC07C: .word UNK_021CB81C + + 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 + 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 ; =UNK_021CB838 + bl FUN_020AC5A4 + ldr r0, _020AC1E4 ; =UNK_021CB838 + 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 + 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 UNK_021CB838 + + arm_func_start FUN_020AC1E8 +FUN_020AC1E8: + ldr r1, _020AC25C ; =__vct + ldr r2, _020AC260 ; =UNK_021CB824 + 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 ; =UNK_021CB850 + 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 __vct +_020AC260: .word UNK_021CB824 +_020AC264: .word UNK_021CB850 + + 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 ; =__vct + ldr r1, [r1, #0x10] + cmp r1, #0x1 + ldrne r3, [r0, #0xc] + ldrne r2, _020AC2FC ; =UNK_020FF788 + movne r1, #0xb + mlane r1, r3, r1, r2 + ldrnesb r2, [r12, r1] + bne _020AC2D0 + ldr r3, [r0, #0xc] + ldr r2, _020AC300 ; =UNK_020FF744 + 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 __vct +_020AC2FC: .word UNK_020FF788 +_020AC300: .word UNK_020FF744 + + arm_func_start FUN_020AC304 +FUN_020AC304: + ldr r1, _020AC34C ; =UNK_021CB824 + 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 UNK_021CB824 + + 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} + ldr r0, _020AC44C ; =__vct + ldr r0, [r0, #0x10] + cmp r0, #0x1 + ldrne r2, [r4, #0xc] + ldrne r1, _020AC450 ; =UNK_020FF700 + movne r0, #0xb + mlane r0, r2, r0, r1 + ldrnesb r5, [r3, r0] + bne _020AC3C8 + ldr r2, [r4, #0xc] + ldr r1, _020AC454 ; =UNK_020FF6BC + 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 __vct +_020AC450: .word UNK_020FF700 +_020AC454: .word UNK_020FF6BC + + 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 ; =__vct + 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 __vct + + 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 ; =UNK_020FF6AC + 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 ; =UNK_020FF6B4 + ldrb r0, [r0, r2] + bx lr +_020AC544: + mov r0, #0xc + bx lr + .balign 4 +_020AC54C: .word UNK_020FF6AC +_020AC550: .word UNK_020FF6B4 + + 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 MOD04_021EB044 + 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 ; =__vct + 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 __vct + + arm_func_start FUN_020AC5E8 +FUN_020AC5E8: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + mov r4, r0 + mov r3, #0xff + ldr r0, _020AC624 ; =UNK_021CB850 + add r1, sp, #0x0 + mov r2, #0x4 + strb r3, [sp, #0x4] + bl FUN_020AC458 + ldr r0, _020AC624 ; =UNK_021CB850 + add r1, sp, #0x0 + strb r4, [sp, #0xa] + bl FUN_020AC628 + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + .balign 4 +_020AC624: .word UNK_021CB850 + + 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 ; =__vct + ldr r5, _020AC6E0 ; =UNK_021CB818 + 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 MOD04_021EB044 + 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 ; =UNK_021CB818 + 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 __vct +_020AC6E0: .word UNK_021CB818 + + arm_func_start FUN_020AC6E4 +FUN_020AC6E4: ; 0x020AC6E4 + ldrb r2, [r1, #0xa] + cmp r2, #0x1 + ldreqb r2, [r0, #0x4] + ldreq r0, _020AC704 ; =UNK_021CB818 + streqb r2, [r1, #0xb] + ldreq r0, [r0, #0x0] + streq r0, [r1, #0xc] + bx lr + .balign 4 +_020AC704: .word UNK_021CB818 + + 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 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4,pc} + add r1, sp, #0x0 + mov r0, r4 + bl FUN_020AC554 + 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 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4,pc} + add r1, sp, #0x0 + mov r0, r4 + bl FUN_020AC554 + 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} + ldr r0, _020AC7F4 ; =__vct + ldrb r0, [r0, #0x0] + cmp r1, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r2, _020AC7F8 ; =UNK_021CB824 + ldr r4, [r2, #0x0] + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r3, [r4, #0x14] + mov r0, r4 + str r3, [r2, #0x0] + bl FUN_020AC5A4 + ldr r1, _020AC7F8 ; =UNK_021CB824 + mov r0, r4 + ldr r2, [r1, #0x4] + str r2, [r4, #0x14] + str r4, [r1, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020AC7F4: .word __vct +_020AC7F8: .word UNK_021CB824 + + arm_func_start vct_handle_ssp +vct_handle_ssp: + 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 ; =__vct + 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 __vct + + arm_func_start vct_check_timeout +vct_check_timeout: ; 0x020AC898 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r2, _020AC950 ; =__vct + ldr r3, [r2, #0x10] + cmp r3, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + ldr r2, [r2, #0xc] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r3, _020AC954 ; =UNK_021CB81C + 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} + ldr r2, _020AC958 ; =UNK_02106490 + 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} + ldr r1, _020AC95C ; =UNK_021CB824 + 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 ; =__vct + ldr r0, _020AC95C ; =UNK_021CB824 + ldr r3, [r1, #0x8] + ldrb r0, [r0, #0x30] + ldr r12, [r1, #0x4] + ldr r2, _020AC960 ; =UNK_021CB850 + mov r1, #0x9 + blx r12 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AC950: .word __vct +_020AC954: .word UNK_021CB81C +_020AC958: .word UNK_02106490 +_020AC95C: .word UNK_021CB824 +_020AC960: .word UNK_021CB850 + + arm_func_start vct_finish_ssp +vct_finish_ssp: ; 0x020AC964 + ldr r0, _020AC978 ; =UNK_021CB824 + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x0] + bx lr + .balign 4 +_020AC978: .word UNK_021CB824 + + 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 ; =UNK_021CB824 + mov r2, #0x18 + str r0, [r1, #0x0] + ldr r3, [r4, #0x4] + mov r1, #0x0 + mul r2, r3, r2 + bl MI_CpuFill8 + ldr r0, _020ACA90 ; =UNK_021CB850 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 + ldr r0, _020ACA94 ; =UNK_021CB838 + 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 ; =UNK_021CB824 + 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 ; =UNK_021CB824 + mov r0, #0x18 + ldr r1, [r3, #0x0] + mov r5, #0x0 + mla r0, r12, r0, r1 + str r5, [r0, #-0x4] + ldr r2, _020ACA98 ; =UNK_021CB818 + ldr r1, _020ACA9C ; =UNK_021CB814 + ldr r0, _020ACAA0 ; =__vct + 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 UNK_021CB824 +_020ACA90: .word UNK_021CB850 +_020ACA94: .word UNK_021CB838 +_020ACA98: .word UNK_021CB818 +_020ACA9C: .word UNK_021CB814 +_020ACAA0: .word __vct +_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 ; =__vct + 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 __vct + + 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} + cmp r3, #0x10 + mvncc r0, #0x0 + ldmccia sp!, {r4-r6,pc} + 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 + cmp r6, #0x0 + bne _020ACB80 + ldr r0, _020ACB9C ; =__vct + ldr r0, [r0, #0x10] + cmp r0, #0x1 + bne _020ACB68 + ldr r0, [r5, #0xc] + cmp r0, #0x4 + bne _020ACB68 + mov r0, r5 + bl FUN_020AC304 + 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 + cmp r0, #0x0 + mvneq r0, #0x2 + movne r0, #0x0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ACB9C: .word __vct + + arm_func_start FUN_020ACBA0 +FUN_020ACBA0: ; 0x020ACBA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020ACBCC ; =__vct + 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 __vct + + 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} + cmp r3, #0x10 + mvncc r0, #0x0 + ldmccia sp!, {r4-r6,pc} + ldr r1, _020ACC80 ; =__vct + ldr r1, [r1, #0xc] + cmp r1, #0x1 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} + 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 + cmp r0, #0x0 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} + ldr r0, _020ACC80 ; =__vct + ldr r0, [r0, #0x10] + cmp r0, #0x1 + bne _020ACC78 + cmp r4, #0x0 + bne _020ACC78 + mov r0, r5 + bl FUN_020AC304 + cmp r0, #0x0 + mvneq r0, #0x2 + ldmeqia sp!, {r4-r6,pc} +_020ACC78: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020ACC80: .word __vct + + arm_func_start FUN_020ACC84 +FUN_020ACC84: ; 0x020ACC84 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020ACD48 ; =UNK_021CB824 + cmp r0, #0x0 + mov lr, #0x0 + addeq sp, sp, #0x4 + ldr r12, [r2, #0x4] + moveq r0, lr + ldmeqia sp!, {pc} + ldr r1, _020ACD4C ; =__vct + ldr r1, [r1, #0x10] + cmp r1, #0x2 + bne _020ACCD0 + ldr r1, _020ACD50 ; =UNK_021CB850 + 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 ; =UNK_021CB824 + strne r2, [r1, #0x4] + ldreq r1, _020ACD48 ; =UNK_021CB824 + streq r3, [r1, #0x4] +_020ACD10: + ldr r1, _020ACD48 ; =UNK_021CB824 + 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 UNK_021CB824 +_020ACD4C: .word __vct +_020ACD50: .word UNK_021CB850 + + arm_func_start FUN_020ACD54 +FUN_020ACD54: ; 0x020ACD54 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020ACD8C ; =__vct + 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 __vct + + arm_func_start vct_free_packet_buffer +vct_free_packet_buffer: + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020ACDC0 ; =UNK_021CB86C + ldr r2, _020ACDC4 ; =UNK_021CB868 + 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 UNK_021CB86C +_020ACDC4: .word UNK_021CB868 + + arm_func_start vct_alloc_packet_buffer +vct_alloc_packet_buffer: ; 0x020ACDC8 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl OS_DisableInterrupts + ldr r1, _020ACE08 ; =UNK_021CB86C + ldr r2, _020ACE0C ; =UNK_021CB868 + 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 ; =UNK_021CB868 + ldr r0, [r0, #0x0] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020ACE08: .word UNK_021CB86C +_020ACE0C: .word UNK_021CB868 + + arm_func_start vct_cleanup_packet_buffer +vct_cleanup_packet_buffer: + ldr r1, _020ACE28 ; =UNK_021CB86C + mov r2, #0x0 + ldr r0, _020ACE2C ; =UNK_021CB870 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bx lr + .balign 4 +_020ACE28: .word UNK_021CB86C +_020ACE2C: .word UNK_021CB870 + + 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 ; =UNK_021CB870 + 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} + ands r3, r0, #0x1f + movne r0, #0x0 + strne r0, [r1, #0x0] + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + mov r1, r0 + mov r0, #0x0 + bl MIi_CpuClearFast + subs r12, r4, #0x1 + mov r5, #0x0 + beq _020ACED0 + ldr r1, _020ACF04 ; =UNK_021CB870 + 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 ; =UNK_021CB870 + 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 ; =UNK_021CB86C + mov r0, #0x1 + str r2, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020ACF00: .word 0xE525982B +_020ACF04: .word UNK_021CB870 +_020ACF08: .word 0x00000478 +_020ACF0C: .word UNK_021CB86C + + arm_func_start FUN_020ACF10 +FUN_020ACF10: ; 0x020ACF10 + mov r2, #0xf + mov r0, #0x44 + mul r1, r2, r0 + ldr r0, _020ACF30 ; =UNK_02106498 + ldr ip, _020ACF34 ; =FUN_020AD170 + str r2, [r0, #0x8] + str r1, [r0, #0xc] + bx r12 + .balign 4 +_020ACF30: .word UNK_02106498 +_020ACF34: .word FUN_020AD170 + + arm_func_start FUN_020ACF38 +FUN_020ACF38: ; 0x020ACF38 + stmdb sp!, {r4,lr} + ldr r3, _020AD124 ; =UNK_02106498 + mov r12, r1, lsr #0x8 + str r12, [r3, #0x4] + cmp r2, #0x0 + strneb r12, [r2, #0x0] + ldr r2, _020AD124 ; =UNK_02106498 + ldr r2, [r2, #0x0] + cmp r2, #0x0 + bne _020AD05C + mov r4, #0x0 + mov r12, r4 + ldr r3, _020AD128 ; =UNK_021CB880 +_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 ; =UNK_021CB880 +_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 ; =UNK_021CB874 + mul r1, r2, r1 + mov lr, r1, lsr #0x1 + ldr r2, _020AD13C ; =UNK_021CB878 + mov r12, #0x0 + ldr r1, _020AD124 ; =UNK_02106498 + 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 ; =UNK_021CB878 + ldr r3, _020AD128 ; =UNK_021CB880 + 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 ; =UNK_021CB878 + mov lr, #0x0 + ldr r12, [r1, #0x0] + ldr r3, _020AD128 ; =UNK_021CB880 + 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 ; =UNK_021CB874 + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x0] + cmp r1, r0 + bhi _020AD10C + ldr r2, _020AD140 ; =UNK_021CB87C + ldr r1, _020AD124 ; =UNK_02106498 + ldr r3, [r2, #0x0] + ldr r0, [r1, #0x8] + add r3, r3, #0x1 + str r3, [r2, #0x0] + cmp r3, r0 + ble _020AD118 + ldr r0, _020AD13C ; =UNK_021CB878 + 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 ; =UNK_021CB87C + mov r1, #0x0 + str r1, [r0, #0x0] +_020AD118: + mov r4, #0x2 +_020AD11C: + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020AD124: .word UNK_02106498 +_020AD128: .word UNK_021CB880 +_020AD12C: .word 0x040002B0 +_020AD130: .word 0x040002B8 +_020AD134: .word 0x040002B4 +_020AD138: .word UNK_021CB874 +_020AD13C: .word UNK_021CB878 +_020AD140: .word UNK_021CB87C + + 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 ; =UNK_02106498 + mov r2, #0x10 + bl MI_CpuCopy8 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD16C: .word UNK_02106498 + + arm_func_start FUN_020AD170 +FUN_020AD170: + ldr r0, _020AD1B8 ; =UNK_021CB880 + 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 ; =UNK_021CB878 + mov r12, #0x0 + ldr r1, _020AD1C0 ; =UNK_02106498 + ldr r2, _020AD1C4 ; =UNK_021CB874 + ldr r0, _020AD1C8 ; =UNK_021CB87C + 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 UNK_021CB880 +_020AD1BC: .word UNK_021CB878 +_020AD1C0: .word UNK_02106498 +_020AD1C4: .word UNK_021CB874 +_020AD1C8: .word UNK_021CB87C + + arm_func_start FUN_020AD1CC +FUN_020AD1CC: ; 0x020AD1CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, r1 + mov r3, r2 + ldr r1, _020AD1F0 ; =UNK_021CB8D4 + mov r2, r12 + bl FUN_020AD1F4 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD1F0: .word UNK_021CB8D4 + + 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 ; =UNK_021CB8BC + ldr r2, _020AD424 ; =UNK_021CB8A4 + str r4, [sp, #0xc] +_020AD224: + ldr r4, _020AD428 ; =UNK_021CB894 + ldr lr, [r2, #0x10] + ldr r7, [r4, #0x0] + mov r4, r9, lsl #0x1 + ldrsh r10, [r1, r4] + ldr r4, _020AD42C ; =UNK_021CB898 + mov r5, r7, lsl #0x1 + ldr r6, [r4, #0x0] + ldr r4, _020AD430 ; =UNK_021CBD14 + 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 ; =UNK_021CB894 + add r6, r6, #0x1 + str r7, [r5, #0x0] + ldr r5, _020AD438 ; =0x000007FF + mov r7, r9, lsl #0x1 + and r6, r6, r5 + ldr r5, _020AD42C ; =UNK_021CB898 + 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 ; =UNK_021CB890 + movhi r1, #0x0 + strhih r1, [r0, #0x0] + addhi sp, sp, #0x14 + ldmhiia sp!, {r4-r11,pc} + cmp r3, r4 + ldrlo r1, _020AD458 ; =UNK_021CB890 + movcc r2, #0x4 + strcch r2, [r1, #0x0] + ldr r1, _020AD458 ; =UNK_021CB890 + 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} + ldr r1, _020AD458 ; =UNK_021CB890 + 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 UNK_021CB8BC +_020AD424: .word UNK_021CB8A4 +_020AD428: .word UNK_021CB894 +_020AD42C: .word UNK_021CB898 +_020AD430: .word UNK_021CBD14 +_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 UNK_021CB890 + + arm_func_start FUN_020AD45C +FUN_020AD45C: ; 0x020AD45C + ldr ip, _020AD46C ; =MIi_CpuCopyFast + mov r2, r1 + ldr r1, _020AD470 ; =UNK_021CB8D4 + bx r12 + .balign 4 +_020AD46C: .word MIi_CpuCopyFast +_020AD470: .word UNK_021CB8D4 + + arm_func_start FUN_020AD474 +FUN_020AD474: ; 0x020AD474 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020AD4E4 ; =UNK_021CB894 + mov r3, #0x0 + ldr r2, _020AD4E8 ; =0x0000019D + ldr r0, _020AD4EC ; =UNK_021CB898 + ldr lr, _020AD4F0 ; =UNK_021064A8 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldr r0, _020AD4F4 ; =UNK_021CBD14 + 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 ; =UNK_021CB8BC + ldr r0, _020AD4FC ; =UNK_021CB8A4 + 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 UNK_021CB894 +_020AD4E8: .word 0x0000019D +_020AD4EC: .word UNK_021CB898 +_020AD4F0: .word UNK_021064A8 +_020AD4F4: .word UNK_021CBD14 +_020AD4F8: .word UNK_021CB8BC +_020AD4FC: .word UNK_021CB8A4 + + 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 ; =UNK_021CB89C + ldr r8, _020AD604 ; =UNK_021CB8A0 + 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 UNK_021CB89C +_020AD604: .word UNK_021CB8A0 +_020AD608: .word 0x00000D3E +_020AD60C: .word 0x04000280 +_020AD610: .word 0x04000290 +_020AD614: .word 0x04000298 +_020AD618: .word 0x040002A0 + +; libvct.a:mixer.o + + arm_func_start vct_mix_audio +vct_mix_audio: + 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} + 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 + +; libvct.a:vct_main.o + + arm_func_start VCTi_HandleData +VCTi_HandleData: + 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} + ldr r1, [r6, #0x0] + ldr r0, _020AD824 ; =0x5F564354 + cmp r1, r0 + addne sp, sp, #0x4 + movne r0, #0x2 + ldmneia sp!, {r4-r7,pc} + ldr r0, _020AD828 ; =__vct + ldr r0, [r0, #0x10] + cmp r0, #0x0 + beq _020AD780 + ldr r0, _020AD82C ; =initialized + 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 ; =sRecvPerFrame + 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 vct_handle_audio + 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 vct_handle_ssp + 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 __vct +_020AD82C: .word initialized +_020AD830: .word sRecvPerFrame + + arm_func_start VCT_HandleData +VCT_HandleData: ; 0x020AD834 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + add r3, sp, #0x0 + mov r4, r0 + bl VCTi_HandleData + cmp r0, #0x0 + beq _020AD898 + cmp r0, #0x1 + beq _020AD864 + cmp r0, #0x2 + beq _020AD88C + b _020AD898 +_020AD864: + ldr r0, _020AD8A4 ; =__vct + 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 __vct + + arm_func_start VCT_Main +VCT_Main: ; 0x020AD8A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020AD8FC ; =initialized + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, _020AD900 ; =UNK_021CCD14 + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + ands r0, r1, #0xf + bne _020AD8E0 + bl vct_check_timeout +_020AD8E0: + bl vct_flush_send_buffer + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + bl vct_decode_audio_buffer + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD8FC: .word initialized +_020AD900: .word UNK_021CCD14 ; count$7906 + + arm_func_start VCT_Cleanup +VCT_Cleanup: ; 0x020AD904 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl vct_finish_audio + bl vct_finish_ssp + bl vct_cleanup_packet_buffer + ldr r1, _020AD934 ; =__vct + mov r2, #0x0 + ldr r0, _020AD938 ; =initialized + str r2, [r1, #0x10] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AD934: .word __vct +_020AD938: .word initialized + + .extern _SDK_AbiossolibVCT + + arm_func_start VCT_Init +VCT_Init: ; 0x020AD93C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _020ADA78 ; =_SDK_AbiossolibVCT + bl OSi_ReferSymbol + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, _020ADA7C ; =initialized + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r4,pc} + 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} + 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} + ldr r0, _020ADA80 ; =__vct + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 + ldr r2, [r4, #0x18] + ldr r1, _020ADA80 ; =__vct + 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} + strb r2, [r1, #0x0] + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x14] + bl FUN_020ACE30 + cmp r0, #0x0 + bne _020ADA34 + bl vct_cleanup_packet_buffer + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020ADA34: + mov r0, r4 + bl FUN_020AC97C + cmp r0, #0x0 + bne _020ADA50 + bl vct_cleanup_packet_buffer + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020ADA50: + bl FUN_020AAF58 + cmp r0, #0x0 + ldrne r1, _020ADA7C ; =initialized + movne r0, #0x1 + strne r0, [r1, #0x0] + ldmneia sp!, {r4,pc} + bl vct_finish_ssp + bl vct_cleanup_packet_buffer + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020ADA78: .word _SDK_AbiossolibVCT +_020ADA7C: .word initialized +_020ADA80: .word __vct + +; ??? diff --git a/arm9/asm/libc.s b/arm9/asm/libc.s index 0e0b51c1..9012e8e8 100644 --- a/arm9/asm/libc.s +++ b/arm9/asm/libc.s @@ -630,7 +630,6 @@ __exit: ; 0x020DE1BC stmdb sp!, {r3-r5,lr} ldr r0, _020DE2CC ; =UNK_021D70D0 bl OS_TryLockMutex -_020DE1C8: ; 0x020DE1C8 cmp r0, #0x0 bne _020DE1F4 ldr r0, _020DE2D0 ; =OSi_ThreadInfo @@ -746,7 +745,6 @@ _020DE31C: cmp r1, #0x1 bne _020DE35C bl fflush -_020DE354: ; 0x020DE354 cmp r0, #0x0 movne r4, r9 _020DE35C: @@ -780,7 +778,6 @@ _020DE3A8: movs r1, r1, lsr #0x1d beq _020DE3C4 bl fflush -_020DE3BC: ; 0x020DE3BC cmp r0, #0x0 movne r4, r9 _020DE3C4: @@ -870,7 +867,6 @@ __load_buffer: 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 @@ -915,7 +911,6 @@ _020DE538: 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 @@ -923,7 +918,6 @@ _020DE564: ; 0x020DE564 _020DE574: mov r0, r5 bl __prep_buffer -_020DE57C: ; 0x020DE57C mov r0, #0x0 ldmia sp!, {r3-r5,pc} @@ -943,7 +937,6 @@ fread: ; 0x020DE584 add r0, r5, r4 mov r8, r2 bl OS_TryLockMutex -_020DE5BC: ; 0x020DE5BC cmp r0, #0x0 bne _020DE5E8 ldr r0, _020DE684 ; =OSi_ThreadInfo @@ -1014,7 +1007,6 @@ __fread: ; 0x020DE690 mov r1, #0x0 mov r4, r2 bl fwide -_020DE6B4: ; 0x020DE6B4 cmp r0, #0x0 bne _020DE6C8 mov r0, r7 @@ -1075,7 +1067,6 @@ _020DE778: tst r0, #0x1 beq _020DE7B0 bl __flush_line_buffered_output_files -_020DE790: ; 0x020DE790 cmp r0, #0x0 beq _020DE7B0 mov r0, #0x1 @@ -1154,7 +1145,6 @@ _020DE890: mov r1, r10 mov r2, r10 bl __load_buffer -_020DE8AC: ; 0x020DE8AC cmp r0, #0x0 beq _020DE8E4 cmp r0, #0x1 @@ -1205,7 +1195,6 @@ _020DE938: mov r2, #0x1 str r4, [r7, #0x20] bl __load_buffer -_020DE968: ; 0x020DE968 cmp r0, #0x0 beq _020DE9A4 cmp r0, #0x1 @@ -1229,7 +1218,6 @@ _020DE9A4: str r10, [r7, #0x20] add r5, r5, r1 bl __prep_buffer -_020DE9BC: ; 0x020DE9BC mov r0, #0x0 str r0, [r7, #0x28] _020DE9C4: @@ -1250,7 +1238,6 @@ __fwrite: mov r1, #0x0 mov r4, r2 bl fwide -_020DE9FC: ; 0x020DE9FC cmp r0, #0x0 bne _020DEA10 mov r0, r9 @@ -1373,7 +1360,6 @@ _020DEBB4: mov r0, r9 mov r1, #0x0 bl __flush_buffer -_020DEBC0: ; 0x020DEBC0 cmp r0, #0x0 beq _020DEBDC mov r0, #0x1 @@ -1401,7 +1387,6 @@ _020DEBF0: mov r0, r9 str r2, [r9, #0x24] bl __flush_buffer -_020DEC24: ; 0x020DEC24 cmp r0, #0x0 ldreq r0, [sp, #0x4] addeq r6, r6, r0 @@ -1415,7 +1400,6 @@ _020DEC44: mov r0, r9 str r7, [r9, #0x20] bl __prep_buffer -_020DEC54: ; 0x020DEC54 mov r0, #0x0 str r0, [r9, #0x28] _020DEC5C: @@ -1437,13 +1421,11 @@ fclose: ; 0x020DEC88 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] @@ -1459,7 +1441,6 @@ _020DECAC: ; 0x020DECAC 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 @@ -1490,7 +1471,6 @@ _020DED34: 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 @@ -1517,7 +1497,6 @@ _020DEDA0: mov r0, r4 mov r1, #0x0 bl __flush_buffer -_020DEDAC: ; 0x020DEDAC cmp r0, #0x0 mov r0, #0x0 beq _020DEDCC @@ -1593,7 +1572,6 @@ _020DEE98: ldr r5, _020DEF6C ; =UNK_021D70D0 add r0, r5, r4 bl OS_TryLockMutex -_020DEEAC: ; 0x020DEEAC cmp r0, #0x0 bne _020DEED8 ldr r0, _020DEF70 ; =OSi_ThreadInfo @@ -1681,7 +1659,6 @@ _020DEFC8: bne _020DF018 mov r1, #0x0 bl __flush_buffer -_020DEFE4: ; 0x020DEFE4 cmp r0, #0x0 beq _020DF018 mov r0, #0x1 @@ -1812,7 +1789,6 @@ _020DF1A4: ldr r5, _020DF280 ; =UNK_021D70D0 add r0, r5, r4 bl OS_TryLockMutex -_020DF1B8: ; 0x020DF1B8 cmp r0, #0x0 bne _020DF1E4 ldr r0, _020DF284 ; =OSi_ThreadInfo @@ -1881,7 +1857,6 @@ rewind: ; 0x020DF290 mov r2, r1 strb r1, [r4, #0xd] bl fseek -_020DF2A8: ; 0x020DF2A8 mov r0, #0x0 strb r0, [r4, #0xd] ldmia sp!, {r4,pc} @@ -1955,7 +1930,6 @@ _020DF368: mov r1, r7 mov r2, r5 bl mbtowc -_020DF384: ; 0x020DF384 cmp r0, #0x0 add r8, r8, #0x2 addgt r7, r7, r0 @@ -1985,7 +1959,6 @@ wcstombs: mov r7, #0x0 moveq r0, #0x0 ldmeqia sp!, {r3-r9,pc} -_020DF3E0: ; 0x020DF3E0 add r6, sp, #0x0 _020DF3E4: ldrh r1, [r9, #0x0] @@ -2416,19 +2389,12 @@ _020DF920: 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 @@ -3325,7 +3291,6 @@ _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 @@ -3991,19 +3956,12 @@ _020E0ED4: 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 @@ -4019,41 +3977,23 @@ _020E0F40: 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 @@ -4313,7 +4253,6 @@ _020E130C: cmp r1, #0x0 ldreq r1, _020E163C ; =UNK_02106DD8 bl wcstombs -_020E133C: ; 0x020E133C cmp r0, #0x0 blt _020E148C add r7, sp, #0x2c @@ -4346,7 +4285,6 @@ _020E1390: mov r2, r6 mov r1, #0x0 bl memchr -_020E13B0: ; 0x020E13B0 cmp r0, #0x0 subne r6, r0, r7 b _020E14D8 @@ -4554,7 +4492,6 @@ __FileWrite: ; 0x020E1644 mov r1, #0x1 mov r4, r2 bl __fwrite -_020E1660: ; 0x020E1660 cmp r4, r0 movne r5, #0x0 mov r0, r5 @@ -4587,7 +4524,6 @@ printf: ; 0x020E16B4 ldr r0, _020E17B4 ; =UNK_02106AA4 mvn r1, #0x0 bl fwide -_020E16C8: ; 0x020E16C8 cmp r0, #0x0 mvnge r0, #0x0 ldmgeia sp!, {r4,lr} @@ -4595,7 +4531,6 @@ _020E16C8: ; 0x020E16C8 bxge lr ldr r0, _020E17B8 ; =UNK_021D7118 bl OS_TryLockMutex -_020E16E4: ; 0x020E16E4 cmp r0, #0x0 bne _020E1710 ldr r0, _020E17BC ; =OSi_ThreadInfo @@ -4673,17 +4608,14 @@ vsnprintf: ; 0x020E17CC 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 @@ -4731,7 +4663,6 @@ qsort: ; 0x020E1888 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 @@ -4774,7 +4705,6 @@ _020E1934: 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] @@ -4820,7 +4750,6 @@ _020E19D8: cmp r9, r4, lsl #0x1 bhs _020E196C b _020E18E0 -_020E19E4: ; 0x020E19E4 add sp, sp, #0x10 ldmia sp!, {r3-r11,pc} @@ -5014,19 +4943,12 @@ _020E1C3C: 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 @@ -5410,19 +5332,12 @@ _020E2158: 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 @@ -5438,49 +5353,27 @@ _020E21B0: 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 @@ -5814,7 +5707,6 @@ _020E261C: ldr r0, _020E2C78 ; =UNK_02106B78 ldr r0, [r0, #0x0] bl _f2d -_020E2660: ; 0x020E2660 b _020E2668 _020E2664: add r4, r4, r2 @@ -5831,7 +5723,6 @@ _020E2668: b _020E26A0 _020E2690: bl _d2f -_020E2694: ; 0x020E2694 str r0, [r5, #0x0] b _020E26A0 _020E269C: @@ -6371,7 +6262,6 @@ _020E2D94: _020E2D9C: ldr r0, _020E2E98 ; =UNK_021D7178 bl OS_TryLockMutex -_020E2DA4: ; 0x020E2DA4 cmp r0, #0x0 bne _020E2DD0 ldr r0, _020E2E9C ; =OSi_ThreadInfo @@ -6472,7 +6362,6 @@ strcpy: ; 0x020E2EC8 strb r3, [r0, #0x0] cmp r3, #0x0 ldmeqia sp!, {r3-r5,pc} -_020E2EF8: ; 0x020E2EF8 rsbs r4, r4, #0x3 beq _020E2F18 _020E2F00: @@ -6480,7 +6369,6 @@ _020E2F00: cmp r3, #0x0 strb r3, [r2, #0x1]! ldmeqia sp!, {r3-r5,pc} -_020E2F10: ; 0x020E2F10 subs r4, r4, #0x1 bne _020E2F00 _020E2F18: @@ -6535,7 +6423,6 @@ _020E2FA0: bne _020E2FD4 subs r2, r2, #0x1 ldmeqia sp!, {r3,pc} -_020E2FC0: ; 0x020E2FC0 mov r1, #0x0 _020E2FC4: strb r1, [lr], #0x1 @@ -6598,7 +6485,6 @@ strcmp: ; 0x020E3060 subs r3, r2, r3 movne r0, r3 ldmneia sp!, {r4,pc} -_020E3078: ; 0x020E3078 and r4, r0, #0x3 and r3, r1, #0x3 cmp r3, r4 @@ -6608,7 +6494,6 @@ _020E3078: ; 0x020E3078 cmp r2, #0x0 moveq r0, #0x0 ldmeqia sp!, {r4,pc} -_020E309C: ; 0x020E309C rsbs r4, r4, #0x3 beq _020E30CC _020E30A4: @@ -6617,11 +6502,9 @@ _020E30A4: 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: @@ -6667,7 +6550,6 @@ _020E3148: subs r2, r3, r2 movne r0, r2 ldmneia sp!, {r4,pc} -_020E315C: ; 0x020E315C cmp r3, #0x0 bne _020E3148 mov r0, #0x0 @@ -6777,7 +6659,6 @@ strstr: ; 0x020E32A4 ldrneb r2, [r1, #0x0] cmpne r2, #0x0 ldmeqia sp!, {r4,pc} -_020E32B8: ; 0x020E32B8 ldrb r3, [r0, #0x0] add r4, r0, #0x1 cmp r3, #0x0 @@ -6888,23 +6769,14 @@ _020E3418: 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 @@ -7219,7 +7091,6 @@ _020E3854: mov r3, r1 mov r1, r0 bl _dsub -_020E3884: ; 0x020E3884 b _020E388C _020E3888: bl nan @@ -7533,23 +7404,14 @@ _020E3C98: 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 @@ -7951,14 +7813,12 @@ _020E423C: addne sp, sp, #0xa8 movne r1, r0 ldmneia sp!, {r3-r11,pc} -_020E4264: ; 0x020E4264 ldr r0, [sp, #0x28] cmp r0, #0x0 ldreq r1, _020E4310 ; =UNK_02106B7C addeq sp, sp, #0xa8 ldmeqia r1, {r0-r1} ldmeqia sp!, {r3-r11,pc} -_020E427C: ; 0x020E427C ldr r1, _020E4310 ; =UNK_02106B7C mov r0, #0x0 ldmia r1, {r2-r3} @@ -8289,23 +8149,14 @@ _020E4710: 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 @@ -8594,23 +8445,14 @@ _020E4B0C: 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 @@ -8873,7 +8715,6 @@ strtoul: ; 0x020E4E80 sub r1, lr, #0x80000001 str r12, [sp, #0x8] bl __strtoul -_020E4EC8: ; 0x020E4EC8 cmp r4, #0x0 ldrne r1, [sp, #0x1c] addne r1, r5, r1 @@ -8917,7 +8758,6 @@ strtold2: ; 0x020E4F18 sub r1, lr, #0x80000001 str r12, [sp, #0x8] bl __strtoul -_020E4F60: ; 0x020E4F60 cmp r4, #0x0 ldrne r1, [sp, #0x1c] addne r1, r5, r1 @@ -9265,19 +9105,12 @@ _020E53A8: 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 @@ -10097,7 +9930,6 @@ _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 @@ -10690,19 +10522,12 @@ _020E6710: 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 @@ -10718,41 +10543,23 @@ _020E6780: 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 @@ -11034,7 +10841,6 @@ _020E6BB0: mov r2, r7 mov r1, #0x0 bl wmemchr -_020E6BD0: ; 0x020E6BD0 cmp r0, #0x0 beq _020E6DDC sub r0, r0, r6 @@ -11074,7 +10880,6 @@ _020E6C40: mov r2, r6 mov r1, #0x0 bl memchr -_020E6C60: ; 0x020E6C60 cmp r0, #0x0 subne r6, r0, r5 b _020E6C78 @@ -11340,11 +11145,9 @@ vswprintf: ; 0x020E6FAC 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 @@ -12061,7 +11864,6 @@ _020E7794: mov r2, r4 mov r3, r10 bl _dadd -_020E7A6C: ; 0x020E7A6C mov r0, #0x0 ldr r3, _020E76B0 ; =0x40080000 mov r2, r0 @@ -12109,7 +11911,6 @@ _020E7A6C: ; 0x020E7A6C mov r2, r9 mov r3, r11 bl _dadd -_020E7B28: ; 0x020E7B28 mov r0, #0x0 mov r2, r4 mov r3, r10 @@ -12860,7 +12661,6 @@ _020E85EC: _020E8620: strb r1, [r12], #-0x1 b _020E85EC -_020E8628: ; 0x020E8628 bx lr arm_func_start __rounddec @@ -12870,16 +12670,13 @@ __rounddec: ; 0x020E862C 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 @@ -13027,12 +12824,10 @@ _020E8850: 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 @@ -13081,10 +12876,8 @@ _020E88F8: 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 @@ -13348,7 +13141,6 @@ _020E8BE4: tst r4, #0x1 addeq sp, sp, #0x4c ldmeqia sp!, {r4-r5,pc} -_020E8C14: ; 0x020E8C14 add r3, sp, #0x0 mov r12, r5 mov r2, #0x9 @@ -13444,7 +13236,6 @@ _020E8D4C: cmp r3, r2 movne r0, #0x0 ldmneia sp!, {r4,pc} -_020E8D68: ; 0x020E8D68 add r12, r12, #0x1 cmp r12, lr blt _020E8D4C @@ -13460,7 +13251,6 @@ _020E8D88: cmp r1, #0x0 movne r0, #0x0 ldmneia sp!, {r4,pc} -_020E8D9C: ; 0x020E8D9C ldrb r1, [r0, #0x4] add r12, r12, #0x1 cmp r12, r1 @@ -13488,7 +13278,6 @@ _020E8DE0: cmp r2, #0x0 moveq r0, #0x0 ldmeqia sp!, {r3-r5,pc} -_020E8DF0: ; 0x020E8DF0 ldrsh r3, [r1, #0x2] ldrsh r2, [r0, #0x2] cmp r2, r3 @@ -13509,11 +13298,9 @@ _020E8E20: 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 @@ -13528,7 +13315,6 @@ _020E8E64: cmp r0, #0x0 movne r0, #0x1 ldmneia sp!, {r3-r5,pc} -_020E8E78: ; 0x020E8E78 ldrb r0, [r1, #0x4] add r12, r12, #0x1 cmp r12, r0 @@ -13560,7 +13346,6 @@ _020E8EA8: 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] @@ -13748,7 +13533,6 @@ __num2dec_internal: mov r0, r8 mov r1, r6 bl __signbitf -_020E9160: ; 0x020E9160 cmp r0, #0x0 movne r1, #0x1 moveq r1, #0x0 @@ -13851,7 +13635,6 @@ __num2dec_internal2: ; 0x020E92C0 ldrb r0, [r4, #0x5] cmp r0, #0x9 ldmhiia sp!, {r3-r5,pc} -_020E92E0: ; 0x020E92E0 cmp r5, #0x20 movgt r5, #0x20 mov r0, r4 @@ -14002,7 +13785,6 @@ _020E94C8: add r0, sp, #0xb0 add r1, sp, #0xd6 bl __less_dec -_020E94FC: ; 0x020E94FC cmp r0, #0x0 beq _020E9538 ldrsb r0, [r4, #0x0] @@ -14061,7 +13843,6 @@ _020E9594: mov r0, r4 mov r1, r9 bl _dadd -_020E95D4: ; 0x020E95D4 cmp r6, #0x0 mov r6, r0 mov r10, r1 @@ -14135,13 +13916,11 @@ _020E96C0: 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] @@ -14174,13 +13953,11 @@ _020E975C: 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: @@ -14189,7 +13966,6 @@ _020E9788: add r0, sp, #0xd6 add r1, sp, #0x64 bl __less_dec -_020E979C: ; 0x020E979C cmp r0, #0x0 bne _020E9864 add r3, sp, #0x8a @@ -14275,7 +14051,6 @@ _020E98AC: add r0, sp, #0x3e add r1, sp, #0x18 bl __equals_dec -_020E98D8: ; 0x020E98D8 cmp r0, #0x0 beq _020E9910 ldr r1, [sp, #0x8] @@ -14294,7 +14069,6 @@ _020E9910: add r0, sp, #0x3e add r1, sp, #0x18 bl __less_dec -_020E991C: ; 0x020E991C cmp r0, #0x0 bne _020E9934 ldr r1, [sp, #0x0] @@ -14448,10 +14222,8 @@ _020E9B0C: 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 diff --git a/arm9/asm/unk_020281E0.s b/arm9/asm/unk_020281E0.s index e7c3eeb8..edf5e64f 100644 --- a/arm9/asm/unk_020281E0.s +++ b/arm9/asm/unk_020281E0.s @@ -347,7 +347,7 @@ _0202843A: add r5, #0x40 mul r0, r4 add r0, r5, r0 - bl FUN_0209700C + bl DWC_IsValidFriendData pop {r3-r5, pc} thumb_func_start FUN_02028448 diff --git a/arm9/asm/unk_0202DB14.s b/arm9/asm/unk_0202DB14.s index be2e9a54..1af52e10 100644 --- a/arm9/asm/unk_0202DB14.s +++ b/arm9/asm/unk_0202DB14.s @@ -198,7 +198,7 @@ FUN_0202DBE0: ; 0x0202DBE0 ldr r1, [r1, #0x0] add r1, #0x48 add r1, r1, r5 - bl FUN_02096CCC + bl DWC_CreateExchangeToken ldr r0, _0202DCD8 ; =UNK_021C59E4 mov r1, #0x0 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_020337E8.s b/arm9/asm/unk_020337E8.s index 34148259..d535c8fc 100644 --- a/arm9/asm/unk_020337E8.s +++ b/arm9/asm/unk_020337E8.s @@ -13,7 +13,7 @@ FUN_020337E8: ; 0x020337E8 add r0, #0x1f mov r1, #0x1f bic r0, r1 - bl FUN_02096B14 + bl DWC_Init add r5, r0, #0x0 add r0, r4, #0x0 bl FUN_02016A18 @@ -26,14 +26,14 @@ FUN_0203380C: ; 0x0203380C push {r4, lr} bl FUN_02028228 add r4, r0, #0x0 - bl FUN_02096FB0 + bl DWC_CheckUserData cmp r0, #0x0 bne _0203382A ldr r1, _0203382C ; =0x4144414A add r0, r4, #0x0 - bl thunk_FUN_02097190 + bl DWC_CreateUserData add r0, r4, #0x0 - bl thunk_FUN_02096e4c + bl DWC_ClearDirtyFlag _0203382A: pop {r4, pc} .balign 4 @@ -46,10 +46,10 @@ FUN_02033830: ; 0x02033830 bl FUN_02028228 add r4, r0, #0x0 add r1, sp, #0x0 - bl FUN_02096CCC + bl DWC_CreateExchangeToken add r0, r4, #0x0 add r1, sp, #0x0 - bl FUN_02096DA0 + bl DWC_GetGsProfileId add sp, #0xc pop {r3-r4, pc} @@ -59,11 +59,11 @@ FUN_0203384C: ; 0x0203384C bl FUN_020286EC bl FUN_02028228 add r4, r0, #0x0 - bl FUN_02096F80 + bl DWC_CheckHasProfile cmp r0, #0x0 beq _0203386E add r0, r4, #0x0 - bl FUN_02096F18 + bl DWC_CheckValidConsole cmp r0, #0x0 beq _0203386E mov r0, #0x1 diff --git a/arm9/asm/unk_02033874.s b/arm9/asm/unk_02033874.s index 1a099779..a321f397 100644 --- a/arm9/asm/unk_02033874.s +++ b/arm9/asm/unk_02033874.s @@ -23,7 +23,7 @@ FUN_02033874: ; 0x02033874 mvn r1, r1 str r1, [r0, #0x0] add r0, r5, #0x0 - bl FUN_0209700C + bl DWC_IsValidFriendData cmp r0, #0x0 bne _020338AE add sp, #0x8 @@ -34,7 +34,7 @@ _020338AE: _020338B0: add r0, r5, #0x0 add r1, r4, #0x0 - bl FUN_02096B78 + bl DWC_IsEqualFriendData cmp r0, #0x0 beq _020338C6 ldr r0, [sp, #0x0] @@ -45,16 +45,16 @@ _020338B0: _020338C6: add r0, r6, #0x0 add r1, r5, #0x0 - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r0, #0x0 ble _020338F4 add r0, r6, #0x0 add r1, r5, #0x0 - bl FUN_02096DA0 + bl DWC_GetGsProfileId str r0, [sp, #0x4] add r0, r6, #0x0 add r1, r4, #0x0 - bl FUN_02096DA0 + bl DWC_GetGsProfileId ldr r1, [sp, #0x4] cmp r1, r0 bne _020338F4 @@ -69,7 +69,7 @@ _020338F4: cmp r0, #0x0 bge _0203390A add r0, r4, #0x0 - bl FUN_0209700C + bl DWC_IsValidFriendData cmp r0, #0x0 bne _0203390A ldr r0, [sp, #0x0] @@ -102,7 +102,7 @@ FUN_02033918: ; 0x02033918 ldr r1, [sp, #0x0] ldr r2, [sp, #0x4] add r0, r7, #0x0 - bl FUN_020973B4 + bl DWC_CheckFriendKey cmp r0, #0x0 bne _02033950 add sp, #0x18 @@ -112,10 +112,10 @@ _02033950: ldr r1, [sp, #0x0] ldr r2, [sp, #0x4] add r0, sp, #0xc - bl FUN_02096D2C + bl DWC_CreateFriendKeyToken add r0, r7, #0x0 add r1, sp, #0xc - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r0, #0x0 bgt _0203396C add sp, #0x18 @@ -129,11 +129,11 @@ _0203396C: _02033974: add r0, r7, #0x0 add r1, sp, #0xc - bl FUN_02096DA0 + bl DWC_GetGsProfileId str r0, [sp, #0x8] add r0, r7, #0x0 add r1, r5, #0x0 - bl FUN_02096DA0 + bl DWC_GetGsProfileId ldr r1, [sp, #0x8] cmp r1, r0 bne _02033994 @@ -146,7 +146,7 @@ _02033994: cmp r0, #0x0 bge _020339A6 add r0, r5, #0x0 - bl FUN_0209700C + bl DWC_IsValidFriendData cmp r0, #0x0 bne _020339A6 str r4, [r6, #0x0] diff --git a/arm9/asm/unk_020910EC.s b/arm9/asm/unk_020910EC.s index 0fdc283b..abab2d60 100644 --- a/arm9/asm/unk_020910EC.s +++ b/arm9/asm/unk_020910EC.s @@ -1,8 +1,6 @@ .include "asm/macros.inc" .include "global.inc" - .extern OSi_ThreadInfo - .section .rodata .global UNK_020FF500 @@ -50,123 +48,6 @@ UNK_020FF572: ; 0x020FF572 UNK_020FF573: ; 0x020FF573 .byte 0x00 - .global UNK_020FF574 -UNK_020FF574: ; 0x020FF574 - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF578 -UNK_020FF578: ; 0x020FF578 - .byte 0x01, 0x02, 0x00, 0x04, 0x03, 0x05, 0x06, 0x07 - - .global UNK_020FF580 -UNK_020FF580: ; 0x020FF580 - .byte 0x05, 0x09, 0x01, 0x0E, 0x0C, 0x02, 0x0A, 0x00, 0x0B, 0x0D, 0x03, 0x04, 0x08, 0x06, 0x0F, 0x07 - - .global UNK_020FF590 -UNK_020FF590: ; 0x020FF590 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 - - .global UNK_020FF598 -UNK_020FF598: ; 0x020FF598 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - - .global UNK_020FF5B8 -UNK_020FF5B8: ; 0x020FF5B8 - .byte 0xFF, 0x01, 0xFF, 0x01 - - .global UNK_020FF5BC -UNK_020FF5BC: ; 0x020FF5BC - .byte 0xFF, 0xFF, 0x01, 0x02, 0xFF, 0xFF, 0x01, 0x02 - - .global UNK_020FF5C4 -UNK_020FF5C4: ; 0x020FF5C4 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x04, 0x06, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x04, 0x06, 0x08 - - .global UNK_020FF5D4 -UNK_020FF5D4: ; 0x020FF5D4 - .byte 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00 - .byte 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x15, 0x00, 0x17, 0x00, 0x19, 0x00, 0x1C, 0x00, 0x1F, 0x00 - .byte 0x22, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x37, 0x00, 0x3C, 0x00, 0x42, 0x00 - .byte 0x49, 0x00, 0x50, 0x00, 0x58, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x76, 0x00, 0x82, 0x00, 0x8F, 0x00 - .byte 0x9D, 0x00, 0xAD, 0x00, 0xBE, 0x00, 0xD1, 0x00, 0xE6, 0x00, 0xFD, 0x00, 0x17, 0x01, 0x33, 0x01 - .byte 0x51, 0x01, 0x73, 0x01, 0x98, 0x01, 0xC1, 0x01, 0xEE, 0x01, 0x20, 0x02, 0x56, 0x02, 0x92, 0x02 - .byte 0xD4, 0x02, 0x1C, 0x03, 0x6C, 0x03, 0xC3, 0x03, 0x24, 0x04, 0x8E, 0x04, 0x02, 0x05, 0x83, 0x05 - .byte 0x10, 0x06, 0xAB, 0x06, 0x56, 0x07, 0x12, 0x08, 0xE0, 0x08, 0xC3, 0x09, 0xBD, 0x0A, 0xD0, 0x0B - .byte 0xFF, 0x0C, 0x4C, 0x0E, 0xBA, 0x0F, 0x4C, 0x11, 0x07, 0x13, 0xEE, 0x14, 0x06, 0x17, 0x54, 0x19 - .byte 0xDC, 0x1B, 0xA5, 0x1E, 0xB6, 0x21, 0x15, 0x25, 0xCA, 0x28, 0xDF, 0x2C, 0x5B, 0x31, 0x4B, 0x36 - .byte 0xB9, 0x3B, 0xB2, 0x41, 0x44, 0x48, 0x7E, 0x4F, 0x71, 0x57, 0x2F, 0x60, 0xCE, 0x69, 0x62, 0x74 - .byte 0xFF, 0x7F, 0x00, 0x00 - - .global UNK_020FF688 -UNK_020FF688: ; 0x020FF688 - .byte 0x08 - - .global UNK_020FF689 -UNK_020FF689: ; 0x020FF689 - .byte 0x00, 0x08, 0x00, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00 - - .global UNK_020FF694 -UNK_020FF694: ; 0x020FF694 - .byte 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02 - .byte 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00 - - .global UNK_020FF6AC -UNK_020FF6AC: ; 0x020FF6AC - .byte 0x01, 0x08, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF6B4 -UNK_020FF6B4: ; 0x020FF6B4 - .byte 0x07, 0x0C, 0x02, 0x03, 0x09, 0x02, 0x00, 0x00 - - .global UNK_020FF6BC -UNK_020FF6BC: ; 0x020FF6BC - .byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF - .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x05, 0xFE - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF - .byte 0x00, 0xFF, 0x00, 0x00 - - .global UNK_020FF700 -UNK_020FF700: ; 0x020FF700 - .byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF - .byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0xFF, 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF - .byte 0x00, 0xFF, 0x00, 0x00 - - .global UNK_020FF744 -UNK_020FF744: ; 0x020FF744 - .byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE - .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE - .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE - .byte 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE - .byte 0x00, 0xFE, 0x00, 0x00 - - .global UNK_020FF788 -UNK_020FF788: ; 0x020FF788 - .byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x05, 0x05, 0xFE, 0xFF - .byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE - .byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE - .byte 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE - .byte 0x00, 0xFE, 0x00, 0x00 - - .global UNK_020FF7CC -UNK_020FF7CC: ; 0x020FF7CC - .byte 0x94, 0xE8, 0x0A, 0x02, 0x84, 0xE8, 0x0A, 0x02 - - .global UNK_020FF7D4 -UNK_020FF7D4: ; 0x020FF7D4 - .byte 0xB4, 0xF2, 0x0A, 0x02, 0x88, 0xF2, 0x0A, 0x02, 0x5C, 0xF2, 0x0A, 0x02, 0x30, 0xF2, 0x0A, 0x02 - .byte 0x24, 0xF2, 0x0A, 0x02, 0x18, 0xF2, 0x0A, 0x02, 0x0C, 0xF2, 0x0A, 0x02, 0x00, 0xF2, 0x0A, 0x02 - .byte 0xF4, 0xF1, 0x0A, 0x02, 0xE8, 0xF1, 0x0A, 0x02, 0xDC, 0xF1, 0x0A, 0x02, 0xD0, 0xF1, 0x0A, 0x02 - .byte 0xC4, 0xF1, 0x0A, 0x02, 0xB8, 0xF1, 0x0A, 0x02, 0xAC, 0xF1, 0x0A, 0x02, 0xA0, 0xF1, 0x0A, 0x02 - .byte 0x74, 0xF1, 0x0A, 0x02, 0x48, 0xF1, 0x0A, 0x02, 0x3C, 0xF1, 0x0A, 0x02, 0x30, 0xF1, 0x0A, 0x02 - .byte 0x24, 0xF1, 0x0A, 0x02, 0x18, 0xF1, 0x0A, 0x02, 0x0C, 0xF1, 0x0A, 0x02, 0x00, 0xF1, 0x0A, 0x02 - .byte 0xF4, 0xF0, 0x0A, 0x02, 0xE8, 0xF0, 0x0A, 0x02, 0xDC, 0xF0, 0x0A, 0x02, 0xD0, 0xF0, 0x0A, 0x02 - .byte 0xC4, 0xF0, 0x0A, 0x02, 0xB8, 0xF0, 0x0A, 0x02, 0xAC, 0xF0, 0x0A, 0x02, 0xA0, 0xF0, 0x0A, 0x02 - .byte 0x74, 0xF0, 0x0A, 0x02, 0x48, 0xF0, 0x0A, 0x02, 0x3C, 0xF0, 0x0A, 0x02, 0x30, 0xF0, 0x0A, 0x02 - .section .data .global UNK_02106170 @@ -179,781 +60,8 @@ UNK_02106170: ; 0x02106170 .word UNK_020FF554 .word UNK_020FF534 - .global UNK_0210618C -UNK_0210618C: ; 0x0210618C - .asciz "%s%c%c%c%c%s" - - .balign 4, 0 - .global UNK_0210619C -UNK_0210619C: ; 0x0210619C - ; .asciz "0123456789abcdefghijklmnopqrstuvwxyz" - .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 - .byte 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76 - .byte 0x00, 0x00, 0x00, 0x00 - - .balign 4, 0 - .global UNK_021061C0 -UNK_021061C0: ; 0x021061C0 - .word -26 - - .global UNK_021061C4 -UNK_021061C4: ; 0x021061C4 - .byte 0x01, 0x01, 0xC0, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 - .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021061DC -UNK_021061DC: ; 0x021061DC - .byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, 0x00, 0x00 - .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x08, 0x0D, 0x20 - - .global UNK_021061F4 -UNK_021061F4: ; 0x021061F4 - .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x06, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x20 - - .global UNK_0210620C -UNK_0210620C: ; 0x0210620C - .byte 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x00 - - .global UNK_02106218 -UNK_02106218: ; 0x02106218 - .byte 0x10, 0x00, 0x00, 0x00 - - .global UNK_0210621C -UNK_0210621C: ; 0x0210621C - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 - - .global UNK_02106224 -UNK_02106224: ; 0x02106224 - .asciz "NintendoDS" - - .balign 4, 0 - .global UNK_02106230 -UNK_02106230: ; 0x02106230 - .byte 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_0210623C -UNK_0210623C: ; 0x0210623C - .byte 0x04, 0x00, 0x05, 0x00 - - .global UNK_02106240 -UNK_02106240: ; 0x02106240 - .byte 0xFF, 0xFF, 0xFF, 0x00 - - .global UNK_02106244 -UNK_02106244: ; 0x02106244 - .byte 0xFF, 0xFF, 0xFF, 0xFF - - .global UNK_02106248 -UNK_02106248: ; 0x02106248 - .byte 0x55, 0x04, 0x03, 0x00 - - .global UNK_0210624C -UNK_0210624C: ; 0x0210624C - .byte 0x55, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106254 -UNK_02106254: ; 0x02106254 - .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00 - - .global UNK_02106260 -UNK_02106260: ; 0x02106260 - .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x04, 0x00, 0x00, 0x00 - - .global UNK_0210626C -UNK_0210626C: ; 0x0210626C - .byte 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x00, 0x00, 0x00 - - .global UNK_02106278 -UNK_02106278: ; 0x02106278 - .word UNK_02106240 - .word UNK_02106254 - .word UNK_0210624C - .word UNK_02106260 - .word UNK_0210626C - .word UNK_02106248 - - .global UNK_02106290 -UNK_02106290: ; 0x02106290 - .byte 0x53, 0x52, 0x56, 0x52, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106298 -UNK_02106298: ; 0x02106298 - .byte 0x43, 0x4C, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021062A0 -UNK_021062A0: ; 0x021062A0 - .byte 0x41, 0x00, 0x00, 0x00 - - .global UNK_021062A4 -UNK_021062A4: ; 0x021062A4 - .byte 0x42, 0x42, 0x00, 0x00 - - .global UNK_021062A8 -UNK_021062A8: ; 0x021062A8 - .byte 0x43, 0x43, 0x43, 0x00 - - .global UNK_021062AC -UNK_021062AC: ; 0x021062AC - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F - .byte 0x01, 0x06, 0x0B, 0x00, 0x05, 0x0A, 0x0F, 0x04, 0x09, 0x0E, 0x03, 0x08, 0x0D, 0x02, 0x07, 0x0C - .byte 0x05, 0x08, 0x0B, 0x0E, 0x01, 0x04, 0x07, 0x0A, 0x0D, 0x00, 0x03, 0x06, 0x09, 0x0C, 0x0F, 0x02 - .byte 0x00, 0x07, 0x0E, 0x05, 0x0C, 0x03, 0x0A, 0x01, 0x08, 0x0F, 0x06, 0x0D, 0x04, 0x0B, 0x02, 0x09 - - .global UNK_021062EC -UNK_021062EC: ; 0x021062EC - .byte 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_0210632C -UNK_0210632C: ; 0x0210632C - .byte 0x78, 0xA4, 0x6A, 0xD7, 0x56, 0xB7, 0xC7, 0xE8, 0xDB, 0x70, 0x20, 0x24, 0xEE, 0xCE, 0xBD, 0xC1 - .byte 0xAF, 0x0F, 0x7C, 0xF5, 0x2A, 0xC6, 0x87, 0x47, 0x13, 0x46, 0x30, 0xA8, 0x01, 0x95, 0x46, 0xFD - .byte 0xD8, 0x98, 0x80, 0x69, 0xAF, 0xF7, 0x44, 0x8B, 0xB1, 0x5B, 0xFF, 0xFF, 0xBE, 0xD7, 0x5C, 0x89 - .byte 0x22, 0x11, 0x90, 0x6B, 0x93, 0x71, 0x98, 0xFD, 0x8E, 0x43, 0x79, 0xA6, 0x21, 0x08, 0xB4, 0x49 - .byte 0x62, 0x25, 0x1E, 0xF6, 0x40, 0xB3, 0x40, 0xC0, 0x51, 0x5A, 0x5E, 0x26, 0xAA, 0xC7, 0xB6, 0xE9 - .byte 0x5D, 0x10, 0x2F, 0xD6, 0x53, 0x14, 0x44, 0x02, 0x81, 0xE6, 0xA1, 0xD8, 0xC8, 0xFB, 0xD3, 0xE7 - .byte 0xE6, 0xCD, 0xE1, 0x21, 0xD6, 0x07, 0x37, 0xC3, 0x87, 0x0D, 0xD5, 0xF4, 0xED, 0x14, 0x5A, 0x45 - .byte 0x05, 0xE9, 0xE3, 0xA9, 0xF8, 0xA3, 0xEF, 0xFC, 0xD9, 0x02, 0x6F, 0x67, 0x8A, 0x4C, 0x2A, 0x8D - .byte 0x42, 0x39, 0xFA, 0xFF, 0x81, 0xF6, 0x71, 0x87, 0x22, 0x61, 0x9D, 0x6D, 0x0C, 0x38, 0xE5, 0xFD - .byte 0x44, 0xEA, 0xBE, 0xA4, 0xA9, 0xCF, 0xDE, 0x4B, 0x60, 0x4B, 0xBB, 0xF6, 0x70, 0xBC, 0xBF, 0xBE - .byte 0xC6, 0x7E, 0x9B, 0x28, 0xFA, 0x27, 0xA1, 0xEA, 0x85, 0x30, 0xEF, 0xD4, 0x05, 0x1D, 0x88, 0x04 - .byte 0x39, 0xD0, 0xD4, 0xD9, 0xE5, 0x99, 0xDB, 0xE6, 0xF8, 0x7C, 0xA2, 0x1F, 0x65, 0x56, 0xAC, 0xC4 - .byte 0x44, 0x22, 0x29, 0xF4, 0x97, 0xFF, 0x2A, 0x43, 0xA7, 0x23, 0x94, 0xAB, 0x39, 0xA0, 0x93, 0xFC - .byte 0xC3, 0x59, 0x5B, 0x65, 0x92, 0xCC, 0x0C, 0x8F, 0x7D, 0xF4, 0xEF, 0xFF, 0xD1, 0x5D, 0x84, 0x85 - .byte 0x4F, 0x7E, 0xA8, 0x6F, 0xE0, 0xE6, 0x2C, 0xFE, 0x14, 0x43, 0x01, 0xA3, 0xA1, 0x11, 0x08, 0x4E - .byte 0x82, 0x7E, 0x53, 0xF7, 0x35, 0xF2, 0x3A, 0xBD, 0xBB, 0xD2, 0xD7, 0x2A, 0x91, 0xD3, 0x86, 0xEB - - .global UNK_0210642C -UNK_0210642C: ; 0x0210642C - .byte 0x80 - - .global UNK_0210642D -UNK_0210642D: ; 0x0210642D - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_0210646C -UNK_0210646C: ; 0x0210646C - .byte 0x01, 0x00, 0x00, 0x00 - - .global UNK_02106470 -UNK_02106470: ; 0x02106470 - .byte 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00 - .byte 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00 - - .global UNK_02106490 -UNK_02106490: ; 0x02106490 - .byte 0xF7, 0xB5, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106498 -UNK_02106498: ; 0x02106498 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00 - - .global UNK_021064A8 -UNK_021064A8: ; 0x021064A8 - .byte 0xFB, 0xE9, 0x3D, 0x40, 0xBC, 0xC7, 0xD1, 0x2C, 0x2A, 0xD0, 0x7C, 0x03, 0xF0, 0x08, 0x93, 0xF5 - - .global UNK_021064B8 -UNK_021064B8: ; 0x021064B8 - .word FUN_020AE8B4 - - .global UNK_021064BC -UNK_021064BC: ; 0x021064BC - .word FUN_020AE8AC - - .global UNK_021064C0 -UNK_021064C0: ; 0x021064C0 - .word FUN_020AE8C4 - - .global UNK_021064C4 -UNK_021064C4: ; 0x021064C4 - .word FUN_020AE8BC - - .global UNK_021064C8 -UNK_021064C8: ; 0x021064C8 - .word UNK_021064E4 - .word UNK_0210652C - - .global UNK_021064D0 -UNK_021064D0: ; 0x021064D0 - .word UNK_02106544 - .word UNK_0210652C - .word UNK_021064E4 - .word UNK_02106514 - .word UNK_021064FC - - .global UNK_021064E4 -UNK_021064E4: ; 0x021064E4 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021064FC -UNK_021064FC: ; 0x021064FC - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00 - - .global UNK_02106514 -UNK_02106514: ; 0x02106514 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00 - - .global UNK_0210652C -UNK_0210652C: ; 0x0210652C - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00 - - .global UNK_02106544 -UNK_02106544: ; 0x02106544 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00 - - .section .bss - - .global UNK_021C8C78 -UNK_021C8C78: ; 0x021C8C78 - .space 0x4 - - .global UNK_021C8C7C -UNK_021C8C7C: ; 0x021C8C7C - .space 0x4 - - .global UNK_021C8C80 -UNK_021C8C80: ; 0x021C8C80 - .space 0x4 - - .global UNK_021C8C84 -UNK_021C8C84: ; 0x021C8C84 - .space 0x5 - - .global UNK_021C8C89 -UNK_021C8C89: ; 0x021C8C89 - .space 0x1 - - .global UNK_021C8C8A -UNK_021C8C8A: ; 0x021C8C8A - .space 0x4 - - .global UNK_021C8C8E -UNK_021C8C8E: ; 0x021C8C8E - .space 0x2 - - .global UNK_021C8C90 -UNK_021C8C90: ; 0x021C8C90 - .space 0x10 - - .global UNK_021C8CA0 -UNK_021C8CA0: ; 0x021C8CA0 - .space 0x20 - - .global UNK_021C8CC0 -UNK_021C8CC0: ; 0x021C8CC0 - .space 0x4 - - .global UNK_021C8CC4 -UNK_021C8CC4: ; 0x021C8CC4 - .space 0x4 - - .global UNK_021C8CC8 -UNK_021C8CC8: ; 0x021C8CC8 - .space 0x4 - - .global UNK_021C8CCC -UNK_021C8CCC: ; 0x021C8CCC - .space 0x4 - - .global UNK_021C8CD0 -UNK_021C8CD0: ; 0x021C8CD0 - .space 0x4 - - .global UNK_021C8CD4 -UNK_021C8CD4: ; 0x021C8CD4 - .space 0x30 - - .global UNK_021C8D04 -UNK_021C8D04: ; 0x021C8D04 - .space 0x4 - - .global UNK_021C8D08 -UNK_021C8D08: ; 0x021C8D08 - .space 0x20 - - .global UNK_021C8D28 -UNK_021C8D28: ; 0x021C8D28 - .space 0x8 - - .global UNK_021C8D30 -UNK_021C8D30: ; 0x021C8D30 - .space 0x4 - - .global UNK_021C8D34 -UNK_021C8D34: ; 0x021C8D34 - .space 0x4 - - .global UNK_021C8D38 -UNK_021C8D38: ; 0x021C8D38 - .space 0x4 - - .global UNK_021C8D3C -UNK_021C8D3C: ; 0x021C8D3C - .space 0x4 - - .global UNK_021C8D40 -UNK_021C8D40: ; 0x021C8D40 - .space 0x4 - - .global UNK_021C8D44 -UNK_021C8D44: ; 0x021C8D44 - .space 0x8 - - .global UNK_021C8D4C -UNK_021C8D4C: ; 0x021C8D4C - .space 0x10 - - .global UNK_021C8D5C -UNK_021C8D5C: ; 0x021C8D5C - .space 0x10 - - .global UNK_021C8D6C -UNK_021C8D6C: ; 0x021C8D6C - .space 0x38 - - .global UNK_021C8DA4 -UNK_021C8DA4: ; 0x021C8DA4 - .space 0x104 - - .global UNK_021C8EA8 -UNK_021C8EA8: ; 0x021C8EA8 - .space 0x4 - - .global UNK_021C8EAC -UNK_021C8EAC: ; 0x021C8EAC - .space 0x4 - - .global UNK_021C8EB0 -UNK_021C8EB0: ; 0x021C8EB0 - .space 0x4 - - .global UNK_021C8EB4 -UNK_021C8EB4: ; 0x021C8EB4 - .space 0x4 - - .global UNK_021C8EB8 -UNK_021C8EB8: ; 0x021C8EB8 - .space 0x4 - - .global UNK_021C8EBC -UNK_021C8EBC: ; 0x021C8EBC - .space 0x4 - - .global UNK_021C8EC0 -UNK_021C8EC0: ; 0x021C8EC0 - .space 0x4 - - .global UNK_021C8EC4 -UNK_021C8EC4: ; 0x021C8EC4 - .space 0x4 - - .global UNK_021C8EC8 -UNK_021C8EC8: ; 0x021C8EC8 - .space 0x4 - - .global UNK_021C8ECC -UNK_021C8ECC: ; 0x021C8ECC - .space 0x4 - - .global UNK_021C8ED0 -UNK_021C8ED0: ; 0x021C8ED0 - .space 0x4 - - .global UNK_021C8ED4 -UNK_021C8ED4: ; 0x021C8ED4 - .space 0x4 - - .global UNK_021C8ED8 -UNK_021C8ED8: ; 0x021C8ED8 - .space 0x4 - - .global UNK_021C8EDC -UNK_021C8EDC: ; 0x021C8EDC - .space 0x4 - - .global UNK_021C8EE0 -UNK_021C8EE0: ; 0x021C8EE0 - .space 0x4 - - .global UNK_021C8EE4 -UNK_021C8EE4: ; 0x021C8EE4 - .space 0x4 - - .global UNK_021C8EE8 -UNK_021C8EE8: ; 0x021C8EE8 - .space 0x4 - - .global UNK_021C8EEC -UNK_021C8EEC: ; 0x021C8EEC - .space 0x4 - - .global UNK_021C8EF0 -UNK_021C8EF0: ; 0x021C8EF0 - .space 0x4 - - .global UNK_021C8EF4 -UNK_021C8EF4: ; 0x021C8EF4 - .space 0x4 - - .global UNK_021C8EF8 -UNK_021C8EF8: ; 0x021C8EF8 - .space 0x4 - - .global UNK_021C8EFC -UNK_021C8EFC: ; 0x021C8EFC - .space 0x4 - - .global UNK_021C8F00 -UNK_021C8F00: ; 0x021C8F00 - .space 0x4 - - .global UNK_021C8F04 -UNK_021C8F04: ; 0x021C8F04 - .space 0x4 - - .global UNK_021C8F08 -UNK_021C8F08: ; 0x021C8F08 - .space 0x4 - - .global UNK_021C8F0C -UNK_021C8F0C: ; 0x021C8F0C - .space 0x4 - - .global UNK_021C8F10 -UNK_021C8F10: ; 0x021C8F10 - .space 0x4 - - .global UNK_021C8F14 -UNK_021C8F14: ; 0x021C8F14 - .space 0x8 - - .global UNK_021C8F1C -UNK_021C8F1C: ; 0x021C8F1C - .space 0x8 - - .global UNK_021C8F24 -UNK_021C8F24: ; 0x021C8F24 - .space 0x3a - - .global UNK_021C8F5E -UNK_021C8F5E: ; 0x021C8F5E - .space 0x1a - - .global UNK_021C8F78 -UNK_021C8F78: ; 0x021C8F78 - .space 0xa - - .global UNK_021C8F82 -UNK_021C8F82: ; 0x021C8F82 - .space 0x56 - - .global UNK_021C8FD8 -UNK_021C8FD8: ; 0x021C8FD8 - .space 0x64 - - .global UNK_021C903C -UNK_021C903C: ; 0x021C903C - .space 0x64 - - .global UNK_021C90A0 -UNK_021C90A0: ; 0x021C90A0 - .space 0xc0 - - .global UNK_021C9160 -UNK_021C9160: ; 0x021C9160 - .space 0xc0 - - .global UNK_021C9220 -UNK_021C9220: ; 0x021C9220 - .space 0x2a - - .global UNK_021C924A -UNK_021C924A: ; 0x021C924A - .space 0x156 - - .global UNK_021C93A0 -UNK_021C93A0: ; 0x021C93A0 - .space 0x180 - - .global UNK_021C9520 -UNK_021C9520: ; 0x021C9520 - .space 0x9c0 - - .global UNK_021C9EE0 -UNK_021C9EE0: ; 0x021C9EE0 - .space 0x800 - - .global UNK_021CA6E0 -UNK_021CA6E0: ; 0x021CA6E0 - .space 0x4 - - .global UNK_021CA6E4 -UNK_021CA6E4: ; 0x021CA6E4 - .space 0x4 - - .global UNK_021CA6E8 -UNK_021CA6E8: ; 0x021CA6E8 - .space 0x13 - - .global UNK_021CA6FB -UNK_021CA6FB: ; 0x021CA6FB - .space 0x1 - - .global UNK_021CA6FC -UNK_021CA6FC: ; 0x021CA6FC - .space 0x170 - - .global UNK_021CA86C -UNK_021CA86C: ; 0x021CA86C - .space 0x4 - - .global UNK_021CA870 -UNK_021CA870: ; 0x021CA870 - .space 0x4 - - .global UNK_021CA874 -UNK_021CA874: ; 0x021CA874 - .space 0x8 - - .global UNK_021CA87C -UNK_021CA87C: ; 0x021CA87C - .space 0x20 - - .global UNK_021CA89C -UNK_021CA89C: ; 0x021CA89C - .space 0x4 - - .global UNK_021CA8A0 -UNK_021CA8A0: ; 0x021CA8A0 - .space 0x10 - - .global UNK_021CA8B0 -UNK_021CA8B0: ; 0x021CA8B0 - .space 0x4 - - .global UNK_021CA8B4 -UNK_021CA8B4: ; 0x021CA8B4 - .space 0x4 - - .global UNK_021CA8B8 -UNK_021CA8B8: ; 0x021CA8B8 - .space 0x4 - - .global UNK_021CA8BC -UNK_021CA8BC: ; 0x021CA8BC - .space 0x4 - - .global UNK_021CA8C0 -UNK_021CA8C0: ; 0x021CA8C0 - .space 0x4 - - .global UNK_021CA8C4 -UNK_021CA8C4: ; 0x021CA8C4 - .space 0x4 - - .global UNK_021CA8C8 -UNK_021CA8C8: ; 0x021CA8C8 - .space 0x4 - - .global UNK_021CA8CC -UNK_021CA8CC: ; 0x021CA8CC - .space 0x4 - - .global UNK_021CA8D0 -UNK_021CA8D0: ; 0x021CA8D0 - .space 0x4 - - .global UNK_021CA8D4 -UNK_021CA8D4: ; 0x021CA8D4 - .space 0x4 - - .global UNK_021CA8D8 -UNK_021CA8D8: ; 0x021CA8D8 - .space 0x4 - - .global UNK_021CA8DC -UNK_021CA8DC: ; 0x021CA8DC - .space 0xc - - .global UNK_021CA8E8 -UNK_021CA8E8: ; 0x021CA8E8 - .space 0x1bc - - .global UNK_021CAAA4 -UNK_021CAAA4: ; 0x021CAAA4 - .space 0x45c - - .global UNK_021CAF00 -UNK_021CAF00: ; 0x021CAF00 - .space 0x8d8 - - .global UNK_021CB7D8 -UNK_021CB7D8: ; 0x021CB7D8 - .space 0x4 - - .global UNK_021CB7DC -UNK_021CB7DC: ; 0x021CB7DC - .space 0x4 - - .global UNK_021CB7E0 -UNK_021CB7E0: ; 0x021CB7E0 - .space 0xc - - .global UNK_021CB7EC -UNK_021CB7EC: ; 0x021CB7EC - .space 0x4 - - .global UNK_021CB7F0 -UNK_021CB7F0: ; 0x021CB7F0 - .space 0xc - - .global UNK_021CB7FC -UNK_021CB7FC: ; 0x021CB7FC - .space 0xc - - .global UNK_021CB808 -UNK_021CB808: ; 0x021CB808 - .space 0xc - - .global UNK_021CB814 -UNK_021CB814: ; 0x021CB814 - .space 0x4 - - .global UNK_021CB818 -UNK_021CB818: ; 0x021CB818 - .space 0x4 - - .global UNK_021CB81C -UNK_021CB81C: ; 0x021CB81C - .space 0x8 - - .global UNK_021CB824 -UNK_021CB824: ; 0x021CB824 - .space 0x14 - - .global UNK_021CB838 -UNK_021CB838: ; 0x021CB838 - .space 0x18 - - .global UNK_021CB850 -UNK_021CB850: ; 0x021CB850 - .space 0x18 - - .global UNK_021CB868 -UNK_021CB868: ; 0x021CB868 - .space 0x4 - - .global UNK_021CB86C -UNK_021CB86C: ; 0x021CB86C - .space 0x4 - - .global UNK_021CB870 -UNK_021CB870: ; 0x021CB870 - .space 0x4 - - .global UNK_021CB874 -UNK_021CB874: ; 0x021CB874 - .space 0x4 - - .global UNK_021CB878 -UNK_021CB878: ; 0x021CB878 - .space 0x4 - - .global UNK_021CB87C -UNK_021CB87C: ; 0x021CB87C - .space 0x4 - - .global UNK_021CB880 -UNK_021CB880: ; 0x021CB880 - .space 0x10 - - .global UNK_021CB890 -UNK_021CB890: ; 0x021CB890 - .space 0x4 - - .global UNK_021CB894 -UNK_021CB894: ; 0x021CB894 - .space 0x4 - - .global UNK_021CB898 -UNK_021CB898: ; 0x021CB898 - .space 0x4 - - .global UNK_021CB89C -UNK_021CB89C: ; 0x021CB89C - .space 0x4 - - .global UNK_021CB8A0 -UNK_021CB8A0: ; 0x021CB8A0 - .space 0x4 - - .global UNK_021CB8A4 -UNK_021CB8A4: ; 0x021CB8A4 - .space 0x18 - - .global UNK_021CB8BC -UNK_021CB8BC: ; 0x021CB8BC - .space 0x18 - - .global UNK_021CB8D4 -UNK_021CB8D4: ; 0x021CB8D4 - .space 0x440 - - .global UNK_021CBD14 -UNK_021CBD14: ; 0x021CBD14 - .space 0x1000 - - .global UNK_021CCD14 -UNK_021CCD14: ; 0x021CCD14 - .space 0x4 - - .global UNK_021CCD18 -UNK_021CCD18: ; 0x021CCD18 - .space 0x4 - - .global UNK_021CCD1C -UNK_021CCD1C: ; 0x021CCD1C - .space 0x4 - - .global UNK_021CCD20 -UNK_021CCD20: ; 0x021CCD20 - .space 0x18 - - .global UNK_021CCD38 -UNK_021CCD38: ; 0x021CCD38 - .space 0x4 - - .global UNK_021CCD3C -UNK_021CCD3C: ; 0x021CCD3C - .space 0xc - - .global UNK_021CCD48 -UNK_021CCD48: ; 0x021CCD48 - .space 0x4 - - .global UNK_021CCD4C -UNK_021CCD4C: ; 0x021CCD4C - .space 0xc - - .global UNK_021CCD58 -UNK_021CCD58: ; 0x021CCD58 - .space 0x14 - .text - ; Nintendo DWC - arm_func_start FUN_020910EC FUN_020910EC: ; 0x020910EC stmdb sp!, {r4-r5,lr} @@ -5648,30303 +4756,3 @@ _0209530C: strb r7, [r0, #-0x4] strb r6, [r0, #-0x3] ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_02095324 -FUN_02095324: ; 0x02095324 - ldr r0, _0209532C ; =UNK_021C8C84 - bx lr - .balign 4 -_0209532C: .word UNK_021C8C84 - - 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 ; =UNK_021C8C84 - 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 ; =UNK_021C8C84 - ldr r1, _020953E8 ; =UNK_021C8C8A - 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 ; =UNK_021C8C84 - 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 ; =UNK_021C8C90 - mov r4, r2, asr #0x2 - mov r2, #0x2 - strb r4, [r3, #0xb] - bl MI_CpuCopy8 - ldr r0, _020953E4 ; =UNK_021C8C84 - add sp, sp, #0x8 - ldmia sp!, {r4,pc} - .balign 4 -_020953E4: .word UNK_021C8C84 -_020953E8: .word UNK_021C8C8A -_020953EC: .word UNK_021C8C90 - - arm_func_start FUN_020953F0 -FUN_020953F0: ; 0x020953F0 - ldr r3, _02095420 ; =UNK_021C8C78 - and r12, r1, #0xff - ldr r0, _02095424 ; =UNK_021C8C7C - mov r1, #0x1 - strh r12, [r3, #0x0] - str r1, [r0, #0x0] - cmp r2, #0x0 - movne r0, #0xff - strneh r0, [r3, #0x0] - ldr r0, _02095420 ; =UNK_021C8C78 - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_02095420: .word UNK_021C8C78 -_02095424: .word UNK_021C8C7C - - 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 - 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 - bl 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 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl memcmp - 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 - 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} - mov r0, r4 - bl SVC_WaitByLoop - b _0209552C - 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 - 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 - bl 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 ; =UNK_021C8CA0 - 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 ; =UNK_021C8C7C - 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 - cmp r0, #0x0 - ldrlt r8, [sp, #0x34] - blt _0209574C - ldr r2, [sp, #0x38] - mov r0, r5 - mov r1, r7 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x3c] - blt _0209574C - ldr r1, [sp, #0x40] - ldr r2, [sp, #0x44] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x48] - blt _0209574C - ldr r1, [sp, #0xc] - ldr r2, [sp, #0x4c] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x50] - blt _0209574C - ldr r1, [sp, #0x10] - ldr r2, [sp, #0x54] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x58] - blt _0209574C - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x5c] - mov r0, r5 - bl PXI_SendWordByFifo - 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 - 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 - cmp r0, #0x0 - ldrlt r8, [sp, #0x68] - blt _020958E0 - ldr r2, [sp, #0x6c] - mov r0, r5 - mov r1, r7 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x70] - blt _020958E0 - ldr r1, [sp, #0x1c] - ldr r2, [sp, #0x74] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x78] - blt _020958E0 - ldr r1, [sp, #0x20] - ldr r2, [sp, #0x7c] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x80] - blt _020958E0 - ldr r1, [sp, #0x24] - ldr r2, [sp, #0x84] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x88] - movge r8, r4 -_020958E0: - bl OS_GetTick - str r0, [sp, #0x0] - mov r11, r1 - b _0209574C -_020958F0: - ldr r1, [sp, #0x28] - mov r0, r5 - mov r2, r6 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x8c] - blt _0209574C - ldr r1, [sp, #0x2c] - ldr r2, [sp, #0x90] - mov r0, r5 - bl PXI_SendWordByFifo - cmp r0, #0x0 - ldrlt r8, [sp, #0x94] - blt _0209574C - ldr r1, [sp, #0x30] - ldr r2, [sp, #0x98] - mov r0, r5 - bl PXI_SendWordByFifo - 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 - 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 - cmp r0, #0x0 - movge r8, r4 - ldrlt r8, [sp, #0xa4] - b _0209574C -_02095988: - ldr r0, _02095AC8 ; =UNK_021C8C7C - ldr r0, [r0, #0x0] - cmp r0, #0x1 - bne _0209574C - ldr r0, _02095AD8 ; =UNK_021C8C78 - ldr r8, [sp, #0xa8] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - bne _02095AA0 - cmp r9, #0x7 - addls pc, pc, r9, lsl #0x2 - b _0209574C - b _0209574C - b _020959D8 - b _020959E4 - b _020959EC - b _020959F4 - b _020959F4 - b _02095A88 - 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} - 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 - cmp r1, #0x0 - cmpeq r0, #0xfa0 - bls _02095A7C -_02095A74: - ldr r9, [sp, #0xb8] - b _0209574C -_02095A7C: - ldr r0, [sp, #0xbc] - bl 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 UNK_021C8CA0 -_02095AB4: .word 0x01050000 -_02095AB8: .word 0x02002200 -_02095ABC: .word 0x02002300 -_02095AC0: .word 0x02002500 -_02095AC4: .word 0x01020000 -_02095AC8: .word UNK_021C8C7C -_02095ACC: .word 0x03002000 -_02095AD0: .word 0x03002D00 -_02095AD4: .word 0x03002100 -_02095AD8: .word UNK_021C8C78 -_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 - cmp r0, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - 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} - 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 ; =UNK_021C8C84 - mov r2, #0xe - bx r12 - .balign 4 -_02095C34: .word MI_CpuCopy8 -_02095C38: .word UNK_021C8C84 - - arm_func_start FUN_02095C3C -FUN_02095C3C: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r1, _02095CD8 ; =UNK_021C8C80 - 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 - 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 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - .balign 4 -_02095CD8: .word UNK_021C8C80 - - arm_func_start FUN_02095CDC -FUN_02095CDC: ; 0x02095CDC - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r3, _02095D64 ; =UNK_021C8C80 - 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 - 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 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_02095D64: .word UNK_021C8C80 - - arm_func_start FUN_02095D68 -FUN_02095D68: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _02095D98 ; =UNK_021C8C80 - mov r2, r0 - ldr r0, [r1, #0x0] - mov r1, #0x400 - bl FUN_0209555C - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_02095D98: .word UNK_021C8C80 - - 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 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldrh r2, [r4, #0x0] - ldr r1, _02095DDC ; =UNK_021C8C80 - mov r0, #0x1 - mov r2, r2, lsl #0x3 - sub r2, r2, #0x400 - str r2, [r1, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_02095DDC: .word UNK_021C8C80 - - arm_func_start FUN_02095DE0 -FUN_02095DE0: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r2, _02095EBC ; =UNK_021C8C80 - 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 - cmp r0, #0x0 - bne _02095E44 - bl OS_Terminate - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r11,pc} -_02095E44: - ldr r0, _02095EC4 ; =UNK_021C8C84 - 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 - cmp r0, #0x0 - beq _02095E68 - add r9, r9, #0x1 - cmp r9, #0x2 - add r8, r8, #0x100 - blt _02095E1C - bl FUN_02095428 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - .balign 4 -_02095EBC: .word UNK_021C8C80 -_02095EC0: .word 0x0000A001 -_02095EC4: .word UNK_021C8C84 - - arm_func_start FUN_02095EC8 -FUN_02095EC8: - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, _02095F90 ; =UNK_021C8C84 - 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 ; =UNK_021C8C89 - 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 ; =UNK_021C8C8E - 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 ; =UNK_021C8C90 - 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 UNK_021C8C84 -_02095F94: .word 0x000007FF -_02095F98: .word UNK_021C8C89 -_02095F9C: .word UNK_021C8C8E -_02095FA0: .word 0x000003FF -_02095FA4: .word UNK_021C8C90 - - arm_func_start FUN_02095FA8 -FUN_02095FA8: ; 0x02095FA8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _02095FD8 ; =UNK_021C8C80 - mov r2, r0 - ldr r0, [r1, #0x0] - mov r1, #0x300 - bl FUN_0209555C - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_02095FD8: .word UNK_021C8C80 - - 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 - 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} - cmp r0, #0x2 - addhi sp, sp, #0x8 - movhi r0, #0x0 - ldmhiia sp!, {r4,pc} - add r0, r4, #0x40 - bl FUN_02095B88 - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r1, _0209618C ; =UNK_020FF574 - add r0, r4, #0xc0 - mov r2, #0x4 - bl memcmp - cmp r0, #0x0 - beq _02096140 - add r0, r4, #0xc4 - bl FUN_02095AE0 - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldrb r0, [r4, #0xd0] - cmp r0, #0x20 - addhi sp, sp, #0x8 - movhi r0, #0x0 - ldmhiia sp!, {r4,pc} - add r1, sp, #0x0 - bl FUN_02095BB0 - add r1, sp, #0x0 - add r0, r4, #0xc0 - bl FUN_02095B0C - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} -_02096140: - ldr r1, _0209618C ; =UNK_020FF574 - add r0, r4, #0xc8 - mov r2, #0x4 - bl memcmp - cmp r0, #0x0 - beq _02096180 - add r0, r4, #0xc8 - bl FUN_02095AE0 - cmp r0, #0x0 - bne _02096180 - add r0, r4, #0xcc - bl FUN_02095AE0 - 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 UNK_020FF574 - - 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 - cmp r0, #0x0 - addeq sp, sp, #0x14 - ldreq r0, _020964B4 ; =0xFFFFD8EF - ldmeqia sp!, {r4-r11,pc} - ldr r1, _020964B8 ; =0x0000A001 - add r0, r10, #0x500 - bl MATHi_CRC16InitTableRev - mov r0, r10 - bl FUN_02095D68 - cmp r0, #0x0 - addeq sp, sp, #0x14 - ldreq r0, _020964B4 ; =0xFFFFD8EF - ldmeqia sp!, {r4-r11,pc} - 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 - 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 - 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 - 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 - 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 - cmp r0, #0x0 - addeq sp, sp, #0x14 - ldreq r0, _020964BC ; =0xFFFFD8F0 - ldmeqia sp!, {r4-r11,pc} - 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 - 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 - cmp r0, #0x0 - addne sp, sp, #0x28 - movne r0, #0x0 - ldmneia sp!, {r4-r10,pc} - add r0, sp, #0x18 - bl RTC_GetTime - cmp r0, #0x0 - addne sp, sp, #0x28 - movne r0, #0x0 - ldmneia sp!, {r4-r10,pc} - 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} - bl OS_IsTickAvailable - 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 - 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 - cmp r0, #0x0 - addeq sp, sp, #0x18 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - add r0, sp, #0x0 - mov r1, r4 - bl FUN_02095DE0 - 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 - cmp r0, #0x0 - addne sp, sp, #0x28 - movne r0, #0x0 - ldmneia sp!, {r4-r10,pc} - add r0, sp, #0x18 - bl RTC_GetTime - cmp r0, #0x0 - addne sp, sp, #0x28 - movne r0, #0x0 - ldmneia sp!, {r4-r10,pc} - 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} - bl OS_IsTickAvailable - 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 ; =UNK_020FF580 - 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 ; =UNK_020FF578 - 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 UNK_020FF580 -_02096B10: .word UNK_020FF578 - - .extern _SDK_NintendoDWC - - arm_func_start FUN_02096B14 -FUN_02096B14: ; 0x02096B14 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, _02096B74 ; =_SDK_NintendoDWC - mov r4, #0x0 - bl OSi_ReferSymbol - mov r0, r6 - bl FUN_02096190 - mov r5, r0 - bl FUN_020964C8 - 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 _SDK_NintendoDWC - - ; Nintendo Wifi (?) - - 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 - cmp r5, r0 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r7,pc} - cmp r5, #0x3 - bne _02096BD8 - mov r0, r7 - bl FUN_02097544 - mov r5, r0 - mov r0, r4 - bl FUN_02097544 - 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 - 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} - - arm_func_start FUN_02096C78 -FUN_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 - cmp r0, #0x0 - addeq r0, r5, #0x4 - ldmeqia r0, {r0-r2} - addeq sp, sp, #0x4 - stmeqia r4, {r0-r2} - ldmeqia sp!, {r4-r5,pc} - 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 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - 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} - 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 - 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 - 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 - cmp r0, #0x0 - addeq sp, sp, #0x18 - moveq r0, #0x1 - ldmeqia sp!, {r4,pc} - 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} - 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 - 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 - 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 - 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 - 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 ; =UNK_0210618C - 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 UNK_0210618C - - 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 ; =UNK_0210619C - 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 UNK_0210619C - - arm_func_start FUN_02097324 -FUN_02097324: ; 0x02097324 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_02097344 - 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} - 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} - 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 - 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 ; =UNK_021C8CCC - ldr r1, [r0, #0x0] - orr r1, r1, #0x2 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020975EC: .word UNK_021C8CCC - - arm_func_start FUN_020975F0 -FUN_020975F0: ; 0x020975F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _02097654 ; =UNK_021C8CC0 - ldr r0, _02097658 ; =UNK_021C8CCC - ldr lr, [r1, #0x0] - ldr r3, [r0, #0x0] - ldr r12, [lr, #0x4] - ldr r2, _0209765C ; =UNK_021C8F04 - ldr r1, _02097660 ; =UNK_021C8ED0 - str r12, [r2, #0x0] - ldr r12, [lr, #0x8] - ldr r2, _02097664 ; =UNK_021C8EE0 - str r12, [r1, #0x0] - ldr r12, [lr, #0xc] - ldr r1, _02097668 ; =UNK_021C8F1C - 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 UNK_021C8CC0 -_02097658: .word UNK_021C8CCC -_0209765C: .word UNK_021C8F04 -_02097660: .word UNK_021C8ED0 -_02097664: .word UNK_021C8EE0 -_02097668: .word UNK_021C8F1C - - arm_func_start FUN_0209766C -FUN_0209766C: ; 0x0209766C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020977C0 ; =UNK_021C8CC0 - ldr r5, _020977C4 ; =UNK_021C8CD4 - ldr r4, [r0, #0x0] - mov r0, r5 - mov r1, #0x0 - mov r2, #0x30 - bl MI_CpuFill8 - ldr r0, _020977C8 ; =UNK_021C8CC4 - 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 ; =UNK_021C8CC0 - 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 ; =UNK_021061DC - mov r3, r0, asr #0x1 - ldr r0, _020977D4 ; =UNK_021C8F04 - 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 ; =UNK_021C8CCC - mov r1, #0x1 - str r1, [r0, #0x0] - ldr r1, _020977DC ; =FUN_020975D8 - str r2, [r5, #0x0] - ldr r0, _020977E0 ; =UNK_021C8CC8 - str r1, [r5, #0xc] - ldr r0, [r0, #0x0] - str r0, [r5, #0x28] - b _0209778C -_02097774: - ldr r0, _020977D8 ; =UNK_021C8CCC - 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 UNK_021C8CC0 -_020977C4: .word UNK_021C8CD4 -_020977C8: .word UNK_021C8CC4 -_020977CC: .word FUN_020975B4 -_020977D0: .word UNK_021061DC -_020977D4: .word UNK_021C8F04 -_020977D8: .word UNK_021C8CCC -_020977DC: .word FUN_020975D8 -_020977E0: .word UNK_021C8CC8 -_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 ; =UNK_021C8CC0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x20] - bl FUN_02097B78 - movs r4, r0 - bmi _0209781C - ldr r0, _0209782C ; =UNK_021061F4 - bl FUN_02097F70 - ldr r1, _02097830 ; =UNK_021C8CD0 - str r0, [r1, #0x0] -_0209781C: - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_02097828: .word UNK_021C8CC0 -_0209782C: .word UNK_021061F4 -_02097830: .word UNK_021C8CD0 - - .extern _SDK_NintendoWiFi - - arm_func_start FUN_02097834 -FUN_02097834: ; 0x02097834 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, _02097870 ; =_SDK_NintendoWiFi - bl OSi_ReferSymbol - ldr r0, _02097874 ; =UNK_021C8CC0 - 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 _SDK_NintendoWiFi -_02097874: .word UNK_021C8CC0 - - ; Ubiquitous CPS (?) - - 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 - 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 - 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 - 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 - 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 ; =UNK_021C8D08 - mov r2, #0x0 - bl OS_SendMessage - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_02097A94: .word UNK_021C8D08 - - 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 - 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 ; =UNK_021C8D08 - add r1, sp, #0x0 - bl OS_ReceiveMessage - cmp r0, #0x0 - ldrne r0, [sp, #0x0] - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_02097B10: .word UNK_021C8D08 - - arm_func_start FUN_02097B14 -FUN_02097B14: ; 0x02097B14 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _02097B6C ; =UNK_021C8D08 - 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 ; =UNK_021C8CC0 - ldr r1, _02097B74 ; =UNK_021C8D04 - ldr r2, [r0, #0x0] - ldr r0, [r1, #0x0] - ldr r1, [r2, #0x1c] - blx r1 - ldr r1, _02097B74 ; =UNK_021C8D04 - mov r0, #0x0 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_02097B6C: .word UNK_021C8D08 -_02097B70: .word UNK_021C8CC0 -_02097B74: .word UNK_021C8D04 - - 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 ; =UNK_021C8CC0 - 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 ; =UNK_021C8D08 - mov r1, r6 - mov r2, r4 - bl OS_InitMessageQueue - 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 ; =UNK_021C8D04 - mov r0, #0x0 - str r6, [r1, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_02097C08: .word UNK_021C8CC0 -_02097C0C: .word UNK_021C8D08 -_02097C10: .word UNK_021C8D04 - - 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 - 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 ; =UNK_021C8CD0 - 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 UNK_021C8CD0 - - 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 - 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 ; =UNK_021C8CC0 - 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 UNK_021C8CC0 - - 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 - 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 - 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 - 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 - 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 ; =UNK_021061DC - bl FUN_02097F70 - movs r7, r0 - addmi sp, sp, #0x4 - ldmmiia sp!, {r4-r7,lr} - bxmi lr - ldrh r1, [r6, #0x74] - bl FUN_020984B4 - 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 - cmp r0, #0x0 - movge r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_02098228: .word UNK_021061DC - - arm_func_start FUN_0209822C -FUN_0209822C: ; 0x0209822C - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_02099FA8 - 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 - 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 - 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 ; =UNK_021061C0 - 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 UNK_021061C0 - - 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 - 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 ; =UNK_021C8CC0 - 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 ; =UNK_021C8D28 - ldr r1, [r0, #0x0] - add r1, r1, #0x1 - str r1, [r0, #0x0] - b _02098628 -_02098618: - ldr r0, _0209866C ; =UNK_021C8D28 - 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 UNK_021C8CC0 -_0209866C: .word UNK_021C8D28 - - 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 - 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 ; =UNK_021C8CC0 - 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 UNK_021C8CC0 - - 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 - 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 - 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 - 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 - 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 ; =OSi_ThreadInfo - mov r4, r0 - ldr r0, [r1, #0x4] - ldr r5, [r0, #0xa4] - bl OS_DisableInterrupts - 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 ; =UNK_021C8CD4 - 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 ; =UNK_021C8CD4 - ldr r1, [r1, #0x24] - mov r5, r1, lsl #0x1 - b _02098F80 -_02098F74: - ldr r1, _02098FC0 ; =UNK_021C8CD4 - ldr r1, [r1, #0x24] - mov r5, r1, lsl #0x1 -_02098F80: - bl OS_RestoreInterrupts - cmp r5, #0x0 - ble _02098FAC - mov r0, r4 - mov r1, r5 - bl _s32_div_f - 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 OSi_ThreadInfo -_02098FC0: .word UNK_021C8CD4 - - 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 - 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 - 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 - 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 - 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 - 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 - 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 ; =UNK_021C8D34 - mov r5, r0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - beq _020996F0 -_020996E0: - bl FUN_020997B8 - 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 UNK_021C8D34 - - 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 - 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 - 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 ; =UNK_021C8CC0 -_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 ; =UNK_021C8CC0 - 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 UNK_021C8CC0 - - 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 - cmp r0, #0x0 - mvnne r0, #0x19 - ldmneia sp!, {r4,lr} - bxne lr - mov r0, r4 - bl FUN_02099FA8 - 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 - 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 - cmp r0, #0x0 - beq _02099A88 - mov r0, r4 - bl FUN_02099F78 - 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 ; =UNK_021C8CD0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _02099AE8 - bl FUN_02099B14 - movs r4, r0 - bne _02099AE0 - ldr r0, _02099B10 ; =UNK_021C8CD0 - ldr r0, [r0, #0x0] - bl FUN_0209996C - ldr r0, _02099B10 ; =UNK_021C8CD0 - ldr r0, [r0, #0x0] - bl FUN_02099A58 - cmp r0, #0x0 - ldrne r0, _02099B10 ; =UNK_021C8CD0 - movne r1, #0x0 - strne r1, [r0, #0x0] - mvn r4, #0x19 -_02099AE0: - bl FUN_020996C0 - b _02099B04 -_02099AE8: - bl FUN_0209FD34 - 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 UNK_021C8CD0 - - arm_func_start FUN_02099B14 -FUN_02099B14: ; 0x02099B14 - stmdb sp!, {r4-r6,lr} - ldr r4, _02099BBC ; =UNK_021C8CD0 - ldr r5, _02099BC0 ; =UNK_021C8D30 -_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 - cmp r6, #0x0 - beq _02099B6C - mov r0, r6 - bl FUN_0209996C - b _02099B20 -_02099B6C: - ldr r0, _02099BC0 ; =UNK_021C8D30 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - beq _02099B98 - ldr r0, _02099BBC ; =UNK_021C8CD0 - ldr r0, [r0, #0x0] - cmp r1, r0 - bne _02099BB0 - ldr r0, [r1, #0x7c] - cmp r0, #0x0 - bne _02099BB0 -_02099B98: - ldr r0, _02099BC4 ; =UNK_021C8D34 - 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 UNK_021C8CD0 -_02099BC0: .word UNK_021C8D30 -_02099BC4: .word UNK_021C8D34 - - arm_func_start FUN_02099BC8 -FUN_02099BC8: ; 0x02099BC8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _02099C68 ; =UNK_021C8CC8 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - ldreq r0, _02099C6C ; =UNK_021C8F04 - 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 - mov r0, #0x0 - bl FUN_0209FD24 - ldr r0, _02099C70 ; =UNK_021C8CC0 - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x28] - cmp r0, #0x0 - bne _02099C4C - ldr r0, _02099C74 ; =UNK_021C8CD4 - ldr r1, [r1, #0x1c] - ldr r0, [r0, #0x1c] - blx r1 -_02099C4C: - ldr r0, _02099C70 ; =UNK_021C8CC0 - 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 UNK_021C8CC8 -_02099C6C: .word UNK_021C8F04 -_02099C70: .word UNK_021C8CC0 -_02099C74: .word UNK_021C8CD4 - - arm_func_start FUN_02099C78 -FUN_02099C78: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _02099CE0 ; =UNK_021C8F04 - ldr r2, [r0, #0x0] - cmp r2, #0x0 - bne _02099CBC - ldr r0, _02099CE4 ; =UNK_021C8CCC - 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 ; =UNK_021C8CC8 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - streq r2, [r0, #0x0] -_02099CCC: - ldr r0, _02099CE0 ; =UNK_021C8F04 - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_02099CE0: .word UNK_021C8F04 -_02099CE4: .word UNK_021C8CCC -_02099CE8: .word UNK_021C8CC8 - - 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 - cmp r0, #0x0 - ldrne r1, _02099D24 ; =UNK_021C8F1C - 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 UNK_021C8F1C - - 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 ; =UNK_021C8F1C - 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 ; =UNK_021C8F1C - 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 UNK_021C8F1C - - 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 ; =UNK_021C8CC0 - 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 ; =UNK_021C8CC0 - 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 UNK_021C8CC0 -_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 - 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 - cmp r0, #0x0 - mov r0, r5 - orrgt r4, r4, #0x1 - bl FUN_020992A0 - 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 ; =UNK_021C8D34 - bl FUN_0209A008 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_02099FA4: .word UNK_021C8D34 - - 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 ; =UNK_021C8D30 - bl FUN_0209A008 - 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 UNK_021C8D30 - - arm_func_start FUN_02099FF0 -FUN_02099FF0: ; 0x02099FF0 - ldr ip, _0209A000 ; =FUN_0209A034 - mov r1, r0 - ldr r0, _0209A004 ; =UNK_021C8D34 - bx r12 - .balign 4 -_0209A000: .word FUN_0209A034 -_0209A004: .word UNK_021C8D34 - - 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 - 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 ; =UNK_021C8D30 - bx r12 - .balign 4 -_0209A064: .word FUN_0209A034 -_0209A068: .word UNK_021C8D30 - - arm_func_start FUN_0209A06C -FUN_0209A06C: ; 0x0209A06C - ldr ip, _0209A07C ; =FUN_0209A084 - mov r1, r0 - ldr r0, _0209A080 ; =UNK_021C8D34 - bx r12 - .balign 4 -_0209A07C: .word FUN_0209A084 -_0209A080: .word UNK_021C8D34 - - 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 ; =UNK_021C8D30 - bx r12 - .balign 4 -_0209A0A4: .word FUN_0209A084 -_0209A0A8: .word UNK_021C8D30 - - 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 - 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 ; =UNK_0210620C - 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 UNK_0210620C - - arm_func_start FUN_0209A224 -FUN_0209A224: ; 0x0209A224 - stmdb sp!, {r4,lr} - mov r4, r1 - bl FUN_02099D28 - 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 ; =UNK_021C8D5C - add r1, sp, #0x8 - mov r0, #0x2 - mov r3, #0x10 - bl FUN_0209A194 - ldr r0, _0209A2B0 ; =UNK_021C8D5C - add sp, sp, #0x4 - ldmia sp!, {lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_0209A2B0: .word UNK_021C8D5C - - 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 ; =UNK_021C8D6C - 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 ; =UNK_021C8D40 - 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 ; =UNK_021C8D3C - 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 UNK_021C8D6C -_0209A434: .word FUN_0209A484 -_0209A438: .word FUN_0209A444 -_0209A43C: .word UNK_021C8D40 -_0209A440: .word UNK_021C8D3C - - 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 ; =UNK_021C8D3C - 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 UNK_021C8D3C - - arm_func_start FUN_0209A484 -FUN_0209A484: ; 0x0209A484 - stmdb sp!, {r4,lr} - ldr r1, _0209A4B0 ; =UNK_021C8D40 - 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 UNK_021C8D40 - - 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 - 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 - 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 ; =UNK_021C8DA4 - ldr r2, _0209A7A8 ; =0x00000101 - mov r1, #0x0 - bl MI_CpuFill8 - ldr r0, _0209A7A4 ; =UNK_021C8DA4 - 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 ; =UNK_021C8DA4 - ldr r0, _0209A7AC ; =UNK_021C8D4C - ldr ip, _0209A7B0 ; =UNK_021C8D44 - mov r4, #0x0 - ldr r2, _0209A7B4 ; =UNK_021C8D38 - 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 UNK_021C8DA4 -_0209A7A8: .word 0x00000101 -_0209A7AC: .word UNK_021C8D4C -_0209A7B0: .word UNK_021C8D44 -_0209A7B4: .word UNK_021C8D38 - - 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 - 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 ; =UNK_021061DC - bl FUN_02097F70 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_0209A9F4: - ldr r0, _0209AA0C ; =UNK_021061C4 - bl FUN_02097F70 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_0209AA08: .word UNK_021061DC -_0209AA0C: .word UNK_021061C4 - - 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 - mov r0, #0x0 - str r0, [r4, #0xc] -_0209AA68: - add r0, r5, #0xe0 - bl OS_UnlockMutex - 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 - 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 ; =UNK_021C8F24 - 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 - cmp r0, #0x0 - ldrne r0, [sp, #0x4] - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - mov r0, #0x1 - ldr r6, _0209ACC4 ; =UNK_021C8F1C - 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 UNK_021C8F24 -_0209ACC4: .word UNK_021C8F1C - - 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 - 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 - 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 ; =UNK_021C8EFC - 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 UNK_021C8EFC - - 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 ; =UNK_021C8ED4 - mov r0, #0x44 - ldr r2, [r1, #0x0] - mov r1, #0x43 - bl FUN_0209CB78 - ldr r4, _0209B16C ; =UNK_021C924A - 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 UNK_021C8ED4 -_0209B16C: .word UNK_021C924A - - 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 ; =UNK_021C8ED4 - 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 ; =UNK_021C8F00 - mov r1, #0x3 - ldr r3, [r0, #0x0] - ldr r2, _0209B294 ; =UNK_021C8EEC - 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 ; =UNK_021C8EEC - 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 ; =UNK_021C8F00 - 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 UNK_021C8ED4 -_0209B290: .word UNK_021C8F00 -_0209B294: .word UNK_021C8EEC - - 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 ; =UNK_021C8F1C - mov r7, #0x2 - mov r8, #0x1 - ldr fp, _0209B69C ; =UNK_021C8EE0 - ldr r6, _0209B6A0 ; =UNK_021C8ED0 - str r0, [sp, #0xc] - b _0209B64C -_0209B354: - bl FUN_0209BF9C - 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 ; =UNK_021C8F14 - add r0, r10, #0x1c - bl FUN_0209F9A0 - 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 ; =UNK_021C8F00 - str r10, [r3, #0x0] - b _0209B624 -_0209B5C0: - ldrb r3, [r2, #0x1] - cmp r3, #0x2 - beq _0209B5E0 - cmp r3, #0x5 - ldreq r3, _0209B6AC ; =UNK_021C8F04 - moveq r4, r7 - streq r0, [r3, #0x0] - b _0209B624 -_0209B5E0: - ldr r3, _0209B6B0 ; =UNK_021C8EE8 - 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 ; =UNK_021C8ED4 - 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 ; =UNK_021C8EFC - 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 UNK_021C8F1C -_0209B69C: .word UNK_021C8EE0 -_0209B6A0: .word UNK_021C8ED0 -_0209B6A4: .word UNK_021C8F14 -_0209B6A8: .word UNK_021C8F00 -_0209B6AC: .word UNK_021C8F04 -_0209B6B0: .word UNK_021C8EE8 -_0209B6B4: .word UNK_021C8ED4 -_0209B6B8: .word UNK_021C8EFC - - arm_func_start FUN_0209B6BC -FUN_0209B6BC: ; 0x0209B6BC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, _0209B7CC ; =UNK_021C924A - 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 ; =UNK_021C8EE8 - 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 ; =UNK_021C8ED4 - 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 - ldr r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_0209B7CC: .word UNK_021C924A -_0209B7D0: .word UNK_021C8EE8 -_0209B7D4: .word UNK_021C8ED4 - - arm_func_start FUN_0209B7D8 -FUN_0209B7D8: ; 0x0209B7D8 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r4, _0209B898 ; =UNK_021C924A - add r2, sp, #0x0 - mov r0, r4 - mov r1, #0x1 - bl FUN_0209B8E0 - ldr r1, _0209B89C ; =UNK_021C8EE8 - 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 - ldr r0, [sp, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_0209B898: .word UNK_021C924A -_0209B89C: .word UNK_021C8EE8 - - 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 ; =UNK_021C8F24 - 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 ; =UNK_021C8F04 - ldr r0, _0209BA68 ; =UNK_021C8F14 - 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 ; =UNK_021C8F14 - 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 ; =UNK_02106224 - 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 UNK_021C8F24 -_0209BA64: .word UNK_021C8F04 -_0209BA68: .word UNK_021C8F14 -_0209BA6C: .word 0x00008263 -_0209BA70: .word 0x00006353 -_0209BA74: .word 0x00000135 -_0209BA78: .word UNK_02106224 -_0209BA7C: .word 0x0000010D - - arm_func_start FUN_0209BA80 -FUN_0209BA80: ; 0x0209BA80 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x54 - ldr r3, _0209BE40 ; =UNK_021C8EF8 - mov r1, #0x0 - ldr r0, _0209BE44 ; =UNK_021C8FD8 - mov r2, #0x64 - str r1, [r3, #0x0] - bl MI_CpuFill8 - ldr r0, _0209BE44 ; =UNK_021C8FD8 - mov r3, #0x180 - ldr r2, _0209BE48 ; =UNK_021C93A0 - ldr r1, _0209BE4C ; =UNK_021C9220 - 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 ; =UNK_021C8EC0 - 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 ; =UNK_021C8EF8 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _0209BE14 - bl OS_GetTick - mov r9, r0, lsr #0x10 - ldr r0, _0209BE54 ; =UNK_021C8EFC - 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 ; =UNK_021C8EC4 - 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 ; =UNK_021C8EC0 - strne r1, [r0, #0x0] - ldrne r0, [sp, #0x14] - strne r0, [sp, #0x4] - bl FUN_0209B298 - cmp r0, #0x0 - beq _0209BC14 - ldr r1, [sp, #0x18] - add r0, sp, #0x4c - bl FUN_0209B170 - 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 - 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 - 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 ; =UNK_021C8F78 -_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 ; =UNK_021C8EE0 - 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 ; =OSi_ThreadInfo - 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 ; =UNK_021C9520 -_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 ; =UNK_021C8EF4 - 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 ; =UNK_021C8EF0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _0209BB50 - blx r0 - b _0209BB50 -_0209BE14: - ldr r0, _0209BE58 ; =UNK_021C8EC4 - 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 UNK_021C8EF8 -_0209BE44: .word UNK_021C8FD8 -_0209BE48: .word UNK_021C93A0 -_0209BE4C: .word UNK_021C9220 -_0209BE50: .word UNK_021C8EC0 -_0209BE54: .word UNK_021C8EFC -_0209BE58: .word UNK_021C8EC4 -_0209BE5C: .word UNK_021C8F78 -_0209BE60: .word 0x000003BD -_0209BE64: .word UNK_021C8EE0 -_0209BE68: .word OSi_ThreadInfo -_0209BE6C: .word UNK_021C9520 -_0209BE70: .word UNK_021C8EF4 -_0209BE74: .word UNK_021C8EF0 - - arm_func_start FUN_0209BE78 -FUN_0209BE78: ; 0x0209BE78 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _0209BF3C ; =UNK_021C8ECC - ldr r0, [r0, #0x0] - blx r0 - ldr r0, _0209BF40 ; =UNK_021C8F04 - 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 ; =UNK_021C8F04 - ldr r0, [r0, #0x0] - bl FUN_0209F338 - bl OS_GetTick - mov r4, r0, lsr #0x10 - orr r4, r4, r1, lsl #0x10 - ldr r6, _0209BF44 ; =UNK_021C8EAC - mov r7, #0x64 - ldr r5, _0209BF48 ; =UNK_021C8EFC - 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 UNK_021C8ECC -_0209BF40: .word UNK_021C8F04 -_0209BF44: .word UNK_021C8EAC -_0209BF48: .word UNK_021C8EFC - - arm_func_start FUN_0209BF4C -FUN_0209BF4C: ; 0x0209BF4C - stmdb sp!, {r4,lr} - ldr r0, _0209BF98 ; =OSi_ThreadInfo - 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 - mov r0, #0x0 - str r0, [r4, #0x60] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_0209BF98: .word OSi_ThreadInfo - - arm_func_start FUN_0209BF9C -FUN_0209BF9C: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _0209C02C ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209C030 -FUN_0209C030: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r3, _0209C0E4 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209C0E8 -FUN_0209C0E8: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr ip, _0209C1CC ; =OSi_ThreadInfo - 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 ; =UNK_021C8EA8 - 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 OSi_ThreadInfo -_0209C1D0: .word UNK_021C8EA8 - - 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 ; =UNK_021C8EFC - 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 - 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 UNK_021C8EFC - - 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 - 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 ; =UNK_021C8EB0 - 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 UNK_021C8EB0 - - arm_func_start FUN_0209C52C -FUN_0209C52C: ; 0x0209C52C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _0209C57C ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 - 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 ; =OSi_ThreadInfo - 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 ; =UNK_021C8EFC - 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 OSi_ThreadInfo -_0209C83C: .word UNK_021C8EFC - - arm_func_start FUN_0209C840 -FUN_0209C840: - stmdb sp!, {r4,lr} - ldr r0, _0209C880 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209C934 -FUN_0209C934: ; 0x0209C934 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _0209C98C ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 ; =UNK_021C8F04 - 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 ; =UNK_021C8F04 - 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 UNK_021C8F04 - - arm_func_start FUN_0209CA54 -FUN_0209CA54: ; 0x0209CA54 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _0209CAA4 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209CAA8 -FUN_0209CAA8: - ldr r1, _0209CAC0 ; =OSi_ThreadInfo - ldr r1, [r1, #0x4] - ldr r1, [r1, #0xa4] - cmp r1, #0x0 - strne r0, [r1, #0x38] - bx lr - .balign 4 -_0209CAC0: .word OSi_ThreadInfo - - 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 ; =OSi_ThreadInfo - ldr r1, [r1, #0x4] - ldr r1, [r1, #0xa4] - str r1, [r0, #0xa4] - bx lr - .balign 4 -_0209CB20: .word OSi_ThreadInfo - - arm_func_start FUN_0209CB24 -FUN_0209CB24: ; 0x0209CB24 - ldr r0, _0209CB40 ; =OSi_ThreadInfo - ldr r0, [r0, #0x4] - ldr r1, [r0, #0xa4] - cmp r1, #0x0 - movne r0, #0x0 - strne r0, [r1, #0x0] - bx lr - .balign 4 -_0209CB40: .word OSi_ThreadInfo - - arm_func_start FUN_0209CB44 -FUN_0209CB44: ; 0x0209CB44 - ldr r0, _0209CB74 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209CB78 -FUN_0209CB78: ; 0x0209CB78 - stmdb sp!, {r4,lr} - ldr r3, _0209CBDC ; =OSi_ThreadInfo - 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 ; =UNK_021C8F04 - 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 OSi_ThreadInfo -_0209CBE0: .word 0x7F000001 -_0209CBE4: .word UNK_021C8F04 - - arm_func_start FUN_0209CBE8 -FUN_0209CBE8: ; 0x0209CBE8 - ldr r0, _0209CC0C ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - arm_func_start FUN_0209CC10 -FUN_0209CC10: ; 0x0209CC10 - ldr r0, _0209CC24 ; =OSi_ThreadInfo - mov r1, #0x0 - ldr r0, [r0, #0x4] - str r1, [r0, #0xa4] - bx lr - .balign 4 -_0209CC24: .word OSi_ThreadInfo - - arm_func_start FUN_0209CC28 -FUN_0209CC28: ; 0x0209CC28 - ldr r1, _0209CC38 ; =OSi_ThreadInfo - ldr r1, [r1, #0x4] - str r0, [r1, #0xa4] - bx lr - .balign 4 -_0209CC38: .word OSi_ThreadInfo - - arm_func_start FUN_0209CC3C -FUN_0209CC3C: ; 0x0209CC3C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _0209CC88 ; =UNK_021C8F24 - 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 UNK_021C8F24 - - arm_func_start FUN_0209CC8C -FUN_0209CC8C: ; 0x0209CC8C - stmdb sp!, {r4-r8,lr} - ldr r0, _0209CD30 ; =OSi_ThreadInfo - ldr r6, [r0, #0x8] - ldr r2, _0209CD34 ; =UNK_021C8EBC - 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 ; =UNK_021C8EBC - ldrh r0, [r0, #0x0] - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_0209CD30: .word OSi_ThreadInfo -_0209CD34: .word UNK_021C8EBC -_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 - 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 ; =UNK_021C8F04 - 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 ; =UNK_021C8F04 - 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 ; =UNK_021C8EF4 - 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 UNK_021C8F04 -_0209CFA8: .word UNK_021C8EF4 - - 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 ; =UNK_021C9520 - 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 ; =UNK_021C8EC8 - 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 ; =UNK_021C8EF4 - 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 UNK_021C9520 -_0209D2AC: .word 0x00001FFF -_0209D2B0: .word UNK_021C8EC8 -_0209D2B4: .word 0x0000100E -_0209D2B8: .word UNK_021C8EF4 - - 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 - cmp r0, #0x0 - ldmneia sp!, {r4-r8,lr} - bxne lr -_0209D2F8: - bl OS_DisableInterrupts - ldr r1, _0209D4D4 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 - 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 - 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 - 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 - 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 ; =UNK_021C903C - 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 UNK_021C903C - - 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 - cmp r0, #0x0 - bne _0209DFD0 - ldr r0, _0209E00C ; =OSi_ThreadInfo - ldr r1, _0209E010 ; =UNK_021C9160 - 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 OSi_ThreadInfo -_0209E010: .word UNK_021C9160 - - arm_func_start FUN_0209E014 -FUN_0209E014: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_0209FAB0 - 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 ; =OSi_ThreadInfo - 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 - 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 OSi_ThreadInfo - - 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 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 - 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 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 - 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 ; =UNK_021C8F14 - add r0, r6, #0x8 - bl FUN_0209F9A0 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldr r0, _0209E7C0 ; =UNK_021C8F04 - 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 ; =UNK_021C8F04 - 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 ; =UNK_021C8EAC - movne r1, #0x1 - strneb r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_0209E7BC: .word UNK_021C8F14 -_0209E7C0: .word UNK_021C8F04 -_0209E7C4: .word 0x00000406 -_0209E7C8: .word UNK_021C8EAC - - 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 ; =UNK_021C8F14 - add r1, r4, #0x8 - mov r2, #0x6 - bl MI_CpuCopy8 - ldr r3, _0209E874 ; =UNK_021C8F04 - 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 ; =UNK_021C8F14 - 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 UNK_021C8F14 -_0209E874: .word UNK_021C8F04 - - 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 ; =OSi_ThreadInfo - ldr r3, _0209EAF0 ; =UNK_021C8F04 - ldr r1, _0209EAF4 ; =UNK_021C9160 - ldr r0, [r0, #0x4] - ldr r12, [r3, #0x0] - cmp r0, r1 - ldreq r4, _0209EAF8 ; =UNK_021C8F5E - 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 ; =UNK_021C8EB0 - 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 OSi_ThreadInfo -_0209EAF0: .word UNK_021C8F04 -_0209EAF4: .word UNK_021C9160 -_0209EAF8: .word UNK_021C8F5E -_0209EAFC: .word UNK_021C8EB0 - - arm_func_start FUN_0209EB00 -FUN_0209EB00: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - ldr r7, _0209EC3C ; =UNK_021C8F04 - 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 UNK_021C8F04 - - 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 ; =OSi_ThreadInfo - strh r1, [r3, #0x22] - ldr r2, [r2, #0x4] - add r4, r3, #0x22 - strh r2, [r4, #0x4] - mov r2, #0x0 - ldr r3, _0209ECF8 ; =UNK_021C8EB4 - 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 OSi_ThreadInfo -_0209ECF8: .word UNK_021C8EB4 - - 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 ; =UNK_021C8EB8 - 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 ; =UNK_021C8F04 - 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 UNK_021C8EB8 -_0209EF10: .word UNK_021C8F04 -_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 ; =UNK_021C8F04 - 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 ; =UNK_021C8F04 - ldr r0, [r0, #0x0] - cmp r4, r0 - beq _0209EFF8 - mov r0, r4 - bl FUN_0209FA54 - cmp r0, #0x0 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r8,lr} - bxeq lr -_0209EFF8: - ldr r0, _0209F048 ; =UNK_02106230 - sub r1, r8, #0x1c - mov r2, #0x8 - bl MI_CpuCopy8 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _0209F04C ; =UNK_021C8F14 - 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 UNK_021C8F04 -_0209F048: .word UNK_02106230 -_0209F04C: .word UNK_021C8F14 - - 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 - cmp r0, #0x0 - bne _0209F0CC - mov r0, r4 - bl FUN_0209FAB0 - movs r4, r0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - bl FUN_0209F438 - 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 ; =UNK_021C8F14 - 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 UNK_021C8F14 - - 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 ; =UNK_021C8F04 - ldr r0, [r0, #0x0] - cmp r6, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r6 - bl FUN_0209FAD8 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r6 - bl FUN_0209FA54 - 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 ; =UNK_021C8F78 - 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 ; =UNK_021C8F78 - ldr r3, _0209F2A8 ; =UNK_021C8F82 - 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 ; =UNK_021C8F78 - 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 ; =UNK_021C8F78 - mov r0, r7 - add r1, r3, r4 - add r1, r1, #0x4 - mov r2, #0x6 - str r6, [r3, r4] - bl MI_CpuCopy8 - ldr r0, _0209F2A8 ; =UNK_021C8F82 - strh r5, [r0, r4] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_0209F29C: .word 0x7F000001 -_0209F2A0: .word UNK_021C8F04 -_0209F2A4: .word UNK_021C8F78 -_0209F2A8: .word UNK_021C8F82 - - 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 ; =UNK_021C8F04 - 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 - 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 UNK_021C8F04 - - 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 - add r0, sp, #0x0 - mov r1, #0xff - mov r2, #0x6 - bl MI_CpuFill8 - ldr r0, _0209F428 ; =UNK_021C8F14 - 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 ; =UNK_021C8F14 - add r1, sp, #0x16 - mov r2, #0x6 - bl MI_CpuCopy8 - ldr r0, _0209F434 ; =UNK_021C8F04 - 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 UNK_021C8F14 -_0209F42C: .word 0x00000608 -_0209F430: .word 0x00000406 -_0209F434: .word UNK_021C8F04 - - 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 ; =UNK_021C8F04 - ldr r0, [r0, #0x0] - cmp r7, r0 - bne _0209F474 -_0209F46C: - ldr r5, _0209F50C ; =UNK_021C8F14 - b _0209F4EC -_0209F474: - mov r0, r7 - bl FUN_0209FA68 - cmp r0, #0x0 - bne _0209F494 - mov r0, r7 - bl FUN_0209FA54 - cmp r0, #0x0 - beq _0209F49C -_0209F494: - ldr r5, _0209F510 ; =UNK_0210621C - b _0209F4EC -_0209F49C: - ldr r1, _0209F514 ; =UNK_021C8F78 - 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 ; =UNK_021C8F78 - mov r5, r0, lsr #0x10 - add r0, r2, r3 - ldr r2, _0209F518 ; =UNK_021C8F82 - 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 UNK_021C8F04 -_0209F50C: .word UNK_021C8F14 -_0209F510: .word UNK_0210621C -_0209F514: .word UNK_021C8F78 -_0209F518: .word UNK_021C8F82 - - arm_func_start FUN_0209F51C -FUN_0209F51C: ; 0x0209F51C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r2, _0209F570 ; =UNK_021C8EE4 - ldr r1, _0209F574 ; =UNK_021C8F0C - ldr lr, [r2, #0x0] - ldr r12, [r1, #0x0] - ldr r3, [r2, #0x0] - ldr r1, _0209F578 ; =UNK_021C8F10 - 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 UNK_021C8EE4 -_0209F574: .word UNK_021C8F0C -_0209F578: .word UNK_021C8F10 - - arm_func_start FUN_0209F57C -FUN_0209F57C: ; 0x0209F57C - stmdb sp!, {r4-r10,lr} - mov r6, r0 - bl OS_DisableInterrupts - ldr sl, _0209F644 ; =UNK_021C8EE4 - ldr sb, _0209F648 ; =UNK_021C8EDC - ldr r2, [r10, #0x0] - ldr r1, [r9, #0x0] - mov r5, r0 - cmp r2, r1 - bne _0209F5D4 - ldr r8, _0209F64C ; =OSi_ThreadInfo - ldr r7, _0209F650 ; =UNK_021C8F08 - 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 ; =UNK_021C8F0C - ldr r5, [r0, #0x0] - ldr r0, _0209F644 ; =UNK_021C8EE4 - ldr r1, _0209F658 ; =UNK_021C8F10 - 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 ; =UNK_021C8F0C - str r0, [r6, #0x0] - ldr r0, _0209F644 ; =UNK_021C8EE4 - 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 UNK_021C8EE4 -_0209F648: .word UNK_021C8EDC -_0209F64C: .word OSi_ThreadInfo -_0209F650: .word UNK_021C8F08 -_0209F654: .word UNK_021C8F0C -_0209F658: .word UNK_021C8F10 - - 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 ; =UNK_021C8F08 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {lr} - bxeq lr - ldr r0, [r0, #0x0] - bl OS_IsThreadTerminated - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {lr} - bxne lr - ldr r0, _0209F6BC ; =UNK_021C8F08 - ldr r0, [r0, #0x0] - bl OS_WakeupThreadDirect - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_0209F6BC: .word UNK_021C8F08 - - arm_func_start FUN_0209F6C0 -FUN_0209F6C0: ; 0x0209F6C0 - stmdb sp!, {r4-r8,lr} - ldr r4, _0209F918 ; =UNK_021C8F0C - 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 ; =UNK_021C8F10 - 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 ; =UNK_02106230 - 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 ; =UNK_021C8EDC - add r2, r2, #0x9 - bic r2, r2, #0x1 - ldr lr, [r4, #0x0] - mov r3, r2, lsl #0x10 - ldr ip, _0209F92C ; =UNK_021C8EE4 - 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 ; =UNK_021C8F10 - ldr r8, [r3, #0x0] - cmp r4, r8 - bne _0209F7F0 - ldr r3, _0209F92C ; =UNK_021C8EE4 - 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 ; =UNK_021C8EE4 - mov r4, r2 - ldr r3, [r3, #0x0] - cmp r3, r2 - ldmlsia sp!, {r4-r8,lr} - bxls lr -_0209F814: - ldr ip, _0209F928 ; =UNK_021C8EDC - ldr r3, _0209F91C ; =UNK_021C8F10 - 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 ; =UNK_021C8EDC - mov r3, #0x0 - str r3, [r0, #0x0] -_0209F858: - ldr ip, _0209F918 ; =UNK_021C8F0C - ldr r3, _0209F928 ; =UNK_021C8EDC - 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 ; =UNK_021C8F0C - ldr r0, _0209F928 ; =UNK_021C8EDC - 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 ; =UNK_021C8F0C - ldr r0, _0209F928 ; =UNK_021C8EDC - 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 ; =UNK_021C8F0C - ldr r1, _0209F928 ; =UNK_021C8EDC - 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 ; =UNK_021C8EDC - str r4, [r0, #0x0] - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_0209F918: .word UNK_021C8F0C -_0209F91C: .word UNK_021C8F10 -_0209F920: .word 0x000005E4 -_0209F924: .word UNK_02106230 -_0209F928: .word UNK_021C8EDC -_0209F92C: .word UNK_021C8EE4 - - 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 ; =UNK_02106230 - 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 - cmp r0, #0x0 - movlt r1, #0x1 - ldr r0, _0209F99C ; =UNK_021C8EA8 - movge r1, #0x0 - strb r1, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_0209F998: .word UNK_02106230 -_0209F99C: .word UNK_021C8EA8 - - 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 ; =UNK_021C8F04 - 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 - cmp r0, #0x0 - moveq r4, #0x0 -_0209FA28: - cmp r4, #0x0 - bne _0209FA40 - mov r0, r6 - bl FUN_0209FA54 - cmp r0, #0x0 - moveq r5, #0x0 -_0209FA40: - mov r0, r5 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_0209FA4C: .word UNK_021C8F04 -_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 - cmp r0, #0x0 - beq _0209FA9C - ldr r0, _0209FAAC ; =UNK_021C8ED0 - 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 UNK_021C8ED0 - - arm_func_start FUN_0209FAB0 -FUN_0209FAB0: - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_0209FAD8 - cmp r0, #0x0 - ldreq r0, _0209FAD4 ; =UNK_021C8EE0 - ldreq r4, [r0, #0x0] - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_0209FAD4: .word UNK_021C8EE0 - - 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 ; =UNK_021C8ED0 - ldr r1, _0209FB24 ; =UNK_021C8F04 - 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 UNK_021C8ED0 -_0209FB24: .word UNK_021C8F04 - - 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 ; =UNK_02106218 - ldr r0, _0209FCBC ; =UNK_021C9160 - mov r1, r4 - str r4, [r2, #0x0] - bl OS_SetThreadPriority - ldr r0, _0209FCC0 ; =UNK_021C90A0 - mov r1, r4 - bl OS_SetThreadPriority - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_0209FCB8: .word UNK_02106218 -_0209FCBC: .word UNK_021C9160 -_0209FCC0: .word UNK_021C90A0 - - arm_func_start FUN_0209FCC4 -FUN_0209FCC4: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_0209FD34 - ldr r0, _0209FD10 ; =UNK_021C90A0 - bl OS_JoinThread - ldr r0, _0209FD14 ; =UNK_021C9160 - bl OS_DestroyThread - ldr r1, _0209FD18 ; =UNK_021C8F08 - mov r0, #0x0 - str r0, [r1, #0x0] - bl FUN_020A0098 - ldr r1, _0209FD1C ; =UNK_021C8F0C - mov r2, #0x0 - ldr r0, _0209FD20 ; =UNK_021C8F10 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_0209FD10: .word UNK_021C90A0 -_0209FD14: .word UNK_021C9160 -_0209FD18: .word UNK_021C8F08 -_0209FD1C: .word UNK_021C8F0C -_0209FD20: .word UNK_021C8F10 - - arm_func_start FUN_0209FD24 -FUN_0209FD24: ; 0x0209FD24 - ldr r1, _0209FD30 ; =UNK_021C8EF0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_0209FD30: .word UNK_021C8EF0 - - 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 ; =UNK_021C90A0 - bl OS_IsThreadTerminated - movs r4, r0 - bne _0209FD74 - ldr r1, _0209FD90 ; =UNK_021C8EF8 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _0209FD74 - ldr r0, _0209FD8C ; =UNK_021C90A0 - 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 UNK_021C90A0 -_0209FD90: .word UNK_021C8EF8 - - .extern _SDK_UbiquitousCPS - - arm_func_start FUN_0209FD94 -FUN_0209FD94: ; 0x0209FD94 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r4, r0 - ldr r0, _0209FFD4 ; =_SDK_UbiquitousCPS - 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 ; =UNK_021C8F24 - 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 ; =UNK_021C8F24 - 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 ; =UNK_021C8EC8 - ldr r0, _0209FFEC ; =UNK_021C8EF4 - str r2, [r1, #0x0] - ldr r1, [r4, #0x8] - str r1, [r0, #0x0] - b _0209FE60 -_0209FE4C: - ldr r2, _0209FFF0 ; =FUN_020A0058 - ldr r1, _0209FFE8 ; =UNK_021C8EC8 - ldr r0, _0209FFEC ; =UNK_021C8EF4 - str r2, [r1, #0x0] - str r2, [r0, #0x0] -_0209FE60: - ldr r1, [r4, #0x0] - ldr r0, _0209FFF4 ; =UNK_021C8EC4 - ldr ip, _0209FFD8 ; =UNK_021C8F24 - str r1, [r0, #0x0] - ldr r1, [r4, #0x24] - ldr r3, [r12, #0x8] - cmp r1, #0x0 - ldrne r0, _0209FFF8 ; =UNK_021C8EB0 - strneh r1, [r0, #0x0] - ldreq r1, _0209FFFC ; =0x000005B4 - ldreq r0, _0209FFF8 ; =UNK_021C8EB0 - streqh r1, [r0, #0x0] - ldr r2, [r4, #0x28] - ldr r1, _020A0000 ; =UNK_021C8EE8 - ldr r0, _020A0004 ; =UNK_021C8ED8 - 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 ; =UNK_021C8ECC - strne r1, [r0, #0x0] - ldreq r1, _0209FFF0 ; =FUN_020A0058 - ldreq r0, _020A0008 ; =UNK_021C8ECC - streq r1, [r0, #0x0] - ldr r1, [r4, #0x10] - cmp r1, #0x0 - ldrne r0, _020A000C ; =UNK_021C8EFC - strne r1, [r0, #0x0] - ldreq r1, _020A0010 ; =FUN_020A0050 - ldreq r0, _020A000C ; =UNK_021C8EFC - 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 ; =UNK_021C8F0C - ldr lr, _020A001C ; =UNK_021C8F10 - str r6, [r0, #0x0] - ldr r4, [r4, #0x20] - ldr r0, _020A0020 ; =UNK_021C8EE4 - str r4, [lr, #0x0] - str r3, [r0, #0x0] - ldr lr, _020A0024 ; =UNK_021C8EDC - ldr r4, _020A0028 ; =UNK_021C8EBC - add r5, r5, #0x400 - ldr r0, _020A002C ; =UNK_021C8F14 - str r3, [lr, #0x0] - str r2, [r12, #0x0] - str r1, [r12, #0x4] - strh r5, [r4, #0x0] - bl OS_GetMacAddress - ldr r0, _020A0030 ; =UNK_021C8EAC - mov r2, #0x0 - strb r2, [r0, #0x0] - mov r1, #0x800 - str r1, [sp, #0x0] - ldr r0, _020A0034 ; =UNK_02106218 - ldr r1, _020A0038 ; =FUN_0209CD3C - ldr r4, [r0, #0x0] - ldr r0, _020A003C ; =UNK_021C9160 - ldr r3, _020A0040 ; =UNK_021CA6E0 - str r4, [sp, #0x4] - bl OS_CreateThread - mov r1, #0x800 - ldr r0, _020A0034 ; =UNK_02106218 - str r1, [sp, #0x0] - ldr r1, [r0, #0x0] - ldr r0, _020A0044 ; =UNK_021C90A0 - str r1, [sp, #0x4] - ldr r1, _020A0048 ; =FUN_0209BA80 - ldr r3, _020A004C ; =UNK_021C9EE0 - mov r2, #0x0 - bl OS_CreateThread - ldr r0, _020A003C ; =UNK_021C9160 - bl OS_WakeupThreadDirect - ldr r0, _020A0044 ; =UNK_021C90A0 - bl OS_WakeupThreadDirect - add sp, sp, #0x8 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_0209FFD4: .word _SDK_UbiquitousCPS -_0209FFD8: .word UNK_021C8F24 -_0209FFDC: .word 0x6C078965 -_0209FFE0: .word 0x5D588B65 -_0209FFE4: .word 0x00269EC3 -_0209FFE8: .word UNK_021C8EC8 -_0209FFEC: .word UNK_021C8EF4 -_0209FFF0: .word FUN_020A0058 -_0209FFF4: .word UNK_021C8EC4 -_0209FFF8: .word UNK_021C8EB0 -_0209FFFC: .word 0x000005B4 -_020A0000: .word UNK_021C8EE8 -_020A0004: .word UNK_021C8ED8 -_020A0008: .word UNK_021C8ECC -_020A000C: .word UNK_021C8EFC -_020A0010: .word FUN_020A0050 -_020A0014: .word 0x00000F88 -_020A0018: .word UNK_021C8F0C -_020A001C: .word UNK_021C8F10 -_020A0020: .word UNK_021C8EE4 -_020A0024: .word UNK_021C8EDC -_020A0028: .word UNK_021C8EBC -_020A002C: .word UNK_021C8F14 -_020A0030: .word UNK_021C8EAC -_020A0034: .word UNK_02106218 -_020A0038: .word FUN_0209CD3C -_020A003C: .word UNK_021C9160 -_020A0040: .word UNK_021CA6E0 -_020A0044: .word UNK_021C90A0 -_020A0048: .word FUN_0209BA80 -_020A004C: .word UNK_021C9EE0 - - ; Ubiquitous SSL (?) - - 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 ; =UNK_021C8ED8 - 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 UNK_021C8ED8 - - arm_func_start FUN_020A0098 -FUN_020A0098: ; 0x020A0098 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r1, _020A01B8 ; =UNK_021C8F04 - ldr r5, _020A01BC ; =UNK_021C8EC0 - ldr r1, [r1, #0x0] - ldr r3, _020A01C0 ; =UNK_021C8F1C - cmp r1, #0x0 - mov r1, #0x0 - movne r6, #0x1 - ldr ip, _020A01C4 ; =UNK_021C8ED0 - ldr r2, _020A01C8 ; =UNK_021C8ED4 - moveq r6, #0x0 - ldr lr, _020A01B8 ; =UNK_021C8F04 - ldr r4, _020A01CC ; =UNK_021C8EE0 - 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 ; =UNK_021C8F78 - mov r2, #0x60 - bl MI_CpuFill8 - ldr r0, _020A01D4 ; =OSi_ThreadInfo - 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 ; =UNK_021C9520 - mov r7, #0x0 - ldr r4, _020A01DC ; =UNK_021C8EF4 - 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 UNK_021C8F04 -_020A01BC: .word UNK_021C8EC0 -_020A01C0: .word UNK_021C8F1C -_020A01C4: .word UNK_021C8ED0 -_020A01C8: .word UNK_021C8ED4 -_020A01CC: .word UNK_021C8EE0 -_020A01D0: .word UNK_021C8F78 -_020A01D4: .word OSi_ThreadInfo -_020A01D8: .word UNK_021C9520 -_020A01DC: .word UNK_021C8EF4 - - arm_func_start FUN_020A01E0 -FUN_020A01E0: ; 0x020A01E0 - ldr ip, _020A01F4 ; =MI_CpuFill8 - ldr r0, _020A01F8 ; =UNK_021CA6FC - mov r1, #0x0 - mov r2, #0x170 - bx r12 - .balign 4 -_020A01F4: .word MI_CpuFill8 -_020A01F8: .word UNK_021CA6FC - - arm_func_start FUN_020A01FC -FUN_020A01FC: ; 0x020A01FC - stmdb sp!, {r4-r6,lr} - mov r5, r0 - bl OS_DisableInterrupts - ldr r4, _020A02E0 ; =UNK_021CA6FC - 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 ; =OSi_ThreadInfo - 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 UNK_021CA6FC -_020A02E4: .word 0x000003BD -_020A02E8: .word OSi_ThreadInfo - - .extern _SDK_UbiquitousSSL - - arm_func_start FUN_020A02EC -FUN_020A02EC: - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, _020A0318 ; =_SDK_UbiquitousSSL - bl OSi_ReferSymbol - ldr r0, _020A031C ; =OSi_ThreadInfo - 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 _SDK_UbiquitousSSL -_020A031C: .word OSi_ThreadInfo - - ; Abiosso libVCT (?) - - 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 ; =UNK_021C8EF4 - ldr r1, [r1, #0x0] - blx r1 -_020A0348: - mov r0, #0x0 - str r0, [r4, #0x824] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A0358: .word UNK_021C8EF4 - - 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 ; =UNK_021C8EC8 - 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 ; =UNK_021C8EF4 - 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 UNK_021C8EC8 -_020A0534: .word UNK_021C8EF4 - - 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 ; =UNK_021C8EC8 - 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 - ldr r0, [sp, #0x0] - mov r1, r5 - bl FUN_0209C580 - 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 UNK_021C8EC8 - - 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 ; =UNK_021C8EF4 - 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 UNK_021C8EF4 - - 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 - cmp r0, #0x0 - beq _020A07FC - ldr r1, _020A0870 ; =UNK_021C8EF4 - 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 UNK_021C8EF4 - - 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 - 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 - 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 - 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 - 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 - 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 - cmp r0, #0x0 - beq _020A0AB0 - ldr r0, [r4, #0xc] - bl FUN_020A215C - mov r0, r4 - bl FUN_020A0F94 - mov r0, r4 - bl FUN_020A0AF4 - 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 - 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 ; =UNK_021C8EC8 - 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 ; =UNK_021C8EC8 - mov r0, r6, lsl #0x3 - ldr r1, [r1, #0x0] - blx r1 - movs r9, r0 - bne _020A0C08 - ldr r1, _020A0DD8 ; =UNK_021C8EF4 - 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 ; =UNK_021C8EC8 - add r0, r4, #0x49 - ldr r1, [r1, #0x0] - blx r1 - movs r6, r0 - bne _020A0CCC - ldr r1, _020A0DD8 ; =UNK_021C8EF4 - mov r0, r5 - ldr r1, [r1, #0x0] - blx r1 - ldr r1, _020A0DD8 ; =UNK_021C8EF4 - 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 ; =UNK_021C8EF4 - mov r0, r6 - ldr r1, [r1, #0x0] - blx r1 - ldr r1, _020A0DD8 ; =UNK_021C8EF4 - mov r0, r9 - ldr r1, [r1, #0x0] - blx r1 - ldr r1, _020A0DD8 ; =UNK_021C8EF4 - mov r0, r5 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020A0DD4: .word UNK_021C8EC8 -_020A0DD8: .word UNK_021C8EF4 -_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 ; =UNK_021C8EC8 - 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 ; =UNK_0210623C - 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 ; =UNK_021C8EF4 - mov r0, r6 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020A0F88: .word UNK_021C8EC8 -_020A0F8C: .word UNK_0210623C -_020A0F90: .word UNK_021C8EF4 - - arm_func_start FUN_020A0F94 -FUN_020A0F94: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - ldr r1, _020A10EC ; =UNK_021C8EC8 - 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 ; =UNK_021C8EF4 - mov r0, r4 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A10EC: .word UNK_021C8EC8 -_020A10F0: .word UNK_021C8EF4 - - 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 ; =UNK_021C8EC8 - 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 ; =UNK_021CA6E4 - 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 ; =UNK_021CA6E4 - 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 ; =UNK_021C8EF4 - 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 UNK_021C8EC8 -_020A1364: .word UNK_021CA6E4 -_020A1368: .word UNK_021C8EF4 - - 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 ; =UNK_021CA6E8 - 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 ; =UNK_021CA6E8 - add r0, sp, #0x0 - bl FUN_020A4098 - mov r0, r4 - bl OS_RestoreInterrupts - ldr r0, _020A13DC ; =UNK_021CA6E0 - mov r1, #0x1 - strb r1, [r0, #0x0] - add sp, sp, #0x60 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A13D8: .word UNK_021CA6E8 -_020A13DC: .word UNK_021CA6E0 - - arm_func_start FUN_020A13E0 -FUN_020A13E0: ; 0x020A13E0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x7c - ldr r2, _020A1518 ; =UNK_021CA6E0 - mov r10, r0 - ldrb r0, [r2, #0x0] - mov r9, r1 - cmp r0, #0x0 - bne _020A1448 - ldr r2, _020A151C ; =UNK_021C8F24 - 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 ; =UNK_021CA6E8 - mov r0, r6 - mov r2, r11 - bl FUN_020A410C - mov r0, r6 - add r1, sp, #0x8 - bl FUN_020A405C - ldr r2, _020A1524 ; =UNK_021CA6FB - 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 UNK_021CA6E0 -_020A151C: .word UNK_021C8F24 -_020A1520: .word UNK_021CA6E8 -_020A1524: .word UNK_021CA6FB - - 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 ; =UNK_021C8EC8 - 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 - 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 ; =UNK_021C8EF4 - 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 ; =UNK_021C8EC8 - 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 - cmp r0, #0x0 - beq _020A16C0 - ldr r1, _020A16E0 ; =UNK_021C8EF4 - 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 UNK_021C8EC8 -_020A16E0: .word UNK_021C8EF4 -_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 ; =UNK_021C8EF4 - 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 - b _020A178C - b _020A17BC - b _020A17D0 - 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 ; =UNK_021C8EF4 - mov r0, r7 - ldr r1, [r1, #0x0] - blx r1 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020A1940: .word UNK_021C8EF4 - - 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 - ldr r0, [sp, #0x0] - mov r1, r5 - bl FUN_0209C580 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 ; =UNK_02106290 - mov r0, r4 - mov r2, #0x4 - bl FUN_020A410C - b _020A1F90 -_020A1F80: - ldr r1, _020A2030 ; =UNK_02106298 - mov r0, r4 - mov r2, #0x4 - bl FUN_020A410C -_020A1F90: - mov r0, r4 - mov r1, r6 - mov r2, #0x30 - bl FUN_020A410C - 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 - 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 UNK_02106290 -_020A2030: .word UNK_02106298 - - 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 ; =UNK_02106290 - mov r0, r4 - mov r2, #0x4 - bl FUN_020A3ACC - b _020A2078 -_020A2068: - ldr r1, _020A2118 ; =UNK_02106298 - mov r0, r4 - mov r2, #0x4 - bl FUN_020A3ACC -_020A2078: - mov r0, r4 - mov r1, r6 - mov r2, #0x30 - bl FUN_020A3ACC - 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 - 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 UNK_02106290 -_020A2118: .word UNK_02106298 - - 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 ; =UNK_021062A0 - add r0, sp, #0x0 - mov r2, r4 - bl FUN_020A23C8 - ldr r1, _020A23C0 ; =UNK_021062A4 - add r0, sp, #0x10 - mov r2, r4 - bl FUN_020A23C8 - ldr r1, _020A23C4 ; =UNK_021062A8 - add r0, sp, #0x20 - mov r2, r4 - bl FUN_020A23C8 - 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 UNK_021062A0 -_020A23C0: .word UNK_021062A4 -_020A23C4: .word UNK_021062A8 - - 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 ; =UNK_021C8EC8 - 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 - 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 ; =UNK_021C8EF4 - mov r0, r8 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020A26C8: .word UNK_021C8EC8 -_020A26CC: .word UNK_021C8EF4 - - 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 - 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 - 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 ; =UNK_0210623C -_020A2874: - mov r0, r5, lsl #0x1 - ldrh r3, [r4, r0] - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl FUN_020A28C0 - cmp r0, #0x0 - ldrne r0, _020A28BC ; =UNK_0210623C - 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 UNK_0210623C - - 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 - 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 - 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 - 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 - 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 - 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 - 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 ; =UNK_021C8EC8 - 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 - cmp r0, #0x0 - beq _020A2F6C -_020A2F68: - mov r4, #0x2 -_020A2F6C: - ldr r1, _020A2F94 ; =UNK_021C8EF4 - 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 UNK_021C8EC8 -_020A2F90: .word 0x00000468 -_020A2F94: .word UNK_021C8EF4 - - 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 - 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 ; =UNK_02106278 -_020A31E8: - ldr r4, [r10, r6, lsl #0x2] - mov r0, r4 - bl strlen - mov r2, r0 - mov r0, r5 - mov r1, r4 - bl memcmp - cmp r0, #0x0 - bne _020A3258 - cmp r6, #0x5 - addls pc, pc, r6, lsl #0x2 - b _020A3264 - b _020A3264 - b _020A3230 - b _020A3230 - b _020A3240 - b _020A3240 - 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 - 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 - 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 - 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 - 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 UNK_02106278 - - 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 - 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 ; =OSi_ThreadInfo - 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 OSi_ThreadInfo - - 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 ; =OSi_ThreadInfo - ldr r0, [r0, #0x4] - bl OS_SetThreadPriority - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A36E8: .word OSi_ThreadInfo - - arm_func_start FUN_020A36EC -FUN_020A36EC: ; 0x020A36EC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020A3744 ; =UNK_02106244 - ldr r0, [r0, #0x0] - cmp r0, #0x20 - addcs sp, sp, #0x4 - mvncs r0, #0x0 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - ldr r0, _020A3748 ; =OSi_ThreadInfo - ldr r5, [r0, #0x4] - mov r0, r5 - bl OS_GetThreadPriority - ldr r1, _020A3744 ; =UNK_02106244 - 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 UNK_02106244 -_020A3748: .word OSi_ThreadInfo - - arm_func_start FUN_020A374C -FUN_020A374C: ; 0x020A374C - ldr r1, _020A3758 ; =UNK_02106244 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020A3758: .word UNK_02106244 - - 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 - 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 ; =UNK_021CA6FC - 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 - 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 UNK_021CA6FC - - 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 ; =UNK_021CA6FC - 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 UNK_021CA6FC - - 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 ; =UNK_021CA6FC - 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 UNK_021CA6FC - - 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 ; =UNK_021CA6FC - 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 - 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 UNK_021CA6FC - - 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 ; =UNK_021062EC - 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 UNK_021062EC - - 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 ; =UNK_021062AC - mov r3, #0x0 - ldr r1, _020A4028 ; =UNK_0210632C - 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 ; =UNK_0210632C - add r0, sp, #0x4 - ldr lr, _020A4024 ; =UNK_021062AC -_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 ; =UNK_0210632C - 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 ; =UNK_021062AC - 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 ; =UNK_021062AC - 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 ; =UNK_021062AC - 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 ; =UNK_021062AC - ldr r1, _020A4028 ; =UNK_0210632C - add r8, r0, r3 - ldr lr, _020A4024 ; =UNK_021062AC - 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 UNK_021062AC -_020A4028: .word UNK_0210632C - - 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 ; =UNK_0210642D - 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 UNK_0210642D - - 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 ; =UNK_0210642C - 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 UNK_0210642C - - 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 ; =UNK_021C8EC8 - 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 ; =UNK_021C8EF4 - 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 UNK_021C8EC8 -_020A4DE4: .word UNK_021C8EF4 - - 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 - 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 - 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 - 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 ; =UNK_021C8EC8 - 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 - 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 - 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 - 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 ; =UNK_021C8EF4 - mov r0, r6 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020A5238: .word UNK_021C8EC8 -_020A523C: .word UNK_021C8EF4 - - 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 - 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 - 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 - 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 - 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 - 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 ; =UNK_021CA86C - 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 - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A63B0 - b _020A6258 - b _020A61E0 - b _020A61E0 -_020A61D0: - cmp r0, #0x1a - ldmeqia sp!, {r4,lr} - bxeq lr - b _020A6338 -_020A61E0: - ldr r1, _020A63B8 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 - 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 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x5 - bne _020A64D0 - mov r0, #0x6 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A6740 ; =0x00000704 - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C -_020A64D0: - ldr r1, _020A673C ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r6, [r0, #0x284] - mov r0, r6 - bl _u32_div_f - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 - cmp r0, #0x0 - beq _020A6818 - cmp r0, #0x4 - b _020A6840 -_020A6818: - mov r0, #0x1 - bl FUN_020A6C38 - 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 - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 UNK_021CA86C - - arm_func_start FUN_020A6B28 -FUN_020A6B28: ; 0x020A6B28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020A6B98 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - ldr r1, _020A6C2C ; =0x000022CC - ldr r2, [r2, #0x0] - mov r4, r0 - add r0, r2, r1 - bl OS_CancelAlarm - ldr r0, _020A6C28 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 UNK_021CA86C - - arm_func_start FUN_020A6D3C -FUN_020A6D3C: ; 0x020A6D3C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr ip, _020A6D88 ; =UNK_021CA86C - 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 UNK_021CA86C - - arm_func_start FUN_020A6D8C -FUN_020A6D8C: ; 0x020A6D8C - stmdb sp!, {r4-r6,lr} - ldr r1, _020A6E24 ; =UNK_021CA86C - 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 UNK_021CA86C -_020A6E28: .word 0x4EC4EC4F -_020A6E2C: .word 0x0000000D - - arm_func_start FUN_020A6E30 -FUN_020A6E30: ; 0x020A6E30 - ldr r0, _020A6E48 ; =UNK_021CA86C - ldr r1, _020A6E4C ; =0x00AAA082 - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r1, [r0, #0x264] - bx lr - .balign 4 -_020A6E48: .word UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - ldr r1, _020A6FF8 ; =0x00002292 - ldr r2, [r0, #0x0] - ldr r0, _020A6FFC ; =UNK_020FF590 - add r1, r2, r1 - mov r2, #0x6 - bl MI_CpuCopy8 - b _020A6F40 -_020A6F24: - ldr r0, _020A6FF4 ; =UNK_021CA86C - 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 ; =UNK_020FF598 - cmp r4, r0 - bne _020A6F88 -_020A6F54: - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r1, _020A7004 ; =0x0000229C - ldr r2, [r0, #0x0] - ldr r0, _020A7000 ; =UNK_020FF598 - add r1, r2, r1 - mov r2, #0x20 - bl MI_CpuCopy8 - ldr r0, _020A6FF4 ; =UNK_021CA86C - mov r1, #0x0 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x9a] - b _020A6FD4 -_020A6F88: - ldr r0, _020A6FF4 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x9a] -_020A6FD4: - ldr r0, _020A6FF4 ; =UNK_021CA86C - 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 UNK_021CA86C -_020A6FF8: .word 0x00002292 -_020A6FFC: .word UNK_020FF590 -_020A7000: .word UNK_020FF598 -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - ldr r1, [r5, #0xc] - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r1, [r0, #0x278] -_020A7118: - ldr r0, _020A7134 ; =UNK_021CA86C - 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 UNK_021CA86C - - arm_func_start FUN_020A7138 -FUN_020A7138: - ldr r0, _020A7144 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020A7144: .word UNK_021CA86C - - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_020A71F0: .word 0x00003FFE -_020A71F4: .word 0x0000A082 - - arm_func_start FUN_020A71F8 -FUN_020A71F8: ; 0x020A71F8 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020A7228 ; =UNK_021CA86C - 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 UNK_021CA86C - - arm_func_start FUN_020A722C -FUN_020A722C: ; 0x020A722C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020A747C ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 - cmp r0, #0x0 - bne _020A73F0 - mov r0, #0x1 - bl FUN_020A6C38 - ldr r1, _020A747C ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - mov r0, r7 - ldr r1, [r1, #0x0] - mov r2, #0xc0 - add r1, r1, #0x2140 - bl MI_CpuCopy8 - ldr r1, _020A7814 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 - 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 UNK_021CA86C - - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 - 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 ; =UNK_021CA86C - 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 - cmp r0, #0x0 - bne _020A7D44 - bl WM_Finish - 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 - 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 ; =UNK_021CA86C - 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 UNK_021CA86C -_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 ; =UNK_021CA86C - 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 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A7E7C: .word UNK_021CA86C - - 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 ; =UNK_021CA86C - 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 - cmp r0, #0x0 - bne _020A7F70 - bl OS_InitTick -_020A7F70: - bl OS_IsAlarmAvailable - cmp r0, #0x0 - bne _020A7F80 - bl OS_InitAlarm -_020A7F80: - ldr r1, _020A7FA8 ; =UNK_021CA86C - ldr r0, _020A7FAC ; =0x000022CC - ldr r1, [r1, #0x0] - add r0, r1, r0 - bl OS_CreateAlarm - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A7FA8: .word UNK_021CA86C -_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 - 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 - 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 - 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 - 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 - 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 ; =UNK_021CA87C - bx r12 - .balign 4 -_020A85E8: .word FUN_020A8534 -_020A85EC: .word UNK_021CA87C - - 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 ; =UNK_021CA870 - str r2, [r1, #0x24] - ldrh r0, [r0, #0x2] - cmp r0, #0x0 - bne _020A8628 - bl FUN_020A6BBC -_020A8628: - ldr r0, _020A8640 ; =UNK_021CA874 - bl OS_WakeupThread - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A863C: .word UNK_021CA870 -_020A8640: .word UNK_021CA874 - - 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 - cmp r0, #0x0 - bne _020A867C - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020A867C: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_LockMutex - bl FUN_020A7138 - movs r4, r0 - bne _020A86AC - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - 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 ; =UNK_021CA87C - 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 ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x4 - ldmia sp!, {r4-r8,lr} - bx lr -_020A8758: - ldr r0, _020A87B4 ; =UNK_021CA874 - bl OS_SleepThread - ldr r0, _020A87B8 ; =UNK_021CA870 - ldr r0, [r0, #0x24] - cmp r0, #0x0 - beq _020A8790 - cmp r0, #0x1 - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x4 - ldmia sp!, {r4-r8,lr} - bx lr -_020A8790: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r6 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020A87AC: .word UNK_021CA87C -_020A87B0: .word FUN_020A85F0 -_020A87B4: .word UNK_021CA874 -_020A87B8: .word UNK_021CA870 - - arm_func_start FUN_020A87BC -FUN_020A87BC: ; 0x020A87BC - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020A87DC ; =UNK_021CA870 - str r4, [r1, #0x28] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A87DC: .word UNK_021CA870 - - 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 - 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 - 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 - 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 ; =UNK_021CA87C - bl FUN_020A8590 - 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 ; =UNK_021CA87C - bl FUN_020A8534 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A8928: .word UNK_021CA87C -_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 ; =UNK_021CA870 - 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 UNK_021CA870 - - arm_func_start FUN_020A897C -FUN_020A897C: ; 0x020A897C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020A89C8 ; =UNK_021CA870 - ldrb r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020A89CC ; =UNK_021CA87C - 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 UNK_021CA870 -_020A89CC: .word UNK_021CA87C - - arm_func_start FUN_020A89D0 -FUN_020A89D0: ; 0x020A89D0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020A8A48 ; =UNK_021CA89C - 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 ; =UNK_021CA8A0 - 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 UNK_021CA89C -_020A8A4C: .word UNK_021CA8A0 - - 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 ; =UNK_021CA89C - mov r0, #0x0 - ldrb r1, [r1, #0x0] - cmp r1, #0x10 - bls _020A8ADC - ldr r2, _020A8B24 ; =UNK_021CA8A0 - 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 ; =UNK_021CA8A0 -_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 UNK_021CA89C -_020A8B24: .word UNK_021CA8A0 - - 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 - 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} - mov r5, #0x8000 - ldr fp, _020A8F4C ; =UNK_020FF5D4 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 UNK_020FF5D4 -_020A8F50: .word 0x00007FFF -_020A8F54: .word UNK_020FF5B8 - - 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} - mov r4, #0x8000 - rsb r6, r4, #0x0 - ldr r5, _020A91CC ; =0x00007FFF - ldr fp, _020A91D0 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 ; =UNK_020FF5B8 - 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 UNK_020FF5D4 -_020A91D4: .word UNK_020FF5B8 - - 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} - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 UNK_020FF5D4 -_020A97D8: .word UNK_020FF5BC - - 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} - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5BC - 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 UNK_020FF5D4 -_020A9D14: .word UNK_020FF5BC - - 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} - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5C4 - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5C4 - 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 UNK_020FF5D4 -_020A9F0C: .word UNK_020FF5C4 - - 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} - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5C4 - 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 ; =UNK_020FF5D4 - 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 ; =UNK_020FF5C4 - 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 UNK_020FF5D4 -_020AA0A0: .word UNK_020FF5C4 - - arm_func_start FUN_020AA0A4 -FUN_020AA0A4: - stmdb sp!, {r4-r8,lr} - ldr r0, _020AA1B4 ; =UNK_021CA8D0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r8,pc} - ldr r1, _020AA1B8 ; =UNK_021CAF00 - ldr r0, [r1, #0x8c8] - cmp r0, #0x0 - bne _020AA0FC - bl FUN_020AA4C0 - ldr r1, _020AA1B8 ; =UNK_021CAF00 - cmp r0, #0x0 - str r0, [r1, #0x8c8] - beq _020AA0F4 - ldr r0, _020AA1BC ; =UNK_021CA8C8 - 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 ; =UNK_021CCD20 - mov r5, #0x1 - ldr r0, [r0, #0x10] - cmp r0, #0x2 - bne _020AA130 - ldr r3, [r1, #0x8d4] - ldr r2, _020AA1C4 ; =UNK_020FF694 - 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 ; =UNK_021CAF00 - mov r8, #0x80000000 - ldr r6, _020AA1C8 ; =UNK_021CA8BC - 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 MOD04_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 UNK_021CA8D0 -_020AA1B8: .word UNK_021CAF00 -_020AA1BC: .word UNK_021CA8C8 -_020AA1C0: .word UNK_021CCD20 -_020AA1C4: .word UNK_020FF694 -_020AA1C8: .word UNK_021CA8BC - - arm_func_start FUN_020AA1CC -FUN_020AA1CC: ; 0x020AA1CC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - bl FUN_020AB154 - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - 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 - 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 ; =UNK_021CA8D0 - 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} - ldr r1, _020AA4AC ; =UNK_021CA8E8 - mov r2, r5 -_020AA2E0: - ldr r0, [r1, #0x38] - cmp r10, r0 - ldreq r1, _020AA4AC ; =UNK_021CA8E8 - 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} - 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} - 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} - ldr r1, _020AA4B0 ; =UNK_020FF689 - ldr r0, _020AA4B4 ; =UNK_020FF688 - 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} - cmp r10, #0x0 - movne r0, #0x1 - movne r1, r0, lsl r10 - ldr r0, _020AA4B8 ; =UNK_021CA8B4 - moveq r1, #0x1 - ldr r0, [r0, #0x0] - ands r0, r0, r1 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r11,pc} - 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 - 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 UNK_021CA8D0 -_020AA4AC: .word UNK_021CA8E8 -_020AA4B0: .word UNK_020FF689 -_020AA4B4: .word UNK_020FF688 -_020AA4B8: .word UNK_021CA8B4 -_020AA4BC: .word 0x0000045C - - arm_func_start FUN_020AA4C0 -FUN_020AA4C0: ; 0x020AA4C0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - ldr r0, _020AA728 ; =UNK_021CAF00 - ldr r1, _020AA72C ; =UNK_021CA8CC - 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} - ldr r0, _020AA728 ; =UNK_021CAF00 - ldr r0, [r0, #0x8c0] - ands r0, r0, #0x1 - movne r1, #0x0 - moveq r1, #0x460 - ldr r0, _020AA728 ; =UNK_021CAF00 - cmp r5, #0x2 - add r8, r0, r1 - ldr r1, _020AA730 ; =UNK_021CA8D4 - 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 ; =UNK_021CA8C8 - ldr r1, _020AA740 ; =0x040002B4 - ldr r0, [r0, #0x0] - ldr r4, [r1, #0x0] - cmp r0, #0x0 - beq _020AA588 - ldr r1, _020AA730 ; =UNK_021CA8D4 - mov r0, r7 - ldr r1, [r1, #0x0] - mov r2, r4 - bl FUN_020AD1CC -_020AA588: - ldr r0, _020AA744 ; =UNK_0210646C - 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 ; =UNK_021CA8D8 - 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 ; =UNK_021CAF00 - 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 ; =UNK_0210646C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020AA62C - ldr r0, _020AA74C ; =UNK_021CA8B8 - 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 ; =UNK_021CA8C4 - 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 ; =UNK_021CA8C0 - ands r0, r0, #0x80 - ldrne r0, _020AA754 ; =UNK_021CA8C0 - movne r1, #0x0 - strneh r1, [r0, #0x0] - strneb r1, [r0, #0x2] - ldr r0, _020AA730 ; =UNK_021CA8D4 - 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 ; =UNK_021CA8D4 - 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 ; =UNK_021CA8D4 - mov r0, r7 - ldr r2, [r1, #0x0] - mov r1, r7 - mov r2, r2, lsr #0x1 - bl FUN_020AB2FC -_020AA6D4: - ldr r0, _020AA758 ; =UNK_021CCD20 - ldr r1, _020AA75C ; =UNK_021CA8B4 - ldrb r0, [r0, #0x0] - mov r2, #0x1 - ldr r3, [r1, #0x0] - mvn r0, r2, lsl r0 - ldr r1, _020AA728 ; =UNK_021CAF00 - and r0, r3, r0 - str r3, [r1, #0x8cc] - str r0, [r1, #0x8cc] - bl MATH_CountPopulation - sub r0, r0, #0x1 - ldr r1, _020AA728 ; =UNK_021CAF00 - 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 UNK_021CAF00 -_020AA72C: .word UNK_021CA8CC -_020AA730: .word UNK_021CA8D4 -_020AA734: .word 0x040002B0 -_020AA738: .word 0x040002B8 -_020AA73C: .word UNK_021CA8C8 -_020AA740: .word 0x040002B4 -_020AA744: .word UNK_0210646C -_020AA748: .word UNK_021CA8D8 -_020AA74C: .word UNK_021CA8B8 -_020AA750: .word UNK_021CA8C4 -_020AA754: .word UNK_021CA8C0 -_020AA758: .word UNK_021CCD20 -_020AA75C: .word UNK_021CA8B4 - - arm_func_start FUN_020AA760 -FUN_020AA760: ; 0x020AA760 - ldr r1, _020AA76C ; =UNK_021CA8C8 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020AA76C: .word UNK_021CA8C8 - - arm_func_start FUN_020AA770 -FUN_020AA770: ; 0x020AA770 - stmdb sp!, {r4,lr} - ldr r1, _020AA798 ; =UNK_0210646C - mov r4, r0 - str r4, [r1, #0x0] - bl FUN_020AD170 - cmp r4, #0x0 - ldreq r0, _020AA79C ; =UNK_021CA8B8 - moveq r1, #0x1 - streq r1, [r0, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020AA798: .word UNK_0210646C -_020AA79C: .word UNK_021CA8B8 - - arm_func_start FUN_020AA7A0 -FUN_020AA7A0: ; 0x020AA7A0 - cmp r0, #0x5 - movge r0, #0x0 - bxge lr - ldr r1, _020AA80C ; =UNK_021CCD20 - ldr r1, [r1, #0x10] - cmp r1, #0x1 - beq _020AA7C8 - cmp r0, #0x1 - movls r0, #0x0 - bxls lr -_020AA7C8: - ldr r2, _020AA810 ; =UNK_020FF689 - ldr r1, _020AA814 ; =UNK_020FF688 - ldrb r12, [r2, r0, lsl #0x1] - ldrb r3, [r1, r0, lsl #0x1] - mov r1, #0x44 - ldr r2, _020AA818 ; =UNK_021CA8CC - mla r12, r3, r1, r12 - str r0, [r2, #0x0] - ldr r1, _020AA81C ; =UNK_021CA8BC - add r3, r12, #0xc - ldr r0, _020AA820 ; =UNK_021CA8C0 - mov r2, #0x0 - str r3, [r1, #0x0] - strh r2, [r0, #0x0] - strb r2, [r0, #0x2] - mov r0, #0x1 - bx lr - .balign 4 -_020AA80C: .word UNK_021CCD20 -_020AA810: .word UNK_020FF689 -_020AA814: .word UNK_020FF688 -_020AA818: .word UNK_021CA8CC -_020AA81C: .word UNK_021CA8BC -_020AA820: .word UNK_021CA8C0 - - 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 ; =UNK_021CA8D4 - mov r6, r1 - ldr r0, [r0, #0x0] - mov r4, #0x0 - cmp r6, r0 - bne _020AA920 - ldr r8, _020AA95C ; =UNK_021CA8D0 - 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 ; =UNK_021CA8D0 - add r10, r9, #0x1 - ldr r0, [r8, #0x0] - cmp r10, r0 - moveq r4, #0x1 - beq _020AA934 - cmp r10, r0 - bhs _020AA934 - ldr sb, _020AA960 ; =UNK_021CAAA4 -_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 ; =UNK_021CA8C8 - 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 UNK_021CA8D4 -_020AA95C: .word UNK_021CA8D0 -_020AA960: .word UNK_021CAAA4 -_020AA964: .word UNK_021CA8C8 - - arm_func_start FUN_020AA968 -FUN_020AA968: ; 0x020AA968 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r4, _020AABD4 ; =UNK_021CA8E8 - 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 - 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 - mov r0, #0x0 - str r0, [r6, #0x3c] -_020AABC8: - mov r0, #0x0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020AABD4: .word UNK_021CA8E8 -_020AABD8: .word 0x00008B4C - - arm_func_start FUN_020AABDC -FUN_020AABDC: ; 0x020AABDC - stmdb sp!, {r4,lr} - ldr r3, _020AACE0 ; =UNK_021CA8D4 - mov r2, r1 - ldr r1, [r3, #0x0] - mov r12, #0x0 - cmp r2, r1 - movne r0, r12 - ldmneia sp!, {r4,pc} - ldr r1, _020AACE4 ; =UNK_021CA8D0 - ldr r4, [r1, #0x0] - cmp r4, #0x0 - moveq r0, r12 - ldmeqia sp!, {r4,pc} - mov lr, r12 - cmp r4, #0x0 - bls _020AAC48 - ldr r3, _020AACE8 ; =UNK_021CA8DC -_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} - ldr r1, _020AACEC ; =UNK_021CAF00 - ldr r4, _020AACEC ; =UNK_021CAF00 - 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 ; =UNK_021CA8CC - 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 ; =UNK_021CA8B0 - 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 ; =UNK_021CAF00 - 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 UNK_021CA8D4 -_020AACE4: .word UNK_021CA8D0 -_020AACE8: .word UNK_021CA8DC -_020AACEC: .word UNK_021CAF00 -_020AACF0: .word 0x5F564354 -_020AACF4: .word UNK_021CA8CC -_020AACF8: .word UNK_021CA8B0 - - 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 ; =UNK_021CA8DC -_020AAD10: - ldr r0, [r12, r4, lsl #0x2] - mov lr, r4, lsl #0x2 - cmp r0, r5 - bne _020AAD74 - ldr r1, _020AADBC ; =UNK_021CA8E8 - mov r0, #0x94 - mla r0, r4, r0, r1 - ldr r1, _020AADC0 ; =UNK_021CA8D0 - 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 ; =UNK_021CA8B4 - 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 ; =UNK_021CA8D0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - ldr r0, _020AADC8 ; =UNK_021CA8C4 - mov r1, #0x1 - str r1, [r0, #0x0] - bl FUN_020AD170 - ldr r0, _020AADC4 ; =UNK_021CA8B4 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AADB8: .word UNK_021CA8DC -_020AADBC: .word UNK_021CA8E8 -_020AADC0: .word UNK_021CA8D0 -_020AADC4: .word UNK_021CA8B4 -_020AADC8: .word UNK_021CA8C4 - - 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} - ldr r0, _020AAF24 ; =UNK_021CA8D0 - ldr r0, [r0, #0x0] - cmp r0, #0x3 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - 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 ; =UNK_021CA8DC - 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} - add r2, r2, #0x1 - cmp r2, #0x3 - blo _020AAE20 - ldr r1, _020AAF28 ; =UNK_021CA8DC - 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 ; =UNK_021CA8D0 - ldr r1, _020AAF2C ; =UNK_021CA8B4 - ldr r3, [r0, #0x0] - ldr r2, _020AAF30 ; =UNK_021CA8E8 - 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} - ldr r0, _020AAF24 ; =UNK_021CA8D0 - ldr r0, [r0, #0x0] - cmp r0, #0x1 - bne _020AAF18 - bl FUN_020AD170 - bl OS_GetTickLo - ldr r4, _020AAF34 ; =UNK_021CA8B0 - ldr r3, _020AAF38 ; =UNK_021CA8C0 - mov r12, #0x0 - ldr r1, _020AAF3C ; =UNK_021CAF00 - ldr r2, _020AAF40 ; =UNK_021CA8C4 - 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 UNK_021CA8D0 -_020AAF28: .word UNK_021CA8DC -_020AAF2C: .word UNK_021CA8B4 -_020AAF30: .word UNK_021CA8E8 -_020AAF34: .word UNK_021CA8B0 -_020AAF38: .word UNK_021CA8C0 -_020AAF3C: .word UNK_021CAF00 -_020AAF40: .word UNK_021CA8C4 - - arm_func_start FUN_020AAF44 -FUN_020AAF44: ; 0x020AAF44 - ldr r0, _020AAF54 ; =UNK_021CA8D0 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020AAF54: .word UNK_021CA8D0 - - arm_func_start FUN_020AAF58 -FUN_020AAF58: - stmdb sp!, {r4-r8,lr} - bl OS_GetTickLo - ldr r1, _020AB054 ; =UNK_021CCD20 - ldr ip, _020AB058 ; =UNK_021CA8B0 - ldr r4, [r1, #0x10] - strh r0, [r12, #0x0] - cmp r4, #0x1 - ldreq r0, _020AB05C ; =UNK_021CA8CC - mov r5, #0x0 - ldr r1, _020AB060 ; =UNK_021CA8B4 - streq r5, [r0, #0x0] - str r5, [r1, #0x0] - ldr r2, _020AB064 ; =UNK_021CA8D0 - ldrne r0, _020AB05C ; =UNK_021CA8CC - movne r1, #0x4 - strne r1, [r0, #0x0] - str r5, [r2, #0x0] - ldr r0, _020AB05C ; =UNK_021CA8CC - ldr r3, _020AB068 ; =UNK_0210646C - ldr r2, [r0, #0x0] - mov r6, #0x1 - ldr r1, _020AB06C ; =UNK_020FF689 - str r6, [r3, #0x0] - ldr r0, _020AB070 ; =UNK_020FF688 - ldrb r3, [r1, r2, lsl #0x1] - ldrb r1, [r0, r2, lsl #0x1] - mov r0, #0x44 - ldr r2, _020AB074 ; =UNK_021CA8D4 - mla r0, r1, r0, r3 - add r4, r0, #0xc - ldr r1, _020AB078 ; =UNK_021CA8BC - mov r5, #0x440 - ldr r0, _020AB07C ; =UNK_021CAF00 - 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 ; =UNK_021CA8E8 - ldr r5, _020AB084 ; =UNK_021CA8DC - 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 UNK_021CCD20 -_020AB058: .word UNK_021CA8B0 -_020AB05C: .word UNK_021CA8CC -_020AB060: .word UNK_021CA8B4 -_020AB064: .word UNK_021CA8D0 -_020AB068: .word UNK_0210646C -_020AB06C: .word UNK_020FF689 -_020AB070: .word UNK_020FF688 -_020AB074: .word UNK_021CA8D4 -_020AB078: .word UNK_021CA8BC -_020AB07C: .word UNK_021CAF00 -_020AB080: .word UNK_021CA8E8 -_020AB084: .word UNK_021CA8DC - - 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 ; =UNK_021CB7D8 - 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 ; =UNK_021CB7DC - cmp r2, #0x0 - str r2, [r1, #0x0] - movne r1, #0x0 - strne r1, [r2, #0x8] -_020AB0E0: - ldrb r2, [r0, #0x11] - ldr r3, _020AB108 ; =UNK_021CB7E0 - 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 UNK_021CB7D8 -_020AB104: .word UNK_021CB7DC -_020AB108: .word UNK_021CB7E0 - - arm_func_start FUN_020AB10C -FUN_020AB10C: ; 0x020AB10C - ldr r1, _020AB140 ; =UNK_021CB7D8 - 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 UNK_021CB7D8 - - arm_func_start FUN_020AB144 -FUN_020AB144: ; 0x020AB144 - ldr r1, _020AB150 ; =UNK_021CB7E0 - ldr r0, [r1, r0, lsl #0x2] - bx lr - .balign 4 -_020AB150: .word UNK_021CB7E0 - - arm_func_start FUN_020AB154 -FUN_020AB154: - ldr r0, _020AB160 ; =UNK_021CB7D8 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020AB160: .word UNK_021CB7D8 - - arm_func_start FUN_020AB164 -FUN_020AB164: ; 0x020AB164 - ldr r2, _020AB1D8 ; =UNK_021CB7D8 - 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 ; =UNK_021CB7DC - str r12, [r3, #0x8] - ldr r2, [r2, #0x0] - str r2, [r1, #0x0] - b _020AB1B8 -_020AB198: - ldr r1, _020AB1DC ; =UNK_021CB7DC - 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 ; =UNK_021CB7E0 - 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 UNK_021CB7D8 -_020AB1DC: .word UNK_021CB7DC -_020AB1E0: .word UNK_021CB7E0 - - arm_func_start FUN_020AB1E4 -FUN_020AB1E4: ; 0x020AB1E4 - stmdb sp!, {r4,lr} - ldr r0, _020AB22C ; =UNK_021CB7D8 - ldr r4, [r0, #0x0] - cmp r4, #0x0 - beq _020AB20C -_020AB1F8: - mov r0, r4 - ldr r4, [r4, #0x8] - bl FUN_020ACD90 - cmp r4, #0x0 - bne _020AB1F8 -_020AB20C: - mov r2, #0x0 - ldr r0, _020AB230 ; =UNK_021CB7E0 - 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 UNK_021CB7D8 -_020AB230: .word UNK_021CB7E0 - - 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 ; =UNK_021CB7E0 - mov r1, #0x0 - str r1, [r0, r5, lsl #0x2] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AB280: .word UNK_021CB7E0 - - arm_func_start FUN_020AB284 -FUN_020AB284: ; 0x020AB284 - ldr r1, _020AB2B4 ; =UNK_021CB7DC - mov r2, #0x0 - ldr r0, _020AB2B8 ; =UNK_021CB7D8 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - ldr r0, _020AB2BC ; =UNK_021CB7E0 - 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 UNK_021CB7DC -_020AB2B8: .word UNK_021CB7D8 -_020AB2BC: .word UNK_021CB7E0 - - 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} - 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 ; =UNK_02106470 - 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 UNK_02106470 -_020AB430: .word 0x00001FDF - - arm_func_start FUN_020AB434 -FUN_020AB434: ; 0x020AB434 - ldr r1, _020AB440 ; =UNK_021CB7FC - ldr r0, [r1, r0, lsl #0x2] - bx lr - .balign 4 -_020AB440: .word UNK_021CB7FC - - arm_func_start FUN_020AB444 -FUN_020AB444: ; 0x020AB444 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r3, _020AB4AC ; =UNK_021CB7F0 - ldr r1, _020AB4B0 ; =UNK_021CB7EC - ldr r2, [r3, r4, lsl #0x2] - str r0, [r1, #0x0] - cmp r2, #0x0 - mov r12, r4, lsl #0x2 - beq _020AB494 - ldr r1, _020AB4B4 ; =UNK_021CB7FC - 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 ; =UNK_021CB7EC - ldr r0, [r0, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020AB4B4 ; =UNK_021CB7FC - ldr r0, [r0, r4, lsl #0x2] - ldmia sp!, {r4,pc} - .balign 4 -_020AB4AC: .word UNK_021CB7F0 -_020AB4B0: .word UNK_021CB7EC -_020AB4B4: .word UNK_021CB7FC - - arm_func_start FUN_020AB4B8 -FUN_020AB4B8: ; 0x020AB4B8 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r2, _020AB4F8 ; =UNK_021CB7F0 - ldr r1, _020AB4FC ; =UNK_021CB7EC - ldr r2, [r2, r4, lsl #0x2] - str r0, [r1, #0x0] - cmp r2, #0x0 - beq _020AB4EC - bl OS_RestoreInterrupts - ldr r0, _020AB4F8 ; =UNK_021CB7F0 - ldr r0, [r0, r4, lsl #0x2] - ldmia sp!, {r4,pc} -_020AB4EC: - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4,pc} - .balign 4 -_020AB4F8: .word UNK_021CB7F0 -_020AB4FC: .word UNK_021CB7EC - - 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} - cmp r4, #0x3 - addcs sp, sp, #0x4 - mvncs r0, #0x0 - ldmcsia sp!, {r4-r5,pc} - bl OS_DisableInterrupts - ldr r3, _020AB620 ; =UNK_021CB7F0 - ldr r1, _020AB624 ; =UNK_021CB7EC - 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 ; =UNK_021CB808 - str r2, [r1, #0x8] - ldr r1, [r3, r12] - str r1, [r0, r12] - b _020AB5F4 -_020AB574: - ldr r0, _020AB628 ; =UNK_021CB808 - 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 ; =UNK_021CB808 - 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 ; =UNK_021CB7F0 - 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 ; =UNK_021CB7FC - ldr r0, _020AB624 ; =UNK_021CB7EC - 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 ; =UNK_021CB7FC - ldr r0, [r0, r4, lsl #0x2] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AB620: .word UNK_021CB7F0 -_020AB624: .word UNK_021CB7EC -_020AB628: .word UNK_021CB808 -_020AB62C: .word UNK_021CB7FC - - 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 ; =UNK_021CB7EC - mov r4, r7 - mov r9, r7 - str r0, [r1, #0x0] - ldr r5, _020AB6BC ; =UNK_021CB7F0 - ldr r8, _020AB6C0 ; =UNK_021CB7FC - 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 ; =UNK_021CB7EC - ldr r0, [r0, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020AB6B8: .word UNK_021CB7EC -_020AB6BC: .word UNK_021CB7F0 -_020AB6C0: .word UNK_021CB7FC - - 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 ; =UNK_021CB7FC - mov r1, #0x0 - str r1, [r0, r5, lsl #0x2] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AB710: .word UNK_021CB7FC - - arm_func_start FUN_020AB714 -FUN_020AB714: ; 0x020AB714 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020AB750 ; =UNK_021CB7EC - ldr r3, _020AB754 ; =UNK_021CB808 - mov lr, #0x0 - str lr, [r3, r4, lsl #0x2] - ldr r2, _020AB758 ; =UNK_021CB7FC - ldr r12, [r3, r4, lsl #0x2] - ldr r3, _020AB75C ; =UNK_021CB7F0 - 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 UNK_021CB7EC -_020AB754: .word UNK_021CB808 -_020AB758: .word UNK_021CB7FC -_020AB75C: .word UNK_021CB7F0 - - 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 - cmp r0, #0x0 - ldreq r1, [r7, #0x14] - moveq r0, r4 - addeq r1, r1, #0x1 - streq r1, [r7, #0x14] - ldmeqia sp!, {r4-r8,pc} - 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} - 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} - 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} - 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} - 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 - 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 ; =UNK_021CCD20 - 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 ; =UNK_021CB824 - 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 ; =UNK_021CB824 - mov r3, #0x0 - ldr r2, _020ABE3C ; =UNK_021CB850 - str r3, [r0, #0x2c] - str r3, [r0, #0x38] - str r2, [r1, #0x4] - b _020ABE28 -_020ABDA4: - ldr r2, _020ABE38 ; =UNK_021CB824 - 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 ; =UNK_021CB824 - moveq r3, #0x1 - str r3, [r2, #0x34] -_020ABE04: - ldrb r3, [r0, #0xb] - ldr r0, _020ABE38 ; =UNK_021CB824 - ldr r2, _020ABE3C ; =UNK_021CB850 - 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 UNK_021CCD20 -_020ABE38: .word UNK_021CB824 -_020ABE3C: .word UNK_021CB850 - - 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 - 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 ; =UNK_021CB838 - bl FUN_020AC5A4 - ldr r0, _020ABEC8 ; =UNK_021CB838 - mov r1, #0x2 - bl FUN_020AC708 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020ABEC8: .word UNK_021CB838 - - arm_func_start FUN_020ABECC -FUN_020ABECC: ; 0x020ABECC - stmdb sp!, {r4-r6,lr} - ldr r2, _020AC070 ; =UNK_021CB824 - 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 ; =UNK_021CB850 - 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 ; =UNK_021CB850 - mov r0, r6 - bl FUN_020AC4A0 - ldr r1, _020AC074 ; =UNK_021CB850 - 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 - 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 ; =UNK_021CB818 - moveq r1, #0x1 - ldr r0, [r0, #0x0] - ands r0, r0, r1 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r2, _020AC070 ; =UNK_021CB824 - mov r4, #0x2 - mov r3, #0x0 - ldr r0, _020AC074 ; =UNK_021CB850 - 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 ; =UNK_021CB824 - mov r0, #0x0 - str r0, [r1, #0x2c] - ldmia sp!, {r4-r6,pc} -_020AC008: - ldr r1, _020AC074 ; =UNK_021CB850 - mov r0, r6 - bl FUN_020AC4A0 - ldr r1, _020AC074 ; =UNK_021CB850 - 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 ; =UNK_021CB81C - str r0, [r2, #0x0] - str r1, [r2, #0x4] - b _020AC068 -_020AC050: - mov r0, #0x0 - bl FUN_020AC5E8 - ldr r0, _020AC07C ; =UNK_021CB81C - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r0, #0x4] -_020AC068: - mov r0, #0x1 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020AC070: .word UNK_021CB824 -_020AC074: .word UNK_021CB850 -_020AC078: .word UNK_021CB818 -_020AC07C: .word UNK_021CB81C - - 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 - 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 ; =UNK_021CB838 - bl FUN_020AC5A4 - ldr r0, _020AC1E4 ; =UNK_021CB838 - 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 - 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 UNK_021CB838 - - arm_func_start FUN_020AC1E8 -FUN_020AC1E8: - ldr r1, _020AC25C ; =UNK_021CCD20 - ldr r2, _020AC260 ; =UNK_021CB824 - 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 ; =UNK_021CB850 - 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 UNK_021CCD20 -_020AC260: .word UNK_021CB824 -_020AC264: .word UNK_021CB850 - - 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 ; =UNK_021CCD20 - ldr r1, [r1, #0x10] - cmp r1, #0x1 - ldrne r3, [r0, #0xc] - ldrne r2, _020AC2FC ; =UNK_020FF788 - movne r1, #0xb - mlane r1, r3, r1, r2 - ldrnesb r2, [r12, r1] - bne _020AC2D0 - ldr r3, [r0, #0xc] - ldr r2, _020AC300 ; =UNK_020FF744 - 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 UNK_021CCD20 -_020AC2FC: .word UNK_020FF788 -_020AC300: .word UNK_020FF744 - - arm_func_start FUN_020AC304 -FUN_020AC304: - ldr r1, _020AC34C ; =UNK_021CB824 - 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 UNK_021CB824 - - 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} - ldr r0, _020AC44C ; =UNK_021CCD20 - ldr r0, [r0, #0x10] - cmp r0, #0x1 - ldrne r2, [r4, #0xc] - ldrne r1, _020AC450 ; =UNK_020FF700 - movne r0, #0xb - mlane r0, r2, r0, r1 - ldrnesb r5, [r3, r0] - bne _020AC3C8 - ldr r2, [r4, #0xc] - ldr r1, _020AC454 ; =UNK_020FF6BC - 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 UNK_021CCD20 -_020AC450: .word UNK_020FF700 -_020AC454: .word UNK_020FF6BC - - 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 ; =UNK_021CCD20 - 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 UNK_021CCD20 - - 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 ; =UNK_020FF6AC - 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 ; =UNK_020FF6B4 - ldrb r0, [r0, r2] - bx lr -_020AC544: - mov r0, #0xc - bx lr - .balign 4 -_020AC54C: .word UNK_020FF6AC -_020AC550: .word UNK_020FF6B4 - - 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 MOD04_021EB044 - 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 ; =UNK_021CCD20 - 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 UNK_021CCD20 - - arm_func_start FUN_020AC5E8 -FUN_020AC5E8: - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - mov r4, r0 - mov r3, #0xff - ldr r0, _020AC624 ; =UNK_021CB850 - add r1, sp, #0x0 - mov r2, #0x4 - strb r3, [sp, #0x4] - bl FUN_020AC458 - ldr r0, _020AC624 ; =UNK_021CB850 - add r1, sp, #0x0 - strb r4, [sp, #0xa] - bl FUN_020AC628 - add sp, sp, #0x10 - ldmia sp!, {r4,pc} - .balign 4 -_020AC624: .word UNK_021CB850 - - 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 ; =UNK_021CCD20 - ldr r5, _020AC6E0 ; =UNK_021CB818 - 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 MOD04_021EB044 - 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 ; =UNK_021CB818 - 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 UNK_021CCD20 -_020AC6E0: .word UNK_021CB818 - - arm_func_start FUN_020AC6E4 -FUN_020AC6E4: ; 0x020AC6E4 - ldrb r2, [r1, #0xa] - cmp r2, #0x1 - ldreqb r2, [r0, #0x4] - ldreq r0, _020AC704 ; =UNK_021CB818 - streqb r2, [r1, #0xb] - ldreq r0, [r0, #0x0] - streq r0, [r1, #0xc] - bx lr - .balign 4 -_020AC704: .word UNK_021CB818 - - 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 - cmp r0, #0x0 - addne sp, sp, #0x10 - ldmneia sp!, {r4,pc} - add r1, sp, #0x0 - mov r0, r4 - bl FUN_020AC554 - 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 - cmp r0, #0x0 - addne sp, sp, #0x10 - ldmneia sp!, {r4,pc} - add r1, sp, #0x0 - mov r0, r4 - bl FUN_020AC554 - 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} - ldr r0, _020AC7F4 ; =UNK_021CCD20 - ldrb r0, [r0, #0x0] - cmp r1, r0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r2, _020AC7F8 ; =UNK_021CB824 - ldr r4, [r2, #0x0] - cmp r4, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r3, [r4, #0x14] - mov r0, r4 - str r3, [r2, #0x0] - bl FUN_020AC5A4 - ldr r1, _020AC7F8 ; =UNK_021CB824 - mov r0, r4 - ldr r2, [r1, #0x4] - str r2, [r4, #0x14] - str r4, [r1, #0x4] - ldmia sp!, {r4,pc} - .balign 4 -_020AC7F4: .word UNK_021CCD20 -_020AC7F8: .word UNK_021CB824 - - 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 ; =UNK_021CCD20 - 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 UNK_021CCD20 - - arm_func_start FUN_020AC898 -FUN_020AC898: ; 0x020AC898 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_GetTick - ldr r2, _020AC950 ; =UNK_021CCD20 - ldr r3, [r2, #0x10] - cmp r3, #0x2 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - ldr r2, [r2, #0xc] - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r3, _020AC954 ; =UNK_021CB81C - 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} - ldr r2, _020AC958 ; =UNK_02106490 - 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} - ldr r1, _020AC95C ; =UNK_021CB824 - 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 ; =UNK_021CCD20 - ldr r0, _020AC95C ; =UNK_021CB824 - ldr r3, [r1, #0x8] - ldrb r0, [r0, #0x30] - ldr r12, [r1, #0x4] - ldr r2, _020AC960 ; =UNK_021CB850 - mov r1, #0x9 - blx r12 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AC950: .word UNK_021CCD20 -_020AC954: .word UNK_021CB81C -_020AC958: .word UNK_02106490 -_020AC95C: .word UNK_021CB824 -_020AC960: .word UNK_021CB850 - - arm_func_start FUN_020AC964 -FUN_020AC964: ; 0x020AC964 - ldr r0, _020AC978 ; =UNK_021CB824 - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x0] - bx lr - .balign 4 -_020AC978: .word UNK_021CB824 - - 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 ; =UNK_021CB824 - mov r2, #0x18 - str r0, [r1, #0x0] - ldr r3, [r4, #0x4] - mov r1, #0x0 - mul r2, r3, r2 - bl MI_CpuFill8 - ldr r0, _020ACA90 ; =UNK_021CB850 - mov r1, #0x0 - mov r2, #0x18 - bl MI_CpuFill8 - ldr r0, _020ACA94 ; =UNK_021CB838 - 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 ; =UNK_021CB824 - 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 ; =UNK_021CB824 - mov r0, #0x18 - ldr r1, [r3, #0x0] - mov r5, #0x0 - mla r0, r12, r0, r1 - str r5, [r0, #-0x4] - ldr r2, _020ACA98 ; =UNK_021CB818 - ldr r1, _020ACA9C ; =UNK_021CB814 - ldr r0, _020ACAA0 ; =UNK_021CCD20 - 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 UNK_021CB824 -_020ACA90: .word UNK_021CB850 -_020ACA94: .word UNK_021CB838 -_020ACA98: .word UNK_021CB818 -_020ACA9C: .word UNK_021CB814 -_020ACAA0: .word UNK_021CCD20 -_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 ; =UNK_021CCD20 - 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 UNK_021CCD20 - - 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} - cmp r3, #0x10 - mvncc r0, #0x0 - ldmccia sp!, {r4-r6,pc} - 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 - cmp r6, #0x0 - bne _020ACB80 - ldr r0, _020ACB9C ; =UNK_021CCD20 - ldr r0, [r0, #0x10] - cmp r0, #0x1 - bne _020ACB68 - ldr r0, [r5, #0xc] - cmp r0, #0x4 - bne _020ACB68 - mov r0, r5 - bl FUN_020AC304 - 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 - cmp r0, #0x0 - mvneq r0, #0x2 - movne r0, #0x0 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020ACB9C: .word UNK_021CCD20 - - arm_func_start FUN_020ACBA0 -FUN_020ACBA0: ; 0x020ACBA0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020ACBCC ; =UNK_021CCD20 - 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 UNK_021CCD20 - - 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} - cmp r3, #0x10 - mvncc r0, #0x0 - ldmccia sp!, {r4-r6,pc} - ldr r1, _020ACC80 ; =UNK_021CCD20 - ldr r1, [r1, #0xc] - cmp r1, #0x1 - mvneq r0, #0x2 - ldmeqia sp!, {r4-r6,pc} - 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 - cmp r0, #0x0 - mvneq r0, #0x2 - ldmeqia sp!, {r4-r6,pc} - ldr r0, _020ACC80 ; =UNK_021CCD20 - ldr r0, [r0, #0x10] - cmp r0, #0x1 - bne _020ACC78 - cmp r4, #0x0 - bne _020ACC78 - mov r0, r5 - bl FUN_020AC304 - cmp r0, #0x0 - mvneq r0, #0x2 - ldmeqia sp!, {r4-r6,pc} -_020ACC78: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020ACC80: .word UNK_021CCD20 - - arm_func_start FUN_020ACC84 -FUN_020ACC84: ; 0x020ACC84 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020ACD48 ; =UNK_021CB824 - cmp r0, #0x0 - mov lr, #0x0 - addeq sp, sp, #0x4 - ldr r12, [r2, #0x4] - moveq r0, lr - ldmeqia sp!, {pc} - ldr r1, _020ACD4C ; =UNK_021CCD20 - ldr r1, [r1, #0x10] - cmp r1, #0x2 - bne _020ACCD0 - ldr r1, _020ACD50 ; =UNK_021CB850 - 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 ; =UNK_021CB824 - strne r2, [r1, #0x4] - ldreq r1, _020ACD48 ; =UNK_021CB824 - streq r3, [r1, #0x4] -_020ACD10: - ldr r1, _020ACD48 ; =UNK_021CB824 - 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 UNK_021CB824 -_020ACD4C: .word UNK_021CCD20 -_020ACD50: .word UNK_021CB850 - - arm_func_start FUN_020ACD54 -FUN_020ACD54: ; 0x020ACD54 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020ACD8C ; =UNK_021CCD20 - 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 UNK_021CCD20 - - arm_func_start FUN_020ACD90 -FUN_020ACD90: - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020ACDC0 ; =UNK_021CB86C - ldr r2, _020ACDC4 ; =UNK_021CB868 - 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 UNK_021CB86C -_020ACDC4: .word UNK_021CB868 - - arm_func_start FUN_020ACDC8 -FUN_020ACDC8: ; 0x020ACDC8 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl OS_DisableInterrupts - ldr r1, _020ACE08 ; =UNK_021CB86C - ldr r2, _020ACE0C ; =UNK_021CB868 - 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 ; =UNK_021CB868 - ldr r0, [r0, #0x0] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,pc} - .balign 4 -_020ACE08: .word UNK_021CB86C -_020ACE0C: .word UNK_021CB868 - - arm_func_start FUN_020ACE10 -FUN_020ACE10: - ldr r1, _020ACE28 ; =UNK_021CB86C - mov r2, #0x0 - ldr r0, _020ACE2C ; =UNK_021CB870 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - bx lr - .balign 4 -_020ACE28: .word UNK_021CB86C -_020ACE2C: .word UNK_021CB870 - - 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 ; =UNK_021CB870 - 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} - ands r3, r0, #0x1f - movne r0, #0x0 - strne r0, [r1, #0x0] - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - mov r1, r0 - mov r0, #0x0 - bl MIi_CpuClearFast - subs r12, r4, #0x1 - mov r5, #0x0 - beq _020ACED0 - ldr r1, _020ACF04 ; =UNK_021CB870 - 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 ; =UNK_021CB870 - 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 ; =UNK_021CB86C - mov r0, #0x1 - str r2, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020ACF00: .word 0xE525982B -_020ACF04: .word UNK_021CB870 -_020ACF08: .word 0x00000478 -_020ACF0C: .word UNK_021CB86C - - arm_func_start FUN_020ACF10 -FUN_020ACF10: ; 0x020ACF10 - mov r2, #0xf - mov r0, #0x44 - mul r1, r2, r0 - ldr r0, _020ACF30 ; =UNK_02106498 - ldr ip, _020ACF34 ; =FUN_020AD170 - str r2, [r0, #0x8] - str r1, [r0, #0xc] - bx r12 - .balign 4 -_020ACF30: .word UNK_02106498 -_020ACF34: .word FUN_020AD170 - - arm_func_start FUN_020ACF38 -FUN_020ACF38: ; 0x020ACF38 - stmdb sp!, {r4,lr} - ldr r3, _020AD124 ; =UNK_02106498 - mov r12, r1, lsr #0x8 - str r12, [r3, #0x4] - cmp r2, #0x0 - strneb r12, [r2, #0x0] - ldr r2, _020AD124 ; =UNK_02106498 - ldr r2, [r2, #0x0] - cmp r2, #0x0 - bne _020AD05C - mov r4, #0x0 - mov r12, r4 - ldr r3, _020AD128 ; =UNK_021CB880 -_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 ; =UNK_021CB880 -_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 ; =UNK_021CB874 - mul r1, r2, r1 - mov lr, r1, lsr #0x1 - ldr r2, _020AD13C ; =UNK_021CB878 - mov r12, #0x0 - ldr r1, _020AD124 ; =UNK_02106498 - 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 ; =UNK_021CB878 - ldr r3, _020AD128 ; =UNK_021CB880 - 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 ; =UNK_021CB878 - mov lr, #0x0 - ldr r12, [r1, #0x0] - ldr r3, _020AD128 ; =UNK_021CB880 - 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 ; =UNK_021CB874 - ldr r1, [r1, #0x0] - ldr r0, [r0, #0x0] - cmp r1, r0 - bhi _020AD10C - ldr r2, _020AD140 ; =UNK_021CB87C - ldr r1, _020AD124 ; =UNK_02106498 - ldr r3, [r2, #0x0] - ldr r0, [r1, #0x8] - add r3, r3, #0x1 - str r3, [r2, #0x0] - cmp r3, r0 - ble _020AD118 - ldr r0, _020AD13C ; =UNK_021CB878 - 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 ; =UNK_021CB87C - mov r1, #0x0 - str r1, [r0, #0x0] -_020AD118: - mov r4, #0x2 -_020AD11C: - mov r0, r4 - ldmia sp!, {r4,pc} - .balign 4 -_020AD124: .word UNK_02106498 -_020AD128: .word UNK_021CB880 -_020AD12C: .word 0x040002B0 -_020AD130: .word 0x040002B8 -_020AD134: .word 0x040002B4 -_020AD138: .word UNK_021CB874 -_020AD13C: .word UNK_021CB878 -_020AD140: .word UNK_021CB87C - - 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 ; =UNK_02106498 - mov r2, #0x10 - bl MI_CpuCopy8 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AD16C: .word UNK_02106498 - - arm_func_start FUN_020AD170 -FUN_020AD170: - ldr r0, _020AD1B8 ; =UNK_021CB880 - 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 ; =UNK_021CB878 - mov r12, #0x0 - ldr r1, _020AD1C0 ; =UNK_02106498 - ldr r2, _020AD1C4 ; =UNK_021CB874 - ldr r0, _020AD1C8 ; =UNK_021CB87C - 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 UNK_021CB880 -_020AD1BC: .word UNK_021CB878 -_020AD1C0: .word UNK_02106498 -_020AD1C4: .word UNK_021CB874 -_020AD1C8: .word UNK_021CB87C - - arm_func_start FUN_020AD1CC -FUN_020AD1CC: ; 0x020AD1CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r12, r1 - mov r3, r2 - ldr r1, _020AD1F0 ; =UNK_021CB8D4 - mov r2, r12 - bl FUN_020AD1F4 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AD1F0: .word UNK_021CB8D4 - - 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 ; =UNK_021CB8BC - ldr r2, _020AD424 ; =UNK_021CB8A4 - str r4, [sp, #0xc] -_020AD224: - ldr r4, _020AD428 ; =UNK_021CB894 - ldr lr, [r2, #0x10] - ldr r7, [r4, #0x0] - mov r4, r9, lsl #0x1 - ldrsh r10, [r1, r4] - ldr r4, _020AD42C ; =UNK_021CB898 - mov r5, r7, lsl #0x1 - ldr r6, [r4, #0x0] - ldr r4, _020AD430 ; =UNK_021CBD14 - 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 ; =UNK_021CB894 - add r6, r6, #0x1 - str r7, [r5, #0x0] - ldr r5, _020AD438 ; =0x000007FF - mov r7, r9, lsl #0x1 - and r6, r6, r5 - ldr r5, _020AD42C ; =UNK_021CB898 - 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 ; =UNK_021CB890 - movhi r1, #0x0 - strhih r1, [r0, #0x0] - addhi sp, sp, #0x14 - ldmhiia sp!, {r4-r11,pc} - cmp r3, r4 - ldrlo r1, _020AD458 ; =UNK_021CB890 - movcc r2, #0x4 - strcch r2, [r1, #0x0] - ldr r1, _020AD458 ; =UNK_021CB890 - 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} - ldr r1, _020AD458 ; =UNK_021CB890 - 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 UNK_021CB8BC -_020AD424: .word UNK_021CB8A4 -_020AD428: .word UNK_021CB894 -_020AD42C: .word UNK_021CB898 -_020AD430: .word UNK_021CBD14 -_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 UNK_021CB890 - - arm_func_start FUN_020AD45C -FUN_020AD45C: ; 0x020AD45C - ldr ip, _020AD46C ; =MIi_CpuCopyFast - mov r2, r1 - ldr r1, _020AD470 ; =UNK_021CB8D4 - bx r12 - .balign 4 -_020AD46C: .word MIi_CpuCopyFast -_020AD470: .word UNK_021CB8D4 - - arm_func_start FUN_020AD474 -FUN_020AD474: ; 0x020AD474 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020AD4E4 ; =UNK_021CB894 - mov r3, #0x0 - ldr r2, _020AD4E8 ; =0x0000019D - ldr r0, _020AD4EC ; =UNK_021CB898 - ldr lr, _020AD4F0 ; =UNK_021064A8 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - ldr r0, _020AD4F4 ; =UNK_021CBD14 - 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 ; =UNK_021CB8BC - ldr r0, _020AD4FC ; =UNK_021CB8A4 - 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 UNK_021CB894 -_020AD4E8: .word 0x0000019D -_020AD4EC: .word UNK_021CB898 -_020AD4F0: .word UNK_021064A8 -_020AD4F4: .word UNK_021CBD14 -_020AD4F8: .word UNK_021CB8BC -_020AD4FC: .word UNK_021CB8A4 - - 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 ; =UNK_021CB89C - ldr r8, _020AD604 ; =UNK_021CB8A0 - 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 UNK_021CB89C -_020AD604: .word UNK_021CB8A0 -_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} - 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} - ldr r1, [r6, #0x0] - ldr r0, _020AD824 ; =0x5F564354 - cmp r1, r0 - addne sp, sp, #0x4 - movne r0, #0x2 - ldmneia sp!, {r4-r7,pc} - ldr r0, _020AD828 ; =UNK_021CCD20 - ldr r0, [r0, #0x10] - cmp r0, #0x0 - beq _020AD780 - ldr r0, _020AD82C ; =UNK_021CCD1C - 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 ; =UNK_021CCD18 - 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 - 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 UNK_021CCD20 -_020AD82C: .word UNK_021CCD1C -_020AD830: .word UNK_021CCD18 - - 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 - cmp r0, #0x0 - beq _020AD898 - cmp r0, #0x1 - beq _020AD864 - cmp r0, #0x2 - beq _020AD88C - b _020AD898 -_020AD864: - ldr r0, _020AD8A4 ; =UNK_021CCD20 - 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 UNK_021CCD20 - - arm_func_start FUN_020AD8A8 -FUN_020AD8A8: ; 0x020AD8A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020AD8FC ; =UNK_021CCD1C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r0, _020AD900 ; =UNK_021CCD14 - 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 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - bl FUN_020AA1CC - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AD8FC: .word UNK_021CCD1C -_020AD900: .word UNK_021CCD14 - - 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 ; =UNK_021CCD20 - mov r2, #0x0 - ldr r0, _020AD938 ; =UNK_021CCD1C - str r2, [r1, #0x10] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AD934: .word UNK_021CCD20 -_020AD938: .word UNK_021CCD1C - - .extern _SDK_AbiossolibVCT - - arm_func_start FUN_020AD93C -FUN_020AD93C: ; 0x020AD93C - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, _020ADA78 ; =_SDK_AbiossolibVCT - bl OSi_ReferSymbol - cmp r4, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, _020ADA7C ; =UNK_021CCD1C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x1 - ldmneia sp!, {r4,pc} - 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} - 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} - ldr r0, _020ADA80 ; =UNK_021CCD20 - mov r1, #0x0 - mov r2, #0x18 - bl MI_CpuFill8 - ldr r2, [r4, #0x18] - ldr r1, _020ADA80 ; =UNK_021CCD20 - 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} - strb r2, [r1, #0x0] - ldr r0, [r4, #0x10] - ldr r1, [r4, #0x14] - bl FUN_020ACE30 - cmp r0, #0x0 - bne _020ADA34 - bl FUN_020ACE10 - mov r0, #0x0 - ldmia sp!, {r4,pc} -_020ADA34: - mov r0, r4 - bl FUN_020AC97C - cmp r0, #0x0 - bne _020ADA50 - bl FUN_020ACE10 - mov r0, #0x0 - ldmia sp!, {r4,pc} -_020ADA50: - bl FUN_020AAF58 - cmp r0, #0x0 - ldrne r1, _020ADA7C ; =UNK_021CCD1C - movne r0, #0x1 - strne r0, [r1, #0x0] - ldmneia sp!, {r4,pc} - bl FUN_020AC964 - bl FUN_020ACE10 - mov r0, #0x0 - ldmia sp!, {r4,pc} - .balign 4 -_020ADA78: .word _SDK_AbiossolibVCT -_020ADA7C: .word UNK_021CCD1C -_020ADA80: .word UNK_021CCD20 - - ; unknown - - 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 ; =UNK_021CCD38 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020ADD14 - ldr r0, _020ADD2C ; =UNK_021CCD3C - mov r1, #0x4 - bl FUN_020ADC74 - ldr r0, _020ADD28 ; =UNK_021CCD38 - 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 UNK_021CCD38 -_020ADD2C: .word UNK_021CCD3C - - arm_func_start FUN_020ADD30 -FUN_020ADD30: ; 0x020ADD30 - stmdb sp!, {r4,lr} - ldr r4, _020ADD54 ; =UNK_021CCD3C - mov r1, r0 - mov r0, r4 - bl FUN_020ADD58 - cmp r0, #0x0 - addne r4, r0, #0xc - mov r0, r4 - ldmia sp!, {r4,pc} - .balign 4 -_020ADD54: .word UNK_021CCD3C - - 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 - 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} - 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 - 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} - 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} - 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} - 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 - 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 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - 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} - 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} - 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} - 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 ; =UNK_020FF7CC - 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 UNK_020FF7CC - - 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 ; =UNK_021064E4 - 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 UNK_021064E4 - - arm_func_start FUN_020AE918 -FUN_020AE918: ; 0x020AE918 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x0 - ldr ip, _020AE960 ; =UNK_021064E4 - 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 UNK_021064E4 - - 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} - cmp r1, #0x0 - beq _020AEA5C - mov lr, r7, lsr #0x1 - mov r6, #0x0 - ldr r2, _020AEAE0 ; =UNK_02106514 - ldr r3, _020AEAE4 ; =UNK_021064FC - ldr ip, _020AEAE8 ; =UNK_021064C8 - 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 ; =UNK_021064D0 - 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} - 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 UNK_02106514 -_020AEAE4: .word UNK_021064FC -_020AEAE8: .word UNK_021064C8 -_020AEAEC: .word UNK_021064D0 -_020AEAF0: .word 0x0000FFFF - - arm_func_start FUN_020AEAF4 -FUN_020AEAF4: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _020AEB68 ; =UNK_021CCD48 - mov r6, #0x0 - ldrh r7, [r0, #0x0] - ldr r5, _020AEB6C ; =UNK_021064E4 - 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 UNK_021CCD48 -_020AEB6C: .word UNK_021064E4 - - 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 ; =UNK_021CCD48 - strh r5, [r0, #0x0] - bl FUN_020AEAF4 - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r3, _020AEC00 ; =FUN_020AE96C - ldr r1, _020AEC04 ; =UNK_021064B8 - ldr r2, _020AEC08 ; =FUN_020AE964 - ldr r0, _020AEC0C ; =UNK_021064BC - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AEBFC: .word UNK_021CCD48 -_020AEC00: .word FUN_020AE96C -_020AEC04: .word UNK_021064B8 -_020AEC08: .word FUN_020AE964 -_020AEC0C: .word UNK_021064BC - - arm_func_start FUN_020AEC10 -FUN_020AEC10: ; 0x020AEC10 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr lr, [sp, #0x18] - ldr r6, _020AEC58 ; =UNK_021064E4 - mov r12, #0x18 - mla r7, r0, r12, r6 - ldr r0, _020AEC5C ; =UNK_021064D0 - 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 UNK_021064E4 -_020AEC5C: .word UNK_021064D0 - - arm_func_start FUN_020AEC60 -FUN_020AEC60: - ldr r0, _020AEC78 ; =UNK_021CCD4C - mov r2, #0x0 - ldr r1, [r0, #0x8] - str r2, [r0, #0x0] - str r1, [r0, #0x4] - bx lr - .balign 4 -_020AEC78: .word UNK_021CCD4C - - arm_func_start FUN_020AEC7C -FUN_020AEC7C: ; 0x020AEC7C - ldr r2, [r0, #0x0] - ldr r1, _020AEC94 ; =UNK_021CCD4C - str r2, [r1, #0x0] - ldr r0, [r0, #0x4] - str r0, [r1, #0x4] - bx lr - .balign 4 -_020AEC94: .word UNK_021CCD4C - - arm_func_start FUN_020AEC98 -FUN_020AEC98: ; 0x020AEC98 - ldr r1, _020AECB0 ; =UNK_021CCD4C - ldr r2, [r1, #0x0] - str r2, [r0, #0x0] - ldr r1, [r1, #0x4] - str r1, [r0, #0x4] - bx lr - .balign 4 -_020AECB0: .word UNK_021CCD4C - - 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} - cmp r2, #0x1 - bne _020AED64 - ldr r2, _020AEDEC ; =UNK_021CCD4C - 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 ; =UNK_021CCD4C - 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 ; =UNK_021CCD4C - 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 ; =UNK_021CCD4C - 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 ; =UNK_021CCD4C - 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 ; =UNK_021CCD4C - 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 UNK_021CCD4C -_020AEDF0: .word 0x0000FFFF - - arm_func_start FUN_020AEDF4 -FUN_020AEDF4: ; 0x020AEDF4 - stmdb sp!, {r4,lr} - ldr r2, _020AEE2C ; =UNK_021CCD4C - mov r4, r1 - str r0, [r2, #0x8] - bl FUN_020AEC60 - cmp r4, #0x0 - ldmeqia sp!, {r4,pc} - ldr r3, _020AEE30 ; =FUN_020AECBC - ldr r1, _020AEE34 ; =UNK_021064C0 - ldr r2, _020AEE38 ; =FUN_020AECB4 - ldr r0, _020AEE3C ; =UNK_021064C4 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020AEE2C: .word UNK_021CCD4C -_020AEE30: .word FUN_020AECBC -_020AEE34: .word UNK_021064C0 -_020AEE38: .word FUN_020AECB4 -_020AEE3C: .word UNK_021064C4 - - arm_func_start FUN_020AEE40 -FUN_020AEE40: ; 0x020AEE40 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r5, _020AEEB4 ; =UNK_021CCD58 - mov r9, r0 - mov r0, r5 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl FUN_020AF2F4 - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r9,pc} - 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 UNK_021CCD58 - - arm_func_start FUN_020AEEB8 -FUN_020AEEB8: ; 0x020AEEB8 - stmdb sp!, {r4-r6,lr} - ldr r6, _020AEF18 ; =UNK_021CCD58 - mov r0, r6 - bl FUN_020AEF88 - mov r5, r0 - mov r0, r6 - bl FUN_020AEF3C - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - 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 - cmp r0, #0x0 - bne _020AEEE0 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020AEF18: .word UNK_021CCD58 - - arm_func_start FUN_020AEF1C -FUN_020AEF1C: ; 0x020AEF1C - ldr r2, _020AEF34 ; =UNK_021CCD58 - ldr ip, _020AEF38 ; =FUN_020AEFD4 - str r0, [r2, #0x0] - mov r0, r2 - str r1, [r2, #0x4] - bx r12 - .balign 4 -_020AEF34: .word UNK_021CCD58 -_020AEF38: .word FUN_020AEFD4 - - arm_func_start FUN_020AEF3C -FUN_020AEF3C: - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020AF2E0 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - 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 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - 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 ; =UNK_020FF7D4 - 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 UNK_020FF7D4 diff --git a/arm9/asm/unk_020AF030.s b/arm9/asm/unk_020ADA84.s index ffbbdd7c..db2eaa4b 100644 --- a/arm9/asm/unk_020AF030.s +++ b/arm9/asm/unk_020ADA84.s @@ -1,15 +1,55 @@ .include "asm/macros.inc" .include "global.inc" - .extern GXi_DmaId .extern UNK_02103BAC - .extern UNK_021064B8 - .extern UNK_021064BC - .extern UNK_021064C0 - .extern UNK_021064C4 + .extern GXi_DmaId .section .rodata + .global UNK_020FF7CC +UNK_020FF7CC: ; 0x020FF7CC + .word FUN_020AE894 + .word FUN_020AE884 + + .global UNK_020FF7D4 +UNK_020FF7D4: ; 0x020FF7D4 + .word FUN_020AF2B4 + .word FUN_020AF288 + .word FUN_020AF25C + .word FUN_020AF230 + .word GX_LoadBG0Char_2 + .word GX_LoadBG1Char_2 + .word GX_LoadBG2Char_2 + .word GX_LoadBG3Char_2 + .word GX_LoadBG0Scr_2 + .word GX_LoadBG1Scr_2 + .word GX_LoadBG2Scr_2 + .word GX_LoadBG3Scr_2 + .word GX_LoadBG2Scr_3 + .word GX_LoadBG3Scr_3 + .word GX_LoadOBJPltt_2 + .word GX_LoadBGPltt_2 + .word FUN_020AF174 + .word FUN_020AF148 + .word GX_LoadOAM_2 + .word GX_LoadOBJ_2 + .word GXS_LoadBG0Char_2 + .word GXS_LoadBG1Char_2 + .word GXS_LoadBG2Char_2 + .word GXS_LoadBG3Char_2 + .word GXS_LoadBG0Scr_2 + .word GXS_LoadBG1Scr_2 + .word GXS_LoadBG2Scr_2 + .word GXS_LoadBG3Scr_2 + .word GXS_LoadBG2Scr_3 + .word GXS_LoadBG3Scr_3 + .word GXS_LoadOBJPltt_2 + .word GXS_LoadBGPltt_2 + .word FUN_020AF074 + .word FUN_020AF048 + .word GXS_LoadOAM_2 + .word GXS_LoadOBJ_2 + .global UNK_020FF864 UNK_020FF864: ; 0x020FF864 .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 @@ -1138,6 +1178,60 @@ UNK_020FFA38: ; 0x020FFA38 .section .data + .global UNK_021064B8 +UNK_021064B8: ; 0x021064B8 + .word FUN_020AE8B4 + + .global UNK_021064BC +UNK_021064BC: ; 0x021064BC + .word FUN_020AE8AC + + .global UNK_021064C0 +UNK_021064C0: ; 0x021064C0 + .word FUN_020AE8C4 + + .global UNK_021064C4 +UNK_021064C4: ; 0x021064C4 + .word FUN_020AE8BC + + .global UNK_021064C8 +UNK_021064C8: ; 0x021064C8 + .word UNK_021064E4 + .word UNK_0210652C + + .global UNK_021064D0 +UNK_021064D0: ; 0x021064D0 + .word UNK_02106544 + .word UNK_0210652C + .word UNK_021064E4 + .word UNK_02106514 + .word UNK_021064FC + + .global UNK_021064E4 +UNK_021064E4: ; 0x021064E4 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 + + .global UNK_021064FC +UNK_021064FC: ; 0x021064FC + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00 + + .global UNK_02106514 +UNK_02106514: ; 0x02106514 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00 + + .global UNK_0210652C +UNK_0210652C: ; 0x0210652C + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00 + + .global UNK_02106544 +UNK_02106544: ; 0x02106544 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00 + .global UNK_0210655C UNK_0210655C: ; 0x0210655C .word FUN_020B1088 @@ -1372,6 +1466,26 @@ UNK_021067F0: ; 0x021067F0 .section .bss + .global UNK_021CCD38 +UNK_021CCD38: ; 0x021CCD38 + .space 0x4 + + .global UNK_021CCD3C +UNK_021CCD3C: ; 0x021CCD3C + .space 0xc + + .global UNK_021CCD48 +UNK_021CCD48: ; 0x021CCD48 + .space 0x4 + + .global UNK_021CCD4C +UNK_021CCD4C: ; 0x021CCD4C + .space 0xc + + .global UNK_021CCD58 +UNK_021CCD58: ; 0x021CCD58 + .space 0x14 + .global UNK_021CCD6C UNK_021CCD6C: ; 0x021CCD6C .space 0x4 @@ -1770,6 +1884,1694 @@ UNK_021D2DFC: ; 0x021D2DFC .text + 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 ; =UNK_021CCD38 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020ADD14 + ldr r0, _020ADD2C ; =UNK_021CCD3C + mov r1, #0x4 + bl FUN_020ADC74 + ldr r0, _020ADD28 ; =UNK_021CCD38 + 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 UNK_021CCD38 +_020ADD2C: .word UNK_021CCD3C + + arm_func_start FUN_020ADD30 +FUN_020ADD30: ; 0x020ADD30 + stmdb sp!, {r4,lr} + ldr r4, _020ADD54 ; =UNK_021CCD3C + mov r1, r0 + mov r0, r4 + bl FUN_020ADD58 + cmp r0, #0x0 + addne r4, r0, #0xc + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020ADD54: .word UNK_021CCD3C + + 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 + 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} + 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 + 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} + 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} + 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} + 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 + 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 + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + 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} + 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} + 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} + 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 ; =UNK_020FF7CC + 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 UNK_020FF7CC + + 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 ; =UNK_021064E4 + 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 UNK_021064E4 + + arm_func_start FUN_020AE918 +FUN_020AE918: ; 0x020AE918 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x0 + ldr ip, _020AE960 ; =UNK_021064E4 + 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 UNK_021064E4 + + 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} + cmp r1, #0x0 + beq _020AEA5C + mov lr, r7, lsr #0x1 + mov r6, #0x0 + ldr r2, _020AEAE0 ; =UNK_02106514 + ldr r3, _020AEAE4 ; =UNK_021064FC + ldr ip, _020AEAE8 ; =UNK_021064C8 + 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 ; =UNK_021064D0 + 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} + 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 UNK_02106514 +_020AEAE4: .word UNK_021064FC +_020AEAE8: .word UNK_021064C8 +_020AEAEC: .word UNK_021064D0 +_020AEAF0: .word 0x0000FFFF + + arm_func_start FUN_020AEAF4 +FUN_020AEAF4: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020AEB68 ; =UNK_021CCD48 + mov r6, #0x0 + ldrh r7, [r0, #0x0] + ldr r5, _020AEB6C ; =UNK_021064E4 + 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 UNK_021CCD48 +_020AEB6C: .word UNK_021064E4 + + 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 ; =UNK_021CCD48 + strh r5, [r0, #0x0] + bl FUN_020AEAF4 + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r3, _020AEC00 ; =FUN_020AE96C + ldr r1, _020AEC04 ; =UNK_021064B8 + ldr r2, _020AEC08 ; =FUN_020AE964 + ldr r0, _020AEC0C ; =UNK_021064BC + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AEBFC: .word UNK_021CCD48 +_020AEC00: .word FUN_020AE96C +_020AEC04: .word UNK_021064B8 +_020AEC08: .word FUN_020AE964 +_020AEC0C: .word UNK_021064BC + + arm_func_start FUN_020AEC10 +FUN_020AEC10: ; 0x020AEC10 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr lr, [sp, #0x18] + ldr r6, _020AEC58 ; =UNK_021064E4 + mov r12, #0x18 + mla r7, r0, r12, r6 + ldr r0, _020AEC5C ; =UNK_021064D0 + 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 UNK_021064E4 +_020AEC5C: .word UNK_021064D0 + + arm_func_start FUN_020AEC60 +FUN_020AEC60: + ldr r0, _020AEC78 ; =UNK_021CCD4C + mov r2, #0x0 + ldr r1, [r0, #0x8] + str r2, [r0, #0x0] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AEC78: .word UNK_021CCD4C + + arm_func_start FUN_020AEC7C +FUN_020AEC7C: ; 0x020AEC7C + ldr r2, [r0, #0x0] + ldr r1, _020AEC94 ; =UNK_021CCD4C + str r2, [r1, #0x0] + ldr r0, [r0, #0x4] + str r0, [r1, #0x4] + bx lr + .balign 4 +_020AEC94: .word UNK_021CCD4C + + arm_func_start FUN_020AEC98 +FUN_020AEC98: ; 0x020AEC98 + ldr r1, _020AECB0 ; =UNK_021CCD4C + ldr r2, [r1, #0x0] + str r2, [r0, #0x0] + ldr r1, [r1, #0x4] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AECB0: .word UNK_021CCD4C + + 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} + cmp r2, #0x1 + bne _020AED64 + ldr r2, _020AEDEC ; =UNK_021CCD4C + 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 ; =UNK_021CCD4C + 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 ; =UNK_021CCD4C + 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 ; =UNK_021CCD4C + 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 ; =UNK_021CCD4C + 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 ; =UNK_021CCD4C + 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 UNK_021CCD4C +_020AEDF0: .word 0x0000FFFF + + arm_func_start FUN_020AEDF4 +FUN_020AEDF4: ; 0x020AEDF4 + stmdb sp!, {r4,lr} + ldr r2, _020AEE2C ; =UNK_021CCD4C + mov r4, r1 + str r0, [r2, #0x8] + bl FUN_020AEC60 + cmp r4, #0x0 + ldmeqia sp!, {r4,pc} + ldr r3, _020AEE30 ; =FUN_020AECBC + ldr r1, _020AEE34 ; =UNK_021064C0 + ldr r2, _020AEE38 ; =FUN_020AECB4 + ldr r0, _020AEE3C ; =UNK_021064C4 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AEE2C: .word UNK_021CCD4C +_020AEE30: .word FUN_020AECBC +_020AEE34: .word UNK_021064C0 +_020AEE38: .word FUN_020AECB4 +_020AEE3C: .word UNK_021064C4 + + arm_func_start FUN_020AEE40 +FUN_020AEE40: ; 0x020AEE40 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020AEEB4 ; =UNK_021CCD58 + mov r9, r0 + mov r0, r5 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl FUN_020AF2F4 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} + 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 UNK_021CCD58 + + arm_func_start FUN_020AEEB8 +FUN_020AEEB8: ; 0x020AEEB8 + stmdb sp!, {r4-r6,lr} + ldr r6, _020AEF18 ; =UNK_021CCD58 + mov r0, r6 + bl FUN_020AEF88 + mov r5, r0 + mov r0, r6 + bl FUN_020AEF3C + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + 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 + cmp r0, #0x0 + bne _020AEEE0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AEF18: .word UNK_021CCD58 + + arm_func_start FUN_020AEF1C +FUN_020AEF1C: ; 0x020AEF1C + ldr r2, _020AEF34 ; =UNK_021CCD58 + ldr ip, _020AEF38 ; =FUN_020AEFD4 + str r0, [r2, #0x0] + mov r0, r2 + str r1, [r2, #0x4] + bx r12 + .balign 4 +_020AEF34: .word UNK_021CCD58 +_020AEF38: .word FUN_020AEFD4 + + arm_func_start FUN_020AEF3C +FUN_020AEF3C: + stmdb sp!, {r4,lr} + mov r4, r0 + bl FUN_020AF2E0 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + 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 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + 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 ; =UNK_020FF7D4 + 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 UNK_020FF7D4 + arm_func_start GXS_LoadOBJ_2 GXS_LoadOBJ_2: ldr ip, _020AF038 ; =GXS_LoadOBJ diff --git a/arm9/global.inc b/arm9/global.inc index 08b51684..4f495f81 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -21,6 +21,78 @@ .extern CARDi_SetTask
.extern CARDi_TaskThread
.extern CARDi_WaitAsync
+.extern CPSDnsIp
+.extern CPSGatewayIp
+.extern CPSMyIp
+.extern CPSNetMask
+.extern CPS_CalmDown
+.extern CPS_Cleanup
+.extern CPS_Resolve
+.extern CPS_SetRootCa
+.extern CPS_SetScavengerCallback
+.extern CPS_SetSsl
+.extern CPS_SetSslHandshakePriority
+.extern CPS_SetThreadPriority
+.extern CPS_SetUdpCallback
+.extern CPS_SocConsume
+.extern CPS_SocDatagramMode
+.extern CPS_SocDup
+.extern CPS_SocGetChar
+.extern CPS_SocGetEport
+.extern CPS_SocGetLength
+.extern CPS_SocPingMode
+.extern CPS_SocRead
+.extern CPS_SocRegister
+.extern CPS_SocRelease
+.extern CPS_SocUnRegister
+.extern CPS_SocUse
+.extern CPS_SocWho
+.extern CPS_SocWrite
+.extern CPS_SslAddRandomSeed
+.extern CPS_Startup
+.extern CPS_TcpClose
+.extern CPS_TcpConnect
+.extern CPS_TcpListen
+.extern CPS_TcpShutdown
+.extern CPSiAlloc
+.extern CPSiFree
+.extern CPSiRand32ctx
+.extern CPSi_RecvCallbackFunc
+.extern CPSi_SocConsumeRaw
+.extern CPSi_SslCleanup
+.extern CPSi_SslClose
+.extern CPSi_SslConnect
+.extern CPSi_SslConsume
+.extern CPSi_SslGetLength
+.extern CPSi_SslListen
+.extern CPSi_SslPeriodical
+.extern CPSi_SslRead
+.extern CPSi_SslShutdown
+.extern CPSi_SslWrite2
+.extern CPSi_TcpConnectRaw
+.extern CPSi_TcpListenRaw
+.extern CPSi_TcpReadRaw
+.extern CPSi_TcpShutdownRaw
+.extern CPSi_TcpWrite2Raw
+.extern CPSi_big_add
+.extern CPSi_big_div
+.extern CPSi_big_from_char
+.extern CPSi_big_montpower
+.extern CPSi_big_mult
+.extern CPSi_big_negate
+.extern CPSi_big_power
+.extern CPSi_big_sign
+.extern CPSi_big_sub
+.extern CPSi_char_from_big
+.extern CPSi_md5_calc
+.extern CPSi_md5_init
+.extern CPSi_md5_result
+.extern CPSi_rc4_crypt
+.extern CPSi_rc4_init
+.extern CPSi_sha1_calc
+.extern CPSi_sha1_init
+.extern CPSi_sha1_result
+.extern CPSi_sha1_result_prng
.extern CP_RestoreContext
.extern CP_SaveContext
.extern CTRDG_CpuCopy16
@@ -110,7 +182,6 @@ .extern FSi_SendCommand
.extern FSi_TranslateCommand
.extern FUNRTC_Init
-.extern SVC_CpuSet
.extern FUN_02000DF4
.extern FUN_02000E7C
.extern FUN_02000EE8
@@ -196,7 +267,6 @@ .extern FUN_02003B98
.extern FUN_02003C10
.extern FUN_02003CE8
-.extern GetSoundDataPointer
.extern FUN_02003D38
.extern FUN_02003F3C
.extern FUN_02003F64
@@ -4305,6 +4375,11 @@ .extern FUN_0205C380
.extern FUN_0205C390
.extern FUN_0205C3AC
+.extern FUN_0205C3B0
+.extern FUN_0205C3D0
+.extern FUN_0205C490
+.extern FUN_0205C4A8
+.extern FUN_0205C4D8
.extern FUN_0205C598
.extern FUN_0205C888
.extern FUN_0205C8B4
@@ -5377,119 +5452,87 @@ .extern FUN_0208A334
.extern FUN_0208A338
.extern FUN_0208A9B8
+.extern FUN_0208AC14
+.extern FUN_0208AC58
.extern FUN_0208ACEC
.extern FUN_0208AD80
+.extern FUN_0208AE48
.extern FUN_0208AF80
.extern FUN_0208AF94
.extern FUN_0208AFA8
.extern FUN_0208B05C
.extern FUN_0208B128
.extern FUN_0208B4A0
+.extern FUN_020905D0
+.extern FUN_02090664
+.extern FUN_02090780
+.extern FUN_02090858
+.extern FUN_020908DC
+.extern FUN_020909A4
.extern FUN_02090CC8
.extern FUN_02090DB8
.extern FUN_020910EC
.extern FUN_0209521C
.extern FUN_020952AC
-.extern FUN_02095324
-.extern FUN_02095330
-.extern FUN_02095AE0
-.extern FUN_02095B0C
-.extern FUN_02095BB0
-.extern FUN_02095BE0
-.extern FUN_02095CDC
-.extern FUN_02095D68
-.extern FUN_02095EC8
-.extern FUN_02095FA8
-.extern FUN_02096190
+.extern DWCi_BACKUPlGetWifi
+.extern DWCi_BACKUPlConvWifiInfo
+.extern DWC_BACKUPlCheckAddress
+.extern DWC_BACKUPlCheckIp
+.extern DWCi_BACKUPlConvMaskAddr
+.extern DWCi_BACKUPlConvMaskCidr
+.extern DWCi_BACKUPlWritePage
+.extern DWCi_BACKUPlRead
+.extern DWCi_BM_GetWiFiInfo
+.extern DWCi_BM_GetApInfo
+.extern DWC_BM_Init
.extern FUN_02096570
.extern FUN_02096710
-.extern FUN_02096760
-.extern FUN_020967A4
-.extern FUN_02096B14
-.extern FUN_02096B78
-.extern FUN_02096C78
-.extern FUN_02096C90
-.extern FUN_02096CCC
-.extern FUN_02096D2C
-.extern FUN_02096D68
-.extern FUN_02096DA0
-.extern FUN_02096E24
-.extern FUN_02096EB4
-.extern FUN_02096EC0
-.extern FUN_02096F18
-.extern FUN_02096F80
-.extern FUN_02096FB0
-.extern FUN_02097000
-.extern FUN_0209700C
-.extern FUN_0209702C
-.extern FUN_0209703C
-.extern FUN_0209705C
-.extern FUN_020970CC
-.extern FUN_02097218
-.extern FUN_020973B4
-.extern FUN_02097414
-.extern FUN_02097484
-.extern FUN_02097490
-.extern FUN_02097508
-.extern FUN_02099A94
-.extern FUN_02099C78
-.extern FUN_02099D88
-.extern FUN_0209A0AC
-.extern FUN_0209A174
-.extern FUN_0209A224
-.extern FUN_0209A27C
-.extern FUN_0209A2C0
-.extern FUN_0209A4B4
-.extern FUN_0209A504
-.extern FUN_0209A588
-.extern FUN_0209A594
-.extern FUN_0209A60C
-.extern FUN_0209A650
-.extern FUN_0209A6EC
-.extern FUN_0209A7D0
-.extern FUN_0209A858
-.extern FUN_0209A880
-.extern FUN_0209A91C
-.extern FUN_0209A944
-.extern FUN_0209A9A4
-.extern FUN_0209A9D0
-.extern FUN_0209AAD0
-.extern FUN_0209BF4C
-.extern FUN_0209BF9C
-.extern FUN_0209C030
-.extern FUN_0209C52C
-.extern FUN_0209C638
-.extern FUN_0209C7AC
-.extern FUN_0209C840
-.extern FUN_0209C934
-.extern FUN_0209CB24
-.extern FUN_0209CB44
-.extern FUN_0209CB78
-.extern FUN_0209CC10
-.extern FUN_0209CC28
-.extern FUN_020A02EC
-.extern FUN_020A136C
-.extern FUN_020A3688
-.extern FUN_020A374C
-.extern FUN_020A71F8
-.extern FUN_020A722C
-.extern FUN_020A7488
-.extern FUN_020A75C0
-.extern FUN_020A7820
-.extern FUN_020A7A90
-.extern FUN_020A7AC8
-.extern FUN_020A7BD4
-.extern FUN_020A7E0C
-.extern FUN_020A7E80
-.extern FUN_020A8358
-.extern FUN_020A83D0
-.extern FUN_020A846C
-.extern FUN_020A84D8
-.extern FUN_020A87E0
-.extern FUN_020A8850
-.extern FUN_020A8BA4
-.extern FUN_020A8BB0
-.extern FUN_020A8BBC
+.extern DWCi_AUTH_MakeWiFiID
+.extern DWCi_AUTH_GetNewWiFiInfo
+.extern DWC_Init
+.extern DWC_IsEqualFriendData
+.extern DWC_LoginIdToUserName
+.extern DWC_SetGsProfileId
+.extern DWC_CreateExchangeToken
+.extern DWC_CreateFriendKeyToken
+.extern DWC_CreateFriendKey
+.extern DWC_GetGsProfileId
+.extern DWC_GetFriendKey
+.extern DWC_CheckDirtyFlag
+.extern DWCi_Acc_SetLoginIdToUserData
+.extern DWC_CheckValidConsole
+.extern DWC_CheckHasProfile
+.extern DWC_CheckUserData
+.extern DWCi_Acc_IsValidFriendData
+.extern DWC_IsValidFriendData
+.extern DWCi_Acc_IsAuthentic
+.extern DWCi_Acc_IsValidLoginId
+.extern DWCi_Acc_CheckConsoleUserId
+.extern DWCi_Acc_CreateTempLoginId
+.extern DWCi_Acc_LoginIdToUserName
+.extern DWC_CheckFriendKey
+.extern DWCi_SetBuddyFriendData
+.extern DWC_GetFriendDataType
+.extern DWC_IsBuddyFriendData
+.extern DWCi_Acc_SetPlayerId
+.extern WCM_GetPhase
+.extern WCM_TerminateAsync
+.extern WCM_DisconnectAsync
+.extern WCM_ConnectAsync
+.extern WCM_EndSearchAsync
+.extern WCM_SearchAsync
+.extern WCM_CleanupAsync
+.extern WCM_StartupAsync
+.extern WCM_Finish
+.extern WCM_Init
+.extern WCM_PointApList
+.extern WCM_LockApList
+.extern WCM_CountApList
+.extern WCM_ClearApList
+.extern WCM_GetApEssid
+.extern MD5Final
+.extern MD5Update
+.extern MD5Init
.extern FUN_020AA760
.extern FUN_020AA770
.extern FUN_020AA7A0
@@ -5502,10 +5545,10 @@ .extern FUN_020ACC84
.extern FUN_020ACD54
.extern FUN_020AD144
-.extern FUN_020AD834
-.extern FUN_020AD8A8
-.extern FUN_020AD904
-.extern FUN_020AD93C
+.extern VCT_HandleData
+.extern VCT_Main
+.extern VCT_Cleanup
+.extern VCT_Init
.extern FUN_020ADA84
.extern FUN_020ADA98
.extern FUN_020ADAB0
@@ -5557,6 +5600,7 @@ .extern FUN_020B0250
.extern FUN_020B02C8
.extern FUN_020B0448
+.extern FUN_020B04FC
.extern FUN_020B0830
.extern FUN_020B0870
.extern FUN_020B0888
@@ -5901,6 +5945,7 @@ .extern GX_SetGraphicsMode
.extern GX_VBlankIntr
.extern GXx_SetMasterBrightness_
+.extern GetSoundDataPointer
.extern HandleLoadOverlay
.extern IC_InvalidateAll
.extern IC_InvalidateRange
@@ -6177,6 +6222,11 @@ .extern MOD05_021DAF78
.extern MOD05_021DAF98
.extern MOD05_021DB030
+.extern MOD05_021DB040
+.extern MOD05_021DB144
+.extern MOD05_021DB1D0
+.extern MOD05_021DB250
+.extern MOD05_021DB380
.extern MOD05_021DB44C
.extern MOD05_021DB4B0
.extern MOD05_021DB52C
@@ -6561,6 +6611,7 @@ .extern MOD06_0224C6F4
.extern MOD06_0224C700
.extern MOD06_0224C8C8
+.extern MOD06_0224C8E8
.extern MOD06_0224CA58
.extern MOD06_0224CA88
.extern MOD06_0224CB30
@@ -7188,9 +7239,9 @@ .extern OS_TryLockCard
.extern OS_TryLockCartridge
.extern OS_TryLockMutex
+.extern OS_UnLockCartridge
.extern OS_UnlockByWord
.extern OS_UnlockCard
-.extern OS_UnLockCartridge
.extern OS_UnlockCartridge
.extern OS_UnlockMutex
.extern OS_WaitIrq
@@ -7452,7 +7503,78 @@ .extern SNDi_LockMutex
.extern SNDi_SetAlarmHandler
.extern SNDi_UnlockMutex
+.extern SOCLSocketParamTCP
+.extern SOCLSocketParamUDPSend
+.extern SOCL_Accept
+.extern SOCL_Bind
+.extern SOCL_CalmDown
+.extern SOCL_Cleanup
+.extern SOCL_Close
+.extern SOCL_Connect
+.extern SOCL_CreateSocket
+.extern SOCL_EnableSsl
+.extern SOCL_GetHostID
+.extern SOCL_GetStatus
+.extern SOCL_InetAtoH
+.extern SOCL_IsClosed
+.extern SOCL_Listen
+.extern SOCL_Resolve
+.extern SOCL_SetResolver
+.extern SOCL_Shutdown
+.extern SOCL_SocketIsInTrash
+.extern SOCL_SocketIsInvalid
+.extern SOCL_Startup
+.extern SOCL_WriteTo
+.extern SOCLiCPSConfig
+.extern SOCLiConfigPtr
+.extern SOCLiDhcpState
+.extern SOCLiRequestedIP
+.extern SOCLiSocketList
+.extern SOCLiSocketListTrash
+.extern SOCLiUDPSendSocket
+.extern SOCLi_CleanupCommandPacketQueue
+.extern SOCLi_CommandPacketHandler
+.extern SOCLi_CreateCommandPacket
+.extern SOCLi_ExecCommandPacketInCtrlPipe
+.extern SOCLi_ExecCommandPacketInRecvPipe
+.extern SOCLi_ExecCommandPacketInSendPipe
+.extern SOCLi_FreeCommandPacket
+.extern SOCLi_GetWriteBufferFreeSize
+.extern SOCLi_ReadFrom
+.extern SOCLi_RoundUp4
+.extern SOCLi_SendCommandPacket
+.extern SOCLi_SendCommandPacketToCtrlPipe
+.extern SOCLi_SocketRegister
+.extern SOCLi_SocketRegisterTrash
+.extern SOCLi_SocketUnregister
+.extern SOCLi_SocketUnregisterTrash
+.extern SOCLi_StartupCommandPacketQueue
+.extern SOCLi_TrashSocket
+.extern SOCLi_UdpRecvCallback
+.extern SOC_Accept
+.extern SOC_Bind
+.extern SOC_Cleanup
+.extern SOC_Close
+.extern SOC_Connect
+.extern SOC_Fcntl
+.extern SOC_GetHostByAddr
+.extern SOC_GetHostID
+.extern SOC_GetResolver
+.extern SOC_GetSockName
+.extern SOC_InetAtoN
+.extern SOC_InetNtoA
+.extern SOC_Listen
+.extern SOC_Poll
+.extern SOC_Read
+.extern SOC_RecvFrom
+.extern SOC_Send
+.extern SOC_SendTo
+.extern SOC_Shutdown
+.extern SOC_Socket
+.extern SOC_Startup
+.extern SOC_U32to4U8
.extern STD_CopyLString
+.extern SVC_CpuSet
.extern SVC_GetCRC16
.extern SVC_Sqrt
.extern SVC_WaitByLoop
@@ -7471,7 +7593,6 @@ .extern StringLength
.extern StringNotEqual
.extern StringNotEqualN
-.extern THUNK_FUN_02099BC8
.extern TP_CheckError
.extern TP_GetCalibratedPoint
.extern TP_GetLatestIndexInAuto
@@ -7484,6 +7605,11 @@ .extern TP_SetCalibrateParam
.extern TP_WaitBusy
.extern TP_WaitRawResult
+.extern UNK05_021F64C8
+.extern UNK05_021F9080
+.extern UNK05_021F9194
+.extern UNK05_021F9494
+.extern UNK63_021DBAB8
.extern UNK_020FB6F8
.extern UNK_020FB704
.extern UNK_020FB710
@@ -7491,6 +7617,37 @@ .extern UNK_020FB740
.extern UNK_020FB764
.extern UNK_020FD144
+.extern UNK_021C8ECC
+.extern UNK_021C8ED0
+.extern UNK_021C8ED4
+.extern UNK_021C8ED8
+.extern UNK_021C8EDC
+.extern UNK_021C8EE0
+.extern UNK_021C8EE4
+.extern UNK_021C8EE8
+.extern UNK_021C8EEC
+.extern UNK_021C8EF0
+.extern UNK_021C8EF8
+.extern UNK_021C8EFC
+.extern UNK_021C8F00
+.extern UNK_021C8F04
+.extern UNK_021C8F08
+.extern UNK_021C8F0C
+.extern UNK_021C8F10
+.extern UNK_021C8F14
+.extern UNK_021C8F1C
+.extern UNK_021C8F5E
+.extern UNK_021C8F78
+.extern UNK_021C8F82
+.extern UNK_021C8FD8
+.extern UNK_021C903C
+.extern UNK_021C90A0
+.extern UNK_021C9160
+.extern UNK_021C9220
+.extern UNK_021C924A
+.extern UNK_021C93A0
+.extern UNK_021C9520
+.extern UNK_021C9EE0
.extern Unk_0210683C
.extern Unk_02106840
.extern Unk_02106900
@@ -7508,6 +7665,9 @@ .extern VEC_MultAdd
.extern VEC_Normalize
.extern VEC_Subtract
+.extern WCM_GetApMacAddress
+.extern WCM_SendDCFData
+.extern WCM_SetRecvDCFCallback
.extern WM_Disable
.extern WM_Disconnect
.extern WM_Enable
@@ -7677,6 +7837,7 @@ .extern memmove
.extern memset
.extern nan
+.extern pool_initialized
.extern pow
.extern printf
.extern qsort
@@ -7713,10 +7874,8 @@ .extern sys_writec
.extern tempName_NNS_FndAllocFromExpHeapEx
.extern tempName_NNS_FndCreateExpHeapEx
-.extern thunk_FUN_02096e4c
-.extern thunk_FUN_02097190
-.extern thunk_FUN_020995dc
-.extern thunk_FUN_0209996c
+.extern DWC_ClearDirtyFlag
+.extern DWC_CreateUserData
.extern thunk_FUN_020adc8c
.extern thunk_FUN_020adc8c_2
.extern thunk_FUN_020ae84c
@@ -7730,29 +7889,18 @@ .extern wcstombs
.extern wctomb
.extern wmemcpy
-.extern FUN_0208AC14
-.extern FUN_0208AC58
-.extern FUN_0208AE48
-.extern FUN_020905D0
-.extern FUN_02090664
-.extern FUN_02090780
-.extern FUN_02090858
-.extern FUN_020908DC
-.extern FUN_020909A4
-.extern FUN_020B04FC
-.extern UNK63_021DBAB8
-.extern UNK05_021F64C8
-.extern MOD06_0224C8E8
-.extern MOD05_021DB144
-.extern MOD05_021DB1D0
-.extern MOD05_021DB250
-.extern MOD05_021DB380
-.extern MOD05_021DB040
-.extern UNK05_021F9080
-.extern UNK05_021F9194
-.extern UNK05_021F9494
-.extern FUN_0205C3B0
-.extern FUN_0205C3D0
-.extern FUN_0205C490
-.extern FUN_0205C4A8
-.extern FUN_0205C4D8
+.extern WCMi_GetSystemWork
+.extern WCM_CompareBssID
+.extern WCMi_ResetKeepAliveAlarm
+.extern WCMi_CpsifSendNullPacket
+.extern WCMi_InitCpsif
+.extern WCMi_EntryApList
+.extern WCMi_CpsifRecvCallback
+.extern WCMi_ShelterRssi
+.extern DWC_Auth_GetId
+.extern DWC_BACKUPlCheckSsid
+.extern DWCi_BACKUPlInit
+.extern DWCi_BACKUPlSetWiFi
+.extern DWCi_BACKUPlWriteAll
+.extern DWCi_BM_SetWiFiInfo
+.extern DWC_Auth_CheckWiFiIDNeedCreate
diff --git a/arm9/lib/include/nitro.h b/arm9/lib/include/nitro.h index deace7ef..9eeab198 100644 --- a/arm9/lib/include/nitro.h +++ b/arm9/lib/include/nitro.h @@ -6,6 +6,8 @@ extern "C" { #endif // Include all nitro files +#include "sections.h" +#include "misc.h" #include "types.h" #include "consts.h" #include "OS_init.h" diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s index e76d9801..98bffb4c 100644 --- a/arm9/modules/04/asm/arm_04.s +++ b/arm9/modules/04/asm/arm_04.s @@ -457,7 +457,7 @@ _021D9378: _021D93AC: add r0, r5, #0x1f bic r0, r0, #0x1f - bl FUN_02096760 + bl DWCi_AUTH_MakeWiFiID ldr r0, _021D940C ; =0x0220BF98 mov r1, r5 mov r2, #0 @@ -718,7 +718,7 @@ MOD04_021D96EC: ; 0x021D96EC cmp r4, #1 bne _021D9758 ldr r0, _021D97EC ; =0x0221046C - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo _021D9758: ldr r0, _021D97E8 ; =0x02210468 ldr r2, _021D97F0 ; =0x000011CC @@ -1411,7 +1411,7 @@ _021DA104: bl OS_SNPrintf bl OS_DisableInterrupts mov sb, r0 - bl FUN_020A8850 + bl WCM_GetApMacAddress mov r8, r0 mov r1, #6 bl DC_InvalidateRange @@ -1442,7 +1442,7 @@ _021DA180: mov r1, #0xe bl OS_SNPrintf add r0, sp, #0x14 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r5, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -1482,7 +1482,7 @@ MOD04_021DA238: ; 0x021DA238 sub sp, sp, #0x18 mov r4, r0 add r0, sp, #0 - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo add r1, sp, #0 mov r0, r4 bl MOD04_021D9F78 @@ -2415,7 +2415,7 @@ MOD04_021DAF18: ; 0x021DAF18 streq r1, [r0, #0x20] addeq sp, sp, #0xc ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - bl FUN_0209CB44 + bl CPS_SocUse add r0, sl, #0x1000 ldr r0, [r0, #0x12c] cmp r0, #1 @@ -2432,23 +2432,23 @@ MOD04_021DAF18: ; 0x021DAF18 str r1, [r6, #0x800] mov r1, #0xb str r6, [r8, #0xc] - bl FUN_020A3688 + bl CPS_SetRootCa mov r0, #1 - bl FUN_020A02EC + bl CPS_SetSsl _021DAFC8: add r0, sl, #0x1100 ldrh r1, [r0, #0x30] mov r2, r4 mov r0, #0 - bl FUN_0209CB78 - bl FUN_0209C934 + bl CPS_SocPingMode + bl CPS_TcpConnect cmp r0, #0 beq _021DB004 add r0, sl, #0x1000 mov r1, #3 str r1, [r0, #0x20] - bl FUN_0209CB24 - bl FUN_0209CC10 + bl CPS_SocRelease + bl CPS_SocUnRegister add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} _021DB004: @@ -2458,14 +2458,14 @@ _021DB004: bl strlen mov r1, r0 mov r0, r4 - bl FUN_0209C030 + bl CPS_SocWrite cmp r0, #0 str r0, [sp, #8] addle r0, sl, #0x1000 movle r1, #5 strle r1, [r0, #0x20] ble _021DB20C - bl FUN_0209BF4C + bl CPS_SocGetChar mov r0, sl bl MOD04_021DB3B8 cmp r0, #0 @@ -2493,7 +2493,7 @@ _021DB088: moveq r1, #5 streq r1, [r0, #0x20] beq _021DB20C - bl FUN_0209BF9C + bl CPS_SocGetLength str r0, [sp, #8] cmp r0, #0 blt _021DB1E8 @@ -2503,7 +2503,7 @@ _021DB088: mov r6, r0 add r0, sp, #8 mov r8, r1 - bl FUN_0209C638 + bl CPS_SocRead cmp r0, #0 beq _021DB1E8 ldr r2, [r7, #8] @@ -2541,11 +2541,11 @@ _021DB150: ldr r0, [sp, #8] cmp r0, sb bls _021DB164 - bl FUN_0209C52C + bl CPS_SocConsume b _021DB1E8 _021DB164: mov r0, sb - bl FUN_0209C52C + bl CPS_SocConsume _021DB16C: add r0, sl, #0x1000 ldr r1, [r0, #0xa2c] @@ -2580,20 +2580,20 @@ _021DB188: str r1, [r0, #0x20] b _021DB20C _021DB1E8: - bl FUN_0209C840 - bl FUN_0209C7AC - bl FUN_0209CB24 - bl FUN_0209CC10 + bl CPS_TcpShutdown + bl CPS_TcpClose + bl CPS_SocRelease + bl CPS_SocUnRegister add r0, sl, #0x1000 mov r1, #8 str r1, [r0, #0x20] add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} _021DB20C: - bl FUN_0209C840 - bl FUN_0209C7AC - bl FUN_0209CB24 - bl FUN_0209CC10 + bl CPS_TcpShutdown + bl CPS_TcpClose + bl CPS_SocRelease + bl CPS_SocUnRegister add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} .align 2, 0 @@ -2704,7 +2704,7 @@ MOD04_021DB35C: ; 0x021DB35C ldr r2, [r1, #0x9cc] add r0, r4, r0 str r2, [r1, #0x180] - bl FUN_0209CC28 + bl CPS_SocRegister ldmia sp!, {r4, pc} .align 2, 0 _021DB3AC: .word 0x00001134 @@ -2725,7 +2725,7 @@ MOD04_021DB3B8: ; 0x021DB3B8 ldr r0, _021DB438 ; =0x000019D0 mov r1, #0x20 add r0, r4, r0 - bl FUN_020A136C + bl CPS_SslAddRandomSeed _021DB3EC: ldr r0, _021DB43C ; =0x00001BF4 add r0, r4, r0 @@ -3343,7 +3343,7 @@ _021DBCB4: ldr r0, [r4] bl MOD04_021DAE4C add r0, sp, #0x68 - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo ldr r2, [sp, #0x68] ldr r1, [sp, #0x6c] mov r0, #0 @@ -5451,7 +5451,7 @@ MOD04_021DD9DC: ; 0x021DD9DC str r0, [r4] bl OS_DisableInterrupts mov r6, r0 - bl FUN_020A8850 + bl WCM_GetApMacAddress mov r5, r0 mov r1, #6 bl DC_InvalidateRange @@ -5473,7 +5473,7 @@ _021DDA4C: cmp r0, #3 bge _021DDAB0 add r0, sp, #0 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r5, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -5686,7 +5686,7 @@ _021DDD28: cmp r0, #0 addeq sp, sp, #4 ldmeqia sp!, {pc} - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 addeq sp, sp, #4 ldmeqia sp!, {pc} @@ -5830,7 +5830,7 @@ MOD04_021DDEE0: ; 0x021DDEE0 str r6, [r1] bl MOD04_021DDE7C mov r0, r4 - bl FUN_020A374C + bl CPS_SetSslHandshakePriority ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DDF3C: .word 0x02210518 @@ -8747,7 +8747,7 @@ MOD04_021E0628: ; 0x021E0628 ldr r1, [r2, #0xc] add r2, sp, #8 add r0, r0, #4 - bl FUN_02097218 + bl DWCi_Acc_LoginIdToUserName ldr r1, _021E07D0 ; =0x00000705 add r2, sp, #8 mov r0, r5 @@ -8791,7 +8791,7 @@ _021E0704: ldr r1, [r2, #0xc] add r2, sp, #0x1d add r0, r0, #4 - bl FUN_02097218 + bl DWCi_Acc_LoginIdToUserName add r1, sp, #0x1d add r0, r4, #0x8e bl strcmp @@ -8802,13 +8802,13 @@ _021E0704: ldr r0, [r0] ldr r1, [r0, #0xc] add r0, r0, #0x3c - bl FUN_02097218 + bl DWCi_Acc_LoginIdToUserName ldr r0, _021E07CC ; =0x022106C8 ldr r2, [r4, #4] ldr r1, [r0] ldr r0, [r1, #0x1c] add r1, r1, #0x3c - bl FUN_02096EC0 + bl DWCi_Acc_SetLoginIdToUserData mov r0, r5 bl MOD04_021F0D54 ldr r0, _021E07CC ; =0x022106C8 @@ -8876,7 +8876,7 @@ MOD04_021E07E4: ; 0x021E07E4 str r2, [r1, #0x24] ldr r0, [r0] ldr r0, [r0, #0x1c] - bl FUN_0209702C + bl DWCi_Acc_IsAuthentic cmp r0, #0 beq _021E0898 ldr r0, _021E09DC ; =0x022106C8 @@ -9002,7 +9002,7 @@ MOD04_021E0A00: ; 0x021E0A00 str r5, [r2] str r4, [r1] ldr r0, [r0, #0x1c] - bl FUN_0209702C + bl DWCi_Acc_IsAuthentic cmp r0, #0 beq _021E0A68 ldr r0, _021E0BB8 ; =0x022106C8 @@ -9011,20 +9011,20 @@ MOD04_021E0A00: ; 0x021E0A00 add r2, r1, #0x248 ldr r1, [r0, #0x24] add r0, r0, #0x10 - bl FUN_02097218 + bl DWCi_Acc_LoginIdToUserName b _021E0B1C _021E0A68: ldr r0, _021E0BB8 ; =0x022106C8 ldr r0, [r0] add r0, r0, #0x3c - bl FUN_0209703C + bl DWCi_Acc_IsValidLoginId cmp r0, #0 bne _021E0AD0 ldr r0, _021E0BB8 ; =0x022106C8 ldr r0, [r0] ldr r0, [r0, #0x1c] add r0, r0, #4 - bl FUN_0209705C + bl DWCi_Acc_CheckConsoleUserId cmp r0, #0 beq _021E0ABC ldr r0, _021E0BB8 ; =0x022106C8 @@ -9039,7 +9039,7 @@ _021E0ABC: ldr r0, _021E0BB8 ; =0x022106C8 ldr r0, [r0] add r0, r0, #0x3c - bl FUN_020970CC + bl DWCi_Acc_CreateTempLoginId b _021E0B04 _021E0AD0: bl OS_GetTick @@ -9054,14 +9054,14 @@ _021E0AD0: ldr r3, [r3] adc r1, r4, #0 add r0, r3, #0x3c - bl FUN_02097508 + bl DWCi_Acc_SetPlayerId _021E0B04: ldr r0, _021E0BB8 ; =0x022106C8 ldr r2, [r0] ldr r1, [r2, #0xc] add r0, r2, #0x3c add r2, r2, #0x248 - bl FUN_02097218 + bl DWCi_Acc_LoginIdToUserName _021E0B1C: ldr r0, _021E0BB8 ; =0x022106C8 ldr r0, [r0] @@ -9534,7 +9534,7 @@ MOD04_021E110C: ; 0x021E110C _021E115C: ldr r0, [r2, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #1 bne _021E11C8 bl MOD04_021E0F00 @@ -9542,7 +9542,7 @@ _021E115C: add r2, sp, #8 ldr r1, [r1, #0x18] add r1, r1, r7 - bl FUN_02096C78 + bl DWC_LoginIdToUserName add r0, sp, #8 add r1, sl, #0x8e bl strcmp @@ -9552,31 +9552,31 @@ _021E115C: ldr r1, [sl, #4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02096C90 + bl DWC_SetGsProfileId ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097414 + bl DWCi_SetBuddyFriendData mov r8, r5 b _021E125C _021E11C8: ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #3 beq _021E11F8 ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #2 bne _021E125C _021E11F8: ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #1 streq fp, [sp] beq _021E125C @@ -9585,18 +9585,18 @@ _021E11F8: ldr r1, [r4] ldr r1, [r1, #0x18] add r1, r1, r7 - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r6, r0 bne _021E125C ldr r0, [r4] mov r1, r6 ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02096C90 + bl DWC_SetGsProfileId ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097414 + bl DWCi_SetBuddyFriendData ldr r8, [sp, #4] _021E125C: ldr r2, [r4] @@ -9650,7 +9650,7 @@ MOD04_021E12B8: ; 0x021E12B8 _021E1304: ldr r0, [r1, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #1 bne _021E136C bl MOD04_021E0F00 @@ -9658,7 +9658,7 @@ _021E1304: add r2, sp, #4 ldr r1, [r1, #0x18] add r1, r1, r7 - bl FUN_02096C78 + bl DWC_LoginIdToUserName ldr r1, [sp] add r0, sp, #4 bl strcmp @@ -9671,20 +9671,20 @@ _021E1304: ldr r1, [sb, #4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02096C90 + bl DWC_SetGsProfileId mov fp, r5 b _021E13CC _021E136C: ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #3 beq _021E139C ldr r0, [r4] ldr r0, [r0, #0x18] add r0, r0, r7 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #2 bne _021E13CC _021E139C: @@ -9693,7 +9693,7 @@ _021E139C: ldr r1, [r4] ldr r1, [r1, #0x18] add r1, r1, r7 - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r6, r0 bne _021E13CC mov r0, sl @@ -9742,7 +9742,7 @@ MOD04_021E1414: ; 0x021E1414 ldr r0, [r1] ldr r0, [r0, #0x18] add r0, r0, r6 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #0 beq _021E15FC ldr r7, _021E1670 ; =0x022106D0 @@ -9813,12 +9813,12 @@ _021E1548: ldr r1, [r1] ldr r0, [r0, #0x18] add r0, r0, r6 - bl FUN_02096C90 + bl DWC_SetGsProfileId ldr r0, _021E1670 ; =0x022106D0 ldr r0, [r0] ldr r0, [r0, #0x18] add r0, r0, r6 - bl FUN_02097414 + bl DWCi_SetBuddyFriendData mov r0, r8 bl MOD04_021E1DA4 ldr r0, _021E1670 ; =0x022106D0 @@ -9871,7 +9871,7 @@ _021E1618: ldr r1, [r1, #0x18] mov r0, #0xc mla r0, r8, r0, r1 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} @@ -9951,7 +9951,7 @@ _021E1720: _021E172C: bl MOD04_021E0F00 mov r1, r5 - bl FUN_02096DA0 + bl DWC_GetGsProfileId mov r5, r0 cmp r5, #0 ble _021E176C @@ -10042,23 +10042,23 @@ _021E1858: cmp sb, r0 bne _021E18CC mov r0, r6 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #2 bne _021E1894 mov r0, r4 - bl FUN_02097484 + bl DWC_GetFriendDataType cmp r0, #3 bne _021E1894 mov r0, r5 mov r1, sb - bl FUN_02096C90 + bl DWC_SetGsProfileId _021E1894: mov r0, r4 - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #0 beq _021E18AC mov r0, r5 - bl FUN_02097414 + bl DWCi_SetBuddyFriendData _021E18AC: mov r0, fp mov r1, r7 @@ -10105,12 +10105,12 @@ _021E1920: bne _021E199C mov r0, #0xc mla r0, r6, r0, r7 - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #0 beq _021E1974 mov r0, #0xc mla r0, r4, r0, r7 - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #0 bne _021E1974 mov r0, r7 @@ -10232,15 +10232,15 @@ _021E1AD8: bne _021E1B24 mul sl, r4, r7 add r0, r6, sl - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #0 bne _021E1B30 add sl, r6, sl ldr r1, [sp, #0x38] mov r0, sl - bl FUN_02096C90 + bl DWC_SetGsProfileId mov r0, sl - bl FUN_02097414 + bl DWCi_SetBuddyFriendData ldr r0, [r8] strb sb, [r0, #0x1d] b _021E1B30 @@ -10312,7 +10312,7 @@ _021E1C08: ldr r1, [sl] ldrb r2, [r1, #0x1c] mla r1, r2, r8, r6 - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r0, sb bne _021E1C9C bl MOD04_021E0F00 @@ -10322,7 +10322,7 @@ _021E1C08: add r2, sp, #0x20 ldrb r3, [r3, #0x1c] mla r1, r3, r1, r6 - bl FUN_02096C78 + bl DWC_LoginIdToUserName ldr r0, _021E1CC4 ; =0x022106D0 mov r1, #0 ldr r4, [r0] @@ -10585,7 +10585,7 @@ MOD04_021E1F84: ; 0x021E1F84 bl MOD04_021E0F00 mov r1, #0xc mla r1, r5, r1, r4 - bl FUN_02096DA0 + bl DWC_GetGsProfileId cmp r0, #0 beq _021E1FD4 mvn r1, #0 @@ -15142,7 +15142,7 @@ _021E5E50: ldrb r2, [r2, #0x304] mov r0, fp mla r1, r2, r1, r3 - bl FUN_02096DA0 + bl DWC_GetGsProfileId movs sl, r0 beq _021E5DB4 mvn r0, #0 @@ -15159,7 +15159,7 @@ _021E5E50: add r1, fp, r1 ldrb r1, [r1, #0x304] mla r0, r1, r0, r2 - bl FUN_02097000 + bl DWCi_Acc_IsValidFriendData cmp r0, #0 beq _021E5DB4 mov r6, r7 @@ -17170,7 +17170,7 @@ MOD04_021E7B04: ; 0x021E7B04 mov r5, r4 b _021E7C48 _021E7BC0: - bl FUN_0209A60C + bl SOC_GetHostID mov r0, r0, lsl #0x10 ldr r1, _021E7DEC ; =0x0000FFFF ldr r2, _021E7DF0 ; =0x0000A8C0 @@ -17220,7 +17220,7 @@ _021E7C48: str r8, [r0, #0x19c] b _021E7D00 _021E7C74: - bl FUN_0209A60C + bl SOC_GetHostID str r0, [sp, #8] bl MOD04_021E26E4 ldr r0, [r0, #4] @@ -21677,7 +21677,7 @@ MOD04_021EBA28: ; 0x021EBA28 blo _021EBAB0 cmp r0, #0x10 bhi _021EBAB0 - bl FUN_020A8850 + bl WCM_GetApMacAddress mov r4, r0 mov r1, #6 bl DC_InvalidateRange @@ -21692,7 +21692,7 @@ MOD04_021EBA28: ; 0x021EBA28 cmp r0, #4 bne _021EBAA8 mov r0, #0 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r4, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -21924,11 +21924,11 @@ MOD04_021EBC60: ; 0x021EBC60 and r1, r1, #3 orr r1, r2, r1, lsl #4 strb r1, [r0, #0xd0c] - bl FUN_02095FA8 + bl DWCi_BM_GetApInfo ldr r0, _021EBE14 ; =0x02210E4C mov r1, #0x2300 ldr r0, [r0] - bl FUN_020A7E80 + bl WCM_Init cmp r0, #1 beq _021EBDF4 cmp r0, #4 @@ -22664,7 +22664,7 @@ _021EC7AC: .word 0x00000D0C MOD04_021EC7B0: ; 0x021EC7B0 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 - bl FUN_020A71F8 + bl WCM_GetPhase ldrb r2, [r6, #0xd13] add r3, r6, #0x470 mov r1, #0xc0 @@ -22731,7 +22731,7 @@ _021EC898: mov r0, r5 add r1, r6, r1 orr r2, r4, r2 - bl FUN_020A75C0 + bl WCM_ConnectAsync b _021EC8E0 _021EC8BC: cmp r0, #9 @@ -22854,12 +22854,12 @@ _021ECA44: MOD04_021ECA4C: ; 0x021ECA4C stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_02099A94 + bl SOCL_CalmDown cmp r0, #0 addne sp, sp, #4 movne r0, #0 ldmneia sp!, {pc} - bl THUNK_FUN_02099BC8 + bl SOC_Cleanup cmp r0, #0 beq _021ECA80 mvn r1, #0x26 @@ -22878,7 +22878,7 @@ _021ECA8C: MOD04_021ECA98: ; 0x021ECA98 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #0xc addls pc, pc, r0, lsl #2 b _021ECB2C @@ -22901,19 +22901,19 @@ _021ECAE4: mov r0, #1 ldmfd sp!, {pc} _021ECAF0: - bl FUN_020A7E0C + bl WCM_Finish b _021ECB2C _021ECAF8: - bl FUN_020A7AC8 + bl WCM_CleanupAsync b _021ECB2C _021ECB00: - bl FUN_020A7820 + bl WCM_EndSearchAsync b _021ECB2C _021ECB08: - bl FUN_020A7488 + bl WCM_DisconnectAsync b _021ECB2C _021ECB10: - bl FUN_020A722C + bl WCM_TerminateAsync b _021ECB2C _021ECB18: mov r0, #0 @@ -23463,7 +23463,7 @@ MOD04_021ED218: ; 0x021ED218 bl MOD04_021EB798 mov r4, r0 mov r5, #9 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #0xc addls pc, pc, r0, lsl #2 b _021ED2F0 @@ -23503,13 +23503,13 @@ _021ED2A4: bl MOD04_021ED8D4 b _021ED2F0 _021ED2C0: - bl FUN_020A7820 + bl WCM_EndSearchAsync b _021ED2F0 _021ED2C8: - bl FUN_020A7488 + bl WCM_DisconnectAsync b _021ED2F0 _021ED2D0: - bl FUN_020A722C + bl WCM_TerminateAsync mov r0, #4 bl MOD04_021EB6F4 mov r5, #0x11 @@ -23532,7 +23532,7 @@ MOD04_021ED2FC: ; 0x021ED2FC movgt r2, #0xc ldr r2, [ip, r2, lsl #2] orr r2, r3, r2 - bl FUN_020A7A90 + bl WCM_SearchAsync add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 @@ -23623,7 +23623,7 @@ _021ED410: ldmloia sp!, {r4, r5, pc} _021ED448: strb r2, [r5, #0xd13] - bl FUN_020A7820 + bl WCM_EndSearchAsync cmp r0, #1 strneb r4, [r5, #0xd0e] movne r4, #7 @@ -24080,7 +24080,7 @@ MOD04_021EDA70: ; 0x021EDA70 mov r5, r0 bl MOD04_021EB720 mov r4, r0 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r4, #2 bne _021EDAB0 cmp r0, #3 @@ -24137,7 +24137,7 @@ _021EDB38: MOD04_021EDB44: ; 0x021EDB44 stmdb sp!, {r4, lr} sub sp, sp, #0x10 - bl FUN_020A71F8 + bl WCM_GetPhase mov r4, r0 mov r0, #0x10 bl MOD04_021EB798 @@ -24152,7 +24152,7 @@ MOD04_021EDB44: ; 0x021EDB44 bl MOD04_021ED17C ldr r1, _021EDBC8 ; =MOD04_021EC44C add r0, sp, #0 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #1 beq _021EDB9C cmp r0, #4 @@ -24207,7 +24207,7 @@ MOD04_021EDBCC: ; 0x021EDBCC str r0, [sp, #4] add r0, sp, #0 add r1, sp, #4 - bl FUN_0209A594 + bl SOC_GetResolver add sp, sp, #8 ldmia sp!, {r4, pc} @@ -24318,12 +24318,12 @@ _021EDDB8: .word 0x0220BB2C MOD04_021EDDBC: ; 0x021EDDBC stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_02099A94 + bl SOCL_CalmDown cmp r0, #0 addne sp, sp, #4 movne r0, #0xb ldmneia sp!, {pc} - bl THUNK_FUN_02099BC8 + bl SOC_Cleanup cmp r0, #0 beq _021EDDF0 mvn r1, #0x26 @@ -24401,7 +24401,7 @@ MOD04_021EDE90: ; 0x021EDE90 MOD04_021EDEC8: ; 0x021EDEC8 stmdb sp!, {r4, lr} mov r4, r0 - bl FUN_0209A60C + bl SOC_GetHostID cmp r0, #0 beq _021EDF00 mov r0, r4 @@ -24456,7 +24456,7 @@ MOD04_021EDF58: ; 0x021EDF58 mov r2, #4 mov r0, r4 str r2, [r1] - bl FUN_0209A2C0 + bl SOC_Startup cmp r0, #0 moveq r0, #0xc ldmeqia sp!, {r4, r5, r6, pc} @@ -24476,7 +24476,7 @@ MOD04_021EDFBC: ; 0x021EDFBC mov r0, #0x10 bl MOD04_021EB798 mov r4, r0 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 bne _021EE064 sub r0, r5, #0xa @@ -25236,7 +25236,7 @@ MOD04_021EE9E0: ; 0x021EE9E0 cmp r1, r0 bne _021EEA58 mov r0, r5 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 addeq sp, sp, #4 moveq r0, #0 @@ -26272,14 +26272,14 @@ MOD04_021EF794: ; 0x021EF794 add r0, sp, #0x10 mov r5, r1 mov r4, r2 - bl FUN_020A8BBC + bl MD5Init add r0, sp, #0x10 mov r1, r6 mov r2, r5 - bl FUN_020A8BB0 + bl MD5Update add r0, sp, #0 add r1, sp, #0x10 - bl FUN_020A8BA4 + bl MD5Final add r0, sp, #0 mov r1, r4 bl MOD04_021EF7E0 @@ -26554,7 +26554,7 @@ MOD04_021EFB38: ; 0x021EFB38 stmdb sp!, {lr} sub sp, sp, #4 add r1, sp, #0 - bl FUN_0209A224 + bl SOC_InetAtoN cmp r0, #0 mvneq r0, #0 ldrne r0, [sp] @@ -26569,7 +26569,7 @@ MOD04_021EFB5C: ; 0x021EFB5C ldr r2, [r4] mov r5, r1 strb r2, [r5] - bl FUN_0209A650 + bl SOC_GetSockName ldrb r2, [r5] mvn r1, #0 str r2, [r4] @@ -26619,7 +26619,7 @@ _021EFBE8: add ip, sp, #4 strb lr, [sp, #4] str ip, [sp] - bl FUN_0209A7D0 + bl SOC_SendTo mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #0x10 @@ -26629,7 +26629,7 @@ _021EFBE8: MOD04_021EFC24: ; 0x021EFC24 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_0209A858 + bl SOC_Send mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26644,7 +26644,7 @@ MOD04_021EFC40: ; 0x021EFC40 ldr ip, [r4] strb ip, [r5] str r5, [sp] - bl FUN_0209A880 + bl SOC_RecvFrom ldrb r2, [r5] mvn r1, #0 str r2, [r4] @@ -26656,7 +26656,7 @@ MOD04_021EFC40: ; 0x021EFC40 MOD04_021EFC78: ; 0x021EFC78 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_0209A91C + bl SOC_Read mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26670,7 +26670,7 @@ MOD04_021EFC94: ; 0x021EFC94 ldr r2, [r4] mov r5, r1 strb r2, [r5] - bl FUN_0209A504 + bl SOC_Accept ldrb r2, [r5] mvn r1, #0 str r2, [r4] @@ -26682,7 +26682,7 @@ MOD04_021EFC94: ; 0x021EFC94 MOD04_021EFCC8: ; 0x021EFCC8 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_0209A588 + bl SOC_Listen mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26703,7 +26703,7 @@ _021EFCF4: bne _021EFCF4 add r1, sp, #0 strb r2, [sp] - bl FUN_0209A944 + bl SOC_Connect mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #8 @@ -26729,7 +26729,7 @@ _021EFD4C: bne _021EFD4C add r1, sp, #0 strb r2, [sp] - bl FUN_0209A9A4 + bl SOC_Bind mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #8 @@ -26739,7 +26739,7 @@ _021EFD4C: MOD04_021EFD80: ; 0x021EFD80 stmdb sp!, {lr} sub sp, sp, #4 - bl thunk_FUN_020995dc + bl SOC_Shutdown mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26749,7 +26749,7 @@ MOD04_021EFD80: ; 0x021EFD80 MOD04_021EFD9C: ; 0x021EFD9C stmdb sp!, {lr} sub sp, sp, #4 - bl thunk_FUN_0209996c + bl SOC_Close mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26759,7 +26759,7 @@ MOD04_021EFD9C: ; 0x021EFD9C MOD04_021EFDB8: ; 0x021EFDB8 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_0209A9D0 + bl SOC_Socket mvn r1, #0 bl MOD04_021EFDD4 add sp, sp, #4 @@ -26829,9 +26829,9 @@ MOD04_021EFE70: ; 0x021EFE70 strh r3, [r1, #0xa] str r2, [r1, #0xc] str r3, [r0] - bl FUN_02099C78 + bl SOCL_GetHostID ldr r1, _021EFEF8 ; =0x02210F50 - bl FUN_0209A174 + bl SOC_U32to4U8 ldr r2, _021EFEF8 ; =0x02210F50 ldr r0, [r2] cmp r0, #0 @@ -26904,7 +26904,7 @@ MOD04_021EFF5C: ; 0x021EFF5C add r0, sp, #0 mov r1, #1 strh r2, [sp, #6] - bl FUN_0209A0AC + bl SOC_Poll cmp r0, #0 addlt sp, sp, #8 mvnlt r0, #0 @@ -27050,13 +27050,13 @@ MOD04_021F017C: ; 0x021F017C mov r1, #3 mov r2, #0 mov r5, r0 - bl FUN_0209A4B4 + bl SOC_Fcntl cmp r4, #0 bicne r2, r0, #4 orreq r2, r0, #4 mov r0, r5 mov r1, #4 - bl FUN_0209A4B4 + bl SOC_Fcntl cmp r0, #0 moveq r0, #1 movne r0, #0 @@ -32277,7 +32277,7 @@ _021F4AD0: ldmia sp!, {r4, r5, r6, pc} _021F4B0C: ldr r0, _021F4C30 ; =0x0220DD90 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 bne _021F4B48 ldr r2, _021F4C34 ; =0x0220E144 @@ -39046,7 +39046,7 @@ _021FAB54: ldmia sp!, {r4, r5, r6, pc} _021FAB90: ldr r0, _021FACA8 ; =0x0220E860 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 bne _021FABCC ldr r2, _021FACAC ; =0x0220EBC4 @@ -45132,7 +45132,7 @@ _021FFE40: cmp r5, r0 bne _021FFE84 mov r0, r8 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 addeq sp, sp, #0x104 moveq r0, #0 @@ -45176,7 +45176,7 @@ _021FFEE0: beq _021FFF18 add r0, sp, #0 ldmia r0, {r0} - bl FUN_0209A27C + bl SOC_InetNtoA mov r2, r0 ldr r1, _021FFF6C ; =0x0220F008 mov r0, r5 @@ -45186,7 +45186,7 @@ _021FFEE0: _021FFF18: add r0, sp, #0 ldmia r0, {r0} - bl FUN_0209A27C + bl SOC_InetNtoA mov r2, r0 ldr r1, _021FFF70 ; =0x0220F010 mov r0, r5 @@ -45879,7 +45879,7 @@ MOD04_022008A0: ; 0x022008A0 cmp r0, r1 ldmneia sp!, {r4, pc} mov r0, r4 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 moveq r0, #0 ldrne r0, [r0, #0xc] @@ -46381,7 +46381,7 @@ _02200F8C: bl MOD04_022021C0 add r0, r5, r8, lsl #2 ldmia r0, {r0} - bl FUN_0209A27C + bl SOC_InetNtoA mov r1, r0 mov r0, r6 bl MOD04_022021C0 @@ -47603,7 +47603,7 @@ _022020D0: cmp r0, #0 beq _0220211C mov r0, r7 - bl FUN_0209A6EC + bl SOC_GetHostByAddr movs r4, r0 addeq sp, sp, #4 moveq r0, #0 @@ -52308,7 +52308,7 @@ _02206038: cmp r0, r1 bne _022060A4 add r0, sp, #8 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 addeq sp, sp, #0x88 moveq r0, #2 @@ -53611,7 +53611,7 @@ MOD04_022071C0: ; 0x022071C0 mov r1, #0x14 bl MOD04_022083B4 add r0, sp, #0 - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo ldr r1, [sp] ldr r2, [sp, #4] mov r0, #0 @@ -56591,12 +56591,12 @@ MOD04_022099C0: ; 0x022099C0 moveq r2, #7 add r6, r0, r2 mov r0, r6 - bl FUN_0209A224 + bl SOC_InetAtoN cmp r0, #0 ldrne r0, [sp] bne _02209A54 mov r0, r6 - bl FUN_02099D88 + bl SOCL_Resolve cmp r0, #0 addeq sp, sp, #8 moveq r0, #0 @@ -56837,7 +56837,7 @@ MOD04_02209D40: ; 0x02209D40 ldmltia sp!, {pc} mov r0, r1 mov r1, #2 - bl thunk_FUN_020995dc + bl SOC_Shutdown add sp, sp, #4 ldmfd sp!, {pc} @@ -56849,7 +56849,7 @@ MOD04_02209D68: ; 0x02209D68 mov r1, r2 mov r2, r3 ldr r3, [sp, #8] - bl FUN_0209A858 + bl SOC_Send cmp r0, #0 ldmgeia sp!, {r4, pc} ldr r1, [r4, #4] @@ -56872,7 +56872,7 @@ MOD04_02209DB4: ; 0x02209DB4 mov r1, r2 mov r2, r3 ldr r3, [sp, #8] - bl FUN_0209A91C + bl SOC_Read cmp r0, #0 ldmgeia sp!, {r4, pc} ldr r1, [r4, #4] @@ -56907,7 +56907,7 @@ MOD04_02209E00: ; 0x02209E00 strb lr, [sp, #1] strh r3, [sp, #2] str r2, [sp, #4] - bl FUN_0209A944 + bl SOC_Connect cmp r0, #0 bge _02209E6C ldr r0, [r4, #4] @@ -56928,7 +56928,7 @@ MOD04_02209E7C: ; 0x02209E7C stmdb sp!, {r4, r5, r6, r7, r8, lr} mov r8, r1 mov r0, r8 - bl thunk_FUN_0209996c + bl SOC_Close cmp r0, #0 ldmneia sp!, {r4, r5, r6, r7, r8, pc} mov r7, #0 @@ -56942,7 +56942,7 @@ _02209EA8: add r7, r7, #0x1f4 _02209EB4: mov r0, r8 - bl thunk_FUN_0209996c + bl SOC_Close cmp r0, r5 ldmneia sp!, {r4, r5, r6, r7, r8, pc} cmp r7, r4 @@ -56959,7 +56959,7 @@ MOD04_02209ED4: ; 0x02209ED4 mov r0, #2 mov r1, #1 mov r2, #0 - bl FUN_0209A9D0 + bl SOC_Socket movs r4, r0 bmi _02209F4C ldr r0, [r5, #8] @@ -56977,11 +56977,11 @@ MOD04_02209ED4: ; 0x02209ED4 ldr r1, [r5, #0x20] str r2, [r1, #0x810] ldr r1, [r5, #0x20] - bl FUN_0209AAD0 + bl SOCL_EnableSsl cmp r0, #0 bge _02209F4C mov r0, r4 - bl thunk_FUN_0209996c + bl SOC_Close mvn r4, #0 _02209F4C: mov r0, r4 @@ -56998,7 +56998,7 @@ MOD04_02209F5C: ; 0x02209F5C bl OS_GetLowEntropyData ldr r0, _02209F80 ; =0x02211A24 mov r1, #0x20 - bl FUN_020A136C + bl CPS_SslAddRandomSeed add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 diff --git a/arm9/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/thumb_04.s index d10d80bb..7c6a31fc 100644 --- a/arm9/modules/04/asm/thumb_04.s +++ b/arm9/modules/04/asm/thumb_04.s @@ -159,7 +159,7 @@ _021D7608: ldr r1, [r0] ldr r0, _021D7658 ; =0x00001EF0 ldr r0, [r1, r0] - bl FUN_02096F80 + bl DWC_CheckHasProfile cmp r0, #0 bne _021D762C mov r0, #1 @@ -169,7 +169,7 @@ _021D762C: ldr r1, [r0] ldr r0, _021D7658 ; =0x00001EF0 ldr r0, [r1, r0] - bl FUN_02096F18 + bl DWC_CheckValidConsole cmp r0, #0 beq _021D7640 mov r0, #0 @@ -719,14 +719,14 @@ MOD04_021D7A7C: ; 0x021D7A7C ldr r1, [r0] ldr r0, _021D7AFC ; =0x00001EF0 ldr r0, [r1, r0] - bl FUN_02096EB4 + bl DWC_CheckDirtyFlag cmp r0, #0 beq _021D7AB0 ldr r0, _021D7AF8 ; =0x0220FBC0 ldr r1, [r0] ldr r0, _021D7AFC ; =0x00001EF0 ldr r0, [r1, r0] - bl thunk_FUN_02096e4c + bl DWC_ClearDirtyFlag ldr r0, _021D7AF8 ; =0x0220FBC0 ldr r1, [r0] mov r0, #0x1f @@ -1979,7 +1979,7 @@ _021D8400: lsl r1, r1, #8 ldr r0, [r0, r1] add r0, r0, r4 - bl FUN_02097490 + bl DWC_IsBuddyFriendData cmp r0, #0 beq _021D844A mov r0, #0x11 @@ -2192,7 +2192,7 @@ MOD04_021D85B4: ; 0x021D85B4 ldr r1, [r0] ldr r0, _021D8618 ; =0x00001EF0 ldr r0, [r1, r0] - bl FUN_02096F80 + bl DWC_CheckHasProfile cmp r0, #0 bne _021D85D8 ldr r0, _021D8614 ; =0x0220FBC0 @@ -2200,7 +2200,7 @@ MOD04_021D85B4: ; 0x021D85B4 ldr r0, _021D8618 ; =0x00001EF0 ldr r0, [r1, r0] add r1, sp, #0xc - bl FUN_02096CCC + bl DWC_CreateExchangeToken b _021D85E6 _021D85D8: ldr r0, _021D8614 ; =0x0220FBC0 @@ -2208,7 +2208,7 @@ _021D85D8: ldr r0, _021D8618 ; =0x00001EF0 ldr r0, [r1, r0] add r1, sp, #0 - bl FUN_02096CCC + bl DWC_CreateExchangeToken _021D85E6: mov r4, #0 mov r7, #0x11 @@ -2221,11 +2221,11 @@ _021D85F0: lsl r0, r0, #8 ldr r0, [r1, r0] add r0, r0, r5 - bl FUN_02097484 + bl DWC_GetFriendDataType ldr r0, [r6] ldr r0, [r0, r7] add r0, r0, r5 - bl FUN_02097490 + bl DWC_IsBuddyFriendData add r4, r4, #1 add r5, #0xc cmp r4, #0x20 @@ -2673,7 +2673,7 @@ _021D8976: ldr r0, _021D8A3C ; =0x0220FBC8 str r4, [r0, #0xc] str r5, [r0, #0x10] - bl FUN_020AD8A8 + bl VCT_Main ldr r4, _021D8A3C ; =0x0220FBC8 ldr r0, _021D8A44 ; =0x0000411A ldr r1, [r4, #8] @@ -2682,7 +2682,7 @@ _021D8976: add r6, r0, #0 add r5, r0, #0 _021D898E: - bl FUN_020AD8A8 + bl VCT_Main ldr r0, [r4, #8] sub r0, r0, r6 str r0, [r4, #8] @@ -2791,7 +2791,7 @@ MOD04_021D8A54: ; 0x021D8A54 _021D8A62: lsl r0, r0, #0x18 lsr r0, r0, #0x18 - bl FUN_020AD834 + bl VCT_HandleData cmp r0, #0 beq _021D8A72 mov r0, #1 @@ -2946,7 +2946,7 @@ _021D8ACA: lsl r0, r0, #6 str r0, [sp, #0x28] add r0, sp, #0x14 - bl FUN_020AD93C + bl VCT_Init cmp r0, #0 ldr r0, _021D8BCC ; =0x0220FBC8 add r2, r5, #0 @@ -3058,7 +3058,7 @@ MOD04_021D8C6C: ; 0x021D8C6C ldr r0, _021D8CC4 ; =0x00003504 add r0, r1, r0 bl FUN_020C1674 - bl FUN_020AD904 + bl VCT_Cleanup ldr r1, _021D8CBC ; =0x0220FBC8 mov r0, #0x35 ldr r2, [r1, #4] diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s index 6245d91c..b0291130 100644 --- a/arm9/modules/13/asm/module_13_arm2.s +++ b/arm9/modules/13/asm/module_13_arm2.s @@ -5713,7 +5713,7 @@ _0222338C: mov r1, #0x20 bl MOD13_0223B004 str r0, [sp] - bl FUN_02096190 + bl DWC_BM_Init add r0, sp, #0 bl MOD13_0223AF90 add sp, sp, #4 @@ -7885,7 +7885,7 @@ MOD13_02224FEC: ; 0x02224FEC mov r0, fp bl MOD13_0223A4F0 add r0, sp, #0x1c - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo ldr sb, [sp, #0x1c] ldr sl, [sp, #0x20] mov r3, #0 @@ -8250,7 +8250,7 @@ _02225578: b _022255E4 _02225584: add r0, sp, #0 - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo ldr r0, _022255F4 ; =0x0224308C ldrb r0, [r0] cmp r0, #0 @@ -8485,7 +8485,7 @@ _02225844: bl MOD13_022393D8 mov r5, r0 add r0, sp, #0x30 - bl FUN_02095EC8 + bl DWCi_BM_GetWiFiInfo ldr r1, [sp, #0x30] ldr r0, [sp, #0x34] mov r6, #0 @@ -14113,7 +14113,7 @@ _0222A464: ldmia sp!, {r4, r5, r6, r7, r8, pc} _0222A48C: add r0, sp, #8 - bl FUN_02095AE0 + bl DWC_BACKUPlCheckAddress cmp r0, #0 movne r0, #1 moveq r0, #0 @@ -15568,11 +15568,11 @@ MOD13_0222B87C: ; 0x0222B87C cmp r0, #0 bne _0222B8C8 add r0, r4, #0xc8 - bl FUN_02095AE0 + bl DWC_BACKUPlCheckAddress cmp r0, #0 bne _0222B8C8 add r0, r4, #0xcc - bl FUN_02095AE0 + bl DWC_BACKUPlCheckAddress cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, pc} @@ -15581,18 +15581,18 @@ _0222B8C8: cmp r0, #0 bne _0222B914 add r0, r4, #0xc0 - bl FUN_02095AE0 + bl DWC_BACKUPlCheckAddress cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, pc} add r0, r4, #0xc4 - bl FUN_02095AE0 + bl DWC_BACKUPlCheckAddress cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, pc} add r0, r4, #0xc0 add r1, r4, #0xf0 - bl FUN_02095B0C + bl DWC_BACKUPlCheckIp cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, pc} @@ -17255,7 +17255,7 @@ _0222D02C: bl MOD13_02234164 mov r4, r0 add r0, r4, #0xf0 - bl FUN_02095BE0 + bl DWCi_BACKUPlConvMaskCidr strb r0, [r4, #0xd0] ldrb r0, [r4, #0xf5] cmp r0, #0 @@ -21999,11 +21999,11 @@ MOD13_02231090: ; 0x02231090 bl MOD04_021EB9D8 cmp r0, #0 ldmeqia sp!, {r4, pc} - bl FUN_02095324 + bl DWCi_BACKUPlGetWifi add r1, r4, #0xf0 mov r2, #0xe bl MI_CpuCopy8 - bl FUN_02095324 + bl DWCi_BACKUPlGetWifi add r1, r4, #0x1f0 mov r2, #0xe bl MI_CpuCopy8 @@ -24971,7 +24971,7 @@ _022337BC: add r1, sp, #4 ldr r0, [r0] str r2, [sp] - bl FUN_02095CDC + bl DWCi_BACKUPlWritePage add r0, sp, #0 bl MOD13_0223AF90 add sp, sp, #0x14 @@ -25000,9 +25000,9 @@ _02233830: cmp r3, #3 blt _02233830 add r0, sp, #0 - bl FUN_020967A4 + bl DWCi_AUTH_GetNewWiFiInfo add r0, sp, #0 - bl FUN_02095330 + bl DWCi_BACKUPlConvWifiInfo mov r6, #0 ldr r4, _022338B4 ; =0x02243150 mov r8, r0 @@ -25257,7 +25257,7 @@ _02233BB4: mov r2, #4 bl MI_CpuCopy8 add r0, r5, #0xf0 - bl FUN_02095BE0 + bl DWCi_BACKUPlConvMaskCidr strb r0, [r4, #0xd0] _02233BE0: ldrb r0, [r5, #0xf6] @@ -25340,7 +25340,7 @@ _02233CE8: ldrb r0, [r4, #0xd0] ldr r1, [r1] add r1, r1, #0x4f0 - bl FUN_02095BB0 + bl DWCi_BACKUPlConvMaskAddr add sp, sp, #4 ldmia sp!, {r4, r5, pc} .align 2, 0 @@ -25734,7 +25734,7 @@ MOD13_0223418C: ; 0x0223418C bl MATHi_CRC16InitTableRev ldr r0, _022341D0 ; =0x02243150 ldr r0, [r0] - bl FUN_02095D68 + bl DWCi_BACKUPlRead add sp, sp, #4 ldmia sp!, {pc} .align 2, 0 @@ -31696,7 +31696,7 @@ MOD13_0223923C: ; 0x0223923C ldr r0, _0223932C ; =0x0000064C ldr r1, [r1] add r0, r1, r0 - bl FUN_02095D68 + bl DWCi_BACKUPlRead bl OS_GetTick bl MOD13_022338FC ldr r1, _02239328 ; =0x0224318C diff --git a/arm9/modules/13/asm/module_13_thumb.s b/arm9/modules/13/asm/module_13_thumb.s index 5cb48aa3..51681246 100644 --- a/arm9/modules/13/asm/module_13_thumb.s +++ b/arm9/modules/13/asm/module_13_thumb.s @@ -215,7 +215,7 @@ MOD13_02217440: ; 0x02217440 ldr r4, [sp, #0x10] strb r5, [r4] str r4, [sp] - bl FUN_0209A7D0 + bl SOC_SendTo add sp, #4 pop {r4, r5} pop {r3} @@ -250,7 +250,7 @@ MOD13_02217458: ; 0x02217458 add r0, sp, #0 mov r1, #1 add r3, r4, #0 - bl FUN_0209A0AC + bl SOC_Poll add sp, #8 pop {r4, r5, r6} pop {r3} @@ -267,7 +267,7 @@ MOD13_022174A4: ; 0x022174A4 ldr r4, [sp, #0x10] strb r5, [r4] str r4, [sp] - bl FUN_0209A880 + bl SOC_RecvFrom add sp, #4 pop {r4, r5} pop {r3} @@ -323,7 +323,7 @@ _022174FA: MOD13_02217504: ; 0x02217504 push {lr} sub sp, #4 - bl THUNK_FUN_02099BC8 + bl SOC_Cleanup cmp r0, #0 bge _0221751A mov r0, #0 @@ -363,7 +363,7 @@ MOD13_02217530: ; 0x02217530 ldr r1, _0221758C ; =0x0223F7C8 str r0, [r1, #0x18] add r0, r1, #0 - bl FUN_0209A2C0 + bl SOC_Startup cmp r0, #0 bge _0221756A mov r0, #0 @@ -4941,7 +4941,7 @@ _0221994E: ldr r2, [sp, #4] ldr r2, [r2, #0x28] bl MI_CpuCopy8 - bl FUN_020A84D8 + bl WCM_ClearApList mov r0, #0 ldr r1, [sp, #4] add r1, r1, #4 @@ -5769,7 +5769,7 @@ MOD13_02219F54: ; 0x02219F54 ldr r0, _0221A030 ; =0x02241A60 ldr r0, [r0] ldr r1, _0221A044 ; =0x00002300 - bl FUN_020A7E80 + bl WCM_Init cmp r0, #0 beq _02219FD4 add r0, r4, #0 @@ -5791,7 +5791,7 @@ _02219FDA: ldr r0, _0221A02C ; =0x02241A68 ldr r0, [r0] ldr r1, _0221A048 ; =MOD13_0221A3CC - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221A000 add r0, r4, #0 @@ -5886,7 +5886,7 @@ _0221A0A8: ldr r1, [r1] ldr r2, _0221A0EC ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A0DA mov r1, #8 @@ -5922,7 +5922,7 @@ MOD13_0221A0FC: ; 0x0221A0FC ldr r0, [r0] cmp r0, #3 bne _0221A136 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221A122 add r0, r4, #0 @@ -5973,7 +5973,7 @@ MOD13_0221A164: ; 0x0221A164 ldr r0, [r0] cmp r0, #7 bne _0221A190 - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 bne _0221A190 mov r1, #4 @@ -6007,7 +6007,7 @@ MOD13_0221A1A4: ; 0x0221A1A4 mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A1D6 mov r1, #4 @@ -6121,7 +6121,7 @@ _0221A27C: ldr r1, [r1] ldr r2, _0221A2DC ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A2CC mov r1, #6 @@ -6173,8 +6173,8 @@ MOD13_0221A2FC: ; 0x0221A2FC add r5, r0, #0 add r7, r1, #0 mov r0, #1 - bl FUN_020A83D0 - bl FUN_020A846C + bl WCM_LockApList + bl WCM_CountApList add r6, r0, #0 cmp r6, #0 ble _0221A336 @@ -6186,7 +6186,7 @@ _0221A31A: bge _0221A336 lsl r0, r4, #0x10 lsr r0, r0, #0x10 - bl FUN_020A8358 + bl WCM_PointApList add r1, r5, #0 mov r2, #0xc0 bl MIi_CpuCopy32 @@ -6196,7 +6196,7 @@ _0221A31A: blt _0221A31A _0221A336: mov r0, #0 - bl FUN_020A83D0 + bl WCM_LockApList add r0, r6, #0 add sp, #4 pop {r4, r5, r6, r7} @@ -6233,7 +6233,7 @@ _0221A374: mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6241,7 +6241,7 @@ _0221A374: pop {r3} bx r3 _0221A38A: - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6252,7 +6252,7 @@ _0221A39A: ldr r0, _0221A3C4 ; =0x02241A68 ldr r0, [r0] ldr r1, _0221A3C8 ; =MOD13_0221A3CC - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6335,7 +6335,7 @@ _0221A426: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A440 b _0221A750 @@ -6366,7 +6366,7 @@ _0221A462: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A478 b _0221A750 @@ -6510,7 +6510,7 @@ _0221A55E: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A578 b _0221A750 @@ -6533,7 +6533,7 @@ _0221A588: _0221A594: cmp r2, #2 bne _0221A5BE - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221A5A2 b _0221A750 @@ -6564,7 +6564,7 @@ _0221A5C4: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A5DA b _0221A750 @@ -6630,7 +6630,7 @@ _0221A638: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6649,7 +6649,7 @@ _0221A638: _0221A66A: cmp r2, #2 bne _0221A690 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6674,7 +6674,7 @@ _0221A690: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6718,7 +6718,7 @@ _0221A6E4: ldr r0, [r0] cmp r0, #2 bne _0221A750 - bl FUN_020A7E0C + bl WCM_Finish mov r1, #0 ldr r0, _0221A758 ; =0x02241A78 str r1, [r0] @@ -10807,7 +10807,7 @@ _0221C6FC: mov r0, #2 lsl r1, r0, #0 ldr r2, [sp, #0x10] - bl FUN_0209A9D0 + bl SOC_Socket add r4, r0, #0 cmp r4, #0 bge _0221C716 @@ -10831,7 +10831,7 @@ _0221C716: ldr r1, [sp, #0x18] str r1, [sp, #0x48] add r1, sp, #0x44 - bl FUN_0209A9A4 + bl SOC_Bind str r0, [sp, #4] cmp r0, #0 bge _0221C746 @@ -10851,7 +10851,7 @@ _0221C74C: cmp r0, r1 blo _0221C768 add r0, r4, #0 - bl thunk_FUN_0209996c + bl SOC_Close ldr r0, [sp, #0x1c] str r0, [sp, #4] mov r0, #1 @@ -10870,7 +10870,7 @@ _0221C768: ldr r1, _0221C9F8 ; =0x022427E4 ldr r2, _0221C9FC ; =0x00000800 mov r3, #4 - bl FUN_0209A880 + bl SOC_RecvFrom cmp r0, #0 bgt _0221C78C b _0221CA3C @@ -10916,7 +10916,7 @@ _0221C7D8: cmp r0, r1 blo _0221C7F4 add r0, r4, #0 - bl thunk_FUN_0209996c + bl SOC_Close ldr r0, [sp, #0x20] str r0, [sp, #4] mov r0, #1 @@ -10929,7 +10929,7 @@ _0221C7F4: ldr r1, _0221C9F8 ; =0x022427E4 ldr r2, _0221C9FC ; =0x00000800 mov r3, #4 - bl FUN_0209A880 + bl SOC_RecvFrom cmp r0, #0 ble _0221C86A ldr r0, _0221C9F8 ; =0x022427E4 @@ -11042,7 +11042,7 @@ _0221C8DE: ldr r1, _0221C9F8 ; =0x022427E4 ldr r2, _0221C9FC ; =0x00000800 mov r3, #4 - bl FUN_0209A880 + bl SOC_RecvFrom cmp r0, #0 ble _0221C932 ldr r0, _0221C9F8 ; =0x022427E4 @@ -11090,7 +11090,7 @@ _0221C932: cmp r0, #0xa blt _0221C95A add r0, r4, #0 - bl thunk_FUN_0209996c + bl SOC_Close ldr r0, [sp, #0x14] str r0, [sp, #4] mov r0, #1 @@ -11197,7 +11197,7 @@ _0221CA4C: cmp r4, #0 beq _0221CA56 add r0, r4, #0 - bl thunk_FUN_0209996c + bl SOC_Close _0221CA56: ldr r0, _0221CA70 ; =0x02241AC0 ldr r0, [r0] @@ -12531,9 +12531,9 @@ MOD13_0221D414: ; 0x0221D414 str r0, [sp, #8] ldr r0, _0221D454 ; =0x000001E6 strh r0, [r1, #2] - bl FUN_02099C78 + bl SOCL_GetHostID add r1, sp, #0xc - bl FUN_0209A174 + bl SOC_U32to4U8 str r4, [sp] add r0, r5, #0 add r1, sp, #4 @@ -12555,7 +12555,7 @@ MOD13_0221D458: ; 0x0221D458 add r1, r3, #0 ldr r2, [sp, #8] mov r3, #0 - bl FUN_0209A7D0 + bl SOC_SendTo cmp r0, #0 bge _0221D470 mov r0, #3 @@ -13228,7 +13228,7 @@ _0221D982: beq _0221D992 mov r1, #0 str r1, [r0] - bl THUNK_FUN_02099BC8 + bl SOC_Cleanup _0221D992: pop {r4, r5, r6} pop {r3} @@ -13379,7 +13379,7 @@ _0221DA9A: ldr r0, _0221DAE8 ; =0x02241AD0 str r1, [r0] ldr r0, _0221DAEC ; =0x0223F8D4 - bl FUN_0209A2C0 + bl SOC_Startup cmp r0, #0 bge _0221DABC mov r0, #1 @@ -13768,7 +13768,7 @@ MOD13_0221DD4C: ; 0x0221DD4C ldr r0, _0221DE28 ; =0x02241AEC ldr r0, [r0] ldr r1, _0221DE3C ; =0x00002300 - bl FUN_020A7E80 + bl WCM_Init cmp r0, #0 beq _0221DDCC add r0, r4, #0 @@ -13790,7 +13790,7 @@ _0221DDD2: ldr r0, _0221DE24 ; =0x02241AB8 ldr r0, [r0] ldr r1, _0221DE40 ; =MOD13_0221E178 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221DDF8 add r0, r4, #0 @@ -13885,7 +13885,7 @@ _0221DEA0: ldr r1, [r1] ldr r2, _0221DEE4 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221DED2 mov r1, #8 @@ -13921,7 +13921,7 @@ MOD13_0221DEF4: ; 0x0221DEF4 ldr r0, [r0] cmp r0, #3 bne _0221DF2E - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221DF1A add r0, r4, #0 @@ -13972,7 +13972,7 @@ MOD13_0221DF5C: ; 0x0221DF5C ldr r0, [r0] cmp r0, #7 bne _0221DF88 - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 bne _0221DF88 mov r1, #4 @@ -14081,7 +14081,7 @@ _0221E02A: ldr r1, [r1] ldr r2, _0221E088 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E078 mov r1, #6 @@ -14133,8 +14133,8 @@ MOD13_0221E0A8: ; 0x0221E0A8 add r5, r0, #0 add r7, r1, #0 mov r0, #1 - bl FUN_020A83D0 - bl FUN_020A846C + bl WCM_LockApList + bl WCM_CountApList add r6, r0, #0 cmp r6, #0 ble _0221E0E2 @@ -14146,7 +14146,7 @@ _0221E0C6: bge _0221E0E2 lsl r0, r4, #0x10 lsr r0, r0, #0x10 - bl FUN_020A8358 + bl WCM_PointApList add r1, r5, #0 mov r2, #0xc0 bl MIi_CpuCopy32 @@ -14156,7 +14156,7 @@ _0221E0C6: blt _0221E0C6 _0221E0E2: mov r0, #0 - bl FUN_020A83D0 + bl WCM_LockApList add r0, r6, #0 add sp, #4 pop {r4, r5, r6, r7} @@ -14193,7 +14193,7 @@ _0221E120: mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14201,7 +14201,7 @@ _0221E120: pop {r3} bx r3 _0221E136: - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14212,7 +14212,7 @@ _0221E146: ldr r0, _0221E170 ; =0x02241AB8 ldr r0, [r0] ldr r1, _0221E174 ; =MOD13_0221E178 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14297,7 +14297,7 @@ _0221E1D6: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E1F0 b _0221E556 @@ -14328,7 +14328,7 @@ _0221E212: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221E228 b _0221E556 @@ -14472,7 +14472,7 @@ _0221E30E: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E328 b _0221E556 @@ -14495,7 +14495,7 @@ _0221E338: _0221E344: cmp r2, #2 bne _0221E36E - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221E352 b _0221E556 @@ -14526,7 +14526,7 @@ _0221E374: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221E38A b _0221E556 @@ -14592,7 +14592,7 @@ _0221E3E8: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E402 b _0221E556 @@ -14615,7 +14615,7 @@ _0221E412: _0221E41E: cmp r2, #2 bne _0221E448 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221E42C b _0221E556 @@ -14644,7 +14644,7 @@ _0221E448: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 beq _0221E556 mov r1, #3 @@ -14690,7 +14690,7 @@ _0221E4A0: ldr r0, [r0] cmp r0, #2 bne _0221E556 - bl FUN_020A7E0C + bl WCM_Finish mov r1, #0 ldr r0, _0221E518 ; =0x02241ADC str r1, [r0] diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index 79cee761..3215db95 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -2086,7 +2086,7 @@ _021D85B2: ldr r0, [sp, #4] add r6, r1, #0 bl FUN_02028228 - bl FUN_02096D68 + bl DWC_CreateFriendKey eor r1, r6 eor r0, r7 orr r0, r1 @@ -3492,7 +3492,7 @@ MOD55_021D90D8: ; 0x021D90D8 ldrb r1, [r1, #0x18] sub r1, r1, #1 bl FUN_0202838C - bl FUN_02096E24 + bl DWC_GetFriendKey str r1, [sp, #4] add r4, r0, #0 ldr r0, [sp, #4] @@ -3557,7 +3557,7 @@ MOD55_021D9184: ; 0x021D9184 add r7, r1, #0 bl FUN_020286EC bl FUN_02028228 - bl FUN_02096D68 + bl DWC_CreateFriendKey add r6, r0, #0 add r4, r1, #0 ldr r0, [r5, #4] @@ -5538,7 +5538,7 @@ MOD55_021DA224: ; 0x021DA224 bl FUN_02028228 add r1, r4, #0 add r2, r6, #0 - bl FUN_020973B4 + bl DWC_CheckFriendKey cmp r0, #0 bne _021DA24C mov r0, #0 @@ -5562,7 +5562,7 @@ _021DA262: bl FUN_0202838C add r1, r4, #0 add r2, r6, #0 - bl FUN_02096D2C + bl DWC_CreateFriendKeyToken _021DA276: mov r0, #0 pop {r3, r4, r5, r6, r7, pc} diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 183fe0d3..08de4669 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -1539,7 +1539,7 @@ _02212A9A: bl MOD56_022128A4 ldr r0, [r5] bl FUN_02028228 - bl FUN_02096F80 + bl DWC_CheckHasProfile cmp r0, #0 bne _02212AFA mov r0, #0 @@ -1577,7 +1577,7 @@ _02212A9A: _02212AFA: ldr r0, [r5] bl FUN_02028228 - bl FUN_02096F18 + bl DWC_CheckValidConsole cmp r0, #0 bne _02212B1A add r0, r5, #0 diff --git a/arm9/modules/79/asm/module_79_arm.s b/arm9/modules/79/asm/module_79_arm.s index 9c6a0246..d737c74e 100644 --- a/arm9/modules/79/asm/module_79_arm.s +++ b/arm9/modules/79/asm/module_79_arm.s @@ -4723,7 +4723,7 @@ _022164D4: cmp r1, r0 bne _02216524 mov r0, r5 - bl FUN_0209A6EC + bl SOC_GetHostByAddr cmp r0, #0 moveq r0, #1 streq r0, [r4, #0xfc] diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index de0e7672..12992a4e 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -1346,7 +1346,7 @@ _0222DFB4: mvn r0, r0 cmp r4, r0 beq _0222DFCC - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 beq _0222DFC8 mov r4, #0xd @@ -18661,7 +18661,7 @@ _022369CC: bl FUN_02023830 add r6, r0, #0 add r0, r4, #0 - bl FUN_02096D68 + bl DWC_CreateFriendKey add r3, r0, #0 add r2, r1, #0 add r0, r6, #0 diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 73c58a93..d96f335e 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -596,7 +596,7 @@ _0222DA18: mvn r0, r0 cmp r4, r0 beq _0222DA30 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 beq _0222DA2C mov r4, #5 @@ -2282,7 +2282,7 @@ _0222E7C2: add r4, r0, #0 ldr r0, [r5] ldr r0, [r0, #0x14] - bl FUN_02096D68 + bl DWC_CreateFriendKey add r3, r0, #0 add r2, r1, #0 add r0, r4, #0 diff --git a/include/misc.h b/include/misc.h new file mode 100644 index 00000000..c3b16292 --- /dev/null +++ b/include/misc.h @@ -0,0 +1,13 @@ +#ifndef GUARD_MISC_H +#define GUARD_MISC_H + +// specify force-link. +void OSi_ReferSymbol(void *symbol); +#define SDK_REFER_SYMBOL(symbol) OSi_ReferSymbol((void*)(symbol)) + +// for embedding middleware version string in VERSION section. +#define SDK_MIDDLEWARE_STRING(vender, module) "[SDK+" vender ":" module "]" +#define SDK_DEFINE_MIDDLEWARE(id, vender, module) static char id [] = SDK_MIDDLEWARE_STRING(vender, module) +#define SDK_USING_MIDDLEWARE(id) SDK_REFER_SYMBOL(id) + +#endif //GUARD_MISC_H diff --git a/include/sections.h b/include/sections.h new file mode 100644 index 00000000..39b0eb5a --- /dev/null +++ b/include/sections.h @@ -0,0 +1,9 @@ +#ifndef GUARD_SECTIONS_H +#define GUARD_SECTIONS_H + +#pragma define_section ITCM ".itcm" ".itcm.bss" abs32 RWX +#pragma define_section DTCM ".dtcm" ".dtcm.bss" abs32 RWX +#pragma define_section VERSION ".version" abs32 RWX +#pragma define_section PARENT ".parent" abs32 RWX + +#endif //GUARD_SECTIONS_H |