From 12d33c44d01aea09506010d95ce2fa582a623a4a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 2 Nov 2021 18:29:51 +1000 Subject: [PATCH] Decompile updateOscMain --- src/lib/lib_2fc60.c | 625 ++++++++++---------------------------------- 1 file changed, 140 insertions(+), 485 deletions(-) diff --git a/src/lib/lib_2fc60.c b/src/lib/lib_2fc60.c index 9f0914c6a..1f30fb4e5 100644 --- a/src/lib/lib_2fc60.c +++ b/src/lib/lib_2fc60.c @@ -2,90 +2,34 @@ #include "constants.h" #include "types.h" -typedef struct { - u8 rate; - u8 depth; - u8 oscCount; -} defData; +struct typea { + u8 unk28; + u8 unk29; +}; -typedef struct { - u8 halfdepth; - u8 baseVol; -} tremSinData; +struct typeb { + f32 unk28; +}; -typedef struct { - u8 curVal; - u8 hiVal; - u8 loVal; -} tremSqrData; - -typedef struct { - u8 baseVol; - u8 depth; -} tremSawData; - -typedef struct { - f32 depthcents; -} vibSinData; - -typedef struct { - f32 loRatio; - f32 hiRatio; -} vibSqrData; - -typedef struct { - s32 hicents; - s32 centsrange; -} vibDSawData; - -typedef struct { - s32 locents; - s32 centsrange; -} vibASawData; - -typedef struct { - u32 unk0c; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1c; +typedef struct oscData_s { + struct oscData_s *next; + u8 type; + u8 stateFlags; + u16 maxCount; + u32 curCount; + f32 unk0c; + f32 unk10; + u16 unk14; + u16 unk16; + f32 unk18; + f32 unk1c; u16 unk20; u16 unk22; u16 unk24; u16 unk26; - u8 unk28; - u8 unk29; -} type01Data; - -typedef struct { - u32 unk0c; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1c; - u16 unk20; - u16 unk22; - u16 unk24; - f32 unk28; -} type80Data; - -typedef struct oscData_s { - struct oscData_s *next; - u8 type; - u8 stateFlags; - u16 maxCount; - u16 curCount; union { - defData def; - tremSinData tsin; - tremSqrData tsqr; - tremSawData tsaw; - vibSinData vsin; - vibSqrData vsqr; - vibDSawData vdsaw; - vibASawData vasaw; - type01Data type01; - type80Data type80; + struct typea a; + struct typeb b; } data; } oscData; @@ -97,6 +41,7 @@ u32 var8009c2cc; N_ALSndPlayer var8009c2d0; ALMicroTime updateOsc(void *oscState, f32 *updateVal); +ALMicroTime updateOscMain(oscData *statePtr, f32 *updateVal); void func00030bd8(void *oscState); ALMicroTime func000301e4(void **oscState, f32 *initVal, u8 oscType, u8 oscRate, u8 oscDepth, u8 oscDelay, u8 arg6); @@ -139,16 +84,16 @@ ALMicroTime initOsc(void **oscState, f32 *initVal, u8 oscType, u8 oscRate, u8 os switch (oscType) { case 1: - state->data.type01.unk24 = 0; - state->data.type01.unk22 = 259 - oscRate; - state->data.type01.unk28 = oscDepth >> 1; - state->data.type01.unk29 = 127 - state->data.type01.unk28; - *initVal = state->data.type01.unk29; + state->unk24 = 0; + state->unk22 = 259 - oscRate; + state->data.a.unk28 = oscDepth >> 1; + state->data.a.unk29 = 127 - state->data.a.unk28; + *initVal = state->data.a.unk29; break; case 0x80: - state->data.type80.unk28 = func0002fc60(oscDepth); - state->data.type80.unk24 = 0; - state->data.type80.unk22 = 259 - oscRate; + state->data.b.unk28 = func0002fc60(oscDepth); + state->unk24 = 0; + state->unk22 = 259 - oscRate; *initVal = 1.0f; break; default: @@ -163,34 +108,34 @@ ALMicroTime updateOsc(void *oscState, f32 *updateVal) { f32 sp2c; oscData *state = oscState; - ALMicroTime result = PAL ? 20000 : 16000; + ALMicroTime result = AL_USEC_PER_FRAME; if (state->type != 1 && state->type != 0x80) { - return func00030690(oscState, updateVal); + return updateOscMain(oscState, updateVal); } switch (state->type) { case 0x01: - state->data.type01.unk24++; + state->unk24++; - if (state->data.type01.unk24 >= state->data.type01.unk22) { - state->data.type01.unk24 = 0; + if (state->unk24 >= state->unk22) { + state->unk24 = 0; } - sp2c = (f32)state->data.type01.unk24 / (f32)state->data.type01.unk22; + sp2c = (f32)state->unk24 / (f32)state->unk22; sp2c = sinf(sp2c * M_TAU); - sp2c = sp2c * state->data.type01.unk28; - *updateVal = state->data.type01.unk29 + sp2c; + sp2c = sp2c * state->data.a.unk28; + *updateVal = state->data.a.unk29 + sp2c; break; case 0x80: - state->data.type80.unk24++; + state->unk24++; - if (state->data.type80.unk24 >= state->data.type80.unk22) { - state->data.type80.unk24 = 0; + if (state->unk24 >= state->unk22) { + state->unk24 = 0; } - sp2c = (f32)state->data.type80.unk24 / (f32)state->data.type80.unk22; - sp2c = sinf(sp2c * M_TAU) * state->data.type80.unk28; + sp2c = (f32)state->unk24 / (f32)state->unk22; + sp2c = sinf(sp2c * M_TAU) * state->data.b.unk28; *updateVal = alCents2Ratio(sp2c); break; default: @@ -934,393 +879,103 @@ glabel var700546f4 ); #endif -GLOBAL_ASM( -glabel func00030690 -.late_rodata -glabel var700546f8 -.word func00030690+0x18c -glabel var700546fc -.word func00030690+0x18c -glabel var70054700 -.word func00030690+0x18c -glabel var70054704 -.word func00030690+0x18c -glabel var70054708 -.word func00030690+0x1cc -glabel var7005470c -.word func00030690+0x1cc -glabel var70054710 -.word func00030690+0x2d0 -glabel var70054714 -.word func00030690+0x2d0 -glabel var70054718 -.word func00030690+0x308 -glabel var7005471c -.word func00030690+0x308 -glabel var70054720 -.word func00030690+0x334 -glabel var70054724 -.word func00030690+0x334 -.text -/* 30690: 27bdffd8 */ addiu $sp,$sp,-40 -/* 30694: afbf0014 */ sw $ra,0x14($sp) -/* 30698: afa40028 */ sw $a0,0x28($sp) -/* 3069c: afa5002c */ sw $a1,0x2c($sp) -/* 306a0: 8fae0028 */ lw $t6,0x28($sp) -/* 306a4: 2401ff7f */ addiu $at,$zero,-129 -/* 306a8: 91cf0004 */ lbu $t7,0x4($t6) -/* 306ac: 01e1c024 */ and $t8,$t7,$at -/* 306b0: 2b010006 */ slti $at,$t8,0x6 -/* 306b4: 14200020 */ bnez $at,.L00030738 -/* 306b8: 00000000 */ nop -/* 306bc: 8fb90028 */ lw $t9,0x28($sp) -/* 306c0: 97280014 */ lhu $t0,0x14($t9) -/* 306c4: 25090001 */ addiu $t1,$t0,0x1 -/* 306c8: a7290014 */ sh $t1,0x14($t9) -/* 306cc: 8faa0028 */ lw $t2,0x28($sp) -/* 306d0: 954b0014 */ lhu $t3,0x14($t2) -/* 306d4: 954c0016 */ lhu $t4,0x16($t2) -/* 306d8: 016c082a */ slt $at,$t3,$t4 -/* 306dc: 14200003 */ bnez $at,.L000306ec -/* 306e0: 00000000 */ nop -/* 306e4: 8fad0028 */ lw $t5,0x28($sp) -/* 306e8: a5a00014 */ sh $zero,0x14($t5) -.L000306ec: -/* 306ec: 8fae0028 */ lw $t6,0x28($sp) -/* 306f0: 95cf0014 */ lhu $t7,0x14($t6) -/* 306f4: 448f2000 */ mtc1 $t7,$f4 -/* 306f8: 05e10005 */ bgez $t7,.L00030710 -/* 306fc: 468021a0 */ cvt.s.w $f6,$f4 -/* 30700: 3c014f80 */ lui $at,0x4f80 -/* 30704: 44814000 */ mtc1 $at,$f8 -/* 30708: 00000000 */ nop -/* 3070c: 46083180 */ add.s $f6,$f6,$f8 -.L00030710: -/* 30710: 95d80016 */ lhu $t8,0x16($t6) -/* 30714: 44985000 */ mtc1 $t8,$f10 -/* 30718: 07010005 */ bgez $t8,.L00030730 -/* 3071c: 46805420 */ cvt.s.w $f16,$f10 -/* 30720: 3c014f80 */ lui $at,0x4f80 -/* 30724: 44819000 */ mtc1 $at,$f18 -/* 30728: 00000000 */ nop -/* 3072c: 46128400 */ add.s $f16,$f16,$f18 -.L00030730: -/* 30730: 46103103 */ div.s $f4,$f6,$f16 -/* 30734: e7a40020 */ swc1 $f4,0x20($sp) -.L00030738: -/* 30738: 8fa80028 */ lw $t0,0x28($sp) -/* 3073c: 44805000 */ mtc1 $zero,$f10 -/* 30740: c508001c */ lwc1 $f8,0x1c($t0) -/* 30744: 460a4032 */ c.eq.s $f8,$f10 -/* 30748: 00000000 */ nop -/* 3074c: 45010015 */ bc1t .L000307a4 -/* 30750: 00000000 */ nop -/* 30754: 8fa90028 */ lw $t1,0x28($sp) -/* 30758: c5320018 */ lwc1 $f18,0x18($t1) -/* 3075c: c526001c */ lwc1 $f6,0x1c($t1) -/* 30760: 46069400 */ add.s $f16,$f18,$f6 -/* 30764: e5300018 */ swc1 $f16,0x18($t1) -/* 30768: 8fb90028 */ lw $t9,0x28($sp) -/* 3076c: 3c013f80 */ lui $at,0x3f80 -/* 30770: 44814000 */ mtc1 $at,$f8 -/* 30774: c7240018 */ lwc1 $f4,0x18($t9) -/* 30778: 4604403e */ c.le.s $f8,$f4 -/* 3077c: 00000000 */ nop -/* 30780: 45000008 */ bc1f .L000307a4 -/* 30784: 00000000 */ nop -/* 30788: 3c013f80 */ lui $at,0x3f80 -/* 3078c: 44815000 */ mtc1 $at,$f10 -/* 30790: 8faa0028 */ lw $t2,0x28($sp) -/* 30794: e54a0018 */ swc1 $f10,0x18($t2) -/* 30798: 44809000 */ mtc1 $zero,$f18 -/* 3079c: 8fab0028 */ lw $t3,0x28($sp) -/* 307a0: e572001c */ swc1 $f18,0x1c($t3) -.L000307a4: -/* 307a4: 8fac0028 */ lw $t4,0x28($sp) -/* 307a8: c586000c */ lwc1 $f6,0xc($t4) -/* 307ac: e7a60024 */ swc1 $f6,0x24($sp) -/* 307b0: 8fad0028 */ lw $t5,0x28($sp) -/* 307b4: 3c013f80 */ lui $at,0x3f80 -/* 307b8: 44812000 */ mtc1 $at,$f4 -/* 307bc: c5b00018 */ lwc1 $f16,0x18($t5) -/* 307c0: 46048032 */ c.eq.s $f16,$f4 -/* 307c4: 00000000 */ nop -/* 307c8: 45010006 */ bc1t .L000307e4 -/* 307cc: 00000000 */ nop -/* 307d0: 8faf0028 */ lw $t7,0x28($sp) -/* 307d4: c7a80024 */ lwc1 $f8,0x24($sp) -/* 307d8: c5ea0018 */ lwc1 $f10,0x18($t7) -/* 307dc: 460a4482 */ mul.s $f18,$f8,$f10 -/* 307e0: e7b20024 */ swc1 $f18,0x24($sp) -.L000307e4: -/* 307e4: 8fae0028 */ lw $t6,0x28($sp) -/* 307e8: 2401ff7f */ addiu $at,$zero,-129 -/* 307ec: 91d80004 */ lbu $t8,0x4($t6) -/* 307f0: 03014024 */ and $t0,$t8,$at -/* 307f4: 2509fffe */ addiu $t1,$t0,-2 -/* 307f8: 2d21000c */ sltiu $at,$t1,0xc -/* 307fc: 102000da */ beqz $at,.L00030b68 -/* 30800: 00000000 */ nop -/* 30804: 00094880 */ sll $t1,$t1,0x2 -/* 30808: 3c017005 */ lui $at,%hi(var700546f8) -/* 3080c: 00290821 */ addu $at,$at,$t1 -/* 30810: 8c2946f8 */ lw $t1,%lo(var700546f8)($at) -/* 30814: 01200008 */ jr $t1 -/* 30818: 00000000 */ nop -/* 3081c: 8fb90028 */ lw $t9,0x28($sp) -/* 30820: 972a0014 */ lhu $t2,0x14($t9) -/* 30824: 11400004 */ beqz $t2,.L00030838 -/* 30828: 00000000 */ nop -/* 3082c: c7a60024 */ lwc1 $f6,0x24($sp) -/* 30830: 10000004 */ b .L00030844 -/* 30834: e7a60020 */ swc1 $f6,0x20($sp) -.L00030838: -/* 30838: 8fab0028 */ lw $t3,0x28($sp) -/* 3083c: c5700010 */ lwc1 $f16,0x10($t3) -/* 30840: e7b00020 */ swc1 $f16,0x20($sp) -.L00030844: -/* 30844: 8fac0028 */ lw $t4,0x28($sp) -/* 30848: 958d0014 */ lhu $t5,0x14($t4) -/* 3084c: 39af0001 */ xori $t7,$t5,0x1 -/* 30850: a58f0014 */ sh $t7,0x14($t4) -/* 30854: 100000c4 */ b .L00030b68 -/* 30858: 00000000 */ nop -/* 3085c: 3c013e80 */ lui $at,0x3e80 -/* 30860: 44814000 */ mtc1 $at,$f8 -/* 30864: c7a40020 */ lwc1 $f4,0x20($sp) -/* 30868: 4608203c */ c.lt.s $f4,$f8 -/* 3086c: 00000000 */ nop -/* 30870: 4500000a */ bc1f .L0003089c -/* 30874: 00000000 */ nop -/* 30878: 3c014080 */ lui $at,0x4080 -/* 3087c: 44815000 */ mtc1 $at,$f10 -/* 30880: c7b20024 */ lwc1 $f18,0x24($sp) -/* 30884: c7b00020 */ lwc1 $f16,0x20($sp) -/* 30888: 46125182 */ mul.s $f6,$f10,$f18 -/* 3088c: 00000000 */ nop -/* 30890: 46068102 */ mul.s $f4,$f16,$f6 -/* 30894: 1000002b */ b .L00030944 -/* 30898: e7a40020 */ swc1 $f4,0x20($sp) -.L0003089c: -/* 3089c: 3c013f40 */ lui $at,0x3f40 -/* 308a0: 44815000 */ mtc1 $at,$f10 -/* 308a4: c7a80020 */ lwc1 $f8,0x20($sp) -/* 308a8: 4608503e */ c.le.s $f10,$f8 -/* 308ac: 00000000 */ nop -/* 308b0: 45000013 */ bc1f .L00030900 -/* 308b4: 00000000 */ nop -/* 308b8: 3c013f40 */ lui $at,0x3f40 -/* 308bc: 44818000 */ mtc1 $at,$f16 -/* 308c0: c7b20020 */ lwc1 $f18,0x20($sp) -/* 308c4: 46109181 */ sub.s $f6,$f18,$f16 -/* 308c8: e7a60020 */ swc1 $f6,0x20($sp) -/* 308cc: 3c014080 */ lui $at,0x4080 -/* 308d0: 44812000 */ mtc1 $at,$f4 -/* 308d4: c7a80024 */ lwc1 $f8,0x24($sp) -/* 308d8: c7b20020 */ lwc1 $f18,0x20($sp) -/* 308dc: 46082282 */ mul.s $f10,$f4,$f8 -/* 308e0: 00000000 */ nop -/* 308e4: 460a9402 */ mul.s $f16,$f18,$f10 -/* 308e8: e7b00020 */ swc1 $f16,0x20($sp) -/* 308ec: c7a60020 */ lwc1 $f6,0x20($sp) -/* 308f0: c7a40024 */ lwc1 $f4,0x24($sp) -/* 308f4: 46043201 */ sub.s $f8,$f6,$f4 -/* 308f8: 10000012 */ b .L00030944 -/* 308fc: e7a80020 */ swc1 $f8,0x20($sp) -.L00030900: -/* 30900: 3c013e80 */ lui $at,0x3e80 -/* 30904: 44815000 */ mtc1 $at,$f10 -/* 30908: c7b20020 */ lwc1 $f18,0x20($sp) -/* 3090c: 460a9401 */ sub.s $f16,$f18,$f10 -/* 30910: e7b00020 */ swc1 $f16,0x20($sp) -/* 30914: 3c014080 */ lui $at,0x4080 -/* 30918: 44813000 */ mtc1 $at,$f6 -/* 3091c: c7a40024 */ lwc1 $f4,0x24($sp) -/* 30920: c7b20020 */ lwc1 $f18,0x20($sp) -/* 30924: 46043202 */ mul.s $f8,$f6,$f4 -/* 30928: 00000000 */ nop -/* 3092c: 46089282 */ mul.s $f10,$f18,$f8 -/* 30930: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30934: c7b00024 */ lwc1 $f16,0x24($sp) -/* 30938: c7a60020 */ lwc1 $f6,0x20($sp) -/* 3093c: 46068101 */ sub.s $f4,$f16,$f6 -/* 30940: e7a40020 */ swc1 $f4,0x20($sp) -.L00030944: -/* 30944: 8fae0028 */ lw $t6,0x28($sp) -/* 30948: c7b20020 */ lwc1 $f18,0x20($sp) -/* 3094c: c5c80010 */ lwc1 $f8,0x10($t6) -/* 30950: 46089280 */ add.s $f10,$f18,$f8 -/* 30954: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30958: 10000083 */ b .L00030b68 -/* 3095c: 00000000 */ nop -/* 30960: 3c014780 */ lui $at,0x4780 -/* 30964: 44813000 */ mtc1 $at,$f6 -/* 30968: c7b00020 */ lwc1 $f16,0x20($sp) -/* 3096c: 46068302 */ mul.s $f12,$f16,$f6 -/* 30970: 0c00c069 */ jal func000301a4 -/* 30974: 00000000 */ nop -/* 30978: c7a40024 */ lwc1 $f4,0x24($sp) -/* 3097c: 8fb80028 */ lw $t8,0x28($sp) -/* 30980: 46040482 */ mul.s $f18,$f0,$f4 -/* 30984: c7080010 */ lwc1 $f8,0x10($t8) -/* 30988: 46089280 */ add.s $f10,$f18,$f8 -/* 3098c: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30990: 10000075 */ b .L00030b68 -/* 30994: 00000000 */ nop -/* 30998: c7b00020 */ lwc1 $f16,0x20($sp) -/* 3099c: c7a60024 */ lwc1 $f6,0x24($sp) -/* 309a0: 46068102 */ mul.s $f4,$f16,$f6 -/* 309a4: e7a40020 */ swc1 $f4,0x20($sp) -/* 309a8: 8fa80028 */ lw $t0,0x28($sp) -/* 309ac: c7b20020 */ lwc1 $f18,0x20($sp) -/* 309b0: c5080010 */ lwc1 $f8,0x10($t0) -/* 309b4: 46089280 */ add.s $f10,$f18,$f8 -/* 309b8: e7aa0020 */ swc1 $f10,0x20($sp) -/* 309bc: 1000006a */ b .L00030b68 -/* 309c0: 00000000 */ nop -/* 309c4: 3c013e80 */ lui $at,0x3e80 -/* 309c8: 44813000 */ mtc1 $at,$f6 -/* 309cc: c7b00020 */ lwc1 $f16,0x20($sp) -/* 309d0: 4606803c */ c.lt.s $f16,$f6 -/* 309d4: 00000000 */ nop -/* 309d8: 4500000a */ bc1f .L00030a04 -/* 309dc: 00000000 */ nop -/* 309e0: 3c014080 */ lui $at,0x4080 -/* 309e4: 44812000 */ mtc1 $at,$f4 -/* 309e8: c7b20024 */ lwc1 $f18,0x24($sp) -/* 309ec: c7aa0020 */ lwc1 $f10,0x20($sp) -/* 309f0: 46122202 */ mul.s $f8,$f4,$f18 -/* 309f4: 00000000 */ nop -/* 309f8: 46085402 */ mul.s $f16,$f10,$f8 -/* 309fc: 1000002b */ b .L00030aac -/* 30a00: e7b00020 */ swc1 $f16,0x20($sp) -.L00030a04: -/* 30a04: 3c013f40 */ lui $at,0x3f40 -/* 30a08: 44812000 */ mtc1 $at,$f4 -/* 30a0c: c7a60020 */ lwc1 $f6,0x20($sp) -/* 30a10: 4606203e */ c.le.s $f4,$f6 -/* 30a14: 00000000 */ nop -/* 30a18: 45000013 */ bc1f .L00030a68 -/* 30a1c: 00000000 */ nop -/* 30a20: 3c013f40 */ lui $at,0x3f40 -/* 30a24: 44815000 */ mtc1 $at,$f10 -/* 30a28: c7b20020 */ lwc1 $f18,0x20($sp) -/* 30a2c: 460a9201 */ sub.s $f8,$f18,$f10 -/* 30a30: e7a80020 */ swc1 $f8,0x20($sp) -/* 30a34: 3c014080 */ lui $at,0x4080 -/* 30a38: 44818000 */ mtc1 $at,$f16 -/* 30a3c: c7a60024 */ lwc1 $f6,0x24($sp) -/* 30a40: c7b20020 */ lwc1 $f18,0x20($sp) -/* 30a44: 46068102 */ mul.s $f4,$f16,$f6 -/* 30a48: 00000000 */ nop -/* 30a4c: 46049282 */ mul.s $f10,$f18,$f4 -/* 30a50: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30a54: c7a80020 */ lwc1 $f8,0x20($sp) -/* 30a58: c7b00024 */ lwc1 $f16,0x24($sp) -/* 30a5c: 46104181 */ sub.s $f6,$f8,$f16 -/* 30a60: 10000012 */ b .L00030aac -/* 30a64: e7a60020 */ swc1 $f6,0x20($sp) -.L00030a68: -/* 30a68: 3c013e80 */ lui $at,0x3e80 -/* 30a6c: 44812000 */ mtc1 $at,$f4 -/* 30a70: c7b20020 */ lwc1 $f18,0x20($sp) -/* 30a74: 46049281 */ sub.s $f10,$f18,$f4 -/* 30a78: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30a7c: 3c014080 */ lui $at,0x4080 -/* 30a80: 44814000 */ mtc1 $at,$f8 -/* 30a84: c7b00024 */ lwc1 $f16,0x24($sp) -/* 30a88: c7b20020 */ lwc1 $f18,0x20($sp) -/* 30a8c: 46104182 */ mul.s $f6,$f8,$f16 -/* 30a90: 00000000 */ nop -/* 30a94: 46069102 */ mul.s $f4,$f18,$f6 -/* 30a98: e7a40020 */ swc1 $f4,0x20($sp) -/* 30a9c: c7aa0024 */ lwc1 $f10,0x24($sp) -/* 30aa0: c7a80020 */ lwc1 $f8,0x20($sp) -/* 30aa4: 46085401 */ sub.s $f16,$f10,$f8 -/* 30aa8: e7b00020 */ swc1 $f16,0x20($sp) -.L00030aac: -/* 30aac: 8fa90028 */ lw $t1,0x28($sp) -/* 30ab0: c7a60020 */ lwc1 $f6,0x20($sp) -/* 30ab4: c5320010 */ lwc1 $f18,0x10($t1) -/* 30ab8: 46069100 */ add.s $f4,$f18,$f6 -/* 30abc: e7a4001c */ swc1 $f4,0x1c($sp) -/* 30ac0: 8fb90028 */ lw $t9,0x28($sp) -/* 30ac4: 972a0014 */ lhu $t2,0x14($t9) -/* 30ac8: 448a5000 */ mtc1 $t2,$f10 -/* 30acc: 05410005 */ bgez $t2,.L00030ae4 -/* 30ad0: 46805220 */ cvt.s.w $f8,$f10 -/* 30ad4: 3c014f80 */ lui $at,0x4f80 -/* 30ad8: 44818000 */ mtc1 $at,$f16 -/* 30adc: 00000000 */ nop -/* 30ae0: 46104200 */ add.s $f8,$f8,$f16 -.L00030ae4: -/* 30ae4: 972b0016 */ lhu $t3,0x16($t9) -/* 30ae8: 448b9000 */ mtc1 $t3,$f18 -/* 30aec: 05610005 */ bgez $t3,.L00030b04 -/* 30af0: 468091a0 */ cvt.s.w $f6,$f18 -/* 30af4: 3c014f80 */ lui $at,0x4f80 -/* 30af8: 44812000 */ mtc1 $at,$f4 -/* 30afc: 00000000 */ nop -/* 30b00: 46043180 */ add.s $f6,$f6,$f4 -.L00030b04: -/* 30b04: 46064283 */ div.s $f10,$f8,$f6 -/* 30b08: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30b0c: 3c014780 */ lui $at,0x4780 -/* 30b10: 44819000 */ mtc1 $at,$f18 -/* 30b14: c7b00020 */ lwc1 $f16,0x20($sp) -/* 30b18: 46128302 */ mul.s $f12,$f16,$f18 -/* 30b1c: 0c00c069 */ jal func000301a4 -/* 30b20: 00000000 */ nop -/* 30b24: c7a40024 */ lwc1 $f4,0x24($sp) -/* 30b28: 8fad0028 */ lw $t5,0x28($sp) -/* 30b2c: 46040202 */ mul.s $f8,$f0,$f4 -/* 30b30: c5a60010 */ lwc1 $f6,0x10($t5) -/* 30b34: 46064280 */ add.s $f10,$f8,$f6 -/* 30b38: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30b3c: c7b00020 */ lwc1 $f16,0x20($sp) -/* 30b40: c7b2001c */ lwc1 $f18,0x1c($sp) -/* 30b44: 46128100 */ add.s $f4,$f16,$f18 -/* 30b48: e7a40020 */ swc1 $f4,0x20($sp) -/* 30b4c: 3c014000 */ lui $at,0x4000 -/* 30b50: 44813000 */ mtc1 $at,$f6 -/* 30b54: c7a80020 */ lwc1 $f8,0x20($sp) -/* 30b58: 46064283 */ div.s $f10,$f8,$f6 -/* 30b5c: e7aa0020 */ swc1 $f10,0x20($sp) -/* 30b60: 10000001 */ b .L00030b68 -/* 30b64: 00000000 */ nop -.L00030b68: -/* 30b68: 8faf0028 */ lw $t7,0x28($sp) -/* 30b6c: 91ec0004 */ lbu $t4,0x4($t7) -/* 30b70: 318e0080 */ andi $t6,$t4,0x80 -/* 30b74: 11c00009 */ beqz $t6,.L00030b9c -/* 30b78: 00000000 */ nop -/* 30b7c: c7b00020 */ lwc1 $f16,0x20($sp) -/* 30b80: 4600848d */ trunc.w.s $f18,$f16 -/* 30b84: 44049000 */ mfc1 $a0,$f18 -/* 30b88: 0c00e7f8 */ jal alCents2Ratio -/* 30b8c: 00000000 */ nop -/* 30b90: 8fa8002c */ lw $t0,0x2c($sp) -/* 30b94: 10000007 */ b .L00030bb4 -/* 30b98: e5000000 */ swc1 $f0,0x0($t0) -.L00030b9c: -/* 30b9c: 3c0142fe */ lui $at,0x42fe -/* 30ba0: 44814000 */ mtc1 $at,$f8 -/* 30ba4: c7a40020 */ lwc1 $f4,0x20($sp) -/* 30ba8: 8fa9002c */ lw $t1,0x2c($sp) -/* 30bac: 46082180 */ add.s $f6,$f4,$f8 -/* 30bb0: e5260000 */ swc1 $f6,0x0($t1) -.L00030bb4: -/* 30bb4: 8faa0028 */ lw $t2,0x28($sp) -/* 30bb8: 10000003 */ b .L00030bc8 -/* 30bbc: 8d420008 */ lw $v0,0x8($t2) -/* 30bc0: 10000001 */ b .L00030bc8 -/* 30bc4: 00000000 */ nop -.L00030bc8: -/* 30bc8: 8fbf0014 */ lw $ra,0x14($sp) -/* 30bcc: 27bd0028 */ addiu $sp,$sp,0x28 -/* 30bd0: 03e00008 */ jr $ra -/* 30bd4: 00000000 */ nop -); +ALMicroTime updateOscMain(oscData *statePtr, f32 *updateVal) +{ + f32 sp24; + f32 sp20; + f32 sp1c; + + if ((statePtr->type & ~0x80) >= 6) { + statePtr->unk14++; + + if (statePtr->unk14 >= statePtr->unk16) { + statePtr->unk14 = 0; + } + + sp20 = (f32)statePtr->unk14 / (f32)statePtr->unk16; + } + + if (statePtr->unk1c != 0.0f) { + statePtr->unk18 += statePtr->unk1c; + + if (statePtr->unk18 >= 1.0f) { + statePtr->unk18 = 1.0f; + statePtr->unk1c = 0.0f; + } + } + + sp24 = statePtr->unk0c; + + if (statePtr->unk18 != 1.0f) { + sp24 *= statePtr->unk18; + } + + switch (statePtr->type & ~0x80) { + case 2: + case 3: + case 4: + case 5: + if (statePtr->unk14) { + sp20 = sp24; + } else { + sp20 = statePtr->unk10; + } + statePtr->unk14 ^= 1; + break; + case 6: + case 7: + if (sp20 < 0.25f) { + sp20 *= 4.0f * sp24; + } else if (sp20 >= 0.75f) { + sp20 -= 0.75f; + sp20 *= 4.0f * sp24; + sp20 -= sp24; + } else { + sp20 -= 0.25f; + sp20 *= 4.0f * sp24; + sp20 = sp24 - sp20; + } + sp20 += statePtr->unk10; + break; + case 8: + case 9: + sp20 = func000301a4(sp20 * 65536.0f) * sp24 + statePtr->unk10; + break; + case 10: + case 11: + sp20 *= sp24; + sp20 += statePtr->unk10; + break; + case 12: + case 13: + if (sp20 < 0.25f) { + sp20 *= 4.0f * sp24; + } else if (sp20 >= 0.75f) { + sp20 -= 0.75f; + sp20 *= 4.0f * sp24; + sp20 -= sp24; + } else { + sp20 -= 0.25f; + sp20 *= 4.0f * sp24; + sp20 = sp24 - sp20; + } + + sp1c = statePtr->unk10 + sp20; + sp20 = (f32)statePtr->unk14 / (f32)statePtr->unk16; + sp20 = func000301a4(sp20 * 65536.0f) * sp24 + statePtr->unk10; + sp20 += sp1c; + sp20 /= 2.0f; + break; + } + + if (statePtr->type & 0x80) { + *updateVal = alCents2Ratio(sp20); + } else { + *updateVal = sp20 + 127; + } + + return statePtr->curCount; +} void func00030bd8(void *oscState) {