1 /*
2  *	Invinco sound routines
3  */
4 
5 #include "driver.h"
6 
7 
8 /* output port 0x02 definitions - sound effect drive outputs */
9 #define OUT_PORT_2_SAUCER		0x04
10 #define OUT_PORT_2_MOVE1		0x08
11 #define OUT_PORT_2_MOVE2		0x10
12 #define OUT_PORT_2_FIRE			0x20
13 #define OUT_PORT_2_INVHIT		0x40
14 #define OUT_PORT_2_SHIPHIT		0x80
15 
16 
17 #define PLAY(id,loop)           sample_start( id, id, loop )
18 #define STOP(id)                sample_stop( id )
19 
20 
21 /* sample file names */
22 const char *invinco_sample_names[] =
23 {
24 	"*invinco",
25 	"saucer.wav",
26 	"move1.wav",
27 	"move2.wav",
28 	"fire.wav",
29 	"invhit.wav",
30 	"shiphit.wav",
31 	"move3.wav",	/* currently not used */
32 	"move4.wav",	/* currently not used */
33 	0
34 };
35 
36 /* sample sound IDs - must match sample file name table above */
37 enum
38 {
39 	SND_SAUCER = 0,
40 	SND_MOVE1,
41 	SND_MOVE2,
42 	SND_FIRE,
43 	SND_INVHIT,
44 	SND_SHIPHIT,
45 	SND_MOVE3,
46 	SND_MOVE4
47 };
48 
49 
WRITE_HANDLER(invinco_sh_port2_w)50 WRITE_HANDLER( invinco_sh_port2_w )
51 {
52 	static int port2State = 0;
53 	int bitsChanged;
54 	int bitsGoneHigh;
55 	int bitsGoneLow;
56 
57 
58 	bitsChanged  = port2State ^ data;
59 	bitsGoneHigh = bitsChanged & data;
60 	bitsGoneLow  = bitsChanged & ~data;
61 
62 	port2State = data;
63 
64 	if ( bitsGoneLow & OUT_PORT_2_SAUCER )
65 	{
66 		PLAY( SND_SAUCER, 0 );
67 	}
68 
69 	if ( bitsGoneLow & OUT_PORT_2_MOVE1 )
70 	{
71 		PLAY( SND_MOVE1, 0 );
72 	}
73 
74 	if ( bitsGoneLow & OUT_PORT_2_MOVE2 )
75 	{
76 		PLAY( SND_MOVE2, 0 );
77 	}
78 
79 	if ( bitsGoneLow & OUT_PORT_2_FIRE )
80 	{
81 		PLAY( SND_FIRE, 0 );
82 	}
83 
84 	if ( bitsGoneLow & OUT_PORT_2_INVHIT )
85 	{
86 		PLAY( SND_INVHIT, 0 );
87 	}
88 
89 	if ( bitsGoneLow & OUT_PORT_2_SHIPHIT )
90 	{
91 		PLAY( SND_SHIPHIT, 0 );
92 	}
93 
94 #if 0
95 	logerror("Went LO: %02X  %04X\n", bitsGoneLow, cpu_get_pc());
96 #endif
97 }
98