cd: rewrite pcm
[picodrive.git] / pico / sound / sound.c
index 1f23e1a..ec0e205 100644 (file)
 #include "ym2612.h"\r
 #include "sn76496.h"\r
 #include "../pico_int.h"\r
-#include "../cd/pcm.h"\r
+#include "../cd/cue.h"\r
 #include "mix.h"\r
 \r
+#define SIMPLE_WRITE_SOUND 0\r
+\r
 void (*PsndMix_32_to_16l)(short *dest, int *src, int count) = mix_32_to_16l_stereo;\r
 \r
 // master int buffer to mix to\r
@@ -158,9 +160,6 @@ void PsndRerate(int preserve_state)
   // recalculate dac info\r
   dac_recalculate();\r
 \r
-  if (PicoAHW & PAHW_MCD)\r
-    pcm_set_rate(PsndRate);\r
-\r
   // clear all buffers\r
   memset32(PsndBuffer, 0, sizeof(PsndBuffer)/4);\r
   memset(cdda_out_buffer, 0, sizeof(cdda_out_buffer));\r
@@ -198,14 +197,6 @@ PICO_INTERNAL void PsndDoDAC(int line_to)
     short *d = PsndOut + pos;\r
     for (; len > 0; len--, d++)  *d = dout;\r
   }\r
-\r
-#if 0\r
-  if (do_pcm) {\r
-    int *d = PsndBuffer;\r
-    d += (PicoOpt&8) ? pos*2 : pos;\r
-    pcm_update(d, len, 1);\r
-  }\r
-#endif\r
 }\r
 \r
 // cdda\r
@@ -258,7 +249,7 @@ PICO_INTERNAL void cdda_start_play(void)
     return;\r
   }\r
 \r
-  if (Pico_mcd->TOC.Tracks[i].ftype == TYPE_MP3)\r
+  if (Pico_mcd->TOC.Tracks[i].ftype == CT_MP3)\r
   {\r
     int pos1024 = 0;\r
 \r
@@ -278,7 +269,7 @@ PICO_INTERNAL void cdda_start_play(void)
   cdda_stream = Pico_mcd->TOC.Tracks[i].F;\r
   PicoCDBufferFlush(); // buffering relies on fp not being touched\r
   pm_seek(cdda_stream, lba_offset * 2352, SEEK_SET);\r
-  if (Pico_mcd->TOC.Tracks[i].ftype == TYPE_WAV)\r
+  if (Pico_mcd->TOC.Tracks[i].ftype == CT_WAV)\r
   {\r
     // skip headers, assume it's 44kHz stereo uncompressed\r
     pm_seek(cdda_stream, 44, SEEK_CUR);\r
@@ -306,9 +297,7 @@ static int PsndRender(int offset, int length)
   int  buf32_updated = 0;\r
   int *buf32 = PsndBuffer+offset;\r
   int stereo = (PicoOpt & 8) >> 3;\r
-  // emulating CD && PCM option enabled && PCM chip on && have enabled channels\r
-  int do_pcm = (PicoAHW & PAHW_MCD) && (PicoOpt&POPT_EN_MCD_PCM) &&\r
-               (Pico_mcd->pcm.control & 0x80) && Pico_mcd->pcm.enabled;\r
+\r
   offset <<= stereo;\r
 \r
   pprof_start(sound);\r
@@ -343,8 +332,8 @@ static int PsndRender(int offset, int length)
   (void)buf32_updated;\r
 \r
   // CD: PCM sound\r
-  if (do_pcm) {\r
-    pcm_update(buf32, length, stereo);\r
+  if (PicoAHW & PAHW_MCD) {\r
+    pcd_pcm_update(buf32, length, stereo);\r
     //buf32_updated = 1;\r
   }\r
 \r
@@ -356,7 +345,7 @@ static int PsndRender(int offset, int length)
     // note: only 44, 22 and 11 kHz supported, with forced stereo\r
     int index = Pico_mcd->scd.Cur_Track - 1;\r
 \r
-    if (Pico_mcd->TOC.Tracks[index].ftype == TYPE_MP3)\r
+    if (Pico_mcd->TOC.Tracks[index].ftype == CT_MP3)\r
       mp3_update(buf32, length, stereo);\r
     else\r
       cdda_raw_update(buf32, length);\r