diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index d226a54e8..213aa9055 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -413,6 +413,9 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { if (ds.system[0]==DIV_SYSTEM_ARCADE) { ins->type=DIV_INS_OPM; } + if (ds.system[0]==DIV_SYSTEM_MSX2) { + ins->type=DIV_INS_SCC; + } if ((ds.system[0]==DIV_SYSTEM_NES || ds.system[0]==DIV_SYSTEM_NES_VRC7 || ds.system[0]==DIV_SYSTEM_NES_FDS) && ins->type==DIV_INS_STD) { ins->type=DIV_INS_NES; } @@ -723,6 +726,9 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { if (ds.system[0]==DIV_SYSTEM_NES_FDS) { wave->max=63; } + if (ds.system[0]==DIV_SYSTEM_MSX2) { + wave->max=255; + } if (wave->len>65) { logE("invalid wave length %d. are we doing something wrong?",wave->len); lastError="file is corrupt or unreadable at wavetables"; @@ -1070,6 +1076,11 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.system[0]=DIV_SYSTEM_YM2151; ds.system[1]=DIV_SYSTEM_SEGAPCM_COMPAT; } + if (ds.system[0]==DIV_SYSTEM_MSX2) { + ds.systemLen=2; + ds.system[0]=DIV_SYSTEM_AY8910; + ds.system[1]=DIV_SYSTEM_SCC; + } if (ds.system[0]==DIV_SYSTEM_SMS_OPLL) { ds.systemLen=2; ds.system[0]=DIV_SYSTEM_SMS; diff --git a/src/engine/song.h b/src/engine/song.h index ef745d0cd..a6da6b3d4 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -46,6 +46,7 @@ enum DivSystem { DIV_SYSTEM_C64_6581, DIV_SYSTEM_C64_8580, DIV_SYSTEM_ARCADE, // ** COMPOUND SYSTEM - DO NOT USE! ** + DIV_SYSTEM_MSX2, // ** COMPOUND SYSTEM - DO NOT USE! ** DIV_SYSTEM_YM2610, DIV_SYSTEM_YM2610_EXT, diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 3857b3620..725e681b8 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -969,6 +969,12 @@ void DivEngine::registerSystems() { fmExtChEffectHandlerMap ); + sysDefs[DIV_SYSTEM_MSX2]=new DivSysDef( + _("MSX + SCC"), NULL, 0, 0x0a, 8, true, false, 0, true, 0, 0, 0, + "", + {}, {}, {}, {} + ); + sysDefs[DIV_SYSTEM_AY8910]=new DivSysDef( _("AY-3-8910"), NULL, 0x80, 0, 3, false, true, 0x151, false, 1U<