]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/dac.cpp
Moving GUI stuff to proper subdirectory for easier maintenance. :-)
[virtualjaguar] / src / dac.cpp
index 4b4bfab2e8b2254dbd4a9fac852e902a530b5f7c..6a43cff0b54b676d525219dee8a8db486b0be8a8 100644 (file)
 // work correctly...! Perhaps just need to set up SSI stuff so BUTCH doesn't get
 // confused...
 
+// ALSO: Need to implement some form of proper locking to replace the clusterfuck
+//       that is the current spinlock implementation. Since the DSP is a separate
+//       entity, could we get away with running it in the sound IRQ?
+
+// ALSO: It may be a good idea to physically separate the left and right buffers
+//       to prevent things like the DSP filling only one side and such. Do such
+//       mono modes exist on the Jag? Seems to according to Super Burnout.
+
 #include "dac.h"
 
 #include "SDL.h"
-#include "m68k.h"
+#include "gui.h"
 #include "jaguar.h"
-#include "settings.h"
 #include "log.h"
+#include "m68k.h"
+#include "settings.h"
 
 //#define DEBUG_DAC
 
@@ -211,8 +220,10 @@ WriteLog("Tail=%X, Head=%X", ltail, lhead);
        WriteLog("LTail=%X, LHead=%X, BUFFER_SIZE-1=%X\n", LeftFIFOTailPtr, LeftFIFOHeadPtr, BUFFER_SIZE - 1);
        WriteLog("RTail=%X, RHead=%X, BUFFER_SIZE-1=%X\n", RightFIFOTailPtr, RightFIFOHeadPtr, BUFFER_SIZE - 1);
        WriteLog("From while: Tail=%X, Head=%X", (LeftFIFOTailPtr + 2) & (BUFFER_SIZE - 1), LeftFIFOHeadPtr);
-       log_done();
-       exit(0);
+//     LogDone();
+//     exit(0);
+       GUICrashGracefully("Stuck in left DAC spinlock!");
+       return;
 }
                }//*/
 
@@ -281,6 +292,8 @@ LTail=60D8, LHead=60D8, BUFFER_SIZE-1=FFFF
 RTail=DB, RHead=60D9, BUFFER_SIZE-1=FFFF
 From while: Tail=60DA, Head=60D8
 */
+#warning Spinlock problem--!!! FIX !!!
+#warning Odd: The right FIFO is empty, but the left FIFO is full!
                // Spin until buffer has been drained (for too fast processors!)...
 uint32 spin = 0;
                while (((RightFIFOTailPtr + 2) & (BUFFER_SIZE - 1)) == RightFIFOHeadPtr)//;
@@ -298,8 +311,10 @@ WriteLog("Tail=%X, Head=%X", rtail, rhead);
        WriteLog("LTail=%X, LHead=%X, BUFFER_SIZE-1=%X\n", LeftFIFOTailPtr, LeftFIFOHeadPtr, BUFFER_SIZE - 1);
        WriteLog("RTail=%X, RHead=%X, BUFFER_SIZE-1=%X\n", RightFIFOTailPtr, RightFIFOHeadPtr, BUFFER_SIZE - 1);
        WriteLog("From while: Tail=%X, Head=%X", (RightFIFOTailPtr + 2) & (BUFFER_SIZE - 1), RightFIFOHeadPtr);
-       log_done();
-       exit(0);
+//     LogDone();
+//     exit(0);
+       GUICrashGracefully("Stuck in right DAC spinlock!");
+       return;
 }
                }//*/
 
@@ -331,9 +346,13 @@ WriteLog("Tail=%X, Head=%X", rtail, rhead);
                                {
                                        if (SDL_OpenAudio(&desired, NULL) < 0)  // NULL means SDL guarantees what we want
                                        {
+// This is bad, Bad, BAD !!! DON'T ABORT BECAUSE WE DIDN'T GET OUR FREQ! !!! FIX !!!
+#warning !!! FIX !!! Aborting because of SDL audio problem is bad!
                                                WriteLog("DAC: Failed to initialize SDL sound: %s.\nDesired freq: %u\nShutting down!\n", SDL_GetError(), desired.freq);
-                                               log_done();
-                                               exit(1);
+//                                             LogDone();
+//                                             exit(1);
+                                               GUICrashGracefully("Failed to initialize SDL sound!");
+                                               return;
                                        }
                                }
 
@@ -382,5 +401,5 @@ uint16 DACReadWord(uint32 offset, uint32 who/*= UNKNOWN*/)
        else if (offset == RRXD + 2)
                return rrxd;
 
-       return 0xFFFF;  // May need SSTAT as well... (but may be a Jaguar II only feature)              
+       return 0xFFFF;  // May need SSTAT as well... (but may be a Jaguar II only feature)
 }