From 261689d3d123df541bb201babfa06a02861e2aaa Mon Sep 17 00:00:00 2001 From: StapleButter Date: Fri, 17 Feb 2017 19:34:41 +0100 Subject: [PATCH] 'FIFO full' hack for SM64DS. --- GPU3D.cpp | 19 +++++++++++-------- GPU3D.h | 2 ++ NDS.cpp | 2 +- melonDS.depend | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/GPU3D.cpp b/GPU3D.cpp index de860f23..e38f7c23 100644 --- a/GPU3D.cpp +++ b/GPU3D.cpp @@ -841,8 +841,6 @@ void SubmitVertex() -int logflag = 0; - void CmdFIFOWrite(CmdFIFOEntry& entry) { if (CmdFIFO->IsEmpty() && !CmdPIPE->IsFull()) @@ -853,10 +851,17 @@ void CmdFIFOWrite(CmdFIFOEntry& entry) { if (CmdFIFO->IsFull()) { - if (!logflag) printf("!!! GX FIFO FULL\n"); - logflag = 1; - //NDS::debug(0); - return; + //printf("!!! GX FIFO FULL\n"); + //return; + + // temp. hack + // SM64DS seems to overflow the FIFO occasionally + // either leftover bugs in our implementation, or the game accidentally doing that + // TODO: investigate. + // TODO: implement this behavior properly (freezes the bus until the FIFO isn't full anymore) + + while (CmdFIFO->IsFull()) + ExecuteCommand(); } CmdFIFO->Write(entry); @@ -878,8 +883,6 @@ CmdFIFOEntry CmdFIFORead() CheckFIFOIRQ(); } - logflag = 0; - return ret; } diff --git a/GPU3D.h b/GPU3D.h index cbb8234a..c95e3b71 100644 --- a/GPU3D.h +++ b/GPU3D.h @@ -56,6 +56,8 @@ bool Init(); void DeInit(); void Reset(); +void ExecuteCommand(); + void Run(s32 cycles); void CheckFIFOIRQ(); void CheckFIFODMA(); diff --git a/NDS.cpp b/NDS.cpp index 182abe16..63013ab8 100644 --- a/NDS.cpp +++ b/NDS.cpp @@ -311,7 +311,7 @@ void Reset() // test //LoadROM(); //LoadFirmware(); - if (NDSCart::LoadROM("rom/nsmb.nds")) + if (NDSCart::LoadROM("rom/sm64ds.nds")) Running = true; // hax } diff --git a/melonDS.depend b/melonDS.depend index bdce235e..e0cd1cef 100644 --- a/melonDS.depend +++ b/melonDS.depend @@ -146,7 +146,7 @@ "NDS.h" "NDSCart.h" -1487287868 c:\documents\sources\melonds\gpu3d.h +1487356069 c:\documents\sources\melonds\gpu3d.h 1487354054 source:c:\documents\sources\melonds\gpu3d.cpp