// license:BSD-3-Clause // copyright-holders:Robbbert /**************************************************************************************************** PINBALL Gottlieb System 1 Gottlieb's first foray into computerised pinball. Typical of Gottlieb's golden period, these machines are physically well-designed and made. However, the computer side was another story, an attempt to catch up to its competitors who were way ahead in the technology race. Instead of each board being solidly grounded to the chassis, the only connections were through flaky edge connectors. Voltage differences would then cause solenoids and lights to switch on at random and destroy transistors. Further, the CPU chips chosen were an unusual 4-bit design that was already old. The first games had chimes. Then, this was replaced by 3 NE555 tone oscillators. The last machines had a real sound board which had more computing power than the main cpu. Game numbering: Each Gottlieb game had the model number printed on the instruction card, so it was very easy to gather information. Gottlieb either made a single-player game, or a 2-player and a 4-player game. For example, Centigrade 37 (#407) was a single-player game, while Bronco (4-player)(#396) was exactly the same as Mustang (2-player)(#397). Cleopatra (#409) was originally a 4-player EM game (with Pyramid #410 being the 2-player version). Then, the SS version was made, and it kept the same number. After that, the SS versions were suffixed with 'SS' up to The Incredible Hulk (#433), and then the 'SS' was dropped. Game List: Number ROM Name 409 A Cleopatra 412SS B Sinbad 417SS C Joker Poker 419SS D Dragon 421SS E Solar Ride 422SS F Countdown 424SS G Close Encounters of the third kind 425SS H Charlie's Angels 427SS I Pinball Pool 429SS J Totem 433SS K The Incredible Hulk 435 L Genie 437 N Buck Rogers 438 P Torch 440 R Roller Disco 442 S Asteroid Annie and the Aliens Chips used: U1 11660 CPU U2 10696EE 5101L RAM interface (device#6) U3 10696EE General purpose I/O (dipswitches, lamps, misc) (device#3) U4 A1753CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (solenoid control) U5 A1752CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (switch matrix) U6 10788 Display driver 5101L 4-bit static RAM MM6351-IJ ROM ToDo: - Everything - Hard to debug because no errors are logged; also the program flow seems odd. - 5101L RAM (battery-backed) is driven from the 10696. - MM6351 ROM is driven from the CPU I/O ports and has 4 banks. *****************************************************************************************************/ #include "emu.h" #include "machine/genpin.h" #include "machine/ra17xx.h" #include "machine/r10696.h" #include "machine/r10788.h" #include "cpu/pps4/pps4.h" #include "gts1.lh" #define VERBOSE 1 #include "logmacro.h" class gts1_state : public genpin_class { public: gts1_state(const machine_config &mconfig, device_type type, const char *tag) : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_dips(*this, "DSW%u", 0) , m_switches(*this, "X.%u", 0) , m_digit8(*this, "digit8_%u", 0U) , m_digit7(*this, "digit7_%u", 0U) { } void gts1(machine_config &config); protected: DECLARE_READ8_MEMBER (gts1_solenoid_r); DECLARE_WRITE8_MEMBER(gts1_solenoid_w); DECLARE_READ8_MEMBER (gts1_switches_r); DECLARE_WRITE8_MEMBER(gts1_switches_w); DECLARE_WRITE8_MEMBER(gts1_display_w); DECLARE_READ8_MEMBER (gts1_lamp_apm_r); DECLARE_WRITE8_MEMBER(gts1_lamp_apm_w); DECLARE_READ8_MEMBER (gts1_nvram_r); DECLARE_WRITE8_MEMBER(gts1_nvram_w); DECLARE_READ8_MEMBER (gts1_io_r); DECLARE_WRITE8_MEMBER(gts1_io_w); DECLARE_READ8_MEMBER (gts1_pa_r); DECLARE_WRITE8_MEMBER(gts1_do_w); virtual void machine_start() override; virtual void machine_reset() override; void gts1_map(address_map &map); void gts1_data(address_map &map); void gts1_io(address_map &map); private: required_device m_maincpu; required_ioport_array<3> m_dips; required_ioport_array<5> m_switches; output_finder<32> m_digit8; // driver currently uses 0-6, 8-14, 16-22 and 24-30 output_finder<32> m_digit7; // driver currently uses 7, 15, 23 and 31 uint8_t m_strobe; //!< switches strobe lines (5 lower bits used) uint8_t m_nvram_addr; //!< NVRAM address bool m_nvram_e2; //!< NVRWAM enable (E2 line) bool m_nvram_wr; //!< NVRWAM write (W/R line) uint16_t m_6351_addr; //!< ROM MM6351 address (12 bits) uint16_t m_z30_out; //!< 4-to-16 decoder outputs }; void gts1_state::gts1_map(address_map &map) { map(0x0000, 0x0fff).rom(); } void gts1_state::gts1_data(address_map &map) { map(0x0000, 0x00ff).ram(); map(0x0100, 0x01ff).ram().share("nvram"); } void gts1_state::gts1_io(address_map &map) { map(0x0000, 0x00ff).r(this, FUNC(gts1_state::gts1_io_r)).w(this, FUNC(gts1_state::gts1_io_w)); // catch undecoded I/O accesss map(0x0020, 0x002f).rw("u4", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U4) solenoid map(0x0030, 0x003f).rw("u3", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U3) solenoid + dips map(0x0040, 0x004f).rw("u5", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U5) switch matrix map(0x0060, 0x006f).rw("u2", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U2) NVRAM io chip map(0x00d0, 0x00df).rw("u6", FUNC(r10788_device::io_r), FUNC(r10788_device::io_w)); // (U6) display chip } static INPUT_PORTS_START( gts1_dips ) PORT_START("DSW0") PORT_DIPNAME( 0x01, 0x00, "S01") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_DIPNAME( 0x02, 0x00, "S02") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x02, DEF_STR( On )) PORT_DIPNAME( 0x04, 0x00, "S03") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x04, DEF_STR( On )) PORT_DIPNAME( 0x08, 0x00, "S04") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x08, DEF_STR( On )) PORT_DIPNAME( 0x10, 0x00, "S05") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x10, DEF_STR( On )) PORT_DIPNAME( 0x20, 0x20, "S06") PORT_DIPSETTING( 0x00, DEF_STR( No )) PORT_DIPSETTING( 0x20, DEF_STR( Yes )) PORT_DIPNAME( 0x40, 0x40, "S07") PORT_DIPSETTING( 0x00, DEF_STR( No )) PORT_DIPSETTING( 0x40, DEF_STR( Yes )) PORT_DIPNAME( 0x80, 0x80, "S08") PORT_DIPSETTING( 0x00, DEF_STR( No )) PORT_DIPSETTING( 0x80, DEF_STR( Yes )) PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x00, "S09") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_DIPNAME( 0x02, 0x00, "S10") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x02, DEF_STR( On )) PORT_DIPNAME( 0x04, 0x00, "S11") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x04, DEF_STR( On )) PORT_DIPNAME( 0x08, 0x00, "S12") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x08, DEF_STR( On )) PORT_DIPNAME( 0x10, 0x00, "S13") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x10, DEF_STR( On )) PORT_DIPNAME( 0x20, 0x00, "S14") PORT_DIPSETTING( 0x00, DEF_STR( Yes )) PORT_DIPSETTING( 0x20, DEF_STR( No )) PORT_DIPNAME( 0x40, 0x40, "S15") PORT_DIPSETTING( 0x00, DEF_STR( No )) PORT_DIPSETTING( 0x40, DEF_STR( Yes )) PORT_DIPNAME( 0x80, 0x00, "S16") PORT_DIPSETTING( 0x00, DEF_STR( No )) PORT_DIPSETTING( 0x80, DEF_STR( Yes )) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x00, "S17") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x01, DEF_STR( On )) PORT_DIPNAME( 0x02, 0x00, "S18") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x02, DEF_STR( On )) PORT_DIPNAME( 0x04, 0x00, "S19") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x04, DEF_STR( On )) PORT_DIPNAME( 0x08, 0x00, "S20") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x08, DEF_STR( On )) PORT_DIPNAME( 0x10, 0x00, "S21") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x10, DEF_STR( On )) PORT_DIPNAME( 0x20, 0x00, "S22") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x20, DEF_STR( On )) PORT_DIPNAME( 0x40, 0x00, "S23") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x40, DEF_STR( On )) PORT_DIPNAME( 0x80, 0x00, "S24") PORT_DIPSETTING( 0x00, DEF_STR( Off )) PORT_DIPSETTING( 0x80, DEF_STR( On )) INPUT_PORTS_END static INPUT_PORTS_START( gts1_switches ) PORT_START("X.0") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.2") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.4") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) INPUT_PORTS_END static INPUT_PORTS_START( gts1 ) PORT_INCLUDE( gts1_dips ) PORT_INCLUDE( gts1_switches ) INPUT_PORTS_END static INPUT_PORTS_START( jokrpokr ) PORT_INCLUDE( gts1_dips ) PORT_START("X.0") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PLAY/TEST") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("POP/BUMBER") PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXTRA BALL TARGET") PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SPECIAL ROLLOVER") PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("10 POINT CONTACTS") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#1 COIN CHUTE") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" ROLLOVER") PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"10\" DROP TARGET") PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"Q\" DROP TARGET (red)") PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET (black)") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (black)") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.2") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("#2 COIN CHUTE") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"B\" ROLLOVER") PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (black)") PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (black)") PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("JOKER DROP TARGET") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("REPLAY BUTTON") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"C\" ROLLOVER") PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"J\" DROP TARGET (red)") PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"O\" DROP TARGET (red)") PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_START("X.4") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TILT PANEL") PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"K\" DROP TARGET") PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("\"A\" DROP TARGET (red)") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) INPUT_PORTS_END void gts1_state::machine_start() { genpin_class::machine_start(); m_digit8.resolve(); m_digit7.resolve(); save_item(NAME(m_strobe)); save_item(NAME(m_nvram_addr)); save_item(NAME(m_nvram_e2)); save_item(NAME(m_nvram_wr)); save_item(NAME(m_6351_addr)); save_item(NAME(m_z30_out)); } void gts1_state::machine_reset() { genpin_class::machine_reset(); m_strobe = 0; m_nvram_addr = 0; m_nvram_e2 = false; m_nvram_wr = false; m_6351_addr = 0; m_z30_out = 0; } READ8_MEMBER (gts1_state::gts1_solenoid_r) { uint8_t data = 0; LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data); return data; } WRITE8_MEMBER(gts1_state::gts1_solenoid_w) { switch (offset) { case 0: LOG("%s: outhole <- %x\n", __FUNCTION__, data); break; case 1: LOG("%s: knocker <- %x\n", __FUNCTION__, data); break; case 2: LOG("%s: tens chime <- %x\n", __FUNCTION__, data); break; case 3: LOG("%s: hundreds chime <- %x\n", __FUNCTION__, data); break; case 4: LOG("%s: thousands chime <- %x\n", __FUNCTION__, data); break; case 5: LOG("%s: no. 6 <- %x\n", __FUNCTION__, data); break; case 6: LOG("%s: no. 7 <- %x\n", __FUNCTION__, data); break; case 7: LOG("%s: no. 8 <- %x\n", __FUNCTION__, data); break; case 8: case 9: case 10: case 11: LOG("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data); break; case 12: // spare LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data); break; case 13: // RAM control E2 LOG("%s: RAM control E2 <- %x\n", __FUNCTION__, data); m_nvram_e2 = (data & 1) ? true : false; break; case 14: // RAM control W/R LOG("%s: RAM control W/R <- %x\n", __FUNCTION__, data); m_nvram_wr = (data & 1) ? true : false; break; case 15: // spare LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data); break; } } READ8_MEMBER (gts1_state::gts1_switches_r) { uint8_t data = 1; if (offset >= 8 && offset < 16) { const int bit = offset - 8; for (int i = 0; i < 5; i++) { if (m_strobe & (1 << i)) { data &= BIT(m_switches[i]->read(), bit); } } } LOG("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data); return data; } WRITE8_MEMBER(gts1_state::gts1_switches_w) { LOG("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data); if (offset < 5) { // outputs O-0 to O-4 are the 5 strobe lines m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset); } } /** * @brief write a 8seg display value * @param offset digit number 0 .. 19 * @param data 4-bit value to display */ WRITE8_MEMBER(gts1_state::gts1_display_w) { /* * The 7448 is modified to be disabled through RI/RBO * when the input is 0001, and in this case the extra * output H is generated instead. */ enum : uint8_t { _a = 1 << 0, _b = 1 << 1, _c = 1 << 2, _d = 1 << 3, _e = 1 << 4, _f = 1 << 5, _g = 1 << 6, _h = 1 << 7 }; static constexpr uint8_t ttl7448_mod[16] = { /* 0 */ _a | _b | _c | _d | _e | _f, /* 1 */ _h, /* 2 */ _a | _b | _d | _e | _g, /* 3 */ _a | _b | _c | _d | _g, /* 4 */ _b | _c | _f | _g, /* 5 */ _a | _c | _d | _f | _g, /* 6 */ _a | _c | _d | _e | _f | _g, /* 7 */ _a | _b | _c, /* 8 */ _a | _b | _c | _d | _e | _f | _g, /* 9 */ _a | _b | _c | _d | _f | _g, /* a */ _d | _e | _g, /* b */ _c | _d | _g, /* c */ _b | _f | _g, /* d */ _a | _d | _f | _g, /* e */ _d | _e | _f | _g, /* f */ 0 }; uint8_t a = ttl7448_mod[(data >> 0) & 15]; uint8_t b = ttl7448_mod[(data >> 4) & 15]; // LOG("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b); if ((offset % 8) < 7) { // FIXME: layout suggests this should be < 6 rather than < 7 m_digit8[offset] = a; m_digit8[offset + 16] = b; } else { /* * For the 4 7-seg displays the segment h is turned back into * segments b and c to display the 7-seg "1". */ if (a & _h) a = _b | _c; if (b & _h) b = _b | _c; m_digit7[offset] = a; // FIXME: there is nothing on outputs 22, 23, 30 and 31? m_digit7[offset + 16] = b; } } /** * @brief read input groups A, B, C of NVRAM io chip (U2) * @param offset 0 ... 2 = group * @return 4-bit value read from the group */ READ8_MEMBER (gts1_state::gts1_nvram_r) { uint8_t data = 0x0f; switch (offset) { case 0: // group A // FIXME: Schematics says TO Z5 if (!m_nvram_wr && m_nvram_e2) { uint8_t* nvram = memregion("nvram")->base(); assert(nvram != nullptr); data = nvram[m_nvram_addr]; LOG("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data); } break; case 1: // group B case 2: // group C // Schematics says: SPARES break; } return data; } /** * @brief write output groups A, B, C of NVRAM io chip (U2) * @param offset 0 ... 2 = group * @param data 4 bit value to write */ WRITE8_MEMBER(gts1_state::gts1_nvram_w) { switch (offset) { case 0: // group A - address lines 3:0 m_nvram_addr = (m_nvram_addr & ~15) | (data & 15); break; case 1: // group B - address lines 7:4 m_nvram_addr = (m_nvram_addr & ~(15 << 4)) | ((data & 15) << 4); break; case 2: // group C - data bits 3:0 of NVRAM if (m_nvram_wr && m_nvram_e2) { LOG("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15); uint8_t* nvram = memregion("nvram")->base(); assert(nvram != nullptr); nvram[m_nvram_addr] = data & 15; } break; } } /** * @brief read input groups A, B, C of lamp + apm I/O chip (U3) * @param offset 0 ... 2 = group * @return 4-bit value read from the group */ READ8_MEMBER (gts1_state::gts1_lamp_apm_r) { uint8_t data = 0x0f; switch (offset) { case 0: // group A switches S01-S04, S09-S12, S17-S20 if (m_z30_out & 1) { uint8_t dsw0 = m_dips[0]->read(); if (0 == BIT(dsw0,0)) // S01 data &= ~(1 << 3); if (0 == BIT(dsw0,1)) // S02 data &= ~(1 << 2); if (0 == BIT(dsw0,2)) // S03 data &= ~(1 << 1); if (0 == BIT(dsw0,3)) // S04 data &= ~(1 << 0); } if (m_z30_out & 2) { uint8_t dsw1 = m_dips[1]->read(); if (0 == BIT(dsw1,0)) // S09 data &= ~(1 << 0); if (0 == BIT(dsw1,1)) // S10 data &= ~(1 << 1); if (0 == BIT(dsw1,2)) // S11 data &= ~(1 << 2); if (0 == BIT(dsw1,3)) // S12 data &= ~(1 << 3); } if (m_z30_out & 4) { uint8_t dsw2 = m_dips[2]->read(); if (0 == BIT(dsw2,0)) // S17 data &= ~(1 << 0); if (0 == BIT(dsw2,1)) // S18 data &= ~(1 << 1); if (0 == BIT(dsw2,2)) // S19 data &= ~(1 << 2); if (0 == BIT(dsw2,3)) // S20 data &= ~(1 << 3); } break; case 1: // group B switches S05-S08, S09-S12, S17-S20 if (m_z30_out & 1) { uint8_t dsw0 = m_dips[0]->read(); if (0 == BIT(dsw0,4)) // S05 data &= ~(1 << 3); if (0 == BIT(dsw0,5)) // S06 data &= ~(1 << 2); if (0 == BIT(dsw0,6)) // S07 data &= ~(1 << 1); if (0 == BIT(dsw0,7)) // S08 data &= ~(1 << 0); } if (m_z30_out & 2) { uint8_t dsw1 = m_dips[1]->read(); if (0 == BIT(dsw1,4)) // S13 data &= ~(1 << 0); if (0 == BIT(dsw1,5)) // S14 data &= ~(1 << 1); if (0 == BIT(dsw1,6)) // S15 data &= ~(1 << 2); if (0 == BIT(dsw1,7)) // S16 data &= ~(1 << 3); } if (m_z30_out & 4) { uint8_t dsw2 = m_dips[2]->read(); if (0 == BIT(dsw2,4)) // S21 data &= ~(1 << 0); if (0 == BIT(dsw2,5)) // S22 data &= ~(1 << 1); if (0 == BIT(dsw2,6)) // S23 data &= ~(1 << 2); if (0 == BIT(dsw2,7)) // S24 data &= ~(1 << 3); } break; case 2: // TODO: connect // IN-9 (unused?) // IN-10 (reset sw25) // IN-11 (outhole sw) // IN-12 (slam sw) break; } return data; } /** * @brief write output groups A, B, C of lamp + apm I/O chip (U3) * @param offset 0 ... 2 = group * @param data 4 bit value to write */ WRITE8_MEMBER(gts1_state::gts1_lamp_apm_w) { switch (offset) { case 0: // LD1-LD4 on jumper J5 break; case 1: // Z30 1-of-16 decoder m_z30_out = 1 << (data & 15); break; case 2: // O9: PGOL PROM A8, O10: PGOL PROM A9 m_6351_addr = (m_6351_addr & ~(3 << 8)) | ((data & 3) << 8); // O11 and O12 are unused(?) break; } } READ8_MEMBER (gts1_state::gts1_io_r) { const uint8_t data = 0x0f; LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data); return data; } WRITE8_MEMBER(gts1_state::gts1_io_w) { LOG("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data); } READ8_MEMBER (gts1_state::gts1_pa_r) { // return ROM nibble uint8_t *ROM = memregion("maincpu")->base(); uint8_t data = ROM[0x2000 + m_6351_addr] & 0x0f; LOG("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data); return data; } WRITE8_MEMBER(gts1_state::gts1_do_w) { // write address lines (DO1-4 to A0-3, DIO1-4 to A4-7) m_6351_addr = (m_6351_addr & 0x300) | data; LOG("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr); } MACHINE_CONFIG_START(gts1_state::gts1) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", PPS4_2, XTAL(3'579'545)) // divided by 18 in the CPU MCFG_DEVICE_PROGRAM_MAP(gts1_map) MCFG_DEVICE_DATA_MAP(gts1_data) MCFG_DEVICE_IO_MAP(gts1_io) MCFG_PPS4_DISCRETE_INPUT_A_CB(READ8(*this, gts1_state, gts1_pa_r)) MCFG_PPS4_DISCRETE_OUTPUT_CB(WRITE8(*this, gts1_state, gts1_do_w)) MCFG_NVRAM_ADD_0FILL("nvram") /* A1753CE 2048 x 8 ROM (000-7ff), 128 x 4 RAM (00-7f) and 16 I/O lines (20 ... 2f) */ MCFG_DEVICE_ADD( "u5", RA17XX, 0 ) MCFG_RA17XX_READ ( READ8 (*this, gts1_state,gts1_switches_r) ) MCFG_RA17XX_WRITE( WRITE8(*this, gts1_state,gts1_switches_w) ) MCFG_RA17XX_CPU("maincpu") /* A1752CF 2048 x 8 ROM (800-fff), 128 x 4 RAM (80-ff) and 16 I/O lines (40 ... 4f) */ MCFG_DEVICE_ADD( "u4", RA17XX, 0 ) MCFG_RA17XX_READ ( READ8 (*this, gts1_state,gts1_solenoid_r) ) MCFG_RA17XX_WRITE( WRITE8(*this, gts1_state,gts1_solenoid_w) ) MCFG_RA17XX_CPU("maincpu") /* 10696 General Purpose Input/Output */ MCFG_DEVICE_ADD( "u2", R10696, 0 ) MCFG_R10696_IO( READ8 (*this, gts1_state,gts1_nvram_r), WRITE8(*this, gts1_state,gts1_nvram_w) ) /* 10696 General Purpose Input/Output */ MCFG_DEVICE_ADD( "u3", R10696, 0 ) MCFG_R10696_IO( READ8 (*this, gts1_state,gts1_lamp_apm_r), WRITE8(*this, gts1_state,gts1_lamp_apm_w) ) /* 10788 General Purpose Display and Keyboard */ MCFG_DEVICE_ADD( "u6", R10788, XTAL(3'579'545) / 18 ) // divided in the circuit MCFG_R10788_UPDATE( WRITE8(*this, gts1_state,gts1_display_w) ) /* Video */ MCFG_DEFAULT_LAYOUT( layout_gts1 ) /* Sound */ genpin_audio(config); MACHINE_CONFIG_END ROM_START( gts1 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_END ROM_START( gts1s ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_END /*------------------------------------------------------------------- / Asteroid Annie and the Aliens (12/1980) #442 /-------------------------------------------------------------------*/ ROM_START(astannie) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Buck Rogers (01/1980) #437 /-------------------------------------------------------------------*/ ROM_START(buckrgrs) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Charlie's Angels (11/1978) #425 /-------------------------------------------------------------------*/ ROM_START(charlies) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d)) ROM_END /*------------------------------------------------------------------- / Cleopatra (11/1977) #409 /-------------------------------------------------------------------*/ ROM_START(cleoptra) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd)) ROM_END /*------------------------------------------------------------------- / Close Encounters of the Third Kind (10/1978) #424 /-------------------------------------------------------------------*/ ROM_START(closeenc) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160)) ROM_END /*------------------------------------------------------------------- / Count-Down (05/1979) #422 /-------------------------------------------------------------------*/ ROM_START(countdwn) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22)) ROM_END /*------------------------------------------------------------------- / Dragon (10/1978) #419 /-------------------------------------------------------------------*/ ROM_START(dragon) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e)) ROM_END /*------------------------------------------------------------------- / Genie (11/1979) #435 /-------------------------------------------------------------------*/ ROM_START(geniep) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Joker Poker (08/1978) #417 /-------------------------------------------------------------------*/ ROM_START(jokrpokr) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a)) ROM_END /*------------------------------------------------------------------- / Jungle Queen (1985) /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- / L'Hexagone (04/1986) /-------------------------------------------------------------------*/ ROM_START(hexagone) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e)) ROM_END /*------------------------------------------------------------------- / Movie /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- / Pinball Pool (08/1979) #427 /-------------------------------------------------------------------*/ ROM_START(pinpool) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32)) ROM_END /*------------------------------------------------------------------- / Roller Disco (02/1980) #440 /-------------------------------------------------------------------*/ ROM_START(roldisco) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Sahara Love (1984) /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- / Sinbad (05/1978) #412 /-------------------------------------------------------------------*/ ROM_START(sinbad) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac)) ROM_END ROM_START(sinbadn) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f)) ROM_END /*------------------------------------------------------------------- / Sky Warrior (1983) /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- / Solar Ride (02/1979) #421 /-------------------------------------------------------------------*/ ROM_START(solaride) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55)) ROM_END /*------------------------------------------------------------------- / The Incredible Hulk (10/1979) #433 /-------------------------------------------------------------------*/ ROM_START(hulk) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Torch (02/1980) #438 /-------------------------------------------------------------------*/ ROM_START(torch) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / Totem (10/1979) #429 /-------------------------------------------------------------------*/ ROM_START(totem) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d)) ROM_REGION(0x10000, "cpu2", 0) ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f)) ROM_RELOAD( 0x0800, 0x0400) ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340)) ROM_RELOAD( 0xfc00, 0x0400) ROM_END /*------------------------------------------------------------------- / System 1 Test prom /-------------------------------------------------------------------*/ ROM_START(sys1test) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345)) ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e)) ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8)) ROM_END GAME(1977, gts1, 0, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING) //Exact same roms as gts1 with added hardware we'll likely need roms for to emulate properly GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1 with sound board", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING) GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "System 1 Test prom", MACHINE_IS_SKELETON_MECHANICAL) // chimes GAME(1977, cleoptra, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Cleopatra", MACHINE_IS_SKELETON_MECHANICAL) GAME(1978, sinbad, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL) GAME(1978, sinbadn, sinbad, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1978, jokrpokr, gts1, gts1, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL) GAME(1978, dragon, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL) GAME(1979, solaride, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL) GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL) // NE555 beeper GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL) GAME(1978, charlies, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL) GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL) // sound card GAME(1979, totem, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Totem", MACHINE_IS_SKELETON_MECHANICAL) GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "The Incredible Hulk", MACHINE_IS_SKELETON_MECHANICAL) GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Genie (Pinball)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Buck Rogers", MACHINE_IS_SKELETON_MECHANICAL) GAME(1980, torch, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Torch", MACHINE_IS_SKELETON_MECHANICAL) GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Roller Disco", MACHINE_IS_SKELETON_MECHANICAL) GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", MACHINE_IS_SKELETON_MECHANICAL) // homebrew GAME(1986, hexagone, gts1s, gts1, gts1, gts1_state, empty_init, ROT0, "Christian Tabart", "L'Hexagone (France)", MACHINE_IS_SKELETON_MECHANICAL)