summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/segapcm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/segapcm.cpp')
-rw-r--r--src/devices/sound/segapcm.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/devices/sound/segapcm.cpp b/src/devices/sound/segapcm.cpp
index 86fdedfb206..919726a26c4 100644
--- a/src/devices/sound/segapcm.cpp
+++ b/src/devices/sound/segapcm.cpp
@@ -7,6 +7,7 @@
#include "emu.h"
#include "segapcm.h"
+#include <algorithm>
// device type definition
DEFINE_DEVICE_TYPE(SEGAPCM, segapcm_device, "segapcm", "Sega PCM")
@@ -17,14 +18,13 @@ DEFINE_DEVICE_TYPE(SEGAPCM, segapcm_device, "segapcm", "Sega PCM")
//-------------------------------------------------
segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, SEGAPCM, tag, owner, clock),
- device_sound_interface(mconfig, *this),
- device_rom_interface(mconfig, *this, 21),
- m_ram(nullptr),
- m_bank(0),
- m_bankshift(0),
- m_bankmask(0),
- m_stream(nullptr)
+ : device_t(mconfig, SEGAPCM, tag, owner, clock)
+ , device_sound_interface(mconfig, *this)
+ , device_rom_interface(mconfig, *this, 21)
+ , m_ram(nullptr)
+ , m_bankshift(12)
+ , m_bankmask(0x70)
+ , m_stream(nullptr)
{
}
@@ -35,18 +35,9 @@ segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, d
void segapcm_device::device_start()
{
- int mask;
-
m_ram = std::make_unique<uint8_t[]>(0x800);
- memset(m_ram.get(), 0xff, 0x800);
-
- m_bankshift = (uint8_t) m_bank;
- mask = m_bank >> 16;
- if (!mask)
- mask = BANK_MASK7 >> 16;
-
- m_bankmask = mask & (0x1fffff >> m_bankshift);
+ std::fill(&m_ram[0], &m_ram[0x800], 0xff);
m_stream = stream_alloc(0, 2, clock() / 128);
@@ -55,6 +46,16 @@ void segapcm_device::device_start()
}
+//-------------------------------------------------
+// device_clock_changed - called if the clock
+// changes
+//-------------------------------------------------
+
+void segapcm_device::device_clock_changed()
+{
+ m_stream->set_sample_rate(clock() / 128);
+}
+
//-------------------------------------------------
// rom_bank_updated - the rom bank has changed