1 /***************************************************************************
2
3 -= American Speedway =-
4
5 driver by Luca Elia (l.elia@tin.it)
6
7
8 CPU : Z80A x 2
9 Sound: YM2151
10
11
12 (c)1987 Enerdyne Technologies, Inc. / PGD
13
14 ***************************************************************************/
15
16 #include "driver.h"
17 #include "vidhrdw/generic.h"
18
19 /* Variables & functions defined in vidhrdw: */
20
21 WRITE_HANDLER( amspdwy_videoram_w );
22 WRITE_HANDLER( amspdwy_colorram_w );
23 WRITE_HANDLER( amspdwy_paletteram_w );
24 WRITE_HANDLER( amspdwy_flipscreen_w );
25
26 VIDEO_START( amspdwy );
27 VIDEO_UPDATE( amspdwy );
28
29
30 /***************************************************************************
31
32
33 Main CPU
34
35
36 ***************************************************************************/
37
38 /*
39 765----- Buttons
40 ---4---- Sgn(Wheel Delta)
41 ----3210 Abs(Wheel Delta)
42
43 Or last value when wheel delta = 0
44 */
45 #define AMSPDWY_WHEEL_R( _n_ ) \
46 READ_HANDLER( amspdwy_wheel_##_n_##_r ) \
47 { \
48 static data8_t wheel_old, ret; \
49 data8_t wheel = readinputport(5 + _n_); \
50 if (wheel != wheel_old) \
51 { \
52 wheel = (wheel & 0x7fff) - (wheel & 0x8000); \
53 if (wheel > wheel_old) ret = ((+wheel) & 0xf) | 0x00; \
54 else ret = ((-wheel) & 0xf) | 0x10; \
55 wheel_old = wheel; \
56 } \
57 return ret | readinputport(2 + _n_); \
58 }
59 AMSPDWY_WHEEL_R( 0 )
60 AMSPDWY_WHEEL_R( 1 )
61
62
READ_HANDLER(amspdwy_sound_r)63 READ_HANDLER( amspdwy_sound_r )
64 {
65 return (YM2151_status_port_0_r(0) & ~ 0x30) | readinputport(4);
66 }
67
WRITE_HANDLER(amspdwy_sound_w)68 WRITE_HANDLER( amspdwy_sound_w )
69 {
70 soundlatch_w(0,data);
71 cpu_set_nmi_line(1,PULSE_LINE);
72 }
73
MEMORY_READ_START(amspdwy_readmem)74 static MEMORY_READ_START( amspdwy_readmem )
75 { 0x0000, 0x7fff, MRA_ROM }, /* ROM*/
76 /* { 0x8000, 0x801f, MRA_RAM }, */ /* Palette*/
77 { 0x9000, 0x93ff, videoram_r }, /* Layer*/
78 { 0x9400, 0x97ff, videoram_r }, /* Mirror?*/
79 { 0x9800, 0x9bff, colorram_r }, /* Layer*/
80 { 0x9c00, 0x9fff, MRA_RAM }, /* Unused?*/
81 { 0xa000, 0xa000, input_port_0_r }, /* DSW 1*/
82 { 0xa400, 0xa400, input_port_1_r }, /* DSW 2*/
83 { 0xa800, 0xa800, amspdwy_wheel_0_r }, /* Player 1*/
84 { 0xac00, 0xac00, amspdwy_wheel_1_r }, /* Player 2*/
85 { 0xb400, 0xb400, amspdwy_sound_r }, /* YM2151 Status + Buttons*/
86 { 0xc000, 0xc0ff, MRA_RAM }, /* Sprites*/
87 { 0xe000, 0xe7ff, MRA_RAM }, /* Work RAM*/
88 MEMORY_END
89
90 static MEMORY_WRITE_START( amspdwy_writemem )
91 { 0x0000, 0x7fff, MWA_ROM }, /* ROM*/
92 { 0x8000, 0x801f, amspdwy_paletteram_w, &paletteram }, /* Palette*/
93 { 0x9000, 0x93ff, amspdwy_videoram_w, &videoram }, /* Layer*/
94 { 0x9400, 0x97ff, amspdwy_videoram_w }, /* Mirror?*/
95 { 0x9800, 0x9bff, amspdwy_colorram_w, &colorram }, /* Layer*/
96 { 0x9c00, 0x9fff, MWA_RAM }, /* Unused?*/
97 /* { 0xa000, 0xa000, MWA_NOP }, */ /* ?*/
98 { 0xa400, 0xa400, amspdwy_flipscreen_w }, /* Toggle Flip Screen?*/
99 { 0xb000, 0xb000, MWA_NOP }, /* ? Exiting IRQ*/
100 { 0xb400, 0xb400, amspdwy_sound_w }, /* To Sound CPU*/
101 { 0xc000, 0xc0ff, MWA_RAM, &spriteram, &spriteram_size }, /* Sprites*/
102 { 0xe000, 0xe7ff, MWA_RAM }, /* Work RAM*/
103 MEMORY_END
104
105
106 READ_HANDLER( amspdwy_port_r )
107 {
108 data8_t *Tracks = memory_region(REGION_CPU1)+0x10000;
109 return Tracks[offset];
110 }
111
PORT_READ_START(amspdwy_readport)112 static PORT_READ_START( amspdwy_readport )
113 { 0x0000, 0x7fff, amspdwy_port_r },
114 PORT_END
115
116
117
118 /***************************************************************************
119
120
121 Sound CPU
122
123
124 ***************************************************************************/
125
126 static MEMORY_READ_START( amspdwy_sound_readmem )
127 { 0x0000, 0x7fff, MRA_ROM }, /* ROM*/
128 { 0x9000, 0x9000, soundlatch_r }, /* From Main CPU*/
129 { 0xc000, 0xdfff, MRA_RAM }, /* Work RAM*/
130 { 0xffff, 0xffff, MRA_NOP }, /* ??? IY = FFFF at the start ?*/
131 MEMORY_END
132
133 static MEMORY_WRITE_START( amspdwy_sound_writemem )
134 { 0x0000, 0x7fff, MWA_ROM }, /* ROM*/
135 /* { 0x8000, 0x8000, MWA_NOP }, */ /* ? Written with 0 at the start*/
136 { 0xa000, 0xa000, YM2151_register_port_0_w }, /* YM2151*/
137 { 0xa001, 0xa001, YM2151_data_port_0_w }, /**/
138 { 0xc000, 0xdfff, MWA_RAM }, /* Work RAM*/
139 MEMORY_END
140
141
142
143
144 /***************************************************************************
145
146
147 Input Ports
148
149
150 ***************************************************************************/
151
152 INPUT_PORTS_START( amspdwy )
153
154 PORT_START /* IN0 - DSW 1*/
155 PORT_DIPNAME( 0x01, 0x00, "Character Test" )
156 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
157 PORT_DIPSETTING( 0x01, DEF_STR( On ) )
158 PORT_DIPNAME( 0x02, 0x00, "Show Arrows" )
159 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
160 PORT_DIPSETTING( 0x02, DEF_STR( On ) )
161 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) )
162 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
163 PORT_DIPSETTING( 0x04, DEF_STR( On ) )
164 PORT_SERVICE( 0x08, IP_ACTIVE_HIGH )
165 PORT_DIPNAME( 0x10, 0x00, "Steering Test" )
166 PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
167 PORT_DIPSETTING( 0x10, DEF_STR( On ) )
168 PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
169
170 PORT_START /* IN1 - DSW 2*/
171 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
172 PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
173 /* PORT_DIPSETTING( 0x02, DEF_STR( 1C_1C ) )*/
174 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
175 PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
176 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Difficulty ) )
177 PORT_DIPSETTING( 0x00, "Easy" )
178 PORT_DIPSETTING( 0x04, "Normal" )
179 PORT_DIPSETTING( 0x08, "Hard" )
180 PORT_DIPSETTING( 0x0c, "Hardest" )
181 PORT_DIPNAME( 0x10, 0x00, "Time" )
182 PORT_DIPSETTING( 0x10, "45 sec" )
183 PORT_DIPSETTING( 0x00, "60 sec" )
184 PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
185
186 PORT_START /* IN2 - Player 1 Wheel + Coins*/
187 PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* wheel*/
188 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_COIN1, 2 ) /* 2-3f*/
189
190 PORT_START /* IN3 - Player 2 Wheel + Coins*/
191 PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_SPECIAL )
192 PORT_BIT_IMPULSE( 0x80, IP_ACTIVE_HIGH, IPT_COIN2, 2 )
193
194 PORT_START /* IN4 - Player 1&2 Pedals + YM2151 Sound Status*/
195 PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL )
196 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
197 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
198 PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL )
199
200 PORT_START /* IN5 - Player 1 Analog Fake Port*/
201 PORT_ANALOG( 0xffff, 0x0000, IPT_DIAL | IPF_PLAYER1, 15, 20, 0, 0 )
202
203 PORT_START /* IN6 - Player 2 Analog Fake Port*/
204 PORT_ANALOG( 0xffff, 0x0000, IPT_DIAL | IPF_PLAYER2, 15, 20, 0, 0 )
205
206 INPUT_PORTS_END
207
208
209
210
211 /***************************************************************************
212
213
214 Graphics Layouts
215
216
217 ***************************************************************************/
218
219 static struct GfxLayout layout_8x8x2 =
220 {
221 8,8,
222 RGN_FRAC(1,2),
223 2,
224 { RGN_FRAC(0,2), RGN_FRAC(1,2) },
225 { STEP8(0,1) },
226 { STEP8(0,8) },
227 8*8
228 };
229
230 static struct GfxDecodeInfo amspdwy_gfxdecodeinfo[] =
231 {
232 { REGION_GFX1, 0, &layout_8x8x2, 0, 8 }, /* [0] Layer & Sprites*/
233 { -1 }
234 };
235
236
237
238 /***************************************************************************
239
240
241 Machine Drivers
242
243
244 ***************************************************************************/
245
246
irq_handler(int irq)247 static void irq_handler(int irq)
248 {
249 cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
250 }
251
252 static struct YM2151interface amspdwy_ym2151_interface =
253 {
254 1,
255 3000000, /* ? */
256 { YM3012_VOL(100,MIXER_PAN_LEFT,100,MIXER_PAN_RIGHT) },
257 { irq_handler }
258 };
259
260
261 static MACHINE_DRIVER_START( amspdwy )
262
263 /* basic machine hardware */
264 MDRV_CPU_ADD(Z80,3000000)
265 MDRV_CPU_FLAGS(CPU_16BIT_PORT) /* ? */
266 MDRV_CPU_MEMORY(amspdwy_readmem,amspdwy_writemem)
267 MDRV_CPU_PORTS(amspdwy_readport,0)
268 MDRV_CPU_VBLANK_INT(irq0_line_hold,1) /* IRQ: 60Hz, NMI: retn */
269
270 MDRV_CPU_ADD(Z80,3000000) /* Can't be disabled: the YM2151 timers must work */
271 MDRV_CPU_MEMORY(amspdwy_sound_readmem,amspdwy_sound_writemem)
272
273 MDRV_FRAMES_PER_SECOND(60)
274 MDRV_VBLANK_DURATION(DEFAULT_60HZ_VBLANK_DURATION)
275
276 /* video hardware */
277 MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
278 MDRV_SCREEN_SIZE(256, 256)
279 MDRV_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1)
280 MDRV_GFXDECODE(amspdwy_gfxdecodeinfo)
281 MDRV_PALETTE_LENGTH(32)
282
283 MDRV_VIDEO_START(amspdwy)
284 MDRV_VIDEO_UPDATE(amspdwy)
285
286 /* sound hardware */
287 MDRV_SOUND_ATTRIBUTES(SOUND_SUPPORTS_STEREO)
288 MDRV_SOUND_ADD(YM2151, amspdwy_ym2151_interface)
289 MACHINE_DRIVER_END
290
291
292
293
294 /***************************************************************************
295
296
297 ROMs Loading
298
299
300 ***************************************************************************/
301
302
303
304 /***************************************************************************
305
306 American Speedway
307
308 USES TWO Z80 CPU'S W/YM2151 SOUND
309 THE NUMBERS WITH THE NAMES ARE PROBABLY CHECKSUMS
310
311 NAME LOCATION TYPE
312 ------------------------
313 AUDI9363 U2 27256 CONN BD
314 GAME5807 U33 " "
315 TRKS6092 U34 " "
316 HIHIE12A 4A 2732 REAR BD
317 HILO9B3C 5A " "
318 LOHI4644 2A " "
319 LOLO1D51 1A " "
320
321 American Speedway (Set 2)
322
323 1987 Enerdyne Technologies, Inc. Has Rev 4 PGD written on the top board.
324
325 Processors
326 ------------------
327 Dual Z80As
328 YM2151 (sound)
329
330 RAM
331 ------------------
332 12 2114
333 5 82S16N
334
335 Eproms
336 ==================
337
338 Name Loc TYpe Checksum
339 ---------- ---- ----- --------
340 Game.u22 U33 27256 A222
341 Tracks.u34 U34 27256 6092
342 Audio.U02 U2 27256 9363
343 LOLO1.1A 1A 2732 1D51
344 LOHI.2A 2A 2732 4644
345 HIHI.4A 3/4A 2732 E12A
346 HILO.5A 5A 2732 9B3C
347
348 ***************************************************************************/
349
350 ROM_START( amspdwy )
351 ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Main Z80 Code */
352 ROM_LOAD( "game5807.u33", 0x00000, 0x8000, CRC(88233b59) SHA1(bfdf10dde1731cde5c579a9a5173cafe9295a80c) )
353 ROM_LOAD( "trks6092.u34", 0x10000, 0x8000, CRC(74a4e7b7) SHA1(b4f6e3faaf048351c6671205f52378a64b81bcb1) )
354
355 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 Code */
356 ROM_LOAD( "audi9463.u2", 0x00000, 0x8000, CRC(61b0467e) SHA1(74509e7712838dd760919893aeda9241d308d0c3) )
357
358 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) /* Layer + Sprites */
359 ROM_LOAD( "hilo9b3c.5a", 0x0000, 0x1000, CRC(f50f864c) SHA1(5b2412c1558b30a04523fcdf1d5cf6fdae1ba88d) )
360 ROM_LOAD( "hihie12a.4a", 0x1000, 0x1000, CRC(3d7497f3) SHA1(34820ba42d9c9dab1d6fdda15795450ce08392c1) )
361 ROM_LOAD( "lolo1d51.1a", 0x2000, 0x1000, CRC(58701c1c) SHA1(67b476e697652a6b684bd76ae6c0078ed4b3e3a2) )
362 ROM_LOAD( "lohi4644.2a", 0x3000, 0x1000, CRC(a1d802b1) SHA1(1249ce406b1aa518885a02ab063fa14906ccec2e) )
363 ROM_END
364
365 ROM_START( amspdwya )
366 ROM_REGION( 0x18000, REGION_CPU1, 0 ) /* Main Z80 Code */
367 ROM_LOAD( "game.u33", 0x00000, 0x8000, CRC(facab102) SHA1(e232969eaaad8b89ac8e28ee0a7996107a7de9a2) )
368 ROM_LOAD( "trks6092.u34", 0x10000, 0x8000, CRC(74a4e7b7) SHA1(b4f6e3faaf048351c6671205f52378a64b81bcb1) )
369
370 ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Sound Z80 Code */
371 ROM_LOAD( "audi9463.u2", 0x00000, 0x8000, CRC(61b0467e) SHA1(74509e7712838dd760919893aeda9241d308d0c3) )
372
373 ROM_REGION( 0x4000, REGION_GFX1, ROMREGION_DISPOSE ) /* Layer + Sprites */
374 ROM_LOAD( "hilo9b3c.5a", 0x0000, 0x1000, CRC(f50f864c) SHA1(5b2412c1558b30a04523fcdf1d5cf6fdae1ba88d) )
375 ROM_LOAD( "hihie12a.4a", 0x1000, 0x1000, CRC(3d7497f3) SHA1(34820ba42d9c9dab1d6fdda15795450ce08392c1) )
376 ROM_LOAD( "lolo1d51.1a", 0x2000, 0x1000, CRC(58701c1c) SHA1(67b476e697652a6b684bd76ae6c0078ed4b3e3a2) )
377 ROM_LOAD( "lohi4644.2a", 0x3000, 0x1000, CRC(a1d802b1) SHA1(1249ce406b1aa518885a02ab063fa14906ccec2e) )
378 ROM_END
379
380
381 /* (C) 1987 ETI 8402 MAGNOLIA ST. #C SANTEE, CA 92071 */
382
383 GAME( 1987, amspdwy, 0, amspdwy, amspdwy, 0, ROT0, "Enerdyne Technologies, Inc.", "American Speedway (set 1)" )
384 GAME( 1987, amspdwya, amspdwy, amspdwy, amspdwy, 0, ROT0, "Enerdyne Technologies, Inc.", "American Speedway (set 2)" )
385