aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2025-03-24 13:36:08 +0300
committerWohlstand <admin@wohlnet.ru>2025-03-24 13:36:08 +0300
commit4fd3ef02876897453f7309b4a8b62113e63bffb0 (patch)
tree79706d4b6e692b08993cf0566038f624ed7c2938 /src
parentdb850087a4222e0709269e666ddf8923a72977ab (diff)
downloadlibADLMIDI-4fd3ef02876897453f7309b4a8b62113e63bffb0.tar.gz
libADLMIDI-4fd3ef02876897453f7309b4a8b62113e63bffb0.tar.bz2
libADLMIDI-4fd3ef02876897453f7309b4a8b62113e63bffb0.zip
ESFM: Remove the queue workaround
Diffstat (limited to 'src')
-rw-r--r--src/chips/esfmu_opl3.cpp36
-rw-r--r--src/chips/esfmu_opl3.h14
2 files changed, 3 insertions, 47 deletions
diff --git a/src/chips/esfmu_opl3.cpp b/src/chips/esfmu_opl3.cpp
index 67056d0..9637c4a 100644
--- a/src/chips/esfmu_opl3.cpp
+++ b/src/chips/esfmu_opl3.cpp
@@ -23,10 +23,7 @@
#include <cstring>
ESFMuOPL3::ESFMuOPL3() :
- OPLChipBaseT(),
- m_headPos(0),
- m_tailPos(0),
- m_queueCount(0)
+ OPLChipBaseT()
{
m_chip = new esfm_chip;
ESFMuOPL3::setRate(m_rate);
@@ -56,16 +53,8 @@ void ESFMuOPL3::reset()
void ESFMuOPL3::writeReg(uint16_t addr, uint8_t data)
{
- Reg &back = m_queue[m_headPos++];
- back.addr = addr;
- back.data = data;
-
- if(m_headPos >= c_queueSize)
- m_headPos = 0;
-
- ++m_queueCount;
- // esfm_chip *chip_r = reinterpret_cast<esfm_chip*>(m_chip);
- // ESFM_write_reg_buffered(chip_r, addr, data);
+ esfm_chip *chip_r = reinterpret_cast<esfm_chip*>(m_chip);
+ ESFM_write_reg_buffered_fast(chip_r, addr, data);
}
void ESFMuOPL3::writePan(uint16_t addr, uint8_t data)
@@ -80,25 +69,6 @@ void ESFMuOPL3::writePan(uint16_t addr, uint8_t data)
void ESFMuOPL3::nativeGenerate(int16_t *frame)
{
esfm_chip *chip_r = reinterpret_cast<esfm_chip*>(m_chip);
- uint32_t addr = 0xffff, data;
-
- // see if there is data to be written; if so, extract it and dequeue
- if(m_queueCount > 0)
- {
- const Reg &front = m_queue[m_tailPos++];
-
- if(m_tailPos >= c_queueSize)
- m_tailPos = 0;
- --m_queueCount;
-
- addr = front.addr;
- data = front.data;
- }
-
- // write to the chip
- if(addr != 0xffff)
- ESFM_write_reg(chip_r, addr, data);
-
ESFM_generate(chip_r, frame);
}
diff --git a/src/chips/esfmu_opl3.h b/src/chips/esfmu_opl3.h
index 43eb09a..b01d784 100644
--- a/src/chips/esfmu_opl3.h
+++ b/src/chips/esfmu_opl3.h
@@ -26,20 +26,6 @@
class ESFMuOPL3 final : public OPLChipBaseT<ESFMuOPL3>
{
void *m_chip;
-
- static const size_t c_queueSize = 500;
-
- struct Reg
- {
- uint32_t addr;
- uint8_t data;
- };
-
- Reg m_queue[c_queueSize];
- size_t m_headPos;
- size_t m_tailPos;
- long m_queueCount;
-
public:
ESFMuOPL3();
~ESFMuOPL3() override;