summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ryan Holtz <ryan.holtz@arrowheadgs.com>2020-04-25 20:13:45 +0200
committer Ryan Holtz <ryan.holtz@arrowheadgs.com>2020-04-25 20:14:06 +0200
commit32801c685fd20a3d855d724deca0bad96e34d178 (patch)
treeb3f8672c4b6bdc04382a41a2360addd33346d3bc /src
parent43683e7916230437eccf781e7a83f07ac3093cc2 (diff)
-vgmplay: Added rate controls. [Ryan Holtz]
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/vgmplay.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp
index 956582d95e8..767d0e808d9 100644
--- a/src/mame/drivers/vgmplay.cpp
+++ b/src/mame/drivers/vgmplay.cpp
@@ -394,6 +394,9 @@ enum vgmplay_inputs : uint8_t
VGMPLAY_RESTART,
VGMPLAY_LOOP,
VGMPLAY_VIZ,
+ VGMPLAY_RATE_DOWN,
+ VGMPLAY_RATE_UP,
+ VGMPLAY_RATE_RST
};
class vgmplay_state : public driver_device
@@ -957,14 +960,15 @@ void vgmplay_device::execute_run()
uint32_t version = m_file->read_dword(8);
m_pc = 0x34 + m_file->read_dword(0x34);
- if ((version < 0x150 && m_pc != 0x34) ||
- (version >= 0x150 && m_pc == 0x34))
+ if ((version < 0x150 && m_pc != 0x34) || (version >= 0x150 && m_pc == 0x34))
{
osd_printf_error("bad rip detected, v%x invalid header size 0x%x\n", version, m_pc);
m_pc = 0x40;
}
else if (version < 0x150)
+ {
m_pc = 0x40;
+ }
m_state = RUN;
break;
@@ -3160,6 +3164,15 @@ INPUT_CHANGED_MEMBER(vgmplay_state::key_pressed)
case VGMPLAY_VIZ:
m_mixer->cycle_viz_mode();
break;
+ case VGMPLAY_RATE_DOWN:
+ m_vgmplay->set_unscaled_clock((uint32_t)(m_vgmplay->clock() * 0.95f));
+ break;
+ case VGMPLAY_RATE_UP:
+ m_vgmplay->set_unscaled_clock((uint32_t)(m_vgmplay->clock() / 0.95f));
+ break;
+ case VGMPLAY_RATE_RST:
+ m_vgmplay->set_unscaled_clock(44100);
+ break;
}
}
@@ -3171,6 +3184,9 @@ static INPUT_PORTS_START( vgmplay )
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")
INPUT_PORTS_END
void vgmplay_state::file_map(address_map &map)