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.
This commit is contained in:
Vas Crabb 2021-08-29 23:39:43 +10:00
parent c833c1e2ed
commit a10ce5e161
12 changed files with 990 additions and 779 deletions

View File

@ -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()
{

View File

@ -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 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;
mutable bool modified_cached;
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 (...)
{

View File

@ -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 )

View File

@ -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 )

View File

@ -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( 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, 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( 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)

View File

@ -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
} // anonymous namespace
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)
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)

View File

@ -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 )

File diff suppressed because it is too large Load Diff

View File

@ -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);

View File

@ -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;
output_finder<2> m_shutter_out;
void cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask = ~0);
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);
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);
/* misc */
u16 m_cpua_ctrl;
private:
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();
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 spacegun_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;
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);
u8 chasehq_input_bypass_r();
u16 chasehq_motor_r(offs_t offset);
void chasehq_motor_w(offs_t offset, u16 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);
INTERRUPT_GEN_MEMBER(sci_interrupt);
void sci_draw_sprites_16x8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs);
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 sci_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 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

View File

@ -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)

View File

@ -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;