- if (RightFIFOTailPtr + 2 != RightFIFOHeadPtr)
- {
- SDL_LockAudio();
- RightFIFOTailPtr = (RightFIFOTailPtr + 2) % BUFFER_SIZE;
- DACBuffer[RightFIFOTailPtr] = data;
-// Aaron's code does this, but I don't know why...
-// DACBuffer[RightFIFOTailPtr] = data ^ 0x8000;
- SDL_UnlockAudio();
- }
+ // Spin until buffer has been drained (for too fast processors!)...
+//uint32 spin = 0;
+ while (((RightFIFOTailPtr + 2) & (BUFFER_SIZE - 1)) == RightFIFOHeadPtr);
+/* {
+spin++;
+//if ((spin & 0x0FFFFFFF) == 0)
+// WriteLog("Tail=%X, Head=%X, BUFFER_SIZE-1=%X\n", RightFIFOTailPtr, RightFIFOHeadPtr, BUFFER_SIZE - 1);
+
+if (spin == 0xFFFF0000)
+{
+uint32 rtail = RightFIFOTailPtr, rhead = RightFIFOHeadPtr;
+WriteLog("Tail=%X, Head=%X\n", rtail, rhead);
+
+ WriteLog("\nStuck in right DAC spinlock!\nAborting!\n\n");
+ WriteLog("Tail=%X, Head=%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);
+}
+ }//*/
+
+//This is wrong if (RightFIFOTailPtr + 2 != RightFIFOHeadPtr)
+// {
+ SDL_LockAudio();
+ RightFIFOTailPtr = (RightFIFOTailPtr + 2) % BUFFER_SIZE;
+ DACBuffer[RightFIFOTailPtr] = data;
+ SDL_UnlockAudio();
+// }
+/*#ifdef DEBUG_DAC