diff --git a/include/global.h b/include/global.h index 5e57b09..9723917 100644 --- a/include/global.h +++ b/include/global.h @@ -581,13 +581,16 @@ typedef struct unk_D_8122B2C0 { /* 0x05C5C */ char unk_5C5C[0x50]; /* 0x05CAC */ OSGbpakId gbpakId; /* 0x05CFC */ OSPfs* pfs; - /* 0x05D00 */ char unk05D00[0x70]; + /* 0x05D00 */ char unk05D00[0x64]; + /* 0x05D64 */ u8* transferBuffer; + /* 0x05D68 */ u32 gbAddress; + /* 0x05D6C */ s32 transferSize; /* 0x05D70 */ u32 unk_5D70[4]; /* 0x05D80 */ u32 unk_5D80[4]; /* 0x05D90 */ u32 unk_5D90[4]; /* 0x05DA0 */ u16 unk_5DA0; /* 0x05DA2 */ u16 unk_5DA2; - /* 0x05DA4 */ char unk05DA3[0x20]; + /* 0x05DA4 */ char unk05DA4[0x20]; /* 0x05DC4 */ u8 unk_5DC4; /* 0x05DC5 */ u8 unk_5DC5; /* 0x05DC6 */ char unk05DC6[0x2]; diff --git a/src/fragments/1/fragment1_7F9A0.c b/src/fragments/1/fragment1_7F9A0.c index 2ba7e28..9a01e80 100644 --- a/src/fragments/1/fragment1_7F9A0.c +++ b/src/fragments/1/fragment1_7F9A0.c @@ -256,7 +256,42 @@ s32 func_812005D8(unk_D_8122B2C0* arg0) { s32 func_812006AC(unk_D_8122B2C0* arg0); #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_7F9A0/func_812006AC.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/1/fragment1_7F9A0/func_812008C8.s") +s32 func_812008C8(unk_D_8122B2C0* arg0, s32 arg1) { + s32 temp_v0; + s32 var_s0; + s32 var_s1; + u8* var_s3; + s32 var_v0; + s32 var_v1; + u32 var_s2; + + var_v0 = func_812005D8(arg0); + var_v1 = var_v0; + var_s3 = arg0->transferBuffer; + var_s2 = arg0->gbAddress; + var_s1 = arg0->transferSize; + while ((var_v0 == 0) && (var_s1 != 0)) { + var_v0 = func_812002BC(arg0, var_s2 >> 0xD); + var_v1 = var_v0; + if (var_v0 == 0) { + temp_v0 = var_s2 & 0x1FFF; + if ((u32) (temp_v0 + var_s1) >= 0x2001U) { + var_s0 = 0x2000 - temp_v0; + } else { + var_s0 = var_s1; + } + var_v0 = osGbpakReadWrite(&arg0->pfs, arg1, (temp_v0 | 0xA000) & 0xFFFF, var_s3, var_s0); + var_v1 = var_v0; + var_s3 += var_s0; + var_s1 -= var_s0; + var_s2 = (var_s2 + 0x2000) & ~0x1FFF; + } + } + if (var_v0 == 0) { + var_v1 = func_8120019C(arg0); + } + return var_v1; +} s32 func_812009D0(unk_func_812009D0* arg0) { u8* var_s1;