mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-19 07:17:12 -04:00
Migrated a lot of boot bss, matched a few NON_MATCHINGs in boot (#266)
* Import bss to boot_main and idle, match last function in idle * Some pointer cleanup in idle, spec * Clean up idle, add build.c, add bss to CIC6105 * Import rand bss * sptask bss and a macro * sptask updated to use libultra macros * siacs.c bss * Macros in CIC and idle * controller bss * seteventmesg bss * spec * pimgr and piacs bss * initialize OK, threadsave, initialize, pimgr bss * Match DmaMgr_Start * Fix bss reorder using separate file * Small cleanup of hex/dec in buffer sizes * Add comment, remove unused bss from spec * Merge remote-tracking branch 'upstream/master' into boot_bss * Format * Delete files * remove commented-out structs * Bit more cleanup * Addressed reviews * Format
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
#include "global.h"
|
||||
|
||||
UNK_TYPE4 D_8009BE30;
|
||||
UNK_TYPE4 D_8009BE34;
|
||||
FaultClient romInfoFaultClient;
|
||||
|
||||
void CIC6105_Nop80081820(void) {
|
||||
}
|
||||
|
||||
@@ -7,9 +11,9 @@ void CIC6105_Nop80081828(void) {
|
||||
}
|
||||
|
||||
void CIC6105_PrintRomInfo(void) {
|
||||
FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", (UNK_PTR)(*(u32*)0xA4040010));
|
||||
FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", &D_800994D0);
|
||||
FaultDrawer_DrawText(56, 192, "[Date:%s]", &D_800994DC);
|
||||
FaultDrawer_DrawText(80, 200, "SP_STATUS %08x", HW_REG(SP_STATUS_REG, u32));
|
||||
FaultDrawer_DrawText(40, 184, "ROM_F [Creator:%s]", gBuildTeam);
|
||||
FaultDrawer_DrawText(56, 192, "[Date:%s]", gBuildDate);
|
||||
}
|
||||
|
||||
void CIC6105_AddRomInfoFaultPage(void) {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
#include "global.h"
|
||||
|
||||
StackEntry sBootThreadInfo;
|
||||
OSThread sIdleThread;
|
||||
u8 sIdleThreadStack[0x400];
|
||||
StackEntry sIdleThreadInfo;
|
||||
u8 sBootThreadStack[0x400];
|
||||
|
||||
void bootproc(void) {
|
||||
StackCheck_Init(&sBootThreadInfo, sBootThreadStack, sBootThreadStack + sizeof(sBootThreadStack), 0, -1, "boot");
|
||||
osMemSize = osGetMemSize();
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
const char gBuildTeam[] = "zelda@srd44";
|
||||
const char gBuildDate[] = "00-07-31 17:04:16";
|
||||
const char gBuildMakeOption[] = "";
|
||||
+19
-18
@@ -7,9 +7,18 @@ u32 gViConfigFeatures = 0x42;
|
||||
f32 gViConfigXScale = 1.0f;
|
||||
f32 gViConfigYScale = 1.0f;
|
||||
|
||||
IrqMgr gIrqMgr;
|
||||
u8 sIrqMgrStack[0x500];
|
||||
StackEntry sIrqMgrStackInfo;
|
||||
OSThread gMainThread;
|
||||
u8 sMainStack[0x900];
|
||||
StackEntry sMainStackInfo;
|
||||
OSMesg sPiMgrCmdBuff[50];
|
||||
OSMesgQueue gPiMgrCmdQ;
|
||||
|
||||
void Idle_ClearMemory(void* begin, void* end) {
|
||||
if (begin < end) {
|
||||
bzero(begin, (s32)(int)end - (int)begin);
|
||||
bzero(begin, (u32)end - (u32)begin);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,23 +32,21 @@ void Idle_InitFramebuffer(u32* ptr, u32 numBytes, u32 value) {
|
||||
}
|
||||
|
||||
void Idle_InitScreen(void) {
|
||||
Idle_InitFramebuffer((u32*)&gFramebuffer1, 0x25800, 0x00010001);
|
||||
Idle_InitFramebuffer((u32*)gFramebuffer1, 0x25800, 0x00010001);
|
||||
ViConfig_UpdateVi(0);
|
||||
osViSwapBuffer(&gFramebuffer1);
|
||||
osViSwapBuffer(gFramebuffer1);
|
||||
osViBlack(0);
|
||||
}
|
||||
|
||||
void Idle_InitMemory(void) {
|
||||
u32 pad;
|
||||
void* memEnd = (void*)(0x80000000 + osMemSize);
|
||||
void* memEnd = OS_PHYSICAL_TO_K0(osMemSize);
|
||||
|
||||
Idle_ClearMemory((void*)0x80000400, &gFramebuffer1);
|
||||
Idle_ClearMemory(&D_80025D00, (int*)&bootproc);
|
||||
Idle_ClearMemory(&gGfxSPTaskYieldBuffer, memEnd);
|
||||
Idle_ClearMemory(0x80000400, gFramebuffer1);
|
||||
Idle_ClearMemory(D_80025D00, bootproc);
|
||||
Idle_ClearMemory(gGfxSPTaskYieldBuffer, memEnd);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// regalloc around DmaMgr_SendRequestImpl
|
||||
void Idle_InitCodeAndMemory(void) {
|
||||
DmaRequest dmaReq;
|
||||
OSMesgQueue queue;
|
||||
@@ -51,8 +58,8 @@ void Idle_InitCodeAndMemory(void) {
|
||||
oldSize = sDmaMgrDmaBuffSize;
|
||||
sDmaMgrDmaBuffSize = 0;
|
||||
|
||||
DmaMgr_SendRequestImpl(&dmaReq, (u32)_codeSegmentStart, (u32)_codeSegmentRomStart,
|
||||
(u32)_codeSegmentRomEnd - (u32)_codeSegmentRomStart, 0, &queue, 0);
|
||||
DmaMgr_SendRequestImpl(&dmaReq, _codeSegmentStart, _codeSegmentRomStart, _codeSegmentRomEnd - _codeSegmentRomStart,
|
||||
0, &queue, 0);
|
||||
Idle_InitScreen();
|
||||
Idle_InitMemory();
|
||||
osRecvMesg(&queue, NULL, 1);
|
||||
@@ -61,9 +68,6 @@ void Idle_InitCodeAndMemory(void) {
|
||||
|
||||
Idle_ClearMemory(_codeSegmentBssStart, _codeSegmentBssEnd);
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/idle/Idle_InitCodeAndMemory.s")
|
||||
#endif
|
||||
|
||||
void Main_ThreadEntry(void* arg) {
|
||||
StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, sIrqMgrStack + sizeof(sIrqMgrStack), 0, 256, "irqmgr");
|
||||
@@ -109,7 +113,4 @@ void Idle_ThreadEntry(void* arg) {
|
||||
osStartThread(&gMainThread);
|
||||
osSetThreadPri(NULL, 0);
|
||||
|
||||
for (;;) {
|
||||
;
|
||||
}
|
||||
}
|
||||
do { } while (true); }
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#include "global.h"
|
||||
|
||||
// This file is currently required to fix bss reordering in idle.c. It is not resolved by prevent_bss_reordering.h .
|
||||
// Hopefully it will not be permanent.
|
||||
|
||||
OSViMode gViConfigMode;
|
||||
u8 D_8009B290;
|
||||
+22
-11
@@ -2,6 +2,13 @@
|
||||
|
||||
u32 sDmaMgrDmaBuffSize = 0x2000;
|
||||
|
||||
StackEntry sDmaMgrStackInfo;
|
||||
u16 numDmaEntries;
|
||||
OSMesgQueue sDmaMgrMsgQueue;
|
||||
OSMesg sDmaMgrMsgs[32];
|
||||
OSThread sDmaMgrThread;
|
||||
u8 sDmaMgrStack[0x500];
|
||||
|
||||
s32 DmaMgr_DMARomToRam(u32 rom, void* ram, u32 size) {
|
||||
OSIoMesg ioMsg;
|
||||
OSMesgQueue queue;
|
||||
@@ -202,30 +209,34 @@ s32 DmaMgr_SendRequest0(void* vramStart, u32 vromStart, u32 size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// TODO missing a useless move initializing v0, and some reorderings
|
||||
void DmaMgr_Start() {
|
||||
void DmaMgr_Start(void) {
|
||||
DmaEntry* iter;
|
||||
u32 idx;
|
||||
|
||||
DmaMgr_DMARomToRam((u32)_dmadataSegmentRomStart, dmadata, (u32)(_dmadataSegmentRomEnd - _dmadataSegmentRomStart));
|
||||
DmaMgr_DMARomToRam((u32)_dmadataSegmentRomStart, (u32)dmadata,
|
||||
(u32)_dmadataSegmentRomEnd - (u32)_dmadataSegmentRomStart);
|
||||
|
||||
for (iter = dmadata, idx = 0; iter->vromEnd != 0; iter++, idx++) {
|
||||
;
|
||||
dummy_label:;
|
||||
|
||||
iter = dmadata;
|
||||
idx = 0;
|
||||
while (iter->vromEnd != 0) {
|
||||
iter++;
|
||||
idx++;
|
||||
}
|
||||
|
||||
numDmaEntries = idx;
|
||||
|
||||
dummy_label_2:;
|
||||
|
||||
osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs));
|
||||
StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, sDmaMgrStack + sizeof(sDmaMgrStack), 0, 256, dmamgrThreadName);
|
||||
StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, sDmaMgrStack + sizeof(sDmaMgrStack), 0, 0x100, "dmamgr");
|
||||
osCreateThread(&sDmaMgrThread, Z_THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, sDmaMgrStack + sizeof(sDmaMgrStack),
|
||||
Z_PRIORITY_DMAMGR);
|
||||
|
||||
osStartThread(&sDmaMgrThread);
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/boot/z_std_dma/DmaMgr_Start.s")
|
||||
#endif
|
||||
|
||||
void DmaMgr_Stop() {
|
||||
void DmaMgr_Stop(void) {
|
||||
osSendMesg(&sDmaMgrMsgQueue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user