From 5aeeb0961676600948e7e0c19134ecb28070728f Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 31 Aug 2023 20:34:04 +0900 Subject: [PATCH 01/10] Prepare for NMK112 bankswitching support --- src/engine/platform/msm6295.cpp | 165 ++++++++++++++++++++++++-------- src/engine/platform/msm6295.h | 12 ++- src/gui/debug.cpp | 22 +++++ src/gui/sysConf.cpp | 6 ++ 4 files changed, 164 insertions(+), 41 deletions(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 3d823d16f..e72b8c427 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -34,6 +34,12 @@ u8 DivPlatformMSM6295::read_byte(u32 address) { if (adpcmMem==NULL || address>=getSampleMemCapacity(0)) { return 0; } + if (isBanked) { + if (address<0x400) { + return adpcmMem[(bank[(address>>8)&0x3]<<16)|(address&0x3ff)]; + } + return adpcmMem[(bank[(address>>16)&0x3]<<16)|(address&0xffff)]; + } return adpcmMem[address&0x3ffff]; } @@ -62,6 +68,7 @@ void DivPlatformMSM6295::acquire(short** buf, size_t len) { case 17: case 18: case 19: + bank[w.addr-16]=w.val; break; } writes.pop(); @@ -109,7 +116,12 @@ void DivPlatformMSM6295::tick(bool sysTick) { rWriteDelay(0,(8<=0 && chan[i].samplesong.sampleLen) { - rWrite(0,0x80|chan[i].sample); // set phrase + if (isBanked) { + rWrite(16+i,bankedPhrase[chan[i].sample].bank); + rWrite(0,0x80|(i<<5)|bankedPhrase[chan[i].sample].phrase); + } else { + rWrite(0,0x80|chan[i].sample); // set phrase + } rWrite(0,(16<getSample(12*sampleBank+c.value%12); chan[c.chan].sample=12*sampleBank+c.value%12; rWriteDelay(0,(8<song.sampleLen; - if (sampleCount>127) sampleCount=127; - for (int i=0; isong.sample[i]; - if (!s->renderOn[0][sysID]) { - sampleOffVOX[i]=0; - continue; - } + if (isBanked) { + int bankInd=0; + int phraseInd=0; + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOffVOX[i]=0; + continue; + } - int paddedLen=s->lengthVOX; - if (memPos>=getSampleMemCapacity(0)) { - logW("out of ADPCM memory for sample %d!",i); - break; + int paddedLen=s->lengthVOX; + // fit to single bank size + if (paddedLen>65536-0x400) { + paddedLen=65536-0x400; + } + // 32 phrase per bank + if ((phraseInd>=32)||((memPos&0xff0000)!=((memPos+paddedLen)&0xff0000))) { + memPos=((memPos+0xffff)&0xff0000)+0x400; + bankInd++; + phraseInd=0; + } + if (memPos>=getSampleMemCapacity(0)) { + logW("out of ADPCM memory for sample %d!",i); + break; + } + if (memPos+paddedLen>=getSampleMemCapacity(0)) { + memcpy(adpcmMem+memPos,s->dataVOX,getSampleMemCapacity(0)-memPos); + logW("out of ADPCM memory for sample %d!",i); + } else { + memcpy(adpcmMem+memPos,s->dataVOX,paddedLen); + sampleLoaded[i]=true; + } + sampleOffVOX[i]=memPos; + bankedPhrase[i].bank=bankInd; + bankedPhrase[i].phrase=phraseInd; + memPos+=paddedLen; + phraseInd++; } - if (memPos+paddedLen>=getSampleMemCapacity(0)) { - memcpy(adpcmMem+memPos,s->dataVOX,getSampleMemCapacity(0)-memPos); - logW("out of ADPCM memory for sample %d!",i); - } else { - memcpy(adpcmMem+memPos,s->dataVOX,paddedLen); - sampleLoaded[i]=true; - } - sampleOffVOX[i]=memPos; - memPos+=paddedLen; - } - adpcmMemLen=memPos+256; + adpcmMemLen=memPos+256; - // phrase book - for (int i=0; isong.sample[i]; - int endPos=sampleOffVOX[i]+s->lengthVOX; - adpcmMem[i*8]=(sampleOffVOX[i]>>16)&0xff; - adpcmMem[1+i*8]=(sampleOffVOX[i]>>8)&0xff; - adpcmMem[2+i*8]=(sampleOffVOX[i])&0xff; - adpcmMem[3+i*8]=(endPos>>16)&0xff; - adpcmMem[4+i*8]=(endPos>>8)&0xff; - adpcmMem[5+i*8]=(endPos)&0xff; + // phrase book + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + int endPos=sampleOffVOX[i]+s->lengthVOX; + for (int b=0; b<4; b++) { + unsigned int bankedAddr=(bankedPhrase[i].bank<<16)+(b<<8)+(bankedPhrase[i].phrase*8); + adpcmMem[bankedAddr]=b; + adpcmMem[bankedAddr+1]=(sampleOffVOX[i]>>8)&0xff; + adpcmMem[bankedAddr+2]=(sampleOffVOX[i])&0xff; + adpcmMem[bankedAddr+3]=b; + adpcmMem[bankedAddr+4]=(endPos>>8)&0xff; + adpcmMem[bankedAddr+5]=(endPos)&0xff; + } + } + } else { + int sampleCount=parent->song.sampleLen; + if (sampleCount>127) sampleCount=127; + for (int i=0; isong.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOffVOX[i]=0; + continue; + } + + int paddedLen=s->lengthVOX; + if (memPos>=getSampleMemCapacity(0)) { + logW("out of ADPCM memory for sample %d!",i); + break; + } + if (memPos+paddedLen>=getSampleMemCapacity(0)) { + memcpy(adpcmMem+memPos,s->dataVOX,getSampleMemCapacity(0)-memPos); + logW("out of ADPCM memory for sample %d!",i); + } else { + memcpy(adpcmMem+memPos,s->dataVOX,paddedLen); + sampleLoaded[i]=true; + } + sampleOffVOX[i]=memPos; + memPos+=paddedLen; + } + adpcmMemLen=memPos+256; + + // phrase book + for (int i=0; isong.sample[i]; + int endPos=sampleOffVOX[i]+s->lengthVOX; + adpcmMem[i*8]=(sampleOffVOX[i]>>16)&0xff; + adpcmMem[1+i*8]=(sampleOffVOX[i]>>8)&0xff; + adpcmMem[2+i*8]=(sampleOffVOX[i])&0xff; + adpcmMem[3+i*8]=(endPos>>16)&0xff; + adpcmMem[4+i*8]=(endPos>>8)&0xff; + adpcmMem[5+i*8]=(endPos)&0xff; + } } } void DivPlatformMSM6295::setFlags(const DivConfig& flags) { rateSelInit=flags.getBool("rateSel",false); + isBanked=flags.getBool("isBanked",false); switch (flags.getInt("clockSel",0)) { case 1: chipClock=4224000/4; @@ -454,11 +540,12 @@ void DivPlatformMSM6295::setFlags(const DivConfig& flags) { rWrite(12,!rateSelInit); rateSel=rateSelInit; } + rWrite(14,isBanked); } int DivPlatformMSM6295::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { parent=p; - adpcmMem=new unsigned char[getSampleMemCapacity(0)]; + adpcmMem=new unsigned char[16777216]; adpcmMemLen=0; dumpWrites=false; skipRegisterWrites=false; diff --git a/src/engine/platform/msm6295.h b/src/engine/platform/msm6295.h index dfa59a0c1..041d36861 100644 --- a/src/engine/platform/msm6295.h +++ b/src/engine/platform/msm6295.h @@ -49,7 +49,6 @@ class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { }; FixedQueue writes; msm6295_core msm; - unsigned char lastBusy; unsigned char* adpcmMem; size_t adpcmMemLen; @@ -58,7 +57,16 @@ class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { int delay, updateOsc; - bool rateSel=false, rateSelInit=false; + bool rateSel=false, rateSelInit=false, isBanked=false; + + unsigned int bank[4]; + struct BankedPhrase { + unsigned char bank=0; + unsigned char phrase=0; + BankedPhrase(): + bank(0), + phrase(0) {} + } bankedPhrase[256]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); diff --git a/src/gui/debug.cpp b/src/gui/debug.cpp index df634f1e8..8436e6616 100644 --- a/src/gui/debug.cpp +++ b/src/gui/debug.cpp @@ -55,6 +55,7 @@ #include "../engine/platform/pv1000.h" #include "../engine/platform/k053260.h" #include "../engine/platform/c140.h" +#include "../engine/platform/msm6295.h" #include "../engine/platform/dummy.h" #define COMMON_CHIP_DEBUG \ @@ -554,6 +555,18 @@ void putDispatchChip(void* data, int type) { COMMON_CHIP_DEBUG_BOOL; break; } + case DIV_SYSTEM_MSM6295: { + DivPlatformMSM6295* ch=(DivPlatformMSM6295*)data; + ImGui::Text("> MSM6295"); + COMMON_CHIP_DEBUG; + ImGui::Text("- delay: %d",ch->delay); + ImGui::Text("- updateOsc: %d",ch->updateOsc); + COMMON_CHIP_DEBUG_BOOL; + ImGui::TextColored(ch->rateSel?colorOn:colorOff,">> RateSel"); + ImGui::TextColored(ch->rateSelInit?colorOn:colorOff,">> rateSelInit"); + ImGui::TextColored(ch->isBanked?colorOn:colorOff,">> IsBanked"); + break; + } default: ImGui::Text("Unimplemented chip! Help!"); break; @@ -1092,6 +1105,15 @@ void putDispatchChan(void* data, int chanNum, int type) { ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); break; } + case DIV_SYSTEM_MSM6295: { + DivPlatformMSM6295::Channel* ch=(DivPlatformMSM6295::Channel*)data; + ImGui::Text("> MSM6295"); + COMMON_CHAN_DEBUG; + ImGui::Text("* Sample: %d",ch->sample); + COMMON_CHAN_DEBUG_BOOL; + ImGui::TextColored(ch->furnacePCM?colorOn:colorOff,">> FurnacePCM"); + break; + } default: ImGui::Text("Unimplemented chip! Help!"); break; diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index f23583128..87d94ec08 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -1349,6 +1349,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo case DIV_SYSTEM_MSM6295: { int clockSel=flags.getInt("clockSel",0); bool rateSel=flags.getBool("rateSel",false); + bool isBanked=flags.getBool("isBanked",false); ImGui::Text("Clock rate:"); ImGui::Indent(); @@ -1425,10 +1426,15 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } ImGui::Unindent(); + if (ImGui::Checkbox("Bankswitched (NMK112)",&isBanked)) { + altered=true; + } + if (altered) { e->lockSave([&]() { flags.set("clockSel",clockSel); flags.set("rateSel",rateSel); + flags.set("isBanked",isBanked); }); } break; From a2be46bb829224e2a20d73b2636c216e4364ea7a Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 31 Aug 2023 20:35:35 +0900 Subject: [PATCH 02/10] Casting --- src/engine/platform/msm6295.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index e72b8c427..60c8f6a6a 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -431,7 +431,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { DivSample* s=parent->song.sample[i]; int endPos=sampleOffVOX[i]+s->lengthVOX; for (int b=0; b<4; b++) { - unsigned int bankedAddr=(bankedPhrase[i].bank<<16)+(b<<8)+(bankedPhrase[i].phrase*8); + unsigned int bankedAddr=((unsigned int)bankedPhrase[i].bank<<16)+(b<<8)+(bankedPhrase[i].phrase*8); adpcmMem[bankedAddr]=b; adpcmMem[bankedAddr+1]=(sampleOffVOX[i]>>8)&0xff; adpcmMem[bankedAddr+2]=(sampleOffVOX[i])&0xff; From e76d96f4cb0a5afd277aa4348a7f29d259f96231 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 3 Oct 2023 12:35:18 +0900 Subject: [PATCH 03/10] Fix length --- src/engine/platform/msm6295.cpp | 3 ++- src/engine/platform/msm6295.h | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index d0c28833a..07e2db4a7 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -421,6 +421,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { sampleOffVOX[i]=memPos; bankedPhrase[i].bank=bankInd; bankedPhrase[i].phrase=phraseInd; + bankedPhrase[i].length=paddedLen; memPos+=paddedLen; phraseInd++; } @@ -429,7 +430,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { // phrase book for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; - int endPos=sampleOffVOX[i]+s->lengthVOX; + int endPos=sampleOffVOX[i]+bankedPhrase[i].length; for (int b=0; b<4; b++) { unsigned int bankedAddr=((unsigned int)bankedPhrase[i].bank<<16)+(b<<8)+(bankedPhrase[i].phrase*8); adpcmMem[bankedAddr]=b; diff --git a/src/engine/platform/msm6295.h b/src/engine/platform/msm6295.h index e38a4ec6a..f7c8c58e0 100644 --- a/src/engine/platform/msm6295.h +++ b/src/engine/platform/msm6295.h @@ -63,9 +63,11 @@ class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { struct BankedPhrase { unsigned char bank=0; unsigned char phrase=0; + unsigned int length=0; BankedPhrase(): bank(0), - phrase(0) {} + phrase(0), + length(0) {} } bankedPhrase[256]; friend void putDispatchChip(void*,int); From d6d3bbcbf14feb5881e61e6f8355ec7a73778df5 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 3 Oct 2023 14:02:33 +0900 Subject: [PATCH 04/10] Fix build --- src/engine/platform/msm6295.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 07e2db4a7..a40344d8d 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -429,7 +429,6 @@ void DivPlatformMSM6295::renderSamples(int sysID) { // phrase book for (int i=0; isong.sampleLen; i++) { - DivSample* s=parent->song.sample[i]; int endPos=sampleOffVOX[i]+bankedPhrase[i].length; for (int b=0; b<4; b++) { unsigned int bankedAddr=((unsigned int)bankedPhrase[i].bank<<16)+(b<<8)+(bankedPhrase[i].phrase*8); From fa95bead2fe6f39083a1f798a6d6c4b3702b02fa Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 2 Nov 2023 21:19:39 +0900 Subject: [PATCH 05/10] Sync with master --- src/gui/debug.cpp | 883 ---------------------------------------------- 1 file changed, 883 deletions(-) diff --git a/src/gui/debug.cpp b/src/gui/debug.cpp index c0ce44bfd..88bee61bf 100644 --- a/src/gui/debug.cpp +++ b/src/gui/debug.cpp @@ -238,891 +238,8 @@ ImGui::TextColored(ch->mask?colorOn:colorOff,">> Mask"); void putDispatchChip(void* data, int type) { -<<<<<<< HEAD - ImVec4 colorOn=ImVec4(1.0f,1.0f,0.0f,1.0f); - ImVec4 colorOff=ImVec4(0.3f,0.3f,0.3f,1.0f); - switch (type) { - case DIV_SYSTEM_YM2612: - case DIV_SYSTEM_YM2612_EXT: - case DIV_SYSTEM_YM2612_DUALPCM: - case DIV_SYSTEM_YM2612_DUALPCM_EXT: { - GENESIS_CHIP_DEBUG; - break; - } - case DIV_SYSTEM_GENESIS: - case DIV_SYSTEM_GENESIS_EXT: { - GENESIS_CHIP_DEBUG; - SMS_CHIP_DEBUG; - break; - } - case DIV_SYSTEM_SMS: { - SMS_CHIP_DEBUG; - break; - } - case DIV_SYSTEM_YM2203: - case DIV_SYSTEM_YM2203_EXT: { - DivPlatformYM2203* ch=(DivPlatformYM2203*)data; - ImGui::Text("> YM2203"); - FM_OPN_CHIP_DEBUG; - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- prescale: %d",ch->prescale); - FM_OPN_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->extMode?colorOn:colorOff,">> ExtMode"); - break; - } - case DIV_SYSTEM_YM2608: - case DIV_SYSTEM_YM2608_EXT: { - DivPlatformYM2608* ch=(DivPlatformYM2608*)data; - ImGui::Text("> YM2608"); - FM_OPN_CHIP_DEBUG; - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- writeRSSOff: %d",ch->writeRSSOff); - ImGui::Text("- writeRSSOn: %d",ch->writeRSSOn); - ImGui::Text("- globalRSSVolume: %d",ch->globalRSSVolume); - ImGui::Text("- prescale: %d",ch->prescale); - FM_OPN_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->extMode?colorOn:colorOff,">> ExtMode"); - break; - } - case DIV_SYSTEM_YM2610: - case DIV_SYSTEM_YM2610_EXT: - case DIV_SYSTEM_YM2610_FULL: - case DIV_SYSTEM_YM2610_FULL_EXT: { - DivPlatformYM2610* ch=(DivPlatformYM2610*)data; - ImGui::Text("> YM2610"); - OPNB_CHIP_DEBUG; - break; - } - case DIV_SYSTEM_YM2610B: - case DIV_SYSTEM_YM2610B_EXT: { - DivPlatformYM2610B* ch=(DivPlatformYM2610B*)data; - ImGui::Text("> YM2610B"); - OPNB_CHIP_DEBUG; - break; - } - case DIV_SYSTEM_GB: { - DivPlatformGB* ch=(DivPlatformGB*)data; - ImGui::Text("> GameBoy"); - COMMON_CHIP_DEBUG; - ImGui::Text("- lastPan: %d",ch->lastPan); - ImGui::Text("- antiClickPeriodCount: %d",ch->antiClickPeriodCount); - ImGui::Text("- antiClickWavePos: %d",ch->antiClickWavePos); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->antiClickEnabled?colorOn:colorOff,">> AntiClickEnabled"); - break; - } - case DIV_SYSTEM_PCE: { - DivPlatformPCE* ch=(DivPlatformPCE*)data; - ImGui::Text("> PCEngine"); - COMMON_CHIP_DEBUG; - ImGui::Text("- lastPan: %d",ch->lastPan); - ImGui::Text("- cycles: %d",ch->cycles); - ImGui::Text("- curChan: %d",ch->curChan); - ImGui::Text("- delay: %d",ch->delay); - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- lfoMode: %d",ch->lfoMode); - ImGui::Text("- lfoSpeed: %d",ch->lfoSpeed); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->antiClickEnabled?colorOn:colorOff,">> AntiClickEnabled"); - break; - } - case DIV_SYSTEM_NES: { - DivPlatformNES* ch=(DivPlatformNES*)data; - ImGui::Text("> NES"); - COMMON_CHIP_DEBUG; - ImGui::Text("* DAC:"); - ImGui::Text(" - Period: %d",ch->dacPeriod); - ImGui::Text(" - Rate: %d",ch->dacRate); - ImGui::Text(" - Pos: %d",ch->dacPos); - ImGui::Text(" - AntiClick: %d",ch->dacAntiClick); - ImGui::Text(" - Sample: %d",ch->dacSample); - ImGui::Text("- dpcmBank: %d",ch->dpcmBank); - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- writeOscBuf: %d",ch->writeOscBuf); - ImGui::Text("- apuType: %d",ch->apuType); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->dpcmMode?colorOn:colorOff,">> DPCMMode"); - ImGui::TextColored(ch->dacAntiClickOn?colorOn:colorOff,">> DACAntiClickOn"); - ImGui::TextColored(ch->useNP?colorOn:colorOff,">> UseNP"); - ImGui::TextColored(ch->goingToLoop?colorOn:colorOff,">> GoingToLoop"); - break; - } - case DIV_SYSTEM_C64_6581: case DIV_SYSTEM_C64_8580: { - DivPlatformC64* ch=(DivPlatformC64*)data; - ImGui::Text("> C64"); - COMMON_CHIP_DEBUG; - ImGui::Text("- filtControl: %d",ch->filtControl); - ImGui::Text("- filtRes: %d",ch->filtRes); - ImGui::Text("- vol: %d",ch->vol); - ImGui::Text("- writeOscBuf: %d",ch->writeOscBuf); - ImGui::Text("- filtCut: %d",ch->filtCut); - ImGui::Text("- resetTime: %d",ch->resetTime); - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_ARCADE: - case DIV_SYSTEM_YM2151: { - DivPlatformArcade* ch=(DivPlatformArcade*)data; - ImGui::Text("> YM2151"); - FM_CHIP_DEBUG; - ImGui::Text("- baseFreqOff: %d",ch->baseFreqOff); - ImGui::Text("- amDepth: %d",ch->amDepth); - ImGui::Text("- pmDepth: %d",ch->pmDepth); - FM_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->useYMFM?colorOn:colorOff,">> UseYMFM"); - break; - } - case DIV_SYSTEM_SEGAPCM: - case DIV_SYSTEM_SEGAPCM_COMPAT: { - DivPlatformSegaPCM* ch=(DivPlatformSegaPCM*)data; - ImGui::Text("> SegaPCM"); - COMMON_CHIP_DEBUG; - ImGui::Text("- delay: %d",ch->delay); - ImGui::Text("- pcmL: %d",ch->pcmL); - ImGui::Text("- pcmR: %d",ch->pcmR); - ImGui::Text("- pcmCycles: %d",ch->pcmCycles); - ImGui::Text("- sampleBank: %d",ch->sampleBank); - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_AY8910: { - DivPlatformAY8910* ch=(DivPlatformAY8910*)data; - ImGui::Text("> AY-3-8910"); - COMMON_CHIP_DEBUG; - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- stereoSep: %d",ch->stereoSep); - ImGui::Text("- delay: %d",ch->delay); - ImGui::Text("- extClock: %d",ch->extClock); - ImGui::Text("- extDiv: %d",ch->extDiv); - ImGui::Text("- portAVal: %d",ch->portAVal); - ImGui::Text("- portBVal: %d",ch->portBVal); - ImGui::Text("* envelope:"); - ImGui::Text(" - mode: %d",ch->ayEnvMode); - ImGui::Text(" - period: %d",ch->ayEnvPeriod); - ImGui::Text(" * slide: %d",ch->ayEnvSlide); - ImGui::Text(" - slideLow: %d",ch->ayEnvSlideLow); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->extMode?colorOn:colorOff,">> ExtMode"); - ImGui::TextColored(ch->stereo?colorOn:colorOff,">> Stereo"); - ImGui::TextColored(ch->sunsoft?colorOn:colorOff,">> Sunsoft"); - ImGui::TextColored(ch->intellivision?colorOn:colorOff,">> Intellivision"); - ImGui::TextColored(ch->clockSel?colorOn:colorOff,">> ClockSel"); - ImGui::TextColored(ch->ioPortA?colorOn:colorOff,">> IoPortA"); - ImGui::TextColored(ch->ioPortB?colorOn:colorOff,">> IoPortB"); - break; - } - case DIV_SYSTEM_AY8930: { - DivPlatformAY8930* ch=(DivPlatformAY8930*)data; - ImGui::Text("> AY8930"); - COMMON_CHIP_DEBUG; - ImGui::Text("* noise:"); - ImGui::Text(" - and: %d",ch->ayNoiseAnd); - ImGui::Text(" - or: %d",ch->ayNoiseOr); - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- stereoSep: %d",ch->stereoSep); - ImGui::Text("- delay: %d",ch->delay); - ImGui::Text("- portAVal: %d",ch->portAVal); - ImGui::Text("- portBVal: %d",ch->portBVal); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->bank?colorOn:colorOff,">> Bank"); - ImGui::TextColored(ch->extMode?colorOn:colorOff,">> ExtMode"); - ImGui::TextColored(ch->stereo?colorOn:colorOff,">> Stereo"); - ImGui::TextColored(ch->clockSel?colorOn:colorOff,">> ClockSel"); - ImGui::TextColored(ch->ioPortA?colorOn:colorOff,">> IoPortA"); - ImGui::TextColored(ch->ioPortB?colorOn:colorOff,">> IoPortB"); - break; - } - case DIV_SYSTEM_QSOUND: { - DivPlatformQSound* ch=(DivPlatformQSound*)data; - ImGui::Text("> QSound"); - COMMON_CHIP_DEBUG; - ImGui::Text("* echo:"); - ImGui::Text(" - delay: %d",ch->echoDelay); - ImGui::Text(" - feedback: %d",ch->echoFeedback); - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_X1_010: { - DivPlatformX1_010* ch=(DivPlatformX1_010*)data; - ImGui::Text("> X1-010"); - COMMON_CHIP_DEBUG; - ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- bankSlot: [%d,%d,%d,%d,%d,%d,%d,%d]",ch->bankSlot[0],ch->bankSlot[1],ch->bankSlot[2],ch->bankSlot[3],ch->bankSlot[4],ch->bankSlot[5],ch->bankSlot[6],ch->bankSlot[7]); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->stereo?colorOn:colorOff,">> Stereo"); - ImGui::TextColored(ch->isBanked?colorOn:colorOff,">> IsBanked"); - break; - } - case DIV_SYSTEM_N163: { - DivPlatformN163* ch=(DivPlatformN163*)data; - ImGui::Text("> N163"); - COMMON_CHIP_DEBUG; - ImGui::Text("- initChanMax: %d",ch->initChanMax); - ImGui::Text("- chanMax: %d",ch->chanMax); - ImGui::Text("- loadWave: %d",ch->loadWave); - ImGui::Text("- loadPos: %d",ch->loadPos); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->multiplex?colorOn:colorOff,">> Multiplex"); - break; - } - case DIV_SYSTEM_VRC6: { - DivPlatformVRC6* ch=(DivPlatformVRC6*)data; - ImGui::Text("> VRC6"); - COMMON_CHIP_DEBUG; - ImGui::Text("- sampleBank: %.2x",ch->sampleBank); - ImGui::Text("- writeOscBuf: %.2x",ch->writeOscBuf); - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_LYNX: { - DivPlatformLynx* ch=(DivPlatformLynx*)data; - ImGui::Text("> Lynx"); - COMMON_CHIP_DEBUG; - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_PCM_DAC: { - DivPlatformPCMDAC* ch=(DivPlatformPCMDAC*)data; - ImGui::Text("> PCM DAC"); - COMMON_CHIP_DEBUG; - ImGui::Text("- outDepth: %d",ch->outDepth); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->outStereo?colorOn:colorOff,">> OutStereo"); - break; - } - case DIV_SYSTEM_ES5506: { - DivPlatformES5506* ch=(DivPlatformES5506*)data; - ImGui::Text("> ES5506"); - COMMON_CHIP_DEBUG; - ImGui::Text("- cycle: %d",ch->cycle); - ImGui::Text("- curPage: %d",ch->curPage); - ImGui::Text("- volScale: %d",ch->volScale); - ImGui::Text("- maskedVal: %.2x",ch->maskedVal); - ImGui::Text("- irqv: %.2x",ch->irqv); - ImGui::Text("- curCR: %.8x",ch->curCR); - ImGui::Text("- initChanMax: %d",ch->initChanMax); - ImGui::Text("- chanMax: %d",ch->chanMax); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->isMasked?colorOn:colorOff,">> IsMasked"); - ImGui::TextColored(ch->isReaded?colorOn:colorOff,">> isReaded"); - ImGui::TextColored(ch->irqTrigger?colorOn:colorOff,">> IrqTrigger"); - break; - } - case DIV_SYSTEM_K007232: { - DivPlatformK007232* ch=(DivPlatformK007232*)data; - ImGui::Text("> K007232"); - COMMON_CHIP_DEBUG; - ImGui::Text("- delay: %.2x",ch->delay); - ImGui::Text("- lastLoop: %.2x",ch->lastLoop); - ImGui::Text("- lastVolume: %.2x",ch->lastVolume); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->stereo?colorOn:colorOff,">> Stereo"); - break; - } - case DIV_SYSTEM_GA20: { - DivPlatformGA20* ch=(DivPlatformGA20*)data; - ImGui::Text("> GA20"); - COMMON_CHIP_DEBUG; - ImGui::Text("- delay: %.2x",ch->delay); - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_SM8521: { - DivPlatformSM8521* ch=(DivPlatformSM8521*)data; - ImGui::Text("> SM8521"); - COMMON_CHIP_DEBUG; - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->antiClickEnabled?colorOn:colorOff,">> AntiClickEnabled"); - break; - } - case DIV_SYSTEM_PV1000: { - DivPlatformPV1000* ch=(DivPlatformPV1000*)data; - ImGui::Text("> PV1000"); - COMMON_CHIP_DEBUG; - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_K053260: { - DivPlatformK053260* ch=(DivPlatformK053260*)data; - ImGui::Text("> K053260"); - COMMON_CHIP_DEBUG; - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_C140: { - DivPlatformC140* ch=(DivPlatformC140*)data; - ImGui::Text("> C140"); - COMMON_CHIP_DEBUG; - COMMON_CHIP_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_MSM6295: { - DivPlatformMSM6295* ch=(DivPlatformMSM6295*)data; - ImGui::Text("> MSM6295"); - COMMON_CHIP_DEBUG; - ImGui::Text("- delay: %d",ch->delay); - ImGui::Text("- updateOsc: %d",ch->updateOsc); - COMMON_CHIP_DEBUG_BOOL; - ImGui::TextColored(ch->rateSel?colorOn:colorOff,">> RateSel"); - ImGui::TextColored(ch->rateSelInit?colorOn:colorOff,">> rateSelInit"); - ImGui::TextColored(ch->isBanked?colorOn:colorOff,">> IsBanked"); - break; - } - default: - ImGui::Text("Unimplemented chip! Help!"); - break; - } -} -void putDispatchChan(void* data, int chanNum, int type) { - ImVec4 colorOn=ImVec4(1.0f,1.0f,0.0f,1.0f); - ImVec4 colorOff=ImVec4(0.3f,0.3f,0.3f,1.0f); - switch (type) { - case DIV_SYSTEM_GENESIS: { - if (chanNum>5) { - SMS_CHAN_DEBUG; - } else { - GENESIS_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_GENESIS_EXT: { - if (chanNum>8) { - SMS_CHAN_DEBUG; - } else if (chanNum>=2 && chanNum<=5) { - DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data; - ImGui::Text("> YM2612 (per operator)"); - OPNB_OPCHAN_DEBUG; - } else { - GENESIS_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_YM2612: - case DIV_SYSTEM_YM2612_DUALPCM: { - GENESIS_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2612_EXT: - case DIV_SYSTEM_YM2612_DUALPCM_EXT: { - if (chanNum>=2 && chanNum<=5) { - DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data; - ImGui::Text("> YM2612 (per operator)"); - OPNB_OPCHAN_DEBUG; - } else { - GENESIS_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_SMS: { - SMS_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2203: { - OPN_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2203_EXT: { - if (chanNum>=2 && chanNum<=5) { - OPN_OPCHAN_DEBUG; - } else { - OPN_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_YM2608: { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2608"); - OPNB_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2608_EXT: { - if (chanNum>=2 && chanNum<=5) { - DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data; - ImGui::Text("> YM2608 (per operator)"); - OPNB_OPCHAN_DEBUG; - } else { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2608"); - OPNB_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_YM2610: - case DIV_SYSTEM_YM2610_FULL: { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2610"); - OPNB_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2610B: { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2610B"); - OPNB_CHAN_DEBUG; - break; - } - case DIV_SYSTEM_YM2610_EXT: - case DIV_SYSTEM_YM2610_FULL_EXT: { - if (chanNum>=1 && chanNum<=4) { - DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data; - ImGui::Text("> YM2610 (per operator)"); - OPNB_OPCHAN_DEBUG; - } else { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2610"); - OPNB_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_YM2610B_EXT: { - if (chanNum>=2 && chanNum<=5) { - DivPlatformOPN::OPNOpChannelStereo* ch=(DivPlatformOPN::OPNOpChannelStereo*)data; - ImGui::Text("> YM2610B (per operator)"); - OPNB_OPCHAN_DEBUG; - } else { - DivPlatformOPN::OPNChannelStereo* ch=(DivPlatformOPN::OPNChannelStereo*)data; - ImGui::Text("> YM2610B"); - OPNB_CHAN_DEBUG; - } - break; - } - case DIV_SYSTEM_GB: { - DivPlatformGB::Channel* ch=(DivPlatformGB::Channel*)data; - ImGui::Text("> GameBoy"); - COMMON_CHAN_DEBUG; - ImGui::Text("- duty: %d",ch->duty); - ImGui::Text("- sweep: %.2x",ch->sweep); - ImGui::Text("- wave: %d",ch->wave); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->sweepChanged?colorOn:colorOff,">> SweepChanged"); - break; - } - case DIV_SYSTEM_PCE: { - DivPlatformPCE::Channel* ch=(DivPlatformPCE::Channel*)data; - ImGui::Text("> PCEngine"); - COMMON_CHAN_DEBUG; - ImGui::Text("* DAC:"); - ImGui::Text(" - period: %d",ch->dacPeriod); - ImGui::Text(" - rate: %d",ch->dacRate); - ImGui::Text(" - pos: %d",ch->dacPos); - ImGui::Text(" - out: %d",ch->dacOut); - ImGui::Text(" - sample: %d",ch->dacSample); - ImGui::Text("- pan: %.2x",ch->pan); - ImGui::Text("- wave: %d",ch->wave); - ImGui::Text("- macroVolMul: %d",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->noise?colorOn:colorOff,">> Noise"); - ImGui::TextColored(ch->pcm?colorOn:colorOff,">> DAC"); - ImGui::TextColored(ch->furnaceDac?colorOn:colorOff,">> FurnaceDAC"); - break; - } - case DIV_SYSTEM_NES: { - DivPlatformNES::Channel* ch=(DivPlatformNES::Channel*)data; - ImGui::Text("> NES"); - COMMON_CHAN_DEBUG; - ImGui::Text(" - prev: %d",ch->prevFreq); - ImGui::Text("- duty: %d",ch->duty); - ImGui::Text("- sweep: %.2x",ch->sweep); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->sweepChanged?colorOn:colorOff,">> SweepChanged"); - ImGui::TextColored(ch->furnaceDac?colorOn:colorOff,">> FurnaceDAC"); - break; - } - case DIV_SYSTEM_C64_6581: case DIV_SYSTEM_C64_8580: { - DivPlatformC64::Channel* ch=(DivPlatformC64::Channel*)data; - ImGui::Text("> C64"); - COMMON_CHAN_DEBUG; - ImGui::Text("- prevFreq: %d",ch->prevFreq); - ImGui::Text("- testWhen: %d",ch->testWhen); - ImGui::Text("- duty: %d",ch->duty); - ImGui::Text("- sweep: %.2x",ch->sweep); - ImGui::Text("- wave: %.1x",ch->wave); - ImGui::Text("- ADSR: %.1x %.1x %.1x %.1x",ch->attack,ch->decay,ch->sustain,ch->release); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->sweepChanged?colorOn:colorOff,">> SweepChanged"); - ImGui::TextColored(ch->filter?colorOn:colorOff,">> Filter"); - ImGui::TextColored(ch->resetMask?colorOn:colorOff,">> ResetMask"); - ImGui::TextColored(ch->resetFilter?colorOn:colorOff,">> ResetFilter"); - ImGui::TextColored(ch->resetDuty?colorOn:colorOff,">> ResetDuty"); - ImGui::TextColored(ch->ring?colorOn:colorOff,">> Ring"); - ImGui::TextColored(ch->sync?colorOn:colorOff,">> Sync"); - break; - } - case DIV_SYSTEM_ARCADE: - case DIV_SYSTEM_YM2151: { - DivPlatformArcade::Channel* ch=(DivPlatformArcade::Channel*)data; - ImGui::Text("> YM2151"); - ImGui::Text("- freqHL: %.2x%.2x",ch->freqH,ch->freqL); - COMMON_CHAN_DEBUG; - ImGui::Text("- KOnCycles: %d",ch->konCycles); - ImGui::Text("- chVolL: %.2x",ch->chVolL); - ImGui::Text("- chVolR: %.2x",ch->chVolR); - COMMON_CHAN_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_SEGAPCM: - case DIV_SYSTEM_SEGAPCM_COMPAT: { - DivPlatformSegaPCM::Channel* ch=(DivPlatformSegaPCM::Channel*)data; - ImGui::Text("> SegaPCM"); - COMMON_CHAN_DEBUG; - ImGui::Text("* PCM:"); - ImGui::Text(" - sample: %d",ch->pcm.sample); - ImGui::Text(" - pos: %d",ch->pcm.pos); - ImGui::Text(" - len: %d",ch->pcm.len); - ImGui::Text(" - freq: %d",ch->pcm.freq); - ImGui::Text("- chVolL: %.2x",ch->chVolL); - ImGui::Text("- chVolR: %.2x",ch->chVolR); - ImGui::Text("- chPanL: %.2x",ch->chPanL); - ImGui::Text("- chPanR: %.2x",ch->chPanR); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->furnacePCM?colorOn:colorOff,">> FurnacePCM"); - ImGui::TextColored(ch->isNewSegaPCM?colorOn:colorOff,">> IsNewSegaPCM"); - break; - } - case DIV_SYSTEM_AY8910: { - DivPlatformAY8910::Channel* ch=(DivPlatformAY8910::Channel*)data; - ImGui::Text("> AY-3-8910"); - COMMON_CHAN_DEBUG; - ImGui::Text("* DAC:"); - ImGui::Text(" - sample: %d",ch->dac.sample); - ImGui::Text(" - rate: %d",ch->dac.rate); - ImGui::Text(" - period: %d",ch->dac.period); - ImGui::Text(" - pos: %d",ch->dac.pos); - ImGui::Text(" - out: %d",ch->dac.out); - ImGui::Text("- autoEnvNum: %.2x",ch->autoEnvNum); - ImGui::Text("- autoEnvDen: %.2x",ch->autoEnvDen); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->dac.furnaceDAC?colorOn:colorOff,">> furnaceDAC"); - break; - } - case DIV_SYSTEM_AY8930: { - DivPlatformAY8930::Channel* ch=(DivPlatformAY8930::Channel*)data; - ImGui::Text("> AY8930"); - COMMON_CHAN_DEBUG; - ImGui::Text("- duty: %d",ch->duty); - ImGui::Text("* DAC:"); - ImGui::Text(" - sample: %d",ch->dac.sample); - ImGui::Text(" - rate: %d",ch->dac.rate); - ImGui::Text(" - period: %d",ch->dac.period); - ImGui::Text(" - pos: %d",ch->dac.pos); - ImGui::Text(" - out: %d",ch->dac.out); - ImGui::Text("- autoEnvNum: %.2x",ch->autoEnvNum); - ImGui::Text("- autoEnvDen: %.2x",ch->autoEnvDen); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->dac.furnaceDAC?colorOn:colorOff,">> furnaceDAC"); - break; - } - case DIV_SYSTEM_QSOUND: { - DivPlatformQSound::Channel* ch=(DivPlatformQSound::Channel*)data; - ImGui::Text("> QSound"); - COMMON_CHAN_DEBUG; - ImGui::Text("- sample: %d",ch->sample); - ImGui::Text("- echo: %d",ch->echo); - ImGui::Text("- panning: %d",ch->panning); - ImGui::Text("- resVol: %.2x",ch->resVol); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->useWave?colorOn:colorOff,">> UseWave"); - ImGui::TextColored(ch->surround?colorOn:colorOff,">> Surround"); - ImGui::TextColored(ch->isNewQSound?colorOn:colorOff,">> IsNewQSound"); - break; - } - case DIV_SYSTEM_X1_010: { - DivPlatformX1_010::Channel* ch=(DivPlatformX1_010::Channel*)data; - ImGui::Text("> X1-010"); - COMMON_CHAN_DEBUG; - ImGui::Text("- wave: %d",ch->wave); - ImGui::Text("- sample: %d",ch->sample); - ImGui::Text("- pan: %d",ch->pan); - ImGui::Text("* envelope:"); - ImGui::Text(" - shape: %d",ch->env.shape); - ImGui::Text(" - period: %.2x",ch->env.period); - ImGui::Text(" - slide: %.2x",ch->env.slide); - ImGui::Text(" - slidefrac: %.2x",ch->env.slidefrac); - ImGui::Text(" - autoEnvNum: %.2x",ch->autoEnvNum); - ImGui::Text(" - autoEnvDen: %.2x",ch->autoEnvDen); - ImGui::Text("- WaveBank: %d",ch->waveBank); - ImGui::Text("- bankSlot: %d",ch->bankSlot); - ImGui::Text("- Lvol: %.2x",ch->lvol); - ImGui::Text("- Rvol: %.2x",ch->rvol); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->envChanged?colorOn:colorOff,">> EnvChanged"); - ImGui::TextColored(ch->furnacePCM?colorOn:colorOff,">> FurnacePCM"); - ImGui::TextColored(ch->pcm?colorOn:colorOff,">> PCM"); - ImGui::TextColored(ch->env.flag.envEnable?colorOn:colorOff,">> EnvEnable"); - ImGui::TextColored(ch->env.flag.envOneshot?colorOn:colorOff,">> EnvOneshot"); - ImGui::TextColored(ch->env.flag.envSplit?colorOn:colorOff,">> EnvSplit"); - ImGui::TextColored(ch->env.flag.envHinvR?colorOn:colorOff,">> EnvHinvR"); - ImGui::TextColored(ch->env.flag.envVinvR?colorOn:colorOff,">> EnvVinvR"); - ImGui::TextColored(ch->env.flag.envHinvL?colorOn:colorOff,">> EnvHinvL"); - ImGui::TextColored(ch->env.flag.envVinvL?colorOn:colorOff,">> EnvVinvL"); - break; - } - case DIV_SYSTEM_N163: { - DivPlatformN163::Channel* ch=(DivPlatformN163::Channel*)data; - ImGui::Text("> N163"); - COMMON_CHAN_DEBUG; - ImGui::Text("- wave: %d",ch->wave); - ImGui::Text("- wavepos: %d",ch->wavePos); - ImGui::Text("- wavelen: %d",ch->waveLen); - ImGui::Text("- wavemode: %d",ch->waveMode); - ImGui::Text("- resVol: %.2x",ch->resVol); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volumeChanged?colorOn:colorOff,">> VolumeChanged"); - ImGui::TextColored(ch->waveChanged?colorOn:colorOff,">> WaveChanged"); - ImGui::TextColored(ch->waveUpdated?colorOn:colorOff,">> WaveUpdated"); - break; - } - case DIV_SYSTEM_VRC6: { - DivPlatformVRC6::Channel* ch=(DivPlatformVRC6::Channel*)data; - ImGui::Text("> VRC6"); - COMMON_CHAN_DEBUG; - ImGui::Text("* DAC:"); - ImGui::Text(" - period: %d",ch->dacPeriod); - ImGui::Text(" - rate: %d",ch->dacRate); - ImGui::Text(" - out: %d",ch->dacOut); - ImGui::Text(" - pos: %d",ch->dacPos); - ImGui::Text(" - sample: %d",ch->dacSample); - ImGui::Text("- duty: %d",ch->duty); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->pcm?colorOn:colorOff,">> DAC"); - ImGui::TextColored(ch->furnaceDac?colorOn:colorOff,">> FurnaceDAC"); - break; - } - case DIV_SYSTEM_ES5506: { - DivPlatformES5506::Channel* ch=(DivPlatformES5506::Channel*)data; - ImGui::Text("> ES5506"); - COMMON_CHAN_DEBUG; - ImGui::Text("- nextFreq: %d",ch->nextFreq); - ImGui::Text("- nextNote: %d",ch->nextNote); - ImGui::Text("- currNote: %d",ch->currNote); - ImGui::Text("- wave: %d",ch->wave); - ImGui::Text("- VolMacroMax: %d",ch->volMacroMax); - ImGui::Text("- PanMacroMax: %d",ch->panMacroMax); - ImGui::Text("* PCM:"); - ImGui::Text(" * index: %d",ch->pcm.index); - ImGui::Text(" - next: %d",ch->pcm.next); - ImGui::Text(" - note: %d",ch->pcm.note); - ImGui::Text(" * freqOffs: %.6f",ch->pcm.freqOffs); - ImGui::Text(" - next: %.6f",ch->pcm.nextFreqOffs); - ImGui::Text(" - bank: %.2x",ch->pcm.bank); - ImGui::Text(" - start: %.8x",ch->pcm.start); - ImGui::Text(" - end: %.8x",ch->pcm.end); - ImGui::Text(" - length: %.8x",ch->pcm.length); - ImGui::Text(" - loopStart: %.8x",ch->pcm.loopStart); - ImGui::Text(" - loopEnd: %.8x",ch->pcm.loopEnd); - ImGui::Text(" - loopMode: %d",ch->pcm.loopMode); - ImGui::Text(" - nextPos: %d",ch->pcm.nextPos); - ImGui::Text("* Filter:"); - ImGui::Text(" - Mode: %d",ch->filter.mode); - ImGui::Text(" - K1: %.4x",ch->filter.k1); - ImGui::Text(" - K2: %.4x",ch->filter.k2); - ImGui::Text("* Envelope:"); - ImGui::Text(" - EnvCount: %.3x",ch->envelope.ecount); - ImGui::Text(" - LVRamp: %d",ch->envelope.lVRamp); - ImGui::Text(" - RVRamp: %d",ch->envelope.rVRamp); - ImGui::Text(" - K1Ramp: %d",ch->envelope.k1Ramp); - ImGui::Text(" - K2Ramp: %d",ch->envelope.k2Ramp); - ImGui::Text(" - K1Offs: %d",ch->k1Offs); - ImGui::Text(" - K2Offs: %d",ch->k2Offs); - ImGui::Text(" - K1Slide: %d",ch->k1Slide); - ImGui::Text(" - K2Slide: %d",ch->k2Slide); - ImGui::Text(" - K1Prev: %.4x",ch->k1Prev); - ImGui::Text(" - K2Prev: %.4x",ch->k2Prev); - ImGui::Text("* Overwrite:"); - ImGui::Text(" * Filter:"); - ImGui::Text(" - Mode: %d",ch->overwrite.filter.mode); - ImGui::Text(" - K1: %.4x",ch->overwrite.filter.k1); - ImGui::Text(" - K2: %.4x",ch->overwrite.filter.k2); - ImGui::Text(" * Envelope:"); - ImGui::Text(" - EnvCount: %.3x",ch->overwrite.envelope.ecount); - ImGui::Text(" - LVRamp: %d",ch->overwrite.envelope.lVRamp); - ImGui::Text(" - RVRamp: %d",ch->overwrite.envelope.rVRamp); - ImGui::Text(" - K1Ramp: %d",ch->overwrite.envelope.k1Ramp); - ImGui::Text(" - K2Ramp: %d",ch->overwrite.envelope.k2Ramp); - ImGui::Text("- CA: %.2x",ch->ca); - ImGui::Text("- LVol: %.2x",ch->lVol); - ImGui::Text("- RVol: %.2x",ch->rVol); - ImGui::Text("- outLVol: %.2x",ch->outLVol); - ImGui::Text("- outRVol: %.2x",ch->outRVol); - ImGui::Text("- ResLVol: %.2x",ch->resLVol); - ImGui::Text("- ResRVol: %.2x",ch->resRVol); - ImGui::Text("- oscOut: %d",ch->oscOut); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volChanged.lVol?colorOn:colorOff,">> LVolChanged"); - ImGui::TextColored(ch->volChanged.rVol?colorOn:colorOff,">> RVolChanged"); - ImGui::TextColored(ch->filterChanged.mode?colorOn:colorOff,">> FilterModeChanged"); - ImGui::TextColored(ch->filterChanged.k1?colorOn:colorOff,">> FilterK1Changed"); - ImGui::TextColored(ch->filterChanged.k2?colorOn:colorOff,">> FilterK2Changed"); - ImGui::TextColored(ch->envChanged.ecount?colorOn:colorOff,">> EnvECountChanged"); - ImGui::TextColored(ch->envChanged.lVRamp?colorOn:colorOff,">> EnvLVRampChanged"); - ImGui::TextColored(ch->envChanged.rVRamp?colorOn:colorOff,">> EnvRVRampChanged"); - ImGui::TextColored(ch->envChanged.k1Ramp?colorOn:colorOff,">> EnvK1RampChanged"); - ImGui::TextColored(ch->envChanged.k2Ramp?colorOn:colorOff,">> EnvK2RampChanged"); - ImGui::TextColored(ch->pcmChanged.index?colorOn:colorOff,">> PCMIndexChanged"); - ImGui::TextColored(ch->pcmChanged.slice?colorOn:colorOff,">> PCMSliceChanged"); - ImGui::TextColored(ch->pcmChanged.position?colorOn:colorOff,">> PCMPositionChanged"); - ImGui::TextColored(ch->pcmChanged.loopBank?colorOn:colorOff,">> PCMLoopBankChanged"); - ImGui::TextColored(ch->isReverseLoop?colorOn:colorOff,">> IsReverseLoop"); - ImGui::TextColored(ch->pcm.isNoteMap?colorOn:colorOff,">> PCMIsNoteMap"); - ImGui::TextColored(ch->pcm.pause?colorOn:colorOff,">> PCMPause"); - ImGui::TextColored(ch->pcm.direction?colorOn:colorOff,">> PCMDirection"); - ImGui::TextColored(ch->pcm.setPos?colorOn:colorOff,">> PCMSetPos"); - ImGui::TextColored(ch->envelope.k1Slow?colorOn:colorOff,">> EnvK1Slow"); - ImGui::TextColored(ch->envelope.k2Slow?colorOn:colorOff,">> EnvK2Slow"); - ImGui::TextColored(ch->overwrite.envelope.k1Slow?colorOn:colorOff,">> EnvK1SlowOverwrite"); - ImGui::TextColored(ch->overwrite.envelope.k2Slow?colorOn:colorOff,">> EnvK2SlowOverwrite"); - ImGui::TextColored(ch->overwrite.state.mode?colorOn:colorOff,">> FilterModeOverwrited"); - ImGui::TextColored(ch->overwrite.state.k1?colorOn:colorOff,">> FilterK1Overwrited"); - ImGui::TextColored(ch->overwrite.state.k2?colorOn:colorOff,">> FilterK2Overwrited"); - ImGui::TextColored(ch->overwrite.state.ecount?colorOn:colorOff,">> EnvECountOverwrited"); - ImGui::TextColored(ch->overwrite.state.lVRamp?colorOn:colorOff,">> EnvLVRampOverwrited"); - ImGui::TextColored(ch->overwrite.state.rVRamp?colorOn:colorOff,">> EnvRVRampOverwrited"); - ImGui::TextColored(ch->overwrite.state.k1Ramp?colorOn:colorOff,">> EnvK1RampOverwrited"); - ImGui::TextColored(ch->overwrite.state.k2Ramp?colorOn:colorOff,">> EnvK2RampOverwrited"); - break; - } - case DIV_SYSTEM_LYNX: { - DivPlatformLynx::Channel* ch=(DivPlatformLynx::Channel*)data; - ImGui::Text("> Lynx"); - COMMON_CHAN_DEBUG; - ImGui::Text("* FreqDiv:"); - ImGui::Text(" - clockDivider: %d",ch->fd.clockDivider); - ImGui::Text(" - backup: %d",ch->fd.backup); - ImGui::Text("- actualNote: %d",ch->actualNote); - ImGui::Text("* Sample:"); - ImGui::Text(" - sample: %d",ch->sample); - ImGui::Text(" - pos: %d",ch->samplePos); - ImGui::Text(" - accum: %d",ch->sampleAccum); - ImGui::Text(" * freq: %d",ch->sampleFreq); - ImGui::Text(" - base: %d",ch->sampleBaseFreq); - ImGui::Text("* duty:"); - ImGui::Text(" - int_feedback7: %d",ch->duty.int_feedback7); - ImGui::Text(" - feedback: %d",ch->duty.feedback); - ImGui::Text("- pan: %.2x",ch->pan); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->pcm?colorOn:colorOff,">> DAC"); - break; - } - case DIV_SYSTEM_PCM_DAC: { - DivPlatformPCMDAC::Channel* ch=(DivPlatformPCMDAC::Channel*)data; - ImGui::Text("> PCM DAC"); - COMMON_CHAN_DEBUG; - ImGui::Text("* Sample: %d",ch->sample); - ImGui::Text(" - dir: %d",ch->audDir); - ImGui::Text(" - loc: %d",ch->audLoc); - ImGui::Text(" - len: %d",ch->audLen); - ImGui::Text(" * pos: %d",ch->audPos); - ImGui::Text(" - sub: %d",ch->audSub); - ImGui::Text("- wave: %d",ch->wave); - ImGui::Text("- panL: %.2x",ch->panL); - ImGui::Text("- panR: %.2x",ch->panR); - ImGui::Text("- envVol: %.2x",ch->envVol); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->useWave?colorOn:colorOff,">> UseWave"); - ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); - break; - } - case DIV_SYSTEM_K007232: { - DivPlatformK007232::Channel* ch=(DivPlatformK007232::Channel*)data; - ImGui::Text("> K007232"); - COMMON_CHAN_DEBUG; - ImGui::Text("- prevFreq: %d",ch->prevFreq); - ImGui::Text("* Sample: %d",ch->sample); - ImGui::Text(" - pos: %d",ch->audPos); - ImGui::Text(" - prevBank: %d",ch->prevBank); - ImGui::Text("* panning: %d",ch->panning); - ImGui::Text(" - prev: %d",ch->prevPan); - ImGui::Text("- resVol: %.2x",ch->resVol); - ImGui::Text("- lvol: %.2x",ch->lvol); - ImGui::Text("- rvol: %.2x",ch->rvol); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volumeChanged?colorOn:colorOff,">> VolumeChanged"); - ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); - break; - } - case DIV_SYSTEM_GA20: { - DivPlatformGA20::Channel* ch=(DivPlatformGA20::Channel*)data; - ImGui::Text("> GA20"); - COMMON_CHAN_DEBUG; - ImGui::Text("- prevFreq: %d",ch->prevFreq); - ImGui::Text("* Sample: %d",ch->sample); - ImGui::Text(" - pos: %d",ch->audPos); - ImGui::Text("- resVol: %.2x",ch->resVol); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volumeChanged?colorOn:colorOff,">> VolumeChanged"); - ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); - break; - } - case DIV_SYSTEM_SM8521: { - DivPlatformSM8521::Channel* ch=(DivPlatformSM8521::Channel*)data; - ImGui::Text("> SM8521"); - COMMON_CHAN_DEBUG; - ImGui::Text("* AntiClick:"); - ImGui::Text(" - periodCount: %d",ch->antiClickPeriodCount); - ImGui::Text(" - wavePos: %d",ch->antiClickWavePos); - ImGui::Text("- wave: %d",ch->wave); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volumeChanged?colorOn:colorOff,">> VolumeChanged"); - break; - } - case DIV_SYSTEM_PV1000: { - DivPlatformPV1000::Channel* ch=(DivPlatformPV1000::Channel*)data; - ImGui::Text("> PV1000"); - COMMON_CHAN_DEBUG; - COMMON_CHAN_DEBUG_BOOL; - break; - } - case DIV_SYSTEM_K053260: { - DivPlatformK053260::Channel* ch=(DivPlatformK053260::Channel*)data; - ImGui::Text("> K053260"); - COMMON_CHAN_DEBUG; - ImGui::Text("* Sample: %d",ch->sample); - ImGui::Text(" - pos: %d",ch->audPos); - ImGui::Text("- panning: %d",ch->panning); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); - ImGui::TextColored(ch->reverse?colorOn:colorOff,">> Reverse"); - break; - } - case DIV_SYSTEM_C140: { - DivPlatformC140::Channel* ch=(DivPlatformC140::Channel*)data; - ImGui::Text("> C140"); - COMMON_CHAN_DEBUG; - ImGui::Text("* Sample: %d",ch->sample); - ImGui::Text(" - pos: %d",ch->audPos); - ImGui::Text("- chPanL: %.2x",ch->chPanL); - ImGui::Text("- chPanR: %.2x",ch->chPanR); - ImGui::Text("- chVolL: %.2x",ch->chVolL); - ImGui::Text("- chVolR: %.2x",ch->chVolR); - ImGui::Text("- macroVolMul: %.2x",ch->macroVolMul); - ImGui::Text("- macroPanMul: %.2x",ch->macroPanMul); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->volChangedL?colorOn:colorOff,">> VolChangedL"); - ImGui::TextColored(ch->volChangedR?colorOn:colorOff,">> VolChangedR"); - ImGui::TextColored(ch->setPos?colorOn:colorOff,">> SetPos"); - break; - } - case DIV_SYSTEM_MSM6295: { - DivPlatformMSM6295::Channel* ch=(DivPlatformMSM6295::Channel*)data; - ImGui::Text("> MSM6295"); - COMMON_CHAN_DEBUG; - ImGui::Text("* Sample: %d",ch->sample); - COMMON_CHAN_DEBUG_BOOL; - ImGui::TextColored(ch->furnacePCM?colorOn:colorOff,">> FurnacePCM"); - break; - } - default: - ImGui::Text("Unimplemented chip! Help!"); - break; - } -======= ImGui::Text("I will finish later..."); } void putDispatchChan(void* data, int chanNum, int type) { ImGui::Text("I will finish later..."); ->>>>>>> 89f8970e74cece7142e27a60f50d30b8d46b02cd } From 32f0113a39742c3287e9946d35b566024daf989d Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 1 Dec 2023 20:12:09 +0900 Subject: [PATCH 06/10] Fix VGM output --- src/engine/platform/msm6295.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index a40344d8d..250bcdfef 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -327,7 +327,7 @@ void DivPlatformMSM6295::reset() { rateSel=rateSelInit; rWrite(12,!rateSelInit); if (isBanked) { - rWrite(14,1); + rWrite(14,0x81); } delay=0; @@ -540,7 +540,7 @@ void DivPlatformMSM6295::setFlags(const DivConfig& flags) { rWrite(12,!rateSelInit); rateSel=rateSelInit; } - rWrite(14,isBanked); + rWrite(14,isBanked?0x81:0); } int DivPlatformMSM6295::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { From 35f8a9274108d371e3a7a586d99fa932f0d6991d Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 1 Dec 2023 20:19:35 +0900 Subject: [PATCH 07/10] Reduce duplication --- src/engine/platform/msm6295.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 250bcdfef..06510d69f 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -26,6 +26,14 @@ #define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} } #define rWriteDelay(a,v,d) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v,d)); if (dumpWrites) {addWrite(a,v);} } +#define setPhrase(c) \ + if (isBanked) { \ + rWrite(16+(c),bankedPhrase[chan[(c)].sample].bank); \ + rWrite(0,0x80|((c)<<5)|bankedPhrase[chan[(c)].sample].phrase); \ + } else { \ + rWrite(0,0x80|chan[(c)].sample); \ + } + const char** DivPlatformMSM6295::getRegisterSheet() { return NULL; } @@ -116,12 +124,7 @@ void DivPlatformMSM6295::tick(bool sysTick) { rWriteDelay(0,(8<=0 && chan[i].samplesong.sampleLen) { - if (isBanked) { - rWrite(16+i,bankedPhrase[chan[i].sample].bank); - rWrite(0,0x80|(i<<5)|bankedPhrase[chan[i].sample].phrase); - } else { - rWrite(0,0x80|chan[i].sample); // set phrase - } + setPhrase(i); rWrite(0,(16<getSample(12*sampleBank+c.value%12); chan[c.chan].sample=12*sampleBank+c.value%12; rWriteDelay(0,(8< Date: Fri, 19 Jan 2024 23:13:10 +0900 Subject: [PATCH 08/10] Add warning for MSM6295 maximum bankswitched sample length --- src/gui/sampleEdit.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index d00852c8b..0568ef7af 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -376,6 +376,9 @@ void FurnaceGUI::drawSampleEdit() { if (sample->loop) { SAMPLE_WARN(warnLoop,"MSM6295: samples can't loop"); } + if (sample->samples>64511) { + SAMPLE_WARN(warnLength,"MSM6295: maximum bankswitched sample length is 64511"); + } default: break; } From 8e0b64c5129cb708b4ccc50137b75415f48441bc Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 19 Jan 2024 23:30:09 +0900 Subject: [PATCH 09/10] Add preset variation with NMK112 --- src/engine/platform/msm6295.cpp | 3 ++ src/gui/presets.cpp | 83 +++++++++++++++++++++++++++++++++ src/gui/sysConf.cpp | 4 ++ 3 files changed, 90 insertions(+) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index 886d447fd..a8c30b3e1 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -524,6 +524,9 @@ void DivPlatformMSM6295::setFlags(const DivConfig& flags) { case 14: chipClock=COLOR_NTSC/3.0; break; + case 15: + chipClock=3200000; + break; default: chipClock=4000000/4; break; diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index d1a21cc26..e102eae4e 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -1547,6 +1547,89 @@ void FurnaceGUI::initSystemPresets() { ) // ^^ } ); + ENTRY( + "NMK 16-bit Arcade (w/NMK112 bankswitching)", { + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=5"), // 1.5MHz; optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=2\n" + "rateSel=true\n" + "isBanked=true\n" + ), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=2\n" + "rateSel=true\n" + "isBanked=true\n" + ) // ^^ + } + ); + ENTRY( + "NMK 16-bit Arcade (w/NMK112 bankswitching, extended channel 3)", { + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=5"), // 1.5MHz; optional + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=2\n" + "rateSel=true\n" + "isBanked=true\n" + ), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=2\n" + "rateSel=true\n" + "isBanked=true\n" + ) // ^^ + } + ); + ENTRY( + "Atlus Power Instinct 2", { + CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=13\n" + "rateSel=true\n" + "isBanked=true\n" + ), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=13\n" + "rateSel=true\n" + "isBanked=true\n" + ) // ^^ + } + ); + ENTRY( + "Atlus Power Instinct 2 (extended channel 3)", { + CH(DIV_SYSTEM_YM2203_EXT, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=13\n" + "rateSel=true\n" + "isBanked=true\n" + ), // 3MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=13\n" + "rateSel=true\n" + "isBanked=true\n" + ) // ^^ + } + ); + ENTRY( + "Raizing/Eighting Battle Garegga", { + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=8\n" + "isBanked=true\n" + ) // 2MHz + } + ); + ENTRY( + "Raizing/Eighting Batrider", { + CH(DIV_SYSTEM_YM2151, 1.0f, 0, "clockSel=2"), // 4MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=15\n" + "isBanked=true\n" + ), // 3.2MHz + CH(DIV_SYSTEM_MSM6295, 1.0f, 0, + "clockSel=15\n" + "rateSel=true\n" + "isBanked=true\n" + ) // 3.2MHz + } + ); ENTRY( "Kaneko DJ Boy", { CH(DIV_SYSTEM_YM2203, 1.0f, 0, "clockSel=3"), // 3MHz diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index d3070e2e3..6c2f99868 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -1523,6 +1523,10 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl clockSel=13; altered=true; } + if (ImGui::RadioButton("3.2MHz",clockSel==15)) { + clockSel=15; + altered=true; + } if (ImGui::RadioButton("3.58MHz",clockSel==4)) { clockSel=4; altered=true; From 6917c54eef5ec050ba0ccc8d7b539ef1b0eef74b Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 25 Jan 2024 21:03:49 +0900 Subject: [PATCH 10/10] Byte to nibble --- src/gui/sampleEdit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 0568ef7af..6a3a666ee 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -376,8 +376,8 @@ void FurnaceGUI::drawSampleEdit() { if (sample->loop) { SAMPLE_WARN(warnLoop,"MSM6295: samples can't loop"); } - if (sample->samples>64511) { - SAMPLE_WARN(warnLength,"MSM6295: maximum bankswitched sample length is 64511"); + if (sample->samples>129024) { + SAMPLE_WARN(warnLength,"MSM6295: maximum bankswitched sample length is 129024"); } default: break;