Decompile _Litob

This commit is contained in:
Ryan Dwyer
2021-01-30 10:48:28 +10:00
parent d88f9cef04
commit 1cc81c13b3
9 changed files with 119 additions and 269 deletions
+1 -1
View File
@@ -191,5 +191,5 @@
build/ROMID/lib/ultra/os/jammesg.o (section); \
build/ROMID/lib/ultra/io/pigetcmdq.o (section); \
build/ROMID/lib/ultra/io/pirawread.o (section); \
build/ROMID/lib/lib_520c0.o (section); \
build/ROMID/lib/ultra/libc/xlitob.o (section); \
build/ROMID/lib/lib_52360.o (section);
+3 -10
View File
@@ -2967,16 +2967,9 @@ OSViMode osViModeNtscLan1 = {
VINTR(2), // vIntr
}}};
u32 var80061330 = 0x30313233;
u32 var80061334 = 0x34353637;
u32 var80061338 = 0x38396162;
u32 var8006133c = 0x63646566;
u32 var80061340 = 0x00000000;
u32 var80061344 = 0x30313233;
u32 var80061348 = 0x34353637;
u32 var8006134c = 0x38394142;
u32 var80061350 = 0x43444546;
u32 var80061354 = 0x00000000;
char ldigs[] = "0123456789abcdef";
char udigs[] = "0123456789ABCDEF";
u32 var80061358 = 0x00000000;
u32 var8006135c = 0x00000000;
u32 var80061360 = 0xb6000000;
+54
View File
@@ -1,6 +1,60 @@
#ifndef _ULTRA64_OS_MISC_H_
#define _ULTRA64_OS_MISC_H_
/* float properties */
#define _D0 0
#define _DBIAS 0x3ff
#define _DLONG 1
#define _DOFF 4
#define _FBIAS 0x7e
#define _FOFF 7
#define _FRND 1
#define _LBIAS 0x3ffe
#define _LOFF 15
/* integer properties */
#define _C2 1
#define _CSIGN 1
#define _ILONG 0
#define _MBMAX 8
#define NAN 2
#define INF 1
#define FINITE -1
#define _DFRAC ((1 << _DOFF) - 1)
#define _DMASK (0x7fff & ~_DFRAC)
#define _DMAX ((1 << (15 - _DOFF)) - 1)
#define _DNAN (0x8000 | _DMAX << _DOFF | 1 << (_DOFF - 1))
#define _DSIGN 0x8000
#define _D1 1 /* big-endian order */
#define _D2 2
#define _D3 3
#define FLAGS_SPACE 1
#define FLAGS_PLUS 2
#define FLAGS_MINUS 4
#define FLAGS_HASH 8
#define FLAGS_ZERO 16
typedef struct {
union {
/* 00 */ long long s64;
double f64;
} value;
/* 08 */ char *buff;
/* 0c */ int n0;
/* 10 */ int num_leading_zeros;
/* 14 */ int part2_len;
/* 18 */ int num_mid_zeros;
/* 1c */ int part3_len;
/* 20 */ int num_trailing_zeros;
/* 24 */ int precision;
/* 28 */ int width;
/* 2c */ unsigned int size;
/* 30 */ unsigned int flags;
/* 34 */ char length;
} printf_struct;
/* Miscellaneous OS functions */
void osInitialize(void);
+2 -2
View File
@@ -202,8 +202,8 @@ extern u32 var800611f0;
extern OSViMode osViModePalLan1;
extern OSViMode osViModeMpalLan1;
extern OSViMode osViModeNtscLan1;
extern u32 var80061330;
extern u32 var80061344;
extern char ldigs[];
extern char udigs[];
extern u32 var80061360;
extern u32 var80061380;
extern u32 var800613a0;
-8
View File
@@ -1,8 +0,0 @@
#ifndef _IN_LIB_LIB_520C0_H
#define _IN_LIB_LIB_520C0_H
#include <ultra64.h>
#include "types.h"
u32 func000520c0(void);
#endif
-192
View File
@@ -1,192 +0,0 @@
#include <ultra64.h>
GLOBAL_ASM(
glabel func000520c0
/* 520c0: 27bdff70 */ addiu $sp,$sp,-144
/* 520c4: afb10020 */ sw $s1,0x20($sp)
/* 520c8: 30a200ff */ andi $v0,$a1,0xff
/* 520cc: 24030058 */ addiu $v1,$zero,0x58
/* 520d0: 00808825 */ or $s1,$a0,$zero
/* 520d4: afbf002c */ sw $ra,0x2c($sp)
/* 520d8: afb30028 */ sw $s3,0x28($sp)
/* 520dc: afb20024 */ sw $s2,0x24($sp)
/* 520e0: afb0001c */ sw $s0,0x1c($sp)
/* 520e4: 14620004 */ bne $v1,$v0,.L000520f8
/* 520e8: afa50094 */ sw $a1,0x94($sp)
/* 520ec: 3c138006 */ lui $s3,%hi(var80061344)
/* 520f0: 10000003 */ b .L00052100
/* 520f4: 26731344 */ addiu $s3,$s3,%lo(var80061344)
.L000520f8:
/* 520f8: 3c138006 */ lui $s3,%hi(var80061330)
/* 520fc: 26731330 */ addiu $s3,$s3,%lo(var80061330)
.L00052100:
/* 52100: 2401006f */ addiu $at,$zero,0x6f
/* 52104: 14410003 */ bne $v0,$at,.L00052114
/* 52108: 24100018 */ addiu $s0,$zero,0x18
/* 5210c: 10000009 */ b .L00052134
/* 52110: 24090008 */ addiu $t1,$zero,0x8
.L00052114:
/* 52114: 24010078 */ addiu $at,$zero,0x78
/* 52118: 10410005 */ beq $v0,$at,.L00052130
/* 5211c: 24080010 */ addiu $t0,$zero,0x10
/* 52120: 10620003 */ beq $v1,$v0,.L00052130
/* 52124: 00000000 */ nop
/* 52128: 10000001 */ b .L00052130
/* 5212c: 2408000a */ addiu $t0,$zero,0xa
.L00052130:
/* 52130: 01004825 */ or $t1,$t0,$zero
.L00052134:
/* 52134: 8e380000 */ lw $t8,0x0($s1)
/* 52138: 8e390004 */ lw $t9,0x4($s1)
/* 5213c: 24010064 */ addiu $at,$zero,0x64
/* 52140: afb80060 */ sw $t8,0x60($sp)
/* 52144: afb80040 */ sw $t8,0x40($sp)
/* 52148: afb90044 */ sw $t9,0x44($sp)
/* 5214c: 10410004 */ beq $v0,$at,.L00052160
/* 52150: afb90064 */ sw $t9,0x64($sp)
/* 52154: 24010069 */ addiu $at,$zero,0x69
/* 52158: 54410010 */ bnel $v0,$at,.L0005219c
/* 5215c: 8faa0060 */ lw $t2,0x60($sp)
.L00052160:
/* 52160: 8fac0040 */ lw $t4,0x40($sp)
/* 52164: 5d80000d */ bgtzl $t4,.L0005219c
/* 52168: 8faa0060 */ lw $t2,0x60($sp)
/* 5216c: 05800003 */ bltz $t4,.L0005217c
/* 52170: 8fae0060 */ lw $t6,0x60($sp)
/* 52174: 10000009 */ b .L0005219c
/* 52178: 8faa0060 */ lw $t2,0x60($sp)
.L0005217c:
/* 5217c: 8faf0064 */ lw $t7,0x64($sp)
/* 52180: 01c0c027 */ nor $t8,$t6,$zero
/* 52184: 2de10001 */ sltiu $at,$t7,0x1
/* 52188: 0301c021 */ addu $t8,$t8,$at
/* 5218c: 000fc823 */ negu $t9,$t7
/* 52190: afb90064 */ sw $t9,0x64($sp)
/* 52194: afb80060 */ sw $t8,0x60($sp)
/* 52198: 8faa0060 */ lw $t2,0x60($sp)
.L0005219c:
/* 5219c: 8fab0064 */ lw $t3,0x64($sp)
/* 521a0: 24080017 */ addiu $t0,$zero,0x17
/* 521a4: 15400006 */ bnez $t2,.L000521c0
/* 521a8: 8fa40060 */ lw $a0,0x60($sp)
/* 521ac: 55600005 */ bnezl $t3,.L000521c4
/* 521b0: 24100017 */ addiu $s0,$zero,0x17
/* 521b4: 8e2c0024 */ lw $t4,0x24($s1)
/* 521b8: 51800010 */ beqzl $t4,.L000521fc
/* 521bc: 27b20078 */ addiu $s2,$sp,0x78
.L000521c0:
/* 521c0: 24100017 */ addiu $s0,$zero,0x17
.L000521c4:
/* 521c4: 8fa50064 */ lw $a1,0x64($sp)
/* 521c8: 01203825 */ or $a3,$t1,$zero
/* 521cc: 000937c3 */ sra $a2,$t1,0x1f
/* 521d0: afa8004c */ sw $t0,0x4c($sp)
/* 521d4: 0c012b8b */ jal __ull_rem
/* 521d8: afa90070 */ sw $t1,0x70($sp)
/* 521dc: 8fa8004c */ lw $t0,0x4c($sp)
/* 521e0: 00737021 */ addu $t6,$v1,$s3
/* 521e4: 91cf0000 */ lbu $t7,0x0($t6)
/* 521e8: 27b20078 */ addiu $s2,$sp,0x78
/* 521ec: 8fa90070 */ lw $t1,0x70($sp)
/* 521f0: 0248c021 */ addu $t8,$s2,$t0
/* 521f4: a30f0000 */ sb $t7,0x0($t8)
/* 521f8: 27b20078 */ addiu $s2,$sp,0x78
.L000521fc:
/* 521fc: 8fa40060 */ lw $a0,0x60($sp)
/* 52200: 8fa50064 */ lw $a1,0x64($sp)
/* 52204: 01203825 */ or $a3,$t1,$zero
/* 52208: 000937c3 */ sra $a2,$t1,0x1f
/* 5220c: 0c012b9a */ jal __ull_div
/* 52210: afa90070 */ sw $t1,0x70($sp)
/* 52214: 8fa90070 */ lw $t1,0x70($sp)
/* 52218: ae230004 */ sw $v1,0x4($s1)
/* 5221c: 0440002b */ bltz $v0,.L000522cc
/* 52220: ae220000 */ sw $v0,0x0($s1)
/* 52224: 1c400003 */ bgtz $v0,.L00052234
/* 52228: 00000000 */ nop
/* 5222c: 50600028 */ beqzl $v1,.L000522d0
/* 52230: 240c0018 */ addiu $t4,$zero,0x18
.L00052234:
/* 52234: 1a000025 */ blez $s0,.L000522cc
/* 52238: 000967c3 */ sra $t4,$t1,0x1f
/* 5223c: 8e2a0000 */ lw $t2,0x0($s1)
/* 52240: 8e2b0004 */ lw $t3,0x4($s1)
/* 52244: afa9003c */ sw $t1,0x3c($sp)
/* 52248: afac0038 */ sw $t4,0x38($sp)
/* 5224c: afaa0040 */ sw $t2,0x40($sp)
/* 52250: afab0044 */ sw $t3,0x44($sp)
/* 52254: 8fae0038 */ lw $t6,0x38($sp)
.L00052258:
/* 52258: 8faf003c */ lw $t7,0x3c($sp)
/* 5225c: 27a40050 */ addiu $a0,$sp,0x50
/* 52260: 8fa60040 */ lw $a2,0x40($sp)
/* 52264: 8fa70044 */ lw $a3,0x44($sp)
/* 52268: afae0010 */ sw $t6,0x10($sp)
/* 5226c: 0c0129a0 */ jal lldiv
/* 52270: afaf0014 */ sw $t7,0x14($sp)
/* 52274: 8fb80050 */ lw $t8,0x50($sp)
/* 52278: 8fb90054 */ lw $t9,0x54($sp)
/* 5227c: 2604ffff */ addiu $a0,$s0,-1
/* 52280: ae380000 */ sw $t8,0x0($s1)
/* 52284: ae390004 */ sw $t9,0x4($s1)
/* 52288: 8fab005c */ lw $t3,0x5c($sp)
/* 5228c: 02447821 */ addu $t7,$s2,$a0
/* 52290: 00808025 */ or $s0,$a0,$zero
/* 52294: 01736821 */ addu $t5,$t3,$s3
/* 52298: 91ae0000 */ lbu $t6,0x0($t5)
/* 5229c: a1ee0000 */ sb $t6,0x0($t7)
/* 522a0: 8e380000 */ lw $t8,0x0($s1)
/* 522a4: 8e390004 */ lw $t9,0x4($s1)
/* 522a8: afb80040 */ sw $t8,0x40($sp)
/* 522ac: 07000007 */ bltz $t8,.L000522cc
/* 522b0: afb90044 */ sw $t9,0x44($sp)
/* 522b4: 1f000003 */ bgtz $t8,.L000522c4
/* 522b8: 00000000 */ nop
/* 522bc: 53200004 */ beqzl $t9,.L000522d0
/* 522c0: 240c0018 */ addiu $t4,$zero,0x18
.L000522c4:
/* 522c4: 5e00ffe4 */ bgtzl $s0,.L00052258
/* 522c8: 8fae0038 */ lw $t6,0x38($sp)
.L000522cc:
/* 522cc: 240c0018 */ addiu $t4,$zero,0x18
.L000522d0:
/* 522d0: 01903023 */ subu $a2,$t4,$s0
/* 522d4: ae260014 */ sw $a2,0x14($s1)
/* 522d8: 8e240008 */ lw $a0,0x8($s1)
/* 522dc: 0c012978 */ jal memcpy
/* 522e0: 02502821 */ addu $a1,$s2,$s0
/* 522e4: 8e250014 */ lw $a1,0x14($s1)
/* 522e8: 8e240024 */ lw $a0,0x24($s1)
/* 522ec: 00a4082a */ slt $at,$a1,$a0
/* 522f0: 10200002 */ beqz $at,.L000522fc
/* 522f4: 00856823 */ subu $t5,$a0,$a1
/* 522f8: ae2d0010 */ sw $t5,0x10($s1)
.L000522fc:
/* 522fc: 04830010 */ bgezl $a0,.L00052340
/* 52300: 8fbf002c */ lw $ra,0x2c($sp)
/* 52304: 8e2e0030 */ lw $t6,0x30($s1)
/* 52308: 24010010 */ addiu $at,$zero,0x10
/* 5230c: 31cf0014 */ andi $t7,$t6,0x14
/* 52310: 55e1000b */ bnel $t7,$at,.L00052340
/* 52314: 8fbf002c */ lw $ra,0x2c($sp)
/* 52318: 8e380028 */ lw $t8,0x28($s1)
/* 5231c: 8e39000c */ lw $t9,0xc($s1)
/* 52320: 8e220010 */ lw $v0,0x10($s1)
/* 52324: 03195023 */ subu $t2,$t8,$t9
/* 52328: 01425823 */ subu $t3,$t2,$v0
/* 5232c: 01658023 */ subu $s0,$t3,$a1
/* 52330: 1a000002 */ blez $s0,.L0005233c
/* 52334: 00506021 */ addu $t4,$v0,$s0
/* 52338: ae2c0010 */ sw $t4,0x10($s1)
.L0005233c:
/* 5233c: 8fbf002c */ lw $ra,0x2c($sp)
.L00052340:
/* 52340: 8fb0001c */ lw $s0,0x1c($sp)
/* 52344: 8fb10020 */ lw $s1,0x20($sp)
/* 52348: 8fb20024 */ lw $s2,0x24($sp)
/* 5234c: 8fb30028 */ lw $s3,0x28($sp)
/* 52350: 03e00008 */ jr $ra
/* 52354: 27bd0090 */ addiu $sp,$sp,0x90
/* 52358: 00000000 */ nop
/* 5235c: 00000000 */ nop
);
-53
View File
@@ -1,58 +1,5 @@
#include <ultra64.h>
/* float properties */
#define _D0 0
#define _DBIAS 0x3ff
#define _DLONG 1
#define _DOFF 4
#define _FBIAS 0x7e
#define _FOFF 7
#define _FRND 1
#define _LBIAS 0x3ffe
#define _LOFF 15
/* integer properties */
#define _C2 1
#define _CSIGN 1
#define _ILONG 0
#define _MBMAX 8
#define NAN 2
#define INF 1
#define FINITE -1
#define _DFRAC ((1 << _DOFF) - 1)
#define _DMASK (0x7fff & ~_DFRAC)
#define _DMAX ((1 << (15 - _DOFF)) - 1)
#define _DNAN (0x8000 | _DMAX << _DOFF | 1 << (_DOFF - 1))
#define _DSIGN 0x8000
#define _D1 1 /* big-endian order */
#define _D2 2
#define _D3 3
typedef struct {
union {
/* 00 */ long long s64;
double f64;
} value;
/* 08 */ char *buff;
/* 0c */ int n0;
/* 10 */ int num_leading_zeros;
/* 14 */ int part2_len;
/* 18 */ int num_mid_zeros;
/* 1c */ int part3_len;
/* 20 */ int num_trailing_zeros;
/* 24 */ int precision;
/* 28 */ int width;
/* 2c */ unsigned int size;
/* 30 */ unsigned int flags;
/* 34 */ char length;
} printf_struct;
#define FLAGS_SPACE 1
#define FLAGS_PLUS 2
#define FLAGS_MINUS 4
#define FLAGS_HASH 8
#define FLAGS_ZERO 16
u32 _Ldtob(void);
short _Ldunscale(short *pex, printf_struct *px);
void _Genld(printf_struct *px, char code, char *p, short nsig, short xexp);
+56
View File
@@ -0,0 +1,56 @@
#include <ultra64.h>
#include "lib/libc/ldiv.h"
#include "game/data/data_000000.h"
#define BUFF_LEN 0x18
void _Litob(printf_struct *args, char type)
{
char buff[BUFF_LEN];
const char *digs;
s32 base;
s32 i;
unsigned long long ullval;
if (type == 'X') {
digs = udigs;
} else {
digs = ldigs;
}
base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16);
i = BUFF_LEN;
ullval = args->value.s64;
if ((type == 'd' || type == 'i') && args->value.s64 < 0) {
ullval = -ullval;
}
if (ullval != 0 || args->precision != 0) {
buff[--i] = digs[ullval % base];
}
args->value.s64 = ullval / base;
while (args->value.s64 > 0 && i > 0) {
lldiv_t qr = lldiv(args->value.s64, base);
args->value.s64 = qr.quot;
buff[--i] = digs[qr.rem];
}
args->part2_len = BUFF_LEN - i;
memcpy(args->buff, buff + i, args->part2_len);
if (args->part2_len < args->precision) {
args->num_leading_zeros = args->precision - args->part2_len;
}
if (args->precision < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) {
i = args->width - args->n0 - args->num_leading_zeros - args->part2_len;
if (i > 0) {
args->num_leading_zeros += i;
}
}
}
+3 -3
View File
@@ -142,7 +142,7 @@ glabel func0004e690
.L0004e890:
/* 4e890: 02002025 */ or $a0,$s0,$zero
/* 4e894: 03277821 */ addu $t7,$t9,$a3
/* 4e898: 0c014830 */ jal func000520c0
/* 4e898: 0c014830 */ jal _Litob
/* 4e89c: ae0f0008 */ sw $t7,0x8($s0)
/* 4e8a0: 10000114 */ b .L0004ecf4
/* 4e8a4: 8fbf0014 */ lw $ra,0x14($sp)
@@ -234,7 +234,7 @@ glabel func0004e690
.L0004e9e0:
/* 4e9e0: 02002025 */ or $a0,$s0,$zero
/* 4e9e4: 03077821 */ addu $t7,$t8,$a3
/* 4e9e8: 0c014830 */ jal func000520c0
/* 4e9e8: 0c014830 */ jal _Litob
/* 4e9ec: ae0f0008 */ sw $t7,0x8($s0)
/* 4e9f0: 100000c0 */ b .L0004ecf4
/* 4e9f4: 8fbf0014 */ lw $ra,0x14($sp)
@@ -410,7 +410,7 @@ glabel func0004e690
/* 4ec58: ae0e0004 */ sw $t6,0x4($s0)
/* 4ec5c: 01e77021 */ addu $t6,$t7,$a3
/* 4ec60: ae180000 */ sw $t8,0x0($s0)
/* 4ec64: 0c014830 */ jal func000520c0
/* 4ec64: 0c014830 */ jal _Litob
/* 4ec68: ae0e0008 */ sw $t6,0x8($s0)
/* 4ec6c: 10000021 */ b .L0004ecf4
/* 4ec70: 8fbf0014 */ lw $ra,0x14($sp)