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