summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2024-04-18 07:16:35 +1000
committer Vas Crabb <vas@vastheman.com>2024-04-18 07:16:35 +1000
commit76fdb9e645b7afcda376dbc63fdfd8f145df0d26 (patch)
tree637262579b3067b879b8c5b6790f4a4366d01d5e
parent520ed5e44b49f80ec38bb812d8477e2b8a607cfc (diff)
-ui/videoopt.cpp: Hold Ctrl to jump to the next one-second interval for pointer timeout.
-midway/williams.cpp: Simplified class hierarchy.
-rw-r--r--src/frontend/mame/ui/videoopt.cpp17
-rw-r--r--src/mame/midway/williams.cpp99
-rw-r--r--src/mame/midway/williams.h105
-rw-r--r--src/mame/midway/williams_m.cpp15
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;
-}
-
-
/*************************************
*