Attempt to decompile amgrHandleFrameMsg

This commit is contained in:
Ryan Dwyer 2021-01-28 17:07:14 +10:00
parent 6f97111aae
commit 4a514d3b69
14 changed files with 116 additions and 34 deletions

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -8,6 +8,5 @@ u32 amgrCreate(void);
void amgrStartThread(void);
OSMesgQueue *amgr0009118(void);
void amgrStopThread(void);
u32 amgrHandleFrameMsg(void);
#endif

View File

@ -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);

View File

@ -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);

View File

@ -3,6 +3,4 @@
#include <ultra64.h>
#include "types.h"
u32 func0004e3c0(void);
#endif

View File

@ -1,5 +1,6 @@
#include <ultra64.h>
#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;

View File

@ -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)

View File

@ -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)

View File

@ -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)