1 /****************************************************************************
2 
3 Bally Astrocade style games
4 
5 driver by Nicola Salmoria, Mike Coates, Frank Palazzolo
6 
7 TODO:
8 - support stereo sound in Gorf (and maybe others, Wow has 3 speakers)
9 
10 Notes:
11 - In seawolf2, service mode dip switch turns on memory test. Reset with 2 pressed
12   to get to an input check screen, reset with 1+2 pressed to get to a convergence
13   test screen.
14 
15 
16 memory map (preliminary)
17 
18 0000-3fff ROM but also "magic" RAM (which processes data and copies it to the video RAM)
19 4000-7fff SCREEN RAM (bitmap)
20 8000-cfff ROM
21 d000-d3ff STATIC RAM
22 
23 I/O ports:
24 IN:
25 08        intercept register (collision detector)
26 	      bit 0: intercept in pixel 3 in an OR or XOR write since last reset
27 	      bit 1: intercept in pixel 2 in an OR or XOR write since last reset
28 	      bit 2: intercept in pixel 1 in an OR or XOR write since last reset
29 	      bit 3: intercept in pixel 0 in an OR or XOR write since last reset
30 	      bit 4: intercept in pixel 3 in last OR or XOR write
31 	      bit 5: intercept in pixel 2 in last OR or XOR write
32 	      bit 6: intercept in pixel 1 in last OR or XOR write
33 	      bit 7: intercept in pixel 0 in last OR or XOR write
34 10        IN0
35 11        IN1
36 12        IN2
37 13        DSW
38 14		  Video Retrace
39 15        ?
40 17        Speech Synthesizer (Output)
41 
42 OUT:
43 00-07     palette (00-03 = right part of screen; 04-07 left part)
44 08        select video mode (0 = low res 160x102, 1 = high res 320x204)
45 09        --xxxxxx position where to switch from the "left" to the "right" palette (/2).
46           xx------ background color (portion of screen after vblank)
47 0a        screen height
48 0b        color block transfer
49 0c        magic RAM control
50 	      bit 7: ?
51 	      bit 6: flip
52 	      bit 5: draw in XOR mode
53 	      bit 4: draw in OR mode
54 	      bit 3: "expand" mode (convert 1bpp data to 2bpp)
55 	      bit 2: "rotate" mode (rotate 90 degrees - NOT EMULATED)
56 	      bit 1:\ shift amount to be applied before copying
57 	      bit 0:/
58 0d        set interrupt vector
59 10-18     sound
60 19        magic RAM expand mode color
61 78-7e     pattern board (see vidhrdw.c for details)
62 
63 ****************************************************************************/
64 
65 #include "driver.h"
66 #include "vidhrdw/generic.h"
67 
68 extern unsigned char *wow_videoram;
69 
70 extern const char *wow_sample_names[];
71 extern const char *gorf_sample_names[];
72 
73 PALETTE_INIT( astrocde );
74 READ_HANDLER( wow_intercept_r );
75 WRITE_HANDLER( wow_videoram_w );
76 WRITE_HANDLER( astrocde_magic_expand_color_w );
77 WRITE_HANDLER( astrocde_magic_control_w );
78 WRITE_HANDLER( wow_magicram_w );
79 WRITE_HANDLER( astrocde_pattern_board_w );
80 VIDEO_UPDATE( astrocde );
81 READ_HANDLER( wow_video_retrace_r );
82 
83 WRITE_HANDLER( astrocde_interrupt_vector_w );
84 WRITE_HANDLER( astrocde_interrupt_enable_w );
85 WRITE_HANDLER( astrocde_interrupt_w );
86 INTERRUPT_GEN( wow_interrupt );
87 
88 READ_HANDLER( seawolf2_controller1_r );
89 READ_HANDLER( seawolf2_controller2_r );
90 VIDEO_UPDATE( seawolf2 );
91 
92 INTERRUPT_GEN( gorf_interrupt );
93 READ_HANDLER( gorf_timer_r );
94 READ_HANDLER( gorf_io_r );
95 
96 VIDEO_START( astrocde );
97 VIDEO_START( astrocde_stars );
98 
99 int  wow_sh_start(const struct MachineSound *msound);
100 void wow_sh_update(void);
101 
102 READ_HANDLER( wow_speech_r );
103 READ_HANDLER( wow_port_2_r );
104 READ_HANDLER( wow_io_r );
105 
106 int  gorf_sh_start(const struct MachineSound *msound);
107 void gorf_sh_update(void);
108 READ_HANDLER( gorf_speech_r );
109 READ_HANDLER( gorf_port_2_r );
110 WRITE_HANDLER( gorf_sound_control_a_w );
111 
112 WRITE_HANDLER( astrocde_mode_w );
113 WRITE_HANDLER( astrocde_vertical_blank_w );
114 WRITE_HANDLER( astrocde_colour_register_w );
115 WRITE_HANDLER( astrocde_colour_split_w );
116 WRITE_HANDLER( astrocde_colour_block_w );
117 
118 WRITE_HANDLER( ebases_trackball_select_w );
119 READ_HANDLER( ebases_trackball_r );
120 
121 
WRITE_HANDLER(seawolf2_lamps_w)122 static WRITE_HANDLER( seawolf2_lamps_w )
123 {
124 	/* 0x42 = player 2 (left), 0x43 = player 1 (right) */
125 	/* --x----- explosion */
126 	/* ---x---- RELOAD (active low) */
127 	/* ----x--- torpedo 1 available */
128 	/* -----x-- torpedo 2 available */
129 	/* ------x- torpedo 3 available */
130 	/* -------x torpedo 4 available */
131 
132 	/* I'm only supporting the "RELOAD" lamp since we don't have enough leds ;-) */
133 	set_led_status(offset^1,data & 0x10);
134 }
135 
136 
MEMORY_READ_START(seawolf2_readmem)137 static MEMORY_READ_START( seawolf2_readmem )
138 	{ 0x0000, 0x1fff, MRA_ROM },
139 	{ 0x4000, 0x7fff, MRA_RAM },
140 	{ 0xc000, 0xc3ff, MRA_RAM },
141 MEMORY_END
142 
143 static MEMORY_WRITE_START( seawolf2_writemem )
144 	{ 0x0000, 0x3fff, wow_magicram_w },
145 	{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },
146 	{ 0xc000, 0xc3ff, MWA_RAM },
147 MEMORY_END
148 
149 static MEMORY_READ_START( readmem )
150 	{ 0x0000, 0x3fff, MRA_ROM },
151 	{ 0x4000, 0x7fff, MRA_RAM },
152 	{ 0x8000, 0xcfff, MRA_ROM },
153 	{ 0xd000, 0xdfff, MRA_RAM },
154 MEMORY_END
155 
156 static MEMORY_WRITE_START( writemem )
157 	{ 0x0000, 0x3fff, wow_magicram_w },
158 	{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },	/* ASG */
159 	{ 0x8000, 0xcfff, MWA_ROM },
160 	{ 0xd000, 0xdfff, MWA_RAM },
161 MEMORY_END
162 
163 static MEMORY_READ_START( robby_readmem )
164 	{ 0x0000, 0x3fff, MRA_ROM },
165 	{ 0x4000, 0x7fff, MRA_RAM },
166 	{ 0x8000, 0xdfff, MRA_ROM },
167 	{ 0xe000, 0xffff, MRA_RAM },
168 MEMORY_END
169 
170 static MEMORY_WRITE_START( robby_writemem )
171 	{ 0x0000, 0x3fff, wow_magicram_w },
172 	{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },
173 	{ 0x8000, 0xdfff, MWA_ROM },
174 	{ 0xe000, 0xffff, MWA_RAM },
175 MEMORY_END
176 
177 static MEMORY_READ_START( profpac_readmem )
178 	{ 0x0000, 0x3fff, MRA_ROM },
179 	{ 0x8000, 0xdfff, MRA_ROM },
180 	{ 0xe000, 0xffff, MRA_RAM },
181 MEMORY_END
182 
183 static MEMORY_WRITE_START( profpac_writemem )
184 	{ 0x0000, 0x3fff, wow_magicram_w },
185 	{ 0x4000, 0x7fff, wow_videoram_w, &wow_videoram, &videoram_size },
186 	{ 0x8000, 0xdfff, MWA_ROM },
187 	{ 0xe000, 0xffff, MWA_RAM },
188 MEMORY_END
189 
190 static PORT_READ_START( readport )
191 	{ 0x08, 0x08, wow_intercept_r },
192 	{ 0x0e, 0x0e, wow_video_retrace_r },
193 	{ 0x10, 0x10, input_port_0_r },
194 	{ 0x11, 0x11, input_port_1_r },
195   	{ 0x12, 0x12, input_port_2_r },
196 	{ 0x13, 0x13, input_port_3_r },
197 PORT_END
198 
199 static PORT_WRITE_START( seawolf2_writeport )
200 	{ 0x00, 0x07, astrocde_colour_register_w },
201 	{ 0x08, 0x08, astrocde_mode_w },
202 	{ 0x09, 0x09, astrocde_colour_split_w },
203 	{ 0x0a, 0x0a, astrocde_vertical_blank_w },
204 	{ 0x0b, 0x0b, astrocde_colour_block_w },
205 	{ 0x0c, 0x0c, astrocde_magic_control_w },
206 	{ 0x0d, 0x0d, astrocde_interrupt_vector_w },
207 	{ 0x0e, 0x0e, astrocde_interrupt_enable_w },
208 	{ 0x0f, 0x0f, astrocde_interrupt_w },
209 	{ 0x19, 0x19, astrocde_magic_expand_color_w },
210 	{ 0x40, 0x41, MWA_NOP }, /* analog sound */
211 	{ 0x42, 0x43, seawolf2_lamps_w },	/* cabinet lamps */
212 PORT_END
213 
214 static PORT_WRITE_START( writeport )
215 	{ 0x00, 0x07, astrocde_colour_register_w },
216 	{ 0x08, 0x08, astrocde_mode_w },
217 	{ 0x09, 0x09, astrocde_colour_split_w },
218 	{ 0x0a, 0x0a, astrocde_vertical_blank_w },
219 	{ 0x0b, 0x0b, astrocde_colour_block_w },
220 	{ 0x0c, 0x0c, astrocde_magic_control_w },
221 	{ 0x0d, 0x0d, astrocde_interrupt_vector_w },
222 	{ 0x0e, 0x0e, astrocde_interrupt_enable_w },
223 	{ 0x0f, 0x0f, astrocde_interrupt_w },
224 	{ 0x10, 0x18, astrocade_sound1_w },
225 	{ 0x19, 0x19, astrocde_magic_expand_color_w },
226 	{ 0x50, 0x58, astrocade_sound2_w },
227 	{ 0x5b, 0x5b, MWA_NOP }, /* speech board ? Wow always sets this to a5*/
228 	{ 0x78, 0x7e, astrocde_pattern_board_w },
229 /*	{ 0xf8, 0xff, MWA_NOP }, */ /* Gorf uses these */
230 PORT_END
231 
232 
233 
234 INPUT_PORTS_START( seawolf2 )
235 	PORT_START /* IN0 */
236 	PORT_ANALOG( 0x3f, 0x20, IPT_PADDLE | IPF_REVERSE | IPF_PLAYER1, 20, 5, 0, 0x3f)
237 	PORT_DIPNAME( 0x40, 0x00, "Language 1" )
238 	PORT_DIPSETTING(    0x00, "Language 2" )
239 	PORT_DIPSETTING(    0x40, "French" )
240 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 )
241 
242 	PORT_START /* IN1 */
243 	PORT_ANALOG( 0x3f, 0x20, IPT_PADDLE | IPF_REVERSE | IPF_PLAYER2, 20, 5, 0, 0x3f)
244 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
245 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
246 
247 	PORT_START /* IN2 */
248 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
249 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
250 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
251 	PORT_DIPNAME( 0x08, 0x00, "Language 2" )
252 	PORT_DIPSETTING(    0x00, "English" )
253 	PORT_DIPSETTING(    0x08, "German" )
254 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
255 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
256 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
257 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
258 
259 	PORT_START /* Dip Switch */
260 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) )
261 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
262 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )
263 	PORT_DIPNAME( 0x06, 0x00, "Play Time" )
264 	PORT_DIPSETTING(    0x06, "40" )
265 	PORT_DIPSETTING(    0x04, "50" )
266 	PORT_DIPSETTING(    0x02, "60" )
267 	PORT_DIPSETTING(    0x00, "70" )
268 	PORT_DIPNAME( 0x08, 0x08, "2 Players Game" )
269 	PORT_DIPSETTING(    0x00, "1 Credit" )
270 	PORT_DIPSETTING(    0x08, "2 Credits" )
271 	PORT_DIPNAME( 0x30, 0x00, "Extended Play" )
272 	PORT_DIPSETTING(    0x10, "5000" )
273 	PORT_DIPSETTING(    0x20, "6000" )
274 	PORT_DIPSETTING(    0x30, "7000" )
275 	PORT_DIPSETTING(    0x00, "None" )
276 	PORT_DIPNAME( 0x40, 0x40, "Monitor" )
277 	PORT_DIPSETTING(    0x40, "Color" )
278 	PORT_DIPSETTING(    0x00, "B/W" )
279 	PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
280 INPUT_PORTS_END
281 
282 INPUT_PORTS_START( spacezap )
283 	PORT_START /* IN0 */
284 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
285 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
286 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
287 	PORT_SERVICE( 0x08, IP_ACTIVE_LOW )
288 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
289 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )	/* starts a 1 player game if 1 credit*/
290 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
291 
292 	PORT_START /* IN1 */
293 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
294 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
295 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
296 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
297 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
298 	PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
299 
300 	PORT_START /* IN2 */
301 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
302 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
303 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
304 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
305 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
306 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
307 	PORT_DIPSETTING(    0x20, DEF_STR( Upright ) )
308 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
309 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
310 
311 	PORT_START /* Dip Switch */
312 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coin_A ) )
313 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
314 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )
315 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Coin_B ) )
316 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
317 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_1C ) )
318 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
319 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_5C ) )
320 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
321 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
322 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
323 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
324 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
325 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
326 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
327 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
328 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
329 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
330 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
331 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
332 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
333 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
334 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
335 INPUT_PORTS_END
336 
337 INPUT_PORTS_START( ebases )
338 	PORT_START /* IN0 */
339 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
340 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
341 	PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNKNOWN )
342 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
343 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
344 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
345 
346 	PORT_START
347 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
348 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
349 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
350 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
351 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
352 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
353 	PORT_DIPNAME( 0x10, 0x00, "Monitor" )
354 	PORT_DIPSETTING(    0x00, "Color" )
355 	PORT_DIPSETTING(    0x10, "B/W" )
356 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
357 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
358 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
359 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
360 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
361 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
362 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
363 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
364 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
365 
366 	PORT_START /* Dip Switch */
367 	PORT_DIPNAME( 0x01, 0x00, "2 Players Game" )
368 	PORT_DIPSETTING(    0x00, "1 Credit" )
369 	PORT_DIPSETTING(    0x01, "2 Credits" )
370 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
371 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
372 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
373 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
374 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
375 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
376 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
377 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
378 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
379 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
380 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
381 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
382 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
383 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
384 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
385 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
386 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
387 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
388 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
389 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
390 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
391 
392 	PORT_START
393 	PORT_ANALOGX( 0xff, 0x00, IPT_TRACKBALL_X | IPF_PLAYER2 | IPF_CENTER, 50, 10, 0, 0, IP_KEY_NONE, IP_KEY_NONE, IP_JOY_NONE, IP_JOY_NONE )	\
394 
395 	PORT_START
396 	PORT_ANALOGX( 0xff, 0x00, IPT_TRACKBALL_Y | IPF_PLAYER2 | IPF_CENTER, 50, 10, 0, 0, IP_KEY_NONE, IP_KEY_NONE, IP_JOY_NONE, IP_JOY_NONE )	\
397 
398 	PORT_START
399 	PORT_ANALOGX( 0xff, 0x00, IPT_TRACKBALL_X | IPF_CENTER, 50, 10, 0, 0, IP_KEY_NONE, IP_KEY_NONE, IP_JOY_NONE, IP_JOY_NONE )	\
400 
401 	PORT_START
402 	PORT_ANALOGX( 0xff, 0x00, IPT_TRACKBALL_Y | IPF_CENTER, 50, 10, 0, 0, IP_KEY_NONE, IP_KEY_NONE, IP_JOY_NONE, IP_JOY_NONE )	\
403 INPUT_PORTS_END
404 
405 INPUT_PORTS_START( wow )
406 	PORT_START /* IN0 */
407 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
408 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
409 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
410 	PORT_SERVICE( 0x08, IP_ACTIVE_LOW )
411 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_TILT )
412 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
413 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
414 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
415 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
416 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
417 
418 	PORT_START /* IN1 */
419 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
420 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
421 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
422 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
423 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
424 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
425 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
426 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
427 
428 	PORT_START /* IN2 */
429 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
430 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
431 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
432 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
433 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 )
434 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
435 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
436 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )	/* speech status */
437 
438 	PORT_START /* Dip Switch */
439 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coin_A ) )
440 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
441 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )
442 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Coin_B ) )
443 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
444 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_1C ) )
445 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
446 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_5C ) )
447 	PORT_DIPNAME( 0x08, 0x08, "Language" )
448 	PORT_DIPSETTING(    0x08, "English" )
449 	PORT_DIPSETTING(    0x00, "Foreign (NEED ROM)" )
450 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Lives ) )
451  	PORT_DIPSETTING(    0x10, "2 for 1 Credit / 5 for 2 Credits" )
452  	PORT_DIPSETTING(    0x00, "3 for 1 Credit / 7 for 2 Credits" )
453 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Bonus_Life ) )
454 	PORT_DIPSETTING(    0x20, "3rd Level" )
455 	PORT_DIPSETTING(    0x00, "4th Level" )
456 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
457 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
458 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
459 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
460 	PORT_DIPSETTING(    0x00, "On only when controls are touched" )
461 	PORT_DIPSETTING(    0x80, "Always On"  )
462 INPUT_PORTS_END
463 
464 INPUT_PORTS_START( gorf )
465 	PORT_START /* IN0 */
466 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
467 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
468 	PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
469 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
470 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
471 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
472 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
473 	PORT_DIPSETTING(    0x40, DEF_STR( Upright ) )
474 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
475 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
476 
477 	PORT_START /* IN1 */
478 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
479 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
480 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
481 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
482 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
483 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
484 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
485 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
486 
487 	PORT_START /* IN2 */
488 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
489 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
490 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
491 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
492 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
493 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
494 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
495 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )	/* speech status */
496 
497 	PORT_START /* Dip Switch */
498 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coin_A ) )
499 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
500 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )
501 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Coin_B ) )
502 	PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
503 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_1C ) )
504 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
505 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_5C ) )
506 	PORT_DIPNAME( 0x08, 0x08, "Language" )
507 	PORT_DIPSETTING(    0x08, "English" )
508 	PORT_DIPSETTING(    0x00, "Foreign (NEED ROM)" )
509 	PORT_DIPNAME( 0x10, 0x00, "Lives per Credit" )
510 	PORT_DIPSETTING(    0x10, "2" )
511 	PORT_DIPSETTING(    0x00, "3" )
512 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) )
513 	PORT_DIPSETTING(    0x00, "Mission 5" )
514 	PORT_DIPSETTING(    0x20, "None" )
515 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
516 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
517 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
518 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
519 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
520 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
521 INPUT_PORTS_END
522 
523 INPUT_PORTS_START( robby )
524 	PORT_START /* IN0 */
525 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
526 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
527 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
528 	PORT_SERVICE( 0x08, IP_ACTIVE_LOW )
529 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_TILT )
530 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
531 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
532 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
533 
534 	PORT_START /* IN1 */
535 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
536 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
537 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
538 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
539 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
540 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
541 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
542 
543 	PORT_START /* IN2 */
544 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY )
545 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY )
546 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY )
547 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
548 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
549 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
550 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
551 
552 	PORT_START /* Dip Switch */
553 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
554 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
555 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
556 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
557 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
558 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
559 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) )
560 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
561 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
562 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )
563 	PORT_DIPSETTING(    0x08, DEF_STR( Upright ) )
564 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
565 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
566 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
567 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
568 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
569 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
570 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
571 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
572 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
573 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
574 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
575 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
576 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
577 INPUT_PORTS_END
578 
579 
580 
581 static struct Samplesinterface wow_samples_interface =
582 {
583 	8,	/* 8 channels */
584 	25,	/* volume */
585 	wow_sample_names
586 };
587 
588 static struct Samplesinterface gorf_samples_interface =
589 {
590 	8,	/* 8 channels */
591 	25,	/* volume */
592 	gorf_sample_names
593 };
594 
595 static struct astrocade_interface astrocade_2chip_interface =
596 {
597 	2,			/* Number of chips */
598 	1789773,	/* Clock speed */
599 	{255,255}			/* Volume */
600 };
601 
602 static struct astrocade_interface astrocade_1chip_interface =
603 {
604 	1,			/* Number of chips */
605 	1789773,	/* Clock speed */
606 	{255}			/* Volume */
607 };
608 
609 static struct CustomSound_interface gorf_custom_interface =
610 {
611 	gorf_sh_start,
612 	0,
613 	gorf_sh_update
614 };
615 
616 static struct CustomSound_interface wow_custom_interface =
617 {
618 	wow_sh_start,
619 	0,
620 	wow_sh_update
621 };
622 
623 
624 
625 
626 static MACHINE_DRIVER_START( seawolf2 )
627 
628 	/* basic machine hardware */
629 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
MDRV_CPU_MEMORY(seawolf2_readmem,seawolf2_writemem)630 	MDRV_CPU_MEMORY(seawolf2_readmem,seawolf2_writemem)
631 	MDRV_CPU_PORTS(readport,seawolf2_writeport)
632 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
633 
634 	MDRV_FRAMES_PER_SECOND(60)
635 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
636 
637 	/* video hardware */
638 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
639 	MDRV_SCREEN_SIZE(320, 204)
640 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
641 	MDRV_PALETTE_LENGTH(256)
642 
643 	MDRV_PALETTE_INIT(astrocde)
644 	MDRV_VIDEO_START(astrocde)
645 	MDRV_VIDEO_UPDATE(seawolf2)
646 
647 	/* sound hardware */
648 MACHINE_DRIVER_END
649 
650 static MACHINE_DRIVER_START( spacezap )
651 
652 	/* basic machine hardware */
653 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
654 	MDRV_CPU_MEMORY(readmem,writemem)
655 	MDRV_CPU_PORTS(readport,writeport)
656 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
657 
658 	MDRV_FRAMES_PER_SECOND(60)
659 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
660 
661 	/* video hardware */
662 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
663 	MDRV_SCREEN_SIZE(320, 204)
664 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
665 	MDRV_PALETTE_LENGTH(256)
666 
667 	MDRV_PALETTE_INIT(astrocde)
668 	MDRV_VIDEO_START(astrocde)
669 	MDRV_VIDEO_UPDATE(astrocde)
670 
671 	/* sound hardware */
672 	MDRV_SOUND_ADD(ASTROCADE, astrocade_2chip_interface)
673 MACHINE_DRIVER_END
674 
675 static MACHINE_DRIVER_START( ebases )
676 
677 	/* basic machine hardware */
678 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
679 	MDRV_CPU_MEMORY(readmem,writemem)
680 	MDRV_CPU_PORTS(readport,writeport)
681 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
682 
683 	MDRV_FRAMES_PER_SECOND(60)
684 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
685 
686 	/* video hardware */
687 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
688 	MDRV_SCREEN_SIZE(320, 204)
689 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
690 	MDRV_PALETTE_LENGTH(256)
691 
692 	MDRV_PALETTE_INIT(astrocde)
693 	MDRV_VIDEO_START(astrocde)
694 	MDRV_VIDEO_UPDATE(astrocde)
695 
696 	/* sound hardware */
697 	MDRV_SOUND_ADD(ASTROCADE, astrocade_1chip_interface)
698 MACHINE_DRIVER_END
699 
700 static MACHINE_DRIVER_START( wow )
701 
702 	/* basic machine hardware */
703 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
704 	MDRV_CPU_MEMORY(readmem,writemem)
705 	MDRV_CPU_PORTS(readport,writeport)
706 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
707 
708 	MDRV_FRAMES_PER_SECOND(60)
709 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
710 
711 	/* video hardware */
712 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
713 	MDRV_SCREEN_SIZE(320, 204)
714 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
715 	MDRV_PALETTE_LENGTH(256)
716 	MDRV_PALETTE_INIT(astrocde)
717 
718 	MDRV_VIDEO_START(astrocde_stars)
719 	MDRV_VIDEO_UPDATE(astrocde)
720 
721 	/* sound hardware */
722 	MDRV_SOUND_ADD(ASTROCADE, astrocade_2chip_interface)
723 	MDRV_SOUND_ADD(SAMPLES, wow_samples_interface)
724 	MDRV_SOUND_ADD(CUSTOM, wow_custom_interface)
725 MACHINE_DRIVER_END
726 
727 static MACHINE_DRIVER_START( gorf )
728 
729 	/* basic machine hardware */
730 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
731 	MDRV_CPU_MEMORY(readmem,writemem)
732 	MDRV_CPU_PORTS(readport,writeport)
733 	MDRV_CPU_VBLANK_INT(gorf_interrupt,256)
734 
735 	MDRV_FRAMES_PER_SECOND(60)
736 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
737 
738 	/* video hardware */
739 	/* it may look like the right hand side of the screen needs clipping, but */
740 	/* this isn't the case: cocktail mode would be clipped on the wrong side */
741 
742 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
743 	MDRV_SCREEN_SIZE(320, 204)
744 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
745 	MDRV_PALETTE_LENGTH(256)
746 
747 	MDRV_PALETTE_INIT(astrocde)
748 	MDRV_VIDEO_START(astrocde_stars)
749 	MDRV_VIDEO_UPDATE(astrocde)
750 
751 	/* sound hardware */
752 	MDRV_SOUND_ADD(ASTROCADE, astrocade_2chip_interface)
753 	MDRV_SOUND_ADD(SAMPLES, gorf_samples_interface)
754 	MDRV_SOUND_ADD(CUSTOM, gorf_custom_interface)
755 MACHINE_DRIVER_END
756 
757 static MACHINE_DRIVER_START( robby )
758 
759 	/* basic machine hardware */
760 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
761 	MDRV_CPU_MEMORY(robby_readmem,robby_writemem)
762 	MDRV_CPU_PORTS(readport,writeport)
763 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
764 
765 	MDRV_FRAMES_PER_SECOND(60)
766 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
767 
768 	/* video hardware */
769 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
770 	MDRV_SCREEN_SIZE(320, 204)
771 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
772 	MDRV_PALETTE_LENGTH(256)
773 	MDRV_PALETTE_INIT(astrocde)
774 
775 	MDRV_VIDEO_START(astrocde)
776 	MDRV_VIDEO_UPDATE(astrocde)
777 
778 	/* sound hardware */
779 	MDRV_SOUND_ADD(ASTROCADE, astrocade_2chip_interface)
780 MACHINE_DRIVER_END
781 
782 static MACHINE_DRIVER_START( profpac )
783 
784 	/* basic machine hardware */
785 	MDRV_CPU_ADD(Z80, 1789773)	/* 1.789 MHz */
786 	MDRV_CPU_MEMORY(profpac_readmem,profpac_writemem)
787 	MDRV_CPU_PORTS(readport,writeport)
788 	MDRV_CPU_VBLANK_INT(wow_interrupt,256)
789 
790 	MDRV_FRAMES_PER_SECOND(60)
791 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
792 
793 	/* video hardware */
794 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
795 	MDRV_SCREEN_SIZE(320, 204)
796 	MDRV_VISIBLE_AREA(0, 320-1, 0, 204-1)
797 	MDRV_PALETTE_LENGTH(256)
798 
799 	MDRV_PALETTE_INIT(astrocde)
800 	MDRV_VIDEO_START(astrocde)
801 	MDRV_VIDEO_UPDATE(astrocde)
802 
803 	/* sound hardware */
804 	MDRV_SOUND_ADD(ASTROCADE, astrocade_2chip_interface)
805 MACHINE_DRIVER_END
806 
807 
808 
809 ROM_START( seawolf2 )
810 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
811 	ROM_LOAD( "sw2x1.bin",    0x0000, 0x0800, CRC(ad0103f6) SHA1(c6e411444a824ce54b0eee10f7dc15e4229ec070) )
812 	ROM_LOAD( "sw2x2.bin",    0x0800, 0x0800, CRC(e0430f0a) SHA1(63d8c6b77e0aa536b4f5bb774bc9285f736d4265) )
813 	ROM_LOAD( "sw2x3.bin",    0x1000, 0x0800, CRC(05ad1619) SHA1(c9dbeaa4540dc95f98970f501a420b18b9898c91) )
814 	ROM_LOAD( "sw2x4.bin",    0x1800, 0x0800, CRC(1a1a14a2) SHA1(57d0ddea9f8bf082f50d0468a726fd91aaabf4e4) )
815 ROM_END
816 
817 ROM_START( spacezap )
818 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
819 	ROM_LOAD( "0662.01",      0x0000, 0x1000, CRC(a92de312) SHA1(784ac67c75c7c101f97ebfd39b2b3f7bf7fa470a) )
820 	ROM_LOAD( "0663.xx",      0x1000, 0x1000, CRC(4836ebf1) SHA1(ad0e8c34a209c827c1336f0250cc61fee667fb03) )
821 	ROM_LOAD( "0664.xx",      0x2000, 0x1000, CRC(d8193a80) SHA1(72151e773562da62acd2c1d9638711711cbc13a3) )
822 	ROM_LOAD( "0665.xx",      0x3000, 0x1000, CRC(3784228d) SHA1(5aabd720a106158a892368c4920d9cd0f5235e34) )
823 ROM_END
824 
825 ROM_START( ebases )
826 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
827 	ROM_LOAD( "m761a",        0x0000, 0x1000, CRC(34422147) SHA1(6483ca1359b675b0dd739605db2a1dbd4b7fb8cb) )
828 	ROM_LOAD( "m761b",        0x1000, 0x1000, CRC(4f28dfd6) SHA1(52e571e671fa61b0f9ab397a5947094c24f6c388) )
829 	ROM_LOAD( "m761c",        0x2000, 0x1000, CRC(bff6c97e) SHA1(e41fb9db919039c8a48b4caebf80821a066d7ccf) )
830 	ROM_LOAD( "m761d",        0x3000, 0x1000, CRC(5173781a) SHA1(e60c3f4b075f8b811ff6a8637c4aa0b089847a82) )
831 ROM_END
832 
833 ROM_START( wow )
834 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
835 	ROM_LOAD( "wow.x1",       0x0000, 0x1000, CRC(c1295786) SHA1(1e4f30cc15537aed6603b4e664e6e60f4bccb5c5) )
836 	ROM_LOAD( "wow.x2",       0x1000, 0x1000, CRC(9be93215) SHA1(0bc8ee6d8391104eb217b612f32856b105946682) )
837 	ROM_LOAD( "wow.x3",       0x2000, 0x1000, CRC(75e5a22e) SHA1(50a8ca11909ce49412c47de4da69e39a083ce5af) )
838 	ROM_LOAD( "wow.x4",       0x3000, 0x1000, CRC(ef28eb84) SHA1(d6318b3649fccafc2d0a05e5530e88819d299356) )
839 	ROM_LOAD( "wow.x5",       0x8000, 0x1000, CRC(16912c2b) SHA1(faf9c96d99bc111c5f1618f6863f22fd9269027b) )
840 	ROM_LOAD( "wow.x6",       0x9000, 0x1000, CRC(35797f82) SHA1(376bba29e88c16d95438fa996913b76581df0937) )
841 	ROM_LOAD( "wow.x7",       0xa000, 0x1000, CRC(ce404305) SHA1(a52c6c7b77842f25c79515460be6b7ed959b5edb) )
842 /*	ROM_LOAD( "wow.x8",       0xc000, CRC(00001000) , ? )	here would go the foreign language ROM */
843 ROM_END
844 
845 ROM_START( gorf )
846 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
847 	ROM_LOAD( "gorf-a.bin",   0x0000, 0x1000, CRC(5b348321) SHA1(76e2e3ad1a66755f1a369167fdb157690fd44a52) )
848 	ROM_LOAD( "gorf-b.bin",   0x1000, 0x1000, CRC(62d6de77) SHA1(2601faf12d0ab4972c5535ffd722b03ecd8c097c) )
849 	ROM_LOAD( "gorf-c.bin",   0x2000, 0x1000, CRC(1d3bc9c9) SHA1(0b363a71d7585a4828e08668ebb2999c55e02721) )
850 	ROM_LOAD( "gorf-d.bin",   0x3000, 0x1000, CRC(70046e56) SHA1(392214cc6ed4155bfe022d36f0f86c2594a5ab57) )
851 	ROM_LOAD( "gorf-e.bin",   0x8000, 0x1000, CRC(2d456eb5) SHA1(720fb8b48e20c1fc281d8804259016c3c5364a07) )
852 	ROM_LOAD( "gorf-f.bin",   0x9000, 0x1000, CRC(f7e4e155) SHA1(9c9d6d3bfee6556dc7a01de81d6148dd02f04fc9) )
853 	ROM_LOAD( "gorf-g.bin",   0xa000, 0x1000, CRC(4e2bd9b9) SHA1(9edccceea5af015275582553ed238c40c73d8f4f) )
854 	ROM_LOAD( "gorf-h.bin",   0xb000, 0x1000, CRC(fe7b863d) SHA1(5aa8d824814ee1c30eaf0044da78d3aa8220dcaa) )
855 ROM_END
856 
857 ROM_START( gorfpgm1 )
858 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
859 	ROM_LOAD( "873a",         0x0000, 0x1000, CRC(97cb4a6a) SHA1(efdae9a437c665fb861665a38c6cb13fd848ad91) )
860 	ROM_LOAD( "873b",         0x1000, 0x1000, CRC(257236f8) SHA1(d1e8555fe5e6705ef88535bcd6071d1072b01386) )
861 	ROM_LOAD( "873c",         0x2000, 0x1000, CRC(16b0638b) SHA1(65e1e2e4df80140976915e0982ce3219b14beece) )
862 	ROM_LOAD( "873d",         0x3000, 0x1000, CRC(b5e821dc) SHA1(152840e353d567cbf5a86206dde70e5b64b27236) )
863 	ROM_LOAD( "873e",         0x8000, 0x1000, CRC(8e82804b) SHA1(24250edb30efa63c80514629c86c9372b7ca3020) )
864 	ROM_LOAD( "873f",         0x9000, 0x1000, CRC(715fb4d9) SHA1(c9f33162093e6ed7e3cb6bb716419e5bc43c0381) )
865 	ROM_LOAD( "873g",         0xa000, 0x1000, CRC(8a066456) SHA1(f64bcdadbc62566b55573039b03baf5358e24a36) )
866 	ROM_LOAD( "873h",         0xb000, 0x1000, CRC(56d40c7c) SHA1(c7c9a618d9438a76121972ac029ad7036bcf8c6f) )
867 ROM_END
868 
869 ROM_START( robby )
870 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
871 	ROM_LOAD( "rotox1.bin",   0x0000, 0x1000, CRC(a431b85a) SHA1(3478da56addba1cdd98cbef7a15b17fca9aed2cd) )
872 	ROM_LOAD( "rotox2.bin",   0x1000, 0x1000, CRC(33cdda83) SHA1(ccbc741a2fc0b7385ca42afe5b377432249b44cb) )
873 	ROM_LOAD( "rotox3.bin",   0x2000, 0x1000, CRC(dbf97491) SHA1(11574baf04af02b38ae147be8409de7c34e87611) )
874 	ROM_LOAD( "rotox4.bin",   0x3000, 0x1000, CRC(a3b90ac8) SHA1(8c585d26011c9ea047895a0388835ff2bb80e1ff) )
875 	ROM_LOAD( "rotox5.bin",   0x8000, 0x1000, CRC(46ae8a94) SHA1(218edcc5257c9cc58c5e667fff64767b313daaab) )
876 	ROM_LOAD( "rotox6.bin",   0x9000, 0x1000, CRC(7916b730) SHA1(c5166625a404da4a93a1a7ae21d01fdb6e78680e) )
877 	ROM_LOAD( "rotox7.bin",   0xa000, 0x1000, CRC(276dc4a5) SHA1(d740b30c28f6a94ee2348291e80d57af5c2e2d99) )
878 	ROM_LOAD( "rotox8.bin",   0xb000, 0x1000, CRC(1ef13457) SHA1(4dc1ee9ce2a28c4ba75e630fbfe4659cd68d3a66) )
879   	ROM_LOAD( "rotox9.bin",   0xc000, 0x1000, CRC(370352bf) SHA1(72cd35b4306b46de3d2a3e4e46fa4917ed9d18cb) )
880 	ROM_LOAD( "rotox10.bin",  0xd000, 0x1000, CRC(e762cbda) SHA1(48c274a859963097a90f80c48366250301eddb5f) )
881 ROM_END
882 
883 ROM_START( profpac )
884 	ROM_REGION( 0x10000, REGION_CPU1, 0 )
885 	ROM_LOAD( "pps1",         0x0000, 0x2000, CRC(a244a62d) SHA1(f7a9606ce6d66c3e6d210cc25572904aeab2b6c8) )
886 	ROM_LOAD( "pps2",         0x2000, 0x2000, CRC(8a9a6653) SHA1(b730b24088dcfddbe954670ff9212b7383c923f6) )
887 	ROM_LOAD( "pps7",         0x8000, 0x2000, CRC(f9c26aba) SHA1(201b930cca9669114ffc97978cade69587e34a0f) )
888 	ROM_LOAD( "pps8",         0xa000, 0x2000, CRC(4d201e41) SHA1(786b30cd7a7db55bdde05909d7a1a7f122b6e546) )
889 	ROM_LOAD( "pps9",         0xc000, 0x2000, CRC(17a0b418) SHA1(8b7ed84090dbc5181deef6f55ec755c05d4c0d5e) )
890 
891 	ROM_REGION( 0x04000, REGION_USER1, 0 )
892 	ROM_LOAD( "pps3",         0x0000, 0x2000, CRC(15717fd8) SHA1(ffbb156f417d20478117b39de28a15680993b528) )
893 	ROM_LOAD( "pps4",         0x0000, 0x2000, CRC(36540598) SHA1(33c797c690801afded45091d822347e1ecc72b54) )
894 	ROM_LOAD( "pps5",         0x0000, 0x2000, CRC(8dc89a59) SHA1(fb4d3ba40697425d69ee19bfdcf00aea1df5fa80) )
895 	ROM_LOAD( "pps6",         0x0000, 0x2000, CRC(5a2186c3) SHA1(f706cef6518b7d839377aa8a7c75fdeed4985c57) )
896 	ROM_LOAD( "ppq1",         0x0000, 0x4000, CRC(dddc2ccc) SHA1(d81caaa639f63d971a0d3199b9da6359211edf3d) )
897 	ROM_LOAD( "ppq2",         0x0000, 0x4000, CRC(33bbcabe) SHA1(f9455868c70f479ede0e0621f21f69da165d9b7a) )
898 	ROM_LOAD( "ppq3",         0x0000, 0x4000, CRC(3534d895) SHA1(24fb14c6b31b7f27e0737605cfbf963d29dd3fc5) )
899 	ROM_LOAD( "ppq4",         0x0000, 0x4000, CRC(17e3581d) SHA1(92d2391e4c8aef46cc8e92b8cf9a8ec9a1b5ff68) )
900 	ROM_LOAD( "ppq5",         0x0000, 0x4000, CRC(80882a93) SHA1(d5d6afaadb022b109c14c3911eceb0769204df6c) )
901 	ROM_LOAD( "ppq6",         0x0000, 0x4000, CRC(e5ddaee5) SHA1(45b4925709da6790676319268398f6cfcf12794b) )
902 	ROM_LOAD( "ppq7",         0x0000, 0x4000, CRC(c029cd34) SHA1(f2f09fdb13920012a6a43958b640d7a06c0c8e69) )
903 	ROM_LOAD( "ppq8",         0x0000, 0x4000, CRC(fb3a1ac9) SHA1(e8fe02c85e90320680a14ad560204d5c235730ad) )
904 	ROM_LOAD( "ppq9",         0x0000, 0x4000, CRC(5e944488) SHA1(2f03f799c319309b5ebf9a5299891d1824398ba5) )
905 	ROM_LOAD( "ppq10",        0x0000, 0x4000, CRC(ed72a81f) SHA1(db991b93001d2da16b398ee8e9b01b8f0dfe5740) )
906 	ROM_LOAD( "ppq11",        0x0000, 0x4000, CRC(98295020) SHA1(7f68a8b89117b7ab8724869401a861fe7cff28d9) )
907 	ROM_LOAD( "ppq12",        0x0000, 0x4000, CRC(e01a8dbe) SHA1(c7052bf9ce9d2006dda5ddc07ad164d0119b86ea) )
908 	ROM_LOAD( "ppq13",        0x0000, 0x4000, CRC(87165d4f) SHA1(d47655300c8747698a46f30deb65fe762073e869) )
909 	ROM_LOAD( "ppq14",        0x0000, 0x4000, CRC(ecb861de) SHA1(73d28a79b76795d3016dd608f9ab3d255f40e477) )
910 ROM_END
911 
912 
913 
914 static DRIVER_INIT( seawolf2 )
915 {
916 	install_port_read_handler(0, 0x10, 0x10, seawolf2_controller2_r);
917 	install_port_read_handler(0, 0x11, 0x11, seawolf2_controller1_r);
918 }
DRIVER_INIT(ebases)919 static DRIVER_INIT( ebases )
920 {
921 	install_port_read_handler (0, 0x13, 0x13, ebases_trackball_r);
922 	install_port_write_handler(0, 0x28, 0x28, ebases_trackball_select_w);
923 }
DRIVER_INIT(wow)924 static DRIVER_INIT( wow )
925 {
926 	install_port_read_handler(0, 0x12, 0x12, wow_port_2_r);
927 	install_port_read_handler(0, 0x15, 0x15, wow_io_r);
928 	install_port_read_handler(0, 0x17, 0x17, wow_speech_r);
929 }
DRIVER_INIT(gorf)930 static DRIVER_INIT( gorf )
931 {
932 	install_mem_read_handler (0, 0xd0a5, 0xd0a5, gorf_timer_r);
933 
934 	install_port_read_handler(0, 0x12, 0x12, gorf_port_2_r);
935 	install_port_read_handler(0, 0x15, 0x16, gorf_io_r);
936 	install_port_read_handler(0, 0x17, 0x17, gorf_speech_r);
937 }
938 
939 
940 GAMEX(1978, seawolf2, 0,    seawolf2, seawolf2, seawolf2, ROT0,   "Midway", "Sea Wolf II", GAME_NO_SOUND )
941 GAME( 1980, spacezap, 0,    spacezap, spacezap, 0,        ROT0,   "Midway", "Space Zap" )
942 GAME( 1980, ebases,   0,    ebases,   ebases,   ebases,   ROT0,   "Midway", "Extra Bases" )
943 GAME( 1980, wow,      0,    wow,      wow,      wow,      ROT0,   "Midway", "Wizard of Wor" )
944 GAME( 1981, gorf,     0,    gorf,     gorf,     gorf,     ROT270, "Midway", "Gorf" )
945 GAME( 1981, gorfpgm1, gorf, gorf,     gorf,     gorf,     ROT270, "Midway", "Gorf (Program 1)" )
946 GAME( 1981, robby,    0,    robby,    robby,    0,        ROT0,   "Bally Midway", "Robby Roto" )
947 GAMEX( 1983,profpac,  0,    profpac,  gorf,     0,        ROT0,   "Bally Midway", "Professor PacMan", GAME_NOT_WORKING )
948