aboutsummaryrefslogtreecommitdiff
path: root/src/chips/nuked_opl3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chips/nuked_opl3.cpp')
-rw-r--r--src/chips/nuked_opl3.cpp62
1 files changed, 9 insertions, 53 deletions
diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp
index 70fc525..48e5c17 100644
--- a/src/chips/nuked_opl3.cpp
+++ b/src/chips/nuked_opl3.cpp
@@ -3,18 +3,10 @@
#include <cstring>
NukedOPL3::NukedOPL3() :
- OPLChipBase()
+ OPLChipBaseT()
{
m_chip = new opl3_chip;
- reset(m_rate);
-}
-
-NukedOPL3::NukedOPL3(const NukedOPL3 &c):
- OPLChipBase(c)
-{
- m_chip = new opl3_chip;
- std::memset(m_chip, 0, sizeof(opl3_chip));
- reset(c.m_rate);
+ setRate(m_rate);
}
NukedOPL3::~NukedOPL3()
@@ -25,7 +17,7 @@ NukedOPL3::~NukedOPL3()
void NukedOPL3::setRate(uint32_t rate)
{
- OPLChipBase::setRate(rate);
+ OPLChipBaseT::setRate(rate);
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
std::memset(chip_r, 0, sizeof(opl3_chip));
OPL3_Reset(chip_r, rate);
@@ -33,12 +25,10 @@ void NukedOPL3::setRate(uint32_t rate)
void NukedOPL3::reset()
{
- setRate(m_rate);
-}
-
-void NukedOPL3::reset(uint32_t rate)
-{
- setRate(rate);
+ OPLChipBaseT::reset();
+ opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
+ std::memset(chip_r, 0, sizeof(opl3_chip));
+ OPL3_Reset(chip_r, m_rate);
}
void NukedOPL3::writeReg(uint16_t addr, uint8_t data)
@@ -47,44 +37,10 @@ void NukedOPL3::writeReg(uint16_t addr, uint8_t data)
OPL3_WriteRegBuffered(chip_r, addr, data);
}
-int NukedOPL3::generate(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3_GenerateStream(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3::generateAndMix(int16_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- OPL3_GenerateStreamMix(chip_r, output, (Bit32u)frames);
- return (int)frames;
-}
-
-int NukedOPL3::generate32(int32_t *output, size_t frames)
-{
- opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3_GenerateResampled(chip_r, frame);
- output[0] = (int32_t)frame[0];
- output[1] = (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
-}
-
-int NukedOPL3::generateAndMix32(int32_t *output, size_t frames)
+void NukedOPL3::nativeGenerate(int16_t *frame)
{
opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip);
- for(size_t i = 0; i < frames; ++i) {
- int16_t frame[2];
- OPL3_GenerateResampled(chip_r, frame);
- output[0] += (int32_t)frame[0];
- output[1] += (int32_t)frame[1];
- output += 2;
- }
- return (int)frames;
+ OPL3_Generate(chip_r, frame);
}
const char *NukedOPL3::emulatorName()