diff --git a/src/mame/drivers/taitogn.cpp b/src/mame/drivers/taitogn.cpp index d32f90c1ffa..80130271701 100644 --- a/src/mame/drivers/taitogn.cpp +++ b/src/mame/drivers/taitogn.cpp @@ -346,6 +346,7 @@ Type 3 (PCMCIA Compact Flash Adaptor + Compact Flash card, sealed together with #include "video/psx.h" #include "speaker.h" +#include class taitogn_state : public driver_device { @@ -353,8 +354,7 @@ 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_1(*this, "cat702_1"), - m_cat702_2(*this, "cat702_2"), + m_cat702(*this, "cat702_%u", 1U), m_znmcu(*this, "znmcu"), m_maincpu(*this, "maincpu"), m_mn10200(*this, "taito_zoom:mn10200"), @@ -362,23 +362,20 @@ public: m_mb3773(*this, "mb3773"), m_zoom(*this, "taito_zoom"), m_pgmflash(*this, "pgmflash"), - m_sndflash0(*this, "sndflash0"), - m_sndflash1(*this, "sndflash1"), - m_sndflash2(*this, "sndflash2"), + m_sndflash(*this, "sndflash%u", 0U), m_jp1(*this, "JP1"), m_has_zoom(true), - m_cat702_1_dataout(1), - m_cat702_2_dataout(1), m_znmcu_dataout(1) { + std::fill(std::begin(m_cat702_dataout), std::end(m_cat702_dataout), 1); } - DECLARE_WRITE_LINE_MEMBER(sio0_sck){ m_cat702_1->write_clock(state); m_cat702_2->write_clock(state); m_znmcu->write_clock(state); } - DECLARE_WRITE_LINE_MEMBER(sio0_txd){ m_cat702_1->write_datain(state); m_cat702_2->write_datain(state); } - DECLARE_WRITE_LINE_MEMBER(cat702_1_dataout){ m_cat702_1_dataout = state; update_sio0_rxd(); } - DECLARE_WRITE_LINE_MEMBER(cat702_2_dataout){ m_cat702_2_dataout = state; update_sio0_rxd(); } + DECLARE_WRITE_LINE_MEMBER(sio0_sck){ m_cat702[0]->write_clock(state); m_cat702[1]->write_clock(state); m_znmcu->write_clock(state); } + DECLARE_WRITE_LINE_MEMBER(sio0_txd){ m_cat702[0]->write_datain(state); m_cat702[1]->write_datain(state); } + DECLARE_WRITE_LINE_MEMBER(cat702_1_dataout){ m_cat702_dataout[0] = state; update_sio0_rxd(); } + DECLARE_WRITE_LINE_MEMBER(cat702_2_dataout){ m_cat702_dataout[1] = 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_1_dataout && m_cat702_2_dataout && m_znmcu_dataout); } + 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); @@ -411,8 +408,7 @@ protected: private: required_device m_sio0; - required_device m_cat702_1; - required_device m_cat702_2; + required_device_array m_cat702; required_device m_znmcu; required_device m_maincpu; required_device m_mn10200; @@ -420,9 +416,7 @@ private: required_device m_mb3773; required_device m_zoom; required_device m_pgmflash; - required_device m_sndflash0; - required_device m_sndflash1; - required_device m_sndflash2; + required_device_array m_sndflash; required_ioport m_jp1; bool m_has_zoom; @@ -435,8 +429,7 @@ private: uint8_t m_coin_info; - int m_cat702_1_dataout; - int m_cat702_2_dataout; + int m_cat702_dataout[2]; int m_znmcu_dataout; }; @@ -466,9 +459,9 @@ WRITE8_MEMBER(taitogn_state::control_w) // assume that this also readys the sound flash chips m_pgmflash->write(0, 0xff); - m_sndflash0->write(0, 0xff); - m_sndflash1->write(0, 0xff); - m_sndflash2->write(0, 0xff); + m_sndflash[0]->write(0, 0xff); + m_sndflash[1]->write(0, 0xff); + m_sndflash[2]->write(0, 0xff); } } @@ -540,8 +533,8 @@ READ8_MEMBER(taitogn_state::znsecsel_r) WRITE8_MEMBER(taitogn_state::znsecsel_w) { - m_cat702_1->write_select(BIT(data, 2)); - m_cat702_2->write_select(BIT(data, 3)); + 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? @@ -594,13 +587,13 @@ READ8_MEMBER(taitogn_state::gnet_mahjong_panel_r) READ32_MEMBER(taitogn_state::zsg2_ext_r) { - offset *= 2; + offset <<= 1; switch (offset & 0x300000) { - case 0x000000: return m_sndflash0->read(offset) | m_sndflash0->read(offset | 1) << 16; - case 0x100000: return m_sndflash1->read(offset & 0xfffff) | m_sndflash1->read((offset & 0xfffff) | 1) << 16; - case 0x200000: return m_sndflash2->read(offset & 0xfffff) | m_sndflash2->read((offset & 0xfffff) | 1) << 16; + case 0x000000: + case 0x100000: + case 0x200000: return m_sndflash[offset >> 20]->read(offset & 0xfffff) | m_sndflash[offset >> 20]->read((offset & 0xfffff) | 1) << 16; default: break; @@ -616,8 +609,7 @@ void taitogn_state::machine_start() save_item(NAME(m_v)); save_item(NAME(m_n_znsecsel)); save_item(NAME(m_coin_info)); - save_item(NAME(m_cat702_1_dataout)); - save_item(NAME(m_cat702_2_dataout)); + save_item(NAME(m_cat702_dataout)); save_item(NAME(m_znmcu_dataout)); } @@ -670,9 +662,9 @@ void taitogn_state::flashbank_map(address_map &map) map(0x00300000, 0x0037ffff).rw(m_pgmflash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); // Bank 1 & 3 has access to the 3 samples flashes - map(0x08000000, 0x081fffff).mirror(0x10000000).rw(m_sndflash0, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); - map(0x08200000, 0x083fffff).mirror(0x10000000).rw(m_sndflash1, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); - map(0x08400000, 0x085fffff).mirror(0x10000000).rw(m_sndflash2, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); + map(0x08000000, 0x081fffff).mirror(0x10000000).rw(m_sndflash[0], FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); + map(0x08200000, 0x083fffff).mirror(0x10000000).rw(m_sndflash[1], FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); + map(0x08400000, 0x085fffff).mirror(0x10000000).rw(m_sndflash[2], FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write)); // Bank 2 has access to the sub-bios, the mn102 flash and the mask eprom map(0x10000000, 0x100fffff).rom().region("bioseprom", 0);