diff options
| author | EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> | 2021-08-18 16:12:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 11:12:35 -0400 |
| commit | fa95f9e6e881457b4a711809a1bf62480cea2c82 (patch) | |
| tree | 45c9af66b2506ff3edf4787d6fc9deb8fe5edc68 /src/boot_O2_g3 | |
| parent | 49922b4856655a48389dbc45138930650e252dea (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.c | 10 | ||||
| -rw-r--r-- | src/boot_O2_g3/boot_main.c | 6 | ||||
| -rw-r--r-- | src/boot_O2_g3/build.c | 3 | ||||
| -rw-r--r-- | src/boot_O2_g3/idle.c | 37 | ||||
| -rw-r--r-- | src/boot_O2_g3/idle_extra_bss.c | 7 | ||||
| -rw-r--r-- | src/boot_O2_g3/z_std_dma.c | 33 |
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); } |
