diff options
author | StapleButter <thetotalworm@gmail.com> | 2017-02-17 19:34:41 +0100 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2017-02-17 19:34:41 +0100 |
commit | 261689d3d123df541bb201babfa06a02861e2aaa (patch) | |
tree | 4cbe6fbeb86c45874c9ad20e8f2f793984221d0e | |
parent | 97d76addd9c876a3438e8af1f83acc8bd20be70a (diff) |
'FIFO full' hack for SM64DS.
-rw-r--r-- | GPU3D.cpp | 19 | ||||
-rw-r--r-- | GPU3D.h | 2 | ||||
-rw-r--r-- | NDS.cpp | 2 | ||||
-rw-r--r-- | melonDS.depend | 2 |
4 files changed, 15 insertions, 10 deletions
@@ -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; } @@ -56,6 +56,8 @@ bool Init(); void DeInit(); void Reset(); +void ExecuteCommand(); + void Run(s32 cycles); void CheckFIFOIRQ(); void CheckFIFODMA(); @@ -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 bdce235..e0cd1ce 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 <stdio.h> |