From c014cdd52a53d945bed040dde6728833d9efd2c0 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 16 Dec 2021 08:20:50 -0500 Subject: [PATCH] alFxNew Updates from libreultra (#197) * Fix many warnings, mostly when using funcitons without including headers, and mostly in libultra files. Included a few warning ignores as well * Add another warning fix * Update alFxNew from libreultra's drvrNew.c file, to have some better matches and warning fixes * Match alFxNew * Redo the trailing comma, and a slight bit of documentation added * Rename alLoadPull file to match what it's called in libreultra, alAdpcmPull * Forgot to change the name in the GLOBAL_ASM * Potentially identify a function name, but don't commit to it yet --- include/audio_internal.h | 32 ++ lib/asm/non_matchings/alFxNew/alFxNew.s | 303 ------------------ .../{alLoadPull.s => alAdpcmPull.s} | 2 +- .../unknown_0CA9A0/alEnvMixerPull.s | 2 +- .../unknown_0CA9A0/alLoadParam.s | 4 +- lib/src/al/global_asm/unknown_0CA9A0.c | 4 +- lib/src/mips1/al/alFxNew.c | 198 +++++++++--- lib/src/mips1/al/alSynAllocFX.c | 5 +- lib/src/os/sptask.c | 3 +- src/menu.c | 10 + 10 files changed, 207 insertions(+), 356 deletions(-) delete mode 100644 lib/asm/non_matchings/alFxNew/alFxNew.s rename lib/asm/non_matchings/unknown_0CA9A0/{alLoadPull.s => alAdpcmPull.s} (99%) diff --git a/include/audio_internal.h b/include/audio_internal.h index 95e104a3..9cb74c0d 100644 --- a/include/audio_internal.h +++ b/include/audio_internal.h @@ -122,6 +122,8 @@ typedef struct ALFilter_s { s32 type; } ALFilter; +void alFilterNew(ALFilter *f, ALCmdHandler h, ALSetParam s, s32 type); + #define AL_MAX_ADPCM_STATES 3 /* Depends on number of subframes * per frame and loop length */ @@ -140,6 +142,11 @@ typedef struct { s32 memin; } ALLoadFilter; +void alLoadNew(ALLoadFilter *f, ALDMANew dma, ALHeap *hp); +Acmd *alAdpcmPull(void *f, s16 *outp, s32 byteCount, s32 sampleOffset, Acmd *p); +Acmd *alRaw16Pull(void *f, s16 *outp, s32 byteCount, s32 sampleOffset, Acmd *p); +s32 alLoadParam(void *filter, s32 paramID, void *param); + typedef struct ALResampler_s { ALFilter filter; RESAMPLE_STATE *state; @@ -188,6 +195,11 @@ typedef struct { ALSetFXParam paramHdl; } ALFx; +void alFxNew(ALFx *r, ALSynConfig *c, s16 bus, ALHeap *hp); +Acmd *alFxPull(void *f, s16 *outp, s32 out, s32 sampleOffset, Acmd *p); +s32 alFxParam(void *filter, s32 paramID, void *param); +s32 alFxParamHdl(void *filter, s32 paramID, void *param); + #define AL_MAX_MAIN_BUS_SOURCES 1 typedef struct ALMainBus_s { ALFilter filter; @@ -196,6 +208,10 @@ typedef struct ALMainBus_s { ALFilter **sources; } ALMainBus; +void alMainBusNew(ALMainBus *m, void *ptr, s32 len); +Acmd *alMainBusPull(void *f, s16 *outp, s32 outCount, s32 sampleOffset, Acmd *p); +s32 alMainBusParam(void *filter, s32 paramID, void *param); + #define AL_MAX_AUX_BUS_SOURCES 8 #define AL_MAX_AUX_BUS_FX 1 typedef struct ALAuxBus_s { @@ -206,12 +222,24 @@ typedef struct ALAuxBus_s { ALFx fx[AL_MAX_AUX_BUS_FX]; } ALAuxBus; +void alAuxBusNew(ALAuxBus *m, void *ptr, s32 len); +Acmd *alAuxBusPull(void *f, s16 *outp, s32 outCount, s32 sampleOffset, Acmd *p); +s32 alAuxBusParam(void *filter, s32 paramID, void *param); + +void alResampleNew(ALResampler *r, ALHeap *hp); +Acmd *alResamplePull(void *f, s16 *outp, s32 out, s32 sampleOffset, Acmd *p); +s32 alResampleParam(void *f, s32 paramID, void *param); + typedef struct ALSave_s { ALFilter filter; s32 dramout; s32 first; } ALSave; +void alSaveNew(ALSave *r); +Acmd *alSavePull(void *f, s16 *outp, s32 outCount, s32 sampleOffset, Acmd *p); +s32 alSaveParam(void *f, s32 paramID, void *param); + typedef struct ALEnvMixer_s { ALFilter filter; ENVMIX_STATE *state; @@ -236,6 +264,10 @@ typedef struct ALEnvMixer_s { s32 motion; } ALEnvMixer; +void alEnvmixerNew(ALEnvMixer *e, ALHeap *hp); +Acmd *alEnvmixerPull(void *f, s16 *outp, s32 out, s32 sampleOffset, Acmd *p); +s32 alEnvmixerParam(void *filter, s32 paramID, void *param); + /* * heap stuff */ diff --git a/lib/asm/non_matchings/alFxNew/alFxNew.s b/lib/asm/non_matchings/alFxNew/alFxNew.s deleted file mode 100644 index 9351ec84..00000000 --- a/lib/asm/non_matchings/alFxNew/alFxNew.s +++ /dev/null @@ -1,303 +0,0 @@ -.late_rodata -glabel jpt_800E6EA0 -.word L80064AD8, L80064AE4, L80064AFC, L80064B08, L80064AF0, L80064B14 -glabel D_800E6EB8 -.float 8.320827 -glabel D_800E6EBC -.float 0.04680453 - -.text -glabel alFxNew -/* 065608 80064A08 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 06560C 80064A0C AFB00038 */ sw $s0, 0x38($sp) -/* 065610 80064A10 00068400 */ sll $s0, $a2, 0x10 -/* 065614 80064A14 AFA60068 */ sw $a2, 0x68($sp) -/* 065618 80064A18 00107403 */ sra $t6, $s0, 0x10 -/* 06561C 80064A1C AFBF005C */ sw $ra, 0x5c($sp) -/* 065620 80064A20 AFB60050 */ sw $s6, 0x50($sp) -/* 065624 80064A24 AFA50064 */ sw $a1, 0x64($sp) -/* 065628 80064A28 AFA7006C */ sw $a3, 0x6c($sp) -/* 06562C 80064A2C 3C068006 */ lui $a2, %hi(alFxParam) # $a2, 0x8006 -/* 065630 80064A30 0080B025 */ move $s6, $a0 -/* 065634 80064A34 01C08025 */ move $s0, $t6 -/* 065638 80064A38 AFBE0058 */ sw $fp, 0x58($sp) -/* 06563C 80064A3C AFB70054 */ sw $s7, 0x54($sp) -/* 065640 80064A40 AFB5004C */ sw $s5, 0x4c($sp) -/* 065644 80064A44 AFB40048 */ sw $s4, 0x48($sp) -/* 065648 80064A48 AFB30044 */ sw $s3, 0x44($sp) -/* 06564C 80064A4C AFB20040 */ sw $s2, 0x40($sp) -/* 065650 80064A50 AFB1003C */ sw $s1, 0x3c($sp) -/* 065654 80064A54 E7BB0030 */ swc1 $f27, 0x30($sp) -/* 065658 80064A58 E7BA0034 */ swc1 $f26, 0x34($sp) -/* 06565C 80064A5C E7B90028 */ swc1 $f25, 0x28($sp) -/* 065660 80064A60 E7B8002C */ swc1 $f24, 0x2c($sp) -/* 065664 80064A64 E7B70020 */ swc1 $f23, 0x20($sp) -/* 065668 80064A68 E7B60024 */ swc1 $f22, 0x24($sp) -/* 06566C 80064A6C E7B50018 */ swc1 $f21, 0x18($sp) -/* 065670 80064A70 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 065674 80064A74 24C63F94 */ addiu $a2, %lo(alFxParam) # addiu $a2, $a2, 0x3f94 -/* 065678 80064A78 24070005 */ li $a3, 5 -/* 06567C 80064A7C 0C03282C */ jal alFilterNew -/* 065680 80064A80 00002825 */ move $a1, $zero -/* 065684 80064A84 8FA20064 */ lw $v0, 0x64($sp) -/* 065688 80064A88 3C0F8006 */ lui $t7, %hi(alFxPull) # $t7, 0x8006 -/* 06568C 80064A8C 3C188006 */ lui $t8, %hi(alFxParamHdl) # $t8, 0x8006 -/* 065690 80064A90 25EF3C30 */ addiu $t7, %lo(alFxPull) # addiu $t7, $t7, 0x3c30 -/* 065694 80064A94 27183FAC */ addiu $t8, %lo(alFxParamHdl) # addiu $t8, $t8, 0x3fac -/* 065698 80064A98 AECF0004 */ sw $t7, 4($s6) -/* 06569C 80064A9C AED80028 */ sw $t8, 0x28($s6) -/* 0656A0 80064AA0 0050C821 */ addu $t9, $v0, $s0 -/* 0656A4 80064AA4 9328001C */ lbu $t0, 0x1c($t9) -/* 0656A8 80064AA8 3C13800E */ lui $s3, %hi(NULL_PARAMS) # $s3, 0x800e -/* 0656AC 80064AAC 2509FFFF */ addiu $t1, $t0, -1 -/* 0656B0 80064AB0 2D210006 */ sltiu $at, $t1, 6 -/* 0656B4 80064AB4 1020001C */ beqz $at, .L80064B28 -/* 0656B8 80064AB8 2673D028 */ addiu $s3, %lo(NULL_PARAMS) # addiu $s3, $s3, -0x2fd8 -/* 0656BC 80064ABC 00094880 */ sll $t1, $t1, 2 -/* 0656C0 80064AC0 3C01800E */ lui $at, %hi(jpt_800E6EA0) # $at, 0x800e -/* 0656C4 80064AC4 00290821 */ addu $at, $at, $t1 -/* 0656C8 80064AC8 8C296EA0 */ lw $t1, %lo(jpt_800E6EA0)($at) -/* 0656CC 80064ACC 00000000 */ nop -/* 0656D0 80064AD0 01200008 */ jr $t1 -/* 0656D4 80064AD4 00000000 */ nop -glabel L80064AD8 -/* 0656D8 80064AD8 3C13800E */ lui $s3, %hi(SMALLROOM_PARAMS) # $s3, 0x800e -/* 0656DC 80064ADC 10000012 */ b .L80064B28 -/* 0656E0 80064AE0 2673CEC0 */ addiu $s3, %lo(SMALLROOM_PARAMS) # addiu $s3, $s3, -0x3140 -glabel L80064AE4 -/* 0656E4 80064AE4 3C13800E */ lui $s3, %hi(BIGROOM_PARAMS) # $s3, 0x800e -/* 0656E8 80064AE8 1000000F */ b .L80064B28 -/* 0656EC 80064AEC 2673CF28 */ addiu $s3, %lo(BIGROOM_PARAMS) # addiu $s3, $s3, -0x30d8 -glabel L80064AF0 -/* 0656F0 80064AF0 3C13800E */ lui $s3, %hi(ECHO_PARAMS) # $s3, 0x800e -/* 0656F4 80064AF4 1000000C */ b .L80064B28 -/* 0656F8 80064AF8 2673CFB0 */ addiu $s3, %lo(ECHO_PARAMS) # addiu $s3, $s3, -0x3050 -glabel L80064AFC -/* 0656FC 80064AFC 3C13800E */ lui $s3, %hi(CHORUS_PARAMS) # $s3, 0x800e -/* 065700 80064B00 10000009 */ b .L80064B28 -/* 065704 80064B04 2673CFD8 */ addiu $s3, %lo(CHORUS_PARAMS) # addiu $s3, $s3, -0x3028 -glabel L80064B08 -/* 065708 80064B08 3C13800E */ lui $s3, %hi(FLANGE_PARAMS) # $s3, 0x800e -/* 06570C 80064B0C 10000006 */ b .L80064B28 -/* 065710 80064B10 2673D000 */ addiu $s3, %lo(FLANGE_PARAMS) # addiu $s3, $s3, -0x3000 -glabel L80064B14 -/* 065714 80064B14 00105080 */ sll $t2, $s0, 2 -/* 065718 80064B18 004A5821 */ addu $t3, $v0, $t2 -/* 06571C 80064B1C 8D730020 */ lw $s3, 0x20($t3) -/* 065720 80064B20 10000002 */ b .L80064B2C -/* 065724 80064B24 8E6C0000 */ lw $t4, ($s3) -.L80064B28: -/* 065728 80064B28 8E6C0000 */ lw $t4, ($s3) -.L80064B2C: -/* 06572C 80064B2C 241E0028 */ li $fp, 40 -/* 065730 80064B30 318E00FF */ andi $t6, $t4, 0xff -/* 065734 80064B34 01DE0019 */ multu $t6, $fp -/* 065738 80064B38 A2CC0024 */ sb $t4, 0x24($s6) -/* 06573C 80064B3C 8E6D0004 */ lw $t5, 4($s3) -/* 065740 80064B40 3C1500FF */ lui $s5, (0x00FFFFFF >> 16) # lui $s5, 0xff -/* 065744 80064B44 36B5FFFF */ ori $s5, (0x00FFFFFF & 0xFFFF) # ori $s5, $s5, 0xffff -/* 065748 80064B48 24110002 */ li $s1, 2 -/* 06574C 80064B4C 02A02825 */ move $a1, $s5 -/* 065750 80064B50 AECD001C */ sw $t5, 0x1c($s6) -/* 065754 80064B54 00002012 */ mflo $a0 -/* 065758 80064B58 0C01C327 */ jal allocate_from_main_pool_safe -/* 06575C 80064B5C 00000000 */ nop -/* 065760 80064B60 8EC4001C */ lw $a0, 0x1c($s6) -/* 065764 80064B64 AEC20020 */ sw $v0, 0x20($s6) -/* 065768 80064B68 00047840 */ sll $t7, $a0, 1 -/* 06576C 80064B6C 01E02025 */ move $a0, $t7 -/* 065770 80064B70 0C01C327 */ jal allocate_from_main_pool_safe -/* 065774 80064B74 02A02825 */ move $a1, $s5 -/* 065778 80064B78 8ED8001C */ lw $t8, 0x1c($s6) -/* 06577C 80064B7C AEC20014 */ sw $v0, 0x14($s6) -/* 065780 80064B80 AEC20018 */ sw $v0, 0x18($s6) -/* 065784 80064B84 1300000B */ beqz $t8, .L80064BB4 -/* 065788 80064B88 00001825 */ move $v1, $zero -.L80064B8C: -/* 06578C 80064B8C 8ED90014 */ lw $t9, 0x14($s6) -/* 065790 80064B90 00034040 */ sll $t0, $v1, 1 -/* 065794 80064B94 03284821 */ addu $t1, $t9, $t0 -/* 065798 80064B98 A5200000 */ sh $zero, ($t1) -/* 06579C 80064B9C 8ECB001C */ lw $t3, 0x1c($s6) -/* 0657A0 80064BA0 24630001 */ addiu $v1, $v1, 1 -/* 0657A4 80064BA4 306AFFFF */ andi $t2, $v1, 0xffff -/* 0657A8 80064BA8 014B082B */ sltu $at, $t2, $t3 -/* 0657AC 80064BAC 1420FFF7 */ bnez $at, .L80064B8C -/* 0657B0 80064BB0 01401825 */ move $v1, $t2 -.L80064BB4: -/* 0657B4 80064BB4 92CC0024 */ lbu $t4, 0x24($s6) -/* 0657B8 80064BB8 0000A025 */ move $s4, $zero -/* 0657BC 80064BBC 19800091 */ blez $t4, .L80064E04 -/* 0657C0 80064BC0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0657C4 80064BC4 4481C000 */ mtc1 $at, $f24 -/* 0657C8 80064BC8 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0657CC 80064BCC 4481B000 */ mtc1 $at, $f22 -/* 0657D0 80064BD0 3C01800E */ lui $at, %hi(D_800E6EBC) # $at, 0x800e -/* 0657D4 80064BD4 C4356EB8 */ lwc1 $f21, %lo(D_800E6EB8)($at) -/* 0657D8 80064BD8 C4346EBC */ lwc1 $f20, %lo(D_800E6EBC)($at) -/* 0657DC 80064BDC 4480D000 */ mtc1 $zero, $f26 -/* 0657E0 80064BE0 24170001 */ li $s7, 1 -.L80064BE4: -/* 0657E4 80064BE4 029E0019 */ multu $s4, $fp -/* 0657E8 80064BE8 00117880 */ sll $t7, $s1, 2 -/* 0657EC 80064BEC 8ECD0020 */ lw $t5, 0x20($s6) -/* 0657F0 80064BF0 026FC021 */ addu $t8, $s3, $t7 -/* 0657F4 80064BF4 26310001 */ addiu $s1, $s1, 1 -/* 0657F8 80064BF8 8F190000 */ lw $t9, ($t8) -/* 0657FC 80064BFC 3228FFFF */ andi $t0, $s1, 0xffff -/* 065800 80064C00 00084880 */ sll $t1, $t0, 2 -/* 065804 80064C04 02695021 */ addu $t2, $s3, $t1 -/* 065808 80064C08 25110001 */ addiu $s1, $t0, 1 -/* 06580C 80064C0C 322CFFFF */ andi $t4, $s1, 0xffff -/* 065810 80064C10 25910001 */ addiu $s1, $t4, 1 -/* 065814 80064C14 00007012 */ mflo $t6 -/* 065818 80064C18 01AE8021 */ addu $s0, $t5, $t6 -/* 06581C 80064C1C AE190000 */ sw $t9, ($s0) -/* 065820 80064C20 8D4B0000 */ lw $t3, ($t2) -/* 065824 80064C24 000C6880 */ sll $t5, $t4, 2 -/* 065828 80064C28 026D7021 */ addu $t6, $s3, $t5 -/* 06582C 80064C2C AE0B0004 */ sw $t3, 4($s0) -/* 065830 80064C30 8DCF0000 */ lw $t7, ($t6) -/* 065834 80064C34 3238FFFF */ andi $t8, $s1, 0xffff -/* 065838 80064C38 0018C880 */ sll $t9, $t8, 2 -/* 06583C 80064C3C 02794021 */ addu $t0, $s3, $t9 -/* 065840 80064C40 27110001 */ addiu $s1, $t8, 1 -/* 065844 80064C44 A60F000A */ sh $t7, 0xa($s0) -/* 065848 80064C48 8D090000 */ lw $t1, ($t0) -/* 06584C 80064C4C 322AFFFF */ andi $t2, $s1, 0xffff -/* 065850 80064C50 000A5880 */ sll $t3, $t2, 2 -/* 065854 80064C54 026B6021 */ addu $t4, $s3, $t3 -/* 065858 80064C58 25510001 */ addiu $s1, $t2, 1 -/* 06585C 80064C5C A6090008 */ sh $t1, 8($s0) -/* 065860 80064C60 8D8D0000 */ lw $t5, ($t4) -/* 065864 80064C64 322EFFFF */ andi $t6, $s1, 0xffff -/* 065868 80064C68 000E7880 */ sll $t7, $t6, 2 -/* 06586C 80064C6C 026FC021 */ addu $t8, $s3, $t7 -/* 065870 80064C70 A60D000C */ sh $t5, 0xc($s0) -/* 065874 80064C74 8F020000 */ lw $v0, ($t8) -/* 065878 80064C78 01C08825 */ move $s1, $t6 -/* 06587C 80064C7C 1040003B */ beqz $v0, .L80064D6C -/* 065880 80064C80 02205025 */ move $t2, $s1 -/* 065884 80064C84 44822000 */ mtc1 $v0, $f4 -/* 065888 80064C88 8FB90064 */ lw $t9, 0x64($sp) -/* 06588C 80064C8C 468021A0 */ cvt.s.w $f6, $f4 -/* 065890 80064C90 8F280018 */ lw $t0, 0x18($t9) -/* 065894 80064C94 8E0A0004 */ lw $t2, 4($s0) -/* 065898 80064C98 46163203 */ div.s $f8, $f6, $f22 -/* 06589C 80064C9C 44888000 */ mtc1 $t0, $f16 -/* 0658A0 80064CA0 8E0B0000 */ lw $t3, ($s0) -/* 0658A4 80064CA4 468084A1 */ cvt.d.w $f18, $f16 -/* 0658A8 80064CA8 25D10001 */ addiu $s1, $t6, 1 -/* 0658AC 80064CAC 3229FFFF */ andi $t1, $s1, 0xffff -/* 0658B0 80064CB0 014B6023 */ subu $t4, $t2, $t3 -/* 0658B4 80064CB4 01208825 */ move $s1, $t1 -/* 0658B8 80064CB8 00116880 */ sll $t5, $s1, 2 -/* 0658BC 80064CBC 026D7021 */ addu $t6, $s3, $t5 -/* 0658C0 80064CC0 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 0658C4 80064CC4 46004021 */ cvt.d.s $f0, $f8 -/* 0658C8 80064CC8 46200280 */ add.d $f10, $f0, $f0 -/* 0658CC 80064CCC 448C4000 */ mtc1 $t4, $f8 -/* 0658D0 80064CD0 46325103 */ div.d $f4, $f10, $f18 -/* 0658D4 80064CD4 46804421 */ cvt.d.w $f16, $f8 -/* 0658D8 80064CD8 462021A0 */ cvt.s.d $f6, $f4 -/* 0658DC 80064CDC 05810005 */ bgez $t4, .L80064CF4 -/* 0658E0 80064CE0 E6060010 */ swc1 $f6, 0x10($s0) -/* 0658E4 80064CE4 44815800 */ mtc1 $at, $f11 -/* 0658E8 80064CE8 44805000 */ mtc1 $zero, $f10 -/* 0658EC 80064CEC 00000000 */ nop -/* 0658F0 80064CF0 462A8400 */ add.d $f16, $f16, $f10 -.L80064CF4: -/* 0658F4 80064CF4 8DCF0000 */ lw $t7, ($t6) -/* 0658F8 80064CF8 26310001 */ addiu $s1, $s1, 1 -/* 0658FC 80064CFC 448F9000 */ mtc1 $t7, $f18 -/* 065900 80064D00 3238FFFF */ andi $t8, $s1, 0xffff -/* 065904 80064D04 46809120 */ cvt.s.w $f4, $f18 -/* 065908 80064D08 03008825 */ move $s1, $t8 -/* 06590C 80064D0C E6180014 */ swc1 $f24, 0x14($s0) -/* 065910 80064D10 460021A1 */ cvt.d.s $f6, $f4 -/* 065914 80064D14 00000000 */ nop -/* 065918 80064D18 46343203 */ div.d $f8, $f6, $f20 -/* 06591C 80064D1C AE000018 */ sw $zero, 0x18($s0) -/* 065920 80064D20 24040034 */ li $a0, 52 -/* 065924 80064D24 02A02825 */ move $a1, $s5 -/* 065928 80064D28 46304282 */ mul.d $f10, $f8, $f16 -/* 06592C 80064D2C 462054A0 */ cvt.s.d $f18, $f10 -/* 065930 80064D30 0C01C327 */ jal allocate_from_main_pool_safe -/* 065934 80064D34 E612001C */ swc1 $f18, 0x1c($s0) -/* 065938 80064D38 AE020024 */ sw $v0, 0x24($s0) -/* 06593C 80064D3C 24040020 */ li $a0, 32 -/* 065940 80064D40 0C01C327 */ jal allocate_from_main_pool_safe -/* 065944 80064D44 02A02825 */ move $a1, $s5 -/* 065948 80064D48 8E190024 */ lw $t9, 0x24($s0) -/* 06594C 80064D4C 00000000 */ nop -/* 065950 80064D50 AF220014 */ sw $v0, 0x14($t9) -/* 065954 80064D54 8E080024 */ lw $t0, 0x24($s0) -/* 065958 80064D58 00000000 */ nop -/* 06595C 80064D5C E51A0020 */ swc1 $f26, 0x20($t0) -/* 065960 80064D60 8E090024 */ lw $t1, 0x24($s0) -/* 065964 80064D64 10000005 */ b .L80064D7C -/* 065968 80064D68 AD370024 */ sw $s7, 0x24($t1) -.L80064D6C: -/* 06596C 80064D6C 25510002 */ addiu $s1, $t2, 2 -/* 065970 80064D70 322BFFFF */ andi $t3, $s1, 0xffff -/* 065974 80064D74 AE000024 */ sw $zero, 0x24($s0) -/* 065978 80064D78 01608825 */ move $s1, $t3 -.L80064D7C: -/* 06597C 80064D7C 00116080 */ sll $t4, $s1, 2 -/* 065980 80064D80 026C9021 */ addu $s2, $s3, $t4 -/* 065984 80064D84 8E4D0000 */ lw $t5, ($s2) -/* 065988 80064D88 24040030 */ li $a0, 48 -/* 06598C 80064D8C 11A00013 */ beqz $t5, .L80064DDC -/* 065990 80064D90 00000000 */ nop -/* 065994 80064D94 0C01C327 */ jal allocate_from_main_pool_safe -/* 065998 80064D98 02A02825 */ move $a1, $s5 -/* 06599C 80064D9C AE020020 */ sw $v0, 0x20($s0) -/* 0659A0 80064DA0 24040008 */ li $a0, 8 -/* 0659A4 80064DA4 0C01C327 */ jal allocate_from_main_pool_safe -/* 0659A8 80064DA8 02A02825 */ move $a1, $s5 -/* 0659AC 80064DAC 8E0E0020 */ lw $t6, 0x20($s0) -/* 0659B0 80064DB0 26310001 */ addiu $s1, $s1, 1 -/* 0659B4 80064DB4 ADC20028 */ sw $v0, 0x28($t6) -/* 0659B8 80064DB8 8E180020 */ lw $t8, 0x20($s0) -/* 0659BC 80064DBC 8E4F0000 */ lw $t7, ($s2) -/* 0659C0 80064DC0 3239FFFF */ andi $t9, $s1, 0xffff -/* 0659C4 80064DC4 A70F0000 */ sh $t7, ($t8) -/* 0659C8 80064DC8 8E040020 */ lw $a0, 0x20($s0) -/* 0659CC 80064DCC 0C019254 */ jal init_lpfilter -/* 0659D0 80064DD0 03208825 */ move $s1, $t9 -/* 0659D4 80064DD4 10000006 */ b .L80064DF0 -/* 0659D8 80064DD8 92CA0024 */ lbu $t2, 0x24($s6) -.L80064DDC: -/* 0659DC 80064DDC 26310001 */ addiu $s1, $s1, 1 -/* 0659E0 80064DE0 3228FFFF */ andi $t0, $s1, 0xffff -/* 0659E4 80064DE4 AE000020 */ sw $zero, 0x20($s0) -/* 0659E8 80064DE8 01008825 */ move $s1, $t0 -/* 0659EC 80064DEC 92CA0024 */ lbu $t2, 0x24($s6) -.L80064DF0: -/* 0659F0 80064DF0 26940001 */ addiu $s4, $s4, 1 -/* 0659F4 80064DF4 3289FFFF */ andi $t1, $s4, 0xffff -/* 0659F8 80064DF8 012A082A */ slt $at, $t1, $t2 -/* 0659FC 80064DFC 1420FF79 */ bnez $at, .L80064BE4 -/* 065A00 80064E00 0120A025 */ move $s4, $t1 -.L80064E04: -/* 065A04 80064E04 8FBF005C */ lw $ra, 0x5c($sp) -/* 065A08 80064E08 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 065A0C 80064E0C C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 065A10 80064E10 C7B70020 */ lwc1 $f23, 0x20($sp) -/* 065A14 80064E14 C7B60024 */ lwc1 $f22, 0x24($sp) -/* 065A18 80064E18 C7B90028 */ lwc1 $f25, 0x28($sp) -/* 065A1C 80064E1C C7B8002C */ lwc1 $f24, 0x2c($sp) -/* 065A20 80064E20 C7BB0030 */ lwc1 $f27, 0x30($sp) -/* 065A24 80064E24 C7BA0034 */ lwc1 $f26, 0x34($sp) -/* 065A28 80064E28 8FB00038 */ lw $s0, 0x38($sp) -/* 065A2C 80064E2C 8FB1003C */ lw $s1, 0x3c($sp) -/* 065A30 80064E30 8FB20040 */ lw $s2, 0x40($sp) -/* 065A34 80064E34 8FB30044 */ lw $s3, 0x44($sp) -/* 065A38 80064E38 8FB40048 */ lw $s4, 0x48($sp) -/* 065A3C 80064E3C 8FB5004C */ lw $s5, 0x4c($sp) -/* 065A40 80064E40 8FB60050 */ lw $s6, 0x50($sp) -/* 065A44 80064E44 8FB70054 */ lw $s7, 0x54($sp) -/* 065A48 80064E48 8FBE0058 */ lw $fp, 0x58($sp) -/* 065A4C 80064E4C 03E00008 */ jr $ra -/* 065A50 80064E50 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/lib/asm/non_matchings/unknown_0CA9A0/alLoadPull.s b/lib/asm/non_matchings/unknown_0CA9A0/alAdpcmPull.s similarity index 99% rename from lib/asm/non_matchings/unknown_0CA9A0/alLoadPull.s rename to lib/asm/non_matchings/unknown_0CA9A0/alAdpcmPull.s index be1ca25e..a2642779 100644 --- a/lib/asm/non_matchings/unknown_0CA9A0/alLoadPull.s +++ b/lib/asm/non_matchings/unknown_0CA9A0/alAdpcmPull.s @@ -1,4 +1,4 @@ -glabel alLoadPull +glabel alAdpcmPull /* 0CC7EC 800CBBEC 27BDFF50 */ addiu $sp, $sp, -0xb0 /* 0CC7F0 800CBBF0 AFB70044 */ sw $s7, 0x44($sp) /* 0CC7F4 800CBBF4 AFA700BC */ sw $a3, 0xbc($sp) diff --git a/lib/asm/non_matchings/unknown_0CA9A0/alEnvMixerPull.s b/lib/asm/non_matchings/unknown_0CA9A0/alEnvMixerPull.s index 9dea0b46..cf37e638 100644 --- a/lib/asm/non_matchings/unknown_0CA9A0/alEnvMixerPull.s +++ b/lib/asm/non_matchings/unknown_0CA9A0/alEnvMixerPull.s @@ -17,7 +17,7 @@ glabel jpt_800E95B0 .word L800CA870, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA8C4, L800CA460, L800CA460, L800CA22C, L800CA7A8, L800CA828, L800CA460 .text -glabel alEnvMixerPull +glabel alEnvmixerPull /* 0CACD0 800CA0D0 27BDFFA0 */ addiu $sp, $sp, -0x60 /* 0CACD4 800CA0D4 AFBF001C */ sw $ra, 0x1c($sp) /* 0CACD8 800CA0D8 AFA40060 */ sw $a0, 0x60($sp) diff --git a/lib/asm/non_matchings/unknown_0CA9A0/alLoadParam.s b/lib/asm/non_matchings/unknown_0CA9A0/alLoadParam.s index ec0bbd7b..7079fa0c 100644 --- a/lib/asm/non_matchings/unknown_0CA9A0/alLoadParam.s +++ b/lib/asm/non_matchings/unknown_0CA9A0/alLoadParam.s @@ -10,7 +10,7 @@ glabel alLoadParam /* 0CC160 800CB560 AC860028 */ sw $a2, 0x28($a0) /* 0CC164 800CB564 8CCE0000 */ lw $t6, ($a2) /* 0CC168 800CB568 AC800038 */ sw $zero, 0x38($a0) -/* 0CC16C 800CB56C 3C0F800D */ lui $t7, %hi(alLoadPull) # $t7, 0x800d +/* 0CC16C 800CB56C 3C0F800D */ lui $t7, %hi(alAdpcmPull) # $t7, 0x800d /* 0CC170 800CB570 AC8E0044 */ sw $t6, 0x44($a0) /* 0CC174 800CB574 90C20008 */ lbu $v0, 8($a2) /* 0CC178 800CB578 50400007 */ beql $v0, $zero, .L800CB598 @@ -22,7 +22,7 @@ glabel alLoadParam /* 0CC190 800CB590 8FBF0014 */ lw $ra, 0x14($sp) /* 0CC194 800CB594 8CE20028 */ lw $v0, 0x28($a3) .L800CB598: -/* 0CC198 800CB598 25EFBBEC */ addiu $t7, %lo(alLoadPull) # addiu $t7, $t7, -0x4414 +/* 0CC198 800CB598 25EFBBEC */ addiu $t7, %lo(alAdpcmPull) # addiu $t7, $t7, -0x4414 /* 0CC19C 800CB59C ACEF0004 */ sw $t7, 4($a3) /* 0CC1A0 800CB5A0 8C580004 */ lw $t8, 4($v0) /* 0CC1A4 800CB5A4 24050009 */ li $a1, 9 diff --git a/lib/src/al/global_asm/unknown_0CA9A0.c b/lib/src/al/global_asm/unknown_0CA9A0.c index a97ce015..2a1fc0d6 100644 --- a/lib/src/al/global_asm/unknown_0CA9A0.c +++ b/lib/src/al/global_asm/unknown_0CA9A0.c @@ -41,8 +41,8 @@ GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/func_800CB2D4.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/func_800CB498.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alLoadParam.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alRaw16Pull.s") -//Called by alLoadPull +//Called by alAdpcmPull. _decodeChunk? GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/func_800CBAC0.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alLoadPull.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alAdpcmPull.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alResampleParam.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0CA9A0/alResamplePull.s") diff --git a/lib/src/mips1/al/alFxNew.c b/lib/src/mips1/al/alFxNew.c index f505bad8..6987fc3d 100644 --- a/lib/src/mips1/al/alFxNew.c +++ b/lib/src/mips1/al/alFxNew.c @@ -1,10 +1,31 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x80064950 */ +/*==================================================================== + * drvrNew.c + * + * Copyright 1993, Silicon Graphics, Inc. + * All Rights Reserved. + * + * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, + * Inc.; the contents of this file may not be disclosed to third + * parties, copied or duplicated in any form, in whole or in part, + * without the prior written permission of Silicon Graphics, Inc. + * + * RESTRICTED RIGHTS LEGEND: + * Use, duplication or disclosure by the Government is subject to + * restrictions as set forth in subdivision (c)(1)(ii) of the Rights + * in Technical Data and Computer Software clause at DFARS + * 252.227-7013, and/or in similar or successor clauses in the FAR, + * DOD or NASA FAR Supplement. Unpublished - rights reserved under the + * Copyright Laws of the United States. + *====================================================================*/ #include "types.h" #include "macros.h" #include "libultra_internal.h" #include "audio_internal.h" +#include "audio.h" +#include "src/memory.h" /* * WARNING: THE FOLLOWING CONSTANT MUST BE KEPT IN SYNC @@ -18,7 +39,8 @@ */ #define ms *(((s32)((f32)44.1))&~0x7) -s32 SMALLROOM_PARAMS[26] = { + +static s32 SMALLROOM_PARAMS[26] = { /* sections length */ 3, 100 ms, /* chorus chorus filter @@ -28,7 +50,7 @@ s32 SMALLROOM_PARAMS[26] = { 0, 60 ms, 5000, 0, 0, 0, 0, 0x5000 }; -s32 BIGROOM_PARAMS[34] = { +static s32 BIGROOM_PARAMS[34] = { /* sections length */ 4, 100 ms, /* chorus chorus filter @@ -39,7 +61,7 @@ s32 BIGROOM_PARAMS[34] = { 0, 94 ms, 8000, 0, 0, 0, 0, 0x5000 }; -s32 ECHO_PARAMS[10] = { +static s32 ECHO_PARAMS[10] = { /* sections length */ 1, 200 ms, /* chorus chorus filter @@ -47,7 +69,7 @@ s32 ECHO_PARAMS[10] = { 0, 179 ms, 12000, 0, 0x7fff, 0, 0, 0 }; -s32 CHORUS_PARAMS[10] = { +static s32 CHORUS_PARAMS[10] = { /* sections length */ 1, 20 ms, /* chorus chorus filter @@ -55,7 +77,7 @@ s32 CHORUS_PARAMS[10] = { 0, 5 ms, 0x4000, 0, 0x7fff, 7600, 700, 0 }; -s32 FLANGE_PARAMS[10] = { +static s32 FLANGE_PARAMS[10] = { /* sections length */ 1, 20 ms, /* chorus chorus filter @@ -63,26 +85,13 @@ s32 FLANGE_PARAMS[10] = { 0, 5 ms, 0, 0x5fff, 0x7fff, 380, 500, 0 }; -s32 NULL_PARAMS[10] = { +static s32 NULL_PARAMS[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -extern s32 alAuxBusPull; -extern s32 alAuxBusParam; -extern s32 alEnvMixerPull; -extern s32 alEnvmixerParam; -extern s32 alLoadParam; -extern s32 alLoadPull; -extern s32 alResampleParam; -extern s32 alResamplePull; -extern s32 alMainBusParam; -extern s32 alMainBusPull; -extern s32 alSaveParam; -extern s32 alSavePull; -void init_lpfilter(ALLowPass *lp) -{ +void init_lpfilter(ALLowPass *lp) { s32 i, temp; s16 fc; f64 ffc, fcoef; @@ -104,11 +113,86 @@ void init_lpfilter(ALLowPass *lp) } } -GLOBAL_ASM("lib/asm/non_matchings/alFxNew/alFxNew.s") +//This function differs from libreultra's, but still mostly the same +void alFxNew(ALFx *r, ALSynConfig *c, s16 bus, UNUSED ALHeap *hp) { + u16 i, j, k; + s32 *param = 0; + ALFilter *f = (ALFilter *) r; + ALDelay *d; + alFilterNew(f, 0, alFxParam, AL_FX); + f->handler = alFxPull; + r->paramHdl = (ALSetFXParam)alFxParamHdl; + switch (c->fxType[bus]) { + case AL_FX_SMALLROOM: param = SMALLROOM_PARAMS; break; + case AL_FX_BIGROOM: param = BIGROOM_PARAMS; break; + case AL_FX_ECHO: param = ECHO_PARAMS; break; + case AL_FX_CHORUS: param = CHORUS_PARAMS; break; + case AL_FX_FLANGE: param = FLANGE_PARAMS; break; + case AL_FX_CUSTOM: param = (&c->params)[bus]; break; + default: param = NULL_PARAMS; break; + } + j = 0; + r->section_count = param[j++]; + r->length = param[j++]; + r->delay = allocate_from_main_pool_safe(sizeof(ALDelay) * r->section_count, COLOR_TAG_CYAN); + r->base = allocate_from_main_pool_safe(sizeof(s16) * r->length, COLOR_TAG_CYAN); + r->input = r->base; + for ( k=0; k < r->length; k++) + r->base[k] = 0; + for ( i=0; isection_count; i++ ) { + d = &r->delay[i]; + d->input = param[j++]; + d->output = param[j++]; + d->fbcoef = param[j++]; + d->ffcoef = param[j++]; + d->gain = param[j++]; + if (param[j]) { + #define RANGE 2.0 + //d->rsinc = ((f32) param[j++])/0xffffff; + d->rsinc = ((((f32)param[j++])/1000) * RANGE)/c->outputRate; + /* + * the following constant is derived from: + * + * ratio = 2^(cents/1200) + * + * and therefore for hundredths of a cent + * x + * ln(ratio) = --------------- + * (120,000)/ln(2) + * where + * 120,000/ln(2) = 173123.40... + */ + #define CONVERT 173123.404906676 + #define LENGTH (d->output - d->input) + d->rsgain = (((f32) param[j++])/CONVERT) * LENGTH; + d->rsval = 1.0; + d->rsdelta = 0.0; + d->rs = allocate_from_main_pool_safe(sizeof(ALResampler), COLOR_TAG_CYAN); + d->rs->state = allocate_from_main_pool_safe(sizeof(RESAMPLE_STATE), COLOR_TAG_CYAN); + d->rs->delta = 0.0; + d->rs->first = 1; + } else { + d->rs = 0; + j++; + j++; + } + if (param[j]) { + d->lp = allocate_from_main_pool_safe(sizeof(ALLowPass), COLOR_TAG_CYAN); + d->lp->fstate = allocate_from_main_pool_safe(sizeof(POLEF_STATE), COLOR_TAG_CYAN); + d->lp->fc = param[j++]; + init_lpfilter(d->lp); + } else { + d->lp = 0; + j++; + } + } +} + +void alEnvmixerNew(ALEnvMixer *e, ALHeap *hp) { + alFilterNew((ALFilter *) e, alEnvmixerPull, alEnvmixerParam, AL_ENVMIX); + + e->state = alHeapAlloc(hp, 1, sizeof(ENVMIX_STATE)); -void alEnvmixerNew(ALEnvMixer *e, s32 arg1) { - alFilterNew(e, &alEnvMixerPull, &alEnvmixerParam, 4); - e->state = alHeapDBAlloc(0, 0, arg1, 1, 0x50); e->first = 1; e->motion = AL_STOPPED; e->volume = 1; @@ -120,6 +204,8 @@ void alEnvmixerNew(ALEnvMixer *e, s32 arg1) { e->wetamt = 0; e->lratm = 1; e->lratl = 0; + e->lratm = 1; + e->lratl = 0; e->delta = 0; e->segEnd = 0; e->pan = 0; @@ -128,44 +214,72 @@ void alEnvmixerNew(ALEnvMixer *e, s32 arg1) { e->sources = 0; } -void alLoadNew(ALLoadFilter *arg0, s32 (*arg1)(s32*), s32 arg2) { - alFilterNew(arg0, &alLoadPull, &alLoadParam, 0); - arg0->state = alHeapDBAlloc(0, 0, arg2, 1, 0x20); - arg0->lstate = alHeapDBAlloc(0, 0, arg2, 1, 0x20); - arg0->dma = arg1(&arg0->dmaState); - arg0->lastsam = 0; - arg0->first = 1; - arg0->memin = 0; +void alLoadNew(ALLoadFilter *f, ALDMANew dmaNew, ALHeap *hp) { + UNUSED s32 i; + + /* + * init filter superclass + */ + + alFilterNew((ALFilter *) f, alAdpcmPull, alLoadParam, AL_ADPCM); + + f->state = alHeapAlloc(hp, 1, sizeof(ADPCM_STATE)); + f->lstate = alHeapAlloc(hp, 1, sizeof(ADPCM_STATE)); + + f->dma = dmaNew(&f->dmaState); + + /* + * init the adpcm state + */ + f->lastsam = 0; + f->first = 1; + f->memin = 0; } void alResampleNew(ALResampler *r, ALHeap *hp) { - alFilterNew(r, &alResamplePull, &alResampleParam, 1); - r->state = alHeapDBAlloc(0, 0, hp, 1, 0x20); - r->first = 1; + alFilterNew((ALFilter *) r, alResamplePull, alResampleParam, AL_RESAMPLE); + + /* + * Init resampler state + */ + r->state = alHeapAlloc(hp, 1, sizeof(RESAMPLE_STATE)); + r->delta = 0.0; + r->first = 1; r->motion = AL_STOPPED; + r->ratio = 1.0; r->upitch = 0; r->ctrlList = 0; r->ctrlTail = 0; - r->delta = 0.0f; - r->ratio = 1.0f; + + /* state in the ucode is initialized by the A_INIT flag */ } void alAuxBusNew(ALAuxBus *m, void *sources, s32 maxSources) { - alFilterNew(m, &alAuxBusPull, &alAuxBusParam, 6); + alFilterNew((ALFilter *) m, alAuxBusPull, alAuxBusParam, AL_AUXBUS); m->sourceCount = 0; m->maxSources = maxSources; - m->sources = sources; + m->sources = (ALFilter **)sources; } void alMainBusNew(ALMainBus *m, void *sources, s32 maxSources) { - alFilterNew(m, &alMainBusPull, &alMainBusParam, 7); + alFilterNew((ALFilter *) m, alMainBusPull, alMainBusParam, AL_MAINBUS); m->sourceCount = 0; m->maxSources = maxSources; - m->sources = sources; + m->sources = (ALFilter **)sources; } void alSaveNew(ALSave *f) { - alFilterNew(f, &alSavePull, &alSaveParam, AL_SAVE); + /* + * init filter superclass + */ + + alFilterNew((ALFilter *) f, alSavePull, alSaveParam, AL_SAVE); + + /* + * init the save state, which is a virtual dram address + */ + f->dramout = 0; f->first = 1; + } diff --git a/lib/src/mips1/al/alSynAllocFX.c b/lib/src/mips1/al/alSynAllocFX.c index e13e08d5..b3da0476 100644 --- a/lib/src/mips1/al/alSynAllocFX.c +++ b/lib/src/mips1/al/alSynAllocFX.c @@ -6,13 +6,10 @@ #include "audio_internal.h" #ifdef NON_EQUIVALENT -void alFxNew(ALFx *r, ALSynConfig *c, s16 bus); -s32 alFxParam(void *filter, s32 paramID, void *param); -s32 alMainBusParam(void *filter, s32 paramID, void *param); // This is very close to matching. ALFxRef *alSynAllocFX(ALSynth *s, s16 bus, ALSynConfig *c, ALHeap *hp) { - alFxNew(s->auxBus[bus].fx, c, bus); + alFxNew(s->auxBus[bus].fx, c, bus, hp); alFxParam(s->auxBus[bus].fx, AL_FILTER_SET_SOURCE, &s->auxBus[bus]); alMainBusParam(s->mainBus, AL_FILTER_ADD_SOURCE, s->auxBus[bus].fx); diff --git a/lib/src/os/sptask.c b/lib/src/os/sptask.c index 0ef5a1d9..1c5f23c7 100644 --- a/lib/src/os/sptask.c +++ b/lib/src/os/sptask.c @@ -5,6 +5,7 @@ #include "viint.h" #include "PR/sptask.h" #include "osint.h" +#include "macros.h" #define _osVirtualToPhysical(ptr) \ if (ptr != NULL) { \ @@ -53,7 +54,7 @@ void osSpTaskLoad(OSTask *intp) { ; } -void osSpTaskStartGo(OSTask *tp) { +void osSpTaskStartGo(UNUSED OSTask *tp) { while (__osSpDeviceBusy()); __osSpSetStatus(SP_SET_INTR_BREAK | SP_CLR_SSTEP | SP_CLR_BROKE | SP_CLR_HALT); diff --git a/src/menu.c b/src/menu.c index 0d47f5b9..97841e2a 100644 --- a/src/menu.c +++ b/src/menu.c @@ -67,7 +67,17 @@ s8 D_80126430; s8 D_80126431; s32 D_80126434; s32 D_80126438[4]; + +//Seems to be a set of flags +//bit 0 = Adventure Two is Unlocked +//bit 1 = Used to set the CHEAT_MIRRORED_TRACKS magic code flag +//bits 2-3 = Current language value +//bits 4-23 = Used to set the CHEAT_CONTROL_DRUMSTICK magic code flag +//bit 24 = Unknown +//bit 25 = Seems to be a flag for whether subtitles are enabled or not. +//bits 26-63 = Unknown s64 D_80126448; + f32 sBootScreenTimer; s8 gControllersXAxisDelay[4]; s8 gControllersYAxisDelay[4];