summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Estelami <NEstelami@users.noreply.github.com>2023-11-16 23:52:01 -0500
committerNicholas Estelami <NEstelami@users.noreply.github.com>2023-11-16 23:52:01 -0500
commit9b23cbae4c29d868da2513cc137f6218615ce6d0 (patch)
tree63754d85c16c28ae7f1b536e55f42deffff61125
parent9373d54db66e3f342754e250fa223fc413f86fe6 (diff)
Sweepy :tm:
-rw-r--r--mm/src/code/graph.c67
-rw-r--r--mm/src/code/z_kankyo.c8
-rw-r--r--mm/src/code/z_rcp.c24
-rw-r--r--mm/src/overlays/gamestates/ovl_title/z_title.c23
4 files changed, 82 insertions, 40 deletions
diff --git a/mm/src/code/graph.c b/mm/src/code/graph.c
index b99d3d27b..a4b73bf84 100644
--- a/mm/src/code/graph.c
+++ b/mm/src/code/graph.c
@@ -1,9 +1,8 @@
+#include "prevent_bss_reordering.h"
#include "z64.h"
#include "regs.h"
#include "functions.h"
#include "fault.h"
-#include "BenPort.h"
-#include <libultraship/libultraship.h>
// Variables are put before most headers as a hacky way to bypass bss reordering
FaultAddrConvClient sGraphFaultAddrConvClient;
@@ -26,6 +25,10 @@ OSTime sGraphPrevUpdateEndTime;
#include "overlays/gamestates/ovl_title/z_title.h"
#include "z_title_setup.h"
+void Graph_StartFrame();
+void Graph_ProcessGfxCommands(Gfx* commands);
+void Graph_ProcessFrame(void (*run_one_game_iter)(void));
+
void Graph_FaultClient(void) {
FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1");
osViSwapBuffer(SysCfb_GetFramebuffer(0));
@@ -45,7 +48,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
GfxPool* pool = &gGfxPools[gfxCtx->gfxPoolIdx % 2];
gGfxMasterDL = &pool->master;
- gSegments[0x0E] = (uintptr_t)gGfxMasterDL;
+ gSegments[0x0E] = gGfxMasterDL;
pool->headMagic = GFXPOOL_HEAD_MAGIC;
pool->tailMagic = GFXPOOL_TAIL_MAGIC;
@@ -63,7 +66,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
gfxCtx->debugBuffer = pool->debugBuffer;
gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2);
- gSegments[0x0F] = (uintptr_t)gfxCtx->curFrameBuffer;
+ gSegments[0x0F] = gfxCtx->curFrameBuffer;
gfxCtx->zbuffer = SysCfb_GetZBuffer();
@@ -124,13 +127,13 @@ void Graph_Init(GraphicsContext* gfxCtx) {
gfxCtx->xScale = gViConfigXScale;
gfxCtx->yScale = gViConfigYScale;
osCreateMesgQueue(&gfxCtx->queue, gfxCtx->msgBuff, ARRAY_COUNT(gfxCtx->msgBuff));
- Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL);
- Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL);
+ // Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL);
+ // Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL);
}
void Graph_Destroy(GraphicsContext* gfxCtx) {
- Fault_RemoveClient(&sGraphFaultClient);
- Fault_RemoveAddrConvClient(&sGraphFaultAddrConvClient);
+ // Fault_RemoveClient(&sGraphFaultClient);
+ // Fault_RemoveAddrConvClient(&sGraphFaultAddrConvClient);
}
/**
@@ -147,12 +150,11 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx, GameState* gameState) {
OSMesg msg;
CfbInfo* cfb;
- #if 0
retry:
- osSetTimer(&timer, OS_USEC_TO_CYCLES(3 * 1000 * 1000), 0, &gfxCtx->queue, (OSMesg)666);
- osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_BLOCK);
- osStopTimer(&timer);
-
+// osSetTimer(&timer, OS_USEC_TO_CYCLES(3 * 1000 * 1000), 0, &gfxCtx->queue, (OSMesg)666);
+// osRecvMesg(&gfxCtx->queue, &msg, OS_MESG_BLOCK);
+// osStopTimer(&timer);
+#if 0
if (msg == (OSMesg)666) {
osSyncPrintf("GRAPH SP TIMEOUT\n");
if (retryCount >= 0) {
@@ -162,10 +164,10 @@ retry:
} else {
// graph.c: No more! die!
osSyncPrintf("graph.c:もうダメ!死ぬ!\n");
- Fault_AddHungupAndCrashImpl("RCP is HUNG UP!!", "Oh! MY GOD!!");
+ //Fault_AddHungupAndCrashImpl("RCP is HUNG UP!!", "Oh! MY GOD!!");
}
}
- #endif
+#endif
gfxCtx->masterList = gGfxMasterDL;
if (gfxCtx->callback != NULL) {
gfxCtx->callback(gfxCtx, gfxCtx->callbackArg);
@@ -182,9 +184,12 @@ retry:
task->dram_stack = (u64*)gGfxSPTaskStack;
task->dram_stack_size = sizeof(gGfxSPTaskStack);
task->output_buff = gGfxSPTaskOutputBufferPtr;
- task->output_buff_size = (void*)gGfxSPTaskOutputBufferEnd;
+ task->output_buff_size = gGfxSPTaskOutputBufferEnd;
task->data_ptr = (u64*)gGfxMasterDL;
- task->data_size = 0;
+ OPEN_DISPS(gfxCtx);
+ task->data_size = (uintptr_t)WORK_DISP - (uintptr_t)gfxCtx->workBuffer;
+ CLOSE_DISPS(gfxCtx);
+
task->yield_data_ptr = (u64*)gGfxSPTaskYieldBuffer;
task->yield_data_size = sizeof(gGfxSPTaskYieldBuffer);
@@ -235,7 +240,7 @@ void Graph_UpdateGame(GameState* gameState) {
GameState_GetInput(gameState);
GameState_IncrementFrameCount(gameState);
// BENTODO
- //if (SREG(20) < 3) {
+ // if (SREG(20) < 3) {
// Audio_Update();
//}
}
@@ -265,13 +270,22 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
{
Gfx* gfx = gGfxMasterDL->taskStart;
- gSPSegment(gfx++, 0x0E, gGfxMasterDL);
+ gSPSegment(gfx++, 0x0E, gGfxMasterDL->taskStart);
__gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[3] - (uintptr_t)&D_0E000000) + 1);
__gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[0] - (uintptr_t)&D_0E000000) + 1);
__gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[1] - (uintptr_t)&D_0E000000) + 1);
__gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.disps[2] - (uintptr_t)&D_0E000000) + 1);
__gSPDisplayList(gfx++, 0x0E000000 + ((uintptr_t)&D_0E000000.debugDisp[0] - (uintptr_t)&D_0E000000) + 1);
gSPDisplayList(gfx++, gfxCtx->work.start);
+
+ gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].workBuffer);
+ gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].polyOpaBuffer);
+ gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].polyXluBuffer);
+ gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].overlayBuffer);
+
+ // BENTODO: CRASH!
+ // gSPDisplayList(gfx++, gGfxPools[gfxCtx->gfxPoolIdx % 2].debugBuffer);
+
gDPPipeSync(gfx++);
gDPFullSync(gfx++);
gSPEndDisplayList(gfx++);
@@ -283,10 +297,10 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
GfxPool* pool = &gGfxPools[gfxCtx->gfxPoolIdx % 2];
if (pool->headMagic != GFXPOOL_HEAD_MAGIC) {
- Fault_AddHungupAndCrash("../graph.c", 1054);
+ // Fault_AddHungupAndCrash("../graph.c", 1054);
}
if (pool->tailMagic != GFXPOOL_TAIL_MAGIC) {
- Fault_AddHungupAndCrash("../graph.c", 1066);
+ // Fault_AddHungupAndCrash("../graph.c", 1066);
}
}
@@ -310,6 +324,8 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
Graph_TaskSet00(gfxCtx, gameState);
gfxCtx->gfxPoolIdx++;
gfxCtx->framebufferIndex++;
+
+ Graph_ProcessGfxCommands(&gGfxMasterDL->taskStart[0]);
}
{
@@ -379,10 +395,15 @@ void RunFrame() {
Graph_StartFrame();
- //PadMgr_ThreadEntry(&gPadMgr);
+ PadMgr_ThreadEntry(&gPadMgr);
Graph_Update(&runFrameContext.gfxCtx, runFrameContext.gameState);
- Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer);
+ // ticksB = GetPerfCounter();
+
+ // Graph_ProcessGfxCommands(runFrameContext.gfxCtx.workBuffer);
+ // Graph_ProcessGfxCommands(gGfxMasterDL->taskStart);
+ // uint64_t diff = (ticksB - ticksA) / (freq / 1000);
+ // printf("Frame simulated in %ims\n", diff);
runFrameContext.state = 1;
return;
nextFrame:;
diff --git a/mm/src/code/z_kankyo.c b/mm/src/code/z_kankyo.c
index 60a60103b..fc7a25bb2 100644
--- a/mm/src/code/z_kankyo.c
+++ b/mm/src/code/z_kankyo.c
@@ -2656,7 +2656,9 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue,
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, red, green, blue, alpha);
gDPSetAlphaDither(POLY_OPA_DISP++, G_AD_DISABLE);
gDPSetColorDither(POLY_OPA_DISP++, G_CD_DISABLE);
- gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFillRect);
+
+ __gSPDisplayList(POLY_OPA_DISP++,
+ 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1);
}
if (drawFlags & FILL_SCREEN_XLU) {
@@ -2669,7 +2671,9 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue,
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_DISABLE);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE);
- gSPDisplayList(POLY_XLU_DISP++, D_0E000000.clearFillRect);
+
+ __gSPDisplayList(POLY_XLU_DISP++,
+ 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1);
}
CLOSE_DISPS(gfxCtx);
diff --git a/mm/src/code/z_rcp.c b/mm/src/code/z_rcp.c
index 891f939e8..2ae0388cb 100644
--- a/mm/src/code/z_rcp.c
+++ b/mm/src/code/z_rcp.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "sys_cfb.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-#include <libultraship/libultraship.h>
Gfx gSetupDLs[SETUPDL_MAX][6] = {
{
@@ -841,6 +840,8 @@ Gfx sFillSetupDL[] = {
G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2),
gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH),
+ // BENTODO: CRASH
+ // gsSPDisplayList(D_0E000000.setScissor),
gsSPDisplayList(0x0E0001C8 | 1),
gsDPSetBlendColor(0x00, 0x00, 0x00, 0x08),
gsSPClipRatio(FRUSTRATIO_2),
@@ -1450,8 +1451,8 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
s32 i;
gSegments[0x00] = 0;
- gSegments[0x0F] = (uintptr_t)gfxCtx->curFrameBuffer;
- gSegments[0x0E] = (uintptr_t)gGfxMasterDL;
+ gSegments[0x0F] = gfxCtx->curFrameBuffer;
+ gSegments[0x0E] = gGfxMasterDL;
zbuffer = gfxCtx->zbuffer;
@@ -1459,8 +1460,10 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
masterGfx = gGfxMasterDL->setupBuffers;
- gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments);
+ __gSPDisplayList(&masterGfx[0], 0x0E000000 + ((uintptr_t)&D_0E000000.syncSegments - (uintptr_t)&D_0E000000) + 1);
+
gSPDisplayList(&masterGfx[1], sFillSetupDL);
+
gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
if (zbuffer != NULL) {
gDPSetDepthImage(&masterGfx[3], zbuffer);
@@ -1488,7 +1491,9 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
gDPSetCycleType(&masterGfx[2], G_CYC_FILL);
gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0));
- gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect);
+
+ gSPDisplayList(&masterGfx[5], 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1);
+
gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
gSPEndDisplayList(&masterGfx[7]);
}
@@ -1501,7 +1506,8 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
gDPSetCycleType(&masterGfx[1], G_CYC_FILL);
gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1));
- gSPBranchList(&masterGfx[4], D_0E000000.clearFillRect);
+
+ gSPBranchList(&masterGfx[4], 0x0E000000 + ((uintptr_t)&D_0E000000.clearFillRect - (uintptr_t)&D_0E000000) + 1);
// Fillrect used by the above buffer clearing routines
@@ -1540,10 +1546,12 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
gSPDisplayList(DEBUG_DISP++, gGfxMasterDL->setupBuffers);
if (clearZb) {
- gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearZBuffer);
+ __gSPDisplayList(POLY_OPA_DISP++,
+ 0x0E000000 + ((uintptr_t)&D_0E000000.clearZBuffer - (uintptr_t)&D_0E000000) + 1);
}
if (clearFb) {
- gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFrameBuffer);
+ __gSPDisplayList(POLY_OPA_DISP++,
+ 0x0E000000 + ((uintptr_t)&D_0E000000.clearFrameBuffer - (uintptr_t)&D_0E000000) + 1);
}
CLOSE_DISPS(gfxCtx);
diff --git a/mm/src/overlays/gamestates/ovl_title/z_title.c b/mm/src/overlays/gamestates/ovl_title/z_title.c
index 3e87bb72e..2d9862460 100644
--- a/mm/src/overlays/gamestates/ovl_title/z_title.c
+++ b/mm/src/overlays/gamestates/ovl_title/z_title.c
@@ -10,6 +10,9 @@
#include "CIC6105.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "misc/nintendo_rogo_static/nintendo_rogo_static.h"
+#include "overlays/gamestates/ovl_select/z_select.h"
+#include <stdlib.h>
+#include "BenPort.h"
void ConsoleLogo_UpdateCounters(ConsoleLogoState* this) {
if ((this->coverAlpha == 0) && (this->visibleDuration != 0)) {
@@ -76,6 +79,8 @@ void ConsoleLogo_Draw(GameState* thisx) {
eye.x = -4949.148f;
eye.y = 4002.5417f;
eye.z = 1119.0837f;
+ void* shine = ResourceMgr_LoadTexOrDListByName(gNintendo64LogoTextShineTex);
+ char* logo = ResourceMgr_LoadTexOrDListByName(gNintendo64LogoTextTex);
Hilite_DrawOpa(&object, &eye, &lightDir, this->state.gfxCtx);
@@ -99,13 +104,13 @@ void ConsoleLogo_Draw(GameState* thisx) {
COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 170, 255, 255, 255);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 255, 128);
- gDPLoadMultiBlock(POLY_OPA_DISP++, gNintendo64LogoTextShineTex, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0,
- G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11);
+ gDPLoadMultiBlock(POLY_OPA_DISP++, shine, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11);
for (idx = 0, y = 94; idx < 16; idx++, y += 2) {
- gDPLoadTextureBlock(POLY_OPA_DISP++, &((u8*)gNintendo64LogoTextTex)[0x180 * idx], G_IM_FMT_I, G_IM_SIZ_8b, 192,
- 2, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
- G_TX_NOLOD, G_TX_NOLOD);
+ gDPLoadTextureBlock(POLY_OPA_DISP++, &((u8*)logo)[0x180 * idx], G_IM_FMT_I, G_IM_SIZ_8b, 192, 2, 0,
+ G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
+ G_TX_NOLOD);
gDPSetTileSize(POLY_OPA_DISP++, 1, this->uls, (this->ult & 0x7F) - idx * 4, 0, 0);
gSPTextureRectangle(POLY_OPA_DISP++, 97 << 2, y << 2, (97 + 192) << 2, (y + 2) << 2, G_TX_RENDERTILE, 0, 0,
@@ -119,6 +124,9 @@ void ConsoleLogo_Draw(GameState* thisx) {
CLOSE_DISPS(this->state.gfxCtx);
}
+// hack for minibuild work
+void MapSelect_Init(GameState* thisx);
+void FileSelect_Init(GameState* thisx);
void ConsoleLogo_Main(GameState* thisx) {
ConsoleLogoState* this = (ConsoleLogoState*)thisx;
@@ -126,7 +134,7 @@ void ConsoleLogo_Main(GameState* thisx) {
OPEN_DISPS(this->state.gfxCtx);
- gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment);
+ gSPSegment(OVERLAY_DISP++, 0x01, this->staticSegment);
ConsoleLogo_UpdateCounters(this);
ConsoleLogo_Draw(&this->state);
@@ -136,7 +144,8 @@ void ConsoleLogo_Main(GameState* thisx) {
gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN;
STOP_GAMESTATE(&this->state);
- SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState));
+ // hack
+ SET_NEXT_GAMESTATE(&this->state, MapSelect_Init, sizeof(MapSelectState));
}
CLOSE_DISPS(this->state.gfxCtx);