From 0684d146b6778f84cb97662a0f431427a3890e86 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 31 Mar 2020 19:02:45 +0200 Subject: hh_hmcs40: move select a game to its own driver (nw) --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/eva.cpp | 88 +++++++------ src/mame/drivers/hh_hmcs40.cpp | 165 +----------------------- src/mame/drivers/hh_tms1k.cpp | 3 +- src/mame/drivers/sag.cpp | 272 +++++++++++++++++++++++++++++++++++++++ src/mame/layout/sag.lay | 279 +++++++++++++++++++++-------------------- src/mame/mame.lst | 8 +- src/mame/mess.flt | 1 + 8 files changed, 467 insertions(+), 350 deletions(-) create mode 100644 src/mame/drivers/sag.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 94cccb82f30..91c38a65b37 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2250,6 +2250,7 @@ files { MAME_DIR .. "src/mame/includes/advision.h", MAME_DIR .. "src/mame/machine/advision.cpp", MAME_DIR .. "src/mame/video/advision.cpp", + MAME_DIR .. "src/mame/drivers/sag.cpp", } createMESSProjects(_target, _subtarget, "epoch") 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 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 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" @@ -2431,161 +2430,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) @@ -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 m_display; + required_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 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + 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 -- cgit v1.2.3