From afb2f40678a2bf19db015aad62f86ace9cf59f84 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sat, 16 Jun 2018 19:21:43 +0900 Subject: williams.cpp : Cleanups (#3660) * williams.cpp : Reduce runtime tag lookups, Add input_merger for interrupts, Reduce duplicates, Fix naming, Device'd palette for williams_state/blaster_state games, Split spdball Address map audio/williams.cpp : Reduce runtime tag lookups, Cleanup duplicates * williams.cpp : output_finder --- src/mame/audio/williams.cpp | 78 ++++++++++++----------- src/mame/audio/williams.h | 13 +++- src/mame/drivers/williams.cpp | 140 ++++++++++++++++++++++++++---------------- src/mame/includes/williams.h | 64 +++++++++---------- src/mame/machine/williams.cpp | 127 ++++++++++++-------------------------- src/mame/video/williams.cpp | 22 +++---- 6 files changed, 217 insertions(+), 227 deletions(-) diff --git a/src/mame/audio/williams.cpp b/src/mame/audio/williams.cpp index 8b814cb1009..dce51aee1d6 100644 --- a/src/mame/audio/williams.cpp +++ b/src/mame/audio/williams.cpp @@ -76,6 +76,7 @@ williams_cvsd_sound_device::williams_cvsd_sound_device(const machine_config &mco m_cpu(*this, "cpu"), m_pia(*this, "pia"), m_hc55516(*this, "cvsd"), + m_rombank(*this, "rombank"), m_talkback(0) { } @@ -118,7 +119,7 @@ WRITE_LINE_MEMBER(williams_cvsd_sound_device::reset_write) WRITE8_MEMBER(williams_cvsd_sound_device::bank_select_w) { - membank("rombank")->set_entry(data & 0x0f); + m_rombank->set_entry(data & 0x0f); } @@ -214,9 +215,9 @@ void williams_cvsd_sound_device::device_start() // D3 -> A16 // offs_t offset = 0x8000 * ((bank >> 2) & 3) + 0x20000 * (bank & 3); - membank("rombank")->configure_entry(bank, &rom[0x10000 + offset]); + m_rombank->configure_entry(bank, &rom[0x10000 + offset]); } - membank("rombank")->set_entry(0); + m_rombank->set_entry(0); // reset the IRQ state m_pia->ca1_w(1); @@ -264,9 +265,10 @@ void williams_cvsd_sound_device::device_timer(emu_timer &timer, device_timer_id williams_narc_sound_device::williams_narc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, WILLIAMS_NARC_SOUND, tag, owner, clock), device_mixer_interface(mconfig, *this), - m_cpu0(*this, "cpu0"), - m_cpu1(*this, "cpu1"), + m_cpu(*this, "cpu%u", 0U), m_hc55516(*this, "cvsd"), + m_masterbank(*this, "masterbank"), + m_slavebank(*this, "slavebank"), m_latch(0), m_latch2(0), m_talkback(0), @@ -307,18 +309,18 @@ WRITE_LINE_MEMBER(williams_narc_sound_device::reset_write) // going high halts the CPU if (state) { - master_bank_select_w(m_cpu0->space(), 0, 0); - slave_bank_select_w(m_cpu1->space(), 0, 0); + master_bank_select_w(m_cpu[0]->space(), 0, 0); + slave_bank_select_w(m_cpu[1]->space(), 0, 0); device_reset(); - m_cpu0->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - m_cpu1->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_cpu[0]->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_cpu[1]->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } // going low resets and reactivates the CPU else { - m_cpu0->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - m_cpu1->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + m_cpu[0]->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + m_cpu[1]->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); } } @@ -330,7 +332,7 @@ WRITE_LINE_MEMBER(williams_narc_sound_device::reset_write) WRITE8_MEMBER(williams_narc_sound_device::master_bank_select_w) { - membank("masterbank")->set_entry(data & 0x0f); + m_masterbank->set_entry(data & 0x0f); } @@ -341,7 +343,7 @@ WRITE8_MEMBER(williams_narc_sound_device::master_bank_select_w) WRITE8_MEMBER(williams_narc_sound_device::slave_bank_select_w) { - membank("slavebank")->set_entry(data & 0x0f); + m_slavebank->set_entry(data & 0x0f); } @@ -352,7 +354,7 @@ WRITE8_MEMBER(williams_narc_sound_device::slave_bank_select_w) READ8_MEMBER(williams_narc_sound_device::command_r) { - m_cpu0->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_cpu[0]->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); m_sound_int_state = 0; return m_latch; } @@ -376,7 +378,7 @@ WRITE8_MEMBER(williams_narc_sound_device::command2_w) READ8_MEMBER(williams_narc_sound_device::command2_r) { - m_cpu1->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); + m_cpu[1]->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); return m_latch2; } @@ -533,7 +535,7 @@ void williams_narc_sound_device::device_start() // D3 -> A16 // offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3); - membank("masterbank")->configure_entry(bank, &rom[0x10000 + offset]); + m_masterbank->configure_entry(bank, &rom[0x10000 + offset]); } membank("masterupper")->set_base(&rom[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]); @@ -547,7 +549,7 @@ void williams_narc_sound_device::device_start() // D3 -> A16 // offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3); - membank("slavebank")->configure_entry(bank, &rom[0x10000 + offset]); + m_slavebank->configure_entry(bank, &rom[0x10000 + offset]); } membank("slaveupper")->set_base(&rom[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]); @@ -568,12 +570,12 @@ void williams_narc_sound_device::device_reset() { // reset interrupt states m_sound_int_state = 0; - m_cpu0->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); - m_cpu0->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); - m_cpu0->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - m_cpu1->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); - m_cpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); - m_cpu1->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_cpu[0]->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); + m_cpu[0]->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_cpu[0]->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_cpu[1]->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE); + m_cpu[1]->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_cpu[1]->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } @@ -587,17 +589,17 @@ void williams_narc_sound_device::device_timer(emu_timer &timer, device_timer_id { case TID_MASTER_COMMAND: m_latch = param & 0xff; - m_cpu0->set_input_line(INPUT_LINE_NMI, (param & 0x100) ? CLEAR_LINE : ASSERT_LINE); + m_cpu[0]->set_input_line(INPUT_LINE_NMI, (param & 0x100) ? CLEAR_LINE : ASSERT_LINE); if ((param & 0x200) == 0) { - m_cpu0->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); + m_cpu[0]->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); m_sound_int_state = 1; } break; case TID_SLAVE_COMMAND: m_latch2 = param & 0xff; - m_cpu1->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); + m_cpu[1]->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE); break; case TID_SYNC_CLEAR: @@ -619,6 +621,8 @@ williams_adpcm_sound_device::williams_adpcm_sound_device(const machine_config &m : device_t(mconfig, WILLIAMS_ADPCM_SOUND, tag, owner, clock), device_mixer_interface(mconfig, *this), m_cpu(*this, "cpu"), + m_rombank(*this, "rombank"), + m_okibank(*this, "okibank"), m_latch(0), m_talkback(0), m_sound_int_state(0) @@ -674,7 +678,7 @@ READ_LINE_MEMBER(williams_adpcm_sound_device::irq_read) WRITE8_MEMBER(williams_adpcm_sound_device::bank_select_w) { - membank("rombank")->set_entry(data & 0x07); + m_rombank->set_entry(data & 0x07); } @@ -685,7 +689,7 @@ WRITE8_MEMBER(williams_adpcm_sound_device::bank_select_w) WRITE8_MEMBER(williams_adpcm_sound_device::oki6295_bank_select_w) { - membank("okibank")->set_entry(data & 7); + m_okibank->set_entry(data & 7); } @@ -776,20 +780,20 @@ void williams_adpcm_sound_device::device_start() { // configure banks uint8_t *rom = memregion("cpu")->base(); - membank("rombank")->configure_entries(0, 8, &rom[0x10000], 0x8000); + m_rombank->configure_entries(0, 8, &rom[0x10000], 0x8000); membank("romupper")->set_base(&rom[0x10000 + 0x4000 + 7 * 0x8000]); // expand ADPCM data rom = memregion("oki")->base(); // it is assumed that U12 is loaded @ 0x00000 and U13 is loaded @ 0x40000 - membank("okibank")->configure_entry(0, &rom[0x40000]); - membank("okibank")->configure_entry(1, &rom[0x40000]); - membank("okibank")->configure_entry(2, &rom[0x20000]); - membank("okibank")->configure_entry(3, &rom[0x00000]); - membank("okibank")->configure_entry(4, &rom[0xe0000]); - membank("okibank")->configure_entry(5, &rom[0xc0000]); - membank("okibank")->configure_entry(6, &rom[0xa0000]); - membank("okibank")->configure_entry(7, &rom[0x80000]); + m_okibank->configure_entry(0, &rom[0x40000]); + m_okibank->configure_entry(1, &rom[0x40000]); + m_okibank->configure_entry(2, &rom[0x20000]); + m_okibank->configure_entry(3, &rom[0x00000]); + m_okibank->configure_entry(4, &rom[0xe0000]); + m_okibank->configure_entry(5, &rom[0xc0000]); + m_okibank->configure_entry(6, &rom[0xa0000]); + m_okibank->configure_entry(7, &rom[0x80000]); // register for save states save_item(NAME(m_latch)); diff --git a/src/mame/audio/williams.h b/src/mame/audio/williams.h index 00c6d1082de..fa12524d3c1 100644 --- a/src/mame/audio/williams.h +++ b/src/mame/audio/williams.h @@ -65,6 +65,8 @@ private: required_device m_pia; required_device m_hc55516; + required_memory_bank m_rombank; + // internal state uint8_t m_talkback; @@ -102,7 +104,7 @@ public: void williams_narc_master_map(address_map &map); void williams_narc_slave_map(address_map &map); - mc6809e_device *get_cpu() { return m_cpu0; } + mc6809e_device *get_cpu() { return m_cpu[0]; } protected: // device-level overrides @@ -121,10 +123,12 @@ private: }; // devices - required_device m_cpu0; - required_device m_cpu1; + required_device_array m_cpu; required_device m_hc55516; + required_memory_bank m_masterbank; + required_memory_bank m_slavebank; + // internal state uint8_t m_latch; uint8_t m_latch2; @@ -177,6 +181,9 @@ private: // devices required_device m_cpu; + required_memory_bank m_rombank; + required_memory_bank m_okibank; + // internal state uint8_t m_latch; uint8_t m_talkback; diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp index 812e22af60f..de20e7e52f9 100644 --- a/src/mame/drivers/williams.cpp +++ b/src/mame/drivers/williams.cpp @@ -504,6 +504,7 @@ Reference video: https://www.youtube.com/watch?v=R5OeC6Wc_yI #include "includes/williams.h" #include "machine/74157.h" +#include "machine/input_merger.h" #include "machine/nvram.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -537,8 +538,8 @@ void williams_state::defender_bankc000_map(address_map &map) map(0x0010, 0x001f).mirror(0x03e0).w(FUNC(williams_state::defender_video_control_w)); map(0x0400, 0x04ff).mirror(0x0300).ram().w(FUNC(williams_state::williams_cmos_w)).share("nvram"); map(0x0800, 0x0bff).r(FUNC(williams_state::williams_video_counter_r)); - map(0x0c00, 0x0c03).mirror(0x03e0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x0c04, 0x0c07).mirror(0x03e0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0c00, 0x0c03).mirror(0x03e0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0c04, 0x0c07).mirror(0x03e0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0x1000, 0x9fff).rom().region("maincpu", 0x10000); map(0xa000, 0xffff).noprw(); } @@ -553,11 +554,11 @@ void williams_state::defender_bankc000_map(address_map &map) void williams_state::williams_map(address_map &map) { - map(0x0000, 0x8fff).bankr("bank1").writeonly().share("videoram"); + map(0x0000, 0x8fff).bankr("mainbank").writeonly().share("videoram"); map(0x9000, 0xbfff).ram(); map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram"); - map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xc900, 0xc9ff).w(FUNC(williams_state::williams_vram_select_w)); map(0xca00, 0xca07).mirror(0x00f8).w(FUNC(williams_state::williams_blitter_w)); map(0xcb00, 0xcbff).r(FUNC(williams_state::williams_video_counter_r)); @@ -576,11 +577,11 @@ void williams_state::williams_map(address_map &map) void williams_state::sinistar_map(address_map &map) { - map(0x0000, 0x8fff).bankr("bank1").writeonly().share("videoram"); + map(0x0000, 0x8fff).bankr("mainbank").writeonly().share("videoram"); map(0x9000, 0xbfff).ram(); map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram"); - map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xc900, 0xc9ff).w(FUNC(williams_state::sinistar_vram_select_w)); map(0xca00, 0xca07).mirror(0x00f8).w(FUNC(williams_state::williams_blitter_w)); map(0xcb00, 0xcbff).r(FUNC(williams_state::williams_video_counter_r)); @@ -592,6 +593,26 @@ void williams_state::sinistar_map(address_map &map) +/************************************* + * + * Speed Ball memory handlers + * + *************************************/ + +void spdball_state::spdball_map(address_map &map) +{ + williams_map(map); + /* install extra input handlers */ + map(0xc800, 0xc800).portr("AN0"); + map(0xc801, 0xc801).portr("AN1"); + map(0xc802, 0xc802).portr("AN2"); + map(0xc803, 0xc803).portr("AN3"); + /* add a third PIA */ + map(0xc808, 0xc80b).mirror(0x00f0).rw(m_pia[3], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); +} + + + /************************************* * * Blaster memory handlers @@ -600,15 +621,15 @@ void williams_state::sinistar_map(address_map &map) void blaster_state::blaster_map(address_map &map) { - map(0x0000, 0x3fff).bankr("bank1").writeonly().share("videoram"); - map(0x4000, 0x8fff).bankr("bank2").writeonly(); + map(0x0000, 0x3fff).bankr("mainbank").writeonly().share("videoram"); + map(0x4000, 0x8fff).bankr("blaster_bankb").writeonly(); map(0x9000, 0xbaff).ram(); map(0xbb00, 0xbbff).ram().share("blaster_pal0"); map(0xbc00, 0xbcff).ram().share("blaster_scan"); map(0xbd00, 0xbfff).ram(); map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram"); - map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xc900, 0xc93f).w(FUNC(blaster_state::blaster_vram_select_w)); map(0xc940, 0xc97f).w(FUNC(blaster_state::blaster_remap_select_w)); map(0xc980, 0xc9bf).w(FUNC(blaster_state::blaster_bank_select_w)); @@ -631,14 +652,14 @@ void blaster_state::blaster_map(address_map &map) void williams2_state::williams2_common_map(address_map &map) { map(0x0000, 0xbfff).ram().share("videoram"); - map(0x0000, 0x7fff).bankr("bank1"); + map(0x0000, 0x7fff).bankr("mainbank"); map(0x8000, 0x87ff).m(m_bank8000, FUNC(address_map_bank_device::amap8)); map(0xc000, 0xc7ff).ram().w(FUNC(williams2_state::williams2_tileram_w)).share("williams2_tile"); map(0xc800, 0xc87f).w(FUNC(williams2_state::williams2_bank_select_w)); map(0xc880, 0xc887).mirror(0x0078).w(FUNC(williams2_state::williams_blitter_w)); map(0xc900, 0xc97f).w(FUNC(williams2_state::williams2_watchdog_reset_w)); - map(0xc980, 0xc983).mirror(0x0070).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0xc984, 0xc987).mirror(0x0070).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc980, 0xc983).mirror(0x0070).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0xc984, 0xc987).mirror(0x0070).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xc98c, 0xc98f).mirror(0x0070).w(FUNC(williams2_state::williams2_7segment_w)); map(0xcb00, 0xcb1f).w(FUNC(williams2_state::williams2_fg_select_w)); map(0xcb20, 0xcb3f).w(FUNC(williams2_state::williams2_bg_select_w)); @@ -684,7 +705,7 @@ void williams2_state::williams2_d000_rom_map(address_map &map) void williams_state::defender_sound_map(address_map &map) { map(0x0000, 0x007f).ram(); /* internal RAM */ - map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xb000, 0xffff).rom(); } @@ -693,7 +714,7 @@ void williams_state::sound_map(address_map &map) { map(0x0000, 0x007f).ram(); /* internal RAM */ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */ - map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xb000, 0xffff).rom(); } @@ -702,7 +723,7 @@ void blaster_state::sound_map_b(address_map &map) { map(0x0000, 0x007f).ram(); /* internal RAM */ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */ - map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2b, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0400, 0x0403).mirror(0x8000).rw(m_pia[3], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xb000, 0xffff).rom(); } @@ -718,7 +739,7 @@ void williams2_state::williams2_sound_map(address_map &map) { map(0x0000, 0x007f).ram(); /* internal RAM */ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */ - map(0x2000, 0x2003).mirror(0x1ffc).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x2000, 0x2003).mirror(0x1ffc).rw(m_pia[2], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); map(0xe000, 0xffff).rom(); } @@ -1445,7 +1466,7 @@ static const gfx_layout williams2_layout = 0+2*8+RGN_FRAC(0,3), 4+2*8+RGN_FRAC(0,3), 0+2*8+RGN_FRAC(1,3), 4+2*8+RGN_FRAC(1,3), 0+2*8+RGN_FRAC(2,3), 4+2*8+RGN_FRAC(2,3), 0+3*8+RGN_FRAC(0,3), 4+3*8+RGN_FRAC(0,3), 0+3*8+RGN_FRAC(1,3), 4+3*8+RGN_FRAC(1,3), 0+3*8+RGN_FRAC(2,3), 4+3*8+RGN_FRAC(2,3) }, - { 0*8, 4*8, 8*8, 12*8, 16*8, 20*8, 24*8, 28*8, 32*8, 36*8, 40*8, 44*8, 48*8, 52*8, 56*8, 60*8 }, + { STEP16(0,4*8) }, 4*16*8 }; @@ -1490,6 +1511,9 @@ MACHINE_CONFIG_START(williams_state::williams) MCFG_VIDEO_START_OVERRIDE(williams_state,williams) + MCFG_PALETTE_ADD("palette", 256) + MCFG_PALETTE_INIT_OWNER(williams_state,williams) + /* sound hardware */ SPEAKER(config, "speaker").front_center(); MCFG_DEVICE_ADD("dac", MC1408, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) // mc1408.ic6 @@ -1497,20 +1521,26 @@ MACHINE_CONFIG_START(williams_state::williams) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) /* pia */ - MCFG_DEVICE_ADD(m_pia_0, PIA6821, 0) + MCFG_INPUT_MERGER_ANY_HIGH("mainirq") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE)) + + MCFG_INPUT_MERGER_ANY_HIGH("soundirq") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("soundcpu", M6808_IRQ_LINE)) + + MCFG_DEVICE_ADD(m_pia[0], PIA6821, 0) MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_PIA_READPB_HANDLER(IOPORT("IN1")) - MCFG_DEVICE_ADD(m_pia_1, PIA6821, 0) + MCFG_DEVICE_ADD(m_pia[1], PIA6821, 0) MCFG_PIA_READPA_HANDLER(IOPORT("IN2")) MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, williams_state, williams_snd_cmd_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state, williams_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams_state, williams_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) - MCFG_DEVICE_ADD(m_pia_2, PIA6821, 0) + MCFG_DEVICE_ADD(m_pia[2], PIA6821, 0) MCFG_PIA_WRITEPA_HANDLER(WRITE8("dac", dac_byte_interface, data_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state,williams_snd_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams_state,williams_snd_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<1>)) MACHINE_CONFIG_END @@ -1577,6 +1607,8 @@ MACHINE_CONFIG_START(spdball_state::spdball) williams(config); /* basic machine hardware */ + MCFG_DEVICE_MODIFY("maincpu") + MCFG_DEVICE_PROGRAM_MAP(spdball_map) /* pia */ MCFG_DEVICE_ADD("pia_3", PIA6821, 0) @@ -1692,16 +1724,19 @@ MACHINE_CONFIG_START(blaster_state::blaster) MCFG_74157_A_IN_CB(IOPORT("INP1")) MCFG_74157_B_IN_CB(IOPORT("INP2")) + MCFG_INPUT_MERGER_ANY_HIGH("soundirq_b") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("soundcpu_b", M6808_IRQ_LINE)) + MCFG_DEVICE_MODIFY("pia_1") MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, blaster_state, blaster_snd_cmd_w)) MCFG_DEVICE_MODIFY("pia_2") MCFG_PIA_WRITEPA_HANDLER(WRITE8("ldac", dac_byte_interface, data_w)) - MCFG_DEVICE_ADD("pia_2b", PIA6821, 0) + MCFG_DEVICE_ADD("pia_3", PIA6821, 0) MCFG_PIA_WRITEPA_HANDLER(WRITE8("rdac", dac_byte_interface, data_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, blaster_state,williams_snd_irq_b)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, blaster_state,williams_snd_irq_b)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("soundirq_b", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("soundirq_b", input_merger_any_high_device, in_w<1>)) /* sound hardware */ MCFG_DEVICE_REMOVE("speaker") @@ -1764,6 +1799,12 @@ MACHINE_CONFIG_START(williams2_state::williams2) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) /* pia */ + MCFG_INPUT_MERGER_ANY_HIGH("mainirq") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE)) + + MCFG_INPUT_MERGER_ANY_HIGH("soundirq") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("soundcpu", M6808_IRQ_LINE)) + MCFG_DEVICE_ADD("pia_0", PIA6821, 0) MCFG_PIA_READPA_HANDLER(IOPORT("IN0")) MCFG_PIA_READPB_HANDLER(IOPORT("IN1")) @@ -1772,15 +1813,15 @@ MACHINE_CONFIG_START(williams2_state::williams2) MCFG_PIA_READPA_HANDLER(IOPORT("IN2")) MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, williams2_state,williams2_snd_cmd_w)) MCFG_PIA_CB2_HANDLER(WRITELINE("pia_2", pia6821_device, ca1_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state,williams_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams_state,williams_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) MCFG_DEVICE_ADD("pia_2", PIA6821, 0) MCFG_PIA_WRITEPA_HANDLER(WRITE8("pia_1", pia6821_device, portb_w)) MCFG_PIA_WRITEPB_HANDLER(WRITE8("dac", dac_byte_interface, data_w)) MCFG_PIA_CA2_HANDLER(WRITELINE("pia_1", pia6821_device, cb1_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state,williams_snd_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams_state,williams_snd_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("soundirq", input_merger_any_high_device, in_w<1>)) MACHINE_CONFIG_END @@ -1803,12 +1844,12 @@ MACHINE_CONFIG_START(williams2_state::mysticm) /* pia */ MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state,williams_main_firq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams2_state,mysticm_main_irq)) + MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) MCFG_DEVICE_MODIFY("pia_1") - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams2_state,mysticm_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams2_state,mysticm_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<2>)) MACHINE_CONFIG_END @@ -1819,17 +1860,19 @@ MACHINE_CONFIG_START(tshoot_state::tshoot) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(williams2_d000_rom_map) + MCFG_MACHINE_START_OVERRIDE(tshoot_state,tshoot) + /* pia */ MCFG_DEVICE_MODIFY("pia_0") MCFG_PIA_READPA_HANDLER(READ8("mux", ls157_x2_device, output_r)) MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, tshoot_state, lamp_w)) MCFG_PIA_CA2_HANDLER(WRITELINE("mux", ls157_x2_device, select_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams2_state,tshoot_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams2_state,tshoot_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) MCFG_DEVICE_MODIFY("pia_1") - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams2_state,tshoot_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams2_state,tshoot_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<2>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<3>)) MCFG_DEVICE_MODIFY("pia_2") MCFG_PIA_CB2_HANDLER(WRITELINE(*this, tshoot_state, maxvol_w)) @@ -1864,8 +1907,8 @@ MACHINE_CONFIG_START(joust2_state::joust2) MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, joust2_state,joust2_snd_cmd_w)) MCFG_PIA_CA2_HANDLER(WRITELINE(*this, joust2_state,joust2_pia_3_cb1_w)) MCFG_PIA_CB2_HANDLER(WRITELINE("pia_2", pia6821_device, ca1_w)) - MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, williams_state,williams_main_irq)) - MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, williams_state,williams_main_irq)) + MCFG_PIA_IRQA_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<0>)) + MCFG_PIA_IRQB_HANDLER(WRITELINE("mainirq", input_merger_any_high_device, in_w<1>)) MCFG_DEVICE_ADD("mux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("INP1")) @@ -3242,15 +3285,6 @@ void blaster_state::init_blaster() void spdball_state::driver_init() { CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000); - - /* add a third PIA */ - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc808, 0xc80b, read8_delegate(FUNC(pia6821_device::read), (pia6821_device*)m_pia_3), write8_delegate(FUNC(pia6821_device::write), (pia6821_device*)m_pia_3)); - - /* install extra input handlers */ - m_maincpu->space(AS_PROGRAM).install_read_port(0xc800, 0xc800, "AN0"); - m_maincpu->space(AS_PROGRAM).install_read_port(0xc801, 0xc801, "AN1"); - m_maincpu->space(AS_PROGRAM).install_read_port(0xc802, 0xc802, "AN2"); - m_maincpu->space(AS_PROGRAM).install_read_port(0xc803, 0xc803, "AN3"); } diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h index 02d24197b7b..8f54d27ee39 100644 --- a/src/mame/includes/williams.h +++ b/src/mame/includes/williams.h @@ -22,20 +22,19 @@ class williams_state : public driver_device { public: - williams_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + williams_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_nvram(*this, "nvram"), m_videoram(*this, "videoram"), + m_mainbank(*this, "mainbank"), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_bankc000(*this, "bankc000"), m_watchdog(*this, "watchdog"), m_screen(*this, "screen"), m_palette(*this, "palette"), - m_generic_paletteram_8(*this, "paletteram"), - m_pia_0(*this, "pia_0"), - m_pia_1(*this, "pia_1"), - m_pia_2(*this, "pia_2") { } + m_paletteram(*this, "paletteram"), + m_pia(*this, "pia_%u", 0U) { } enum { @@ -52,6 +51,7 @@ public: required_shared_ptr m_nvram; required_shared_ptr m_videoram; + optional_memory_bank m_mainbank; uint8_t *m_mayday_protection; uint8_t m_blitter_config; uint16_t m_blitter_clip_address; @@ -99,27 +99,21 @@ public: DECLARE_WRITE8_MEMBER(playball_snd_cmd_w); DECLARE_READ8_MEMBER(williams_49way_port_0_r); DECLARE_WRITE_LINE_MEMBER(lottofun_coin_lock_w); + DECLARE_PALETTE_INIT(williams); void state_save_register(); - void create_palette_lookup(); void blitter_init(int blitter_config, const uint8_t *remap_prom); inline void blit_pixel(address_space &space, int dstaddr, int srcdata, int controlbyte); int blitter_core(address_space &space, int sstart, int dstart, int w, int h, int data); - DECLARE_WRITE_LINE_MEMBER(williams_main_irq); - DECLARE_WRITE_LINE_MEMBER(williams_main_firq); - DECLARE_WRITE_LINE_MEMBER(williams_snd_irq); - required_device m_maincpu; required_device m_soundcpu; optional_device m_bankc000; required_device m_watchdog; required_device m_screen; optional_device m_palette; - optional_shared_ptr m_generic_paletteram_8; - required_device m_pia_0; - required_device m_pia_1; - required_device m_pia_2; + optional_shared_ptr m_paletteram; + optional_device_array m_pia; void playball(machine_config &config); void defender(machine_config &config); void sinistar(machine_config &config); @@ -138,34 +132,29 @@ public: class spdball_state : public williams_state { public: - spdball_state(const machine_config &mconfig, device_type type, const char *tag) - : williams_state(mconfig, type, tag) - , m_pia_3(*this, "pia_3") - { - } + spdball_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag) { } void driver_init() override; void spdball(machine_config &config); - -protected: - required_device m_pia_3; + void spdball_map(address_map &map); }; class blaster_state : public williams_state { public: - blaster_state(const machine_config &mconfig, device_type type, const char *tag) - : williams_state(mconfig, type, tag), + blaster_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag), m_soundcpu_b(*this, "soundcpu_b"), - m_pia_2b(*this, "pia_2b"), m_blaster_palette_0(*this, "blaster_pal0"), - m_blaster_scanline_control(*this, "blaster_scan") { } + m_blaster_scanline_control(*this, "blaster_scan"), + m_blaster_bankb(*this, "blaster_bankb") { } optional_device m_soundcpu_b; - optional_device m_pia_2b; required_shared_ptr m_blaster_palette_0; required_shared_ptr m_blaster_scanline_control; + optional_memory_bank m_blaster_bankb; rgb_t m_blaster_color0; uint8_t m_blaster_video_control; @@ -178,7 +167,6 @@ public: DECLARE_WRITE8_MEMBER(blaster_video_control_w); TIMER_CALLBACK_MEMBER(blaster_deferred_snd_cmd_w); DECLARE_WRITE8_MEMBER(blaster_snd_cmd_w); - DECLARE_WRITE_LINE_MEMBER(williams_snd_irq_b); void init_blaster(); DECLARE_MACHINE_START(blaster); @@ -226,8 +214,6 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(williams2_endscreen_callback); TIMER_CALLBACK_MEMBER(williams2_deferred_snd_cmd_w); DECLARE_WRITE8_MEMBER(williams2_snd_cmd_w); - DECLARE_WRITE_LINE_MEMBER(mysticm_main_irq); - DECLARE_WRITE_LINE_MEMBER(tshoot_main_irq); void init_mysticm(); void init_tshoot(); @@ -250,17 +236,27 @@ public: class tshoot_state : public williams2_state { public: - tshoot_state(const machine_config &mconfig, device_type type, const char *tag) - : williams2_state(mconfig, type, tag), - m_gun(*this, {"GUNX", "GUNY"}) { } + tshoot_state(const machine_config &mconfig, device_type type, const char *tag) : + williams2_state(mconfig, type, tag), + m_gun(*this, {"GUNX", "GUNY"}), + m_grenade_lamp(*this, "Grenade_lamp"), + m_gun_lamp(*this, "Gun_lamp"), + m_p1_gun_recoil(*this, "Player1_Gun_Recoil"), + m_feather_blower(*this, "Feather_Blower") { } DECLARE_CUSTOM_INPUT_MEMBER(gun_r); DECLARE_WRITE_LINE_MEMBER(maxvol_w); DECLARE_WRITE8_MEMBER(lamp_w); + DECLARE_MACHINE_START(tshoot); + void tshoot(machine_config &config); private: required_ioport_array<2> m_gun; + output_finder<> m_grenade_lamp; + output_finder<> m_gun_lamp; + output_finder<> m_p1_gun_recoil; + output_finder<> m_feather_blower; }; class joust2_state : public williams2_state diff --git a/src/mame/machine/williams.cpp b/src/mame/machine/williams.cpp index f300bb0cb1c..267f7bad1f0 100644 --- a/src/mame/machine/williams.cpp +++ b/src/mame/machine/williams.cpp @@ -25,7 +25,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_va11_callback) return; /* the IRQ signal comes into CB1, and is set to VA11 */ - m_pia_1->cb1_w(BIT(scanline, 5)); + m_pia[1]->cb1_w(BIT(scanline, 5)); } @@ -34,69 +34,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams_state::williams_count240_callback) int scanline = param; // the COUNT240 signal comes into CA1, and is set to the logical AND of VA10-VA13 - m_pia_1->ca1_w(scanline >= 240 ? 1 : 0); + m_pia[1]->ca1_w(scanline >= 240 ? 1 : 0); } -WRITE_LINE_MEMBER(williams_state::williams_main_irq) -{ - int combined_state = m_pia_1->irq_a_state() | m_pia_1->irq_b_state(); - - /* IRQ to the main CPU */ - m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} - - -WRITE_LINE_MEMBER(williams_state::williams_main_firq) -{ - /* FIRQ to the main CPU */ - m_maincpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); -} - - -WRITE_LINE_MEMBER(williams_state::williams_snd_irq) -{ - int combined_state = m_pia_2->irq_a_state() | m_pia_2->irq_b_state(); - - /* IRQ to the sound CPU */ - m_soundcpu->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} -/* Same as above, but for second sound board */ -WRITE_LINE_MEMBER(blaster_state::williams_snd_irq_b) -{ - int combined_state = m_pia_2b->irq_a_state() | m_pia_2b->irq_b_state(); - - /* IRQ to the sound CPU */ - m_soundcpu_b->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} - - - -/************************************* - * - * Newer Williams interrupts - * - *************************************/ - -WRITE_LINE_MEMBER(williams2_state::mysticm_main_irq) -{ - int combined_state = m_pia_0->irq_b_state() | m_pia_1->irq_a_state() | m_pia_1->irq_b_state(); - - /* IRQ to the main CPU */ - m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} - - -WRITE_LINE_MEMBER(williams2_state::tshoot_main_irq) -{ - int combined_state = m_pia_0->irq_a_state() | m_pia_0->irq_b_state() | m_pia_1->irq_a_state() | m_pia_1->irq_b_state(); - - /* IRQ to the main CPU */ - m_maincpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE); -} - - - /************************************* * * Older Williams initialization @@ -106,8 +47,8 @@ WRITE_LINE_MEMBER(williams2_state::tshoot_main_irq) MACHINE_START_MEMBER(williams_state,williams_common) { /* configure the memory bank */ - membank("bank1")->configure_entry(1, memregion("maincpu")->base() + 0x10000); - membank("bank1")->configure_entry(0, m_videoram); + m_mainbank->configure_entry(1, memregion("maincpu")->base() + 0x10000); + m_mainbank->configure_entry(0, m_videoram); } @@ -131,8 +72,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_va11_callback) return; // the IRQ signal comes into CB1, and is set to VA11 - m_pia_0->cb1_w(BIT(scanline, 5)); - m_pia_1->ca1_w(BIT(scanline, 5)); + m_pia[0]->cb1_w(BIT(scanline, 5)); + m_pia[1]->ca1_w(BIT(scanline, 5)); } @@ -141,7 +82,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_endscreen_callback) int scanline = param; // the /ENDSCREEN signal comes into CA1 - m_pia_0->ca1_w(scanline >= 254 ? 0 : 1); + m_pia[0]->ca1_w(scanline >= 254 ? 0 : 1); } @@ -155,8 +96,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_endscreen_callback) MACHINE_START_MEMBER(williams2_state,williams2) { /* configure memory banks */ - membank("bank1")->configure_entries(1, 4, memregion("maincpu")->base() + 0x10000, 0x10000); - membank("bank1")->configure_entry(0, m_videoram); + m_mainbank->configure_entries(1, 4, memregion("maincpu")->base() + 0x10000, 0x10000); + m_mainbank->configure_entry(0, m_videoram); membank("vram8000")->set_base(&m_videoram[0x8000]); } @@ -178,7 +119,7 @@ MACHINE_RESET_MEMBER(williams2_state,williams2) WRITE8_MEMBER(williams_state::williams_vram_select_w) { /* VRAM/ROM banking from bit 0 */ - membank("bank1")->set_entry(data & 0x01); + m_mainbank->set_entry(data & 0x01); /* cocktail flip from bit 1 */ m_cocktail = data & 0x02; @@ -192,20 +133,20 @@ WRITE8_MEMBER(williams2_state::williams2_bank_select_w) { /* page 0 is video ram */ case 0: - membank("bank1")->set_entry(0); + m_mainbank->set_entry(0); m_bank8000->set_bank(0); break; /* pages 1 and 2 are ROM */ case 1: case 2: - membank("bank1")->set_entry(1 + ((data & 6) >> 1)); + m_mainbank->set_entry(1 + ((data & 6) >> 1)); m_bank8000->set_bank(0); break; /* page 3 accesses palette RAM; the remaining areas are as if page 1 ROM was selected */ case 3: - membank("bank1")->set_entry(1 + ((data & 4) >> 1)); + m_mainbank->set_entry(1 + ((data & 4) >> 1)); m_bank8000->set_bank(1); break; } @@ -221,8 +162,8 @@ WRITE8_MEMBER(williams2_state::williams2_bank_select_w) TIMER_CALLBACK_MEMBER(williams_state::williams_deferred_snd_cmd_w) { - m_pia_2->write_portb(param); - m_pia_2->cb1_w((param == 0xff) ? 0 : 1); + m_pia[2]->write_portb(param); + m_pia[2]->cb1_w((param == 0xff) ? 0 : 1); } WRITE8_MEMBER(williams_state::williams_snd_cmd_w) @@ -238,7 +179,7 @@ WRITE8_MEMBER(williams_state::playball_snd_cmd_w) TIMER_CALLBACK_MEMBER(williams2_state::williams2_deferred_snd_cmd_w) { - m_pia_2->write_porta(param); + m_pia[2]->write_porta(param); } WRITE8_MEMBER(williams2_state::williams2_snd_cmd_w) @@ -440,11 +381,11 @@ WRITE8_MEMBER(williams_state::sinistar_vram_select_w) MACHINE_START_MEMBER(blaster_state,blaster) { /* banking is different for blaster */ - membank("bank1")->configure_entries(1, 16, memregion("maincpu")->base() + 0x18000, 0x4000); - membank("bank1")->configure_entry(0, m_videoram); + m_mainbank->configure_entries(1, 16, memregion("maincpu")->base() + 0x18000, 0x4000); + m_mainbank->configure_entry(0, m_videoram); - membank("bank2")->configure_entries(1, 16, memregion("maincpu")->base() + 0x10000, 0x0000); - membank("bank2")->configure_entry(0, &m_videoram[0x4000]); + m_blaster_bankb->configure_entries(1, 16, memregion("maincpu")->base() + 0x10000, 0x0000); + m_blaster_bankb->configure_entry(0, &m_videoram[0x4000]); /* register for save states */ save_item(NAME(m_vram_bank)); @@ -454,8 +395,8 @@ MACHINE_START_MEMBER(blaster_state,blaster) inline void blaster_state::update_blaster_banking() { - membank("bank1")->set_entry(m_vram_bank * (m_rom_bank + 1)); - membank("bank2")->set_entry(m_vram_bank * (m_rom_bank + 1)); + m_mainbank->set_entry(m_vram_bank * (m_rom_bank + 1)); + m_blaster_bankb->set_entry(m_vram_bank * (m_rom_bank + 1)); } @@ -485,8 +426,8 @@ TIMER_CALLBACK_MEMBER(blaster_state::blaster_deferred_snd_cmd_w) uint8_t l_data = param | 0x80; uint8_t r_data = (param >> 1 & 0x40) | (param & 0x3f) | 0x80; - m_pia_2->write_portb(l_data); m_pia_2->cb1_w((l_data == 0xff) ? 0 : 1); - m_pia_2b->write_portb(r_data); m_pia_2b->cb1_w((r_data == 0xff) ? 0 : 1); + m_pia[2]->write_portb(l_data); m_pia[2]->cb1_w((l_data == 0xff) ? 0 : 1); + m_pia[3]->write_portb(r_data); m_pia[3]->cb1_w((r_data == 0xff) ? 0 : 1); } @@ -516,6 +457,16 @@ WRITE_LINE_MEMBER(williams_state::lottofun_coin_lock_w) * *************************************/ +MACHINE_START_MEMBER(tshoot_state,tshoot) +{ + MACHINE_START_CALL_MEMBER(williams2); + m_grenade_lamp.resolve(); + m_gun_lamp.resolve(); + m_p1_gun_recoil.resolve(); + m_feather_blower.resolve(); +} + + CUSTOM_INPUT_MEMBER(tshoot_state::gun_r) { int data = m_gun[(uintptr_t)param]->read(); @@ -533,13 +484,13 @@ WRITE_LINE_MEMBER(tshoot_state::maxvol_w) WRITE8_MEMBER(tshoot_state::lamp_w) { /* set the grenade lamp */ - output().set_value("Grenade_lamp", (~data & 0x4)>>2 ); + m_grenade_lamp = BIT(~data, 2); /* set the gun lamp */ - output().set_value("Gun_lamp", (~data & 0x8)>>3 ); + m_gun_lamp = BIT(~data, 3); /* gun coil */ - output().set_value("Player1_Gun_Recoil", (data & 0x10)>>4 ); + m_p1_gun_recoil = BIT(data, 4); /* feather coil */ - output().set_value("Feather_Blower", (data & 0x20)>>5 ); + m_feather_blower = BIT(data, 5); } @@ -565,7 +516,7 @@ MACHINE_RESET_MEMBER(joust2_state,joust2) TIMER_CALLBACK_MEMBER(joust2_state::joust2_deferred_snd_cmd_w) { - m_pia_2->write_porta(param & 0xff); + m_pia[2]->write_porta(param & 0xff); } diff --git a/src/mame/video/williams.cpp b/src/mame/video/williams.cpp index 52ef8a61356..95e32f95671 100644 --- a/src/mame/video/williams.cpp +++ b/src/mame/video/williams.cpp @@ -170,7 +170,6 @@ void williams_state::state_save_register() VIDEO_START_MEMBER(williams_state,williams) { blitter_init(m_blitter_config, nullptr); - create_palette_lookup(); state_save_register(); } @@ -178,7 +177,6 @@ VIDEO_START_MEMBER(williams_state,williams) VIDEO_START_MEMBER(blaster_state,blaster) { blitter_init(m_blitter_config, memregion("proms")->base()); - create_palette_lookup(); state_save_register(); save_item(NAME(m_blaster_color0)); save_item(NAME(m_blaster_video_control)); @@ -213,7 +211,7 @@ uint32_t williams_state::screen_update_williams(screen_device &screen, bitmap_rg /* precompute the palette */ for (x = 0; x < 16; x++) - pens[x] = m_palette_lookup[m_generic_paletteram_8[x]]; + pens[x] = m_palette->pen_color(m_paletteram[x]); /* loop over rows */ for (y = cliprect.min_y; y <= cliprect.max_y; y++) @@ -240,11 +238,11 @@ uint32_t blaster_state::screen_update_blaster(screen_device &screen, bitmap_rgb3 /* precompute the palette */ for (x = 0; x < 16; x++) - pens[x] = m_palette_lookup[m_generic_paletteram_8[x]]; + pens[x] = m_palette->pen_color(m_paletteram[x]); /* if we're blitting from the top, start with a 0 for color 0 */ if (cliprect.min_y == screen.visible_area().min_y || !(m_blaster_video_control & 1)) - m_blaster_color0 = m_palette_lookup[m_blaster_palette_0[0] ^ 0xff]; + m_blaster_color0 = m_palette->pen_color(m_blaster_palette_0[0] ^ 0xff); /* loop over rows */ for (y = cliprect.min_y; y <= cliprect.max_y; y++) @@ -255,7 +253,7 @@ uint32_t blaster_state::screen_update_blaster(screen_device &screen, bitmap_rgb3 /* latch a new color0 pen? */ if (m_blaster_video_control & m_blaster_scanline_control[y] & 1) - m_blaster_color0 = m_palette_lookup[m_blaster_palette_0[y] ^ 0xff]; + m_blaster_color0 = m_palette->pen_color(m_blaster_palette_0[y] ^ 0xff); /* loop over columns */ for (x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2) @@ -315,7 +313,7 @@ uint32_t williams2_state::screen_update_williams2(screen_device &screen, bitmap_ * *************************************/ -void williams_state::create_palette_lookup() +PALETTE_INIT_MEMBER(williams_state,williams) { static const int resistances_rg[3] = { 1200, 560, 330 }; static const int resistances_b[2] = { 560, 330 }; @@ -331,18 +329,18 @@ void williams_state::create_palette_lookup() 2, resistances_b, weights_b, 0, 0); /* build a palette lookup */ - m_palette_lookup = std::make_unique(256); for (i = 0; i < 256; i++) { int r = combine_3_weights(weights_r, BIT(i,0), BIT(i,1), BIT(i,2)); int g = combine_3_weights(weights_g, BIT(i,3), BIT(i,4), BIT(i,5)); int b = combine_2_weights(weights_b, BIT(i,6), BIT(i,7)); - m_palette_lookup[i] = rgb_t(r, g, b); + palette.set_pen_color(i, rgb_t(r, g, b)); } } + WRITE8_MEMBER(williams2_state::williams2_paletteram_w) { static const uint8_t ztable[16] = @@ -353,11 +351,11 @@ WRITE8_MEMBER(williams2_state::williams2_paletteram_w) uint8_t entry_lo, entry_hi, i, r, g, b; /* set the new value */ - m_generic_paletteram_8[offset] = data; + m_paletteram[offset] = data; /* pull the associated low/high bytes */ - entry_lo = m_generic_paletteram_8[offset & ~1]; - entry_hi = m_generic_paletteram_8[offset | 1]; + entry_lo = m_paletteram[offset & ~1]; + entry_hi = m_paletteram[offset | 1]; /* update the palette entry */ i = ztable[(entry_hi >> 4) & 15]; -- cgit v1.2.3