From 59de6f2e0a571f1d898e6152f79b2bfc96722ade Mon Sep 17 00:00:00 2001 From: ClawGrip Date: Sat, 28 Sep 2024 16:15:55 +0200 Subject: Add skeletons for three new bootlegs on Modular System (#12791) New clones marked not working ----------------------------- Last Duel (Modular System) [Museo del Recreativo, Recreativas.org] Power Spikes (Modular System) [Museo del Recreativo, Recreativas.org] Twin Cobra (Modular System) [Museo del Recreativo, Recreativas.org] --- src/mame/atari/badlands_ms.cpp | 5 +- src/mame/capcom/lastduel_ms.cpp | 182 +++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 9 ++ src/mame/toaplan/twincobr_ms.cpp | 179 ++++++++++++++++++++++++++++++++++++++ src/mame/vsystem/pspikes_ms.cpp | 181 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 553 insertions(+), 3 deletions(-) create mode 100644 src/mame/capcom/lastduel_ms.cpp create mode 100644 src/mame/toaplan/twincobr_ms.cpp create mode 100644 src/mame/vsystem/pspikes_ms.cpp diff --git a/src/mame/atari/badlands_ms.cpp b/src/mame/atari/badlands_ms.cpp index 12fe2db28b7..fa201863291 100644 --- a/src/mame/atari/badlands_ms.cpp +++ b/src/mame/atari/badlands_ms.cpp @@ -2,13 +2,12 @@ // copyright-holders: /* - Bad Lands(Modular System) + Bad Lands (Modular System) As with most of the 'Modular System' setups, the hardware is heavily modified from the original and consists of a multi-board stack in a cage, hence different driver. - This set was assembled from a stack of loose PCBs, so for this game the Modular System cage contains - at least 6 main boards and 1 sub board, but may be more. + For this game the Modular System cage contains 6 main boards and 1 sub board. MOD-6/1 - MC68000P10, 4 ROMs, RAMs, 20 MHz XTAL. MOD 1/4 - Sound board (Z8400BB1, 2 x YM2203C). 2 8-dips banks + small sub board with OKI M5205. diff --git a/src/mame/capcom/lastduel_ms.cpp b/src/mame/capcom/lastduel_ms.cpp new file mode 100644 index 00000000000..952d441fd84 --- /dev/null +++ b/src/mame/capcom/lastduel_ms.cpp @@ -0,0 +1,182 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* + Last Duel (Modular System) + + As with most of the 'Modular System' setups, the hardware is heavily modified from the original + and consists of a multi-board stack in a cage, hence different driver. + + For this game the Modular System cage contains 7 main boards. + More information, dip switches and PCB pictures: https://www.recreativas.org/modular-system-last-duel-4358-gaelco-sa + + MOD-6/1 - MC68000P10, 6 ROMs, RAMs, 20 MHz XTAL. + MOD 1 - Sound board (Z8400BB1, 2 x YM2203C, 2 x Y3014), one EPROM, one PROM, two 8 dip switches banks. + MOD 4/2 - Tilemap board, has logic + 2 tilemap ROMs, long thin sub-board (C0459/I) with no chips, just routing along one edge. + MOD 4/3-A - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0460) with no chips, just routing along one edge. + MOD 4/3-B - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0461) with no chips, just routing along one edge. + MOD 51/3 - Sprite board, has logic, a PROM, and 4 ROMs. + MOD 21/1 - Logic, 28.000 MHz XTAL. + + TODO: + - everything, +*/ + + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "machine/gen_latch.h" +#include "sound/msm5205.h" +#include "sound/ymopn.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class lastduel_ms_state : public driver_device +{ +public: + lastduel_ms_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_screen(*this, "screen") + { } + + void lastduelm(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_maincpu; + required_device m_screen; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void main_map(address_map &map); +}; + + +uint32_t lastduel_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void lastduel_ms_state::machine_start() +{ +} + + +void lastduel_ms_state::main_map(address_map &map) +{ +} + + +static INPUT_PORTS_START( lastduelm ) + PORT_START("DSW") + PORT_DIPUNKNOWN_DIPLOC(0x0001, 0x0001, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x0002, 0x0002, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x0004, 0x0004, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x0008, 0x0008, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x0010, 0x0010, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x0020, 0x0020, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x0040, 0x0040, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x0080, 0x0080, "SW1:8") + PORT_DIPUNKNOWN_DIPLOC(0x0100, 0x0100, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x0200, 0x0200, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x0400, 0x0400, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x0800, 0x0800, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x1000, 0x1000, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x2000, 0x2000, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x4000, 0x4000, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x8000, 0x8000, "SW2:8") +INPUT_PORTS_END + + +void lastduel_ms_state::lastduelm(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 20_MHz_XTAL / 2); // divisor unknown + m_maincpu->set_addrmap(AS_PROGRAM, &lastduel_ms_state::main_map); + + Z80(config, "audiocpu", 20_MHz_XTAL / 5).set_disable(); // divisor unknown + + // video hardware + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // all wrong + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0, 256-32-1); + m_screen->set_screen_update(FUNC(lastduel_ms_state::screen_update)); + m_screen->set_palette("palette"); + + PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 256).set_membits(8); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + YM2203(config, "ym1", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown + + YM2203(config, "ym2", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown +} + +ROM_START( lastduelm ) + ROM_REGION( 0x100000, "maincpu", 0 ) // on MOD 6/1 board + ROM_LOAD16_BYTE( "mod_6-1_ld_603.ic17", 0x00000, 0x10000, CRC(c3403a02) SHA1(fbcaec5db6c7a06df2244f951b1943d9e40f539e) ) + ROM_LOAD16_BYTE( "mod_6-1_ld_606.ic8", 0x00001, 0x10000, CRC(290a3dc5) SHA1(9a4ca3b525d08505d96ad867dbd75b350a98fdfa) ) + ROM_LOAD16_BYTE( "mod_6-1_ld_601.ic26", 0x20000, 0x10000, CRC(429fb964) SHA1(78769b05e62c190d846dd08214427d1abbbe2bba) ) + ROM_LOAD16_BYTE( "mod_6-1_ld_604.ic25", 0x20001, 0x10000, CRC(6697615f) SHA1(c977d78f1d89034c0cb7f2f7e922a4d8f334fc70) ) + ROM_LOAD16_BYTE( "mod_6-1_ld_602.ic20", 0x40000, 0x10000, CRC(86bb19f9) SHA1(4c549a7cfaad60833a3e3bdd8aee5205cd81d1ff) ) // 1xxxxxxxxxxxxxxx = 0xFF + ROM_LOAD16_BYTE( "mod_6-1_ld_605.ic11", 0x40001, 0x10000, CRC(039740fa) SHA1(4ac50ffd4d6c080302204f83ace05c8b19a78452) ) // 1xxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x10000, "audiocpu", 0 ) // on MOD 1 board + ROM_LOAD( "mod_1_ld_101.ic12", 0x00000, 0x10000, CRC(6bc487c9) SHA1(23e757356894ec2ba5308c9fc9e27bb1e2fd8cad) ) + + ROM_REGION( 0x10000, "tiles1", 0 ) // on MOD 4/2 board + ROM_LOAD( "mod_4-2_ld_401.ic17", 0x00000, 0x08000, CRC(f8c8e903) SHA1(f5b390eaf48245e0a1b0c2c54df9777da97ac310) ) // 1ST AND 2ND HALF IDENTICAL + ROM_LOAD( "mod_4-2_ld_402.ic16", 0x08000, 0x08000, CRC(c1553eb6) SHA1(c92b234c4a748fb34eaa79ad6b60626652ba9877) ) // 1ST AND 2ND HALF IDENTICAL + + ROM_REGION( 0x80000, "tiles2", 0 ) // on MOD 4/3-A + ROM_LOAD( "mod_4-3_a_ld_4a01.ic17", 0x00000, 0x20000, CRC(719e9d72) SHA1(9026126f6a6ad0b694de05873f75bd61180cdce1) ) + ROM_LOAD( "mod_4-3_a_ld_4a02.ic16", 0x20000, 0x20000, CRC(4668dfd9) SHA1(5822efd049deede08dcc96d2ace2afa378ab6d56) ) + ROM_LOAD( "mod_4-3_a_ld_4a03.ic15", 0x40000, 0x20000, CRC(372459ad) SHA1(5b5ee17d103748622dcfc57a4b58f40b703a03bf) ) + ROM_LOAD( "mod_4-3_a_ld_4a04.ic14", 0x60000, 0x20000, CRC(81762541) SHA1(a7d8bf6478d239ea8a5d9d0459481d9423c81109) ) + + ROM_REGION( 0x40000, "tiles3", 0 ) // on MOD 4/3-B + ROM_LOAD( "mod_4-3_b_ld_4b01.ic17", 0x00000, 0x10000, CRC(f631aa30) SHA1(a4517749fc15cd2ad6d58aa3da8983f3c07a1d87) ) + ROM_LOAD( "mod_4-3_b_ld_4b02.ic16", 0x10000, 0x10000, CRC(1b0e9136) SHA1(749fb028183025b0d5c622e67e58243f843aa2b8) ) + ROM_LOAD( "mod_4-3_b_ld_4b03.ic15", 0x20000, 0x10000, CRC(31a73db0) SHA1(8339537aeba25740ff5025d288c7a83fac862071) ) + ROM_LOAD( "mod_4-3_b_ld_4b04.ic14", 0x30000, 0x10000, CRC(9f420227) SHA1(39dc101fd9ed9fc26ee0b959adc20268a2a207d0) ) + + ROM_REGION( 0x80000, "sprites", 0 ) // on MOD 51/3 + ROM_LOAD( "mod_51-3_ld_501.ic43", 0x00000, 0x20000, CRC(d3737ce2) SHA1(62ee62d29eefab51503be1acc796b4233a938ff9) ) + ROM_LOAD( "mod_51-3_ld_502.ic42", 0x20000, 0x20000, CRC(5a9e9d39) SHA1(5e4e521fc9322b1b95baa3ed36d47f2d62ae1383) ) + ROM_LOAD( "mod_51-3_ld_503.ic41", 0x40000, 0x20000, CRC(055a1575) SHA1(fbcf5fa79eaf3b1e363b9ce8b20c17d5fe3f7bf2) ) + ROM_LOAD( "mod_51-3_ld_504.ic40", 0x60000, 0x20000, CRC(227415bc) SHA1(b7bdcfc45a67074d77fa8d5ce8372b2834ce81ce) ) + + ROM_REGION( 0x320, "proms", 0 ) // PROMs (function unknown) + ROM_LOAD( "mod_1_116_82s123a.ic20", 0x00000, 0x00020, CRC(ebcedd2e) SHA1(7810d6f8a1e7474b2eb755cceb6a51ade4567020) ) + ROM_LOAD( "mod_51-3_502_82s129.ic10", 0x00020, 0x00100, CRC(15085e44) SHA1(646e7100fcb112594023cf02be036bd3d42cc13c) ) + ROM_LOAD( "mod_21-1_203_82s129.ic12", 0x00120, 0x00100, CRC(d56e29b4) SHA1(d94157a9cd75d1f6d305f3d48291d0ae4c41e006) ) + ROM_LOAD( "mod_21-1_204_82s129.ic4", 0x00220, 0x00100, CRC(74470450) SHA1(40b0e0991090733f8190ad7efcb500bd109c2a7e) ) + + ROM_REGION( 0x0200, "plds", ROMREGION_ERASEFF ) + ROM_LOAD( "mod_6-1_604_gal16v8.ic13", 0x00000, 0x00117, CRC(8b725626) SHA1(69caeaf3681452e6743605aa05cc5651eabaca3b) ) + ROM_LOAD( "mod_6-1_629_gal16v8.ic7", 0x00000, 0x00117, CRC(54b87ae5) SHA1(846bcf25d3e327f96120bd7346dd5dcae0d9a07d) ) + ROM_LOAD( "mod_4-2_403_gal16v8.ic29", 0x00000, 0x00104, CRC(506156cc) SHA1(5560671fc2c9872ed28620491af5dc486909fc6e) ) // Same as IC29 on MOD 4/3-A + ROM_LOAD( "mod_4-3_a_p0403_pal16r8.ic29", 0x00000, 0x00104, CRC(506156cc) SHA1(5560671fc2c9872ed28620491af5dc486909fc6e) ) // Same as IC29 on MOD 4/2 + ROM_LOAD( "mod_4-3_b_403_gal16v8.ic29", 0x00000, 0x00117, CRC(c136de93) SHA1(116f6d3b456d20621ab07a005c1421f57569915c) ) + ROM_LOAD( "mod_51-3_503_gal16v8.ic46", 0x00000, 0x00117, CRC(11470ea1) SHA1(cfcafbcc7e55be717348f895df61e144fdd0cc9b) ) +ROM_END + +} // anonymous namespace + + +GAME( 199?, lastduelm, lastduel, lastduelm, lastduelm, lastduel_ms_state, empty_init, ROT0, "bootleg (Gaelco / Ervisa)", "Last Duel (Modular System)", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 9186882ba5e..17d4cd4aeae 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15925,6 +15925,9 @@ ledstorm // 1988 (c) 1988 (US) madgear // 2/1989 (c) 1989 (US) madgearj // 2/1989 (c) 1989 (Japan) +@source:capcom/lastduel_ms.cpp +lastduelm // bootleg (Modular System) + @source:capcom/lwings.cpp avengers // 2/1987 (c) 1987 (US) avengersa // 2/1987 (c) 1987 (US) @@ -45129,6 +45132,9 @@ skysharkb // bootleg twincobr // B30 / TP-011 (c) 1987 Taito Corporation (World) twincobru // B30 / TP-011 (c) 1987 Taito America Corporation + Romstar license (US) +@source:toaplan/twincobr_ms.cpp +twincobrm // bootleg (Modular System) + @source:toaplan/wardner.cpp pyros // B25 / TP-009 (c) 1987 Taito America Corporation (US) wardner // B25 / TP-009 (c) 1987 Taito Corporation Japan (World) @@ -46341,6 +46347,9 @@ turbofrcu // (c) 1991 Video System Co. (US) turbofrcua // (c) 1991 Video System Co. (US) wbbc97 // (c) 1997 Comad +@source:vsystem/pspikes_ms.cpp +pspikesm // bootleg (Modular System) + @source:vsystem/rpunch.cpp rabiolep // (c) 1987 V-System Co. (Japan) rpunch // (c) 1987 V-System Co. + Bally/Midway/Sente license (US) diff --git a/src/mame/toaplan/twincobr_ms.cpp b/src/mame/toaplan/twincobr_ms.cpp new file mode 100644 index 00000000000..c5a995fb3fd --- /dev/null +++ b/src/mame/toaplan/twincobr_ms.cpp @@ -0,0 +1,179 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* + Twin Cobra (Modular System) + + As with most of the 'Modular System' setups, the hardware is heavily modified from the original + and consists of a multi-board stack in a cage, hence different driver. + + For this game the Modular System cage contains 7 boards: + + MOD-6/1 - MC68000P10, 3 ROMs, RAMs, 20 MHz Xtal. + MOD 1/3 - Sound board (Z840006PSC, 2 x YM2203C, 2 x Y3014B, 1 ROM). Two 8 dip switches banks. + MOD 21/1 - Logic, 2 PROMs, 24 MHz Xtal. + MOD 4/3 - Tilemap board, has logic + 3 tilemap ROMs, long thin sub-board (C0477 SOLD) with no chips, just routing along one edge. + MOD 4/3-A - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0477 SOLD) with no chips, just routing along one edge. + MOD 4/3-B - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0477 SOLD) with no chips, just routing along one edge. + MOD 51/3 - Sprite board, has logic + 4 ROMs and 1 PROM. + + PCB pics and more info: https://www.recreativas.org/modular-system-twin-cobra-4353-gaelco-sa + + TODO: + - everything, +*/ + + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "sound/ymopn.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class twincobr_ms_state : public driver_device +{ +public: + twincobr_ms_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_screen(*this, "screen") + { } + + void twincobrm(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_maincpu; + required_device m_screen; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void main_map(address_map &map); +}; + + +uint32_t twincobr_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void twincobr_ms_state::machine_start() +{ +} + + +void twincobr_ms_state::main_map(address_map &map) +{ +} + + +static INPUT_PORTS_START( twincobrm ) + PORT_START("DSW") + PORT_DIPUNKNOWN_DIPLOC(0x0001, 0x0001, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x0002, 0x0002, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x0004, 0x0004, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x0008, 0x0008, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x0010, 0x0010, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x0020, 0x0020, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x0040, 0x0040, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x0080, 0x0080, "SW1:8") + PORT_DIPUNKNOWN_DIPLOC(0x0100, 0x0100, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x0200, 0x0200, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x0400, 0x0400, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x0800, 0x0800, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x1000, 0x1000, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x2000, 0x2000, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x4000, 0x4000, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x8000, 0x8000, "SW2:8") +INPUT_PORTS_END + +void twincobr_ms_state::twincobrm(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 20_MHz_XTAL / 2); // divisor unknown + m_maincpu->set_addrmap(AS_PROGRAM, &twincobr_ms_state::main_map); + + Z80(config, "audiocpu", 20_MHz_XTAL / 5).set_disable(); // divisor unknown + + // video hardware + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // all wrong + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0, 256-32-1); + m_screen->set_screen_update(FUNC(twincobr_ms_state::screen_update)); + m_screen->set_palette("palette"); + + PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 256).set_membits(8); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + YM2203(config, "ym1", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown + + YM2203(config, "ym2", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown +} + +ROM_START( twincobrm ) + ROM_REGION( 0x40000, "maincpu", 0 ) // on MOD 6/1 board + ROM_LOAD( "mod_6-1_tw_603.ic17", 0x00000, 0x10000, CRC(c50a31ae) SHA1(06fd0f1710de88c72cfece5e8202c9a3c726caaf) ) + ROM_LOAD( "mod_6-1_tw_606.ic8", 0x10000, 0x10000, CRC(fa8df9ed) SHA1(7b713edf6e5a9d2a0a930501b1f66be7eed95074) ) + ROM_LOAD( "mod_6-1_tw_601.ic26", 0x20000, 0x10000, CRC(07f64d13) SHA1(864ce0f9369c40c3ae792fc4ab2444a168214749) ) + ROM_LOAD( "mod_6-1_tw_604.ic25", 0x30000, 0x10000, CRC(41be6978) SHA1(4784804b738a332c7f24a43bcbb7a1e607365735) ) + + ROM_REGION( 0x08000, "audiocpu", 0 ) // on MOD 1/3 board + ROM_LOAD( "mod_1-3_tw_101.ic12", 0x00000, 0x08000, CRC(e1aafdf5) SHA1(3441fc32c4eba46fa84010a437d5627fe7cdb2d0) ) + + ROM_REGION( 0x14000, "tiles1", 0 ) // on MOD 4/3 board + ROM_LOAD( "mod_4-3_tw_401.ic17", 0x00000, 0x08000, CRC(da1efca2) SHA1(f8685872b266ff7b9bd657bcc538217159938823) ) + ROM_LOAD( "mod_4-3_tw_402.ic16", 0x08000, 0x04000, CRC(e9e2d4b1) SHA1(e0a19dd46a9ba85d95bba7fbf81d8dc36dbfeabd) ) + ROM_LOAD( "mod_4-3_tw_403.ic15", 0x0C000, 0x08000, CRC(bf4ed7aa) SHA1(b4c479b153c6f146d0d846cec04f0a52cbccef3e) ) + + ROM_REGION( 0x40000, "tiles2", 0 ) // on MOD 4/3-A board + ROM_LOAD( "mod_4-3_a_tw_4a01.ic17", 0x00000, 0x10000, CRC(8cc79357) SHA1(31064df2b796ca85ad3caccf626b684dff1104a1) ) + ROM_LOAD( "mod_4-3_a_tw_4a02.ic16", 0x10000, 0x10000, CRC(13daeac8) SHA1(1cb103f434e2ecf193fa936ca7ea9194064c5b39) ) + ROM_LOAD( "mod_4-3_a_tw_4a03.ic15", 0x20000, 0x10000, CRC(d9e2e55d) SHA1(0409e6df836d1d5198b64b21b42192631aa6d096) ) + ROM_LOAD( "mod_4-3_a_tw_4a04.ic14", 0x30000, 0x10000, CRC(15b3991d) SHA1(f5e7ed7a7721ed7e6dfd440634160390b7a294e4) ) + + ROM_REGION( 0x20000, "tiles3", 0 ) // on MOD 4/3-B board + ROM_LOAD( "mod_4-3_b_tw_4b01.ic17", 0x00000, 0x08000, CRC(44f5accd) SHA1(2f9bdebe71c8be195332356df68992fd38d86994) ) + ROM_LOAD( "mod_4-3_b_tw_4b02.ic16", 0x08000, 0x08000, CRC(170c01db) SHA1(f4c5a1600f6cbb48abbace66c6f7514f79138e8b) ) + ROM_LOAD( "mod_4-3_b_tw_4b03.ic15", 0x10000, 0x08000, CRC(97f20fdc) SHA1(7cb3cd0637b0db889a3d552fd7c1a916eee5ca27) ) + ROM_LOAD( "mod_4-3_b_tw_4b04.ic14", 0x18000, 0x08000, CRC(b5d48389) SHA1(a00c5b9c231d3d580fa20c7ad3f8b6fd990e6594) ) + + ROM_REGION( 0x40000, "sprites", 0 ) // on MOD 51/3 board + ROM_LOAD( "mod_51-3_tw_501.ic43", 0x00000, 0x10000, CRC(7cab3a5a) SHA1(2ab994fac033046d85fe9e31dbae80b9530f9a72) ) + ROM_LOAD( "mod_51-3_tw_502.ic42", 0x10000, 0x10000, CRC(0c7e2b95) SHA1(401168061a1c05f8f436d0be5f32b81c527c3837) ) + ROM_LOAD( "mod_51-3_tw_503.ic41", 0x20000, 0x10000, CRC(41de100a) SHA1(cceba1083e89d667cd67a71e992913f8ab314e62) ) + ROM_LOAD( "mod_51-3_tw_504.ic40", 0x30000, 0x10000, CRC(f318d76e) SHA1(c124aec667e98489cc7adcfa4b48b5a147101cb7) ) + + ROM_REGION( 0x00100, "proms", 0 ) // PROMs (function unknown) + ROM_LOAD( "mod_1-3_112_82s123.ic20", 0x00000, 0x00020, CRC(e37acb44) SHA1(c3bd11da0a13658edff6e795e112356307e16290) ) + ROM_LOAD( "mod_21-1_205_tbp24s10.ic12", 0x00000, 0x00100, CRC(204a7aee) SHA1(322164134aa65c37a9389024f921364a81d13e88) ) + ROM_LOAD( "mod_21-1_207_tbp24s10.ic4", 0x00000, 0x00100, CRC(7a63d740) SHA1(5b6d73153d0c058e02c55cbcaa40c4f5e5cb5ce4) ) + ROM_LOAD( "mod_51-3_502_82s129.ic10", 0x00000, 0x00100, CRC(15085e44) SHA1(646e7100fcb112594023cf02be036bd3d42cc13c) ) + + ROM_REGION( 0x00117, "plds", ROMREGION_ERASEFF ) + ROM_LOAD( "mod_4-3_403_pal16r8.ic29", 0x00000, 0x00104, CRC(16379b0d) SHA1(5379560b0ec7c67cbe131a581a347b86395f34ac) ) + ROM_LOAD( "mod_4-3_a_405_gal16v8.ic29", 0x00000, 0x00117, CRC(9e360ea4) SHA1(095932874ce385e1079194ebdb20cd4933ca6395) ) // Same as on MOD 4/3-B + ROM_LOAD( "mod_4-3_b_404_gal16v8.ic29", 0x00000, 0x00117, CRC(9e360ea4) SHA1(095932874ce385e1079194ebdb20cd4933ca6395) ) // Same as on MOD 4/3-A + ROM_LOAD( "mod_51-3_p0503_pal16r6.ic46", 0x00000, 0x00104, CRC(07eb86d2) SHA1(482eb325df5bc60353bac85412cf45429cd03c6d) ) + ROM_LOAD( "mod_6-1_604_gal16v8.ic13", 0x00000, 0x00117, CRC(45b8e164) SHA1(2e227ac5171ebf14e1d1f7214626ef4df0d5ae99) ) + ROM_LOAD( "mod_6-1_624_gal16v8.ic7", 0x00000, 0x00117, CRC(e044b4dc) SHA1(e83211758303a1e1fc50b78f6cfacc9c4b7c71c4) ) +ROM_END + +} // anonymous namespace + + +GAME( 199?, twincobrm, twincobr, twincobrm, twincobrm, twincobr_ms_state, empty_init, ROT270, "bootleg (Gaelco / Ervisa)", "Twin Cobra (Modular System)", MACHINE_IS_SKELETON ) diff --git a/src/mame/vsystem/pspikes_ms.cpp b/src/mame/vsystem/pspikes_ms.cpp new file mode 100644 index 00000000000..1e2ee8684d9 --- /dev/null +++ b/src/mame/vsystem/pspikes_ms.cpp @@ -0,0 +1,181 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* + Power Spikes (Modular System) + + As with most of the 'Modular System' setups, the hardware is heavily modified from the original + and consists of a multi-board stack in a cage, hence different driver. + + For this game the Modular System cage contains 6 main boards and 1 sub board. + More information and PCB pictures: https://www.recreativas.org/modular-system-super-volleyball-11089-gaelco-sa + + MOD-6/1 - MC68000CP12, 2 ROMs, RAMs, 20 MHz XTAL. + MOD 1/4 - Sound board (Z8400BB1, 2 x YM2203C), one EPROM, two 8 dip switches banks, a small sub board with OKI M5205. + MOD 21/1 - Logic, 2 PROMs, 28.000 MHz XTAL. + MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0485 SOLD) with no chips, just routing along one edge. + MODULAR SYSTEM 2 MOD 5/1 - Red sprite ROM board, 16 sprite ROMs populated (maximum 24 ROMs) + MOD 51/1 - Sprite board, has logic, a PROM, and 4 empty ROM sockets. Sprite ROMs are actually on the below board. + + TODO: + - everything, +*/ + + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "machine/gen_latch.h" +#include "sound/msm5205.h" +#include "sound/ymopn.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class pspikes_ms_state : public driver_device +{ +public: + pspikes_ms_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_screen(*this, "screen") + { } + + void pspikesm(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device m_maincpu; + required_device m_screen; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void main_map(address_map &map); +}; + + +uint32_t pspikes_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + + +void pspikes_ms_state::machine_start() +{ +} + + +void pspikes_ms_state::main_map(address_map &map) +{ +} + + +static INPUT_PORTS_START( pspikesm ) + PORT_START("DSW") + PORT_DIPUNKNOWN_DIPLOC(0x0001, 0x0001, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x0002, 0x0002, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x0004, 0x0004, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x0008, 0x0008, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x0010, 0x0010, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x0020, 0x0020, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x0040, 0x0040, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x0080, 0x0080, "SW1:8") + PORT_DIPUNKNOWN_DIPLOC(0x0100, 0x0100, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x0200, 0x0200, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x0400, 0x0400, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x0800, 0x0800, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x1000, 0x1000, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x2000, 0x2000, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x4000, 0x4000, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x8000, 0x8000, "SW2:8") +INPUT_PORTS_END + + +void pspikes_ms_state::pspikesm(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 20_MHz_XTAL / 2); // divisor unknown + m_maincpu->set_addrmap(AS_PROGRAM, &pspikes_ms_state::main_map); + + Z80(config, "audiocpu", 20_MHz_XTAL / 5).set_disable(); // divisor unknown + + // video hardware + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // all wrong + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + m_screen->set_size(256, 256); + m_screen->set_visarea(0, 256-1, 0, 256-32-1); + m_screen->set_screen_update(FUNC(pspikes_ms_state::screen_update)); + m_screen->set_palette("palette"); + + PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 256).set_membits(8); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + YM2203(config, "ym1", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown + + YM2203(config, "ym2", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown + + MSM5205(config, "msm", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown +} + +ROM_START( pspikesm ) + ROM_REGION( 0x100000, "maincpu", 0 ) // on MOD 6/1 board + ROM_LOAD16_BYTE( "mod_6-1_ps_617.ic17", 0x00000, 0x20000, CRC(e963c91d) SHA1(f3e5e2243d1ae5c0cbc0fa55bec099a4048c2776) ) + ROM_LOAD16_BYTE( "mod_6-1_ps_608.ic8", 0x00001, 0x20000, CRC(a6ef3123) SHA1(b2e31a1f4182b324065d06feef96f63ebcfa9daf) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) // on MOD 1/4 board + ROM_LOAD( "mod_1-4_ps_101.ic12", 0x00000, 0x10000, CRC(2f6f7f94) SHA1(49ba5b97807b9488ab485f67ca37795935b8bed0) ) + + ROM_REGION( 0x80000, "tiles", ROMREGION_INVERT ) // on MOD 4/2 board + ROM_LOAD32_BYTE( "mod_4-3_ps_401.ic17", 0x00003, 0x20000, CRC(a7e00b36) SHA1(2b5e85ec02e8893d7d730aad4d690883b1d236cc) ) + ROM_LOAD32_BYTE( "mod_4-3_ps_402.ic16", 0x00002, 0x20000, CRC(96a5c235) SHA1(dad4ef9069d3130f719a402737909bb48225b73c) ) + ROM_LOAD32_BYTE( "mod_4-3_ps_403.ic15", 0x00001, 0x20000, CRC(bfdc60f4) SHA1(2b1893fac2651ac82f5a05b8f891b20c928ced7e) ) + ROM_LOAD32_BYTE( "mod_4-3_ps_404.ic14", 0x00000, 0x20000, CRC(ea1c05a7) SHA1(adfdfeac80df287ffa6f469dc38ea94698817cf4) ) + + ROM_REGION( 0x100000, "sprites", ROMREGION_ERASEFF | ROMREGION_INVERT ) // on MODULAR SYSTEM 2 MOD 5/1 board + ROM_LOAD32_BYTE( "mod_5-1_ps_503.ic3", 0x00003, 0x10000, CRC(2200c459) SHA1(4d0c4eafc6f1d66675358b100805fe1a5d05562a) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_512.ic12", 0x00002, 0x10000, CRC(e4006f38) SHA1(dda067531b112e38bc6af351123f30eddb5f13d3) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_518.ic18", 0x00001, 0x10000, CRC(b02134af) SHA1(0fffdab8f93079babe36cc84c93aeb94c8b09dfb) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_524.ic24", 0x00000, 0x10000, CRC(7579d958) SHA1(904cc765f7e548029cecb400b7d223ad4feccabd) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_504.ic4", 0x40003, 0x10000, CRC(b79abc10) SHA1(dba32ba27b7e255ac2f6ca640295659eba095892) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_513.ic13", 0x40002, 0x10000, CRC(0679a0fc) SHA1(ce316d757569e5b29f8dcd7a1b5eaa05b0175344) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_519.ic19", 0x40001, 0x10000, CRC(8ce19996) SHA1(2a2952b0805d65a30ed08386787aacf7c1ac636a) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_525.ic25", 0x40000, 0x10000, CRC(db5cc36d) SHA1(a466df0d5a7de2cd09e10734d58d44e5f8f59c04) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_505.ic5", 0x80003, 0x10000, CRC(08d7e196) SHA1(95ea557aafddeee971364e9c6678bd2fba147b94) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_514.ic14", 0x80002, 0x10000, CRC(eef21bd7) SHA1(52421c47cd3687cc36dd74bd453ec093f044d3ea) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_520.ic20", 0x80001, 0x10000, CRC(12db2f4a) SHA1(9bd8c6eed080e131fc9b4cc6b6b179f27fc237ee) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_526.ic26", 0x80000, 0x10000, CRC(dd0ae8d8) SHA1(4107ca4c1f580a6d27a71a9f3af94e991f519b16) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_506.ic6", 0xc0003, 0x10000, CRC(df296e38) SHA1(cf190c2504c032359e327e18e1f23b3aa4905749) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_515.ic15", 0xc0002, 0x10000, CRC(363a582a) SHA1(3800af6cce8f7105a47d07a1d2ab60b148dad77c) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_521.ic21", 0xc0001, 0x10000, CRC(b652bb25) SHA1(87976d9ac16e2471e7b87b3509ad1ab34e0d9eaa) ) + ROM_LOAD32_BYTE( "mod_5-1_ps_527.ic27", 0xc0000, 0x10000, CRC(39d9b0a5) SHA1(1396a96fe662bf53a2e86d39518f00a3f9693918) ) + + ROM_REGION( 0x320, "proms", 0 ) // PROMs (function unknown) + ROM_LOAD( "mod_1-4_105_82s123n.ic20", 0x00000, 0x00020, CRC(14d72781) SHA1(372dc021d8aaf4aa6fd46e69a3d8f1c68113426f) ) + ROM_LOAD( "mod_51-1_p0502_8s2129.ic10", 0x00020, 0x00100, CRC(15085e44) SHA1(646e7100fcb112594023cf02be036bd3d42cc13c) ) + ROM_LOAD( "mod_21-1_209_82s129.ic12", 0x00120, 0x00100, CRC(204a7aee) SHA1(322164134aa65c37a9389024f921364a81d13e88) ) + ROM_LOAD( "mod_21-1_p0204_82s129.ic4", 0x00220, 0x00100, CRC(74470450) SHA1(40b0e0991090733f8190ad7efcb500bd109c2a7e) ) + + ROM_REGION( 0x1000, "plds", ROMREGION_ERASEFF ) + ROM_LOAD( "mod_6-1_606_gal16v8.ic13", 0x00000, 0x00117, NO_DUMP ) + ROM_LOAD( "mod_6-1_649_gal16v8.ic7", 0x00000, 0x00117, NO_DUMP ) + ROM_LOAD( "mod_4-3_p0403_pal16r8.ic29", 0x00000, 0x00104, CRC(506156cc) SHA1(5560671fc2c9872ed28620491af5dc486909fc6e) ) + ROM_LOAD( "mod_51-1_503_gal16v8.ic46", 0x00000, 0x00104, NO_DUMP ) + ROM_LOAD( "mod_5-1_5149_gal16v8.ic9", 0x00000, 0x00117, NO_DUMP ) + ROM_LOAD( "mod_5-1_5249_gal16v8.ic8", 0x00000, 0x00117, NO_DUMP ) +ROM_END + +} // anonymous namespace + + +GAME( 199?, pspikesm, pspikes, pspikesm, pspikesm, pspikes_ms_state, empty_init, ROT0, "bootleg (Gaelco / Ervisa)", "Power Spikes (Modular System)", MACHINE_IS_SKELETON ) -- cgit v1.2.3