1 /***************************************************************************
2 
3 	Midway Omega Race hardware
4 
5 	driver by Bernd Wiebelt
6 
7 	Games supported:
8 		* Omega Race
9 		* Delta Race (Omega Race bootleg by Allied Leisure)
10 
11 	Known bugs:
12 		* none at this time
13 
14 ****************************************************************************
15 
16 	This driver is dedicated to my loving wife Natalia Wiebelt
17 	                                      and my daughter Lara Anna Maria
18 	Summer 1997 Bernd Wiebelt
19 
20 	Many thanks to Al Kossow for the original sources and the solid documentation.
21 	Without him, I could never had completed this driver.
22 
23 
24 	--------
25 
26 	Most of the info here comes from the wiretap archive at:
27 	http://www.spies.com/arcade/simulation/gameHardware/
28 
29 
30 	Omega Race Memory Map
31 	Version 1.1 (Jul 24,1997)
32 	---------------------
33 
34 	0000 - 3fff	PROM
35 	4000 - 4bff	RAM (3k)
36 	5c00 - 5cff	NVRAM (256 x 4bits)
37 	8000 - 8fff	Vec RAM (4k)
38 	9000 - 9fff	Vec ROM (4k)
39 
40 	15 14 13 12 11 10
41 	--+--+--+--+--+--
42 	0  0  0  0                       M8 - 2732  (4k)
43 	0  0  0  1                       L8 - 2732
44 	0  0  1  0                       K8 - 2732
45 	0  0  1  1                       J8 - 2732
46 
47 	0  1  -  0  0  0                 RAM (3k)
48 	0  1  -  0  0  1
49 	0  1  -  0  1  0
50 
51 	0  1  -  1  1  1                 4 Bit BB RAM (d0-d3)
52 
53 	1  -  -  0  0                    Vec RAM (4k)
54 	1  -  -  0  1
55 	1  -  -  1  0			 Vec ROM (2k) E1
56 	1  -  -  1  1                    Vec ROM (2k) F1
57 
58 	I/O Ports
59 
60 	8	Start/ (VG start)
61 	9	WDOG/  (Reset watchdog)
62 	A	SEQRES/ (VG stop/reset?)
63 	B	RDSTOP/ d7 = stop (VG running if 0)
64 
65 	10 I	DIP SW C4 (game ship settings)
66 
67 		6 5  4 3  2 1
68 	                      1st bonus ship at
69 	        | |  | |  0 0  40,000
70 	        | |  | |  0 1  50,000
71 	        | |  | |  1 0  70,000
72 	        | |  | |  1 1 100,000
73 	        | |  | |      2nd and  3rd bonus ships
74 	        | |  0 0      150,000   250,000
75 	        | |  0 1      250,000   500,000
76 	        | |  1 0      500,000   750,000
77 	        | |  1 1      750,000 1,500,000
78 	        | |           ships per credit
79 	        0 0           1 credit = 2 ships / 2 credits = 4 ships
80 	        0 1           1 credit = 2 ships / 2 credits = 5 ships
81 	        1 0           1 credit = 3 ships / 2 credits = 6 ships
82 	        1 1           1 credit = 3 ships / 2 credits = 7 ships
83 
84 	11 I	7 = Test
85 		6 = P1 Fire
86 		5 = P1 Thrust
87 		4 = Tilt
88 
89 		1 = Coin 2
90 		0 = Coin 1
91 
92 	12 I	7 = 1P1CR
93 		6 = 1P2CR
94 
95 		3 = 2P2CR -+
96 		2 = 2P1CR  |
97 		1 = P2Fire |
98 		0 = P2Thr -+ cocktail only
99 
100 	13 O   7 =
101 	        6 = screen reverse
102 	        5 = 2 player 2 credit start LED
103 	        4 = 2 player 1 credit start LED
104 	        3 = 1 player 1 credit start LED
105 	        2 = 1 player 1 credit start LED
106 	        1 = coin meter 2
107 	        0 = coin meter 1
108 
109 	14 O	sound command (interrupts sound Z80)
110 
111 	15 I	encoder 1 (d7-d2)
112 
113 		The encoder is a 64 position Grey Code encoder, or a
114 		pot and A to D converter.
115 
116 		Unlike the quadrature inputs on Atari and Sega games,
117 	        Omega Race's controller is an absolute angle.
118 
119 		0x00, 0x04, 0x14, 0x10, 0x18, 0x1c, 0x5c, 0x58,
120 		0x50, 0x54, 0x44, 0x40, 0x48, 0x4c, 0x6c, 0x68,
121 		0x60, 0x64, 0x74, 0x70, 0x78, 0x7c, 0xfc, 0xf8,
122 		0xf0, 0xf4, 0xe4, 0xe0, 0xe8, 0xec, 0xcc, 0xc8,
123 		0xc0, 0xc4, 0xd4, 0xd0, 0xd8, 0xdc, 0x9c, 0x98,
124 		0x90, 0x94, 0x84, 0x80, 0x88, 0x8c, 0xac, 0xa8,
125 		0xa0, 0xa4, 0xb4, 0xb0, 0xb8, 0xbc, 0x3c, 0x38,
126 		0x30, 0x34, 0x24, 0x20, 0x28, 0x2c, 0x0c, 0x08
127 
128 	16 I	encoder 2 (d5-d0)
129 
130 		The inputs aren't scrambled as they are on the 1 player
131 	        encoder
132 
133 	17 I	DIP SW C6 (coin/cocktail settings)
134 
135 	        8  7  6 5 4  3 2 1
136 	                             coin switch 1
137 	        |  |  | | |  0 0 0   1 coin  2 credits
138 	        |  |  | | |  0 0 1   1 coin  3 credits
139 	        |  |  | | |  0 1 0   1 coin  5 credits
140 	        |  |  | | |  0 1 1   4 coins 5 credits
141 	        |  |  | | |  1 0 0   3 coins 4 credits
142 	        |  |  | | |  1 0 1   2 coins 3 credits
143 	        |  |  | | |  1 1 0   2 coins 1 credit
144 	        |  |  | | |  1 1 1   1 coin  1 credit
145 	        |  |  | | |
146 	        |  |  | | |          coin switch 2
147 	        |  |  0 0 0          1 coin  2 credits
148 	        |  |  0 0 1          1 coin  3 credits
149 	        |  |  0 1 0          1 coin  5 credits
150 	        |  |  0 1 1          4 coins 5 credits
151 	        |  |  1 0 0          3 coins 4 credits
152 	        |  |  1 0 1          2 coins 3 credits
153 	        |  |  1 1 0          2 coins 1 credit
154 	        |  |  1 1 1          1 coin  1 credit
155 	        |  |
156 	        |  0                 coin play
157 	        |  1                 free play
158 	        |
159 	        0                    normal
160 	        1                    cocktail
161 
162 	display list format: (4 byte opcodes)
163 
164 	+------+------+------+------+------+------+------+------+
165 	|DY07   DY06   DY05   DY04   DY03   DY02   DY01   DY00  | 0
166 	+------+------+------+------+------+------+------+------+
167 	|OPCD3  OPCD2  OPCD1  OPCD0  DY11   DY10   DY09   DY08  | 1 OPCD 1111 = ABBREV/
168 	+------+------+------+------+------+------+------+------+
169 	|DX07   DX06   DX05   DX04   DX03   DX02   DX01   DX00  | 2
170 	+------+------+------+------+------+------+------+------+
171 	|INTEN3 INTEN2 INTEN1 INTEN0 DX11   DX10   DX09   DX08  | 3
172 	+------+------+------+------+------+------+------+------+
173 
174 	    Draw relative vector       0x80      1000YYYY YYYYYYYY IIIIXXXX XXXXXXXX
175 
176 	    Draw relative vector
177 	    and load scale             0x90      1001YYYY YYYYYYYY SSSSXXXX XXXXXXXX
178 
179 	    Beam to absolute
180 	    screen position            0xA0      1010YYYY YYYYYYYY ----XXXX XXXXXXXX
181 
182 	    Halt                       0xB0      1011---- --------
183 
184 	    Jump to subroutine         0xC0      1100AAAA AAAAAAAA
185 
186 	    Return from subroutine     0xD0      1101---- --------
187 
188 	    Jump to new address        0xE0      1110AAAA AAAAAAAA
189 
190 	    Short vector draw          0xF0      1111YYYY IIIIXXXX
191 
192 
193 	Sound Z80 Memory Map
194 
195 	0000 ROM
196 	1000 RAM
197 
198 	15 14 13 12 11 10
199 	            0           2k prom (K5)
200 	            1           2k prom (J5)
201 	         1              1k RAM  (K4,J4)
202 
203 	I/O (write-only)
204 
205 	0,1 			8912 (K3)
206 	2,3			8912 (J3)
207 
208 
209 	I/O (read-only)
210 
211 	0                       input port from main CPU.
212 	                        main CPU writing port generated INT
213 	Sound Commands:
214 
215 	0 - reset sound CPU
216 
217 ***************************************************************************/
218 
219 #include "driver.h"
220 #include "vidhrdw/vector.h"
221 #include "vidhrdw/avgdvg.h"
222 
223 
224 
225 /*************************************
226  *
227  *	Machine init
228  *
229  *************************************/
230 
MACHINE_INIT(omegrace)231 static MACHINE_INIT( omegrace )
232 {
233 	/* Omega Race expects the vector processor to be ready. */
234 	avgdvg_reset_w (0, 0);
235 }
236 
237 
238 
239 /*************************************
240  *
241  *	Vector processor interaction
242  *
243  *************************************/
244 
READ_HANDLER(omegrace_vg_go_r)245 static READ_HANDLER( omegrace_vg_go_r )
246 {
247 	avgdvg_go_w(0,0);
248 	return 0;
249 }
250 
251 
READ_HANDLER(omegrace_vg_status_r)252 static READ_HANDLER( omegrace_vg_status_r )
253 {
254 	return avgdvg_done() ? 0x00 : 0x80;
255 }
256 
257 
258 
259 /*************************************
260  *
261  *	Input handlers
262  *
263  *************************************/
264 
265 /*
266  * Encoder bit mappings
267  * The encoder is a 64 way switch, with the inputs scrambled
268  * on the input port (and shifted 2 bits to the left for the
269  * 1 player encoder
270  *
271  * 3 6 5 4 7 2 for encoder 1 (shifted two bits left..)
272  *
273  *
274  * 5 4 3 2 1 0 for encoder 2 (not shifted..)
275  */
276 
277 static unsigned char spinnerTable[64] =
278 {
279 	0x00, 0x04, 0x14, 0x10, 0x18, 0x1c, 0x5c, 0x58,
280 	0x50, 0x54, 0x44, 0x40, 0x48, 0x4c, 0x6c, 0x68,
281 	0x60, 0x64, 0x74, 0x70, 0x78, 0x7c, 0xfc, 0xf8,
282 	0xf0, 0xf4, 0xe4, 0xe0, 0xe8, 0xec, 0xcc, 0xc8,
283 	0xc0, 0xc4, 0xd4, 0xd0, 0xd8, 0xdc, 0x9c, 0x98,
284 	0x90, 0x94, 0x84, 0x80, 0x88, 0x8c, 0xac, 0xa8,
285 	0xa0, 0xa4, 0xb4, 0xb0, 0xb8, 0xbc, 0x3c, 0x38,
286 	0x30, 0x34, 0x24, 0x20, 0x28, 0x2c, 0x0c, 0x08
287 };
288 
289 
READ_HANDLER(omegrace_spinner1_r)290 READ_HANDLER( omegrace_spinner1_r )
291 {
292 	return (spinnerTable[readinputport(4) & 0x3f]);
293 }
294 
295 
296 
297 /*************************************
298  *
299  *	Output handlers
300  *
301  *************************************/
302 
WRITE_HANDLER(omegrace_leds_w)303 WRITE_HANDLER( omegrace_leds_w )
304 {
305 	/* bits 0 and 1 are coin counters */
306 	coin_counter_w(0,data & 0x01);
307 	coin_counter_w(1,data & 0x02);
308 
309 	/* bits 2 to 5 are the start leds (4 and 5 cocktail only) */
310 	set_led_status(0,~data & 0x04);
311 	set_led_status(1,~data & 0x08);
312 	set_led_status(2,~data & 0x10);
313 	set_led_status(3,~data & 0x20);
314 
315 	/* bit 6 flips screen (not supported) */
316 }
317 
318 
WRITE_HANDLER(omegrace_soundlatch_w)319 WRITE_HANDLER( omegrace_soundlatch_w )
320 {
321 	soundlatch_w (offset, data);
322 	cpu_set_irq_line(1, 0, HOLD_LINE);
323 }
324 
325 
326 
327 /*************************************
328  *
329  *	Overlay
330  *
331  *************************************/
332 
333 OVERLAY_START( omegrace_overlay )
334 	OVERLAY_RECT( 0.0, 0.0, 1.0, 1.0, MAKE_ARGB(0x04,0xff,0xe4,0x57) )
335 OVERLAY_END
336 
337 
338 
339 /*************************************
340  *
341  *	Main CPU memory handlers
342  *
343  *************************************/
344 
MEMORY_READ_START(readmem)345 static MEMORY_READ_START( readmem )
346 	{ 0x0000, 0x3fff, MRA_ROM },
347 	{ 0x4000, 0x4bff, MRA_RAM },
348 	{ 0x5c00, 0x5cff, MRA_RAM }, /* NVRAM */
349 	{ 0x8000, 0x8fff, MRA_RAM },
350 	{ 0x9000, 0x9fff, MRA_ROM }, /* vector rom */
351 MEMORY_END
352 
353 
354 static MEMORY_WRITE_START( writemem )
355 	{ 0x0000, 0x3fff, MWA_ROM }, /* Omega Race tries to write there! */
356 	{ 0x4000, 0x4bff, MWA_RAM },
357 	{ 0x5c00, 0x5cff, MWA_RAM, &generic_nvram, &generic_nvram_size }, /* NVRAM */
358 	{ 0x8000, 0x8fff, MWA_RAM, &vectorram, &vectorram_size }, /* vector ram */
359 	{ 0x9000, 0x9fff, MWA_ROM }, /* vector rom */
360 MEMORY_END
361 
362 
363 static PORT_READ_START( readport )
364 	{ 0x08, 0x08, omegrace_vg_go_r },
365 	{ 0x09, 0x09, watchdog_reset_r },
366 	{ 0x0b, 0x0b, omegrace_vg_status_r }, /* vg_halt */
367 	{ 0x10, 0x10, input_port_0_r }, /* DIP SW C4 */
368 	{ 0x17, 0x17, input_port_1_r }, /* DIP SW C6 */
369 	{ 0x11, 0x11, input_port_2_r }, /* Player 1 input */
370 	{ 0x12, 0x12, input_port_3_r }, /* Player 2 input */
371 	{ 0x15, 0x15, omegrace_spinner1_r }, /* 1st controller */
372 	{ 0x16, 0x16, input_port_5_r }, /* 2nd controller (cocktail) */
373 PORT_END
374 
375 
376 static PORT_WRITE_START( writeport )
377 	{ 0x0a, 0x0a, avgdvg_reset_w },
378 	{ 0x13, 0x13, omegrace_leds_w }, /* coin counters, leds, flip screen */
379 	{ 0x14, 0x14, omegrace_soundlatch_w }, /* Sound command */
380 PORT_END
381 
382 
383 
384 /*************************************
385  *
386  *	Sound CPU memory handlers
387  *
388  *************************************/
389 
390 static MEMORY_READ_START( sound_readmem )
391 	{ 0x0000, 0x07ff, MRA_ROM },
392 	{ 0x1000, 0x13ff, MRA_RAM },
393 MEMORY_END
394 
395 
396 static MEMORY_WRITE_START( sound_writemem )
397 	{ 0x0000, 0x07ff, MWA_ROM },
398 	{ 0x1000, 0x13ff, MWA_RAM },
399 MEMORY_END
400 
401 
402 static PORT_READ_START( sound_readport )
403 	{ 0x00, 0x00, soundlatch_r },
404 PORT_END
405 
406 
407 static PORT_WRITE_START( sound_writeport )
408 	{ 0x00, 0x00, AY8910_control_port_0_w },
409 	{ 0x01, 0x01, AY8910_write_port_0_w },
410 	{ 0x02, 0x02, AY8910_control_port_1_w },
411 	{ 0x03, 0x03, AY8910_write_port_1_w },
412 PORT_END
413 
414 
415 
416 /*************************************
417  *
418  *	Port definitions
419  *
420  *************************************/
421 
422 INPUT_PORTS_START( omegrace )
423 	PORT_START /* SW0 */
424 	PORT_DIPNAME( 0x03, 0x03, "1st Bonus Life" )
425 	PORT_DIPSETTING (   0x00, "40k" )
426 	PORT_DIPSETTING (   0x01, "50k" )
427 	PORT_DIPSETTING (   0x02, "70k" )
428 	PORT_DIPSETTING (   0x03, "100k" )
429 	PORT_DIPNAME( 0x0c, 0x0c, "2nd & 3rd Bonus Life" )
430 	PORT_DIPSETTING (   0x00, "150k 250k" )
431 	PORT_DIPSETTING (   0x04, "250k 500k" )
432 	PORT_DIPSETTING (   0x08, "500k 750k" )
433 	PORT_DIPSETTING (   0x0c, "750k 1500k" )
434 	PORT_DIPNAME( 0x30, 0x30, "Credit(s)/Ships" )
435 	PORT_DIPSETTING (   0x00, "1C/2S 2C/4S" )
436 	PORT_DIPSETTING (   0x10, "1C/2S 2C/5S" )
437 	PORT_DIPSETTING (   0x20, "1C/3S 2C/6S" )
438 	PORT_DIPSETTING (   0x30, "1C/3S 2C/7S" )
439 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
440 	PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
441 	PORT_DIPSETTING (   0x40, DEF_STR( On ) )
442 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
443 	PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
444 	PORT_DIPSETTING (   0x80, DEF_STR( On ) )
445 
446 	PORT_START /* SW1 */
447 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )
448 	PORT_DIPSETTING (   0x06, DEF_STR( 2C_1C ) )
449 	PORT_DIPSETTING (   0x07, DEF_STR( 1C_1C ) )
450 	PORT_DIPSETTING (   0x03, DEF_STR( 4C_5C ) )
451 	PORT_DIPSETTING (   0x04, DEF_STR( 3C_4C ) )
452 	PORT_DIPSETTING (   0x05, DEF_STR( 2C_3C ) )
453 	PORT_DIPSETTING (   0x00, DEF_STR( 1C_2C ) )
454 	PORT_DIPSETTING (   0x01, DEF_STR( 1C_3C ) )
455 	PORT_DIPSETTING (   0x02, DEF_STR( 1C_5C ) )
456 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) )
457 	PORT_DIPSETTING (   0x30, DEF_STR( 2C_1C ) )
458 	PORT_DIPSETTING (   0x38, DEF_STR( 1C_1C ) )
459 	PORT_DIPSETTING (   0x18, DEF_STR( 4C_5C ) )
460 	PORT_DIPSETTING (   0x20, DEF_STR( 3C_4C ) )
461 	PORT_DIPSETTING (   0x28, DEF_STR( 2C_3C ) )
462 	PORT_DIPSETTING (   0x00, DEF_STR( 1C_2C ) )
463 	PORT_DIPSETTING (   0x08, DEF_STR( 1C_3C ) )
464 	PORT_DIPSETTING (   0x10, DEF_STR( 1C_5C ) )
465 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Free_Play ) )
466 	PORT_DIPSETTING (   0x00, DEF_STR( Off ) )
467 	PORT_DIPSETTING (   0x40, DEF_STR( On ) )
468 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
469 	PORT_DIPSETTING (   0x00, DEF_STR( Upright ) )
470 	PORT_DIPSETTING (   0x80, DEF_STR( Cocktail ) )
471 
472 	PORT_START /* IN2 - port 0x11 */
473 	PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
474 	PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
475 	PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
476 	PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
477 	PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_TILT )
478 	PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
479 	PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
480 	PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
481 
482 	PORT_START /* IN3 - port 0x12 */
483 	PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
484 	PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
485 	PORT_BITX( 0x04, IP_ACTIVE_HIGH, IPT_START2, "2 Players Start (1 credit)", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
486 	PORT_BITX( 0x08, IP_ACTIVE_HIGH, IPT_START4, "2 Players Start (2 credits)", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
487 	PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
488 	PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
489 	PORT_BITX( 0x40, IP_ACTIVE_HIGH, IPT_START1, "1 Player Start (1 credit)", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
490 	PORT_BITX( 0x80, IP_ACTIVE_HIGH, IPT_START3, "1 Player Start (2 credits)", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
491 
492 	PORT_START /* IN4 - port 0x15 - spinner */
493 	PORT_ANALOG(0x3f, 0x00, IPT_DIAL, 12, 10, 0, 0 )
494 
495 	PORT_START /* IN5 - port 0x16 - second spinner */
496 	PORT_ANALOG(0x3f, 0x00, IPT_DIAL | IPF_COCKTAIL, 12, 10, 0, 0 )
497 INPUT_PORTS_END
498 
499 
500 
501 /*************************************
502  *
503  *	Sound interfaces
504  *
505  *************************************/
506 
507 static struct AY8910interface ay8910_interface =
508 {
509 	2,	/* 2 chips */
510 	1500000,	/* 1.5 MHz */
511 	{ 25, 25 },
512 	{ 0 },
513 	{ 0 },
514 	{ 0 },
515 	{ 0 }
516 };
517 
518 
519 
520 /*************************************
521  *
522  *	Machine drivers
523  *
524  *************************************/
525 
526 static MACHINE_DRIVER_START( omegrace )
527 
528 	/* basic machine hardware */
529 	MDRV_CPU_ADD(Z80, 3000000)
MDRV_CPU_MEMORY(readmem,writemem)530 	MDRV_CPU_MEMORY(readmem,writemem)
531 	MDRV_CPU_PORTS(readport,writeport)
532 	MDRV_CPU_PERIODIC_INT(irq0_line_hold,250)
533 
534 	MDRV_CPU_ADD(Z80, 1500000)
535 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
536 	MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
537 	MDRV_CPU_PORTS(sound_readport,sound_writeport)
538 	MDRV_CPU_PERIODIC_INT(nmi_line_pulse,250)
539 
540 	MDRV_FRAMES_PER_SECOND(40)
541 
542 	MDRV_MACHINE_INIT(omegrace)
543 	MDRV_NVRAM_HANDLER(generic_0fill)
544 
545 	/* video hardware */
546 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_VECTOR | VIDEO_RGB_DIRECT)
547 	MDRV_SCREEN_SIZE(400, 300)
548 	MDRV_VISIBLE_AREA(0, 1020, -10, 1010)
549 	MDRV_PALETTE_LENGTH(32768)
550 
551 	MDRV_PALETTE_INIT(avg_white)
552 	MDRV_VIDEO_START(dvg)
553 	MDRV_VIDEO_UPDATE(vector)
554 
555 	/* sound hardware */
556 	MDRV_SOUND_ADD(AY8910, ay8910_interface)
557 MACHINE_DRIVER_END
558 
559 
560 
561 /*************************************
562  *
563  *	ROM definitions
564  *
565  *************************************/
566 
567 ROM_START( omegrace )
568 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
569 	ROM_LOAD( "omega.m7",     0x0000, 0x1000, CRC(0424d46e) SHA1(cc1ac6c06ba6f6e8466fa08286a0c70b5335af33) )
570 	ROM_LOAD( "omega.l7",     0x1000, 0x1000, CRC(edcd7a7d) SHA1(5d142de2f48b01d563578a54fd5540e5d0ac8f4c) )
571 	ROM_LOAD( "omega.k7",     0x2000, 0x1000, CRC(6d10f197) SHA1(9609a0cbeeef2efa10d49cde9f0afdca96e9c2f8) )
572 	ROM_LOAD( "omega.j7",     0x3000, 0x1000, CRC(8e8d4b54) SHA1(944192c0f6f0cdb25d492ee9f33959d38a1062f2) )
573 	ROM_LOAD( "omega.e1",     0x9000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
574 	ROM_LOAD( "omega.f1",     0x9800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
575 
576 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 64k for audio cpu */
577 	ROM_LOAD( "sound.k5",     0x0000, 0x0800, CRC(7d426017) SHA1(370f0fb5608819de873c845f6010cbde75a9818e) )
578 ROM_END
579 
580 ROM_START( deltrace )
581 	ROM_REGION( 0x10000, REGION_CPU1, 0 )	/* 64k for code */
582 	ROM_LOAD( "omega.m7",     0x0000, 0x1000, CRC(0424d46e) SHA1(cc1ac6c06ba6f6e8466fa08286a0c70b5335af33) )
583 	ROM_LOAD( "omega.l7",     0x1000, 0x1000, CRC(edcd7a7d) SHA1(5d142de2f48b01d563578a54fd5540e5d0ac8f4c) )
584 	ROM_LOAD( "omega.k7",     0x2000, 0x1000, CRC(6d10f197) SHA1(9609a0cbeeef2efa10d49cde9f0afdca96e9c2f8) )
585 	ROM_LOAD( "delta.j7",     0x3000, 0x1000, CRC(8ef9541e) SHA1(89e34f50a958ac60c5f223bcb6c1c14796b903c7) )
586 	ROM_LOAD( "omega.e1",     0x9000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
587 	ROM_LOAD( "omega.f1",     0x9800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
588 
589 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 64k for audio cpu */
590 	ROM_LOAD( "sound.k5",     0x0000, 0x0800, CRC(7d426017) SHA1(370f0fb5608819de873c845f6010cbde75a9818e) )
591 ROM_END
592 
593 
594 /*************************************
595  *
596  *	Driver initialization
597  *
598  *************************************/
599 
600 static DRIVER_INIT( omegrace )
601 {
602     	/* Removed 2019-01-02 based on report that this yellow overlay is not accurate to original hardware */
603 	/* Reinstated 2020-09-09 based on evidence of two sources of original hardware showing overlay color: */
604 	/* https://www.youtube.com/watch?v=PTb5JVCPc2g */
605     	/* https://www.youtube.com/watch?v=BgIYtzccPnw */
606     	/* Also shown as yellow in flyer: https://flyers.arcade-museum.com/?page=flyer&db=videodb&id=752&image=1 */
607     	/* and in flyer: https://flyers.arcade-museum.com/?page=flyer&db=videodb&id=752&image=2 */
608 	artwork_set_overlay(omegrace_overlay);
609 }
610 
611 
612 
613 /*************************************
614  *
615  *	Game drivers
616  *
617  *************************************/
618 
619 GAMEX( 1981, omegrace, 0,        omegrace, omegrace, omegrace, ROT0, "Midway",         "Omega Race", GAME_NO_COCKTAIL )
620 GAMEX( 1981, deltrace, omegrace, omegrace, omegrace, omegrace, ROT0, "Allied Leisure", "Delta Race", GAME_NO_COCKTAIL )
621