diff --git a/include/cic6105.h b/include/cic6105.h index 78b82ca272..794ada45de 100644 --- a/include/cic6105.h +++ b/include/cic6105.h @@ -3,8 +3,11 @@ #include "ultra64.h" -extern u32 B_80008EE0; +extern s32 B_80008EE0; +void CIC6105_AddFaultClient(void); +void CIC6105_RemoveFaultClient(void); +void func_80001640(void); void func_80001720(void); #endif diff --git a/include/variables.h b/include/variables.h index b25f7f31d8..c7d16e3ae2 100644 --- a/include/variables.h +++ b/include/variables.h @@ -40,9 +40,9 @@ extern OSViContext* __osViCurr; extern OSViContext* __osViNext; extern OSViMode osViModeFpalLan1; extern u32 __additional_scanline; -extern u8 gBuildTeam[]; -extern u8 gBuildDate[]; -extern u8 gBuildMakeOption[]; +extern const char gBuildTeam[]; +extern const char gBuildDate[]; +extern const char gBuildMakeOption[]; extern OSMesgQueue gPiMgrCmdQueue; extern OSViMode gViConfigMode; extern u8 gViConfigModeType; diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c index 2f09bbd778..e67c768755 100644 --- a/src/boot/boot_main.c +++ b/src/boot/boot_main.c @@ -4,6 +4,8 @@ #include "cic6105.h" #endif +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + StackEntry sBootThreadInfo; OSThread sIdleThread; STACK(sIdleThreadStack, 0x400); diff --git a/src/boot/cic6105.c b/src/boot/cic6105.c index 6e5515b931..9cb5c3e393 100644 --- a/src/boot/cic6105.c +++ b/src/boot/cic6105.c @@ -1,3 +1,85 @@ +#include "global.h" #include "cic6105.h" +#include "fault.h" -u32 B_80008EE0; +// TODO N64 fault.c functions +void func_800AE1E0_unknown(s32, s32); +void func_800AE258_unknown(const char*, ...); + +s32 func_80001714(void); + +extern u64 cic6105ucodeTextStart[]; + +OSTask D_800067C0_unknown = { + 4, 0, rspbootTextStart, 0x3E8, cic6105ucodeTextStart, 0x20, (u64*)gBuildTeam, 8, NULL, 0, NULL, 0, NULL, 0, NULL, 0, +}; + +s32 B_80008EE0; +s32 B_80008EE4; +FaultClient sCIC6105FaultClient; +s32 B_80008EF8; +s32 B_80008EFC; + +void func_800014D0(void) { + R_AUDIOMGR_DEBUG_LEVEL = AUDIOMGR_DEBUG_LEVEL_NO_RSP; +} + +void func_800014E8(void) { + R_AUDIOMGR_DEBUG_LEVEL = AUDIOMGR_DEBUG_LEVEL_NONE; +} + +void CIC6105_FaultClient(void) { + s32 spStatus; + + spStatus = IO_READ(SP_STATUS_REG); + func_800AE1E0_unknown(48, 200); + if (spStatus & SP_STATUS_SIG7) { + func_800AE258_unknown("OCARINA %08x %08x", B_80008EF8, B_80008EFC); + } else { + func_800AE258_unknown("LEGEND %08x %08x", B_80008EF8, B_80008EFC); + } + func_800AE1E0_unknown(40, 184); + func_800AE258_unknown("ROM_F"); + func_800AE258_unknown(" [Creator:%s]", gBuildTeam); + func_800AE1E0_unknown(56, 192); + func_800AE258_unknown("[Date:%s]", gBuildDate); + func_800AE1E0_unknown(96, 32); + func_800AE258_unknown("I LOVE YOU %08x", func_80001714()); +} + +void CIC6105_AddFaultClient(void) { + Fault_AddClient(&sCIC6105FaultClient, CIC6105_FaultClient, NULL, NULL); +} + +void CIC6105_RemoveFaultClient(void) { + Fault_RemoveClient(&sCIC6105FaultClient); +} + +void func_80001640(void) { + OSScTask sp38; + OSMesgQueue queue; + OSMesg msg; + + osCreateMesgQueue(&queue, &msg, 1); + sp38.next = NULL; + sp38.flags = OS_SC_NEEDS_RSP; + sp38.msgQueue = &queue; + sp38.msg = (OSMesg)0; + sp38.framebuffer = 0; + sp38.list = D_800067C0_unknown; + osSendMesg(&gScheduler.cmdQueue, &sp38, OS_MESG_BLOCK); + Sched_Notify(&gScheduler); + osRecvMesg(&queue, NULL, 1); + B_80008EF8 = IO_READ(SP_DMEM_START + 0xFF4); + B_80008EFC = IO_READ(SP_DMEM_START + 0xFFC); + func_80001714(); +} + +s32 func_80001714(void) { + return 0; +} + +void func_80001720(void) { + B_80008EE0 = IO_READ(0x002FB1F4); + B_80008EE4 = IO_READ(0x002FE1C0); +} diff --git a/src/boot/yaz0.c b/src/boot/yaz0.c index 8ea1a52959..6e56fbbe36 100644 --- a/src/boot/yaz0.c +++ b/src/boot/yaz0.c @@ -1,5 +1,7 @@ #include "global.h" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + ALIGNED(16) u8 sYaz0DataBuffer[0x400]; u8* sYaz0DataBufferEnd; uintptr_t sYaz0CurRomStart; diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c index bc1a5ca216..c331ea0c83 100644 --- a/src/boot/z_std_dma.c +++ b/src/boot/z_std_dma.c @@ -24,6 +24,8 @@ #include "n64dd.h" #endif +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + StackEntry sDmaMgrStackInfo; OSMesgQueue sDmaMgrMsgQueue; OSMesg sDmaMgrMsgBuf[32]; diff --git a/src/code/game.c b/src/code/game.c index e10d650fbf..7a53acdda8 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -1,6 +1,8 @@ #include "global.h" #include "terminal.h" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + SpeedMeter D_801664D0; VisCvg sVisCvg; VisZBuf sVisZBuf; diff --git a/src/code/graph.c b/src/code/graph.c index 1fffacac5e..747416399b 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -4,6 +4,8 @@ #define GFXPOOL_HEAD_MAGIC 0x1234 #define GFXPOOL_TAIL_MAGIC 0x5678 +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" + /** * The time at which the previous `Graph_Update` ended. */ diff --git a/src/code/main.c b/src/code/main.c index 1b67009cbd..2e46ae825b 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,5 +1,10 @@ #include "global.h" #include "terminal.h" +#include "versions.h" +#if PLATFORM_N64 +#include "cic6105.h" +#include "n64dd.h" +#endif extern u8 _buffersSegmentEnd[]; @@ -52,8 +57,20 @@ void Main(void* arg) { gAppNmiBufferPtr = (PreNmiBuff*)osAppNMIBuffer; PreNmiBuff_Init(gAppNmiBufferPtr); Fault_Init(); +#if PLATFORM_N64 + func_800ADA80(); + if ((u8)B_80121AE1 != 0) { + systemHeapStart = (uintptr_t)&D_801E8090; + SysCfb_Init(1); + } else { + func_800ADAF8(); + systemHeapStart = (uintptr_t)_buffersSegmentEnd; + SysCfb_Init(0); + } +#else SysCfb_Init(0); systemHeapStart = (uintptr_t)_buffersSegmentEnd; +#endif fb = (uintptr_t)SysCfb_GetFbPtr(0); gSystemHeapSize = fb - systemHeapStart; PRINTF(T("システムヒープ初期化 %08x-%08x %08x\n", "System heap initalization %08x-%08x %08x\n"), systemHeapStart, @@ -97,6 +114,11 @@ void Main(void* arg) { StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched"); Sched_Init(&gScheduler, STACK_TOP(sSchedStack), THREAD_PRI_SCHED, gViConfigModeType, 1, &gIrqMgr); +#if PLATFORM_N64 + CIC6105_AddFaultClient(); + func_80001640(); +#endif + IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQueue); StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio"); @@ -119,14 +141,19 @@ void Main(void* arg) { if (msg == NULL) { break; } - if (*msg == OS_SC_PRE_NMI_MSG) { - PRINTF(T("main.c: リセットされたみたいだよ\n", "main.c: Looks like it's been reset\n")); - PreNmiBuff_SetReset(gAppNmiBufferPtr); + switch (*msg) { + case OS_SC_PRE_NMI_MSG: + PRINTF(T("main.c: リセットされたみたいだよ\n", "main.c: Looks like it's been reset\n")); + PreNmiBuff_SetReset(gAppNmiBufferPtr); + break; } } PRINTF(T("mainproc 後始末\n", "mainproc Cleanup\n")); osDestroyThread(&sGraphThread); RcpUtils_Reset(); +#if PLATFORM_N64 + CIC6105_RemoveFaultClient(); +#endif PRINTF(T("mainproc 実行終了\n", "mainproc End of execution\n")); } diff --git a/src/code/sched.c b/src/code/sched.c index fbfc42dc07..ef34a4f6ad 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -45,6 +45,8 @@ #define RDP_DONE_MSG 668 #define NOTIFY_MSG 670 // original name: ENTRY_MSG +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + OSTime sRSPGfxTimeStart; OSTime sRSPAudioTimeStart; OSTime sRSPOtherTimeStart; diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c index a9ddee0714..13e2622c61 100644 --- a/src/code/speed_meter.c +++ b/src/code/speed_meter.c @@ -1,3 +1,5 @@ +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" + #include "global.h" #include "terminal.h" diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 28019c3e7d..3d5457913a 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,5 +1,7 @@ #include "global.h" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" + uintptr_t sSysCfbFbPtr[2]; uintptr_t sSysCfbEnd; diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index 2ca6e4cf47..550b39e4e7 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -16,6 +16,8 @@ MtxF gMtxFClear = { }; // clang-format on +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" + MtxF* sMatrixStack; // "Matrix_stack" MtxF* sCurrentMatrix; // "Matrix_now" diff --git a/src/code/z_debug.c b/src/code/z_debug.c index 3e6e184944..d668f490a6 100644 --- a/src/code/z_debug.c +++ b/src/code/z_debug.c @@ -12,6 +12,8 @@ typedef struct InputCombo { /* 0x2 */ u16 press; } InputCombo; // size = 0x4 +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + RegEditor* gRegEditor; DebugCamTextBufferEntry sDebugCamTextBuffer[22]; diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index 38812cb0f6..2235c8b3d8 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -2,6 +2,8 @@ #define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_25 | ACTOR_FLAG_26) +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" + void (*sPlayerCallInitFunc)(Actor* thisx, PlayState* play); void (*sPlayerCallDestroyFunc)(Actor* thisx, PlayState* play); void (*sPlayerCallUpdateFunc)(Actor* thisx, PlayState* play); diff --git a/src/code/z_skin.c b/src/code/z_skin.c index 69a14f0656..ab3b8624a4 100644 --- a/src/code/z_skin.c +++ b/src/code/z_skin.c @@ -1,5 +1,7 @@ #include "global.h" +#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" + MtxF gSkinLimbMatrices[60]; // holds matrices for each limb of the skeleton currently being drawn static s32 sUnused; diff --git a/tools/disasm/ntsc-1.2/functions.txt b/tools/disasm/ntsc-1.2/functions.txt index 36010b319d..f63400871a 100644 --- a/tools/disasm/ntsc-1.2/functions.txt +++ b/tools/disasm/ntsc-1.2/functions.txt @@ -21,12 +21,13 @@ Yaz0_DecompressImpl = 0x8000127C; // type:func Yaz0_Decompress = 0x800013E4; // type:func Locale_Init = 0x80001430; // type:func Locale_ResetRegion = 0x800014BC; // type:func -func_800014E8_unknown = 0x800014E8; // type:func -func_800014FC_unknown = 0x800014FC; // type:func -func_800015E8_unknown = 0x800015E8; // type:func -func_8000161C_unknown = 0x8000161C; // type:func -func_80001640_unknown = 0x80001640; // type:func -func_80001714_unknown = 0x80001714; // type:func +func_800014D0 = 0x800014D0; // type:func +func_800014E8 = 0x800014E8; // type:func +CIC6105_FaultClient = 0x800014FC; // type:func +CIC6105_AddFaultClient = 0x800015E8; // type:func +CIC6105_RemoveFaultClient = 0x8000161C; // type:func +func_80001640 = 0x80001640; // type:func +func_80001714 = 0x80001714; // type:func func_80001720 = 0x80001720; // type:func osSyncPrintfUnused = 0x80001750; // type:func osSyncPrintf = 0x8000176C; // type:func diff --git a/tools/disasm/ntsc-1.2/variables.txt b/tools/disasm/ntsc-1.2/variables.txt index e03651359f..9d08423a88 100644 --- a/tools/disasm/ntsc-1.2/variables.txt +++ b/tools/disasm/ntsc-1.2/variables.txt @@ -26,3 +26,33 @@ gBitFlags = 0x800F9240; // size:0x80 type:u32[32] gSfxDefaultPos = 0x801049D4; // size:0xC type:Vec3f gSfxDefaultFreqAndVolScale = 0x801049E0; // size:0x4 type:f32 gSfxDefaultReverb = 0x801049E8; // size:0x1 type:s8 +B_80008EE0 = 0x80008EE0; // size:0x4 type:s32 +B_80008EE4 = 0x80008EE4; // size:0x4 type:s32 +sCIC6105FaultClient = 0x80008EE8; // size:0x10 type:FaultClient +B_80008EF8 = 0x80008EF8; // size:0x4 type:s32 +B_80008EFC = 0x80008EFC; // size:0x4 type:s32 +gAppNmiBufferPtr = 0x8011D970; // size:0x4 type:PreNmiBuff* +sSerialEventQueue = 0x801217E0; // size:0x18 type:OSMesgQueue +sSerialMsgBuf = 0x801217F8; // size:0x4 type:OSMesg[1] +sIrqMgrStackInfo = 0x801214E8; +sIrqMgrStack = 0x80120F68; +gIrqMgr = 0x8011E038; // size:0x280 type:IrqMgr +sSchedStackInfo = 0x80121488; +sSchedStack = 0x8011FC68; +gScheduler = 0x8011D978; // size:0x258 type:Scheduler +gViConfigModeType = 0x80008350; // size:0x1 type:u8 +sAudioStackInfo = 0x801214A8; +sAudioStack = 0x80120268; +gAudioMgr = 0x80121548; // size:0x298 type:AudioMgr +sPadMgrStackInfo = 0x801214C8; +sPadMgrStack = 0x80120A68; +gPadMgr = 0x8011DBD0; // size:0x468 type:PadMgr +sSerialEventQueue = 0x801217E0; +sGraphStackInfo = 0x80121468; +sGraphStack = 0x8011E468; +sGraphThread = 0x8011E2B8; +rspbootTextStart = 0x800065C0; +rspbootTextEnd = 0x80006720; +cic6105ucodeTextStart = 0x80006720; +gBuildTeam = 0x80006D30; +gBuildDate = 0x80006D3C; diff --git a/undefined_syms.txt b/undefined_syms.txt index eda4353687..6b1d6f5cad 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -16,6 +16,11 @@ D_06000000 = 0x06000000; func_80001720 = 0x80001720; osInitialize = 0x80003230; +// cic6105.c +cic6105ucodeTextStart = 0x80006720; +func_800AE258_unknown = 0x800AE258; +func_800AE1E0_unknown = 0x800AE1E0; + // code_n64dd_800AD410.c func_800ADCD8_unknown = 0x800ADCD8; func_800AE170_unknown = 0x800AE170;