From 2771f9f0628997db4ab440c6282f0da40d46cc32 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 27 Mar 2021 20:40:10 +1000 Subject: [PATCH] Decompile alCSeqNew --- Makefile | 2 +- ld/libfiles.ntsc-beta.inc | 3 +- ld/libfiles.ntsc-final.inc | 3 +- ld/libfiles.pal-final.inc | 3 +- src/include/lib/{lib_38d30.h => lib_39be0.h} | 4 +- src/lib/lib_317f0.c | 1 - src/lib/lib_34030.c | 1 - src/lib/lib_39be0.c | 52 ++++++ src/lib/snd.c | 2 +- src/lib/{lib_38d30.c => ultra/audio/cseq.c} | 181 +++---------------- src/lib/ultra/audio/csplayer.c | 1 - 11 files changed, 91 insertions(+), 162 deletions(-) rename src/include/lib/{lib_38d30.h => lib_39be0.h} (67%) create mode 100644 src/lib/lib_39be0.c rename src/lib/{lib_38d30.c => ultra/audio/cseq.c} (69%) diff --git a/Makefile b/Makefile index 9ee3c99a8..4e1032e15 100644 --- a/Makefile +++ b/Makefile @@ -83,8 +83,8 @@ $(B_DIR)/lib/ultra/libc/llcvt.o: MIPSISET := -mips3 -32 # it introduces a race condition when using make -j because they create a # temporary include-stdin.u file during compilation. # For these files, see their explicit targets towards the end of this file. -$(B_DIR)/lib/lib_38d30.o: OPT_LVL := -g $(B_DIR)/lib/ultra/audio/bnkf.o: OPT_LVL := -g +$(B_DIR)/lib/ultra/audio/cseq.o: OPT_LVL := -g $(B_DIR)/lib/ultra/audio/csplayer.o: OPT_LVL := -g $(B_DIR)/lib/ultra/audio/heap.o: OPT_LVL := -g $(B_DIR)/lib/ultra/gu/align.o: OPT_LVL := -O3 diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index bb64b1b05..28ecf3b6a 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -71,7 +71,8 @@ build/ROMID/lib/ultra/audio/bnkf.o (section); \ build/ROMID/lib/lib_37b00.o (section); \ build/ROMID/lib/lib_38d10.o (section); \ - build/ROMID/lib/lib_38d30.o (section); \ + build/ROMID/lib/ultra/audio/cseq.o (section); \ + build/ROMID/lib/lib_39be0.o (section); \ build/ROMID/lib/lib_39c80.o (section); \ build/ROMID/lib/lib_39f70.o (section); \ build/ROMID/lib/lib_39fc0.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index 4a60289f5..fb27540bf 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -69,7 +69,8 @@ build/ROMID/lib/ultra/audio/bnkf.o (section); \ build/ROMID/lib/lib_37b00.o (section); \ build/ROMID/lib/lib_38d10.o (section); \ - build/ROMID/lib/lib_38d30.o (section); \ + build/ROMID/lib/ultra/audio/cseq.o (section); \ + build/ROMID/lib/lib_39be0.o (section); \ build/ROMID/lib/lib_39c80.o (section); \ build/ROMID/lib/lib_39f70.o (section); \ build/ROMID/lib/lib_39fc0.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index e68fbd4b4..0be9f3125 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -69,7 +69,8 @@ build/ROMID/lib/ultra/audio/bnkf.o (section); \ build/ROMID/lib/lib_37b00.o (section); \ build/ROMID/lib/lib_38d10.o (section); \ - build/ROMID/lib/lib_38d30.o (section); \ + build/ROMID/lib/ultra/audio/cseq.o (section); \ + build/ROMID/lib/lib_39be0.o (section); \ build/ROMID/lib/lib_39c80.o (section); \ build/ROMID/lib/lib_39f70.o (section); \ build/ROMID/lib/lib_39fc0.o (section); \ diff --git a/src/include/lib/lib_38d30.h b/src/include/lib/lib_39be0.h similarity index 67% rename from src/include/lib/lib_38d30.h rename to src/include/lib/lib_39be0.h index 8d5d54eb4..0c25c26ce 100644 --- a/src/include/lib/lib_38d30.h +++ b/src/include/lib/lib_39be0.h @@ -1,5 +1,5 @@ -#ifndef _IN_LIB_LIB_38D30_H -#define _IN_LIB_LIB_38D30_H +#ifndef _IN_LIB_LIB_39BE0_H +#define _IN_LIB_LIB_39BE0_H #include #include "data.h" #include "types.h" diff --git a/src/lib/lib_317f0.c b/src/lib/lib_317f0.c index 98f8b2237..146da0cca 100644 --- a/src/lib/lib_317f0.c +++ b/src/lib/lib_317f0.c @@ -5,7 +5,6 @@ #include "lib/lib_2fc60.h" #include "lib/lib_30ce0.h" #include "lib/lib_317f0.h" -#include "lib/lib_38d30.h" #include "lib/lib_39c80.h" #include "lib/lib_39fe0.h" #include "lib/lib_3a100.h" diff --git a/src/lib/lib_34030.c b/src/lib/lib_34030.c index 62ddb20c3..4eea84386 100644 --- a/src/lib/lib_34030.c +++ b/src/lib/lib_34030.c @@ -5,7 +5,6 @@ #include "lib/lib_2fc60.h" #include "lib/lib_30ce0.h" #include "lib/lib_317f0.h" -#include "lib/lib_38d30.h" #include "lib/lib_39c80.h" #include "lib/lib_39fe0.h" #include "lib/lib_3a100.h" diff --git a/src/lib/lib_39be0.c b/src/lib/lib_39be0.c new file mode 100644 index 000000000..3c6d93995 --- /dev/null +++ b/src/lib/lib_39be0.c @@ -0,0 +1,52 @@ +#include +#include "constants.h" +#include "bss.h" +#include "data.h" +#include "types.h" + +GLOBAL_ASM( +glabel func00039be0 +/* 39be0: 27bdffd8 */ addiu $sp,$sp,-40 +/* 39be4: afbf0014 */ sw $ra,0x14($sp) +/* 39be8: afa40028 */ sw $a0,0x28($sp) +/* 39bec: afa5002c */ sw $a1,0x2c($sp) +/* 39bf0: 240e000d */ addiu $t6,$zero,0xd +/* 39bf4: a7ae0018 */ sh $t6,0x18($sp) +/* 39bf8: 8faf002c */ lw $t7,0x2c($sp) +/* 39bfc: afaf001c */ sw $t7,0x1c($sp) +/* 39c00: 8fa40028 */ lw $a0,0x28($sp) +/* 39c04: 27a50018 */ addiu $a1,$sp,0x18 +/* 39c08: 00003025 */ or $a2,$zero,$zero +/* 39c0c: 00003825 */ or $a3,$zero,$zero +/* 39c10: 0c00f184 */ jal alEvtqPostEvent +/* 39c14: 24840048 */ addiu $a0,$a0,0x48 +/* 39c18: 10000001 */ b .L00039c20 +/* 39c1c: 00000000 */ nop +.L00039c20: +/* 39c20: 8fbf0014 */ lw $ra,0x14($sp) +/* 39c24: 27bd0028 */ addiu $sp,$sp,0x28 +/* 39c28: 03e00008 */ jr $ra +/* 39c2c: 00000000 */ nop +); + +GLOBAL_ASM( +glabel func00039c30 +/* 39c30: 27bdffd8 */ addiu $sp,$sp,-40 +/* 39c34: afbf0014 */ sw $ra,0x14($sp) +/* 39c38: afa40028 */ sw $a0,0x28($sp) +/* 39c3c: 240e000f */ addiu $t6,$zero,0xf +/* 39c40: a7ae0018 */ sh $t6,0x18($sp) +/* 39c44: 8fa40028 */ lw $a0,0x28($sp) +/* 39c48: 27a50018 */ addiu $a1,$sp,0x18 +/* 39c4c: 00003025 */ or $a2,$zero,$zero +/* 39c50: 00003825 */ or $a3,$zero,$zero +/* 39c54: 0c00f184 */ jal alEvtqPostEvent +/* 39c58: 24840048 */ addiu $a0,$a0,0x48 +/* 39c5c: 10000001 */ b .L00039c64 +/* 39c60: 00000000 */ nop +.L00039c64: +/* 39c64: 8fbf0014 */ lw $ra,0x14($sp) +/* 39c68: 27bd0028 */ addiu $sp,$sp,0x28 +/* 39c6c: 03e00008 */ jr $ra +/* 39c70: 00000000 */ nop +); diff --git a/src/lib/snd.c b/src/lib/snd.c index ed8610583..1592a1c06 100644 --- a/src/lib/snd.c +++ b/src/lib/snd.c @@ -15,7 +15,7 @@ #include "lib/lib_37650.h" #include "lib/lib_37b00.h" #include "lib/lib_38d10.h" -#include "lib/lib_38d30.h" +#include "lib/lib_39be0.h" #include "lib/lib_39c80.h" #include "data.h" #include "types.h" diff --git a/src/lib/lib_38d30.c b/src/lib/ultra/audio/cseq.c similarity index 69% rename from src/lib/lib_38d30.c rename to src/lib/ultra/audio/cseq.c index e05ce9aaf..83e0ad31d 100644 --- a/src/lib/lib_38d30.c +++ b/src/lib/ultra/audio/cseq.c @@ -1,7 +1,6 @@ #include #include "constants.h" #include "bss.h" -#include "lib/lib_38d30.h" #include "lib/lib_3c4d0.h" #include "data.h" #include "types.h" @@ -10,110 +9,35 @@ u32 __alCSeqGetTrackEvent(ALCSeq *seq, u32 track, ALEvent *event, s32 arg3); u8 __getTrackByte(ALCSeq *seq, u32 track); u32 __readVarLen(ALCSeq *seq,u32 track); -GLOBAL_ASM( -glabel alCSeqNew -/* 38d30: 27bdffd8 */ addiu $sp,$sp,-40 -/* 38d34: afbf0014 */ sw $ra,0x14($sp) -/* 38d38: afa40028 */ sw $a0,0x28($sp) -/* 38d3c: afa5002c */ sw $a1,0x2c($sp) -/* 38d40: 8fae002c */ lw $t6,0x2c($sp) -/* 38d44: 8faf0028 */ lw $t7,0x28($sp) -/* 38d48: adee0000 */ sw $t6,0x0($t7) -/* 38d4c: 8fb80028 */ lw $t8,0x28($sp) -/* 38d50: af000004 */ sw $zero,0x4($t8) -/* 38d54: 8fb90028 */ lw $t9,0x28($sp) -/* 38d58: af200010 */ sw $zero,0x10($t9) -/* 38d5c: 8fa80028 */ lw $t0,0x28($sp) -/* 38d60: ad00000c */ sw $zero,0xc($t0) -/* 38d64: 8faa0028 */ lw $t2,0x28($sp) -/* 38d68: 24090001 */ addiu $t1,$zero,0x1 -/* 38d6c: ad490014 */ sw $t1,0x14($t2) -/* 38d70: afa00024 */ sw $zero,0x24($sp) -.L00038d74: -/* 38d74: 8fab0028 */ lw $t3,0x28($sp) -/* 38d78: 8fac0024 */ lw $t4,0x24($sp) -/* 38d7c: 016c6821 */ addu $t5,$t3,$t4 -/* 38d80: a1a000a8 */ sb $zero,0xa8($t5) -/* 38d84: 8faf0024 */ lw $t7,0x24($sp) -/* 38d88: 8fae0028 */ lw $t6,0x28($sp) -/* 38d8c: 000fc080 */ sll $t8,$t7,0x2 -/* 38d90: 01d8c821 */ addu $t9,$t6,$t8 -/* 38d94: af200058 */ sw $zero,0x58($t9) -/* 38d98: 8fa80028 */ lw $t0,0x28($sp) -/* 38d9c: 8fa90024 */ lw $t1,0x24($sp) -/* 38da0: 01095021 */ addu $t2,$t0,$t1 -/* 38da4: a1400098 */ sb $zero,0x98($t2) -/* 38da8: 8fab0028 */ lw $t3,0x28($sp) -/* 38dac: 8fad0024 */ lw $t5,0x24($sp) -/* 38db0: 8d6c0000 */ lw $t4,0x0($t3) -/* 38db4: 000d7880 */ sll $t7,$t5,0x2 -/* 38db8: 018f7021 */ addu $t6,$t4,$t7 -/* 38dbc: 8dd80000 */ lw $t8,0x0($t6) -/* 38dc0: afb80020 */ sw $t8,0x20($sp) -/* 38dc4: 8fb90020 */ lw $t9,0x20($sp) -/* 38dc8: 1320001b */ beqz $t9,.L00038e38 -/* 38dcc: 00000000 */ nop -/* 38dd0: 8fa80024 */ lw $t0,0x24($sp) -/* 38dd4: 24090001 */ addiu $t1,$zero,0x1 -/* 38dd8: 01095004 */ sllv $t2,$t1,$t0 -/* 38ddc: afaa001c */ sw $t2,0x1c($sp) -/* 38de0: 8fab0028 */ lw $t3,0x28($sp) -/* 38de4: 8fac001c */ lw $t4,0x1c($sp) -/* 38de8: 8d6d0004 */ lw $t5,0x4($t3) -/* 38dec: 01ac7825 */ or $t7,$t5,$t4 -/* 38df0: ad6f0004 */ sw $t7,0x4($t3) -/* 38df4: 8fa80024 */ lw $t0,0x24($sp) -/* 38df8: 8fae002c */ lw $t6,0x2c($sp) -/* 38dfc: 8fb80020 */ lw $t8,0x20($sp) -/* 38e00: 8fa90028 */ lw $t1,0x28($sp) -/* 38e04: 00085080 */ sll $t2,$t0,0x2 -/* 38e08: 01d8c821 */ addu $t9,$t6,$t8 -/* 38e0c: 012a6821 */ addu $t5,$t1,$t2 -/* 38e10: adb90018 */ sw $t9,0x18($t5) -/* 38e14: 8fa40028 */ lw $a0,0x28($sp) -/* 38e18: 0c00e6d3 */ jal __readVarLen -/* 38e1c: 8fa50024 */ lw $a1,0x24($sp) -/* 38e20: 8faf0024 */ lw $t7,0x24($sp) -/* 38e24: 8fac0028 */ lw $t4,0x28($sp) -/* 38e28: 000f5880 */ sll $t3,$t7,0x2 -/* 38e2c: 018b7021 */ addu $t6,$t4,$t3 -/* 38e30: 10000006 */ b .L00038e4c -/* 38e34: adc200b8 */ sw $v0,0xb8($t6) -.L00038e38: -/* 38e38: 8fa80024 */ lw $t0,0x24($sp) -/* 38e3c: 8fb80028 */ lw $t8,0x28($sp) -/* 38e40: 00084880 */ sll $t1,$t0,0x2 -/* 38e44: 03095021 */ addu $t2,$t8,$t1 -/* 38e48: ad400018 */ sw $zero,0x18($t2) -.L00038e4c: -/* 38e4c: 8fb90024 */ lw $t9,0x24($sp) -/* 38e50: 272d0001 */ addiu $t5,$t9,0x1 -/* 38e54: 2da10010 */ sltiu $at,$t5,0x10 -/* 38e58: 1420ffc6 */ bnez $at,.L00038d74 -/* 38e5c: afad0024 */ sw $t5,0x24($sp) -/* 38e60: 8faf0028 */ lw $t7,0x28($sp) -/* 38e64: 3c013f80 */ lui $at,0x3f80 -/* 38e68: 44812000 */ mtc1 $at,$f4 -/* 38e6c: 8dec0000 */ lw $t4,0x0($t7) -/* 38e70: 8d8b0040 */ lw $t3,0x40($t4) -/* 38e74: 448b3000 */ mtc1 $t3,$f6 -/* 38e78: 05610005 */ bgez $t3,.L00038e90 -/* 38e7c: 46803220 */ cvt.s.w $f8,$f6 -/* 38e80: 3c014f80 */ lui $at,0x4f80 -/* 38e84: 44815000 */ mtc1 $at,$f10 -/* 38e88: 00000000 */ nop -/* 38e8c: 460a4200 */ add.s $f8,$f8,$f10 -.L00038e90: -/* 38e90: 46082403 */ div.s $f16,$f4,$f8 -/* 38e94: e5f00008 */ swc1 $f16,0x8($t7) -/* 38e98: 10000001 */ b .L00038ea0 -/* 38e9c: 00000000 */ nop -.L00038ea0: -/* 38ea0: 8fbf0014 */ lw $ra,0x14($sp) -/* 38ea4: 27bd0028 */ addiu $sp,$sp,0x28 -/* 38ea8: 03e00008 */ jr $ra -/* 38eac: 00000000 */ nop -); +void alCSeqNew(ALCSeq *seq, u8 *ptr) +{ + u32 i, tmpOff, flagTmp; + + /* load the seqence pointed to by ptr */ + seq->base = (ALCMidiHdr*)ptr; + seq->validTracks = 0; + seq->lastDeltaTicks = 0; + seq->lastTicks = 0; + seq->deltaFlag = 1; + + for (i = 0; i < 16; i++) { + seq->lastStatus[i] = 0; + seq->curBUPtr[i] = 0; + seq->curBULen[i] = 0; + tmpOff = seq->base->trackOffset[i]; + + if (tmpOff) { + flagTmp = 1 << i; + seq->validTracks |= flagTmp; + seq->curLoc[i] = (u8*)((u32)ptr + tmpOff); + seq->evtDeltaTicks[i] = __readVarLen(seq,i); + } else { + seq->curLoc[i] = 0; + } + } + + seq->qnpt = 1.0f / (f32)seq->base->division; +} void alCSeqNextEvent(ALCSeq *seq, ALEvent *evt, s32 arg2) { @@ -523,50 +447,3 @@ u32 __readVarLen(ALCSeq *seq, u32 track) return value; } - -GLOBAL_ASM( -glabel func00039be0 -/* 39be0: 27bdffd8 */ addiu $sp,$sp,-40 -/* 39be4: afbf0014 */ sw $ra,0x14($sp) -/* 39be8: afa40028 */ sw $a0,0x28($sp) -/* 39bec: afa5002c */ sw $a1,0x2c($sp) -/* 39bf0: 240e000d */ addiu $t6,$zero,0xd -/* 39bf4: a7ae0018 */ sh $t6,0x18($sp) -/* 39bf8: 8faf002c */ lw $t7,0x2c($sp) -/* 39bfc: afaf001c */ sw $t7,0x1c($sp) -/* 39c00: 8fa40028 */ lw $a0,0x28($sp) -/* 39c04: 27a50018 */ addiu $a1,$sp,0x18 -/* 39c08: 00003025 */ or $a2,$zero,$zero -/* 39c0c: 00003825 */ or $a3,$zero,$zero -/* 39c10: 0c00f184 */ jal alEvtqPostEvent -/* 39c14: 24840048 */ addiu $a0,$a0,0x48 -/* 39c18: 10000001 */ b .L00039c20 -/* 39c1c: 00000000 */ nop -.L00039c20: -/* 39c20: 8fbf0014 */ lw $ra,0x14($sp) -/* 39c24: 27bd0028 */ addiu $sp,$sp,0x28 -/* 39c28: 03e00008 */ jr $ra -/* 39c2c: 00000000 */ nop -); - -GLOBAL_ASM( -glabel func00039c30 -/* 39c30: 27bdffd8 */ addiu $sp,$sp,-40 -/* 39c34: afbf0014 */ sw $ra,0x14($sp) -/* 39c38: afa40028 */ sw $a0,0x28($sp) -/* 39c3c: 240e000f */ addiu $t6,$zero,0xf -/* 39c40: a7ae0018 */ sh $t6,0x18($sp) -/* 39c44: 8fa40028 */ lw $a0,0x28($sp) -/* 39c48: 27a50018 */ addiu $a1,$sp,0x18 -/* 39c4c: 00003025 */ or $a2,$zero,$zero -/* 39c50: 00003825 */ or $a3,$zero,$zero -/* 39c54: 0c00f184 */ jal alEvtqPostEvent -/* 39c58: 24840048 */ addiu $a0,$a0,0x48 -/* 39c5c: 10000001 */ b .L00039c64 -/* 39c60: 00000000 */ nop -.L00039c64: -/* 39c64: 8fbf0014 */ lw $ra,0x14($sp) -/* 39c68: 27bd0028 */ addiu $sp,$sp,0x28 -/* 39c6c: 03e00008 */ jr $ra -/* 39c70: 00000000 */ nop -); diff --git a/src/lib/ultra/audio/csplayer.c b/src/lib/ultra/audio/csplayer.c index d03cf3f41..27ada0512 100644 --- a/src/lib/ultra/audio/csplayer.c +++ b/src/lib/ultra/audio/csplayer.c @@ -6,7 +6,6 @@ #include "lib/lib_2fc60.h" #include "lib/lib_30ce0.h" #include "lib/lib_317f0.h" -#include "lib/lib_38d30.h" #include "lib/lib_39c80.h" #include "lib/lib_39fe0.h" #include "lib/lib_3a100.h"