New working machine added

--------
Invader (Gakken, cyan version) [hap, Sean Riddle, hydef]

(game works, SVG is still WIP)
This commit is contained in:
hap 2019-04-06 13:01:43 +02:00
parent 1567d09701
commit ba9b483bbb
2 changed files with 133 additions and 1 deletions

View File

@ -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 )

View File

@ -15219,6 +15219,7 @@ esoccer // Entex
f2pbball // Fonas
f3in1 // Fonas
fxmcr165 // Gakken
ginv // Gakken
ginv1000 // Gakken
ginv2000 // Gakken
gjackpot // Gakken