diff --git a/Makefile b/Makefile index d2c877c..1bc16ec 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,10 @@ ifeq ($(PORTAL64_WITH_DEBUGGER),1) LCDEFS += -DPORTAL64_WITH_DEBUGGER endif +ifeq ($(PORTAL64_WITH_RSP_PROFILER),1) +LCDEFS += -DPORTAL64_WITH_RSP_PROFILER +endif + BASE_TARGET_NAME = build/portal LD_SCRIPT = portal.ld @@ -536,7 +540,7 @@ CODEOBJECTS_NO_DEBUG = $(CODEOBJECTS) DATA_OBJECTS = build/assets/materials/images_mat.o ifeq ($(PORTAL64_WITH_DEBUGGER),1) -CODEOBJECTS_NO_DEBUG += build/debugger/debugger_stub.o build/debugger/serial.o +CODEOBJECTS_NO_DEBUG += build/debugger/debugger_stub.o build/debugger/serial_stub.o endif $(CODESEGMENT)_no_debug.o: $(CODEOBJECTS_NO_DEBUG) diff --git a/src/graphics/profile_task.c b/src/graphics/profile_task.c index 5dc0587..5ee9d5d 100644 --- a/src/graphics/profile_task.c +++ b/src/graphics/profile_task.c @@ -8,6 +8,8 @@ #endif #include +#include "../graphics/graphics.h" +#include "../util/memory.h" #define VIDEO_MSG 666 #define RSP_DONE_MSG 667 @@ -49,7 +51,7 @@ void printDisplayList(Gfx* dl, int depth, int* segments) { if (command == G_DL) { int address = dl->words.w1; int segment = _SHIFTR(address, 24, 4); - printDisplayList((Gfx*)(segments[segment] + (address & 0xFFFFFF)), depth + 1, segments); + printDisplayList((Gfx*)PHYS_TO_K0((segments[segment] + (address & 0xFFFFFF))), depth + 1, segments); } if (command == G_MOVEWORD) { @@ -71,7 +73,7 @@ void printDisplayList(Gfx* dl, int depth, int* segments) { #endif } -void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task) { +void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task, u16* framebuffer) { // block scheduler thread osSetThreadPri(currentThread, RSP_PROFILE_PRIORITY); @@ -86,6 +88,8 @@ void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task) { // wait for DP to be available while (IO_READ(DPC_STATUS_REG) & (DPC_STATUS_DMA_BUSY | DPC_STATUS_END_VALID | DPC_STATUS_START_VALID)); + zeroMemory(framebuffer, sizeof(u16) * SCREEN_WD * SCREEN_HT); + OSMesgQueue messageQueue; OSMesg messages[4]; diff --git a/src/graphics/profile_task.h b/src/graphics/profile_task.h index 3be2c53..e2b658f 100644 --- a/src/graphics/profile_task.h +++ b/src/graphics/profile_task.h @@ -4,7 +4,7 @@ #include #include -void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task); +void profileTask(OSSched* scheduler, OSThread* currentThread, OSTask* task, u16* framebuffer); void profileMapAddress(void* ramAddress, const char* name); void profileClearAddressMap(); diff --git a/src/main.c b/src/main.c index 4b73f5a..491f62b 100644 --- a/src/main.c +++ b/src/main.c @@ -333,8 +333,7 @@ static void gameProc(void* arg) { #if PORTAL64_WITH_RSP_PROFILER if (controllerGetButtonDown(2, START_BUTTON)) { struct GraphicsTask* task = &gGraphicsTasks[drawBufferIndex]; - zeroMemory(task->framebuffer, sizeof(u16) * SCREEN_WD * SCREEN_HT); - profileTask(&scheduler, &gameThread, &task->task.list); + profileTask(&scheduler, &gameThread, &task->task.list, task->framebuffer); } #endif timeUpdateDelta();