Permalink
Fetching contributors…
Cannot retrieve contributors at this time
3973 lines (3327 sloc) 206 KB
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail
/***************************************************************************
Data East 32 bit ARM based games:
Captain America
Dragon Gun
Fighter's History
Locked 'n Loaded
Night Slashers
Tattoo Assassins
Emulation by Bryan McPhail, mish@tendril.co.uk. Thank you to Tim,
Avedis and Stiletto for many things including work on Fighter's
History protection and tracking down Tattoo Assassins!
Captain America & Fighter's History - reset with both start buttons
held down for test mode. Reset with player 1 start held in Fighter's
History for 'Pattern Editor'.
For version information:
Captain America - Reset with Player 1 start held
Fighter's History - Reset with Player 1 button 1 & 2 held
Night Slashers - Reset with Player 1 & 2 start held
Locked 'n Loaded - Reset with Player 1 & 2 start held
Tattoo Assassins is a prototype, it is thought only 25 test units
were manufactured and distributed to test arcades before the game
was recalled. TA is the only game developed by Data East Pinball
in USA, rather than Data East Corporation in Japan.
Tattoo Assassins uses DE Pinball soundboard 520-5077-00 R
TODO:
Tattoo Assassins & Night slashers use an less emulated chip (Ace/Jack) for
special blending effects. It's exact effect is unclear.
Video backgrounds(intel DVI) in Dragongun?
Locked 'n Loaded (parent set) is a slightly different hardware
revision: board # DE-0420-1 where the US set is DE-0359-2.
The sound is _not_ hooked up correctly for this set.
Z80 Sound cpu version games : Music tempo is unverified (it has external timer / IRQ controller?).
Locked 'n Loaded (US)
Data East Corporation (c) 1994
DE-0359-2 PCB Layout - Same PCB as used for Dragon Gun, see comment below:
------------------------------------------------------------
| 32.220MHz 28.000MHz 8M-7 8M-3 |
| MBM-05 MBM-03 |
| NH06-0 HuC6280A 8M-5 8M-1 |
| YM2151 MBM-04 MBM-02 |
--+ |
--+ MBM-07 |
| MAR-07 74 |
| M6295 M6295 MBM-06 MBM-01 NH05-0 |
| M6295 MBM-00 NH04-0 |
| 74 |
|J |
|A |
|M |
|M 2M-5 2M-4 |
|A 113 NH03-0 NH01-0 |
| 101 2M-7 2M-6 |
--+ NH02-0 NH00-0 |
--+ DSW1 146 |
|A 93C45 |
|U +-------------------------+
|X | DE-0406-1 |
--| ADC0808CCN | AUX PCB with |
--------------------------------| Gun Connectors |
--------------------------+
2M-4 through 2M-7 are empty sockets for additional program ROMs (used by dragon Gun)
Odd numbered 8M are empty sockets
AUX edge connector is a 48 pin type similar to those used on Namco System 11, 12, etc
DE-0360-4 ROM board Layout:
------------------------------------------------------------
| CN2 TC524256BZ-10 TC524256BZ-10 MAR-17|
| TC524256BZ-10 TC524256BZ-10 MAR-18|
| HM65256BLSP-10 TC524256BZ-10 TC524256BZ-10 MAR-19|
| 16 of these chips TC524256BZ-10 TC524256BZ-10 MAR-20|
| in this area MAR-21|
| Intel i750 MAR-22|
| 187 23.000MHz MAR-23|
|MBM-08 MAR-24|
|MBM-09 20.0000MHz MAR-25|
|MBM-10 145 MAR-26|
|MBM-11 186 MAR-27|
|MBM-12 MAR-28|
|MBM-13 |
|MBM-14 PAL16L8BCN Intel i750 |
|MBM-15 PAL16L8BCN |
| CN1 25.000MHz PAL16L8BCN |
------------------------------------------------------------
CN1 = Triple row 32 pin connector
CN2 = Dual row 32 pin connector
Locked 'n Loaded appears to be a conversion of Dragon Gun (c) 1993 as
there are 12 surface mounted GFX roms and 1 surface mounted sample rom
left over from the conversion. The roms labeled "MAR-xx" are those
from Dragon Gun.
Night Slashers
Data East, 1993
PCB Layout
----------
DE-0397-0 DEC-22VO
|-----------------------------------------------------|
| TA8205AH Z80 |-----| HBM-07 |
| 6164 YM2151 | 52 | |
| LX02 | | HBM-09 HBM-06 |
| YM3012 32MHz |-----| |
| JP1 HBM-11 93C45 HBM-05 |
|CN2 HBM-10 |-----| |
| M6295(1) | 52 | HBM-04 |
| M6295(2) | | |
| |-----| |-----| |-----| |-----| HBM-03 |
|J | 104 | | 153 | | 52 | |
|A | | | | |-----| | | HBM-02 |
|M |-----| |-----| | 153 | |-----| |
|M | | 28.322MHz|
|A |-----| |
| |-----| PAL |
| | 99 | PROM |-----| 6164 HBM-01 |
| | | | 74 | 6164 |
| |-----| | | HBM-00 |
| |-----| |-----| |-----| |
| | 153 | | 200 | |-----| 6164 |
| | | | | | 141 | 6164 |
| |-----| |-----| | | PAL |
|TEST_SW |-----| PAL |-----| |
| | 156 | |
| LH52250 LH52250 LX-01 | | |
| CN3 LH52250 LH52250 LX-00 |-----| |
|-----------------------------------------------------|
Notes:
The CPU is chip 156. It's an encrypted ARM-based CPU. The CPU is running at 7.0805MHz [28.322/4]
Z80B - Goldstar Z8400B, running at 3.5555MHz [32/9]
YM2151 - Yamaha YM2151 sound chip, running at 3.5555MHz [32/9]
OKI M6295 - Oki M6295 PCM Sample chip, (1) running at 1.000MHz [32/32]. Sample rate = 1000000 / 132
(2) running at 2.000MHz [32/16]. Sample rate = 2000000 / 132
6164 - UM6164BK-20 8K x8 SRAM
LH52250 - Sharp LH52250 32K x8 SRAM
93C45 - 128bytes x8 Serial EEPROM
PALs - PAL 16L8ACN (x 2, near program ROMs, one at 3D labelled 'VM-00', one at 4D labelled 'VM-01')
PAL 16l8ACN (near chip 99, located at 8J, labelled 'VM-02')
HSync - 15.86kHz
VSync - 58Hz
Custom ICs-
DE # Package Type Additional #'s (for reference of scratched-off chips on other PCB's)
------------------------------------------------------------------------------------------------------
156 (CPU) 100 Pin PQFP 932EV 301801
141 160 Pin PQFP 24220F008
74 160 Pin PQFP 24220F009
99 208 Pin PQFP L7A0967
52 (x3) 128 Pin PQFP 9322EV 298251 VC5259-0001
153 (x3) 144 Pin PQFP L7A0888 9328
104 100 Pin PQFP L7A0717 9148
200 100 Pin PQFP JAPAN 9320PD027 (chip is darker black)
Other - There's a small push button near the JAMMA connector to access test mode.
All settings are via an on-board menu.
All pinouts conform to standard JAMMA pinout. Joystick is 8-way with 3 buttons used.
JP1: 1-2 Sound Output in MONO
2-3 Sound Output in STEREO
CN2: 4 Pin connector (use when JP1 = 2-3)
Pin # Signal
1 L-Speaker +
2 L-Speaker -
3 R-Speaker -
4 R-Speaker +
CN3: 15 Pin connector (Player 3)
Pin # Signal
1 COIN SW3
2 3P PUSH 3
3 3P LEFT
4 3P RIGHT
5 3P UP
6 3P DOWN
7 3P PUSH 1
8 3P PUSH 2
9-13 NOT USED
14-15 GND
ROMs - MAINPRG1.1F HN27C4096 \
MAINPRG2.2F HN27C4096 / Main Program (no ROM stickers attached, DE ROM code unknown)
Japanese Version
LX01-.2F HN27C4096 \
LX00-.1F HN27C4096 / Main Program (Japan version)
MBH-00.8C 42 pin 16M MASK (read as 27C160) \
MBH-01.9C 42 pin 16M MASK (read as 27C160) |
MBH-02.14C 42 pin 16M MASK (read as 27C160) |
MBH-03.15C 40 pin 4M MASK (read as MX27C4100) |
MBH-04.16C 42 pin 16M MASK (read as 27C160) |
MBH-05.17C 40 pin 4M MASK (read as MX27C4100) | GFX
MBH-06.18C 32 pin 8M MASK (read as 27C080) |
MBH-07.19C 32 pin 2M MASK (read as 27C020) |
MBH-08.16E 40 pin 4M MASK (read as MX27C2100) |
MBH-09.18E 40 pin 4M MASK (read as MX27C2100) /
MBH-10.14L 32 pin 4M MASK (read as 27C040) \
MBH-11.16L 32 pin 4M MASK (read as 27C040) / Sound (Samples)
LX02-.17L 27C512 Sound Program
PROM.9J Fujitsu MB7124 compatible with 82S147 Labelled 'LN-00'
Night Slashers
Data East, 1993
DE-0395-1 DEC-22VO
|-----------------------------------------------------|
| TA8205AH 6164 |-----| 2M-16M* MBH-07|
| 02- HuC6280A | 52 | MBH-09 MBH-06|
| YM2151 | | 2M-16M* MBH-05|
| YM3012 32.220MHz |-----| MBH-08 MBH-04|
| JP1 MBH-11 93C45 |-----| MBH-03|
|CN2 MBH-10 | 52 | MBH-02|
| M6295(1) | | |
| M6295(2) |-----| |
| |-----| |-----| |
|J | 104 | |-----| |-----| | 52 | |
|A | | | 153 | | 113 | | | |
|M |-----| | | | | |-----| |
|M |-----| |-----| 28MHz |
|A |-----| |
| | 99 | VM-02 |
| | | LN-00 |-----| 6164 MBH-01 |
| |-----| | 74 | 6164 |
| | | MBH-00 |
| |-----| |-----| |-----| |
| | 113 | | 200 | |-----| 6164 |
| | | | | | 141 | 6164 |
| |-----| |-----| | | VE-01A |
|TEST_SW |-----| VE-00 |-----| |
| | 156 | |
| CN4 LH52250 LH52250 01- | | |
| CN3 LH52250 LH52250 00- |-----| |
|-----------------------------------------------------|
NOTE: Program EPROMs did NOT have regional letter codes, just 00, 01 & 02
Same PCB as shown below for Fighter's History, but populated with more
chips as needed. It is worth noting that Night Slashers uses the encryption
features of the 156 chip where as Fighter's History does not.
*****************************************************************************************************
Fighter's History
Data East, 1993
PCB Layout
----------
DE-0395-1 DEC-22VO
|-----------------------------------------------------|
| TA8205AH 6164 MBF-05 2M-8M*|
| LE02 HuC6280A MBF-04 8M*|
| YM2151 52* MBF-03 4M-16M*|
| YM3012 32.220MHz MBF-02 16M*|
| JP1 MBF-07 93C45 4M-16M*|
|CN2 MBF-06 16M*|
| M6295(1) 52* |
| M6295(2) |
| |-----| |-----| |
|J | 75 | 113/153* | 52 | |
|A | | |-----| | | |
|M |-----| | 113 | |-----| |
|M | | 28MHz |
|A |-----| |
| PAL* |
| 99* KT-00 |-----| 6164 MBF-01 |
| | 74 | 6164 |
| | | MBF-00 |
| |-----| |-----| |-----| |
| | 113 | | 200 | |-----| 6164 |
| | | | | | 56 | 6164 |
| |-----| |-----| | | VE-01A |
|TEST_SW |-----| VE-00 |-----| |
| | 156 | |
| CN4 LH52250 LH52250 LE01 | | |
| CN3* LH52250 LH52250 LE00 |-----| |
|-----------------------------------------------------|
Very similar to the DE-0396-0 described below with the notable exceptions:
The sound area reworked to use the HuC6280A instead of a standard Z80
Uses the larger 113 instead of the 153 chips, however both PCBs have
solder pads in the same locations for either chip.
Uses the 56 instead of the 141
DE-0396-0 DEC-22VO
|-----------------------------------------------------|
| TA8205AH Z80 MBF-05 2M-8M*|
| 6164 YM2151 MBF-04 8M*|
| LJ02 52* MBF-03 4M-16M*|
| YM3012 32.220MHz MBF-02 16M*|
| JP1 MBF-07 93C45 4M-16M*|
|CN2 MBF-06 16M*|
| M6295(1) 52* |
| M6295(2) |
| |-----| |-----| |
|J | 75 | 113/153* | 52 | |
|A | | |-----| | | |
|M |-----| | 153 | |-----| |
|M | | 28MHz |
|A |-----| |
| PAL* |
| 99* KT-00 |-----| 6164 MBF-01 |
| | 74 | 6164 |
| | | MBF-00 |
| |-----| |-----| |-----| |
| | 153 | | 200 | |-----| 6164 |
| | | | | | 141 | 6164 |
| |-----| |-----| | | VE-01A |
|TEST_SW |-----| VE-00 |-----| |
| | 156 | |
| CN4 LH52250 LH52250 LJ01-3 | | |
| CN3* LH52250 LH52250 LJ00-3 |-----| |
|-----------------------------------------------------|
This PCB is very close to the DE-397-0 listed above
Custom ICs-
DE # Package Type Additional #'s (for reference of scratched-off chips on other PCB's)
------------------------------------------------------------------------------------------------------
156 (CPU) 100 Pin PQFP 9321EV 301811 (Doesn't use encryption functions of the 156)
141 160 Pin PQFP 24220F008
74 160 Pin PQFP 24220F009
52 128 Pin PQFP 9313EV 211771 VC5259-0001
153 (x2) 144 Pin PQFP L7A0888 9312
75 100 Pin PQFP L7A0680 9143
200 100 Pin PQFP JAPAN 9315PP002 (chip is darker black)
NOTE: There are several unpopulated locations (denoted by *) for additional rom chips
or more custom ICs.
***************************************************************************/
#include "emu.h"
#include "includes/deco32.h"
#include "cpu/arm/arm.h"
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h"
#include "machine/decocrpt.h"
#include "machine/deco156.h"
#include "machine/input_merger.h"
#include "speaker.h"
#include <algorithm>
//**************************************************************************
// ADDRESS MAPS
//**************************************************************************
void captaven_state::captaven_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x100007).r(FUNC(captaven_state::_71_r));
map(0x100000, 0x100003).w(FUNC(captaven_state::buffer_spriteram_w<0>));
map(0x108000, 0x108003).nopw(); /* ? */
map(0x110000, 0x111fff).rw(FUNC(captaven_state::spriteram_r<0>), FUNC(captaven_state::spriteram_w<0>));
map(0x120000, 0x127fff).ram(); /* Main RAM */
map(0x128000, 0x12ffff).rw(FUNC(captaven_state::ioprot_r), FUNC(captaven_state::ioprot_w)).umask32(0x0000ffff);
map(0x130000, 0x131fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0x148000, 0x14800f).m(m_deco_irq, FUNC(deco_irq_device::map)).umask32(0x000000ff);
map(0x160000, 0x167fff).ram(); /* Extra work RAM */
map(0x168000, 0x168000).r(FUNC(captaven_state::captaven_dsw1_r));
map(0x168001, 0x168001).r(FUNC(captaven_state::captaven_dsw2_r));
map(0x168002, 0x168002).r(FUNC(captaven_state::captaven_dsw3_r));
map(0x168003, 0x168003).r(FUNC(captaven_state::captaven_soundcpu_status_r));
map(0x178000, 0x178003).w(FUNC(captaven_state::pri_w));
map(0x180000, 0x18001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x190000, 0x191fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x192000, 0x193fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w)); /* Mirror address - bug in program code */
map(0x194000, 0x195fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1a0000, 0x1a3fff).ram().w(FUNC(captaven_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x1a4000, 0x1a5fff).ram().w(FUNC(captaven_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1c0000, 0x1c001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1d0000, 0x1d1fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1d4000, 0x1d5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w)); // unused
map(0x1e0000, 0x1e3fff).ram().w(FUNC(captaven_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1e4000, 0x1e5fff).ram().w(FUNC(captaven_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32"); // unused
}
void fghthist_state::fghthist_map(address_map &map)
{
map.unmap_value_high();
// map(0x000000, 0x001fff).rom().w(FUNC(fghthist_state::pf1_data_w)); // wtf??
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x11ffff).ram();
map(0x120020, 0x120021).r(FUNC(fghthist_state::fghthist_in0_r));
map(0x120024, 0x120025).r(FUNC(fghthist_state::fghthist_in1_r));
map(0x120028, 0x120028).r(FUNC(fghthist_state::eeprom_r));
map(0x12002c, 0x12002c).w(FUNC(fghthist_state::eeprom_w));
map(0x12002d, 0x12002d).w(FUNC(fghthist_state::volume_w));
map(0x1201fc, 0x1201fc).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x140000, 0x140003).w(FUNC(fghthist_state::vblank_ack_w));
map(0x168000, 0x169fff).ram().w(FUNC(fghthist_state::buffered_palette_w)).share("paletteram");
map(0x16c008, 0x16c00b).w(FUNC(fghthist_state::palette_dma_w));
map(0x16c010, 0x16c013).r(FUNC(fghthist_state::unk_status_r));
map(0x178000, 0x179fff).rw(FUNC(fghthist_state::spriteram_r<0>), FUNC(fghthist_state::spriteram_w<0>));
map(0x17c010, 0x17c013).w(FUNC(fghthist_state::buffer_spriteram_w<0>));
map(0x17c020, 0x17c023).r(FUNC(fghthist_state::unk_status_r));
map(0x182000, 0x183fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x184000, 0x185fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x192000, 0x193fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x194000, 0x195fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1a0000, 0x1a001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1c2000, 0x1c3fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1c4000, 0x1c5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1d2000, 0x1d3fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1d4000, 0x1d5fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32");
map(0x1e0000, 0x1e001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x200000, 0x207fff).rw(FUNC(fghthist_state::ioprot_r), FUNC(fghthist_state::ioprot_w)).umask32(0xffff0000).share("prot32ram"); // only maps on 16-bits
map(0x208800, 0x208803).nopw(); /* ? */
}
void fghthist_state::fghthsta_memmap(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x11ffff).ram();
map(0x140000, 0x140003).w(FUNC(fghthist_state::vblank_ack_w));
map(0x150000, 0x150000).w(FUNC(fghthist_state::eeprom_w));
map(0x150001, 0x150001).w(FUNC(fghthist_state::volume_w));
map(0x168000, 0x169fff).ram().w(FUNC(fghthist_state::buffered_palette_w)).share("paletteram");
map(0x16c008, 0x16c00b).w(FUNC(fghthist_state::palette_dma_w));
map(0x16c010, 0x16c013).r(FUNC(fghthist_state::unk_status_r));
map(0x178000, 0x179fff).rw(FUNC(fghthist_state::spriteram_r<0>), FUNC(fghthist_state::spriteram_w<0>));
map(0x17c010, 0x17c013).w(FUNC(fghthist_state::buffer_spriteram_w<0>));
map(0x17c020, 0x17c023).r(FUNC(fghthist_state::unk_status_r));
map(0x182000, 0x183fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x184000, 0x185fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x192000, 0x193fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x194000, 0x195fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1a0000, 0x1a001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1c2000, 0x1c3fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1c4000, 0x1c5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1d2000, 0x1d3fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1d4000, 0x1d5fff).ram().w(FUNC(fghthist_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32");
map(0x1e0000, 0x1e001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x200000, 0x207fff).rw(FUNC(fghthist_state::ioprot_r), FUNC(fghthist_state::ioprot_w)).umask32(0xffff0000).share("prot32ram"); // only maps on 16-bits
}
// the video drawing (especially sprite) code on this is too slow to cope with proper partial updates
// raster effects appear to need some work on it anyway?
void dragngun_state::dragngun_map(address_map &map)
{
map(0x0000000, 0x00fffff).rom();
map(0x0100000, 0x011ffff).ram();
map(0x0120000, 0x0127fff).rw(FUNC(dragngun_state::ioprot_r), FUNC(dragngun_state::ioprot_w)).umask32(0x0000ffff);
// map(0x01204c0, 0x01204c3) AM_WRITE(sound_w)
map(0x0128000, 0x012800f).m(m_deco_irq, FUNC(deco_irq_device::map)).umask32(0x000000ff);
map(0x0130000, 0x0131fff).ram().w(FUNC(dragngun_state::buffered_palette_w)).share("paletteram");
map(0x0138000, 0x0138003).noprw(); /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */
map(0x0138008, 0x013800b).w(FUNC(dragngun_state::palette_dma_w));
// map(0x0150000, 0x0150003).nopw(); // Unknown; Masking related?
// map(0x0160000, 0x0160003).w(FUNC(dragngun_state::pri_w)); // priority
map(0x0170100, 0x0170103).nopw();
map(0x0170038, 0x017003b).nopw();
map(0x017002C, 0x017002f).nopw();
map(0x0170224, 0x0170227).nopw();
map(0x0180000, 0x018001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x0190000, 0x0191fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x0194000, 0x0195fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x01a0000, 0x01a3fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x01a4000, 0x01a5fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x01c0000, 0x01c001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x01d0000, 0x01d1fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x01d4000, 0x01d5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w)); // unused
map(0x01e0000, 0x01e3fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x01e4000, 0x01e5fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32"); // unused
map(0x0204800, 0x0204fff).ram(); // ace? 0x10 byte increments only // 13f ff stuff
map(0x0208000, 0x0208fff).ram().share("lay0");
map(0x020c000, 0x020cfff).ram().share("lay1");
map(0x0210000, 0x0217fff).ram().share("look0");
map(0x0218000, 0x021ffff).ram().share("look1");
map(0x0220000, 0x0221fff).ram().share("spriteram"); /* Main spriteram */
map(0x0228000, 0x02283ff).ram(); //0x10 byte increments only
map(0x0230000, 0x0230003).w(FUNC(dragngun_state::spriteram_dma_w));
map(0x0300000, 0x03fffff).rom();
map(0x0400000, 0x0400000).rw("oki3", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x0410000, 0x0410003).w(FUNC(dragngun_state::volume_w));
map(0x0418000, 0x0418003).w(FUNC(dragngun_state::speaker_switch_w));
map(0x0420000, 0x0420000).rw(FUNC(dragngun_state::eeprom_r), FUNC(dragngun_state::eeprom_w));
map(0x0430000, 0x043001f).w(FUNC(dragngun_state::lightgun_w));
map(0x0438000, 0x0438003).r(FUNC(dragngun_state::lightgun_r));
map(0x0440000, 0x0440003).portr("IN2");
map(0x0500000, 0x0500003).w(FUNC(dragngun_state::sprite_control_w));
// this is clearly the dvi video related area
map(0x1000000, 0x1000007).r(FUNC(dragngun_state::unk_video_r));
map(0x1000100, 0x1007fff).ram();
map(0x10b0000, 0x10b01ff).ram();
map(0x1400000, 0x1ffffff).rom().region("dvi", 0x00000); // reads from here during boss battles when the videos should be displayed at the offsets where the DVI headers are // as a result it ends up writing what looks like pointers to the frame data in the ram area above
}
void dragngun_state::lockloadu_map(address_map &map)
{
dragngun_map(map);
map(0x0170000, 0x0170007).r(FUNC(dragngun_state::lockload_gun_mirror_r)); /* Not on Dragongun */
}
void dragngun_state::lockload_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x11ffff).ram();
map(0x120000, 0x127fff).rw(FUNC(dragngun_state::ioprot_r), FUNC(dragngun_state::ioprot_w)).umask32(0x0000ffff);
map(0x128000, 0x12800f).m(m_deco_irq, FUNC(deco_irq_device::map)).umask32(0x000000ff);
map(0x130000, 0x131fff).ram().w(FUNC(dragngun_state::buffered_palette_w)).share("paletteram");
map(0x138000, 0x138003).readonly().nopw(); //palette dma complete in bit 0x8? ack? return 0 else tight loop
map(0x138008, 0x13800b).w(FUNC(dragngun_state::palette_dma_w));
map(0x170000, 0x170007).r(FUNC(dragngun_state::lockload_gun_mirror_r)); /* Not on Dragongun */
map(0x178008, 0x17800f).w(FUNC(dragngun_state::gun_irq_ack_w)); /* Gun read ACK's */
map(0x180000, 0x18001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x190000, 0x191fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x194000, 0x195fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1a0000, 0x1a3fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x1a4000, 0x1a5fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1c0000, 0x1c001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1d0000, 0x1d1fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1d4000, 0x1d5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w)); // unused
map(0x1e0000, 0x1e3fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1e4000, 0x1e5fff).ram().w(FUNC(dragngun_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32"); // unused
map(0x204800, 0x204fff).ram(); //0x10 byte increments only
map(0x208000, 0x208fff).ram().share("lay0");
map(0x20c000, 0x20cfff).ram().share("lay1");
map(0x210000, 0x217fff).ram().share("look0");
map(0x218000, 0x21ffff).ram().share("look1");
map(0x220000, 0x221fff).ram().share("spriteram"); /* Main spriteram */
map(0x228000, 0x2283ff).ram(); //0x10 byte increments only
map(0x230000, 0x230003).w(FUNC(dragngun_state::spriteram_dma_w));
map(0x300000, 0x3fffff).rom();
map(0x410000, 0x410003).w(FUNC(dragngun_state::volume_w));
map(0x420000, 0x420000).rw(FUNC(dragngun_state::eeprom_r), FUNC(dragngun_state::eeprom_w));
map(0x440000, 0x440003).portr("IN2");
map(0x500000, 0x500003).w(FUNC(dragngun_state::sprite_control_w));
}
void nslasher_state::tattass_map(address_map &map)
{
map(0x000000, 0x0f7fff).rom();
map(0x0f8000, 0x0fffff).rom().nopw();
map(0x100000, 0x11ffff).ram();
map(0x120000, 0x120003).noprw(); /* ACIA (unused) */
map(0x130000, 0x130003).nopw(); /* Coin port (unused?) */
map(0x140000, 0x140003).w(FUNC(nslasher_state::vblank_ack_w));
map(0x150000, 0x150003).w(FUNC(nslasher_state::tattass_control_w)); /* Volume port/Eprom/Priority */
map(0x162000, 0x162fff).ram(); /* 'Jack' RAM!? */
map(0x163000, 0x16309f).rw(m_deco_ace, FUNC(deco_ace_device::ace_r), FUNC(deco_ace_device::ace_w)).umask32(0x0000ffff); /* 'Ace' RAM */
map(0x164000, 0x164003).nopw(); /* Palette control BG2/3 ($1a constant) */
map(0x164004, 0x164007).nopw(); /* Palette control Obj1 ($6 constant) */
map(0x164008, 0x16400b).nopw(); /* Palette control Obj2 ($5 constant) */
map(0x16400c, 0x16400f).nopw();
map(0x168000, 0x169fff).rw(m_deco_ace, FUNC(deco_ace_device::buffered_palette_r), FUNC(deco_ace_device::buffered_palette_w));
map(0x16c000, 0x16c003).nopw();
map(0x16c008, 0x16c00b).w(m_deco_ace, FUNC(deco_ace_device::palette_dma_w));
map(0x170000, 0x171fff).rw(FUNC(nslasher_state::spriteram_r<0>), FUNC(nslasher_state::spriteram_w<0>));
map(0x174000, 0x174003).nopw(); /* Sprite DMA mode (2) */
map(0x174010, 0x174013).w(FUNC(nslasher_state::buffer_spriteram_w<0>));
map(0x174018, 0x17401b).nopw(); /* Sprite 'CPU' (unused) */
map(0x178000, 0x179fff).rw(FUNC(nslasher_state::spriteram_r<1>), FUNC(nslasher_state::spriteram_w<1>));
map(0x17c000, 0x17c003).nopw(); /* Sprite DMA mode (2) */
map(0x17c010, 0x17c013).w(FUNC(nslasher_state::buffer_spriteram_w<1>));
map(0x17c018, 0x17c01b).nopw(); /* Sprite 'CPU' (unused) */
map(0x182000, 0x183fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x184000, 0x185fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x192000, 0x193fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x194000, 0x195fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1a0000, 0x1a001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1c2000, 0x1c3fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1c4000, 0x1c5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1d2000, 0x1d3fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1d4000, 0x1d5fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32");
map(0x1e0000, 0x1e001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x200000, 0x207fff).rw(FUNC(nslasher_state::ioprot_r), FUNC(nslasher_state::ioprot_w)).umask32(0xffff0000);
map(0x200000, 0x207fff).r(FUNC(nslasher_state::nslasher_debug_r)).umask32(0x0000ffff);
}
void nslasher_state::nslasher_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x100000, 0x11ffff).ram();
map(0x120000, 0x1200ff).noprw(); /* ACIA (unused) */
map(0x140000, 0x140003).w(FUNC(nslasher_state::vblank_ack_w));
map(0x150000, 0x150000).w(FUNC(nslasher_state::eeprom_w));
map(0x150001, 0x150001).w(FUNC(nslasher_state::volume_w));
map(0x163000, 0x16309f).rw(m_deco_ace, FUNC(deco_ace_device::ace_r), FUNC(deco_ace_device::ace_w)).umask32(0x0000ffff); /* 'Ace' RAM */
map(0x164000, 0x164003).nopw(); /* Palette control BG2/3 ($1a constant) */
map(0x164004, 0x164007).nopw(); /* Palette control Obj1 ($4 constant) */
map(0x164008, 0x16400b).nopw(); /* Palette control Obj2 ($6 constant) */
map(0x16400c, 0x16400f).nopw();
map(0x168000, 0x169fff).rw(m_deco_ace, FUNC(deco_ace_device::buffered_palette_r), FUNC(deco_ace_device::buffered_palette_w));
map(0x16c000, 0x16c003).nopw();
map(0x16c008, 0x16c00b).w(m_deco_ace, FUNC(deco_ace_device::palette_dma_w));
map(0x170000, 0x171fff).rw(FUNC(nslasher_state::spriteram_r<0>), FUNC(nslasher_state::spriteram_w<0>));
map(0x174000, 0x174003).nopw(); /* Sprite DMA mode (2) */
map(0x174010, 0x174013).w(FUNC(nslasher_state::buffer_spriteram_w<0>));
map(0x174018, 0x17401b).nopw(); /* Sprite 'CPU' (unused) */
map(0x178000, 0x179fff).rw(FUNC(nslasher_state::spriteram_r<1>), FUNC(nslasher_state::spriteram_w<1>));
map(0x17c000, 0x17c003).nopw(); /* Sprite DMA mode (2) */
map(0x17c010, 0x17c013).w(FUNC(nslasher_state::buffer_spriteram_w<1>));
map(0x17c018, 0x17c01b).nopw(); /* Sprite 'CPU' (unused) */
map(0x182000, 0x183fff).rw("tilegen1", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x184000, 0x185fff).rw("tilegen1", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x192000, 0x193fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<0>)).share("pf1_rowscroll32");
map(0x194000, 0x195fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<1>)).share("pf2_rowscroll32");
map(0x1a0000, 0x1a001f).rw("tilegen1", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x1c2000, 0x1c3fff).rw("tilegen2", FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
map(0x1c4000, 0x1c5fff).rw("tilegen2", FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
map(0x1d2000, 0x1d3fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<2>)).share("pf3_rowscroll32");
map(0x1d4000, 0x1d5fff).ram().w(FUNC(nslasher_state::pf_rowscroll_w<3>)).share("pf4_rowscroll32");
map(0x1e0000, 0x1e001f).rw("tilegen2", FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
map(0x200000, 0x207fff).rw(FUNC(nslasher_state::ioprot_r), FUNC(nslasher_state::ioprot_w)).umask32(0xffff0000);
map(0x200000, 0x207fff).r(FUNC(nslasher_state::nslasher_debug_r)).umask32(0x0000ffff); // seems to be debug switches / code activated by this?
}
// H6280 based sound
void deco32_state::h6280_sound_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x110000, 0x110001).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0x120000, 0x120001).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x130000, 0x130001).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x140000, 0x140000).r(m_ioprot, FUNC(deco_146_base_device::soundlatch_r));
map(0x1f0000, 0x1f1fff).ram();
}
void deco32_state::h6280_sound_custom_latch_map(address_map &map)
{
h6280_sound_map(map);
map(0x140000, 0x140000).r("soundlatch", FUNC(generic_latch_8_device::read));
}
// Z80 based sound
void deco32_state::z80_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram();
map(0xa000, 0xa001).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xb000, 0xb000).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xc000, 0xc000).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0xd000, 0xd000).r(m_ioprot, FUNC(deco_146_base_device::soundlatch_r));
}
void deco32_state::z80_sound_io(address_map &map)
{
map(0x0000, 0xffff).rom().region("audiocpu", 0);
}
// lockload needs hi bits of OKI2 bankswitching
void dragngun_state::lockload_sound_map(address_map &map)
{
z80_sound_map(map);
map(0xe000, 0xe000).w(FUNC(dragngun_state::lockload_okibank_hi_w));
}
void dragngun_state::lockloadu_sound_map(address_map &map)
{
h6280_sound_map(map);
map(0x150000, 0x150000).w(FUNC(dragngun_state::lockload_okibank_hi_w));
}
//**************************************************************************
// PROTECTION
//**************************************************************************
READ16_MEMBER( deco32_state::ioprot_r )
{
offs_t real_address = 0 + (offset *2);
offs_t deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
uint8_t cs = 0;
return m_ioprot->read_data( deco146_addr, mem_mask, cs );
}
WRITE16_MEMBER( deco32_state::ioprot_w )
{
offs_t real_address = 0 + (offset *2);
offs_t deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
uint8_t cs = 0;
m_ioprot->write_data( space, deco146_addr, data, mem_mask, cs );
}
//**************************************************************************
// SOUND
//**************************************************************************
WRITE8_MEMBER( deco32_state::volume_w )
{
// TODO: assume linear with a 0.0-1.0 dB scale for now
uint8_t raw_vol = 0xff - data;
float vol_output = ((float)raw_vol) / 255.0f;
m_ym2151->set_output_gain(ALL_OUTPUTS, vol_output);
m_oki[0]->set_output_gain(ALL_OUTPUTS, vol_output);
m_oki[1]->set_output_gain(ALL_OUTPUTS, vol_output);
}
READ8_MEMBER( captaven_state::captaven_soundcpu_status_r )
{
// 7------- sound cpu status (0 = busy)
// -6543210 unknown
return 0xff;
}
WRITE32_MEMBER( dragngun_state::volume_w )
{
m_vol_main->ce_w(BIT(data, 2));
m_vol_main->clk_w(BIT(data, 1));
m_vol_main->di_w(BIT(data, 0));
if (m_vol_gun.found())
{
m_vol_gun->ce_w(BIT(data, 2));
m_vol_gun->clk_w(BIT(data, 1));
m_vol_gun->di_w(BIT(data, 0));
}
}
WRITE32_MEMBER( dragngun_state::speaker_switch_w )
{
// TODO: This should switch the oki3 output between the gun speaker and the standard speakers
m_gun_speaker_disabled = bool(BIT(data, 0));
logerror("Gun speaker: %s\n", m_gun_speaker_disabled ? "Disabled" : "Enabled");
}
LC7535_VOLUME_CHANGED( dragngun_state::volume_main_changed )
{
// TODO: Support loudness
logerror("Main speaker volume: left = %d dB, right %d dB, loudness = %s\n", attenuation_left, attenuation_right, loudness ? "on" :"off");
// convert to 0.0 - 1.0
float gain_l = m_vol_main->normalize(attenuation_left);
float gain_r = m_vol_main->normalize(attenuation_right);
m_ym2151->set_output_gain(0, gain_l);
m_ym2151->set_output_gain(1, gain_r); // left and right are always set to the same value
m_oki[0]->set_output_gain(ALL_OUTPUTS, gain_l);
m_oki[1]->set_output_gain(ALL_OUTPUTS, gain_l);
if (m_oki[2].found() && m_gun_speaker_disabled)
m_oki[2]->set_output_gain(ALL_OUTPUTS, gain_l);
}
LC7535_VOLUME_CHANGED( dragngun_state::volume_gun_changed )
{
logerror("Gun speaker volume: left = %d dB, right %d dB, loudness = %s\n", attenuation_left, attenuation_right, loudness ? "on" :"off");
if (m_oki[2].found() && !m_gun_speaker_disabled)
m_oki[2]->set_output_gain(ALL_OUTPUTS, m_vol_gun->normalize(attenuation_left));
}
WRITE_LINE_MEMBER( nslasher_state::tattass_sound_irq_w )
{
if (state)
{
uint8_t data = m_ioprot->soundlatch_r(machine().dummy_space(), 0);
// Swap bits 0 and 3 to correct for design error from BSMT schematic
data = bitswap<8>(data, 7, 6, 5, 4, 0, 2, 1, 3);
m_decobsmt->bsmt_comms_w(machine().dummy_space(), 0, data);
}
}
WRITE8_MEMBER( deco32_state::sound_bankswitch_w )
{
m_oki[0]->set_rom_bank((data >> 0) & 1);
m_oki[1]->set_rom_bank((data >> 1) & 1);
}
WRITE8_MEMBER( dragngun_state::lockload_okibank_lo_w )
{
m_oki2_bank = (m_oki2_bank & 2) | ((data >> 1) & 1);
logerror("Load OKI2 Bank Low bits: %02x, Current : %02x\n",(data >> 1) & 1, m_oki2_bank);
m_oki[0]->set_rom_bank((data >> 0) & 1);
m_oki[1]->set_rom_bank(m_oki2_bank);
}
WRITE8_MEMBER( dragngun_state::lockload_okibank_hi_w )
{
m_oki2_bank = (m_oki2_bank & 1) | ((data & 1) << 1); // TODO : Actually value unverified
logerror("Load OKI2 Bank Hi bits: %02x, Current : %02x\n",((data & 1) << 1), m_oki2_bank);
m_oki[1]->set_rom_bank(m_oki2_bank);
}
//**************************************************************************
// VIDEO
//**************************************************************************
WRITE32_MEMBER( deco32_state::vblank_ack_w )
{
m_maincpu->set_input_line(ARM_IRQ_LINE, CLEAR_LINE);
}
template<int Chip>
READ32_MEMBER(deco32_state::spriteram_r)
{
return m_spriteram16[Chip][offset] ^ 0xffff0000;
}
template<int Chip>
WRITE32_MEMBER(deco32_state::spriteram_w)
{
data &= 0x0000ffff;
mem_mask &= 0x0000ffff;
COMBINE_DATA(&m_spriteram16[Chip][offset]);
}
template<int Chip>
WRITE32_MEMBER(deco32_state::buffer_spriteram_w)
{
std::copy(&m_spriteram16[Chip][0], &m_spriteram16[Chip][0x2000/4], &m_spriteram16_buffered[Chip][0]);
}
// tattass tests these as 32-bit ram, even if only 16-bits are hooked up to the tilemap chip - does it mirror parts of the dword?
template <int TileMap> WRITE32_MEMBER( deco32_state::pf_rowscroll_w ) { COMBINE_DATA(&m_pf_rowscroll32[TileMap][offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf_rowscroll[TileMap][offset]); }
READ32_MEMBER( dragngun_state::unk_video_r)
{
return machine().rand();
}
DECOSPR_PRIORITY_CB_MEMBER( captaven_state::captaven_pri_callback )
{
if ((pri & 0x60) == 0x00)
{
return 0; // above everything
}
else if ((pri & 0x60) == 0x20)
{
return 0xfff0; // above the 2nd playfield
}
else if ((pri & 0x60) == 0x40)
{
return 0xfffc; // above the 1st playfield
}
else
{
return 0xfffe; // under everything
}
}
DECO16IC_BANK_CB_MEMBER( captaven_state::bank_callback )
{
return (bank & 0x20) << 9;
}
DECO16IC_BANK_CB_MEMBER( fghthist_state::bank_callback )
{
bank = (bank & 0x10) | ((bank & 0x40) >> 1) | ((bank & 0x20) << 1);
return bank << 8;
}
DECO16IC_BANK_CB_MEMBER( dragngun_state::bank_1_callback )
{
return (bank & ~0xf) << 8;
}
DECO16IC_BANK_CB_MEMBER( dragngun_state::bank_2_callback )
{
return (bank & ~0x1f) << 7;
}
DECO16IC_BANK_CB_MEMBER( nslasher_state::bank_callback )
{
return (bank & ~0xf) << 8;
}
//**************************************************************************
// INPUTS
//**************************************************************************
READ8_MEMBER( captaven_state::captaven_dsw1_r ) { return ioport("DSW1")->read(); }
READ8_MEMBER( captaven_state::captaven_dsw2_r ) { return ioport("DSW2")->read(); }
READ8_MEMBER( captaven_state::captaven_dsw3_r ) { return ioport("DSW3")->read(); }
READ16_MEMBER( fghthist_state::fghthist_in0_r ) { return ioport("IN0")->read(); }
READ16_MEMBER( fghthist_state::fghthist_in1_r ) { return ioport("IN1")->read(); }
// TODO: probably clears both player 1 and player 2
WRITE32_MEMBER( dragngun_state::gun_irq_ack_w )
{
m_deco_irq->lightgun_irq_ack_w(data);
}
// TODO: improve this, Y axis not understood at all
READ32_MEMBER( dragngun_state::lockload_gun_mirror_r )
{
//logerror("%08x:Read gun %d\n",m_maincpu->pc(),offset);
switch(offset)
{
case 0:
return ((ioport("INPUTS")->read() & 0x30) << 5) | (ioport("LIGHT0_X")->read()) | 0xffff800;
case 1:
return ((ioport("INPUTS")->read() & 0x3000) >> 3) | (ioport("LIGHT1_X")->read()) | 0xffff800;
}
return ~0;
}
READ32_MEMBER( dragngun_state::lightgun_r )
{
/* Ports 0-3 are read, but seem unused */
switch (m_lightgun_port)
{
case 4: return ioport("LIGHT0_X")->read();
case 5: return ioport("LIGHT1_X")->read();
case 6: return ioport("LIGHT0_Y")->read();
case 7: return ioport("LIGHT1_Y")->read();
}
// logerror("Illegal lightgun port %d read \n",m_lightgun_port);
return 0;
}
WRITE32_MEMBER( dragngun_state::lightgun_w )
{
// logerror("Lightgun port %d\n",m_lightgun_port);
m_lightgun_port=offset;
}
INPUT_CHANGED_MEMBER( dragngun_state::lockload_gun_trigger )
{
switch ((uint8_t)(uintptr_t)param)
{
case 0: m_deco_irq->lightgun1_trigger_w(!newval); break;
case 1: m_deco_irq->lightgun2_trigger_w(!newval); break;
}
}
//**************************************************************************
// EEPROM
//**************************************************************************
READ8_MEMBER( deco32_state::eeprom_r )
{
return 0xfe | m_eeprom->do_read();
}
WRITE8_MEMBER( deco32_state::eeprom_w )
{
// 7------- unknown
// -6------ eeprom cs
// --5----- eeprom clk
// ---4---- eeprom di
// ----32-- unknown
// ------1- bg2/3 joint mode (8bpp) (not used by fghthist?)
// -------0 layer priority
m_eeprom->clk_write(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->di_write(BIT(data, 4));
m_eeprom->cs_write(BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
pri_w(data & 0x03, 0xffffffff);
}
WRITE8_MEMBER( dragngun_state::eeprom_w )
{
// 76543--- unknown
// -----2-- eeprom cs
// ------1- eeprom clk
// -------0 eeprom di
m_eeprom->clk_write(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->di_write(BIT(data, 0));
m_eeprom->cs_write(BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE);
}
WRITE32_MEMBER( nslasher_state::tattass_control_w )
{
/* Eprom in low byte */
if (ACCESSING_BITS_0_7)
{ /* Byte write to low byte only (different from word writing including low byte) */
/*
The Tattoo Assassins eprom seems strange... It's 1024 bytes in size, and 8 bit
in width, but offers a 'multiple read' mode where a bit stream can be read
starting at any byte boundary.
Multiple read mode:
Write 110aa000 [Read command, top two bits of address, 4 zeroes]
Write 00000000 [8 zeroes]
Write aaaaaaaa [Bottom 8 bits of address]
Then bits are read back per clock, for as many bits as needed (NOT limited to byte
boundaries).
Write mode:
Write 000aa000 [Write command, top two bits of address, 4 zeroes]
Write 00000000 [8 zeroes]
Write aaaaaaaa [Bottom 8 bits of address]
Write dddddddd [8 data bits]
*/
if ((BIT(data, 6)) == 0)
{
if (m_buf_ptr)
{
int i;
logerror("Eprom reset (bit count %d): ", m_read_bit_count);
for (i = 0; i < m_buf_ptr; i++)
logerror("%s", BIT(m_buffer, m_buf_ptr - 1 - i) ? "1" : "0");
logerror("\n");
}
m_buf_ptr = 0;
m_pending_command = 0;
m_read_bit_count = 0;
}
/* Eprom has been clocked */
if (m_last_clock == 0 && BIT(data, 5) && BIT(data, 6))
{
if (m_buf_ptr >= 32)
{
logerror("Eprom overflow!");
m_buf_ptr = 0;
}
/* Handle pending read */
if (m_pending_command == 1)
{
int d = m_read_bit_count >> 3;
int m = 7 - (m_read_bit_count & 0x7);
int a = (m_byte_addr + d) & 0x3ff;
int b = m_eeprom->internal_read(a);
m_tattass_eprom_bit = (b >> m) & 1;
m_read_bit_count++;
m_last_clock = BIT(data, 5);
return;
}
/* Handle pending write */
if (m_pending_command == 2)
{
m_buffer = (m_buffer << 1) | BIT(data, 4);
m_buf_ptr++;
if (m_buf_ptr == 32)
{
m_eeprom->internal_write(m_byte_addr, m_buffer & 0xff);
}
m_last_clock = BIT(data, 5);
return;
}
m_buffer = (m_buffer << 1) | BIT(data, 4);
m_buf_ptr++;
if (m_buf_ptr == 24)
{
/* Decode addr */
m_byte_addr = ((m_buffer & 0x180000) >> 11) | (m_buffer & 0x0000ff);
/* Check for read command */
if ((m_buffer & 0xc00000) == 0xc00000)
{
m_tattass_eprom_bit = (m_eeprom->internal_read(m_byte_addr) >> 7) & 1;
m_read_bit_count = 1;
m_pending_command = 1;
}
/* Check for write command */
else if ((m_buffer & 0xc00000) == 0x0)
{
m_pending_command = 2;
}
else
{
logerror("Detected unknown eprom command\n");
}
}
}
else
{
if (!(BIT(data, 6))) {
logerror("Cs set low\n");
m_buf_ptr = 0;
}
}
m_last_clock = BIT(data, 5);
}
/* Volume in high byte */
if (ACCESSING_BITS_8_15)
{
//TODO: volume attenuation == ((data >> 8) & 0xff);
// TODO: is it really there?
}
/* Playfield control - Only written in full word memory accesses */
pri_w(data & 0x3, 0xffffffff); /* Bit 0 - layer priority toggle, Bit 1 - BG2/3 Joint mode (8bpp) */
/* Sound board reset control */
if (BIT(data, 7))
m_decobsmt->bsmt_reset_line(CLEAR_LINE);
else
m_decobsmt->bsmt_reset_line(ASSERT_LINE);
/* bit 0x4 fade cancel? */
/* bit 0x8 ?? */
/* Bit 0x100 ?? */
//logerror("%08x: %08x data\n",data,mem_mask);
}
READ16_MEMBER( nslasher_state::port_b_tattass )
{
return m_tattass_eprom_bit;
}
//**************************************************************************
// MACHINE
//**************************************************************************
READ32_MEMBER( fghthist_state::unk_status_r )
{
// bit 3 needs to be 0
return 0xfffffff7;
}
READ16_MEMBER( nslasher_state::nslasher_debug_r )
{
return 0xffff;
}
READ32_MEMBER( captaven_state::_71_r )
{
/* Bit 0x80 goes high when sprite DMA is complete, and low
while it's in progress, we don't bother to emulate it */
return 0xffffffff;
}
void captaven_state::init_captaven()
{
deco56_decrypt_gfx(machine(), "gfx1");
deco56_decrypt_gfx(machine(), "gfx2");
}
extern void process_dvi_data(device_t *device,uint8_t* dvi_data, int offset, int regionsize);
void dragngun_state::dragngun_init_common()
{
const uint8_t *SRC_RAM = memregion("gfx1")->base();
uint8_t *DST_RAM = memregion("gfx2")->base();
deco74_decrypt_gfx(machine(), "gfx1");
deco74_decrypt_gfx(machine(), "gfx2");
deco74_decrypt_gfx(machine(), "gfx3");
std::copy(&SRC_RAM[0x00000], &SRC_RAM[0x10000], &DST_RAM[0x080000]);
std::copy(&SRC_RAM[0x10000], &SRC_RAM[0x20000], &DST_RAM[0x110000]);
#if 0
{
uint8_t *ROM = memregion("dvi")->base();
FILE *fp;
char filename[256];
sprintf(filename,"video.dvi");
fp=fopen(filename, "w+b");
if (fp)
{
fwrite(ROM, 0xc00000, 1, fp);
fclose(fp);
}
}
#endif
save_item(NAME(m_lightgun_port));
// there are DVI headers at 0x000000, 0x580000, 0x800000, 0xB10000, 0xB80000
// process_dvi_data(this,memregion("dvi")->base(),0x000000, 0x1000000);
// process_dvi_data(this,memregion("dvi")->base(),0x580000, 0x1000000);
// process_dvi_data(this,memregion("dvi")->base(),0x800000, 0x1000000);
// process_dvi_data(this,memregion("dvi")->base(),0xB10000, 0x1000000);
// process_dvi_data(this,memregion("dvi")->base(),0xB80000, 0x1000000);
}
void dragngun_state::init_dragngun()
{
dragngun_init_common();
uint32_t *ROM = (uint32_t *)memregion("maincpu")->base();
ROM[0x1b32c/4]=0xe1a00000; // bl $ee000: NOP test switch lock
}
void dragngun_state::init_dragngunj()
{
dragngun_init_common();
uint32_t *ROM = (uint32_t *)memregion("maincpu")->base();
ROM[0x1a1b4/4]=0xe1a00000; // bl $ee000: NOP test switch lock
}
void fghthist_state::init_fghthist()
{
deco56_decrypt_gfx(machine(), "gfx1");
deco74_decrypt_gfx(machine(), "gfx2");
}
void dragngun_state::init_lockload()
{
// uint32_t *ROM = (uint32_t *)memregion("maincpu")->base();
deco74_decrypt_gfx(machine(), "gfx1");
deco74_decrypt_gfx(machine(), "gfx2");
deco74_decrypt_gfx(machine(), "gfx3");
// ROM[0x3fe3c0/4]=0xe1a00000;// NOP test switch lock
// ROM[0x3fe3cc/4]=0xe1a00000;// NOP test switch lock
// ROM[0x3fe40c/4]=0xe1a00000;// NOP test switch lock
save_item(NAME(m_oki2_bank));
}
void nslasher_state::init_tattass()
{
uint8_t *RAM = memregion("gfx1")->base();
std::vector<uint8_t> tmp(0x80000);
/* Reorder bitplanes to make decoding easier */
std::copy(&RAM[0x080000], &RAM[0x100000], tmp.begin());
std::copy(&RAM[0x100000], &RAM[0x180000], &RAM[0x080000]);
std::copy(tmp.begin(), tmp.end(), &RAM[0x100000]);
RAM = memregion("gfx2")->base();
std::copy(&RAM[0x080000], &RAM[0x100000], tmp.begin());
std::copy(&RAM[0x100000], &RAM[0x180000], &RAM[0x080000]);
std::copy(tmp.begin(), tmp.end(), &RAM[0x100000]);
deco56_decrypt_gfx(machine(), "gfx1"); /* 141 */
deco56_decrypt_gfx(machine(), "gfx2"); /* 141 */
save_item(NAME(m_tattass_eprom_bit));
save_item(NAME(m_last_clock));
save_item(NAME(m_buffer));
save_item(NAME(m_buf_ptr));
save_item(NAME(m_pending_command));
save_item(NAME(m_read_bit_count));
save_item(NAME(m_byte_addr));
}
void nslasher_state::init_nslasher()
{
uint8_t *RAM = memregion("gfx1")->base();
std::vector<uint8_t> tmp(0x80000);
/* Reorder bitplanes to make decoding easier */
std::copy(&RAM[0x080000], &RAM[0x100000], tmp.begin());
std::copy(&RAM[0x100000], &RAM[0x180000], &RAM[0x080000]);
std::copy(tmp.begin(), tmp.end(), &RAM[0x100000]);
RAM = memregion("gfx2")->base();
std::copy(&RAM[0x080000], &RAM[0x100000], tmp.begin());
std::copy(&RAM[0x100000], &RAM[0x180000], &RAM[0x080000]);
std::copy(tmp.begin(), tmp.end(), &RAM[0x100000]);
deco56_decrypt_gfx(machine(), "gfx1"); /* 141 */
deco74_decrypt_gfx(machine(), "gfx2");
deco156_decrypt(machine());
/* The board for Night Slashers is very close to the Fighter's History and
Tattoo Assassins boards, but has an encrypted ARM cpu. */
}
//**************************************************************************
// INPUT DEFINITIONS
//**************************************************************************
/* Notes (2002.02.05) :
When the "Continue Coin" Dip Switch is set to "2 Start/1 Continue",
the "Coinage" Dip Switches have no effect.
START, BUTTON1 and COIN effects :
2 players, common coin slots
STARTn starts a game for player n. It adds 100 energy points each time it is pressed
(provided there are still some credits, and energy is <= 900).
BUTTON1n selects the character for player n.
COIN1n adds credit(s)/coin(s).
2 players, individual coin slots
NO STARTn button !
BUTTON1n starts a game for player n. It also adds 100 energy points for each credit
inserted for the player. It then selects the character for player n.
COIN1n adds 100 energy points (based on "Coinage") for player n when ingame if energy
<= 900, else adds credit(s)/coin(s) for player n.
4 players, common coin slots
NO STARTn button !
BUTTON1n starts a game for player n. It gives 100 energy points. It then selects the
character for player n.
4 players, individual coin slots
NO STARTn button !
BUTTON1n starts a game for player n. It also adds 100 energy points for each credit
inserted for the player. It then selects the character for player n.
COIN1n adds 100 energy points (based on "Coinage") for player n when ingame if energy
<= 900, else adds credit(s)/coin(s) for player n.
*/
static INPUT_PORTS_START( captaven )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_START("DSW1")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("DSW1:1,2,3")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("DSW1:4,5,6")
PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW1:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Continue Coin" ) PORT_DIPLOCATION("DSW1:8")
PORT_DIPSETTING( 0x80, "1 Start/1 Continue" )
PORT_DIPSETTING( 0x00, "2 Start/1 Continue" )
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW2:1,2")
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:3,4")
PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x10, 0x10, "Coin Slots" ) PORT_DIPLOCATION("DSW2:5")
PORT_DIPSETTING( 0x10, "Common" )
PORT_DIPSETTING( 0x00, "Individual" )
PORT_DIPNAME( 0x20, 0x20, "Play Mode" ) PORT_DIPLOCATION("DSW2:6")
PORT_DIPSETTING( 0x20, "2 Player" )
PORT_DIPSETTING( 0x00, "4 Player" )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("DSW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
// This one isn't documented in the manual
PORT_START("DSW3")
PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "DSW3:1")
PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "DSW3:2")
PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "DSW3:3")
PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "DSW3:4")
PORT_DIPNAME( 0x10, 0x10, "Reset") PORT_DIPLOCATION("DSW3:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Free_Play )) PORT_DIPLOCATION("DSW3:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPNAME( 0x40, 0x40, "Stage Select") PORT_DIPLOCATION("DSW3:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPNAME( 0x80, 0x80, "Debug Mode") PORT_DIPLOCATION("DSW3:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
INPUT_PORTS_END
static INPUT_PORTS_START( fghthist )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( dragngun )
PORT_START("INPUTS")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("SYSTEM")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_START("DSW")
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) /* Would be a dipswitch, but only 1 present on board */
PORT_DIPNAME( 0x0100, 0x0000, "Reset" ) /* Behaves like Reset */
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x4000, "Stage Select" )
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, "Debug Mode" )
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("IN2")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // is this actually vblank?
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_SERVICE( 0x0004, IP_ACTIVE_LOW )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) //check //test BUTTON F2
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("LIGHT0_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1)
PORT_START("LIGHT1_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2)
PORT_START("LIGHT0_Y")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1)
PORT_START("LIGHT1_Y")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( lockload )
PORT_START("INPUTS")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Fire") PORT_CHANGED_MEMBER(DEVICE_SELF, dragngun_state, lockload_gun_trigger, 0)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Reload")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Fire") PORT_CHANGED_MEMBER(DEVICE_SELF, dragngun_state, lockload_gun_trigger, 1)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Reload")
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("SYSTEM")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_START("DSW")
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) /* Would be a dipswitch, but only 1 present on board */
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Free_Play ) )
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x0000, "Reset" )
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, "Debug Mode" )
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("IN2")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_SERVICE( 0x0004, IP_ACTIVE_LOW )
PORT_BIT( 0x00f8, IP_ACTIVE_LOW, IPT_UNUSED ) //check //test BUTTON F2
PORT_START("LIGHT0_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1)
PORT_START("LIGHT0_Y")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1)
PORT_START("LIGHT1_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2)
PORT_START("LIGHT1_Y")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( tattass )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) /* 'soundmask' */
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( nslasher )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_8WAY
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) /* 'soundmask' */
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START3 )
INPUT_PORTS_END
//**************************************************************************
// GFXDECODE LAYOUTS
//**************************************************************************
static const gfx_layout charlayout =
{
8,8,
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
{ STEP8(0,1) },
{ STEP8(0,8*2) },
16*8 /* every char takes 8 consecutive bytes */
};
static const gfx_layout tilelayout =
{
16,16,
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
{ STEP8(16*8*2,1), STEP8(0,1) },
{ STEP16(0,8*2) },
64*8
};
static const gfx_layout tilelayout_8bpp =
{
16,16,
RGN_FRAC(1,4),
8,
{ RGN_FRAC(3,4)+8, RGN_FRAC(3,4)+0, RGN_FRAC(2,4)+8, RGN_FRAC(2,4)+0, RGN_FRAC(1,4)+8, RGN_FRAC(1,4)+0, 8, 0 },
{ STEP8(16*8*2,1), STEP8(0,1) },
{ STEP16(0,8*2) },
64*8
};
static const gfx_layout tilelayout_5bpp =
{
16,16,
RGN_FRAC(1,3),
5,
{ RGN_FRAC(2,3), RGN_FRAC(1,3)+8, RGN_FRAC(1,3), 8, 0 },
{ STEP8(16*8*2,1), STEP8(0,1) },
{ STEP16(0,8*2) },
64*8
};
static const gfx_layout tilelayout_5bpp_alt =
{
16,16,
RGN_FRAC(1,5),
5,
{ RGN_FRAC(4,5), RGN_FRAC(3,5), RGN_FRAC(2,5), RGN_FRAC(1,5), 0 },
{ STEP8(16*8,1), STEP8(0,1) },
{ STEP16(0,8) },
32*8
};
static const gfx_layout spritelayout4 =
{
16,16,
RGN_FRAC(1,1),
4,
{ STEP4(0,1) },
{ STEP16(0,8) },
{ STEP16(0,16*8) },
16*16*8
};
static const gfx_layout spritelayout5 =
{
16,16,
RGN_FRAC(1,1),
4,
{ STEP4(4,1) },
{ STEP16(0,8) },
{ STEP16(0,16*8) },
16*16*8
};
static GFXDECODE_START( gfx_captaven )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_8bpp, 0, 8 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 32 ) /* Sprites 16x16 */
GFXDECODE_END
static GFXDECODE_START( gfx_fghthist )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 1024, 32 ) /* Sprites 16x16 */
GFXDECODE_END
static GFXDECODE_START( gfx_dragngun )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 64 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 64 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout_8bpp, 0, 8 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx4", 0, spritelayout4, 0, 32 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "gfx4", 0, spritelayout5, 0, 32 ) /* Sprites 16x16 */
GFXDECODE_END
static GFXDECODE_START( gfx_tattass )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout_5bpp_alt, 1536, 16 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 1024+256, 32 ) /* Sprites 16x16 */
GFXDECODE_END
static GFXDECODE_START( gfx_nslasher )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, tilelayout_5bpp, 1024, 16 ) /* Sprites 16x16 */
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 1536, 32 ) /* Sprites 16x16 */
GFXDECODE_END
//**************************************************************************
// MACHINE DEFINITIONS
//**************************************************************************
MACHINE_CONFIG_START(captaven_state::captaven)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", ARM, XTAL(28'000'000)/4) /* verified on pcb (Data East 101 custom)*/
MCFG_DEVICE_PROGRAM_MAP(captaven_map)
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000)/4/3)); /* pin 10 is 32mhz/4, pin 14 is High so internal divisor is 3 (verified on pcb) */
audiocpu.set_addrmap(AS_PROGRAM, &captaven_state::h6280_sound_map);
audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
MCFG_INPUT_MERGER_ANY_HIGH("irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", ARM_IRQ_LINE))
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_RASTER2_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO_IRQ_VBLANK_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(captaven_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_captaven)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(XBGR)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0) // pf3 is in 8bpp mode, pf4 is not used
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_32x32)
MCFG_DECO16IC_PF2_SIZE(DECO_32x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0xff)
MCFG_DECO16IC_PF2_TRANS_MASK(0x00)
MCFG_DECO16IC_PF1_COL_BANK(0x10)
MCFG_DECO16IC_PF2_COL_BANK(0x00)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x00)
MCFG_DECO16IC_BANK1_CB(captaven_state, bank_callback)
// no bank2 callback
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen1", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
MCFG_DECO_SPRITE_PRIORITY_CB(captaven_state, captaven_pri_callback)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DECO146_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("IN0"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("IN1"))
MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ymsnd", YM2151, XTAL(32'220'000)/9) /* verified on pcb */
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
MCFG_DEVICE_ADD("oki1", OKIM6295, XTAL(32'220'000)/32, okim6295_device::PIN7_HIGH) /* verified on pcb; pin 7 is floating to 2.5V (left unconnected), so I presume High */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADD("oki2", OKIM6295, XTAL(32'220'000)/16, okim6295_device::PIN7_HIGH) /* verified on pcb; pin 7 is floating to 2.5V (left unconnected), so I presume High */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35)
MACHINE_CONFIG_END
// DE-0380-2
MACHINE_CONFIG_START(fghthist_state::fghthist)
MCFG_DEVICE_ADD("maincpu", ARM, XTAL(28'000'000) / 4)
MCFG_DEVICE_PROGRAM_MAP(fghthist_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco32_state, irq0_line_assert)
h6280_device &audiocpu(H6280(config, m_audiocpu, XTAL(32'220'000) / 8));
audiocpu.set_addrmap(AS_PROGRAM, &fghthist_state::h6280_sound_custom_latch_map);
audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
EEPROM_93C46_16BIT(config, "eeprom");
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(fghthist_state, screen_update)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_fghthist)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x00)
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(fghthist_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(fghthist_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(fghthist_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(fghthist_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen1", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
DECO146PROT(config, m_ioprot, 0);
m_ioprot->port_a_cb().set_ioport("IN0");
m_ioprot->port_b_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(0);
m_ioprot->port_c_cb().set_ioport("IN1");
m_ioprot->set_interface_scramble_interleave();
m_ioprot->set_use_magic_read_address_xor(true);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, 0);
MCFG_DEVICE_ADD("ymsnd", YM2151, 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
MCFG_DEVICE_ADD("oki1", OKIM6295, 32220000/32, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADD("oki2", OKIM6295, 32220000/16, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35)
MACHINE_CONFIG_END
// DE-0395-1
MACHINE_CONFIG_START(fghthist_state::fghthsta)
fghthist(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(fghthsta_memmap)
MCFG_DEVICE_MODIFY("audiocpu")
MCFG_DEVICE_PROGRAM_MAP(h6280_sound_map)
MCFG_DEVICE_REMOVE("soundlatch")
MCFG_DEVICE_MODIFY("ioprot")
MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MACHINE_CONFIG_END
// DE-0396-0
MACHINE_CONFIG_START(fghthist_state::fghthistu)
fghthsta(config);
MCFG_DEVICE_REMOVE("audiocpu")
MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(32'220'000) / 9)
MCFG_DEVICE_PROGRAM_MAP(z80_sound_map)
MCFG_DEVICE_IO_MAP(z80_sound_io)
MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_DEVICE_MODIFY("ioprot")
MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DEVICE_MODIFY("ymsnd")
MCFG_YM2151_IRQ_HANDLER(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
MACHINE_CONFIG_END
// DE-0359-2 + Bottom board DE-0360-4
MACHINE_CONFIG_START(dragngun_state::dragngun)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", ARM, XTAL(28'000'000) / 4)
MCFG_DEVICE_PROGRAM_MAP(dragngun_map)
h6280_device &audiocpu(H6280(config, m_audiocpu, 32220000/8));
audiocpu.set_addrmap(AS_PROGRAM, &dragngun_state::h6280_sound_map);
audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
MCFG_INPUT_MERGER_ANY_HIGH("irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", ARM_IRQ_LINE))
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_RASTER2_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO_IRQ_VBLANK_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<1>))
EEPROM_93C46_16BIT(config, "eeprom");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(dragngun_state, screen_update)
//MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM32)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(dragngun_state, bank_1_callback)
MCFG_DECO16IC_BANK2_CB(dragngun_state, bank_1_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0xff)
MCFG_DECO16IC_PF2_TRANS_MASK(0xff)
MCFG_DECO16IC_PF1_COL_BANK(0x04)
MCFG_DECO16IC_PF2_COL_BANK(0x04)
MCFG_DECO16IC_PF1_COL_MASK(0x03)
MCFG_DECO16IC_PF2_COL_MASK(0x03)
MCFG_DECO16IC_BANK1_CB(dragngun_state, bank_2_callback)
// no bank2 callback
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen_zoom", DECO_ZOOMSPR, 0)
MCFG_DECO_ZOOMSPR_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dragngun)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_DECO146_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
MCFG_DECO146_SOUNDLATCH_IRQ_CB(INPUTLINE("audiocpu", 0))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ymsnd", YM2151, 32220000/9)
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
MCFG_DEVICE_ADD("oki1", OKIM6295, 32220000/32, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADD("oki2", OKIM6295, 32220000/16, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35)
SPEAKER(config, "gun_speaker").front_center();
MCFG_DEVICE_ADD("oki3", OKIM6295, 32220000/32, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "gun_speaker", 1.0)
MCFG_DEVICE_ADD("vol_main", LC7535)
MCFG_LC7535_SELECT_CB(CONSTANT(1))
MCFG_LC7535_VOLUME_CB(dragngun_state, volume_main_changed)
MCFG_DEVICE_ADD("vol_gun", LC7535)
MCFG_LC7535_SELECT_CB(CONSTANT(0))
MCFG_LC7535_VOLUME_CB(dragngun_state, volume_gun_changed)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(dragngun_state::lockloadu)
dragngun(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(lockloadu_map)
MCFG_DEVICE_MODIFY("audiocpu")
MCFG_DEVICE_PROGRAM_MAP(lockloadu_sound_map)
MCFG_DEVICE_MODIFY("irq")
MCFG_DECO_IRQ_LIGHTGUN_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<2>))
MCFG_DEVICE_MODIFY("tilegen2")
MCFG_DECO16IC_PF1_SIZE(DECO_32x32)
MCFG_DECO16IC_PF2_SIZE(DECO_32x32) // lockload definitely wants pf34 half width..
MCFG_DEVICE_MODIFY("ymsnd")
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, dragngun_state, lockload_okibank_lo_w))
MACHINE_CONFIG_END
// DE-0420-1 + Bottom board DE-0421-0
MACHINE_CONFIG_START(dragngun_state::lockload)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", ARM, XTAL(28'000'000) / 4)
MCFG_DEVICE_PROGRAM_MAP(lockload_map)
MCFG_INPUT_MERGER_ANY_HIGH("irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", ARM_IRQ_LINE))
MCFG_DEVICE_ADD("audiocpu", Z80, 32220000/8)
MCFG_DEVICE_PROGRAM_MAP(lockload_sound_map)
MCFG_DEVICE_IO_MAP(z80_sound_io)
MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_DECO_IRQ_ADD("irq", "screen")
MCFG_DECO_IRQ_LIGHTGUN1_CB(IOPORT("LIGHT0_Y"))
MCFG_DECO_IRQ_LIGHTGUN2_CB(IOPORT("LIGHT1_Y"))
MCFG_DECO_IRQ_RASTER2_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO_IRQ_VBLANK_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_DECO_IRQ_LIGHTGUN_IRQ_CB(WRITELINE("irq_merger", input_merger_any_high_device, in_w<2>))
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* to improve main<->audio comms */
EEPROM_93C46_16BIT(config, "eeprom");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(dragngun_state, screen_update)
MCFG_DEVICE_ADD("spriteram", BUFFERED_SPRITERAM32)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_dragngun)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(dragngun_state, bank_1_callback)
MCFG_DECO16IC_BANK2_CB(dragngun_state, bank_1_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_32x32)
MCFG_DECO16IC_PF2_SIZE(DECO_32x32) // lockload definitely wants pf34 half width..
MCFG_DECO16IC_PF1_TRANS_MASK(0xff)
MCFG_DECO16IC_PF2_TRANS_MASK(0xff)
MCFG_DECO16IC_PF1_COL_BANK(0x04)
MCFG_DECO16IC_PF2_COL_BANK(0x04)
MCFG_DECO16IC_PF1_COL_MASK(0x03)
MCFG_DECO16IC_PF2_COL_MASK(0x03)
MCFG_DECO16IC_BANK1_CB(dragngun_state, bank_2_callback)
// no bank2 callback
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen_zoom", DECO_ZOOMSPR, 0)
MCFG_DECO_ZOOMSPR_GFXDECODE("gfxdecode")
MCFG_DECO146_ADD("ioprot")
MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS"))
MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM"))
MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW"))
MCFG_DECO146_SOUNDLATCH_IRQ_CB(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<0>))
MCFG_DECO146_SET_INTERFACE_SCRAMBLE_REVERSE
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ymsnd", YM2151, 32220000/9)
MCFG_YM2151_IRQ_HANDLER(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, dragngun_state, lockload_okibank_lo_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.42)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.42)
MCFG_DEVICE_ADD("oki1", OKIM6295, 32220000/32, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_DEVICE_ADD("oki2", OKIM6295, 32220000/16, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.35)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.35)
MCFG_DEVICE_ADD("vol_main", LC7535)
MCFG_LC7535_SELECT_CB(CONSTANT(1))
MCFG_LC7535_VOLUME_CB(dragngun_state, volume_main_changed)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(nslasher_state::tattass)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", ARM, 28000000/4) // unconfirmed
MCFG_DEVICE_PROGRAM_MAP(tattass_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco32_state, irq0_line_assert)
EEPROM_93C76_8BIT(config, "eeprom");
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'000'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(nslasher_state, screen_update)
MCFG_DECO_ACE_ADD("deco_ace")
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x00)
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen1", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen2", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(4)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "deco_ace", gfx_tattass)
DECO104PROT(config, m_ioprot, 0);
m_ioprot->port_a_cb().set_ioport("IN0");
m_ioprot->port_b_cb().set(FUNC(nslasher_state::port_b_tattass));
m_ioprot->port_c_cb().set_ioport("IN1");
m_ioprot->soundlatch_irq_cb().set(FUNC(nslasher_state::tattass_sound_irq_w));
m_ioprot->set_interface_scramble_interleave();
/* sound hardware */
MCFG_DECOBSMT_ADD(DECOBSMT_TAG)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(nslasher_state::nslasher)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", ARM, XTAL(28'322'000) / 4)
MCFG_DEVICE_PROGRAM_MAP(nslasher_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", deco32_state, irq0_line_assert)
MCFG_DEVICE_ADD("audiocpu", Z80, 32220000/9)
MCFG_DEVICE_PROGRAM_MAP(z80_sound_map)
MCFG_DEVICE_IO_MAP(z80_sound_io)
MCFG_INPUT_MERGER_ANY_HIGH("sound_irq_merger")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_IRQ0))
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* to improve main<->audio comms */
EEPROM_93C46_16BIT(config, "eeprom");
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(28'322'000) / 4, 442, 0, 320, 274, 8, 248)
MCFG_SCREEN_UPDATE_DRIVER(nslasher_state, screen_update)
MCFG_DECO_ACE_ADD("deco_ace")
MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x00)
MCFG_DECO16IC_PF2_COL_BANK(0x10)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(1)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("tilegen2", DECO16IC, 0)
MCFG_DECO16IC_SPLIT(0)
MCFG_DECO16IC_PF1_SIZE(DECO_64x32)
MCFG_DECO16IC_PF2_SIZE(DECO_64x32)
MCFG_DECO16IC_PF1_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF2_TRANS_MASK(0x0f)
MCFG_DECO16IC_PF1_COL_BANK(0x20)
MCFG_DECO16IC_PF2_COL_BANK(0x30)
MCFG_DECO16IC_PF1_COL_MASK(0x0f)
MCFG_DECO16IC_PF2_COL_MASK(0x0f)
MCFG_DECO16IC_BANK1_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_BANK2_CB(nslasher_state, bank_callback)
MCFG_DECO16IC_PF12_8X8_BANK(0)
MCFG_DECO16IC_PF12_16X16_BANK(2)
MCFG_DECO16IC_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen1", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(3)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("spritegen2", DECO_SPRITE, 0)
MCFG_DECO_SPRITE_GFX_REGION(4)
MCFG_DECO_SPRITE_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "deco_ace", gfx_nslasher)
DECO104PROT(config, m_ioprot, 0);
m_ioprot->port_a_cb().set_ioport("IN0");
m_ioprot->port_b_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(0);
m_ioprot->port_c_cb().set_ioport("IN1");
m_ioprot->soundlatch_irq_cb().set("sound_irq_merger", FUNC(input_merger_any_high_device::in_w<0>));
m_ioprot->set_interface_scramble_interleave();
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("ymsnd", YM2151, 32220000/9)
MCFG_YM2151_IRQ_HANDLER(WRITELINE("sound_irq_merger", input_merger_any_high_device, in_w<1>))
MCFG_YM2151_PORT_WRITE_HANDLER(WRITE8(*this, deco32_state, sound_bankswitch_w))
MCFG_SOUND_ROUTE(0, "lspeaker", 0.40)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.40)
MCFG_DEVICE_ADD("oki1", OKIM6295, 32220000/32, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
MCFG_DEVICE_ADD("oki2", OKIM6295, 32220000/16, okim6295_device::PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10)
MACHINE_CONFIG_END
// the US release uses a H6280 instead of a Z80, much like Lock 'n' Loaded
MACHINE_CONFIG_START(nslasher_state::nslasheru)
nslasher(config);
MCFG_DEVICE_REMOVE("audiocpu")
h6280_device &audiocpu(H6280(config, m_audiocpu, 32220000/8));
audiocpu.set_addrmap(AS_PROGRAM, &nslasher_state::h6280_sound_map);
audiocpu.add_route(ALL_OUTPUTS, "lspeaker", 0); // internal sound unused
audiocpu.add_route(ALL_OUTPUTS, "rspeaker", 0);
MCFG_DEVICE_REMOVE("sound_irq_merger")
MCFG_DEVICE_MODIFY("ymsnd")
MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 1))
m_ioprot->soundlatch_irq_cb().set_inputline("audiocpu", 0);
MACHINE_CONFIG_END
//**************************************************************************
// ROM DEFINITIONS
//**************************************************************************
ROM_START( captaven ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hn_00-4.1e", 0x000000, 0x20000, CRC(147fb094) SHA1(6bd759c42f4b7f9e1c3f2d3ece0b3ec72de1a982) )
ROM_LOAD32_BYTE( "hn_01-4.1h", 0x000001, 0x20000, CRC(11ecdb95) SHA1(832b56f05ae7e15e67fbdd321da8c1cc5e7629a0) )
ROM_LOAD32_BYTE( "hn_02-4.1k", 0x000002, 0x20000, CRC(35d2681f) SHA1(3af7d959dc4842238a7f79926adf449cb7f0b2e9) )
ROM_LOAD32_BYTE( "hn_03-4.1m", 0x000003, 0x20000, CRC(3b59ba05) SHA1(400e868e59977e56a4fa1870321c643983ba4162) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( captavena ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hn_00.e1", 0x000000, 0x20000, CRC(12dd0c71) SHA1(77bd0e5f1b105ec70de5e76cb9c8138f02a496be) )
ROM_LOAD32_BYTE( "hn_01.h1", 0x000001, 0x20000, CRC(ac5ea492) SHA1(e08fa2b3e3a40cba6dcdf07049d67056d59ed72a) )
ROM_LOAD32_BYTE( "hn_02.k1", 0x000002, 0x20000, CRC(0c5e13f6) SHA1(d9ebf503db7da8663f45fe307e432545651cfc13) )
ROM_LOAD32_BYTE( "hn_03.l1", 0x000003, 0x20000, CRC(bc050740) SHA1(bee425e76734251444c9cfa9287e1eb9383625bc) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( captavene ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hg_00-4.1e", 0x000000, 0x20000, CRC(7008d43c) SHA1(a39143e13075ebc58ecc576391f04d2649675dfb) )
ROM_LOAD32_BYTE( "hg_01-4.1h", 0x000001, 0x20000, CRC(53dc1042) SHA1(4547ad20e5bc3b9cedae53f73f1628fa3493aafa) )
ROM_LOAD32_BYTE( "hg_02-4.1k", 0x000002, 0x20000, CRC(9e3f9ee2) SHA1(a56a68bdac58a337be48b346b6939c3f68da8e9d) )
ROM_LOAD32_BYTE( "hg_03-4.1m", 0x000003, 0x20000, CRC(bc050740) SHA1(bee425e76734251444c9cfa9287e1eb9383625bc) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0800, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_LOAD( "pal16r8b.14c", 0x0600, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END
ROM_START( captavenu ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hh_00-19.1e", 0x000000, 0x20000, CRC(08b870e0) SHA1(44c837e3c5dfc9764d89b0ebb3e9b7a40fe4d76f) )
ROM_LOAD32_BYTE( "hh_01-19.1h", 0x000001, 0x20000, CRC(0dc0feca) SHA1(cb1c97aac59dabcf6c37bc1562cf2f62bca951f1) )
ROM_LOAD32_BYTE( "hh_02-19.1k", 0x000002, 0x20000, CRC(26ef94c0) SHA1(985fae62a6a7ca7e1e64dba2db053b08206c65e7) )
ROM_LOAD32_BYTE( "hn_03-4.1m", 0x000003, 0x20000, CRC(3b59ba05) SHA1(400e868e59977e56a4fa1870321c643983ba4162) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( captavenuu ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hh-00.1e", 0x000000, 0x20000, CRC(c34da654) SHA1(a1988a6a45991db6dee10b484049f6703b4671c9) )
ROM_LOAD32_BYTE( "hh-01.1h", 0x000001, 0x20000, CRC(55abe63f) SHA1(98772eff3ebb5a4f243c7a77d398eb142d1505cb) )
ROM_LOAD32_BYTE( "hh-02.1k", 0x000002, 0x20000, CRC(6096a9fb) SHA1(aa81189b9c185dc5d59f888afcb17a1e4935c241) )
ROM_LOAD32_BYTE( "hh-03.1m", 0x000003, 0x20000, CRC(93631ded) SHA1(b4c8a6cbf586f895e637c0ed38f0842327624423) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( captavenua ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hh_00-4.2e", 0x000000, 0x20000, CRC(0e1acc05) SHA1(7eb6206efad233f9f4ee51102f9fe6b58f0719ea) )
ROM_LOAD32_BYTE( "hh_01-4.2h", 0x000001, 0x20000, CRC(4ff0351d) SHA1(15fc2662ff0d32986c4d4d074b985ad853da34e1) )
ROM_LOAD32_BYTE( "hh_02-4.2k", 0x000002, 0x20000, CRC(e84c0665) SHA1(d846f04315af49abeca00314b3d23e1d8c638dcd) )
ROM_LOAD32_BYTE( "hh_03-4.2m", 0x000003, 0x20000, CRC(bc050740) SHA1(bee425e76734251444c9cfa9287e1eb9383625bc) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( captavenj ) /* DE-0351-x PCB (x=3 or 4) */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "hj_00-2.1e", 0x000000, 0x20000, CRC(10b1faaf) SHA1(9d76885200a846b4751c8d44ff591e2aff7c4148) )
ROM_LOAD32_BYTE( "hj_01-2.1h", 0x000001, 0x20000, CRC(62c59f27) SHA1(20bbb7f3ff63a8c795686c1d56d51e90305daa77) )
ROM_LOAD32_BYTE( "hj_02-2.1k", 0x000002, 0x20000, CRC(ce946cad) SHA1(9f1e92f5149e8a8d0236d5a7ba854ee100fd8488) )
ROM_LOAD32_BYTE( "hj_03-2.1m", 0x000003, 0x20000, CRC(140cf9ce) SHA1(e2260ca4cea2fd7b64b8a78fd5444a7628bdafbb) )
ROM_LOAD32_BYTE( "man-12.3e", 0x080000, 0x20000, CRC(d6261e98) SHA1(f3707be37ca926d9a341b9253a6bb2f3de0e25f6) )
ROM_LOAD32_BYTE( "man-13.3h", 0x080001, 0x20000, CRC(40f0764d) SHA1(a6715c4a2accacf96f41c885579f314367c70dde) )
ROM_LOAD32_BYTE( "man-14.3k", 0x080002, 0x20000, CRC(7cb9a4bd) SHA1(0af1a7bf0fcfa3cc14b38d92f19e97ad6e5541dd) )
ROM_LOAD32_BYTE( "man-15.3m", 0x080003, 0x20000, CRC(c7854fe8) SHA1(ffa87dcda44fa0111de6ab317b77dd2bde015890) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "hj_08.17k", 0x00000, 0x10000, CRC(361fbd16) SHA1(c4bbaf74e09c263044be74bb2c98caf6cfcab618) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "man-00.8a", 0x000000, 0x80000, CRC(7855a607) SHA1(fa0be080515482281e5a12fe172eeb9a21af0820) ) /* Encrypted tiles */
ROM_REGION( 0x500000, "gfx2", 0 )
ROM_LOAD( "man-05.16a", 0x000000, 0x40000, CRC(d44d1995) SHA1(e88e1a59a4b24ad058f21538f6e9bbba94a166b4) ) /* Encrypted tiles */
ROM_CONTINUE( 0x140000, 0x40000 )
ROM_CONTINUE( 0x280000, 0x40000 )
ROM_CONTINUE( 0x3c0000, 0x40000 )
ROM_LOAD( "man-04.14a", 0x040000, 0x40000, CRC(541492a1) SHA1(2e0ab12555fc46001a815e76e3a0cd21f385f82a) ) /* Encrypted tiles */
ROM_CONTINUE( 0x180000, 0x40000 )
ROM_CONTINUE( 0x2c0000, 0x40000 )
ROM_CONTINUE( 0x400000, 0x40000 )
ROM_LOAD( "man-03.12a", 0x080000, 0x40000, CRC(2d9c52b2) SHA1(8f6f4fe4f1a63099f889068991b34f9432b04fd7) ) /* Encrypted tiles */
ROM_CONTINUE( 0x1c0000, 0x40000 )
ROM_CONTINUE( 0x300000, 0x40000 )
ROM_CONTINUE( 0x440000, 0x40000 )
ROM_LOAD( "man-02.11a", 0x0c0000, 0x40000, CRC(07674c05) SHA1(08b33721d7eba4a1ff2e282f77eeb56535a52923) ) /* Encrypted tiles */
ROM_CONTINUE( 0x200000, 0x40000 )
ROM_CONTINUE( 0x340000, 0x40000 )
ROM_CONTINUE( 0x480000, 0x40000 )
ROM_LOAD( "man-01.10a", 0x100000, 0x40000, CRC(ae714ada) SHA1(b4d5806265d422c8b837489afe93731f584e4adf) ) /* Encrypted tiles */
ROM_CONTINUE( 0x240000, 0x40000 )
ROM_CONTINUE( 0x380000, 0x40000 )
ROM_CONTINUE( 0x4c0000, 0x40000 )
ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "man-06.17a", 0x200000, 0x100000, CRC(a9a64297) SHA1(e4cb441207b1907461c90c32c05a461c9bd30756) )
ROM_LOAD( "man-07.18a", 0x000000, 0x100000, CRC(b1db200c) SHA1(970bb15e90194dd285f53594aca5dec3405e75d5) )
ROM_LOAD( "man-08.17c", 0x300000, 0x100000, CRC(28e98e66) SHA1(55dbbd945eada81f7dcc874fdcb0b9e62ea453f0) )
ROM_LOAD( "man-09.21c", 0x100000, 0x100000, CRC(1921245d) SHA1(88d3b69a38c18c83d5658d057b95974f1bd371e6) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "man-10.14k", 0x000000, 0x80000, CRC(0132c578) SHA1(70952f39508360bab51e1151531536f0ea6bbe06) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "man-11.16k", 0x000000, 0x80000, CRC(0dc60a4c) SHA1(4d0daa6a0272852a37f341a0cdc48baee0ad9dd8) )
ROM_REGION( 0x0600, "plds", 0 )
ROM_LOAD( "ts-00.4h", 0x0000, 0x0117, CRC(ebc2908e) SHA1(dca14a55abd1d88ee09092d4122614e55c3e7f53) )
ROM_LOAD( "ts-01.5h", 0x0200, 0x0117, CRC(c776a980) SHA1(cd4bdcfb755f561fefa4c88fab5d6d2397332aa7) )
ROM_LOAD( "ts-02.12l", 0x0400, 0x01bf, CRC(6f26528c) SHA1(2cf869b2a789a9b0646162a61c147bcbb13c9141) )
ROM_END
ROM_START( dragngun )
ROM_REGION(0x400000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "kb02.a9", 0x000000, 0x40000, CRC(4fb9cfea) SHA1(e20fbae32682fc5fdc82070d2d6c73b5b7ac13f8) )
ROM_LOAD32_BYTE( "kb06.c9", 0x000001, 0x40000, CRC(2395efec) SHA1(3c08299a6cdeebf9d3d5d367ab435eec76986194) )
ROM_LOAD32_BYTE( "kb00.a5", 0x000002, 0x40000, CRC(1539ff35) SHA1(6c82fe01f5ebf5cdd3a914cc823499fa6a26f9a9) )
ROM_LOAD32_BYTE( "kb04.c5", 0x000003, 0x40000, CRC(5b5c1ec2) SHA1(3c5c02b7e432cf1861e0c8db23b302dc47774a42) )
ROM_LOAD32_BYTE( "kb03.a10", 0x300000, 0x40000, CRC(6c6a4f42) SHA1(ae96fe81f9ba587eb3194dbffa0233413d63c4c6) )
ROM_LOAD32_BYTE( "kb07.c10", 0x300001, 0x40000, CRC(2637e8a1) SHA1(7bcd1b1f3a4e6aaa0a3b78ca77dc666948c87547) )
ROM_LOAD32_BYTE( "kb01.a7", 0x300002, 0x40000, CRC(d780ba8d) SHA1(0e315c718c038962b6020945b48bcc632de6f5e1) )
ROM_LOAD32_BYTE( "kb05.c7", 0x300003, 0x40000, CRC(fbad737b) SHA1(04e16abe8c4cec4f172bea29516535511db9db90) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "kb10.n25", 0x00000, 0x10000, CRC(ec56f560) SHA1(feb9491683ba7f1000edebb568d6b3471fcc87fb) )
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD16_BYTE( "kb08.a15", 0x00000, 0x10000, CRC(8fe4e5f5) SHA1(922b94f8ce0c35e965259c11e95891ef4be913d4) ) /* Encrypted tiles */
ROM_LOAD16_BYTE( "kb09.a17", 0x00001, 0x10000, CRC(e9dcac3f) SHA1(0621e601ffae73bbf69623042c9c8ab0526c3de6) )
ROM_REGION( 0x120000, "gfx2", 0 )
ROM_LOAD( "mar-00.bin", 0x000000, 0x80000, CRC(d0491a37) SHA1(cc0ae1e9e5f42ba30159fb79bccd2e237cd037d0) ) /* Encrypted tiles */
ROM_LOAD( "mar-01.bin", 0x090000, 0x80000, CRC(d5970365) SHA1(729baf1efbef15c9f3e1d700717f5ba4f10d3014) )
ROM_REGION( 0x400000, "gfx3", 0 )
ROM_LOAD( "mar-02.bin", 0x000000, 0x40000, CRC(c6cd4baf) SHA1(350286829a330b64f463d0a9cbbfdb71eecf5188) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x100000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x200000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x300000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-03.bin", 0x040000, 0x40000, CRC(793006d7) SHA1(7d8aba2fe75917f580a3a931a7defe5939a0874e) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x140000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x240000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x340000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-04.bin", 0x080000, 0x40000, CRC(56631a2b) SHA1(0fa3d6215df8ce923c153b96f39161ba88b2dd53) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x180000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x280000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x380000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-05.bin", 0x0c0000, 0x40000, CRC(ac16e7ae) SHA1(dca32e0a677a99f47a7b8e8f105483c57382f218) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x1c0000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x2c0000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x3c0000, 0x40000 ) /* 3/4 */
ROM_REGION( 0x800000, "gfx4", 0 )
ROM_LOAD32_BYTE( "mar-09.bin", 0x000003, 0x100000, CRC(18fec9e1) SHA1(1290a9c13b4fd7d2197b39ec616206796e3a17a8) )
ROM_LOAD32_BYTE( "mar-10.bin", 0x400003, 0x100000, CRC(73126fbc) SHA1(9b9c31335e4db726863b219072c83810008f88f9) )
ROM_LOAD32_BYTE( "mar-11.bin", 0x000002, 0x100000, CRC(1fc638a4) SHA1(003dcfbb65a8f32a1a030502a11432287cf8b4e0) )
ROM_LOAD32_BYTE( "mar-12.bin", 0x400002, 0x100000, CRC(4c412512) SHA1(ccd5014bc9f9648cf5fa56bb8d54fc72a7099ca3) )
ROM_LOAD32_BYTE( "mar-13.bin", 0x000001, 0x100000, CRC(d675821c) SHA1(ff195422d0bef62d1f9c7784bba1e6b7ab5cd211) )
ROM_LOAD32_BYTE( "mar-14.bin", 0x400001, 0x100000, CRC(22d38c71) SHA1(62273665975f3e6000fa4b01755aeb70e5dd002d) )
ROM_LOAD32_BYTE( "mar-15.bin", 0x000000, 0x100000, CRC(ec976b20) SHA1(c120b3c56d5e02162e41dc7f726c260d0f8d2f1a) )
ROM_LOAD32_BYTE( "mar-16.bin", 0x400000, 0x100000, CRC(8b329bc8) SHA1(6e34eb6e2628a01a699d20a5155afb2febc31255) )
// this is standard DVI data, see http://www.fileformat.info/format/dvi/egff.htm
// there are DVI headers at 0x000000, 0x580000, 0x800000, 0xB10000, 0xB80000
ROM_REGION32_BE( 0x1000000, "dvi", 0 ) /* Video data - unused for now */
ROM_LOAD32_BYTE( "mar-17.bin", 0x000000, 0x100000, CRC(7799ed23) SHA1(ae28ad4fa6033a3695fa83356701b3774b26e6b0) ) // 56 V / 41 A
ROM_LOAD32_BYTE( "mar-20.bin", 0x000001, 0x100000, CRC(fa0462f0) SHA1(1a52617ad4d7abebc0f273dd979f4cf2d6a0306b) ) // 44 D / 56 V
ROM_LOAD32_BYTE( "mar-28.bin", 0x000002, 0x100000, CRC(5a2ec71d) SHA1(447c404e6bb696f7eb7c61992a99b9be56f5d6b0) ) // 56 V / 53 S
ROM_LOAD32_BYTE( "mar-25.bin", 0x000003, 0x100000, CRC(d65d895c) SHA1(4508dfff95a7aff5109dc74622cbb4503b0b5840) ) // 49 I / 53 S
ROM_LOAD32_BYTE( "mar-18.bin", 0x400000, 0x100000, CRC(ded66da9) SHA1(5134cb47043cc190a35ebdbf1912166669f9c055) )
ROM_LOAD32_BYTE( "mar-21.bin", 0x400001, 0x100000, CRC(2d0a28ae) SHA1(d87f6f71bb76880e4d4f1eab8e0451b5c3df69a5) )
ROM_LOAD32_BYTE( "mar-27.bin", 0x400002, 0x100000, CRC(3fcbd10f) SHA1(70fc7b88bbe35bbae1de14364b03d0a06d541de5) )
ROM_LOAD32_BYTE( "mar-24.bin", 0x400003, 0x100000, CRC(5cec45c8) SHA1(f99a26afaca9d9320477e469b09e3873bc8c156f) )
ROM_LOAD32_BYTE( "mar-19.bin", 0x800000, 0x100000, CRC(bdd1ed20) SHA1(2435b23210b8fee4d39c30d4d3c6ea40afaa3b93) ) // 56 V / 41 A
ROM_LOAD32_BYTE( "mar-22.bin", 0x800001, 0x100000, CRC(c85f3559) SHA1(a5d5cf9b18c9ef6a92d7643ca1ec9052de0d4a01) ) // 44 D / 56 V
ROM_LOAD32_BYTE( "mar-26.bin", 0x800002, 0x100000, CRC(246a06c5) SHA1(447252be976a5059925f4ad98df8564b70198f62) ) // 56 V / 53 S
ROM_LOAD32_BYTE( "mar-23.bin", 0x800003, 0x100000, CRC(ba907d6a) SHA1(1fd99b66e6297c8d927c1cf723a613b4ee2e2f90) ) // 49 I / 53 S
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "mar-06.n17", 0x000000, 0x80000, CRC(3e006c6e) SHA1(55786e0fde2bf6ba9802f3f4fa8d4c21625b976a) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "mar-08.n21", 0x000000, 0x80000, CRC(b9281dfd) SHA1(449faf5d36f3b970d0a9b483e2152a5f68604a77) )
// TODO : Japan version uses first bank of oki3, US version uses second half. it has bankswitched dynamic? or address shuffle?
ROM_REGION(0x80000, "oki3", 0 )
// Remove this hack if oki3 bankswitching is verified
ROM_LOAD( "mar-07.n19", 0x40000, 0x40000, CRC(40287d62) SHA1(c00cb08bcdae55bcddc14c38e88b0484b1bc9e3e) )
ROM_CONTINUE( 0x00000, 0x40000 )
//ROM_LOAD( "mar-07.n19", 0x000000, 0x80000, CRC(40287d62) SHA1(c00cb08bcdae55bcddc14c38e88b0484b1bc9e3e) )
ROM_END
ROM_START( dragngunj )
ROM_REGION(0x400000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_BYTE( "ka-02.a9", 0x000000, 0x40000, CRC(402a03f9) SHA1(cdd5da9e35191bd716eb6245360702adb6078a94) )
ROM_LOAD32_BYTE( "ka-06.c9", 0x000001, 0x40000, CRC(26822853) SHA1(8a9e61c9ac9a5aa4b21f063f700acfebac8d408b) )
ROM_LOAD32_BYTE( "ka-00.a5", 0x000002, 0x40000, CRC(cc9e321b) SHA1(591d5f13a558960dbf286ca4541be0e42b234f2f) )
ROM_LOAD32_BYTE( "ka-04.c5", 0x000003, 0x40000, CRC(5fd9d935) SHA1(8fd87b05325fae84860bbf1e169a3946f3197307) )
ROM_LOAD32_BYTE( "ka-03.a10", 0x300000, 0x40000, CRC(e213c859) SHA1(aa0610427bbaa22da7f44289fdf9baf37b636710) )
ROM_LOAD32_BYTE( "ka-07.c10", 0x300001, 0x40000, CRC(f34c54eb) SHA1(6b67cdb1d2dcc272de96292254914a212ff351cd) )
ROM_LOAD32_BYTE( "ka-01.a7", 0x300002, 0x40000, CRC(1b52364c) SHA1(151365adc26bc7d71a4d2fc73bca598d3aa09f81) )
ROM_LOAD32_BYTE( "ka-05.c7", 0x300003, 0x40000, CRC(4c975f52) SHA1(3c6b287c77a049e3f8822ed9d545733e8ea3357b) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "ka-10.n25", 0x00000, 0x10000, CRC(ec56f560) SHA1(feb9491683ba7f1000edebb568d6b3471fcc87fb) )
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD16_BYTE( "ka-08.a15", 0x00000, 0x10000, CRC(8fe4e5f5) SHA1(922b94f8ce0c35e965259c11e95891ef4be913d4) ) /* Encrypted tiles */
ROM_LOAD16_BYTE( "ka-09.a17", 0x00001, 0x10000, CRC(e9dcac3f) SHA1(0621e601ffae73bbf69623042c9c8ab0526c3de6) )
ROM_REGION( 0x120000, "gfx2", 0 )
ROM_LOAD( "mar-00.bin", 0x000000, 0x80000, CRC(d0491a37) SHA1(cc0ae1e9e5f42ba30159fb79bccd2e237cd037d0) ) /* Encrypted tiles */
ROM_LOAD( "mar-01.bin", 0x090000, 0x80000, CRC(d5970365) SHA1(729baf1efbef15c9f3e1d700717f5ba4f10d3014) )
ROM_REGION( 0x400000, "gfx3", 0 )
ROM_LOAD( "mar-02.bin", 0x000000, 0x40000, CRC(c6cd4baf) SHA1(350286829a330b64f463d0a9cbbfdb71eecf5188) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x100000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x200000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x300000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-03.bin", 0x040000, 0x40000, CRC(793006d7) SHA1(7d8aba2fe75917f580a3a931a7defe5939a0874e) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x140000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x240000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x340000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-04.bin", 0x080000, 0x40000, CRC(56631a2b) SHA1(0fa3d6215df8ce923c153b96f39161ba88b2dd53) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x180000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x280000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x380000, 0x40000 ) /* 3/4 */
ROM_LOAD( "mar-05.bin", 0x0c0000, 0x40000, CRC(ac16e7ae) SHA1(dca32e0a677a99f47a7b8e8f105483c57382f218) ) /* Encrypted tiles 0/4 */
ROM_CONTINUE( 0x1c0000, 0x40000 ) /* 2 bpp per 0x40000 chunk, 1/4 */
ROM_CONTINUE( 0x2c0000, 0x40000 ) /* 2/4 */
ROM_CONTINUE( 0x3c0000, 0x40000 ) /* 3/4 */
ROM_REGION( 0x800000, "gfx4", 0 )
ROM_LOAD32_BYTE( "mar-09.bin", 0x000003, 0x100000, CRC(18fec9e1) SHA1(1290a9c13b4fd7d2197b39ec616206796e3a17a8) )
ROM_LOAD32_BYTE( "mar-10.bin", 0x400003, 0x100000, CRC(73126fbc) SHA1(9b9c31335e4db726863b219072c83810008f88f9) )
ROM_LOAD32_BYTE( "mar-11.bin", 0x000002, 0x100000, CRC(1fc638a4) SHA1(003dcfbb65a8f32a1a030502a11432287cf8b4e0) )
ROM_LOAD32_BYTE( "mar-12.bin", 0x400002, 0x100000, CRC(4c412512) SHA1(ccd5014bc9f9648cf5fa56bb8d54fc72a7099ca3) )
ROM_LOAD32_BYTE( "mar-13.bin", 0x000001, 0x100000, CRC(d675821c) SHA1(ff195422d0bef62d1f9c7784bba1e6b7ab5cd211) )
ROM_LOAD32_BYTE( "mar-14.bin", 0x400001, 0x100000, CRC(22d38c71) SHA1(62273665975f3e6000fa4b01755aeb70e5dd002d) )
ROM_LOAD32_BYTE( "mar-15.bin", 0x000000, 0x100000, CRC(ec976b20) SHA1(c120b3c56d5e02162e41dc7f726c260d0f8d2f1a) )
ROM_LOAD32_BYTE( "mar-16.bin", 0x400000, 0x100000, CRC(8b329bc8) SHA1(6e34eb6e2628a01a699d20a5155afb2febc31255) )
ROM_REGION32_BE( 0x1000000, "dvi", 0 ) /* Video data - unused for now */
ROM_LOAD32_BYTE( "mar-17.bin", 0x000000, 0x100000, CRC(7799ed23) SHA1(ae28ad4fa6033a3695fa83356701b3774b26e6b0) ) // 56 V / 41 A
ROM_LOAD32_BYTE( "mar-20.bin", 0x000001, 0x100000, CRC(fa0462f0) SHA1(1a52617ad4d7abebc0f273dd979f4cf2d6a0306b) ) // 44 D / 56 V
ROM_LOAD32_BYTE( "mar-28.bin", 0x000002, 0x100000, CRC(5a2ec71d) SHA1(447c404e6bb696f7eb7c61992a99b9be56f5d6b0) ) // 56 V / 53 S
ROM_LOAD32_BYTE( "mar-25.bin", 0x000003, 0x100000, CRC(d65d895c) SHA1(4508dfff95a7aff5109dc74622cbb4503b0b5840) ) // 49 I / 53 S
ROM_LOAD32_BYTE( "mar-18.bin", 0x400000, 0x100000, CRC(ded66da9) SHA1(5134cb47043cc190a35ebdbf1912166669f9c055) )
ROM_LOAD32_BYTE( "mar-21.bin", 0x400001, 0x100000, CRC(2d0a28ae) SHA1(d87f6f71bb76880e4d4f1eab8e0451b5c3df69a5) )
ROM_LOAD32_BYTE( "mar-27.bin", 0x400002, 0x100000, CRC(3fcbd10f) SHA1(70fc7b88bbe35bbae1de14364b03d0a06d541de5) )
ROM_LOAD32_BYTE( "mar-24.bin", 0x400003, 0x100000, CRC(5cec45c8) SHA1(f99a26afaca9d9320477e469b09e3873bc8c156f) )
ROM_LOAD32_BYTE( "mar-19.bin", 0x800000, 0x100000, CRC(bdd1ed20) SHA1(2435b23210b8fee4d39c30d4d3c6ea40afaa3b93) ) // 56 V / 41 A
ROM_LOAD32_BYTE( "mar-22.bin", 0x800001, 0x100000, CRC(c85f3559) SHA1(a5d5cf9b18c9ef6a92d7643ca1ec9052de0d4a01) ) // 44 D / 56 V
ROM_LOAD32_BYTE( "mar-26.bin", 0x800002, 0x100000, CRC(246a06c5) SHA1(447252be976a5059925f4ad98df8564b70198f62) ) // 56 V / 53 S
ROM_LOAD32_BYTE( "mar-23.bin", 0x800003, 0x100000, CRC(ba907d6a) SHA1(1fd99b66e6297c8d927c1cf723a613b4ee2e2f90) ) // 49 I / 53 S
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "mar-06.n17", 0x000000, 0x80000, CRC(3e006c6e) SHA1(55786e0fde2bf6ba9802f3f4fa8d4c21625b976a) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "mar-08.n21", 0x000000, 0x80000, CRC(b9281dfd) SHA1(449faf5d36f3b970d0a9b483e2152a5f68604a77) )
ROM_REGION(0x80000, "oki3", 0 )
ROM_LOAD( "mar-07.n19", 0x000000, 0x80000, CRC(40287d62) SHA1(c00cb08bcdae55bcddc14c38e88b0484b1bc9e3e) )
ROM_END
ROM_START( fghthist ) /* DE-0395-1 PCB */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_WORD( "lc00-1.1f", 0x000000, 0x80000, CRC(61a76a16) SHA1(b69cd3e11cf133f1b14a017391035855a5038d46) ) /* Version 43-09, Overseas */
ROM_LOAD32_WORD( "lc01-1.2f", 0x000002, 0x80000, CRC(6f2740d1) SHA1(4fa1fe4714236028ef70d42e15a58cfd25e45363) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "lc02-1.18k", 0x00000, 0x10000, CRC(5fd2309c) SHA1(2fb7af54d5cd9bf7dd6fb4f6b82aa52b03294f1f) )
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_LOAD( "mbf00-8.8a", 0x000000, 0x100000, CRC(d3e9b580) SHA1(fc4676e0ecc6c32441ff66fa1f990cc3158237db) ) /* Encrypted tiles */
ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "mbf01-8.9a", 0x000000, 0x100000, CRC(0c6ed2eb) SHA1(8e37ef4b1f0b6d3370a08758bfd602cb5f221282) ) /* Encrypted tiles */
ROM_REGION( 0x800000, "gfx3", 0 ) /* Sprites */
ROM_LOAD( "mbf02-16.16d", 0x000000, 0x200000, CRC(c19c5953) SHA1(e6ed26f932c6c86bbd1fc4c000aa2f510c268009) )
ROM_LOAD( "mbf03-16.17d", 0x200000, 0x200000, CRC(37d25c75) SHA1(8219d31091b4317190618edd8acc49f97cba6a1e) )
ROM_LOAD( "mbf04-16.18d", 0x400000, 0x200000, CRC(f6a23fd7) SHA1(74e5559f17cd591aa25d2ed6c34ac9ed89e2e9ba) )
ROM_LOAD( "mbf05-16.19d", 0x600000, 0x200000, CRC(137be66d) SHA1(3fde345183ce04a7a65b4cedfd050d771df7d026) )
ROM_REGION(0x80000, "oki1", 0 )
ROM_LOAD( "mbf06.15k", 0x000000, 0x80000, CRC(fb513903) SHA1(7727a49ff7977f159ed36d097020edef3b5b36ba) )
ROM_REGION(0x80000, "oki2", 0 )
ROM_LOAD( "mbf07.16k", 0x000000, 0x80000, CRC(51d4adc7) SHA1(22106ed7a05db94adc5a783ce34529e29d24d41a) )
ROM_REGION(512, "proms", 0 )
ROM_LOAD( "kt-00.8j", 0, 512, CRC(7294354b) SHA1(14fe42ad5d26d022c0fe9a46a4a9017af2296f40) ) /* MB7124H type prom */
ROM_REGION( 0x0400, "plds", 0 )
ROM_LOAD( "ve-00.3d", 0x0000, 0x0117, CRC(384d316c) SHA1(61b50c695d4210c199cf6f7bbe50c8a5ecd1d21c) )
ROM_LOAD( "ve-01a.4d", 0x0200, 0x0117, CRC(109613c8) SHA1(5991e010c1bc2a827c8ee2c85a9b40e00a3167b3) )
/* PAL16L8BCN at 8J is unpopulated */
ROM_END
ROM_START( fghthista ) /* DE-0380-2 PCB */
ROM_REGION(0x100000, "maincpu", 0 ) /* ARM 32 bit code */
ROM_LOAD32_WORD( "kx00-3.1f", 0x000000, 0x80000, CRC(fe5eaba1) SHA1(c8a3784af487a1bbd2150abf4b1c8f3ad33da8a4) ) /* Version 43-07, Overseas */
ROM_LOAD32_WORD( "kx01-3.2f", 0x000002, 0x80000, CRC(3fb8d738) SHA1(2fca7a3ea483f01c97fb28a0adfa6d7980d8236c) )
ROM_REGION(0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "kx02.18k", 0x00000, 0x10000, CRC(5fd2309c) SHA1(2fb7af54d5cd9bf7dd6fb4f6b82aa52b03294f1f) )
ROM_REGION( 0x100000, "gfx1", 0 )
ROM_LOAD( "mbf00-8.8a", 0x000000, 0x100000, CRC(d3e9b580) SHA1(fc4676e0ecc6c32441ff66fa1f990cc3158237db) ) /* Encrypted tiles */
ROM_REGION( 0x100000, "gfx2",