aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adlmidi.cpp11
-rw-r--r--src/adlmidi_opl3.cpp14
-rw-r--r--src/adlmidi_private.hpp3
3 files changed, 22 insertions, 6 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index d26911d..4744903 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -67,7 +67,12 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numCards)
return -2;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+#ifdef ADLMIDI_HW_OPL
+ (void)numCards;
+ play->m_setup.NumCards = 1;
+#else
play->m_setup.NumCards = static_cast<unsigned int>(numCards);
+#endif
if(play->m_setup.NumCards < 1 || play->m_setup.NumCards > MaxCards)
{
play->setErrorString("number of chips may only be 1.." MaxCards_STR ".\n");
@@ -108,7 +113,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
if(static_cast<uint32_t>(bankno) >= NumBanks)
{
char errBuf[150];
- snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1));
+ snprintf(errBuf, 150, "Embedded bank number may only be 0..%" PRIu32 "!\n", (NumBanks - 1));
play->setErrorString(errBuf);
return -1;
}
@@ -319,9 +324,13 @@ ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device)
{
if(device)
{
+ #ifndef ADLMIDI_HW_OPL
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
if(play && !play->opl.cardsOP2.empty())
return play->opl.cardsOP2[0]->emulatorName();
+ #else
+ return "Hardware OPL3 chip on 0x330";
+ #endif
}
return "Unknown";
}
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp
index 308e380..66254b6 100644
--- a/src/adlmidi_opl3.cpp
+++ b/src/adlmidi_opl3.cpp
@@ -503,12 +503,14 @@ void OPL3::ChangeVolumeRangesModel(ADLMIDI_VolumeModels volumeModel)
}
}
+#ifndef ADLMIDI_HW_OPL
void OPL3::ClearChips()
{
for(size_t i = 0; i < cardsOP2.size(); i++)
cardsOP2[i].reset(NULL);
cardsOP2.clear();
}
+#endif
void OPL3::Reset(int emulator, unsigned long PCM_RATE)
{
@@ -544,18 +546,19 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
};
unsigned fours = NumFourOps;
- for(size_t i = 0; i < cardsOP2.size(); ++i)
+ for(size_t i = 0; i < NumCards; ++i)
{
+#ifndef ADLMIDI_HW_OPL
switch(emulator)
{
default:
#ifndef ADLMIDI_DISABLE_NUKED_EMULATOR
- case ADLMIDI_EMU_NUKED:
- cardsOP2[i].reset(new NukedOPL3v174());
- break;
- case ADLMIDI_EMU_NUKED_8:
+ case ADLMIDI_EMU_NUKED: /* Latest Nuked OPL3 */
cardsOP2[i].reset(new NukedOPL3());
break;
+ case ADLMIDI_EMU_NUKED_174: /* Old Nuked OPL3 1.4.7 modified and optimized */
+ cardsOP2[i].reset(new NukedOPL3v174());
+ break;
#endif
#ifndef ADLMIDI_DISABLE_DOSBOX_EMULATOR
case ADLMIDI_EMU_DOSBOX:
@@ -564,6 +567,7 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
#endif
}
cardsOP2[i]->setRate((uint32_t)PCM_RATE);
+#endif // ADLMIDI_HW_OPL
for(unsigned a = 0; a < 18; ++a) Poke(i, 0xB0 + Channels[a], 0x00);
for(unsigned a = 0; a < sizeof(data) / sizeof(*data); a += 2)
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index 395b7f7..312f462 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -87,6 +87,7 @@ typedef int32_t ssize_t;
#include <cmath>
#include <cstdarg>
#include <cstdio>
+#include <cinttypes> //PRId32, PRIu32, etc.
#include <vector> // vector
#include <deque> // deque
#include <cmath> // exp, log, ceil
@@ -332,7 +333,9 @@ public:
void updateFlags();
void updateDeepFlags();
void ChangeVolumeRangesModel(ADLMIDI_VolumeModels volumeModel);
+ #ifndef ADLMIDI_HW_OPL
void ClearChips();
+ #endif
void Reset(int emulator, unsigned long PCM_RATE);
};