From 0e1266a4d6dfdfd1fb9d966dcf3d80013dbce4bf Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 2 Jul 2023 11:35:23 +0200 Subject: unkeinv: identified game as Mego Invasion From Space [Sly DC] --- src/mame/handheld/hh_cop400.cpp | 252 ++++++++++++++++++++-------------------- src/mame/handheld/hh_ucom4.cpp | 36 +++--- src/mame/layout/minspace.lay | 86 ++++++++++++++ src/mame/layout/unkeinv.lay | 86 -------------- src/mame/mame.lst | 4 +- 5 files changed, 232 insertions(+), 232 deletions(-) create mode 100644 src/mame/layout/minspace.lay delete mode 100644 src/mame/layout/unkeinv.lay diff --git a/src/mame/handheld/hh_cop400.cpp b/src/mame/handheld/hh_cop400.cpp index 6976374fca3..bbab0436cc1 100644 --- a/src/mame/handheld/hh_cop400.cpp +++ b/src/mame/handheld/hh_cop400.cpp @@ -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 ) // *** diff --git a/src/mame/handheld/hh_ucom4.cpp b/src/mame/handheld/hh_ucom4.cpp index aca5c412fa4..6e3fde04fb5 100644 --- a/src/mame/handheld/hh_ucom4.cpp +++ b/src/mame/handheld/hh_ucom4.cpp @@ -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 ) diff --git a/src/mame/layout/minspace.lay b/src/mame/layout/minspace.lay new file mode 100644 index 00000000000..88d5c108f77 --- /dev/null +++ b/src/mame/layout/minspace.lay @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/unkeinv.lay b/src/mame/layout/unkeinv.lay deleted file mode 100644 index 88d5c108f77..00000000000 --- a/src/mame/layout/unkeinv.lay +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c80b58408c9..4a94ece5b7d 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -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 -- cgit v1.2.3