1 /***************************************************************************
2
3 Underfire (c) 1993 Taito
4 Chase Bombers (c) 1994 Taito
5
6 Driver by Bryan McPhail & David Graves.
7
8 Board Info (Underfire):
9
10 TC0470LIN : ?
11 TC0480SCP : known tilemap chip
12 TC0510NIO : known input chip
13 TC0570SPC : must be the object chip (next to spritemap and OBJ roms)
14 TC0590PIV : Piv tilemaps
15 TC0620SCC : lightgun ??? pivot port ???
16 TC0650FDA : palette ? (Slapshot and F3 games also have one)
17
18 M43E0278A
19 K1100744A Main Board
20
21 2018 2088 43256 43256 68020-25
22 2018 2088 D67-23 D67-17 93C46
23 2018 2088 43256 43256
24 2018 D67-18 D67-19 TC0510NIO
25 2018
26 2018 TC0570 SPC 43256
27 43256
28 D67-13 43256 TC0650FDA
29 D67-07 2018
30 D67-06
31 TC0470LIN D67-05
32 D67-04 43256
33 TC0590PIV D67-03 43256 D67-10 43256
34 43256 D67-11
35 D67-09 TC0480SCP D67-12 TC0620SCC
36 D67-08
37
38 MB8421
39 MB8421 43256 EnsoniqOTIS
40 D67-20 D67-01
41 43256 EnsoniqESP-R6
42 68000-12 D67-21 D67-02 EnsoniqSuperGlu
43
44 40MHz 16MHz 30.476MHz 68681
45
46
47 Under Fire combines the sprite system used in Taito Z games with
48 the TC0480SCP tilemap chip plus some features from the Taito F3 system.
49 It has an extra tilemap chip which is a dead ringer for the TC0100SCN
50 (check the inits). Why did Taito give it a different name in this
51 incarnation?
52
53
54 Game misbehaviours
55 ------------------
56
57 (i) Sprites on some rounds had sprite/tile priority issues.
58 Solved by upping sprite priority while TC0480SCP row zoom is
59 enabled - kludge.
60
61
62 Todo
63 ----
64
65 This game needs a fake aim target!
66
67 What does the 0xb00000 area do... alpha blending ??
68
69 What is the unknown hardware at 0x600000... an alternative
70 or legacy lightgun hookup?
71
72 Pivot port which may be used for rotation: but not
73 seen changing except in game inits. Perhaps only used
74 in later levels?
75
76
77 Gun calibration
78 ---------------
79
80 The values below work well (set speed down to 4 so you can enter
81 them). They give a little reloading margin all around screen.
82
83 Use X=0x2000 Y=0x100 for top center
84 Use X=0x3740 (same Y) top left
85 Use X=0x8c0 (same Y) top right
86 Then for the points from left to right near bottom (all Y=0x3400):
87 X=0x3f00,0x3740,0x2f80,0x27c0,0x2000,0x1840,0x1080,0x8c0,0x100
88
89
90 Code documentation
91 ------------------
92
93 $17b6e2: loop which keeps displaying the trail of aim dots in test mode
94
95 $181826: routine which calls subs to derive aim coords for P1 and P2 and
96 pokes them in the game's internal sprite table format into RAM - along
97 with the nine blue "flag point" sprites on the calibration screen
98 which seem to have fixed coordinates. [It also refreshes some green
99 text on screen - the calls to $1bfa.]
100
101 $18141a sub appears to be doing all the calculations - including an
102 indirected subroutine so there may be quite a lot of possible code.
103 It is called with parameter of 1 for player 2 (and 0 for player 1).
104
105 $1821c8 sub is called just after - this is simpler and seems to be
106 copying the calculation results (modified slightly by 3 pixels in each
107 direction - to adjust for size of aim sprite?) into the table in ram.
108
109 (Subsequently a standard conversion routine turns the table on the fly
110 into dwords that are actually poked into spriteram. To locate the code
111 do a watchpoint on the first sprite in spriteram - the P1 aim point.)
112
113 In-game: $18141a is called 3 times when you hit fire - 3 bullets - and
114 once when you hit shotgun. Like Spacegun it is only doing the aim
115 calculations when it needs to, so to provide an artificial target we
116 need to reproduce the $18141a calculations.
117
118
119 Info (Chase Bombers)
120
121 Chase Bombers
122 Taito, 1994
123
124 Runs on hardware similar to Ground Effects
125
126
127 PCB Layout
128 ----------
129
130 MAIN PCB-D
131 K1100809A
132 J1100342A
133 |----------------------------------------------------------------------------------------------|
134 | C5 C6 SMC_COM20020 LANOUT|
135 | 68EC020 61256 68EC000 61256 68EC000 61256 MB8421 |
136 | 61256 61256 61256 LANIN |
137 | 61256 61256 PAL |
138 | 61256 PAL 61256 PAL |
139 | PAL PAL MB8421 |
140 | 40MHz |
141 | MC68681 |
142 | TC511664-80 MB3771 |
143 | P1|
144 | MACH120 MACH120 |
145 | ENSONIQ 30.4761MHz 16MHz ADC0809 |
146 | ESP-R6 |
147 | ENSONIQ |
148 | ENSONIQ 5701 DSW1(8) TC0510NIO |
149 | OTIS-R2 Z|
150 | 93C46 |
151 | C3 C4 |
152 | |
153 | 61256 |-|
154 | 61256 |
155 | |-|
156 | TC0480SCP TC0620SCC TC0360PRI |
157 | |
158 | TC0650FDA |
159 | 2018 61256 |
160 | 61256 |
161 | 2018 2088 61256 61256 G|
162 | 61256 TC0580PIV |
163 | 2018 2088 |
164 | |
165 | 2018 TL074 TL074 TDA1543 |
166 | TC0570SPC TC0470LIN 514256 514256 |
167 | 2018 514256 514256 TA8221 TD62064 |-|
168 | 514256 514256 TD62064 |
169 | 2018 MB87078 TD62064 |-|
170 | C1 C2 |
171 |----------------------------------------------------------------------------------------------|
172 Notes:
173 ROM board plugs into C* connectors
174 No clocks for now, PCB has light corrosion and will need extensive cleaning before it can be powered up.
175
176 ROM Board
177 ---------
178
179 PCB Numbers - ROM.PCB
180 K9100508A
181 J9100367A
182
183 Board contains only 29 ROMs and not much else.
184
185
186
187 ***************************************************************************/
188
189 #include "driver.h"
190 #include "cpu/m68000/m68000.h"
191 #include "vidhrdw/generic.h"
192 #include "vidhrdw/taitoic.h"
193 #include "sndhrdw/taitosnd.h"
194 #include "machine/eeprom.h"
195
196 VIDEO_START( undrfire );
197 VIDEO_UPDATE( undrfire );
198 VIDEO_UPDATE( cbombers );
199
200 /* F3 sound */
201 READ16_HANDLER(f3_68000_share_r);
202 WRITE16_HANDLER(f3_68000_share_w);
203 READ16_HANDLER(f3_68681_r);
204 WRITE16_HANDLER(f3_68681_w);
205 READ16_HANDLER(es5510_dsp_r);
206 WRITE16_HANDLER(es5510_dsp_w);
207 WRITE16_HANDLER(f3_volume_w);
208 WRITE16_HANDLER(f3_es5505_bank_w);
209 void f3_68681_reset(void);
210 extern data32_t *f3_shared_ram;
211
212 static UINT16 coin_word;
213 static UINT16 port_sel = 0;
214 extern UINT16 undrfire_rotate_ctrl[8];
215 static int frame_counter=0;
216
217 data32_t *undrfire_ram; /* will be read in vidhrdw for gun target calcs */
218 UINT32 *shared_ram;
219
220 /***********************************************************
221 COLOR RAM
222
223 Extract a standard version of this
224 ("taito_8bpg_palette_word_w"?) to Taitoic.c ?
225 ***********************************************************/
226
WRITE32_HANDLER(color_ram_w)227 static WRITE32_HANDLER( color_ram_w )
228 {
229 int a,r,g,b;
230 COMBINE_DATA(&paletteram32[offset]);
231
232 {
233 a = paletteram32[offset];
234 r = (a &0xff0000) >> 16;
235 g = (a &0xff00) >> 8;
236 b = (a &0xff);
237
238 palette_set_color(offset,r,g,b);
239 }
240 }
241
242
243 /***********************************************************
244 INTERRUPTS
245 ***********************************************************/
246
undrfire_interrupt5(int x)247 void undrfire_interrupt5(int x)
248 {
249 cpu_set_irq_line(0,5,HOLD_LINE);
250 }
251
252
253 /**********************************************************
254 EPROM
255 **********************************************************/
256
257 static data8_t default_eeprom[128]=
258 {
259 0x02,0x01,0x11,0x12,0x01,0x01,0x01,0x00,0x80,0x80,0x30,0x01,0x00,0x00,0x62,0x45,
260 0xe0,0xa0,0xff,0x28,0xff,0xff,0xfa,0xd7,0x33,0x28,0x00,0x00,0x33,0x28,0x00,0x00,
261 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xa0,0xff,0x28,0xff,0xff,0xff,0xff,0xfa,0xd7,
262 0x33,0x28,0x00,0x00,0x33,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,
263 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
264 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
265 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
266 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
267 };
268
269 static struct EEPROM_interface undrfire_eeprom_interface =
270 {
271 6, /* address bits */
272 16, /* data bits */
273 "0110", /* read command */
274 "0101", /* write command */
275 "0111", /* erase command */
276 "0100000000", /* unlock command */
277 "0100110000", /* lock command */
278 };
279
NVRAM_HANDLER(undrfire)280 static NVRAM_HANDLER( undrfire )
281 {
282 if (read_or_write)
283 EEPROM_save(file);
284 else {
285 EEPROM_init(&undrfire_eeprom_interface);
286 if (file)
287 EEPROM_load(file);
288 else
289 EEPROM_set_data(default_eeprom,128); /* Default the gun setup values */
290 }
291 }
292
293
294 /**********************************************************
295 GAME INPUTS
296 **********************************************************/
297
READ32_HANDLER(undrfire_input_r)298 static READ32_HANDLER( undrfire_input_r )
299 {
300 switch (offset)
301 {
302 case 0x00:
303 {
304 return (input_port_0_word_r(0,0) << 16) | input_port_1_word_r(0,0) |
305 (EEPROM_read_bit() << 7) | frame_counter;
306 }
307
308 case 0x01:
309 {
310 return input_port_2_word_r(0,0) | (coin_word << 16);
311 }
312 }
313
314 return 0xffffffff;
315 }
316
WRITE32_HANDLER(undrfire_input_w)317 static WRITE32_HANDLER( undrfire_input_w )
318 {
319 switch (offset)
320 {
321 case 0x00:
322 {
323 if (ACCESSING_MSB32) /* $500000 is watchdog */
324 {
325 watchdog_reset_w(0,data >> 24);
326 }
327
328 if (ACCESSING_LSB32)
329 {
330 EEPROM_set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
331 EEPROM_write_bit(data & 0x40);
332 EEPROM_set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
333 return;
334 }
335
336 return;
337 }
338
339 case 0x01:
340 {
341 if (ACCESSING_MSB32)
342 {
343 coin_lockout_w(0,~data & 0x01000000);
344 coin_lockout_w(1,~data & 0x02000000);
345 coin_counter_w(0, data & 0x04000000);
346 coin_counter_w(1, data & 0x08000000);
347 coin_word = (data >> 16) &0xffff;
348 }
349 }
350 }
351 }
352
353
READ16_HANDLER(shared_ram_r)354 static READ16_HANDLER( shared_ram_r )
355 {
356 if ((offset&1)==0) return (shared_ram[offset/2]&0xffff0000)>>16;
357 return (shared_ram[offset/2]&0x0000ffff);
358 }
359
360
WRITE16_HANDLER(shared_ram_w)361 static WRITE16_HANDLER( shared_ram_w )
362 {
363 if ((offset&1)==0) {
364 if (ACCESSING_MSB)
365 shared_ram[offset/2]=(shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16);
366 if (ACCESSING_LSB)
367 shared_ram[offset/2]=(shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16);
368 } else {
369 if (ACCESSING_MSB)
370 shared_ram[offset/2]=(shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0);
371 if (ACCESSING_LSB)
372 shared_ram[offset/2]=(shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0);
373 }
374 }
375
376
377 /* Some unknown hardware byte mapped at $600002-5 */
378
READ32_HANDLER(unknown_hardware_r)379 static READ32_HANDLER( unknown_hardware_r )
380 {
381 switch (offset) /* four single bytes are read in sequence at $156e */
382 {
383 case 0x00: /* $600002-3 */
384 {
385 return 0xffff; /* no idea what they should be*/
386 }
387
388 case 0x01: /* $600004-5 */
389 {
390 return 0xffff0000; /* no idea what they should be*/
391 }
392 }
393
394 return 0x0;
395 }
396
397
WRITE32_HANDLER(unknown_int_req_w)398 static WRITE32_HANDLER( unknown_int_req_w )
399 {
400 /* 10000 cycle delay is arbitrary */
401 timer_set(TIME_IN_CYCLES(10000,0),0, undrfire_interrupt5);
402 }
403
404
READ32_HANDLER(undrfire_lightgun_r)405 static READ32_HANDLER( undrfire_lightgun_r )
406 {
407 int x,y;
408
409 switch (offset)
410 {
411 /* NB we are raising the raw inputs by an arbitrary amount,
412 but presumably the guns on the original will not have had
413 full 0-0xffff travel. We don't center around 0x8000... but
414 who knows if the real machine does. */
415
416 case 0x00: /* P1 */
417 {
418 x = input_port_3_word_r(0,0) << 6;
419 y = input_port_4_word_r(0,0) << 6;
420
421 return ((x << 24) &0xff000000) | ((x << 8) &0xff0000)
422 | ((y << 8) &0xff00) | ((y >> 8) &0xff) ;
423 }
424
425 case 0x01: /* P2 */
426 {
427 x = input_port_5_word_r(0,0) << 6;
428 y = input_port_6_word_r(0,0) << 6;
429
430 return ((x << 24) &0xff000000) | ((x << 8) &0xff0000)
431 | ((y << 8) &0xff00) | ((y >> 8) &0xff) ;
432 }
433 }
434
435 log_cb(RETRO_LOG_DEBUG, LOGPRE "CPU #0 PC %06x: warning - read unmapped lightgun offset %06x\n",activecpu_get_pc(),offset);
436
437 return 0x0;
438 }
439
440
WRITE32_HANDLER(rotate_control_w)441 static WRITE32_HANDLER( rotate_control_w ) /* only a guess that it's rotation */
442 {
443 if (ACCESSING_LSW32)
444 {
445 undrfire_rotate_ctrl[port_sel] = data;
446 return;
447 }
448
449 if (ACCESSING_MSW32)
450 {
451 port_sel = (data &0x70000) >> 16;
452 }
453 }
454
455
WRITE32_HANDLER(motor_control_w)456 static WRITE32_HANDLER( motor_control_w )
457 {
458 /*
459 Standard value poked is 0x00910200 (we ignore lsb and msb
460 which seem to be always zero)
461
462 0x0, 0x8000 and 0x9100 are written at startup
463
464 Two bits are written in test mode to this middle word
465 to test gun vibration:
466
467 ........ .x...... P1 gun vibration
468 ........ x....... P2 gun vibration
469 */
470 }
471
WRITE32_HANDLER(cbombers_cpua_ctrl_w)472 static WRITE32_HANDLER( cbombers_cpua_ctrl_w )
473 {
474 /*
475 ........ ..xxxxxx Lamp 1-6 enables
476 ........ .x...... Vibration
477 */
478
479 cpu_set_reset_line(2,(data & 0x1000) ? CLEAR_LINE : ASSERT_LINE);
480 }
481
READ32_HANDLER(cbombers_adc_r)482 static READ32_HANDLER( cbombers_adc_r )
483 {
484 return (input_port_3_word_r(0,0) << 24 );
485 }
486
WRITE32_HANDLER(cbombers_adc_w)487 static WRITE32_HANDLER( cbombers_adc_w )
488 {
489 /* One interrupt per input port (4 per frame, though only 2 used).
490 1000 cycle delay is arbitrary */
491 timer_set(TIME_IN_CYCLES(10000,0),0, undrfire_interrupt5);
492 }
493
494 /***********************************************************
495 MEMORY STRUCTURES
496 ***********************************************************/
497
MEMORY_READ32_START(undrfire_readmem)498 static MEMORY_READ32_START( undrfire_readmem )
499 { 0x000000, 0x1fffff, MRA32_ROM },
500 { 0x200000, 0x21ffff, MRA32_RAM }, /* main CPUA ram */
501 { 0x300000, 0x303fff, MRA32_RAM }, /* sprite ram */
502 /* { 0x304000, 0x304003, MRA32_RAM }, */ /* debugging*/
503 /* { 0x304400, 0x304403, MRA32_RAM }, */ /* debugging*/
504 { 0x500000, 0x500007, undrfire_input_r },
505 { 0x600000, 0x600007, unknown_hardware_r }, /* unknown byte reads at $156e */
506 { 0x700000, 0x7007ff, MRA32_RAM },
507 { 0x800000, 0x80ffff, TC0480SCP_long_r }, /* tilemaps */
508 { 0x830000, 0x83002f, TC0480SCP_ctrl_long_r }, /* debugging*/
509 { 0x900000, 0x90ffff, TC0100SCN_long_r }, /* piv tilemaps */
510 { 0x920000, 0x92000f, TC0100SCN_ctrl_long_r },
511 { 0xa00000, 0xa0ffff, MRA32_RAM }, /* palette ram */
512 { 0xb00000, 0xb003ff, MRA32_RAM }, /* ?? single bytes*/
513 { 0xf00000, 0xf00007, undrfire_lightgun_r }, /* stick coords read at $11b2-bc */
514 MEMORY_END
515
516 static MEMORY_WRITE32_START( undrfire_writemem )
517 { 0x000000, 0x1fffff, MWA32_ROM },
518 { 0x200000, 0x21ffff, MWA32_RAM, &undrfire_ram },
519 { 0x300000, 0x303fff, MWA32_RAM, &spriteram32, &spriteram_size },
520 /* { 0x304000, 0x304003, MWA32_RAM }, */ /* ??? doesn't change*/
521 /* { 0x304400, 0x304403, MWA32_RAM }, */ /* ??? doesn't change*/
522 { 0x400000, 0x400003, motor_control_w }, /* gun vibration */
523 { 0x500000, 0x500007, undrfire_input_w }, /* eerom etc. */
524 { 0x600000, 0x600007, unknown_int_req_w }, /* int request for unknown hardware */
525 { 0x700000, 0x7007ff, MWA32_RAM, &f3_shared_ram },
526 { 0x800000, 0x80ffff, TC0480SCP_long_w }, /* tilemaps */
527 { 0x830000, 0x83002f, TC0480SCP_ctrl_long_w },
528 { 0x900000, 0x90ffff, TC0100SCN_long_w }, /* piv tilemaps */
529 { 0x920000, 0x92000f, TC0100SCN_ctrl_long_w },
530 { 0xa00000, 0xa0ffff, color_ram_w, &paletteram32 },
531 { 0xb00000, 0xb003ff, MWA32_RAM }, /* single bytes, blending ??*/
532 { 0xd00000, 0xd00003, rotate_control_w }, /* perhaps port based rotate control? */
533 MEMORY_END
534
535 static MEMORY_READ32_START( cbombers_readmem )
536 { 0x000000, 0x1fffff, MRA32_ROM },
537 { 0x200000, 0x21ffff, MRA32_RAM },
538 { 0x300000, 0x303fff, MRA32_RAM },
539 { 0x500000, 0x500007, undrfire_input_r },
540 { 0x600000, 0x600007, cbombers_adc_r },
541 { 0x700000, 0x7007ff, MRA32_RAM },
542 { 0x800000, 0x80ffff, TC0480SCP_long_r }, /* tilemaps */
543 { 0x830000, 0x83002f, TC0480SCP_ctrl_long_r },
544 { 0x900000, 0x90ffff, TC0100SCN_long_r }, /* piv tilemaps */
545 { 0x920000, 0x92000f, TC0100SCN_ctrl_long_r },
546 { 0xb00000, 0xb0000f, MRA32_RAM }, /* ? */
547 { 0xc00000, 0xc00007, MRA32_RAM }, /* LAN controller? */
548 { 0xe00000, 0xe0ffff, MRA32_RAM },
549 MEMORY_END
550
551 static MEMORY_WRITE32_START( cbombers_writemem )
552 { 0x000000, 0x1fffff, MWA32_ROM },
553 { 0x200000, 0x21ffff, MWA32_RAM },
554 { 0x300000, 0x303fff, MWA32_RAM, &spriteram32, &spriteram_size },
555 { 0x400000, 0x400003, cbombers_cpua_ctrl_w },
556 { 0x500000, 0x500007, undrfire_input_w },
557 { 0x600000, 0x600007, cbombers_adc_w },
558 { 0x700000, 0x7007ff, MWA32_RAM, &f3_shared_ram },
559 { 0x800000, 0x80ffff, TC0480SCP_long_w }, /* tilemaps */
560 { 0x830000, 0x83002f, TC0480SCP_ctrl_long_w },
561 { 0x900000, 0x90ffff, TC0100SCN_long_w }, /* piv tilemaps */
562 { 0x920000, 0x92000f, TC0100SCN_ctrl_long_w },
563 { 0xa00000, 0xa0ffff, color_ram_w, &paletteram32 },
564 { 0xb00000, 0xb0000f, MWA32_RAM }, /* ? */
565 { 0xc00000, 0xc00007, MWA32_RAM },/* LAN controller? */
566 { 0xd00000, 0xd00003, rotate_control_w }, /* perhaps port based rotate control? */
567 { 0xe00000, 0xe0ffff, MWA32_RAM, &shared_ram },
568 MEMORY_END
569
570 static MEMORY_READ16_START( cbombers_sub_readmem )
571 { 0x000000, 0x03ffff, MRA16_ROM },
572 { 0x400000, 0x40ffff, MRA16_RAM }, /* local ram */
573 { 0x800000, 0x80ffff, shared_ram_r },
574 MEMORY_END
575
576 static MEMORY_WRITE16_START( cbombers_sub_writemem )
577 { 0x000000, 0x03ffff, MWA16_ROM },
578 { 0x400000, 0x40ffff, MWA16_RAM },/* local ram */
579 { 0x800000, 0x80ffff, shared_ram_w },
580 MEMORY_END
581
582
583 /******************************************************************************/
584
585 static MEMORY_READ16_START( sound_readmem )
586 { 0x000000, 0x03ffff, MRA16_RAM },
587 { 0x140000, 0x140fff, f3_68000_share_r },
588 { 0x200000, 0x20001f, ES5505_data_0_r },
589 { 0x260000, 0x2601ff, es5510_dsp_r },
590 { 0x280000, 0x28001f, f3_68681_r },
591 { 0xc00000, 0xcfffff, MRA16_BANK1 },
592 { 0xff8000, 0xffffff, MRA16_RAM },
593 MEMORY_END
594
595 static MEMORY_WRITE16_START( sound_writemem )
596 { 0x000000, 0x03ffff, MWA16_RAM },
597 { 0x140000, 0x140fff, f3_68000_share_w },
598 { 0x200000, 0x20001f, ES5505_data_0_w },
599 { 0x260000, 0x2601ff, es5510_dsp_w },
600 { 0x280000, 0x28001f, f3_68681_w },
601 { 0x300000, 0x30003f, f3_es5505_bank_w },
602 { 0x340000, 0x340003, f3_volume_w }, /* 8 channel volume control */
603 { 0xc00000, 0xcfffff, MWA16_ROM },
604 { 0xff8000, 0xffffff, MWA16_RAM },
605 MEMORY_END
606
607
608 /***********************************************************
609 INPUT PORTS (dips in eprom)
610 ***********************************************************/
611
612 INPUT_PORTS_START( undrfire )
613 PORT_START /* IN0 */
614 PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
615 PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
616 PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
617 PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON3 | IPF_PLAYER1 ) /* ? where is freeze input */
618 PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
619 PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
620 PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
621 PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
622 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
623 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
624 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
625 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
626 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
627 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
628 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
629 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
630
631 PORT_START /* IN1 */
632 PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* Frame counter */
633 PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
634 PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
635 PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
636 PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
637 PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
638 PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
639 PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* reserved for EEROM */
640 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
641 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
642 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
643 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
644 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START1 )
645 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START2 )
646 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
647 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
648
649 PORT_START /* IN2 */
650 PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
651 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
652 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
653 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
654 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
655 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
656 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
657 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
658
659 /* Gun inputs (real range is 0-0xffff: we use standard 0-255 and shift later) */
660
661 PORT_START /* IN 3, P1X */
662 PORT_ANALOG( 0xff, 0x80, IPT_LIGHTGUN_X | IPF_REVERSE | IPF_PLAYER1, 20, 25, 0, 0xff)
663
664 PORT_START /* IN 4, P1Y */
665 PORT_ANALOG( 0xff, 0x80, IPT_LIGHTGUN_Y | IPF_PLAYER1, 20, 25, 0, 0xff)
666
667 PORT_START /* IN 5, P2X */
668 PORT_ANALOG( 0xff, 0x80, IPT_LIGHTGUN_X | IPF_REVERSE | IPF_PLAYER2, 20, 25, 0, 0xff)
669
670 PORT_START /* IN 6, P2Y */
671 PORT_ANALOG( 0xff, 0x80, IPT_LIGHTGUN_Y | IPF_PLAYER2, 20, 25, 0, 0xff)
672
673 PORT_START /* Fake DSW */
674 PORT_BITX( 0x01, 0x00, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Show gun target", KEYCODE_F1, IP_JOY_NONE )
675 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
676 PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
677 INPUT_PORTS_END
678
679
680 INPUT_PORTS_START( cbombers )
681 PORT_START
682 PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
683 PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
684 PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
685 PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON5 ) /* ? where is freeze input */
686 PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
687 PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
688 PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
689 PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
690 PORT_BITX(0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_TOGGLE, "Gear Shift", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
691 PORT_BITX(0x0200, IP_ACTIVE_LOW, IPT_BUTTON3, "Fire", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
692 PORT_BITX(0x0400, IP_ACTIVE_LOW, IPT_BUTTON1, "Accelerator", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
693 PORT_BITX(0x0800, IP_ACTIVE_LOW, IPT_BUTTON2, "Brake", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
694 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
695 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
696 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
697 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
698
699 PORT_START
700 PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* Frame counter */
701 PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
702 PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
703 PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
704 PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
705 PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
706 PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
707 PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* reserved for EEROM */
708 PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
709 PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
710 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
711 PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
712 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START1 )
713 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START2 )
714 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
715 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
716
717 PORT_START
718 PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
719 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
720 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
721 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
722 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
723 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
724 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
725 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
726
727 PORT_START /* IN 3, steering wheel */
728 PORT_ANALOG( 0xff, 0x7f, IPT_AD_STICK_X | IPF_REVERSE | IPF_PLAYER1, 25, 15, 0, 0xff)
729 INPUT_PORTS_END
730
731
732 /**********************************************************
733 GFX DECODING
734 **********************************************************/
735
736 static struct GfxLayout tile16x16_layout =
737 {
738 16,16, /* 16*16 sprites */
739 RGN_FRAC(1,2),
740 5, /* 5 bits per pixel */
741 { RGN_FRAC(1,2), 0, 8, 16, 24,},
742 { 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7 },
743 { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
744 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
745 64*16 /* every sprite takes 128 consecutive bytes */
746 };
747
748 static struct GfxLayout charlayout =
749 {
750 16,16, /* 16*16 characters */
751 RGN_FRAC(1,1),
752 4, /* 4 bits per pixel */
753 { 0, 1, 2, 3 },
754 { 1*4, 0*4, 5*4, 4*4, 3*4, 2*4, 7*4, 6*4, 9*4, 8*4, 13*4, 12*4, 11*4, 10*4, 15*4, 14*4 },
755 { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
756 128*8 /* every sprite takes 128 consecutive bytes */
757 };
758
759 static struct GfxLayout pivlayout =
760 {
761 8,8, /* 8*8 characters */
762 RGN_FRAC(1,2),
763 6, /* 4 bits per pixel */
764 { RGN_FRAC(1,2), RGN_FRAC(1,2)+1, 0, 1, 2, 3 },
765 { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4 },
766 { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
767 32*8 /* every sprite takes 32 consecutive bytes */
768 };
769
770 static struct GfxDecodeInfo undrfire_gfxdecodeinfo[] =
771 {
772 { REGION_GFX2, 0x0, &tile16x16_layout, 0, 512 },
773 { REGION_GFX1, 0x0, &charlayout, 0, 512 },
774 { REGION_GFX3, 0x0, &pivlayout, 0, 512 },
775 { -1 } /* end of array */
776 };
777
778 static struct GfxDecodeInfo cbombers_gfxdecodeinfo[] =
779 {
780 { REGION_GFX2, 0x0, &tile16x16_layout, 0, 512 },
781 { REGION_GFX1, 0x0, &charlayout, 0x1000, 512 },
782 { REGION_GFX3, 0x0, &pivlayout, 0, 512 },
783 { -1 } /* end of array */
784 };
785
786
787 /***********************************************************
788 MACHINE DRIVERS
789 ***********************************************************/
790
791
MACHINE_INIT(undrfire)792 static MACHINE_INIT( undrfire )
793 {
794 /* Sound cpu program loads to 0xc00000 so we use a bank */
795 data16_t *RAM = (data16_t *)memory_region(REGION_CPU2);
796 cpu_setbank(1,&RAM[0x80000]);
797
798 RAM[0]=RAM[0x80000]; /* Stack and Reset vectors */
799 RAM[1]=RAM[0x80001];
800 RAM[2]=RAM[0x80002];
801 RAM[3]=RAM[0x80003];
802
803 f3_68681_reset();
804 }
805
806
807 static struct ES5505interface es5505_interface =
808 {
809 1, /* total number of chips */
810 { 30476000 / 2 }, /* freq */
811 { REGION_SOUND1 }, /* Bank 0: Unused by F3 games? */
812 { REGION_SOUND1 }, /* Bank 1: All games seem to use this */
813 { YM3012_VOL(100,MIXER_PAN_LEFT,100,MIXER_PAN_RIGHT) }, /* master volume */
814 };
815
INTERRUPT_GEN(undrfire_interrupt)816 static INTERRUPT_GEN( undrfire_interrupt )
817 {
818 frame_counter^=1;
819 cpu_set_irq_line(0, 4, HOLD_LINE);
820 }
821
822 static MACHINE_DRIVER_START( undrfire )
823
824 /* basic machine hardware */
825 MDRV_CPU_ADD(M68EC020, 16000000) /* 16 MHz */
MDRV_CPU_MEMORY(undrfire_readmem,undrfire_writemem)826 MDRV_CPU_MEMORY(undrfire_readmem,undrfire_writemem)
827 MDRV_CPU_VBLANK_INT(undrfire_interrupt,1)
828
829 MDRV_CPU_ADD(M68000, 16000000)
830 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
831 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
832
833 MDRV_FRAMES_PER_SECOND(60)
834 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
835
836 MDRV_MACHINE_INIT(undrfire)
837 MDRV_NVRAM_HANDLER(undrfire)
838
839 /* video hardware */
840 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN)
841 MDRV_SCREEN_SIZE(40*8, 32*8)
842 MDRV_VISIBLE_AREA(0, 40*8-1, 3*8, 32*8-1)
843 MDRV_GFXDECODE(undrfire_gfxdecodeinfo)
844 MDRV_PALETTE_LENGTH(16384)
845
846 MDRV_VIDEO_START(undrfire)
847 MDRV_VIDEO_UPDATE(undrfire)
848
849 /* sound hardware */
850 MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
851 MDRV_SOUND_ADD(ES5505, es5505_interface)
852 MACHINE_DRIVER_END
853
854
855 static MACHINE_DRIVER_START( cbombers )
856
857 /* basic machine hardware */
858 MDRV_CPU_ADD(M68EC020, 16000000) /* 16 MHz */
859 MDRV_CPU_MEMORY(cbombers_readmem, cbombers_writemem)
860 MDRV_CPU_VBLANK_INT(irq4_line_hold,1)
861
862 MDRV_CPU_ADD(M68000, 16000000) /* 16 MHz */
863 MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
864 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
865
866 MDRV_CPU_ADD(M68000, 16000000) /* 16 MHz */
867 MDRV_CPU_MEMORY(cbombers_sub_readmem, cbombers_sub_writemem)
868 MDRV_CPU_VBLANK_INT(irq4_line_hold,1)
869
870 MDRV_INTERLEAVE(5) /* CPU slices - Need to interleave Cpu's 1 & 3 */
871 MDRV_FRAMES_PER_SECOND(60)
872 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
873
874 MDRV_MACHINE_INIT(undrfire)
875 MDRV_NVRAM_HANDLER(undrfire)
876
877 /* video hardware */
878 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN)
879 MDRV_SCREEN_SIZE(40*8, 32*8)
880 MDRV_VISIBLE_AREA(0, 40*8-1, 3*8, 32*8-1)
881 MDRV_GFXDECODE(cbombers_gfxdecodeinfo)
882 MDRV_PALETTE_LENGTH(16384)
883
884 MDRV_VIDEO_START(undrfire)
885 MDRV_VIDEO_UPDATE(cbombers)
886
887 /* sound hardware */
888 MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
889 MDRV_SOUND_ADD(ES5505, es5505_interface)
890 MACHINE_DRIVER_END
891
892 /***************************************************************************
893 DRIVERS
894 ***************************************************************************/
895
896 ROM_START( undrfire )
897 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 2048K for 68020 code (CPU A) */
898 ROM_LOAD32_BYTE( "d67-19", 0x00000, 0x80000, CRC(1d88fa5a) SHA1(5e498efb9535a8f4e82b5525390b8bde7c45c07e) )
899 ROM_LOAD32_BYTE( "d67-18", 0x00001, 0x80000, CRC(f41ae7fd) SHA1(bdd0df01b11205c263d2fa280746826b831d58bc) )
900 ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
901 ROM_LOAD32_BYTE( "d67-23", 0x00003, 0x80000, CRC(28e84e0a) SHA1(74c73c6df07d33ef4c0a29f8c1ee1a33eee922da) )
902
903 ROM_REGION( 0x140000, REGION_CPU2, 0 )
904 ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
905 ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
906
907 ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE )
908 ROM_LOAD16_BYTE( "d67-08", 0x000000, 0x200000, CRC(56730d44) SHA1(110872714b3c26a82473c7b80c120918b91b1b4b) ) /* SCR 16x16 tiles */
909 ROM_LOAD16_BYTE( "d67-09", 0x000001, 0x200000, CRC(3c19f9e3) SHA1(7ba8475d37cbf8bf38029124afdf62c915c8668d) )
910
911 ROM_REGION( 0x1000000, REGION_GFX2, ROMREGION_DISPOSE )
912 ROM_LOAD32_BYTE( "d67-03", 0x000003, 0x200000, CRC(3b6e99a9) SHA1(1e0e66763ddfa18a2d291626b245633555092959) ) /* OBJ 16x16 tiles */
913 ROM_LOAD32_BYTE( "d67-04", 0x000002, 0x200000, CRC(8f2934c9) SHA1(ead95b34eec3a6df27199edcbdd5595bc6555a50) )
914 ROM_LOAD32_BYTE( "d67-05", 0x000001, 0x200000, CRC(e2e7dcf3) SHA1(185dbd0489931123a295139dc0a045ad239018fb) )
915 ROM_LOAD32_BYTE( "d67-06", 0x000000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
916 ROM_LOAD32_BYTE( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
917
918 ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE )
919 ROM_LOAD16_BYTE( "d67-10", 0x000000, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 6bpp */
920 ROM_LOAD16_BYTE( "d67-11", 0x000001, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
921 ROM_LOAD ( "d67-12", 0x300000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) )
922 ROM_FILL ( 0x200000, 0x100000, 0 )
923
924 ROM_REGION16_LE( 0x80000, REGION_USER1, 0 )
925 ROM_LOAD16_WORD( "d67-13", 0x00000, 0x80000, CRC(42e7690d) SHA1(5f00f3f814653733bf9a5cb010675799de02fa76) ) /* STY, spritemap */
926
927 ROM_REGION16_BE( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY | ROMREGION_ERASE00 )
928 ROM_LOAD16_BYTE( "d67-01", 0x000000, 0x200000, CRC(a2f18122) SHA1(640014c6e6d66c59fe0accf370ad3bab9f40429a) ) /* Ensoniq samples */
929 ROM_LOAD16_BYTE( "d67-02", 0xc00000, 0x200000, CRC(fceb715e) SHA1(9326513acb0696669d4f2345649ab37c8c6ed171) )
930 ROM_END
931
932
933 ROM_START( undrfiru )
934 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 2048K for 68020 code (CPU A) */
935 ROM_LOAD32_BYTE( "d67-19", 0x00000, 0x80000, CRC(1d88fa5a) SHA1(5e498efb9535a8f4e82b5525390b8bde7c45c07e) )
936 ROM_LOAD32_BYTE( "d67-18", 0x00001, 0x80000, CRC(f41ae7fd) SHA1(bdd0df01b11205c263d2fa280746826b831d58bc) )
937 ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
938 ROM_LOAD32_BYTE( "d67-22", 0x00003, 0x80000, CRC(5fef7e9c) SHA1(03a6ea0715ce8705d74550186b22940f8a49c088) )
939
940 ROM_REGION( 0x140000, REGION_CPU2, 0 )
941 ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
942 ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
943
944 ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE )
945 ROM_LOAD16_BYTE( "d67-08", 0x000000, 0x200000, CRC(56730d44) SHA1(110872714b3c26a82473c7b80c120918b91b1b4b) ) /* SCR 16x16 tiles */
946 ROM_LOAD16_BYTE( "d67-09", 0x000001, 0x200000, CRC(3c19f9e3) SHA1(7ba8475d37cbf8bf38029124afdf62c915c8668d) )
947
948 ROM_REGION( 0x1000000, REGION_GFX2, ROMREGION_DISPOSE )
949 ROM_LOAD32_BYTE( "d67-03", 0x000003, 0x200000, CRC(3b6e99a9) SHA1(1e0e66763ddfa18a2d291626b245633555092959) ) /* OBJ 16x16 tiles */
950 ROM_LOAD32_BYTE( "d67-04", 0x000002, 0x200000, CRC(8f2934c9) SHA1(ead95b34eec3a6df27199edcbdd5595bc6555a50) )
951 ROM_LOAD32_BYTE( "d67-05", 0x000001, 0x200000, CRC(e2e7dcf3) SHA1(185dbd0489931123a295139dc0a045ad239018fb) )
952 ROM_LOAD32_BYTE( "d67-06", 0x000000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
953 ROM_LOAD32_BYTE( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
954
955 ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE )
956 ROM_LOAD16_BYTE( "d67-10", 0x000000, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 6bpp */
957 ROM_LOAD16_BYTE( "d67-11", 0x000001, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
958 ROM_LOAD ( "d67-12", 0x300000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) )
959 ROM_FILL ( 0x200000, 0x100000, 0 )
960
961 ROM_REGION16_LE( 0x80000, REGION_USER1, 0 )
962 ROM_LOAD16_WORD( "d67-13", 0x00000, 0x80000, CRC(42e7690d) SHA1(5f00f3f814653733bf9a5cb010675799de02fa76) ) /* STY, spritemap */
963
964 ROM_REGION16_BE( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY | ROMREGION_ERASE00 )
965 ROM_LOAD16_BYTE( "d67-01", 0x000000, 0x200000, CRC(a2f18122) SHA1(640014c6e6d66c59fe0accf370ad3bab9f40429a) ) /* Ensoniq samples */
966 ROM_LOAD16_BYTE( "d67-02", 0xc00000, 0x200000, CRC(fceb715e) SHA1(9326513acb0696669d4f2345649ab37c8c6ed171) )
967 ROM_END
968
969 ROM_START( undrfirj )
970 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 2048K for 68020 code (CPU A) */
971 ROM_LOAD32_BYTE( "d67-19", 0x00000, 0x80000, CRC(1d88fa5a) SHA1(5e498efb9535a8f4e82b5525390b8bde7c45c07e) )
972 ROM_LOAD32_BYTE( "d67-18", 0x00001, 0x80000, CRC(f41ae7fd) SHA1(bdd0df01b11205c263d2fa280746826b831d58bc) )
973 ROM_LOAD32_BYTE( "d67-17", 0x00002, 0x80000, CRC(34e030b7) SHA1(62c270c817199a56e647ea74849fe5c07717ac18) )
974 ROM_LOAD32_BYTE( "d67-16", 0x00003, 0x80000, CRC(c6e62f26) SHA1(6a430916f829a4b0240ccf8477dcbb1f39a26e90) )
975
976 ROM_REGION( 0x140000, REGION_CPU2, 0 )
977 ROM_LOAD16_BYTE( "d67-20", 0x100000, 0x20000, CRC(974ebf69) SHA1(8a5de503c514bf0da0c956e2dfdf0cfb83ea1f72) )
978 ROM_LOAD16_BYTE( "d67-21", 0x100001, 0x20000, CRC(8fc6046f) SHA1(28522ce5c5900f74d3faa86710256a7201b32500) )
979
980 ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE )
981 ROM_LOAD16_BYTE( "d67-08", 0x000000, 0x200000, CRC(56730d44) SHA1(110872714b3c26a82473c7b80c120918b91b1b4b) ) /* SCR 16x16 tiles */
982 ROM_LOAD16_BYTE( "d67-09", 0x000001, 0x200000, CRC(3c19f9e3) SHA1(7ba8475d37cbf8bf38029124afdf62c915c8668d) )
983
984 ROM_REGION( 0x1000000, REGION_GFX2, ROMREGION_DISPOSE )
985 ROM_LOAD32_BYTE( "d67-03", 0x000003, 0x200000, CRC(3b6e99a9) SHA1(1e0e66763ddfa18a2d291626b245633555092959) ) /* OBJ 16x16 tiles */
986 ROM_LOAD32_BYTE( "d67-04", 0x000002, 0x200000, CRC(8f2934c9) SHA1(ead95b34eec3a6df27199edcbdd5595bc6555a50) )
987 ROM_LOAD32_BYTE( "d67-05", 0x000001, 0x200000, CRC(e2e7dcf3) SHA1(185dbd0489931123a295139dc0a045ad239018fb) )
988 ROM_LOAD32_BYTE( "d67-06", 0x000000, 0x200000, CRC(a2a63488) SHA1(a1ed140cc3757c3c05a0a822089c6efc83bf4805) )
989 ROM_LOAD32_BYTE( "d67-07", 0x800000, 0x200000, CRC(189c0ee5) SHA1(de85b39dc67f31ef80800ff6ec9a391652eb12e4) )
990
991 ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE )
992 ROM_LOAD16_BYTE( "d67-10", 0x000000, 0x100000, CRC(d79e6ce9) SHA1(8b38302971816d599cdaa3279cb6395441373c6f) ) /* PIV 8x8 tiles, 6bpp */
993 ROM_LOAD16_BYTE( "d67-11", 0x000001, 0x100000, CRC(7a401bb3) SHA1(47257a6a4b37ec1ceb4e974b776ee3ea30db06fa) )
994 ROM_LOAD ( "d67-12", 0x300000, 0x100000, CRC(67b16fec) SHA1(af0f9f50516331780ef6cfab1e12a23edf87daa7) )
995 ROM_FILL ( 0x200000, 0x100000, 0 )
996
997 ROM_REGION16_LE( 0x80000, REGION_USER1, 0 )
998 ROM_LOAD16_WORD( "d67-13", 0x00000, 0x80000, CRC(42e7690d) SHA1(5f00f3f814653733bf9a5cb010675799de02fa76) ) /* STY, spritemap */
999
1000 ROM_REGION16_BE( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY | ROMREGION_ERASE00 )
1001 ROM_LOAD16_BYTE( "d67-01", 0x000000, 0x200000, CRC(a2f18122) SHA1(640014c6e6d66c59fe0accf370ad3bab9f40429a) ) /* Ensoniq samples */
1002 ROM_LOAD16_BYTE( "d67-02", 0xc00000, 0x200000, CRC(fceb715e) SHA1(9326513acb0696669d4f2345649ab37c8c6ed171) )
1003 ROM_END
1004
1005 ROM_START( cbombers )
1006 ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* 2048K for 68020 code (CPU A) */
1007 ROM_LOAD32_BYTE( "d83_39.ic17", 0x00000, 0x80000, CRC(b9f48284) SHA1(acc5d412e8900dda483a89a1ac1febd6d5735f3c) )
1008 ROM_LOAD32_BYTE( "d83_41.ic4", 0x00001, 0x80000, CRC(a2f4c8be) SHA1(0f8f3b5ecff34d8c35af1ab11bb5528b52e30109) )
1009 ROM_LOAD32_BYTE( "d83_40.ic3", 0x00002, 0x80000, CRC(b05f59ea) SHA1(e46a31737f44be2a3d478b8010fe0d6383290e03) )
1010 ROM_LOAD32_BYTE( "d83_38.ic16", 0x00003, 0x80000, CRC(0a10616c) SHA1(c9cfc8c870f8a989f004d2db4f6fb76e5b7b7f9b) )
1011
1012 ROM_REGION( 0x140000, REGION_CPU2, 0 ) /* Sound cpu */
1013 ROM_LOAD16_BYTE( "d83_26.ic37", 0x100000, 0x20000, CRC(4f49b484) SHA1(96daa3cb7fa4aae3aedc91ec27d85945311dfcc9) )
1014 ROM_LOAD16_BYTE( "d83_27.ic38", 0x100001, 0x20000, CRC(2aa1a237) SHA1(b809f75bbbbb4eb5d0df725aaa31aae8a6fba552) )
1015
1016 ROM_REGION( 0x40000, REGION_CPU3, 0 ) /* 256K for 68000 code (CPU B) */
1017 ROM_LOAD16_BYTE( "d83_28.ic26", 0x00001, 0x20000, CRC(06328ef7) SHA1(90a14649e56221e47b87958896f6eae4556265c2) )
1018 ROM_LOAD16_BYTE( "d83_29.ic27", 0x00000, 0x20000, CRC(771b4080) SHA1(a47c3a6abc07a6a61b694d32baa0ad4c25045841) )
1019
1020 ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE )
1021 ROM_LOAD16_BYTE( "d83_04.ic8", 0x000000, 0x200000, CRC(79f36cce) SHA1(2c8dc4cd5c4aa335c1e45888f5947acf94fa628a) )
1022 ROM_LOAD16_BYTE( "d83_05.ic7", 0x000001, 0x200000, CRC(7787e495) SHA1(1758de5fdd1d12727368d08d7d4752c3756fc23e) )
1023
1024 ROM_REGION( 0x1800000, REGION_GFX2, ROMREGION_DISPOSE )
1025 ROM_LOAD32_BYTE( "d83_06.ic28", 0x000003, 0x200000, CRC(4b71944e) SHA1(e8ed190280c7378fb4edcb192cef0d4d62582ad5) )
1026 ROM_LOAD32_BYTE( "d83_07.ic30", 0x000002, 0x200000, CRC(29861b61) SHA1(76562b0243c1bc38623c0ef9d20de7572a979e37) )
1027 ROM_LOAD32_BYTE( "d83_08.ic32", 0x000001, 0x200000, CRC(a0e81e01) SHA1(96ad8cfc849caaf85350cfc7cf23ad23635a3813) )
1028 ROM_LOAD32_BYTE( "d83_09.ic45", 0x000000, 0x200000, CRC(7e4dec50) SHA1(4d8c1be739d425d8ded07774094b775f35a915bf) )
1029 ROM_LOAD32_BYTE( "d83_11.ic41", 0x800003, 0x100000, CRC(a790e490) SHA1(9c57405ef2ef3368eb0958a3e43601110c1cc90d) )
1030 ROM_LOAD32_BYTE( "d83_12.ic29", 0x800002, 0x100000, CRC(2f237b0d) SHA1(2ecb947671d263a77510bfebda03f883b55b8df4) )
1031 ROM_LOAD32_BYTE( "d83_13.ic31", 0x800001, 0x100000, CRC(c2cceeb6) SHA1(3ec932655326caed13a40394bbf8e8baf836de2a) )
1032 ROM_LOAD32_BYTE( "d83_14.ic44", 0x800000, 0x100000, CRC(8b6f4f12) SHA1(6a28004d287f00627622376aa3d6704f2684a6f3) )
1033 ROM_LOAD32_BYTE( "d83_10.ic43", 0xc00000, 0x200000, CRC(36c440a0) SHA1(31685d3cdf4e39e1365df7e6a588c28f95d7e0a8) )
1034 ROM_LOAD32_BYTE( "d83_15.ic42", 0x1400000, 0x100000, CRC(1b71175e) SHA1(60ad38ce97fd7995ff2f29d6b1a3b873dc2f0eb3) )
1035
1036 ROM_REGION( 0x400000, REGION_GFX3, ROMREGION_DISPOSE )
1037 ROM_LOAD16_BYTE( "d83_16.ic19", 0x000000, 0x100000, CRC(d364cf1e) SHA1(ee43f50edf50ec840acfb98b1314140ee9693839) )
1038 ROM_LOAD16_BYTE( "d83_17.ic5", 0x000001, 0x100000, CRC(0ffe737c) SHA1(5923a4edf9d0c8339f793840c2bdc691e2c651e6) )
1039 ROM_LOAD ( "d83_18.ic6", 0x300000, 0x100000, CRC(87979155) SHA1(0ffafa970f9f9c98f8938104b97e63d2b5757804) )
1040 ROM_FILL ( 0x200000, 0x100000, 0 )
1041
1042 ROM_REGION16_LE( 0x80000, REGION_USER1, 0 )
1043 ROM_LOAD16_BYTE( "d83_31.ic10", 0x000001, 0x40000, CRC(85c37961) SHA1(15ea5c4904d910575e984e146c8941dff913d45f) )
1044 ROM_LOAD16_BYTE( "d83_32.ic11", 0x000000, 0x40000, CRC(b0db2559) SHA1(2bfae2dbe164b42e95d0a93fab82b7040c3fbc56) )
1045
1046 ROM_REGION( 0x40000, REGION_USER2, 0 )
1047 ROM_LOAD( "d83_30.ic9", 0x00000, 0x40000, CRC(eb86dc67) SHA1(31c7b6f30ff912fafed4b87ce8bf603ee17d1664) )
1048
1049 ROM_REGION16_BE( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY | ROMREGION_ERASE00 )
1050 ROM_LOAD16_BYTE( "d83_01.ic40", 0xc00000, 0x200000, CRC(912799f4) SHA1(22f69e61519d2cddcfc4e4c9601e78a9d5265d5b) )
1051 ROM_LOAD16_BYTE( "d83_02.ic39", 0x000000, 0x200000, CRC(2abca020) SHA1(3491a95651ca89b7fe6d040b8576fa7646bfe84b) )
1052 ROM_RELOAD ( 0x400000, 0x200000 )
1053 ROM_LOAD16_BYTE( "d83_03.ic18", 0x800000, 0x200000, CRC(1b2d9ec3) SHA1(ead6b5542ad3987ef0f9ea01ce7f960abc9119b3) )
1054 ROM_END
1055
1056
1057 static READ32_HANDLER( main_cycle_r )
1058 {
1059 int ptr;
1060 if ((activecpu_get_sp()&2)==0) ptr=undrfire_ram[(activecpu_get_sp()&0x1ffff)/4];
1061 else ptr=(((undrfire_ram[(activecpu_get_sp()&0x1ffff)/4])&0x1ffff)<<16) |
1062 (undrfire_ram[((activecpu_get_sp()&0x1ffff)/4)+1]>>16);
1063
1064 if (activecpu_get_pc()==0x682 && ptr==0x1156)
1065 cpu_spinuntil_int();
1066
1067 return undrfire_ram[0x4f8/4];
1068 }
1069
DRIVER_INIT(undrfire)1070 DRIVER_INIT( undrfire )
1071 {
1072 unsigned int offset,i;
1073 UINT8 *gfx = memory_region(REGION_GFX3);
1074 int size=memory_region_length(REGION_GFX3);
1075 int data;
1076
1077 /* Speedup handlers */
1078 install_mem_read32_handler(0, 0x2004f8, 0x2004fb, main_cycle_r);
1079
1080 /* make piv tile GFX format suitable for gfxdecode */
1081 offset = size/2;
1082 for (i = size/2+size/4; i<size; i++)
1083 {
1084 int d1,d2,d3,d4;
1085
1086 /* Expand 2bits into 4bits format */
1087 data = gfx[i];
1088 d1 = (data>>0) & 3;
1089 d2 = (data>>2) & 3;
1090 d3 = (data>>4) & 3;
1091 d4 = (data>>6) & 3;
1092
1093 gfx[offset] = (d1<<2) | (d2<<6);
1094 offset++;
1095
1096 gfx[offset] = (d3<<2) | (d4<<6);
1097 offset++;
1098 }
1099 }
1100
1101
DRIVER_INIT(cbombers)1102 DRIVER_INIT( cbombers )
1103 {
1104 unsigned int offset,i;
1105 UINT8 *gfx = memory_region(REGION_GFX3);
1106 int size=memory_region_length(REGION_GFX3);
1107 int data;
1108
1109
1110 /* make piv tile GFX format suitable for gfxdecode */
1111 offset = size/2;
1112 for (i = size/2+size/4; i<size; i++)
1113 {
1114 int d1,d2,d3,d4;
1115
1116 /* Expand 2bits into 4bits format */
1117 data = gfx[i];
1118 d1 = (data>>0) & 3;
1119 d2 = (data>>2) & 3;
1120 d3 = (data>>4) & 3;
1121 d4 = (data>>6) & 3;
1122
1123 gfx[offset] = (d1<<2) | (d2<<6);
1124 offset++;
1125
1126 gfx[offset] = (d3<<2) | (d4<<6);
1127 offset++;
1128 }
1129 }
1130
1131 GAME( 1993, undrfire, 0, undrfire, undrfire, undrfire, ROT0, "Taito Corporation Japan", "Under Fire (World)" )
1132 GAME( 1993, undrfiru, undrfire, undrfire, undrfire, undrfire, ROT0, "Taito America Corporation", "Under Fire (US)" )
1133 GAME( 1993, undrfirj, undrfire, undrfire, undrfire, undrfire, ROT0, "Taito Corporation", "Under Fire (Japan)" )
1134 GAME( 1994, cbombers, 0, cbombers, cbombers, cbombers, ROT0, "Taito Corporation Japan", "Chase Bombers (World)" )
1135