summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ryan Holtz <ryan.holtz@arrowheadgs.com>2020-04-25 20:43:02 +0200
committer Ryan Holtz <ryan.holtz@arrowheadgs.com>2020-04-25 20:43:12 +0200
commit2dec1d2ef08d8490ebce518a1db836d83a76bec1 (patch)
tree95c0ab5700b07d9cfac6c8d4e63696a79ddd9d58
parentd7afff09ac1554d8c921fa7806523538dc549a54 (diff)
-vgmplay: Added a hold button. [Ryan Holtz]
-rw-r--r--src/mame/drivers/vgmplay.cpp45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp
index 767d0e808d9..d6b80d4b0e4 100644
--- a/src/mame/drivers/vgmplay.cpp
+++ b/src/mame/drivers/vgmplay.cpp
@@ -396,7 +396,8 @@ enum vgmplay_inputs : uint8_t
VGMPLAY_VIZ,
VGMPLAY_RATE_DOWN,
VGMPLAY_RATE_UP,
- VGMPLAY_RATE_RST
+ VGMPLAY_RATE_RST,
+ VGMPLAY_HOLD,
};
class vgmplay_state : public driver_device
@@ -450,6 +451,9 @@ public:
template<int Index> void ga20_map(address_map &map);
private:
+ virtual void machine_start() override;
+
+ uint32_t m_held_clock;
std::vector<uint8_t> m_file_data;
required_device<vgmplay_device> m_vgmplay;
required_device<vgmviz_device> m_mixer;
@@ -2605,6 +2609,11 @@ vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, co
std::fill(std::begin(m_upd7759_drq), std::end(m_upd7759_drq), 0);
}
+void vgmplay_state::machine_start()
+{
+ save_item(NAME(m_held_clock));
+}
+
uint32_t vgmplay_state::r32(int off) const
{
if (off + 3 < int(m_file_data.size()))
@@ -3140,11 +3149,10 @@ WRITE8_MEMBER(vgmplay_state::scc_w)
INPUT_CHANGED_MEMBER(vgmplay_state::key_pressed)
{
- if (!newval)
+ if (!newval && param != VGMPLAY_HOLD)
return;
- int val = (uint8_t)param;
- switch (val)
+ switch (param)
{
case VGMPLAY_STOP:
m_vgmplay->stop();
@@ -3173,20 +3181,31 @@ INPUT_CHANGED_MEMBER(vgmplay_state::key_pressed)
case VGMPLAY_RATE_RST:
m_vgmplay->set_unscaled_clock(44100);
break;
+ case VGMPLAY_HOLD:
+ if (newval)
+ {
+ m_held_clock = m_vgmplay->clock();
+ m_vgmplay->set_unscaled_clock(0);
+ }
+ else
+ {
+ m_vgmplay->set_unscaled_clock(m_held_clock);
+ }
}
}
static INPUT_PORTS_START( vgmplay )
PORT_START("CONTROLS")
- PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_STOP) PORT_NAME("Stop")
- PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_PAUSE) PORT_NAME("Pause")
- PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_PLAY) PORT_NAME("Play")
- PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RESTART) PORT_NAME("Restart")
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_LOOP) PORT_NAME("Loop")
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_VIZ) PORT_NAME("Visualization Mode")
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_DOWN) PORT_CODE(KEYCODE_R) PORT_NAME("Rate Down")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_UP) PORT_CODE(KEYCODE_T) PORT_NAME("Rate Up")
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_RST) PORT_CODE(KEYCODE_U) PORT_NAME("Reset Rate")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_STOP) PORT_NAME("Stop")
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_PAUSE) PORT_NAME("Pause")
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_PLAY) PORT_NAME("Play")
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RESTART) PORT_NAME("Restart")
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_LOOP) PORT_NAME("Loop")
+ PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_VIZ) PORT_NAME("Visualization Mode")
+ PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_DOWN) PORT_CODE(KEYCODE_R) PORT_NAME("Rate Down")
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_UP) PORT_CODE(KEYCODE_T) PORT_NAME("Rate Up")
+ PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_RATE_RST) PORT_CODE(KEYCODE_Y) PORT_NAME("Rate Reset")
+ PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CHANGED_MEMBER(DEVICE_SELF, vgmplay_state, key_pressed, VGMPLAY_HOLD) PORT_CODE(KEYCODE_U) PORT_NAME("Rate Hold")
INPUT_PORTS_END
void vgmplay_state::file_map(address_map &map)