diff --git a/ld/pd.ld b/ld/pd.ld index 82e2db901..7a7f59442 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -118,6 +118,13 @@ SECTIONS _antipiracyUncloakWriteAddress = 0x7002a324; + rspbootTextStart = 0x80059fe0; + rspbootTextEnd = 0x8005a0b0; + aspMainTextStart = 0x8005b4d0; + aspMainTextEnd = 0x8005c4d0; + aspMainDataStart = 0x8008a2d0; + aspMainDataEnd = 0x8008aad0; + osTvType = 0x80000300; osRomType = 0x80000304; osRomBase = 0x80000308; @@ -129,6 +136,7 @@ SECTIONS var803f50b8 = 0x803f50b8; vara00002e8 = 0xa00002e8; + vara4500004 = 0xa4500004; varbc000c02 = 0xbc000c02; /* for ntsc-beta */ var800902e4 = 0x800902e4; /* for ntsc-beta */ var800902e8 = 0x800902e8; /* for ntsc-beta */ diff --git a/src/game/data/data_000000.c b/src/game/data/data_000000.c index 267120553..6fc6d686a 100644 --- a/src/game/data/data_000000.c +++ b/src/game/data/data_000000.c @@ -13,7 +13,7 @@ #include "stagesetup.h" #include "types.h" -// Assembly +// rspbootTextStart u32 var80059fe0 = 0x09000419; u32 var80059fe4 = 0x20010fc0; u32 var80059fe8 = 0x8c220010; @@ -66,6 +66,8 @@ u32 var8005a0a0 = 0x00000000; u32 var8005a0a4 = 0x09000402; u32 var8005a0a8 = 0x00000000; u32 var8005a0ac = 0x00000000; +// rspbootTextEnd + u32 var8005a0b0 = 0x090005ee; u32 var8005a0b4 = 0x201d0110; u32 var8005a0b8 = 0x0d000447; @@ -1354,6 +1356,8 @@ u32 var8005b4c0 = 0x2400beef; u32 var8005b4c4 = 0x00000000; u32 var8005b4c8 = 0x00000000; u32 var8005b4cc = 0x00000000; + +// aspMainTextStart u32 var8005b4d0 = 0x40055800; u32 var8005b4d4 = 0x8c3c0030; u32 var8005b4d8 = 0x8c3b0034; @@ -2378,6 +2382,8 @@ u32 var8005c4c0 = 0x21cd0220; u32 var8005c4c4 = 0x334c001e; u32 var8005c4c8 = 0x0d00045f; u32 var8005c4cc = 0x2063ffff; +// aspMainTextEnd + u32 var8005c4d0 = 0x20030180; u32 var8005c4d4 = 0x2294fe80; u32 var8005c4d8 = 0x20120180; diff --git a/src/game/data/data_02e820.c b/src/game/data/data_02e820.c index 2a8d4b6d5..d91459221 100644 --- a/src/game/data/data_02e820.c +++ b/src/game/data/data_02e820.c @@ -695,6 +695,8 @@ u32 var8008a2c0 = 0x00000000; u32 var8008a2c4 = 0x00000000; u32 var8008a2c8 = 0x00000000; u32 var8008a2cc = 0x00000000; + +// aspMainDataStart u32 var8008a2d0 = 0x00000000; u32 var8008a2d4 = 0x0f7f1080; u32 var8008a2d8 = 0x00000f80; @@ -1207,6 +1209,8 @@ u32 var8008aac0 = 0x0037ffdc; u32 var8008aac4 = 0x03000163; u32 var8008aac8 = 0x10fd18d1; u32 var8008aacc = 0x735c99ee; +// aspMainDataEnd + u32 var8008aad0 = 0xf613f046; u32 var8008aad4 = 0x0108fdb0; u32 var8008aad8 = 0x0053ffdb; diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index e113f1b85..d7a228531 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -4045,8 +4045,7 @@ u32 var800915b8 = 0; u32 var800915bc = 0; u32 var800915c0 = 0; u32 var800915c4 = 0; -u32 var800915c8 = 0; -u32 var800915cc = 0; +Acmd *var800915c8[2] = {0}; u32 var800915d0 = 0; u32 var800915d4 = 0; u32 var800915d8 = 0; @@ -4098,12 +4097,7 @@ u32 var80091838 = 0; u32 var8009183c = 0; u32 var80091840 = 0; u32 var80091844 = 0; -u32 var80091848 = 0; -u32 var8009184c = 0; -u32 var80091850 = 0; -u32 var80091854 = 0; -u32 var80091858 = 0; -u32 var8009185c = 0; +OSMesgQueue var80091848 = {0}; u32 var80091860 = 0; u32 var80091864 = 0; u32 var80091868 = 0; @@ -4138,10 +4132,10 @@ u32 var800918d8 = 0; u32 var800918dc = 0; u32 var800918e0 = 0; u32 var800918e4 = 0; -u32 var800918e8 = 0; +s32 var800918e8 = 0; u32 var800918ec = 0; void *g_AudioSp = NULL; -u32 var800918f4 = 0; +u32 g_AmgrCurrentCmdList = 0; u32 var800918f8 = 0; u32 var800918fc = 0; u32 var80091900 = 0; diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index f3d7c4237..b9fdd5edc 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -63,7 +63,7 @@ extern u32 var8005cf6c; extern u32 __osGlobalIntMask; extern u32 var8005cf84; extern u32 var8005cf90; -extern u32 var8005cf94; +extern u8 var8005cf94; extern u32 var8005cf98; extern u32 var8005cfc0; extern u32 var8005cfe8; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 24a1b0d50..f63e2adc0 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -371,20 +371,22 @@ extern u32 var80091568; extern u32 var80091580; extern u32 var80091588; extern u32 var80091590; -extern u32 var800915c8; +extern Acmd *var800915c8[2]; extern u32 var800915d0; extern u32 var800915d4; extern OSThread g_AudioThread; extern u32 var80091810; extern u32 var80091828; -extern u32 var80091848; +extern OSMesgQueue var80091848; extern u32 var80091860; extern u32 var80091880; extern u32 var800918d0; +extern u32 var800918dc; extern u32 var800918e0; -extern u32 var800918e8; +extern s32 var800918e8; extern u32 var800918ec; extern void *g_AudioSp; +extern OSScTask *g_AmgrCurrentCmdList; extern u32 var80091900; extern u32 var80091910; extern u32 var80091924; diff --git a/src/include/lib/lib_08a20.h b/src/include/lib/lib_08a20.h index d653fc0d0..3913ddbb3 100644 --- a/src/include/lib/lib_08a20.h +++ b/src/include/lib/lib_08a20.h @@ -8,6 +8,5 @@ u32 amgrCreate(void); void amgrStartThread(void); OSMesgQueue *amgr0009118(void); void amgrStopThread(void); -u32 amgrHandleFrameMsg(void); #endif diff --git a/src/include/lib/lib_09660.h b/src/include/lib/lib_09660.h index 9b255cce5..79001cda0 100644 --- a/src/include/lib/lib_09660.h +++ b/src/include/lib/lib_09660.h @@ -4,7 +4,7 @@ #include "types.h" u32 func00009660(void); -u32 func0000993c(void); +void amgrClearDmaBuffers(void); u32 func00009a08(void); void func00009a80(void); void func00009a88(void); diff --git a/src/include/lib/lib_30ce0.h b/src/include/lib/lib_30ce0.h index 7e9672816..568b4e706 100644 --- a/src/include/lib/lib_30ce0.h +++ b/src/include/lib/lib_30ce0.h @@ -4,7 +4,7 @@ #include "types.h" u32 func00030ce0(void); -u32 func000312e4(void); +Acmd *alAudioFrame(Acmd *cmdList, s32 *cmdLen, s16 *outBuf, s32 outLen); u32 func00031504(void); u32 func00031564(void); u32 func00031590(void); diff --git a/src/include/lib/lib_4e3c0.h b/src/include/lib/lib_4e3c0.h index 2d2a9be76..b16efad8a 100644 --- a/src/include/lib/lib_4e3c0.h +++ b/src/include/lib/lib_4e3c0.h @@ -3,6 +3,4 @@ #include #include "types.h" -u32 func0004e3c0(void); - #endif diff --git a/src/lib/lib_08a20.c b/src/lib/lib_08a20.c index c943babd6..898414c3b 100644 --- a/src/lib/lib_08a20.c +++ b/src/lib/lib_08a20.c @@ -1,5 +1,6 @@ #include #include "boot/init.h" +#include "boot/sched.h" #include "constants.h" #include "game/data/data_000000.h" #include "game/data/data_0083d0.h" @@ -23,7 +24,7 @@ #include "types.h" u32 var8005cf90 = 0x00000000; -u32 var8005cf94 = 0x01000000; +u8 var8005cf94 = 1; u32 var8005cf98 = 0x00000001; u32 var8005cf9c = 0x000014a0; u32 var8005cfa0 = 0x00000000; @@ -379,7 +380,7 @@ u32 var8005d514 = 0x00000001; struct audioinfo { s16 *data; - s16 frameSamples; + s16 framesamples; OSScTask task; }; @@ -1075,8 +1076,8 @@ glabel amgrMain GLOBAL_ASM( glabel amgrHandleFrameMsg -/* 9448: 3c068009 */ lui $a2,%hi(var800918f4) -/* 944c: 8cc618f4 */ lw $a2,%lo(var800918f4)($a2) +/* 9448: 3c068009 */ lui $a2,%hi(g_AmgrCurrentCmdList) +/* 944c: 8cc618f4 */ lw $a2,%lo(g_AmgrCurrentCmdList)($a2) /* 9450: 27bdffd0 */ addiu $sp,$sp,-48 /* 9454: afb00018 */ sw $s0,0x18($sp) /* 9458: 00808025 */ or $s0,$a0,$zero @@ -1084,13 +1085,13 @@ glabel amgrHandleFrameMsg /* 9460: 10c00007 */ beqz $a2,.L00009480 /* 9464: afa50034 */ sw $a1,0x34($sp) /* 9468: 3c048009 */ lui $a0,%hi(g_SchedThread) -/* 946c: 3c018009 */ lui $at,%hi(var800918f4) -/* 9470: ac2618f4 */ sw $a2,%lo(var800918f4)($at) +/* 946c: 3c018009 */ lui $at,%hi(g_AmgrCurrentCmdList) +/* 9470: ac2618f4 */ sw $a2,%lo(g_AmgrCurrentCmdList)($at) /* 9474: 2484dbd0 */ addiu $a0,$a0,%lo(g_SchedThread) /* 9478: 0c0007ea */ jal __scHandleRetraceViaPri /* 947c: 00c02825 */ or $a1,$a2,$zero .L00009480: -/* 9480: 0c00264f */ jal func0000993c +/* 9480: 0c00264f */ jal amgrClearDmaBuffers /* 9484: 00000000 */ nop /* 9488: 3c198006 */ lui $t9,%hi(var8005cf90) /* 948c: 8f39cf90 */ lw $t9,%lo(var8005cf90)($t9) @@ -1113,7 +1114,7 @@ glabel amgrHandleFrameMsg /* 94d0: 8c640000 */ lw $a0,0x0($v1) /* 94d4: afa20028 */ sw $v0,0x28($sp) /* 94d8: 00055080 */ sll $t2,$a1,0x2 -/* 94dc: 0c0138f0 */ jal func0004e3c0 +/* 94dc: 0c0138f0 */ jal osAiSetNextBuffer /* 94e0: 01402825 */ or $a1,$t2,$zero /* 94e4: 8fa60028 */ lw $a2,0x28($sp) /* 94e8: 8fab002c */ lw $t3,0x2c($sp) @@ -1145,7 +1146,7 @@ glabel amgrHandleFrameMsg /* 9548: a0780000 */ sb $t8,0x0($v1) .L0000954c: /* 954c: 8fa40024 */ lw $a0,0x24($sp) -/* 9550: 0c00c4b9 */ jal func000312e4 +/* 9550: 0c00c4b9 */ jal alAudioFrame /* 9554: 86070004 */ lh $a3,0x4($s0) /* 9558: 26060008 */ addiu $a2,$s0,0x8 /* 955c: 3c038006 */ lui $v1,%hi(var80059fe0) @@ -1175,7 +1176,7 @@ glabel amgrHandleFrameMsg /* 95bc: accc0024 */ sw $t4,0x24($a2) /* 95c0: accd002c */ sw $t5,0x2c($a2) /* 95c4: 8fae0024 */ lw $t6,0x24($sp) -/* 95c8: 3c018009 */ lui $at,%hi(var800918f4) +/* 95c8: 3c018009 */ lui $at,%hi(g_AmgrCurrentCmdList) /* 95cc: acce0040 */ sw $t6,0x40($a2) /* 95d0: 8faf0024 */ lw $t7,0x24($sp) /* 95d4: acc00048 */ sw $zero,0x48($a2) @@ -1191,11 +1192,81 @@ glabel amgrHandleFrameMsg /* 95fc: 8fb00018 */ lw $s0,0x18($sp) /* 9600: 392a0001 */ xori $t2,$t1,0x1 /* 9604: ac4a0000 */ sw $t2,0x0($v0) -/* 9608: ac2618f4 */ sw $a2,%lo(var800918f4)($at) +/* 9608: ac2618f4 */ sw $a2,%lo(g_AmgrCurrentCmdList)($at) /* 960c: 03e00008 */ jr $ra /* 9610: 27bd0030 */ addiu $sp,$sp,0x30 ); +// Mismatch: +// - Regalloc, likely relating to g_AmgrCurrentCmdList = g_AmgrCurrentCmdList +// - g_AmgrCurrentCmdList needs to be moved into this file +//void amgrHandleFrameMsg(struct audioinfo *info, struct audioinfo *previnfo) +//{ +// u32 somevalue; +// s16 *outbuffer; +// Acmd *datastart; +// Acmd *cmd; +// OSScTask *task; +// static OSScTask *g_AmgrCurrentCmdList; +// +// extern u32 vara4500004; +// extern u8 rspbootTextStart; +// extern u8 rspbootTextEnd; +// extern u8 aspMainTextStart; +// extern u8 aspMainDataStart; +// +// if (g_AmgrCurrentCmdList) { +// g_AmgrCurrentCmdList = g_AmgrCurrentCmdList; +// __scHandleRetraceViaPri(&g_SchedThread, g_AmgrCurrentCmdList); +// } +// +// amgrClearDmaBuffers(); +// +// somevalue = vara4500004 / 4; +// datastart = var800915c8[var8005cf90]; +// outbuffer = (s16 *) osVirtualToPhysical(info->data); +// +// if (previnfo) { +// osAiSetNextBuffer(previnfo->data, previnfo->framesamples * 4); +// } +// +// if (somevalue > 248 && var8005cf94 == 0) { +// info->framesamples = var800918dc; +// var8005cf94 = 2; +// } else { +// info->framesamples = var800918e0; +// +// if (var8005cf94 != 0) { +// var8005cf94--; +// } +// } +// +// cmd = alAudioFrame(datastart, &var800918e8, outbuffer, info->framesamples); +// +// task = &info->task; +// +// task->next = NULL; +// task->msgQ = &var80091848; +// task->msg = info; +// task->flags = OS_SC_NEEDS_RSP; +// task->list.t.type = M_AUDTASK; +// task->list.t.flags = 0; +// task->list.t.ucode_boot = (u64 *) &rspbootTextStart; +// task->list.t.ucode_boot_size = (u32) &rspbootTextEnd - (u32) &rspbootTextStart; +// task->list.t.ucode = (u64 *) &aspMainTextStart; +// task->list.t.ucode_data = (u64 *) &aspMainDataStart; +// task->list.t.ucode_size = SP_UCODE_SIZE; +// task->list.t.ucode_data_size = SP_UCODE_DATA_SIZE; +// task->list.t.data_ptr = (u64 *) datastart; +// task->list.t.data_size = (cmd - datastart) * sizeof(Acmd); +// task->list.t.yield_data_ptr = NULL; +// task->list.t.yield_data_size = 0; +// +// var8005cf90 ^= 1; +// +// g_AmgrCurrentCmdList = task; +//} + void amgrHandleDoneMsg(struct audioinfo *info) { static bool firsttime = true; diff --git a/src/lib/lib_09660.c b/src/lib/lib_09660.c index 0029ec336..a1f3e74bd 100644 --- a/src/lib/lib_09660.c +++ b/src/lib/lib_09660.c @@ -286,7 +286,7 @@ glabel func00009844 ); GLOBAL_ASM( -glabel func0000993c +glabel amgrClearDmaBuffers /* 993c: 27bdffd8 */ addiu $sp,$sp,-40 /* 9940: afb2001c */ sw $s2,0x1c($sp) /* 9944: 3c128009 */ lui $s2,%hi(var80091900) diff --git a/src/lib/lib_30ce0.c b/src/lib/lib_30ce0.c index 557a88c4d..855faf214 100644 --- a/src/lib/lib_30ce0.c +++ b/src/lib/lib_30ce0.c @@ -424,7 +424,7 @@ glabel func00030ce0 ); GLOBAL_ASM( -glabel func000312e4 +glabel alAudioFrame /* 312e4: 27bdffc0 */ addiu $sp,$sp,-64 /* 312e8: afbf001c */ sw $ra,0x1c($sp) /* 312ec: afa40040 */ sw $a0,0x40($sp) diff --git a/src/lib/lib_4e3c0.c b/src/lib/lib_4e3c0.c index 8e4cf3161..00da8e8bd 100644 --- a/src/lib/lib_4e3c0.c +++ b/src/lib/lib_4e3c0.c @@ -12,7 +12,7 @@ #include "types.h" GLOBAL_ASM( -glabel func0004e3c0 +glabel osAiSetNextBuffer /* 4e3c0: 27bdffe0 */ addiu $sp,$sp,-32 /* 4e3c4: 3c0f8006 */ lui $t7,%hi(var80060990) /* 4e3c8: 91ef0990 */ lbu $t7,%lo(var80060990)($t7)