summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/audio/segag80v.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/audio/segag80v.c')
-rw-r--r--trunk/src/mame/audio/segag80v.c333
1 files changed, 333 insertions, 0 deletions
diff --git a/trunk/src/mame/audio/segag80v.c b/trunk/src/mame/audio/segag80v.c
new file mode 100644
index 00000000000..f16afd90045
--- /dev/null
+++ b/trunk/src/mame/audio/segag80v.c
@@ -0,0 +1,333 @@
+/*************************************************************************
+
+ Sega vector hardware
+
+*************************************************************************/
+
+#include "emu.h"
+#include "includes/segag80v.h"
+#include "sound/samples.h"
+
+/* History:
+
+
+
+ * 4/25/99 Tac-Scan now makes Credit Noises with $2c (Jim Hernandez)
+ * 4/9/99 Zektor Discrete Sound Support mixed with voice samples. (Jim Hernandez)
+ Zektor uses some Eliminator sounds.
+
+ * 2/5/99 Extra Life sound constant found $1C after fixing main driver. (Jim Hernandez)
+ * 1/29/99 Supports Tac Scan new 44.1 kHz sample set. (Jim Hernandez)
+
+ * -Stuff to do -
+ * Find hex bit for warp.wav sound calls.
+ *
+ * 2/05/98 now using the new sample_*() functions. BW
+ *
+ */
+
+/*
+ Tac/Scan sound constants
+
+ There are some sounds that are unknown:
+ $09 Tunnel Warp Sound?
+ $0a
+ $0b Formation Change
+ $0c
+ $0e
+ $0f
+ $1c 1up (Extra Life)
+ $2c Credit
+ $30 - $3f Hex numbers for ship position flight sounds
+ $41
+
+ Some sound samples are missing:
+ - I use the one bullet and one explosion sound for all 3 for example.
+
+Star Trk Sounds (USB Loaded from 5400 in main EPROMs)
+
+8 PHASER
+a PHOTON
+e TARGETING
+10 DENY
+12 SHEILD HIT
+14 ENTERPRISE HIT
+16 ENT EXPLOSION
+1a KLINGON EXPLOSION
+1c DOCK
+1e STARBASE HIT
+11 STARBASE RED
+22 STARBASE EXPLOSION
+24 SMALL BONUS
+25 LARGE BONUS
+26 STARBASE INTRO
+27 KLINGON INTRO
+28 ENTERPRISE INTRO
+29 PLAYER CHANGE
+2e KLINGON FIRE
+4,5 IMPULSE
+6,7 WARP
+c,d RED ALERT
+18,2f WARP SUCK
+19,2f SAUCER EXIT
+2c,21 NOMAD MOTION
+2d,21 NOMAD STOPPED
+2b COIN DROP MUSIC
+2a HIGH SCORE MUSIC
+
+
+Eliminator Sound Board (800-3174)
+---------------------------------
+
+inputs
+0x3c-0x3f
+
+d0 speech ready
+
+outputs ( 0 = ON)
+
+0x3e (076)
+
+d7 torpedo 2
+d6 torpedo 1
+d5 bounce
+d4 explosion 3
+d3 explosion 2
+d2 explosion 1
+d1 fireball
+d0 -
+
+0x3f (077)
+
+d7 background msb
+d6 background lsb
+d5 enemy ship
+d4 skitter
+d3 thrust msb
+d2 thrust lsb
+d1 thrust hi
+d0 thrust lo
+
+Space Fury Sound Board (800-0241)
+---------------------------------
+
+0x3e (076) (0 = ON)
+
+d7 partial warship, low frequency oscillation
+d6 star spin
+d5 -
+d4 -
+d3 -
+d2 thrust, low frequency noise
+d1 fire, metalic buzz
+d0 craft scale, rising tone
+
+0x3f (077)
+
+d7 -
+d6 -
+d5 docking bang
+d4 large explosion
+d3 small explosion, low frequency noise
+d2 fireball
+d1 shot
+d0 crafts joining
+
+*/
+
+WRITE8_MEMBER(segag80v_state::elim1_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+ data ^= 0xff;
+
+ /* Play fireball sample */
+ if (data & 0x02)
+ samples->start(0, 0);
+
+ /* Play explosion samples */
+ if (data & 0x04)
+ samples->start(1, 10);
+ if (data & 0x08)
+ samples->start(1, 9);
+ if (data & 0x10)
+ samples->start(1, 8);
+
+ /* Play bounce sample */
+ if (data & 0x20)
+ {
+ if (samples->playing(2))
+ samples->stop(2);
+ samples->start(2, 1);
+ }
+
+ /* Play lazer sample */
+ if (data & 0xc0)
+ {
+ if (samples->playing(3))
+ samples->stop(3);
+ samples->start(3, 5);
+ }
+}
+
+WRITE8_MEMBER(segag80v_state::elim2_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+ data ^= 0xff;
+
+ /* Play thrust sample */
+ if (data & 0x0f)
+ samples->start(4, 6);
+ else
+ samples->stop(4);
+
+ /* Play skitter sample */
+ if (data & 0x10)
+ samples->start(5, 2);
+
+ /* Play eliminator sample */
+ if (data & 0x20)
+ samples->start(6, 3);
+
+ /* Play electron samples */
+ if (data & 0x40)
+ samples->start(7, 7);
+ if (data & 0x80)
+ samples->start(7, 4);
+}
+
+
+WRITE8_MEMBER(segag80v_state::zektor1_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+
+ data ^= 0xff;
+
+ /* Play fireball sample */
+ if (data & 0x02)
+ samples->start(0, 0);
+
+ /* Play explosion samples */
+ if (data & 0x04)
+ samples->start(1, 10);
+ if (data & 0x08)
+ samples->start(1, 9);
+ if (data & 0x10)
+ samples->start(1, 8);
+
+ /* Play bounce sample */
+ if (data & 0x20)
+ {
+ if (samples->playing(2))
+ samples->stop(2);
+ samples->start(2, 1);
+ }
+
+ /* Play lazer sample */
+ if (data & 0xc0)
+ {
+ if (samples->playing(3))
+ samples->stop(3);
+ samples->start(3, 5);
+ }
+}
+
+WRITE8_MEMBER(segag80v_state::zektor2_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+ data ^= 0xff;
+
+ /* Play thrust sample */
+ if (data & 0x0f)
+ samples->start(4, 6);
+ else
+ samples->stop(4);
+
+ /* Play skitter sample */
+ if (data & 0x10)
+ samples->start(5, 2);
+
+ /* Play eliminator sample */
+ if (data & 0x20)
+ samples->start(6, 3);
+
+ /* Play electron samples */
+ if (data & 0x40)
+ samples->start(7, 40);
+ if (data & 0x80)
+ samples->start(7, 41);
+}
+
+
+
+WRITE8_MEMBER(segag80v_state::spacfury1_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+ data ^= 0xff;
+
+ /* craft growing */
+ if (data & 0x01)
+ samples->start(1, 0);
+
+ /* craft moving */
+ if (data & 0x02)
+ {
+ if (!samples->playing(2))
+ samples->start(2, 1, true);
+ }
+ else
+ samples->stop(2);
+
+ /* Thrust */
+ if (data & 0x04)
+ {
+ if (!samples->playing(3))
+ samples->start(3, 4, true);
+ }
+ else
+ samples->stop(3);
+
+ /* star spin */
+ if (data & 0x40)
+ samples->start(4, 8);
+
+ /* partial warship? */
+ if (data & 0x80)
+ samples->start(4, 9);
+
+}
+
+WRITE8_MEMBER(segag80v_state::spacfury2_sh_w)
+{
+ samples_device *samples = machine().device<samples_device>("samples");
+ data ^= 0xff;
+
+ /* craft joining */
+ if (data & 0x01)
+ samples->start(5, 2);
+
+ /* ship firing */
+ if (data & 0x02)
+ {
+ if (samples->playing(6))
+ samples->stop(6);
+ samples->start(6, 3);
+
+ }
+
+ /* fireball */
+ if (data & 0x04)
+ samples->start(7, 6);
+
+ /* small explosion */
+ if (data & 0x08)
+ samples->start(7, 6);
+ /* large explosion */
+ if (data & 0x10)
+ samples->start(7, 5);
+
+ /* docking bang */
+ if (data & 0x20)
+ samples->start(0, 7);
+
+}
+