1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-03 22:44:30 +00:00

Name rsp ucodes and surrounding cleanup (#1166)

* Name rsp ucodes and surrounding cleanup

* Fix comments alignment and remove unnecessary & in sys_ucode

* Change capitalization of sys_ucode variables

* Remove unnecessary externs for aspMain

* Improvements to Jpeg_ScheduleDecoderTask

* Split unknown rsp code into a separate file, spacing
This commit is contained in:
Tharo 2022-05-03 23:43:09 +01:00 committed by GitHub
parent 912b916875
commit 765cfd63e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 173 additions and 127 deletions

View file

@ -35,9 +35,6 @@ AudioTask* func_800E4FE0(void) {
return func_800E5000();
}
extern u64 rspAspMainDataStart[];
extern u64 rspAspMainDataEnd[];
AudioTask* func_800E5000(void) {
static s32 sMaxAbiCmdCnt = 0x80;
static AudioTask* sWaitingAudioTask = NULL;
@ -178,12 +175,12 @@ AudioTask* func_800E5000(void) {
task = &gAudioContext.currTask->task.t;
task->type = M_AUDTASK;
task->flags = 0;
task->ucode_boot = D_801120C0;
task->ucode_boot_size = 0x1000;
task->ucode_data_size = ((rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64)) - 1;
task->ucode = D_801120C0;
task->ucode_data = rspAspMainDataStart;
task->ucode_size = 0x1000;
task->ucode_boot = aspMainTextStart;
task->ucode_boot_size = SP_UCODE_SIZE;
task->ucode_data_size = (size_t)(aspMainDataEnd - aspMainDataStart) * sizeof(u64) - 1;
task->ucode = aspMainTextStart;
task->ucode_data = aspMainDataStart;
task->ucode_size = SP_UCODE_SIZE;
task->dram_stack = NULL;
task->dram_stack_size = 0;
task->output_buff = NULL;

View file

@ -11,15 +11,15 @@ CfbInfo sGraphCfbInfos[3];
FaultClient sGraphUcodeFaultClient;
UCodeInfo D_8012D230[3] = {
{ UCODE_F3DZEX, D_80155F50 },
{ UCODE_F3DZEX, gspF3DZEX2_NoN_PosLight_fifoTextStart },
{ UCODE_UNK, NULL },
{ UCODE_S2DEX, D_80113070 },
{ UCODE_S2DEX, gspS2DEX2d_fifoTextStart },
};
UCodeInfo D_8012D248[3] = {
{ UCODE_F3DZEX, D_80155F50 },
{ UCODE_F3DZEX, gspF3DZEX2_NoN_PosLight_fifoTextStart },
{ UCODE_UNK, NULL },
{ UCODE_S2DEX, D_80113070 },
{ UCODE_S2DEX, gspS2DEX2d_fifoTextStart },
};
void Graph_FaultClient(void) {
@ -38,7 +38,7 @@ void Graph_DisassembleUCode(Gfx* workBuf) {
UCodeDisas_Init(&disassembler);
disassembler.enableLog = HREG(83);
UCodeDisas_RegisterUCode(&disassembler, ARRAY_COUNT(D_8012D230), D_8012D230);
UCodeDisas_SetCurUCode(&disassembler, D_80155F50);
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_PosLight_fifoTextStart);
UCodeDisas_Disassemble(&disassembler, workBuf);
HREG(93) = disassembler.dlCnt;
HREG(84) = disassembler.tri2Cnt * 2 + disassembler.tri1Cnt + (disassembler.quadCnt * 2) + disassembler.lineCnt;
@ -72,7 +72,7 @@ void Graph_UCodeFaultClient(Gfx* workBuf) {
UCodeDisas_Init(&disassembler);
disassembler.enableLog = true;
UCodeDisas_RegisterUCode(&disassembler, ARRAY_COUNT(D_8012D248), D_8012D248);
UCodeDisas_SetCurUCode(&disassembler, D_80155F50);
UCodeDisas_SetCurUCode(&disassembler, gspF3DZEX2_NoN_PosLight_fifoTextStart);
UCodeDisas_Disassemble(&disassembler, workBuf);
UCodeDisas_Destroy(&disassembler);
}
@ -200,21 +200,21 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
task->ucode_boot_size = SysUcode_GetUCodeBootSize();
task->ucode = SysUcode_GetUCode();
task->ucode_data = SysUcode_GetUCodeData();
task->ucode_size = 0x1000;
task->ucode_data_size = 0x800;
task->dram_stack = (u64*)gGfxSPTaskStack;
task->ucode_size = SP_UCODE_SIZE;
task->ucode_data_size = SP_UCODE_DATA_SIZE;
task->dram_stack = gGfxSPTaskStack;
task->dram_stack_size = sizeof(gGfxSPTaskStack);
task->output_buff = gGfxSPTaskOutputBuffer;
task->output_buff_size = (u64*)((u8*)gGfxSPTaskOutputBuffer + sizeof(gGfxSPTaskOutputBuffer));
task->output_buff_size = gGfxSPTaskOutputBuffer + ARRAY_COUNT(gGfxSPTaskOutputBuffer);
task->data_ptr = (u64*)gfxCtx->workBuffer;
OPEN_DISPS(gfxCtx, "../graph.c", 828);
task->data_size = (u32)WORK_DISP - (u32)gfxCtx->workBuffer;
task->data_size = (uintptr_t)WORK_DISP - (uintptr_t)gfxCtx->workBuffer;
CLOSE_DISPS(gfxCtx, "../graph.c", 830);
{ s32 pad2; } // Necessary to match stack usage
task->yield_data_ptr = (u64*)gGfxSPTaskYieldBuffer;
task->yield_data_ptr = gGfxSPTaskYieldBuffer;
task->yield_data_size = sizeof(gGfxSPTaskYieldBuffer);
scTask->next = NULL;

View file

@ -1,20 +1,20 @@
#include "global.h"
u32 D_8012DBA0 = (u32)&D_80155F50;
u32 D_8012DBA4 = (u32)&D_80157580;
u64* sDefaultGSPUCodeText = gspF3DZEX2_NoN_PosLight_fifoTextStart;
u64* sDefaultGSPUCodeData = gspF3DZEX2_NoN_PosLight_fifoDataStart;
u32 SysUcode_GetUCodeBoot(void) {
return &D_80009320;
u64* SysUcode_GetUCodeBoot(void) {
return rspbootTextStart;
}
u32 SysUcode_GetUCodeBootSize(void) {
return (u32)&D_800093F0 - (u32)&D_80009320;
size_t SysUcode_GetUCodeBootSize(void) {
return (size_t)((u8*)rspbootTextEnd - (u8*)rspbootTextStart);
}
u32 SysUcode_GetUCode(void) {
return D_8012DBA0;
u64* SysUcode_GetUCode(void) {
return sDefaultGSPUCodeText;
}
u32 SysUcode_GetUCodeData(void) {
return D_8012DBA4;
u64* SysUcode_GetUCodeData(void) {
return sDefaultGSPUCodeData;
}

View file

@ -18,47 +18,47 @@
* Configures and schedules a JPEG decoder task and waits for it to finish.
*/
void Jpeg_ScheduleDecoderTask(JpegContext* ctx) {
static OSTask_t sJpegTask = {
M_NJPEGTASK, // type
0, // flags
NULL, // ucode_boot
0, // ucode_boot_size
gJpegUCode, // ucode
0x1000, // ucode_size
gJpegUCodeData, // ucode_data
0x800, // ucode_data_size
NULL, // dram_stack
0, // dram_stack_size
NULL, // output_buff
NULL, // output_buff_size
NULL, // data_ptr
sizeof(JpegTaskData), // data_size
NULL, // yield_data_ptr
0x200, // yield_data_size
static OSTask sJpegTask = {
M_NJPEGTASK, // type
0, // flags
NULL, // ucode_boot
0, // ucode_boot_size
njpgdspMainTextStart, // ucode
SP_UCODE_SIZE, // ucode_size
njpgdspMainDataStart, // ucode_data
SP_UCODE_DATA_SIZE, // ucode_data_size
NULL, // dram_stack
0, // dram_stack_size
NULL, // output_buff
NULL, // output_buff_size
NULL, // data_ptr
sizeof(JpegTaskData), // data_size
NULL, // yield_data_ptr
sizeof(ctx->workBuf->yieldData), // yield_data_size
};
JpegWork* workBuf = ctx->workBuf;
s32 pad[2];
workBuf->taskData.address = PHYSICAL_TO_VIRTUAL(&workBuf->data);
workBuf->taskData.address = VIRTUAL_TO_PHYSICAL(&workBuf->data);
workBuf->taskData.mode = ctx->mode;
workBuf->taskData.mbCount = 4;
workBuf->taskData.qTableYPtr = PHYSICAL_TO_VIRTUAL(&workBuf->qTableY);
workBuf->taskData.qTableUPtr = PHYSICAL_TO_VIRTUAL(&workBuf->qTableU);
workBuf->taskData.qTableVPtr = PHYSICAL_TO_VIRTUAL(&workBuf->qTableV);
workBuf->taskData.qTableYPtr = VIRTUAL_TO_PHYSICAL(&workBuf->qTableY);
workBuf->taskData.qTableUPtr = VIRTUAL_TO_PHYSICAL(&workBuf->qTableU);
workBuf->taskData.qTableVPtr = VIRTUAL_TO_PHYSICAL(&workBuf->qTableV);
sJpegTask.flags = 0;
sJpegTask.ucode_boot = SysUcode_GetUCodeBoot();
sJpegTask.ucode_boot_size = SysUcode_GetUCodeBootSize();
sJpegTask.yield_data_ptr = (u64*)&workBuf->yieldData;
sJpegTask.data_ptr = (u64*)&workBuf->taskData;
sJpegTask.t.flags = 0;
sJpegTask.t.ucode_boot = SysUcode_GetUCodeBoot();
sJpegTask.t.ucode_boot_size = SysUcode_GetUCodeBootSize();
sJpegTask.t.yield_data_ptr = workBuf->yieldData;
sJpegTask.t.data_ptr = (u64*)&workBuf->taskData;
ctx->scTask.next = NULL;
ctx->scTask.flags = OS_SC_NEEDS_RSP;
ctx->scTask.msgQueue = &ctx->mq;
ctx->scTask.msg = NULL;
ctx->scTask.framebuffer = NULL;
ctx->scTask.list.t = sJpegTask;
ctx->scTask.list = sJpegTask;
osSendMesg(&gSchedContext.cmdQueue, (OSMesg)&ctx->scTask, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext); // osScKickEntryMsg

View file

@ -336,8 +336,7 @@ void func_80096680(GlobalContext* globalCtx, Room* room, u32 flags) {
}
if (drawBg) {
// gSPLoadUcodeL(POLY_OPA_DISP++, rspS2DEX)?
gSPLoadUcodeEx(POLY_OPA_DISP++, OS_K0_TO_PHYSICAL(D_80113070), OS_K0_TO_PHYSICAL(D_801579A0), 0x800);
gSPLoadUcodeL(POLY_OPA_DISP++, gspS2DEX2d_fifo);
{
Vec3f sp60;
@ -350,8 +349,7 @@ void func_80096680(GlobalContext* globalCtx, Room* room, u32 flags) {
POLY_OPA_DISP = spA8;
}
// gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData())?
gSPLoadUcodeEx(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData(), 0x800);
gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
}
}
@ -432,8 +430,7 @@ void func_80096B6C(GlobalContext* globalCtx, Room* room, u32 flags) {
}
if (drawBg) {
// gSPLoadUcodeL(POLY_OPA_DISP++, rspS2DEX)?
gSPLoadUcodeEx(POLY_OPA_DISP++, OS_K0_TO_PHYSICAL(D_80113070), OS_K0_TO_PHYSICAL(D_801579A0), 0x800);
gSPLoadUcodeL(POLY_OPA_DISP++, gspS2DEX2d_fifo);
{
Vec3f skyboxOffset;
@ -447,8 +444,7 @@ void func_80096B6C(GlobalContext* globalCtx, Room* room, u32 flags) {
POLY_OPA_DISP = gfx;
}
// gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData())?
gSPLoadUcodeEx(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData(), 0x800);
gSPLoadUcode(POLY_OPA_DISP++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
}
}