1 // license:BSD-3-Clause
2 // copyright-holders:Lee Taylor
3 // thanks-to:John Clegg,Tomasz Slanina
4 /****************************************************************************
5 
6 Traverse USA / Zippy Race  (c) 1983 Irem
7 Shot Rider                 (c) 1984 Seibu Kaihatsu / Sigma
8 
9 driver by
10 Lee Taylor
11 John Clegg
12 Tomasz Slanina
13 
14 Notes:
15 - I haven't understood how char/sprite priority works. This is used for
16   tunnels. I hacked it just by making the two needed colors opaque. They
17   don't seem to be used anywhere else. Even if it looks like a hack, it might
18   really be how the hardware works - see also notes regarding Kung Fu Master
19   at the beginning of m62.c.
20 - shtrider has some weird colors (pink cars, green "Seibu" truck, 'no'
21   on hiscore table) but there's no reason to think there's something wrong
22   with the driver.
23 
24 TODO:
25 - shtrider dip switches and figure out flip screen (not same as travrusa)
26 
27 ****************************************************************************
28 
29 Shot Rider
30 PCB layout:
31 
32 --------------------CCCCCCCCCCC------------------
33 
34   P P              OKI                       2764
35  * 2764 2764 2764      AY  AY  x 2764  2764  2764
36 
37  E           D  D                            P P
38 
39                       2764 2764 2764
40 --------------------------------------------------
41   C  - connector
42   P  - proms
43   E  - connector for  big black epoxy block
44   D  - dips
45   *  - empty rom socket
46   x  - 40 pin chip, surface scratched (6803)
47 
48 Epoxy block contains main cpu (Z80)
49 and 2764 eprom (swapped D3/D4 and D5/D6 data lines)
50 
51 ****************************************************************************/
52 
53 #include "emu.h"
54 #include "includes/travrusa.h"
55 #include "audio/irem.h"
56 
57 #include "cpu/z80/z80.h"
58 #include "screen.h"
59 
60 
main_map(address_map & map)61 void travrusa_state::main_map(address_map &map)
62 {
63 	map(0x0000, 0x7fff).rom();
64 	map(0x8000, 0x8fff).ram().w(FUNC(travrusa_state::travrusa_videoram_w)).share("videoram");
65 	map(0x9000, 0x9000).w(FUNC(travrusa_state::travrusa_scroll_x_low_w));
66 	map(0xa000, 0xa000).w(FUNC(travrusa_state::travrusa_scroll_x_high_w));
67 	map(0xc800, 0xc9ff).writeonly().share("spriteram");
68 	map(0xd000, 0xd000).w("irem_audio", FUNC(irem_audio_device::cmd_w));
69 	map(0xd001, 0xd001).w(FUNC(travrusa_state::travrusa_flipscreen_w));    /* + coin counters - not written by shtrider */
70 	map(0xd000, 0xd000).portr("SYSTEM");     /* IN0 */
71 	map(0xd001, 0xd001).portr("P1");         /* IN1 */
72 	map(0xd002, 0xd002).portr("P2");         /* IN2 */
73 	map(0xd003, 0xd003).portr("DSW1");       /* DSW1 */
74 	map(0xd004, 0xd004).portr("DSW2");       /* DSW2 */
75 	map(0xe000, 0xefff).ram();
76 }
77 
78 static INPUT_PORTS_START( travrusa )
79 	PORT_START("SYSTEM")
80 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
81 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
82 	/* coin input must be active for 19 frames to be consistently recognized */
83 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(19)
84 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
85 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
86 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
87 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
88 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
89 
90 	PORT_START("P1")
91 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
92 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
93 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
94 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
95 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
96 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
97 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
98 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
99 
100 	PORT_START("P2")
101 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
102 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
103 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
104 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
105 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
106 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
107 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
108 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
109 
110 	PORT_START("DSW1")
111 	PORT_DIPNAME( 0x03, 0x03, "Fuel Reduced on Collision" ) PORT_DIPLOCATION("DSW1:1,2")
112 	PORT_DIPSETTING(    0x03, DEF_STR( Low ) )
113 	PORT_DIPSETTING(    0x02, "Med" )
114 	PORT_DIPSETTING(    0x01, "Hi" )
115 	PORT_DIPSETTING(    0x00, "Max" )
116 	PORT_DIPNAME( 0x04, 0x04, "Fuel Consumption" )      PORT_DIPLOCATION("DSW1:3")
117 	PORT_DIPSETTING(    0x04, DEF_STR( Low ) )
118 	PORT_DIPSETTING(    0x00, "Hi" )
119 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("DSW1:4")
120 	PORT_DIPSETTING(    0x08, DEF_STR( No ) )
121 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
122 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coinage ) )      PORT_DIPLOCATION("DSW1:5,6,7,8")
123 	PORT_DIPSETTING(    0x80, "Not Used" )          PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
124 	PORT_DIPSETTING(    0x90, "Not Used" )          PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
125 	PORT_DIPSETTING(    0xa0, DEF_STR( 6C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
126 	PORT_DIPSETTING(    0xb0, DEF_STR( 5C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
127 	PORT_DIPSETTING(    0xc0, DEF_STR( 4C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
128 	PORT_DIPSETTING(    0xd0, DEF_STR( 3C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
129 	PORT_DIPSETTING(    0xe0, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
130 	PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
131 	PORT_DIPSETTING(    0x70, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
132 	PORT_DIPSETTING(    0x60, DEF_STR( 1C_3C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
133 	PORT_DIPSETTING(    0x50, DEF_STR( 1C_4C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
134 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_5C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
135 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_6C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
136 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_7C ) )        PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
137 	PORT_DIPSETTING(    0x10, "Not Used" )          PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
138 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )    PORT_CONDITION("DSW2", 0x04, EQUALS, 0x04)
139 
140 	PORT_DIPSETTING(    0x80, DEF_STR( Free_Play ) )    PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
141 	PORT_DIPSETTING(    0x90, "A 3C_1C / B 1C_3C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
142 	PORT_DIPSETTING(    0xa0, "A 2C_1C / B 1C_3C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
143 	PORT_DIPSETTING(    0xb0, "A 1C_1C / B 1C_3C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
144 	PORT_DIPSETTING(    0xc0, DEF_STR( Free_Play ) )    PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
145 	PORT_DIPSETTING(    0xd0, "A 3C_1C / B 1C_2C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
146 	PORT_DIPSETTING(    0xe0, "A 2C_1C / B 1C_2C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
147 	PORT_DIPSETTING(    0xf0, "A 1C_1C / B 1C_2C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
148 	PORT_DIPSETTING(    0x70, "A 1C_1C / B 1C_5C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
149 	PORT_DIPSETTING(    0x60, "A 2C_1C / B 1C_5C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
150 	PORT_DIPSETTING(    0x50, "A 3C_1C / B 1C_5C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
151 	PORT_DIPSETTING(    0x40, DEF_STR( Free_Play ) )    PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
152 	PORT_DIPSETTING(    0x30, "A 1C_1C / B 1C_6C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
153 	PORT_DIPSETTING(    0x20, "A 2C_1C / B 1C_6C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
154 	PORT_DIPSETTING(    0x10, "A 3C_1C / B 1C_6C" )     PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
155 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )    PORT_CONDITION("DSW2", 0x04, EQUALS, 0x00)
156 
157 	PORT_START("DSW2")
158 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("DSW2:1")
159 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
160 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
161 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("DSW2:2")
162 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
163 	PORT_DIPSETTING(    0x02, DEF_STR( Cocktail ) )
164 	PORT_DIPNAME( 0x04, 0x04, "Coin Mode" )         PORT_DIPLOCATION("DSW2:3")
165 	PORT_DIPSETTING(    0x04, "Mode 1" )
166 	PORT_DIPSETTING(    0x00, "Mode 2" )
167 	PORT_DIPNAME( 0x08, 0x08, "Speed Type" )        PORT_DIPLOCATION("DSW2:4")
168 	PORT_DIPSETTING(    0x08, "M/H" ) //mph ?
169 	PORT_DIPSETTING(    0x00, "Km/H" )
170 	/* In stop mode, press 2 to stop and 1 to restart */
171 	PORT_DIPNAME( 0x10, 0x10, "Stop Mode (Cheat)")      PORT_DIPLOCATION("DSW2:5")
172 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
173 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
174 	PORT_DIPNAME( 0x20, 0x20, "Title" )         PORT_DIPLOCATION("DSW2:6")
175 	PORT_DIPSETTING(    0x20, "Traverse USA" )
176 	PORT_DIPSETTING(    0x00, "Zippy Race" )
177 	PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)")    PORT_DIPLOCATION("DSW2:7")
178 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
179 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
180 	PORT_SERVICE_DIPLOC( 0x80, 0x80, "DSW2:8")
181 INPUT_PORTS_END
182 
183 /* same as travrusa, no "Title" switch */
184 static INPUT_PORTS_START( motorace )
185 	PORT_INCLUDE( travrusa )
186 
187 	PORT_MODIFY("DSW2")
188 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "DSW2:6")
189 INPUT_PORTS_END
190 
191 static INPUT_PORTS_START( shtrider )
192 	PORT_START("SYSTEM")
193 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
194 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
195 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
196 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
197 	PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNUSED )
198 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
199 
200 	PORT_START("P1")
201 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
202 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
203 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
204 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
205 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
206 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
207 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
208 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
209 
210 	PORT_START("P2")
211 	PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
212 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
213 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
214 	PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
215 
216 	PORT_START("DSW1")
217 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) )       PORT_DIPLOCATION("DSW1:1,2,3")
218 	PORT_DIPSETTING(    0x00, DEF_STR( 5C_1C ) )
219 	PORT_DIPSETTING(    0x04, DEF_STR( 4C_1C ) )
220 	PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
221 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_1C ) )
222 	PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) )
223 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_2C ) )
224 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) )
225 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_5C ) )
226 	PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coin_B ) )       PORT_DIPLOCATION("DSW1:4,5")
227 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
228 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
229 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_1C ) )
230 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
231 	PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSW1:6" )
232 	PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSW1:7" )
233 	PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSW1:8" )
234 
235 	PORT_START("DSW2")
236 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("DSW2:1")
237 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
238 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
239 	PORT_DIPNAME( 0x02, 0x02, "Speed Display" )     PORT_DIPLOCATION("DSW2:2")
240 	PORT_DIPSETTING(    0x02, "km/h" )
241 	PORT_DIPSETTING(    0x00, "mph" )
242 	PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "DSW2:3" )
243 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("DSW2:4")
244 	PORT_DIPSETTING(    0x08, DEF_STR( Upright ) )
245 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
246 	PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DSW2:5" )
247 	PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DSW2:6" )
248 	PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSW2:7" )
249 	PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSW2:8" )
250 INPUT_PORTS_END
251 
252 
253 
254 static const gfx_layout charlayout =
255 {
256 	8,8,
257 	RGN_FRAC(1,3),
258 	3,
259 	{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
260 	{ 0, 1, 2, 3, 4, 5, 6, 7 },
261 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
262 	8*8
263 };
264 
265 static const gfx_layout spritelayout =
266 {
267 	16,16,
268 	RGN_FRAC(1,3),
269 	3,
270 	{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
271 	{ 0, 1, 2, 3, 4, 5, 6, 7,
272 			16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
273 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
274 			8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
275 	32*8
276 };
277 
278 static const gfx_layout shtrider_spritelayout =
279 {
280 	16,16,
281 	RGN_FRAC(1,3),
282 	3,
283 	{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
284 	{ 0, 1, 2, 3, 4, 5, 6, 7,
285 			8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
286 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
287 			16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
288 	32*8
289 };
290 
291 static GFXDECODE_START( gfx_travrusa )
292 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,      0, 16 )
293 	GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*8, 16 )
294 GFXDECODE_END
295 
GFXDECODE_START(gfx_shtrider)296 static GFXDECODE_START( gfx_shtrider )
297 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,               0, 16 )
298 	GFXDECODE_ENTRY( "gfx2", 0, shtrider_spritelayout, 16*8, 16 )
299 GFXDECODE_END
300 
301 void travrusa_state::machine_reset()
302 {
303 	m_scrollx[0] = 0;
304 	m_scrollx[1] = 0;
305 }
306 
travrusa(machine_config & config)307 void travrusa_state::travrusa(machine_config &config)
308 {
309 	/* basic machine hardware */
310 	Z80(config, m_maincpu, 4000000);   /* 4 MHz (?) */
311 	m_maincpu->set_addrmap(AS_PROGRAM, &travrusa_state::main_map);
312 	m_maincpu->set_vblank_int("screen", FUNC(travrusa_state::irq0_line_hold));
313 
314 	/* video hardware */
315 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
316 	screen.set_refresh_hz(56.75);
317 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(1790)   /* accurate frequency, measured on a Moon Patrol board, is 56.75Hz. */);
318 				/* the Lode Runner manual (similar but different hardware) */
319 				/* talks about 55Hz and 1790ms vblank duration. */
320 	screen.set_size(32*8, 32*8);
321 	screen.set_visarea(1*8, 31*8-1, 0*8, 32*8-1);
322 	screen.set_screen_update(FUNC(travrusa_state::screen_update_travrusa));
323 	screen.set_palette(m_palette);
324 
325 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_travrusa);
326 	PALETTE(config, m_palette, FUNC(travrusa_state::travrusa_palette), 16*8+16*8, 128+16);
327 
328 	/* sound hardware */
329 	//m52_sound_c_audio(config);
330 	IREM_M52_SOUNDC_AUDIO(config, "irem_audio", 0);
331 }
332 
shtrider(machine_config & config)333 void travrusa_state::shtrider(machine_config &config)
334 {
335 	travrusa(config);
336 
337 	/* video hardware */
338 	m_gfxdecode->set_info(gfx_shtrider);
339 	m_palette->set_init(FUNC(travrusa_state::shtrider_palette));
340 }
341 
shtriderb(machine_config & config)342 void travrusa_state::shtriderb(machine_config &config)
343 {
344 	travrusa(config);
345 
346 	/* video hardware */
347 	m_gfxdecode->set_info(gfx_shtrider);
348 }
349 
350 /***************************************************************************
351 
352   Game driver(s)
353 
354 ***************************************************************************/
355 
356 
357 ROM_START( travrusa )
358 	ROM_REGION( 0x10000, "maincpu", 0 )
CRC(be066c0a)359 	ROM_LOAD( "zr1-0.m3",     0x0000, 0x2000, CRC(be066c0a) SHA1(fed0ef114b08519b99d77485b73768a838d2f06e) )
360 	ROM_LOAD( "zr1-5.l3",     0x2000, 0x2000, CRC(145d6b34) SHA1(c9e2bd1d3e62c496e4c5057c4012b069dfcf592d) )
361 	ROM_LOAD( "zr1-6a.k3",    0x4000, 0x2000, CRC(e1b51383) SHA1(34f4476c1bcc28c53c8ffa7b614f443a329aae13) )
362 	ROM_LOAD( "zr1-7.j3",     0x6000, 0x2000, CRC(85cd1a51) SHA1(7eb046514845cb9d2507ee24d1b2f7cc5402ac02) )
363 
364 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
365 	ROM_LOAD( "mr10.1a",      0x7000, 0x1000, CRC(a02ad8a0) SHA1(aff80b506dbecabed2a36eb743693940f6a22d16) )
366 
367 	ROM_REGION( 0x06000, "gfx1", 0 )
368 	ROM_LOAD( "zippyrac.001", 0x0000, 0x2000, CRC(aa8994dd) SHA1(9b326ce52a03d723e5c3c1b5fd4aa8fa7f70f904) )
369 	ROM_LOAD( "mr8.3c",       0x2000, 0x2000, CRC(3a046dd1) SHA1(65c1dd1c0b5fb72ac5c04e11a577308245e4b312) )
370 	ROM_LOAD( "mr9.3a",       0x4000, 0x2000, CRC(1cc3d3f4) SHA1(e7ee365d43d783cb6b7df37c6edeadbed35318d9) )
371 
372 	ROM_REGION( 0x06000, "gfx2", 0 )
373 	ROM_LOAD( "zr1-8.n3",     0x0000, 0x2000, CRC(3e2c7a6b) SHA1(abc9eeb656ab6ed5f14e10fc988f75f21ccf037a) )
374 	ROM_LOAD( "zr1-9.l3",     0x2000, 0x2000, CRC(13be6a14) SHA1(47861910fe4c46cd72634cf7d834be2da2a0a4f9) )
375 	ROM_LOAD( "zr1-10.k3",    0x4000, 0x2000, CRC(6fcc9fdb) SHA1(88f878b9ebf07c5a16f8cb742016cac971ed3f10) )
376 
377 	ROM_REGION( 0x0320, "proms", 0 )
378 	ROM_LOAD( "mmi6349.ij",   0x0000, 0x0200, CRC(c9724350) SHA1(1fac20cdc0a53d94e8f67b49d7dd71d1b9f1f7ef) ) /* character palette - last $100 are unused */
379 	ROM_LOAD( "tbp18s.2",     0x0200, 0x0020, CRC(a1130007) SHA1(9deb0eed75dd06e86f83c819a3393158be7c9dce) ) /* sprite palette */
380 	ROM_LOAD( "tbp24s10.3",   0x0220, 0x0100, CRC(76062638) SHA1(7378a26cf455d9d3df90929dc665870514c34b54) ) /* sprite lookup table */
381 ROM_END
382 
383 	/* Bootleg - "American Top" printed on title - (c) 1983 I.P. - Zippy Race graphic logo is blanked out - Main ROM0-ROM3 test NG */
384 ROM_START( travrusab )
385 	ROM_REGION( 0x10000, "maincpu", 0 )
386 	ROM_LOAD( "at4.m3",       0x0000, 0x2000, CRC(704ce6e4) SHA1(77385d853e3d5085c6ab155417e2b42212aff6fc) )
387 	ROM_LOAD( "at5.l3",       0x2000, 0x2000, CRC(686cb0e6) SHA1(64c7e682a181bae159cca60ffa617c532b1e16d3) )
388 	ROM_LOAD( "at6.k3",       0x4000, 0x2000, CRC(baf87d80) SHA1(761d687ef3f3dde80a47f547d3c822704a2ac821) )
389 	ROM_LOAD( "at7.h3",       0x6000, 0x2000, CRC(48091ebe) SHA1(6146af6f08053a5955d9b388d25bfbab7ad6b0e5) )
390 
391 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
392 	ROM_LOAD( "11.a1",        0x7000, 0x1000, CRC(d2c0bc33) SHA1(3a52ae514daf985d297416301dac0ac6cbe671d7) )
393 
394 	ROM_REGION( 0x06000, "gfx1", 0 )
395 	ROM_LOAD( "zippyrac.001", 0x0000, 0x2000, CRC(aa8994dd) SHA1(9b326ce52a03d723e5c3c1b5fd4aa8fa7f70f904) ) /* at1.e3 */
396 	ROM_LOAD( "mr8.3c",       0x2000, 0x2000, CRC(3a046dd1) SHA1(65c1dd1c0b5fb72ac5c04e11a577308245e4b312) ) /* at2.c3 */
397 	ROM_LOAD( "mr9.3a",       0x4000, 0x2000, CRC(1cc3d3f4) SHA1(e7ee365d43d783cb6b7df37c6edeadbed35318d9) ) /* at3.a3 */
398 
399 	ROM_REGION( 0x06000, "gfx2", 0 )
400 	ROM_LOAD( "8.n3",         0x0000, 0x2000, CRC(00c0f46b) SHA1(5fccc188af653785f3fc0f9d36dbbbab472f6fdc) )
401 	ROM_LOAD( "9.m3",         0x2000, 0x2000, CRC(73ade73b) SHA1(4da012d71e7c1f46407343cc8d4fbe0397b7db71) )
402 	ROM_LOAD( "10.k3",        0x4000, 0x2000, CRC(fcfeaa69) SHA1(a958caf70d2dc4a80298a395cb48db210e6ca16b) )
403 
404 	ROM_REGION( 0x0320, "proms", 0 )
405 	ROM_LOAD( "mmi6349.ij",   0x0000, 0x0200, CRC(c9724350) SHA1(1fac20cdc0a53d94e8f67b49d7dd71d1b9f1f7ef) ) /* character palette - last $100 are unused */
406 	ROM_LOAD( "tbp18s.2",     0x0200, 0x0020, CRC(a1130007) SHA1(9deb0eed75dd06e86f83c819a3393158be7c9dce) ) /* sprite palette */
407 	ROM_LOAD( "tbp24s10.3",   0x0220, 0x0100, CRC(76062638) SHA1(7378a26cf455d9d3df90929dc665870514c34b54) ) /* sprite lookup table */
408 ROM_END
409 
410 ROM_START( travrusab2 ) // all ROMs match travrusa but the ones where differently stated
411 	ROM_REGION( 0x10000, "maincpu", 0 )
412 	ROM_LOAD( "0.2m3", 0x0000, 0x2000, CRC(c96e81ac) SHA1(5b01269ce05604239b14ba7eaab8250c8ff17591) ) // unique
413 	ROM_LOAD( "5.2l3", 0x2000, 0x2000, CRC(145d6b34) SHA1(c9e2bd1d3e62c496e4c5057c4012b069dfcf592d) )
414 	ROM_LOAD( "6.2k3", 0x4000, 0x2000, CRC(e1b51383) SHA1(34f4476c1bcc28c53c8ffa7b614f443a329aae13) )
415 	ROM_LOAD( "7.2j3", 0x6000, 0x2000, CRC(ab8a3a33) SHA1(e332b6e727083cf508ccec721ce42ccc3aa54e91) ) // same as mototour
416 
417 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
418 	ROM_LOAD( "4.1a1", 0x7000, 0x1000, CRC(a02ad8a0) SHA1(aff80b506dbecabed2a36eb743693940f6a22d16) )
419 
420 	ROM_REGION( 0x06000, "gfx1", 0 )
421 	ROM_LOAD( "1.1e3", 0x0000, 0x2000, CRC(aa8994dd) SHA1(9b326ce52a03d723e5c3c1b5fd4aa8fa7f70f904) )
422 	ROM_LOAD( "2.1c3", 0x2000, 0x2000, CRC(3a046dd1) SHA1(65c1dd1c0b5fb72ac5c04e11a577308245e4b312) )
423 	ROM_LOAD( "3.1a3", 0x4000, 0x2000, CRC(1cc3d3f4) SHA1(e7ee365d43d783cb6b7df37c6edeadbed35318d9) )
424 
425 	ROM_REGION( 0x06000, "gfx2", 0 )
426 	ROM_LOAD( "8.3n3",  0x0000, 0x2000, CRC(3e2c7a6b) SHA1(abc9eeb656ab6ed5f14e10fc988f75f21ccf037a) )
427 	ROM_LOAD( "9.3m3",  0x2000, 0x2000, CRC(13be6a14) SHA1(47861910fe4c46cd72634cf7d834be2da2a0a4f9) )
428 	ROM_LOAD( "10.3k3", 0x4000, 0x2000, CRC(6fcc9fdb) SHA1(88f878b9ebf07c5a16f8cb742016cac971ed3f10) )
429 
430 	ROM_REGION( 0x0320, "proms", 0 )
431 	ROM_LOAD( "6349-2.1k2",    0x0000, 0x0200, CRC(c9724350) SHA1(1fac20cdc0a53d94e8f67b49d7dd71d1b9f1f7ef) ) // character palette - last $100 are unused
432 	ROM_LOAD( "tbp18s030.3f1", 0x0200, 0x0020, CRC(a1130007) SHA1(9deb0eed75dd06e86f83c819a3393158be7c9dce) ) // sprite palette
433 	ROM_LOAD( "mb7052.3h2",    0x0220, 0x0100, CRC(76062638) SHA1(7378a26cf455d9d3df90929dc665870514c34b54) ) // sprite lookup table
434 ROM_END
435 
436 ROM_START( motorace )
437 	ROM_REGION( 0x12000, "maincpu", 0 )
438 	ROM_LOAD( "mr.cpu",       0x0000, 0x2000, CRC(89030b0c) SHA1(dec4209385bbccff4a3c0d93d6507110ef841331) )    /* encrypted */
439 	ROM_LOAD( "mr1.3l",       0x2000, 0x2000, CRC(0904ed58) SHA1(2776e031cb58f99103bc35299bffd7612d954608) )
440 	ROM_LOAD( "mr2.3k",       0x4000, 0x2000, CRC(8a2374ec) SHA1(7159731f5ef2485e3c822e3e8e51e9583dd1c6bc) )
441 	ROM_LOAD( "mr3.3j",       0x6000, 0x2000, CRC(2f04c341) SHA1(ae990d9d4abdd7d6ef9d21aa62125fe2e0067623) )
442 
443 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
444 	ROM_LOAD( "mr10.1a",      0x7000, 0x1000, CRC(a02ad8a0) SHA1(aff80b506dbecabed2a36eb743693940f6a22d16) )
445 
446 	ROM_REGION( 0x06000, "gfx1", 0 )
447 	ROM_LOAD( "mr7.3e",       0x0000, 0x2000, CRC(492a60be) SHA1(9a3d6407b834eb7c3e3c8bb292ff124550a2787c) )
448 	ROM_LOAD( "mr8.3c",       0x2000, 0x2000, CRC(3a046dd1) SHA1(65c1dd1c0b5fb72ac5c04e11a577308245e4b312) )
449 	ROM_LOAD( "mr9.3a",       0x4000, 0x2000, CRC(1cc3d3f4) SHA1(e7ee365d43d783cb6b7df37c6edeadbed35318d9) )
450 
451 	ROM_REGION( 0x06000, "gfx2", 0 )
452 	ROM_LOAD( "mr4.3n",       0x0000, 0x2000, CRC(5cf1a0d6) SHA1(ef0883e71ee1e9c38cf3f444d9d8e79a08076b78) )
453 	ROM_LOAD( "mr5.3m",       0x2000, 0x2000, CRC(f75f2aad) SHA1(e4a8a3da56cbc04f0c9041afac182d1bfceb1d0d) )
454 	ROM_LOAD( "mr6.3k",       0x4000, 0x2000, CRC(518889a0) SHA1(70b417104ce86132cb5542813c1e0509b2260756) )
455 
456 	ROM_REGION( 0x0320, "proms", 0 )
457 	ROM_LOAD( "mmi6349.ij",   0x0000, 0x0200, CRC(c9724350) SHA1(1fac20cdc0a53d94e8f67b49d7dd71d1b9f1f7ef) ) /* character palette - last $100 are unused */
458 	ROM_LOAD( "tbp18s.2",     0x0200, 0x0020, CRC(a1130007) SHA1(9deb0eed75dd06e86f83c819a3393158be7c9dce) ) /* sprite palette */
459 	ROM_LOAD( "tbp24s10.3",   0x0220, 0x0100, CRC(76062638) SHA1(7378a26cf455d9d3df90929dc665870514c34b54) ) /* sprite lookup table */
460 ROM_END
461 
462 /*
463 
464 Moto Tour is a Tecfri licensed version of Traverse USA/Zippy Race from Irem
465 
466 This version doesn't have the MSM5202 but still has the sounds produced by the 5202 with a lower quality, I guess it converts the sound data to analog in some way, also this version is unprotected, doesn't have the epoxy block.
467 
468 Unfortunately the eprom's labels have disappeared, so I name it similar to Traverse USA but with the letters mt (Moto Tour)
469 
470 Rom Info
471 
472 snd.a1  ------  sound code, 100% identical to Traverse Usa/Zippy race
473 
474 mt1-1.e3 \
475 mt1-2.c3  -- Backgrounds?, 100% identical to Traverse Usa/Zippy race
476 mt1-3.a3 /
477 
478 mt1-4.m3  \
479 mt1-5.l3  ==
480 mt1-6.k3  ==  Main cpu. Different from the other sets
481 mt1-7.j3  /
482 
483 
484 mt1-8.n3  \
485 mt1-9.m3 --  Sprites. Apparently all different from the other sets
486 mt1-10.k3 /
487 
488 mm6349.k2 \
489 prom1.f1  --  color proms, identical to other versions
490 prom2.h2  /
491 
492 Ricky2001
493 
494 */
495 
496 ROM_START( mototour )
497 	ROM_REGION( 0x10000, "maincpu", 0 )
498 	ROM_LOAD( "mt1-4.m3",     0x0000, 0x2000, CRC(fe643567) SHA1(2e47b6de43ff7fc1f070d34376fde697fc719b80) )
499 	ROM_LOAD( "mt1-5.l3",     0x2000, 0x2000, CRC(38d9d0f5) SHA1(8b4531a28ff69df04a5eef687383dab57e0aa685) )
500 	ROM_LOAD( "mt1-6.k3",     0x4000, 0x2000, CRC(efd325f2) SHA1(0862c0ec87f601b6c1cba2bd25e3186b6ad0c68e) )
501 	ROM_LOAD( "mt1-7.j3",     0x6000, 0x2000, CRC(ab8a3a33) SHA1(e332b6e727083cf508ccec721ce42ccc3aa54e91) )
502 
503 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
504 	ROM_LOAD( "snd.a1",      0x7000, 0x1000, CRC(a02ad8a0) SHA1(aff80b506dbecabed2a36eb743693940f6a22d16) ) // == mr10.1a
505 
506 	ROM_REGION( 0x06000, "gfx1", 0 )
507 	ROM_LOAD( "mt1-1.e3", 0x0000, 0x2000, CRC(aa8994dd) SHA1(9b326ce52a03d723e5c3c1b5fd4aa8fa7f70f904) ) // == zippyrac.001
508 	ROM_LOAD( "mt1-2.c3", 0x2000, 0x2000, CRC(3a046dd1) SHA1(65c1dd1c0b5fb72ac5c04e11a577308245e4b312) ) // == mr8.3c
509 	ROM_LOAD( "mt1-3.a3", 0x4000, 0x2000, CRC(1cc3d3f4) SHA1(e7ee365d43d783cb6b7df37c6edeadbed35318d9) ) // == mr9.3a
510 
511 	ROM_REGION( 0x06000, "gfx2", 0 )
512 	ROM_LOAD( "mt1-8..n3",    0x0000, 0x2000, CRC(600a57f5) SHA1(86c2b2efb9392b7eca44510587d2459388c40435) )
513 	ROM_LOAD( "mt1-9..m3",    0x2000, 0x2000, CRC(6f9f2a4e) SHA1(8ebdd69895a4dd5de7fe84505359cccaa0aca6f8) )
514 	ROM_LOAD( "mt1-10..k3",   0x4000, 0x2000, CRC(d958def5) SHA1(198adf7e87804bd018b8cfa8bbc68623255698a2) )
515 
516 	ROM_REGION( 0x0320, "proms", 0 )
517 	ROM_LOAD( "mmi6349.k2", 0x0000, 0x0200, CRC(c9724350) SHA1(1fac20cdc0a53d94e8f67b49d7dd71d1b9f1f7ef) ) /* character palette - last $100 are unused */ // == mmi6349.ij
518 	ROM_LOAD( "prom1.f1",   0x0200, 0x0020, CRC(a1130007) SHA1(9deb0eed75dd06e86f83c819a3393158be7c9dce) ) /* sprite palette */ // == tbp18s.2
519 	ROM_LOAD( "prom2.h2",   0x0220, 0x0100, CRC(76062638) SHA1(7378a26cf455d9d3df90929dc665870514c34b54) ) /* sprite lookup table */ // == tbp24s10.3
520 ROM_END
521 
522 
523 /* it's probably a bootleg of the original Seibu version with the roms decrypted (no epoxy block) */
524 ROM_START( shtrider )
525 	ROM_REGION( 0x10000, "maincpu", 0 )
526 	ROM_LOAD( "sr01a.bin", 0x0000, 0x2000, CRC(de76d537) SHA1(5ad90571c451b0d7b7a569556cfe075ead00fa2b) )
527 	ROM_LOAD( "sr02a.bin", 0x2000, 0x2000, CRC(cd1e1bfc) SHA1(fb156b5e5a5e7a24575264b391e0f3756ef3e021) )
528 	ROM_LOAD( "sr03a.bin", 0x4000, 0x2000, CRC(3ade11b9) SHA1(70b9dbd510cf6192194acf6876856d4c19bdf279) )
529 	ROM_LOAD( "sr04a.bin", 0x6000, 0x2000, CRC(02b96eaa) SHA1(ba4d61cf57142192684c45dd22720234d3521241) )
530 
531 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
532 	ROM_LOAD( "sr11a.bin", 0x6000, 0x2000, CRC(a8396b76) SHA1(614151fb1d25930e9fee4ab290a63f8fe97adbe6) )
533 
534 	ROM_REGION( 0x06000, "gfx1", 0 )
535 	ROM_LOAD( "sr05a.bin", 0x0000, 0x2000, CRC(34449f79) SHA1(30aa9da07bf32282d213f63e50c564a336fd0102) )
536 	ROM_LOAD( "sr06a.bin", 0x2000, 0x2000, CRC(de43653d) SHA1(a9fae236ee8e32d576123a4871ba3c46ca78ec3b) )
537 	ROM_LOAD( "sr07a.bin", 0x4000, 0x2000, CRC(3445b81c) SHA1(6768d411f8c3a347b10908e757a701d5b71ca2bc) )
538 
539 	ROM_REGION( 0x06000, "gfx2", 0 )
540 	ROM_LOAD( "sr08a.bin", 0x0000, 0x2000, CRC(4072b096) SHA1(e43482ac916a0fa259f74f99dc6ef72e86c23d9d) )
541 	ROM_LOAD( "sr09a.bin", 0x2000, 0x2000, CRC(fd4cc7e6) SHA1(3852883d32354e8c90c6cf701581ebc57d830c8b) )
542 	ROM_LOAD( "sr10b.bin", 0x4000, 0x2000, CRC(0a117925) SHA1(e061254428874b6153c2e9e514122373395f4da1) )
543 
544 	ROM_REGION( 0x0420,  "proms", 0 )
545 	ROM_LOAD( "1.bpr",   0x0000, 0x0100, CRC(e9e258e5) SHA1(b98df686e8e2afa9ed05a56e1d3acb0d7cee3888) )
546 	ROM_LOAD( "2.bpr",   0x0100, 0x0100, CRC(6cf4591c) SHA1(3a5795758811f4fe3518216491ac13c0d17e842f) )
547 	ROM_LOAD( "4.bpr",   0x0200, 0x0020, CRC(ee97c581) SHA1(a5d0ba5e03f3bcbdd72f89f0495a98cef2821e59) )
548 	ROM_LOAD( "3.bpr",   0x0220, 0x0100, CRC(5db47092) SHA1(8e234ee88143755a4fd5ec86a03b55be5f9c5db8) )
549 ROM_END
550 
551 ROM_START( shtridera )
552 	ROM_REGION( 0x10000, "maincpu", 0 )
553 	ROM_LOAD( "1.bin",   0x0000, 0x2000, CRC(eb51315c) SHA1(0101c008b6731cd8ec796fee645113e2be79bd08) ) /* was inside epoxy block with cpu, encrypted */
554 	ROM_LOAD( "2.bin",   0x2000, 0x2000, CRC(97675d19) SHA1(774ce4d370fcbbd8a4109df023bf21db92d2e839) )
555 	ROM_LOAD( "3.bin",   0x4000, 0x2000, CRC(78d051cd) SHA1(e1dc2dcfc4af35bdd5245d23977e8640d81a43f1) )
556 	ROM_LOAD( "4.bin",   0x6000, 0x2000, CRC(02b96eaa) SHA1(ba4d61cf57142192684c45dd22720234d3521241) )
557 
558 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
559 	ROM_LOAD( "11.bin",   0x6000, 0x2000, CRC(a8396b76) SHA1(614151fb1d25930e9fee4ab290a63f8fe97adbe6) )
560 
561 	ROM_REGION( 0x06000, "gfx1", 0 )
562 	ROM_LOAD( "5.bin",   0x0000, 0x2000, CRC(34449f79) SHA1(30aa9da07bf32282d213f63e50c564a336fd0102) )
563 	ROM_LOAD( "6.bin",   0x2000, 0x2000, CRC(de43653d) SHA1(a9fae236ee8e32d576123a4871ba3c46ca78ec3b) )
564 	ROM_LOAD( "7.bin",   0x4000, 0x2000, CRC(3445b81c) SHA1(6768d411f8c3a347b10908e757a701d5b71ca2bc) )
565 
566 	ROM_REGION( 0x06000, "gfx2", 0 )
567 	ROM_LOAD( "8.bin",   0x0000, 0x2000, CRC(4072b096) SHA1(e43482ac916a0fa259f74f99dc6ef72e86c23d9d) )
568 	ROM_LOAD( "9.bin",   0x2000, 0x2000, CRC(fd4cc7e6) SHA1(3852883d32354e8c90c6cf701581ebc57d830c8b) )
569 	ROM_LOAD( "10.bin",  0x4000, 0x2000, CRC(0a117925) SHA1(e061254428874b6153c2e9e514122373395f4da1) )
570 
571 	ROM_REGION( 0x0420,  "proms", 0 )
572 	ROM_LOAD( "1.bpr",   0x0000, 0x0100, CRC(e9e258e5) SHA1(b98df686e8e2afa9ed05a56e1d3acb0d7cee3888) )
573 	ROM_LOAD( "2.bpr",   0x0100, 0x0100, CRC(6cf4591c) SHA1(3a5795758811f4fe3518216491ac13c0d17e842f) )
574 	ROM_LOAD( "4.bpr",   0x0200, 0x0020, CRC(ee97c581) SHA1(a5d0ba5e03f3bcbdd72f89f0495a98cef2821e59) )
575 	ROM_LOAD( "3.bpr",   0x0220, 0x0100, CRC(5db47092) SHA1(8e234ee88143755a4fd5ec86a03b55be5f9c5db8) )
576 ROM_END
577 
578 ROM_START( shtriderb )
579 	ROM_REGION( 0x10000, "maincpu", 0 )
580 	ROM_LOAD( "sr1.20.m3", 0x0000, 0x2000, CRC(8bca38d7) SHA1(97482ea1b6e5415df7149184dd5662d96a3e155a) )
581 	ROM_LOAD( "sr2.21.l3", 0x2000, 0x2000, CRC(56d4a66a) SHA1(e51a409ecc9f4d808678467ca7ce9bc0a35a7863) )
582 	ROM_LOAD( "sr3.22.k3", 0x4000, 0x2000, CRC(44cab4cc) SHA1(9e87d88353c858c25fb4ff9528c3f369505ffd88) )
583 	ROM_LOAD( "sr4.23.h3", 0x6000, 0x2000, CRC(02b96eaa) SHA1(ba4d61cf57142192684c45dd22720234d3521241) )
584 
585 	ROM_REGION( 0x8000, "irem_audio:iremsound", 0 )
586 	ROM_LOAD( "sr11.7.a1", 0x6000, 0x2000, CRC(a8396b76) SHA1(614151fb1d25930e9fee4ab290a63f8fe97adbe6) )
587 
588 	ROM_REGION( 0x06000, "gfx1", 0 )
589 	ROM_LOAD( "sr5.f3",  0x0000, 0x2000, CRC(34449f79) SHA1(30aa9da07bf32282d213f63e50c564a336fd0102) )
590 	ROM_LOAD( "sr6.c3",  0x2000, 0x2000, CRC(de43653d) SHA1(a9fae236ee8e32d576123a4871ba3c46ca78ec3b) )
591 	ROM_LOAD( "sr7.a3",  0x4000, 0x2000, CRC(3445b81c) SHA1(6768d411f8c3a347b10908e757a701d5b71ca2bc) )
592 
593 	ROM_REGION( 0x06000, "gfx2", 0 )
594 	ROM_LOAD( "sr8.17.n3", 0x0000, 0x2000, CRC(4072b096) SHA1(e43482ac916a0fa259f74f99dc6ef72e86c23d9d) )
595 	ROM_LOAD( "sr9.18.m3", 0x2000, 0x2000, CRC(fd4cc7e6) SHA1(3852883d32354e8c90c6cf701581ebc57d830c8b))
596 	ROM_LOAD( "sr10.19.k3",0x4000, 0x2000, CRC(0a117925) SHA1(e061254428874b6153c2e9e514122373395f4da1) )
597 
598 	ROM_REGION( 0x0420,  "proms", 0 )
599 	ROM_LOAD( "6349-2.k2",   0x0000, 0x0200, CRC(854487a7) SHA1(5f3a2a7f7ba89f945fda97debb5436af8a2c6885) )
600 	ROM_LOAD( "prom1.6.f1",   0x0200, 0x0020, CRC(ee97c581) SHA1(a5d0ba5e03f3bcbdd72f89f0495a98cef2821e59))
601 	ROM_LOAD( "prom2.12.h2",  0x0220, 0x0100, CRC(5db47092) SHA1(8e234ee88143755a4fd5ec86a03b55be5f9c5db8) )
602 ROM_END
603 
604 void travrusa_state::init_motorace()
605 {
606 	uint8_t *rom = memregion("maincpu")->base();
607 	uint8_t buffer[0x2000];
608 	memcpy(&buffer[0], rom, 0x2000);
609 
610 	/* The first CPU ROM has the address and data lines scrambled */
611 	for (int A = 0; A < 0x2000; A++)
612 	{
613 		int j = bitswap<16>(A,15,14,13,9,7,5,3,1,12,10,8,6,4,2,0,11);
614 		rom[j] = bitswap<8>(buffer[A],2,7,4,1,6,3,0,5);
615 	}
616 }
617 
init_shtridra()618 void travrusa_state::init_shtridra()
619 {
620 	uint8_t *rom = memregion("maincpu")->base();
621 
622 	/* D3/D4  and  D5/D6 swapped */
623 	for (int A = 0; A < 0x2000; A++)
624 		rom[A] = bitswap<8>(rom[A],7,5,6,3,4,2,1,0);
625 }
626 
shtridrb_port11_r()627 uint8_t travrusa_state::shtridrb_port11_r()
628 {
629 	printf("shtridrb_port11_r %04x\n", m_maincpu->pc());
630 	// reads, masks with 0xa8, checks for 0x88, resets game if not happy with value?
631 	return 0x88;
632 }
633 
634 
init_shtridrb()635 void travrusa_state::init_shtridrb()
636 {
637 	m_maincpu->space(AS_IO).install_read_handler(0x11, 0x11, 0, 0xff00, 0, read8smo_delegate(*this, FUNC(travrusa_state::shtridrb_port11_r)));
638 }
639 
640 
641 GAME( 1983, travrusa,   0,        travrusa, travrusa, travrusa_state, empty_init,    ROT270,                    "Irem",                           "Traverse USA / Zippy Race", MACHINE_SUPPORTS_SAVE )
642 GAME( 1983, travrusab,  travrusa, travrusa, travrusa, travrusa_state, empty_init,    ROT270,                    "bootleg (I.P.)",                 "Traverse USA (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
643 GAME( 1983, travrusab2, travrusa, travrusa, travrusa, travrusa_state, empty_init,    ROT270,                    "bootleg",                        "Traverse USA (bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) // still shows both Irem and Tecfri
644 GAME( 1983, mototour,   travrusa, travrusa, travrusa, travrusa_state, empty_init,    ROT270,                    "Irem (Tecfri license)",          "MotoTour / Zippy Race (Tecfri license)", MACHINE_SUPPORTS_SAVE )
645 GAME( 1983, motorace,   travrusa, travrusa, motorace, travrusa_state, init_motorace, ROT270,                    "Irem (Williams license)",        "MotoRace USA", MACHINE_SUPPORTS_SAVE )
646 
647 GAME( 1985, shtrider,   0,        shtrider, shtrider, travrusa_state, empty_init,    ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu",                 "Shot Rider", MACHINE_SUPPORTS_SAVE ) // possible bootleg
648 GAME( 1984, shtridera,  shtrider, shtrider, shtrider, travrusa_state, init_shtridra, ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu (Sigma license)", "Shot Rider (Sigma license)", MACHINE_SUPPORTS_SAVE )
649 GAME( 1985, shtriderb,  shtrider, shtriderb,shtrider, travrusa_state, init_shtridrb, ROT270|ORIENTATION_FLIP_X, "bootleg",                        "Shot Rider (bootleg)", MACHINE_SUPPORTS_SAVE ) // resets when you attempt to start a game?
650