1 #include "../vidhrdw/travrusa.c"
2
3 /****************************************************************************
4 Traverse USA Driver
5
6 Lee Taylor
7 John Clegg
8
9 Loosely based on the our previous 10 Yard Fight driver.
10
11
12 - I haven't understood how char/sprite priority works. This is used for
13 tunnels. I hacked it just by making the two needed colors opaque. They
14 don't seem to be used anywhere else.
15
16 ****************************************************************************/
17
18 #include "driver.h"
19 #include "sndhrdw/irem.h"
20
21 extern unsigned char *spriteram;
22 extern size_t spriteram_size;
23
24 extern unsigned char *travrusa_videoram;
25
26 void travrusa_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
27 int travrusa_vh_start(void);
28 WRITE_HANDLER( travrusa_videoram_w );
29 WRITE_HANDLER( travrusa_scroll_x_low_w );
30 WRITE_HANDLER( travrusa_scroll_x_high_w );
31 WRITE_HANDLER( travrusa_flipscreen_w );
32 void travrusa_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
33
34
35
36 static struct MemoryReadAddress readmem[] =
37 {
38 { 0x0000, 0x7fff, MRA_ROM },
39 { 0x8000, 0x8fff, MRA_RAM }, /* Video and Color ram */
40 { 0xd000, 0xd000, input_port_0_r }, /* IN0 */
41 { 0xd001, 0xd001, input_port_1_r }, /* IN1 */
42 { 0xd002, 0xd002, input_port_2_r }, /* IN2 */
43 { 0xd003, 0xd003, input_port_3_r }, /* DSW1 */
44 { 0xd004, 0xd004, input_port_4_r }, /* DSW2 */
45 { 0xe000, 0xefff, MRA_RAM },
46 { -1 } /* end of table */
47 };
48
49 static struct MemoryWriteAddress writemem[] =
50 {
51 { 0x0000, 0x7fff, MWA_ROM },
52 { 0x8000, 0x8fff, travrusa_videoram_w, &travrusa_videoram },
53 { 0x9000, 0x9000, travrusa_scroll_x_low_w },
54 { 0xa000, 0xa000, travrusa_scroll_x_high_w },
55 { 0xc800, 0xc9ff, MWA_RAM, &spriteram, &spriteram_size },
56 { 0xd000, 0xd000, irem_sound_cmd_w },
57 { 0xd001, 0xd001, travrusa_flipscreen_w }, /* + coin counters */
58 { 0xe000, 0xefff, MWA_RAM },
59 { -1 } /* end of table */
60 };
61
62
63
64 INPUT_PORTS_START( travrusa )
65 PORT_START /* IN0 */
66 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
67 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
68 /* coin input must be active for 19 frames to be consistently recognized */
69 PORT_BIT_IMPULSE( 0x04, IP_ACTIVE_LOW, IPT_COIN3, 19 )
70 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
71 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
72 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
73 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
74 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
75
76 PORT_START /* IN1 */
77 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
78 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY )
79 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
80 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
81 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
82 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
83 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
84 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
85
86 PORT_START /* IN2 */
87 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
88 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
89 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
90 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
91 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
92 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
93 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
94 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
95
96 PORT_START /* DSW1 */
97 PORT_DIPNAME( 0x03, 0x03, "Fuel Reduced on Collision" )
98 PORT_DIPSETTING( 0x03, "Low" )
99 PORT_DIPSETTING( 0x02, "Med" )
100 PORT_DIPSETTING( 0x01, "Hi" )
101 PORT_DIPSETTING( 0x00, "Max" )
102 PORT_DIPNAME( 0x04, 0x04, "Fuel Consumption" )
103 PORT_DIPSETTING( 0x04, "Low" )
104 PORT_DIPSETTING( 0x00, "Hi" )
105 PORT_DIPNAME( 0x08, 0x00, "Allow Continue" )
106 PORT_DIPSETTING( 0x08, DEF_STR( No ) )
107 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
108 PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coinage ) )
109 PORT_DIPSETTING( 0xa0, DEF_STR( 6C_1C ) )
110 PORT_DIPSETTING( 0xb0, DEF_STR( 5C_1C ) )
111 PORT_DIPSETTING( 0xc0, DEF_STR( 4C_1C ) )
112 PORT_DIPSETTING( 0xd0, DEF_STR( 3C_1C ) )
113 PORT_DIPSETTING( 0xe0, DEF_STR( 2C_1C ) )
114 PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
115 PORT_DIPSETTING( 0x70, DEF_STR( 1C_2C ) )
116 PORT_DIPSETTING( 0x60, DEF_STR( 1C_3C ) )
117 PORT_DIPSETTING( 0x50, DEF_STR( 1C_4C ) )
118 PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
119 PORT_DIPSETTING( 0x30, DEF_STR( 1C_6C ) )
120 PORT_DIPSETTING( 0x20, DEF_STR( 1C_7C ) )
121
122 /* PORT_DIPSETTING( 0x10, "INVALID" ) */
123 /* PORT_DIPSETTING( 0x00, "INVALID" ) */
124
125 PORT_START /* DSW2 */
126 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
127 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
128 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
129 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )
130 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
131 PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) )
132 PORT_DIPNAME( 0x04, 0x04, "Coin Mode" )
133 PORT_DIPSETTING( 0x04, "Mode 1" )
134 PORT_DIPSETTING( 0x00, "Mode 2" )
135 PORT_DIPNAME( 0x08, 0x08, "Speed Type" )
136 PORT_DIPSETTING( 0x08, "M/H" )
137 PORT_DIPSETTING( 0x00, "Km/H" )
138 /* In stop mode, press 2 to stop and 1 to restart */
139 PORT_BITX ( 0x10, 0x10, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Stop Mode", IP_KEY_NONE, IP_JOY_NONE )
140 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
141 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
142 PORT_DIPNAME( 0x20, 0x20, "Title" )
143 PORT_DIPSETTING( 0x20, "Traverse USA" )
144 PORT_DIPSETTING( 0x00, "Zippy Race" )
145 PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
146 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
147 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
148 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
149 INPUT_PORTS_END
150
151 /* same as travrusa, no "Title" switch */
152 INPUT_PORTS_START( motorace )
153 PORT_START /* IN0 */
154 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
155 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
156 /* coin input must be active for 19 frames to be consistently recognized */
157 PORT_BIT_IMPULSE( 0x04, IP_ACTIVE_LOW, IPT_COIN3, 19 )
158 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
159 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
160 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
161 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
162 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
163
164 PORT_START /* IN1 */
165 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
166 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY )
167 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
168 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
169 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
170 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
171 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
172 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
173
174 PORT_START /* IN2 */
175 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
176 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
177 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
178 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
179 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
180 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
181 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
182 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
183
184 PORT_START /* DSW1 */
185 PORT_DIPNAME( 0x03, 0x03, "Fuel Reduced on Collision" )
186 PORT_DIPSETTING( 0x03, "Low" )
187 PORT_DIPSETTING( 0x02, "Med" )
188 PORT_DIPSETTING( 0x01, "Hi" )
189 PORT_DIPSETTING( 0x00, "Max" )
190 PORT_DIPNAME( 0x04, 0x04, "Fuel Consumption" )
191 PORT_DIPSETTING( 0x04, "Low" )
192 PORT_DIPSETTING( 0x00, "Hi" )
193 PORT_DIPNAME( 0x08, 0x00, "Allow Continue" )
194 PORT_DIPSETTING( 0x08, DEF_STR( No ) )
195 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
196 PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coinage ) )
197 PORT_DIPSETTING( 0xa0, DEF_STR( 6C_1C ) )
198 PORT_DIPSETTING( 0xb0, DEF_STR( 5C_1C ) )
199 PORT_DIPSETTING( 0xc0, DEF_STR( 4C_1C ) )
200 PORT_DIPSETTING( 0xd0, DEF_STR( 3C_1C ) )
201 PORT_DIPSETTING( 0xe0, DEF_STR( 2C_1C ) )
202 PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
203 PORT_DIPSETTING( 0x70, DEF_STR( 1C_2C ) )
204 PORT_DIPSETTING( 0x60, DEF_STR( 1C_3C ) )
205 PORT_DIPSETTING( 0x50, DEF_STR( 1C_4C ) )
206 PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
207 PORT_DIPSETTING( 0x30, DEF_STR( 1C_6C ) )
208 PORT_DIPSETTING( 0x20, DEF_STR( 1C_7C ) )
209
210 /* PORT_DIPSETTING( 0x10, "INVALID" ) */
211 /* PORT_DIPSETTING( 0x00, "INVALID" ) */
212
213 PORT_START /* DSW2 */
214 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )
215 PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
216 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
217 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )
218 PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
219 PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) )
220 PORT_DIPNAME( 0x04, 0x04, "Coin Mode" )
221 PORT_DIPSETTING( 0x04, "Mode 1" )
222 PORT_DIPSETTING( 0x00, "Mode 2" )
223 PORT_DIPNAME( 0x08, 0x08, "Speed Type" )
224 PORT_DIPSETTING( 0x08, "M/H" )
225 PORT_DIPSETTING( 0x00, "Km/H" )
226 /* In stop mode, press 2 to stop and 1 to restart */
227 PORT_BITX ( 0x10, 0x10, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Stop Mode", IP_KEY_NONE, IP_JOY_NONE )
228 PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
229 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
230 PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
231 PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
232 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
233 PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
234 PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
235 PORT_DIPSETTING( 0x00, DEF_STR( On ) )
236 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
237 INPUT_PORTS_END
238
239
240
241 static struct GfxLayout charlayout =
242 {
243 8,8, /* 8*8 characters */
244 1024, /* 1024 characters */
245 3, /* 3 bits per pixel */
246 { 2*1024*8*8, 1024*8*8, 0 },
247 { 0, 1, 2, 3, 4, 5, 6, 7 },
248 { 8*0, 8*1, 8*2, 8*3, 8*4, 8*5, 8*6, 8*7 },
249 8*8 /* every char takes 8 consecutive bytes */
250 };
251 static struct GfxLayout spritelayout =
252 {
253 16,16, /* 16*16 sprites */
254 256, /* 256 sprites */
255 3, /* 3 bits per pixel */
256 { 2*256*16*16, 256*16*16, 0 },
257 { 0, 1, 2, 3, 4, 5, 6, 7, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
258 { 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 },
259 32*8 /* every sprite takes 32 consecutive bytes */
260 };
261
262
263 static struct GfxDecodeInfo gfxdecodeinfo[] =
264 {
265 { REGION_GFX1, 0, &charlayout, 0, 16 },
266 { REGION_GFX2, 0, &spritelayout, 16*8, 16 },
267 { -1 } /* end of array */
268 };
269
270
271
272 static struct MachineDriver machine_driver_travrusa =
273 {
274 /* basic machine hardware */
275 {
276 {
277 CPU_Z80,
278 4000000, /* 4 Mhz (?) */
279 readmem,writemem,0,0,
280 interrupt,1
281 },
282 IREM_AUDIO_CPU
283 },
284 57, 1790, /* accurate frequency, measured on a Moon Patrol board, is 56.75Hz. */
285 /* the Lode Runner manual (similar but different hardware) */
286 /* talks about 55Hz and 1790ms vblank duration. */
287 1, /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
288 0,
289
290 /* video hardware */
291 32*8, 32*8, { 1*8, 31*8-1, 0*8, 32*8-1 },
292 gfxdecodeinfo,
293 128+32, 16*8+16*8,
294 travrusa_vh_convert_color_prom,
295
296 VIDEO_TYPE_RASTER,
297 0,
298 travrusa_vh_start,
299 0,
300 travrusa_vh_screenrefresh,
301
302 /* sound hardware */
303 0,0,0,0,
304 {
305 IREM_AUDIO
306 }
307 };
308
309
310 /***************************************************************************
311
312 Game driver(s)
313
314 ***************************************************************************/
315
316
317 ROM_START( travrusa )
318 ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
319 ROM_LOAD( "zippyrac.000", 0x0000, 0x2000, 0xbe066c0a )
320 ROM_LOAD( "zippyrac.005", 0x2000, 0x2000, 0x145d6b34 )
321 ROM_LOAD( "zippyrac.006", 0x4000, 0x2000, 0xe1b51383 )
322 ROM_LOAD( "zippyrac.007", 0x6000, 0x2000, 0x85cd1a51 )
323
324 ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for sound cpu */
325 ROM_LOAD( "mr10.1a", 0xf000, 0x1000, 0xa02ad8a0 )
326
327 ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
328 ROM_LOAD( "zippyrac.001", 0x00000, 0x2000, 0xaa8994dd )
329 ROM_LOAD( "mr8.3c", 0x02000, 0x2000, 0x3a046dd1 )
330 ROM_LOAD( "mr9.3a", 0x04000, 0x2000, 0x1cc3d3f4 )
331
332 ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
333 ROM_LOAD( "zippyrac.008", 0x00000, 0x2000, 0x3e2c7a6b )
334 ROM_LOAD( "zippyrac.009", 0x02000, 0x2000, 0x13be6a14 )
335 ROM_LOAD( "zippyrac.010", 0x04000, 0x2000, 0x6fcc9fdb )
336
337 ROM_REGION( 0x0220, REGION_PROMS )
338 ROM_LOAD( "mmi6349.ij", 0x0000, 0x0200, 0xc9724350 ) /* character palette - last $100 are unused */
339 ROM_LOAD( "tbp18s.2", 0x0100, 0x0020, 0xa1130007 ) /* sprite palette */
340 ROM_LOAD( "tbp24s10.3", 0x0120, 0x0100, 0x76062638 ) /* sprite lookup table */
341 ROM_END
342
ROM_START(motorace)343 ROM_START( motorace )
344 ROM_REGION( 0x12000, REGION_CPU1 ) /* 64k for code */
345 ROM_LOAD( "mr.cpu", 0x10000, 0x2000, 0x89030b0c ) /* we load the ROM at 10000-11fff, */
346 /* it will be decrypted at 0000 */
347 ROM_LOAD( "mr1.3l", 0x2000, 0x2000, 0x0904ed58 )
348 ROM_LOAD( "mr2.3k", 0x4000, 0x2000, 0x8a2374ec )
349 ROM_LOAD( "mr3.3j", 0x6000, 0x2000, 0x2f04c341 )
350
351 ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for sound cpu */
352 ROM_LOAD( "mr10.1a", 0xf000, 0x1000, 0xa02ad8a0 )
353
354 ROM_REGION( 0x06000, REGION_GFX1 | REGIONFLAG_DISPOSE )
355 ROM_LOAD( "mr7.3e", 0x00000, 0x2000, 0x492a60be )
356 ROM_LOAD( "mr8.3c", 0x02000, 0x2000, 0x3a046dd1 )
357 ROM_LOAD( "mr9.3a", 0x04000, 0x2000, 0x1cc3d3f4 )
358
359 ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
360 ROM_LOAD( "mr4.3n", 0x00000, 0x2000, 0x5cf1a0d6 )
361 ROM_LOAD( "mr5.3m", 0x02000, 0x2000, 0xf75f2aad )
362 ROM_LOAD( "mr6.3k", 0x04000, 0x2000, 0x518889a0 )
363
364 ROM_REGION( 0x0220, REGION_PROMS )
365 ROM_LOAD( "mmi6349.ij", 0x0000, 0x0200, 0xc9724350 ) /* character palette - last $100 are unused */
366 ROM_LOAD( "tbp18s.2", 0x0100, 0x0020, 0xa1130007 ) /* sprite palette */
367 ROM_LOAD( "tbp24s10.3", 0x0120, 0x0100, 0x76062638 ) /* sprite lookup table */
368 ROM_END
369
370
371
372 void init_motorace(void)
373 {
374 int A,i,j;
375 unsigned char *RAM = memory_region(REGION_CPU1);
376
377
378 /* The first CPU ROM has the address and data lines scrambled */
379 for (A = 0;A < 0x2000;A++)
380 {
381 int bit[13];
382
383
384 for (i = 0;i < 13;i++)
385 bit[i] = (A >> i) & 1;
386
387 j =
388 (bit[11] << 0) +
389 (bit[ 0] << 1) +
390 (bit[ 2] << 2) +
391 (bit[ 4] << 3) +
392 (bit[ 6] << 4) +
393 (bit[ 8] << 5) +
394 (bit[10] << 6) +
395 (bit[12] << 7) +
396 (bit[ 1] << 8) +
397 (bit[ 3] << 9) +
398 (bit[ 5] << 10) +
399 (bit[ 7] << 11) +
400 (bit[ 9] << 12);
401
402 for (i = 0;i < 8;i++)
403 bit[i] = (RAM[A + 0x10000] >> i) & 1;
404
405 RAM[j] =
406 (bit[5] << 0) +
407 (bit[0] << 1) +
408 (bit[3] << 2) +
409 (bit[6] << 3) +
410 (bit[1] << 4) +
411 (bit[4] << 5) +
412 (bit[7] << 6) +
413 (bit[2] << 7);
414 }
415 }
416
417
418
419 GAME( 1983, travrusa, 0, travrusa, travrusa, 0, ROT270, "Irem", "Traverse USA / Zippy Race" )
420 GAME( 1983, motorace, travrusa, travrusa, motorace, motorace, ROT270, "Irem (Williams license)", "MotoRace USA" )
421