mirror of https://github.com/zeldaret/mm.git
match CIC6105.c
This commit is contained in:
parent
18a8a1bea7
commit
2685495648
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "ultra64.h"
|
||||
|
||||
#include "versions.h"
|
||||
|
||||
// IPL3 puts values in those addresses as part of the anti-piracy checks
|
||||
#define CIC_ADDRESS_1 0x002FB1F4
|
||||
#define CIC_ADDRESS_2 0x002FE1C0
|
||||
|
|
@ -15,6 +17,10 @@ void CIC6105_AddRomInfoFaultPage(void);
|
|||
void CIC6105_Destroy(void);
|
||||
void CIC6105_Init(void);
|
||||
|
||||
#if MM_VERSION <= N64_JP_1_1
|
||||
void func_80081980_unknown(void);
|
||||
#endif
|
||||
|
||||
extern s32 gCICAddr1Val;
|
||||
extern s32 gCICAddr2Val;
|
||||
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@
|
|||
#define M_AUDTASK 2
|
||||
#define M_VIDTASK 3
|
||||
#define M_NJPEGTASK 4
|
||||
#define M_CICTASK 4
|
||||
#define M_HVQTASK 6
|
||||
#define M_HVQMTASK 7
|
||||
|
||||
|
|
|
|||
|
|
@ -2,23 +2,61 @@
|
|||
|
||||
#include "build.h"
|
||||
#include "fault.h"
|
||||
#include "macros.h"
|
||||
#include "regs.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
#pragma increment_block_number "n64-us:200"
|
||||
|
||||
s32 gCICAddr1Val;
|
||||
s32 gCICAddr2Val;
|
||||
FaultClient sRomInfoFaultClient;
|
||||
#if MM_VERSION <= N64_JP_1_1
|
||||
s32 gCICValue1;
|
||||
s32 gCICValue2;
|
||||
|
||||
s32 func_80081A54_unknown(void);
|
||||
#endif
|
||||
|
||||
void CIC6105_Noop1(void) {
|
||||
#if MM_VERSION < N64_US
|
||||
SREG(20) = 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CIC6105_Noop2(void) {
|
||||
#if MM_VERSION < N64_US
|
||||
SREG(20) = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CIC6105_PrintRomInfo(void) {
|
||||
#if MM_VERSION >= N64_US
|
||||
FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", IO_READ(SP_STATUS_REG));
|
||||
FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", gBuildCreator);
|
||||
FaultDrawer_DrawText(56, 192, "[Date:%s]", gBuildDate);
|
||||
#else
|
||||
u32 status = IO_READ(SP_STATUS_REG);
|
||||
|
||||
FaultDrawer_SetCursor(0x30, 0xC8);
|
||||
if (status & SP_STATUS_SIG7) {
|
||||
FaultDrawer_Printf("OCARINA %08x %08x", gCICValue1, gCICValue2);
|
||||
} else {
|
||||
FaultDrawer_Printf("LEGEND %08x %08x", gCICValue1, gCICValue2);
|
||||
}
|
||||
FaultDrawer_SetCursor(0x28, 0xB8);
|
||||
FaultDrawer_Printf("ROM_F");
|
||||
FaultDrawer_Printf(" [Creator:%s]", gBuildCreator);
|
||||
FaultDrawer_SetCursor(0x38, 0xC0);
|
||||
FaultDrawer_Printf("[Date:%s]", gBuildDate);
|
||||
FaultDrawer_SetCursor(0x60, 0x20);
|
||||
FaultDrawer_Printf("I LOVE YOU %08x", func_80081A54_unknown());
|
||||
|
||||
{
|
||||
// TODO: where to put this?
|
||||
static const char unused[] = "flag:%08x data:%08x\n";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CIC6105_AddRomInfoFaultPage(void) {
|
||||
|
|
@ -29,6 +67,60 @@ void CIC6105_Destroy(void) {
|
|||
Fault_RemoveClient(&sRomInfoFaultClient);
|
||||
}
|
||||
|
||||
extern Scheduler B_801F85E0_unknown;
|
||||
extern OSMesgQueue B_801F86F8_unknown;
|
||||
|
||||
#if MM_VERSION <= N64_JP_1_1
|
||||
extern u64 cic6105TextStart[];
|
||||
|
||||
void func_80081980_unknown(void) {
|
||||
// TODO: do something with the hardcoded sizes
|
||||
static OSTask D_80097AA0_unknown = {
|
||||
M_CICTASK, // type
|
||||
0, // flags
|
||||
rspbootTextStart, // ucode_boot
|
||||
0x000003E8, // ucode_boot_size
|
||||
cic6105TextStart, // ucode
|
||||
0x00000020, // ucode_size
|
||||
(u64*)gBuildCreator, // ucode_data
|
||||
0x00000008, // ucode_data_size
|
||||
NULL, // dram_stack
|
||||
0x00000000, // dram_stack_size
|
||||
NULL, // output_buff
|
||||
NULL, // output_buff_size
|
||||
NULL, // data_ptr
|
||||
0x00000000, // data_size
|
||||
NULL, // yield_data_ptr
|
||||
0x00000000, // yield_data_size
|
||||
};
|
||||
|
||||
OSScTask task;
|
||||
OSMesgQueue queue;
|
||||
OSMesg msg[1];
|
||||
|
||||
osCreateMesgQueue(&queue, msg, ARRAY_COUNT(msg));
|
||||
|
||||
task.next = NULL;
|
||||
task.flags = OS_SC_NEEDS_RSP;
|
||||
task.msgQ = &queue;
|
||||
task.msg = (OSMesg)0;
|
||||
task.framebuffer = NULL;
|
||||
task.list = D_80097AA0_unknown;
|
||||
osSendMesg(&B_801F86F8_unknown, &task, OS_MESG_BLOCK);
|
||||
|
||||
Sched_SendNotifyMsg(&B_801F85E0_unknown);
|
||||
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
gCICValue1 = IO_READ(SP_DMEM_START + 0xFF4);
|
||||
gCICValue2 = IO_READ(SP_DMEM_START + 0xFFC);
|
||||
func_80081A54_unknown();
|
||||
}
|
||||
|
||||
s32 func_80081A54_unknown(void) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void CIC6105_Init(void) {
|
||||
gCICAddr1Val = IO_READ(CIC_ADDRESS_1);
|
||||
gCICAddr2Val = IO_READ(CIC_ADDRESS_2);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ extern u64 njpgdspMainDataStart[];
|
|||
* Configures and schedules a JPEG decoder task and waits for it to finish.
|
||||
*/
|
||||
void Jpeg_ScheduleDecoderTask(JpegContext* jpegCtx) {
|
||||
static OSTask_t sJpegTask = {
|
||||
static OSTask sJpegTask = {
|
||||
M_NJPEGTASK, // type
|
||||
0, // flags
|
||||
NULL, // ucode_boot
|
||||
|
|
@ -54,18 +54,18 @@ void Jpeg_ScheduleDecoderTask(JpegContext* jpegCtx) {
|
|||
workBuf->taskData.qTableUPtr = &workBuf->qTableU;
|
||||
workBuf->taskData.qTableVPtr = &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 = (u64*)&workBuf->yieldData;
|
||||
sJpegTask.t.data_ptr = (u64*)&workBuf->taskData;
|
||||
|
||||
jpegCtx->scTask.next = NULL;
|
||||
jpegCtx->scTask.flags = OS_SC_NEEDS_RSP;
|
||||
jpegCtx->scTask.msgQ = &jpegCtx->mq;
|
||||
jpegCtx->scTask.msg = NULL;
|
||||
jpegCtx->scTask.framebuffer = NULL;
|
||||
jpegCtx->scTask.list.t = sJpegTask;
|
||||
jpegCtx->scTask.list = sJpegTask;
|
||||
|
||||
osSendMesg(&gScheduler.cmdQueue, (OSMesg*)&jpegCtx->scTask, OS_MESG_BLOCK);
|
||||
Sched_SendNotifyMsg(&gScheduler); // osScKickEntryMsg
|
||||
|
|
|
|||
|
|
@ -385,7 +385,9 @@ sYaz0CurSize = 0x8009D968; // size:0x4
|
|||
sYaz0MaxPtr = 0x8009D96C; // size:0x4
|
||||
gCICAddr1Val = 0x8009D970; // size:0x4
|
||||
gCICAddr2Val = 0x8009D974; // size:0x4
|
||||
sRomInfoFaultClient = 0x8009D978; // size:0x18
|
||||
sRomInfoFaultClient = 0x8009D978; // size:0x10
|
||||
gCICValue1 = 0x8009D988; // size:0x4
|
||||
gCICValue2 = 0x8009D98C; // size:0x4
|
||||
sFaultInstance = 0x8009D990; // size:0x4
|
||||
sFaultTimeTotal = 0x8009D994; // type:f32 size:0x4
|
||||
sFaultCustomOptions = 0x8009D998; // size:0x4
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ sYaz0MaxPtr = 0x8009BE1C; // size:0x4
|
|||
gYaz0DecompressDstEnd = 0x8009BE20; // size:0x4
|
||||
gCICAddr1Val = 0x8009BE30; // size:0x4
|
||||
gCICAddr2Val = 0x8009BE34; // size:0x4
|
||||
sRomInfoFaultClient = 0x8009BE38; // size:0x18
|
||||
sRomInfoFaultClient = 0x8009BE38; // size:0x10
|
||||
sFaultInstance = 0x8009BE50; // size:0x4
|
||||
sFaultTimeTotal = 0x8009BE54; // size:0x4
|
||||
sFaultCustomOptions = 0x8009BE58; // size:0x4
|
||||
|
|
|
|||
Loading…
Reference in New Issue