1 /***************************************************************************
2 
3 							-= Clash Road =-
4 
5 					driver by	Luca Elia (l.elia@tin.it)
6 
7 Main  CPU   :	Z80A
8 
9 Video Chips :	?
10 
11 Sound CPU   :	Z80A
12 
13 Sound Chips :	Custom (NAMCO)
14 
15 XTAL        :	18.432 MHz
16 
17 
18 ***************************************************************************/
19 
20 #include "driver.h"
21 #include "vidhrdw/generic.h"
22 
23 data8_t *clshroad_sharedram;
24 
25 /* Variables & functions defined in vidhrdw: */
26 
27 extern data8_t *clshroad_vram_0, *clshroad_vram_1;
28 extern data8_t *clshroad_vregs;
29 
30 WRITE_HANDLER( clshroad_vram_0_w );
31 WRITE_HANDLER( clshroad_vram_1_w );
32 WRITE_HANDLER( clshroad_flipscreen_w );
33 
34 PALETTE_INIT( firebatl );
35 PALETTE_INIT( clshroad );
36 VIDEO_START( firebatl );
37 VIDEO_START( clshroad );
38 VIDEO_UPDATE( clshroad );
39 
40 extern unsigned char *wiping_soundregs;
41 int wiping_sh_start(const struct MachineSound *msound);
42 void wiping_sh_stop(void);
43 WRITE_HANDLER( wiping_sound_w );
44 
45 
46 
MACHINE_INIT(clshroad)47 MACHINE_INIT( clshroad )
48 {
49 	flip_screen_set(0);
50 }
51 
52 
53 /* Shared RAM with the sound CPU */
54 
READ_HANDLER(clshroad_sharedram_r)55 READ_HANDLER ( clshroad_sharedram_r )	{	return clshroad_sharedram[offset];	}
WRITE_HANDLER(clshroad_sharedram_w)56 WRITE_HANDLER( clshroad_sharedram_w )	{	clshroad_sharedram[offset] = data;	}
57 
READ_HANDLER(clshroad_input_r)58 READ_HANDLER( clshroad_input_r )
59 {
60 	return	((~readinputport(0) & (1 << offset)) ? 1 : 0) |
61 			((~readinputport(1) & (1 << offset)) ? 2 : 0) |
62 			((~readinputport(2) & (1 << offset)) ? 4 : 0) |
63 			((~readinputport(3) & (1 << offset)) ? 8 : 0) ;
64 }
65 
66 
MEMORY_READ_START(clshroad_readmem)67 static MEMORY_READ_START( clshroad_readmem )
68 	{ 0x0000, 0x7fff, MRA_ROM				},	/* ROM*/
69 	{ 0x8000, 0x95ff, MRA_RAM				},	/* Work   RAM*/
70 	{ 0x9600, 0x97ff, clshroad_sharedram_r	},	/* Shared RAM*/
71 	{ 0x9800, 0x9dff, MRA_RAM				},	/* Work   RAM*/
72 	{ 0x9e00, 0x9fff, MRA_RAM				},	/* Sprite RAM*/
73 	{ 0xa100, 0xa107, clshroad_input_r		},	/* Inputs*/
74 	{ 0xa800, 0xafff, MRA_RAM				},	/* Layer  1*/
75 	{ 0xc000, 0xc7ff, MRA_RAM				},	/* Layers 0*/
76 MEMORY_END
77 
78 static MEMORY_WRITE_START( clshroad_writemem )
79 	{ 0x0000, 0x7fff, MWA_ROM									},	/* ROM*/
80 	{ 0x8000, 0x95ff, MWA_RAM									},	/* Work   RAM*/
81 	{ 0x9600, 0x97ff, clshroad_sharedram_w, &clshroad_sharedram	},	/* Shared RAM*/
82 	{ 0x9800, 0x9dff, MWA_RAM									},	/* Work   RAM*/
83 	{ 0x9e00, 0x9fff, MWA_RAM, &spriteram, &spriteram_size		},	/* Sprite RAM*/
84 	{ 0xa001, 0xa001, MWA_NOP									},	/* ? Interrupt related*/
85 	{ 0xa004, 0xa004, clshroad_flipscreen_w						},	/* Flip Screen*/
86 	{ 0xa800, 0xafff, clshroad_vram_1_w, &clshroad_vram_1		},	/* Layer 1*/
87 	{ 0xb000, 0xb003, MWA_RAM, &clshroad_vregs					},	/* Scroll*/
88 	{ 0xc000, 0xc7ff, clshroad_vram_0_w, &clshroad_vram_0		},	/* Layers 0*/
89 MEMORY_END
90 
91 static MEMORY_READ_START( clshroad_sound_readmem )
92 	{ 0x0000, 0x1fff, MRA_ROM				},	/* ROM*/
93 	{ 0x9600, 0x97ff, clshroad_sharedram_r	},	/* Shared RAM*/
94 MEMORY_END
95 
96 static MEMORY_WRITE_START( clshroad_sound_writemem )
97 	{ 0x0000, 0x1fff, MWA_ROM				},	/* ROM*/
98 	{ 0x4000, 0x7fff, wiping_sound_w, &wiping_soundregs },
99 	{ 0x9600, 0x97ff, clshroad_sharedram_w	},	/* Shared RAM*/
100 	{ 0xa003, 0xa003, MWA_NOP				},	/* ? Interrupt related*/
101 MEMORY_END
102 
103 
104 
105 INPUT_PORTS_START( clshroad )
106 	PORT_START	/* IN0 - Player 1*/
107 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
108 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
109 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
110 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
111 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
112 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
113 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_COIN1 )
114 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN  )
115 
116 	PORT_START	/* IN1 - Player 2*/
117 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_COCKTAIL )
118 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_COCKTAIL )
119 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_COCKTAIL )
120 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_COCKTAIL )
121 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
122 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
123 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_START1 )
124 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START2 )
125 
126 	PORT_START	/* IN2 - DSW 1*/
127 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
128 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
129 	PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
130 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
131 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
132 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
133 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
134 	PORT_DIPSETTING(    0x04, DEF_STR( Cocktail ) )
135 	PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) )	/* Damage when falling*/
136 	PORT_DIPSETTING(    0x18, "Normal"  )	/* 8*/
137 	PORT_DIPSETTING(    0x10, "Hard"    )	/* A*/
138 	PORT_DIPSETTING(    0x08, "Harder"  )	/* C*/
139 	PORT_DIPSETTING(    0x00, "Hardest" )	/* E*/
140 	PORT_BITX(    0x20, 0x20, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
141 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
142 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
143 	PORT_DIPNAME( 0x40, 0x40, "Unknown 1-6" )
144 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
145 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
146 	PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" )
147 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
148 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
149 
150 	PORT_START	/* IN3 - DSW 2*/
151 /*
152 first bit OFF is:	0 			0	<- value
153 					1			1
154 					2			2
155 					3			3
156 					4			4
157 					5			5
158 					6			6
159 					else		FF
160 
161 But the values seems unused then.
162 */
163 	PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0" )
164 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
165 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
166 	PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" )
167 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
168 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
169 	PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )
170 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
171 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
172 	PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )
173 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
174 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
175 	PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" )
176 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
177 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
178 	PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" )
179 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
180 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
181 	PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )
182 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
183 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
184 	PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" )	/*?*/
185 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
186 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
187 INPUT_PORTS_END
188 
189 INPUT_PORTS_START( firebatl )
190 	PORT_START	/* IN0 - Player 1*/
191 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
192 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
193 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
194 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
195 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
196 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
197 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_COIN1 )
198 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_UNKNOWN  )
199 
200 	PORT_START	/* IN1 - Player 2*/
201 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_COCKTAIL )
202 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_COCKTAIL )
203 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_COCKTAIL )
204 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_COCKTAIL )
205 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
206 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
207 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_START1 )
208 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START2 )
209 
210 	PORT_START	/* IN2 - DSW 1*/
211 	PORT_DIPNAME( 0x01, 0x01, "Unknown 1-0" )
212 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
213 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
214 	PORT_DIPNAME( 0x02, 0x02, "Unknown 1-1" )
215 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
216 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
217 	PORT_BITX(    0x04, 0x00, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Lives", IP_KEY_NONE, IP_JOY_NONE )
218 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
219 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
220 	PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" )
221 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
222 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
223 	PORT_DIPNAME( 0x10, 0x10, "Unknown 1-4" )
224 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
225 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
226 	PORT_DIPNAME( 0x20, 0x20, "Unknown 1-5" )
227 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
228 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
229 	PORT_DIPNAME( 0x40, 0x40, "Unknown 1-6" )
230 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
231 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
232 	PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" )
233 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
234 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
235 
236 	PORT_START	/* IN3 - DSW 2*/
237 	PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0" )
238 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
239 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
240 	PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" )
241 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
242 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
243 	PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )
244 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
245 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
246 	PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )
247 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
248 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
249 	PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" )
250 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
251 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
252 	PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" )
253 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
254 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
255 	PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )
256 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
257 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
258 	PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" )
259 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
260 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
261 INPUT_PORTS_END
262 
263 
264 static struct GfxLayout layout_8x8x2 =
265 {
266 	8,8,
267 	RGN_FRAC(1,1),
268 	2,
269 	{ 0, 4 },
270 	{ STEP4(0,1), STEP4(8,1) },
271 	{ STEP8(0,8*2) },
272 	8*8*2
273 };
274 
275 static struct GfxLayout layout_8x8x4 =
276 {
277 	8,8,
278 	RGN_FRAC(1,2),
279 	4,
280 	{ RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4, 0, 4 },
281 	{ STEP4(0,1), STEP4(8,1) },
282 	{ STEP8(0,8*2) },
283 	8*8*2
284 };
285 
286 static struct GfxLayout layout_16x16x4 =
287 {
288 	16,16,
289 	RGN_FRAC(1,2),
290 	4,
291 	{ RGN_FRAC(1,2) + 0, RGN_FRAC(1,2) + 4, 0, 4 },
292 	{ STEP4(0,1), STEP4(8,1), STEP4(8*8*2+0,1), STEP4(8*8*2+8,1) },
293 	{ STEP8(0,8*2), STEP8(8*8*2*2,8*2) },
294 	16*16*2
295 };
296 
297 static struct GfxDecodeInfo firebatl_gfxdecodeinfo[] =
298 {
299 	{ REGION_GFX1, 0, &layout_16x16x4,   0, 16 }, /* [0] Sprites*/
300 	{ REGION_GFX2, 0, &layout_16x16x4,	 16,  1 }, /* [1] Layer 0*/
301 	{ REGION_GFX3, 0, &layout_8x8x2,   512, 64 }, /* [2] Layer 1*/
302 	{ -1 }
303 };
304 
305 static struct GfxDecodeInfo clshroad_gfxdecodeinfo[] =
306 {
307 	{ REGION_GFX1, 0, &layout_16x16x4, 0, 16 }, /* [0] Sprites*/
308 	{ REGION_GFX2, 0, &layout_16x16x4, 0x90,  1 }, /* [1] Layer 0*/
309 	{ REGION_GFX3, 0, &layout_8x8x4,   0, 16 }, /* [2] Layer 1*/
310 	{ -1 }
311 };
312 
313 
314 
315 static struct CustomSound_interface custom_interface =
316 {
317 	wiping_sh_start,
318 	wiping_sh_stop,
319 	0
320 };
321 
322 
323 
324 static MACHINE_DRIVER_START( firebatl )
325 
326 	/* basic machine hardware */
327 	MDRV_CPU_ADD(Z80, 3000000)	/* ? */
MDRV_CPU_MEMORY(clshroad_readmem,clshroad_writemem)328 	MDRV_CPU_MEMORY(clshroad_readmem,clshroad_writemem)
329 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)	/* IRQ, no NMI */
330 
331 	MDRV_CPU_ADD(Z80, 3000000)	/* ? */
332 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
333 	MDRV_CPU_MEMORY(clshroad_sound_readmem,clshroad_sound_writemem)
334 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)	/* IRQ, no NMI */
335 
336 	MDRV_FRAMES_PER_SECOND(60)
337 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
338 
339 	MDRV_MACHINE_INIT(clshroad)
340 
341 	/* video hardware */
342 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
343 	MDRV_SCREEN_SIZE(0x120, 0x100)
344 	MDRV_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1)
345 	MDRV_GFXDECODE(firebatl_gfxdecodeinfo)
346 	MDRV_PALETTE_LENGTH(512)
347 	MDRV_COLORTABLE_LENGTH(512+64*4)
348 
349 	MDRV_PALETTE_INIT(firebatl)
350 	MDRV_VIDEO_START(firebatl)
351 	MDRV_VIDEO_UPDATE(clshroad)
352 
353 	/* sound hardware */
354 	MDRV_SOUND_ADD(CUSTOM, custom_interface)
355 MACHINE_DRIVER_END
356 
357 static MACHINE_DRIVER_START( clshroad )
358 
359 	/* basic machine hardware */
360 	MDRV_CPU_ADD(Z80, 18432000/6)	/* ? */
361 	MDRV_CPU_MEMORY(clshroad_readmem,clshroad_writemem)
362 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)	/* IRQ, no NMI */
363 
364 	MDRV_CPU_ADD(Z80, 18432000/6)	/* ? */
365 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
366 	MDRV_CPU_MEMORY(clshroad_sound_readmem,clshroad_sound_writemem)
367 	MDRV_CPU_VBLANK_INT(irq0_line_hold,1)	/* IRQ, no NMI */
368 
369 	MDRV_FRAMES_PER_SECOND(60)
370 	MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
371 
372 	MDRV_MACHINE_INIT(clshroad)
373 
374 	/* video hardware */
375 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
376 	MDRV_SCREEN_SIZE(0x120, 0x100)
377 	MDRV_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1)
378 	MDRV_GFXDECODE(clshroad_gfxdecodeinfo)
379 	MDRV_PALETTE_LENGTH(256)
380 
381 	MDRV_PALETTE_INIT(clshroad)
382 	MDRV_VIDEO_START(clshroad)
383 	MDRV_VIDEO_UPDATE(clshroad)
384 
385 	/* sound hardware */
386 	MDRV_SOUND_ADD(CUSTOM, custom_interface)
387 MACHINE_DRIVER_END
388 
389 
390 
391 ROM_START( firebatl )
392 	ROM_REGION( 0x10000, REGION_CPU1, 0 )		/* Main Z80 Code */
393 	ROM_LOAD( "rom01",       0x00000, 0x2000, CRC(10e24ef6) SHA1(b6dae9824eb3cecececbdfdb416a90b1b61ff18d) )
394 	ROM_LOAD( "rom02",       0x02000, 0x2000, CRC(47f79bee) SHA1(23e64ff69ff5112b0413d12a283ca90cf3642389) )
395 	ROM_LOAD( "rom03",       0x04000, 0x2000, CRC(693459b9) SHA1(8bba526960f49c9e6c7bca40eb8fbbfc81588660) )
396 
397 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Sound Z80 Code */
398 	ROM_LOAD( "rom04",       0x0000, 0x2000, CRC(5f232d9a) SHA1(d0b9926cb02203f1a1f7fd0d0d7b1fe8eddc6511) )
399 
400 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )	/* Sprites */
401 	ROM_LOAD( "rom14",       0x0000, 0x2000, CRC(36a508a7) SHA1(9b2dede4332d2b8e55e7c5f916d8cf370d7e77fc) )
402 	ROM_LOAD( "rom13",       0x2000, 0x2000, CRC(a2ec508e) SHA1(a6dd7b9729f320ed3a28e0cd8ea7b26c2a639e1a) )
403 	ROM_LOAD( "rom12",       0x4000, 0x2000, CRC(f80ece92) SHA1(2cc4317b2c58be48dc285bb3a667863e2ca8d5b7) )
404 	ROM_LOAD( "rom11",       0x6000, 0x2000, CRC(b293e701) SHA1(9dacaa9897d91dc465f2c1907804fed9bfb7207b) )
405 
406 	ROM_REGION( 0x08000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT )	/* Layer 0 */
407 	ROM_LOAD( "rom09",       0x0000, 0x2000, CRC(77ea3e39) SHA1(c897664bd4f4b163a557d39d12374dae08a0a0c2) )
408 	ROM_LOAD( "rom08",       0x2000, 0x2000, CRC(1b7585dd) SHA1(e402c879c5651bf0fa21dcf1ff3c4b7bf690cbaa) )
409 	ROM_LOAD( "rom07",       0x4000, 0x2000, CRC(e3ec9825) SHA1(ea266683a48e8515d40ed077fd55d15a1859c942) )
410 	ROM_LOAD( "rom06",       0x6000, 0x2000, CRC(d29fab5f) SHA1(de5f8d57d3dd9090e6c056ff7f1ab0bb59630863) )
411 
412 	ROM_REGION( 0x01000, REGION_GFX3, ROMREGION_DISPOSE )	/* Layer 1 */
413 	ROM_LOAD( "rom15",       0x0000, 0x1000, CRC(8b5464d6) SHA1(e65acd280c0d9776cb80073241cf260b76ff0ca6) )
414 
415 	ROM_REGION( 0x0a20, REGION_PROMS, 0 )
416 	ROM_LOAD( "prom6.bpr",   0x0000, 0x0100, CRC(b117d22c) SHA1(357efed6597757907077a7e5130bfa643d5dd197) )	/* palette red? */
417 	ROM_LOAD( "prom7.bpr",   0x0100, 0x0100, CRC(9b6b4f56) SHA1(7fd726a20fce40b8ba4b8ef05fb51a85ad9fd282) )	/* palette green? */
418 	ROM_LOAD( "prom8.bpr",   0x0200, 0x0100, CRC(67cb68ae) SHA1(9b54c7e51d8db0d8699723173709f04dd2fdfa77) )	/* palette blue? */
419 	ROM_LOAD( "prom9.bpr",   0x0300, 0x0100, CRC(dd015b80) SHA1(ce45577204cfbbe623121c1bd99a190464ae7895) )	/* char lookup table msb? */
420 	ROM_LOAD( "prom10.bpr",  0x0400, 0x0100, CRC(71b768c7) SHA1(3d8c106758d279daf8e989d4c1bb72de3419d2d6) )	/* char lookup table lsb? */
421 	ROM_LOAD( "prom4.bpr",   0x0500, 0x0100, CRC(06523b81) SHA1(0042c364fd2fabd6b04cb2d59a71a7e6deb90ab3) )	/* unknown */
422 	ROM_LOAD( "prom5.bpr",   0x0600, 0x0100, CRC(75ea8f70) SHA1(1a2c478e7b87fa7f8725a3d1ff06c5c9422dd524) )	/* unknown */
423 	ROM_LOAD( "prom11.bpr",  0x0700, 0x0100, CRC(ba42a582) SHA1(2e8f3dab82a34078b866e9875978e83fef045f86) )	/* unknown */
424 	ROM_LOAD( "prom12.bpr",  0x0800, 0x0100, CRC(f2540c51) SHA1(126f698eb65e54fa16a1abfa5b40b0161cb66254) )	/* unknown */
425 	ROM_LOAD( "prom13.bpr",  0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) )	/* unknown */
426 	ROM_LOAD( "prom1.bpr",   0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) )	/* timing? (on the cpu board) */
427 
428 	ROM_REGION( 0x2000, REGION_SOUND1, 0 )	/* samples */
429 	ROM_LOAD( "rom05",       0x0000, 0x2000, CRC(21544cd6) SHA1(b9644ab3c4393cd2669d2b5b3c80d7a9f1c91ca6) )
430 
431 	ROM_REGION( 0x0200, REGION_SOUND2, 0 )	/* 4bit->8bit sample expansion PROMs */
432 	ROM_LOAD( "prom3.bpr",   0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) )	/* low 4 bits */
433 	ROM_LOAD( "prom2.bpr",   0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) )	/* high 4 bits */
434 ROM_END
435 
436 ROM_START( clshroad )
437 	ROM_REGION( 0x10000, REGION_CPU1, 0 )		/* Main Z80 Code */
438 	ROM_LOAD( "clashr3.bin", 0x0000, 0x8000, CRC(865c32ae) SHA1(e5cdd2d624fe6dc8bd6bebf2bd1c79d287408c63) )
439 
440 	ROM_REGION( 0x10000, REGION_CPU2, 0 )		/* Sound Z80 Code */
441 	ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) )
442 
443 	ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT )	/* Sprites */
444 	ROM_LOAD( "clashr5.bin", 0x0000, 0x4000, CRC(094858b8) SHA1(a19f79cb665bbb1e25a94e9dd09a9e99f553afe8) )
445 	ROM_LOAD( "clashr6.bin", 0x4000, 0x4000, CRC(daa1daf3) SHA1(cc24c97c9950adc0041f68832774e40c87d1d4b2) )
446 
447 	ROM_REGION( 0x08000, REGION_GFX2, ROMREGION_DISPOSE | ROMREGION_INVERT )	/* Layer 0 */
448 	ROM_LOAD( "clashr8.bin", 0x0000, 0x4000, CRC(cbb66719) SHA1(2497575f84a956bc2b9e4c3f2c71ae42d036355e) )
449 	ROM_LOAD( "clashr9.bin", 0x4000, 0x4000, CRC(c15e8eed) SHA1(3b1e7fa014d176a01d5f9214051b0c8cc5556684) )
450 
451 	ROM_REGION( 0x04000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_INVERT)	/* Layer 1 */
452 	ROM_LOAD( "clashr4.bin", 0x0000, 0x2000, CRC(664201d9) SHA1(4eb85306f0c9683d0e0cf787f6389df8fe4a3d9d) )
453 	ROM_LOAD( "clashr7.bin", 0x2000, 0x2000, CRC(97973030) SHA1(cca7a9d2751add7f6dd9bac83f7f63ece8021dbc) )
454 
455 	ROM_REGION( 0x0b40, REGION_PROMS, 0 )
456 	ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) )	/* r */
457 	ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) )	/* g */
458 	ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) )	/* b */
459 	/* all other proms that firebatl has are missing */
460 	ROM_LOAD( "clashrd.a2",  0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) )	/* unknown */
461 	ROM_LOAD( "clashrd.g4",  0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) )	/* timing? */
462 	ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) )	/* unknown (possibly bad dump) */
463 	ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) )	/* unknown (possibly bad dump) */
464 
465 	ROM_REGION( 0x2000, REGION_SOUND1, 0 )	/* samples */
466 	ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) )
467 
468 	ROM_REGION( 0x0200, REGION_SOUND2, 0 )	/* 4bit->8bit sample expansion PROMs */
469 	ROM_LOAD( "clashrd.g8",  0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) )	/* low 4 bits */
470 	ROM_LOAD( "clashrd.g7",  0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) )	/* high 4 bits */
471 ROM_END
472 
473 static DRIVER_INIT ( firebatl )
474 {
475 /*
476 Pugsy> firebatl:0:05C6:C3:100:Fix the Game:It's a hack but seems to make it work!
477 Pugsy> firebatl:0:05C7:8D:600:Fix the Game (2/3)
478 Pugsy> firebatl:0:05C8:23:600:Fix the Game (3/3)
479 
480 without this the death sequence never ends so the game is unplayable after you
481 die once, it would be nice to avoid the hack however
482 
483 */
484 	data8_t *ROM = memory_region(REGION_CPU1);
485 
486 	ROM[0x05C6] = 0xc3;
487 	ROM[0x05C7] = 0x8d;
488 	ROM[0x05C8] = 0x23;
489 }
490 
491 GAMEX( 1984, firebatl, 0, firebatl, firebatl, firebatl, ROT90, "Taito", "Fire Battle", GAME_IMPERFECT_GRAPHICS )
492 GAME ( 1986, clshroad, 0, clshroad, clshroad, 0, ROT0,  "Woodplace Inc.", "Clash-Road" )
493