From 407f91631160f358771707f46879e6fea2f2dfd1 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Tue, 18 Jul 2023 22:30:22 +0400 Subject: [PATCH] add chipType change detect --- src/gui/chanOsc.cpp | 2 +- src/gui/gui.h | 2 +- src/gui/sysPartNumber.cpp | 85 ++++++++++++++++++++++++++++++++++----- 3 files changed, 76 insertions(+), 13 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 522d01deb..803a5665b 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -512,7 +512,7 @@ void FurnaceGUI::drawChanOsc() { break; } case 'p': { - text+=FurnaceGUI::getSystemPartNumber(e->sysOfChan[ch]); + text+=FurnaceGUI::getSystemPartNumber(e->sysOfChan[ch], e->song.systemFlags[e->dispatchOfChan[ch]]); break; } case 'S': { diff --git a/src/gui/gui.h b/src/gui/gui.h index facd2f981..efc5fed09 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2287,7 +2287,7 @@ class FurnaceGUI { bool quitRender(); const char* getSystemName(DivSystem which); - const char* getSystemPartNumber(DivSystem sys); + const char* getSystemPartNumber(DivSystem sys, DivConfig& flags); public: void editStr(String* which); diff --git a/src/gui/sysPartNumber.cpp b/src/gui/sysPartNumber.cpp index 35acaa601..212783da6 100644 --- a/src/gui/sysPartNumber.cpp +++ b/src/gui/sysPartNumber.cpp @@ -19,14 +19,38 @@ #include "gui.h" -const char* FurnaceGUI::getSystemPartNumber(DivSystem sys) { +const char* FurnaceGUI::getSystemPartNumber(DivSystem sys, DivConfig& flags) { switch (sys) { case DIV_SYSTEM_YMU759: return "YMU759"; break; - case DIV_SYSTEM_SMS: - return "SN76489"; + case DIV_SYSTEM_SMS:{ + int chipType=flags.getInt("chipType",0); + if (chipType==4) { + return "SN76489A"; + } else if (chipType==5) { + return "SN76496"; + } else if (chipType==6) { + return "8496"; + } else if (chipType==7) { + return "PSSJ";//not part number + } else if (chipType==8) { + return "SN94624"; + } else if (chipType==9) { + return "SN76494"; + } else { + return "SN76489"; + } break; + } + case DIV_SYSTEM_PCE:{ + int chipType=flags.getInt("chipType",0); + if (chipType==1) { + return "HuC6280A"; + } else { + return "HuC6280"; + } + } case DIV_SYSTEM_NES: return "2A03"; break; @@ -40,9 +64,19 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys) { case DIV_SYSTEM_Y8950_DRUMS: return "Y8950"; break; - case DIV_SYSTEM_AY8910: - return "AY8910"; + case DIV_SYSTEM_AY8910:{ + int chipType=flags.getInt("chipType",0); + if (chipType==1) { + return "YM2149(F)"; + } else if (chipType==2) { + return "5B"; + } else if (chipType==3) { + return "AY-3-8914"; + } else { + return "AY-3-8910"; + } break; + } case DIV_SYSTEM_AMIGA: return "Amiga"; break; @@ -53,9 +87,22 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys) { case DIV_SYSTEM_YM2612_CSM: case DIV_SYSTEM_YM2612_DUALPCM: case DIV_SYSTEM_YM2612_DUALPCM_EXT: - case DIV_SYSTEM_YM2612_EXT: - return "YM2612"; + case DIV_SYSTEM_YM2612_EXT:{ + int chipType=0; + if (flags.has("chipType")) { + chipType=flags.getInt("chipType",0); + } else { + chipType=flags.getBool("ladderEffect",0)?1:0; + } + if (chipType==0) { + return "YM3438"; + } else if (chipType==2) { + return "YMF276"; + } else { + return "YM2612"; + } break; + } case DIV_SYSTEM_TIA: return "TIA"; break; @@ -94,9 +141,19 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys) { return "YM2608"; break; case DIV_SYSTEM_OPL: - case DIV_SYSTEM_OPL_DRUMS: - return "YM3526"; + case DIV_SYSTEM_OPL_DRUMS:{ + int patchSet=flags.getInt("patchSet",0); + if (patchSet==1) { + return "YMF281"; + } else if (patchSet==2) { + return "YM2423"; + } else if (patchSet==3) { + return "VRC7"; + } else { + return "YM2413"; + } break; + } case DIV_SYSTEM_OPL2: case DIV_SYSTEM_OPL2_DRUMS: return "YM3812"; @@ -112,9 +169,15 @@ const char* FurnaceGUI::getSystemPartNumber(DivSystem sys) { case DIV_SYSTEM_MULTIPCM: return "MultiPCM"; break; - case DIV_SYSTEM_RF5C68: - return "RF5C68"; + case DIV_SYSTEM_RF5C68:{ + int chipType=flags.getInt("chipType",0); + if (chipType==1) { + return "RF5C164"; + } else { + return "RF5C68"; + } break; + } case DIV_SYSTEM_OPZ: return "YM2414"; break;