diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 743d55866..3ca6f1ad5 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -219,6 +219,10 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { addWarning("Master System FM expansion is not emulated yet. wait for 0.6!"); } + if (ds.system[0]==DIV_SYSTEM_NES_VRC7) { + addWarning("Konami VRC7 is not emulated yet. wait for 0.6!"); + } + logI("reading pattern matrix (%d)...\n",ds.ordersLen); for (int i=0; itype=DIV_INS_PCE; ins->std.volMacroHeight=31; } - if (ds.system[0]==DIV_SYSTEM_SMS_OPLL) { + if ((ds.system[0]==DIV_SYSTEM_SMS_OPLL || ds.system[0]==DIV_SYSTEM_NES_VRC7) && ins->type==DIV_INS_FM) { ins->type=DIV_INS_OPLL; } @@ -320,7 +324,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ins->fm.op[j].vib=reader.readC(); ins->fm.op[j].ws=reader.readC(); } else { - if (ds.system[0]==DIV_SYSTEM_SMS_OPLL) { + if (ds.system[0]==DIV_SYSTEM_SMS_OPLL || ds.system[0]==DIV_SYSTEM_NES_VRC7) { if (j==0) { ins->fm.opllPreset=reader.readC(); } else { @@ -331,7 +335,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { } } if (ds.version>0x03) { - if (ds.system[0]==DIV_SYSTEM_SMS_OPLL) { + if (ds.system[0]==DIV_SYSTEM_SMS_OPLL || ds.system[0]==DIV_SYSTEM_NES_VRC7) { ins->fm.op[j].ksr=reader.readC(); ins->fm.op[j].vib=reader.readC(); ins->fm.op[j].ksl=reader.readC(); @@ -672,6 +676,11 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.system[0]=DIV_SYSTEM_SMS; ds.system[1]=DIV_SYSTEM_OPLL; } + if (ds.system[0]==DIV_SYSTEM_NES_VRC7) { + ds.systemLen=2; + ds.system[0]=DIV_SYSTEM_NES; + ds.system[1]=DIV_SYSTEM_VRC7; + } if (active) quitDispatch(); isBusy.lock(); diff --git a/src/engine/song.h b/src/engine/song.h index 384f8674c..f4620eef9 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -41,6 +41,7 @@ enum DivSystem { DIV_SYSTEM_GB, DIV_SYSTEM_PCE, DIV_SYSTEM_NES, + DIV_SYSTEM_NES_VRC7, // ** COMPOUND SYSTEM - DO NOT USE! ** DIV_SYSTEM_C64_6581, DIV_SYSTEM_C64_8580, DIV_SYSTEM_ARCADE, // ** COMPOUND SYSTEM - DO NOT USE! ** diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 6b1351622..ece7e370b 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -44,6 +44,8 @@ DivSystem DivEngine::systemFromFile(unsigned char val) { return DIV_SYSTEM_GENESIS_EXT; case 0x43: return DIV_SYSTEM_SMS_OPLL; + case 0x46: + return DIV_SYSTEM_NES_VRC7; case 0x47: return DIV_SYSTEM_C64_6581; case 0x49: @@ -163,6 +165,8 @@ unsigned char DivEngine::systemToFile(DivSystem val) { return 0x42; case DIV_SYSTEM_SMS_OPLL: return 0x43; + case DIV_SYSTEM_NES_VRC7: + return 0x46; case DIV_SYSTEM_C64_6581: return 0x47; case DIV_SYSTEM_YM2610_EXT: @@ -283,7 +287,9 @@ int DivEngine::getChannelCount(DivSystem sys) { case DIV_SYSTEM_GENESIS_EXT: case DIV_SYSTEM_YM2610: case DIV_SYSTEM_SMS_OPLL: - return 13; + return 13; + case DIV_SYSTEM_NES_VRC7: + return 11; case DIV_SYSTEM_YM2610_EXT: return 16; // Furnace-specific systems @@ -524,6 +530,8 @@ const char* DivEngine::getSystemName(DivSystem sys) { return "PC Engine/TurboGrafx-16"; case DIV_SYSTEM_NES: return "NES"; + case DIV_SYSTEM_NES_VRC7: + return "NES + Konami VRC7"; case DIV_SYSTEM_C64_6581: return "Commodore 64 with 6581"; case DIV_SYSTEM_C64_8580: @@ -645,6 +653,8 @@ const char* DivEngine::getSystemChips(DivSystem sys) { return "Hudson Soft HuC6280"; case DIV_SYSTEM_NES: return "Ricoh 2A03"; + case DIV_SYSTEM_NES_VRC7: + return "Ricoh 2A03 + Konami VRC7"; case DIV_SYSTEM_C64_6581: return "SID 6581"; case DIV_SYSTEM_C64_8580: @@ -1007,6 +1017,7 @@ const char* DivEngine::getChannelName(int chan) { return chanNames[3][dispatchChanOfChan[chan]]; break; case DIV_SYSTEM_SMS_OPLL: // this is flattened to SMS + OPLL. + case DIV_SYSTEM_NES_VRC7: // this is flattened to NES + VRC7. return "??"; break; case DIV_SYSTEM_GB: @@ -1142,6 +1153,7 @@ const char* DivEngine::getChannelShortName(int chan) { return chanShortNames[3][dispatchChanOfChan[chan]]; break; case DIV_SYSTEM_SMS_OPLL: // this is flattened to SMS + OPLL. + case DIV_SYSTEM_NES_VRC7: // this is flattened to NES + VRC7. return "??"; break; case DIV_SYSTEM_GB: @@ -1275,6 +1287,7 @@ int DivEngine::getChannelType(int chan) { return chanTypes[3][dispatchChanOfChan[chan]]; break; case DIV_SYSTEM_SMS_OPLL: // this is flattened to SMS + OPLL. + case DIV_SYSTEM_NES_VRC7: // this is flattened to NES + VRC7. return 0; break; case DIV_SYSTEM_GB: @@ -1408,6 +1421,7 @@ DivInstrumentType DivEngine::getPreferInsType(int chan) { return chanPrefType[3][dispatchChanOfChan[chan]]; break; case DIV_SYSTEM_SMS_OPLL: // this is flattened to SMS + OPLL. + case DIV_SYSTEM_NES_VRC7: // this is flattened to NES + VRC7. return DIV_INS_OPLL; break; case DIV_SYSTEM_GB: