1 /***************************************************************************
2 
3 Over Drive (GX789) (c) 1990 Konami
4 
5 driver by Nicola Salmoria
6 
7 Notes:
8 - Missing road (two unemulated K053250)
9 - Visible area and relative placement of sprites and tiles is most likely wrong.
10 - Test mode doesn't work well with 3 IRQ5 per frame, the ROM check doens't work
11   and the coin A setting isn't shown. It's OK with 1 IRQ5 per frame.
12 - Some flickering sprites, this might be an interrupt/timing issue
13 - The screen is cluttered with sprites which aren't supposed to be visible,
14   increasing the coordinate mask in K053247_sprites_draw() from 0x3ff to 0xfff
15   fixes this but breaks other games (e.g. Vendetta).
16 - The "Continue?" sprites are not visible until you press start
17 - priorities
18 
19 ***************************************************************************/
20 
21 #include "driver.h"
22 #include "vidhrdw/konamiic.h"
23 #include "machine/eeprom.h"
24 #include "cpu/m6809/m6809.h"
25 
26 
27 VIDEO_START( overdriv );
28 VIDEO_UPDATE( overdriv );
29 
30 
31 
32 
READ16_HANDLER(K051316_0_msb_r)33 static READ16_HANDLER( K051316_0_msb_r )
34 {
35 	return K051316_0_r(offset) << 8;
36 }
37 
READ16_HANDLER(K051316_1_msb_r)38 static READ16_HANDLER( K051316_1_msb_r )
39 {
40 	return K051316_1_r(offset) << 8;
41 }
42 
READ16_HANDLER(K051316_rom_0_msb_r)43 static READ16_HANDLER( K051316_rom_0_msb_r )
44 {
45 	return K051316_rom_0_r(offset) << 8;
46 }
47 
READ16_HANDLER(K051316_rom_1_msb_r)48 static READ16_HANDLER( K051316_rom_1_msb_r )
49 {
50 	return K051316_rom_1_r(offset) << 8;
51 }
52 
WRITE16_HANDLER(K051316_0_msb_w)53 static WRITE16_HANDLER( K051316_0_msb_w )
54 {
55 	if (ACCESSING_MSB)
56 		K051316_0_w(offset,data >> 8);
57 }
58 
WRITE16_HANDLER(K051316_1_msb_w)59 static WRITE16_HANDLER( K051316_1_msb_w )
60 {
61 	if (ACCESSING_MSB)
62 		K051316_1_w(offset,data >> 8);
63 }
64 
WRITE16_HANDLER(K051316_ctrl_0_msb_w)65 static WRITE16_HANDLER( K051316_ctrl_0_msb_w )
66 {
67 	if (ACCESSING_MSB)
68 		K051316_ctrl_0_w(offset,data >> 8);
69 }
70 
WRITE16_HANDLER(K051316_ctrl_1_msb_w)71 static WRITE16_HANDLER( K051316_ctrl_1_msb_w )
72 {
73 	if (ACCESSING_MSB)
74 		K051316_ctrl_1_w(offset,data >> 8);
75 }
76 
77 
78 /***************************************************************************
79 
80   EEPROM
81 
82 ***************************************************************************/
83 
84 static data8_t default_eeprom[128] =
85 {
86 	0x77,0x58,0xFF,0xFF,0x00,0x78,0x90,0x00,0x00,0x78,0x70,0x00,0x00,0x78,0x50,0x00,
87 	0x54,0x41,0x4B,0x51,0x31,0x36,0x46,0x55,0x4A,0xFF,0x03,0x00,0x02,0x70,0x02,0x50,
88 	0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,
89 	0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,
90 	0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,
91 	0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,
92 	0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,
93 	0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03,0x00,0xB4,0x03
94 };
95 
96 
97 static struct EEPROM_interface eeprom_interface =
98 {
99 	6,				/* address bits */
100 	16,				/* data bits */
101 	"011000",		/*  read command */
102 	"010100",		/* write command */
103 	0,				/* erase command */
104 	"010000000000",	/* lock command */
105 	"010011000000"	/* unlock command */
106 };
107 
NVRAM_HANDLER(overdriv)108 static NVRAM_HANDLER( overdriv )
109 {
110 	if (read_or_write)
111 		EEPROM_save(file);
112 	else
113 	{
114 		EEPROM_init(&eeprom_interface);
115 
116 		if (file)
117 			EEPROM_load(file);
118 		else
119 			EEPROM_set_data(default_eeprom,sizeof(default_eeprom));
120 	}
121 }
122 
READ16_HANDLER(eeprom_r)123 static READ16_HANDLER( eeprom_r )
124 {
125 	int res;
126 
127 /*logerror("%06x eeprom_r\n",activecpu_get_pc());*/
128 	/* bit 6 is EEPROM data */
129 	res = (EEPROM_read_bit() << 6) | input_port_0_word_r(0,0);
130 
131 	return res;
132 }
133 
WRITE16_HANDLER(eeprom_w)134 static WRITE16_HANDLER( eeprom_w )
135 {
136 /*logerror("%06x: write %04x to eeprom_w\n",activecpu_get_pc(),data);*/
137 	if (ACCESSING_LSB)
138 	{
139 		/* bit 0 is data */
140 		/* bit 1 is clock (active high) */
141 		/* bit 2 is cs (active low) */
142 		EEPROM_write_bit(data & 0x01);
143 		EEPROM_set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE);
144 		EEPROM_set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
145 	}
146 }
147 
148 
149 
150 
151 
INTERRUPT_GEN(cpuA_interrupt)152 static INTERRUPT_GEN( cpuA_interrupt )
153 {
154 	if (cpu_getiloops()) cpu_set_irq_line(0, 5, HOLD_LINE);
155 	else cpu_set_irq_line(0, 4, HOLD_LINE);
156 }
157 
INTERRUPT_GEN(cpuB_interrupt)158 static INTERRUPT_GEN( cpuB_interrupt )
159 {
160 	if (K053246_is_IRQ_enabled()) cpu_set_irq_line(1, 4, HOLD_LINE);
161 }
162 
163 
MACHINE_INIT(overdriv)164 static MACHINE_INIT( overdriv )
165 {
166 	/* start with cpu B halted */
167 	cpu_set_reset_line(1,ASSERT_LINE);
168 }
169 
WRITE16_HANDLER(cpuA_ctrl_w)170 static WRITE16_HANDLER( cpuA_ctrl_w )
171 {
172 	if (ACCESSING_LSB)
173 	{
174 		/* bit 0 probably enables the second 68000 */
175 		cpu_set_reset_line(1,(data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
176 
177 		/* bit 1 is clear during service mode - function unknown */
178 
179 		set_led_status(0,data & 0x08);
180 		coin_counter_w(0,data & 0x10);
181 		coin_counter_w(1,data & 0x20);
182 
183 /*logerror("%06x: write %04x to cpuA_ctrl_w\n",activecpu_get_pc(),data);*/
184 	}
185 }
186 
187 
188 static data16_t cpuB_ctrl;
189 
READ16_HANDLER(cpuB_ctrl_r)190 static READ16_HANDLER( cpuB_ctrl_r )
191 {
192 	return cpuB_ctrl;
193 }
194 
WRITE16_HANDLER(cpuB_ctrl_w)195 static WRITE16_HANDLER( cpuB_ctrl_w )
196 {
197 	COMBINE_DATA(&cpuB_ctrl);
198 
199 	if (ACCESSING_LSB)
200 	{
201 		/* bit 0 = enable sprite ROM reading */
202 		K053246_set_OBJCHA_line((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
203 
204 		/* bit 1 used but unknown (irq enable?) */
205 
206 		/* other bits unused? */
207 	}
208 }
209 
210 
211 static data16_t *sharedram;
212 
READ16_HANDLER(sharedram_r)213 static READ16_HANDLER( sharedram_r )
214 {
215 	return sharedram[offset];
216 }
217 
WRITE16_HANDLER(sharedram_w)218 static WRITE16_HANDLER( sharedram_w )
219 {
220 	COMBINE_DATA(&sharedram[offset]);
221 }
222 
223 
224 
READ16_HANDLER(overdriv_sound_0_r)225 static READ16_HANDLER( overdriv_sound_0_r )
226 {
227 	return K053260_0_r(2 + offset);
228 }
229 
READ16_HANDLER(overdriv_sound_1_r)230 static READ16_HANDLER( overdriv_sound_1_r )
231 {
232 	return K053260_1_r(2 + offset);
233 }
234 
WRITE16_HANDLER(overdriv_soundirq_w)235 static WRITE16_HANDLER( overdriv_soundirq_w )
236 {
237 	cpu_set_irq_line(2,M6809_IRQ_LINE,HOLD_LINE);
238 }
239 
WRITE16_HANDLER(overdriv_cpuB_irq5_w)240 static WRITE16_HANDLER( overdriv_cpuB_irq5_w )
241 {
242 	cpu_set_irq_line(1,5,HOLD_LINE);
243 }
244 
WRITE16_HANDLER(overdriv_cpuB_irq6_w)245 static WRITE16_HANDLER( overdriv_cpuB_irq6_w )
246 {
247 	cpu_set_irq_line(1,6,HOLD_LINE);
248 }
249 
250 
251 
252 
MEMORY_READ16_START(overdriv_readmem)253 static MEMORY_READ16_START( overdriv_readmem )
254 	{ 0x000000, 0x03ffff, MRA16_ROM },
255 	{ 0x040000, 0x043fff, MRA16_RAM },
256 	{ 0x080000, 0x080fff, MRA16_RAM },
257 	{ 0x0c0000, 0x0c0001, eeprom_r },
258 	{ 0x0c0002, 0x0c0003, input_port_1_word_r },
259 	{ 0x180000, 0x180001, input_port_2_word_r },
260 	{ 0x1d8000, 0x1d8003, overdriv_sound_0_r },	/* K053260 */
261 	{ 0x1e0000, 0x1e0003, overdriv_sound_1_r },	/* K053260 */
262 	{ 0x200000, 0x203fff, sharedram_r },
263 	{ 0x210000, 0x210fff, K051316_0_msb_r },
264 	{ 0x218000, 0x218fff, K051316_1_msb_r },
265 	{ 0x220000, 0x220fff, K051316_rom_0_msb_r },
266 	{ 0x228000, 0x228fff, K051316_rom_1_msb_r },
267 MEMORY_END
268 
269 static MEMORY_WRITE16_START( overdriv_writemem )
270 	{ 0x000000, 0x03ffff, MWA16_ROM },
271 	{ 0x040000, 0x043fff, MWA16_RAM },	/* work RAM */
272 	{ 0x080000, 0x080fff, paletteram16_xBBBBBGGGGGRRRRR_word_w, &paletteram16 },
273 	{ 0x0e0000, 0x0e0001, MWA16_NOP },	/* unknown (always 0x30) */
274 	{ 0x100000, 0x10001f, MWA16_NOP },	/* 053252? (LSB) */
275 	{ 0x140000, 0x140001, watchdog_reset16_w },
276 	{ 0x1c0000, 0x1c001f, K051316_ctrl_0_msb_w },
277 	{ 0x1c8000, 0x1c801f, K051316_ctrl_1_msb_w },
278 	{ 0x1d0000, 0x1d001f, K053251_msb_w },
279 	{ 0x1d8000, 0x1d8003, K053260_0_lsb_w },
280 	{ 0x1e0000, 0x1e0003, K053260_1_lsb_w },
281 	{ 0x1e8000, 0x1e8001, overdriv_soundirq_w },
282 	{ 0x1f0000, 0x1f0001, cpuA_ctrl_w },	/* halt cpu B, coin counter, start lamp, other? */
283 	{ 0x1f8000, 0x1f8001, eeprom_w },
284 	{ 0x200000, 0x203fff, sharedram_w, &sharedram },
285 	{ 0x210000, 0x210fff, K051316_0_msb_w },
286 	{ 0x218000, 0x218fff, K051316_1_msb_w },
287 	{ 0x230000, 0x230001, overdriv_cpuB_irq6_w },
288 	{ 0x238000, 0x238001, overdriv_cpuB_irq5_w },
289 MEMORY_END
290 
291 
292 static MEMORY_READ16_START( overdriv_readmem2 )
293 	{ 0x000000, 0x03ffff, MRA16_ROM },
294 	{ 0x080000, 0x083fff, MRA16_RAM },
295 { 0x0c0000, 0x0c1fff, MRA16_RAM },
296 { 0x100000, 0x10000f, MRA16_NOP },	/* K053250 #0*/
297 { 0x108000, 0x10800f, MRA16_NOP },	/* K053250 #1*/
298 	{ 0x118000, 0x118fff, K053247_word_r },
299 	{ 0x120000, 0x120001, K053246_word_r },
300 	{ 0x128000, 0x128001, cpuB_ctrl_r },
301 	{ 0x200000, 0x203fff, sharedram_r },
302 { 0x208000, 0x20bfff, MRA16_RAM },
303 
304 { 0x218000, 0x219fff, MRA16_NOP },	/* K053250 #0 gfx ROM read (LSB)*/
305 { 0x220000, 0x221fff, MRA16_NOP },	/* K053250 #1 gfx ROM read (LSB)*/
306 MEMORY_END
307 
308 static MEMORY_WRITE16_START( overdriv_writemem2 )
309 	{ 0x000000, 0x03ffff, MWA16_ROM },
310 	{ 0x080000, 0x083fff, MWA16_RAM },	/* work RAM */
311 { 0x0c0000, 0x0c1fff, MWA16_RAM },
312 { 0x100000, 0x10000f, MWA16_NOP },	/* K053250 #0*/
313 { 0x108000, 0x10800f, MWA16_NOP },	/* K053250 #1*/
314 	{ 0x118000, 0x118fff, K053247_word_w },
315 	{ 0x128000, 0x128001, cpuB_ctrl_w },	/* enable K053247 ROM reading, plus something else */
316 	{ 0x130000, 0x130007, K053246_word_w },
317 	{ 0x200000, 0x203fff, sharedram_w },
318 { 0x208000, 0x20bfff, MWA16_RAM },
319 MEMORY_END
320 
321 
322 static MEMORY_READ_START( overdriv_s_readmem )
323 	{ 0x0201, 0x0201, YM2151_status_port_0_r },
324 	{ 0x0400, 0x042f, K053260_0_r },
325 	{ 0x0600, 0x062f, K053260_1_r },
326 	{ 0x0800, 0x0fff, MRA_RAM },
327 	{ 0x1000, 0xffff, MRA_ROM },
328 MEMORY_END
329 
330 static MEMORY_WRITE_START( overdriv_s_writemem )
331 	{ 0x0200, 0x0200, YM2151_register_port_0_w },
332 	{ 0x0201, 0x0201, YM2151_data_port_0_w },
333 	{ 0x0400, 0x042f, K053260_0_w },
334 	{ 0x0600, 0x062f, K053260_1_w },
335 	{ 0x0800, 0x0fff, MWA_RAM },
336 	{ 0x1000, 0xffff, MWA_ROM },
337 MEMORY_END
338 
339 
340 
341 INPUT_PORTS_START( overdriv )
342 	PORT_START
343 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_TOGGLE )
344 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
345 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
346 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
347 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
348 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
349 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* EEPROM data */
350 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
351 
352 	PORT_START
353 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
354 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
355 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
356 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
357 	PORT_BITX(0x10, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
358 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
359 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
360 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL )	/* ?*/
361 
362 	PORT_START
363 	PORT_ANALOG( 0xff, 0x80, IPT_DIAL | IPF_CENTER, 100, 50, 0, 0 )
364 INPUT_PORTS_END
365 
366 
367 
368 static struct GfxLayout charlayout =
369 {
370 	8,8,
371 	RGN_FRAC(1,1),
372 	4,
373 	{ 0, 1, 2, 3 },
374 	{ STEP8(0,4) },
375 	{ STEP8(7*8*4,-8*4) },
376 	8*8*4
377 };
378 
379 static struct GfxDecodeInfo gfxdecodeinfo[] =
380 {
381 	{ REGION_GFX4, 0, &charlayout, 0, 0x80 },
382 	{ REGION_GFX5, 0, &charlayout, 0, 0x80 },
383 	{ -1 }
384 };
385 
386 
387 
388 static struct YM2151interface ym2151_interface =
389 {
390 	1,			/* 1 chip */
391 	3579545,	/* 3.579545 MHz */
392 	{ YM3012_VOL(100,MIXER_PAN_LEFT,100,MIXER_PAN_RIGHT) },
393 	{ 0 }
394 };
395 
396 static struct K053260_interface k053260_interface =
397 {
398 	2,
399 	{ 3579545, 3579545 },
400 	{ REGION_SOUND1, REGION_SOUND1 }, /* memory region */
401 	{ { MIXER(70,MIXER_PAN_LEFT), MIXER(70,MIXER_PAN_RIGHT) }, { MIXER(70,MIXER_PAN_LEFT), MIXER(70,MIXER_PAN_RIGHT) } },
402 	{ 0, 0 }
403 };
404 
405 
406 
407 static MACHINE_DRIVER_START( overdriv )
408 
409 	/* basic machine hardware */
410 	MDRV_CPU_ADD(M68000,24000000/2)	/* 12 MHz */
MDRV_CPU_MEMORY(overdriv_readmem,overdriv_writemem)411 	MDRV_CPU_MEMORY(overdriv_readmem,overdriv_writemem)
412 	MDRV_CPU_VBLANK_INT(cpuA_interrupt,4)	/* ??? IRQ 4 is vblank, IRQ 5 of unknown origin */
413 
414 	MDRV_CPU_ADD(M68000,24000000/2)	/* 12 MHz */
415 	MDRV_CPU_MEMORY(overdriv_readmem2,overdriv_writemem2)
416 	MDRV_CPU_VBLANK_INT(cpuB_interrupt,1)	/* IRQ 5 and 6 are generated by the main CPU. */
417 								/* IRQ 5 is used only in test mode, to request the checksums of the gfx ROMs. */
418 	MDRV_CPU_ADD(M6809,3579545/2)	/* 1.789 MHz?? This might be the right speed, but ROM testing */
419 						/* takes a little too much (the counter wraps from 0000 to 9999). */
420 						/* This might just mean that the video refresh rate is less than */
421 						/* 60 fps, that's how I fixed it for now. */
422 	MDRV_CPU_MEMORY(overdriv_s_readmem,overdriv_s_writemem)
423 
424 	MDRV_FRAMES_PER_SECOND(59)
425 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
426 	MDRV_INTERLEAVE(200)
427 
428 	MDRV_MACHINE_INIT(overdriv)
429 	MDRV_NVRAM_HANDLER(overdriv)
430 
431 	/* video hardware */
432 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS)
433 	MDRV_SCREEN_SIZE(64*8, 32*8)
434 	MDRV_VISIBLE_AREA(13*8, (64-13)*8-1, 0*8, 32*8-1 )
435 	MDRV_GFXDECODE(gfxdecodeinfo)
436 	MDRV_PALETTE_LENGTH(2048)
437 
438 	MDRV_VIDEO_START(overdriv)
439 	MDRV_VIDEO_UPDATE(overdriv)
440 
441 	/* sound hardware */
442 	MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
443 	MDRV_SOUND_ADD(YM2151, ym2151_interface)
444 	MDRV_SOUND_ADD(K053260, k053260_interface)
445 MACHINE_DRIVER_END
446 
447 
448 
449 /***************************************************************************
450 
451   Game driver(s)
452 
453 ***************************************************************************/
454 
455 ROM_START( overdriv )
456 	ROM_REGION( 0x40000, REGION_CPU1, 0 )
457 	ROM_LOAD16_BYTE( "789.2",        0x00000, 0x20000, CRC(77f18f3f) SHA1(a8c91435573c7851a7864d07eeacfb2f142abbe2) )
458 	ROM_LOAD16_BYTE( "789.1",        0x00001, 0x20000, CRC(4f44e6ad) SHA1(9fa871f55e6b2ec353dd979ded568cd9da83f5d6) )
459 
460 	ROM_REGION( 0x40000, REGION_CPU2, 0 )
461 	ROM_LOAD16_BYTE( "789.4",        0x00000, 0x20000, CRC(46fb7e88) SHA1(f706a76aff9bec64abe6da325cba0715d6e6ed0a) )
462 	ROM_LOAD16_BYTE( "789.3",        0x00001, 0x20000, CRC(24427195) SHA1(48f4f81729acc0e497b40fddbde11242c5c4c573) )
463 
464 	ROM_REGION( 0x10000, REGION_CPU3, 0 )	/* 64k for the audio CPU */
465 	ROM_LOAD( "789.5",        0x00000, 0x10000, CRC(1085f069) SHA1(27228cedb357ff2e130a4bd6d8aa01cf537e034f) )
466 
467 	ROM_REGION( 0x400000, REGION_GFX1, 0 )	/* graphics (addressable by the CPU) */
468 	ROM_LOAD( "e12.r1",       0x000000, 0x100000, CRC(14a10fb2) SHA1(03fb9c15514c5ecc2d9ae4a53961c4bbb49cec73) )	/* sprites */
469 	ROM_LOAD( "e13.r4",       0x100000, 0x100000, CRC(6314a628) SHA1(f8a8918998c266109348c77427a7696b503daeb3) )
470 	ROM_LOAD( "e14.r10",      0x200000, 0x100000, CRC(b5eca14b) SHA1(a1c5f5e9cd8bbcfc875e2acb33be024724da63aa) )
471 	ROM_LOAD( "e15.r15",      0x300000, 0x100000, CRC(5d93e0c3) SHA1(d5cb7666c0c28fd465c860c7f9dbb18a7f739a93) )
472 
473 	ROM_REGION( 0x020000, REGION_GFX2, 0 )	/* graphics (addressable by the CPU) */
474 	ROM_LOAD( "e06.a21",      0x000000, 0x020000, CRC(14a085e6) SHA1(86dad6f223e13ff8af7075c3d99bb0a83784c384) )	/* zoom/rotate */
475 
476 	ROM_REGION( 0x020000, REGION_GFX3, 0 )	/* graphics (addressable by the CPU) */
477 	ROM_LOAD( "e07.c23",      0x000000, 0x020000, CRC(8a6ceab9) SHA1(1a52b7361f71a6126cd648a76af00223d5b25c7a) )	/* zoom/rotate */
478 
479 	ROM_REGION( 0x0c0000, REGION_GFX4, 0 )	/* graphics (addressable by the CPU) */
480 	ROM_LOAD( "e18.p22",      0x000000, 0x040000, CRC(985a4a75) SHA1(b726166c295be6fbec38a9d11098cc4a4a5de456) )	/* 053250 #0 */
481 	ROM_LOAD( "e19.r22",      0x040000, 0x040000, CRC(15c54ea2) SHA1(5b10bd28e48e51613359820ba8c75d4a91c2d322) )
482 	ROM_LOAD( "e20.s22",      0x080000, 0x040000, CRC(ea204acd) SHA1(52b8c30234eaefcba1074496028a4ac2bca48e95) )
483 
484 	ROM_REGION( 0x080000, REGION_GFX5, 0 )	/* unknown (053250?) */
485 	ROM_LOAD( "e16.p12",      0x000000, 0x040000, CRC(9348dee1) SHA1(367193373e28962b5b0e54cc15d68ed88ab83f12) )	/* 053250 #1 */
486 	ROM_LOAD( "e17.p17",      0x040000, 0x040000, CRC(04c07248) SHA1(873445002cbf90c9fc5a35bf4a8f6c43193ee342) )
487 
488 	ROM_REGION( 0x200000, REGION_SOUND1, 0 )	/* 053260 samples */
489 	ROM_LOAD( "e03.j1",       0x000000, 0x100000, CRC(51ebfebe) SHA1(17f0c23189258e801f48d5833fe934e7a48d071b) )
490 	ROM_LOAD( "e02.f1",       0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) )
491 ROM_END
492 
493 
494 
495 static DRIVER_INIT( overdriv )
496 {
497 	konami_rom_deinterleave_4(REGION_GFX1);
498 }
499 
500 
501 
502 GAMEX( 1990, overdriv, 0, overdriv, overdriv, overdriv, ROT90, "Konami", "Over Drive", GAME_IMPERFECT_GRAPHICS )
503