From b106b6a17b568aca77e6ec50b36cce5cad4fe5bb Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 27 Aug 2021 02:10:56 +1000 Subject: [PATCH] gts1: various fixes. Still not working though. --- src/devices/cpu/pps4/pps4.cpp | 95 ++-- src/devices/machine/r10788.cpp | 19 +- src/mame/drivers/gts1.cpp | 870 +++++++++++++++++---------------- src/mame/layout/gts1.lay | 56 +-- 4 files changed, 519 insertions(+), 521 deletions(-) diff --git a/src/devices/cpu/pps4/pps4.cpp b/src/devices/cpu/pps4/pps4.cpp index 9de3131ba19..6603d96db02 100644 --- a/src/devices/cpu/pps4/pps4.cpp +++ b/src/devices/cpu/pps4/pps4.cpp @@ -125,7 +125,7 @@ u8 pps4_device::M() { u8 ret = m_data.read_byte(m_B & ~m_SAG); m_SAG = 0; - return ret; + return ret & 15; } @@ -211,9 +211,9 @@ inline u8 pps4_device::ARG() */ void pps4_device::iAD() { - m_A = m_A + M(); - m_C = (m_A >> 4) & 1; - m_A = m_A & 15; + m_A += M(); + m_C = (m_A > 15) ? 1 : 0; + m_A &= 15; } /** @@ -232,8 +232,8 @@ void pps4_device::iAD() void pps4_device::iADC() { m_A = m_A + M() + m_C; - m_C = m_A >> 4; - m_A = m_A & 15; + m_C = (m_A > 15) ? 1 : 0; + m_A &= 15; } /** @@ -252,10 +252,11 @@ void pps4_device::iADC() */ void pps4_device::iADSK() { - m_A = m_A + M(); - m_C = m_A >> 4; + m_A = m_A + M() + m_C; // This fixes the diagnostic test button, same as pinmame. It means ADSK and ADCSK are the same. + //m_A += M(); + m_C = (m_A > 15) ? 1 : 0; m_Skip = m_C; - m_A = m_A & 15; + m_A &= 15; } /** @@ -275,9 +276,9 @@ void pps4_device::iADSK() void pps4_device::iADCSK() { m_A = m_A + M() + m_C; - m_C = m_A >> 4; + m_C = (m_A > 15) ? 1 : 0; m_Skip = m_C; - m_A = m_A & 15; + m_A &= 15; } /** @@ -304,9 +305,9 @@ void pps4_device::iADCSK() void pps4_device::iADI() { const u8 imm = ~m_I1 & 15; - m_A = m_A + imm; - m_Skip = (m_A >> 4) & 1; - m_A = m_A & 15; + m_A += imm; + m_Skip = (m_A > 15) ? 1 : 0; + m_A &= 15; } /** @@ -326,7 +327,7 @@ void pps4_device::iADI() */ void pps4_device::iDC() { - m_A = m_A + 10; + m_A = (m_A + 10) & 15; } /** @@ -345,7 +346,7 @@ void pps4_device::iDC() */ void pps4_device::iAND() { - m_A = m_A & M(); + m_A &= M(); } /** @@ -364,7 +365,7 @@ void pps4_device::iAND() */ void pps4_device::iOR() { - m_A = m_A | M(); + m_A |= M(); } /** @@ -384,7 +385,7 @@ void pps4_device::iOR() */ void pps4_device::iEOR() { - m_A = m_A ^ M(); + m_A ^= M(); } /** @@ -402,7 +403,7 @@ void pps4_device::iEOR() */ void pps4_device::iCOMP() { - m_A = m_A ^ 15; + m_A ^= 15; } /** @@ -522,7 +523,7 @@ void pps4_device::iRF2() * by B register are placed in the accumulator. * The RAM address in the B register is then * modified by the result of an exclusive-OR of - * the 3-b it immediate field I(3:1) and B(7:5) + * the 3-b immediate field I(3:1) and B(7:5) * * See %Note3 */ @@ -530,7 +531,7 @@ void pps4_device::iLD() { const u16 i3c = ~m_I1 & 7; m_A = M(); - m_B = m_B ^ (i3c << 4); + m_B ^= (i3c << 4); } /** @@ -555,7 +556,7 @@ void pps4_device::iEX() const u8 mem = M(); W(m_A); m_A = mem; - m_B = m_B ^ (i3c << 4); + m_B ^= (i3c << 4); } /** @@ -585,14 +586,10 @@ void pps4_device::iEXD() u8 bl = m_B & 15; W(m_A); m_A = mem; - m_B = m_B ^ (i3c << 4); + m_B ^= (i3c << 4); // if decrement BL wraps to 1111b - if (0 == bl) { - bl = 15; - m_Skip = 1; - } else { - bl = bl - 1; - } + bl = (bl - 1) & 15; + m_Skip = (bl == 15); m_B = (m_B & ~15) | bl; } @@ -640,7 +637,7 @@ void pps4_device::iLDI() */ void pps4_device::iLAX() { - m_A = m_X; + m_A = m_X & 15; } /** @@ -654,11 +651,11 @@ void pps4_device::iLAX() * X <- A * * The contents of the accumulator are - * tansferred to the X register. + * transferred to the X register. */ void pps4_device::iLXA() { - m_X = m_A; + m_X = m_A & 15; } /** @@ -672,7 +669,7 @@ void pps4_device::iLXA() * A <- BL * * The contents of BL register are - * tansferred to the accumulator. + * transferred to the accumulator. */ void pps4_device::iLABL() { @@ -690,7 +687,7 @@ void pps4_device::iLABL() * BM <- X * * The contents of X register are - * tansferred to BM register. + * transferred to the BM register. */ void pps4_device::iLBMX() { @@ -708,7 +705,7 @@ void pps4_device::iLBMX() * BU <- A * A <- M * - * The contents of accumulator are tansferred to + * The contents of accumulator are transferred to * BU register. Also, the contents of the currently * addressed RAM are transferred to accumulator. */ @@ -776,9 +773,7 @@ void pps4_device::iXBMX() void pps4_device::iXAX() { // swap A and X - m_A ^= m_X; - m_X ^= m_A; - m_A ^= m_X; + std::swap(m_A, m_X); } /** @@ -797,9 +792,7 @@ void pps4_device::iXAX() void pps4_device::iXS() { // swap SA and SB - m_SA ^= m_SB; - m_SB ^= m_SA; - m_SA ^= m_SB; + std::swap(m_SA, m_SB); } /** @@ -875,9 +868,7 @@ void pps4_device::iLB() m_B = ~ARG() & 255; m_P = m_SA; // swap SA and SB - m_SA ^= m_SB; - m_SB ^= m_SA; - m_SA ^= m_SB; + std::swap(m_SA, m_SB); } /** @@ -1103,7 +1094,7 @@ void pps4_device::iSKC() */ void pps4_device::iSKZ() { - m_Skip = (0 == m_A) ? 1 : 0; + m_Skip = m_A ? 0 : 1; } /** @@ -1175,9 +1166,7 @@ void pps4_device::iRTN() { m_P = m_SA & 0xFFF; // swap SA and SB - m_SA ^= m_SB; - m_SB ^= m_SA; - m_SA ^= m_SB; + std::swap(m_SA, m_SB); } /** @@ -1198,9 +1187,7 @@ void pps4_device::iRTNSK() { m_P = m_SA & 0xFFF; // swap SA and SB - m_SA ^= m_SB; - m_SB ^= m_SA; - m_SA ^= m_SB; + std::swap(m_SA, m_SB); m_Skip = 1; // next opcode is ignored } @@ -1235,7 +1222,7 @@ void pps4_device::iRTNSK() */ void pps4_device::iIOL() { - u8 ac = (~m_A & 15); + u8 ac = ~m_A & 15; m_I2 = ARG(); m_io.write_byte(m_I2, ac); LOG("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac); @@ -1283,7 +1270,7 @@ void pps4_device::iDIB() void pps4_2_device::iDIB() { // PPS-4/2 can write zeros onto bidirectional DIO pins to mask open-drain inputs - m_A = m_dib_cb() & m_DIO; + m_A = m_dib_cb() & m_DIO & 15; } /** @@ -1307,7 +1294,7 @@ void pps4_device::iDOA() void pps4_2_device::iDOA() { // DOA also transfers contents of X to DIO on PPS-4/2 - m_DIO = m_X; + m_DIO = m_X & 15; m_do_cb(m_A | (m_X << 4)); } diff --git a/src/devices/machine/r10788.cpp b/src/devices/machine/r10788.cpp index c273c70a4ee..f4b0ac810ab 100644 --- a/src/devices/machine/r10788.cpp +++ b/src/devices/machine/r10788.cpp @@ -13,7 +13,7 @@ KTR 1 1 x x x 1 1 0 0 Transfer Keyboard Return KTS 1 1 x x x 1 0 1 0 Transfer Keyboard Strobe KLA 1 1 x x x 1 1 1 0 Load Display Register A - KLB 1 1 x x x 1 1 0 1 Load Display Register A + KLB 1 1 x x x 1 1 0 1 Load Display Register B KDN 1 1 x x x 0 0 1 1 Turn On Display KAF 1 1 x x x 1 0 1 1 Turn Off A KBF 1 1 x x x 0 1 1 1 Turn Off B @@ -34,6 +34,9 @@ 7.) KER takes a maximum of 10-bit times to complete (= 80 clocks) Therefore, there must be at least 10 bit times between KER and the next KTS instruction. + 8.) This device has only been tested on the gts1 driver. It does + not use the keyboard. The digit data is inverted (so it stores + 6 when we want to display 9). **********************************************************************/ #include "emu.h" @@ -137,7 +140,7 @@ void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param void r10788_device::io_w(offs_t offset, uint8_t data) { - assert(offset < 16); + offset &= 15; switch (offset) { case KTR: // Transfer Keyboard Return @@ -149,6 +152,7 @@ void r10788_device::io_w(offs_t offset, uint8_t data) m_kts = data; break; case KLA: // Load Display Register A + m_io_counter = (m_io_counter + 1) % 16; LOG("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data); m_kla = data; m_reg[0][m_io_counter] = m_kla; @@ -156,21 +160,22 @@ void r10788_device::io_w(offs_t offset, uint8_t data) case KLB: // Load Display Register B LOG("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data); m_klb = data; - m_reg[1][m_io_counter] = m_kla; + m_reg[1][m_io_counter] = m_klb; break; case KDN: // Turn On Display LOG("%s: KDN data:%02x\n", __FUNCTION__, data); m_mask_a = 15; m_mask_b = 15; + m_io_counter = 15; break; case KAF: // Turn Off A LOG("%s: KAF data:%02x\n", __FUNCTION__, data); m_mask_a = 0; - m_mask_b &= ~3; + m_mask_b &= 12; break; case KBF: // Turn Off B LOG("%s: KBF data:%02x\n", __FUNCTION__, data); - m_mask_b &= ~12; + m_mask_b &= 3; break; case KER: // Reset Keyboard Error LOG("%s: KER data:%02x\n", __FUNCTION__, data); @@ -182,7 +187,7 @@ void r10788_device::io_w(offs_t offset, uint8_t data) uint8_t r10788_device::io_r(offs_t offset) { - assert(offset < 16); + offset &= 15; uint8_t data = 0xf; switch (offset) { @@ -203,8 +208,6 @@ uint8_t r10788_device::io_r(offs_t offset) m_klb = m_reg[1][m_io_counter]; data = m_klb; LOG("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data); - // FIXME: does it automagically increment at KLB write? - m_io_counter = (m_io_counter + 1) % 16; break; case KDN: // Turn On Display LOG("%s: KDN data:%02x\n", __FUNCTION__, data); diff --git a/src/mame/drivers/gts1.cpp b/src/mame/drivers/gts1.cpp index 53e5496d3c1..8ed0e0dc102 100644 --- a/src/mame/drivers/gts1.cpp +++ b/src/mame/drivers/gts1.cpp @@ -25,9 +25,11 @@ a 4-player game. For example, Centigrade 37 (#407) was a single-player game, whi 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. +Of the solid-state games, Asteroid Annie is single-player - the others are 4-player. -Game List: +Game List: (the ROM letter is stamped onto the personality prom) + Number ROM Name 409 A Cleopatra 412SS B Sinbad @@ -45,23 +47,34 @@ Number ROM Name 438 P Torch 440 R Roller Disco 442 S Asteroid Annie and the Aliens + T Test Prom + +The personality prom is programmed in PGOL (pinball-game oriented language). 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 +U1 11660 Rockwell Parallel Processing System 4-bit CPU (PPS/4-2) +U2 10696EE General Purpose I/O expander: 5101L RAM interface (device#6) +U3 10696EE General purpose I/O expander: dipswitches, lamps, misc (device#3) +U4 A1753CX Early RIOT-type device: Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (solenoid control) +U5 A1752CX Early RIOT-type device: Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (switch matrix) +U6 10788 Display driver +Z22 5101L 4-bit static RAM +Z23 MM6351-IJ Personality PROM 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. +- When game started it plays the startup tune and kicks the ball to the shooter - but then + -- You can't add more players; + -- No switches register, so unable to score; + -- The score flashes the high score as if the game had ended; + -- You can still hit tilt (num9) and X until it really is game over. + -- If the lucky number matches you'll still get a free credit. + -- Some games will go straight to test 11, or instant game over. + +- Sound boards + +- Outputs to lamps and to optional solenoids. + *****************************************************************************************************/ @@ -84,8 +97,10 @@ 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_pm(*this, "module") // personality module + , m_nvram(*this, "nvram") + , m_dips(*this, "DSW%u", 0U) + , m_switches(*this, "X%u", 0U) , m_digit8(*this, "digit8_%u", 0U) , m_digit7(*this, "digit7_%u", 0U) { } @@ -93,19 +108,18 @@ public: void gts1(machine_config &config); private: - uint8_t gts1_solenoid_r(offs_t offset); - void gts1_solenoid_w(offs_t offset, uint8_t data); - uint8_t gts1_switches_r(offs_t offset); - void gts1_switches_w(offs_t offset, uint8_t data); - void gts1_display_w(offs_t offset, uint8_t data); - uint8_t gts1_lamp_apm_r(offs_t offset); - void gts1_lamp_apm_w(offs_t offset, uint8_t data); - uint8_t gts1_nvram_r(offs_t offset); - void gts1_nvram_w(offs_t offset, uint8_t data); - uint8_t gts1_io_r(offs_t offset); - void gts1_io_w(offs_t offset, uint8_t data); - uint8_t gts1_pa_r(); - void gts1_do_w(uint8_t data); + u8 gts1_solenoid_r(offs_t offset); + void gts1_solenoid_w(offs_t offset, u8 data); + u8 gts1_switches_r(offs_t offset); + void gts1_switches_w(offs_t offset, u8 data); + void gts1_display_w(offs_t offset, u8 data); + u8 gts1_lamp_apm_r(offs_t offset); + void gts1_lamp_apm_w(offs_t offset, u8 data); + u8 gts1_nvram_r(offs_t offset); + void gts1_nvram_w(offs_t offset, u8 data); + u8 gts1_pa_r(); + void gts1_do_w(u8 data); + void nvram_w(); virtual void machine_start() override; virtual void machine_reset() override; @@ -114,168 +128,178 @@ private: void gts1_data(address_map &map); void gts1_io(address_map &map); - required_device m_maincpu; + required_device m_maincpu; + required_region_ptr m_pm; + required_shared_ptr m_nvram; 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 + required_ioport_array<6> m_switches; + output_finder<32> m_digit8; // digits 0-5,8-13,16-21,24-29 + output_finder<32> m_digit7; // digits 6,7,14,15 on repurposed digital clock display - 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 + u8 m_strobe = 0; //!< switches strobe lines (5 lower bits used) + u8 m_nvram_addr = 0xff; //!< NVRAM address + u8 m_nvram_data = 0; + bool m_nvram_e2 = 0; //!< NVRWAM enable (E2 line) + bool m_nvram_wr = 0; //!< NVRWAM write (W/R line) + u16 m_6351_addr = 0; //!< ROM MM6351 address (12 bits) + u8 m_z30_out = 0; //!< 4-to-16 decoder outputs }; void gts1_state::gts1_map(address_map &map) { - map(0x0000, 0x0fff).rom(); + map(0x0000, 0x0fff).rom(); // ROM inside A1752XX and A1753XX chips } void gts1_state::gts1_data(address_map &map) { - map(0x0000, 0x00ff).ram(); - map(0x0100, 0x01ff).ram().share("nvram"); + map(0x0000, 0x00ff).ram(); // RAM inside A1752XX and A1753XX chips + map(0x0100, 0x01ff).ram().share("nvram"); // Battery-backed M5101L } void gts1_state::gts1_io(address_map &map) { - map(0x0000, 0x00ff).r(FUNC(gts1_state::gts1_io_r)).w(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 + map(0x20, 0x2f).rw("u5", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U5) switch matrix + map(0x30, 0x3f).rw("u3", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U3) solenoid + dips + map(0x40, 0x4f).rw("u4", FUNC(ra17xx_device::io_r), FUNC(ra17xx_device::io_w)); // (U4) solenoid + map(0x60, 0x6f).rw("u2", FUNC(r10696_device::io_r), FUNC(r10696_device::io_w)); // (U2) NVRAM io chip + map(0xd0, 0xdf).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_DIPNAME( 0x08, 0x08, "S01") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x08, DEF_STR( Off )) + PORT_DIPNAME( 0x04, 0x04, "S02") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x04, DEF_STR( Off )) + PORT_DIPNAME( 0x02, 0x02, "S03") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x02, DEF_STR( Off )) + PORT_DIPNAME( 0x01, 0x01, "S04") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x01, DEF_STR( Off )) + PORT_DIPNAME( 0x80, 0x80, "S05") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x80, DEF_STR( Off )) + PORT_DIPNAME( 0x40, 0x40, "S06") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPNAME( 0x20, 0x20, "S07") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x20, DEF_STR( Off )) + PORT_DIPNAME( 0x10, 0x10, "S08") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x10, DEF_STR( Off )) PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x00, "S09") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x01, DEF_STR( Off )) PORT_DIPNAME( 0x02, 0x00, "S10") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x02, DEF_STR( Off )) PORT_DIPNAME( 0x04, 0x00, "S11") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x04, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x04, DEF_STR( Off )) PORT_DIPNAME( 0x08, 0x00, "S12") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x08, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x08, DEF_STR( Off )) PORT_DIPNAME( 0x10, 0x00, "S13") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x10, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x10, DEF_STR( Off )) PORT_DIPNAME( 0x20, 0x00, "S14") - PORT_DIPSETTING( 0x00, DEF_STR( Yes )) - PORT_DIPSETTING( 0x20, DEF_STR( No )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x20, DEF_STR( Off )) 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_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPNAME( 0x80, 0x80, "S16") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x80, DEF_STR( Off )) PORT_START("DSW2") PORT_DIPNAME( 0x01, 0x00, "S17") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x01, DEF_STR( Off )) 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_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x02, DEF_STR( Off )) + PORT_DIPNAME( 0x04, 0x04, "S19") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x04, DEF_STR( Off )) PORT_DIPNAME( 0x08, 0x00, "S20") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x08, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x08, DEF_STR( Off )) PORT_DIPNAME( 0x10, 0x00, "S21") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x10, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x10, DEF_STR( Off )) PORT_DIPNAME( 0x20, 0x00, "S22") - PORT_DIPSETTING( 0x00, DEF_STR( Off )) - PORT_DIPSETTING( 0x20, DEF_STR( On )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x20, DEF_STR( Off )) 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 )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x40, DEF_STR( Off )) + PORT_DIPNAME( 0x80, 0x80, "S24") + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPSETTING( 0x80, DEF_STR( Off )) 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) + PORT_START("X0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Play/Test") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("SW.10") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("SW.20") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("SW.30") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("SW.40") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("SW.50") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("SW.60") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("SW.70") + + PORT_START("X1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("SW.11") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("SW.21") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("SW.31") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("SW.41") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("SW.51") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("SW.61") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("SW.71") + + PORT_START("X2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("SW.12") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("SW.22") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("SW.32") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("SW.42") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("SW.52") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("SW.62") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("SW.72") + + PORT_START("X3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("SW.13") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("SW.23") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("SW.33") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("SW.43") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("SW.53") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SW.63") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("SW.73") + + PORT_START("X4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Tilt") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("SW.14") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("SW.24") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("SW.34") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("SW.44") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("SW.54") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("SW.64") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("SW.74") + + PORT_START("X5") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Reset") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Slam Tilt") INPUT_PORTS_END static INPUT_PORTS_START( gts1 ) @@ -285,57 +309,52 @@ static INPUT_PORTS_START( gts1 ) INPUT_PORTS_END static INPUT_PORTS_START( jokrpokr ) - PORT_INCLUDE( gts1_dips ) + PORT_INCLUDE( gts1 ) - 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_MODIFY("X0") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("POP/BUMBER") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("EXTRA BALL TARGET") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("SPECIAL ROLLOVER") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("10 POINT CONTACTS") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("\"A\" DROP TARGET (red)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - 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_MODIFY("X1") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("\"A\" ROLLOVER") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("\"10\" DROP TARGET") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("\"Q\" DROP TARGET (red)") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("\"K\" DROP TARGET (black)") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("\"A\" DROP TARGET (black)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - 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_MODIFY("X2") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("\"B\" ROLLOVER") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_P) PORT_NAME("\"J\" DROP TARGET (black)") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("\"O\" DROP TARGET (black)") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("\"K\" DROP TARGET") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("JOKER DROP TARGET") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - 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_MODIFY("X3") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("\"C\" ROLLOVER") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("\"J\" DROP TARGET (red)") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("\"O\" DROP TARGET (red)") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("\"K\" DROP TARGET") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_MINUS) PORT_NAME("\"A\" DROP TARGET (red)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - 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) + PORT_MODIFY("X4") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_COMMA) PORT_NAME("\"K\" DROP TARGET") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("\"A\" DROP TARGET (red)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END void gts1_state::machine_start() @@ -347,6 +366,7 @@ void gts1_state::machine_start() save_item(NAME(m_strobe)); save_item(NAME(m_nvram_addr)); + save_item(NAME(m_nvram_data)); save_item(NAME(m_nvram_e2)); save_item(NAME(m_nvram_wr)); save_item(NAME(m_6351_addr)); @@ -358,105 +378,108 @@ void gts1_state::machine_reset() genpin_class::machine_reset(); m_strobe = 0; - m_nvram_addr = 0; + m_nvram_addr = 0xff; + m_nvram_data = 0; m_nvram_e2 = false; m_nvram_wr = false; - m_6351_addr = 0; + m_6351_addr = 0x3ff; m_z30_out = 0; } -uint8_t gts1_state::gts1_solenoid_r(offs_t offset) +u8 gts1_state::gts1_solenoid_r(offs_t offset) // does nothing { - uint8_t data = 0; - LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data); + u8 data = 0; + //LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data); return data; } -void gts1_state::gts1_solenoid_w(offs_t offset, uint8_t data) +void gts1_state::gts1_solenoid_w(offs_t offset, u8 data) // WORKS { + //LOG("%s: solenoid #[%02X] gets data=%X\n", __FUNCTION__, offset, data); switch (offset) { - case 0: - LOG("%s: outhole <- %x\n", __FUNCTION__, data); + case 0: // outhole + if (data) + m_samples->start(5, 5); break; - case 1: - LOG("%s: knocker <- %x\n", __FUNCTION__, data); + case 1: // knocker + if (data) + m_samples->start(0, 6); break; - case 2: - LOG("%s: tens chime <- %x\n", __FUNCTION__, data); + case 2: // tens chime + if (data) + m_samples->start(3, 3); break; - case 3: - LOG("%s: hundreds chime <- %x\n", __FUNCTION__, data); + case 3: // hundreds chime + if (data) + m_samples->start(2, 2); break; - case 4: - LOG("%s: thousands chime <- %x\n", __FUNCTION__, data); + case 4: // thousands chime + if (data) + m_samples->start(1, 1); break; - case 5: - LOG("%s: no. 6 <- %x\n", __FUNCTION__, data); + case 5: // optional per machine break; - case 6: - LOG("%s: no. 7 <- %x\n", __FUNCTION__, data); + case 6: // optional per machine break; - case 7: - LOG("%s: no. 8 <- %x\n", __FUNCTION__, data); + case 7: // optional per machine break; - case 8: case 9: case 10: case 11: - LOG("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data); + case 8: case 9: case 10: case 11: // unused 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; + m_nvram_e2 = data ? true : false; + nvram_w(); break; case 14: // RAM control W/R - LOG("%s: RAM control W/R <- %x\n", __FUNCTION__, data); - m_nvram_wr = (data & 1) ? true : false; + m_nvram_wr = data ? false : true; + nvram_w(); break; case 15: // spare - LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data); break; } } -uint8_t gts1_state::gts1_switches_r(offs_t offset) +u8 gts1_state::gts1_switches_r(offs_t offset) // only switches with offset 0 are working; can't go in-game to try the others ********** { - 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); + u8 data = 0; + if (offset > 7) + for (u8 i = 0; i < 5; i++) + if (BIT(m_strobe, i)) + { + data |= BIT(m_switches[i]->read(), offset & 7); + //LOG("%s: switches[bit %X of %X, using offset of %X] got %x\n", __FUNCTION__, i, m_strobe, offset&7, data); } - } - } - LOG("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data); - return data; + return data ? 0 : 1; // FIXME: inverted or normal? } -void gts1_state::gts1_switches_w(offs_t offset, uint8_t data) +void gts1_state::gts1_switches_w(offs_t offset, u8 data) // WORKS { - 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); + // outputs O-0 to O-4 are the 5 strobe lines + if (offset < 5) + { + if (data) + m_strobe |= (1<> 0) & 15]; - uint8_t b = ttl7448_mod[(data >> 4) & 15]; + data ^= 0xff; // It was stored in the 10788 inverted + u8 a = ttl7448_mod[BIT(data, 0, 4)]; + u8 b = ttl7448_mod[BIT(data, 4, 4)]; // 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 + if ((offset % 8) < 6) + { m_digit8[offset] = a; m_digit8[offset + 16] = b; - } else { + } + else + { /* * For the 4 7-seg displays the segment h is turned back into - * segments b and c to display the 7-seg "1". - */ + * 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; } } @@ -511,18 +536,16 @@ void gts1_state::gts1_display_w(offs_t offset, uint8_t data) * @param offset 0 ... 2 = group * @return 4-bit value read from the group */ -uint8_t gts1_state::gts1_nvram_r(offs_t offset) +u8 gts1_state::gts1_nvram_r(offs_t offset) // WORKS { - uint8_t data = 0x0f; + u8 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); + if (m_nvram_e2) + { + data = m_nvram[m_nvram_addr]; + LOG("%s: NVRAM READ @[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data); } break; case 1: // group B @@ -530,7 +553,7 @@ uint8_t gts1_state::gts1_nvram_r(offs_t offset) // Schematics says: SPARES break; } - return data; + return ~data & 15; } /** @@ -538,113 +561,58 @@ uint8_t gts1_state::gts1_nvram_r(offs_t offset) * @param offset 0 ... 2 = group * @param data 4 bit value to write */ -void gts1_state::gts1_nvram_w(offs_t offset, uint8_t data) + /* NVRAM locations: Each stored parameter takes 6 nybbles. The address is XY, where X = the test number in the bookkeeping functions (0 to 9), + and Y = 0 for units, 1 for tens, etc. Additionally, A0-A5 is for the high score to date (bookkeeping function 10), and B0-B5 is the stored credits. */ +void gts1_state::gts1_nvram_w(offs_t offset, u8 data) // WORKS { + data = ~data & 15; // make the nvram compatible with pinmame switch (offset) { case 0: // group A - address lines 3:0 - m_nvram_addr = (m_nvram_addr & ~15) | (data & 15); + m_nvram_addr = (m_nvram_addr & 0xf0) | data; break; case 1: // group B - address lines 7:4 - m_nvram_addr = (m_nvram_addr & ~(15 << 4)) | ((data & 15) << 4); + m_nvram_addr = (m_nvram_addr & 15) | (data << 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; - } + m_nvram_data = data; + nvram_w(); break; } } +void gts1_state::nvram_w() +{ + if (m_nvram_wr && m_nvram_e2) + { + LOG("%s: NVRAM WRITE @[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, m_nvram_data); + m_nvram[m_nvram_addr] = m_nvram_data; + //if (m_nvram_addr == 0xb1) machine().debug_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 */ -uint8_t gts1_state::gts1_lamp_apm_r(offs_t offset) +u8 gts1_state::gts1_lamp_apm_r(offs_t offset) // Think this works - dips seem to work correctly { - uint8_t data = 0x0f; + u8 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); - } + if (m_z30_out < 3) + data = BIT(m_dips[m_z30_out]->read(),0,4); 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); - } + if (m_z30_out < 3) + data = BIT(m_dips[m_z30_out]->read(),4,4); break; - case 2: // TODO: connect - // IN-9 (unused?) - // IN-10 (reset sw25) - // IN-11 (outhole sw) - // IN-12 (slam sw) + case 2: // 3 hardwired switches + data = m_switches[5]->read(); break; } + //LOG("%s: offs=%d, m_z30_out=%d, data=%d\n", __FUNCTION__, offset, m_z30_out, data); return data; } @@ -653,59 +621,47 @@ uint8_t gts1_state::gts1_lamp_apm_r(offs_t offset) * @param offset 0 ... 2 = group * @param data 4 bit value to write */ -void gts1_state::gts1_lamp_apm_w(offs_t offset, uint8_t data) +void gts1_state::gts1_lamp_apm_w(offs_t offset, u8 data) // Working for the dips, not sure about the PM address. Lamps to be done. *********** { switch (offset) { - case 0: // LD1-LD4 on jumper J5 + case 0: // LD1-LD4 on jumper J5 // lamps - TODO ********* break; - case 1: // Z30 1-of-16 decoder - m_z30_out = 1 << (data & 15); + case 1: // Z30 1-of-16 decoder // lamps - TODO ********* + m_z30_out = ~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(?) + m_6351_addr = (m_6351_addr & 0xff) | ((data & 3) << 8); + // O11 and O12 are unused break; } } -uint8_t gts1_state::gts1_io_r(offs_t offset) +u8 gts1_state::gts1_pa_r() // TODO: address normal or inverted? data normal or inverted? *************** { - const uint8_t data = 0x0f; - LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data); - return data; + u16 addr = m_6351_addr; // ^ 0x3ff; + // return nibble from personality module ROM + u8 data = m_pm[addr]; + LOG("%s: PROM READ @[%03x]:%02x\n", __FUNCTION__, addr, data); + return ~data & 15; // inverted = game over at start; normal = test mode at start } -void gts1_state::gts1_io_w(offs_t offset, uint8_t data) -{ - LOG("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data); -} - -uint8_t 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; -} - -void gts1_state::gts1_do_w(uint8_t data) +void gts1_state::gts1_do_w(u8 data) { // 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); + LOG("%s: PROM addr:%02x\n", __FUNCTION__, m_6351_addr); } void gts1_state::gts1(machine_config & config) { /* basic machine hardware */ - pps4_2_device &maincpu(PPS4_2(config, m_maincpu, XTAL(3'579'545))); // divided by 18 in the CPU - maincpu.set_addrmap(AS_PROGRAM, >s1_state::gts1_map); - maincpu.set_addrmap(AS_DATA, >s1_state::gts1_data); - maincpu.set_addrmap(AS_IO, >s1_state::gts1_io); - maincpu.dia_cb().set(FUNC(gts1_state::gts1_pa_r)); - maincpu.do_cb().set(FUNC(gts1_state::gts1_do_w)); + PPS4_2(config, m_maincpu, XTAL(3'579'545)); // divided by 18 in the CPU + m_maincpu->set_addrmap(AS_PROGRAM, >s1_state::gts1_map); + m_maincpu->set_addrmap(AS_DATA, >s1_state::gts1_data); + m_maincpu->set_addrmap(AS_IO, >s1_state::gts1_io); + m_maincpu->dia_cb().set(FUNC(gts1_state::gts1_pa_r)); + m_maincpu->do_cb().set(FUNC(gts1_state::gts1_do_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -744,26 +700,33 @@ void gts1_state::gts1(machine_config & config) ROM_START( gts1 ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", ROMREGION_ERASEFF ) ROM_END ROM_START( gts1s ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", ROMREGION_ERASEFF ) ROM_END /*------------------------------------------------------------------- / Asteroid Annie and the Aliens (12/1980) #442 /-------------------------------------------------------------------*/ ROM_START(astannie) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("442.cpu", 0x0000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -774,11 +737,14 @@ ROM_END / Buck Rogers (01/1980) #437 /-------------------------------------------------------------------*/ ROM_START(buckrgrs) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("437.cpu", 0x0000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -789,60 +755,73 @@ ROM_END / Charlie's Angels (11/1978) #425 /-------------------------------------------------------------------*/ ROM_START(charlies) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("425.cpu", 0x0000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d)) ROM_END /*------------------------------------------------------------------- / Cleopatra (11/1977) #409 /-------------------------------------------------------------------*/ ROM_START(cleoptra) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("409.cpu", 0x0000, 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_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("424.cpu", 0x0000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160)) ROM_END /*------------------------------------------------------------------- / Count-Down (05/1979) #422 /-------------------------------------------------------------------*/ ROM_START(countdwn) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("422.cpu", 0x0000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22)) ROM_END /*------------------------------------------------------------------- / Dragon (10/1978) #419 /-------------------------------------------------------------------*/ ROM_START(dragon) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("419.cpu", 0x0000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e)) ROM_END /*------------------------------------------------------------------- / Genie (11/1979) #435 /-------------------------------------------------------------------*/ ROM_START(geniep) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("435.cpu", 0x0000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -853,10 +832,12 @@ ROM_END / Joker Poker (08/1978) #417 /-------------------------------------------------------------------*/ ROM_START(jokrpokr) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("417.cpu", 0x0000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a)) ROM_END /*------------------------------------------------------------------- @@ -866,12 +847,15 @@ ROM_END / L'Hexagone (04/1986) /-------------------------------------------------------------------*/ ROM_START(hexagone) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("435.cpu", 0x0000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58)) + + ROM_REGION( 0x10000, "audiocpu", 0) + ROM_LOAD("hexagone.bin", 0x0000, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e)) ROM_END /*------------------------------------------------------------------- / Movie @@ -881,21 +865,26 @@ ROM_END / Pinball Pool (08/1979) #427 /-------------------------------------------------------------------*/ ROM_START(pinpool) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("427.cpu", 0x0000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32)) ROM_END /*------------------------------------------------------------------- / Roller Disco (02/1980) #440 /-------------------------------------------------------------------*/ ROM_START(roldisco) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("440.cpu", 0x0000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -906,12 +895,14 @@ ROM_END / Sahara Love (1984) /-------------------------------------------------------------------*/ ROM_START(sahalove) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION(0x2000, "audiocpu", 0) // extra Z80 for sound. TODO: emulate + ROM_REGION( 0x0400, "module", 0 ) + ROM_LOAD("412.cpu", 0x0000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac)) + + ROM_REGION( 0x4000, "audiocpu", 0) // extra Z80 for sound. TODO: emulate ROM_LOAD("sahalove.bin", 0x0000, 0x2000, CRC(3512840a) SHA1(eb36bb78bbf2f8610bc1d71a6651b937db3a5c69)) ROM_END @@ -919,17 +910,21 @@ ROM_END / Sinbad (05/1978) #412 /-------------------------------------------------------------------*/ ROM_START(sinbad) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("412.cpu", 0x0000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac)) ROM_END ROM_START(sinbadn) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("412no1.cpu", 0x0000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f)) ROM_END /*------------------------------------------------------------------- @@ -940,21 +935,26 @@ ROM_END / Solar Ride (02/1979) #421 /-------------------------------------------------------------------*/ ROM_START(solaride) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("421.cpu", 0x0000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55)) ROM_END /*------------------------------------------------------------------- / The Incredible Hulk (10/1979) #433 /-------------------------------------------------------------------*/ ROM_START(hulk) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("433.cpu", 0x0000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -965,11 +965,14 @@ ROM_END / Torch (02/1980) #438 /-------------------------------------------------------------------*/ ROM_START(torch) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("438.cpu", 0x0000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -980,11 +983,14 @@ ROM_END / Totem (10/1979) #429 /-------------------------------------------------------------------*/ ROM_START(totem) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("429.cpu", 0x0000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d)) + + ROM_REGION( 0x10000, "audiocpu", 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)) @@ -995,10 +1001,12 @@ ROM_END / System 1 Test prom /-------------------------------------------------------------------*/ ROM_START(sys1test) - ROM_REGION(0x10000, "maincpu", 0) + ROM_REGION( 0x1000, "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_REGION( 0x0400, "module", 0 ) + ROM_LOAD("test.cpu", 0x0000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8)) ROM_END diff --git a/src/mame/layout/gts1.lay b/src/mame/layout/gts1.lay index 7a8cb1a3075..dc276022324 100644 --- a/src/mame/layout/gts1.lay +++ b/src/mame/layout/gts1.lay @@ -20,94 +20,94 @@ license:CC0 - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +