Match a few functions, cleanup of unmatched libultra/gcc internal stuff, some documentation in 43F0.c (#755)

* Decompile memset, strcpy, strcmp

* Rename a lot of libultra functions and files,
match int_to_string (43F0.c OK)

* Nail a few warnings

* Clean up libultra header includes somewhat
This commit is contained in:
EllipticEllipsis 2022-09-04 22:12:30 +01:00 committed by GitHub
parent 2ad8779ea7
commit 1a8c131880
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
63 changed files with 302 additions and 556 deletions

View File

@ -20,9 +20,6 @@
);
#endif
__asm__(".include \"include/macro.inc\"\n");
#ifdef MOVE_ADDU
__asm__(".include \"include/move_addu.inc\"\n");
#endif
#else
#define INCLUDE_ASM(TYPE, FOLDER, NAME, ARGS...)
#endif

View File

@ -76,6 +76,14 @@
#define TAU 6.28318f
#define PI_S 3.14159f // Shorter PI
// Angle conversion macros
#define DEG_TO_BINANG(x) ((x) * (0x8000 / 180.0f))
#define RAD_TO_BINANG(x) ((x) * (f32)(0x8000 / M_PI))
// Should be 1.0f / 0x7FFF, but precision is wrong for a double
#define SHT_MINV 3.051851e-05
#define SPRITE_WORLD_SCALE (5.0f/7.0f)
#define SPRITE_WORLD_SCALE_D (5.0/7.0)
@ -89,9 +97,9 @@
#define PACK_FILL_COLOR(r, g, b, a) (GPACK_RGBA5551(r, g, b, a) << 0x10) | GPACK_RGBA5551(r, g, b, a)
#define PACK_FILL_DEPTH(z,dz) (GPACK_ZDZ(z, dz) << 0x10) | GPACK_ZDZ(z, dz)
#define SQ(x) ((x)*(x))
#define CUBE(x) (x*x*x)
#define QUART(x) (x*x*x*x)
#define SQ(x) ((x) * (x))
#define CUBE(x) ((x) * (x) * (x))
#define QUART(x) ((x) * (x) * (x) * (x))
/// Fixed-point short literal
#define F16(f) (s16)(f * 327.67f)

View File

@ -1,8 +1,7 @@
#ifndef _XSTDIO_H
#define _XSTDIO_H
#include "PR/ultratypes.h"
//#include "stdlib.h"
//#include "stdarg.h"
#include "stdlib/stdarg.h"
typedef struct {
/* 0x0 */ union {

View File

@ -3,7 +3,7 @@
u16 heap_nextMallocID = 0;
f32 D_80074274[] = {
f32 sCosineTable[] = {
0.0f, 0.017452f, 0.034899f, 0.052336f, 0.069756f, 0.087156f, 0.104528f, 0.121869f, 0.139173f,
0.156434f, 0.173648f, 0.190809f, 0.207912f, 0.224951f, 0.241922f, 0.258819f, 0.275637f, 0.292372f, 0.309017f,
0.325568f, 0.34202f, 0.358368f, 0.374607f, 0.390731f, 0.406737f, 0.422618f, 0.438371f, 0.45399f, 0.469472f,
@ -15,7 +15,8 @@ f32 D_80074274[] = {
0.984808f, 0.987688f, 0.990268f, 0.992546f, 0.994522f, 0.996195f, 0.997564f, 0.99863f, 0.999391f, 0.999848f, 1.0f
};
u8 D_800743E0[] = {
// Digits for bases up to 36
u8 sIntegerDigits[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
@ -25,7 +26,7 @@ u8 D_800743E0[] = {
s32 gRandSeed = 1;
f32 D_80074414[] = {
f32 sAtanFactors[] = {
1.0f, 1.273187f, 1.27303f, 1.272768f, 1.272402f, 1.271932f, 1.271358f, 1.270681f, 1.269902f, 1.269021f, 1.268038f,
1.266956f, 1.265774f, 1.264494f, 1.263116f, 1.261643f, 1.260075f, 1.258413f, 1.256659f, 1.254815f, 1.252881f,
1.250859f, 1.248752f, 1.24656f, 1.244285f, 1.241929f, 1.239494f, 1.236981f, 1.234393f, 1.231731f, 1.228997f,
@ -50,7 +51,7 @@ Gfx D_80074580[] = {
gsSPEndDisplayList(),
};
void dma_write_block(s32 dramAddr, s32 devAddr, s32 size);
void dma_write_block(Addr dramAddr, u32 devAddr, s32 size);
#define ROM_CHUNK_SIZE 0x2000
@ -62,9 +63,9 @@ HeapNode* _heap_create(HeapNode* addr, u32 size) {
if (size < 32) {
return (HeapNode*)-1;
} else {
HeapNode* heapNode = ALIGN16((s32)addr);
HeapNode* heapNode = (HeapNode*)ALIGN16((u32)addr);
size -= ((s8*)heapNode - (s8*)addr);
size -= ((u8*)heapNode - (u8*)addr);
heapNode->next = NULL;
heapNode->length = size - sizeof(HeapNode);
heapNode->allocated = 0;
@ -361,9 +362,9 @@ f32 cosine(s16 arg0) {
}
if (temp360 >= 180) {
return -D_80074274[idx];
return -sCosineTable[idx];
} else {
return D_80074274[idx];
return sCosineTable[idx];
}
}
@ -376,54 +377,44 @@ s32 sign(s32 val) {
return sign;
}
// D_800743E0 index needs to add the upper 32 bits from func_8006DDC0 ret
#ifdef NON_EQUIVALENT
// Writes integer in base as a string to dest. base can range from 2 to 36
char* int_to_string(s32 integer, char* dest, s32 base) {
u8 string[40]; // Even for binary this is a little long: 34 would suffice
s32 i = ARRAY_COUNT(string) - 2;
s32 negative = FALSE;
s64 longInteger = integer;
typedef struct {
u8 unk_00[39];
u8 unk_39;
} Unk_struct_43F0;
u32 func_8006DDC0(s64 arg0, s64 arg1);
u64 func_8006D800(s64 arg0, s64 arg1);
char* int_to_string(s32 arg01, char* arg1, s32 arg2) {
Unk_struct_43F0 unk_struct;
s32 phi_s4 = 0x26;
s32 phi_fp = 0;
s64 arg0 = arg01;
if (arg0 < 0) {
phi_fp = 1;
arg0 *= -1;
// handle negative integers
if (longInteger < 0) {
negative = TRUE;
longInteger *= -1;
}
unk_struct.unk_39 = 0;
// null-terminate string
string[ARRAY_COUNT(string) - 1] = '\0';
// extract digits, filling string from the back
while (TRUE) {
u8(*new_var)[];
unk_struct.unk_00[phi_s4] = (*(new_var = &D_800743E0))[func_8006DDC0(arg0, arg2)];
arg0 = func_8006D800(arg0, arg2);
if (arg0 == 0 || phi_s4 == 0) {
string[i] = sIntegerDigits[longInteger % base];
longInteger /= base;
if (longInteger == 0 || i == 0) {
break;
}
phi_s4--;
i--;
}
if (phi_fp) {
phi_s4--;
unk_struct.unk_00[phi_s4] = 0x2D;
// Add - to negatives
if (negative) {
i--;
string[i] = '-';
}
strcpy(arg1, &unk_struct.unk_00[phi_s4]);
// copy only populated part of string
strcpy(dest, &string[i]);
return arg1;
return dest;
}
#else
INCLUDE_ASM(char*, "43F0", int_to_string, s32 arg01, char* arg1, s32 arg2);
#endif
// should maybe be called bzero
void mem_clear(void* data, s32 numBytes) {
u8* addressableData = data;
@ -452,32 +443,32 @@ u32 dma_copy(Addr romStart, Addr romEnd, void* vramDest) {
osInvalICache(vramDest, length);
for (i = 0; i + ROM_CHUNK_SIZE < length; i += ROM_CHUNK_SIZE) {
nuPiReadRom(romStart + i, vramDest + i, ROM_CHUNK_SIZE);
nuPiReadRom((u32)romStart + i, vramDest + i, ROM_CHUNK_SIZE);
}
if (i != length) {
nuPiReadRom(romStart + i, vramDest + i, length - i);
nuPiReadRom((u32)romStart + i, vramDest + i, length - i);
}
return length;
}
s32 dma_write(s32 romStart, s32 romEnd, void* vramDest) {
s32 dma_write(Addr romStart, Addr romEnd, void* vramDest) {
u32 length = romEnd - romStart;
s32 i;
for (i = 0; i + ROM_CHUNK_SIZE < length; i += ROM_CHUNK_SIZE) {
dma_write_block(romStart + i, vramDest + i, ROM_CHUNK_SIZE);
dma_write_block(romStart + i, (u32)vramDest + i, ROM_CHUNK_SIZE);
}
if (i != length) {
dma_write_block(romStart + i, vramDest + i, length - i);
dma_write_block(romStart + i, (u32)vramDest + i, length - i);
}
return length;
}
void dma_write_block(s32 dramAddr, s32 devAddr, s32 size) {
void dma_write_block(Addr dramAddr, u32 devAddr, s32 size) {
OSIoMesg osIoMesg;
OSMesg osMesg;
OSMesgQueue osMesgQueue;
@ -564,11 +555,11 @@ f32 signF(f32 val) {
return sign;
}
s32 round(f32 arg0) {
if (!(arg0 >= 0.0f)) {
return -(s32)(0.5 - arg0);
s32 round(f32 x) {
if (!(x >= 0.0f)) {
return -(s32)(0.5 - x);
} else {
return (s32)(0.5 + arg0);
return (s32)(0.5 + x);
}
}
@ -614,40 +605,40 @@ f32 atan2(f32 startX, f32 startZ, f32 endX, f32 endZ) {
f32 zDiff = endZ - startZ;
f32 absXDiff = fabsf(xDiff);
f32 absZDiff = fabsf(zDiff);
f32 temp_f20;
f32 ret;
if (absZDiff < absXDiff) {
temp_f20 = (absZDiff / absXDiff) * 45.0f;
temp_f20 *= D_80074414[round(2.0f * temp_f20)];
ret = (absZDiff / absXDiff) * 45.0f;
ret *= sAtanFactors[round(2.0f * ret)];
if (xDiff >= 0.0f) {
if (zDiff >= 0.0f) {
return temp_f20 + 90.0f;
return ret + 90.0f;
} else {
return 90.0f - temp_f20;
return 90.0f - ret;
}
}
if (zDiff >= 0.0f) {
return 270.0f - temp_f20;
return 270.0f - ret;
} else {
return temp_f20 + 270.0f;
return ret + 270.0f;
}
} else {
if (absZDiff == 0.0f) {
return 0.0f;
}
temp_f20 = (absXDiff / absZDiff) * 45.0f;
temp_f20 *= D_80074414[round(2.0f * temp_f20)];
ret = (absXDiff / absZDiff) * 45.0f;
ret *= sAtanFactors[round(2.0f * ret)];
if (zDiff >= 0.0f) {
if (xDiff >= 0.0f) {
return 180.0f - temp_f20;
return 180.0f - ret;
} else {
return temp_f20 + 180.0f;
return ret + 180.0f;
}
} else if (!(xDiff >= 0.0f)) {
return 360.0f - temp_f20;
return 360.0f - ret;
}
}
return temp_f20;
return ret;
}
f32 get_player_normal_yaw(void) {
@ -681,50 +672,50 @@ void add_vec2D_polar(f32* x, f32* y, f32 r, f32 theta) {
f32 sinTheta;
f32 cosTheta;
sin_cos_rad((theta * 6.28318f) / 360.0f, &sinTheta, &cosTheta);
sin_cos_rad((theta * TAU) / 360.0f, &sinTheta, &cosTheta);
*x += r * sinTheta;
*y -= r * cosTheta;
}
// Effectively computes theta % 0x100000
u16 _wrap_trig_lookup_value(f32 theta) {
f32 ret = theta;
if (theta >= 1048576.0f || theta <= -1048576.0f) {
ret = theta * 0.0000009536743f;
ret = theta - ((s32) ret) * 1048576.0f;
if (theta >= 0x100000 || theta <= -0x100000) {
ret = theta / 0x100000;
ret = theta - (f32)(s32)ret * 0x100000;
}
return (s32) ret;
}
void sin_cos_rad(f32 rad, f32* outSinTheta, f32* outCosTheta) {
u16 theta = _wrap_trig_lookup_value(rad * 10430.378f);
void sin_cos_rad(f32 theta, f32* outSinTheta, f32* outCosTheta) {
u16 binang = _wrap_trig_lookup_value(RAD_TO_BINANG(theta));
*outSinTheta = sins(theta) * 3.051851e-05;
*outCosTheta = coss(theta) * 3.051851e-05;
*outSinTheta = sins(binang) * SHT_MINV;
*outCosTheta = coss(binang) * SHT_MINV;
}
f32 sin_rad(f32 angle) {
return sins(_wrap_trig_lookup_value(angle * 10430.378f)) * 3.051851e-05;
f32 sin_rad(f32 theta) {
return sins(_wrap_trig_lookup_value(RAD_TO_BINANG(theta))) * SHT_MINV;
}
f32 cos_rad(f32 angle) {
return coss(_wrap_trig_lookup_value(angle * 10430.378f)) * 3.051851e-05;
f32 cos_rad(f32 theta) {
return coss(_wrap_trig_lookup_value(RAD_TO_BINANG(theta))) * SHT_MINV;
}
void sin_cos_deg(f32 theta, f32* outSinTheta, f32* outCosTheta) {
u16 binang = _wrap_trig_lookup_value(DEG_TO_BINANG(theta));
*outSinTheta = sins(binang) * SHT_MINV;
*outCosTheta = coss(binang) * SHT_MINV;
}
void sin_cos_deg(f32 rad, f32* outSinTheta, f32* outCosTheta) {
u16 theta = _wrap_trig_lookup_value(rad * 182.04445f);
*outSinTheta = sins(theta) * 3.051851e-05;
*outCosTheta = coss(theta) * 3.051851e-05;
f32 sin_deg(f32 theta) {
return sins(_wrap_trig_lookup_value(DEG_TO_BINANG(theta))) * SHT_MINV;
}
f32 sin_deg(f32 angle) {
return sins(_wrap_trig_lookup_value(angle * 182.04445f)) * 3.051851e-05;
}
f32 cos_deg(f32 angle) {
return coss(_wrap_trig_lookup_value(angle * 182.04445f)) * 3.051851e-05;
f32 cos_deg(f32 theta) {
return coss(_wrap_trig_lookup_value(DEG_TO_BINANG(theta))) * SHT_MINV;
}
f32 update_lerp(s32 easing, f32 start, f32 end, s32 elapsed, s32 duration) {

View File

@ -1,5 +0,0 @@
#include "common.h"
INCLUDE_ASM(void, "os/41e70_len_340", osCreateViManager, OSPri pri);
INCLUDE_ASM(s32, "os/41e70_len_340", viMgrMain);

View File

@ -1,8 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/45a50_len_3a0", func_8006A650)
INCLUDE_ASM(void, "os/45a50_len_3a0", __osInitialize_common, void);
void func_8006A9E0(void) {
}

View File

@ -1,11 +0,0 @@
#include "common.h"
INCLUDE_ASM(int, "os/46c70_len_e00", bcmp, const void* src, const void* dst, int size);
INCLUDE_ASM(s32, "os/46c70_len_e00", _Litob);
INCLUDE_ASM(s32, "os/46c70_len_e00", _Ldtob);
INCLUDE_ASM(s32, "os/46c70_len_e00", _Ldunscale);
INCLUDE_ASM(s32, "os/46c70_len_e00", _Genld);

View File

@ -1,3 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/47e90_len_110", osViInit);

View File

@ -1,3 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/47fa0_len_20", osViGetCurrentContext);

View File

@ -1,3 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/48c00_len_5c0", func_8006D800);

View File

@ -1,5 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/491c0_len_f80", func_8006DDC0);
INCLUDE_ASM(s32, "os/491c0_len_f80", func_8006E310);

View File

@ -1,3 +0,0 @@
#include "common.h"
INCLUDE_ASM(s32, "os/49C70", func_8006E870);

View File

@ -1,5 +0,0 @@
#include "common.h"
INCLUDE_ASM(char*, "os/4a140_len_70", strcpy, char* destination, const char* source);
INCLUDE_ASM(s32, "os/4a140_len_70", strcmp, const char* str1, const char* str2);

View File

@ -1,3 +0,0 @@
#include "common.h"
INCLUDE_ASM(void*, "os/4a1b0_len_40", memset, void* ptr, s32 value, s32 num);

View File

@ -1,5 +1,3 @@
// nops in the end
#ifdef NON_MATCHING
#include "PR/controller.h"
#include "PR/osint.h"
#include "PR/siint.h"
@ -68,7 +66,3 @@ s32 __osContRamWrite(OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int
__osSiRelAccess();
return ret;
}
#else
#include "common.h"
INCLUDE_ASM(s32, "os/457c0_len_270", osContRamWrite, OSMesgQueue *mq, int channel, u16 address, u8 *buffer, int force);
#endif

View File

@ -1,4 +1,5 @@
#include "common.h"
#include "ultra64.h"
#include "include_asm.h"
u32 __osContinitialized = 0;

View File

@ -1,8 +1,35 @@
#define MOVE_ADDU
#include "ultra64.h"
#include "include_asm.h"
#include "common.h"
u8 __osContAddressCrc(u16 addr) {
u32 temp = 0;
u32 i;
INCLUDE_ASM(s32, "os/47c60_len_f0", osContAddressCrc);
for (i = 0x400; i != 0;) {
temp <<= 1;
if (addr & i) {
if (temp & 0x20) {
temp ^= 0x14;
} else {
++temp;
}
} else if (temp & 0x20) {
temp ^= 0x15;
}
i >>= 1;
}
for (i = 5; i != 0; --i) {
temp <<= 1;
if (temp & 0x20) {
temp ^= 0x15;
}
}
return temp & 0x1F;
}
u8 __osContDataCrc(u8* data) {
s32 ret;

3
src/os/divdi3.c Normal file
View File

@ -0,0 +1,3 @@
#include "include_asm.h"
INCLUDE_ASM(s32, "os/divdi3", __divdi3);

9
src/os/initialize.c Normal file
View File

@ -0,0 +1,9 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/initialize", __createSpeedParam)
INCLUDE_ASM(void, "os/initialize", __osInitialize_common, void);
void __osInitialize_autodetect(void) {
}

View File

@ -1,4 +1,5 @@
#include "common.h"
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/ldiv", ldiv);

10
src/os/memset.c Normal file
View File

@ -0,0 +1,10 @@
#include "gcc/memory.h"
void* memset(void* dest, int val, size_t len) {
unsigned char* ptr = dest;
while (len--) {
*ptr++ = val;
}
return dest;
}

3
src/os/moddi3.c Normal file
View File

@ -0,0 +1,3 @@
#include "include_asm.h"
INCLUDE_ASM(s32, "os/moddi3", __moddi3);

View File

@ -1,6 +1,8 @@
#include "common.h"
#include "ultra64.h"
#include "controller.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/43200_len_7c0", __osMotorAccess, OSPfs* pfs, s32 unk);
INCLUDE_ASM(s32, "os/motor", __osMotorAccess, OSPfs* pfs, s32 unk);
INCLUDE_ASM(s32, "os/43200_len_7c0", osMotorInit, OSMesgQueue* queue, OSPfs* pfs, int unk);
INCLUDE_ASM(s32, "os/motor", osMotorInit, OSMesgQueue* queue, OSPfs* pfs, int unk);

View File

@ -1,4 +1,5 @@
#include "common.h"
#include "ultra64.h"
#include "include_asm.h"
u32 D_80093D80 = 1;

View File

@ -1,4 +1,5 @@
#include "common.h"
#include "ultra64.h"
#include "include_asm.h"
OSDevMgr __osPiDevMgr = {0};
OSPiHandle* __osPiTable = NULL;

View File

@ -1,7 +1,6 @@
#define MOVE_ADDU
#include "common.h"
#include "ultra64.h"
#include <PR/osint.h>
#include "include_asm.h"
struct __osThreadTail __osThreadTail = {0, -1};
OSThread* __osRunQueue = (OSThread*) &__osThreadTail;

View File

@ -1,7 +1,5 @@
#define MOVE_ADDU
#include "common.h"
#include "stdlib/stdarg.h"
#include "ultra64.h"
#include "xstdio.h"
static char *proutSprintf(char *dst, const char *src, size_t count);

18
src/os/strcmp.c Normal file
View File

@ -0,0 +1,18 @@
#include "gcc/string.h"
int strcmp(const char* str1, const char* str2) {
unsigned char c1 = *str1;
unsigned char c2 = *str2;
while (1) {
c1 = *str1++;
c2 = *str2++;
if (c1 != c2) {
break;
}
if (c1 == 0) {
return 0;
}
}
return c1 - c2;
}

12
src/os/strcpy.c Normal file
View File

@ -0,0 +1,12 @@
#include "gcc/string.h"
char* strcpy(char* dest, const char* src) {
const unsigned char* var_a1 = src;
unsigned char* var_v1 = dest;
while (*var_a1 != 0) {
*var_v1++ = *var_a1++;
}
*var_v1 = 0;
return dest;
}

3
src/os/udivdi3.c Normal file
View File

@ -0,0 +1,3 @@
#include "include_asm.h"
INCLUDE_ASM(s32, "os/udivdi3", __udivdi3);

3
src/os/umoddi3.c Normal file
View File

@ -0,0 +1,3 @@
#include "include_asm.h"
INCLUDE_ASM(s32, "os/umoddi3", __umoddi3);

4
src/os/vi.c Normal file
View File

@ -0,0 +1,4 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/vi", __osViInit);

View File

@ -0,0 +1,4 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/vigetcurrcontext", osViGetCurrentContext);

6
src/os/vimgr.c Normal file
View File

@ -0,0 +1,6 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(void, "os/vimgr", osCreateViManager, OSPri pri);
INCLUDE_ASM(s32, "os/vimgr", viMgrMain);

8
src/os/xldtob.c Normal file
View File

@ -0,0 +1,8 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/xldtob", _Ldtob);
INCLUDE_ASM(s32, "os/xldtob", _Ldunscale);
INCLUDE_ASM(s32, "os/xldtob", _Genld);

4
src/os/xlitob.c Normal file
View File

@ -0,0 +1,4 @@
#include "ultra64.h"
#include "include_asm.h"
INCLUDE_ASM(s32, "os/xlitob", _Litob);

View File

@ -1,87 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel int_to_string
/* 48C4 800294C4 27BDFF88 */ addiu $sp, $sp, -0x78
/* 48C8 800294C8 AFB7006C */ sw $s7, 0x6c($sp)
/* 48CC 800294CC 00C0B82D */ daddu $s7, $a2, $zero
/* 48D0 800294D0 AFB40060 */ sw $s4, 0x60($sp)
/* 48D4 800294D4 24140026 */ addiu $s4, $zero, 0x26
/* 48D8 800294D8 AFBE0070 */ sw $fp, 0x70($sp)
/* 48DC 800294DC 0000F02D */ daddu $fp, $zero, $zero
/* 48E0 800294E0 AFB3005C */ sw $s3, 0x5c($sp)
/* 48E4 800294E4 AFB20058 */ sw $s2, 0x58($sp)
/* 48E8 800294E8 0080982D */ daddu $s3, $a0, $zero
/* 48EC 800294EC 000497C3 */ sra $s2, $a0, 0x1f
/* 48F0 800294F0 AFBF0074 */ sw $ra, 0x74($sp)
/* 48F4 800294F4 AFB60068 */ sw $s6, 0x68($sp)
/* 48F8 800294F8 AFB50064 */ sw $s5, 0x64($sp)
/* 48FC 800294FC AFB10054 */ sw $s1, 0x54($sp)
/* 4900 80029500 AFB00050 */ sw $s0, 0x50($sp)
/* 4904 80029504 0641000A */ bgez $s2, .L80029530
/* 4908 80029508 AFA5007C */ sw $a1, 0x7c($sp)
/* 490C 8002950C 2402FFFF */ addiu $v0, $zero, -1
/* 4910 80029510 02620019 */ multu $s3, $v0
/* 4914 80029514 241E0001 */ addiu $fp, $zero, 1
/* 4918 80029518 00001010 */ mfhi $v0
/* 491C 8002951C 00001812 */ mflo $v1
/* 4920 80029520 00531023 */ subu $v0, $v0, $s3
/* 4924 80029524 00521023 */ subu $v0, $v0, $s2
/* 4928 80029528 0040902D */ daddu $s2, $v0, $zero
/* 492C 8002952C 0060982D */ daddu $s3, $v1, $zero
.L80029530:
/* 4930 80029530 A3A00037 */ sb $zero, 0x37($sp)
/* 4934 80029534 27B60010 */ addiu $s6, $sp, 0x10
/* 4938 80029538 0017AFC3 */ sra $s5, $s7, 0x1f
.L8002953C:
/* 493C 8002953C 02E0882D */ daddu $s1, $s7, $zero
/* 4940 80029540 02A0802D */ daddu $s0, $s5, $zero
/* 4944 80029544 0240202D */ daddu $a0, $s2, $zero
/* 4948 80029548 0260282D */ daddu $a1, $s3, $zero
/* 494C 8002954C 0200302D */ daddu $a2, $s0, $zero
/* 4950 80029550 0C01B770 */ jal func_8006DDC0
/* 4954 80029554 0220382D */ daddu $a3, $s1, $zero
/* 4958 80029558 0240202D */ daddu $a0, $s2, $zero
/* 495C 8002955C 0260282D */ daddu $a1, $s3, $zero
/* 4960 80029560 0200302D */ daddu $a2, $s0, $zero
/* 4964 80029564 0220382D */ daddu $a3, $s1, $zero
/* 4968 80029568 3C088007 */ lui $t0, %hi(D_800743E0)
/* 496C 8002956C 250843E0 */ addiu $t0, $t0, %lo(D_800743E0)
/* 4970 80029570 00681021 */ addu $v0, $v1, $t0
/* 4974 80029574 90430000 */ lbu $v1, ($v0)
/* 4978 80029578 02D41021 */ addu $v0, $s6, $s4
/* 497C 8002957C 0C01B600 */ jal func_8006D800
/* 4980 80029580 A0430000 */ sb $v1, ($v0)
/* 4984 80029584 0040902D */ daddu $s2, $v0, $zero
/* 4988 80029588 0060982D */ daddu $s3, $v1, $zero
/* 498C 8002958C 02721025 */ or $v0, $s3, $s2
/* 4990 80029590 10400005 */ beqz $v0, .L800295A8
/* 4994 80029594 00000000 */ nop
/* 4998 80029598 12800003 */ beqz $s4, .L800295A8
/* 499C 8002959C 00000000 */ nop
/* 49A0 800295A0 0800A54F */ j .L8002953C
/* 49A4 800295A4 2694FFFF */ addiu $s4, $s4, -1
.L800295A8:
/* 49A8 800295A8 13C00004 */ beqz $fp, .L800295BC
/* 49AC 800295AC 2402002D */ addiu $v0, $zero, 0x2d
/* 49B0 800295B0 2694FFFF */ addiu $s4, $s4, -1
/* 49B4 800295B4 03B41821 */ addu $v1, $sp, $s4
/* 49B8 800295B8 A0620010 */ sb $v0, 0x10($v1)
.L800295BC:
/* 49BC 800295BC 27A50010 */ addiu $a1, $sp, 0x10
/* 49C0 800295C0 8FA4007C */ lw $a0, 0x7c($sp)
/* 49C4 800295C4 0C01BB50 */ jal strcpy
/* 49C8 800295C8 00B42821 */ addu $a1, $a1, $s4
/* 49CC 800295CC 8FA2007C */ lw $v0, 0x7c($sp)
/* 49D0 800295D0 8FBF0074 */ lw $ra, 0x74($sp)
/* 49D4 800295D4 8FBE0070 */ lw $fp, 0x70($sp)
/* 49D8 800295D8 8FB7006C */ lw $s7, 0x6c($sp)
/* 49DC 800295DC 8FB60068 */ lw $s6, 0x68($sp)
/* 49E0 800295E0 8FB50064 */ lw $s5, 0x64($sp)
/* 49E4 800295E4 8FB40060 */ lw $s4, 0x60($sp)
/* 49E8 800295E8 8FB3005C */ lw $s3, 0x5c($sp)
/* 49EC 800295EC 8FB20058 */ lw $s2, 0x58($sp)
/* 49F0 800295F0 8FB10054 */ lw $s1, 0x54($sp)
/* 49F4 800295F4 8FB00050 */ lw $s0, 0x50($sp)
/* 49F8 800295F8 03E00008 */ jr $ra
/* 49FC 800295FC 27BD0078 */ addiu $sp, $sp, 0x78

View File

@ -1,169 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel __osContRamWrite
/* 457C0 8006A3C0 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 457C4 8006A3C4 8FA20058 */ lw $v0, 0x58($sp)
/* 457C8 8006A3C8 AFB40030 */ sw $s4, 0x30($sp)
/* 457CC 8006A3CC 0080A021 */ addu $s4, $a0, $zero
/* 457D0 8006A3D0 AFB3002C */ sw $s3, 0x2c($sp)
/* 457D4 8006A3D4 00A09821 */ addu $s3, $a1, $zero
/* 457D8 8006A3D8 AFB50034 */ sw $s5, 0x34($sp)
/* 457DC 8006A3DC 24150002 */ addiu $s5, $zero, 2
/* 457E0 8006A3E0 AFB7003C */ sw $s7, 0x3c($sp)
/* 457E4 8006A3E4 00E0B821 */ addu $s7, $a3, $zero
/* 457E8 8006A3E8 AFB00020 */ sw $s0, 0x20($sp)
/* 457EC 8006A3EC 00C08021 */ addu $s0, $a2, $zero
/* 457F0 8006A3F0 3204FFFF */ andi $a0, $s0, 0xffff
/* 457F4 8006A3F4 2C830007 */ sltiu $v1, $a0, 7
/* 457F8 8006A3F8 AFBF0044 */ sw $ra, 0x44($sp)
/* 457FC 8006A3FC AFBE0040 */ sw $fp, 0x40($sp)
/* 45800 8006A400 AFB60038 */ sw $s6, 0x38($sp)
/* 45804 8006A404 AFB20028 */ sw $s2, 0x28($sp)
/* 45808 8006A408 38420001 */ xori $v0, $v0, 1
/* 4580C 8006A40C 0002102B */ sltu $v0, $zero, $v0
/* 45810 8006A410 00431024 */ and $v0, $v0, $v1
/* 45814 8006A414 10400003 */ beqz $v0, .L8006A424
/* 45818 8006A418 AFB10024 */ sw $s1, 0x24($sp)
/* 4581C 8006A41C 1480005D */ bnez $a0, .L8006A594
/* 45820 8006A420 00001021 */ addu $v0, $zero, $zero
.L8006A424:
/* 45824 8006A424 0C019771 */ jal __osSiGetAccess
/* 45828 8006A428 241E0003 */ addiu $fp, $zero, 3
/* 4582C 8006A42C 3216FFFF */ andi $s6, $s0, 0xffff
/* 45830 8006A430 00108140 */ sll $s0, $s0, 5
/* 45834 8006A434 AFB00014 */ sw $s0, 0x14($sp)
.L8006A438:
/* 45838 8006A438 3C02800A */ lui $v0, %hi(__osContLastCmd)
/* 4583C 8006A43C 9042A61C */ lbu $v0, %lo(__osContLastCmd)($v0)
/* 45840 8006A440 3C10800E */ lui $s0, %hi(__osPfsPifRam)
/* 45844 8006A444 145E0005 */ bne $v0, $fp, .L8006A45C
/* 45848 8006A448 2610A000 */ addiu $s0, $s0, %lo(__osPfsPifRam)
/* 4584C 8006A44C 3C028009 */ lui $v0, %hi(__osPfsLastChannel)
/* 45850 8006A450 8C4258E0 */ lw $v0, %lo(__osPfsLastChannel)($v0)
/* 45854 8006A454 5053001A */ beql $v0, $s3, .L8006A4C0
/* 45858 8006A458 02708021 */ addu $s0, $s3, $s0
.L8006A45C:
/* 4585C 8006A45C 3C01800A */ lui $at, %hi(__osContLastCmd)
/* 45860 8006A460 A03EA61C */ sb $fp, %lo(__osContLastCmd)($at)
/* 45864 8006A464 3C018009 */ lui $at, %hi(__osPfsLastChannel)
/* 45868 8006A468 AC3358E0 */ sw $s3, %lo(__osPfsLastChannel)($at)
/* 4586C 8006A46C 1A600006 */ blez $s3, .L8006A488
/* 45870 8006A470 00001821 */ addu $v1, $zero, $zero
.L8006A474:
/* 45874 8006A474 A2000000 */ sb $zero, ($s0)
/* 45878 8006A478 24630001 */ addiu $v1, $v1, 1
/* 4587C 8006A47C 0073102A */ slt $v0, $v1, $s3
/* 45880 8006A480 1440FFFC */ bnez $v0, .L8006A474
/* 45884 8006A484 26100001 */ addiu $s0, $s0, 1
.L8006A488:
/* 45888 8006A488 24080001 */ addiu $t0, $zero, 1
/* 4588C 8006A48C 3C01800E */ lui $at, %hi(D_800DA03C)
/* 45890 8006A490 AC28A03C */ sw $t0, %lo(D_800DA03C)($at)
/* 45894 8006A494 240800FF */ addiu $t0, $zero, 0xff
/* 45898 8006A498 24020023 */ addiu $v0, $zero, 0x23
/* 4589C 8006A49C A2080000 */ sb $t0, ($s0)
/* 458A0 8006A4A0 24080001 */ addiu $t0, $zero, 1
/* 458A4 8006A4A4 A2080002 */ sb $t0, 2($s0)
/* 458A8 8006A4A8 240800FF */ addiu $t0, $zero, 0xff
/* 458AC 8006A4AC A2020001 */ sb $v0, 1($s0)
/* 458B0 8006A4B0 240200FE */ addiu $v0, $zero, 0xfe
/* 458B4 8006A4B4 A21E0003 */ sb $fp, 3($s0)
/* 458B8 8006A4B8 A2080026 */ sb $t0, 0x26($s0)
/* 458BC 8006A4BC A2020027 */ sb $v0, 0x27($s0)
.L8006A4C0:
/* 458C0 8006A4C0 02C02021 */ addu $a0, $s6, $zero
/* 458C4 8006A4C4 001610C2 */ srl $v0, $s6, 3
/* 458C8 8006A4C8 0C01B218 */ jal __osContAddressCrc
/* 458CC 8006A4CC A2020004 */ sb $v0, 4($s0)
/* 458D0 8006A4D0 02E02021 */ addu $a0, $s7, $zero
/* 458D4 8006A4D4 8FA80014 */ lw $t0, 0x14($sp)
/* 458D8 8006A4D8 26050006 */ addiu $a1, $s0, 6
/* 458DC 8006A4DC 24060020 */ addiu $a2, $zero, 0x20
/* 458E0 8006A4E0 00481025 */ or $v0, $v0, $t0
/* 458E4 8006A4E4 0C019194 */ jal bcopy
/* 458E8 8006A4E8 A2020005 */ sb $v0, 5($s0)
/* 458EC 8006A4EC 3C05800E */ lui $a1, %hi(__osPfsPifRam)
/* 458F0 8006A4F0 24A5A000 */ addiu $a1, $a1, %lo(__osPfsPifRam)
/* 458F4 8006A4F4 0C019730 */ jal __osSiRawStartDma
/* 458F8 8006A4F8 24040001 */ addiu $a0, $zero, 1
/* 458FC 8006A4FC 0C01B233 */ jal __osContDataCrc
/* 45900 8006A500 02E02021 */ addu $a0, $s7, $zero
/* 45904 8006A504 02802021 */ addu $a0, $s4, $zero
/* 45908 8006A508 00002821 */ addu $a1, $zero, $zero
/* 4590C 8006A50C 24060001 */ addiu $a2, $zero, 1
/* 45910 8006A510 0C0195BC */ jal osRecvMesg
/* 45914 8006A514 00409021 */ addu $s2, $v0, $zero
/* 45918 8006A518 3C05800E */ lui $a1, %hi(__osPfsPifRam)
/* 4591C 8006A51C 24A5A000 */ addiu $a1, $a1, %lo(__osPfsPifRam)
/* 45920 8006A520 0C019730 */ jal __osSiRawStartDma
/* 45924 8006A524 00002021 */ addu $a0, $zero, $zero
/* 45928 8006A528 02802021 */ addu $a0, $s4, $zero
/* 4592C 8006A52C 00002821 */ addu $a1, $zero, $zero
/* 45930 8006A530 0C0195BC */ jal osRecvMesg
/* 45934 8006A534 24060001 */ addiu $a2, $zero, 1
/* 45938 8006A538 92020002 */ lbu $v0, 2($s0)
/* 4593C 8006A53C 304200C0 */ andi $v0, $v0, 0xc0
/* 45940 8006A540 00028902 */ srl $s1, $v0, 4
/* 45944 8006A544 5620000B */ bnel $s1, $zero, .L8006A574
/* 45948 8006A548 24110001 */ addiu $s1, $zero, 1
/* 4594C 8006A54C 92030026 */ lbu $v1, 0x26($s0)
/* 45950 8006A550 324200FF */ andi $v0, $s2, 0xff
/* 45954 8006A554 10430007 */ beq $v0, $v1, .L8006A574
/* 45958 8006A558 02802021 */ addu $a0, $s4, $zero
/* 4595C 8006A55C 0C01A530 */ jal __osPfsGetStatus
/* 45960 8006A560 02602821 */ addu $a1, $s3, $zero
/* 45964 8006A564 00408821 */ addu $s1, $v0, $zero
/* 45968 8006A568 16200007 */ bnez $s1, .L8006A588
/* 4596C 8006A56C 00000000 */ nop
/* 45970 8006A570 24110004 */ addiu $s1, $zero, 4
.L8006A574:
/* 45974 8006A574 24020004 */ addiu $v0, $zero, 4
/* 45978 8006A578 16220003 */ bne $s1, $v0, .L8006A588
/* 4597C 8006A57C 02A01021 */ addu $v0, $s5, $zero
/* 45980 8006A580 0441FFAD */ bgez $v0, .L8006A438
/* 45984 8006A584 26B5FFFF */ addiu $s5, $s5, -1
.L8006A588:
/* 45988 8006A588 0C01978C */ jal __osSiRelAccess
/* 4598C 8006A58C 00000000 */ nop
/* 45990 8006A590 02201021 */ addu $v0, $s1, $zero
.L8006A594:
/* 45994 8006A594 8FBF0044 */ lw $ra, 0x44($sp)
/* 45998 8006A598 8FBE0040 */ lw $fp, 0x40($sp)
/* 4599C 8006A59C 8FB7003C */ lw $s7, 0x3c($sp)
/* 459A0 8006A5A0 8FB60038 */ lw $s6, 0x38($sp)
/* 459A4 8006A5A4 8FB50034 */ lw $s5, 0x34($sp)
/* 459A8 8006A5A8 8FB40030 */ lw $s4, 0x30($sp)
/* 459AC 8006A5AC 8FB3002C */ lw $s3, 0x2c($sp)
/* 459B0 8006A5B0 8FB20028 */ lw $s2, 0x28($sp)
/* 459B4 8006A5B4 8FB10024 */ lw $s1, 0x24($sp)
/* 459B8 8006A5B8 8FB00020 */ lw $s0, 0x20($sp)
/* 459BC 8006A5BC 03E00008 */ jr $ra
/* 459C0 8006A5C0 27BD0048 */ addiu $sp, $sp, 0x48
/* 459C4 8006A5C4 00000000 */ nop
/* 459C8 8006A5C8 00000000 */ nop
/* 459CC 8006A5CC 00000000 */ nop
/* 459D0 8006A5D0 00000000 */ nop
/* 459D4 8006A5D4 00000000 */ nop
/* 459D8 8006A5D8 00000000 */ nop
/* 459DC 8006A5DC 00000000 */ nop
/* 459E0 8006A5E0 00000000 */ nop
/* 459E4 8006A5E4 00000000 */ nop
/* 459E8 8006A5E8 00000000 */ nop
/* 459EC 8006A5EC 00000000 */ nop
/* 459F0 8006A5F0 00000000 */ nop
/* 459F4 8006A5F4 00000000 */ nop
/* 459F8 8006A5F8 00000000 */ nop
/* 459FC 8006A5FC 00000000 */ nop
/* 45A00 8006A600 00000000 */ nop
/* 45A04 8006A604 00000000 */ nop
/* 45A08 8006A608 00000000 */ nop
/* 45A0C 8006A60C 00000000 */ nop
/* 45A10 8006A610 00000000 */ nop
/* 45A14 8006A614 00000000 */ nop
/* 45A18 8006A618 00000000 */ nop
/* 45A1C 8006A61C 00000000 */ nop
/* 45A20 8006A620 00000000 */ nop
/* 45A24 8006A624 00000000 */ nop
/* 45A28 8006A628 00000000 */ nop
/* 45A2C 8006A62C 00000000 */ nop

View File

@ -1,36 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel __osContAddressCrc
/* 47C60 8006C860 00001821 */ addu $v1, $zero, $zero
/* 47C64 8006C864 24050400 */ addiu $a1, $zero, 0x400
/* 47C68 8006C868 3084FFFF */ andi $a0, $a0, 0xffff
/* 47C6C 8006C86C 00851024 */ and $v0, $a0, $a1
.L8006C870:
/* 47C70 8006C870 10400006 */ beqz $v0, .L8006C88C
/* 47C74 8006C874 00031840 */ sll $v1, $v1, 1
/* 47C78 8006C878 30620020 */ andi $v0, $v1, 0x20
/* 47C7C 8006C87C 50400006 */ beql $v0, $zero, .L8006C898
/* 47C80 8006C880 24630001 */ addiu $v1, $v1, 1
/* 47C84 8006C884 0801B226 */ j .L8006C898
/* 47C88 8006C888 38630014 */ xori $v1, $v1, 0x14
.L8006C88C:
/* 47C8C 8006C88C 30620020 */ andi $v0, $v1, 0x20
/* 47C90 8006C890 54400001 */ bnel $v0, $zero, .L8006C898
/* 47C94 8006C894 38630015 */ xori $v1, $v1, 0x15
.L8006C898:
/* 47C98 8006C898 00052842 */ srl $a1, $a1, 1
/* 47C9C 8006C89C 14A0FFF4 */ bnez $a1, .L8006C870
/* 47CA0 8006C8A0 00851024 */ and $v0, $a0, $a1
/* 47CA4 8006C8A4 24050005 */ addiu $a1, $zero, 5
/* 47CA8 8006C8A8 00031840 */ sll $v1, $v1, 1
.L8006C8AC:
/* 47CAC 8006C8AC 30620020 */ andi $v0, $v1, 0x20
/* 47CB0 8006C8B0 54400001 */ bnel $v0, $zero, .L8006C8B8
/* 47CB4 8006C8B4 38630015 */ xori $v1, $v1, 0x15
.L8006C8B8:
/* 47CB8 8006C8B8 24A5FFFF */ addiu $a1, $a1, -1
/* 47CBC 8006C8BC 54A0FFFB */ bnel $a1, $zero, .L8006C8AC
/* 47CC0 8006C8C0 00031840 */ sll $v1, $v1, 1
/* 47CC4 8006C8C4 03E00008 */ jr $ra
/* 47CC8 8006C8C8 3062001F */ andi $v0, $v1, 0x1f

View File

@ -1,23 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel strcmp
.L8006ED70:
/* 4A170 8006ED70 90860000 */ lbu $a2, ($a0)
/* 4A174 8006ED74 24840001 */ addiu $a0, $a0, 1
/* 4A178 8006ED78 90A20000 */ lbu $v0, ($a1)
/* 4A17C 8006ED7C 30C300FF */ andi $v1, $a2, 0xff
/* 4A180 8006ED80 304200FF */ andi $v0, $v0, 0xff
/* 4A184 8006ED84 10620003 */ beq $v1, $v0, .L8006ED94
/* 4A188 8006ED88 24A50001 */ addiu $a1, $a1, 1
/* 4A18C 8006ED8C 0801BB67 */ j .L8006ED9C
/* 4A190 8006ED90 00621023 */ subu $v0, $v1, $v0
.L8006ED94:
/* 4A194 8006ED94 14C0FFF6 */ bnez $a2, .L8006ED70
/* 4A198 8006ED98 00001021 */ addu $v0, $zero, $zero
.L8006ED9C:
/* 4A19C 8006ED9C 03E00008 */ jr $ra
/* 4A1A0 8006EDA0 00000000 */ nop
/* 4A1A4 8006EDA4 00000000 */ nop
/* 4A1A8 8006EDA8 00000000 */ nop
/* 4A1AC 8006EDAC 00000000 */ nop

View File

@ -1,18 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel strcpy
/* 4A140 8006ED40 90A20000 */ lbu $v0, ($a1)
/* 4A144 8006ED44 10400007 */ beqz $v0, .L8006ED64
/* 4A148 8006ED48 00801821 */ addu $v1, $a0, $zero
.L8006ED4C:
/* 4A14C 8006ED4C 90A20000 */ lbu $v0, ($a1)
/* 4A150 8006ED50 A0620000 */ sb $v0, ($v1)
/* 4A154 8006ED54 24A50001 */ addiu $a1, $a1, 1
/* 4A158 8006ED58 90A20000 */ lbu $v0, ($a1)
/* 4A15C 8006ED5C 1440FFFB */ bnez $v0, .L8006ED4C
/* 4A160 8006ED60 24630001 */ addiu $v1, $v1, 1
.L8006ED64:
/* 4A164 8006ED64 A0600000 */ sb $zero, ($v1)
/* 4A168 8006ED68 03E00008 */ jr $ra
/* 4A16C 8006ED6C 00801021 */ addu $v0, $a0, $zero

View File

@ -1,22 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel memset
/* 4A1B0 8006EDB0 27BDFFF8 */ addiu $sp, $sp, -8
/* 4A1B4 8006EDB4 00801021 */ addu $v0, $a0, $zero
/* 4A1B8 8006EDB8 00403821 */ addu $a3, $v0, $zero
/* 4A1BC 8006EDBC 10C00006 */ beqz $a2, .L8006EDD8
/* 4A1C0 8006EDC0 24C3FFFF */ addiu $v1, $a2, -1
/* 4A1C4 8006EDC4 2406FFFF */ addiu $a2, $zero, -1
.L8006EDC8:
/* 4A1C8 8006EDC8 A0E50000 */ sb $a1, ($a3)
/* 4A1CC 8006EDCC 2463FFFF */ addiu $v1, $v1, -1
/* 4A1D0 8006EDD0 1466FFFD */ bne $v1, $a2, .L8006EDC8
/* 4A1D4 8006EDD4 24E70001 */ addiu $a3, $a3, 1
.L8006EDD8:
/* 4A1D8 8006EDD8 27BD0008 */ addiu $sp, $sp, 8
/* 4A1DC 8006EDDC 03E00008 */ jr $ra
/* 4A1E0 8006EDE0 00000000 */ nop
/* 4A1E4 8006EDE4 00000000 */ nop
/* 4A1E8 8006EDE8 00000000 */ nop
/* 4A1EC 8006EDEC 00000000 */ nop

View File

@ -8,7 +8,7 @@ dlabel D_80099E40
.section .text
glabel func_8006D800
glabel __divdi3
/* 48C00 8006D800 04810008 */ bgez $a0, .L8006D824
/* 48C04 8006D804 0000C02D */ daddu $t8, $zero, $zero
/* 48C08 8006D808 2418FFFF */ addiu $t8, $zero, -1

View File

@ -1,7 +1,7 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_8006A650
glabel __createSpeedParam
/* 45A50 8006A650 3C05A460 */ lui $a1, 0xa460
/* 45A54 8006A654 34A50014 */ ori $a1, $a1, 0x14
/* 45A58 8006A658 3C06A460 */ lui $a2, 0xa460

View File

@ -139,7 +139,7 @@ glabel __osInitialize_common
/* 45D18 8006A918 00822021 */ addu $a0, $a0, $v0
/* 45D1C 8006A91C 00862021 */ addu $a0, $a0, $a2
/* 45D20 8006A920 24060000 */ addiu $a2, $zero, 0
/* 45D24 8006A924 0C01B8C4 */ jal func_8006E310
/* 45D24 8006A924 0C01B8C4 */ jal __udivdi3
/* 45D28 8006A928 24070004 */ addiu $a3, $zero, 4
/* 45D2C 8006A92C 3C048000 */ lui $a0, %hi(D_8000030C)
/* 45D30 8006A930 8C84030C */ lw $a0, %lo(D_8000030C)($a0)

View File

@ -17,7 +17,7 @@ glabel lldiv
/* 48AD4 8006D6D4 02202821 */ addu $a1, $s1, $zero
/* 48AD8 8006D6D8 AFBF0034 */ sw $ra, 0x34($sp)
/* 48ADC 8006D6DC 02403021 */ addu $a2, $s2, $zero
/* 48AE0 8006D6E0 0C01B600 */ jal func_8006D800
/* 48AE0 8006D6E0 0C01B600 */ jal __divdi3
/* 48AE4 8006D6E4 02603821 */ addu $a3, $s3, $zero
/* 48AE8 8006D6E8 00403021 */ addu $a2, $v0, $zero
/* 48AEC 8006D6EC 00603821 */ addu $a3, $v1, $zero

View File

@ -8,7 +8,7 @@ dlabel D_80099F40
.section .text
glabel func_8006DDC0
glabel __moddi3
/* 491C0 8006DDC0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 491C4 8006DDC4 AFB20010 */ sw $s2, 0x10($sp)
/* 491C8 8006DDC8 0000902D */ daddu $s2, $zero, $zero

View File

@ -8,7 +8,7 @@ dlabel D_8009A040
.section .text
glabel func_8006E310
glabel __udivdi3
/* 49710 8006E310 00E0482D */ daddu $t1, $a3, $zero
/* 49714 8006E314 00C0402D */ daddu $t0, $a2, $zero
/* 49718 8006E318 150000DF */ bnez $t0, .L8006E698

View File

@ -8,7 +8,7 @@ dlabel D_8009A140
.section .text
glabel func_8006E870
glabel __umoddi3
/* 49C70 8006E870 27BDFFF8 */ addiu $sp, $sp, -8
/* 49C74 8006E874 00E0402D */ daddu $t0, $a3, $zero
/* 49C78 8006E878 00C0482D */ daddu $t1, $a2, $zero

View File

@ -69,7 +69,7 @@ glabel _Litob
/* 46E6C 8006BA6C 02802021 */ addu $a0, $s4, $zero
/* 46E70 8006BA70 02A02821 */ addu $a1, $s5, $zero
/* 46E74 8006BA74 27B00018 */ addiu $s0, $sp, 0x18
/* 46E78 8006BA78 0C01BA1C */ jal func_8006E870
/* 46E78 8006BA78 0C01BA1C */ jal __umoddi3
/* 46E7C 8006BA7C 02128021 */ addu $s0, $s0, $s2
/* 46E80 8006BA80 02C31021 */ addu $v0, $s6, $v1
/* 46E84 8006BA84 90420000 */ lbu $v0, ($v0)
@ -78,7 +78,7 @@ glabel _Litob
.L8006BA90:
/* 46E90 8006BA90 00003021 */ addu $a2, $zero, $zero
/* 46E94 8006BA94 02802021 */ addu $a0, $s4, $zero
/* 46E98 8006BA98 0C01B8C4 */ jal func_8006E310
/* 46E98 8006BA98 0C01B8C4 */ jal __udivdi3
/* 46E9C 8006BA9C 02A02821 */ addu $a1, $s5, $zero
/* 46EA0 8006BAA0 AE220000 */ sw $v0, ($s1)
/* 46EA4 8006BAA4 AE230004 */ sw $v1, 4($s1)

View File

@ -1,5 +1,11 @@
.include "macro.inc"
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64 # allow use of 64-bit general purpose registers
.section .text, "ax"
glabel bcmp
/* 46C70 8006B870 00851026 */ xor $v0, $a0, $a1

View File

@ -0,0 +1,33 @@
.include "macro.inc"
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64 # allow use of 64-bit general purpose registers
.section .text, "ax"
/* 459D0 8006A5D0 00000000 */ nop
/* 459D4 8006A5D4 00000000 */ nop
/* 459D8 8006A5D8 00000000 */ nop
/* 459DC 8006A5DC 00000000 */ nop
/* 459E0 8006A5E0 00000000 */ nop
/* 459E4 8006A5E4 00000000 */ nop
/* 459E8 8006A5E8 00000000 */ nop
/* 459EC 8006A5EC 00000000 */ nop
/* 459F0 8006A5F0 00000000 */ nop
/* 459F4 8006A5F4 00000000 */ nop
/* 459F8 8006A5F8 00000000 */ nop
/* 459FC 8006A5FC 00000000 */ nop
/* 45A00 8006A600 00000000 */ nop
/* 45A04 8006A604 00000000 */ nop
/* 45A08 8006A608 00000000 */ nop
/* 45A0C 8006A60C 00000000 */ nop
/* 45A10 8006A610 00000000 */ nop
/* 45A14 8006A614 00000000 */ nop
/* 45A18 8006A618 00000000 */ nop
/* 45A1C 8006A61C 00000000 */ nop
/* 45A20 8006A620 00000000 */ nop
/* 45A24 8006A624 00000000 */ nop
/* 45A28 8006A628 00000000 */ nop
/* 45A2C 8006A62C 00000000 */ nop

View File

@ -165,7 +165,7 @@ segments:
- [0x3FD70, hasm, os/bzero]
- [0x3FE10, c, os/string, gcc_272 -O3]
- [0x3FEA0, c, os/xprintf, gcc_272 -O3]
- [0x408EC, c, os/sprintf] # MOVE_ADDU
- [0x408EC, c, os/sprintf, gcc_272 -O3]
- [0x40980, c, os/osCreateMesgQueue]
- [0x409B0, c, os/osJamMesg, gcc_272 -O3]
- [0x40AF0, c, os/osRecvMesg, gcc_272 -O3]
@ -178,8 +178,8 @@ segments:
- [0x410C0, c, os/sirawdma, gcc_272 -O3]
- [0x41170, c, os/siacs, gcc_272 -O3]
- [0x41260, c, os/createthread, gcc_272 -O3]
- [0x41330, c, os/osGetThreadPri]
- [0x41350, c, os/osSetThreadPri] # MOVE_ADDU
- [0x41330, c, os/osGetThreadPri, gcc_272 -O3]
- [0x41350, c, os/osSetThreadPri, gcc_272 -O3]
- [0x41420, c, os/startthread, gcc_272 -O3]
- [0x41540, c, os/stopthread, gcc_272 -O3]
- [0x41600, c, os/thread, gcc_272 -O3]
@ -196,7 +196,7 @@ segments:
- [0x41DB0, c, os/vigetcurrframebuf, gcc_272 -O3]
- [0x41DF0, c, os/vigetnextframebuf, gcc_272 -O3]
- [0x41E30, c, os/vigetmode, gcc_272 -O3]
- [0x41E70, c, os/41e70_len_340]
- [0x41E70, c, os/vimgr]
- [0x421B0, c, os/visetevent, gcc_272 -O3]
- [0x42210, c, os/visetmode, gcc_272 -O3]
- [0x42260, c, os/visetspecial, gcc_272 -O3]
@ -231,9 +231,10 @@ segments:
- [0x44AD0, c, os/pfsselectbank, gcc_272 -O3]
- [0x44B40, c, os/contpfs, gcc_272 -O3]
- [0x455D0, c, os/contramread, gcc_272 -O3]
- [0x457C0, c, os/contramwrite]
- [0x457C0, c, os/contramwrite, gcc_272 -O3]
- [0x459D0, hasm, os/parameters] # Needs actual symbols added
- [0x45A30, c, os/afterprenmi, gcc_272 -O3]
- [0x45A50, c, os/45a50_len_3a0]
- [0x45A50, c, os/initialize]
- [0x45DF0, hasm, os/exceptasm]
- [0x46760, hasm, os/__osDisableInt]
- [0x467D0, hasm, os/__osRestoreInt]
@ -244,7 +245,9 @@ segments:
- [0x46970, c, os/epirawread, gcc_272 -O3]
- [0x46AE0, c, os/epirawwrite, gcc_272 -O3]
- [0x46C50, c, os/ai, gcc_272 -O3]
- [0x46C70, c, os/46c70_len_e00]
- [0x46C70, hasm, os/bcmp]
- [0x46D80, c, os/xlitob]
- [0x46FD0, c, os/xldtob]
- [0x47A60, hasm, os/__osGetCause]
- [0x47A70, hasm, os/__osGetSR]
- [0x47A80, hasm, os/__osSetCompare]
@ -258,21 +261,23 @@ segments:
- [0x47B30, c, os/sprawdma, gcc_272 -O3]
- [0x47BC0, c, os/sirawread, gcc_272 -O3]
- [0x47C10, c, os/sirawwrite, gcc_272 -O3]
- [0x47C60, c, os/47c60_len_f0] # MOVE_ADDU
- [0x47C60, c, os/crc, gcc_272 -O3]
- [0x47D50, c, os/destroythread, gcc_272 -O3]
- [0x47E30, hasm, os/osMapTLBRdb]
- [0x47E90, c, os/47e90_len_110]
- [0x47FA0, c, os/47fa0_len_20]
- [0x47E90, c, os/vi]
- [0x47FA0, c, os/vigetcurrcontext]
- [0x47FC0, hasm, os/guNormalize]
- [0x48020, c, os/pfschecker, gcc_272 -O3]
- [0x48740, c, os/pfsisplug, gcc_272 -O3]
- [0x48A20, c, os/ldiv]
- [0x48BE0, c, os/osSiDeviceBusy]
- [0x48C00, c, os/48c00_len_5c0]
- [0x491C0, c, os/491c0_len_f80]
- [0x49C70, c, os/49C70]
- [0x4A140, c, os/4a140_len_70]
- [0x4A1B0, c, os/4a1b0_len_40]
- [0x48C00, c, os/divdi3]
- [0x491C0, c, os/moddi3]
- [0x491C0, c, os/udivdi3]
- [0x49C70, c, os/umoddi3]
- [0x4A140, c, os/strcpy, gcc_272 -O1]
- [0x4A170, c, os/strcmp, gcc_272 -O1]
- [0x4A1B0, c, os/memset, gcc_272 -O1]
- [0x4A1F0, hasm, os/decode_yay0]
- [0x4A2A0, c, os/osFlash]
- [0x4AC90, pm_effect_loads, effect_loads]

View File

@ -1067,9 +1067,9 @@ __osPfsRWInode = 0x80069E8C; // type:func rom:0x4528C
__osContRamRead = 0x8006A1D0; // type:func rom:0x455D0
osContRamWrite = 0x8006A3C0; // type:func rom:0x457C0
osAfterPreNMI = 0x8006A630; // type:func rom:0x45A30
func_8006A650 = 0x8006A650; // type:func rom:0x45A50
__createSpeedParam = 0x8006A650; // type:func rom:0x45A50
__osInitialize_common = 0x8006A708; // type:func rom:0x45B08
func_8006A9E0 = 0x8006A9E0; // type:func rom:0x45DE0
__osInitialize_autodetect = 0x8006A9E0; // type:func rom:0x45DE0
func_8006A9F0 = 0x8006A9F0; // type:func rom:0x45DF0
osExceptionPreamble = 0x8006AA00; // type:label rom:0x45E00
func_8006AA34 = 0x8006AA34; // type:func rom:0x45E34
@ -1107,11 +1107,11 @@ __osSpSetPc = 0x8006C700; // type:func rom:0x47B00
__osSpRawStartDma = 0x8006C730; // type:func rom:0x47B30
__osSiRawReadIo = 0x8006C7C0; // type:func rom:0x47BC0
__osSiRawWriteIo = 0x8006C810; // type:func rom:0x47C10
osContAddressCrc = 0x8006C860; // type:func rom:0x47C60
__osContAddressCrc = 0x8006C860; // type:func rom:0x47C60
__osContDataCrc = 0x8006C8CC; // type:func rom:0x47CCC
osDestroyThread = 0x8006C950; // type:func rom:0x47D50
osMapTLBRdb = 0x8006CA30; // type:func rom:0x47E30
osViInit = 0x8006CA90; // type:func rom:0x47E90
__osViInit = 0x8006CA90; // type:func rom:0x47E90
osViGetCurrentContext = 0x8006CBA0; // type:func rom:0x47FA0
guNormalize = 0x8006CBC0; // type:func rom:0x47FC0
osPfsChecker = 0x8006CC20; // type:func rom:0x48020
@ -1123,10 +1123,10 @@ osPfsGetInitData = 0x8006D560; // type:func rom:0x48960
ldiv = 0x8006D620; // type:func rom:0x48A20
lldiv = 0x8006D6A4; // type:func rom:0x48AA4
__osSiDeviceBusy = 0x8006D7E0; // type:func rom:0x48BE0
func_8006D800 = 0x8006D800; // type:func rom:0x48C00
func_8006DDC0 = 0x8006DDC0; // type:func rom:0x491C0
func_8006E310 = 0x8006E310; // type:func rom:0x49710
func_8006E870 = 0x8006E870; // type:func rom:0x49C70
__divdi3 = 0x8006D800; // type:func rom:0x48C00
__moddi3 = 0x8006DDC0; // type:func rom:0x491C0
__udivdi3 = 0x8006E310; // type:func rom:0x49710
__umoddi3 = 0x8006E870; // type:func rom:0x49C70
strcpy = 0x8006ED40; // type:func rom:0x4A140
strcmp = 0x8006ED70; // type:func rom:0x4A170
memset = 0x8006EDB0; // type:func rom:0x4A1B0