diff options
Diffstat (limited to 'src/mame/drivers/8080bw.cpp')
-rw-r--r-- | src/mame/drivers/8080bw.cpp | 111 |
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 |