mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
New working machine added
--------------- Select-A-Game: Baseball 4 Select-A-Game: Pinball New NOT_WORKING machine added -------------- Select-A-Game: Space Invader 2
This commit is contained in:
parent
bc5875df84
commit
5934df9a12
@ -19,9 +19,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 (have dump)
|
||||
*37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4 (have dump)
|
||||
*38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball (have dump)
|
||||
@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
|
||||
*41 HD38800A 1982, Gakken Puck Monster
|
||||
*51 HD38800A 1981, Actronics(Hanzawa) Twinvader (larger white version)
|
||||
@70 HD38800A 1982, Coleco Galaxian
|
||||
@ -147,6 +147,7 @@ public:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void set_display_segmask(UINT32 digits, UINT32 mask);
|
||||
void display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update = true);
|
||||
|
||||
protected:
|
||||
@ -276,6 +277,17 @@ void hh_hmcs40_state::set_display_size(int maxx, int maxy)
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void hh_hmcs40_state::set_display_segmask(UINT32 digits, UINT32 mask)
|
||||
{
|
||||
// set a segment mask per selected digit, but leave unselected ones alone
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
{
|
||||
if (digits & 1)
|
||||
m_display_segmask[i] = mask;
|
||||
digits >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
@ -2503,6 +2515,136 @@ MACHINE_CONFIG_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 prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(plate_w);
|
||||
DECLARE_WRITE16_MEMBER(grid_w);
|
||||
DECLARE_READ16_MEMBER(input_r);
|
||||
};
|
||||
|
||||
// handlers
|
||||
|
||||
void sag_state::prepare_display()
|
||||
{
|
||||
// grid 0-7 are the 'pixels'
|
||||
for (int y = 0; y < 8; y++)
|
||||
m_display_state[y] = (m_grid >> y & 1) ? m_plate : 0;
|
||||
|
||||
// grid 8-11 are 7segs
|
||||
set_display_segmask(0xf00, 0x7f);
|
||||
UINT8 seg = BITSWAP8(m_plate,3,4,5,6,7,8,9,10);
|
||||
for (int y = 8; y < 12; y++)
|
||||
m_display_state[y] = (m_grid >> y & 1) ? seg : 0;
|
||||
|
||||
set_display_size(14, 12);
|
||||
display_update();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sag_state::plate_w)
|
||||
{
|
||||
// R0x-R3x: vfd matrix plate
|
||||
int shift = offset * 4;
|
||||
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
|
||||
prepare_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 matrix grid
|
||||
m_grid = data >> 1 & 0xfff;
|
||||
prepare_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_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
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, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
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_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
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, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
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")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MACHINE_CONFIG_START( sag, sag_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", HD38800, 450000) // approximation
|
||||
MCFG_HMCS40_WRITE_R_CB(0, WRITE8(sag_state, plate_w))
|
||||
MCFG_HMCS40_WRITE_R_CB(1, WRITE8(sag_state, plate_w))
|
||||
MCFG_HMCS40_WRITE_R_CB(2, WRITE8(sag_state, plate_w))
|
||||
MCFG_HMCS40_WRITE_R_CB(3, WRITE8(sag_state, plate_w))
|
||||
MCFG_HMCS40_WRITE_D_CB(WRITE16(sag_state, grid_w))
|
||||
MCFG_HMCS40_READ_D_CB(READ16(sag_state, input_r))
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_hh_hmcs40_test)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Entex Galaxian 2 (manufactured in Japan)
|
||||
@ -4145,6 +4287,27 @@ ROM_START( cmspacmn )
|
||||
ROM_END
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
ROM_START( egalaxn2 )
|
||||
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "hd38820a13", 0x0000, 0x1000, CRC(112b721b) SHA1(4a185bc57ea03fe64f61f7db4da37b16eeb0cb54) )
|
||||
@ -4304,6 +4467,9 @@ CONS( 1981, cpacman, 0, 0, cpacman, cpacman, driver_device, 0, "Colec
|
||||
CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, driver_device, 0, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, driver_device, 0, "Coleco", "Ms. Pac-Man (Coleco)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1981, sag_si2, 0, 0, sag, sag, driver_device, 0, "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, driver_device, 0, "Entex", "Select-A-Game: Baseball 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
|
||||
CONS( 1981, sag_pb, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
|
||||
CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, driver_device, 0, "Entex", "Galaxian 2 (Entex)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1981, epacman2, 0, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, cyan Pacman)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1981, epacman2r, epacman2, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, red Pacman)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -14042,6 +14042,9 @@ mwcbaseb // Mattel
|
||||
packmon // Bandai
|
||||
pairmtch // Bandai
|
||||
pbqbert // Parker Brothers
|
||||
sag_si2 // Entex
|
||||
sag_bb4 // Entex
|
||||
sag_pb // Entex
|
||||
tmtron // Tomy
|
||||
vinvader // VTech
|
||||
zackman // Bandai
|
||||
|
Loading…
Reference in New Issue
Block a user