diff --git a/src/mame/drivers/8080bw.c b/src/mame/drivers/8080bw.c index f236b46bcb3..a01c27705c4 100644 --- a/src/mame/drivers/8080bw.c +++ b/src/mame/drivers/8080bw.c @@ -1042,6 +1042,12 @@ MACHINE_CONFIG_END /*******************************************************/ /* */ /* Universal "Cosmic Monsters" */ +/* The dipswitches are as stated in the manual, but */ +/* some of them are incorrect. */ +/* - You need at the very least 3000 points to get */ +/* a bonus life. */ +/* - The cabinet switch does nothing in the cpu, it */ +/* is all done by wires. */ /* */ /*******************************************************/ @@ -1063,14 +1069,58 @@ static INPUT_PORTS_START( cosmicmo ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4") PORT_DIPSETTING( 0x00, "1500" ) PORT_DIPSETTING( 0x08, "2500" ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8") PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) -// PORT_MODIFY(CABINET_PORT_TAG) -// PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_MODIFY(CABINET_PORT_TAG) + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) INPUT_PORTS_END +WRITE8_MEMBER(_8080bw_state::cosmicmo_05_w) +{ + invaders_audio_2_w(space, offset, data); + m_flip_screen = BIT(data, 5) & BIT(ioport("IN2")->read(), 2); +} + +static ADDRESS_MAP_START( cosmicmo_io_map, AS_IO, 8, _8080bw_state ) + ADDRESS_MAP_GLOBAL_MASK(0x7) + AM_RANGE(0x00, 0x00) AM_MIRROR(0x04) AM_READ_PORT("IN0") + AM_RANGE(0x01, 0x01) AM_MIRROR(0x04) AM_READ_PORT("IN1") + AM_RANGE(0x02, 0x02) AM_MIRROR(0x04) AM_READ(invrvnge_02_r) + AM_RANGE(0x03, 0x03) AM_MIRROR(0x04) AM_DEVREAD_LEGACY("mb14241", mb14241_shift_result_r) + + AM_RANGE(0x02, 0x02) AM_DEVWRITE_LEGACY("mb14241", mb14241_shift_count_w) + AM_RANGE(0x03, 0x03) AM_WRITE(invaders_audio_1_w) + AM_RANGE(0x04, 0x04) AM_DEVWRITE_LEGACY("mb14241", mb14241_shift_data_w) + AM_RANGE(0x05, 0x05) AM_WRITE(cosmicmo_05_w) + AM_RANGE(0x06, 0x06) AM_WRITE(watchdog_reset_w) +ADDRESS_MAP_END + +static MACHINE_CONFIG_DERIVED_CLASS( cosmicmo, mw8080bw_root, _8080bw_state ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_IO_MAP(cosmicmo_io_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", _8080bw_state, irq0_line_hold) + + MCFG_MACHINE_START_OVERRIDE(_8080bw_state,extra_8080bw) + + MCFG_WATCHDOG_VBLANK_INIT(255) + + /* add shifter */ + MCFG_MB14241_ADD("mb14241") + + /* sound hardware */ + MCFG_FRAGMENT_ADD(invaders_audio) + + /* video hardware */ + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_invaders) +MACHINE_CONFIG_END /*******************************************************/ @@ -3747,6 +3797,8 @@ ROM_START( cosmicmo ) ROM_LOAD( "cosmicmo.5", 0x4000, 0x0400, CRC(b13f228e) SHA1(a0de05aa36435e72c77f5333f3ad964ec448a8f0) ) ROM_LOAD( "cosmicmo.6", 0x4400, 0x0400, CRC(4ae1b9c4) SHA1(8eed87eebe68caa775fa679363b0fe3728d98c34) ) ROM_LOAD( "cosmicmo.7", 0x4800, 0x0400, CRC(6a13b15b) SHA1(dc03a6c3e938cfd08d16bd1660899f951ba72ea2) ) + +/* The manual says it uses color TV components, which means that proms need dumping */ ROM_END ROM_START( cosmicm2 ) @@ -4277,8 +4329,8 @@ GAMEL(1978, invadrmr, invaders, invaders, invadrmr, driver_device, 0, ROT270 GAMEL(1978, invaderl, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Logitec", "Space Invaders (Logitec)", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1978, spcewars, invaders, spcewars, spcewars, driver_device, 0, ROT270, "Taito / Sanritsu", "Space War (Sanritsu)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1978, spceking, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Leijac Corporation", "Space King", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? -GAMEL(1979, cosmicmo, invaders, invaders, cosmicmo, driver_device, 0, ROT270, "Taito / Universal", "Cosmic Monsters", GAME_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg? -GAMEL(1979, cosmicm2, invaders, invaders, cosmicmo, driver_device, 0, ROT270, "Taito / Universal", "Cosmic Monsters 2", GAME_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg? +GAMEL(1979, cosmicmo, invaders, cosmicmo, cosmicmo, driver_device, 0, ROT270, "Taito / Universal", "Cosmic Monsters", GAME_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg? +GAMEL(1979, cosmicm2, invaders, cosmicmo, cosmicmo, driver_device, 0, ROT270, "Taito / Universal", "Cosmic Monsters 2", GAME_SUPPORTS_SAVE, layout_cosmicm ) // unclassified, licensed or bootleg? GAMEL(1980?,sinvzen, invaders, invaders, sinvzen, driver_device, 0, ROT270, "Taito / Zenitone-Microsec Ltd.", "Super Invaders (Zenitone-Microsec)", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1980, ultrainv, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Konami", "Ultra Invaders", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg? GAMEL(1978, spaceatt, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders ) diff --git a/src/mame/includes/8080bw.h b/src/mame/includes/8080bw.h index 35f3a0e9c43..ac6c60545d2 100644 --- a/src/mame/includes/8080bw.h +++ b/src/mame/includes/8080bw.h @@ -57,6 +57,7 @@ public: DECLARE_WRITE8_MEMBER(spcewars_sh_port_w); DECLARE_WRITE8_MEMBER(lrescue_sh_port_1_w); DECLARE_WRITE8_MEMBER(lrescue_sh_port_2_w); + DECLARE_WRITE8_MEMBER(cosmicmo_05_w); DECLARE_WRITE8_MEMBER(cosmo_sh_port_2_w); DECLARE_READ8_MEMBER(darthvdr_01_r); DECLARE_WRITE8_MEMBER(darthvdr_00_w);