summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorcadmic <cadmic24@gmail.com>2024-10-09 06:48:53 -0700
committerGitHub <noreply@github.com>2024-10-09 09:48:53 -0400
commit60f9607569249813d508ec70ef501db6d46682ea (patch)
tree72188e6a24f6f90c74d3d265ff936c7f7c08263f /src/code
parentd3bf8ae78b36e4f81fa3c2f90e97ce067f61d12e (diff)
[ntsc-1.0/1.1] Match "system" files (#2254)
Diffstat (limited to 'src/code')
-rw-r--r--src/code/irqmgr.c42
-rw-r--r--src/code/main.c13
-rw-r--r--src/code/z_vimode.c40
3 files changed, 93 insertions, 2 deletions
diff --git a/src/code/irqmgr.c b/src/code/irqmgr.c
index d623ddad8..3a1e3cdf5 100644
--- a/src/code/irqmgr.c
+++ b/src/code/irqmgr.c
@@ -34,6 +34,7 @@
*/
#include "global.h"
#include "terminal.h"
+#include "versions.h"
vu32 gIrqMgrResetStatus = IRQ_RESET_STATUS_IDLE;
volatile OSTime sIrqMgrResetTime = 0;
@@ -43,9 +44,13 @@ u32 sIrqMgrRetraceCount = 0;
// Internal messages
#define IRQ_RETRACE_MSG 666
#define IRQ_PRENMI_MSG 669
+#if OOT_VERSION < PAL_1_0
+#define IRQ_PRENMI500_MSG 670
+#else
#define IRQ_PRENMI450_MSG 671
#define IRQ_PRENMI480_MSG 672
#define IRQ_PRENMI500_MSG 673
+#endif
/**
* Registers a client and an associated message queue with the IRQ manager. When an
@@ -163,8 +168,13 @@ void IrqMgr_HandlePreNMI(IrqMgr* irqMgr) {
irqMgr->resetStatus = IRQ_RESET_STATUS_PRENMI;
sIrqMgrResetTime = irqMgr->resetTime = osGetTime();
+#if OOT_VERSION < PAL_1_0
+ // Schedule a PRENMI500 message to be handled in 500ms
+ osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(500000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG);
+#else
// Schedule a PRENMI450 message to be handled in 450ms
osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(450000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI450_MSG);
+#endif
IrqMgr_JamMesgToClients(irqMgr, (OSMesg)&irqMgr->prenmiMsg);
}
@@ -183,6 +193,27 @@ void IrqMgr_CheckStacks(void) {
}
}
+#if OOT_VERSION < PAL_1_0
+
+void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) {
+ u64 nmi = IRQ_RESET_STATUS_NMI; // required to match
+ u32 result;
+
+ gIrqMgrResetStatus = nmi;
+ irqMgr->resetStatus = IRQ_RESET_STATUS_NMI;
+
+ IrqMgr_SendMesgToClients(irqMgr, (OSMesg)&irqMgr->nmiMsg);
+
+ result = osAfterPreNMI();
+ if (result != 0) {
+ // Schedule another PRENMI500 message to be handled in 1ms
+ osSetTimer(&irqMgr->timer, OS_USEC_TO_CYCLES(1000), 0, &irqMgr->queue, (OSMesg)IRQ_PRENMI500_MSG);
+ }
+ IrqMgr_CheckStacks();
+}
+
+#else
+
void IrqMgr_HandlePreNMI450(IrqMgr* irqMgr) {
u64 nmi = IRQ_RESET_STATUS_NMI; // required to match
@@ -215,6 +246,8 @@ void IrqMgr_HandlePreNMI500(IrqMgr* irqMgr) {
IrqMgr_CheckStacks();
}
+#endif
+
/**
* Runs on each vertical retrace
*
@@ -244,6 +277,11 @@ void IrqMgr_ThreadEntry(void* arg) {
while (!exit) {
osRecvMesg(&irqMgr->queue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (msg) {
+#if OOT_VERSION < PAL_1_0
+ default:
+ break;
+#endif
+
case IRQ_RETRACE_MSG:
IrqMgr_HandleRetrace(irqMgr);
break;
@@ -254,6 +292,7 @@ void IrqMgr_ThreadEntry(void* arg) {
IrqMgr_HandlePreNMI(irqMgr);
break;
+#if OOT_VERSION >= PAL_1_0
case IRQ_PRENMI450_MSG:
PRINTF("PRENMI450_MSG\n");
PRINTF(T("スケジューラ:PRENMI450メッセージを受信\n", "Scheduler: Receives PRENMI450 message\n"));
@@ -265,6 +304,7 @@ void IrqMgr_ThreadEntry(void* arg) {
PRINTF(T("スケジューラ:PRENMI480メッセージを受信\n", "Scheduler: Receives PRENMI480 message\n"));
IrqMgr_HandlePreNMI480(irqMgr);
break;
+#endif
case IRQ_PRENMI500_MSG:
PRINTF("PRENMI500_MSG\n");
@@ -273,11 +313,13 @@ void IrqMgr_ThreadEntry(void* arg) {
exit = true;
break;
+#if OOT_VERSION >= PAL_1_0
default:
PRINTF(T("irqmgr.c:予期しないメッセージを受け取りました(%08x)\n",
"irqmgr.c: Unexpected message received (%08x)\n"),
msg);
break;
+#endif
}
}
diff --git a/src/code/main.c b/src/code/main.c
index 8e572bdce..6c2b35af2 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -1,4 +1,5 @@
#include "ultra64.h"
+#include "versions.h"
// Declared before including other headers for BSS ordering
extern uintptr_t gSegments[NUM_SEGMENTS];
@@ -39,7 +40,11 @@ uintptr_t gSegments[NUM_SEGMENTS];
OSThread sGraphThread;
STACK(sGraphStack, 0x1800);
+#if OOT_VERSION < PAL_1_0
+STACK(sSchedStack, 0x400);
+#else
STACK(sSchedStack, 0x600);
+#endif
STACK(sAudioStack, 0x800);
STACK(sPadMgrStack, 0x500);
STACK(sIrqMgrStack, 0x500);
@@ -78,7 +83,7 @@ void Main(void* arg) {
#if PLATFORM_N64
func_800AD410();
if (D_80121211 != 0) {
- systemHeapStart = (uintptr_t)&_n64ddSegmentEnd;
+ systemHeapStart = (uintptr_t)_n64ddSegmentEnd;
SysCfb_Init(1);
} else {
func_800AD488();
@@ -150,7 +155,10 @@ void Main(void* arg) {
StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph");
osCreateThread(&sGraphThread, THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), THREAD_PRI_GRAPH);
osStartThread(&sGraphThread);
+
+#if OOT_VERSION >= PAL_1_0
osSetThreadPri(NULL, THREAD_PRI_MAIN);
+#endif
while (true) {
s16* msg = NULL;
@@ -162,6 +170,9 @@ void Main(void* arg) {
switch (*msg) {
case OS_SC_PRE_NMI_MSG:
PRINTF(T("main.c: リセットされたみたいだよ\n", "main.c: Looks like it's been reset\n"));
+#if OOT_VERSION < PAL_1_0
+ StackCheck_Check(NULL);
+#endif
PreNmiBuff_SetReset(gAppNmiBufferPtr);
break;
}
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 8abcb62e7..a97181075 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "ultra64/viint.h"
+#include "versions.h"
void ViMode_LogPrint(OSViMode* osViMode) {
LOG_ADDRESS("osvimodep", osViMode, "../z_vimode.c", 87);
@@ -182,6 +183,7 @@ void ViMode_Save(ViMode* viMode) {
R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust;
R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust;
+#if OOT_VERSION >= PAL_1_0
if (SREG(58) == 1) {
SREG(58) = 0;
@@ -200,6 +202,7 @@ void ViMode_Save(ViMode* viMode) {
break;
}
}
+#endif
}
void ViMode_Load(ViMode* viMode) {
@@ -270,8 +273,18 @@ void ViMode_Update(ViMode* viMode, Input* input) {
// Load state from REGs
ViMode_Load(viMode);
+#if OOT_VERSION < PAL_1_0
+ if (viMode->editState == VI_MODE_EDIT_STATE_NEGATIVE_2) {
+ // Log comparison between the NTSC LAN1 mode and the custom mode
+ ViMode_LogPrint(&osViModeNtscLan1);
+ ViMode_LogPrint(&viMode->customViMode);
+ viMode->editState = VI_MODE_EDIT_STATE_NEGATIVE_1;
+ } else if ((viMode->editState == VI_MODE_EDIT_STATE_2) || (viMode->editState == VI_MODE_EDIT_STATE_3))
+#else
if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) ||
- (viMode->editState == VI_MODE_EDIT_STATE_3)) {
+ (viMode->editState == VI_MODE_EDIT_STATE_3))
+#endif
+ {
gScreenWidth = viMode->viWidth;
gScreenHeight = viMode->viHeight;
@@ -333,6 +346,21 @@ void ViMode_Update(ViMode* viMode, Input* input) {
}
// Clamp adjustments
+#if OOT_VERSION < PAL_1_0
+ // Do not allow parts of the framebuffer to end up offscreen
+ if (viMode->leftAdjust < 0) {
+ viMode->leftAdjust = 0;
+ }
+ if (viMode->upperAdjust < 0) {
+ viMode->upperAdjust = 0;
+ }
+ if (viMode->rightAdjust > 0) {
+ viMode->rightAdjust = 0;
+ }
+ if (viMode->lowerAdjust > 0) {
+ viMode->lowerAdjust = 0;
+ }
+#else
if (viMode->editState >= VI_MODE_EDIT_STATE_2) {
// Allow parts of the framebuffer to possibly be offscreen by a small margin
if (viMode->leftAdjust < -16) {
@@ -362,11 +390,21 @@ void ViMode_Update(ViMode* viMode, Input* input) {
viMode->lowerAdjust = 0;
}
}
+#endif
// Configure the custom VI mode with the selected settings
ViMode_Configure(viMode, OS_VI_MPAL_LPN1, osTvType, viMode->loRes, viMode->antialiasOff, viMode->modeN,
viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, viMode->rightAdjust,
viMode->upperAdjust, viMode->lowerAdjust);
+
+#if OOT_VERSION < PAL_1_0
+ if (viMode->editState == VI_MODE_EDIT_STATE_3) {
+ // Log comparison between the NTSC LAN1 mode and the custom mode
+ ViMode_LogPrint(&osViModeNtscLan1);
+ ViMode_LogPrint(&viMode->customViMode);
+ }
+#endif
+
ViMode_ConfigureFeatures(viMode, viMode->viFeatures);
if (viMode->editState == VI_MODE_EDIT_STATE_3) {