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