aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_load.cpp
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-07-18 13:19:51 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-07-18 13:19:51 +0200
commit3ce752cc07315be5933f5e02a259fcf4b509aae3 (patch)
tree319265b9e92dc3f384cdc7f8c6287de0a8577b87 /src/adlmidi_load.cpp
parenta184c33a75b9b29a7277dcd01f00a744e2fe8306 (diff)
downloadlibADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.tar.gz
libADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.tar.bz2
libADLMIDI-3ce752cc07315be5933f5e02a259fcf4b509aae3.zip
fix the conversion of FMIns->ADLI operators
Diffstat (limited to 'src/adlmidi_load.cpp')
-rw-r--r--src/adlmidi_load.cpp23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp
index fcabd2b..1bb004f 100644
--- a/src/adlmidi_load.cpp
+++ b/src/adlmidi_load.cpp
@@ -117,20 +117,17 @@ static void cvt_FMIns_to_generic(WOPLI &ins, const adlinsdata2 &in)
ins.inst_flags|= (in.flags & adlinsdata::Flag_Pseudo4op) ? WOPL_Ins_Pseudo4op : 0;
ins.inst_flags|= (in.flags & adlinsdata::Flag_NoSound) ? WOPL_Ins_IsBlank : 0;
- for(size_t op = 0, slt = 0; op < static_cast<size_t>(fourOps ? 4 : 2); op++, slt++)
+ for(size_t op = 0; op < 4; op++)
{
- ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24);
- ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16);
- ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8);
- ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0);
- ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40;
-
- op++;
- ins.operators[op].waveform_E0 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 24);
- ins.operators[op].susrel_80 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 16);
- ins.operators[op].atdec_60 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 8);
- ins.operators[op].avekf_20 = static_cast<uint8_t>(in.adl[slt].carrier_E862 >> 0);
- ins.operators[op].ksl_l_40 = in.adl[slt].carrier_40;
+ const adldata &in2op = in.adl[(op < 2) ? 0 : 1];
+ uint32_t regE862 = ((op & 1) == 0) ? in2op.carrier_E862 : in2op.modulator_E862;
+ uint8_t reg40 = ((op & 1) == 0) ? in2op.carrier_40 : in2op.modulator_40;
+
+ ins.operators[op].waveform_E0 = static_cast<uint8_t>(regE862 >> 24);
+ ins.operators[op].susrel_80 = static_cast<uint8_t>(regE862 >> 16);
+ ins.operators[op].atdec_60 = static_cast<uint8_t>(regE862 >> 8);
+ ins.operators[op].avekf_20 = static_cast<uint8_t>(regE862 >> 0);
+ ins.operators[op].ksl_l_40 = reg40;
}
ins.note_offset1 = in.adl[0].finetune;