From 37dbc52a68b234ddd4d594961f48e56e9a90523f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 23 Dec 2022 19:26:42 -0500 Subject: [PATCH] YM2612: CSM without DualPCM --- src/engine/dispatchContainer.cpp | 6 ++++++ src/engine/platform/genesis.cpp | 4 ++-- src/engine/platform/genesisext.cpp | 4 ++++ src/engine/platform/genesisext.h | 1 + src/gui/guiConst.cpp | 2 ++ 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 668864ae..0017ea23 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -201,6 +201,12 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false); break; + case DIV_SYSTEM_YM2612_CSM: + dispatch=new DivPlatformGenesisExt; + ((DivPlatformGenesisExt*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); + ((DivPlatformGenesisExt*)dispatch)->setSoftPCM(false); + ((DivPlatformGenesisExt*)dispatch)->setCSMChannel(6); + break; case DIV_SYSTEM_YM2612_DUALPCM: dispatch=new DivPlatformGenesis; ((DivPlatformGenesis*)dispatch)->setYMFM(eng->getConfInt("ym2612Core",0)); diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index c6a5abc7..76294524 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -479,7 +479,7 @@ void DivPlatformGenesis::tick(bool sysTick) { } } - for (int i=0; i<7; i++) { + for (int i=0; isong.linearPitch==2) { @@ -1217,7 +1217,7 @@ void DivPlatformGenesis::poke(std::vector& wlist) { } int DivPlatformGenesis::getPortaFloor(int ch) { - return (ch>5)?12:0; + return 0; } void DivPlatformGenesis::setYMFM(bool use) { diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 20268de9..ae6ac70b 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -746,6 +746,10 @@ int DivPlatformGenesisExt::getPortaFloor(int ch) { return (ch>8)?12:0; } +void DivPlatformGenesisExt::setCSMChannel(unsigned char ch) { + csmChan=ch; +} + int DivPlatformGenesisExt::init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) { DivPlatformGenesis::init(parent,channels,sugRate,flags); for (int i=0; i<4; i++) { diff --git a/src/engine/platform/genesisext.h b/src/engine/platform/genesisext.h index eec093a8..304f609f 100644 --- a/src/engine/platform/genesisext.h +++ b/src/engine/platform/genesisext.h @@ -42,6 +42,7 @@ class DivPlatformGenesisExt: public DivPlatformGenesis { bool keyOffAffectsPorta(int ch); void notifyInsChange(int ins); int getPortaFloor(int ch); + void setCSMChannel(unsigned char ch); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformGenesisExt(); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index cb6b24dc..0c8a6d02 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -913,6 +913,7 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ const int availableSystems[]={ DIV_SYSTEM_YM2612, DIV_SYSTEM_YM2612_EXT, + DIV_SYSTEM_YM2612_CSM, DIV_SYSTEM_YM2612_DUALPCM, DIV_SYSTEM_YM2612_DUALPCM_EXT, DIV_SYSTEM_SMS, @@ -994,6 +995,7 @@ const int availableSystems[]={ const int chipsFM[]={ DIV_SYSTEM_YM2612, DIV_SYSTEM_YM2612_EXT, + DIV_SYSTEM_YM2612_CSM, DIV_SYSTEM_YM2612_DUALPCM, DIV_SYSTEM_YM2612_DUALPCM_EXT, DIV_SYSTEM_YM2151,