From f11007b2b35b4e547df5de4bb348d366d33457a4 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 14 Oct 2021 20:43:16 +1000 Subject: [PATCH] Decompile n_alLoadParam --- src/include/lib/lib_44f60.h | 4 +- src/lib/lib_44f60.c | 6 +- src/lib/lib_47a90.c | 2 +- src/lib/naudio/n_env.c | 10 +- src/lib/naudio/n_load.c | 274 +++++++++--------------------------- 5 files changed, 78 insertions(+), 218 deletions(-) diff --git a/src/include/lib/lib_44f60.h b/src/include/lib/lib_44f60.h index 99ad8f2b2..06d3345cc 100644 --- a/src/include/lib/lib_44f60.h +++ b/src/include/lib/lib_44f60.h @@ -5,9 +5,9 @@ #include "types.h" u32 n_alAdpcmPull(void); -u32 func00045608(void); +u32 n_alLoadParam(void); u32 _decodeChunk(void); u32 func00045ab0(void); -void n_alLoadParam(void *arg0, s32 arg1, void *arg2); +void func00045da8(void *arg0, s32 arg1, void *arg2); #endif diff --git a/src/lib/lib_44f60.c b/src/lib/lib_44f60.c index f9c7fb51d..4125ad80e 100644 --- a/src/lib/lib_44f60.c +++ b/src/lib/lib_44f60.c @@ -219,7 +219,7 @@ glabel func00045ab0 ); GLOBAL_ASM( -glabel n_alLoadParam +glabel func00045da8 /* 45da8: 27bdffd8 */ addiu $sp,$sp,-40 /* 45dac: afbf001c */ sw $ra,0x1c($sp) /* 45db0: afa40028 */ sw $a0,0x28($sp) @@ -248,7 +248,7 @@ glabel n_alLoadParam /* 45e08: a5e00092 */ sh $zero,0x92($t7) /* 45e0c: 8fa40028 */ lw $a0,0x28($sp) /* 45e10: 24050004 */ addiu $a1,$zero,0x4 -/* 45e14: 0c011582 */ jal func00045608 +/* 45e14: 0c011582 */ jal n_alLoadParam /* 45e18: 8fa60030 */ lw $a2,0x30($sp) /* 45e1c: 10000022 */ b .L00045ea8 /* 45e20: 00000000 */ nop @@ -285,7 +285,7 @@ glabel n_alLoadParam .L00045e90: /* 45e90: 8fa40028 */ lw $a0,0x28($sp) /* 45e94: 8fa5002c */ lw $a1,0x2c($sp) -/* 45e98: 0c011582 */ jal func00045608 +/* 45e98: 0c011582 */ jal n_alLoadParam /* 45e9c: 8fa60030 */ lw $a2,0x30($sp) /* 45ea0: 10000001 */ b .L00045ea8 /* 45ea4: 00000000 */ nop diff --git a/src/lib/lib_47a90.c b/src/lib/lib_47a90.c index 1c850bb82..4b241562e 100644 --- a/src/lib/lib_47a90.c +++ b/src/lib/lib_47a90.c @@ -167,7 +167,7 @@ glabel func00047a90 /* 47ce4: afa60020 */ sw $a2,0x20($sp) /* 47ce8: 8fa40018 */ lw $a0,0x18($sp) /* 47cec: 8fa5001c */ lw $a1,0x1c($sp) -/* 47cf0: 0c011582 */ jal func00045608 +/* 47cf0: 0c011582 */ jal n_alLoadParam /* 47cf4: 8fa60020 */ lw $a2,0x20($sp) /* 47cf8: 10000003 */ b .L00047d08 /* 47cfc: 00001025 */ or $v0,$zero,$zero diff --git a/src/lib/naudio/n_env.c b/src/lib/naudio/n_env.c index 1b4ff3f28..4a4e5d683 100644 --- a/src/lib/naudio/n_env.c +++ b/src/lib/naudio/n_env.c @@ -120,7 +120,7 @@ glabel var70054b30 /* 3e9e0: 8fad002c */ lw $t5,0x2c($sp) /* 3e9e4: 8fa40050 */ lw $a0,0x50($sp) /* 3e9e8: 24050005 */ addiu $a1,$zero,0x5 -/* 3e9ec: 0c011582 */ jal func00045608 +/* 3e9ec: 0c011582 */ jal n_alLoadParam /* 3e9f0: 8da60020 */ lw $a2,0x20($t5) /* 3e9f4: 8faf0050 */ lw $t7,0x50($sp) /* 3e9f8: 240e0001 */ addiu $t6,$zero,0x1 @@ -505,7 +505,7 @@ glabel var70054b30 /* 3ef98: 8faf0024 */ lw $t7,0x24($sp) /* 3ef9c: 8fa40050 */ lw $a0,0x50($sp) /* 3efa0: 24050005 */ addiu $a1,$zero,0x5 -/* 3efa4: 0c011582 */ jal func00045608 +/* 3efa4: 0c011582 */ jal n_alLoadParam /* 3efa8: 8de6000c */ lw $a2,0xc($t7) /* 3efac: 8fa90050 */ lw $t1,0x50($sp) /* 3efb0: 240d0001 */ addiu $t5,$zero,0x1 @@ -576,7 +576,7 @@ glabel var70054b30 /* 3f0b4: 24050005 */ addiu $a1,$zero,0x5 /* 3f0b8: 8d0c007c */ lw $t4,0x7c($t0) /* 3f0bc: 01002025 */ or $a0,$t0,$zero -/* 3f0c0: 0c011582 */ jal func00045608 +/* 3f0c0: 0c011582 */ jal n_alLoadParam /* 3f0c4: 8d86000c */ lw $a2,0xc($t4) /* 3f0c8: 10000011 */ b .L0003f110 /* 3f0cc: 00000000 */ nop @@ -680,13 +680,13 @@ s32 n_alEnvmixerParam(N_PVoice *filter, s32 paramID, void *param) e->rs_first = 1; e->rs_upitch = 0; - n_alLoadParam(e, AL_FILTER_RESET, param); + func00045da8(e, AL_FILTER_RESET, param); break; case AL_FILTER_START: e->em_motion = AL_PLAYING; break; default: - n_alLoadParam(e, paramID, param); + func00045da8(e, paramID, param); break; } diff --git a/src/lib/naudio/n_load.c b/src/lib/naudio/n_load.c index e8c63e5ec..5a6675053 100644 --- a/src/lib/naudio/n_load.c +++ b/src/lib/naudio/n_load.c @@ -625,213 +625,73 @@ Acmd *_decodeChunk(Acmd *ptr, N_PVoice *f, s32 tsam, s32 nbytes, s16 outp, s16 i // return ptr; //} -GLOBAL_ASM( -glabel func00045608 -/* 45608: 27bdffd8 */ addiu $sp,$sp,-40 -/* 4560c: afbf001c */ sw $ra,0x1c($sp) -/* 45610: afa40028 */ sw $a0,0x28($sp) -/* 45614: afa5002c */ sw $a1,0x2c($sp) -/* 45618: afa60030 */ sw $a2,0x30($sp) -/* 4561c: afb00018 */ sw $s0,0x18($sp) -/* 45620: 8fae0028 */ lw $t6,0x28($sp) -/* 45624: afae0024 */ sw $t6,0x24($sp) -/* 45628: 8fb0002c */ lw $s0,0x2c($sp) -/* 4562c: 24010004 */ addiu $at,$zero,0x4 -/* 45630: 12010074 */ beq $s0,$at,.L00045804 -/* 45634: 00000000 */ nop -/* 45638: 24010005 */ addiu $at,$zero,0x5 -/* 4563c: 12010003 */ beq $s0,$at,.L0004564c -/* 45640: 00000000 */ nop -/* 45644: 100000a1 */ b .L000458cc -/* 45648: 00000000 */ nop -.L0004564c: -/* 4564c: 8faf0030 */ lw $t7,0x30($sp) -/* 45650: 8fb80024 */ lw $t8,0x24($sp) -/* 45654: af0f0020 */ sw $t7,0x20($t8) -/* 45658: 8fb90024 */ lw $t9,0x24($sp) -/* 4565c: 8f280020 */ lw $t0,0x20($t9) -/* 45660: 8d090000 */ lw $t1,0x0($t0) -/* 45664: af29003c */ sw $t1,0x3c($t9) -/* 45668: 8faa0024 */ lw $t2,0x24($sp) -/* 4566c: ad400030 */ sw $zero,0x30($t2) -/* 45670: 8fab0024 */ lw $t3,0x24($sp) -/* 45674: 8d6c0020 */ lw $t4,0x20($t3) -/* 45678: 91900008 */ lbu $s0,0x8($t4) -/* 4567c: 12000006 */ beqz $s0,.L00045698 -/* 45680: 00000000 */ nop -/* 45684: 24010001 */ addiu $at,$zero,0x1 -/* 45688: 1201003c */ beq $s0,$at,.L0004577c -/* 4568c: 00000000 */ nop -/* 45690: 10000058 */ b .L000457f4 -/* 45694: 00000000 */ nop -.L00045698: -/* 45698: 8fad0024 */ lw $t5,0x24($sp) -/* 4569c: 24010009 */ addiu $at,$zero,0x9 -/* 456a0: 8dae0020 */ lw $t6,0x20($t5) -/* 456a4: 8dcf0004 */ lw $t7,0x4($t6) -/* 456a8: 01e1001a */ div $zero,$t7,$at -/* 456ac: 0000c012 */ mflo $t8 -/* 456b0: 001840c0 */ sll $t0,$t8,0x3 -/* 456b4: 01184021 */ addu $t0,$t0,$t8 -/* 456b8: adc80004 */ sw $t0,0x4($t6) -/* 456bc: 8fa90024 */ lw $t1,0x24($sp) -/* 456c0: 8d390020 */ lw $t9,0x20($t1) -/* 456c4: 8f2a0010 */ lw $t2,0x10($t9) -/* 456c8: 8d4b0000 */ lw $t3,0x0($t2) -/* 456cc: 8d4d0004 */ lw $t5,0x4($t2) -/* 456d0: 000b6040 */ sll $t4,$t3,0x1 -/* 456d4: 018d0019 */ multu $t4,$t5 -/* 456d8: 00007812 */ mflo $t7 -/* 456dc: 000fc0c0 */ sll $t8,$t7,0x3 -/* 456e0: ad380024 */ sw $t8,0x24($t1) -/* 456e4: 8fa80024 */ lw $t0,0x24($sp) -/* 456e8: 8d0e0020 */ lw $t6,0x20($t0) -/* 456ec: 8dd9000c */ lw $t9,0xc($t6) -/* 456f0: 13200019 */ beqz $t9,.L00045758 -/* 456f4: 00000000 */ nop -/* 456f8: 8fab0024 */ lw $t3,0x24($sp) -/* 456fc: 8d6a0020 */ lw $t2,0x20($t3) -/* 45700: 8d4c000c */ lw $t4,0xc($t2) -/* 45704: 8d8d0000 */ lw $t5,0x0($t4) -/* 45708: ad6d0014 */ sw $t5,0x14($t3) -/* 4570c: 8faf0024 */ lw $t7,0x24($sp) -/* 45710: 8df80020 */ lw $t8,0x20($t7) -/* 45714: 8f09000c */ lw $t1,0xc($t8) -/* 45718: 8d280004 */ lw $t0,0x4($t1) -/* 4571c: ade80018 */ sw $t0,0x18($t7) -/* 45720: 8fae0024 */ lw $t6,0x24($sp) -/* 45724: 8dd90020 */ lw $t9,0x20($t6) -/* 45728: 8f2a000c */ lw $t2,0xc($t9) -/* 4572c: 8d4c0008 */ lw $t4,0x8($t2) -/* 45730: adcc001c */ sw $t4,0x1c($t6) -/* 45734: 8fad0024 */ lw $t5,0x24($sp) -/* 45738: 24060020 */ addiu $a2,$zero,0x20 -/* 4573c: 8dab0020 */ lw $t3,0x20($t5) -/* 45740: 8da50010 */ lw $a1,0x10($t5) -/* 45744: 8d64000c */ lw $a0,0xc($t3) -/* 45748: 0c012c5c */ jal bcopy -/* 4574c: 2484000c */ addiu $a0,$a0,0xc -/* 45750: 10000008 */ b .L00045774 -/* 45754: 00000000 */ nop -.L00045758: -/* 45758: 8fb80024 */ lw $t8,0x24($sp) -/* 4575c: af00001c */ sw $zero,0x1c($t8) -/* 45760: 8fa90024 */ lw $t1,0x24($sp) -/* 45764: 8d30001c */ lw $s0,0x1c($t1) -/* 45768: ad300018 */ sw $s0,0x18($t1) -/* 4576c: 8fa80024 */ lw $t0,0x24($sp) -/* 45770: ad100014 */ sw $s0,0x14($t0) -.L00045774: -/* 45774: 10000021 */ b .L000457fc -/* 45778: 00000000 */ nop -.L0004577c: -/* 4577c: 8faf0024 */ lw $t7,0x24($sp) -/* 45780: 8df90020 */ lw $t9,0x20($t7) -/* 45784: 8f2a000c */ lw $t2,0xc($t9) -/* 45788: 11400011 */ beqz $t2,.L000457d0 -/* 4578c: 00000000 */ nop -/* 45790: 8fac0024 */ lw $t4,0x24($sp) -/* 45794: 8d8e0020 */ lw $t6,0x20($t4) -/* 45798: 8dcb000c */ lw $t3,0xc($t6) -/* 4579c: 8d6d0000 */ lw $t5,0x0($t3) -/* 457a0: ad8d0014 */ sw $t5,0x14($t4) -/* 457a4: 8fb80024 */ lw $t8,0x24($sp) -/* 457a8: 8f090020 */ lw $t1,0x20($t8) -/* 457ac: 8d28000c */ lw $t0,0xc($t1) -/* 457b0: 8d0f0004 */ lw $t7,0x4($t0) -/* 457b4: af0f0018 */ sw $t7,0x18($t8) -/* 457b8: 8fb90024 */ lw $t9,0x24($sp) -/* 457bc: 8f2a0020 */ lw $t2,0x20($t9) -/* 457c0: 8d4e000c */ lw $t6,0xc($t2) -/* 457c4: 8dcb0008 */ lw $t3,0x8($t6) -/* 457c8: 10000008 */ b .L000457ec -/* 457cc: af2b001c */ sw $t3,0x1c($t9) -.L000457d0: -/* 457d0: 8fad0024 */ lw $t5,0x24($sp) -/* 457d4: ada0001c */ sw $zero,0x1c($t5) -/* 457d8: 8fac0024 */ lw $t4,0x24($sp) -/* 457dc: 8d90001c */ lw $s0,0x1c($t4) -/* 457e0: ad900018 */ sw $s0,0x18($t4) -/* 457e4: 8fa90024 */ lw $t1,0x24($sp) -/* 457e8: ad300014 */ sw $s0,0x14($t1) -.L000457ec: -/* 457ec: 10000003 */ b .L000457fc -/* 457f0: 00000000 */ nop -.L000457f4: -/* 457f4: 10000001 */ b .L000457fc -/* 457f8: 00000000 */ nop -.L000457fc: -/* 457fc: 10000035 */ b .L000458d4 -/* 45800: 00000000 */ nop -.L00045804: -/* 45804: 8fa80024 */ lw $t0,0x24($sp) -/* 45808: ad000034 */ sw $zero,0x34($t0) -/* 4580c: 8fb80024 */ lw $t8,0x24($sp) -/* 45810: 240f0001 */ addiu $t7,$zero,0x1 -/* 45814: af0f0038 */ sw $t7,0x38($t8) -/* 45818: 8faa0024 */ lw $t2,0x24($sp) -/* 4581c: ad400030 */ sw $zero,0x30($t2) -/* 45820: 8fae0024 */ lw $t6,0x24($sp) -/* 45824: 8dcb0020 */ lw $t3,0x20($t6) -/* 45828: 11600026 */ beqz $t3,.L000458c4 -/* 4582c: 00000000 */ nop -/* 45830: 8fb90024 */ lw $t9,0x24($sp) -/* 45834: 8f2d0020 */ lw $t5,0x20($t9) -/* 45838: 8dac0000 */ lw $t4,0x0($t5) -/* 4583c: af2c003c */ sw $t4,0x3c($t9) -/* 45840: 8fa90024 */ lw $t1,0x24($sp) -/* 45844: 8d280020 */ lw $t0,0x20($t1) -/* 45848: 910f0008 */ lbu $t7,0x8($t0) -/* 4584c: 15e0000d */ bnez $t7,.L00045884 -/* 45850: 00000000 */ nop -/* 45854: 8fb80024 */ lw $t8,0x24($sp) -/* 45858: 8f0a0020 */ lw $t2,0x20($t8) -/* 4585c: 8d4e000c */ lw $t6,0xc($t2) -/* 45860: 11c00006 */ beqz $t6,.L0004587c -/* 45864: 00000000 */ nop -/* 45868: 8fab0024 */ lw $t3,0x24($sp) -/* 4586c: 8d6d0020 */ lw $t5,0x20($t3) -/* 45870: 8dac000c */ lw $t4,0xc($t5) -/* 45874: 8d990008 */ lw $t9,0x8($t4) -/* 45878: ad79001c */ sw $t9,0x1c($t3) -.L0004587c: -/* 4587c: 10000011 */ b .L000458c4 -/* 45880: 00000000 */ nop -.L00045884: -/* 45884: 8fa90024 */ lw $t1,0x24($sp) -/* 45888: 24010001 */ addiu $at,$zero,0x1 -/* 4588c: 8d280020 */ lw $t0,0x20($t1) -/* 45890: 910f0008 */ lbu $t7,0x8($t0) -/* 45894: 15e1000b */ bne $t7,$at,.L000458c4 -/* 45898: 00000000 */ nop -/* 4589c: 8fb80024 */ lw $t8,0x24($sp) -/* 458a0: 8f0a0020 */ lw $t2,0x20($t8) -/* 458a4: 8d4e000c */ lw $t6,0xc($t2) -/* 458a8: 11c00006 */ beqz $t6,.L000458c4 -/* 458ac: 00000000 */ nop -/* 458b0: 8fad0024 */ lw $t5,0x24($sp) -/* 458b4: 8dac0020 */ lw $t4,0x20($t5) -/* 458b8: 8d99000c */ lw $t9,0xc($t4) -/* 458bc: 8f2b0008 */ lw $t3,0x8($t9) -/* 458c0: adab001c */ sw $t3,0x1c($t5) -.L000458c4: -/* 458c4: 10000003 */ b .L000458d4 -/* 458c8: 00000000 */ nop -.L000458cc: -/* 458cc: 10000001 */ b .L000458d4 -/* 458d0: 00000000 */ nop -.L000458d4: -/* 458d4: 10000003 */ b .L000458e4 -/* 458d8: 00001025 */ or $v0,$zero,$zero -/* 458dc: 10000001 */ b .L000458e4 -/* 458e0: 00000000 */ nop -.L000458e4: -/* 458e4: 8fbf001c */ lw $ra,0x1c($sp) -/* 458e8: 8fb00018 */ lw $s0,0x18($sp) -/* 458ec: 27bd0028 */ addiu $sp,$sp,0x28 -/* 458f0: 03e00008 */ jr $ra -/* 458f4: 00000000 */ nop -); +s32 n_alLoadParam(N_PVoice *filter, s32 paramID, void *param) +{ + N_PVoice *a = filter; + + switch (paramID) { + case (AL_FILTER_SET_WAVETABLE): + a->dc_table = (ALWaveTable *) param; + a->dc_memin = (s32) a->dc_table->base; + a->dc_sample = 0; + + switch (a->dc_table->type) { + case (AL_ADPCM_WAVE): + a->dc_table->len = ADPCMFBYTES * ((s32) (a->dc_table->len/ADPCMFBYTES)); + + a->dc_bookSize = 2*a->dc_table->waveInfo.adpcmWave.book->order* + a->dc_table->waveInfo.adpcmWave.book->npredictors*ADPCMVSIZE; + + if (a->dc_table->waveInfo.adpcmWave.loop) { + a->dc_loop.start = a->dc_table->waveInfo.adpcmWave.loop->start; + a->dc_loop.end = a->dc_table->waveInfo.adpcmWave.loop->end; + a->dc_loop.count = a->dc_table->waveInfo.adpcmWave.loop->count; + + bcopy(a->dc_table->waveInfo.adpcmWave.loop->state, a->dc_lstate, sizeof(ADPCM_STATE)); + } else { + a->dc_loop.start = a->dc_loop.end = a->dc_loop.count = 0; + } + break; + case (AL_RAW16_WAVE): + if (a->dc_table->waveInfo.rawWave.loop) { + a->dc_loop.start = a->dc_table->waveInfo.rawWave.loop->start; + a->dc_loop.end = a->dc_table->waveInfo.rawWave.loop->end; + a->dc_loop.count = a->dc_table->waveInfo.rawWave.loop->count; + } else { + a->dc_loop.start = a->dc_loop.end = a->dc_loop.count = 0; + } + break; + default: + break; + } + break; + case (AL_FILTER_RESET): + a->dc_lastsam = 0; + a->dc_first = 1; + a->dc_sample = 0; + + /* sct 2/14/96 - Check table since it is initialized to null and */ + /* Get loop info according to table type. */ + if (a->dc_table) { + a->dc_memin = (s32) a->dc_table->base; + + if (a->dc_table->type == AL_ADPCM_WAVE) { + if (a->dc_table->waveInfo.adpcmWave.loop) { + a->dc_loop.count = a->dc_table->waveInfo.adpcmWave.loop->count; + } + } else if (a->dc_table->type == AL_RAW16_WAVE) { + if (a->dc_table->waveInfo.rawWave.loop) { + a->dc_loop.count = a->dc_table->waveInfo.rawWave.loop->count; + } + } + } + break; + default: + break; + } + + return 0; +} GLOBAL_ASM( glabel _decodeChunk