From ba9b483bbbb422fcc574b86a2e693657cded9d92 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 6 Apr 2019 13:01:43 +0200 Subject: New working machine added -------- Invader (Gakken, cyan version) [hap, Sean Riddle, hydef] (game works, SVG is still WIP) --- src/mame/drivers/hh_tms1k.cpp | 133 +++++++++++++++++++++++++++++++++++++++++- src/mame/mame.lst | 1 + 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 3a650e9cd06..7847b2d0842 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -59,6 +59,7 @@ @MP1604 TMS1370 1982, Gakken Invader 2000/Tandy Cosmic Fire Away 3000 @MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152) @MP2105 TMS1370 1979, Gakken/Entex Poker (6005) + @MP2110 TMS1370 1980, Gakken Invader/Tandy Fire Away @MP2139 TMS1370 1981, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away @MP2726 TMS1040 1979, Tomy Break Up *MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable) @@ -4857,7 +4858,136 @@ ROM_END /*************************************************************************** - Gakken Galaxy Invader 1000 + Gakken Invader + * PCB label GAKKEN, INVADER, KS-00779 + * TMS1370 MP2110 + * cyan VFD display Itron? CP5008A, 1-bit sound + + known releases: + - World: Invader + - USA(1): Galaxy Invader, published by CGL + - USA(2): Fire Away, published by Tandy + - USA(3): Electron Blaster, published by Vanity Fair + + On the real thing, the joystick is "sticky"(it doesn't autocenter when you let go). + There's also a version with a cyan/red VFD, possibly the same ROM. + +***************************************************************************/ + +class ginv_state : public hh_tms1k_state +{ +public: + ginv_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_tms1k_state(mconfig, type, tag) + { } + + void prepare_display(); + virtual DECLARE_WRITE16_MEMBER(write_r); + virtual DECLARE_WRITE16_MEMBER(write_o); + virtual DECLARE_READ8_MEMBER(read_k); + void ginv(machine_config &config); +}; + +// handlers + +void ginv_state::prepare_display() +{ + display_matrix(12, 9, m_plate, m_grid); +} + +WRITE16_MEMBER(ginv_state::write_r) +{ + // R9,R10: input mux + m_inp_mux = data >> 9 & 3; + + // R15: speaker out + m_speaker->level_w(data >> 15 & 1); + + // R0-R8: VFD grid + // R11-R14: VFD plate + m_grid = data & 0x1ff; + m_plate = (m_plate & 0xff) | (data >> 3 & 0xf00); + prepare_display(); +} + +WRITE16_MEMBER(ginv_state::write_o) +{ + // O0-O7: VFD plate + m_plate = (m_plate & ~0xff) | data; + prepare_display(); +} + +READ8_MEMBER(ginv_state::read_k) +{ + // K1-K4: multiplexed inputs (K8 is fire button) + return m_inp_matrix[2]->read() | read_inputs(2); +} + +// config + +static INPUT_PORTS_START( ginv ) + PORT_START("IN.0") // R9 + PORT_CONFNAME( 0x07, 0x02, DEF_STR( Difficulty ) ) + PORT_CONFSETTING( 0x01, "1" ) + PORT_CONFSETTING( 0x02, "2" ) + PORT_CONFSETTING( 0x04, "3" ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.1") // R10 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x04, 0x04, IPT_CUSTOM ) PORT_CONDITION("IN.1", 0x03, EQUALS, 0x00) // joystick centered + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("IN.2") // K8 + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) +INPUT_PORTS_END + +void ginv_state::ginv(machine_config &config) +{ + /* basic machine hardware */ + TMS1370(config, m_maincpu, 340000); // approximation - RC osc. R=47K, C=47pF + m_maincpu->k().set(FUNC(ginv_state::read_k)); + m_maincpu->r().set(FUNC(ginv_state::write_r)); + m_maincpu->o().set(FUNC(ginv_state::write_o)); + + /* video hardware */ + /* screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_svg_region("svg"); + screen.set_refresh_hz(50); + screen.set_size(226, 1080); + screen.set_visarea_full(); */ + + TIMER(config, "display_decay").configure_periodic(FUNC(hh_tms1k_state::display_decay_tick), attotime::from_msec(1)); + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + SPEAKER_SOUND(config, m_speaker); + m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25); +} + +// roms + +ROM_START( ginv ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "mp2110", 0x0000, 0x0800, CRC(f09c5588) SHA1(06eb8ed512eaf5367ea30c2b633219e105ddfd14) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) + ROM_REGION( 365, "maincpu:opla", 0 ) + ROM_LOAD( "tms1100_ginv_output.pla", 0, 365, CRC(6e33a24e) SHA1(cdf7ecf12ddd3863e6301e20fe80f9737db429e5) ) + + //ROM_REGION( 226185, "svg", 0) + //ROM_LOAD( "ginv.svg", 0, 226185, CRC(1e1bafd1) SHA1(15868ef0c9dadbf537fed0e2d846451ba99fab7b) ) +ROM_END + + + + + +/*************************************************************************** + + Gakken Invader 1000 * TMS1370 MP2139 (die label 1170 MP2139) * cyan/red VFD display Futaba DM-25Z 2D, 1-bit sound @@ -10388,6 +10518,7 @@ CONS( 1979, f3in1, 0, 0, f3in1, f3in1, f3in1_state, emp CONS( 1979, gpoker, 0, 0, gpoker, gpoker, gpoker_state, empty_init, "Gakken", "Poker (Gakken, 1979 version)", MACHINE_SUPPORTS_SAVE ) CONS( 1980, gjackpot, 0, 0, gjackpot, gjackpot, gjackpot_state, empty_init, "Gakken", "Jackpot: Gin Rummy & Black Jack", MACHINE_SUPPORTS_SAVE ) +CONS( 1981, ginv, 0, 0, ginv, ginv, ginv_state, empty_init, "Gakken", "Invader (Gakken, cyan version)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, ginv1000, 0, 0, ginv1000, ginv1000, ginv1000_state, empty_init, "Gakken", "Galaxy Invader 1000", MACHINE_SUPPORTS_SAVE ) CONS( 1982, ginv2000, 0, 0, ginv2000, ginv2000, ginv2000_state, empty_init, "Gakken", "Invader 2000", MACHINE_SUPPORTS_SAVE ) COMP( 1983, fxmcr165, 0, 0, fxmcr165, fxmcr165, fxmcr165_state, empty_init, "Gakken", "FX-Micom R-165", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c77cdb4b403..ecc3ea81f03 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15219,6 +15219,7 @@ esoccer // Entex f2pbball // Fonas f3in1 // Fonas fxmcr165 // Gakken +ginv // Gakken ginv1000 // Gakken ginv2000 // Gakken gjackpot // Gakken -- cgit v1.2.3