fix audio pointers allowing rom shifts again (#169)

* fix audio pointers allowing rom shifts again
This commit is contained in:
MegaMech 2022-03-03 20:21:06 -08:00 committed by GitHub
parent 2cc06e8a46
commit 614ae13215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 114 additions and 142 deletions

56
asm/bss_audio.s Normal file
View File

@ -0,0 +1,56 @@
.include "macros.inc"
.section .bss
glabel D_803AFBD0
.skip 8
glabel D_803AFBD8
.skip 16
glabel D_803AFBE8
.skip 48
glabel D_803AFC18
.skip 16
glabel D_803AFC28
.skip 16
glabel D_803AFC38
.skip 16
glabel D_803AFC48
.skip 4
glabel D_803AFC4C
.skip 400
glabel D_803AFDDC
.skip 4
glabel D_803AFDE0
.skip 56
glabel D_803AFE18
.skip 4
glabel D_803AFE1C
.skip 400
glabel D_803AFFAC
.skip 4
glabel D_803AFFB0
.skip 56
glabel D_803AFFE8
.skip 4
glabel D_803AFFEC

View File

@ -2,92 +2,9 @@
.section .bss
.skip 875760
#glabel gFramebuffer0
#.skip 153600
# Audio
#glabel gFramebuffer1
#.skip 153600
#glabel gFramebuffer2
#.skip 153600
## Audio
glabel gGfxSPTaskOutputBuffer # 0x8038FF80
.skip 129024
glabel gGfxSPTaskOutputBufferSize # 0x803AF780
.skip 16
glabel D_803AF790
.skip 1056
glabel D_803AFBB0
.skip 16
glabel D_803AFBC0
.skip 2
glabel D_803AFBC2
.skip 1
glabel D_803AFBC3
.skip 1
glabel D_803AFBC4
.skip 4
glabel D_803AFBC8
.skip 8
glabel D_803AFBD0
.skip 8
glabel D_803AFBD8
.skip 16
glabel D_803AFBE8
.skip 48
glabel D_803AFC18
.skip 16
glabel D_803AFC28
.skip 16
glabel D_803AFC38
.skip 16
glabel D_803AFC48
.skip 4
glabel D_803AFC4C
.skip 400
glabel D_803AFDDC
.skip 4
glabel D_803AFDE0
.skip 56
glabel D_803AFE18
.skip 4
glabel D_803AFE1C
.skip 400
glabel D_803AFFAC
.skip 4
glabel D_803AFFB0
.skip 56
glabel D_803AFFE8
.skip 4
glabel D_803AFFEC
.skip 400
.skip 396
glabel D_803B017C
.skip 4

View File

@ -13,8 +13,8 @@ glabel func_800B90F0
/* 0B9D1C 800B911C 8DEFA5D0 */ lw $t7, %lo(D_800EA5D0)($t7)
/* 0B9D20 800B9120 3C0E803B */ lui $t6, %hi(D_803B71B0) # $t6, 0x803b
/* 0B9D24 800B9124 25CE71B0 */ addiu $t6, %lo(D_803B71B0) # addiu $t6, $t6, 0x71b0
/* 0B9D28 800B9128 3C04803B */ lui $a0, %hi(D_803AFBC8) # $a0, 0x803b
/* 0B9D2C 800B912C 2484FBC8 */ addiu $a0, %lo(D_803AFBC8) # addiu $a0, $a0, -0x438
/* 0B9D28 800B9128 3C04803B */ lui $a0, %hi(gLeftVolRampings) # $a0, 0x803b
/* 0B9D2C 800B912C 2484FBC8 */ addiu $a0, %lo(gLeftVolRampings) # addiu $a0, $a0, -0x438
/* 0B9D30 800B9130 00EE2821 */ addu $a1, $a3, $t6
/* 0B9D34 800B9134 0C02E41F */ jal func_800B907C
/* 0B9D38 800B9138 01E73023 */ subu $a2, $t7, $a3

View File

@ -1,8 +1,8 @@
glabel func_800B914C
/* 0B9D4C 800B914C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0B9D50 800B9150 AFA40018 */ sw $a0, 0x18($sp)
/* 0B9D54 800B9154 3C04803B */ lui $a0, %hi(D_803AFBC8) # $a0, 0x803b
/* 0B9D58 800B9158 2484FBC8 */ addiu $a0, %lo(D_803AFBC8) # addiu $a0, $a0, -0x438
/* 0B9D54 800B9154 3C04803B */ lui $a0, %hi(gLeftVolRampings) # $a0, 0x803b
/* 0B9D58 800B9158 2484FBC8 */ addiu $a0, %lo(gLeftVolRampings) # addiu $a0, $a0, -0x438
/* 0B9D5C 800B915C 8C8E0000 */ lw $t6, ($a0)
/* 0B9D60 800B9160 8FAF0018 */ lw $t7, 0x18($sp)
/* 0B9D64 800B9164 AFBF0014 */ sw $ra, 0x14($sp)
@ -16,8 +16,8 @@ glabel func_800B914C
/* 0B9D84 800B9184 0C02E41F */ jal func_800B907C
/* 0B9D88 800B9188 8F060000 */ lw $a2, ($t8)
/* 0B9D8C 800B918C 8FB90018 */ lw $t9, 0x18($sp)
/* 0B9D90 800B9190 3C04803B */ lui $a0, %hi(D_803AFBC8) # $a0, 0x803b
/* 0B9D94 800B9194 2484FBC8 */ addiu $a0, %lo(D_803AFBC8) # addiu $a0, $a0, -0x438
/* 0B9D90 800B9190 3C04803B */ lui $a0, %hi(gLeftVolRampings) # $a0, 0x803b
/* 0B9D94 800B9194 2484FBC8 */ addiu $a0, %lo(gLeftVolRampings) # addiu $a0, $a0, -0x438
/* 0B9D98 800B9198 0C02E3FF */ jal func_800B8FFC
/* 0B9D9C 800B919C 8F25000C */ lw $a1, 0xc($t9)
/* 0B9DA0 800B91A0 8FA80018 */ lw $t0, 0x18($sp)

View File

@ -1,8 +1,8 @@
glabel func_800B9FB8
/* 0BABB8 800B9FB8 3C03803B */ lui $v1, %hi(D_803AFBC3) # $v1, 0x803b
/* 0BABBC 800B9FBC 8063FBC3 */ lb $v1, %lo(D_803AFBC3)($v1)
/* 0BABC0 800B9FC0 3C0E803B */ lui $t6, %hi(D_803AF790) # 0x803b
/* 0BABC4 800B9FC4 25C2F790 */ addiu $v0, $t6, %lo(D_803AF790) # -0x870
/* 0BABB8 800B9FB8 3C03803B */ lui $v1, %hi(gNumSynthesisReverbs) # $v1, 0x803b
/* 0BABBC 800B9FBC 8063FBC3 */ lb $v1, %lo(gNumSynthesisReverbs)($v1)
/* 0BABC0 800B9FC0 3C0E803B */ lui $t6, %hi(gSynthesisReverbs) # 0x803b
/* 0BABC4 800B9FC4 25C2F790 */ addiu $v0, $t6, %lo(gSynthesisReverbs) # -0x870
/* 0BABC8 800B9FC8 1860000E */ blez $v1, .L800BA004
/* 0BABCC 800B9FCC 00037940 */ sll $t7, $v1, 5
/* 0BABD0 800B9FD0 01E37821 */ addu $t7, $t7, $v1

View File

@ -98,7 +98,7 @@ glabel func_800BA250
/* 0BAFC0 800BA3C0 3C013F80 */ li $at, 0x3F800000 # 1.000000
/* 0BAFC4 800BA3C4 44812000 */ mtc1 $at, $f4
/* 0BAFC8 800BA3C8 46009183 */ div.s $f6, $f18, $f0
/* 0BAFCC 800BA3CC 3C01803B */ lui $at, %hi(D_803AFBC0) # $at, 0x803b
/* 0BAFCC 800BA3CC 3C01803B */ lui $at, %hi(gVolume) # $at, 0x803b
/* 0BAFD0 800BA3D0 46002203 */ div.s $f8, $f4, $f0
/* 0BAFD4 800BA3D4 E686001C */ swc1 $f6, 0x1c($s4)
/* 0BAFD8 800BA3D8 E6880018 */ swc1 $f8, 0x18($s4)
@ -106,7 +106,7 @@ glabel func_800BA250
/* 0BAFE0 800BA3E0 AD8E0000 */ sw $t6, ($t4)
/* 0BAFE4 800BA3E4 96CF000C */ lhu $t7, 0xc($s6)
/* 0BAFE8 800BA3E8 8718A5CC */ lh $t8, %lo(D_800EA5CC)($t8)
/* 0BAFEC 800BA3EC A42FFBC0 */ sh $t7, %lo(D_803AFBC0)($at)
/* 0BAFEC 800BA3EC A42FFBC0 */ sh $t7, %lo(gVolume)($at)
/* 0BAFF0 800BA3F0 3C01800F */ lui $at, %hi(D_800F2E9C) # $at, 0x800f
/* 0BAFF4 800BA3F4 C42A2E9C */ lwc1 $f10, %lo(D_800F2E9C)($at)
/* 0BAFF8 800BA3F8 44989000 */ mtc1 $t8, $f18
@ -250,10 +250,10 @@ glabel func_800BA250
/* 0BB214 800BA614 0005C900 */ sll $t9, $a1, 4
/* 0BB218 800BA618 0C02E3FF */ jal func_800B8FFC
/* 0BB21C 800BA61C 03202825 */ move $a1, $t9
/* 0BB220 800BA620 3C01803B */ lui $at, %hi(D_803AFBC4) # $at, 0x803b
/* 0BB220 800BA620 3C01803B */ lui $at, %hi(gNoteSubsEu) # $at, 0x803b
/* 0BB224 800BA624 3C10803B */ lui $s0, %hi(D_803B70C8) # $s0, 0x803b
/* 0BB228 800BA628 3C11803B */ lui $s1, %hi(D_803B70D0) # $s1, 0x803b
/* 0BB22C 800BA62C AC22FBC4 */ sw $v0, %lo(D_803AFBC4)($at)
/* 0BB22C 800BA62C AC22FBC4 */ sw $v0, %lo(gNoteSubsEu)($at)
/* 0BB230 800BA630 263170D0 */ addiu $s1, %lo(D_803B70D0) # addiu $s1, $s1, 0x70d0
/* 0BB234 800BA634 261070C8 */ addiu $s0, %lo(D_803B70C8) # addiu $s0, $s0, 0x70c8
.L800BA638:
@ -265,22 +265,22 @@ glabel func_800BA250
/* 0BB24C 800BA64C 26100004 */ addiu $s0, $s0, 4
/* 0BB250 800BA650 1611FFF9 */ bne $s0, $s1, .L800BA638
/* 0BB254 800BA654 AE02FFFC */ sw $v0, -4($s0)
/* 0BB258 800BA658 3C12803B */ lui $s2, %hi(D_803AF790) # $s2, 0x803b
/* 0BB25C 800BA65C 3C02803B */ lui $v0, %hi(D_803AFBB0) # $v0, 0x803b
/* 0BB260 800BA660 2442FBB0 */ addiu $v0, %lo(D_803AFBB0) # addiu $v0, $v0, -0x450
/* 0BB264 800BA664 2652F790 */ addiu $s2, %lo(D_803AF790) # addiu $s2, $s2, -0x870
/* 0BB258 800BA658 3C12803B */ lui $s2, %hi(gSynthesisReverbs) # $s2, 0x803b
/* 0BB25C 800BA65C 3C02803B */ lui $v0, %hi(sAudioSynthesisPad) # $v0, 0x803b
/* 0BB260 800BA660 2442FBB0 */ addiu $v0, %lo(sAudioSynthesisPad) # addiu $v0, $v0, -0x450
/* 0BB264 800BA664 2652F790 */ addiu $s2, %lo(gSynthesisReverbs) # addiu $s2, $s2, -0x870
.L800BA668:
/* 0BB268 800BA668 26520108 */ addiu $s2, $s2, 0x108
/* 0BB26C 800BA66C 0242082B */ sltu $at, $s2, $v0
/* 0BB270 800BA670 1420FFFD */ bnez $at, .L800BA668
/* 0BB274 800BA674 A240FEF9 */ sb $zero, -0x107($s2)
/* 0BB278 800BA678 92CF0006 */ lbu $t7, 6($s6)
/* 0BB27C 800BA67C 3C17803B */ lui $s7, %hi(D_803AFBC3) # $s7, 0x803b
/* 0BB280 800BA680 26F7FBC3 */ addiu $s7, %lo(D_803AFBC3) # addiu $s7, $s7, -0x43d
/* 0BB27C 800BA67C 3C17803B */ lui $s7, %hi(gNumSynthesisReverbs) # $s7, 0x803b
/* 0BB280 800BA680 26F7FBC3 */ addiu $s7, %lo(gNumSynthesisReverbs) # addiu $s7, $s7, -0x43d
/* 0BB284 800BA684 A2EF0000 */ sb $t7, ($s7)
/* 0BB288 800BA688 82EE0000 */ lb $t6, ($s7)
/* 0BB28C 800BA68C 3C12803B */ lui $s2, %hi(D_803AF790) # $s2, 0x803b
/* 0BB290 800BA690 2652F790 */ addiu $s2, %lo(D_803AF790) # addiu $s2, $s2, -0x870
/* 0BB28C 800BA68C 3C12803B */ lui $s2, %hi(gSynthesisReverbs) # $s2, 0x803b
/* 0BB290 800BA690 2652F790 */ addiu $s2, %lo(gSynthesisReverbs) # addiu $s2, $s2, -0x870
/* 0BB294 800BA694 19C0005F */ blez $t6, .L800BA814
/* 0BB298 800BA698 0000A825 */ move $s5, $zero
/* 0BB29C 800BA69C 241E0008 */ li $fp, 8

View File

@ -4,8 +4,8 @@
#define SEG_MAIN 0x80000400
#define SEG_80280000 0x80280000
#define SEG_8028DF00 0x8028DF00
#define SEG_802BA370 0x802BA370
#define SEG_FRAMEBUFFERS 0x802BA290
#define SEG_AUDIO 0x803AF790
#define SEG_802BA370 0x802BA370
#define SEG_AUDIO 0x803AF780
#endif

25
mk64.ld
View File

@ -300,14 +300,8 @@ SECTIONS
_mainSegmentNoloadSizeHi = _mainSegmentNoloadSize >> 16;
_mainSegmentNoloadSizeLo = _mainSegmentNoloadSize & 0xFFFF;
. = SEG_FRAMEBUFFERS;
BEGIN_NOLOAD(framebuffers)
{
BUILD_DIR/src/framebuffers.o(.bss*);
}
END_NOLOAD(framebuffers)
/* 0x8028DF00 0F7510-123640 [2C130] */
BEGIN_SEG(code_8028DF00, SEG_8028DF00)
@ -334,6 +328,9 @@ SECTIONS
BUILD_DIR/src/code_8028DF00.o(.bss);
BUILD_DIR/asm/bss_8028DF00.o(.bss);
BUILD_DIR/src/memory.o(.bss);
BUILD_DIR/src/framebuffers.o(.bss*);
BUILD_DIR/src/audio/synthesis.o(.bss*);
BUILD_DIR/asm/bss_audio.o(.bss*);
BUILD_DIR/asm/bss_sptask_audio.o(.bss);
}
END_NOLOAD(code_8028DF00)
@ -343,12 +340,8 @@ SECTIONS
_code_8028DF00SegmentNoloadSizeHi = _code_8028DF00SegmentNoloadSize >> 16;
_code_8028DF00SegmentNoloadSizeLo = _code_8028DF00SegmentNoloadSize & 0xFFFF;
. = SEG_AUDIO;
BEGIN_NOLOAD(audio)
{
BUILD_DIR/src/audio/synthesis.o(.bss*);
}
END_NOLOAD(audio)
/* 0x80280000 123640-12AAE0 [74A0] */
@ -417,10 +410,10 @@ SECTIONS
END_SEG(other_textures)
/* 0x802BA370 724220-729A30 [0x5810] */
BEGIN_SEG(data_802BA370, 0x802BA370)
BEGIN_SEG(data_802BA370, SEG_802BA370)
{
BUILD_DIR/src/math_util.o(.data);
. = ALIGN(0x10);
BUILD_DIR/src/math_util.o(.data);
. = ALIGN(0x10);
}
END_SEG(data_802BA370)

View File

@ -284,7 +284,7 @@ GLOBAL_ASM("asm/non_matchings/audio/load/func_800BAD0C.s")
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
s32 func_800B8FFC(? *, s32, u32); // extern
extern ? D_803AFBE8;
extern ? D_803BFBE8;
extern ? D_803B6758;
extern u32 D_803B6E58;
extern u32 D_803B6E5C;
@ -341,7 +341,7 @@ void func_800BB030(s32 arg0, u32 arg2) {
phi_s0_3 = 0;
if ((D_803B70B0 * 3 * D_803B7088) > 0) {
loop_1:
temp_v0 = func_800B8FFC(&D_803AFBE8, phi_a1, phi_a2);
temp_v0 = func_800B8FFC(&D_803BFBE8, phi_a1, phi_a2);
temp_a2 = D_803B6E58;
temp_v1 = &D_803B6758 + (temp_a2 * 0x10);
temp_v1->unk0 = temp_v0;
@ -397,7 +397,7 @@ loop_1:
if (D_803B70B0 > 0) {
phi_a1_2 = 0x180;
loop_13:
temp_v0_3 = func_800B8FFC(&D_803AFBE8, phi_a1_2, D_803B6E58);
temp_v0_3 = func_800B8FFC(&D_803BFBE8, phi_a1_2, D_803B6E58);
temp_a2_3 = D_803B6E58;
temp_s0_3 = phi_s0_3 + 1;
temp_v1_2 = &D_803B6758 + (temp_a2_3 * 0x10);
@ -460,7 +460,7 @@ GLOBAL_ASM("asm/non_matchings/audio/load/func_800BB030.s")
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
s32 func_800B8FFC(? *, s32, void *); // extern
? func_800BAA80(s32, s32, s32, void *); // extern
extern ? D_803AFBE8;
extern ? D_803BFBE8;
void func_800BB304(void *arg0) {
s32 sp1C;
@ -479,7 +479,7 @@ void func_800BB304(void *arg0) {
if (temp_a3->unk1 == 1) {
temp_a1 = temp_a3->unk10;
arg0 = temp_a3;
temp_v0 = func_800B8FFC(&D_803AFBE8, temp_a1, temp_a3);
temp_v0 = func_800B8FFC(&D_803BFBE8, temp_a1, temp_a3);
temp_a3_2 = arg0;
temp_a1_2 = temp_v0;
if (temp_v0 == 0) {
@ -576,7 +576,7 @@ GLOBAL_ASM("asm/non_matchings/audio/load/func_800BB43C.s")
//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
s32 func_800B8FFC(? *, s32, s32); // extern
? func_800BAA80(s32, s32, s32, s32); // extern
extern ? D_803AFBE8;
extern ? D_803BFBE8;
void func_800BB484(void **arg0, s32 arg1, s32 arg2) {
void *sp2C;
@ -604,7 +604,7 @@ void func_800BB484(void **arg0, s32 arg1, s32 arg2) {
temp_a3_2 = temp_a3->unk4 + arg2;
sp28 = temp_a3_2;
sp2C = temp_a3;
temp_v0_2 = func_800B8FFC(&D_803AFBE8, temp_a3->unk10, temp_a3_2);
temp_v0_2 = func_800B8FFC(&D_803BFBE8, temp_a3->unk10, temp_a3_2);
if (temp_v0_2 == 0) {
temp_a3->unk4 = temp_a3_2;
temp_a3->unk1 = 1;

View File

@ -50,6 +50,11 @@ u64 *final_resample(u64 *cmd, struct NoteSynthesisState *synthesisState, s32 cou
u64 *process_envelope(u64 *cmd, struct NoteSubEu *noteSubEu, struct NoteSynthesisState *synthesisState, s32 nSamples, u16 inBuf, s32 headsetPanSettings, u32 flags);
u64 *note_apply_headset_pan_effects(u64 *cmd, struct NoteSubEu *noteSubEu, struct NoteSynthesisState *note, s32 bufLen, s32 flags, s32 leftRight);
u64 gGfxSPTaskOutputBuffer[0x3F00];
u32 gGfxSPTaskOutputBufferSize;
u32 padding3[2];
struct SynthesisReverb gSynthesisReverbs[4];
u8 sAudioSynthesisPad[0x10];
s16 gVolume;
@ -60,10 +65,10 @@ struct NoteSubEu *gNoteSubsEu;
extern struct Note *D_803B7088;
extern s32 D_803B70B0;
f32 gLeftVolRampings[3][1024];
f32 gRightVolRampings[3][1024];
f32 *gCurrentLeftVolRamping; // Points to any of the three left buffers above
f32 *gCurrentRightVolRamping; // Points to any of the three right buffers above
f32 gLeftVolRampings;
//f32 gRightVolRampings[3][1024];
//f32 *gCurrentLeftVolRamping; // Points to any of the three left buffers above
//f32 *gCurrentRightVolRamping; // Points to any of the three right buffers above
u8 audioString1[] = "pitch %x: delaybytes %d : olddelay %d\n";
u8 audioString2[] = "cont %x: delaybytes %d : olddelay %d\n";

View File

@ -50,10 +50,10 @@ struct SynthesisReverb {
extern struct SynthesisReverb gSynthesisReverbs[4];
extern s8 gNumSynthesisReverbs;
extern struct NoteSubEu *gNoteSubsEu;
extern f32 gLeftVolRampings[3][1024];
extern f32 gRightVolRampings[3][1024];
extern f32 *gCurrentLeftVolRamping; // Points to any of the three left buffers above
extern f32 *gCurrentRightVolRamping; // Points to any of the three right buffers above
extern f32 gLeftVolRampings;
//extern f32 gRightVolRampings[3][1024];
//extern f32 *gCurrentLeftVolRamping; // Points to any of the three left buffers above
//extern f32 *gCurrentRightVolRamping; // Points to any of the three right buffers above
u64 *synthesis_execute(u64 *cmdBuf, s32 *writtenCmds, s16 *aiBuf, s32 bufLen);

View File

@ -2,8 +2,10 @@
#include "config.h"
u8 D_802BA290[224];
u8 frameBufferPadding[22544];
u8 D_802BA290[22768];
u8 D_802BFB80[77824];
u8 D_802D2B80[32768]; // Luigi raceway course path ghost

View File

@ -31,7 +31,6 @@ struct MainPoolBlock {
extern uintptr_t gSegmentTable[16];
extern s32 D_801502A0;
s32 D_802BA270;
s32 D_802BA274;