summaryrefslogtreecommitdiff
path: root/src/boot_O2_g3
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2023-06-25 17:18:50 -0700
committerGitHub <noreply@github.com>2023-06-26 10:18:50 +1000
commit22035890fa372f61dd9b907c2a0f9dc6bcd0ae19 (patch)
tree82dffc7c8d27e07adecd11d3e1a481a5857c7393 /src/boot_O2_g3
parenta2c2c45a0e2c35ec30cfac888a0deb92f86b8d96 (diff)
Idle + Main bss and cleanup (#1292)
* Idle bss and cleanup * main bss and cleanup * format * Remove pad comment about sAudioMgr * PR * Missed a couple size_t changes * unused pads * static
Diffstat (limited to 'src/boot_O2_g3')
-rw-r--r--src/boot_O2_g3/boot_main.c1
-rw-r--r--src/boot_O2_g3/idle.c105
-rw-r--r--src/boot_O2_g3/idle_extra_bss.c8
-rw-r--r--src/boot_O2_g3/viconfig.c11
-rw-r--r--src/boot_O2_g3/z_std_dma.c10
5 files changed, 68 insertions, 67 deletions
diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c
index ed16c34e0..dcb66fefd 100644
--- a/src/boot_O2_g3/boot_main.c
+++ b/src/boot_O2_g3/boot_main.c
@@ -1,5 +1,6 @@
#include "prevent_bss_reordering.h"
#include "global.h"
+#include "idle.h"
#include "stack.h"
#include "stackcheck.h"
#include "z64thread.h"
diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c
index f7c847449..ccdf98695 100644
--- a/src/boot_O2_g3/idle.c
+++ b/src/boot_O2_g3/idle.c
@@ -1,17 +1,10 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
+#include "irqmgr.h"
+#include "main.h"
#include "stack.h"
-#include "buffers.h"
#include "stackcheck.h"
#include "z64thread.h"
-u8 D_80096B20 = 1;
-vu8 gViConfigUseDefault = 1;
-u8 gViConfigAdditionalScanLines = 0;
-u32 gViConfigFeatures = 0x42;
-f32 gViConfigXScale = 1.0f;
-f32 gViConfigYScale = 1.0f;
-
+// Variables are put before most headers as a hacky way to bypass bss reordering
IrqMgr gIrqMgr;
STACK(sIrqMgrStack, 0x500);
StackEntry sIrqMgrStackInfo;
@@ -19,90 +12,101 @@ OSThread sMainThread;
STACK(sMainStack, 0x900);
StackEntry sMainStackInfo;
OSMesg sPiMgrCmdBuff[50];
-OSMesgQueue gPiMgrCmdQ;
+OSMesgQueue gPiMgrCmdQueue;
+OSViMode gViConfigMode;
+u8 gViConfigModeType;
-void Idle_ClearMemory(void* begin, void* end) {
+#include "global.h"
+#include "buffers.h"
+#include "idle.h"
+
+u8 D_80096B20 = 1;
+vu8 gViConfigUseBlack = true;
+u8 gViConfigAdditionalScanLines = 0;
+u32 gViConfigFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF;
+f32 gViConfigXScale = 1.0f;
+f32 gViConfigYScale = 1.0f;
+
+void Main_ClearMemory(void* begin, void* end) {
if (begin < end) {
bzero(begin, (uintptr_t)end - (uintptr_t)begin);
}
}
-void Idle_InitFramebuffer(u32* ptr, size_t numBytes, u32 value) {
- s32 temp = sizeof(u32);
-
- while (numBytes) {
- *ptr++ = value;
- numBytes -= temp;
+void Main_InitFramebuffer(u32* framebuffer, size_t numBytes, u32 value) {
+ for (; numBytes > 0; numBytes -= sizeof(u32)) {
+ *framebuffer++ = value;
}
}
-void Idle_InitScreen(void) {
- Idle_InitFramebuffer((u32*)gFramebuffer1, 0x25800, 0x00010001);
- ViConfig_UpdateVi(0);
+void Main_InitScreen(void) {
+ Main_InitFramebuffer((u32*)gFramebuffer1, sizeof(gFramebuffer1),
+ (GPACK_RGBA5551(0, 0, 0, 1) << 16) | GPACK_RGBA5551(0, 0, 0, 1));
+ ViConfig_UpdateVi(false);
osViSwapBuffer(gFramebuffer1);
osViBlack(false);
}
-void Idle_InitMemory(void) {
- u32 pad;
+void Main_InitMemory(void) {
+ void* memStart = (void*)0x80000400;
void* memEnd = OS_PHYSICAL_TO_K0(osMemSize);
- Idle_ClearMemory(0x80000400, gFramebuffer1);
- Idle_ClearMemory(D_80025D00, bootproc);
- Idle_ClearMemory(gGfxSPTaskYieldBuffer, memEnd);
+ Main_ClearMemory(memStart, gFramebuffer1);
+ Main_ClearMemory(D_80025D00, bootproc);
+ Main_ClearMemory(gGfxSPTaskYieldBuffer, memEnd);
}
-void Idle_InitCodeAndMemory(void) {
+void Main_Init(void) {
DmaRequest dmaReq;
- OSMesgQueue queue;
- OSMesg mesg;
- size_t oldSize;
+ OSMesgQueue mq;
+ OSMesg msg[1];
+ size_t prevSize;
- osCreateMesgQueue(&queue, &mesg, 1);
+ osCreateMesgQueue(&mq, msg, ARRAY_COUNT(msg));
- oldSize = sDmaMgrDmaBuffSize;
- sDmaMgrDmaBuffSize = 0;
+ prevSize = gDmaMgrDmaBuffSize;
+ gDmaMgrDmaBuffSize = 0;
DmaMgr_SendRequestImpl(&dmaReq, SEGMENT_START(code), SEGMENT_ROM_START(code),
- SEGMENT_ROM_END(code) - SEGMENT_ROM_START(code), 0, &queue, 0);
- Idle_InitScreen();
- Idle_InitMemory();
- osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
+ SEGMENT_ROM_END(code) - SEGMENT_ROM_START(code), 0, &mq, NULL);
+ Main_InitScreen();
+ Main_InitMemory();
+ osRecvMesg(&mq, NULL, OS_MESG_BLOCK);
- sDmaMgrDmaBuffSize = oldSize;
+ gDmaMgrDmaBuffSize = prevSize;
- Idle_ClearMemory(SEGMENT_BSS_START(code), SEGMENT_BSS_END(code));
+ Main_ClearMemory(SEGMENT_BSS_START(code), SEGMENT_BSS_END(code));
}
void Main_ThreadEntry(void* arg) {
StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr");
IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), Z_PRIORITY_IRQMGR, 1);
DmaMgr_Start();
- Idle_InitCodeAndMemory();
+ Main_Init();
Main(arg);
DmaMgr_Stop();
}
void Idle_InitVideo(void) {
- osCreateViManager(254);
+ osCreateViManager(OS_PRIORITY_VIMGR);
- gViConfigFeatures = 66;
- gViConfigXScale = 1.0;
- gViConfigYScale = 1.0;
+ gViConfigFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF;
+ gViConfigXScale = 1.0f;
+ gViConfigYScale = 1.0f;
switch (osTvType) {
case OS_TV_NTSC:
- D_8009B290 = 2;
+ gViConfigModeType = OS_VI_NTSC_LAN1;
gViConfigMode = osViModeNtscLan1;
break;
case OS_TV_MPAL:
- D_8009B290 = 30;
+ gViConfigModeType = OS_VI_MPAL_LAN1;
gViConfigMode = osViModeMpalLan1;
break;
case OS_TV_PAL:
- D_8009B290 = 44;
+ gViConfigModeType = OS_VI_FPAL_LAN1;
gViConfigMode = osViModeFpalLan1;
gViConfigYScale = 0.833f;
break;
@@ -113,10 +117,11 @@ void Idle_InitVideo(void) {
void Idle_ThreadEntry(void* arg) {
Idle_InitVideo();
- osCreatePiManager(150, &gPiMgrCmdQ, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff));
+ osCreatePiManager(OS_PRIORITY_PIMGR, &gPiMgrCmdQueue, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff));
StackCheck_Init(&sMainStackInfo, sMainStack, STACK_TOP(sMainStack), 0, 0x400, "main");
osCreateThread(&sMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, STACK_TOP(sMainStack), Z_PRIORITY_MAIN);
osStartThread(&sMainThread);
- osSetThreadPri(NULL, 0);
+ osSetThreadPri(NULL, OS_PRIORITY_IDLE);
- do { } while (true); }
+ for (;;) {}
+}
diff --git a/src/boot_O2_g3/idle_extra_bss.c b/src/boot_O2_g3/idle_extra_bss.c
deleted file mode 100644
index 24fc0083f..000000000
--- a/src/boot_O2_g3/idle_extra_bss.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "PR/ultratypes.h"
-#include "ultra64/vi.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/viconfig.c b/src/boot_O2_g3/viconfig.c
index 6539421e6..ccba4e932 100644
--- a/src/boot_O2_g3/viconfig.c
+++ b/src/boot_O2_g3/viconfig.c
@@ -1,14 +1,17 @@
#include "global.h"
+#include "idle.h"
-void ViConfig_UpdateVi(u32 mode) {
- if (mode != 0) {
+void ViConfig_UpdateVi(u32 black) {
+ if (black) {
switch (osTvType) {
case OS_TV_MPAL:
osViSetMode(&osViModeMpalLan1);
break;
+
case OS_TV_PAL:
osViSetMode(&osViModePalLan1);
break;
+
case OS_TV_NTSC:
default:
osViSetMode(&osViModeNtscLan1);
@@ -42,11 +45,11 @@ void ViConfig_UpdateVi(u32 mode) {
}
}
- gViConfigUseDefault = mode;
+ gViConfigUseBlack = black;
}
void ViConfig_UpdateBlack(void) {
- if (gViConfigUseDefault != 0) {
+ if (gViConfigUseBlack) {
osViBlack(true);
} else {
osViBlack(false);
diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c
index 71b7ae846..477fd3f68 100644
--- a/src/boot_O2_g3/z_std_dma.c
+++ b/src/boot_O2_g3/z_std_dma.c
@@ -4,10 +4,10 @@
#include "stackcheck.h"
#include "z64thread.h"
-u32 sDmaMgrDmaBuffSize = 0x2000;
+size_t gDmaMgrDmaBuffSize = 0x2000;
StackEntry sDmaMgrStackInfo;
-u16 numDmaEntries;
+u16 sNumDmaEntries;
OSMesgQueue sDmaMgrMsgQueue;
OSMesg sDmaMgrMsgs[32];
OSThread sDmaMgrThread;
@@ -18,7 +18,7 @@ s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) {
OSMesgQueue queue;
OSMesg msg[1];
s32 ret;
- size_t buffSize = sDmaMgrDmaBuffSize;
+ size_t buffSize = gDmaMgrDmaBuffSize;
osInvalDCache(ram, size);
osCreateMesgQueue(&queue, msg, ARRAY_COUNT(msg));
@@ -127,7 +127,7 @@ void DmaMgr_ProcessMsg(DmaRequest* req) {
index = DmaMgr_FindDmaIndex(vrom);
- if ((index >= 0) && (index < numDmaEntries)) {
+ if ((index >= 0) && (index < sNumDmaEntries)) {
dmaEntry = &dmadata[index];
if (dmaEntry->romEnd == 0) {
if (dmaEntry->vromEnd < (vrom + size)) {
@@ -225,7 +225,7 @@ void DmaMgr_Start(void) {
idx++;
}
- numDmaEntries = idx;
+ sNumDmaEntries = idx;
}
osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs));