diff --git a/Makefile b/Makefile index f02c5d5ef..b2be0d4b2 100644 --- a/Makefile +++ b/Makefile @@ -181,7 +181,8 @@ IDO71_C_FILES := \ $(shell find src/lib/ultra/audio -name '*.c') \ $(shell find src/lib/naudio -name '*.c') \ src/lib/lib_2fc60.c \ - src/lib/lib_39c80.c + src/lib/lib_39c80.c \ + src/lib/lib_3f8a0.c LOOPUNROLL_O_FILES = $(patsubst src/%.c, $(B_DIR)/%.o, $(LOOPUNROLL_C_FILES)) MIPS3_O_FILES = $(patsubst src/%.c, $(B_DIR)/%.o, $(MIPS3_C_FILES)) diff --git a/src/include/bss.h b/src/include/bss.h index 15705a52b..b0b7b56db 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -49,7 +49,7 @@ extern u32 var8009c3e0; extern struct asistream *g_AsiStream; extern u8 *var8009c640; extern u8 *var8009c644; -extern u8 var8009c650[]; +extern u32 var8009c650[34]; extern u8 *var8009c6d8; extern u8 *var8009c6dc; extern OSTimer var8009c760; diff --git a/src/include/lib/lib_3e8c0.h b/src/include/lib/lib_3e8c0.h index 99b1d785d..b9d72f340 100644 --- a/src/include/lib/lib_3e8c0.h +++ b/src/include/lib/lib_3e8c0.h @@ -40,9 +40,9 @@ extern const u32 var70057750[]; u32 func0003f8a0(void); void func00040164(struct asistream *stream, u32 arg1, u32 arg2); -u32 func00040dac(void); -u32 func00041600(void); -void func00042238(struct asistream *stream, u32 arg1, u32 arg2); +void func00040dac(struct asistream *stream, u32 arg1, u32 arg2); +void func00041600(struct asistream *stream, u32 arg1, u32 arg2); +bool func00042238(struct asistream *stream, u32 arg1, u32 arg2); bool func000427d8(struct asistream *stream, u32 arg1); bool func00042990(struct asistream *stream, u32 arg1, u32 arg2); bool func00042e38(struct asistream *stream); diff --git a/src/include/lib/lib_461c0.h b/src/include/lib/lib_461c0.h index 4bff53b1d..48c7fc3cb 100644 --- a/src/include/lib/lib_461c0.h +++ b/src/include/lib/lib_461c0.h @@ -7,7 +7,7 @@ u32 func000461c0(void); u32 func00046290(void); s32 func000462c4(void *arg0, void *arg1, s32 arg2); -u32 func000462f8(void); -u32 func000464a8(void); +s32 func000462f8(u8 *arg0, s32 *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, u8 **arg6, u8 **arg7); +s32 func000464a8(u8 *arg0, s32 *arg1, s32 arg2, s32 arg3, s32 arg4, u8 **arg5, u8 **arg6); #endif diff --git a/src/include/types.h b/src/include/types.h index 2284a7cad..c6bfb29bf 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -7386,14 +7386,23 @@ struct asistream { u32 unk3bec; u32 unk3bf0; u32 unk3bf4; - u8 unk3bf8[0xa0]; + u8 unk3bf8[0x80]; + u32 unk3c78[2][1]; + u32 unk3c80[6][1]; u32 unk3c98[1][1]; - u8 unk3c9c[0x2ec]; + u8 unk3c9c[0x14]; + u32 unk3cb0[4][1][3]; + u32 unk3ce0[1][1]; + u8 unk3ce4[0x1c]; + u32 unk3d00[1][1]; + u8 unk3d04[0x284]; s32 unk3f88; s32 unk3f8c; - u8 unk3f90[0x6cc]; - s32 unk465c; - u32 unk4660; + u32 unk3f90; + u8 unk3f94[1][0x484]; + u8 unk4418[1][0x242]; + s32 unk465c[1]; + s32 unk4660[1]; struct asistream_4f64 unk4664[32]; struct asistream_4f64 unk4f64[2][32]; u8 unk6164[0x900]; diff --git a/src/lib/lib_3f8a0.c b/src/lib/lib_3f8a0.c index 0fff4f75b..7fe77cc21 100644 --- a/src/lib/lib_3f8a0.c +++ b/src/lib/lib_3f8a0.c @@ -2909,128 +2909,36 @@ const u32 var700577cc[] = {0x00000000}; const u32 var700577d0[] = {0x64646400}; const u32 var700577d4[] = {0x00000000}; -const u32 var700577d8[] = {0x00000000}; -const u32 var700577dc[] = {0x00000000}; -const u32 var700577e0[] = {0x00000000}; -const u32 var700577e4[] = {0x00000000}; -const u32 var700577e8[] = {0x00000000}; -const u32 var700577ec[] = {0x00000000}; -const u32 var700577f0[] = {0x00000000}; -const u32 var700577f4[] = {0x00000000}; -const u32 var700577f8[] = {0x00000000}; -const u32 var700577fc[] = {0x00000000}; -const u32 var70057800[] = {0x00000000}; -const u32 var70057804[] = {0x00000000}; -const u32 var70057808[] = {0x00000000}; -const u32 var7005780c[] = {0x00000000}; -const u32 var70057810[] = {0x00000000}; -const u32 var70057814[] = {0x00000000}; -const u32 var70057818[] = {0x00000001}; -const u32 var7005781c[] = {0x00000002}; -const u32 var70057820[] = {0x00000003}; -const u32 var70057824[] = {0x00000004}; -const u32 var70057828[] = {0x00000006}; -const u32 var7005782c[] = {0x00000008}; -const u32 var70057830[] = {0x0000000a}; -const u32 var70057834[] = {0x0000000d}; -const u32 var70057838[] = {0x00000004}; -const u32 var7005783c[] = {0x00000005}; -const u32 var70057840[] = {0x00000006}; -const u32 var70057844[] = {0x00000007}; -const u32 var70057848[] = {0x00000008}; -const u32 var7005784c[] = {0x00000009}; -const u32 var70057850[] = {0x0000000b}; -const u32 var70057854[] = {0x0000000d}; -const u32 var70057858[] = {0xffffffff}; -const u32 var7005785c[] = {0xffffffff}; +const s32 var700577d8[34] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, + 6, 8, 10, 13, 4, 5, 6, 7, 8, 9, + 11, 13, -1, -1, +}; -const u32 var70057860[] = {0x0005000b}; -const u32 var70057864[] = {0x00110017}; -const u32 var70057868[] = {0x001d0023}; -const u32 var7005786c[] = {0x002b0035}; -const u32 var70057870[] = {0x0041004f}; -const u32 var70057874[] = {0x005f0073}; -const u32 var70057878[] = {0x008b00a7}; -const u32 var7005787c[] = {0x00c700ed}; -const u32 var70057880[] = {0x011b014f}; -const u32 var70057884[] = {0x018b01cf}; -const u32 var70057888[] = {0x0209023f}; -const u32 var7005788c[] = {0x0005000b}; -const u32 var70057890[] = {0x00110017}; -const u32 var70057894[] = {0x001d0023}; -const u32 var70057898[] = {0x002b0035}; -const u32 var7005789c[] = {0x0041004f}; -const u32 var700578a0[] = {0x005f0071}; -const u32 var700578a4[] = {0x008700a1}; -const u32 var700578a8[] = {0x00c100e7}; -const u32 var700578ac[] = {0x0115014b}; -const u32 var700578b0[] = {0x018901cf}; -const u32 var700578b4[] = {0x021b023f}; -const u32 var700578b8[] = {0x0005000b}; -const u32 var700578bc[] = {0x00110017}; -const u32 var700578c0[] = {0x001d0023}; -const u32 var700578c4[] = {0x002b0035}; -const u32 var700578c8[] = {0x0041004f}; -const u32 var700578cc[] = {0x005f0073}; -const u32 var700578d0[] = {0x008b00a7}; -const u32 var700578d4[] = {0x00c700ed}; -const u32 var700578d8[] = {0x011b014f}; -const u32 var700578dc[] = {0x018b01cf}; -const u32 var700578e0[] = {0x0209023f}; -const u32 var700578e4[] = {0x00030007}; -const u32 var700578e8[] = {0x000b000f}; -const u32 var700578ec[] = {0x00130017}; -const u32 var700578f0[] = {0x001d0023}; -const u32 var700578f4[] = {0x002b0033}; -const u32 var700578f8[] = {0x003d0049}; -const u32 var700578fc[] = {0x0059006d}; -const u32 var70057900[] = {0x008500a1}; -const u32 var70057904[] = {0x00c300ed}; -const u32 var70057908[] = {0x011f0155}; -const u32 var7005790c[] = {0x01a1023f}; -const u32 var70057910[] = {0x00030007}; -const u32 var70057914[] = {0x000b000f}; -const u32 var70057918[] = {0x00130017}; -const u32 var7005791c[] = {0x001d0023}; -const u32 var70057920[] = {0x00290031}; -const u32 var70057924[] = {0x003b0047}; -const u32 var70057928[] = {0x00570069}; -const u32 var7005792c[] = {0x007f009b}; -const u32 var70057930[] = {0x00bd00e5}; -const u32 var70057934[] = {0x01130149}; -const u32 var70057938[] = {0x017f023f}; -const u32 var7005793c[] = {0x00030007}; -const u32 var70057940[] = {0x000b000f}; -const u32 var70057944[] = {0x00130017}; -const u32 var70057948[] = {0x001d0023}; -const u32 var7005794c[] = {0x002b0035}; -const u32 var70057950[] = {0x00410051}; -const u32 var70057954[] = {0x0065007d}; -const u32 var70057958[] = {0x009b00c1}; -const u32 var7005795c[] = {0x00ef0127}; -const u32 var70057960[] = {0x016b01bf}; -const u32 var70057964[] = {0x0225023f}; +const s16 var70057860[2][3][22] = { + { + { 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 115, 139, 167, 199, 237, 283, 335, 395, 463, 521, 575 }, + { 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 113, 135, 161, 193, 231, 277, 331, 393, 463, 539, 575 }, + { 5, 11, 17, 23, 29, 35, 43, 53, 65, 79, 95, 115, 139, 167, 199, 237, 283, 335, 395, 463, 521, 575 }, + }, { + { 3, 7, 11, 15, 19, 23, 29, 35, 43, 51, 61, 73, 89, 109, 133, 161, 195, 237, 287, 341, 417, 575 }, + { 3, 7, 11, 15, 19, 23, 29, 35, 41, 49, 59, 71, 87, 105, 127, 155, 189, 229, 275, 329, 383, 575 }, + { 3, 7, 11, 15, 19, 23, 29, 35, 43, 53, 65, 81, 101, 125, 155, 193, 239, 295, 363, 447, 549, 575 }, + }, +}; -const u32 var70057968[] = {0x03070b11}; -const u32 var7005796c[] = {0x171f2937}; -const u32 var70057970[] = {0x496383ad}; -const u32 var70057974[] = {0xbf03070b}; -const u32 var70057978[] = {0x1119232f}; -const u32 var7005797c[] = {0x3d4f6787}; -const u32 var70057980[] = {0xb3bf0307}; -const u32 var70057984[] = {0x0b111923}; -const u32 var70057988[] = {0x2f3d4f67}; -const u32 var7005798c[] = {0x85adbf03}; -const u32 var70057990[] = {0x070b0f15}; -const u32 var70057994[] = {0x1d273341}; -const u32 var70057998[] = {0x536987bf}; -const u32 var7005799c[] = {0x03070b0f}; -const u32 var700579a0[] = {0x151b2531}; -const u32 var700579a4[] = {0x3f4f637d}; -const u32 var700579a8[] = {0xbf03070b}; -const u32 var700579ac[] = {0x0f151d29}; -const u32 var700579b0[] = {0x394d6789}; -const u32 var700579b4[] = {0xb3bf0000}; +const u8 var70057968[2][3][13] = { + { + { 3, 7, 11, 17, 23, 31, 41, 55, 73, 99, 131, 173, 191 }, + { 3, 7, 11, 17, 25, 35, 47, 61, 79, 103, 135, 179, 191 }, + { 3, 7, 11, 17, 25, 35, 47, 61, 79, 103, 133, 173, 191 }, + }, { + { 3, 7, 11, 15, 21, 29, 39, 51, 65, 83, 105, 135, 191 }, + { 3, 7, 11, 15, 21, 27, 37, 49, 63, 79, 99, 125, 191 }, + { 3, 7, 11, 15, 21, 29, 41, 57, 77, 103, 137, 179, 191 }, + }, +}; const u32 var700579b8[] = {0x00000006}; const u32 var700579bc[] = {0x000c0012}; @@ -6624,386 +6532,104 @@ glabel func00041600 /* 42234: 00000000 */ nop ); -GLOBAL_ASM( -glabel func00042238 -/* 42238: 27bdff98 */ addiu $sp,$sp,-104 -/* 4223c: afbf0024 */ sw $ra,0x24($sp) -/* 42240: afa40068 */ sw $a0,0x68($sp) -/* 42244: afa5006c */ sw $a1,0x6c($sp) -/* 42248: afa60070 */ sw $a2,0x70($sp) -/* 4224c: 8fae0068 */ lw $t6,0x68($sp) -/* 42250: 8dcf2020 */ lw $t7,0x2020($t6) -/* 42254: afaf0064 */ sw $t7,0x64($sp) -/* 42258: 8fb80068 */ lw $t8,0x68($sp) -/* 4225c: 8f193ba4 */ lw $t9,0x3ba4($t8) -/* 42260: 13200007 */ beqz $t9,.L00042280 -/* 42264: 00000000 */ nop -/* 42268: 8fa40068 */ lw $a0,0x68($sp) -/* 4226c: 8fa5006c */ lw $a1,0x6c($sp) -/* 42270: 0c01036b */ jal func00040dac -/* 42274: 8fa60070 */ lw $a2,0x70($sp) -/* 42278: 10000005 */ b .L00042290 -/* 4227c: 00000000 */ nop -.L00042280: -/* 42280: 8fa40068 */ lw $a0,0x68($sp) -/* 42284: 8fa5006c */ lw $a1,0x6c($sp) -/* 42288: 0c010580 */ jal func00041600 -/* 4228c: 8fa60070 */ lw $a2,0x70($sp) -.L00042290: -/* 42290: 8fa9006c */ lw $t1,0x6c($sp) -/* 42294: 8fa80068 */ lw $t0,0x68($sp) -/* 42298: 8fac0070 */ lw $t4,0x70($sp) -/* 4229c: 00095080 */ sll $t2,$t1,0x2 -/* 422a0: 010a5821 */ addu $t3,$t0,$t2 -/* 422a4: 000c6880 */ sll $t5,$t4,0x2 -/* 422a8: 016d7021 */ addu $t6,$t3,$t5 -/* 422ac: 8dcf3c80 */ lw $t7,0x3c80($t6) -/* 422b0: 000fc040 */ sll $t8,$t7,0x1 -/* 422b4: afb80060 */ sw $t8,0x60($sp) -/* 422b8: 8fb90068 */ lw $t9,0x68($sp) -/* 422bc: 3c0d7005 */ lui $t5,%hi(var70057860) -/* 422c0: 25ad7860 */ addiu $t5,$t5,%lo(var70057860) -/* 422c4: 8f2a3bb4 */ lw $t2,0x3bb4($t9) -/* 422c8: 8f293ba4 */ lw $t1,0x3ba4($t9) -/* 422cc: 000a6080 */ sll $t4,$t2,0x2 -/* 422d0: 018a6023 */ subu $t4,$t4,$t2 -/* 422d4: 000c6080 */ sll $t4,$t4,0x2 -/* 422d8: 00094140 */ sll $t0,$t1,0x5 -/* 422dc: 018a6023 */ subu $t4,$t4,$t2 -/* 422e0: 01094021 */ addu $t0,$t0,$t1 -/* 422e4: 00084080 */ sll $t0,$t0,0x2 -/* 422e8: 000c6080 */ sll $t4,$t4,0x2 -/* 422ec: 010c5821 */ addu $t3,$t0,$t4 -/* 422f0: 016d7021 */ addu $t6,$t3,$t5 -/* 422f4: afae0050 */ sw $t6,0x50($sp) -/* 422f8: 8faf0068 */ lw $t7,0x68($sp) -/* 422fc: 3c0c7005 */ lui $t4,%hi(var70057968) -/* 42300: 258c7968 */ addiu $t4,$t4,%lo(var70057968) -/* 42304: 8df83ba4 */ lw $t8,0x3ba4($t7) -/* 42308: 8df93bb4 */ lw $t9,0x3bb4($t7) -/* 4230c: 00184880 */ sll $t1,$t8,0x2 -/* 42310: 00195080 */ sll $t2,$t9,0x2 -/* 42314: 01384821 */ addu $t1,$t1,$t8 -/* 42318: 01595023 */ subu $t2,$t2,$t9 -/* 4231c: 000a5080 */ sll $t2,$t2,0x2 -/* 42320: 000948c0 */ sll $t1,$t1,0x3 -/* 42324: 01384823 */ subu $t1,$t1,$t8 -/* 42328: 01595021 */ addu $t2,$t2,$t9 -/* 4232c: 012a4021 */ addu $t0,$t1,$t2 -/* 42330: 010c5821 */ addu $t3,$t0,$t4 -/* 42334: afab004c */ sw $t3,0x4c($sp) -/* 42338: 8fae006c */ lw $t6,0x6c($sp) -/* 4233c: 8fad0068 */ lw $t5,0x68($sp) -/* 42340: 8fb90070 */ lw $t9,0x70($sp) -/* 42344: 000ec080 */ sll $t8,$t6,0x2 -/* 42348: 01b87821 */ addu $t7,$t5,$t8 -/* 4234c: 00194880 */ sll $t1,$t9,0x2 -/* 42350: 01e95021 */ addu $t2,$t7,$t1 -/* 42354: 8d483c98 */ lw $t0,0x3c98($t2) -/* 42358: 1500003c */ bnez $t0,.L0004244c -/* 4235c: 00000000 */ nop -/* 42360: 8d4c3ca0 */ lw $t4,0x3ca0($t2) -/* 42364: 15800039 */ bnez $t4,.L0004244c -/* 42368: 00000000 */ nop -/* 4236c: 8fae006c */ lw $t6,0x6c($sp) -/* 42370: 8fab0068 */ lw $t3,0x68($sp) -/* 42374: 8fb90070 */ lw $t9,0x70($sp) -/* 42378: 000e6880 */ sll $t5,$t6,0x2 -/* 4237c: 016dc021 */ addu $t8,$t3,$t5 -/* 42380: 00197880 */ sll $t7,$t9,0x2 -/* 42384: 030f4821 */ addu $t1,$t8,$t7 -/* 42388: 8d283ce0 */ lw $t0,0x3ce0($t1) -/* 4238c: 8fac0050 */ lw $t4,0x50($sp) -/* 42390: 27b90054 */ addiu $t9,$sp,0x54 -/* 42394: 00085040 */ sll $t2,$t0,0x1 -/* 42398: 018a7021 */ addu $t6,$t4,$t2 -/* 4239c: 85cb0000 */ lh $t3,0x0($t6) -/* 423a0: 256d0001 */ addiu $t5,$t3,0x1 -/* 423a4: af2d0000 */ sw $t5,0x0($t9) -/* 423a8: 27b80054 */ addiu $t8,$sp,0x54 -/* 423ac: 8f0f0000 */ lw $t7,0x0($t8) -/* 423b0: 8fa90060 */ lw $t1,0x60($sp) -/* 423b4: 012f082a */ slt $at,$t1,$t7 -/* 423b8: 10200008 */ beqz $at,.L000423dc -/* 423bc: 00000000 */ nop -/* 423c0: 8fa80060 */ lw $t0,0x60($sp) -/* 423c4: 27ac0054 */ addiu $t4,$sp,0x54 -/* 423c8: 27aa0054 */ addiu $t2,$sp,0x54 -/* 423cc: ad880004 */ sw $t0,0x4($t4) -/* 423d0: 8d4e0004 */ lw $t6,0x4($t2) -/* 423d4: 1000001b */ b .L00042444 -/* 423d8: ad4e0000 */ sw $t6,0x0($t2) -.L000423dc: -/* 423dc: 8fad006c */ lw $t5,0x6c($sp) -/* 423e0: 8fab0068 */ lw $t3,0x68($sp) -/* 423e4: 8faf0070 */ lw $t7,0x70($sp) -/* 423e8: 000dc880 */ sll $t9,$t5,0x2 -/* 423ec: 0179c021 */ addu $t8,$t3,$t9 -/* 423f0: 000f4880 */ sll $t1,$t7,0x2 -/* 423f4: 03094021 */ addu $t0,$t8,$t1 -/* 423f8: 8d0c3ce8 */ lw $t4,0x3ce8($t0) -/* 423fc: 8d0e3ce0 */ lw $t6,0x3ce0($t0) -/* 42400: 8fab0050 */ lw $t3,0x50($sp) -/* 42404: 27a90054 */ addiu $t1,$sp,0x54 -/* 42408: 018e5021 */ addu $t2,$t4,$t6 -/* 4240c: 000a6840 */ sll $t5,$t2,0x1 -/* 42410: 016dc821 */ addu $t9,$t3,$t5 -/* 42414: 872f0002 */ lh $t7,0x2($t9) -/* 42418: 25f80001 */ addiu $t8,$t7,0x1 -/* 4241c: ad380004 */ sw $t8,0x4($t1) -/* 42420: 27a80054 */ addiu $t0,$sp,0x54 -/* 42424: 8d0c0004 */ lw $t4,0x4($t0) -/* 42428: 8fae0060 */ lw $t6,0x60($sp) -/* 4242c: 01cc082a */ slt $at,$t6,$t4 -/* 42430: 10200004 */ beqz $at,.L00042444 -/* 42434: 00000000 */ nop -/* 42438: 8faa0060 */ lw $t2,0x60($sp) -/* 4243c: 27ab0054 */ addiu $t3,$sp,0x54 -/* 42440: ad6a0004 */ sw $t2,0x4($t3) -.L00042444: -/* 42444: 10000028 */ b .L000424e8 -/* 42448: 00000000 */ nop -.L0004244c: -/* 4244c: 8fb9006c */ lw $t9,0x6c($sp) -/* 42450: 8fad0068 */ lw $t5,0x68($sp) -/* 42454: 8fa90070 */ lw $t1,0x70($sp) -/* 42458: 00197880 */ sll $t7,$t9,0x2 -/* 4245c: 01afc021 */ addu $t8,$t5,$t7 -/* 42460: 00094080 */ sll $t0,$t1,0x2 -/* 42464: 03086021 */ addu $t4,$t8,$t0 -/* 42468: 8d8e3ca0 */ lw $t6,0x3ca0($t4) -/* 4246c: 24010002 */ addiu $at,$zero,0x2 -/* 42470: 15c1000c */ bne $t6,$at,.L000424a4 -/* 42474: 00000000 */ nop -/* 42478: 8d8a3ca8 */ lw $t2,0x3ca8($t4) -/* 4247c: 15400009 */ bnez $t2,.L000424a4 -/* 42480: 00000000 */ nop -/* 42484: 8fab004c */ lw $t3,0x4c($sp) -/* 42488: 27a90054 */ addiu $t1,$sp,0x54 -/* 4248c: 91790002 */ lbu $t9,0x2($t3) -/* 42490: 00196880 */ sll $t5,$t9,0x2 -/* 42494: 01b96823 */ subu $t5,$t5,$t9 -/* 42498: 25af0003 */ addiu $t7,$t5,0x3 -/* 4249c: 10000006 */ b .L000424b8 -/* 424a0: ad2f0000 */ sw $t7,0x0($t1) -.L000424a4: -/* 424a4: 8fb80050 */ lw $t8,0x50($sp) -/* 424a8: 27ac0054 */ addiu $t4,$sp,0x54 -/* 424ac: 8708000e */ lh $t0,0xe($t8) -/* 424b0: 250e0001 */ addiu $t6,$t0,0x1 -/* 424b4: ad8e0000 */ sw $t6,0x0($t4) -.L000424b8: -/* 424b8: 27aa0054 */ addiu $t2,$sp,0x54 -/* 424bc: 8d4b0000 */ lw $t3,0x0($t2) -/* 424c0: 8fb90060 */ lw $t9,0x60($sp) -/* 424c4: 032b082a */ slt $at,$t9,$t3 -/* 424c8: 10200004 */ beqz $at,.L000424dc -/* 424cc: 00000000 */ nop -/* 424d0: 8fad0060 */ lw $t5,0x60($sp) -/* 424d4: 27af0054 */ addiu $t7,$sp,0x54 -/* 424d8: aded0000 */ sw $t5,0x0($t7) -.L000424dc: -/* 424dc: 8fa90060 */ lw $t1,0x60($sp) -/* 424e0: 27b80054 */ addiu $t8,$sp,0x54 -/* 424e4: af090004 */ sw $t1,0x4($t8) -.L000424e8: -/* 424e8: 8fa80060 */ lw $t0,0x60($sp) -/* 424ec: 27ae0054 */ addiu $t6,$sp,0x54 -/* 424f0: adc80008 */ sw $t0,0x8($t6) -/* 424f4: afa00048 */ sw $zero,0x48($sp) -/* 424f8: 8faa0070 */ lw $t2,0x70($sp) -/* 424fc: 8fac0068 */ lw $t4,0x68($sp) -/* 42500: 000a58c0 */ sll $t3,$t2,0x3 -/* 42504: 016a5821 */ addu $t3,$t3,$t2 -/* 42508: 000b5940 */ sll $t3,$t3,0x5 -/* 4250c: 016a5821 */ addu $t3,$t3,$t2 -/* 42510: 000b5880 */ sll $t3,$t3,0x2 -/* 42514: 018bc821 */ addu $t9,$t4,$t3 -/* 42518: 272d3f94 */ addiu $t5,$t9,0x3f94 -/* 4251c: afad0044 */ sw $t5,0x44($sp) -/* 42520: 8fa90070 */ lw $t1,0x70($sp) -/* 42524: 8faf0068 */ lw $t7,0x68($sp) -/* 42528: 0009c0c0 */ sll $t8,$t1,0x3 -/* 4252c: 0309c021 */ addu $t8,$t8,$t1 -/* 42530: 0018c140 */ sll $t8,$t8,0x5 -/* 42534: 0309c021 */ addu $t8,$t8,$t1 -/* 42538: 0018c040 */ sll $t8,$t8,0x1 -/* 4253c: 01f84021 */ addu $t0,$t7,$t8 -/* 42540: 250e4418 */ addiu $t6,$t0,0x4418 -/* 42544: afae0040 */ sw $t6,0x40($sp) -/* 42548: afa0003c */ sw $zero,0x3c($sp) -.L0004254c: -/* 4254c: 8fac006c */ lw $t4,0x6c($sp) -/* 42550: 8fad0070 */ lw $t5,0x70($sp) -/* 42554: 8faa0068 */ lw $t2,0x68($sp) -/* 42558: 000c5880 */ sll $t3,$t4,0x2 -/* 4255c: 8fb8003c */ lw $t8,0x3c($sp) -/* 42560: 016c5823 */ subu $t3,$t3,$t4 -/* 42564: 000d4880 */ sll $t1,$t5,0x2 -/* 42568: 000b5880 */ sll $t3,$t3,0x2 -/* 4256c: 012d4823 */ subu $t1,$t1,$t5 -/* 42570: 00094880 */ sll $t1,$t1,0x2 -/* 42574: 014bc821 */ addu $t9,$t2,$t3 -/* 42578: 03297821 */ addu $t7,$t9,$t1 -/* 4257c: 00184080 */ sll $t0,$t8,0x2 -/* 42580: 01e87021 */ addu $t6,$t7,$t0 -/* 42584: 8dcc3cb0 */ lw $t4,0x3cb0($t6) -/* 42588: afac0038 */ sw $t4,0x38($sp) -/* 4258c: 8faa0038 */ lw $t2,0x38($sp) -/* 42590: 3c0d7005 */ lui $t5,%hi(var700577d8) -/* 42594: 000a5880 */ sll $t3,$t2,0x2 -/* 42598: 01ab6821 */ addu $t5,$t5,$t3 -/* 4259c: 8dad77d8 */ lw $t5,%lo(var700577d8)($t5) -/* 425a0: afad0034 */ sw $t5,0x34($sp) -/* 425a4: 8fb9003c */ lw $t9,0x3c($sp) -/* 425a8: 00194880 */ sll $t1,$t9,0x2 -/* 425ac: 03a9c021 */ addu $t8,$sp,$t1 -/* 425b0: 8f180054 */ lw $t8,0x54($t8) -/* 425b4: afb80030 */ sw $t8,0x30($sp) -/* 425b8: 8faf0038 */ lw $t7,0x38($sp) -/* 425bc: 3c0e800a */ lui $t6,%hi(var8009c650) -/* 425c0: 000f4080 */ sll $t0,$t7,0x2 -/* 425c4: 01c87021 */ addu $t6,$t6,$t0 -/* 425c8: 8dcec650 */ lw $t6,%lo(var8009c650)($t6) -/* 425cc: 15c00015 */ bnez $t6,.L00042624 -/* 425d0: 00000000 */ nop -/* 425d4: 8fac0030 */ lw $t4,0x30($sp) -/* 425d8: 8faa0048 */ lw $t2,0x48($sp) -/* 425dc: 018a5823 */ subu $t3,$t4,$t2 -/* 425e0: afab002c */ sw $t3,0x2c($sp) -/* 425e4: 8fa5002c */ lw $a1,0x2c($sp) -/* 425e8: 8fa40044 */ lw $a0,0x44($sp) -/* 425ec: 0c012c30 */ jal bzero -/* 425f0: 00052840 */ sll $a1,$a1,0x1 -/* 425f4: 8fb9002c */ lw $t9,0x2c($sp) -/* 425f8: 8fad0044 */ lw $t5,0x44($sp) -/* 425fc: 00194840 */ sll $t1,$t9,0x1 -/* 42600: 01a9c021 */ addu $t8,$t5,$t1 -/* 42604: afb80044 */ sw $t8,0x44($sp) -/* 42608: 8faf0040 */ lw $t7,0x40($sp) -/* 4260c: 8fa8002c */ lw $t0,0x2c($sp) -/* 42610: 01e87021 */ addu $t6,$t7,$t0 -/* 42614: afae0040 */ sw $t6,0x40($sp) -/* 42618: 8fac0030 */ lw $t4,0x30($sp) -/* 4261c: 10000010 */ b .L00042660 -/* 42620: afac0048 */ sw $t4,0x48($sp) -.L00042624: -/* 42624: 8faa0068 */ lw $t2,0x68($sp) -/* 42628: 8fab0034 */ lw $t3,0x34($sp) -/* 4262c: 8fb90030 */ lw $t9,0x30($sp) -/* 42630: 27ad0044 */ addiu $t5,$sp,0x44 -/* 42634: 27a90040 */ addiu $t1,$sp,0x40 -/* 42638: afa9001c */ sw $t1,0x1c($sp) -/* 4263c: afad0018 */ sw $t5,0x18($sp) -/* 42640: 8fa60038 */ lw $a2,0x38($sp) -/* 42644: 8fa70048 */ lw $a3,0x48($sp) -/* 42648: 2544001c */ addiu $a0,$t2,0x1c -/* 4264c: 25452020 */ addiu $a1,$t2,0x2020 -/* 42650: afab0010 */ sw $t3,0x10($sp) -/* 42654: 0c0118be */ jal func000462f8 -/* 42658: afb90014 */ sw $t9,0x14($sp) -/* 4265c: afa20048 */ sw $v0,0x48($sp) -.L00042660: -/* 42660: 8fb8003c */ lw $t8,0x3c($sp) -/* 42664: 270f0001 */ addiu $t7,$t8,0x1 -/* 42668: 29e10003 */ slti $at,$t7,0x3 -/* 4266c: 1420ffb7 */ bnez $at,.L0004254c -/* 42670: afaf003c */ sw $t7,0x3c($sp) -/* 42674: 8fae006c */ lw $t6,0x6c($sp) -/* 42678: 8fa80068 */ lw $t0,0x68($sp) -/* 4267c: 8fab0070 */ lw $t3,0x70($sp) -/* 42680: 000e6080 */ sll $t4,$t6,0x2 -/* 42684: 010c5021 */ addu $t2,$t0,$t4 -/* 42688: 000bc880 */ sll $t9,$t3,0x2 -/* 4268c: 01596821 */ addu $t5,$t2,$t9 -/* 42690: 8da93d00 */ lw $t1,0x3d00($t5) -/* 42694: 25380020 */ addiu $t8,$t1,0x20 -/* 42698: afb80038 */ sw $t8,0x38($sp) -/* 4269c: 8fae006c */ lw $t6,0x6c($sp) -/* 426a0: 8faf0068 */ lw $t7,0x68($sp) -/* 426a4: 8fab0070 */ lw $t3,0x70($sp) -/* 426a8: 000e4080 */ sll $t0,$t6,0x2 -/* 426ac: 01e86021 */ addu $t4,$t7,$t0 -/* 426b0: 000b5080 */ sll $t2,$t3,0x2 -/* 426b4: 018ac821 */ addu $t9,$t4,$t2 -/* 426b8: 8f2d3c78 */ lw $t5,0x3c78($t9) -/* 426bc: 8fa90064 */ lw $t1,0x64($sp) -/* 426c0: 01a9c021 */ addu $t8,$t5,$t1 -/* 426c4: afb80028 */ sw $t8,0x28($sp) -/* 426c8: 8fae0068 */ lw $t6,0x68($sp) -/* 426cc: 8faf0028 */ lw $t7,0x28($sp) -/* 426d0: 27a80044 */ addiu $t0,$sp,0x44 -/* 426d4: 27ab0040 */ addiu $t3,$sp,0x40 -/* 426d8: afab0018 */ sw $t3,0x18($sp) -/* 426dc: afa80014 */ sw $t0,0x14($sp) -/* 426e0: 8fa60038 */ lw $a2,0x38($sp) -/* 426e4: 8fa70048 */ lw $a3,0x48($sp) -/* 426e8: 25c4001c */ addiu $a0,$t6,0x1c -/* 426ec: 25c52020 */ addiu $a1,$t6,0x2020 -/* 426f0: 0c01192a */ jal func000464a8 -/* 426f4: afaf0010 */ sw $t7,0x10($sp) -/* 426f8: afa20048 */ sw $v0,0x48($sp) -/* 426fc: 8fac0028 */ lw $t4,0x28($sp) -/* 42700: 8faa0068 */ lw $t2,0x68($sp) -/* 42704: ad4c2020 */ sw $t4,0x2020($t2) -/* 42708: 8fb90048 */ lw $t9,0x48($sp) -/* 4270c: 2b210241 */ slti $at,$t9,0x241 -/* 42710: 14200008 */ bnez $at,.L00042734 -/* 42714: 00000000 */ nop -/* 42718: 8fb80070 */ lw $t8,0x70($sp) -/* 4271c: 8fa90068 */ lw $t1,0x68($sp) -/* 42720: 240d0240 */ addiu $t5,$zero,0x240 -/* 42724: 00187080 */ sll $t6,$t8,0x2 -/* 42728: 012e7821 */ addu $t7,$t1,$t6 -/* 4272c: 10000007 */ b .L0004274c -/* 42730: aded465c */ sw $t5,0x465c($t7) -.L00042734: -/* 42734: 8fac0070 */ lw $t4,0x70($sp) -/* 42738: 8fab0068 */ lw $t3,0x68($sp) -/* 4273c: 8fa80048 */ lw $t0,0x48($sp) -/* 42740: 000c5080 */ sll $t2,$t4,0x2 -/* 42744: 016ac821 */ addu $t9,$t3,$t2 -/* 42748: af28465c */ sw $t0,0x465c($t9) -.L0004274c: -/* 4274c: 8fb80048 */ lw $t8,0x48($sp) -/* 42750: 2b010240 */ slti $at,$t8,0x240 -/* 42754: 10200013 */ beqz $at,.L000427a4 -/* 42758: 00000000 */ nop -/* 4275c: 8fac0070 */ lw $t4,0x70($sp) -/* 42760: 8fa90048 */ lw $t1,0x48($sp) -/* 42764: 8faf0068 */ lw $t7,0x68($sp) -/* 42768: 240e0240 */ addiu $t6,$zero,0x240 -/* 4276c: 000c5880 */ sll $t3,$t4,0x2 -/* 42770: 01c96823 */ subu $t5,$t6,$t1 -/* 42774: 01eb5021 */ addu $t2,$t7,$t3 -/* 42778: ad4d4660 */ sw $t5,0x4660($t2) -/* 4277c: 8fb90070 */ lw $t9,0x70($sp) -/* 42780: 8fa80068 */ lw $t0,0x68($sp) -/* 42784: 8fa40044 */ lw $a0,0x44($sp) -/* 42788: 0019c080 */ sll $t8,$t9,0x2 -/* 4278c: 01187021 */ addu $t6,$t0,$t8 -/* 42790: 8dc54660 */ lw $a1,0x4660($t6) -/* 42794: 0c012c30 */ jal bzero -/* 42798: 00052840 */ sll $a1,$a1,0x1 -/* 4279c: 10000006 */ b .L000427b8 -/* 427a0: 00000000 */ nop -.L000427a4: -/* 427a4: 8fac0070 */ lw $t4,0x70($sp) -/* 427a8: 8fa90068 */ lw $t1,0x68($sp) -/* 427ac: 000c7880 */ sll $t7,$t4,0x2 -/* 427b0: 012f5821 */ addu $t3,$t1,$t7 -/* 427b4: ad604660 */ sw $zero,0x4660($t3) -.L000427b8: -/* 427b8: 10000003 */ b .L000427c8 -/* 427bc: 24020001 */ addiu $v0,$zero,0x1 -/* 427c0: 10000001 */ b .L000427c8 -/* 427c4: 00000000 */ nop -.L000427c8: -/* 427c8: 8fbf0024 */ lw $ra,0x24($sp) -/* 427cc: 27bd0068 */ addiu $sp,$sp,0x68 -/* 427d0: 03e00008 */ jr $ra -/* 427d4: 00000000 */ nop -); +extern u32 var8009c650[34]; + +bool func00042238(struct asistream *stream, u32 arg1, u32 arg2) +{ + s32 sp64 = stream->unk2020; + s32 sp60; + s32 sp54[3]; + const s16 *sp50; + const u8 *sp4c; + s32 sp48; + u8 *sp44; + u8 *sp40; + s32 i; + u32 sp38; + s32 sp34; + s32 sp30; + s32 sp2c; + s32 sp28; + + if (stream->unk3ba4) { + func00040dac(stream, arg1, arg2); + } else { + func00041600(stream, arg1, arg2); + } + + sp60 = stream->unk3c80[arg1][arg2] * 2; + sp50 = var70057860[stream->unk3ba4][stream->unk3bb4]; + sp4c = var70057968[stream->unk3ba4][stream->unk3bb4]; + + if (stream->unk3c98[arg1][arg2] == 0 && stream->unk3c98[arg1][arg2 + 2] == 0) { + sp54[0] = sp50[stream->unk3ce0[arg1][arg2]] + 1; + + if (sp54[0] > sp60) { + sp54[0] = sp54[1] = sp60; + } else { + sp54[1] = sp50[stream->unk3ce0[arg1][arg2] + stream->unk3ce0[arg1][arg2 + 2] + 1] + 1; + + if (sp54[1] > sp60) { + sp54[1] = sp60; + } + } + } else { + if (stream->unk3c98[arg1][arg2 + 2] == 2 && stream->unk3c98[arg1][arg2 + 4] == 0) { + sp54[0] = sp4c[2] * 3 + 3; + } else { + sp54[0] = sp50[7] + 1; + } + + if (sp54[0] > sp60) { + sp54[0] = sp60; + } + + sp54[1] = sp60; + } + + sp54[2] = sp60; + sp48 = 0; + sp44 = stream->unk3f94[arg2]; + sp40 = stream->unk4418[arg2]; + + for (i = 0; i < 3; i++) { + sp38 = stream->unk3cb0[arg1][arg2][i]; + sp34 = var700577d8[sp38]; + sp30 = sp54[i]; + + if (var8009c650[sp38] == 0) { + sp2c = sp30 - sp48; + + bzero(sp44, sp2c * 2); + + sp44 += sp2c * 2; + sp40 += sp2c; + sp48 = sp30; + } else { + sp48 = func000462f8(stream->unk1c, &stream->unk2020, sp38, sp48, sp34, sp30, &sp44, &sp40); + } + } + + sp38 = stream->unk3d00[arg1][arg2] + 32; + sp28 = stream->unk3c78[arg1][arg2] + sp64; + sp48 = func000464a8(stream->unk1c, &stream->unk2020, sp38, sp48, sp28, &sp44, &sp40); + stream->unk2020 = sp28; + + if (sp48 > 576) { + stream->unk465c[arg2] = 576; + } else { + stream->unk465c[arg2] = sp48; + } + + if (sp48 < 576) { + stream->unk4660[arg2] = 576 - sp48; + bzero(sp44, stream->unk4660[arg2] * 2); + } else { + stream->unk4660[arg2] = 0; + } + + return true; +} bool func000427d8(struct asistream *stream, u32 arg1) { @@ -7740,7 +7366,7 @@ bool func0004371c(struct asistream *stream) if (stream->unk3c98[sp950][0] != 0 && stream->unk3c98[sp950][2] == 2) { sp948 = 32; } else { - sp944 = (stream->unk465c - 1) / 18 + 1; + sp944 = (stream->unk465c[0] - 1) / 18 + 1; sp948 = sp944; } diff --git a/src/lib/lib_43dd0.c b/src/lib/lib_43dd0.c index 6c753078c..dd7391e0a 100644 --- a/src/lib/lib_43dd0.c +++ b/src/lib/lib_43dd0.c @@ -9,7 +9,7 @@ extern struct mp3vars g_Mp3Vars; -u8 var8009c650[0x88]; +u32 var8009c650[34]; u8 *var8009c6d8; u8 *var8009c6dc;