(MESS)New games added or promoted to working

-----------------
Coleco Galaxian [hap, Kevin Horton, Olivier Galibert]
Bambino Soccer [hap, Kevin Horton]
Bambino Safari [hap, Kevin Horton]
Epoch Invader From Space [hap, Kevin Horton]
Epoch Football [hap, Kevin Horton]
Epoch Galaxy II [hap, Kevin Horton]
Tomy Cosmic Combat [hap, Kevin Horton]
Gakken Heiankyo Alien [hap, Kevin Horton, Rik]
Gakken Dig Dug [hap, Kevin Horton, Rik]


Added as Not-working:
--------------------
Gakken Crazy Kong [hap, Kevin Horton, Rik]
This commit is contained in:
hap 2015-04-20 23:50:27 +02:00
parent 500a31ad57
commit c61b2d707d
5 changed files with 1233 additions and 85 deletions

View File

@ -10,20 +10,23 @@
serial device etc.
----------------------------------------------------------------
@07 HD38750A 1979, Bambino Knock-Em Out Boxing (ET-06B)
@08 HD38750A 1979, Bambino Basketball (ET-05)
@08 HD38750A 1979, Bambino Dribble Away Basketball (ET-05)
@45 HD38750A 1981, VTech Invaders
*58 HD38750A 1982, Ludotronic(Hanzawa) Grand Prix Turbo
*62 HD38750A 1982, Actronics(Hanzawa) Pack'n Maze
*04 HD38800A 1980, Gakken Heiankyo Alien
@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)
*41 HD38800A 1982, Gakken Puck Monster
*51 HD38800A 1981, Actronics(Hanzawa) Twinvader
@70 HD38800A 1982, Coleco Galaxian
@73 HD38800A 1982, Bandai(Mattel) Star Hawk
@77 HD38800A 1982, Bandai Frisky Tom
@88 HD38800A 1984, Tomy Tron (THN-02)
@01 HD38800B 1982, Gakken Crazy Kong
@23 HD38800B 1982, Tomy Kingman (THF-01II)
*24 HD38800B 1982, Actronics(Hanzawa) Wanted G-Man
*29 HD38800B 1984, Tomy Portable 6000 Bombman
@ -41,11 +44,24 @@
@45 HD38820A 1982, Coleco Donkey Kong
@49 HD38820A 1983, Bandai Zackman
@61 HD38820A 1983, Coleco Ms. Pac-Man
@69 HD38820A 1983, Gakken Dig Dug
@70 HD38820A 1983, Parker Brothers Q*Bert
@88 HD38820A 1984, Tomy Tron (THN-02)
(* denotes not yet emulated by MESS, @ denotes it's in this driver)
TODO:
- cdkong discrete sound (simple volume decay, simulated for now)
- cgalaxn discrete sound (alien attacking sound effect)
- vinvader locks up at boot
- gckong random lockups (tap the jump button repeatedly): mcu stack overflow,
works ok if stack levels is increased, 38800 B rev. has more stack levels?
- epacman booting the game in demo mode, pacman should go straight to the
upper-left power pill: mcu cycle/interrupt timing related
- Though very uncommon when compared to games with LED/lamp display,
some games may manipulate VFD plate brightness by strobing it longer,
eg. cgalaxn when the player ship explodes.
***************************************************************************/
#include "emu.h"
@ -291,7 +307,7 @@ INPUT_CHANGED_MEMBER(hh_hmcs40_state::single_interrupt_line)
/***************************************************************************
Bambino Basketball - Dribble Away (manufactured in Japan)
Bambino Dribble Away Basketball (manufactured in Japan)
* PCBs are labeled Emix Corp. ET-05
* Hitachi HD38750A08 MCU
* green VFD display Emix-106, with bezel overlay
@ -501,14 +517,14 @@ static INPUT_PORTS_START( bmboxing )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.4") // port D
PORT_CONFNAME( 0x01, 0x00, "Players" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x01, "2" )
PORT_CONFNAME( 0x02, 0x00, "Skill Level" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x02, "2" )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_CONFNAME( 0x0001, 0x0000, "Players" )
PORT_CONFSETTING( 0x0000, "1" )
PORT_CONFSETTING( 0x0001, "2" )
PORT_CONFNAME( 0x0002, 0x0000, "Skill Level" )
PORT_CONFSETTING( 0x0000, "1" )
PORT_CONFSETTING( 0x0002, "2" )
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0xfff8, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( bmboxing, bmboxing_state )
@ -722,7 +738,7 @@ WRITE16_MEMBER(packmon_state::grid_w)
READ16_MEMBER(packmon_state::input_r)
{
// D5: multiplexed inputs
return read_inputs(5);
return read_inputs(5) & 0x20;
}
@ -773,10 +789,10 @@ MACHINE_CONFIG_END
/***************************************************************************
Bandai(Mattel) Star Hawk (manufactured in Japan)
Bandai/Mattel Star Hawk (manufactured in Japan)
* PCBs are labeled Kaken, PT-317B
* Hitachi HD38800A73 MCU
* cyan/red VFD display Futaba DM-41ZK, with partial color overlay
* cyan/red VFD display Futaba DM-41ZK, with partial color overlay + bezel
Kaken was a subsidiary of Bandai. The original Japanese release is unknown,
was it canceled and only released in the USA?
@ -908,7 +924,7 @@ MACHINE_CONFIG_END
/***************************************************************************
Bandai Zackman "The Pit, FL Exploration of Space" (manufactured in Japan)
* Hitachi HD38820A49 MCU
* Hitachi QFP HD38820A49 MCU
* cyan/red/yellow VFD display Futaba DM-53Z 3E, with color overlay
NOTE!: MESS external artwork is recommended
@ -1057,7 +1073,7 @@ WRITE8_MEMBER(alnattck_state::plate_w)
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// update display
UINT32 plate = BITSWAP16(m_plate,11,9,8,10,7,2,0,1,3,4,5,6,12,13,14,15) | (m_plate & 0xf0000);
UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,18,17,16,11,9,8,10,7,2,0,1,3,4,5,6,12,13,14,15);
display_matrix(20, 10, plate, m_grid);
}
@ -1079,14 +1095,14 @@ WRITE16_MEMBER(alnattck_state::grid_w)
READ16_MEMBER(alnattck_state::input_r)
{
// D5: multiplexed inputs
return read_inputs(7);
return read_inputs(7) & 0x20;
}
// config
static INPUT_PORTS_START( alnattck )
PORT_START("IN.0") // D5 D7
PORT_START("IN.0") // D7 line D5
PORT_CONFNAME( 0x20, 0x00, "Skill Level" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x20, "2" )
@ -1104,10 +1120,10 @@ static INPUT_PORTS_START( alnattck )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_START("IN.5") // D12 line D5
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Move")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Move")
PORT_START("IN.6") // D13 line D5
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Fire")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Fire")
INPUT_PORTS_END
static MACHINE_CONFIG_START( alnattck, alnattck_state )
@ -1140,7 +1156,7 @@ MACHINE_CONFIG_END
Coleco Donkey Kong (manufactured in Taiwan)
* PCB label Coleco Rev C 75790 DK
* Hitachi HD38820A45 MCU
* Hitachi QFP HD38820A45 MCU
* cyan/red VFD display Futaba DM-47ZK 2K, with color overlay
NOTE!: MESS external artwork is recommended
@ -1213,15 +1229,15 @@ WRITE16_MEMBER(cdkong_state::grid_w)
// config
static INPUT_PORTS_START( cdkong )
PORT_START("IN.0") // port D
PORT_START("IN.0") // INT0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0)
PORT_START("IN.1") // port D
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x7ff8, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_START("IN.1") // INT0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0)
PORT_BIT( 0x7ff8, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@ -1246,7 +1262,7 @@ static MACHINE_CONFIG_START( cdkong, cdkong_state )
MCFG_HMCS40_WRITE_R_CB(5, WRITE8(cdkong_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(6, WRITE8(cdkong_state, plate_w))
MCFG_HMCS40_WRITE_D_CB(WRITE16(cdkong_state, grid_w))
MCFG_HMCS40_READ_D_CB(IOPORT("IN.0"))
MCFG_HMCS40_READ_D_CB(IOPORT("IN.1"))
MCFG_TIMER_DRIVER_ADD_PERIODIC("speaker_decay", cdkong_state, speaker_decay_sim, attotime::from_msec(CDKONG_SPEAKER_DECAY))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
@ -1289,9 +1305,11 @@ public:
{ }
void prepare_display();
DECLARE_WRITE16_MEMBER(plate_w);
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE16_MEMBER(plate_w);
DECLARE_READ8_MEMBER(input_r);
DECLARE_INPUT_CHANGED_MEMBER(player_switch);
};
// handlers
@ -1299,23 +1317,11 @@ public:
void cgalaxn_state::prepare_display()
{
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,1,2,0,11,10,9,8,7,6,5,4,3);
UINT16 plate = BITSWAP16(m_plate,15,14,5,4,3,2,1,0,7,11,12,9,8,10,6,13);
display_matrix(14, 12, plate, grid);
UINT16 plate = BITSWAP16(m_plate,15,14,6,5,4,3,2,1,7,8,9,10,11,0,12,13);
display_matrix(15, 12, plate, grid);
}
WRITE8_MEMBER(cgalaxn_state::grid_w)
{
// D0: speaker out
m_speaker->level_w(data & 1);
// D1: speaker on?
// D2-D15: vfd matrix plate
m_plate = data >> 2 & 0x3fff;
prepare_display();
}
WRITE16_MEMBER(cgalaxn_state::plate_w)
{
// R10,R11: input mux
if (offset == HMCS40_PORT_R1X)
@ -1327,6 +1333,18 @@ WRITE16_MEMBER(cgalaxn_state::plate_w)
prepare_display();
}
WRITE16_MEMBER(cgalaxn_state::plate_w)
{
// D0: speaker out
m_speaker->level_w(data & 1);
// D1: start alien attack whine sound effect (edge triggered)
// D2-D15: vfd matrix plate
m_plate = (m_plate & 0x4000) | (data >> 2 & 0x3fff);
prepare_display();
}
READ8_MEMBER(cgalaxn_state::input_r)
{
// R0x: multiplexed inputs
@ -1344,7 +1362,7 @@ static INPUT_PORTS_START( cgalaxn )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_START("IN.1") // R11 port R0x
PORT_CONFNAME( 0x01, 0x01, "Players" )
PORT_CONFNAME( 0x01, 0x01, "Players" ) PORT_CHANGED_MEMBER(DEVICE_SELF, cgalaxn_state, player_switch, NULL)
PORT_CONFSETTING( 0x01, "1" )
PORT_CONFSETTING( 0x00, "2" )
PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
@ -1356,6 +1374,13 @@ static INPUT_PORTS_START( cgalaxn )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)1)
INPUT_PORTS_END
INPUT_CHANGED_MEMBER(cgalaxn_state::player_switch)
{
// 2-player switch directly enables plate 14
m_plate = (m_plate & 0x3fff) | (newval ? 0 : 0x4000);
}
static MACHINE_CONFIG_START( cgalaxn, cgalaxn_state )
/* basic machine hardware */
@ -1385,7 +1410,7 @@ MACHINE_CONFIG_END
Coleco Pac-Man (manufactured in Taiwan)
* PCB label Coleco 75690
* Hitachi HD38820A28/29 MCU
* Hitachi QFP HD38820A28/29 MCU
* cyan/red VFD display Futaba DM-34Z 2A, with color overlay
known releases:
@ -1506,7 +1531,7 @@ MACHINE_CONFIG_END
Coleco Ms. Pac-Man (manufactured in Taiwan)
* PCB label Coleco 911171
* Hitachi HD38820A61 MCU
* Hitachi QFP HD38820A61 MCU
* cyan/red VFD display Futaba DM-60Z 3I, with color overlay
Select game mode on start:
@ -1557,7 +1582,7 @@ WRITE16_MEMBER(cmspacmn_state::grid_w)
// D5-D15: vfd matrix grid
m_grid = data >> 5 & 0x7ff;
// D0,D1: plate 11+17,6+22 (update display there)
// D0,D1: more plates (update display there)
plate_w(space, 6 + HMCS40_PORT_R1X, data & 3);
}
@ -1621,7 +1646,8 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Galaxian 2 (manufactured in Japan)
* Hitachi HD38820A13 MCU
* PCB labels ENTEX GALAXIAN PB-118/116/097 80-210137/135/114
* Hitachi QFP HD38820A13 MCU
* cyan/red/green VFD display Futaba DM-20
NOTE!: MESS external artwork is recommended
@ -1688,7 +1714,7 @@ static INPUT_PORTS_START( egalaxn2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY // "
PORT_START("IN.1") // D2 port R0x
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY // separate directional buttons, hence 16way
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY // "
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY // "
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY // "
@ -1742,8 +1768,9 @@ MACHINE_CONFIG_END
/***************************************************************************
Entex Pac Man 2 (manufactured in Japan)
* Hitachi HD38820A23 MCU
* cyan/red VFD display Futaba DM-28Z 1G
* PCB labels ENTEX PAC-MAN PB-093/094 80-210149/50/51
* Hitachi QFP HD38820A23 MCU
* cyan/red VFD display Futaba DM-28Z 1G(cyan Pac-Man) or DM-28 1K(orange Pac-Man)
2 VFD revisions are known, the difference is Pac-Man's color: cyan or red.
@ -1821,10 +1848,374 @@ MACHINE_CONFIG_END
/***************************************************************************
Gakken Heiankyo Alien (manufactured in Japan)
* Hitachi HD38800A04 MCU
* cyan/red VFD display Futaba DM-11Z 1H
known releases:
- Japan: Heiankyo Alien
- USA: Earth Invaders, published by CGL
NOTE!: MESS external artwork is recommended
***************************************************************************/
class ghalien_state : public hh_hmcs40_state
{
public:
ghalien_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_hmcs40_state(mconfig, type, tag)
{ }
DECLARE_WRITE8_MEMBER(plate_w);
DECLARE_WRITE16_MEMBER(grid_w);
DECLARE_READ16_MEMBER(input_r);
};
// handlers
WRITE8_MEMBER(ghalien_state::plate_w)
{
// R0x-R3x(,D10-D13): vfd matrix plate
int shift = offset * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// update display
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
UINT32 plate = BITSWAP24(m_plate,23,22,21,20,14,12,10,8,9,13,15,2,0,1,3,11,7,5,4,6,19,17,16,18);
display_matrix(20, 10, plate, grid);
}
WRITE16_MEMBER(ghalien_state::grid_w)
{
// D14: speaker out
m_speaker->level_w(data >> 14 & 1);
// D0-D6: input mux
m_inp_mux = data & 0x7f;
// D0-D9: vfd matrix grid
m_grid = data & 0x3ff;
// D10-D13: more plates (update display there)
plate_w(space, 4, data >> 10 & 0xf);
}
READ16_MEMBER(ghalien_state::input_r)
{
// D15: multiplexed inputs
return read_inputs(7) & 0x8000;
}
// config
static INPUT_PORTS_START( ghalien )
PORT_START("IN.0") // D0 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY // separate directional buttons, hence 16way
PORT_START("IN.1") // D1 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY // "
PORT_START("IN.2") // D2 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // "
PORT_START("IN.3") // D3 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY // "
PORT_START("IN.4") // D4 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Dig")
PORT_START("IN.5") // D5 line D15
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Bury")
PORT_START("IN.6") // D6 line D15
PORT_CONFNAME( 0x8000, 0x0000, DEF_STR( Difficulty ) )
PORT_CONFSETTING( 0x0000, "Amateur" )
PORT_CONFSETTING( 0x8000, "Professional" )
INPUT_PORTS_END
static MACHINE_CONFIG_START( ghalien, ghalien_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", HD38800, 400000) // approximation
MCFG_HMCS40_WRITE_R_CB(0, WRITE8(ghalien_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(1, WRITE8(ghalien_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(2, WRITE8(ghalien_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(3, WRITE8(ghalien_state, plate_w))
MCFG_HMCS40_WRITE_D_CB(WRITE16(ghalien_state, grid_w))
MCFG_HMCS40_READ_D_CB(READ16(ghalien_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)
/* no video! */
/* 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
/***************************************************************************
Gakken Crazy Kong (manufactured in Japan)
* PCB label ZENY 5603601
* Hitachi HD38800B01 MCU
* cyan/red/blue VFD display Futaba DM-54Z 2H, with bezel overlay
known releases:
- Japan: Crazy Kong
- USA: Super Kong, published by CGL
NOTE!: MESS external artwork is recommended
***************************************************************************/
class gckong_state : public hh_hmcs40_state
{
public:
gckong_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_hmcs40_state(mconfig, type, tag)
{ }
DECLARE_WRITE8_MEMBER(plate_w);
DECLARE_WRITE16_MEMBER(grid_w);
void update_int1();
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
};
// handlers
WRITE8_MEMBER(gckong_state::plate_w)
{
// R0x-R3x(,D0,D1): vfd matrix plate
int shift = offset * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// update display
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,0,1,2,3,4,5,6,7,8,9,10);
UINT32 plate = BITSWAP32(m_plate,31,30,29,28,27,26,25,6,7,8,12,13,14,15,16,17,18,17,16,12,11,10,9,8,7,6,5,4,3,2,1,0);
display_matrix(32, 11, plate, grid);
}
WRITE16_MEMBER(gckong_state::grid_w)
{
// D2: speaker out
m_speaker->level_w(data >> 2 & 1);
// D5-D8: input mux
UINT8 inp_mux = data >> 5 & 0xf;
if (inp_mux != m_inp_mux)
{
m_inp_mux = inp_mux;
update_int1();
}
// D5-D15: vfd matrix grid
m_grid = data >> 5 & 0x7ff;
// D0,D1: more plates (update display there)
plate_w(space, 4, data & 3);
}
void gckong_state::update_int1()
{
// INT1 on multiplexed inputs
set_interrupt(1, read_inputs(4));
}
// config
static INPUT_PORTS_START( gckong )
PORT_START("IN.0") // D5 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gckong_state, input_changed, NULL)
PORT_START("IN.1") // D6 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, gckong_state, input_changed, NULL)
PORT_START("IN.2") // D7 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gckong_state, input_changed, NULL)
PORT_START("IN.3") // D8 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, gckong_state, input_changed, NULL)
PORT_START("IN.4") // INT0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0)
PORT_START("IN.5") // port D
PORT_CONFNAME( 0x0010, 0x0000, "Skill Level" )
PORT_CONFSETTING( 0x0000, "A" )
PORT_CONFSETTING( 0x0010, "B" )
PORT_BIT( 0xffef, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_CHANGED_MEMBER(gckong_state::input_changed)
{
update_int1();
}
static MACHINE_CONFIG_START( gckong, gckong_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", HD38800, 400000) // approximation
MCFG_HMCS40_WRITE_R_CB(0, WRITE8(gckong_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(1, WRITE8(gckong_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(2, WRITE8(gckong_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(3, WRITE8(gckong_state, plate_w))
MCFG_HMCS40_WRITE_D_CB(WRITE16(gckong_state, grid_w))
MCFG_HMCS40_READ_D_CB(IOPORT("IN.5"))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_hmcs40_test)
/* no video! */
/* 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
/***************************************************************************
Gakken Dig Dug (manufactured in Japan)
* PCB label Gakken DIG-DAG KS-004283(A/B)
* Hitachi QFP HD38820A69 MCU
* cyan/red/green VFD display Futaba DM-69Z 3F, with color overlay
NOTE!: MESS external artwork is recommended
***************************************************************************/
class gdigdug_state : public hh_hmcs40_state
{
public:
gdigdug_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_hmcs40_state(mconfig, type, tag)
{ }
DECLARE_WRITE8_MEMBER(plate_w);
DECLARE_WRITE16_MEMBER(grid_w);
void update_int1();
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
};
// handlers
WRITE8_MEMBER(gdigdug_state::plate_w)
{
// R0x-R6x(,D0-D3): vfd matrix plate
int shift = offset * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// update display
UINT32 plate = BITSWAP32(m_plate,30,31,0,1,2,3,4,5,6,7,20,21,22,27,26,25,28,29,24,23,15,14,13,12,8,9,10,11,19,18,17,16);
display_matrix(32, 9, plate, m_grid);
}
WRITE16_MEMBER(gdigdug_state::grid_w)
{
// D6: speaker out
m_speaker->level_w(data >> 6 & 1);
// D11-D15: input mux
UINT8 inp_mux = data >> 11 & 0x1f;
if (inp_mux != m_inp_mux)
{
m_inp_mux = inp_mux;
update_int1();
}
// D7-D15: vfd matrix grid
m_grid = data >> 7 & 0x1ff;
// D0-D3: more plates (update display there)
plate_w(space, 7, data & 0xf);
}
void gdigdug_state::update_int1()
{
// INT1 on multiplexed inputs
set_interrupt(1, read_inputs(5));
}
// config
static INPUT_PORTS_START( gdigdug )
PORT_START("IN.0") // D11 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, NULL)
PORT_START("IN.1") // D12 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, NULL)
PORT_START("IN.2") // D13 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, NULL)
PORT_START("IN.3") // D14 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, NULL)
PORT_START("IN.4") // D15 INT1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, gdigdug_state, input_changed, NULL)
PORT_START("IN.5") // INT0
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_hmcs40_state, single_interrupt_line, (void *)0)
INPUT_PORTS_END
INPUT_CHANGED_MEMBER(gdigdug_state::input_changed)
{
update_int1();
}
static MACHINE_CONFIG_START( gdigdug, gdigdug_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", HD38820, 400000) // approximation
MCFG_HMCS40_WRITE_R_CB(0, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(1, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(2, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(3, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(4, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(5, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_R_CB(6, WRITE8(gdigdug_state, plate_w))
MCFG_HMCS40_WRITE_D_CB(WRITE16(gdigdug_state, grid_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_hmcs40_test)
/* no video! */
/* 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
/***************************************************************************
Parker Brothers Q*Bert
* Hitachi HD38820A70 MCU
* PCB label 13662 REV-4
* Hitachi QFP HD38820A70 MCU
* cyan/red/green/darkgreen VFD display Itron CP5137
NOTE!: MESS external artwork is recommended
@ -2211,11 +2602,11 @@ static INPUT_PORTS_START( vinvader )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // port D
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_CONFNAME( 0x08, 0x00, "Skill Level")
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x08, "2" )
PORT_BIT( 0x05, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_CONFNAME( 0x0002, 0x0000, "Skill Level")
PORT_CONFSETTING( 0x0000, "1" )
PORT_CONFSETTING( 0x0002, "2" )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0xfff5, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( vinvader, vinvader_state )
@ -2278,6 +2669,13 @@ ROM_START( packmon )
ROM_END
ROM_START( msthawk )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38800a73", 0x0000, 0x1000, CRC(a4f9a523) SHA1(465f06b02e2e7d2277218fd447830725790a816c) )
ROM_CONTINUE( 0x1e80, 0x0100 )
ROM_END
ROM_START( zackman )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38820a49", 0x0000, 0x1000, CRC(b97f5ef6) SHA1(7fe20e8107361caf9ea657e504be1f8b10b8b03f) )
@ -2340,9 +2738,23 @@ ROM_START( epacman2 )
ROM_END
ROM_START( msthawk )
ROM_START( ghalien )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38800a73", 0x0000, 0x1000, CRC(a4f9a523) SHA1(465f06b02e2e7d2277218fd447830725790a816c) )
ROM_LOAD( "hd38800a04", 0x0000, 0x1000, CRC(019c3328) SHA1(9f1029c5c479f78350952c4f18747341ba5ea7a0) )
ROM_CONTINUE( 0x1e80, 0x0100 )
ROM_END
ROM_START( gckong )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38800b01", 0x0000, 0x1000, CRC(d5a2cca3) SHA1(37bb5784383daab672ed1e0e2362c7a40d8d9b3f) )
ROM_CONTINUE( 0x1e80, 0x0100 )
ROM_END
ROM_START( gdigdug )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38820a69", 0x0000, 0x1000, CRC(501165a9) SHA1(8a15d00c4aa66e870cadde33148426463560d2e6) )
ROM_CONTINUE( 0x1e80, 0x0100 )
ROM_END
@ -2377,7 +2789,7 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
CONS( 1979, bambball, 0, 0, bambball, bambball, driver_device, 0, "Bambino", "Basketball - Dribble Away", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, bambball, 0, 0, bambball, bambball, driver_device, 0, "Bambino", "Dribble Away Basketball", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, bmboxing, 0, 0, bmboxing, bmboxing, driver_device, 0, "Bambino", "Knock-Em Out Boxing", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, bfriskyt, 0, 0, bfriskyt, bfriskyt, driver_device, 0, "Bandai", "Frisky Tom (Bandai)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
@ -2387,7 +2799,7 @@ CONS( 1983, zackman, 0, 0, zackman, zackman, driver_device, 0, "Banda
CONS( 1981, alnattck, 0, 0, alnattck, alnattck, driver_device, 0, "Coleco", "Alien Attack", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, cdkong, 0, 0, cdkong, cdkong, driver_device, 0, "Coleco", "Donkey Kong (Coleco)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_IMPERFECT_SOUND )
CONS( 1982, cgalaxn, 0, 0, cgalaxn, cgalaxn, driver_device, 0, "Coleco", "Galaxian (Coleco)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
CONS( 1982, cgalaxn, 0, 0, cgalaxn, cgalaxn, driver_device, 0, "Coleco", "Galaxian (Coleco)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_IMPERFECT_SOUND )
CONS( 1981, cpacman, 0, 0, cpacman, cpacman, driver_device, 0, "Coleco", "Pac-Man (Coleco, Rev. 29)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, driver_device, 0, "Coleco", "Pac-Man (Coleco, Rev. 28)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, driver_device, 0, "Coleco", "Ms. Pac-Man (Coleco)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
@ -2395,6 +2807,10 @@ CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, driver_device, 0, "Colec
CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, driver_device, 0, "Entex", "Galaxian 2 (Entex)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1981, epacman2, 0, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, ghalien, 0, 0, ghalien, ghalien, driver_device, 0, "Gakken", "Heiankyo Alien (Gakken)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, gckong, 0, 0, gckong, gckong, driver_device, 0, "Gakken", "Crazy Kong (Gakken)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK | GAME_NOT_WORKING )
CONS( 1983, gdigdug, 0, 0, gdigdug, gdigdug, driver_device, 0, "Gakken", "Dig Dug (Gakken)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1983, pbqbert, 0, 0, pbqbert, pbqbert, driver_device, 0, "Parker Brothers", "Q*Bert (Parker Brothers)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, kingman, 0, 0, kingman, kingman, driver_device, 0, "Tomy", "Kingman", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )

View File

@ -9,6 +9,7 @@
serial device etc.
-----------------------------------------------------------
@036 1655A 1979, Ideal Maniac
*061 1655A 1980, Lakeside Le Boom (have dump)
*110 1650A 1979, Tiger Rocket Pinball
*192 1650 19??, (a phone dialer, have dump)
*255 1655 19??, (a talking clock, have dump)
@ -147,7 +148,7 @@ void hh_pic16_state::display_update()
int state = active_state[y] >> x & 1;
char buf1[0x10]; // lampyx
char buf2[0x10]; // y.x
if (x == m_display_maxx)
{
// always-on if selected

View File

@ -54,7 +54,7 @@
*MP7324 TMS1400? 1985, Coleco Talking Teacher
MP7332 TMS1400 1981, Milton Bradley Dark Tower -> mbdtower.c
@MP7334 TMS1400 1981, Coleco Total Control 4
*MP7573 ? 1981, Entex Select-a-Game cartridge: Football (? note: 40-pin, VFD-capable)
*MP7573 ? 1981, Entex Select-a-Game cartridge: Football 4 (? note: 40-pin, VFD-capable)
inconsistent:

View File

@ -2,7 +2,19 @@
// copyright-holders:hap, Kevin Horton
/***************************************************************************
NEC uCOM4 MCU tabletops/handhelds or other simple devices.
NEC uCOM4 MCU tabletops/handhelds or other simple devices,
most of them are VFD electronic games/toys.
Commonly used VFD(vacuum fluorescent display) are by NEC or Futaba.
NEC FIP9AM20T (example, Epoch Astro Command)
grcss
FIP = fluorescent indicator panel
g = number of grids
A = revision of the VFD
M = custom display
20 = unique display part number
known chips:
@ -10,16 +22,19 @@
serial device etc.
----------------------------------------------------------------
@017 uPD552C 1979, Bambino UFO Master-Blaster Station (ET-02)
@031 uPD553C 1979, Bambino Superstar Football (ET-03)
*042 uPD552C 1979, Tomy Space Attack
@042 uPD552C 1980, Tomy Cosmic Combat (TN-??)
@043 uPD552C 1979, Bambino Kick The Goal Soccer (ET-10)
*044 uPD552C 1979, Bambino Lucky Puck Ice Hockey (ET-08)
@048 uPD552C 1980, Tomy Tennis (TN-04)
@049 uPD552C 1981, Bambino Safari (ET-11)
@054 uPD552C 1980, Epoch Invader From Space
@031 uPD553C 1979, Bambino Superstar Football (ET-03)
@049 uPD553C 1979, Mego Mini-Vid Break Free
@055 uPD553C 1980, Bambino Laser Fight (ET-12)
*085 uPD650C 1980, Roland TR-808
@055 uPD553C 1980, Bambino Space Laser Fight (ET-12)
@080 uPD553C 1980, Epoch Electronic Football
*102 uPD553C 1981, Bandai Block Out
*127 uPD650C 198? Sony OA-S1100 Typecorder (subcpu, have dump)
*128 uPD650C 1982, Roland TR-606
133 uPD650C 1982, Roland TB-303 -> tb303.c
@153 uPD553C 1981, Epoch Galaxy II
@160 uPD553C 1982, Tomy Pac Man (TN-08)
@170 uPD553C 1982, Bandai Crazy Climber
@192 uPD553C 1982, Tomy Scramble (TN-10)
@ -28,6 +43,11 @@
@209 uPD553C 1982, Tomy Caveman (TN-12)
@258 uPD553C 1984, Tomy Alien Chase (TN-16)
*085 uPD650C 1980, Roland TR-808
*127 uPD650C 198? Sony OA-S1100 Typecorder (subcpu, have dump)
*128 uPD650C 1982, Roland TR-606
133 uPD650C 1982, Roland TB-303 -> tb303.c
(* denotes not yet emulated by MESS, @ denotes it's in this driver)
***************************************************************************/
@ -245,7 +265,7 @@ UINT8 hh_ucom4_state::read_inputs(int columns)
This is Bambino's first game, it is not known if ET-01 exists. Emix Corp.
wasn't initially a toy company, the first release was through Tomy. Emix
created the Bambino brand afterwards. The manual claims it to be the first
created the Bambino brand afterwards. It is claimed to be the first
computerized VFD game (true, unless TI's Speak & Spell is considered a game?)
known releases:
@ -357,7 +377,9 @@ MACHINE_CONFIG_END
Bambino Superstar Football (manufactured in Japan)
* PCB label Emix Corp. ET-03
* NEC uCOM-43 MCU, labeled D553C 031
* cyan VFD display Emix-102
* cyan VFD display Emix-102, with bezel
The game was rereleased in 1982 as Classic Football, with an improved VFD.
Press the Kick button to start the game, an automatic sequence follows.
Then choose a formation(A,B,C) and either pass the ball, and/or start
@ -424,6 +446,17 @@ READ8_MEMBER(ssfball_state::input_b_r)
// config
/* physical button layout and labels is like this:
[A] [B] [C] [PASS] [KICK/
^FORMATION^ DISPLAY]
[^]
[<>]
(game lvl sw) [v]
1<---OFF--->2
*/
static INPUT_PORTS_START( ssfball )
PORT_START("IN.0") // F3 port B3
PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED )
@ -431,7 +464,7 @@ static INPUT_PORTS_START( ssfball )
PORT_START("IN.1") // G3 port B3
PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_CONFNAME( 0x08, 0x00, "Skill Level" )
PORT_CONFNAME( 0x08, 0x00, "Game Level" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x08, "2" )
@ -439,12 +472,12 @@ static INPUT_PORTS_START( ssfball )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Kick/Display")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("Formation C")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Formation B")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) // multiplexed, handled in ssfball_input_b_r
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) // multiplexed, handled in input_b_r
PORT_START("IN.3") // port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Left/Right")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("Ball-carrier Left/Right") PORT_16WAY // separate directional buttons, hence 16way
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Ball-carrier Up") PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Ball-carrier Down") PORT_16WAY // "
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pass")
INPUT_PORTS_END
@ -481,12 +514,247 @@ MACHINE_CONFIG_END
/***************************************************************************
Bambino Kick The Goal Soccer
* PCB label Emix Corp. ET-10/08 (PCB is for 2 possible games)
* NEC uCOM-44 MCU, labeled D552C 043
* cyan VFD display Emix-105, with bezel overlay
Press the Display button twice to start the game. Action won't start until
player 1 presses one of the directional keys. In 2-player mode, player 2
controls the goalkeeper, defensive players are still controlled by the CPU.
NOTE!: MESS external artwork is recommended
***************************************************************************/
class bmsoccer_state : public hh_ucom4_state
{
public:
bmsoccer_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
DECLARE_READ8_MEMBER(input_a_r);
};
// handlers
void bmsoccer_state::prepare_display()
{
UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,11,7,3,12,17,13,18,16,14,15,8,4,0,9,5,1,10,6,2);
display_matrix(16, 9, plate, m_grid);
}
WRITE8_MEMBER(bmsoccer_state::grid_w)
{
// C01: input mux
if (offset == NEC_UCOM4_PORTC)
m_inp_mux = data & 3;
// C,D(,E3): vfd matrix grid
int shift = (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(bmsoccer_state::plate_w)
{
// G3: speaker out
if (offset == NEC_UCOM4_PORTG)
m_speaker->level_w(data >> 3 & 1);
// E012,F012,G012,H,I: vfd matrix plate
int shift = (offset - NEC_UCOM4_PORTE) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// E3: grid 8
if (offset == NEC_UCOM4_PORTE)
grid_w(space, offset, data >> 3 & 1);
else
prepare_display();
}
READ8_MEMBER(bmsoccer_state::input_a_r)
{
// port A: multiplexed inputs
return read_inputs(2);
}
// config
static INPUT_PORTS_START( bmsoccer )
PORT_START("IN.0") // C0 port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("Ball-carrier Right") PORT_16WAY // separate directional buttons, hence 16way
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Ball-carrier Down") PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("Ball-carrier Left") PORT_16WAY // "
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Ball-carrier Up") PORT_16WAY // "
PORT_START("IN.1") // C1 port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_NAME("Goalkeeper Left") PORT_16WAY // " + note: swap buttons if viewed from the same angle as player 1
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_NAME("Goalkeeper Right") PORT_16WAY // "
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.2") // port B
PORT_CONFNAME( 0x01, 0x00, "Skill Level" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x01, "2" )
PORT_CONFNAME( 0x02, 0x00, "Players" )
PORT_CONFSETTING( 0x00, "1" )
PORT_CONFSETTING( 0x02, "2" )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Display/Banana Shoot")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Shoot")
INPUT_PORTS_END
static MACHINE_CONFIG_START( bmsoccer, bmsoccer_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D552, 400000) // approximation
MCFG_UCOM4_READ_A_CB(READ8(bmsoccer_state, input_a_r))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.2"))
MCFG_UCOM4_WRITE_C_CB(WRITE8(bmsoccer_state, grid_w))
MCFG_UCOM4_WRITE_D_CB(WRITE8(bmsoccer_state, grid_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(bmsoccer_state, plate_w))
MCFG_UCOM4_WRITE_F_CB(WRITE8(bmsoccer_state, plate_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(bmsoccer_state, plate_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(bmsoccer_state, plate_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(bmsoccer_state, plate_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Bambino Safari (manufactured in Japan)
* PCB label Emix Corp. ET-11
* NEC uCOM-44 MCU, labeled EMIX D552C 049
* cyan VFD display Emix-108
NOTE!: MESS external artwork is recommended
***************************************************************************/
class bmsafari_state : public hh_ucom4_state
{
public:
bmsafari_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
DECLARE_WRITE8_MEMBER(speaker_w);
};
// handlers
void bmsafari_state::prepare_display()
{
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,9,0,1,2,3,4,5,6,7,8);
UINT16 plate = BITSWAP16(m_plate,15,14,13,12,11,7,10,2,9,5,8,4,0,1,6,3);
display_matrix(10, 9, plate, grid);
}
WRITE8_MEMBER(bmsafari_state::grid_w)
{
// C,D(,E3): vfd matrix grid
int shift = (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(bmsafari_state::plate_w)
{
// E012,H,I: vfd matrix plate
int shift = (offset == NEC_UCOM4_PORTE) ? 8 : (offset - NEC_UCOM4_PORTH) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
// E3: grid 0
if (offset == NEC_UCOM4_PORTE)
grid_w(space, offset, data >> 3 & 1);
else
prepare_display();
}
WRITE8_MEMBER(bmsafari_state::speaker_w)
{
// G0: speaker out
m_speaker->level_w(data & 1);
}
// config
static INPUT_PORTS_START( bmsafari )
PORT_START("IN.0") // port A
PORT_CONFNAME( 0x07, 0x04, "Skill Level" )
PORT_CONFSETTING( 0x04, "1" )
PORT_CONFSETTING( 0x02, "2" )
PORT_CONFSETTING( 0x01, "3" )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY // separate directional buttons, hence 16way
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY // "
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY // "
INPUT_PORTS_END
static MACHINE_CONFIG_START( bmsafari, bmsafari_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D552, 400000) // approximation
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.1"))
MCFG_UCOM4_WRITE_C_CB(WRITE8(bmsafari_state, grid_w))
MCFG_UCOM4_WRITE_D_CB(WRITE8(bmsafari_state, grid_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(bmsafari_state, plate_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(bmsafari_state, speaker_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(bmsafari_state, plate_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(bmsafari_state, plate_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Bambino Space Laser Fight (manufactured in Japan)
* PCB label Emix Corp. ET-12
* NEC uCOM-43 MCU, labeled D553C 055
* cyan VFD display Emix-104, with color overlay (blue or green overlay, depending on region)
* cyan VFD display Emix-104, with blue or green color overlay
This is basically a revamp of their earlier Boxing game (ET-06), case and
buttons are exactly the same.
NOTE!: MESS external artwork is recommended
@ -732,12 +1000,327 @@ MACHINE_CONFIG_END
/***************************************************************************
Epoch Invader From Space (manufactured in Japan)
* PCB labels 36010(A/B)
* NEC uCOM-44 MCU, labeled D552C 054
* cyan VFD display NEC FIP9AM18T tube no. 0D, with color overlay
known releases:
- USA: Invader From Space
- UK: Invader From Space, published by Grandstand
NOTE!: MESS external artwork is recommended
***************************************************************************/
class invspace_state : public hh_ucom4_state
{
public:
invspace_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
};
// handlers
void invspace_state::prepare_display()
{
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,8,9,7,6,5,4,3,2,1,0);
UINT32 plate = BITSWAP24(m_plate,23,22,21,20,19,9,14,13,8,15,11,10,7,11,3,2,6,10,1,5,9,0,4,8);
display_matrix(19, 9, plate, grid);
}
WRITE8_MEMBER(invspace_state::grid_w)
{
// I0: speaker out
if (offset == NEC_UCOM4_PORTI)
m_speaker->level_w(data & 1);
// C,D,I1: vfd matrix grid
int shift = (offset == NEC_UCOM4_PORTI) ? 8 : (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(invspace_state::plate_w)
{
// E,F,G,H123: vfd matrix plate
int shift = (offset - NEC_UCOM4_PORTE) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
prepare_display();
}
// config
static INPUT_PORTS_START( invspace )
PORT_START("IN.0") // port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( invspace, invspace_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D552, XTAL_400kHz)
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.1"))
MCFG_UCOM4_WRITE_C_CB(WRITE8(invspace_state, grid_w))
MCFG_UCOM4_WRITE_D_CB(WRITE8(invspace_state, grid_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(invspace_state, plate_w))
MCFG_UCOM4_WRITE_F_CB(WRITE8(invspace_state, plate_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(invspace_state, plate_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(invspace_state, plate_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(invspace_state, grid_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Epoch Electronic Football (manufactured in Japan)
* PCB labels 36020(A/B/C)
* NEC uCOM-43 MCU, labeled D553C 080
* cyan VFD display NEC FIP10AM15T tube no. 0F, with bezel overlay
known releases:
- USA: Electronic Football (aka Pro-Bowl Football)
- Japan: American Football
NOTE!: MESS external artwork is recommended
***************************************************************************/
class efball_state : public hh_ucom4_state
{
public:
efball_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
};
// handlers
void efball_state::prepare_display()
{
UINT16 plate = BITSWAP16(m_plate,15,14,13,12,11,4,3,0,2,1,6,10,9,5,8,7);
display_matrix(11, 10, plate, m_grid);
}
WRITE8_MEMBER(efball_state::grid_w)
{
// H2: speaker out
if (offset == NEC_UCOM4_PORTH)
m_speaker->level_w(data >> 2 & 1);
// F,G,H01: vfd matrix grid
int shift = (offset - NEC_UCOM4_PORTF) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(efball_state::plate_w)
{
// D,E,I: vfd matrix plate
int shift = (offset == NEC_UCOM4_PORTI) ? 8 : (offset - NEC_UCOM4_PORTD) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
prepare_display();
}
// config
static INPUT_PORTS_START( efball )
PORT_START("IN.0") // port A
PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) )
PORT_CONFSETTING( 0x00, "Amateur" )
PORT_CONFSETTING( 0x01, "Professional" )
PORT_CONFNAME( 0x02, 0x02, "Players" )
PORT_CONFSETTING( 0x02, "1" )
PORT_CONFSETTING( 0x00, "2" )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Down Field")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Score/Time")
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY // separate directional buttons, hence 16way
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Pass")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Kick")
PORT_START("IN.2") // port C
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY // "
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Return")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P1 Left/Right") PORT_16WAY // "
INPUT_PORTS_END
static MACHINE_CONFIG_START( efball, efball_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz)
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.1"))
MCFG_UCOM4_READ_C_CB(IOPORT("IN.2"))
MCFG_UCOM4_WRITE_D_CB(WRITE8(efball_state, plate_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(efball_state, plate_w))
MCFG_UCOM4_WRITE_F_CB(WRITE8(efball_state, grid_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(efball_state, grid_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(efball_state, grid_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(efball_state, plate_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Epoch Galaxy II (manufactured in Japan)
* PCB labels 19096/96062
* NEC uCOM-43 MCU, labeled D553C 153
* cyan/red VFD display NEC FIP10xM20T, with color overlay. x = multiple VFD
revisions exist, with different graphics: rev B no. 1-8, rev. D no. 2-21.
known releases:
- USA: Galaxy II
- Japan: Astro Wars
- UK: Astro Wars, published by Grandstand
NOTE!: MESS external artwork is recommended
***************************************************************************/
class galaxy2_state : public hh_ucom4_state
{
public:
galaxy2_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
};
// handlers
void galaxy2_state::prepare_display()
{
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
UINT16 plate = BITSWAP16(m_plate,15,3,2,6,1,5,4,0,11,10,7,12,14,13,8,9);
display_matrix(15, 10, plate, grid);
}
WRITE8_MEMBER(galaxy2_state::grid_w)
{
// E3: speaker out
if (offset == NEC_UCOM4_PORTE)
m_speaker->level_w(data >> 3 & 1);
// C,D,E01: vfd matrix grid
int shift = (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(galaxy2_state::plate_w)
{
// F,G,H,I: vfd matrix plate
int shift = (offset - NEC_UCOM4_PORTF) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
prepare_display();
}
// config
static INPUT_PORTS_START( galaxy2 )
PORT_START("IN.0") // port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static MACHINE_CONFIG_START( galaxy2, galaxy2_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D553, XTAL_400kHz)
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_READ_B_CB(IOPORT("IN.1"))
MCFG_UCOM4_WRITE_C_CB(WRITE8(galaxy2_state, grid_w))
MCFG_UCOM4_WRITE_D_CB(WRITE8(galaxy2_state, grid_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(galaxy2_state, grid_w))
MCFG_UCOM4_WRITE_F_CB(WRITE8(galaxy2_state, plate_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(galaxy2_state, plate_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(galaxy2_state, plate_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(galaxy2_state, plate_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Epoch Astro Command (manufactured in Japan)
* PCB label 96111
* PCB labels 96111/96112
* NEC uCOM-43 MCU, labeled D553C 202
* cyan/red VFD display NEC FIP9AM20T no. 42-42, with color overlay (FIP=fluorescent indicator panel)
* cyan/red VFD display NEC FIP9AM20T no. 42-42, with color overlay + bezel
known releases:
- Japan: Astro Command
@ -1043,6 +1626,103 @@ MACHINE_CONFIG_END
/***************************************************************************
Tomy(tronic) Cosmic Combat (manufactured in Japan)
* PCBs are labeled 2E1019-E01
* NEC uCOM-44 MCU, labeled D552C 042
* cyan VFD display NEC FIP32AM18Y tube no. 0E, with color overlay
known releases:
- USA: Cosmic Combat
- Japan: Space Attack
NOTE!: MESS external artwork is recommended
***************************************************************************/
class tccombat_state : public hh_ucom4_state
{
public:
tccombat_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_ucom4_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(grid_w);
DECLARE_WRITE8_MEMBER(plate_w);
};
// handlers
void tccombat_state::prepare_display()
{
UINT16 grid = BITSWAP16(m_grid,15,14,13,12,11,10,9,8,3,2,1,0,7,6,5,4);
UINT32 plate = BITSWAP24(m_plate,23,22,21,20,11,15,3,10,14,2,9,13,1,0,12,8,15,1,5,0,3,7,2,6);
display_matrix(20, 9, plate, grid);
}
WRITE8_MEMBER(tccombat_state::grid_w)
{
// I1: speaker out
if (offset == NEC_UCOM4_PORTI)
m_speaker->level_w(data >> 1 & 1);
// C,D,I0: vfd matrix grid
int shift = (offset == NEC_UCOM4_PORTI) ? 8 : (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
prepare_display();
}
WRITE8_MEMBER(tccombat_state::plate_w)
{
// E,F123,G,H: vfd matrix plate
int shift = (offset - NEC_UCOM4_PORTE) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
prepare_display();
}
// config
static INPUT_PORTS_START( tccombat )
PORT_START("IN.0") // port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_CONFNAME( 0x02, 0x02, "Skill Level" )
PORT_CONFSETTING( 0x02, "1" )
PORT_CONFSETTING( 0x00, "2" )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
INPUT_PORTS_END
static MACHINE_CONFIG_START( tccombat, tccombat_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", NEC_D552, 400000) // approximation
MCFG_UCOM4_READ_A_CB(IOPORT("IN.0"))
MCFG_UCOM4_WRITE_C_CB(WRITE8(tccombat_state, grid_w))
MCFG_UCOM4_WRITE_D_CB(WRITE8(tccombat_state, grid_w))
MCFG_UCOM4_WRITE_E_CB(WRITE8(tccombat_state, plate_w))
MCFG_UCOM4_WRITE_F_CB(WRITE8(tccombat_state, plate_w))
MCFG_UCOM4_WRITE_G_CB(WRITE8(tccombat_state, plate_w))
MCFG_UCOM4_WRITE_H_CB(WRITE8(tccombat_state, plate_w))
MCFG_UCOM4_WRITE_I_CB(WRITE8(tccombat_state, grid_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_hh_ucom4_test)
/* no video! */
/* 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
/***************************************************************************
Tomy(tronic) Tennis (manufactured in Japan)
@ -1377,8 +2057,8 @@ static INPUT_PORTS_START( tmscramb )
PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_START("IN.1") // port B
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_2WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_2WAY
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@ -1568,7 +2248,7 @@ WRITE8_MEMBER(alnchase_state::output_w)
READ8_MEMBER(alnchase_state::input_r)
{
// A: buttons
// A: multiplexed buttons
return read_inputs(2);
}
@ -1659,6 +2339,18 @@ ROM_START( ssfball )
ROM_END
ROM_START( bmsoccer )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-043", 0x0000, 0x0400, CRC(10c2a4ea) SHA1(6ebca7d406e22ff7a8cd529579b55a700da487b4) )
ROM_END
ROM_START( bmsafari )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-049", 0x0000, 0x0400, CRC(82fa3cbe) SHA1(019e7ec784e977eba09997fc46af253054fb222c) )
ROM_END
ROM_START( splasfgt )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d553c-055", 0x0000, 0x0800, CRC(eb471fbd) SHA1(f06cfe567bf6f9ed4dcdc88acdcfad50cd370a02) )
@ -1671,6 +2363,24 @@ ROM_START( bcclimbr )
ROM_END
ROM_START( invspace )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-054", 0x0000, 0x0400, CRC(913d9c13) SHA1(f20edb5458e54d2f6d4e45e5d59efd87e05a6f3f) )
ROM_END
ROM_START( efball )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d553c-080", 0x0000, 0x0800, CRC(54c1027f) SHA1(6cc98074dae9361fa8c0ed6501b6a57ad325ccbd) )
ROM_END
ROM_START( galaxy2 )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d553c-153.s01", 0x0000, 0x0800, CRC(70d552b3) SHA1(72d50647701cb4bf85ea947a149a317aaec0f52c) )
ROM_END
ROM_START( astrocmd )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD( "d553c-202.s01", 0x0000, 0x0800, CRC(b4b34883) SHA1(6246d561c2df1f2124575d2ca671ef85b1819edd) )
@ -1689,6 +2399,12 @@ ROM_START( mvbfree )
ROM_END
ROM_START( tccombat )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-042", 0x0000, 0x0400, CRC(d7b5cfeb) SHA1(a267be8e43b7740758eb0881b655b1cc8aec43da) )
ROM_END
ROM_START( tmtennis )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "d552c-048", 0x0000, 0x0400, CRC(78702003) SHA1(4d427d4dbeed901770c682338867f58c7b54eee3) )
@ -1723,15 +2439,21 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
CONS( 1979, ufombs, 0, 0, ufombs, ufombs, driver_device, 0, "Bambino", "UFO Master-Blaster Station", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, ssfball, 0, 0, ssfball, ssfball, driver_device, 0, "Bambino", "Superstar Football", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, bmsoccer, 0, 0, bmsoccer, bmsoccer, driver_device, 0, "Bambino", "Kick The Goal Soccer", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1981, bmsafari, 0, 0, bmsafari, bmsafari, driver_device, 0, "Bambino", "Safari (Bambino)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, splasfgt, 0, 0, splasfgt, splasfgt, driver_device, 0, "Bambino", "Space Laser Fight", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, bcclimbr, 0, 0, bcclimbr, bcclimbr, driver_device, 0, "Bandai", "Crazy Climber (Bandai)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, invspace, 0, 0, invspace, invspace, driver_device, 0, "Epoch", "Invader From Space", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, efball, 0, 0, efball, efball, driver_device, 0, "Epoch", "Electronic Football (Epoch)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1981, galaxy2, 0, 0, galaxy2, galaxy2, driver_device, 0, "Epoch", "Galaxy II", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, astrocmd, 0, 0, astrocmd, astrocmd, driver_device, 0, "Epoch", "Astro Command", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, edracula, 0, 0, edracula, edracula, driver_device, 0, "Epoch", "Dracula (Epoch)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1979, mvbfree, 0, 0, mvbfree, mvbfree, driver_device, 0, "Mego", "Mini-Vid Break Free", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, tccombat, 0, 0, tccombat, tccombat, driver_device, 0, "Tomy", "Cosmic Combat", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tennis (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, tmpacman, 0, 0, tmpacman, tmpacman, driver_device, 0, "Tomy", "Pac Man (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )
CONS( 1982, tmscramb, 0, 0, tmscramb, tmscramb, driver_device, 0, "Tomy", "Scramble (Tomy)", GAME_SUPPORTS_SAVE | GAME_REQUIRES_ARTWORK )

View File

@ -2186,7 +2186,7 @@ bambball // Bambino
bmboxing // Bambino
bfriskyt // Bandai
packmon // Bandai
msthawk // Bandai(Mattel)
msthawk // Bandai/Mattel
zackman // Bandai
alnattck // Coleco
cdkong // Coleco
@ -2196,6 +2196,9 @@ cpacmanr1 // Coleco (rev 1)
cmspacmn // Coleco
egalaxn2 // Entex
epacman2 // Entex
ghalien // Gakken
gckong // Gakken
gdigdug // Gakken
pbqbert // Parker Brothers
mvbfree // Mego
kingman // Tomy
@ -2231,10 +2234,16 @@ mbdtower // Milton Bradley
ufombs // Bambino
ssfball // Bambino
bmsoccer // Bambino
bmsafari // Bambino
splasfgt // Bambino
bcclimbr // Bandai
invspace // Epoch
efball // Epoch
galaxy2 // Epoch
astrocmd // Epoch
edracula // Epoch
tccombat // Tomy
tmpacman // Tomy
tmtennis // Tomy
tmscramb // Tomy