1 /***************************************************************************
2 
3 	Karnov (USA version)                   (c) 1987 Data East USA
4 	Karnov (Japanese version)              (c) 1987 Data East Corporation
5 	Wonder Planet (Japanese version)       (c) 1987 Data East Corporation
6 	Chelnov (World version)                (c) 1987 Data East Corporation
7 	Chelnov (USA version)                  (c) 1988 Data East USA
8 	Chelnov (Japanese version)             (c) 1987 Data East Corporation
9 
10 
11 	Emulation by Bryan McPhail, mish@tendril.co.uk
12 
13 
14 	NOTE!  Karnov USA & Karnov Japan sets have different gameplay!
15 	  and Chelnov USA & Chelnov Japan sets have different gameplay!
16 
17 	These games use a 68000 main processor with a 6502, YM2203C and YM3526 for
18 	sound.  Karnov was a major pain to get going because of the
19 	'protection' on the main player sprite, probably connected to the Intel
20 	microcontroller on the board.  The game is very sensitive to the wrong values
21 	at the input ports...
22 
23 	There is another Karnov rom set - a bootleg version of the Japanese roms with
24 	the Data East copyright removed - not supported because the original Japanese
25 	roms work fine.
26 
27 	One of the two color PROMs for chelnov and chelnoj is different; one is most
28 	likely a bad read, but I don't know which one.
29 
30 	Thanks to Oliver Stabel <stabel@rhein-neckar.netsurf.de> for confirming some
31 	of the sprite & control information :)
32 
33 	Cheats:
34 
35 	Karnov - put 0x30 at 0x60201 to skip a level
36 	Chelnov - level number at 0x60189 - enter a value at cartoon intro
37 
38 *******************************************************************************/
39 
40 #include "driver.h"
41 #include "vidhrdw/generic.h"
42 
43 PALETTE_INIT( karnov );
44 VIDEO_UPDATE( karnov );
45 WRITE16_HANDLER( karnov_playfield_w );
46 WRITE16_HANDLER( karnov_videoram_w );
47 void karnov_flipscreen_w(int data);
48 
49 VIDEO_START( karnov );
50 VIDEO_START( wndrplnt );
51 
52 enum { KARNOV=0, KARNOVJ, CHELNOV, CHELNOVJ, CHELNOVW, WNDRPLNT };
53 
54 static data16_t i8751_return,i8751_needs_ack,i8751_coin_pending,i8751_command_queue;
55 static data16_t *karnov_ram;
56 extern data16_t karnov_scroll[2], *karnov_pf_data;
57 static int microcontroller_id,coin_mask;
58 
59 /******************************************************************************/
60 
61 /* Emulation of the protected microcontroller - for coins & general protection */
karnov_i8751_w(int data)62 static void karnov_i8751_w(int data)
63 {
64 	/* Pending coin operations may cause protection commands to be queued */
65 	if (i8751_needs_ack) {
66 		i8751_command_queue=data;
67 		return;
68 	}
69 
70 	i8751_return=0;
71 	if (data==0x100 && microcontroller_id==KARNOVJ) i8751_return=0x56a; /* Japan version */
72 	if (data==0x100 && microcontroller_id==KARNOV) i8751_return=0x56b; /* USA version */
73 	if ((data&0xf00)==0x300) i8751_return=(data&0xff)*0x12; /* Player sprite mapping */
74 
75 	/* I'm not sure the ones marked ^ appear in the right order */
76 	if (data==0x400) i8751_return=0x4000; /* Get The Map... */
77 	if (data==0x402) i8751_return=0x40a6; /* Ancient Ruins */
78 	if (data==0x403) i8751_return=0x4054; /* Forest... */
79 	if (data==0x404) i8751_return=0x40de; /* ^Rocky hills */
80 	if (data==0x405) i8751_return=0x4182; /* Sea */
81 	if (data==0x406) i8751_return=0x41ca; /* Town */
82 	if (data==0x407) i8751_return=0x421e; /* Desert */
83 	if (data==0x401) i8751_return=0x4138; /* ^Whistling wind */
84 	if (data==0x408) i8751_return=0x4276; /* ^Heavy Gates */
85 
86 /*	if (!i8751_return && data!=0x300) log_cb(RETRO_LOG_DEBUG, LOGPRE "CPU %04x - Unknown Write %02x intel\n",activecpu_get_pc(),data);*/
87 
88 	cpu_set_irq_line(0,6,HOLD_LINE); /* Signal main cpu task is complete */
89 	i8751_needs_ack=1;
90 }
91 
wndrplnt_i8751_w(int data)92 static void wndrplnt_i8751_w(int data)
93 {
94 	/* The last command hasn't been ACK'd (probably a conflict with coin command) */
95 	if (i8751_needs_ack) {
96 		i8751_command_queue=data;
97 		return;
98 	}
99 
100 	i8751_return=0;
101 	if (data==0x100) i8751_return=0x67a;
102 	if (data==0x200) i8751_return=0x214;
103 	if (data==0x300) i8751_return=0x17; /* Copyright text on title screen */
104 /*	if (data==0x300) i8751_return=0x1;  // (USA) Copyright text on title screen /*/
105 
106 	/* The game writes many values in the 0x600 range, but only a specific mask
107 	matters for the return value */
108 	if ((data&0x600)==0x600) {
109 		switch (data&0x18) {
110 			case 0x00: 	i8751_return=0x4d53; break;
111 			case 0x08:	i8751_return=0x4b54; break;
112 			case 0x10: 	i8751_return=0x5453; break;
113 			case 0x18:	i8751_return=0x5341; break;
114 		}
115 	}
116 /*	else log_cb(RETRO_LOG_DEBUG, LOGPRE "CPU %04x - Unknown Write %02x intel\n",activecpu_get_pc(),data);*/
117 
118 	/* These are 68k function call addresses - different address for each power-up */
119 	if (data==0x400) i8751_return=0x594;
120 	if (data==0x401) i8751_return=0x5ea;
121 	if (data==0x402) i8751_return=0x628;
122 	if (data==0x403) i8751_return=0x66c;
123 	if (data==0x404) i8751_return=0x6a4;
124 	if (data==0x405) i8751_return=0x6a4;
125 	if (data==0x406) i8751_return=0x6a4;
126 
127 	/* This is 68k program code which is executed every frame */
128 	if (data==0x50c) i8751_return=0x13fc;
129 	if (data==0x50b) i8751_return=0x00ff;
130 	if (data==0x50a) i8751_return=0x0006;
131 	if (data==0x509) i8751_return=0x0000;
132 	if (data==0x508) i8751_return=0x4a39;
133 	if (data==0x507) i8751_return=0x0006;
134 	if (data==0x506) i8751_return=0x0000;
135 	if (data==0x505) i8751_return=0x66f8;
136 	if (data==0x504) i8751_return=0x4a39;
137 	if (data==0x503) i8751_return=0x000c;
138 	if (data==0x502) i8751_return=0x0003;
139 	if (data==0x501) i8751_return=0x6bf8;
140 	if (data==0x500) i8751_return=0x4e75;
141 
142 	cpu_set_irq_line(0,6,HOLD_LINE); /* Signal main cpu task is complete */
143 	i8751_needs_ack=1;
144 }
145 
chelnov_i8751_w(int data)146 static void chelnov_i8751_w(int data)
147 {
148 	static int level;
149 
150 	/* Pending coin operations may cause protection commands to be queued */
151 	if (i8751_needs_ack) {
152 		i8751_command_queue=data;
153 		return;
154 	}
155 
156 	i8751_return=0;
157 	if (data==0x200 && microcontroller_id==CHELNOVJ) i8751_return=0x7734; /* Japan version */
158 	if (data==0x200 && microcontroller_id==CHELNOV)  i8751_return=0x783e; /* USA version */
159 	if (data==0x200 && microcontroller_id==CHELNOVW)  i8751_return=0x7736; /* World version */
160 	if (data==0x100 && microcontroller_id==CHELNOVJ) i8751_return=0x71a; /* Japan version */
161 	if (data==0x100 && microcontroller_id==CHELNOV)  i8751_return=0x71b; /* USA version */
162 	if (data==0x100 && microcontroller_id==CHELNOVW)  i8751_return=0x71c; /* World version */
163 
164 	if (data>=0x6000 && data<0x8000) i8751_return=1;  /* patched */
165 	if ((data&0xf000)==0x1000) level=1; /* Level 1 */
166 	if ((data&0xf000)==0x2000) level++; /* Level Increment */
167 	if ((data&0xf000)==0x3000) {        /* Sprite table mapping */
168 		int b=data&0xff;
169 		switch (level) {
170 			case 1: /* Level 1, Sprite mapping tables */
171 				if (microcontroller_id==CHELNOV) { /* USA */
172 					if (b<2) i8751_return=0;
173 					else if (b<6) i8751_return=1;
174 					else if (b<0xb) i8751_return=2;
175 					else if (b<0xf) i8751_return=3;
176 					else if (b<0x13) i8751_return=4;
177 					else i8751_return=5;
178 				} else { /* Japan, World */
179 					if (b<3) i8751_return=0;
180 					else if (b<8) i8751_return=1;
181 					else if (b<0xc) i8751_return=2;
182 					else if (b<0x10) i8751_return=3;
183 					else if (b<0x19) i8751_return=4;
184 					else if (b<0x1b) i8751_return=5;
185 					else if (b<0x22) i8751_return=6;
186 					else if (b<0x28) i8751_return=7;
187 					else i8751_return=8;
188 				}
189 				break;
190 			case 2: /* Level 2, Sprite mapping tables, USA & Japan are the same */
191 				if (b<3) i8751_return=0;
192 				else if (b<9) i8751_return=1;
193 				else if (b<0x11) i8751_return=2;
194 				else if (b<0x1b) i8751_return=3;
195 				else if (b<0x21) i8751_return=4;
196 				else if (b<0x28) i8751_return=5;
197 				else i8751_return=6;
198 				break;
199 			case 3: /* Level 3, Sprite mapping tables, USA & Japan are the same */
200 				if (b<5) i8751_return=0;
201 				else if (b<9) i8751_return=1;
202 				else if (b<0xd) i8751_return=2;
203 				else if (b<0x11) i8751_return=3;
204 				else if (b<0x1b) i8751_return=4;
205 				else if (b<0x1c) i8751_return=5;
206 				else if (b<0x22) i8751_return=6;
207 				else if (b<0x27) i8751_return=7;
208 				else i8751_return=8;
209 				break;
210 			case 4: /* Level 4, Sprite mapping tables, USA & Japan are the same */
211 				if (b<4) i8751_return=0;
212 				else if (b<0xc) i8751_return=1;
213 				else if (b<0xf) i8751_return=2;
214 				else if (b<0x19) i8751_return=3;
215 				else if (b<0x1c) i8751_return=4;
216 				else if (b<0x22) i8751_return=5;
217 				else if (b<0x29) i8751_return=6;
218 				else i8751_return=7;
219 				break;
220 			case 5: /* Level 5, Sprite mapping tables */
221 				if (b<7) i8751_return=0;
222 				else if (b<0xe) i8751_return=1;
223 				else if (b<0x14) i8751_return=2;
224 				else if (b<0x1a) i8751_return=3;
225 				else if (b<0x23) i8751_return=4;
226 				else if (b<0x27) i8751_return=5;
227 				else i8751_return=6;
228 				break;
229 			case 6: /* Level 6, Sprite mapping tables */
230 				if (b<3) i8751_return=0;
231 				else if (b<0xb) i8751_return=1;
232 				else if (b<0x11) i8751_return=2;
233 				else if (b<0x17) i8751_return=3;
234 				else if (b<0x1d) i8751_return=4;
235 				else if (b<0x24) i8751_return=5;
236 				else i8751_return=6;
237 				break;
238 			case 7: /* Level 7, Sprite mapping tables */
239 				if (b<5) i8751_return=0;
240 				else if (b<0xb) i8751_return=1;
241 				else if (b<0x11) i8751_return=2;
242 				else if (b<0x1a) i8751_return=3;
243 				else if (b<0x21) i8751_return=4;
244 				else if (b<0x27) i8751_return=5;
245 				else i8751_return=6;
246 				break;
247 		}
248 	}
249 
250 /*	log_cb(RETRO_LOG_DEBUG, LOGPRE "CPU %04x - Unknown Write %02x intel\n",activecpu_get_pc(),data);*/
251 
252 	cpu_set_irq_line(0,6,HOLD_LINE); /* Signal main cpu task is complete */
253 	i8751_needs_ack=1;
254 }
255 
256 /******************************************************************************/
257 
WRITE16_HANDLER(karnov_control_w)258 static WRITE16_HANDLER( karnov_control_w )
259 {
260 	/* Mnemonics filled in from the schematics, brackets are my comments */
261 	switch (offset<<1) {
262 		case 0: /* SECLR (Interrupt ack for Level 6 i8751 interrupt) */
263 			cpu_set_irq_line(0,6,CLEAR_LINE);
264 
265 			if (i8751_needs_ack) {
266 				/* If a command and coin insert happen at once, then the i8751 will queue the
267 					coin command until the previous command is ACK'd */
268 				if (i8751_coin_pending) {
269 					i8751_return=i8751_coin_pending;
270 					cpu_set_irq_line(0,6,HOLD_LINE);
271 					i8751_coin_pending=0;
272 				} else if (i8751_command_queue) {
273 					/* Pending control command - just write it back as SECREQ */
274 					i8751_needs_ack=0;
275 					karnov_control_w(3,i8751_command_queue,0xffff);
276 					i8751_command_queue=0;
277 				} else {
278 					i8751_needs_ack=0;
279 				}
280 			}
281 			return;
282 
283 		case 2: /* SONREQ (Sound CPU byte) */
284 			soundlatch_w(0,data&0xff);
285 			cpu_set_irq_line (1, IRQ_LINE_NMI, PULSE_LINE);
286 			break;
287 
288 		case 4: /* DM (DMA to buffer spriteram) */
289 			buffer_spriteram16_w(0,0,0);
290 			break;
291 
292 		case 6: /* SECREQ (Interrupt & Data to i8751) */
293 			if (microcontroller_id==KARNOV || microcontroller_id==KARNOVJ) karnov_i8751_w(data);
294 			if (microcontroller_id==CHELNOV || microcontroller_id==CHELNOVJ || microcontroller_id==CHELNOVW) chelnov_i8751_w(data);
295 			if (microcontroller_id==WNDRPLNT) wndrplnt_i8751_w(data);
296 			break;
297 
298 		case 8: /* HSHIFT (9 bits) - Top bit indicates video flip */
299 			COMBINE_DATA(&karnov_scroll[0]);
300 			karnov_flipscreen_w(data>>15);
301 			break;
302 
303 		case 0xa: /* VSHIFT */
304 			COMBINE_DATA(&karnov_scroll[1]);
305 			break;
306 
307 		case 0xc: /* SECR (Reset i8751) */
308 			log_cb(RETRO_LOG_DEBUG, LOGPRE "Reset i8751\n");
309 			i8751_needs_ack=0;
310 			i8751_coin_pending=0;
311 			i8751_command_queue=0;
312 			i8751_return=0;
313 			break;
314 
315 		case 0xe: /* INTCLR (Interrupt ack for Level 7 vbl interrupt) */
316 			cpu_set_irq_line(0,7,CLEAR_LINE);
317 			break;
318 	}
319 }
320 
321 /******************************************************************************/
322 
READ16_HANDLER(karnov_control_r)323 static READ16_HANDLER( karnov_control_r )
324 {
325 	switch (offset<<1) {
326 		case 0: /* Player controls */
327 			return ( readinputport(0) + (readinputport(1)<<8));
328 		case 2: /* Start buttons & VBL */
329 			return readinputport(2);
330 		case 4: /* Dipswitch A & B */
331 			return ( readinputport(4) + (readinputport(5)<<8));
332 		case 6: /* i8751 return values */
333 			return i8751_return;
334 	}
335 
336 	return ~0;
337 }
338 
339 /******************************************************************************/
340 
MEMORY_READ16_START(karnov_readmem)341 static MEMORY_READ16_START( karnov_readmem )
342 	{ 0x000000, 0x05ffff, MRA16_ROM },
343 	{ 0x060000, 0x063fff, MRA16_RAM },
344 	{ 0x080000, 0x080fff, MRA16_RAM },
345 	{ 0x0a0000, 0x0a07ff, MRA16_RAM },
346 	{ 0x0c0000, 0x0c0007, karnov_control_r },
347 MEMORY_END
348 
349 static MEMORY_WRITE16_START( karnov_writemem )
350 	{ 0x000000, 0x05ffff, MWA16_ROM },
351 	{ 0x060000, 0x063fff, MWA16_RAM , &karnov_ram },
352 	{ 0x080000, 0x080fff, MWA16_RAM , &spriteram16, &spriteram_size },
353 	{ 0x0a0000, 0x0a07ff, karnov_videoram_w , &videoram16 },
354 	{ 0x0a0800, 0x0a0fff, karnov_videoram_w }, /* Wndrplnt Mirror */
355 	{ 0x0a1000, 0x0a1fff, karnov_playfield_w, &karnov_pf_data },
356 	{ 0x0c0000, 0x0c000f, karnov_control_w },
357 MEMORY_END
358 
359 /******************************************************************************/
360 
361 static MEMORY_READ_START( karnov_s_readmem )
362 	{ 0x0000, 0x05ff, MRA_RAM},
363 	{ 0x0800, 0x0800, soundlatch_r },
364 	{ 0x8000, 0xffff, MRA_ROM },
365 MEMORY_END
366 
367 static MEMORY_WRITE_START( karnov_s_writemem )
368  	{ 0x0000, 0x05ff, MWA_RAM},
369 	{ 0x1000, 0x1000, YM2203_control_port_0_w }, /* OPN */
370 	{ 0x1001, 0x1001, YM2203_write_port_0_w },
371 	{ 0x1800, 0x1800, YM3526_control_port_0_w }, /* OPL */
372 	{ 0x1801, 0x1801, YM3526_write_port_0_w },
373  	{ 0x8000, 0xffff, MWA_ROM },
374 MEMORY_END
375 
376 /******************************************************************************/
377 
378 INPUT_PORTS_START( karnov )
379 	PORT_START	/* Player 1 controls */
380 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
381 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
382 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
383 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
384 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
385 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
386 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
387 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 4 on schematics */
388 
389 	PORT_START	/* Player 2 controls */
390 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
391 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
392 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
393 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
394 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
395 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
396 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_COCKTAIL )
397 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 4 on schematics */
398 
399 	PORT_START	/* start buttons */
400 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* PL1 Button 5 on schematics */
401 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* PL2 Button 5 on schematics */
402 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1  )
403 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2  )
404 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
405 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
406 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
407 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
408 
409 	PORT_START	/* Dummy input for i8751 */
410 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
411 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
412 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 )
413 
414 	PORT_START	/* Dip switch bank 1 */
415 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) )
416 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
417 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
418 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
419 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
420 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
421 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
422 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_1C ) )
423 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
424 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
425 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unused ) )
426 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
427 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
428 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) )
429 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
430 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
431 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
432 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
433 	PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
434 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
435 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
436 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
437 /* 0x80 called No Die Mode according to the manual, but it doesn't seem
438 to have any effect */
439 
440 	PORT_START	/* Dip switch bank 2 */
441 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
442 	PORT_DIPSETTING(    0x01, "1" )
443 	PORT_DIPSETTING(    0x03, "3" )
444 	PORT_DIPSETTING(    0x02, "5" )
445 	PORT_BITX(0,        0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )
446 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
447 	PORT_DIPSETTING(    0x0c, "50 K" )
448 	PORT_DIPSETTING(    0x08, "70 K" )
449 	PORT_DIPSETTING(    0x04, "90 K" )
450 	PORT_DIPSETTING(    0x00, "100 K" )
451 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
452 	PORT_DIPSETTING(    0x30, "Easy" )
453 	PORT_DIPSETTING(    0x10, "Normal" )
454 	PORT_DIPSETTING(    0x20, "Hard" )
455 	PORT_DIPSETTING(    0x00, "Very Hard" )
456 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
457 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
458 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
459 	PORT_DIPNAME( 0x80, 0x80, "Timer Speed" )
460 	PORT_DIPSETTING(    0x80, "Normal" )
461 	PORT_DIPSETTING(    0x00, "Fast" )
462 INPUT_PORTS_END
463 
464 INPUT_PORTS_START( wndrplnt )
465 	PORT_START	/* Player 1 controls */
466 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
467 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
468 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
469 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
470 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
471 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
472 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
473 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
474 
475 	PORT_START	/* Player 2 controls */
476 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
477 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
478 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
479 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
480 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
481 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
482 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_COCKTAIL )
483 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
484 
485 	PORT_START	/* start buttons */
486 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
487 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
488 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1  )
489 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2  )
490 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
491 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
492 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
493 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
494 
495 	PORT_START	/* Dummy input for i8751 */
496 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
497 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
498 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 )
499 
500 	PORT_START	/* Dip switch bank 1 */
501 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) )
502 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
503 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
504 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
505 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
506 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
507 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
508 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_1C ) )
509 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
510 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
511 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
512 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
513 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
514 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
515 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
516 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
517 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
518 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
519 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
520 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
521 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
522 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
523 
524 	PORT_START	/* Dip switch bank 2 */
525 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
526 	PORT_DIPSETTING(    0x01, "1" )
527 	PORT_DIPSETTING(    0x03, "3" )
528 	PORT_DIPSETTING(    0x02, "5" )
529 	PORT_BITX(0,        0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )
530 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
531 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
532 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
533 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
534 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
535 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
536 	PORT_DIPNAME( 0x10, 0x10, "Allow Continue" )
537 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
538 	PORT_DIPSETTING(    0x10, DEF_STR( Yes ) )
539 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
540 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
541 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
542 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
543 	PORT_DIPSETTING(    0x08, "Easy" )
544 	PORT_DIPSETTING(    0x0c, "Normal" )
545 	PORT_DIPSETTING(    0x04, "Hard" )
546 	PORT_DIPSETTING(    0x00, "Hardest" )
547 INPUT_PORTS_END
548 
549 INPUT_PORTS_START( chelnov )
550 	PORT_START	/* Player controls */
551 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
552 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
553 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
554 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
555 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
556 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
557 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
558 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
559 
560 	PORT_START	/* Player 2 controls */
561 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
562 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
563 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
564 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
565 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
566 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
567 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_COCKTAIL )
568 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
569 
570 	PORT_START	/* start buttons */
571 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
572 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
573 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1  )
574 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2  )
575 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
576 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
577 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
578 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )   /* Active_low is strange! */
579 
580 	PORT_START	/* Dummy input for i8751 */
581 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
582 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
583 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
584 
585 	PORT_START	/* Dip switch bank 1 */
586 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) )
587 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
588 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
589 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
590 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
591 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
592 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
593 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_1C ) )
594 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
595 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
596 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
597 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
598 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
599 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
600 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
601 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
602 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) )
603 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
604 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
605 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
606 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
607 	PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
608 
609 	PORT_START	/* Dip switch bank 2 */
610 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
611 	PORT_DIPSETTING(    0x01, "1" )
612 	PORT_DIPSETTING(    0x03, "3" )
613 	PORT_DIPSETTING(    0x02, "5" )
614 	PORT_BITX(0,        0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )
615 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
616 	PORT_DIPSETTING(    0x04, "Easy" )
617 	PORT_DIPSETTING(    0x0c, "Normal" )
618 	PORT_DIPSETTING(    0x08, "Hard" )
619 	PORT_DIPSETTING(    0x00, "Hardest" )
620 	PORT_DIPNAME( 0x10, 0x10, "Allow Continue" )
621 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
622 	PORT_DIPSETTING(    0x10, DEF_STR( Yes ) )
623 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
624 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
625 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
626 	PORT_DIPNAME( 0x40, 0x40, "Freeze" )
627 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
628 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
629 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
630 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
631 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
632 INPUT_PORTS_END
633 
634 /******************************************************************************/
635 
636 static struct GfxLayout chars =
637 {
638 	8,8,
639 	1024,
640 	3,
641 	{ 0x6000*8,0x4000*8,0x2000*8 },
642 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
643 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
644 	8*8	/* every sprite takes 8 consecutive bytes */
645 };
646 
647 static struct GfxLayout sprites =
648 {
649 	16,16,
650 	4096,
651 	4,
652  	{ 0x60000*8,0x00000*8,0x20000*8,0x40000*8 },
653 	{ 16*8, 1+(16*8), 2+(16*8), 3+(16*8), 4+(16*8), 5+(16*8), 6+(16*8), 7+(16*8),
654   	0,1,2,3,4,5,6,7 },
655 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 ,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8},
656 	16*16
657 };
658 
659 
660 /* 16x16 tiles, 4 Planes, each plane is 0x10000 bytes */
661 static struct GfxLayout tiles =
662 {
663 	16,16,
664 	2048,
665 	4,
666  	{ 0x30000*8,0x00000*8,0x10000*8,0x20000*8 },
667 	{ 16*8, 1+(16*8), 2+(16*8), 3+(16*8), 4+(16*8), 5+(16*8), 6+(16*8), 7+(16*8),
668   	0,1,2,3,4,5,6,7 },
669 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 ,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8},
670 	16*16
671 };
672 
673 static struct GfxDecodeInfo karnov_gfxdecodeinfo[] =
674 {
675 	{ REGION_GFX1, 0, &chars,     0,  4 },	/* colors 0-31 */
676 	{ REGION_GFX2, 0, &tiles,   512, 16 },	/* colors 512-767 */
677 	{ REGION_GFX3, 0, &sprites, 256, 16 },	/* colors 256-511 */
678 	{ -1 } /* end of array */
679 };
680 
681 /******************************************************************************/
682 
INTERRUPT_GEN(karnov_interrupt)683 static INTERRUPT_GEN( karnov_interrupt )
684 {
685 	static int latch;
686 
687 	/* Coin input to the i8751 generates an interrupt to the main cpu */
688 	if (readinputport(3) == coin_mask) latch=1;
689 	if (readinputport(3) != coin_mask && latch) {
690 		if (i8751_needs_ack) {
691 			/* i8751 is busy - queue the command */
692 			i8751_coin_pending=readinputport(3) | 0x8000;
693 		} else {
694 			i8751_return=readinputport(3) | 0x8000;
695 			cpu_set_irq_line(0,6,HOLD_LINE);
696 			i8751_needs_ack=1;
697 		}
698 		latch=0;
699 	}
700 
701 	cpu_set_irq_line(0,7,HOLD_LINE);	/* VBL */
702 }
703 
sound_irq(int linestate)704 static void sound_irq(int linestate)
705 {
706 	cpu_set_irq_line(1,0,linestate); /* IRQ */
707 }
708 
709 static struct YM2203interface ym2203_interface =
710 {
711 	1,
712 	1500000,	/* Accurate */
713 	{ YM2203_VOL(25,25) },
714 	{ 0 },
715 	{ 0 },
716 	{ 0 },
717 	{ 0 }
718 };
719 
720 static struct YM3526interface ym3526_interface =
721 {
722 	1,			/* 1 chip */
723 	3000000,	/* Accurate */
724 	{ 100 },	/*  */
725 	{ sound_irq },
726 };
727 
728 /******************************************************************************/
729 
MACHINE_INIT(karnov)730 static MACHINE_INIT( karnov )
731 {
732 	memset(karnov_ram,0,0x4000/2); /* Chelnov likes ram clear on reset.. */
733 }
734 
735 static MACHINE_DRIVER_START( karnov )
736 
737 	/* basic machine hardware */
738 	MDRV_CPU_ADD(M68000, 10000000)	/* 10 MHz */
MDRV_CPU_MEMORY(karnov_readmem,karnov_writemem)739 	MDRV_CPU_MEMORY(karnov_readmem,karnov_writemem)
740 	MDRV_CPU_VBLANK_INT(karnov_interrupt,1)
741 
742 	MDRV_CPU_ADD(M6502, 1500000)
743 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* Accurate */
744 	MDRV_CPU_MEMORY(karnov_s_readmem,karnov_s_writemem)
745 
746 	MDRV_FRAMES_PER_SECOND(60)
747 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
748 	MDRV_MACHINE_INIT(karnov)
749 
750 	/* video hardware */
751 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM)
752 	MDRV_SCREEN_SIZE(32*8, 32*8)
753 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
754 	MDRV_GFXDECODE(karnov_gfxdecodeinfo)
755 	MDRV_PALETTE_LENGTH(1024)
756 	MDRV_COLORTABLE_LENGTH(1024)
757 
758 	MDRV_PALETTE_INIT(karnov)
759 	MDRV_VIDEO_START(karnov)
760 	MDRV_VIDEO_UPDATE(karnov)
761 
762 	/* sound hardware */
763 	MDRV_SOUND_ADD(YM2203, ym2203_interface)
764 	MDRV_SOUND_ADD(YM3526, ym3526_interface)
765 MACHINE_DRIVER_END
766 
767 
768 static MACHINE_DRIVER_START( wndrplnt )
769 
770 	/* basic machine hardware */
771 	MDRV_CPU_ADD(M68000, 10000000)	/* 10 MHz */
772 	MDRV_CPU_MEMORY(karnov_readmem,karnov_writemem)
773 	MDRV_CPU_VBLANK_INT(karnov_interrupt,1)
774 
775 	MDRV_CPU_ADD(M6502, 1500000)
776 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)	/* Accurate */
777 	MDRV_CPU_MEMORY(karnov_s_readmem,karnov_s_writemem)
778 
779 	MDRV_FRAMES_PER_SECOND(60)
780 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
781 	MDRV_MACHINE_INIT(karnov)
782 
783 	/* video hardware */
784 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_BUFFERS_SPRITERAM)
785 	MDRV_SCREEN_SIZE(32*8, 32*8)
786 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
787 	MDRV_GFXDECODE(karnov_gfxdecodeinfo)
788 	MDRV_PALETTE_LENGTH(1024)
789 	MDRV_COLORTABLE_LENGTH(1024)
790 
791 	MDRV_PALETTE_INIT(karnov)
792 	MDRV_VIDEO_START(wndrplnt)
793 	MDRV_VIDEO_UPDATE(karnov)
794 
795 	/* sound hardware */
796 	MDRV_SOUND_ADD(YM2203, ym2203_interface)
797 	MDRV_SOUND_ADD(YM3526, ym3526_interface)
798 MACHINE_DRIVER_END
799 
800 /******************************************************************************/
801 
802 ROM_START( karnov )
803 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
804 	ROM_LOAD16_BYTE( "dn08-5",       0x00000, 0x10000, CRC(db92c264) SHA1(bd4bcd984a3455eedd2b78dc2090c9d625025671) )
805 	ROM_LOAD16_BYTE( "dn11-5",       0x00001, 0x10000, CRC(05669b4b) SHA1(c78d0da5afc66750dd9841a7d4f8f244d878c081) )
806 	ROM_LOAD16_BYTE( "dn07-",        0x20000, 0x10000, CRC(fc14291b) SHA1(c92207cf70d4c887cd0f53208e8090c7f614c1d3) )
807 	ROM_LOAD16_BYTE( "dn10-",        0x20001, 0x10000, CRC(a4a34e37) SHA1(f40b680cc7312c844f81d01997f9a47c48d36e88) )
808 	ROM_LOAD16_BYTE( "dn06-5",       0x40000, 0x10000, CRC(29d64e42) SHA1(c07ff5f29b7ccd5fc97b5086bcae57ab6eb29330) )
809 	ROM_LOAD16_BYTE( "dn09-5",       0x40001, 0x10000, CRC(072d7c49) SHA1(92195b89274d066a9c1f87dd810683ea66edaff4) )
810 
811 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
812 	ROM_LOAD( "dn05-5",       0x8000, 0x8000, CRC(fa1a31a8) SHA1(5007a625be03c546d2a78444d72c28761b10cdb0) )
813 
814 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
815 	ROM_LOAD( "dn00-",        0x00000, 0x08000, CRC(0ed77c6d) SHA1(4ec86ac56c01c158a580dc13dea3e5cbdf90d0e9) )	/* Characters */
816 
817 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
818 	ROM_LOAD( "dn04-",        0x00000, 0x10000, CRC(a9121653) SHA1(04a67ba6fcf551719734ba2b86ee49c37ee1b842) )	/* Backgrounds */
819 	ROM_LOAD( "dn01-",        0x10000, 0x10000, CRC(18697c9e) SHA1(b454af7922c4b1a651d303a3d8d89e5cc102f9ca) )
820 	ROM_LOAD( "dn03-",        0x20000, 0x10000, CRC(90d9dd9c) SHA1(00a3bed276927f099d57e90f28fd77bd41a3c360) )
821 	ROM_LOAD( "dn02-",        0x30000, 0x10000, CRC(1e04d7b9) SHA1(a2c6fde42569a52cc6d9a86715dea4a8bea80092) )
822 
823 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
824 	ROM_LOAD( "dn12-",        0x00000, 0x10000, CRC(9806772c) SHA1(01f17fa033262a3e64e0675cc4e20b3c3f4b254d) )	/* Sprites - 2 sets of 4, interleaved here */
825 	ROM_LOAD( "dn14-5",       0x10000, 0x08000, CRC(ac9e6732) SHA1(6f61344eb8a13349471145dee252a01aadb8cdf0) )
826 	ROM_LOAD( "dn13-",        0x20000, 0x10000, CRC(a03308f9) SHA1(1d450725a5c488332c83d8f64a73a750ce7fe4c7) )
827 	ROM_LOAD( "dn15-5",       0x30000, 0x08000, CRC(8933fcb8) SHA1(0dbda4b032ed3776d7633264f39e6f00ace7a238) )
828 	ROM_LOAD( "dn16-",        0x40000, 0x10000, CRC(55e63a11) SHA1(3ef0468fa02ac5382007428122216917ad5eaa0e) )
829 	ROM_LOAD( "dn17-5",       0x50000, 0x08000, CRC(b70ae950) SHA1(1ec833bdad12710ea846ef48dddbe2e1ae6b8ce1) )
830 	ROM_LOAD( "dn18-",        0x60000, 0x10000, CRC(2ad53213) SHA1(f22696920bf3d74fb0e28e2d7cb31be5e183c6b4) )
831 	ROM_LOAD( "dn19-5",       0x70000, 0x08000, CRC(8fd4fa40) SHA1(1870fb0c5c64fbc53a10115f0f3c7624cf2465db) )
832 
833 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
834 	ROM_LOAD( "karnprom.21",  0x0000, 0x0400, CRC(aab0bb93) SHA1(545707fbb1007fca1fe297c5fce61e485e7084fc) )
835 	ROM_LOAD( "karnprom.20",  0x0400, 0x0400, CRC(02f78ffb) SHA1(cb4dd8b0ce3c404195321b17e10f51352f506958) )
836 ROM_END
837 
838 ROM_START( karnovj )
839 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
840 	ROM_LOAD16_BYTE( "kar8",         0x00000, 0x10000, CRC(3e17e268) SHA1(3a63928bb0148175519540f9d891b03590094dfb) )
841 	ROM_LOAD16_BYTE( "kar11",        0x00001, 0x10000, CRC(417c936d) SHA1(d31f9291f18c3d5e3c4430768396e1ac10fd9ea3) )
842 	ROM_LOAD16_BYTE( "dn07-",        0x20000, 0x10000, CRC(fc14291b) SHA1(c92207cf70d4c887cd0f53208e8090c7f614c1d3) )
843 	ROM_LOAD16_BYTE( "dn10-",        0x20001, 0x10000, CRC(a4a34e37) SHA1(f40b680cc7312c844f81d01997f9a47c48d36e88) )
844 	ROM_LOAD16_BYTE( "kar6",         0x40000, 0x10000, CRC(c641e195) SHA1(fa7a2eba70e730f72a8d868160af9c41f9b2e5b0) )
845 	ROM_LOAD16_BYTE( "kar9",         0x40001, 0x10000, CRC(d420658d) SHA1(4c7e67a80e419b8b94eb015f7f0af0a01f00c28e) )
846 
847 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 6502 Sound CPU */
848 	ROM_LOAD( "kar5",         0x8000, 0x8000, CRC(7c9158f1) SHA1(dfba7b3abd6b8d6991f0207cd252ee652a6050c2) )
849 
850 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
851 	ROM_LOAD( "dn00-",        0x00000, 0x08000, CRC(0ed77c6d) SHA1(4ec86ac56c01c158a580dc13dea3e5cbdf90d0e9) )	/* Characters */
852 
853 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
854 	ROM_LOAD( "dn04-",        0x00000, 0x10000, CRC(a9121653) SHA1(04a67ba6fcf551719734ba2b86ee49c37ee1b842) )	/* Backgrounds */
855 	ROM_LOAD( "dn01-",        0x10000, 0x10000, CRC(18697c9e) SHA1(b454af7922c4b1a651d303a3d8d89e5cc102f9ca) )
856 	ROM_LOAD( "dn03-",        0x20000, 0x10000, CRC(90d9dd9c) SHA1(00a3bed276927f099d57e90f28fd77bd41a3c360) )
857 	ROM_LOAD( "dn02-",        0x30000, 0x10000, CRC(1e04d7b9) SHA1(a2c6fde42569a52cc6d9a86715dea4a8bea80092) )
858 
859 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
860 	ROM_LOAD( "dn12-",        0x00000, 0x10000, CRC(9806772c) SHA1(01f17fa033262a3e64e0675cc4e20b3c3f4b254d) )	/* Sprites - 2 sets of 4, interleaved here */
861 	ROM_LOAD( "kar14",        0x10000, 0x08000, CRC(c6b39595) SHA1(3bc2d0a613cc1b5d255cccc3b26e21ea1c23e75b) )
862 	ROM_LOAD( "dn13-",        0x20000, 0x10000, CRC(a03308f9) SHA1(1d450725a5c488332c83d8f64a73a750ce7fe4c7) )
863 	ROM_LOAD( "kar15",        0x30000, 0x08000, CRC(2f72cac0) SHA1(a71e61eea77ecd3240c5217ae84e7aa3ef21288a) )
864 	ROM_LOAD( "dn16-",        0x40000, 0x10000, CRC(55e63a11) SHA1(3ef0468fa02ac5382007428122216917ad5eaa0e) )
865 	ROM_LOAD( "kar17",        0x50000, 0x08000, CRC(7851c70f) SHA1(47b7a64dd8230e95cd7ae7f661c7586c7598c356) )
866 	ROM_LOAD( "dn18-",        0x60000, 0x10000, CRC(2ad53213) SHA1(f22696920bf3d74fb0e28e2d7cb31be5e183c6b4) )
867 	ROM_LOAD( "kar19",        0x70000, 0x08000, CRC(7bc174bb) SHA1(d8bc320169fc3a9cdd3f271ea523fb0486abae2c) )
868 
869 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
870 	ROM_LOAD( "karnprom.21",  0x0000, 0x0400, CRC(aab0bb93) SHA1(545707fbb1007fca1fe297c5fce61e485e7084fc) )
871 	ROM_LOAD( "karnprom.20",  0x0400, 0x0400, CRC(02f78ffb) SHA1(cb4dd8b0ce3c404195321b17e10f51352f506958) )
872 ROM_END
873 
874 ROM_START( wndrplnt )
875 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
876 	ROM_LOAD16_BYTE( "ea08.bin",   0x00000, 0x10000, CRC(b0578a14) SHA1(a420d1e8f80405161c86a123610ddf17c7ff07ff) )
877 	ROM_LOAD16_BYTE( "ea11.bin",   0x00001, 0x10000, CRC(271edc6c) SHA1(6aa411fa4a3613018e7d971c5675f54d5765904d) )
878 	ROM_LOAD16_BYTE( "ea07.bin",   0x20000, 0x10000, CRC(7095a7d5) SHA1(a7ee88cad03690a72a52b8ea2310416aa53febdd) )
879 	ROM_LOAD16_BYTE( "ea10.bin",   0x20001, 0x10000, CRC(81a96475) SHA1(2d2e647ed7867b1a7f0dc24544e241e4b1c9fa92) )
880 	ROM_LOAD16_BYTE( "ea06.bin",   0x40000, 0x10000, CRC(5951add3) SHA1(394552c29a6266becbdb36c3bd65fc1f56701d11) )
881 	ROM_LOAD16_BYTE( "ea09.bin",   0x40001, 0x10000, CRC(c4b3cb1e) SHA1(006becbcdbbb3e666382e59e8fa5a5ebe06e5724) )
882 
883 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 6502 Sound CPU */
884 	ROM_LOAD( "ea05.bin",     0x8000, 0x8000, CRC(8dbb6231) SHA1(342faa020448ce916e820b3df18d44191983f7a6) )
885 
886 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
887 	ROM_LOAD( "ea00.bin",    0x00000, 0x08000, CRC(9f3cac4c) SHA1(af8a275ff531029dbada3c820c9f660fef383100) )	/* Characters */
888 
889 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
890 	ROM_LOAD( "ea04.bin",    0x00000, 0x10000, CRC(7d701344) SHA1(4efaa73a4b2534078ee25111a2f5143c7c7e846f) )	/* Backgrounds */
891 	ROM_LOAD( "ea01.bin",    0x10000, 0x10000, CRC(18df55fb) SHA1(406ea47365ff8372bb2588c97c438ea02aa17538) )
892 	ROM_LOAD( "ea03.bin",    0x20000, 0x10000, CRC(922ef050) SHA1(e33aea6df2e1a14bd371ed0a2b172f58edcc0e8e) )
893 	ROM_LOAD( "ea02.bin",    0x30000, 0x10000, CRC(700fde70) SHA1(9b5b59aaffac091622329dc6ebedb24806b69964) )
894 
895 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
896 	ROM_LOAD( "ea12.bin",    0x00000, 0x10000, CRC(a6d4e99d) SHA1(a85dbb23d05d1e386d8a66f505fa9dfcc554327b) )	/* Sprites - 2 sets of 4, interleaved here */
897 	ROM_LOAD( "ea14.bin",    0x10000, 0x10000, CRC(915ffdc9) SHA1(b65cdc8ee953494f2b69e06cd6c97ee142d83c3e) )
898 	ROM_LOAD( "ea13.bin",    0x20000, 0x10000, CRC(cd839f3a) SHA1(7eae3a1e080b7db22968d556e80b620cb07976b0) )
899 	ROM_LOAD( "ea15.bin",    0x30000, 0x10000, CRC(a1f14f16) SHA1(5beb2b8967aa34271f734865704c6bab07d76a8c) )
900 	ROM_LOAD( "ea16.bin",    0x40000, 0x10000, CRC(7a1d8a9c) SHA1(2b924a7e5a2490a7144b981155f2503d3737875d) )
901 	ROM_LOAD( "ea17.bin",    0x50000, 0x10000, CRC(21a3223d) SHA1(7754ed9cbe4eed94b49130af6108e919be18e5b3) )
902 	ROM_LOAD( "ea18.bin",    0x60000, 0x10000, CRC(3fb2cec7) SHA1(7231bb728f1009186d41e177402e84b63f25a44f) )
903 	ROM_LOAD( "ea19.bin",    0x70000, 0x10000, CRC(87cf03b5) SHA1(29bc25642be1dd7e25f13e96dae90572f7a09d21) )
904 
905 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
906 	ROM_LOAD( "ea21.prm",      0x0000, 0x0400, CRC(c8beab49) SHA1(970c2bad3cbf2d7fc313997ae0fe11dd04383b40) )
907 	ROM_LOAD( "ea20.prm",      0x0400, 0x0400, CRC(619f9d1e) SHA1(17fe49b6c9ce17be4a03e3400229e3ef4998a46f) )
908 ROM_END
909 
910 ROM_START( chelnovu )
911 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
912 	ROM_LOAD16_BYTE( "ee08-a.j15",   0x00000, 0x10000, CRC(2f2fb37b) SHA1(f89b424099097a95cf184d20a15b876c5b639552) )
913 	ROM_LOAD16_BYTE( "ee11-a.j20",   0x00001, 0x10000, CRC(f306d05f) SHA1(e523ffd17fb0104fe28eac288b6ebf7fc0ea2908) )
914 	ROM_LOAD16_BYTE( "ee07-a.j14",   0x20000, 0x10000, CRC(9c69ed56) SHA1(23606d2fc7c550eaddf0fd4b0da1a4e2c9263e14) )
915 	ROM_LOAD16_BYTE( "ee10-a.j18",   0x20001, 0x10000, CRC(d5c5fe4b) SHA1(183b2f5dfa4e0a9067674a29abab2744a887fd19) )
916 	ROM_LOAD16_BYTE( "ee06-e.j13",   0x40000, 0x10000, CRC(55acafdb) SHA1(9dc0528c888dd73617f8cab76690b9296715680a) )
917 	ROM_LOAD16_BYTE( "ee09-e.j17",   0x40001, 0x10000, CRC(303e252c) SHA1(d5d2570e42aa1e1b3600d14cc694677248e12750) )
918 
919 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 6502 Sound CPU */
920 	ROM_LOAD( "ee05-.f3",     0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
921 
922 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
923 	ROM_LOAD( "ee00-e.c5",    0x00000, 0x08000, CRC(e06e5c6b) SHA1(70166257da5be428cb8404d8e1063c59c7722365) )	/* Characters */
924 
925 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
926 	ROM_LOAD( "ee04-.d18",    0x00000, 0x10000, CRC(96884f95) SHA1(9d88d203028288cb26e111880d090bf40ef9385b) )	/* Backgrounds */
927 	ROM_LOAD( "ee01-.c15",    0x10000, 0x10000, CRC(f4b54057) SHA1(72cd0b098a465232c2148fe6b4224c42dd42e6bc) )
928 	ROM_LOAD( "ee03-.d15",    0x20000, 0x10000, CRC(7178e182) SHA1(e8f03bda417e8f2f0508df40057d39ce6ee74f16) )
929 	ROM_LOAD( "ee02-.c18",    0x30000, 0x10000, CRC(9d7c45ae) SHA1(014dfafa6898e5fd0d124391e698b4f76d38fa94) )
930 
931 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
932 	ROM_LOAD( "ee12-.f8",     0x00000, 0x10000, CRC(9b1c53a5) SHA1(b0fdc89dc7fd0931fa4bca3bbc20fc88f637ec74) )	/* Sprites */
933 	ROM_LOAD( "ee13-.f9",     0x20000, 0x10000, CRC(72b8ae3e) SHA1(535dfd70e6d13296342d96917a57d46bdb28a59e) )
934 	ROM_LOAD( "ee14-.f13",    0x40000, 0x10000, CRC(d8f4bbde) SHA1(1f2d336dd97c9cc39e124c18cae634afb0ef3316) )
935 	ROM_LOAD( "ee15-.f15",    0x60000, 0x10000, CRC(81e3e68b) SHA1(1059c70b8bfe09c212a19767cfe23efa22afc196) )
936 
937 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
938 	ROM_LOAD( "ee21.k8",      0x0000, 0x0400, CRC(b1db6586) SHA1(a7ecfcb4cf0f7450900820b3dfad8813efedfbea) )	/* different from the other set; */
939 															/* might be bad */
940 	ROM_LOAD( "ee20.l6",      0x0400, 0x0400, CRC(41816132) SHA1(89a1194bd8bf39f13419df685e489440bdb05676) )
941 ROM_END
942 
943 ROM_START( chelnov )
944 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
945 	ROM_LOAD16_BYTE( "ee08-e.j16",   0x00000, 0x10000, CRC(8275cc3a) SHA1(961166226b68744eef15fed6a306010757b83556) )
946 	ROM_LOAD16_BYTE( "ee11-e.j19",   0x00001, 0x10000, CRC(889e40a0) SHA1(e927f32d9bc448a331fb7b3478b2d07154f5013b) )
947 	ROM_LOAD16_BYTE( "a-j14.bin",    0x20000, 0x10000, CRC(51465486) SHA1(e165e754eb756db3abc1f8477171ab817d03a890) )
948 	ROM_LOAD16_BYTE( "a-j18.bin",    0x20001, 0x10000, CRC(d09dda33) SHA1(1764215606eec61e4fe30c0fc82ea2faf17821dc) )
949 	ROM_LOAD16_BYTE( "ee06-e.j13",   0x40000, 0x10000, CRC(55acafdb) SHA1(9dc0528c888dd73617f8cab76690b9296715680a) )
950 	ROM_LOAD16_BYTE( "ee09-e.j17",   0x40001, 0x10000, CRC(303e252c) SHA1(d5d2570e42aa1e1b3600d14cc694677248e12750) )
951 
952 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 6502 Sound CPU */
953 	ROM_LOAD( "ee05-.f3",     0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
954 
955 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
956 	ROM_LOAD( "ee00-e.c5",    0x00000, 0x08000, CRC(e06e5c6b) SHA1(70166257da5be428cb8404d8e1063c59c7722365) )	/* Characters */
957 
958 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
959 	ROM_LOAD( "ee04-.d18",    0x00000, 0x10000, CRC(96884f95) SHA1(9d88d203028288cb26e111880d090bf40ef9385b) )	/* Backgrounds */
960 	ROM_LOAD( "ee01-.c15",    0x10000, 0x10000, CRC(f4b54057) SHA1(72cd0b098a465232c2148fe6b4224c42dd42e6bc) )
961 	ROM_LOAD( "ee03-.d15",    0x20000, 0x10000, CRC(7178e182) SHA1(e8f03bda417e8f2f0508df40057d39ce6ee74f16) )
962 	ROM_LOAD( "ee02-.c18",    0x30000, 0x10000, CRC(9d7c45ae) SHA1(014dfafa6898e5fd0d124391e698b4f76d38fa94) )
963 
964 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
965 	ROM_LOAD( "ee12-.f8",     0x00000, 0x10000, CRC(9b1c53a5) SHA1(b0fdc89dc7fd0931fa4bca3bbc20fc88f637ec74) )	/* Sprites */
966 	ROM_LOAD( "ee13-.f9",     0x20000, 0x10000, CRC(72b8ae3e) SHA1(535dfd70e6d13296342d96917a57d46bdb28a59e) )
967 	ROM_LOAD( "ee14-.f13",    0x40000, 0x10000, CRC(d8f4bbde) SHA1(1f2d336dd97c9cc39e124c18cae634afb0ef3316) )
968 	ROM_LOAD( "ee15-.f15",    0x60000, 0x10000, CRC(81e3e68b) SHA1(1059c70b8bfe09c212a19767cfe23efa22afc196) )
969 
970 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
971 	ROM_LOAD( "ee21.k8",      0x0000, 0x0400, CRC(b1db6586) SHA1(a7ecfcb4cf0f7450900820b3dfad8813efedfbea) )	/* different from the other set; */
972 															/* might be bad */
973 	ROM_LOAD( "ee20.l6",      0x0400, 0x0400, CRC(41816132) SHA1(89a1194bd8bf39f13419df685e489440bdb05676) )
974 ROM_END
975 
976 ROM_START( chelnovj )
977 	ROM_REGION( 0x60000, REGION_CPU1, 0 )	/* 6*64k for 68000 code */
978 	ROM_LOAD16_BYTE( "a-j15.bin",    0x00000, 0x10000, CRC(1978cb52) SHA1(833b8e80445ec2384e0479afb7430b32d6a14441) )
979 	ROM_LOAD16_BYTE( "a-j20.bin",    0x00001, 0x10000, CRC(e0ed3d99) SHA1(f47aaec5c72ecc308c32cdcf117ef4965ac5ea61) )
980 	ROM_LOAD16_BYTE( "a-j14.bin",    0x20000, 0x10000, CRC(51465486) SHA1(e165e754eb756db3abc1f8477171ab817d03a890) )
981 	ROM_LOAD16_BYTE( "a-j18.bin",    0x20001, 0x10000, CRC(d09dda33) SHA1(1764215606eec61e4fe30c0fc82ea2faf17821dc) )
982 	ROM_LOAD16_BYTE( "a-j13.bin",    0x40000, 0x10000, CRC(cd991507) SHA1(9da858ea41bfbce78496c086e3b462ea9f3722e8) )
983 	ROM_LOAD16_BYTE( "a-j17.bin",    0x40001, 0x10000, CRC(977f601c) SHA1(b40a37160b493dcb614922c2a9b4b5f140b62aca) )
984 
985 	ROM_REGION( 0x10000, REGION_CPU2, 0 )	/* 6502 Sound CPU */
986 	ROM_LOAD( "ee05-.f3",     0x8000, 0x8000, CRC(6a8936b4) SHA1(2b72cb749e6bddb67c2bd3d27b3a92511f9ef016) )
987 
988 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
989 	ROM_LOAD( "a-c5.bin",     0x00000, 0x08000, CRC(1abf2c6d) SHA1(86d625ae94cd9ea69e4e613895410640efb175b3) )	/* Characters */
990 
991 	ROM_REGION( 0x40000, REGION_GFX2, ROMREGION_DISPOSE )
992 	ROM_LOAD( "ee04-.d18",    0x00000, 0x10000, CRC(96884f95) SHA1(9d88d203028288cb26e111880d090bf40ef9385b) )	/* Backgrounds */
993 	ROM_LOAD( "ee01-.c15",    0x10000, 0x10000, CRC(f4b54057) SHA1(72cd0b098a465232c2148fe6b4224c42dd42e6bc) )
994 	ROM_LOAD( "ee03-.d15",    0x20000, 0x10000, CRC(7178e182) SHA1(e8f03bda417e8f2f0508df40057d39ce6ee74f16) )
995 	ROM_LOAD( "ee02-.c18",    0x30000, 0x10000, CRC(9d7c45ae) SHA1(014dfafa6898e5fd0d124391e698b4f76d38fa94) )
996 
997 	ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE )
998 	ROM_LOAD( "ee12-.f8",     0x00000, 0x10000, CRC(9b1c53a5) SHA1(b0fdc89dc7fd0931fa4bca3bbc20fc88f637ec74) )	/* Sprites */
999 	ROM_LOAD( "ee13-.f9",     0x20000, 0x10000, CRC(72b8ae3e) SHA1(535dfd70e6d13296342d96917a57d46bdb28a59e) )
1000 	ROM_LOAD( "ee14-.f13",    0x40000, 0x10000, CRC(d8f4bbde) SHA1(1f2d336dd97c9cc39e124c18cae634afb0ef3316) )
1001 	ROM_LOAD( "ee15-.f15",    0x60000, 0x10000, CRC(81e3e68b) SHA1(1059c70b8bfe09c212a19767cfe23efa22afc196) )
1002 
1003 	ROM_REGION( 0x0800, REGION_PROMS, 0 )
1004 	ROM_LOAD( "a-k7.bin",     0x0000, 0x0400, CRC(309c49d8) SHA1(7220002f6ef97514b4e6f61706fc16061120dafa) )	/* different from the other set; */
1005 															/* might be bad */
1006 	ROM_LOAD( "ee20.l6",      0x0400, 0x0400, CRC(41816132) SHA1(89a1194bd8bf39f13419df685e489440bdb05676) )
1007 ROM_END
1008 
1009 /******************************************************************************/
1010 
1011 static DRIVER_INIT( karnov )
1012 {
1013 	microcontroller_id=KARNOV;
1014 	coin_mask=0;
1015 }
1016 
DRIVER_INIT(karnovj)1017 static DRIVER_INIT( karnovj )
1018 {
1019 	microcontroller_id=KARNOVJ;
1020 	coin_mask=0;
1021 }
1022 
DRIVER_INIT(wndrplnt)1023 static DRIVER_INIT( wndrplnt )
1024 {
1025 	microcontroller_id=WNDRPLNT;
1026 	coin_mask=0;
1027 }
1028 
DRIVER_INIT(chelnov)1029 static DRIVER_INIT( chelnov )
1030 {
1031 	data16_t *RAM = (UINT16 *)memory_region(REGION_CPU1);
1032 
1033 	microcontroller_id=CHELNOV;
1034 	coin_mask=0xe0;
1035 	RAM[0x0A26/2]=0x4E71;  /* removes a protection lookup table */
1036 	RAM[0x062a/2]=0x4E71;  /* hangs waiting on i8751 int */
1037 }
1038 
DRIVER_INIT(chelnovw)1039 static DRIVER_INIT( chelnovw )
1040 {
1041 	data16_t *RAM = (UINT16 *)memory_region(REGION_CPU1);
1042 
1043 	microcontroller_id=CHELNOVW;
1044 	coin_mask=0xe0;
1045 	RAM[0x0A26/2]=0x4E71;  /* removes a protection lookup table */
1046 	RAM[0x062a/2]=0x4E71;  /* hangs waiting on i8751 int */
1047 }
1048 
DRIVER_INIT(chelnovj)1049 static DRIVER_INIT( chelnovj )
1050 {
1051 	data16_t *RAM = (UINT16 *)memory_region(REGION_CPU1);
1052 
1053 	microcontroller_id=CHELNOVJ;
1054 	coin_mask=0xe0;
1055 	RAM[0x0a2e/2]=0x4E71;  /* removes a protection lookup table */
1056 	RAM[0x062a/2]=0x4E71;  /* hangs waiting on i8751 int */
1057 }
1058 
1059 /******************************************************************************/
1060 
1061 GAME( 1987, karnov,   0,       karnov,   karnov,  karnov,   ROT0,   "Data East USA",         "Karnov (US)" )
1062 GAME( 1987, karnovj,  karnov,  karnov,   karnov,  karnovj,  ROT0,   "Data East Corporation", "Karnov (Japan)" )
1063 GAME( 1987, wndrplnt, 0,       wndrplnt, wndrplnt,wndrplnt, ROT270, "Data East Corporation", "Wonder Planet (Japan)" )
1064 GAME( 1988, chelnov,  0,       karnov,   chelnov, chelnovw, ROT0,   "Data East Corporation", "Chelnov - Atomic Runner (World)" )
1065 GAME( 1988, chelnovu, chelnov, karnov,   chelnov, chelnov,  ROT0,   "Data East USA",         "Chelnov - Atomic Runner (US)" )
1066 GAME( 1988, chelnovj, chelnov, karnov,   chelnov, chelnovj, ROT0,   "Data East Corporation", "Chelnov - Atomic Runner (Japan)" )
1067