mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
- 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
This commit is contained in:
parent
092ee310ff
commit
064cd262a6
@ -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")
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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) )
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<tecmo_spr_device> m_sprgen;
|
||||
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bgvideoram;
|
||||
required_shared_ptr<uint8_t> m_txvideoram;
|
||||
required_shared_ptr_array<uint8_t, 3> m_scrollxlo;
|
||||
required_shared_ptr_array<uint8_t, 3> m_scrollxhi;
|
||||
required_shared_ptr_array<uint8_t, 3> m_scrollylo;
|
||||
required_shared_ptr_array<uint8_t, 3> m_scrollyhi;
|
||||
required_shared_ptr<uint8_t> 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 )
|
||||
|
@ -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"
|
||||
|
||||
|
||||
#define TEST_DIPS false /* enable to test unmapped dip switches */
|
||||
namespace {
|
||||
|
||||
#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 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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bgvideoram;
|
||||
required_shared_ptr<uint8_t> m_txvideoram;
|
||||
required_shared_ptr<uint8_t> 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<uint8_t, 2> m_scrollx;
|
||||
optional_shared_ptr_array<uint8_t, 2> m_scrolly;
|
||||
optional_shared_ptr<uint8_t> 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);
|
||||
};
|
||||
|
||||
|
||||
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<uint8_t> 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()
|
||||
{
|
||||
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_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)
|
||||
{
|
||||
membank("mainbank")->set_entry(data >> 3);
|
||||
m_mainbank->set_entry(data >> 3);
|
||||
}
|
||||
|
||||
void wc90b_state::bankswitch1_w(uint8_t data)
|
||||
void wc90b_state::sub_bankswitch_w(uint8_t data)
|
||||
{
|
||||
membank("subbank")->set_entry(data >> 3);
|
||||
}
|
||||
|
||||
void wc90b_state::sound_command_w(uint8_t data)
|
||||
{
|
||||
m_soundlatch->write(data);
|
||||
m_audiocpu->set_input_line(0, HOLD_LINE);
|
||||
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 )
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<tecmo_spr_device> m_sprgen;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bgvideoram;
|
||||
required_shared_ptr<uint8_t> m_txvideoram;
|
||||
required_shared_ptr<uint8_t> m_scroll0xlo;
|
||||
required_shared_ptr<uint8_t> m_scroll0xhi;
|
||||
required_shared_ptr<uint8_t> m_scroll1xlo;
|
||||
required_shared_ptr<uint8_t> m_scroll1xhi;
|
||||
required_shared_ptr<uint8_t> m_scroll2xlo;
|
||||
required_shared_ptr<uint8_t> m_scroll2xhi;
|
||||
required_shared_ptr<uint8_t> m_scroll0ylo;
|
||||
required_shared_ptr<uint8_t> m_scroll0yhi;
|
||||
required_shared_ptr<uint8_t> m_scroll1ylo;
|
||||
required_shared_ptr<uint8_t> m_scroll1yhi;
|
||||
required_shared_ptr<uint8_t> m_scroll2ylo;
|
||||
required_shared_ptr<uint8_t> m_scroll2yhi;
|
||||
required_shared_ptr<uint8_t> 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
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bgvideoram;
|
||||
required_shared_ptr<uint8_t> m_txvideoram;
|
||||
required_shared_ptr<uint8_t> 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<uint8_t> m_scroll1x;
|
||||
optional_shared_ptr<uint8_t> m_scroll2x;
|
||||
optional_shared_ptr<uint8_t> m_scroll1y;
|
||||
optional_shared_ptr<uint8_t> m_scroll2y;
|
||||
optional_shared_ptr<uint8_t> 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<uint8_t> m_bgscroll;
|
||||
|
||||
void map1(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_WC90B_H
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user