1 // license:BSD-3-Clause
2 // copyright-holders:Brad Oliver, Bernd Wiebelt, Allard van der Bas
3 /***************************************************************************
4
5 Atari Asteroids hardware
6
7 Games supported:
8 * Asteroids
9 * Asteroids Deluxe
10 * Lunar Lander
11
12 Known bugs:
13 * the ERROR message in Asteroids Deluxe self test is related to a pokey problem
14
15 Information from a Tech Tip:
16
17 Asteroids Modification:
18
19 As a result of inquires regarding the achievement of extremely high scores on Asteroids,
20 we have developed a modification that will accomplish the following:
21 When the small flying saucer enters the screen, it fires immediately in the direction
22 of the player. The missiles also have a wraparound capability.
23 Originally, the program was entered so that the saucer would go one-sixth of the way
24 across the screen before firing, without the wraparound capability.
25
26 There are two revisions currently in the field, ROM revision 02 has the flip-flop capability,
27 version 01 does not.
28 Kits are available immediately from your Atari Distributor. To determine which kit you
29 require, check ROMs on your Asteroids PCB. If ROM code is "-01" order kit no. 08-0303009.
30 If ROM code is "-02", order no. 08-0303008.
31
32 For kit 08-0303009 (from rev 01) swap the following:
33
34 035127-01 --> 035127-02
35 035143-01 --> 035143-02
36 035144-01 --> 034144-04E
37 035145-01 --> 034145-04E
38
39 For kit 08-0303008 (from rev 02) swap the following:
40
41 035144-02 --> 034144-04E
42 035145-02 --> 034145-04E
43
44 A rom set was found labeled:
45
46 035144-02-03
47 035145-02-03
48
49 However, when dumped they matched the rev 02 set.
50
51 There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in any known Atari docs found to date.
52
53
54 ****************************************************************************
55
56 For revision 3 of Asteroids Deluxe:
57
58 U.S. Update
59 New Program with Easier Game Play for Asteroids Deluxe
60
61 The read-only memories (ROMs) in this kit contain a new program that changes the Asteroids Deluxe
62 game play. To attract new players, the game play is now operator-adjustable to be either easy for
63 approximately the first 30,000 points or hard through-out the game.
64
65 The technical manual describes the game play correctly if the game PCB option switch at R5 is set
66 to "hard". If you set the switch to "easy", then the following game-play changes happen:
67
68 * FOUR large asteroids begin the game. The second wave of asteroids begins with FIVE, and the
69 subsequent waves start with SIX through NINE large asteroids. In addition, the asteriods move
70 much more slowly across the screen. (If the option switch is set to hard, the waves begin with
71 SIX to NINE large asteriods.)
72 * The large ships ("death stars") when shot will break up into three slowly-moving diamonds. (If
73 the option switch is set to hard, diamonds would immediatly begin chasing the player's
74 spaceship at high speed.)
75
76 After installing these five ROMs, we recommend you set your game to easy game play. To do so, refer
77 to the figure that follows. You should note also that the self-test now deisplays and addition 0 or 1
78 to represent your game difficulty selection.
79
80
81 ROM kit for Asteroids Deluxe Game PCB Assembly A036471-03 and -04 F
82
83 Part Number PCB Location
84 --------------------------------
85 036430-02 D1
86 036431-02 E/F1
87 036432-02 H1
88 036433-03 J1
89 036800-02 R2
90
91 ***********************
92
93 Self-Test screen shows:
94
95 0000 (left to right: Coin Bonus Adder, Left Mech Mutiplier, Right Mech Multiplier & Game Price)
96
97 01000 (left to right: Game Language, Ships at Game Start, Minimum Plays, Difficulty, Bonus Ship)
98
99 ^^ (Graphic display of the number of ships per game [up to 7])
100
101 10000 (Point score at which a bonus ship is granted, blank is no bonus ship)
102
103
104 NOTE: Previous program versions, for the second line would only show 4 digits. The 6th switch has
105 a currently unknown effect in the game. However, on the Minimum Number of Plays display (on the
106 Self-Test screen) changes the values shown from 0 for a 1-Play Minimum to show a 2 and from
107 1 for a 2-Play Minimum to show a 3. Known documentation for ealier game versions state the 6th
108 switch is "Unused"
109
110 ****************************************************************************
111
112 Asteroids-deluxe state-prom added by HIGHWAYMAN.
113 The prom pcb location is:C8 and is 256x4
114 (i need to update the dump, this one is read in 8bit-mode)
115
116 ****************************************************************************
117
118 Asteroids Memory Map (preliminary)
119
120 Asteroids settings:
121
122 0 = OFF 1 = ON X = Don't Care $ = Atari suggests
123
124
125 8 SWITCH DIP
126 87654321
127 --------
128 XXXXXX11 English
129 XXXXXX10 German
130 XXXXXX01 French
131 XXXXXX00 Spanish
132 XXXXX1XX 4-ship game
133 XXXXX0XX 3-ship game
134 11XXXXXX Free Play
135 10XXXXXX 1 Coin for 2 Plays
136 01XXXXXX 1 Coin for 1 Play
137 00XXXXXX 2 Coins for 1 Play
138
139 Asteroids Deluxe settings:
140
141 0 = OFF 1 = ON X = Don't Care $ = Atari suggests
142
143
144 8 SWITCH DIP (R5)
145 87654321
146 --------
147 XXXXXX11 English $
148 XXXXXX10 German
149 XXXXXX01 French
150 XXXXXX00 Spanish
151 XXXX11XX 2-4 ships
152 XXXX10XX 3-5 ships $
153 XXXX01XX 4-6 ships
154 XXXX00XX 5-7 ships
155 XXX1XXXX 1-play minimum $
156 XXX0XXXX 2-play minimum
157 XX1XXXXX Easier gameplay for first 30000 points +
158 XX0XXXXX Hard gameplay throughout the game +
159 11XXXXXX Bonus ship every 10,000 points $ !
160 10XXXXXX Bonus ship every 12,000 points !
161 01XXXXXX Bonus ship every 15,000 points !
162 00XXXXXX No bonus ships (adds one ship at game start)
163
164 + only with the newer romset
165 ! not "every", but "at", e.g. only once.
166
167 Thanks to Gregg Woodcock for the info.
168
169 8 SWITCH DIP (L8)
170 87654321
171 --------
172 XXXXXX11 Free Play
173 XXXXXX10 1 Coin = 2 Plays
174 XXXXXX01 1 Coin = 1 Play
175 XXXXXX00 2 Coins = 1 Play $
176 XXXX11XX Right coin mech * 1 $
177 XXXX10XX Right coin mech * 4
178 XXXX01XX Right coin mech * 5
179 XXXX00XX Right coin mech * 6
180 XXX1XXXX Center coin mech * 1 $
181 XXX0XXXX Center coin mech * 2
182 111XXXXX No bonus coins
183 110XXXXX For every 2 coins inserted, game logic adds 1 more coin
184 101XXXXX For every 4 coins inserted, game logic adds 1 more coin
185 100XXXXX For every 4 coins inserted, game logic adds 2 more coins $
186 011XXXXX For every 5 coins inserted, game logic adds 1 more coin
187
188 ****************************************************************************
189
190 Lunar Lander Memory Map (preliminary)
191
192 Lunar Lander settings:
193
194 0 = OFF 1 = ON x = Don't Care $ = Atari suggests
195
196
197 8 SWITCH DIP (P8) with -01 ROMs on PCB
198 87654321
199 --------
200 11xxxxxx 450 fuel units per coin
201 10xxxxxx 600 fuel units per coin
202 01xxxxxx 750 fuel units per coin $
203 00xxxxxx 900 fuel units per coin
204 xxx0xxxx Free play
205 xxx1xxxx Coined play as determined by toggles 7 & 8 $
206 xxxx00xx German instructions
207 xxxx01xx Spanish instructions
208 xxxx10xx French instructions
209 xxxx11xx English instructions $
210 xxxxxx11 Right coin == 1 credit/coin $
211 xxxxxx10 Right coin == 4 credit/coin
212 xxxxxx01 Right coin == 5 credit/coin
213 xxxxxx00 Right coin == 6 credit/coin
214 (Left coin always registers 1 credit/coin)
215
216
217 8 SWITCH DIP (P8) with -02 ROMs on PCB
218 87654321
219 --------
220 11x1xxxx 450 fuel units per coin
221 10x1xxxx 600 fuel units per coin
222 01x1xxxx 750 fuel units per coin $
223 00x1xxxx 900 fuel units per coin
224 11x0xxxx 1100 fuel units per coin
225 10x0xxxx 1300 fuel units per coin
226 01x0xxxx 1550 fuel units per coin
227 00x0xxxx 1800 fuel units per coin
228 xx0xxxxx Free play
229 xx1xxxxx Coined play as determined by toggles 5, 7, & 8 $
230 xxxx00xx German instructions
231 xxxx01xx Spanish instructions
232 xxxx10xx French instructions
233 xxxx11xx English instructions $
234 xxxxxx11 Right coin == 1 credit/coin $
235 xxxxxx10 Right coin == 4 credit/coin
236 xxxxxx01 Right coin == 5 credit/coin
237 xxxxxx00 Right coin == 6 credit/coin
238 (Left coin always registers 1 credit/coin)
239
240 DIP locations verified from manual for:
241 - asteroid
242 - llander
243 - llander1
244 - astdelux
245
246 ***************************************************************************/
247
248 #include "emu.h"
249 #include "includes/asteroid.h"
250 #include "cpu/m6502/m6502.h"
251 #include "machine/74259.h"
252 #include "machine/output_latch.h"
253 #include "machine/rescap.h"
254 #include "machine/watchdog.h"
255 #include "sound/pokey.h"
256 #include "video/avgdvg.h"
257 #include "video/vector.h"
258 #include "screen.h"
259
260 #include "astdelux.lh"
261
262 #define MASTER_CLOCK (XTAL(12'096'000))
263 #define CLOCK_3KHZ (MASTER_CLOCK / 4096)
264
265 /*************************************
266 *
267 * Coin counters
268 *
269 *************************************/
270
WRITE_LINE_MEMBER(asteroid_state::coin_counter_left_w)271 WRITE_LINE_MEMBER(asteroid_state::coin_counter_left_w)
272 {
273 machine().bookkeeping().coin_counter_w(0, state);
274 }
275
WRITE_LINE_MEMBER(asteroid_state::coin_counter_center_w)276 WRITE_LINE_MEMBER(asteroid_state::coin_counter_center_w)
277 {
278 machine().bookkeeping().coin_counter_w(1, state);
279 }
280
WRITE_LINE_MEMBER(asteroid_state::coin_counter_right_w)281 WRITE_LINE_MEMBER(asteroid_state::coin_counter_right_w)
282 {
283 machine().bookkeeping().coin_counter_w(2, state);
284 }
285
286
287
288 /*************************************
289 *
290 * High score EAROM
291 *
292 *************************************/
293
earom_read()294 uint8_t asteroid_state::earom_read()
295 {
296 return m_earom->data();
297 }
298
earom_write(offs_t offset,uint8_t data)299 void asteroid_state::earom_write(offs_t offset, uint8_t data)
300 {
301 m_earom->set_address(offset & 0x3f);
302 m_earom->set_data(data);
303 }
304
earom_control_w(uint8_t data)305 void asteroid_state::earom_control_w(uint8_t data)
306 {
307 // CK = DB0, C1 = /DB2, C2 = DB1, CS1 = DB3, /CS2 = GND
308 m_earom->set_control(BIT(data, 3), 1, !BIT(data, 2), BIT(data, 1));
309 m_earom->set_clk(BIT(data, 0));
310 }
311
312
313
314 /*************************************
315 *
316 * Main CPU memory handlers
317 *
318 *************************************/
319
asteroid_map(address_map & map)320 void asteroid_state::asteroid_map(address_map &map)
321 {
322 map.global_mask(0x7fff);
323 map(0x0000, 0x01ff).ram();
324 map(0x0200, 0x02ff).bankrw("ram1").share("ram1");
325 map(0x0300, 0x03ff).bankrw("ram2").share("ram2");
326 map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
327 map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1
328 map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)).nopw(); // DSW1
329 map(0x3000, 0x3000).w(m_dvg, FUNC(dvg_device::go_w));
330 map(0x3200, 0x3200).w("outlatch", FUNC(output_latch_device::write));
331 map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
332 map(0x3600, 0x3600).w(FUNC(asteroid_state::asteroid_explode_w));
333 map(0x3a00, 0x3a00).w(FUNC(asteroid_state::asteroid_thump_w));
334 map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
335 map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
336 map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
337 map(0x5000, 0x57ff).rom(); // Vector ROM
338 map(0x6800, 0x7fff).rom();
339 }
340
341
astdelux_map(address_map & map)342 void asteroid_state::astdelux_map(address_map &map)
343 {
344 map.global_mask(0x7fff);
345 map(0x0000, 0x01ff).ram();
346 map(0x0200, 0x02ff).bankrw("ram1").share("ram1");
347 map(0x0300, 0x03ff).bankrw("ram2").share("ram2");
348 map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
349 map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)).nopw(); // IN1
350 map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1
351 map(0x2c00, 0x2c0f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
352 map(0x2c40, 0x2c7f).r(FUNC(asteroid_state::earom_read));
353 map(0x3000, 0x3000).w(m_dvg, FUNC(dvg_device::go_w));
354 map(0x3200, 0x323f).w(FUNC(asteroid_state::earom_write)).nopr();
355 map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
356 map(0x3600, 0x3600).w(FUNC(asteroid_state::asteroid_explode_w));
357 map(0x3a00, 0x3a00).w(FUNC(asteroid_state::earom_control_w));
358 map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
359 map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
360 map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
361 map(0x4800, 0x57ff).rom(); // Vector ROM
362 map(0x6000, 0x7fff).rom();
363 }
364
365
llander_map(address_map & map)366 void asteroid_state::llander_map(address_map &map)
367 {
368 map.global_mask(0x7fff);
369 map(0x0000, 0x00ff).ram().mirror(0x1f00);
370 map(0x2000, 0x2000).portr("IN0");
371 map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1
372 map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1
373 map(0x2c00, 0x2c00).portr("THRUST");
374 map(0x3000, 0x3000).w(m_dvg, FUNC(dvg_device::go_w));
375 map(0x3200, 0x3200).w("outlatch", FUNC(output_latch_device::write));
376 map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
377 map(0x3c00, 0x3c00).w(FUNC(asteroid_state::llander_sounds_w));
378 map(0x3e00, 0x3e00).w(FUNC(asteroid_state::llander_snd_reset_w));
379 map(0x4000, 0x47ff).ram().share("dvg:vectorram").region("maincpu", 0x4000);
380 map(0x4800, 0x5fff).rom(); // Vector ROM
381 map(0x5800, 0x5800).nopw(); // INC access?
382 map(0x6000, 0x7fff).rom();
383 }
384
385
386
387 /*************************************
388 *
389 * Port definitions
390 *
391 *************************************/
392
READ_LINE_MEMBER(asteroid_state::clock_r)393 READ_LINE_MEMBER(asteroid_state::clock_r)
394 {
395 return (m_maincpu->total_cycles() & 0x100) ? 1 : 0;
396 }
397
398 static INPUT_PORTS_START( asteroid )
399 PORT_START("IN0")
400 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
401 // Bit 2 is the 3 KHz source and Bit 3 the VG_HALT bit
PORT_READ_LINE_MEMBER(asteroid_state,clock_r)402 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(asteroid_state, clock_r)
403 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dvg", dvg_device, done_r)
404 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CODE(KEYCODE_SPACE) PORT_CODE(JOYCODE_BUTTON3) // Hyperspace
405 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1) // Fire
406 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step")
407 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
408 PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
409
410 PORT_START("IN1")
411 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
412 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
413 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
414 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
415 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
416 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CODE(KEYCODE_LALT) PORT_CODE(JOYCODE_BUTTON2) // Thrust
417 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_RIGHT) PORT_CODE(JOYCODE_X_RIGHT_SWITCH)// Right
418 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_LEFT) PORT_CODE(JOYCODE_X_LEFT_SWITCH) // Left
419
420 PORT_START("DSW1")
421 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW:1,2")
422 PORT_DIPSETTING ( 0x00, DEF_STR( English ) )
423 PORT_DIPSETTING ( 0x01, DEF_STR( German ) )
424 PORT_DIPSETTING ( 0x02, DEF_STR( French ) )
425 PORT_DIPSETTING ( 0x03, DEF_STR( Spanish ) )
426 PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:3")
427 PORT_DIPSETTING ( 0x04, "3" )
428 PORT_DIPSETTING ( 0x00, "4" )
429 PORT_DIPNAME( 0x08, 0x00, "Center Mech" ) PORT_DIPLOCATION("SW:4") // Left/Center for 3-door mech
430 PORT_DIPSETTING ( 0x00, "X 1" )
431 PORT_DIPSETTING ( 0x08, "X 2" )
432 PORT_DIPNAME( 0x30, 0x00, "Right Mech" ) PORT_DIPLOCATION("SW:5,6")
433 PORT_DIPSETTING ( 0x00, "X 1" )
434 PORT_DIPSETTING ( 0x10, "X 4" )
435 PORT_DIPSETTING ( 0x20, "X 5" )
436 PORT_DIPSETTING ( 0x30, "X 6" )
437 PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:7,8")
438 PORT_DIPSETTING ( 0xc0, DEF_STR( 2C_1C ) )
439 PORT_DIPSETTING ( 0x80, DEF_STR( 1C_1C ) )
440 PORT_DIPSETTING ( 0x40, DEF_STR( 1C_2C ) )
441 PORT_DIPSETTING ( 0x00, DEF_STR( Free_Play ) )
442
443 PORT_START("COCKTAIL")
444 PORT_CONFNAME(1, 0, DEF_STR(Cabinet))
445 PORT_CONFSETTING(0, DEF_STR(Upright))
446 PORT_CONFSETTING(1, DEF_STR(Cocktail))
447 INPUT_PORTS_END
448
449
450 static INPUT_PORTS_START( asteroidb )
451 PORT_INCLUDE( asteroid )
452
453 PORT_MODIFY("IN0")
454 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Resets
455 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Resets
456 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
457 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
458 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
459 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
460 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
461 // Bit 7 is VG_HALT
462 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dvg", dvg_device, done_r)
463
464 PORT_MODIFY("IN1")
465 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
466 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
467 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CODE(KEYCODE_LALT) PORT_CODE(JOYCODE_BUTTON2) // Thrust
468 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
469 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1) // Fire
470
471 PORT_MODIFY("DSW1")
472 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW:4" )
473 PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW:5" )
474 PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW:6" )
475
476 PORT_START("HS") // Hyperspace
477 PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
478 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_SPACE) PORT_CODE(JOYCODE_BUTTON3) // Hyperspace
479 INPUT_PORTS_END
480
481
482 static INPUT_PORTS_START( aerolitos )
483 PORT_INCLUDE( asteroid )
484
485 PORT_MODIFY("DSW1") // this bootleg was for the Spanish market, so set it to Spanish by default
486 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Language ) ) PORT_DIPLOCATION("SW:1,2")
487 PORT_DIPSETTING ( 0x00, DEF_STR( English ) )
488 PORT_DIPSETTING ( 0x01, DEF_STR( German ) )
489 PORT_DIPSETTING ( 0x02, DEF_STR( French ) )
490 PORT_DIPSETTING ( 0x03, DEF_STR( Spanish ) )
491 INPUT_PORTS_END
492
493
494 static INPUT_PORTS_START( asterock )
495 PORT_INCLUDE( asteroid )
496
497 PORT_MODIFY("IN0")
498 // Bit 0 is VG_HALT and Bit 2 is the 3 KHz source
499 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dvg", dvg_device, done_r)
500 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
501 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(asteroid_state, clock_r)
502 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_SPACE) PORT_CODE(JOYCODE_BUTTON3) // Hyperspace
503 PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1) // Fire
504 PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step")
505 PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
506 PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
507
508 PORT_MODIFY("DSW1")
509 PORT_DIPNAME( 0x03, 0x03, DEF_STR( Language ) ) PORT_DIPLOCATION("SW:1,2")
510 PORT_DIPSETTING( 0x00, DEF_STR( English ) )
511 PORT_DIPSETTING( 0x01, DEF_STR( French ) )
512 PORT_DIPSETTING( 0x02, DEF_STR( German ) )
513 PORT_DIPSETTING( 0x03, DEF_STR( Italian ) )
514 PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:3,4")
515 PORT_DIPSETTING( 0x00, "2" )
516 PORT_DIPSETTING( 0x04, "3" )
517 PORT_DIPSETTING( 0x08, "4" )
518 PORT_DIPSETTING( 0x0c, "5" )
519 PORT_DIPNAME( 0x10, 0x00, "Records Table" ) PORT_DIPLOCATION("SW:5")
520 PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
521 PORT_DIPSETTING( 0x10, "Special" )
522 PORT_DIPNAME( 0x20, 0x00, "Coin Mode" ) PORT_DIPLOCATION("SW:6")
523 PORT_DIPSETTING ( 0x00, DEF_STR( Normal ) )
524 PORT_DIPSETTING ( 0x20, "Special" )
525 PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW:7,8")
526 PORT_DIPSETTING ( 0xc0, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW1",0x20,EQUALS,0x00)
527 PORT_DIPSETTING ( 0x80, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW1",0x20,EQUALS,0x00)
528 PORT_DIPSETTING ( 0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW1",0x20,EQUALS,0x00)
529 // PORT_DIPSETTING ( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW1",0x20,EQUALS,0x00)
530 PORT_DIPSETTING ( 0xc0, "Coin A 2/1 Coin B 2/1 Coin C 1/1" ) PORT_CONDITION("DSW1",0x20,NOTEQUALS,0x00)
531 PORT_DIPSETTING ( 0x80, "Coin A 1/1 Coin B 1/1 Coin C 1/2" ) PORT_CONDITION("DSW1",0x20,NOTEQUALS,0x00)
532 PORT_DIPSETTING ( 0x40, "Coin A 1/2 Coin B 1/2 Coin C 1/4" ) PORT_CONDITION("DSW1",0x20,NOTEQUALS,0x00)
533 // PORT_DIPSETTING ( 0x00, "Coin A 1/1 Coin B 1/1 Coin C 1/2" ) PORT_CONDITION("DSW1",0x20,NOTEQUALS,0x00)
534 INPUT_PORTS_END
535
536
537 static INPUT_PORTS_START( astdelux )
538 PORT_START("IN0")
539 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) // According to schematics
540 // Bit 2 is the 3 KHz source and Bit 3 the VG_HALT bit
541 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(asteroid_state, clock_r)
542 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dvg", dvg_device, done_r)
543 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CODE(KEYCODE_SPACE) PORT_CODE(JOYCODE_BUTTON3) // Hyperspace
544 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1) // Fire
545 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step")
546 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
547 PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
548
549 PORT_START("IN1")
550 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) // Coin Left
551 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) // Coin Center
552 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) // Coin Right
553 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
554 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
555 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CODE(KEYCODE_LALT) PORT_CODE(JOYCODE_BUTTON2) // Thrust
556 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_RIGHT) PORT_CODE(JOYCODE_X_RIGHT_SWITCH)// Right
557 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_LEFT) PORT_CODE(JOYCODE_X_LEFT_SWITCH) // Left
558
559 PORT_START("DSW1")
560 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("R5:1,2")
561 PORT_DIPSETTING ( 0x00, DEF_STR( English ) )
562 PORT_DIPSETTING ( 0x01, DEF_STR( German ) )
563 PORT_DIPSETTING ( 0x02, DEF_STR( French ) )
564 PORT_DIPSETTING ( 0x03, DEF_STR( Spanish ) )
565 /* Default lives is 2,3,4,5. Values incremented by 1 if Bonus Life set to None or Coinage set to 2C_1C.
566 Incremented by 2 if both are set at the same time. PORT_CONDITION() can only test for 1 switch at a time. */
567 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("R5:3,4") // Default is 2 or 3 depending on manual version
568 PORT_DIPSETTING ( 0x00, "2-4" )
569 PORT_DIPSETTING ( 0x04, "3-5" )
570 PORT_DIPSETTING ( 0x08, "4-6" )
571 PORT_DIPSETTING ( 0x0c, "5-7" )
572 PORT_DIPNAME( 0x10, 0x00, "Minimum Plays" ) PORT_DIPLOCATION("R5:5")
573 PORT_DIPSETTING ( 0x00, "1" )
574 PORT_DIPSETTING ( 0x10, "2" )
575 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("R5:6") // Listed as "Unused" for pre Revision 03 versions
576 PORT_DIPSETTING ( 0x20, DEF_STR( Hard ) )
577 PORT_DIPSETTING ( 0x00, DEF_STR( Easy ) )
578 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("R5:7,8")
579 PORT_DIPSETTING ( 0x00, "10000" )
580 PORT_DIPSETTING ( 0x40, "12000" )
581 PORT_DIPSETTING ( 0x80, "15000" )
582 PORT_DIPSETTING ( 0xc0, DEF_STR( None ) )
583
584 PORT_START("DSW2")
585 PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) ) PORT_DIPLOCATION("L8:1,2")
586 PORT_DIPSETTING ( 0x00, DEF_STR( 2C_1C ) )
587 PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) )
588 PORT_DIPSETTING ( 0x02, DEF_STR( 1C_2C ) )
589 PORT_DIPSETTING ( 0x03, DEF_STR( Free_Play ) )
590 PORT_DIPNAME( 0x0c, 0x0c, "Right Coin" ) PORT_DIPLOCATION("L8:3,4")
591 PORT_DIPSETTING ( 0x00, "X 6" )
592 PORT_DIPSETTING ( 0x04, "X 5" )
593 PORT_DIPSETTING ( 0x08, "X 4" )
594 PORT_DIPSETTING ( 0x0c, "X 1" )
595 PORT_DIPNAME( 0x10, 0x10, "Center Coin" ) PORT_DIPLOCATION("L8:5") // "Left Coin" in a 2-mech door
596 PORT_DIPSETTING ( 0x00, "X 2" )
597 PORT_DIPSETTING ( 0x10, "X 1" )
598 PORT_DIPNAME( 0xe0, 0xe0, "Bonus Coins" ) PORT_DIPLOCATION("L8:6,7,8")
599 PORT_DIPSETTING ( 0x60, "1 Coin Each 5 Coins" )
600 PORT_DIPSETTING ( 0x80, "2 Coins Each 4 Coins" )
601 PORT_DIPSETTING ( 0xa0, "1 Coin Each 4 Coins" )
602 PORT_DIPSETTING ( 0xc0, "1 Coin Each 2 Coins" )
603 PORT_DIPSETTING ( 0xe0, DEF_STR( None ) )
604
605 // The manual includes a 3rd DIP controlling the number & configuration of coin counters, defined as:
606 #if 0
607 PORT_START("DSW3") // 4-Toggle switch located on game PCB at M12
608 PORT_DIPNAME( 0x03, 0x00, "Coin Counters" ) PORT_DIPLOCATION("M12:1,2")
609 PORT_DIPSETTING ( 0x00, "1=Left, Center & Right" ) // "For games having these coin doors: Thai 1Baht/1Baht, German 1DM/1DM, US 25c/25c,
610 // Belgian or French 5Fr/5Fr, Swiss or French 1Fr/1Fr, US 25c/25c/25c,
611 // Japanese 100Y/100Y, Swedish 1Kr/1Kr, UK 10P/10P, Australian 20c/20c, or Italian 100L/100L."
612 PORT_DIPSETTING ( 0x01, "1=Left & Center, 2=Right" ) // "For games having these coin doors: German 2DM/1DM, German 1DM/5DM, US 25c/25c/1$, or US 25c/1$."
613 PORT_DIPSETTING ( 0x02, "1=Left, 2=Center & Right" ) // "No coin door is currently designed for this configuration."
614 PORT_DIPSETTING ( 0x03, "1=Left, 2=Center, 3=Right" ) // "For games having these coin doors: German 1DM/2DM/5DM."
615 PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "M12:3" ) // Listed as "Unused"
616 PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "M12:4" ) // Listed as "Unused"
617 #endif
618
619 PORT_START("COCKTAIL")
620 PORT_CONFNAME(1, 0, DEF_STR(Cabinet))
621 PORT_CONFSETTING(0, DEF_STR(Upright))
622 PORT_CONFSETTING(1, DEF_STR(Cocktail))
623 INPUT_PORTS_END
624
625
626 static INPUT_PORTS_START( llander )
627 PORT_START("IN0")
628 // Bit 0 is VG_HALT
629 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dvg", dvg_device, done_r)
630 PORT_SERVICE( 0x02, IP_ACTIVE_LOW )
631 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )
632 // Of the rest, Bit 6 is the 3KHz source. 3,4 and 5 are unknown
633 PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNKNOWN )
634 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(asteroid_state, clock_r)
635 PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step")
636
637 PORT_START("IN1")
638 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
639 PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
640 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
641 PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
642 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Select Game")
643 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Abort")
644 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_RIGHT) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) // Right
645 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_LEFT) PORT_CODE(JOYCODE_X_LEFT_SWITCH) // Left
646
647 PORT_START("DSW1")
648 PORT_DIPNAME( 0x03, 0x00, "Right Coin" ) PORT_DIPLOCATION("P8:1,2") // "Left Coin Mech always registers X 1"
649 PORT_DIPSETTING ( 0x00, "X 1" )
650 PORT_DIPSETTING ( 0x01, "X 4" )
651 PORT_DIPSETTING ( 0x02, "X 5" )
652 PORT_DIPSETTING ( 0x03, "X 6" )
653 PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("P8:3,4")
654 PORT_DIPSETTING ( 0x00, DEF_STR( English ) )
655 PORT_DIPSETTING ( 0x04, DEF_STR( French ) )
656 PORT_DIPSETTING ( 0x08, DEF_STR( Spanish ) )
657 PORT_DIPSETTING ( 0x0c, DEF_STR( German ) )
658 PORT_DIPNAME( 0x20, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("P8:6")
659 PORT_DIPSETTING ( 0x00, DEF_STR( Normal ) )
660 PORT_DIPSETTING ( 0x20, DEF_STR( Free_Play ) )
661 PORT_DIPNAME( 0xd0, 0x80, "Fuel Units Per Coin" ) PORT_DIPLOCATION("P8:5,7,8")
662 PORT_DIPSETTING ( 0x00, "450" )
663 PORT_DIPSETTING ( 0x40, "600" )
664 PORT_DIPSETTING ( 0x80, "750" )
665 PORT_DIPSETTING ( 0xc0, "900" )
666 PORT_DIPSETTING ( 0x10, "1100" )
667 PORT_DIPSETTING ( 0x50, "1300" )
668 PORT_DIPSETTING ( 0x90, "1550" )
669 PORT_DIPSETTING ( 0xd0, "1800" )
670
671 /* The next one is a potentiometer */
672 /* The way the DAC/counter circuit always tries to self center at the voltage derived from the thrust control, */
673 /* I don't think it ever expected to get to 0xff. We can not emulate the external DAC circuit exactly, */
674 /* so changing the range to 0xfe seems to solve the problem. */
675 /* The thrust control is basically a hand operated pedal. */
676 /* so IPT_PEDAL is used because it more accurately emulates the control then using IPT_PADDLE */
677 PORT_START("THRUST")
678 PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0,254) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
679 INPUT_PORTS_END
680
681
682 static INPUT_PORTS_START( llander1 )
683 PORT_INCLUDE( llander )
684
685 PORT_MODIFY("DSW1")
686 PORT_DIPNAME( 0x10, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("P8:5") // "Left Coin Mech always registers X 1"
687 PORT_DIPSETTING ( 0x00, DEF_STR( Normal ) )
688 PORT_DIPSETTING ( 0x10, DEF_STR( Free_Play ) )
689 PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "P8:6" ) // Listed as "Unused"
690 PORT_DIPNAME( 0xc0, 0x80, "Fuel units" ) PORT_DIPLOCATION("P8:7,8")
691 PORT_DIPSETTING ( 0x00, "450" )
692 PORT_DIPSETTING ( 0x40, "600" )
693 PORT_DIPSETTING ( 0x80, "750" )
694 PORT_DIPSETTING ( 0xc0, "900" )
695 INPUT_PORTS_END
696
697
698 static INPUT_PORTS_START( llandert )
699 PORT_START("IN0")
700 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
701
702 PORT_START("IN1")
703 PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
704
705 PORT_START("DSW1")
706 PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "P8:1" ) // lock up
707 PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "P8:2" ) // lock up
708 PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "P8:4" ) // lock up
709 PORT_DIPNAME( 0x24, 0x00, "Parameter 1" ) PORT_DIPLOCATION("P8:3,6")
710 PORT_DIPSETTING ( 0x00, "0" )
711 PORT_DIPSETTING ( 0x04, "1" )
712 PORT_DIPSETTING ( 0x20, "2" )
713 PORT_DIPSETTING ( 0x24, "Invalid" )
714 PORT_DIPNAME( 0xd0, 0x40, "Parameter 2" ) PORT_DIPLOCATION("P8:5,7,8")
715 PORT_DIPSETTING ( 0x00, "0" )
716 PORT_DIPSETTING ( 0x40, "1" )
717 PORT_DIPSETTING ( 0x80, "2" )
718 PORT_DIPSETTING ( 0xc0, "3" )
719 PORT_DIPSETTING ( 0x10, "4" )
720 PORT_DIPSETTING ( 0x50, "5" )
721 PORT_DIPSETTING ( 0x90, "6" )
722 PORT_DIPSETTING ( 0xd0, "7" )
723
724 PORT_START("THRUST")
725 PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
726 INPUT_PORTS_END
727
728
729 /*************************************
730 *
731 * Machine drivers
732 *
733 *************************************/
734
735 void asteroid_state::asteroid_base(machine_config &config)
736 {
737 // Basic machine hardware
738 M6502(config, m_maincpu, MASTER_CLOCK/8);
739 m_maincpu->set_addrmap(AS_PROGRAM, &asteroid_state::asteroid_map);
740 m_maincpu->set_periodic_int(FUNC(asteroid_state::asteroid_interrupt), attotime::from_hz(CLOCK_3KHZ/12));
741
742 WATCHDOG_TIMER(config, "watchdog");
743
744 TTL153(config, m_dsw_sel);
745
746 output_latch_device &outlatch(OUTPUT_LATCH(config, "outlatch")); // LS174 at N11
747 outlatch.bit_handler<0>().set_output("led1").invert(); // 2 PLYR START LAMP
748 outlatch.bit_handler<1>().set_output("led0").invert(); // 1 PLYR START LAMP
749 outlatch.bit_handler<2>().set_membank("ram1"); // RAMSEL
750 outlatch.bit_handler<2>().append_membank("ram2");
751 outlatch.bit_handler<2>().append(FUNC(asteroid_state::cocktail_inv_w));
752 outlatch.bit_handler<3>().set(FUNC(asteroid_state::coin_counter_left_w)); // COIN CNTRL
753 outlatch.bit_handler<4>().set(FUNC(asteroid_state::coin_counter_center_w)); // COIN CNTRC
754 outlatch.bit_handler<5>().set(FUNC(asteroid_state::coin_counter_right_w)); // COIN CNTRR
755
756 // Video hardware
757 VECTOR(config, "vector");
758 screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_VECTOR));
759 screen.set_refresh_hz(CLOCK_3KHZ/12/4);
760 screen.set_size(400,300);
761 screen.set_visarea(522, 1566, 394, 1182);
762 screen.set_screen_update("vector", FUNC(vector_device::screen_update));
763
764 DVG(config, m_dvg, 0);
765 m_dvg->set_vector_tag("vector");
766 }
767
asteroid(machine_config & config)768 void asteroid_state::asteroid(machine_config &config)
769 {
770 asteroid_base(config);
771
772 // Sound hardware
773 asteroid_sound(config);
774 }
775
asterock(machine_config & config)776 void asteroid_state::asterock(machine_config &config)
777 {
778 asteroid(config);
779
780 // Basic machine hardware
781 m_maincpu->set_periodic_int(FUNC(asteroid_state::asterock_interrupt), attotime::from_hz(CLOCK_3KHZ/12));
782 }
783
astdelux(machine_config & config)784 void asteroid_state::astdelux(machine_config &config)
785 {
786 asteroid_base(config);
787
788 // Basic machine hardware
789 m_maincpu->set_addrmap(AS_PROGRAM, &asteroid_state::astdelux_map);
790
791 ER2055(config, m_earom);
792
793 // Sound hardware
794 astdelux_sound(config);
795
796 pokey_device &pokey(POKEY(config, "pokey", MASTER_CLOCK/8));
797 pokey.allpot_r().set_ioport("DSW2");
798 pokey.set_output_rc(RES_K(10), CAP_U(0.015), 5.0);
799 pokey.add_route(ALL_OUTPUTS, "mono", 1.0);
800
801 config.device_remove("outlatch");
802
803 ls259_device &audiolatch(*subdevice<ls259_device>("audiolatch"));
804 audiolatch.q_out_cb<0>().set_output("led0").invert(); // START1
805 audiolatch.q_out_cb<1>().set_output("led1").invert(); // START2
806 audiolatch.q_out_cb<4>().set_membank("ram1"); // RAMSEL
807 audiolatch.q_out_cb<4>().append_membank("ram2");
808 audiolatch.q_out_cb<4>().append(FUNC(asteroid_state::cocktail_inv_w));
809 audiolatch.q_out_cb<5>().set(FUNC(asteroid_state::coin_counter_left_w)); // LEFT COIN
810 audiolatch.q_out_cb<6>().set(FUNC(asteroid_state::coin_counter_center_w)); // CENTER COIN
811 audiolatch.q_out_cb<7>().set(FUNC(asteroid_state::coin_counter_right_w)); // RIGHT COIN
812 }
813
814
llander(machine_config & config)815 void asteroid_state::llander(machine_config &config)
816 {
817 asteroid_base(config);
818
819 // Basic machine hardware
820 m_maincpu->set_addrmap(AS_PROGRAM, &asteroid_state::llander_map);
821 m_maincpu->set_periodic_int(FUNC(asteroid_state::llander_interrupt), attotime::from_hz(MASTER_CLOCK/4096/12));
822
823 screen_device &screen(*subdevice<screen_device>("screen"));
824 screen.set_refresh_hz(CLOCK_3KHZ/12/6);
825 screen.set_visarea(522, 1566, 270, 1070);
826 screen.set_screen_update("vector", FUNC(vector_device::screen_update));
827
828 output_latch_device &outlatch(*subdevice<output_latch_device>("outlatch")); // LS174 at N11
829 outlatch.bit_handler<0>().set_output("lamp4"); // LAMP5 (COMMAND MISSION)
830 outlatch.bit_handler<1>().set_output("lamp3"); // LAMP4 (PRIME MISSION)
831 outlatch.bit_handler<2>().set_output("lamp2"); // LAMP3 (CADET MISSION)
832 outlatch.bit_handler<3>().set_output("lamp1"); // LAMP2 (TRAINING MISSION)
833 outlatch.bit_handler<4>().set_output("lamp0"); // START/SELECT LEDs
834 outlatch.bit_handler<5>().set_nop();
835
836 // Sound hardware
837 llander_sound(config);
838 }
839
840
841
842 /*************************************
843 *
844 * ROM definitions
845 *
846 *************************************/
847
848 ROM_START( asteroid )
849 ROM_REGION( 0x8000, "maincpu", 0 )
CRC(b503eaf7)850 ROM_LOAD( "035145-04e.ef2", 0x6800, 0x0800, CRC(b503eaf7) SHA1(5369dcfe01c0b9e48b15a96a0de8d23ee8ef9145) )
851 ROM_LOAD( "035144-04e.h2", 0x7000, 0x0800, CRC(25233192) SHA1(51b2865fa897cdaa84ac6500c4b4833a80827019) )
852 ROM_LOAD( "035143-02.j2", 0x7800, 0x0800, CRC(312caa02) SHA1(1ce2eac1ab90b972e3f1fc3d250908f26328d6cb) )
853 // Vector ROM
854 ROM_LOAD( "035127-02.np3", 0x5000, 0x0800, CRC(8b71fd9e) SHA1(8cd5005e531eafa361d6b7e9eed159d164776c70) )
855
856 // DVG PROM
857 ROM_REGION( 0x100, "dvg:prom", 0 )
858 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
859 ROM_END
860
861 ROM_START( asteroid2 )
862 ROM_REGION( 0x8000, "maincpu", 0 )
863 ROM_LOAD( "035145-02.ef2", 0x6800, 0x0800, CRC(0cc75459) SHA1(2af85c9689b878155004da47fedbde5853a18723) )
864 ROM_LOAD( "035144-02.h2", 0x7000, 0x0800, CRC(096ed35c) SHA1(064d680ded7f30c543f93ae5ca85f90d550f73e5) )
865 ROM_LOAD( "035143-02.j2", 0x7800, 0x0800, CRC(312caa02) SHA1(1ce2eac1ab90b972e3f1fc3d250908f26328d6cb) )
866 // Vector ROM
867 ROM_LOAD( "035127-02.np3", 0x5000, 0x0800, CRC(8b71fd9e) SHA1(8cd5005e531eafa361d6b7e9eed159d164776c70) )
868
869 // DVG PROM
870 ROM_REGION( 0x100, "dvg:prom", 0 )
871 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
872 ROM_END
873
874 ROM_START( asteroid1 )
875 ROM_REGION( 0x8000, "maincpu", 0 )
876 ROM_LOAD( "035145-01.ef2", 0x6800, 0x0800, CRC(e9bfda64) SHA1(291dc567ebb31b35df83d9fb87f4080f251ff9c8) )
877 ROM_LOAD( "035144-01.h2", 0x7000, 0x0800, CRC(e53c28a9) SHA1(d9f081e73511ec43377f0c6457747f15a470d4dc) )
878 ROM_LOAD( "035143-01.j2", 0x7800, 0x0800, CRC(7d4e3d05) SHA1(d88000e904e158efde50e453e2889ecd2cb95f24) )
879 // Vector ROM
880 ROM_LOAD( "035127-01.np3", 0x5000, 0x0800, CRC(99699366) SHA1(9b2828fc1cef7727f65fa65e1e11e309b7c98792) )
881
882 // DVG PROM
883 ROM_REGION( 0x100, "dvg:prom", 0 )
884 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
885 ROM_END
886
887 ROM_START( asteroidb )
888 ROM_REGION( 0x8000, "maincpu", 0 )
889 ROM_LOAD( "035145ll.de1", 0x6800, 0x0800, CRC(605fc0f2) SHA1(8d897a3b75bd1f2537470f0a34a97a8c0853ee08) )
890 ROM_LOAD( "035144ll.c1", 0x7000, 0x0800, CRC(e106de77) SHA1(003e99d095bd4df6fae243ea1dd5b12f3eb974f1) )
891 ROM_LOAD( "035143ll.b1", 0x7800, 0x0800, CRC(6b1d8594) SHA1(ff3cd93f1bc5734bface285e442125b395602d7d) )
892 // Vector ROM
893 ROM_LOAD( "035127-02.np3", 0x5000, 0x0800, CRC(8b71fd9e) SHA1(8cd5005e531eafa361d6b7e9eed159d164776c70) )
894
895 // DVG PROM
896 ROM_REGION( 0x100, "dvg:prom", 0 )
897 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
898 ROM_END
899
900 /* Space Rocks (J.Estevez, Barcelona).
901 Seems to be a legit spanish set, since there are documented cabs
902 registered in Spain.
903 */
904 ROM_START( spcrocks )
905 ROM_REGION( 0x8000, "maincpu", 0 )
906 ROM_LOAD( "1.bin", 0x6800, 0x0800, CRC(0cc75459) SHA1(2af85c9689b878155004da47fedbde5853a18723) )
907 ROM_LOAD( "2.bin", 0x7000, 0x0800, CRC(096ed35c) SHA1(064d680ded7f30c543f93ae5ca85f90d550f73e5) )
908 ROM_LOAD( "3.bin", 0x7800, 0x0800, CRC(b912754d) SHA1(d4ada3e162ff454a48468f6309947276df0c5331) )
909 // Vector ROM
910 ROM_LOAD( "e.bin", 0x5000, 0x0800, CRC(148ef465) SHA1(4b1158112364bc55b8aab4127949f9238c36b238) )
911
912 // DVG PROM
913 ROM_REGION( 0x100, "dvg:prom", 0 )
914 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, BAD_DUMP CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) ) // still undumped.
915 ROM_END
916
917 ROM_START( aerolitos )
918 ROM_REGION( 0x8000, "maincpu", 0 )
919 ROM_LOAD( "2516_1e.bin", 0x6800, 0x0800, CRC(0cc75459) SHA1(2af85c9689b878155004da47fedbde5853a18723) )
920 ROM_LOAD( "2516_1d.bin", 0x7000, 0x0800, CRC(096ed35c) SHA1(064d680ded7f30c543f93ae5ca85f90d550f73e5) )
921 ROM_LOAD( "2516_1c.bin", 0x7800, 0x0800, CRC(b912754d) SHA1(d4ada3e162ff454a48468f6309947276df0c5331) )
922 // Vector ROM
923 ROM_LOAD( "2716_3n.bin", 0x5000, 0x0800, CRC(32e69e66) SHA1(a4cce36bc781443b430003280ef4185a4a04de96) )
924
925 // DVG PROM
926 ROM_REGION( 0x100, "dvg:prom", 0 )
927 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
928 ROM_END
929
930 ROM_START( asterock )
931 ROM_REGION( 0x8000, "maincpu", 0 )
932 ROM_LOAD( "10505.2", 0x6800, 0x0400, CRC(cdf720c6) SHA1(85fe748096478e28a06bd98ff3aad73ab21b22a4) )
933 ROM_LOAD( "10505.3", 0x6c00, 0x0400, CRC(ee58bdf0) SHA1(80094cb5dafd327aff6658ede33106f0493a809d) )
934 ROM_LOAD( "10505.4", 0x7000, 0x0400, CRC(8d3e421e) SHA1(5f5719ab84d4755e69bef205d313b455bc59c413) )
935 ROM_LOAD( "10505.5", 0x7400, 0x0400, CRC(d2ce7672) SHA1(b6012e09b2439a614a55bcf23be0692c42830e21) )
936 ROM_LOAD( "10505.6", 0x7800, 0x0400, CRC(74103c87) SHA1(e568b5ac573a6d0474cf672b3c62abfbd3320799) )
937 ROM_LOAD( "10505.7", 0x7c00, 0x0400, CRC(75a39768) SHA1(bf22998fd692fb01964d8894e421435c55d746a0) )
938 // Vector ROM
939 ROM_LOAD( "10505.0", 0x5000, 0x0400, CRC(6bd2053f) SHA1(790f2858f44bbb1854e2d9d549e29f4815c4665b) )
940 ROM_LOAD( "10505.1", 0x5400, 0x0400, CRC(231ce201) SHA1(710f4c19864d725ba1c9ea447a97e84001a679f7) )
941
942 // DVG PROM
943 ROM_REGION( 0x100, "dvg:prom", 0 )
944 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
945 ROM_END
946
947 ROM_START( asterockv )
948 ROM_REGION( 0x8000, "maincpu", 0 )
949 ROM_LOAD( "10505.2", 0x6800, 0x0400, CRC(cdf720c6) SHA1(85fe748096478e28a06bd98ff3aad73ab21b22a4) )
950 ROM_LOAD( "10505.3", 0x6c00, 0x0400, CRC(ee58bdf0) SHA1(80094cb5dafd327aff6658ede33106f0493a809d) )
951 ROM_LOAD( "10505.4", 0x7000, 0x0400, CRC(8d3e421e) SHA1(5f5719ab84d4755e69bef205d313b455bc59c413) )
952 ROM_LOAD( "10505.5", 0x7400, 0x0400, CRC(d2ce7672) SHA1(b6012e09b2439a614a55bcf23be0692c42830e21) )
953 ROM_LOAD( "10505.6", 0x7800, 0x0400, CRC(74103c87) SHA1(e568b5ac573a6d0474cf672b3c62abfbd3320799) )
954 ROM_LOAD( "10505.7", 0x7c00, 0x0400, CRC(75a39768) SHA1(bf22998fd692fb01964d8894e421435c55d746a0) )
955 // Vector ROM
956 ROM_LOAD( "videotronas.0", 0x5000, 0x0400, CRC(d1ac90b5) SHA1(7209027d2099c75c6336605ae80491ffc5673674) ) // only this rom differs from Sidam's Asterock
957 ROM_LOAD( "10505.1", 0x5400, 0x0400, CRC(231ce201) SHA1(710f4c19864d725ba1c9ea447a97e84001a679f7) )
958
959 // DVG PROM
960 ROM_REGION( 0x100, "dvg:prom", 0 )
961 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
962 ROM_END
963
964 ROM_START( meteorite )
965 ROM_REGION( 0x8000, "maincpu", 0 )
966 ROM_LOAD( "2", 0x6800, 0x0400, CRC(cdf720c6) SHA1(85fe748096478e28a06bd98ff3aad73ab21b22a4) )
967 ROM_LOAD( "3", 0x6c00, 0x0400, CRC(ee58bdf0) SHA1(80094cb5dafd327aff6658ede33106f0493a809d) )
968 ROM_LOAD( "4", 0x7000, 0x0400, CRC(8d3e421e) SHA1(5f5719ab84d4755e69bef205d313b455bc59c413) )
969 ROM_LOAD( "5", 0x7400, 0x0400, CRC(d2ce7672) SHA1(b6012e09b2439a614a55bcf23be0692c42830e21) )
970 ROM_LOAD( "6", 0x7800, 0x0400, CRC(379072ed) SHA1(1ea788f58490f6d0aa6fda1374e33aa25fa343c6) )
971 ROM_LOAD( "7", 0x7c00, 0x0400, CRC(75a39768) SHA1(bf22998fd692fb01964d8894e421435c55d746a0) )
972 // Vector ROM
973 ROM_LOAD( "0", 0x5000, 0x0400, CRC(7a3ff3ac) SHA1(11dc452d2804bbaa7cee4dff85a2ab02e6f2c3a9) )
974 ROM_LOAD( "1", 0x5400, 0x0400, CRC(d62b2887) SHA1(8832953c7166d2f0ed1067c43ebf369db4a4aa70) )
975
976 // DVG PROM
977 ROM_REGION( 0x100, "dvg:prom", 0 )
978 ROM_LOAD( "meteorites_bprom.bin", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
979 ROM_END
980
981 ROM_START( meteorts )
982 ROM_REGION( 0x8000, "maincpu", 0 )
983 ROM_LOAD( "m0_c1.bin", 0x6800, 0x0800, CRC(dff88688) SHA1(7f4148a580fb6f605499c99e7dde7068eca1651a) )
984 ROM_LOAD( "m1_f1.bin", 0x7000, 0x0800, CRC(e53c28a9) SHA1(d9f081e73511ec43377f0c6457747f15a470d4dc) )
985 ROM_LOAD( "m2_j1.bin", 0x7800, 0x0800, CRC(64bd0408) SHA1(141d053cb4cce3fece98293136928b527d3ade0f) )
986 // Vector ROM
987 ROM_LOAD( "mv_np3.bin", 0x5000, 0x0800, CRC(11d1c4ae) SHA1(433c2c05b92094bbe102c356d7f1a907db13da67) )
988
989 // DVG PROM
990 ROM_REGION( 0x100, "dvg:prom", 0 )
991 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
992 ROM_END
993
994 ROM_START( meteorho )
995 ROM_REGION( 0x8000, "maincpu", 0 )
996 ROM_LOAD( "g.bin", 0x6800, 0x0400, CRC(7420421b) SHA1(e84a340c0cbc8816bbe43120bc8e692d2a3db0ab) )
997 ROM_LOAD( "h.bin", 0x6c00, 0x0400, CRC(a6aa56bc) SHA1(8298e1667c3bd9af9e0be7d53c00d73ef59d742e) )
998 ROM_LOAD( "f.bin", 0x7000, 0x0400, CRC(2711bd52) SHA1(219499b9b8dcc221173f9b9a34c9e6f2fb936231) )
999 ROM_LOAD( "d.bin", 0x7400, 0x0400, CRC(9f169db9) SHA1(b6a4a8ea9d48c6b1faebf104faae7c67b2b060b5) )
1000 ROM_LOAD( "c.bin", 0x7800, 0x0400, CRC(bd99556a) SHA1(8c712b205125c0c2a45dbb4fa9e5e5302c5bbd1b) )
1001 ROM_LOAD( "e.bin", 0x7c00, 0x0400, CRC(10fdfe9a) SHA1(9db4b3ab904e66d3622ec98e13ef6baf5d4f7099) )
1002 // Vector ROM
1003 ROM_LOAD( "a.bin", 0x5000, 0x0400, CRC(d7822110) SHA1(bf6c5e622fdc16c39a1d8f23fc029abaa1e99b19) )
1004 ROM_LOAD( "b.bin", 0x5400, 0x0400, CRC(d62b2887) SHA1(8832953c7166d2f0ed1067c43ebf369db4a4aa70) )
1005
1006 // DVG PROM
1007 ROM_REGION( 0x100, "dvg:prom", 0 )
1008 ROM_LOAD( "prom.bin", 0x0000, 0x0100, CRC(9e237193) SHA1(f663e12d5db0fa50ea49d03591475ae0a7168bc0) )
1009 ROM_END
1010
1011 // The PCB was found inside a "Kasteroides" cab (a Spanish Asteriods bootleg from "Sede 3")
1012 ROM_START( meteorbl )
1013 ROM_REGION( 0x8000, "maincpu", 0 )
1014 ROM_LOAD( "2as.12", 0x6800, 0x0400, CRC(cdf720c6) SHA1(85fe748096478e28a06bd98ff3aad73ab21b22a4) )
1015 ROM_LOAD( "3as.13", 0x6c00, 0x0400, CRC(ee58bdf0) SHA1(80094cb5dafd327aff6658ede33106f0493a809d) )
1016 ROM_LOAD( "4as.14", 0x7000, 0x0400, CRC(8d3e421e) SHA1(5f5719ab84d4755e69bef205d313b455bc59c413) )
1017 ROM_LOAD( "5as.15", 0x7400, 0x0400, CRC(d2ce7672) SHA1(b6012e09b2439a614a55bcf23be0692c42830e21) )
1018 ROM_LOAD( "6as.16", 0x7800, 0x0400, CRC(74103c87) SHA1(e568b5ac573a6d0474cf672b3c62abfbd3320799) )
1019 ROM_LOAD( "7as.17", 0x7c00, 0x0400, CRC(75a39768) SHA1(bf22998fd692fb01964d8894e421435c55d746a0) )
1020 // Vector ROM
1021 ROM_LOAD( "0as.10", 0x5000, 0x0400, CRC(dc10767a) SHA1(579951ced16d4c538eaddbc58474f9d8bf4906f3) )
1022 ROM_LOAD( "1as.11", 0x5400, 0x0400, CRC(231ce201) SHA1(710f4c19864d725ba1c9ea447a97e84001a679f7) )
1023
1024 // DVG PROM
1025 ROM_REGION( 0x100, "dvg:prom", 0 )
1026 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, BAD_DUMP CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) ) // Not dumped on this set
1027 ROM_END
1028
1029 ROM_START( hyperspc )
1030 ROM_REGION( 0x8000, "maincpu", 0 )
1031 ROM_LOAD( "035145-01.bin", 0x6800, 0x0800, CRC(e9bfda64) SHA1(291dc567ebb31b35df83d9fb87f4080f251ff9c8) )
1032 ROM_LOAD( "035144-01.bin", 0x7000, 0x0800, CRC(e53c28a9) SHA1(d9f081e73511ec43377f0c6457747f15a470d4dc) )
1033 ROM_LOAD( "035143-01.bin", 0x7800, 0x0800, CRC(7d4e3d05) SHA1(d88000e904e158efde50e453e2889ecd2cb95f24) )
1034 // Vector ROM
1035 ROM_LOAD( "035127-01.bin", 0x5000, 0x0800, CRC(7dec48bd) SHA1(8bc926a763ff80b101b2e1c24d45615c3daf67d5) )
1036
1037 // DVG PROM
1038 ROM_REGION( 0x100, "dvg:prom", 0 )
1039 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1040 ROM_END
1041
1042 ROM_START( astdelux )
1043 ROM_REGION( 0x8000, "maincpu", 0 )
1044 ROM_LOAD( "036430-02.d1", 0x6000, 0x0800, CRC(a4d7a525) SHA1(abe262193ec8e1981be36928e9a89a8ac95cd0ad) )
1045 ROM_LOAD( "036431-02.ef1", 0x6800, 0x0800, CRC(d4004aae) SHA1(aa2099b8fc62a79879efeea70ea1e9ed77e3e6f0) )
1046 ROM_LOAD( "036432-02.fh1", 0x7000, 0x0800, CRC(6d720c41) SHA1(198218cd2f43f8b83e4463b1f3a8aa49da5015e4) )
1047 ROM_LOAD( "036433-03.j1", 0x7800, 0x0800, CRC(0dcc0be6) SHA1(bf10ffb0c4870e777d6b509cbede35db8bb6b0b8) )
1048 // Vector ROM
1049 ROM_LOAD( "036800-02.r2", 0x4800, 0x0800, CRC(bb8cabe1) SHA1(cebaa1b91b96e8b80f2b2c17c6fd31fa9f156386) )
1050 ROM_LOAD( "036799-01.np2", 0x5000, 0x0800, CRC(7d511572) SHA1(1956a12bccb5d3a84ce0c1cc10c6ad7f64e30b40) )
1051
1052 // DVG PROM
1053 ROM_REGION( 0x100, "dvg:prom", 0 )
1054 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1055
1056 ROM_REGION( 0x40, "earom", ROMREGION_ERASE00 ) // default to zero fill to suppress invalid high score display
1057 ROM_END
1058
1059 ROM_START( astdelux2 )
1060 ROM_REGION( 0x8000, "maincpu", 0 )
1061 ROM_LOAD( "036430-01.d1", 0x6000, 0x0800, CRC(8f5dabc6) SHA1(5d7543e19acab99ddb63c0ffd60f54d7a0f267f5) )
1062 ROM_LOAD( "036431-01.ef1", 0x6800, 0x0800, CRC(157a8516) SHA1(9041d8c2369d004f198681e02b59a923fa8f70c9) )
1063 ROM_LOAD( "036432-01.fh1", 0x7000, 0x0800, CRC(fdea913c) SHA1(ded0138a20d80317d67add5bb2a64e6274e0e409) )
1064 ROM_LOAD( "036433-02.j1", 0x7800, 0x0800, CRC(d8db74e3) SHA1(52b64e867df98d14742eb1817b59931bb7f941d9) )
1065 // Vector ROM
1066 ROM_LOAD( "036800-01.r2", 0x4800, 0x0800, CRC(3b597407) SHA1(344fea2e5d84acce365d76daed61e96b9b6b37cc) )
1067 ROM_LOAD( "036799-01.np2", 0x5000, 0x0800, CRC(7d511572) SHA1(1956a12bccb5d3a84ce0c1cc10c6ad7f64e30b40) )
1068
1069 // DVG PROM
1070 ROM_REGION( 0x100, "dvg:prom", 0 )
1071 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1072
1073 ROM_REGION( 0x40, "earom", ROMREGION_ERASE00 ) // default to zero fill to suppress invalid high score display
1074 ROM_END
1075
1076 /***************************************************************************
1077
1078 Asteroids Deluxe revision 1 romset
1079 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1080
1081 I have had a number of Asteroids deluxe pcbs pass through my hands, every one i have come across has had
1082 a revision -01 marked romset apart from the rom at J1, this is always marked -02.
1083
1084 This revision 2 rom in that location works fine, and i believe was a
1085 factory upgrade, and production fit on 99% of pcbs.
1086
1087 This pcb was from a cabinet with a serial number of 000967, so its an early one, and
1088 it has a completely -01 romset on the pcb.
1089
1090 Coincidentally i went through a pile of my manuals and came across some service bulletins which might
1091 explain why there is this mismatch in revision numbers, it seems Atari released the game, and found
1092 they needed to change default settings becasue of earnings potential in their default
1093 first set (revision 1), not once, but twice! then they changed the romset altogether. The documents
1094 in question are CO-174-02 (2 pages, 3 sides). this document shows what i think was the final revision
1095 of roms to be produced, they consist of a wholly -02 romset, with the exception being a -03 rom at
1096 location J1.
1097
1098 So, anyhow, find in this file, the FIRST revision of rom -01 in J1. This pcb contained the following
1099 roms in the following locations :
1100
1101 all roms are TMS 2516, marked with silver atari labels 'ATARI 8105 ' then the info below:
1102
1103 R2 = 036800 01E
1104 N/P2 = 036799 01E
1105 J1 = 036433 01E
1106 F/H1 = 036432 01E
1107 E/F1 = 036431 01E
1108 D1 = 036430 01E
1109
1110 Dumped 24/08/05
1111 by Andy Welburn
1112 www.andys-arcade.com
1113 */
1114 ROM_START( astdelux1 )
1115 ROM_REGION( 0x8000, "maincpu", 0 )
1116 ROM_LOAD( "036430-01.d1", 0x6000, 0x0800, CRC(8f5dabc6) SHA1(5d7543e19acab99ddb63c0ffd60f54d7a0f267f5) )
1117 ROM_LOAD( "036431-01.ef1", 0x6800, 0x0800, CRC(157a8516) SHA1(9041d8c2369d004f198681e02b59a923fa8f70c9) )
1118 ROM_LOAD( "036432-01.fh1", 0x7000, 0x0800, CRC(fdea913c) SHA1(ded0138a20d80317d67add5bb2a64e6274e0e409) )
1119 ROM_LOAD( "036433-01.j1", 0x7800, 0x0800, CRC(ef09bac7) SHA1(6a4b37dbfe4e6badc4e81036b1430da2e9cb8ca4) )
1120 // Vector ROM
1121 ROM_LOAD( "036800-01.r2", 0x4800, 0x0800, CRC(3b597407) SHA1(344fea2e5d84acce365d76daed61e96b9b6b37cc) )
1122 ROM_LOAD( "036799-01.np2", 0x5000, 0x0800, CRC(7d511572) SHA1(1956a12bccb5d3a84ce0c1cc10c6ad7f64e30b40) )
1123
1124 // DVG PROM
1125 ROM_REGION( 0x100, "dvg:prom", 0 )
1126 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1127
1128 ROM_REGION( 0x40, "earom", ROMREGION_ERASE00 ) // default to zero fill to suppress invalid high score display
1129 ROM_END
1130
1131 ROM_START( llander )
1132 ROM_REGION( 0x8000, "maincpu", 0 )
1133 ROM_LOAD( "034572-02.f1", 0x6000, 0x0800, CRC(b8763eea) SHA1(5a15eaeaf825ccdf9ce013a6789cf51da20f785c) )
1134 ROM_LOAD( "034571-02.de1", 0x6800, 0x0800, CRC(77da4b2f) SHA1(4be6cef5af38734d580cbfb7e4070fe7981ddfd6) )
1135 ROM_LOAD( "034570-01.c1", 0x7000, 0x0800, CRC(2724e591) SHA1(ecf4430a0040c227c896aa2cd81ee03960b4d641) )
1136 ROM_LOAD( "034569-02.b1", 0x7800, 0x0800, CRC(72837a4e) SHA1(9b21ba5e1518079c326ca6e15b9993e6c4483caa) )
1137 // Vector ROM
1138 ROM_LOAD( "034599-01.r3", 0x4800, 0x0800, CRC(355a9371) SHA1(6ecb40169b797d9eb623bcb17872f745b1bf20fa) )
1139 ROM_LOAD( "034598-01.np3", 0x5000, 0x0800, CRC(9c4ffa68) SHA1(eb4ffc289d254f699f821df3146aa2c6cd78597f) )
1140 ROM_LOAD( "034597-01.m3", 0x5800, 0x0800, CRC(ebb744f2) SHA1(e685b094c1261a351e4e82dfb487462163f136a4) ) // Built from original Atari source code
1141
1142 // DVG PROM
1143 ROM_REGION( 0x100, "dvg:prom", 0 )
1144 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1145 ROM_END
1146
1147 ROM_START( llander1 )
1148 ROM_REGION( 0x8000, "maincpu", 0 )
1149 ROM_LOAD( "034572-01.f1", 0x6000, 0x0800, CRC(2aff3140) SHA1(4fc8aae640ce655417c11d9a3121aae9a1238e7c) )
1150 ROM_LOAD( "034571-01.de1", 0x6800, 0x0800, CRC(493e24b7) SHA1(125a2c335338ccabababef12fd7096ef4b605a31) )
1151 ROM_LOAD( "034570-01.c1", 0x7000, 0x0800, CRC(2724e591) SHA1(ecf4430a0040c227c896aa2cd81ee03960b4d641) )
1152 ROM_LOAD( "034569-01.b1", 0x7800, 0x0800, CRC(b11a7d01) SHA1(8f2935dbe04ee68815d69ea9e71853b5a145d7c3) )
1153 // Vector ROM
1154 ROM_LOAD( "034599-01.r3", 0x4800, 0x0800, CRC(355a9371) SHA1(6ecb40169b797d9eb623bcb17872f745b1bf20fa) )
1155 ROM_LOAD( "034598-01.np3", 0x5000, 0x0800, CRC(9c4ffa68) SHA1(eb4ffc289d254f699f821df3146aa2c6cd78597f) )
1156 ROM_LOAD( "034597-01.m3", 0x5800, 0x0800, CRC(ebb744f2) SHA1(e685b094c1261a351e4e82dfb487462163f136a4) ) // Built from original Atari source code
1157
1158 // DVG PROM
1159 ROM_REGION( 0x100, "dvg:prom", 0 )
1160 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
1161 ROM_END
1162
1163 ROM_START( llandert )
1164 ROM_REGION( 0x8000, "maincpu", 0 )
1165 ROM_LOAD( "llprom0.de1", 0x6800, 0x0800, CRC(b5302947) SHA1(622245053682b838762b4eb04be5d4bbed5e78ef) )
1166 ROM_LOAD( "llprom1.c1", 0x7000, 0x0800, CRC(761a5b45) SHA1(dde08ef856caed4b017bfbb8e3f3260747c0a1e5) )
1167 ROM_LOAD( "llprom2.b1", 0x7800, 0x0800, CRC(9ec62656) SHA1(2247fd187d0aa7305d7326722c99578ad20718fa) )
1168
1169 // Vector ROM
1170 ROM_LOAD( "llvrom0.r3", 0x4800, 0x0800, CRC(c307b42a) SHA1(6872c7671f4ab314962892b3cf93cc9d6c380ee2) ) // unused
1171 ROM_LOAD( "llvrom1.np3", 0x5000, 0x0800, CRC(ace6b2be) SHA1(afdf4e6fc4be23197977e67c04b9baf9597756a0) ) // unused
1172 ROM_LOAD( "llvrom2.m3", 0x5800, 0x0800, CRC(56c38219) SHA1(714878c0b24c9657c972a2ba25e790a4d3b81d64) ) // unused, filled with garbage? (it is not the language rom)
1173
1174 // DVG PROM
1175 ROM_REGION( 0x100, "dvg:prom", 0 )
1176 ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) ) // taken from parent
1177 ROM_END
1178
1179
1180 /*************************************
1181 *
1182 * Driver initialization
1183 *
1184 *************************************/
1185
1186 void asteroid_state::init_asteroidb()
1187 {
1188 m_maincpu->space(AS_PROGRAM).install_read_port(0x2000, 0x2000, "IN0");
1189 m_maincpu->space(AS_PROGRAM).install_read_port(0x2003, 0x2003, "HS");
1190 }
1191
1192
init_asterock()1193 void asteroid_state::init_asterock()
1194 {
1195 m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8sm_delegate(*this, FUNC(asteroid_state::asterock_IN0_r)));
1196 }
1197
1198
1199 /*************************************
1200 *
1201 * Game drivers
1202 *
1203 *************************************/
1204
1205 GAME( 1979, asteroid, 0, asteroid, asteroid, asteroid_state, empty_init, ROT0, "Atari", "Asteroids (rev 4)", MACHINE_SUPPORTS_SAVE )
1206 GAME( 1979, asteroid2, asteroid, asteroid, asteroid, asteroid_state, empty_init, ROT0, "Atari", "Asteroids (rev 2)", MACHINE_SUPPORTS_SAVE )
1207 GAME( 1979, asteroid1, asteroid, asteroid, asteroid, asteroid_state, empty_init, ROT0, "Atari", "Asteroids (rev 1)", MACHINE_SUPPORTS_SAVE )
1208 GAME( 1979, asteroidb, asteroid, asteroid, asteroidb, asteroid_state, init_asteroidb, ROT0, "bootleg", "Asteroids (bootleg on Lunar Lander hardware)", MACHINE_SUPPORTS_SAVE )
1209 GAME( 1981, spcrocks, asteroid, asteroid, aerolitos, asteroid_state, empty_init, ROT0, "Atari (J.Estevez license)", "Space Rocks (Spanish clone of Asteroids)", MACHINE_SUPPORTS_SAVE ) // Space Rocks seems to be a legit set. Cabinet registered to 'J.Estevez (Barcelona).
1210 GAME( 1980, aerolitos, asteroid, asteroid, aerolitos, asteroid_state, empty_init, ROT0, "bootleg (Rodmar Elec.)", "Aerolitos (Spanish bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE ) // 'Aerolitos' appears on the cabinet, this was distributed in Spain, the Spanish text is different to that contained in the original version (corrected)
1211 GAME( 1979, asterock, asteroid, asterock, asterock, asteroid_state, init_asterock, ROT0, "bootleg (Sidam)", "Asterock (Sidam bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1212 GAME( 1979, asterockv, asteroid, asterock, asterock, asteroid_state, init_asterock, ROT0, "bootleg (Videotron)", "Asterock (Videotron bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1213 GAME( 1979, meteorite, asteroid, asterock, asterock, asteroid_state, init_asterock, ROT0, "bootleg (Proel)", "Meteorite (Proel bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1214 GAME( 1979, meteorts, asteroid, asteroid, asteroid, asteroid_state, empty_init, ROT0, "bootleg (VGG)", "Meteorites (VGG bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1215 GAME( 1979, meteorho, asteroid, asteroid, asteroid, asteroid_state, empty_init, ROT0, "bootleg (Hoei)", "Meteor (Hoei bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1216 GAME( 1979, meteorbl, asteroid, asterock, asterock, asteroid_state, init_asterock, ROT0, "bootleg", "Meteor (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1217 GAME( 1979, hyperspc, asteroid, asteroid, asteroid, asteroid_state, empty_init, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
1218
1219 GAMEL(1980, astdelux, 0, astdelux, astdelux, asteroid_state, empty_init, ROT0, "Atari", "Asteroids Deluxe (rev 3)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
1220 GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, asteroid_state, empty_init, ROT0, "Atari", "Asteroids Deluxe (rev 2)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
1221 GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, asteroid_state, empty_init, ROT0, "Atari", "Asteroids Deluxe (rev 1)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
1222
1223 GAME( 1979, llander, 0, llander, llander, asteroid_state, empty_init, ROT0, "Atari", "Lunar Lander (rev 2)", MACHINE_SUPPORTS_SAVE )
1224 GAME( 1979, llander1, llander, llander, llander1, asteroid_state, empty_init, ROT0, "Atari", "Lunar Lander (rev 1)", MACHINE_SUPPORTS_SAVE )
1225 GAME( 1979, llandert, llander, llander, llandert, asteroid_state, empty_init, ROT0, "Atari", "Lunar Lander (screen test)", MACHINE_SUPPORTS_SAVE ) // No copyright shown, assume it's an in-house diagnostics romset (PCB came from a seller that has had Atari prototypes in his possession before)
1226