From d29c02cff6bd5723535df4ea7f96978748994749 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 12 May 2022 14:12:59 -0400 Subject: redclash.cpp: Add raw parameters for screen and addressable latch devices --- src/mame/drivers/redclash.cpp | 41 +++++++++++++++++++---------------------- src/mame/includes/redclash.h | 7 +++---- src/mame/video/redclash.cpp | 12 ++++++------ 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/mame/drivers/redclash.cpp b/src/mame/drivers/redclash.cpp index 8a60bc44ee2..5905b3507d7 100644 --- a/src/mame/drivers/redclash.cpp +++ b/src/mame/drivers/redclash.cpp @@ -26,6 +26,7 @@ TODO: #include "includes/redclash.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/sn76496.h" #include "screen.h" #include "speaker.h" @@ -36,9 +37,9 @@ void redclash_state::irqack_w(uint8_t data) m_maincpu->set_input_line(0, CLEAR_LINE); } -template void redclash_state::star_w(uint8_t data) +template WRITE_LINE_MEMBER(redclash_state::star_w) { - m_stars->set_speed(BIT(data, 0) << B, 1U << B); + m_stars->set_speed(state ? 1 << B : 0, 1U << B); } void redclash_state::zerohour_map(address_map &map) @@ -51,12 +52,8 @@ void redclash_state::zerohour_map(address_map &map) map(0x4801, 0x4801).portr("IN1"); /* IN1 */ map(0x4802, 0x4802).portr("DSW1"); /* DSW0 */ map(0x4803, 0x4803).portr("DSW2"); /* DSW1 */ - map(0x5000, 0x5007).nopw(); /* to sound board */ - map(0x5800, 0x5800).w(FUNC(redclash_state::star_w<0>)); - map(0x5801, 0x5804).nopw(); /* to sound board */ - map(0x5805, 0x5805).w(FUNC(redclash_state::star_w<1>)); - map(0x5806, 0x5806).w(FUNC(redclash_state::star_w<2>)); - map(0x5807, 0x5807).w(FUNC(redclash_state::flipscreen_w)); + map(0x5000, 0x5007).w("outlatch1", FUNC(ls259_device::write_d0)); /* to sound board */ + map(0x5800, 0x5807).w("outlatch2", FUNC(ls259_device::write_d0)); /* to sound board */ map(0x7000, 0x7000).w(FUNC(redclash_state::star_reset_w)); map(0x7800, 0x7800).w(FUNC(redclash_state::irqack_w)); } @@ -71,12 +68,8 @@ void redclash_state::redclash_map(address_map &map) map(0x4801, 0x4801).portr("IN1"); /* IN1 */ map(0x4802, 0x4802).portr("DSW1"); /* DSW0 */ map(0x4803, 0x4803).portr("DSW2"); /* DSW1 */ - map(0x5000, 0x5007).nopw(); /* to sound board */ - map(0x5800, 0x5800).w(FUNC(redclash_state::star_w<0>)); - map(0x5801, 0x5801).w(FUNC(redclash_state::gfxbank_w)); - map(0x5805, 0x5805).w(FUNC(redclash_state::star_w<1>)); - map(0x5806, 0x5806).w(FUNC(redclash_state::star_w<2>)); - map(0x5807, 0x5807).w(FUNC(redclash_state::flipscreen_w)); + map(0x5000, 0x5007).w("outlatch1", FUNC(ls259_device::write_d0)); /* to sound board */ + map(0x5800, 0x5807).w("outlatch2", FUNC(ls259_device::write_d0)); /* to sound board */ map(0x6000, 0x67ff).ram(); map(0x6800, 0x6bff).ram().share(m_spriteram); map(0x7000, 0x7000).w(FUNC(redclash_state::star_reset_w)); @@ -338,25 +331,27 @@ GFXDECODE_END void redclash_state::machine_start() { save_item(NAME(m_gfxbank)); -} -void redclash_state::machine_reset() -{ m_gfxbank = 0; } void redclash_state::zerohour(machine_config &config) { /* basic machine hardware */ - Z80(config, m_maincpu, 4000000); /* 4 MHz */ + Z80(config, m_maincpu, 4_MHz_XTAL); /* 4 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &redclash_state::zerohour_map); + LS259(config, "outlatch1"); // C1 (CS10 decode) + + ls259_device &outlatch2(LS259(config, "outlatch2")); // C2 (CS11 decode) + outlatch2.q_out_cb<0>().set(FUNC(redclash_state::star_w<0>)); + outlatch2.q_out_cb<5>().set(FUNC(redclash_state::star_w<1>)); + outlatch2.q_out_cb<6>().set(FUNC(redclash_state::star_w<2>)); + outlatch2.q_out_cb<7>().set(FUNC(redclash_state::flipscreen_w)); + /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ - screen.set_size(32*8, 32*8); - screen.set_visarea(1*8, 31*8-1, 4*8, 28*8-1); + screen.set_raw(9.828_MHz_XTAL / 2, 312, 8, 248, 262, 32, 224); screen.set_screen_update(FUNC(redclash_state::screen_update)); screen.screen_vblank().set(FUNC(redclash_state::screen_vblank)); screen.set_palette(m_palette); @@ -375,6 +370,8 @@ void redclash_state::redclash(machine_config &config) zerohour(config); m_maincpu->set_addrmap(AS_PROGRAM, &redclash_state::redclash_map); + + subdevice("outlatch2")->q_out_cb<1>().set(FUNC(redclash_state::gfxbank_w)); } diff --git a/src/mame/includes/redclash.h b/src/mame/includes/redclash.h index b5294e93030..fa78de9dfb5 100644 --- a/src/mame/includes/redclash.h +++ b/src/mame/includes/redclash.h @@ -39,17 +39,16 @@ public: protected: virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; private: DECLARE_WRITE_LINE_MEMBER(screen_vblank); void videoram_w(offs_t offset, uint8_t data); - void gfxbank_w(uint8_t data); - void flipscreen_w(uint8_t data); + DECLARE_WRITE_LINE_MEMBER(gfxbank_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); void irqack_w(uint8_t data); void star_reset_w(uint8_t data); - template void star_w(uint8_t data); + template DECLARE_WRITE_LINE_MEMBER(star_w); void palette(palette_device &palette) const; TILE_GET_INFO_MEMBER(get_fg_tile_info); diff --git a/src/mame/video/redclash.cpp b/src/mame/video/redclash.cpp index c23f67bda3f..573f01bed1f 100644 --- a/src/mame/video/redclash.cpp +++ b/src/mame/video/redclash.cpp @@ -104,18 +104,18 @@ void redclash_state::videoram_w(offs_t offset, uint8_t data) m_fg_tilemap->mark_tile_dirty(offset); } -void redclash_state::gfxbank_w(uint8_t data) +WRITE_LINE_MEMBER(redclash_state::gfxbank_w) { - if (m_gfxbank != (data & 0x01)) + if (m_gfxbank != state) { - m_gfxbank = data & 0x01; - machine().tilemap().mark_all_dirty(); + m_gfxbank = state; + m_fg_tilemap->mark_all_dirty(); } } -void redclash_state::flipscreen_w(uint8_t data) +WRITE_LINE_MEMBER(redclash_state::flipscreen_w) { - flip_screen_set(data & 0x01); + flip_screen_set(state); } void redclash_state::star_reset_w(uint8_t data) -- cgit v1.2.3