diff options
author | 2015-05-02 19:41:03 +0200 | |
---|---|---|
committer | 2015-05-02 19:41:03 +0200 | |
commit | cc3b682e52bf097d31db78032aad01d6a0b12e94 (patch) | |
tree | 860c97ca011b64c31a5ad277f5cea2b1d86eeaf0 /src/mess/drivers/hh_ucom4.c | |
parent | 7df6a23ba2ae1c1df94ed8cc2398f2546f339997 (diff) | |
parent | a649a95488e1fc85813dda747dc74c596496bd1c (diff) |
Merge pull request #1 from mamedev/master
Sync to master
Diffstat (limited to 'src/mess/drivers/hh_ucom4.c')
-rw-r--r-- | src/mess/drivers/hh_ucom4.c | 920 |
1 files changed, 868 insertions, 52 deletions
diff --git a/src/mess/drivers/hh_ucom4.c b/src/mess/drivers/hh_ucom4.c index bef639156f9..b8738fc8bba 100644 --- a/src/mess/drivers/hh_ucom4.c +++ b/src/mess/drivers/hh_ucom4.c @@ -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,36 +43,24 @@ @209 uPD553C 1982, Tomy Caveman (TN-12) @258 uPD553C 1984, Tomy Alien Chase (TN-16) - (* denotes not yet emulated by MESS, @ denotes it's in this driver) - -***************************************************************************/ - - - - - - - - -/*************************************************************************** - - Mego Mini-Vid Break Free (manufactured in Japan) - * PCB label Mego 79 rev F - * NEC uCOM-43 MCU, labeled D553C 031 - * cyan VFD display Futaba DM-4.5 91 + *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 - NOTE!: MESS external artwork is recommended + (* denotes not yet emulated by MESS, @ denotes it's in this driver) ***************************************************************************/ - - - #include "emu.h" #include "cpu/ucom4/ucom4.h" #include "sound/speaker.h" -#include "hh_ucom4_test.lh" // test-layout - use external artwork +// internal artwork +#include "efball.lh" +#include "mvbfree.lh" + +#include "hh_ucom4_test.lh" // common test-layout - use external artwork class hh_ucom4_state : public driver_device @@ -262,12 +265,13 @@ UINT8 hh_ucom4_state::read_inputs(int columns) Bambino UFO Master-Blaster Station (manufactured in Japan) * PCB label Emix Corp. ET-02 * NEC uCOM-44 MCU, labeled EMIX D552C 017 - * cyan VFD display Emix-101, with blue overlay - + * cyan VFD display Emix-101, with blue color overlay + 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 - computerized VFD game (true, unless TI's Speak & Spell is considered a game?) + created the Bambino brand afterwards. It is claimed to be the first + computerized VFD game (true, unless TI Speak & Spell(1978), or even Invicta + Electronic Mastermind(1977) are considered games) known releases: - Japan: "Missile Guerilla Warfare Maneuvers", published by Tomy @@ -329,7 +333,6 @@ static INPUT_PORTS_START( ufombs ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("IN.0", 0x0a, EQUALS, 0x00) // pad in the middle, pressed when joystick is centered - PORT_BIT( 0x04, 0x00, IPT_SPECIAL ) PORT_CONDITION("IN.0", 0x0a, NOTEQUALS, 0x00) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_START("IN.1") // port B @@ -378,7 +381,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 @@ -445,6 +450,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 ) @@ -452,7 +468,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" ) @@ -460,12 +476,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_16WAY PORT_NAME("Ball-carrier Left/Right") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("Ball-carrier Up") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("Ball-carrier Down") PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pass") INPUT_PORTS_END @@ -504,10 +520,245 @@ 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_16WAY PORT_NAME("Ball-carrier Right") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("Ball-carrier Down") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("Ball-carrier Left") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("Ball-carrier Up") + + PORT_START("IN.1") // C1 port A + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("Goalkeeper Left") // note: swap buttons if viewed from the same angle as player 1 + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("Goalkeeper Right") + 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 + 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 @@ -755,10 +1006,323 @@ 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 + +***************************************************************************/ + +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_START ) PORT_NAME("P1 Down-Field") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("P1 Score-Time") + + PORT_START("IN.1") // port B + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Left/Right") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Pass") + + 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 Kick Return") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Kick") +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_efball) + + /* 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 @@ -959,6 +1523,208 @@ MACHINE_CONFIG_END /*************************************************************************** + Mego Mini-Vid Break Free (manufactured in Japan) + * PCB label Mego 79 rev F + * NEC uCOM-43 MCU, labeled D553C 049 + * cyan VFD display Futaba DM-4.5 91 + +***************************************************************************/ + +class mvbfree_state : public hh_ucom4_state +{ +public: + mvbfree_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 mvbfree_state::prepare_display() +{ + UINT16 grid = BITSWAP16(m_grid,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); + UINT16 plate = BITSWAP16(m_plate,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9); + display_matrix(10, 14, plate, grid); +} + +WRITE8_MEMBER(mvbfree_state::grid_w) +{ + // E23,F,G,H: vfd matrix grid + int shift = (offset - NEC_UCOM4_PORTE) * 4; + m_grid = (m_grid & ~(0xf << shift)) | (data << shift); + + // E01: plate 0,1 + if (offset == NEC_UCOM4_PORTE) + plate_w(space, 2 + NEC_UCOM4_PORTC, data & 3); + else + prepare_display(); +} + +WRITE8_MEMBER(mvbfree_state::plate_w) +{ + // C,D(,E01): vfd matrix plate + int shift = (offset - NEC_UCOM4_PORTC) * 4; + m_plate = (m_plate & ~(0xf << shift)) | (data << shift); + prepare_display(); +} + +WRITE8_MEMBER(mvbfree_state::speaker_w) +{ + // I0: speaker out + m_speaker->level_w(data & 1); +} + + +// config + +static INPUT_PORTS_START( mvbfree ) + PORT_START("IN.0") // port A + 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_JOYSTICK_UP ) PORT_16WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY + + PORT_START("IN.1") // port B + PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED ) // unimplemented p1/p2 buttons + PORT_CONFNAME( 0x0c, 0x04, "Game Select") + PORT_CONFSETTING( 0x04, "1" ) + PORT_CONFSETTING( 0x00, "2" ) + PORT_CONFSETTING( 0x08, "3" ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( mvbfree, mvbfree_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", NEC_D553, 400000) // approximation + MCFG_UCOM4_READ_A_CB(IOPORT("IN.0")) + MCFG_UCOM4_READ_B_CB(IOPORT("IN.1")) + MCFG_UCOM4_WRITE_C_CB(WRITE8(mvbfree_state, plate_w)) + MCFG_UCOM4_WRITE_D_CB(WRITE8(mvbfree_state, plate_w)) + MCFG_UCOM4_WRITE_E_CB(WRITE8(mvbfree_state, grid_w)) + MCFG_UCOM4_WRITE_F_CB(WRITE8(mvbfree_state, grid_w)) + MCFG_UCOM4_WRITE_G_CB(WRITE8(mvbfree_state, grid_w)) + MCFG_UCOM4_WRITE_H_CB(WRITE8(mvbfree_state, grid_w)) + MCFG_UCOM4_WRITE_I_CB(WRITE8(mvbfree_state, speaker_w)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_ucom4_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_mvbfree) + + /* 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) 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) * PCB labeled TOMY TN-04 TENNIS * NEC uCOM-44 MCU, labeled D552C 048 @@ -969,7 +1735,7 @@ MACHINE_CONFIG_END Press the Serve button to start, then hit the ball by pressing one of the positional buttons when the ball flies over it. - + NOTE!: MESS external artwork is recommended ***************************************************************************/ @@ -1182,10 +1948,10 @@ WRITE8_MEMBER(tmpacman_state::plate_w) static INPUT_PORTS_START( tmpacman ) PORT_START("IN.0") // port A - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) 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_JOYSTICK_RIGHT ) PORT_16WAY // " - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY // " + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_START("IN.1") // port B PORT_CONFNAME( 0x01, 0x00, DEF_STR( Difficulty ) ) @@ -1291,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 @@ -1482,7 +2248,7 @@ WRITE8_MEMBER(alnchase_state::output_w) READ8_MEMBER(alnchase_state::input_r) { - // A: buttons + // A: multiplexed buttons return read_inputs(2); } @@ -1573,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) ) @@ -1585,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) ) @@ -1597,6 +2393,18 @@ ROM_START( edracula ) ROM_END +ROM_START( mvbfree ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "d553c-049", 0x0000, 0x0800, CRC(d64a8399) SHA1(97887e486fa29b1fc4a5a40cacf3c960f67aacbf) ) +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) ) @@ -1631,13 +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 ) +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 ) + +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 ) |