diff options
Diffstat (limited to 'src/chips/nuked_opl3.cpp')
-rw-r--r-- | src/chips/nuked_opl3.cpp | 62 |
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() |