+static double cyclesForSample = 0;
+static void AppleTimer(uint16_t cycles)
+{
+ // Handle PHI2 clocked stuff here...
+ bool via1T1HitZero = (mbvia[0].timer1counter <= cycles ? true : false);
+ bool via2T1HitZero = (mbvia[1].timer1counter <= cycles ? true : false);
+
+ mbvia[0].timer1counter -= cycles;
+ mbvia[0].timer2counter -= cycles;
+ mbvia[1].timer1counter -= cycles;
+ mbvia[1].timer2counter -= cycles;
+
+ if (via1T1HitZero)
+ {
+ if (mbvia[0].acr & 0x40)
+ {
+ mbvia[0].timer1counter += mbvia[0].timer1latch;
+
+ if (mbvia[0].ier & 0x40)
+ {
+ mbvia[0].ifr |= (0x80 | 0x40);
+ AssertLine(V65C02_ASSERT_LINE_IRQ);
+ }
+ }
+ else
+ {
+ mbvia[0].ier &= 0x3F; // Disable T1 interrupt (VIA #1)
+ }
+ }
+
+ if (via2T1HitZero)
+ {
+ if (mbvia[1].acr & 0x40)
+ {
+ mbvia[1].timer1counter += mbvia[1].timer1latch;
+
+ if (mbvia[1].ier & 0x40)
+ {
+ mbvia[1].ifr |= (0x80 | 0x40);
+ AssertLine(V65C02_ASSERT_LINE_NMI);
+ }
+ }
+ else
+ {
+ mbvia[1].ier &= 0x3F; // Disable T1 interrupt (VIA #2)
+ }
+ }
+
+#if 1
+ // Handle sound
+ // 21.26009 cycles per sample @ 48000 (running @ 1,020,484.32 Hz)
+ // Noooooope. We need ~801 cycles per frame. Averaging about 786, so missing 15 or so.
+ // 16.688154500083 ms = 1 frame
+ cyclesForSample += (double)cycles;
+
+ if (cyclesForSample >= 21.26009)
+ {
+#if 0
+sampleClock = GetCurrentV65C02Clock();
+WriteLog(" cyclesForSample = %lf (%d samples, cycles=%d)\n", cyclesForSample, sampleClock - lastSampleClock, cycles);
+sampleCount++;
+lastSampleClock = sampleClock;
+#endif
+ WriteSampleToBuffer();
+ cyclesForSample -= 21.26009;
+ }
+#endif
+}
+
+