1 /*******************************************************************************
2 
3 	Shoot Out (USA) 			(c) 1985 Data East USA		DE-0219
4 	Shoot Out (Japan)			(c) 1985 Data East USA		DE-0203
5 	Shoot Out (Korean bootleg)	(c) 1985 Data East USA		DE-0203 bootleg
6 
7 	Shoot Out (Japan) is an interesting board, it runs on an earlier PCB design
8 	than the USA version, has no sound CPU, uses half as many sprites and
9 	unusually for a Deco Japanese game it is credited to 'Data East USA'.
10 	Perhaps the USA arm of Deco designed this game rather than the Japanese
11 	arm?
12 
13 	Shoot Out (Japan) uses the YM2203 ports for CPU bankswitching so it does
14 	not work with sound turned off.
15 
16 	Shoot Out (Korean bootleg) is based on the earlier DE-0203 board but
17 	strangely features the same encryption as used on the DE-0219 board.  It
18 	also has some edited graphics.
19 
20 	Driver by:
21 		Ernesto Corvi (ernesto@imagina.com)
22 		Phil Stroffolino
23 		Shoot Out (Japan) and fixes added by Bryan McPhail (mish@tendril.co.uk)
24 
25 	TODO:
26 
27 	- Fix coin counter
28 	- Lots of unmapped memory reads
29 
30 *******************************************************************************/
31 
32 /*
33 
34 	2003-06-01	Added cocktail support to shootout
35 	2003-10-08	Added cocktail support to shootouj/shootoub
36 	2003-10-21	Removed input port hack
37 
38 */
39 
40 #include "driver.h"
41 #include "vidhrdw/generic.h"
42 #include "cpu/m6502/m6502.h"
43 
44 UINT8 *shootout_textram;
45 
46 extern WRITE_HANDLER( shootout_videoram_w );
47 extern WRITE_HANDLER( shootout_textram_w );
48 
49 extern PALETTE_INIT( shootout );
50 extern VIDEO_START( shootout );
51 extern VIDEO_UPDATE( shootout );
52 extern VIDEO_UPDATE( shootouj );
53 
54 /*******************************************************************************/
55 
WRITE_HANDLER(shootout_bankswitch_w)56 static WRITE_HANDLER( shootout_bankswitch_w )
57 {
58 	int bankaddress;
59 	UINT8 *RAM;
60 
61 	RAM = memory_region(REGION_CPU1);
62 	bankaddress = 0x10000 + ( 0x4000 * (data & 0x0f) );
63 
64 	cpu_setbank(1,&RAM[bankaddress]);
65 }
66 
WRITE_HANDLER(sound_cpu_command_w)67 static WRITE_HANDLER( sound_cpu_command_w )
68 {
69 	soundlatch_w( offset, data );
70 	cpu_set_irq_line( 1, IRQ_LINE_NMI, PULSE_LINE );
71 }
72 
WRITE_HANDLER(shootout_flipscreen_w)73 static WRITE_HANDLER( shootout_flipscreen_w )
74 {
75 	flip_screen_set(~data & 0x01);
76 }
77 
WRITE_HANDLER(shootout_coin_counter_w)78 static WRITE_HANDLER( shootout_coin_counter_w )
79 {
80 	coin_counter_w(0, data);
81 }
82 
83 /*******************************************************************************/
84 
MEMORY_READ_START(readmem)85 static MEMORY_READ_START( readmem )
86 	{ 0x0000, 0x0fff, MRA_RAM },
87 	{ 0x1000, 0x1000, input_port_0_r },
88 	{ 0x1001, 0x1001, input_port_1_r },
89 	{ 0x1002, 0x1002, input_port_2_r },
90 	{ 0x1003, 0x1003, input_port_3_r },
91 	{ 0x2000, 0x27ff, MRA_RAM },	/* foreground */
92 	{ 0x2800, 0x2fff, MRA_RAM },	/* background */
93 	{ 0x4000, 0x7fff, MRA_BANK1 },
94 	{ 0x8000, 0xffff, MRA_ROM },
95 MEMORY_END
96 
97 static MEMORY_WRITE_START( writemem )
98 	{ 0x0000, 0x0fff, MWA_RAM },
99 	{ 0x1000, 0x1000, shootout_bankswitch_w },
100 	{ 0x1001, 0x1001, shootout_flipscreen_w },
101 	{ 0x1002, 0x1002, shootout_coin_counter_w },
102 	{ 0x1003, 0x1003, sound_cpu_command_w },
103 	{ 0x1004, 0x17ff, MWA_RAM },
104 	{ 0x1800, 0x19ff, MWA_RAM, &spriteram, &spriteram_size },
105 	{ 0x2000, 0x27ff, shootout_textram_w, &shootout_textram },
106 	{ 0x2800, 0x2fff, shootout_videoram_w, &videoram },
107 	{ 0x4000, 0xffff, MWA_ROM },
108 MEMORY_END
109 
110 static MEMORY_READ_START( readmem_alt )
111 	{ 0x0000, 0x0fff, MRA_RAM },
112 	{ 0x1000, 0x1000, input_port_0_r },
113 	{ 0x1001, 0x1001, input_port_1_r },
114 	{ 0x1002, 0x1002, input_port_2_r },
115 	{ 0x1003, 0x1003, input_port_3_r },
116 	{ 0x2000, 0x21ff, MRA_RAM },
117 	{ 0x2800, 0x2800, YM2203_status_port_0_r },
118 	{ 0x3000, 0x37ff, MRA_RAM },	/* foreground */
119 	{ 0x3800, 0x3fff, MRA_RAM },	/* background */
120 	{ 0x4000, 0x7fff, MRA_BANK1 },
121 	{ 0x8000, 0xffff, MRA_ROM },
122 MEMORY_END
123 
124 static MEMORY_WRITE_START( writemem_alt )
125 	{ 0x0000, 0x0fff, MWA_RAM },
126 	{ 0x1800, 0x1800, shootout_coin_counter_w },
127 	{ 0x2000, 0x21ff, MWA_RAM, &spriteram, &spriteram_size },
128 	{ 0x2800, 0x2800, YM2203_control_port_0_w },
129 	{ 0x2801, 0x2801, YM2203_write_port_0_w },
130 	{ 0x3000, 0x37ff, shootout_textram_w, &shootout_textram },
131 	{ 0x3800, 0x3fff, shootout_videoram_w, &videoram },
132 	{ 0x4000, 0xffff, MWA_ROM },
133 MEMORY_END
134 
135 /*******************************************************************************/
136 
137 static MEMORY_READ_START( sound_readmem )
138 	{ 0x0000, 0x07ff, MRA_RAM },
139 	{ 0x4000, 0x4000, YM2203_status_port_0_r },
140 	{ 0xa000, 0xa000, soundlatch_r },
141 	{ 0xc000, 0xffff, MRA_ROM },
142 MEMORY_END
143 
144 static MEMORY_WRITE_START( sound_writemem )
145 	{ 0x0000, 0x07ff, MWA_RAM },
146 	{ 0x4000, 0x4000, YM2203_control_port_0_w },
147 	{ 0x4001, 0x4001, YM2203_write_port_0_w },
148 	{ 0xd000, 0xd000, interrupt_enable_w },
149 	{ 0xc000, 0xffff, MWA_ROM },
150 MEMORY_END
151 
152 /*******************************************************************************/
153 
154 INPUT_PORTS_START( shootout )
155 	PORT_START	/* DSW1 */
156 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
157 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
158 	PORT_DIPSETTING(	0x03, DEF_STR( 1C_1C ) )
159 	PORT_DIPSETTING(	0x02, DEF_STR( 1C_2C ) )
160 	PORT_DIPSETTING(	0x01, DEF_STR( 1C_3C ) )
161 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
162 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
163 	PORT_DIPSETTING(	0x0c, DEF_STR( 1C_1C ) )
164 	PORT_DIPSETTING(	0x08, DEF_STR( 1C_2C ) )
165 	PORT_DIPSETTING(	0x04, DEF_STR( 1C_3C ) )
166 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
167 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
168 	PORT_DIPSETTING(	0x00, DEF_STR( Off ) )
169 	PORT_DIPSETTING(	0x20, DEF_STR( On ) )
170 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
171 	PORT_DIPSETTING(	0x00, DEF_STR( Upright ) )
172 	PORT_DIPSETTING(	0x40, DEF_STR( Cocktail ) )
173 	PORT_DIPNAME( 0x80, 0x80, "Freeze" )
174 	PORT_DIPSETTING(	0x80, DEF_STR( Off ) )
175 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
176 
177 	PORT_START
178 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
179 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
180 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
181 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
182 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
183 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
184 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
185 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
186 
187 	PORT_START
188 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
189 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
190 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
191 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
192 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
193 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
194 	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )
195 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
196 
197 	PORT_START	/* DSW2 */
198 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
199 	PORT_DIPSETTING(	0x01, "1" )
200 	PORT_DIPSETTING(	0x03, "3" )
201 	PORT_DIPSETTING(	0x02, "5" )
202 	PORT_DIPSETTING(	0x00, "Infinite" )
203 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
204 	PORT_DIPSETTING(	0x0c, "20K 70K" )
205 	PORT_DIPSETTING(	0x08, "30K 80K" )
206 	PORT_DIPSETTING(	0x04, "40K 90K" )
207 	PORT_DIPSETTING(	0x00, "70K" )
208 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
209 	PORT_DIPSETTING(	0x30, "Easy" )
210 	PORT_DIPSETTING(	0x20, "Normal" )
211 	PORT_DIPSETTING(	0x10, "Hard" )
212 	PORT_DIPSETTING(	0x00, "Very Hard" )
213 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) /* this is set when either coin is inserted */
214 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
215 INPUT_PORTS_END
216 
217 
218 static struct GfxLayout char_layout =
219 {
220 	8,8,	/* 8*8 characters */
221 	0x400,	/* 1024 characters */
222 	2,	/* 2 bits per pixel */
223 	{ 0,4 },	/* the bitplanes are packed in the same byte */
224 	{ (0x2000*8)+0, (0x2000*8)+1, (0x2000*8)+2, (0x2000*8)+3, 0, 1, 2, 3 },
225 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
226 	8*8 /* every char takes 8 consecutive bytes */
227 };
228 static struct GfxLayout sprite_layout =
229 {
230 	16,16,	/* 16*16 sprites */
231 	0x800,	/* 2048 sprites */
232 	3,	/* 3 bits per pixel */
233 	{ 0*0x10000*8, 1*0x10000*8, 2*0x10000*8 },	/* the bitplanes are separated */
234 	{ 128+0, 128+1, 128+2, 128+3, 128+4, 128+5, 128+6, 128+7, 0, 1, 2, 3, 4, 5, 6, 7 },
235 	{ 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 },
236 	32*8	/* every char takes 32 consecutive bytes */
237 };
238 static struct GfxLayout tile_layout =
239 {
240 	8,8,	/* 8*8 characters */
241 	0x800,	/* 2048 characters */
242 	2,	/* 2 bits per pixel */
243 	{ 0,4 },	/* the bitplanes are packed in the same byte */
244 	{ (0x4000*8)+0, (0x4000*8)+1, (0x4000*8)+2, (0x4000*8)+3, 0, 1, 2, 3 },
245 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
246 	8*8 /* every char takes 8 consecutive bytes */
247 };
248 
249 static struct GfxDecodeInfo gfxdecodeinfo[] =
250 {
251 	{ REGION_GFX1, 0, &char_layout,   16*4+8*8, 16 }, /* characters */
252 	{ REGION_GFX2, 0, &sprite_layout, 16*4, 	 8 }, /* sprites */
253 	{ REGION_GFX3, 0, &tile_layout,   0,		16 }, /* tiles */
254 	{ -1 } /* end of array */
255 };
256 
shootout_snd_irq(int linestate)257 static void shootout_snd_irq(int linestate)
258 {
259 	cpu_set_irq_line(1,0,linestate);
260 }
261 
shootout_snd2_irq(int linestate)262 static void shootout_snd2_irq(int linestate)
263 {
264 	cpu_set_irq_line(0,0,linestate);
265 }
266 
267 static struct YM2203interface ym2203_interface =
268 {
269 	1,	/* 1 chip */
270 	1500000,	/* 1.5 MHz */
271 	{ YM2203_VOL(50,50) },
272 	{ 0 },
273 	{ 0 },
274 	{ 0 },
275 	{ 0 },
276 	{ shootout_snd_irq },
277 };
278 
279 static struct YM2203interface ym2203_interface2 =
280 {
281 	1,	/* 1 chip */
282 	1500000,	/* 1.5 MHz */
283 	{ YM2203_VOL(50,50) },
284 	{ 0 },
285 	{ 0 },
286 	{ shootout_bankswitch_w },
287 	{ shootout_flipscreen_w },
288 	{ shootout_snd2_irq },
289 };
290 
INTERRUPT_GEN(shootout_interrupt)291 static INTERRUPT_GEN( shootout_interrupt )
292 {
293 	static int coin = 0;
294 
295 	if ( readinputport( 2 ) & 0xc0 ) {
296 		if ( coin == 0 ) {
297 			coin = 1;
298 			nmi_line_pulse();
299 		}
300 	} else
301 		coin = 0;
302 }
303 
304 static MACHINE_DRIVER_START( shootout )
305 
306 	/* basic machine hardware */
307 	MDRV_CPU_ADD(M6502, 2000000)	/* 2 MHz? */
MDRV_CPU_MEMORY(readmem,writemem)308 	MDRV_CPU_MEMORY(readmem,writemem)
309 	MDRV_CPU_VBLANK_INT(shootout_interrupt,1) /* nmi's are triggered at coin up */
310 
311 	MDRV_CPU_ADD(M6502, 1500000)
312 	MDRV_CPU_FLAGS(CPU_AUDIO_CPU)
313 	MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
314 
315 	MDRV_FRAMES_PER_SECOND(60)
316 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
317 
318 	/* video hardware */
319 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
320 	MDRV_SCREEN_SIZE(32*8, 32*8)
321 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
322 	MDRV_GFXDECODE(gfxdecodeinfo)
323 	MDRV_PALETTE_LENGTH(256)
324 
325 	MDRV_PALETTE_INIT(shootout)
326 	MDRV_VIDEO_START(shootout)
327 	MDRV_VIDEO_UPDATE(shootout)
328 
329 	/* sound hardware */
330 	MDRV_SOUND_ADD(YM2203, ym2203_interface)
331 MACHINE_DRIVER_END
332 
333 
334 static MACHINE_DRIVER_START( shootouj )
335 
336 	/* basic machine hardware */
337 	MDRV_CPU_ADD(M6502, 2000000)	/* 2 MHz? */
338 	MDRV_CPU_MEMORY(readmem_alt,writemem_alt)
339 	MDRV_CPU_VBLANK_INT(shootout_interrupt,1) /* nmi's are triggered at coin up */
340 
341 	MDRV_FRAMES_PER_SECOND(60)
342 	MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
343 
344 	/* video hardware */
345 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
346 	MDRV_SCREEN_SIZE(32*8, 32*8)
347 	MDRV_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
348 	MDRV_GFXDECODE(gfxdecodeinfo)
349 	MDRV_PALETTE_LENGTH(256)
350 
351 	MDRV_PALETTE_INIT(shootout)
352 	MDRV_VIDEO_START(shootout)
353 	MDRV_VIDEO_UPDATE(shootouj)
354 
355 	/* sound hardware */
356 	MDRV_SOUND_ADD(YM2203, ym2203_interface2)
357 MACHINE_DRIVER_END
358 
359 
360 ROM_START( shootout )
361 	ROM_REGION( 2*0x20000, REGION_CPU1, 0 )	/* 128k for code + 128k for decrypted opcodes */
362 	ROM_LOAD( "cu00.b1",        0x08000, 0x8000, CRC(090edeb6) SHA1(ab849d123dacf3947b1ebd29b70a20e066911a60) ) /* opcodes encrypted */
363 	/* banked at 0x4000-0x8000 */
364 	ROM_LOAD( "cu02.c3",        0x10000, 0x8000, CRC(2a913730) SHA1(584488278d58c4d34a2eebeaf39518f87cf5eecd) ) /* opcodes encrypted */
365 	ROM_LOAD( "cu01.c1",        0x18000, 0x4000, CRC(8843c3ae) SHA1(c58ed4acac566f890cadf62bcbcced07a59243fc) ) /* opcodes encrypted */
366 
367 	ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for code */
368 	ROM_LOAD( "cu09.j1",        0x0c000, 0x4000, CRC(c4cbd558) SHA1(0e940ae99febc1161e5f35550aa75afca88cb5e9) ) /* Sound CPU */
369 
370 	ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
371 	ROM_LOAD( "cu11.h19",       0x00000, 0x4000, CRC(eff00460) SHA1(15daaa3d3125a981a26f31d43283faa5be26e96b) ) /* foreground characters */
372 
373 	ROM_REGION( 0x30000, REGION_GFX2, ROMREGION_DISPOSE )
374 	ROM_LOAD( "cu04.c7",        0x00000, 0x8000, CRC(ceea6b20) SHA1(9fe363668db2e2759b3c531b4d7f23c65f2e8035) )   /* sprites */
375 	ROM_LOAD( "cu03.c5",        0x08000, 0x8000, CRC(b786bb3e) SHA1(5a209f01914ca4b206138d738a34640e0bcb3185) )
376 	ROM_LOAD( "cu06.c10",       0x10000, 0x8000, CRC(2ec1d17f) SHA1(74f0579a5ab3daf5d1290d3c15459f0f9b67bf79) )
377 	ROM_LOAD( "cu05.c9",        0x18000, 0x8000, CRC(dd038b85) SHA1(b1c3c1ab17c36a1c77726b5e485fc01581a4d97d) )
378 	ROM_LOAD( "cu08.c13",       0x20000, 0x8000, CRC(91290933) SHA1(60487f4eaf2e6c50b24c0f8fbd7abf92c04a342a) )
379 	ROM_LOAD( "cu07.c12",       0x28000, 0x8000, CRC(19b6b94f) SHA1(292264811206916af41d133f81dfd93c44f59a96) )
380 
381 	ROM_REGION( 0x08000, REGION_GFX3, ROMREGION_DISPOSE )
382 	ROM_LOAD( "cu10.h17",       0x00000, 0x2000, CRC(3854c877) SHA1(2c8fe4591553ce798c907849e3dbd410e4fe424c) ) /* background tiles */
383 	ROM_CONTINUE(				0x04000, 0x2000 )
384 	ROM_CONTINUE(				0x02000, 0x2000 )
385 	ROM_CONTINUE(				0x06000, 0x2000 )
386 
387 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
388 	ROM_LOAD( "gb08.k10",       0x0000, 0x0100, CRC(509c65b6) SHA1(4cec37065a799ced4e7b6552f267aacc7f54ffe3) )
389 	ROM_LOAD( "gb09.k6",        0x0100, 0x0100, CRC(aa090565) SHA1(e289e77ec3402e86d93b873c0fa064f3e6277a62) )	/* priority encoder? (not used) */
390 ROM_END
391 
392 ROM_START( shootouj )
393 	ROM_REGION( 0x20000, REGION_CPU1, 0 )	/* 128k for code  */
394 	ROM_LOAD( "cg02.bin",    0x08000, 0x8000, CRC(8fc5d632) SHA1(809ac4eba09972229fe741c96fa8036d7139b6a8) )
395 	ROM_LOAD( "cg00.bin",    0x10000, 0x8000, CRC(ef6ced1e) SHA1(feea508c7a60fc6cde1efee52cba628accd26028) )
396 	ROM_LOAD( "cg01.bin",    0x18000, 0x4000, CRC(74cf11ca) SHA1(59edbc4633cd560e7b928b33e4c42d0125332a1b) )
397 
398 	ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
399 	ROM_LOAD( "cu11.h19",       0x00000, 0x4000, CRC(eff00460) SHA1(15daaa3d3125a981a26f31d43283faa5be26e96b) ) /* foreground characters */
400 
401 	ROM_REGION( 0x30000, REGION_GFX2, ROMREGION_DISPOSE )
402 	ROM_LOAD( "cg03.bin",    0x00000, 0x8000, CRC(5252ec19) SHA1(c6848a815badd8845f91e898b0a52b7f12ed8a39) )  /* sprites */
403 	ROM_LOAD( "cg04.bin",    0x10000, 0x8000, CRC(db06cfe9) SHA1(e13c16232f54fe8467c21e0218c87606a19dd25c) )
404 	ROM_LOAD( "cg05.bin",    0x20000, 0x8000, CRC(d634d6b8) SHA1(e2ddd12b1b3fb0063104d414f0574b94dbfa0403) )
405 
406 	ROM_REGION( 0x08000, REGION_GFX3, ROMREGION_DISPOSE )
407 	ROM_LOAD( "cu10.h17",       0x00000, 0x2000, CRC(3854c877) SHA1(2c8fe4591553ce798c907849e3dbd410e4fe424c) ) /* background tiles */
408 	ROM_CONTINUE(				0x04000, 0x2000 )
409 	ROM_CONTINUE(				0x02000, 0x2000 )
410 	ROM_CONTINUE(				0x06000, 0x2000 )
411 
412 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
413 	ROM_LOAD( "gb08.k10",       0x0000, 0x0100, CRC(509c65b6) SHA1(4cec37065a799ced4e7b6552f267aacc7f54ffe3) )
414 	ROM_LOAD( "gb09.k6",        0x0100, 0x0100, CRC(aa090565) SHA1(e289e77ec3402e86d93b873c0fa064f3e6277a62) )	/* priority encoder? (not used) */
415 ROM_END
416 
417 ROM_START( shootoub )
418 	ROM_REGION( 2*0x20000, REGION_CPU1, 0 )	/* 128k for code + 128k for decrypted opcodes */
419 	ROM_LOAD( "shootout.006", 0x08000, 0x8000, CRC(2c054888) SHA1(cb0de2f7d743506789626304e6bcbbc292fbe8bc) )
420 	ROM_LOAD( "shootout.008", 0x10000, 0x8000, CRC(9651b656) SHA1(e90eddf2833ef36fa73b7b8d81d28443d2f60220) )
421 	ROM_LOAD( "cg01.bin",     0x18000, 0x4000, CRC(74cf11ca) SHA1(59edbc4633cd560e7b928b33e4c42d0125332a1b) )
422 
423 	ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE )
424 	ROM_LOAD( "cu11.h19",       0x00000, 0x4000, CRC(eff00460) SHA1(15daaa3d3125a981a26f31d43283faa5be26e96b) ) /* foreground characters */
425 
426 	ROM_REGION( 0x30000, REGION_GFX2, ROMREGION_DISPOSE )
427 	ROM_LOAD( "shootout.005",   0x00000, 0x8000, CRC(e6357ba3) SHA1(1ceb46450a0c4f6f7f7109601ad6617f08364df5) )   /* sprites */
428 	ROM_LOAD( "shootout.004",   0x10000, 0x8000, CRC(7f422c93) SHA1(97d9a17956e838801c416461b020876c780bf260) )
429 	ROM_LOAD( "shootout.003",   0x20000, 0x8000, CRC(eea94535) SHA1(65819b7925ecd9ae6e62decb3b0164f627b73fe5) )
430 
431 	ROM_REGION( 0x08000, REGION_GFX3, ROMREGION_DISPOSE )
432 	ROM_LOAD( "cu10.h17",       0x00000, 0x2000, CRC(3854c877) SHA1(2c8fe4591553ce798c907849e3dbd410e4fe424c) ) /* background tiles */
433 	ROM_CONTINUE(				0x04000, 0x2000 )
434 	ROM_CONTINUE(				0x02000, 0x2000 )
435 	ROM_CONTINUE(				0x06000, 0x2000 )
436 
437 	ROM_REGION( 0x0220, REGION_PROMS, 0 )
438 	ROM_LOAD( "gb08.k10",       0x0000, 0x0100, CRC(509c65b6) SHA1(4cec37065a799ced4e7b6552f267aacc7f54ffe3) )
439 	ROM_LOAD( "gb09.k6",        0x0100, 0x0100, CRC(aa090565) SHA1(e289e77ec3402e86d93b873c0fa064f3e6277a62) )	/* priority encoder? (not used) */
440 	ROM_LOAD( "shootclr.003",   0x0200, 0x0020, CRC(6b0c2942) SHA1(7d25acc753923b265792fc78f8fc70175c0e0ec2) )	/* opcode decrypt table (bootleg only) */
441 ROM_END
442 
443 
444 static DRIVER_INIT( shootout )
445 {
446 	UINT8 *rom = memory_region(REGION_CPU1);
447 	int diff = memory_region_length(REGION_CPU1) / 2;
448 	int A;
449 
450 	memory_set_opcode_base(0,rom+diff);
451 
452 	for (A = 0;A < diff;A++)
453 		rom[A+diff] = (rom[A] & 0x9f) | ((rom[A] & 0x40) >> 1) | ((rom[A] & 0x20) << 1);
454 }
455 
456 
457 /* ROT180 confirmed by Kold */
458 GAME( 1985, shootout, 0,        shootout, shootout, shootout, ROT180, "Data East USA", "Shoot Out (US)")
459 GAME( 1985, shootouj, shootout, shootouj, shootout, 0,        ROT180, "Data East USA", "Shoot Out (Japan)" )
460 GAME( 1985, shootoub, shootout, shootouj, shootout, shootout, ROT180, "bootleg",       "Shoot Out (Korean Bootleg)" )
461