From 705ebb87275778cf6cdcf39435f72e9660b142a2 Mon Sep 17 00:00:00 2001 From: CreateSource <72283721+abnormalhare@users.noreply.github.com> Date: Sat, 15 Mar 2025 12:30:27 -0400 Subject: [PATCH 1/3] match linker & some funcs (#572) * name audio.c and board/audio.c * fix audio, complete board/basic_space, battle * revert changes that broke build * completely finish New and NewMore.cp, for some reason NewMore fails checksum * finally match NewMore.cp * match NMWException.cpp * match mem_TRK * match TRK with correct linker, uses Revo's notify func --- configure.py | 12 ++++++------ src/TRK_MINNOW_DOLPHIN/notify.c | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/configure.py b/configure.py index f861ee4b..1f1883bb 100644 --- a/configure.py +++ b/configure.py @@ -671,10 +671,10 @@ config.libs = [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__mem.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/New.cp", extra_cflags=["-Cpp_exceptions on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/NewMore.cp", extra_cflags=["-Cpp_exceptions on", "-RTTI on"]), - Object(NonMatching, "Runtime.PPCEABI.H/NMWException.cpp"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/NMWException.cpp", extra_cflags=["-Cpp_exceptions on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/runtime.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/__init_cpp_exceptions.cpp"), - Object(NonMatching, "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp", extra_cflags=["-Cpp_exceptions on"]), + Object(NonMatching, "Runtime.PPCEABI.H/Gecko_ExceptionPPC.cpp", extra_cflags=["-Cpp_exceptions on", "-RTTI on"]), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "Runtime.PPCEABI.H/GCN_mem_alloc.c"), ], }, @@ -734,7 +734,7 @@ config.libs = [ }, { "lib": "TRK_MINNOW_DOLPHIN", - "mw_version": config.linker_version, + "mw_version": "GC/1.3", "cflags": cflags_trk, "host": False, "objects": [ @@ -744,14 +744,14 @@ config.libs = [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msg.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msgbuf.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/serpoll.c"), - Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/usr_put.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/usr_put.c", mw_version="GC/1.3.2"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dispatch.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/msghndlr.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/support.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mutex_TRK.c"), - Object(NonMatching, "TRK_MINNOW_DOLPHIN/notify.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/notify.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/flush_cache.c"), - Object(NonMatching, "TRK_MINNOW_DOLPHIN/mem_TRK.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mem_TRK.c"), Object(NonMatching, "TRK_MINNOW_DOLPHIN/targimpl.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targsupp.s"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/__exception.s"), diff --git a/src/TRK_MINNOW_DOLPHIN/notify.c b/src/TRK_MINNOW_DOLPHIN/notify.c index 7dce4537..bd41e2f7 100644 --- a/src/TRK_MINNOW_DOLPHIN/notify.c +++ b/src/TRK_MINNOW_DOLPHIN/notify.c @@ -4,6 +4,19 @@ #include "TRK_MINNOW_DOLPHIN/ppc/Generic/targimpl.h" #include "PowerPC_EABI_Support/MetroTRK/trk.h" +inline DSError TRKDoNotifyStopped_Inline(TRKBuffer* msg, MessageCommandID cmd) { + DSError err; + + if (msg->position >= 0x880) { + err = DS_MessageBufferOverflow; + } else { + msg->data[msg->position++] = cmd; + msg->length+=1; + err = 0; + } + return err; +} + DSError TRKDoNotifyStopped(MessageCommandID cmd) { DSError err; @@ -13,13 +26,7 @@ DSError TRKDoNotifyStopped(MessageCommandID cmd) err = TRKGetFreeBuffer(&bufIdx, &msg); if (err == DS_NoError) { - if (msg->position >= 0x880) { - err = DS_MessageBufferOverflow; - } else { - msg->data[msg->position++] = cmd; - ++msg->length; - err = 0; - } + err = TRKDoNotifyStopped_Inline(msg, cmd); if (err == DS_NoError) { if (cmd == DSMSG_NotifyStopped) { From db57c1ef500ba4b560da9941c106507cb5510f02 Mon Sep 17 00:00:00 2001 From: CreateSource <72283721+abnormalhare@users.noreply.github.com> Date: Sat, 15 Mar 2025 13:03:58 -0400 Subject: [PATCH 2/3] match TRKReadUARTPoll (#573) * name audio.c and board/audio.c * fix audio, complete board/basic_space, battle * revert changes that broke build * completely finish New and NewMore.cp, for some reason NewMore fails checksum * finally match NewMore.cp * match NMWException.cpp * match mem_TRK * match TRK with correct linker, uses Revo's notify func * match TRKReadUARTPoll --- .vscode/settings.json | 6 ++++- configure.py | 2 +- src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c | 33 ++++++++++++----------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8b2e4ab0..ac4cca7f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,7 @@ "files.insertFinalNewline": true, "files.trimFinalNewlines": true, "files.associations": { + "*.cp": "cpp", "*.csv": "plaintext", "*.s": "plaintext", "*.json": "jsonc", @@ -64,7 +65,10 @@ "m427dll.h": "c", "sprite.h": "c", "gamework_data.h": "c", - "roll.h": "c" + "roll.h": "c", + "msghndlr.h": "c", + "dispatch.h": "c", + "trk.h": "c" }, "search.useIgnoreFiles": false, "search.exclude": { diff --git a/configure.py b/configure.py index 1f1883bb..5613bb0e 100644 --- a/configure.py +++ b/configure.py @@ -758,7 +758,7 @@ config.libs = [ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dolphin_trk.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mpc_7xx_603e.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/main_TRK.c"), - Object(NonMatching, "TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/targcont.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/target_options.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "TRK_MINNOW_DOLPHIN/mslsupp.c"), diff --git a/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c b/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c index 9fbb6aeb..0b6947ed 100644 --- a/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c +++ b/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c @@ -95,8 +95,6 @@ int InitMetroTRKCommTable(int hwId) return result; } -void TRKUARTInterruptHandler() { } - DSError TRKInitializeIntDrivenUART(u32 param_0, u32 param_1, u32 param_2, volatile u8** param_3) { @@ -106,15 +104,15 @@ DSError TRKInitializeIntDrivenUART(u32 param_0, u32 param_1, u32 param_2, void EnableEXI2Interrupts(void) { gDBCommTable.init_interrupts_func(); } -int TRKPollUART(void) { return gDBCommTable.peek_func(); } +inline int TRKPollUART(void) { return gDBCommTable.peek_func(); } -UARTError TRKReadUARTN(void* bytes, u32 length) +inline UARTError TRKReadUARTN(void* bytes, u32 length) { int readErr = gDBCommTable.read_func(bytes, length); return readErr == 0 ? 0 : -1; } -UARTError TRKWriteUARTN(const void* bytes, u32 length) +inline UARTError TRKWriteUARTN(const void* bytes, u32 length) { int writeErr = gDBCommTable.write_func(bytes, length); return writeErr == 0 ? 0 : -1; @@ -141,28 +139,29 @@ UARTError WriteUART1(u8 arg0) return 0; } -UARTError TRKReadUARTPoll(u8* arg0) -{ - UARTError readErr = 4; +s32 TRKReadUARTPoll(u8* arg0) { + UARTError var_r29; + s32 cnt; + var_r29 = 4; if (gReadPos >= gReadCount) { gReadPos = 0; - gReadCount = TRKPollUART(); - if (gReadCount > 0) { - if (gReadCount > BUFF_LEN) { - gReadCount = BUFF_LEN; + cnt = gReadCount = TRKPollUART(); + if (cnt > 0) { + if (cnt > 0x110A) { + gReadCount = 0x110A; } - readErr = TRKReadUARTN(gReadBuf, gReadCount); - if (readErr != 0) { + var_r29 = TRKReadUARTN(gReadBuf, gReadCount); + if (var_r29 != 0) { gReadCount = 0; } } } if (gReadPos < gReadCount) { *arg0 = gReadBuf[gReadPos++]; - readErr = 0; + var_r29 = 0; } - return readErr; + return var_r29; } void ReserveEXI2Port(void) { gDBCommTable.open_func(); } @@ -170,3 +169,5 @@ void ReserveEXI2Port(void) { gDBCommTable.open_func(); } void UnreserveEXI2Port(void) { gDBCommTable.close_func(); } void TRK_board_display(char* str) { OSReport(str); } + +void TRKUARTInterruptHandler() { } From 5c40f5a8492d628e04f36ca28582a69d317bce19 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sat, 15 Mar 2025 10:11:33 -0700 Subject: [PATCH 3/3] Fix TRKReadUARTPoll var naming (#574) --- src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c b/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c index 0b6947ed..46eb1107 100644 --- a/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c +++ b/src/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c @@ -139,29 +139,29 @@ UARTError WriteUART1(u8 arg0) return 0; } -s32 TRKReadUARTPoll(u8* arg0) { - UARTError var_r29; +UARTError TRKReadUARTPoll(u8* arg0) +{ + UARTError readErr = 4; s32 cnt; - var_r29 = 4; if (gReadPos >= gReadCount) { gReadPos = 0; cnt = gReadCount = TRKPollUART(); if (cnt > 0) { - if (cnt > 0x110A) { - gReadCount = 0x110A; + if (cnt > BUFF_LEN) { + gReadCount = BUFF_LEN; } - var_r29 = TRKReadUARTN(gReadBuf, gReadCount); - if (var_r29 != 0) { + readErr = TRKReadUARTN(gReadBuf, gReadCount); + if (readErr != 0) { gReadCount = 0; } } } if (gReadPos < gReadCount) { *arg0 = gReadBuf[gReadPos++]; - var_r29 = 0; + readErr = 0; } - return var_r29; + return readErr; } void ReserveEXI2Port(void) { gDBCommTable.open_func(); }