1 // license:BSD-3-Clause
2 // copyright-holders:Robbbert
3 /****************************************************************************************************
4
5 PINBALL
6 Gottlieb System 1
7
8 Gottlieb's first foray into computerised pinball.
9
10 Typical of Gottlieb's golden period, these machines are physically well-designed and made.
11 However, the computer side was another story, an attempt to catch up to its competitors who
12 were way ahead in the technology race. Instead of each board being solidly grounded to the
13 chassis, the only connections were through flaky edge connectors. Voltage differences would
14 then cause solenoids and lights to switch on at random and destroy transistors. Further, the
15 CPU chips chosen were an unusual 4-bit design that was already old.
16
17 The first games had chimes. Then, this was replaced by 3 NE555 tone oscillators. The last
18 machines had a real sound board which had more computing power than the main cpu.
19
20 Game numbering:
21 Each Gottlieb game had the model number printed on the instruction card, so it was very
22 easy to gather information. Gottlieb either made a single-player game, or a 2-player and
23 a 4-player game. For example, Centigrade 37 (#407) was a single-player game, while Bronco
24 (4-player)(#396) was exactly the same as Mustang (2-player)(#397). Cleopatra (#409) was
25 originally a 4-player EM game (with Pyramid #410 being the 2-player version). Then, the SS
26 version was made, and it kept the same number. After that, the SS versions were suffixed
27 with 'SS' up to The Incredible Hulk (#433), and then the 'SS' was dropped.
28
29
30 Game List:
31 Number ROM Name
32 409 A Cleopatra
33 412SS B Sinbad
34 417SS C Joker Poker
35 419SS D Dragon
36 421SS E Solar Ride
37 422SS F Countdown
38 424SS G Close Encounters of the third kind
39 425SS H Charlie's Angels
40 427SS I Pinball Pool
41 429SS J Totem
42 433SS K The Incredible Hulk
43 435 L Genie
44 437 N Buck Rogers
45 438 P Torch
46 440 R Roller Disco
47 442 S Asteroid Annie and the Aliens
48
49 Chips used:
50 U1 11660 CPU
51 U2 10696EE 5101L RAM interface (device#6)
52 U3 10696EE General purpose I/O (dipswitches, lamps, misc) (device#3)
53 U4 A1753CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (solenoid control)
54 U5 A1752CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (switch matrix)
55 U6 10788 Display driver
56 5101L 4-bit static RAM
57 MM6351-IJ ROM
58
59
60 ToDo:
61 - Everything
62 - Hard to debug because no errors are logged; also the program flow seems odd.
63 - 5101L RAM (battery-backed) is driven from the 10696.
64 - MM6351 ROM is driven from the CPU I/O ports and has 4 banks.
65
66 *****************************************************************************************************/
67
68
69 #include "emu.h"
70 #include "machine/genpin.h"
71 #include "machine/ra17xx.h"
72 #include "machine/r10696.h"
73 #include "machine/r10788.h"
74 #include "cpu/pps4/pps4.h"
75 #include "gts1.lh"
76
77 #define VERBOSE 1
78 #include "logmacro.h"
79
80
81 class gts1_state : public genpin_class
82 {
83 public:
gts1_state(const machine_config & mconfig,device_type type,const char * tag)84 gts1_state(const machine_config &mconfig, device_type type, const char *tag)
85 : genpin_class(mconfig, type, tag)
86 , m_maincpu(*this, "maincpu")
87 , m_dips(*this, "DSW%u", 0)
88 , m_switches(*this, "X.%u", 0)
89 , m_digit8(*this, "digit8_%u", 0U)
90 , m_digit7(*this, "digit7_%u", 0U)
91 { }
92
93 void gts1(machine_config &config);
94
95 private:
96 uint8_t gts1_solenoid_r(offs_t offset);
97 void gts1_solenoid_w(offs_t offset, uint8_t data);
98 uint8_t gts1_switches_r(offs_t offset);
99 void gts1_switches_w(offs_t offset, uint8_t data);
100 void gts1_display_w(offs_t offset, uint8_t data);
101 uint8_t gts1_lamp_apm_r(offs_t offset);
102 void gts1_lamp_apm_w(offs_t offset, uint8_t data);
103 uint8_t gts1_nvram_r(offs_t offset);
104 void gts1_nvram_w(offs_t offset, uint8_t data);
105 uint8_t gts1_io_r(offs_t offset);
106 void gts1_io_w(offs_t offset, uint8_t data);
107 uint8_t gts1_pa_r();
108 void gts1_do_w(uint8_t data);
109
110 virtual void machine_start() override;
111 virtual void machine_reset() override;
112
113 void gts1_map(address_map &map);
114 void gts1_data(address_map &map);
115 void gts1_io(address_map &map);
116
117 required_device<cpu_device> m_maincpu;
118 required_ioport_array<3> m_dips;
119 required_ioport_array<5> m_switches;
120 output_finder<32> m_digit8; // driver currently uses 0-6, 8-14, 16-22 and 24-30
121 output_finder<32> m_digit7; // driver currently uses 7, 15, 23 and 31
122
123 uint8_t m_strobe; //!< switches strobe lines (5 lower bits used)
124 uint8_t m_nvram_addr; //!< NVRAM address
125 bool m_nvram_e2; //!< NVRWAM enable (E2 line)
126 bool m_nvram_wr; //!< NVRWAM write (W/R line)
127 uint16_t m_6351_addr; //!< ROM MM6351 address (12 bits)
128 uint16_t m_z30_out; //!< 4-to-16 decoder outputs
129 };
130
gts1_map(address_map & map)131 void gts1_state::gts1_map(address_map &map)
132 {
133 map(0x0000, 0x0fff).rom();
134 }
135
gts1_data(address_map & map)136 void gts1_state::gts1_data(address_map &map)
137 {
138 map(0x0000, 0x00ff).ram();
139 map(0x0100, 0x01ff).ram().share("nvram");
140 }
141
gts1_io(address_map & map)142 void gts1_state::gts1_io(address_map &map)
143 {
144 map(0x0000, 0x00ff).r(FUNC(gts1_state::gts1_io_r)).w(FUNC(gts1_state::gts1_io_w)); // catch undecoded I/O accesss
145
146 map(0x0020, 0x002f).rw("u4", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U4) solenoid
147 map(0x0030, 0x003f).rw("u3", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U3) solenoid + dips
148 map(0x0040, 0x004f).rw("u5", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U5) switch matrix
149 map(0x0060, 0x006f).rw("u2", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U2) NVRAM io chip
150 map(0x00d0, 0x00df).rw("u6", FUNC(r10788_device::io_r), FUNC(r10788_device::io_w)); // (U6) display chip
151 }
152
153 static INPUT_PORTS_START( gts1_dips )
154 PORT_START("DSW0")
155 PORT_DIPNAME( 0x01, 0x00, "S01")
DEF_STR(Off)156 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
157 PORT_DIPSETTING( 0x01, DEF_STR( On ))
158 PORT_DIPNAME( 0x02, 0x00, "S02")
159 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
160 PORT_DIPSETTING( 0x02, DEF_STR( On ))
161 PORT_DIPNAME( 0x04, 0x00, "S03")
162 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
163 PORT_DIPSETTING( 0x04, DEF_STR( On ))
164 PORT_DIPNAME( 0x08, 0x00, "S04")
165 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
166 PORT_DIPSETTING( 0x08, DEF_STR( On ))
167 PORT_DIPNAME( 0x10, 0x00, "S05")
168 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
169 PORT_DIPSETTING( 0x10, DEF_STR( On ))
170 PORT_DIPNAME( 0x20, 0x20, "S06")
171 PORT_DIPSETTING( 0x00, DEF_STR( No ))
172 PORT_DIPSETTING( 0x20, DEF_STR( Yes ))
173 PORT_DIPNAME( 0x40, 0x40, "S07")
174 PORT_DIPSETTING( 0x00, DEF_STR( No ))
175 PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
176 PORT_DIPNAME( 0x80, 0x80, "S08")
177 PORT_DIPSETTING( 0x00, DEF_STR( No ))
178 PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
179
180 PORT_START("DSW1")
181 PORT_DIPNAME( 0x01, 0x00, "S09")
182 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
183 PORT_DIPSETTING( 0x01, DEF_STR( On ))
184 PORT_DIPNAME( 0x02, 0x00, "S10")
185 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
186 PORT_DIPSETTING( 0x02, DEF_STR( On ))
187 PORT_DIPNAME( 0x04, 0x00, "S11")
188 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
189 PORT_DIPSETTING( 0x04, DEF_STR( On ))
190 PORT_DIPNAME( 0x08, 0x00, "S12")
191 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
192 PORT_DIPSETTING( 0x08, DEF_STR( On ))
193 PORT_DIPNAME( 0x10, 0x00, "S13")
194 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
195 PORT_DIPSETTING( 0x10, DEF_STR( On ))
196 PORT_DIPNAME( 0x20, 0x00, "S14")
197 PORT_DIPSETTING( 0x00, DEF_STR( Yes ))
198 PORT_DIPSETTING( 0x20, DEF_STR( No ))
199 PORT_DIPNAME( 0x40, 0x40, "S15")
200 PORT_DIPSETTING( 0x00, DEF_STR( No ))
201 PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
202 PORT_DIPNAME( 0x80, 0x00, "S16")
203 PORT_DIPSETTING( 0x00, DEF_STR( No ))
204 PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
205
206 PORT_START("DSW2")
207 PORT_DIPNAME( 0x01, 0x00, "S17")
208 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
209 PORT_DIPSETTING( 0x01, DEF_STR( On ))
210 PORT_DIPNAME( 0x02, 0x00, "S18")
211 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
212 PORT_DIPSETTING( 0x02, DEF_STR( On ))
213 PORT_DIPNAME( 0x04, 0x00, "S19")
214 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
215 PORT_DIPSETTING( 0x04, DEF_STR( On ))
216 PORT_DIPNAME( 0x08, 0x00, "S20")
217 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
218 PORT_DIPSETTING( 0x08, DEF_STR( On ))
219 PORT_DIPNAME( 0x10, 0x00, "S21")
220 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
221 PORT_DIPSETTING( 0x10, DEF_STR( On ))
222 PORT_DIPNAME( 0x20, 0x00, "S22")
223 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
224 PORT_DIPSETTING( 0x20, DEF_STR( On ))
225 PORT_DIPNAME( 0x40, 0x00, "S23")
226 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
227 PORT_DIPSETTING( 0x40, DEF_STR( On ))
228 PORT_DIPNAME( 0x80, 0x00, "S24")
229 PORT_DIPSETTING( 0x00, DEF_STR( Off ))
230 PORT_DIPSETTING( 0x80, DEF_STR( On ))
231 INPUT_PORTS_END
232
233 static INPUT_PORTS_START( gts1_switches )
234 PORT_START("X.0")
235 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)
236 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
237 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
238 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
239 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER)
240 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER)
241 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
242 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
243 PORT_START("X.1")
244 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)
245 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
246 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
247 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
248 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER)
249 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER)
250 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
251 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
252 PORT_START("X.2")
253 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)
254 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
255 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
256 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
257 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER)
258 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER)
259 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
260 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
261 PORT_START("X.3")
262 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)
263 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
264 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
265 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
266 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER)
267 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER)
268 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
269 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
270 PORT_START("X.4")
271 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)
272 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
273 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
274 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
275 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER)
276 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER)
277 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
278 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
279 INPUT_PORTS_END
280
281 static INPUT_PORTS_START( gts1 )
282 PORT_INCLUDE( gts1_dips )
283
284 PORT_INCLUDE( gts1_switches )
285 INPUT_PORTS_END
286
287 static INPUT_PORTS_START( jokrpokr )
288 PORT_INCLUDE( gts1_dips )
289
290 PORT_START("X.0")
291 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PLAY/TEST")
292 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("POP/BUMBER")
293 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXTRA BALL TARGET")
294 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SPECIAL ROLLOVER")
295 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("10 POINT CONTACTS")
296 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)")
297 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
298 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
299
300 PORT_START("X.1")
301 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#1 COIN CHUTE")
302 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" ROLLOVER")
303 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"10\" DROP TARGET")
304 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"Q\" DROP TARGET (red)")
305 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET (black)")
306 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (black)")
307 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
308 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
309
310 PORT_START("X.2")
311 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#2 COIN CHUTE")
312 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"B\" ROLLOVER")
313 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (black)")
314 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (black)")
315 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET")
316 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("JOKER DROP TARGET")
317 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
318 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
319
320 PORT_START("X.3")
321 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("REPLAY BUTTON")
322 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"C\" ROLLOVER")
323 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (red)")
324 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (red)")
325 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET")
326 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)")
327 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
328 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
329
330 PORT_START("X.4")
331 PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TILT PANEL")
332 PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)
333 PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER)
334 PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER)
335 PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET")
336 PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)")
337 PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER)
338 PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER)
339 INPUT_PORTS_END
340
341 void gts1_state::machine_start()
342 {
343 genpin_class::machine_start();
344
345 m_digit8.resolve();
346 m_digit7.resolve();
347
348 save_item(NAME(m_strobe));
349 save_item(NAME(m_nvram_addr));
350 save_item(NAME(m_nvram_e2));
351 save_item(NAME(m_nvram_wr));
352 save_item(NAME(m_6351_addr));
353 save_item(NAME(m_z30_out));
354 }
355
machine_reset()356 void gts1_state::machine_reset()
357 {
358 genpin_class::machine_reset();
359
360 m_strobe = 0;
361 m_nvram_addr = 0;
362 m_nvram_e2 = false;
363 m_nvram_wr = false;
364 m_6351_addr = 0;
365 m_z30_out = 0;
366 }
367
gts1_solenoid_r(offs_t offset)368 uint8_t gts1_state::gts1_solenoid_r(offs_t offset)
369 {
370 uint8_t data = 0;
371 LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data);
372 return data;
373 }
374
gts1_solenoid_w(offs_t offset,uint8_t data)375 void gts1_state::gts1_solenoid_w(offs_t offset, uint8_t data)
376 {
377 switch (offset)
378 {
379 case 0:
380 LOG("%s: outhole <- %x\n", __FUNCTION__, data);
381 break;
382 case 1:
383 LOG("%s: knocker <- %x\n", __FUNCTION__, data);
384 break;
385 case 2:
386 LOG("%s: tens chime <- %x\n", __FUNCTION__, data);
387 break;
388 case 3:
389 LOG("%s: hundreds chime <- %x\n", __FUNCTION__, data);
390 break;
391 case 4:
392 LOG("%s: thousands chime <- %x\n", __FUNCTION__, data);
393 break;
394 case 5:
395 LOG("%s: no. 6 <- %x\n", __FUNCTION__, data);
396 break;
397 case 6:
398 LOG("%s: no. 7 <- %x\n", __FUNCTION__, data);
399 break;
400 case 7:
401 LOG("%s: no. 8 <- %x\n", __FUNCTION__, data);
402 break;
403 case 8: case 9: case 10: case 11:
404 LOG("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data);
405 break;
406 case 12: // spare
407 LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
408 break;
409 case 13: // RAM control E2
410 LOG("%s: RAM control E2 <- %x\n", __FUNCTION__, data);
411 m_nvram_e2 = (data & 1) ? true : false;
412 break;
413 case 14: // RAM control W/R
414 LOG("%s: RAM control W/R <- %x\n", __FUNCTION__, data);
415 m_nvram_wr = (data & 1) ? true : false;
416 break;
417 case 15: // spare
418 LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
419 break;
420 }
421 }
422
gts1_switches_r(offs_t offset)423 uint8_t gts1_state::gts1_switches_r(offs_t offset)
424 {
425 uint8_t data = 1;
426 if (offset >= 8 && offset < 16) {
427 const int bit = offset - 8;
428 for (int i = 0; i < 5; i++) {
429 if (m_strobe & (1 << i)) {
430 data &= BIT(m_switches[i]->read(), bit);
431 }
432 }
433 }
434 LOG("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data);
435 return data;
436 }
437
gts1_switches_w(offs_t offset,uint8_t data)438 void gts1_state::gts1_switches_w(offs_t offset, uint8_t data)
439 {
440 LOG("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data);
441 if (offset < 5) {
442 // outputs O-0 to O-4 are the 5 strobe lines
443 m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset);
444 }
445 }
446
447 /**
448 * @brief write a 8seg display value
449 * @param offset digit number 0 .. 19
450 * @param data 4-bit value to display
451 */
gts1_display_w(offs_t offset,uint8_t data)452 void gts1_state::gts1_display_w(offs_t offset, uint8_t data)
453 {
454 /*
455 * The 7448 is modified to be disabled through RI/RBO
456 * when the input is 0001, and in this case the extra
457 * output H is generated instead.
458 */
459 enum : uint8_t
460 {
461 _a = 1 << 0,
462 _b = 1 << 1,
463 _c = 1 << 2,
464 _d = 1 << 3,
465 _e = 1 << 4,
466 _f = 1 << 5,
467 _g = 1 << 6,
468 _h = 1 << 7
469 };
470 static constexpr uint8_t ttl7448_mod[16] = {
471 /* 0 */ _a | _b | _c | _d | _e | _f,
472 /* 1 */ _h,
473 /* 2 */ _a | _b | _d | _e | _g,
474 /* 3 */ _a | _b | _c | _d | _g,
475 /* 4 */ _b | _c | _f | _g,
476 /* 5 */ _a | _c | _d | _f | _g,
477 /* 6 */ _a | _c | _d | _e | _f | _g,
478 /* 7 */ _a | _b | _c,
479 /* 8 */ _a | _b | _c | _d | _e | _f | _g,
480 /* 9 */ _a | _b | _c | _d | _f | _g,
481 /* a */ _d | _e | _g,
482 /* b */ _c | _d | _g,
483 /* c */ _b | _f | _g,
484 /* d */ _a | _d | _f | _g,
485 /* e */ _d | _e | _f | _g,
486 /* f */ 0
487 };
488 uint8_t a = ttl7448_mod[(data >> 0) & 15];
489 uint8_t b = ttl7448_mod[(data >> 4) & 15];
490 // LOG("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b);
491 if ((offset % 8) < 7) { // FIXME: layout suggests this should be < 6 rather than < 7
492 m_digit8[offset] = a;
493 m_digit8[offset + 16] = b;
494 } else {
495 /*
496 * For the 4 7-seg displays the segment h is turned back into
497 * segments b and c to display the 7-seg "1".
498 */
499 if (a & _h)
500 a = _b | _c;
501 if (b & _h)
502 b = _b | _c;
503 m_digit7[offset] = a;
504 // FIXME: there is nothing on outputs 22, 23, 30 and 31?
505 m_digit7[offset + 16] = b;
506 }
507 }
508
509 /**
510 * @brief read input groups A, B, C of NVRAM io chip (U2)
511 * @param offset 0 ... 2 = group
512 * @return 4-bit value read from the group
513 */
gts1_nvram_r(offs_t offset)514 uint8_t gts1_state::gts1_nvram_r(offs_t offset)
515 {
516 uint8_t data = 0x0f;
517 switch (offset)
518 {
519 case 0: // group A
520 // FIXME: Schematics says TO Z5
521 if (!m_nvram_wr && m_nvram_e2) {
522 uint8_t* nvram = memregion("nvram")->base();
523 assert(nvram != nullptr);
524 data = nvram[m_nvram_addr];
525 LOG("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data);
526 }
527 break;
528 case 1: // group B
529 case 2: // group C
530 // Schematics says: SPARES
531 break;
532 }
533 return data;
534 }
535
536 /**
537 * @brief write output groups A, B, C of NVRAM io chip (U2)
538 * @param offset 0 ... 2 = group
539 * @param data 4 bit value to write
540 */
gts1_nvram_w(offs_t offset,uint8_t data)541 void gts1_state::gts1_nvram_w(offs_t offset, uint8_t data)
542 {
543 switch (offset)
544 {
545 case 0: // group A - address lines 3:0
546 m_nvram_addr = (m_nvram_addr & ~15) | (data & 15);
547 break;
548 case 1: // group B - address lines 7:4
549 m_nvram_addr = (m_nvram_addr & ~(15 << 4)) | ((data & 15) << 4);
550 break;
551 case 2: // group C - data bits 3:0 of NVRAM
552 if (m_nvram_wr && m_nvram_e2) {
553 LOG("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15);
554 uint8_t* nvram = memregion("nvram")->base();
555 assert(nvram != nullptr);
556 nvram[m_nvram_addr] = data & 15;
557 }
558 break;
559 }
560 }
561
562 /**
563 * @brief read input groups A, B, C of lamp + apm I/O chip (U3)
564 * @param offset 0 ... 2 = group
565 * @return 4-bit value read from the group
566 */
gts1_lamp_apm_r(offs_t offset)567 uint8_t gts1_state::gts1_lamp_apm_r(offs_t offset)
568 {
569 uint8_t data = 0x0f;
570 switch (offset) {
571 case 0: // group A switches S01-S04, S09-S12, S17-S20
572 if (m_z30_out & 1) {
573 uint8_t dsw0 = m_dips[0]->read();
574 if (0 == BIT(dsw0,0)) // S01
575 data &= ~(1 << 3);
576 if (0 == BIT(dsw0,1)) // S02
577 data &= ~(1 << 2);
578 if (0 == BIT(dsw0,2)) // S03
579 data &= ~(1 << 1);
580 if (0 == BIT(dsw0,3)) // S04
581 data &= ~(1 << 0);
582 }
583 if (m_z30_out & 2) {
584 uint8_t dsw1 = m_dips[1]->read();
585 if (0 == BIT(dsw1,0)) // S09
586 data &= ~(1 << 0);
587 if (0 == BIT(dsw1,1)) // S10
588 data &= ~(1 << 1);
589 if (0 == BIT(dsw1,2)) // S11
590 data &= ~(1 << 2);
591 if (0 == BIT(dsw1,3)) // S12
592 data &= ~(1 << 3);
593 }
594 if (m_z30_out & 4) {
595 uint8_t dsw2 = m_dips[2]->read();
596 if (0 == BIT(dsw2,0)) // S17
597 data &= ~(1 << 0);
598 if (0 == BIT(dsw2,1)) // S18
599 data &= ~(1 << 1);
600 if (0 == BIT(dsw2,2)) // S19
601 data &= ~(1 << 2);
602 if (0 == BIT(dsw2,3)) // S20
603 data &= ~(1 << 3);
604 }
605 break;
606 case 1: // group B switches S05-S08, S09-S12, S17-S20
607 if (m_z30_out & 1) {
608 uint8_t dsw0 = m_dips[0]->read();
609 if (0 == BIT(dsw0,4)) // S05
610 data &= ~(1 << 3);
611 if (0 == BIT(dsw0,5)) // S06
612 data &= ~(1 << 2);
613 if (0 == BIT(dsw0,6)) // S07
614 data &= ~(1 << 1);
615 if (0 == BIT(dsw0,7)) // S08
616 data &= ~(1 << 0);
617 }
618 if (m_z30_out & 2) {
619 uint8_t dsw1 = m_dips[1]->read();
620 if (0 == BIT(dsw1,4)) // S13
621 data &= ~(1 << 0);
622 if (0 == BIT(dsw1,5)) // S14
623 data &= ~(1 << 1);
624 if (0 == BIT(dsw1,6)) // S15
625 data &= ~(1 << 2);
626 if (0 == BIT(dsw1,7)) // S16
627 data &= ~(1 << 3);
628 }
629 if (m_z30_out & 4) {
630 uint8_t dsw2 = m_dips[2]->read();
631 if (0 == BIT(dsw2,4)) // S21
632 data &= ~(1 << 0);
633 if (0 == BIT(dsw2,5)) // S22
634 data &= ~(1 << 1);
635 if (0 == BIT(dsw2,6)) // S23
636 data &= ~(1 << 2);
637 if (0 == BIT(dsw2,7)) // S24
638 data &= ~(1 << 3);
639 }
640 break;
641 case 2: // TODO: connect
642 // IN-9 (unused?)
643 // IN-10 (reset sw25)
644 // IN-11 (outhole sw)
645 // IN-12 (slam sw)
646 break;
647 }
648 return data;
649 }
650
651 /**
652 * @brief write output groups A, B, C of lamp + apm I/O chip (U3)
653 * @param offset 0 ... 2 = group
654 * @param data 4 bit value to write
655 */
gts1_lamp_apm_w(offs_t offset,uint8_t data)656 void gts1_state::gts1_lamp_apm_w(offs_t offset, uint8_t data)
657 {
658 switch (offset) {
659 case 0: // LD1-LD4 on jumper J5
660 break;
661 case 1: // Z30 1-of-16 decoder
662 m_z30_out = 1 << (data & 15);
663 break;
664 case 2: // O9: PGOL PROM A8, O10: PGOL PROM A9
665 m_6351_addr = (m_6351_addr & ~(3 << 8)) | ((data & 3) << 8);
666 // O11 and O12 are unused(?)
667 break;
668 }
669 }
670
gts1_io_r(offs_t offset)671 uint8_t gts1_state::gts1_io_r(offs_t offset)
672 {
673 const uint8_t data = 0x0f;
674 LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data);
675 return data;
676 }
677
gts1_io_w(offs_t offset,uint8_t data)678 void gts1_state::gts1_io_w(offs_t offset, uint8_t data)
679 {
680 LOG("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data);
681 }
682
gts1_pa_r()683 uint8_t gts1_state::gts1_pa_r()
684 {
685 // return ROM nibble
686 uint8_t *ROM = memregion("maincpu")->base();
687 uint8_t data = ROM[0x2000 + m_6351_addr] & 0x0f;
688 LOG("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data);
689 return data;
690 }
691
gts1_do_w(uint8_t data)692 void gts1_state::gts1_do_w(uint8_t data)
693 {
694 // write address lines (DO1-4 to A0-3, DIO1-4 to A4-7)
695 m_6351_addr = (m_6351_addr & 0x300) | data;
696 LOG("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr);
697 }
698
699
gts1(machine_config & config)700 void gts1_state::gts1(machine_config & config)
701 {
702 /* basic machine hardware */
703 pps4_2_device &maincpu(PPS4_2(config, m_maincpu, XTAL(3'579'545))); // divided by 18 in the CPU
704 maincpu.set_addrmap(AS_PROGRAM, >s1_state::gts1_map);
705 maincpu.set_addrmap(AS_DATA, >s1_state::gts1_data);
706 maincpu.set_addrmap(AS_IO, >s1_state::gts1_io);
707 maincpu.dia_cb().set(FUNC(gts1_state::gts1_pa_r));
708 maincpu.do_cb().set(FUNC(gts1_state::gts1_do_w));
709
710 NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
711
712 /* A1753CE 2048 x 8 ROM (000-7ff), 128 x 4 RAM (00-7f) and 16 I/O lines (20 ... 2f) */
713 ra17xx_device &u5(RA17XX(config, "u5", 0));
714 u5.iord_cb().set(FUNC(gts1_state::gts1_switches_r));
715 u5.iowr_cb().set(FUNC(gts1_state::gts1_switches_w));
716 u5.set_cpu_tag(m_maincpu);
717
718 /* A1752CF 2048 x 8 ROM (800-fff), 128 x 4 RAM (80-ff) and 16 I/O lines (40 ... 4f) */
719 ra17xx_device &u4(RA17XX(config, "u4", 0));
720 u4.iord_cb().set(FUNC(gts1_state::gts1_solenoid_r));
721 u4.iowr_cb().set(FUNC(gts1_state::gts1_solenoid_w));
722 u4.set_cpu_tag(m_maincpu);
723
724 /* 10696 General Purpose Input/Output */
725 r10696_device &u2(R10696(config, "u2", 0));
726 u2.iord_cb().set(FUNC(gts1_state::gts1_nvram_r));
727 u2.iowr_cb().set(FUNC(gts1_state::gts1_nvram_w));
728
729 /* 10696 General Purpose Input/Output */
730 r10696_device &u3(R10696(config, "u3", 0));
731 u3.iord_cb().set(FUNC(gts1_state::gts1_lamp_apm_r));
732 u3.iowr_cb().set(FUNC(gts1_state::gts1_lamp_apm_w));
733
734 /* 10788 General Purpose Display and Keyboard */
735 r10788_device &u6(R10788(config, "u6", XTAL(3'579'545) / 18 )); // divided in the circuit
736 u6.update_cb().set(FUNC(gts1_state::gts1_display_w));
737
738 /* Video */
739 config.set_default_layout(layout_gts1);
740
741 /* Sound */
742 genpin_audio(config);
743 }
744
745
746 ROM_START( gts1 )
747 ROM_REGION( 0x10000, "maincpu", 0 )
748 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
749 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
750 ROM_END
751
752 ROM_START( gts1s )
753 ROM_REGION( 0x10000, "maincpu", 0 )
754 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
755 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
756 ROM_END
757
758 /*-------------------------------------------------------------------
759 / Asteroid Annie and the Aliens (12/1980) #442
760 /-------------------------------------------------------------------*/
761 ROM_START(astannie)
762 ROM_REGION(0x10000, "maincpu", 0)
763 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
764 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
765 ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c))
766 ROM_REGION(0x10000, "cpu2", 0)
767 ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281))
768 ROM_RELOAD( 0x0800, 0x0400)
769 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
770 ROM_RELOAD( 0xfc00, 0x0400)
771 ROM_END
772
773 /*-------------------------------------------------------------------
774 / Buck Rogers (01/1980) #437
775 /-------------------------------------------------------------------*/
776 ROM_START(buckrgrs)
777 ROM_REGION(0x10000, "maincpu", 0)
778 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
779 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
780 ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352))
781 ROM_REGION(0x10000, "cpu2", 0)
782 ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c))
783 ROM_RELOAD( 0x0800, 0x0400)
784 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
785 ROM_RELOAD( 0xfc00, 0x0400)
786 ROM_END
787
788 /*-------------------------------------------------------------------
789 / Charlie's Angels (11/1978) #425
790 /-------------------------------------------------------------------*/
791 ROM_START(charlies)
792 ROM_REGION(0x10000, "maincpu", 0)
793 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
794 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
795 ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d))
796 ROM_END
797 /*-------------------------------------------------------------------
798 / Cleopatra (11/1977) #409
799 /-------------------------------------------------------------------*/
800 ROM_START(cleoptra)
801 ROM_REGION(0x10000, "maincpu", 0)
802 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
803 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
804 ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd))
805 ROM_END
806
807 /*-------------------------------------------------------------------
808 / Close Encounters of the Third Kind (10/1978) #424
809 /-------------------------------------------------------------------*/
810 ROM_START(closeenc)
811 ROM_REGION(0x10000, "maincpu", 0)
812 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
813 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
814 ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160))
815 ROM_END
816
817 /*-------------------------------------------------------------------
818 / Count-Down (05/1979) #422
819 /-------------------------------------------------------------------*/
820 ROM_START(countdwn)
821 ROM_REGION(0x10000, "maincpu", 0)
822 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
823 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
824 ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22))
825 ROM_END
826
827 /*-------------------------------------------------------------------
828 / Dragon (10/1978) #419
829 /-------------------------------------------------------------------*/
830 ROM_START(dragon)
831 ROM_REGION(0x10000, "maincpu", 0)
832 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
833 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
834 ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e))
835 ROM_END
836
837 /*-------------------------------------------------------------------
838 / Genie (11/1979) #435
839 /-------------------------------------------------------------------*/
840 ROM_START(geniep)
841 ROM_REGION(0x10000, "maincpu", 0)
842 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
843 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
844 ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
845 ROM_REGION(0x10000, "cpu2", 0)
846 ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47))
847 ROM_RELOAD( 0x0800, 0x0400)
848 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
849 ROM_RELOAD( 0xfc00, 0x0400)
850 ROM_END
851
852 /*-------------------------------------------------------------------
853 / Joker Poker (08/1978) #417
854 /-------------------------------------------------------------------*/
855 ROM_START(jokrpokr)
856 ROM_REGION(0x10000, "maincpu", 0)
857 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
858 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
859 ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a))
860 ROM_END
861
862 /*-------------------------------------------------------------------
863 / Jungle Queen (1985)
864 /-------------------------------------------------------------------*/
865 /*-------------------------------------------------------------------
866 / L'Hexagone (04/1986)
867 /-------------------------------------------------------------------*/
868 ROM_START(hexagone)
869 ROM_REGION(0x10000, "maincpu", 0)
870 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
871 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
872 ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
873 ROM_REGION(0x10000, "cpu2", 0)
874 ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e))
875 ROM_END
876 /*-------------------------------------------------------------------
877 / Movie
878 /-------------------------------------------------------------------*/
879
880 /*-------------------------------------------------------------------
881 / Pinball Pool (08/1979) #427
882 /-------------------------------------------------------------------*/
883 ROM_START(pinpool)
884 ROM_REGION(0x10000, "maincpu", 0)
885 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
886 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
887 ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32))
888 ROM_END
889
890 /*-------------------------------------------------------------------
891 / Roller Disco (02/1980) #440
892 /-------------------------------------------------------------------*/
893 ROM_START(roldisco)
894 ROM_REGION(0x10000, "maincpu", 0)
895 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
896 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
897 ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41))
898 ROM_REGION(0x10000, "cpu2", 0)
899 ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d))
900 ROM_RELOAD( 0x0800, 0x0400)
901 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
902 ROM_RELOAD( 0xfc00, 0x0400)
903 ROM_END
904
905 /*-------------------------------------------------------------------
906 / Sahara Love (1984)
907 /-------------------------------------------------------------------*/
908 ROM_START(sahalove)
909 ROM_REGION(0x10000, "maincpu", 0)
910 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
911 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
912 ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
913
914 ROM_REGION(0x2000, "audiocpu", 0) // extra Z80 for sound. TODO: emulate
915 ROM_LOAD("sahalove.bin", 0x0000, 0x2000, CRC(3512840a) SHA1(eb36bb78bbf2f8610bc1d71a6651b937db3a5c69))
916 ROM_END
917
918 /*-------------------------------------------------------------------
919 / Sinbad (05/1978) #412
920 /-------------------------------------------------------------------*/
921 ROM_START(sinbad)
922 ROM_REGION(0x10000, "maincpu", 0)
923 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
924 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
925 ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
926 ROM_END
927
928 ROM_START(sinbadn)
929 ROM_REGION(0x10000, "maincpu", 0)
930 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
931 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
932 ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f))
933 ROM_END
934
935 /*-------------------------------------------------------------------
936 / Sky Warrior (1983)
937 /-------------------------------------------------------------------*/
938
939 /*-------------------------------------------------------------------
940 / Solar Ride (02/1979) #421
941 /-------------------------------------------------------------------*/
942 ROM_START(solaride)
943 ROM_REGION(0x10000, "maincpu", 0)
944 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
945 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
946 ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55))
947 ROM_END
948
949 /*-------------------------------------------------------------------
950 / The Incredible Hulk (10/1979) #433
951 /-------------------------------------------------------------------*/
952 ROM_START(hulk)
953 ROM_REGION(0x10000, "maincpu", 0)
954 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
955 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
956 ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7))
957 ROM_REGION(0x10000, "cpu2", 0)
958 ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25))
959 ROM_RELOAD( 0x0800, 0x0400)
960 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
961 ROM_RELOAD( 0xfc00, 0x0400)
962 ROM_END
963
964 /*-------------------------------------------------------------------
965 / Torch (02/1980) #438
966 /-------------------------------------------------------------------*/
967 ROM_START(torch)
968 ROM_REGION(0x10000, "maincpu", 0)
969 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
970 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
971 ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8))
972 ROM_REGION(0x10000, "cpu2", 0)
973 ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c))
974 ROM_RELOAD( 0x0800, 0x0400)
975 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
976 ROM_RELOAD( 0xfc00, 0x0400)
977 ROM_END
978
979 /*-------------------------------------------------------------------
980 / Totem (10/1979) #429
981 /-------------------------------------------------------------------*/
982 ROM_START(totem)
983 ROM_REGION(0x10000, "maincpu", 0)
984 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
985 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
986 ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d))
987 ROM_REGION(0x10000, "cpu2", 0)
988 ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f))
989 ROM_RELOAD( 0x0800, 0x0400)
990 ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
991 ROM_RELOAD( 0xfc00, 0x0400)
992 ROM_END
993
994 /*-------------------------------------------------------------------
995 / System 1 Test prom
996 /-------------------------------------------------------------------*/
997 ROM_START(sys1test)
998 ROM_REGION(0x10000, "maincpu", 0)
999 ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
1000 ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
1001 ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8))
1002 ROM_END
1003
1004
1005 GAME(1977, gts1, 0, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING)
1006
1007 //Exact same roms as gts1 with added hardware we'll likely need roms for to emulate properly
1008 GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1 with sound board", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING)
1009 GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1 Test prom", MACHINE_IS_SKELETON_MECHANICAL)
1010
1011 // chimes
1012 GAME(1977, cleoptra, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Cleopatra", MACHINE_IS_SKELETON_MECHANICAL)
1013 GAME(1978, sinbad, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL)
1014 GAME(1978, sinbadn, sinbad, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL)
1015 GAME(1978, jokrpokr, gts1, gts1, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL)
1016 GAME(1978, dragon, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL)
1017 GAME(1979, solaride, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL)
1018 GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL)
1019
1020 // NE555 beeper
1021 GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL)
1022 GAME(1978, charlies, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL)
1023 GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL)
1024
1025 // sound card
1026 GAME(1979, totem, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Totem", MACHINE_IS_SKELETON_MECHANICAL)
1027 GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "The Incredible Hulk", MACHINE_IS_SKELETON_MECHANICAL)
1028 GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Genie (Pinball)", MACHINE_IS_SKELETON_MECHANICAL)
1029 GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Buck Rogers", MACHINE_IS_SKELETON_MECHANICAL)
1030 GAME(1980, torch, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Torch", MACHINE_IS_SKELETON_MECHANICAL)
1031 GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Roller Disco", MACHINE_IS_SKELETON_MECHANICAL)
1032 GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", MACHINE_IS_SKELETON_MECHANICAL)
1033
1034 // homebrew
1035 GAME(1984, sahalove, sinbad, gts1, gts1, gts1_state, empty_init, ROT0, "Christian Tabart", "Sahara Love (France)", MACHINE_IS_SKELETON_MECHANICAL) // based on sinbad, 150 units produced, not sure it's 'homebrew'
1036 GAME(1986, hexagone, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Christian Tabart", "L'Hexagone (France)", MACHINE_IS_SKELETON_MECHANICAL)
1037