From ff170ba3756ebe77df656f5f0580ffd22b61ddf1 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 25 Nov 2020 19:21:12 +0100 Subject: New working clones ------------------ Astro Ambush (Scramble bootleg on Galaxian hardware) [Genaro Rodarte, Guru] --- src/mame/drivers/galaxian.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++ src/mame/includes/galaxian.h | 2 + src/mame/mame.lst | 7 ++-- 3 files changed, 96 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index 1a88f14c384..e347e47733a 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -1796,6 +1796,29 @@ void galaxian_state::explorer_map(address_map &map) map(0x9000, 0x9000).mirror(0x0fff).w(FUNC(galaxian_state::explorer_sound_control_w)); } + +// map not derived from schematics +void galaxian_state::astroamb_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x47ff).ram(); + map(0x4800, 0x4bff).mirror(0x400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram"); + map(0x5000, 0x50ff).mirror(0x700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram"); + map(0x6000, 0x6000).portr("IN0"); + map(0x6004, 0x6007).w("cust", FUNC(galaxian_sound_device::lfo_freq_w)); + map(0x6800, 0x6800).portr("IN1"); + map(0x6800, 0x6807).w("cust", FUNC(galaxian_sound_device::sound_w)); + map(0x7000, 0x7000).portr("IN2"); + map(0x7001, 0x7001).w(FUNC(galaxian_state::irq_enable_w)); + map(0x7002, 0x7002).w(FUNC(galaxian_state::coin_count_0_w)); + map(0x7003, 0x7003).w(FUNC(galaxian_state::scramble_background_enable_w)); + map(0x7004, 0x7004).w(FUNC(galaxian_state::galaxian_stars_enable_w)); + map(0x7006, 0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); + map(0x7007, 0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); + map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w("cust", FUNC(galaxian_sound_device::pitch_w)); +} + /* map derived from schematics */ void galaxian_state::scobra_map(address_map &map) { @@ -4969,6 +4992,46 @@ static INPUT_PORTS_START( jungsub ) // TODO: are there more dip-switches? PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) INPUT_PORTS_END +static INPUT_PORTS_START( astroamb ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0xc0, "3") + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPSETTING( 0x80, "5" ) + PORT_DIPSETTING( 0x00, "255 (Cheat)" ) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // PCB has 1 8-dip bank so one between 0x10 and 0x80 can't be. Arbitrarily choosing 0x80 +INPUT_PORTS_END + static INPUT_PORTS_START( strfbomb ) PORT_INCLUDE(scramble) @@ -6608,6 +6671,15 @@ void galaxian_state::takeoff(machine_config &config) // Sidam 10900, with 1 x AY ay8912.add_route(ALL_OUTPUTS, "speaker", 0.25); } +void galaxian_state::astroamb(machine_config &config) +{ + galaxian(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::astroamb_map); + + // PCB only has discrete sound hardware, Galaxian-like +} + void galaxian_state::amigo2(machine_config &config) // marked "AMI", but similar to above { sidam_bootleg_base(config); @@ -12325,6 +12397,23 @@ ROM_START( bomber ) ROM_LOAD( "c01s.6e", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) ) // q.9c on pcb ROM_END +ROM_START( astroamb ) // ROMs verified on two different PCBs + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.sub", 0x0000, 0x1000, CRC(99533fcd) SHA1(859414e70dcde452b1ddfc68e7bc3298c1a410ba) ) + ROM_LOAD( "2.7h", 0x1000, 0x1000, CRC(45fd250d) SHA1(097c5ed58ebe58eb01fc337b401c10ce2cef7cef) ) + ROM_LOAD( "3.7k", 0x2000, 0x1000, CRC(d67eedde) SHA1(7fc637664566034aff8d6800980434a3ff71bc72) ) + ROM_LOAD( "4.7l", 0x3000, 0x1000, CRC(e4b038fd) SHA1(2a1ce890f7231c2f06b6ee1a8d4e97190b6265ed) ) + + ROM_REGION( 0x1000, "gfx1", 0 ) + ROM_LOAD( "a.1h", 0x0000, 0x0800, CRC(72e5ca44) SHA1(263b05f8607c325ac9d07e6d86b26de9a6907295) ) // 1ST AND 2ND HALF IDENTICAL + ROM_IGNORE( 0x0800 ) + ROM_LOAD( "b.1l", 0x0800, 0x0800, CRC(d3846f2b) SHA1(57de9a2917bc92707408164c8e23cc2d3181bb0d) ) // 1ST AND 2ND HALF IDENTICAL + ROM_IGNORE( 0x0800 ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "82s123.6l", 0x0000, 0x0020, CRC(4e3caeab) SHA1(a25083c3e36d28afdefe4af6e6d4f3155e303625) ) +ROM_END + ROM_START( scorpion ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "1.2d", 0x0000, 0x1000, CRC(ba1219b4) SHA1(33c7843dba44152a8bc3223ea0c30b13609b80ba) ) @@ -13480,6 +13569,7 @@ GAME( 1981, scramblebb, scramble, scramble, scramble, galaxian_state, init_ GAME( 1981, scramblebun, scramble, scramble, scramble, galaxian_state, init_scramble, ROT90, "bootleg", "Scramble (unknown bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // irq isn't enabled correctly GAME( 1981, kamikazesp, scramble, scramble, scramble, galaxian_state, init_scramble, ROT90, "bootleg (Euromatic S.A.)", "Kamikaze (Euromatic S.A., Spanish bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) GAME( 198?, bomber, scramble, scramble, scramble, galaxian_state, init_scramble, ROT90, "bootleg (Alca)", "Bomber (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, astroamb, scramble, astroamb, astroamb, galaxian_state, init_scramble, ROT90, "bootleg (U.C.E.)", "Astro Ambush (Scramble bootleg on Galaxian hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // uses the same sound implementation as Galaxian, might differ GAME( 1981, atlantis, 0, theend, atlantis, galaxian_state, init_atlantis, ROT90, "Comsoft", "Battle of Atlantis (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, atlantis2, atlantis, theend, atlantis, galaxian_state, init_atlantis, ROT90, "Comsoft", "Battle of Atlantis (set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index 999c436a774..7c616ee6682 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -353,12 +353,14 @@ public: void scorpnmc(machine_config &config); void fourplay(machine_config &config); void videight(machine_config &config); + void astroamb(machine_config &config); protected: void amigo2_map(address_map &map); void anteaterg_map(address_map &map); void anteatergg_map(address_map &map); void anteateruk_map(address_map &map); + void astroamb_map(address_map &map); void checkmaj_sound_map(address_map &map); void checkman_sound_map(address_map &map); void checkman_sound_portmap(address_map &map); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ed54f45c7c8..b46af9869cd 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14176,6 +14176,7 @@ armorcar // (c) 1981 Stern armorcar2 // (c) 1981 Stern asideral // bootleg astrians // +astroamb // bootleg ataqandr // bootleg (FAR S.A.) atlantis // (c) 1981 Comsoft atlantis2 // (c) 1981 Comsoft @@ -38401,7 +38402,7 @@ cdlyoko dnv200fs m505neo m521neo -mywicodx +mywicodx mywicogt oplayer zon32bit @@ -38444,7 +38445,7 @@ zone100 // lx_jg7415 // lx_jg7410 zonemini -react +react @source:spiders.cpp spiders // (c) 1981 Sigma Ent. Inc. @@ -42765,7 +42766,7 @@ mu100r // 1997 MU-100 Rackable version mu100b // 1998 MU-100B @source:ympsr340.cpp -psr340 // 1999 PSR-340 +psr340 // 1999 PSR-340 @source:ymtx81z.cpp tx81z // -- cgit v1.2.3