1 /********************************************************************
2
3 Bionic Commando
4
5
6
7 ToDo:
8 - finish video driver
9 Some attributes are unknown. I don't remember the original game but
10 seems there are some problems:
11 - misplaced sprites ? ( see beginning of level 1 or 2 for example )
12 - sprite / sprite priority ? ( see level 2 the reflectors )
13 - sprite / background priority ? ( see level 1: birds walk through
14 branches of different trees )
15 - see the beginning of level 3: is the background screwed ?
16
17 - get rid of input port hack
18
19 Controls appear to be mapped at 0xFE4000, alongside dip switches, but there
20 is something strange going on that I can't (yet) figure out.
21 Player controls and coin inputs are supposed to magically appear at
22 0xFFFFFB (coin/start)
23 0xFFFFFD (player 2)
24 0xFFFFFF (player 1)
25 This is probably done by an MPU on the board (whose ROM is not
26 available).
27
28 The MPU also takes care of the commands for the sound CPU, which are stored
29 at FFFFF9.
30
31 IRQ4 seems to be control related.
32 On each interrupt, it reads 0xFE4000 (coin/start), shift the bits around
33 and move the resulting byte into a dword RAM location. The dword RAM location
34 is rotated by 8 bits each time this happens.
35 This is probably done to be pedantic about coin insertions (might be protection
36 related). In fact, currently coin insertions are not consistently recognized.
37
38 ********************************************************************/
39
40 #include "driver.h"
41 #include "vidhrdw/generic.h"
42
43
44 WRITE16_HANDLER( bionicc_fgvideoram_w );
45 WRITE16_HANDLER( bionicc_bgvideoram_w );
46 WRITE16_HANDLER( bionicc_txvideoram_w );
47 WRITE16_HANDLER( bionicc_paletteram_w );
48 WRITE16_HANDLER( bionicc_scroll_w );
49 WRITE16_HANDLER( bionicc_gfxctrl_w );
50
51 extern data16_t *bionicc_bgvideoram;
52 extern data16_t *bionicc_fgvideoram;
53 extern data16_t *bionicc_txvideoram;
54
55 VIDEO_START( bionicc );
56 VIDEO_UPDATE( bionicc );
57 VIDEO_EOF( bionicc );
58
59 void bionicc_readinputs(void);
60 void bionicc_sound_cmd(int data);
61
62
63
64 static data16_t bionicc_inp[3];
65
WRITE16_HANDLER(hacked_controls_w)66 WRITE16_HANDLER( hacked_controls_w )
67 {
68 log_cb(RETRO_LOG_DEBUG, LOGPRE "%06x: hacked_controls_w %04x %02x\n",activecpu_get_pc(),offset,data);
69 COMBINE_DATA(&bionicc_inp[offset]);
70 }
71
READ16_HANDLER(hacked_controls_r)72 static READ16_HANDLER( hacked_controls_r )
73 {
74 log_cb(RETRO_LOG_DEBUG, LOGPRE "%06x: hacked_controls_r %04x %04x\n",activecpu_get_pc(),offset,bionicc_inp[offset]);
75 return bionicc_inp[offset];
76 }
77
WRITE16_HANDLER(bionicc_mpu_trigger_w)78 static WRITE16_HANDLER( bionicc_mpu_trigger_w )
79 {
80 data = readinputport(0) >> 12;
81 bionicc_inp[0] = data ^ 0x0f;
82
83 data = readinputport(3); /* player 2 controls */
84 bionicc_inp[1] = data ^ 0xff;
85
86 data = readinputport(2); /* player 1 controls */
87 bionicc_inp[2] = data ^ 0xff;
88 }
89
90
91 static data16_t soundcommand;
92
WRITE16_HANDLER(hacked_soundcommand_w)93 WRITE16_HANDLER( hacked_soundcommand_w )
94 {
95 COMBINE_DATA(&soundcommand);
96 soundlatch_w(0,soundcommand & 0xff);
97 }
98
READ16_HANDLER(hacked_soundcommand_r)99 static READ16_HANDLER( hacked_soundcommand_r )
100 {
101 return soundcommand;
102 }
103
104
105 /********************************************************************
106
107 INTERRUPT
108
109 The game runs on 2 interrupts.
110
111 IRQ 2 drives the game
112 IRQ 4 processes the input ports
113
114 The game is very picky about timing. The following is the only
115 way I have found it to work.
116
117 ********************************************************************/
118
INTERRUPT_GEN(bionicc_interrupt)119 INTERRUPT_GEN( bionicc_interrupt )
120 {
121 if (cpu_getiloops() == 0)
122 cpu_set_irq_line(0, 2, HOLD_LINE);
123 else
124 cpu_set_irq_line(0, 4, HOLD_LINE);
125 }
126
MEMORY_READ16_START(readmem)127 static MEMORY_READ16_START( readmem )
128 { 0x000000, 0x03ffff, MRA16_ROM }, /* 68000 ROM */
129 { 0xfe0000, 0xfe07ff, MRA16_RAM }, /* RAM? */
130 { 0xfe0800, 0xfe0cff, MRA16_RAM }, /* sprites */
131 { 0xfe0d00, 0xfe3fff, MRA16_RAM }, /* RAM? */
132 { 0xfe4000, 0xfe4001, input_port_0_word_r },
133 { 0xfe4002, 0xfe4003, input_port_1_word_r },
134 { 0xfec000, 0xfecfff, MRA16_RAM },
135 { 0xff0000, 0xff3fff, MRA16_RAM },
136 { 0xff4000, 0xff7fff, MRA16_RAM },
137 { 0xff8000, 0xff87ff, MRA16_RAM },
138 { 0xffc000, 0xfffff7, MRA16_RAM }, /* working RAM */
139 { 0xfffff8, 0xfffff9, hacked_soundcommand_r }, /* hack */
140 { 0xfffffa, 0xffffff, hacked_controls_r }, /* hack */
141 MEMORY_END
142
143 static MEMORY_WRITE16_START( writemem )
144 { 0x000000, 0x03ffff, MWA16_ROM },
145 { 0xfe0000, 0xfe07ff, MWA16_RAM }, /* RAM? */
146 { 0xfe0800, 0xfe0cff, MWA16_RAM, &spriteram16, &spriteram_size },
147 { 0xfe0d00, 0xfe3fff, MWA16_RAM }, /* RAM? */
148 { 0xfe4000, 0xfe4001, bionicc_gfxctrl_w }, /* + coin counters */
149 { 0xfe8010, 0xfe8017, bionicc_scroll_w },
150 { 0xfe801a, 0xfe801b, bionicc_mpu_trigger_w }, /* ??? not sure, but looks like it */
151 { 0xfec000, 0xfecfff, bionicc_txvideoram_w, &bionicc_txvideoram },
152 { 0xff0000, 0xff3fff, bionicc_fgvideoram_w, &bionicc_fgvideoram },
153 { 0xff4000, 0xff7fff, bionicc_bgvideoram_w, &bionicc_bgvideoram },
154 { 0xff8000, 0xff87ff, bionicc_paletteram_w, &paletteram16 },
155 { 0xffc000, 0xfffff7, MWA16_RAM }, /* working RAM */
156 { 0xfffff8, 0xfffff9, hacked_soundcommand_w }, /* hack */
157 { 0xfffffa, 0xffffff, hacked_controls_w }, /* hack */
158 MEMORY_END
159
160
161 static MEMORY_READ_START( sound_readmem )
162 { 0x0000, 0x7fff, MRA_ROM },
163 { 0x8001, 0x8001, YM2151_status_port_0_r },
164 { 0xa000, 0xa000, soundlatch_r },
165 { 0xc000, 0xc7ff, MRA_RAM },
166 MEMORY_END
167
168 static MEMORY_WRITE_START( sound_writemem )
169 { 0x0000, 0x7fff, MWA_ROM },
170 { 0x8000, 0x8000, YM2151_register_port_0_w },
171 { 0x8001, 0x8001, YM2151_data_port_0_w },
172 { 0xc000, 0xc7ff, MWA_RAM },
173 MEMORY_END
174
175
176
177 INPUT_PORTS_START( bionicc )
178 PORT_START
179 PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNKNOWN )
180 PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_START2 )
181 PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_START1 )
182 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN2 )
183 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 )
184
185 PORT_START
186 PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) )
187 PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
188 PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) )
189 PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
190 PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
191 PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
192 PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
193 PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
194 PORT_DIPSETTING( 0x0003, DEF_STR( 1C_6C ) )
195 PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) )
196 PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
197 PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
198 PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
199 PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
200 PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
201 PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
202 PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) )
203 PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) )
204 PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
205 PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) )
206 PORT_DIPSETTING( 0x0080, DEF_STR( Off ))
207 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
208 PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) )
209 PORT_DIPSETTING( 0x0300, "3" )
210 PORT_DIPSETTING( 0x0200, "4" )
211 PORT_DIPSETTING( 0x0100, "5" )
212 PORT_DIPSETTING( 0x0000, "7" )
213 PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Cabinet ) )
214 PORT_DIPSETTING( 0x0400, DEF_STR( Upright ) )
215 PORT_DIPSETTING( 0x0000, DEF_STR( Cocktail ) )
216 PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Bonus_Life ) )
217 PORT_DIPSETTING( 0x1800, "20K, 40K, every 60K")
218 PORT_DIPSETTING( 0x1000, "30K, 50K, every 70K" )
219 PORT_DIPSETTING( 0x0800, "20K and 60K only")
220 PORT_DIPSETTING( 0x0000, "30K and 70K only" )
221 PORT_DIPNAME( 0x6000, 0x4000, DEF_STR( Difficulty ) )
222 PORT_DIPSETTING( 0x4000, "Easy" )
223 PORT_DIPSETTING( 0x6000, "Medium")
224 PORT_DIPSETTING( 0x2000, "Hard")
225 PORT_DIPSETTING( 0x0000, "Hardest" )
226 PORT_DIPNAME( 0x8000, 0x8000, "Freeze" )
227 PORT_DIPSETTING( 0x8000, DEF_STR( Off ))
228 PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
229
230 PORT_START
231 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
232 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
233 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
234 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
235 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
236 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
237 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
238 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
239
240 PORT_START
241 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
242 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
243 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
244 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
245 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
246 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
247 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
248 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
249 INPUT_PORTS_END
250
251
252
253 /********************************************************************
254
255 GRAPHICS
256
257 ********************************************************************/
258
259
260 static struct GfxLayout spritelayout_bionicc=
261 {
262 16,16, /* 16*16 sprites */
263 2048, /* 2048 sprites */
264 4, /* 4 bits per pixel */
265 { 0x30000*8,0x20000*8,0x10000*8,0 },
266 {
267 0,1,2,3,4,5,6,7,
268 (16*8)+0,(16*8)+1,(16*8)+2,(16*8)+3,
269 (16*8)+4,(16*8)+5,(16*8)+6,(16*8)+7
270 },
271 {
272 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
273 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8,
274 },
275 256 /* every sprite takes 256 consecutive bytes */
276 };
277
278 static struct GfxLayout vramlayout_bionicc=
279 {
280 8,8, /* 8*8 characters */
281 1024, /* 1024 character */
282 2, /* 2 bitplanes */
283 { 4,0 },
284 { 0,1,2,3,8,9,10,11 },
285 { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
286 128 /* every character takes 128 consecutive bytes */
287 };
288
289 static struct GfxLayout scroll2layout_bionicc=
290 {
291 8,8, /* 8*8 tiles */
292 2048, /* 2048 tiles */
293 4, /* 4 bits per pixel */
294 { (0x08000*8)+4,0x08000*8,4,0 },
295 { 0,1,2,3, 8,9,10,11 },
296 { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
297 128 /* every tile takes 128 consecutive bytes */
298 };
299
300 static struct GfxLayout scroll1layout_bionicc=
301 {
302 16,16, /* 16*16 tiles */
303 2048, /* 2048 tiles */
304 4, /* 4 bits per pixel */
305 { (0x020000*8)+4,0x020000*8,4,0 },
306 {
307 0,1,2,3, 8,9,10,11,
308 (8*4*8)+0,(8*4*8)+1,(8*4*8)+2,(8*4*8)+3,
309 (8*4*8)+8,(8*4*8)+9,(8*4*8)+10,(8*4*8)+11
310 },
311 {
312 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
313 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16
314 },
315 512 /* each tile takes 512 consecutive bytes */
316 };
317
318 static struct GfxDecodeInfo gfxdecodeinfo_bionicc[] =
319 {
320 { REGION_GFX1, 0, &vramlayout_bionicc, 768, 64 }, /* colors 768-1023 */
321 { REGION_GFX2, 0, &scroll2layout_bionicc, 0, 4 }, /* colors 0- 63 */
322 { REGION_GFX3, 0, &scroll1layout_bionicc, 256, 4 }, /* colors 256- 319 */
323 { REGION_GFX4, 0, &spritelayout_bionicc, 512, 16 }, /* colors 512- 767 */
324 { -1 }
325 };
326
327
328 static struct YM2151interface ym2151_interface =
329 {
330 1, /* 1 chip */
331 3579545, /* 3.579545 MHz ? */
332 { YM3012_VOL(60,MIXER_PAN_LEFT,60,MIXER_PAN_RIGHT) },
333 { 0 }
334 };
335
336
337 static MACHINE_DRIVER_START( bionicc )
338
339 /* basic machine hardware */
340 MDRV_CPU_ADD(M68000, 12000000) /* ?? MHz ? */
341 MDRV_CPU_MEMORY(readmem,writemem)
342 MDRV_CPU_VBLANK_INT(bionicc_interrupt,8)
343
344 MDRV_CPU_ADD(Z80, 3579545)
345 MDRV_CPU_FLAGS(CPU_AUDIO_CPU) /* 4 MHz ??? TODO: find real FRQ */
346 MDRV_CPU_MEMORY(sound_readmem,sound_writemem)
347 MDRV_CPU_VBLANK_INT(nmi_line_pulse,4) /* ??? */
348
349 MDRV_FRAMES_PER_SECOND(60)
350 MDRV_VBLANK_DURATION(DEFAULT_REAL_60HZ_VBLANK_DURATION)
351
352 /* video hardware */
353 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_NEEDS_6BITS_PER_GUN | VIDEO_BUFFERS_SPRITERAM)
354 MDRV_SCREEN_SIZE(32*8, 32*8)
355 MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
356 MDRV_GFXDECODE(gfxdecodeinfo_bionicc)
357 MDRV_PALETTE_LENGTH(1024)
358
359 MDRV_VIDEO_START(bionicc)
360 MDRV_VIDEO_EOF(bionicc)
361 MDRV_VIDEO_UPDATE(bionicc)
362
363 MDRV_SOUND_ADD(YM2151, ym2151_interface)
364 MACHINE_DRIVER_END
365
366
367
368 ROM_START( bionicc )
369 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 code */
370 ROM_LOAD16_BYTE( "tsu_02b.rom", 0x00000, 0x10000, CRC(cf965a0a) SHA1(ab88742a3225a0b82ee2dfef6ed0058d3e11c38c) ) /* 68000 code */
371 ROM_LOAD16_BYTE( "tsu_04b.rom", 0x00001, 0x10000, CRC(c9884bfb) SHA1(7d10cedff0a62847f8deb61a9611cc6661efb037) ) /* 68000 code */
372 ROM_LOAD16_BYTE( "tsu_03b.rom", 0x20000, 0x10000, CRC(4e157ae2) SHA1(cc02931376d22a7fcfc320e6fd4129e03a461a49) ) /* 68000 code */
373 ROM_LOAD16_BYTE( "tsu_05b.rom", 0x20001, 0x10000, CRC(e66ca0f9) SHA1(a503badf2fed38786d38c313d1dc315f3175d6de) ) /* 68000 code */
374
375 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
376 ROM_LOAD( "tsu_01b.rom", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) )
377
378 ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
379 ROM_LOAD( "tsu_08.rom", 0x00000, 0x8000, CRC(9bf0b7a2) SHA1(1361335c3c2c8a9c6a7d99566048d8aac99e7c8f) ) /* VIDEORAM (text layer) tiles */
380
381 ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE )
382 ROM_LOAD( "tsu_07.rom", 0x00000, 0x8000, CRC(9469efa4) SHA1(53c70361e8d9e54825f61b87a10df42438aaf5b0) ) /* SCROLL2 Layer Tiles */
383 ROM_LOAD( "tsu_06.rom", 0x08000, 0x8000, CRC(40bf0eb4) SHA1(fcb186c31747e2c9872de01e34b3e713dc74df82) )
384
385 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
386 ROM_LOAD( "ts_12.rom", 0x00000, 0x8000, CRC(e4b4619e) SHA1(3bec8399ffb28fd50ce6ae88d90b091eadf8bda1) ) /* SCROLL1 Layer Tiles */
387 ROM_LOAD( "ts_11.rom", 0x08000, 0x8000, CRC(ab30237a) SHA1(ea6c07df992ba48f9eca7daa4ea775faa94358d2) )
388 ROM_LOAD( "ts_17.rom", 0x10000, 0x8000, CRC(deb657e4) SHA1(b36b468f9bbb7a4937286230d3f6caa14c61d4dd) )
389 ROM_LOAD( "ts_16.rom", 0x18000, 0x8000, CRC(d363b5f9) SHA1(1dd3991d99db2d6bcbdb12879ba50a01fef95004) )
390 ROM_LOAD( "ts_13.rom", 0x20000, 0x8000, CRC(a8f5a004) SHA1(36ab0cb8ec9ce0519876f7461ccc5020c9c5b597) )
391 ROM_LOAD( "ts_18.rom", 0x28000, 0x8000, CRC(3b36948c) SHA1(d85fcc0265ba1729c587b046cc5a7ba6f25363dd) )
392 ROM_LOAD( "ts_23.rom", 0x30000, 0x8000, CRC(bbfbe58a) SHA1(9b1d5672b6f3c5c0952f8dcd0da71acc68a97a5e) )
393 ROM_LOAD( "ts_24.rom", 0x38000, 0x8000, CRC(f156e564) SHA1(a6cad05bcc6d9ded6294f9b5aa856d05641aed02) )
394
395 ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE )
396 ROM_LOAD( "tsu_10.rom", 0x00000, 0x8000, CRC(f1180d02) SHA1(312626af48235a1f726ab596f296ef4739785ca0) ) /* Sprites */
397 ROM_LOAD( "tsu_09.rom", 0x08000, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) )
398 ROM_LOAD( "tsu_15.rom", 0x10000, 0x8000, CRC(ea912701) SHA1(106336c63a1c8a0b13236268bc533a8263285cad) )
399 ROM_LOAD( "tsu_14.rom", 0x18000, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) )
400 ROM_LOAD( "tsu_20.rom", 0x20000, 0x8000, CRC(17857ad2) SHA1(9f45cea6e9ce82bfc9ee6896a30257d20fb38bca) )
401 ROM_LOAD( "tsu_19.rom", 0x28000, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) )
402 ROM_LOAD( "tsu_22.rom", 0x30000, 0x8000, CRC(5ee1ae6a) SHA1(76ca53d847c940c4176d79ba49b0c10efd6342e8) )
403 ROM_LOAD( "tsu_21.rom", 0x38000, 0x8000, CRC(98777006) SHA1(bcc2058b639e9b71d16af05f63df298bcce91fdc) )
404
405 ROM_REGION( 0x0100, REGION_PROMS, 0 )
406 ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used) */
407 ROM_END
408
409 ROM_START( bionicc2 )
410 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 code */
411 ROM_LOAD16_BYTE( "02", 0x00000, 0x10000, CRC(f2528f08) SHA1(04c793837c86d83312fd44b46a6a94378c90113b) ) /* 68000 code */
412 ROM_LOAD16_BYTE( "04", 0x00001, 0x10000, CRC(38b1c7e4) SHA1(14bf743726c214bd00177e7b410c272dd7ab3d3f) ) /* 68000 code */
413 ROM_LOAD16_BYTE( "03", 0x20000, 0x10000, CRC(72c3b76f) SHA1(f7f71eae7617e3348b727775088b496e86d51e38) ) /* 68000 code */
414 ROM_LOAD16_BYTE( "05", 0x20001, 0x10000, CRC(70621f83) SHA1(0a77c2827a5c50457d90ccc62e463508d83d2f20) ) /* 68000 code */
415
416 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
417 ROM_LOAD( "tsu_01b.rom", 0x00000, 0x8000, CRC(a9a6cafa) SHA1(55e0a0e6ca11e8e73339d5b4604e130031211291) )
418
419 ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
420 ROM_LOAD( "tsu_08.rom", 0x00000, 0x8000, CRC(9bf0b7a2) SHA1(1361335c3c2c8a9c6a7d99566048d8aac99e7c8f) ) /* VIDEORAM (text layer) tiles */
421
422 ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE )
423 ROM_LOAD( "tsu_07.rom", 0x00000, 0x8000, CRC(9469efa4) SHA1(53c70361e8d9e54825f61b87a10df42438aaf5b0) ) /* SCROLL2 Layer Tiles */
424 ROM_LOAD( "tsu_06.rom", 0x08000, 0x8000, CRC(40bf0eb4) SHA1(fcb186c31747e2c9872de01e34b3e713dc74df82) )
425
426 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
427 ROM_LOAD( "ts_12.rom", 0x00000, 0x8000, CRC(e4b4619e) SHA1(3bec8399ffb28fd50ce6ae88d90b091eadf8bda1) ) /* SCROLL1 Layer Tiles */
428 ROM_LOAD( "ts_11.rom", 0x08000, 0x8000, CRC(ab30237a) SHA1(ea6c07df992ba48f9eca7daa4ea775faa94358d2) )
429 ROM_LOAD( "ts_17.rom", 0x10000, 0x8000, CRC(deb657e4) SHA1(b36b468f9bbb7a4937286230d3f6caa14c61d4dd) )
430 ROM_LOAD( "ts_16.rom", 0x18000, 0x8000, CRC(d363b5f9) SHA1(1dd3991d99db2d6bcbdb12879ba50a01fef95004) )
431 ROM_LOAD( "ts_13.rom", 0x20000, 0x8000, CRC(a8f5a004) SHA1(36ab0cb8ec9ce0519876f7461ccc5020c9c5b597) )
432 ROM_LOAD( "ts_18.rom", 0x28000, 0x8000, CRC(3b36948c) SHA1(d85fcc0265ba1729c587b046cc5a7ba6f25363dd) )
433 ROM_LOAD( "ts_23.rom", 0x30000, 0x8000, CRC(bbfbe58a) SHA1(9b1d5672b6f3c5c0952f8dcd0da71acc68a97a5e) )
434 ROM_LOAD( "ts_24.rom", 0x38000, 0x8000, CRC(f156e564) SHA1(a6cad05bcc6d9ded6294f9b5aa856d05641aed02) )
435
436 ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE )
437 ROM_LOAD( "tsu_10.rom", 0x00000, 0x8000, CRC(f1180d02) SHA1(312626af48235a1f726ab596f296ef4739785ca0) ) /* Sprites */
438 ROM_LOAD( "tsu_09.rom", 0x08000, 0x8000, CRC(6a049292) SHA1(525c862061f426d679b539b6926af4c9f14b47b5) )
439 ROM_LOAD( "tsu_15.rom", 0x10000, 0x8000, CRC(ea912701) SHA1(106336c63a1c8a0b13236268bc533a8263285cad) )
440 ROM_LOAD( "tsu_14.rom", 0x18000, 0x8000, CRC(46b2ad83) SHA1(21ebd5691a544323fdfcf330b9a37bbe0428e3e3) )
441 ROM_LOAD( "tsu_20.rom", 0x20000, 0x8000, CRC(17857ad2) SHA1(9f45cea6e9ce82bfc9ee6896a30257d20fb38bca) )
442 ROM_LOAD( "tsu_19.rom", 0x28000, 0x8000, CRC(b5c82722) SHA1(969f9159f7d59e4e4c9ef9ddbdc27cbfa531eabf) )
443 ROM_LOAD( "tsu_22.rom", 0x30000, 0x8000, CRC(5ee1ae6a) SHA1(76ca53d847c940c4176d79ba49b0c10efd6342e8) )
444 ROM_LOAD( "tsu_21.rom", 0x38000, 0x8000, CRC(98777006) SHA1(bcc2058b639e9b71d16af05f63df298bcce91fdc) )
445
446 ROM_REGION( 0x0100, REGION_PROMS, 0 )
447 ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used) */
448 ROM_END
449
450 ROM_START( topsecrt )
451 ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 code */
452 ROM_LOAD16_BYTE( "ts_02.rom", 0x00000, 0x10000, CRC(b2fe1ddb) SHA1(892f19124993add96edabdba3aafeecc6668c5d9) ) /* 68000 code */
453 ROM_LOAD16_BYTE( "ts_04.rom", 0x00001, 0x10000, CRC(427a003d) SHA1(5a379fe2942e5565810939d5eb843003226222cc) ) /* 68000 code */
454 ROM_LOAD16_BYTE( "ts_03.rom", 0x20000, 0x10000, CRC(27f04bb6) SHA1(41d17b84b34dc8b2e5dfa67794a8df3e898b740b) ) /* 68000 code */
455 ROM_LOAD16_BYTE( "ts_05.rom", 0x20001, 0x10000, CRC(c01547b1) SHA1(563bf6be4f10f5e6eb5b562266accf168f62bf30) ) /* 68000 code */
456
457 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for the audio CPU */
458 ROM_LOAD( "ts_01.rom", 0x00000, 0x8000, CRC(8ea07917) SHA1(e9ace70d89482fc3669860450a41aacacbee9083) )
459
460 ROM_REGION( 0x08000, REGION_GFX1, ROMREGION_DISPOSE )
461 ROM_LOAD( "ts_08.rom", 0x00000, 0x8000, CRC(96ad379e) SHA1(accd3a560b259c186bc28cdc004ed8de0b12f9d5) ) /* VIDEORAM (text layer) tiles */
462
463 ROM_REGION( 0x10000, REGION_GFX2, ROMREGION_DISPOSE )
464 ROM_LOAD( "ts_07.rom", 0x00000, 0x8000, CRC(25cdf8b2) SHA1(316f6acc46878682dabeab12722e6a64504d23bd) ) /* SCROLL2 Layer Tiles */
465 ROM_LOAD( "ts_06.rom", 0x08000, 0x8000, CRC(314fb12d) SHA1(dab0519a49b64fe7a837b3c6383f6147e1ab6ffd) )
466
467 ROM_REGION( 0x40000, REGION_GFX3, ROMREGION_DISPOSE )
468 ROM_LOAD( "ts_12.rom", 0x00000, 0x8000, CRC(e4b4619e) SHA1(3bec8399ffb28fd50ce6ae88d90b091eadf8bda1) ) /* SCROLL1 Layer Tiles */
469 ROM_LOAD( "ts_11.rom", 0x08000, 0x8000, CRC(ab30237a) SHA1(ea6c07df992ba48f9eca7daa4ea775faa94358d2) )
470 ROM_LOAD( "ts_17.rom", 0x10000, 0x8000, CRC(deb657e4) SHA1(b36b468f9bbb7a4937286230d3f6caa14c61d4dd) )
471 ROM_LOAD( "ts_16.rom", 0x18000, 0x8000, CRC(d363b5f9) SHA1(1dd3991d99db2d6bcbdb12879ba50a01fef95004) )
472 ROM_LOAD( "ts_13.rom", 0x20000, 0x8000, CRC(a8f5a004) SHA1(36ab0cb8ec9ce0519876f7461ccc5020c9c5b597) )
473 ROM_LOAD( "ts_18.rom", 0x28000, 0x8000, CRC(3b36948c) SHA1(d85fcc0265ba1729c587b046cc5a7ba6f25363dd) )
474 ROM_LOAD( "ts_23.rom", 0x30000, 0x8000, CRC(bbfbe58a) SHA1(9b1d5672b6f3c5c0952f8dcd0da71acc68a97a5e) )
475 ROM_LOAD( "ts_24.rom", 0x38000, 0x8000, CRC(f156e564) SHA1(a6cad05bcc6d9ded6294f9b5aa856d05641aed02) )
476
477 ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE )
478 ROM_LOAD( "ts_10.rom", 0x00000, 0x8000, CRC(c3587d05) SHA1(ad0898a5d4cf110783ef092bf8e65b6ef31a8ae0) ) /* Sprites */
479 ROM_LOAD( "ts_09.rom", 0x08000, 0x8000, CRC(6b63eef2) SHA1(5d1580db7f49c5994c2a08a36c2d05f3e246930d) )
480 ROM_LOAD( "ts_15.rom", 0x10000, 0x8000, CRC(db8cebb0) SHA1(1cc9eac14851cde95fb2d69d6f5ffb08bc9c0d93) )
481 ROM_LOAD( "ts_14.rom", 0x18000, 0x8000, CRC(e2e41abf) SHA1(d002d0d8fdbb9ec3e2eac218f6338f733953ca82) )
482 ROM_LOAD( "ts_20.rom", 0x20000, 0x8000, CRC(bfd1a695) SHA1(bf93486b96bfa1a1d5015189043b07e6130e6df1) )
483 ROM_LOAD( "ts_19.rom", 0x28000, 0x8000, CRC(928b669e) SHA1(98ea9d23a46b0700490fd2fa7ab4fb0988dd5ca6) )
484 ROM_LOAD( "ts_22.rom", 0x30000, 0x8000, CRC(3fe05d9a) SHA1(32e28ef03fb82785019d1ae8b3859215b5368c2b) )
485 ROM_LOAD( "ts_21.rom", 0x38000, 0x8000, CRC(27a9bb7c) SHA1(bb60332c0ecde4d7797960dec39c1079498175c3) )
486
487 ROM_REGION( 0x0100, REGION_PROMS, 0 )
488 ROM_LOAD( "63s141.18f", 0x0000, 0x0100, CRC(b58d0023) SHA1(e8a4a2e2951bf73b3d9eed6957e9ee1e61c9c58a) ) /* priority (not used) */
489 ROM_END
490
491
492
493 GAME( 1987, bionicc, 0, bionicc, bionicc, 0, ROT0, "Capcom", "Bionic Commando (US set 1)" )
494 GAME( 1987, bionicc2, bionicc, bionicc, bionicc, 0, ROT0, "Capcom", "Bionic Commando (US set 2)" )
495 GAME( 1987, topsecrt, bionicc, bionicc, bionicc, 0, ROT0, "Capcom", "Top Secret (Japan)" )
496