From 064cd262a66930ee0d9588f53ca9f361889789c1 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 21 Mar 2022 19:28:14 +0100 Subject: - a1supply.cpp: dumped most missing PROMs for tv21_3 [Siftware] - blktiger.cpp, nmk16.cpp: added some hardware infos. Corrected blktiger MCU clock [Guru] - wc90.cpp, wc90b.cpp: used finders, small cleanups --- scripts/target/mame/arcade.lua | 4 - src/mame/drivers/a1supply.cpp | 22 +- src/mame/drivers/blktiger.cpp | 120 ++++++++- src/mame/drivers/nmk16.cpp | 69 ++++++ src/mame/drivers/seta.cpp | 12 +- src/mame/drivers/wc90.cpp | 540 ++++++++++++++++++++++++++++------------- src/mame/drivers/wc90b.cpp | 539 +++++++++++++++++++++++++++++++--------- src/mame/includes/wc90.h | 105 -------- src/mame/includes/wc90b.h | 122 ---------- src/mame/video/wc90.cpp | 143 ----------- src/mame/video/wc90b.cpp | 211 ---------------- 11 files changed, 1012 insertions(+), 875 deletions(-) delete mode 100644 src/mame/includes/wc90.h delete mode 100644 src/mame/includes/wc90b.h delete mode 100644 src/mame/video/wc90.cpp delete mode 100644 src/mame/video/wc90b.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 5d1330690b5..74eec51606b 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -4382,11 +4382,7 @@ files { MAME_DIR .. "src/mame/includes/tehkanwc.h", MAME_DIR .. "src/mame/video/tehkanwc.cpp", MAME_DIR .. "src/mame/drivers/wc90.cpp", - MAME_DIR .. "src/mame/includes/wc90.h", - MAME_DIR .. "src/mame/video/wc90.cpp", MAME_DIR .. "src/mame/drivers/wc90b.cpp", - MAME_DIR .. "src/mame/includes/wc90b.h", - MAME_DIR .. "src/mame/video/wc90b.cpp", } createMAMEProjects(_target, _subtarget, "terminal") diff --git a/src/mame/drivers/a1supply.cpp b/src/mame/drivers/a1supply.cpp index d5a4a94f411..6b205ddf772 100644 --- a/src/mame/drivers/a1supply.cpp +++ b/src/mame/drivers/a1supply.cpp @@ -107,17 +107,17 @@ ROM_START( tv21_3 ) ROM_LOAD( "750135.9", 0x0000, 0x0800, CRC(c821464c) SHA1(5334e6011ff8cd76b6215af05e697e4538921260) ) // 2716 looking chip FIXED BITS (xx000000) BADADDR ---xxxxxxxx ROM_LOAD( "750030.42", 0x0800, 0x0200, CRC(d8595357) SHA1(44805f2b3dad8e764dda246ed19d328927679062) ) // 82s141 ROM_LOAD( "750026a.47", 0x0a00, 0x0200, CRC(165f590a) SHA1(d4d001ac710d28b983f8f5ce4a2e9364c2e73179) ) // 82s141 - ROM_LOAD( "700122.36", 0x0c00, 0x0100, NO_DUMP ) // 82s129ba - ROM_LOAD( "700121.37", 0x0d00, 0x0100, NO_DUMP ) // 82s129ba - ROM_LOAD( "700123.38", 0x0e00, 0x0100, NO_DUMP ) // 82s129ba - ROM_LOAD( "700124.11", 0x0f00, 0x0020, NO_DUMP ) // 82s23n - ROM_LOAD( "700119a.23", 0x0f20, 0x0020, NO_DUMP ) // PROM1-8256-5B 7644, size unverified - ROM_LOAD( "7500116a.24", 0x0f40, 0x0020, NO_DUMP ) // 82s23n - ROM_LOAD( "7500115a.25", 0x0f60, 0x0020, NO_DUMP ) // 82s23n - ROM_LOAD( "700117a.41", 0x0f80, 0x0020, NO_DUMP ) // PROM1-0512-5B 7645, size unverified - ROM_LOAD( "700120.46", 0x0fa0, 0x0020, NO_DUMP ) // PROM1-0512-5B 7704, size unverified - ROM_LOAD( "700118.51", 0x0fc0, 0x0020, NO_DUMP ) // PROM1-0512-5B 7704, size unverified - ROM_LOAD( "750029.53", 0x0fe0, 0x0020, NO_DUMP ) // 82s23n + ROM_LOAD( "700122.36", 0x0c00, 0x0100, CRC(29f99d7e) SHA1(e9c15507ca976b8ab9bb3f070eb9e1f9c3fc185c) ) // 82s129ba + ROM_LOAD( "700121.37", 0x0d00, 0x0100, CRC(29b22045) SHA1(5017fa45909b243f5b84a523d8098320936e0c6a) ) // 82s129ba + ROM_LOAD( "700123.38", 0x0e00, 0x0100, CRC(53c03cbe) SHA1(f28f4ce4c79fbf4407c27e094540d0e2ff794093) ) // 82s129ba + ROM_LOAD( "700124.11", 0x0f00, 0x0020, CRC(a4a7d564) SHA1(fd625d431ca00fec129b85526839cd8e4f7d7091) ) // 82s23n, same contents as tvpoker's 90902100.20 + ROM_LOAD( "700119a.23", 0x0f20, 0x0020, CRC(51d2e42e) SHA1(144e5c7dbc034893e66ef8385fc1f839c862bf29) ) // PROM1-8256-5B 7644 + ROM_LOAD( "7500116a.24", 0x0f40, 0x0020, CRC(ebed85b7) SHA1(b62f099c3e6350cf88f9c70750d227c82c8c4608) ) // 82s23n + ROM_LOAD( "7500115a.25", 0x0f60, 0x0020, CRC(b663d121) SHA1(ddf09dd624ad3cddc8f10406bdb22cf746361571) ) // 82s23n + ROM_LOAD( "700117a.41", 0x0f80, 0x0020, NO_DUMP ) // PROM1-0512-5B 7645, unknown chip type and size + ROM_LOAD( "700120.46", 0x0fa0, 0x0020, NO_DUMP ) // PROM1-0512-5B 7704, unknown chip type and size + ROM_LOAD( "700118.51", 0x0fc0, 0x0020, NO_DUMP ) // PROM1-0512-5B 7704, unknown chip type and size + ROM_LOAD( "750029.53", 0x0fe0, 0x0020, CRC(d8c22608) SHA1(170e6f552fc013fec6903e45e2c7ec07e44d725c) ) // 82s23n, same contents as tvpoker's 90204100.69 ROM_END diff --git a/src/mame/drivers/blktiger.cpp b/src/mame/drivers/blktiger.cpp index 528f444a448..1ec7d25c2bd 100644 --- a/src/mame/drivers/blktiger.cpp +++ b/src/mame/drivers/blktiger.cpp @@ -13,8 +13,126 @@ - sprites/tile priority is a guess. I didn't find a PROM that would simply translate to the scheme I implemented. +*************************************************************************** + +Black Tiger / Black Dragon (Capcom, 1987) +Hardware info by Guru + +Note boards connect solder side to solder side and parts face outwards +on both boards. + +Top Board +--------- + +CAPCOM +87118-A-X1 +|-------------------------------------------------------------------------| +| VOL |------------------| BD_06.1L | +| HA13001 YM3014 YM2203 |138 138 21 08 | | +| |2kB 174 367 74 74| 3.579545MHz| +| M5224 YM3014 YM2203 |Z80 139 | JP7..12 | +| |---SOUND_MODULE---| | +| | +| 5814 4364 | +|J BD.6K | +|A BD_U_01A.5E | +|M 5814 24MHz | +|M BD_U_02A.6E | +|A | +| BD01.8J | +| BD_U_03A.8E | +| JP1..6 BD02.9J | +| SW2 BD_U_04A.9E | +| | +| BD_U_05A.10E BD03.11K | +| SW1 BD04.11L | +| Z80 | +|--------|--------------|-------------------------|--------------|--------| + |--------------| |--------------| +Notes: + Z80 - Zilog Z084006PSC CPU (main CPU). Clock input 6MHz [24/4] +Z80 (sound module) - Zilog Z084004PSC CPU (sound CPU). Clock input 3.579545MHz + BD.6K - Intel D8751H-8 Microcontroller with internal 4kBx8-bit EPROM and 128 bytes internal RAM. Clock input 8.000MHz [24/3] + YM2203 - Yamaha YM2203 FM Operator Type-N (OPN) sound chip. Clock input 3.579545MHz (both) + YM3014 - Yamaha YM3014B Serial Input Floating D/A Converter. Clock input 1.193181667MHz [3.579545/3] (both) + SOUND_MODULE - Contains commonly available parts.... logic, Z80A and 2kBx8-bit SRAM + JP1..6 - 0-ohm jumpers. JP1 & JP6 are shorted, others are open + JP7..12 - 0-ohm jumpers. JP10 & JP11 are shorted, others are open + HA13001 - Hitachi HA13001 5.5W Dual / 17.5W BTL Audio Power Amplifier + SW1/2 - 8-position DIP switch + M5224 - Mitsubishi M5224 Quad Operational Amplifier (compatible with LM324) + 2kB - 2kBx8-bit SRAM (inside sound module). Compatible with 6116, 2018, 5814, 4016 etc. + 5814 - Sony CXK5814 2kBx8-bit SRAM (color RAM) + 4364 - NEC D4364 8kBx8-bit SRAM (main program RAM) + BD01.8J - Signetics 82S129 bipolar PROM. When removed: No backgrounds and no sprites. Text layer/characters ok. + BD02.9J - Signetics 82S129 bipolar PROM. When removed: Affects sprites, sometimes they are partial or disappear under tiles. + BD03.11K - Signetics 82S129 bipolar PROM. Timing. When removed: Black screen, no syncs, game plays blind. + BD04.11L - Signetics 82S129 bipolar PROM. Timing. When removed: No bootup, shows only static garbage + BD_06.1L - Hitachi HN27256 32kBx8-bit OTP EPROM (sound program) + BD_U_01A.5E - \ + BD_U_02A.6E - \ 27C512 EPROM or OTP EPROM (main program) + BD_U_03A.8E - / + BD_U_04A.9E - / + BD_U_05A.10E - / + VSync - 59.6373Hz + HSync - 15.6250kHz + + +Bottom Board +------------ + +CAPCOM +87118-B-X1 + |--------------| |--------------| +|--------|--------------|-------------------------|--------------|--------| +| 86S100 | +| |-------| | +| |CAPCOM | BD_U_15.2N | +| |86S105 | | +| |RJ5C39 | 2018 2018 | +| |-------| | +| | +| | +| BD_07.4A BD_U_11A.4B | +| | +| BD_08.5A BD_U_12A.5B | +| | +| 4016 | +| 86S100 86S100 | +| | +| BD_09.8A BD_U_13A.8B | +| | +| BD_10.9A BD_U_14A.9B 43256 | +| JP7..8 JP9..12 | +| JP1..6 | +|-------------------------------------------------------------------------| +Notes: + 86S105 - Custom PLCC84 chip marked 'CAPCOM 86S105 RJ5C39 863 32 JAPAN'. Manufactured by Ricoh + This chip is used to generate sprites. Note the chip has 3x 2kBx8-bit (6kB) internal SRAM. + This chip fails often so when a game that uses this chip has vertical jailbars in the sprites + most likely this chip has failed. + 86S100 - Custom chip marked 'CAPCOM 86S100 M ^ 73100'. ^ = triangle. Manufactured by Texas Instruments + This chip is similar to 2x 74LS165 8-bit parallel-to-serial shift register chips in one package + but with direction control and two data modes (4-bit/8-bit). + JP1..6 - 0-ohm jumpers. JP1 & JP5 are shorted, others are open + JP7..8 - 0-ohm jumpers. JP7 shorted, JP8 open + JP9..12 - 0-ohm jumpers. JP12 shorted, others are open + 43256 - NEC D43256 32kBx8-bit SRAM (background tile RAM) + 2018 - Toshiba TMM2018 2kBx8-bit SRAM (additional sprite RAM.... see note above re: 86S105) + 4016 - NEC D4016 2kBx8-bit SRAM (text layer / character RAM) + BD_07.4A \ + BD_08.5A \ 27C512 EPROM or OTP EPROM + BD_09.8A / + BD_10.9A / + BD_U_11A.4B \ + BD_U_12A.5B \ + BD_U_13A.8B / 27512 OTP EPROM + BD_U_14A.9B / + BD_U_15.2N - 27256 OTP EPROM + ***************************************************************************/ + #include "emu.h" #include "includes/blktiger.h" @@ -300,7 +418,7 @@ void blktiger_state::blktiger(machine_config &config) Z80(config, m_audiocpu, XTAL(3'579'545)); /* verified on pcb */ m_audiocpu->set_addrmap(AS_PROGRAM, &blktiger_state::blktiger_sound_map); - I8751(config, m_mcu, XTAL(24'000'000)/4); /* ??? */ + I8751(config, m_mcu, XTAL(24'000'000)/3); /* verified on pcb */ m_mcu->port_in_cb<0>().set(FUNC(blktiger_state::blktiger_from_main_r)); m_mcu->port_out_cb<0>().set(FUNC(blktiger_state::blktiger_to_main_w)); // other ports unknown diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp index f61c7b9a380..fda7ed1df2c 100644 --- a/src/mame/drivers/nmk16.cpp +++ b/src/mame/drivers/nmk16.cpp @@ -6055,6 +6055,75 @@ ROM_START( tharrierb ) ROM_LOAD( "20h.512", 0x70000, 0x10000, CRC(5ccd9205) SHA1(6e5443d6af5a896d6dd4b4e06d5c3151826bf8b5) ) ROM_END + +/*************************************************************************** + +USAAF Mustang (UPL, 1990) +Hardware info by Guru + +UPL-90058 +|-------------------------------------------------------------------------| +| LA4460 LM358 YM2203 76C28 55257 | +| Y3014 7.IC141 | +| NMK004 55257 | +|90058-6.IC219 90058-4.IC142 | +| 90058-5.IC185 55257 | +| NMK903 | +| 55257 | +| SW1 | +| 6264 | +| | +|J 1.IC160 6264 | +|A | +|M 90058-9.IC35 | +|M NMK903 NMK901 | +|A 90058-8.IC36 | +| | +| SW2 10.IC120 | +| 2016 2016 NMK902 | +| 11.IC121 | +| 2.IC166 | +| 12MHz | +| 3.IC167 | +| | +| | +| 6116 55257 6116 | +| 6116 68000 55257 6116 | +| 8MHz | +|-------------------------------------------------------------------------| +Notes: + 68000 - Clock 8.000MHz + YM2203 - Clock 1.500MHz [12/8] + M6295 - 4.000MHz [12/3] and pin 7 LOW (both) + VSync - 56Hz + HSync - 15.5kHz + SW1/2 - 8-position DIP switch + 55257 - Toshiba TC55257 32kBx8-bit SRAM + 6116 - 2kBx8-bit SRAM + 2016 - 2kBx8-bit SRAM + 6264 - 8kBx8-bit SRAM + 76C28 - Goldstar GM76C28 2kBx8-bit SRAM + NMK901 - Custom chip + NMK902 - Custom chip + NMK903 - Custom chip + NMK904 - Toshiba TMP90C840AF with 8Kbyte internal ROM disguised as a custom chip. Clock input 8.000MHz. Clock output on pin 17 is 2.000MHz + LA4460 - Sanyo LA4460 Audio Power Amplifier + LM358 - Texas Instruments LM358 Dual Operational Amplifier + Y3014 - Yamaha YM3014 DAC + 90058-1.IC160 - 27C010 128kBx8-bit EPROM (foreground tiles) + 90058-2.IC166 - 27C010 128kBx8-bit EPROM (main program) + 90058-3.IC167 - 27C010 128kBx8-bit EPROM (main program) + 90058-7.IC141 - 27C512 64kBx8-bit EPROM ( sound program) + 90058-4.IC142 - 4Mbit mask ROM (background tiles) + 90058-5.IC185 - 4Mbit mask ROM (OKI M6295 samples) + 90058-6.IC219 - 4Mbit mask ROM (OKI M6295 samples) + 90058-8.IC36 - 4Mbit mask ROM (sprites) + 90058-9.IC35 - TC574000 512kBx8-bit EPROM (sprites) +90058-10.IC120 - Harris M1-7649 bipolar PROM +90058-11.IC121 - Harris M1-7621 bipolar PROM + +***************************************************************************/ + ROM_START( mustang ) ROM_REGION( 0x40000, "maincpu", 0 ) ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(bd9f7c89) SHA1(a0af46a8ff82b90bece2515e1bd74e7a7ddf5379) ) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index 0de3f8f7ce1..56426176e69 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -146,6 +146,7 @@ TODO: Thundercade / Twin Formation Taito America Corp./Romstar USA/Seta, 1987 +Hardware info by Guru PCB Layout --------- @@ -630,6 +631,7 @@ BPGH-013.U70 TC538000 Zombie Raid Sammy, 1996 +Hardware info by Guru This is a gun shooting game using Seta/Allumer hardware. @@ -689,6 +691,7 @@ NEC 71054C ----??? Kamen Rider Kamen Riderclub Battleracer Banpresto, 1993 +Hardware info by Guru Runs on Seta/Allumer hardware @@ -748,6 +751,7 @@ X1-010 X1-006 Allumer, 1993 This game is a vertical shoot'em-up and runs on fairly standard Allumer hardware. +Hardware info by Guru PCB Layout ---------- @@ -882,6 +886,7 @@ Custom chips: X1-001A X1-002A Triple Fun ??, 19?? +Hardware info by Guru CPU : TMP68HC000P-16 (68000) @@ -1006,6 +1011,7 @@ Other : Allumer Banpresto, 1992 This game runs on Seta/Allumer hardware +Hardware info by Guru PCB Layout ---------- @@ -1081,6 +1087,7 @@ Custom chips: X1-001A X1-002A Banpresto, 1992 Board looks similar to Castle of Dragon PCB. +Hardware info by Guru PCB No: P0-077A (Seta Number) BP922 (Banpresto Number) @@ -1116,6 +1123,7 @@ BP-U-003.U13 8M mask (32 pin, 1M x 8), read as MX27C8000 Sound /*************************************************************************** Ultra Toukon Densetsu Banpresto, 1993 +Hardware info by Guru This game runs on fairly standard Allumer hardware. @@ -1212,6 +1220,7 @@ X1-010 5168-10 68000-16 Pairs Love Allumer, 199x +Hardware info by Guru PCB Layout ---------- @@ -1249,6 +1258,7 @@ Notes: Rezon (Taito License) Allumer / Taito, 1992 +Hardware info by Guru This game runs on fairly standard Allumer hardware. @@ -1324,7 +1334,7 @@ Notes: Crazy Fight Subsino 1996 -Readme by Guru +Hardware info by Guru This game runs on Allumer-based hardware. It is a whack-a-mole type game using 6 buttons. diff --git a/src/mame/drivers/wc90.cpp b/src/mame/drivers/wc90.cpp index 91abd741384..dc655b41bfb 100644 --- a/src/mame/drivers/wc90.cpp +++ b/src/mame/drivers/wc90.cpp @@ -54,59 +54,284 @@ Press one of the start buttons to exit. */ #include "emu.h" -#include "includes/wc90.h" + +#include "video/tecmo_spr.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ymopn.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class wc90_state : public driver_device +{ +public: + wc90_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_sprgen(*this, "spritegen"), + m_fgvideoram(*this, "fgvideoram"), + m_bgvideoram(*this, "bgvideoram"), + m_txvideoram(*this, "txvideoram"), + m_scrollxlo(*this, "scrollxlo%u", 0U), + m_scrollxhi(*this, "scrollxhi%u", 0U), + m_scrollylo(*this, "scrollylo%u", 0U), + m_scrollyhi(*this, "scrollyhi%u", 0U), + m_spriteram(*this, "spriteram"), + m_mainbank(*this, "mainbank"), + m_subbank(*this, "subbank") + { } + + void wc90t(machine_config &config); + void wc90(machine_config &config); + void pac90(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + required_device m_maincpu; + required_device m_audiocpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_sprgen; + + required_shared_ptr m_fgvideoram; + required_shared_ptr m_bgvideoram; + required_shared_ptr m_txvideoram; + required_shared_ptr_array m_scrollxlo; + required_shared_ptr_array m_scrollxhi; + required_shared_ptr_array m_scrollylo; + required_shared_ptr_array m_scrollyhi; + required_shared_ptr m_spriteram; + + required_memory_bank m_mainbank; + required_memory_bank m_subbank; + + tilemap_t *m_tx_tilemap; + tilemap_t *m_fg_tilemap; + tilemap_t *m_bg_tilemap; + + void bankswitch_w(uint8_t data); + void sub_bankswitch_w(uint8_t data); + void bgvideoram_w(offs_t offset, uint8_t data); + void fgvideoram_w(offs_t offset, uint8_t data); + void txvideoram_w(offs_t offset, uint8_t data); + + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + TILE_GET_INFO_MEMBER(get_tx_tile_info); + TILE_GET_INFO_MEMBER(track_get_bg_tile_info); + TILE_GET_INFO_MEMBER(track_get_fg_tile_info); + + DECLARE_VIDEO_START(wc90t); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void sound_map(address_map &map); + void main_map(address_map &map); + void sub_map(address_map &map); +}; + + +// video + +/*************************************************************************** + + Callbacks for the TileMap code + +***************************************************************************/ + +TILE_GET_INFO_MEMBER(wc90_state::get_bg_tile_info) +{ + int attr = m_bgvideoram[tile_index]; + int tile = m_bgvideoram[tile_index + 0x800] + + 256 * ((attr & 3) + ((attr >> 1) & 4)); + tileinfo.set(2, + tile, + attr >> 4, + 0); +} + +TILE_GET_INFO_MEMBER(wc90_state::get_fg_tile_info) +{ + int attr = m_fgvideoram[tile_index]; + int tile = m_fgvideoram[tile_index + 0x800] + + 256 * ((attr & 3) + ((attr >> 1) & 4)); + tileinfo.set(1, + tile, + attr >> 4, + 0); +} +TILE_GET_INFO_MEMBER(wc90_state::get_tx_tile_info) +{ + tileinfo.set(0, + m_txvideoram[tile_index + 0x800] + ((m_txvideoram[tile_index] & 0x07) << 8), + m_txvideoram[tile_index] >> 4, + 0); +} + +TILE_GET_INFO_MEMBER(wc90_state::track_get_bg_tile_info) +{ + int attr = m_bgvideoram[tile_index]; + int tile = m_bgvideoram[tile_index + 0x800] + + 256 * (attr & 7); + tileinfo.set(2, + tile, + attr >> 4, + 0); +} + +TILE_GET_INFO_MEMBER(wc90_state::track_get_fg_tile_info) +{ + int attr = m_fgvideoram[tile_index]; + int tile = m_fgvideoram[tile_index + 0x800] + + 256 * (attr & 7); + tileinfo.set(1, + tile, + attr >> 4, + 0); +} + + +/*************************************************************************** + + Start the video hardware emulation. + +***************************************************************************/ + +void wc90_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); + m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64,32); + + m_fg_tilemap->set_transparent_pen(0); + m_tx_tilemap->set_transparent_pen(0); +} + +VIDEO_START_MEMBER(wc90_state,wc90t) +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::track_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::track_get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); + m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64,32); + + m_fg_tilemap->set_transparent_pen(0); + m_tx_tilemap->set_transparent_pen(0); +} + + +/*************************************************************************** + + Memory handlers + +***************************************************************************/ + +void wc90_state::bgvideoram_w(offs_t offset, uint8_t data) +{ + m_bgvideoram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); +} + +void wc90_state::fgvideoram_w(offs_t offset, uint8_t data) +{ + m_fgvideoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); +} + +void wc90_state::txvideoram_w(offs_t offset, uint8_t data) +{ + m_txvideoram[offset] = data; + m_tx_tilemap->mark_tile_dirty(offset & 0x7ff); +} + + + +/*************************************************************************** + + Display refresh + +***************************************************************************/ + + +uint32_t wc90_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + m_bg_tilemap->set_scrollx(0, m_scrollxlo[2][0] + 256 * m_scrollxhi[2][0]); + m_bg_tilemap->set_scrolly(0, m_scrollylo[2][0] + 256 * m_scrollyhi[2][0]); + m_fg_tilemap->set_scrollx(0, m_scrollxlo[1][0] + 256 * m_scrollxhi[1][0]); + m_fg_tilemap->set_scrolly(0, m_scrollylo[1][0] + 256 * m_scrollyhi[1][0]); + m_tx_tilemap->set_scrollx(0, m_scrollxlo[0][0] + 256 * m_scrollxhi[0][0]); + m_tx_tilemap->set_scrolly(0, m_scrollylo[0][0] + 256 * m_scrollyhi[0][0]); + +// m_sprgen->draw_wc90_sprites(bitmap, cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 3); // unused + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_sprgen->draw_wc90_sprites(bitmap, cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 2); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_sprgen->draw_wc90_sprites(bitmap, cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 1); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_sprgen->draw_wc90_sprites(bitmap, cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 0); + return 0; +} + + +// machine void wc90_state::bankswitch_w(uint8_t data) { m_mainbank->set_entry(data >> 3); } -void wc90_state::bankswitch1_w(uint8_t data) +void wc90_state::sub_bankswitch_w(uint8_t data) { m_subbank->set_entry(data >> 3); } -void wc90_state::wc90_map_1(address_map &map) +void wc90_state::main_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram(); /* Main RAM */ - map(0xa000, 0xafff).ram().w(FUNC(wc90_state::fgvideoram_w)).share(m_fgvideoram); /* fg video ram */ + map(0x8000, 0x9fff).ram(); // Main RAM + map(0xa000, 0xafff).ram().w(FUNC(wc90_state::fgvideoram_w)).share(m_fgvideoram); map(0xb000, 0xbfff).ram(); map(0xc000, 0xcfff).ram().w(FUNC(wc90_state::bgvideoram_w)).share(m_bgvideoram); map(0xd000, 0xdfff).ram(); - map(0xe000, 0xefff).ram().w(FUNC(wc90_state::txvideoram_w)).share(m_txvideoram); /* tx video ram */ + map(0xe000, 0xefff).ram().w(FUNC(wc90_state::txvideoram_w)).share(m_txvideoram); map(0xf000, 0xf7ff).bankr(m_mainbank); - map(0xf800, 0xfbff).ram().share("share1"); + map(0xf800, 0xfbff).ram().share("main_sub"); map(0xfc00, 0xfc00).portr("P1"); map(0xfc02, 0xfc02).portr("P2"); map(0xfc05, 0xfc05).portr("SYSTEM"); map(0xfc06, 0xfc06).portr("DSW1"); map(0xfc07, 0xfc07).portr("DSW2"); - map(0xfc02, 0xfc02).writeonly().share(m_scroll0ylo); - map(0xfc03, 0xfc03).writeonly().share(m_scroll0yhi); - map(0xfc06, 0xfc06).writeonly().share(m_scroll0xlo); - map(0xfc07, 0xfc07).writeonly().share(m_scroll0xhi); - map(0xfc22, 0xfc22).writeonly().share(m_scroll1ylo); - map(0xfc23, 0xfc23).writeonly().share(m_scroll1yhi); - map(0xfc26, 0xfc26).writeonly().share(m_scroll1xlo); - map(0xfc27, 0xfc27).writeonly().share(m_scroll1xhi); - map(0xfc42, 0xfc42).writeonly().share(m_scroll2ylo); - map(0xfc43, 0xfc43).writeonly().share(m_scroll2yhi); - map(0xfc46, 0xfc46).writeonly().share(m_scroll2xlo); - map(0xfc47, 0xfc47).writeonly().share(m_scroll2xhi); - map(0xfcc0, 0xfcc0).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0xfc02, 0xfc02).writeonly().share(m_scrollylo[0]); + map(0xfc03, 0xfc03).writeonly().share(m_scrollyhi[0]); + map(0xfc06, 0xfc06).writeonly().share(m_scrollxlo[0]); + map(0xfc07, 0xfc07).writeonly().share(m_scrollxhi[0]); + map(0xfc22, 0xfc22).writeonly().share(m_scrollylo[1]); + map(0xfc23, 0xfc23).writeonly().share(m_scrollyhi[1]); + map(0xfc26, 0xfc26).writeonly().share(m_scrollxlo[1]); + map(0xfc27, 0xfc27).writeonly().share(m_scrollxhi[1]); + map(0xfc42, 0xfc42).writeonly().share(m_scrollylo[2]); + map(0xfc43, 0xfc43).writeonly().share(m_scrollyhi[2]); + map(0xfc46, 0xfc46).writeonly().share(m_scrollxlo[2]); + map(0xfc47, 0xfc47).writeonly().share(m_scrollxhi[2]); + map(0xfcc0, 0xfcc0).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0xfcd0, 0xfcd0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); map(0xfce0, 0xfce0).w(FUNC(wc90_state::bankswitch_w)); } -void wc90_state::wc90_map_2(address_map &map) +void wc90_state::sub_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xcfff).ram(); @@ -114,8 +339,8 @@ void wc90_state::wc90_map_2(address_map &map) map(0xd800, 0xdfff).ram(); map(0xe000, 0xe7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0xf000, 0xf7ff).bankr(m_subbank); - map(0xf800, 0xfbff).ram().share("share1"); - map(0xfc00, 0xfc00).w(FUNC(wc90_state::bankswitch1_w)); + map(0xf800, 0xfbff).ram().share("main_sub"); + map(0xfc00, 0xfc00).w(FUNC(wc90_state::sub_bankswitch_w)); map(0xfc01, 0xfc01).w("watchdog", FUNC(watchdog_timer_device::reset_w)); } @@ -125,7 +350,7 @@ void wc90_state::sound_map(address_map &map) map(0xf000, 0xf7ff).ram(); map(0xf800, 0xf803).rw("ymsnd", FUNC(ym2608_device::read), FUNC(ym2608_device::write)); map(0xfc00, 0xfc00).noprw(); // IRQ acknowledge? (data read and immediately written back) - map(0xfc10, 0xfc10).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xfc10, 0xfc10).r("soundlatch", FUNC(generic_latch_8_device::read)); } @@ -196,11 +421,11 @@ static INPUT_PORTS_START( wc90 ) PORT_DIPSETTING( 0x10, "4:00" ) PORT_DIPSETTING( 0x00, "5:00" ) - /* the following 3 switches are listed as "don't touch" */ + // the following 3 switches are listed as "don't touch" PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:3" ) PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:2" ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x00, DEF_STR( English ) ) /* ON by default */ + PORT_DIPSETTING( 0x00, DEF_STR( English ) ) // ON by default PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) ) PORT_START("SYSTEM") @@ -291,18 +516,6 @@ static INPUT_PORTS_START( pac90 ) INPUT_PORTS_END - -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout tilelayout = { 16,16, @@ -330,10 +543,10 @@ static const gfx_layout spritelayout8 = static GFXDECODE_START( gfx_wc90 ) - GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 1*16*16, 16*16 ) - GFXDECODE_ENTRY( "gfx2", 0x00000, tilelayout, 2*16*16, 16*16 ) - GFXDECODE_ENTRY( "gfx3", 0x00000, tilelayout, 3*16*16, 16*16 ) - GFXDECODE_ENTRY( "gfx4", 0x00000, spritelayout8, 0*16*16, 16*16 ) + GFXDECODE_ENTRY( "chars", 0x00000, gfx_8x8x4_packed_msb, 1*16*16, 16*16 ) + GFXDECODE_ENTRY( "tiles1_2", 0x00000, tilelayout, 2*16*16, 16*16 ) + GFXDECODE_ENTRY( "tiles3_4", 0x00000, tilelayout, 3*16*16, 16*16 ) + GFXDECODE_ENTRY( "sprites", 0x00000, spritelayout8, 0*16*16, 16*16 ) GFXDECODE_END @@ -346,24 +559,24 @@ void wc90_state::machine_start() void wc90_state::wc90(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(8'000'000)); /* verified on pcb */ - m_maincpu->set_addrmap(AS_PROGRAM, &wc90_state::wc90_map_1); + // basic machine hardware + Z80(config, m_maincpu, XTAL(8'000'000)); // verified on PCB + m_maincpu->set_addrmap(AS_PROGRAM, &wc90_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(wc90_state::irq0_line_hold)); - z80_device &sub(Z80(config, "sub", XTAL(8'000'000))); /* verified on pcb */ - sub.set_addrmap(AS_PROGRAM, &wc90_state::wc90_map_2); + z80_device &sub(Z80(config, "sub", XTAL(8'000'000))); // verified on PCB + sub.set_addrmap(AS_PROGRAM, &wc90_state::sub_map); sub.set_vblank_int("screen", FUNC(wc90_state::irq0_line_hold)); - Z80(config, m_audiocpu, XTAL(8'000'000)/2); /* verified on pcb */ + Z80(config, m_audiocpu, XTAL(8'000'000)/2); // verified on PCB m_audiocpu->set_addrmap(AS_PROGRAM, &wc90_state::sound_map); - /* NMIs are triggered by the main CPU */ + // NMIs are triggered by the main CPU WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(59.17); /* verified on pcb */ + screen.set_refresh_hz(59.17); // verified on PCB screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); @@ -375,13 +588,12 @@ void wc90_state::wc90(machine_config &config) TECMO_SPRITE(config, m_sprgen, 0); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, m_soundlatch); - m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); - ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */ + ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB ymsnd.irq_handler().set_inputline("audiocpu", 0); ymsnd.add_route(0, "mono", 0.50); ymsnd.add_route(1, "mono", 1.0); @@ -391,7 +603,7 @@ void wc90_state::wc90(machine_config &config) void wc90_state::wc90t(machine_config &config) { wc90(config); - MCFG_VIDEO_START_OVERRIDE(wc90_state, wc90t ) + MCFG_VIDEO_START_OVERRIDE(wc90_state, wc90t) } void wc90_state::pac90(machine_config &config) @@ -403,166 +615,166 @@ void wc90_state::pac90(machine_config &config) ROM_START( twcup90 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(4a1affbc) SHA1(bc531e97ca31c66fdac194e2d79d5c6ba1300556) ) /* c000-ffff is not used */ - ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) /* banked at f000-f7ff */ + ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(4a1affbc) SHA1(bc531e97ca31c66fdac194e2d79d5c6ba1300556) ) // c000-ffff is not used + ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) /* c000-ffff is not used */ - ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) // c000-ffff is not used + ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ic54_05.bin", 0x00000, 0x10000, CRC(27c348b3) SHA1(cf19ff4ae4f323ae3e5a905249b7af8ae342202a) ) - ROM_REGION( 0x010000, "gfx1", 0 ) - ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) /* characters */ + ROM_REGION( 0x010000, "chars", 0 ) + ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) - ROM_REGION( 0x040000, "gfx2", 0 ) - ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", 0 ) + ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", 0 ) - ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", 0 ) + ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", 0 ) - ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) /* sprites */ - ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) /* sprites */ - ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) /* sprites */ - ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", 0 ) + ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) + ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) + ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) + ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) ROM_END ROM_START( twcup90a ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "wc90-1.bin", 0x00000, 0x08000, CRC(d1804e1a) SHA1(eec7374f4d23c89843f38fffff436635adb43b63) ) /* c000-ffff is not used */ - ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) /* banked at f000-f7ff */ + ROM_LOAD( "wc90-1.bin", 0x00000, 0x08000, CRC(d1804e1a) SHA1(eec7374f4d23c89843f38fffff436635adb43b63) ) // c000-ffff is not used + ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) /* c000-ffff is not used */ - ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) // c000-ffff is not used + ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ic54_05.bin", 0x00000, 0x10000, CRC(27c348b3) SHA1(cf19ff4ae4f323ae3e5a905249b7af8ae342202a) ) - ROM_REGION( 0x010000, "gfx1", 0 ) - ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) /* characters */ + ROM_REGION( 0x010000, "chars", 0 ) + ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) - ROM_REGION( 0x040000, "gfx2", 0 ) - ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", 0 ) + ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", 0 ) - ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", 0 ) + ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", 0 ) - ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) /* sprites */ - ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) /* sprites */ - ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) /* sprites */ - ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", 0 ) + ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) + ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) + ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) + ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) ROM_END ROM_START( twcup90b ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "ic87-1b.bin", 0x00000, 0x08000, CRC(d024a971) SHA1(856c6ab7abc1cd6db42703f70930b84e3da69db0) ) /* c000-ffff is not used */ - ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) /* banked at f000-f7ff */ + ROM_LOAD( "ic87-1b.bin", 0x00000, 0x08000, CRC(d024a971) SHA1(856c6ab7abc1cd6db42703f70930b84e3da69db0) ) // c000-ffff is not used + ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) /* c000-ffff is not used */ - ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) // c000-ffff is not used + ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ic54_05.bin", 0x00000, 0x10000, CRC(27c348b3) SHA1(cf19ff4ae4f323ae3e5a905249b7af8ae342202a) ) - ROM_REGION( 0x010000, "gfx1", 0 ) - ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) /* characters */ + ROM_REGION( 0x010000, "chars", 0 ) + ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) - ROM_REGION( 0x040000, "gfx2", 0 ) - ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", 0 ) + ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", 0 ) - ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", 0 ) + ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", 0 ) - ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) /* sprites */ - ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) /* sprites */ - ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) /* sprites */ - ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", 0 ) + ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) + ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) + ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) + ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) ROM_END ROM_START( twcup90c ) // 2 PCB set: 6303 A and 6303 B. ic87_01 is very similar to the one in the twcup90a set. ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(f588bb33) SHA1(46e90f145befd50be5ce0ffc05b00a034318a330) ) /* sldh, c000-ffff is not used */ - ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) /* banked at f000-f7ff */ + ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(f588bb33) SHA1(46e90f145befd50be5ce0ffc05b00a034318a330) ) // sldh, c000-ffff is not used + ROM_LOAD( "ic95_02.bin", 0x10000, 0x10000, CRC(847d439c) SHA1(eade31050da9e84feb4406e327d050a7496871b7) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) /* c000-ffff is not used */ - ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) // c000-ffff is not used + ROM_LOAD( "ic56_03.bin", 0x10000, 0x10000, CRC(1ac02b3b) SHA1(4f8dc049d404072150342f3c2df04789a73ce244) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ic54_05.bin", 0x00000, 0x10000, CRC(27c348b3) SHA1(cf19ff4ae4f323ae3e5a905249b7af8ae342202a) ) - ROM_REGION( 0x010000, "gfx1", 0 ) - ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) /* characters */ + ROM_REGION( 0x010000, "chars", 0 ) + ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) - ROM_REGION( 0x040000, "gfx2", 0 ) - ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", 0 ) + ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", 0 ) - ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", 0 ) + ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", 0 ) - ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) /* sprites */ - ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) /* sprites */ - ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) /* sprites */ - ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", 0 ) + ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) + ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) + ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) + ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) ROM_END ROM_START( twcup90t ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "wc90a-1.bin", 0x00000, 0x08000, CRC(b6f51a68) SHA1(e0263dee35bf99cb4288a1df825bbbca17c85d36) ) /* c000-ffff is not used */ - ROM_LOAD( "wc90a-2.bin", 0x10000, 0x10000, CRC(c50f2a98) SHA1(0fbeabadebfa75515d5e35bfcc565ecfa4d6e693) ) /* banked at f000-f7ff */ + ROM_LOAD( "wc90a-1.bin", 0x00000, 0x08000, CRC(b6f51a68) SHA1(e0263dee35bf99cb4288a1df825bbbca17c85d36) ) // c000-ffff is not used + ROM_LOAD( "wc90a-2.bin", 0x10000, 0x10000, CRC(c50f2a98) SHA1(0fbeabadebfa75515d5e35bfcc565ecfa4d6e693) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) /* c000-ffff is not used */ - ROM_LOAD( "wc90a-3.bin", 0x10000, 0x10000, CRC(8c7a9542) SHA1(a06a7cd40d41692c4cc2a35d9c69b944c5baf163) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "ic67_04.bin", 0x00000, 0x10000, CRC(dc6eaf00) SHA1(d53924070a59eee35dc0e6465702e4f04e61a073) ) // c000-ffff is not used + ROM_LOAD( "wc90a-3.bin", 0x10000, 0x10000, CRC(8c7a9542) SHA1(a06a7cd40d41692c4cc2a35d9c69b944c5baf163) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "ic54_05.bin", 0x00000, 0x10000, CRC(27c348b3) SHA1(cf19ff4ae4f323ae3e5a905249b7af8ae342202a) ) - ROM_REGION( 0x010000, "gfx1", 0 ) - ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) /* characters */ + ROM_REGION( 0x010000, "chars", 0 ) + ROM_LOAD( "ic85_07v.bin", 0x00000, 0x10000, CRC(c5219426) SHA1(95e21fcd7de7d418ec287ae7087f6244c6bce5a8) ) - ROM_REGION( 0x040000, "gfx2", 0 ) - ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", 0 ) + ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", 0 ) - ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", 0 ) + ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", 0 ) - ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) /* sprites */ - ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) /* sprites */ - ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) /* sprites */ - ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", 0 ) + ROM_LOAD( "ic50_12v.bin", 0x00000, 0x20000, CRC(da1fe922) SHA1(5184053c2b7dd2bf1cd2e9f783686f2c0db7e47b) ) + ROM_LOAD( "ic54_13v.bin", 0x20000, 0x20000, CRC(9ad03c2c) SHA1(1c1947f9b51a58002e9992fc7c0c1a1c59b4d740) ) + ROM_LOAD( "ic60_14v.bin", 0x40000, 0x20000, CRC(499dfb1b) SHA1(ac67985d36fea18c82a4ea00019d9e6e4bcb5d0d) ) + ROM_LOAD( "ic65_15v.bin", 0x60000, 0x20000, CRC(d8ea5c81) SHA1(ccb3f7d565b1c1b8e874a2df91cda40dde2962ed) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) ) ROM_END @@ -570,32 +782,34 @@ ROM_START( pac90 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "rom1.ic87", 0x00000, 0x08000, CRC(8af34306) SHA1(1a98adca74f46da36e3648d37bfcb56a328a031e) ) - ROM_REGION( 0x20000, "sub", ROMREGION_ERASE00 ) /* Second CPU */ + ROM_REGION( 0x20000, "sub", ROMREGION_ERASE00 ) ROM_LOAD( "rom2.ic67", 0x00000, 0x10000, CRC(bc9bfdf2) SHA1(869e4012e5c577e501143cbfd75cce8cef919c86) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "rom3.ic54", 0x00000, 0x10000, CRC(1c4d17fd) SHA1(5abebf867de452cc3e85331e91b9110c26a8b050) ) - ROM_REGION( 0x010000, "gfx1", 0 ) + ROM_REGION( 0x010000, "chars", 0 ) ROM_LOAD( "char.ic85", 0x00000, 0x10000, CRC(70941a50) SHA1(283583743c21774d0097dc935ae7bc7009b5b633) ) // char.ic85 CRC32 0b906dae SHA1 0d14d6a7bbe0b8772143afb4c6c94c62313e4b9c <-- An alternate version... - ROM_REGION( 0x040000, "gfx2", ROMREGION_ERASE00 ) - //ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */ - //ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */ + ROM_REGION( 0x040000, "tiles1_2", ROMREGION_ERASE00 ) + //ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) + //ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) - ROM_REGION( 0x040000, "gfx3", ROMREGION_ERASE00 ) - //ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */ - //ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */ + ROM_REGION( 0x040000, "tiles3_4", ROMREGION_ERASE00 ) + //ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) + //ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) - ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 ) - ROM_LOAD( "sprite1.ic50", 0x00000, 0x10000, CRC(190852ea) SHA1(fad7eb3aa53d03917173dd5a040655cfd329db32) ) /* sprites */ - ROM_LOAD( "sprite2.ic60", 0x40000, 0x10000, CRC(33effbea) SHA1(dbf6b735f3c8bacb695caf5d15ac8b7961bffc74) ) /* sprites */ + ROM_REGION( 0x080000, "sprites", ROMREGION_ERASE00 ) + ROM_LOAD( "sprite1.ic50", 0x00000, 0x10000, CRC(190852ea) SHA1(fad7eb3aa53d03917173dd5a040655cfd329db32) ) + ROM_LOAD( "sprite2.ic60", 0x40000, 0x10000, CRC(33effbea) SHA1(dbf6b735f3c8bacb695caf5d15ac8b7961bffc74) ) - ROM_REGION( 0x20000, "ymsnd", ROMREGION_ERASE00 ) /* 64k for ADPCM samples */ + ROM_REGION( 0x20000, "ymsnd", ROMREGION_ERASE00 ) ROM_LOAD( "voice.ic82", 0x00000, 0x10000, CRC(abc61f3d) SHA1(c6f123d16a26c4d77c635617dd97bb4b906c463a) ) ROM_END +} // anonymous namespace + GAME( 1989, twcup90, 0, wc90, wc90, wc90_state, empty_init, ROT0, "Tecmo", "Tecmo World Cup '90 (World set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, twcup90a, twcup90, wc90, wc90, wc90_state, empty_init, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/wc90b.cpp b/src/mame/drivers/wc90b.cpp index 01c5a1dc08b..f500bfbffbd 100644 --- a/src/mame/drivers/wc90b.cpp +++ b/src/mame/drivers/wc90b.cpp @@ -67,13 +67,13 @@ to the crappy artwork of the person that did the bootleg. Dip switches are not complete and they don't seem to differ from the original machine. -Last but not least, the set of ROMs i have for Euro League seem to have +Last but not least, the set of ROMs I have for Euro League seem to have the sprites corrupted. The game seems to be exactly the same as the World Cup 90 bootleg. Noted added by ClawGrip 28-Mar-2008: ----------------------------------- --Dumped and added the all the PCB GALs. +-Dumped and added all the PCB GALs. -Removed the second YM2203, Ernesto said it wasn't present on his board, and also isn't on mine. -My PCB has a different ROM (a05.bin), but only two bytes are different. @@ -85,41 +85,350 @@ Noted added by ClawGrip 28-Mar-2008: */ #include "emu.h" -#include "includes/wc90b.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 { -#define TEST_DIPS false /* enable to test unmapped dip switches */ +class wc90b_state : public driver_device +{ +public: + wc90b_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_subcpu(*this, "sub"), + m_audiocpu(*this, "audiocpu"), + m_msm(*this, "msm"), + m_palette(*this, "palette"), + m_gfxdecode(*this, "gfxdecode"), + m_fgvideoram(*this, "fgvideoram"), + m_bgvideoram(*this, "bgvideoram"), + m_txvideoram(*this, "txvideoram"), + m_spriteram(*this, "spriteram"), + m_mainbank(*this, "mainbank"), + m_subbank(*this, "subbank"), + m_audiobank(*this, "audiobank"), + m_scrollx(*this, "scrollx%u", 1U), + m_scrolly(*this, "scrolly%u", 1U), + m_scroll_x_lo(*this, "scroll_x_lo") + { } + + void wc90b(machine_config &config); + void eurogael(machine_config &config); + + void init_wc90b(); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + + tilemap_t *m_tx_tilemap; + tilemap_t *m_fg_tilemap; + tilemap_t *m_bg_tilemap; + + required_device m_maincpu; + required_device m_subcpu; + required_device m_audiocpu; + required_device m_msm; + required_device m_palette; + required_device m_gfxdecode; + required_shared_ptr m_fgvideoram; + required_shared_ptr m_bgvideoram; + required_shared_ptr m_txvideoram; + required_shared_ptr m_spriteram; + required_memory_bank m_mainbank; + required_memory_bank m_subbank; + required_memory_bank m_audiobank; + + void bgvideoram_w(offs_t offset, uint8_t data); + void fgvideoram_w(offs_t offset, uint8_t data); + void txvideoram_w(offs_t offset, uint8_t data); + void bankswitch_w(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(adpcm_int); + + void sound_map(address_map &map); + void sub_map(address_map &map); + + virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + virtual void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); + +private: + optional_shared_ptr_array m_scrollx; + optional_shared_ptr_array m_scrolly; + optional_shared_ptr m_scroll_x_lo; + + void main_map(address_map &map); + + uint8_t m_msm5205next; + uint8_t m_toggle; + + void sub_bankswitch_w(uint8_t data); + void adpcm_data_w(uint8_t data); + void adpcm_control_w(uint8_t data); + uint8_t master_irq_ack_r(); + void slave_irq_ack_w(uint8_t data); + + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); + TILE_GET_INFO_MEMBER(get_tx_tile_info); +}; -#define MASTER_CLOCK XTAL(14'318'181)/2 -#define SOUND_CLOCK XTAL(20'000'000)/4 -#define YM2203_CLOCK XTAL(20'000'000)/16 -#define MSM5205_CLOCK XTAL(384'000) +class eurogael_state : public wc90b_state +{ +public: + eurogael_state(const machine_config &mconfig, device_type type, const char *tag) : + wc90b_state(mconfig, type, tag), + m_bgscroll(*this, "bgscroll") + { } -void wc90b_state::bankswitch_w(uint8_t data) + void eurogael(machine_config &config); + +protected: + virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override; + virtual void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) override; + +private: + void master_irq_ack_w(uint8_t data); + required_shared_ptr m_bgscroll; + + void main_map(address_map &map); +}; + + +// video + +/*************************************************************************** + + Callbacks for the TileMap code + +***************************************************************************/ + +TILE_GET_INFO_MEMBER(wc90b_state::get_bg_tile_info) +{ + int attr = m_bgvideoram[tile_index]; + int tile = m_bgvideoram[tile_index + 0x800]; + tileinfo.set(1, + ((((attr & 3) + ((attr >> 1) & 4))) << 8) | tile | 0x800, + (attr >> 4) | 0x10, + 0); +} + +TILE_GET_INFO_MEMBER(wc90b_state::get_fg_tile_info) +{ + int attr = m_fgvideoram[tile_index]; + int tile = m_fgvideoram[tile_index + 0x800]; + tileinfo.set(1, + ((((attr & 3) + ((attr >> 1) & 4))) << 8) | tile, + attr >> 4, + 0); +} + +TILE_GET_INFO_MEMBER(wc90b_state::get_tx_tile_info) +{ + tileinfo.set(0, + m_txvideoram[tile_index + 0x800] + ((m_txvideoram[tile_index] & 0x07) << 8), + m_txvideoram[tile_index] >> 4, + 0); +} + + + +/*************************************************************************** + + Start the video hardware emulation. + +***************************************************************************/ + +void wc90b_state::video_start() { - membank("mainbank")->set_entry(data >> 3); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 32); + m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + + m_fg_tilemap->set_transparent_pen(15); + m_tx_tilemap->set_transparent_pen(15); } -void wc90b_state::bankswitch1_w(uint8_t data) + + +/*************************************************************************** + + Memory handlers + +***************************************************************************/ + +void wc90b_state::bgvideoram_w(offs_t offset, uint8_t data) +{ + m_bgvideoram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); +} + +void wc90b_state::fgvideoram_w(offs_t offset, uint8_t data) { - membank("subbank")->set_entry(data >> 3); + m_fgvideoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); } -void wc90b_state::sound_command_w(uint8_t data) +void wc90b_state::txvideoram_w(offs_t offset, uint8_t data) { - m_soundlatch->write(data); - m_audiocpu->set_input_line(0, HOLD_LINE); + m_txvideoram[offset] = data; + m_tx_tilemap->mark_tile_dirty(offset & 0x7ff); +} + + + +/*************************************************************************** + + Display refresh + +***************************************************************************/ + +void wc90b_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) +{ + // draw all visible sprites of specified priority + for (int offs = m_spriteram.bytes() - 8 ; offs >= 0 ; offs -= 8) + { + if ((~(m_spriteram[offs + 3] >> 7 ) & 1) == priority) + { + + // 0 bbbb bbff b = tile lower , f = flip bits + // 1 yyyy yyyy + // 2 xxxx xxxx + // 3 PXcc cccc P = priority X = x high, c = tile upper + // 4 pppp ---- palette + + int tilehigh = (m_spriteram[offs + 3] & 0x3f) << 6; + int tilelow = m_spriteram[offs + 0]; + int flags = m_spriteram[offs + 4]; + + tilehigh += (tilelow & 0xfc) >> 2; + + int sx = m_spriteram[offs + 2]; + if (!(m_spriteram[offs + 3] & 0x40)) sx -= 0x0100; + + int sy = 240 - m_spriteram[offs + 1]; + + m_gfxdecode->gfx(2)->transpen(bitmap, cliprect, tilehigh, + flags >> 4, // color + tilelow & 1, // flipx + tilelow & 2, // flipy + sx, + sy, 15); + } + } +} + +uint32_t wc90b_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + m_bg_tilemap->set_scrollx(0, 8 * (m_scrollx[1][0] & 0x7f) + 256 - 4 + (m_scroll_x_lo[0] & 0x07)); + m_bg_tilemap->set_scrolly(0, m_scrolly[1][0] + 1 + ((m_scrollx[1][0] & 0x80) ? 256 : 0)); + m_fg_tilemap->set_scrollx(0, 8 * (m_scrollx[0][0] & 0x7f) + 256 - 6 + ((m_scroll_x_lo[0] & 0x38) >> 3)); + m_fg_tilemap->set_scrolly(0, m_scrolly[0][0] + 1 + ((m_scrollx[0][0] & 0x80) ? 256 : 0)); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); + // TODO: if scoring on same Y as GOAL message, ball will be above it. Might be a BTANB (or needs single pass draw + mix?) + draw_sprites(bitmap, cliprect, 0); + return 0; +} + +void eurogael_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority) +{ + // draw all visible sprites of specified priority + + // entry at start of RAM might not be a sprite + for (int offs = 0x200 - 4 ; offs >= 4 ; offs -= 4) + { + if (((m_spriteram[offs + 3] >> 4) & 1) == priority) + { + // this is wrong + + // 0 bbbb bbbb b = tile lower + // 1 yyyy yyyy + // 2 xxxx xxxx + // 3 ffXP cccc f = flip bits, P = priority (inverted vs. other bootlegs) X = X high?, c = tile upper + // 0x200 ---- -ppp p = palette + + int tilehigh = (m_spriteram[offs + 3] & 0x0f) << 8; + int attr = (m_spriteram[offs + 3] & 0xf0) >> 4; + + int tilelow = m_spriteram[offs + 0]; + int flags = m_spriteram[offs + 0x200]; + + tilehigh += tilelow; + + int sx = m_spriteram[offs + 2]; + if (!(attr & 0x02)) sx -= 0x0100; + + int sy = 240 - m_spriteram[offs + 1]; + + m_gfxdecode->gfx(2)->transpen(bitmap, cliprect, tilehigh, + (flags & 0x7) | 8, // color - palettes 0x0 - 0x7 never written? + attr & 4, // flipx + attr & 8, // flipy + sx, + sy, 15); + } + } +} + +uint32_t eurogael_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + // the code to write / clear tilemaps for fb and tx layers has been specifically modified to avoid writing to the last 4 bytes + // and the game instead writes scroll values there instead, there is no code to copy from there, so it looks like these are the scroll regs + + // each of the 3 layer has its own PCB, all PCBs look identical, so why does handling differ slightly? + + int fg_scrollx = ((m_fgvideoram[0xffc]) | (m_fgvideoram[0xffd] << 8)) + 33; + int fg_scrolly = ((m_fgvideoram[0xffe]) | (m_fgvideoram[0xfff] << 8)) + 1; + int bg_scrollx = ((m_bgscroll[0xf00]) | (m_bgscroll[0xf01] << 8)) + 33; + int bg_scrolly = ((m_bgscroll[0xf02]) | (m_bgscroll[0xf03] << 8)) + 1; + int tx_scrollx = ((m_txvideoram[0xffc]) | (m_txvideoram[0xffd] << 8)) + 33; + int tx_scrolly = ((m_txvideoram[0xffe]) | (m_txvideoram[0xfff] << 8)) + 1; + + m_bg_tilemap->set_scrollx(0, bg_scrollx); + m_bg_tilemap->set_scrolly(0, bg_scrolly); + m_fg_tilemap->set_scrollx(0, fg_scrollx); + m_fg_tilemap->set_scrolly(0, fg_scrolly); + m_tx_tilemap->set_scrollx(0, tx_scrollx); + m_tx_tilemap->set_scrolly(0, tx_scrolly); + + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect, 1); + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect, 0); + return 0; +} + + +// machine + +void wc90b_state::bankswitch_w(uint8_t data) +{ + m_mainbank->set_entry(data >> 3); +} + +void wc90b_state::sub_bankswitch_w(uint8_t data) +{ + m_subbank->set_entry(data >> 3); } void wc90b_state::adpcm_control_w(uint8_t data) { - membank("audiobank")->set_entry(data & 0x01); + m_audiobank->set_entry(data & 0x01); m_msm->reset_w(data & 0x08); } @@ -130,32 +439,32 @@ void wc90b_state::adpcm_data_w(uint8_t data) uint8_t wc90b_state::master_irq_ack_r() { - m_maincpu->set_input_line(0,CLEAR_LINE); + m_maincpu->set_input_line(0, CLEAR_LINE); return 0xff; } void wc90b_state::slave_irq_ack_w(uint8_t data) { - m_subcpu->set_input_line(0,CLEAR_LINE); + m_subcpu->set_input_line(0, CLEAR_LINE); } -void wc90b_state::wc90b_map1(address_map &map) +void wc90b_state::main_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram(); /* Main RAM */ - map(0xa000, 0xafff).ram().w(FUNC(wc90b_state::fgvideoram_w)).share("fgvideoram"); - map(0xc000, 0xcfff).ram().w(FUNC(wc90b_state::bgvideoram_w)).share("bgvideoram"); - map(0xe000, 0xefff).ram().w(FUNC(wc90b_state::txvideoram_w)).share("txvideoram"); - map(0xf000, 0xf7ff).bankr("mainbank"); - map(0xf800, 0xfbff).ram().share("share1"); + map(0x8000, 0x9fff).ram(); // Main RAM + map(0xa000, 0xafff).ram().w(FUNC(wc90b_state::fgvideoram_w)).share(m_fgvideoram); + map(0xc000, 0xcfff).ram().w(FUNC(wc90b_state::bgvideoram_w)).share(m_bgvideoram); + map(0xe000, 0xefff).ram().w(FUNC(wc90b_state::txvideoram_w)).share(m_txvideoram); + map(0xf000, 0xf7ff).bankr(m_mainbank); + map(0xf800, 0xfbff).ram().share("main_sub"); map(0xfc00, 0xfc00).w(FUNC(wc90b_state::bankswitch_w)); - map(0xfd00, 0xfd00).w(FUNC(wc90b_state::sound_command_w)); - map(0xfd04, 0xfd04).writeonly().share("scroll1y"); - map(0xfd06, 0xfd06).writeonly().share("scroll1x"); - map(0xfd08, 0xfd08).writeonly().share("scroll2y"); - map(0xfd0a, 0xfd0a).writeonly().share("scroll2x"); - map(0xfd0e, 0xfd0e).writeonly().share("scroll_x_lo"); + map(0xfd00, 0xfd00).w("soundlatch", FUNC(generic_latch_8_device::write)); + map(0xfd04, 0xfd04).writeonly().share(m_scrolly[0]); + map(0xfd06, 0xfd06).writeonly().share(m_scrollx[0]); + map(0xfd08, 0xfd08).writeonly().share(m_scrolly[1]); + map(0xfd0a, 0xfd0a).writeonly().share(m_scrollx[1]); + map(0xfd0e, 0xfd0e).writeonly().share(m_scroll_x_lo); map(0xfd00, 0xfd00).portr("P1"); map(0xfd02, 0xfd02).portr("P2"); map(0xfd06, 0xfd06).portr("DSW1"); @@ -163,56 +472,56 @@ void wc90b_state::wc90b_map1(address_map &map) map(0xfd0c, 0xfd0c).r(FUNC(wc90b_state::master_irq_ack_r)); } -void wc90b_state::wc90b_map2(address_map &map) +void wc90b_state::sub_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xcfff).ram(); - map(0xd000, 0xd7ff).ram().share("spriteram"); + map(0xd000, 0xd7ff).ram().share(m_spriteram); map(0xd800, 0xdfff).ram(); map(0xe000, 0xe7ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0xe800, 0xefff).rom(); - map(0xf000, 0xf7ff).bankr("subbank"); - map(0xf800, 0xfbff).ram().share("share1"); - map(0xfc00, 0xfc00).w(FUNC(wc90b_state::bankswitch1_w)); + map(0xf000, 0xf7ff).bankr(m_subbank); + map(0xf800, 0xfbff).ram().share("main_sub"); + map(0xfc00, 0xfc00).w(FUNC(wc90b_state::sub_bankswitch_w)); map(0xfd0c, 0xfd0c).w(FUNC(wc90b_state::slave_irq_ack_w)); } -void wc90b_state::sound_cpu(address_map &map) +void wc90b_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("audiobank"); + map(0x8000, 0xbfff).bankr(m_audiobank); map(0xe000, 0xe000).w(FUNC(wc90b_state::adpcm_control_w)); map(0xe400, 0xe400).w(FUNC(wc90b_state::adpcm_data_w)); map(0xe800, 0xe801).rw("ymsnd1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); map(0xec00, 0xec01).rw("ymsnd2", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); map(0xf000, 0xf7ff).ram(); - map(0xf800, 0xf800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xf800, 0xf800).r("soundlatch", FUNC(generic_latch_8_device::read)); } void eurogael_state::master_irq_ack_w(uint8_t data) { // this seems to be write based instead of read based - m_maincpu->set_input_line(0,CLEAR_LINE); + m_maincpu->set_input_line(0, CLEAR_LINE); } -void eurogael_state::map1(address_map &map) +void eurogael_state::main_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).ram(); /* Main RAM */ - map(0xa000, 0xafff).ram().w(FUNC(wc90b_state::fgvideoram_w)).share("fgvideoram"); - map(0xc000, 0xcfff).ram().w(FUNC(wc90b_state::bgvideoram_w)).share("bgvideoram"); - map(0xd000, 0xdfff).ram().share("bgscroll"); // there are a bunch of read / write accesses in here (is it meant to mirror the bgram? - bg scroll regs are at df00 - df03 - map(0xe000, 0xefff).ram().w(FUNC(wc90b_state::txvideoram_w)).share("txvideoram"); - map(0xf000, 0xf7ff).bankr("mainbank"); - map(0xf800, 0xfbff).ram().share("share1"); - map(0xfc00, 0xfc00).w(FUNC(wc90b_state::bankswitch_w)); + map(0x8000, 0x9fff).ram(); // Main RAM + map(0xa000, 0xafff).ram().w(FUNC(eurogael_state::fgvideoram_w)).share(m_fgvideoram); + map(0xc000, 0xcfff).ram().w(FUNC(eurogael_state::bgvideoram_w)).share(m_bgvideoram); + map(0xd000, 0xdfff).ram().share(m_bgscroll); // there are a bunch of read / write accesses in here (is it meant to mirror the bgram? - bg scroll regs are at df00 - df03 + map(0xe000, 0xefff).ram().w(FUNC(eurogael_state::txvideoram_w)).share(m_txvideoram); + map(0xf000, 0xf7ff).bankr(m_mainbank); + map(0xf800, 0xfbff).ram().share("main_sub"); + map(0xfc00, 0xfc00).w(FUNC(eurogael_state::bankswitch_w)); map(0xfd00, 0xfd00).portr("P1"); map(0xfd02, 0xfd02).portr("P2"); map(0xfd06, 0xfd06).portr("DSW1"); map(0xfd08, 0xfd08).portr("DSW2"); map(0xfd0c, 0xfd0c).w(FUNC(eurogael_state::master_irq_ack_w)); - map(0xfd0e, 0xfd0e).w(FUNC(wc90b_state::sound_command_w)); + map(0xfd0e, 0xfd0e).w("soundlatch", FUNC(generic_latch_8_device::write)); } @@ -298,32 +607,32 @@ INPUT_PORTS_END static const gfx_layout charlayout = { - 8,8, /* 8*8 characters */ - RGN_FRAC(1,4), /* 2048 characters */ - 4, /* 4 bits per pixel */ - { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */ + 8,8, // 8*8 characters + RGN_FRAC(1,4), // 2048 characters + 4, // 4 bits per pixel + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, // the bitplanes are separated { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ + 8*8 // every char takes 8 consecutive bytes }; static const gfx_layout spritelayout = { - 16,16, /* 32*32 characters */ + 16,16, // 32*32 characters RGN_FRAC(1,4), - 4, /* 4 bits per pixel */ - { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */ + 4, // 4 bits per pixel + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, // the bitplanes are separated { 0, 1, 2, 3, 4, 5, 6, 7, (16*8)+0, (16*8)+1, (16*8)+2, (16*8)+3, (16*8)+4, (16*8)+5, (16*8)+6, (16*8)+7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 8*8+1*8, 8*8+2*8, 8*8+3*8, 8*8+4*8, 8*8+5*8, 8*8+6*8, 8*8+7*8 }, - 32*8 /* every char takes 128 consecutive bytes */ + 32*8 // every char takes 128 consecutive bytes }; static GFXDECODE_START( gfx_wc90b ) GFXDECODE_ENTRY( "chargfx", 0x00000, charlayout, 0x100, 0x10 ) GFXDECODE_ENTRY( "tilegfx", 0x00000, spritelayout, 0x200, 0x20 ) - GFXDECODE_ENTRY( "spritegfx", 0x00000, spritelayout, 0x000, 0x10 ) // sprites + GFXDECODE_ENTRY( "spritegfx", 0x00000, spritelayout, 0x000, 0x10 ) GFXDECODE_END @@ -342,9 +651,9 @@ WRITE_LINE_MEMBER(wc90b_state::adpcm_int) void wc90b_state::machine_start() { - membank("mainbank")->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x800); - membank("subbank")->configure_entries(0, 32, memregion("sub")->base() + 0x10000, 0x800); - membank("audiobank")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x8000, 0x4000); + m_mainbank->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x800); + m_subbank->configure_entries(0, 32, memregion("sub")->base() + 0x10000, 0x800); + m_audiobank->configure_entries(0, 2, memregion("audiocpu")->base() + 0x8000, 0x4000); save_item(NAME(m_msm5205next)); save_item(NAME(m_toggle)); @@ -353,20 +662,20 @@ void wc90b_state::machine_start() void wc90b_state::wc90b(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, MASTER_CLOCK); - m_maincpu->set_addrmap(AS_PROGRAM, &wc90b_state::wc90b_map1); + // basic machine hardware + Z80(config, m_maincpu, XTAL(14'318'181) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &wc90b_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(wc90b_state::irq0_line_assert)); - Z80(config, m_subcpu, MASTER_CLOCK); - m_subcpu->set_addrmap(AS_PROGRAM, &wc90b_state::wc90b_map2); + Z80(config, m_subcpu, XTAL(14'318'181) / 2); + m_subcpu->set_addrmap(AS_PROGRAM, &wc90b_state::sub_map); m_subcpu->set_vblank_int("screen", FUNC(wc90b_state::irq0_line_assert)); - Z80(config, m_audiocpu, SOUND_CLOCK); - m_audiocpu->set_addrmap(AS_PROGRAM, &wc90b_state::sound_cpu); - /* IRQs are triggered by the main CPU */ + Z80(config, m_audiocpu, XTAL(20'000'000) / 4); + m_audiocpu->set_addrmap(AS_PROGRAM, &wc90b_state::sound_map); + // IRQs are triggered by the main CPU - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -378,17 +687,17 @@ void wc90b_state::wc90b(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_wc90b); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 1024).set_endianness(ENDIANNESS_BIG); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE); - YM2203(config, "ymsnd1", YM2203_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.40); - YM2203(config, "ymsnd2", YM2203_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.40); + YM2203(config, "ymsnd1", XTAL(20'000'000) / 16).add_route(ALL_OUTPUTS, "mono", 0.40); + YM2203(config, "ymsnd2", XTAL(20'000'000) / 16).add_route(ALL_OUTPUTS, "mono", 0.40); - MSM5205(config, m_msm, MSM5205_CLOCK); - m_msm->vck_legacy_callback().set(FUNC(wc90b_state::adpcm_int)); /* interrupt function */ - m_msm->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + MSM5205(config, m_msm, XTAL(384'000)); + m_msm->vck_legacy_callback().set(FUNC(wc90b_state::adpcm_int)); // interrupt function + m_msm->set_prescaler_selector(msm5205_device::S96_4B); // 4KHz 4-bit m_msm->add_route(ALL_OUTPUTS, "mono", 0.20); } @@ -399,20 +708,20 @@ void eurogael_state::eurogael(machine_config &config) // DSWs are on the sound board near the YM2203Cs // use is guessed - /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(16'000'000)/2); - m_maincpu->set_addrmap(AS_PROGRAM, &eurogael_state::map1); - m_maincpu->set_vblank_int("screen", FUNC(wc90b_state::irq0_line_assert)); + // basic machine hardware + Z80(config, m_maincpu, XTAL(16'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &eurogael_state::main_map); + m_maincpu->set_vblank_int("screen", FUNC(eurogael_state::irq0_line_assert)); - Z80(config, m_subcpu, XTAL(16'000'000)/2); - m_subcpu->set_addrmap(AS_PROGRAM, &wc90b_state::wc90b_map2); - m_subcpu->set_vblank_int("screen", FUNC(wc90b_state::irq0_line_assert)); + Z80(config, m_subcpu, XTAL(16'000'000) / 2); + m_subcpu->set_addrmap(AS_PROGRAM, &eurogael_state::sub_map); + m_subcpu->set_vblank_int("screen", FUNC(eurogael_state::irq0_line_assert)); - Z80(config, m_audiocpu, XTAL(20'000'000)/4); - m_audiocpu->set_addrmap(AS_PROGRAM, &wc90b_state::sound_cpu); - /* IRQs are triggered by the main CPU */ + Z80(config, m_audiocpu, XTAL(20'000'000) / 4); + m_audiocpu->set_addrmap(AS_PROGRAM, &eurogael_state::sound_map); + // IRQs are triggered by the main CPU - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -424,22 +733,22 @@ void eurogael_state::eurogael(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_wc90b); PALETTE(config, m_palette).set_format(palette_device::xBRG_444, 1024).set_endianness(ENDIANNESS_BIG); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, 0, HOLD_LINE); - YM2203(config, "ymsnd1", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.40); // YM2203C - YM2203(config, "ymsnd2", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.40); // YM2203C + YM2203(config, "ymsnd1", XTAL(16'000'000) / 4).add_route(ALL_OUTPUTS, "mono", 0.40); // YM2203C + YM2203(config, "ymsnd2", XTAL(16'000'000) / 4).add_route(ALL_OUTPUTS, "mono", 0.40); // YM2203C - MSM5205(config, m_msm, MSM5205_CLOCK); - m_msm->vck_legacy_callback().set(FUNC(wc90b_state::adpcm_int)); /* interrupt function */ - m_msm->set_prescaler_selector(msm5205_device::S96_4B); /* 4KHz 4-bit */ + MSM5205(config, m_msm, XTAL(384'000)); + m_msm->vck_legacy_callback().set(FUNC(eurogael_state::adpcm_int)); // interrupt function + m_msm->set_prescaler_selector(msm5205_device::S96_4B); // 4KHz 4-bit m_msm->add_route(ALL_OUTPUTS, "mono", 0.20); } -/* these were dumped from unprotected pal16l8 devices found on a twcup90b2 set, probably the same for all sets? */ +// these were dumped from unprotected pal16l8 devices found on a twcup90b2 set, probably the same for all sets? #define TWCUP90B_PLD_DEVICES \ ROM_LOAD( "pal16l8.1", 0x0000, 0x0104, CRC(1f13c98f) SHA1(dbcac8a47bd6fe050a731132396b42dc35704dde) ) \ ROM_LOAD( "pal16l8.2", 0x0200, 0x0104, CRC(54af6bf3) SHA1(9373250b501ec4a9cd4ef697da40b41c2411f046) ) \ @@ -450,12 +759,12 @@ void eurogael_state::eurogael(machine_config &config) ROM_START( twcup90b1 ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "a02.bin", 0x00000, 0x10000, CRC(192a03dd) SHA1(ab98d370bba5437f956631b0199b173be55f1c27) ) /* c000-ffff is not used */ - ROM_LOAD( "a03.bin", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) /* banked at f000-f7ff */ + ROM_LOAD( "a02.bin", 0x00000, 0x10000, CRC(192a03dd) SHA1(ab98d370bba5437f956631b0199b173be55f1c27) ) // c000-ffff is not used + ROM_LOAD( "a03.bin", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "a04.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) /* c000-ffff is not used */ - ROM_LOAD( "a05.bin", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "a04.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) // c000-ffff is not used + ROM_LOAD( "a05.bin", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "a01.bin", 0x00000, 0x10000, CRC(3d317622) SHA1(ae4e8c5247bc215a2769786cb8639bce2f80db22) ) @@ -495,11 +804,11 @@ ROM_END */ ROM_START( twcup90ba ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "a02.bin", 0x00000, 0x10000, CRC(192a03dd) SHA1(ab98d370bba5437f956631b0199b173be55f1c27) ) /* c000-ffff is not used */ - ROM_LOAD( "a03.bin", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) /* banked at f000-f7ff */ + ROM_LOAD( "a02.bin", 0x00000, 0x10000, CRC(192a03dd) SHA1(ab98d370bba5437f956631b0199b173be55f1c27) ) // c000-ffff is not used + ROM_LOAD( "a03.bin", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "a04.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) /* c000-ffff is not used */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "a04.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) // c000-ffff is not used ROM_LOAD( "el_ic98_27c512_05.bin",0x10000, 0x10000, CRC(c70d8c13) SHA1(365718725ea7d0355c68ba703b7f9624cb1134bc) ) ROM_REGION( 0x10000, "audiocpu", 0 ) @@ -537,7 +846,7 @@ ROM_START( twcup90b2 ) ROM_LOAD( "a02", 0x00000, 0x08000, CRC(84cb2bf5) SHA1(de8343c991fc752de46448e4f6db1c3a70fc4459) ) // 2x 27c256 ROM_LOAD( "a03.bin", 0x10000, 0x08000, CRC(68156be5) SHA1(c90b873a147d00f313084cbe5d0a5a7688af1485) ) - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ + ROM_REGION( 0x20000, "sub", 0 ) ROM_LOAD( "a04.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) // 2x 27c512 ROM_LOAD( "a05.bin", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) @@ -585,7 +894,7 @@ ROM_START( twcup90bb ) ROM_LOAD( "27c512.02", 0x00000, 0x10000, CRC(192a03dd) SHA1(ab98d370bba5437f956631b0199b173be55f1c27) ) ROM_LOAD( "27c512.03", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ + ROM_REGION( 0x20000, "sub", 0 ) ROM_LOAD( "27c512.04", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) ROM_LOAD( "27c512.05", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) @@ -624,12 +933,12 @@ ROM_END // Modular System is a stack of boards in a cage, there are apparently other games on this 'system' that wouldn't even share any hardware with this apart from the metal cage itself. ROM_START( eurogael ) ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "3z-1_fu301.ic17", 0x00000, 0x10000, CRC(74acc161) SHA1(d8660dd6d05164df4a66125c68627e955b35bef3) ) /* c000-ffff is not used */ - ROM_LOAD( "3z-1_fu302.ic15", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) /* banked at f000-f7ff */ + ROM_LOAD( "3z-1_fu301.ic17", 0x00000, 0x10000, CRC(74acc161) SHA1(d8660dd6d05164df4a66125c68627e955b35bef3) ) // c000-ffff is not used + ROM_LOAD( "3z-1_fu302.ic15", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) // banked at f000-f7ff - ROM_REGION( 0x20000, "sub", 0 ) /* Second CPU */ - ROM_LOAD( "3z-1_fu303.ic19", 0x00000, 0x10000, CRC(348195fa) SHA1(41c59e38ec4ba4f3c2185dd32dbf4ea0318ab375) ) /* c000-ffff is not used */ - ROM_LOAD( "3z-1_fu304.ic16", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) /* banked at f000-f7ff */ + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "3z-1_fu303.ic19", 0x00000, 0x10000, CRC(348195fa) SHA1(41c59e38ec4ba4f3c2185dd32dbf4ea0318ab375) ) // c000-ffff is not used + ROM_LOAD( "3z-1_fu304.ic16", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) // banked at f000-f7ff ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "system2_fu101.ic6", 0x00000, 0x10000, CRC(712566ca) SHA1(9e46f9d449ff549b7a6d82283d8f903189b058e7) ) @@ -699,6 +1008,8 @@ void wc90b_state::init_wc90b() } } +} // anonymous namespace + GAME( 1989, twcup90b1, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, twcup90ba, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/wc90.h b/src/mame/includes/wc90.h deleted file mode 100644 index 2e1278f60da..00000000000 --- a/src/mame/includes/wc90.h +++ /dev/null @@ -1,105 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi -#ifndef MAME_INCLUDES_WC90_H -#define MAME_INCLUDES_WC90_H - -#pragma once - -#include "machine/gen_latch.h" -#include "video/tecmo_spr.h" -#include "emupal.h" -#include "tilemap.h" - -class wc90_state : public driver_device -{ -public: - wc90_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_sprgen(*this, "spritegen"), - m_soundlatch(*this, "soundlatch"), - m_fgvideoram(*this, "fgvideoram"), - m_bgvideoram(*this, "bgvideoram"), - m_txvideoram(*this, "txvideoram"), - m_scroll0xlo(*this, "scroll0xlo"), - m_scroll0xhi(*this, "scroll0xhi"), - m_scroll1xlo(*this, "scroll1xlo"), - m_scroll1xhi(*this, "scroll1xhi"), - m_scroll2xlo(*this, "scroll2xlo"), - m_scroll2xhi(*this, "scroll2xhi"), - m_scroll0ylo(*this, "scroll0ylo"), - m_scroll0yhi(*this, "scroll0yhi"), - m_scroll1ylo(*this, "scroll1ylo"), - m_scroll1yhi(*this, "scroll1yhi"), - m_scroll2ylo(*this, "scroll2ylo"), - m_scroll2yhi(*this, "scroll2yhi"), - m_spriteram(*this, "spriteram"), - m_mainbank(*this, "mainbank"), - m_subbank(*this, "subbank") - { } - - void wc90t(machine_config &config); - void wc90(machine_config &config); - void pac90(machine_config &config); - -protected: - virtual void machine_start() override; - virtual void video_start() override; - -private: - required_device m_maincpu; - required_device m_audiocpu; - required_device m_gfxdecode; - required_device m_palette; - required_device m_sprgen; - required_device m_soundlatch; - - required_shared_ptr m_fgvideoram; - required_shared_ptr m_bgvideoram; - required_shared_ptr m_txvideoram; - required_shared_ptr m_scroll0xlo; - required_shared_ptr m_scroll0xhi; - required_shared_ptr m_scroll1xlo; - required_shared_ptr m_scroll1xhi; - required_shared_ptr m_scroll2xlo; - required_shared_ptr m_scroll2xhi; - required_shared_ptr m_scroll0ylo; - required_shared_ptr m_scroll0yhi; - required_shared_ptr m_scroll1ylo; - required_shared_ptr m_scroll1yhi; - required_shared_ptr m_scroll2ylo; - required_shared_ptr m_scroll2yhi; - required_shared_ptr m_spriteram; - - required_memory_bank m_mainbank; - required_memory_bank m_subbank; - - tilemap_t *m_tx_tilemap; - tilemap_t *m_fg_tilemap; - tilemap_t *m_bg_tilemap; - - void bankswitch_w(uint8_t data); - void bankswitch1_w(uint8_t data); - void bgvideoram_w(offs_t offset, uint8_t data); - void fgvideoram_w(offs_t offset, uint8_t data); - void txvideoram_w(offs_t offset, uint8_t data); - - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - TILE_GET_INFO_MEMBER(get_tx_tile_info); - TILE_GET_INFO_MEMBER(track_get_bg_tile_info); - TILE_GET_INFO_MEMBER(track_get_fg_tile_info); - - DECLARE_VIDEO_START(wc90t); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - void sound_map(address_map &map); - void wc90_map_1(address_map &map); - void wc90_map_2(address_map &map); -}; - -#endif // MAME_INCLUDES_WC90_H diff --git a/src/mame/includes/wc90b.h b/src/mame/includes/wc90b.h deleted file mode 100644 index 90dcd6d63e2..00000000000 --- a/src/mame/includes/wc90b.h +++ /dev/null @@ -1,122 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi -#ifndef MAME_INCLUDES_WC90B_H -#define MAME_INCLUDES_WC90B_H - -#pragma once - -#include "machine/gen_latch.h" -#include "sound/msm5205.h" -#include "emupal.h" -#include "tilemap.h" - -class wc90b_state : public driver_device -{ -public: - wc90b_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_subcpu(*this, "sub"), - m_audiocpu(*this, "audiocpu"), - m_msm(*this, "msm"), - m_soundlatch(*this, "soundlatch"), - m_palette(*this, "palette"), - m_gfxdecode(*this, "gfxdecode"), - m_fgvideoram(*this, "fgvideoram"), - m_bgvideoram(*this, "bgvideoram"), - m_txvideoram(*this, "txvideoram"), - m_spriteram(*this, "spriteram"), - m_scroll1x(*this, "scroll1x"), - m_scroll2x(*this, "scroll2x"), - m_scroll1y(*this, "scroll1y"), - m_scroll2y(*this, "scroll2y"), - m_scroll_x_lo(*this, "scroll_x_lo") - { } - - void wc90b(machine_config &config); - void eurogael(machine_config &config); - - void init_wc90b(); - - void bgvideoram_w(offs_t offset, uint8_t data); - void fgvideoram_w(offs_t offset, uint8_t data); - void txvideoram_w(offs_t offset, uint8_t data); - void bankswitch_w(uint8_t data); - void sound_command_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(adpcm_int); - - void sound_cpu(address_map &map); - void wc90b_map2(address_map &map); - -protected: - virtual void machine_start() override; - virtual void video_start() override; - - tilemap_t *m_tx_tilemap; - tilemap_t *m_fg_tilemap; - tilemap_t *m_bg_tilemap; - - required_device m_maincpu; - required_device m_subcpu; - required_device m_audiocpu; - required_device m_msm; - required_device m_soundlatch; - required_device m_palette; - required_device m_gfxdecode; - required_shared_ptr m_fgvideoram; - required_shared_ptr m_bgvideoram; - required_shared_ptr m_txvideoram; - required_shared_ptr m_spriteram; - - - virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - virtual void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); - -private: - - optional_shared_ptr m_scroll1x; - optional_shared_ptr m_scroll2x; - optional_shared_ptr m_scroll1y; - optional_shared_ptr m_scroll2y; - optional_shared_ptr m_scroll_x_lo; - - void wc90b_map1(address_map &map); - - int m_msm5205next; - int m_toggle; - - void bankswitch1_w(uint8_t data); - void adpcm_data_w(uint8_t data); - void adpcm_control_w(uint8_t data); - uint8_t master_irq_ack_r(); - void slave_irq_ack_w(uint8_t data); - - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - TILE_GET_INFO_MEMBER(get_tx_tile_info); -}; - - -class eurogael_state : public wc90b_state -{ -public: - eurogael_state(const machine_config &mconfig, device_type type, const char *tag) : - wc90b_state(mconfig, type, tag), - m_bgscroll(*this, "bgscroll") - { } - - void eurogael(machine_config &config); - -protected: - virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override; - virtual void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ) override; - -private: - void master_irq_ack_w(uint8_t data); - required_shared_ptr m_bgscroll; - - void map1(address_map &map); -}; - - -#endif // MAME_INCLUDES_WC90B_H diff --git a/src/mame/video/wc90.cpp b/src/mame/video/wc90.cpp deleted file mode 100644 index 9bc686069f7..00000000000 --- a/src/mame/video/wc90.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi -#include "emu.h" -#include "includes/wc90.h" - - -/*************************************************************************** - - Callbacks for the TileMap code - -***************************************************************************/ - -TILE_GET_INFO_MEMBER(wc90_state::get_bg_tile_info) -{ - int attr = m_bgvideoram[tile_index]; - int tile = m_bgvideoram[tile_index + 0x800] + - 256 * ((attr & 3) + ((attr >> 1) & 4)); - tileinfo.set(2, - tile, - attr >> 4, - 0); -} - -TILE_GET_INFO_MEMBER(wc90_state::get_fg_tile_info) -{ - int attr = m_fgvideoram[tile_index]; - int tile = m_fgvideoram[tile_index + 0x800] + - 256 * ((attr & 3) + ((attr >> 1) & 4)); - tileinfo.set(1, - tile, - attr >> 4, - 0); -} - -TILE_GET_INFO_MEMBER(wc90_state::get_tx_tile_info) -{ - tileinfo.set(0, - m_txvideoram[tile_index + 0x800] + ((m_txvideoram[tile_index] & 0x07) << 8), - m_txvideoram[tile_index] >> 4, - 0); -} - -TILE_GET_INFO_MEMBER(wc90_state::track_get_bg_tile_info) -{ - int attr = m_bgvideoram[tile_index]; - int tile = m_bgvideoram[tile_index + 0x800] + - 256 * (attr & 7); - tileinfo.set(2, - tile, - attr >> 4, - 0); -} - -TILE_GET_INFO_MEMBER(wc90_state::track_get_fg_tile_info) -{ - int attr = m_fgvideoram[tile_index]; - int tile = m_fgvideoram[tile_index + 0x800] + - 256 * (attr & 7); - tileinfo.set(1, - tile, - attr >> 4, - 0); -} - - -/*************************************************************************** - - Start the video hardware emulation. - -***************************************************************************/ - -void wc90_state::video_start() -{ - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64,32); - - m_fg_tilemap->set_transparent_pen(0); - m_tx_tilemap->set_transparent_pen(0); -} - -VIDEO_START_MEMBER(wc90_state,wc90t) -{ - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::track_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::track_get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 64,32); - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64,32); - - m_fg_tilemap->set_transparent_pen(0); - m_tx_tilemap->set_transparent_pen(0); -} - - -/*************************************************************************** - - Memory handlers - -***************************************************************************/ - -void wc90_state::bgvideoram_w(offs_t offset, uint8_t data) -{ - m_bgvideoram[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); -} - -void wc90_state::fgvideoram_w(offs_t offset, uint8_t data) -{ - m_fgvideoram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); -} - -void wc90_state::txvideoram_w(offs_t offset, uint8_t data) -{ - m_txvideoram[offset] = data; - m_tx_tilemap->mark_tile_dirty(offset & 0x7ff); -} - - - -/*************************************************************************** - - Display refresh - -***************************************************************************/ - - -uint32_t wc90_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - m_bg_tilemap->set_scrollx(0,m_scroll2xlo[0] + 256 * m_scroll2xhi[0]); - m_bg_tilemap->set_scrolly(0,m_scroll2ylo[0] + 256 * m_scroll2yhi[0]); - m_fg_tilemap->set_scrollx(0,m_scroll1xlo[0] + 256 * m_scroll1xhi[0]); - m_fg_tilemap->set_scrolly(0,m_scroll1ylo[0] + 256 * m_scroll1yhi[0]); - m_tx_tilemap->set_scrollx(0,m_scroll0xlo[0] + 256 * m_scroll0xhi[0]); - m_tx_tilemap->set_scrolly(0,m_scroll0ylo[0] + 256 * m_scroll0yhi[0]); - -// m_sprgen->draw_wc90_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 3); // unused - m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); - m_sprgen->draw_wc90_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 2); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); - m_sprgen->draw_wc90_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 1); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0); - m_sprgen->draw_wc90_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), m_spriteram, m_spriteram.bytes(), 0); - return 0; -} diff --git a/src/mame/video/wc90b.cpp b/src/mame/video/wc90b.cpp deleted file mode 100644 index 21650a16cce..00000000000 --- a/src/mame/video/wc90b.cpp +++ /dev/null @@ -1,211 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ernesto Corvi -#include "emu.h" -#include "includes/wc90b.h" - - -/*************************************************************************** - - Callbacks for the TileMap code - -***************************************************************************/ - -TILE_GET_INFO_MEMBER(wc90b_state::get_bg_tile_info) -{ - int attr = m_bgvideoram[tile_index]; - int tile = m_bgvideoram[tile_index + 0x800]; - tileinfo.set(1, - ((((attr & 3) + ((attr >> 1) & 4)))<<8) | tile | 0x800, - (attr >> 4) | 0x10, - 0); -} - -TILE_GET_INFO_MEMBER(wc90b_state::get_fg_tile_info) -{ - int attr = m_fgvideoram[tile_index]; - int tile = m_fgvideoram[tile_index + 0x800]; - tileinfo.set(1, - ((((attr & 3) + ((attr >> 1) & 4)))<<8) | tile, - attr >> 4, - 0); -} - -TILE_GET_INFO_MEMBER(wc90b_state::get_tx_tile_info) -{ - tileinfo.set(0, - m_txvideoram[tile_index + 0x800] + ((m_txvideoram[tile_index] & 0x07) << 8), - m_txvideoram[tile_index] >> 4, - 0); -} - - - -/*************************************************************************** - - Start the video hardware emulation. - -***************************************************************************/ - -void wc90b_state::video_start() -{ - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 32); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 32); - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wc90b_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); - - m_fg_tilemap->set_transparent_pen(15); - m_tx_tilemap->set_transparent_pen(15); -} - - - -/*************************************************************************** - - Memory handlers - -***************************************************************************/ - -void wc90b_state::bgvideoram_w(offs_t offset, uint8_t data) -{ - m_bgvideoram[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); -} - -void wc90b_state::fgvideoram_w(offs_t offset, uint8_t data) -{ - m_fgvideoram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); -} - -void wc90b_state::txvideoram_w(offs_t offset, uint8_t data) -{ - m_txvideoram[offset] = data; - m_tx_tilemap->mark_tile_dirty(offset & 0x7ff); -} - - - -/*************************************************************************** - - Display refresh - -***************************************************************************/ - -void wc90b_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ) -{ - /* draw all visible sprites of specified priority */ - for ( int offs = m_spriteram.bytes() - 8 ; offs >= 0 ; offs -= 8 ) - { - if ( ( ~( m_spriteram[offs+3] >> 7 ) & 1 ) == priority ) - { - - // 0 bbbb bbff b = tile lower , f = flip bits - // 1 yyyy yyyy - // 2 xxxx xxxx - // 3 PXcc cccc P = priority X = x high, c = tile upper - // 4 pppp ---- palette - - int tilehigh = ( m_spriteram[offs + 3] & 0x3f ) << 6; - int tilelow = m_spriteram[offs + 0]; - int flags = m_spriteram[offs + 4]; - - tilehigh += ( tilelow & 0xfc ) >> 2; - - int sx = m_spriteram[offs + 2]; - if (!(m_spriteram[offs + 3] & 0x40)) sx -= 0x0100; - - int sy = 240 - m_spriteram[offs + 1]; - - m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, tilehigh, - flags >> 4, /* color */ - tilelow & 1, /* flipx */ - tilelow & 2, /* flipy */ - sx, - sy,15 ); - } - } -} - -uint32_t wc90b_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - m_bg_tilemap->set_scrollx(0,8 * (m_scroll2x[0] & 0x7f) + 256 - 4 + (m_scroll_x_lo[0] & 0x07)); - m_bg_tilemap->set_scrolly(0,m_scroll2y[0] + 1 + ((m_scroll2x[0] & 0x80) ? 256 : 0)); - m_fg_tilemap->set_scrollx(0,8 * (m_scroll1x[0] & 0x7f) + 256 - 6 + ((m_scroll_x_lo[0] & 0x38) >> 3)); - m_fg_tilemap->set_scrolly(0,m_scroll1y[0] + 1 + ((m_scroll1x[0] & 0x80) ? 256 : 0)); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); - draw_sprites(bitmap,cliprect, 1 ); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0); - // TODO: if scoring on same Y as GOAL message, ball will be above it. Might be a btanb (or needs single pass draw + mix?) - draw_sprites(bitmap,cliprect, 0 ); - return 0; -} - -void eurogael_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ) -{ - /* draw all visible sprites of specified priority */ - - // entry at start of RAM might not be a sprite - for ( int offs = 0x200 - 4 ; offs >= 4 ; offs -= 4 ) - { - if ( ( ( m_spriteram[offs+3] >> 4 ) & 1 ) == priority ) - { - // this is wrong - - // 0 bbbb bbbb b = tile lower - // 1 yyyy yyyy - // 2 xxxx xxxx - // 3 ffXP cccc f = flip bits, P = priority (inverted vs. other bootlegs) X = X high?, c = tile upper - // 0x200 ---- -ppp p = palette - - int tilehigh = ( m_spriteram[offs + 3] & 0x0f ) << 8; - int attr = ( m_spriteram[offs + 3] & 0xf0 ) >> 4; - - int tilelow = m_spriteram[offs + 0]; - int flags = m_spriteram[offs + 0x200]; - - tilehigh += tilelow; - - int sx = m_spriteram[offs + 2]; - if (!(attr & 0x02)) sx -= 0x0100; - - int sy = 240 - m_spriteram[offs + 1]; - - m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, tilehigh, - (flags & 0x7) | 8, /* color - palettes 0x0 - 0x7 never written? */ - attr & 4, /* flipx */ - attr & 8, /* flipy */ - sx, - sy,15 ); - } - } -} - -uint32_t eurogael_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - // the code to write / clear tilemaps for fb and tx layers has been specifically modified to avoid writing to the last 4 bytes - // and the game instead writes scroll values there instead, there is no code to copy from there, so it looks like these are the scroll regs - - // each of the 3 layer has its own PCB, all PCBs look identical, so why does handling differ slightly? - - int fg_scrollx = ((m_fgvideoram[0xffc]) | (m_fgvideoram[0xffd]<<8)) + 33; - int fg_scrolly = ((m_fgvideoram[0xffe]) | (m_fgvideoram[0xfff]<<8)) + 1; - int bg_scrollx = ((m_bgscroll[0xf00]) | (m_bgscroll[0xf01]<<8)) + 33; - int bg_scrolly = ((m_bgscroll[0xf02]) | (m_bgscroll[0xf03]<<8)) + 1; - int tx_scrollx = ((m_txvideoram[0xffc]) | (m_txvideoram[0xffd]<<8)) + 33; - int tx_scrolly = ((m_txvideoram[0xffe]) | (m_txvideoram[0xfff]<<8)) + 1; - - m_bg_tilemap->set_scrollx(0, bg_scrollx); - m_bg_tilemap->set_scrolly(0, bg_scrolly); - m_fg_tilemap->set_scrollx(0, fg_scrollx); - m_fg_tilemap->set_scrolly(0, fg_scrolly); - m_tx_tilemap->set_scrollx(0, tx_scrollx); - m_tx_tilemap->set_scrolly(0, tx_scrolly); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); - draw_sprites(bitmap,cliprect, 1 ); - m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0); - draw_sprites(bitmap,cliprect, 0 ); - return 0; -} -- cgit v1.2.3