summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2019-12-20 07:06:40 +0100
committer mooglyguy <therealmogminer@gmail.com>2019-12-20 07:07:50 +0100
commit1e5b1b43a6c157d9f33c437573061b0108606c6e (patch)
tree01d39c25cf0cec2640192d8b58b89359d9652ada
parent877db65af6f72743c27c242e82ca4fd1e7b87c01 (diff)
-zn.cpp: Split into subclasses, eliminated optional devices, removed MACHINE_START_OVERRIDE and MACHINE_RESET_OVERRIDE. [Ryan Holtz]
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--src/mame/drivers/zn.cpp1149
-rw-r--r--src/mame/includes/zn.h579
3 files changed, 1017 insertions, 712 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 4cf82d097a0..b177b3a36c5 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -3760,6 +3760,7 @@ files {
createMAMEProjects(_target, _subtarget, "sony")
files {
MAME_DIR .. "src/mame/drivers/zn.cpp",
+ MAME_DIR .. "src/mame/includes/zn.h",
MAME_DIR .. "src/mame/machine/znmcu.cpp",
MAME_DIR .. "src/mame/machine/znmcu.h",
MAME_DIR .. "src/mame/machine/cat702.cpp",
diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp
index 81fba2ada5e..864ee446aef 100644
--- a/src/mame/drivers/zn.cpp
+++ b/src/mame/drivers/zn.cpp
@@ -11,235 +11,12 @@
***************************************************************************/
#include "emu.h"
-#include "audio/rax.h"
-#include "audio/taito_zm.h"
-#include "audio/taitosnd.h"
-
-#include "bus/ata/atadev.h"
-#include "bus/ata/ataintf.h"
-#include "cpu/m68000/m68000.h"
-#include "cpu/mcs51/mcs51.h"
-#include "cpu/psx/psx.h"
-#include "cpu/z80/z80.h"
-#include "machine/7200fifo.h"
-#include "machine/at28c16.h"
-#include "machine/bankdev.h"
-#include "machine/cat702.h"
-#include "machine/gen_latch.h"
-#include "machine/mb3773.h"
-#include "machine/nvram.h"
-#include "machine/ram.h"
-#include "machine/vt83c461.h"
-#include "machine/watchdog.h"
-#include "machine/znmcu.h"
-#include "sound/2610intf.h"
-#include "sound/okim6295.h"
-#include "sound/qsound.h"
-#include "sound/spu.h"
-#include "sound/ymf271.h"
-#include "sound/ymz280b.h"
-#include "video/psx.h"
-
-#include "screen.h"
-#include "speaker.h"
+#include "includes/zn.h"
#include <algorithm>
#define VERBOSE_LEVEL ( 0 )
-class zn_state : public driver_device
-{
-public:
- zn_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_gpu(*this, "gpu"),
- m_gpu_screen(*this, "screen"),
- m_sio0(*this, "maincpu:sio0"),
- m_cat702(*this, "cat702_%u", 1),
- m_znmcu(*this, "znmcu"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_ram(*this, "maincpu:ram"),
- m_cbaj_fifo(*this, "cbaj_fifo%u", 1),
- m_mb3773(*this, "mb3773"),
- m_zoom(*this, "taito_zoom"),
- m_rax(*this, "rax"),
- m_vt83c461(*this, "ide"),
- m_soundlatch(*this, "soundlatch"),
- m_soundlatch16(*this, "soundlatch16"),
- m_nbajamex_bankmap(*this, "nbajamex_bankmap"),
- m_bankedroms(*this, "bankedroms"),
- m_rombank(*this, "rombank%u", 1),
- m_soundbank(*this, "soundbank"),
- m_okibank(*this, "okibank"),
- m_znmcu_dataout(1)
- {
- std::fill(std::begin(m_cat702_dataout), std::end(m_cat702_dataout), 1);
- }
-
- void zn1_1mb_vram(machine_config &config);
- void zn1_2mb_vram(machine_config &config);
- void zn2(machine_config &config);
- void gameboard_cat702(machine_config &config);
- void jdredd(machine_config &config);
- void coh1002msnd(machine_config &config);
- void coh1002tb(machine_config &config);
- void coh1000a(machine_config &config);
- void coh1000tb(machine_config &config);
- void coh1002m(machine_config &config);
- void coh1002ml(machine_config &config);
- void coh1001l(machine_config &config);
- void bam2(machine_config &config);
- void beastrzrb(machine_config &config);
- void glpracr(machine_config &config);
- void coh1000ta(machine_config &config);
- void coh1002v(machine_config &config);
- void nbajamex(machine_config &config);
- void coh1000c(machine_config &config);
- void coh1000w(machine_config &config);
- void coh1002e(machine_config &config);
- void coh3002c(machine_config &config);
- void coh1002c(machine_config &config);
-
- void init_coh1000tb();
- void init_nbajamex();
- void init_bam2();
- void init_jdredd();
- void init_coh1000w();
- void init_primrag2();
-
- DECLARE_READ_LINE_MEMBER(jdredd_gun_mux_r);
-
-private:
- template<int Chip> DECLARE_WRITE_LINE_MEMBER(cat702_dataout) { m_cat702_dataout[Chip] = state; update_sio0_rxd(); }
- DECLARE_WRITE_LINE_MEMBER(znmcu_dataout) { m_znmcu_dataout = state; update_sio0_rxd(); }
- void update_sio0_rxd() { m_sio0->write_rxd(m_cat702_dataout[0] && m_cat702_dataout[1] && m_znmcu_dataout); }
- DECLARE_READ8_MEMBER(znsecsel_r);
- DECLARE_WRITE8_MEMBER(znsecsel_w);
- DECLARE_READ8_MEMBER(boardconfig_r);
- DECLARE_READ16_MEMBER(unknown_r);
- DECLARE_WRITE8_MEMBER(coin_w);
- DECLARE_READ16_MEMBER(capcom_kickharness_r);
- DECLARE_WRITE8_MEMBER(bank_coh1000c_w);
- DECLARE_WRITE8_MEMBER(qsound_bankswitch_w);
- DECLARE_WRITE8_MEMBER(bank_coh1000t_w);
- DECLARE_WRITE8_MEMBER(fx1a_sound_bankswitch_w);
- DECLARE_WRITE8_MEMBER(fx1b_fram_w);
- DECLARE_READ8_MEMBER(fx1b_fram_r);
- DECLARE_WRITE8_MEMBER(coh1002e_bank_w);
- DECLARE_WRITE8_MEMBER(coh1002e_sound_irq_w);
- DECLARE_WRITE16_MEMBER(bam2_mcu_w);
- DECLARE_READ16_MEMBER(bam2_mcu_r);
- DECLARE_READ16_MEMBER(bam2_unk_r);
- DECLARE_WRITE16_MEMBER(acpsx_00_w);
- DECLARE_WRITE16_MEMBER(acpsx_10_w);
- DECLARE_WRITE16_MEMBER(nbajamex_bank_w);
- DECLARE_WRITE16_MEMBER(nbajamex_80_w);
- DECLARE_WRITE8_MEMBER(nbajamex_backup_w);
- DECLARE_READ16_MEMBER(nbajamex_08_r);
- DECLARE_READ16_MEMBER(nbajamex_80_r);
- DECLARE_WRITE8_MEMBER(coh1001l_bank_w);
- DECLARE_WRITE16_MEMBER(coh1001l_sound_unk_w);
- DECLARE_WRITE8_MEMBER(coh1002v_bank_w);
- DECLARE_WRITE8_MEMBER(coh1002m_bank_w);
- DECLARE_READ8_MEMBER(cbaj_sound_main_status_r);
- DECLARE_READ8_MEMBER(cbaj_sound_z80_status_r);
- DECLARE_READ16_MEMBER(vt83c461_16_r);
- DECLARE_WRITE16_MEMBER(vt83c461_16_w);
- DECLARE_READ16_MEMBER(vt83c461_32_r);
- DECLARE_WRITE16_MEMBER(vt83c461_32_w);
-
- DECLARE_MACHINE_START(coh1000c);
- DECLARE_MACHINE_START(coh1000ta);
- DECLARE_MACHINE_START(coh1002e);
- DECLARE_MACHINE_START(bam2);
- DECLARE_MACHINE_START(nbajamex);
- DECLARE_MACHINE_START(coh1001l);
- DECLARE_MACHINE_START(coh1002v);
- DECLARE_MACHINE_START(coh1002m);
- DECLARE_MACHINE_RESET(coh1000c);
- DECLARE_MACHINE_RESET(glpracr);
- DECLARE_MACHINE_RESET(coh1000ta);
- DECLARE_MACHINE_RESET(coh1002e);
- DECLARE_MACHINE_RESET(bam2);
- DECLARE_MACHINE_RESET(nbajamex);
- DECLARE_MACHINE_RESET(coh1001l);
- DECLARE_MACHINE_RESET(coh1002v);
- DECLARE_MACHINE_RESET(coh1002m);
- INTERRUPT_GEN_MEMBER(qsound_interrupt);
- void atpsx_dma_read(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
- void atpsx_dma_write(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
- DECLARE_WRITE_LINE_MEMBER(jdredd_vblank);
-
- void atlus_snd_map(address_map &map);
- void bam2_map(address_map &map);
- void beastrzrb_snd_map(address_map &map);
- void cbaj_z80_map(address_map &map);
- void cbaj_z80_port_map(address_map &map);
- void coh1000a_map(address_map &map);
- void coh1000c_map(address_map &map);
- void coh1000ta_map(address_map &map);
- void coh1000tb_map(address_map &map);
- void coh1000w_map(address_map &map);
- void coh1001l_map(address_map &map);
- void coh1002e_map(address_map &map);
- void coh1002m_map(address_map &map);
- void coh1002ml_link_map(address_map &map);
- void coh1002ml_link_port_map(address_map &map);
- void coh1002msnd_map(address_map &map);
- void coh1002v_map(address_map &map);
- void fx1a_sound_map(address_map &map);
- void jdredd_map(address_map &map);
- void nbajamex_map(address_map &map);
- void nbajamex_bank_map(address_map &map);
- void oki_map(address_map &map);
- void psarc_snd_map(address_map &map);
- void qsound_map(address_map &map);
- void qsound_portmap(address_map &map);
- void zn_map(address_map &map);
-
- virtual void machine_start() override;
-
- inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... );
- inline void psxwriteword( uint32_t *p_n_psxram, uint32_t n_address, uint16_t n_data );
-
- uint8_t m_n_znsecsel;
-
- uint16_t m_bam2_mcu_command;
- int m_jdredd_gun_mux;
-
- std::unique_ptr<uint8_t[]> m_fx1b_fram;
- std::unique_ptr<uint8_t[]> m_nbajamex_sram;
-
- uint32_t m_nbajamex_rombank[2];
-
- uint16_t m_vt83c461_latch;
-
- required_device<psxgpu_device> m_gpu;
- required_device<screen_device> m_gpu_screen;
- required_device<psxsio0_device> m_sio0;
- optional_device_array<cat702_device, 2> m_cat702;
- required_device<znmcu_device> m_znmcu;
- required_device<cpu_device> m_maincpu;
- optional_device<cpu_device> m_audiocpu;
- required_device<ram_device> m_ram;
- optional_device_array<fifo7200_device, 2> m_cbaj_fifo;
- optional_device<mb3773_device> m_mb3773;
- optional_device<taito_zoom_device> m_zoom;
- optional_device<acclaim_rax_device> m_rax;
- optional_device<vt83c461_device> m_vt83c461;
- optional_device<generic_latch_8_device> m_soundlatch;
- optional_device<generic_latch_16_device> m_soundlatch16;
- optional_device<address_map_bank_device> m_nbajamex_bankmap;
- optional_memory_region m_bankedroms;
- optional_memory_bank_array<2> m_rombank;
- optional_memory_bank m_soundbank;
- optional_memory_bank m_okibank;
-
- int m_cat702_dataout[2];
- int m_znmcu_dataout;
-};
-
inline void ATTR_PRINTF(3,4) zn_state::verboselog( int n_level, const char *s_fmt, ... )
{
if( VERBOSE_LEVEL >= n_level )
@@ -357,7 +134,7 @@ WRITE8_MEMBER(zn_state::coin_w)
}
}
-void zn_state::zn_map(address_map &map)
+void zn_state::zn_base_map(address_map &map)
{
map(0x1fa00000, 0x1fa00003).portr("P1");
map(0x1fa00100, 0x1fa00103).portr("P2");
@@ -375,11 +152,11 @@ void zn_state::zn_map(address_map &map)
map(0x1fb20000, 0x1fb20007).r(FUNC(zn_state::unknown_r));
}
-void zn_state::zn1_1mb_vram(machine_config &config)
+void zn_state::zn_1mb_vram(machine_config &config)
{
/* basic machine hardware */
CXD8530CQ(config, m_maincpu, XTAL(67'737'600));
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::zn_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::zn_base_map);
m_maincpu->subdevice<ram_device>("ram")->set_default_size("4M");
@@ -407,8 +184,6 @@ void zn_state::zn1_1mb_vram(machine_config &config)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- GENERIC_LATCH_8(config, m_soundlatch);
-
spu_device &spu(SPU(config, "spu", XTAL(67'737'600)/2, subdevice<psxcpu_device>("maincpu")));
spu.add_route(0, "lspeaker", 0.35);
spu.add_route(1, "rspeaker", 0.35);
@@ -416,17 +191,17 @@ void zn_state::zn1_1mb_vram(machine_config &config)
AT28C16(config, "at28c16", 0);
}
-void zn_state::zn1_2mb_vram(machine_config &config)
+void zn_state::zn_2mb_vram(machine_config &config)
{
- zn1_1mb_vram(config);
+ zn_1mb_vram(config);
CXD8561Q(config.replace(), "gpu", XTAL(53'693'175), 0x200000, subdevice<psxcpu_device>("maincpu")).set_screen("screen");
}
-void zn_state::zn2(machine_config &config)
+void zn2_state::zn2(machine_config &config)
{
/* basic machine hardware */
CXD8661R(config, m_maincpu, XTAL(100'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::zn_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &zn2_state::zn_base_map);
m_maincpu->subdevice<ram_device>("ram")->set_default_size("4M");
auto &sio0(*m_maincpu->subdevice<psxsio0_device>("sio0"));
@@ -438,7 +213,7 @@ void zn_state::zn2(machine_config &config)
m_cat702[0]->dataout_handler().set(FUNC(zn_state::cat702_dataout<0>));
ZNMCU(config, m_znmcu, 0);
- m_znmcu->dataout_handler().set(FUNC(zn_state::znmcu_dataout));
+ m_znmcu->dataout_handler().set(FUNC(zn2_state::znmcu_dataout));
m_znmcu->dsr_handler().set("maincpu:sio0", FUNC(psxsio0_device::write_dsr));
m_znmcu->dsw_handler().set_ioport("DSW");
m_znmcu->analog1_handler().set_ioport("ANALOG1");
@@ -453,8 +228,6 @@ void zn_state::zn2(machine_config &config)
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- GENERIC_LATCH_8(config, m_soundlatch);
-
spu_device &spu(SPU(config, "spu", XTAL(67'737'600)/2, subdevice<psxcpu_device>("maincpu")));
spu.add_route(0, "lspeaker", 0.35);
spu.add_route(1, "rspeaker", 0.35);
@@ -586,89 +359,87 @@ Notes:
Unpopulated sockets - 1.3B, 2.2E, 3.3E, 8.2K, 9.3K, 10.4K, 11.5K, 12.6K & 13.7K
*/
-READ16_MEMBER(zn_state::capcom_kickharness_r)
+READ16_MEMBER(capcom_zn_state::kickharness_r)
{
/* required for buttons 4,5&6 */
verboselog(2, "capcom_kickharness_r( %08x, %08x )\n", offset, mem_mask );
return 0xffff;
}
-WRITE8_MEMBER(zn_state::bank_coh1000c_w)
+WRITE8_MEMBER(capcom_zn_state::bank_w)
{
- m_rombank[0]->set_entry( data & 0x0f);
+ m_rombank->set_entry( data & 0x0f);
}
-WRITE8_MEMBER(zn_state::qsound_bankswitch_w)
+WRITE8_MEMBER(capcom_zn_state::qsound_bankswitch_w)
{
m_soundbank->set_entry( data & 0x0f );
}
-INTERRUPT_GEN_MEMBER(zn_state::qsound_interrupt)
+INTERRUPT_GEN_MEMBER(capcom_zn_state::qsound_interrupt)
{
device.execute().set_input_line(0, HOLD_LINE);
}
-void zn_state::coh1000c_map(address_map &map)
+void capcom_zn_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
map(0x1f000000, 0x1f3fffff).rom().region("bankedroms", 0);
- map(0x1f400000, 0x1f7fffff).bankr("rombank1");
- map(0x1fb00000, 0x1fb00000).w(FUNC(zn_state::bank_coh1000c_w));
- map(0x1fb40010, 0x1fb40011).r(FUNC(zn_state::capcom_kickharness_r));
- map(0x1fb40020, 0x1fb40021).r(FUNC(zn_state::capcom_kickharness_r));
+ map(0x1f400000, 0x1f7fffff).bankr("rombank");
+ map(0x1fb00000, 0x1fb00000).w(FUNC(capcom_zn_state::bank_w));
+ map(0x1fb40010, 0x1fb40011).r(FUNC(capcom_zn_state::kickharness_r));
+ map(0x1fb40020, 0x1fb40021).r(FUNC(capcom_zn_state::kickharness_r));
map(0x1fb80000, 0x1fbfffff).rom().region("countryrom", 0);
map(0x1fb60000, 0x1fb60000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
}
-MACHINE_START_MEMBER(zn_state,coh1000c)
+void capcom_zn_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 16, m_bankedroms->base() + 0x400000, 0x400000 ); /* banked game ROM */
+ m_rombank->configure_entries( 0, 16, m_bankedroms->base() + 0x400000, 0x400000 ); /* banked game ROM */
m_soundbank->configure_entries( 0, 16, memregion("audiocpu")->base() + 0x8000, 0x4000 ); /* banked audio ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1000c)
+void capcom_zn_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
+ m_rombank->set_entry( 0 );
m_soundbank->set_entry( 0 );
}
-MACHINE_RESET_MEMBER(zn_state,glpracr)
+void glpracr_state::machine_reset()
{
+ capcom_zn_state::machine_reset();
m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // glpracr QSound ROM sockets are empty
- MACHINE_RESET_CALL_MEMBER(coh1000c);
}
-void zn_state::qsound_map(address_map &map)
+void capcom_zn_state::qsound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).bankr("soundbank"); /* banked (contains music data) */
map(0xd000, 0xd002).w("qsound", FUNC(qsound_device::qsound_w));
- map(0xd003, 0xd003).w(FUNC(zn_state::qsound_bankswitch_w));
+ map(0xd003, 0xd003).w(FUNC(capcom_zn_state::qsound_bankswitch_w));
map(0xd007, 0xd007).r("qsound", FUNC(qsound_device::qsound_r));
map(0xf000, 0xffff).ram();
}
-void zn_state::qsound_portmap(address_map &map)
+void capcom_zn_state::qsound_portmap(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).r(m_soundlatch, FUNC(generic_latch_8_device::read));
}
-void zn_state::coh1000c(machine_config &config)
+void capcom_zn_state::zn_base(machine_config &config)
{
- zn1_1mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000c_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &capcom_zn_state::main_map);
Z80(config, m_audiocpu, XTAL(8'000'000));
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::qsound_map);
- m_audiocpu->set_addrmap(AS_IO, &zn_state::qsound_portmap);
- m_audiocpu->set_periodic_int(FUNC(zn_state::qsound_interrupt), attotime::from_hz(250)); // measured (cps2.cpp)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &capcom_zn_state::qsound_map);
+ m_audiocpu->set_addrmap(AS_IO, &capcom_zn_state::qsound_portmap);
+ m_audiocpu->set_periodic_int(FUNC(capcom_zn_state::qsound_interrupt), attotime::from_hz(250)); // measured (cps2.cpp)
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c)
+ GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
@@ -677,32 +448,16 @@ void zn_state::coh1000c(machine_config &config)
qsound.add_route(1, "rspeaker", 1.0);
}
-void zn_state::glpracr(machine_config &config)
+void zn1_state::coh1000c(machine_config &config)
{
- coh1000c(config);
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, glpracr)
+ zn_1mb_vram(config);
+ zn_base(config);
}
-void zn_state::coh1002c(machine_config &config)
+void zn1_state::coh1002c(machine_config &config)
{
- zn1_2mb_vram(config);
- gameboard_cat702(config);
-
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000c_map);
-
- Z80(config, m_audiocpu, XTAL(8'000'000));
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::qsound_map);
- m_audiocpu->set_addrmap(AS_IO, &zn_state::qsound_portmap);
- m_audiocpu->set_periodic_int(FUNC(zn_state::qsound_interrupt), attotime::from_hz(250)); // measured (cps2.cpp)
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c)
-
- m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
-
- qsound_device &qsound(QSOUND(config, "qsound"));
- qsound.add_route(0, "lspeaker", 1.0);
- qsound.add_route(1, "rspeaker", 1.0);
+ zn_2mb_vram(config);
+ zn_base(config);
}
/*
@@ -846,26 +601,10 @@ Notes:
Unpopulated sockets on Rival Schools - None
*/
-void zn_state::coh3002c(machine_config &config)
+void zn2_state::coh3002c(machine_config &config)
{
zn2(config);
- gameboard_cat702(config);
-
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000c_map);
-
- Z80(config, m_audiocpu, XTAL(8'000'000));
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::qsound_map);
- m_audiocpu->set_addrmap(AS_IO, &zn_state::qsound_portmap);
- m_audiocpu->set_periodic_int(FUNC(zn_state::qsound_interrupt), attotime::from_hz(250)); // measured (cps2.cpp)
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000c)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000c)
-
- m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
-
- qsound_device &qsound(QSOUND(config, "qsound"));
- qsound.add_route(0, "lspeaker", 1.0);
- qsound.add_route(1, "rspeaker", 1.0);
+ zn_base(config);
}
/*
@@ -1088,48 +827,56 @@ Notes:
FM1208S - RAMTRON 4096bit Nonvolatile Ferroelectric RAM (512w x 8b)
*/
-WRITE8_MEMBER(zn_state::bank_coh1000t_w)
+WRITE8_MEMBER(taito_fx_state::bank_w)
{
- verboselog(1, "bank_coh1000t_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
+ verboselog(1, "bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
m_mb3773->write_line_ck((data & 0x20) >> 5);
- m_rombank[0]->set_entry( data & 3 );
+ m_rombank->set_entry( data & 3 );
}
-WRITE8_MEMBER(zn_state::fx1a_sound_bankswitch_w)
+WRITE8_MEMBER(taito_fx1a_state::sound_bankswitch_w)
{
m_soundbank->set_entry( data & 0x07 );
}
-void zn_state::coh1000ta_map(address_map &map)
+void taito_fx1a_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
- map(0x1f000000, 0x1f7fffff).bankr("rombank1");
- map(0x1fb40000, 0x1fb40000).w(FUNC(zn_state::bank_coh1000t_w));
+ map(0x1f000000, 0x1f7fffff).bankr("rombank");
+ map(0x1fb40000, 0x1fb40000).w(FUNC(taito_fx1a_state::bank_w));
map(0x1fb80000, 0x1fb80000).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
map(0x1fb80002, 0x1fb80002).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
}
-MACHINE_START_MEMBER(zn_state,coh1000ta)
+void taito_fx_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
- if (m_soundbank.found())
- {
- m_soundbank->configure_entry( 0, memregion( "audiocpu" )->base() + 0x20000 ); /* TODO : Bank 0 is addressing First 16 KB of ROM? */
- m_soundbank->configure_entries( 1, 7, memregion( "audiocpu" )->base() + 0x4000, 0x4000 );
- }
+ zn_state::machine_start();
+
+ m_rombank->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1000ta)
+void taito_fx_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
- if (m_soundbank.found())
- m_soundbank->set_entry( 1 );
+ m_rombank->set_entry( 0 );
}
-void zn_state::fx1a_sound_map(address_map &map)
+void taito_fx1a_state::machine_start()
+{
+ taito_fx_state::machine_start();
+ m_soundbank->configure_entry( 0, memregion( "audiocpu" )->base() + 0x20000 ); /* TODO : Bank 0 is addressing First 16 KB of ROM? */
+ m_soundbank->configure_entries( 1, 7, memregion( "audiocpu" )->base() + 0x4000, 0x4000 );
+}
+
+void taito_fx1a_state::machine_reset()
+{
+ taito_fx_state::machine_reset();
+ m_soundbank->set_entry( 1 );
+}
+
+void taito_fx1a_state::sound_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x7fff).bankr("soundbank");
@@ -1140,22 +887,19 @@ void zn_state::fx1a_sound_map(address_map &map)
map(0xe400, 0xe403).nopw(); /* pan */
map(0xee00, 0xee00).noprw(); /* ? */
map(0xf000, 0xf000).nopw(); /* ? */
- map(0xf200, 0xf200).w(FUNC(zn_state::fx1a_sound_bankswitch_w));
+ map(0xf200, 0xf200).w(FUNC(taito_fx1a_state::sound_bankswitch_w));
}
-void zn_state::coh1000ta(machine_config &config)
+void taito_fx1a_state::coh1000ta(machine_config &config)
{
- zn1_1mb_vram(config);
+ zn_1mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000ta_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &taito_fx1a_state::main_map);
Z80(config, m_audiocpu, XTAL(16'000'000) / 4); /* 4 MHz */
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::fx1a_sound_map);
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000ta)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000ta)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &taito_fx1a_state::sound_map);
ym2610b_device &ymsnd(YM2610B(config, "ymsnd", 16_MHz_XTAL/2));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
@@ -1164,29 +908,29 @@ void zn_state::coh1000ta(machine_config &config)
ymsnd.add_route(1, "lspeaker", 1.0);
ymsnd.add_route(2, "rspeaker", 1.0);
- MB3773(config, "mb3773");
+ MB3773(config, m_mb3773);
tc0140syt_device &tc0140syt(TC0140SYT(config, "tc0140syt", 0));
tc0140syt.set_master_tag(m_maincpu);
tc0140syt.set_slave_tag(m_audiocpu);
}
-WRITE8_MEMBER(zn_state::fx1b_fram_w)
+WRITE8_MEMBER(taito_fx1b_state::fram_w)
{
- m_fx1b_fram[offset] = data;
+ m_fram[offset] = data;
}
-READ8_MEMBER(zn_state::fx1b_fram_r)
+READ8_MEMBER(taito_fx1b_state::fram_r)
{
- return m_fx1b_fram[offset];
+ return m_fram[offset];
}
-void zn_state::coh1000tb_map(address_map &map)
+void taito_fx1b_state::main_map(address_map &map)
{
- zn_map(map);
- map(0x1f000000, 0x1f7fffff).bankr("rombank1");
- map(0x1fb00000, 0x1fb003ff).rw(FUNC(zn_state::fx1b_fram_r), FUNC(zn_state::fx1b_fram_w)).umask32(0x00ff00ff);
- map(0x1fb40000, 0x1fb40000).w(FUNC(zn_state::bank_coh1000t_w));
+ zn_base_map(map);
+ map(0x1f000000, 0x1f7fffff).bankr("rombank");
+ map(0x1fb00000, 0x1fb003ff).rw(FUNC(taito_fx1b_state::fram_r), FUNC(taito_fx1b_state::fram_w)).umask32(0x00ff00ff);
+ map(0x1fb40000, 0x1fb40000).w(FUNC(taito_fx1b_state::bank_w));
map(0x1fb80000, 0x1fb80001).w(m_zoom, FUNC(taito_zoom_device::reg_data_w));
map(0x1fb80002, 0x1fb80003).w(m_zoom, FUNC(taito_zoom_device::reg_address_w));
map(0x1fba0000, 0x1fba0001).w(m_zoom, FUNC(taito_zoom_device::sound_irq_w));
@@ -1194,27 +938,26 @@ void zn_state::coh1000tb_map(address_map &map)
map(0x1fbe0000, 0x1fbe01ff).rw(m_zoom, FUNC(taito_zoom_device::shared_ram_r), FUNC(taito_zoom_device::shared_ram_w)).umask32(0x00ff00ff); // M66220FP for comm with the MN10200
}
-void zn_state::init_coh1000tb()
+void taito_fx1b_state::machine_start()
{
- m_fx1b_fram = std::make_unique<uint8_t[]>(0x200);
- subdevice<nvram_device>("fm1208s")->set_base(m_fx1b_fram.get(), 0x200);
+ taito_fx_state::machine_start();
- save_pointer(NAME(m_fx1b_fram), 0x200);
+ m_fram = std::make_unique<uint8_t[]>(0x200);
+ m_fm1208s->set_base(m_fram.get(), 0x200);
+
+ save_pointer(NAME(m_fram), 0x200);
}
-void zn_state::coh1000tb(machine_config &config)
+void taito_fx1b_state::base_config(machine_config &config)
{
- zn1_1mb_vram(config);
gameboard_cat702(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000tb_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &taito_fx1b_state::main_map);
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000ta)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000ta)
- NVRAM(config, "fm1208s", nvram_device::DEFAULT_ALL_1);
+ NVRAM(config, m_fm1208s, nvram_device::DEFAULT_ALL_1);
- MB3773(config, "mb3773");
+ MB3773(config, m_mb3773);
/* sound hardware */
subdevice<spu_device>("spu")->reset_routes();
@@ -1226,28 +969,16 @@ void zn_state::coh1000tb(machine_config &config)
m_zoom->add_route(1, "rspeaker", 1.0);
}
-void zn_state::coh1002tb(machine_config &config)
+void taito_fx1b_state::coh1000tb(machine_config &config)
{
- zn1_2mb_vram(config);
- gameboard_cat702(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000tb_map);
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1000ta)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000ta)
- NVRAM(config, "fm1208s", nvram_device::DEFAULT_ALL_1);
-
- MB3773(config, "mb3773");
-
- /* sound hardware */
- subdevice<spu_device>("spu")->reset_routes();
- subdevice<spu_device>("spu")->add_route(0, "lspeaker", 0.3);
- subdevice<spu_device>("spu")->add_route(1, "rspeaker", 0.3);
+ zn_1mb_vram(config);
+ base_config(config);
+}
- TAITO_ZOOM(config, m_zoom);
- m_zoom->add_route(0, "lspeaker", 1.0);
- m_zoom->add_route(1, "rspeaker", 1.0);
+void gdarius_state::coh1002tb(machine_config &config)
+{
+ zn_2mb_vram(config);
+ base_config(config);
}
/*
@@ -1367,7 +1098,7 @@ Notes:
*2 - Unpopulated DIP28 socket
*/
-void zn_state::atpsx_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
+void primrag2_state::dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
{
// logerror("DMA read: %d bytes (%d words) to %08x\n", n_size<<2, n_size, n_address);
@@ -1387,12 +1118,12 @@ void zn_state::atpsx_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t
}
}
-void zn_state::atpsx_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
+void primrag2_state::dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
{
logerror("DMA write from %08x for %d bytes\n", n_address, n_size<<2);
}
-READ16_MEMBER(zn_state::vt83c461_16_r)
+READ16_MEMBER(primrag2_state::vt83c461_16_r)
{
int shift = (16 * (offset & 1));
@@ -1415,7 +1146,7 @@ READ16_MEMBER(zn_state::vt83c461_16_r)
}
}
-WRITE16_MEMBER(zn_state::vt83c461_16_w)
+WRITE16_MEMBER(primrag2_state::vt83c461_16_w)
{
int shift = (16 * (offset & 1));
@@ -1437,7 +1168,7 @@ WRITE16_MEMBER(zn_state::vt83c461_16_w)
}
}
-READ16_MEMBER(zn_state::vt83c461_32_r)
+READ16_MEMBER(primrag2_state::vt83c461_32_r)
{
if( offset == 0x1f0/2 )
{
@@ -1456,34 +1187,35 @@ READ16_MEMBER(zn_state::vt83c461_32_r)
}
}
-WRITE16_MEMBER(zn_state::vt83c461_32_w)
+WRITE16_MEMBER(primrag2_state::vt83c461_32_w)
{
logerror( "unhandled 32 bit write %04x %04x %04x\n", offset, data, mem_mask );
}
-void zn_state::init_primrag2()
+void primrag2_state::machine_start()
{
+ zn_state::machine_start();
save_item(NAME(m_vt83c461_latch));
}
-void zn_state::coh1000w_map(address_map &map)
+void primrag2_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
map(0x1f000000, 0x1f1fffff).rom().region("roms", 0);
map(0x1f000000, 0x1f000003).w("watchdog", FUNC(watchdog_timer_device::reset16_w)).umask16(0xffff); // ds1232s
map(0x1f7e8000, 0x1f7e8003).noprw();
- map(0x1f7e4000, 0x1f7e4fff).rw(FUNC(zn_state::vt83c461_16_r), FUNC(zn_state::vt83c461_16_w));
- map(0x1f7f4000, 0x1f7f4fff).rw(FUNC(zn_state::vt83c461_32_r), FUNC(zn_state::vt83c461_32_w));
+ map(0x1f7e4000, 0x1f7e4fff).rw(FUNC(primrag2_state::vt83c461_16_r), FUNC(primrag2_state::vt83c461_16_w));
+ map(0x1f7f4000, 0x1f7f4fff).rw(FUNC(primrag2_state::vt83c461_32_r), FUNC(primrag2_state::vt83c461_32_w));
}
-void zn_state::coh1000w(machine_config &config)
+void primrag2_state::coh1000w(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000w_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &primrag2_state::main_map);
m_maincpu->subdevice<ram_device>("ram")->set_default_size("8M");
- m_maincpu->subdevice<psxdma_device>("dma")->install_read_handler(5, psxdma_device::read_delegate(&zn_state::atpsx_dma_read, this));
- m_maincpu->subdevice<psxdma_device>("dma")->install_write_handler(5, psxdma_device::write_delegate(&zn_state::atpsx_dma_write, this));
+ m_maincpu->subdevice<psxdma_device>("dma")->install_read_handler(5, psxdma_device::read_delegate(&primrag2_state::dma_read, this));
+ m_maincpu->subdevice<psxdma_device>("dma")->install_write_handler(5, psxdma_device::write_delegate(&primrag2_state::dma_write, this));
WATCHDOG_TIMER(config, "watchdog").set_time(attotime::from_msec(600)); /* 600ms Ds1232 TD floating */
@@ -1639,43 +1371,52 @@ Notes:
*/
-WRITE8_MEMBER(zn_state::coh1002e_bank_w)
+WRITE8_MEMBER(raizing_zn_state::bank_w)
{
znsecsel_w( space, offset, data, mem_mask );
- m_rombank[0]->set_entry( data & 3 );
+ m_rombank->set_entry( data & 3 );
}
-WRITE8_MEMBER(zn_state::coh1002e_sound_irq_w)
+WRITE8_MEMBER(raizing_zn_state::sound_irq_w)
{
m_audiocpu->set_input_line(2, HOLD_LINE); // irq 2 on the 68k
}
-void zn_state::coh1002e_map(address_map &map)
+void raizing_zn_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
- map(0x1f000000, 0x1f7fffff).bankr("rombank1");
- map(0x1fa10300, 0x1fa10300).w(FUNC(zn_state::coh1002e_bank_w));
+ map(0x1f000000, 0x1f7fffff).bankr("rombank");
+ map(0x1fa10300, 0x1fa10300).w(FUNC(raizing_zn_state::bank_w));
map(0x1fb00000, 0x1fb00000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
- map(0x1fb00004, 0x1fb00004).w(FUNC(zn_state::coh1002e_sound_irq_w));
+ map(0x1fb00004, 0x1fb00004).w(FUNC(raizing_zn_state::sound_irq_w));
}
-MACHINE_START_MEMBER(zn_state,coh1002e)
+void raizing_zn_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
- if (m_okibank.found())
- m_okibank->configure_entries( 0, memregion( "oki" )->bytes()/0x10000, memregion( "oki" )->base(), 0x10000 ); /* not verified */
+ zn_state::machine_start();
+ m_rombank->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1002e)
+void raizing_zn_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
- if (m_okibank.found())
- m_okibank->set_entry( 0 );
+ m_rombank->set_entry( 0 );
+}
+
+void beastrzrb_state::machine_start()
+{
+ raizing_zn_state::machine_start();
+ m_okibank->configure_entries( 0, memregion( "oki" )->bytes()/0x10000, memregion( "oki" )->base(), 0x10000 ); /* not verified */
+}
+
+void beastrzrb_state::machine_reset()
+{
+ raizing_zn_state::machine_reset();
+ m_okibank->set_entry( 0 );
}
-void zn_state::psarc_snd_map(address_map &map)
+void raizing_zn_state::psarc_sound_map(address_map &map)
{
map(0x000000, 0x07ffff).rom();
map(0x080000, 0x0fffff).ram();
@@ -1685,52 +1426,50 @@ void zn_state::psarc_snd_map(address_map &map)
map(0x100020, 0xffffff).nopw();
}
-void zn_state::beastrzrb_snd_map(address_map &map)
+void beastrzrb_state::sound_map(address_map &map)
{ // Internal ROM Not dumped
// map(0x0000, 0x0fff).rom();
}
-void zn_state::oki_map(address_map &map)
+void beastrzrb_state::oki_map(address_map &map)
{
map(0x00000, 0x2ffff).rom();
map(0x30000, 0x3ffff).bankr("okibank");
}
-void zn_state::coh1002e(machine_config &config)
+void raizing_zn_state::coh1002e(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1002e_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &raizing_zn_state::main_map);
M68000(config, m_audiocpu, XTAL(12'000'000));
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::psarc_snd_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &raizing_zn_state::psarc_sound_map);
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1002e)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002e)
+ GENERIC_LATCH_8(config, m_soundlatch);
ymf271_device &ymf(YMF271(config, "ymf", XTAL(16'934'400)));
ymf.add_route(0, "lspeaker", 1.0);
ymf.add_route(1, "rspeaker", 1.0);
}
-void zn_state::beastrzrb(machine_config &config)
+void beastrzrb_state::beastrzrb(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config); // TODO: hook up bootleg protection
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1002e_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &beastrzrb_state::main_map);
AT89C4051(config, m_audiocpu, XTAL(12'000'000)); // clock unverified
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::beastrzrb_snd_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &beastrzrb_state::sound_map);
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1002e)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002e)
+ GENERIC_LATCH_8(config, m_soundlatch);
okim6295_device &oki(OKIM6295(config, "oki", 1000000, okim6295_device::PIN7_LOW)); // clock frequency & pin 7 not verified
oki.add_route(ALL_OUTPUTS, "lspeaker", 1.0);
oki.add_route(ALL_OUTPUTS, "rspeaker", 1.0);
- oki.set_addrmap(0, &zn_state::oki_map);
+ oki.set_addrmap(0, &beastrzrb_state::oki_map);
}
@@ -1787,33 +1526,33 @@ MTR-BAM* - DIP42 32MBit maskROMs
*/
-WRITE16_MEMBER(zn_state::bam2_mcu_w)
+WRITE16_MEMBER(bam2_state::mcu_w)
{
switch( offset )
{
case 0:
- m_rombank[0]->set_entry( data & 0xf );
+ m_rombank->set_entry( data & 0xf );
break;
case 1:
- m_bam2_mcu_command = data;
- logerror("MCU command: %04x (PC %08x)\n", m_bam2_mcu_command, m_maincpu->pc());
+ m_mcu_command = data;
+ logerror("BAM2 MCU command: %04x (PC %08x)\n", m_mcu_command, m_maincpu->pc());
break;
}
}
-READ16_MEMBER(zn_state::bam2_mcu_r)
+READ16_MEMBER(bam2_state::mcu_r)
{
switch (offset)
{
case 0:
- logerror("MCU port 0 read @ PC %08x mask %08x\n", m_maincpu->pc(), mem_mask);
+ logerror("BAM2 MCU port 0 read @ PC %08x mask %08x\n", m_maincpu->pc(), mem_mask);
break;
case 2:
- logerror("MCU status read @ PC %08x mask %08x\n", m_maincpu->pc(), mem_mask);
+ logerror("BAM2 MCU status read @ PC %08x mask %08x\n", m_maincpu->pc(), mem_mask);
- switch (m_bam2_mcu_command)
+ switch (m_mcu_command)
{
case 0x7f: // first drive check
case 0x1c: // second drive check (causes HDD detected)
@@ -1826,45 +1565,40 @@ READ16_MEMBER(zn_state::bam2_mcu_r)
return 0;
}
-READ16_MEMBER(zn_state::bam2_unk_r)
+READ16_MEMBER(bam2_state::unk_r)
{
return 0;
}
-void zn_state::bam2_map(address_map &map)
+void bam2_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
map(0x1f000000, 0x1f3fffff).rom().region("bankedroms", 0);
- map(0x1f400000, 0x1f7fffff).bankr("rombank1");
- map(0x1fa20000, 0x1fa20001).r(FUNC(zn_state::bam2_unk_r));
- map(0x1fb00000, 0x1fb00007).rw(FUNC(zn_state::bam2_mcu_r), FUNC(zn_state::bam2_mcu_w));
+ map(0x1f400000, 0x1f7fffff).bankr("rombank");
+ map(0x1fa20000, 0x1fa20001).r(FUNC(bam2_state::unk_r));
+ map(0x1fb00000, 0x1fb00007).rw(FUNC(bam2_state::mcu_r), FUNC(bam2_state::mcu_w));
}
-void zn_state::init_bam2()
+void bam2_state::machine_start()
{
- save_item(NAME(m_bam2_mcu_command));
-}
+ zn_state::machine_start();
+ save_item(NAME(m_mcu_command));
-MACHINE_START_MEMBER(zn_state,bam2)
-{
- m_rombank[0]->configure_entries( 0, 16, m_bankedroms->base(), 0x400000 ); /* banked game ROM */
+ m_rombank->configure_entries( 0, 16, m_bankedroms->base(), 0x400000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,bam2)
+void bam2_state::machine_reset()
{
- m_rombank[0]->set_entry( 1 );
+ m_rombank->set_entry( 1 );
}
-void zn_state::bam2(machine_config &config)
+void bam2_state::bam2(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::bam2_map);
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, bam2)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, bam2)
+ m_maincpu->set_addrmap(AS_PROGRAM, &bam2_state::main_map);
}
/*
@@ -2038,29 +1772,28 @@ Notes:
* - Unpopulated DIP42 socket
*/
-READ_LINE_MEMBER(zn_state::jdredd_gun_mux_r)
+READ_LINE_MEMBER(jdredd_state::gun_mux_r)
{
- return m_jdredd_gun_mux;
+ return m_gun_mux;
}
-WRITE_LINE_MEMBER(zn_state::jdredd_vblank)
+WRITE_LINE_MEMBER(jdredd_state::vblank)
{
- int x;
- int y;
-
if (state)
{
- m_jdredd_gun_mux = !m_jdredd_gun_mux;
+ m_gun_mux = !m_gun_mux;
- if( m_jdredd_gun_mux == 0 )
+ int x;
+ int y;
+ if (!m_gun_mux)
{
- x = ioport("GUN1X")->read();
- y = ioport("GUN1Y")->read();
+ x = m_gun_x[0]->read();
+ y = m_gun_y[0]->read();
}
else
{
- x = ioport("GUN2X")->read();
- y = ioport("GUN2Y")->read();
+ x = m_gun_x[1]->read();
+ y = m_gun_y[1]->read();
}
if( x > 0x393 && x < 0xcb2 &&
@@ -2071,135 +1804,137 @@ WRITE_LINE_MEMBER(zn_state::jdredd_vblank)
}
}
-WRITE16_MEMBER(zn_state::acpsx_00_w)
+WRITE16_MEMBER(acclaim_zn_state::acpsx_00_w)
{
verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
}
-WRITE16_MEMBER(zn_state::nbajamex_bank_w)
+WRITE16_MEMBER(nbajamex_state::bank_w)
{
- verboselog(0, "nbajamex_bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
+ verboselog(0, "bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
if (offset > 1)
{
logerror("Unknown banking offset %x!\n", offset);
}
- m_nbajamex_rombank[offset] = data;
+ m_curr_rombank[offset] = data;
- uint32_t bankbase0 = ((m_nbajamex_rombank[0] & 0x10) ? 1 : 0) | ((m_nbajamex_rombank[0] & 7) << 1);
- uint32_t bankbase1 = ((m_nbajamex_rombank[1] & 0x10) ? 0 : 1) | ((m_nbajamex_rombank[1] & 7) << 1);
+ uint32_t bankbase0 = ((m_curr_rombank[0] & 0x10) ? 1 : 0) | ((m_curr_rombank[0] & 7) << 1);
+ uint32_t bankbase1 = ((m_curr_rombank[1] & 0x10) ? 0 : 1) | ((m_curr_rombank[1] & 7) << 1);
if (offset == 0)
{
- if (m_nbajamex_rombank[0] == 0)
+ if (m_curr_rombank[0] == 0)
{
- m_nbajamex_bankmap->set_bank(0);
+ m_bankmap->set_bank(0);
}
else
{
- m_nbajamex_bankmap->set_bank(1);
+ m_bankmap->set_bank(1);
m_rombank[1]->set_entry(bankbase1);
}
m_rombank[0]->set_entry(bankbase0);
}
else if (offset == 1)
{
- if (m_nbajamex_rombank[0] != 0)
+ if (m_curr_rombank[0] != 0)
{
- m_nbajamex_bankmap->set_bank(1);
+ m_bankmap->set_bank(1);
m_rombank[1]->set_entry(bankbase1);
}
}
}
-WRITE16_MEMBER(zn_state::acpsx_10_w)
+WRITE16_MEMBER(acclaim_zn_state::acpsx_10_w)
{
verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
}
// all 16 bits goes to the external soundboard's latch (see sound test menu)
-WRITE16_MEMBER(zn_state::nbajamex_80_w)
+WRITE16_MEMBER(nbajamex_state::sound_80_w)
{
m_rax->data_w(space, 0, data, 0xffff);
}
-READ16_MEMBER(zn_state::nbajamex_08_r)
+READ16_MEMBER(nbajamex_state::sound_08_r)
{
// Sound related
verboselog(0, "nbajamex_08_r( %08x, %08x, %08x )\n", offset, 0, mem_mask );
return 0x400;
}
-READ16_MEMBER(zn_state::nbajamex_80_r)
+READ16_MEMBER(nbajamex_state::sound_80_r)
{
verboselog(0, "nbajamex_80_r( %08x, %08x, %08x )\n", offset, 0, mem_mask );
return 0xffff;
}
-WRITE8_MEMBER(zn_state::nbajamex_backup_w)
+WRITE8_MEMBER(nbajamex_state::backup_w)
{
- m_nbajamex_sram[offset] = data;
+ m_sram[offset] = data;
}
-void zn_state::coh1000a_map(address_map &map)
+void acclaim_zn_state::coh1000a_map(address_map &map)
{
- zn_map(map);
- map(0x1fbfff00, 0x1fbfff03).w(FUNC(zn_state::acpsx_00_w));
- map(0x1fbfff12, 0x1fbfff13).w(FUNC(zn_state::acpsx_10_w));
+ zn_base_map(map);
+ map(0x1fbfff00, 0x1fbfff03).w(FUNC(acclaim_zn_state::acpsx_00_w));
+ map(0x1fbfff12, 0x1fbfff13).w(FUNC(acclaim_zn_state::acpsx_10_w));
}
-void zn_state::nbajamex_map(address_map &map)
+void nbajamex_state::main_map(address_map &map)
{
coh1000a_map(map);
- map(0x1f000000, 0x1f7fffff).m(m_nbajamex_bankmap, FUNC(address_map_bank_device::amap32));
- map(0x1fbfff00, 0x1fbfff07).w(FUNC(zn_state::nbajamex_bank_w));
- map(0x1fbfff08, 0x1fbfff09).r(FUNC(zn_state::nbajamex_08_r));
- map(0x1fbfff80, 0x1fbfff81).rw(FUNC(zn_state::nbajamex_80_r), FUNC(zn_state::nbajamex_80_w));
+ map(0x1f000000, 0x1f7fffff).m(m_bankmap, FUNC(address_map_bank_device::amap32));
+ map(0x1fbfff00, 0x1fbfff07).w(FUNC(nbajamex_state::bank_w));
+ map(0x1fbfff08, 0x1fbfff09).r(FUNC(nbajamex_state::sound_08_r));
+ map(0x1fbfff80, 0x1fbfff81).rw(FUNC(nbajamex_state::sound_80_r), FUNC(nbajamex_state::sound_80_w));
}
-void zn_state::nbajamex_bank_map(address_map &map)
+void nbajamex_state::bank_map(address_map &map)
{
map(0x000000, 0x1fffff).mirror(0x800000).bankr("rombank1");
- map(0x200000, 0x207fff).mirror(0x800000).w(FUNC(zn_state::nbajamex_backup_w));
+ map(0x200000, 0x207fff).mirror(0x800000).w(FUNC(nbajamex_state::backup_w));
map(0x200000, 0x207fff).bankr("sram");
map(0xa00000, 0xffffff).bankr("rombank2");
}
-void zn_state::init_nbajamex()
+void nbajamex_state::driver_init()
{
- m_nbajamex_sram = std::make_unique<uint8_t[]>(0x8000);
- subdevice<nvram_device>("71256")->set_base(m_nbajamex_sram.get(), 0x8000);
+ m_sram = std::make_unique<uint8_t[]>(0x8000);
+ subdevice<nvram_device>("71256")->set_base(m_sram.get(), 0x8000);
- save_pointer(NAME(m_nbajamex_sram), 0x8000);
+ save_pointer(NAME(m_sram), 0x8000);
- save_item(NAME(m_nbajamex_rombank));
+ save_item(NAME(m_curr_rombank));
}
-MACHINE_START_MEMBER(zn_state,nbajamex)
+void nbajamex_state::machine_start()
{
+ zn_state::machine_start();
for (int bank = 0; bank < 2; bank++)
m_rombank[bank]->configure_entries( 0, 16, m_bankedroms->base(), 0x200000 );
- membank( "sram" )->set_base( m_nbajamex_sram.get() );
+ membank( "sram" )->set_base( m_sram.get() );
}
-MACHINE_RESET_MEMBER(zn_state,nbajamex)
+void nbajamex_state::machine_reset()
{
- m_nbajamex_bankmap->set_bank( 0 );
+ m_bankmap->set_bank( 0 );
m_rombank[0]->set_entry( 0 );
m_rombank[1]->set_entry( 0 );
}
-void zn_state::init_jdredd()
+void jdredd_state::machine_start()
{
- save_item(NAME(m_jdredd_gun_mux));
+ zn_state::machine_start();
+ save_item(NAME(m_gun_mux));
}
-void zn_state::jdredd_map(address_map &map)
+void jdredd_state::main_map(address_map &map)
{
coh1000a_map(map);
@@ -2208,37 +1943,34 @@ void zn_state::jdredd_map(address_map &map)
map(0x1fbfff90, 0x1fbfff9f).rw("ata", FUNC(ata_interface_device::cs0_r), FUNC(ata_interface_device::cs0_w));
}
-void zn_state::coh1000a(machine_config &config)
+void acclaim_zn_state::coh1000a(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1000a_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &acclaim_zn_state::coh1000a_map);
}
-void zn_state::nbajamex(machine_config &config)
+void nbajamex_state::nbajamex(machine_config &config)
{
coh1000a(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::nbajamex_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nbajamex_state::main_map);
NVRAM(config, "71256", nvram_device::DEFAULT_ALL_1);
- MCFG_MACHINE_START_OVERRIDE(zn_state, nbajamex)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, nbajamex)
+ ADDRESS_MAP_BANK(config, "nbajamex_bankmap").set_map(&nbajamex_state::bank_map).set_options(ENDIANNESS_LITTLE, 32, 24, 0x800000);
- ADDRESS_MAP_BANK(config, "nbajamex_bankmap").set_map(&zn_state::nbajamex_bank_map).set_options(ENDIANNESS_LITTLE, 32, 24, 0x800000);
-
- ACCLAIM_RAX(config, "rax", 0);
+ ACCLAIM_RAX(config, m_rax, 0);
}
-void zn_state::jdredd(machine_config &config)
+void jdredd_state::jdredd(machine_config &config)
{
coh1000a(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::jdredd_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &jdredd_state::main_map);
- m_gpu_screen->screen_vblank().set(FUNC(zn_state::jdredd_vblank));
+ m_gpu_screen->screen_vblank().set(FUNC(jdredd_state::vblank));
ata_interface_device &ata(ATA_INTERFACE(config, "ata").options(ata_devices, "hdd", nullptr, true));
ata.irq_handler().set("maincpu:irq", FUNC(psxirq_device::intin10));
@@ -2361,57 +2093,54 @@ Notes:
VSync - 60Hz
*/
-WRITE16_MEMBER(zn_state::coh1001l_sound_unk_w)
+WRITE16_MEMBER(atlus_zn_state::sound_unk_w)
{
// irq ack maybe?
logerror("coh1001l_sound_unk_w: %04x %04x\n", data, mem_mask);
}
-WRITE8_MEMBER(zn_state::coh1001l_bank_w)
+WRITE8_MEMBER(atlus_zn_state::bank_w)
{
- m_rombank[0]->set_entry( data & 3 );
+ m_rombank->set_entry( data & 3 );
}
-void zn_state::coh1001l_map(address_map &map)
+void atlus_zn_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
- map(0x1f000000, 0x1f7fffff).bankr("rombank1");
+ map(0x1f000000, 0x1f7fffff).bankr("rombank");
map(0x1fb00000, 0x1fb00001).w(m_soundlatch16, FUNC(generic_latch_16_device::write));
- map(0x1fb00002, 0x1fb00002).w(FUNC(zn_state::coh1001l_bank_w));
+ map(0x1fb00002, 0x1fb00002).w(FUNC(atlus_zn_state::bank_w));
}
-MACHINE_START_MEMBER(zn_state,coh1001l)
+void atlus_zn_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
+ zn_state::machine_start();
+ m_rombank->configure_entries( 0, 4, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1001l)
+void atlus_zn_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
+ m_rombank->set_entry( 0 );
}
-void zn_state::atlus_snd_map(address_map &map)
+void atlus_zn_state::sound_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
- map(0x100000, 0x100001).r(m_soundlatch16, FUNC(generic_latch_16_device::read)).w(FUNC(zn_state::coh1001l_sound_unk_w));
+ map(0x100000, 0x100001).r(m_soundlatch16, FUNC(generic_latch_16_device::read)).w(FUNC(atlus_zn_state::sound_unk_w));
map(0x200000, 0x200003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0x00ff);
map(0x700000, 0x70ffff).ram();
}
-
-void zn_state::coh1001l(machine_config &config)
+void atlus_zn_state::coh1001l(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1001l_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &atlus_zn_state::main_map);
M68000(config, m_audiocpu, XTAL(10'000'000));
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::atlus_snd_map);
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1001l)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1001l)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &atlus_zn_state::sound_map);
GENERIC_LATCH_16(config, m_soundlatch16);
m_soundlatch16->data_pending_callback().set_inputline(m_audiocpu, 3);
@@ -2435,38 +2164,36 @@ Key: Mother KN01
*/
-WRITE8_MEMBER(zn_state::coh1002v_bank_w)
+WRITE8_MEMBER(visco_zn_state::bank_w)
{
- m_rombank[0]->set_entry( data );
+ m_rombank->set_entry( data );
}
-void zn_state::coh1002v_map(address_map &map)
+void visco_zn_state::main_map(address_map &map)
{
- zn_map(map);
+ zn_base_map(map);
map(0x1f000000, 0x1f27ffff).rom().region("fixedroms", 0);
- map(0x1fb00000, 0x1fbfffff).bankr("rombank1");
- map(0x1fb00000, 0x1fb00000).w(FUNC(zn_state::coh1002v_bank_w));
+ map(0x1fb00000, 0x1fbfffff).bankr("rombank");
+ map(0x1fb00000, 0x1fb00000).w(FUNC(visco_zn_state::bank_w));
}
-MACHINE_START_MEMBER(zn_state,coh1002v)
+void visco_zn_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 24, m_bankedroms->base(), 0x100000 ); /* banked game ROM */
+ zn_state::machine_start();
+ m_rombank->configure_entries( 0, 24, m_bankedroms->base(), 0x100000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1002v)
+void visco_zn_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
+ m_rombank->set_entry( 0 );
}
-void zn_state::coh1002v(machine_config &config)
+void visco_zn_state::coh1002v(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1002v_map);
-
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1002v)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002v)
+ m_maincpu->set_addrmap(AS_PROGRAM, &visco_zn_state::main_map);
}
/*
@@ -2627,99 +2354,105 @@ Notes:
for 11 more 32MBit smt SOP44 mask ROMs.
*/
-WRITE8_MEMBER(zn_state::coh1002m_bank_w)
+WRITE8_MEMBER(tecmo_zn_state::bank_w)
{
- verboselog(1, "coh1002m_bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
- m_rombank[0]->set_entry( data );
+ verboselog(1, "bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask );
+ m_rombank->set_entry( data );
}
-void zn_state::coh1002m_map(address_map &map)
+void tecmo_zn_state::base_map(address_map &map)
{
- zn_map(map);
- map(0x1f000000, 0x1f7fffff).bankr("rombank1");
- map(0x1fb00006, 0x1fb00006).w(FUNC(zn_state::coh1002m_bank_w));
+ zn_base_map(map);
+ map(0x1f000000, 0x1f7fffff).bankr("rombank");
+ map(0x1fb00006, 0x1fb00006).w(FUNC(tecmo_zn_state::bank_w));
}
-MACHINE_START_MEMBER(zn_state,coh1002m)
+void tecmo_zn_state::machine_start()
{
- m_rombank[0]->configure_entries( 0, 8, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
+ zn_state::machine_start();
+ m_rombank->configure_entries( 0, 8, m_bankedroms->base(), 0x800000 ); /* banked game ROM */
}
-MACHINE_RESET_MEMBER(zn_state,coh1002m)
+void tecmo_zn_state::machine_reset()
{
- m_rombank[0]->set_entry( 0 );
+ m_rombank->set_entry( 0 );
}
-void zn_state::coh1002m(machine_config &config)
+void tecmo_zn_state::coh1002m(machine_config &config)
{
- zn1_2mb_vram(config);
+ zn_2mb_vram(config);
gameboard_cat702(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1002m_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tecmo_zn_state::base_map);
+}
- MCFG_MACHINE_START_OVERRIDE(zn_state, coh1002m)
- MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1002m)
+void tecmo_zn_state::link_map(address_map &map)
+{
+ map(0x0000, 0x7fff).rom();
+ map(0x8000, 0xffff).ram();
}
-READ8_MEMBER(zn_state::cbaj_sound_main_status_r)
+void tecmo_zn_state::link_port_map(address_map &map)
{
- // d1: fifo empty flag, other bits: unused(?)
- return m_cbaj_fifo[1]->ef_r() << 1;
+ map.global_mask(0xff);
}
-void zn_state::coh1002msnd_map(address_map &map)
+void tecmo_zn_state::coh1002ml(machine_config &config)
{
- coh1002m_map(map);
- map(0x1fb00000, 0x1fb00000).r("cbaj_fifo2", FUNC(fifo7200_device::data_byte_r));
- map(0x1fb00000, 0x1fb00000).w("cbaj_fifo1", FUNC(fifo7200_device::data_byte_w));
- map(0x1fb00003, 0x1fb00003).r(FUNC(zn_state::cbaj_sound_main_status_r));
+ coh1002m(config);
+ z80_device &link(Z80(config, "link", 4000000)); // ?
+ link.set_addrmap(AS_PROGRAM, &tecmo_zn_state::link_map);
+ link.set_addrmap(AS_IO, &tecmo_zn_state::link_port_map);
}
-READ8_MEMBER(zn_state::cbaj_sound_z80_status_r)
+READ8_MEMBER(cbaj_state::sound_main_status_r)
{
- // d1: fifo empty flag, other bits: unused
- return m_cbaj_fifo[0]->ef_r() << 1;
+ // d1: fifo empty flag, other bits: unused(?)
+ return m_fifo[1]->ef_r() << 1;
}
-void zn_state::cbaj_z80_map(address_map &map)
+void cbaj_state::main_map(address_map &map)
{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0xffff).ram();
+ base_map(map);
+ map(0x1fb00000, 0x1fb00000).r(m_fifo[1], FUNC(fifo7200_device::data_byte_r));
+ map(0x1fb00000, 0x1fb00000).w(m_fifo[0], FUNC(fifo7200_device::data_byte_w));
+ map(0x1fb00003, 0x1fb00003).r(FUNC(cbaj_state::sound_main_status_r));
}
-void zn_state::cbaj_z80_port_map(address_map &map)
+READ8_MEMBER(cbaj_state::sound_z80_status_r)
{
- map.global_mask(0xff);
- map(0x84, 0x85).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
- map(0x90, 0x90).r("cbaj_fifo1", FUNC(fifo7200_device::data_byte_r));
- map(0x90, 0x90).w("cbaj_fifo2", FUNC(fifo7200_device::data_byte_w));
- map(0x91, 0x91).r(FUNC(zn_state::cbaj_sound_z80_status_r));
+ // d1: fifo empty flag, other bits: unused
+ return m_fifo[0]->ef_r() << 1;
}
-void zn_state::coh1002ml_link_map(address_map &map)
+void cbaj_state::z80_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0xffff).ram();
}
-void zn_state::coh1002ml_link_port_map(address_map &map)
+void cbaj_state::z80_port_map(address_map &map)
{
map.global_mask(0xff);
+ map(0x84, 0x85).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write));
+ map(0x90, 0x90).r(m_fifo[0], FUNC(fifo7200_device::data_byte_r));
+ map(0x90, 0x90).w(m_fifo[1], FUNC(fifo7200_device::data_byte_w));
+ map(0x91, 0x91).r(FUNC(cbaj_state::sound_z80_status_r));
}
-void zn_state::coh1002msnd(machine_config &config)
+void cbaj_state::cbaj(machine_config &config)
{
coh1002m(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::coh1002msnd_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cbaj_state::main_map);
Z80(config, m_audiocpu, XTAL(32'000'000)/8);
- m_audiocpu->set_addrmap(AS_PROGRAM, &zn_state::cbaj_z80_map);
- m_audiocpu->set_addrmap(AS_IO, &zn_state::cbaj_z80_port_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &cbaj_state::z80_map);
+ m_audiocpu->set_addrmap(AS_IO, &cbaj_state::z80_port_map);
- IDT7202(config, m_cbaj_fifo[0]); // LH540202
- IDT7202(config, m_cbaj_fifo[1]); // "
+ IDT7202(config, m_fifo[0]); // LH540202
+ IDT7202(config, m_fifo[1]); // "
config.set_maximum_quantum(attotime::from_hz(6000));
@@ -2729,14 +2462,6 @@ void zn_state::coh1002msnd(machine_config &config)
ymz.add_route(1, "rspeaker", 0.35);
}
-void zn_state::coh1002ml(machine_config &config)
-{
- coh1002m(config);
- z80_device &link(Z80(config, "link", 4000000)); // ?
- link.set_addrmap(AS_PROGRAM, &zn_state::coh1002ml_link_map);
- link.set_addrmap(AS_IO, &zn_state::coh1002ml_link_port_map);
-}
-
/*
@@ -2893,7 +2618,7 @@ static INPUT_PORTS_START( jdredd )
PORT_BIT( 0x6f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("SERVICE")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(zn_state, jdredd_gun_mux_r)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(jdredd_state, gun_mux_r)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
@@ -5465,135 +5190,135 @@ ROM_START( hvnsgate )
ROM_END
/* Capcom ZN1 */
-GAME( 1995, coh1000c, 0, coh1000c, zn, zn_state, empty_init, ROT0, "Capcom", "ZN1", MACHINE_IS_BIOS_ROOT )
-GAME( 1995, ts2, coh1000c, coh1000c, zn6b, zn_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (USA 951124)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, ts2a, ts2, coh1000c, zn6b, zn_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (USA 951124) Older", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, ts2j, ts2, coh1000c, zn6b, zn_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (Japan 951124)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, starglad, coh1000c, coh1000c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Star Gladiator Episode I: Final Crusade (USA 960627)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, stargladj, starglad, coh1000c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Star Gladiator Episode I: Final Crusade (Japan 960627)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, glpracr, coh1000c, glpracr, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer (English Ver 10.17.K)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, glpracrj, glpracr, glpracr, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer (Japanese Ver 9.01.12)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, sfex, coh1000c, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Euro 961219)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, sfexu, sfex, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (USA 961219)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, sfexa, sfex, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Asia 961219)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, sfexj, sfex, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Japan 961130)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, sfexp, coh1000c, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (USA 970407)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, sfexpu1, sfexp, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (USA 970311)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, sfexpj, sfexp, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (Japan 970407)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, sfexpj1, sfexp, coh1002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (Japan 970311)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, coh1000c, 0, coh1000c, zn, zn1_state, empty_init, ROT0, "Capcom", "ZN1", MACHINE_IS_BIOS_ROOT )
+GAME( 1995, ts2, coh1000c, coh1000c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (USA 951124)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, ts2a, ts2, coh1000c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (USA 951124) Older", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, ts2j, ts2, coh1000c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Takara", "Battle Arena Toshinden 2 (Japan 951124)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, starglad, coh1000c, coh1000c, zn6b, zn1_state, empty_init, ROT0, "Capcom", "Star Gladiator Episode I: Final Crusade (USA 960627)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, stargladj, starglad, coh1000c, zn6b, zn1_state, empty_init, ROT0, "Capcom", "Star Gladiator Episode I: Final Crusade (Japan 960627)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, glpracr, coh1000c, coh1000c, zn, glpracr_state, empty_init, ROT0, "Tecmo", "Gallop Racer (English Ver 10.17.K)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, glpracrj, glpracr, coh1000c, zn, glpracr_state, empty_init, ROT0, "Tecmo", "Gallop Racer (Japanese Ver 9.01.12)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, sfex, coh1000c, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Euro 961219)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, sfexu, sfex, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (USA 961219)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, sfexa, sfex, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Asia 961219)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, sfexj, sfex, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX (Japan 961130)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, sfexp, coh1000c, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (USA 970407)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, sfexpu1, sfexp, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (USA 970311)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, sfexpj, sfexp, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (Japan 970407)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, sfexpj1, sfexp, coh1002c, zn6b, zn1_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX Plus (Japan 970311)", MACHINE_IMPERFECT_SOUND )
/* Capcom ZN2 */
-GAME( 1997, coh3002c, 0, coh3002c, zn, zn_state, empty_init, ROT0, "Capcom", "ZN2", MACHINE_IS_BIOS_ROOT )
-GAME( 1997, rvschool, coh3002c, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (Euro 971117)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, rvschoolu, rvschool, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (USA 971117)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, rvschoola, rvschool, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (Asia 971117)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, jgakuen, rvschool, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971216)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, jgakuen1, rvschool, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2, coh3002c, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Euro 980312)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2u, sfex2, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (USA 980526)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2u1, sfex2, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (USA 980312)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2a, sfex2, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Asia 980312)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2h, sfex2, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Hispanic 980312)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, sfex2j, sfex2, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Japan 980312)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, plsmaswd, coh3002c, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Plasma Sword: Nightmare of Bilstein (USA 980316)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, plsmaswda, plsmaswd, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Plasma Sword: Nightmare of Bilstein (Asia 980316)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, stargld2, plsmaswd, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Star Gladiator 2: Nightmare of Bilstein (Japan 980316)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, tgmj, coh3002c, coh3002c, zn4w, zn_state, empty_init, ROT0, "Arika / Capcom", "Tetris The Grand Master (Japan 980710)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, techromn, coh3002c, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Tech Romancer (Euro 980914)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, techromnu, techromn, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Tech Romancer (USA 980914)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, kikaioh, techromn, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom", "Choukou Senki Kikaioh (Japan 980914)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, sfex2p, coh3002c, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Euro 990611)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, sfex2pu, sfex2p, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (USA 990611)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, sfex2pa, sfex2p, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Asia 990611)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, sfex2ph, sfex2p, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Hispanic 990611)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, sfex2pj, sfex2p, coh3002c, zn6b, zn_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Japan 990611)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, strider2, coh3002c, coh3002c, zn, zn_state, empty_init, ROT0, "Capcom", "Strider 2 (Euro 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // random hangs / crashes
-GAME( 1999, strider2u, strider2, coh3002c, zn, zn_state, empty_init, ROT0, "Capcom", "Strider 2 (USA 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
-GAME( 1999, strider2a, strider2, coh3002c, zn, zn_state, empty_init, ROT0, "Capcom", "Strider 2 (Asia 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
-GAME( 1999, shiryu2, strider2, coh3002c, zn, zn_state, empty_init, ROT0, "Capcom", "Strider Hiryu 2 (Japan 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1997, coh3002c, 0, coh3002c, zn, zn2_state, empty_init, ROT0, "Capcom", "ZN2", MACHINE_IS_BIOS_ROOT )
+GAME( 1997, rvschool, coh3002c, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (Euro 971117)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, rvschoolu, rvschool, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (USA 971117)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, rvschoola, rvschool, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Rival Schools: United By Fate (Asia 971117)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, jgakuen, rvschool, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971216)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, jgakuen1, rvschool, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2, coh3002c, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Euro 980312)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2u, sfex2, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (USA 980526)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2u1, sfex2, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (USA 980312)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2a, sfex2, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Asia 980312)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2h, sfex2, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Hispanic 980312)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, sfex2j, sfex2, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 (Japan 980312)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, plsmaswd, coh3002c, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Plasma Sword: Nightmare of Bilstein (USA 980316)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, plsmaswda, plsmaswd, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Plasma Sword: Nightmare of Bilstein (Asia 980316)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, stargld2, plsmaswd, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Star Gladiator 2: Nightmare of Bilstein (Japan 980316)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, tgmj, coh3002c, coh3002c, zn4w, zn2_state, empty_init, ROT0, "Arika / Capcom", "Tetris The Grand Master (Japan 980710)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, techromn, coh3002c, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Tech Romancer (Euro 980914)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, techromnu, techromn, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Tech Romancer (USA 980914)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, kikaioh, techromn, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom", "Choukou Senki Kikaioh (Japan 980914)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, sfex2p, coh3002c, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Euro 990611)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, sfex2pu, sfex2p, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (USA 990611)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, sfex2pa, sfex2p, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Asia 990611)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, sfex2ph, sfex2p, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Hispanic 990611)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, sfex2pj, sfex2p, coh3002c, zn6b, zn2_state, empty_init, ROT0, "Capcom / Arika", "Street Fighter EX2 Plus (Japan 990611)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, strider2, coh3002c, coh3002c, zn, zn2_state, empty_init, ROT0, "Capcom", "Strider 2 (Euro 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // random hangs / crashes
+GAME( 1999, strider2u, strider2, coh3002c, zn, zn2_state, empty_init, ROT0, "Capcom", "Strider 2 (USA 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1999, strider2a, strider2, coh3002c, zn, zn2_state, empty_init, ROT0, "Capcom", "Strider 2 (Asia 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1999, shiryu2, strider2, coh3002c, zn, zn2_state, empty_init, ROT0, "Capcom", "Strider Hiryu 2 (Japan 991213)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
/* Atari */
-GAME( 1996, coh1000w, 0, coh1000w, zn, zn_state, empty_init, ROT0, "Atari", "Atari PSX", MACHINE_IS_BIOS_ROOT )
-GAME( 1996, primrag2, coh1000w, coh1000w, primrag2, zn_state, init_primrag2, ROT0, "Atari", "Primal Rage 2 (Ver 0.36a)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // watchdog reset at startup
+GAME( 1996, coh1000w, 0, coh1000w, zn, primrag2_state, empty_init, ROT0, "Atari", "Atari PSX", MACHINE_IS_BIOS_ROOT )
+GAME( 1996, primrag2, coh1000w, coh1000w, primrag2, primrag2_state, empty_init, ROT0, "Atari", "Primal Rage 2 (Ver 0.36a)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // watchdog reset at startup
/* Acclaim */
-GAME( 1995, coh1000a, 0, coh1000a, zn, zn_state, empty_init, ROT0, "Acclaim", "Acclaim PSX", MACHINE_IS_BIOS_ROOT )
-GAME( 1996, nbajamex, coh1000a, nbajamex, nbajamex, zn_state, init_nbajamex, ROT0, "Acclaim", "NBA Jam Extreme (ver. 1.10I)", 0 )
-GAME( 1996, nbajamexa, nbajamex, nbajamex, nbajamex, zn_state, init_nbajamex, ROT0, "Acclaim", "NBA Jam Extreme (ver. 1.04)", 0 )
-GAME( 1996, jdredd, coh1000a, jdredd, jdredd, zn_state, init_jdredd, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, jdreddb, jdredd, jdredd, jdredd, zn_state, init_jdredd, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, coh1000a, 0, coh1000a, zn, acclaim_zn_state, empty_init, ROT0, "Acclaim", "Acclaim PSX", MACHINE_IS_BIOS_ROOT )
+GAME( 1996, nbajamex, coh1000a, nbajamex, nbajamex, nbajamex_state, empty_init, ROT0, "Acclaim", "NBA Jam Extreme (ver. 1.10I)", 0 )
+GAME( 1996, nbajamexa, nbajamex, nbajamex, nbajamex, nbajamex_state, empty_init, ROT0, "Acclaim", "NBA Jam Extreme (ver. 1.04)", 0 )
+GAME( 1996, jdredd, coh1000a, jdredd, jdredd, jdredd_state, empty_init, ROT0, "Acclaim", "Judge Dredd (Rev C Dec. 17 1997)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, jdreddb, jdredd, jdredd, jdredd, jdredd_state, empty_init, ROT0, "Acclaim", "Judge Dredd (Rev B Nov. 26 1997)", MACHINE_IMPERFECT_SOUND )
/* Tecmo */
-GAME( 1997, coh1002m, 0, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "TPS", MACHINE_IS_BIOS_ROOT )
-GAME( 1997, glpracr2, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 (Export)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, glpracr2j, glpracr2, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, glpracr2l, glpracr2, coh1002ml, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 Link HW (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, doapp, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Dead Or Alive ++ (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, cbaj, coh1002m, coh1002msnd, zn, zn_state, empty_init, ROT0, "UEP Systems", "Cool Boarders Arcade Jam", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, shngmtkb, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Sunsoft / Activision", "Shanghai Matekibuyuu", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, tondemo, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Tondemo Crisis (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, glpracr3, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 3 (Export)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, glpracr3j, glpracr3, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 3 (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, flamegun, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Gaps Inc.", "Flame Gunner", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, flamegunj, flamegun, coh1002m, zn, zn_state, empty_init, ROT0, "Gaps Inc.", "Flame Gunner (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1999, lpadv, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Amuse World", "Logic Pro Adventure (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, tblkkuzu, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tamsoft / D3 Publisher", "The Block Kuzushi (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, 1on1gov, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "1 on 1 Government (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, twcupmil, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Tecmo World Cup Millennium (Japan)", MACHINE_IMPERFECT_SOUND )
-GAME( 2001, mfjump, coh1002m, coh1002m, zn, zn_state, empty_init, ROT0, "Tecmo", "Monster Farm Jump (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, coh1002m, 0, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "TPS", MACHINE_IS_BIOS_ROOT )
+GAME( 1997, glpracr2, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 (Export)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, glpracr2j, glpracr2, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, glpracr2l, glpracr2, coh1002ml, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 2 Link HW (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, doapp, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Dead Or Alive ++ (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, cbaj, coh1002m, cbaj, zn, cbaj_state, empty_init, ROT0, "UEP Systems", "Cool Boarders Arcade Jam", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, shngmtkb, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Sunsoft / Activision", "Shanghai Matekibuyuu", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, tondemo, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Tondemo Crisis (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, glpracr3, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 3 (Export)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, glpracr3j, glpracr3, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Gallop Racer 3 (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, flamegun, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Gaps Inc.", "Flame Gunner", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, flamegunj, flamegun, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Gaps Inc.", "Flame Gunner (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1999, lpadv, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Amuse World", "Logic Pro Adventure (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, tblkkuzu, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tamsoft / D3 Publisher", "The Block Kuzushi (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, 1on1gov, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "1 on 1 Government (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, twcupmil, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Tecmo World Cup Millennium (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 2001, mfjump, coh1002m, coh1002m, zn, tecmo_zn_state, empty_init, ROT0, "Tecmo", "Monster Farm Jump (Japan)", MACHINE_IMPERFECT_SOUND )
/* Video System */
-GAME( 1996, coh1002v, 0, coh1002v, zn, zn_state, empty_init, ROT0, "Video System Co.", "Video System PSX", MACHINE_IS_BIOS_ROOT )
-GAME( 1996, aerofgts, coh1002v, coh1002v, aerofgts, zn_state, empty_init, ROT270, "Video System Co.", "Aero Fighters Special (Taiwan)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, sncwgltd, aerofgts, coh1002v, aerofgts, zn_state, empty_init, ROT270, "Video System Co.", "Sonic Wings Limited (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, coh1002v, 0, coh1002v, zn, visco_zn_state, empty_init, ROT0, "Video System Co.", "Video System PSX", MACHINE_IS_BIOS_ROOT )
+GAME( 1996, aerofgts, coh1002v, coh1002v, aerofgts, visco_zn_state, empty_init, ROT270, "Video System Co.", "Aero Fighters Special (Taiwan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, sncwgltd, aerofgts, coh1002v, aerofgts, visco_zn_state, empty_init, ROT270, "Video System Co.", "Sonic Wings Limited (Japan)", MACHINE_IMPERFECT_SOUND )
/* Taito FX-1A */
-GAME( 1995, coh1000t, 0, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Taito FX1", MACHINE_IS_BIOS_ROOT )
-GAME( 1995, sfchamp, coh1000t, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.5O)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, sfchampo, sfchamp, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4O)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, sfchampu, sfchamp, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4A)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, sfchampj, sfchamp, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, psyforce, coh1000t, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4O)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, psyforcej, psyforce, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1995, psyforcex, psyforce, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Psychic Force EX (Ver 2.0J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, mgcldate, mgcldtex, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, mgcldtex, coh1000t, coh1000ta, znt, zn_state, empty_init, ROT0, "Taito", "Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, coh1000t, 0, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Taito FX1", MACHINE_IS_BIOS_ROOT )
+GAME( 1995, sfchamp, coh1000t, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.5O)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, sfchampo, sfchamp, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4O)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, sfchampu, sfchamp, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4A)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, sfchampj, sfchamp, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Super Football Champ (Ver 2.4J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, psyforce, coh1000t, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4O)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, psyforcej, psyforce, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Psychic Force (Ver 2.4J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1995, psyforcex, psyforce, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Psychic Force EX (Ver 2.0J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, mgcldate, mgcldtex, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, mgcldtex, coh1000t, coh1000ta, znt, taito_fx1a_state, empty_init, ROT0, "Taito", "Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J)", MACHINE_IMPERFECT_SOUND )
/* Taito FX-1B */
-GAME( 1996, raystorm, coh1000t, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Ray Storm (Ver 2.06A)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, raystormo, raystorm, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Ray Storm (Ver 2.05O)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, raystormu, raystorm, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Ray Storm (Ver 2.05A)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, raystormj, raystorm, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Ray Storm (Ver 2.05J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, ftimpact, ftimpcta, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Fighters' Impact (Ver 2.02O)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, ftimpactu, ftimpcta, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Fighters' Impact (Ver 2.02A)", MACHINE_IMPERFECT_SOUND )
-GAME( 1996, ftimpactj, ftimpcta, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Fighters' Impact (Ver 2.02J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, ftimpcta, coh1000t, coh1000tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "Fighters' Impact A (Ver 2.00J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, gdarius, gdarius2, coh1002tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "G-Darius (Ver 2.01J)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, gdariusb, gdarius2, coh1002tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "G-Darius (Ver 2.02A)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, gdarius2, coh1000t, coh1002tb, znt, zn_state, init_coh1000tb, ROT0, "Taito", "G-Darius Ver.2 (Ver 2.03J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, raystorm, coh1000t, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Ray Storm (Ver 2.06A)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, raystormo, raystorm, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Ray Storm (Ver 2.05O)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, raystormu, raystorm, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Ray Storm (Ver 2.05A)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, raystormj, raystorm, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Ray Storm (Ver 2.05J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, ftimpact, ftimpcta, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Fighters' Impact (Ver 2.02O)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, ftimpactu, ftimpcta, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Fighters' Impact (Ver 2.02A)", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, ftimpactj, ftimpcta, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Fighters' Impact (Ver 2.02J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, ftimpcta, coh1000t, coh1000tb, znt, taito_fx1b_state, empty_init, ROT0, "Taito", "Fighters' Impact A (Ver 2.00J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, gdarius, gdarius2, coh1002tb, znt, gdarius_state, empty_init, ROT0, "Taito", "G-Darius (Ver 2.01J)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, gdariusb, gdarius2, coh1002tb, znt, gdarius_state, empty_init, ROT0, "Taito", "G-Darius (Ver 2.02A)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, gdarius2, coh1000t, coh1002tb, znt, gdarius_state, empty_init, ROT0, "Taito", "G-Darius Ver.2 (Ver 2.03J)", MACHINE_IMPERFECT_SOUND )
/* Eighting / Raizing */
-GAME( 1997, coh1002e, 0, coh1002e, znt, zn_state, empty_init, ROT0, "Eighting / Raizing", "PS Arcade 95", MACHINE_IS_BIOS_ROOT )
-GAME( 1997, beastrzr, coh1002e, coh1002e, znt, zn_state, empty_init, ROT0, "Eighting / Raizing", "Beastorizer (USA, Sep 22 1997)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, beastrzra, beastrzr, coh1002e, znt, zn_state, empty_init, ROT0, "Eighting / Raizing", "Beastorizer (USA, Jun 21 1997)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, bldyroar, beastrzr, coh1002e, znt, zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar (Japan, Jun 21 1997)", MACHINE_IMPERFECT_SOUND )
-GAME( 1997, beastrzrb, beastrzr, beastrzrb, znt, zn_state, empty_init, ROT0, "bootleg", "Beastorizer (USA bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1997, coh1002e, 0, coh1002e, znt, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "PS Arcade 95", MACHINE_IS_BIOS_ROOT )
+GAME( 1997, beastrzr, coh1002e, coh1002e, znt, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Beastorizer (USA, Sep 22 1997)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, beastrzra, beastrzr, coh1002e, znt, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Beastorizer (USA, Jun 21 1997)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, bldyroar, beastrzr, coh1002e, znt, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar (Japan, Jun 21 1997)", MACHINE_IMPERFECT_SOUND )
+GAME( 1997, beastrzrb, beastrzr, beastrzrb, znt, beastrzrb_state, empty_init, ROT0, "bootleg", "Beastorizer (USA bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
/* The region on these is determined from the NVRAM, it can't be changed from the test menu, it's pre-programmed */
-GAME( 1998, bldyror2, coh1002e, coh1002e, bldyror2, zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (World)", MACHINE_IMPERFECT_SOUND ) // locks up if you coin up during the fmw with interlace enabled
-GAME( 1998, bldyror2u, bldyror2, coh1002e, bldyror2, zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (USA)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, bldyror2a, bldyror2, coh1002e, bldyror2, zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (Asia)", MACHINE_IMPERFECT_SOUND )
-GAME( 1998, bldyror2j, bldyror2, coh1002e, bldyror2, zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, bldyror2, coh1002e, coh1002e, bldyror2, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (World)", MACHINE_IMPERFECT_SOUND ) // locks up if you coin up during the fmw with interlace enabled
+GAME( 1998, bldyror2u, bldyror2, coh1002e, bldyror2, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (USA)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, bldyror2a, bldyror2, coh1002e, bldyror2, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (Asia)", MACHINE_IMPERFECT_SOUND )
+GAME( 1998, bldyror2j, bldyror2, coh1002e, bldyror2, raizing_zn_state, empty_init, ROT0, "Eighting / Raizing", "Bloody Roar 2 (Japan)", MACHINE_IMPERFECT_SOUND )
/* The region on these is determined from the NVRAM, it can't be changed from the test menu, it's pre-programmed */
-GAME( 2000, brvblade, coh1002m, coh1002e, znt, zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (World)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, brvbladeu, brvblade, coh1002e, znt, zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (USA)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, brvbladea, brvblade, coh1002e, znt, zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (Asia)", MACHINE_IMPERFECT_SOUND )
-GAME( 2000, brvbladej, brvblade, coh1002e, znt, zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (Japan)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, brvblade, coh1002m, coh1002e, znt, raizing_zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (World)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, brvbladeu, brvblade, coh1002e, znt, raizing_zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (USA)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, brvbladea, brvblade, coh1002e, znt, raizing_zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (Asia)", MACHINE_IMPERFECT_SOUND )
+GAME( 2000, brvbladej, brvblade, coh1002e, znt, raizing_zn_state, empty_init, ROT270, "Eighting / Raizing", "Brave Blade (Japan)", MACHINE_IMPERFECT_SOUND )
/* Bust a Move 2 uses the PSARC95 bios and ET series security but the top board is completely different */
-GAME( 1999, bam2, coh1002e, bam2, zn, zn_state, init_bam2, ROT0, "Metro / Enix / Namco", "Bust a Move 2 - Dance Tengoku Mix (Japanese ROM ver. 1999/07/17 10:00:00)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1999, bam2, coh1002e, bam2, zn, bam2_state, empty_init, ROT0, "Metro / Enix / Namco", "Bust a Move 2 - Dance Tengoku Mix (Japanese ROM ver. 1999/07/17 10:00:00)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
/* Atlus */
-GAME( 1996, coh1001l, 0, coh1001l, zn, zn_state, empty_init, ROT0, "Atlus", "Atlus PSX", MACHINE_IS_BIOS_ROOT )
-GAME( 1996, hvnsgate, coh1001l, coh1001l, zn, zn_state, empty_init, ROT0, "Racdym / Atlus", "Heaven's Gate", MACHINE_IMPERFECT_SOUND )
+GAME( 1996, coh1001l, 0, coh1001l, zn, atlus_zn_state, empty_init, ROT0, "Atlus", "Atlus PSX", MACHINE_IS_BIOS_ROOT )
+GAME( 1996, hvnsgate, coh1001l, coh1001l, zn, atlus_zn_state, empty_init, ROT0, "Racdym / Atlus", "Heaven's Gate", MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/includes/zn.h b/src/mame/includes/zn.h
new file mode 100644
index 00000000000..82b5a384059
--- /dev/null
+++ b/src/mame/includes/zn.h
@@ -0,0 +1,579 @@
+// license:BSD-3-Clause
+// copyright-holders:smf, R. Belmont
+
+#ifndef MAME_INCLUDES_ZN_H
+#define MAME_INCLUDES_ZN_H
+
+#pragma once
+
+#include "audio/rax.h"
+#include "audio/taito_zm.h"
+#include "audio/taitosnd.h"
+
+#include "bus/ata/atadev.h"
+#include "bus/ata/ataintf.h"
+#include "cpu/m68000/m68000.h"
+#include "cpu/mcs51/mcs51.h"
+#include "cpu/psx/psx.h"
+#include "cpu/z80/z80.h"
+#include "machine/7200fifo.h"
+#include "machine/at28c16.h"
+#include "machine/bankdev.h"
+#include "machine/cat702.h"
+#include "machine/gen_latch.h"
+#include "machine/mb3773.h"
+#include "machine/nvram.h"
+#include "machine/ram.h"
+#include "machine/vt83c461.h"
+#include "machine/watchdog.h"
+#include "machine/znmcu.h"
+#include "sound/2610intf.h"
+#include "sound/okim6295.h"
+#include "sound/qsound.h"
+#include "sound/spu.h"
+#include "sound/ymf271.h"
+#include "sound/ymz280b.h"
+#include "video/psx.h"
+
+#include "screen.h"
+#include "speaker.h"
+
+class zn_state : public driver_device
+{
+public:
+ zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_gpu(*this, "gpu"),
+ m_gpu_screen(*this, "screen"),
+ m_sio0(*this, "maincpu:sio0"),
+ m_cat702(*this, "cat702_%u", 1),
+ m_znmcu(*this, "znmcu"),
+ m_maincpu(*this, "maincpu"),
+ m_ram(*this, "maincpu:ram"),
+ m_znmcu_dataout(1)
+ {
+ std::fill(std::begin(m_cat702_dataout), std::end(m_cat702_dataout), 1);
+ }
+
+ void zn_1mb_vram(machine_config &config);
+ void zn_2mb_vram(machine_config &config);
+ void gameboard_cat702(machine_config &config);
+
+protected:
+ template<int Chip> DECLARE_WRITE_LINE_MEMBER(cat702_dataout) { m_cat702_dataout[Chip] = state; update_sio0_rxd(); }
+ DECLARE_WRITE_LINE_MEMBER(znmcu_dataout) { m_znmcu_dataout = state; update_sio0_rxd(); }
+ void update_sio0_rxd() { m_sio0->write_rxd(m_cat702_dataout[0] && m_cat702_dataout[1] && m_znmcu_dataout); }
+ DECLARE_READ8_MEMBER(znsecsel_r);
+ DECLARE_WRITE8_MEMBER(znsecsel_w);
+ DECLARE_READ8_MEMBER(boardconfig_r);
+ DECLARE_READ16_MEMBER(unknown_r);
+ DECLARE_WRITE8_MEMBER(coin_w);
+
+ void zn_base_map(address_map &map);
+
+ virtual void machine_start() override;
+
+ inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... );
+ inline void psxwriteword( uint32_t *p_n_psxram, uint32_t n_address, uint16_t n_data );
+
+ uint8_t m_n_znsecsel;
+
+ required_device<psxgpu_device> m_gpu;
+ required_device<screen_device> m_gpu_screen;
+ required_device<psxsio0_device> m_sio0;
+ required_device_array<cat702_device, 2> m_cat702;
+ required_device<znmcu_device> m_znmcu;
+ required_device<cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
+
+ int m_cat702_dataout[2];
+ int m_znmcu_dataout;
+};
+
+//
+// Capcom ZN1/2 hardware
+//
+
+class capcom_zn_state : public zn_state
+{
+public:
+ capcom_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank"),
+ m_audiocpu(*this, "audiocpu"),
+ m_soundlatch(*this, "soundlatch"),
+ m_soundbank(*this, "soundbank")
+ {
+ }
+
+ void zn_base(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+ required_device<cpu_device> m_audiocpu;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_memory_bank m_soundbank;
+
+private:
+ void main_map(address_map &map);
+ void qsound_map(address_map &map);
+ void qsound_portmap(address_map &map);
+
+ DECLARE_READ16_MEMBER(kickharness_r);
+ DECLARE_WRITE8_MEMBER(bank_w);
+ DECLARE_WRITE8_MEMBER(qsound_bankswitch_w);
+ INTERRUPT_GEN_MEMBER(qsound_interrupt);
+};
+
+class zn1_state : public capcom_zn_state
+{
+public:
+ zn1_state(const machine_config &mconfig, device_type type, const char *tag) :
+ capcom_zn_state(mconfig, type, tag)
+ {
+ }
+
+ void coh1000c(machine_config &config);
+ void coh1002c(machine_config &config);
+};
+
+class glpracr_state : public zn1_state
+{
+public:
+ glpracr_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn1_state(mconfig, type, tag)
+ {
+ }
+
+private:
+ virtual void machine_reset() override;
+};
+
+class zn2_state : public capcom_zn_state
+{
+public:
+ zn2_state(const machine_config &mconfig, device_type type, const char *tag) :
+ capcom_zn_state(mconfig, type, tag)
+ {
+ }
+
+ void zn2(machine_config &config);
+ void coh3002c(machine_config &config);
+};
+
+//
+// Acclaim ZN-derived hardware
+//
+
+class acclaim_zn_state : public zn_state
+{
+public:
+ acclaim_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag)
+ {
+ }
+
+ void coh1000a(machine_config &config);
+
+protected:
+ void coh1000a_map(address_map &map);
+
+private:
+ DECLARE_WRITE16_MEMBER(acpsx_00_w);
+ DECLARE_WRITE16_MEMBER(acpsx_10_w);
+};
+
+class nbajamex_state : public acclaim_zn_state
+{
+public:
+ nbajamex_state(const machine_config &mconfig, device_type type, const char *tag) :
+ acclaim_zn_state(mconfig, type, tag),
+ m_rax(*this, "rax"),
+ m_bankmap(*this, "nbajamex_bankmap"),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank%u", 1)
+ {
+ }
+
+ void nbajamex(machine_config &config);
+
+private:
+ virtual void driver_init() override;
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_WRITE16_MEMBER(bank_w);
+ DECLARE_WRITE16_MEMBER(sound_80_w);
+ DECLARE_WRITE8_MEMBER(backup_w);
+ DECLARE_READ16_MEMBER(sound_08_r);
+ DECLARE_READ16_MEMBER(sound_80_r);
+
+ void main_map(address_map &map);
+ void bank_map(address_map &map);
+
+ std::unique_ptr<uint8_t[]> m_sram;
+ uint32_t m_curr_rombank[2];
+
+ required_device<acclaim_rax_device> m_rax;
+ required_device<address_map_bank_device> m_bankmap;
+ required_memory_region m_bankedroms;
+ required_memory_bank_array<2> m_rombank;
+};
+
+class jdredd_state : public acclaim_zn_state
+{
+public:
+ jdredd_state(const machine_config &mconfig, device_type type, const char *tag) :
+ acclaim_zn_state(mconfig, type, tag),
+ m_gun_x(*this, "GUN%uX", 1U),
+ m_gun_y(*this, "GUN%uY", 1U)
+ {
+ }
+
+ void jdredd(machine_config &config);
+
+ DECLARE_READ_LINE_MEMBER(gun_mux_r);
+
+private:
+ virtual void machine_start() override;
+
+ void main_map(address_map &map);
+
+ DECLARE_WRITE_LINE_MEMBER(vblank);
+
+ required_ioport_array<2> m_gun_x;
+ required_ioport_array<2> m_gun_y;
+ bool m_gun_mux;
+};
+
+//
+// Atlus ZN-derived hardware
+//
+
+class atlus_zn_state : public zn_state
+{
+public:
+ atlus_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank"),
+ m_audiocpu(*this, "audiocpu"),
+ m_soundlatch16(*this, "soundlatch16")
+ {
+ }
+
+ void coh1001l(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_WRITE8_MEMBER(bank_w);
+ DECLARE_WRITE16_MEMBER(sound_unk_w);
+
+ void main_map(address_map &map);
+ void sound_map(address_map &map);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+ required_device<cpu_device> m_audiocpu;
+ required_device<generic_latch_16_device> m_soundlatch16;
+};
+
+//
+// Video System Co. ZN-derived hardware
+//
+
+class visco_zn_state : public zn_state
+{
+public:
+ visco_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank")
+ {
+ }
+
+ void coh1002v(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_WRITE8_MEMBER(bank_w);
+
+ void main_map(address_map &map);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+};
+
+//
+// Eighting / Raizing ZN-derived hardware
+//
+
+class raizing_zn_state : public zn_state
+{
+public:
+ raizing_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank"),
+ m_audiocpu(*this, "audiocpu"),
+ m_soundlatch(*this, "soundlatch")
+ {
+ }
+
+ void coh1002e(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void main_map(address_map &map);
+ void psarc_sound_map(address_map &map);
+
+ DECLARE_WRITE8_MEMBER(bank_w);
+ DECLARE_WRITE8_MEMBER(sound_irq_w);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+ required_device<cpu_device> m_audiocpu;
+ required_device<generic_latch_8_device> m_soundlatch;
+};
+
+class beastrzrb_state : public raizing_zn_state
+{
+public:
+ beastrzrb_state(const machine_config &mconfig, device_type type, const char *tag) :
+ raizing_zn_state(mconfig, type, tag),
+ m_okibank(*this, "okibank")
+ {
+ }
+
+ void beastrzrb(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void sound_map(address_map &map);
+ void oki_map(address_map &map);
+
+ required_memory_bank m_okibank;
+};
+
+class bam2_state : public zn_state
+{
+public:
+ bam2_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank")
+ {
+ }
+
+ void bam2(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void main_map(address_map &map);
+
+ uint16_t m_mcu_command;
+
+ DECLARE_WRITE16_MEMBER(mcu_w);
+ DECLARE_READ16_MEMBER(mcu_r);
+ DECLARE_READ16_MEMBER(unk_r);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+};
+
+//
+// Taito FX1a/FX1b
+//
+
+class taito_fx_state : public zn_state
+{
+public:
+ taito_fx_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank"),
+ m_mb3773(*this, "mb3773")
+ {
+ }
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_WRITE8_MEMBER(bank_w);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+ required_device<mb3773_device> m_mb3773;
+};
+
+class taito_fx1a_state : public taito_fx_state
+{
+public:
+ taito_fx1a_state(const machine_config &mconfig, device_type type, const char *tag) :
+ taito_fx_state(mconfig, type, tag),
+ m_audiocpu(*this, "audiocpu"),
+ m_soundbank(*this, "soundbank")
+ {
+ }
+
+ void coh1000ta(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void main_map(address_map &map);
+ void sound_map(address_map &map);
+
+ DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
+
+ required_device<cpu_device> m_audiocpu;
+ required_memory_bank m_soundbank;
+};
+
+class taito_fx1b_state : public taito_fx_state
+{
+public:
+ taito_fx1b_state(const machine_config &mconfig, device_type type, const char *tag) :
+ taito_fx_state(mconfig, type, tag),
+ m_zoom(*this, "taito_zoom"),
+ m_fm1208s(*this, "fm1208s")
+ {
+ }
+
+ void base_config(machine_config &config);
+ void coh1000tb(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+
+ void main_map(address_map &map);
+
+ DECLARE_WRITE8_MEMBER(fram_w);
+ DECLARE_READ8_MEMBER(fram_r);
+
+ required_device<taito_zoom_device> m_zoom;
+ required_device<nvram_device> m_fm1208s;
+
+ std::unique_ptr<uint8_t[]> m_fram;
+};
+
+class gdarius_state : public taito_fx1b_state
+{
+public:
+ gdarius_state(const machine_config &mconfig, device_type type, const char *tag) :
+ taito_fx1b_state(mconfig, type, tag)
+ {
+ }
+
+ void coh1002tb(machine_config &config);
+};
+
+//
+// Atari ZN-derived hardware (Primal Rage 2)
+//
+
+class primrag2_state : public zn_state
+{
+public:
+ primrag2_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_vt83c461(*this, "ide")
+ {
+ }
+
+ void coh1000w(machine_config &config);
+
+private:
+ virtual void machine_start() override;
+
+ void main_map(address_map &map);
+
+ void dma_read(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size);
+ void dma_write(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size);
+
+ DECLARE_READ16_MEMBER(vt83c461_16_r);
+ DECLARE_WRITE16_MEMBER(vt83c461_16_w);
+ DECLARE_READ16_MEMBER(vt83c461_32_r);
+ DECLARE_WRITE16_MEMBER(vt83c461_32_w);
+
+ required_device<vt83c461_device> m_vt83c461;
+
+ uint16_t m_vt83c461_latch;
+};
+
+//
+// Tecmo ZN-derived hardware
+//
+
+class tecmo_zn_state : public zn_state
+{
+public:
+ tecmo_zn_state(const machine_config &mconfig, device_type type, const char *tag) :
+ zn_state(mconfig, type, tag),
+ m_bankedroms(*this, "bankedroms"),
+ m_rombank(*this, "rombank")
+ {
+ }
+
+ void coh1002m(machine_config &config);
+ void coh1002ml(machine_config &config);
+
+protected:
+ void base_map(address_map &map);
+
+private:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void link_map(address_map &map);
+ void link_port_map(address_map &map);
+
+ DECLARE_WRITE8_MEMBER(bank_w);
+
+ required_memory_region m_bankedroms;
+ required_memory_bank m_rombank;
+};
+
+class cbaj_state : public tecmo_zn_state
+{
+public:
+ cbaj_state(const machine_config &mconfig, device_type type, const char *tag) :
+ tecmo_zn_state(mconfig, type, tag),
+ m_audiocpu(*this, "audiocpu"),
+ m_fifo(*this, "cbaj_fifo%u", 1)
+ {
+ }
+
+ void cbaj(machine_config &config);
+
+private:
+ void main_map(address_map &map);
+
+ void z80_map(address_map &map);
+ void z80_port_map(address_map &map);
+
+ DECLARE_READ8_MEMBER(sound_main_status_r);
+ DECLARE_READ8_MEMBER(sound_z80_status_r);
+
+ required_device<cpu_device> m_audiocpu;
+ required_device_array<fifo7200_device, 2> m_fifo;
+};
+
+#endif // MAME_INCLUDES_ZN_H