summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/audio/gotya.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/audio/gotya.c')
-rw-r--r--src/mame/audio/gotya.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/mame/audio/gotya.c b/src/mame/audio/gotya.c
new file mode 100644
index 00000000000..46fbfdff0dc
--- /dev/null
+++ b/src/mame/audio/gotya.c
@@ -0,0 +1,79 @@
+#include "driver.h"
+#include "sound/samples.h"
+
+struct gotya_sample
+{
+ int sound_command;
+ int channel;
+ int looping;
+};
+
+
+static struct gotya_sample gotya_samples[] =
+{
+ { 0x01, 0, 0 },
+ { 0x02, 1, 0 },
+ { 0x03, 2, 0 },
+ { 0x05, 2, 0 },
+ { 0x06, 3, 0 },
+ { 0x07, 3, 0 },
+ { 0x08, 0, 1 },
+ { 0x0a, 0, 0 },
+ { 0x0b, 0, 0 },
+
+/* all the speech can go to one channel? */
+
+ { 0x10, 3, 0 },
+ { 0x11, 3, 0 },
+ { 0x12, 0, 0 }, /* this should stop the main tune */
+ { 0x13, 3, 0 },
+ { 0x14, 3, 0 },
+ { 0x15, 3, 0 },
+ { 0x16, 3, 0 },
+ { 0x17, 3, 0 },
+ { 0x18, 3, 0 },
+ { 0x19, 3, 0 },
+ { 0x1a, 3, 0 },
+ { -1, 0, 0 } /* end of array */
+};
+
+WRITE8_HANDLER( gotya_soundlatch_w )
+{
+ static int theme_playing;
+ int sample_number;
+
+
+ if (data == 0)
+ {
+ sample_stop(0);
+ theme_playing = 0;
+ return;
+ }
+
+ /* search for sample to play */
+
+ for (sample_number = 0;
+ gotya_samples[sample_number].sound_command != -1;
+ sample_number++)
+ {
+ if (gotya_samples[sample_number].sound_command == data)
+ {
+ if (gotya_samples[sample_number].looping &&
+ theme_playing)
+ {
+ /* don't restart main theme */
+ return;
+ }
+
+ sample_start(gotya_samples[sample_number].channel,
+ sample_number,
+ gotya_samples[sample_number].looping);
+
+ if (gotya_samples[sample_number].channel == 0)
+ {
+ theme_playing = gotya_samples[sample_number].looping;
+ }
+ return;
+ }
+ }
+}