|
| 1 | +// license:BSD-3-Clause |
| 2 | +// copyright-holders: |
| 3 | + |
| 4 | +/* |
| 5 | + Last Duel (Modular System) |
| 6 | +
|
| 7 | + As with most of the 'Modular System' setups, the hardware is heavily modified from the original |
| 8 | + and consists of a multi-board stack in a cage, hence different driver. |
| 9 | +
|
| 10 | + For this game the Modular System cage contains 7 main boards. |
| 11 | + More information, dip switches and PCB pictures: https://www.recreativas.org/modular-system-last-duel-4358-gaelco-sa |
| 12 | +
|
| 13 | + MOD-6/1 - MC68000P10, 6 ROMs, RAMs, 20 MHz XTAL. |
| 14 | + MOD 1 - Sound board (Z8400BB1, 2 x YM2203C, 2 x Y3014), one EPROM, one PROM, two 8 dip switches banks. |
| 15 | + MOD 4/2 - Tilemap board, has logic + 2 tilemap ROMs, long thin sub-board (C0459/I) with no chips, just routing along one edge. |
| 16 | + MOD 4/3-A - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0460) with no chips, just routing along one edge. |
| 17 | + MOD 4/3-B - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (C0461) with no chips, just routing along one edge. |
| 18 | + MOD 51/3 - Sprite board, has logic, a PROM, and 4 ROMs. |
| 19 | + MOD 21/1 - Logic, 28.000 MHz XTAL. |
| 20 | +
|
| 21 | + TODO: |
| 22 | + - everything, |
| 23 | +*/ |
| 24 | + |
| 25 | + |
| 26 | +#include "emu.h" |
| 27 | + |
| 28 | +#include "cpu/m68000/m68000.h" |
| 29 | +#include "cpu/z80/z80.h" |
| 30 | +#include "machine/gen_latch.h" |
| 31 | +#include "sound/msm5205.h" |
| 32 | +#include "sound/ymopn.h" |
| 33 | + |
| 34 | +#include "emupal.h" |
| 35 | +#include "screen.h" |
| 36 | +#include "speaker.h" |
| 37 | +#include "tilemap.h" |
| 38 | + |
| 39 | + |
| 40 | +namespace { |
| 41 | + |
| 42 | +class lastduel_ms_state : public driver_device |
| 43 | +{ |
| 44 | +public: |
| 45 | + lastduel_ms_state(const machine_config &mconfig, device_type type, const char *tag) : |
| 46 | + driver_device(mconfig, type, tag), |
| 47 | + m_maincpu(*this, "maincpu"), |
| 48 | + m_screen(*this, "screen") |
| 49 | + { } |
| 50 | + |
| 51 | + void lastduelm(machine_config &config); |
| 52 | + |
| 53 | +protected: |
| 54 | + virtual void machine_start() override; |
| 55 | + |
| 56 | +private: |
| 57 | + required_device<cpu_device> m_maincpu; |
| 58 | + required_device<screen_device> m_screen; |
| 59 | + |
| 60 | + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 61 | + |
| 62 | + void main_map(address_map &map); |
| 63 | +}; |
| 64 | + |
| 65 | + |
| 66 | +uint32_t lastduel_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 67 | +{ |
| 68 | + return 0; |
| 69 | +} |
| 70 | + |
| 71 | + |
| 72 | +void lastduel_ms_state::machine_start() |
| 73 | +{ |
| 74 | +} |
| 75 | + |
| 76 | + |
| 77 | +void lastduel_ms_state::main_map(address_map &map) |
| 78 | +{ |
| 79 | +} |
| 80 | + |
| 81 | + |
| 82 | +static INPUT_PORTS_START( lastduelm ) |
| 83 | + PORT_START("DSW") |
| 84 | + PORT_DIPUNKNOWN_DIPLOC(0x0001, 0x0001, "SW1:1") |
| 85 | + PORT_DIPUNKNOWN_DIPLOC(0x0002, 0x0002, "SW1:2") |
| 86 | + PORT_DIPUNKNOWN_DIPLOC(0x0004, 0x0004, "SW1:3") |
| 87 | + PORT_DIPUNKNOWN_DIPLOC(0x0008, 0x0008, "SW1:4") |
| 88 | + PORT_DIPUNKNOWN_DIPLOC(0x0010, 0x0010, "SW1:5") |
| 89 | + PORT_DIPUNKNOWN_DIPLOC(0x0020, 0x0020, "SW1:6") |
| 90 | + PORT_DIPUNKNOWN_DIPLOC(0x0040, 0x0040, "SW1:7") |
| 91 | + PORT_DIPUNKNOWN_DIPLOC(0x0080, 0x0080, "SW1:8") |
| 92 | + PORT_DIPUNKNOWN_DIPLOC(0x0100, 0x0100, "SW2:1") |
| 93 | + PORT_DIPUNKNOWN_DIPLOC(0x0200, 0x0200, "SW2:2") |
| 94 | + PORT_DIPUNKNOWN_DIPLOC(0x0400, 0x0400, "SW2:3") |
| 95 | + PORT_DIPUNKNOWN_DIPLOC(0x0800, 0x0800, "SW2:4") |
| 96 | + PORT_DIPUNKNOWN_DIPLOC(0x1000, 0x1000, "SW2:5") |
| 97 | + PORT_DIPUNKNOWN_DIPLOC(0x2000, 0x2000, "SW2:6") |
| 98 | + PORT_DIPUNKNOWN_DIPLOC(0x4000, 0x4000, "SW2:7") |
| 99 | + PORT_DIPUNKNOWN_DIPLOC(0x8000, 0x8000, "SW2:8") |
| 100 | +INPUT_PORTS_END |
| 101 | + |
| 102 | + |
| 103 | +void lastduel_ms_state::lastduelm(machine_config &config) |
| 104 | +{ |
| 105 | + // basic machine hardware |
| 106 | + M68000(config, m_maincpu, 20_MHz_XTAL / 2); // divisor unknown |
| 107 | + m_maincpu->set_addrmap(AS_PROGRAM, &lastduel_ms_state::main_map); |
| 108 | + |
| 109 | + Z80(config, "audiocpu", 20_MHz_XTAL / 5).set_disable(); // divisor unknown |
| 110 | + |
| 111 | + // video hardware |
| 112 | + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // all wrong |
| 113 | + m_screen->set_refresh_hz(60); |
| 114 | + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); |
| 115 | + m_screen->set_size(256, 256); |
| 116 | + m_screen->set_visarea(0, 256-1, 0, 256-32-1); |
| 117 | + m_screen->set_screen_update(FUNC(lastduel_ms_state::screen_update)); |
| 118 | + m_screen->set_palette("palette"); |
| 119 | + |
| 120 | + PALETTE(config, "palette").set_format(palette_device::IRGB_1555, 256).set_membits(8); |
| 121 | + |
| 122 | + // sound hardware |
| 123 | + SPEAKER(config, "mono").front_center(); |
| 124 | + |
| 125 | + YM2203(config, "ym1", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown |
| 126 | + |
| 127 | + YM2203(config, "ym2", 20_MHz_XTAL / 5).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown |
| 128 | +} |
| 129 | + |
| 130 | +ROM_START( lastduelm ) |
| 131 | + ROM_REGION( 0x100000, "maincpu", 0 ) // on MOD 6/1 board |
| 132 | + ROM_LOAD16_BYTE( "mod_6-1_ld_603.ic17", 0x00000, 0x10000, CRC(c3403a02) SHA1(fbcaec5db6c7a06df2244f951b1943d9e40f539e) ) |
| 133 | + ROM_LOAD16_BYTE( "mod_6-1_ld_606.ic8", 0x00001, 0x10000, CRC(290a3dc5) SHA1(9a4ca3b525d08505d96ad867dbd75b350a98fdfa) ) |
| 134 | + ROM_LOAD16_BYTE( "mod_6-1_ld_601.ic26", 0x20000, 0x10000, CRC(429fb964) SHA1(78769b05e62c190d846dd08214427d1abbbe2bba) ) |
| 135 | + ROM_LOAD16_BYTE( "mod_6-1_ld_604.ic25", 0x20001, 0x10000, CRC(6697615f) SHA1(c977d78f1d89034c0cb7f2f7e922a4d8f334fc70) ) |
| 136 | + ROM_LOAD16_BYTE( "mod_6-1_ld_602.ic20", 0x40000, 0x10000, CRC(86bb19f9) SHA1(4c549a7cfaad60833a3e3bdd8aee5205cd81d1ff) ) // 1xxxxxxxxxxxxxxx = 0xFF |
| 137 | + ROM_LOAD16_BYTE( "mod_6-1_ld_605.ic11", 0x40001, 0x10000, CRC(039740fa) SHA1(4ac50ffd4d6c080302204f83ace05c8b19a78452) ) // 1xxxxxxxxxxxxxxx = 0xFF |
| 138 | + |
| 139 | + ROM_REGION( 0x10000, "audiocpu", 0 ) // on MOD 1 board |
| 140 | + ROM_LOAD( "mod_1_ld_101.ic12", 0x00000, 0x10000, CRC(6bc487c9) SHA1(23e757356894ec2ba5308c9fc9e27bb1e2fd8cad) ) |
| 141 | + |
| 142 | + ROM_REGION( 0x10000, "tiles1", 0 ) // on MOD 4/2 board |
| 143 | + ROM_LOAD( "mod_4-2_ld_401.ic17", 0x00000, 0x08000, CRC(f8c8e903) SHA1(f5b390eaf48245e0a1b0c2c54df9777da97ac310) ) // 1ST AND 2ND HALF IDENTICAL |
| 144 | + ROM_LOAD( "mod_4-2_ld_402.ic16", 0x08000, 0x08000, CRC(c1553eb6) SHA1(c92b234c4a748fb34eaa79ad6b60626652ba9877) ) // 1ST AND 2ND HALF IDENTICAL |
| 145 | + |
| 146 | + ROM_REGION( 0x80000, "tiles2", 0 ) // on MOD 4/3-A |
| 147 | + ROM_LOAD( "mod_4-3_a_ld_4a01.ic17", 0x00000, 0x20000, CRC(719e9d72) SHA1(9026126f6a6ad0b694de05873f75bd61180cdce1) ) |
| 148 | + ROM_LOAD( "mod_4-3_a_ld_4a02.ic16", 0x20000, 0x20000, CRC(4668dfd9) SHA1(5822efd049deede08dcc96d2ace2afa378ab6d56) ) |
| 149 | + ROM_LOAD( "mod_4-3_a_ld_4a03.ic15", 0x40000, 0x20000, CRC(372459ad) SHA1(5b5ee17d103748622dcfc57a4b58f40b703a03bf) ) |
| 150 | + ROM_LOAD( "mod_4-3_a_ld_4a04.ic14", 0x60000, 0x20000, CRC(81762541) SHA1(a7d8bf6478d239ea8a5d9d0459481d9423c81109) ) |
| 151 | + |
| 152 | + ROM_REGION( 0x40000, "tiles3", 0 ) // on MOD 4/3-B |
| 153 | + ROM_LOAD( "mod_4-3_b_ld_4b01.ic17", 0x00000, 0x10000, CRC(f631aa30) SHA1(a4517749fc15cd2ad6d58aa3da8983f3c07a1d87) ) |
| 154 | + ROM_LOAD( "mod_4-3_b_ld_4b02.ic16", 0x10000, 0x10000, CRC(1b0e9136) SHA1(749fb028183025b0d5c622e67e58243f843aa2b8) ) |
| 155 | + ROM_LOAD( "mod_4-3_b_ld_4b03.ic15", 0x20000, 0x10000, CRC(31a73db0) SHA1(8339537aeba25740ff5025d288c7a83fac862071) ) |
| 156 | + ROM_LOAD( "mod_4-3_b_ld_4b04.ic14", 0x30000, 0x10000, CRC(9f420227) SHA1(39dc101fd9ed9fc26ee0b959adc20268a2a207d0) ) |
| 157 | + |
| 158 | + ROM_REGION( 0x80000, "sprites", 0 ) // on MOD 51/3 |
| 159 | + ROM_LOAD( "mod_51-3_ld_501.ic43", 0x00000, 0x20000, CRC(d3737ce2) SHA1(62ee62d29eefab51503be1acc796b4233a938ff9) ) |
| 160 | + ROM_LOAD( "mod_51-3_ld_502.ic42", 0x20000, 0x20000, CRC(5a9e9d39) SHA1(5e4e521fc9322b1b95baa3ed36d47f2d62ae1383) ) |
| 161 | + ROM_LOAD( "mod_51-3_ld_503.ic41", 0x40000, 0x20000, CRC(055a1575) SHA1(fbcf5fa79eaf3b1e363b9ce8b20c17d5fe3f7bf2) ) |
| 162 | + ROM_LOAD( "mod_51-3_ld_504.ic40", 0x60000, 0x20000, CRC(227415bc) SHA1(b7bdcfc45a67074d77fa8d5ce8372b2834ce81ce) ) |
| 163 | + |
| 164 | + ROM_REGION( 0x320, "proms", 0 ) // PROMs (function unknown) |
| 165 | + ROM_LOAD( "mod_1_116_82s123a.ic20", 0x00000, 0x00020, CRC(ebcedd2e) SHA1(7810d6f8a1e7474b2eb755cceb6a51ade4567020) ) |
| 166 | + ROM_LOAD( "mod_51-3_502_82s129.ic10", 0x00020, 0x00100, CRC(15085e44) SHA1(646e7100fcb112594023cf02be036bd3d42cc13c) ) |
| 167 | + ROM_LOAD( "mod_21-1_203_82s129.ic12", 0x00120, 0x00100, CRC(d56e29b4) SHA1(d94157a9cd75d1f6d305f3d48291d0ae4c41e006) ) |
| 168 | + ROM_LOAD( "mod_21-1_204_82s129.ic4", 0x00220, 0x00100, CRC(74470450) SHA1(40b0e0991090733f8190ad7efcb500bd109c2a7e) ) |
| 169 | + |
| 170 | + ROM_REGION( 0x0200, "plds", ROMREGION_ERASEFF ) |
| 171 | + ROM_LOAD( "mod_6-1_604_gal16v8.ic13", 0x00000, 0x00117, CRC(8b725626) SHA1(69caeaf3681452e6743605aa05cc5651eabaca3b) ) |
| 172 | + ROM_LOAD( "mod_6-1_629_gal16v8.ic7", 0x00000, 0x00117, CRC(54b87ae5) SHA1(846bcf25d3e327f96120bd7346dd5dcae0d9a07d) ) |
| 173 | + ROM_LOAD( "mod_4-2_403_gal16v8.ic29", 0x00000, 0x00104, CRC(506156cc) SHA1(5560671fc2c9872ed28620491af5dc486909fc6e) ) // Same as IC29 on MOD 4/3-A |
| 174 | + ROM_LOAD( "mod_4-3_a_p0403_pal16r8.ic29", 0x00000, 0x00104, CRC(506156cc) SHA1(5560671fc2c9872ed28620491af5dc486909fc6e) ) // Same as IC29 on MOD 4/2 |
| 175 | + ROM_LOAD( "mod_4-3_b_403_gal16v8.ic29", 0x00000, 0x00117, CRC(c136de93) SHA1(116f6d3b456d20621ab07a005c1421f57569915c) ) |
| 176 | + ROM_LOAD( "mod_51-3_503_gal16v8.ic46", 0x00000, 0x00117, CRC(11470ea1) SHA1(cfcafbcc7e55be717348f895df61e144fdd0cc9b) ) |
| 177 | +ROM_END |
| 178 | + |
| 179 | +} // anonymous namespace |
| 180 | + |
| 181 | + |
| 182 | +GAME( 199?, lastduelm, lastduel, lastduelm, lastduelm, lastduel_ms_state, empty_init, ROT0, "bootleg (Gaelco / Ervisa)", "Last Duel (Modular System)", MACHINE_IS_SKELETON ) |
0 commit comments