Decompile n_alFxPull

This commit is contained in:
Ryan Dwyer 2021-11-09 20:57:12 +10:00
parent 0a38827491
commit f6cae4c718
8 changed files with 145 additions and 586 deletions

View File

@ -34,12 +34,12 @@ struct var8009c340 {
u8 mono; u8 mono;
u8 headphone; u8 headphone;
u8 unk03; u8 unk03;
u8 unk04[2];
u8 unk06[2];
u8 unk08[4];
}; };
extern struct var8009c340 var8009c340; extern struct var8009c340 var8009c340;
extern u8 var8009c344[2];
extern u8 var8009c346[2];
extern u8 var8009c348[4];
/* /*
* Synthesis driver stuff * Synthesis driver stuff

View File

@ -1,9 +0,0 @@
#ifndef _IN_LIB_LIB_446D0_H
#define _IN_LIB_LIB_446D0_H
#include <ultra64.h>
#include "data.h"
#include "types.h"
Acmd *func000446d0(s32 sampleOffset, Acmd *cmdptr, s32 fxBus, s32 *numpulls);
#endif

View File

@ -6,7 +6,6 @@
#include "game/atan2f.h" #include "game/atan2f.h"
#include "bss.h" #include "bss.h"
#include "lib/lib_3a100.h" #include "lib/lib_3a100.h"
#include "lib/lib_446d0.h"
#include "data.h" #include "data.h"
#include "types.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); Acmd *_n_filterBuffer(ALLowPass *lp, s32 buff, s32 count, Acmd *p);
f32 _doModFunc(ALDelay *d, s32 count); f32 _doModFunc(ALDelay *d, s32 count);
GLOBAL_ASM( Acmd *n_alFxPull(s32 sampleOffset, Acmd *p, s32 arg2)
glabel n_alAuxBusPull {
.late_rodata Acmd *ptr = p;
glabel var70054a90 ALFx *r = (ALFx *)n_syn->auxBus[arg2].fx;
.word 0x3fb50481 s16 i, buff1, buff2, input, output;
.text s16 *in_ptr, *out_ptr, *prev_out_ptr = 0;
/* 3a100: 27bdff80 */ addiu $sp,$sp,-128 ALDelay *d;
/* 3a104: afbf001c */ sw $ra,0x1c($sp) s32 sp58 = 1;
/* 3a108: afa40080 */ sw $a0,0x80($sp) u32 j;
/* 3a10c: afa50084 */ sw $a1,0x84($sp)
/* 3a110: afa60088 */ sw $a2,0x88($sp) /*
/* 3a114: 8fae0084 */ lw $t6,0x84($sp) * pull channels going into this effect first
/* 3a118: afae007c */ sw $t6,0x7c($sp) */
/* 3a11c: 3c0f8006 */ lui $t7,%hi(n_syn) ptr = n_alAuxBusPull(sampleOffset, p, arg2, &sp58);
/* 3a120: 8deff114 */ lw $t7,%lo(n_syn)($t7)
/* 3a124: 8fb90088 */ lw $t9,0x88($sp) input = N_AL_AUX_L_OUT;
/* 3a128: 8df80034 */ lw $t8,0x34($t7) output = N_AL_AUX_R_OUT;
/* 3a12c: 001940c0 */ sll $t0,$t9,0x3 buff1 = N_AL_TEMP_0;
/* 3a130: 01194021 */ addu $t0,$t0,$t9 buff2 = N_AL_TEMP_1;
/* 3a134: 000840c0 */ sll $t0,$t0,0x3
/* 3a138: 03084821 */ addu $t1,$t8,$t0 if (var8009c344[arg2] == 0) {
/* 3a13c: 8d2a0020 */ lw $t2,0x20($t1) aMix(ptr++, 0, 0xc000, N_AL_AUX_L_OUT, input);
/* 3a140: afaa0078 */ sw $t2,0x78($sp) aMix(ptr++, 0, 0x4000, N_AL_AUX_R_OUT, input);
/* 3a144: afa00060 */ sw $zero,0x60($sp) }
/* 3a148: 240b0001 */ addiu $t3,$zero,0x1
/* 3a14c: afab0058 */ sw $t3,0x58($sp) /* and write the mixed value to the delay line at r->input */
/* 3a150: 8fa40080 */ lw $a0,0x80($sp) ptr = _n_saveBuffer(r, 0, r->input[0], input, ptr);
/* 3a154: 8fa50084 */ lw $a1,0x84($sp)
/* 3a158: 8fa60088 */ lw $a2,0x88($sp) if (var8009c344[arg2]) {
/* 3a15c: 0c0111b4 */ jal func000446d0 ptr = _n_saveBuffer(r, 1, r->input[1], 0x930, ptr);
/* 3a160: 27a70058 */ addiu $a3,$sp,0x58 }
/* 3a164: afa2007c */ sw $v0,0x7c($sp)
/* 3a168: 240c07c0 */ addiu $t4,$zero,0x7c0 for (j = 0; j <= var8009c344[arg2]; j++) {
/* 3a16c: a7ac0070 */ sh $t4,0x70($sp) aClearBuffer(ptr++, output, FIXED_SAMPLE << 1); /* clear the AL_AUX_R_OUT */
/* 3a170: 240d0930 */ addiu $t5,$zero,0x930
/* 3a174: a7ad006e */ sh $t5,0x6e($sp) for (i = 0; i < r->section_count; i++) {
/* 3a178: a7a00074 */ sh $zero,0x74($sp) d = &r->delay[i]; /* get the ALDelay structure */
/* 3a17c: 240e0170 */ addiu $t6,$zero,0x170 in_ptr = &r->input[j][-d->input];
/* 3a180: a7ae0072 */ sh $t6,0x72($sp) out_ptr = &r->input[j][-d->output];
/* 3a184: 8faf0088 */ lw $t7,0x88($sp)
/* 3a188: 3c19800a */ lui $t9,%hi(var8009c340+0x4) if (var8009c346[arg2] && var8009c344[arg2]) {
/* 3a18c: 032fc821 */ addu $t9,$t9,$t7 d->ffcoef = -d->ffcoef;
/* 3a190: 9339c344 */ lbu $t9,%lo(var8009c340+0x4)($t9) d->fbcoef = -d->fbcoef;
/* 3a194: 1720001d */ bnez $t9,.L0003a20c }
/* 3a198: 00000000 */ nop
/* 3a19c: 8fb8007c */ lw $t8,0x7c($sp) if (in_ptr == prev_out_ptr) {
/* 3a1a0: 27080008 */ addiu $t0,$t8,0x8 s16 t = buff2;
/* 3a1a4: afa8007c */ sw $t0,0x7c($sp) buff2 = buff1;
/* 3a1a8: afb80050 */ sw $t8,0x50($sp) buff1 = t;
/* 3a1ac: 8faa0050 */ lw $t2,0x50($sp) } else { /* load data at in_ptr into buff1 */
/* 3a1b0: 3c090c00 */ lui $t1,0xc00 ptr = _n_loadBuffer(r, j, in_ptr, buff1, FIXED_SAMPLE, ptr);
/* 3a1b4: 3529c000 */ ori $t1,$t1,0xc000 }
/* 3a1b8: ad490000 */ sw $t1,0x0($t2)
/* 3a1bc: 87ab0070 */ lh $t3,0x70($sp) ptr = _n_loadOutputBuffer(r, d, j, buff2, ptr);
/* 3a1c0: 8fae0050 */ lw $t6,0x50($sp)
/* 3a1c4: 3c0107c0 */ lui $at,0x7c0 if (d->ffcoef) {
/* 3a1c8: 316cffff */ andi $t4,$t3,0xffff aMix(ptr++, 0, (u16)d->ffcoef, buff1, buff2);
/* 3a1cc: 01816825 */ or $t5,$t4,$at
/* 3a1d0: adcd0004 */ sw $t5,0x4($t6) if (!d->rs && !d->lp) {
/* 3a1d4: 8faf007c */ lw $t7,0x7c($sp) ptr = _n_saveBuffer(r, j, out_ptr, buff2, ptr);
/* 3a1d8: 25f90008 */ addiu $t9,$t7,0x8 }
/* 3a1dc: afb9007c */ sw $t9,0x7c($sp) }
/* 3a1e0: afaf004c */ sw $t7,0x4c($sp)
/* 3a1e4: 8fa8004c */ lw $t0,0x4c($sp) if (d->fbcoef) {
/* 3a1e8: 3c180c00 */ lui $t8,0xc00 aMix(ptr++, 0, (u16)d->fbcoef, buff2, buff1);
/* 3a1ec: 37184000 */ ori $t8,$t8,0x4000 ptr = _n_saveBuffer(r, j, in_ptr, buff1, ptr);
/* 3a1f0: ad180000 */ sw $t8,0x0($t0) }
/* 3a1f4: 87a90070 */ lh $t1,0x70($sp)
/* 3a1f8: 8fac004c */ lw $t4,0x4c($sp) if (d->lp) {
/* 3a1fc: 3c010930 */ lui $at,0x930 ptr = _n_filterBuffer(d->lp, j, buff2, ptr);
/* 3a200: 312affff */ andi $t2,$t1,0xffff }
/* 3a204: 01415825 */ or $t3,$t2,$at
/* 3a208: ad8b0004 */ sw $t3,0x4($t4) if (!d->rs) {
.L0003a20c: ptr = _n_saveBuffer(r, j, out_ptr, buff2, ptr);
/* 3a20c: 8fad0078 */ lw $t5,0x78($sp) }
/* 3a210: 8fae007c */ lw $t6,0x7c($sp)
/* 3a214: 00002825 */ or $a1,$zero,$zero if (d->gain) {
/* 3a218: 8da60028 */ lw $a2,0x28($t5) if (var8009c344[arg2]) {
/* 3a21c: 87a70070 */ lh $a3,0x70($sp) aMix(ptr++, 0, (u16)d->gain, buff2, output);
/* 3a220: 01a02025 */ or $a0,$t5,$zero } else {
/* 3a224: 0c00ecdc */ jal _n_saveBuffer u32 sp34 = d->gain * 1.4141999483109f;
/* 3a228: afae0010 */ sw $t6,0x10($sp)
/* 3a22c: afa2007c */ sw $v0,0x7c($sp) if (sp34 > 0x7fff) {
/* 3a230: 8faf0088 */ lw $t7,0x88($sp) sp34 = 0x7fff;
/* 3a234: 3c19800a */ lui $t9,%hi(var8009c340+0x4) }
/* 3a238: 032fc821 */ addu $t9,$t9,$t7
/* 3a23c: 9339c344 */ lbu $t9,%lo(var8009c340+0x4)($t9) aMix(ptr++, 0, (u16)sp34, buff2, output);
/* 3a240: 1320000a */ beqz $t9,.L0003a26c }
/* 3a244: 00000000 */ nop }
/* 3a248: 8fb80078 */ lw $t8,0x78($sp)
/* 3a24c: 8fa8007c */ lw $t0,0x7c($sp) prev_out_ptr = &r->input[j][d->output];
/* 3a250: 24050001 */ addiu $a1,$zero,0x1 }
/* 3a254: 8f06002c */ lw $a2,0x2c($t8)
/* 3a258: 24070930 */ addiu $a3,$zero,0x930 if (var8009c344[arg2] && j == 0) {
/* 3a25c: 03002025 */ or $a0,$t8,$zero ptr = _n_loadBuffer(r, 1, r->input[1], input, FIXED_SAMPLE, ptr);
/* 3a260: 0c00ecdc */ jal _n_saveBuffer
/* 3a264: afa80010 */ sw $t0,0x10($sp) if (var8009c346[arg2]) {
/* 3a268: afa2007c */ sw $v0,0x7c($sp) aMix(ptr++, 0, 0x5a82, output, 0x650);
.L0003a26c: } else {
/* 3a26c: 8fa90088 */ lw $t1,0x88($sp) aMix(ptr++, 0, 0x5a82, output, 0x4e0);
/* 3a270: 3c0a800a */ lui $t2,%hi(var8009c340+0x4) }
/* 3a274: afa00054 */ sw $zero,0x54($sp) } else {
/* 3a278: 01495021 */ addu $t2,$t2,$t1 // empty
/* 3a27c: 914ac344 */ lbu $t2,%lo(var8009c340+0x4)($t2) }
.L0003a280:
/* 3a280: 8fab007c */ lw $t3,0x7c($sp) /*
/* 3a284: 256c0008 */ addiu $t4,$t3,0x8 * output already in AL_AUX_R_OUT
/* 3a288: afac007c */ sw $t4,0x7c($sp) * just copy to AL_AUX_L_OUT
/* 3a28c: afab0048 */ sw $t3,0x48($sp) */
/* 3a290: 87ad006e */ lh $t5,0x6e($sp) aDMEMMove(ptr++, output, N_AL_AUX_L_OUT, FIXED_SAMPLE << 1);
/* 3a294: 3c0100ff */ lui $at,0xff
/* 3a298: 3421ffff */ ori $at,$at,0xffff /*
/* 3a29c: 8fb90048 */ lw $t9,0x48($sp) * bump the master delay line input pointer
/* 3a2a0: 01a17024 */ and $t6,$t5,$at * modulo the length
/* 3a2a4: 3c010200 */ lui $at,0x200 */
/* 3a2a8: 01c17825 */ or $t7,$t6,$at r->input[j] += FIXED_SAMPLE;
/* 3a2ac: af2f0000 */ sw $t7,0x0($t9)
/* 3a2b0: 8fa80048 */ lw $t0,0x48($sp) if (r->input[j] > &r->base[j][r->length]) {
/* 3a2b4: 24180170 */ addiu $t8,$zero,0x170 r->input[j] -= r->length;
/* 3a2b8: ad180004 */ sw $t8,0x4($t0) }
/* 3a2bc: 8fa90078 */ lw $t1,0x78($sp) }
/* 3a2c0: a7a00076 */ sh $zero,0x76($sp)
/* 3a2c4: 912a0008 */ lbu $t2,0x8($t1) return ptr;
/* 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
);
/* /*
* This routine gets called by alSynSetFXParam. No checking takes place to * This routine gets called by alSynSetFXParam. No checking takes place to

View File

@ -6,7 +6,7 @@ ALFxRef func0003e540(s16 index)
{ {
struct N_ALMainBus_s *mainbus = n_syn->mainBus; 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; return (ALFxRef) n_syn->auxBus[index].fx;
} else { } else {
return NULL; return NULL;
@ -17,7 +17,7 @@ ALFxRef func0003e5b8(s16 index)
{ {
struct N_ALMainBus_s *mainbus = n_syn->mainBus; 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; return (ALFxRef) n_syn->auxBus[index].unk44;
} else { } else {
return NULL; return NULL;

View File

@ -5,7 +5,7 @@
#include "data.h" #include "data.h"
#include "types.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; Acmd *cmd = cmdptr;
struct N_ALAuxBus_s *bus = &n_syn->auxBus[fxBus]; struct N_ALAuxBus_s *bus = &n_syn->auxBus[fxBus];

View File

@ -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_alEnvmixerParam(N_PVoice *p, s32 paramID, void *param);
s32 n_alAuxBusParam( 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); s32 n_alFxParamHdl(void *filter, s32 paramID, void *param);
void n_alFxNew(ALFx **r, ALSynConfig *c, s16 bus, ALHeap *hp); void n_alFxNew(ALFx **r, ALSynConfig *c, s16 bus, ALHeap *hp);

View File

@ -54,7 +54,7 @@ void n_alSynNew(ALSynConfig *c)
n_syn->mainBus = (N_ALMainBus *)alHeapAlloc(hp, 1, sizeof(N_ALMainBus)); n_syn->mainBus = (N_ALMainBus *)alHeapAlloc(hp, 1, sizeof(N_ALMainBus));
/******* fx new *******************************/ /******* 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.next = 0;
n_syn->pFreeList.prev = 0; n_syn->pFreeList.prev = 0;

View File

@ -14,6 +14,9 @@
#include "types.h" #include "types.h"
struct var8009c340 var8009c340; struct var8009c340 var8009c340;
u8 var8009c344[2];
u8 var8009c346[2];
u8 var8009c348[4];
void speakersSetMode(u8 mode) void speakersSetMode(u8 mode)
{ {
@ -43,35 +46,35 @@ void speakersSetMode(u8 mode)
void speaker00034104(s32 index, s32 arg1) void speaker00034104(s32 index, s32 arg1)
{ {
if (arg1 == 0) { if (arg1 == 0) {
arg1 = var8009c340.unk08[index]; arg1 = var8009c348[index];
} }
var8009c340.unk04[index] = 0; var8009c344[index] = 0;
var8009c340.unk06[index] = 0; var8009c346[index] = 0;
switch (arg1) { switch (arg1) {
case 2: case 2:
if (var8009c340.surround) { if (var8009c340.surround) {
var8009c340.unk06[index] = 1; var8009c346[index] = 1;
} }
break; break;
case 3: case 3:
if (var8009c340.surround) { if (var8009c340.surround) {
var8009c340.unk04[index] = 1; var8009c344[index] = 1;
} }
break; break;
case 4: case 4:
if (!var8009c340.mono) { if (!var8009c340.mono) {
var8009c340.unk04[index] = 1; var8009c344[index] = 1;
} }
break; break;
case 5: case 5:
if (!var8009c340.mono) { if (!var8009c340.mono) {
var8009c340.unk04[index] = 1; var8009c344[index] = 1;
var8009c340.unk06[index] = 1; var8009c346[index] = 1;
} }
break; break;
} }
var8009c340.unk08[index] = arg1; var8009c348[index] = arg1;
} }