Merge pull request #111 from PikalaxALT/pikalax_work

Split known libs
This commit is contained in:
Cleverking2003
2020-05-26 23:41:28 +03:00
committed by GitHub
59 changed files with 32057 additions and 31856 deletions

View File

@@ -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

1
.travis/calcrom/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
calcrom

17
.travis/calcrom/Makefile Normal file
View File

@@ -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 $@ $^

121
.travis/calcrom/calcrom.cpp Normal file
View File

@@ -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;
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

6410
arm9/asm/CPS_network.s Normal file

File diff suppressed because it is too large Load Diff

847
arm9/asm/DWC_account.s Normal file
View File

@@ -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

959
arm9/asm/DWC_backup.s Normal file
View File

@@ -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

357
arm9/asm/DWC_bm_init.s Normal file
View File

@@ -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

37
arm9/asm/DWC_init.s Normal file
View File

@@ -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

2
arm9/asm/DWC_report.s Normal file
View File

@@ -0,0 +1,2 @@
.include "asm/macros.inc"
.include "global.inc"

View File

@@ -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

758
arm9/asm/SOC_soc.s Normal file
View File

@@ -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

198
arm9/asm/SOC_socl_bind.s Normal file
View File

@@ -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

283
arm9/asm/SOC_socl_cleanup.s Normal file
View File

@@ -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

288
arm9/asm/SOC_socl_close.s Normal file
View File

@@ -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

300
arm9/asm/SOC_socl_command.s Normal file
View File

@@ -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

View File

@@ -0,0 +1,2 @@
.include "asm/macros.inc"
.include "global.inc"

491
arm9/asm/SOC_socl_create.s Normal file
View File

@@ -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

128
arm9/asm/SOC_socl_list.s Normal file
View File

@@ -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

10
arm9/asm/SOC_socl_misc.s Normal file
View File

@@ -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

93
arm9/asm/SOC_socl_poll.s Normal file
View File

@@ -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

1203
arm9/asm/SOC_socl_read.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

110
arm9/asm/SOC_socl_ssl.s Normal file
View File

@@ -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

236
arm9/asm/SOC_socl_startup.s Normal file
View File

@@ -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

1136
arm9/asm/SSL_biginteger.s Normal file

File diff suppressed because it is too large Load Diff

454
arm9/asm/SSL_md5.s Normal file
View File

@@ -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

74
arm9/asm/SSL_rca4.s Normal file
View File

@@ -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

655
arm9/asm/SSL_sha1.s Normal file
View File

@@ -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

4114
arm9/asm/SSL_ssl.s Normal file

File diff suppressed because it is too large Load Diff

408
arm9/asm/WCM_aplist.s Normal file
View File

@@ -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

361
arm9/asm/WCM_cpsif.s Normal file
View File

@@ -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

2748
arm9/asm/WCM_system.s Normal file

File diff suppressed because it is too large Load Diff

156
arm9/asm/WCM_util.s Normal file
View File

@@ -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

View File

@@ -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

6020
arm9/asm/libVCT.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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

View File

@@ -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]

View File

@@ -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

View File

@@ -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]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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"

File diff suppressed because it is too large Load Diff

View File

@@ -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]

View File

@@ -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

View File

@@ -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]

View File

@@ -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}

View File

@@ -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

View File

@@ -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]

View File

@@ -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

View File

@@ -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

13
include/misc.h Normal file
View File

@@ -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

9
include/sections.h Normal file
View File

@@ -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