summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commita10ce5e161db54c98ef8255bf43132f9bc745d9e (patch)
treeb5bbc33149ea920ee1339e34884ec87e5f54d480
parentc833c1e2ed65496c29e1d8370f1de8db422b160d (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.cpp4
-rw-r--r--src/lib/util/unzip.cpp42
-rw-r--r--src/mame/drivers/play_1.cpp37
-rw-r--r--src/mame/drivers/s3.cpp280
-rw-r--r--src/mame/drivers/s4.cpp304
-rw-r--r--src/mame/drivers/s6.cpp108
-rw-r--r--src/mame/drivers/s6a.cpp78
-rw-r--r--src/mame/drivers/taito_z.cpp484
-rw-r--r--src/mame/drivers/wpc_95.cpp18
-rw-r--r--src/mame/includes/taito_z.h332
-rw-r--r--src/mame/machine/midyunit.cpp28
-rw-r--r--src/mame/video/taito_z.cpp50
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;