summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/gts1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/gts1.cpp')
-rw-r--r--src/mame/drivers/gts1.cpp882
1 files changed, 445 insertions, 437 deletions
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<cpu_device> m_maincpu;
+ required_device<pps4_2_device> m_maincpu;
+ required_region_ptr<u8> m_pm;
+ required_shared_ptr<u8> 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
-
- 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
+ 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
+
+ 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_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)
+ PORT_INCLUDE( gts1 )
+
+ 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_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_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_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_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<<offset);
+ else
+ m_strobe &= ~(1<<offset);
+ //LOG("%s: strobe is now[%x], data was %x\n", __FUNCTION__, m_strobe, data);
}
}
/**
* @brief write a 8seg display value
- * @param offset digit number 0 .. 19
+ * @param offset digit number 0 .. 15
* @param data 4-bit value to display
*/
-void gts1_state::gts1_display_w(offs_t offset, uint8_t data)
+void gts1_state::gts1_display_w(offs_t offset, u8 data) // WORKS
{
/*
* 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
+ enum : u8
{
_a = 1 << 0,
_b = 1 << 1,
@@ -467,7 +490,7 @@ void gts1_state::gts1_display_w(offs_t offset, uint8_t data)
_g = 1 << 6,
_h = 1 << 7
};
- static constexpr uint8_t ttl7448_mod[16] = {
+ static constexpr u8 ttl7448_mod[16] = {
/* 0 */ _a | _b | _c | _d | _e | _f,
/* 1 */ _h,
/* 2 */ _a | _b | _d | _e | _g,
@@ -485,24 +508,26 @@ void gts1_state::gts1_display_w(offs_t offset, uint8_t data)
/* e */ _d | _e | _f | _g,
/* f */ 0
};
- uint8_t a = ttl7448_mod[(data >> 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)
-{
- const uint8_t data = 0x0f;
- LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data);
- return data;
-}
-
-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()
+u8 gts1_state::gts1_pa_r() // TODO: address normal or inverted? data normal or inverted? ***************
{
- // 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;
+ 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_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, &gts1_state::gts1_map);
- maincpu.set_addrmap(AS_DATA, &gts1_state::gts1_data);
- maincpu.set_addrmap(AS_IO, &gts1_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, &gts1_state::gts1_map);
+ m_maincpu->set_addrmap(AS_DATA, &gts1_state::gts1_data);
+ m_maincpu->set_addrmap(AS_IO, &gts1_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