aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2025-03-25 17:28:37 +0300
committerWohlstand <admin@wohlnet.ru>2025-03-25 17:28:37 +0300
commitb1324a0f1a6ccba2fb0b5144fa26bbb9fd917213 (patch)
treed1e0d56ac0a5d1fe5cb9d2371c2e48d6fee3f86d
parent8c3423b30970165df60da71ee4a4c5a546dce3d2 (diff)
downloadlibADLMIDI-b1324a0f1a6ccba2fb0b5144fa26bbb9fd917213.tar.gz
libADLMIDI-b1324a0f1a6ccba2fb0b5144fa26bbb9fd917213.tar.bz2
libADLMIDI-b1324a0f1a6ccba2fb0b5144fa26bbb9fd917213.zip
Chipset: Added "hasFullPanning" method
It should allow normal work of emulators without full-panning extension implementation, or with real hardware interfaces
-rw-r--r--src/chips/dosbox_opl3.cpp5
-rw-r--r--src/chips/dosbox_opl3.h1
-rw-r--r--src/chips/esfmu_opl3.cpp7
-rw-r--r--src/chips/esfmu_opl3.h1
-rw-r--r--src/chips/java_opl3.cpp5
-rw-r--r--src/chips/java_opl3.h1
-rw-r--r--src/chips/nuked_opl3.cpp5
-rw-r--r--src/chips/nuked_opl3.h1
-rw-r--r--src/chips/nuked_opl3_v174.cpp5
-rw-r--r--src/chips/nuked_opl3_v174.h1
-rw-r--r--src/chips/opal_opl3.cpp5
-rw-r--r--src/chips/opal_opl3.h1
-rw-r--r--src/chips/opl_chip_base.h9
-rw-r--r--src/chips/opl_serial_port.cpp5
-rw-r--r--src/chips/opl_serial_port.h1
15 files changed, 51 insertions, 2 deletions
diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp
index 69c77b6..1a29774 100644
--- a/src/chips/dosbox_opl3.cpp
+++ b/src/chips/dosbox_opl3.cpp
@@ -84,6 +84,11 @@ const char *DosBoxOPL3::emulatorName()
return "DOSBox 0.74-r4111 OPL3";
}
+bool DosBoxOPL3::hasFullPanning()
+{
+ return true;
+}
+
OPLChipBase::ChipType DosBoxOPL3::chipType()
{
return CHIPTYPE_OPL3;
diff --git a/src/chips/dosbox_opl3.h b/src/chips/dosbox_opl3.h
index 9528493..9911edb 100644
--- a/src/chips/dosbox_opl3.h
+++ b/src/chips/dosbox_opl3.h
@@ -42,6 +42,7 @@ public:
void nativeGenerateN(int16_t *output, size_t frames) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // DOSBOX_OPL3_H
diff --git a/src/chips/esfmu_opl3.cpp b/src/chips/esfmu_opl3.cpp
index 9637c4a..f5f20e9 100644
--- a/src/chips/esfmu_opl3.cpp
+++ b/src/chips/esfmu_opl3.cpp
@@ -77,7 +77,12 @@ const char *ESFMuOPL3::emulatorName()
return "ESFMu";
}
+bool ESFMuOPL3::hasFullPanning()
+{
+ return false;
+}
+
OPLChipBase::ChipType ESFMuOPL3::chipType()
{
- return CHIPTYPE_OPL3;
+ return CHIPTYPE_ESFM;
}
diff --git a/src/chips/esfmu_opl3.h b/src/chips/esfmu_opl3.h
index b01d784..b7572bb 100644
--- a/src/chips/esfmu_opl3.h
+++ b/src/chips/esfmu_opl3.h
@@ -40,6 +40,7 @@ public:
void nativeGenerate(int16_t *frame) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // ESFMU_OPL3_H
diff --git a/src/chips/java_opl3.cpp b/src/chips/java_opl3.cpp
index 0ef53a4..545dd8f 100644
--- a/src/chips/java_opl3.cpp
+++ b/src/chips/java_opl3.cpp
@@ -111,6 +111,11 @@ const char *JavaOPL3::emulatorName()
return "Java 1.0.6 OPL3";
}
+bool JavaOPL3::hasFullPanning()
+{
+ return true;
+}
+
OPLChipBase::ChipType JavaOPL3::chipType()
{
return CHIPTYPE_OPL3;
diff --git a/src/chips/java_opl3.h b/src/chips/java_opl3.h
index 1676bb6..e6b481b 100644
--- a/src/chips/java_opl3.h
+++ b/src/chips/java_opl3.h
@@ -40,6 +40,7 @@ public:
void nativeGenerateN(int16_t *output, size_t frames) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // JAVA_OPL3_H
diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp
index 31135cc..5d99bea 100644
--- a/src/chips/nuked_opl3.cpp
+++ b/src/chips/nuked_opl3.cpp
@@ -74,6 +74,11 @@ const char *NukedOPL3::emulatorName()
return "Nuked OPL3 (v 1.8)";
}
+bool NukedOPL3::hasFullPanning()
+{
+ return true;
+}
+
OPLChipBase::ChipType NukedOPL3::chipType()
{
return CHIPTYPE_OPL3;
diff --git a/src/chips/nuked_opl3.h b/src/chips/nuked_opl3.h
index 36025c7..613e5b5 100644
--- a/src/chips/nuked_opl3.h
+++ b/src/chips/nuked_opl3.h
@@ -40,6 +40,7 @@ public:
void nativeGenerate(int16_t *frame) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // NUKED_OPL3_H
diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp
index 9f98b36..96cf99d 100644
--- a/src/chips/nuked_opl3_v174.cpp
+++ b/src/chips/nuked_opl3_v174.cpp
@@ -74,6 +74,11 @@ const char *NukedOPL3v174::emulatorName()
return "Nuked OPL3 (v 1.7.4)";
}
+bool NukedOPL3v174::hasFullPanning()
+{
+ return true;
+}
+
OPLChipBase::ChipType NukedOPL3v174::chipType()
{
return CHIPTYPE_OPL3;
diff --git a/src/chips/nuked_opl3_v174.h b/src/chips/nuked_opl3_v174.h
index a9cd26a..84f6c99 100644
--- a/src/chips/nuked_opl3_v174.h
+++ b/src/chips/nuked_opl3_v174.h
@@ -40,6 +40,7 @@ public:
void nativeGenerate(int16_t *frame) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // NUKED_OPL3174_H
diff --git a/src/chips/opal_opl3.cpp b/src/chips/opal_opl3.cpp
index c118c3a..4e8e3d3 100644
--- a/src/chips/opal_opl3.cpp
+++ b/src/chips/opal_opl3.cpp
@@ -75,6 +75,11 @@ const char *OpalOPL3::emulatorName()
return "Opal OPL3";
}
+bool OpalOPL3::hasFullPanning()
+{
+ return true;
+}
+
OPLChipBase::ChipType OpalOPL3::chipType()
{
return CHIPTYPE_OPL3;
diff --git a/src/chips/opal_opl3.h b/src/chips/opal_opl3.h
index 71adc5c..6f1e573 100644
--- a/src/chips/opal_opl3.h
+++ b/src/chips/opal_opl3.h
@@ -40,6 +40,7 @@ public:
void nativeGenerate(int16_t *frame) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
};
#endif // NUKED_OPL3_H
diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h
index cbc09b2..3568d68 100644
--- a/src/chips/opl_chip_base.h
+++ b/src/chips/opl_chip_base.h
@@ -41,7 +41,9 @@ public:
enum { nativeRate = 49716 };
enum ChipType
{
- CHIPTYPE_OPL3 = 0, CHIPTYPE_OPL2 = 1
+ CHIPTYPE_OPL3 = 0,
+ CHIPTYPE_OPL2 = 1,
+ CHIPTYPE_ESFM = 2
};
protected:
uint32_t m_id;
@@ -79,6 +81,11 @@ public:
virtual const char* emulatorName() = 0;
virtual ChipType chipType() = 0;
+ /**
+ * @brief Does emulator has the per-channel full-panning extension?
+ * @return true if emulator has this extension, false if emulator has only original behaviour
+ */
+ virtual bool hasFullPanning() = 0;
private:
OPLChipBase(const OPLChipBase &c);
OPLChipBase &operator=(const OPLChipBase &c);
diff --git a/src/chips/opl_serial_port.cpp b/src/chips/opl_serial_port.cpp
index 47fe491..d491d69 100644
--- a/src/chips/opl_serial_port.cpp
+++ b/src/chips/opl_serial_port.cpp
@@ -94,6 +94,11 @@ bool OPL_SerialPort::connectPort(const std::string& name, unsigned baudRate, uns
return m_port->open(name, baudRate);
}
+bool OPL_SerialPort::hasFullPanning()
+{
+ return false;
+}
+
void OPL_SerialPort::writeReg(uint16_t addr, uint8_t data)
{
uint8_t sendBuffer[16];
diff --git a/src/chips/opl_serial_port.h b/src/chips/opl_serial_port.h
index 299992e..927a5e4 100644
--- a/src/chips/opl_serial_port.h
+++ b/src/chips/opl_serial_port.h
@@ -54,6 +54,7 @@ public:
void nativeGenerate(int16_t *frame) override;
const char *emulatorName() override;
ChipType chipType() override;
+ bool hasFullPanning() override;
private:
ChipSerialPortBase *m_port;