Decompile updateOscMain

This commit is contained in:
Ryan Dwyer
2021-11-02 18:29:51 +10:00
parent 4c9ef538a6
commit 12d33c44d0
+140 -485
View File
@@ -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)
{