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:
EllipticEllipsis
2021-08-18 16:12:35 +01:00
committed by GitHub
parent 49922b4856
commit fa95f9e6e8
33 changed files with 389 additions and 269 deletions
+7 -3
View File
@@ -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) {
+6
View File
@@ -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();
+3
View File
@@ -0,0 +1,3 @@
const char gBuildTeam[] = "zelda@srd44";
const char gBuildDate[] = "00-07-31 17:04:16";
const char gBuildMakeOption[] = "";
+19 -18
View File
@@ -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); }
+7
View File
@@ -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
View File
@@ -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);
}