1 /*
2 To Do:
3 - get sound working
4 - map and test any remaining input ports
5
6 Looping
7 (C)1981 Venture Line
8
9 Main CPU
10 TMS9995
11
12 COP420 Microcontroller
13 manages CPU communnication?
14
15 Sound CPU
16 TMS9980
17 AY-3-8910
18 TMS5220 (SPEECH)
19
20 ---------------------------------------------------------------
21
22 Sky Bumper
23 (C)1982 Venture Line
24
25 This is a ROM swap for Looping. There are two 6116's on
26 the CPU board, where there is only one on Looping.
27
28 ---------------------------------------------------------------
29
30 Super Tank
31 (C)19?? Venture Line
32
33 Runs on simpler hardware; not yet emulated.
34
35 ===============================================================
36
37 LOOPING CHIP PLACEMENT
38
39 THERE ARE AT LEAST TWO VERSIONS OF THIS GAME
40 VERSION NUMBERS FOR THIS PURPOSE ARE CHOSEN AT RANDOM
41
42 IC NAME POSITION BOARD TYPE IC NAME POSITION TYPE
43 VER-1 VER-2
44 ---------------------------------------------------------------
45 LOS-2-7 13A I/O 2532 SAME 13A 2532
46 LOS-1-1-2 11A " " SAME 11A "
47 LOS-3-1 13C " " I-O-V2 13C "
48
49 VLI1 2A ROM 2764 VLI-7-1 2A "
50 VLI3 5A " " VLI-7-2 4A "
51 VLI9-5 8A " " VLI-4-3 5A "
52 L056-6 9A " " VLI-8-4 7A "
53 " LO56-5 8A "
54 " LO56-6 9A "
55 " VLI-8-7 10A "
56 ON RIBBON CABLE 18S030 11B color prom?
57 REAR BD LOG.1-9-3 6A 2716 tiles
58 LOG.3 8A " tiles
59 */
60
61 #include "driver.h"
62 #include "vidhrdw/generic.h"
63
64 static struct tilemap *tilemap;
65
PALETTE_INIT(looping)66 PALETTE_INIT( looping )
67 {
68 int i;
69 for (i = 0;i < 0x20;i++)
70 {
71 int bit0,bit1,bit2,r,g,b;
72
73 /* red component */
74 bit0 = (*color_prom >> 0) & 0x01;
75 bit1 = (*color_prom >> 1) & 0x01;
76 bit2 = (*color_prom >> 2) & 0x01;
77 r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
78 /* green component */
79 bit0 = (*color_prom >> 3) & 0x01;
80 bit1 = (*color_prom >> 4) & 0x01;
81 bit2 = (*color_prom >> 5) & 0x01;
82 g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
83 /* blue component */
84 bit0 = (*color_prom >> 6) & 0x01;
85 bit1 = (*color_prom >> 7) & 0x01;
86 b = 0x4f * bit0 + 0xa8 * bit1;
87
88 palette_set_color(i,r,g,b);
89 color_prom++;
90 }
91 }
92
get_tile_info(int offset)93 static void get_tile_info( int offset )
94 {
95 int tile_number = videoram[offset];
96 int color = colorram[(offset&0x1f)*2+1]&0x7;
97 SET_TILE_INFO(
98 0,
99 tile_number,
100 color,
101 0)
102 }
103
WRITE_HANDLER(looping_flip_screen_x_w)104 WRITE_HANDLER( looping_flip_screen_x_w )
105 {
106 flip_screen_x_set(~data & 0x01);
107 }
108
WRITE_HANDLER(looping_flip_screen_y_w)109 WRITE_HANDLER( looping_flip_screen_y_w )
110 {
111 flip_screen_y_set(~data & 0x01);
112 }
113
WRITE_HANDLER(looping_colorram_w)114 WRITE_HANDLER( looping_colorram_w )
115 {
116 int i,offs;
117 if( colorram[offset]!=data )
118 {
119 colorram[offset] = data;
120 if( offset&1 )
121 {
122 /* odd bytes are column color attribute */
123 offs = (offset/2);
124 /* mark the whole column dirty */
125 for( i=0; i<0x20; i++ )
126 {
127 tilemap_mark_tile_dirty( tilemap, offs );
128 offs += 0x20;
129 }
130 }
131 else
132 {
133 /* even bytes are column scroll */
134 tilemap_set_scrolly( tilemap,offset/2,data );
135 }
136 }
137 }
138
VIDEO_START(looping)139 VIDEO_START( looping )
140 {
141 tilemap = tilemap_create( get_tile_info,tilemap_scan_rows,TILEMAP_OPAQUE,8,8,32,32 );
142 if( tilemap )
143 {
144 tilemap_set_scroll_cols( tilemap, 0x20 );
145 return 0;
146 }
147 return -1;
148 }
149
WRITE_HANDLER(looping_videoram_w)150 WRITE_HANDLER( looping_videoram_w )
151 {
152 if( videoram[offset]!=data )
153 {
154 videoram[offset] = data;
155 tilemap_mark_tile_dirty( tilemap, offset );
156 }
157 }
158
draw_sprites(struct mame_bitmap * bitmap,const struct rectangle * cliprect)159 static void draw_sprites( struct mame_bitmap *bitmap, const struct rectangle *cliprect )
160 {
161 const UINT8 *source = spriteram;
162 const UINT8 *finish = source + 0x10*4; /* ? */
163
164 UINT8 sx, sy;
165 int flipx, flipy, code, color;
166
167 while( source < finish )
168 {
169 sx = source[3];
170 sy = source[0];
171 flipx = source[1] & 0x40;
172 flipy = source[1] & 0x80;
173 code = source[1] & 0x3f;
174 color = source[2];
175
176 if (flip_screen_x)
177 {
178 sx = 240 - sx;
179 flipx = !flipx;
180 }
181
182 if (flip_screen_y)
183 {
184 flipy = !flipy;
185 }
186 else
187 {
188 sy = 240 - sy;
189 }
190
191 drawgfx( bitmap, Machine->gfx[1],
192 code, color,
193 flipx, flipy,
194 sx, sy,
195 &Machine->visible_area,
196 TRANSPARENCY_PEN, 0 );
197
198 source += 4;
199 }
200 }
201
VIDEO_UPDATE(looping)202 VIDEO_UPDATE( looping )
203 {
204 tilemap_draw( bitmap,cliprect,tilemap,0,0 );
205 draw_sprites( bitmap,cliprect );
206 }
207
WRITE_HANDLER(looping_intack)208 WRITE_HANDLER( looping_intack )
209 {
210 if (data==0)
211 {
212 cpu_irq_line_vector_w(0, 0, 4);
213 cpu_set_irq_line(0, 0, CLEAR_LINE);
214 }
215 }
216
INTERRUPT_GEN(looping_interrupt)217 INTERRUPT_GEN( looping_interrupt )
218 {
219 cpu_irq_line_vector_w(0, 0, 4);
220 cpu_set_irq_line(0, 0, ASSERT_LINE);
221 }
222
223 /****** sound *******/
224
WRITE_HANDLER(looping_soundlatch_w)225 WRITE_HANDLER( looping_soundlatch_w )
226 {
227 soundlatch_w(offset, data);
228 cpu_irq_line_vector_w(1, 0, 4);
229 cpu_set_irq_line(1, 0, ASSERT_LINE);
230 }
231
WRITE_HANDLER(looping_souint_clr)232 WRITE_HANDLER( looping_souint_clr )
233 {
234 if (data==0)
235 {
236 cpu_irq_line_vector_w(1, 0, 4);
237 cpu_set_irq_line(1, 0, CLEAR_LINE);
238 }
239 }
240
looping_spcint(int state)241 void looping_spcint(int state)
242 {
243 cpu_irq_line_vector_w(1, 0, 6);
244 cpu_set_irq_line(1, 0, state);
245 }
246
WRITE_HANDLER(looping_sound_sw)247 WRITE_HANDLER( looping_sound_sw )
248 {
249 /* this can be improved by adding the missing
250 signals for decay etc. (see schematics) */
251 static int r[8];
252 r[offset]=data^1;
253 DAC_data_w(0, ((r[1]<<7) + (r[2]<<6))*r[6]);
254 }
255
MEMORY_READ_START(looping_readmem)256 static MEMORY_READ_START( looping_readmem )
257 { 0x0000, 0x7fff, MRA_ROM },
258 /* { 0x9000, 0x9fff, MRA_RAM }, videoram is write only? */
259 { 0xe000, 0xefff, MRA_RAM },
260 { 0xf800, 0xf800, input_port_0_r }, /* inp */
261 { 0xf801, 0xf801, input_port_1_r },
262 { 0xf802, 0xf802, input_port_2_r }, /* dsw */
263 MEMORY_END
264
265 static MEMORY_WRITE_START( looping_writemem )
266 { 0x0000, 0x7fff, MWA_ROM },
267 { 0x9000, 0x93ff, looping_videoram_w, &videoram },
268 { 0x9800, 0x983f, looping_colorram_w, &colorram },
269 { 0x9840, 0x987f, MWA_RAM, &spriteram },
270 { 0xe000, 0xefff, MWA_RAM },
271 { 0xb006, 0xb006, looping_flip_screen_x_w },
272 { 0xb007, 0xb007, looping_flip_screen_y_w },
273 { 0xf801, 0xf801, looping_soundlatch_w },
274 MEMORY_END
275
276 static PORT_WRITE_START( looping_writeport)
277 { 0x000, 0x000, MWA_NOP },
278 { 0x406, 0x406, looping_intack },
279 { 0x407, 0x407, watchdog_reset_w },
280 PORT_END
281
282 static MEMORY_READ_START( looping_io_readmem )
283 { 0x0000, 0x37ff, MRA_ROM },
284 { 0x3800, 0x3bff, MRA_RAM },
285 { 0x3c00, 0x3c00, AY8910_read_port_0_r },
286 { 0x3e02, 0x3e02, tms5220_status_r },
287 MEMORY_END
288
289 static MEMORY_WRITE_START( looping_io_writemem )
290 { 0x0000, 0x37ff, MWA_ROM },
291 { 0x3800, 0x3bff, MWA_RAM },
292 { 0x3c00, 0x3c00, AY8910_control_port_0_w },
293 { 0x3c02, 0x3c02, AY8910_write_port_0_w },
294 { 0x3e00, 0x3e00, tms5220_data_w },
295 MEMORY_END
296
297 static PORT_WRITE_START( looping_io_writeport)
298 { 0x000, 0x000, looping_souint_clr },
299 { 0x001, 0x007, looping_sound_sw },
300 PORT_END
301
302 static struct GfxLayout tile_layout =
303 {
304 8,8, /* 8*8 characters */
305 0x100, /* number of characters */
306 2, /* 2 bits per pixel */
307 { 0,0x800*8 },
308 { 0, 1, 2, 3, 4, 5, 6, 7 },
309 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
310 8*8
311 };
312
313 static struct GfxLayout sprite_layout =
314 {
315 16,16, /* 8*8 characters */
316 0x40, /* number of characters */
317 2, /* 2 bits per pixel */
318 { 0,0x800*8 },
319 {
320 0, 1, 2, 3, 4, 5, 6, 7,
321 64+0, 64+1, 64+2, 64+3, 64+4, 64+5, 64+6, 64+7
322 },
323 {
324 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
325 128+0*8, 128+1*8, 128+2*8, 128+3*8, 128+4*8, 128+5*8, 128+6*8, 128+7*8
326 },
327 8*8*4
328 };
329
330 static struct GfxDecodeInfo looping_gfxdecodeinfo[] =
331 {
332 { REGION_GFX1, 0, &tile_layout, 0, 8 },
333 { REGION_GFX1, 0, &sprite_layout, 0, 8 },
334 { -1 }
335 };
336
337 static struct TMS5220interface tms5220_interface =
338 {
339 640000, /* clock speed (80*samplerate) */
340 50, /* volume */
341 looping_spcint /* IRQ handler */
342 };
343
344 static struct AY8910interface ay8910_interface =
345 {
346 1,
347 2000000,
348 { 20 },
349 { soundlatch_r },
350 { 0 },
351 { 0 },
352 { 0 }
353 };
354
355 static struct DACinterface dac_interface =
356 {
357 1,
358 { 30 }
359 };
360
361 static MACHINE_DRIVER_START( looping )
362
363 /* basic machine hardware */
364 MDRV_CPU_ADD(TMS9995, 3000000) /* ? */
MDRV_CPU_MEMORY(looping_readmem,looping_writemem)365 MDRV_CPU_MEMORY(looping_readmem,looping_writemem)
366 MDRV_CPU_PORTS(0,looping_writeport)
367 MDRV_CPU_VBLANK_INT(looping_interrupt,1)
368
369 MDRV_CPU_ADD(TMS9980, 2000000) /* ?*/
370 MDRV_CPU_MEMORY(looping_io_readmem,looping_io_writemem)
371 MDRV_CPU_PORTS(0,looping_io_writeport)
372
373 MDRV_FRAMES_PER_SECOND(60)
374 MDRV_VBLANK_DURATION(2500)
375
376 /* video hardware */
377 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
378 MDRV_SCREEN_SIZE(32*8, 32*8)
379 MDRV_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
380 MDRV_GFXDECODE(looping_gfxdecodeinfo)
381 MDRV_PALETTE_LENGTH(32)
382 MDRV_COLORTABLE_LENGTH(32)
383
384 MDRV_PALETTE_INIT(looping)
385 MDRV_VIDEO_START(looping)
386 MDRV_VIDEO_UPDATE(looping)
387
388 /* sound hardware */
389 MDRV_SOUND_ADD(AY8910, ay8910_interface)
390 MDRV_SOUND_ADD(TMS5220, tms5220_interface)
391 MDRV_SOUND_ADD(DAC, dac_interface)
392 MACHINE_DRIVER_END
393
394
395
396 INPUT_PORTS_START( looping )
397 PORT_START
398 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
399 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
400 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */
401 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
402 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
403 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* accel? */
404 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
405 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
406
407 PORT_START /* cocktail? */
408 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_COCKTAIL )
409 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_COCKTAIL )
410 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
411 PORT_BIT( 0x18, IP_ACTIVE_LOW, IPT_UNUSED )
412 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
413 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
414
415 PORT_START
416 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coin_B ) )
417 PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
418 PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
419 PORT_DIPNAME( 0x0e, 0x02, DEF_STR( Coin_A ) )
420 PORT_DIPSETTING( 0x02, DEF_STR( 1C_1C ) )
421 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
422 PORT_DIPSETTING( 0x06, DEF_STR( 1C_3C ) )
423 PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C ) )
424 PORT_DIPSETTING( 0x0a, DEF_STR( 1C_5C ) )
425 PORT_DIPSETTING( 0x0c, DEF_STR( 1C_6C ) )
426 PORT_DIPSETTING( 0x0e, DEF_STR( 1C_7C ) )
427 PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
428 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) /* Check code at 0x2c00*/
429 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
430 PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
431 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Lives ) )
432 PORT_DIPSETTING( 0x00, "3" )
433 PORT_DIPSETTING( 0x20, "5" )
434 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
435 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
436 PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
437 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
438 INPUT_PORTS_END
439
440 /* Same as 'looping' but additional "Infinite Lives" Dip Switch */
441 INPUT_PORTS_START( skybump )
442 PORT_START
443 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
444 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
445 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* shoot */
446 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
447 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
448 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* accel? */
449 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
450 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
451
452 PORT_START /* cocktail? */
453 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_COCKTAIL )
454 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_COCKTAIL )
455 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
456 PORT_BIT( 0x18, IP_ACTIVE_LOW, IPT_UNUSED )
457 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
458 PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
459
460 PORT_START
461 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coin_B ) )
462 PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
463 PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
464 PORT_DIPNAME( 0x0e, 0x02, DEF_STR( Coin_A ) )
465 PORT_DIPSETTING( 0x02, DEF_STR( 1C_1C ) )
466 PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
467 PORT_DIPSETTING( 0x06, DEF_STR( 1C_3C ) )
468 PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C ) )
469 PORT_DIPSETTING( 0x0a, DEF_STR( 1C_5C ) )
470 PORT_DIPSETTING( 0x0c, DEF_STR( 1C_6C ) )
471 PORT_DIPSETTING( 0x0e, DEF_STR( 1C_7C ) )
472 PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
473 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) /* Check code at 0x2c00*/
474 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
475 PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
476 PORT_DIPNAME( 0x60, 0x40, DEF_STR( Lives ) )
477 PORT_DIPSETTING( 0x40, "3" )
478 PORT_DIPSETTING( 0x60, "5" )
479 PORT_BITX( 0, 0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )
480 /* PORT_BITX( 0, 0x20, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )*/
481 PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
482 PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
483 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
484 INPUT_PORTS_END
485
486 ROM_START( loopinga )
487 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for TMS9995 code */
488 ROM_LOAD( "vli3.5a", 0x0000, 0x2000, CRC(1ac3ccdf) SHA1(9d1cde8bd4d0f12eaf06225b3ecc4a5c3e4f0c11) )
489 ROM_LOAD( "vli-4-3", 0x2000, 0x1000, CRC(f32cae2b) SHA1(2c6ef82af438e588b56fd58b95cf969c97bb9a66) )
490 ROM_LOAD( "vli-8-4", 0x3000, 0x1000, CRC(611e1dbf) SHA1(0ab6669f1dec30c3f7bca49e158e4790a78fa308) )
491 ROM_LOAD( "l056-6.9a", 0x4000, 0x2000, CRC(548afa52) SHA1(0b88ac7394feede023519c585a4084591eb9661a) )
492 ROM_LOAD( "vli9-5.8a", 0x6000, 0x2000, CRC(5d122f86) SHA1(d1c66b890142bb4d4648f3edec6567f58107dbf0) )
493
494 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for TMS9980 code */
495 ROM_LOAD( "i-o-v2.13c", 0x0000, 0x0800, CRC(09765ebe) SHA1(93b035c3a94f2f6d5e463256e26b600a4dd5d3ea) )
496 ROM_LOAD( "i-o.13a", 0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) ) /* speech */
497 ROM_LOAD( "i-o.11a", 0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) )
498
499 ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* COP420 microcontroller code */
500 ROM_LOAD( "cop.bin", 0x0000, 0x1000, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) )
501
502 ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
503 ROM_LOAD( "log1-9-3.6a", 0x0000, 0x800, CRC(c434c14c) SHA1(3669aaf7adc6b250378bcf62eb8e7058f55476ef) )
504 ROM_LOAD( "log2.8a", 0x0800, 0x800, CRC(ef3284ac) SHA1(8719c9df8c972a56c306b3c707aaa53092ffa2d6) )
505
506 ROM_REGION( 0x0020, REGION_PROMS, 0 ) /* color prom */
507 ROM_LOAD( "18s030.11b", 0x0000, 0x0020, CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
508 ROM_END
509
510 ROM_START( looping )
511 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for TMS9995 code */
512 ROM_LOAD( "vli3.5a", 0x0000, 0x2000, CRC(1ac3ccdf) SHA1(9d1cde8bd4d0f12eaf06225b3ecc4a5c3e4f0c11) )
513 ROM_LOAD( "vli1.2a", 0x2000, 0x2000, CRC(97755fd4) SHA1(4a6ef02b0128cd516ff95083a7caaad8f3756f09) )
514 ROM_LOAD( "l056-6.9a", 0x4000, 0x2000, CRC(548afa52) SHA1(0b88ac7394feede023519c585a4084591eb9661a) )
515 ROM_LOAD( "vli9-5.8a", 0x6000, 0x2000, CRC(5d122f86) SHA1(d1c66b890142bb4d4648f3edec6567f58107dbf0) )
516
517 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for TMS9980 code */
518 ROM_LOAD( "i-o.13c", 0x0000, 0x0800, CRC(21e9350c) SHA1(f30a180309e373a17569351944f5e7982c3b3f9d) )
519 ROM_LOAD( "i-o.13a", 0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) )
520 ROM_LOAD( "i-o.11a", 0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) ) /* speech */
521
522 ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* COP420 microcontroller code */
523 ROM_LOAD( "cop.bin", 0x0000, 0x1000, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) )
524
525 ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
526 ROM_LOAD( "log1-9-3.6a", 0x0000, 0x800, CRC(c434c14c) SHA1(3669aaf7adc6b250378bcf62eb8e7058f55476ef) )
527 ROM_LOAD( "log2.8a", 0x0800, 0x800, CRC(ef3284ac) SHA1(8719c9df8c972a56c306b3c707aaa53092ffa2d6) )
528
529 ROM_REGION( 0x0020, REGION_PROMS, 0 ) /* color prom */
530 ROM_LOAD( "18s030.11b", 0x0000, 0x0020, CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
531 ROM_END
532
533 ROM_START( skybump )
534 ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for TMS9995 code */
535 ROM_LOAD( "cpu.5a", 0x0000, 0x2000, CRC(dca38df0) SHA1(86abe04cbabf81399f842f53668fe7a3f7ed3757) )
536 ROM_LOAD( "cpu.2a", 0x2000, 0x2000, CRC(6bcc211a) SHA1(245ebae3934df9c3920743a941546d96bb2e7c03) )
537 ROM_LOAD( "cpu.9a", 0x4000, 0x2000, CRC(c7a50797) SHA1(60aa0a28ba970f12d0a0e538ae1c6807d105855c) )
538 ROM_LOAD( "cpu.8a", 0x6000, 0x2000, CRC(a718c6f2) SHA1(19afa8c353829232cb96c27b87f13b43166ab6fc) )
539
540 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* 64k for TMS9980 code */
541 ROM_LOAD( "snd.13c", 0x0000, 0x0800, CRC(21e9350c) SHA1(f30a180309e373a17569351944f5e7982c3b3f9d) )
542 ROM_LOAD( "snd.13a", 0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) )
543 ROM_LOAD( "snd.11a", 0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) )
544
545 ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* COP420 microcontroller code */
546 ROM_LOAD( "cop.bin", 0x0000, 0x1000, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) )
547
548 ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
549 ROM_LOAD( "vid.6a", 0x0000, 0x800, CRC(12ebbe74) SHA1(0f87c81a45d1bf3b8c6a70ee5e1a014069f67755) )
550 ROM_LOAD( "vid.8a", 0x0800, 0x800, CRC(459ccc55) SHA1(747f6789605b48be9e22f779f9e3f6c98ad4e594) )
551
552 ROM_REGION( 0x0020, REGION_PROMS, 0 ) /* color prom */
553 ROM_LOAD( "vid.clr", 0x0000, 0x0020, CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
554 ROM_END
555
556 DRIVER_INIT( looping ){
557 /* unscramble the TMS9995 ROMs */
558 UINT8 *pMem = memory_region( REGION_CPU1 );
559 UINT8 raw,code;
560 int i;
561 for( i=0; i<0x8000; i++ )
562 {
563 raw = pMem[i];
564 code = 0;
565 if( raw&0x01 ) code |= 0x80;
566 if( raw&0x02 ) code |= 0x40;
567 if( raw&0x04 ) code |= 0x20;
568 if( raw&0x08 ) code |= 0x10;
569 if( raw&0x10 ) code |= 0x08;
570 if( raw&0x20 ) code |= 0x04;
571 if( raw&0x40 ) code |= 0x02;
572 if( raw&0x80 ) code |= 0x01;
573 pMem[i] = code;
574 }
575 }
576
577 /* rom parent machine inp init */
578 GAME( 1982, looping, 0, looping, looping, looping, ROT90, "Venture Line", "Looping (set 1)" )
579 GAME( 1982, loopinga, looping, looping, looping, looping, ROT90, "Venture Line", "Looping (set 2)" )
580 GAME( 1982, skybump, 0, looping, skybump, looping, ROT90, "Venture Line", "Sky Bumper" )
581