aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_opl3.cpp
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2018-06-19 22:57:06 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2018-06-19 22:57:06 +0300
commitad60170e94d599c76351198ca4052d0cd5c9602e (patch)
tree4ab583ebdc831a4ea40082dc921475d95819545b /src/adlmidi_opl3.cpp
parentc0873278718da57ff19194377a35601027926c5f (diff)
parent105c5db749836ff25c03ae7abf3b2348ecb72c86 (diff)
downloadlibADLMIDI-ad60170e94d599c76351198ca4052d0cd5c9602e.tar.gz
libADLMIDI-ad60170e94d599c76351198ca4052d0cd5c9602e.tar.bz2
libADLMIDI-ad60170e94d599c76351198ca4052d0cd5c9602e.zip
Merge branch 'master' into stable
Diffstat (limited to 'src/adlmidi_opl3.cpp')
-rw-r--r--src/adlmidi_opl3.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp
index 16a481d..49e2e76 100644
--- a/src/adlmidi_opl3.cpp
+++ b/src/adlmidi_opl3.cpp
@@ -484,20 +484,24 @@ void OPL3::ClearChips()
}
#endif
-void OPL3::Reset(int emulator, unsigned long PCM_RATE)
+void OPL3::Reset(int emulator, unsigned long PCM_RATE, void *audioTickHandler)
{
- #ifndef ADLMIDI_HW_OPL
+#ifndef ADLMIDI_HW_OPL
ClearChips();
- #endif
+#else
(void)emulator;
(void)PCM_RATE;
+#endif
+#if !defined(ADLMIDI_AUDIO_TICK_HANDLER)
+ (void)audioTickHandler;
+#endif
ins.clear();
pit.clear();
regBD.clear();
- #ifndef ADLMIDI_HW_OPL
+#ifndef ADLMIDI_HW_OPL
cardsOP2.resize(NumCards, AdlMIDI_SPtr<OPLChipBase>());
- #endif
+#endif
NumChannels = NumCards * 23;
ins.resize(NumChannels, adl[adlDefaultNumber]);
@@ -522,24 +526,32 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE)
for(size_t i = 0; i < NumCards; ++i)
{
#ifndef ADLMIDI_HW_OPL
+ OPLChipBase *chip;
switch(emulator)
{
default:
#ifndef ADLMIDI_DISABLE_NUKED_EMULATOR
case ADLMIDI_EMU_NUKED: /* Latest Nuked OPL3 */
- cardsOP2[i].reset(new NukedOPL3());
+ chip = new NukedOPL3;
break;
case ADLMIDI_EMU_NUKED_174: /* Old Nuked OPL3 1.4.7 modified and optimized */
- cardsOP2[i].reset(new NukedOPL3v174());
+ chip = new NukedOPL3v174;
break;
#endif
#ifndef ADLMIDI_DISABLE_DOSBOX_EMULATOR
case ADLMIDI_EMU_DOSBOX:
- cardsOP2[i].reset(new DosBoxOPL3());
+ chip = new DosBoxOPL3;
break;
#endif
}
- cardsOP2[i]->setRate((uint32_t)PCM_RATE);
+ cardsOP2[i].reset(chip);
+ chip->setChipId(i);
+ chip->setRate((uint32_t)PCM_RATE);
+ if(runAtPcmRate)
+ chip->setRunningAtPcmRate(true);
+# if defined(ADLMIDI_AUDIO_TICK_HANDLER)
+ chip->setAudioTickHandlerInstance(audioTickHandler);
+# endif
#endif // ADLMIDI_HW_OPL
for(unsigned a = 0; a < 18; ++a) Poke(i, 0xB0 + Channels[a], 0x00);