diff --git a/include/PR/n_libaudio.h b/include/PR/n_libaudio.h index 8d069d30f..24904882d 100644 --- a/include/PR/n_libaudio.h +++ b/include/PR/n_libaudio.h @@ -34,12 +34,12 @@ struct var8009c340 { u8 mono; u8 headphone; u8 unk03; - u8 unk04[2]; - u8 unk06[2]; - u8 unk08[4]; }; extern struct var8009c340 var8009c340; +extern u8 var8009c344[2]; +extern u8 var8009c346[2]; +extern u8 var8009c348[4]; /* * Synthesis driver stuff diff --git a/src/include/lib/lib_446d0.h b/src/include/lib/lib_446d0.h deleted file mode 100644 index 429ed330d..000000000 --- a/src/include/lib/lib_446d0.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_446D0_H -#define _IN_LIB_LIB_446D0_H -#include -#include "data.h" -#include "types.h" - -Acmd *func000446d0(s32 sampleOffset, Acmd *cmdptr, s32 fxBus, s32 *numpulls); - -#endif diff --git a/src/lib/lib_3a100.c b/src/lib/lib_3a100.c index 7affe5e9d..6770bd411 100644 --- a/src/lib/lib_3a100.c +++ b/src/lib/lib_3a100.c @@ -6,7 +6,6 @@ #include "game/atan2f.h" #include "bss.h" #include "lib/lib_3a100.h" -#include "lib/lib_446d0.h" #include "data.h" #include "types.h" @@ -18,564 +17,130 @@ Acmd *_n_saveBuffer(ALFx *r, s32 arg1, s16 *curr_ptr, s32 buff, Acmd *p); Acmd *_n_filterBuffer(ALLowPass *lp, s32 buff, s32 count, Acmd *p); f32 _doModFunc(ALDelay *d, s32 count); -GLOBAL_ASM( -glabel n_alAuxBusPull -.late_rodata -glabel var70054a90 -.word 0x3fb50481 -.text -/* 3a100: 27bdff80 */ addiu $sp,$sp,-128 -/* 3a104: afbf001c */ sw $ra,0x1c($sp) -/* 3a108: afa40080 */ sw $a0,0x80($sp) -/* 3a10c: afa50084 */ sw $a1,0x84($sp) -/* 3a110: afa60088 */ sw $a2,0x88($sp) -/* 3a114: 8fae0084 */ lw $t6,0x84($sp) -/* 3a118: afae007c */ sw $t6,0x7c($sp) -/* 3a11c: 3c0f8006 */ lui $t7,%hi(n_syn) -/* 3a120: 8deff114 */ lw $t7,%lo(n_syn)($t7) -/* 3a124: 8fb90088 */ lw $t9,0x88($sp) -/* 3a128: 8df80034 */ lw $t8,0x34($t7) -/* 3a12c: 001940c0 */ sll $t0,$t9,0x3 -/* 3a130: 01194021 */ addu $t0,$t0,$t9 -/* 3a134: 000840c0 */ sll $t0,$t0,0x3 -/* 3a138: 03084821 */ addu $t1,$t8,$t0 -/* 3a13c: 8d2a0020 */ lw $t2,0x20($t1) -/* 3a140: afaa0078 */ sw $t2,0x78($sp) -/* 3a144: afa00060 */ sw $zero,0x60($sp) -/* 3a148: 240b0001 */ addiu $t3,$zero,0x1 -/* 3a14c: afab0058 */ sw $t3,0x58($sp) -/* 3a150: 8fa40080 */ lw $a0,0x80($sp) -/* 3a154: 8fa50084 */ lw $a1,0x84($sp) -/* 3a158: 8fa60088 */ lw $a2,0x88($sp) -/* 3a15c: 0c0111b4 */ jal func000446d0 -/* 3a160: 27a70058 */ addiu $a3,$sp,0x58 -/* 3a164: afa2007c */ sw $v0,0x7c($sp) -/* 3a168: 240c07c0 */ addiu $t4,$zero,0x7c0 -/* 3a16c: a7ac0070 */ sh $t4,0x70($sp) -/* 3a170: 240d0930 */ addiu $t5,$zero,0x930 -/* 3a174: a7ad006e */ sh $t5,0x6e($sp) -/* 3a178: a7a00074 */ sh $zero,0x74($sp) -/* 3a17c: 240e0170 */ addiu $t6,$zero,0x170 -/* 3a180: a7ae0072 */ sh $t6,0x72($sp) -/* 3a184: 8faf0088 */ lw $t7,0x88($sp) -/* 3a188: 3c19800a */ lui $t9,%hi(var8009c340+0x4) -/* 3a18c: 032fc821 */ addu $t9,$t9,$t7 -/* 3a190: 9339c344 */ lbu $t9,%lo(var8009c340+0x4)($t9) -/* 3a194: 1720001d */ bnez $t9,.L0003a20c -/* 3a198: 00000000 */ nop -/* 3a19c: 8fb8007c */ lw $t8,0x7c($sp) -/* 3a1a0: 27080008 */ addiu $t0,$t8,0x8 -/* 3a1a4: afa8007c */ sw $t0,0x7c($sp) -/* 3a1a8: afb80050 */ sw $t8,0x50($sp) -/* 3a1ac: 8faa0050 */ lw $t2,0x50($sp) -/* 3a1b0: 3c090c00 */ lui $t1,0xc00 -/* 3a1b4: 3529c000 */ ori $t1,$t1,0xc000 -/* 3a1b8: ad490000 */ sw $t1,0x0($t2) -/* 3a1bc: 87ab0070 */ lh $t3,0x70($sp) -/* 3a1c0: 8fae0050 */ lw $t6,0x50($sp) -/* 3a1c4: 3c0107c0 */ lui $at,0x7c0 -/* 3a1c8: 316cffff */ andi $t4,$t3,0xffff -/* 3a1cc: 01816825 */ or $t5,$t4,$at -/* 3a1d0: adcd0004 */ sw $t5,0x4($t6) -/* 3a1d4: 8faf007c */ lw $t7,0x7c($sp) -/* 3a1d8: 25f90008 */ addiu $t9,$t7,0x8 -/* 3a1dc: afb9007c */ sw $t9,0x7c($sp) -/* 3a1e0: afaf004c */ sw $t7,0x4c($sp) -/* 3a1e4: 8fa8004c */ lw $t0,0x4c($sp) -/* 3a1e8: 3c180c00 */ lui $t8,0xc00 -/* 3a1ec: 37184000 */ ori $t8,$t8,0x4000 -/* 3a1f0: ad180000 */ sw $t8,0x0($t0) -/* 3a1f4: 87a90070 */ lh $t1,0x70($sp) -/* 3a1f8: 8fac004c */ lw $t4,0x4c($sp) -/* 3a1fc: 3c010930 */ lui $at,0x930 -/* 3a200: 312affff */ andi $t2,$t1,0xffff -/* 3a204: 01415825 */ or $t3,$t2,$at -/* 3a208: ad8b0004 */ sw $t3,0x4($t4) -.L0003a20c: -/* 3a20c: 8fad0078 */ lw $t5,0x78($sp) -/* 3a210: 8fae007c */ lw $t6,0x7c($sp) -/* 3a214: 00002825 */ or $a1,$zero,$zero -/* 3a218: 8da60028 */ lw $a2,0x28($t5) -/* 3a21c: 87a70070 */ lh $a3,0x70($sp) -/* 3a220: 01a02025 */ or $a0,$t5,$zero -/* 3a224: 0c00ecdc */ jal _n_saveBuffer -/* 3a228: afae0010 */ sw $t6,0x10($sp) -/* 3a22c: afa2007c */ sw $v0,0x7c($sp) -/* 3a230: 8faf0088 */ lw $t7,0x88($sp) -/* 3a234: 3c19800a */ lui $t9,%hi(var8009c340+0x4) -/* 3a238: 032fc821 */ addu $t9,$t9,$t7 -/* 3a23c: 9339c344 */ lbu $t9,%lo(var8009c340+0x4)($t9) -/* 3a240: 1320000a */ beqz $t9,.L0003a26c -/* 3a244: 00000000 */ nop -/* 3a248: 8fb80078 */ lw $t8,0x78($sp) -/* 3a24c: 8fa8007c */ lw $t0,0x7c($sp) -/* 3a250: 24050001 */ addiu $a1,$zero,0x1 -/* 3a254: 8f06002c */ lw $a2,0x2c($t8) -/* 3a258: 24070930 */ addiu $a3,$zero,0x930 -/* 3a25c: 03002025 */ or $a0,$t8,$zero -/* 3a260: 0c00ecdc */ jal _n_saveBuffer -/* 3a264: afa80010 */ sw $t0,0x10($sp) -/* 3a268: afa2007c */ sw $v0,0x7c($sp) -.L0003a26c: -/* 3a26c: 8fa90088 */ lw $t1,0x88($sp) -/* 3a270: 3c0a800a */ lui $t2,%hi(var8009c340+0x4) -/* 3a274: afa00054 */ sw $zero,0x54($sp) -/* 3a278: 01495021 */ addu $t2,$t2,$t1 -/* 3a27c: 914ac344 */ lbu $t2,%lo(var8009c340+0x4)($t2) -.L0003a280: -/* 3a280: 8fab007c */ lw $t3,0x7c($sp) -/* 3a284: 256c0008 */ addiu $t4,$t3,0x8 -/* 3a288: afac007c */ sw $t4,0x7c($sp) -/* 3a28c: afab0048 */ sw $t3,0x48($sp) -/* 3a290: 87ad006e */ lh $t5,0x6e($sp) -/* 3a294: 3c0100ff */ lui $at,0xff -/* 3a298: 3421ffff */ ori $at,$at,0xffff -/* 3a29c: 8fb90048 */ lw $t9,0x48($sp) -/* 3a2a0: 01a17024 */ and $t6,$t5,$at -/* 3a2a4: 3c010200 */ lui $at,0x200 -/* 3a2a8: 01c17825 */ or $t7,$t6,$at -/* 3a2ac: af2f0000 */ sw $t7,0x0($t9) -/* 3a2b0: 8fa80048 */ lw $t0,0x48($sp) -/* 3a2b4: 24180170 */ addiu $t8,$zero,0x170 -/* 3a2b8: ad180004 */ sw $t8,0x4($t0) -/* 3a2bc: 8fa90078 */ lw $t1,0x78($sp) -/* 3a2c0: a7a00076 */ sh $zero,0x76($sp) -/* 3a2c4: 912a0008 */ lbu $t2,0x8($t1) -/* 3a2c8: 19400125 */ blez $t2,.L0003a760 -/* 3a2cc: 00000000 */ nop -.L0003a2d0: -/* 3a2d0: 8fab0078 */ lw $t3,0x78($sp) -/* 3a2d4: 87ad0076 */ lh $t5,0x76($sp) -/* 3a2d8: 8d6c0004 */ lw $t4,0x4($t3) -/* 3a2dc: 000d7080 */ sll $t6,$t5,0x2 -/* 3a2e0: 01cd7021 */ addu $t6,$t6,$t5 -/* 3a2e4: 000e70c0 */ sll $t6,$t6,0x3 -/* 3a2e8: 018e7821 */ addu $t7,$t4,$t6 -/* 3a2ec: afaf005c */ sw $t7,0x5c($sp) -/* 3a2f0: 8fb80054 */ lw $t8,0x54($sp) -/* 3a2f4: 8fab005c */ lw $t3,0x5c($sp) -/* 3a2f8: 8fb90078 */ lw $t9,0x78($sp) -/* 3a2fc: 00184080 */ sll $t0,$t8,0x2 -/* 3a300: 8d6d0000 */ lw $t5,0x0($t3) -/* 3a304: 03284821 */ addu $t1,$t9,$t0 -/* 3a308: 8d2a0028 */ lw $t2,0x28($t1) -/* 3a30c: 000d6023 */ negu $t4,$t5 -/* 3a310: 000c7040 */ sll $t6,$t4,0x1 -/* 3a314: 014e7821 */ addu $t7,$t2,$t6 -/* 3a318: afaf0068 */ sw $t7,0x68($sp) -/* 3a31c: 8fb90054 */ lw $t9,0x54($sp) -/* 3a320: 8fad005c */ lw $t5,0x5c($sp) -/* 3a324: 8fb80078 */ lw $t8,0x78($sp) -/* 3a328: 00194080 */ sll $t0,$t9,0x2 -/* 3a32c: 8dac0004 */ lw $t4,0x4($t5) -/* 3a330: 03084821 */ addu $t1,$t8,$t0 -/* 3a334: 8d2b0028 */ lw $t3,0x28($t1) -/* 3a338: 000c5023 */ negu $t2,$t4 -/* 3a33c: 000a7040 */ sll $t6,$t2,0x1 -/* 3a340: 016e7821 */ addu $t7,$t3,$t6 -/* 3a344: afaf0064 */ sw $t7,0x64($sp) -/* 3a348: 8fb90088 */ lw $t9,0x88($sp) -/* 3a34c: 3c18800a */ lui $t8,%hi(var8009c340+0x6) -/* 3a350: 0319c021 */ addu $t8,$t8,$t9 -/* 3a354: 9318c346 */ lbu $t8,%lo(var8009c340+0x6)($t8) -/* 3a358: 1300000e */ beqz $t8,.L0003a394 -/* 3a35c: 00000000 */ nop -/* 3a360: 3c08800a */ lui $t0,%hi(var8009c340+0x4) -/* 3a364: 01194021 */ addu $t0,$t0,$t9 -/* 3a368: 9108c344 */ lbu $t0,%lo(var8009c340+0x4)($t0) -/* 3a36c: 11000009 */ beqz $t0,.L0003a394 -/* 3a370: 00000000 */ nop -/* 3a374: 8fa9005c */ lw $t1,0x5c($sp) -/* 3a378: 852d0008 */ lh $t5,0x8($t1) -/* 3a37c: 000d6023 */ negu $t4,$t5 -/* 3a380: a52c0008 */ sh $t4,0x8($t1) -/* 3a384: 8faa005c */ lw $t2,0x5c($sp) -/* 3a388: 854b000a */ lh $t3,0xa($t2) -/* 3a38c: 000b7023 */ negu $t6,$t3 -/* 3a390: a54e000a */ sh $t6,0xa($t2) -.L0003a394: -/* 3a394: 8faf0068 */ lw $t7,0x68($sp) -/* 3a398: 8fb80060 */ lw $t8,0x60($sp) -/* 3a39c: 15f80009 */ bne $t7,$t8,.L0003a3c4 -/* 3a3a0: 00000000 */ nop -/* 3a3a4: 87b90072 */ lh $t9,0x72($sp) -/* 3a3a8: a7b90046 */ sh $t9,0x46($sp) -/* 3a3ac: 87a80074 */ lh $t0,0x74($sp) -/* 3a3b0: a7a80072 */ sh $t0,0x72($sp) -/* 3a3b4: 87ad0046 */ lh $t5,0x46($sp) -/* 3a3b8: a7ad0074 */ sh $t5,0x74($sp) -/* 3a3bc: 1000000b */ b .L0003a3ec -/* 3a3c0: 00000000 */ nop -.L0003a3c4: -/* 3a3c4: 8fa9007c */ lw $t1,0x7c($sp) -/* 3a3c8: 240c00b8 */ addiu $t4,$zero,0xb8 -/* 3a3cc: afac0010 */ sw $t4,0x10($sp) -/* 3a3d0: 8fa40078 */ lw $a0,0x78($sp) -/* 3a3d4: 8fa50054 */ lw $a1,0x54($sp) -/* 3a3d8: 8fa60068 */ lw $a2,0x68($sp) -/* 3a3dc: 87a70074 */ lh $a3,0x74($sp) -/* 3a3e0: 0c00ec5e */ jal _n_loadBuffer -/* 3a3e4: afa90014 */ sw $t1,0x14($sp) -/* 3a3e8: afa2007c */ sw $v0,0x7c($sp) -.L0003a3ec: -/* 3a3ec: 8fab007c */ lw $t3,0x7c($sp) -/* 3a3f0: 8fa40078 */ lw $a0,0x78($sp) -/* 3a3f4: 8fa5005c */ lw $a1,0x5c($sp) -/* 3a3f8: 8fa60054 */ lw $a2,0x54($sp) -/* 3a3fc: 87a70072 */ lh $a3,0x72($sp) -/* 3a400: 0c00eb98 */ jal _n_loadOutputBuffer -/* 3a404: afab0010 */ sw $t3,0x10($sp) -/* 3a408: afa2007c */ sw $v0,0x7c($sp) -/* 3a40c: 8fae005c */ lw $t6,0x5c($sp) -/* 3a410: 85ca0008 */ lh $t2,0x8($t6) -/* 3a414: 11400023 */ beqz $t2,.L0003a4a4 -/* 3a418: 00000000 */ nop -/* 3a41c: 8faf007c */ lw $t7,0x7c($sp) -/* 3a420: 25f80008 */ addiu $t8,$t7,0x8 -/* 3a424: afb8007c */ sw $t8,0x7c($sp) -/* 3a428: afaf0040 */ sw $t7,0x40($sp) -/* 3a42c: 8fb9005c */ lw $t9,0x5c($sp) -/* 3a430: 8fa90040 */ lw $t1,0x40($sp) -/* 3a434: 3c010c00 */ lui $at,0xc00 -/* 3a438: 97280008 */ lhu $t0,0x8($t9) -/* 3a43c: 310dffff */ andi $t5,$t0,0xffff -/* 3a440: 01a16025 */ or $t4,$t5,$at -/* 3a444: ad2c0000 */ sw $t4,0x0($t1) -/* 3a448: 87ab0074 */ lh $t3,0x74($sp) -/* 3a44c: 87af0072 */ lh $t7,0x72($sp) -/* 3a450: 8fa80040 */ lw $t0,0x40($sp) -/* 3a454: 316effff */ andi $t6,$t3,0xffff -/* 3a458: 000e5400 */ sll $t2,$t6,0x10 -/* 3a45c: 31f8ffff */ andi $t8,$t7,0xffff -/* 3a460: 0158c825 */ or $t9,$t2,$t8 -/* 3a464: ad190004 */ sw $t9,0x4($t0) -/* 3a468: 8fad005c */ lw $t5,0x5c($sp) -/* 3a46c: 8dac0024 */ lw $t4,0x24($t5) -/* 3a470: 1580000c */ bnez $t4,.L0003a4a4 -/* 3a474: 00000000 */ nop -/* 3a478: 8da90020 */ lw $t1,0x20($t5) -/* 3a47c: 15200009 */ bnez $t1,.L0003a4a4 -/* 3a480: 00000000 */ nop -/* 3a484: 8fab007c */ lw $t3,0x7c($sp) -/* 3a488: 8fa40078 */ lw $a0,0x78($sp) -/* 3a48c: 8fa50054 */ lw $a1,0x54($sp) -/* 3a490: 8fa60064 */ lw $a2,0x64($sp) -/* 3a494: 87a70072 */ lh $a3,0x72($sp) -/* 3a498: 0c00ecdc */ jal _n_saveBuffer -/* 3a49c: afab0010 */ sw $t3,0x10($sp) -/* 3a4a0: afa2007c */ sw $v0,0x7c($sp) -.L0003a4a4: -/* 3a4a4: 8fae005c */ lw $t6,0x5c($sp) -/* 3a4a8: 85cf000a */ lh $t7,0xa($t6) -/* 3a4ac: 11e0001c */ beqz $t7,.L0003a520 -/* 3a4b0: 00000000 */ nop -/* 3a4b4: 8faa007c */ lw $t2,0x7c($sp) -/* 3a4b8: 25580008 */ addiu $t8,$t2,0x8 -/* 3a4bc: afb8007c */ sw $t8,0x7c($sp) -/* 3a4c0: afaa003c */ sw $t2,0x3c($sp) -/* 3a4c4: 8fb9005c */ lw $t9,0x5c($sp) -/* 3a4c8: 8fa9003c */ lw $t1,0x3c($sp) -/* 3a4cc: 3c010c00 */ lui $at,0xc00 -/* 3a4d0: 9728000a */ lhu $t0,0xa($t9) -/* 3a4d4: 310cffff */ andi $t4,$t0,0xffff -/* 3a4d8: 01816825 */ or $t5,$t4,$at -/* 3a4dc: ad2d0000 */ sw $t5,0x0($t1) -/* 3a4e0: 87ab0072 */ lh $t3,0x72($sp) -/* 3a4e4: 87aa0074 */ lh $t2,0x74($sp) -/* 3a4e8: 8fa8003c */ lw $t0,0x3c($sp) -/* 3a4ec: 316effff */ andi $t6,$t3,0xffff -/* 3a4f0: 000e7c00 */ sll $t7,$t6,0x10 -/* 3a4f4: 3158ffff */ andi $t8,$t2,0xffff -/* 3a4f8: 01f8c825 */ or $t9,$t7,$t8 -/* 3a4fc: ad190004 */ sw $t9,0x4($t0) -/* 3a500: 8fac007c */ lw $t4,0x7c($sp) -/* 3a504: 8fa40078 */ lw $a0,0x78($sp) -/* 3a508: 8fa50054 */ lw $a1,0x54($sp) -/* 3a50c: 8fa60068 */ lw $a2,0x68($sp) -/* 3a510: 87a70074 */ lh $a3,0x74($sp) -/* 3a514: 0c00ecdc */ jal _n_saveBuffer -/* 3a518: afac0010 */ sw $t4,0x10($sp) -/* 3a51c: afa2007c */ sw $v0,0x7c($sp) -.L0003a520: -/* 3a520: 8fad005c */ lw $t5,0x5c($sp) -/* 3a524: 8da90020 */ lw $t1,0x20($t5) -/* 3a528: 11200008 */ beqz $t1,.L0003a54c -/* 3a52c: 00000000 */ nop -/* 3a530: 8fab005c */ lw $t3,0x5c($sp) -/* 3a534: 8fa50054 */ lw $a1,0x54($sp) -/* 3a538: 87a60072 */ lh $a2,0x72($sp) -/* 3a53c: 8fa7007c */ lw $a3,0x7c($sp) -/* 3a540: 0c00ed53 */ jal _n_filterBuffer -/* 3a544: 8d640020 */ lw $a0,0x20($t3) -/* 3a548: afa2007c */ sw $v0,0x7c($sp) -.L0003a54c: -/* 3a54c: 8fae005c */ lw $t6,0x5c($sp) -/* 3a550: 8dca0024 */ lw $t2,0x24($t6) -/* 3a554: 15400009 */ bnez $t2,.L0003a57c -/* 3a558: 00000000 */ nop -/* 3a55c: 8faf007c */ lw $t7,0x7c($sp) -/* 3a560: 8fa40078 */ lw $a0,0x78($sp) -/* 3a564: 8fa50054 */ lw $a1,0x54($sp) -/* 3a568: 8fa60064 */ lw $a2,0x64($sp) -/* 3a56c: 87a70072 */ lh $a3,0x72($sp) -/* 3a570: 0c00ecdc */ jal _n_saveBuffer -/* 3a574: afaf0010 */ sw $t7,0x10($sp) -/* 3a578: afa2007c */ sw $v0,0x7c($sp) -.L0003a57c: -/* 3a57c: 8fb8005c */ lw $t8,0x5c($sp) -/* 3a580: 8719000c */ lh $t9,0xc($t8) -/* 3a584: 13200062 */ beqz $t9,.L0003a710 -/* 3a588: 00000000 */ nop -/* 3a58c: 8fa80088 */ lw $t0,0x88($sp) -/* 3a590: 3c0c800a */ lui $t4,%hi(var8009c340+0x4) -/* 3a594: 01886021 */ addu $t4,$t4,$t0 -/* 3a598: 918cc344 */ lbu $t4,%lo(var8009c340+0x4)($t4) -/* 3a59c: 11800016 */ beqz $t4,.L0003a5f8 -/* 3a5a0: 00000000 */ nop -/* 3a5a4: 8fad007c */ lw $t5,0x7c($sp) -/* 3a5a8: 25a90008 */ addiu $t1,$t5,0x8 -/* 3a5ac: afa9007c */ sw $t1,0x7c($sp) -/* 3a5b0: afad0038 */ sw $t5,0x38($sp) -/* 3a5b4: 8fab005c */ lw $t3,0x5c($sp) -/* 3a5b8: 8fb80038 */ lw $t8,0x38($sp) -/* 3a5bc: 3c010c00 */ lui $at,0xc00 -/* 3a5c0: 956e000c */ lhu $t6,0xc($t3) -/* 3a5c4: 31caffff */ andi $t2,$t6,0xffff -/* 3a5c8: 01417825 */ or $t7,$t2,$at -/* 3a5cc: af0f0000 */ sw $t7,0x0($t8) -/* 3a5d0: 87b90072 */ lh $t9,0x72($sp) -/* 3a5d4: 87ad006e */ lh $t5,0x6e($sp) -/* 3a5d8: 8fae0038 */ lw $t6,0x38($sp) -/* 3a5dc: 3328ffff */ andi $t0,$t9,0xffff -/* 3a5e0: 00086400 */ sll $t4,$t0,0x10 -/* 3a5e4: 31a9ffff */ andi $t1,$t5,0xffff -/* 3a5e8: 01895825 */ or $t3,$t4,$t1 -/* 3a5ec: adcb0004 */ sw $t3,0x4($t6) -/* 3a5f0: 10000047 */ b .L0003a710 -/* 3a5f4: 00000000 */ nop -.L0003a5f8: -/* 3a5f8: 8faa005c */ lw $t2,0x5c($sp) -/* 3a5fc: 3c017005 */ lui $at,%hi(var70054a90) -/* 3a600: c4284a90 */ lwc1 $f8,%lo(var70054a90)($at) -/* 3a604: 854f000c */ lh $t7,0xc($t2) -/* 3a608: 24190001 */ addiu $t9,$zero,0x1 -/* 3a60c: 448f2000 */ mtc1 $t7,$f4 -/* 3a610: 00000000 */ nop -/* 3a614: 468021a0 */ cvt.s.w $f6,$f4 -/* 3a618: 46083282 */ mul.s $f10,$f6,$f8 -/* 3a61c: 4458f800 */ cfc1 $t8,$31 -/* 3a620: 44d9f800 */ ctc1 $t9,$31 -/* 3a624: 00000000 */ nop -/* 3a628: 46005424 */ cvt.w.s $f16,$f10 -/* 3a62c: 4459f800 */ cfc1 $t9,$31 -/* 3a630: 00000000 */ nop -/* 3a634: 33210004 */ andi $at,$t9,0x4 -/* 3a638: 33390078 */ andi $t9,$t9,0x78 -/* 3a63c: 13200014 */ beqz $t9,.L0003a690 -/* 3a640: 00000000 */ nop -/* 3a644: 3c014f00 */ lui $at,0x4f00 -/* 3a648: 44818000 */ mtc1 $at,$f16 -/* 3a64c: 24190001 */ addiu $t9,$zero,0x1 -/* 3a650: 46105401 */ sub.s $f16,$f10,$f16 -/* 3a654: 44d9f800 */ ctc1 $t9,$31 -/* 3a658: 00000000 */ nop -/* 3a65c: 46008424 */ cvt.w.s $f16,$f16 -/* 3a660: 4459f800 */ cfc1 $t9,$31 -/* 3a664: 00000000 */ nop -/* 3a668: 33210004 */ andi $at,$t9,0x4 -/* 3a66c: 33390078 */ andi $t9,$t9,0x78 -/* 3a670: 17200005 */ bnez $t9,.L0003a688 -/* 3a674: 00000000 */ nop -/* 3a678: 44198000 */ mfc1 $t9,$f16 -/* 3a67c: 3c018000 */ lui $at,0x8000 -/* 3a680: 10000007 */ b .L0003a6a0 -/* 3a684: 0321c825 */ or $t9,$t9,$at -.L0003a688: -/* 3a688: 10000005 */ b .L0003a6a0 -/* 3a68c: 2419ffff */ addiu $t9,$zero,-1 -.L0003a690: -/* 3a690: 44198000 */ mfc1 $t9,$f16 -/* 3a694: 00000000 */ nop -/* 3a698: 0720fffb */ bltz $t9,.L0003a688 -/* 3a69c: 00000000 */ nop -.L0003a6a0: -/* 3a6a0: 44d8f800 */ ctc1 $t8,$31 -/* 3a6a4: afb90034 */ sw $t9,0x34($sp) -/* 3a6a8: 00000000 */ nop -/* 3a6ac: 8fa80034 */ lw $t0,0x34($sp) -/* 3a6b0: 34018000 */ dli $at,0x8000 -/* 3a6b4: 0101082b */ sltu $at,$t0,$at -/* 3a6b8: 14200003 */ bnez $at,.L0003a6c8 -/* 3a6bc: 00000000 */ nop -/* 3a6c0: 240d7fff */ addiu $t5,$zero,0x7fff -/* 3a6c4: afad0034 */ sw $t5,0x34($sp) -.L0003a6c8: -/* 3a6c8: 8fac007c */ lw $t4,0x7c($sp) -/* 3a6cc: 25890008 */ addiu $t1,$t4,0x8 -/* 3a6d0: afa9007c */ sw $t1,0x7c($sp) -/* 3a6d4: afac0030 */ sw $t4,0x30($sp) -/* 3a6d8: 97ab0036 */ lhu $t3,0x36($sp) -/* 3a6dc: 8faf0030 */ lw $t7,0x30($sp) -/* 3a6e0: 3c010c00 */ lui $at,0xc00 -/* 3a6e4: 316effff */ andi $t6,$t3,0xffff -/* 3a6e8: 01c15025 */ or $t2,$t6,$at -/* 3a6ec: adea0000 */ sw $t2,0x0($t7) -/* 3a6f0: 87b80072 */ lh $t8,0x72($sp) -/* 3a6f4: 87ad006e */ lh $t5,0x6e($sp) -/* 3a6f8: 8fab0030 */ lw $t3,0x30($sp) -/* 3a6fc: 3319ffff */ andi $t9,$t8,0xffff -/* 3a700: 00194400 */ sll $t0,$t9,0x10 -/* 3a704: 31acffff */ andi $t4,$t5,0xffff -/* 3a708: 010c4825 */ or $t1,$t0,$t4 -/* 3a70c: ad690004 */ sw $t1,0x4($t3) -.L0003a710: -/* 3a710: 8faa0054 */ lw $t2,0x54($sp) -/* 3a714: 8fae0078 */ lw $t6,0x78($sp) -/* 3a718: 8fad005c */ lw $t5,0x5c($sp) -/* 3a71c: 000a7880 */ sll $t7,$t2,0x2 -/* 3a720: 01cfc021 */ addu $t8,$t6,$t7 -/* 3a724: 8da80004 */ lw $t0,0x4($t5) -/* 3a728: 8f190028 */ lw $t9,0x28($t8) -/* 3a72c: 00086040 */ sll $t4,$t0,0x1 -/* 3a730: 032c4821 */ addu $t1,$t9,$t4 -/* 3a734: afa90060 */ sw $t1,0x60($sp) -/* 3a738: 87ab0076 */ lh $t3,0x76($sp) -/* 3a73c: 8fb80078 */ lw $t8,0x78($sp) -/* 3a740: 256a0001 */ addiu $t2,$t3,0x1 -/* 3a744: a7aa0076 */ sh $t2,0x76($sp) -/* 3a748: 930d0008 */ lbu $t5,0x8($t8) -/* 3a74c: 000a7400 */ sll $t6,$t2,0x10 -/* 3a750: 000e7c03 */ sra $t7,$t6,0x10 -/* 3a754: 01ed082a */ slt $at,$t7,$t5 -/* 3a758: 1420fedd */ bnez $at,.L0003a2d0 -/* 3a75c: 00000000 */ nop -.L0003a760: -/* 3a760: 8fa80088 */ lw $t0,0x88($sp) -/* 3a764: 3c19800a */ lui $t9,%hi(var8009c340+0x4) -/* 3a768: 0328c821 */ addu $t9,$t9,$t0 -/* 3a76c: 9339c344 */ lbu $t9,%lo(var8009c340+0x4)($t9) -/* 3a770: 13200035 */ beqz $t9,.L0003a848 -/* 3a774: 00000000 */ nop -/* 3a778: 8fac0054 */ lw $t4,0x54($sp) -/* 3a77c: 15800032 */ bnez $t4,.L0003a848 -/* 3a780: 00000000 */ nop -/* 3a784: 8fa90078 */ lw $t1,0x78($sp) -/* 3a788: 8faa007c */ lw $t2,0x7c($sp) -/* 3a78c: 240b00b8 */ addiu $t3,$zero,0xb8 -/* 3a790: 8d26002c */ lw $a2,0x2c($t1) -/* 3a794: afab0010 */ sw $t3,0x10($sp) -/* 3a798: 24050001 */ addiu $a1,$zero,0x1 -/* 3a79c: 87a70070 */ lh $a3,0x70($sp) -/* 3a7a0: 01202025 */ or $a0,$t1,$zero -/* 3a7a4: 0c00ec5e */ jal _n_loadBuffer -/* 3a7a8: afaa0014 */ sw $t2,0x14($sp) -/* 3a7ac: afa2007c */ sw $v0,0x7c($sp) -/* 3a7b0: 8fae0088 */ lw $t6,0x88($sp) -/* 3a7b4: 3c18800a */ lui $t8,%hi(var8009c340+0x6) -/* 3a7b8: 030ec021 */ addu $t8,$t8,$t6 -/* 3a7bc: 9318c346 */ lbu $t8,%lo(var8009c340+0x6)($t8) -/* 3a7c0: 13000011 */ beqz $t8,.L0003a808 -/* 3a7c4: 00000000 */ nop -/* 3a7c8: 8faf007c */ lw $t7,0x7c($sp) -/* 3a7cc: 25ed0008 */ addiu $t5,$t7,0x8 -/* 3a7d0: afad007c */ sw $t5,0x7c($sp) -/* 3a7d4: afaf002c */ sw $t7,0x2c($sp) -/* 3a7d8: 8fb9002c */ lw $t9,0x2c($sp) -/* 3a7dc: 3c080c00 */ lui $t0,0xc00 -/* 3a7e0: 35085a82 */ ori $t0,$t0,0x5a82 -/* 3a7e4: af280000 */ sw $t0,0x0($t9) -/* 3a7e8: 87ac006e */ lh $t4,0x6e($sp) -/* 3a7ec: 8fae002c */ lw $t6,0x2c($sp) -/* 3a7f0: 3189ffff */ andi $t1,$t4,0xffff -/* 3a7f4: 00095c00 */ sll $t3,$t1,0x10 -/* 3a7f8: 356a0650 */ ori $t2,$t3,0x650 -/* 3a7fc: adca0004 */ sw $t2,0x4($t6) -/* 3a800: 1000000f */ b .L0003a840 -/* 3a804: 00000000 */ nop -.L0003a808: -/* 3a808: 8fb8007c */ lw $t8,0x7c($sp) -/* 3a80c: 270f0008 */ addiu $t7,$t8,0x8 -/* 3a810: afaf007c */ sw $t7,0x7c($sp) -/* 3a814: afb80028 */ sw $t8,0x28($sp) -/* 3a818: 8fa80028 */ lw $t0,0x28($sp) -/* 3a81c: 3c0d0c00 */ lui $t5,0xc00 -/* 3a820: 35ad5a82 */ ori $t5,$t5,0x5a82 -/* 3a824: ad0d0000 */ sw $t5,0x0($t0) -/* 3a828: 87b9006e */ lh $t9,0x6e($sp) -/* 3a82c: 8faa0028 */ lw $t2,0x28($sp) -/* 3a830: 332cffff */ andi $t4,$t9,0xffff -/* 3a834: 000c4c00 */ sll $t1,$t4,0x10 -/* 3a838: 352b04e0 */ ori $t3,$t1,0x4e0 -/* 3a83c: ad4b0004 */ sw $t3,0x4($t2) -.L0003a840: -/* 3a840: 10000001 */ b .L0003a848 -/* 3a844: 00000000 */ nop -.L0003a848: -/* 3a848: 8fae007c */ lw $t6,0x7c($sp) -/* 3a84c: 25d80008 */ addiu $t8,$t6,0x8 -/* 3a850: afb8007c */ sw $t8,0x7c($sp) -/* 3a854: afae0024 */ sw $t6,0x24($sp) -/* 3a858: 87af006e */ lh $t7,0x6e($sp) -/* 3a85c: 3c0100ff */ lui $at,0xff -/* 3a860: 3421ffff */ ori $at,$at,0xffff -/* 3a864: 8fb90024 */ lw $t9,0x24($sp) -/* 3a868: 01e16824 */ and $t5,$t7,$at -/* 3a86c: 3c010a00 */ lui $at,0xa00 -/* 3a870: 01a14025 */ or $t0,$t5,$at -/* 3a874: af280000 */ sw $t0,0x0($t9) -/* 3a878: 8fa90024 */ lw $t1,0x24($sp) -/* 3a87c: 3c0c07c0 */ lui $t4,0x7c0 -/* 3a880: 358c0170 */ ori $t4,$t4,0x170 -/* 3a884: ad2c0004 */ sw $t4,0x4($t1) -/* 3a888: 8faa0054 */ lw $t2,0x54($sp) -/* 3a88c: 8fab0078 */ lw $t3,0x78($sp) -/* 3a890: 000a7080 */ sll $t6,$t2,0x2 -/* 3a894: 016ec021 */ addu $t8,$t3,$t6 -/* 3a898: 8f0f0028 */ lw $t7,0x28($t8) -/* 3a89c: 25ed0170 */ addiu $t5,$t7,0x170 -/* 3a8a0: af0d0028 */ sw $t5,0x28($t8) -/* 3a8a4: 8fa80078 */ lw $t0,0x78($sp) -/* 3a8a8: 8fb90054 */ lw $t9,0x54($sp) -/* 3a8ac: 8d0e0000 */ lw $t6,0x0($t0) -/* 3a8b0: 00196080 */ sll $t4,$t9,0x2 -/* 3a8b4: 010c4821 */ addu $t1,$t0,$t4 -/* 3a8b8: 8d2b0020 */ lw $t3,0x20($t1) -/* 3a8bc: 8d2a0028 */ lw $t2,0x28($t1) -/* 3a8c0: 000e7840 */ sll $t7,$t6,0x1 -/* 3a8c4: 016f6821 */ addu $t5,$t3,$t7 -/* 3a8c8: 01aa082b */ sltu $at,$t5,$t2 -/* 3a8cc: 1020000a */ beqz $at,.L0003a8f8 -/* 3a8d0: 00000000 */ nop -/* 3a8d4: 8fb80078 */ lw $t8,0x78($sp) -/* 3a8d8: 8fb90054 */ lw $t9,0x54($sp) -/* 3a8dc: 8f0e0000 */ lw $t6,0x0($t8) -/* 3a8e0: 00196080 */ sll $t4,$t9,0x2 -/* 3a8e4: 030c4821 */ addu $t1,$t8,$t4 -/* 3a8e8: 8d280028 */ lw $t0,0x28($t1) -/* 3a8ec: 000e5840 */ sll $t3,$t6,0x1 -/* 3a8f0: 010b7823 */ subu $t7,$t0,$t3 -/* 3a8f4: ad2f0028 */ sw $t7,0x28($t1) -.L0003a8f8: -/* 3a8f8: 8fb90088 */ lw $t9,0x88($sp) -/* 3a8fc: 3c0c800a */ lui $t4,%hi(var8009c340+0x4) -/* 3a900: 8faa0054 */ lw $t2,0x54($sp) -/* 3a904: 01996021 */ addu $t4,$t4,$t9 -/* 3a908: 918cc344 */ lbu $t4,%lo(var8009c340+0x4)($t4) -/* 3a90c: 254d0001 */ addiu $t5,$t2,0x1 -/* 3a910: afad0054 */ sw $t5,0x54($sp) -/* 3a914: 018d082b */ sltu $at,$t4,$t5 -/* 3a918: 1020fe59 */ beqz $at,.L0003a280 -/* 3a91c: 00000000 */ nop -/* 3a920: 10000003 */ b .L0003a930 -/* 3a924: 8fa2007c */ lw $v0,0x7c($sp) -/* 3a928: 10000001 */ b .L0003a930 -/* 3a92c: 00000000 */ nop -.L0003a930: -/* 3a930: 8fbf001c */ lw $ra,0x1c($sp) -/* 3a934: 27bd0080 */ addiu $sp,$sp,0x80 -/* 3a938: 03e00008 */ jr $ra -/* 3a93c: 00000000 */ nop -); +Acmd *n_alFxPull(s32 sampleOffset, Acmd *p, s32 arg2) +{ + Acmd *ptr = p; + ALFx *r = (ALFx *)n_syn->auxBus[arg2].fx; + s16 i, buff1, buff2, input, output; + s16 *in_ptr, *out_ptr, *prev_out_ptr = 0; + ALDelay *d; + s32 sp58 = 1; + u32 j; + + /* + * pull channels going into this effect first + */ + ptr = n_alAuxBusPull(sampleOffset, p, arg2, &sp58); + + input = N_AL_AUX_L_OUT; + output = N_AL_AUX_R_OUT; + buff1 = N_AL_TEMP_0; + buff2 = N_AL_TEMP_1; + + if (var8009c344[arg2] == 0) { + aMix(ptr++, 0, 0xc000, N_AL_AUX_L_OUT, input); + aMix(ptr++, 0, 0x4000, N_AL_AUX_R_OUT, input); + } + + /* and write the mixed value to the delay line at r->input */ + ptr = _n_saveBuffer(r, 0, r->input[0], input, ptr); + + if (var8009c344[arg2]) { + ptr = _n_saveBuffer(r, 1, r->input[1], 0x930, ptr); + } + + for (j = 0; j <= var8009c344[arg2]; j++) { + aClearBuffer(ptr++, output, FIXED_SAMPLE << 1); /* clear the AL_AUX_R_OUT */ + + for (i = 0; i < r->section_count; i++) { + d = &r->delay[i]; /* get the ALDelay structure */ + in_ptr = &r->input[j][-d->input]; + out_ptr = &r->input[j][-d->output]; + + if (var8009c346[arg2] && var8009c344[arg2]) { + d->ffcoef = -d->ffcoef; + d->fbcoef = -d->fbcoef; + } + + if (in_ptr == prev_out_ptr) { + s16 t = buff2; + buff2 = buff1; + buff1 = t; + } else { /* load data at in_ptr into buff1 */ + ptr = _n_loadBuffer(r, j, in_ptr, buff1, FIXED_SAMPLE, ptr); + } + + ptr = _n_loadOutputBuffer(r, d, j, buff2, ptr); + + if (d->ffcoef) { + aMix(ptr++, 0, (u16)d->ffcoef, buff1, buff2); + + if (!d->rs && !d->lp) { + ptr = _n_saveBuffer(r, j, out_ptr, buff2, ptr); + } + } + + if (d->fbcoef) { + aMix(ptr++, 0, (u16)d->fbcoef, buff2, buff1); + ptr = _n_saveBuffer(r, j, in_ptr, buff1, ptr); + } + + if (d->lp) { + ptr = _n_filterBuffer(d->lp, j, buff2, ptr); + } + + if (!d->rs) { + ptr = _n_saveBuffer(r, j, out_ptr, buff2, ptr); + } + + if (d->gain) { + if (var8009c344[arg2]) { + aMix(ptr++, 0, (u16)d->gain, buff2, output); + } else { + u32 sp34 = d->gain * 1.4141999483109f; + + if (sp34 > 0x7fff) { + sp34 = 0x7fff; + } + + aMix(ptr++, 0, (u16)sp34, buff2, output); + } + } + + prev_out_ptr = &r->input[j][d->output]; + } + + if (var8009c344[arg2] && j == 0) { + ptr = _n_loadBuffer(r, 1, r->input[1], input, FIXED_SAMPLE, ptr); + + if (var8009c346[arg2]) { + aMix(ptr++, 0, 0x5a82, output, 0x650); + } else { + aMix(ptr++, 0, 0x5a82, output, 0x4e0); + } + } else { + // empty + } + + /* + * output already in AL_AUX_R_OUT + * just copy to AL_AUX_L_OUT + */ + aDMEMMove(ptr++, output, N_AL_AUX_L_OUT, FIXED_SAMPLE << 1); + + /* + * bump the master delay line input pointer + * modulo the length + */ + r->input[j] += FIXED_SAMPLE; + + if (r->input[j] > &r->base[j][r->length]) { + r->input[j] -= r->length; + } + } + + return ptr; +} /* * This routine gets called by alSynSetFXParam. No checking takes place to diff --git a/src/lib/lib_3e3e0.c b/src/lib/lib_3e3e0.c index 93255e419..4ef223ecc 100644 --- a/src/lib/lib_3e3e0.c +++ b/src/lib/lib_3e3e0.c @@ -6,7 +6,7 @@ ALFxRef func0003e540(s16 index) { struct N_ALMainBus_s *mainbus = n_syn->mainBus; - if (mainbus->filter.handler == (void *)n_alAuxBusPull) { + if (mainbus->filter.handler == (void *)n_alFxPull) { return (ALFxRef) n_syn->auxBus[index].fx; } else { return NULL; @@ -17,7 +17,7 @@ ALFxRef func0003e5b8(s16 index) { struct N_ALMainBus_s *mainbus = n_syn->mainBus; - if (mainbus->filter.handler == (void *)n_alAuxBusPull) { + if (mainbus->filter.handler == (void *)n_alFxPull) { return (ALFxRef) n_syn->auxBus[index].unk44; } else { return NULL; diff --git a/src/lib/lib_446d0.c b/src/lib/lib_446d0.c index 3fe32882f..53d580502 100644 --- a/src/lib/lib_446d0.c +++ b/src/lib/lib_446d0.c @@ -5,7 +5,7 @@ #include "data.h" #include "types.h" -Acmd *func000446d0(s32 sampleOffset, Acmd *cmdptr, s32 fxBus, s32 *numpulls) +Acmd *n_alAuxBusPull(s32 sampleOffset, Acmd *cmdptr, s32 fxBus, s32 *numpulls) { Acmd *cmd = cmdptr; struct N_ALAuxBus_s *bus = &n_syn->auxBus[fxBus]; diff --git a/src/lib/naudio/n_synthInternals.h b/src/lib/naudio/n_synthInternals.h index 6a6462c9f..dae68a31b 100644 --- a/src/lib/naudio/n_synthInternals.h +++ b/src/lib/naudio/n_synthInternals.h @@ -173,9 +173,9 @@ Acmd *n_alEnvmixerPull(N_PVoice *f, s32 sampleOffset, Acmd *p); s32 n_alEnvmixerParam(N_PVoice *p, s32 paramID, void *param); s32 n_alAuxBusParam( s32 paramID, void *param); -Acmd *n_alAuxBusPull( s32 sampleOffset, Acmd *p); +Acmd *n_alAuxBusPull(s32 sampleOffset, Acmd *cmdptr, s32 fxBus, s32 *numpulls); -Acmd *n_alFxPull( s32 sampleOffset, Acmd *p); +Acmd *n_alFxPull( s32 sampleOffset, Acmd *p, s32 arg2); s32 n_alFxParamHdl(void *filter, s32 paramID, void *param); void n_alFxNew(ALFx **r, ALSynConfig *c, s16 bus, ALHeap *hp); diff --git a/src/lib/naudio/n_synthesizer.c b/src/lib/naudio/n_synthesizer.c index 746bd16eb..778af119b 100644 --- a/src/lib/naudio/n_synthesizer.c +++ b/src/lib/naudio/n_synthesizer.c @@ -54,7 +54,7 @@ void n_alSynNew(ALSynConfig *c) n_syn->mainBus = (N_ALMainBus *)alHeapAlloc(hp, 1, sizeof(N_ALMainBus)); /******* fx new *******************************/ - n_syn->mainBus->filter.handler = (N_ALCmdHandler)n_alAuxBusPull; + n_syn->mainBus->filter.handler = (N_ALCmdHandler)n_alFxPull; n_syn->pFreeList.next = 0; n_syn->pFreeList.prev = 0; diff --git a/src/lib/speaker.c b/src/lib/speaker.c index ea95935ac..4fdeb77ec 100644 --- a/src/lib/speaker.c +++ b/src/lib/speaker.c @@ -14,6 +14,9 @@ #include "types.h" struct var8009c340 var8009c340; +u8 var8009c344[2]; +u8 var8009c346[2]; +u8 var8009c348[4]; void speakersSetMode(u8 mode) { @@ -43,35 +46,35 @@ void speakersSetMode(u8 mode) void speaker00034104(s32 index, s32 arg1) { if (arg1 == 0) { - arg1 = var8009c340.unk08[index]; + arg1 = var8009c348[index]; } - var8009c340.unk04[index] = 0; - var8009c340.unk06[index] = 0; + var8009c344[index] = 0; + var8009c346[index] = 0; switch (arg1) { case 2: if (var8009c340.surround) { - var8009c340.unk06[index] = 1; + var8009c346[index] = 1; } break; case 3: if (var8009c340.surround) { - var8009c340.unk04[index] = 1; + var8009c344[index] = 1; } break; case 4: if (!var8009c340.mono) { - var8009c340.unk04[index] = 1; + var8009c344[index] = 1; } break; case 5: if (!var8009c340.mono) { - var8009c340.unk04[index] = 1; - var8009c340.unk06[index] = 1; + var8009c344[index] = 1; + var8009c346[index] = 1; } break; } - var8009c340.unk08[index] = arg1; + var8009c348[index] = arg1; }