summaryrefslogtreecommitdiff
path: root/src/boot_O2_g3
diff options
context:
space:
mode:
authorEllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>2021-08-18 16:12:35 +0100
committerGitHub <noreply@github.com>2021-08-18 11:12:35 -0400
commitfa95f9e6e881457b4a711809a1bf62480cea2c82 (patch)
tree45c9af66b2506ff3edf4787d6fc9deb8fe5edc68 /src/boot_O2_g3
parent49922b4856655a48389dbc45138930650e252dea (diff)
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
Diffstat (limited to 'src/boot_O2_g3')
-rw-r--r--src/boot_O2_g3/CIC6105.c10
-rw-r--r--src/boot_O2_g3/boot_main.c6
-rw-r--r--src/boot_O2_g3/build.c3
-rw-r--r--src/boot_O2_g3/idle.c37
-rw-r--r--src/boot_O2_g3/idle_extra_bss.c7
-rw-r--r--src/boot_O2_g3/z_std_dma.c33
6 files changed, 64 insertions, 32 deletions
diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c
index e0b8811a0..5a51b22c8 100644
--- a/src/boot_O2_g3/CIC6105.c
+++ b/src/boot_O2_g3/CIC6105.c
@@ -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) {
diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c
index 488e2dddf..04bb9a33a 100644
--- a/src/boot_O2_g3/boot_main.c
+++ b/src/boot_O2_g3/boot_main.c
@@ -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();
diff --git a/src/boot_O2_g3/build.c b/src/boot_O2_g3/build.c
new file mode 100644
index 000000000..23bd1cd59
--- /dev/null
+++ b/src/boot_O2_g3/build.c
@@ -0,0 +1,3 @@
+const char gBuildTeam[] = "zelda@srd44";
+const char gBuildDate[] = "00-07-31 17:04:16";
+const char gBuildMakeOption[] = "";
diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c
index 41a074a02..4d01b4c37 100644
--- a/src/boot_O2_g3/idle.c
+++ b/src/boot_O2_g3/idle.c
@@ -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); }
diff --git a/src/boot_O2_g3/idle_extra_bss.c b/src/boot_O2_g3/idle_extra_bss.c
new file mode 100644
index 000000000..019b62640
--- /dev/null
+++ b/src/boot_O2_g3/idle_extra_bss.c
@@ -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;
diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c
index 0b278dbb5..5a29d5d56 100644
--- a/src/boot_O2_g3/z_std_dma.c
+++ b/src/boot_O2_g3/z_std_dma.c
@@ -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);
+
+dummy_label:;
- for (iter = dmadata, idx = 0; iter->vromEnd != 0; iter++, idx++) {
- ;
+ 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);
}