diff options
author | Vas Crabb <vas@vastheman.com> | 2021-08-29 23:39:43 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2021-08-29 23:39:43 +1000 |
commit | a10ce5e161db54c98ef8255bf43132f9bc745d9e (patch) | |
tree | b5bbc33149ea920ee1339e34884ec87e5f54d480 | |
parent | c833c1e2ed65496c29e1d8370f1de8db422b160d (diff) |
Miscellaneous clean-up.
* play_1.cpp: Use output finders.
* s3.cpp, s4.cpp, s6.cpp, s6a.cpp: Use output finders, reduced tag
lookups.
* taito_z.cpp: Use output finders, split up state class a little.
* util/unzip.cpp: Use std::optional to make code clearer.
* util/ioprocsfilter.cpp: Work around MSVC DevCom-1516410.
-rw-r--r-- | src/lib/util/ioprocsfilter.cpp | 4 | ||||
-rw-r--r-- | src/lib/util/unzip.cpp | 42 | ||||
-rw-r--r-- | src/mame/drivers/play_1.cpp | 37 | ||||
-rw-r--r-- | src/mame/drivers/s3.cpp | 280 | ||||
-rw-r--r-- | src/mame/drivers/s4.cpp | 304 | ||||
-rw-r--r-- | src/mame/drivers/s6.cpp | 108 | ||||
-rw-r--r-- | src/mame/drivers/s6a.cpp | 78 | ||||
-rw-r--r-- | src/mame/drivers/taito_z.cpp | 484 | ||||
-rw-r--r-- | src/mame/drivers/wpc_95.cpp | 18 | ||||
-rw-r--r-- | src/mame/includes/taito_z.h | 332 | ||||
-rw-r--r-- | src/mame/machine/midyunit.cpp | 28 | ||||
-rw-r--r-- | src/mame/video/taito_z.cpp | 50 |
12 files changed, 988 insertions, 777 deletions
diff --git a/src/lib/util/ioprocsfilter.cpp b/src/lib/util/ioprocsfilter.cpp index da67b8c41f2..b25c0493ab1 100644 --- a/src/lib/util/ioprocsfilter.cpp +++ b/src/lib/util/ioprocsfilter.cpp @@ -105,7 +105,9 @@ private: class inflate_data : private zlib_data { protected: - using zlib_data::zlib_data; + inflate_data(std::size_t buffer_size) noexcept : zlib_data(buffer_size) + { + } ~inflate_data() { diff --git a/src/lib/util/unzip.cpp b/src/lib/util/unzip.cpp index d7df8fa5ce9..1e18b4c2b7c 100644 --- a/src/lib/util/unzip.cpp +++ b/src/lib/util/unzip.cpp @@ -31,6 +31,7 @@ #include <cstdlib> #include <ctime> #include <mutex> +#include <optional> #include <ratio> #include <utility> #include <vector> @@ -210,12 +211,9 @@ public: std::chrono::system_clock::time_point current_last_modified() const noexcept { - if (!m_header.modified_cached) - { + if (!m_header.modified) m_header.modified = decode_dos_time(m_header.modified_date, m_header.modified_time); - m_header.modified_cached = true; - } - return m_header.modified; + return *m_header.modified; } std::uint32_t current_crc() const noexcept { return m_header.crc; } @@ -293,26 +291,29 @@ private: struct file_header { + private: + using optional_time_point = std::optional<std::chrono::system_clock::time_point>; + + public: file_header() noexcept { } file_header(file_header const &) = default; file_header(file_header &&) noexcept = default; file_header &operator=(file_header const &) = default; file_header &operator=(file_header &&) noexcept = default; - std::uint16_t version_created; // version made by - std::uint16_t version_needed; // version needed to extract - std::uint16_t bit_flag; // general purpose bit flag - std::uint16_t compression; // compression method - mutable std::chrono::system_clock::time_point modified; // last mod file date/time - std::uint32_t crc; // crc-32 - std::uint64_t compressed_length; // compressed size - std::uint64_t uncompressed_length; // uncompressed size - std::uint32_t start_disk_number; // disk number start - std::uint64_t local_header_offset; // relative offset of local header - std::string file_name; // file name - - std::uint16_t modified_date, modified_time; - mutable bool modified_cached; + std::uint16_t version_created; // version made by + std::uint16_t version_needed; // version needed to extract + std::uint16_t bit_flag; // general purpose bit flag + std::uint16_t compression; // compression method + mutable optional_time_point modified; // last mod file date/time + std::uint32_t crc; // crc-32 + std::uint64_t compressed_length; // compressed size + std::uint64_t uncompressed_length; // uncompressed size + std::uint32_t start_disk_number; // disk number start + std::uint64_t local_header_offset; // relative offset of local header + std::string file_name; // file name + + std::uint16_t modified_date, modified_time; }; // contains extracted end of central directory information @@ -798,7 +799,7 @@ int zip_file_impl::search(std::uint32_t search_crc, std::string_view search_file // don't immediately decode DOS timestamp - it's expensive header.modified_date = reader.modified_date(); header.modified_time = reader.modified_time(); - header.modified_cached = false; + header.modified = std::nullopt; // copy the filename bool is_utf8(general_flag_reader(header.bit_flag).utf8_encoding()); @@ -850,7 +851,6 @@ int zip_file_impl::search(std::uint32_t search_crc, std::string_view search_file try { header.modified = system_clock_time_point_from_ntfs_duration(ticks); - header.modified_cached = true; } catch (...) { diff --git a/src/mame/drivers/play_1.cpp b/src/mame/drivers/play_1.cpp index 6861e4b9235..1d537309231 100644 --- a/src/mame/drivers/play_1.cpp +++ b/src/mame/drivers/play_1.cpp @@ -30,6 +30,8 @@ Others: When starting the game, hold down X, then release and hit Z, otherwise #include "play_1.lh" +namespace { + class play_1_state : public genpin_class { public: @@ -39,11 +41,17 @@ public: , m_dips(*this, "X.%u", 0) , m_monotone(*this, "monotone") , m_digits(*this, "digit%u", 0U) + , m_leds(*this, "led%u", 1U) + , m_player_lamps(*this, "text%u", 1U) { } void chance(machine_config &config); void play_1(machine_config &config); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: uint8_t port07_r(); void port01_w(uint8_t data); @@ -69,12 +77,12 @@ private: uint8_t m_segment; uint8_t m_match; uint8_t m_ball; - virtual void machine_reset() override; - virtual void machine_start() override { m_digits.resolve(); } required_device<cosmac_device> m_maincpu; required_ioport_array<4> m_dips; required_device<clock_device> m_monotone; output_finder<46> m_digits; + output_finder<5> m_leds; + output_finder<4> m_player_lamps; }; void play_1_state::play_1_map(address_map &map) @@ -254,6 +262,13 @@ static INPUT_PORTS_START( spcgambl ) INPUT_PORTS_END +void play_1_state::machine_start() +{ + m_digits.resolve(); + m_leds.resolve(); + m_player_lamps.resolve(); +} + void play_1_state::machine_reset() { m_waitcnt = 0xffff; @@ -337,13 +352,9 @@ void play_1_state::port03_w(uint8_t data) // display player number { - char wordnum[8]; uint8_t player = m_segment >> 5; for (uint8_t i = 1; i < 5; i++) - { - sprintf(wordnum,"text%d", i); - output().set_value(wordnum, (player == i) ? 0:1); - } + m_player_lamps[i - 1] = (player == i) ? 0 : 1; } break; case 2: @@ -461,11 +472,11 @@ WRITE_LINE_MEMBER( play_1_state::clock_w ) else { m_digits[43] = m_match; - output().set_value("led1", !BIT(m_ball, 1)); - output().set_value("led2", !BIT(m_ball, 2)); - output().set_value("led3", !BIT(m_ball, 3)); - output().set_value("led4", !BIT(m_ball, 4)); - output().set_value("led5", !BIT(m_ball, 5)); + m_leds[0] = !BIT(m_ball, 1); + m_leds[1] = !BIT(m_ball, 2); + m_leds[2] = !BIT(m_ball, 3); + m_leds[3] = !BIT(m_ball, 4); + m_leds[4] = !BIT(m_ball, 5); } } } @@ -568,6 +579,8 @@ ROM_START(ngtfever) ROM_LOAD("nfeverb.bin", 0x0400, 0x0400, CRC(5e2ba9c0) SHA1(abd285aa5702c7fb84257b4341f64ff83c1fc0ce)) ROM_END +} // anonymous namespace + /* Big Town, Last Lap, Night Fever, Party and Third World all reportedly share the same roms with different playfield/machine artworks */ GAME(1978, bigtown, 0, play_1, play_1, play_1_state, empty_init, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/s3.cpp b/src/mame/drivers/s3.cpp index c8d53f57291..c707715d8a1 100644 --- a/src/mame/drivers/s3.cpp +++ b/src/mame/drivers/s3.cpp @@ -57,69 +57,95 @@ public: s3_state(const machine_config &mconfig, device_type type, const char *tag) : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") , m_pia22(*this, "pia22") , m_pia24(*this, "pia24") , m_pia28(*this, "pia28") , m_pia30(*this, "pia30") - , m_pias(*this, "pias") , m_digits(*this, "digit%u", 0U) + , m_leds(*this, "led%u", 0U) , m_swarray(*this, "SW.%u", 0U) - { } + , m_dips(*this, "DS%u", 1U) + { + } - void s3a(machine_config &config); void s3(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(main_nmi); - DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); protected: - virtual void machine_start() override { m_digits.resolve(); m_strobe = 0; } + virtual void machine_start() override; + virtual void machine_reset() override; + + required_device<cpu_device> m_maincpu; + required_device<pia6821_device> m_pia22; + required_device<pia6821_device> m_pia24; + required_device<pia6821_device> m_pia28; + required_device<pia6821_device> m_pia30; private: - uint8_t sound_r(); void dig0_w(uint8_t data); void dig1_w(uint8_t data); void lamp0_w(uint8_t data); void lamp1_w(uint8_t data); void sol0_w(uint8_t data); - void sol1_w(uint8_t data); + void sol1_chimes_w(uint8_t data); uint8_t dips_r(); uint8_t switch_r(); void switch_w(uint8_t data); - DECLARE_READ_LINE_MEMBER(pia28_ca1_r); - DECLARE_READ_LINE_MEMBER(pia28_cb1_r); - DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { }; //ST5 - DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { }; //ST-solenoids enable - DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { }; //ST2 - DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; //ST1 - DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; //diag leds enable - DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; //ST6 - DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { }; //ST4 - DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { }; //ST3 + DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5 + DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable + DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2 + DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1 + DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable + DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6 + DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4 + DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3 TIMER_DEVICE_CALLBACK_MEMBER(irq); - DECLARE_MACHINE_RESET(s3); - DECLARE_MACHINE_RESET(s3a); - void s3_audio_map(address_map &map); void s3_main_map(address_map &map); + output_finder<32> m_digits; + output_finder<2> m_leds; + required_ioport_array<8> m_swarray; + required_ioport_array<2> m_dips; + uint8_t m_t_c; - uint8_t m_sound_data; uint8_t m_strobe; uint8_t m_switch_col; bool m_data_ok; - bool m_chimes; - required_device<cpu_device> m_maincpu; - optional_device<cpu_device> m_audiocpu; - required_device<pia6821_device> m_pia22; - required_device<pia6821_device> m_pia24; - required_device<pia6821_device> m_pia28; - required_device<pia6821_device> m_pia30; - optional_device<pia6821_device> m_pias; - output_finder<32> m_digits; - required_ioport_array<8> m_swarray; }; + +class s3a_state : public s3_state +{ +public: + s3a_state(const machine_config &mconfig, device_type type, const char *tag) + : s3_state(mconfig, type, tag) + , m_audiocpu(*this, "audiocpu") + , m_pias(*this, "pias") + , m_io_snd(*this, "SND") + { + } + + void s3a(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); + +protected: + required_device<cpu_device> m_audiocpu; + required_device<pia6821_device> m_pias; + +private: + uint8_t sound_r(); + void s3a_sol1_w(uint8_t data); + + void s3_audio_map(address_map &map); + + required_ioport m_io_snd; + + uint8_t m_sound_data; +}; + + void s3_state::s3_main_map(address_map &map) { map.global_mask(0x7fff); @@ -132,13 +158,14 @@ void s3_state::s3_main_map(address_map &map) map(0x6000, 0x7fff).rom().region("roms", 0); } -void s3_state::s3_audio_map(address_map &map) +void s3a_state::s3_audio_map(address_map &map) { map.global_mask(0xfff); map(0x0400, 0x0403).rw(m_pias, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sounds map(0x0800, 0x0fff).rom().region("audioroms", 0); } + static INPUT_PORTS_START( s3 ) PORT_START("SW.0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_TILT ) // 3 touches before it tilts @@ -206,12 +233,7 @@ static INPUT_PORTS_START( s3 ) PORT_START("SW.7") PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_START("SND") - PORT_BIT( 0xbf, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Music") PORT_CODE(KEYCODE_2_PAD) PORT_TOGGLE - PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s3_state, audio_nmi, 1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s3_state, main_nmi, 1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_5_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Manual/Auto") PORT_CODE(KEYCODE_6_PAD) @@ -277,16 +299,29 @@ static INPUT_PORTS_START( s3 ) PORT_DIPSETTING( 0x07, "31" ) INPUT_PORTS_END -MACHINE_RESET_MEMBER( s3_state, s3 ) +static INPUT_PORTS_START( s3a ) + PORT_INCLUDE(s3) + + PORT_START("SND") + PORT_BIT( 0xbf, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Music") PORT_CODE(KEYCODE_2_PAD) PORT_TOGGLE + + PORT_MODIFY("DIAGS") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s3a_state, audio_nmi, 1) +INPUT_PORTS_END + + +void s3_state::machine_start() { - m_t_c = 0; - m_chimes = 1; + m_digits.resolve(); + m_leds.resolve(); + + m_strobe = 0; } -MACHINE_RESET_MEMBER( s3_state, s3a ) +void s3_state::machine_reset() { m_t_c = 0; - m_chimes = 0; } INPUT_CHANGED_MEMBER( s3_state::main_nmi ) @@ -296,10 +331,10 @@ INPUT_CHANGED_MEMBER( s3_state::main_nmi ) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -INPUT_CHANGED_MEMBER( s3_state::audio_nmi ) +INPUT_CHANGED_MEMBER( s3a_state::audio_nmi ) { // Diagnostic button sends a pulse to NMI pin - if ((newval==CLEAR_LINE) && !m_chimes) + if (newval==CLEAR_LINE) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -309,47 +344,48 @@ void s3_state::sol0_w(uint8_t data) m_samples->start(5, 5); // outhole } -void s3_state::sol1_w(uint8_t data) +void s3_state::sol1_chimes_w(uint8_t data) { - if (m_chimes) - { - if (BIT(data, 0)) - m_samples->start(1, 1); // 10 chime + if (BIT(data, 0)) + m_samples->start(1, 1); // 10 chime - if (BIT(data, 1)) - m_samples->start(2, 2); // 100 chime + if (BIT(data, 1)) + m_samples->start(2, 2); // 100 chime - if (BIT(data, 2)) - m_samples->start(3, 3); // 1000 chime + if (BIT(data, 2)) + m_samples->start(3, 3); // 1000 chime - if (BIT(data, 3)) - m_samples->start(4, 4); // 10k chime - } - else - { - uint8_t sound_data = ioport("SND")->read(); // 0xff or 0xbf - if (BIT(data, 0)) - sound_data &= 0xfe; + if (BIT(data, 3)) + m_samples->start(4, 4); // 10k chime - if (BIT(data, 1)) - sound_data &= 0xfd; + if (BIT(data, 5)) + m_samples->start(0, 6); // knocker +} - if (BIT(data, 2)) - sound_data &= 0xfb; +void s3a_state::s3a_sol1_w(uint8_t data) +{ + uint8_t sound_data = m_io_snd->read(); // 0xff or 0xbf + if (BIT(data, 0)) + sound_data &= 0xfe; - if (BIT(data, 3)) - sound_data &= 0xf7; + if (BIT(data, 1)) + sound_data &= 0xfd; - if (BIT(data, 4)) - sound_data &= 0xef; + if (BIT(data, 2)) + sound_data &= 0xfb; - bool cb1 = ((sound_data & 0xbf) != 0xbf); + if (BIT(data, 3)) + sound_data &= 0xf7; - if (cb1) - m_sound_data = sound_data; + if (BIT(data, 4)) + sound_data &= 0xef; - m_pias->cb1_w(cb1); - } + bool cb1 = ((sound_data & 0xbf) != 0xbf); + + if (cb1) + m_sound_data = sound_data; + + m_pias->cb1_w(cb1); if (BIT(data, 5)) m_samples->start(0, 6); // knocker @@ -364,32 +400,11 @@ void s3_state::lamp1_w(uint8_t data) { } -READ_LINE_MEMBER( s3_state::pia28_ca1_r ) -{ - return BIT(ioport("DIAGS")->read(), 2); // advance button -} - -READ_LINE_MEMBER( s3_state::pia28_cb1_r ) -{ - return BIT(ioport("DIAGS")->read(), 3); // auto/manual switch -} - uint8_t s3_state::dips_r() { - if (BIT(ioport("DIAGS")->read(), 4) ) - { - switch (m_strobe) - { - case 0: - return ioport("DS2")->read(); - case 1: - return ioport("DS2")->read() << 4; - case 2: - return ioport("DS1")->read(); - case 3: - return ioport("DS1")->read() << 4; - } - } + if (BIT(ioport("DIAGS")->read(), 4)) + return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0); + return 0xff; } @@ -397,8 +412,8 @@ void s3_state::dig0_w(uint8_t data) { m_strobe = data & 15; m_data_ok = true; - output().set_value("led0", !BIT(data, 4)); - output().set_value("led1", !BIT(data, 5)); + m_leds[0] = !BIT(data, 4); + m_leds[1] = !BIT(data, 5); } void s3_state::dig1_w(uint8_t data) @@ -431,7 +446,7 @@ void s3_state::switch_w(uint8_t data) m_switch_col = data; } -uint8_t s3_state::sound_r() +uint8_t s3a_state::sound_r() { return m_sound_data; } @@ -446,46 +461,45 @@ TIMER_DEVICE_CALLBACK_MEMBER( s3_state::irq ) void s3_state::s3(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware M6800(config, m_maincpu, 3580000); m_maincpu->set_addrmap(AS_PROGRAM, &s3_state::s3_main_map); TIMER(config, "irq").configure_periodic(FUNC(s3_state::irq), attotime::from_hz(250)); - MCFG_MACHINE_RESET_OVERRIDE(s3_state, s3) - /* Video */ + // Video config.set_default_layout(layout_s3); - /* Sound */ + // Sound genpin_audio(config); - /* Devices */ + // Devices PIA6821(config, m_pia22, 0); m_pia22->writepa_handler().set(FUNC(s3_state::sol0_w)); - m_pia22->writepb_handler().set(FUNC(s3_state::sol1_w)); + m_pia22->writepb_handler().set(FUNC(s3_state::sol1_chimes_w)); m_pia22->ca2_handler().set(FUNC(s3_state::pia22_ca2_w)); m_pia22->cb2_handler().set(FUNC(s3_state::pia22_cb2_w)); - m_pia22->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia22->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia22->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia22->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia24, 0); m_pia24->writepa_handler().set(FUNC(s3_state::lamp0_w)); m_pia24->writepb_handler().set(FUNC(s3_state::lamp1_w)); m_pia24->ca2_handler().set(FUNC(s3_state::pia24_ca2_w)); m_pia24->cb2_handler().set(FUNC(s3_state::pia24_cb2_w)); - m_pia24->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia24->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia24->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia24->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia28, 0); m_pia28->readpa_handler().set(FUNC(s3_state::dips_r)); m_pia28->set_port_a_input_overrides_output_mask(0xff); - m_pia28->readca1_handler().set(FUNC(s3_state::pia28_ca1_r)); - m_pia28->readcb1_handler().set(FUNC(s3_state::pia28_cb1_r)); + m_pia28->readca1_handler().set_ioport("DIAGS").bit(2); // advance button + m_pia28->readcb1_handler().set_ioport("DIAGS").bit(3); // auto/manual switch m_pia28->writepa_handler().set(FUNC(s3_state::dig0_w)); m_pia28->writepb_handler().set(FUNC(s3_state::dig1_w)); m_pia28->ca2_handler().set(FUNC(s3_state::pia28_ca2_w)); m_pia28->cb2_handler().set(FUNC(s3_state::pia28_cb2_w)); - m_pia28->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia28->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia28->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia28->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia30, 0); m_pia30->readpa_handler().set(FUNC(s3_state::switch_r)); @@ -493,28 +507,30 @@ void s3_state::s3(machine_config &config) m_pia30->writepb_handler().set(FUNC(s3_state::switch_w)); m_pia30->ca2_handler().set(FUNC(s3_state::pia30_ca2_w)); m_pia30->cb2_handler().set(FUNC(s3_state::pia30_cb2_w)); - m_pia30->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia30->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia30->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia30->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } -void s3_state::s3a(machine_config &config) +void s3a_state::s3a(machine_config &config) { s3(config); - /* Add the soundcard */ + + m_pia22->writepb_handler().set(FUNC(s3a_state::s3a_sol1_w)); + + // Add the soundcard M6802(config, m_audiocpu, 3580000); - m_audiocpu->set_addrmap(AS_PROGRAM, &s3_state::s3_audio_map); - MCFG_MACHINE_RESET_OVERRIDE(s3_state, s3a) + m_audiocpu->set_addrmap(AS_PROGRAM, &s3a_state::s3_audio_map); SPEAKER(config, "speaker").front_center(); MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); PIA6821(config, m_pias, 0); - m_pias->readpb_handler().set(FUNC(s3_state::sound_r)); + m_pias->readpb_handler().set(FUNC(s3a_state::sound_r)); m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); - m_pias->irqa_handler().set_inputline("audiocpu", M6802_IRQ_LINE); - m_pias->irqb_handler().set_inputline("audiocpu", M6802_IRQ_LINE); + m_pias->irqa_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); + m_pias->irqb_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); } @@ -608,10 +624,10 @@ ROM_END } // Anonymous namespace -GAME( 1977, httip_l1, 0, s3, s3, s3_state, empty_init, ROT0, "Williams", "Hot Tip (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1977, lucky_l1, 0, s3, s3, s3_state, empty_init, ROT0, "Williams", "Lucky Seven (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, wldcp_l1, 0, s3a, s3, s3_state, empty_init, ROT0, "Williams", "World Cup (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, cntct_l1, 0, s3a, s3, s3_state, empty_init, ROT0, "Williams", "Contact (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, disco_l1, 0, s3a, s3, s3_state, empty_init, ROT0, "Williams", "Disco Fever (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, phnix_l1, 0, s3a, s3, s3_state, empty_init, ROT0, "Williams", "Phoenix (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, pkrno_l1, 0, s3a, s3, s3_state, empty_init, ROT0, "Williams", "Pokerino (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1977, httip_l1, 0, s3, s3, s3_state, empty_init, ROT0, "Williams", "Hot Tip (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1977, lucky_l1, 0, s3, s3, s3_state, empty_init, ROT0, "Williams", "Lucky Seven (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, wldcp_l1, 0, s3a, s3a, s3a_state, empty_init, ROT0, "Williams", "World Cup (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, cntct_l1, 0, s3a, s3a, s3a_state, empty_init, ROT0, "Williams", "Contact (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, disco_l1, 0, s3a, s3a, s3a_state, empty_init, ROT0, "Williams", "Disco Fever (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, phnix_l1, 0, s3a, s3a, s3a_state, empty_init, ROT0, "Williams", "Phoenix (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, pkrno_l1, 0, s3a, s3a, s3a_state, empty_init, ROT0, "Williams", "Pokerino (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/s4.cpp b/src/mame/drivers/s4.cpp index bad163eaba8..9ce31fb2145 100644 --- a/src/mame/drivers/s4.cpp +++ b/src/mame/drivers/s4.cpp @@ -5,7 +5,7 @@ PINBALL Williams System 4 - Phoenix and Pokerino are listed as System 4 systems, but use System 3 roms. + Phoenix and Pokerino are listed as System 4 systems, but use System 3 ROMs. They have been moved to s3.cpp, and are working there. The "Shuffle" games consist of a flat board with an air-driven puck and 10 @@ -51,69 +51,95 @@ public: s4_state(const machine_config &mconfig, device_type type, const char *tag) : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") , m_pia22(*this, "pia22") , m_pia24(*this, "pia24") , m_pia28(*this, "pia28") , m_pia30(*this, "pia30") - , m_pias(*this, "pias") , m_digits(*this, "digit%u", 0U) + , m_leds(*this, "led%u", 0U) , m_swarray(*this, "SW.%u", 0U) - { } + , m_dips(*this, "DS%u", 1U) + { + } void s4(machine_config &config); - void s4a(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(main_nmi); - DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); protected: - virtual void machine_start() override { m_digits.resolve(); m_strobe = 0; } + virtual void machine_start() override; + virtual void machine_reset() override; + + required_device<cpu_device> m_maincpu; + required_device<pia6821_device> m_pia22; + required_device<pia6821_device> m_pia24; + required_device<pia6821_device> m_pia28; + required_device<pia6821_device> m_pia30; private: - uint8_t sound_r(); void dig0_w(uint8_t data); void dig1_w(uint8_t data); void lamp0_w(uint8_t data); void lamp1_w(uint8_t data); void sol0_w(uint8_t data); - void sol1_w(uint8_t data); + void sol1_chimes_w(uint8_t data); uint8_t dips_r(); uint8_t switch_r(); void switch_w(uint8_t data); - DECLARE_READ_LINE_MEMBER(pia28_ca1_r); - DECLARE_READ_LINE_MEMBER(pia28_cb1_r); - DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { }; //ST5 - DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { }; //ST-solenoids enable - DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { }; //ST2 - DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; //ST1 - DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; //diag leds enable - DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; //ST6 - DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { }; //ST4 - DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { }; //ST3 + DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5 + DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable + DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2 + DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1 + DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable + DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6 + DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4 + DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3 TIMER_DEVICE_CALLBACK_MEMBER(irq); - DECLARE_MACHINE_RESET(s4); - DECLARE_MACHINE_RESET(s4a); - void s4_audio_map(address_map &map); void s4_main_map(address_map &map); + output_finder<32> m_digits; + output_finder<2> m_leds; + required_ioport_array<8> m_swarray; + required_ioport_array<2> m_dips; + uint8_t m_t_c; - uint8_t m_sound_data; uint8_t m_strobe; uint8_t m_switch_col; bool m_data_ok; - bool m_chimes; - required_device<cpu_device> m_maincpu; - optional_device<cpu_device> m_audiocpu; - required_device<pia6821_device> m_pia22; - required_device<pia6821_device> m_pia24; - required_device<pia6821_device> m_pia28; - required_device<pia6821_device> m_pia30; - optional_device<pia6821_device> m_pias; - output_finder<32> m_digits; - required_ioport_array<8> m_swarray; }; + +class s4a_state : public s4_state +{ +public: + s4a_state(const machine_config &mconfig, device_type type, const char *tag) + : s4_state(mconfig, type, tag) + , m_audiocpu(*this, "audiocpu") + , m_pias(*this, "pias") + , m_io_snd(*this, "SND") + { + } + + void s4a(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); + +protected: + required_device<cpu_device> m_audiocpu; + required_device<pia6821_device> m_pias; + +private: + uint8_t sound_r(); + void s4a_sol1_w(uint8_t data); + + void s4_audio_map(address_map &map); + + required_ioport m_io_snd; + + uint8_t m_sound_data; +}; + + void s4_state::s4_main_map(address_map &map) { map.global_mask(0x7fff); @@ -126,7 +152,7 @@ void s4_state::s4_main_map(address_map &map) map(0x6000, 0x7fff).rom().region("roms", 0); } -void s4_state::s4_audio_map(address_map &map) +void s4a_state::s4_audio_map(address_map &map) { map.global_mask(0x0fff); map(0x0000, 0x00ff).ram(); @@ -134,6 +160,7 @@ void s4_state::s4_audio_map(address_map &map) map(0x0800, 0x0fff).rom().region("audioroms", 0); } + static INPUT_PORTS_START( s4 ) PORT_START("SW.0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) @@ -201,12 +228,7 @@ static INPUT_PORTS_START( s4 ) PORT_START("SW.7") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("SND") - PORT_BIT( 0xbf, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Music") PORT_CODE(KEYCODE_2_PAD) PORT_TOGGLE - PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s4_state, audio_nmi, 1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s4_state, main_nmi, 1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Advance") PORT_CODE(KEYCODE_5_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Manual/Auto") PORT_CODE(KEYCODE_6_PAD) @@ -272,16 +294,29 @@ static INPUT_PORTS_START( s4 ) PORT_DIPSETTING( 0x07, "31" ) INPUT_PORTS_END -MACHINE_RESET_MEMBER( s4_state, s4 ) +static INPUT_PORTS_START( s4a ) + PORT_INCLUDE(s4) + + PORT_START("SND") + PORT_BIT( 0xbf, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Music") PORT_CODE(KEYCODE_2_PAD) PORT_TOGGLE + + PORT_MODIFY("DIAGS") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s4a_state, audio_nmi, 1) +INPUT_PORTS_END + + +void s4_state::machine_start() { - m_t_c = 0; - m_chimes = 1; + m_digits.resolve(); + m_leds.resolve(); + + m_strobe = 0; } -MACHINE_RESET_MEMBER( s4_state, s4a ) +void s4_state::machine_reset() { m_t_c = 0; - m_chimes = 0; } INPUT_CHANGED_MEMBER( s4_state::main_nmi ) @@ -291,10 +326,10 @@ INPUT_CHANGED_MEMBER( s4_state::main_nmi ) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -INPUT_CHANGED_MEMBER( s4_state::audio_nmi ) +INPUT_CHANGED_MEMBER( s4a_state::audio_nmi ) { // Diagnostic button sends a pulse to NMI pin - if ((newval==CLEAR_LINE) && !m_chimes) + if (newval==CLEAR_LINE) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -304,47 +339,48 @@ void s4_state::sol0_w(uint8_t data) m_samples->start(2, 5); // outhole } -void s4_state::sol1_w(uint8_t data) +void s4_state::sol1_chimes_w(uint8_t data) { - if (m_chimes) - { - if (BIT(data, 0)) - m_samples->start(1, 1); // 10 chime + if (BIT(data, 0)) + m_samples->start(1, 1); // 10 chime - if (BIT(data, 1)) - m_samples->start(2, 2); // 100 chime + if (BIT(data, 1)) + m_samples->start(2, 2); // 100 chime - if (BIT(data, 2)) - m_samples->start(3, 3); // 1000 chime + if (BIT(data, 2)) + m_samples->start(3, 3); // 1000 chime - if (BIT(data, 3)) - m_samples->start(1, 4); // 10k chime - } - else - { - uint8_t sound_data = ioport("SND")->read(); - if (BIT(data, 0)) - sound_data &= 0xfe; + if (BIT(data, 3)) + m_samples->start(1, 4); // 10k chime - if (BIT(data, 1)) - sound_data &= 0xfd; + if (BIT(data, 5)) + m_samples->start(0, 6); // knocker +} - if (BIT(data, 2)) - sound_data &= 0xfb; +void s4a_state::s4a_sol1_w(uint8_t data) +{ + uint8_t sound_data = m_io_snd->read(); // 0xff or 0xbf + if (BIT(data, 0)) + sound_data &= 0xfe; - if (BIT(data, 3)) - sound_data &= 0xf7; + if (BIT(data, 1)) + sound_data &= 0xfd; - if (BIT(data, 4)) - sound_data &= 0xef; + if (BIT(data, 2)) + sound_data &= 0xfb; - bool cb1 = ((sound_data & 0xbf) != 0xbf); + if (BIT(data, 3)) + sound_data &= 0xf7; - if (cb1) - m_sound_data = sound_data; + if (BIT(data, 4)) + sound_data &= 0xef; - m_pias->cb1_w(cb1); - } + bool cb1 = ((sound_data & 0xbf) != 0xbf); + + if (cb1) + m_sound_data = sound_data; + + m_pias->cb1_w(cb1); if (BIT(data, 5)) m_samples->start(0, 6); // knocker @@ -359,32 +395,11 @@ void s4_state::lamp1_w(uint8_t data) { } -READ_LINE_MEMBER( s4_state::pia28_ca1_r ) -{ - return BIT(ioport("DIAGS")->read(), 2); // advance button -} - -READ_LINE_MEMBER( s4_state::pia28_cb1_r ) -{ - return BIT(ioport("DIAGS")->read(), 3); // auto/manual switch -} - uint8_t s4_state::dips_r() { - if (BIT(ioport("DIAGS")->read(), 4) ) - { - switch (m_strobe) - { - case 0: - return ioport("DS2")->read(); - case 1: - return ioport("DS2")->read() << 4; - case 2: - return ioport("DS1")->read(); - case 3: - return ioport("DS1")->read() << 4; - } - } + if (BIT(ioport("DIAGS")->read(), 4)) + return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0); + return 0xff; } @@ -392,8 +407,8 @@ void s4_state::dig0_w(uint8_t data) { m_strobe = data & 15; m_data_ok = true; - output().set_value("led0", !BIT(data, 4)); - output().set_value("led1", !BIT(data, 5)); + m_leds[0] = !BIT(data, 4); + m_leds[1] = !BIT(data, 5); } void s4_state::dig1_w(uint8_t data) @@ -426,7 +441,7 @@ void s4_state::switch_w(uint8_t data) m_switch_col = data; } -uint8_t s4_state::sound_r() +uint8_t s4a_state::sound_r() { return m_sound_data; } @@ -441,46 +456,45 @@ TIMER_DEVICE_CALLBACK_MEMBER( s4_state::irq ) void s4_state::s4(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware M6800(config, m_maincpu, 3580000); m_maincpu->set_addrmap(AS_PROGRAM, &s4_state::s4_main_map); TIMER(config, "irq").configure_periodic(FUNC(s4_state::irq), attotime::from_hz(250)); - MCFG_MACHINE_RESET_OVERRIDE(s4_state, s4) - /* Video */ + // Video config.set_default_layout(layout_s4); - /* Sound */ + // Sound genpin_audio(config); - /* Devices */ + // Devices PIA6821(config, m_pia22, 0); m_pia22->writepa_handler().set(FUNC(s4_state::sol0_w)); - m_pia22->writepb_handler().set(FUNC(s4_state::sol1_w)); + m_pia22->writepb_handler().set(FUNC(s4_state::sol1_chimes_w)); m_pia22->ca2_handler().set(FUNC(s4_state::pia22_ca2_w)); m_pia22->cb2_handler().set(FUNC(s4_state::pia22_cb2_w)); - m_pia22->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia22->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia22->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia22->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia24, 0); m_pia24->writepa_handler().set(FUNC(s4_state::lamp0_w)); m_pia24->writepb_handler().set(FUNC(s4_state::lamp1_w)); m_pia24->ca2_handler().set(FUNC(s4_state::pia24_ca2_w)); m_pia24->cb2_handler().set(FUNC(s4_state::pia24_cb2_w)); - m_pia24->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia24->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia24->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia24->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia28, 0); m_pia28->readpa_handler().set(FUNC(s4_state::dips_r)); m_pia28->set_port_a_input_overrides_output_mask(0xff); - m_pia28->readca1_handler().set(FUNC(s4_state::pia28_ca1_r)); - m_pia28->readcb1_handler().set(FUNC(s4_state::pia28_cb1_r)); + m_pia28->readca1_handler().set_ioport("DIAGS").bit(2); // advance button + m_pia28->readcb1_handler().set_ioport("DIAGS").bit(3); // auto/manual switch m_pia28->writepa_handler().set(FUNC(s4_state::dig0_w)); m_pia28->writepb_handler().set(FUNC(s4_state::dig1_w)); m_pia28->ca2_handler().set(FUNC(s4_state::pia28_ca2_w)); m_pia28->cb2_handler().set(FUNC(s4_state::pia28_cb2_w)); - m_pia28->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia28->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia28->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia28->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); PIA6821(config, m_pia30, 0); m_pia30->readpa_handler().set(FUNC(s4_state::switch_r)); @@ -488,28 +502,30 @@ void s4_state::s4(machine_config &config) m_pia30->writepb_handler().set(FUNC(s4_state::switch_w)); m_pia30->ca2_handler().set(FUNC(s4_state::pia30_ca2_w)); m_pia30->cb2_handler().set(FUNC(s4_state::pia30_cb2_w)); - m_pia30->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); - m_pia30->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); + m_pia30->irqa_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); + m_pia30->irqb_handler().set_inputline(m_maincpu, M6800_IRQ_LINE); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } -void s4_state::s4a(machine_config &config) +void s4a_state::s4a(machine_config &config) { s4(config); - /* Add the soundcard */ + + m_pia22->writepb_handler().set(FUNC(s4a_state::s4a_sol1_w)); + + // Add the soundcard M6808(config, m_audiocpu, 3580000); - m_audiocpu->set_addrmap(AS_PROGRAM, &s4_state::s4_audio_map); - MCFG_MACHINE_RESET_OVERRIDE(s4_state, s4a) + m_audiocpu->set_addrmap(AS_PROGRAM, &s4a_state::s4_audio_map); SPEAKER(config, "speaker").front_center(); MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); PIA6821(config, m_pias, 0); - m_pias->readpb_handler().set(FUNC(s4_state::sound_r)); + m_pias->readpb_handler().set(FUNC(s4a_state::sound_r)); m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); - m_pias->irqa_handler().set_inputline("audiocpu", M6808_IRQ_LINE); - m_pias->irqb_handler().set_inputline("audiocpu", M6808_IRQ_LINE); + m_pias->irqa_handler().set_inputline(m_audiocpu, M6808_IRQ_LINE); + m_pias->irqb_handler().set_inputline(m_audiocpu, M6808_IRQ_LINE); } @@ -720,21 +736,21 @@ ROM_END } // Anonymous namespace -GAME( 1979, flash_l2, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Flash (Williams, L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, flash_l1, flash_l2, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Flash (Williams, L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, flash_t1, flash_l2, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Flash (Williams, T-1) Ted Estes", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, trizn_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Tri Zone (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1978, trizn_t1, trizn_l1, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Tri Zone (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, tmwrp_l3, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Time Warp (Williams, L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, tmwrp_l2, tmwrp_l3, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Time Warp (Williams, L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, tmwrp_t2, tmwrp_l3, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Time Warp (Williams, T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, stlwr_l2, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Stellar Wars (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) - -GAME( 1978, pomp_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Pompeii (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1978, arist_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Aristocrat (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1978, topaz_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Topaz (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1979, taurs_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Taurus (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1979, kingt_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "King Tut (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) -GAME( 1980, omni_l1, 0, s4a, s4, s4_state, empty_init, ROT0, "Williams", "Omni (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -GAME( 1983, bstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Big Strike (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -GAME( 1983, tstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Triple Strike (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME( 1979, flash_l2, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, flash_l1, flash_l2, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, flash_t1, flash_l2, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Flash (Williams, T-1) Ted Estes", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, trizn_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Tri Zone (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1978, trizn_t1, trizn_l1, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Tri Zone (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, tmwrp_l3, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Time Warp (Williams, L-3)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, tmwrp_l2, tmwrp_l3, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Time Warp (Williams, L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, tmwrp_t2, tmwrp_l3, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Time Warp (Williams, T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, stlwr_l2, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Stellar Wars (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) + +GAME( 1978, pomp_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Pompeii (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1978, arist_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Aristocrat (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1978, topaz_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Topaz (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1979, taurs_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Taurus (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1979, kingt_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "King Tut (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING) +GAME( 1980, omni_l1, 0, s4a, s4a, s4a_state, empty_init, ROT0, "Williams", "Omni (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME( 1983, bstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Big Strike (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME( 1983, tstrk_l1, 0, s4, s4, s4_state, empty_init, ROT0, "Williams", "Triple Strike (Shuffle) (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/s6.cpp b/src/mame/drivers/s6.cpp index dfac8da01b3..bed563cea26 100644 --- a/src/mame/drivers/s6.cpp +++ b/src/mame/drivers/s6.cpp @@ -58,6 +58,8 @@ ToDo: #include "s6.lh" +namespace { + class s6_state : public genpin_class { public: @@ -72,37 +74,41 @@ public: , m_pia28(*this, "pia28") , m_pia30(*this, "pia30") , m_digits(*this, "digit%u", 0U) + , m_leds(*this, "led%u", 0U) , m_swarray(*this, "SW.%u", 0U) + , m_dips(*this, "DS%u", 1U) + , m_io_snd(*this, "SND") { } void s6(machine_config &config); - void init_s6(); - DECLARE_INPUT_CHANGED_MEMBER(main_nmi); DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); +protected: + virtual void machine_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + private: uint8_t sound_r(); void dig0_w(uint8_t data); void dig1_w(uint8_t data); void lamp0_w(uint8_t data); void lamp1_w(uint8_t data); - uint8_t dips_r(); void sol0_w(uint8_t data); void sol1_w(uint8_t data); + uint8_t dips_r(); uint8_t switch_r(); void switch_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { }; //ST5 - DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { }; //ST-solenoids enable - DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { }; //ST2 - DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; //ST1 - DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; //diag leds enable - DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; //ST6 - DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { }; //ST4 - DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { }; //ST3 + DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5 + DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable + DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2 + DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1 + DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable + DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6 + DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4 + DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3 DECLARE_WRITE_LINE_MEMBER(pia_irq); - DECLARE_MACHINE_RESET(s6); void s6_audio_map(address_map &map); void s6_main_map(address_map &map); @@ -112,9 +118,7 @@ private: uint8_t m_switch_col; bool m_data_ok; emu_timer* m_irq_timer; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_IRQ = 0; - virtual void machine_start() override { m_digits.resolve(); } required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_device<hc55516_device> m_hc55516; @@ -124,7 +128,10 @@ private: required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia30; output_finder<61> m_digits; + output_finder<2> m_leds; required_ioport_array<8> m_swarray; + required_ioport_array<2> m_dips; + required_ioport m_io_snd; }; void s6_state::s6_main_map(address_map &map) @@ -269,7 +276,7 @@ void s6_state::sol0_w(uint8_t data) void s6_state::sol1_w(uint8_t data) { - uint8_t sound_data = ioport("SND")->read(); + uint8_t sound_data = m_io_snd->read(); if (BIT(data, 0)) sound_data &= 0xfe; @@ -306,20 +313,9 @@ void s6_state::lamp1_w(uint8_t data) uint8_t s6_state::dips_r() { - if (BIT(ioport("DIAGS")->read(), 4) ) - { - switch (m_strobe) - { - case 0: - return ioport("DS2")->read(); - case 1: - return ioport("DS2")->read() << 4; - case 2: - return ioport("DS1")->read(); - case 3: - return ioport("DS1")->read() << 4; - } - } + if (BIT(ioport("DIAGS")->read(), 4)) + return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0); + return 0xff; } @@ -327,8 +323,8 @@ void s6_state::dig0_w(uint8_t data) { m_strobe = data & 15; m_data_ok = true; - output().set_value("led0", !BIT(data, 4)); - output().set_value("led1", !BIT(data, 5)); + m_leds[0] = !BIT(data, 4); + m_leds[1] = !BIT(data, 5); } void s6_state::dig1_w(uint8_t data) @@ -381,6 +377,15 @@ WRITE_LINE_MEMBER( s6_state::pia_irq ) } } +void s6_state::machine_start() +{ + m_digits.resolve(); + m_leds.resolve(); + + m_irq_timer = timer_alloc(TIMER_IRQ); + m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1); +} + void s6_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch(id) @@ -404,22 +409,11 @@ void s6_state::device_timer(emu_timer &timer, device_timer_id id, int param, voi } } -MACHINE_RESET_MEMBER( s6_state, s6 ) -{ -} - -void s6_state::init_s6() -{ - m_irq_timer = timer_alloc(TIMER_IRQ); - m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1); -} - void s6_state::s6(machine_config &config) { /* basic machine hardware */ M6808(config, m_maincpu, 3580000); // 6802 or 6808 could be used here m_maincpu->set_addrmap(AS_PROGRAM, &s6_state::s6_main_map); - MCFG_MACHINE_RESET_OVERRIDE(s6_state, s6) /* Video */ config.set_default_layout(layout_s6); @@ -666,17 +660,19 @@ ROM_START(frpwr_l2) ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4)) ROM_END - -GAME( 1979, lzbal_l2, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, lzbal_l2sp, lzbal_l2, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, lzbal_t2, lzbal_l2, s6, s6, s6_state, init_s6, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, scrpn_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Scorpion (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, scrpn_t1, scrpn_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Scorpion (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, blkou_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, blkou_t1, blkou_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, blkou_f1, blkou_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, grgar_l1, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Gorgar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1979, grgar_t1, grgar_l1, s6, s6, s6_state, init_s6, ROT0, "Williams", "Gorgar (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, frpwr_l6, 0, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -GAME( 1980, frpwr_t6, frpwr_l6, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (T-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -GAME( 1980, frpwr_l2, frpwr_l6, s6, s6, s6_state, init_s6, ROT0, "Williams", "Firepower (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +} // anonymous namespace + + +GAME( 1979, lzbal_l2, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, lzbal_l2sp, lzbal_l2, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (L-2, PROM sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, lzbal_t2, lzbal_l2, s6, s6, s6_state, empty_init, ROT0, "Williams", "Laser Ball (T-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, scrpn_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Scorpion (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, scrpn_t1, scrpn_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Scorpion (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, blkou_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, blkou_t1, blkou_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, blkou_f1, blkou_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Blackout (L-1, French Speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, grgar_l1, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Gorgar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1979, grgar_t1, grgar_l1, s6, s6, s6_state, empty_init, ROT0, "Williams", "Gorgar (T-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, frpwr_l6, 0, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME( 1980, frpwr_t6, frpwr_l6, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (T-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME( 1980, frpwr_l2, frpwr_l6, s6, s6, s6_state, empty_init, ROT0, "Williams", "Firepower (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/s6a.cpp b/src/mame/drivers/s6a.cpp index 74dc6c70d29..0bd706fa643 100644 --- a/src/mame/drivers/s6a.cpp +++ b/src/mame/drivers/s6a.cpp @@ -67,18 +67,19 @@ public: , m_pia28(*this, "pia28") , m_pia30(*this, "pia30") , m_digits(*this, "digit%u", 0U) + , m_leds(*this, "led%u", 0U) , m_swarray(*this, "SW.%u", 0U) + , m_dips(*this, "DS%u", 1U) + , m_io_snd(*this, "SND") { } void s6a(machine_config &config); - void init_s6a(); - DECLARE_INPUT_CHANGED_MEMBER(main_nmi); DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); protected: - virtual void machine_start() override { m_digits.resolve(); } + virtual void machine_start() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: @@ -92,14 +93,14 @@ private: uint8_t dips_r(); uint8_t switch_r(); void switch_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { }; //ST5 - DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { }; //ST-solenoids enable - DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { }; //ST2 - DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; //ST1 - DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; //diag leds enable - DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; //ST6 - DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { }; //ST4 - DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { }; //ST3 + DECLARE_WRITE_LINE_MEMBER(pia22_ca2_w) { } //ST5 + DECLARE_WRITE_LINE_MEMBER(pia22_cb2_w) { } //ST-solenoids enable + DECLARE_WRITE_LINE_MEMBER(pia24_ca2_w) { } //ST2 + DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { } //ST1 + DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } //diag leds enable + DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } //ST6 + DECLARE_WRITE_LINE_MEMBER(pia30_ca2_w) { } //ST4 + DECLARE_WRITE_LINE_MEMBER(pia30_cb2_w) { } //ST3 DECLARE_WRITE_LINE_MEMBER(pia_irq); void s6a_audio_map(address_map &map); @@ -120,7 +121,10 @@ private: required_device<pia6821_device> m_pia28; required_device<pia6821_device> m_pia30; output_finder<32> m_digits; + output_finder<2> m_leds; required_ioport_array<8> m_swarray; + required_ioport_array<2> m_dips; + required_ioport m_io_snd; }; void s6a_state::s6a_main_map(address_map &map) @@ -255,7 +259,7 @@ void s6a_state::sol0_w(uint8_t data) void s6a_state::sol1_w(uint8_t data) { - uint8_t sound_data = ioport("SND")->read(); + uint8_t sound_data = m_io_snd->read(); if (BIT(data, 0)) sound_data &= 0xfe; @@ -292,20 +296,9 @@ void s6a_state::lamp1_w(uint8_t data) uint8_t s6a_state::dips_r() { - if (BIT(ioport("DIAGS")->read(), 4) ) - { - switch (m_strobe) - { - case 0: - return ioport("DS2")->read(); - case 1: - return ioport("DS2")->read() << 4; - case 2: - return ioport("DS1")->read(); - case 3: - return ioport("DS1")->read() << 4; - } - } + if (BIT(ioport("DIAGS")->read(), 4)) + return m_dips[BIT(~m_strobe, 1)]->read() << (BIT(m_strobe, 0) ? 4 : 0); + return 0xff; } @@ -313,8 +306,8 @@ void s6a_state::dig0_w(uint8_t data) { m_strobe = data & 15; m_data_ok = true; - output().set_value("led0", !BIT(data, 4)); - output().set_value("led1", !BIT(data, 5)); + m_leds[0] = !BIT(data, 4); + m_leds[1] = !BIT(data, 5); } void s6a_state::dig1_w(uint8_t data) @@ -367,6 +360,15 @@ WRITE_LINE_MEMBER( s6a_state::pia_irq ) } } +void s6a_state::machine_start() +{ + m_digits.resolve(); + m_leds.resolve(); + + m_irq_timer = timer_alloc(TIMER_IRQ); + m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1); +} + void s6a_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch(id) @@ -390,12 +392,6 @@ void s6a_state::device_timer(emu_timer &timer, device_timer_id id, int param, vo } } -void s6a_state::init_s6a() -{ - m_irq_timer = timer_alloc(TIMER_IRQ); - m_irq_timer->adjust(attotime::from_ticks(980,3580000/4),1); -} - void s6a_state::s6a(machine_config &config) { /* basic machine hardware */ @@ -461,8 +457,8 @@ void s6a_state::s6a(machine_config &config) m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); m_pias->ca2_handler().set("hc55516", FUNC(hc55516_device::digit_w)); m_pias->cb2_handler().set("hc55516", FUNC(hc55516_device::clock_w)); - m_pias->irqa_handler().set_inputline("audiocpu", M6802_IRQ_LINE); // FIXME: needs an input merger - m_pias->irqb_handler().set_inputline("audiocpu", M6802_IRQ_LINE); + m_pias->irqa_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); // FIXME: needs an input merger + m_pias->irqb_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); } @@ -522,10 +518,10 @@ ROM_START(alpok_f6) ROM_LOAD("sound3.716", 0x4800, 0x0800, CRC(55a10d13) SHA1(521d4cdfb0ed8178b3594cedceae93b772a951a4)) ROM_END -} // Anonymous namespace +} // anonymous namespace -GAME( 1980, algar_l1, 0, s6a, s6a, s6a_state, init_s6a, ROT0, "Williams", "Algar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, alpok_l6, 0, s6a, s6a, s6a_state, init_s6a, ROT0, "Williams", "Alien Poker (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, alpok_l2, alpok_l6, s6a, s6a, s6a_state, init_s6a, ROT0, "Williams", "Alien Poker (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) -GAME( 1980, alpok_f6, alpok_l6, s6a, s6a, s6a_state, init_s6a, ROT0, "Williams", "Alien Poker (L-6 French speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, algar_l1, 0, s6a, s6a, s6a_state, empty_init, ROT0, "Williams", "Algar (L-1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, alpok_l6, 0, s6a, s6a, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-6)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, alpok_l2, alpok_l6, s6a, s6a, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) +GAME( 1980, alpok_f6, alpok_l6, s6a, s6a, s6a_state, empty_init, ROT0, "Williams", "Alien Poker (L-6 French speech)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/taito_z.cpp b/src/mame/drivers/taito_z.cpp index 601629847ad..9bbed2b8957 100644 --- a/src/mame/drivers/taito_z.cpp +++ b/src/mame/drivers/taito_z.cpp @@ -1300,7 +1300,7 @@ void taitoz_state::cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) parse_cpu_control(); } -void taitoz_state::chasehq_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) +void chasehq_state::chasehq_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) { cpua_ctrl_w(offset, data, mem_mask); @@ -1308,11 +1308,11 @@ void taitoz_state::chasehq_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) m_lamps[1] = BIT(m_cpua_ctrl, 6); } -void taitoz_state::dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) +void dblaxle_state::dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) { cpua_ctrl_w(offset, data, mem_mask); - output().set_value("Wheel_Vibration", BIT(data, 2)); + m_wheel_vibration = BIT(data, 2); } @@ -1320,7 +1320,7 @@ void taitoz_state::dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) INTERRUPTS ***********************************************************/ -void taitoz_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sci_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -1335,7 +1335,7 @@ void taitoz_state::device_timer(emu_timer &timer, device_timer_id id, int param, /***** Routines for particular games *****/ -INTERRUPT_GEN_MEMBER(taitoz_state::sci_interrupt) +INTERRUPT_GEN_MEMBER(sci_state::sci_interrupt) { /* Need 2 int4's per int6 else (-$6b63,A5) never set to 1 which causes all sprites to vanish! Spriteram has areas for 2 frames @@ -1374,7 +1374,7 @@ u16 taitoz_state::eep_latch_r() } #endif -void taitoz_state::spacegun_eeprom_w(u8 data) +void spacegun_state::spacegun_eeprom_w(u8 data) { /* 0000xxxx (unused) 000x0000 eeprom reset (active low) @@ -1411,7 +1411,7 @@ template <int axis> CUSTOM_INPUT_MEMBER(taitoz_state::adstick_r) return retval[raw_value]; } -u8 taitoz_state::contcirc_input_bypass_r() +u8 contcirc_state::contcirc_input_bypass_r() { /* Bypass TC0040IOC controller for analog input */ @@ -1432,7 +1432,7 @@ u8 taitoz_state::contcirc_input_bypass_r() } -u8 taitoz_state::chasehq_input_bypass_r() +u8 chasehq_state::chasehq_input_bypass_r() { /* Bypass TC0040IOC controller for extra inputs */ @@ -1442,16 +1442,10 @@ u8 taitoz_state::chasehq_input_bypass_r() switch (port) { case 0x08: - return ioport("UNK1")->read(); - case 0x09: - return ioport("UNK2")->read(); - case 0x0a: - return ioport("UNK3")->read(); - case 0x0b: - return ioport("UNK4")->read(); + return m_unknown_io[port - 0x08]->read(); case 0x0c: return steer & 0xff; @@ -1465,7 +1459,7 @@ u8 taitoz_state::chasehq_input_bypass_r() } -u16 taitoz_state::sci_steer_input_r(offs_t offset) +u16 sci_state::sci_steer_input_r(offs_t offset) { u16 steer = 0xff80 + m_steer.read_safe(0x80); @@ -1484,14 +1478,14 @@ u16 taitoz_state::sci_steer_input_r(offs_t offset) } -void taitoz_state::spacegun_gun_output_w(u16 data) +void spacegun_state::spacegun_gun_output_w(u16 data) { - output().set_value("Player1_Gun_Recoil", BIT(data, 0)); - output().set_value("Player2_Gun_Recoil", BIT(data, 1)); + m_recoil[0] = BIT(data, 0); + m_recoil[1] = BIT(data, 1); } -u16 taitoz_state::dblaxle_steer_input_r(offs_t offset) +u16 taitoz_z80_sound_state::dblaxle_steer_input_r(offs_t offset) { u16 steer = 0xff80 + m_steer.read_safe(0x80); @@ -1512,7 +1506,7 @@ u16 taitoz_state::dblaxle_steer_input_r(offs_t offset) // TODO: proper motorcpu hook-up -u16 taitoz_state::chasehq_motor_r(offs_t offset) +u16 chasehq_state::chasehq_motor_r(offs_t offset) { switch (offset) { @@ -1528,7 +1522,7 @@ u16 taitoz_state::chasehq_motor_r(offs_t offset) } } -void taitoz_state::chasehq_motor_w(offs_t offset, u16 data) +void chasehq_state::chasehq_motor_w(offs_t offset, u16 data) { /* Writes $e00000-25 and $e00200-219 */ switch (offset) @@ -1545,38 +1539,44 @@ void taitoz_state::chasehq_motor_w(offs_t offset, u16 data) } -void taitoz_state::nightstr_motor_w(offs_t offset, u16 data) +void nightstr_state::nightstr_motor_w(offs_t offset, u16 data) { /* Despite the informative notes at the top, the high end of the word doesn't seem to output any useful data. */ /* I've added this so someone else can finish it. */ switch (offset) { case 0: - output().set_value("Motor_1_Direction",0); - if (BIT(data, 0)) output().set_value("Motor_1_Direction",1); - if (BIT(data, 1)) output().set_value("Motor_1_Direction",2); - output().set_value("Motor_1_Speed",(data & 60)/4); - + if (BIT(data, 0)) + m_motor_dir[0] = 1; + else if (BIT(data, 1)) + m_motor_dir[0] = 2; + else + m_motor_dir[0] = 0; + m_motor_speed[0] = (data & 0x3c) >> 2; break; case 4: - output().set_value("Motor_2_Direction",0); - if (BIT(data, 0)) output().set_value("Motor_2_Direction",1); - if (BIT(data, 1)) output().set_value("Motor_2_Direction",2); - output().set_value("Motor_2_Speed",(data & 60)/4); - + if (BIT(data, 0)) + m_motor_dir[1] = 1; + else if (BIT(data, 1)) + m_motor_dir[1] = 2; + else + m_motor_dir[1] = 0; + m_motor_speed[1] = (data & 0x3c) >> 2; break; case 8: - output().set_value("Motor_3_Direction",0); - if (BIT(data, 0)) output().set_value("Motor_3_Direction",1); - if (BIT(data, 1)) output().set_value("Motor_3_Direction",2); - output().set_value("Motor_3_Speed",(data & 60)/4); - + if (BIT(data, 0)) + m_motor_dir[2] = 1; + else if (BIT(data, 1)) + m_motor_dir[2] = 2; + else + m_motor_dir[2] = 0; + m_motor_speed[2] = (data & 0x3c) >> 2; break; default: - output().set_value("motor_debug",data); + m_motor_debug = data; break; } @@ -1592,7 +1592,7 @@ void taitoz_state::coin_control_w(u8 data) } -u16 taitoz_state::aquajack_unknown_r() +u16 taitoz_z80_sound_state::aquajack_unknown_r() { return 0xff; } @@ -1602,7 +1602,7 @@ u16 taitoz_state::aquajack_unknown_r() SOUND *****************************************************/ -void taitoz_state::sound_bankswitch_w(u8 data) +void taitoz_z80_sound_state::sound_bankswitch_w(u8 data) { m_z80bank->set_entry(data & 7); } @@ -1620,12 +1620,12 @@ void taitoz_state::pancontrol_w(offs_t offset, u8 data) ***********************************************************/ -void taitoz_state::contcirc_map(address_map &map) +void contcirc_state::contcirc_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x080000, 0x083fff).ram(); map(0x084000, 0x087fff).ram().share("share1"); - map(0x090001, 0x090001).w(FUNC(taitoz_state::contcirc_out_w)); /* road palette bank, sub CPU reset, 3d glasses control */ + map(0x090001, 0x090001).w(FUNC(contcirc_state::contcirc_out_w)); /* road palette bank, sub CPU reset, 3d glasses control */ map(0x100000, 0x100007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */ map(0x200000, 0x20ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ map(0x220000, 0x22000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); @@ -1633,37 +1633,37 @@ void taitoz_state::contcirc_map(address_map &map) map(0x400000, 0x4006ff).ram().share("spriteram"); } -void taitoz_state::contcirc_cpub_map(address_map &map) +void contcirc_state::contcirc_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x080000, 0x083fff).ram(); map(0x084000, 0x087fff).ram().share("share1"); - map(0x100001, 0x100001).r(FUNC(taitoz_state::contcirc_input_bypass_r)).w(m_tc0040ioc, FUNC(tc0040ioc_device::portreg_w)).umask16(0x00ff); + map(0x100001, 0x100001).r(FUNC(contcirc_state::contcirc_input_bypass_r)).w(m_tc0040ioc, FUNC(tc0040ioc_device::portreg_w)).umask16(0x00ff); map(0x100003, 0x100003).rw(m_tc0040ioc, FUNC(tc0040ioc_device::watchdog_r), FUNC(tc0040ioc_device::port_w)); map(0x200001, 0x200001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x200003, 0x200003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); } -void taitoz_state::chasehq_map(address_map &map) +void chasehq_state::chasehq_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x107fff).ram(); map(0x108000, 0x10bfff).ram().share("share1"); map(0x10c000, 0x10ffff).ram(); - map(0x400001, 0x400001).r(FUNC(taitoz_state::chasehq_input_bypass_r)).w(m_tc0040ioc, FUNC(tc0040ioc_device::portreg_w)).umask16(0x00ff); + map(0x400001, 0x400001).r(FUNC(chasehq_state::chasehq_input_bypass_r)).w(m_tc0040ioc, FUNC(tc0040ioc_device::portreg_w)).umask16(0x00ff); map(0x400003, 0x400003).rw(m_tc0040ioc, FUNC(tc0040ioc_device::watchdog_r), FUNC(tc0040ioc_device::port_w)); - map(0x800000, 0x800001).w(FUNC(taitoz_state::chasehq_cpua_ctrl_w)); + map(0x800000, 0x800001).w(FUNC(chasehq_state::chasehq_cpua_ctrl_w)); map(0x820001, 0x820001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x820003, 0x820003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); map(0xa00000, 0xa00007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); /* palette */ map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); map(0xd00000, 0xd007ff).ram().share("spriteram"); - map(0xe00000, 0xe003ff).rw(FUNC(taitoz_state::chasehq_motor_r), FUNC(taitoz_state::chasehq_motor_w)); /* motor cpu */ + map(0xe00000, 0xe003ff).rw(FUNC(chasehq_state::chasehq_motor_r), FUNC(chasehq_state::chasehq_motor_w)); /* motor cpu */ } -void taitoz_state::chq_cpub_map(address_map &map) +void chasehq_state::chasehq_cpub_map(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x100000, 0x103fff).ram(); @@ -1672,12 +1672,12 @@ void taitoz_state::chq_cpub_map(address_map &map) } -void taitoz_state::enforce_map(address_map &map) +void contcirc_state::enforce_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); map(0x104000, 0x107fff).ram().share("share1"); - map(0x200001, 0x200001).w(FUNC(taitoz_state::contcirc_out_w)); + map(0x200001, 0x200001).w(FUNC(contcirc_state::contcirc_out_w)); map(0x300000, 0x3006ff).ram().share("spriteram"); map(0x400000, 0x401fff).rw(m_tc0150rod, FUNC(tc0150rod_device::word_r), FUNC(tc0150rod_device::word_w)); /* "root ram" ??? */ map(0x500000, 0x500007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */ @@ -1685,7 +1685,7 @@ void taitoz_state::enforce_map(address_map &map) map(0x620000, 0x62000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); } -void taitoz_state::enforce_cpub_map(address_map &map) +void contcirc_state::enforce_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); @@ -1738,25 +1738,25 @@ void taitoz_state::bshark_cpub_map(address_map &map) } -void taitoz_state::sci_map(address_map &map) +void sci_state::sci_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x107fff).ram(); map(0x108000, 0x10bfff).ram().share("share1"); map(0x10c000, 0x10ffff).ram(); map(0x200000, 0x20000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); - map(0x200010, 0x20001f).r(FUNC(taitoz_state::sci_steer_input_r)); -// map(0x400000, 0x400001).w(FUNC(taitoz_state::cpua_ctrl_w)); // ?? doesn't seem to fit what's written + map(0x200010, 0x20001f).r(FUNC(sci_state::sci_steer_input_r)); +// map(0x400000, 0x400001).w(FUNC(sci_state::cpua_ctrl_w)); // ?? doesn't seem to fit what's written map(0x420001, 0x420001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x420003, 0x420003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); map(0x800000, 0x801fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0xa00000, 0xa0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ map(0xa20000, 0xa2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); map(0xc00000, 0xc03fff).ram().share("spriteram"); - map(0xc08000, 0xc08001).rw(FUNC(taitoz_state::sci_spriteframe_r), FUNC(taitoz_state::sci_spriteframe_w)); + map(0xc08000, 0xc08001).rw(FUNC(sci_state::sci_spriteframe_r), FUNC(sci_state::sci_spriteframe_w)); } -void taitoz_state::sci_cpub_map(address_map &map) +void sci_state::sci_cpub_map(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x200000, 0x203fff).ram(); @@ -1765,24 +1765,24 @@ void taitoz_state::sci_cpub_map(address_map &map) } -void taitoz_state::nightstr_map(address_map &map) +void nightstr_state::nightstr_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x10ffff).ram(); map(0x110000, 0x113fff).ram().share("share1"); map(0x400000, 0x40000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); - map(0x800000, 0x800001).w(FUNC(taitoz_state::cpua_ctrl_w)); + map(0x800000, 0x800001).w(FUNC(nightstr_state::cpua_ctrl_w)); map(0x820001, 0x820001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x820003, 0x820003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); map(0xa00000, 0xa00007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); /* palette */ map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); map(0xd00000, 0xd007ff).ram().share("spriteram"); - map(0xe00000, 0xe00011).w(FUNC(taitoz_state::nightstr_motor_w)); /* Motor outputs */ + map(0xe00000, 0xe00011).w(FUNC(nightstr_state::nightstr_motor_w)); /* Motor outputs */ map(0xe40000, 0xe4000f).rw("adc", FUNC(adc0808_device::data_r), FUNC(adc0808_device::address_offset_start_w)).umask16(0x00ff); } -void taitoz_state::nightstr_cpub_map(address_map &map) +void nightstr_state::nightstr_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); @@ -1791,12 +1791,12 @@ void taitoz_state::nightstr_cpub_map(address_map &map) } -void taitoz_state::aquajack_map(address_map &map) +void taitoz_z80_sound_state::aquajack_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); map(0x104000, 0x107fff).ram().share("share1"); - map(0x200000, 0x200001).w(FUNC(taitoz_state::cpua_ctrl_w)); // not needed, but it's probably like the others + map(0x200000, 0x200001).w(FUNC(taitoz_z80_sound_state::cpua_ctrl_w)); // not needed, but it's probably like the others map(0x300000, 0x300007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); /* palette */ map(0x800000, 0x801fff).rw(m_tc0150rod, FUNC(tc0150rod_device::word_r), FUNC(tc0150rod_device::word_w)); map(0xa00000, 0xa0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ @@ -1804,7 +1804,7 @@ void taitoz_state::aquajack_map(address_map &map) map(0xc40000, 0xc403ff).ram().share("spriteram"); } -void taitoz_state::aquajack_cpub_map(address_map &map) +void taitoz_z80_sound_state::aquajack_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); @@ -1812,13 +1812,13 @@ void taitoz_state::aquajack_cpub_map(address_map &map) map(0x200000, 0x20000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); map(0x300001, 0x300001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x300003, 0x300003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); - map(0x800800, 0x80083f).r(FUNC(taitoz_state::aquajack_unknown_r)); // Read regularly after write to 800800... -// map(0x800800, 0x800801).w(FUNC(taitoz_state::taitoz_unknown_w)); -// map(0x900000, 0x900007).rw(FUNC(taitoz_state::taitoz_unknown_r), FUNC(taitoz_state::taitoz_unknown_w)); + map(0x800800, 0x80083f).r(FUNC(taitoz_z80_sound_state::aquajack_unknown_r)); // Read regularly after write to 800800... +// map(0x800800, 0x800801).w(FUNC(taitoz_z80_sound_state::taitoz_unknown_w)); +// map(0x900000, 0x900007).rw(FUNC(taitoz_z80_sound_state::taitoz_unknown_r), FUNC(taitoz_z80_sound_state::taitoz_unknown_w)); } -void taitoz_state::spacegun_map(address_map &map) +void spacegun_state::spacegun_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x30c000, 0x30ffff).ram(); @@ -1829,7 +1829,7 @@ void taitoz_state::spacegun_map(address_map &map) map(0xb00000, 0xb00007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_rbswap_word_w)); /* palette */ } -void taitoz_state::spacegun_cpub_map(address_map &map) +void spacegun_state::spacegun_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x20c000, 0x20ffff).ram(); @@ -1838,20 +1838,20 @@ void taitoz_state::spacegun_cpub_map(address_map &map) map(0xc00000, 0xc00007).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)).umask16(0x00ff); map(0xc0000c, 0xc0000d).noprw(); // interrupt controller? map(0xc0000e, 0xc0000f).noprw(); - map(0xc20000, 0xc20007).w(FUNC(taitoz_state::pancontrol_w)).umask16(0x00ff); /* pan */ - map(0xe00000, 0xe00001).w(FUNC(taitoz_state::spacegun_gun_output_w)); /* gun outputs */ + map(0xc20000, 0xc20007).w(FUNC(spacegun_state::pancontrol_w)).umask16(0x00ff); /* pan */ + map(0xe00000, 0xe00001).w(FUNC(spacegun_state::spacegun_gun_output_w)); /* gun outputs */ map(0xf00000, 0xf0000f).rw("adc", FUNC(adc0808_device::data_r), FUNC(adc0808_device::address_offset_start_w)).umask16(0x00ff); } -void taitoz_state::dblaxle_map(address_map &map) +void dblaxle_state::dblaxle_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x200000, 0x203fff).ram(); map(0x210000, 0x21ffff).ram().share("share1"); map(0x400000, 0x40000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w)); - map(0x400010, 0x40001f).r(FUNC(taitoz_state::dblaxle_steer_input_r)); - map(0x600000, 0x600001).w(FUNC(taitoz_state::dblaxle_cpua_ctrl_w)); /* could this be causing int6 ? */ + map(0x400010, 0x40001f).r(FUNC(dblaxle_state::dblaxle_steer_input_r)); + map(0x600000, 0x600001).w(FUNC(dblaxle_state::dblaxle_cpua_ctrl_w)); /* could this be causing int6 ? */ map(0x620001, 0x620001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x620003, 0x620003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); map(0x800000, 0x801fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); @@ -1859,10 +1859,10 @@ void taitoz_state::dblaxle_map(address_map &map) map(0xa00000, 0xa0ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */ map(0xa30000, 0xa3002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w)); map(0xc00000, 0xc03fff).ram().share("spriteram"); /* mostly unused ? */ - map(0xc08000, 0xc08001).rw(FUNC(taitoz_state::sci_spriteframe_r), FUNC(taitoz_state::sci_spriteframe_w)); /* set in int6, seems to stay zero */ + //map(0xc08000, 0xc08001).rw(FUNC(dblaxle_state::sci_spriteframe_r), FUNC(dblaxle_state::sci_spriteframe_w)); /* set in int6, seems to stay zero */ } -void taitoz_state::dblaxle_cpub_map(address_map &map) +void dblaxle_state::dblaxle_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x100000, 0x103fff).ram(); @@ -1872,24 +1872,24 @@ void taitoz_state::dblaxle_cpub_map(address_map &map) } -void taitoz_state::racingb_map(address_map &map) +void sci_state::racingb_map(address_map &map) { map(0x000000, 0x07ffff).rom(); map(0x100000, 0x103fff).ram(); map(0x110000, 0x11ffff).ram().share("share1"); map(0x300000, 0x30000f).rw(m_tc0510nio, FUNC(tc0510nio_device::halfword_wordswap_r), FUNC(tc0510nio_device::halfword_wordswap_w)); - map(0x300010, 0x30001f).r(FUNC(taitoz_state::dblaxle_steer_input_r)); - map(0x500002, 0x500003).w(FUNC(taitoz_state::cpua_ctrl_w)); + map(0x300010, 0x30001f).r(FUNC(sci_state::dblaxle_steer_input_r)); + map(0x500002, 0x500003).w(FUNC(sci_state::cpua_ctrl_w)); map(0x520001, 0x520001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); map(0x520003, 0x520003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); map(0x700000, 0x701fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x900000, 0x90ffff).rw(m_tc0480scp, FUNC(tc0480scp_device::ram_r), FUNC(tc0480scp_device::ram_w)); /* tilemaps */ map(0x930000, 0x93002f).rw(m_tc0480scp, FUNC(tc0480scp_device::ctrl_r), FUNC(tc0480scp_device::ctrl_w)); map(0xb00000, 0xb03fff).ram().share("spriteram"); /* mostly unused ? */ - map(0xb08000, 0xb08001).rw(FUNC(taitoz_state::sci_spriteframe_r), FUNC(taitoz_state::sci_spriteframe_w)); /* alternates 0/0x100 */ + map(0xb08000, 0xb08001).rw(FUNC(sci_state::sci_spriteframe_r), FUNC(sci_state::sci_spriteframe_w)); /* alternates 0/0x100 */ } -void taitoz_state::racingb_cpub_map(address_map &map) +void sci_state::racingb_cpub_map(address_map &map) { map(0x000000, 0x03ffff).rom(); map(0x400000, 0x403fff).ram(); @@ -1901,7 +1901,7 @@ void taitoz_state::racingb_cpub_map(address_map &map) /***************************************************************************/ -void taitoz_state::z80_sound_map(address_map &map) +void taitoz_z80_sound_state::z80_sound_map(address_map &map) { map(0x0000, 0x3fff).rom(); map(0x4000, 0x7fff).bankr("z80bank"); @@ -1909,11 +1909,11 @@ void taitoz_state::z80_sound_map(address_map &map) map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)); map(0xe200, 0xe200).nopr().w(m_tc0140syt, FUNC(tc0140syt_device::slave_port_w)); map(0xe201, 0xe201).rw(m_tc0140syt, FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w)); - map(0xe400, 0xe403).w(FUNC(taitoz_state::pancontrol_w)); /* pan */ + map(0xe400, 0xe403).w(FUNC(taitoz_z80_sound_state::pancontrol_w)); /* pan */ map(0xea00, 0xea00).nopr(); map(0xee00, 0xee00).nopw(); /* ? */ map(0xf000, 0xf000).nopw(); /* ? */ - map(0xf200, 0xf200).w(FUNC(taitoz_state::sound_bankswitch_w)); + map(0xf200, 0xf200).w(FUNC(taitoz_z80_sound_state::sound_bankswitch_w)); } @@ -3133,20 +3133,23 @@ void taitoz_state::device_post_load() void taitoz_state::machine_start() { - if (m_z80bank) - { - int banks = memregion("audiocpu")->bytes() / 0x4000; - m_z80bank->configure_entries(0, banks, memregion("audiocpu")->base(), 0x4000); - } - save_item(NAME(m_cpua_ctrl)); +} - /* these are specific to various games: we ought to split the inits */ - save_item(NAME(m_sci_int6)); - save_item(NAME(m_ioc220_port)); +void taitoz_z80_sound_state::machine_start() +{ + taitoz_state::machine_start(); + + int banks = memregion("audiocpu")->bytes() / 0x4000; + m_z80bank->configure_entries(0, banks, memregion("audiocpu")->base(), 0x4000); +} + +void contcirc_state::machine_start() +{ + taitoz_z80_sound_state::machine_start(); - // 3d scope on contcirc/enforceja m_shutter_out.resolve(); + m_shutter_toggle = 0; m_shutter_control = 0; @@ -3154,18 +3157,57 @@ void taitoz_state::machine_start() save_item(NAME(m_shutter_control)); } -MACHINE_START_MEMBER(taitoz_state,chasehq) +void chasehq_state::machine_start() { - machine_start(); + taitoz_z80_sound_state::machine_start(); m_lamps.resolve(); } +void sci_state::machine_start() +{ + taitoz_z80_sound_state::machine_start(); + + save_item(NAME(m_sci_int6)); +} + +void nightstr_state::machine_start() +{ + taitoz_z80_sound_state::machine_start(); + + m_motor_dir.resolve(); + m_motor_speed.resolve(); + m_motor_debug.resolve(); +} + +void spacegun_state::machine_start() +{ + taitoz_state::machine_start(); + + m_recoil.resolve(); + + m_eep_latch = 0; + + save_item(NAME(m_eep_latch)); +} + +void dblaxle_state::machine_start() +{ + taitoz_z80_sound_state::machine_start(); + + m_wheel_vibration.resolve(); +} + void taitoz_state::machine_reset() { m_cpua_ctrl = 0xff; +} + +void sci_state::machine_reset() +{ + taitoz_z80_sound_state::machine_reset(); + m_sci_int6 = 0; - m_ioc220_port = 0; } void taitoz_state::screen_config(machine_config &config, int vdisp_start, int vdisp_end) @@ -3177,36 +3219,34 @@ void taitoz_state::screen_config(machine_config &config, int vdisp_start, int vd m_screen->set_raw(XTAL(26'686'000)/4, 424, 0, 320, 262, vdisp_start, vdisp_end); } -void taitoz_state::contcirc(machine_config &config) +void contcirc_state::contcirc(machine_config &config) { M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::contcirc_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq6_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &contcirc_state::contcirc_map); + m_maincpu->set_vblank_int("screen", FUNC(contcirc_state::irq6_line_hold)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &contcirc_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::contcirc_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq6_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &contcirc_state::contcirc_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(contcirc_state::irq6_line_hold)); TC0040IOC(config, m_tc0040ioc, 0); m_tc0040ioc->read_0_callback().set_ioport("DSWA"); m_tc0040ioc->read_1_callback().set_ioport("DSWB"); m_tc0040ioc->read_2_callback().set_ioport("IN0"); m_tc0040ioc->read_3_callback().set_ioport("IN1"); - m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->write_4_callback().set(FUNC(contcirc_state::coin_control_w)); m_tc0040ioc->read_7_callback().set_ioport("IN2"); screen_config(config, 24, 248); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_contcirc)); + m_screen->set_screen_update(FUNC(contcirc_state::screen_update_contcirc)); m_screen->set_palette(m_tc0110pcr); - m_screen->screen_vblank().set(FUNC(taitoz_state::scope_vblank)); + m_screen->screen_vblank().set(FUNC(contcirc_state::scope_vblank)); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette(m_tc0110pcr); @@ -3237,39 +3277,35 @@ void taitoz_state::contcirc(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::chasehq(machine_config &config) +void chasehq_state::chasehq(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::chasehq_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &chasehq_state::chasehq_map); + m_maincpu->set_vblank_int("screen", FUNC(chasehq_state::irq4_line_hold)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &chasehq_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::chq_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); - - MCFG_MACHINE_START_OVERRIDE(taitoz_state,chasehq) + m_subcpu->set_addrmap(AS_PROGRAM, &chasehq_state::chasehq_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(chasehq_state::irq4_line_hold)); TC0040IOC(config, m_tc0040ioc, 0); m_tc0040ioc->read_0_callback().set_ioport("DSWA"); m_tc0040ioc->read_1_callback().set_ioport("DSWB"); m_tc0040ioc->read_2_callback().set_ioport("IN0"); m_tc0040ioc->read_3_callback().set_ioport("IN1"); - m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->write_4_callback().set(FUNC(chasehq_state::coin_control_w)); m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_chasehq)); + m_screen->set_screen_update(FUNC(chasehq_state::screen_update_chasehq)); m_screen->set_palette(m_tc0110pcr); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_chasehq); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette(m_tc0110pcr); @@ -3300,19 +3336,19 @@ void taitoz_state::chasehq(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::enforce(machine_config &config) +void contcirc_state::enforce(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::enforce_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq6_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &contcirc_state::enforce_map); + m_maincpu->set_vblank_int("screen", FUNC(contcirc_state::irq6_line_hold)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &contcirc_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::enforce_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq6_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &contcirc_state::enforce_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(contcirc_state::irq6_line_hold)); config.set_maximum_quantum(attotime::from_hz(600)); @@ -3321,19 +3357,17 @@ void taitoz_state::enforce(machine_config &config) m_tc0040ioc->read_1_callback().set_ioport("DSWB"); m_tc0040ioc->read_2_callback().set_ioport("IN0"); m_tc0040ioc->read_3_callback().set_ioport("IN1"); - m_tc0040ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0040ioc->write_4_callback().set(FUNC(contcirc_state::coin_control_w)); m_tc0040ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 24, 248); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_contcirc)); + m_screen->set_screen_update(FUNC(contcirc_state::screen_update_contcirc)); m_screen->set_palette(m_tc0110pcr); - m_screen->screen_vblank().set(FUNC(taitoz_state::scope_vblank)); + m_screen->screen_vblank().set(FUNC(contcirc_state::scope_vblank)); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette(m_tc0110pcr); @@ -3392,8 +3426,6 @@ void taitoz_state::bshark_base(machine_config &config) GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette("palette"); @@ -3437,19 +3469,19 @@ void taitoz_state::bsharkjjs(machine_config &config) } -void taitoz_state::sci(machine_config &config) +void sci_state::sci(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::sci_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::sci_interrupt)); + m_maincpu->set_addrmap(AS_PROGRAM, &sci_state::sci_map); + m_maincpu->set_vblank_int("screen", FUNC(sci_state::sci_interrupt)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &sci_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::sci_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &sci_state::sci_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(sci_state::irq4_line_hold)); config.set_maximum_quantum(attotime::from_hz(3000)); @@ -3458,19 +3490,17 @@ void taitoz_state::sci(machine_config &config) m_tc0220ioc->read_1_callback().set_ioport("DSWB"); m_tc0220ioc->read_2_callback().set_ioport("IN0"); m_tc0220ioc->read_3_callback().set_ioport("IN1"); - m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->write_4_callback().set(FUNC(sci_state::coin_control_w)); m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_sci)); + m_screen->set_screen_update(FUNC(sci_state::screen_update_sci)); m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette("palette"); @@ -3499,19 +3529,19 @@ void taitoz_state::sci(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::nightstr(machine_config &config) +void nightstr_state::nightstr(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::nightstr_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &nightstr_state::nightstr_map); + m_maincpu->set_vblank_int("screen", FUNC(nightstr_state::irq4_line_hold)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &nightstr_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::nightstr_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &nightstr_state::nightstr_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(nightstr_state::irq4_line_hold)); config.set_maximum_quantum(attotime::from_hz(6000)); @@ -3527,18 +3557,16 @@ void taitoz_state::nightstr(machine_config &config) m_tc0220ioc->read_1_callback().set_ioport("DSWB"); m_tc0220ioc->read_2_callback().set_ioport("IN0"); m_tc0220ioc->read_3_callback().set_ioport("IN1"); - m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->write_4_callback().set(FUNC(nightstr_state::coin_control_w)); m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_chasehq)); + m_screen->set_screen_update(FUNC(nightstr_state::screen_update_chasehq)); m_screen->set_palette(m_tc0110pcr); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_chasehq); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette(m_tc0110pcr); @@ -3569,19 +3597,19 @@ void taitoz_state::nightstr(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::aquajack(machine_config &config) +void taitoz_z80_sound_state::aquajack(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::aquajack_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_z80_sound_state::aquajack_map); + m_maincpu->set_vblank_int("screen", FUNC(taitoz_z80_sound_state::irq4_line_hold)); Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_z80_sound_state::z80_sound_map); M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::aquajack_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_z80_sound_state::aquajack_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(taitoz_z80_sound_state::irq4_line_hold)); config.set_maximum_quantum(attotime::from_hz(30000)); @@ -3590,18 +3618,16 @@ void taitoz_state::aquajack(machine_config &config) m_tc0220ioc->read_1_callback().set_ioport("DSWB"); m_tc0220ioc->read_2_callback().set_ioport("IN0"); m_tc0220ioc->read_3_callback().set_ioport("IN1"); - m_tc0220ioc->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0220ioc->write_4_callback().set(FUNC(taitoz_z80_sound_state::coin_control_w)); m_tc0220ioc->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_aquajack)); + m_screen->set_screen_update(FUNC(taitoz_z80_sound_state::screen_update_aquajack)); m_screen->set_palette(m_tc0110pcr); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0100SCN(config, m_tc0100scn, 0); m_tc0100scn->set_palette(m_tc0110pcr); @@ -3632,16 +3658,16 @@ void taitoz_state::aquajack(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::spacegun(machine_config &config) +void spacegun_state::spacegun(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 16000000); /* 16 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::spacegun_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &spacegun_state::spacegun_map); + m_maincpu->set_vblank_int("screen", FUNC(spacegun_state::irq4_line_hold)); M68000(config, m_subcpu, 16000000); /* 16 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::spacegun_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &spacegun_state::spacegun_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(spacegun_state::irq4_line_hold)); EEPROM_93C46_16BIT(config, m_eeprom).default_data(spacegun_default_eeprom, 128); @@ -3657,13 +3683,13 @@ void taitoz_state::spacegun(machine_config &config) m_tc0510nio->read_1_callback().set_ioport("DSWB"); m_tc0510nio->read_2_callback().set_ioport("IN0"); m_tc0510nio->read_3_callback().set(m_eeprom, FUNC(eeprom_serial_93cxx_device::do_read)).lshift(7); - m_tc0510nio->write_3_callback().set(FUNC(taitoz_state::spacegun_eeprom_w)); - m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->write_3_callback().set(FUNC(spacegun_state::spacegun_eeprom_w)); + m_tc0510nio->write_4_callback().set(FUNC(spacegun_state::coin_control_w)); m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_spacegun)); + m_screen->set_screen_update(FUNC(spacegun_state::screen_update_spacegun)); m_screen->set_palette(m_tc0110pcr); GFXDECODE(config, m_gfxdecode, m_tc0110pcr, gfx_taitoz); @@ -3693,19 +3719,19 @@ void taitoz_state::spacegun(machine_config &config) FILTER_VOLUME(config, "2610.2.l").add_route(ALL_OUTPUTS, "lspeaker", 1.0); } -void taitoz_state::dblaxle(machine_config &config) +void dblaxle_state::dblaxle(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(32'000'000)/2); - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::dblaxle_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_maincpu->set_addrmap(AS_PROGRAM, &dblaxle_state::dblaxle_map); + m_maincpu->set_vblank_int("screen", FUNC(dblaxle_state::irq4_line_hold)); Z80(config, m_audiocpu, XTAL(32'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &dblaxle_state::z80_sound_map); M68000(config, m_subcpu, XTAL(32'000'000)/2); - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::dblaxle_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &dblaxle_state::dblaxle_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(dblaxle_state::irq4_line_hold)); // make quantum time to be a multiple of the xtal (fixes road layer stuck on continue) config.set_maximum_quantum(attotime::from_hz(XTAL(32'000'000)/1024)); @@ -3715,19 +3741,17 @@ void taitoz_state::dblaxle(machine_config &config) m_tc0510nio->read_1_callback().set_ioport("DSWB"); m_tc0510nio->read_2_callback().set_ioport("IN0"); m_tc0510nio->read_3_callback().set_ioport("IN1"); - m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->write_4_callback().set(FUNC(dblaxle_state::coin_control_w)); m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_dblaxle)); + m_screen->set_screen_update(FUNC(dblaxle_state::screen_update_dblaxle)); m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0480SCP(config, m_tc0480scp, 0); m_tc0480scp->set_palette("palette"); m_tc0480scp->set_offsets(0x1f, 0x08); @@ -3757,19 +3781,19 @@ void taitoz_state::dblaxle(machine_config &config) m_tc0140syt->set_slave_tag(m_audiocpu); } -void taitoz_state::racingb(machine_config &config) +void sci_state::racingb(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, XTAL(32'000'000)/2); - m_maincpu->set_addrmap(AS_PROGRAM, &taitoz_state::racingb_map); - m_maincpu->set_vblank_int("screen", FUNC(taitoz_state::sci_interrupt)); + m_maincpu->set_addrmap(AS_PROGRAM, &sci_state::racingb_map); + m_maincpu->set_vblank_int("screen", FUNC(sci_state::sci_interrupt)); Z80(config, m_audiocpu, XTAL(32'000'000)/8); - m_audiocpu->set_addrmap(AS_PROGRAM, &taitoz_state::z80_sound_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &sci_state::z80_sound_map); M68000(config, m_subcpu, XTAL(32'000'000)/2); - m_subcpu->set_addrmap(AS_PROGRAM, &taitoz_state::racingb_cpub_map); - m_subcpu->set_vblank_int("screen", FUNC(taitoz_state::irq4_line_hold)); + m_subcpu->set_addrmap(AS_PROGRAM, &sci_state::racingb_cpub_map); + m_subcpu->set_vblank_int("screen", FUNC(sci_state::irq4_line_hold)); config.set_maximum_quantum(attotime::from_hz(600)); @@ -3778,19 +3802,17 @@ void taitoz_state::racingb(machine_config &config) m_tc0510nio->read_1_callback().set_ioport("DSWB"); m_tc0510nio->read_2_callback().set_ioport("IN0"); m_tc0510nio->read_3_callback().set_ioport("IN1"); - m_tc0510nio->write_4_callback().set(FUNC(taitoz_state::coin_control_w)); + m_tc0510nio->write_4_callback().set(FUNC(sci_state::coin_control_w)); m_tc0510nio->read_7_callback().set_ioport("IN2"); /* video hardware */ screen_config(config, 16, 256); - m_screen->set_screen_update(FUNC(taitoz_state::screen_update_racingb)); + m_screen->set_screen_update(FUNC(sci_state::screen_update_racingb)); m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_taitoz); PALETTE(config, "palette").set_format(palette_device::xBGR_555, 4096); - MCFG_VIDEO_START_OVERRIDE(taitoz_state,taitoz) - TC0480SCP(config, m_tc0480scp, 0); m_tc0480scp->set_palette("palette"); m_tc0480scp->set_offsets(0x1f, 0x08); @@ -5539,55 +5561,47 @@ ROM_START( racingbj ) ROM_END -void taitoz_state::init_bshark() -{ - m_eep_latch = 0; - - save_item(NAME(m_eep_latch)); -} - - -GAMEL(1987, contcirc, 0, contcirc, contcirc, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Continental Circus (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) -GAMEL(1987, contcircu, contcirc, contcirc, contcrcu, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) -GAMEL(1987, contcircua, contcirc, contcirc, contcrcj, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) -GAMEL(1987, contcircj, contcirc, contcirc, contcrcj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Continental Circus (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) +GAMEL(1987, contcirc, 0, contcirc, contcirc, contcirc_state, empty_init, ROT0, "Taito Corporation Japan", "Continental Circus (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) +GAMEL(1987, contcircu, contcirc, contcirc, contcrcu, contcirc_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) +GAMEL(1987, contcircua, contcirc, contcirc, contcrcj, contcirc_state, empty_init, ROT0, "Taito America Corporation", "Continental Circus (US set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) +GAMEL(1987, contcircj, contcirc, contcirc, contcrcj, contcirc_state, empty_init, ROT0, "Taito Corporation", "Continental Circus (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_contcirc ) -GAMEL(1988, chasehq, 0, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Chase H.Q. (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1988, chasehqj, chasehq, chasehq, chasehqj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1988, chasehqju, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan, upright?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) // same code rev as Chase H.Q. (World) -GAMEL(1988, chasehqu, chasehq, chasehq, chasehq, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Chase H.Q. (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1988, chasehq, 0, chasehq, chasehq, chasehq_state, empty_init, ROT0, "Taito Corporation Japan", "Chase H.Q. (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1988, chasehqj, chasehq, chasehq, chasehqj, chasehq_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1988, chasehqju, chasehq, chasehq, chasehq, chasehq_state, empty_init, ROT0, "Taito Corporation", "Chase H.Q. (Japan, upright?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) // same code rev as Chase H.Q. (World) +GAMEL(1988, chasehqu, chasehq, chasehq, chasehq, chasehq_state, empty_init, ROT0, "Taito America Corporation", "Chase H.Q. (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAME( 1988, enforce, 0, enforce, enforce, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Enforce (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1988, enforcej, enforce, enforce, enforcej, taitoz_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAMEL(1988, enforceja, enforce, enforce, enforceja, taitoz_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan, Analog Controls)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_enforceja ) +GAME( 1988, enforce, 0, enforce, enforce, contcirc_state, empty_init, ROT0, "Taito Corporation Japan", "Enforce (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1988, enforcej, enforce, enforce, enforcej, contcirc_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAMEL(1988, enforceja, enforce, enforce, enforceja, contcirc_state, empty_init, ROT0, "Taito Corporation", "Enforce (Japan, Analog Controls)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_enforceja ) -GAME( 1989, bshark, 0, bshark, bshark, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Battle Shark (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, bsharku, bshark, bshark, bsharku, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito America Corporation", "Battle Shark (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, bsharkj, bshark, bshark, bsharkj, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, bsharkjjs, bshark, bsharkjjs, bsharkjjs, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan, Joystick)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, bshark, 0, bshark, bshark, taitoz_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Battle Shark (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, bsharku, bshark, bshark, bsharku, taitoz_state, empty_init, ORIENTATION_FLIP_X, "Taito America Corporation", "Battle Shark (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, bsharkj, bshark, bshark, bsharkj, taitoz_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, bsharkjjs, bshark, bsharkjjs, bsharkjjs, taitoz_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation", "Battle Shark (Japan, Joystick)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAMEL(1989, sci, 0, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1989, scia, sci, sci, sci, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1989, scij, sci, sci, scij, taitoz_state, empty_init, ROT0, "Taito Corporation", "Special Criminal Investigation (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1989, sciu, sci, sci, sciu, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Special Criminal Investigation (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAMEL(1991, scin, sci, sci, sci, taitoz_state, empty_init, ROT0, "hack (Negro Torino)", "Super Special Criminal Investigation (Negro Torino hack)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1989, sci, 0, sci, sci, sci_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1989, scia, sci, sci, sci, sci_state, empty_init, ROT0, "Taito Corporation Japan", "Special Criminal Investigation (World set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1989, scij, sci, sci, scij, sci_state, empty_init, ROT0, "Taito Corporation", "Special Criminal Investigation (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1989, sciu, sci, sci, sciu, sci_state, empty_init, ROT0, "Taito America Corporation", "Special Criminal Investigation (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) +GAMEL(1991, scin, sci, sci, sci, sci_state, empty_init, ROT0, "hack (Negro Torino)", "Super Special Criminal Investigation (Negro Torino hack)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_chasehq ) -GAME( 1989, nightstr, 0, nightstr, nightstr, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Night Striker (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, nightstrj, nightstr, nightstr, nghtstrj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Night Striker (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, nightstru, nightstr, nightstr, nghtstru, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Night Striker (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, nightstr, 0, nightstr, nightstr, nightstr_state, empty_init, ROT0, "Taito Corporation Japan", "Night Striker (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, nightstrj, nightstr, nightstr, nghtstrj, nightstr_state, empty_init, ROT0, "Taito Corporation", "Night Striker (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, nightstru, nightstr, nightstr, nghtstru, nightstr_state, empty_init, ROT0, "Taito America Corporation", "Night Striker (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1990, aquajack, 0, aquajack, aquajack, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Aqua Jack (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1990, aquajacku, aquajack, aquajack, aquajack, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Aqua Jack (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1990, aquajackj, aquajack, aquajack, aquajckj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Aqua Jack (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1990, aquajack, 0, aquajack, aquajack, taitoz_z80_sound_state, empty_init, ROT0, "Taito Corporation Japan", "Aqua Jack (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1990, aquajacku, aquajack, aquajack, aquajack, taitoz_z80_sound_state, empty_init, ROT0, "Taito America Corporation", "Aqua Jack (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1990, aquajackj, aquajack, aquajack, aquajckj, taitoz_z80_sound_state, empty_init, ROT0, "Taito Corporation", "Aqua Jack (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1990, spacegun, 0, spacegun, spacegun, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Space Gun (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, spacegunj, spacegun, spacegun, spacegnj, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito Corporation", "Space Gun (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1990, spacegunu, spacegun, spacegun, spacegnu, taitoz_state, init_bshark, ORIENTATION_FLIP_X, "Taito America Corporation", "Space Gun (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, spacegun, 0, spacegun, spacegun, spacegun_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation Japan", "Space Gun (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, spacegunj, spacegun, spacegun, spacegnj, spacegun_state, empty_init, ORIENTATION_FLIP_X, "Taito Corporation", "Space Gun (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1990, spacegunu, spacegun, spacegun, spacegnu, spacegun_state, empty_init, ORIENTATION_FLIP_X, "Taito America Corporation", "Space Gun (US)", MACHINE_SUPPORTS_SAVE ) -GAMEL(1991, dblaxle, 0, dblaxle, dblaxles, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US, Rev 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_dblaxle ) -GAMEL(1991, dblaxleu, dblaxle, dblaxle, dblaxles, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_dblaxle ) -GAMEL(1991, dblaxleul, dblaxle, dblaxle, dblaxle, taitoz_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US, Rev 1, Linkable)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) -GAMEL(1991, pwheelsj, dblaxle, dblaxle, pwheelsj, taitoz_state, empty_init, ROT0, "Taito Corporation", "Power Wheels (Japan, Rev 2, Linkable)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) +GAMEL(1991, dblaxle, 0, dblaxle, dblaxles, dblaxle_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US, Rev 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_dblaxle ) +GAMEL(1991, dblaxleu, dblaxle, dblaxle, dblaxles, dblaxle_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_dblaxle ) +GAMEL(1991, dblaxleul, dblaxle, dblaxle, dblaxle, dblaxle_state, empty_init, ROT0, "Taito America Corporation", "Double Axle (US, Rev 1, Linkable)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) +GAMEL(1991, pwheelsj, dblaxle, dblaxle, pwheelsj, dblaxle_state, empty_init, ROT0, "Taito Corporation", "Power Wheels (Japan, Rev 2, Linkable)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) -GAMEL(1991, racingb, 0, racingb, racingb, taitoz_state, empty_init, ROT0, "Taito Corporation Japan", "Racing Beat (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) -GAMEL(1991, racingbj, racingb, racingb, racingb, taitoz_state, empty_init, ROT0, "Taito Corporation", "Racing Beat (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) +GAMEL(1991, racingb, 0, racingb, racingb, sci_state, empty_init, ROT0, "Taito Corporation Japan", "Racing Beat (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) +GAMEL(1991, racingbj, racingb, racingb, racingb, sci_state, empty_init, ROT0, "Taito Corporation", "Racing Beat (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN, layout_dblaxle ) diff --git a/src/mame/drivers/wpc_95.cpp b/src/mame/drivers/wpc_95.cpp index a3f464cb3f1..9684bda5b31 100644 --- a/src/mame/drivers/wpc_95.cpp +++ b/src/mame/drivers/wpc_95.cpp @@ -21,15 +21,15 @@ class wpc_95_state : public driver_device { public: wpc_95_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - maincpu(*this, "maincpu"), - dcs(*this, "dcs"), - rombank(*this, "rombank"), - mainram(*this, "mainram"), - nvram(*this, "nvram"), - pic(*this, "pic"), - lamp(*this, "lamp"), - out(*this, "out") + : driver_device(mconfig, type, tag) + , maincpu(*this, "maincpu") + , dcs(*this, "dcs") + , rombank(*this, "rombank") + , mainram(*this, "mainram") + , nvram(*this, "nvram") + , pic(*this, "pic") + , lamp(*this, "lamp") + , out(*this, "out") { } void wpc_95(machine_config &config); diff --git a/src/mame/includes/taito_z.h b/src/mame/includes/taito_z.h index 6e8dc99f420..3e1b64634fd 100644 --- a/src/mame/includes/taito_z.h +++ b/src/mame/includes/taito_z.h @@ -28,11 +28,8 @@ public: driver_device(mconfig, type, tag), m_spriteram(*this, "spriteram"), m_spritemap(*this, "spritemap"), - m_z80bank(*this, "z80bank"), m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), m_subcpu(*this, "sub"), - m_eeprom(*this, "eeprom"), m_tc0480scp(*this, "tc0480scp"), m_tc0150rod(*this, "tc0150rod"), m_tc0100scn(*this, "tc0100scn"), @@ -48,10 +45,7 @@ public: m_brake(*this, "BRAKE"), m_steer(*this, "STEER"), m_stickx(*this, "STICKX"), - m_sticky(*this, "STICKY"), - m_io_eepromout(*this, "EEPROMOUT"), - m_lamps(*this, "lamp%u", 0U), - m_shutter_out(*this, "shutter%u", 0U) + m_sticky(*this, "STICKY") { } DECLARE_CUSTOM_INPUT_MEMBER(gas_pedal_r); @@ -59,56 +53,29 @@ public: template <int axis> DECLARE_CUSTOM_INPUT_MEMBER(adstick_r); void bshark_base(machine_config &config); - void sci(machine_config &config); - void spacegun(machine_config &config); - void chasehq(machine_config &config); - void dblaxle(machine_config &config); void bshark(machine_config &config); - void aquajack(machine_config &config); - void nightstr(machine_config &config); - void contcirc(machine_config &config); - void racingb(machine_config &config); void bsharkjjs(machine_config &config); - void enforce(machine_config &config); - - void init_bshark(); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; virtual void machine_start() override; virtual void machine_reset() override; + void screen_config(machine_config &config, int vdisp_start, int vdisp_end); -private: - enum - { - TIMER_TAITOZ_INTERRUPT6, - }; + void cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void coin_control_w(u8 data); + void pancontrol_w(offs_t offset, u8 data); + + void bshark_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); /* memory pointers */ required_shared_ptr<u16> m_spriteram; required_region_ptr<u16> m_spritemap; - optional_memory_bank m_z80bank; - - /* video-related */ - int m_sci_spriteframe; - int m_road_palbank; - - /* misc */ - u16 m_cpua_ctrl; - s32 m_sci_int6; - s32 m_ioc220_port; - u8 m_eep_latch; - int m_shutter_toggle; - u8 m_shutter_control; - /* devices */ required_device<cpu_device> m_maincpu; - optional_device<cpu_device> m_audiocpu; required_device<cpu_device> m_subcpu; - optional_device<eeprom_serial_93cxx_device> m_eeprom; optional_device<tc0480scp_device> m_tc0480scp; optional_device<tc0150rod_device> m_tc0150rod; optional_device<tc0100scn_device> m_tc0100scn; @@ -125,71 +92,252 @@ private: optional_ioport m_steer; optional_ioport m_stickx; optional_ioport m_sticky; - optional_ioport m_io_eepromout; - output_finder<2> m_lamps; + + /* misc */ + u16 m_cpua_ctrl; + +private: + u32 screen_update_bshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void parse_cpu_control(); + + void bshark_cpub_map(address_map &map); + void bshark_map(address_map &map); + void bsharkjjs_map(address_map &map); +}; + + +class taitoz_z80_sound_state : public taitoz_state +{ +public: + taitoz_z80_sound_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_state(mconfig, type, tag), + m_audiocpu(*this, "audiocpu"), + m_z80bank(*this, "z80bank") + { + } + + void aquajack(machine_config &config); + +protected: + virtual void machine_start() override; + + u16 dblaxle_steer_input_r(offs_t offset); + + u32 screen_update_chasehq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void z80_sound_map(address_map &map); + + required_device<cpu_device> m_audiocpu; + +private: + u16 aquajack_unknown_r(); + void sound_bankswitch_w(u8 data); + + void chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); + void aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); + u32 screen_update_aquajack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void aquajack_map(address_map &map); + void aquajack_cpub_map(address_map &map); + + required_memory_bank m_z80bank; +}; + + +class contcirc_state : public taitoz_z80_sound_state +{ +public: + contcirc_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_z80_sound_state(mconfig, type, tag), + m_shutter_out(*this, "shutter%u", 0U) + { + } + + void contcirc(machine_config &config); + void enforce(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + u8 contcirc_input_bypass_r(); + void contcirc_out_w(u8 data); + DECLARE_WRITE_LINE_MEMBER(scope_vblank); + + void contcirc_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); + u32 screen_update_contcirc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void contcirc_map(address_map &map); + void contcirc_cpub_map(address_map &map); + void enforce_map(address_map &map); + void enforce_cpub_map(address_map &map); + output_finder<2> m_shutter_out; - void cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + int m_road_palbank; + int m_shutter_toggle; + u8 m_shutter_control; +}; + + +class chasehq_state : public taitoz_z80_sound_state +{ +public: + chasehq_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_z80_sound_state(mconfig, type, tag), + m_unknown_io(*this, "UNK%u", 1U), + m_lamps(*this, "lamp%u", 0U) + { + } + + void chasehq(machine_config &config); + +protected: + virtual void machine_start() override; + +private: void chasehq_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void spacegun_eeprom_w(u8 data); - u8 contcirc_input_bypass_r(); u8 chasehq_input_bypass_r(); - u16 sci_steer_input_r(offs_t offset); - void spacegun_gun_output_w(u16 data); - u16 dblaxle_steer_input_r(offs_t offset); u16 chasehq_motor_r(offs_t offset); void chasehq_motor_w(offs_t offset, u16 data); - void nightstr_motor_w(offs_t offset, u16 data); - void coin_control_w(u8 data); - u16 aquajack_unknown_r(); - void sound_bankswitch_w(u8 data); - void pancontrol_w(offs_t offset, u8 data); + + void chasehq_map(address_map &map); + void chasehq_cpub_map(address_map &map); + + required_ioport_array<4> m_unknown_io; + output_finder<2> m_lamps; +}; + + +class sci_state : public taitoz_z80_sound_state +{ +public: + sci_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_z80_sound_state(mconfig, type, tag) + { + } + + void sci(machine_config &config); + void racingb(machine_config &config); + +protected: + enum + { + TIMER_TAITOZ_INTERRUPT6, + }; + + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: + u16 sci_steer_input_r(offs_t offset); u16 sci_spriteframe_r(); void sci_spriteframe_w(u16 data); - void contcirc_out_w(u8 data); - DECLARE_WRITE_LINE_MEMBER(scope_vblank); - DECLARE_VIDEO_START(taitoz); - DECLARE_MACHINE_START(chasehq); - u32 screen_update_contcirc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_chasehq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_bshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_sci(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_aquajack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_spacegun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_dblaxle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update_racingb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + INTERRUPT_GEN_MEMBER(sci_interrupt); - void contcirc_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); - void chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); - void bshark_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); + void sci_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); - void aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); - void spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); - void parse_cpu_control(); + u32 screen_update_sci(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update_racingb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void aquajack_cpub_map(address_map &map); - void aquajack_map(address_map &map); - void bshark_cpub_map(address_map &map); - void bshark_map(address_map &map); - void bsharkjjs_map(address_map &map); - void chasehq_map(address_map &map); - void chq_cpub_map(address_map &map); - void contcirc_cpub_map(address_map &map); - void contcirc_map(address_map &map); - void dblaxle_cpub_map(address_map &map); - void dblaxle_map(address_map &map); - void enforce_cpub_map(address_map &map); - void enforce_map(address_map &map); - void nightstr_cpub_map(address_map &map); - void nightstr_map(address_map &map); - void racingb_cpub_map(address_map &map); - void racingb_map(address_map &map); - void sci_cpub_map(address_map &map); void sci_map(address_map &map); - void spacegun_cpub_map(address_map &map); + void sci_cpub_map(address_map &map); + void racingb_map(address_map &map); + void racingb_cpub_map(address_map &map); + + int m_sci_spriteframe; + s32 m_sci_int6; +}; + + +class nightstr_state : public taitoz_z80_sound_state +{ +public: + nightstr_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_z80_sound_state(mconfig, type, tag), + m_motor_dir(*this, "Motor_%u_Direction", 1U), + m_motor_speed(*this, "Motor_%u_Speed", 1U), + m_motor_debug(*this, "motor_debug") + { + } + + void nightstr(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void nightstr_motor_w(offs_t offset, u16 data); + + void nightstr_map(address_map &map); + void nightstr_cpub_map(address_map &map); + + output_finder<3> m_motor_dir; + output_finder<3> m_motor_speed; + output_finder<> m_motor_debug; +}; + + +class spacegun_state : public taitoz_state +{ +public: + spacegun_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_state(mconfig, type, tag), + m_eeprom(*this, "eeprom"), + m_io_eepromout(*this, "EEPROMOUT"), + m_recoil(*this, "Player%u_Gun_Recoil", 1U) + { + } + + void spacegun(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void spacegun_eeprom_w(u8 data); + void spacegun_gun_output_w(u16 data); + + void spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs); + u32 screen_update_spacegun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void spacegun_map(address_map &map); - void z80_sound_map(address_map &map); + void spacegun_cpub_map(address_map &map); + + required_device<eeprom_serial_93cxx_device> m_eeprom; + required_ioport m_io_eepromout; + output_finder<2> m_recoil; + + u8 m_eep_latch; +}; + + +class dblaxle_state : public taitoz_z80_sound_state +{ +public: + dblaxle_state(const machine_config &mconfig, device_type type, const char *tag) : + taitoz_z80_sound_state(mconfig, type, tag), + m_wheel_vibration(*this, "Wheel_Vibration") + { + } + + void dblaxle(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0); + + u32 screen_update_dblaxle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void dblaxle_map(address_map &map); + void dblaxle_cpub_map(address_map &map); + + output_finder<> m_wheel_vibration; }; #endif // MAME_INCLUDES_TAITO_Z_H diff --git a/src/mame/machine/midyunit.cpp b/src/mame/machine/midyunit.cpp index 5744f4e4758..0b0f6893474 100644 --- a/src/mame/machine/midyunit.cpp +++ b/src/mame/machine/midyunit.cpp @@ -139,25 +139,25 @@ void midyunit_state::term2_sound_w(offs_t offset, uint16_t data) /* Flash Lamp Output Data */ if ( ((data & 0x800) != 0x800) && ((data & 0x400) == 0x400 ) ) { - output().set_value("Left_Flash_1", data & 0x1); - output().set_value("Left_Flash_2", (data & 0x2) >> 1); - output().set_value("Left_Flash_3", (data & 0x4) >> 2); - output().set_value("Left_Flash_4", (data & 0x8) >> 3); - output().set_value("Right_Flash_1", (data & 0x10) >> 4); - output().set_value("Right_Flash_2", (data & 0x20) >> 5); - output().set_value("Right_Flash_3", (data & 0x40) >> 6); - output().set_value("Right_Flash_4", (data & 0x80) >> 7); + output().set_value("Left_Flash_1", data & 0x1); + output().set_value("Left_Flash_2", (data & 0x2) >> 1); + output().set_value("Left_Flash_3", (data & 0x4) >> 2); + output().set_value("Left_Flash_4", (data & 0x8) >> 3); + output().set_value("Right_Flash_1", (data & 0x10) >> 4); + output().set_value("Right_Flash_2", (data & 0x20) >> 5); + output().set_value("Right_Flash_3", (data & 0x40) >> 6); + output().set_value("Right_Flash_4", (data & 0x80) >> 7); } /* Gun Output Data */ if ( ((data & 0x800) == 0x800) && ((data & 0x400) != 0x400 ) ) { - output().set_value("Left_Gun_Recoil", data & 0x1); - output().set_value("Right_Gun_Recoil", (data & 0x2) >> 1); - output().set_value("Left_Gun_Green_Led", (~data & 0x20) >> 5); - output().set_value("Left_Gun_Red_Led", (~data & 0x10) >> 4); - output().set_value("Right_Gun_Green_Led", (~data & 0x80) >> 7); - output().set_value("Right_Gun_Red_Led", (~data & 0x40) >> 6); + output().set_value("Left_Gun_Recoil", data & 0x1); + output().set_value("Right_Gun_Recoil", (data & 0x2) >> 1); + output().set_value("Left_Gun_Green_Led", (~data & 0x20) >> 5); + output().set_value("Left_Gun_Red_Led", (~data & 0x10) >> 4); + output().set_value("Right_Gun_Green_Led", (~data & 0x80) >> 7); + output().set_value("Right_Gun_Red_Led", (~data & 0x40) >> 6); } if (offset == 0) diff --git a/src/mame/video/taito_z.cpp b/src/mame/video/taito_z.cpp index 8063788df87..d3a1afa8219 100644 --- a/src/mame/video/taito_z.cpp +++ b/src/mame/video/taito_z.cpp @@ -2,29 +2,39 @@ // copyright-holders:David Graves #include "emu.h" #include "includes/taito_z.h" -#include "screen.h" + /**********************************************************/ -VIDEO_START_MEMBER(taitoz_state,taitoz) +void contcirc_state::video_start() { + taitoz_z80_sound_state::video_start(); + m_road_palbank = 3; - m_sci_spriteframe = 0; save_item(NAME(m_road_palbank)); +} + +void sci_state::video_start() +{ + taitoz_z80_sound_state::video_start(); + + m_sci_spriteframe = 0; + save_item(NAME(m_sci_spriteframe)); } + /******************************************************** SPRITE READ AND WRITE HANDLERS ********************************************************/ -u16 taitoz_state::sci_spriteframe_r() +u16 sci_state::sci_spriteframe_r() { - return (m_sci_spriteframe << 8); + return m_sci_spriteframe << 8; } -void taitoz_state::sci_spriteframe_w(u16 data) +void sci_state::sci_spriteframe_w(u16 data) { m_sci_spriteframe = (data >> 8) & 0xff; } @@ -144,7 +154,7 @@ confirmed ********************************************************/ -void taitoz_state::contcirc_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) +void contcirc_state::contcirc_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) { int sprites_flipscreen = 0; static const u32 primasks[2] = { 0xf0, 0xfc }; @@ -232,7 +242,7 @@ void taitoz_state::contcirc_draw_sprites_16x8(screen_device &screen, bitmap_ind1 -void taitoz_state::chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) +void taitoz_z80_sound_state::chasehq_draw_sprites_16x16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) { int sprites_flipscreen = 0; static const u32 primasks[2] = { 0xf0, 0xfc }; @@ -498,7 +508,7 @@ void taitoz_state::bshark_draw_sprites_16x8(screen_device &screen, bitmap_ind16 -void taitoz_state::sci_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) +void sci_state::sci_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs) { int sprites_flipscreen = 0; static const u32 primasks[2] = { 0xf0, 0xfc }; @@ -595,7 +605,7 @@ void taitoz_state::sci_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bi -void taitoz_state::aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs) +void taitoz_z80_sound_state::aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs) { int sprites_flipscreen = 0; static const u32 primasks[2] = { 0xf0, 0xfc }; @@ -682,7 +692,7 @@ void taitoz_state::aquajack_draw_sprites_16x8(screen_device &screen, bitmap_ind1 -void taitoz_state::spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs) +void spacegun_state::spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect,int y_offs) { int sprites_flipscreen = 0; static const u32 primasks[2] = { 0xf0, 0xfc }; @@ -772,7 +782,7 @@ void taitoz_state::spacegun_draw_sprites_16x8(screen_device &screen, bitmap_ind1 SCREEN REFRESH **************************************************************/ -void taitoz_state::contcirc_out_w(u8 data) +void contcirc_state::contcirc_out_w(u8 data) { /* bit 0 = reset sub CPU */ m_audiocpu->set_input_line(INPUT_LINE_RESET, BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE); @@ -790,7 +800,7 @@ void taitoz_state::contcirc_out_w(u8 data) m_road_palbank = (data & 0xc0) >> 6; } -WRITE_LINE_MEMBER(taitoz_state::scope_vblank) +WRITE_LINE_MEMBER(contcirc_state::scope_vblank) { if (state) { @@ -811,7 +821,7 @@ WRITE_LINE_MEMBER(taitoz_state::scope_vblank) } } -u32 taitoz_state::screen_update_contcirc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 contcirc_state::screen_update_contcirc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[3]; @@ -837,7 +847,7 @@ u32 taitoz_state::screen_update_contcirc(screen_device &screen, bitmap_ind16 &bi /* Nightstr and ChaseHQ */ -u32 taitoz_state::screen_update_chasehq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 taitoz_z80_sound_state::screen_update_chasehq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[3]; @@ -887,7 +897,7 @@ u32 taitoz_state::screen_update_bshark(screen_device &screen, bitmap_ind16 &bitm } -u32 taitoz_state::screen_update_sci(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 sci_state::screen_update_sci(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[3]; @@ -912,7 +922,7 @@ u32 taitoz_state::screen_update_sci(screen_device &screen, bitmap_ind16 &bitmap, } -u32 taitoz_state::screen_update_aquajack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 taitoz_z80_sound_state::screen_update_aquajack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[3]; @@ -937,7 +947,7 @@ u32 taitoz_state::screen_update_aquajack(screen_device &screen, bitmap_ind16 &bi } -u32 taitoz_state::screen_update_spacegun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 spacegun_state::screen_update_spacegun(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[3]; @@ -962,7 +972,7 @@ u32 taitoz_state::screen_update_spacegun(screen_device &screen, bitmap_ind16 &bi } -u32 taitoz_state::screen_update_dblaxle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 dblaxle_state::screen_update_dblaxle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[5]; u16 priority; @@ -997,7 +1007,7 @@ u32 taitoz_state::screen_update_dblaxle(screen_device &screen, bitmap_ind16 &bit } -u32 taitoz_state::screen_update_racingb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 sci_state::screen_update_racingb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { u8 layer[5]; u16 priority; |