From 59c57061589a49a3181bd4fa8f08b29e40da954f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 4 Oct 2021 08:11:23 +1000 Subject: [PATCH] Decompile osGbpakReadWrite --- ld/libfiles.ntsc-beta.inc | 2 +- ld/libfiles.ntsc-final.inc | 2 +- ld/libfiles.pal-final.inc | 2 +- src/include/lib/lib_52360.h | 9 - src/include/libultra_internal.h | 1 + src/lib/lib_51570.c | 1 - src/lib/ultra/io/gbpakreadwrite.c | 202 +++++++----------- .../io/gbpakselectbank.c} | 2 +- 8 files changed, 79 insertions(+), 142 deletions(-) delete mode 100644 src/include/lib/lib_52360.h rename src/lib/{lib_52360.c => ultra/io/gbpakselectbank.c} (98%) diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index 880d9ced0..ac55fc41b 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -227,4 +227,4 @@ build/ROMID/lib/ultra/io/pigetcmdq.o (section); \ build/ROMID/lib/ultra/io/pirawread.o (section); \ build/ROMID/lib/ultra/libc/xlitob.o (section); \ - build/ROMID/lib/lib_52360.o (section); + build/ROMID/lib/ultra/io/gbpakselectbank.o (section); diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index c60c02068..3538dfcee 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -223,4 +223,4 @@ build/ROMID/lib/ultra/io/pigetcmdq.o (section); \ build/ROMID/lib/ultra/io/pirawread.o (section); \ build/ROMID/lib/ultra/libc/xlitob.o (section); \ - build/ROMID/lib/lib_52360.o (section); + build/ROMID/lib/ultra/io/gbpakselectbank.o (section); diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index c189ab420..27c3b6d3c 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -224,5 +224,5 @@ build/ROMID/lib/ultra/io/pigetcmdq.o (section); \ build/ROMID/lib/ultra/io/pirawread.o (section); \ build/ROMID/lib/ultra/libc/xlitob.o (section); \ - build/ROMID/lib/lib_52360.o (section); \ + build/ROMID/lib/ultra/io/gbpakselectbank.o (section); \ build/ROMID/lib/ultra/os/unmaptlball.o (section); diff --git a/src/include/lib/lib_52360.h b/src/include/lib/lib_52360.h deleted file mode 100644 index 2fd482a7d..000000000 --- a/src/include/lib/lib_52360.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_52360_H -#define _IN_LIB_LIB_52360_H -#include -#include "data.h" -#include "types.h" - -u32 func00052360(void); - -#endif diff --git a/src/include/libultra_internal.h b/src/include/libultra_internal.h index 87194c830..15bfadf89 100644 --- a/src/include/libultra_internal.h +++ b/src/include/libultra_internal.h @@ -68,5 +68,6 @@ s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank); u8 __osContAddressCrc(u16 inaddr); u8 __osContDataCrc(u8 *data); s32 __osPfsReleasePages(OSPfs *pfs, __OSInode *inode, u8 initial_page, u8 bank, __OSInodeUnit *final_page); +s32 __osGbpakSelectBank(OSPfs *pfs, u8 bank); #endif diff --git a/src/lib/lib_51570.c b/src/lib/lib_51570.c index 49f6d62d1..44f008d4f 100644 --- a/src/lib/lib_51570.c +++ b/src/lib/lib_51570.c @@ -4,7 +4,6 @@ #include "bss.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_52360.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/gbpakreadwrite.c b/src/lib/ultra/io/gbpakreadwrite.c index 39ca3b32e..ab5346881 100644 --- a/src/lib/ultra/io/gbpakreadwrite.c +++ b/src/lib/ultra/io/gbpakreadwrite.c @@ -2,134 +2,80 @@ #include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4b170.h" -#include "lib/lib_4e090.h" -#include "lib/lib_52360.h" #include "data.h" #include "types.h" -GLOBAL_ASM( -glabel osGbpakReadWrite -/* 513b0: 27bdffc0 */ addiu $sp,$sp,-64 -/* 513b4: afb10020 */ sw $s1,0x20($sp) -/* 513b8: afbf0034 */ sw $ra,0x34($sp) -/* 513bc: afb50030 */ sw $s5,0x30($sp) -/* 513c0: afb4002c */ sw $s4,0x2c($sp) -/* 513c4: afb30028 */ sw $s3,0x28($sp) -/* 513c8: afb20024 */ sw $s2,0x24($sp) -/* 513cc: afb0001c */ sw $s0,0x1c($sp) -/* 513d0: afa50044 */ sw $a1,0x44($sp) -/* 513d4: afa60048 */ sw $a2,0x48($sp) -/* 513d8: 908e0064 */ lbu $t6,0x64($a0) -/* 513dc: 30d1ffff */ andi $s1,$a2,0xffff -/* 513e0: 00111383 */ sra $v0,$s1,0xe -/* 513e4: 305500ff */ andi $s5,$v0,0xff -/* 513e8: 00809025 */ or $s2,$a0,$zero -/* 513ec: 00e0a025 */ or $s4,$a3,$zero -/* 513f0: 11d50007 */ beq $t6,$s5,.L00051410 -/* 513f4: 305300ff */ andi $s3,$v0,0xff -/* 513f8: 0c0148d8 */ jal func00052360 -/* 513fc: 32a500ff */ andi $a1,$s5,0xff -/* 51400: 10400003 */ beqz $v0,.L00051410 -/* 51404: afa20038 */ sw $v0,0x38($sp) -/* 51408: 10000051 */ b .L00051550 -/* 5140c: 8fbf0034 */ lw $ra,0x34($sp) -.L00051410: -/* 51410: 97a20052 */ lhu $v0,0x52($sp) -/* 51414: 97a90046 */ lhu $t1,0x46($sp) -/* 51418: 3630c000 */ ori $s0,$s1,0xc000 -/* 5141c: 00027943 */ sra $t7,$v0,0x5 -/* 51420: 31f8ffff */ andi $t8,$t7,0xffff -/* 51424: 0010c943 */ sra $t9,$s0,0x5 -/* 51428: 24010001 */ addiu $at,$zero,0x1 -/* 5142c: 8fa30038 */ lw $v1,0x38($sp) -/* 51430: 03001025 */ or $v0,$t8,$zero -/* 51434: 15210022 */ bne $t1,$at,.L000514c0 -/* 51438: 3330ffff */ andi $s0,$t9,0xffff -/* 5143c: 00008825 */ or $s1,$zero,$zero -/* 51440: 1b00003d */ blez $t8,.L00051538 -/* 51444: 0300a825 */ or $s5,$t8,$zero -.L00051448: -/* 51448: 8e440004 */ lw $a0,0x4($s2) -/* 5144c: 8e450008 */ lw $a1,0x8($s2) -/* 51450: afa00010 */ sw $zero,0x10($sp) -/* 51454: 3206ffff */ andi $a2,$s0,0xffff -/* 51458: 0c012d84 */ jal __osContRamWrite -/* 5145c: 02803825 */ or $a3,$s4,$zero -/* 51460: 14400035 */ bnez $v0,.L00051538 -/* 51464: 00401825 */ or $v1,$v0,$zero -/* 51468: 26100001 */ addiu $s0,$s0,0x1 -/* 5146c: 320affff */ andi $t2,$s0,0xffff -/* 51470: 29410800 */ slti $at,$t2,0x800 -/* 51474: 1420000d */ bnez $at,.L000514ac -/* 51478: 01408025 */ or $s0,$t2,$zero -/* 5147c: 26abffff */ addiu $t3,$s5,-1 -/* 51480: 022b082a */ slt $at,$s1,$t3 -/* 51484: 10200009 */ beqz $at,.L000514ac -/* 51488: 02402025 */ or $a0,$s2,$zero -/* 5148c: 26730001 */ addiu $s3,$s3,0x1 -/* 51490: 326c00ff */ andi $t4,$s3,0xff -/* 51494: 01809825 */ or $s3,$t4,$zero -/* 51498: 0c0148d8 */ jal func00052360 -/* 5149c: 318500ff */ andi $a1,$t4,0xff -/* 514a0: 14400025 */ bnez $v0,.L00051538 -/* 514a4: 00401825 */ or $v1,$v0,$zero -/* 514a8: 24100600 */ addiu $s0,$zero,0x600 -.L000514ac: -/* 514ac: 26310001 */ addiu $s1,$s1,0x1 -/* 514b0: 1635ffe5 */ bne $s1,$s5,.L00051448 -/* 514b4: 26940020 */ addiu $s4,$s4,0x20 -/* 514b8: 10000020 */ b .L0005153c -/* 514bc: 24010002 */ addiu $at,$zero,0x2 -.L000514c0: -/* 514c0: 00008825 */ or $s1,$zero,$zero -/* 514c4: 1840001c */ blez $v0,.L00051538 -/* 514c8: 0040a825 */ or $s5,$v0,$zero -.L000514cc: -/* 514cc: 8e440004 */ lw $a0,0x4($s2) -/* 514d0: 8e450008 */ lw $a1,0x8($s2) -/* 514d4: 3206ffff */ andi $a2,$s0,0xffff -/* 514d8: 0c012e18 */ jal __osContRamRead -/* 514dc: 02803825 */ or $a3,$s4,$zero -/* 514e0: 14400015 */ bnez $v0,.L00051538 -/* 514e4: 00401825 */ or $v1,$v0,$zero -/* 514e8: 26100001 */ addiu $s0,$s0,0x1 -/* 514ec: 320dffff */ andi $t5,$s0,0xffff -/* 514f0: 29a10800 */ slti $at,$t5,0x800 -/* 514f4: 1420000d */ bnez $at,.L0005152c -/* 514f8: 01a08025 */ or $s0,$t5,$zero -/* 514fc: 26aeffff */ addiu $t6,$s5,-1 -/* 51500: 022e082a */ slt $at,$s1,$t6 -/* 51504: 10200009 */ beqz $at,.L0005152c -/* 51508: 02402025 */ or $a0,$s2,$zero -/* 5150c: 26730001 */ addiu $s3,$s3,0x1 -/* 51510: 326f00ff */ andi $t7,$s3,0xff -/* 51514: 01e09825 */ or $s3,$t7,$zero -/* 51518: 0c0148d8 */ jal func00052360 -/* 5151c: 31e500ff */ andi $a1,$t7,0xff -/* 51520: 14400005 */ bnez $v0,.L00051538 -/* 51524: 00401825 */ or $v1,$v0,$zero -/* 51528: 24100600 */ addiu $s0,$zero,0x600 -.L0005152c: -/* 5152c: 26310001 */ addiu $s1,$s1,0x1 -/* 51530: 1635ffe6 */ bne $s1,$s5,.L000514cc -/* 51534: 26940020 */ addiu $s4,$s4,0x20 -.L00051538: -/* 51538: 24010002 */ addiu $at,$zero,0x2 -.L0005153c: -/* 5153c: 54610003 */ bnel $v1,$at,.L0005154c -/* 51540: 00601025 */ or $v0,$v1,$zero -/* 51544: 24030004 */ addiu $v1,$zero,0x4 -/* 51548: 00601025 */ or $v0,$v1,$zero -.L0005154c: -/* 5154c: 8fbf0034 */ lw $ra,0x34($sp) -.L00051550: -/* 51550: 8fb0001c */ lw $s0,0x1c($sp) -/* 51554: 8fb10020 */ lw $s1,0x20($sp) -/* 51558: 8fb20024 */ lw $s2,0x24($sp) -/* 5155c: 8fb30028 */ lw $s3,0x28($sp) -/* 51560: 8fb4002c */ lw $s4,0x2c($sp) -/* 51564: 8fb50030 */ lw $s5,0x30($sp) -/* 51568: 03e00008 */ jr $ra -/* 5156c: 27bd0040 */ addiu $sp,$sp,0x40 -); +s32 osGbpakReadWrite(OSPfs *pfs, u16 flag, u16 address, u8 *buffer, u16 size) +{ + s32 i; + s32 ret; + u8 bank; + u16 addr; + + bank = address >> 14; + + if (bank != pfs->banks) { + ret = __osGbpakSelectBank(pfs, bank); + + if (ret != 0) { + return ret; + } + } + + size = size >> 5; + address = (address | 0xc000) >> 5; + + if (flag == PFS_WRITE) { + for (i = 0; i < size; i++) { + ret = __osContRamWrite(pfs->queue, pfs->channel, address, buffer, 0); + + if (ret != 0) { + break; + } + + address++; + + if (address >= 0x800 && i < size - 1) { + bank++; + ret = __osGbpakSelectBank(pfs, bank); + + if (ret != 0) { + break; + } + + address = 0x600; + } + + buffer += BLOCKSIZE; + } + } else { + for (i = 0; i < size; i++) { + ret = __osContRamRead(pfs->queue, pfs->channel, address, buffer); + + if (ret != 0) { + break; + } + + address++; + + if (address >= 0x800 && i < size - 1) { + bank++; + ret = __osGbpakSelectBank(pfs, bank); + + if (ret != 0) { + break; + } + + address = 0x600; + } + + buffer += BLOCKSIZE; + } + } + + if (ret == PFS_ERR_NEW_PACK) { + ret = PFS_ERR_CONTRFAIL; + } + + return ret; +} diff --git a/src/lib/lib_52360.c b/src/lib/ultra/io/gbpakselectbank.c similarity index 98% rename from src/lib/lib_52360.c rename to src/lib/ultra/io/gbpakselectbank.c index 7a63da27e..f04ba00ae 100644 --- a/src/lib/lib_52360.c +++ b/src/lib/ultra/io/gbpakselectbank.c @@ -5,7 +5,7 @@ #include "types.h" GLOBAL_ASM( -glabel func00052360 +glabel __osGbpakSelectBank /* 52360: 27bdffa8 */ addiu $sp,$sp,-88 /* 52364: afb0001c */ sw $s0,0x1c($sp) /* 52368: 30b000ff */ andi $s0,$a1,0xff