summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/8080bw.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/8080bw.cpp')
-rw-r--r--src/mame/drivers/8080bw.cpp111
1 files changed, 91 insertions, 20 deletions
diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp
index 48bf062c00b..1afa1d26777 100644
--- a/src/mame/drivers/8080bw.cpp
+++ b/src/mame/drivers/8080bw.cpp
@@ -313,7 +313,6 @@ static INPUT_PORTS_START( sicv )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
->>>>>>> upstream/master
/*******************************************************/
@@ -1379,32 +1378,104 @@ void _8080bw_state::cosmicmo(machine_config &config)
/* */
/*******************************************************/
+void invasion_state::io_map(address_map &map)
+{
+ map.global_mask(0x7);
+
+ map(0x00, 0x00).mirror(0x04).portr("IN0");
+ map(0x01, 0x01).mirror(0x04).portr("IN1");
+ map(0x02, 0x02).mirror(0x04).portr("IN2");
+ map(0x03, 0x03).mirror(0x04).portr("IN3");
+
+ map(0x03, 0x03).w("soundboard", FUNC(invaders_audio_device::p1_w));
+ map(0x05, 0x05).w("soundboard", FUNC(invaders_audio_device::p2_w));
+ map(0x06, 0x06).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
+}
+
+
static INPUT_PORTS_START( invasion )
- PORT_INCLUDE( sicv_base )
+ // * DIP switch defaults confirmed from manual.
+ // * Tilt/slam switch causes a watchdog reset - it isn't handled in software.
+ // * Coin counter is driven by logic connected to the coin inputs, not software.
+ // * The code supports cocktail cabinets, but Sidam apparently made no boards with the necessary inputs/outputs.
- PORT_MODIFY("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_START("IN0")
+ PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW1:8" )
+ PORT_DIPUNUSED_DIPLOC( 0x02, 0x00, "SW1:7" )
+ PORT_DIPUNUSED_DIPLOC( 0x04, 0x00, "SW1:6" )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // floating
+ PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(invaders_state, invaders_in1_control_r)
+ PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW1:5" )
- PORT_MODIFY("IN2")
- /* SW1:5-8 Unused according to manual. */
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,3") /* Default is OFF, OFF (6) */
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) // pulled high via a 1k resistor
+ PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(invaders_state, invaders_in1_control_r)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,3")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x03, "6" )
- PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW1:8" ) /* Default OFF */
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:2") /* Default is ON (2500) */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // tied to ground
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x08, "1500" )
PORT_DIPSETTING( 0x00, "2500" )
- /* SW1:5,6,7 Default ON */
- PORT_DIPNAME( 0x80, 0x80, "Laser Bonus Info" ) PORT_DIPLOCATION("SW1:1") /* Default is OFF (Info on) */
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(invaders_state, invaders_in1_control_r)
+ PORT_DIPNAME( 0x80, 0x80, "Laser Bonus Info" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ /*
+ Bit 1 connected to pin 12B on edge connector, called "SPARE" in SIDAM user
+ manual. CPU halted on boot if high.
+
+ Bit 2 Coin counter protection: If coin counter is disconnected, the game
+ stops. Described in the SIDAM user manual:
+
+ 4. Protezione contatore: il microprocessore controlla che il contatore
+ sia inserito e funzioni regolarmente. Nel caso il contatore venga
+ staccato il programma si arresta e non riprende finchè il contatore non
+ viene regolar-mente ricollegato.
+
+ Driven by a transistor connected between pins 16A and 22A on the edge
+ connector. Handled by the code at address $0079.
+ */
+ PORT_START("IN3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_TOGGLE PORT_NAME("Spare")
+ PORT_CONFNAME( 0x04, 0x04, "Coin counter" )
+ PORT_CONFSETTING( 0x00, "Disconnected" )
+ PORT_CONFSETTING( 0x04, "Connected" )
+ PORT_BIT( 0xf9, IP_ACTIVE_LOW, IPT_UNUSED ) // these bits all go to unpopulated RRC networks
+
+ // P1 controls (connected to IN0, IN1 and IN2)
+ INVADERS_CONTROL_PORT_P1
INPUT_PORTS_END
+void invasion_state::invasion(machine_config &config)
+{
+ mw8080bw_root(config);
+
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_IO, &invasion_state::io_map);
+
+ // 60 Hz signal clocks two cascaded 'LS161s, terminal count output resets the CPU
+ WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 255);
+
+ // video hardware
+ m_screen->set_screen_update(FUNC(invasion_state::screen_update_invaders));
+
+ // wrong - Sidam Invasion uses totally redesigned sound hardware
+ INVADERS_AUDIO(config, "soundboard");
+}
+
#endif
+
/*******************************************************/
/* */
/* bootleg "Super Invaders" */
@@ -5844,12 +5915,12 @@ GAMEL(1978, cosmicin, invaders, invaders, sicv, sisv_state, empty_i
GAMEL(1978, galmonst, invaders, invaders, sicv, sisv_state, empty_init, ROT270, "bootleg (Laguna S.A.)", "Galaxy Monsters (Laguna S.A. Spanish bootleg of Space Invaders)", MACHINE_SUPPORTS_SAVE, layout_invaders )
GAMEL(1979, spacecom, invaders, spacecom, spacecom, spacecom_state, init_spacecom, ROT270, "bootleg", "Space Combat (bootleg of Space Invaders)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_spacecom )
GAME( 1978, spacerng, invaders, spacerng, sitv, _8080bw_state, empty_init, ROT90, "bootleg (Leisure Time Electronics)", "Space Ranger", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // Many modifications
-GAMEL(19??, invasion, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg (Sidam)", "Invasion (Sidam)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
-GAMEL(1979, invasiona, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, newer set)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // Has Sidam replaced with 'UFO Monster Attack' and standard GFX
-GAMEL(1979, invasiona2, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, older set)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // Has Sidam replaced with 'UFO Monster Attack' and standard GFX
-GAMEL(1979, invasionb, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg", "Invasion (Italian bootleg)", MACHINE_SUPPORTS_SAVE, layout_invaders )
-GAMEL(1979, invasionrz, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 1, R Z SRL Bologna)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_invaders )
-GAMEL(1979, invasionrza, invaders, invaders, invasion, invaders_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 2, R Z SRL Bologna)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING, layout_invaders )
+GAMEL(19??, invasion, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg (Sidam)", "Invasion (Sidam)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
+GAMEL(1979, invasiona, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, newer set)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders ) // Has Sidam replaced with 'UFO Monster Attack' and standard GFX
+GAMEL(1979, invasiona2, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg", "UFO Robot Attack (bootleg of Invasion, older set)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders ) // Has Sidam replaced with 'UFO Monster Attack' and standard GFX
+GAMEL(1979, invasionb, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg", "Invasion (Italian bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
+GAMEL(1979, invasionrz, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 1, R Z SRL Bologna)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
+GAMEL(1979, invasionrza, invaders, invasion, invasion, invasion_state, empty_init, ROT270, "bootleg (R Z SRL Bologna)", "Invasion (bootleg set 2, R Z SRL Bologna)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_invaders )
GAMEL(19??, invadersem, invaders, invaders, sitv, sisv_state, empty_init, ROT270, "Electromar", "Space Invaders (Electromar, Spanish)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // Possibly licensed
GAMEL(1978, superinv, invaders, invaders, superinv, invaders_state, empty_init, ROT270, "bootleg", "Super Invaders (bootleg set 1)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // Not related to Zenitone-Microsec version
GAMEL(1978, sinvemag, invaders, invaders, sinvemag, invaders_state, empty_init, ROT270, "bootleg (Emag)", "Super Invaders (bootleg set 2)", MACHINE_SUPPORTS_SAVE, layout_invaders ) // Not related to Zenitone-Microsec version