]> Shamusworld >> Repos - stargem2/commitdiff
OK, really now, this time I mean it. :-P
authorShamus Hammons <jlhamm@acm.org>
Wed, 11 Feb 2009 05:12:12 +0000 (05:12 +0000)
committerShamus Hammons <jlhamm@acm.org>
Wed, 11 Feb 2009 05:12:12 +0000 (05:12 +0000)
src/sound.cpp

index 281aee286f8894a56175a9141a9cf26a8aa54085..8010d8985667c04bae056bcfe51c6f5d42cfa0fb 100755 (executable)
@@ -10,6 +10,8 @@
 // ---  ----------  ------------------------------------------------------------
 // JLH  06/15/2006  Added changelog ;-)
 // JLH  06/15/2006  Scrubbed all BYTE, WORD & DWORD references from the code
+// JLH  02/10/2009  Fixed sound IRQ callback so that CPU samples are taken at
+//                  cycle exact boundaries
 //
 // Notes:
 //   The sound CPU (6808) runs at 894,750 (3,579,000 / 4) Hz.
@@ -87,15 +89,15 @@ void SDLSoundCallback(void * userdata, Uint8 * buffer, int length)
 
 #define CYCLE_EXACT_SOUND
 #ifdef CYCLE_EXACT_SOUND
-       float overflow = 0.0;
-       uint32 time = 20;
+       static float overflow = 0.0;
+       static uint32 time = 20;
 #endif
 
        while (cnt != length)
        {
                // This is close, but not cycle exact (exact would be 20.289115646...)
 
-//Need to figure out how to get that fraction to execute... !!! FIX !!!
+//Need to figure out how to get that fraction to execute... !!! FIX !!! [DONE]
 /*
 One way would be to use a fractional accumulator, then subtract 1 every
 time it overflows. Like so:
@@ -124,7 +126,7 @@ while (!done)
 #endif
                buffer[cnt++] = sram[0x0400];                           // Fill the buffer with the PIA output value
 #ifdef CYCLE_EXACT_SOUND
-               overflow += 0.289115646;
+               overflow += 0.289115646;                                        // Fractional part of CPU cycles...
 
                if (overflow > 1.0)
                {