diff options
| author | 2024-04-18 07:16:35 +1000 | |
|---|---|---|
| committer | 2024-04-18 07:16:35 +1000 | |
| commit | 76fdb9e645b7afcda376dbc63fdfd8f145df0d26 (patch) | |
| tree | 637262579b3067b879b8c5b6790f4a4366d01d5e /src | |
| parent | 520ed5e44b49f80ec38bb812d8477e2b8a607cfc (diff) | |
-ui/videoopt.cpp: Hold Ctrl to jump to the next one-second interval for pointer timeout.
-midway/williams.cpp: Simplified class hierarchy.
Diffstat (limited to 'src')
| -rw-r--r-- | src/frontend/mame/ui/videoopt.cpp | 17 | ||||
| -rw-r--r-- | src/mame/midway/williams.cpp | 99 | ||||
| -rw-r--r-- | src/mame/midway/williams.h | 105 | ||||
| -rw-r--r-- | src/mame/midway/williams_m.cpp | 15 |
4 files changed, 109 insertions, 127 deletions
diff --git a/src/frontend/mame/ui/videoopt.cpp b/src/frontend/mame/ui/videoopt.cpp index 7aeb2ac7bf3..a179a2ec16f 100644 --- a/src/frontend/mame/ui/videoopt.cpp +++ b/src/frontend/mame/ui/videoopt.cpp @@ -362,13 +362,14 @@ bool menu_video_options::handle(event const *ev) } else { - auto const timeout = ui().pointer_activity_timeout(m_target.index()); - if (std::chrono::milliseconds(100) < timeout) + bool const ctrl_pressed = machine().input().code_pressed(KEYCODE_LCONTROL) || machine().input().code_pressed(KEYCODE_RCONTROL); + std::chrono::milliseconds const increment(ctrl_pressed ? 1'000 : 100); + auto timeout = ui().pointer_activity_timeout(m_target.index()); + auto const remainder = timeout % increment; + timeout -= remainder.count() ? remainder : increment; + if (std::chrono::milliseconds(100) <= timeout) { - auto const remainder = timeout % std::chrono::milliseconds(100); - ui().set_pointer_activity_timeout( - m_target.index(), - timeout - (remainder.count() ? remainder : std::chrono::milliseconds(100))); + ui().set_pointer_activity_timeout(m_target.index(), timeout); changed = true; } } @@ -384,9 +385,11 @@ bool menu_video_options::handle(event const *ev) } else { + bool const ctrl_pressed = machine().input().code_pressed(KEYCODE_LCONTROL) || machine().input().code_pressed(KEYCODE_RCONTROL); + int const increment(ctrl_pressed ? 1'000 : 100); ui().set_pointer_activity_timeout( m_target.index(), - std::chrono::milliseconds((1 + (timeout / std::chrono::milliseconds(100))) * 100)); + std::chrono::milliseconds((1 + (timeout / std::chrono::milliseconds(increment))) * increment)); } changed = true; } diff --git a/src/mame/midway/williams.cpp b/src/mame/midway/williams.cpp index 1ee2a9aad91..e73d04dc429 100644 --- a/src/mame/midway/williams.cpp +++ b/src/mame/midway/williams.cpp @@ -515,7 +515,7 @@ void defender_state::main_map(address_map &map) m_rom_view[0](0xc000, 0xc00f).mirror(0x03e0).writeonly().share(m_paletteram); m_rom_view[0](0xc3ff, 0xc3ff).w(FUNC(defender_state::watchdog_reset_w)); m_rom_view[0](0xc010, 0xc01f).mirror(0x03e0).w(FUNC(defender_state::video_control_w)); - m_rom_view[0](0xc400, 0xc4ff).mirror(0x0300).ram().w(FUNC(defender_state::cmos_w)).share("nvram"); + m_rom_view[0](0xc400, 0xc4ff).mirror(0x0300).ram().w(FUNC(defender_state::cmos_4bit_w)).share("nvram"); m_rom_view[0](0xc800, 0xcbff).r(FUNC(defender_state::video_counter_r)); m_rom_view[0](0xcc00, 0xcc03).mirror(0x03e0).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); m_rom_view[0](0xcc04, 0xcc07).mirror(0x03e0).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write)); @@ -564,7 +564,7 @@ void williams_state::main_map(address_map &map) map(0xca00, 0xca07).mirror(0x00f8).w(FUNC(williams_state::blitter_w)); map(0xcb00, 0xcbff).r(FUNC(williams_state::video_counter_r)); map(0xcbff, 0xcbff).w(FUNC(williams_state::watchdog_reset_w)); - map(0xcc00, 0xcfff).ram().w(FUNC(williams_state::cmos_w)).share("nvram"); + map(0xcc00, 0xcfff).ram().w(FUNC(williams_state::cmos_4bit_w)).share("nvram"); map(0xd000, 0xffff).rom(); } @@ -579,6 +579,7 @@ void williams_state::main_map(address_map &map) void sinistar_state::main_map(address_map &map) { williams_state::main_map(map); + map(0xd000, 0xdfff).ram(); map(0xe000, 0xffff).rom(); } @@ -587,18 +588,36 @@ void sinistar_state::main_map(address_map &map) /************************************* * + * Bubbles memory handlers + * + *************************************/ + +void williams_state::bubbles_main_map(address_map &map) +{ + main_map(map); + + // bubbles has additional CMOS for a full 8 bits + map(0xcc00, 0xcfff).ram().share("nvram"); +} + + + +/************************************* + * * Speed Ball memory handlers * *************************************/ -void spdball_state::main_map(address_map &map) +void williams_state::spdball_main_map(address_map &map) { - williams_state::main_map(map); + main_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)); } @@ -627,7 +646,7 @@ void blaster_state::main_map(address_map &map) map(0xca00, 0xca07).mirror(0x00f8).w(FUNC(blaster_state::blitter_w)); map(0xcb00, 0xcbff).r(FUNC(blaster_state::video_counter_r)); map(0xcbff, 0xcbff).w(FUNC(blaster_state::watchdog_reset_w)); - map(0xcc00, 0xcfff).ram().w(FUNC(blaster_state::cmos_w)).share("nvram"); + map(0xcc00, 0xcfff).ram().w(FUNC(blaster_state::cmos_4bit_w)).share("nvram"); map(0xd000, 0xffff).rom(); } @@ -660,7 +679,7 @@ void williams2_state::common_map(address_map &map) map(0xcb80, 0xcb9f).w(FUNC(williams2_state::video_control_w)); map(0xcba0, 0xcbbf).w(FUNC(williams2_state::blit_window_enable_w)); map(0xcbe0, 0xcbef).r(FUNC(williams2_state::video_counter_r)); - map(0xcc00, 0xcfff).ram().w(FUNC(williams2_state::cmos_w)).share("nvram"); + map(0xcc00, 0xcfff).ram().w(FUNC(williams2_state::cmos_4bit_w)).share("nvram"); } // mysticm and inferno: D000-DFFF is RAM @@ -1675,10 +1694,38 @@ void wms_muxed_state::splat(machine_config &config) } -void spdball_state::spdball(machine_config &config) +void williams_state::bubbles(machine_config &config) { williams_b1(config); + // Bubbles: 8-bit nvram + m_maincpu->set_addrmap(AS_PROGRAM, &williams_state::bubbles_main_map); +} + +void williams_state::playball(machine_config &config) +{ + williams_b1(config); + + // video hardware + m_screen->set_visarea(6, 298-1, 8, 240-1); + + // sound hardware + HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); + + // pia + m_pia[1]->writepb_handler().set(FUNC(williams_state::playball_snd_cmd_w)); + + m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w)); + m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w)); +} + +void williams_state::spdball(machine_config &config) +{ + williams_b1(config); + + // Speed Ball: more input ports + m_maincpu->set_addrmap(AS_PROGRAM, &williams_state::spdball_main_map); + // pia PIA6821(config, m_pia[3]); m_pia[3]->readpa_handler().set_ioport("IN3"); @@ -1734,21 +1781,6 @@ void sinistar_state::cockpit(machine_config &config) m_pia[3]->irqb_handler().set("soundirq_b", FUNC(input_merger_any_high_device::in_w<1>)); } -void playball_state::playball(machine_config &config) -{ - williams_b1(config); - - // video hardware - m_screen->set_visarea(6, 298-1, 8, 240-1); - - // sound hardware - HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); - - // pia - m_pia[2]->ca2_handler().set("cvsd", FUNC(hc55516_device::digit_w)); - m_pia[2]->cb2_handler().set("cvsd", FUNC(hc55516_device::clock_w)); -} - void blaster_state::blastkit(machine_config &config) { @@ -1869,10 +1901,11 @@ void williams2_state::williams2_base(machine_config &config) } -void inferno_state::inferno(machine_config &config) +void williams2_state::inferno(machine_config &config) { williams2_base(config); - m_maincpu->set_addrmap(AS_PROGRAM, &inferno_state::d000_ram_map); + + m_maincpu->set_addrmap(AS_PROGRAM, &williams2_state::d000_ram_map); // pia m_pia[0]->readpa_handler().set("mux", FUNC(ls157_x2_device::output_r)); @@ -1880,9 +1913,9 @@ void inferno_state::inferno(machine_config &config) m_pia[2]->set_port_a_input_overrides_output_mask(0xff); - LS157_X2(config, m_mux, 0); // IC45 (for PA4-PA7) + IC46 (for PA0-PA3) on CPU board - m_mux->a_in_callback().set_ioport("INP1"); - m_mux->b_in_callback().set_ioport("INP2"); + ls157_x2_device &mux(LS157_X2(config, "mux", 0)); // IC45 (for PA4-PA7) + IC46 (for PA0-PA3) on CPU board + mux.a_in_callback().set_ioport("INP1"); + mux.b_in_callback().set_ioport("INP2"); } void mysticm_state::mysticm(machine_config &config) @@ -3888,9 +3921,9 @@ GAME( 1982, joust, 0, joust, joust, wms_muxed_state, e GAME( 1982, joustr, joust, joust, joust, wms_muxed_state, empty_init, ROT0, "Williams", "Joust (Red label)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, jousty, joust, joust, joust, wms_muxed_state, empty_init, ROT0, "Williams", "Joust (Yellow label)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bubbles, 0, williams_b1, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bubblesr, bubbles, williams_b1, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles (Solid Red label)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bubblesp, bubbles, williams_b1, bubbles, bubbles_state, empty_init, ROT0, "Williams", "Bubbles (prototype)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bubbles, 0, bubbles, bubbles, williams_state, empty_init, ROT0, "Williams", "Bubbles", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bubblesr, bubbles, bubbles, bubbles, williams_state, empty_init, ROT0, "Williams", "Bubbles (Solid Red label)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bubblesp, bubbles, bubbles, bubbles, williams_state, empty_init, ROT0, "Williams", "Bubbles (prototype)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, splat, 0, splat, splat, wms_muxed_state, empty_init, ROT0, "Williams", "Splat!", MACHINE_SUPPORTS_SAVE ) @@ -3900,13 +3933,13 @@ GAME( 1982, sinistar2, sinistar, upright, sinistar, sinistar_state, e GAME( 1982, sinistarc2, sinistar, cockpit, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 2, cockpit)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, sinistarp, sinistar, upright, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (AMOA-82 prototype)", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, playball, 0, playball, playball, playball_state, empty_init, ROT270, "Williams", "PlayBall! (prototype)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, playball, 0, playball, playball, williams_state, empty_init, ROT270, "Williams", "PlayBall! (prototype)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, blaster, 0, blaster, blaster, blaster_state, empty_init, ROT0, "Williams / Vid Kidz", "Blaster", MACHINE_SUPPORTS_SAVE ) // 20 levels - stereo sound GAME( 1983, blastero, blaster, blaster, blaster, blaster_state, empty_init, ROT0, "Williams / Vid Kidz", "Blaster (location test)", MACHINE_SUPPORTS_SAVE ) // 30 levels - stereo sound GAME( 1983, blasterkit, blaster, blastkit, blastkit, blaster_state, empty_init, ROT0, "Williams / Vid Kidz", "Blaster (conversion kit)", MACHINE_SUPPORTS_SAVE ) // 20 levels - mono sound -GAME( 1985, spdball, 0, spdball, spdball, spdball_state, empty_init, ROT0, "Williams", "Speed Ball - Contest at Neonworld (prototype)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, spdball, 0, spdball, spdball, williams_state, empty_init, ROT0, "Williams", "Speed Ball - Contest at Neonworld (prototype)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, alienar, 0, joust, alienar, wms_muxed_state, init_alienar, ROT0, "Duncan Brown", "Alien Arena", MACHINE_SUPPORTS_SAVE ) GAME( 1985, alienaru, alienar, joust, alienar, wms_muxed_state, init_alienar, ROT0, "Duncan Brown", "Alien Arena (Stargate upgrade)", MACHINE_SUPPORTS_SAVE ) @@ -3920,7 +3953,7 @@ GAME( 1983, mysticmp, mysticm, mysticm, mysticm, mysticm_state, e GAME( 1984, tshoot, 0, tshoot, tshoot, tshoot_state, empty_init, ROT0, "Williams", "Turkey Shoot (prototype)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, inferno, 0, inferno, inferno, inferno_state, empty_init, ROT0, "Williams", "Inferno (Williams)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, inferno, 0, inferno, inferno, williams2_state, empty_init, ROT0, "Williams", "Inferno (Williams)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, joust2, 0, joust2, joust2, joust2_state, empty_init, ROT270, "Williams", "Joust 2 - Survival of the Fittest (revision 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, joust2r1, joust2, joust2, joust2, joust2_state, empty_init, ROT270, "Williams", "Joust 2 - Survival of the Fittest (revision 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/midway/williams.h b/src/mame/midway/williams.h index 53585307537..1df3bbf3488 100644 --- a/src/mame/midway/williams.h +++ b/src/mame/midway/williams.h @@ -51,6 +51,9 @@ public: void williams_b1(machine_config &config); void williams_b2(machine_config &config); + void bubbles(machine_config &config); + void playball(machine_config &config); + void spdball(machine_config &config); void lottofun(machine_config &config); u8 port_0_49way_r(); @@ -64,9 +67,6 @@ public: void palette_init(palette_device &palette) const; protected: - virtual void machine_reset() override; - virtual void video_start() override; - // blitter type enum { @@ -115,12 +115,16 @@ protected: const uint8_t *m_blitter_remap; std::unique_ptr<uint8_t[]> m_blitter_remap_lookup; + virtual void machine_reset() override; + virtual void video_start() override; + virtual void vram_select_w(u8 data); - virtual void cmos_w(offs_t offset, u8 data); + void cmos_4bit_w(offs_t offset, u8 data); void blitter_w(address_space &space, offs_t offset, u8 data); TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w); virtual void snd_cmd_w(u8 data); + void playball_snd_cmd_w(u8 data); void state_save_register(); void blitter_init(int blitter_config, const uint8_t *remap_prom); @@ -128,6 +132,8 @@ protected: int blitter_core(address_space &space, int sstart, int dstart, int w, int h, int data); virtual void main_map(address_map &map); + void bubbles_main_map(address_map &map); + void spdball_main_map(address_map &map); virtual void sound_map(address_map &map); void sound2_map(address_map &map); // for Blaster and Sinistar cockpit }; @@ -147,15 +153,15 @@ public: void init_defndjeu(); protected: + virtual void machine_reset() override; + virtual void main_map(address_map &map) override; void video_control_w(u8 data); private: - virtual void machine_reset() override; - virtual void sound_map(address_map &map) override; - virtual void sound_map_6802(address_map &map); + void sound_map_6802(address_map &map); void bank_select_w(u8 data); }; @@ -192,32 +198,6 @@ private: void cockpit_snd_cmd_w(u8 data); }; -// Playball: more soundlatch bits -class playball_state : public williams_state -{ -public: - playball_state(const machine_config &mconfig, device_type type, const char *tag) : - williams_state(mconfig, type, tag) - { } - - void playball(machine_config &config); - -private: - virtual void snd_cmd_w(u8 data) override; -}; - -// Bubbles: 8-bit nvram -class bubbles_state : public williams_state -{ -public: - bubbles_state(const machine_config &mconfig, device_type type, const char *tag) : - williams_state(mconfig, type, tag) - { } - -protected: - virtual void cmos_w(offs_t offset, u8 data) override; -}; - // Conquest: flywheel controller class conquest_state : public williams_state { @@ -256,20 +236,6 @@ private: required_device<ls157_device> m_mux1; }; -// Speed Ball: more input ports -class spdball_state : public williams_state -{ -public: - spdball_state(const machine_config &mconfig, device_type type, const char *tag) : - williams_state(mconfig, type, tag) - { } - - void spdball(machine_config &config); - -private: - virtual void main_map(address_map &map) override; -}; - // Blaster: extra sound hardware class blaster_state : public williams_state { @@ -313,16 +279,6 @@ private: class williams2_state : public williams_state { public: - INPUT_CHANGED_MEMBER(rgb_gain) - { - if (param < 3) - m_gain[param] = float(newval) / 100.0f; - else - m_offset[param - 3] = (float(newval) / 100.0f) - 1.0f; - rebuild_palette(); - } - -protected: williams2_state(const machine_config &mconfig, device_type type, const char *tag) : williams_state(mconfig, type, tag), m_gfxdecode(*this, "gfxdecode"), @@ -333,12 +289,18 @@ protected: m_offset({ 0.00f, 0.00f, 0.00f }) { } - void williams2_base(machine_config &config); + void inferno(machine_config &config); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + INPUT_CHANGED_MEMBER(rgb_gain) + { + if (param < 3) + m_gain[param] = float(newval) / 100.0f; + else + m_offset[param - 3] = (float(newval) / 100.0f) - 1.0f; + rebuild_palette(); + } +protected: required_device<gfxdecode_device> m_gfxdecode; required_shared_ptr<uint8_t> m_tileram; required_memory_bank m_mainbank; @@ -351,6 +313,12 @@ protected: std::array<float, 3> m_gain; std::array<float, 3> m_offset; + void williams2_base(machine_config &config); + + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + virtual u8 video_counter_r() override; virtual TILE_GET_INFO_MEMBER(get_tile_info); @@ -382,21 +350,6 @@ protected: void video_control_w(u8 data); }; -// Inferno -class inferno_state : public williams2_state -{ -public: - inferno_state(const machine_config &mconfig, device_type type, const char *tag) : - williams2_state(mconfig, type, tag), - m_mux(*this, "mux") - { } - - void inferno(machine_config &config); - -private: - required_device<ls157_device> m_mux; -}; - // Mystic Marathon class mysticm_state : public williams2_state { diff --git a/src/mame/midway/williams_m.cpp b/src/mame/midway/williams_m.cpp index 6e5bb62dbc6..f8521a8a603 100644 --- a/src/mame/midway/williams_m.cpp +++ b/src/mame/midway/williams_m.cpp @@ -170,9 +170,9 @@ void williams_state::snd_cmd_w(u8 data) machine().scheduler().synchronize(timer_expired_delegate(FUNC(williams_state::deferred_snd_cmd_w),this), data | 0xc0); } -void playball_state::snd_cmd_w(u8 data) +void williams_state::playball_snd_cmd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(playball_state::deferred_snd_cmd_w),this), data); + machine().scheduler().synchronize(timer_expired_delegate(FUNC(williams_state::deferred_snd_cmd_w),this), data); } TIMER_CALLBACK_MEMBER(williams2_state::deferred_snd_cmd_w) @@ -226,20 +226,13 @@ u8 williams_state::port_0_49way_r() * *************************************/ -void williams_state::cmos_w(offs_t offset, u8 data) +void williams_state::cmos_4bit_w(offs_t offset, u8 data) { - /* only 4 bits are valid */ + // only 4 bits are valid m_nvram[offset] = data | 0xf0; } -void bubbles_state::cmos_w(offs_t offset, u8 data) -{ - /* bubbles has additional CMOS for a full 8 bits */ - m_nvram[offset] = data; -} - - /************************************* * |
