Decompile updateOsc

This commit is contained in:
Ryan Dwyer 2021-11-01 21:49:55 +10:00
parent c2135b2cf2
commit 4c9ef538a6
1 changed files with 40 additions and 365 deletions

View File

@ -159,371 +159,46 @@ ALMicroTime initOsc(void **oscState, f32 *initVal, u8 oscType, u8 oscRate, u8 os
return result;
}
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel updateOsc
.late_rodata
glabel var700546b4
.word 0x40c90fdb
glabel var700546b8
.word 0x40c90fdb
.text
/* 2febc: 27bdffd0 */ addiu $sp,$sp,-48
/* 2fec0: afbf001c */ sw $ra,0x1c($sp)
/* 2fec4: afa40030 */ sw $a0,0x30($sp)
/* 2fec8: afa50034 */ sw $a1,0x34($sp)
/* 2fecc: afb00018 */ sw $s0,0x18($sp)
/* 2fed0: 8fae0030 */ lw $t6,0x30($sp)
/* 2fed4: afae0028 */ sw $t6,0x28($sp)
/* 2fed8: 240f3e80 */ addiu $t7,$zero,0x4e20
/* 2fedc: afaf0024 */ sw $t7,0x24($sp)
/* 2fee0: 8fb80028 */ lw $t8,0x28($sp)
/* 2fee4: 24010001 */ addiu $at,$zero,0x1
/* 2fee8: 93190004 */ lbu $t9,0x4($t8)
/* 2feec: 13210009 */ beq $t9,$at,.L0002ff14
/* 2fef0: 00000000 */ nop
/* 2fef4: 24010080 */ addiu $at,$zero,0x80
/* 2fef8: 13210006 */ beq $t9,$at,.L0002ff14
/* 2fefc: 00000000 */ nop
/* 2ff00: 8fa40030 */ lw $a0,0x30($sp)
/* 2ff04: 0c00c1a4 */ jal func00030690
/* 2ff08: 8fa50034 */ lw $a1,0x34($sp)
/* 2ff0c: 10000084 */ b .L00030120
/* 2ff10: 00000000 */ nop
.L0002ff14:
/* 2ff14: 8fa80028 */ lw $t0,0x28($sp)
/* 2ff18: 24010001 */ addiu $at,$zero,0x1
/* 2ff1c: 91100004 */ lbu $s0,0x4($t0)
/* 2ff20: 12010006 */ beq $s0,$at,.L0002ff3c
/* 2ff24: 00000000 */ nop
/* 2ff28: 24010080 */ addiu $at,$zero,0x80
/* 2ff2c: 12010044 */ beq $s0,$at,.L00030040
/* 2ff30: 00000000 */ nop
/* 2ff34: 10000074 */ b .L00030108
/* 2ff38: 00000000 */ nop
.L0002ff3c:
/* 2ff3c: 8fa90028 */ lw $t1,0x28($sp)
/* 2ff40: 952a0024 */ lhu $t2,0x24($t1)
/* 2ff44: 254b0001 */ addiu $t3,$t2,0x1
/* 2ff48: a52b0024 */ sh $t3,0x24($t1)
/* 2ff4c: 8fac0028 */ lw $t4,0x28($sp)
/* 2ff50: 958d0024 */ lhu $t5,0x24($t4)
/* 2ff54: 958e0022 */ lhu $t6,0x22($t4)
/* 2ff58: 01ae082a */ slt $at,$t5,$t6
/* 2ff5c: 14200003 */ bnez $at,.L0002ff6c
/* 2ff60: 00000000 */ nop
/* 2ff64: 8faf0028 */ lw $t7,0x28($sp)
/* 2ff68: a5e00024 */ sh $zero,0x24($t7)
.L0002ff6c:
/* 2ff6c: 8fb80028 */ lw $t8,0x28($sp)
/* 2ff70: 97190024 */ lhu $t9,0x24($t8)
/* 2ff74: 44992000 */ mtc1 $t9,$f4
/* 2ff78: 07210005 */ bgez $t9,.L0002ff90
/* 2ff7c: 468021a0 */ cvt.s.w $f6,$f4
/* 2ff80: 3c014f80 */ lui $at,0x4f80
/* 2ff84: 44814000 */ mtc1 $at,$f8
/* 2ff88: 00000000 */ nop
/* 2ff8c: 46083180 */ add.s $f6,$f6,$f8
.L0002ff90:
/* 2ff90: 97080022 */ lhu $t0,0x22($t8)
/* 2ff94: 44885000 */ mtc1 $t0,$f10
/* 2ff98: 05010005 */ bgez $t0,.L0002ffb0
/* 2ff9c: 46805420 */ cvt.s.w $f16,$f10
/* 2ffa0: 3c014f80 */ lui $at,0x4f80
/* 2ffa4: 44819000 */ mtc1 $at,$f18
/* 2ffa8: 00000000 */ nop
/* 2ffac: 46128400 */ add.s $f16,$f16,$f18
.L0002ffb0:
/* 2ffb0: 46103103 */ div.s $f4,$f6,$f16
/* 2ffb4: e7a4002c */ swc1 $f4,0x2c($sp)
/* 2ffb8: 3c017005 */ lui $at,%hi(var700546b4)
/* 2ffbc: c42a46b4 */ lwc1 $f10,%lo(var700546b4)($at)
/* 2ffc0: c7a8002c */ lwc1 $f8,0x2c($sp)
/* 2ffc4: 460a4302 */ mul.s $f12,$f8,$f10
/* 2ffc8: 0c0068f7 */ jal sinf
/* 2ffcc: 00000000 */ nop
/* 2ffd0: e7a0002c */ swc1 $f0,0x2c($sp)
/* 2ffd4: 8faa0028 */ lw $t2,0x28($sp)
/* 2ffd8: 914b0028 */ lbu $t3,0x28($t2)
/* 2ffdc: 448b9000 */ mtc1 $t3,$f18
/* 2ffe0: 05610005 */ bgez $t3,.L0002fff8
/* 2ffe4: 468091a0 */ cvt.s.w $f6,$f18
/* 2ffe8: 3c014f80 */ lui $at,0x4f80
/* 2ffec: 44818000 */ mtc1 $at,$f16
/* 2fff0: 00000000 */ nop
/* 2fff4: 46103180 */ add.s $f6,$f6,$f16
.L0002fff8:
/* 2fff8: c7a4002c */ lwc1 $f4,0x2c($sp)
/* 2fffc: 46043202 */ mul.s $f8,$f6,$f4
/* 30000: e7a8002c */ swc1 $f8,0x2c($sp)
/* 30004: 8fa90028 */ lw $t1,0x28($sp)
/* 30008: 912c0029 */ lbu $t4,0x29($t1)
/* 3000c: 448c5000 */ mtc1 $t4,$f10
/* 30010: 05810005 */ bgez $t4,.L00030028
/* 30014: 468054a0 */ cvt.s.w $f18,$f10
/* 30018: 3c014f80 */ lui $at,0x4f80
/* 3001c: 44818000 */ mtc1 $at,$f16
/* 30020: 00000000 */ nop
/* 30024: 46109480 */ add.s $f18,$f18,$f16
.L00030028:
/* 30028: c7a6002c */ lwc1 $f6,0x2c($sp)
/* 3002c: 8fad0034 */ lw $t5,0x34($sp)
/* 30030: 46069100 */ add.s $f4,$f18,$f6
/* 30034: e5a40000 */ swc1 $f4,0x0($t5)
/* 30038: 10000035 */ b .L00030110
/* 3003c: 00000000 */ nop
.L00030040:
/* 30040: 8fae0028 */ lw $t6,0x28($sp)
/* 30044: 95cf0024 */ lhu $t7,0x24($t6)
/* 30048: 25f90001 */ addiu $t9,$t7,0x1
/* 3004c: a5d90024 */ sh $t9,0x24($t6)
/* 30050: 8fb80028 */ lw $t8,0x28($sp)
/* 30054: 97080024 */ lhu $t0,0x24($t8)
/* 30058: 970a0022 */ lhu $t2,0x22($t8)
/* 3005c: 010a082a */ slt $at,$t0,$t2
/* 30060: 14200003 */ bnez $at,.L00030070
/* 30064: 00000000 */ nop
/* 30068: 8fab0028 */ lw $t3,0x28($sp)
/* 3006c: a5600024 */ sh $zero,0x24($t3)
.L00030070:
/* 30070: 8fa90028 */ lw $t1,0x28($sp)
/* 30074: 952c0024 */ lhu $t4,0x24($t1)
/* 30078: 448c4000 */ mtc1 $t4,$f8
/* 3007c: 05810005 */ bgez $t4,.L00030094
/* 30080: 468042a0 */ cvt.s.w $f10,$f8
/* 30084: 3c014f80 */ lui $at,0x4f80
/* 30088: 44818000 */ mtc1 $at,$f16
/* 3008c: 00000000 */ nop
/* 30090: 46105280 */ add.s $f10,$f10,$f16
.L00030094:
/* 30094: 952d0022 */ lhu $t5,0x22($t1)
/* 30098: 448d9000 */ mtc1 $t5,$f18
/* 3009c: 05a10005 */ bgez $t5,.L000300b4
/* 300a0: 468091a0 */ cvt.s.w $f6,$f18
/* 300a4: 3c014f80 */ lui $at,0x4f80
/* 300a8: 44812000 */ mtc1 $at,$f4
/* 300ac: 00000000 */ nop
/* 300b0: 46043180 */ add.s $f6,$f6,$f4
.L000300b4:
/* 300b4: 46065203 */ div.s $f8,$f10,$f6
/* 300b8: e7a8002c */ swc1 $f8,0x2c($sp)
/* 300bc: 3c017005 */ lui $at,%hi(var700546b8)
/* 300c0: c43246b8 */ lwc1 $f18,%lo(var700546b8)($at)
/* 300c4: c7b0002c */ lwc1 $f16,0x2c($sp)
/* 300c8: 46128302 */ mul.s $f12,$f16,$f18
/* 300cc: 0c0068f7 */ jal sinf
/* 300d0: 00000000 */ nop
/* 300d4: 8faf0028 */ lw $t7,0x28($sp)
/* 300d8: c5e40028 */ lwc1 $f4,0x28($t7)
/* 300dc: 46040282 */ mul.s $f10,$f0,$f4
/* 300e0: e7aa002c */ swc1 $f10,0x2c($sp)
/* 300e4: c7a6002c */ lwc1 $f6,0x2c($sp)
/* 300e8: 4600320d */ trunc.w.s $f8,$f6
/* 300ec: 44044000 */ mfc1 $a0,$f8
/* 300f0: 0c00e7f8 */ jal alCents2Ratio
/* 300f4: 00000000 */ nop
/* 300f8: 8fae0034 */ lw $t6,0x34($sp)
/* 300fc: e5c00000 */ swc1 $f0,0x0($t6)
/* 30100: 10000003 */ b .L00030110
/* 30104: 00000000 */ nop
.L00030108:
/* 30108: 10000001 */ b .L00030110
/* 3010c: 00000000 */ nop
.L00030110:
/* 30110: 10000003 */ b .L00030120
/* 30114: 8fa20024 */ lw $v0,0x24($sp)
/* 30118: 10000001 */ b .L00030120
/* 3011c: 00000000 */ nop
.L00030120:
/* 30120: 8fbf001c */ lw $ra,0x1c($sp)
/* 30124: 8fb00018 */ lw $s0,0x18($sp)
/* 30128: 27bd0030 */ addiu $sp,$sp,0x30
/* 3012c: 03e00008 */ jr $ra
/* 30130: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel updateOsc
.late_rodata
glabel var700546b4
.word 0x40c90fdb
glabel var700546b8
.word 0x40c90fdb
.text
/* 2febc: 27bdffd0 */ addiu $sp,$sp,-48
/* 2fec0: afbf001c */ sw $ra,0x1c($sp)
/* 2fec4: afa40030 */ sw $a0,0x30($sp)
/* 2fec8: afa50034 */ sw $a1,0x34($sp)
/* 2fecc: afb00018 */ sw $s0,0x18($sp)
/* 2fed0: 8fae0030 */ lw $t6,0x30($sp)
/* 2fed4: afae0028 */ sw $t6,0x28($sp)
/* 2fed8: 240f3e80 */ addiu $t7,$zero,0x3e80
/* 2fedc: afaf0024 */ sw $t7,0x24($sp)
/* 2fee0: 8fb80028 */ lw $t8,0x28($sp)
/* 2fee4: 24010001 */ addiu $at,$zero,0x1
/* 2fee8: 93190004 */ lbu $t9,0x4($t8)
/* 2feec: 13210009 */ beq $t9,$at,.L0002ff14
/* 2fef0: 00000000 */ nop
/* 2fef4: 24010080 */ addiu $at,$zero,0x80
/* 2fef8: 13210006 */ beq $t9,$at,.L0002ff14
/* 2fefc: 00000000 */ nop
/* 2ff00: 8fa40030 */ lw $a0,0x30($sp)
/* 2ff04: 0c00c1a4 */ jal func00030690
/* 2ff08: 8fa50034 */ lw $a1,0x34($sp)
/* 2ff0c: 10000084 */ b .L00030120
/* 2ff10: 00000000 */ nop
.L0002ff14:
/* 2ff14: 8fa80028 */ lw $t0,0x28($sp)
/* 2ff18: 24010001 */ addiu $at,$zero,0x1
/* 2ff1c: 91100004 */ lbu $s0,0x4($t0)
/* 2ff20: 12010006 */ beq $s0,$at,.L0002ff3c
/* 2ff24: 00000000 */ nop
/* 2ff28: 24010080 */ addiu $at,$zero,0x80
/* 2ff2c: 12010044 */ beq $s0,$at,.L00030040
/* 2ff30: 00000000 */ nop
/* 2ff34: 10000074 */ b .L00030108
/* 2ff38: 00000000 */ nop
.L0002ff3c:
/* 2ff3c: 8fa90028 */ lw $t1,0x28($sp)
/* 2ff40: 952a0024 */ lhu $t2,0x24($t1)
/* 2ff44: 254b0001 */ addiu $t3,$t2,0x1
/* 2ff48: a52b0024 */ sh $t3,0x24($t1)
/* 2ff4c: 8fac0028 */ lw $t4,0x28($sp)
/* 2ff50: 958d0024 */ lhu $t5,0x24($t4)
/* 2ff54: 958e0022 */ lhu $t6,0x22($t4)
/* 2ff58: 01ae082a */ slt $at,$t5,$t6
/* 2ff5c: 14200003 */ bnez $at,.L0002ff6c
/* 2ff60: 00000000 */ nop
/* 2ff64: 8faf0028 */ lw $t7,0x28($sp)
/* 2ff68: a5e00024 */ sh $zero,0x24($t7)
.L0002ff6c:
/* 2ff6c: 8fb80028 */ lw $t8,0x28($sp)
/* 2ff70: 97190024 */ lhu $t9,0x24($t8)
/* 2ff74: 44992000 */ mtc1 $t9,$f4
/* 2ff78: 07210005 */ bgez $t9,.L0002ff90
/* 2ff7c: 468021a0 */ cvt.s.w $f6,$f4
/* 2ff80: 3c014f80 */ lui $at,0x4f80
/* 2ff84: 44814000 */ mtc1 $at,$f8
/* 2ff88: 00000000 */ nop
/* 2ff8c: 46083180 */ add.s $f6,$f6,$f8
.L0002ff90:
/* 2ff90: 97080022 */ lhu $t0,0x22($t8)
/* 2ff94: 44885000 */ mtc1 $t0,$f10
/* 2ff98: 05010005 */ bgez $t0,.L0002ffb0
/* 2ff9c: 46805420 */ cvt.s.w $f16,$f10
/* 2ffa0: 3c014f80 */ lui $at,0x4f80
/* 2ffa4: 44819000 */ mtc1 $at,$f18
/* 2ffa8: 00000000 */ nop
/* 2ffac: 46128400 */ add.s $f16,$f16,$f18
.L0002ffb0:
/* 2ffb0: 46103103 */ div.s $f4,$f6,$f16
/* 2ffb4: e7a4002c */ swc1 $f4,0x2c($sp)
/* 2ffb8: 3c017005 */ lui $at,%hi(var700546b4)
/* 2ffbc: c42a46b4 */ lwc1 $f10,%lo(var700546b4)($at)
/* 2ffc0: c7a8002c */ lwc1 $f8,0x2c($sp)
/* 2ffc4: 460a4302 */ mul.s $f12,$f8,$f10
/* 2ffc8: 0c0068f7 */ jal sinf
/* 2ffcc: 00000000 */ nop
/* 2ffd0: e7a0002c */ swc1 $f0,0x2c($sp)
/* 2ffd4: 8faa0028 */ lw $t2,0x28($sp)
/* 2ffd8: 914b0028 */ lbu $t3,0x28($t2)
/* 2ffdc: 448b9000 */ mtc1 $t3,$f18
/* 2ffe0: 05610005 */ bgez $t3,.L0002fff8
/* 2ffe4: 468091a0 */ cvt.s.w $f6,$f18
/* 2ffe8: 3c014f80 */ lui $at,0x4f80
/* 2ffec: 44818000 */ mtc1 $at,$f16
/* 2fff0: 00000000 */ nop
/* 2fff4: 46103180 */ add.s $f6,$f6,$f16
.L0002fff8:
/* 2fff8: c7a4002c */ lwc1 $f4,0x2c($sp)
/* 2fffc: 46043202 */ mul.s $f8,$f6,$f4
/* 30000: e7a8002c */ swc1 $f8,0x2c($sp)
/* 30004: 8fa90028 */ lw $t1,0x28($sp)
/* 30008: 912c0029 */ lbu $t4,0x29($t1)
/* 3000c: 448c5000 */ mtc1 $t4,$f10
/* 30010: 05810005 */ bgez $t4,.L00030028
/* 30014: 468054a0 */ cvt.s.w $f18,$f10
/* 30018: 3c014f80 */ lui $at,0x4f80
/* 3001c: 44818000 */ mtc1 $at,$f16
/* 30020: 00000000 */ nop
/* 30024: 46109480 */ add.s $f18,$f18,$f16
.L00030028:
/* 30028: c7a6002c */ lwc1 $f6,0x2c($sp)
/* 3002c: 8fad0034 */ lw $t5,0x34($sp)
/* 30030: 46069100 */ add.s $f4,$f18,$f6
/* 30034: e5a40000 */ swc1 $f4,0x0($t5)
/* 30038: 10000035 */ b .L00030110
/* 3003c: 00000000 */ nop
.L00030040:
/* 30040: 8fae0028 */ lw $t6,0x28($sp)
/* 30044: 95cf0024 */ lhu $t7,0x24($t6)
/* 30048: 25f90001 */ addiu $t9,$t7,0x1
/* 3004c: a5d90024 */ sh $t9,0x24($t6)
/* 30050: 8fb80028 */ lw $t8,0x28($sp)
/* 30054: 97080024 */ lhu $t0,0x24($t8)
/* 30058: 970a0022 */ lhu $t2,0x22($t8)
/* 3005c: 010a082a */ slt $at,$t0,$t2
/* 30060: 14200003 */ bnez $at,.L00030070
/* 30064: 00000000 */ nop
/* 30068: 8fab0028 */ lw $t3,0x28($sp)
/* 3006c: a5600024 */ sh $zero,0x24($t3)
.L00030070:
/* 30070: 8fa90028 */ lw $t1,0x28($sp)
/* 30074: 952c0024 */ lhu $t4,0x24($t1)
/* 30078: 448c4000 */ mtc1 $t4,$f8
/* 3007c: 05810005 */ bgez $t4,.L00030094
/* 30080: 468042a0 */ cvt.s.w $f10,$f8
/* 30084: 3c014f80 */ lui $at,0x4f80
/* 30088: 44818000 */ mtc1 $at,$f16
/* 3008c: 00000000 */ nop
/* 30090: 46105280 */ add.s $f10,$f10,$f16
.L00030094:
/* 30094: 952d0022 */ lhu $t5,0x22($t1)
/* 30098: 448d9000 */ mtc1 $t5,$f18
/* 3009c: 05a10005 */ bgez $t5,.L000300b4
/* 300a0: 468091a0 */ cvt.s.w $f6,$f18
/* 300a4: 3c014f80 */ lui $at,0x4f80
/* 300a8: 44812000 */ mtc1 $at,$f4
/* 300ac: 00000000 */ nop
/* 300b0: 46043180 */ add.s $f6,$f6,$f4
.L000300b4:
/* 300b4: 46065203 */ div.s $f8,$f10,$f6
/* 300b8: e7a8002c */ swc1 $f8,0x2c($sp)
/* 300bc: 3c017005 */ lui $at,%hi(var700546b8)
/* 300c0: c43246b8 */ lwc1 $f18,%lo(var700546b8)($at)
/* 300c4: c7b0002c */ lwc1 $f16,0x2c($sp)
/* 300c8: 46128302 */ mul.s $f12,$f16,$f18
/* 300cc: 0c0068f7 */ jal sinf
/* 300d0: 00000000 */ nop
/* 300d4: 8faf0028 */ lw $t7,0x28($sp)
/* 300d8: c5e40028 */ lwc1 $f4,0x28($t7)
/* 300dc: 46040282 */ mul.s $f10,$f0,$f4
/* 300e0: e7aa002c */ swc1 $f10,0x2c($sp)
/* 300e4: c7a6002c */ lwc1 $f6,0x2c($sp)
/* 300e8: 4600320d */ trunc.w.s $f8,$f6
/* 300ec: 44044000 */ mfc1 $a0,$f8
/* 300f0: 0c00e7f8 */ jal alCents2Ratio
/* 300f4: 00000000 */ nop
/* 300f8: 8fae0034 */ lw $t6,0x34($sp)
/* 300fc: e5c00000 */ swc1 $f0,0x0($t6)
/* 30100: 10000003 */ b .L00030110
/* 30104: 00000000 */ nop
.L00030108:
/* 30108: 10000001 */ b .L00030110
/* 3010c: 00000000 */ nop
.L00030110:
/* 30110: 10000003 */ b .L00030120
/* 30114: 8fa20024 */ lw $v0,0x24($sp)
/* 30118: 10000001 */ b .L00030120
/* 3011c: 00000000 */ nop
.L00030120:
/* 30120: 8fbf001c */ lw $ra,0x1c($sp)
/* 30124: 8fb00018 */ lw $s0,0x18($sp)
/* 30128: 27bd0030 */ addiu $sp,$sp,0x30
/* 3012c: 03e00008 */ jr $ra
/* 30130: 00000000 */ nop
);
#endif
ALMicroTime updateOsc(void *oscState, f32 *updateVal)
{
f32 sp2c;
oscData *state = oscState;
ALMicroTime result = PAL ? 20000 : 16000;
if (state->type != 1 && state->type != 0x80) {
return func00030690(oscState, updateVal);
}
switch (state->type) {
case 0x01:
state->data.type01.unk24++;
if (state->data.type01.unk24 >= state->data.type01.unk22) {
state->data.type01.unk24 = 0;
}
sp2c = (f32)state->data.type01.unk24 / (f32)state->data.type01.unk22;
sp2c = sinf(sp2c * M_TAU);
sp2c = sp2c * state->data.type01.unk28;
*updateVal = state->data.type01.unk29 + sp2c;
break;
case 0x80:
state->data.type80.unk24++;
if (state->data.type80.unk24 >= state->data.type80.unk22) {
state->data.type80.unk24 = 0;
}
sp2c = (f32)state->data.type80.unk24 / (f32)state->data.type80.unk22;
sp2c = sinf(sp2c * M_TAU) * state->data.type80.unk28;
*updateVal = alCents2Ratio(sp2c);
break;
default:
break;
}
return result;
}
void stopOsc(void *oscState)
{