diff --git a/src/mame/drivers/taitogn.cpp b/src/mame/drivers/taitogn.cpp index daa6287a986..de9db486740 100644 --- a/src/mame/drivers/taitogn.cpp +++ b/src/mame/drivers/taitogn.cpp @@ -330,34 +330,21 @@ Type 3 (PCMCIA Compact Flash Adaptor + Compact Flash card, sealed together with */ #include "emu.h" -#include "audio/taito_zm.h" +#include "includes/zn.h" -#include "cpu/psx/psx.h" -#include "machine/at28c16.h" #include "machine/ataflash.h" -#include "machine/bankdev.h" -#include "machine/cat702.h" #include "machine/intelfsh.h" -#include "machine/mb3773.h" -#include "machine/ram.h" #include "machine/rf5c296.h" -#include "machine/znmcu.h" -#include "sound/spu.h" -#include "video/psx.h" -#include "screen.h" -#include "speaker.h" -#include +// +// Taito GNET specific +// -class taitogn_state : public driver_device +class taitogn_state : public zn_state { public: taitogn_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_sio0(*this, "maincpu:sio0"), - m_cat702(*this, "cat702_%u", 1U), - m_znmcu(*this, "znmcu"), - m_maincpu(*this, "maincpu"), + zn_state(mconfig, type, tag), m_mn10200(*this, "taito_zoom:mn10200"), m_pccard(*this, "pccard"), m_flashbank(*this, "flashbank"), @@ -366,14 +353,13 @@ public: m_pgmflash(*this, "pgmflash"), m_sndflash(*this, "sndflash%u", 0U), m_jp1(*this, "JP1"), - m_has_zoom(true), - m_znmcu_dataout(1) + m_has_zoom(true) { - std::fill(std::begin(m_cat702_dataout), std::end(m_cat702_dataout), 1); } void init_coh3002t_nz(); + void base_config(machine_config &config); void coh3002t_t2_mp(machine_config &config); void coh3002t(machine_config &config); void coh3002t_t1_mp(machine_config &config); @@ -382,9 +368,6 @@ public: void coh3002t_t1(machine_config &config); private: - template 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(control_r); DECLARE_WRITE8_MEMBER(control_w); DECLARE_WRITE16_MEMBER(control2_w); @@ -393,25 +376,18 @@ private: DECLARE_READ16_MEMBER(gn_1fb70000_r); DECLARE_WRITE16_MEMBER(gn_1fb70000_w); DECLARE_READ16_MEMBER(hack1_r); - DECLARE_READ8_MEMBER(znsecsel_r); - DECLARE_WRITE8_MEMBER(znsecsel_w); - DECLARE_READ8_MEMBER(boardconfig_r); DECLARE_WRITE8_MEMBER(coin_w); DECLARE_READ8_MEMBER(coin_r); DECLARE_READ8_MEMBER(gnet_mahjong_panel_r); DECLARE_READ32_MEMBER(zsg2_ext_r); void flashbank_map(address_map &map); - void taitogn_map(address_map &map); - void taitogn_mp_map(address_map &map); + void main_map(address_map &map); + void main_mp_map(address_map &map); virtual void machine_start() override; virtual void machine_reset() override; - required_device m_sio0; - required_device_array m_cat702; - required_device m_znmcu; - required_device m_maincpu; required_device m_mn10200; required_device m_pccard; required_device m_flashbank; @@ -427,15 +403,9 @@ private: uint8_t m_control3; int m_v; - uint8_t m_n_znsecsel; - uint8_t m_coin_info; - - int m_cat702_dataout[2]; - int m_znmcu_dataout; }; - // Misc. controls READ8_MEMBER(taitogn_state::control_r) @@ -513,7 +483,8 @@ READ16_MEMBER(taitogn_state::hack1_r) switch (offset) { case 0: - m_v = m_v ^ 8; + if (!machine().side_effects_disabled()) + m_v = m_v ^ 8; // Probably something to do with MCU return m_v; @@ -526,30 +497,6 @@ READ16_MEMBER(taitogn_state::hack1_r) -// Lifted from zn.c - -READ8_MEMBER(taitogn_state::znsecsel_r) -{ - return m_n_znsecsel; -} - -WRITE8_MEMBER(taitogn_state::znsecsel_w) -{ - m_cat702[0]->write_select(BIT(data, 2)); - m_cat702[1]->write_select(BIT(data, 3)); - m_znmcu->write_select((data & 0x8c) != 0x8c); - // BIT(data,4); // read analogue controls? - - m_n_znsecsel = data; -} - -READ8_MEMBER(taitogn_state::boardconfig_r) -{ - // see zn.c - return 64|32|8; -} - - WRITE8_MEMBER(taitogn_state::coin_w) { /* 0x01=counter @@ -605,14 +552,12 @@ READ32_MEMBER(taitogn_state::zsg2_ext_r) void taitogn_state::machine_start() { + zn_state::machine_start(); save_item(NAME(m_control)); save_item(NAME(m_control2)); save_item(NAME(m_control3)); save_item(NAME(m_v)); - save_item(NAME(m_n_znsecsel)); save_item(NAME(m_coin_info)); - save_item(NAME(m_cat702_dataout)); - save_item(NAME(m_znmcu_dataout)); } void taitogn_state::machine_reset() @@ -629,22 +574,15 @@ void taitogn_state::init_coh3002t_nz() m_has_zoom = false; } -void taitogn_state::taitogn_map(address_map &map) +void taitogn_state::main_map(address_map &map) { + zn_base_map(map); + map(0x1f000000, 0x1f7fffff).m(m_flashbank, FUNC(address_map_bank_device::amap16)); - map(0x1fa00000, 0x1fa00003).portr("P1"); - map(0x1fa00100, 0x1fa00103).portr("P2"); - map(0x1fa00200, 0x1fa00203).portr("SERVICE"); - map(0x1fa00300, 0x1fa00303).portr("SYSTEM"); - map(0x1fa10000, 0x1fa10003).portr("P3"); - map(0x1fa10100, 0x1fa10103).portr("P4"); - map(0x1fa10200, 0x1fa10200).r(FUNC(taitogn_state::boardconfig_r)); - map(0x1fa10300, 0x1fa10300).rw(FUNC(taitogn_state::znsecsel_r), FUNC(taitogn_state::znsecsel_w)); map(0x1fa20000, 0x1fa20000).rw(FUNC(taitogn_state::coin_r), FUNC(taitogn_state::coin_w)); map(0x1fa30000, 0x1fa30000).rw(FUNC(taitogn_state::control3_r), FUNC(taitogn_state::control3_w)); map(0x1fa51c00, 0x1fa51dff).nopr(); // systematic read at spu_address + 250000, result dropped, maybe other accesses map(0x1fa60000, 0x1fa60003).r(FUNC(taitogn_state::hack1_r)); - map(0x1faf0000, 0x1faf07ff).rw("at28c16", FUNC(at28c16_device::read), FUNC(at28c16_device::write)); /* eeprom */ map(0x1fb00000, 0x1fb0ffff).rw("rf5c296", FUNC(rf5c296_device::io_r), FUNC(rf5c296_device::io_w)); map(0x1fb40000, 0x1fb40000).rw(FUNC(taitogn_state::control_r), FUNC(taitogn_state::control_w)); map(0x1fb60000, 0x1fb60001).w(FUNC(taitogn_state::control2_w)); @@ -674,9 +612,9 @@ void taitogn_state::flashbank_map(address_map &map) map(0x10200000, 0x103fffff).rw("biosflash", FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); } -void taitogn_state::taitogn_mp_map(address_map &map) +void taitogn_state::main_mp_map(address_map &map) { - taitogn_map(map); + main_map(map); map(0x1fa10100, 0x1fa10100).r(FUNC(taitogn_state::gnet_mahjong_panel_r)); } @@ -690,33 +628,12 @@ void slot_ataflash(device_slot_interface &device) void taitogn_state::coh3002t(machine_config &config) { + zn2(config); + gameboard_cat702(config); + /* basic machine hardware */ - CXD8661R(config, m_maincpu, XTAL(100'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::taitogn_map); + m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::main_map); - m_maincpu->subdevice("ram")->set_default_size("4M"); - - auto &sio0(*m_maincpu->subdevice("sio0")); - sio0.sck_handler().set(m_cat702[0], FUNC(cat702_device::write_clock)); - sio0.sck_handler().append(m_cat702[1], FUNC(cat702_device::write_clock)); - sio0.sck_handler().append(m_znmcu, FUNC(znmcu_device::write_clock)); - sio0.txd_handler().set(m_cat702[0], FUNC(cat702_device::write_datain)); - sio0.txd_handler().append(m_cat702[1], FUNC(cat702_device::write_datain)); - - CAT702(config, m_cat702[0], 0); - m_cat702[0]->dataout_handler().set(FUNC(taitogn_state::cat702_dataout<0>)); - - CAT702(config, m_cat702[1], 0); - m_cat702[1]->dataout_handler().set(FUNC(taitogn_state::cat702_dataout<1>)); - - ZNMCU(config, m_znmcu, 0); - m_znmcu->dataout_handler().set(FUNC(taitogn_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"); - m_znmcu->analog2_handler().set_ioport("ANALOG2"); - - AT28C16(config, "at28c16", 0); RF5C296(config, "rf5c296", 0).set_pccard("pccard"); PCCARD_SLOT(config, m_pccard, slot_ataflash, nullptr); @@ -731,21 +648,9 @@ void taitogn_state::coh3002t(machine_config &config) ADDRESS_MAP_BANK(config, "flashbank").set_map(&taitogn_state::flashbank_map).set_options(ENDIANNESS_LITTLE, 16, 32, 0x8000000); - // 5MHz NEC uPD78081 MCU: - // we don't have a 78K0 emulation core yet.. - - /* video hardware */ - CXD8654Q(config, "gpu", XTAL(53'693'175), 0x200000, subdevice("maincpu")).set_screen("screen"); - - SCREEN(config, "screen", SCREEN_TYPE_RASTER); - - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - - spu_device &spu(SPU(config, "spu", XTAL(67'737'600)/2, subdevice("maincpu"))); - spu.add_route(0, "lspeaker", 0.3); - spu.add_route(1, "rspeaker", 0.3); + subdevice("spu")->reset_routes(); + subdevice("spu")->add_route(0, "lspeaker", 0.3); + subdevice("spu")->add_route(1, "rspeaker", 0.3); TAITO_ZOOM(config, m_zoom); m_zoom->set_use_flash(); @@ -772,7 +677,7 @@ void taitogn_state::coh3002t_t1_mp(machine_config &config) coh3002t_t1(config); /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::taitogn_mp_map); + m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::main_mp_map); } void taitogn_state::coh3002t_t2_mp(machine_config &config) @@ -780,7 +685,7 @@ void taitogn_state::coh3002t_t2_mp(machine_config &config) coh3002t_t2(config); /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::taitogn_mp_map); + m_maincpu->set_addrmap(AS_PROGRAM, &taitogn_state::main_mp_map); } void taitogn_state::coh3002t_cf(machine_config &config) diff --git a/src/mame/drivers/zn.cpp b/src/mame/drivers/zn.cpp index dd08174846a..86576287f2e 100644 --- a/src/mame/drivers/zn.cpp +++ b/src/mame/drivers/zn.cpp @@ -13,8 +13,6 @@ #include "emu.h" #include "includes/zn.h" -#include - #define VERBOSE_LEVEL ( 0 ) inline void ATTR_PRINTF(3,4) zn_state::verboselog( int n_level, const char *s_fmt, ... ) @@ -144,19 +142,24 @@ void zn_state::zn_base_map(address_map &map) map(0x1fa10100, 0x1fa10103).portr("P4"); map(0x1fa10200, 0x1fa10200).r(FUNC(zn_state::boardconfig_r)); map(0x1fa10300, 0x1fa10300).rw(FUNC(zn_state::znsecsel_r), FUNC(zn_state::znsecsel_w)); - map(0x1fa20000, 0x1fa20000).w(FUNC(zn_state::coin_w)); - map(0x1fa30000, 0x1fa30003).noprw(); /* ?? */ map(0x1fa40000, 0x1fa40003).nopr(); /* ?? */ - map(0x1fa60000, 0x1fa60003).nopr(); /* ?? */ map(0x1faf0000, 0x1faf07ff).rw("at28c16", FUNC(at28c16_device::read), FUNC(at28c16_device::write)); /* EEPROM */ map(0x1fb20000, 0x1fb20007).r(FUNC(zn_state::unknown_r)); } +void zn_state::zn_rom_base_map(address_map &map) +{ + zn_base_map(map); + map(0x1fa20000, 0x1fa20000).w(FUNC(zn_state::coin_w)); + map(0x1fa30000, 0x1fa30003).noprw(); /* ?? */ + map(0x1fa60000, 0x1fa60003).nopr(); /* ?? */ +} + 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_base_map); + m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::zn_rom_base_map); m_maincpu->subdevice("ram")->set_default_size("4M"); @@ -197,11 +200,12 @@ void zn_state::zn_2mb_vram(machine_config &config) CXD8561Q(config.replace(), "gpu", XTAL(53'693'175), 0x200000, subdevice("maincpu")).set_screen("screen"); } -void zn2_state::zn2(machine_config &config) +// used in Capcom ZN2, Taito GNET +void zn_state::zn2(machine_config &config) { /* basic machine hardware */ CXD8661R(config, m_maincpu, XTAL(100'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &zn2_state::zn_base_map); + m_maincpu->set_addrmap(AS_PROGRAM, &zn_state::zn_rom_base_map); m_maincpu->subdevice("ram")->set_default_size("4M"); auto &sio0(*m_maincpu->subdevice("sio0")); @@ -210,10 +214,10 @@ void zn2_state::zn2(machine_config &config) sio0.txd_handler().set(m_cat702[0], FUNC(cat702_device::write_datain)); CAT702(config, m_cat702[0], 0); - m_cat702[0]->dataout_handler().set(FUNC(zn2_state::cat702_dataout<0>)); + m_cat702[0]->dataout_handler().set(FUNC(zn_state::cat702_dataout<0>)); ZNMCU(config, m_znmcu, 0); - m_znmcu->dataout_handler().set(FUNC(zn2_state::znmcu_dataout)); + m_znmcu->dataout_handler().set(FUNC(zn_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"); @@ -383,7 +387,7 @@ INTERRUPT_GEN_MEMBER(capcom_zn_state::qsound_interrupt) void capcom_zn_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f3fffff).rom().region("bankedroms", 0); map(0x1f400000, 0x1f7fffff).bankr("rombank"); @@ -843,7 +847,7 @@ WRITE8_MEMBER(taito_fx1a_state::sound_bankswitch_w) void taito_fx1a_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f7fffff).bankr("rombank"); map(0x1fb40000, 0x1fb40000).w(FUNC(taito_fx1a_state::bank_w)); @@ -927,7 +931,7 @@ READ8_MEMBER(taito_fx1b_state::fram_r) void taito_fx1b_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_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)); @@ -1200,7 +1204,7 @@ void primrag2_state::machine_start() void primrag2_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_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(); @@ -1385,7 +1389,7 @@ WRITE8_MEMBER(raizing_zn_state::sound_irq_w) void raizing_zn_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f7fffff).bankr("rombank"); map(0x1fa10300, 0x1fa10300).w(FUNC(raizing_zn_state::bank_w)); @@ -1572,7 +1576,7 @@ READ16_MEMBER(bam2_state::unk_r) void bam2_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f3fffff).rom().region("bankedroms", 0); map(0x1f400000, 0x1f7fffff).bankr("rombank"); @@ -1879,7 +1883,7 @@ WRITE8_MEMBER(nbajamex_state::backup_w) void acclaim_zn_state::coh1000a_map(address_map &map) { - zn_base_map(map); + zn_rom_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)); } @@ -2106,7 +2110,7 @@ WRITE8_MEMBER(atlus_zn_state::bank_w) void atlus_zn_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f7fffff).bankr("rombank"); map(0x1fb00000, 0x1fb00001).w(m_soundlatch16, FUNC(generic_latch_16_device::write)); @@ -2171,7 +2175,7 @@ WRITE8_MEMBER(visco_zn_state::bank_w) void visco_zn_state::main_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f27ffff).rom().region("fixedroms", 0); map(0x1fb00000, 0x1fbfffff).bankr("rombank"); map(0x1fb00000, 0x1fb00000).w(FUNC(visco_zn_state::bank_w)); @@ -2362,7 +2366,7 @@ WRITE8_MEMBER(tecmo_zn_state::bank_w) void tecmo_zn_state::base_map(address_map &map) { - zn_base_map(map); + zn_rom_base_map(map); map(0x1f000000, 0x1f7fffff).bankr("rombank"); map(0x1fb00006, 0x1fb00006).w(FUNC(tecmo_zn_state::bank_w)); } diff --git a/src/mame/includes/zn.h b/src/mame/includes/zn.h index 82b5a384059..d312b108b33 100644 --- a/src/mame/includes/zn.h +++ b/src/mame/includes/zn.h @@ -38,6 +38,8 @@ #include "screen.h" #include "speaker.h" +#include + class zn_state : public driver_device { public: @@ -57,6 +59,7 @@ public: void zn_1mb_vram(machine_config &config); void zn_2mb_vram(machine_config &config); + void zn2(machine_config &config); void gameboard_cat702(machine_config &config); protected: @@ -70,6 +73,7 @@ protected: DECLARE_WRITE8_MEMBER(coin_w); void zn_base_map(address_map &map); + void zn_rom_base_map(address_map &map); virtual void machine_start() override; @@ -162,7 +166,6 @@ public: { } - void zn2(machine_config &config); void coh3002c(machine_config &config); };