Decompile func0f166eb4

This commit is contained in:
Ryan Dwyer 2021-02-09 19:30:05 +10:00
parent 7f31fcb21e
commit 52a50c018e
10 changed files with 31 additions and 65 deletions

View File

@ -324,7 +324,7 @@ glabel boot00001180
/* 140c: afbc0070 */ sw $gp,0x70($sp)
/* 1410: afbd0074 */ sw $sp,0x74($sp)
/* 1414: afbe0078 */ sw $s8,0x78($sp)
/* 1418: 0c001d3c */ jal func000074f0
/* 1418: 0c001d3c */ jal rzipInflate
/* 141c: 00000000 */ nop
/* 1420: 8fbf0000 */ lw $ra,0x0($sp)
/* 1424: 8fa10004 */ lw $at,0x4($sp)

View File

@ -44,61 +44,27 @@ u32 func0f166ea8(u32 *filetableaddr)
return 0;
}
GLOBAL_ASM(
glabel func0f166eb4
/* f166eb4: 27bdebd0 */ addiu $sp,$sp,-5168
/* f166eb8: afbf0014 */ sw $ra,0x14($sp)
/* f166ebc: afa41430 */ sw $a0,0x1430($sp)
/* f166ec0: afa51434 */ sw $a1,0x1434($sp)
/* f166ec4: afa61438 */ sw $a2,0x1438($sp)
/* f166ec8: afa7143c */ sw $a3,0x143c($sp)
/* f166ecc: 0fc59b95 */ jal fileGetRomSizeByTableAddress
/* f166ed0: 00c02025 */ or $a0,$a2,$zero
/* f166ed4: 8fa41434 */ lw $a0,0x1434($sp)
/* f166ed8: 8fa71430 */ lw $a3,0x1430($sp)
/* f166edc: 8fa91438 */ lw $t1,0x1438($sp)
/* f166ee0: 14800006 */ bnez $a0,.L0f166efc
/* f166ee4: 00403025 */ or $a2,$v0,$zero
/* f166ee8: 00e02025 */ or $a0,$a3,$zero
/* f166eec: 0c003504 */ jal func0000d410
/* f166ef0: 8d250000 */ lw $a1,0x0($t1)
/* f166ef4: 1000001c */ b .L0f166f68
/* f166ef8: 8fbf0014 */ lw $ra,0x14($sp)
.L0f166efc:
/* f166efc: 2408fff8 */ addiu $t0,$zero,-8
/* f166f00: 244e0007 */ addiu $t6,$v0,0x7
/* f166f04: 01c87824 */ and $t7,$t6,$t0
/* f166f08: 00e41821 */ addu $v1,$a3,$a0
/* f166f0c: 006fc023 */ subu $t8,$v1,$t7
/* f166f10: 0307c823 */ subu $t9,$t8,$a3
/* f166f14: 2f210008 */ sltiu $at,$t9,0x8
/* f166f18: 10200004 */ beqz $at,.L0f166f2c
/* f166f1c: 24cb0007 */ addiu $t3,$a2,0x7
/* f166f20: 8faa143c */ lw $t2,0x143c($sp)
/* f166f24: 1000000f */ b .L0f166f64
/* f166f28: ad400000 */ sw $zero,0x0($t2)
.L0f166f2c:
/* f166f2c: 01686024 */ and $t4,$t3,$t0
/* f166f30: 006c2023 */ subu $a0,$v1,$t4
/* f166f34: 8d250000 */ lw $a1,0x0($t1)
/* f166f38: 0c003504 */ jal func0000d410
/* f166f3c: afa4001c */ sw $a0,0x1c($sp)
/* f166f40: 8fa4001c */ lw $a0,0x1c($sp)
/* f166f44: 8fa51430 */ lw $a1,0x1430($sp)
/* f166f48: 0c001d3c */ jal func000074f0
/* f166f4c: 27a6002c */ addiu $a2,$sp,0x2c
/* f166f50: 8fb8143c */ lw $t8,0x143c($sp)
/* f166f54: 244d000f */ addiu $t5,$v0,0xf
/* f166f58: 35ae000f */ ori $t6,$t5,0xf
/* f166f5c: 39cf000f */ xori $t7,$t6,0xf
/* f166f60: af0f0000 */ sw $t7,0x0($t8)
.L0f166f64:
/* f166f64: 8fbf0014 */ lw $ra,0x14($sp)
.L0f166f68:
/* f166f68: 27bd1430 */ addiu $sp,$sp,0x1430
/* f166f6c: 03e00008 */ jr $ra
/* f166f70: 00000000 */ nop
);
void func0f166eb4(void *dst, u32 scratchlen, u32 *romaddrptr, struct fileinfo *info)
{
u32 romsize = fileGetRomSizeByTableAddress(romaddrptr);
u8 buffer[5 * 1024];
u32 tmp;
if (scratchlen == 0) {
// DMA with no inflate
func0000d410(dst, (void *)*romaddrptr, romsize);
} else {
// DMA the compressed data to scratch space then inflate
u32 scratchaddr = ((u32)dst + scratchlen) - (romsize + 7 & 0xfffffff8);
if (scratchaddr - (u32)dst < 8) {
info->size = 0;
} else {
func0000d410((void *)scratchaddr, (void *)*romaddrptr, romsize);
info->size = ALIGN16(rzipInflate((void *)scratchaddr, dst, buffer));
}
}
}
GLOBAL_ASM(
glabel func0f166f74

View File

@ -7356,7 +7356,7 @@ glabel func0f15d9a8
/* f15d9c4: 8fa51424 */ lw $a1,0x1424($sp)
/* f15d9c8: 10400005 */ beqz $v0,.L0f15d9e0
/* f15d9cc: 8fa61428 */ lw $a2,0x1428($sp)
/* f15d9d0: 0c001d3c */ jal func000074f0
/* f15d9d0: 0c001d3c */ jal rzipInflate
/* f15d9d4: 27a6001c */ addiu $a2,$sp,0x1c
/* f15d9d8: 10000004 */ b .L0f15d9ec
/* f15d9dc: 00401825 */ or $v1,$v0,$zero

View File

@ -191,7 +191,7 @@ glabel func0f16e818
/* f16ea7c: 3c04800b */ lui $a0,%hi(var800ab540)
/* f16ea80: 8c84b540 */ lw $a0,%lo(var800ab540)($a0)
/* f16ea84: 02802825 */ or $a1,$s4,$zero
/* f16ea88: 0c001d3c */ jal func000074f0
/* f16ea88: 0c001d3c */ jal rzipInflate
/* f16ea8c: 27a6006c */ addiu $a2,$sp,0x6c
/* f16ea90: 02802025 */ or $a0,$s4,$zero
/* f16ea94: 02e02825 */ or $a1,$s7,$zero

View File

@ -7,7 +7,7 @@ void *fileGetRomAddress(s32 filenum);
u32 fileGetRomSizeByTableAddress(u32 *filetableaddr);
s32 fileGetRomSizeByFileNum(s32 filenum);
u32 func0f166ea8(u32 *filetableaddr);
void func0f166eb4(void *ptr, u32 len, void *table, struct fileinfo *info);
void func0f166eb4(void *dst, u32 scratchlen, u32 *romaddrptr, struct fileinfo *info);
void func0f166f74(void);
void func0f166ff0(u16 filenum, void *memaddr, s32 offset, u32 len);
u32 fileGetInflatedLength(u32 filenum);

View File

@ -3,7 +3,7 @@
#include <ultra64.h>
#include "types.h"
u32 func000074f0(void *src, void *dst, void *arg2);
u32 rzipInflate(void *src, void *dst, void *tmpbuffer);
u32 func00007908(void);
u32 func0000796c(void);
u32 func00007a10(void);

View File

@ -234,7 +234,7 @@ glabel func000070d0
/* 73f8: 3b06000f */ xori $a2,$t8,0xf
/* 73fc: 8fa40048 */ lw $a0,0x48($sp)
/* 7400: 02402825 */ or $a1,$s2,$zero
/* 7404: 0c001d3c */ jal func000074f0
/* 7404: 0c001d3c */ jal rzipInflate
/* 7408: 27a60068 */ addiu $a2,$sp,0x68
/* 740c: 26100001 */ addiu $s0,$s0,0x1
/* 7410: 0216082b */ sltu $at,$s0,$s6

View File

@ -79,7 +79,7 @@ const char var7005261c[] =
"RareZipAsmDecompress: input not in any known rare zip format\n";
GLOBAL_ASM(
glabel func000074f0
glabel rzipInflate
/* 74f0: 27bdf578 */ addiu $sp,$sp,-2696
/* 74f4: afb00a48 */ sw $s0,0xa48($sp)
/* 74f8: afb10a4c */ sw $s1,0xa4c($sp)

View File

@ -2044,7 +2044,7 @@ glabel func0000fc48
/* fd14: afa7143c */ sw $a3,0x143c($sp)
/* fd18: 8fa40028 */ lw $a0,0x28($sp)
/* fd1c: 8fa5143c */ lw $a1,0x143c($sp)
/* fd20: 0c001d3c */ jal func000074f0
/* fd20: 0c001d3c */ jal rzipInflate
/* fd24: 27a60034 */ addiu $a2,$sp,0x34
/* fd28: 02002025 */ or $a0,$s0,$zero
/* fd2c: 0c00e34c */ jal func00038d30

View File

@ -374,7 +374,7 @@ glabel mainInit
/* d7b8: 02012821 */ addu $a1,$s0,$at
/* d7bc: afa50048 */ sw $a1,0x48($sp)
/* d7c0: 02002025 */ or $a0,$s0,$zero
/* d7c4: 0c001d3c */ jal func000074f0
/* d7c4: 0c001d3c */ jal rzipInflate
/* d7c8: 27a60050 */ addiu $a2,$sp,0x50
/* d7cc: 3c050004 */ lui $a1,0x4
/* d7d0: 8faa0048 */ lw $t2,0x48($sp)
@ -686,7 +686,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
// texture = fb - 507 * 48;
//
// // Convert the texture format? Probably reading from fb and writing to texture
// func000074f0(fb, texture, &sp50);
// rzipInflate(fb, texture, &sp50);
//
// // Clear the framebuffer
// // This seems a bit wasteful. The buffer is 640x480, so the y increment