mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
unkeinv: identified game as Mego Invasion From Space [Sly DC]
This commit is contained in:
parent
1736d55762
commit
0e1266a4d6
@ -45,10 +45,10 @@ TODO:
|
||||
#include "lilcomp.lh"
|
||||
#include "mbaskb2.lh"
|
||||
#include "mdallas.lh"
|
||||
#include "minspace.lh"
|
||||
#include "msoccer2.lh"
|
||||
#include "qkracera.lh"
|
||||
#include "scat.lh"
|
||||
#include "unkeinv.lh"
|
||||
#include "vidchal.lh"
|
||||
|
||||
//#include "hh_cop400_test.lh" // common test-layout - use external artwork
|
||||
@ -568,129 +568,6 @@ ROM_END
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
Gordon Barlow Design electronic Space Invaders game (unreleased, from patent US4345764)
|
||||
* COP421 (likely a development chip)
|
||||
* 36+9 LEDs, 1-bit sound
|
||||
|
||||
This game is presumedly unreleased. The title is unknown, the patent simply
|
||||
names it "Hand-held electronic game". There is no mass-manufacture company
|
||||
assigned to it either. The game seems unfinished(no scorekeeping, some bugs),
|
||||
and the design is very complex. Player ship and bullets are on a moving "wand",
|
||||
a 2-way mirror makes it appear on the same plane as the enemies and barriers.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
class unkeinv_state : public hh_cop400_state
|
||||
{
|
||||
public:
|
||||
unkeinv_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
hh_cop400_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void unkeinv(machine_config &config);
|
||||
|
||||
private:
|
||||
void update_display();
|
||||
void write_g(u8 data);
|
||||
void write_d(u8 data);
|
||||
void write_l(u8 data);
|
||||
u8 read_l();
|
||||
};
|
||||
|
||||
// handlers
|
||||
|
||||
void unkeinv_state::update_display()
|
||||
{
|
||||
m_display->matrix(m_g << 4 | m_d, m_l);
|
||||
}
|
||||
|
||||
void unkeinv_state::write_g(u8 data)
|
||||
{
|
||||
// G0,G1: led select part
|
||||
// G2,G3: input mux
|
||||
m_g = ~data & 0xf;
|
||||
update_display();
|
||||
}
|
||||
|
||||
void unkeinv_state::write_d(u8 data)
|
||||
{
|
||||
// D0-D3: led select part
|
||||
m_d = ~data & 0xf;
|
||||
update_display();
|
||||
}
|
||||
|
||||
void unkeinv_state::write_l(u8 data)
|
||||
{
|
||||
// L0-L7: led data
|
||||
m_l = ~data & 0xff;
|
||||
update_display();
|
||||
}
|
||||
|
||||
u8 unkeinv_state::read_l()
|
||||
{
|
||||
u8 ret = 0xff;
|
||||
|
||||
// L0-L5+G2: positional odd
|
||||
// L0-L5+G3: positional even
|
||||
u8 pos = m_inputs[1]->read();
|
||||
if (m_g & 4 && pos & 1)
|
||||
ret ^= (1 << (pos >> 1));
|
||||
if (m_g & 8 && ~pos & 1)
|
||||
ret ^= (1 << (pos >> 1));
|
||||
|
||||
// L7+G3: fire button
|
||||
if (m_g & 8 && m_inputs[0]->read())
|
||||
ret ^= 0x80;
|
||||
|
||||
return ret & ~m_l;
|
||||
}
|
||||
|
||||
// inputs
|
||||
|
||||
static INPUT_PORTS_START( unkeinv )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0)
|
||||
INPUT_PORTS_END
|
||||
|
||||
// config
|
||||
|
||||
void unkeinv_state::unkeinv(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
COP421(config, m_maincpu, 850000); // frequency guessed
|
||||
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
|
||||
m_maincpu->write_g().set(FUNC(unkeinv_state::write_g));
|
||||
m_maincpu->write_d().set(FUNC(unkeinv_state::write_d));
|
||||
m_maincpu->write_l().set(FUNC(unkeinv_state::write_l));
|
||||
m_maincpu->read_l().set(FUNC(unkeinv_state::read_l));
|
||||
m_maincpu->read_l_tristate().set_constant(0xff);
|
||||
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
|
||||
|
||||
// video hardware
|
||||
PWM_DISPLAY(config, m_display).set_size(6, 8);
|
||||
config.set_default_layout(layout_unkeinv);
|
||||
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||
}
|
||||
|
||||
// roms
|
||||
|
||||
ROM_START( unkeinv )
|
||||
ROM_REGION( 0x0400, "maincpu", 0 )
|
||||
ROM_LOAD( "cop421_us4345764", 0x0000, 0x0400, CRC(0068c3a3) SHA1(4e5fd566a5a26c066cc14623a9bd01e109ebf797) ) // typed in from patent US4345764, good print quality
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
LJN I Took a Lickin' From a Chicken
|
||||
@ -1672,6 +1549,129 @@ ROM_END
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
Mego Invasion From Space (unreleased)
|
||||
* COP421 (likely a development chip)
|
||||
* 36+9 LEDs with overlay mask, 1-bit sound
|
||||
|
||||
This game is presumedly unreleased. The design is very complex. Player ship
|
||||
and bullets are on a moving "wand", a 2-way mirror makes it appear on the same
|
||||
plane as the enemies and barriers.
|
||||
|
||||
It is described in patent US4345764, the ROM data is included.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
class minspace_state : public hh_cop400_state
|
||||
{
|
||||
public:
|
||||
minspace_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
hh_cop400_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void minspace(machine_config &config);
|
||||
|
||||
private:
|
||||
void update_display();
|
||||
void write_g(u8 data);
|
||||
void write_d(u8 data);
|
||||
void write_l(u8 data);
|
||||
u8 read_l();
|
||||
};
|
||||
|
||||
// handlers
|
||||
|
||||
void minspace_state::update_display()
|
||||
{
|
||||
m_display->matrix(m_g << 4 | m_d, m_l);
|
||||
}
|
||||
|
||||
void minspace_state::write_g(u8 data)
|
||||
{
|
||||
// G0,G1: led select part
|
||||
// G2,G3: input mux
|
||||
m_g = ~data & 0xf;
|
||||
update_display();
|
||||
}
|
||||
|
||||
void minspace_state::write_d(u8 data)
|
||||
{
|
||||
// D0-D3: led select part
|
||||
m_d = ~data & 0xf;
|
||||
update_display();
|
||||
}
|
||||
|
||||
void minspace_state::write_l(u8 data)
|
||||
{
|
||||
// L0-L7: led data
|
||||
m_l = ~data & 0xff;
|
||||
update_display();
|
||||
}
|
||||
|
||||
u8 minspace_state::read_l()
|
||||
{
|
||||
u8 ret = 0xff;
|
||||
|
||||
// L0-L5+G2: positional odd
|
||||
// L0-L5+G3: positional even
|
||||
u8 pos = m_inputs[1]->read();
|
||||
if (m_g & 4 && pos & 1)
|
||||
ret ^= (1 << (pos >> 1));
|
||||
if (m_g & 8 && ~pos & 1)
|
||||
ret ^= (1 << (pos >> 1));
|
||||
|
||||
// L7+G3: fire button
|
||||
if (m_g & 8 && m_inputs[0]->read())
|
||||
ret ^= 0x80;
|
||||
|
||||
return ret & ~m_l;
|
||||
}
|
||||
|
||||
// inputs
|
||||
|
||||
static INPUT_PORTS_START( minspace )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT( 0x0f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0)
|
||||
INPUT_PORTS_END
|
||||
|
||||
// config
|
||||
|
||||
void minspace_state::minspace(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
COP421(config, m_maincpu, 850000); // frequency guessed
|
||||
m_maincpu->set_config(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false); // guessed
|
||||
m_maincpu->write_g().set(FUNC(minspace_state::write_g));
|
||||
m_maincpu->write_d().set(FUNC(minspace_state::write_d));
|
||||
m_maincpu->write_l().set(FUNC(minspace_state::write_l));
|
||||
m_maincpu->read_l().set(FUNC(minspace_state::read_l));
|
||||
m_maincpu->read_l_tristate().set_constant(0xff);
|
||||
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
|
||||
|
||||
// video hardware
|
||||
PWM_DISPLAY(config, m_display).set_size(6, 8);
|
||||
config.set_default_layout(layout_minspace);
|
||||
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||
}
|
||||
|
||||
// roms
|
||||
|
||||
ROM_START( minspacep )
|
||||
ROM_REGION( 0x0400, "maincpu", 0 )
|
||||
ROM_LOAD( "cop421_us4345764", 0x0000, 0x0400, CRC(0068c3a3) SHA1(4e5fd566a5a26c066cc14623a9bd01e109ebf797) ) // typed in from patent US4345764, good print quality
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
Milton Bradley Plus One
|
||||
@ -2810,8 +2810,6 @@ SYST( 1980, h2hsoccerc, 0, 0, h2hsoccerc, h2hsoccerc, h2hbaskbc_sta
|
||||
|
||||
SYST( 1981, einvaderc, einvader, 0, einvaderc, einvaderc, einvaderc_state, empty_init, "Entex", "Space Invader (Entex, COP444L version)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
SYST( 1980, unkeinv, 0, 0, unkeinv, unkeinv, unkeinv_state, empty_init, "Gordon Barlow Design", "unknown electronic Space Invaders game (patent)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
SYST( 1980, lchicken, 0, 0, lchicken, lchicken, lchicken_state, empty_init, "LJN", "I Took a Lickin' From a Chicken", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_MECHANICAL )
|
||||
|
||||
SYST( 1979, funjacks, 0, 0, funjacks, funjacks, funjacks_state, empty_init, "Mattel Electronics", "Funtronics: Jacks", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
@ -2822,6 +2820,8 @@ SYST( 1979, msoccer2, 0, 0, msoccer2, msoccer2, mbaskb2_state
|
||||
SYST( 1980, lafootb, 0, 0, lafootb, lafootb, lafootb_state, empty_init, "Mattel Electronics", "Look Alive! Football", MACHINE_SUPPORTS_SAVE )
|
||||
SYST( 1981, mdallas, 0, 0, mdallas, mdallas, mdallas_state, empty_init, "Mattel Electronics", "Dalla$ (J.R. handheld)", MACHINE_SUPPORTS_SAVE ) // ***
|
||||
|
||||
SYST( 1980, minspacep, 0, 0, minspace, minspace, minspace_state, empty_init, "Mego", "Invasion From Space (patent)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
SYST( 1980, plus1, 0, 0, plus1, plus1, plus1_state, empty_init, "Milton Bradley", "Plus One", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_CONTROLS ) // ***
|
||||
SYST( 1981, lightfgt, 0, 0, lightfgt, lightfgt, lightfgt_state, empty_init, "Milton Bradley", "Electronic Lightfight: The Games of Dueling Lights", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
SYST( 1982, bshipg, bship, 0, bshipg, bshipg, bshipg_state, empty_init, "Milton Bradley", "Electronic Battleship (COP420 version, Rev. G)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
|
||||
|
@ -1623,14 +1623,14 @@ ROM_END
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
class invspace_state : public hh_ucom4_state
|
||||
class einspace_state : public hh_ucom4_state
|
||||
{
|
||||
public:
|
||||
invspace_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
einspace_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
hh_ucom4_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void invspace(machine_config &config);
|
||||
void einspace(machine_config &config);
|
||||
|
||||
private:
|
||||
void update_display();
|
||||
@ -1640,12 +1640,12 @@ private:
|
||||
|
||||
// handlers
|
||||
|
||||
void invspace_state::update_display()
|
||||
void einspace_state::update_display()
|
||||
{
|
||||
m_display->matrix(m_grid, m_plate);
|
||||
}
|
||||
|
||||
void invspace_state::grid_w(offs_t offset, u8 data)
|
||||
void einspace_state::grid_w(offs_t offset, u8 data)
|
||||
{
|
||||
// I0: speaker out
|
||||
if (offset == PORTI)
|
||||
@ -1657,7 +1657,7 @@ void invspace_state::grid_w(offs_t offset, u8 data)
|
||||
update_display();
|
||||
}
|
||||
|
||||
void invspace_state::plate_w(offs_t offset, u8 data)
|
||||
void einspace_state::plate_w(offs_t offset, u8 data)
|
||||
{
|
||||
// E,F,G,H123: vfd plate
|
||||
int shift = (offset - PORTE) * 4;
|
||||
@ -1667,7 +1667,7 @@ void invspace_state::plate_w(offs_t offset, u8 data)
|
||||
|
||||
// inputs
|
||||
|
||||
static INPUT_PORTS_START( invspace )
|
||||
static INPUT_PORTS_START( einspace )
|
||||
PORT_START("IN.0") // port A
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START )
|
||||
@ -1682,19 +1682,19 @@ INPUT_PORTS_END
|
||||
|
||||
// config
|
||||
|
||||
void invspace_state::invspace(machine_config &config)
|
||||
void einspace_state::einspace(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
NEC_D552(config, m_maincpu, 400_kHz_XTAL);
|
||||
m_maincpu->read_a().set_ioport("IN.0");
|
||||
m_maincpu->read_b().set_ioport("IN.1");
|
||||
m_maincpu->write_c().set(FUNC(invspace_state::grid_w));
|
||||
m_maincpu->write_d().set(FUNC(invspace_state::grid_w));
|
||||
m_maincpu->write_e().set(FUNC(invspace_state::plate_w));
|
||||
m_maincpu->write_f().set(FUNC(invspace_state::plate_w));
|
||||
m_maincpu->write_g().set(FUNC(invspace_state::plate_w));
|
||||
m_maincpu->write_h().set(FUNC(invspace_state::plate_w));
|
||||
m_maincpu->write_i().set(FUNC(invspace_state::grid_w));
|
||||
m_maincpu->write_c().set(FUNC(einspace_state::grid_w));
|
||||
m_maincpu->write_d().set(FUNC(einspace_state::grid_w));
|
||||
m_maincpu->write_e().set(FUNC(einspace_state::plate_w));
|
||||
m_maincpu->write_f().set(FUNC(einspace_state::plate_w));
|
||||
m_maincpu->write_g().set(FUNC(einspace_state::plate_w));
|
||||
m_maincpu->write_h().set(FUNC(einspace_state::plate_w));
|
||||
m_maincpu->write_i().set(FUNC(einspace_state::grid_w));
|
||||
|
||||
// video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
|
||||
@ -1712,12 +1712,12 @@ void invspace_state::invspace(machine_config &config)
|
||||
|
||||
// roms
|
||||
|
||||
ROM_START( invspace )
|
||||
ROM_START( einspace )
|
||||
ROM_REGION( 0x0400, "maincpu", 0 )
|
||||
ROM_LOAD( "d552c_054", 0x0000, 0x0400, CRC(913d9c13) SHA1(f20edb5458e54d2f6d4e45e5d59efd87e05a6f3f) )
|
||||
|
||||
ROM_REGION( 110894, "screen", 0)
|
||||
ROM_LOAD( "invspace.svg", 0, 110894, CRC(1ec324b8) SHA1(847621c7d6c10b254b715642d63efc9c30a701c1) )
|
||||
ROM_LOAD( "einspace.svg", 0, 110894, CRC(1ec324b8) SHA1(847621c7d6c10b254b715642d63efc9c30a701c1) )
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -3354,7 +3354,7 @@ SYST( 1982, bcclimbr, 0, 0, bcclimbr, bcclimbr, bcclimbr_state, empt
|
||||
SYST( 1980, tactix, 0, 0, tactix, tactix, tactix_state, empty_init, "Castle Toy", "Tactix (Castle Toy)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
SYST( 1980, ctntune, 0, 0, ctntune, ctntune, ctntune_state, empty_init, "Castle Toy", "Name That Tune (Castle Toy)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // ***
|
||||
|
||||
SYST( 1980, invspace, 0, 0, invspace, invspace, invspace_state, empty_init, "Epoch", "Invader From Space", MACHINE_SUPPORTS_SAVE )
|
||||
SYST( 1980, einspace, 0, 0, einspace, einspace, einspace_state, empty_init, "Epoch", "Invader From Space", MACHINE_SUPPORTS_SAVE )
|
||||
SYST( 1980, efball, 0, 0, efball, efball, efball_state, empty_init, "Epoch", "Electronic Football (Epoch)", MACHINE_SUPPORTS_SAVE )
|
||||
SYST( 1981, galaxy2, 0, 0, galaxy2, galaxy2, galaxy2_state, empty_init, "Epoch", "Galaxy II (VFD Rev. D)", MACHINE_SUPPORTS_SAVE )
|
||||
SYST( 1981, galaxy2b, galaxy2, 0, galaxy2b, galaxy2, galaxy2_state, empty_init, "Epoch", "Galaxy II (VFD Rev. B)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -18670,11 +18670,11 @@ lightfgt // Milton Bradley
|
||||
lilcomp // Texas Instruments
|
||||
mbaskb2 // Mattel
|
||||
mdallas // Mattel
|
||||
minspacep // Mego
|
||||
msoccer2 // Mattel
|
||||
plus1 // Milton Bradley
|
||||
qkracera // National Semiconductor
|
||||
solution // SCAT
|
||||
unkeinv // Gordon Barlow Design
|
||||
vidchal // Select Merchandise
|
||||
|
||||
@source:handheld/hh_cops1.cpp
|
||||
@ -19082,10 +19082,10 @@ bmsoccer // Bambino
|
||||
ctntune // Castle Toy
|
||||
edracula // Epoch
|
||||
efball // Epoch
|
||||
einspace // Epoch
|
||||
galaxy2 // Epoch
|
||||
galaxy2b // Epoch
|
||||
grobot9 // Gakken
|
||||
invspace // Epoch
|
||||
mcompgin // Mattel
|
||||
mvbfree // Mego
|
||||
splasfgt // Bambino
|
||||
|
Loading…
Reference in New Issue
Block a user