aboutsummaryrefslogtreecommitdiff
path: root/sky/music/adlibmusic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sky/music/adlibmusic.cpp')
-rw-r--r--sky/music/adlibmusic.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/sky/music/adlibmusic.cpp b/sky/music/adlibmusic.cpp
index 6922295ef3..444e4cd3e0 100644
--- a/sky/music/adlibmusic.cpp
+++ b/sky/music/adlibmusic.cpp
@@ -33,15 +33,20 @@ SkyAdlibMusic::SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk, OSystem *sys
_driverFileBase = 60202;
_mixer = pMixer;
_sampleRate = g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0);
- if (0 != YM3812Init(1, 3579545, _sampleRate))
- error("Error initialising YM3812 sound chip emulation");
+// if (0 != YM3812Init(1, 3579545, _sampleRate))
+// error("Error initialising YM3812 sound chip emulation");
+ int env_bits = g_system->property(OSystem::PROP_GET_FMOPL_ENV_BITS, NULL);
+ int eg_ent = g_system->property(OSystem::PROP_GET_FMOPL_EG_ENT, NULL);
+ OPLBuildTables((env_bits ? env_bits : FMOPL_ENV_BITS_HQ), (eg_ent ? eg_ent : FMOPL_EG_ENT_HQ));
+ _opl = OPLCreate(OPL_TYPE_YM3812, 3579545, g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0));
+
_mixer->setupPremix(this, passMixerFunc);
}
SkyAdlibMusic::~SkyAdlibMusic(void) {
_mixer->setupPremix(NULL, NULL);
- YM3812Shutdown();
+// YM3812Shutdown();
}
void SkyAdlibMusic::setVolume(uint8 volume) {
@@ -70,7 +75,7 @@ void SkyAdlibMusic::premixerCall(int16 *buf, uint len) {
render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len);
len -= render;
_nextMusicPoll -= render;
- YM3812UpdateOne(0, buf, render);
+ YM3812UpdateOne (_opl, buf, render);
buf += render;
if (_nextMusicPoll == 0) {
pollMusic();
@@ -98,7 +103,7 @@ void SkyAdlibMusic::setupChannels(uint8 *channelData) {
channelData++;
for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) {
uint16 chDataStart = ((channelData[(cnt << 1) | 1] << 8) | channelData[cnt << 1]) + _musicDataLoc;
- _channels[cnt] = new SkyAdlibChannel(_musicData, chDataStart);
+ _channels[cnt] = new SkyAdlibChannel(_opl, _musicData, chDataStart);
_channels[cnt]->updateVolume(_musicVolume | 128);
}
}
@@ -107,8 +112,9 @@ void SkyAdlibMusic::startDriver(void) {
uint16 cnt = 0;
while (_initSequence[cnt] || _initSequence[cnt+1]) {
- YM3812Write(0, 0, _initSequence[cnt]);
- YM3812Write(0, 1, _initSequence[cnt+1]);
+// YM3812Write(0, 0, _initSequence[cnt]);
+// YM3812Write(0, 1, _initSequence[cnt+1]);
+ OPLWriteReg (_opl, _initSequence[cnt], _initSequence[cnt+1]);
cnt += 2;
}
_allowedCommands = 0xD;