summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-03-31 19:02:45 +0200
committer hap <happppp@users.noreply.github.com>2020-03-31 19:04:05 +0200
commit0684d146b6778f84cb97662a0f431427a3890e86 (patch)
treeafeb86a8c9f12c3b23a80d959d43ecdd288dbcde /src/mame
parentae008b65e0966dbd76efba8ea912c26f3003be27 (diff)
hh_hmcs40: move select a game to its own driver (nw)
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/eva.cpp88
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp165
-rw-r--r--src/mame/drivers/hh_tms1k.cpp3
-rw-r--r--src/mame/drivers/sag.cpp272
-rw-r--r--src/mame/layout/sag.lay279
-rw-r--r--src/mame/mame.lst8
-rw-r--r--src/mame/mess.flt1
7 files changed, 466 insertions, 350 deletions
diff --git a/src/mame/drivers/eva.cpp b/src/mame/drivers/eva.cpp
index 65bcf3c3241..d5c71f0db77 100644
--- a/src/mame/drivers/eva.cpp
+++ b/src/mame/drivers/eva.cpp
@@ -3,21 +3,21 @@
// thanks-to:David Viens, Sean Riddle
/***************************************************************************
- Chrysler Electronic Voice Alert
+Chrysler Electronic Voice Alert
- 11-function board "EVA-11"
- - TMS1000 MCU (label 4230625-N1LL 32045B, die label 1000F M32045B)
- - TMS5110A, TMS6125 CM73002
- - 2 Nat.Semi. 20-pin SDIP, I/O expanders?
+11-function board "EVA-11"
+- TMS1000 MCU (label 4230625-N1LL 32045B, die label 1000F M32045B)
+- TMS5110A, TMS6125 CM73002
+- 2 Nat.Semi. 20-pin SDIP, I/O expanders?
- 24-function board "EVA-24"
- - COP420 MCU (custom label)
- - TMS5110A, TMS6100 CM63002
- - monitor board (unknown MCU, no dump), VFD panel
+24-function board "EVA-24"
+- COP420 MCU (custom label)
+- TMS5110A, TMS6100 CM63002
+- monitor board (unknown MCU, no dump), VFD panel
- TODO:
- - add eva11/eva24 sensors
- - add eva24 VFD
+TODO:
+- add eva11/eva24 sensors
+- add eva24 VFD
***************************************************************************/
@@ -29,10 +29,12 @@
#include "speaker.h"
-class eva_base_state : public driver_device
+namespace {
+
+class base_state : public driver_device
{
public:
- eva_base_state(const machine_config &mconfig, device_type type, const char *tag) :
+ base_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_tms5100(*this, "tms5100"),
m_tms6100(*this, "tms6100")
@@ -46,11 +48,11 @@ protected:
required_device<tms6100_device> m_tms6100;
};
-class eva11_state : public eva_base_state
+class eva11_state : public base_state
{
public:
eva11_state(const machine_config &mconfig, device_type type, const char *tag) :
- eva_base_state(mconfig, type, tag),
+ base_state(mconfig, type, tag),
m_maincpu(*this, "maincpu")
{ }
@@ -65,19 +67,21 @@ private:
DECLARE_WRITE16_MEMBER(write_r);
};
-class eva24_state : public eva_base_state
+class eva24_state : public base_state
{
public:
eva24_state(const machine_config &mconfig, device_type type, const char *tag) :
- eva_base_state(mconfig, type, tag),
+ base_state(mconfig, type, tag),
m_maincpu(*this, "maincpu")
{ }
void eva(machine_config &config);
-private:
+protected:
virtual void machine_start() override;
+private:
+
// devices
required_device<cop420_cpu_device> m_maincpu;
@@ -85,25 +89,19 @@ private:
DECLARE_WRITE8_MEMBER(write_g);
DECLARE_WRITE8_MEMBER(write_d);
- u8 m_g;
+ u8 m_g = 0;
};
void eva24_state::machine_start()
{
- // zerofill
- m_g = 0;
-
- // register for savestates
save_item(NAME(m_g));
}
-/***************************************************************************
-
- I/O
-
-***************************************************************************/
+/******************************************************************************
+ I/O
+******************************************************************************/
// EVA-24
@@ -153,11 +151,9 @@ READ8_MEMBER(eva11_state::read_k)
-/***************************************************************************
-
- Inputs
-
-***************************************************************************/
+/******************************************************************************
+ Input Ports
+******************************************************************************/
static INPUT_PORTS_START( eva24 )
INPUT_PORTS_END
@@ -167,13 +163,11 @@ INPUT_PORTS_END
-/***************************************************************************
-
- Machine Config
-
-***************************************************************************/
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
-void eva_base_state::eva_sound(machine_config &config)
+void base_state::eva_sound(machine_config &config)
{
/* sound hardware */
TMS6100(config, m_tms6100, 640_kHz_XTAL/4);
@@ -213,11 +207,9 @@ void eva11_state::eva(machine_config &config)
-/***************************************************************************
-
- ROM Defs, Game driver(s)
-
-***************************************************************************/
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
ROM_START( eva24 )
ROM_REGION( 0x0400, "maincpu", 0 )
@@ -240,7 +232,13 @@ ROM_START( eva11 )
ROM_LOAD( "cm73002.vsm", 0x0000, 0x1000, CRC(d5340bf8) SHA1(81195e8f870275d39a1abe1c8e2a6afdfdb15725) )
ROM_END
+} // anonymous namespace
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
SYST( 1984, eva24, 0, 0, eva, eva24, eva24_state, empty_init, "Chrysler", "Electronic Voice Alert (24-function)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index 67122745788..a8b863e134f 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -20,9 +20,9 @@
@04 HD38800A 1980, Gakken Heiankyo Alien
@25 HD38800A 1981, Coleco Alien Attack
@27 HD38800A 1981, Bandai Packri Monster
- @31 HD38800A 1981, Entex Select-a-Game cartridge: Space Invader 2
- @37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4
- @38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball
+ 31 HD38800A 1981, Entex Select-A-Game cartridge: Space Invader 2 -> sag.cpp
+ 37 HD38800A 1981, Entex Select-A-Game cartridge: Baseball 4 -> "
+ 38 HD38800A 1981, Entex Select-A-Game cartridge: Pinball -> "
*41 HD38800A 1982, Gakken Puck Monster
*51 HD38800A 1981, Actronics(Hanzawa) Twinvader (larger white version)
@70 HD38800A 1982, Coleco Galaxian
@@ -97,7 +97,6 @@
// internal artwork (complete)
#include "pairmtch.lh"
-#include "sag.lh"
// internal artwork (bezel overlay)
#include "bambball.lh"
@@ -2433,161 +2432,6 @@ ROM_END
/***************************************************************************
- Entex Select-A-Game (HMCS40 MCU cartridges)
- * see gamelist for cartridge info
- * cyan/red VFD display Futaba DM-16Z + cyan VFD 9-digit panel Futaba 9-ST-11A 1F
-
- The console is the peripheral, the heart of the system is the cartridge.
- Cartridges with a HMCS40 MCU are implemented in this driver.
-
- MAME external artwork is recommended, needed for per-game VFD overlays.
-
-***************************************************************************/
-
-class sag_state : public hh_hmcs40_state
-{
-public:
- sag_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_hmcs40_state(mconfig, type, tag)
- { }
-
- void update_display();
- DECLARE_WRITE8_MEMBER(plate_w);
- DECLARE_WRITE16_MEMBER(grid_w);
- DECLARE_READ16_MEMBER(input_r);
- void sag(machine_config &config);
-};
-
-// handlers
-
-void sag_state::update_display()
-{
- // grid 0-7 are the 'pixels'
- m_display->matrix_partial(0, 8, m_grid, m_plate, false);
-
- // grid 8-11 are 7segs
- u8 seg = bitswap<8>(m_plate,3,4,5,6,7,8,9,10);
- m_display->matrix_partial(8, 4, m_grid >> 8, seg);
-}
-
-WRITE8_MEMBER(sag_state::plate_w)
-{
- // R0x-R3x: vfd plate
- int shift = offset * 4;
- m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
- update_display();
-}
-
-WRITE16_MEMBER(sag_state::grid_w)
-{
- // D0: speaker out
- m_speaker->level_w(data & 1);
-
- // D2-D7: input mux
- m_inp_mux = data >> 2 & 0x3f;
-
- // D1-D12: vfd grid
- m_grid = data >> 1 & 0xfff;
- update_display();
-}
-
-READ16_MEMBER(sag_state::input_r)
-{
- // D13-D15: multiplexed inputs
- return read_inputs(6) << 13;
-}
-
-// config
-
-static INPUT_PORTS_START( sag )
- PORT_START("IN.0") // D2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("P1 Button 1")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 3")
- PORT_CONFNAME( 0x04, 0x04, "Game" )
- PORT_CONFSETTING( 0x04, "1" )
- PORT_CONFSETTING( 0x00, "2" )
-
- PORT_START("IN.1") // D3
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Button 2")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 4")
- PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x01) // 1 player
-
- PORT_START("IN.2") // D4
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("P1 Button 3")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 1")
- PORT_CONFNAME( 0x04, 0x00, DEF_STR( Difficulty ) )
- PORT_CONFSETTING( 0x00, "1" )
- PORT_CONFSETTING( 0x04, "2" )
-
- PORT_START("IN.3") // D5
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Button 4")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 2")
- PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x00) // demo
-
- PORT_START("IN.4") // D6
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button 5")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Button 5")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button 7")
-
- PORT_START("IN.5") // D7
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button 6")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Button 6")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Button 7")
-
- PORT_START("FAKE") // shared D3/D5
- PORT_CONFNAME( 0x03, 0x01, DEF_STR( Players ) )
- PORT_CONFSETTING( 0x00, "Demo" )
- PORT_CONFSETTING( 0x01, "1" )
- PORT_CONFSETTING( 0x02, "2" )
-INPUT_PORTS_END
-
-void sag_state::sag(machine_config &config)
-{
- /* basic machine hardware */
- HD38800(config, m_maincpu, 450000); // approximation
- m_maincpu->write_r<0>().set(FUNC(sag_state::plate_w));
- m_maincpu->write_r<1>().set(FUNC(sag_state::plate_w));
- m_maincpu->write_r<2>().set(FUNC(sag_state::plate_w));
- m_maincpu->write_r<3>().set(FUNC(sag_state::plate_w));
- m_maincpu->write_d().set(FUNC(sag_state::grid_w));
- m_maincpu->read_d().set(FUNC(sag_state::input_r));
-
- /* video hardware */
- PWM_DISPLAY(config, m_display).set_size(8+4, 14);
- m_display->set_segmask(0xf00, 0x7f);
- config.set_default_layout(layout_sag);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
-}
-
-// roms
-
-ROM_START( sag_si2 )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) )
- ROM_CONTINUE( 0x1e80, 0x0100 )
-ROM_END
-
-ROM_START( sag_bb4 )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) )
- ROM_CONTINUE( 0x1e80, 0x0100 )
-ROM_END
-
-ROM_START( sag_pb )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) )
- ROM_CONTINUE( 0x1e80, 0x0100 )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
Entex Galaxian 2 (manufactured in Japan)
* PCB labels ENTEX GALAXIAN PB-118/116/097 80-210137/135/114
* Hitachi QFP HD38820A13 MCU
@@ -4312,9 +4156,6 @@ CONS( 1981, cpacman, 0, 0, cpacman, cpacman, cpacman_state, empty_in
CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, cpacman_state, empty_init, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE )
CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, cmspacmn_state, empty_init, "Coleco", "Ms. Pac-Man (Coleco)", MACHINE_SUPPORTS_SAVE )
-CONS( 1981, sag_si2, 0, 0, sag, sag, sag_state, empty_init, "Entex", "Select-A-Game: Space Invader 2", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) // suspect bad dump
-CONS( 1981, sag_bb4, 0, 0, sag, sag, sag_state, empty_init, "Entex", "Select-A-Game: Baseball 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
-CONS( 1981, sag_pb, 0, 0, sag, sag, sag_state, empty_init, "Entex", "Select-A-Game: Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, egalaxn2_state, empty_init, "Entex", "Galaxian 2 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, epacman2, 0, 0, epacman2, epacman2, epacman2_state, empty_init, "Entex", "Pac Man 2 (Entex, cyan Pacman)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, epacman2r, epacman2, 0, epacman2, epacman2, epacman2_state, empty_init, "Entex", "Pac Man 2 (Entex, red Pacman)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 7d410e81c2e..2affe197e25 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -8,6 +8,7 @@
part of a series is (or will be) in its own driver, see:
- eva: Chrysler EVA-11 (and EVA-24)
- microvsn: Milton Bradley MicroVision
+ - sag: Entex Select-A-Game Machine
(contd.) hh_tms1k child drivers:
- tispellb: TI Spelling B series gen. 1
@@ -124,7 +125,7 @@
@MP7351 TMS1400 1982, Parker Brothers Master Merlin
@MP7551 TMS1670 1980, Entex Color Football 4 (6009)
@MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (6008) (note: assume F to be a misprint)
- *MP7573 TMS1670? 1981, Entex Select-a-Game cartridge: Football 4 (? note: 40-pin, VFD-capable)
+ MP7573 TMS1670 1981, Entex Select-A-Game cartridge: Football 4 -> sag.cpp
*M95041 ? 1983, Tsukuda Game Pachinko (? note: 40-pin, VFD-capable)
inconsistent:
diff --git a/src/mame/drivers/sag.cpp b/src/mame/drivers/sag.cpp
new file mode 100644
index 00000000000..7e0451e7cad
--- /dev/null
+++ b/src/mame/drivers/sag.cpp
@@ -0,0 +1,272 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Kevin Horton, Sean Riddle
+/***************************************************************************
+
+Entex Select-A-Game Machine, handheld game console.
+Technically, the main unit is the peripheral(buttons, display, speaker, power),
+and the cartridge holds the MCU(processor, ROM, RAM).
+
+Hardware notes:
+- cyan/red VFD display Futaba DM-16Z + cyan VFD 9-digit panel Futaba 9-ST-11A 1F
+- 1-bit sound, two 7-button control panels attached to each side
+- edge connector to cartridge, MCU on cartridge (see below for each MCU type)
+
+Games released, MCU: (*denotes undumped)
+- Baseball 4 - HD38800
+- *Basketball 3 - ?
+- Football 4 - TMS1670
+- *Pac-Man 2 - HD38800?
+- Pinball - HD38800
+- *Space Invader 2 - HD38800 - is dumped, but need redump
+
+Battleship and Turtles were announced but unreleased.
+A 2nd version of the console was also announced, called Table Top Game Machine,
+but Entex didn't release it. Their next console was the Adventure Vision.
+
+MAME external artwork is recommended for the per-game VFD overlays. For internal
+artwork, remember that the orientation can be rotated in the video options.
+By default, the "home" side is at the bottom. This is the orientation for the
+pack-in game Space Invader 2. But this makes Pinball and Baseball 4 upside-down.
+
+TODO:
+- add softwarelist? impractical with different MCUs, and no CPU inside console
+- add the rest of the games
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/hmcs40/hmcs40.h"
+#include "video/pwm.h"
+#include "sound/spkrdev.h"
+#include "speaker.h"
+
+#include "sag.lh"
+
+
+namespace {
+
+class base_state : public driver_device
+{
+public:
+ base_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_display(*this, "display"),
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
+ { }
+
+ void shared(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+ // devices
+ required_device<pwm_display_device> m_display;
+ required_device<speaker_sound_device> m_speaker;
+ required_ioport_array<6> m_inputs;
+
+ void update_display();
+ u8 read_inputs();
+
+ u16 m_grid = 0;
+ u16 m_plate = 0;
+};
+
+void base_state::machine_start()
+{
+ save_item(NAME(m_grid));
+ save_item(NAME(m_plate));
+}
+
+class hmcs40_state : public base_state
+{
+public:
+ hmcs40_state(const machine_config &mconfig, device_type type, const char *tag) :
+ base_state(mconfig, type, tag),
+ m_maincpu(*this, "maincpu")
+ { }
+
+ void sag(machine_config &config);
+
+private:
+ required_device<hmcs40_cpu_device> m_maincpu;
+
+ DECLARE_WRITE8_MEMBER(write_r);
+ DECLARE_WRITE16_MEMBER(write_d);
+ DECLARE_READ16_MEMBER(read_d);
+};
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+// shared
+
+void base_state::update_display()
+{
+ // grid 0-7 are the 'pixels'
+ m_display->matrix_partial(0, 8, m_grid, m_plate, false);
+
+ // grid 8-13 are 7segs
+ u8 seg = bitswap<7>(m_plate,4,5,6,7,8,9,10);
+ m_display->matrix_partial(8, 6, m_grid >> 8, seg);
+}
+
+u8 base_state::read_inputs()
+{
+ u8 data = 0;
+
+ // grid 1-6 double as input mux
+ for (int i = 0; i < 6; i++)
+ if (BIT(m_grid, i + 1))
+ data |= m_inputs[i]->read();
+
+ return data;
+}
+
+
+// HD38800 type
+
+WRITE8_MEMBER(hmcs40_state::write_r)
+{
+ // R0x-R3x: vfd plate
+ int shift = offset * 4;
+ m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
+ update_display();
+}
+
+WRITE16_MEMBER(hmcs40_state::write_d)
+{
+ // D0: speaker out
+ m_speaker->level_w(data & 1);
+
+ // D1-D12: vfd grid (10 and 11 unused)
+ m_grid = bitswap<14>(data,9,10,0,0,11,12,1,2,3,4,5,6,7,8) & 0x33ff;
+ update_display();
+}
+
+READ16_MEMBER(hmcs40_state::read_d)
+{
+ // D13-D15: multiplexed inputs
+ return read_inputs() << 13;
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( sag ) // P1 = Home (right side), P2 = Visitor (left side)
+ PORT_START("IN.0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button 6")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Button 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Button 7")
+
+ PORT_START("IN.1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button 5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Button 5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button 7")
+
+ PORT_START("IN.2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Button 4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 2")
+ PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x00) // demo
+
+ PORT_START("IN.3")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("P1 Button 3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 1")
+ PORT_CONFNAME( 0x04, 0x00, DEF_STR( Difficulty ) )
+ PORT_CONFSETTING( 0x00, "1" )
+ PORT_CONFSETTING( 0x04, "2" )
+
+ PORT_START("IN.4")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Button 2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 4")
+ PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, EQUALS, 0x01) // 1 player
+
+ PORT_START("IN.5")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("P1 Button 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 3")
+ PORT_CONFNAME( 0x04, 0x04, "Game" )
+ PORT_CONFSETTING( 0x04, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("FAKE") // shared IN.2/IN.4
+ PORT_CONFNAME( 0x03, 0x01, DEF_STR( Players ) )
+ PORT_CONFSETTING( 0x00, "Demo" )
+ PORT_CONFSETTING( 0x01, "1" )
+ PORT_CONFSETTING( 0x02, "2" )
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
+
+void base_state::shared(machine_config &config)
+{
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8+6, 14);
+ m_display->set_segmask(0x3f00, 0x7f);
+ config.set_default_layout(layout_sag);
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+void hmcs40_state::sag(machine_config &config)
+{
+ /* basic machine hardware */
+ HD38800(config, m_maincpu, 450000); // approximation
+ m_maincpu->write_r<0>().set(FUNC(hmcs40_state::write_r));
+ m_maincpu->write_r<1>().set(FUNC(hmcs40_state::write_r));
+ m_maincpu->write_r<2>().set(FUNC(hmcs40_state::write_r));
+ m_maincpu->write_r<3>().set(FUNC(hmcs40_state::write_r));
+ m_maincpu->write_d().set(FUNC(hmcs40_state::write_d));
+ m_maincpu->read_d().set(FUNC(hmcs40_state::read_d));
+
+ shared(config);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( sag_si2 )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+ROM_START( sag_bb4 )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+ROM_START( sag_pb )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
+CONS( 1981, sag_si2, 0, 0, sag, sag, hmcs40_state, empty_init, "Entex", "Select-A-Game Machine: Space Invader 2", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) // suspect bad dump
+CONS( 1981, sag_bb4, 0, 0, sag, sag, hmcs40_state, empty_init, "Entex", "Select-A-Game Machine: Baseball 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
+CONS( 1981, sag_pb, 0, 0, sag, sag, hmcs40_state, empty_init, "Entex", "Select-A-Game Machine: Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
diff --git a/src/mame/layout/sag.lay b/src/mame/layout/sag.lay
index b08be043690..d97ed5eb4d1 100644
--- a/src/mame/layout/sag.lay
+++ b/src/mame/layout/sag.lay
@@ -74,153 +74,154 @@ license:CC0
<!-- main panel -->
- <bezel name="7.1" element="sr"><bounds x="0" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.3" element="sr"><bounds x="2" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.5" element="sr"><bounds x="4" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.7" element="sr"><bounds x="6" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.9" element="sr"><bounds x="8" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.11" element="sr"><bounds x="10" y="0" width="1.7" height="0.9" /></bezel>
- <bezel name="7.13" element="sr"><bounds x="12" y="0" width="1.7" height="0.9" /></bezel>
-
- <bezel name="7.0" element="sc"><bounds x="0" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.2" element="sc"><bounds x="2" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.4" element="sc"><bounds x="4" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.6" element="sc"><bounds x="6" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.8" element="sc"><bounds x="8" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.10" element="sc"><bounds x="10" y="1.15" width="1.7" height="0.9" /></bezel>
- <bezel name="7.12" element="sc"><bounds x="12" y="1.15" width="1.7" height="0.9" /></bezel>
-
- <bezel name="6.1" element="sr"><bounds x="0" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.3" element="sr"><bounds x="2" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.5" element="sr"><bounds x="4" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.7" element="sr"><bounds x="6" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.9" element="sr"><bounds x="8" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.11" element="sr"><bounds x="10" y="3" width="1.7" height="0.9" /></bezel>
- <bezel name="6.13" element="sr"><bounds x="12" y="3" width="1.7" height="0.9" /></bezel>
-
- <bezel name="6.0" element="sc"><bounds x="0" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.2" element="sc"><bounds x="2" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.4" element="sc"><bounds x="4" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.6" element="sc"><bounds x="6" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.8" element="sc"><bounds x="8" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.10" element="sc"><bounds x="10" y="4.15" width="1.7" height="0.9" /></bezel>
- <bezel name="6.12" element="sc"><bounds x="12" y="4.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="5.1" element="sr"><bounds x="0" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.3" element="sr"><bounds x="2" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.5" element="sr"><bounds x="4" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.7" element="sr"><bounds x="6" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.9" element="sr"><bounds x="8" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.11" element="sr"><bounds x="10" y="6" width="1.7" height="0.9" /></bezel>
- <bezel name="5.13" element="sr"><bounds x="12" y="6" width="1.7" height="0.9" /></bezel>
-
- <bezel name="5.0" element="sc"><bounds x="0" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.2" element="sc"><bounds x="2" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.4" element="sc"><bounds x="4" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.6" element="sc"><bounds x="6" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.8" element="sc"><bounds x="8" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.10" element="sc"><bounds x="10" y="7.15" width="1.7" height="0.9" /></bezel>
- <bezel name="5.12" element="sc"><bounds x="12" y="7.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="4.1" element="sr"><bounds x="0" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.3" element="sr"><bounds x="2" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.5" element="sr"><bounds x="4" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.7" element="sr"><bounds x="6" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.9" element="sr"><bounds x="8" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.11" element="sr"><bounds x="10" y="9" width="1.7" height="0.9" /></bezel>
- <bezel name="4.13" element="sr"><bounds x="12" y="9" width="1.7" height="0.9" /></bezel>
-
- <bezel name="4.0" element="sc"><bounds x="0" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.2" element="sc"><bounds x="2" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.4" element="sc"><bounds x="4" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.6" element="sc"><bounds x="6" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.8" element="sc"><bounds x="8" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.10" element="sc"><bounds x="10" y="10.15" width="1.7" height="0.9" /></bezel>
- <bezel name="4.12" element="sc"><bounds x="12" y="10.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="3.1" element="sr"><bounds x="0" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.3" element="sr"><bounds x="2" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.5" element="sr"><bounds x="4" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.7" element="sr"><bounds x="6" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.9" element="sr"><bounds x="8" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.11" element="sr"><bounds x="10" y="12" width="1.7" height="0.9" /></bezel>
- <bezel name="3.13" element="sr"><bounds x="12" y="12" width="1.7" height="0.9" /></bezel>
-
- <bezel name="3.0" element="sc"><bounds x="0" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.2" element="sc"><bounds x="2" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.4" element="sc"><bounds x="4" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.6" element="sc"><bounds x="6" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.8" element="sc"><bounds x="8" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.10" element="sc"><bounds x="10" y="13.15" width="1.7" height="0.9" /></bezel>
- <bezel name="3.12" element="sc"><bounds x="12" y="13.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="2.1" element="sr"><bounds x="0" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.3" element="sr"><bounds x="2" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.5" element="sr"><bounds x="4" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.7" element="sr"><bounds x="6" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.9" element="sr"><bounds x="8" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.11" element="sr"><bounds x="10" y="15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.13" element="sr"><bounds x="12" y="15" width="1.7" height="0.9" /></bezel>
-
- <bezel name="2.0" element="sc"><bounds x="0" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.2" element="sc"><bounds x="2" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.4" element="sc"><bounds x="4" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.6" element="sc"><bounds x="6" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.8" element="sc"><bounds x="8" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.10" element="sc"><bounds x="10" y="16.15" width="1.7" height="0.9" /></bezel>
- <bezel name="2.12" element="sc"><bounds x="12" y="16.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="1.1" element="sr"><bounds x="0" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.3" element="sr"><bounds x="2" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.5" element="sr"><bounds x="4" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.7" element="sr"><bounds x="6" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.9" element="sr"><bounds x="8" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.11" element="sr"><bounds x="10" y="18" width="1.7" height="0.9" /></bezel>
- <bezel name="1.13" element="sr"><bounds x="12" y="18" width="1.7" height="0.9" /></bezel>
-
- <bezel name="1.0" element="sc"><bounds x="0" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.2" element="sc"><bounds x="2" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.4" element="sc"><bounds x="4" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.6" element="sc"><bounds x="6" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.8" element="sc"><bounds x="8" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.10" element="sc"><bounds x="10" y="19.15" width="1.7" height="0.9" /></bezel>
- <bezel name="1.12" element="sc"><bounds x="12" y="19.15" width="1.7" height="0.9" /></bezel>
-
-
- <bezel name="0.1" element="sr"><bounds x="0" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.3" element="sr"><bounds x="2" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.5" element="sr"><bounds x="4" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.7" element="sr"><bounds x="6" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.9" element="sr"><bounds x="8" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.11" element="sr"><bounds x="10" y="21" width="1.7" height="0.9" /></bezel>
- <bezel name="0.13" element="sr"><bounds x="12" y="21" width="1.7" height="0.9" /></bezel>
-
- <bezel name="0.0" element="sc"><bounds x="0" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.2" element="sc"><bounds x="2" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.4" element="sc"><bounds x="4" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.6" element="sc"><bounds x="6" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.8" element="sc"><bounds x="8" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.10" element="sc"><bounds x="10" y="22.15" width="1.7" height="0.9" /></bezel>
- <bezel name="0.12" element="sc"><bounds x="12" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.1" element="sr"><bounds x="0" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.3" element="sr"><bounds x="2" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.5" element="sr"><bounds x="4" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.7" element="sr"><bounds x="6" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.9" element="sr"><bounds x="8" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.11" element="sr"><bounds x="10" y="0" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.13" element="sr"><bounds x="12" y="0" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="0.0" element="sc"><bounds x="0" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.2" element="sc"><bounds x="2" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.4" element="sc"><bounds x="4" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.6" element="sc"><bounds x="6" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.8" element="sc"><bounds x="8" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.10" element="sc"><bounds x="10" y="1.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="0.12" element="sc"><bounds x="12" y="1.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="1.1" element="sr"><bounds x="0" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.3" element="sr"><bounds x="2" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.5" element="sr"><bounds x="4" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.7" element="sr"><bounds x="6" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.9" element="sr"><bounds x="8" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.11" element="sr"><bounds x="10" y="3" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.13" element="sr"><bounds x="12" y="3" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="1.0" element="sc"><bounds x="0" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.2" element="sc"><bounds x="2" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.4" element="sc"><bounds x="4" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.6" element="sc"><bounds x="6" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.8" element="sc"><bounds x="8" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.10" element="sc"><bounds x="10" y="4.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="1.12" element="sc"><bounds x="12" y="4.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="2.1" element="sr"><bounds x="0" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.3" element="sr"><bounds x="2" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.5" element="sr"><bounds x="4" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.7" element="sr"><bounds x="6" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.9" element="sr"><bounds x="8" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.11" element="sr"><bounds x="10" y="6" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.13" element="sr"><bounds x="12" y="6" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="2.0" element="sc"><bounds x="0" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.2" element="sc"><bounds x="2" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.4" element="sc"><bounds x="4" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.6" element="sc"><bounds x="6" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.8" element="sc"><bounds x="8" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.10" element="sc"><bounds x="10" y="7.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="2.12" element="sc"><bounds x="12" y="7.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="3.1" element="sr"><bounds x="0" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.3" element="sr"><bounds x="2" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.5" element="sr"><bounds x="4" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.7" element="sr"><bounds x="6" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.9" element="sr"><bounds x="8" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.11" element="sr"><bounds x="10" y="9" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.13" element="sr"><bounds x="12" y="9" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="3.0" element="sc"><bounds x="0" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.2" element="sc"><bounds x="2" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.4" element="sc"><bounds x="4" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.6" element="sc"><bounds x="6" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.8" element="sc"><bounds x="8" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.10" element="sc"><bounds x="10" y="10.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="3.12" element="sc"><bounds x="12" y="10.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="4.1" element="sr"><bounds x="0" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.3" element="sr"><bounds x="2" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.5" element="sr"><bounds x="4" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.7" element="sr"><bounds x="6" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.9" element="sr"><bounds x="8" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.11" element="sr"><bounds x="10" y="12" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.13" element="sr"><bounds x="12" y="12" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="4.0" element="sc"><bounds x="0" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.2" element="sc"><bounds x="2" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.4" element="sc"><bounds x="4" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.6" element="sc"><bounds x="6" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.8" element="sc"><bounds x="8" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.10" element="sc"><bounds x="10" y="13.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="4.12" element="sc"><bounds x="12" y="13.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="5.1" element="sr"><bounds x="0" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.3" element="sr"><bounds x="2" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.5" element="sr"><bounds x="4" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.7" element="sr"><bounds x="6" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.9" element="sr"><bounds x="8" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.11" element="sr"><bounds x="10" y="15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.13" element="sr"><bounds x="12" y="15" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="5.0" element="sc"><bounds x="0" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.2" element="sc"><bounds x="2" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.4" element="sc"><bounds x="4" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.6" element="sc"><bounds x="6" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.8" element="sc"><bounds x="8" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.10" element="sc"><bounds x="10" y="16.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="5.12" element="sc"><bounds x="12" y="16.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="6.1" element="sr"><bounds x="0" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.3" element="sr"><bounds x="2" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.5" element="sr"><bounds x="4" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.7" element="sr"><bounds x="6" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.9" element="sr"><bounds x="8" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.11" element="sr"><bounds x="10" y="18" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.13" element="sr"><bounds x="12" y="18" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="6.0" element="sc"><bounds x="0" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.2" element="sc"><bounds x="2" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.4" element="sc"><bounds x="4" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.6" element="sc"><bounds x="6" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.8" element="sc"><bounds x="8" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.10" element="sc"><bounds x="10" y="19.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="6.12" element="sc"><bounds x="12" y="19.15" width="1.7" height="0.9" /></bezel>
+
+
+ <bezel name="7.1" element="sr"><bounds x="0" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.3" element="sr"><bounds x="2" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.5" element="sr"><bounds x="4" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.7" element="sr"><bounds x="6" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.9" element="sr"><bounds x="8" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.11" element="sr"><bounds x="10" y="21" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.13" element="sr"><bounds x="12" y="21" width="1.7" height="0.9" /></bezel>
+
+ <bezel name="7.0" element="sc"><bounds x="0" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.2" element="sc"><bounds x="2" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.4" element="sc"><bounds x="4" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.6" element="sc"><bounds x="6" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.8" element="sc"><bounds x="8" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.10" element="sc"><bounds x="10" y="22.15" width="1.7" height="0.9" /></bezel>
+ <bezel name="7.12" element="sc"><bounds x="12" y="22.15" width="1.7" height="0.9" /></bezel>
<!-- 7seg panel -->
<bezel element="digit"><bounds x="20" y="2" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit11" element="digit"><bounds x="20" y="4" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit10" element="digit"><bounds x="20" y="6" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit8" element="digit"><bounds x="20" y="4" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit9" element="digit"><bounds x="20" y="6" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
<bezel element="digit"><bounds x="20" y="8" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit99" element="digit"><bounds x="20" y="10" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit99" element="digit"><bounds x="20" y="12" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit10" element="digit"><bounds x="20" y="10" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit11" element="digit"><bounds x="20" y="12" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
<bezel element="digit"><bounds x="20" y="14" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit9" element="digit"><bounds x="20" y="16" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
- <bezel name="digit8" element="digit"><bounds x="20" y="18" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit12" element="digit"><bounds x="20" y="16" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
+ <bezel name="digit13" element="digit"><bounds x="20" y="18" width="2.5" height="1.5" /><orientation rotate="90" /></bezel>
</view>
</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 032df582726..8a86535282b 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -15726,9 +15726,6 @@ mwcbaseb // Mattel
packmon // Bandai
pairmtch // Bandai
pbqbert // Parker Brothers
-sag_si2 // Entex
-sag_bb4 // Entex
-sag_pb // Entex
tmtron // Tomy
vinvader // VTech
zackman // Bandai
@@ -35038,6 +35035,11 @@ sacstate //
safarir // (c) 1980 Shin Nihon Kikaku (SNK) + Taito license
safarirj // (c) 1979 Shin Nihon Kikaku (SNK)
+@source:sag.cpp
+sag_si2
+sag_bb4
+sag_pb
+
@source:sage2.cpp
sage2 //
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index cbc8080aba6..cc70e1110d4 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -776,6 +776,7 @@ rx78.cpp
rz1.cpp
rzone.cpp
sacstate.cpp
+sag.cpp
sage2.cpp
saitek_chesstrv.cpp
saitek_corona.cpp