audio, fix sound issues in some intros
authorkub <derkub@gmail.com>
Thu, 16 Jul 2020 17:05:46 +0000 (19:05 +0200)
committerkub <derkub@gmail.com>
Thu, 16 Jul 2020 17:29:49 +0000 (19:29 +0200)
pico/memory.c
pico/sound/sound.c

index c0ba9ff..ff41ac9 100644 (file)
@@ -946,9 +946,9 @@ static int ym2612_write_local(u32 a, u32 d, int is_from_z80)
   {\r
     int cycles = is_from_z80 ? z80_cyclesDone() : z80_cycles_from_68k();\r
     //elprintf(EL_STATUS, "%03i dac w %08x z80 %i", cycles, d, is_from_z80);\r
-    ym2612.dacout = ((int)d - 0x80) << 6;\r
     if (ym2612.dacen)\r
       PsndDoDAC(cycles);\r
+    ym2612.dacout = ((int)d - 0x80) << 6;\r
     return 0;\r
   }\r
 \r
@@ -1008,6 +1008,9 @@ static int ym2612_write_local(u32 a, u32 d, int is_from_z80)
         case 0x27: { /* mode, timer control */\r
           int old_mode = ym2612.OPN.ST.mode;\r
           int cycles = is_from_z80 ? z80_cyclesDone() : z80_cycles_from_68k();\r
+\r
+          if (ym2612.OPN.ST.mode != d)\r
+            PsndDoFM(cycles);\r
           ym2612.OPN.ST.mode = d;\r
 \r
           elprintf(EL_YMTIMER, "st mode %02x", d);\r
@@ -1066,6 +1069,7 @@ static int ym2612_write_local(u32 a, u32 d, int is_from_z80)
 \r
 \r
 #define ym2612_read_local() \\r
+  PsndDoFM(xcycles>>8); \\r
   if (xcycles >= Pico.t.timer_a_next_oflow) \\r
     ym2612.OPN.ST.status |= (ym2612.OPN.ST.mode >> 2) & 1; \\r
   if (xcycles >= Pico.t.timer_b_next_oflow) \\r
index a6d55df..0b371f2 100644 (file)
@@ -169,8 +169,8 @@ PICO_INTERNAL void PsndDoFM(int cyc_to)
   // Q16, number of samples since last call\r
   len = (cyc_to * Pico.snd.clkl_mult) - Pico.snd.fm_pos;\r
 \r
-  // don't do this too often (about every 4th scanline)\r
-  if (len >> 20 <= PicoIn.sndRate >> 12)\r
+  // don't do this too often (about once every canline)\r
+  if (len >> 16 <= PicoIn.sndRate >> 10)\r
     return;\r
 \r
   // update position and calculate buffer offset and length\r