debug bgm player, sound code refactoring
[picodrive.git] / pico / sound / sound.c
index 39ae291..daf62b0 100644 (file)
@@ -297,7 +297,7 @@ PICO_INTERNAL void PsndClear(void)
 }\r
 \r
 \r
-PICO_INTERNAL int PsndRender(int offset, int length)\r
+static int PsndRender(int offset, int length)\r
 {\r
   int  buf32_updated = 0;\r
   int *buf32 = PsndBuffer+offset;\r
@@ -361,6 +361,35 @@ PICO_INTERNAL int PsndRender(int offset, int length)
   return length;\r
 }\r
 \r
+// to be called on 224 or line_sample scanlines only\r
+PICO_INTERNAL void PsndGetSamples(int y)\r
+{\r
+#if SIMPLE_WRITE_SOUND\r
+  if (y != 224) return;\r
+  PsndRender(0, PsndLen);\r
+  if (PicoWriteSound) PicoWriteSound(PsndLen);\r
+  PsndClear();\r
+#else\r
+  static int curr_pos = 0;\r
+\r
+  if (y == 224)\r
+  {\r
+    if (emustatus & 2)\r
+         curr_pos += PsndRender(curr_pos, PsndLen-PsndLen/2);\r
+    else curr_pos  = PsndRender(0, PsndLen);\r
+    if (emustatus&1) emustatus|=2; else emustatus&=~2;\r
+    if (PicoWriteSound) PicoWriteSound(curr_pos);\r
+    // clear sound buffer\r
+    PsndClear();\r
+  }\r
+  else if (emustatus & 3) {\r
+    emustatus|= 2;\r
+    emustatus&=~1;\r
+    curr_pos = PsndRender(0, PsndLen/2);\r
+  }\r
+#endif\r
+}\r
+\r
 \r
 // -----------------------------------------------------------------\r
 //                            z80 stuff\r