From 2a9749b1e2c6cf12e3b414aa9142c6091deacfdd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 3 Mar 2024 21:18:50 -0500 Subject: [PATCH 001/134] initialize --- src/engine/dispatch.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 7808806ab..55756767a 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -456,6 +456,18 @@ struct DivMemoryEntry { String name; int asset; size_t begin, end; + DivMemoryEntry(DivMemoryEntryType t, String n, int a, size_t b, size_t e): + type(t), + name(n), + asset(a), + begin(b), + end(e) {} + DivMemoryEntry(): + type(DIV_MEMORY_FREE), + name(""), + asset(-1), + begin(0), + end(0) {} }; struct DivMemoryComposition { @@ -463,6 +475,10 @@ struct DivMemoryComposition { String name; size_t capacity; size_t used; + DivMemoryComposition(): + name(""), + capacity(0), + used(0) {} }; class DivEngine; From 06c0d9d510fb8587ad95d98f9f6ededd69f1fd33 Mon Sep 17 00:00:00 2001 From: OctoKing314 <162057087+OctoKing314@users.noreply.github.com> Date: Sun, 3 Mar 2024 23:27:47 -0900 Subject: [PATCH 002/134] Add files via upload (#1782) Fixed title in tracker --- demos/misc/Galactic_Melody.fur | Bin 0 -> 1848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/misc/Galactic_Melody.fur diff --git a/demos/misc/Galactic_Melody.fur b/demos/misc/Galactic_Melody.fur new file mode 100644 index 0000000000000000000000000000000000000000..cf7e2bbc6a4381712bcab629d97820a55bfba90a GIT binary patch literal 1848 zcmV-82gmq$oXuEWXdG1(J~MZB?#%v8+B7!lqFq!3l?wJr5p7d#C1SUsMyb%E>t?f? zzfRoUHpWW3(-<&nA4Cxf`XaPX`XH?ZUqnTH6GZzW2wen0@WuKd)tB|VXMXmkwrLt0 z>g;}d&pG#;bMHCl-a9k9W!Itl!BV+WnD#~wO;xshPDBOjUPHxQdj=99gfNI^c5J7+ zDAAMVzU{zyTK?L8jq4ibH~o6NG*v1$$IFG?l__s@jz&r|m8Y8C!3z3*dX!AlP+Eo& z=^Ms8vh^#lBT4iXu)`wy0Qd`dLlRv8hHawLK%YZ&2e2Rb6xfs^dI|UzxBy%POeDJ( zcpmr&_#4=lAvy*80c^_>y$SpP4CILJ1s(>9z;nQ9;2iJ`a31&t_!GFzC3+9|2Dk)l z?IEfHCxLUokHD^V7z>yHjsR~0=YZdU?dys50%hPe!0IL10Ne>&1U}n7>~3t|HX zHeznTATS2ZZdBp#7X4pyHrQ zgUwQXyzoM)(bzKHsL}4hhv1K#PDiE1b+g$_%5h}U2n3WfC?MQW;`S=y3o^dEMAR8B zLbS7}2HDGlJcvOoYSzXNR^j_W)W7c2qPB}(X_KYA(8I2iRb^@8KM_3=}+#%ZahWQ|1r_`b40&au>;S9 zv58;?hvOMYs*M+Fr6#7ZUriwyP9c>v*KG8Cab`0?W(%X0snXnK`IW2A@18iiUh-y3 zmwhqJ-P$mjC??sP36_T1%u>4U=FQu-=?miZ*li{#TcKPp@sgWV{x*c`DVNQp(<#Tc zrIk!3)G@VYiF`7iQIe)ArO`NpK_HoAwAlYOuF=z7{$bRez~{JDoW_fXO7%*iS+7jP z^%KhVdg?}rASEA$nQYFDV!Z$A)pDb1xq7vVaS%4Ck-RAngFUdK!Qx$P^u`Mz@LG+% z_Gm{$6v|^O^S-jfVt8<*Xhp|gM{)Ou$1;f%V&N+A#Xgf54O7u<_%sDK2-V@UQiEHi z6e*J?_gARL&YxxH;s!f!FwX-#!vo-;md8w2G_005W}Uny?&xV0*0U0!o$h85AXe0{v;OoSED zvwVF#JL5+|^<*hMa(z)I-#F_FkFHKGTxpd&!fvn&mNmVW7v4FB+Br2x+e?O2d&$xE zlA$(n&CvwBmmDpm^nVS>4i8c?&T707^L$|A)=b@5n5rnPq$WUO#nC`eV1Y`}E6GK1 z1n9O4X#LRdVb+89&1LDfI=-k%UrYd=^z&ueqJK#`1PMWc>`Tg5p%ZhW0ZE;8RNtg* zwXg_dts1BamU)s#=QjdV9aT-aC}x2p((g}V+&xC_1I!7Tc}FS$e?c)c!h1=?*F;dpCDC}<8ndFOVtuuw%o#&>UccP z+9&cY_J54I#r#p`=3sPGs#cp|`dY))Fx*&R(Z?1UF5>%Q9;G=B%m?+$b7z(d`XORH zn)IQDX##VBN`+N$ym3`-ROS5qG%DmPngY7JHB7un%Z8h;sT&rij4S{Yxc2`zXXjd(2Xn5 zfiu#b266Ud&P^w)g*BkoVi4A?EZC%K?<@)r=(Y=JwVk%{ChasUe3sHq8__*ozGfb$ zOTK2b)NcZg^OH_<)EXnRU_!F z#%w2Gai>yQY$*<{_R9n8;{jy2j&HnwKG=kiO^aWt}4c literal 0 HcmV?d00001 From 7a41461883295bd3371a1c5d201be8c6f34c2e43 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 4 Mar 2024 19:50:15 -0500 Subject: [PATCH 003/134] memory composition, part 1 --- src/engine/platform/snes.cpp | 3 +++ src/gui/editControls.cpp | 4 ++++ src/gui/gui.h | 20 ++++++++++++++++++++ src/gui/guiConst.cpp | 20 ++++++++++++++++++++ src/gui/memory.cpp | 30 +++++++++++++++++++++++++++++- 5 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index ef1068c3f..90069ebf3 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -971,6 +971,7 @@ void DivPlatformSNES::renderSamples(int sysID) { if (s->loop) { copyOfSampleMem[memPos+actualLength-9]|=3; } + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength)); memPos+=actualLength; } if (actualLength -#include +#include "imgui.h" +#include "imgui_internal.h" void FurnaceGUI::drawMemory() { if (nextWindow==GUI_WINDOW_MEMORY) { @@ -29,6 +30,10 @@ void FurnaceGUI::drawMemory() { } if (!memoryOpen) return; if (ImGui::Begin("Memory Composition",&memoryOpen,globalWinFlags)) { + ImDrawList* dl=ImGui::GetWindowDrawList(); + ImGuiWindow* window=ImGui::GetCurrentWindow(); + char tempID[1024]; + for (int i=0; isong.systemLen; i++) { DivDispatch* dispatch=e->getDispatch(i); for (int j=0; j<4; j++) { @@ -36,6 +41,29 @@ void FurnaceGUI::drawMemory() { if (mc==NULL) break; ImGui::Text("%s: %s",e->getSystemName(e->song.system[i]),mc->name.c_str()); + ImGui::SameLine(); + ImGui::Text("%d/%d",(int)mc->used,(int)mc->capacity); + + ImVec2 size=ImVec2(ImGui::GetContentRegionAvail().x,48.0f*dpiScale); + ImVec2 minArea=window->DC.CursorPos; + ImVec2 maxArea=ImVec2( + minArea.x+size.x, + minArea.y+size.y + ); + ImRect rect=ImRect(minArea,maxArea); + ImGuiStyle& style=ImGui::GetStyle(); + ImGui::ItemSize(size,style.FramePadding.y); + snprintf(tempID,1023,"MC%d_%d",i,j); + if (ImGui::ItemAdd(rect,ImGui::GetID(tempID))) { + dl->AddRectFilled(rect.Min,rect.Max,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_BG])); + + if (mc->capacity>0) for (const DivMemoryEntry& k: mc->entries) { + ImVec2 pos1=ImLerp(rect.Min,rect.Max,ImVec2((double)k.begin/(double)mc->capacity,0.0f)); + ImVec2 pos2=ImLerp(rect.Min,rect.Max,ImVec2((double)k.end/(double)mc->capacity,1.0f)); + + dl->AddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_FREE+(int)k.type])); + } + } } } } From 2d48390eab2b93cd8a554e1cc3bc40f309a17ff6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 5 Mar 2024 03:38:55 -0500 Subject: [PATCH 004/134] memory composition, part 2 --- src/engine/platform/snes.cpp | 16 +++++++++++- src/gui/guiConst.cpp | 14 +++++------ src/gui/memory.cpp | 48 ++++++++++++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 10 deletions(-) diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index 90069ebf3..b97895659 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -827,6 +827,13 @@ void DivPlatformSNES::initEcho() { rWrite(0x7d,0); rWrite(0x6d,0xff); } + + for (DivMemoryEntry& i: memCompo.entries) { + if (i.type==DIV_MEMORY_ECHO) { + i.begin=(65536-echoDelay*2048); + } + } + memCompo.used=sampleMemLen+echoDelay*2048; } void DivPlatformSNES::reset() { @@ -953,6 +960,10 @@ void DivPlatformSNES::renderSamples(int sysID) { memCompo=DivMemoryComposition(); memCompo.name="SPC/DSP Memory"; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_RESERVED,"State",-1,0,sampleTableBase)); + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_RESERVED,"Sample Directory",-1,sampleTableBase,sampleTableBase+8*4)); + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_WAVE_RAM,"Wave RAM",-1,sampleTableBase+8*4,sampleTableBase+8*4+8*9*16)); + // skip past sample table and wavetable buffer size_t memPos=sampleTableBase+8*4+8*9*16; for (int i=0; isong.sampleLen; i++) { @@ -983,8 +994,11 @@ void DivPlatformSNES::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleMemLen=memPos; + + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_ECHO,"Echo Buffer",-1,(65536-echoDelay*2048),65536)); + memCompo.capacity=65536; - memCompo.used=sampleMemLen; + memCompo.used=sampleMemLen+echoDelay*2048; memcpy(sampleMem,copyOfSampleMem,65536); } diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 36355a4b5..49bd19cbd 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -1107,16 +1107,10 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_PATCHBAY_CONNECTION_BG,"",ImVec4(0.1f,0.25f,0.3f,1.0f)), D(GUI_COLOR_PATCHBAY_CONNECTION_HI,"",ImVec4(0.2f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_LOGLEVEL_ERROR,"",ImVec4(1.0f,0.2f,0.2f,1.0f)), - D(GUI_COLOR_LOGLEVEL_WARNING,"",ImVec4(1.0f,1.0f,0.2f,1.0f)), - D(GUI_COLOR_LOGLEVEL_INFO,"",ImVec4(0.4f,1.0f,0.4f,1.0f)), - D(GUI_COLOR_LOGLEVEL_DEBUG,"",ImVec4(0.3f,0.5f,1.0f,1.0f)), - D(GUI_COLOR_LOGLEVEL_TRACE,"",ImVec4(0.8f,0.8f,0.8f,1.0f)), - D(GUI_COLOR_MEMORY_BG,"",ImVec4(0.12f,0.12f,0.12f,1.0f)), D(GUI_COLOR_MEMORY_FREE,"",ImVec4(0.25f,0.25f,0.25f,1.0f)), D(GUI_COLOR_MEMORY_PADDING,"",ImVec4(0.25f,0.25f,0.25f,1.0f)), - D(GUI_COLOR_MEMORY_RESERVED,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_RESERVED,"",ImVec4(0.5f,0.5f,0.6f,1.0f)), D(GUI_COLOR_MEMORY_SAMPLE,"",ImVec4(1.0f,1.0f,0.2f,1.0f)), D(GUI_COLOR_MEMORY_SAMPLE_ALT1,"",ImVec4(0.5f,1.0f,0.2f,1.0f)), D(GUI_COLOR_MEMORY_SAMPLE_ALT2,"",ImVec4(0.2f,1.0f,0.2f,1.0f)), @@ -1133,6 +1127,12 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_MEMORY_BANK6,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), D(GUI_COLOR_MEMORY_BANK7,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_LOGLEVEL_ERROR,"",ImVec4(1.0f,0.2f,0.2f,1.0f)), + D(GUI_COLOR_LOGLEVEL_WARNING,"",ImVec4(1.0f,1.0f,0.2f,1.0f)), + D(GUI_COLOR_LOGLEVEL_INFO,"",ImVec4(0.4f,1.0f,0.4f,1.0f)), + D(GUI_COLOR_LOGLEVEL_DEBUG,"",ImVec4(0.3f,0.5f,1.0f,1.0f)), + D(GUI_COLOR_LOGLEVEL_TRACE,"",ImVec4(0.8f,0.8f,0.8f,1.0f)), + D(GUI_COLOR_EE_VALUE,"",ImVec4(0.0f,1.0f,1.0f,1.0f)), D(GUI_COLOR_PLAYBACK_STAT,"",ImVec4(0.6f,0.6f,0.6f,1.0f)), }; diff --git a/src/gui/memory.cpp b/src/gui/memory.cpp index 161350057..5bbbe8562 100644 --- a/src/gui/memory.cpp +++ b/src/gui/memory.cpp @@ -22,6 +22,9 @@ #include "imgui.h" #include "imgui_internal.h" +#define CENTER_TEXT(text) \ + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+0.5*(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize(text).x)); + void FurnaceGUI::drawMemory() { if (nextWindow==GUI_WINDOW_MEMORY) { memoryOpen=true; @@ -33,18 +36,20 @@ void FurnaceGUI::drawMemory() { ImDrawList* dl=ImGui::GetWindowDrawList(); ImGuiWindow* window=ImGui::GetCurrentWindow(); char tempID[1024]; + bool have=false; for (int i=0; isong.systemLen; i++) { DivDispatch* dispatch=e->getDispatch(i); for (int j=0; j<4; j++) { const DivMemoryComposition* mc=dispatch->getMemCompo(j); if (mc==NULL) break; + have=true; ImGui::Text("%s: %s",e->getSystemName(e->song.system[i]),mc->name.c_str()); ImGui::SameLine(); - ImGui::Text("%d/%d",(int)mc->used,(int)mc->capacity); + ImGui::Text("%d/%d (%.1f%%)",(int)mc->used,(int)mc->capacity,100.0*(double)mc->used/(double)mc->capacity); - ImVec2 size=ImVec2(ImGui::GetContentRegionAvail().x,48.0f*dpiScale); + ImVec2 size=ImVec2(ImGui::GetContentRegionAvail().x,36.0f*dpiScale); ImVec2 minArea=window->DC.CursorPos; ImVec2 maxArea=ImVec2( minArea.x+size.x, @@ -57,15 +62,54 @@ void FurnaceGUI::drawMemory() { if (ImGui::ItemAdd(rect,ImGui::GetID(tempID))) { dl->AddRectFilled(rect.Min,rect.Max,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_BG])); + int curHover=-1; + int kIndex=0; if (mc->capacity>0) for (const DivMemoryEntry& k: mc->entries) { ImVec2 pos1=ImLerp(rect.Min,rect.Max,ImVec2((double)k.begin/(double)mc->capacity,0.0f)); ImVec2 pos2=ImLerp(rect.Min,rect.Max,ImVec2((double)k.end/(double)mc->capacity,1.0f)); + ImVec2 linePos=pos1; + linePos.y=rect.Max.y; dl->AddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_FREE+(int)k.type])); + dl->AddLine(pos1,linePos,ImGui::GetColorU32(ImGuiCol_Border),dpiScale); + + if (ImGui::GetMousePos().x>=pos1.x && ImGui::GetMousePos().x<=pos2.x) { + curHover=kIndex; + } + kIndex++; + } + + if (ImGui::ItemHoverable(rect,ImGui::GetID(tempID),0)) { + if (curHover>=0 && curHover<(int)mc->entries.size()) { + const DivMemoryEntry& entry=mc->entries[curHover]; + if (ImGui::BeginTooltip()) { + switch (entry.type) { + case DIV_MEMORY_SAMPLE: { + DivSample* sample=e->getSample(entry.asset); + ImGui::Text("%d: %s",curHover,sample->name.c_str()); + ImGui::Text("%d-%d ($%x-$%x): %d bytes ($%x)",(int)entry.begin,(int)entry.end-1,(int)entry.begin,(int)entry.end-1,(int)(entry.end-entry.begin),(int)(entry.end-entry.begin)); + ImGui::Text("click to open sample editor"); + break; + } + default: + ImGui::Text("%d: %s",curHover,entry.name.c_str()); + ImGui::Text("%d-%d ($%x-$%x): %d bytes ($%x)",(int)entry.begin,(int)entry.end-1,(int)entry.begin,(int)entry.end-1,(int)(entry.end-entry.begin),(int)(entry.end-entry.begin)); + break; + } + + ImGui::EndTooltip(); + } + } } } } } + + if (!have) { + ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeight()+ImGui::GetStyle().ItemSpacing.y)*0.5f); + CENTER_TEXT("no chips with memory"); + ImGui::Text("no chips with memory"); + } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_MEMORY; ImGui::End(); From a200d464a6599e00434acda1dd5b36149faaca00 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 5 Mar 2024 05:08:42 -0500 Subject: [PATCH 005/134] AY: fix clockSel on non-YM2149 --- src/engine/platform/ay.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index a15d04f27..f50234087 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -818,7 +818,6 @@ void DivPlatformAY8910::setFlags(const DivConfig& flags) { clockSel=false; dacRate=chipClock/dacRateDiv; } else { - clockSel=flags.getBool("halfClock",false); switch (flags.getInt("clockSel",0)) { case 1: chipClock=COLOR_PAL*2.0/5.0; @@ -883,21 +882,25 @@ void DivPlatformAY8910::setFlags(const DivConfig& flags) { ay=new ym2149_device(rate,clockSel); sunsoft=false; intellivision=false; + clockSel=flags.getBool("halfClock",false); break; case 2: ay=new sunsoft_5b_sound_device(rate); sunsoft=true; intellivision=false; + clockSel=false; break; case 3: ay=new ay8914_device(rate); sunsoft=false; intellivision=true; + clockSel=false; break; default: ay=new ay8910_device(rate); sunsoft=false; intellivision=false; + clockSel=false; break; } ay->device_start(); From 92ec6f66512d8096170605d1b506723516749a70 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 5 Mar 2024 18:55:18 -0500 Subject: [PATCH 006/134] memory composition, part 3 --- src/engine/platform/amiga.cpp | 15 +++++++++++++++ src/engine/platform/amiga.h | 3 +++ src/engine/platform/c140.cpp | 13 +++++++++++++ src/engine/platform/c140.h | 2 ++ src/engine/platform/es5506.cpp | 5 +++++ src/engine/platform/es5506.h | 2 ++ src/engine/platform/ga20.cpp | 5 +++++ src/engine/platform/ga20.h | 2 ++ src/engine/platform/k007232.cpp | 5 +++++ src/engine/platform/k007232.h | 2 ++ src/engine/platform/k053260.cpp | 5 +++++ src/engine/platform/k053260.h | 2 ++ src/engine/platform/msm6295.cpp | 5 +++++ src/engine/platform/msm6295.h | 3 +++ src/engine/platform/nes.cpp | 5 +++++ src/engine/platform/nes.h | 2 ++ src/engine/platform/opl.cpp | 6 ++++++ src/engine/platform/opl.h | 3 +++ src/engine/platform/qsound.cpp | 5 +++++ src/engine/platform/qsound.h | 3 +++ src/engine/platform/rf5c68.cpp | 5 +++++ src/engine/platform/rf5c68.h | 2 ++ src/engine/platform/segapcm.cpp | 5 +++++ src/engine/platform/segapcm.h | 3 +++ src/engine/platform/su.cpp | 5 +++++ src/engine/platform/su.h | 2 ++ src/engine/platform/x1_010.cpp | 5 +++++ src/engine/platform/x1_010.h | 3 +++ src/engine/platform/ym2608.cpp | 5 +++++ src/engine/platform/ym2608.h | 3 +++ src/engine/platform/ym2610shared.h | 9 +++++++++ src/engine/platform/ymz280b.cpp | 5 +++++ src/engine/platform/ymz280b.h | 2 ++ src/gui/guiConst.cpp | 16 ++++++++-------- src/gui/memory.cpp | 13 ++++++++++++- src/gui/settings.cpp | 23 +++++++++++++++++++++++ 36 files changed, 190 insertions(+), 9 deletions(-) diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index 9555019bd..905fcd787 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -922,11 +922,22 @@ bool DivPlatformAmiga::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformAmiga::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformAmiga::renderSamples(int sysID) { memset(sampleMem,0,2097152); memset(sampleOff,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Chip Memory"; + + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_WAVE_RAM,"Wave RAM",-1,0,1024)); + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_RESERVED,"End of Sample",-1,1024,1026)); + // first 1024 bytes reserved for wavetable // the next 2 bytes are reserved for end of sample size_t memPos=1026; @@ -947,6 +958,7 @@ void DivPlatformAmiga::renderSamples(int sysID) { if (actualLength>0) { sampleOff[i]=memPos; memcpy(&sampleMem[memPos],s->data8,actualLength); + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength)); memPos+=actualLength; } // align memPos to short @@ -954,6 +966,9 @@ void DivPlatformAmiga::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleMemLen=memPos; + + memCompo.capacity=1<song.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -658,6 +666,7 @@ void DivPlatformC140::renderSamples(int sysID) { } sampleOff[i]=memPos>>1; sampleLoaded[i]=true; + memCompo.entries.push_back(DivMemoryEntry((DivMemoryEntryType)(DIV_MEMORY_BANK0+((memPos>>17)&3)),"Sample",i,memPos,memPos+length)); memPos+=length; } else { // C140 (16-bit) unsigned int length=s->length16+4; @@ -704,10 +713,14 @@ void DivPlatformC140::renderSamples(int sysID) { } sampleOff[i]=memPos>>1; sampleLoaded[i]=true; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+length)); memPos+=length; } } sampleMemLen=memPos+256; + + memCompo.used=sampleMemLen; + memCompo.capacity=getSampleMemCapacity(0); } void DivPlatformC140::set219(bool is_219) { diff --git a/src/engine/platform/c140.h b/src/engine/platform/c140.h index ecd8bc239..fb385c5eb 100644 --- a/src/engine/platform/c140.h +++ b/src/engine/platform/c140.h @@ -74,6 +74,7 @@ class DivPlatformC140: public DivDispatch { FixedQueue writes; struct c140_t c140; struct c219_t c219; + DivMemoryComposition memCompo; unsigned char regPool[512]; char bankLabel[4][4]; friend void putDispatchChip(void*,int); @@ -108,6 +109,7 @@ class DivPlatformC140: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int getClockRangeMin(); int getClockRangeMax(); diff --git a/src/engine/platform/es5506.cpp b/src/engine/platform/es5506.cpp index 5a7c01c08..7b3b04d21 100644 --- a/src/engine/platform/es5506.cpp +++ b/src/engine/platform/es5506.cpp @@ -1203,6 +1203,11 @@ bool DivPlatformES5506::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformES5506::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformES5506::renderSamples(int sysID) { memset(sampleMem,0,getSampleMemCapacity()); memset(sampleOffES5506,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/es5506.h b/src/engine/platform/es5506.h index b51ee9f2c..04ed8beae 100644 --- a/src/engine/platform/es5506.h +++ b/src/engine/platform/es5506.h @@ -278,6 +278,7 @@ class DivPlatformES5506: public DivDispatch, public es550x_intf { unsigned char initChanMax, chanMax; es5506_core es5506; + DivMemoryComposition memCompo; unsigned char regPool[4*16*128]; // 7 bit page x 16 registers per page x 32 bit per registers friend void putDispatchChip(void*,int); @@ -315,6 +316,7 @@ class DivPlatformES5506: public DivDispatch, public es550x_intf { virtual size_t getSampleMemCapacity(int index = 0) override; virtual size_t getSampleMemUsage(int index = 0) override; virtual bool isSampleLoaded(int index, int sample) override; + virtual const DivMemoryComposition* getMemCompo(int index) override; virtual void renderSamples(int sysID) override; virtual const char** getRegisterSheet() override; virtual int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) override; diff --git a/src/engine/platform/ga20.cpp b/src/engine/platform/ga20.cpp index 2098f140b..ae03d9e5b 100644 --- a/src/engine/platform/ga20.cpp +++ b/src/engine/platform/ga20.cpp @@ -441,6 +441,11 @@ bool DivPlatformGA20::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformGA20::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformGA20::renderSamples(int sysID) { memset(sampleMem,0x00,getSampleMemCapacity()); memset(sampleOffGA20,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/ga20.h b/src/engine/platform/ga20.h index 995a7cc15..51617849f 100644 --- a/src/engine/platform/ga20.h +++ b/src/engine/platform/ga20.h @@ -66,6 +66,7 @@ class DivPlatformGA20: public DivDispatch, public iremga20_intf { unsigned char* sampleMem; size_t sampleMemLen; iremga20_device ga20; + DivMemoryComposition memCompo; unsigned char regPool[32]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -97,6 +98,7 @@ class DivPlatformGA20: public DivDispatch, public iremga20_intf { virtual size_t getSampleMemCapacity(int index = 0) override; virtual size_t getSampleMemUsage(int index = 0) override; virtual bool isSampleLoaded(int index, int sample) override; + virtual const DivMemoryComposition* getMemCompo(int index) override; virtual void renderSamples(int chipID) override; virtual int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) override; virtual void quit() override; diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index 3f3ebc6d9..2eb357195 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -528,6 +528,11 @@ bool DivPlatformK007232::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformK007232::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformK007232::renderSamples(int sysID) { memset(sampleMem,0xc0,getSampleMemCapacity()); memset(sampleOffK007232,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/k007232.h b/src/engine/platform/k007232.h index 379d41106..1bc54fb48 100644 --- a/src/engine/platform/k007232.h +++ b/src/engine/platform/k007232.h @@ -74,6 +74,7 @@ class DivPlatformK007232: public DivDispatch, public k007232_intf { unsigned char* sampleMem; size_t sampleMemLen; k007232_core k007232; + DivMemoryComposition memCompo; unsigned char regPool[20]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -105,6 +106,7 @@ class DivPlatformK007232: public DivDispatch, public k007232_intf { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index 68704c9ee..180a531f5 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -466,6 +466,11 @@ bool DivPlatformK053260::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformK053260::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformK053260::renderSamples(int sysID) { memset(sampleMem,0,getSampleMemCapacity()); memset(sampleOffK053260,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/k053260.h b/src/engine/platform/k053260.h index 4f1afea2d..8001d7eeb 100644 --- a/src/engine/platform/k053260.h +++ b/src/engine/platform/k053260.h @@ -52,6 +52,7 @@ class DivPlatformK053260: public DivDispatch, public k053260_intf { unsigned char* sampleMem; size_t sampleMemLen; k053260_core k053260; + DivMemoryComposition memCompo; unsigned char regPool[64]; void updatePanning(unsigned char mask); @@ -84,6 +85,7 @@ class DivPlatformK053260: public DivDispatch, public k053260_intf { virtual size_t getSampleMemCapacity(int index = 0) override; virtual size_t getSampleMemUsage(int index = 0) override; virtual bool isSampleLoaded(int index, int sample) override; + virtual const DivMemoryComposition* getMemCompo(int index) override; virtual void renderSamples(int chipID) override; virtual int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) override; virtual void quit() override; diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index a8c30b3e1..a19e37914 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -370,6 +370,11 @@ bool DivPlatformMSM6295::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformMSM6295::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformMSM6295::renderSamples(int sysID) { unsigned int sampleOffVOX[256]; diff --git a/src/engine/platform/msm6295.h b/src/engine/platform/msm6295.h index 51e052a81..5664adb7d 100644 --- a/src/engine/platform/msm6295.h +++ b/src/engine/platform/msm6295.h @@ -69,6 +69,8 @@ class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { phrase(0), length(0) {} } bankedPhrase[256]; + + DivMemoryComposition memCompo; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -99,6 +101,7 @@ class DivPlatformMSM6295: public DivDispatch, public vgsound_emu_mem_intf { virtual size_t getSampleMemCapacity(int index) override; virtual size_t getSampleMemUsage(int index) override; virtual bool isSampleLoaded(int index, int sample) override; + virtual const DivMemoryComposition* getMemCompo(int index) override; virtual void renderSamples(int chipID) override; virtual int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) override; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 526944a3d..8a6b55bcd 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -839,6 +839,11 @@ bool DivPlatformNES::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformNES::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformNES::renderSamples(int sysID) { memset(dpcmMem,0,getSampleMemCapacity(0));\ memset(sampleLoaded,0,256*sizeof(bool)); diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index 43377fee2..a2c1ed8ab 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -67,6 +67,7 @@ class DivPlatformNES: public DivDispatch { xgm::NES_DMC* nes2_NP; unsigned char regPool[128]; unsigned int sampleOffDPCM[256]; + DivMemoryComposition memCompo; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -101,6 +102,7 @@ class DivPlatformNES: public DivDispatch { size_t getSampleMemCapacity(int index); size_t getSampleMemUsage(int index); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index d62161827..18d5525e5 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -2539,6 +2539,12 @@ bool DivPlatformOPL::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformOPL::getMemCompo(int index) { + if (adpcmChan<0) return NULL; + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformOPL::renderSamples(int sysID) { if (adpcmChan<0) return; memset(adpcmBMem,0,getSampleMemCapacity(0)); diff --git a/src/engine/platform/opl.h b/src/engine/platform/opl.h index 7beb3532d..5f2fd7d28 100644 --- a/src/engine/platform/opl.h +++ b/src/engine/platform/opl.h @@ -126,6 +126,8 @@ class DivPlatformOPL: public DivDispatch { fmopl2_t fm_lle2; fmopl3_t fm_lle3; + DivMemoryComposition memCompo; + int octave(int freq); int toFreq(int freq); double NOTE_ADPCMB(int note); @@ -174,6 +176,7 @@ class DivPlatformOPL: public DivDispatch { size_t getSampleMemCapacity(int index); size_t getSampleMemUsage(int index); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/qsound.cpp b/src/engine/platform/qsound.cpp index 152afb932..f0a3a1712 100644 --- a/src/engine/platform/qsound.cpp +++ b/src/engine/platform/qsound.cpp @@ -735,6 +735,11 @@ const char* DivPlatformQSound::getSampleMemName(int index) { return index == 0 ? "PCM" : index == 1 ? "ADPCM" : NULL; } +const DivMemoryComposition* DivPlatformQSound::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformQSound::renderSamples(int sysID) { memset(sampleMem,0,getSampleMemCapacity()); memset(sampleLoaded,0,256*sizeof(bool)); diff --git a/src/engine/platform/qsound.h b/src/engine/platform/qsound.h index 929411402..3d817606a 100644 --- a/src/engine/platform/qsound.h +++ b/src/engine/platform/qsound.h @@ -58,6 +58,8 @@ class DivPlatformQSound: public DivDispatch { unsigned int offPCM[256]; unsigned int offBS[256]; + DivMemoryComposition memCompo; + friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -89,6 +91,7 @@ class DivPlatformQSound: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/rf5c68.cpp b/src/engine/platform/rf5c68.cpp index 148df4c28..5bb70f026 100644 --- a/src/engine/platform/rf5c68.cpp +++ b/src/engine/platform/rf5c68.cpp @@ -415,6 +415,11 @@ bool DivPlatformRF5C68::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformRF5C68::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformRF5C68::renderSamples(int sysID) { memset(sampleMem,0,getSampleMemCapacity()); memset(sampleOffRFC,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/rf5c68.h b/src/engine/platform/rf5c68.h index 3ae081017..e87d1eb7c 100644 --- a/src/engine/platform/rf5c68.h +++ b/src/engine/platform/rf5c68.h @@ -50,6 +50,7 @@ class DivPlatformRF5C68: public DivDispatch { unsigned char* sampleMem; size_t sampleMemLen; rf5c68_device rf5c68; + DivMemoryComposition memCompo; unsigned char regPool[144]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -80,6 +81,7 @@ class DivPlatformRF5C68: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index 19ec2bbb7..439bfd154 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -479,6 +479,11 @@ void DivPlatformSegaPCM::reset() { } } +const DivMemoryComposition* DivPlatformSegaPCM::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformSegaPCM::renderSamples(int sysID) { size_t memPos=0; diff --git a/src/engine/platform/segapcm.h b/src/engine/platform/segapcm.h index f99da7317..1c117c266 100644 --- a/src/engine/platform/segapcm.h +++ b/src/engine/platform/segapcm.h @@ -80,6 +80,8 @@ class DivPlatformSegaPCM: public DivDispatch { unsigned int sampleOffSegaPCM[256]; unsigned char sampleEndSegaPCM[256]; bool sampleLoaded[256]; + + DivMemoryComposition memCompo; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -110,6 +112,7 @@ class DivPlatformSegaPCM: public DivDispatch { size_t getSampleMemCapacity(int index=0); size_t getSampleMemUsage(int index=0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformSegaPCM(); diff --git a/src/engine/platform/su.cpp b/src/engine/platform/su.cpp index 8a80ee7c2..83e268cfc 100644 --- a/src/engine/platform/su.cpp +++ b/src/engine/platform/su.cpp @@ -657,6 +657,11 @@ bool DivPlatformSoundUnit::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformSoundUnit::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformSoundUnit::renderSamples(int sysID) { memset(sampleMem,0,sampleMemSize?65536:8192); memset(sampleOffSU,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/su.h b/src/engine/platform/su.h index f39a59cc7..0456f42f7 100644 --- a/src/engine/platform/su.h +++ b/src/engine/platform/su.h @@ -99,6 +99,7 @@ class DivPlatformSoundUnit: public DivDispatch { unsigned char* sampleMem; size_t sampleMemLen; unsigned char regPool[128]; + DivMemoryComposition memCompo; double NOTE_SU(int ch, int note); void writeControl(int ch); void writeControlUpper(int ch); @@ -129,6 +130,7 @@ class DivPlatformSoundUnit: public DivDispatch { size_t getSampleMemCapacity(int index); size_t getSampleMemUsage(int index); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index 9ac523f6f..24ae09119 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -995,6 +995,11 @@ bool DivPlatformX1_010::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformX1_010::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformX1_010::renderSamples(int sysID) { memset(sampleMem,0,16777216); memset(sampleOffX1,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/x1_010.h b/src/engine/platform/x1_010.h index f4a815455..413aba3e8 100644 --- a/src/engine/platform/x1_010.h +++ b/src/engine/platform/x1_010.h @@ -119,6 +119,8 @@ class DivPlatformX1_010: public DivDispatch, public vgsound_emu_mem_intf { unsigned int sampleOffX1[256]; bool sampleLoaded[256]; + DivMemoryComposition memCompo; + unsigned char regPool[0x2000]; double NoteX1_010(int ch, int note); void updateWave(int ch); @@ -151,6 +153,7 @@ class DivPlatformX1_010: public DivDispatch, public vgsound_emu_mem_intf { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); const char** getRegisterSheet(); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 0a6168cd2..36f8c36d2 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1605,6 +1605,11 @@ bool DivPlatformYM2608::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformYM2608::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformYM2608::renderSamples(int sysID) { memset(adpcmBMem,0,getSampleMemCapacity(0)); memset(sampleOffB,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index 2b51da1d6..2e95ebcae 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -64,6 +64,8 @@ class DivPlatformYM2608: public DivPlatformOPN { bool extMode, noExtMacros; unsigned char prescale, nukedMult; + + DivMemoryComposition memCompo; double NOTE_OPNB(int ch, int note); double NOTE_ADPCMB(int note); @@ -100,6 +102,7 @@ class DivPlatformYM2608: public DivPlatformOPN { size_t getSampleMemCapacity(int index); size_t getSampleMemUsage(int index); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); void setFlags(const DivConfig& flags); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 0c96e5447..9a1d05ca7 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -73,6 +73,9 @@ class DivPlatformYM2610Base: public DivPlatformOPN { unsigned char writeADPCMAOff, writeADPCMAOn; int globalADPCMAVolume; + DivMemoryComposition memCompoA; + DivMemoryComposition memCompoB; + double NOTE_OPNB(int ch, int note) { if (ch>=adpcmBChanOffs) { // ADPCM return NOTE_ADPCMB(note); @@ -144,6 +147,12 @@ class DivPlatformYM2610Base: public DivPlatformOPN { if (sample<0 || sample>255) return false; return sampleLoaded[index][sample]; } + + const DivMemoryComposition* getMemCompo(int index) { + if (index==0) return &memCompoA; + if (index==1) return &memCompoB; + return NULL; + } void renderSamples(int sysID) { memset(adpcmAMem,0,getSampleMemCapacity(0)); diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index 878ed0f0d..ea7aec15a 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -442,6 +442,11 @@ bool DivPlatformYMZ280B::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformYMZ280B::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformYMZ280B::renderSamples(int sysID) { memset(sampleMem,0,getSampleMemCapacity()); memset(sampleOff,0,256*sizeof(unsigned int)); diff --git a/src/engine/platform/ymz280b.h b/src/engine/platform/ymz280b.h index 703cef6c8..abb16123a 100644 --- a/src/engine/platform/ymz280b.h +++ b/src/engine/platform/ymz280b.h @@ -50,6 +50,7 @@ class DivPlatformYMZ280B: public DivDispatch { unsigned char* sampleMem; size_t sampleMemLen; ymz280b_device ymz280b; + DivMemoryComposition memCompo; unsigned char regPool[256]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -80,6 +81,7 @@ class DivPlatformYMZ280B: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); void setFlags(const DivConfig& flags); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 49bd19cbd..b17688032 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -1118,14 +1118,14 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_MEMORY_WAVE_RAM,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_WAVE_STATIC,"",ImVec4(1.0f,0.3f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_ECHO,"",ImVec4(0.2f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK0,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK1,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK2,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK3,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK4,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK5,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK6,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), - D(GUI_COLOR_MEMORY_BANK7,"",ImVec4(1.0f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_BANK0,"",ImVec4(1.0f,0.1f,0.1f,1.0f)), + D(GUI_COLOR_MEMORY_BANK1,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), + D(GUI_COLOR_MEMORY_BANK2,"",ImVec4(1.0f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_MEMORY_BANK3,"",ImVec4(0.1f,1.0f,0.1f,1.0f)), + D(GUI_COLOR_MEMORY_BANK4,"",ImVec4(0.1f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_BANK5,"",ImVec4(0.1f,0.1f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_BANK6,"",ImVec4(0.5f,0.1f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_BANK7,"",ImVec4(1.0f,0.1f,1.0f,1.0f)), D(GUI_COLOR_LOGLEVEL_ERROR,"",ImVec4(1.0f,0.2f,0.2f,1.0f)), D(GUI_COLOR_LOGLEVEL_WARNING,"",ImVec4(1.0f,1.0f,0.2f,1.0f)), diff --git a/src/gui/memory.cpp b/src/gui/memory.cpp index 5bbbe8562..c98c3f127 100644 --- a/src/gui/memory.cpp +++ b/src/gui/memory.cpp @@ -84,9 +84,20 @@ void FurnaceGUI::drawMemory() { const DivMemoryEntry& entry=mc->entries[curHover]; if (ImGui::BeginTooltip()) { switch (entry.type) { - case DIV_MEMORY_SAMPLE: { + case DIV_MEMORY_SAMPLE: + case DIV_MEMORY_BANK0: + case DIV_MEMORY_BANK1: + case DIV_MEMORY_BANK2: + case DIV_MEMORY_BANK3: + case DIV_MEMORY_BANK4: + case DIV_MEMORY_BANK5: + case DIV_MEMORY_BANK6: + case DIV_MEMORY_BANK7: { DivSample* sample=e->getSample(entry.asset); ImGui::Text("%d: %s",curHover,sample->name.c_str()); + if ((int)entry.type>=(int)DIV_MEMORY_BANK0) { + ImGui::Text("bank %d",(int)entry.type-(int)DIV_MEMORY_BANK0); + } ImGui::Text("%d-%d ($%x-$%x): %d bytes ($%x)",(int)entry.begin,(int)entry.end-1,(int)entry.begin,(int)entry.end-1,(int)(entry.end-entry.begin),(int)(entry.end-entry.begin)); ImGui::Text("click to open sample editor"); break; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index cc9db0461..283862ee2 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3666,6 +3666,29 @@ void FurnaceGUI::drawSettings() { ImGui::TreePop(); } + if (ImGui::TreeNode("Memory Composition")) { + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BG,"Background"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_FREE,"Unknown"); + //UI_COLOR_CONFIG(GUI_COLOR_MEMORY_PADDING,""); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_RESERVED,"Reserved"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_SAMPLE,"Sample"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_SAMPLE_ALT1,"Sample (alternate 1)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_SAMPLE_ALT2,"Sample (alternate 2)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_SAMPLE_ALT3,"Sample (alternate 3)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_WAVE_RAM,"Wave RAM"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_WAVE_STATIC,"Wavetable (static)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_ECHO,"Echo buffer"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK0,"Sample (bank 0)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK1,"Sample (bank 1)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK2,"Sample (bank 2)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK3,"Sample (bank 3)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK4,"Sample (bank 4)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK5,"Sample (bank 5)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK6,"Sample (bank 6)"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK7,"Sample (bank 7)"); + + ImGui::TreePop(); + } if (ImGui::TreeNode("Log Viewer")) { UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_ERROR,"Log level: Error"); UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_WARNING,"Log level: Warning"); From 6763aa44a99cc14eafba1079774756d807a4c7eb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 5 Mar 2024 19:19:18 -0500 Subject: [PATCH 007/134] memory composition, part 4 --- src/engine/platform/es5506.cpp | 7 +++++++ src/engine/platform/ga20.cpp | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/es5506.cpp b/src/engine/platform/es5506.cpp index 7b3b04d21..2299752a6 100644 --- a/src/engine/platform/es5506.cpp +++ b/src/engine/platform/es5506.cpp @@ -1213,6 +1213,9 @@ void DivPlatformES5506::renderSamples(int sysID) { memset(sampleOffES5506,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample Memory"; + size_t memPos=128; // add silent at begin and end of each bank for reverse playback for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -1241,9 +1244,13 @@ void DivPlatformES5506::renderSamples(int sysID) { } sampleOffES5506[i]=memPos; sampleLoaded[i]=true; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+length)); memPos+=length; } sampleMemLen=memPos+256; + + memCompo.used=sampleMemLen; + memCompo.capacity=16777216; } int DivPlatformES5506::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/ga20.cpp b/src/engine/platform/ga20.cpp index ae03d9e5b..859c586bb 100644 --- a/src/engine/platform/ga20.cpp +++ b/src/engine/platform/ga20.cpp @@ -451,6 +451,9 @@ void DivPlatformGA20::renderSamples(int sysID) { memset(sampleOffGA20,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -463,6 +466,7 @@ void DivPlatformGA20::renderSamples(int sysID) { int actualLength=MIN((int)(getSampleMemCapacity()-memPos)-1,length); if (actualLength>0) { sampleOffGA20[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength+1)); for (int j=0; jdata8[j]))^0x80; @@ -478,10 +482,13 @@ void DivPlatformGA20::renderSamples(int sysID) { } else { sampleLoaded[i]=true; } - // allign to 16 byte + // align to 16 byte memPos=(memPos+0xf)&~0xf; } sampleMemLen=memPos; + + memCompo.used=sampleMemLen; + memCompo.capacity=1048576; } int DivPlatformGA20::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { From 0be58356450832496d5bc8660afe9f52724b7d4d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 6 Mar 2024 03:42:21 -0500 Subject: [PATCH 008/134] memory composition, part 5 almost there --- src/engine/platform/k007232.cpp | 7 +++++++ src/engine/platform/k053260.cpp | 8 ++++++++ src/engine/platform/msm6295.cpp | 10 ++++++++++ src/engine/platform/nes.cpp | 9 ++++++++- src/engine/platform/opl.cpp | 7 +++++++ src/engine/platform/qsound.cpp | 8 ++++++++ src/engine/platform/rf5c68.cpp | 7 +++++++ src/engine/platform/segapcm.cpp | 7 +++++++ src/engine/platform/su.cpp | 11 +++++++++++ src/engine/platform/x1_010.cpp | 7 +++++++ src/engine/platform/ym2608.cpp | 7 +++++++ src/engine/platform/ym2610shared.h | 14 ++++++++++++++ src/engine/platform/ymz280b.cpp | 7 +++++++ 13 files changed, 108 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index 2eb357195..5bd3dc47c 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -538,6 +538,9 @@ void DivPlatformK007232::renderSamples(int sysID) { memset(sampleOffK007232,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -556,6 +559,7 @@ void DivPlatformK007232::renderSamples(int sysID) { memPos=(memPos+0x1ffff)&0xfe0000; } sampleOffK007232[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength+1)); for (int j=0; jdata8[j])^0x80; @@ -573,6 +577,9 @@ void DivPlatformK007232::renderSamples(int sysID) { } } sampleMemLen=memPos; + + memCompo.used=sampleMemLen; + memCompo.capacity=16777216; } int DivPlatformK007232::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index 180a531f5..58ae1003e 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -476,6 +476,9 @@ void DivPlatformK053260::renderSamples(int sysID) { memset(sampleOffK053260,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=1; // for avoid silence for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -491,6 +494,7 @@ void DivPlatformK053260::renderSamples(int sysID) { actualLength=MIN((int)(getSampleMemCapacity()-memPos-1),length); if (actualLength>0) { sampleOffK053260[i]=memPos-1; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength+1)); for (int j=0; jdataK[j]; } @@ -501,6 +505,7 @@ void DivPlatformK053260::renderSamples(int sysID) { actualLength=MIN((int)(getSampleMemCapacity()-memPos-1),length); if (actualLength>0) { sampleOffK053260[i]=memPos-1; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength+1)); for (int j=0; jdata8[j]; } @@ -514,6 +519,9 @@ void DivPlatformK053260::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleMemLen=memPos; + + memCompo.capacity=2097152; + memCompo.used=sampleMemLen; } int DivPlatformK053260::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index a19e37914..916234f0e 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -386,6 +386,11 @@ void DivPlatformMSM6295::renderSamples(int sysID) { bankedPhrase[i].phrase=0; } + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_RESERVED,"Phrase Book",-1,0,128*8)); + // sample data size_t memPos=128*8; if (isBanked) { @@ -424,6 +429,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { bankedPhrase[i].bank=bankInd; bankedPhrase[i].phrase=phraseInd; bankedPhrase[i].length=paddedLen; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; phraseInd++; } @@ -465,6 +471,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffVOX[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } adpcmMemLen=memPos+256; @@ -481,6 +488,9 @@ void DivPlatformMSM6295::renderSamples(int sysID) { adpcmMem[5+i*8]=(endPos)&0xff; } } + + memCompo.capacity=getSampleMemCapacity(0); + memCompo.used=adpcmMemLen; } void DivPlatformMSM6295::setFlags(const DivConfig& flags) { diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 8a6b55bcd..c5993c624 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -845,9 +845,12 @@ const DivMemoryComposition* DivPlatformNES::getMemCompo(int index) { } void DivPlatformNES::renderSamples(int sysID) { - memset(dpcmMem,0,getSampleMemCapacity(0));\ + memset(dpcmMem,0,getSampleMemCapacity(0)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="DPCM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -876,9 +879,13 @@ void DivPlatformNES::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffDPCM[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } dpcmMemLen=memPos; + + memCompo.capacity=262144; + memCompo.used=dpcmMemLen; } int DivPlatformNES::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 18d5525e5..e01d4d264 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -2551,6 +2551,9 @@ void DivPlatformOPL::renderSamples(int sysID) { memset(sampleOffB,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample Memory"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -2575,9 +2578,13 @@ void DivPlatformOPL::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffB[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } adpcmBMemLen=memPos+256; + + memCompo.used=adpcmBMemLen; + memCompo.capacity=getSampleMemCapacity(0); } int DivPlatformOPL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/qsound.cpp b/src/engine/platform/qsound.cpp index f0a3a1712..cdd8fc6b2 100644 --- a/src/engine/platform/qsound.cpp +++ b/src/engine/platform/qsound.cpp @@ -745,6 +745,9 @@ void DivPlatformQSound::renderSamples(int sysID) { memset(sampleLoaded,0,256*sizeof(bool)); memset(sampleLoadedBS,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -776,6 +779,7 @@ void DivPlatformQSound::renderSamples(int sysID) { sampleLoaded[i]=true; } offPCM[i]=memPos^0x8000; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,memPos,memPos+length)); memPos+=length+16; } sampleMemLen=memPos+256; @@ -813,9 +817,13 @@ void DivPlatformQSound::renderSamples(int sysID) { sampleLoadedBS[i]=true; } offBS[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE_ALT1,"ADPCM",i,memPos,memPos+length)); memPos+=length+16; } sampleMemLenBS=memPos+256; + + memCompo.used=sampleMemLenBS; + memCompo.capacity=getSampleMemCapacity(0); } int DivPlatformQSound::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/rf5c68.cpp b/src/engine/platform/rf5c68.cpp index 5bb70f026..e8887f156 100644 --- a/src/engine/platform/rf5c68.cpp +++ b/src/engine/platform/rf5c68.cpp @@ -425,6 +425,9 @@ void DivPlatformRF5C68::renderSamples(int sysID) { memset(sampleOffRFC,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample Memory"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -437,6 +440,7 @@ void DivPlatformRF5C68::renderSamples(int sysID) { int actualLength=MIN((int)(getSampleMemCapacity()-memPos)-32,length); if (actualLength>0) { sampleOffRFC[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength+32)); for (int j=0; jdata8[j]; @@ -456,6 +460,9 @@ void DivPlatformRF5C68::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleMemLen=memPos; + + memCompo.used=sampleMemLen; + memCompo.capacity=getSampleMemCapacity(0); } int DivPlatformRF5C68::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index 439bfd154..3f8598c43 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -491,6 +491,9 @@ void DivPlatformSegaPCM::renderSamples(int sysID) { memset(sampleLoaded,0,256*sizeof(bool)); memset(sampleOffSegaPCM,0,256*sizeof(unsigned int)); memset(sampleEndSegaPCM,0,256); + + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; for (int i=0; isong.sampleLen; i++) { DivSample* sample=parent->getSample(i); @@ -506,6 +509,7 @@ void DivPlatformSegaPCM::renderSamples(int sysID) { sampleLoaded[i]=true; if (memPos>=2097152) break; sampleOffSegaPCM[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+alignedSize)); for (unsigned int j=0; j=sample->samples) { sampleMem[memPos++]=0; @@ -519,6 +523,9 @@ void DivPlatformSegaPCM::renderSamples(int sysID) { if (memPos>=2097152) break; } sampleMemLen=memPos; + + memCompo.used=sampleMemLen; + memCompo.capacity=getSampleMemCapacity(0); } void DivPlatformSegaPCM::setFlags(const DivConfig& flags) { diff --git a/src/engine/platform/su.cpp b/src/engine/platform/su.cpp index 83e268cfc..9425f8787 100644 --- a/src/engine/platform/su.cpp +++ b/src/engine/platform/su.cpp @@ -667,6 +667,9 @@ void DivPlatformSoundUnit::renderSamples(int sysID) { memset(sampleOffSU,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample RAM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -689,12 +692,20 @@ void DivPlatformSoundUnit::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffSU[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } sampleMemLen=memPos; sysIDCache=sysID; memcpy(su->pcm,sampleMem,sampleMemSize?65536:8192); + + memCompo.used=sampleMemLen; + memCompo.capacity=sampleMemSize?65536:8192; + + if (initIlSize&64) { + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_ECHO,"Echo Buffer",-1,memCompo.capacity-((1+(initIlSize&63))<<7),memCompo.capacity)); + } } int DivPlatformSoundUnit::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index 24ae09119..104203420 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -1005,6 +1005,9 @@ void DivPlatformX1_010::renderSamples(int sysID) { memset(sampleOffX1,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -1035,9 +1038,13 @@ void DivPlatformX1_010::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffX1[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } sampleMemLen=memPos+256; + + memCompo.used=sampleMemLen; + memCompo.capacity=getSampleMemCapacity(0); } int DivPlatformX1_010::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 36f8c36d2..378ce4a43 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1615,6 +1615,9 @@ void DivPlatformYM2608::renderSamples(int sysID) { memset(sampleOffB,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="ADPCM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -1639,9 +1642,13 @@ void DivPlatformYM2608::renderSamples(int sysID) { sampleLoaded[i]=true; } sampleOffB[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } adpcmBMemLen=memPos+256; + + memCompo.used=adpcmBMemLen; + memCompo.capacity=getSampleMemCapacity(0); } void DivPlatformYM2608::setFlags(const DivConfig& flags) { diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 9a1d05ca7..63dd3ecc6 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -160,6 +160,12 @@ class DivPlatformYM2610Base: public DivPlatformOPN { memset(sampleOffB,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*2*sizeof(bool)); + memCompoA=DivMemoryComposition(); + memCompoA.name="ADPCM-A"; + + memCompoB=DivMemoryComposition(); + memCompoB.name="ADPCM-B"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -184,10 +190,14 @@ class DivPlatformYM2610Base: public DivPlatformOPN { sampleLoaded[0][i]=true; } sampleOffA[i]=memPos; + memCompoA.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } adpcmAMemLen=memPos+256; + memCompoA.used=adpcmAMemLen; + memCompoA.capacity=getSampleMemCapacity(0); + memset(adpcmBMem,0,getSampleMemCapacity(1)); memPos=0; @@ -214,9 +224,13 @@ class DivPlatformYM2610Base: public DivPlatformOPN { sampleLoaded[1][i]=true; } sampleOffB[i]=memPos; + memCompoB.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+paddedLen)); memPos+=paddedLen; } adpcmBMemLen=memPos+256; + + memCompoB.used=adpcmBMemLen; + memCompoB.capacity=getSampleMemCapacity(1); } void setFlags(const DivConfig& flags) { diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index ea7aec15a..b95e8a9d3 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -452,6 +452,9 @@ void DivPlatformYMZ280B::renderSamples(int sysID) { memset(sampleOff,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Sample ROM"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -476,6 +479,7 @@ void DivPlatformYMZ280B::renderSamples(int sysID) { } #endif sampleOff[i]=memPos; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+length)); memPos+=length; } if (actualLength Date: Wed, 6 Mar 2024 03:44:14 -0500 Subject: [PATCH 009/134] add Chimera Linux package link discussion #1784 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 776b3bcf5..dc56a1fe8 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,7 @@ some people have provided packages for Unix/Unix-like distributions. here's a li - **Flatpak**: yes! Furnace is now available on [Flathub](https://flathub.org/apps/org.tildearrow.furnace) thanks to ColinKinloch. - **Arch Linux**: [furnace](https://archlinux.org/packages/extra/x86_64/furnace/) is in the official repositories. +- **Chimera Linux**: [furnace](https://pkgs.chimera-linux.org/package/current/contrib/x86_64/furnace) is in the contrib repository. - **FreeBSD**: [a package in ports](https://www.freshports.org/audio/furnace/) is available courtesy of ehaupt. - **Nix**: [package](https://search.nixos.org/packages?channel=unstable&show=furnace&from=0&size=50&sort=relevance&type=packages&query=furnace) thanks to OPNA2608. - **openSUSE**: [a package](https://software.opensuse.org/package/furnace) is available, courtesy of fpesari. From 1e221393c40e4186acd31083dfd8f3d18693dd17 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 6 Mar 2024 16:12:39 -0500 Subject: [PATCH 010/134] memory composition, part 6 --- doc/8-advanced/memory-composition.md | 5 +++++ doc/8-advanced/stats.md | 4 ++-- src/gui/stats.cpp | 18 ------------------ 3 files changed, 7 insertions(+), 20 deletions(-) create mode 100644 doc/8-advanced/memory-composition.md diff --git a/doc/8-advanced/memory-composition.md b/doc/8-advanced/memory-composition.md new file mode 100644 index 000000000..d01fb766c --- /dev/null +++ b/doc/8-advanced/memory-composition.md @@ -0,0 +1,5 @@ +# memory composition + +this window displays the memory usage of chips that support memory (e.g. for samples). + +![memory composition](memcompo.png) diff --git a/doc/8-advanced/stats.md b/doc/8-advanced/stats.md index 01bc78775..e65f47b77 100644 --- a/doc/8-advanced/stats.md +++ b/doc/8-advanced/stats.md @@ -1,5 +1,5 @@ # statistics -the Statistics dialog shows running stats such as overall audio processing load and per-chip sample memory. +the Statistics window shows audio load (CPU used by emulation/playback). -![statistics dialog](stats.png) +![statistics window](stats.png) diff --git a/src/gui/stats.cpp b/src/gui/stats.cpp index 49c1f6cf6..b8c719267 100644 --- a/src/gui/stats.cpp +++ b/src/gui/stats.cpp @@ -36,24 +36,6 @@ void FurnaceGUI::drawStats() { ImGui::Text("Audio load"); ImGui::SameLine(); ImGui::ProgressBar((double)lastProcTime/maxGot,ImVec2(-FLT_MIN,0),procStr.c_str()); - ImGui::Separator(); - for (int i=0; isong.systemLen; i++) { - DivDispatch* dispatch=e->getDispatch(i); - for (int j=0; dispatch!=NULL && dispatch->getSampleMemCapacity(j)>0; j++) { - size_t capacity=dispatch->getSampleMemCapacity(j); - size_t usage=dispatch->getSampleMemUsage(j); - String usageStr; - if (settings.memUsageUnit==1) { - usageStr=fmt::sprintf("%d/%dKB",usage/1024,capacity/1024); - } else { - usageStr=fmt::sprintf("%d/%d",usage,capacity); - } - ImGui::AlignTextToFramePadding(); - ImGui::Text("%s [%d]", e->getSystemName(e->song.system[i]), j); - ImGui::SameLine(); - ImGui::ProgressBar(((float)usage)/((float)capacity),ImVec2(-FLT_MIN,0),usageStr.c_str()); - } - } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_STATS; ImGui::End(); From 7d95e685acdc31fd8985cae6f63d06188a17d287 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 8 Mar 2024 13:48:54 -0500 Subject: [PATCH 011/134] command stream ending fix? --- src/engine/cmdStreamOps.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index 1d8b24fb8..7d50c7a60 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -293,12 +293,13 @@ SafeWriter* DivEngine::saveCommand(bool binary) { int lastTick[DIV_MAX_CHANS]; memset(lastTick,0,DIV_MAX_CHANS*sizeof(int)); + bool wroteTickGlobal=false; while (!done) { if (nextTick(false,true) || !playing) { done=true; } // get command stream - bool wroteTickGlobal=false; + wroteTickGlobal=false; memset(wroteTick,0,DIV_MAX_CHANS*sizeof(bool)); if (curDivider!=divider) { curDivider=divider; @@ -339,6 +340,11 @@ SafeWriter* DivEngine::saveCommand(bool binary) { cmdStream.clear(); tick++; } + wroteTickGlobal=false; + memset(wroteTick,0,DIV_MAX_CHANS*sizeof(bool)); + for (int i=0; i Date: Fri, 8 Mar 2024 14:13:50 -0500 Subject: [PATCH 012/134] another fix --- src/engine/cmdStreamOps.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index 7d50c7a60..ce8990646 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -297,6 +297,7 @@ SafeWriter* DivEngine::saveCommand(bool binary) { while (!done) { if (nextTick(false,true) || !playing) { done=true; + break; } // get command stream wroteTickGlobal=false; From 2290f3d873ec93cba44aafade780dbcd8204a1e3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 8 Mar 2024 17:53:37 -0500 Subject: [PATCH 013/134] a better command stream debugger --- CMakeLists.txt | 1 + src/engine/cmdStream.cpp | 39 +++++++- src/engine/cmdStream.h | 8 ++ src/engine/engine.h | 4 + src/engine/playback.cpp | 4 +- src/engine/safeWriter.cpp | 6 ++ src/engine/safeWriter.h | 1 + src/gui/csPlayer.cpp | 185 ++++++++++++++++++++++++++++++++++++++ src/gui/debugWindow.cpp | 2 +- src/gui/doAction.cpp | 6 ++ src/gui/gui.cpp | 5 ++ src/gui/gui.h | 8 +- src/gui/guiConst.cpp | 1 + src/gui/settings.cpp | 1 + 14 files changed, 265 insertions(+), 6 deletions(-) create mode 100644 src/gui/csPlayer.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index decea3fef..581e1c2de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -789,6 +789,7 @@ src/gui/channels.cpp src/gui/chanOsc.cpp src/gui/clock.cpp src/gui/compatFlags.cpp +src/gui/csPlayer.cpp src/gui/cursor.cpp src/gui/dataList.cpp src/gui/debugWindow.cpp diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 6036364c5..329f9a798 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -35,8 +35,30 @@ bool DivCSChannelState::doCall(unsigned int addr) { return true; } +unsigned char* DivCSPlayer::getData() { + return b; +} + +size_t DivCSPlayer::getDataLen() { + return bLen; +} + +DivCSChannelState* DivCSPlayer::getChanState(int ch) { + return &chan[ch]; +} + +unsigned char* DivCSPlayer::getFastDelays() { + return fastDelays; +} + +unsigned char* DivCSPlayer::getFastCmds() { + return fastCmds; +} + void DivCSPlayer::cleanup() { delete b; + b=NULL; + bLen=0; } bool DivCSPlayer::tick() { @@ -383,7 +405,8 @@ bool DivCSPlayer::init() { stream.readI(); continue; } - chan[i].readPos=stream.readI(); + chan[i].startPos=stream.readI(); + chan[i].readPos=chan[i].startPos; } stream.read(fastDelays,16); @@ -427,3 +450,17 @@ bool DivEngine::playStream(unsigned char* f, size_t length) { BUSY_END; return true; } + +DivCSPlayer* DivEngine::getStreamPlayer() { + return cmdStreamInt; +} + +bool DivEngine::killStream() { + if (!cmdStreamInt) return false; + BUSY_BEGIN; + cmdStreamInt->cleanup(); + delete cmdStreamInt; + cmdStreamInt=NULL; + BUSY_END; + return true; +} diff --git a/src/engine/cmdStream.h b/src/engine/cmdStream.h index cd0a786b7..8ecc17c67 100644 --- a/src/engine/cmdStream.h +++ b/src/engine/cmdStream.h @@ -26,6 +26,7 @@ class DivEngine; struct DivCSChannelState { + unsigned int startPos; unsigned int readPos; int waitTicks; @@ -69,6 +70,7 @@ struct DivCSChannelState { class DivCSPlayer { DivEngine* e; unsigned char* b; + size_t bLen; SafeReader stream; DivCSChannelState chan[DIV_MAX_CHANS]; unsigned char fastDelays[16]; @@ -77,12 +79,18 @@ class DivCSPlayer { short vibTable[64]; public: + unsigned char* getData(); + size_t getDataLen(); + DivCSChannelState* getChanState(int ch); + unsigned char* getFastDelays(); + unsigned char* getFastCmds(); void cleanup(); bool tick(); bool init(); DivCSPlayer(DivEngine* en, unsigned char* buf, size_t len): e(en), b(buf), + bLen(len), stream(buf,len) {} }; diff --git a/src/engine/engine.h b/src/engine/engine.h index 8e3bacdf2..049cce820 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -633,6 +633,10 @@ class DivEngine { bool load(unsigned char* f, size_t length); // play a binary command stream. bool playStream(unsigned char* f, size_t length); + // get the playing stream. + DivCSPlayer* getStreamPlayer(); + // destroy command stream player. + bool killStream(); // save as .dmf. SafeWriter* saveDMF(unsigned char version); // save as .fur. diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index aab72623f..bc62d2221 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1595,9 +1595,7 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { if (subticks==tickMult && cmdStreamInt) { if (!cmdStreamInt->tick()) { - cmdStreamInt->cleanup(); - delete cmdStreamInt; - cmdStreamInt=NULL; + // !!! } } diff --git a/src/engine/safeWriter.cpp b/src/engine/safeWriter.cpp index 0e447b2dc..c2388c460 100644 --- a/src/engine/safeWriter.cpp +++ b/src/engine/safeWriter.cpp @@ -227,3 +227,9 @@ void SafeWriter::finish() { buf=NULL; operative=false; } + +void SafeWriter::disown() { + if (!operative) return; + buf=NULL; + operative=false; +} diff --git a/src/engine/safeWriter.h b/src/engine/safeWriter.h index 640e78c47..666b0f1e2 100644 --- a/src/engine/safeWriter.h +++ b/src/engine/safeWriter.h @@ -62,6 +62,7 @@ class SafeWriter { void init(); SafeReader* toReader(); void finish(); + void disown(); SafeWriter(): operative(false), diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp new file mode 100644 index 000000000..cec9ec2c0 --- /dev/null +++ b/src/gui/csPlayer.cpp @@ -0,0 +1,185 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "gui.h" +#include +#include "imgui.h" + +void FurnaceGUI::drawCSPlayer() { + if (nextWindow==GUI_WINDOW_CS_PLAYER) { + csPlayerOpen=true; + ImGui::SetNextWindowFocus(); + nextWindow=GUI_WINDOW_NOTHING; + } + if (!csPlayerOpen) return; + if (ImGui::Begin("Command Stream Player",&csPlayerOpen,globalWinFlags)) { + if (ImGui::Button("Load")) { + openFileDialog(GUI_FILE_CMDSTREAM_OPEN); + } + ImGui::SameLine(); + if (ImGui::Button("Kill")) { + if (!e->killStream()) { + showError("Kikai wa mou shindeiru!"); + } + } + ImGui::SameLine(); + if (ImGui::Button("Burn Current Song")) { + SafeWriter* w=e->saveCommand(true); + if (w!=NULL) { + if (!e->playStream(w->getFinalBuf(),w->size())) { + showError(e->getLastError()); + w->finish(); + delete w; + } else { + w->disown(); + delete w; + } + } + } + + DivCSPlayer* cs=e->getStreamPlayer(); + if (cs) { + if (ImGui::BeginTabBar("CSOptions")) { + int chans=e->getTotalChannelCount(); + if (ImGui::BeginTabItem("Status")) { + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Hex")) { + ImGui::PushFont(patFont); + if (ImGui::BeginTable("CSHexPos",chans,ImGuiTableFlags_SizingStretchSame)) { + ImGui::TableNextRow(); + for (int i=0; igetChanState(i); + ImGui::TableNextColumn(); + ImGui::Text("$%x",state->readPos); + } + ImGui::EndTable(); + } + + float oneCharSize=ImGui::CalcTextSize("A").x; + float threeCharSize=ImGui::CalcTextSize("AA").x; + float charViewSize=ImGui::CalcTextSize("0123456789ABCDEF").x; + + if (ImGui::BeginTable("CSHexPos",19)) { + char charView[17]; + ImGui::TableSetupScrollFreeze(1,1); + ImGui::TableSetupColumn("addr",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("d0",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d1",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d2",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d3",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d4",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d5",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d6",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d7",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d8",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d9",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d10",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d11",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d12",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d13",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d14",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("d15",ImGuiTableColumnFlags_WidthFixed,threeCharSize); + ImGui::TableSetupColumn("spacer",ImGuiTableColumnFlags_WidthFixed,oneCharSize); + ImGui::TableSetupColumn("char",ImGuiTableColumnFlags_WidthFixed,charViewSize); + + // header + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + for (int i=0; i<16; i++) { + ImGui::TableNextColumn(); + ImGui::Text("%X",i); + } + + // content + unsigned char* buf=cs->getData(); + size_t bufSize=cs->getDataLen(); + csClipper.Begin((bufSize+15)>>4,ImGui::GetTextLineHeightWithSpacing()); + while (csClipper.Step()) { + //std::vector highlightsUnsorted; + std::vector highlights; + int nextHighlight=-1; + int highlightPos=0; + + for (int i=0; igetChanState(i); + if ((int)state->readPos>=(csClipper.DisplayStart<<4) && (int)state->readPos<=(csClipper.DisplayEnd<<4)) { + highlights.push_back(state->readPos); + } + } + if (!highlights.empty()) nextHighlight=highlights[0]; + + + for (int i=csClipper.DisplayStart; i=(int)bufSize) continue; + if (pos==nextHighlight) { + ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_Header)); + highlightPos++; + if (highlightPos>=(int)highlights.size()) { + nextHighlight=-1; + } else { + nextHighlight=highlights[highlightPos]; + } + } + ImGui::Text("%.2X",buf[pos]); + } + + ImGui::TableNextColumn(); + ImGui::TableNextColumn(); + for (int j=0; j<16; j++) { + int pos=(i<<4)|j; + if (pos>=(int)bufSize) { + charView[j]=' '; + } else if (buf[pos]>=0x20 && buf[pos]<=0x7e) { + charView[j]=buf[pos]; + } else { + charView[j]='.'; + } + } + charView[16]=0; + + ImGui::TextUnformatted(charView); + } + } + csClipper.End(); + + ImGui::EndTable(); + } + ImGui::PopFont(); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + } + } + if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_CS_PLAYER; + ImGui::End(); +} diff --git a/src/gui/debugWindow.cpp b/src/gui/debugWindow.cpp index 98a2d9dc7..ed5057915 100644 --- a/src/gui/debugWindow.cpp +++ b/src/gui/debugWindow.cpp @@ -77,7 +77,7 @@ void FurnaceGUI::drawDebug() { ImGui::SameLine(); if (ImGui::Button("Pattern Advance")) e->haltWhen(DIV_HALT_PATTERN); - if (ImGui::Button("Play Command Stream")) openFileDialog(GUI_FILE_CMDSTREAM_OPEN); + if (ImGui::Button("Play Command Stream")) nextWindow=GUI_WINDOW_CS_PLAYER; if (ImGui::Button("Panic")) e->syncReset(); ImGui::SameLine(); diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index c706410b3..fe0adc775 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -316,6 +316,9 @@ void FurnaceGUI::doAction(int what) { case GUI_ACTION_WINDOW_MEMORY: nextWindow=GUI_WINDOW_MEMORY; break; + case GUI_ACTION_WINDOW_CS_PLAYER: + nextWindow=GUI_WINDOW_CS_PLAYER; + break; case GUI_ACTION_COLLAPSE_WINDOW: collapseWindow=true; @@ -418,6 +421,9 @@ void FurnaceGUI::doAction(int what) { case GUI_WINDOW_MEMORY: memoryOpen=false; break; + case GUI_WINDOW_CS_PLAYER: + csPlayerOpen=false; + break; default: break; } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index c9593d7c1..ed0d437e3 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3463,6 +3463,7 @@ bool FurnaceGUI::loop() { DECLARE_METRIC(volMeter) DECLARE_METRIC(settings) DECLARE_METRIC(debug) + DECLARE_METRIC(csPlayer) DECLARE_METRIC(stats) DECLARE_METRIC(memory) DECLARE_METRIC(compatFlags) @@ -4046,6 +4047,7 @@ bool FurnaceGUI::loop() { IMPORT_CLOSE(groovesOpen); IMPORT_CLOSE(xyOscOpen); IMPORT_CLOSE(memoryOpen); + IMPORT_CLOSE(csPlayerOpen); } else if (pendingLayoutImportStep==1) { // let the UI settle } else if (pendingLayoutImportStep==2) { @@ -4629,6 +4631,7 @@ bool FurnaceGUI::loop() { globalWinFlags=0; MEASURE(settings,drawSettings()); MEASURE(debug,drawDebug()); + MEASURE(csPlayer,drawCSPlayer()); MEASURE(log,drawLog()); MEASURE(compatFlags,drawCompatFlags()); MEASURE(stats,drawStats()); @@ -4669,6 +4672,7 @@ bool FurnaceGUI::loop() { MEASURE(volMeter,drawVolMeter()); MEASURE(settings,drawSettings()); MEASURE(debug,drawDebug()); + MEASURE(csPlayer,drawCSPlayer()); MEASURE(stats,drawStats()); MEASURE(memory,drawMemory()); MEASURE(compatFlags,drawCompatFlags()); @@ -7495,6 +7499,7 @@ FurnaceGUI::FurnaceGUI(): groovesOpen(false), xyOscOpen(false), memoryOpen(false), + csPlayerOpen(false), shortIntro(false), insListDir(false), waveListDir(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index 1b036bae5..3b1a2b552 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -478,6 +478,7 @@ enum FurnaceGUIWindows { GUI_WINDOW_XY_OSC, GUI_WINDOW_INTRO_MON, GUI_WINDOW_MEMORY, + GUI_WINDOW_CS_PLAYER, GUI_WINDOW_SPOILER }; @@ -669,6 +670,7 @@ enum FurnaceGUIActions { GUI_ACTION_WINDOW_GROOVES, GUI_ACTION_WINDOW_XY_OSC, GUI_ACTION_WINDOW_MEMORY, + GUI_ACTION_WINDOW_CS_PLAYER, GUI_ACTION_COLLAPSE_WINDOW, GUI_ACTION_CLOSE_WINDOW, @@ -2064,7 +2066,7 @@ class FurnaceGUI { bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; - bool groovesOpen, xyOscOpen, memoryOpen; + bool groovesOpen, xyOscOpen, memoryOpen, csPlayerOpen; bool shortIntro; bool insListDir, waveListDir, sampleListDir; @@ -2449,6 +2451,9 @@ class FurnaceGUI { // tutorial int curTutorial, curTutorialStep; + // command stream player + ImGuiListClipper csClipper; + // export options int audioExportType; FurnaceGUIExportTypes curExportType; @@ -2573,6 +2578,7 @@ class FurnaceGUI { void drawIntro(double introTime, bool monitor=false); void drawSettings(); void drawDebug(); + void drawCSPlayer(); void drawNewSong(); void drawPalette(); void drawExport(); diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index b17688032..fc4916229 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -606,6 +606,7 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={ D("WINDOW_GROOVES", "Grooves", 0), D("WINDOW_XY_OSC", "Oscilloscope (X-Y)", 0), D("WINDOW_MEMORY", "Memory Compositiom", 0), + D("WINDOW_CS_PLAYER", "Command Stream Player", 0), D("COLLAPSE_WINDOW", "Collapse/expand current window", 0), D("CLOSE_WINDOW", "Close current window", FURKMOD_SHIFT|SDLK_ESCAPE), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 283862ee2..f19dc9d04 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1759,6 +1759,7 @@ void FurnaceGUI::drawSettings() { UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_MEMORY); UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EFFECT_LIST); UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_DEBUG); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CS_PLAYER); UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ABOUT); UI_KEYBIND_CONFIG(GUI_ACTION_COLLAPSE_WINDOW); UI_KEYBIND_CONFIG(GUI_ACTION_CLOSE_WINDOW); From 8ff8ee89e9ecdf0fa2607b3054b5576fd41de718 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 8 Mar 2024 20:52:51 -0500 Subject: [PATCH 014/134] command stream player now loops --- src/engine/cmdStream.cpp | 10 +++++++--- src/gui/csPlayer.cpp | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 329f9a798..351aaecb9 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -79,6 +79,7 @@ bool DivCSPlayer::tick() { } unsigned char next=stream.readC(); unsigned char command=0; + bool mustTell=true; if (next<0xb3) { // note e->dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,(int)next-60)); @@ -143,9 +144,11 @@ bool DivCSPlayer::tick() { break; } chan[i].readPos=chan[i].callStack[--chan[i].callStackPos]; + mustTell=false; break; case 0xfa: chan[i].readPos=stream.readI(); + mustTell=false; break; case 0xfb: logE("TODO: RATE"); @@ -161,8 +164,9 @@ bool DivCSPlayer::tick() { chan[i].waitTicks=1; break; case 0xff: - chan[i].readPos=0; - logI("%d: stop",i); + chan[i].readPos=chan[i].startPos; + mustTell=false; + logI("%d: stop go back to %x",i,chan[i].readPos); break; default: logE("%d: illegal instruction $%.2x! $%.x",i,next,chan[i].readPos); @@ -337,7 +341,7 @@ bool DivCSPlayer::tick() { } } - chan[i].readPos=stream.tell(); + if (mustTell) chan[i].readPos=stream.tell(); } if (sendVolume || chan[i].volSpeed!=0) { diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index cec9ec2c0..07d7d28d1 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -141,7 +141,7 @@ void FurnaceGUI::drawCSPlayer() { ImGui::TableNextColumn(); if (pos>=(int)bufSize) continue; if (pos==nextHighlight) { - ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_Header)); + ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_HeaderActive)); highlightPos++; if (highlightPos>=(int)highlights.size()) { nextHighlight=-1; From 8099df183d00e225336523ff235b91c99ca8a448 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 9 Mar 2024 03:32:03 -0500 Subject: [PATCH 015/134] asdfasdfasdf --- src/gui/csPlayer.cpp | 10 ++++++---- src/gui/gui.cpp | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index 07d7d28d1..26f8a02bb 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -72,7 +72,7 @@ void FurnaceGUI::drawCSPlayer() { for (int i=0; igetChanState(i); ImGui::TableNextColumn(); - ImGui::Text("$%x",state->readPos); + ImGui::Text("$%.4x",state->readPos); } ImGui::EndTable(); } @@ -80,11 +80,12 @@ void FurnaceGUI::drawCSPlayer() { float oneCharSize=ImGui::CalcTextSize("A").x; float threeCharSize=ImGui::CalcTextSize("AA").x; float charViewSize=ImGui::CalcTextSize("0123456789ABCDEF").x; + float fiveCharSize=ImGui::CalcTextSize("AAAAA").x; - if (ImGui::BeginTable("CSHexPos",19)) { + if (ImGui::BeginTable("CSHexView",19,ImGuiTableFlags_ScrollY)) { char charView[17]; ImGui::TableSetupScrollFreeze(1,1); - ImGui::TableSetupColumn("addr",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("addr",ImGuiTableColumnFlags_WidthFixed,fiveCharSize); ImGui::TableSetupColumn("d0",ImGuiTableColumnFlags_WidthFixed,threeCharSize); ImGui::TableSetupColumn("d1",ImGuiTableColumnFlags_WidthFixed,threeCharSize); ImGui::TableSetupColumn("d2",ImGuiTableColumnFlags_WidthFixed,threeCharSize); @@ -105,7 +106,7 @@ void FurnaceGUI::drawCSPlayer() { ImGui::TableSetupColumn("char",ImGuiTableColumnFlags_WidthFixed,charViewSize); // header - ImGui::TableNextRow(); + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextColumn(); for (int i=0; i<16; i++) { ImGui::TableNextColumn(); @@ -134,6 +135,7 @@ void FurnaceGUI::drawCSPlayer() { for (int i=csClipper.DisplayStart; igetStreamPlayer()) { + e->killStream(); + } memset(chanOscVol,0,DIV_MAX_CHANS*sizeof(float)); for (int i=0; i Date: Sat, 9 Mar 2024 03:33:00 -0500 Subject: [PATCH 016/134] NOOOOOOO --- src/gui/guiConst.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index fc4916229..31567ea3b 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -605,7 +605,7 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={ D("WINDOW_CLOCK", "Clock", 0), D("WINDOW_GROOVES", "Grooves", 0), D("WINDOW_XY_OSC", "Oscilloscope (X-Y)", 0), - D("WINDOW_MEMORY", "Memory Compositiom", 0), + D("WINDOW_MEMORY", "Memory Composition", 0), D("WINDOW_CS_PLAYER", "Command Stream Player", 0), D("COLLAPSE_WINDOW", "Collapse/expand current window", 0), From 5dd62d45fa7b620d1a2b2bbaea0bded1dd45c7a9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 9 Mar 2024 17:36:44 -0500 Subject: [PATCH 017/134] more work on the command stream debugger --- src/engine/cmdStream.cpp | 4 +++ src/engine/cmdStream.h | 17 ++++++---- src/gui/csPlayer.cpp | 69 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 351aaecb9..489b16b61 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -89,6 +89,7 @@ bool DivCSPlayer::tick() { command=fastCmds[next&15]; } else if (next>=0xe0 && next<=0xef) { // preset delay chan[i].waitTicks=fastDelays[next&15]; + chan[i].lastWaitLen=chan[i].waitTicks; } else switch (next) { case 0xb4: // note on null e->dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,DIV_NOTE_NULL)); @@ -156,12 +157,15 @@ bool DivCSPlayer::tick() { break; case 0xfc: chan[i].waitTicks=(unsigned short)stream.readS(); + chan[i].lastWaitLen=chan[i].waitTicks; break; case 0xfd: chan[i].waitTicks=(unsigned char)stream.readC(); + chan[i].lastWaitLen=chan[i].waitTicks; break; case 0xfe: chan[i].waitTicks=1; + chan[i].lastWaitLen=chan[i].waitTicks; break; case 0xff: chan[i].readPos=chan[i].startPos; diff --git a/src/engine/cmdStream.h b/src/engine/cmdStream.h index 8ecc17c67..4704b41b9 100644 --- a/src/engine/cmdStream.h +++ b/src/engine/cmdStream.h @@ -23,12 +23,15 @@ #include "defines.h" #include "safeReader.h" +#define DIV_MAX_CSTRACE 64 + class DivEngine; struct DivCSChannelState { unsigned int startPos; unsigned int readPos; int waitTicks; + int lastWaitLen; int note, pitch; int volume, volMax, volSpeed; @@ -39,11 +42,7 @@ struct DivCSChannelState { unsigned int callStack[8]; unsigned char callStackPos; - struct TraceEntry { - unsigned int addr; - unsigned char length; - unsigned char data[11]; - } trace[32]; + unsigned int trace[DIV_MAX_CSTRACE]; unsigned char tracePos; bool doCall(unsigned int addr); @@ -51,6 +50,7 @@ struct DivCSChannelState { DivCSChannelState(): readPos(0), waitTicks(0), + lastWaitLen(0), note(-1), pitch(0), volume(0x7f00), @@ -64,7 +64,12 @@ struct DivCSChannelState { arp(0), arpStage(0), arpTicks(0), - callStackPos(0) {} + callStackPos(0), + tracePos(0) { + for (int i=0; i #include "imgui.h" +String disasmCmd(unsigned char* buf, size_t bufLen, unsigned int addr) { + return "TODO"; +} + void FurnaceGUI::drawCSPlayer() { if (nextWindow==GUI_WINDOW_CS_PLAYER) { csPlayerOpen=true; @@ -58,6 +62,71 @@ void FurnaceGUI::drawCSPlayer() { if (ImGui::BeginTabBar("CSOptions")) { int chans=e->getTotalChannelCount(); if (ImGui::BeginTabItem("Status")) { + if (ImGui::BeginTable("CSStat",11,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { + ImGui::TableSetupScrollFreeze(1,1); + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); + ImGui::TableNextColumn(); + ImGui::Text("channel"); + ImGui::TableNextColumn(); + ImGui::Text("start"); + ImGui::TableNextColumn(); + ImGui::Text("PC"); + ImGui::TableNextColumn(); + ImGui::Text("wait"); + ImGui::TableNextColumn(); + ImGui::Text("SP"); + ImGui::TableNextColumn(); + ImGui::Text("note"); + ImGui::TableNextColumn(); + ImGui::Text("pitch"); + ImGui::TableNextColumn(); + ImGui::Text("vol"); + ImGui::TableNextColumn(); + ImGui::Text("vols"); + ImGui::TableNextColumn(); + ImGui::Text("vib"); + ImGui::TableNextColumn(); + ImGui::Text("porta"); + ImGui::TableNextColumn(); + ImGui::Text("arp"); + + for (int i=0; igetChanState(i); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("%d",i); + ImGui::TableNextColumn(); + ImGui::Text("$%.4x",state->startPos); + ImGui::TableNextColumn(); + ImGui::Text("$%.4x",state->readPos); + ImGui::TableNextColumn(); + ImGui::Text("%d/%d",state->waitTicks,state->lastWaitLen); + ImGui::TableNextColumn(); + ImGui::Text("%d",state->callStackPos); + ImGui::TableNextColumn(); + ImGui::Text("%d",state->note); + ImGui::TableNextColumn(); + ImGui::Text("%d",state->pitch); + ImGui::TableNextColumn(); + ImGui::Text("$%.4X",state->volume); + ImGui::TableNextColumn(); + ImGui::Text("%+d",state->volSpeed); + ImGui::TableNextColumn(); + ImGui::Text("%d/%d (%d)",state->vibratoDepth,state->vibratoRate,state->vibratoPos); + ImGui::TableNextColumn(); + ImGui::Text("-> %d (%d)",state->portaTarget,state->portaSpeed); + ImGui::TableNextColumn(); + ImGui::Text("$%.2X",state->arp); + } + + ImGui::EndTable(); + } + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Trace")) { + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Disassemble")) { ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Hex")) { From db9a11a674a7a70eaa6a1dc847a07b512a1899b9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 9 Mar 2024 18:20:17 -0500 Subject: [PATCH 018/134] remove text command stream export NOTE: this is not removal of text export. --- doc/2-interface/export.md | 5 +- doc/8-advanced/command-line.md | 1 - src/engine/cmdStreamOps.cpp | 433 +++++++++++++++------------------ src/engine/engine.h | 2 +- src/gui/csPlayer.cpp | 2 +- src/gui/exportOptions.cpp | 9 +- src/gui/gui.cpp | 21 +- src/gui/gui.h | 1 - src/main.cpp | 9 +- 9 files changed, 203 insertions(+), 280 deletions(-) diff --git a/doc/2-interface/export.md b/doc/2-interface/export.md index c2e520b5d..11b627d8a 100644 --- a/doc/2-interface/export.md +++ b/doc/2-interface/export.md @@ -76,10 +76,9 @@ click on **Begin Export** to... you know. ## export command stream -this option exports a text or binary file which contains a dump of the internal command stream produced when playing the song. +this option exports a binary file which contains a dump of the internal command stream produced when playing the song. it's not really useful, unless you're a developer and want to use a command stream dump for some reason (e.g. writing a hardware sound driver). -- **export (binary)**: exports in Furnace's own command stream format (FCS). see `export-tech.md` in `papers/` for details. -- **export (text)**: exports the command stream as a text file. only useful for analysis, really. +- **export**: exports in Furnace's own command stream format (FCS). see `export-tech.md` in `papers/` for details. diff --git a/doc/8-advanced/command-line.md b/doc/8-advanced/command-line.md index cc5d4f0df..3a84575e1 100644 --- a/doc/8-advanced/command-line.md +++ b/doc/8-advanced/command-line.md @@ -83,7 +83,6 @@ the following parameters may be used: - `-cmdout path`: output command stream dump to `path`. - you must provide a file, otherwise Furnace will quit. -- `-binary`: set command stream output format to binary. ## COMMAND LINE INTERFACE diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index ce8990646..e328cba38 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -21,26 +21,19 @@ #include "../ta-log.h" #define WRITE_TICK(x) \ - if (binary) { \ - if (!wroteTick[x]) { \ - wroteTick[x]=true; \ - if (tick-lastTick[x]>255) { \ - chanStream[x]->writeC(0xfc); \ - chanStream[x]->writeS(tick-lastTick[x]); \ - } else if (tick-lastTick[x]>1) { \ - delayPopularity[tick-lastTick[x]]++; \ - chanStream[x]->writeC(0xfd); \ - chanStream[x]->writeC(tick-lastTick[x]); \ - } else if (tick-lastTick[x]>0) { \ - chanStream[x]->writeC(0xfe); \ - } \ - lastTick[x]=tick; \ - } \ - } else { \ - if (!wroteTickGlobal) { \ - wroteTickGlobal=true; \ - w->writeText(fmt::sprintf(">> TICK %d\n",tick)); \ + if (!wroteTick[x]) { \ + wroteTick[x]=true; \ + if (tick-lastTick[x]>255) { \ + chanStream[x]->writeC(0xfc); \ + chanStream[x]->writeS(tick-lastTick[x]); \ + } else if (tick-lastTick[x]>1) { \ + delayPopularity[tick-lastTick[x]]++; \ + chanStream[x]->writeC(0xfd); \ + chanStream[x]->writeC(tick-lastTick[x]); \ + } else if (tick-lastTick[x]>0) { \ + chanStream[x]->writeC(0xfe); \ } \ + lastTick[x]=tick; \ } void writePackedCommandValues(SafeWriter* w, const DivCommand& c) { @@ -205,7 +198,7 @@ void writePackedCommandValues(SafeWriter* w, const DivCommand& c) { } } -SafeWriter* DivEngine::saveCommand(bool binary) { +SafeWriter* DivEngine::saveCommand() { stop(); repeatPattern=false; shallStop=false; @@ -243,49 +236,23 @@ SafeWriter* DivEngine::saveCommand(bool binary) { w->init(); // write header - if (binary) { - w->write("FCS",4); - w->writeI(chans); - // offsets - for (int i=0; iinit(); - w->writeI(0); - } - // preset delays and speed dial - for (int i=0; i<32; i++) { - w->writeC(0); - } - } else { - w->writeText("# Furnace Command Stream\n\n"); - - w->writeText("[Information]\n"); - w->writeText(fmt::sprintf("name: %s\n",song.name)); - w->writeText(fmt::sprintf("author: %s\n",song.author)); - w->writeText(fmt::sprintf("category: %s\n",song.category)); - w->writeText(fmt::sprintf("system: %s\n",song.systemName)); - - w->writeText("\n"); - - w->writeText("[SubSongInformation]\n"); - w->writeText(fmt::sprintf("name: %s\n",curSubSong->name)); - w->writeText(fmt::sprintf("tickRate: %f\n",curSubSong->hz)); - - w->writeText("\n"); - - w->writeText("[SysDefinition]\n"); - // TODO - - w->writeText("\n"); + w->write("FCS",4); + w->writeI(chans); + // offsets + for (int i=0; iinit(); + w->writeI(0); + } + // preset delays and speed dial + for (int i=0; i<32; i++) { + w->writeC(0); } // play the song ourselves bool done=false; playSub(false); - if (!binary) { - w->writeText("[Stream]\n"); - } int tick=0; bool oldCmdStreamEnabled=cmdStreamEnabled; cmdStreamEnabled=true; @@ -305,12 +272,8 @@ SafeWriter* DivEngine::saveCommand(bool binary) { if (curDivider!=divider) { curDivider=divider; WRITE_TICK(0); - if (binary) { - chanStream[0]->writeC(0xfb); - chanStream[0]->writeI((int)(curDivider*65536)); - } else { - w->writeText(fmt::sprintf(">> SET_RATE %f\n",curDivider)); - } + chanStream[0]->writeC(0xfb); + chanStream[0]->writeI((int)(curDivider*65536)); } for (DivCommand& i: cmdStream) { switch (i.cmd) { @@ -329,12 +292,8 @@ SafeWriter* DivEngine::saveCommand(bool binary) { break; default: WRITE_TICK(i.chan); - if (binary) { - cmdPopularity[i.cmd]++; - writePackedCommandValues(chanStream[i.chan],i); - } else { - w->writeText(fmt::sprintf(" %d: %s %d %d\n",i.chan,cmdName[i.cmd],i.value,i.value2)); - } + cmdPopularity[i.cmd]++; + writePackedCommandValues(chanStream[i.chan],i); break; } } @@ -348,192 +307,184 @@ SafeWriter* DivEngine::saveCommand(bool binary) { } cmdStreamEnabled=oldCmdStreamEnabled; - if (binary) { - int sortCand=-1; - int sortPos=0; - while (sortPos<16) { - sortCand=-1; - for (int i=DIV_CMD_SAMPLE_MODE; i<256; i++) { - if (cmdPopularity[i]) { - if (sortCand==-1) { - sortCand=i; - } else if (cmdPopularity[sortCand]writeC(0xff); - // optimize stream - SafeWriter* oldStream=chanStream[i]; - SafeReader* reader=oldStream->toReader(); - chanStream[i]=new SafeWriter; - chanStream[i]->init(); + sortedCmdPopularity[sortPos]=cmdPopularity[sortCand]; + sortedCmd[sortPos]=sortCand; + cmdPopularity[sortCand]=0; + sortPos++; + } - while (1) { - try { - unsigned char next=reader->readC(); - switch (next) { - case 0xb8: // instrument - case 0xc0: // pre porta - case 0xc3: // vibrato range - case 0xc4: // vibrato shape - case 0xc5: // pitch - case 0xc7: // volume - case 0xca: // legato - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - break; - case 0xbe: // panning - case 0xc2: // vibrato - case 0xc6: // arpeggio - case 0xc8: // vol slide - case 0xc9: // porta - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - break; - case 0xf0: { // full command (pre) - unsigned char cmd=reader->readC(); - bool foundShort=false; - for (int j=0; j<16; j++) { - if (sortedCmd[j]==cmd) { - chanStream[i]->writeC(0xd0+j); - foundShort=true; - break; - } - } - if (!foundShort) { - chanStream[i]->writeC(0xf7); // full command - chanStream[i]->writeC(cmd); - } - - unsigned char cmdLen=reader->readC(); - logD("cmdLen: %d",cmdLen); - for (unsigned char j=0; jreadC(); - chanStream[i]->writeC(next); - } - break; - } - case 0xfb: // tick rate - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - next=reader->readC(); - chanStream[i]->writeC(next); - break; - case 0xfc: { // 16-bit wait - unsigned short delay=reader->readS(); - bool foundShort=false; - for (int j=0; j<16; j++) { - if (sortedDelay[j]==delay) { - chanStream[i]->writeC(0xe0+j); - foundShort=true; - break; - } - } - if (!foundShort) { - chanStream[i]->writeC(next); - chanStream[i]->writeS(delay); - } - break; - } - case 0xfd: { // 8-bit wait - unsigned char delay=reader->readC(); - bool foundShort=false; - for (int j=0; j<16; j++) { - if (sortedDelay[j]==delay) { - chanStream[i]->writeC(0xe0+j); - foundShort=true; - break; - } - } - if (!foundShort) { - chanStream[i]->writeC(next); - chanStream[i]->writeC(delay); - } - break; - } - default: - chanStream[i]->writeC(next); - break; - } - } catch (EndOfFileException& e) { - break; + sortCand=-1; + sortPos=0; + while (sortPos<16) { + sortCand=-1; + for (int i=0; i<256; i++) { + if (delayPopularity[i]) { + if (sortCand==-1) { + sortCand=i; + } else if (delayPopularity[sortCand]finish(); - delete oldStream; + sortedDelayPopularity[sortPos]=delayPopularity[sortCand]; + sortedDelay[sortPos]=sortCand; + delayPopularity[sortCand]=0; + sortPos++; + } + + for (int i=0; iwriteC(0xff); + // optimize stream + SafeWriter* oldStream=chanStream[i]; + SafeReader* reader=oldStream->toReader(); + chanStream[i]=new SafeWriter; + chanStream[i]->init(); + + while (1) { + try { + unsigned char next=reader->readC(); + switch (next) { + case 0xb8: // instrument + case 0xc0: // pre porta + case 0xc3: // vibrato range + case 0xc4: // vibrato shape + case 0xc5: // pitch + case 0xc7: // volume + case 0xca: // legato + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + break; + case 0xbe: // panning + case 0xc2: // vibrato + case 0xc6: // arpeggio + case 0xc8: // vol slide + case 0xc9: // porta + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + break; + case 0xf0: { // full command (pre) + unsigned char cmd=reader->readC(); + bool foundShort=false; + for (int j=0; j<16; j++) { + if (sortedCmd[j]==cmd) { + chanStream[i]->writeC(0xd0+j); + foundShort=true; + break; + } + } + if (!foundShort) { + chanStream[i]->writeC(0xf7); // full command + chanStream[i]->writeC(cmd); + } + + unsigned char cmdLen=reader->readC(); + logD("cmdLen: %d",cmdLen); + for (unsigned char j=0; jreadC(); + chanStream[i]->writeC(next); + } + break; + } + case 0xfb: // tick rate + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + next=reader->readC(); + chanStream[i]->writeC(next); + break; + case 0xfc: { // 16-bit wait + unsigned short delay=reader->readS(); + bool foundShort=false; + for (int j=0; j<16; j++) { + if (sortedDelay[j]==delay) { + chanStream[i]->writeC(0xe0+j); + foundShort=true; + break; + } + } + if (!foundShort) { + chanStream[i]->writeC(next); + chanStream[i]->writeS(delay); + } + break; + } + case 0xfd: { // 8-bit wait + unsigned char delay=reader->readC(); + bool foundShort=false; + for (int j=0; j<16; j++) { + if (sortedDelay[j]==delay) { + chanStream[i]->writeC(0xe0+j); + foundShort=true; + break; + } + } + if (!foundShort) { + chanStream[i]->writeC(next); + chanStream[i]->writeC(delay); + } + break; + } + default: + chanStream[i]->writeC(next); + break; + } + } catch (EndOfFileException& e) { + break; + } } - for (int i=0; itell(); - logI("- %d: off %x size %ld",i,chanStreamOff[i],chanStream[i]->size()); - w->write(chanStream[i]->getFinalBuf(),chanStream[i]->size()); - chanStream[i]->finish(); - delete chanStream[i]; - } + oldStream->finish(); + delete oldStream; + } - w->seek(8,SEEK_SET); - for (int i=0; iwriteI(chanStreamOff[i]); - } + for (int i=0; itell(); + logI("- %d: off %x size %ld",i,chanStreamOff[i],chanStream[i]->size()); + w->write(chanStream[i]->getFinalBuf(),chanStream[i]->size()); + chanStream[i]->finish(); + delete chanStream[i]; + } - logD("delay popularity:"); - for (int i=0; i<16; i++) { - w->writeC(sortedDelay[i]); - if (sortedDelayPopularity[i]) logD("- %d: %d",sortedDelay[i],sortedDelayPopularity[i]); - } + w->seek(8,SEEK_SET); + for (int i=0; iwriteI(chanStreamOff[i]); + } - logD("command popularity:"); - for (int i=0; i<16; i++) { - w->writeC(sortedCmd[i]); - if (sortedCmdPopularity[i]) logD("- %s: %d",cmdName[sortedCmd[i]],sortedCmdPopularity[i]); - } - } else { - if (!playing) { - w->writeText(">> END\n"); - } else { - w->writeText(">> LOOP 0\n"); - } + logD("delay popularity:"); + for (int i=0; i<16; i++) { + w->writeC(sortedDelay[i]); + if (sortedDelayPopularity[i]) logD("- %d: %d",sortedDelay[i],sortedDelayPopularity[i]); + } + + logD("command popularity:"); + for (int i=0; i<16; i++) { + w->writeC(sortedCmd[i]); + if (sortedCmdPopularity[i]) logD("- %s: %d",cmdName[sortedCmd[i]],sortedCmdPopularity[i]); } remainingLoops=-1; diff --git a/src/engine/engine.h b/src/engine/engine.h index 049cce820..e5088d620 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -655,7 +655,7 @@ class DivEngine { // dump to ZSM. SafeWriter* saveZSM(unsigned int zsmrate=60, bool loop=true, bool optimize=true); // dump command stream. - SafeWriter* saveCommand(bool binary=false); + SafeWriter* saveCommand(); // export to text SafeWriter* saveText(bool separatePatterns=true); // export to an audio file diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index d8f079c07..7402fa5d7 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -44,7 +44,7 @@ void FurnaceGUI::drawCSPlayer() { } ImGui::SameLine(); if (ImGui::Button("Burn Current Song")) { - SafeWriter* w=e->saveCommand(true); + SafeWriter* w=e->saveCommand(); if (w!=NULL) { if (!e->playStream(w->getFinalBuf(),w->size())) { showError(e->getLastError()); diff --git a/src/gui/exportOptions.cpp b/src/gui/exportOptions.cpp index 16dd7eeda..65bbefbaa 100644 --- a/src/gui/exportOptions.cpp +++ b/src/gui/exportOptions.cpp @@ -242,15 +242,10 @@ void FurnaceGUI::drawExportCommand(bool onWindow) { ); if (onWindow) { ImGui::Separator(); - if (ImGui::Button("Cancel",ImVec2(133.3f*dpiScale,0))) ImGui::CloseCurrentPopup(); + if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup(); ImGui::SameLine(); } - if (ImGui::Button("Export (binary)",ImVec2(133.3f*dpiScale,0))) { - openFileDialog(GUI_FILE_EXPORT_CMDSTREAM_BINARY); - ImGui::CloseCurrentPopup(); - } - ImGui::SameLine(); - if (ImGui::Button("Export (text)",ImVec2(133.3f*dpiScale,0))) { + if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) { openFileDialog(GUI_FILE_EXPORT_CMDSTREAM); ImGui::CloseCurrentPopup(); } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 5e0532db1..1d28fdf3f 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1894,15 +1894,6 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { ); break; case GUI_FILE_EXPORT_CMDSTREAM: - if (!dirExists(workingDirROMExport)) workingDirROMExport=getHomeDir(); - hasOpened=fileDialog->openSave( - "Export Command Stream", - {"text file", "*.txt"}, - workingDirROMExport, - dpiScale - ); - break; - case GUI_FILE_EXPORT_CMDSTREAM_BINARY: if (!dirExists(workingDirROMExport)) workingDirROMExport=getHomeDir(); hasOpened=fileDialog->openSave( "Export Command Stream", @@ -4829,7 +4820,6 @@ bool FurnaceGUI::loop() { case GUI_FILE_EXPORT_ROM: case GUI_FILE_EXPORT_TEXT: case GUI_FILE_EXPORT_CMDSTREAM: - case GUI_FILE_EXPORT_CMDSTREAM_BINARY: workingDirROMExport=fileDialog->getPath()+DIR_SEPARATOR_STR; break; case GUI_FILE_LOAD_MAIN_FONT: @@ -4919,10 +4909,10 @@ bool FurnaceGUI::loop() { if (curFileDialog==GUI_FILE_EXPORT_ZSM) { checkExtension(".zsm"); } - if (curFileDialog==GUI_FILE_EXPORT_CMDSTREAM || curFileDialog==GUI_FILE_EXPORT_TEXT) { + if (curFileDialog==GUI_FILE_EXPORT_TEXT) { checkExtension(".txt"); } - if (curFileDialog==GUI_FILE_EXPORT_CMDSTREAM_BINARY) { + if (curFileDialog==GUI_FILE_EXPORT_CMDSTREAM) { checkExtension(".bin"); } if (curFileDialog==GUI_FILE_EXPORT_COLORS) { @@ -5316,11 +5306,8 @@ bool FurnaceGUI::loop() { } break; } - case GUI_FILE_EXPORT_CMDSTREAM: - case GUI_FILE_EXPORT_CMDSTREAM_BINARY: { - bool isBinary=(curFileDialog==GUI_FILE_EXPORT_CMDSTREAM_BINARY); - - SafeWriter* w=e->saveCommand(isBinary); + case GUI_FILE_EXPORT_CMDSTREAM: { + SafeWriter* w=e->saveCommand(); if (w!=NULL) { FILE* f=ps_fopen(copyOfName.c_str(),"wb"); if (f!=NULL) { diff --git a/src/gui/gui.h b/src/gui/gui.h index 3b1a2b552..3bda6b320 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -537,7 +537,6 @@ enum FurnaceGUIFileDialogs { GUI_FILE_EXPORT_VGM, GUI_FILE_EXPORT_ZSM, GUI_FILE_EXPORT_CMDSTREAM, - GUI_FILE_EXPORT_CMDSTREAM_BINARY, GUI_FILE_EXPORT_TEXT, GUI_FILE_EXPORT_ROM, GUI_FILE_LOAD_MAIN_FONT, diff --git a/src/main.cpp b/src/main.cpp index 3b23068e6..0dcbcfa5a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -72,7 +72,6 @@ bool consoleMode=true; #endif bool displayEngineFailError=false; -bool cmdOutBinary=false; bool vgmOutDirect=false; bool safeMode=false; @@ -153,11 +152,6 @@ TAParamResult pSafeModeAudio(String val) { #endif } -TAParamResult pBinary(String val) { - cmdOutBinary=true; - return TA_PARAM_SUCCESS; -} - TAParamResult pDirect(String val) { vgmOutDirect=true; return TA_PARAM_SUCCESS; @@ -373,7 +367,6 @@ void initParams() { params.push_back(TAParam("D","direct",false,pDirect,"","set VGM export direct stream mode")); params.push_back(TAParam("Z","zsmout",true,pZSMOut,"","output .zsm data for Commander X16 Zsound")); params.push_back(TAParam("C","cmdout",true,pCmdOut,"","output command stream")); - params.push_back(TAParam("b","binary",false,pBinary,"","set command stream output format to binary")); params.push_back(TAParam("L","loglevel",true,pLogLevel,"debug|info|warning|error","set the log level (info by default)")); params.push_back(TAParam("v","view",true,pView,"pattern|commands|nothing","set visualization (nothing by default)")); params.push_back(TAParam("i","info",false,pInfo,"","get info about a song")); @@ -660,7 +653,7 @@ int main(int argc, char** argv) { if (outName!="" || vgmOutName!="" || cmdOutName!="") { if (cmdOutName!="") { - SafeWriter* w=e.saveCommand(cmdOutBinary); + SafeWriter* w=e.saveCommand(); if (w!=NULL) { FILE* f=fopen(cmdOutName.c_str(),"wb"); if (f!=NULL) { From 9270df0145aece58f92bd62ed1f8fd165878e2e0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 9 Mar 2024 23:33:23 -0500 Subject: [PATCH 019/134] fix compilation --- src/engine/cmdStreamOps.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index e328cba38..0710e650e 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -260,14 +260,12 @@ SafeWriter* DivEngine::saveCommand() { int lastTick[DIV_MAX_CHANS]; memset(lastTick,0,DIV_MAX_CHANS*sizeof(int)); - bool wroteTickGlobal=false; while (!done) { if (nextTick(false,true) || !playing) { done=true; break; } // get command stream - wroteTickGlobal=false; memset(wroteTick,0,DIV_MAX_CHANS*sizeof(bool)); if (curDivider!=divider) { curDivider=divider; @@ -300,7 +298,6 @@ SafeWriter* DivEngine::saveCommand() { cmdStream.clear(); tick++; } - wroteTickGlobal=false; memset(wroteTick,0,DIV_MAX_CHANS*sizeof(bool)); for (int i=0; i Date: Sun, 10 Mar 2024 20:57:50 -0500 Subject: [PATCH 020/134] trace window, kinda --- src/engine/cmdStream.cpp | 6 ++ src/gui/csPlayer.cpp | 115 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 489b16b61..d8c77030f 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -77,6 +77,12 @@ bool DivCSPlayer::tick() { chan[i].readPos=0; break; } + + chan[i].trace[chan[i].tracePos++]=chan[i].readPos; + if (chan[i].tracePos>=DIV_MAX_CSTRACE) { + chan[i].tracePos=0; + } + unsigned char next=stream.readC(); unsigned char command=0; bool mustTell=true; diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index 7402fa5d7..825f65acb 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -20,8 +20,85 @@ #include "gui.h" #include #include "imgui.h" +#include "guiConst.h" +// TODO: memory safety String disasmCmd(unsigned char* buf, size_t bufLen, unsigned int addr) { + if (addr>=bufLen) return "???"; + + if (buf[addr]<0xb4) { + return fmt::sprintf("note %s",noteNames[buf[addr]]); + } else switch (buf[addr]) { + case 0xb4: + return "note null"; + break; + case 0xb5: + return "off"; + break; + case 0xb6: + return "offrel"; + break; + case 0xb7: + return "mrel"; + break; + case 0xb8: + return fmt::sprintf("ins $%.2x",(int)buf[addr+1]); + break; + case 0xbe: + return fmt::sprintf("pan $%x, $%x",(int)buf[addr+1],(int)buf[addr+2]); + break; + case 0xc0: + return fmt::sprintf("preporta $%.2x",(int)buf[addr+1]); + break; + case 0xc2: + return fmt::sprintf("vib %d, %d",(int)buf[addr+1],(int)buf[addr+2]); + break; + case 0xc3: + return fmt::sprintf("vibrange %d",(int)buf[addr+1]); + break; + case 0xc4: + return fmt::sprintf("vibshape %d",(int)buf[addr+1]); + break; + case 0xc5: + return fmt::sprintf("pitch $%.2x",(int)buf[addr+1]); + break; + case 0xc6: + return fmt::sprintf("arp %d, %d",(int)buf[addr+1],(int)buf[addr+2]); + break; + case 0xc7: + return fmt::sprintf("vol $%.2x",(int)buf[addr+1]); + break; + case 0xc8: + return fmt::sprintf("volslide %d",(int)((short)(buf[addr+1]|(buf[addr+2]<<8)))); + break; + case 0xc9: + return fmt::sprintf("porta %d, %d",(int)buf[addr+1],(int)buf[addr+2]); + break; + case 0xca: + return fmt::sprintf("legato %d",(int)buf[addr+1]); + break; + case 0xe0: case 0xe1: case 0xe2: case 0xe3: + case 0xe4: case 0xe5: case 0xe6: case 0xe7: + case 0xe8: case 0xe9: case 0xea: case 0xeb: + case 0xec: case 0xed: case 0xee: case 0xef: + return fmt::sprintf("qwait (%d)",(int)(buf[addr]-0xe0)); + break; + case 0xfc: + return fmt::sprintf("waits %d",(int)(buf[addr+1]|(buf[addr+2]<<8))); + break; + case 0xfd: + return fmt::sprintf("waitc %d",(int)buf[addr+1]); + break; + case 0xfe: + return "wait 1"; + break; + case 0xff: + return "stop"; + break; + default: + return "ill"; + break; + } return "TODO"; } @@ -124,6 +201,44 @@ void FurnaceGUI::drawCSPlayer() { ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Trace")) { + ImGui::PushFont(patFont); + if (ImGui::BeginTable("CSTrace",chans,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollX)) { + char tempID[32]; + for (int i=0; igetChanState(i); + ImGui::TableNextColumn(); + ImGui::Text("%d: $%.4x",i,state->readPos); + } + + ImGui::TableNextRow(); + unsigned char* buf=cs->getData(); + size_t bufSize=cs->getDataLen(); + for (int i=0; igetChanState(i); + ImGui::TableNextColumn(); + int maxItems=(ImGui::GetContentRegionAvail().y/MAX(ImGui::GetTextLineHeightWithSpacing(),1.0f)); + if (maxItems>=DIV_MAX_CSTRACE) maxItems=DIV_MAX_CSTRACE-1; + + int tracePos=state->tracePos; + + for (int j=(tracePos-maxItems)&(DIV_MAX_CSTRACE-1); j!=tracePos; j=(j+1)&(DIV_MAX_CSTRACE-1)) { + if (state->trace[j]==0) { + ImGui::TextUnformatted("..."); + } else { + String dis=disasmCmd(buf,bufSize,state->trace[j]); + ImGui::Text("%.4x: %s",state->trace[j],dis.c_str()); + } + } + } + + ImGui::EndTable(); + } + ImGui::PopFont(); ImGui::EndTabItem(); } if (ImGui::BeginTabItem("Disassemble")) { From 3e645e58f2b72a45515ac8aaa94b29f489fd48c0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Mar 2024 03:27:44 -0500 Subject: [PATCH 021/134] fix status view --- src/gui/csPlayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index 825f65acb..bc43fe99f 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -139,7 +139,7 @@ void FurnaceGUI::drawCSPlayer() { if (ImGui::BeginTabBar("CSOptions")) { int chans=e->getTotalChannelCount(); if (ImGui::BeginTabItem("Status")) { - if (ImGui::BeginTable("CSStat",11,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { + if (ImGui::BeginTable("CSStat",12,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { ImGui::TableSetupScrollFreeze(1,1); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextColumn(); From 0ac63d817d175c23435fdb78916c6492ed7052be Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Mar 2024 13:21:50 -0500 Subject: [PATCH 022/134] ESFM: add "fast" mode alters ESFMu to add a fast feedback calculation path --- extern/ESFMu/README.md | 4 ++++ extern/ESFMu/esfm.c | 9 +++++++++ extern/ESFMu/esfm.h | 6 +++++- extern/ESFMu/esfm_registers.c | 3 ++- src/engine/dispatchContainer.cpp | 5 +++++ src/engine/platform/esfm.cpp | 6 +++++- src/engine/platform/esfm.h | 2 ++ src/gui/about.cpp | 2 +- src/gui/fmPreview.cpp | 2 +- src/gui/gui.h | 4 ++++ src/gui/settings.cpp | 24 ++++++++++++++++++++++++ src/main.cpp | 2 +- 12 files changed, 63 insertions(+), 6 deletions(-) diff --git a/extern/ESFMu/README.md b/extern/ESFMu/README.md index 5e04ef6fb..723f17967 100644 --- a/extern/ESFMu/README.md +++ b/extern/ESFMu/README.md @@ -1,3 +1,7 @@ +# MODIFIED + +this is a modified version of ESFMu which adds a "fast" mode that uses OPL3 feedback calculation rather than patent workaround calculation (which is slow but accurate). + # ESFMu An emulator for the ESS "ESFM" enhanced OPL3 clone, based on Nuke.YKT's **Nuked OPL3** and reverse-engineering efforts from the community. diff --git a/extern/ESFMu/esfm.c b/extern/ESFMu/esfm.c index b7373d58a..dc8cccfc4 100644 --- a/extern/ESFMu/esfm.c +++ b/extern/ESFMu/esfm.c @@ -1776,6 +1776,14 @@ ESFM_process_feedback(esfm_chip *chip) phase_acc = (uint32_t)(slot->in.phase_acc - phase_offset * 28); eg_output = slot->in.eg_output; + if (chip->fast_mode) { + phase_feedback = (slot->in.fb_out0 + slot->in.fb_out1) >> 2; + slot->in.fb_out1 = slot->in.fb_out0; + phase = phase_feedback >> mod_in_shift; + phase += phase_acc >> 9; + wave_out = slot->in.fb_out0 = ESFM_envelope_wavegen(waveform, phase, eg_output); + phase_acc += phase_offset; + } else { // ASM optimizaions! #if defined(__GNUC__) && defined(__x86_64__) asm ( @@ -1974,6 +1982,7 @@ ESFM_process_feedback(esfm_chip *chip) phase_acc += phase_offset; } #endif + } // TODO: Figure out - is this how the ESFM chip does it, like the // patent literally says? (it's really hacky...) diff --git a/extern/ESFMu/esfm.h b/extern/ESFMu/esfm.h index f33567aeb..73100ce57 100644 --- a/extern/ESFMu/esfm.h +++ b/extern/ESFMu/esfm.h @@ -58,7 +58,7 @@ typedef struct _esfm_channel esfm_channel; typedef struct _esfm_chip esfm_chip; -void ESFM_init (esfm_chip *chip); +void ESFM_init (esfm_chip *chip, uint8_t fast); void ESFM_write_reg (esfm_chip *chip, uint16_t address, uint8_t data); void ESFM_write_reg_buffered (esfm_chip *chip, uint16_t address, uint8_t data); void ESFM_write_reg_buffered_fast (esfm_chip *chip, uint16_t address, uint8_t data); @@ -148,6 +148,8 @@ typedef struct _esfm_slot_internal uint16 eg_delay_counter; uint16 eg_delay_counter_compare; + uint16 fb_out0; + uint16 fb_out1; } esfm_slot_internal; struct _esfm_slot @@ -270,6 +272,8 @@ struct _esfm_chip size_t write_buf_start; size_t write_buf_end; uint64_t write_buf_timestamp; + + flag fast_mode; }; #ifdef __cplusplus diff --git a/extern/ESFMu/esfm_registers.c b/extern/ESFMu/esfm_registers.c index d87a5944f..3c944e86d 100644 --- a/extern/ESFMu/esfm_registers.c +++ b/extern/ESFMu/esfm_registers.c @@ -948,7 +948,7 @@ ESFM_set_mode (esfm_chip *chip, bool native_mode) /* ------------------------------------------------------------------------- */ void -ESFM_init (esfm_chip *chip) +ESFM_init (esfm_chip *chip, uint8_t fast) { esfm_slot *slot; esfm_channel *channel; @@ -999,5 +999,6 @@ ESFM_init (esfm_chip *chip) } chip->lfsr = 1; + chip->fast_mode = fast; } diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 8118c4a54..7146e90c6 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -649,6 +649,11 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do break; case DIV_SYSTEM_ESFM: dispatch=new DivPlatformESFM; + if (isRender) { + ((DivPlatformESFM*)dispatch)->setFast(eng->getConfInt("esfmCoreRender",0)); + } else { + ((DivPlatformESFM*)dispatch)->setFast(eng->getConfInt("esfmCore",0)); + } break; case DIV_SYSTEM_POWERNOISE: dispatch=new DivPlatformPowerNoise; diff --git a/src/engine/platform/esfm.cpp b/src/engine/platform/esfm.cpp index 090254a00..3adab20f5 100644 --- a/src/engine/platform/esfm.cpp +++ b/src/engine/platform/esfm.cpp @@ -983,7 +983,7 @@ int DivPlatformESFM::getRegisterPoolSize() { void DivPlatformESFM::reset() { while (!writes.empty()) writes.pop(); - ESFM_init(&chip); + ESFM_init(&chip,isFast?1:0); // set chip to native mode ESFM_write_reg(&chip, 0x105, 0x80); // ensure NTS bit in register 0x408 is reset, for smooth envelope rate scaling @@ -1053,6 +1053,10 @@ void DivPlatformESFM::setFlags(const DivConfig& flags) { rate=chipClock/288.0; } +void DivPlatformESFM::setFast(bool fast) { + isFast=fast; +} + int DivPlatformESFM::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { parent=p; dumpWrites=false; diff --git a/src/engine/platform/esfm.h b/src/engine/platform/esfm.h index 58fafbfab..8321369bf 100644 --- a/src/engine/platform/esfm.h +++ b/src/engine/platform/esfm.h @@ -120,6 +120,7 @@ class DivPlatformESFM: public DivDispatch { }; FixedQueue writes; esfm_chip chip; + bool isFast; unsigned char regPool[ESFM_REG_POOL_SIZE]; short oldWrites[ESFM_REG_POOL_SIZE]; @@ -201,6 +202,7 @@ class DivPlatformESFM: public DivDispatch { void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); void setFlags(const DivConfig& flags); + void setFast(bool fast); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformESFM(); diff --git a/src/gui/about.cpp b/src/gui/about.cpp index a20be2cc7..56da97c73 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -216,7 +216,7 @@ const char* aboutLine[]={ "adpcm by superctr", "Nuked-OPL3/OPLL/OPM/OPN2/PSG by nukeykt", "YM3812-LLE, YMF262-LLE and YMF276-LLE by nukeykt", - "ESFMu by Kagamiin~", + "ESFMu (modified version) by Kagamiin~", "ymfm by Aaron Giles", "MAME SN76496 by Nicola Salmoria", "MAME AY-3-8910 by Couriersud", diff --git a/src/gui/fmPreview.cpp b/src/gui/fmPreview.cpp index 525d30339..7c034e3d9 100644 --- a/src/gui/fmPreview.cpp +++ b/src/gui/fmPreview.cpp @@ -350,7 +350,7 @@ void FurnaceGUI::renderFMPreviewESFM(const DivInstrumentFM& params, const DivIns bool mult0=false; if (pos==0) { - ESFM_init((esfm_chip*)fmPreviewESFM); + ESFM_init((esfm_chip*)fmPreviewESFM,0); // set native mode ESFM_WRITE(0x105, 0x80); diff --git a/src/gui/gui.h b/src/gui/gui.h index 3bda6b320..1188d78d1 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1638,6 +1638,7 @@ class FurnaceGUI { int opnCore; int opl2Core; int opl3Core; + int esfmCore; int arcadeCoreRender; int ym2612CoreRender; int snCoreRender; @@ -1648,6 +1649,7 @@ class FurnaceGUI { int opnCoreRender; int opl2CoreRender; int opl3CoreRender; + int esfmCoreRender; int pcSpeakerOutMethod; String yrw801Path; String tg100Path; @@ -1843,6 +1845,7 @@ class FurnaceGUI { opnCore(1), opl2Core(0), opl3Core(0), + esfmCore(0), arcadeCoreRender(1), ym2612CoreRender(0), snCoreRender(0), @@ -1853,6 +1856,7 @@ class FurnaceGUI { opnCoreRender(1), opl2CoreRender(0), opl3CoreRender(0), + esfmCoreRender(0), pcSpeakerOutMethod(0), yrw801Path(""), tg100Path(""), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index f19dc9d04..68e30445d 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -169,6 +169,11 @@ const char* opl3Cores[]={ "YMF262-LLE" }; +const char* esfmCores[]={ + "ESFMu", + "ESFMu (fast)" +}; + const char* pcspkrOutMethods[]={ "evdev SND_TONE", "KIOCSOUND on /dev/tty1", @@ -1629,6 +1634,17 @@ void FurnaceGUI::drawSettings() { ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); if (ImGui::Combo("##OPL3CoreRender",&settings.opl3CoreRender,opl3Cores,3)) settingsChanged=true; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("ESFM"); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::Combo("##ESFMCore",&settings.esfmCore,esfmCores,2)) settingsChanged=true; + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::Combo("##ESFMCoreRender",&settings.esfmCoreRender,esfmCores,2)) settingsChanged=true; + ImGui::EndTable(); } ImGui::Separator(); @@ -4108,6 +4124,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { settings.opnCore=conf.getInt("opnCore",1); settings.opl2Core=conf.getInt("opl2Core",0); settings.opl3Core=conf.getInt("opl3Core",0); + settings.esfmCore=conf.getInt("esfmCore",0); settings.arcadeCoreRender=conf.getInt("arcadeCoreRender",1); settings.ym2612CoreRender=conf.getInt("ym2612CoreRender",0); settings.snCoreRender=conf.getInt("snCoreRender",0); @@ -4118,6 +4135,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { settings.opnCoreRender=conf.getInt("opnCoreRender",1); settings.opl2CoreRender=conf.getInt("opl2CoreRender",0); settings.opl3CoreRender=conf.getInt("opl3CoreRender",0); + settings.esfmCoreRender=conf.getInt("esfmCoreRender",0); settings.pcSpeakerOutMethod=conf.getInt("pcSpeakerOutMethod",0); @@ -4146,6 +4164,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { clampSetting(settings.opnCore,0,1); clampSetting(settings.opl2Core,0,2); clampSetting(settings.opl3Core,0,2); + clampSetting(settings.esfmCore,0,1); clampSetting(settings.arcadeCoreRender,0,1); clampSetting(settings.ym2612CoreRender,0,2); clampSetting(settings.snCoreRender,0,1); @@ -4156,6 +4175,7 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { clampSetting(settings.opnCoreRender,0,1); clampSetting(settings.opl2CoreRender,0,2); clampSetting(settings.opl3CoreRender,0,2); + clampSetting(settings.esfmCoreRender,0,1); clampSetting(settings.pcSpeakerOutMethod,0,4); clampSetting(settings.mainFont,0,6); clampSetting(settings.patFont,0,6); @@ -4579,6 +4599,7 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { conf.set("opnCore",settings.opnCore); conf.set("opl2Core",settings.opl2Core); conf.set("opl3Core",settings.opl3Core); + conf.set("esfmCore",settings.esfmCore); conf.set("arcadeCoreRender",settings.arcadeCoreRender); conf.set("ym2612CoreRender",settings.ym2612CoreRender); conf.set("snCoreRender",settings.snCoreRender); @@ -4589,6 +4610,7 @@ void FurnaceGUI::writeConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { conf.set("opnCoreRender",settings.opnCoreRender); conf.set("opl2CoreRender",settings.opl2CoreRender); conf.set("opl3CoreRender",settings.opl3CoreRender); + conf.set("esfmCoreRender",settings.esfmCoreRender); conf.set("pcSpeakerOutMethod",settings.pcSpeakerOutMethod); @@ -4629,6 +4651,7 @@ void FurnaceGUI::commitSettings() { settings.opnCore!=e->getConfInt("opnCore",1) || settings.opl2Core!=e->getConfInt("opl2Core",0) || settings.opl3Core!=e->getConfInt("opl3Core",0) || + settings.esfmCore!=e->getConfInt("esfmCore",0) || settings.arcadeCoreRender!=e->getConfInt("arcadeCoreRender",0) || settings.ym2612CoreRender!=e->getConfInt("ym2612CoreRender",0) || settings.snCoreRender!=e->getConfInt("snCoreRender",0) || @@ -4639,6 +4662,7 @@ void FurnaceGUI::commitSettings() { settings.opnCoreRender!=e->getConfInt("opnCoreRender",1) || settings.opl2CoreRender!=e->getConfInt("opl2CoreRender",0) || settings.opl3CoreRender!=e->getConfInt("opl3CoreRender",0) || + settings.esfmCoreRender!=e->getConfInt("esfmCoreRender",0) || settings.audioQuality!=e->getConfInt("audioQuality",0) || settings.audioHiPass!=e->getConfInt("audioHiPass",1) ); diff --git a/src/main.cpp b/src/main.cpp index 0dcbcfa5a..8601b48c4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -212,7 +212,7 @@ TAParamResult pVersion(String) { printf("- YM3812-LLE by nukeykt (GPLv2)\n"); printf("- YMF262-LLE by nukeykt (GPLv2)\n"); printf("- YMF276-LLE by nukeykt (GPLv2)\n"); - printf("- ESFMu by Kagamiin~ (LGPLv2.1)\n"); + printf("- ESFMu (modified version) by Kagamiin~ (LGPLv2.1)\n"); printf("- ymfm by Aaron Giles (BSD 3-clause)\n"); printf("- adpcm by superctr (public domain)\n"); printf("- MAME SN76496 emulation core by Nicola Salmoria (BSD 3-clause)\n"); From 98396beda9eabef607acda0fc1fec3d31ac5cc0c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Mar 2024 13:49:14 -0500 Subject: [PATCH 023/134] dev194 - OPLL: enable fixedAll by default issue #1648 --- src/engine/engine.h | 4 ++-- src/engine/fileOps/fur.cpp | 12 ++++++++++++ src/engine/platform/opll.cpp | 2 +- src/gui/sysConf.cpp | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index e5088d620..879603b40 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ class DivWorkPool; #define DIV_UNSTABLE -#define DIV_VERSION "dev193" -#define DIV_ENGINE_VERSION 193 +#define DIV_VERSION "dev194" +#define DIV_ENGINE_VERSION 194 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/fileOps/fur.cpp b/src/engine/fileOps/fur.cpp index 82054dd6c..a90643c15 100644 --- a/src/engine/fileOps/fur.cpp +++ b/src/engine/fileOps/fur.cpp @@ -2052,6 +2052,18 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } } + // OPLL fixedAll compat + if (ds.version<194) { + for (int i=0; irate=rate/2; } noTopHatFreq=flags.getBool("noTopHatFreq",false); - fixedAll=flags.getBool("fixedAll",false); + fixedAll=flags.getBool("fixedAll",true); } int DivPlatformOPLL::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index be0609c98..73f05ec74 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -396,7 +396,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl int clockSel=flags.getInt("clockSel",0); int patchSet=flags.getInt("patchSet",0); bool noTopHatFreq=flags.getBool("noTopHatFreq",false); - bool fixedAll=flags.getBool("fixedAll",false); + bool fixedAll=flags.getBool("fixedAll",true); ImGui::Text("Clock rate:"); ImGui::Indent(); From 7f4a8d276cd0f1bf4ea16f4577f098f21a57f73f Mon Sep 17 00:00:00 2001 From: Eknous <61464512+Eknous-P@users.noreply.github.com> Date: Mon, 11 Mar 2024 22:54:03 +0400 Subject: [PATCH 024/134] remove duplicate demo (#1787) * remove duplicate demo * rename --- demos/misc/Galactic_Melody.fur | Bin 1848 -> 0 bytes demos/misc/Galactic_Melody_PowerNoise.fur | Bin 1828 -> 1848 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 demos/misc/Galactic_Melody.fur diff --git a/demos/misc/Galactic_Melody.fur b/demos/misc/Galactic_Melody.fur deleted file mode 100644 index cf7e2bbc6a4381712bcab629d97820a55bfba90a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1848 zcmV-82gmq$oXuEWXdG1(J~MZB?#%v8+B7!lqFq!3l?wJr5p7d#C1SUsMyb%E>t?f? zzfRoUHpWW3(-<&nA4Cxf`XaPX`XH?ZUqnTH6GZzW2wen0@WuKd)tB|VXMXmkwrLt0 z>g;}d&pG#;bMHCl-a9k9W!Itl!BV+WnD#~wO;xshPDBOjUPHxQdj=99gfNI^c5J7+ zDAAMVzU{zyTK?L8jq4ibH~o6NG*v1$$IFG?l__s@jz&r|m8Y8C!3z3*dX!AlP+Eo& z=^Ms8vh^#lBT4iXu)`wy0Qd`dLlRv8hHawLK%YZ&2e2Rb6xfs^dI|UzxBy%POeDJ( zcpmr&_#4=lAvy*80c^_>y$SpP4CILJ1s(>9z;nQ9;2iJ`a31&t_!GFzC3+9|2Dk)l z?IEfHCxLUokHD^V7z>yHjsR~0=YZdU?dys50%hPe!0IL10Ne>&1U}n7>~3t|HX zHeznTATS2ZZdBp#7X4pyHrQ zgUwQXyzoM)(bzKHsL}4hhv1K#PDiE1b+g$_%5h}U2n3WfC?MQW;`S=y3o^dEMAR8B zLbS7}2HDGlJcvOoYSzXNR^j_W)W7c2qPB}(X_KYA(8I2iRb^@8KM_3=}+#%ZahWQ|1r_`b40&au>;S9 zv58;?hvOMYs*M+Fr6#7ZUriwyP9c>v*KG8Cab`0?W(%X0snXnK`IW2A@18iiUh-y3 zmwhqJ-P$mjC??sP36_T1%u>4U=FQu-=?miZ*li{#TcKPp@sgWV{x*c`DVNQp(<#Tc zrIk!3)G@VYiF`7iQIe)ArO`NpK_HoAwAlYOuF=z7{$bRez~{JDoW_fXO7%*iS+7jP z^%KhVdg?}rASEA$nQYFDV!Z$A)pDb1xq7vVaS%4Ck-RAngFUdK!Qx$P^u`Mz@LG+% z_Gm{$6v|^O^S-jfVt8<*Xhp|gM{)Ou$1;f%V&N+A#Xgf54O7u<_%sDK2-V@UQiEHi z6e*J?_gARL&YxxH;s!f!FwX-#!vo-;md8w2G_005W}Uny?&xV0*0U0!o$h85AXe0{v;OoSED zvwVF#JL5+|^<*hMa(z)I-#F_FkFHKGTxpd&!fvn&mNmVW7v4FB+Br2x+e?O2d&$xE zlA$(n&CvwBmmDpm^nVS>4i8c?&T707^L$|A)=b@5n5rnPq$WUO#nC`eV1Y`}E6GK1 z1n9O4X#LRdVb+89&1LDfI=-k%UrYd=^z&ueqJK#`1PMWc>`Tg5p%ZhW0ZE;8RNtg* zwXg_dts1BamU)s#=QjdV9aT-aC}x2p((g}V+&xC_1I!7Tc}FS$e?c)c!h1=?*F;dpCDC}<8ndFOVtuuw%o#&>UccP z+9&cY_J54I#r#p`=3sPGs#cp|`dY))Fx*&R(Z?1UF5>%Q9;G=B%m?+$b7z(d`XORH zn)IQDX##VBN`+N$ym3`-ROS5qG%DmPngY7JHB7un%Z8h;sT&rij4S{Yxc2`zXXjd(2Xn5 zfiu#b266Ud&P^w)g*BkoVi4A?EZC%K?<@)r=(Y=JwVk%{ChasUe3sHq8__*ozGfb$ zOTK2b)NcZg^OH_<)EXnRU_!F z#%w2Gai>yQY$*<{_R9n8;{jy2j&HnwKG=kiO^aWt}4c diff --git a/demos/misc/Galactic_Melody_PowerNoise.fur b/demos/misc/Galactic_Melody_PowerNoise.fur index 91bfea9b0eba9c6de8a0753334ac9ce7fbddee71..cf7e2bbc6a4381712bcab629d97820a55bfba90a 100644 GIT binary patch literal 1848 zcmV-82gmq$oXuEWXdG1(J~MZB?#%v8+B7!lqFq!3l?wJr5p7d#C1SUsMyb%E>t?f? zzfRoUHpWW3(-<&nA4Cxf`XaPX`XH?ZUqnTH6GZzW2wen0@WuKd)tB|VXMXmkwrLt0 z>g;}d&pG#;bMHCl-a9k9W!Itl!BV+WnD#~wO;xshPDBOjUPHxQdj=99gfNI^c5J7+ zDAAMVzU{zyTK?L8jq4ibH~o6NG*v1$$IFG?l__s@jz&r|m8Y8C!3z3*dX!AlP+Eo& z=^Ms8vh^#lBT4iXu)`wy0Qd`dLlRv8hHawLK%YZ&2e2Rb6xfs^dI|UzxBy%POeDJ( zcpmr&_#4=lAvy*80c^_>y$SpP4CILJ1s(>9z;nQ9;2iJ`a31&t_!GFzC3+9|2Dk)l z?IEfHCxLUokHD^V7z>yHjsR~0=YZdU?dys50%hPe!0IL10Ne>&1U}n7>~3t|HX zHeznTATS2ZZdBp#7X4pyHrQ zgUwQXyzoM)(bzKHsL}4hhv1K#PDiE1b+g$_%5h}U2n3WfC?MQW;`S=y3o^dEMAR8B zLbS7}2HDGlJcvOoYSzXNR^j_W)W7c2qPB}(X_KYA(8I2iRb^@8KM_3=}+#%ZahWQ|1r_`b40&au>;S9 zv58;?hvOMYs*M+Fr6#7ZUriwyP9c>v*KG8Cab`0?W(%X0snXnK`IW2A@18iiUh-y3 zmwhqJ-P$mjC??sP36_T1%u>4U=FQu-=?miZ*li{#TcKPp@sgWV{x*c`DVNQp(<#Tc zrIk!3)G@VYiF`7iQIe)ArO`NpK_HoAwAlYOuF=z7{$bRez~{JDoW_fXO7%*iS+7jP z^%KhVdg?}rASEA$nQYFDV!Z$A)pDb1xq7vVaS%4Ck-RAngFUdK!Qx$P^u`Mz@LG+% z_Gm{$6v|^O^S-jfVt8<*Xhp|gM{)Ou$1;f%V&N+A#Xgf54O7u<_%sDK2-V@UQiEHi z6e*J?_gARL&YxxH;s!f!FwX-#!vo-;md8w2G_005W}Uny?&xV0*0U0!o$h85AXe0{v;OoSED zvwVF#JL5+|^<*hMa(z)I-#F_FkFHKGTxpd&!fvn&mNmVW7v4FB+Br2x+e?O2d&$xE zlA$(n&CvwBmmDpm^nVS>4i8c?&T707^L$|A)=b@5n5rnPq$WUO#nC`eV1Y`}E6GK1 z1n9O4X#LRdVb+89&1LDfI=-k%UrYd=^z&ueqJK#`1PMWc>`Tg5p%ZhW0ZE;8RNtg* zwXg_dts1BamU)s#=QjdV9aT-aC}x2p((g}V+&xC_1I!7Tc}FS$e?c)c!h1=?*F;dpCDC}<8ndFOVtuuw%o#&>UccP z+9&cY_J54I#r#p`=3sPGs#cp|`dY))Fx*&R(Z?1UF5>%Q9;G=B%m?+$b7z(d`XORH zn)IQDX##VBN`+N$ym3`-ROS5qG%DmPngY7JHB7un%Z8h;sT&rij4S{Yxc2`zXXjd(2Xn5 zfiu#b266Ud&P^w)g*BkoVi4A?EZC%K?<@)r=(Y=JwVk%{ChasUe3sHq8__*ozGfb$ zOTK2b)NcZg^OH_<)EXnRU_!F z#%w2Gai>yQY$*<{_R9n8;{jy2j&HnwKG=kiO^aWt}4c literal 1828 zcmV+<2iy2~oXwbDh*VV^$A9;pnS1V?e|L4=Tphx}G%zsG2oxb*|Ao?yq84TujJvZt z`}b}$qp~SFS6yfVp(p~O9(srndML7b>A{2`2qMBBB7-65A$sYld@!c(`Q3YG&aUga zZZ3LvKYM=XchB#4&hPxrIrrXOzx#N3ywF$7jd}gYM~myP5>bxY*Pi_DeYXSzAq=94 z?c3;aighIU-ZpTZ=DxPw<+_Xc1HYavj28N;Lw&j4;;7d@Nrws(#e-FEyoh@@c93Zr zs+D0x?G0lfM)Vz68z=e*thI=yzzr}iiLQaCY@#~22`q)?0r zH`swme-r!)wxoz&2S0(;X(A7N0d9dz1{nk!z;;jvm%wH4CHNNn3=Eg(EVvAQ0bLzL zd%~+Xeea5F5A!GRuk9 zfIZ;Iay4D1z>jIhL#r6}9#Hx?z{R8@KxKf$%%J6SB} zy`f5Rh9$1m(L!OHADRX*fdDZO2NsaP1`bGoBuIfY$N(1*HDKR>eFOFl*f(I`fPDk@ z4cIqe-++As_6^uKVBdg!1NO=`8jP@}U$h3n<-rlqvvbb@HSBOY#yKz>d9X;vokV5S zn<(O@5wlgxSm;xi_v8<5Jc{xvZK8aSOFh*>c_??RP^qjRs+6d=XAAt1(`>3~aouz} zm2eyxHv$D^3U}kgu#nHm#jQN!dp5J|~=sL+eS(x#QZq{ktq@tK)XDV14YQIY9x~o=g-KsB$ zH(G8}LE3VCSo|`NJ~!T)#HV7F;^`Y$KZOea=nz=Q6fmm=UpnDaibVF+&Norlr2}! zR=yR4O{ynv)I(>R=G9qi7aN_eg%EfhY)wbF=={#p6%HAi|kz7XXh2Ja|bVQ2RNwZ zS<@92t0vBxC@uuWJZm%qAF%gc_Kv*Wle_6PUxS?{*ePDEWGP{38st+Bgc^r6c-0d9 z2~B~&qAyVFVg)QkiF{E73oA8ecn1*!P?o{MO3hhHjUCDfu&`3gZ)TD5yDQu?!6fPv zGoSiwajQ3~1vzWiHD_j+5q*~Lt*$u}VMg>>zPCC%<5xlT@+duWebGn0am5!N-C3NP zZIwL3Zm;R;VdD9j}X1pj}R(^h3WVxE;K&>XUA*>5D<>i(%kN zKiem3bepD0&=543eM#9tv}x5u1)4IqQTIk*6Fh zCH?N$z*}$alta7&elGFqLGHRB5YPND5P#+B>|w8j>|Aj>U_jclPZH6eq0 zC&6j9dAs|!W_OHKPR_|GabBvDP_pHEwp7RCIc|M1TVwxcxmM4f;o2mO&PY{i15Dnn zyArw^2rRnTBE?C3Uz|s3&Vlnm{<3^C%?bS&v7U+hXog{e$)E{;VX03<&dUADoSz*- zhI}PcAh)-MiEm|Dv9!%%;!9Z$>zl<~qOz%N784)FV$jj@jW1+*$Vyzq30oJ3EFYW? z!SmVDa)9q>DDTv83aFAIBYxzXU2Nn}qcV$JnMDqqk?u5zvm0ZsI%zGe6>2R8VLi%< zl`8j6U3j2fPNCFx+VTgq)2#4aN;_>t`*it+>o{GqC8MVP#^5+R!tw~q9?KrfRhFwP zFLwI@mIqiavs|7-uLUC>!eH*Ly%tQ2rbj%?@-WL|ERW4OLl3^a77QLr*?zv!Kj*AW zusp%?!_~h1c_P%4vt+n6QV*n(p&s+fK~t*^8o}McR<#*a@uX6-SW`8W+F$PAFn1us zb$tK*^T8%;_2yy+M;-sWQ8 Date: Mon, 11 Mar 2024 14:56:49 -0400 Subject: [PATCH 025/134] Update name, fix and add demo songs (#1769) * Change name * Actual song changes * oops i alphabetized it wrong * Replace pong * This should not exist --- demos/ay8910/cardboardmywater.fur | Bin 915 -> 932 bytes demos/misc/morepain.fur | Bin 0 -> 1107 bytes demos/misc/walkontheroof.fur | Bin 0 -> 1122 bytes src/gui/about.cpp | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 demos/misc/morepain.fur create mode 100644 demos/misc/walkontheroof.fur diff --git a/demos/ay8910/cardboardmywater.fur b/demos/ay8910/cardboardmywater.fur index 9f67d1ca6df08c4e93880cd46e8cb4a2215efc57..e65b5bc3f1c2ed15b43284ef07a882e8b233b095 100644 GIT binary patch literal 932 zcmV;V16%xfoYhp#ZyQw*pZDQi$Dc?DTFPZX^aDX95+T%9ji{40Rn*p0aiyY)BDT(! z#NBuuuN@_Dz!CHU_g*+~q<=uwb5BUz_yagBM-Dwy>fQX_>|4i9qZ(8y!LxsFX5O3M z%$s?;dvdAYZTro@+lW^CVQ}&h5qY#Xmg`HO{3@Y1jw0$ToTD=7S6tq!0t0&fI5%ZX zq0^;hmVBJ9X*Z zeGxF;&dOx&Z$kk{Kmi)a0S@2-d0+-807ak#lz|FR1&9*x6Yvx86Yvx86Yvx86Yvx8 z6Yvx86Yvx86Yvx84L2=_gtKqZMKs_h5CTh=YZvQqZLY0%uI+S!`40-sFlydu1mXN_ zq1lgn(Z-@#z{Z*%-cI$~ei#RZ7}p;}6GkKGz>#X_mscw30f=04J4)vqv+8E6#7^3F zY`NZ;I}Z7X9IDrfv}_(G?{eU;(v@0;aM5ZwG{sb_mEncDaX&M1&yjUJZXEOM=u~IQ z?u^b!Q6eVNt9y5TK!gQ9j%@@b(p1{9O34*z44Jozwh=xYi*RYZc?S{Rnm8<80UK-- zR#@)o5!azc+wTS-A2sBhC0EKNk~%exyz%;L`vc650+eVW>bLRLvVAyY!j#xsn=r*f zp;#(cs+KrEB38zU-duM41E?ac!x5%=S8Lbmr|pwYZ-$g8)gl#=nIlr|Y~Exgo>(ll zs5~?Q?o#@ik@`aJs!$q<2$EG6W{zOo!hV}20;EeU%-oVM%ICwJ;KSg3P@lnhO&Uq+ z^E5t-bUs`Z?C;p(iLD^}f~ZgoR0{~jE+k3@+T!0@=Vae-GRety)wWPu*xM4RreYYI zBf>810c;2}XVF{Yg~)u2n|usqYtFC@Yyl~A0MedpjrmRY&a2|g14g!y-UIm1!T z;FvOUcU1(mffiuw7}zvx4m+>2vpZ@%amP#xjs7+8m9-~3X`1%!Go1ZCS=Wu9z3V(D z#4H}L&EGJIyZ>ID)uTUe{lZ)389b}T{(92^pt82V*dr3 GgtogdM$-lW literal 915 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 literal 0 HcmV?d00001 diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 56da97c73..ce19fe3a0 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -70,7 +70,6 @@ const char* aboutLine[]={ "Abstract 64", "Aburtos", "ActualNK358", - "airconmanws", "akumanatt", "AmigaX", "AquaDoesStuff", @@ -99,6 +98,7 @@ const char* aboutLine[]={ "dumbut", "Eknous", "Electric Keet", + "EntropyAuthor", "EpicTyphlosion", "FΛDE", "Forte", From ec10046964d603b733eb7a10e5df735780346974 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Mar 2024 13:57:51 -0500 Subject: [PATCH 026/134] rename two demo songs --- demos/misc/{morepain.fur => morepain_TIA.fur} | Bin .../{walkontheroof.fur => walkontheroof_T6W28.fur} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename demos/misc/{morepain.fur => morepain_TIA.fur} (100%) rename demos/misc/{walkontheroof.fur => walkontheroof_T6W28.fur} (100%) diff --git a/demos/misc/morepain.fur b/demos/misc/morepain_TIA.fur similarity index 100% rename from demos/misc/morepain.fur rename to demos/misc/morepain_TIA.fur diff --git a/demos/misc/walkontheroof.fur b/demos/misc/walkontheroof_T6W28.fur similarity index 100% rename from demos/misc/walkontheroof.fur rename to demos/misc/walkontheroof_T6W28.fur From 463c9a89bbaf872d2f7f34c4150f165c84d227f0 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Tue, 30 Jan 2024 12:17:24 +0700 Subject: [PATCH 027/134] Lynx: Add a chip config for constant tone frequency --- src/engine/platform/lynx.cpp | 68 ++++++++++++++++++++++++++++++------ src/engine/platform/lynx.h | 3 ++ src/gui/sysConf.cpp | 13 +++++++ 3 files changed, 73 insertions(+), 11 deletions(-) diff --git a/src/engine/platform/lynx.cpp b/src/engine/platform/lynx.cpp index 5d9100f8c..a2e9795a6 100644 --- a/src/engine/platform/lynx.cpp +++ b/src/engine/platform/lynx.cpp @@ -34,7 +34,6 @@ #define WRITE_ATTEN(ch,v) rWrite((0x40+ch),(v)) #define WRITE_STEREO(v) rWrite(0x50,(v)) -#define CHIP_DIVIDER 64 #define CHIP_FREQBASE 16000000 static int32_t clamp(int32_t v, int32_t lo, int32_t hi) @@ -42,6 +41,41 @@ static int32_t clamp(int32_t v, int32_t lo, int32_t hi) return vhi?hi:v); } +const int DUTY_DIVIDERS[]={ + 1, 2, 4, 3, 6, 7, 7, 4, 8, 15, 6, 14, 15, 12, 14, 5, + 10, 21, 31, 28, 31, 30, 12, 31, 21, 8, 30, 31, 28, 31, 31, 6, + 12, 63, 14, 62, 9, 28, 62, 15, 14, 42, 8, 21, 62, 63, 15, 60, + 63, 20, 42, 63, 28, 12, 63, 62, 62, 63, 21, 24, 15, 62, 60, 7, + 16, 63, 30, 254, 217, 84, 186, 217, 12, 254, 28, 15, 254, 51, 255, 84, + 217, 120, 210, 63, 60, 255, 255, 254, 254, 217, 63, 252, 17, 42, 124, 85, + 30, 254, 24, 217, 210, 21, 255, 252, 28, 217, 10, 186, 63, 124, 254, 255, + 186, 255, 255, 56, 255, 70, 36, 30, 255, 60, 254, 85, 124, 85, 21, 254, + 22,1533,2047, 868,1953,2046, 420, 651,1533,2044,2046,2047,1016,1785, 105, 126, + 595, 630, 204,1533,1302,2047,2047,2044,2044, 119, 372,1778,1953, 120, 682,1905, + 595, 868, 510,2047,2044, 762, 279, 682, 210,1953, 595,1524,1533, 210, 248, 635, + 60,2047,2047, 62,1905,2044,2046, 42,2047, 510, 252,1905,1778,2047,1533,1016, + 1953,1860,1778, 219, 48,1905,2047,1778, 682,2047, 465,1020,1785, 126,2044, 434, + 2044, 63,2047,2046,2047, 280, 30,1953, 210, 682, 868, 89,2046,2047,2047,1524, + 1302,1785,2047,1860,2047,2046,1016, 372,2047, 84, 630, 70, 252,2047,1533, 682, + 1905,2046, 372,1905, 90,1533, 217, 168, 340,2047,2047,1302,1533, 28, 186,2047, + 24,3255, 126,1190, 45,4092, 178, 315, 28, 438, 124, 315,3570, 255,1023,2044, + 819,1016, 930,3937,1260,1302, 511,4094,3810, 819, 195,2604,1023,4094, 84,1365, + 18,3810, 56,1023, 42,3937, 819,4092, 124,4095, 30,4094, 85,1524,3906, 63, + 3906,1023,3255, 120,4095,3570,1020,3937,2667,3556,4094, 195,2044,4095,4095, 762, + 28,1302, 84,4095,3906,1023, 255, 292, 16,1085, 42,3066, 315,3556,4094,4095, + 3066,4095,3937, 372, 511,4094, 620,1302, 273, 504,1190, 819,4092,4095,1023, 210, + 124,1023, 126,3570,3937, 252, 438,4095, 30,4094, 120,4095,4094, 255, 63,1020, + 4095,1364, 558,2667, 420,4095, 105,1270,1190,3255, 93,1016, 91, 372,4092,3937, + 3255, 44,3066,1365,1736, 510, 91,4094,1302, 511,3937, 420, 105,3906,4092, 819, + 252, 585, 255, 210,3937,1016,3570,1023, 455,3066,2044,1365,4094, 126,2667,4092, + 3810, 93, 63,1364,1365,3906, 120, 28,1023,2044, 238,4095,3556, 255,4095, 372, + 511,1190,1260,1023,3066, 255, 819, 408,2044, 255,1302,4094, 455,2604,4094, 585, + 438, 511, 455, 292, 455, 434,1364, 102,1085, 204,3570, 255, 240,4095, 93,4094, + 3937,4094, 84, 63,4094, 315, 819, 140,1260,3937,4095,3066,2667, 680,4094, 511, + 4095,2044, 178,1023,1020, 819, 21,3810,4094, 20,1023,3556,3937, 210,2040, 273, + 252,2667,4095,3906, 63, 124, 930, 455, 510,4094,4092, 511,3570,4095, 30, 744 +}; + const char* regCheatSheetLynx[]={ "AUDIO0_VOLCNTRL", "20", "AUDIO0_FEEDBACK", "21", @@ -134,6 +168,7 @@ void DivPlatformLynx::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { + double CHIP_DIVIDER=tuned?DUTY_DIVIDERS[chan[i].duty.val&0x1ff]*8:64; chan[i].actualNote=parent->calcArp(chan[i].note,chan[i].std.arp.val); chan[i].baseFreq=NOTE_PERIODIC(chan[i].actualNote); if (chan[i].pcm) chan[i].sampleBaseFreq=NOTE_FREQUENCY(chan[i].actualNote); @@ -194,28 +229,35 @@ void DivPlatformLynx::tick(bool sysTick) { WRITE_OTHER(i, ((chan[i].lfsr&0xf00)>>4)); chan[i].lfsr=-1; } - chan[i].fd=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER); if (chan[i].std.duty.had) { chan[i].duty=chan[i].std.duty.val; if (!chan[i].pcm) { WRITE_FEEDBACK(i, chan[i].duty.feedback); } } + double divider=tuned?DUTY_DIVIDERS[chan[i].duty.val&0x1ff]*8:64; + chan[i].fd=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,divider); WRITE_CONTROL(i, (chan[i].fd.clockDivider|0x18|chan[i].duty.int_feedback7)); WRITE_BACKUP( i, chan[i].fd.backup ); } chan[i].freqChanged=false; } else if (chan[i].std.duty.had) { - chan[i].duty = chan[i].std.duty.val; + chan[i].duty=chan[i].std.duty.val; if (!chan[i].pcm) { + if (tuned) { + double divider=DUTY_DIVIDERS[chan[i].duty.val&0x1ff]*8; + chan[i].fd=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,divider); + } WRITE_FEEDBACK(i, chan[i].duty.feedback); WRITE_CONTROL(i, (chan[i].fd.clockDivider|0x18|chan[i].duty.int_feedback7)); + if (tuned) WRITE_BACKUP( i, chan[i].fd.backup ); } } } } int DivPlatformLynx::dispatch(DivCommand c) { + double CHIP_DIVIDER=tuned?DUTY_DIVIDERS[chan[c.chan].duty.val&0x1ff]*8:64; switch (c.cmd) { case DIV_CMD_NOTE_ON: { bool prevPCM=chan[c.chan].pcm; @@ -455,6 +497,16 @@ bool DivPlatformLynx::getLegacyAlwaysSetVolume() { // return 12; //} +void DivPlatformLynx::setFlags(const DivConfig& flags) { + tuned=flags.getBool("tuned",false); + chipClock=16000000; + CHECK_CUSTOM_CLOCK; + rate=chipClock/128; + for (int i=0; i<4; i++) { + oscBuf[i]->rate=rate; + } +} + void DivPlatformLynx::notifyInsDeletion(void* ins) { for (int i=0; i<4; i++) { chan[i].std.notifyInsDeletion((DivInstrument*)ins); @@ -478,14 +530,7 @@ int DivPlatformLynx::init(DivEngine* p, int channels, int sugRate, const DivConf isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } - - chipClock = 16000000; - CHECK_CUSTOM_CLOCK; - rate = chipClock/128; - - for (int i=0; i<4; i++) { - oscBuf[i]->rate=rate; - } + setFlags(flags); reset(); return 4; @@ -533,6 +578,7 @@ DivPlatformLynx::MikeyDuty::MikeyDuty(int duty) { //1: f1 //0: f0 + val=duty; //f7 moved to bit 7 and int moved to bit 5 int_feedback7=((duty&0x40)<<1)|((duty&0x200)>>4); //f11 and f10 moved to bits 7 & 6 diff --git a/src/engine/platform/lynx.h b/src/engine/platform/lynx.h index 7d705261d..c796126fc 100644 --- a/src/engine/platform/lynx.h +++ b/src/engine/platform/lynx.h @@ -35,6 +35,7 @@ class DivPlatformLynx: public DivDispatch { struct MikeyDuty { unsigned char int_feedback7; unsigned char feedback; + int val; MikeyDuty(int duty); }; @@ -64,6 +65,7 @@ class DivPlatformLynx: public DivDispatch { Channel chan[4]; DivDispatchOscBuffer* oscBuf[4]; bool isMuted[4]; + bool tuned; std::unique_ptr mikey; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -86,6 +88,7 @@ class DivPlatformLynx: public DivDispatch { bool keyOffAffectsPorta(int ch); bool getLegacyAlwaysSetVolume(); //int getPortaFloor(int ch); + void setFlags(const DivConfig& flags); void notifyInsDeletion(void* ins); void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 73f05ec74..2dedd4245 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -1596,6 +1596,19 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } break; } + case DIV_SYSTEM_LYNX: { + bool tuned=flags.getBool("tuned",false); + if (ImGui::Checkbox("Consistent frequency across all duties",&tuned)) { + altered=true; + e->lockSave([&]() { + flags.set("tuned",tuned); + }); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("note: only works for an initial LFSR value of 0!"); + } + break; + } case DIV_SYSTEM_OPL: case DIV_SYSTEM_OPL_DRUMS: case DIV_SYSTEM_OPL2: From bffb51756f050a4653eba2398d3f5a746cd552aa Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Tue, 27 Feb 2024 11:31:48 +0700 Subject: [PATCH 028/134] Lynx: Add Load LFSR macro PowerNoise had it --- src/engine/platform/lynx.cpp | 5 +++++ src/gui/insEdit.cpp | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/engine/platform/lynx.cpp b/src/engine/platform/lynx.cpp index a2e9795a6..1ea439beb 100644 --- a/src/engine/platform/lynx.cpp +++ b/src/engine/platform/lynx.cpp @@ -200,6 +200,11 @@ void DivPlatformLynx::tick(bool sysTick) { chan[i].freqChanged=true; } + if (chan[i].std.ex1.had) { + WRITE_LFSR(i, chan[i].std.ex1.val&0xff); + WRITE_OTHER(i, (chan[i].std.ex1.val&0xf00)>>4); + } + if (chan[i].std.phaseReset.had) { if (chan[i].std.phaseReset.val==1) { if (chan[i].pcm && chan[i].sample>=0 && chan[i].samplesong.sampleLen) { diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 519881424..e17119d8c 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -7028,6 +7028,9 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_DAVE) { ex1Max=4; } + if (ins->type==DIV_INS_MIKEY) { + ex1Max=12; + } int panMin=0; int panMax=0; @@ -7234,6 +7237,8 @@ void FurnaceGUI::drawInsEdit() { macroList.push_back(FurnaceGUIMacroDesc("Group Attack",&ins->std.ex1Macro,0,ex1Max,96,uiColors[GUI_COLOR_MACRO_OTHER])); } else if (ins->type==DIV_INS_DAVE) { macroList.push_back(FurnaceGUIMacroDesc("Control",&ins->std.ex1Macro,0,ex1Max,64,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,daveControlBits)); + } else if (ins->type==DIV_INS_MIKEY) { + macroList.push_back(FurnaceGUIMacroDesc("Load LFSR",&ins->std.ex1Macro,0,12,160,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } else { macroList.push_back(FurnaceGUIMacroDesc("Duty",&ins->std.ex1Macro,0,ex1Max,160,uiColors[GUI_COLOR_MACRO_OTHER])); } From e1c4b20ef93eb12c67f65334c7c5c9cdbda8c9c4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 11 Mar 2024 15:46:45 -0500 Subject: [PATCH 029/134] Grape Jelly by TapeStone --- demos/misc/Grape_Jelly_MSM5232.fur | Bin 0 -> 3044 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/misc/Grape_Jelly_MSM5232.fur diff --git a/demos/misc/Grape_Jelly_MSM5232.fur b/demos/misc/Grape_Jelly_MSM5232.fur new file mode 100644 index 0000000000000000000000000000000000000000..bee9debd2e6097dbf823479bf60e97116a94eda5 GIT binary patch literal 3044 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 literal 0 HcmV?d00001 From 7ffc67529c8d30acd6e262eb0f48e28d238d9d1f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 13 Mar 2024 02:11:57 -0500 Subject: [PATCH 030/134] dev195 - C64: prevent cutoff macro race issue #1790 --- src/engine/engine.h | 4 ++-- src/engine/fileOps/dmf.cpp | 3 ++- src/engine/fileOps/fur.cpp | 9 +++++++++ src/engine/platform/c64.cpp | 3 ++- src/engine/platform/c64.h | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 879603b40..d7ec90586 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ class DivWorkPool; #define DIV_UNSTABLE -#define DIV_VERSION "dev194" -#define DIV_ENGINE_VERSION 194 +#define DIV_VERSION "dev195" +#define DIV_ENGINE_VERSION 195 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index f55e10da8..525c3e2df 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -1033,11 +1033,12 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { ds.systemFlags[0].set("dpcmMode",false); } - // C64 no key priority, reset time and multiply relative + // C64 no key priority, reset time, multiply relative and macro race if (ds.system[0]==DIV_SYSTEM_C64_8580 || ds.system[0]==DIV_SYSTEM_C64_6581) { ds.systemFlags[0].set("keyPriority",false); ds.systemFlags[0].set("initResetTime",1); ds.systemFlags[0].set("multiplyRel",true); + ds.systemFlags[0].set("macroRace",true); } // OPM broken pitch diff --git a/src/engine/fileOps/fur.cpp b/src/engine/fileOps/fur.cpp index a90643c15..5397a266c 100644 --- a/src/engine/fileOps/fur.cpp +++ b/src/engine/fileOps/fur.cpp @@ -2064,6 +2064,15 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { } } + // C64 macro race + if (ds.version<195) { + for (int i=0; igetIns(chan[i].ins,DIV_INS_C64); if (ins->c64.filterIsAbs) { filtCut=MIN(2047,chan[i].std.alg.val); @@ -732,6 +732,7 @@ void DivPlatformC64::setFlags(const DivConfig& flags) { keyPriority=flags.getBool("keyPriority",true); no1EUpdate=flags.getBool("no1EUpdate",false); multiplyRel=flags.getBool("multiplyRel",false); + macroRace=flags.getBool("macroRace",false); testAD=((flags.getInt("testAttack",0)&15)<<4)|(flags.getInt("testDecay",0)&15); testSR=((flags.getInt("testSustain",0)&15)<<4)|(flags.getInt("testRelease",0)&15); initResetTime=flags.getInt("initResetTime",2); diff --git a/src/engine/platform/c64.h b/src/engine/platform/c64.h index c24ee3159..eb4426ca0 100644 --- a/src/engine/platform/c64.h +++ b/src/engine/platform/c64.h @@ -77,7 +77,7 @@ class DivPlatformC64: public DivDispatch { unsigned char sidCore; int filtCut, resetTime, initResetTime; - bool keyPriority, sidIs6581, needInitTables, no1EUpdate, multiplyRel; + bool keyPriority, sidIs6581, needInitTables, no1EUpdate, multiplyRel, macroRace; unsigned char chanOrder[3]; unsigned char testAD, testSR; From 0ab0dec9f4b9513672bdd75d2d82b4b08eb5a001 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 13 Mar 2024 03:29:35 -0500 Subject: [PATCH 031/134] GUI: forgot about sysConf --- src/gui/sysConf.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 2dedd4245..18bc3d967 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -588,6 +588,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl bool keyPriority=flags.getBool("keyPriority",true); bool no1EUpdate=flags.getBool("no1EUpdate",false); bool multiplyRel=flags.getBool("multiplyRel",false); + bool macroRace=flags.getBool("macroRace",false); int testAttack=flags.getInt("testAttack",0); int testDecay=flags.getInt("testDecay",0); int testSustain=flags.getInt("testSustain",0); @@ -667,6 +668,10 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl altered=true; } + if (ImGui::Checkbox("Cutoff macro race conditions (compatibility)",¯oRace)) { + altered=true; + } + if (altered) { e->lockSave([&]() { @@ -674,6 +679,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl flags.set("keyPriority",keyPriority); flags.set("no1EUpdate",no1EUpdate); flags.set("multiplyRel",multiplyRel); + flags.set("macroRace",macroRace); flags.set("testAttack",testAttack); flags.set("testDecay",testDecay); flags.set("testSustain",testSustain); From 3e87c0a0df628fa05fcbf23b70bd68776f6e04e0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 13 Mar 2024 14:57:31 -0500 Subject: [PATCH 032/134] OPL: use different strategy for muting drums issue #1777 --- src/engine/platform/opl.cpp | 49 +++++++++++++++---------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index e01d4d264..679a65462 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -844,7 +844,7 @@ void DivPlatformOPL::tick(bool sysTick) { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[i].state.op[(ops==4)?orderedOpsL[j]:j]; - if (isMuted[i]) { + if (isMuted[i] && i<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(i,j) || i>melodicChans) { @@ -893,7 +893,7 @@ void DivPlatformOPL::tick(bool sysTick) { } if (chan[i].std.alg.had || chan[i].std.fb.had || (oplType==3 && chan[i].std.panL.had)) { - if (isMuted[i]) { + if (isMuted[i] && i<=melodicChans) { rWrite(chanMap[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&1)|(chan[i].state.fb<<1)); if (ops==4) { rWrite(chanMap[i+1]+ADDR_LR_FB_ALG,((chan[i].state.alg>>1)&1)|(chan[i].state.fb<<1)); @@ -964,7 +964,7 @@ void DivPlatformOPL::tick(bool sysTick) { op.ksl=m.ksl.val; } if (m.tl.had || m.ksl.had) { - if (isMuted[i]) { + if (isMuted[i] && i<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(i,j) || i>melodicChans) { @@ -1128,7 +1128,7 @@ void DivPlatformOPL::tick(bool sysTick) { } else { if (chan[i].keyOn) { immWrite(chanMap[i]+ADDR_FREQH,chan[i].freqH); - drumState|=(1<<(totalChans-i-1)); + if (!isMuted[i]) drumState|=(1<<(totalChans-i-1)); updateDrums=true; chan[i].keyOn=false; } else if (chan[i].freqChanged) { @@ -1233,7 +1233,7 @@ void DivPlatformOPL::muteChannel(int ch, bool mute) { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[ch].state.op[(ops==4)?orderedOpsL[i]:i]; - if (isMuted[ch]) { + if (isMuted[ch] && ch<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(ch,i) || ch>melodicChans) { @@ -1248,7 +1248,7 @@ void DivPlatformOPL::muteChannel(int ch, bool mute) { return; } - if (isMuted[ch]) { + if (isMuted[ch] && ch<=melodicChans) { rWrite(chanMap[ch]+ADDR_LR_FB_ALG,(chan[ch].state.alg&1)|(chan[ch].state.fb<<1)); if (ops==4) { rWrite(chanMap[ch+1]+ADDR_LR_FB_ALG,((chan[ch].state.alg>>1)&1)|(chan[ch].state.fb<<1)); @@ -1289,11 +1289,7 @@ void DivPlatformOPL::commitState(int ch, DivInstrument* ins) { DivInstrumentFM::Operator& op=chan[ch].state.op[0]; chan[ch].fourOp=false; - if (isMuted[ch]) { - rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); - } else { - rWrite(baseAddr+ADDR_KSL_TL,(63-VOL_SCALE_LOG_BROKEN(63-op.tl,chan[ch].outVol&0x3f,63))|(op.ksl<<6)); - } + rWrite(baseAddr+ADDR_KSL_TL,(63-VOL_SCALE_LOG_BROKEN(63-op.tl,chan[ch].outVol&0x3f,63))|(op.ksl<<6)); rWrite(baseAddr+ADDR_AM_VIB_SUS_KSR_MULT,(op.am<<7)|(op.vib<<6)|(op.sus<<5)|(op.ksr<<4)|op.mult); rWrite(baseAddr+ADDR_AR_DR,(op.ar<<4)|op.dr); @@ -1302,13 +1298,8 @@ void DivPlatformOPL::commitState(int ch, DivInstrument* ins) { rWrite(baseAddr+ADDR_WS,op.ws&((oplType==3)?7:3)); } - if (isMuted[ch]) { - oldWrites[chanMap[ch]+ADDR_LR_FB_ALG]=-1; - rWrite(chanMap[ch]+ADDR_LR_FB_ALG,(chan[ch].state.alg&1)|(chan[ch].state.fb<<1)); - } else { - oldWrites[chanMap[ch]+ADDR_LR_FB_ALG]=-1; - rWrite(chanMap[ch]+ADDR_LR_FB_ALG,(chan[ch].state.alg&1)|(chan[ch].state.fb<<1)|((chan[ch].pan&15)<<4)); - } + oldWrites[chanMap[ch]+ADDR_LR_FB_ALG]=-1; + rWrite(chanMap[ch]+ADDR_LR_FB_ALG,(chan[ch].state.alg&1)|(chan[ch].state.fb<<1)|((chan[ch].pan&15)<<4)); } } else { int ops=(slots[3][ch]!=255 && chan[ch].state.ops==4 && oplType==3)?4:2; @@ -1330,7 +1321,7 @@ void DivPlatformOPL::commitState(int ch, DivInstrument* ins) { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[ch].state.op[(ops==4)?orderedOpsL[i]:i]; - if (isMuted[ch]) { + if (isMuted[ch] && ch<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(ch,i) || ch>melodicChans) { @@ -1348,7 +1339,7 @@ void DivPlatformOPL::commitState(int ch, DivInstrument* ins) { } } - if (isMuted[ch]) { + if (isMuted[ch] && ch<=melodicChans) { oldWrites[chanMap[ch]+ADDR_LR_FB_ALG]=-1; rWrite(chanMap[ch]+ADDR_LR_FB_ALG,(chan[ch].state.alg&1)|(chan[ch].state.fb<<1)); if (ops==4) { @@ -1530,7 +1521,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[c.chan].state.op[(ops==4)?orderedOpsL[i]:i]; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(c.chan,i) || c.chan>melodicChans) { @@ -1565,7 +1556,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { chan[c.chan].pan|=(c.value>0)|((c.value2>0)<<1); } int ops=(slots[3][c.chan]!=255 && chan[c.chan].state.ops==4 && oplType==3)?4:2; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(chanMap[c.chan]+ADDR_LR_FB_ALG,(chan[c.chan].state.alg&1)|(chan[c.chan].state.fb<<1)); if (ops==4) { rWrite(chanMap[c.chan+1]+ADDR_LR_FB_ALG,((chan[c.chan].state.alg>>1)&1)|(chan[c.chan].state.fb<<1)); @@ -1592,7 +1583,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { } int ops=(slots[3][c.chan]!=255 && chan[c.chan].state.ops==4 && oplType==3)?4:2; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(chanMap[c.chan]+ADDR_LR_FB_ALG,(chan[c.chan].state.alg&1)|(chan[c.chan].state.fb<<1)); if (ops==4) { rWrite(chanMap[c.chan+1]+ADDR_LR_FB_ALG,((chan[c.chan].state.alg>>1)&1)|(chan[c.chan].state.fb<<1)); @@ -1678,7 +1669,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { if (c.chan==adpcmChan) break; chan[c.chan].state.fb=c.value&7; int ops=(slots[3][c.chan]!=255 && chan[c.chan].state.ops==4 && oplType==3)?4:2; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(chanMap[c.chan]+ADDR_LR_FB_ALG,(chan[c.chan].state.alg&1)|(chan[c.chan].state.fb<<1)); if (ops==4) { rWrite(chanMap[c.chan+1]+ADDR_LR_FB_ALG,((chan[c.chan].state.alg>>1)&1)|(chan[c.chan].state.fb<<1)); @@ -1712,7 +1703,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { unsigned char slot=slots[c.value][c.chan]; if (slot==255) break; unsigned short baseAddr=slotMap[slot]; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(c.chan,c.value) || c.chan>melodicChans) { @@ -1942,7 +1933,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[c.chan].state.op[(ops==4)?orderedOpsL[i]:i]; op.ksl=c.value2&3; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(c.chan,i) || c.chan>melodicChans) { @@ -1959,7 +1950,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { unsigned char slot=slots[c.value][c.chan]; if (slot==255) break; unsigned short baseAddr=slotMap[slot]; - if (isMuted[c.chan]) { + if (isMuted[c.chan] && c.chan<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(c.chan,c.value) || c.chan>melodicChans) { @@ -2042,7 +2033,7 @@ void DivPlatformOPL::forceIns() { unsigned short baseAddr=slotMap[slot]; DivInstrumentFM::Operator& op=chan[i].state.op[(ops==4)?orderedOpsL[j]:j]; - if (isMuted[i]) { + if (isMuted[i] && c.chan<=melodicChans) { rWrite(baseAddr+ADDR_KSL_TL,63|(op.ksl<<6)); } else { if (KVSL(i,j) || i>melodicChans) { @@ -2060,7 +2051,7 @@ void DivPlatformOPL::forceIns() { } } - if (isMuted[i]) { + if (isMuted[i] && c.chan<=melodicChans) { rWrite(chanMap[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&1)|(chan[i].state.fb<<1)); if (ops==4) { rWrite(chanMap[i+1]+ADDR_LR_FB_ALG,((chan[i].state.alg>>1)&1)|(chan[i].state.fb<<1)); From d700bfca082c932c2d533fb7a4413266c221cc37 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 01:58:43 -0500 Subject: [PATCH 033/134] prepare for deferred config saving issue #1723 --- src/engine/engine.cpp | 8 +++++--- src/engine/engine.h | 2 +- src/gui/gui.cpp | 6 +++++- src/gui/gui.h | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ee254c2c8..ee99ae002 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -4013,11 +4013,13 @@ bool DivEngine::init() { return true; } -bool DivEngine::quit() { +bool DivEngine::quit(bool saveConfig) { deinitAudioBackend(); quitDispatch(); - logI("saving config."); - saveConf(); + if (saveConfig) { + logI("saving config."); + saveConf(); + } active=false; for (int i=0; iquitGUI(); ImGui_ImplSDL2_Shutdown(); quitRender(); diff --git a/src/gui/gui.h b/src/gui/gui.h index 1188d78d1..e99964454 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2735,7 +2735,7 @@ class FurnaceGUI { bool detectOutOfBoundsWindow(SDL_Rect& failing); int processEvent(SDL_Event* ev); bool loop(); - bool finish(); + bool finish(bool saveConfig=false); bool init(); bool requestQuit(); FurnaceGUI(); From 8b0f5bedc432272d99400242a5e84989ee927fd3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 02:06:36 -0500 Subject: [PATCH 034/134] me an idiot --- src/engine/engine.h | 4 ++-- src/gui/gui.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 0248dd94b..242e465dd 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -220,7 +220,7 @@ struct DivDispatchContainer { void fillBuf(size_t runtotal, size_t offset, size_t size); void clear(); void init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags, bool isRender=false); - void quit(bool saveConfig=true); + void quit(); DivDispatchContainer(): dispatch(NULL), bbInLen(0), @@ -1252,7 +1252,7 @@ class DivEngine { void everythingOK(); // terminate the engine. - bool quit(); + bool quit(bool saveConfig=true); unsigned char* yrw801ROM; unsigned char* tg100ROM; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 170f58fa5..9d95d1595 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7246,7 +7246,7 @@ bool FurnaceGUI::finish(bool saveConfig) { commitState(); if (saveConfig) { logI("saving config."); - saveConf(); + e->saveConf(); } rend->quitGUI(); ImGui_ImplSDL2_Shutdown(); From 3c5a1232831a5c90d22621f02d76757d148a1947 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 14:32:06 -0500 Subject: [PATCH 035/134] deferred config saving first save config and then close window issue #1723 --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8601b48c4..9c86b16c5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -759,13 +759,13 @@ int main(int argc, char** argv) { g.loop(); logI("closing GUI."); - g.finish(); + g.finish(true); #else logE("GUI requested but GUI not compiled!"); #endif logI("stopping engine."); - e.quit(); + e.quit(false); finishLogFile(); From 1a4bbef15b36738f363d8d1ae8c09420a992b7e7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 14:40:02 -0500 Subject: [PATCH 036/134] YM2151: so we need hacky legato mess here too... issue #1797 --- src/engine/platform/arcade.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 2b6663c32..914453271 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -560,7 +560,7 @@ int DivPlatformArcade::dispatch(DivCommand c) { commitState(c.chan,ins); chan[c.chan].insChanged=false; } - chan[c.chan].baseFreq=NOTE_LINEAR(c.value); + chan[c.chan].baseFreq=NOTE_LINEAR(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; break; } From d33e645ea84280c886b01590f47aaeaa9bf84c38 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 14:43:20 -0500 Subject: [PATCH 037/134] fine --- .../Grape_Jelly_Alpha5232.fur} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename demos/{misc/Grape_Jelly_MSM5232.fur => arcade/Grape_Jelly_Alpha5232.fur} (100%) diff --git a/demos/misc/Grape_Jelly_MSM5232.fur b/demos/arcade/Grape_Jelly_Alpha5232.fur similarity index 100% rename from demos/misc/Grape_Jelly_MSM5232.fur rename to demos/arcade/Grape_Jelly_Alpha5232.fur From 898155eb6b87ad90b003f0fc4e2b6ba440a8042f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 14 Mar 2024 17:58:55 -0500 Subject: [PATCH 038/134] Namco 163 memory composition --- src/engine/dispatch.h | 14 +++++++++- src/engine/engine.h | 2 +- src/engine/fileOps/fileOpsCommon.cpp | 2 ++ src/engine/fileOps/fileOpsCommon.h | 7 +++++ src/engine/fileOps/fur.cpp | 7 ++++- src/engine/instrument.cpp | 2 ++ src/engine/platform/n163.cpp | 38 +++++++++++++++++++++++++--- src/engine/platform/n163.h | 2 ++ src/gui/gui.h | 3 +++ src/gui/guiConst.cpp | 3 +++ src/gui/memory.cpp | 36 ++++++++++++++++++++++++-- src/gui/settings.cpp | 3 +++ 12 files changed, 111 insertions(+), 8 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 55756767a..06157e841 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -441,6 +441,8 @@ enum DivMemoryEntryType { DIV_MEMORY_WAVE_RAM, DIV_MEMORY_WAVE_STATIC, DIV_MEMORY_ECHO, + DIV_MEMORY_N163_LOAD, + DIV_MEMORY_N163_PLAY, DIV_MEMORY_BANK0, DIV_MEMORY_BANK1, DIV_MEMORY_BANK2, @@ -470,15 +472,25 @@ struct DivMemoryEntry { end(0) {} }; +enum DivMemoryWaveView: unsigned char { + DIV_MEMORY_WAVE_NONE=0, + DIV_MEMORY_WAVE_4BIT, // Namco 163 + DIV_MEMORY_WAVE_6BIT, // Virtual Boy +}; + struct DivMemoryComposition { std::vector entries; String name; size_t capacity; size_t used; + const unsigned char* memory; + DivMemoryWaveView waveformView; DivMemoryComposition(): name(""), capacity(0), - used(0) {} + used(0), + memory(NULL), + waveformView(DIV_MEMORY_WAVE_NONE) {} }; class DivEngine; diff --git a/src/engine/engine.h b/src/engine/engine.h index 242e465dd..48335692f 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -542,7 +542,7 @@ class DivEngine { void testFunction(); bool loadDMF(unsigned char* file, size_t len); - bool loadFur(unsigned char* file, size_t len); + bool loadFur(unsigned char* file, size_t len, int variantID=0); bool loadMod(unsigned char* file, size_t len); bool loadS3M(unsigned char* file, size_t len); bool loadFTM(unsigned char* file, size_t len); diff --git a/src/engine/fileOps/fileOpsCommon.cpp b/src/engine/fileOps/fileOpsCommon.cpp index 56046b078..6eadfef62 100644 --- a/src/engine/fileOps/fileOpsCommon.cpp +++ b/src/engine/fileOps/fileOpsCommon.cpp @@ -131,6 +131,8 @@ bool DivEngine::load(unsigned char* f, size_t slen) { return loadFTM(file,len); } else if (memcmp(file,DIV_FUR_MAGIC,16)==0) { return loadFur(file,len); + } else if (memcmp(file,DIV_FUR_MAGIC_DS0,16)==0) { + return loadFur(file,len,DIV_FUR_VARIANT_B); } else if (memcmp(file,DIV_FC13_MAGIC,4)==0 || memcmp(file,DIV_FC14_MAGIC,4)==0) { return loadFC(file,len); } diff --git a/src/engine/fileOps/fileOpsCommon.h b/src/engine/fileOps/fileOpsCommon.h index baceadaf3..e758f0ed5 100644 --- a/src/engine/fileOps/fileOpsCommon.h +++ b/src/engine/fileOps/fileOpsCommon.h @@ -52,3 +52,10 @@ struct NotZlibException { #define DIV_FC13_MAGIC "SMOD" #define DIV_FC14_MAGIC "FC14" #define DIV_S3M_MAGIC "SCRM" + +#define DIV_FUR_MAGIC_DS0 "Furnace-B module" + +enum DivFurVariants: int { + DIV_FUR_VARIANT_VANILLA=0, + DIV_FUR_VARIANT_B=1, +}; diff --git a/src/engine/fileOps/fur.cpp b/src/engine/fileOps/fur.cpp index 5397a266c..0cd32fa76 100644 --- a/src/engine/fileOps/fur.cpp +++ b/src/engine/fileOps/fur.cpp @@ -691,7 +691,7 @@ void DivEngine::convertOldFlags(unsigned int oldFlags, DivConfig& newFlags, DivS } } -bool DivEngine::loadFur(unsigned char* file, size_t len) { +bool DivEngine::loadFur(unsigned char* file, size_t len, int variantID) { unsigned int insPtr[256]; unsigned int wavePtr[256]; unsigned int samplePtr[256]; @@ -720,6 +720,11 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { ds.version=reader.readS(); logI("module version %d (0x%.2x)",ds.version,ds.version); + if (variantID!=DIV_FUR_VARIANT_VANILLA) { + logW("Furnace variant detected: %d",variantID); + addWarning("this module was created with a downstream version of Furnace. certain features may not be compatible."); + } + if (ds.version>DIV_ENGINE_VERSION) { logW("this module was created with a more recent version of Furnace!"); addWarning("this module was created with a more recent version of Furnace!"); diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 37bd99f57..8ad21b100 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -2952,6 +2952,8 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version, DivS type=0; } else if (memcmp(magic,"INS2",4)==0) { type=1; + } else if (memcmp(magic,"IN2B",4)==0) { // DIV_FUR_VARIANT_B + type=1; } else if (memcmp(magic,"FINS",4)==0) { type=2; } else { diff --git a/src/engine/platform/n163.cpp b/src/engine/platform/n163.cpp index 5e2ccd9c0..d1ceaf5a0 100644 --- a/src/engine/platform/n163.cpp +++ b/src/engine/platform/n163.cpp @@ -279,6 +279,19 @@ void DivPlatformN163::tick(bool sysTick) { chan[i].freqChanged=false; } } + + // update memory composition positions + for (int i=0; i<=chanMax; i++) { + memCompo.entries[i].begin=chan[i].wavePos>>1; + memCompo.entries[i].end=(chan[i].wavePos+chan[i].waveLen)>>1; + memCompo.entries[i+8].begin=chan[i].curWavePos>>1; + memCompo.entries[i+8].end=(chan[i].curWavePos+chan[i].curWaveLen)>>1; + } + + // update register pool + for (int i=0; i<128; i++) { + regPool[i]=n163.reg(i); + } } int DivPlatformN163::dispatch(DivCommand c) { @@ -476,6 +489,7 @@ void DivPlatformN163::forceIns() { chan[i].waveChanged=true; } } + memCompo.entries[16].begin=120-chanMax*8; } void DivPlatformN163::notifyWaveChange(int wave) { @@ -516,9 +530,6 @@ DivDispatchOscBuffer* DivPlatformN163::getOscBuffer(int ch) { } unsigned char* DivPlatformN163::getRegisterPool() { - for (int i=0; i<128; i++) { - regPool[i]=n163.reg(i); - } return regPool; } @@ -544,6 +555,8 @@ void DivPlatformN163::reset() { loadWave=-1; loadPos=0; rWrite(0x7f,initChanMax<<4); + + memCompo.entries[16].begin=120-chanMax*8; } void DivPlatformN163::poke(unsigned int addr, unsigned short val) { @@ -554,6 +567,11 @@ void DivPlatformN163::poke(std::vector& wlist) { for (DivRegWrite& i: wlist) rWrite(i.addr,i.val); } +const DivMemoryComposition* DivPlatformN163::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformN163::setFlags(const DivConfig& flags) { switch (flags.getInt("clockSel",0)) { case 1: // PAL @@ -591,6 +609,20 @@ int DivPlatformN163::init(DivEngine* p, int channels, int sugRate, const DivConf isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; } + + memCompo.used=0; + memCompo.capacity=128; + memCompo.memory=regPool; + memCompo.waveformView=DIV_MEMORY_WAVE_4BIT; + + for (int i=0; i<8; i++) { + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_N163_LOAD,fmt::sprintf("Channel %d (load)",i),-1,0,0)); + } + for (int i=0; i<8; i++) { + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_N163_PLAY,fmt::sprintf("Channel %d (play)",i),-1,0,0)); + } + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_RESERVED,"Registers",-1,127,128)); + setFlags(flags); reset(); diff --git a/src/engine/platform/n163.h b/src/engine/platform/n163.h index 648a7af24..2c7c404fc 100644 --- a/src/engine/platform/n163.h +++ b/src/engine/platform/n163.h @@ -65,6 +65,7 @@ class DivPlatformN163: public DivDispatch { n163_core n163; unsigned char regPool[128]; + DivMemoryComposition memCompo; void updateWave(int ch, int wave, int pos, int len); void updateWaveCh(int ch); friend void putDispatchChip(void*,int); @@ -82,6 +83,7 @@ class DivPlatformN163: public DivDispatch { void forceIns(); void tick(bool sysTick=true); void muteChannel(int ch, bool mute); + const DivMemoryComposition* getMemCompo(int index); void setFlags(const DivConfig& flags); void notifyWaveChange(int wave); void notifyInsChange(int ins); diff --git a/src/gui/gui.h b/src/gui/gui.h index e99964454..8358be6d5 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -411,6 +411,7 @@ enum FurnaceGUIColors { GUI_COLOR_PATCHBAY_CONNECTION_HI, GUI_COLOR_MEMORY_BG, + GUI_COLOR_MEMORY_DATA, GUI_COLOR_MEMORY_FREE, GUI_COLOR_MEMORY_PADDING, GUI_COLOR_MEMORY_RESERVED, @@ -421,6 +422,8 @@ enum FurnaceGUIColors { GUI_COLOR_MEMORY_WAVE_RAM, GUI_COLOR_MEMORY_WAVE_STATIC, GUI_COLOR_MEMORY_ECHO, + GUI_COLOR_MEMORY_N163_LOAD, + GUI_COLOR_MEMORY_N163_PLAY, GUI_COLOR_MEMORY_BANK0, GUI_COLOR_MEMORY_BANK1, GUI_COLOR_MEMORY_BANK2, diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 31567ea3b..3d7fffc90 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -1109,6 +1109,7 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_PATCHBAY_CONNECTION_HI,"",ImVec4(0.2f,1.0f,1.0f,1.0f)), D(GUI_COLOR_MEMORY_BG,"",ImVec4(0.12f,0.12f,0.12f,1.0f)), + D(GUI_COLOR_MEMORY_DATA,"",ImVec4(1.0f,1.0f,1.0f,0.8f)), D(GUI_COLOR_MEMORY_FREE,"",ImVec4(0.25f,0.25f,0.25f,1.0f)), D(GUI_COLOR_MEMORY_PADDING,"",ImVec4(0.25f,0.25f,0.25f,1.0f)), D(GUI_COLOR_MEMORY_RESERVED,"",ImVec4(0.5f,0.5f,0.6f,1.0f)), @@ -1119,6 +1120,8 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_MEMORY_WAVE_RAM,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_WAVE_STATIC,"",ImVec4(1.0f,0.3f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_ECHO,"",ImVec4(0.2f,1.0f,1.0f,1.0f)), + D(GUI_COLOR_MEMORY_N163_LOAD,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), + D(GUI_COLOR_MEMORY_N163_PLAY,"",ImVec4(1.0f,1.0f,0.2f,1.0f)), D(GUI_COLOR_MEMORY_BANK0,"",ImVec4(1.0f,0.1f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_BANK1,"",ImVec4(1.0f,0.5f,0.1f,1.0f)), D(GUI_COLOR_MEMORY_BANK2,"",ImVec4(1.0f,1.0f,0.1f,1.0f)), diff --git a/src/gui/memory.cpp b/src/gui/memory.cpp index c98c3f127..3a506a03c 100644 --- a/src/gui/memory.cpp +++ b/src/gui/memory.cpp @@ -56,17 +56,28 @@ void FurnaceGUI::drawMemory() { minArea.y+size.y ); ImRect rect=ImRect(minArea,maxArea); + ImRect dataRect=rect; + ImRect entryRect=rect; ImGuiStyle& style=ImGui::GetStyle(); ImGui::ItemSize(size,style.FramePadding.y); snprintf(tempID,1023,"MC%d_%d",i,j); if (ImGui::ItemAdd(rect,ImGui::GetID(tempID))) { dl->AddRectFilled(rect.Min,rect.Max,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_BG])); + if (mc->memory!=NULL && mc->waveformView!=DIV_MEMORY_WAVE_NONE) { + dataRect.Max.y-=8.0f*dpiScale; + entryRect.Min.y=entryRect.Max.y-8.0f*dpiScale; + } + int curHover=-1; int kIndex=0; if (mc->capacity>0) for (const DivMemoryEntry& k: mc->entries) { - ImVec2 pos1=ImLerp(rect.Min,rect.Max,ImVec2((double)k.begin/(double)mc->capacity,0.0f)); - ImVec2 pos2=ImLerp(rect.Min,rect.Max,ImVec2((double)k.end/(double)mc->capacity,1.0f)); + if (k.begin==k.end) { + kIndex++; + continue; + } + ImVec2 pos1=ImLerp(entryRect.Min,entryRect.Max,ImVec2((double)k.begin/(double)mc->capacity,(k.type==DIV_MEMORY_N163_LOAD)?0.5f:0.0f)); + ImVec2 pos2=ImLerp(entryRect.Min,entryRect.Max,ImVec2((double)k.end/(double)mc->capacity,(k.type==DIV_MEMORY_N163_PLAY)?0.5f:1.0f)); ImVec2 linePos=pos1; linePos.y=rect.Max.y; @@ -79,6 +90,27 @@ void FurnaceGUI::drawMemory() { kIndex++; } + if (mc->memory!=NULL) { + switch (mc->waveformView) { + case DIV_MEMORY_WAVE_4BIT: + for (int k=0; k<(int)(mc->capacity<<1); k++) { + unsigned char nibble=mc->memory[k>>1]; + if (k&1) { + nibble&=15; + } else { + nibble>>=4; + } + + ImVec2 pos1=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)k/(double)(mc->capacity<<1),1.0f-((float)(nibble+1)/16.0f))); + ImVec2 pos2=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)(k+1)/(double)(mc->capacity<<1),1.0f)); + dl->AddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_DATA])); + } + break; + default: + break; + } + } + if (ImGui::ItemHoverable(rect,ImGui::GetID(tempID),0)) { if (curHover>=0 && curHover<(int)mc->entries.size()) { const DivMemoryEntry& entry=mc->entries[curHover]; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 68e30445d..6d7d11d69 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3685,6 +3685,7 @@ void FurnaceGUI::drawSettings() { } if (ImGui::TreeNode("Memory Composition")) { UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BG,"Background"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_DATA,"Waveform data"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_FREE,"Unknown"); //UI_COLOR_CONFIG(GUI_COLOR_MEMORY_PADDING,""); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_RESERVED,"Reserved"); @@ -3695,6 +3696,8 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_MEMORY_WAVE_RAM,"Wave RAM"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_WAVE_STATIC,"Wavetable (static)"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_ECHO,"Echo buffer"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_N163_LOAD,"Namco 163 load pos"); + UI_COLOR_CONFIG(GUI_COLOR_MEMORY_N163_PLAY,"Namco 163 play pos"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK0,"Sample (bank 0)"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK1,"Sample (bank 1)"); UI_COLOR_CONFIG(GUI_COLOR_MEMORY_BANK2,"Sample (bank 2)"); From f6a27afedddd26bf2903f1e1efde2c551e2d1596 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 01:50:53 -0500 Subject: [PATCH 039/134] first C219 demo --- demos/multichip/Namco_C30_C219_Loop.fur | Bin 0 -> 164889 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/multichip/Namco_C30_C219_Loop.fur diff --git a/demos/multichip/Namco_C30_C219_Loop.fur b/demos/multichip/Namco_C30_C219_Loop.fur new file mode 100644 index 0000000000000000000000000000000000000000..e89e5cf02356560c28e967200cc7655e101db4c4 GIT binary patch literal 164889 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 z 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

5oYDdudgR+RMrueZ#D= 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 Dt}i`( literal 0 HcmV?d00001 From 469fde8f51a1a9ccb8baa6417aea9a561722cc8c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 01:52:57 -0500 Subject: [PATCH 040/134] move .dmf version info text --- src/engine/fileOps/dmf.cpp | 63 ++++++++++++++++++++++++++++++++++++++ src/engine/song.h | 61 ------------------------------------ 2 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index 525c3e2df..d317aab8c 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -19,6 +19,69 @@ #include "fileOpsCommon.h" +// known version numbers: +// - 27: v1.1.7 +// - current format version +// - adds sample start/end points +// - 26: v1.1.3 +// - changes height of FDS wave to 6-bit (it was 4-bit before) +// - 25: v1.1 +// - adds pattern names (in a rather odd way) +// - v1.1.4 fixes these but breaks old songs (yeah) +// - introduces SMS+OPLL system +// - 24: v0.12/0.13/1.0 +// - changes pattern length from char to int, probably to allow for size 256 +// - 23: ??? +// - what happened here? +// - 20: v11.1 (?) +// - E5xx effect range is now ±1 semitone +// - 19: v11 +// - introduces Arcade system +// - changes to the FM instrument format due to YMU759 being dropped +// - 18: v10 +// - radically changes STD instrument for Game Boy +// - 17: v9 +// - changes C64 volIsCutoff flag from int to char for unknown reasons +// - 16: v8 (?) +// - introduces C64 system +// - 15: v7 (?) +// - 14: v6 (?) +// - introduces NES system +// - changes macro and wave values from char to int +// - 13: v5.1 +// - introduces PC Engine system in later version (how?) +// - stores highlight in file +// - 12: v5 (?) +// - introduces Game Boy system +// - introduces wavetables +// - 11: ??? +// - introduces Sega Master System +// - custom Hz support +// - instrument type (FM/STD) present +// - prior to this version the instrument type depended on the system +// - 10: ??? +// - introduces multiple effect columns +// - 9: v3.9 +// - introduces Genesis system +// - introduces system number +// - patterns now stored in current known format +// - 8: ??? +// - only used in the Medivo YMU cover +// - 7: ??? +// - only present in a later version of First.dmf +// - pattern format changes: empty field is 0xFF instead of 0x80 +// - instrument now stored in pattern +// - 5: BETA 3 +// - adds arpeggio tick +// - 4: BETA 2 +// - possibly adds instrument number (stored in channel)? +// - cannot confirm as I don't have any version 4 modules +// - 3: BETA 1 +// - possibly the first version that could save +// - basic format, no system number, 16 instruments, one speed, YMU759-only +// - patterns were stored in a different format (chars instead of shorts) and no instrument +// - if somebody manages to find a version 2 or even 1 module, please tell me as it will be worth a lot + static double samplePitches[11]={ 0.1666666666, 0.2, 0.25, 0.333333333, 0.5, 1, diff --git a/src/engine/song.h b/src/engine/song.h index 3db07cec5..86674ee52 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -222,67 +222,6 @@ struct DivEffectStorage { }; struct DivSong { - // version number used for saving the song. - // Furnace will save using the latest possible version, - // known version numbers: - // - 26: v1.1.3 - // - changes height of FDS wave to 6-bit (it was 4-bit before) - // - 25: v1.1 - // - adds pattern names (in a rather odd way) - // - introduces SMS+OPLL system - // - 24: v0.12/0.13/1.0 - // - current format version - // - changes pattern length from char to int, probably to allow for size 256 - // - 23: ??? - // - what happened here? - // - 20: v11.1 (?) - // - E5xx effect range is now ±1 semitone - // - 19: v11 - // - introduces Arcade system - // - changes to the FM instrument format due to YMU759 being dropped - // - 18: v10 - // - radically changes STD instrument for Game Boy - // - 17: v9 - // - changes C64 volIsCutoff flag from int to char for unknown reasons - // - 16: v8 (?) - // - introduces C64 system - // - 15: v7 (?) - // - 14: v6 (?) - // - introduces NES system - // - changes macro and wave values from char to int - // - 13: v5.1 - // - introduces PC Engine system in later version (how?) - // - stores highlight in file - // - 12: v5 (?) - // - introduces Game Boy system - // - introduces wavetables - // - 11: ??? - // - introduces Sega Master System - // - custom Hz support - // - instrument type (FM/STD) present - // - prior to this version the instrument type depended on the system - // - 10: ??? - // - introduces multiple effect columns - // - 9: v3.9 - // - introduces Genesis system - // - introduces system number - // - patterns now stored in current known format - // - 8: ??? - // - only used in the Medivo YMU cover - // - 7: ??? - // - only present in a later version of First.dmf - // - pattern format changes: empty field is 0xFF instead of 0x80 - // - instrument now stored in pattern - // - 5: BETA 3 - // - adds arpeggio tick - // - 4: BETA 2 - // - possibly adds instrument number (stored in channel)? - // - cannot confirm as I don't have any version 4 modules - // - 3: BETA 1 - // - possibly the first version that could save - // - basic format, no system number, 16 instruments, one speed, YMU759-only - // - patterns were stored in a different format (chars instead of shorts) and no instrument - // - if somebody manages to find a version 2 or even 1 module, please tell me as it will be worth more than a luxury vehicle unsigned short version; bool isDMF; From cd64f88c2e52304134e02152a0da37791e2c5101 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 02:05:20 -0500 Subject: [PATCH 041/134] optimize --- demos/genesis/the_serenity_of_lonliness.fur | Bin 1046323 -> 709276 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/genesis/the_serenity_of_lonliness.fur b/demos/genesis/the_serenity_of_lonliness.fur index dc733370f25d3cdad129e95fc37b1ac670e05257..d97f6b811cd6c8d07facc65826bd0d85401bcec7 100644 GIT binary patch literal 709276 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

0^l-^9iz2Cq2=Jv0b` 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

Rd!LK#N3I(5slXa~@ zEmz46PMg}|G`a@*2S)mP2Yeo%+on~@c-3OH1O+PA{fT@o901f5M*(Lr5Q%O@V!QEF zJ|9Wfgo0XKC~U%+SVmj=RH2fH#)6@pJ9n3EzkTJ_jq8(BlT!=JYdhQ9o2$Xi`Ng%R zxuuP@jbLCmiPdqfDQK64Ivv{fQ-&sN+d06bd(n6-jz*+aem&n(sMT_*%4o5|k~gYU zIu)6Ss5B;<)o9ks#A>xn&_>2~qm(MZNhlQwRce_+qqCTuZdc#vk)z`$?mu(v*Qh54AawQV&1j3d` zDv+wgP^vU4*>olrj085Lgv?5Cj3Jd92j@DI*=)Dy^(LdmZdB{77QNPFGwN(Mw6a0N zG!fJQ5{1@eGMJohr^O5y3olYvPj}zYP+w2C+wJRedz>zh$6ekmcFoRb4bWf;p#zuZ=sam7NLIuKrPrY0A1R<{Cz{i zgMGc-E;MJ?9fQB z*REHH8s$PV4Ha^WCsv@uPp{R=V4uh)qR9G0_ad3zVuK6owHuLIOnoppnyB;9&JigC zu}~latDdlT92+~E8{3;ZNvPB-JOQP9QChALYg#@Z%0kM4%O*lQ+v`h9%L}t}3(KqP zYiM$^vm1)Wk+h8L`$hvf)-n}^k;*Y;k`<_Y)}Bzv#e9AvpN@w^flxe!;%vFjY&JVw z*qWA5MU464fX?-1lNMttYo!wUur-@}sa&d10W<=Pt=FnlMCm~_Nmoxlv6hDW`}?sc zYSt7a-cK;?)^**dmnQ5~rur z(pZ;^fXHDHm52r)q#i@9%z3R*>E5gsGH_(B%-xy1Gc~ig35z$2lyjtWBw!~)a|kFU z#B!D1Vz)ccNK7L`H>zST1J@!5`&A$mOQs7*ABOKiT1Pk-#Ab4)0Pj^{c6xlh{k>go zhXp}6Svpp59$bY|np%fSC7>CZfQK?xnyT}Ja*fW6ZYmy^otiw@I5RRaJ5H3adjQa0 zELCZ>=m{@qH%d72hwIf6DGfGPcVGX&@X$biZ@0&3Gcd2jRws8_B$eW_sN_?7*d8Tk z!5A9XqbZe&Kt7j-$!D`t35Q})R3YFqhH4(=(NS!(q9t24husb&wZy4cmSn4{z=f2u zQ7uW;nZO^rY|#Yzx087{8hsgc8j3zAufP(=HYXhkjn>fO3vIEZ$xI1lz8ZtYX1AGO z7ZCFaQxMQl>vXJv(eWmezB@u^5#Q)sC|4l?h+B_1N71s$F10Q@DetV&Leu6F!(4na zWii_v$Qr`=MW5g6Flkj%=9-20ESE{f(941hRQB-FE89oK;JMVj45(6wnqjUoavx3pmt9BRrKBjTF&DTrEdWd^T3jSK4B=(eA;q zk=tg(d&v@~nL|7^N0_5c6D{A-x&_uNZd>VM9e$4*ec#FWo%){S%TnVaZ+Y)xN=kR+ z{M#A!!@q;WkZitQXX9Hkn2f-U%jC->iK*@<=uw}lguagC0$(Mqxfbnp>`rt=F{-7! zN+ufESXqK?b`>@fOeaA48d8tQ$0d~|_C8Zr5W7XA=_HY}95I5NNb=y4vDp=;J`=gO zqtv8Gi4mM)n_+IWcEc{ZNvA^7wMvos2Eu8grXHTvVzJq{E-5wrIyvVU_{&@-!ua5ywh^JB`){Cq63r@>=GskN&4)k-#A;0t6*iPhiTGj{rcQ};ji$eD*8 zefY7nqX*Bu@3GS-&zu||9zQX1V9?cl;#gPDnBQQx2-P-awOFbtbV{+p2t}gTZ+BaC zzJUXW29F%_`3DF5HnpUfuL6dhd1qp2W$Nzo^4#?N)YXZZw_bVi>1SSk?X^pnZ(P4J zySa4v{LQ;}<|Z%Symjf?^&87e(|4xkR@S#7k-%Q6kWH469MWtQa?wOQ8rH&1y-u%Pr*}dnsk0CCc>52I`n!h! z!ygf)Tz^lj~^O?UmqCg za`umoj2;?0IyQW;%YUHXZnNvv29rjqHdrkhwWuZ6%J~906dF3a#XCBB@bIC-qrD!F z)2NgZ#U~G^X};8|H`>KqK9zyJEK?|?Vo*dbOia(-di(sP8#k`soL*U9TwPgMm|tF; zxOV;4txFfL-n=_Cv${098BP?^ku01VnQSr{jqI+kFDgvHp<2#$t!<-R>|NEzWMA&FSv~SUG-puzzHz*VhfT zAZ)5|S%yZ21`i!SFfcUG*9+C2*W++F+;E`v3=RyBkM#Pxp}=v#X{wVz`AWpbO1WAs z<=bK&Pashuy-5t)fDDjcrOI#Pyos!9DixNkn@s|SjG^2ZZf7jAyScszh-(4a0@trz zy9{^r+U=RSnc2nlMN8 z$R}|D&afg=!rR;9^L4{Qut6S*!gynI6L#*!we{8cxuxZ$`RU2Ysri-F zwQXD|QK)yJwk5y5Rtr60P_xRTf)2m~MyL>Yh{yK=J3AXtmd!0JqG#k*XfIQ$@}yF+ z6br{1ELgM@P-u*p^f5dDMSGVE$pBEuYBh|ftdzn%#i+D4i3VDjlZB&jg$&68dJ|S_ zUI2}_mSErL>h?j|Z-V8b=Muf32teAq0%sttra&rF>ahw%dJSAQK?CQO`C_R7FiR*! zi*qEDBVUl_5lyta&7l}%F9!EDSHatf^6h3h6Ax{zt*))DZSF?mnG$i;+E6v+(kb+c z-`U#O-q{N52KPuUkb`9xk7G(wGzx!KBAr7EtPIpf*fENtasYOtV!cJ?j!^i({ew@a zqxrTT7QBK&he)a1LL(t1P9Tt9UPuG>NaadZLTX5#K<{`p`r~U5U)bzcDA5ckJ-65$ zZeLITz~B&UDn6);(M${73fRyG!9C4Su*_+c6H2*~afwt*H zv_-ZMU!vqFJEB%O8w;$j%uUbE+`Tii0Cgc;s#T<@?2rRt2`V@uu%r3};}uC?NJ&ko z$K|YeQKya8&JpGSjwV5bsgO39MdkrI5tC;mRzXUN2ge~VdMsL~ejyQ)2bTCHC znrI?Zs4>e}GHXN!JRC0*yFyJdjch%(F%uyf3*-5Mv4x>nsw1>U{uKgX#`i+ndz;r8 zB6nub#QUz3kzmJ#kb%%DC)c3tFf#COatsj#`oSS19=?v^5azFm%y}tit;ixR1k~%m z#*&7-L|F)1k=!6T>Q_-wGaKshR5OL^*Okp_#* z_0fz3o#euZz;}XC+RhlIiSwb5FpEl^j-2W_f(214$c+Ja{5_0-;BqqHEmj(Ju}R(L z6|#Lc{XLJ3_8xig!yo_jZ+`THzx%bXe(_7c`<2iChmYLfGk91U45U{90l)alFTeHe zUp({kAN<4L{M~nd_|5Nr=U;wt`<<7ruTEaSJH61X2#@~WpMUM^|L*J0|MS=W=nEe> z>2|rK@r9Y`ix;2$o4@*tfA{s*|Mf4wJsrIIO2DR0wt5bX-+T7spZmb){_~&w(f{8c z{k1>-^4X;8wHcRTH2af zS-5@ut*5^AlQ&-Y*YE!1d;jn^fAin|zkmB*{`X)1*?<4Hmwx*5Uq18nE0fo5Ouqc; z@@{xx{v#L)+>(f7ai-EaNVKm3pX_Fw< zzx(UI`rE($+kgJMr{0;mGqn>;=aaEOBC#C`uEu4&hIV9FDR$T`gFRNCS5YtWWKx4! zQQ*5BhMpl$&!E-m7D$|3Ztu{s;T~%t!9#AbM52@^9m;B5ZmBF~l~m4 z4Vf@FvnMQPTJ2o4)GiAo#gbTUFl)sc|52ZQ@Z_0?tXcipBL?r7yDc{AY;K*{Xl%CK ze!Xt+jHRGE+Er`$y(*nmYwm8QR9dsMnJZ)!DvNPA&3sfNAUM!cxfsrmVqNG~q5 zJg&g4dXFxVkn_U@*iI#xwfXg}NM-5OoAIp+Z_Z3yn4Y{ay>jj9-N~CbuU~!ZxnI8d z^#6M5{H1UI)%Wha@sHoUH1YP2|L1cHZ~bCn;e{8j-M;Y3vp;|N?N`tL^63|^-+1e- z*Png*wW(kI^rsi!dFsb+%uZjw@Yc1pI6R}bZ$_fqGE=Ui?Q%8pBaeEz9(>Q?kz*$x zd*Gh;{?2dScjmKS`QXRC{2xDj?h{}B(r`Pzyt;fbj1`j>)$YHN%?B0hy_`t}}@h9JVI5u{4$Y#+B z9f@nv08Iyb~zB6zjAx-_Vm=9V0dHx?(MhlBvR?!x6dza z&dsk)yn1u}`g1Q{zVg8+?JGIJoJ>L+AGE#-KAy=fzYOTuau=ovptF>5yJ(6b-XNoO;Rp7Qu z{7~=k;c<`I)9tr;j*Z%!PPwM<=<$OpzRKNWv5a{2N`=X;!;M@B#dSsNmWd5kVO8O9 zsC0vUW&^*-Jwl-3w)ap{Lnr{bZirQvAwVe<& z%B?z2pwx&BPNm-G*Yo9F16HN6SCJ7KdPfa4>EM7!+CO469qv`woNC*lQ%<$fKG^5; zn&oPRBWB0K-W z#rW#PUhwW#Gje-!Y3BB&7v8*d?e?YXlUJ@>dj5_1xtZDZSRy!g>GJaIotdROmu_DC z)vbj2B-bL#Kw09hpB@jvni^I(#0Ds%NCzarB;E&&VOKq3fW!(9$X$M-45{V`tr651;LGJA5vq zPN_8-?KWAvSTl%)hHh`WDp3jR^-QcSjA!Kh!2D)i(rBubRbeZZEmum_VxTA$Xqu~g zYIQydwf53VWc4nbbK4g$ZB;iW;_X5-5nr0w+PE{bdh_Dy=6Wu_yEwC!N^H*Fnpxfs zEUX50n|n7_wkFmK(b@U6-9&U_Ztm9f+RReZnz|J-$#!GyQo5W444liA1jT{`(6`(n z-YZI4)oeJ{%hY~vV5^si0A4J5gf`qm8K!{y37VityC*! zYb}{Y#5XC*b)KYBQHZQIfk>`Vi*o@% zGI~$nKVmflM$~Kk2m4$Wm&;_fTX+IlLuxep>>~Bh5wrTp69@Z;>}E^1nlb#3^iV+ zxEBiS6{3OI&dSQ_;;qGKyEJ(b*XBbz%gd{q+Z#K(;ndo-+f#E(cW*`bf$O1m zXeKR@;eTbZRfO9hXS+k&?8!9u;JQExTSU zmkE_3gtPWKk-OR-41) zHR@Fczggz+NM(wu%4_NA(z=h18eIcki_L73@HB3@NT*bJ`wy7o1*c198FnkRE_aW& zEwcOUf~wYP?$QcWCW}@gGwCEUt5K>m@k@nTT_DP)C0eu-uL+epxkzdE+av~`ve=gK z1-VRJso%bqc4~9=?p}UbYnB^La=u0ojEm5|S1OPg)pA} zR$7k~$I^a}jN4lgopR8?g$pPJJ z^%|?sZcMxte`RitQU zSWZ<;@(jPr(@qz7%}k=yZWRixRx;jH@iR4@Uh6OjnnJmt-72OUidtT1l$VN)a#6%j zB}#%;xecGIQA`ypO+hl8Yl@>YVL>)3vFa5f9$%(cR%*Obsh$pnbBV2$btGfuVO<0x z*-9xBNrczeBAM;waH(2O1on#6OfXulm*U}ys+B5W#gX-z zwwkUtW1G?3USM-QP$>sef^57gXw{oaWg%Iq*QL_*URf+GRHfpE5H6dr0_DDhCsNeo z=~TQ@FXifrW?8A1$=iu+ODYt}qsEs{+HixgL%W1aS6cS!TYPF~=T`s-0%Wd(P6$XnpE>s zpb-hBLRd&pDDe5kdOek|HU)BvMI&ws^y;S6%uCj>E^U;C<(PBCjjhC{KLOzDa-sb(S5ZWrou zg<3C@Xe153M9?e?l~R?sDl}?^5~WnFfaf|}tml(ui3}YXd0LHJr)UZJHDM!Fs5d2A z5l?5)C?ry|S)#Vf>U@cquQ4dKdad51lG%MmjZr02N(F*;xtxzi;>BV`#1~oo{XS1$ zuia&ps4eiI)ReM{0O@*at;Jw=`ulo(I*DE-me%vxL?)H1U>jO4DvMnno6Tf(nv5EW zS|_N9*2`mZl)=g z$utg=Mk{Ny#f>5?nRq&rDb$fHRV(I;#d0o|ZmF8-mRc(;H&uFxNUh+vF!?>1&Snyc zY`rPaXv7M$swI>Vxm_yC<)m`#8#MkmUvB{=*LCH4U*>{a%+1_lM$0nDmYMC?Nepr9 z*vVvq6P7{_8)7?g5>sr&%obU;xJ50sq-Lh7E@rw6?^ZJ3_r5nX@2j<>Rconq>)vzr z+57*iv(MfD1%s^9YIm_TA{)rB@qDFdUeQLfCnQwRe5}$9L9Wx8wWQ zf9;3&-}uPqI!%q+)sIK@vyVOf(MLy~+PU+uzkYx3Z+`KoKOE_Q`K6QNO6>VlR%GJ% z!SiN9X@2;N_4oXD68(ws=SQ_SU;XxuAFZ6`R;;DN>B6y>|MZ(@f4=i~zyI%a{M)B@ z?tK2^xAye*4#Z2YhS($;Sh?=12k*GbfSB+8=S9D>W5*A6?D+Ek{+1tn`Zc)uainO^}R`_^OM3!{g3L|GH($R~1-Zq5rk$p$r|LO0a{po+Z zfybWs_0C^D_S2oee&Sbu{O!)2FTC^nU%m9y&fh-u_-nmKpL}v(Z>lnLVV*;gD$@{L zyQ*>BW!HS=(XZZj_jmqvC*S|q&k5{G%594b=cx7%Tzc6y*#Mr>mgC|cNJi7PD;ZNRt;mKVe z?|S^1r=R-M<2!%AkH*V~?Kfd+G%g_I1*Bj42^U8}){QR-^KX`Y~dmkK_ ziG>$>riHno+4*#SE>5)7rH6RJSkYEH1`rl|`?8hw4b6+!1U;LtX?M1Ft!~WfZSA49 z7I(uMZ?a4RpodN7EgnYZq!JX&9!k2z;j#~3C?-csXkv=zQn`@}VaOt63n{~z*^VH@ z8Y0PA@1sq1WE2Y-D$3So6ETa^RN>l|5Sq?-EQXiKlucG}^mLkp45X@N6jJ5nToR>4 z$OJ=-2Q0{*B}=ly?4|XRecfWpR9C9{mmfTO_|v2N_I>u+Gta;L%rmci`q{2OeH1zN!oL2#3!lCC%F&PC zK707dKkxnIZ_hvb)ZgFV{pqXEy?&zigAew6u;+kyh*YCRh(FbpT_^UTu z`sE$pyZ;OK-*e}~x83>8f4}$UN56a9_M7g!@zT}Xzj({G)!kcfz5jvxZ@u~6Z+&;i z16OX|eEF8H#aAzd*#@c#feN{H1rILm^s|~ogHz0R!SV6& zTzvH6=}&j{B&R1Yy!XM83w?uq#}ACA8Kq2i`k!rtidO1Ih5{Ty$>e^x>m3$3B~y?zF58?z-C_C7A9zg}5 zt;u3Gx!s<6E2vr;-GpoLhK@kPiY}YCtGm0oU_^T$GGlHqp_IkyvQ-j=>7n^t ztba&{06ITIw~(@yFk4552SZ=-Iy0Ba{8Z{hu8k=sVZjH#mIiy}!KH zbL`mpiHYHb>EV%>iW)jvDv$NdNTYXEnU$*A*Egg$DtXy-=H7n}sS1b#8 znwNAnd0nfn@2Xp|w%+A-FIm~{^LKW6%q@%S?Cnea-qw!#x)qmt09$*@qD$?fbHg%F zX=pX69OZG??VeCmXIIdL!hRFuZEGVnv)>Hs#T;P~b+@@N8xcW4#`T=Wjm^bkiEQ-Z zT(JyhF3jmjF`g=xXT#a~iA=g&>Kl`-*})VbWwV9wY&tnP9qH?tn3^tTrut70r(=V? zC;Kjp%nS{TOjXABoxbo%Z*=BF??^aX$i(6k^ZA7Z(33wsXCa~~M5}^;q6nHOB851| z9ghd0Hg=$I8g{w9oshKdl7nU)C05x;H9s}KWI5r{D3}a!eUb~Ymhe01%NNbd# z&B=To@F206ZqY;otqL5daFQhFixeLbt$48{7Sk0)Bg|%tPLdqt_cA6z5@D6s0mLH8 zW}w6?6oPm>OP4sk0k4Ck9GHNkc{t>1ZA2|?ouMV0I+|KNq(n4^SWm$1w)!?+v8pLp z-`-(onwNAo)pxC2wtDT-x~6)wuce_QfLXgcaj0{1oy$*S7)zuKxxY{;OB$#OSiK)7 z?S`lWasq+y8bUY>`JT(c4op!=yB)2G42_^5sRF{K$kg22!ooy<|4=L!o}Zb|%#Y3) z!#vu5awMS(7mh}_>7j{>XC}tSW)||ipu+?!O-)UX4jtP&m_7H=7(aiZK*WYK)rpDt z+|a<#;JN-tc5ZM)h9<{VIvs+dHi1G&=4y(!RcR(O>|8OvDkb*Cr#Q(9>Ri_tXbE_`R<80DIFDT=JUFLNjK?dZ4P8wv=?^&kXhi}LRRrxe z%G?kzdFt&H!P?wzog-{CC>lx+#}!`1El3ftO7V&z=MxE@wnfj2%`ORU@4{899km$X zW+gHu%5J4lnz06*HimGRDV8N!Q>{WgY-f1gSqB$k8>~s?e5|O8NZ$QbTKzKs}R|Qfy}j%aFLN@xs(dW)9LEMg~@bkp-N<@vO1WJ=1Q^2 zshNrK`T4P-+0@insv5pHH9a{sJrke3Fq4^!8>%&yH9|Bg^C}>ftFeh>zLZZCaT26$ zpkxhM&04f-A&Lw0sq}c5TNqA)ST)aCJ(aT8&zEVo6e%IP84qXObtW^*VpP!V40_%E zwibuOV`b}HB#xUI&=Q0SvZz?iime#~{eHXM1R*Ae307goX@Z@hKwaCCF1xv|xxTB} z<8*ob4y%QBSYgWRM5>aP)ogVn0#b1l>xXAE32h+bZ$YEQW6U)X2YxytA)#Q0te{PnY^YI1ssud zoW$gUAW6EY8E-^c{#TACBvNJwl2Qc?Rb{yVKna*JnQbnY z)qo#+sKaOR_&qKfb$IP&fXA$;0lbW&;f5bG+1(Tl>6F(++I&tDb68M=B@mjmn4KPP zeXENwdpvg9>@}M_UXMR$v)JsUrXm<5$^cGP;xditi~~>^8v_Y>-T+S!(R7DhBiu$@ zcA5>@Xo3yv1GP-PTonPc8Iy`tSj%y6ZZfSX0948e2&yUs1=c2z!1HO+0caSY5}0mg zaoliZsKut|@&D4BkcqCpZ6-o-9s8BGktNB7QnVK2P3#nAmz^}Z( zRSejZ0Y$E6c_16%l%fu#at#(CLDupdXgdy4Cei|z1(d9vlp-0>fJ<3cKnTW7PO}b? zn29A&fi#rHZ5|V0A~A}RE1J%gN_iPZNK6zc76M2uUr-Q^tLAwfhZKahFitCs zSuN;4yBDbCyda2(oGGeGxm=L}08%(vs&b`Fw#ZdVf&{~Yjwm8bl1ALtYCppmQN)O{ zfLhHL%DH4B5l>f&$xKn;Qkh~dH5ZA`&twbfd?r(>H5L&HIZ@74xLnB?MMbKWE`T7B zQ#4~bGx0Q+4;x03OXSL>Ogvf2CbFqWhObmao)cA7(P02UY6q1B!;+F&g;EQE#fAzR zV}U^uSH()sSlY$10q~OHKkPP~c3VIU|7YcP6v`J+qL!kgLxd5e2?Ny?kuO&P#!NFb z?p$1lK>3BGO`&@~*WR(^#yh_F$hSYY;R`#yaqE4L+lE=d)3PH$lx?fQ>(xA{Tsi#<9~kr@OwY{)|Vdq z#=XlVqPZG!yP~Q(f@h*|M=#kUwz=lFMQ>?tMA&ndE2F{H*_QPqLo1sVS`Q-b~Xg@ z_B=THCe z{4>A))6+lu!wYZjIeqfwmwN^l(lZko86!2^d%6 za-0A8`tEms_}$xY{OY6ke&vo$*WLT&TQ0xy+I5|6UdGdmRFv3kYP|2rzT?OCezg0; z*Z=XtE4yBO@vndW$NO)+{EuC)yz;jvo_+p_U;pwKPrUfj<9~SJxu;%u?(xSTf96lW z`^|Gt|MAJ+zqNPo-VgR48kw1zIUnWInQ~sj`KqbCp&V9Vz(P`X3xeQmW80Fp23OtE zI`{JRO?8XfmbS`Jz|YpIB(^#W6~cagna1RKs?& zksRa0G_914#6%p(O1cJ;HU>al+MMpFWr{X<5d^ifrF_F86tcJiRz=nGC71%H&ZS6D z1hi6ugCw0$6uZyv^;<0dHj6^ncP|yj@%7E1b9oES1cTk{S}mbwNc4nA#1&N2M3*y_ zcY7?Zx?uY{msS@DwLK*xol`tlV)4vH$j;cNC2gb3K)w;3%O?xXB!=54erC@bXM6tg!oE-b{`@mfzWDarAMJYaol|EIeEQk$y~idle*E_Nu}?oe zH8|RLV9$}UM0k4U%*kYO-drzL>4rMKuxP74blLXq`tDWRE?Il^m+#$l$pf`g5C8W0 z+aLMby>FQf=`~2mdO`Yr3G`4SF?+CQHV2S{lbt^fkrJf}!IRe*^as>8Z*=SsXQZw<2 zI(K?BJTx&mRW8S8jk~*$i-r5&dUemiJ^Md-@0G(7rw<(OyEr&_=HP)tqjQH39R6(I zr@iMt`smR6uO6Q4GoJ0h`H}ZtJ34fH->Kd+NB5qY9X&fZIdS3KsdKrB!9pn-tyJUF zoG>&Hk41~sT$wZGl=k@aJmjdxWK_YR$SiLmAyAa6h=T_`UKeGvRSn{SEJn1~I2)U- zAOvFWZmHG7b9vf)DCq3+qxOzv0gJP-jw0PgWbiEO_6Fnx zK}O85hw8no&2DX7Vz&hRT1KX6S+ue!#-&A(aq?x@%Ww(|>T~0$*9dJm&azU`@Vgwy z%}i)gL6|t1B}&Q6T%N=r%8+U{Cu;XYxWfgdDs0dM(oIwW^(+Upvc)@@oGs_STTnwz^r&P8jR8<(%`YFe?yqu?HUXa!ZaZCu4L z%T{<8-0re4q{(LY`OTyb2U)gmaVH_8v|7qX<`k@?cpPGevjwack3|Ie>4j7#laKe$ z7jshl)VK=gQzb!+r-aOWF`G-DI2~6fduGbXnYqZwNIW?m$&B>Q&Q2E#;nDt?Qf~U< zsdMLt#?JK(PjK_chG)*r2)V)GsfBDNGC6f|WPW&5U{j|e4mzFz4VjfqrV_;>j|!Y2 zUvX;#Qv{ua%H^_hZnngN3Dt~S?MhLoR@fabB^m##)HqjvAF~Kf3;$7ahybZxTUOLbnsOxC(u+5t{E?%~*)mRZrS2x+L z&OngDLS3!(!M4ukmevqKF}lg`Z}nrAjxJ1TT?iWWWRq)l3#N8B$LO49O~XrdUMT9_Fg z9O*wX5E0A0hr`vGvDxACGgG4z(~;#x#m<+_m1&-sJ3GD5cVT97 zXnb~VVz#U#$HpaP;9R=ge>Rz(T!=>_^A)=T;7|t~$rD@>^jRTDsfxvl#Fz3VkO3<^ zfzv?;g48Ny_23IqT~Etkvg0O#y~xowX|U1O^g88y;-7uy)wl>~8SF zOr3*=ZM4DfUaPffMbKUEad#|R8*!Aybr&UTz>Y!BiZ>$G}t0U!+M&`3m( zXn8^TGg3a|;OU|yWVY!(MWI9u8(qiUliTd=XI*|Lx|!mVzl z3ZgyecUtUbi`M{+vdUF7Kr>ltd6{gT8zzFS1V^|CM5`8)RY)<2L!#Ycns92F_;eaj zWk8Chai|Q-lVg+N`Jpk9D&~ulP&F0GGQa;D$=L>4CP)tOIhGVf*YGx*x&t)pf`Le8u`3jCoI+zIy zgfa8eS(*|HC6Evy7hD7#4z*aqnOKA}Weg&c^RUa-=q+%8x>|d-0!K)&iDvBe4K~(6 zQyw#*0ThFI+HH{4>S(QJLW>wQ=x13PLd`A~(;&)DDvZr!GO!*7>>g)Bz-G0318%3w zUKg_aI$P`z-t5PGEhg04WTgngY=C>vVWkbylW+tl4CPOoS+5(zNn=qlVi~beQm#y5 zWP=kiIlPo02?^0E@&>vRh*T6=B*8gsl~@)4c@CgR0Hi62gBc~7kYx!4Dpi0c84HQn zLX=LssYwc|a@I zO3UUGIiVUE7@A9^;^9WFtHKNlBRXbA5xd`TI9(2fuv6y7AVpX#fQBLnVKNgMgd>at zGXTuxv6_NSK{qC07D&@bLIxOz)9tQr_PA_@SE)0xE|Vq^s7@JP&=aiHa4Ay-^h!|$L@}3_Q6wD&$VySDlytQM0Hupv2rDV62uLus?vrx4 zSd};(g-mwbFfM~ir7DE!#)5(=+G+xH)`dc(lF7=5APQv#Gn0m|B|$_=rYn_fNl*dA zP>&{yE#yRS3#sr`L6#MvB5P``8&faH zVkVy9jg_U=QWyvlQB_znR(CYRl}bXb7Kg-h)vTdm646+$qG%#u4VpB{kx1fB!q*`qCF3 zxa0cUKX?7DcVD&rx(%zgtnk#WUFjw*PQOB!EY;9En+*`M1YkJ9_%q(f*N0DiIIo^3h~s zG7glIoSBNx8-{CTDPJ8+(f+oM)$5mf8rLstUbd{ErNiy@ses+>bT_Z)Y7gm>)$jE< zNyKnsjGD=7RJwOw&JIq?Vl)yC7fD4xH4qb{^Bhv;G$Ehl8HWv}D8`6xhy>ZhS;dT+ zNYoc%0Eu-KQ@(adGMi0$vZ7{-DnsSxM7IfZ*bxyTHJs!*h@fbglb8TjWel|h%s}fF zTbtH(THUQp-OHQ3Elo7l)I_6!MMMJa_Hk-cqs`Y+-@eMK`vai{y;#bkIBS`kWfobo zc$<%`F61!UaCSPz!bQpFojF$WA~Q2`X*>n!I$jOW#M4zGacV-zojx%!cx-I&$l&;~ zPmdkkyXT`1-+AfvJ+Hm+PEY^4f7+iI{Ks1Z<7eJ__U#KFzjWf*U;pyn$Gcwo%U|Ev z{q9Hay#B$769*3Le(ja_PVM{quA^t(dGpZt=(%G(7h-%qof;l2mQz+gCz||@YGLsW z9gA+bebdVI>#kV8;<7K^y?W(c58ZgjS0BCW+IzqL@B?>We~rQC58n6CgAYG+{ncOj zx4X9A_3)jye&I{E-+cdn{P>3t-FVH_xBlD1H*Z{X`L);Gv8A=HWAnzww(XY$>)JwQ zGX;=qmRIQIy1EQ<4+Il{iOHe-hIdRyxB8#X7Bs&zH|80uD|Z? zJ-Gke`SZO;29k3Z2FFKEojh_hJaje^pNo|8v6w1PPvomrN#aCRh~*%MOGpB?N}BYT zoE|BU1XxHdWaDKpS~0O^$i!p~B?z(8gWdORHU?n>!t} zqrS;u4YhVQwr^S6*xKgwF5SF&r3GUA^(@=!WiZU{ciMf1W-wdKn6K4LIz2FF7#56& z{1hQ(c!6RosValzDxkto4g)TzqWvqsJv%>Jl*-{bjDW4xFdCvkB_~>N5H(~N1Xclp zS4}Kf*1aumv!}yUf-H?)Hicfg%;H$NuD)(Vm&xlR%uVft;kCV9kI%udKD*r`#~~LY z2@;MO*NY0In#%B6c|NHq*@coCji-jjs`5nNbY|hmq3LvC@cqN-@!nXtcTx!VoajGy z=Gg9|XD$r&UKl!c;^@1(&!6k<9hjLNIk|gZ|Ah-XxqW3@yGSgwQ@)-6{)bTeld+yE?5D?RML27N;-J)ao_Hq|MC++UnJ^21(^g zDgiMfQty>gMal{&IFzmC$7Ujt`DkP)1?nbsJWey^JTD3hu}W+#5sOB9PDGUH-k6Y{ z4Tt;B&(04|C&we}PpBtQ-xi~aEBN})=cYc=742{erD&a(=ZTJL^`A= zusR=82hBn%LTcYwk&N$ac|IC zzc|>?<}>5&MP0#$_9nNQz({Mr4DyMn2pcl9tbkm)P$^b*SmTO1 zT#QDN>0&W47l{j+v367Cg{k?m3l|2?A0LRR{P~j^J++XU9gRoEC#L4Y({tfiZt`UB zg~8$8<8$(KPYg^YQ+n@Z7}QLS$khD=Z96Xzt`(#+w3(pv{_kJH3e-!4{B>~z^rv1)@gTAn5)G?*eEK{vdEnm>gySIrw=6@ zu8>cGeN6#OwfS82CY`c5ER;DIaJZU6R;LG*Bp5ea#42gU4L2fa5X|R_3L+*1T1p6p z=oBQv-%uRUTAfv?u3jz@X4vYoFhQpP`I|y6GfPs2j@5Wrksuf_F{-Qr5KHr#s~#z1 z4h-OP$#7l~)N(~J`IH>vL&~{mnIaGZO6O@pB;kemaB^XwKd*$R%4$9mPo*LwiBdj3 z6G_AhGv~&W>6k!g$CHwhiRQ(^LNvY*NhN0|BZbIJPK*uBFBt1AoQ;kp`BbiyiH}WY zQrYzEY^Gc)Yvqgr85B~*5kb{cb5(>F3lk}d(RdLzDWF}?s#aDh7BO=&##k~bjOEgR z!`2+ENOg^7td@*w(s8q)xcz>HGGVyO3<5AsBlbp0L{Y-;!F`<+?62`TOxQyqV>&{u zUeZ(N_0+f35s1U>2zgAj+3vJjETo-9NVgpHakt!eim^y_`MDorBJ)o zW`jYPWm&faf)G`~tq@=jy5M37Qgt^YBMb|d3=|Trl31&K2nl)7j-`0JIX|CL^?&j? z2${^Ph_iYkqbeezl`1-cBA70b9s^N5RHabKWi_o()Xg+zwonwV@wFb8*{Cu3i3<@m zIU`_NCB3ka=Bu$RU#zO-bj|?3WTwDXiXw(qV}|5Wg#uTIC#qUDl2=tRTgz|H&o3AR zI5rql3X!Z<7*BGsjF`)olaZ1fnHLQ{pOUR&R*;k75-9WKLX{%RszokpS~ZuIq=mU$ zg-5Y`(m>WC2WchV_?p~8QIHXsahV{3B%E$5!8l=&vY?ojEkiVBAOOXpklBW-v=2&g zpr|`o2xiQnjuWKW?l5DN&FZZ)!zP=}!BBywIv=UhPTFwlP87G)YF7m6?JSL1Lq6K( zwgNH^$%x9srdkaQv)So4L5w%xGMQZz&KhpVPSaK!10zP%$4HCY2Ujo$15#$81X0E~ zS0Rg;Hs}*^vLe8M00Ju&)!;vi1;XHeR&WtfM6G1YFj!J(ZlPlMGz%aj789i62DKRk zL=w3KVwNQs&}l-&kZJ`0IUZ%yd`T6>N*v$SQLTOd{r(%XrWT8{#{5F6W}f+Yw6&6Ea{q{V>)j2V)7 z0VgETq!tBDQ%Eyms&%HN5WCMr+bw3N-R5vuY*xY;e+n}h!NBD-VGN}sFb7#3w5C~T zQKwN50stI@35(s~q)DI8>9d*43~R9);ryRF<*MCoqH)^ba~w1|NXUpOHk_AnTrO7x zh=dR;4b=*c>X1RvvSvWH2{l|d0f7hslQcq`K}lB?gwz$vjKiRe;3$cTlF1I~n3zn7 zupo&Q6*CjYlQOsotMUL)E6}4VN-4{W3WW$dg)5?<06HLXs;+`SZ8ZXtA_HoH6AM}1 z7y+(QmDE~iidb`vy!Kipg=!^jh^UGr74jS?#Iu!RB9gA~RU<-5oGcavNL2t;)(phfKv|TeYOzq| zWjHqlGM)LoDZF|J{>+bs>TxP*JHQrm|&;I?j<0pFF`_0auJ@5r_ULG_sQQR9+vJ6OtJ+xKS})kO*mu(<=%O#)f9;jmZCkr^ zwQD@!^SMAAj=JFaP|>@zbB|dgC9@J^8m+|M2Xuj9dBj z|I6;r*3$7Gd*$t?fARD`K7Rkj-94Z7_Z=9T%UB#<*3@|umv3wJ`z_Aq&LvycZ{E;($>(nH*|u)qeB%b+%I#NgTDJPSjqR-g zSJ$TIV7t{?ZvzsMQgZC#$Ux8W-JgB-=|}Ipc5Hm;#NfoNp-6L3Zf<-uhof`TnouAx zU6u$d2Cx>O#D#(`zu9D8wPDRV@3QSn8#>z;b^Ah_@42N8@7la++s3Q5Z(hCm@~iHC z;7iwCbM3A7Y*~BH!&k1_e#7Ulwl`k6b@`g5bfd> zJofUT*WcNDWc<`e$IcC&{qUpt_~AW!dj`%PI&@^;vAOv4-Z%Tw;i3M%!yg_zx&MPb zZ@zZo!qL8of&Piu#Up(g!rXrZSmiF6R(9f~&%f-7Zn}QC8Ci1K>gAVj?P%Zr)z2?o ze%Bq>U3dMpcRqYo#|>9qb=y*>-``rl^*UeR=5OA=>82mwbH_cGue<3Bw_SDJ0}uY& zm+$@djvw9HecO&5cV7O5doI27itBE?V$IsFrRy*I{5rPjmg`#^)~{+=w<5H3OS8>F z+ey+a#7jahuR85~L~a8|QyO2HIe2L7d4XFk@!^q zJfu#?%pQqe(r&jl`ALsYOtZ_{9CojbcIleOt{0h*p?M%7F_nj_vHqhMr=xQdCl2>c z&E>{V^^Rt$8M)pZmlz?&@nvvvdn)g>sKuG7LMogd>*J`(#WYHMa#U4J$hXjV<+tR<^HcY}|Iurmc5<>9))7d-TdH?zrxXn{M2+VRcu- z;!Cc$d~yAXYnC^!yW+|_Z&|hG`upy_dHbd{9jmYETygbP+ty#QwXI{_B}>*{vSmwK z`?jqve|Lu`uyKXg&afuZtfb>216I&bmzQB1y*lc4d+pw3T{hOD(+#a%9k^mBL4>L^ z$<<^+F3zO+a%yV0|J+>k6f{q*G7{*nD3 z&KAZm^bZY=4eojK!Z}0x|FFxpf|J65Nc(dp5zJs6a-*fc%`^PVS za&jUvaNs;|f+|1&UZ|kHknt|)D#)1PR;|Qo z6m2qskG(ZO*&4cokaNZI0ORX)I9;0V3(3hctd5Qv+P8duno`Pym?k=0Ri312xFn+t z4bqINNwEwJfMD&&R(dp|ak*kOGnbqh7?_ukV#W|==?Q^RV6?uI0sA zar@?Lwk=(K<<_h3|MHDnw%&I0#^q}_E^D+=E$bbK%Lmp@u(&D1%@EZLVgWhE34vBa zGW*-LD9@1gHYJ9yT81HAOP#PlSP8gRc?JP;(Sh^P;la6lVd(5^F&T+YPKjWuKxnh) z2Qz%WtX3lBZ2!dkd?Y@7YB&I~!Y@8`})XfQl6kcwOM?P#*%1p2LmR5 zdvkY)uy%H!P}kP>*5#dxS8uzlrE8_v5pp?M8sH(1P1gybf(r2>Af*dc0g*DX>8S!x zipNWeT8O2ywf%ENQf&bTWAgaw>+Be)lVl}5KN}l6H$2?eH#~4=GEX4W0~I_yGkgAU z@9|GRJ$T~WxslnFQkYH{4-_3O;`7HAwAeraneAK14i3zXpF4Z*%%Q`5Lp^&xnTa1c z9Le{c49}fCf9}-LgG1%Y{7jWp=5j>*t^iID65}^{Sd|Fcs-Q{d#d0MY z;fZP)0uX=4GQWUywp!c`bh)AfB$eR}y2Bxtm-WKMiXi3_c@PjZgA~m!1LPR9(*r4N z$YUi*YoM{&=dSBov!rh6rCpx3#jPD~o3FJwd!gbbQbm`ik_HLg;&C~fLon6Q-sEE) zR(qYxVYM_ix3Af}aod&aR|)xR5I%dP>406NPMKVQzdj!&h^uq6AfA#gG!140 zH0rANq6Ps0px3NZ&VUudae;0zn`*rpoP>r3Z9Ll4VDK!4D-vokJjwyImfZ_O-jsf$m1D#qF>)Hrj2W?)HYZmXO~?BP3;UA%G>c$OZa0b~SFg_VRU$ zTAJFIb~s&r3+pim*Y9IZtSjJgcpCylxg;4{yT}()8I_W&n9JvPT6`Ug8Z9P|o!|?w zhgJzM!{IK{;xkbufQRW~9GY}j?Y(1u{>DgbIjtgT7%6#i@(LNR56p) zg-AG=oEV##o}8MQ8a#crzi)J||Mc+GY}jxNLZvW28Y?9eDM88>Rn)kE$qH+HQGgZ0 zf8^$-Qqk$y{8XZ7e6m!`mAHlBsaR}gXlS~>e>NN|$by0~gh76oUasv^&R&=|6iQx9 zBvb+irJ@Kbl}aHpla2Ka&JGPtOihd|@QUgPIO`jo#&Y%tTk4&tAYo8RCJjEXl^sxc zfF?B&0{POyTq2k1J2{^k84ZVHf+|~FR%c5`UBi-m>QsT$%Ec-cmI<{sc6BaVROf2z@;Ka9GY(=9NU}ChQ&V%jx1o(ioF3ZkQWaRK7Gg7z zY#|d_5EPUGKzmEb*U{?nHPr?DR>npFD1||a0i_hoLv|Kt?5xLSFgl1(pa?K@t@D9K zQ>ckFxSe#Ejn7jSCy7{X1R#khT;jpn3G7UglQ{)6h*;xMO6GN0h9CfjRX{c7N2nBq zd{#p7+WCCaYDI1J%>fhRx63M6Nz9K84ECNm*FQ2gH8Ni0ctEU_bGbw!5uKl!SeUvv z%ZpX6BI%MOlr>Z=$(jUIV`*N@#bWVXF&4|G!r^EtlPOe{>Ow4=E{o;boR+aH1p_?!Yh;2+{##=46={E8+0`K<~xT@u|tVBnRpUX<=RUjg29v#bhCB zCFTJF5<~@tC6HnmjA3caW~Uh(A#j|;bgram1&+@ZI7zM)Yd!CZ#Z;QpK-!EVwA%s@ zRuc-~wfe(WpObajX}jN1Yw*IDO^n5EFD~n+uQwqpUXs>fm$0Qrd9#cW)HTu7}nu#yKJ@J zaBFM3n!a?8hj2CqyRZ1dJ(t|S<2!dg_~?C~d+5v8ZMyN1^;E;9p`2#LnZ)~t&V6!x z-xI%i{E4^T{^ReSd#&fdAKn^0`@yTvJbV0;4~HpJ3}4bx*RlSJEq6S4-y`4o{{OIb z{E$KHk6gL!iaIMCkBy(6nmY2@8y~;(`k#OLPagm2|K~9H&;IfDbIQc24B~m z58ia?#%;H3U%&49d%two)@^syir0PP-h1x3>-v=rLrznWhAZI|Uy4snC!;eH182uB z_Vj%6+DD)4{dCXs&pz?XpZ@&kJO5cI?!Rub|K^F`{^proAAbDS-jin|=}1Y#TURY< zS#tUHH(Yzg#?|fZ%ex!uJQi=qqPF&xt5>X8vv&FBZL60oYVBCOV#Bs8uik#iWjAea zYrgEVbz7G>8dq-YZtPgm>JQooPa6YR0Dy(1T(nq>MdGoU>7fyWWY6|aCX)-9e2K4S zDoQpyIW)B}-`6`iHWE)PB=Rz>YE~MDM4QKEf=Q;aqqWW1v97ayamT8yt5#nB=tG;A zTzlIs_uYBt7w@`u`}Ui@c>lv+xc%xIzj*B>x81Q}>AJhCW+@zPuGe0=E4i33Ll4!rQ$z~SS^j`a7u{l;q_zyI`;pY;6o&#&)3cIe~7XO5hn zUYOYP>fy281E21B^_iF7-u3qW5BCm+=QHI@L1#+SDU~#jA1-ycc*~L&!rIcY>H1CW z>n?5ZZMbYn$GS}cvi;h%R`=E`He7o3wp$;(eCe&X-g)1qw$Ao-Yj3)7_rXWL`=yQB zzkc89?oG=B-A(4YE(gt8Y$k?L(ne5zP4lB*abA@s_F*O+h%*DJQ ziMqvZL_{G?w73ZX#)GZ8;AnT7LXC}HQ)pS6+g}&3GNfgBLtw)tD^^{(ZQbH4uWD&p zy<*v>tsA#qxpm#u_ka6)_ucZ)5AV75-ml#I(0!ZNTyyUo*Ico7MaRlZ>)Y0^UD>vD zxjV3AY0I)D-OGcnrQI-UW?-Vx141Z;5?-?++q>#aq1Bgk2Ah_2IvtHIt)b?PtLqz^ zY~CenR&^m21%Wu8mg2Kx)5*D^>4nJn`Sa&{=aT1p$0m+^aCBhs`0>f9ix&=kc<9iD z;k_Rm9z6Bo{=)|k{Pn5NE*$t^-@(s%j=lZr2e0kgf9lu=AB>G%oH+Q#`B>kPgYWJ= z*K?@n=<#Fc&L28IcI?dfRPUbS;o`z*Se!XF80M7l#c55Rj>2S>_nOi&TBuljQica> zoyJ{8Jn(p$kSyJ7rx<%fL%o+F0v$dWG27uZZ!yVv-7KjGI#(1hU$c$&wg!>1IYcq0 z##Xq1HFyZ$h7Ap_kl*2JX|_9jbpbo&4AuFm;HqWaRMEAxb=m5+P@ToGY+2Wu#lGg% zs~0Z`d0H>Kens1c+ppcYZEM%^jjK1_e#gd+u1mMHhuW94dP%r(L(tl?*vs0TT}vD7 zcE1a#5+K;tWzoFbqq!^L+aEuI4lqnu$cTEt(Zbs z(ORmQ2FBAMH_~%vJ~=ra9`ETp{>Hl>zW@G5?>zVRp~DxB?AkvYA0C*PojHAG=)@rCS?D`5IB+2{-+%H*-~9Bsqx%mXJ=J^YP|wM^-nR~& z-g{#CjI1Ixi zib0~HZOL-lYuPKW9G0}Ll~ZMF-X%8#cKf<_*>xKI-{ zN?32PYVDgsK^LLYVUnyfEg)#shzgZisdQMnyNwp7 zTc+=J`7i^o?+FZaVrp-T(ckZKwODXT-`Vc)wfbCU-=X`)J3IRJj0QZTNB8X+m^e7G z|Im1_tX~ z!fDZKwPs&yt4&K--8x?7R8#;Js+Is1==Vri-=J0@BaobWTZh_FmE3AJgVpTp zZfo;<`?|YE#)c2>@9XO9=osm9_{R?UHLf-z4mK+38Z4m#pz;lvm2E>-ppmI6AOHo6 zb+bw3b4#Ku|H~zf0~D-5hr#alSTMWaW5QKxR7*z-g2-t6iYlbn^CSmRg+eKtD&)dj zvHbROG_!ntVQq6~HV}j zDAstbipf^=ctdRi7{ZPS3?)c{%5F3e5+q|6q0ATAgnv^cKdNWo6j(e^fs0cB;bcC@y6eO;Xv!tPO(D-Z-~F_uH+9%j~S zz5O0b>qxiF>@XPuL5rOdHU zxqK*<&5;!bqGa|d&c?tC7^s=H|*yGPGN)7ZMGux>FEnpjll{+pIDq z4|aws#S+<6iOxnVtcZxbMvn=}a46IOB(jdEAj}@H;#!9c+L#>4m5^GaHoJ5Z3!)&Ta=8?^-)%4vpoHrH4ueIt zR;^WPJyycvblR;JpVw+L=~T_#4=R__;%Vt^ceMwtcCSxQINf%m-l`RpKBwO4F*~hx z8xEKpN>nXtW=^ClwMMzh(oKd{F{H|*cKbD^U@+jf>n%RNLyoL=x7VO=8SW1DcUUZL zyUnV`G%zD4CB6Zmf>@2^c(%$yAf~7ksY0omiRM_Y(Wo~-quJoJ>FiEhtIuGuTkLK^ zX_X<7F!($gon1kT2m+`zpv2d!)nq7F+TBUU(>00_K>-5kIwf+nP|Y{ze)IK4iJ}V( zriN-Yg&bi(f#q06tT)T^*K3)y077b59;I}1?zfapmlMl7r9v{k8%^wnw$~HIxQy4u zMlqaW#74PNsW;>vnviovGFzzeDA0T}fZ?mfY&sJOh2y))T&l{Hixka(2wh>hYCaRq z=F{2u>T0&0D~VLT0uc}lFd(J|>kW~qi(I(@LCx~#b+Vd{7fV%u&X#$mn9Jmg1^L94 zdY$EH9#-L)R&TefbvlTLFlBQczf#?_>x7YJWqXk40gk2_TJ9mWItxJ*C*L8G;%f5X zqBw?;000uHLbgulsWHqA@s#h`qjsZMsu-VM^7KhQO1`rvx zn_JE~jsulSt;JzAYPGmhs#aL29IeOzMT2ICjEW4+uPRK*4O22=?Rz} zuHPBR`CLk++hfq{)F1%W%aQ^>RTv`k9H!UFVGD2_?AL1Q(IdUVzxtYv=os-0J@zNh zwm$aU-#+=xZ~xgh{^r}yp8Cdfk7@UQeY7C@yzROFx;p>io$LQ3qx9PszW0wWzkTza z=l}82d(DDnzkT<$IkREI{PgjWBTs+%{y+Y!FMRcnzV=st_vg?3?f<5# zKKpE+PQ@uIs{pq1@tMWN*^mF@`S1Mb`RBje^v9-VMo?EcmcUxy{z0CUT?=QeNO zymjffH?Dnr_Ra79$NOhKeeIvW_x~1`|L0%+ujhaH@6Z4J_n!aZ2QNSW{6GEZqYJP8 z=#@{dUw-e_#zHzevzy3bD8|_9ETBt{Jxm+c`U4{xf%kxQ|o}bP{)=RnQ_GU64*~}NB8*!7<+0oM4^WdrD zM?J$247CpKIecQ@@ozl$+{2?!eeL)D@R=_?dvfo@*q);&P7L%9?!Bk0^?|3xT1Ur^ z_OqI?iN28mPhgL6H%S-r5OsHnvP-nYd<`nxb^at^f z4UZn#_so|%J3jY6zINn^Z+-a-zjx}MXTSc1Q;*1xo_YKa|MtJ1@ICOifBn?`-}sZK zKmXM~{?jj?x_@Hg;IYq*sGRp7b6N(v?7bbP_Hm!VXmFWKRxwkm#CFqMef9DR96B?f z&E&T(Po}n3slt`1bnedWiyvK@x_#$^S3j7Y|M-KC-hKbmnd?9Q&O7H`dgJ|1ZeDxm zl@IT1F5jK~==EEdKG>~IUsxs^QTFT6;c(`ks19^ zyGd`>Dhw=VHHamZTWA1kxR&O0KzVa&C6Z1==I@4TyoOGsDiF%RZTeIL$t}ymH-v*% zZMie$S8Xy9qCL>9Lm8j?@xI($6)F)yJH-Xp!ZC*?Fk$nSu4<8ur z3U=K;*!%D!hmSn*`TIv7eP(3zBa8)4`?G}1bF z{Gric+nx?wWj7mDy3U|VR${!~Y`2o>8b?)WtyswHhAYXrjo9w`?DWh`EH^)&NZ-A< zkj`x^rt{I=+vlckE^VDVb9?jFCl@bYx&HFct}mYd@XW<4x2N8H<(*&r__dGT`q2yL z&VF?1<$u4pcK){?zWUo+*Dv0@acgpAb8<6zcQaqzy*gi(^3AE)t4m29Os*#oFn4*_g{_EEL$S^P zTmy{SbPBgPgw?nnW_4hd=(ASKqCgim!r5{;U84)-;#QPpMOb6^7}G`>D+Um z*B7+9Mo0Vi?+FYXIWjR8u=)3&?C}ggcx=ysQK!4BrTx&cUblZ_q{Y?R6O`3N*HNFT zv)?KUm6kRO3=%rNrgabsZ-+r+F`<&qo?DEwG~}%Af`k1C)IDGZ>o5+mb&BBushr&o zvBe^jjXQUjx0e>z z!))~G($?g9Ex)j|70aY{S68OyBO4*WS)0o^jm3%#L4d^4b)J=UkYs9Frgsn($c8s< zybz|0wpk^U&*b(%4N(+n8h3M1!DN6lQPk5CX!Qqs+B#dYhN;^j(i*#1H&_LM2;k`i zuiE@mEK^~TH0MYuSe;Y8>7x35Kot&3qMJe>h{?C)XXox*yRo!2 zdv!A3n4c%bt))U?Beb)*cqhcvwwIEP}t4oocaJ>{O zNQfx%te{5g4Gxy&rhxFEMkkAUR4C9m$D^8NoiYU?DJ&SHH82d52aK560O~rt5aA>+ zHL9qWK|NasdBNcFB0FiFmQ#84fWjy<6eXA(I-#L45N-{K8!Q?`*(_0HH_Oe3vXmrY zYO1ET8g(A%6QqqBXm-5eNlC=5285eBusKy@AJYeDs66J|}Y%iG!Iv-+*9WDf@1 zR+rP;-Qu+weJ*EfXWQ_ej@A~BtIdsSTL-L|r`PMW={1PXV{_}ZhCsg#@bs7fCPyM5 ztW~p6ON*SJP(&t@Mg=!fRotS2RC=S5)mY7H7{yV738%BVDab@y%tJ z#asiblc-TD3BU772B;({Hus+=);9}xs-}v=LiM3Q{f{W2B8WLEPSKfT_)#NF(&zGAksbk=>=W^ky`dPUopwWH++0 zUCPB%d73Fp8Zw;El@)LWHdPC#g6He`VuP(DcatS5AFj}~hJYcZf&}phTgc`rb&{kg z6bDsKD^h1HY7*9vSrKnkt0X51m{AD}nM^Sw!@oqLOY%BPIh-uE2sM zhh9`~Q*!`Nh8&=vk@*XkD9B^xH9g&GRwC45bN*bRAP7m)d94afpsj7N({6V9<+x3t zmR7UY)7NUy+e~_&N2N6S+?M7fyvsybZ0-P|GID$s|8gW9nG?93XVl}LLD(#OiBUPo7Dnnvgjbu&}LC+-9!U10Ei9( z6f6m8>UF|pu4i!%%42vvQ{yYSR6HXJ=^9oqK`1CnT5Y4)Tup!#WeEUQCr5YDW zj_2ew0g_r>vOw>WTphbazg<;RUvEgh+mJB)l`+2WuiPx*=o8(HcIJC zCS7VI*TeZjYG)_0z7mPX^Yu!N6RBdcPE}Kx5-ntRYYKoy)D05CAu1oqkfmIyk}JSa zp#d`#N0*cNMkPzja9&I1Ns5OJdR(FfjfzE#Vvfb}X8m?RtpP(Z1$j1gsq zVw6gd&?_*rRi&}JR16C@9k*d6fud%+GuZ7j5;m9FU}^Cx5W86=H$Q4}>9kI>+N4vW zB52e!SMZx;3FtI6&C^lLpjBCP3S4b9U}h7pb9jwLU%>CQ`>Y7j;!x?d03?V~t&CeW zMz626HP9LKwgg-bmwZAI)iiPvCK+uCb<_I`;Q*CJDKJVDQ`AbL78VIDgj?-Suf^mr zC^dQw25K!jvldi4ttzcSYtk_dsliAx&Z^W1C~%O$pf<={2yzHtBv~HOLZa5BMj=?Q z2Qed9W1CClRgioEOa%&r6@xH2o-_4YC6kG7t#2oi=~}s_Fk18)vkAiyvPrASM4gQ0 z*+z|O&=M=aDy)2(Pa$EHAEYhr_#(LTWQDfjmcXBHgHFDz#)NUC7sq(Htw1 zO)6=2p<*i4tb#_12$#v0<<=|ZlJUg$`sVItG#xM1o6adDD^~Iix|mKzvc)1gDUCiaEQoINtfI?-m+srDUS-+jGRLDjp zS1i=XWWJnER(bh&Olx)N<=euufFuc2odJQSdmknPFbJWrd`l&f5@3N{YTHRWsh0qdOt;Hw- z7F*Ly4%gcBgeTzk2Rt?d1}n8H2#^GQf4j~A*AEW&{Xc&gH2Hg4hfX~E%>FMv_ZLt7 z;Wz)}>;L^PKmWiNzIC6q=VVL1A-}feU%Y$y{mW;5_`iSr^E2mO{nfkYR&M^s>$4Yr z@h{)`&O0yv*L4nx;1lEHCqDPJFaPCV|M@q+^%vj%oB!Vw`d9u^rsQY7^pyjBJ{YWq z3h7&~zw-7g|Mi2v|G%fH|KT5>|6i~C=HGwt>)SVf^unjt=9f3?WCC>Bw863A&c1y; z-l4&^d-i!pAN|aO_no}=(EbDa4vYkc4hH=L{=neS@Zm9Y`xC$a_=$Tz^VKgr_QW6m z&ENg`lb`+aUp@ENfBwXgL&qO{V6WfWT(sl~n#mfSUA=MX#`zE4dF`bS-g)(nU%&9m zdmmgl_nTK=`soWl`SHK}1=EF28RZ^`+D03j~?H@_voRq;o+g~i4*(x9om27!~>5${rIB~ z9X$NNF^^+>tY@r49~e6_*xtXdzqQ>-xH^k^2;VANP#dk*Z|-?8_;(ZP}aeJA&h zKm13(KhbsXL-#-V&_j=(I&$d9{ZD=Vt4}|6{Grc3aOCMP9NT-(-b2HvwzJb0Y;Oy8 zn^Gx;s!R0lZZV&Xt=^ehO<(@WnavxooL-%N``y?6^PS6Y{PMlGUVGyw|MY`5KK}KK zzxvsK{^XaR+`Rb4`yamh?uVa#_}bg&U-|CKr(b>Jt#_}VfBlWO&Y%0mi?f>_{Pz5{ z+n3(?;Pe~6y)t$A#qYl{dFkwpsmq_WH&#ft*r!K$y#wT}oH&<3J zo?e>0oUBe>m_)z()Bq?_h=X1;PYbfntW*sa zsHU{Cr8<)f?^Z!Jy|x@}5C#>;Y25xEBUK_LHkv@HGs}_X8?&=htC(VDS%FaHt))z2 zW9QC=?P_HD#`JDxd3r5fTfZ{DJ-52LnoDo5+@1VnwwTTBUb?s%4aL);rIM12B%5a3 zncYxaQWvshtxDqr*+8fq-fqX_sA6_i(uhM1+dMv}vE%UGzR~^TT>-m&)Mwo@(%F0X z-uI(+F14mj1 z@4N5V@Ysme+0*0e?riI^>U+Bp+-5gACk8#fK!?Aj->*{G`@FbgXn(uY*V|z<`U3&G zbD&L)qczUx_PLlMi(-Og1e?W?a*^e&$nMJY?b|oE)AMtY#NEpaiPZW=r5X#*oWF79 z?!tSoe?0l=%Wr*r`phr>b82V$%H+({-1K{|y!D?y{PjDpzVM?oZFn7+l|eiy&0><*TU4!6`9Y`VyK`~=c-DQtxmfRYZlN_x%LcntE%?lu91Dct({K)p+gh*9_-q4 z{Mf{JtGnaagM+OTkDuIk;%Lv%zM;_v@9%Xu`}?eftG&gp#yXDpb^bO&mcgDD6Q;77 zK~`_a1(Op2^;WgQ(Sw$Fo!ZhZCB&dDlT>LcsYFBII1W;3Emlmblrg#v8}-#J15<_U z_FB0SP65=~&D-JhPAHdLiELiEIXyFd_tr-@*H&Wl?_Y@}=cnhEm#^MfxOw63+{)VN z^V{U&`Q=P_WqosIYIWt-%;H6P*v&>G3pX!K@9xZAzj$+caeemg@@i@A^sU)XZ^yQ7 zOs_^u)j}#0N>q|5)LXlovT1Xq1_jhgg#uQgn2xJK2uFcdw5)KOR0>gO&YycU)#m(p zi&mj;ZuzryVkMQ|r7lK6o7HG_xcp9!jm;^2db)}j=(5&8HLwqabQfw z3$wSQwXa2O>L1i9dH|b1WWSFFU0woLn$!hS%%mF)5rhF=8StsKHYH*~s{(-wFs5}7 z5MQk-tvCd$%~mB3K%y)lFd4kCdMc8LXVRgS)y;e@olazG>9DNwHh0!%w@V6PaWX}R z*LD_Xwzt-H;>AWofKY8?b7O63?$U>MQ@7q-EN|V;fV*>v{L*4*ZANb6Ym=MF)v4JE zHGj7vgf<$DXeze3aC^O03$G@r)YNieVSiWKjwRTeFZ9r~}nVnbl!=R)xSC!mLs{ zyUm1^(0JOqh*(;URd}tCtH@}iBgLlcAY`!{Y+#uZ<$(tnjcR?1$KVQDWEEv|dlaI< zVNfX`h1O`o5!~!C0XmIQIw%HCRHjWBe_N< zUYGKliDc6ay%=APmSdSxzL>~KfC8ykD7uo#Z_VvQ=pDUh&K z+)W^SMh==KL?<+>C37^Sfkir*Dr8s|M0pXG!K=lM!XQ-_;7X2HBK1reSLwUGgw5k8 z7^V@gsVW7QrKnmyQPtxl)-zzi4K047#$eGQh^%~JOVEbk9-p^6Xfe53Ty~pIY3r~X z1H+y2-8X1mHU!c*tR`IQrbecTveY(0bNPw;`zm>q%<`$pM&Bay0*$z-uqCTXgi%GXFy z$rR<2*E6w7qmtiQjuj%iyV>;mW;~nAWy)kS7TQWSSIkq@WUQKxWg_d5OsSA3Wx!L^ zQw5r?=88j1}nQ$~+CPNEJnWt!=kYxe3oDQX`GRHN_RSc{0YDA${ z!>oiO9HwY6jYK+MB4r{68-vc|#n&l8tpeamaK;?tfCYwqg(kLK;gqm#VbSjfoZ}fNA4Gtr2GU@axozJef zHqGGefq*;E;&bWN?miI zv)QP(IxJR~&7#8$4wToKahnZ93_60qK&5;|1T+}TCRkKEbV`d6!Q{W_M;HJQROs*Ox7#(S(bC*GF7vt44Ap3k zDl=@QPEj1hGq_ITK#msWRuE-!uUBi$H|@$5K&6HS1;U7YxhbOxIZh75m0T*5$&tl! zjgtVNUI8RVsOIz8QlU)BSdp#eb}|BAuVnLuR4N%QQTarvTC8Q(LpeFb#8YK5ovLJ` z(Re1CD>p63SLdrjf~Ta{S=Rkywe! z$o(^4=jke|L}3laiAqeA0FkBXVzySR%OR!6F*1=eq6G2{j%!e4u_X7}IwxY7fZ)yb z5PDtHzOcInT5mAUB zt}|*>dZXE5GUAw4rzSKaBPhX|s8oWS955w@S4f;BG$a*@s#QvjPDdEzaBj63HMj~> z${m<+6Oh3lw5pnrZgkoSIpK3n_j-lg!_5{)Fko}Fdkq$A(y0bH|B%yf0ADu}Dg9xt@Fp#h(u8*9^vnukxgMot~+7=Pw(pL@vq_!po2 zv)}*B1CO8li*Fx1`R)Jq^)Kyx=zo0c@sWvBPk-^LqxS{st`QT=DDVh`&xh0N>G0L{ zyJs#gOuhN~dzU_X>1=%ZhtEI%+uLW~d+&pn{^1AjUVQU~*FJpX-+p>!W^v)I=YRCx zfBpKxd;j{~m#*D@?}IqGe*Mi4w!;^$g%+=#U#Ms51X(edRh+pUO;p@S%-l*m@d)C5 z_{papd+5YH-5p0BJ=S^OgFRg*PmJI52VeT)(*yT^^SS4qd+d=v{o)@#_t~LC`@KW0 zzGuIF|44su^pPhYJ~BEue&1&wc;cy}_dasS(SGc(R|7Ij@$zakb@rDZ&ENiLesMl_ z_2TB`nT3z9CRcxUCbG1!b?GKnT{XPCt5OpL2qO*N(5!!I#T9LP$B&Hmwb%l~4;((w1}euMI?%UoVq(bW z*>~!Ax6y1r^h~$?@V!Sr^OdhZc=&Mt(Z`>7=5YJTKY9AtBgeZ3AAa=lFC07Zxrc`z z`Su?lJ@N2^U;K;Dj-2>|KRDtX8E_9Bniv>5IN^4V9q$7v%b;J`{rCfWf`h}ohac_~ z>_>*Z0hP$qipy*IaZ4e`vxoyo*Q>L0fUS{alk3&==326lFKy%$01eg)q##A^6w0fs z;n3a5-2xf?@bx#}zk2@sQhNLS7d~OITyp93+gB#fudQD>eP;6RLS*W-pZ@0b#XHyE zc;)q%U;6pae)8g*XD2`Y>8~#@FJF24*RTHQdmm1{^ui|>UVG#0>EE8YvAMHd+?@$k zvdM6~5Z>BM6}Cdrt$3`Yt}!l;2}wql%W{HTnM^QJ;l{b?OAD)uk+)vGc5uz1^ijaZys)pgJ#E+J-vqX05en zV(*B-FnoA#i+^J8*!~kIN88)l`;VSHde4|FpbfrbpE+#Sm;?9TKQT1i?QMVHc&pdi z`@lr|pc%6FA3JgU{xO?n&-mDhN5}2GPk-ZpzrFSF0}nkis_S{?8(;gqXYU<8^yrhP zj*YjEJa8zW*0zlf?S1^Q!~1(%^s4rr6DQm{M@N4!*w*T?s8E~6LP*XYhmb7-lJ(dz zD+1>ulD)Ox0JQB1cwC^Uk}09ZKryub*pZGFG!FReX1#(Un-i!d@`Rc)M|z3?)J{k!rJ!6>b29iR_;ti$+gq7LTx!qC*wCi zT8ppTK67^V_Vt-tcf;X$a(8|H^r!PVwm83*Eo|Mqy&W#|8#m+Gl`xIX{- zyDK~Mv)5ky-r3dLch)cb^0ilg^zwyEmp*y>CqI4rwHN;V#TQ@u@U5$}w->Jd`ooRw zxg7zF@6wfAb@klTh`(Gop>~}I!hb12CWUxSE-`Xo?niK67}5H<@58Af+)rk zmDI-d>$5knT>Z^UpKj-3;ppP6<>jfZOe|eo57Pn*ssJ9w38z;fD2gfPNUwY&73Pk; z``V0JeM{ej~@&6pLpoRo}L5a0}nm>*~dTonG@rq!-4+$M%)%o>hP$810Dio82iC7mq|l- z%%-v9gY8~Z=h0*L9Ps=4CypFH^~8X2=%FVc_9F;j9=qqBv4Qciy{|34O|~8Flo~rTDN~!9a0l2DjuCB!Oh&u^b=xyEzaIOcD}@^11C>*`Rp7p zd}6?DN3)@LZ2tP4tFOL4d44V<f3LexjYx=$eDLe-wxG^D<6OF zAAUPMy?p&QA6@_8KYnuS?zvB1{QiYP;_9znc_spdYuSdLAHv#VQV zHD6C&eQ#M{^A&`kXU|=^TW7at=N4C%R~P5X2%nufvr30&?!NV}Kb_uLzWnwt-drlv zmB{HgPH#4%3#rhV_da>?=SxEP^$(^#nI?RCy;{!L-2<&otE!&NA@r@8Obu25IxP=^ zbz=~YhBvq2p!VjO8XL!5)SU~{DV0x?55xWzkJCu4ZzSedxytftBphS)2B3~~c57e- zS+%<$l+ZfbEM(O^+G-0pImPgyj`ksIc(WK=%Nwlv;E;z`A3Qj)f3F93wc0%U54ib; zZBLtbV5I-Ry<<)>SMuy@Lj;*X+k0EP_l>shIr-2q4tcved%LtEgLr$7Ki(%<9{J4i zgS{<7`}PE#!4|6K9No8Pbi`^tc=F^Qd^za4@6_1nfsye?o;}t*-mk{ILkA8XI6TyP z;OWmladNcHg)oE$Hd!F`#Dg7d!}H*0Pxffqj;Ob)E-R$60$JYxB~0{ljCXXj-QT39Sl1iy+ZU-rChENlM7K=Q^8QosDKVa4o zT$L9|3WC`z>o(Gou)U7785Yj&WMU0)<%1iy&Mej{xqRsICwFrIzq^&$p1OYJ?2VP% z=O>recNWi2uCC;9h>ayhGrFDJ^Sa5Or7w?I`g$xMkY zFW*>=hf|p>RovETn;e>cMXqq z+Z?S!W5Kq^zqr>GIQsBNSDUH(;r(r0ZRWlQ5BVGuCx`q!Lx&$54;*{;R4Y@#d`D09 z8^MAY=m-vvxzsAX!KAYU4TZ7-#t1lBH0tY;0R#AW+%fEBH}fV7tZM6U*$q~o+u|C! zXRnU-jCEO^6DJ4pGTS<=6+L?f%%B26T&-$U2$%iA>dZE*SJvik)$v-Aby&!St2?Mp z4cDS;(MoE0v#uf#hFserS{x>&#Bg*K^IHpPvqw>0-1Z#r6VtTGrc7VCR>JvWa($N) zvRj#IVrTx`GG-u`XEs=H^V)nt5=zNzwrU{q)7L|EC7LXz7T$UFX1o+W`-?NFYCN=g z^W2@;Tl1@ncjuSZbM@Hu<$S3S$zV{nm|M?MYgg8*@#}X=%kN%Ujxb<8w3`;uMuUp4 ztjtWUZmn<3-@LjMi-u;d$GOBVSGaO*E1n8(MdOQ~y!2s=$=-VJ@}0}KW2t0(ClXrP z+K%uTpvHHuERaSAB9AI5wUwhFdV5xW0rhmM+>j~CQJTtlTs(0T%O5nhr{8-@?2Sols4m{K-D5~4usUWsKBZrad6b7QfRy_W}8uMb(k<7 zwVN=V$=c?#bPl(7blV_Fl8@Fj|JU1r>@*x$rf3{H(vKDt4hi+)S+c&i1yaiq0S2`F z2f7KCH+Jsv>ALo{sa*p-qsK>`2KVsc;nx1c_Z@9%Fu{?&u_2$u+1cOj545#-I|sdn zu0bo&(mUkSVIn0O1MO~uL9gcAL%*-MYD@!-blMdUSx=VWPN}c6vFBA)*q;jW#s`*UG%s zrK{!|GS-3$b)d_DyWM)2Bn1#6D`IsguMoCwM-ZLPtV2{*BL;KTYI1ugoGe8?eQP#4 zJ4bW0$*ly{1WeIXqKLr7<+)TP9ot?`sF0ZYxue841)-u`6o@ndUE4n5$C3~NV zZ9o_+*<=+C9q3q8)LGi7nK`9)1{-@d)}<^~Fl(`U8w(<=-Qh+-|S8FZll(z(}R zHiEV>Hz(lT?Q|MYa=S@MYtS)q8p@|l{Z6%a(2Fbe1E)>~Q4!L&xP^jXhcAD^8!D-E zUfW8~XCas;F|Agw)vGxeH4?eSB~ekVi*Qd%IaN|DBm=_b<@Ex&bM4Yv z9U=&xff1I5B}gQbs~b6vPt8r;-etDVOvS@%MK&?NTZ%5OH-K7g`|?7uvG&12rNofo zvIe;G$x68rTb;Qa0ZTLMD4vhht5LKU3(cOJVuhJ^-rd!sviPeq{Kjp*%?iURy|%ea zFxgO~7c!#!QCv84qr@y<*>14;r5kyyE;9*g-LuD9pnax7k*`GLWWP|SV)HXGL1jVc zj`5(?<});CGR?Y8JJT7GGH5DEnxu_*x@L1IvQu|iLRs4;QCy9Iu-l1Z-ocXKaBseP4%WB;*sW{a{~4Ft%l?S$2@mO77)wn*y!0U(mB(o7+gL-Okk%<>?Pu;z)u zwjLav*rzMy5lnOa{xC>;J1C1V| zw03^S)NL1cZ-o@h^eVuIcj{UKt!`&E*sXUW1|*kHZ8Ju!R*X%~F*Xmk)eKO@Vu?zh z`>PD^7P};OCiZC!%+gMK})44lWQ`yZ( z^yZcIc&1+4&7jq!KovlCbtV*x=aPAWuSQFn)(*w;-E_WO&qtPKb5LgTW|&g|0EDQN zB5dGhE`{rYQl_VcjAYPIkxhzF2q1tPGIvs_2CJq^0GFa2O2EXe7W6ioI(7Ma8aIgf z5{s%(Of4reMZP4_q{wqd_09&PhElg?X@p0cwt1HJR;Zw8vDN2xO#K};l>&z(*FawY z32)FA55W|}p$cTtR?7e`t4FQT;=~H9j!RYO8dXi#AVb%HpUqlF`+}+>X25X_5@8Lq zuu!w@+wZmqjF#~O11)%BM+nL%7wdR;2U0TZ8|xkn0*c-aLMT%PzeOpDDzwO1w2;SL zEx6j0S|?qywknHg|GsWDWb?FikN0?;NJ-FX4Q@0+YLFVQ_qVmUlr^M#@18*~Rqr@4 z=8}?WZC9|R)lGncXS9vLVHV(PnvPa9x>L$+GF>fPu7(fVQ`7>}=H; zM;|(9tl@UOqf?))Tg(bvTPICMfm7N$2W<>$$z2-(dTd2ZFy;P>_I|Zv5R)BP)DnDPLoDOF>wpLjC_;LX(CGrJ8UAlF4 zdb5mCYvFn<%p)+Wfg?MBH>iwmq{}QAy0{{M`PI3&n3+pfV=>-n;dWPN?xYc;hDt2Y zWZQ1Nxi!}iTp&q?&Xto_ zZxyR~6%n3IiE0fZrS8m?agDXxC!q#1g}PiGE5wLk({-1uqV9mrU{RDgt)tUXi3=9D zrdT78Y>_L|t`?g~2ruQW4kdx7Qwp8EwacE5G$cspL3b*4U0uL&v$HX~j<(ndlo2c~ z9-E#H*8_ul_O=?lEg0nOX;Yy@JlSRx*#p$tYlxCyF4k-NUGL3+eb-+)wbwj+TXMBGrzq+PAc%&Cz4Z(q-?*1SL z`b?URejN|92_JYnQFE9%&%T=8{V#kmKz>ms5{>453(HKqV1^H}rF5T9NLkNUmFeU0Vn9gZv#A^m+YH@l;Xf)sE+gzvprbeT%%V2~KE^Z|% zp@kR;*gcB)Rv!2GJQf9;+)3t|&TuSWV8NQU&s{1Rb)s6CS-iWHs#MY!-rV4Ly%j2_ zWcH0F3bpuZE_`;j0GSnw=jLM#tDQ;Y(*>OqVVRxTG>a2JZZiy+)O?k;=#n`^7OAbq zwVNrHr0Oek;aI9Dsq3sk!!V6HO(W`hBpI)oEXCW?(PE7+Y?bKU)hbfUmLk*ZG|yX{ zASH1PWoNsXCX2it;UucqK=nE`0-2mDP1`^KZs1sWA+InQ%FDZ?r1l22RgwyCH{v&< zV0m#R63O9C0@f%~WpmI8RRp6RXk?=?&R`C9Xdsi-fD(bORtwDY3}EpYBtE~GA`EJ) zj^aVGA$J?Atr5*tVXGn&+D>t}POZWz(Ya^epi5DuOm2&TPtal-XxEl>omvi5_m65s zJy^hOlBfoYIike?VK$fD?N!klhs!RODpj>zs5yL?waaPg8?pkNq|zDKwCF@5q@$zN zOs=JsmbL*RoTfPYaHm7lp!GWYu|q%#wpeXe0wd7qs^BsadbmKh^f--Bp$4k#W~u;l zTL}oJDO$8xc@9_k2aV;1((W*tt*Ho(rZgl9C8VzChxO{eUVOvn?^_7jS zs!H9c;CQB}VHX#wY&s<(iG^^A_4OE;YMu=^NM5H^VKgmgd_dqet`0X_*Lu3gM?GS; znyuK(RHYP;W_W^J%W;J?BjsXsy1}!Q1kzO&Xu4RlESFlZV2z#4P^3sTikv~KP=a&~ zfGW}Lg4R?|G!&>p5II(D0y0@asSsT!++CBe+sKghERUr&>Qpq6i0*DBlNnm| zfB1UuILWU1PW0xSD_2)l=kCcf3Mh|+Bm@#kA{a2y25hj6v3U;9ivxNN58M0peb&2c zZ0v=#F$gdiTZkl-K+-THjV5=_T{+*J(>ulf|N1kZPxn;ay5SeTq3%8BWYCS5cB}|^ zQ?t9>FnfD8>(@KoeFG1ylqTVjM(V9tDstht8E3!|drjN4Xc?KzAWbSHa5Z*_qT%lI zm%0{|^jc%}aBa1zIgq)sjY)KQ2DPxL51^hS#r*5Cw@#Retuqtz(X}Xj!yzy$}t{XJzC?fYv;{!Nr2Rz>d>GHa+nPZQg(WVjA=Z3>y#Z4 zN)bw?YTkiLDEV@&!rNmgQ_VqcDrHHM%g!7-ogLc}nbJsae-s)6J9c%Kuag=b_bSGO@(=B zs+_8j$Y3nu21wFf-L=JxyLRBBT=htqWa)rkk|EmNZlP?TlPr@hXBk4CUOu)!xS4q= zNnD4ZLO6GrJo@E5zKLeQvfiTZNJ=t9M7*&PIUacD-BQNaqBbK-)vq-`^XItig@d z9#JlGD3bc9B$o=Lrw#^#*7cuW8(9fFY`X+Q1_mr(!@eIA3Z=Ii2m2sF0v3!~Ishq{ zArLHRwd~N=!~UgRw>Of-`uROi9j0C%64GIN&}vZ`gfH_{QSR=OvTy49R}Uh4ZI2+D z14IvI@-8}8jayAK)w}i>sL;zpsYr%Coe?r+!Bs8WgwbKskJ^V8lOr9+CuWYyk!Oq? zLN4YUvruI?fus=KggNqX-HB9fu)R5k-JLM!bsUsrgnX8C`WAiiUCqIAd=p`MGuN{K@7*l4uz0tInAoXQ0( zzzH-X;!fAvJ&NME`(D6)!abLF^IY`iVf534tzK=OrluCQ$DG? zvLq;c+PL0TjvdY04Nnx7uUL+F}DlJw7hDG$D zOHNPwK+L6>ppZ}mO#w+oP1oN`W>U!^-q>9^s}13!6$0 z1Bs0~+s&?>sgxIMzCnq+GF9+ZB=Yevf<1y78C2w9M0Q$cdH3*8rKbwPb~B2o&5woj&-rMEmupqRuky(l4B%4uOpQ(`rvxB*_!rc)tOpK9hKkiYbtX(Nv^@ zEJ#1*Vj>)i9x0t{|&D z-%^o6sW_7hk+S4^%HmRyB%m-%xGB*#5(?FbOo}pbj3#j!1PKf|x}}=f#PhrL8@q6= z$Z)_|q})u2VsSKEV1yiOr74*qJ#fvOTt0e&Y1*9c2t1rbx(0%m%d)BEQ3@GP?$=FL z5#&(_@}VrNS!mE&*#h)6+V6#YIfK)gOo3883;}16bjJh<5e%=$nXE{sR*Km=L_&`0 zV%*GJc6PB=KtY3Ze5k9t8x|#Hk@}8<;r0$Rlj;(w;cV;GCXzbZ#@e{Q-i{(#4DCS2 zmP+i5ym{H=L<$mSvQfa&NUli9c|05+^g!(eBjC=h2+qz)?kJHNr{^$u%);Ayy(_Cp zmT|qPeys(S#O}&=*ABH222GYSQz6Rg+A%*rm1zC8LvZCPIvnbWytp8ukqvRFW{07# zTL$nuA;HA_EN&|W1QU$ccA}`ex@Mt+-C-yl%XWH+JX`SF_0?-_&m0T~z25$SFGxhn zNt7HNK(?zv)Kfm{0{b!<94 z4R^PCVpWMoBUd_6vJ99=)aLfSg=jkmwxqx@o6l#s&_Ze8g!M7d&A6DEQg9ey_|!57 zdK%bvD3RT$Jhiw~7NaP`={hA7M%~~RZ#yBhZ|F*;imFUOUFqY%(63!>(Ol!=5n5wmKGj{Fb?5PMSWM4?{+ls6h7; zyR+NULpqmXN+S^`lYJg4+ zCvgm03pwl1#!1w6X=U-$biSCwxRXZ_8%^9e^devP#HEuNH7Y8F8l)k()i^LQu|SQs z+bE&-?Xm3~8icQfiQ~9Y*criyt7)T-&qNW6!W@C|RBDVSY=|OOKsk0Pk8v5oiYShU z2F-4(7t&9$D$MX~vdkNI;#xNY4p4&E9Z*!|TwoEK1bICB3^u2&d)yDeO zoo-(b&7l^Tj!uzWA)BEs55vrQC+1mwvkkmS#N;FjPt#-+%w)%!qv1K+9UOR=)-ZU9 zm2ih*pd>}mKsWVKjPwr&EnUib8bMhWf>5l}+S?u@F|Z3h;Sc#E%d?!Ou?k9)?HvnA zLcOh1*^(eEoy-z60&`dzSwe+`gvrcJgO(fEPJ;T~!=W*@2mvxj7C|PSX1cm&MUdIr zUhe@VKaLA!7%dg^QyCJC;tXR$OzK(=DP>BF3%oF!0c3?UJcX&Pg!UqljFeo8ajXn< zxea7XqY>EkR_+1g#VOciUz!W3wo%Tr|1T>&N-LCq*!+vMhQV%SKEXs6z)w?<|RyAauJ%hNo~0CrDU z&ON9*zUg3MrZ!!fo}c9no8a=yXyDmq1QVsDY~T@MVJaK%9@1GPNnlBid;%y~eT>Nz ziYA`k>p3Xl?Cth74@w-%abZRgpn%S$D#oW_*jP7+u(8%gq{>W&uAP`K(z+wy2|B!S z2r?c=SfPf6Qn^xQQ#b_|+Z<^7Dgm6B!T?*A%jJkc#|i^$&}{2bI5u4u!bl2ZIjtF| zjs4zm*lqV*T8vt5UO`DVFc67@Mm^Pt$uKI-a5ykZ2;hy-#wUY)F`Pu=6bc}PovbIy zk-OJNrpqaDtKB$^gs{=@NF0h)nATA`sYQ7^Y;qNE8wA0CaHx zM_v+{E>NvrbJxZh0ja;b8j1LzW!Mn~hg=>+5K{yRZ8e}`rI3}G!kkPMYcizvHH)oa zA;XioxvDsJ;Kq2^*&RcH84v`;1cQKt9gu*I zFA9jQ)3XaD8UpSHipVS-Fj)x8@?bkSrWq=yqzQw0u)t9`LDQhOZ6hLx$nG2jI3#iH zwE!e<%50_@Lm}}BE-KDfzj^+Vn6Gc#h z}U{3y4CdydB{yb zXhzLZigY$dP-Ll%?Zbnu{r+&EMKl$M06@K%$(ESGo?Vz{J&YsyT9xB?qnnC6N%iO_OnF=d}Y`L4D76Q;I+kx4x}KrlED(V;drp#uh+r&+CoNb~|K& zybBUGSIzNKLBa4sMI;fk>#_>r1uL8 zhFmuoZNGM{-W!Eb{sB?(45TkQZv`kTGUbNfssm#IoFoMR_X z(lc~`m2w!t1DC?a!$t_8Eot_+TBQJRb)Ir#hK;qYtw2D1x34o9g=PvuY7X&Qf$-Za zV*zOL*6tWMp60#=I$tPMOHo~wYZ=_wAIBjqN<1)D94qET93^lVgWXnl==-f^M4@TyrV4Gi1RR3Y5*&pB zkw5{_0E5wZiSaa>aP=;+RsT*^~5IgPAWS z`30^uK63XGA9T?(v&>Z1iNyI+$$@msOnh)qdVS8}C>Tya5n)gYyvuk;Q}96G6pP8haJ2sN0b2^XdJ@G_W@IJZVK#fv!1Pz^?)rWN4R)Gt zcA8fmKF1+NC8mw*V}e3^aFN8Pj?K*+oudn9j>=(Y$IWGYz^q=tV3s(WSdQsK_P`j# zsp|T{!E0kNU!vlIgqE17ELw*xNO0R@eUvasyMxc2JTpIAB-n&f*zVPfTzu%~VT(vjdZBGR>f3sXAnHylP_mAhw(D4))W*FL zsqnErY^s6?xgN?gWfD;oU>U}nR$fZcz;}ImG(Z^FVZcsVKJ@r%0jJF^Tag$J_N@_u zbakx1(P)jV)a-w0^Lb6}c8 z6%kFG7{Fv051&16;w*>6x?3zMwOsmhtx7Aj4KuzQ`4$vy-|+K^ZX9-!YLyNmMg$%# zK|({-hM^p-U$;U_P!4X8)k2jX4y@EqfNn@B0Rc^1&IUtN$SDZn>pmfiPNN-DnIhWm zdQ6^jQA%qDC=PiD8O1bij$PZ1qh=RL4G$M&2@h;)R`M87?r=$V9n|lQI1z$kQ#ZM( z?69jlOeTl*dQ_GX3nH%w2`nNJ%Y}gV#{q%HnhQQ&n0ajvrrYHi%Zh>D;AhQwd zjY1p|fOV&M9z#V1QdKW>`W-ED!_qVnAqij0lVsQ%yHT3h<6g_eX_Aq`QOruPG3*W9 z(6xftwh)RGivoQjyqrqU%@7oE6n!`9-$x4)`A~=+|ox_8U=MQxRjgu$@z7$v8s*7qrMqM z9-OJVrj4o7VisdK_HoA7|4!XnUVSwy!k$ix2APkc-^MrgzI_?C@xfINL8rBF`cY0y|u5(nDAljm!Y%TZ&GM?mT~>wanv+kMB$HmILVnKMdj282bb#WMmphMj{SUv*(6JDCDHnWh!OTcMKzdz53ejz=1g? zjX{Npk|MDb?gWM);956QfBSLrjJ6YZ>1a^!gNgL2_xYd zhQk6MNbo=%Xrr-iColvoxKb_@b2LdoAq1!Hs6DbR!x%eKmZn*XpsC0QGCv_uLg2z! z{2ZX{=OrAZn%$ntc7#ejq*=*00%U?X%h478L8$*GdaqG%>ZLyl`U4*I$} z=vh$=0iJ_npm-8F~OZ zOegXks}J&(qFk(kcw@00AVBca2u`99#xf|%q%MTRKw23g?%NdS87LVeB4yc(NQ9c< zrvQO%&(H#dpjgcFv58erT-8A$!wyr7rpe5d2(XI>S|CnCXWTYW^ydp#Av6^jerWp? z9eOwe?4b?Z8t4@`MsWm$f+ukjPU9p^q6lR(3IJR5hT~x(a%mKR_fd5?>9!Ckn#nDW zau#)hBtqnZfJ2e*6AA|ykfg+-SW@0BF(~y!0{|Ag&i}Y=`;oEg%>aqGdmjaIw%6t1|uv(FcRse90<6k z#yEk2%fna}4qy@v?6FO-;cz$_8I#Gv!9PQHg9MmEf#-P=6{`y15G{trBal?foghvW zQv#nW2^h}s3>*yWt=4|qN^r<%^g@QkK+++MmpKf>Q*as}Y3}5%`=B4e5vX(zIPq+T z<|?xpil&iZ)KUXaQ-{62O{C+P>~DJ#OA^iq=5QEI!jxnpE#~kj3{zHw9H7WV%63_a z;$#|~jCjT&N4Gt|4X__MW`I#p5IcPf&tyq&Y{G!Y{B}>(EC=+34!DFNs6r0%P!gxn zVSQ|xL8u!cOvvRTPYA^<$MS-R4!V>1LNqnRVl%>Aos=;{^HDKFIt~o1ApaY=PHgSDYxf^-## z8zvZ9fo0phdZW|R5{klN-6SUi$~kwG@&tk>=2*2nm_+;lL|7DXnjvVK26!1k1kVDV zv{9C4As-@A&$e_B)RB!zxZ@*qb}EB8dXPYfJ<`?g7}P9`x;8|RQb7j$W;mIdkYIwq zj+Lgm=6FB|M}7<;B#ZeFs&)blq2#2Y;VeLQ(nGNbm)Y3T9F%2AD2jqG0NpZKGu?~P zST|w_^fQ@q9QaL#hNfGt>w@wMBLtKdO*8pQIYUL3?I$#)@Abf^1S+DdIfR3a+sgDi zAI%mPsyIIh zJU&}0S8@ODU{ z^1XK~-~WyWUjJ)<@@sE;`>*}dNB`)vAN%7!{P<^oK3ClzfA;_U?N9&CC*SqqPrUoR zpZds$Kk=&{{@91lzVXw4@Uh3<_|8xM^4s3tzJ9-{KZR8efj%Oe(5V;`P={Xk6-xO|N5)H{>wl8i@*B(pZ@h^ zvADnd%m3@o{`Z1$pZ}}JAODNL{=%34%jduR&2N15i(mbZZ$0;u=dP_>-f7nN`yRq@ zVo^ziQzxfNc^J-BWP;`xzEH}}oR}#UmD16pwX%?1EEP|jpopc#ncHS#wlZC+&6FX) zf;}fbSZ`h1aM~-^uCHFXbZxu2_saLqt#4oZ>Gxl}v2o?b&eqzsS5{kq=bF2101v4? zjLg1+b0WvkaCW|S%gsk`y7O)C{`KGa%x}Hxqrd;FpZLAceCGFm{Zk-9pMKBp{NW#e z?hk+KbD#Tz-~8Z5|7a4kPyOEK{^(Qx>9fE7$kr z|KsPs`=x*Q=YRX|*Z=uDfBX1Xe)6sV_}=%<{qXPp=6`(kYoCAoOaJocfBv8U>wo{# z$N%Eh{`nt49H0E|SHJpCfA#qP{da%yXaCQC`EOtT;@^Dj=^y>zhtGfG@4tQF z>ZLFLzvqlA-(5BKpMU{nsM=^L5@FMagvY`<0PBv8CjA?2fc=Y zpEy3;Nfze$+50O<5YmgsYb;sJPR|xkyyp#3XXZVR%oOjqC6hgR+dZ!nVl-QtxvSzb zcc0Dkr*4}+J}b_gIWkw{;sB$a#?a~a99A6fA*Z>WJ}(9<*E+$V13A~%4E_3nrkU2^ zL9^NP+_t7}-e{vieK+OZASFrI_hV%?LldesJzIPGV={H>9q&3(xbFiGzUfzg<&6)$ z^U)8z^r{Mpa_?%N*y)TciBfBeq7AO7U$KKZiY7}R&0#=(s~g0-%9 z{cAtjI#?S!*Iqps9d_O3YtNs5^#GtiU%x+IyuP}9Wp(xG7gi1rdwc79m#$mg?>)P^ z@!E>kT;1MSy&?A=OW(b8 z?)qdx@Ee;O*RTHUr%mnpj@7^T(zVU)>({%T*Pi+IzdrMmwVh{vcyX}z;<`F$y!fL7 zr+MxA)^=ClJimJV>SU(smq%J#-Mg-%YERd(B8$K-%!$wdlRQ{1v4)>JvQSyNZ<#49 zKJ<%sP91&tb^O$WkDNUD&Noco^5Bu>M?Z1@@@;Q;$2;Hm?)z@O^UZI3;LQunEgyN$ zo8R)-FMj9)51qRCouB;RJ*RJb_`aieJ#zQWuY2I_XYYUg{L;HVcxL&o`)@B#-SzNe zr(^o&+2SoHDmOoR1{H6=eJ0Chipw|8&Mg&l1rjOFOiSYIQmvFxrUX2D@`zlJfLzQh zO2E05sjzUgT;!@JSxY*egM`J!9GA~w)bw&`YG%GF;bN(j11Em$mW-EKn7{45GgEoF zxHvO4pMi^KmW#PKD&2l-hMqZlIx{t!FHPkN%O|U%yl|viJMp@kmuPtL>_Vk{@`0X)ZqL!s$JaBdfm?U-r?F# z+eo^*T|*z}Vf}I^Ru6X@hkNT=s!WVx!VRM4ZewSAzhywXKdIC3-cNp}GN}p#TWtH< zE6?o*+Q9(Dx*Zr9=|~aYy`i&{XVnK6E_M2i#`=wwHsdy*F+&Ll+rOo8cC%zQwSp=&nR=#H{Dhhh|=p$ zmTGe)1wv1pJyk8$PTYQU?#x|x-E#V#`)<4E>`gPrPSj4_ecN3}vP*A#`^oC9_Z>NP z=kXIqPM$7RZ#{G3#F1NWzUih@r|-LcZua=mQ+FOIc_Ldr_2Ah| zl0Uh8bSc9Ya>Z(?SdmF_;S9iAA~VIsxtpZ1bgDp|xJU9ZCT8ZQ1(p+)?9?1(M)OBw zr*;DKb2H_I8W;MRBlCGyC~+oMK#-X^920Pah6zF7FuGXff=Hy8Dq|$MQYORVFqsTp zByoWcOOV1e0Dob68jm>=_*^)GlJT%JM#4Z6LJW2IB8-L2c4V#%c@D@~yP=9DZ#3T9 zR$=1csdMAO+Me3Da%HpS7+0Qav zD=TXo=U&`sA8wuh_kVx!()Cw~FksT^s-G z#ohYKVRQ9oYirM+Kd5h9y>R~0Zfo`0xgTFU?2S76?dHnLZhJW1y1X$=`qwu5?fQPt zJlt*`9$w#Sw8y*G$GAUgukVl508jc_+T2dUo$a-Q!QMVZt18Jjoz6h(AB+a7Yiq-y zy?LSOy5lJ0Y_?5z*ysQ--RboQrq=HGbZ8SQuX^B$1E{ddN z6iAXR;e06>qMU2uEY4VUX!(RZZY3Nd%u!>PkT{krS0ec4d&~UXi9CiE=3ZCrs58r% z^6Xr(Fh6zX-dj)Kdgtlt+)`=k^kOzQHCHX1yk`mE&#AlaoUR=&md>0ycIHT-dfS6{ zotT|nzUfGD{@CK|((%Q7Ve#nlt!HLRNAEmS5{oluju#4xGd!BTWht|8a%TR{hi+b) zsVy#6PTqHBCQorncCk9Y#EWyc-+tTOw;efoG$+p;k?Gp;1%;q#F0eSSq&<^j_}LPxROaXB0j$bLb175fLxK#r z8OB4I%=D2H3*{UW$8uH@-Equj{dQ6aRcWpSd_-#$1!LPAIT*0q0w1==D1*Tm9`&|% z+NR!Vn&!x)6>k(#IBa#bIF0S$*wVZGScLj2tgZF6tJm8*>$^8zYdBjg8WQhc>4vR6 zO~3KNtDD!aTzvVJt(Eh;?U$apx^`n_eP{F4^EY<(2I}V3-S*+i!C>S3g%@91*}Ss3 zztiZLkh{CFw^y(4Tv@4Kd~S0*8nv!p-s-hl-GklrmoFX+8Y{b_wdYzth^;8CjOL`pkvB_4VD6QQsYSo;@@m&mT85#Mx__o<6ij z{W#FkoESMq-@qwHPtn-3VlJF~VFj$c(H&|-3rg%})52Nf(C5SY0QN0ZfCnAb@zTfx zMM=ROEsZcD@jQ&@=}cD4N+?A{30*2n@z^9$4V#uyTHp&+hA318l2e4q;#Jb|V<N2E4j+l>=Y+Y77007l1tO`Q%bc8 zVGC2RROF;gu^{pDr)twj7U#;DtRyIf>df-;LQ$?P6wAkJ{M;NPg3nV_ie@Vr1gg|Z zQ!*u2s5n>UNCxo{K3mQS91o0TaY`vL;}L@RD2;LwPSGJHK^C0NbBJTa0#EQ{2z)Io ziV~3$0);X>LnR)aW5qHP0lSN^gyZ-D!X#P*nwr8V_wfzWPQ30x%Lz@hKd{DQ$4}#7 zuf4B%qkgMlI(?UdE!|Yd15J0GPP^S04zzI88g}*%+;GtBwR-g%d&ao2x7}>rxVo`7 z9&fK4wA=lSS2tTgiS4iK>cftv_4fC=t-bx8GrsZaD=)3|Iyy+3F*IwND$>J7EgAPC1}FGA43vH~>qHE=OWG6@NkxFJfh zN{&V0FpM1sRAqM<1sWp3Zo)7Gi6?-nL6{P=8*!pY1}@5>DTul2yMeE}2nD+-rx0#J zP#m2?5TOVVl~p93L@=RLDHIABxm08cDO<^B^ME&m5tX^1MW` zxF6Fj%L;{ZCReRYEzIV!IRSwPJcU76N+pq#i=~VtlHl?HO8}Wy5Mh+$GaQQ0ES?5l zh~oHUj4(`QWrE4@G%JV>M_LacOkg2m4!B zR}T)GmOmcojy>-6I_<{6#*OuQZ!qZg_0i!$-yHW1-x+LN+G^B0?VfI^{XqxpOF!J( zSw9%`>bu*mVXvpEBh5DJYfW|U+D`r8@L+fC@@99~>wr4y_1n!(yX$y^`p(AT&`sU( zxZl@?ea&zj%Qk~F^!&++g^79C2#CmNT^Fy|V;DY6(-g-~Zc3pkO}lzbAd>;5E+R_^(12l-Oo9&L5kVB6SE3}7Bj7ls zSP&x@^s?>4laZX@(_AG7eun`oP&@^&Bu*flRq_f$P%HpYK3mL77{+Ex)6=D?N|qBO zN}9?D3eZtPxmqaZd7(Tdu;rP8T*xrlYPnb{XL&Khq}+6Y%P5Reo1LARn+ME@PbO`o z(u9z6vXZGTA6Wz#mn{@3Q%bJLQDQcmElp(r98TA&b8`ib=h(t@N#td)b3v2^oGnTa zEKo7RD>4^5cz*JwkSIyHtRQnx47`N^a2^Uh5HphHxW%%;9L% z*L{0zB%x36G?E6o5g{>n!ys!tC!C_a`$KAFWjq8p2-oe1=tZp_tL(>?JJ$KOUwN*<6Rb{H(=3!ekw0^TSb{wGC zRBfySfCBZZjt)D6*1$AWO&_=R>#cfYsP3=V+Xs!F>IGpG#Pa9v|O9O+I1xCN9U4D=C|rYV3@l%S!AWNDs*1BifA7;;qy zCTJ-G^g7E(MHz!p46wExk)jM36H6x}l_Y_JP@1F!aWbRXVKap)RjnI+=u8JiQO3CmHuM}jO1Qo&+rivLw zA_=KjQYZ{Vkks?j6v8Qrf&*YH@QjS5Fu+8HqfqcZMv)|u`Vr)tmTfpFCs311%T)^k zomdWpP1X*9p)@5pmO|4MqakCU2LL03Wb)*5n#3p-^z_(sJ$0aK;{f$dFAO6eq5=~J zVMiU+woJ$I+{wi9mS%%L48!wH&9FcPjfZ{R^DIrZ9m8_q}9EL&U8Nj7#y|Y(Lt~=;-yL|@&?P}|T-f-9(j)r5~ckBS9dNP3qp2VQs zLVMU%0kK+OtD)t12?pvUb^_l7+d2rACQ+Ee7==M379-?j6&+t2sR0Z^2jm}uQz)n} z3&!~T4&Z@`56=LN;Hjm1&q}8BqaPOo5WkPvDJVKp$`f1WuZvpcsNl zL1GD%Se*dsVgPRJDt987@DW9sRxY0Ce?vEV4Lt;+ z73flR02sKtxz+3dga+4vpeU9C$(By05biZwt)Ai8+DHSno+P$zTZX2phCVhYM@oEz z!a?7HQyhMBA zZc&(oZj512g3$!%3UBfpr5z&(P7_c{fUPhL=XiqPa1aB}vct%AgD_0e(2t=MB3KGe z35KCb02jbCgIWZiK~jt%!P%e_k;St7q~ut@lMJ7cS-^NC&al88#(oed2uZ{t%JP6k z1z8eu`C!41l5FT7fVH6-`hG!U(*a z6WC0#s0gwmi97%>I7B!WK}ZtFKMD0A0)a6MB}fYB2A&pVfdvqYcmXuIjSRynXhr~< zD9y2=OaKa=Tp7<%7>ZLk1OjA*Kw8@lU{98&84~OZLjhr9IEExCgc0ECK}Sa*(1B~| zc9@_f2IB;XDClhx3q5enAbMU9*(#8BTA0Q`0CE+RG)|x?DG*5%xLy$0x)V4yfC4vg zbPp(d3(zURP2aKs_X7%afP*n7ys8@m%{76Ku|a)Uh7((T8%QP?4ZReoDbMJ&M_Q+& zs)Mm*=s?j0fgdH2Yk`e*P>qIZI-aHLx?zk5ttQ~K2cJ2B=y@eA}2U;3rhe*8;fq||Ag%f!Z z9E?W*&4J7g0*puzz}J8u02=_J0Tm?)BuMJpB*V<)B^c*e90kAzVNjH&F)qJNEbL41|)N`@;U;522>k3AYfR)!VE8ftpF7x zli@9ZF+o2ulEP1{12%b1VzL?FbDpMvosa;d(@{*4Fcf<~k1qb0zOWI3Ivdu20pMEelk%q;1!Yp1^Dy62Q3)`E}|F)G$IXNk3oC@vqzQ< zPyhoLNs!>e(8zUcUAF*3*_J<bii0A@xh1_#^&auWF- z$UR7K1O*mIIj{h(V*zp=js}3fE$|;7C6LL429qB{9drRLYpOn}kq}OU81x+!09EgK zrUq)s10M*(2|n2lz$TzST}SPY!O;r(GOat1mGav%pP|91ReGk`zgpz%&UQ2A~=%28RaPgO@}B=uA=IXdIj~I6jF@7K8(r zfhCh1#Zi=a9ye8zWHdOnIQ8(6keiy0LaD;8^_NR=^(cofPILJ)kDZcU|G|5!cYORm zeeQjy-}iw>KK%#pee?tO{`%+M_|T_6`RR`xz2`H(_t-7Byy2HV`quj&IpS9ytUx|Y zjbQX}ck9OC-pe=6J^AB{KYrq=AH4G8fBcW#>tB8R@uyz2ISJxU@m6JqzxRkf_2@h9y6+d>`S8OZe(&4gbmgOv%@Dl6%ISp|(Zq)0*hpQVKm%sahI{MM`yRUxtXXn2D^1kyE$ba`M)rcRujY?Z>9?e#e_{z5R7}-hcbjeZTPfQ;W5m-~Q;)h5PS3 zdG`Zvy64Q@554ih$3FDNo8S78ht9s^&38Ze-bWvLLqZO0omRqbH+>JD&p+ZSKHu)p)lrJa>mRyWSQbZujE z{mLt^ojZT|+=c7A`xjnr1ikgfu(RLZeDU(e^{W@oUwHB2i$D0rH=lay2T%Uf7ryY1 zPki(1|M2CnefeA8`n#`u|2t27{i|R8%9p{DO*#!JtC>l;t~?CRy$u3Xz0)-POY zY+c7m^iw0F%!-|wbm;-HusW_eZ-vKfw)3ppiMD#)ONE0wG~b!zFznfck}#S>?a-+bck z2hZMr>z!}CbLpGHm|XEnwT@XHFftX;H2%9J>cZ z_4MNG>3i;d@WD5~_2IWa{KzkS^!;yr>;oTp*E`>N_MUqleDJPQXYRcH%&FJiy1ab* z**k8&_pSGzebfC5wL9)VF?;Id(oMIVUalTpK6-qQddTnieWBZ`7SMRiTZXC2W zuU))w@%*`0FJ8C`-q_q-**x64ve7);IqX{F&CSE@dUNCY*1`7f%B9tfYZuO4y!6V& zS6}$ph?wJFlxz^xg{r0t8VA zf&hCRPVX9N)T<@gaU|EsIEnuxqm}n3Z#iYfe-b-!?~>K5GQBsF!`=ZF5G(*m zG@^HaAl^CO#W-)RcbBBmpyPh~J7@26_PMxq`GXIy|L(oJS$|gX+3zXyQ8nWv;S~!SBtILX3%PN8l_mG zkqg8sm4vS})+yy$jZCho5ek5{13%`oSbX3~5+UR$kwPj3p~<8%1wdz*bS@}>y$XxX zX6y+-MJj4_^=7M4sjgKpKus3&bYSaJjlpEm1Gks+IEC<*cWGvF%DL>CgRroZ&ZVOG zD_$$Gx?>|Fvx|${>1Z&L0!hT$O~i}Eh<_)vzT{lm*jQTiN3*3eqJKm*5 z=k)l{-Qn@^iNV{$)AP=$p$B6_ckT=h-oA3-qmM7&9k@Sm`|9<(cL#>C(X1yvOSggu=l{EW9=|K6Gbb`0oAj*;!AD37l6bQ^^G) zAuSUQg#6q74c|^A4d+Uv(MZKIF}DP|GZS*bUI@gqz<)9&7HV?_eHZwDa&t4V8BAr9 z=>o_kAORv)wj@M~Sx6(p5TIaEYjp;b(P%c*C?%lhg-A?U0Y6%R?VX2@9Xrx%HyKoXK7X$Ss1z7KhEEuhVIbZ5=J0#~wX-{E^2Vd-Tzh2RmEr4Gm2;i`i`J+;{lI zBafXqdGh3ueeD*#u0|o_ae-{8%?-Am1HIk*_IJ0nTGUctH8c?RbiP2KG8oJ)?QLD1 z?X4}21}!Kyi2{hW&fMr|G}~M44m-TAtzK7e&?q!IiCC-RbLGH6L_nyyj6Klhg3@$nV4}cudMrn+x}QQxaoB}=NFt4Bcp@&#%3l) zr`=e>PiHHPav>FsgdoPPEKZM(0u0?gzt6M28HfazW@jcJ3;`qoi6fJ{ z%*4pRz`)%*_wL?(Fflc|w6wgkyx^Rh8ND+wH8pU5XyC#0^o(=C>0I9Md3}EW#_IaE z-@CHBw79mpjeV=_aBwRW*n6@S$qyi4v|7GS4!9n*z#rImK+Xkk1Yf=Diu;0NO&O!!fz^d4>gjB4X>D$5Y-;W3 z1YmXb_3zuaf8W0T4x7EL#cDF@YHI6rH5$FHwys{U(P-2)TBTH~z_J*ZNn@~?Og6pD z)@kUtPK{EPOVaF^;#JSKtjl6LXc#5t(QF- z2$r1J$3=aEPxnF@y>lL8d6a$hNyDtkCQO5dZ=Dol}FB7(Fc!XM10 zm598GC*uIm?JYP0LEnaNW5vC)=H2pd!TLwTp`A!zI~4FNuCA|mAZV?5=BH-n=I7^U z#wT5?>uakXzySPhdTwFK>2$Ad_(K@1LeXd>?B87XxSeA|qZ6aUlgitCTC`6XXjn>vo4RnN*$z0xF*aRuziEw}_^4`7(tv$$7J*QVxyW0BBKG#Z7a4MpH}vvA}<&?jS%=e%p{ z8{W;WP2cuTBp3)_$=vG!qUD3Iv$V3hIOke~I5#meF*ggLa%R@GD_^P3u5QI0c+vD5X4uk@MXd)hu!JmHL2B3Ux6SqSs;P(fD zAs~C}?nT$a+}QBw_}KXL+~P(knFHhr_KnD4|PG3`_ zH<|QGF`p01#H7(VLaDk|Z?pmzY_c^r7;3e(x>_v+t~!&sp{cp817e=T(b8hk8q8Xe zkWH%*bFEssw7yYY)7W9E2pmR%LSD`ZL~LPQ52(Wzo;>o*SHAVX{@~d2&!2ww*`tR} zAAISJ=U)8!xBl+WUwz};xj%X3iN~LR?)1U^^+mo($>$2Vd5$2TO2)HEUtn!=Y;Nqv z&8xRB{`40YKlqO~|Ng&!^V9$M!7sk|kN@_w_uu~2&4G*WT^MsNPG9@Y+vk7#tM`BX z@8A8;AN}lK{^@7uFJJu4k1kA4%mp?U+`f1sU)YJ4_ZTcuja;N@HOLy8EJwO)?8i^; zKMbtmZosMu^)Z%*qP6~{M;8_eeSD& z{Dn_HbM)x3eI3mXlg`}M*41I{?C)&p>}iL%E-CGnv)S0nYO(cx0e|+(SU;gfcpZ)4b-~Gui-g^Jn=gL{P5lP-ulUVH||`!IX*o)GCMoAv3SO4&}*WUQXpa1Ef{n=|zf9f-5Pd;&a|Dm&wKJw(Lv(G(xE06-ObjH&IW^7 zUCc1W%tX2vixrZQJiU-E({gDBEnUna|ZkJb!Z-nAFnBnhTWR>eBKO@b=M(|hrF=;*JfSQlXJ6^GcK2FD-MyW#AR2QnF6C2-1NC!Zui{8)N(KyjKx!IsZ?5H zY^Yb(=u|az3O<+3=g=8^iA=2rp4-r9bJ&bJeM7yeK?mAKZ!w#+b;dfaL|QB3ie!8` zN2Lem+}L&K=p&DuJpJg?&!0VU^ys0^wvO(7JsrKxrk38rXO8w9ee}$!GiT47Id%Hv z;luk6o;Z85|M1yo9(&~Up(BS5?eA`B?&xTSw`$*a^yq=^-UB_|`}=GrN4pJ@iPhfJ zXfZe0+JKGNTO3A{vA)3|mDlO(^$Hz+w5Fz}wl?7Bjpka2`+P=)&7)Pge34uY$--d= z1tA?{!z&XHZLY7l#z%(-N5Y{6YdU9eM#L)PIi8-`=uDC`K z;}33MyMFD$rOQ|E42_IVI8i3MouG{-hQ}Y=zI*@9jmsZ>a^?Ds>o@M+zk7FRbZmNZ z%C#^#wd{6H&$*Z9=OBi=7uH~%7v0Y3v5Co%2g74iGczN@&K1x4mT%SLb^(K!9=LP+ z&d}u4)S@?powq_|4?;eK?~Qfeme1>l7@y4TF@a98cpUm(F_lO}li6fAp3jxp_>%x2 zMmaooC6~!S1}c^EnJj5X?Cxf=IMa;>q%|g;uTa++8?Aas;Tj2#$7Rug-?6bDC514o zGud03+WWiOVC~!59414((dw|{`ZPB+x3@Inudy@&b2ZhWXQZyKwjKmegV|~^kY8qn z#B6MA={k7o?9=AO}r0dy~D%Vr_9WT5U}>a|4Jto1>#0SaDmE$!OB6 zK+?!XQk7f^vRXho1CX~Ra%D}8rcS3;N`Mu^O*nJNp`bsw6U|hB*9%oOHA)$;QpBVSz)8gtDNMbwL_Cp&6Prt=(~$gwf$$D+ zhDc;*CxEltb{LHa9%3Ie4MvHLq_g z2&@}`RLG@bJK@mg%Hpzn8IsWERtWg`4)7J9$L(47ZEgp{kz_WP!+E=0IvR;5BH?g& zClmmo9ROr;WWSoFP0WiOwlA@}EUfn$gyzzNk#xl$?R zgMwl+X}~G6`Q1u|hF4jaf+Vf2tuq>QT40Y7F`7VhCaa^pyQjCWySuNu+1~5`g=Dtc z9W8C0z5DtP?B9RrP;Xna&8Ss~czlsq3iQ|9+}(fh2!x*A?iPC^cJU1so4o^G;NYQy zhYla=@9pYnbu?M6Hb--7E51(OJ~;ZiJ6h~b4VDIz(QLLfm;sBRtU#VMG&I`VI@(&> zJ6f9>t-x?CCJSgDV8pexwOTD89rlkA6dWE6mU9H#Xs(M1jTz6(f}hv1x>!rJX1!$}&qJmPn*hu~^Kbri1hF5%bt? z<#Kt*Yb63ML^}?b!p`I?fLn68tO`7kCn3KpELQ*rRw$KnR4a9mLxDlq z9X6}YZf`;*uG80QAY($@vbS`!x7e-5dV{V;snV!qGKC7IR~^8$y`!V6x3{;iueZCq ztF0N7lcU*Tx7&cXHZ`{p;RE;e^>)}T_4q*``qtJP0RvjlHbNeki>^#LkX=2zm9??a z+R)f!1Ep<&Pf%M6sU5J~-qqdH)7jEwsfRBDs$C?N3VCpFSS%KU21FW|G}Xf5;W>~< zgh1>?+F(@>*Ckyf=Y<#of{vHfgELMmB;Z^4*4#@=?zPRpP9l>pmCJjyN+|>15F$Jptdf~rHj^uY8fC+& z=JMfmGtuV&(go%FUWE=Y;{mF$MO~rO@rPsB5c>pxPl;H>XVZ!xxL7(S!v=z&1$f8lAyNLRDR@T2A_ua+L;R2iykP zxv8nas8^E(Wx+S%gIWTa4(YYMqqE%(+P+p(qp8)`)fuh!W{7Uxeft1`ZLQ5saGy@A z(bU#qbgDO+0cBdXLLvYl@|>=|Ulw3gL98lF1~AmwWJdX$?N!q*Dr+ zyZKZ!==XV-qTY6u{B>XmdWQ4+L6HKx@U2AV&uWd#PqCd z#Tx{190kZg1X^1G$T(dtCxFuHhgSvo0+Kg<-i-|(;29!OGM!GRV!_R|W#`P)6d-wg zdfv6<@ooo@BZPy%<I24M2ERO@) z@<>kN$T4E6T(L|8-HoRq6@wHHG{cYP_)L+;<_Sf}fp}~t9jlf_)ZtvQLZ!q~4;m)u zOvu1&fCd1Ti53X_3zNxUz`uZB8j}sUg>wxD?0zf}V22%^3ZIP$5k!nXypABL)9Ww| zVjQwSY-(&Un~V?`br8HD{y|WM<%Mu80ocI*D&+Wsei#}xx;ldi_&-oQ2z2lQS`7p~ zrBbZ}rU@yy5%`|XYJo>!@koK!Mv%x9O0`yt+)@Xz5Z_k=?;w|oDZa-ARA6uup|M`A zsWXueWUkXH0ET6Za>NJ%yAi))xs1L;0q_iUjanfS!|lKWOZgnIni61x2d^SWTL6&k z-C_Z5Vz4cW zokeI*Igd5Z9XKNKG@3lJ8C*cfu4_Q?Aw{Nh#bP0!flwOS#!8OI?RFECY-~Wz-dI~* zU4y^j-vMqLz}dC~1md9p2HVXoe*m-*?4@iT@sb0T4}{L=^?KJ=SKJ=Y>Ke(Pgsw(G zQ36o$tsvL|sv*&@1ESG2ngiMgybof0GM&wrb|LuD80hMv(P)rxQ?R?@Kru4KJ=ptv z0iQ#@8c@e=1T*=*2rmFLU=&g?o>dmWiYx(yjB)|Kc^bDoosFGC42c3R`o>s1AqF(L zQZB*LRE0Wl`3NKt3jhdsI35xiKnv?iGO0+wVPgCi%0W$7Y#=s`dXNP?dLV|aY3^h6gwY9;Db!~%A0|`wr4{ zyk=F3pxt11S7?~A@i73UEMDFpmZ7-EASVlC4rmuTKrxwsEx*S^DuhlI4x<7mHiK3s z*!JZ;OlWMxXAweLD6kDN3L+G&JH{ti!YJ0?@qjo3aSPX)Koai6h>TbUH0DxKKoW`#QHKGp?)B;erAlA2|5K944Slu9qf>;QF z2-HzB3+I&}1&9H8LU7yn5Vzq->>+vBEu^E6@>k$(7TxRHAh-Y{Ok{IqbPdCI!!JwN zGRCe9ATo@JK7*Hz1Mvwbh{py>jSmA#i2DxUgP^I99398UV}2&kFCoV+11$68Ou|h7 zD-3WFxeDTl5|)5TCqWN5JHSV!)f*r_;ZLyeIKW#nDctvkJq8!$4(@wgV~~I;oc7BV z$sM?+3XCdJ5-;$OQ0okkMLfa*5lV@PPJ;1H146Zyyb*FfNQ%H*5eSHQTswd`ljs9r z!eozNKM)x$><9RWm~w&tH3EgyD#d(I7?3m((Ykt*8Hg$4a5*^bA{ta1@evKr7=+838L6 zXfSZ3a|nLmJIqQc8w*0lbFU!f%a)mZiJX9(%c4O%4_L=sh6GJ2 zVgh*5WCM_Q*ue-1a)u}r)S?(U0dbKaU>btqs&_k*Dpb&Ajc<~TgN)epZEgd#&6TK# z#bFYZLMXu4$RL%KEQx(VkW@j059D<`(y;zWZvC4S<&5E;U?9;Kiywjk!XcIvcw#wh zYaEn^2mxOl5ei#^P&`Q65cgn}u~mUTzUz<3hcHbi9eXa@e0b2u3!-n z{tRHKgtb{wo3I!lrFSa;?~p;7!NmlMV}`__UI98nWmW1X zLZR`%7?veu5I=UBqyYHHxJi&l2=J$QsP2m zqJR)zJ+Xj2I!SAI#>>c#V;H&t;1GvE=HME@n}dSqP|yHyki-SJ7mG+5N#ladTNvXK97>h8t38X45C>e~)LXsT`Vv)gx%~as%lDx|T0t&cKE^EG(WR2x1T}5>bpcTOdSI`7#6hyNE^>g0H$BNUKHF4GEwv zmC0%lkb!*4lYAEfnE~KWQ^X8e+77AR1gqREg8kzt9uO@s3(-lG5ujjaBag)q4NQ*^ z-6{y6-Rgm98|6(BT+9SI{>UO+&IJ#Ewl)V2NyZTs9WY`|+tf zfjo_5S2E~>gC&T%J)%NLkujUYj01U`JQNUIz^w92lFs``+)az4hJy`p>t2`cMCU_sVzPeDi~mtG~T; z@7;g-!N>PL`r-ZQPrmo#JF^SJZ~g0A!{>iHaQCebZ;#Ks`=jyT#?0@2Jf2@$%=v~V zS5x84ZXf`qZ|Hgak;hLt4xQ?3 z>^RV;RqN$>IxD{$yn1aj9iEx;tjvzNcjo6uKDe^B^!D!_eE5HU^VWCXy8rPHe(>X8 z4@}&8@BORyuDo}D@cs9`_YdFy$!~u5lZ%&r^!~7OX>Mxf=Ae7_*5!Bp^R0UiE_^aD zcS;duj7T)re=q)FUPlTU0B|U(#vsQaN3Xr|g|B|) z_0Rv&Q(Y%tIMjLUKuh=8#~*v5_ta;fIrh|NUOIB%kx#wy^!|pnqenWd{f-(#Yqzbf z*Dlfb?|0Oi`cJfLYzI%Ysx19|Z9Nu_uHRPcu*+o)+H^r_6oyiK8be-5@#>`9x<)lu zD=V=Io36F>@xe>?TsT=&dfzw2IEaE_19xO^M#wXJa67Y~QB zDSsrf;R>a~p=cl(@n=?pjB+TNPbL^bMw!l6${4Inge_y|id-=xy~m6t8R~4Y;;JutO`?vm(xw<*z^KW zUM@rkfkZ;ju=p5-XvIt}8}sk7OK8-HrVFKDD49*~sF=DH)bC3YzKpejmN(DNfnJMkY)5T08 z8Hr}nIjq65Fw)a$kRKtDrqUI9u>_Jzp$2)TkjSNU4yVjy3j}){gs>(z!Po2AjB(`Z#H4SL|}4Z4Q*uCD#ZjvPML-?Oi`-EOg%%sPqI zVyV;B+dKOX965ga(X(fc9PICGbu>2EY_Q7vI_*8jPMtb(;PBC-2YXsuTP!B4k%<3} z?gPh;9XWoar@g1sVL=y^!KhQ$w{>>)cC>bPwP3;D;b;JkVyIPUft%M^8y)th_GXK@ zsio0Wr#I?UTC>%xx3st0?QQn@`uaM^LC7iSbiz@&z%gnd2We^~91f$D#L=+Qo#sT#Thszc~TEe2Ls8Zf5M7`^wBqYCd9`MGd(K)PKFp^D0cLIK( z3yEw700uNAncRth{PwM`xEGwW=$+gO>?CuUSUj5y1OuB}KDTpnWMXV!X!!ov{Ors! zHgp1!pwGKFF*83kJ~}+T>|S13TU!R~jSSqsd*}Y0t5>dFyESn4_RtKx;*w`^ZgGBe z=i_Q<8Pc->bPU&s~81aKP=6CfqK+rHC(+0%6e9*3{Np%vOiP(PYL_ zl2WEM)|*>27z}0Yc5KZC%~H`wt%I@9Ao9aWuhWZ7n@LJ^TCjAL#4p z?r=0Vn)G^IjZ#sg(bgHw7E6Pz(Ntfj!HdTT`2uCFxv90Yv!lDG&Cz74RY-*BHRcHg zA~`Z1eXUNf*VJg_5`~NlvLCoOp?Ewj;qy6cIt|nzHZR~d4p)Q~S0OS@0hftnEES7H zu@(<>r~-^pBm~jTVeXYssD}gF+rc0x^n95p#sY}CcnpYbECI>~St8&Q-I*Tu;*xu5 z(d}7XUH5r6eCw-dHC}eR;l|}9G-52n{myv^cyqJUQ`6H^vy01%PS?`%^5W78+_|*i znwy-M7#X;C=l0$E1H|gu;QW1=lz=#- zxFD`7CqAGO_$`A4>JX(N7pHlpN)?FZ+S*!;2AeZAO1Vl6|E)n&5QHG3(V)}UV%bTf ztGC$ft({#x#E@ZYwAAY~SUp#1^z~+2b4y!ye}5mqt)ta$uG1>z3bm$IPdc6rW|PHi z1mv0<(Kd{(By2i1H^cuqn(d8NtEIu(2)J!-ZfV9Y66s0R;hWbP^tFUzgLuO6Wh{ST zX+(~}44YY0I}2b}qXM!FyjUa@Ndzch1QG=y&k`Xe3xI`VKZ8TYPDRxc1SM(86&&%G z0j-uwgm637LQut~GH9GFU_G4@epvh>m3B}~uw=wAoS}ZnHv!6uTyFt;emDmlk7B_c zJC6%4r_;5#yaE9w5G0Lrzi(r0#k~wzfsnKcz*<^xLKJf@EWu6KD_R3wxv^ylIGvrH znFey@bh!}N>+2i7O>%6Zn`Fzo>Rxotp;_LAE%6|>mBLu*N6*pJ)D%7yu(z_dfoAmW zEo>`!y*}R-_I!xa#J+19TTl2EiPFNZCSD@|732CI*(1s$p)_~r6QWoR0aRk0Z3I=;{s@TZlNC|@hkL7U5b4c}$iREXa;z;?O zL)CMb)uJ9b_j%%vA?-}87LqaqmdR7t#tEQHgXn##LJmt9-|_p_JrIjlH@1RNl)EKT z9Z#VT1nybE!vh#xg~SN3fWwQij{587rjH7ION%ZzAl{)V9v_1cLLeckAbY}tHvx`; z0A*ee0m%KNu1Zz)@eb1K^g;v%r~_74z5Y{#ZNY+orxaCq4rc7kxZIKDBj6XIQEWM)doR{>XtAOjaVob;8Dfp zL*Y#|d}O5l4#FMFK~xu0NE+;bNv!chShL_1g&vzn=(*sN0%)DF!3NRJZfh{<2}l%J z!v_eem30k9V3&$ko8^E_s&BBUY8#skG@ey2sL=^IT8&h$?`YI^J$k(7%;*33&tH4; z^I!h#|MiV8{NWc~_|l&|^TcOfe);LHBd>hsiNpOzpM3hvsWaW0ro)a}wMIb~@{*C@ z>e|Z0?AZMWQ-jxTUb%JY*YDlE_Vd60?uR!ozW>RkxBv6MfAQO&egFOQzxn=uzw_~h z4}S99AHVPv1U&^WI1A+?yUB`1rSX7AGe*mM3Obf`NE8nkds*G>$?@=V`InzNd-&uNj~qLE>_AuV;lAG1x`sx*7U&M}9|?`YD3#MIo#50eddHSg*&YXJu*%zLD;gu(kpMBxX@iV6mpM3WD=bk(D_)AZn zdhD5}PM&z|`4^vkM>+MYqHiKAg zs*%*Fg(9tz!IEo)#WI&pWz!P`|y*S*RNf<^-LvG@H{eIBLU4U+V*^O|rhj8K7z>A^;Y2hT-wdP^{y;PwP663X<|_2vN-@Xe zv&wsHF1=V`h$$$g;J)%AA)V}>gZ}|?`>&l zZnqn1jp$gm!;*A%1MfI+ptHTRr`rK61gPzyeeL^?o_Op;|MAmD4<0&v;9&p${yyNc zN8zL&I`!!BVFw!*2le(J*}w1Lffid=e@Am?M@t(hwt7e* zX1!i-vgq{&km~w6v)*LVHCS~z6X>s6twyE9%SuV*GOH@b9E7f z(&X^i^xVRN2ZHRH2Pb#urg0W-&N(wPKR-FU;GCM6oShsP8iRGZe}8;>Y+`I|+Br8h zF+DXpGJNm)m7DkP4NOdpPt8tGPmVkox_{@^&D(eG433P9zyqe|#ve@1ObiWAf|4Jd zoERIPbh&2GuskylJa%DmanZBnbgy|<(X;~DVb$mLtmCq8u5X2q3HV{{J?mTEZTRpJ z;5dm)CJ~9m60sl<3J{6FZh+&K_eyj&osAA88eZsScdvpCLt2GiDN|j2I+xGkkcN*$ z$OrMxrgL~$wB<8cJp2tB8D#icILRPLAo_}dovAf)b)804Yc!j!RUsrc$tG%%iD5s&ZrM0CQfYaU838Zx&s+@hj-5rqBo10tPn{6%Ky}jL? zUESTCIIY>-40qscTeG7D{@UHs)!l!fzqhNs6<)^PV0ARvfV8%@x1w>gqrDkO2k;HE z)l^q+K?_|ADF22Aw3yau)f%9snmUWcPzOXN<>MuvB#>9cNZDB& zyrz^$4oq5I16Y&su}1_c8ZAk?3@)E9MC&1t3nm)oGO;LLP7Y@dafqVAWR{|*xXsMXxZF!iIBDVa0&8?T zr)Fj*Mu&$+kvz_VN&=ldJp5p2c<4Sl)F;M9#-}F7M#jd62Zx6Ngd@Wv>`NG;385}pzK9*A-z}>zFr6(1r(r+Z3gU%lCA-=^&CZx zfE=K~f=S#VpeUKNGV$yI-Qs|12gb!B<#yx<@UH}G^dM(JRp>M|kfl{P4Xn~&tK8Di zgic^bbBn_U?9PZia*M^<1c0l`7<9kk1VmFyYb$|LGnsXR!`5U+^Lj7f5aJYQ`mPQL zKk#C9dov)cwY|Nqy}iAoqqD24v#r@~L-Go*+71G~e_tO+uC`_y;0uDL32p0Ugnk_w zIzc4qwZK|yYEXY8HP&d5q7sjvu2xg4tHB|8v{(ZxfzSmA#cPu(s$Dh#XhtTZ+ApK} zo!H^r+atCKJcvsnP2|rmVfp|`9y-Ekaz;Bw8+OpT9@puKn;)i^}A@kyM{a4jylFtRNo{y=tt%*SE?ggE5A z#GOa6U69=&V)hJ?flMT|0TfATs(l|P=1$U6L-$k?yF>XRFmw2Np>4G2?ZlFl%ahoM z1tn4qNam+esq5ep^d`#=>8OD5ps zHRZ%IH6fTyXu7mD61$rbJxF@MgvAQP6U4O*Wwgm;X>5Xc2l#4hYXMxD0ihtH(B0c; zqmD+4*=)iA32m(&g%R@B=4K+#ZH+c7Xm2Dk%KLrDX_jpvF-kL8K-hiS+e-*j9}tl9b;wf!7bE zkcY}>Z;v>Uvcxk;x~8NNjouk-ToM74$x_Yg0(FKEhIls6#)r*Ss@00EWK_0jjw2F> z_%(>rm`%JK)qZ2um_}qzjjrB|h|y`3IOLBqmV<6e9mFGufQCAKEw!dtw87~ZROuEJ z;(!ql&Y-;8JG(kNPFX&@QutUztIy9 zpsh2Y9LFLO#9*|zD=8y^f}~XR9>WJx$)%Jd8Y7*MSQ&`bgn0e2hfgCl3QESaF({Jw zN2(cY4%L#y7hqAQ0ZPHsD_D+1SxT0GIrnH)EXf6FnYvd5lqqOK|>u*WH|8z z1;b%X-YAmMh(uiLsD-ySHz}=6g&ct7F^w1QB^Q@naX2rU8+;~w$lhab8Mh`k+alxWn+ zPzR`Pv|ggHMk@*?6TH$QKozqGlS7OeSP=QWdjf4LRQUt#W#oZHBF#xiq$)<}@8Dy( z5-UbzRjC6_QZnMttS&YdZ%7tYqZsF4kdZ0Tx{fH)P)Oo%POf4{(8ea=o|sjL)r3X{fU0F6$_69)eI1js&{2huJ<4g#ASVl*$0dva zRpa9xW#8GOisr;?m?B1HI&t6>Aq*0e$u|1WNhKzS7eByp8De86CJx^=HPDqnce|I$ zikRx61gB)&fgp7g>ph_z0+$_x4|(i{w`yJAA(l8|D#p4v8KdxS`Ga^D0FlBz0uT-| zwL!d^DT>CCAdWehIQgP6%HIxguYl7P58+tY1=OGg56fPZ!-{f~Qf3ok5W=E4acU6L z4Y5NKa}=>SQd#@=zDXK6Z+Nmxl(~`EKybyllxdN;WI4ohLoDv(kfL)K3ytU;r(#z1 z+SkPPt|kXo5oenP-*lSMCbTT6lTlC9Nk;y?WwzrzSL{a%GLC zmV!IR+vgIz_LMkp5*Nx34lmMRc;@RkbVSiwpd@w)6`k&Fz8K>SBUQP06#TOI98E_l)uHs$jXr!@-;hI#22_l(QQxIj7qKxtAm1py)k|vH1 zP)mcz#frL+fR{)7aAe_0@284QG}4JEM=_>H^r4aA2%K|JLAHg!S4V7{D&j$=#x;Kb z94SFD@s=x91ZgUzvg*~N-j`2R$kljVn;KFrrQWoPL6UN-sH_%QDaL{JS2{J|L$1|? zZ3FTrDSuN_Ph_8>fefqPu=(-&#u6;kqWuc5S6hW2@i&vSLxxz$fuWG3X3WjN)`{=Ozzcq6ef5hlMZMw#)qV;Zb}jjah@U` zBXN>Mx!}X82x{zzxYg5%ND#fqelmCoFe71{G?5-2Q3P_PI^lz)0i-;kg0zP%1L9Cb z^Dm+st*upCJLN6R;Z_akn_s-YWCC}#2E|D1es`kD0V`NL}@SBS@wl-Ef;$l!|f=*%}nX)6+dbCp$34+Ok8kgX(t8QD|{uo|~Gna!CXL$MP z7!?MphHf4;@>0rE&9_|D9Zx*E=ubo^ZI;Z=P-9tW;d~g!NUn@lJ9E{HPt880lN8>l ze4MCW+KB30k}f*|De)vcYEULySLi&iBBH0$h8$y&MRKhO!#KlV(9u=z)<6=sQP$MCGH>)xkavv2JDcQn$2wW;Yl4=mA z+9sz{<5j3V) zu}eL+nn$W68a>oFAxSM94jPoH97YItwMaoh64z~yMv+RQ(yJbEsv%4k7UL2G%7?mu zWYh|N5WG1~p)yY9Jn}_~ZdUfFxhpEVl3qDgCnCs(+mqGqF>&};RXS$*5HXt*m@ywt z`e3TXskm$v>$Ha%mF$lK#TO}3ST)ZRVp!h$Js2NuL(&GPG~NG4{NmVci5g0w?jat3 zvOY`_rm3g0MK2vq8mk?Ax_TOiMTsDUZ* z!K-dTLRH{kGWT@-%_2#D=jl%K-+f6eGa3pdm6bM_I&9n3H>*YMoeEC-m)f%JZ=8|u z``TZf`>g)4FFgCLZ$EzQxzpeL+q1|1;7fn^wfaZSoqK7&t@#U|I{CSCf7k!oxxaYz zQ=j|nu~$EPpnqRWU$5S-7pkmEnt*3eWjVdp?eAaAR-Er#xb?m2@0@=J|NHm<`~UX? z=->U{|NP@0{_N^ViZOD-SCA`BhuidrUwZz;XTSZ8&wSzB=g)rQo1Z&(?(uJs-#<(z4pQ%zw-2FKL6_LFWUBf{oJ=+d**ZB{QPHM|J>LA>h=964?q34 zfAftOkM*5;?ukB~Tv@BDmDVs_-W~VogNcQKTer^t^71FYdgljk{=?7Sdi%fs;h*4x z{o9Ye^I!k`=9~Zdi+}w4{~(|6JMa7uKJx$b%Xj|m&42y*@80|2hqo?_+KmlOdZSiduNPSQwK4@?R&QzSX=$^o9Vhoy^7eL9M@^Ei z*YNikI(|Ct-^dG7I~mVvVtZj=V9_-;zP##Mnp)f1UU5!r<#ra+6-$nVe6cS{P5ge^IE^x&z3haY+4kN@b)XI}sI7he9-8-MnfU;Q&ULErrJ zxBl*L&wcycxxf78xBlv{@rFPD%fC7ICto>t?$1B>&2Rm$ul1hz((BK@_|)N3uk7bY zOe&?_m@d>>G&~lMA#W*;B=yCakT5gtnY+Clp1ixVG&=Ut+n1f5d*?s?^}E0L;rq8g z{@!oi`^B$6x_;r;zq;_V|NEEMfBwsNJ{dm$(+{rRyZ*~x&MtiL^PjzY@%z1Z zQZ+5FG;4)olc7N)G9BwGIcX;kOXy~sLSt&_vg>qWrLpDF#Wu?)1uQ`^C?9HNO6pert<`o(kKe&fqu|KexA^1}09`{L6_Ui{+8gO5D- z)QN-7eDUQ+yG`wfPMga#s**`el>gYIpv}6CLj>_un;&i2y+G}YHCQUjKGnwR6 zGNtW>vaGP--bj_UR(9yJ)Kan%NyK7oS|YSQdu_3}<6pdZad2+NHF5XSTzGcy!TrIh z@vHB?_3neYi|4Q3yn18!!EfKW`u@-F`j*G;4vwsN&%gJ;b@!9ILl16#GPJTd<=*rz z%}mT^Jd1^5C_?Aud=>7-MkW#}?Zpxi@4{B5R9K&0OS$gNE-!4a-MTZsz2=;_b@hWA z(--e7EV_or$3Oh=&V%ct&SlSov2ft_@anpAl}!r;wjjM^eN#ho8`IYZmjLC9iNt!8 zBa#WER{dT+x$1|!S9Fanth!yE^pWeThSDa8Qw~6t;H)DkDFe}RlL(>&2Bss$Vi1O z0gDb{F}%wTrkH~KN>pX98suM+>ws1{u9TJ^fWdedG@h`kN&~eUOWA%KmGc1N6tLgzi*$R z{_v^BTF3F@M$2QbzIICA_|!p1zlmSJ-&88_g+flATVrm}H8yEAvcj$u62Dw$RMQj8 z2D8!L-EM8Ss1@~HeRZ-LgQ~DaSFwZ=N0)?F+iO=^&z!XCZ4LT*Ta!{OQ>!>7wphl? z2%4<*#VtjvxuwUV((olsO~z&;Uv8||Xn9O&>jAyUw7=cxXaMZX)h+E>p2%#L@Z>s` zpiQz@^{ayn5@}_kKROa{X7=W=3yZyZ-(=moC2j-ua*X*GCsFj}2aW z@7Es>4}9|8J0E>=<@V)Ew}!W8E{x9KTgXJ`T&r8*z?y4*aKtq->ZdJToMqG3wko-u zY$~?n-`NgiHdkY*NI1huE=Abzm&G~v#O>*@>*mbb;&x=&wY`&!Cs>-4D_o2(UwZrg zywl}b5AQLhs=ZWAmzlFCR;9N}g(c@^$v-}m5YX9bgM!5q)6>cDwreghdviV-Tv+jM zc(!&T_`7i4kbin9zO%aKo|;--m|NS5?nRQk-FPZpPK0tvHZzz2;!$G4NtY|>H67ND zMmkfiVkyiLp;AE03G5DtTWzh@mdBnvU^7}A&1!k`zRqTQ&!GdyP916OXx22e**hB~ zwfp+js^hO5J^bjABgdaSVKg`KnPM*a`5)bZLmm4cJ9_NJv-^)fd8)m=t+m%yBjfT- zz0Hly2Oodt^x+dH4<9*oqSs+*?=-6vb>^1t_U87!v(KJ9+TVAmMOUxk(kdB$mTzsK z?>Wx&cJ6O)Xt!$R0v-#PV_8u2C-=Bg4&8dv!f!v@UekV5wWrY07)rTNriH+2?=Z>~ zy$9vu&Vw4M!>&{-MD#q*V&Kthnlw44j+NvZWHeeaUCNeNELyoNP_VOUdLhfoZH4lM zcp{d_3q^Fk(rD4w8Z9b?MlE4f1k4PxhA+~XER7C_u0|}a;}?Vykk^|zcAm8tDJuBU zU0x}X3~tSgEOdVl5&J-i;UYz#87tSSCx0v*tm>=BshkVnczMYw|_3-+VHxvu5Wtr?U z5Z2sYU}Da*IJp{|A8>`@K3|$irwf$|d5wa#%i!nY6<&HXNyH~(H&&4_xB^Bc9;a29 ztbA^d#ia4dS%F+7rqN}>Jq9c8FN>M%f`7NpAm)j5^+K7E6DtXM@y+crYr`v)r?YB{ zprW)l_O)?k2adNo98EeyhsoCFu(usL)Y8)7XgSpDaJ2O8Ydi8pcfF&r=|Hc!=afa) z)oyL5Q`Q)5rW(1{+-y{sAc$CO^~_zNM4*;(Ir!_X3bon_A?nDHcC-ELiMHcUblVS| zY_po`txdM>BYjxU+;kfjz(*HTXRQqO^rq-t+gn`##WnxMpKAHRxMAaF-Xd^ za=4@{=D1uIYcCm0iI~A$jXEDna`+5}OkY=1YqjZWo4OiA5|i27?l2f^ZH*RFjkwmP zF$CfK)LY0iiRcL9+5|dVp`hwYf)Uz56`J6MG`QXwRn(PCoy{(8#e+}N5MajiQihwl$9FW#T>%}%UC?wwj*ynB6kYIegnKD-7#wh}tgHlbJAo2ClMXK|Z-v&}OEXUQ%(Q1~WqvcW zHtgD5@#d3jtD76s6LWKO3-0CF;j!82CGXs*%d_TNT}>3SN#AlX9SnqWg`Ic_L{^2( zD`q18SScHb=hJ~eA)lu26_`8$vjiHkM2q_(#ma7`z{sX>wycs(=W>yawJpETy|x`q zdZxEBiBM)Yu$e9w)A3M-!JzSk9G;<$D>rG>wHh&~FW2ntM9B_CNYaOY@O^c6)iOg1eV{?0RbBDuL zuhN->G^JLoH}J$dZH*FAgh)V7Ms`bkv{Z_%Re;ozDfJqalFQ`Lvc}=3idf87$ar#vv{u1jb3ywR;>F$MPAEp_?DDh%8b`pR z^ZDi7LNbx``_koPszPH)Wbzt~LM5T+Qpv#D#{49Rh!r=4lAY*glFp^4GaUL(ayK1~ z?S!M-=t7Led>g4udN-R)C(&VYZD8ASMT~(Xxsn)lJyo)vR&7mcin}k+LY^-Za4bh&203zKv1GCI^q9K)y=LZWs4iy4 z*?XVc%B=OZt+k|n{i>_(J@=dq|NZ-KuLl#`%iF%Kpl5P^%eyo+J-6zaomrU~xpi}B zXlQhLdFICO#l=u^Yb&xf zzY@tu<56EYkq)8bwP(jO1MhOnheP%89goku6<)tHzBoI4^XBczndOzWa5^WFNEAAg zPOgyhTs)cbZHAI*w2M`lP!Xup+wC@^QjCrRX;_DqY$zB`CjF6YKA*_s486{1vKV-|v4&4oRjN`ft28LoHFbpVaMm}}JIz`R^8e)}iOHa}y6W7` zt?h$-&YJGdy1F{2*;;GVyW5)Dd*G|1WAM;{-d2~x)$TTGWd*g~)Mn?6_WHV(&h}cR zvAw}iXBF{oeN|y=wd-1YTt;(U{{g2&#TS*ja$X!2H=5=3dyWlS8}{vObr`G-c9odf|`#f^4a9-LNpUg1=rICl}xLYie*;4!Ky%%ZCPYd=PSliSjtz8<*ky*tdPi+ zl02`LD0zL2j?<{CRf9AVSQ(p`n;p4)Yiz<7TJcwNIRlrq)xqZJ_eCR~`IQyV#+E;m z_T|KdTt&iX;C6WezKwY3_GG+VN}>OAnUm#mv9-;lcX)Dr^2XHM$gI!5vNSW{%f>v* zTVdbQR%Byte0pPTC%O^OY15KEng-pg57gzG-Y9*b>i1})K z%bzPHVmx2wG!BQ;VUWP#Q;wzbp-pcrT}XusN{z~(mzx{xX17acs?(*@oV*lC7n5mG zHd2zyM7&dk6Xb9Zl7gUj6o8=<=f9*9a=p;wD}Gffp*9Ca?U*5*)2 zVfiXGvVzQLZ*Z8cmfBjIMpt7}W5ZEvt#R00?#AvehrOk>&SW&{L{$X@6>6oFlNiyB z#ogZD>U6aS|r}EsgFrlcnCl zmx|GyNW{0j9ZVGp)vC;DH(487TH0G$-SFPfj$1A+qus2+YBSlLH8l>imY3<(DwRY6 zzg#Ajmbg+n8;Pd8YyK$QHQ2n;sXRRVMyuIusdJloUZW~zv)Oz)RZMsxz?MnM3fK@N za&oXNm9wcLFDsULCC7;~sZ2Q=@cP4{oh@HD9M9&nscb$4J7LfpO$E1u0beK__HTt_ zsZ=5vO=cpI0K9+C+Rj!Wyd8;qcak_uSSY~;oDTZ~{*A@yxt003)%BfNGF#%XH6xOi z;*r4m^2);G`0Uc+(#rD6hHq=tOIjcrIoeqB$3u}+QB)Kw)S^nYl8?sx%PZS(8n1h{ z{eeg_m8oLWK`McF9}jM8^V#RWqqkgYJ1&4^JA}OYFxp+M0_ebM#sv;wmS`J~MUdiKJsY<6+D2z6XUSqJD zRlG)7%@!*8Y!N+2OL-AWuvI#>l&cgA$v`0F4<-_ciqc@KYie*dHCinewTc&2#WJx- z2CGnKs&O~NvTSa4*)4jNQYP1`d9_{x3$G3(xy~9V9I~isRN(K%ro4>TXm}Ym^A$W+ zQB@kXrKYB-y}Jv=mNiEBIVm-2P)DZHX>?|r%U##p)7I41(Oh3=H^8seA`Hx6vl{e9 z1I};45|HqcN&y=yxl{$7A1ZVgSj{?-Da$lwM?H>GwzfCc)VkpDCYG%Pz2p?wA^#5WhBE_JGDT5XFofOxI8Gv?w*iuRv?iOyV78mF5yQmhSXkGf zz|xAs2%{bzW%PE1r?revwjA+h6$H^`kOPNqyjsRcMTZu6jS9kvMPexl!SuAtp=iTw zvDMTf&fMifqA=WPSZwfSbq3Z8x7XMmwKXL8p_Wm#kjtSAuL6eT)(M9~*8y*yiZ*Ifi!r{bZipZ7N zeuTxy^dxCAOCco=-MK2n$0&_Md?z{&p#-IbEhglI#Sq!gW*s3{31LS+5+#ubQUZ$= zG0GeuP(y?CQl2%;c_mzGCqkZUZ4ks%vT^M3BhirXwI!4-1$Q>rS65d(n?7XZDUf%B zJ!k|TWpR1u;hSo`1$B~)j>-gx)axs=P7EjLiIj+aMO{u!y?y)TqKm+QOoO;>VA;azuww2_polTlY z*zd97iF|d7nYvX{rVJrfr`3XNWQjC#7}q)JVf%WIiA@SRfKojj!Eh} zmIP`W>>4|a3W%^>VhiIP-cVNFv+Ow+(R83xib!4Q7L@GFWCY=@v@qgE;7%0&TJhsy{39C5Ia?aaFIBlJE2wjhmoI{ocyZ*a#BSSt2kHfuPjt-W5NSRE(K6a>V-==yowwRZ5tgMa1ZRq{%1XtC(>I ziJ*)7i)Ob`zN@UJraF$4!}Fad$Q-FF5WZPJO#nP-#Hy9Tj!Fy6NJv?+0N01L?LZe1 zl7sVtMvg%a7_N|saY%i{y7jctFm16Q=dKVqV0TJ`hSZ1=j6x=Zc~{M*Whx=ov=@jA`9XGDGKq#*p~LfU$dzS<%s`*3_SB7WF)G z#4+&OfBa{k>Hn=SJn*$|fBK=%o%;G;KK#%(zxK7yH6Hx^Z#~f4GWftFCl24$lCYg^ zQYfwFg1sJgtZ+IyHht-ZS3Z29b${>|@`3;_knA`dd#ua^UO}kDfho?oiK>NAA7q7HU7eoi3{vl!cWwOor02%<_ka4rK z`JI=4{@zFb`Qo#G|NJZOTzv83htK}%gDY3hzkl)dkLG7?T>IeHAI>k`xI8|3?ZVLI zm#;0n|HkXjzjX2P#nD@1w=Q}L(V+{Q$&{=blk)LQGO7@T*4H6ZE~(^Yxy4;$XxiJ; z-r7Id+E&}uKhWM(cj&>h14mDuy7vrx$Yb4&u6++Z($n?ey{A9<#AhCR=(At`%2U7l z^+)%ed1Qa*;k|AB_df8zBZuyJ>ammef9BCcdyYT+=)L=z`p?~S{J;Yzd-t8b`|!y# z`|R#R`5X^adExbU-@JP5wReX{Z(Tfp z{)3l(bM3ufymIsE>o31|XJ&Nx&iIml<;I=0v8$s?>r10=pPyTpTbP)fUEKC8EU&F^ zj4w`(udd9j`_~qtg+x3P%g24`6~DL|jOG%ts;m%?WjQWghz59zP9nF}8aTC~R5i$| z5>778Wh5$v5_$8@EiHXr^%jfUYOPVqwJMXlsom8z*wt0n*k5mK>}@e=YCBpR-95)n z>^*wy;E^Ne&i1!=_4n5~TLz9EKmOq9zLWPq{Nw}s&fa%?&%vWdPM$n_=E#Wy2TnbF z|KVc~eB!RNcMS{<9@y7WSKrm!+to9;XaC7lhkE)C_jm8xS7+%t+|kg}+t%0L-`Uu= z=ir{!mZq+5r=zxcu&1V>x4E~sw!KBGvOBD1S0kcvnjJN6w?kD`8AJu-1H<8Gv*~qe zLyZo$sbYyQLqb-_Ax%}S<fPHy)-;EIWjUmJ2AUBapUqZ{4+9q^~SC1*RNf=I(&O%=*G~^tG7mP z-=4iQG`Do;%GAR2(CFg)(5?B^g^BAUvr{)O-x<4oYiw?6Vs?IdeD2Pb+vCF{6Eh1d zi?fqc3p2MTm)ACZ8_Pb(abt<#W+J{BOh?h7H5l@Ge2G*%o)ydG#avm!<&vrJj?Wt_ z72`!wwhFlcSICy~1=vO4WEB+)BFM<#D9A)ZiTKVo#7Py%jNxk9Y%0A@!o!cHi@Z)N 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

#168;{$q*x#=+TAKti^QzZo=(fpvE>?p!meb? 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

!!Eh1Pt>Ug4(;u4TCcV+qI8vbtXy7R1H^oKC4O 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�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

qm=?wrUfqW==w26iX3OZB_#(?S8GEJW))R z$usv6VPV;rohJs44S{9b_N;Nf&#DioBz!H-GD`F}P>O8Pi20g#!hPXLaPnf)0hLza zPf0OuW1joBQoi=-hDMs4;yovBP8pKymAS?zrz4KF_B8`TgIXrf)ITY=%H#F9SUIsl zP`kM)CT*N0H@c(DC@5D_EwVID@Sf5>%c`UEGYIT;r@g|ihio8%A00&v9FA7n(T!LC z7CZCxha@Buug?!`48wsHF%7Kpefuto(j%Nv{UHsv^|mD0XcL9eVFZ82Zy9lU?X`3) z@aS!_HB!W_+=o?_i?q_7%5V#uz zhn7AyYHy(s3b#r+m@YRRz}@o6NvYDH7xeS2UNrvYv<|zUl{xD}QK5WWP|U_4Edmpg1PPQ;B&pXOT=;QmbagA@WXOMa6~;Ud7Q(g^ zOhp7>$_J=y6XI=4D`35mj!I|j1CTbnZ(toK8*2+ zO1k+L`H?~oX${ZVudQXWF;bY#u*4Q;C>A{FnGz?VF4);mXHAQ{8-k+f%96_8YSK<# zUM5^JFk!svaG!JJ(A(kC^WELnz;sP5Eb28C#9?-V?R`xPCAXbpStpcl(1>)S*l(=; zYNJWB79DClgA$mlM}lE`M^vtCHk^g_Ll(IRGDC?7BB~0q9b(A_s}EYl?m{{Prf4DMYK#VHD4hqo$)Xg3TJrQvzb?Z$MPLW1MyHq5;;h z%&jVkiisqukJI=0kOq zvDMYYZ>>-%&%OC2Ukzb{KbtPj5{b7t;+Qt9@=sZEODrx_DC0MxMO^bF#F>EauEWe` z0yG=Sqtc&w-UF7ixnF);%Z(8;Uv5HEp<~(Vm^}(kuNC%_4aOfd#2^IIDz#~*+!I89>nmb@!6e8&5-oWZd_?9~oQn*xl*w?6u5$a70klM_T_0P(9eRUG< zBY|%Hy}s7!ruqiKUl9YT?WffCYG%dcm#ENqXHWsY6j8>Xi1*ClJ8mxUp0Ez})m$Ge zgt;iGW~EI0dbw>(_11UKF)2DJfgh-!^t%p|eF@-XcBg zttx8THl&!+=nN>S%Qafd%uj|Vk3{VtI?6+td3|_R61^KC$>Ui9c5C{f)c=2|3zqJp|NWIPg~ZHl;>WfM10*dNtg8gowRcEGWRBi|P3UXsibJp<$rS)p?m z;UUmgr7bBv!$SB;7lX5l{q~PX!AL%})|0or&9Th3plq z7m%$;BaXST{*7b(IiP@lHpo~`6J(df?GK%32$YT7zug(@ZhnqKb#Kg5c6a)20dB7aVuec*(39lY3 ztHx0XNa}xV^+p^mXMi+54~+vRe%i|K37`P9fEPj93=rzzke#@0ETQjYSicGyKuOK| z{(E>(W5AC3496gmw@q4@gQh}eR+%-8r%MX()~af1N~-rM@g#=W`*$O=XFZQWlc##8 z>JgD0HCr&ygⅇ;uEGJO1_>8Lx_}7E^!s-+mj+$+OpNRPV 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 Date: Fri, 15 Mar 2024 02:05:56 -0500 Subject: [PATCH 042/134] GUI: hover box --- src/gui/memory.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gui/memory.cpp b/src/gui/memory.cpp index 3a506a03c..a99b08941 100644 --- a/src/gui/memory.cpp +++ b/src/gui/memory.cpp @@ -84,7 +84,10 @@ void FurnaceGUI::drawMemory() { dl->AddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_FREE+(int)k.type])); dl->AddLine(pos1,linePos,ImGui::GetColorU32(ImGuiCol_Border),dpiScale); - if (ImGui::GetMousePos().x>=pos1.x && ImGui::GetMousePos().x<=pos2.x) { + if (ImGui::GetMousePos().x>=pos1.x && + ImGui::GetMousePos().x<=pos2.x && + ImGui::GetMousePos().y>=pos1.y && + ImGui::GetMousePos().y<=pos2.y) { curHover=kIndex; } kIndex++; @@ -96,9 +99,9 @@ void FurnaceGUI::drawMemory() { for (int k=0; k<(int)(mc->capacity<<1); k++) { unsigned char nibble=mc->memory[k>>1]; if (k&1) { - nibble&=15; - } else { nibble>>=4; + } else { + nibble&=15; } ImVec2 pos1=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)k/(double)(mc->capacity<<1),1.0f-((float)(nibble+1)/16.0f))); From 8f20824234dd6b6f1a25f39b03afa3690d850373 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 13:45:57 -0500 Subject: [PATCH 043/134] add delayed release effects FCxx - note release E7xx - macro release --- doc/3-pattern/effects.md | 4 ++- src/engine/engine.cpp | 5 +++ src/engine/engine.h | 3 +- src/engine/playback.cpp | 68 +++++++++++++++++++++++++++------------- src/gui/guiConst.cpp | 4 +-- 5 files changed, 58 insertions(+), 26 deletions(-) diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index e8f02c8cf..67ca51ad5 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -80,8 +80,10 @@ not all chips support these effects. - `0Cxx`: **Retrigger.** repeats current note every `xx` ticks. - this effect is not continuous; it must be entered on every row. -- `ECxx`: **Note cut.** ends current note after `xx` ticks. for FM instruments, it's equivalent to a "key off". +- `ECxx`: **Note cut.** triggers note off after `xx` ticks. this triggers key off in FM/hardware envelope chips, or cuts note otherwise. - `EDxx`: **Note delay.** delays note by `x` ticks. +- `FCxx`: **Note release.** releases current note after `xx` ticks. this releases macros and triggers key off in FM/hardware envelope chips. +- `E7xx`: **Macro release.** releases macros after `xx` ticks. this does not trigger key off. ## other diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ee99ae002..ab8b22a99 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -105,6 +105,8 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul return "E4xx: Set vibrato range"; case 0xe5: return "E5xx: Set pitch (80: center)"; + case 0xe7: + return "E7xx: Macro release"; case 0xea: return "EAxx: Legato"; case 0xeb: @@ -137,6 +139,8 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul return "F9xx: Single tick volume slide down"; case 0xfa: return "FAxx: Fast volume slide (0y: down; x0: up)"; + case 0xfc: + return "FCxx: Note release"; case 0xff: return "FFxx: Stop song"; default: @@ -1687,6 +1691,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { } for (int i=0; i>4)/15))); dispatchCmd(DivCommand(DIV_CMD_HINT_PITCH,i,chan[i].pitch)); break; + case 0xe7: // delayed macro release + // "Bruh" + if (effectVal>0 && (song.delayBehavior==2 || effectVal0 && (song.delayBehavior==2 || effectVal0 && (song.delayBehavior==2 || effectVal0) { if (--chan[i].cut<1) { - chan[i].oldNote=chan[i].note; - //chan[i].note=-1; - if (chan[i].inPorta && song.noteOffResetsSlides) { - chan[i].keyOff=true; - chan[i].keyOn=false; - if (chan[i].stopOnOff) { - chan[i].portaNote=-1; - chan[i].portaSpeed=-1; - dispatchCmd(DivCommand(DIV_CMD_HINT_PORTA,i,CLAMP(chan[i].portaNote,-128,127),MAX(chan[i].portaSpeed,0))); - chan[i].stopOnOff=false; + if (chan[i].cutType==2) { + dispatchCmd(DivCommand(DIV_CMD_ENV_RELEASE,i)); + chan[i].releasing=true; + } else { + chan[i].oldNote=chan[i].note; + //chan[i].note=-1; + if (chan[i].inPorta && song.noteOffResetsSlides) { + chan[i].keyOff=true; + chan[i].keyOn=false; + if (chan[i].stopOnOff) { + chan[i].portaNote=-1; + chan[i].portaSpeed=-1; + dispatchCmd(DivCommand(DIV_CMD_HINT_PORTA,i,CLAMP(chan[i].portaNote,-128,127),MAX(chan[i].portaSpeed,0))); + chan[i].stopOnOff=false; + } + if (disCont[dispatchOfChan[i]].dispatch->keyOffAffectsPorta(dispatchChanOfChan[i])) { + chan[i].portaNote=-1; + chan[i].portaSpeed=-1; + dispatchCmd(DivCommand(DIV_CMD_HINT_PORTA,i,CLAMP(chan[i].portaNote,-128,127),MAX(chan[i].portaSpeed,0))); + } + dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,false,0)); + chan[i].scheduledSlideReset=true; } - if (disCont[dispatchOfChan[i]].dispatch->keyOffAffectsPorta(dispatchChanOfChan[i])) { - chan[i].portaNote=-1; - chan[i].portaSpeed=-1; - dispatchCmd(DivCommand(DIV_CMD_HINT_PORTA,i,CLAMP(chan[i].portaNote,-128,127),MAX(chan[i].portaSpeed,0))); - /*if (i==2 && sysOfChan[i]==DIV_SYSTEM_SMS) { - chan[i+1].portaNote=-1; - chan[i+1].portaSpeed=-1; - }*/ + if (chan[i].cutType==1) { + dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF_ENV,i)); + } else { + dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,i)); } - dispatchCmd(DivCommand(DIV_CMD_PRE_PORTA,i,false,0)); - chan[i].scheduledSlideReset=true; + chan[i].releasing=true; } - dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,i)); } } if (chan[i].resetArp) { diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 3d7fffc90..ce93ddfb9 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -490,7 +490,7 @@ const FurnaceGUIColors fxColors[256]={ GUI_COLOR_PATTERN_EFFECT_MISC, // E4 GUI_COLOR_PATTERN_EFFECT_PITCH, // E5 GUI_COLOR_PATTERN_EFFECT_INVALID, // E6 - GUI_COLOR_PATTERN_EFFECT_INVALID, // E7 + GUI_COLOR_PATTERN_EFFECT_TIME, // E7 GUI_COLOR_PATTERN_EFFECT_INVALID, // E8 GUI_COLOR_PATTERN_EFFECT_INVALID, // E9 GUI_COLOR_PATTERN_EFFECT_MISC, // EA @@ -511,7 +511,7 @@ const FurnaceGUIColors fxColors[256]={ GUI_COLOR_PATTERN_EFFECT_VOLUME, // F9 GUI_COLOR_PATTERN_EFFECT_VOLUME, // FA GUI_COLOR_PATTERN_EFFECT_INVALID, // FB - GUI_COLOR_PATTERN_EFFECT_INVALID, // FC + GUI_COLOR_PATTERN_EFFECT_TIME, // FC GUI_COLOR_PATTERN_EFFECT_INVALID, // FD GUI_COLOR_PATTERN_EFFECT_INVALID, // FE GUI_COLOR_PATTERN_EFFECT_SONG // FF From 779d1aeb61852972311f6d12e73f15ad4264dd94 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 14:06:04 -0500 Subject: [PATCH 044/134] K053260: fix chan osc --- src/engine/platform/k053260.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index 58ae1003e..690071fc5 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -81,7 +81,7 @@ void DivPlatformK053260::acquire(short** buf, size_t len) { buf[1][i]=rout; for (int i=0; i<4; i++) { - oscBuf[i]->data[oscBuf[i]->needle++]=(k053260.voice_out(i,0)+k053260.voice_out(i,1))>>2; + oscBuf[i]->data[oscBuf[i]->needle++]=(k053260.voice_out(i,0)+k053260.voice_out(i,1))>>1; } } } From 3512591fd18b7fd86fc9db2b192faf1263236a4d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 14:56:55 -0500 Subject: [PATCH 045/134] add effects to change virtual tempo --- doc/3-pattern/effects.md | 3 +++ src/engine/engine.cpp | 23 ++++++++++++++++++++++- src/engine/engine.h | 10 ++++++++++ src/engine/playback.cpp | 16 +++++++++++----- src/engine/vgmOps.cpp | 2 +- src/gui/gui.cpp | 2 +- src/gui/speed.cpp | 2 ++ 7 files changed, 50 insertions(+), 8 deletions(-) diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index 67ca51ad5..e87858431 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -70,6 +70,9 @@ not all chips support these effects. - `xxx` may be from `000` to `3FF`. - `F0xx`: **Set BPM.** changes tick rate according to beats per minute. range is `01` to `FF`. - --- +- `FDxx`: **Set virtual tempo numerator.** sets the virtual tempo's numerator to the effect value. +- `FExx`: **Set virtual tempo denominator.** sets the virtual tempo's denominator to the effect value. + - --- - `0Bxx`: **Jump to order.** `x` is the order to play after the current row. - this marks the end of a loop with order `x` as the loop start. - `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. `x` is the row at which to start playing the next pattern. diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ab8b22a99..c34a20e47 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -141,6 +141,10 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul return "FAxx: Fast volume slide (0y: down; x0: up)"; case 0xfc: return "FCxx: Note release"; + case 0xfd: + return "FDxx: Set virtual tempo numerator"; + case 0xfe: + return "FExx: Set virtual tempo denominator"; case 0xff: return "FFxx: Stop song"; default: @@ -1683,7 +1687,7 @@ void DivEngine::playSub(bool preserveDrift, int goalRow) { runMidiTime(cycles); } if (oldOrder!=curOrder) break; - if (ticks-((tempoAccum+curSubSong->virtualTempoN)/MAX(1,curSubSong->virtualTempoD))<1 && curRow>=goalRow) break; + if (ticks-((tempoAccum+virtualTempoN)/MAX(1,virtualTempoD))<1 && curRow>=goalRow) break; } for (int i=0; isetSkipRegisterWrites(false); if (goal>0 || goalRow>0) { @@ -2121,6 +2125,8 @@ void DivEngine::reset() { extValue=0; extValuePresent=0; speeds=curSubSong->speeds; + virtualTempoN=curSubSong->virtualTempoN; + virtualTempoD=curSubSong->virtualTempoD; firstTick=false; shallStop=false; shallStopSched=false; @@ -2368,6 +2374,21 @@ float DivEngine::getCurHz() { return divider; } +short DivEngine::getVirtualTempoN() { + return virtualTempoN; +} + +short DivEngine::getVirtualTempoD() { + return virtualTempoD; +} + +void DivEngine::virtualTempoChanged() { + BUSY_BEGIN; + virtualTempoN=curSubSong->virtualTempoN; + virtualTempoD=curSubSong->virtualTempoD; + BUSY_END; +} + int DivEngine::getTotalSeconds() { return totalSeconds; } diff --git a/src/engine/engine.h b/src/engine/engine.h index bc4d9926a..982361f23 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -442,6 +442,7 @@ class DivEngine { int curMidiTimePiece, curMidiTimeCode; unsigned char extValue, pendingMetroTick; DivGroovePattern speeds; + short virtualTempoN, virtualTempoD; short tempoAccum; DivStatusView view; DivHaltPositions haltOn; @@ -891,6 +892,13 @@ class DivEngine { // get current Hz float getCurHz(); + // get virtual tempo + short getVirtualTempoN(); + short getVirtualTempoD(); + + // tell engine about virtual tempo changes + void virtualTempoChanged(); + // get time int getTotalTicks(); // 1/1000000th of a second int getTotalSeconds(); @@ -1334,6 +1342,8 @@ class DivEngine { curMidiTimeCode(0), extValue(0), pendingMetroTick(0), + virtualTempoN(150), + virtualTempoD(150), tempoAccum(0), view(DIV_STATUS_NOTHING), haltOn(DIV_HALT_NONE), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 9f704414f..49341ce14 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -487,6 +487,12 @@ void DivEngine::processRow(int i, bool afterDelay) { if (effectVal>0) speeds.val[0]=effectVal; } break; + case 0xfd: // virtual tempo num + if (effectVal>0) virtualTempoN=effectVal; + break; + case 0xfe: // virtual tempo den + if (effectVal>0) virtualTempoD=effectVal; + break; case 0x0b: // change order if (changeOrd==-1 || song.jumpTreatment==0) { changeOrd=effectVal; @@ -1442,9 +1448,9 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { subticks=tickMult; if (stepPlay!=1) { - tempoAccum+=(skipping && curSubSong->virtualTempoNvirtualTempoD)?curSubSong->virtualTempoD:curSubSong->virtualTempoN; - while (tempoAccum>=curSubSong->virtualTempoD) { - tempoAccum-=curSubSong->virtualTempoD; + tempoAccum+=(skipping && virtualTempoN=virtualTempoD) { + tempoAccum-=virtualTempoD; if (--ticks<=0) { ret=endOfSong; if (shallStopSched) { @@ -1693,7 +1699,7 @@ void DivEngine::runMidiClock(int totalCycles) { if (hl<=0.0) hl=4.0; double timeBase=curSubSong->timeBase+1; double speedSum=0; - double vD=curSubSong->virtualTempoD; + double vD=virtualTempoD; for (int i=0; ivirtualTempoN/vD; + double bpm=((24.0*divider)/(timeBase*hl*speedSum))*(double)virtualTempoN/vD; if (bpm<1.0) bpm=1.0; int increment=got.rate*pow(2,MASTER_CLOCK_PREC)/(bpm); diff --git a/src/engine/vgmOps.cpp b/src/engine/vgmOps.cpp index 2d85601f8..a8a1fab74 100644 --- a/src/engine/vgmOps.cpp +++ b/src/engine/vgmOps.cpp @@ -2424,7 +2424,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p while (!done) { if (loopPos==-1) { if (loopOrder==curOrder && loopRow==curRow) { - if ((ticks-((tempoAccum+curSubSong->virtualTempoN)/curSubSong->virtualTempoD))<=0) { + if ((ticks-((tempoAccum+virtualTempoN)/virtualTempoD))<=0) { writeLoop=true; } } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 9d95d1595..d5fe08159 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4446,7 +4446,7 @@ bool FurnaceGUI::loop() { info="| Groove"; } - info+=fmt::sprintf(" @ %gHz (%g BPM) ",e->getCurHz(),calcBPM(e->getSpeeds(),e->getCurHz(),e->curSubSong->virtualTempoN,e->curSubSong->virtualTempoD)); + info+=fmt::sprintf(" @ %gHz (%g BPM) ",e->getCurHz(),calcBPM(e->getSpeeds(),e->getCurHz(),e->getVirtualTempoN(),e->getVirtualTempoD())); if (settings.orderRowsBase) { info+=fmt::sprintf("| Order %.2X/%.2X ",playOrder,e->curSubSong->ordersLen-1); diff --git a/src/gui/speed.cpp b/src/gui/speed.cpp index 66760d44f..df0265741 100644 --- a/src/gui/speed.cpp +++ b/src/gui/speed.cpp @@ -171,6 +171,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { if (ImGui::InputScalar("##VTempoN",ImGuiDataType_S16,&e->curSubSong->virtualTempoN,&_ONE,&_TEN)) { MARK_MODIFIED if (e->curSubSong->virtualTempoN<1) e->curSubSong->virtualTempoN=1; if (e->curSubSong->virtualTempoN>255) e->curSubSong->virtualTempoN=255; + e->virtualTempoChanged(); } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Numerator"); @@ -180,6 +181,7 @@ void FurnaceGUI::drawSpeed(bool asChild) { if (ImGui::InputScalar("##VTempoD",ImGuiDataType_S16,&e->curSubSong->virtualTempoD,&_ONE,&_TEN)) { MARK_MODIFIED if (e->curSubSong->virtualTempoD<1) e->curSubSong->virtualTempoD=1; if (e->curSubSong->virtualTempoD>255) e->curSubSong->virtualTempoD=255; + e->virtualTempoChanged(); } if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Denominator (set to base tempo)"); From 892ee12d915cc6acfb003d042fff4b20a36903b0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Mar 2024 20:16:29 -0500 Subject: [PATCH 046/134] implement YMF276-LLE core thanks LTVA --- extern/YMF276-LLE/fmopn2.c | 14 +- extern/YMF276-LLE/fmopn2.h | 3 + src/engine/platform/genesis.cpp | 318 +++++++++++++++++++++++++++++++- src/engine/platform/genesis.h | 8 + src/gui/settings.cpp | 4 +- 5 files changed, 337 insertions(+), 10 deletions(-) diff --git a/extern/YMF276-LLE/fmopn2.c b/extern/YMF276-LLE/fmopn2.c index 2a11366c1..546e8e4e3 100644 --- a/extern/YMF276-LLE/fmopn2.c +++ b/extern/YMF276-LLE/fmopn2.c @@ -2066,6 +2066,8 @@ void FMOPN2_YMF276Accumulator1(fmopn2_t *chip) int acc_l = 0; int acc_r = 0; + chip->osc_out = 0; + for (i = 0; i < 14; i++) accm += ((chip->ch_accm[i][1] >> 5) & 1) << i; if (chip->alg_output && !test_dac) @@ -2106,12 +2108,12 @@ void FMOPN2_YMF276Accumulator1(fmopn2_t *chip) chip->fsm_op1_sel_l3[0] = chip->fsm_op1_sel; if (sel_dac) - out |= chip->mode_dac_data[1] << 6; + chip->osc_out |= chip->mode_dac_data[1] << 6; if (sel_fm) - out |= accm; + chip->osc_out |= accm; - if (out & 0x2000) - out |= 0x1c000; + if (chip->osc_out & 0x2000) + chip->osc_out |= 0x1c000; for (i = 0; i < 2; i++) pan |= (((chip->chan_pan[i][1] >> 5) & 1) ^ 1) << i; @@ -2130,8 +2132,8 @@ void FMOPN2_YMF276Accumulator1(fmopn2_t *chip) acc_r = chip->ch_accm_r[1]; } - chip->ch_accm_l[0] = acc_l + ((pan & 2) != 0 ? out : 0); - chip->ch_accm_r[0] = acc_r + ((pan & 1) != 0 ? out : 0); + chip->ch_accm_l[0] = acc_l + ((pan & 2) != 0 ? chip->osc_out : 0); + chip->ch_accm_r[0] = acc_r + ((pan & 1) != 0 ? chip->osc_out : 0); } void FMOPN2_YMF276Accumulator2(fmopn2_t *chip) diff --git a/extern/YMF276-LLE/fmopn2.h b/extern/YMF276-LLE/fmopn2.h index f1ba12839..044859637 100644 --- a/extern/YMF276-LLE/fmopn2.h +++ b/extern/YMF276-LLE/fmopn2.h @@ -72,6 +72,9 @@ typedef struct { int out_l; int out_r; + // added by LTVA for Furnace tracker per-channel oscilloscopes! + int osc_out; + // io int write_addr_trig; int write_addr_trig_sync; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index f59cf1975..fc82709ac 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -143,7 +143,7 @@ void DivPlatformGenesis::acquire_nuked(short** buf, size_t len) { if (!writes.empty()) { QueuedWrite& w=writes.front(); if (w.addrOrVal) { - //logV("%.3x = %.2x",w.addr,w.val); + //logV("%.3x=%.2x",w.addr,w.val); OPN2_Write(&fm,0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; writes.pop_front(); @@ -289,8 +289,279 @@ void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) { } } +const unsigned char chanMap276[6]={ + 1, 5, 3, 0, 4, 2 +}; + +// thanks LTVA +void DivPlatformGenesis::acquire276OscSub() { + if (fm_276.fsm_cnt2[1]==0 && llePrevCycle!=0) { + lleCycle=0; + } + + llePrevCycle=fm_276.fsm_cnt2[1]; + + if (fm_276.flags==fmopn2_flags_ym3438) { + lleOscData[lleCycle/(24*2)]+=fm_276.out_l+fm_276.out_r; + + lleCycle++; + + if (lleCycle==(144*2)) { + lleCycle=0; + + for (int i=0; i<6; i++) { + if ((softPCM && ((chanMap276[i]!=5) || !chan[5].dacMode)) || (!softPCM)) { + oscBuf[chanMap276[i]]->data[oscBuf[chanMap276[i]]->needle++]=lleOscData[i]; + } + lleOscData[i]=0; + } + + if (softPCM && chan[5].dacMode) { + oscBuf[5]->data[oscBuf[5]->needle++]=chan[5].dacOutput<<6; + oscBuf[6]->data[oscBuf[6]->needle++]=chan[6].dacOutput<<6; + } else { + oscBuf[6]->data[oscBuf[6]->needle++]=0; + } + } + } else { + for (int i=0; i<6; i++) { + if (lleCycle==((7+i)*12)) { + oscBuf[i]->data[oscBuf[i]->needle]=(fm_276.osc_out>>1)*8; + } + } + + lleCycle++; + + if (lleCycle==(144*2)) { + lleCycle=0; + + for (int i=0; i<6; i++) { + oscBuf[i]->data[oscBuf[i]->needle]>>=1; + } + + if (softPCM && chan[5].dacMode) { + oscBuf[5]->data[oscBuf[5]->needle]=chan[5].dacOutput<<6; + oscBuf[6]->data[oscBuf[6]->needle]=chan[6].dacOutput<<6; + } else { + oscBuf[6]->data[oscBuf[6]->needle]=0; + } + + for (int i=0; i<7; i++) { + oscBuf[i]->needle++; + } + } + } +} + +// thanks LTVA void DivPlatformGenesis::acquire_nuked276(short** buf, size_t len) { - // TODO + for (size_t h=0; h>8)<<1),w.val); + was_reg_write=true; + + fm_276.input.address=w.addr<0x100?0:2; + fm_276.input.data=w.addr&0xff; + fm_276.input.wr=1; + FMOPN2_Clock(&fm_276,0); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + fm_276.input.wr=0; + FMOPN2_Clock(&fm_276,1); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + if (chipType==2) { + if (!o_bco && fm_276.o_bco) { + dacShifter=(dacShifter<<1)|fm_276.o_so; + + if (o_lro!=fm_276.o_lro) { + if (o_lro) + sample_l=dacShifter; + else + sample_r=dacShifter; + } + + o_lro=fm_276.o_lro; + } + o_bco=fm_276.o_bco; + } + + for (int c=0; c<17; c++) { + FMOPN2_Clock(&fm_276,0); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + FMOPN2_Clock(&fm_276,1); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + if (chipType==2) { + if (!o_bco && fm_276.o_bco) { + dacShifter=(dacShifter<<1)|fm_276.o_so; + + if (o_lro!=fm_276.o_lro) { + if (o_lro) + sample_l=dacShifter; + else + sample_r=dacShifter; + } + + o_lro=fm_276.o_lro; + } + o_bco=fm_276.o_bco; + } + } + + fm_276.input.address=w.addr<0x100?1:3; + fm_276.input.data=w.val; + fm_276.input.wr=1; + FMOPN2_Clock(&fm_276,0); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + fm_276.input.wr=0; + + acquire276OscSub(); + + FMOPN2_Clock(&fm_276,1); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + if (chipType==2) { + if (!o_bco && fm_276.o_bco) { + dacShifter=(dacShifter<<1)|fm_276.o_so; + + if (o_lro!=fm_276.o_lro) { + if (o_lro) + sample_l=dacShifter; + else + sample_r=dacShifter; + } + + o_lro=fm_276.o_lro; + } + o_bco=fm_276.o_bco; + } + + for (int c=0; c<83; c++) { + FMOPN2_Clock(&fm_276,0); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + FMOPN2_Clock(&fm_276,1); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + if (chipType==2) { + if (!o_bco && fm_276.o_bco) { + dacShifter=(dacShifter<<1)|fm_276.o_so; + + if (o_lro!=fm_276.o_lro) { + if (o_lro) { + sample_l=dacShifter; + } else { + sample_r=dacShifter; + } + } + + o_lro=fm_276.o_lro; + } + o_bco=fm_276.o_bco; + } + } + + regPool[w.addr&0x1ff]=w.val; + writes.pop_front(); + + if (dacWrite>=0) { + if (!canWriteDAC) { + canWriteDAC=true; + } else { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + canWriteDAC=writes.empty(); + } + } + } else { + w.addrOrVal=true; + } + } else { + canWriteDAC=true; + if (dacWrite>=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } + flushFirst=false; + } + + for (int j=0; j<(was_reg_write?(144-83-19):144); j++) { + FMOPN2_Clock(&fm_276,0); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + FMOPN2_Clock(&fm_276,1); + sum_l+=fm_276.out_l; + sum_r+=fm_276.out_r; + + acquire276OscSub(); + + if (chipType==2) { + if (!o_bco && fm_276.o_bco) { + dacShifter=(dacShifter<<1)|fm_276.o_so; + + if (o_lro!=fm_276.o_lro) { + if (o_lro) + sample_l=dacShifter; + else + sample_r=dacShifter; + } + + o_lro=fm_276.o_lro; + } + o_bco=fm_276.o_bco; + } + } + + if (chipType==2) { + buf[0][h]=sample_l; + buf[1][h]=sample_r; + } else { + buf[0][h]=(sum_l*3)>>2; + buf[1][h]=(sum_r*3)>>2; + } + } } void DivPlatformGenesis::acquire(short** buf, size_t len) { @@ -1333,7 +1604,48 @@ void DivPlatformGenesis::reset() { writes.clear(); memset(regPool,0,512); if (useYMFM==2) { + dacShifter=0; + o_bco=0; + o_lro=0; + + lleCycle=0; + llePrevCycle=0; + + for (int i=0; i<6; i++) { + lleOscData[i]=0; + } + memset(&fm_276,0,sizeof(fmopn2_t)); + + fm_276.input.cs=1; + fm_276.input.rd=0; + fm_276.input.wr=0; + fm_276.input.address=0; + fm_276.input.data=0; + + if (chipType==2) { + fm_276.flags=0; + } else { + fm_276.flags=fmopn2_flags_ym3438; + } + + fm_276.input.ic=0; + for (int i=0; i<288; i++) { + FMOPN2_Clock(&fm_276,0); + FMOPN2_Clock(&fm_276,1); + } + + fm_276.input.ic=1; + for (int i=0; i<288*2; i++) { + FMOPN2_Clock(&fm_276,0); + FMOPN2_Clock(&fm_276,1); + } + + fm_276.input.ic=0; + for (int i=0; i<288*2; i++) { + FMOPN2_Clock(&fm_276,0); + FMOPN2_Clock(&fm_276,1); + } } else if (useYMFM==1) { fm_ymfm->reset(); } @@ -1474,6 +1786,8 @@ void DivPlatformGenesis::setFlags(const DivConfig& flags) { fm_ymfm=new ymfm::ym3438(iface); } rate=chipClock/144; + } else if (useYMFM==2) { + rate=chipClock/144; } else { rate=chipClock/36; } diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index a24cabb52..76b3e57ef 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -22,7 +22,9 @@ #include "fmshared_OPN.h" #include "sound/ymfm/ymfm_opn.h" +extern "C" { #include "../../../extern/YMF276-LLE/fmopn2.h" +} class DivYM2612Interface: public ymfm::ymfm_interface { int setA, setB; @@ -89,6 +91,11 @@ class DivPlatformGenesis: public DivPlatformOPN { unsigned char useYMFM; unsigned char chipType; short dacWrite; + + int lleCycle; + int llePrevCycle; + int lleOscData[6]; + int dacShifter, o_lro, o_bco; unsigned char dacVolTable[128]; @@ -97,6 +104,7 @@ class DivPlatformGenesis: public DivPlatformOPN { inline void processDAC(int iRate); inline void commitState(int ch, DivInstrument* ins); + void acquire276OscSub(); void acquire_nuked(short** buf, size_t len); void acquire_nuked276(short** buf, size_t len); void acquire_ymfm(short** buf, size_t len); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 6d7d11d69..8fdd1733f 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1541,10 +1541,10 @@ void FurnaceGUI::drawSettings() { ImGui::Text("YM2612"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2)) settingsChanged=true; + if (ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,3)) settingsChanged=true; ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,2)) settingsChanged=true; + if (ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,3)) settingsChanged=true; ImGui::TableNextRow(); ImGui::TableNextColumn(); From f3705fb43567c79ae7b2c8de93b5363bf07fe1c1 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Wed, 10 Jan 2024 11:17:36 +0700 Subject: [PATCH 047/134] WIP add GBA system --- CMakeLists.txt | 1 + src/engine/dispatchContainer.cpp | 4 + src/engine/engine.cpp | 3 +- src/engine/instrument.cpp | 4 + src/engine/instrument.h | 6 +- src/engine/platform/gb.cpp | 88 ++++-- src/engine/platform/gb.h | 4 + src/engine/platform/gbadma.cpp | 445 +++++++++++++++++++++++++++++ src/engine/platform/gbadma.h | 83 ++++++ src/engine/platform/sound/gb/apu.c | 46 ++- src/engine/platform/sound/gb/apu.h | 5 +- src/engine/platform/sound/gb/gb.h | 1 + src/engine/song.h | 1 + src/engine/sysDef.cpp | 10 + src/gui/doAction.cpp | 3 +- src/gui/gui.h | 1 + src/gui/guiConst.cpp | 4 + src/gui/insEdit.cpp | 23 +- src/gui/presets.cpp | 10 + src/gui/sampleEdit.cpp | 14 + src/gui/settings.cpp | 1 + src/gui/sysConf.cpp | 40 +++ 22 files changed, 748 insertions(+), 49 deletions(-) create mode 100644 src/engine/platform/gbadma.cpp create mode 100644 src/engine/platform/gbadma.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 581e1c2de..87c684e02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -717,6 +717,7 @@ src/engine/platform/c140.cpp src/engine/platform/esfm.cpp src/engine/platform/powernoise.cpp src/engine/platform/dave.cpp +src/engine/platform/gbadma.cpp src/engine/platform/pcmdac.cpp src/engine/platform/dummy.cpp diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 7146e90c6..420876a8e 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -81,6 +81,7 @@ #include "platform/k053260.h" #include "platform/ted.h" #include "platform/c140.h" +#include "platform/gbadma.h" #include "platform/pcmdac.h" #include "platform/esfm.h" #include "platform/powernoise.h" @@ -644,6 +645,9 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do dispatch=new DivPlatformC140; ((DivPlatformC140*)dispatch)->set219(true); break; + case DIV_SYSTEM_GBA_DMA: + dispatch=new DivPlatformGBADMA; + break; case DIV_SYSTEM_PCM_DAC: dispatch=new DivPlatformPCMDAC; break; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index c34a20e47..fabb26ac3 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -982,7 +982,8 @@ void DivEngine::delUnusedSamples() { i->type==DIV_INS_GA20 || i->type==DIV_INS_K053260 || i->type==DIV_INS_C140 || - i->type==DIV_INS_C219) { + i->type==DIV_INS_C219 || + i->type==DIV_INS_GBA_DMA) { if (i->amiga.initSample>=0 && i->amiga.initSampleamiga.initSample]=true; } diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 8ad21b100..e21f406e7 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -1064,6 +1064,10 @@ void DivInstrument::putInsData2(SafeWriter* w, bool fui, const DivSong* song, bo break; case DIV_INS_DAVE: break; + case DIV_INS_GBA_DMA: + featureSM=true; + featureSL=true; + break; case DIV_INS_MAX: break; case DIV_INS_NULL: diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 714adeea5..5e1822e46 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -89,6 +89,7 @@ enum DivInstrumentType: unsigned short { DIV_INS_POWERNOISE=56, DIV_INS_POWERNOISE_SLOPE=57, DIV_INS_DAVE=58, + DIV_INS_GBA_DMA=59, DIV_INS_MAX, DIV_INS_NULL }; @@ -378,7 +379,7 @@ struct DivInstrumentSTD { struct DivInstrumentGB { unsigned char envVol, envDir, envLen, soundLen, hwSeqLen; - bool softEnv, alwaysInit; + bool softEnv, alwaysInit, doubleWave; // TODO file save/load of doubleWave enum HWSeqCommands: unsigned char { DIV_GB_HWCMD_ENVELOPE=0, DIV_GB_HWCMD_SWEEP, @@ -406,7 +407,8 @@ struct DivInstrumentGB { soundLen(64), hwSeqLen(0), softEnv(false), - alwaysInit(false) { + alwaysInit(false), + doubleWave(false) { memset(hwSeq,0,256*sizeof(HWSeqCommandGB)); } }; diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 3ae02dcf9..2ca894633 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -64,13 +64,15 @@ const char** DivPlatformGB::getRegisterSheet() { void DivPlatformGB::acquire(short** buf, size_t len) { for (size_t i=0; iapu_output.final_sample.left; buf[1][i]=gb->apu_output.final_sample.right; @@ -81,17 +83,41 @@ void DivPlatformGB::acquire(short** buf, size_t len) { } void DivPlatformGB::updateWave() { - rWrite(0x1a,0); - for (int i=0; i<16; i++) { - int nibble1=ws.output[((i<<1)+antiClickWavePos)&31]; - int nibble2=ws.output[((1+(i<<1))+antiClickWavePos)&31]; - if (invertWave) { - nibble1^=15; - nibble2^=15; + if (doubleWave) { + rWrite(0x1a,0x40); // select 1 -> write to bank 0 + for (int i=0; i<16; i++) { + int nibble1=ws.output[((i<<1)+antiClickWavePos)&63]; + int nibble2=ws.output[((1+(i<<1))+antiClickWavePos)&63]; + if (invertWave) { + nibble1^=15; + nibble2^=15; + } + rWrite(0x30+i,(nibble1<<4)|nibble2); } - rWrite(0x30+i,(nibble1<<4)|nibble2); + rWrite(0x1a,0); // select 0 -> write to bank 1 + for (int i=0; i<16; i++) { + int nibble1=ws.output[((32+(i<<1))+antiClickWavePos)&63]; + int nibble2=ws.output[((33+(i<<1))+antiClickWavePos)&63]; + if (invertWave) { + nibble1^=15; + nibble2^=15; + } + rWrite(0x30+i,(nibble1<<4)|nibble2); + } + antiClickWavePos&=63; + } else { + rWrite(0x1a,extendWave?0x40:0); + for (int i=0; i<16; i++) { + int nibble1=ws.output[((i<<1)+antiClickWavePos)&31]; + int nibble2=ws.output[((1+(i<<1))+antiClickWavePos)&31]; + if (invertWave) { + nibble1^=15; + nibble2^=15; + } + rWrite(0x30+i,(nibble1<<4)|nibble2); + } + antiClickWavePos&=31; } - antiClickWavePos&=31; } static unsigned char chanMuteMask[4]={ @@ -112,6 +138,13 @@ static unsigned char gbVolMap[16]={ 0x20, 0x20, 0x20, 0x20 }; +static unsigned char gbVolMapEx[16]={ + 0x00, 0x00, 0x00, 0x00, + 0x60, 0x60, 0x60, 0x60, + 0x40, 0x40, 0x40, 0x40, + 0xa0, 0xa0, 0x20, 0x20 +}; + static unsigned char noiseTable[256]={ 0, 0xf7, 0xf6, 0xf5, 0xf4, @@ -156,7 +189,7 @@ void DivPlatformGB::tick(bool sysTick) { if (chan[i].outVol<0) chan[i].outVol=0; if (i==2) { - rWrite(16+i*5+2,gbVolMap[chan[i].outVol]); + rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[i].outVol]); chan[i].soundLen=64; } else { chan[i].envLen=0; @@ -188,7 +221,7 @@ void DivPlatformGB::tick(bool sysTick) { rWrite(16+i*5+1,((chan[i].duty&3)<<6)|(63-(chan[i].soundLen&63))); } else if (!chan[i].softEnv) { if (parent->song.waveDutyIsVol) { - rWrite(16+i*5+2,gbVolMap[(chan[i].std.duty.val&3)<<2]); + rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[(chan[i].std.duty.val&3)<<2]); } } } @@ -301,8 +334,8 @@ void DivPlatformGB::tick(bool sysTick) { if (chan[i].keyOn) { if (i==2) { // wave rWrite(16+i*5,0x00); - rWrite(16+i*5,0x80); - rWrite(16+i*5+2,gbVolMap[chan[i].outVol]); + rWrite(16+i*5,doubleWave?0xa0:0x80); + rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[i].outVol]); } else { rWrite(16+i*5+1,((chan[i].duty&3)<<6)|(63-(chan[i].soundLen&63))); rWrite(16+i*5+2,((chan[i].envVol<<4))|(chan[i].envLen&7)|((chan[i].envDir&1)<<3)); @@ -379,11 +412,16 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].softEnv=ins->gb.softEnv; chan[c.chan].macroInit(ins); if (c.chan==2) { + doubleWave=extendWave&&ins->gb.doubleWave; if (chan[c.chan].wave<0) { chan[c.chan].wave=0; ws.changeWave1(chan[c.chan].wave); } - ws.init(ins,32,15,chan[c.chan].insChanged); + ws.init(ins,doubleWave?64:32,15,chan[c.chan].insChanged); + if (doubleWave!=lastDoubleWave) { + ws.changeWave1(chan[c.chan].wave); + lastDoubleWave=doubleWave; + } } if ((chan[c.chan].insChanged || ins->gb.alwaysInit) && !chan[c.chan].softEnv) { if (!chan[c.chan].soManyHacksToMakeItDefleCompatible && c.chan!=2) { @@ -447,7 +485,7 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].vol=c.value; chan[c.chan].outVol=c.value; if (c.chan==2) { - rWrite(16+c.chan*5+2,gbVolMap[chan[c.chan].outVol]); + rWrite(16+c.chan*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[c.chan].outVol]); } if (!chan[c.chan].softEnv) { chan[c.chan].envVol=chan[c.chan].vol; @@ -619,6 +657,8 @@ void DivPlatformGB::reset() { antiClickPeriodCount=0; antiClickWavePos=0; + doubleWave=false; + lastDoubleWave=false; } int DivPlatformGB::getPortaFloor(int ch) { @@ -665,6 +705,8 @@ void DivPlatformGB::poke(std::vector& wlist) { void DivPlatformGB::setFlags(const DivConfig& flags) { antiClickEnabled=!flags.getBool("noAntiClick",false); + extendWave=flags.getBool("extendWave",false); + outDepth=flags.getInt("dacDepth",9); switch (flags.getInt("chipType",0)) { case 0: model=GB_MODEL_DMG_B; @@ -676,7 +718,7 @@ void DivPlatformGB::setFlags(const DivConfig& flags) { model=GB_MODEL_CGB_E; break; case 3: - model=GB_MODEL_AGB; + model=extendWave?GB_MODEL_AGB_NATIVE:GB_MODEL_AGB; break; } invertWave=flags.getBool("invertWave",true); @@ -684,7 +726,7 @@ void DivPlatformGB::setFlags(const DivConfig& flags) { chipClock=4194304; CHECK_CUSTOM_CLOCK; - rate=chipClock/16; + rate=chipClock>>(outDepth-2); for (int i=0; i<4; i++) { oscBuf[i]->rate=rate; } diff --git a/src/engine/platform/gb.h b/src/engine/platform/gb.h index 6fe094020..5bd445b7f 100644 --- a/src/engine/platform/gb.h +++ b/src/engine/platform/gb.h @@ -59,6 +59,10 @@ class DivPlatformGB: public DivDispatch { bool antiClickEnabled; bool invertWave; bool enoughAlready; + bool extendWave; + bool doubleWave; + bool lastDoubleWave; + int outDepth; unsigned char lastPan; DivWaveSynth ws; struct QueuedWrite { diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp new file mode 100644 index 000000000..da4e95403 --- /dev/null +++ b/src/engine/platform/gbadma.cpp @@ -0,0 +1,445 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#define _USE_MATH_DEFINES +#include "gbadma.h" +#include "../engine.h" +#include "../filter.h" +#include + +#define CHIP_DIVIDER 16 + +void DivPlatformGBADMA::acquire(short** buf, size_t len) { + // HLE for now + int outL[2]={0,0}; + int outR[2]={0,0}; + for (size_t h=0; h=0 && chan[i].samplesong.sampleLen))) { + chan[i].audSub+=(1<=chan[i].freq) { + int posInc=chan[i].audSub/chan[i].freq; + chan[i].audSub-=chan[i].freq*posInc; + chan[i].audPos+=posInc; + chan[i].dmaCount+=posInc; + if (chan[i].dmaCount>=16 && chan[i].audPos>=(int)chan[i].audLen) { + chan[i].audPos%=chan[i].audLen; + } + chan[i].dmaCount&=15; + } + } else { + DivSample* s=parent->getSample(chan[i].sample); + if (s->samples>0) { + if (chan[i].audPos>=0 && chan[i].audPos<(int)s->samples) { + chan[i].audDat=s->data8[chan[i].audPos]; + } else { + chan[i].audDat=0; + } + newSamp=true; + if (chan[i].audSub>=chan[i].freq) { + int posInc=chan[i].audSub/chan[i].freq; + chan[i].audSub-=chan[i].freq*posInc; + chan[i].audPos+=posInc; + chan[i].dmaCount+=posInc; + if (s->isLoopable()) { + if (chan[i].dmaCount>=16 && chan[i].audPos>=s->loopEnd) { + int loopPos=chan[i].audPos-s->loopStart; + chan[i].audPos=(loopPos%(s->loopEnd-s->loopStart))+s->loopStart; + } + } else if (chan[i].audPos>=(int)s->samples) { + chan[i].sample=-1; + } + chan[i].dmaCount&=15; + } + } else { + chan[i].sample=-1; + chan[i].audSub=0; + chan[i].audPos=0; + } + } + } else { + chan[i].audDat=0; + } + if (!isMuted[i] && newSamp) { + int out=chan[i].audDat*(chan[i].vol*chan[i].envVol/2)<<1; + outL[i]=(chan[i].pan&2)?out:0; + outR[i]=(chan[i].pan&1)?out:0; + } + oscBuf[i]->data[oscBuf[i]->needle++]=(short)((outL[i]+outR[i])<<5); + } + int l=outL[0]+outL[1]; + int r=outR[0]+outR[1]; + l=(l>>(10-outDepth))<<(16-outDepth); + r=(r>>(10-outDepth))<<(16-outDepth); + if (l<-32768) l=-32768; + if (l>32767) l=32767; + if (r<-32768) r=-32768; + if (r>32767) r=32767; + buf[0][h]=(short)l; + buf[1][h]=(short)r; + } +} + +void DivPlatformGBADMA::tick(bool sysTick) { + for (int i=0; i<2; i++) { + DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_AMIGA); + chan[i].std.next(); + if (chan[i].std.vol.had) { + chan[i].envVol=chan[i].std.vol.val; + if (ins->type==DIV_INS_AMIGA) chan[i].envVol/=32; + } + if (NEW_ARP_STRAT) { + chan[i].handleArp(); + } else if (chan[i].std.arp.had) { + if (!chan[i].inPorta) { + chan[i].baseFreq=NOTE_PERIODIC(parent->calcArp(chan[i].note,chan[i].std.arp.val)); + } + chan[i].freqChanged=true; + } + if (chan[i].useWave && chan[i].std.wave.had) { + if (chan[i].wave!=chan[i].std.wave.val || chan[i].ws.activeChanged()) { + chan[i].wave=chan[i].std.wave.val; + chan[i].ws.changeWave1(chan[i].wave); + if (!chan[i].keyOff) chan[i].keyOn=true; + } + } + if (chan[i].useWave && chan[i].active) { + chan[i].ws.tick(); + } + if (chan[i].std.pitch.had) { + if (chan[i].std.pitch.mode) { + chan[i].pitch2+=chan[i].std.pitch.val; + CLAMP_VAR(chan[i].pitch2,-32768,32767); + } else { + chan[i].pitch2=chan[i].std.pitch.val; + } + chan[i].freqChanged=true; + } + if (ins->type==DIV_INS_AMIGA) { + if (chan[0].std.panL.had) { + chan[0].pan=(chan[0].pan&~2)|(chan[0].std.panL.val>0?2:0); + } + if (chan[0].std.panR.had) { + chan[0].pan=(chan[0].pan&~1)|(chan[0].std.panR.val>0?1:0); + } + } else { + if (chan[i].std.panL.had) { + chan[i].pan=chan[i].std.panL.val&3; + } + } + if (chan[i].std.phaseReset.had && chan[i].std.phaseReset.val==1) { + chan[i].audPos=0; + } + if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { + double off=1.0; + if (!chan[i].useWave && chan[i].sample>=0 && chan[i].samplesong.sampleLen) { + DivSample* s=parent->getSample(chan[i].sample); + off=(s->centerRate>=1)?(8363.0/(double)s->centerRate):1.0; + } + chan[i].freq=off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER); + + // emulate prescaler rounding + if (chan[i].freq<65536) { + if (chan[i].freq<1) chan[i].freq=1; + } else if (chan[i].freq<65536*64) { + chan[i].freq=chan[i].freq&~63; + } else if (chan[i].freq<65536*256) { + chan[i].freq=chan[i].freq&~255; + } else { + chan[i].freq=chan[i].freq&~1024; + if (chan[i].freq>65536*1024) chan[i].freq=65536*1024; + } + if (chan[i].keyOn) { + if (!chan[i].std.vol.had) { + chan[i].envVol=2; + } + chan[i].keyOn=false; + } + if (chan[i].keyOff) { + chan[i].keyOff=false; + } + chan[i].freqChanged=false; + } + } +} + +int DivPlatformGBADMA::dispatch(DivCommand c) { + switch (c.cmd) { + case DIV_CMD_NOTE_ON: { + DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); + if (ins->amiga.useWave) { + chan[c.chan].useWave=true; + chan[c.chan].audLen=ins->amiga.waveLen+1; + if (chan[c.chan].insChanged) { + if (chan[c.chan].wave<0) { + chan[c.chan].wave=0; + chan[c.chan].ws.setWidth(chan[c.chan].audLen); + chan[c.chan].ws.changeWave1(chan[c.chan].wave); + } + } + } else { + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(c.value); + c.value=ins->amiga.getFreq(c.value); + } + chan[c.chan].useWave=false; + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); + } + if (chan[c.chan].useWave || chan[c.chan].sample<0 || chan[c.chan].sample>=parent->song.sampleLen) { + chan[c.chan].sample=-1; + } + if (chan[c.chan].setPos) { + chan[c.chan].setPos=false; + } else { + chan[c.chan].audPos=0; + } + chan[c.chan].audSub=0; + chan[c.chan].audDat=0; + chan[c.chan].dmaCount=0; + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + } + chan[c.chan].active=true; + chan[c.chan].keyOn=true; + chan[c.chan].macroInit(ins); + if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { + chan[c.chan].envVol=2; + } + if (chan[c.chan].useWave) { + chan[c.chan].ws.init(ins,chan[c.chan].audLen,255,chan[c.chan].insChanged); + } + chan[c.chan].insChanged=false; + break; + } + case DIV_CMD_NOTE_OFF: + chan[c.chan].sample=-1; + chan[c.chan].active=false; + chan[c.chan].keyOff=true; + chan[c.chan].macroInit(NULL); + break; + case DIV_CMD_NOTE_OFF_ENV: + case DIV_CMD_ENV_RELEASE: + chan[c.chan].std.release(); + break; + case DIV_CMD_INSTRUMENT: + if (chan[c.chan].ins!=c.value || c.value2==1) { + chan[c.chan].ins=c.value; + chan[c.chan].insChanged=true; + } + break; + case DIV_CMD_VOLUME: + if (chan[c.chan].vol!=c.value) { + chan[c.chan].vol=c.value; + if (!chan[c.chan].std.vol.has) { + chan[c.chan].envVol=2; + } + } + break; + case DIV_CMD_GET_VOLUME: + return chan[c.chan].vol; + break; + case DIV_CMD_PANNING: + chan[c.chan].pan=0; + chan[c.chan].pan|=(c.value>0)?2:0; + chan[c.chan].pan|=(c.value2>0)?1:0; + break; + case DIV_CMD_PITCH: + chan[c.chan].pitch=c.value; + chan[c.chan].freqChanged=true; + break; + case DIV_CMD_WAVE: + if (!chan[c.chan].useWave) break; + chan[c.chan].wave=c.value; + chan[c.chan].keyOn=true; + chan[c.chan].ws.changeWave1(chan[c.chan].wave); + break; + case DIV_CMD_NOTE_PORTA: { + DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); + chan[c.chan].sample=ins->amiga.getSample(c.value2); + int destFreq=NOTE_PERIODIC(c.value2); + bool return2=false; + if (destFreq>chan[c.chan].baseFreq) { + chan[c.chan].baseFreq+=c.value; + if (chan[c.chan].baseFreq>=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } else { + chan[c.chan].baseFreq-=c.value; + if (chan[c.chan].baseFreq<=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } + chan[c.chan].freqChanged=true; + if (return2) { + chan[c.chan].inPorta=false; + return 2; + } + break; + } + case DIV_CMD_LEGATO: { + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + break; + } + case DIV_CMD_PRE_PORTA: + if (chan[c.chan].active && c.value2) { + if (parent->song.resetMacroOnPorta) chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA)); + } + chan[c.chan].inPorta=c.value; + break; + case DIV_CMD_SAMPLE_POS: + if (chan[c.chan].useWave) break; + chan[c.chan].audPos=c.value; + chan[c.chan].setPos=true; + break; + case DIV_CMD_GET_VOLMAX: + return 2; + break; + case DIV_CMD_MACRO_OFF: + chan[c.chan].std.mask(c.value,true); + break; + case DIV_CMD_MACRO_ON: + chan[c.chan].std.mask(c.value,false); + break; + case DIV_ALWAYS_SET_VOLUME: + return 1; + break; + default: + break; + } + return 1; +} + +void DivPlatformGBADMA::muteChannel(int ch, bool mute) { + isMuted[ch]=mute; +} + +void DivPlatformGBADMA::forceIns() { + for (int i=0; i<2; i++) { + chan[i].insChanged=true; + chan[i].freqChanged=true; + chan[i].audPos=0; + chan[i].sample=-1; + } +} + +void* DivPlatformGBADMA::getChanState(int ch) { + return &chan; +} + +DivDispatchOscBuffer* DivPlatformGBADMA::getOscBuffer(int ch) { + return oscBuf[ch]; +} + +void DivPlatformGBADMA::reset() { + for (int i=0; i<2; i++) { + chan[i]=DivPlatformGBADMA::Channel(); + chan[i].std.setEngine(parent); + chan[i].ws.setEngine(parent); + chan[i].ws.init(NULL,32,255); + chan[i].audDat=0; + } +} + +int DivPlatformGBADMA::getOutputCount() { + return 2; +} + +DivMacroInt* DivPlatformGBADMA::getChanMacroInt(int ch) { + return &chan[ch].std; +} + +unsigned short DivPlatformGBADMA::getPan(int ch) { + return ((chan[ch].pan&2)<<7)|(chan[ch].pan&1); +} + +DivSamplePos DivPlatformGBADMA::getSamplePos(int ch) { + if (ch>=2) return DivSamplePos(); + return DivSamplePos( + chan[ch].sample, + chan[ch].audPos, + chan[ch].freq + ); +} + +void DivPlatformGBADMA::notifyInsChange(int ins) { + for (int i=0; i<2; i++) { + if (chan[i].ins==ins) { + chan[i].insChanged=true; + } + } +} + +void DivPlatformGBADMA::notifyWaveChange(int wave) { + for (int i=0; i<2; i++) { + if (chan[i].useWave && chan[i].wave==wave) { + chan[i].ws.changeWave1(wave); + } + } +} + +void DivPlatformGBADMA::notifyInsDeletion(void* ins) { + for (int i=0; i<2; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + +void DivPlatformGBADMA::setFlags(const DivConfig& flags) { + outDepth=flags.getInt("dacDepth",9); + chipClock=1<<24; + CHECK_CUSTOM_CLOCK; + rate=chipClock>>outDepth; + for (int i=0; i<2; i++) { + oscBuf[i]->rate=rate; + } +} + +int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { + parent=p; + dumpWrites=false; + skipRegisterWrites=false; + for (int i=0; i<2; i++) { + isMuted[i]=false; + oscBuf[i]=new DivDispatchOscBuffer; + } + setFlags(flags); + reset(); + return 2; +} + +void DivPlatformGBADMA::quit() { + for (int i=0; i<2; i++) { + delete oscBuf[i]; + } +} diff --git a/src/engine/platform/gbadma.h b/src/engine/platform/gbadma.h new file mode 100644 index 000000000..dd739b1d5 --- /dev/null +++ b/src/engine/platform/gbadma.h @@ -0,0 +1,83 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _GBA_DMA_H +#define _GBA_DMA_H + +#include "../dispatch.h" +#include "../waveSynth.h" + +class DivPlatformGBADMA: public DivDispatch { + struct Channel: public SharedChannel { + unsigned int audLoc; + unsigned short audLen; + int audDat; + int audPos; + int audSub; + int dmaCount; + int sample, wave; + int pan; + bool useWave, setPos; + int envVol; + DivWaveSynth ws; + Channel(): + SharedChannel(2), + audLoc(0), + audLen(0), + audDat(0), + audPos(0), + audSub(0), + dmaCount(0), + sample(-1), + wave(-1), + pan(3), + useWave(false), + setPos(false), + envVol(2) {} + }; + Channel chan[2]; + DivDispatchOscBuffer* oscBuf[2]; + bool isMuted[2]; + int outDepth; + + friend void putDispatchChip(void*,int); + friend void putDispatchChan(void*,int,int); + + public: + void acquire(short** buf, size_t len); + int dispatch(DivCommand c); + void* getChanState(int chan); + DivDispatchOscBuffer* getOscBuffer(int chan); + void reset(); + void forceIns(); + void tick(bool sysTick=true); + void muteChannel(int ch, bool mute); + int getOutputCount(); + DivMacroInt* getChanMacroInt(int ch); + unsigned short getPan(int chan); + DivSamplePos getSamplePos(int ch); + void setFlags(const DivConfig& flags); + void notifyInsChange(int ins); + void notifyWaveChange(int wave); + void notifyInsDeletion(void* ins); + int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); + void quit(); +}; + +#endif diff --git a/src/engine/platform/sound/gb/apu.c b/src/engine/platform/sound/gb/apu.c index 8b29f72de..e4be5e99a 100644 --- a/src/engine/platform/sound/gb/apu.c +++ b/src/engine/platform/sound/gb/apu.c @@ -668,15 +668,17 @@ void GB_apu_run(GB_gameboy_t *gb) if (gb->apu.is_active[GB_WAVE]) { uint8_t cycles_left = cycles; while (unlikely(cycles_left > gb->apu.wave_channel.sample_countdown)) { + uint8_t base = (!gb->apu.wave_channel.double_length && gb->apu.wave_channel.bank_select) ? 32 : 0; cycles_left -= gb->apu.wave_channel.sample_countdown + 1; gb->apu.wave_channel.sample_countdown = gb->apu.wave_channel.sample_length ^ 0x7FF; gb->apu.wave_channel.current_sample_index++; - gb->apu.wave_channel.current_sample_index &= 0x1F; + gb->apu.wave_channel.current_sample_index &= gb->apu.wave_channel.double_length ? 0x3F : 0x1F; gb->apu.wave_channel.current_sample = - gb->apu.wave_channel.wave_form[gb->apu.wave_channel.current_sample_index]; - update_sample(gb, GB_WAVE, - gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, - cycles - cycles_left); + gb->apu.wave_channel.wave_form[base + gb->apu.wave_channel.current_sample_index]; + int8_t sample = gb->apu.wave_channel.force_3 ? + (gb->apu.wave_channel.current_sample * 3) >> 2 : + gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift; + update_sample(gb, GB_WAVE, sample, cycles - cycles_left); gb->apu.wave_channel.wave_form_just_read = true; } if (cycles_left) { @@ -738,8 +740,10 @@ void GB_apu_init(GB_gameboy_t *gb) memset(&gb->apu, 0, sizeof(gb->apu)); /* Restore the wave form */ for (unsigned reg = GB_IO_WAV_START; reg <= GB_IO_WAV_END; reg++) { - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2] = gb->io_registers[reg] >> 4; - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 1] = gb->io_registers[reg] & 0xF; + gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2] = gb->io_registers[reg] >> 4; + gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 1] = gb->io_registers[reg] & 0xF; + gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 32] = gb->io_registers[reg] >> 4; + gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 33] = gb->io_registers[reg] & 0xF; } gb->apu.lf_div = 1; /* APU glitch: When turning the APU on while DIV's bit 4 (or 5 in double speed mode) is on, @@ -1160,14 +1164,24 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) gb->apu.is_active[GB_WAVE] = false; update_sample(gb, GB_WAVE, 0, 0); } + if (gb->model==GB_MODEL_AGB_NATIVE) { + gb->apu.wave_channel.bank_select = value & 0x40; + gb->apu.wave_channel.double_length = value & 0x20; + } break; case GB_IO_NR31: gb->apu.wave_channel.pulse_length = (0x100 - value); break; case GB_IO_NR32: gb->apu.wave_channel.shift = (uint8_t[]){4, 0, 1, 2}[(value >> 5) & 3]; + if (gb->model==GB_MODEL_AGB_NATIVE) { + gb->apu.wave_channel.force_3 = value & 0x80; + } if (gb->apu.is_active[GB_WAVE]) { - update_sample(gb, GB_WAVE, gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, 0); + int8_t sample = gb->apu.wave_channel.force_3 ? + (gb->apu.wave_channel.current_sample * 3) >> 2 : + gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift; + update_sample(gb, GB_WAVE, sample, 0); } break; case GB_IO_NR33: @@ -1209,9 +1223,10 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) } if (!gb->apu.is_active[GB_WAVE]) { gb->apu.is_active[GB_WAVE] = true; - update_sample(gb, GB_WAVE, - gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift, - 0); + int8_t sample = gb->apu.wave_channel.force_3 ? + (gb->apu.wave_channel.current_sample * 3) >> 2 : + gb->apu.wave_channel.current_sample >> gb->apu.wave_channel.shift; + update_sample(gb, GB_WAVE, sample, 0); } gb->apu.wave_channel.sample_countdown = (gb->apu.wave_channel.sample_length ^ 0x7FF) + 3; gb->apu.wave_channel.current_sample_index = 0; @@ -1411,8 +1426,13 @@ void GB_apu_write(GB_gameboy_t *gb, uint8_t reg, uint8_t value) default: if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END) { - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2] = value >> 4; - gb->apu.wave_channel.wave_form[(reg - GB_IO_WAV_START) * 2 + 1] = value & 0xF; + uint8_t base = 0; + if (gb->model == GB_MODEL_AGB_NATIVE && + (!gb->apu.global_enable || !gb->apu.wave_channel.bank_select)) { + base = 32; + } + gb->apu.wave_channel.wave_form[base + (reg - GB_IO_WAV_START) * 2] = value >> 4; + gb->apu.wave_channel.wave_form[base + (reg - GB_IO_WAV_START) * 2 + 1] = value & 0xF; } } gb->io_registers[reg] = value; diff --git a/src/engine/platform/sound/gb/apu.h b/src/engine/platform/sound/gb/apu.h index 3c07b46fe..6ba168f71 100644 --- a/src/engine/platform/sound/gb/apu.h +++ b/src/engine/platform/sound/gb/apu.h @@ -93,12 +93,15 @@ typedef struct uint8_t shift; // NR32 uint16_t sample_length; // NR33, NR34, in APU ticks bool length_enabled; // NR34 + bool double_length; // NR30 + bool bank_select; // NR30 + bool force_3; // NR32 uint16_t sample_countdown; // in APU ticks (Reloaded from sample_length, xorred $7FF) uint8_t current_sample_index; uint8_t current_sample; // Current sample before shifting. - int8_t wave_form[32]; + int8_t wave_form[64]; bool wave_form_just_read; } wave_channel; diff --git a/src/engine/platform/sound/gb/gb.h b/src/engine/platform/sound/gb/gb.h index ca3650852..7adb27599 100644 --- a/src/engine/platform/sound/gb/gb.h +++ b/src/engine/platform/sound/gb/gb.h @@ -114,6 +114,7 @@ typedef enum { // GB_MODEL_CGB_D = 0x204, GB_MODEL_CGB_E = 0x205, GB_MODEL_AGB = 0x206, + GB_MODEL_AGB_NATIVE = 0x226, } GB_model_t; enum { diff --git a/src/engine/song.h b/src/engine/song.h index 86674ee52..4756499bf 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -118,6 +118,7 @@ enum DivSystem { DIV_SYSTEM_T6W28, DIV_SYSTEM_K007232, DIV_SYSTEM_GA20, + DIV_SYSTEM_GBA_DMA, DIV_SYSTEM_PCM_DAC, DIV_SYSTEM_PONG, DIV_SYSTEM_DUMMY, diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index e33b17b1c..9680012f3 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2001,6 +2001,16 @@ void DivEngine::registerSystems() { }, {} ); + + sysDefs[DIV_SYSTEM_GBA_DMA]=new DivSysDef( + "Game Boy Advance DMA Sound", NULL, 0xfe, 0, 2, false, true, 0, false, 1U<type==DIV_INS_AMIGA || ins->type==DIV_INS_SNES) { + if (ins->type==DIV_INS_AMIGA || ins->type==DIV_INS_SNES || ins->type==DIV_INS_GBA_DMA) { + const char* useWaveText=ins->type==DIV_INS_AMIGA?"Use wavetable (Amiga/Generic DAC only)":"Use wavetable"; ImGui::BeginDisabled(ins->amiga.useNoteMap); - P(ImGui::Checkbox("Use wavetable (Amiga/SNES/Generic DAC only)",&ins->amiga.useWave)); + P(ImGui::Checkbox(useWaveText,&ins->amiga.useWave)); if (ins->amiga.useWave) { int len=ins->amiga.waveLen+1; int origLen=len; if (ImGui::InputInt("Width",&len,2,16)) { - if (ins->type==DIV_INS_SNES) { + if (ins->type==DIV_INS_SNES || ins->type==DIV_INS_GBA_DMA) { if (len<16) len=16; if (len>256) len=256; if (len>origLen) { @@ -5395,6 +5396,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_GB) if (ImGui::BeginTabItem("Game Boy")) { P(ImGui::Checkbox("Use software envelope",&ins->gb.softEnv)); P(ImGui::Checkbox("Initialize envelope on every note",&ins->gb.alwaysInit)); + P(ImGui::Checkbox("Double wave length (GBA only)",&ins->gb.doubleWave)); ImGui::BeginDisabled(ins->gb.softEnv); if (ImGui::BeginTable("GBParams",2)) { @@ -6021,7 +6023,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_GA20 || ins->type==DIV_INS_K053260 || ins->type==DIV_INS_C140 || - ins->type==DIV_INS_C219) { + ins->type==DIV_INS_C219 || + ins->type==DIV_INS_GBA_DMA) { insTabSample(ins); } if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("Namco 163")) { @@ -6456,6 +6459,7 @@ void FurnaceGUI::drawInsEdit() { } if (ins->type==DIV_INS_GB || (ins->type==DIV_INS_AMIGA && ins->amiga.useWave) || + (ins->type==DIV_INS_GBA_DMA && ins->amiga.useWave) || (ins->type==DIV_INS_X1_010 && !ins->amiga.useSample) || ins->type==DIV_INS_N163 || ins->type==DIV_INS_FDS || @@ -6500,6 +6504,7 @@ void FurnaceGUI::drawInsEdit() { wavePreviewHeight=255; break; case DIV_INS_AMIGA: + case DIV_INS_GBA_DMA: wavePreviewLen=ins->amiga.waveLen+1; wavePreviewHeight=255; break; @@ -6771,7 +6776,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_QSOUND) { volMax=16383; } - if (ins->type==DIV_INS_POKEMINI) { + if (ins->type==DIV_INS_POKEMINI || ins->type==DIV_INS_GBA_DMA) { volMax=2; } @@ -6830,7 +6835,7 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_PET || ins->type==DIV_INS_SEGAPCM || ins->type==DIV_INS_FM || ins->type==DIV_INS_K007232 || ins->type==DIV_INS_GA20 || ins->type==DIV_INS_SM8521 || ins->type==DIV_INS_PV1000 || ins->type==DIV_INS_K053260 || - ins->type==DIV_INS_C140) { + ins->type==DIV_INS_C140 || ins->type==DIV_INS_GBA_DMA) { dutyMax=0; } if (ins->type==DIV_INS_VBOY) { @@ -7045,7 +7050,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_VERA || ins->type==DIV_INS_ADPCMA || ins->type==DIV_INS_ADPCMB || - ins->type==DIV_INS_ESFM) { + ins->type==DIV_INS_ESFM || + ins->type==DIV_INS_GBA_DMA) { panMax=2; panSingle=true; } @@ -7201,7 +7207,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_ESFM || ins->type==DIV_INS_POWERNOISE || ins->type==DIV_INS_POWERNOISE_SLOPE || - ins->type==DIV_INS_DAVE) { + ins->type==DIV_INS_DAVE || + ins->type==DIV_INS_GBA_DMA) { macroList.push_back(FurnaceGUIMacroDesc("Phase Reset",&ins->std.phaseResetMacro,0,1,32,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } if (ex1Max>0) { diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 18a0ebdc9..2cf952ba0 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -130,6 +130,16 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_GB, 1.0f, 0, "") } ); + ENTRY( + "Game Boy Advance (no software mixing)", { + CH(DIV_SYSTEM_GB, 1.0f, 0, + "chipType=3\n" + "extendWave=true\n" + "dacDepth=9\n" + ), + CH(DIV_SYSTEM_GBA_DMA, 0.5f, 0, "dacDepth=9"), + } + ); ENTRY( "Neo Geo Pocket", { CH(DIV_SYSTEM_T6W28, 1.0f, 0, ""), diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 6a3a666ee..a3c70b820 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -379,6 +379,20 @@ void FurnaceGUI::drawSampleEdit() { if (sample->samples>129024) { SAMPLE_WARN(warnLength,"MSM6295: maximum bankswitched sample length is 129024"); } + break; + case DIV_SYSTEM_GBA_DMA: + if (sample->loop) { + if (sample->loopStart&3) { + SAMPLE_WARN(warnLoopStart,"GBA DMA: loop start must be a multiple of 4"); + } + if ((sample->loopEnd-sample->loopStart)&15) { + SAMPLE_WARN(warnLoopEnd,"GBA DMA: loop length must be a multiple of 16"); + } + } + if (sample->samples&15) { + SAMPLE_WARN(warnLength,"GBA DMA: sample length will be padded to multiple of 16"); + } + break; default: break; } diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8fdd1733f..566f0c513 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3551,6 +3551,7 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_INSTR_POWERNOISE,"PowerNoise (noise)"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_POWERNOISE_SLOPE,"PowerNoise (slope)"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_DAVE,"Dave"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_GBA_DMA,"GBA DMA"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); ImGui::TreePop(); } diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 18bc3d967..ad8b391b4 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -329,6 +329,8 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl bool noAntiClick=flags.getBool("noAntiClick",false); bool invertWave=flags.getBool("invertWave",true); bool enoughAlready=flags.getBool("enoughAlready",false); + bool extendWave=flags.getBool("extendWave",false); + int dacDepth=flags.getInt("dacDepth",6); if (ImGui::Checkbox("Disable anti-click",&noAntiClick)) { altered=true; @@ -352,6 +354,22 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl altered=true; } ImGui::Unindent(); + ImGui::Text("Game Boy Advance:"); + ImGui::Indent(); + ImGui::BeginDisabled(chipType!=3); + if (ImGui::Checkbox("Wave channel extension",&extendWave)) { + altered=true; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("note: not supported by the VGM format!\nallows wave channel to have double length and 75%% volume"); + } + if (CWSliderInt("DAC bit depth (reduces output rate)",&dacDepth,6,9)) { + if (dacDepth<6) dacDepth=6; + if (dacDepth>9) dacDepth=9; + altered=true; + } + ImGui::EndDisabled(); + ImGui::Unindent(); ImGui::Text("Wave channel orientation:"); if (chipType==3) { ImGui::Indent(); @@ -381,11 +399,33 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } if (altered) { + if (chipType!=3) { + extendWave=false; + dacDepth=6; + } e->lockSave([&]() { flags.set("chipType",chipType); flags.set("noAntiClick",noAntiClick); flags.set("invertWave",invertWave); flags.set("enoughAlready",enoughAlready); + flags.set("extendWave",extendWave); + flags.set("dacDepth",dacDepth); + }); + } + break; + } + case DIV_SYSTEM_GBA_DMA: { + int dacDepth=flags.getInt("dacDepth",6); + + if (CWSliderInt("DAC bit depth (reduces output rate)",&dacDepth,6,9)) { + if (dacDepth<6) dacDepth=6; + if (dacDepth>9) dacDepth=9; + altered=true; + } + + if (altered) { + e->lockSave([&]() { + flags.set("dacDepth",dacDepth); }); } break; From 3cd835098158d46c8fc069d67aa4298f087db360 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Fri, 12 Jan 2024 21:28:07 +0700 Subject: [PATCH 048/134] Define wave height and change icon for GBA DMA --- src/engine/sysDef.cpp | 2 +- src/gui/guiConst.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 9680012f3..7f87af69b 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2003,7 +2003,7 @@ void DivEngine::registerSystems() { ); sysDefs[DIV_SYSTEM_GBA_DMA]=new DivSysDef( - "Game Boy Advance DMA Sound", NULL, 0xfe, 0, 2, false, true, 0, false, 1U< Date: Fri, 12 Jan 2024 22:00:12 +0700 Subject: [PATCH 049/134] Add set waveform commands to PCM DAC and GBA DMA --- src/engine/sysDef.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 7f87af69b..3de964f8b 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -1862,7 +1862,11 @@ void DivEngine::registerSystems() { {"Sample"}, {"PCM"}, {DIV_CH_PCM}, - {DIV_INS_AMIGA} + {DIV_INS_AMIGA}, + {}, + { + {0x10, {DIV_CMD_WAVE, "10xx: Set waveform"}}, + } ); sysDefs[DIV_SYSTEM_K007232]=new DivSysDef( @@ -2009,7 +2013,11 @@ void DivEngine::registerSystems() { {"P1", "P2"}, {DIV_CH_PCM, DIV_CH_PCM}, {DIV_INS_GBA_DMA, DIV_INS_GBA_DMA}, - {DIV_INS_AMIGA, DIV_INS_AMIGA} + {DIV_INS_AMIGA, DIV_INS_AMIGA}, + {}, + { + {0x10, {DIV_CMD_WAVE, "10xx: Set waveform"}}, + } ); sysDefs[DIV_SYSTEM_DAVE]=new DivSysDef( From 0b1d2e24d75f8e6e84c24e6e350b70232699344c Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sat, 13 Jan 2024 00:17:45 +0700 Subject: [PATCH 050/134] Change default GBA DMA DAC bit depth to 9 --- src/gui/sysConf.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index ad8b391b4..17d9e40d9 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -415,9 +415,10 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl break; } case DIV_SYSTEM_GBA_DMA: { - int dacDepth=flags.getInt("dacDepth",6); + int dacDepth=flags.getInt("dacDepth",9); - if (CWSliderInt("DAC bit depth (reduces output rate)",&dacDepth,6,9)) { + ImGui::Text("DAC bit depth (reduces output rate):"); + if (CWSliderInt("##DACDepth",&dacDepth,6,9)) { if (dacDepth<6) dacDepth=6; if (dacDepth>9) dacDepth=9; altered=true; From 2b9dd1cafffc5de0b1d4b83e2c0531c1f2c45826 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sat, 16 Mar 2024 14:59:02 +0700 Subject: [PATCH 051/134] Add GBA MinMod driver support --- CMakeLists.txt | 1 + src/engine/dispatch.h | 4 + src/engine/dispatchContainer.cpp | 4 + src/engine/engine.cpp | 3 +- src/engine/instrument.h | 1 + src/engine/platform/gbaminmod.cpp | 725 ++++++++++++++++++++++++++++++ src/engine/platform/gbaminmod.h | 126 ++++++ src/engine/playback.cpp | 3 + src/engine/song.h | 3 +- src/engine/sysDef.cpp | 44 +- src/gui/doAction.cpp | 3 +- src/gui/gui.h | 1 + src/gui/guiConst.cpp | 6 +- src/gui/insEdit.cpp | 27 +- src/gui/presets.cpp | 12 +- src/gui/settings.cpp | 1 + src/gui/sysConf.cpp | 58 ++- 17 files changed, 996 insertions(+), 26 deletions(-) create mode 100644 src/engine/platform/gbaminmod.cpp create mode 100644 src/engine/platform/gbaminmod.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 87c684e02..4059c694f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -718,6 +718,7 @@ src/engine/platform/esfm.cpp src/engine/platform/powernoise.cpp src/engine/platform/dave.cpp src/engine/platform/gbadma.cpp +src/engine/platform/gbaminmod.cpp src/engine/platform/pcmdac.cpp src/engine/platform/dummy.cpp diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 06157e841..079a49022 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -251,6 +251,10 @@ enum DivDispatchCmds { DIV_CMD_POWERNOISE_COUNTER_LOAD, // (which, val) DIV_CMD_POWERNOISE_IO_WRITE, // (port, value) + + DIV_CMD_MINMOD_ECHO, + + DIV_ALWAYS_SET_VOLUME, // () -> alwaysSetVol DIV_CMD_DAVE_HIGH_PASS, DIV_CMD_DAVE_RING_MOD, diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 420876a8e..2840ce740 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -82,6 +82,7 @@ #include "platform/ted.h" #include "platform/c140.h" #include "platform/gbadma.h" +#include "platform/gbaminmod.h" #include "platform/pcmdac.h" #include "platform/esfm.h" #include "platform/powernoise.h" @@ -648,6 +649,9 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do case DIV_SYSTEM_GBA_DMA: dispatch=new DivPlatformGBADMA; break; + case DIV_SYSTEM_GBA_MINMOD: + dispatch=new DivPlatformGBAMinMod; + break; case DIV_SYSTEM_PCM_DAC: dispatch=new DivPlatformPCMDAC; break; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index fabb26ac3..fe7b5f41e 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -983,7 +983,8 @@ void DivEngine::delUnusedSamples() { i->type==DIV_INS_K053260 || i->type==DIV_INS_C140 || i->type==DIV_INS_C219 || - i->type==DIV_INS_GBA_DMA) { + i->type==DIV_INS_GBA_DMA || + i->type==DIV_INS_GBA_MINMOD) { if (i->amiga.initSample>=0 && i->amiga.initSampleamiga.initSample]=true; } diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 5e1822e46..90f0e2309 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -90,6 +90,7 @@ enum DivInstrumentType: unsigned short { DIV_INS_POWERNOISE_SLOPE=57, DIV_INS_DAVE=58, DIV_INS_GBA_DMA=59, + DIV_INS_GBA_MINMOD=60, DIV_INS_MAX, DIV_INS_NULL }; diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp new file mode 100644 index 000000000..118882687 --- /dev/null +++ b/src/engine/platform/gbaminmod.cpp @@ -0,0 +1,725 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "gbaminmod.h" +#include "../engine.h" +#include "../../ta-log.h" +#include + +#define CHIP_FREQBASE 16777216 + +#define rWrite(a,v) {regPool[a]=v;} + +const char* regCheatSheetMinMod[]={ + "CHx_Counter", "x0", + "CHx_Address", "x2", + "CHx_LastLeft", "x4", + "CHx_LastRight", "x6", + "CHx_Freq", "x8", + "CHx_LoopEnd", "xA", + "CHx_LoopStart", "xC", + "CHx_VolumeLeft", "xE", + "CHx_VolumeRight", "xF", + NULL +}; + +const char** DivPlatformGBAMinMod::getRegisterSheet() { + return regCheatSheetMinMod; +} + +void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { + short sampL, sampR; + size_t sampPos=mixBufReadPos&3; + bool newSamp=true; + // cache channel registers that might change + struct { + unsigned long long address; + unsigned int freq, loopEnd, loopStart; + short volL, volR; + } chState[16]; + for (int i=0; i=sampCycles) { + // the driver generates 4 samples at a time and can be start-offset + sampPos=mixBufReadPos&3; + if (sampPos==mixBufOffset) { + for (int j=mixBufOffset; j<4; j++) { + mixOut[0][j]=0; + mixOut[1][j]=0; + } + for (int i=0; i>32; + chState[i].address+=((unsigned long long)chState[i].freq)<<8; + unsigned int newAddr=chState[i].address>>32; + if (newAddr!=lastAddr) { + if (newAddr>=chState[i].loopEnd) { + newAddr=newAddr-chState[i].loopEnd+chState[i].loopStart; + chState[i].address=(chState[i].address&0xffffffff)|((unsigned long long)newAddr<<32); + } + int newSamp=0; + switch (newAddr>>24) { + case 2: // wavetable + newAddr&=0x0003ffff; + if (newAddr0x800) { + newSamp=mixBuf[(newAddr-0x800)/1024][newAddr&1023]; + } + break; + case 8: // sample + case 9: + case 10: + case 11: + case 12: + newSamp=sampleMem[newAddr&0x01ffffff]; + break; + } + chanOut[i][0]=newSamp*chState[i].volL; + chanOut[i][1]=newSamp*chState[i].volR; + } + int outL=chanOut[i][0]; + int outR=chanOut[i][1]; + int outA=(chan[i].invertL==chan[i].invertR)?outL+outR:outL-outR; + mixOut[0][j]+=(unsigned char)(outL>>15); + mixOut[1][j]+=(unsigned char)(outR>>15); + oscOut[i][j]=volScale>0?outA*64/volScale:0; + } + } + for (int j=mixBufOffset; j<4; j++) { + mixBuf[mixBufPage][mixBufWritePos]=mixOut[0][j]; + mixBuf[mixBufPage+1][mixBufWritePos]=mixOut[1][j]; + mixBufWritePos++; + } + mixBufOffset=0; + } + newSamp=true; + mixBufReadPos++; + sampTimer-=sampCycles; + } + if (newSamp) { + // assuming max PCM FIFO volume + sampL=((short)mixOut[0][sampPos]<<8)&(0xff80<<(9-dacDepth)); + sampR=((short)mixOut[1][sampPos]<<8)&(0xff80<<(9-dacDepth)); + newSamp=false; + } + buf[0][h]=sampL; + buf[1][h]=sampR; + for (int i=0; idata[oscBuf[i]->needle++]=oscOut[i][sampPos]; + } + for (int i=chanMax; i<16; i++) { + oscBuf[i]->data[oscBuf[i]->needle++]=0; + } + while (updTimer>=updCycles) { + // flip buffer + // logV("ut=%d,pg=%d,w=%d,r=%d,sc=%d,st=%d",updTimer,mixBufPage,mixBufWritePos,mixBufReadPos,sampCycles,sampTimer); + mixBufPage=(mixBufPage+2)%(mixBufs*2); + memset(mixBuf[mixBufPage],0,sizeof(mixBuf[mixBufPage])); + memset(mixBuf[mixBufPage+1],0,sizeof(mixBuf[mixBufPage+1])); + // emulate buffer loss prevention and buffer copying + sampsRendered+=mixBufReadPos; + mixBufOffset=(4-(mixBufReadPos&3))&3; + mixBufReadPos=0; + mixBufWritePos=mixBufOffset; + for (int j=0; jgetCurHz(); + float updCyclesNew=(hz>=1)?(16777216.f/hz):1; + // the maximum buffer size in the default multi-rate config is 1024 samples + // (so 15 left/right buffers + mixer code fit the entire 32k of internal RAM) + // if the driver determines that the current tick rate is too low, it will + // internally double the rate until the resulting buffer size fits + while (true) { + updCycles=floorf(updCyclesNew); + // emulate prescaler rounding + if (updCycles>=65536*256) { + updCycles&=~1024; + } else if (updCycles>=65536*64) { + updCycles&=~256; + } else if (updCycles>=65536) { + updCycles&=~64; + } + unsigned int bufSize=(updCycles/sampCycles+3)&~3; + if (bufSize<1024 || updCyclesNew<1) { + break; + } + updCyclesNew/=2; + } + } + updTimer+=1<>16)&0xffff; + chReg[2]=(chState[i].address>>32)&0xffff; + chReg[3]=(chState[i].address>>48)&0xffff; + chReg[4]=(chanOut[i][0]>>7)&0xff00; + chReg[5]=0; + chReg[6]=(chanOut[i][1]>>7)&0xff00; + chReg[7]=0; + chReg[10]=chState[i].loopEnd&0xffff; + chReg[11]=(chState[i].loopEnd>>16)&0xffff; + chReg[12]=chState[i].loopStart&0xffff; + chReg[13]=(chState[i].loopStart>>16)&0xffff; + } +} + +void DivPlatformGBAMinMod::tick(bool sysTick) { + // collect stats for display in chip config + // logV("rendered=%d,updTot=%d",sampsRendered,updCyclesTotal); + if (sysTick && sampsRendered>0) { + // assuming new sample, L!=R and lowest ROM access wait in all channels + // this gives 39.5 cycles/sample, rounded up to 40 for loops + maxCPU=(float)sampsRendered*chanMax*40/updCyclesTotal; + } + sampsRendered=0; + updCyclesTotal=0; + + for (int i=0; icalcArp(chan[i].note,chan[i].std.arp.val)); + } + chan[i].freqChanged=true; + } + if (chan[i].useWave && chan[i].std.wave.had) { + if (chan[i].wave!=chan[i].std.wave.val || chan[i].ws.activeChanged()) { + chan[i].wave=chan[i].std.wave.val; + chan[i].ws.changeWave1(chan[i].wave); + } + } + if (chan[i].std.pitch.had) { + if (chan[i].std.pitch.mode) { + chan[i].pitch2+=chan[i].std.pitch.val; + CLAMP_VAR(chan[i].pitch2,-32768,32767); + } else { + chan[i].pitch2=chan[i].std.pitch.val; + } + chan[i].freqChanged=true; + } + if (chan[i].std.panL.had) { + chan[i].chPanL=(255*(chan[i].std.panL.val&255))/chan[i].macroPanMul; + chan[i].volChangedL=true; + } + + if (chan[i].std.panR.had) { + chan[i].chPanR=(255*(chan[i].std.panR.val&255))/chan[i].macroPanMul; + chan[i].volChangedR=true; + } + if (chan[i].std.phaseReset.had) { + if ((chan[i].std.phaseReset.val==1) && chan[i].active) { + chan[i].audPos=0; + chan[i].setPos=true; + } + } + if (chan[i].std.ex1.had) { + if (chan[i].invertL!=(bool)(chan[i].std.ex1.val&16)) { + chan[i].invertL=chan[i].std.ex1.val&2; + chan[i].volChangedL=true; + } + if (chan[i].invertR!=(bool)(chan[i].std.ex1.val&8)) { + chan[i].invertR=chan[i].std.ex1.val&1; + chan[i].volChangedR=true; + } + } + if (chan[i].setPos) { + // force keyon + chan[i].keyOn=true; + chan[i].setPos=false; + } else { + chan[i].audPos=0; + } + if (chan[i].useWave && chan[i].active) { + if (chan[i].ws.tick()) { + updateWave(i); + } + } + if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { + DivSample* s=parent->getSample(chan[i].sample); + double off=(s->centerRate>=1)?((double)s->centerRate/8363.0):1.0; + chan[i].freq=(int)(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE)); + if (chan[i].keyOn) { + unsigned int start, end, loop; + if (chan[i].echo!=0) { + // make sure echo channels' frequency can't be faster than the sample rate + if (chan[i].echo!=0 && chan[i].freq>CHIP_FREQBASE) { + chan[i].freq=CHIP_FREQBASE; + } + // this is only to match the HLE implementation + // the actual engine will handle mid-frame echo switch differently + start=loop=0x08000000; + end=0x08000001; + } else if (chan[i].useWave) { + start=(i*256)|0x02000000; + end=start+chan[i].wtLen; + loop=start; + } else { + size_t maxPos=getSampleMemCapacity(); + start=sampleOff[chan[i].sample]; + if (s->isLoopable()) { + end=MIN(start+MAX(s->length8,1),maxPos); + loop=start+s->loopStart; + } else { + end=MIN(start+s->length8+16,maxPos); + loop=MIN(start+s->length8,maxPos); + } + if (chan[i].audPos>0) { + start=start+MIN(chan[i].audPos,end); + } + start|=0x08000000; + end|=0x08000000; + loop|=0x08000000; + } + rWrite(2+i*16,start&0xffff); + rWrite(3+i*16,start>>16); + rWrite(10+i*16,end&0xffff); + rWrite(11+i*16,end>>16); + rWrite(12+i*16,loop&0xffff); + rWrite(13+i*16,loop>>16); + if (!chan[i].std.vol.had) { + chan[i].outVol=chan[i].vol; + } + chan[i].volChangedL=true; + chan[i].volChangedR=true; + chan[i].keyOn=false; + } + if (chan[i].keyOff) { + chan[i].volChangedL=true; + chan[i].volChangedR=true; + chan[i].keyOff=false; + } + if (chan[i].freqChanged) { + rWrite(8+i*16,chan[i].freq&0xffff); + rWrite(9+i*16,chan[i].freq>>16); + chan[i].freqChanged=false; + } + } + // don't scale echo channels + if (chan[i].volChangedL) { + int out=chan[i].outVol*chan[i].chPanL; + if ((chan[i].echo&0xf)==0) out=(out*volScale)>>16; + else out=out>>1; + if (chan[i].invertL) out=-out; + rWrite(14+i*16,(isMuted[i] || !chan[i].active)?0:out); + chan[i].volChangedL=false; + } + if (chan[i].volChangedR) { + int out=chan[i].outVol*chan[i].chPanR; + if ((chan[i].echo&0xf)==0) out=(out*volScale)>>16; + else out=out>>1; + if (chan[i].invertR) out=-out; + rWrite(15+i*16,(isMuted[i] || !chan[i].active)?0:out); + chan[i].volChangedR=false; + } + } +} + +int DivPlatformGBAMinMod::dispatch(DivCommand c) { + switch (c.cmd) { + case DIV_CMD_NOTE_ON: { + DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); + chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:255; + chan[c.chan].macroPanMul=ins->type==DIV_INS_AMIGA?127:255; + if (ins->amiga.useWave) { + chan[c.chan].useWave=true; + chan[c.chan].wtLen=ins->amiga.waveLen+1; + if (chan[c.chan].insChanged) { + if (chan[c.chan].wave<0) { + chan[c.chan].wave=0; + } + chan[c.chan].ws.setWidth(chan[c.chan].wtLen); + chan[c.chan].ws.changeWave1(chan[c.chan].wave); + } + chan[c.chan].ws.init(ins,chan[c.chan].wtLen,255,chan[c.chan].insChanged); + } else { + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(c.value); + c.value=ins->amiga.getFreq(c.value); + } + chan[c.chan].useWave=false; + } + if (chan[c.chan].useWave || chan[c.chan].sample<0 || chan[c.chan].sample>=parent->song.sampleLen) { + chan[c.chan].sample=-1; + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=round(NOTE_FREQUENCY(c.value)); + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + } + chan[c.chan].active=true; + chan[c.chan].keyOn=true; + chan[c.chan].macroInit(ins); + if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { + chan[c.chan].outVol=chan[c.chan].vol; + } + break; + } + case DIV_CMD_NOTE_OFF: + chan[c.chan].sample=-1; + chan[c.chan].active=false; + chan[c.chan].keyOff=true; + chan[c.chan].macroInit(NULL); + break; + case DIV_CMD_NOTE_OFF_ENV: + case DIV_CMD_ENV_RELEASE: + chan[c.chan].std.release(); + break; + case DIV_CMD_INSTRUMENT: + if (chan[c.chan].ins!=c.value || c.value2==1) { + chan[c.chan].ins=c.value; + } + break; + case DIV_CMD_VOLUME: + chan[c.chan].vol=c.value; + if (!chan[c.chan].std.vol.has) { + chan[c.chan].outVol=c.value; + } + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + break; + case DIV_CMD_GET_VOLUME: + if (chan[c.chan].std.vol.has) { + return chan[c.chan].vol; + } + return chan[c.chan].outVol; + break; + case DIV_CMD_SNES_INVERT: + chan[c.chan].invertL=(c.value>>4); + chan[c.chan].invertR=c.value&15; + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + break; + case DIV_CMD_PANNING: + chan[c.chan].chPanL=c.value; + chan[c.chan].chPanR=c.value2; + chan[c.chan].volChangedL=true; + chan[c.chan].volChangedR=true; + break; + case DIV_CMD_PITCH: + chan[c.chan].pitch=c.value; + chan[c.chan].freqChanged=true; + break; + case DIV_CMD_WAVE: + if (!chan[c.chan].useWave) break; + chan[c.chan].wave=c.value; + chan[c.chan].ws.changeWave1(chan[c.chan].wave); + break; + case DIV_CMD_NOTE_PORTA: { + int destFreq=NOTE_FREQUENCY(c.value2); + bool return2=false; + if (destFreq>chan[c.chan].baseFreq) { + chan[c.chan].baseFreq+=c.value; + if (chan[c.chan].baseFreq>=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } else { + chan[c.chan].baseFreq-=c.value; + if (chan[c.chan].baseFreq<=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } + chan[c.chan].freqChanged=true; + if (return2) { + chan[c.chan].inPorta=false; + return 2; + } + break; + } + case DIV_CMD_LEGATO: { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + break; + } + case DIV_CMD_PRE_PORTA: + if (chan[c.chan].active && c.value2) { + if (parent->song.resetMacroOnPorta) chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA)); + } + if (!chan[c.chan].inPorta && c.value && !parent->song.brokenPortaArp && chan[c.chan].std.arp.will && !NEW_ARP_STRAT) chan[c.chan].baseFreq=NOTE_FREQUENCY(chan[c.chan].note); + chan[c.chan].inPorta=c.value; + break; + case DIV_CMD_SAMPLE_POS: + chan[c.chan].audPos=c.value; + chan[c.chan].setPos=true; + break; + case DIV_CMD_MINMOD_ECHO: + chan[c.chan].echo=c.value; + break; + case DIV_CMD_GET_VOLMAX: + return 255; + break; + case DIV_CMD_MACRO_OFF: + chan[c.chan].std.mask(c.value,true); + break; + case DIV_CMD_MACRO_ON: + chan[c.chan].std.mask(c.value,false); + break; + case DIV_ALWAYS_SET_VOLUME: + return 1; + break; + default: + break; + } + return 1; +} + +void DivPlatformGBAMinMod::updateWave(int ch) { + int addr=ch*256; + for (unsigned int i=0; i& wlist) { + for (DivRegWrite& i: wlist) rWrite(i.addr,i.val); +} + +unsigned char* DivPlatformGBAMinMod::getRegisterPool() { + return (unsigned char*)regPool; +} + +int DivPlatformGBAMinMod::getRegisterPoolSize() { + return 256; +} + +int DivPlatformGBAMinMod::getRegisterPoolDepth() { + return 16; +} + +const void* DivPlatformGBAMinMod::getSampleMem(int index) { + return index == 0 ? sampleMem : NULL; +} + +size_t DivPlatformGBAMinMod::getSampleMemCapacity(int index) { + return index == 0 ? 33554432 : 0; +} + +size_t DivPlatformGBAMinMod::getSampleMemUsage(int index) { + return index == 0 ? sampleMemLen : 0; +} + +bool DivPlatformGBAMinMod::isSampleLoaded(int index, int sample) { + if (index!=0) return false; + if (sample<0 || sample>255) return false; + return sampleLoaded[sample]; +} + +void DivPlatformGBAMinMod::renderSamples(int sysID) { + size_t maxPos=getSampleMemCapacity(); + memset(sampleMem,0,maxPos); + + // dummy zero-length samples are at pos 0 as the engine still outputs them + size_t memPos=1; + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOff[i]=0; + continue; + } + int length=s->length8; + int actualLength=MIN((int)(maxPos-memPos),length); + if (actualLength>0) { + sampleOff[i]=memPos; + memcpy(&sampleMem[memPos],s->data8,actualLength); + memPos+=actualLength; + // if it's one-shot, add 16 silent samples for looping area + // this should be enough for most cases even though the + // frequency register can make position jump by up to 256 samples + if (!s->isLoopable()) { + int oneShotLen=MIN((int)maxPos-memPos,16); + memset(&sampleMem[memPos],0,oneShotLen); + memPos+=oneShotLen; + } + } + if (actualLength>dacDepth; + for (int i=0; i<16; i++) { + oscBuf[i]->rate=rate; + } + sampCycles=16777216/flags.getInt("sampRate",21845); + chipClock=16777216/sampCycles; + resetMixer(); +} + +int DivPlatformGBAMinMod::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { + parent=p; + dumpWrites=false; + skipRegisterWrites=false; + for (int i=0; i<16; i++) { + isMuted[i]=false; + oscBuf[i]=new DivDispatchOscBuffer; + } + sampleMem=new signed char[getSampleMemCapacity()]; + sampleMemLen=0; + setFlags(flags); + reset(); + + return 16; +} + +void DivPlatformGBAMinMod::quit() { + delete[] sampleMem; + for (int i=0; i<16; i++) { + delete oscBuf[i]; + } +} diff --git a/src/engine/platform/gbaminmod.h b/src/engine/platform/gbaminmod.h new file mode 100644 index 000000000..0b7190bd5 --- /dev/null +++ b/src/engine/platform/gbaminmod.h @@ -0,0 +1,126 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2023 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _GBA_MINMOD_H +#define _GBA_MINMOD_H + +#include "../dispatch.h" +#include "../waveSynth.h" + +class DivPlatformGBAMinMod: public DivDispatch { + struct Channel: public SharedChannel { + unsigned char echo; + unsigned int audPos, wtLen; + int sample, wave; + bool useWave, setPos, volChangedL, volChangedR, invertL, invertR; + int chPanL, chPanR; + int macroVolMul; + int macroPanMul; + DivWaveSynth ws; + Channel(): + SharedChannel(255), + echo(0), + audPos(0), + wtLen(1), + sample(-1), + wave(-1), + useWave(false), + setPos(false), + volChangedL(false), + volChangedR(false), + invertL(false), + invertR(false), + chPanL(255), + chPanR(255), + macroVolMul(256), + macroPanMul(127) {} + }; + Channel chan[16]; + DivDispatchOscBuffer* oscBuf[16]; + bool isMuted[16]; + unsigned int sampleOff[256]; + bool sampleLoaded[256]; + int volScale; + unsigned char chanMax; + + // emulator part + unsigned int mixBufs; + unsigned int mixBufSize; + unsigned int dacDepth; + unsigned int sampCycles; + unsigned int sampTimer; + unsigned int updCycles; + unsigned int updTimer; + unsigned int updCyclesTotal; + unsigned int sampsRendered; + signed char mixBuf[15*2][1024]; + unsigned char mixOut[2][4]; + short oscOut[16][4]; + int chanOut[16][2]; + size_t mixBufPage; + size_t mixBufReadPos; + size_t mixBufWritePos; + size_t mixBufOffset; + + signed char* sampleMem; + size_t sampleMemLen; + // maximum wavetable length is currently hardcoded to 256 + signed char wtMem[256*16]; + unsigned short regPool[16*16]; + friend void putDispatchChip(void*,int); + friend void putDispatchChan(void*,int,int); + + public: + void acquire(short** buf, size_t len); + int dispatch(DivCommand c); + void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); + unsigned short getPan(int chan); + DivDispatchOscBuffer* getOscBuffer(int chan); + unsigned char* getRegisterPool(); + int getRegisterPoolSize(); + int getRegisterPoolDepth(); + void reset(); + void forceIns(); + void tick(bool sysTick=true); + void muteChannel(int ch, bool mute); + int getOutputCount(); + void notifyInsChange(int ins); + void notifyWaveChange(int wave); + void notifyInsDeletion(void* ins); + void poke(unsigned int addr, unsigned short val); + void poke(std::vector& wlist); + const char** getRegisterSheet(); + const void* getSampleMem(int index = 0); + size_t getSampleMemCapacity(int index = 0); + size_t getSampleMemUsage(int index = 0); + bool isSampleLoaded(int index, int sample); + void renderSamples(int chipID); + void setFlags(const DivConfig& flags); + int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); + void quit(); + + float maxCPU; + private: + void updateWave(int ch); + // emulator part + void resetMixer(); +}; + +#endif diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 49341ce14..c8249b1b9 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -257,6 +257,9 @@ const char* cmdName[]={ "DAVE_CLOCK_DIV", "MACRO_RESTART", + "MINMOD_ECHO", + + "ALWAYS_SET_VOLUME" }; static_assert((sizeof(cmdName)/sizeof(void*))==DIV_CMD_MAX,"update cmdName!"); diff --git a/src/engine/song.h b/src/engine/song.h index 4756499bf..3088be22f 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -118,7 +118,6 @@ enum DivSystem { DIV_SYSTEM_T6W28, DIV_SYSTEM_K007232, DIV_SYSTEM_GA20, - DIV_SYSTEM_GBA_DMA, DIV_SYSTEM_PCM_DAC, DIV_SYSTEM_PONG, DIV_SYSTEM_DUMMY, @@ -136,6 +135,8 @@ enum DivSystem { DIV_SYSTEM_ESFM, DIV_SYSTEM_POWERNOISE, DIV_SYSTEM_DAVE, + DIV_SYSTEM_GBA_DMA, + DIV_SYSTEM_GBA_MINMOD, }; enum DivEffectType: unsigned short { diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 3de964f8b..1cdcdfb70 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2005,20 +2005,6 @@ void DivEngine::registerSystems() { }, {} ); - - sysDefs[DIV_SYSTEM_GBA_DMA]=new DivSysDef( - "Game Boy Advance DMA Sound", NULL, 0xfe, 0, 2, false, true, 0, false, 1U<type==DIV_INS_AMIGA || ins->type==DIV_INS_SNES || ins->type==DIV_INS_GBA_DMA) { + if (ins->type==DIV_INS_AMIGA || ins->type==DIV_INS_SNES || ins->type==DIV_INS_GBA_DMA || ins->type==DIV_INS_GBA_MINMOD) { const char* useWaveText=ins->type==DIV_INS_AMIGA?"Use wavetable (Amiga/Generic DAC only)":"Use wavetable"; ImGui::BeginDisabled(ins->amiga.useNoteMap); P(ImGui::Checkbox(useWaveText,&ins->amiga.useWave)); @@ -6024,7 +6028,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_K053260 || ins->type==DIV_INS_C140 || ins->type==DIV_INS_C219 || - ins->type==DIV_INS_GBA_DMA) { + ins->type==DIV_INS_GBA_DMA || + ins->type==DIV_INS_GBA_MINMOD) { insTabSample(ins); } if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("Namco 163")) { @@ -6469,7 +6474,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_SCC || ins->type==DIV_INS_SNES || ins->type==DIV_INS_NAMCO || - ins->type==DIV_INS_SM8521) { + ins->type==DIV_INS_SM8521 || + (ins->type==DIV_INS_GBA_MINMOD && ins->amiga.useWave)) { if (ImGui::BeginTabItem("Wavetable")) { switch (ins->type) { case DIV_INS_GB: @@ -6512,6 +6518,10 @@ void FurnaceGUI::drawInsEdit() { wavePreviewLen=ins->amiga.waveLen+1; wavePreviewHeight=15; break; + case DIV_INS_GBA_MINMOD: + wavePreviewLen=ins->amiga.waveLen+1; + wavePreviewHeight=255; + break; default: wavePreviewLen=32; wavePreviewHeight=31; @@ -6770,7 +6780,7 @@ void FurnaceGUI::drawInsEdit() { volMax=31; } if (ins->type==DIV_INS_ADPCMB || ins->type==DIV_INS_YMZ280B || ins->type==DIV_INS_RF5C68 || - ins->type==DIV_INS_GA20 || ins->type==DIV_INS_C140 || ins->type==DIV_INS_C219) { + ins->type==DIV_INS_GA20 || ins->type==DIV_INS_C140 || ins->type==DIV_INS_C219 || ins->type==DIV_INS_GBA_MINMOD) { volMax=255; } if (ins->type==DIV_INS_QSOUND) { @@ -6835,7 +6845,7 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_PET || ins->type==DIV_INS_SEGAPCM || ins->type==DIV_INS_FM || ins->type==DIV_INS_K007232 || ins->type==DIV_INS_GA20 || ins->type==DIV_INS_SM8521 || ins->type==DIV_INS_PV1000 || ins->type==DIV_INS_K053260 || - ins->type==DIV_INS_C140 || ins->type==DIV_INS_GBA_DMA) { + ins->type==DIV_INS_C140 || ins->type==DIV_INS_GBA_DMA || ins->type==DIV_INS_GBA_MINMOD) { dutyMax=0; } if (ins->type==DIV_INS_VBOY) { @@ -7036,6 +7046,9 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_MIKEY) { ex1Max=12; } + if (ins->type==DIV_INS_GBA_MINMOD) { + ex1Max=2; + } int panMin=0; int panMax=0; @@ -7101,7 +7114,7 @@ void FurnaceGUI::drawInsEdit() { panMin=0; panMax=127; } - if (ins->type==DIV_INS_C140 || ins->type==DIV_INS_C219) { + if (ins->type==DIV_INS_C140 || ins->type==DIV_INS_C219 || ins->type==DIV_INS_GBA_MINMOD) { panMin=0; panMax=255; } @@ -7246,6 +7259,8 @@ void FurnaceGUI::drawInsEdit() { macroList.push_back(FurnaceGUIMacroDesc("Control",&ins->std.ex1Macro,0,ex1Max,64,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,daveControlBits)); } else if (ins->type==DIV_INS_MIKEY) { macroList.push_back(FurnaceGUIMacroDesc("Load LFSR",&ins->std.ex1Macro,0,12,160,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); + } else if (ins->type==DIV_INS_GBA_MINMOD) { + macroList.push_back(FurnaceGUIMacroDesc("Special",&ins->std.ex1Macro,0,ex1Max,96,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,minModModeBits)); } else { macroList.push_back(FurnaceGUIMacroDesc("Duty",&ins->std.ex1Macro,0,ex1Max,160,uiColors[GUI_COLOR_MACRO_OTHER])); } diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 2cf952ba0..b098a98f0 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -137,7 +137,17 @@ void FurnaceGUI::initSystemPresets() { "extendWave=true\n" "dacDepth=9\n" ), - CH(DIV_SYSTEM_GBA_DMA, 0.5f, 0, "dacDepth=9"), + CH(DIV_SYSTEM_GBA_DMA, 0.5f, 0, ""), + } + ); + ENTRY( + "Game Boy Advance (with MinMod)", { + CH(DIV_SYSTEM_GB, 1.0f, 0, + "chipType=3\n" + "extendWave=true\n" + "dacDepth=9\n" + ), + CH(DIV_SYSTEM_GBA_MINMOD, 0.5f, 0, ""), } ); ENTRY( diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 566f0c513..44f61e5f6 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3552,6 +3552,7 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_INSTR_POWERNOISE_SLOPE,"PowerNoise (slope)"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_DAVE,"Dave"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_GBA_DMA,"GBA DMA"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_GBA_MINMOD,"GBA MinMod"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); ImGui::TreePop(); } diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 17d9e40d9..fba0a0f3a 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -18,6 +18,7 @@ */ #include "../engine/chipUtils.h" +#include "../engine/platform/gbaminmod.h" #include "gui.h" #include "misc/cpp/imgui_stdlib.h" #include @@ -363,7 +364,8 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl if (ImGui::IsItemHovered()) { ImGui::SetTooltip("note: not supported by the VGM format!\nallows wave channel to have double length and 75%% volume"); } - if (CWSliderInt("DAC bit depth (reduces output rate)",&dacDepth,6,9)) { + ImGui::Text("DAC bit depth (reduces output rate):"); + if (CWSliderInt("##DACDepth",&dacDepth,6,9)) { if (dacDepth<6) dacDepth=6; if (dacDepth>9) dacDepth=9; altered=true; @@ -431,6 +433,60 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } break; } + case DIV_SYSTEM_GBA_MINMOD: { + supportsCustomRate=false; + int volScale=flags.getInt("volScale",4096); + int mixBufs=flags.getInt("mixBufs",15); + int dacDepth=flags.getInt("dacDepth",9); + int channels=flags.getInt("channels",16); + int sampRate=flags.getInt("sampRate",21845); + ImGui::Text("Volume scale:"); + if (CWSliderInt("##VolScale",&volScale,0,32768)) { + if (volScale<0) volScale=0; + if (volScale>32768) volScale=32768; + altered=true; + } rightClickable + ImGui::Text("Mix buffers (allows longer echo delay):"); + if (CWSliderInt("##MixBufs",&mixBufs,2,15)) { + if (mixBufs<2) mixBufs=2; + if (mixBufs>16) mixBufs=16; + altered=true; + } rightClickable + ImGui::Text("DAC bit depth (reduces output rate):"); + if (CWSliderInt("##DACDepth",&dacDepth,6,9)) { + if (dacDepth<6) dacDepth=6; + if (dacDepth>9) dacDepth=9; + altered=true; + } rightClickable + ImGui::Text("Channel limit:"); + if (CWSliderInt("##Channels",&channels,1,16)) { + if (channels<1) channels=1; + if (channels>16) channels=16; + altered=true; + } rightClickable + ImGui::Text("Sample rate:"); + if (CWSliderInt("##SampRate",&sampRate,256,65536)) { + if (sampRate<1) sampRate=21845; + if (sampRate>65536) sampRate=65536; + altered=true; + } rightClickable + DivPlatformGBAMinMod* dispatch=(DivPlatformGBAMinMod*)e->getDispatch(chan); + float maxCPU=dispatch->maxCPU*100; + ImGui::Text("Actual sample rate: %d Hz", dispatch->chipClock); + FurnaceGUI::pushWarningColor(maxCPU>90); + ImGui::Text("Max mixer CPU usage: %.0f%%", maxCPU); + FurnaceGUI::popWarningColor(); + if (altered) { + e->lockSave([&]() { + flags.set("volScale",volScale); + flags.set("mixBufs",mixBufs); + flags.set("dacDepth",dacDepth); + flags.set("channels",channels); + flags.set("sampRate",sampRate); + }); + } + break; + } case DIV_SYSTEM_OPLL: case DIV_SYSTEM_OPLL_DRUMS: case DIV_SYSTEM_VRC7: { From e809995fa1df2f01f67dcee177073c02d97a0e85 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 03:37:24 -0500 Subject: [PATCH 052/134] Dave demo song by PichuMario --- demos/misc/deepmist_dave.fur | Bin 0 -> 3582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/misc/deepmist_dave.fur diff --git a/demos/misc/deepmist_dave.fur b/demos/misc/deepmist_dave.fur new file mode 100644 index 0000000000000000000000000000000000000000..1373294e6bcbd50a2ef96b45ab61eb93688b2bc2 GIT binary patch literal 3582 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 EsUCRo=Kufz literal 0 HcmV?d00001 From c0df3df4ed0600d81fec28b26b8fa83b0072468b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 03:45:35 -0500 Subject: [PATCH 053/134] port .ftm loading progress from LTVA --- src/engine/engine.h | 2 +- src/engine/fileOps/fileOpsCommon.cpp | 2 +- src/engine/fileOps/ftm.cpp | 2558 ++++++++++++++++++++++---- src/engine/instrument.cpp | 34 + src/engine/instrument.h | 3 + src/gui/gui.cpp | 2 +- src/gui/settings.cpp | 3 + 7 files changed, 2218 insertions(+), 386 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 982361f23..4ddd45ee8 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -547,7 +547,7 @@ class DivEngine { bool loadFur(unsigned char* file, size_t len, int variantID=0); bool loadMod(unsigned char* file, size_t len); bool loadS3M(unsigned char* file, size_t len); - bool loadFTM(unsigned char* file, size_t len); + bool loadFTM(unsigned char* file, size_t len, bool dnft, bool dnftSig, bool eft); bool loadFC(unsigned char* file, size_t len); void loadDMP(SafeReader& reader, std::vector& ret, String& stripPath); diff --git a/src/engine/fileOps/fileOpsCommon.cpp b/src/engine/fileOps/fileOpsCommon.cpp index 6eadfef62..7610d6260 100644 --- a/src/engine/fileOps/fileOpsCommon.cpp +++ b/src/engine/fileOps/fileOpsCommon.cpp @@ -128,7 +128,7 @@ bool DivEngine::load(unsigned char* f, size_t slen) { if (memcmp(file,DIV_DMF_MAGIC,16)==0) { return loadDMF(file,len); } else if (memcmp(file,DIV_FTM_MAGIC,18)==0) { - return loadFTM(file,len); + return loadFTM(file,len,false,false,false); } else if (memcmp(file,DIV_FUR_MAGIC,16)==0) { return loadFur(file,len); } else if (memcmp(file,DIV_FUR_MAGIC_DS0,16)==0) { diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 152c7c6d3..729e2583c 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -17,14 +17,174 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +// most of this code written by LTVA +// ported to Furnace by tildearrow + +// TODO: +// - audit for CVEs +// - Namco 163 waves +// - fix virtual tempo +// - format code? + #include "fileOpsCommon.h" #define CHECK_BLOCK_VERSION(x) \ if (blockVersion>x) { \ - logW("incompatible block version %d for %s!",blockVersion,blockName); \ + logW("incompatible block version %d for %s!", blockVersion, blockName); \ } +enum FTEffects { + FT_EF_NONE = 0, + FT_EF_SPEED, // Speed + FT_EF_JUMP, // Jump + FT_EF_SKIP, // Skip + FT_EF_HALT, // Halt + FT_EF_VOLUME, // Volume + FT_EF_PORTAMENTO, // Porta on + FT_EF_PORTAOFF, // Porta off unused + FT_EF_SWEEPUP, // Sweep up + FT_EF_SWEEPDOWN, // Sweep down + FT_EF_ARPEGGIO, // Arpeggio + FT_EF_VIBRATO, // Vibrato + FT_EF_TREMOLO, // Tremolo + FT_EF_PITCH, // Pitch + FT_EF_DELAY, // Note delay + FT_EF_DAC, // DAC setting + FT_EF_PORTA_UP, // Portamento up + FT_EF_PORTA_DOWN, // Portamento down + FT_EF_DUTY_CYCLE, // Duty cycle + FT_EF_SAMPLE_OFFSET, // Sample offset + FT_EF_SLIDE_UP, // Slide up + FT_EF_SLIDE_DOWN, // Slide down + FT_EF_VOLUME_SLIDE, // Volume slide + FT_EF_NOTE_CUT, // Note cut + FT_EF_RETRIGGER, // DPCM retrigger + FT_EF_DELAYED_VOLUME, // // // Delayed channel volume + FT_EF_FDS_MOD_DEPTH, // FDS modulation depth + FT_EF_FDS_MOD_SPEED_HI, // FDS modulation speed hi + FT_EF_FDS_MOD_SPEED_LO, // FDS modulation speed lo + FT_EF_DPCM_PITCH, // DPCM Pitch + FT_EF_SUNSOFT_ENV_TYPE, // Sunsoft envelope type + FT_EF_SUNSOFT_ENV_HI, // Sunsoft envelope high + FT_EF_SUNSOFT_ENV_LO, // Sunsoft envelope low + FT_EF_SUNSOFT_NOISE, // // // 050B Sunsoft noise period + FT_EF_VRC7_PORT, // // // 050B VRC7 custom patch port + FT_EF_VRC7_WRITE, // // // 050B VRC7 custom patch write + FT_EF_NOTE_RELEASE, // // // Delayed release + FT_EF_GROOVE, // // // Groove + FT_EF_TRANSPOSE, // // // Delayed transpose + FT_EF_N163_WAVE_BUFFER, // // // N163 wave buffer + FT_EF_FDS_VOLUME, // // // FDS volume envelope + FT_EF_FDS_MOD_BIAS, // // // FDS auto-FM bias + FT_EF_PHASE_RESET, // Reset waveform phase without retriggering note (VRC6-only so far) + FT_EF_HARMONIC, // Multiply the note pitch by an integer + FT_EF_TARGET_VOLUME_SLIDE, // // !! Target volume slide + + FT_EF_COUNT +}; + const int ftEffectMap[]={ + -1, // none + 0x0f, + 0x0b, + 0x0d, + 0xff, + -1, // volume? not supported in Furnace yet + 0x03, + 0x03, // unused? + 0x13, 0x14, 0x00, 0x04, 0x07, 0xe5, 0xed, 0x11, + 0x01, // porta up + 0x02, // porta down + 0x12, + 0x90, // sample offset - not supported yet + 0xe1, // Slide up + 0xe2, // Slide down + 0x0a, 0xec, 0x0c, + -1, // delayed volume - not supported yet + 0x11, // FDS modulation depth + 0x12, // FDS modulation speed hi + 0x13, // FDS modulation speed lo + 0x20, // DPCM pitch + 0x22, // Sunsoft envelope type + 0x24, // Sunsoft envelope high + 0x23, // Sunsoft envelope low + 0x21, // 050B Sunsoft noise period + -1, // VRC7 "custom patch port" - not supported? + -1, // VRC7 "custom patch write" + 0xe7, // delayed release - not supported yet + 0x09, // select groove + 0xe6, // delayed note transpose + 0x11, // Namco 163 wave RAM offset + -1, // FDS vol env - not supported + -1, // FDS auto FM - not supported yet + -1, // phase reset - not supported + -1, // harmonic - not supported + -1, // target volume slide - not supported +}; + +enum EFTEffects { + EFT_EF_NONE = 0, + EFT_EF_SPEED, // Speed + EFT_EF_JUMP, // Jump + EFT_EF_SKIP, // Skip + EFT_EF_HALT, // Halt + EFT_EF_VOLUME, // Volume + EFT_EF_PORTAMENTO, // Porta on + EFT_EF_PORTAOFF, // Porta off unused + EFT_EF_SWEEPUP, // Sweep up + EFT_EF_SWEEPDOWN, // Sweep down + EFT_EF_ARPEGGIO, // Arpeggio + EFT_EF_VIBRATO, // Vibrato + EFT_EF_TREMOLO, // Tremolo + EFT_EF_PITCH, // Pitch + EFT_EF_DELAY, // Note delay + EFT_EF_DAC, // DAC setting + EFT_EF_PORTA_UP, // Portamento up + EFT_EF_PORTA_DOWN, // Portamento down + EFT_EF_DUTY_CYCLE, // Duty cycle + EFT_EF_SAMPLE_OFFSET, // Sample offset + EFT_EF_SLIDE_UP, // Slide up + EFT_EF_SLIDE_DOWN, // Slide down + EFT_EF_VOLUME_SLIDE, // Volume slide + EFT_EF_NOTE_CUT, // Note cut + EFT_EF_RETRIGGER, // DPCM retrigger + EFT_EF_DELAYED_VOLUME, // // // Delayed channel volume + EFT_EF_FDS_MOD_DEPTH, // FDS modulation depth + EFT_EF_FDS_MOD_SPEED_HI, // FDS modulation speed hi + EFT_EF_FDS_MOD_SPEED_LO, // FDS modulation speed lo + EFT_EF_DPCM_PITCH, // DPCM Pitch + EFT_EF_SUNSOFT_ENV_TYPE, // Sunsoft envelope type + EFT_EF_SUNSOFT_ENV_HI, // Sunsoft envelope high + EFT_EF_SUNSOFT_ENV_LO, // Sunsoft envelope low + EFT_EF_SUNSOFT_NOISE, // // // 050B Sunsoft noise period + EFT_EF_AY8930_PULSE_WIDTH, // // // AY8930 pulse width + EFT_EF_AY8930_AND_MASK, // // // AY8930 noise AND mask + EFT_EF_AY8930_OR_MASK, // // // AY8930 noise OR mask + EFT_EF_AY8930_VOL, // // // AY8930 extra volume bit + EFT_EF_VRC7_PORT, // // // 050B VRC7 custom patch port + EFT_EF_VRC7_WRITE, // // // 050B VRC7 custom patch write + EFT_EF_NOTE_RELEASE, // // // Delayed release + EFT_EF_GROOVE, // // // Groove + EFT_EF_TRANSPOSE, // // // Delayed transpose + EFT_EF_N163_WAVE_BUFFER, // // // N163 wave buffer + EFT_EF_FDS_VOLUME, // // // FDS volume envelope + EFT_EF_FDS_MOD_BIAS, // // // FDS auto-FM bias + EFT_EF_PHASE_RESET, // Reset waveform phase without retriggering note (VRC6-only so far) + EFT_EF_HARMONIC, // Multiply the note pitch by an integer + EFT_EF_PWM, // // // Pulse width modulation effect + EFT_EF_VOLUME_OFFSET, // // // Relative volume change + EFT_EF_SAA_NOISE_MODE, // // // SAA1099 noise mode + EFT_EF_SID_FILTER_RESONANCE, // // // SID filter resonance + EFT_EF_SID_FILTER_CUTOFF_HI, // // // SID filter cutoff hi + EFT_EF_SID_FILTER_CUTOFF_LO, // // // SID filter cutoff lo + EFT_EF_SID_FILTER_MODE, // // // SID filter mode + EFT_EF_SID_ENVELOPE, // // // SID envelope parameters + EFT_EF_SID_RING, // // // SID ringmod + + EFT_EF_COUNT +}; + +const int eftEffectMap[] = { -1, // none 0x0f, 0x0b, @@ -45,288 +205,704 @@ const int ftEffectMap[]={ 0x02, // porta down 0x12, 0x90, // sample offset - not supported yet - 0xe1, - 0xe2, + 0xe1, // Slide up + 0xe2, // Slide down 0x0a, 0xec, 0x0c, - -1, // delayed volume - not supported yet - 0x11, // FDS - 0x12, - 0x13, - 0x20, // DPCM pitch - 0x22, // 5B - 0x24, - 0x23, - 0x21, - -1, // VRC7 "custom patch port" - not supported? - -1, // VRC7 "custom patch write" - -1, // release - not supported yet - 0x09, // select groove - -1, // transpose - not supported - 0x10, // Namco 163 - -1, // FDS vol env - not supported - -1, // FDS auto FM - not supported yet - -1, // phase reset - not supported - -1, // harmonic - not supported + -1, // delayed volume - not supported yet + 0x11, // FDS modulation depth + 0x12, // FDS modulation speed hi + 0x13, // FDS modulation speed lo + 0x20, // DPCM pitch + 0x22, // Sunsoft envelope type + 0x24, // Sunsoft envelope high + 0x23, // Sunsoft envelope low + 0x21, // 050B Sunsoft noise period + 0x12, // // // AY8930 pulse width + 0x27, // // // AY8930 noise AND mask + 0x28, // // // AY8930 noise OR mask + 0x100, // // // AY8930 extra volume bit + -1, // VRC7 "custom patch port" - not supported? + -1, // VRC7 "custom patch write" + 0xe7, // delayed release - not supported yet + 0x09, // select groove + 0xe6, // delayed note transpose + 0x11, // Namco 163 wave RAM offset + -1, // FDS vol env - not supported + -1, // FDS auto FM - not supported yet + -1, // phase reset - not supported + -1, // harmonic - not supported + -1, // // // Pulse width modulation effect + -1, // // // Relative volume change + -1, // // // SAA1099 noise mode + 0x13, // // // SID filter resonance + 0x40, // // // SID filter cutoff hi + 0x40, // // // SID filter cutoff lo + 0x14, // // // SID filter mode + -1, // // // SID envelope parameters + -1, // // // SID ringmod }; -constexpr int ftEffectMapSize=sizeof(ftEffectMap)/sizeof(int); +const int eff_conversion_050[][2] = { + {FT_EF_SUNSOFT_NOISE, FT_EF_NOTE_RELEASE}, + {FT_EF_VRC7_PORT, FT_EF_GROOVE}, + {FT_EF_VRC7_WRITE, FT_EF_TRANSPOSE}, + {FT_EF_NOTE_RELEASE, FT_EF_N163_WAVE_BUFFER}, + {FT_EF_GROOVE, FT_EF_FDS_VOLUME}, + {FT_EF_TRANSPOSE, FT_EF_FDS_MOD_BIAS}, + {FT_EF_N163_WAVE_BUFFER, FT_EF_SUNSOFT_NOISE}, + {FT_EF_FDS_VOLUME, FT_EF_VRC7_PORT}, + {FT_EF_FDS_MOD_BIAS, FT_EF_VRC7_WRITE}, + {0xFF, 0xFF}, // end mark +}; -bool DivEngine::loadFTM(unsigned char* file, size_t len) { - SafeReader reader=SafeReader(file,len); - warnings=""; +constexpr int ftEffectMapSize = sizeof(ftEffectMap) / sizeof(int); + +int convertMacros2A03[5] = {(int)DIV_MACRO_VOL, (int)DIV_MACRO_ARP, (int)DIV_MACRO_PITCH, -1, (int)DIV_MACRO_DUTY}; +int convertMacrosVRC6[5] = {(int)DIV_MACRO_VOL, (int)DIV_MACRO_ARP, (int)DIV_MACRO_PITCH, -1, (int)DIV_MACRO_DUTY}; +int convertMacrosN163[5] = {(int)DIV_MACRO_VOL, (int)DIV_MACRO_ARP, (int)DIV_MACRO_PITCH, -1, (int)DIV_MACRO_WAVE}; +int convertMacros5B[5] = {(int)DIV_MACRO_VOL, (int)DIV_MACRO_ARP, (int)DIV_MACRO_PITCH, -1, (int)DIV_MACRO_DUTY}; + +int convertMacrosSID[5] = {(int)DIV_MACRO_VOL, (int)DIV_MACRO_ARP, (int)DIV_MACRO_PITCH, -1, (int)DIV_MACRO_WAVE}; + +int convert_vrc6_duties[4] = {1, 3, 7, 3}; + +void copyMacro(DivInstrument* ins, DivInstrumentMacro* from, int macro_type, int setting) { + DivInstrumentMacro* to = NULL; + + switch (ins->type) { + case DIV_INS_NES: { + if (convertMacros2A03[macro_type] == -1) + return; + to = ins->std.macroByType((DivMacroType)convertMacros2A03[macro_type]); + break; + } + case DIV_INS_VRC6: { + if (convertMacrosVRC6[macro_type] == -1) + return; + to = ins->std.macroByType((DivMacroType)convertMacros2A03[macro_type]); + break; + } + case DIV_INS_N163: { + if (convertMacrosVRC6[macro_type] == -1) + return; + to = ins->std.macroByType((DivMacroType)convertMacrosN163[macro_type]); + break; + } + case DIV_INS_AY: { + if (convertMacrosVRC6[macro_type] == -1) + return; + to = ins->std.macroByType((DivMacroType)convertMacros5B[macro_type]); + break; + } + case DIV_INS_C64: { + if (convertMacrosVRC6[macro_type] == -1) + return; + to = ins->std.macroByType((DivMacroType)convertMacrosSID[macro_type]); + break; + } + default: + break; + } + + if (to == NULL) + return; + + for (int i = 0; i < 256; i++) { + to->val[i] = from->val[i]; + + if ((DivMacroType)convertMacros2A03[macro_type] == DIV_MACRO_ARP) { + if (setting == 0) // absolute + { + if (to->val[i] > 0x60) { + int temp = to->val[i]; + to->val[i] = -1 * (0xff - temp + 1); // 2s complement integer my beloved + } + } + + if (setting == 1) // fixed + { + to->val[i] |= (1 << 30); // 30th bit in Furnace arp macro marks fixed mode + } + } + + if ((DivMacroType)convertMacros2A03[macro_type] == DIV_MACRO_PITCH) { + if (setting == 0 || setting == 1) // relative/absolute + { + int temp = to->val[i]; + + if (temp < 0x80) { + to->val[i] = -1 * temp; + } else { + to->val[i] = (0x100 - temp); + } + } + } + + if ((DivMacroType)convertMacrosN163[macro_type] == DIV_MACRO_WAVE && ins->type == DIV_INS_N163) { + to->val[i] |= (1 << 30); // referencing local wavetables! + } + + if ((DivMacroType)convertMacrosN163[macro_type] == DIV_MACRO_PITCH && (ins->type == DIV_INS_N163 || ins->type == DIV_INS_C64)) { + to->val[i] *= -1; // wtf is going on!!! + } + } + + to->len = from->len; + to->delay = from->delay; + to->lenMemory = from->lenMemory; + to->mode = from->mode; + to->rel = from->rel; + to->speed = from->speed; + to->loop = from->loop; + to->open = from->open; + + if ((DivMacroType)convertMacros2A03[macro_type] == DIV_MACRO_ARP) { + if (setting == 1) // fixed + { + if (to->loop == 255) // no loop + { + to->len++; + to->val[to->len - 1] = 0; // return to orig pitch (relative mode, 0 offset) + } + } + } + + if ((DivMacroType)convertMacros2A03[macro_type] == DIV_MACRO_PITCH) { + if (setting == 0) // relative + { + to->mode = 1; // setting relative mode + } + } + + if (ins->type == DIV_INS_AY && macro_type == 4) // S5B noise/mode macro combines noise freq and tone/env/noise settings, so we need to separate them into two macros + { + DivInstrumentMacro* wave = &ins->std.waveMacro; + to = &ins->std.dutyMacro; + + wave->len = to->len; + wave->delay = to->delay; + wave->lenMemory = to->lenMemory; + wave->mode = to->mode; + wave->rel = to->rel; + wave->speed = to->speed; + wave->loop = to->loop; + wave->open = to->open; + + for (int i = 0; i < to->len; i++) { + // ? ? ? ? + + logI("%02X", to->val[i]); + wave->val[i] = 0; + + int temp = 0; + + if (to->val[i] & 0b10000000) // noise + { + temp |= 2; + } + if (to->val[i] & 0b01000000) // tone + { + temp |= 1; + } + if (to->val[i] & 0b00100000) // envelope + { + temp |= 4; + } + + wave->val[i] = temp; + + // #define S5B_ENVL 0b10000000 + // #define S5B_TONE 0b01000000 + // #define S5B_NOIS 0b00100000 + + to->val[i] = to->val[i] & 31; + } + } +} + +bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_sig, bool eft) { + SafeReader reader = SafeReader(file, len); + warnings = ""; try { DivSong ds; String blockName; - unsigned char expansions=0; - unsigned int tchans=0; - unsigned int n163Chans=0; + unsigned int expansions = 0; + unsigned int tchans = 0; + unsigned int n163Chans = 0; bool hasSequence[256][8]; unsigned char sequenceIndex[256][8]; - unsigned int hilightA=4; - unsigned int hilightB=16; - double customHz=60; - - memset(hasSequence,0,256*8*sizeof(bool)); - memset(sequenceIndex,0,256*8); + unsigned char macro_types[256][8]; + std::vector> macros; + unsigned char map_channels[DIV_MAX_CHANS]; + unsigned int hilightA = 4; + unsigned int hilightB = 16; + double customHz = 60; - if (!reader.seek(18,SEEK_SET)) { + unsigned char fds_chan = 0xff; + unsigned char vrc6_saw_chan = 0xff; + unsigned char n163_chans[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + unsigned char vrc7_chans[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + + // these two seem to go unused, but why? + unsigned char vrc6_chans[2] = {0xff, 0xff}; + unsigned char mmc5_chans[2] = {0xff, 0xff}; + + int total_chans = 0; + + memset(hasSequence, 0, 256 * 8 * sizeof(bool)); + memset(sequenceIndex, 0, 256 * 8); + memset(macro_types, 0, 256 * 8); + memset(map_channels, 0xfe, DIV_MAX_CHANS * sizeof(unsigned char)); + + for (int i = 0; i < 256; i++) { + std::vector mac; + + for (int j = 0; j < 8; j++) { + mac.push_back(DivInstrumentMacro(DIV_MACRO_VOL)); + } + + macros.push_back(mac); + } + + if (!reader.seek((dnft && dnft_sig) ? 21 : 18, SEEK_SET)) { logE("premature end of file!"); - lastError="incomplete file"; + lastError = "incomplete file"; delete[] file; return false; } - ds.version=(unsigned short)reader.readI(); - logI("module version %d (0x%.4x)",ds.version,ds.version); + ds.version = (unsigned short)reader.readI(); + logI("module version %d (0x%.4x)", ds.version, ds.version); - if (ds.version>0x0450) { - logE("incompatible version %x!",ds.version); - lastError="incompatible version"; + if ((ds.version > 0x0450 && !eft) || (eft && ds.version > 0x0460)) { + logE("incompatible version %x!", ds.version); + lastError = "incompatible version"; delete[] file; return false; } - for (DivSubSong* i: ds.subsong) { + for (DivSubSong* i : ds.subsong) { i->clearData(); delete i; } ds.subsong.clear(); - ds.linearPitch=0; + ds.linearPitch = 0; + + unsigned int pal = 0; while (true) { - blockName=reader.readString(3); - if (blockName=="END") { + blockName = reader.readString(3); + if (blockName == "END") { // end of module logD("end of data"); break; } // not the end - reader.seek(-3,SEEK_CUR); - blockName=reader.readString(16); - unsigned int blockVersion=(unsigned int)reader.readI(); - unsigned int blockSize=(unsigned int)reader.readI(); - size_t blockStart=reader.tell(); - - logD("reading block %s (version %d, %d bytes)",blockName,blockVersion,blockSize); - if (blockName=="PARAMS") { + reader.seek(-3, SEEK_CUR); + blockName = reader.readString(16); + unsigned int blockVersion = (unsigned int)reader.readI(); + unsigned int blockSize = (unsigned int)reader.readI(); + size_t blockStart = reader.tell(); + + logD("reading block %s (version %d, %d bytes, position %x)", blockName, blockVersion, blockSize, reader.tell()); + if (blockName == "PARAMS") { // versions 7-9 don't change anything? CHECK_BLOCK_VERSION(9); - unsigned int oldSpeedTempo=0; - if (blockVersion<=1) { - oldSpeedTempo=reader.readI(); + unsigned int oldSpeedTempo = 0; + if (blockVersion <= 1) { + oldSpeedTempo = reader.readI(); } - if (blockVersion>=2) { - expansions=reader.readC(); + if (blockVersion >= 2) { + if (eft) { + if (blockVersion < 7) { + expansions = reader.readC(); + } else { + expansions = reader.readI(); + } + } else { + expansions = reader.readC(); + } } - tchans=reader.readI(); - unsigned int pal=reader.readI(); - if (blockVersion>=7) { - // advanced Hz control - int controlType=reader.readI(); - switch (controlType) { - case 1: - customHz=1000000.0/(double)reader.readI(); - break; - default: - reader.readI(); - break; + + tchans = reader.readI(); + + if (tchans == 5) { + expansions = 0; // This is strange. Sometimes expansion chip is set to 0xFF in files + } + + pal = reader.readI(); + if (!eft) { + if (blockVersion >= 7) { + // advanced Hz control + int controlType = reader.readI(); + switch (controlType) { + case 1: + customHz = 1000000.0 / (double)reader.readI(); + break; + default: + reader.readI(); + break; + } + } else { + customHz = reader.readI(); } } else { - customHz=reader.readI(); - } - unsigned int newVibrato=0; - bool sweepReset=false; - unsigned int speedSplitPoint=0; - if (blockVersion>=3) { - newVibrato=reader.readI(); - } - if (blockVersion>=9) { - sweepReset=reader.readI(); - } - if (blockVersion>=4 && blockVersion<7) { - hilightA=reader.readI(); - hilightB=reader.readI(); - } - if (expansions&8) if (blockVersion>=5) { // N163 channels - n163Chans=reader.readI(); - } - if (blockVersion>=6) { - speedSplitPoint=reader.readI(); + customHz = reader.readI(); } - if (blockVersion>=8) { - int fineTuneCents=reader.readC()*100; - fineTuneCents+=reader.readC(); - - ds.tuning=440.0*pow(2.0,(double)fineTuneCents/1200.0); + unsigned int newVibrato = 0; + bool sweepReset = false; + unsigned int speedSplitPoint = 0; + if (blockVersion >= 3) { + newVibrato = reader.readI(); + } + if (blockVersion >= 9) { + sweepReset = reader.readI(); + } + if (eft) { + if (blockVersion >= 4 && blockVersion <= 7) { + hilightA = reader.readI(); + hilightB = reader.readI(); + } + } else { + if (blockVersion >= 4 && blockVersion < 7) { + hilightA = reader.readI(); + hilightB = reader.readI(); + } } - logV("old speed/tempo: %d",oldSpeedTempo); - logV("expansions: %x",expansions); - logV("channels: %d",tchans); - logV("PAL: %d",pal); - logV("custom Hz: %f",customHz); - logV("new vibrato: %d",newVibrato); - logV("N163 channels: %d",n163Chans); - logV("highlight 1: %d",hilightA); - logV("highlight 2: %d",hilightB); - logV("split point: %d",speedSplitPoint); - logV("sweep reset: %d",sweepReset); + if ((expansions & 16) && blockVersion >= 5) { // N163 channels + n163Chans = reader.readI(); + } + if (blockVersion >= 6) { + speedSplitPoint = reader.readI(); + } + + if (blockVersion == 8) { + int fineTuneCents = reader.readC() * 100; + fineTuneCents += reader.readC(); + + ds.tuning = 440.0 * pow(2.0, (double)fineTuneCents / 1200.0); + + logV("detune: %d", fineTuneCents); + } + + logV("old speed/tempo: %d", oldSpeedTempo); + logV("expansions: %x", expansions); + logV("channels: %d", tchans); + logV("PAL: %d", pal); + logV("custom Hz: %f", customHz); + logV("new vibrato: %d", newVibrato); + logV("N163 channels: %d", n163Chans); + logV("highlight 1: %d", hilightA); + logV("highlight 2: %d", hilightB); + logV("split point: %d", speedSplitPoint); + logV("sweep reset: %d", sweepReset); + + //addWarning("FamiTracker import is experimental."); // initialize channels - int systemID=0; - ds.system[systemID++]=DIV_SYSTEM_NES; - if (expansions&1) { - ds.system[systemID++]=DIV_SYSTEM_VRC6; - } - if (expansions&2) { - ds.system[systemID++]=DIV_SYSTEM_VRC7; - } - if (expansions&4) { - ds.system[systemID++]=DIV_SYSTEM_FDS; - } - if (expansions&8) { - ds.system[systemID++]=DIV_SYSTEM_MMC5; - } - if (expansions&16) { - ds.system[systemID]=DIV_SYSTEM_N163; - ds.systemFlags[systemID++].set("channels",(int)n163Chans); - } - if (expansions&32) { - ds.system[systemID]=DIV_SYSTEM_AY8910; - ds.systemFlags[systemID++].set("chipType",2); // Sunsoft 5B - } - ds.systemLen=systemID; + int systemID = 0; - unsigned int calcChans=0; - for (int i=0; iDIV_MAX_CHANS) { - tchans=DIV_MAX_CHANS; - logW("too many channels!"); - } - } else if (blockName=="INFO") { - CHECK_BLOCK_VERSION(1); - ds.name=reader.readString(32); - ds.author=reader.readString(32); - ds.category=reader.readString(32); - ds.systemName="NES"; - } else if (blockName=="HEADER") { - CHECK_BLOCK_VERSION(4); - unsigned char totalSongs=reader.readC(); - logV("%d songs:",totalSongs+1); - ds.subsong.reserve(totalSongs); - for (int i=0; i<=totalSongs; i++) { - String subSongName=reader.readString(); - ds.subsong.push_back(new DivSubSong); - ds.subsong[i]->name=subSongName; - ds.subsong[i]->hilightA=hilightA; - ds.subsong[i]->hilightB=hilightB; - if (customHz!=0) { - ds.subsong[i]->hz=customHz; + + if (expansions & 1) { + ds.system[systemID++] = DIV_SYSTEM_VRC6; + + for (int ch = 0; ch < 3; ch++) { + map_channels[curr_chan] = map_ch; + + if (ch < 2) { + vrc6_chans[ch] = map_ch; + logV("%d",vrc6_chans[ch]); + } + + curr_chan++; + map_ch++; } - logV("- %s",subSongName); + + vrc6_saw_chan = map_ch - 1; } - for (unsigned int i=0; ipat[i].effectCols=effectCols+1; - logV("- song %d has %d effect columns",j,effectCols); + if (expansions & 8) { + ds.system[systemID++] = DIV_SYSTEM_MMC5; + + for (int ch = 0; ch < (eft ? 3 : 2); ch++) { + map_channels[curr_chan] = map_ch; + + if (ch < 2) { + mmc5_chans[ch] = map_ch; + logV("%d",mmc5_chans[ch]); + } + + curr_chan++; + map_ch++; + } + + if (!eft) { + map_channels[curr_chan] = map_ch; // do not populate and skip MMC5 PCM channel! + map_ch++; } } + if (expansions & 16) { + ds.system[systemID] = DIV_SYSTEM_N163; + ds.systemFlags[systemID].set("channels", (int)n163Chans - 1); + systemID++; - if (blockVersion>=4) { - for (int i=0; i<=totalSongs; i++) { - ds.subsong[i]->hilightA=(unsigned char)reader.readC(); - ds.subsong[i]->hilightB=(unsigned char)reader.readC(); + for (int ch = 0; ch < (int)n163Chans; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + n163_chans[ch] = map_ch; + map_ch++; + } + + for (int ch = 0; ch < (8 - (int)n163Chans); ch++) { + map_channels[curr_chan] = map_ch; // do not populate and skip the missing N163 channels! + map_ch++; } } - } else if (blockName=="INSTRUMENTS") { - CHECK_BLOCK_VERSION(6); + if (expansions & 4) { + ds.system[systemID++] = DIV_SYSTEM_FDS; - reader.seek(blockSize,SEEK_CUR); + map_channels[curr_chan] = map_ch; + fds_chan = map_ch; + curr_chan++; + map_ch++; + } + if (expansions & 2) { + ds.system[systemID++] = DIV_SYSTEM_VRC7; - /* - ds.insLen=reader.readI(); - if (ds.insLen<0 || ds.insLen>256) { - logE("too many instruments/out of range!"); - lastError="too many instruments/out of range"; - delete[] file; - return false; + for (int ch = 0; ch < 6; ch++) { + map_channels[curr_chan] = map_ch; + vrc7_chans[ch] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 32) { + ds.system[systemID] = DIV_SYSTEM_AY8910; + ds.systemFlags[systemID++].set("chipType", 2); // Sunsoft 5B + + for (int ch = 0; ch < 3; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 64) { + ds.system[systemID++] = DIV_SYSTEM_AY8930; + + for (int ch = 0; ch < 3; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 128) { + ds.system[systemID++] = DIV_SYSTEM_SAA1099; + + for (int ch = 0; ch < 6; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 256) { + // TODO: change when 5E01 is added + ds.system[systemID++] = DIV_SYSTEM_NES; + + for (int ch = 0; ch < 5; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 512) { + ds.system[systemID++] = DIV_SYSTEM_C64_6581; + + for (int ch = 0; ch < 3; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 1024) { + ds.system[systemID++] = DIV_SYSTEM_C64_8580; + + for (int ch = 0; ch < 3; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + if (expansions & 2048) { + ds.system[systemID++] = DIV_SYSTEM_POKEY; + + for (int ch = 0; ch < 4; ch++) { + map_channels[curr_chan] = map_ch; + curr_chan++; + map_ch++; + } + } + ds.systemLen = systemID; + + for (int i = 0; i < curr_chan; i++) { + logV("map ch: fami ch %d mapped to furnace ch %d", i, map_channels[i]); } - for (int i=0; i=ds.ins.size()) { - logE("instrument index %d is out of range!",insIndex); - lastError="instrument index out of range"; + calcChans += getChannelCount(ds.system[i]); + total_chans += getChannelCount(ds.system[i]); + + if (ds.system[i] == DIV_SYSTEM_N163) { + calcChans -= getChannelCount(ds.system[i]); + calcChans += (int)n163Chans; + } + } + if (calcChans != tchans) { + if (!eft || (eft && (expansions & 8) == 0)) // ignore since I have no idea how to tell apart E-FT versions which do or do not have PCM chan. Yes, this may lead to all the righer channels to be shifted but at least you still get note data! + { + logE("channel counts do not match! %d != %d", tchans, calcChans); + lastError = "channel counts do not match"; delete[] file; return false; } + } + if (tchans > DIV_MAX_CHANS) { + tchans = DIV_MAX_CHANS; + logW("too many channels!"); + } + if (blockVersion == 9 && blockSize - (reader.tell() - blockStart) == 2) // weird + { + reader.seek(2, SEEK_CUR); + } + if (eft) { + // reader.seek(8,SEEK_CUR); + } - DivInstrument* ins=ds.ins[insIndex]; - unsigned char insType=reader.readC(); + } else if (blockName == "INFO") { + CHECK_BLOCK_VERSION(1); + ds.name = reader.readString(32); + ds.author = reader.readString(32); + ds.copyright = reader.readString(32); + ds.systemName = "NES"; + } else if (blockName == "HEADER") { + CHECK_BLOCK_VERSION(4); + unsigned char totalSongs = reader.readC(); + logV("%d songs:", totalSongs + 1); + ds.subsong.reserve(totalSongs); + for (int i = 0; i <= totalSongs; i++) { + String subSongName = reader.readString(); + ds.subsong.push_back(new DivSubSong); + ds.subsong[i]->name = subSongName; + ds.subsong[i]->hilightA = hilightA; + ds.subsong[i]->hilightB = hilightB; + if (customHz != 0) { + ds.subsong[i]->hz = customHz; + + ds.subsong[i]->virtualTempoN = (short)(150.0 / (float)customHz * (pal ? (50.0) : (60.0))); + } + logV("- %s", subSongName); + } + for (unsigned int i = 0; i < tchans; i++) { + // TODO: obey channel ID + unsigned char chID = reader.readC(); + logV("for channel ID %d", chID); + for (int j = 0; j <= totalSongs; j++) { + unsigned char effectCols = reader.readC(); + + if (map_channels[i] == 0xfe) { + ds.subsong[j]->pat[i].effectCols = 1; + logV("- song %d has %d effect columns", j, effectCols); + } else { + ds.subsong[j]->pat[map_channels[i]].effectCols = effectCols + 1; + logV("- song %d has %d effect columns", j, effectCols); + } + } + } + + if (blockVersion >= 4) { + for (int i = 0; i <= totalSongs; i++) { + ds.subsong[i]->hilightA = (unsigned char)reader.readC(); + ds.subsong[i]->hilightB = (unsigned char)reader.readC(); + } + } + } else if (blockName == "INSTRUMENTS") { + CHECK_BLOCK_VERSION(9); + + // reader.seek(blockSize,SEEK_CUR); + + ds.insLen = reader.readI(); + if (ds.insLen < 0 || ds.insLen > 256) { + logE("too many instruments/out of range!"); + lastError = "too many instruments/out of range"; + delete[] file; + return false; + } + + for (int i = 0; i < 128; i++) { + DivInstrument* ins = new DivInstrument; + ds.ins.push_back(ins); + ds.ins[i]->type = DIV_INS_FM; + } + + logV("instruments:"); + for (int i = 0; i < ds.insLen; i++) { + unsigned int insIndex = reader.readI(); + if (insIndex >= ds.ins.size()) { + // logE("instrument index %d is out of range!",insIndex); + // lastError="instrument index out of range"; + // delete[] file; + // return false; + } + + DivInstrument* ins = ds.ins[insIndex]; + unsigned char insType = reader.readC(); switch (insType) { case 1: - ins->type=DIV_INS_NES; + ins->type = DIV_INS_NES; break; - case 2: // TODO: tell VRC6 and VRC6 saw instruments apart - ins->type=DIV_INS_VRC6; + case 2: + ins->type = DIV_INS_VRC6; break; - case 3: - ins->type=DIV_INS_OPLL; + case 3: // VRC7 + ins->type = DIV_INS_OPLL; break; case 4: - ins->type=DIV_INS_FDS; + ins->type = DIV_INS_FDS; break; case 5: - ins->type=DIV_INS_N163; + ins->type = DIV_INS_N163; break; - case 6: // 5B? - ins->type=DIV_INS_AY; + case 6: // 5B + ins->type = DIV_INS_AY; + break; + case 7: // 6581 SID + ins->type = DIV_INS_C64; break; default: { - logE("%d: invalid instrument type %d",insIndex,insType); - lastError="invalid instrument type"; + logE("%d: invalid instrument type %d", insIndex, insType); + lastError = "invalid instrument type"; delete[] file; return false; } @@ -335,253 +911,1470 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len) { // instrument data switch (ins->type) { case DIV_INS_NES: { - unsigned int totalSeqs=reader.readI(); - if (totalSeqs>5) { - logE("%d: too many sequences!",insIndex); - lastError="too many sequences"; + unsigned int totalSeqs = reader.readI(); + if (totalSeqs > 5) { + logE("%d: too many sequences!", insIndex); + lastError = "too many sequences"; delete[] file; return false; } - for (unsigned int j=0; j=2)?96:72; - for (int j=0; jamiga.noteMap[j].map=(short)((unsigned char)reader.readC())-1; - ins->amiga.noteMap[j].freq=(unsigned char)reader.readC(); - if (blockVersion>=6) { - reader.readC(); // DMC value + int dpcmNotes = (blockVersion >= 2) ? 96 : 72; + + if (blockVersion >= 7) { + unsigned int notes = reader.readI(); + dpcmNotes = notes; + } + + for (int j = 0; j < dpcmNotes; j++) { + int note = j; + if (blockVersion >= 7) { + note = reader.readC(); } + ins->amiga.noteMap[note].map = (short)((unsigned char)reader.readC()) - 1; + unsigned char freq = reader.readC(); + ins->amiga.noteMap[note].dpcmFreq = (freq & 15); // 0-15 = 0-15 unlooped, 128-143 = 0-15 looped + ins->amiga.noteMap[note].freq = (freq & 0x80) ? 1 : 0; // loop + if (blockVersion >= 6) { + ins->amiga.noteMap[note].dpcmDelta = (unsigned char)reader.readC(); // DMC value + } + } + + ins->amiga.useSample = true; + ins->amiga.useNoteMap = true; + + bool empty_note_map = true; + + for (int j = 0; j < dpcmNotes; j++) { + if (ins->amiga.noteMap[j].map != -1) { + empty_note_map = false; + } + } + + if (empty_note_map) { + ins->amiga.useSample = false; + ins->amiga.useNoteMap = false; + ins->amiga.initSample = -1; } break; } case DIV_INS_VRC6: { - unsigned int totalSeqs=reader.readI(); - if (totalSeqs>4) { - logE("%d: too many sequences!",insIndex); - lastError="too many sequences"; + unsigned int totalSeqs = reader.readI(); + if (totalSeqs > 5) { + logE("%d: too many sequences!", insIndex); + lastError = "too many sequences"; delete[] file; return false; } - for (unsigned int j=0; jfm.opllPreset=(unsigned int)reader.readI(); - // TODO + ins->fm.opllPreset = (unsigned int)reader.readI(); + + unsigned char custom_patch[8] = {0}; + + for (int i = 0; i < 8; i++) { + custom_patch[i] = reader.readC(); + } + + for (int i = 0; i < 2; i++) { + ins->fm.op[i].am = custom_patch[i] >> 7; + ins->fm.op[i].vib = (custom_patch[i] >> 6) & 1; + ins->fm.op[i].ssgEnv = ((custom_patch[i] >> 5) & 1) << 3; + ins->fm.op[i].ksr = (custom_patch[i] >> 4) & 1; + + ins->fm.op[i].mult = custom_patch[i] & 15; + + ins->fm.op[i].ksl = custom_patch[i + 2] >> 6; + + ins->fm.op[i].ar = custom_patch[i + 4] >> 4; + ins->fm.op[i].dr = custom_patch[i + 4] & 15; + + ins->fm.op[i].sl = custom_patch[i + 6] >> 4; + ins->fm.op[i].rr = custom_patch[i + 6] & 15; + } + + ins->fm.fms = (custom_patch[3] >> 4) & 1; + ins->fm.ams = (custom_patch[3] >> 3) & 1; + ins->fm.fb = custom_patch[3] & 7; + + ins->fm.op[0].tl = custom_patch[2] & 0x3f; + ins->fm.op[1].tl = 0; break; } case DIV_INS_FDS: { - DivWavetable* wave=new DivWavetable; - wave->len=64; - wave->max=64; - for (int j=0; j<64; j++) { - wave->data[j]=reader.readC(); + DivWavetable* wave = new DivWavetable; + wave->len = 64; + wave->max = 63; + for (int j = 0; j < 64; j++) { + wave->data[j] = reader.readC(); } - ins->std.waveMacro.len=1; - ins->std.waveMacro.val[0]=ds.wave.size(); - for (int j=0; j<32; j++) { - ins->fds.modTable[j]=reader.readC()-3; + ins->std.waveMacro.len = 1; + ins->std.waveMacro.val[0] = ds.wave.size(); + for (int j = 0; j < 32; j++) { + ins->fds.modTable[j] = reader.readC() - 3; } - ins->fds.modSpeed=reader.readI(); - ins->fds.modDepth=reader.readI(); + ins->fds.modSpeed = reader.readI(); + ins->fds.modDepth = reader.readI(); reader.readI(); // this is delay. currently ignored. TODO. ds.wave.push_back(wave); + ds.waveLen++; - ins->std.volMacro.len=reader.readC(); - ins->std.volMacro.loop=reader.readI(); - ins->std.volMacro.rel=reader.readI(); - reader.readI(); // arp mode does not apply here - for (int j=0; jstd.volMacro.len; j++) { - ins->std.volMacro.val[j]=reader.readC(); - } + unsigned int a = reader.readI(); + unsigned int b = reader.readI(); - ins->std.arpMacro.len=reader.readC(); - ins->std.arpMacro.loop=reader.readI(); - ins->std.arpMacro.rel=reader.readI(); - // TODO: get rid - ins->std.arpMacro.mode=reader.readI(); - for (int j=0; jstd.arpMacro.len; j++) { - ins->std.arpMacro.val[j]=reader.readC(); - } + reader.seek(-8, SEEK_CUR); - ins->std.pitchMacro.len=reader.readC(); - ins->std.pitchMacro.loop=reader.readI(); - ins->std.pitchMacro.rel=reader.readI(); - reader.readI(); // arp mode does not apply here - for (int j=0; jstd.pitchMacro.len; j++) { - ins->std.pitchMacro.val[j]=reader.readC(); + if (a < 256 && (b & 0xFF) != 0x00) { + // don't look at me like this. I don't know why this should be like this either! + } else { + ins->std.volMacro.len = reader.readC(); + ins->std.volMacro.loop = reader.readI(); + ins->std.volMacro.rel = reader.readI(); + reader.readI(); // arp mode does not apply here + for (int j = 0; j < ins->std.volMacro.len; j++) { + ins->std.volMacro.val[j] = reader.readC(); + + if (blockVersion <= 3) { + ins->std.volMacro.val[j] *= 2; + } + } + + ins->std.arpMacro.len = reader.readC(); + ins->std.arpMacro.loop = reader.readI(); + ins->std.arpMacro.rel = reader.readI(); + unsigned int mode = reader.readI(); + for (int j = 0; j < ins->std.arpMacro.len; j++) { + ins->std.arpMacro.val[j] = reader.readC(); + + if (mode == 1) // fixed arp + { + ins->std.arpMacro.val[j] |= (1 << 30); + } + } + + if (blockVersion >= 3) { + ins->std.pitchMacro.len = reader.readC(); + ins->std.pitchMacro.loop = reader.readI(); + ins->std.pitchMacro.rel = reader.readI(); + reader.readI(); // arp mode does not apply here + for (int j = 0; j < ins->std.pitchMacro.len; j++) { + ins->std.pitchMacro.val[j] = reader.readC(); + + int temp_val = ins->std.pitchMacro.val[j]; + int temp = temp_val; + + if (temp_val < 0x80) { + ins->std.pitchMacro.val[j] = temp; + } else { + ins->std.pitchMacro.val[j] = -1 * (0x100 - temp); + } + } + + if (mode == 0) // relative + { + ins->std.pitchMacro.mode = 1; // setting relative mode + } + } } break; } - case DIV_INS_N163: { - // TODO! + case DIV_INS_N163: { // TODO: add local wavetables and finish this! + unsigned int totalSeqs = reader.readI(); + if (totalSeqs > 5) { + logE("%d: too many sequences!", insIndex); + lastError = "too many sequences"; + delete[] file; + return false; + } + + for (unsigned int j = 0; j < totalSeqs; j++) { + hasSequence[insIndex][j] = reader.readC(); + sequenceIndex[insIndex][j] = reader.readC(); + } + + unsigned int wave_size = reader.readI(); + unsigned int wave_pos = reader.readI(); + ins->n163.waveLen = wave_size; + ins->n163.wavePos = wave_pos; + + if (blockVersion >= 8) { + unsigned int autopos = reader.readI(); + (void)autopos; + } + + unsigned int wave_count = reader.readI(); + + for (unsigned int ii = 0; ii < wave_count; ii++) { + DivWavetable* wave = new DivWavetable(); + wave->len = wave_size; + wave->max = 15; + + for (unsigned int jj = 0; jj < wave_size; jj++) { + unsigned char val = reader.readC(); + wave->data[jj] = val; + } + + // TODO: port to global waves + //ins->std.local_waves.push_back(wave); + delete wave; + } + + if (ins->std.waveMacro.len == 0) // empty wave macro + { + ins->std.waveMacro.len = 1; + ins->std.waveMacro.val[0] = 0 | (1 << 30); // force local wave number 0 + } + break; } - // TODO: 5B! + + case DIV_INS_AY: { + unsigned int totalSeqs = reader.readI(); + if (totalSeqs > 5) { + logE("%d: too many sequences!", insIndex); + lastError ="too many sequences"; + delete[] file; + return false; + } + + for (unsigned int j = 0; j < totalSeqs; j++) { + hasSequence[insIndex][j] = reader.readC(); + sequenceIndex[insIndex][j] = reader.readC(); + } + + break; + } + + case DIV_INS_C64: { + unsigned int instVersion = reader.readI(); + logV("C64 inst version %d", instVersion); + + int seek_amount = 94 - 4; + + if (instVersion <= 255) { + unsigned char ad = reader.readC(); + unsigned char sr = reader.readC(); + ins->c64.a = ad >> 4; + ins->c64.d = ad & 15; + ins->c64.s = sr >> 4; + ins->c64.r = sr & 15; + + ins->c64.pulseOn = true; + ins->c64.sawOn = false; + + seek_amount -= 2; + + if (instVersion >= 2) { + unsigned int pwm_start = reader.readI(); + unsigned int pwm_end = reader.readI(); + + unsigned char pwm_speed = reader.readC(); // for LFO mode * 40 / 69 * (diff / (2048 - 311)) (and divide by two for triangle mode) + unsigned char pwm_mode = reader.readC(); // for ADSR mode * 11 / 69 + + if (pwm_mode != 0) { + ins->c64.dutyIsAbs = true; + + logV("pwm mode %d", pwm_mode); + + // modes: 1 = saw lfo, 2 = tri lfo, 3 = oneshot ADSR, 4 = set val? + + ins->std.dutyMacro.len = 18; + + if (pwm_mode != 4) { + ins->std.dutyMacro.val[0] = pwm_start; + ins->std.dutyMacro.val[1] = pwm_end; + } else { + ins->std.dutyMacro.len = 1; + ins->std.dutyMacro.val[0] = pwm_end; // sequence mode, set last value + } + + if (pwm_mode == 1 || pwm_mode == 2) { + ins->std.dutyMacro.open = 4 | 1; // LFO + ins->std.dutyMacro.mode = 2; // LFO + + ins->std.dutyMacro.val[11] = (int)((uint64_t)pwm_speed * (uint64_t)40 * (uint64_t)abs((int)(pwm_start - pwm_end)) / (2048 - 311) / 69); // LFO speed + ins->std.dutyMacro.val[12] = 1; // sawtooth LFO wave + + if (pwm_mode == 2) { + ins->std.dutyMacro.val[11] = (int)((uint64_t)pwm_speed * (uint64_t)40 * (uint64_t)abs((int)(pwm_start - pwm_end)) / (2048 - 311) / 69 / 2); // LFO speed multiplied by 2 + ins->std.dutyMacro.val[12] = 0; // triangle LFO wave + } + } + + if (pwm_mode == 3) { + ins->std.dutyMacro.open = 2 | 1; // ADSR + ins->std.dutyMacro.mode = 1; // LFO + ins->std.dutyMacro.val[2] = (int)((uint64_t)pwm_speed * (uint64_t)11 * (uint64_t)abs((int)(pwm_start - pwm_end)) / (2048 - 311) / 69); // ADSR attack rate + } + } + + seek_amount -= 10; + } + + if (instVersion >= 3) { + unsigned int filter_start = reader.readI(); + unsigned int filter_end = reader.readI(); + + unsigned char filter_speed = reader.readC(); + unsigned char filter_mode = reader.readC(); + + if (filter_mode == 0) { + seek_amount -= 10; + } else { + ins->c64.filterIsAbs = true; + + // modes: 1 = saw lfo, 2 = tri lfo, 3 = oneshot ADSR, 4 = set val? + + ins->std.algMacro.len = 18; + + if (filter_mode != 4) { + ins->std.algMacro.val[0] = filter_start; + ins->std.algMacro.val[1] = filter_end; + } else { + ins->std.algMacro.len = 1; + ins->std.algMacro.val[0] = filter_end; // sequence mode, set last value + } + + if (filter_mode == 1 || filter_mode == 2) { + ins->std.algMacro.open = 4 | 1; // LFO + ins->std.algMacro.mode = 2; // LFO + + ins->std.algMacro.val[11] = (int)((uint64_t)filter_speed * (uint64_t)40 * (uint64_t)abs((int)(filter_start - filter_end)) / (2048 - 311) / 69); // LFO speed + ins->std.algMacro.val[12] = 1; // sawtooth LFO wave + + if (filter_mode == 2) { + ins->std.algMacro.val[11] = (int)((uint64_t)filter_speed * (uint64_t)40 * (uint64_t)abs((int)(filter_start - filter_end)) / (2048 - 311) / 69 / 2); // LFO speed multiplied by 2 + ins->std.algMacro.val[12] = 0; // triangle LFO wave + } + } + + if (filter_mode == 3) { + ins->std.algMacro.open = 2 | 1; // ADSR + ins->std.algMacro.mode = 1; // LFO + ins->std.algMacro.val[2] = (int)((uint64_t)filter_speed * (uint64_t)11 * (uint64_t)abs((int)(filter_start - filter_end)) / (2048 - 311) / 69); // ADSR attack rate + } + } + } + + if (instVersion >= 4) { + unsigned int totalSeqs = reader.readI(); + seek_amount -= 4; + if (totalSeqs > 5) { + logE("%d: too many sequences!", insIndex); + lastError = "too many sequences"; + delete[] file; + return false; + } + + for (unsigned int j = 0; j < totalSeqs; j++) { + hasSequence[insIndex][j] = reader.readC(); + sequenceIndex[insIndex][j] = reader.readC(); + + seek_amount -= 2; + } + } + + if (instVersion == 2) { + reader.seek(seek_amount, SEEK_CUR); // what the fuck + } + + /*for(int tti = 0; tti < 20; tti++) + { + char aaaa = reader.readC(); + logV("\'%c\'", aaaa); + }*/ + } else { + reader.seek(-4, SEEK_CUR); + } + + break; + } + default: { - logE("%d: what's going on here?",insIndex); - lastError="invalid instrument type"; + logE("%d: what's going on here?", insIndex); + lastError = "invalid instrument type"; delete[] file; return false; } } // name - ins->name=reader.readString((unsigned int)reader.readI()); - logV("- %d: %s",insIndex,ins->name); + ins->name = reader.readString((unsigned int)reader.readI()); + logV("- %d: %s", insIndex, ins->name); } - */ - } else if (blockName=="SEQUENCES") { + + ds.insLen = 128; + + } else if (blockName == "SEQUENCES") { CHECK_BLOCK_VERSION(6); - reader.seek(blockSize,SEEK_CUR); - } else if (blockName=="FRAMES") { - CHECK_BLOCK_VERSION(3); + // reader.seek(blockSize,SEEK_CUR); - for (size_t i=0; iordersLen=reader.readI(); - if (blockVersion>=3) { - s->speeds.val[0]=reader.readI(); - } - if (blockVersion>=2) { - s->virtualTempoN=reader.readI(); - s->patLen=reader.readI(); - } - int why=tchans; - if (blockVersion==1) { - why=reader.readI(); - } - logV("reading %d and %d orders",tchans,s->ordersLen); + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; - for (int j=0; jordersLen; j++) { - for (int k=0; korders.ord[k][j]=o; + unsigned int seq_count = reader.readI(); + + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; + + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + if (blockVersion == 4) { + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + } + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_NES && hasSequence[k][Types[i]]) { + copyMacro(ins, ¯os[index][type], Types[i], setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); } } } - } else if (blockName=="PATTERNS") { - CHECK_BLOCK_VERSION(6); - size_t blockEnd=reader.tell()+blockSize; + if (blockVersion == 5) // Version 5 saved the release points incorrectly, this is fixed in ver 6 + { + for (int i = 0; i < 128; i++) { + for (int j = 0; j < 5; j++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); - if (blockVersion==1) { - int patLenOld=reader.readI(); - for (DivSubSong* i: ds.subsong) { - i->patLen=patLenOld; - } - } + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][j] == i && ins->type == DIV_INS_NES && hasSequence[k][j]) { + macros[k][j].rel = release; + macro_types[k][j] = setting; - // so it appears .ftm doesn't keep track of how many patterns are stored in the file.... - while (reader.tell()=2) subs=reader.readI(); - int ch=reader.readI(); - int patNum=reader.readI(); - int numRows=reader.readI(); - - DivPattern* pat=ds.subsong[subs]->pat[ch].getPattern(patNum,true); - for (int i=0; i=2 && blockVersion<6) { // row index - row=reader.readI(); - } else { - row=reader.readC(); - } - - unsigned char nextNote=reader.readC(); - unsigned char nextOctave=reader.readC(); - if (nextNote==0x0d) { - pat->data[row][0]=100; - } else if (nextNote==0x0e) { - pat->data[row][0]=101; - } else if (nextNote==0x01) { - pat->data[row][0]=12; - pat->data[row][1]=nextOctave-1; - } else if (nextNote==0) { - pat->data[row][0]=0; - } else if (nextNote<0x0d) { - pat->data[row][0]=nextNote-1; - pat->data[row][1]=nextOctave; - } - - unsigned char nextIns=reader.readC(); - if (nextIns<0x40) { - pat->data[row][2]=nextIns; - } else { - pat->data[row][2]=-1; - } - - unsigned char nextVol=reader.readC(); - if (nextVol<0x10) { - pat->data[row][3]=nextVol; - } else { - pat->data[row][3]=-1; - } - - int effectCols=ds.subsong[subs]->pat[ch].effectCols; - if (blockVersion>=6) effectCols=4; - - for (int j=0; jdata[row][4+(j*2)]=-1; - pat->data[row][5+(j*2)]=-1; - } else { - if (nextEffectdata[row][4+(j*2)]=ftEffectMap[nextEffect]; - } else { - pat->data[row][4+(j*2)]=-1; + copyMacro(ins, ¯os[sequenceIndex[k][j]][j], j, setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)j, true), ¯os[sequenceIndex[k][j]][j], sizeof(DivInstrumentMacro)); } - pat->data[row][5+(j*2)]=nextEffectVal; } } } } - } else if (blockName=="DPCM SAMPLES") { - CHECK_BLOCK_VERSION(1); - reader.seek(blockSize,SEEK_CUR); - } else if (blockName=="SEQUENCES_VRC6") { - // where are the 5B and FDS sequences? + + if (blockVersion >= 6) // Read release points correctly stored + { + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); + + // macros[index][type].rel = release; + // macro_types[index][type] = setting; + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_NES && hasSequence[k][Types[i]]) { + macros[sequenceIndex[k][Types[i]]][Types[i]].rel = release; + macro_types[k][Types[i]] = setting; + + copyMacro(ins, ¯os[sequenceIndex[k][Types[i]]][Types[i]], Types[i], setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[k][Types[i]]][Types[i]], sizeof(DivInstrumentMacro)); + } + } + } + } + + delete[] Indices; + delete[] Types; + } else if (blockName == "GROOVES") { CHECK_BLOCK_VERSION(6); - reader.seek(blockSize,SEEK_CUR); - } else if (blockName=="SEQUENCES_N163") { + // reader.seek(blockSize,SEEK_CUR); + + unsigned char num_grooves = reader.readC(); + int max_groove = 0; + + for (int i = 0; i < 0xff; i++) { + ds.grooves.push_back(DivGroovePattern()); + } + + for (int gr = 0; gr < num_grooves; gr++) { + unsigned char index = reader.readC(); + unsigned char size = reader.readC(); + + if (index > max_groove) + max_groove = index + 1; + + DivGroovePattern gp; + gp.len = size; + + for (int sz = 0; sz < size; sz++) { + unsigned char value = reader.readC(); + gp.val[sz] = value; + } + + ds.grooves[index] = gp; + } + + ds.grooves.resize(max_groove == 0 ? 1 : max_groove); + + unsigned char subsongs = reader.readC(); + + for (int sub = 0; sub < subsongs; sub++) { + unsigned char used = reader.readC(); + + if (used) { + ds.subsong[sub]->speeds = ds.grooves[0]; + } + } + + if ((reader.tell() - blockStart) != blockSize) { + logE("block %s size does not match! block size %d curr pos %d", blockName, blockSize, reader.tell() - blockStart); + } + + } else if (blockName == "FRAMES") { + CHECK_BLOCK_VERSION(3); + + for (size_t i = 0; i < ds.subsong.size(); i++) { + DivSubSong* s = ds.subsong[i]; + + s->ordersLen = reader.readI(); + if (blockVersion >= 3) { + s->speeds.val[0] = reader.readI(); + } + if (blockVersion >= 2) { + int temp = s->virtualTempoN; + int tempo = reader.readI(); + + logV("tempo %d", tempo); + + if (tempo == 0) { + s->virtualTempoN = 150.0; // TODO: make it properly + } else { + s->virtualTempoN = (short)((float)temp * (float)tempo / 150.0); + } + + s->patLen = reader.readI(); + } + int why = tchans; + if (blockVersion == 1) { + why = reader.readI(); + } + logV("reading %d and %d orders", tchans, s->ordersLen); + + for (int j = 0; j < s->ordersLen; j++) { + for (int k = 0; k < why; k++) { + unsigned char o = reader.readC(); + // logV("%.2x",o); + s->orders.ord[map_channels[k]][j] = o; + } + } + } + } else if (blockName == "PATTERNS") { + CHECK_BLOCK_VERSION(6); + + size_t blockEnd = reader.tell() + blockSize; + + if (blockVersion == 1) { + int patLenOld = reader.readI(); + for (DivSubSong* i : ds.subsong) { + i->patLen = patLenOld; + } + } + + // so it appears .ftm doesn't keep track of how many patterns are stored in the file.... + while (reader.tell() < blockEnd) { + logV("reading pattern at %x...",reader.tell()); + int subs = 0; + if (blockVersion >= 2) + subs = reader.readI(); + int ch = reader.readI(); + int patNum = reader.readI(); + int numRows = reader.readI(); + + /* + logV("ch: %d",ch); + logV("subs: %d. map_channels[ch]: %d",subs,map_channels[ch]); + logV("patNum: %d",patNum); + logV("rows: %d",numRows); + */ + + DivPattern* pat = ds.subsong[subs]->pat[map_channels[ch]].getPattern(patNum, true); + for (int i = 0; i < numRows; i++) { + unsigned int row = 0; + if (blockVersion >= 2 && blockVersion < 6) { // row index + row = reader.readI(); + } else { + row = (unsigned char)reader.readC(); + } + + unsigned char nextNote = reader.readC(); + unsigned char nextOctave = reader.readC(); + + if (blockVersion < 5 && map_channels[ch] == fds_chan) // FDS transpose + { + nextOctave += 2; + nextOctave -= 2; + } + if (blockVersion >= 5 && map_channels[ch] == fds_chan) // FDS transpose + { + nextOctave -= 2; + } + + if (map_channels[ch] != 0xff) { + if (nextNote == 0x0d) { + pat->data[row][0] = 101; + } else if (nextNote == 0x0e) { + pat->data[row][0] = 100; + } else if (nextNote == 0x01) { + pat->data[row][0] = 12; + pat->data[row][1] = nextOctave - 1; + } else if (nextNote == 0) { + pat->data[row][0] = 0; + } else if (nextNote < 0x0d) { + pat->data[row][0] = nextNote - 1; + pat->data[row][1] = nextOctave; + } + } + + unsigned char nextIns = reader.readC(); + if (map_channels[ch] != 0xff) { + if (nextIns < 0x40 && nextNote != 0x0d && nextNote != 0x0e) { + pat->data[row][2] = nextIns; + } else { + pat->data[row][2] = -1; + } + } + + unsigned char nextVol = reader.readC(); + if (map_channels[ch] != 0xff) { + if (nextVol < 0x10) { + pat->data[row][3] = nextVol; + if (map_channels[ch] == vrc6_saw_chan) // scale volume + { + pat->data[row][3] = pat->data[row][3] * 42 / 15; + } + + if (map_channels[ch] == fds_chan) { + pat->data[row][3] = pat->data[row][3] * 31 / 15; + } + } else { + pat->data[row][3] = -1; + } + } + + int effectCols = ds.subsong[subs]->pat[map_channels[ch]].effectCols; + if (blockVersion >= 6) + effectCols = 4; + + if (ds.version == 0x020) { + effectCols = 1; + } + + unsigned char nextEffectVal = 0; + unsigned char nextEffect = 0; + + //logV("row %d effects are read at %x",row,reader.tell()); + + for (int j = 0; j < effectCols; j++) { + nextEffect = reader.readC(); + + if (nextEffect>0 && ((nextEffect < FT_EF_COUNT && !eft) || (nextEffect < EFT_EF_COUNT && eft))) { + nextEffectVal = reader.readC(); + + if (blockVersion < 3) { + if (nextEffect == FT_EF_PORTAOFF) { + nextEffect = FT_EF_PORTAMENTO; + nextEffectVal = 0; + } else if (nextEffect == FT_EF_PORTAMENTO) { + if (nextEffect < 0xFF) + nextEffectVal++; + } + } + } else if (blockVersion < 6) { + nextEffectVal = reader.readC(); + } + + // Specific for version 2.0 + if (ds.version == 0x0200 && j == 0) { + if (nextEffect == FT_EF_SPEED && nextEffectVal < 20) + nextEffectVal++; + + if (pat->data[row][3] == 0) + pat->data[row][3] = 0xf; + else { + pat->data[row][3]--; + pat->data[row][3] &= 0x0F; + } + + if (pat->data[row][0] == 0) + pat->data[row][2] = -1; + } + + if (blockVersion == 3) { + // Fix for VRC7 portamento + bool is_vrc7 = false; + + for (int vrr = 0; vrr < 6; vrr++) { + if (map_channels[ch] == vrc7_chans[vrr]) { + is_vrc7 = true; + } + } + + if (is_vrc7) { + switch (nextEffect) { + case FT_EF_PORTA_DOWN: + nextEffect = FT_EF_PORTA_UP; + break; + case FT_EF_PORTA_UP: + nextEffect = FT_EF_PORTA_DOWN; + break; + default: + break; + } + } + // FDS pitch effect fix + else if (map_channels[ch] == fds_chan) { + switch (nextEffect) { + case FT_EF_PITCH: + if (nextEffectVal != 0x80) + nextEffectVal = (0x100 - nextEffectVal) & 0xFF; + break; + default: + break; + } + } + } + + for (int v = 0; v < 8; v++) { + if (map_channels[ch] == n163_chans[v]) { + if (nextEffect == FT_EF_SAMPLE_OFFSET) { + nextEffect = FT_EF_N163_WAVE_BUFFER; + } + } + } + + if (ds.version < 0x0450 || dnft) { + unsigned char idx = 0; + + while (eff_conversion_050[idx][0] != 0xFF) // until the end of the array + { + if (nextEffect == eff_conversion_050[idx][0]) // remap the effects (0CC vs FT effects type order) bruh idk why but it should be done to correctly read some modules + { + nextEffect = eff_conversion_050[idx][1]; + + break; + } + + idx++; + } + + } + + // logW("next effect %d val %d", nextEffect, nextEffectVal); + + if (map_channels[ch] != 0xff) { + if (nextEffect == 0 && nextEffectVal == 0) { + pat->data[row][4 + (j * 2)] = -1; + pat->data[row][5 + (j * 2)] = -1; + } else { + if (nextEffect < ftEffectMapSize) { + if (eft) { + pat->data[row][4 + (j * 2)] = eftEffectMap[nextEffect]; + pat->data[row][5 + (j * 2)] = eftEffectMap[nextEffect] == -1 ? -1 : nextEffectVal; + + if (pat->data[row][4 + (j * 2)] == 0x100) { + pat->data[row][3] += pat->data[row][5 + (j * 2)] ? 0x10 : 0; // extra volume bit for AY8930 + pat->data[row][4 + (j * 2)] = -1; + pat->data[row][5 + (j * 2)] = -1; + } + + if (eftEffectMap[nextEffect] == 0x0f && nextEffectVal > 0x1f) { + pat->data[row][4 + (j * 2)] = 0xfd; // BPM speed change! + } + + if ((eftEffectMap[nextEffect] == 0xe1 || eftEffectMap[nextEffect] == 0xe2) && (nextEffectVal & 0xf0) == 0) { + pat->data[row][5 + (j * 2)] |= 0x10; // in FamiTracker if e1/e2 commands speed is 0 the portamento still has some speed! + } + } else { + pat->data[row][4 + (j * 2)] = ftEffectMap[nextEffect]; + pat->data[row][5 + (j * 2)] = ftEffectMap[nextEffect] == -1 ? -1 : nextEffectVal; + + if (ftEffectMap[nextEffect] == 0x0f && nextEffectVal > 0x1f) { + pat->data[row][4 + (j * 2)] = 0xfd; // BPM speed change! + } + + if ((ftEffectMap[nextEffect] == 0xe1 || ftEffectMap[nextEffect] == 0xe2) && (nextEffectVal & 0xf0) == 0) { + pat->data[row][5 + (j * 2)] |= 0x10; // in FamiTracker if e1/e2 commands speed is 0 the portamento still has some speed! + } + } + for (int v = 0; v < 8; v++) { + if (map_channels[ch] == n163_chans[v]) { + if (pat->data[row][4 + (j * 2)] == 0x12) { + pat->data[row][4 + (j * 2)] = 0x17; // local wave + } + } + } + } else { + pat->data[row][4 + (j * 2)] = -1; + pat->data[row][5 + (j * 2)] = -1; + } + } + } + } + } + } + } else if (blockName == "DPCM SAMPLES") { CHECK_BLOCK_VERSION(1); - reader.seek(blockSize,SEEK_CUR); - } else if (blockName=="COMMENTS") { + // reader.seek(blockSize,SEEK_CUR); + unsigned char num_samples = reader.readC(); + + for (int i = 0; i < 256; i++) { + DivSample* s = new DivSample(); + ds.sample.push_back(s); + } + + ds.sampleLen = ds.sample.size(); + + unsigned int true_size = 0; + unsigned char index = 0; + + for (unsigned char i = 0; i < num_samples; i++) { + index = reader.readC(); + + DivSample* sample = ds.sample[index]; + + sample->rate = 33144; + sample->centerRate = 33144; + sample->depth = DIV_SAMPLE_DEPTH_1BIT_DPCM; + + sample->name = reader.readString((unsigned int)reader.readI()); + + unsigned int sample_len = reader.readI(); + + true_size = sample_len + ((1 - (int)sample_len) & 0x0f); + sample->lengthDPCM = true_size; + sample->samples = true_size * 8; + + sample->dataDPCM = new unsigned char[true_size]; + + memset(sample->dataDPCM, 0xAA, true_size); + + reader.read(sample->dataDPCM, true_size); + } + + int last_non_empty_sample = 0xff; + + for (int i = 255; i > 0; i--) { + DivSample* s = ds.sample[i]; + + if (s->dataDPCM) { + last_non_empty_sample = i; + break; + } + } + + for (int i = 255; i > last_non_empty_sample; i--) { + ds.sample.erase(ds.sample.begin() + i); + } + + ds.sampleLen = ds.sample.size(); + + } else if (blockName == "SEQUENCES_VRC6") { + CHECK_BLOCK_VERSION(6); + + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; + + unsigned int seq_count = reader.readI(); + + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; + + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + if (blockVersion == 4) { + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + } + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_VRC6 && hasSequence[k][Types[i]]) { + copyMacro(ins, ¯os[index][type], type, setting); + + if (type == 0 && setting == 1) { + ins->type = DIV_INS_VRC6_SAW; + } + } + } + } + + if (blockVersion == 5) // Version 5 saved the release points incorrectly, this is fixed in ver 6 + { + for (int i = 0; i < 128; i++) { + for (int j = 0; j < 5; j++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][j] == i && ins->type == DIV_INS_VRC6 && hasSequence[k][j]) { + macros[k][j].rel = release; + macro_types[k][j] = setting; + + copyMacro(ins, ¯os[sequenceIndex[k][j]][j], j, setting); + + if (j == 0 && setting == 1) { + ins->type = DIV_INS_VRC6_SAW; + } + } + } + } + } + } + + if (blockVersion >= 6) // Read release points correctly stored + { + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); + + // macros[index][type].rel = release; + // macro_types[index][type] = setting; + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_VRC6 && hasSequence[k][Types[i]]) { + macros[sequenceIndex[k][Types[i]]][Types[i]].rel = release; + macro_types[k][Types[i]] = setting; + + copyMacro(ins, ¯os[sequenceIndex[k][Types[i]]][Types[i]], Types[i], setting); + + if (Types[i] == 0 && setting == 1) { + ins->type = DIV_INS_VRC6_SAW; + } + } + } + } + } + + delete[] Indices; + delete[] Types; + } else if (blockName == "SEQUENCES_N163" || blockName == "SEQUENCES_N106") { CHECK_BLOCK_VERSION(1); - reader.seek(blockSize,SEEK_CUR); + // reader.seek(blockSize,SEEK_CUR); + + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; + + unsigned int seq_count = reader.readI(); + + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; + + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_N163 && hasSequence[k][Types[i]]) { + copyMacro(ins, ¯os[index][type], type, setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); + } + } + } + + delete[] Indices; + delete[] Types; + + } else if (blockName == "SEQUENCES_S5B") { + CHECK_BLOCK_VERSION(1); + // reader.seek(blockSize,SEEK_CUR); + + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; + + unsigned int seq_count = reader.readI(); + + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; + + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][type] == Indices[i] && ins->type == DIV_INS_AY && hasSequence[k][type]) { + copyMacro(ins, ¯os[index][type], type, setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); + } + } + } + + delete[] Indices; + delete[] Types; + } else if (blockName == "SEQUENCES_SID") { + CHECK_BLOCK_VERSION(4); + + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; + + unsigned int seq_count = reader.readI(); + + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; + + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][type] == Indices[i] && ins->type == DIV_INS_C64 && hasSequence[k][type]) { + copyMacro(ins, ¯os[index][type], type, setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); + } + } + } + + delete[] Indices; + delete[] Types; + } else if (blockName == "JSON") { + CHECK_BLOCK_VERSION(1); + reader.seek(blockSize, SEEK_CUR); + } else if (blockName == "PARAMS_EMU") { + CHECK_BLOCK_VERSION(1); + reader.seek(blockSize, SEEK_CUR); + } else if (blockName == "DETUNETABLES") { + CHECK_BLOCK_VERSION(1); + reader.seek(blockSize, SEEK_CUR); + } else if (blockName == "COMMENTS") { + CHECK_BLOCK_VERSION(1); + // reader.seek(blockSize,SEEK_CUR); + unsigned int display_comment = reader.readI(); + (void)display_comment; + + char ch = 1; + + do { + ch = reader.readC(); + String sss = String() + ch; + ds.subsong[0]->notes += sss; + } while (ch != 0); + + // ds.subsong[0]->notes = reader.readS(); + } else if (blockName == "PARAMS_EXTRA") { + CHECK_BLOCK_VERSION(3); + // reader.seek(blockSize,SEEK_CUR); + unsigned int linear_pitch = reader.readI(); + + ds.linearPitch = linear_pitch == 0 ? 0 : 2; + + if (blockVersion >= 2) { + int fineTuneCents = reader.readC() * 100; + fineTuneCents += reader.readC(); + + ds.tuning = 440.0 * pow(2.0, (double)fineTuneCents / 1200.0); + } + if (blockVersion >= 3) { + unsigned char flats = reader.readC(); + (void)flats; + } + } else if (blockName == "TUNING") { + CHECK_BLOCK_VERSION(1); + // reader.seek(blockSize,SEEK_CUR); + if (blockVersion == 1) { + int fineTuneCents = reader.readC() * 100; + fineTuneCents += reader.readC(); + + ds.tuning = 440.0 * pow(2.0, (double)fineTuneCents / 1200.0); + } + } else if (blockName == "BOOKMARKS") { + CHECK_BLOCK_VERSION(1); + reader.seek(blockSize, SEEK_CUR); } else { - logE("block %s is unknown!",blockName); - lastError="unknown block "+blockName; + logE("block %s is unknown!", blockName); + lastError = "unknown block " + blockName; delete[] file; return false; } - if ((reader.tell()-blockStart)!=blockSize) { - logE("block %s is incomplete!",blockName); - lastError="incomplete block "+blockName; + if ((reader.tell() - blockStart) != blockSize) { + logE("block %s is incomplete! reader.tell()-blockStart %d blockSize %d", blockName, (reader.tell() - blockStart), blockSize); + lastError = "incomplete block " + blockName; delete[] file; return false; } } - addWarning("FamiTracker import is experimental!"); + if (ds.insLen > 0) { + for (int tries = 0; tries < 5; tries++) // de-duplicating instruments + { + for (int i = 0; i < 128; i++) { + int index = i >= (int)ds.insLen ? ((int)ds.insLen - 1) : i; + if (index < 0) + index = 0; + DivInstrument* ins = ds.ins[index]; + + if (ins->type == DIV_INS_FM) { + delete ds.ins[index]; + ds.ins.erase(ds.ins.begin() + index); + ds.insLen = ds.ins.size(); + for (int ii = 0; ii < total_chans; ii++) { + for (size_t j = 0; j < ds.subsong.size(); j++) { + for (int k = 0; k < DIV_MAX_PATTERNS; k++) { + if (ds.subsong[j]->pat[ii].data[k] == NULL) + continue; + for (int l = 0; l < ds.subsong[j]->patLen; l++) { + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] > index) { + ds.subsong[j]->pat[ii].data[k]->data[l][2]--; + } + } + } + } + } + } + } + } + } + + // famitracker is not fucking strict with what instrument types can be used on any channel. This leads to e.g. 2A03 instuments being used on VRC6 channels. + // Furnace is way more strict, so NES instrument in VRC6 channel just does not play. To fix this, we are creating copies of instruments, changing their type to please Furnace system. + // I kinda did the same in klystrack import, tbh. + + // actually, this is wrong. Furnace is very lax regarding instrument usage. you can put an OPM instrument in OPL channel and yeah, it'll sound weird but it'll work. + + /* + int ins_vrc6_conv[256][2]; + int ins_vrc6_saw_conv[256][2]; + int ins_nes_conv[256][2]; // vrc6 (or whatever) -> nes + + for (int i = 0; i < 256; i++) { + ins_vrc6_conv[i][0] = -1; + ins_vrc6_conv[i][1] = -1; + + ins_vrc6_saw_conv[i][0] = -1; + ins_vrc6_saw_conv[i][1] = -1; + + ins_nes_conv[i][0] = -1; + ins_nes_conv[i][1] = -1; + } + + int init_inst_num = ds.ins.size(); + + for (int i = 0; i < init_inst_num; i++) { + for (int ii = 0; ii < total_chans; ii++) { + for (size_t j = 0; j < ds.subsong.size(); j++) { + for (int k = 0; k < DIV_MAX_PATTERNS; k++) { + if (ds.subsong[j]->pat[ii].data[k] == NULL) + continue; + for (int l = 0; l < ds.subsong[j]->patLen; l++) { + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == i) // instrument + { + DivInstrument* ins = ds.ins[i]; + bool go_to_end = false; + + if (ins->type != DIV_INS_VRC6 && (ii == vrc6_chans[0] || ii == vrc6_chans[1])) // we encountered non-VRC6 instrument on VRC6 channel + { + DivInstrument* insnew = new DivInstrument; + ds.ins.push_back(insnew); + + copyInstrument(ds.ins[ds.ins.size() - 1], ins); + + ds.ins[ds.ins.size() - 1]->name += " [VRC6 copy]"; + ds.ins[ds.ins.size() - 1]->amiga.useSample = false; + ds.ins[ds.ins.size() - 1]->amiga.useNoteMap = false; + + ds.ins[ds.ins.size() - 1]->type = DIV_INS_VRC6; + + if (ins->std.get_macro(DIV_MACRO_DUTY, false)->len > 0) { + for (int mm = 0; mm < ins->std.get_macro(DIV_MACRO_DUTY, false)->len; mm++) { + if (ds.ins[ds.ins.size() - 1]->std.get_macro(DIV_MACRO_DUTY, false)->val[mm] < 4) { + int vall = ins->std.get_macro(DIV_MACRO_DUTY, false)->val[mm]; + ds.ins[ds.ins.size() - 1]->std.get_macro(DIV_MACRO_DUTY, false)->val[mm] = convert_vrc6_duties[vall]; + } + } + } + + ins_vrc6_conv[i][0] = i; + ins_vrc6_conv[i][1] = ds.ins.size() - 1; + + go_to_end = true; + } + + if (go_to_end) { + goto end1; + } + } + } + } + } + } + + end1:; + } + + for (int i = 0; i < init_inst_num; i++) { + for (int ii = 0; ii < total_chans; ii++) { + for (size_t j = 0; j < ds.subsong.size(); j++) { + for (int k = 0; k < DIV_MAX_PATTERNS; k++) { + if (ds.subsong[j]->pat[ii].data[k] == NULL) + continue; + for (int l = 0; l < ds.subsong[j]->patLen; l++) { + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == i) // instrument + { + DivInstrument* ins = ds.ins[i]; + bool go_to_end = false; + + if (ins->type != DIV_INS_VRC6_SAW && ii == vrc6_saw_chan) // we encountered non-VRC6-saw instrument on VRC6 saw channel + { + DivInstrument* insnew = new DivInstrument; + ds.ins.push_back(insnew); + + copyInstrument(ds.ins[ds.ins.size() - 1], ins); + + ds.ins[ds.ins.size() - 1]->name += " [VRC6 saw copy]"; + ds.ins[ds.ins.size() - 1]->amiga.useSample = false; + ds.ins[ds.ins.size() - 1]->amiga.useNoteMap = false; + + ds.ins[ds.ins.size() - 1]->type = DIV_INS_VRC6_SAW; + + if (ins->std.get_macro(DIV_MACRO_VOL, false)->len > 0) { + for (int mm = 0; mm < ins->std.get_macro(DIV_MACRO_VOL, false)->len; mm++) { + if (ds.ins[ds.ins.size() - 1]->std.get_macro(DIV_MACRO_VOL, false)->val[mm] < 16) { + int vall = ins->std.get_macro(DIV_MACRO_VOL, false)->val[mm]; + ds.ins[ds.ins.size() - 1]->std.get_macro(DIV_MACRO_VOL, false)->val[mm] = vall * 42 / 15; + } + } + } + + ins_vrc6_saw_conv[i][0] = i; + ins_vrc6_saw_conv[i][1] = ds.ins.size() - 1; + + go_to_end = true; + } + + if (go_to_end) { + goto end2; + } + } + } + } + } + } + + end2:; + } + + for (int i = 0; i < init_inst_num; i++) { + for (int ii = 0; ii < total_chans; ii++) { + for (size_t j = 0; j < ds.subsong.size(); j++) { + for (int k = 0; k < DIV_MAX_PATTERNS; k++) { + if (ds.subsong[j]->pat[ii].data[k] == NULL) + continue; + for (int l = 0; l < ds.subsong[j]->patLen; l++) { + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == i) // instrument + { + DivInstrument* ins = ds.ins[i]; + bool go_to_end = false; + + if (ins->type != DIV_INS_NES && (ii == mmc5_chans[0] || ii == mmc5_chans[1] || ii < 5)) // we encountered VRC6 (or whatever?) instrument on NES/MMC5 channel + { + DivInstrument* insnew = new DivInstrument; + ds.ins.push_back(insnew); + + copyInstrument(ds.ins[ds.ins.size() - 1], ins); + + ds.ins[ds.ins.size() - 1]->name += " [NES copy]"; + + ds.ins[ds.ins.size() - 1]->type = DIV_INS_NES; + + if (ins->type == DIV_INS_VRC6) { + if (insnew->std.get_macro(DIV_MACRO_DUTY, false)->len > 0) // convert duties for NES + { + for (int mm = 0; mm < insnew->std.get_macro(DIV_MACRO_DUTY, false)->len; mm++) { + switch (insnew->std.get_macro(DIV_MACRO_DUTY, false)->val[mm]) { + case 0: + case 1: { + insnew->std.get_macro(DIV_MACRO_DUTY, false)->val[mm] = 0; + break; + } + case 2: + case 3: + case 4: + case 5: { + insnew->std.get_macro(DIV_MACRO_DUTY, false)->val[mm] = 1; + break; + } + case 6: + case 7: { + insnew->std.get_macro(DIV_MACRO_DUTY, false)->val[mm] = 2; + break; + } + default: + break; + } + } + } + } + + ins_nes_conv[i][0] = i; + ins_nes_conv[i][1] = ds.ins.size() - 1; + + go_to_end = true; + } + + if (go_to_end) { + goto end3; + } + } + } + } + } + } + + end3:; + } + + for (int i = 0; i < 256; i++) { + if (ins_vrc6_conv[i][0] != -1 || ins_vrc6_saw_conv[i][0] != -1 || ins_nes_conv[i][0] != -1) { + for (int ii = 0; ii < total_chans; ii++) { + for (size_t j = 0; j < ds.subsong.size(); j++) { + for (int k = 0; k < DIV_MAX_PATTERNS; k++) { + if (ds.subsong[j]->pat[ii].data[k] == NULL) + continue; + for (int l = 0; l < ds.subsong[j]->patLen; l++) { + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == ins_vrc6_conv[i][0] && (ii == vrc6_chans[0] || ii == vrc6_chans[1])) // change ins index + { + ds.subsong[j]->pat[ii].data[k]->data[l][2] = ins_vrc6_conv[i][1]; + } + + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == ins_vrc6_saw_conv[i][0] && ii == vrc6_saw_chan) { + ds.subsong[j]->pat[ii].data[k]->data[l][2] = ins_vrc6_saw_conv[i][1]; + } + + if (ds.subsong[j]->pat[ii].data[k]->data[l][2] == ins_nes_conv[i][0] && (ii == mmc5_chans[0] || ii == mmc5_chans[1] || ii < 5)) { + ds.subsong[j]->pat[ii].data[k]->data[l][2] = ins_nes_conv[i][1]; + } + } + } + } + } + } + } + */ + + ds.delayBehavior=0; ds.version=DIV_VERSION_FTM; + ds.insLen = ds.ins.size(); + ds.sampleLen = ds.sample.size(); + ds.waveLen = ds.wave.size(); if (active) quitDispatch(); BUSY_BEGIN_SOFT; @@ -601,11 +2394,10 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len) { } } catch (EndOfFileException& e) { logE("premature end of file!"); - lastError="incomplete file"; + lastError = "incomplete file"; delete[] file; return false; } delete[] file; return true; } - diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 8ad21b100..24126c340 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -259,6 +259,40 @@ bool DivInstrumentPowerNoise::operator==(const DivInstrumentPowerNoise& other) { #undef _C +#define CONSIDER(x,t) \ + case t: \ + return &x; \ + break; + +DivInstrumentMacro* DivInstrumentSTD::macroByType(DivMacroType type) { + switch (type) { + CONSIDER(volMacro,DIV_MACRO_VOL) + CONSIDER(arpMacro,DIV_MACRO_ARP) + CONSIDER(dutyMacro,DIV_MACRO_DUTY) + CONSIDER(waveMacro,DIV_MACRO_WAVE) + CONSIDER(pitchMacro,DIV_MACRO_PITCH) + CONSIDER(ex1Macro,DIV_MACRO_EX1) + CONSIDER(ex2Macro,DIV_MACRO_EX2) + CONSIDER(ex3Macro,DIV_MACRO_EX3) + CONSIDER(algMacro,DIV_MACRO_ALG) + CONSIDER(fbMacro,DIV_MACRO_FB) + CONSIDER(fmsMacro,DIV_MACRO_FMS) + CONSIDER(amsMacro,DIV_MACRO_AMS) + CONSIDER(panLMacro,DIV_MACRO_PAN_LEFT) + CONSIDER(panRMacro,DIV_MACRO_PAN_RIGHT) + CONSIDER(phaseResetMacro,DIV_MACRO_PHASE_RESET) + CONSIDER(ex4Macro,DIV_MACRO_EX4) + CONSIDER(ex5Macro,DIV_MACRO_EX5) + CONSIDER(ex6Macro,DIV_MACRO_EX6) + CONSIDER(ex7Macro,DIV_MACRO_EX7) + CONSIDER(ex8Macro,DIV_MACRO_EX8) + } + + return NULL; +} + +#undef CONSIDER + #define FEATURE_BEGIN(x) \ w->write(x,2); \ size_t featStartSeek=w->tell(); \ diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 714adeea5..fd75a4d0f 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -329,6 +329,9 @@ struct DivInstrumentSTD { damMacro(DIV_MACRO_OP_DAM), dvbMacro(DIV_MACRO_OP_DVB), egtMacro(DIV_MACRO_OP_EGT), kslMacro(DIV_MACRO_OP_KSL), susMacro(DIV_MACRO_OP_SUS), vibMacro(DIV_MACRO_OP_VIB), wsMacro(DIV_MACRO_OP_WS), ksrMacro(DIV_MACRO_OP_KSR) {} } opMacros[4]; + + DivInstrumentMacro* macroByType(DivMacroType type); + DivInstrumentSTD(): volMacro(DIV_MACRO_VOL,true), arpMacro(DIV_MACRO_ARP), diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index d5fe08159..151dd93e9 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1637,7 +1637,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { if (!dirExists(workingDirSong)) workingDirSong=getHomeDir(); hasOpened=fileDialog->openLoad( "Open File", - {"compatible files", "*.fur *.dmf *.mod *.fc13 *.fc14 *.smod *.fc", + {"compatible files", "*.fur *.dmf *.mod *.fc13 *.fc14 *.smod *.fc *.ftm *.0cc *.dnm *.eft", "all files", "*"}, workingDirSong, dpiScale diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8fdd1733f..cd9e72d7c 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -5654,6 +5654,9 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fc",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".smod",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".ftm",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".0cc",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dnm",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".eft",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".tfi",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".vgi",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); From 0c733ad63a3a7c6d807f1179232c867bedae3d95 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 03:48:13 -0500 Subject: [PATCH 054/134] Namco 163: fix mega bug when using 10xx issue #1801 --- src/engine/platform/n163.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/platform/n163.cpp b/src/engine/platform/n163.cpp index d1ceaf5a0..a0982e50d 100644 --- a/src/engine/platform/n163.cpp +++ b/src/engine/platform/n163.cpp @@ -400,6 +400,7 @@ int DivPlatformN163::dispatch(DivCommand c) { } case DIV_CMD_WAVE: chan[c.chan].wave=c.value; + chan[c.chan].ws.changeWave1(chan[c.chan].wave); if (chan[c.chan].waveMode) { chan[c.chan].waveUpdated=true; } From 67253245abfe499a3a822ca1945e3ed1b13f2e3e Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sat, 16 Mar 2024 19:59:55 +0700 Subject: [PATCH 055/134] GBA DMA: implement sample memory --- src/engine/platform/gbadma.cpp | 86 ++++++++++++++++++++++++++++------ src/engine/platform/gbadma.h | 14 ++++++ 2 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index da4e95403..9a0ac2fab 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -33,13 +33,12 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) { // internal mixing is always 10-bit for (int i=0; i<2; i++) { bool newSamp=h==0; + chan[i].audDat=0; if (chan[i].active && (chan[i].useWave || (chan[i].sample>=0 && chan[i].samplesong.sampleLen))) { chan[i].audSub+=(1<=chan[i].freq) { @@ -52,13 +51,12 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) { } chan[i].dmaCount&=15; } - } else { + } else if (sampleLoaded[chan[i].sample]) { DivSample* s=parent->getSample(chan[i].sample); if (s->samples>0) { - if (chan[i].audPos>=0 && chan[i].audPos<(int)s->samples) { - chan[i].audDat=s->data8[chan[i].audPos]; - } else { - chan[i].audDat=0; + if (chan[i].audPos>=0) { + unsigned int pos=(sampleOff[chan[i].sample]+chan[i].audPos)&0x01ffffff; + chan[i].audDat=sampleMem[pos]; } newSamp=true; if (chan[i].audSub>=chan[i].freq) { @@ -68,8 +66,9 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) { chan[i].dmaCount+=posInc; if (s->isLoopable()) { if (chan[i].dmaCount>=16 && chan[i].audPos>=s->loopEnd) { - int loopPos=chan[i].audPos-s->loopStart; - chan[i].audPos=(loopPos%(s->loopEnd-s->loopStart))+s->loopStart; + int loopStart=s->loopStart&~3; + int loopPos=chan[i].audPos-loopStart; + chan[i].audPos=(loopPos%(s->loopEnd-s->loopStart))+loopStart; } } else if (chan[i].audPos>=(int)s->samples) { chan[i].sample=-1; @@ -82,8 +81,6 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) { chan[i].audPos=0; } } - } else { - chan[i].audDat=0; } if (!isMuted[i] && newSamp) { int out=chan[i].audDat*(chan[i].vol*chan[i].envVol/2)<<1; @@ -112,6 +109,7 @@ void DivPlatformGBADMA::tick(bool sysTick) { if (chan[i].std.vol.had) { chan[i].envVol=chan[i].std.vol.val; if (ins->type==DIV_INS_AMIGA) chan[i].envVol/=32; + else if (chan[i].envVol>2) chan[i].envVol=2; } if (NEW_ARP_STRAT) { chan[i].handleArp(); @@ -129,7 +127,9 @@ void DivPlatformGBADMA::tick(bool sysTick) { } } if (chan[i].useWave && chan[i].active) { - chan[i].ws.tick(); + if (chan[i].ws.tick()) { + updateWave(i); + } } if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { @@ -257,7 +257,7 @@ int DivPlatformGBADMA::dispatch(DivCommand c) { break; case DIV_CMD_VOLUME: if (chan[c.chan].vol!=c.value) { - chan[c.chan].vol=c.value; + chan[c.chan].vol=MIN(c.value,2); if (!chan[c.chan].std.vol.has) { chan[c.chan].envVol=2; } @@ -341,6 +341,13 @@ int DivPlatformGBADMA::dispatch(DivCommand c) { return 1; } +void DivPlatformGBADMA::updateWave(int ch) { + int addr=ch*256; + for (unsigned int i=0; i255) return false; + return sampleLoaded[sample]; +} + +void DivPlatformGBADMA::renderSamples(int sysID) { + size_t maxPos=getSampleMemCapacity(); + memset(sampleMem,0,maxPos); + + size_t memPos=0; + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOff[i]=0; + continue; + } + int length=s->length8; + int actualLength=MIN((int)(maxPos-memPos),length); + if (actualLength>0) { + sampleOff[i]=memPos; + memcpy(&sampleMem[memPos],s->data8,actualLength); + memPos+=actualLength; + } + if (actualLength Date: Sat, 16 Mar 2024 11:14:45 -0500 Subject: [PATCH 056/134] more changes --- src/engine/fileOps/ftm.cpp | 8 ++++---- src/engine/playback.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 729e2583c..20e93dbad 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -111,7 +111,7 @@ const int ftEffectMap[]={ 0x21, // 050B Sunsoft noise period -1, // VRC7 "custom patch port" - not supported? -1, // VRC7 "custom patch write" - 0xe7, // delayed release - not supported yet + 0xfc, // delayed release 0x09, // select groove 0xe6, // delayed note transpose 0x11, // Namco 163 wave RAM offset @@ -225,7 +225,7 @@ const int eftEffectMap[] = { 0x100, // // // AY8930 extra volume bit -1, // VRC7 "custom patch port" - not supported? -1, // VRC7 "custom patch write" - 0xe7, // delayed release - not supported yet + 0xfc, // delayed release 0x09, // select groove 0xe6, // delayed note transpose 0x11, // Namco 163 wave RAM offset @@ -1579,11 +1579,11 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si pat->data[row][3] = nextVol; if (map_channels[ch] == vrc6_saw_chan) // scale volume { - pat->data[row][3] = pat->data[row][3] * 42 / 15; + pat->data[row][3] = (pat->data[row][3] * 42) / 15; } if (map_channels[ch] == fds_chan) { - pat->data[row][3] = pat->data[row][3] * 31 / 15; + pat->data[row][3] = (pat->data[row][3] * 31) / 15; } } else { pat->data[row][3] = -1; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 49341ce14..2f4f2e6c7 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1061,7 +1061,7 @@ void DivEngine::processRow(int i, bool afterDelay) { break; case 0xfc: // delayed note release - if (effectVal>0 && (song.delayBehavior==2 || effectVal Date: Sat, 16 Mar 2024 11:16:30 -0500 Subject: [PATCH 057/134] update contributing guidelines --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 70d9831fa..78cce40e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,6 +97,7 @@ just put your demo song in `demos/`! be noted there are some guidelines: - the following systems are not acceptable: - YMU759/MA-2: exists only for compatibility. - Pong: it is a joke system. +- the song shall be in Furnace file format. # Finishing From 48b51f5108d3d0313ce9871faa4c7091a1611f92 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sat, 16 Mar 2024 23:16:40 +0700 Subject: [PATCH 058/134] GBA: implement memory composition and status --- src/engine/dispatch.h | 1 + src/engine/platform/gbadma.cpp | 29 +++++++++++++-- src/engine/platform/gbadma.h | 6 +++- src/engine/platform/gbaminmod.cpp | 60 +++++++++++++++++++++++++++++-- src/engine/platform/gbaminmod.h | 8 ++++- src/gui/memory.cpp | 8 +++++ 6 files changed, 106 insertions(+), 6 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 079a49022..dee8efe75 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -480,6 +480,7 @@ enum DivMemoryWaveView: unsigned char { DIV_MEMORY_WAVE_NONE=0, DIV_MEMORY_WAVE_4BIT, // Namco 163 DIV_MEMORY_WAVE_6BIT, // Virtual Boy + DIV_MEMORY_WAVE_8BIT_SIGNED, // SCC }; struct DivMemoryComposition { diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index 9a0ac2fab..af61fa543 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -195,6 +195,7 @@ int DivPlatformGBADMA::dispatch(DivCommand c) { if (ins->amiga.useWave) { chan[c.chan].useWave=true; chan[c.chan].audLen=ins->amiga.waveLen+1; + wtMemCompo.entries[c.chan].end=wtMemCompo.entries[c.chan].begin+chan[c.chan].audLen; if (chan[c.chan].insChanged) { if (chan[c.chan].wave<0) { chan[c.chan].wave=0; @@ -392,11 +393,14 @@ unsigned short DivPlatformGBADMA::getPan(int ch) { } DivSamplePos DivPlatformGBADMA::getSamplePos(int ch) { - if (ch>=2) return DivSamplePos(); + if (ch>=2 || !chan[ch].active || + chan[ch].sample<0 || chan[ch].sample>=parent->song.sampleLen) { + return DivSamplePos(); + } return DivSamplePos( chan[ch].sample, chan[ch].audPos, - chan[ch].freq + chipClock/chan[ch].freq ); } @@ -441,9 +445,19 @@ bool DivPlatformGBADMA::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformGBADMA::getMemCompo(int index) { + switch (index) { + case 0: return &romMemCompo; + case 1: return &wtMemCompo; + } + return NULL; +} + void DivPlatformGBADMA::renderSamples(int sysID) { size_t maxPos=getSampleMemCapacity(); memset(sampleMem,0,maxPos); + romMemCompo.entries.clear(); + romMemCompo.capacity=maxPos; size_t memPos=0; for (int i=0; isong.sampleLen; i++) { @@ -466,8 +480,10 @@ void DivPlatformGBADMA::renderSamples(int sysID) { sampleLoaded[i]=true; // pad to multiple of 16 bytes memPos=(memPos+15)&~15; + romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); } sampleMemLen=memPos; + romMemCompo.used=sampleMemLen; } void DivPlatformGBADMA::setFlags(const DivConfig& flags) { @@ -484,9 +500,18 @@ int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivCo parent=p; dumpWrites=false; skipRegisterWrites=false; + romMemCompo=DivMemoryComposition(); + romMemCompo.name="Sample ROM"; + wtMemCompo=DivMemoryComposition(); + wtMemCompo.name="Wavetable RAM"; + wtMemCompo.used=256*2; + wtMemCompo.capacity=256*2; + wtMemCompo.memory=(unsigned char*)wtMem; + wtMemCompo.waveformView=DIV_MEMORY_WAVE_8BIT_SIGNED; for (int i=0; i<2; i++) { isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; + wtMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_WAVE_RAM, fmt::sprintf("Channel %d",i),-1,i*256,i*256)); } sampleMem=new signed char[getSampleMemCapacity()]; sampleMemLen=0; diff --git a/src/engine/platform/gbadma.h b/src/engine/platform/gbadma.h index aff18d3df..8ea38e545 100644 --- a/src/engine/platform/gbadma.h +++ b/src/engine/platform/gbadma.h @@ -62,6 +62,9 @@ class DivPlatformGBADMA: public DivDispatch { size_t sampleMemLen; // maximum wavetable length is currently hardcoded to 256 signed char wtMem[256*2]; + DivMemoryComposition romMemCompo; + DivMemoryComposition wtMemCompo; + friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); @@ -86,10 +89,11 @@ class DivPlatformGBADMA: public DivDispatch { size_t getSampleMemCapacity(int index = 0); size_t getSampleMemUsage(int index = 0); bool isSampleLoaded(int index, int sample); + const DivMemoryComposition* getMemCompo(int index); void renderSamples(int chipID); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); - + private: void updateWave(int ch); }; diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 118882687..4d3605195 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -142,6 +142,8 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { while (updTimer>=updCycles) { // flip buffer // logV("ut=%d,pg=%d,w=%d,r=%d,sc=%d,st=%d",updTimer,mixBufPage,mixBufWritePos,mixBufReadPos,sampCycles,sampTimer); + mixMemCompo.entries[mixBufPage].end=mixMemCompo.entries[mixBufPage].begin+mixBufWritePos; + mixMemCompo.entries[mixBufPage+1].end=mixMemCompo.entries[mixBufPage+1].begin+mixBufWritePos; mixBufPage=(mixBufPage+2)%(mixBufs*2); memset(mixBuf[mixBufPage],0,sizeof(mixBuf[mixBufPage])); memset(mixBuf[mixBufPage+1],0,sizeof(mixBuf[mixBufPage+1])); @@ -298,9 +300,9 @@ void DivPlatformGBAMinMod::tick(bool sysTick) { chan[i].freq=(int)(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE)); if (chan[i].keyOn) { unsigned int start, end, loop; - if (chan[i].echo!=0) { + if ((chan[i].echo&0xf)!=0) { // make sure echo channels' frequency can't be faster than the sample rate - if (chan[i].echo!=0 && chan[i].freq>CHIP_FREQBASE) { + if (chan[i].freq>CHIP_FREQBASE) { chan[i].freq=CHIP_FREQBASE; } // this is only to match the HLE implementation @@ -381,6 +383,9 @@ int DivPlatformGBAMinMod::dispatch(DivCommand c) { if (ins->amiga.useWave) { chan[c.chan].useWave=true; chan[c.chan].wtLen=ins->amiga.waveLen+1; + if (c.chan=chanMax || + chan[ch].sample<0 || chan[ch].sample>=parent->song.sampleLen || + !chan[ch].active || (chan[ch].echo&0xf)!=0 + ) { + return DivSamplePos(); + } + return DivSamplePos( + chan[ch].sample, + (((int)regPool[ch*16+2]|((int)regPool[ch*16+3]<<16))&0x01ffffff)-sampleOff[chan[ch].sample], + (long long)chan[ch].freq*chipClock/CHIP_FREQBASE + ); +} + DivDispatchOscBuffer* DivPlatformGBAMinMod::getOscBuffer(int ch) { return oscBuf[ch]; } @@ -577,6 +596,7 @@ void DivPlatformGBAMinMod::reset() { void DivPlatformGBAMinMod::resetMixer() { sampTimer=sampCycles; updTimer=0; + updCycles=0; mixBufReadPos=0; mixBufWritePos=0; mixBufPage=0; @@ -651,9 +671,20 @@ bool DivPlatformGBAMinMod::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformGBAMinMod::getMemCompo(int index) { + switch (index) { + case 0: return &romMemCompo; + case 1: return &wtMemCompo; + case 2: return &mixMemCompo; + } + return NULL; +} + void DivPlatformGBAMinMod::renderSamples(int sysID) { size_t maxPos=getSampleMemCapacity(); memset(sampleMem,0,maxPos); + romMemCompo.entries.clear(); + romMemCompo.capacity=maxPos; // dummy zero-length samples are at pos 0 as the engine still outputs them size_t memPos=1; @@ -677,6 +708,7 @@ void DivPlatformGBAMinMod::renderSamples(int sysID) { memset(&sampleMem[memPos],0,oneShotLen); memPos+=oneShotLen; } + romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); } if (actualLengthAddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_DATA])); } break; + case DIV_MEMORY_WAVE_8BIT_SIGNED: + for (int k=0; kcapacity; k++) { + signed char val=(signed char)mc->memory[k]; + ImVec2 pos1=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)k/(double)(mc->capacity),1.0f-((float)(val+129)/256.0f))); + ImVec2 pos2=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)(k+1)/(double)(mc->capacity),1.0f)); + dl->AddRectFilled(pos1,pos2,ImGui::GetColorU32(uiColors[GUI_COLOR_MEMORY_DATA])); + } + break; default: break; } From 04f9bc5fa3ac2af0106247a4ce88473727a5fcba Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 11:42:59 -0500 Subject: [PATCH 059/134] fix virtual tempo in .ftm import --- src/engine/fileOps/ftm.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 20e93dbad..1e94a8b53 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -20,10 +20,11 @@ // most of this code written by LTVA // ported to Furnace by tildearrow +// portions apparently taken from FamiTracker source, which is under GPLv2+ + // TODO: // - audit for CVEs // - Namco 163 waves -// - fix virtual tempo // - format code? #include "fileOpsCommon.h" @@ -438,7 +439,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si unsigned char map_channels[DIV_MAX_CHANS]; unsigned int hilightA = 4; unsigned int hilightB = 16; - double customHz = 60; + double customHz = 60.0; unsigned char fds_chan = 0xff; unsigned char vrc6_saw_chan = 0xff; @@ -819,8 +820,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si ds.subsong[i]->hilightB = hilightB; if (customHz != 0) { ds.subsong[i]->hz = customHz; - - ds.subsong[i]->virtualTempoN = (short)(150.0 / (float)customHz * (pal ? (50.0) : (60.0))); + ds.subsong[i]->virtualTempoD = (short)(2.5 * customHz); } logV("- %s", subSongName); } @@ -1470,7 +1470,6 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si s->speeds.val[0] = reader.readI(); } if (blockVersion >= 2) { - int temp = s->virtualTempoN; int tempo = reader.readI(); logV("tempo %d", tempo); @@ -1478,7 +1477,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si if (tempo == 0) { s->virtualTempoN = 150.0; // TODO: make it properly } else { - s->virtualTempoN = (short)((float)temp * (float)tempo / 150.0); + s->virtualTempoN = tempo; } s->patLen = reader.readI(); From 92b1c9525990dd5c68ca4e8fcd6583be980fedac Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 11:53:57 -0500 Subject: [PATCH 060/134] fix Namco 163 waves in .ftm import untested --- src/engine/fileOps/ftm.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 1e94a8b53..662f93cfe 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -24,7 +24,6 @@ // TODO: // - audit for CVEs -// - Namco 163 waves // - format code? #include "fileOpsCommon.h" @@ -1090,7 +1089,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si break; } - case DIV_INS_N163: { // TODO: add local wavetables and finish this! + case DIV_INS_N163: { unsigned int totalSeqs = reader.readI(); if (totalSeqs > 5) { logE("%d: too many sequences!", insIndex); @@ -1115,6 +1114,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si } unsigned int wave_count = reader.readI(); + size_t waveOff = ds.wave.size(); for (unsigned int ii = 0; ii < wave_count; ii++) { DivWavetable* wave = new DivWavetable(); @@ -1126,15 +1126,22 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si wave->data[jj] = val; } - // TODO: port to global waves - //ins->std.local_waves.push_back(wave); - delete wave; + if (ds.wave.size()<256) { + ds.wave.push_back(wave); + } else { + delete wave; + } } + // offset wave macro if (ins->std.waveMacro.len == 0) // empty wave macro { ins->std.waveMacro.len = 1; - ins->std.waveMacro.val[0] = 0 | (1 << 30); // force local wave number 0 + ins->std.waveMacro.val[0] = waveOff; + } else { + for (int p=0; pstd.waveMacro.len; p++) { + ins->std.waveMacro.val[p] += waveOff; + } } break; @@ -1475,7 +1482,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si logV("tempo %d", tempo); if (tempo == 0) { - s->virtualTempoN = 150.0; // TODO: make it properly + s->virtualTempoN = 150.0; } else { s->virtualTempoN = tempo; } From 845eb582a68297448be1cbb811b3aede66db9974 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 12:16:09 -0500 Subject: [PATCH 061/134] fix .dnm and .eft loading --- src/engine/engine.h | 2 +- src/engine/fileOps/fileOpsCommon.cpp | 23 ++++++++++++++++++++--- src/engine/fileOps/fileOpsCommon.h | 1 + src/gui/gui.cpp | 2 +- src/main.cpp | 2 +- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 4ddd45ee8..4cfdbdc67 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -632,7 +632,7 @@ class DivEngine { void createNew(const char* description, String sysName, bool inBase64=true); void createNewFromDefaults(); // load a file. - bool load(unsigned char* f, size_t length); + bool load(unsigned char* f, size_t length, const char* nameHint=NULL); // play a binary command stream. bool playStream(unsigned char* f, size_t length); // get the playing stream. diff --git a/src/engine/fileOps/fileOpsCommon.cpp b/src/engine/fileOps/fileOpsCommon.cpp index 7610d6260..52e1d31be 100644 --- a/src/engine/fileOps/fileOpsCommon.cpp +++ b/src/engine/fileOps/fileOpsCommon.cpp @@ -19,10 +19,10 @@ #include "fileOpsCommon.h" -bool DivEngine::load(unsigned char* f, size_t slen) { +bool DivEngine::load(unsigned char* f, size_t slen, const char* nameHint) { unsigned char* file; size_t len; - if (slen<18) { + if (slen<21) { logE("too small!"); lastError="file is too small"; delete[] f; @@ -31,6 +31,21 @@ bool DivEngine::load(unsigned char* f, size_t slen) { if (!systemsRegistered) registerSystems(); + // step 0: get extension of file + String extS; + if (nameHint!=NULL) { + const char* ext=strrchr(nameHint,'.'); + if (ext!=NULL) { + for (; *ext; ext++) { + char i=*ext; + if (i>='A' && i<='Z') { + i+='a'-'A'; + } + extS+=i; + } + } + } + // step 1: try loading as a zlib-compressed file logD("trying zlib..."); try { @@ -128,7 +143,9 @@ bool DivEngine::load(unsigned char* f, size_t slen) { if (memcmp(file,DIV_DMF_MAGIC,16)==0) { return loadDMF(file,len); } else if (memcmp(file,DIV_FTM_MAGIC,18)==0) { - return loadFTM(file,len,false,false,false); + return loadFTM(file,len,(extS==".dnm"),false,(extS==".eft")); + } else if (memcmp(file,DIV_DNM_MAGIC,21)==0) { + return loadFTM(file,len,true,true,false); } else if (memcmp(file,DIV_FUR_MAGIC,16)==0) { return loadFur(file,len); } else if (memcmp(file,DIV_FUR_MAGIC_DS0,16)==0) { diff --git a/src/engine/fileOps/fileOpsCommon.h b/src/engine/fileOps/fileOpsCommon.h index e758f0ed5..1ba6eff8a 100644 --- a/src/engine/fileOps/fileOpsCommon.h +++ b/src/engine/fileOps/fileOpsCommon.h @@ -49,6 +49,7 @@ struct NotZlibException { #define DIV_DMF_MAGIC ".DelekDefleMask." #define DIV_FUR_MAGIC "-Furnace module-" #define DIV_FTM_MAGIC "FamiTracker Module" +#define DIV_DNM_MAGIC "Dn-FamiTracker Module" #define DIV_FC13_MAGIC "SMOD" #define DIV_FC14_MAGIC "FC14" #define DIV_S3M_MAGIC "SCRM" diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 151dd93e9..20060f536 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -2215,7 +2215,7 @@ int FurnaceGUI::load(String path) { return 1; } fclose(f); - if (!e->load(file,(size_t)len)) { + if (!e->load(file,(size_t)len,path.c_str())) { lastError=e->getLastError(); logE("could not open file!"); return 1; diff --git a/src/main.cpp b/src/main.cpp index 9c86b16c5..10e8bec5a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -612,7 +612,7 @@ int main(int argc, char** argv) { return 1; } fclose(f); - if (!e.load(file,(size_t)len)) { + if (!e.load(file,(size_t)len,fileName.c_str())) { reportError(fmt::sprintf("could not open file! (%s)",e.getLastError())); e.everythingOK(); finishLogFile(); From 1bc941d7f4b75b8c2a4277ee10d80f5251aa15e6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 12:22:40 -0500 Subject: [PATCH 062/134] allocate Game Boy Advance chip IDs --- papers/format.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/papers/format.md b/papers/format.md index 1a1bca87d..97c1f1302 100644 --- a/papers/format.md +++ b/papers/format.md @@ -240,6 +240,8 @@ size | description | - 0xd4: PowerNoise - 4 channels | - 0xd5: Dave - 6 channels | - 0xd6: NDS - 16 channels (UNAVAILABLE) + | - 0xd7: Game Boy Advance (direct) - 2 channels (UNAVAILABLE) + | - 0xd8: Game Boy Advance (MinMod) - 16 channels (UNAVAILABLE) | - 0xde: YM2610B extended - 19 channels | - 0xe0: QSound - 19 channels | - 0xfc: Pong - 1 channel From 7fe7c67b4b5c0be310b876959b054c49bc5473fa Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sun, 17 Mar 2024 05:17:22 +0700 Subject: [PATCH 063/134] Fix CI build --- src/engine/instrument.cpp | 4 ++++ src/engine/platform/gbaminmod.cpp | 12 ++++++------ src/engine/platform/gbaminmod.h | 1 - src/gui/memory.cpp | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index e21f406e7..d2b5e6acc 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -1068,6 +1068,10 @@ void DivInstrument::putInsData2(SafeWriter* w, bool fui, const DivSong* song, bo featureSM=true; featureSL=true; break; + case DIV_INS_GBA_MINMOD: + featureSM=true; + featureSL=true; + break; case DIV_INS_MAX: break; case DIV_INS_NULL: diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 4d3605195..1fb66ddd2 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -67,12 +67,12 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { // the driver generates 4 samples at a time and can be start-offset sampPos=mixBufReadPos&3; if (sampPos==mixBufOffset) { - for (int j=mixBufOffset; j<4; j++) { + for (size_t j=mixBufOffset; j<4; j++) { mixOut[0][j]=0; mixOut[1][j]=0; } for (int i=0; i>32; chState[i].address+=((unsigned long long)chState[i].freq)<<8; unsigned int newAddr=chState[i].address>>32; @@ -114,7 +114,7 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { oscOut[i][j]=volScale>0?outA*64/volScale:0; } } - for (int j=mixBufOffset; j<4; j++) { + for (size_t j=mixBufOffset; j<4; j++) { mixBuf[mixBufPage][mixBufWritePos]=mixOut[0][j]; mixBuf[mixBufPage+1][mixBufWritePos]=mixOut[1][j]; mixBufWritePos++; @@ -152,7 +152,7 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { mixBufOffset=(4-(mixBufReadPos&3))&3; mixBufReadPos=0; mixBufWritePos=mixBufOffset; - for (int j=0; jcapacity; k++) { + for (int k=0; k<(int)mc->capacity; k++) { signed char val=(signed char)mc->memory[k]; ImVec2 pos1=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)k/(double)(mc->capacity),1.0f-((float)(val+129)/256.0f))); ImVec2 pos2=ImLerp(dataRect.Min,dataRect.Max,ImVec2((double)(k+1)/(double)(mc->capacity),1.0f)); From 3cf8d1c501a0bb31c1484e455c107b97e877cf46 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sun, 17 Mar 2024 05:21:53 +0700 Subject: [PATCH 064/134] GBA: Allocate system IDs --- src/engine/instrument.h | 5 +++-- src/engine/sysDef.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 90f0e2309..a470bea6d 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -89,8 +89,9 @@ enum DivInstrumentType: unsigned short { DIV_INS_POWERNOISE=56, DIV_INS_POWERNOISE_SLOPE=57, DIV_INS_DAVE=58, - DIV_INS_GBA_DMA=59, - DIV_INS_GBA_MINMOD=60, + DIV_INS_NDS=59, + DIV_INS_GBA_DMA=60, + DIV_INS_GBA_MINMOD=61, DIV_INS_MAX, DIV_INS_NULL }; diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 1cdcdfb70..edb9419ac 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2026,7 +2026,7 @@ void DivEngine::registerSystems() { ); sysDefs[DIV_SYSTEM_GBA_DMA]=new DivSysDef( - "Game Boy Advance DMA Sound", NULL, 0xfe, 0, 2, false, true, 0, false, 1U< Date: Sat, 16 Mar 2024 17:58:50 -0500 Subject: [PATCH 065/134] is this cat and mouse now --- src/gui/gui.cpp | 2 +- src/gui/settings.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 20060f536..0bb1397b5 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1637,7 +1637,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { if (!dirExists(workingDirSong)) workingDirSong=getHomeDir(); hasOpened=fileDialog->openLoad( "Open File", - {"compatible files", "*.fur *.dmf *.mod *.fc13 *.fc14 *.smod *.fc *.ftm *.0cc *.dnm *.eft", + {"compatible files", "*.fur *.dmf *.mod *.fc13 *.fc14 *.smod *.fc *.ftm *.0cc *.dnm *.eft *.fub", "all files", "*"}, workingDirSong, dpiScale diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index cd9e72d7c..22d4b503b 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -5658,6 +5658,8 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dnm",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".eft",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fub",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".tfi",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".vgi",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".s3i",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); From 415a8297fe3cadaec8d07668d9159f2a7b6cad76 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 19:41:08 -0500 Subject: [PATCH 066/134] add effects for quick legato --- doc/3-pattern/effects.md | 5 +++++ src/engine/engine.cpp | 6 ++++++ src/engine/engine.h | 4 +++- src/engine/playback.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ src/gui/guiConst.cpp | 6 +++--- 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index e87858431..b416ebb64 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -34,6 +34,11 @@ however, effects are continuous, which means you only need to type it once and t - `E2xy`: **Note slide down.** `x` is the speed, while `y` is how many semitones to slide down. - --- - `EAxx`: **Toggle legato.** while on, new notes instantly change the pitch of the currently playing sound instead of starting it over. +- `E6xy`: **Quick legato (compatibility).** transposes note by `y` semitones after `x` ticks. + - if `x` is between 0 and 7, it transposes up. + - if `x` is between 8 and F, it transposes down. +- `E8xy`: **Quick legato up**. transposes note up by `y` semitones after `x` ticks. +- `E9xy`: **Quick legato down**. transposes note down by `y` semitones after `x` ticks. - `00xy`: **Arpeggio.** this effect produces a rapid cycle between the current note, the note plus `x` semitones and the note plus `y` semitones. - `E0xx`: **Set arpeggio speed.** this sets the number of ticks between arpeggio values. default is 1. - --- diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index c34a20e47..52b0879a5 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -105,8 +105,14 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul return "E4xx: Set vibrato range"; case 0xe5: return "E5xx: Set pitch (80: center)"; + case 0xe6: + return "E6xy: Quick legato (x: time (0-7 up; 8-F down); y: semitones)"; case 0xe7: return "E7xx: Macro release"; + case 0xe8: + return "E8xy: Quick legato up (x: time; y: semitones)"; + case 0xe9: + return "E9xy: Quick legato down (x: time; y: semitones)"; case 0xea: return "EAxx: Legato"; case 0xeb: diff --git a/src/engine/engine.h b/src/engine/engine.h index 4cfdbdc67..601d750e4 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -100,7 +100,7 @@ enum DivMIDIModes { struct DivChannelState { std::vector delayed; int note, oldNote, lastIns, pitch, portaSpeed, portaNote; - int volume, volSpeed, cut, rowDelay, volMax; + int volume, volSpeed, cut, legatoDelay, legatoTarget, rowDelay, volMax; int delayOrder, delayRow, retrigSpeed, retrigTick; int vibratoDepth, vibratoRate, vibratoPos, vibratoPosGiant, vibratoDir, vibratoFine; int tremoloDepth, tremoloRate, tremoloPos; @@ -123,6 +123,8 @@ struct DivChannelState { volume(0x7f00), volSpeed(0), cut(-1), + legatoDelay(-1), + legatoTarget(0), rowDelay(0), volMax(0), delayOrder(0), diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 2f4f2e6c7..58065f5d3 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -956,6 +956,21 @@ void DivEngine::processRow(int i, bool afterDelay) { dispatchCmd(DivCommand(DIV_CMD_PITCH,i,chan[i].pitch+(((chan[i].vibratoDepth*vibTable[chan[i].vibratoPos]*chan[i].vibratoFine)>>4)/15))); dispatchCmd(DivCommand(DIV_CMD_HINT_PITCH,i,chan[i].pitch)); break; + case 0xe6: // Delayed legato + // why does this have to follow FamiTracker verbatim + // couldn't you do better? + if ((effectVal&15)!=0) { + chan[i].legatoDelay=(((effectVal&0xf0)>>4)&7)+1; + if (effectVal&128) { + chan[i].legatoTarget=-(effectVal&15); + } else { + chan[i].legatoTarget=(effectVal&15); + } + } else { + chan[i].legatoDelay=-1; + chan[i].legatoTarget=0; + } + break; case 0xe7: // delayed macro release // "Bruh" if (effectVal>0 && (song.delayBehavior==2 || effectVal>4)+1; + chan[i].legatoTarget=(effectVal&15); + } else { + chan[i].legatoDelay=-1; + chan[i].legatoTarget=0; + } + break; + case 0xe9: // delayed legato down + if ((effectVal&15)!=0) { + chan[i].legatoDelay=((effectVal&0xf0)>>4)+1; + chan[i].legatoTarget=-(effectVal&15); + } else { + chan[i].legatoDelay=-1; + chan[i].legatoTarget=0; + } + break; case 0xea: // legato mode chan[i].legato=effectVal; break; @@ -1539,6 +1573,15 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) { break; } } + if (chan[i].legatoDelay>0) { + if (--chan[i].legatoDelay<1) { + chan[i].note+=chan[i].legatoTarget; + dispatchCmd(DivCommand(DIV_CMD_LEGATO,i,chan[i].note)); + dispatchCmd(DivCommand(DIV_CMD_HINT_LEGATO,i,chan[i].note)); + chan[i].legatoDelay=-1; + chan[i].legatoTarget=0; + } + } if (!song.noSlidesOnFirstTick || !firstTick) { if ((chan[i].keyOn || chan[i].keyOff) && chan[i].portaSpeed>0) { if (dispatchCmd(DivCommand(DIV_CMD_NOTE_PORTA,i,chan[i].portaSpeed*(song.linearPitch==2?song.pitchSlideSpeed:1),chan[i].portaNote))==2 && chan[i].portaStop && song.targetResetsSlides) { diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index ce93ddfb9..bdcfa0f53 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -489,10 +489,10 @@ const FurnaceGUIColors fxColors[256]={ GUI_COLOR_PATTERN_EFFECT_MISC, // E3 GUI_COLOR_PATTERN_EFFECT_MISC, // E4 GUI_COLOR_PATTERN_EFFECT_PITCH, // E5 - GUI_COLOR_PATTERN_EFFECT_INVALID, // E6 + GUI_COLOR_PATTERN_EFFECT_MISC, // E6 GUI_COLOR_PATTERN_EFFECT_TIME, // E7 - GUI_COLOR_PATTERN_EFFECT_INVALID, // E8 - GUI_COLOR_PATTERN_EFFECT_INVALID, // E9 + GUI_COLOR_PATTERN_EFFECT_MISC, // E8 + GUI_COLOR_PATTERN_EFFECT_MISC, // E9 GUI_COLOR_PATTERN_EFFECT_MISC, // EA GUI_COLOR_PATTERN_EFFECT_MISC, // EB GUI_COLOR_PATTERN_EFFECT_TIME, // EC From cd8deb590c46ee3d09a10168febf608f3995e0e4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 16 Mar 2024 23:20:01 -0500 Subject: [PATCH 067/134] you will not --- src/engine/fileOps/ftm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 662f93cfe..ac8a2240f 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -341,7 +341,7 @@ void copyMacro(DivInstrument* ins, DivInstrumentMacro* from, int macro_type, int } if ((DivMacroType)convertMacrosN163[macro_type] == DIV_MACRO_WAVE && ins->type == DIV_INS_N163) { - to->val[i] |= (1 << 30); // referencing local wavetables! + // pfffff } if ((DivMacroType)convertMacrosN163[macro_type] == DIV_MACRO_PITCH && (ins->type == DIV_INS_N163 || ins->type == DIV_INS_C64)) { From af389831aad6b1ee01e6d4a8fc3a4cacc219b484 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 03:10:30 -0500 Subject: [PATCH 068/134] enl_track1.ftm now loads --- src/engine/fileOps/ftm.cpp | 181 +++++++++++++++++++++---------------- 1 file changed, 102 insertions(+), 79 deletions(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index ac8a2240f..a6ef42370 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -808,11 +808,13 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si ds.systemName = "NES"; } else if (blockName == "HEADER") { CHECK_BLOCK_VERSION(4); - unsigned char totalSongs = reader.readC(); + unsigned char totalSongs=0; + if (blockVersion>=2) totalSongs=reader.readC(); logV("%d songs:", totalSongs + 1); ds.subsong.reserve(totalSongs); for (int i = 0; i <= totalSongs; i++) { - String subSongName = reader.readString(); + String subSongName; + if (blockVersion>=3) subSongName=reader.readString(); ds.subsong.push_back(new DivSubSong); ds.subsong[i]->name = subSongName; ds.subsong[i]->hilightA = hilightA; @@ -1326,101 +1328,122 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si } else if (blockName == "SEQUENCES") { CHECK_BLOCK_VERSION(6); - // reader.seek(blockSize,SEEK_CUR); - if (blockVersion < 3) { + if (blockVersion < 2) { lastError = "sequences block version is too old"; delete[] file; return false; } - unsigned char* Indices = new unsigned char[128 * 5]; - unsigned char* Types = new unsigned char[128 * 5]; - unsigned int seq_count = reader.readI(); - for (unsigned int i = 0; i < seq_count; i++) { - unsigned int index = reader.readI(); - Indices[i] = index; - unsigned int type = reader.readI(); - Types[i] = type; + if (blockVersion == 2) { + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int index = reader.readI(); + unsigned int type = reader.readI(); + unsigned char size = reader.readC(); + macros[index][type].len = size; - unsigned char size = reader.readC(); - unsigned int setting = 0; - - macros[index][type].len = size; - - unsigned int loop = reader.readI(); - - macros[index][type].loop = loop; - - if (blockVersion == 4) { - unsigned int release = reader.readI(); - setting = reader.readI(); - - macros[index][type].rel = release; - macro_types[index][type] = setting; - } - - for (int j = 0; j < size; j++) { - unsigned char seq = reader.readC(); - macros[index][type].val[j] = seq; - } - - for (int k = 0; k < (int)ds.ins.size(); k++) { - DivInstrument* ins = ds.ins[k]; - if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_NES && hasSequence[k][Types[i]]) { - copyMacro(ins, ¯os[index][type], Types[i], setting); - // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + reader.readC(); // reserved? + macros[index][type].val[j] = seq; } - } - } - if (blockVersion == 5) // Version 5 saved the release points incorrectly, this is fixed in ver 6 - { - for (int i = 0; i < 128; i++) { - for (int j = 0; j < 5; j++) { - unsigned int release = reader.readI(); - unsigned int setting = reader.readI(); - - for (int k = 0; k < (int)ds.ins.size(); k++) { - DivInstrument* ins = ds.ins[k]; - if (sequenceIndex[k][j] == i && ins->type == DIV_INS_NES && hasSequence[k][j]) { - macros[k][j].rel = release; - macro_types[k][j] = setting; - - copyMacro(ins, ¯os[sequenceIndex[k][j]][j], j, setting); - // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)j, true), ¯os[sequenceIndex[k][j]][j], sizeof(DivInstrumentMacro)); - } + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins=ds.ins[k]; + if (sequenceIndex[k][type] == index && ins->type == DIV_INS_NES && hasSequence[k][type]) { + copyMacro(ins, ¯os[index][type], type, 0); } } } - } + } else { + unsigned char* Indices = new unsigned char[128 * 5]; + unsigned char* Types = new unsigned char[128 * 5]; - if (blockVersion >= 6) // Read release points correctly stored - { for (unsigned int i = 0; i < seq_count; i++) { - unsigned int release = reader.readI(); - unsigned int setting = reader.readI(); + unsigned int index = reader.readI(); + Indices[i] = index; + unsigned int type = reader.readI(); + Types[i] = type; - // macros[index][type].rel = release; - // macro_types[index][type] = setting; + unsigned char size = reader.readC(); + unsigned int setting = 0; + + macros[index][type].len = size; + + unsigned int loop = reader.readI(); + + macros[index][type].loop = loop; + + if (blockVersion == 4) { + unsigned int release = reader.readI(); + setting = reader.readI(); + + macros[index][type].rel = release; + macro_types[index][type] = setting; + } + + for (int j = 0; j < size; j++) { + unsigned char seq = reader.readC(); + macros[index][type].val[j] = seq; + } for (int k = 0; k < (int)ds.ins.size(); k++) { DivInstrument* ins = ds.ins[k]; if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_NES && hasSequence[k][Types[i]]) { - macros[sequenceIndex[k][Types[i]]][Types[i]].rel = release; - macro_types[k][Types[i]] = setting; - - copyMacro(ins, ¯os[sequenceIndex[k][Types[i]]][Types[i]], Types[i], setting); - // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[k][Types[i]]][Types[i]], sizeof(DivInstrumentMacro)); + copyMacro(ins, ¯os[index][type], Types[i], setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[index][type]][type], sizeof(DivInstrumentMacro)); } } } - } - delete[] Indices; - delete[] Types; + if (blockVersion == 5) // Version 5 saved the release points incorrectly, this is fixed in ver 6 + { + for (int i = 0; i < 128; i++) { + for (int j = 0; j < 5; j++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][j] == i && ins->type == DIV_INS_NES && hasSequence[k][j]) { + macros[k][j].rel = release; + macro_types[k][j] = setting; + + copyMacro(ins, ¯os[sequenceIndex[k][j]][j], j, setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)j, true), ¯os[sequenceIndex[k][j]][j], sizeof(DivInstrumentMacro)); + } + } + } + } + } + + if (blockVersion >= 6) // Read release points correctly stored + { + for (unsigned int i = 0; i < seq_count; i++) { + unsigned int release = reader.readI(); + unsigned int setting = reader.readI(); + + // macros[index][type].rel = release; + // macro_types[index][type] = setting; + + for (int k = 0; k < (int)ds.ins.size(); k++) { + DivInstrument* ins = ds.ins[k]; + if (sequenceIndex[k][Types[i]] == Indices[i] && ins->type == DIV_INS_NES && hasSequence[k][Types[i]]) { + macros[sequenceIndex[k][Types[i]]][Types[i]].rel = release; + macro_types[k][Types[i]] = setting; + + copyMacro(ins, ¯os[sequenceIndex[k][Types[i]]][Types[i]], Types[i], setting); + // memcpy(ins->std.get_macro(DIV_MACRO_VOL + (DivMacroType)Types[i], true), ¯os[sequenceIndex[k][Types[i]]][Types[i]], sizeof(DivInstrumentMacro)); + } + } + } + } + + delete[] Indices; + delete[] Types; + } } else if (blockName == "GROOVES") { CHECK_BLOCK_VERSION(6); // reader.seek(blockSize,SEEK_CUR); @@ -1525,20 +1548,18 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si int patNum = reader.readI(); int numRows = reader.readI(); - /* logV("ch: %d",ch); logV("subs: %d. map_channels[ch]: %d",subs,map_channels[ch]); logV("patNum: %d",patNum); logV("rows: %d",numRows); - */ DivPattern* pat = ds.subsong[subs]->pat[map_channels[ch]].getPattern(patNum, true); for (int i = 0; i < numRows; i++) { unsigned int row = 0; - if (blockVersion >= 2 && blockVersion < 6) { // row index - row = reader.readI(); - } else { + if (ds.version==0x200 || blockVersion >= 6) { // row index row = (unsigned char)reader.readC(); + } else { + row = reader.readI(); } unsigned char nextNote = reader.readC(); @@ -1600,10 +1621,12 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si if (blockVersion >= 6) effectCols = 4; - if (ds.version == 0x020) { + if (ds.version == 0x200) { effectCols = 1; } + logV("effectCols: %d",effectCols); + unsigned char nextEffectVal = 0; unsigned char nextEffect = 0; @@ -1793,7 +1816,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si memset(sample->dataDPCM, 0xAA, true_size); - reader.read(sample->dataDPCM, true_size); + reader.read(sample->dataDPCM, sample_len); } int last_non_empty_sample = 0xff; From f20334ff7432717144650764ee55739e7c987fce Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 03:19:07 -0500 Subject: [PATCH 069/134] low quality code detected see that's why we have quality control and not accept pull requests in one second --- src/engine/fileOps/ftm.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index a6ef42370..781a1be17 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -2141,13 +2141,17 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si } } + ds.insLen = ds.ins.size(); + if (ds.insLen > 0) { for (int tries = 0; tries < 5; tries++) // de-duplicating instruments { for (int i = 0; i < 128; i++) { + if (ds.ins.empty()) break; int index = i >= (int)ds.insLen ? ((int)ds.insLen - 1) : i; if (index < 0) index = 0; + DivInstrument* ins = ds.ins[index]; if (ins->type == DIV_INS_FM) { From 3961f8ef530549dabde2b828037aa73d0a6cdbd8 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sun, 17 Mar 2024 15:30:45 +0700 Subject: [PATCH 070/134] Fix CI build --- src/engine/instrument.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index d2b5e6acc..c506419ad 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -1064,6 +1064,10 @@ void DivInstrument::putInsData2(SafeWriter* w, bool fui, const DivSong* song, bo break; case DIV_INS_DAVE: break; + case DIV_INS_NDS: + featureSM=true; + if (amiga.useSample) featureSL=true; + break; case DIV_INS_GBA_DMA: featureSM=true; featureSL=true; From 0098e7647d17f6ec6c53ec4941c75720b51e15fe Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 03:32:32 -0500 Subject: [PATCH 071/134] GUI: Dave, NDS and GBA letter icons --- res/icons.sfd | 430 +++++++++++++++++++++- res/icons.ttf | Bin 32364 -> 34100 bytes src/gui/font_furicon.cpp | 754 ++++++++++++++++++++------------------- src/icon/furIcons.h | 5 +- 4 files changed, 817 insertions(+), 372 deletions(-) diff --git a/res/icons.sfd b/res/icons.sfd index 558f8c051..5cb5e3326 100644 --- a/res/icons.sfd +++ b/res/icons.sfd @@ -21,7 +21,7 @@ OS2Version: 0 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 0 CreationTime: 1691897631 -ModificationTime: 1706927377 +ModificationTime: 1710664281 PfmFamily: 81 TTFWeight: 400 TTFWidth: 5 @@ -53,7 +53,7 @@ FitToEm: 0 WinInfo: 57540 21 12 BeginPrivate: 0 EndPrivate -BeginChars: 65536 98 +BeginChars: 65536 102 StartChar: space Encoding: 32 32 0 @@ -6833,7 +6833,7 @@ EndChar StartChar: uniE15B Encoding: 57691 57691 97 Width: 1792 -Flags: HWO +Flags: HW LayerCount: 2 Fore SplineSet @@ -6882,5 +6882,429 @@ SplineSet 1282.36914062 744.515625 1209.40039062 868.03125 1136.43164062 991.546875 c 1 EndSplineSet EndChar + +StartChar: uniE15C +Encoding: 57692 57692 98 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +543.03125 -247.515625 m 1 + 469.75 -24.15625 396.46875 199.203125 323.1875 422.5625 c 1 + 360.635742188 422.5625 398.083007812 422.5625 435.53125 422.5625 c 1 + 471.051757812 312.171875 506.573242188 201.78125 542.09375 91.390625 c 1 + 563.526367188 13.6298828125 584.958007812 -64.1298828125 606.390625 -141.890625 c 1 + 607.666992188 -141.890625 608.942382812 -141.890625 610.21875 -141.890625 c 1 + 631.989257812 -64.1298828125 653.760742188 13.6298828125 675.53125 91.390625 c 1 + 711.051757812 201.78125 746.573242188 312.171875 782.09375 422.5625 c 1 + 818.578125 422.5625 855.0625 422.5625 891.546875 422.5625 c 1 + 817.301757812 199.203125 743.057617188 -24.15625 668.8125 -247.515625 c 1 + 626.885742188 -247.515625 584.958007812 -247.515625 543.03125 -247.515625 c 1 +1028.5 -247.515625 m 1 + 1028.5 -24.15625 1028.5 199.203125 1028.5 422.5625 c 1 + 1171.546875 422.5625 1314.59375 422.5625 1457.640625 422.5625 c 1 + 1457.640625 390.557617188 1457.640625 358.551757812 1457.640625 326.546875 c 1 + 1350.73925781 326.546875 1243.83886719 326.546875 1136.9375 326.546875 c 1 + 1136.9375 264.463867188 1136.9375 202.379882812 1136.9375 140.296875 c 1 + 1233.91699219 140.296875 1330.89550781 140.296875 1427.875 140.296875 c 1 + 1427.875 108.317382812 1427.875 76.3388671875 1427.875 44.359375 c 1 + 1330.89550781 44.359375 1233.91699219 44.359375 1136.9375 44.359375 c 1 + 1136.9375 -20.9267578125 1136.9375 -86.2138671875 1136.9375 -151.5 c 1 + 1243.83886719 -151.5 1350.73925781 -151.5 1457.640625 -151.5 c 1 + 1457.640625 -183.504882812 1457.640625 -215.510742188 1457.640625 -247.515625 c 1 + 1314.59375 -247.515625 1171.546875 -247.515625 1028.5 -247.515625 c 1 +310.0625 1288.578125 m 1 + 389.125 1288.578125 468.1875 1288.578125 547.25 1288.578125 c 1 + 590.0625 1288.578125 628.96875 1281.546875 663.8125 1267.484375 c 128 + 698.65625 1253.34375 728.5 1232.40625 753.1875 1204.59375 c 128 + 777.71875 1176.703125 796.78125 1141.859375 810.21875 1099.90625 c 128 + 823.65625 1058.03125 830.375 1009.203125 830.375 953.578125 c 256 + 830.375 897.875 823.65625 849.046875 810.21875 807.171875 c 128 + 796.78125 765.21875 777.71875 730.375 753.1875 702.484375 c 128 + 728.5 674.671875 698.65625 653.734375 663.8125 639.59375 c 128 + 628.96875 625.53125 590.0625 618.5 547.25 618.5 c 1 + 468.1875 618.5 389.125 618.5 310.0625 618.5 c 1 + 310.0625 841.859375 310.0625 1065.21875 310.0625 1288.578125 c 1 +547.25 714.515625 m 1 + 597.09375 714.515625 637.40625 730.21875 668.1875 761.546875 c 128 + 698.8125 792.875 714.28125 838.96875 714.28125 899.75 c 1 + 714.28125 935.609375 714.28125 971.46875 714.28125 1007.328125 c 1 + 714.28125 1068.109375 698.8125 1114.203125 668.1875 1145.53125 c 128 + 637.40625 1176.9375 597.09375 1192.5625 547.25 1192.5625 c 1 + 504.333007812 1192.5625 461.416992188 1192.5625 418.5 1192.5625 c 1 + 418.5 1033.21386719 418.5 873.864257812 418.5 714.515625 c 1 + 461.416992188 714.515625 504.333007812 714.515625 547.25 714.515625 c 1 +1368.65625 618.5 m 1 + 1348.5 678.96875 1328.34375 739.4375 1308.1875 799.90625 c 1 + 1224.64550781 799.90625 1141.10449219 799.90625 1057.5625 799.90625 c 1 + 1038.03125 739.4375 1018.5 678.96875 998.96875 618.5 c 1 + 962.198242188 618.5 925.426757812 618.5 888.65625 618.5 c 1 + 964.801757812 841.859375 1040.94824219 1065.21875 1117.09375 1288.578125 c 1 + 1162.5625 1288.578125 1208.03125 1288.578125 1253.5 1288.578125 c 1 + 1329.64550781 1065.21875 1405.79199219 841.859375 1481.9375 618.5 c 1 + 1444.17675781 618.5 1406.41699219 618.5 1368.65625 618.5 c 1 +1185.21875 1188.734375 m 1 + 1183.65625 1188.734375 1182.09375 1188.734375 1180.53125 1188.734375 c 1 + 1148.1875 1090.16699219 1115.84375 991.598632812 1083.5 893.03125 c 1 + 1149.4375 893.03125 1215.375 893.03125 1281.3125 893.03125 c 1 + 1249.28125 991.598632812 1217.25 1090.16699219 1185.21875 1188.734375 c 1 +EndSplineSet +EndChar + +StartChar: uniE15D +Encoding: 57693 57693 99 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +218.8515625 936.797851562 m 1 + 317.614257812 936.797851562 416.377929688 936.797851562 515.140625 936.797851562 c 1 + 568.8515625 936.797851562 617.2890625 928.008789062 661.0390625 910.430664062 c 128 + 704.59375 892.754882812 741.703125 866.583007812 772.5625 831.817382812 c 128 + 803.421875 796.954101562 827.25 753.399414062 844.046875 700.958007812 c 128 + 860.84375 648.614257812 869.2421875 587.579101562 869.2421875 518.047851562 c 256 + 869.2421875 448.418945312 860.84375 387.383789062 844.046875 335.040039062 c 128 + 827.25 282.598632812 803.421875 239.043945312 772.5625 204.180664062 c 128 + 741.703125 169.415039062 704.59375 143.243164062 661.0390625 125.567382812 c 128 + 617.2890625 107.989257812 568.8515625 99.2001953125 515.140625 99.2001953125 c 1 + 416.377929688 99.2001953125 317.614257812 99.2001953125 218.8515625 99.2001953125 c 1 + 218.8515625 378.399414062 218.8515625 657.598632812 218.8515625 936.797851562 c 1 +515.140625 219.219726562 m 1 + 577.640625 219.219726562 628.03125 238.848632812 666.3125 278.008789062 c 128 + 704.7890625 317.168945312 723.9296875 374.786132812 723.9296875 450.762695312 c 1 + 723.9296875 495.586914062 723.9296875 540.411132812 723.9296875 585.235351562 c 1 + 723.9296875 661.211914062 704.7890625 718.829101562 666.3125 757.989257812 c 128 + 628.03125 797.247070312 577.640625 816.778320312 515.140625 816.778320312 c 1 + 461.559570312 816.778320312 407.979492188 816.778320312 354.3984375 816.778320312 c 1 + 354.3984375 617.591796875 354.3984375 418.405273438 354.3984375 219.219726562 c 1 + 407.979492188 219.219726562 461.559570312 219.219726562 515.140625 219.219726562 c 1 +1269.6328125 84.8447265625 m 0 + 1199.125 84.8447265625 1139.359375 97.6376953125 1090.140625 123.223632812 c 128 + 1040.921875 148.809570312 998.734375 183.184570312 963.578125 226.446289062 c 1 + 994.762695312 255.645507812 1025.94824219 284.844726562 1057.1328125 314.043945312 c 1 + 1086.8203125 278.008789062 1119.4375 250.762695312 1154.984375 232.403320312 c 128 + 1190.53125 214.043945312 1231.15625 204.766601562 1276.859375 204.766601562 c 0 + 1330.375 204.766601562 1370.8046875 216.778320312 1397.953125 240.801757812 c 128 + 1425.1015625 264.825195312 1438.7734375 297.247070312 1438.7734375 337.969726562 c 0 + 1438.7734375 370.782226562 1429.203125 396.758789062 1410.0625 415.997070312 c 128 + 1390.7265625 435.235351562 1356.7421875 449.590820312 1307.9140625 459.161132812 c 1 + 1283.109375 463.587890625 1258.3046875 468.014648438 1233.5 472.442382812 c 1 + 1152.0546875 487.579101562 1090.7265625 514.434570312 1049.90625 552.813476562 c 128 + 1009.0859375 591.192382812 988.7734375 644.024414062 988.7734375 711.211914062 c 0 + 988.7734375 748.028320312 995.8046875 781.426757812 1009.8671875 811.407226562 c 128 + 1023.734375 841.387695312 1043.4609375 866.583007812 1068.65625 886.993164062 c 128 + 1093.8515625 907.403320312 1124.3203125 923.223632812 1160.453125 934.356445312 c 128 + 1196.390625 945.586914062 1236.8203125 951.153320312 1281.546875 951.153320312 c 0 + 1344.828125 951.153320312 1399.515625 940.215820312 1446 918.243164062 c 128 + 1492.2890625 896.172851562 1531.9375 864.434570312 1564.75 822.833007812 c 1 + 1533.17480469 794.837890625 1501.59863281 766.842773438 1470.0234375 738.848632812 c 1 + 1448.34375 766.778320312 1421.9765625 789.239257812 1390.7265625 806.036132812 c 128 + 1359.671875 822.833007812 1320.8046875 831.231445312 1274.3203125 831.231445312 c 0 + 1226.46875 831.231445312 1189.1640625 821.563476562 1162.796875 802.422851562 c 128 + 1136.4296875 783.184570312 1123.1484375 755.157226562 1123.1484375 718.438476562 c 0 + 1123.1484375 683.184570312 1133.890625 657.012695312 1155.5703125 639.825195312 c 128 + 1177.25 622.637695312 1210.84375 609.551757812 1256.3515625 600.762695312 c 1 + 1281.15625 595.586914062 1305.9609375 590.411132812 1330.765625 585.235351562 c 1 + 1414.75 569.219726562 1476.2734375 541.973632812 1514.9453125 503.594726562 c 128 + 1553.8125 465.215820312 1573.1484375 412.383789062 1573.1484375 345.196289062 c 0 + 1573.1484375 306.036132812 1566.3125 270.391601562 1552.8359375 238.360351562 c 128 + 1539.1640625 206.426757812 1519.4375 178.985351562 1493.4609375 156.231445312 c 128 + 1467.2890625 133.379882812 1435.6484375 115.801757812 1397.953125 103.399414062 c 128 + 1360.453125 90.9970703125 1317.484375 84.8447265625 1269.6328125 84.8447265625 c 0 +EndSplineSet +EndChar + +StartChar: uniE15E +Encoding: 57694 57694 100 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +11.3125 422.5625 m 1 + 84.90625 422.5625 158.5 422.5625 232.09375 422.5625 c 1 + 271.78125 422.5625 307.171875 416.15625 338.1875 403.34375 c 128 + 369.28125 390.53125 395.453125 370.53125 416.9375 343.34375 c 128 + 438.34375 316.15625 454.671875 281.46875 465.921875 239.203125 c 128 + 477.09375 196.9375 482.71875 146.390625 482.71875 87.5625 c 256 + 482.71875 28.65625 477.09375 -21.890625 465.921875 -64.15625 c 128 + 454.671875 -106.421875 438.34375 -141.109375 416.9375 -168.296875 c 128 + 395.453125 -195.484375 369.28125 -215.484375 338.1875 -228.296875 c 128 + 307.171875 -241.109375 271.78125 -247.515625 232.09375 -247.515625 c 1 + 158.5 -247.515625 84.90625 -247.515625 11.3125 -247.515625 c 1 + 11.3125 -24.15625 11.3125 199.203125 11.3125 422.5625 c 1 +232.09375 -158.21875 m 1 + 276.3125 -158.21875 310.84375 -144 335.84375 -115.484375 c 128 + 360.765625 -87.046875 373.265625 -45.25 373.265625 9.75 c 1 + 373.265625 61.5986328125 373.265625 113.448242188 373.265625 165.296875 c 1 + 373.265625 220.296875 360.765625 262.09375 335.84375 290.53125 c 128 + 310.84375 319.046875 276.3125 333.265625 232.09375 333.265625 c 1 + 192.432617188 333.265625 152.770507812 333.265625 113.109375 333.265625 c 1 + 113.109375 169.4375 113.109375 5.609375 113.109375 -158.21875 c 1 + 152.770507812 -158.21875 192.432617188 -158.21875 232.09375 -158.21875 c 1 +1031.15625 165.296875 m 1 + 1033.39550781 203.370117188 1035.63574219 241.442382812 1037.875 279.515625 c 1 + 1034.046875 279.515625 1030.21875 279.515625 1026.390625 279.515625 c 1 + 1011.02636719 242.067382812 995.661132812 204.620117188 980.296875 167.171875 c 1 + 936.78125 76.3125 893.265625 -14.546875 849.75 -105.40625 c 1 + 806.546875 -14.546875 763.34375 76.3125 720.140625 167.171875 c 1 + 704.776367188 203.995117188 689.411132812 240.817382812 674.046875 277.640625 c 1 + 670.21875 277.640625 666.390625 277.640625 662.5625 277.640625 c 1 + 664.801757812 240.192382812 667.041992188 202.745117188 669.28125 165.296875 c 1 + 669.28125 27.6923828125 669.28125 -109.911132812 669.28125 -247.515625 c 1 + 636.625 -247.515625 603.96875 -247.515625 571.3125 -247.515625 c 1 + 571.3125 -24.15625 571.3125 199.203125 571.3125 422.5625 c 1 + 611.3125 422.5625 651.3125 422.5625 691.3125 422.5625 c 1 + 727.484375 344.489257812 763.65625 266.416992188 799.828125 188.34375 c 1 + 815.504882812 144.176757812 831.182617188 100.010742188 846.859375 55.84375 c 1 + 849.723632812 55.84375 852.588867188 55.84375 855.453125 55.84375 c 1 + 871.15625 100.010742188 886.859375 144.176757812 902.5625 188.34375 c 1 + 938.395507812 266.416992188 974.229492188 344.489257812 1010.0625 422.5625 c 1 + 1049.75 422.5625 1089.4375 422.5625 1129.125 422.5625 c 1 + 1129.125 199.203125 1129.125 -24.15625 1129.125 -247.515625 c 1 + 1096.46875 -247.515625 1063.8125 -247.515625 1031.15625 -247.515625 c 1 + 1031.15625 -109.911132812 1031.15625 27.6923828125 1031.15625 165.296875 c 1 +1666.703125 -247.515625 m 1 + 1649.41113281 -185.745117188 1632.12011719 -123.973632812 1614.828125 -62.203125 c 1 + 1539.64550781 -62.203125 1464.46386719 -62.203125 1389.28125 -62.203125 c 1 + 1371.98925781 -123.973632812 1354.69824219 -185.745117188 1337.40625 -247.515625 c 1 + 1304.125 -247.515625 1270.84375 -247.515625 1237.5625 -247.515625 c 1 + 1304.4375 -24.15625 1371.3125 199.203125 1438.1875 422.5625 c 1 + 1481.390625 422.5625 1524.59375 422.5625 1567.796875 422.5625 c 1 + 1635.01074219 199.203125 1702.22363281 -24.15625 1769.4375 -247.515625 c 1 + 1735.19238281 -247.515625 1700.94824219 -247.515625 1666.703125 -247.515625 c 1 +1528.421875 232.484375 m 1 + 1521.390625 265.114257812 1514.359375 297.745117188 1507.328125 330.375 c 1 + 1503.16113281 330.375 1498.99511719 330.375 1494.828125 330.375 c 1 + 1487.796875 297.745117188 1480.765625 265.114257812 1473.734375 232.484375 c 1 + 1453.890625 162.09375 1434.046875 91.703125 1414.203125 21.3125 c 1 + 1473.08300781 21.3125 1531.96386719 21.3125 1590.84375 21.3125 c 1 + 1570.03613281 91.703125 1549.22949219 162.09375 1528.421875 232.484375 c 1 +456.3125 717.40625 m 1 + 452.458007812 717.40625 448.604492188 717.40625 444.75 717.40625 c 1 + 438.421875 685.375 422.09375 658.96875 395.84375 638.1875 c 128 + 369.59375 617.40625 332.484375 607.015625 284.4375 607.015625 c 0 + 249.90625 607.015625 218.03125 613.34375 188.96875 626.15625 c 128 + 159.828125 638.96875 134.359375 659.28125 112.640625 687.171875 c 128 + 90.84375 714.984375 73.890625 750.84375 61.78125 794.671875 c 128 + 49.59375 838.5 43.5 891.15625 43.5 952.5625 c 256 + 43.5 1014.046875 49.4375 1066.625 61.234375 1110.53125 c 128 + 73.109375 1154.359375 90.375 1190.375 113.109375 1218.5 c 128 + 135.84375 1246.625 163.1875 1267.328125 195.21875 1280.453125 c 128 + 227.171875 1293.578125 263.34375 1300.0625 303.65625 1300.0625 c 0 + 363.1875 1300.0625 411.546875 1287.328125 448.65625 1261.703125 c 128 + 485.765625 1236.078125 514.515625 1199.59375 535.0625 1152.25 c 1 + 507.223632812 1135.921875 479.385742188 1119.59375 451.546875 1103.265625 c 1 + 439.984375 1135.921875 422.5625 1161.859375 399.203125 1181.078125 c 128 + 375.84375 1200.296875 344.28125 1209.828125 304.59375 1209.828125 c 0 + 256.625 1209.828125 219.359375 1194.515625 192.796875 1163.8125 c 128 + 166.234375 1133.03125 152.953125 1090.21875 152.953125 1035.140625 c 1 + 152.953125 980.739257812 152.953125 926.338867188 152.953125 871.9375 c 1 + 152.953125 816.9375 166.234375 774.046875 192.796875 743.265625 c 128 + 219.359375 712.5625 256.625 697.25 304.59375 697.25 c 0 + 324.4375 697.25 343.03125 700.0625 360.296875 705.84375 c 128 + 377.5625 711.625 392.796875 719.90625 405.921875 730.84375 c 128 + 419.046875 741.703125 429.28125 755.296875 436.625 771.625 c 128 + 443.96875 787.953125 447.640625 806.3125 447.640625 826.78125 c 1 + 447.640625 846.3125 447.640625 865.84375 447.640625 885.375 c 1 + 406.364257812 885.375 365.088867188 885.375 323.8125 885.375 c 1 + 323.8125 914.489257812 323.8125 943.604492188 323.8125 972.71875 c 1 + 398.057617188 972.71875 472.301757812 972.71875 546.546875 972.71875 c 1 + 546.546875 854.645507812 546.546875 736.573242188 546.546875 618.5 c 1 + 516.46875 618.5 486.390625 618.5 456.3125 618.5 c 1 + 456.3125 651.46875 456.3125 684.4375 456.3125 717.40625 c 1 +710.375 1288.578125 m 1 + 800.948242188 1288.578125 891.520507812 1288.578125 982.09375 1288.578125 c 1 + 1033.890625 1288.578125 1073.265625 1273.890625 1100.140625 1244.4375 c 128 + 1127.015625 1214.984375 1140.453125 1172.09375 1140.453125 1115.765625 c 0 + 1140.453125 1072.875 1131.15625 1039.28125 1112.640625 1014.984375 c 128 + 1094.046875 990.6875 1067.484375 976.9375 1032.953125 973.734375 c 1 + 1032.953125 969.879882812 1032.953125 966.026367188 1032.953125 962.171875 c 1 + 1052.171875 962.171875 1069.59375 958.5 1085.296875 951.15625 c 128 + 1100.921875 943.8125 1114.515625 933.34375 1126.078125 919.90625 c 128 + 1137.5625 906.46875 1146.546875 890.53125 1152.953125 871.9375 c 128 + 1159.359375 853.34375 1162.5625 833.1875 1162.5625 811.46875 c 0 + 1162.5625 782.640625 1158.890625 756.390625 1151.546875 732.71875 c 128 + 1144.125 709.046875 1133.734375 688.734375 1120.296875 671.78125 c 128 + 1106.859375 654.828125 1090.6875 641.703125 1071.859375 632.40625 c 128 + 1052.953125 623.109375 1032.015625 618.5 1008.96875 618.5 c 1 + 909.4375 618.5 809.90625 618.5 710.375 618.5 c 1 + 710.375 841.859375 710.375 1065.21875 710.375 1288.578125 c 1 +812.171875 707.796875 m 1 + 867.848632812 707.796875 923.526367188 707.796875 979.203125 707.796875 c 1 + 1003.5 707.796875 1022.09375 714.359375 1034.90625 727.484375 c 128 + 1047.640625 740.609375 1054.046875 761.546875 1054.046875 790.375 c 1 + 1054.046875 805.088867188 1054.046875 819.801757812 1054.046875 834.515625 c 1 + 1054.046875 863.265625 1047.640625 884.28125 1034.90625 897.40625 c 128 + 1022.09375 910.53125 1003.5 917.09375 979.203125 917.09375 c 1 + 923.526367188 917.09375 867.848632812 917.09375 812.171875 917.09375 c 1 + 812.171875 847.328125 812.171875 777.5625 812.171875 707.796875 c 1 +812.171875 1004.4375 m 1 + 862.40625 1004.4375 912.640625 1004.4375 962.875 1004.4375 c 1 + 985.296875 1004.4375 1002.5625 1010.375 1014.671875 1022.171875 c 128 + 1026.859375 1034.046875 1032.953125 1053.34375 1032.953125 1080.296875 c 1 + 1032.953125 1094.671875 1032.953125 1109.046875 1032.953125 1123.421875 c 1 + 1032.953125 1150.375 1026.859375 1169.671875 1014.671875 1181.546875 c 128 + 1002.5625 1193.34375 985.296875 1199.28125 962.875 1199.28125 c 1 + 912.640625 1199.28125 862.40625 1199.28125 812.171875 1199.28125 c 1 + 812.171875 1134.33300781 812.171875 1069.38574219 812.171875 1004.4375 c 1 +1645.765625 618.5 m 1 + 1628.47363281 680.270507812 1611.18261719 742.041992188 1593.890625 803.8125 c 1 + 1518.70800781 803.8125 1443.52636719 803.8125 1368.34375 803.8125 c 1 + 1351.05175781 742.041992188 1333.76074219 680.270507812 1316.46875 618.5 c 1 + 1283.1875 618.5 1249.90625 618.5 1216.625 618.5 c 1 + 1283.5 841.859375 1350.375 1065.21875 1417.25 1288.578125 c 1 + 1460.453125 1288.578125 1503.65625 1288.578125 1546.859375 1288.578125 c 1 + 1614.07324219 1065.21875 1681.28613281 841.859375 1748.5 618.5 c 1 + 1714.25488281 618.5 1680.01074219 618.5 1645.765625 618.5 c 1 +1507.484375 1098.5 m 1 + 1500.453125 1131.12988281 1493.421875 1163.76074219 1486.390625 1196.390625 c 1 + 1482.22363281 1196.390625 1478.05761719 1196.390625 1473.890625 1196.390625 c 1 + 1466.859375 1163.76074219 1459.828125 1131.12988281 1452.796875 1098.5 c 1 + 1432.953125 1028.109375 1413.109375 957.71875 1393.265625 887.328125 c 1 + 1452.14550781 887.328125 1511.02636719 887.328125 1569.90625 887.328125 c 1 + 1549.09863281 957.71875 1528.29199219 1028.109375 1507.484375 1098.5 c 1 +EndSplineSet +EndChar + +StartChar: uniE15F +Encoding: 57695 57695 101 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +711.3125 165.296875 m 1 + 713.551757812 203.370117188 715.791992188 241.442382812 718.03125 279.515625 c 1 + 714.203125 279.515625 710.375 279.515625 706.546875 279.515625 c 1 + 691.182617188 242.067382812 675.817382812 204.620117188 660.453125 167.171875 c 1 + 616.9375 76.3125 573.421875 -14.546875 529.90625 -105.40625 c 1 + 486.703125 -14.546875 443.5 76.3125 400.296875 167.171875 c 1 + 384.932617188 203.995117188 369.567382812 240.817382812 354.203125 277.640625 c 1 + 350.375 277.640625 346.546875 277.640625 342.71875 277.640625 c 1 + 344.958007812 240.192382812 347.198242188 202.745117188 349.4375 165.296875 c 1 + 349.4375 27.6923828125 349.4375 -109.911132812 349.4375 -247.515625 c 1 + 316.78125 -247.515625 284.125 -247.515625 251.46875 -247.515625 c 1 + 251.46875 -24.15625 251.46875 199.203125 251.46875 422.5625 c 1 + 291.46875 422.5625 331.46875 422.5625 371.46875 422.5625 c 1 + 407.640625 344.489257812 443.8125 266.416992188 479.984375 188.34375 c 1 + 495.661132812 144.176757812 511.338867188 100.010742188 527.015625 55.84375 c 1 + 529.879882812 55.84375 532.745117188 55.84375 535.609375 55.84375 c 1 + 551.3125 100.010742188 567.015625 144.176757812 582.71875 188.34375 c 1 + 618.551757812 266.416992188 654.385742188 344.489257812 690.21875 422.5625 c 1 + 729.90625 422.5625 769.59375 422.5625 809.28125 422.5625 c 1 + 809.28125 199.203125 809.28125 -24.15625 809.28125 -247.515625 c 1 + 776.625 -247.515625 743.96875 -247.515625 711.3125 -247.515625 c 1 + 711.3125 -109.911132812 711.3125 27.6923828125 711.3125 165.296875 c 1 +1431.3125 165.296875 m 1 + 1433.55175781 203.370117188 1435.79199219 241.442382812 1438.03125 279.515625 c 1 + 1434.203125 279.515625 1430.375 279.515625 1426.546875 279.515625 c 1 + 1411.18261719 242.067382812 1395.81738281 204.620117188 1380.453125 167.171875 c 1 + 1336.9375 76.3125 1293.421875 -14.546875 1249.90625 -105.40625 c 1 + 1206.703125 -14.546875 1163.5 76.3125 1120.296875 167.171875 c 1 + 1104.93261719 203.995117188 1089.56738281 240.817382812 1074.203125 277.640625 c 1 + 1070.375 277.640625 1066.546875 277.640625 1062.71875 277.640625 c 1 + 1064.95800781 240.192382812 1067.19824219 202.745117188 1069.4375 165.296875 c 1 + 1069.4375 27.6923828125 1069.4375 -109.911132812 1069.4375 -247.515625 c 1 + 1036.78125 -247.515625 1004.125 -247.515625 971.46875 -247.515625 c 1 + 971.46875 -24.15625 971.46875 199.203125 971.46875 422.5625 c 1 + 1011.46875 422.5625 1051.46875 422.5625 1091.46875 422.5625 c 1 + 1127.640625 344.489257812 1163.8125 266.416992188 1199.984375 188.34375 c 1 + 1215.66113281 144.176757812 1231.33886719 100.010742188 1247.015625 55.84375 c 1 + 1249.87988281 55.84375 1252.74511719 55.84375 1255.609375 55.84375 c 1 + 1271.3125 100.010742188 1287.015625 144.176757812 1302.71875 188.34375 c 1 + 1338.55175781 266.416992188 1374.38574219 344.489257812 1410.21875 422.5625 c 1 + 1449.90625 422.5625 1489.59375 422.5625 1529.28125 422.5625 c 1 + 1529.28125 199.203125 1529.28125 -24.15625 1529.28125 -247.515625 c 1 + 1496.625 -247.515625 1463.96875 -247.515625 1431.3125 -247.515625 c 1 + 1431.3125 -109.911132812 1431.3125 27.6923828125 1431.3125 165.296875 c 1 +456.3125 717.40625 m 1 + 452.458007812 717.40625 448.604492188 717.40625 444.75 717.40625 c 1 + 438.421875 685.375 422.09375 658.96875 395.84375 638.1875 c 128 + 369.59375 617.40625 332.484375 607.015625 284.4375 607.015625 c 0 + 249.90625 607.015625 218.03125 613.34375 188.96875 626.15625 c 128 + 159.828125 638.96875 134.359375 659.28125 112.640625 687.171875 c 128 + 90.84375 714.984375 73.890625 750.84375 61.78125 794.671875 c 128 + 49.59375 838.5 43.5 891.15625 43.5 952.5625 c 256 + 43.5 1014.046875 49.4375 1066.625 61.234375 1110.53125 c 128 + 73.109375 1154.359375 90.375 1190.375 113.109375 1218.5 c 128 + 135.84375 1246.625 163.1875 1267.328125 195.21875 1280.453125 c 128 + 227.171875 1293.578125 263.34375 1300.0625 303.65625 1300.0625 c 0 + 363.1875 1300.0625 411.546875 1287.328125 448.65625 1261.703125 c 128 + 485.765625 1236.078125 514.515625 1199.59375 535.0625 1152.25 c 1 + 507.223632812 1135.921875 479.385742188 1119.59375 451.546875 1103.265625 c 1 + 439.984375 1135.921875 422.5625 1161.859375 399.203125 1181.078125 c 128 + 375.84375 1200.296875 344.28125 1209.828125 304.59375 1209.828125 c 0 + 256.625 1209.828125 219.359375 1194.515625 192.796875 1163.8125 c 128 + 166.234375 1133.03125 152.953125 1090.21875 152.953125 1035.140625 c 1 + 152.953125 980.739257812 152.953125 926.338867188 152.953125 871.9375 c 1 + 152.953125 816.9375 166.234375 774.046875 192.796875 743.265625 c 128 + 219.359375 712.5625 256.625 697.25 304.59375 697.25 c 0 + 324.4375 697.25 343.03125 700.0625 360.296875 705.84375 c 128 + 377.5625 711.625 392.796875 719.90625 405.921875 730.84375 c 128 + 419.046875 741.703125 429.28125 755.296875 436.625 771.625 c 128 + 443.96875 787.953125 447.640625 806.3125 447.640625 826.78125 c 1 + 447.640625 846.3125 447.640625 865.84375 447.640625 885.375 c 1 + 406.364257812 885.375 365.088867188 885.375 323.8125 885.375 c 1 + 323.8125 914.489257812 323.8125 943.604492188 323.8125 972.71875 c 1 + 398.057617188 972.71875 472.301757812 972.71875 546.546875 972.71875 c 1 + 546.546875 854.645507812 546.546875 736.573242188 546.546875 618.5 c 1 + 516.46875 618.5 486.390625 618.5 456.3125 618.5 c 1 + 456.3125 651.46875 456.3125 684.4375 456.3125 717.40625 c 1 +710.375 1288.578125 m 1 + 800.948242188 1288.578125 891.520507812 1288.578125 982.09375 1288.578125 c 1 + 1033.890625 1288.578125 1073.265625 1273.890625 1100.140625 1244.4375 c 128 + 1127.015625 1214.984375 1140.453125 1172.09375 1140.453125 1115.765625 c 0 + 1140.453125 1072.875 1131.15625 1039.28125 1112.640625 1014.984375 c 128 + 1094.046875 990.6875 1067.484375 976.9375 1032.953125 973.734375 c 1 + 1032.953125 969.879882812 1032.953125 966.026367188 1032.953125 962.171875 c 1 + 1052.171875 962.171875 1069.59375 958.5 1085.296875 951.15625 c 128 + 1100.921875 943.8125 1114.515625 933.34375 1126.078125 919.90625 c 128 + 1137.5625 906.46875 1146.546875 890.53125 1152.953125 871.9375 c 128 + 1159.359375 853.34375 1162.5625 833.1875 1162.5625 811.46875 c 0 + 1162.5625 782.640625 1158.890625 756.390625 1151.546875 732.71875 c 128 + 1144.125 709.046875 1133.734375 688.734375 1120.296875 671.78125 c 128 + 1106.859375 654.828125 1090.6875 641.703125 1071.859375 632.40625 c 128 + 1052.953125 623.109375 1032.015625 618.5 1008.96875 618.5 c 1 + 909.4375 618.5 809.90625 618.5 710.375 618.5 c 1 + 710.375 841.859375 710.375 1065.21875 710.375 1288.578125 c 1 +812.171875 707.796875 m 1 + 867.848632812 707.796875 923.526367188 707.796875 979.203125 707.796875 c 1 + 1003.5 707.796875 1022.09375 714.359375 1034.90625 727.484375 c 128 + 1047.640625 740.609375 1054.046875 761.546875 1054.046875 790.375 c 1 + 1054.046875 805.088867188 1054.046875 819.801757812 1054.046875 834.515625 c 1 + 1054.046875 863.265625 1047.640625 884.28125 1034.90625 897.40625 c 128 + 1022.09375 910.53125 1003.5 917.09375 979.203125 917.09375 c 1 + 923.526367188 917.09375 867.848632812 917.09375 812.171875 917.09375 c 1 + 812.171875 847.328125 812.171875 777.5625 812.171875 707.796875 c 1 +812.171875 1004.4375 m 1 + 862.40625 1004.4375 912.640625 1004.4375 962.875 1004.4375 c 1 + 985.296875 1004.4375 1002.5625 1010.375 1014.671875 1022.171875 c 128 + 1026.859375 1034.046875 1032.953125 1053.34375 1032.953125 1080.296875 c 1 + 1032.953125 1094.671875 1032.953125 1109.046875 1032.953125 1123.421875 c 1 + 1032.953125 1150.375 1026.859375 1169.671875 1014.671875 1181.546875 c 128 + 1002.5625 1193.34375 985.296875 1199.28125 962.875 1199.28125 c 1 + 912.640625 1199.28125 862.40625 1199.28125 812.171875 1199.28125 c 1 + 812.171875 1134.33300781 812.171875 1069.38574219 812.171875 1004.4375 c 1 +1645.765625 618.5 m 1 + 1628.47363281 680.270507812 1611.18261719 742.041992188 1593.890625 803.8125 c 1 + 1518.70800781 803.8125 1443.52636719 803.8125 1368.34375 803.8125 c 1 + 1351.05175781 742.041992188 1333.76074219 680.270507812 1316.46875 618.5 c 1 + 1283.1875 618.5 1249.90625 618.5 1216.625 618.5 c 1 + 1283.5 841.859375 1350.375 1065.21875 1417.25 1288.578125 c 1 + 1460.453125 1288.578125 1503.65625 1288.578125 1546.859375 1288.578125 c 1 + 1614.07324219 1065.21875 1681.28613281 841.859375 1748.5 618.5 c 1 + 1714.25488281 618.5 1680.01074219 618.5 1645.765625 618.5 c 1 +1507.484375 1098.5 m 1 + 1500.453125 1131.12988281 1493.421875 1163.76074219 1486.390625 1196.390625 c 1 + 1482.22363281 1196.390625 1478.05761719 1196.390625 1473.890625 1196.390625 c 1 + 1466.859375 1163.76074219 1459.828125 1131.12988281 1452.796875 1098.5 c 1 + 1432.953125 1028.109375 1413.109375 957.71875 1393.265625 887.328125 c 1 + 1452.14550781 887.328125 1511.02636719 887.328125 1569.90625 887.328125 c 1 + 1549.09863281 957.71875 1528.29199219 1028.109375 1507.484375 1098.5 c 1 +EndSplineSet +EndChar EndChars EndSplineFont diff --git a/res/icons.ttf b/res/icons.ttf index 07f6313f2462b287c5cef9b3e90a4acc6d2b3f40..f10b37a055ebfa3e065e97c591dd5e2cd8d852c7 100644 GIT binary patch delta 1957 zcmcIlX-rgC6h8O8S>Et)7GQwFz|5P+n>R2HyxACJ*alg~QY!-1f(VSPR)JBdELui! zX>3ed`)F-b38|(b-HevTCA6_=q>F!QYTc;BEip}_Nt@WzxD34yX}YETRp;I_=Y02` zd+(g{ot(M#0Db%t5e5VRYS;=SG?kUrEIru$`I`Vc6Y;8{yri@Y^biNIiRcAT( z+^Z4+PzT1(Gc)`nmSs8;TG=1flu+~EiBm`cttg=kmCo^Fiz{}?ClqhCvC#`GmNL#cQ*$w zoc|S@vQO~Wcb&oh5F91(Srow7)D`S(4d3{}1TgdyUb`9U?&%$@bi4|%^&&oFmTC75~s8Rd?-ONSVFby==Bqu4L zIeBy+pm>a=G#Wq#_pqk$Ah0%Fy>qQmJVjhlwn7`UL&wAc@+_j$7KIl5klW%L$vZsJ zFTb#Xrg4&a0I#4E#J#3iaa~^(gMTja%_`+n@@P;(ETljdj!1{}SUjZUIo&sqqd?iS zl>D?@g*}X52QMs!3Y=cjm5LJZbQK^ko-PHUWOR)F_kqMSzJ#!xXO(PrjMo((lYm$? zQo1q`VZ6LSR~|##qGa?!8e3hK5e~JZLy?n+jm#kb{T;Xc9UN!1a$JZ1_U(%L`igDj zvHW|!F3TI1-B=V$FiU2_gkid24fHIf_))IM5v4#mtb`VL4L*cP_!=(3O&p=%a$@4*Oy$wa(F6)Rvz%p3U#Ymk7+lSpLEd?w)*bzFSdTR`L^R`3WeTrSc9#u=~2nG^I* zsWz~!CRoOcAN=DD?EEK${_8b*CU13-4u6VP=grI%S5y@Dk*^~;idGt_;bAH@OwmY& z*7V0LiJ^=XMVTmFAf|5(u|>sF*C|%j{M9h?BJ(q;mPO0dWZn@v{r(gkwJhMaE%c|c zW^+@1ZMRXKvmmC-7pSZZq&|^kjo)%*RRn3DuJpQ75)#c(Q3=)@Hgc|QoU>TC@qG-( zG5g43m02a-&;R{_s0=jDFE1)QQdn5U*R802t9nI5j~0vD9OkfbixE#^OsYS0Rp-}g z{kpShdk9J>h>fk;eqwuujbB<$F_a^>zWQKwy-Hv)ayGuMguv^R-WYAi%ZtygPno$dCMQsyln<>(ye7C9QUCw| delta 558 zcmXYtT}V@57{~wb-t%r}WixeyK30vK=tWDIA0^tIE)l|97KRsjTBq&8xs|IOo1)*S@v`WuKI?h*m4b_V#v;e2% z@-e@Ba3>yASZ~E6Rzw{&|CuytA3oG2RaHaTQQS_d)U?4@`q_Yjt9w!l$*so8EEU_SZ6%!>{h8I{de8}Eoj<*@ZoezHPL Tm%G-gU6@t5EZ^@_oKN`&`Ot#V diff --git a/src/gui/font_furicon.cpp b/src/gui/font_furicon.cpp index f4c5fb888..af67295d8 100644 --- a/src/gui/font_furicon.cpp +++ b/src/gui/font_furicon.cpp @@ -1,374 +1,392 @@ #include "fonts.h" -// File: 'icons.ttf' (32364 bytes) +// File: 'icons.ttf' (34100 bytes) // Exported using binary_to_compressed_c.cpp -const unsigned int furIcons_compressed_size = 17542; -const unsigned int furIcons_compressed_data[17544/4] = +const unsigned int furIcons_compressed_size = 18414; +const unsigned int furIcons_compressed_data[18416/4] = { - 0x0000bc57, 0x00000000, 0x6c7e0000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0xbd36a34d, 0x7e000051, 0x28158250, 0x4544471c, - 0x00150046, 0x200f8214, 0x2b0f8334, 0x322f534f, 0x8f52fa8c, 0x68010000, 0x562c0f82, 0x70616d63, 0x7ace15d2, 0x94020000, 0x142c0382, 0x20747663, - 0x6f043b00, 0xa8040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x2c7e0022, 0x08380f82, 0x66796c67, 0x4aa9652e, 0x78050000, 0xdc720000, 0x64616568, - 0x759d8025, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24205f82, 0x24280f82, 0x78746d68, 0x3519b32f, 0xc0200f82, 0xd2280f82, 0x61636f6c, - 0xea7f5862, 0xac205f82, 0xcc270f82, 0x7078616d, 0x8203af00, 0x4801213b, 0x202c0f82, 0x656d616e, 0xdd521d80, 0x54780000, 0xe3303382, 0x74736f70, - 0x12a0e944, 0x387a0000, 0xf4030000, 0x012deb84, 0xafdd0000, 0x0f5ff7a9, 0x0b00f53c, 0x25368207, 0xfde00000, 0x08839fff, 0x55e3e12b, 0xfe80fc91, - 0x05000768, 0x220f82e0, 0x82020008, 0x82028305, 0x00062233, 0x290982ff, 0x80fc0007, 0x00070000, 0x0c820100, 0x0420028b, 0x65251184, 0x0800bb03, + 0x0000bc57, 0x00000000, 0x34850000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0xc26fa34d, 0x85000099, 0x2c158218, 0x4544471c, + 0x00150046, 0x84000014, 0x2b0f83fc, 0x322f534f, 0x9352fa8c, 0x68010000, 0x562c0f82, 0x70616d63, 0x5acfe3d2, 0x9c020000, 0x1c2c0382, 0x20747663, + 0x6f043b00, 0xb8040000, 0x04261f82, 0x70736167, 0x5982ffff, 0xf4840022, 0x08380f82, 0x66796c67, 0x2dda8f80, 0x90050000, 0x60790000, 0x64616568, + 0xbda2b925, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24205f82, 0x24280f82, 0x78746d68, 0x761ab830, 0xc0200f82, 0xda270f82, 0x61636f6c, + 0x82f7d6d7, 0xbc04210a, 0xd4270482, 0x7078616d, 0x8203b600, 0x4801213b, 0x202c0f82, 0x656d616e, 0x20c6e37f, 0xf07e0000, 0xe62c3382, 0x74736f70, + 0x9231507a, 0xd8800000, 0x1c209382, 0x012deb84, 0x6cdf0000, 0x0f5f7a0e, 0x0b00f53c, 0x25368207, 0xfde00000, 0x08839fff, 0x5a1ce22b, 0xfe80fcd9, + 0x05000768, 0x220f82e0, 0x82020008, 0x82028305, 0x00062233, 0x290982ff, 0x80fc0007, 0x00070000, 0x0c820100, 0x0420028b, 0x69251184, 0x0b00bb03, 0x21008300, 0x23830002, 0x40222583, 0x0b822e00, 0x072b0d82, 0x00900100, 0x04000005, 0x82e6048c, 0x85fa2011, 0x5c032b07, 0xcf015900, 0x00020000, - 0x15820905, 0x01210285, 0x84078510, 0x75462905, 0x40005472, 0x5be12000, 0x06208385, 0x04856a84, 0x3b208b84, 0x07202683, 0x03830482, 0x0280fc25, - 0x82910009, 0x0052220c, 0x2c798220, 0x003500a5, 0x0029004b, 0x006d0191, 0x349b8278, 0x00470060, 0x00170152, 0x004a000a, 0x0032018f, 0x004f001b, - 0x2631822e, 0x011801ca, 0x82a90036, 0x0028251b, 0x004d0133, 0x23829182, 0x22000338, 0x7a017c01, 0x39003900, 0xce012701, 0x4c001300, 0x22007301, - 0x0d824700, 0x85000b24, 0x0f82b500, 0x2e005b26, 0x5c004b01, 0x2a200184, 0x53200582, 0x4b320382, 0x53005e00, 0x5c00c800, 0x2e015601, 0x1e006b00, - 0x01844600, 0x85007d21, 0x00462201, 0x214b8245, 0x018b00a0, 0x63006327, 0xaa009f00, 0x21cd8401, 0xc1820300, 0x1c200383, 0x0123e785, 0x8403000e, - 0x001c2409, 0x82f20004, 0x00082e1b, 0x00020008, 0xe0200000, 0xff5be1f4, 0x260984ff, 0xff00e1f0, 0x82e3ffff, 0x8400200b, 0x0006222b, 0x260b820e, - 0x00050004, 0x82070006, 0x8209202f, 0x000b24d1, 0x820d000c, 0x000f2617, 0x00110010, 0x32858212, 0x00150014, 0x00170016, 0x00190018, 0x001b001a, - 0x821d001c, 0x1f4a08af, 0x21002000, 0x23002200, 0x25002400, 0x27002600, 0x29002800, 0x2b002a00, 0x2d002c00, 0x2f002e00, 0x31003000, 0x33003200, - 0x35003400, 0x37003600, 0x39003800, 0x3b003a00, 0x3d003c00, 0x3f003e00, 0x41004000, 0x43004200, 0xeb824400, 0x00463c08, 0x00480047, 0x004a0049, - 0x004c004b, 0x004e004d, 0x0050004f, 0x00520051, 0x00540053, 0x00560055, 0x00580057, 0x005a0059, 0x005c005b, 0x005e005d, 0x0060005f, 0x00620061, - 0x82640063, 0x850620cc, 0x22cd82d0, 0x82020100, 0x00022105, 0x0123008d, 0x8d030000, 0xd10d4011, 0x6f043b22, 0x2c21d482, 0x08018500, 0x84003ce3, - 0x6404c600, 0xc4052405, 0x5807d406, 0xce08ea07, 0x76093409, 0xfe0ab00a, 0xee0b880b, 0xe60c2e0c, 0xd80d6a0d, 0xca0e640e, 0x5a10a40f, 0x7e11bc10, - 0x9212c611, 0x8c130c13, 0x9814d813, 0x38164815, 0x80171217, 0xae1b1e1b, 0xc01c341c, 0x081fea1d, 0x8020bc1f, 0x8a213421, 0x8622fc21, 0x2a27c823, - 0xb028ca27, 0xc6295229, 0xbe2a0a2a, 0xf42ba42b, 0x442e162e, 0x8e2e682e, 0x0c30f02f, 0xd2306a30, 0x56311e31, 0xde31ac31, 0xba32ec31, 0xc6336433, - 0xbc344034, 0xb6353a35, 0x1a36de35, 0x90364236, 0x1c37e436, 0x9e378c37, 0xc637b237, 0xee37da37, 0x14380238, 0x7c384a38, 0x2239e638, 0x02006e39, - 0x00003b00, 0xaa041502, 0x07000300, 0x01b12e00, 0xb23c2f00, 0xed000407, 0x0506b132, 0x03b23cdc, 0x220a8202, 0x8303b100, 0x83052016, 0x07b22716, - 0x3cfc0106, 0x178301b2, 0x21113338, 0x11212511, 0xda013b21, 0x640161fe, 0xaa049cfe, 0x043b56fb, 0x52820034, 0xff80fc25, 0x828003f5, 0x82012009, - 0x05002e59, 0xfd212521, 0xf99a0533, 0x0b0007b3, 0x0815820b, 0x09020325, 0xf7040f00, 0x1b00fd03, 0x2f002500, 0x30010000, 0x15163221, 0x07010e14, - 0x16150706, 0x1e171617, 0x82141501, 0x010e2f0b, 0x21372123, 0x013d3632, 0x21232634, 0x09853335, 0x012b4d08, 0xbd010a02, 0x311f8e7d, 0x1e1e2020, - 0x1f202525, 0x2214132b, 0xfe385f23, 0x1801a217, 0x3f48483f, 0x3dfce8fe, 0xfc3d4242, 0x778dfd03, 0x0d324f38, 0x0208030c, 0x1c1c0d0d, 0x363c3f58, - 0x2c272735, 0x313e428b, 0x3e88423e, 0x3e3a2e39, 0x30088f83, 0x63009100, 0xa9036f06, 0x17000f00, 0x00002b00, 0x30273025, 0x30073021, 0x37123623, - 0x17121633, 0x06233001, 0x26333007, 0x00113001, 0x30333027, 0x2f038513, 0x11070206, 0x4cea0230, 0x8a49c7fe, 0xab2fbf2f, 0x34080382, 0x3c068dfe, - 0x023cf73d, 0x17f7fe84, 0xcb04cc9b, 0x1dce3794, 0x8ce3e363, 0x8c8c2e02, 0x028cd2fd, 0xb9b9b9c9, 0x4a01f0fd, 0xfe28d401, 0x6175018b, 0xfe329afe, - 0x218282b3, 0x04820300, 0x0007ab3a, 0x58036103, 0xba038c03, 0x26370000, 0x30332702, 0x1d17021d, 0x031d1704, 0x14910290, 0x478211a3, 0x719126f1, - 0x1e268695, 0x3e331701, 0x73413701, 0x220d8606, 0x8937033d, 0x8a042002, 0xa317850b, 0xf1298211, 0xa1719126, 0x06332e86, 0x26230702, 0x012e2702, - 0x010e2327, 0x2d0d8207, 0x27262205, 0x1e37013e, 0x35323301, 0x18832634, 0x26272629, 0x33363435, 0x82171632, 0x012e2b21, 0x15062223, 0x17161714, - 0x0285011e, 0x06141523, 0x223b8225, 0x82272223, 0x26272628, 0x37363734, 0x823c823e, 0x84072021, 0x011d352c, 0x32331614, 0x3d023e37, 0x33352301, - 0x188e2311, 0x0168185e, 0x043400cc, 0x040c040e, 0x390e030e, 0x390f7b0e, 0x030f030e, 0x040e030d, 0x012761cc, 0x19621864, 0x833a0e7a, 0x820c205c, - 0x3c0f3b5c, 0x4bf0020f, 0x2f0b276e, 0x314d1d0c, 0x09342a77, 0x2b5a0a24, 0x4865702a, 0x13822463, 0x401a3c08, 0x16373731, 0x24093116, 0x15443009, - 0x02741316, 0x4f090c43, 0x2b2c3448, 0x12132021, 0x22221212, 0x375a3d5f, 0x11531e38, 0x50483c46, 0x1a1e4850, 0x7c16271a, 0x70b75adf, 0xcd70be01, - 0x4d0010b8, 0x1a2d4701, 0x67191968, 0x10014419, 0xf0fe4444, 0x220a8244, 0x101a6819, 0x47015b01, 0x084d4741, 0x42fe70af, 0x13014570, 0x19671a45, - 0x451a6719, 0x0b45edfe, 0x2a0b3638, 0x6d2c290b, 0x020d2f2c, 0x2c150207, 0x615c512d, 0x290a3431, 0x2d24250b, 0x15162a34, 0x0208020c, 0x17171f0b, - 0x6865293f, 0x133e306e, 0x42292a13, 0x4242b842, 0x27282a2a, 0x31314726, 0xa4525c39, 0x09085c52, 0x3b1e3121, 0x009efe57, 0x52000700, 0xae0602ff, - 0x1a001a05, 0x38002400, 0x53004900, 0x80007800, 0x22050000, 0x37343526, 0x3337023e, 0x07060706, 0x3307010e, 0x3233013e, 0x06141516, 0x013d3227, - 0x1d222334, 0x26031401, 0x16332702, 0x17161712, 0x36373633, 0x272a8212, 0x23210702, 0x17322111, 0x07272783, 0x012e2313, 0x48372327, 0x15270779, - 0x27262201, 0x8234012e, 0x3637222a, 0x21238233, 0x58450617, 0x3698080b, 0x17011e37, 0x1105010e, 0x11011501, 0xa2013501, 0x0f106d6b, 0x8a314f3a, - 0x1e2a2a3b, 0x0c09251d, 0x51314711, 0x6d6a6e5f, 0x211f6c6d, 0x136b2183, 0x0e0e1450, 0x140e0e0c, 0x2169144e, 0x8f012083, 0x56090165, 0x3a392b2c, - 0x56087180, 0x249b7817, 0x9b242626, 0x5d3aad02, 0x23232122, 0x2e2e2221, 0x3333563b, 0x12490d1f, 0x4c44353e, 0x4236444c, 0x0e380f12, 0xe4fe6920, - 0x72fe2801, 0x84fdd8fe, 0x3c3d3c7f, 0x2d22606f, 0x28292829, 0x312f3256, 0x776a676a, 0x77197755, 0x56080282, 0x01701803, 0xfe466fbf, 0x4f4e46e7, - 0x01464e4f, 0xfe6f4619, 0x9e027041, 0x4d603433, 0xe7fe1160, 0x5536c913, 0x2a3e2a26, 0x8efede26, 0x842a2a27, 0x2a2a84b6, 0x25251414, 0x3929074a, - 0xa1525f32, 0x3b365e53, 0x4a092108, 0x34feb24e, 0xfe821001, 0xfecd0192, 0x820082ef, 0x00043f00, 0x06ab0020, 0x006103e0, 0x0015000b, 0x0074004a, - 0x11303700, 0x16322130, 0x012b0614, 0xb7490119, 0x46012008, 0x162205ce, 0x12821617, 0x2806d046, 0x3435012e, 0x3233023e, 0x08d14617, 0x1506072c, - 0x011f1614, 0x1415011e, 0xcd46020e, 0x022e2105, 0x16212485, 0x0cc64617, 0x3e373623, 0x06c84601, 0x0121d108, 0x66665d20, 0x2aadb45d, 0xad292f2e, - 0x7655dd02, 0x0d320c2a, 0x362b2b23, 0x3b2e4141, 0x620a270a, 0x563d2162, 0x37384c36, 0x0d320d28, 0x39384b1a, 0x37342020, 0x205d643c, 0xdd025a3f, - 0x4c5e0a04, 0x294a663c, 0x426c4d2a, 0x59237d5a, 0x503d5113, 0x20506161, 0x16161d1c, 0x5ff38a19, 0x6d9e02b7, 0xf5fe6db9, 0x282b6a01, 0xfd2b292e, - 0x0b343db6, 0x162b0c2f, 0x27313a17, 0x07020c2e, 0x515c1202, 0x1b31482c, 0x0b321a1b, 0x29210b2d, 0x2a2c1817, 0x130c0b29, 0x4d2f505d, 0x31711d37, - 0x82572d40, 0x58815454, 0x3447502e, 0x5d663b2f, 0x09665d6e, 0x2f0f1008, 0xfe5d3420, 0x0005009b, 0x06ab002e, 0x006103d2, 0x001f0012, 0x0134002a, - 0x25000046, 0x28076842, 0x1e32013e, 0x020e1402, 0x05834227, 0x1d06222a, 0x05161401, 0x17322111, 0x2c0f5e41, 0x27012e05, 0x17071d23, 0x1d170f1d, - 0x8502870e, 0x3305820b, 0x11231101, 0x17121633, 0x3317011e, 0x3d27053d, 0x0e3d270f, 0x0b880287, 0x3311042d, 0x02262311, 0x603c3301, 0x82232223, - 0x7a5f3a02, 0x23234460, 0x483c6144, 0x4f904f4f, 0x01df014f, 0x2b2c5609, 0x9aa35657, 0x26008225, 0x0863029a, 0x440c0922, 0x62280732, 0x22852175, - 0x0d082308, 0x76231088, 0x42ac8521, 0x282d074c, 0xb6845428, 0x5a275484, 0x52a2525d, 0x3304845d, 0x339e024f, 0xfe67c134, 0x256901f1, 0x26293d2a, - 0x155315b2, 0xae4d7f44, 0xfe02284d, 0x439e0270, 0x4043f4fe, 0x01268088, 0x4362fd90, 0x5f430c01, 0x00a53a05, 0x035b0654, 0x002f00b8, 0x00540048, - 0x2500005e, 0x010e2330, 0x022e2223, 0x078a4435, 0x20083e43, 0x06e34906, 0x82373621, 0x013d3501, 0x11213523, 0x32210123, 0x06141516, 0x07010e07, - 0x17021e15, 0x07300b82, 0x2123020e, 0x37323337, 0x34013d36, 0x012b2627, 0x080a5d4d, 0x0e04e541, 0x804a6074, 0x3035345c, 0x53434330, 0x122b9c71, - 0x6518124a, 0x7979634d, 0x24242863, 0x10101b1b, 0x772f01ac, 0x72010601, 0x141b7769, 0x1a1a3415, 0x1311353d, 0x4f391011, 0x8768fe2f, 0x821e35e9, - 0x356a0800, 0x3733d2e9, 0xe2d23337, 0x6d38503d, 0xa2686aa2, 0x1c1c3738, 0x2b0b5963, 0x7f493b0b, 0x7f758875, 0x14130b0a, 0x41271e1d, 0x0341fe75, - 0x2f627646, 0x14151542, 0x16010703, 0x3525242f, 0x412d2c32, 0x1c1b7525, 0x1b342933, 0x3033711c, 0x00333027, 0x00050000, 0x06ab0035, 0x006103cb, - 0x0046001f, 0x00600053, 0x25000066, 0x1b442622, 0x37362c13, 0x0617011e, 0x22210607, 0x8227012e, 0x37362321, 0x0646013e, 0x2a148205, 0x17163207, - 0x3233033e, 0x4315021e, 0xa8081058, 0x36352135, 0x11333712, 0x15231533, 0x23113325, 0x4e01010e, 0x49269683, 0x76584169, 0x48115b21, 0x59594d3b, - 0x124c3d4d, 0x210e3a0f, 0xfc013c3d, 0x113c5738, 0x23232c10, 0x39902955, 0x22212d2d, 0x020d1617, 0x1c0b0104, 0x2a203025, 0x211d3548, 0x3b35573e, - 0x42754141, 0xfea10242, 0x2eb52dc9, 0xfe5b5b8e, 0x2307dbbe, 0xa9b1ac8e, 0x2e588154, 0x30324b4d, 0x665d6a39, 0x313f6a5d, 0x49092309, 0x44242929, - 0x493d3030, 0x53363680, 0x2627291c, 0x2d2d2928, 0x15010136, 0x1c0f1b23, 0x332f4d37, 0x58213c53, 0x3d0d3d3e, 0x0804843e, 0x5d834d2f, 0x4a2a014a, - 0x83553afe, 0x3b6301d8, 0x000800ed, 0x0608ff4b, 0x001505b5, 0x0016000c, 0x0028001c, 0x0068005c, 0x009b0072, 0x11301700, 0x12354430, 0x83110121, - 0x113323ec, 0x01871521, 0x4c06a645, 0xb44c2d75, 0x13232406, 0x85031333, 0x010f2a0b, 0x013e2533, 0x010e2337, 0x82028207, 0x27028213, 0x17011e23, - 0x33112311, 0x2005af4c, 0x821e8233, 0x11332902, 0x0901b023, 0x582c2c56, 0x30075644, 0xf466ca01, 0xfe850186, 0xfe0301e1, 0xfa1f01fd, 0x0cdd4be7, - 0x4b092521, 0x0c2207dd, 0xdd4b0c2e, 0x38300811, 0xe1092209, 0x64082309, 0xf1ca81c9, 0x0d030e04, 0x3b040e03, 0x02d002b0, 0x080b0104, 0x5716071f, - 0x15571516, 0x0b081f08, 0x62010501, 0x12481278, 0x09200b82, 0x54080382, 0x77124712, 0x9f02f862, 0x67c23334, 0x6901f1fe, 0x293e2926, 0x02bcfd25, - 0x5abbfd9f, 0xc45a9f02, 0x035acf58, 0x0b353957, 0x2c2a0b2b, 0x0c2f2c6e, 0x14020802, 0x5d512c2d, 0x0a343160, 0x25240a29, 0x162a342d, 0x08020b16, - 0x17200a03, 0x64293f17, 0x7c1f0b69, 0x8202821f, 0x01613340, 0x104111e0, 0xd3114110, 0x144c1390, 0x2d134b13, 0x02822db6, 0x13491322, 0xfe290b82, - 0x279f0263, 0x5816279d, 0x82028216, 0x61fd2c08, 0x04000000, 0xab002900, 0x4703d706, 0x3a220553, 0x53474600, 0x1140471a, 0x14011d26, 0x32331617, - 0x20070443, 0x0adc4125, 0x01292108, 0x66655e20, 0x29adb35d, 0xad292e2e, 0x95840f03, 0x41694926, 0x223b3b57, 0x110f3d0f, 0x2c4e3b48, 0x4e350082, - 0x0e134c3c, 0x3c220f3a, 0x012d013d, 0x01bffeae, 0x01ddfe23, 0x10054741, 0x54a9b134, 0x272d5981, 0x22084b26, 0x35393008, 0x5d665d35, 0xc6423535, - 0x020b2a07, 0x60ba609e, 0x000060c4, 0x825f5103, 0x6d01082e, 0x930502ff, 0x44001a05, 0x6d005500, 0x9e299182, 0xd500ab00, 0x0000e300, 0x05584725, - 0x0622232c, 0x27012e07, 0x013e3736, 0x1b443637, 0x0e072205, 0x098f5202, 0x82070621, 0x22232a01, 0x3727022e, 0x17161716, 0x09d6481e, 0x44013521, - 0x37370664, 0x3233023e, 0x27061016, 0x3d023e32, 0x022e3401, 0x07010e22, 0x4f011d06, 0x258205a1, 0x34350225, 0x48353736, 0x322005f2, 0x634a4282, - 0x1e152405, 0x82141501, 0x0ce1476b, 0xee471320, 0x8325200b, 0x2307211e, 0x02829982, 0x27262223, 0x232d8206, 0x2e272223, 0x37204f82, 0x3320b083, - 0x07204c85, 0x7382c988, 0x02165508, 0x3a3c3e4b, 0x17433031, 0x0f0c300c, 0x21331413, 0x502f2b20, 0x0a0a213a, 0x1d1a2f24, 0x13131a19, 0x1f1f2216, - 0x2f362c2d, 0x0f2a3647, 0x0e0e0c50, 0x1c2e1112, 0x3f45413e, 0x3e980247, 0x0f0e3c5c, 0x5c3c0e0f, 0x76767d3e, 0x1e31237d, 0x311e0e0e, 0x071f3145, - 0xb3080082, 0xfd31100f, 0x3d593bf8, 0x343c4a1f, 0x53371e3e, 0x38292968, 0x343f0f0f, 0x10104a3d, 0x3c3a5a3c, 0x42794242, 0x3b373d42, 0x3a3a6f3b, - 0x16165203, 0x90295645, 0x21225b38, 0x05010d2d, 0x0e0e0a01, 0x2a203026, 0x1d352424, 0x1f1f1110, 0x2b383656, 0x10113c2c, 0x42413bec, 0x41413b3a, - 0x07293599, 0x262c312e, 0x160a2a0a, 0x0a1d1415, 0x412d1709, 0x191a2028, 0x04061928, 0x150d0d06, 0x2c253914, 0x0e191a48, 0x2c21140e, 0x11143e17, - 0x0d0c0c11, 0x3407343a, 0x6afe5c36, 0x4040582f, 0x40415253, 0xfeb72f59, 0x1c5cb6b8, 0x752c4933, 0x1c34482c, 0x2424341c, 0x2e080982, 0x1a1a2325, - 0x1d06031c, 0x432a4734, 0x13071151, 0x40263a4e, 0x0c0d192d, 0x2620202d, 0x07134e3a, 0x2a435111, 0x1d342423, 0x13323857, 0x82373732, 0x01382704, - 0x102e303a, 0x0484302e, 0x491f2a08, 0x556b4041, 0x284e291b, 0x01365a28, 0x12121401, 0x0f0e0f1b, 0x32304c36, 0x1e1d2b2a, 0x44131222, 0x3f933030, - 0x3e3c0e3c, 0x2104823e, 0x0082003f, 0x78000437, 0x8806b700, 0x0f005603, 0x37002700, 0x00004000, 0x30113001, 0x2a038423, 0x30213035, 0x30133015, - 0x8a333035, 0x201b830f, 0x22178233, 0x82273021, 0x0c815427, 0x07010e3c, 0x01012e33, 0x01c86cac, 0x5b5b53fc, 0x5c5c2401, 0xfb3c2b02, 0x99266f3a, - 0x03828826, 0xd7fe4308, 0x10411005, 0x024010c6, 0x02c2fdf5, 0xfd60603e, 0xee0158c2, 0x12fe5858, 0x70b5b558, 0x7070be01, 0x027042fe, 0x31c5313a, - 0x0000c531, 0x00080005, 0x03f806ab, 0x00340061, 0x0046003e, 0x00580050, 0x9f4b3700, 0x23272a32, 0x33132307, 0x01171216, 0x90a18623, 0xfd420811, - 0x0d2a7655, 0x2b230d31, 0x4140372b, 0x280a3a2e, 0x2262620a, 0x4c36563c, 0x0d273838, 0x4b1a0d32, 0x1f203a37, 0x653c3634, 0x5a3e215d, 0xfa3dd002, - 0x89e46e3b, 0xfe269826, 0x401104d7, 0x4010c510, 0x13912803, 0x824bac20, 0xb50b242c, 0x419e02b5, 0xfd210a00, 0x20108ef7, 0x34008200, 0x00600003, - 0x03a006ab, 0x00150061, 0x004b002b, 0x03302500, 0x0eaa4630, 0x07020624, 0xb1413521, 0x48052013, 0x012d1d87, 0x1270db3c, 0x2b0a1247, 0x2b0b040b, - 0x2509820b, 0x2595256d, 0xc7414b01, 0x84012605, 0x4a269683, 0x14614868, 0x9e02b728, 0x2737dd37, 0x0282279b, 0xc3830882, 0x2007d641, 0x1741480b, - 0x042acb82, 0xb7004700, 0x5603b906, 0xcd820b00, 0x29002122, 0x46183f46, 0x01280a1b, 0x23112311, 0x48152135, 0x28074c4d, 0x292e2e29, 0x011402ad, - 0x070246ad, 0x6c7b0125, 0x46fc01c8, 0xc1200f08, 0x2106ea45, 0x79423e02, 0x207f8205, 0x08934f06, 0x27001e34, 0x4e003d00, 0x7e005800, 0x22050000, - 0x34352627, 0x01843637, 0x0e333025, 0x4f060702, 0x17200594, 0x2408954f, 0x14011d22, 0x06944f01, 0x200a1256, 0x2d964f06, 0x4f010e21, 0x033f1297, - 0x37366b7a, 0x1d1d0f10, 0x8a312827, 0x123a553b, 0x110c0a12, 0x30513147, 0x6d6a6e2f, 0x4f09fed9, 0x04260692, 0x050c0513, 0x944f0512, 0x4d142212, - 0x17944f14, 0x0e3a0e22, 0x350e954f, 0x7f4242fd, 0x363d3d3c, 0x232f3038, 0x2b50522d, 0x312f332a, 0x904f3535, 0x691a2213, 0x4f02821a, 0x2e221192, - 0x924f2eb6, 0x20082215, 0x0d934f08, 0x0106003c, 0x0508ff17, 0x001505e9, 0x0017000b, 0x004b002d, 0x005f0055, 0x11300500, 0x03823330, 0x15302122, - 0x0b870784, 0x3305c650, 0x37363435, 0x1632013e, 0x14011e17, 0x010e0706, 0x37363227, 0x3d2b0182, 0x26273401, 0x23012e27, 0x82070622, 0x07bf4601, - 0x4f110521, 0xcc2412d1, 0x6311016c, 0x22080382, 0x6a4210fd, 0x29292626, 0x836a2626, 0x2a26256b, 0x6b25262a, 0x17402641, 0x0c0c0d16, 0x4017160d, - 0x873f2826, 0x013f220b, 0x0c8348f4, 0x9f02f825, 0x8460c1fd, 0x57032b04, 0x822b2c2d, 0x2b825455, 0x09832d2c, 0x0883a920, 0x191b612d, 0x2e252519, - 0x25252e69, 0x8c1b1919, 0x02562f0c, 0x6eb86e9f, 0x6a01f5fe, 0x282e282c, 0xf082002c, 0x000a0036, 0x03f606ab, 0x00120061, 0x003a0030, 0x004a0044, - 0x2e222500, 0x4f064050, 0xe6af0749, 0x1133112f, 0x2c011521, 0x294c6a42, 0x426a4c29, 0x9b078541, 0x665d21e0, 0x08086449, 0x6d130222, 0x2dac1001, - 0x54548257, 0x2d2d5882, 0x82a88258, 0x1b602d57, 0x2425191a, 0x242e6a2e, 0x1b1a1925, 0x55200c8c, 0x280e6d50, 0xfd9e02c1, 0x000060c2, 0x2ccb8204, - 0x03b606ab, 0x00130061, 0x002d0022, 0x06d34366, 0x30153023, 0x26038821, 0x30013011, 0x83173233, 0x070124e8, 0x52012b06, 0x272405ba, 0x11012b26, - 0x51064d58, 0x2724077e, 0x012e2726, 0x35220282, 0x80513734, 0x1506230d, 0x80511714, 0x07240806, 0x010e0706, 0xfea3014a, 0xfe1301ca, 0xedc301ed, - 0x4a343441, 0x344a2929, 0xeded4134, 0x2e2e5c4b, 0xdc02804b, 0x2705de45, 0x372b2a24, 0x17174140, 0x2405df45, 0x563d1111, 0x07e04535, 0x384a2b08, - 0x1a1a3f3a, 0x5d653c36, 0x201f1011, 0x9e02b759, 0xfe60ba60, 0x159e02dc, 0xa87d5415, 0x1515547d, 0x6c5b5e60, 0xfe2f2f5b, 0xd6456b22, 0x1717210a, - 0x21075a51, 0x5b512424, 0x2f290809, 0x15142a2c, 0x5c130c0b, 0x26272f51, 0x001d1c1b, 0x8f000400, 0x71066300, 0x1500a903, 0x39002f00, 0x00004300, - 0x30013025, 0x06ec5033, 0x2806535a, 0x01070206, 0x15163221, 0x0bd44914, 0x2322df84, 0xa2523721, 0x09064f08, 0xfea2012e, 0x59168ded, 0x0b360f16, - 0x0b380f05, 0x89370982, 0x012fb92f, 0x687301c2, 0x34291b77, 0x1f1e1919, 0x10241b1a, 0x4e1d1c11, 0x3c2106f5, 0x07f34e3c, 0x46036334, 0x45ecfe45, - 0x3729c536, 0x014525c8, 0xfd8c4514, 0xe44e8cd2, 0x142a3605, 0x0b010703, 0x4918170b, 0x2d2c3235, 0x75252120, 0x34293337, 0x09e34e37, 0xff320134, - 0x05ce0508, 0x00260014, 0x00780033, 0x009b008a, 0xc44e0500, 0x4a01202e, 0x2e3241d1, 0x11232701, 0x13331123, 0x3317011e, 0x23113311, 0x04823521, - 0x07020e26, 0x37362726, 0x30081082, 0x38700215, 0x10103d57, 0x5523222c, 0x2d39902a, 0x1721222d, 0x05010c17, 0x251c0a01, 0x472b1f31, 0x3d221e35, - 0x423a3557, 0x41417542, 0x3b3f4402, 0x08884a39, 0x4a341321, 0x0b220688, 0x884a230a, 0x233c0807, 0x2c2c1f1f, 0x37472f36, 0x0d4f0f29, 0x12110e0e, - 0x413e1d2d, 0xfd474045, 0x0e3408b2, 0xdb796803, 0x0308340e, 0x43017967, 0x341708bc, 0x4002123e, 0xa3a55655, 0x304425f8, 0x81493c30, 0x080d284f, - 0x1b241447, 0x4d361d0f, 0x3c53332f, 0x3d3e5922, 0x3f3f3c0d, 0x3e3d0d3c, 0x29353d01, 0x2b312e07, 0x0a2a0a26, 0x1e141416, 0x2d170909, 0x1a202840, - 0x0619271a, 0x0e0c0605, 0x25381514, 0x1a1a482c, 0x21150e0e, 0x153f172b, 0x06594a10, 0x36333508, 0x104a035c, 0x00fe1b63, 0x8dfe9e02, 0x0210631b, - 0x5a62fd01, 0x3818f501, 0x3a021343, 0xbcfd5d5c, 0x0003005a, 0x06ab001b, 0x006103e5, 0x005c0039, 0x2500007f, 0x430d4749, 0x26220568, 0x69432627, - 0x0aea5410, 0x07060726, 0x2221010e, 0x23051d47, 0x3233013e, 0x200fd051, 0x055b5636, 0x012722a2, 0x2a775410, 0x490c320d, 0x91430570, 0x31312c06, - 0x573c1111, 0x38374c36, 0x49330c27, 0x23080b73, 0x1f1f1011, 0x8429025a, 0x24131395, 0x57426825, 0x3d0f2276, 0x3a48120f, 0x4e58584e, 0x0f124c3c, - 0x79220f3a, 0x8b491e9e, 0x06b4430b, 0x512e2e23, 0x0bb5432c, 0x2d171723, 0x0611552a, 0x1b26272d, 0xa9b11d1c, 0x2c404154, 0x4e4d2e2c, 0x0051053b, - 0x9a52200a, 0x0000281a, 0x004f0005, 0x55b106ab, 0x0021092b, 0x342b5540, 0x35210122, 0x28080282, 0x02061521, 0x54012107, 0x2222603d, 0x22222323, - 0x44607960, 0x60442424, 0x4e4e483c, 0x014f4f90, 0x570901de, 0x57572c2b, 0x058957a3, 0xfe60032e, 0xfe420141, 0x36a601cd, 0x4c0136d6, 0x082bd954, - 0x5bbcfd2a, 0x5b59ea01, 0x52bafe52, 0x2e000700, 0xd20608ff, 0x1c001505, 0x47003300, 0x5d005300, 0x91007300, 0x06370000, 0x30153007, 0x3205034c, - 0x36333011, 0x30373637, 0x16070633, 0x2e231712, 0x45110101, 0xf1450ae5, 0x2726230c, 0x29493330, 0x82332006, 0x301122cf, 0x187d5701, 0x47012e21, - 0x36082df3, 0x6d1a42f7, 0x1848046d, 0x417f5a5a, 0x16ba32ae, 0x01922783, 0xfead01a5, 0xfe2301c0, 0x014001dd, 0x7c737422, 0x031b6d1b, 0x781b6c1b, - 0xfb2da418, 0x5e20014a, 0x505e6565, 0x1720075d, 0x08291448, 0x1e4b4123, 0xfe9f02d0, 0x6d1e5cac, 0x4bce4d6d, 0x3d21e8fe, 0x02e2fee1, 0x60bb609f, - 0x080160c4, 0xc732cbcc, 0x27028232, 0x4ee2fe29, 0x6203f6fe, 0x210df847, 0x3748b5fd, 0x0000212d, 0x358f8362, 0xffca0005, 0x05360608, 0x000f0015, - 0x00330017, 0x00920066, 0x054e0500, 0x07062a11, 0x05263330, 0x2327012e, 0x05494e30, 0x13303326, 0x3317011e, 0x2106e749, 0x63593023, 0x27262110, - 0x5a0a6259, 0x615905ad, 0x0226230d, 0x42823327, 0x53171621, 0x9c53078e, 0x36372706, 0x02063337, 0x6c822307, 0x2327262f, 0x010e0706, 0x3df80207, - 0x266e3afb, 0x07704e98, 0xc6313034, 0x0e190230, 0x68020834, 0x3408db79, 0x7967030e, 0x7c445bfc, 0x050e4805, 0x1e3a2e35, 0x2262621e, 0x4c36563d, - 0x03273837, 0x384a1a49, 0x4d201f3a, 0x5e0807eb, 0x6a1a9001, 0x2e0d6e1a, 0x03171809, 0x0b0a2408, 0x0e790f36, 0x23090a36, 0x23310309, 0x6e1c6b23, - 0x390d7a1b, 0x02191910, 0x3b101919, 0xb6b6f80d, 0x70bf0170, 0x7041fe70, 0x94943b02, 0x641b3494, 0x02fffd0f, 0x0f8dfe9f, 0x01021b64, 0x570361fd, - 0x2f0c343d, 0x16162b0b, 0x2e27313a, 0x5905060b, 0x1a350694, 0x4102321b, 0x17172822, 0x0a2a2a2c, 0x515c130d, 0x1e364d2f, 0x334b830b, 0x6f2ddb3b, - 0x29981e70, 0x3c3cdc2b, 0x94252bdc, 0xa2a1de25, 0x32235f83, 0x82663fea, 0xea3f3700, 0x01040032, 0x050eff18, 0x000f05e8, 0x003a001b, 0x00570043, - 0x7d412500, 0x3021221a, 0x05fc5423, 0x3e230724, 0x0a823701, 0x27089843, 0x1e07010e, 0x33110101, 0x2007c543, 0x06764111, 0x27823320, 0x0806b543, - 0x320ccd36, 0x7867030c, 0x0c310ddb, 0x03796803, 0x6d1b7f3f, 0x6b1b021b, 0x9124781b, 0x238b2324, 0x19661980, 0x1a671a02, 0x248c2478, 0xd9fb9325, - 0x0111016c, 0x269a2601, 0x08078043, 0x9a277723, 0x5f178127, 0x02fffd18, 0x188efe9e, 0x0002175f, 0xb22d62fd, 0x2db22c2c, 0x3639e539, 0xa72936db, - 0x3e028229, 0x3936da36, 0x022903e6, 0x60c2fd9e, 0x01440801, 0xc732430f, 0x32c73131, 0x43f2fe43, 0x8200f6fe, 0x01062200, 0x20f38236, 0x2ff382ca, - 0x001e0014, 0x0032002a, 0x00520046, 0x23300500, 0x22055744, 0x82061415, 0x5d1720cb, 0x27220f19, 0x30650723, 0x070b5008, 0x4f030221, 0x02220e3f, - 0x704e2103, 0x6da33a0b, 0x685a2101, 0x61184142, 0x5a167918, 0x2aac8516, 0xac292f2e, 0xfa3db603, 0x0a66423b, 0x10401034, 0xfd4010c5, 0x716e6e79, - 0x0b114811, 0x0b040a2b, 0x09820b2c, 0x6f706e24, 0x9c4e6801, 0xf2200809, 0x5d6c9e02, 0x2f145f48, 0xb52d2fbc, 0x292b5b2d, 0xd52b282e, 0xb6b696fe, - 0x6fbf0170, 0x7041fe6f, 0x2506fd50, 0x4f015901, 0x554f4f01, 0xb1fe240b, 0x5402b1fe, 0x003007ae, 0x00a90002, 0x03570663, 0x001d00a9, 0x25000033, - 0x2005d341, 0x058d5106, 0x210eb641, 0x0d500516, 0x08194905, 0x33304008, 0x03301530, 0x9027a076, 0x64640413, 0x35c21896, 0xa017bc33, 0x02207f20, - 0x96208120, 0x8a33be17, 0x0aeb2d01, 0x164f411c, 0x41955003, 0x4163ccce, 0xa7a720ed, 0x53330127, 0x2426014f, 0x8234d034, 0xfe243402, 0xd7d74fdb, - 0x1e720271, 0x02175446, 0xfd47a148, 0x1000712b, 0x8101e71e, 0x28010634, 0xd80502ff, 0x0f001a05, 0x43002500, 0x74005600, 0xd3537c00, 0x335b4f11, - 0xa14e0120, 0x07a6512b, 0x6d670228, 0x01fb01c7, 0x704f4173, 0x6b822107, 0x2205824f, 0x4f27416b, 0x27250979, 0x16164027, 0x2c00820d, 0xfd401616, - 0x4c6b41d0, 0x6b4c2929, 0x21078741, 0x1c874126, 0x28264134, 0x0c17163f, 0x170c0d0d, 0xed023f16, 0xfc01c86c, 0xcf514c01, 0xb7fd3605, 0x822c2b2d, - 0x2c815554, 0x2c2d2d2c, 0x82a9812c, 0x612d2b2c, 0x06c04e1a, 0x4e242521, 0x242105c0, 0x06cd4e25, 0x01031a24, 0x2e83572d, 0x2d2d5823, 0x202c8258, - 0x4f2b8a57, 0xf94e09c2, 0x011a2205, 0x083352e8, 0x33000736, 0xc206fdfe, 0x0c000905, 0x3c001600, 0x86006100, 0xa2009c00, 0x6119b95a, 0xf4510f8b, - 0x5a012014, 0x0b210683, 0x1a7f5a01, 0x112c24a5, 0x36321614, 0x11331135, 0x020e0714, 0x2005934d, 0x063e5b11, 0x57090124, 0x284a2b2c, 0xad022a08, - 0x21215e3a, 0x21212323, 0x05b2612f, 0x390c1d52, 0x200e390e, 0x01c30269, 0x080b0105, 0x8282081f, 0x0b081f07, 0x62010401, 0x8b5a1378, 0x20072905, - 0x12471208, 0xc0fb6277, 0x0c202282, 0x82261d82, 0x081e0882, 0x2283020c, 0x12491222, 0x08253382, 0x12072008, 0x33228248, 0x8e386401, 0x0c0c6538, - 0x577f5835, 0x020c0c36, 0xf8f46636, 0x080fc15a, 0x2b27b120, 0x83b6842a, 0x14132b2a, 0x084a2525, 0x32390820, 0x53a1535e, 0x093c365e, 0x4f4a0821, - 0x925aa801, 0xf0fe2305, 0x905a1001, 0xff042117, 0x320823a1, 0x4efe9f02, 0x514d4d51, 0x5efeb201, 0x41323244, 0x32411f1f, 0xa2014432, 0x9f0261fd, - 0x005abbfd, 0x01040000, 0x0502ff4d, 0x001a05b3, 0x00510017, 0x529d008b, 0xbb50059f, 0x09d54a09, 0x4d14aa50, 0xfe482341, 0x297a4d0e, 0xf14e0120, - 0x85012110, 0x38095a46, 0x76544b01, 0x0c320c2a, 0x362c2a24, 0x17174240, 0x0a280a3b, 0x10313161, 0x06d94811, 0x0c330c23, 0x0653621a, 0x5d653b29, - 0x1f201010, 0x848bfd5a, 0x230d2332, 0x32862b2b, 0x620a272e, 0x11113131, 0x4c36563c, 0x0d283738, 0x3c213289, 0x2b328264, 0x015b1f1f, 0x0d310ce2, - 0xdb796802, 0x03230682, 0x46f27967, 0x0b320692, 0x2e0c343d, 0x16162b0c, 0x18273139, 0x07020b17, 0x5e4d1202, 0x2822250d, 0x2b2c1717, 0x210b5e4d, - 0x33b16203, 0x487e0121, 0x002f0f3c, 0x00020000, 0x065400cf, 0x00b80331, 0x4e4a0034, 0x262010d9, 0x5c05666a, 0x5e4a0880, 0x07405209, 0x01020e22, - 0x080d3543, 0x022e2787, 0x02021135, 0x0f34946a, 0x352d0f3f, 0x52504436, 0x2525493a, 0x2a3d3d7b, 0x5e446b4c, 0x5b314646, 0x465d2104, 0x21282847, - 0x7e4b4420, 0x704e2974, 0xc552f901, 0x11108551, 0x3bae764b, 0x55214b3b, 0x3a0f404d, 0x1b1c360f, 0x3a313d48, 0x1706070e, 0x3865393a, 0x21213e59, - 0x03513e21, 0x1c1d322a, 0x1a1a3438, 0x7318100d, 0x44613a65, 0xfd540325, 0x6c6c6bfc, 0xfe04026b, 0x44435c11, 0x16152b57, 0x015c8658, 0x10db82ef, - 0x3d07732d, 0x08ff0a39, 0x1505f606, 0x18000e00, 0x49002b00, 0x5d005300, 0x00006300, 0x5c333001, 0x2b200950, 0x23067e5a, 0x11012b26, 0x5c2ce24c, - 0x113a146b, 0x15211133, 0x41ed7602, 0x29252568, 0x68252529, 0x4beded41, 0x804b5c5c, 0x985b49fe, 0xa7013c3a, 0x7e2a292b, 0x292a7ea7, 0x5b5f602b, - 0xfe5f5b6b, 0x2df70221, 0x54558257, 0x822d5782, 0x82a92007, 0x1b612906, 0x24251919, 0x242f692f, 0x8807bf4c, 0x0e825c0c, 0x02c0fd2e, 0x61c2fd9f, - 0x03000500, 0xfd06ab00, 0x200aa756, 0x34a75659, 0xbd4c0520, 0x56082024, 0xae6b11c0, 0x56a4200d, 0x962006c0, 0x2105744c, 0x744c8307, 0x67612007, - 0xd4560f00, 0x13a73a2b, 0x4b13134c, 0x01effe12, 0x124a1211, 0xfe134a13, 0x279e0263, 0x5916279c, 0x82028216, 0x62fd2208, 0x31008200, 0x00220003, - 0x03de06ab, 0x001b0061, 0x006c0033, 0x41531300, 0x15e7561c, 0x2114114c, 0x5259012e, 0x0fbc5c10, 0x4d53d720, 0x0cdb2805, 0x68030c32, 0x56400179, - 0x4c200abc, 0x212fb85c, 0x214b2a02, 0x0218240a, 0x4b62fd01, 0x0f6e09a1, 0x27b55c08, 0x00002508, 0xff7c0107, 0x05840502, 0x0037001a, 0x0068005b, - 0x009c0075, 0x00d500a9, 0x21300100, 0x3307010e, 0x023e3736, 0x2e078866, 0x23060701, 0x012e2722, 0x37272627, 0x821e1716, 0x05157917, 0x07062222, - 0x3e231482, 0x66213701, 0xbf663a5e, 0x0d246b07, 0x33011e22, 0x2117246b, 0x71823521, 0x24052960, 0x0e222326, 0x82838302, 0x3202233c, 0x01821716, - 0x8206c979, 0x213708c2, 0xd7fe2603, 0x06020c03, 0x200d0d0b, 0x4b2b1c2b, 0x10101f36, 0x392c2d3d, 0x3423232d, 0x4f101314, 0x230d0e0c, 0x413b1c2b, - 0x342b3b41, 0x0f3c0f12, 0x01041104, 0x6669017c, 0x3b37245d, 0x3717fe3b, 0x11103c58, 0x5523232c, 0x2e389029, 0x1622212d, 0x6b010c17, 0x1e21097d, - 0x067d6b22, 0x41415908, 0x39fe5003, 0x33248f23, 0x323a1b1b, 0x141f291c, 0x103f1006, 0x3812120b, 0x1b50664c, 0x190f0e1c, 0x201e1d2d, 0x011a691a, - 0x274e0152, 0x1014289e, 0x1c0c1710, 0x32314e36, 0x113d2a2a, 0x210a0a10, 0x3e181516, 0x19111014, 0x0b3a410d, 0x1421413a, 0x3e020902, 0x57fd3ef9, - 0x21374e66, 0xe66bd101, 0x27262d0b, 0x2d2e2828, 0x14010135, 0x1d101b23, 0x0812e66b, 0x7f20683f, 0x2a2a2e20, 0x38310c2e, 0x16271c11, 0x20061906, - 0x1b2e1d1d, 0x241b1a1e, 0x45282b25, 0x1c1c1c3e, 0x00175a17, 0x01060000, 0x0502ff7a, 0x001a0586, 0x00360028, 0x0092006c, 0x00ca009f, 0x0c406800, - 0x22263f68, 0x42062125, 0x3e241883, 0x031e3701, 0x6906345f, 0x13220738, 0xa75e2521, 0x196b6d14, 0x36352122, 0x42068861, 0x52201e45, 0x35054568, - 0x22225a39, 0x04030d2c, 0x260e0e0a, 0x242b1f30, 0x111e3424, 0x44681e11, 0x3d450805, 0x3bec1010, 0x3a3b4141, 0x34034242, 0x0c05d6fe, 0x0c0d0b07, - 0x2b1d2a21, 0x101f364a, 0x2c2d3e0f, 0x23222d39, 0x10141335, 0x0d0d340e, 0x1c2b221b, 0x3c40403c, 0x0e12342b, 0x12070f3c, 0x10fd7c01, 0x103c5838, - 0x2c238211, 0x38902955, 0x22212e2d, 0x030c1716, 0x07c76d03, 0x2205cd5e, 0x42754141, 0x6b250549, 0x1c1b336b, 0x0548423b, 0x42400f21, 0x1c2e0748, - 0x190f0e1b, 0x201d1e2c, 0x011a691b, 0x3068b352, 0x49f2222d, 0x147542a4, 0x0a2a0a24, 0x76422114, 0x0174230b, 0x3b42b901, 0x605f212d, 0x38243a42, - 0x39000600, 0xc70608ff, 0x0f001505, 0x28001c00, 0x57003200, 0x00007a00, 0x07d15805, 0x30133034, 0x17121633, 0x30272603, 0x30070623, 0x2e333007, - 0x536e0101, 0x0f995315, 0x53132575, 0x16251473, 0x17011e17, 0x05884433, 0x0423113c, 0x06240a1e, 0x0a2406e2, 0x2182c964, 0x0af12187, 0x0a0b0c0b, - 0x290bb13c, 0x306e9bfc, 0x0230080d, 0x215d3bad, 0x21242421, 0x3b2e2f21, 0x1f343355, 0x3f114a0d, 0x4c4c4434, 0x12433544, 0x1f0e380e, 0x01c4026a, - 0x090c0105, 0x82820421, 0x0c092203, 0x623e0c82, 0x09373678, 0x18080521, 0x15520517, 0x23f86277, 0x7f18187f, 0x709f0223, 0x017041fe, 0x008231e0, - 0x8c24d324, 0x4e53a501, 0x2907211d, 0x3f124d53, 0xfe095216, 0x081001f0, 0x4b141651, 0x0263fe12, 0x1975769f, 0x42420e5d, 0xfd2fb10b, 0x07000061, - 0x2c086741, 0x00200016, 0x0035002a, 0x0064003f, 0x08077f87, 0x15070623, 0x061c6c32, 0xa5710e20, 0x3d362305, 0xa3713401, 0x7301200c, 0x785613ff, - 0x1e9b7605, 0x08227541, 0x01980222, 0x37504e10, 0x18171d34, 0x16090a22, 0xfe223928, 0x25a766d5, 0xa7252626, 0x25252197, 0x3bfd9721, 0x3f507d41, - 0x5459a701, 0x0c054841, 0x1c280b0b, 0x472b211c, 0x275a1c33, 0x272c2c2b, 0x2b282457, 0x1d012329, 0x34518541, 0x01050000, 0x0502ff27, 0x001a05d9, - 0x0034002a, 0x0071003c, 0x7314827d, 0x3e240959, 0x16323302, 0x6a197176, 0x7b5410e7, 0x085e650e, 0x5d0d5d65, 0x0c5b0d7c, 0xf402210a, 0x261f8676, - 0xfb3c7302, 0x6be56f3a, 0x402607ed, 0x4010c611, 0xea76b6fd, 0x135d6b12, 0x215e6426, 0x2e015a3f, 0x2009d354, 0x0796768c, 0x762d5921, 0x652e0896, - 0x10100808, 0x5d341f2f, 0xb6b69bfe, 0x345b9e02, 0x544e200b, 0x2f220a51, 0xf376020b, 0x0982540e, 0x2f515c25, 0x6f1d374d, 0x003d09fd, 0xce010200, - 0x320516ff, 0x21000e04, 0x00003b00, 0x22233005, 0x30352627, 0x27012e35, 0x42088226, 0x322f05b0, 0x1e171617, 0x02141501, 0x27331507, 0x74013e32, - 0x2e220598, 0x436f2302, 0x1e280808, 0x8e700402, 0x55272855, 0x1b2f2f88, 0x39383e19, 0x50c45050, 0x3e383950, 0xf09aa0bb, 0x1244603a, 0x44121313, - 0x5f3b3a60, 0x5f310985, 0x492b2cea, 0x414d0b4c, 0x735c5b41, 0x4142c27f, 0x34008222, 0x7fc24241, 0x1cfcfee1, 0x4c28f267, 0x9e453737, 0x4c373745, - 0x290a8a28, 0x13000300, 0xed06b700, 0x07825603, 0x51003d22, 0x20056167, 0x0f5f6103, 0x2206944b, 0x58033003, 0x30230753, 0x6c113023, 0x11230f2b, - 0x82213023, 0x30352201, 0x08058401, 0x15302123, 0x21070206, 0x72cfe330, 0x0d175d17, 0x70175b17, 0x03228a22, 0x01050109, 0x081e080c, 0x1f088282, - 0x05974407, 0x12491236, 0x08082007, 0x12081f08, 0x62771248, 0x41fe9a02, 0xcefe4101, 0x32067662, 0x010301b7, 0x31c8329b, 0x4432c831, 0xfe45eefe, - 0x4b9d01fd, 0x7d622187, 0x00002809, 0x004c0004, 0x82b406ab, 0x001426e3, 0x0028001e, 0x5de5835f, 0xa6421ddb, 0x01112107, 0x2032994a, 0x06e45db9, - 0x5d601921, 0x2e2408e4, 0x1302ac2a, 0x27075668, 0xd7fe5803, 0x07030c03, 0x2123244a, 0x244a0e13, 0x5db72006, 0x28270eec, 0xd52b292e, 0x680296fe, - 0x402a065a, 0x14279e28, 0x0c171010, 0xc549351d, 0x1011210f, 0x200ec549, 0x30008200, 0xff730104, 0x058d0502, 0x004c001a, 0x00b4007d, 0x171772e0, - 0xe24a1720, 0x06072106, 0x15220184, 0xf24a011e, 0x220d8405, 0x57222306, 0x27210511, 0x72178237, 0x324b0c22, 0x2627210a, 0x4b06596b, 0x01230636, - 0x86323637, 0x23548555, 0x2107010e, 0x20336841, 0x49648a01, 0x02211d51, 0x11926750, 0x28286208, 0x11101d1d, 0x12120a0a, 0x1d1a1718, 0x0b131333, - 0x2011110b, 0x362c2c1f, 0x1b24232f, 0x0f15141c, 0x111c0d4f, 0x3d1d2d12, 0x47404542, 0x39fe8003, 0x33238f24, 0x1e1d1b1c, 0x0f2a1b32, 0x050a0b0f, - 0x0b0f4010, 0x26371311, 0x1b516626, 0x190e0e1c, 0x1e1d1616, 0x1b691a20, 0xa7fd5201, 0x0b03d6fe, 0x08934903, 0x0f1e3735, 0x2d2c3e10, 0x23222d39, - 0x0f141434, 0x0e0d0d4e, 0x491b2c22, 0x0f210692, 0x05074c3b, 0xfe500224, 0xb34b2438, 0x1e2a2107, 0x2008b34b, 0x205e854b, 0x08b34b18, 0x08103572, - 0x170b0c27, 0x291f2116, 0x14191a20, 0x060d0c14, 0x151a0604, 0x251c1d14, 0x1a24242c, 0x0a0e0e19, 0x1511110a, 0x143e1716, 0x093d7222, 0x614b7520, - 0x1c1c2609, 0x140e0e11, 0x07644b13, 0x4b0e0d21, 0x29230565, 0x4b1f1f44, 0x05210566, 0x2b224c46, 0xbb4b6220, 0x4f042028, 0x56280627, 0x2e000f00, - 0x8f033700, 0x6f135b5e, 0x0526243f, 0x33270226, 0x4618011d, 0x45182235, 0x38c9158a, 0x26a65fa6, 0x194a4618, 0x46181520, 0x0122153d, 0x45183d37, - 0x14941477, 0x11b34518, 0x38a61191, 0x5fcc26a6, 0x18333521, 0x28103f46, 0xb2663a01, 0x0601c901, 0x05f6706b, 0x70272821, 0x012312f6, 0x185f18eb, - 0x2d4f0346, 0x040e0301, 0x040e040c, 0x7c0e380e, 0x0782390e, 0x52044618, 0x19640128, 0x0f7a1862, 0x6b820f39, 0x0e040b3a, 0x0f3d0f03, 0xbbfdfc02, - 0x59594502, 0x4242b0fd, 0x3c3d3c7f, 0x302f3837, 0x21077a71, 0x7a713430, 0x104a200a, 0x5503da45, 0x0000002f, 0x00470005, 0x03b906ab, 0x001e0061, - 0x280b822f, 0x00700058, 0x010e0100, 0x0ad76c07, 0x2005c67a, 0x6c148233, 0x3e7b06d9, 0xa4052024, 0x10013925, 0x6c103d0f, 0x4010046c, 0x1e791e10, - 0x289f287e, 0x832bad2b, 0x63028822, 0x2718d27a, 0x0f070606, 0x52023110, 0x2208209e, 0x4612f001, 0x9e02cf12, 0x5115acfe, 0x24912514, 0x412fbc2f, - 0x3441fefe, 0x2ef0fed1, 0x53404059, 0x7a414052, 0x1b350679, 0x762b4934, 0x1b34482c, 0x2424341b, 0x252b762c, 0x1b1a1b23, 0x2224a35c, 0x4e060000, - 0x2f3a0893, 0x63004200, 0x98008d00, 0x0000a000, 0x30213005, 0x36373035, 0x30353637, 0xdb493435, 0x37362a0a, 0x1e32013e, 0x15161701, 0x05814a14, - 0x010e0725, 0x56052107, 0x3521052a, 0x211d8234, 0x937c3637, 0x4d3d8306, 0x26210555, 0x20018227, 0x752f8522, 0x162305dd, 0x18011617, 0x4e085142, - 0x122022f7, 0x240cf279, 0x39fe4503, 0x091153d6, 0x2c055a55, 0x664c1c1c, 0x0f0e3750, 0x17160c0d, 0x0613531d, 0x3f490126, 0x0e3c2e2e, 0x23080082, - 0x3f2e2e3c, 0x7c76767c, 0x10181922, 0x0606070f, 0x18100f07, 0x19184519, 0x0706100f, 0x0f100607, 0x89fe1819, 0x26200e4f, 0x3afb3d74, 0x4f72726e, - 0xf22c0c0f, 0x2a2ebf68, 0x310c2f29, 0x261d1138, 0x2a06c349, 0x1e1b1717, 0x2b252435, 0x49222328, 0x672207c3, 0x2e7c1817, 0x18173307, 0xb6b8feb7, - 0x1a0e0e5c, 0x2d24231a, 0x24242c75, 0xa1821a1a, 0x1b1a0e29, 0x752c2423, 0x8323242d, 0x7703210e, 0x231f2d4f, 0x4f014f01, 0x080a2f4f, 0x00000020, - 0xfe0b0106, 0x05f50568, 0x001f000f, 0x00410039, 0x0055004b, 0x0100006f, 0x26222330, 0xfd4e013d, 0x4e062014, 0xf6671afd, 0x77012007, 0x05201287, - 0x0d654118, 0x23112e08, 0x33133311, 0x11333736, 0x5fe50223, 0x5b383539, 0x1211201f, 0x3625262a, 0x35368235, 0x7c292626, 0x27a1676b, 0x0c0d2d40, - 0x402d0d0c, 0x2d098227, 0x0c0d0d0c, 0xed02402d, 0xfb01c76d, 0xff793bfb, 0x15042b0c, 0x09230905, 0x18186219, 0x08821962, 0x80670539, 0x595a06b4, - 0x68fe677b, 0x0732313a, 0x3d2b2b34, 0x81554c3e, 0x82172b2c, 0x2c2b3d00, 0xad965581, 0x1aa24513, 0x2d252533, 0x24252e6a, 0x331b1b33, 0x6a2e2524, - 0x3325252d, 0x2108ec67, 0xe2762401, 0x2e292d09, 0x123e2b28, 0xb32c1249, 0x2cb32d2d, 0xfd390882, 0xfe9e02ff, 0xfdaaabab, 0x00000062, 0x00850002, - 0x037b0654, 0x003400b8, 0x357f644d, 0x08131a41, 0x1133133d, 0x69b70123, 0x3e103594, 0x35362c10, 0x39515144, 0x7a252649, 0x4c2a3e3d, 0x465f436c, - 0x035b3145, 0x48465d21, 0x21202728, 0x757e4a44, 0x03714e29, 0x2c0b06fa, 0x2381130b, 0x82138124, 0x82062708, 0xe007e1a1, 0x8c64829a, 0x8f022a2d, - 0x22175a17, 0xec4040ec, 0x38088222, 0x46037ffd, 0xaa0156fe, 0x0000bafc, 0x00b50003, 0x034b0663, 0x000b00a9, 0x19ad7b15, 0x76010921, 0xb63c11d5, - 0x7f746801, 0xd8e1747f, 0x34393934, 0xfe5a03d8, 0x58178ced, 0x0f370a17, 0x0a380f05, 0x88340982, 0x632eba2e, 0xe6894603, 0x01b2fe89, 0x3a3236c5, - 0x31fd3632, 0x2205a176, 0x7637c825, 0x00200aa1, 0x1b500082, 0x45612007, 0x7e2006bf, 0x4e46bd45, 0x210834ce, 0x0f3d1015, 0x10036d6d, 0x781f1040, - 0xa0287f1e, 0x2bac2b27, 0x02872283, 0x3b5c3f63, 0x0f0e0e0f, 0x43445c3b, 0x1f312805, 0x311f0d0d, 0x441f3145, 0x3122053b, 0x50501a03, 0x3edf4532, - 0x50ef0121, 0x053a2c71, 0x02ff5b01, 0x1a05a505, 0x3e003400, 0x81004800, 0x0000a200, 0x27262205, 0x9f793736, 0x103f5407, 0x2e070225, 0x54222301, - 0x4b180f3f, 0x45891465, 0x76290169, 0xb1570d59, 0x17162a0e, 0x5002010e, 0x252a7655, 0x14c77f26, 0x1e1a0b23, 0x0dc87f09, 0x442d0121, 0xb3350545, - 0x2e2e2aac, 0x2cfeac2a, 0x262b7654, 0x2b2a2425, 0x18424037, 0x11406916, 0x69190d21, 0x74760e40, 0x25210805, 0x58416924, 0x2e2d2275, 0x4e3b4811, - 0x3d4e5858, 0x4d0a134b, 0x3dfd7922, 0x2b232334, 0x31391616, 0x0e8c5427, 0x1b160a23, 0x128d5408, 0x07bf4b18, 0x282e2925, 0x8918012b, 0x2650693d, - 0xa9b12a08, 0x2d404055, 0x4b4d2d2c, 0x39301919, 0x5d665d6a, 0x06313e69, 0x0052492f, 0x00040000, 0x06b7002e, 0x005603d2, 0x0027000f, 0xe7411836, - 0x15d55e15, 0x2d611320, 0x6c622518, 0x70fc01c8, 0x2b09ad55, 0x6940ed83, 0x28282525, 0x40692525, 0x2005f660, 0xe8411881, 0x70022009, 0x022705bb, - 0x2a2a2a9e, 0x827da87d, 0x5e602705, 0x5e5b6c5b, 0x9e8222fe, 0x0106002d, 0x0502ff4b, 0x001a05b5, 0x821e0015, 0x004930ab, 0x00d8016e, 0x35300500, - 0x35302130, 0x74371236, 0x152e053d, 0x15302330, 0x33302530, 0x23301130, 0x145e010e, 0x183e2007, 0x2008d344, 0x073d4801, 0x22012e23, 0x07197e06, - 0x01021e24, 0x006a2622, 0x06816d08, 0x1d060722, 0x0e814618, 0x1133352b, 0x15010f23, 0x0f150e0f, 0x8205840d, 0x270b9108, 0x27012e05, 0x0b3f3537, - 0x0a200284, 0x0b880584, 0x17930620, 0x1133073c, 0xa1021533, 0xb52dc9fe, 0x5c5c8e2d, 0x07dbbffe, 0xaf028e23, 0x0e3c5c3e, 0x44181d0f, 0x072009bd, - 0x0f260082, 0x3145310f, 0x09820f10, 0x311f0739, 0x9683eefd, 0x41684927, 0x213b3b58, 0x11103c0f, 0x2c4d3b48, 0x182c2d2d, 0x220ad849, 0x1808bc2f, - 0xeb2e3b4c, 0x2c0b222e, 0x206ed20b, 0x2453d202, 0xa3a60101, 0xa54a18f2, 0xe2fe290e, 0x4140582f, 0x58835152, 0x07aa4518, 0x2c25243b, 0x24252b75, - 0x1c1c1a1a, 0x25241a1a, 0x252c752b, 0x031c3324, 0x55a9b106, 0x61481880, 0x3e342c0f, 0x09230931, 0x0b292949, 0xd4f5015a, 0x2254d0b1, 0xd00a280a, - 0x41508953, 0x5f8655b6, 0x5abcfd23, 0x08008200, 0x5c000235, 0xa4065f02, 0x03007105, 0x00001b00, 0x21152113, 0x17372701, 0x37153335, 0x15330717, - 0x27071723, 0x07352315, 0x35233727, 0xf948065c, 0x8cc204b8, 0x823c8c2a, 0xc6c62103, 0x02240887, 0x220246a5, 0x1a84118c, 0x01000026, 0x25ff5c00, - 0xd6225b82, 0x59821400, 0x2c323808, 0x35053e01, 0x032e3411, 0x5c23022c, 0x0134019d, 0xadc7f605, 0x3c2e5b7f, 0xfeccaa6f, 0xfee5fef8, 0xa502ada9, - 0x7e725633, 0x47667a83, 0x154ff90e, 0x91907d5b, 0x8d3e6886, 0x22012447, 0x832e012c, 0x823e2047, 0x06332747, 0xccfe9da4, 0x4889fbfe, 0x01080125, - 0x9657011b, 0x32ef8248, 0xff2a0005, 0x05d60638, 0x00040094, 0x00440040, 0x8208014b, 0x21302b9b, 0x22042107, 0x0e07030e, 0xeb570704, 0x34352e06, - 0x17323336, 0x3e32041e, 0x043e3703, 0x240c8337, 0x15161716, 0x391e8314, 0x2103032e, 0x15012115, 0x23250523, 0x3e342535, 0x16323302, 0x1e323617, - 0x26821703, 0x83061421, 0x32362105, 0x17250583, 0x3e37013e, 0x20478203, 0x83408436, 0x011e2228, 0x840c8631, 0x32332317, 0x2983021e, 0x15215b85, - 0x29618514, 0x012e2726, 0x2e353435, 0x6e832702, 0x23010e2e, 0x010e2722, 0x27220607, 0x030e0706, 0x06830c86, 0x0e820220, 0x2683b084, 0x2e210386, - 0x08ba8202, 0x0e34273b, 0x010e3501, 0x26272627, 0x34351617, 0x34370627, 0x22233637, 0xe4015c26, 0x0462fe46, 0x506154e0, 0x070f2f4f, 0x5b403c15, - 0x934b522c, 0x08354da7, 0x0f1b151d, 0x504f2f0f, 0x081b9a61, 0xe401ddd4, 0x10fe62fe, 0x01000196, 0x7afc9600, 0x1a240e04, 0x0e0b1b13, 0x080c171f, - 0x1b110202, 0x06021115, 0x2e380407, 0x0e101007, 0x0810020c, 0x130c0603, 0x06090a0c, 0x1339530b, 0x282c040d, 0x1e180c11, 0x1d0c2f41, 0x0e040d15, - 0x2013241a, 0x0c1e2714, 0x090a1114, 0x492f0909, 0x13012c21, 0x180f121a, 0x0f061004, 0x0f142521, 0x1c192a10, 0x12241017, 0x0e0d2109, 0x3b1a132e, - 0x07071813, 0x09380d06, 0x141b0e29, 0x340d111a, 0x0807122f, 0x0a111910, 0x1010160b, 0x0f171c10, 0x1a0c2218, 0x16110822, 0x1601030d, 0x03270617, - 0x0801021a, 0x01030110, 0x12070802, 0x6eb9021a, 0x52422fbb, 0x1d09173c, 0x184b424a, 0x4d4ea72d, 0x1d150f0d, 0x523c1716, 0x18972f42, 0x58019008, - 0xfa25016e, 0xa0faf0f0, 0x1a291d0d, 0x0e071b15, 0x0e111d11, 0x0b3a2617, 0x070d0c02, 0x10370505, 0x09100b09, 0x670c0804, 0x2741040d, 0x60373b1f, - 0x11070e18, 0x2617121d, 0x100f1509, 0x04435201, 0x05120438, 0x11083401, 0x2d0c1017, 0x04030b12, 0x0b423e08, 0x111d2f07, 0x10450b24, 0x331c1411, - 0x090e1d0f, 0x0c4d0a5d, 0x410c1818, 0x1617022d, 0x05081721, 0x141b0c11, 0x0e052226, 0x17031922, 0x0c0c0207, 0x02050203, 0x02020411, 0x82010402, - 0x07022403, 0x4300171a, 0x250807b3, 0x000b0049, 0x0100000f, 0x23153315, 0x23352315, 0x01353335, 0x05211521, 0x64b4b498, 0x28fbb4b4, 0xb8f94806, - 0x0b834905, 0xfdb46438, 0x0500465c, 0x3eff5300, 0xa7058c06, 0x28000600, 0x30002c00, 0x3d823700, 0x0b331129, 0x27113301, 0x83270723, 0x84032001, - 0x020b2605, 0x37021b35, 0x20018217, 0x29058413, 0x33213317, 0x35022b15, 0x2d853733, 0xa1042e08, 0xa0cecea0, 0x334ac936, 0x3f2f303f, 0x19373a3a, - 0x37361031, 0x36372727, 0x37193110, 0x2f3f3a3a, 0x4a333f30, 0x8af201c9, 0x7373bc8a, 0x082c8388, 0x01080247, 0xfe2201b0, 0x3a50fede, 0x72a93ed6, - 0xfcfee3cd, 0xdf6a8b54, 0x01d4fe92, 0x89eb0104, 0x0401eb01, 0xdfb7affe, 0xfe548b6a, 0x72cde3fc, 0x61d63ea9, 0x50fe3a61, 0x2201defe, 0x0000b001, - 0xff5c0003, 0x05a40637, 0x22bb82e0, 0x833b000d, 0x092326b7, 0x03112301, 0x22068411, 0x85012f01, 0x200585bf, 0x220f840f, 0x821f020f, 0x013f23c4, - 0xc485011f, 0x03280586, 0x1401c834, 0x98c81401, 0x023d0685, 0x4e7238d8, 0x60484b60, 0x27545a5a, 0x4554184b, 0x364b394b, 0x2539155a, 0x5a153925, - 0x310c8236, 0x4b185445, 0x5a5a5427, 0x604b4860, 0x5d01724e, 0x9484fcfe, 0x5d020422, 0xd183b982, 0xfefc3008, 0x04381bc8, 0x59512d42, 0x2a372166, - 0x70844858, 0x3b4b645a, 0x6c438f52, 0x528f4a65, 0x5a644b3b, 0x58488470, 0x6621372a, 0x422d5159, 0x82003804, 0x00023b00, 0x0622ff4b, 0x00d005b5, - 0x002a0009, 0x2d150500, 0x35211501, 0x0135010d, 0xad8b1713, 0xd98d3f20, 0x03070324, 0x7e836d01, 0x01260422, 0x26087a82, 0x6e4ed3fa, 0x32621f6d, - 0x7d75756d, 0x667d615e, 0x94494994, 0x5e617d66, 0x6d75757d, 0x6d1f6232, 0xa03e4e6e, 0x83a0cece, 0x03330803, 0xcd7efe54, 0x54b073ec, 0xb2cc426e, - 0x318459a1, 0x99353699, 0xa1598431, 0x6e42ccb2, 0x0190b054, 0x7efecd09, 0x00020000, 0x066aff5e, 0x007b05a2, 0x421f000b, 0x03300e5b, 0x0b270327, - 0x37112702, 0x1337021b, 0x15211337, 0x21066942, 0x7487c7fe, 0x02218687, 0x077742a7, 0xfef0fc33, 0xf7fe629d, 0x01befeb2, 0x8467fe65, 0xfe840705, - 0x2f098267, 0xf7feb2be, 0x749dfe62, 0x53000300, 0xaf063eff, 0x2c069342, 0x1300002f, 0x010d3521, 0x15032135, 0x05074121, 0x22058042, 0x8235021b, - 0x09a04279, 0x85030721, 0x42cb2026, 0x55220754, 0x8c424503, 0x363b2106, 0x210b8c42, 0x8c423b36, 0x42962006, 0x0428074b, 0xcecea003, 0x61fcfea0, - 0x21268642, 0x2f839bfe, 0x00820020, 0xc8000428, 0x38065eff, 0xb582a605, 0x1b000f2b, 0x00001f00, 0x15213525, 0x0b7f4303, 0x112e0b8b, 0x6c041123, - 0xb4b4cc01, 0xb4b464b4, 0x0684c0fc, 0x5a310227, 0x046464a0, 0x0595439c, 0x855cfe21, 0x0e022507, 0x4806b8f9, 0x00216282, 0x058f4701, 0x82a50221, - 0x13002c63, 0x5c211521, 0xb8f94806, 0x8246a502, 0x01053a1c, 0x0508ff56, 0x001505aa, 0x0039000f, 0x00650045, 0x0500008f, 0x23113335, 0x05715e06, - 0x3311332a, 0x07140115, 0x2307020e, 0x21058b55, 0x1a82012e, 0x18020e21, 0x20125250, 0x86501804, 0x08e84b0a, 0x280d1463, 0x011e3736, 0x06070617, - 0x0fce6725, 0x6a272621, 0x06321013, 0x01152107, 0x6507bc9c, 0x0b2c0b37, 0xa3a56e3d, 0xda671c02, 0x5b382c05, 0x0d2d2221, 0x0a010402, 0x18250e0f, - 0x32122050, 0x4275d9fe, 0xfe417542, 0x26958456, 0x57416949, 0x4e5b2276, 0x52180610, 0x5f0808aa, 0x39fee202, 0x1c3307cf, 0x1b323b1b, 0x05151e2a, - 0x120a332c, 0x664c3713, 0x0f1b1c50, 0x1d2c190e, 0x4f4f201e, 0x5bf85201, 0x3b6bf501, 0x430a270a, 0x5bbcfd77, 0x4049a501, 0x1b556b41, 0x29284d2a, - 0x01013659, 0x1a121214, 0x370e0f10, 0x2b31304c, 0x211e1e2a, 0x30441312, 0x3c3e9230, 0x3f3f3c0e, 0x01310482, 0x54a9b2ca, 0x4d2d5881, 0x392f314b, - 0x5d655d6a, 0x088b4a6a, 0x07b8682f, 0x2e2a292f, 0x1038310c, 0x1116271d, 0x0d9f6914, 0x1c1d1b39, 0x005c4344, 0x01040000, 0x0508ff2e, 0x001505c7, - 0x00350013, 0x7986004d, 0x11231303, 0x52300130, 0x302310b5, 0x86133033, 0x30112203, 0x4e218223, 0x276d1551, 0x2e012137, 0x37088e61, 0x230905c4, - 0x19621809, 0x09186218, 0x68050824, 0xb406b381, 0x2bfc687b, 0x323b3a6d, 0x609f02f8, 0xdcfe60bb, 0x48120102, 0x2cb32d12, 0x822db32c, 0xfffd2b08, - 0xabfe9f02, 0x61fd5501, 0x20846203, 0x0b61c322, 0x0ac44118, 0xec781720, 0x5c450805, 0x24242c51, 0x1b1a1b31, 0x0b2d0b32, 0x2c2e2822, 0x0a15152a, - 0x515c130d, 0x1b27262f, 0x01001e1b, 0xd3006b00, 0x31049506, 0x00004400, 0x15163201, 0x020e0714, 0x22230607, 0x2627052e, 0x22232627, 0x0e070607, - 0x08108301, 0x34352645, 0x3e373637, 0x1e323306, 0x17161705, 0x37323316, 0x013f013e, 0x4c06023e, 0x0b072a1e, 0x72326624, 0x42522a6e, 0x1b362f44, - 0x70214913, 0x4643305d, 0x0d101259, 0x2a1e1411, 0x140a0412, 0x4330381c, 0x8b264d40, 0x32310821, 0x15572a48, 0x1f0b0316, 0x1e2aca02, 0x41160f11, - 0x1e723293, 0x5539472a, 0x3184242e, 0x984643a8, 0x0a08151e, 0x141c1e2a, 0x2e221106, 0x2a443a52, 0x281d891d, 0x287c2a48, 0x130e0728, 0x3e008200, - 0xff1e0003, 0x05ce0649, 0x000b00cc, 0x004e002b, 0x06140400, 0x26222123, 0x21333634, 0x83222532, 0x3e0127b8, 0x17323301, 0x03822101, 0xde82e282, - 0x21012729, 0x01092722, 0x8413010e, 0x820620f3, 0x211582e6, 0x2c82012f, 0x32333625, 0x8503011f, 0x13172108, 0x3808e482, 0x151d0b02, 0x1d159ffe, - 0x6101151d, 0x158afe15, 0x6101021d, 0x19111a05, 0x0182010f, 0x010f1c8c, 0x151d078d, 0x82fe0f1c, 0x0f1977fe, 0xbcfeaafe, 0x0a9a1a05, 0x01011a0f, - 0x08548203, 0xd2050554, 0x050a0f0f, 0x03a38b05, 0x080e0a0f, 0x0e0111a4, 0x1d1d2a70, 0x1d5d1d2a, 0x04070715, 0x151410a6, 0xfd18effd, 0x150e0c80, - 0x6802181d, 0xfbd40115, 0x051410bb, 0x010a0f4a, 0x070403e1, 0x5b020404, 0x0f0a1007, 0x15013d02, 0x0f0a0706, 0x95e9fe0c, 0xf3840d09, 0xf3844620, - 0xf3841420, 0xf3ad5020, 0xf3830120, 0x25010f22, 0x1624e982, 0x05071415, 0x2506734b, 0x2330012f, 0xf8822726, 0x3f363726, 0x9c033601, 0x6f20f582, - 0x9123f584, 0xa2f9fc15, 0x52033ef5, 0x48040f0a, 0x04042d01, 0xfe110f0a, 0x0f0d89c7, 0xba05070a, 0x04030501, 0x6c020101, 0x3df7a307, 0x070b0e03, - 0x01687906, 0x05120b0e, 0x0f074d6d, 0x69030f0a, 0x08060503, 0x03020404, 0xf78a0cb4, 0xf784b020, 0xf7ae5220, 0x82363421, 0x361322f9, 0x24068337, - 0x07060714, 0x21048227, 0xf4832223, 0x31262722, 0x2306f141, 0x41051716, 0x5b20f982, 0xa523f984, 0xa354fb15, 0x0fb32ef9, 0x8d010f14, 0x0f140806, - 0x02219605, 0x2bf18312, 0x4f060709, 0x0a0f056b, 0x375a070d, 0x2908faa3, 0x0f0f0a8d, 0xbd54fe0a, 0x0a0f0806, 0x2dc70609, 0x01051305, 0x6a060601, - 0x0a090691, 0x4a790a0f, 0x00030000, 0x0649ff46, 0xf34105e2, 0x06ec4135, 0x37070222, 0x0f210985, 0x05854d01, 0x42233421, 0x1f2406eb, 0xce063601, - 0x7320f982, 0x8d23f984, 0xa2c7f915, 0xe6053ef9, 0x0f0a1206, 0xa3285f01, 0x0f0a0707, 0x0807e00b, 0x03070607, 0x0f026201, 0x4c06110a, 0x08f8a22a, - 0x119e0451, 0x04040a0f, 0x6b74e2fe, 0x0e0a0f04, 0x04049307, 0x01010704, 0x0a05040d, 0x7dcc110f, 0x02000000, 0x7cff7d00, 0xb6058306, 0x12000600, - 0x11010000, 0x17010b37, 0x06140011, 0x26012722, 0x17323634, 0xb7cc0501, 0x01b7e2e2, 0x163e2c0d, 0x821690fa, 0x70053505, 0x9afeb605, 0x01dffe46, - 0x66014621, 0x2c3e31fa, 0x16700516, 0xfa210582, 0x204f8d90, 0x294f881f, 0x23061401, 0x012c3122, 0x0f410027, 0x17162606, 0x05000112, 0x385c891e, - 0xddfe011f, 0xfebd14fe, 0x2c017588, 0x05291c1f, 0x0157016c, 0x1f120252, 0x386b8c2b, 0x052c1f12, 0x7801bdc6, 0x0706ae02, 0x1b242c1f, 0xa9fe82fd, - 0x010aaefe, 0x20c7842c, 0x20c7825f, 0x34c78583, 0x1b071105, 0x24112701, 0x37342622, 0x16323601, 0x05010714, 0x21c78376, 0xae8a1bfb, 0x6601a02b, - 0xfe210146, 0x9afe46df, 0x83d8841d, 0x85c583de, 0x224f87c7, 0x8600002f, 0x05f0444f, 0x3e373626, 0x24363706, 0x2606e243, 0x04060706, 0x8207020e, - 0x07062202, 0x0865860e, 0x1ffcfa28, 0x5331062c, 0x2a3f2322, 0x27493840, 0x01b60192, 0x1f04034c, 0xb61d272c, 0xa3d0e2fe, 0x461f3472, 0x33532b2f, - 0x818c2608, 0x0f1f2408, 0x5ad7760e, 0x7b569959, 0x92275d55, 0x2c0120a8, 0x032b1d1f, 0x865c4312, 0x9f3b6495, 0x78d96f78, 0x82001915, 0x00043400, - 0x0644ff46, 0x00b405ce, 0x000e000d, 0x00300020, 0x45330100, 0x23270a7d, 0x01032531, 0x4523010e, 0x09280a9d, 0x15163201, 0x06010714, 0x36231486, - 0x4564ab04, 0x87280a5d, 0xfeef6ffe, 0x111a05bc, 0x290a9542, 0x1f310215, 0x49fc0c2c, 0x06822916, 0x16b70324, 0x4a45ee02, 0x01a12609, 0x10bbfb48, - 0x08664514, 0x0284fe2a, 0x161f2c30, 0x2327fa12, 0x05220683, 0xa68223d9, 0x0001002e, 0x06090045, 0x001505cf, 0x3700001f, 0x201e2b46, 0x22104378, - 0xd7450a20, 0x8200201b, 0xff13286f, 0x05ed0654, 0x823e00af, 0x1732267e, 0x37011b16, 0x26038817, 0x07031702, 0x82270327, 0x010b2304, 0x03832707, - 0x06033424, 0x0f86010f, 0x37032c08, 0x3f303713, 0x37131701, 0x3f011a32, 0x018b0201, 0x32420239, 0x2c723939, 0x173f3939, 0x278c3939, 0x39847045, - 0x1f2f4c39, 0x825e3939, 0x3f6b2813, 0x03463939, 0x828c0706, 0x4824080e, 0x71543939, 0x39580724, 0x013d5539, 0x380a221a, 0x0239ae05, 0x47024bfd, - 0x0bfd3838, 0x38388d01, 0x530361fe, 0x20260582, 0x5602cbfe, 0x3282fb0d, 0x9760032a, 0x393985fb, 0x6ffe6502, 0xc8310582, 0x393924fd, 0x37da0208, - 0xcffd6d5a, 0x6d033939, 0x314a82fc, 0xfd06a005, 0x38ec649e, 0xf5e3fc38, 0x9f019a01, 0xdf82380b, 0xffa02008, 0x056006ce, 0x00070032, 0x15212500, - 0x35231121, 0x04940133, 0x7cbcfacc, 0x047846f4, 0x920078ec, 0x35212c23, 0x044c0221, 0xfe74fb14, 0x86ac01cc, 0x29279625, 0x5c030403, 0x14fe2cfc, - 0x279e6402, 0xa402bc28, 0x5cfde4fc, 0x279d1c03, 0x01740429, 0xfc9cfdec, 0x9dd403a4, 0x2c052927, 0x54fe3401, 0x8c04ecfb, 0x33232796, 0x82112315, - 0xe40527c7, 0x34fbf47c, 0xeb884405, 0xceff6328, 0x32059d06, 0xd0821f00, 0x15163226, 0x01011930, 0x42058045, 0x112006e9, 0x2c09f042, 0x23198003, - 0x16117d02, 0xfd152319, 0x21068320, 0x0c8483fd, 0x11e00233, 0x19233205, 0xcafdccfd, 0x230e2202, 0xfd121c19, 0x2306828a, 0xdefd6a04, 0x02230d84, - 0x82000e76, 0x00012a00, 0x063b0063, 0x00c5049d, 0x206b851a, 0x22628214, 0x87092722, 0x01303760, 0x09173236, 0x60063601, 0xfe0b2319, 0x123e1290, - 0xc1fe51fd, 0x0d821f12, 0x82700121, 0xaf02330d, 0x02123f01, 0x131923bc, 0x19f8fd10, 0xfecb0319, 0x0c83193d, 0x19080228, 0x0135fc19, 0x638219c3, - 0x9f000322, 0x6120cf82, 0x2124cf82, 0x47003400, 0x35256782, 0x07050e22, 0x24018506, 0x3e321523, 0x052b6105, 0x2136372a, 0x051e3235, 0x26070617, - 0x2105d66b, 0xfe6b1601, 0x15332505, 0x27052e22, 0x0b2f8482, 0x986b6825, 0x7748a48e, 0x348e8492, 0x8e101c30, 0x50fa2d0f, 0x57541d09, 0x4190797d, - 0x5e542123, 0x03212284, 0x2008865c, 0x301a8810, 0x0378ba04, 0x86642e1b, 0x92df86da, 0x0a163b84, 0x2a0e8f06, 0x45201302, 0x375d965c, 0x845e803b, - 0x4ffd211f, 0x78200886, 0x00321987, 0x00aa0003, 0x03560648, 0x0009008e, 0x00250013, 0x25603700, 0xe3441812, 0x18012008, 0x2007d553, 0x083b5eab, - 0x343a3a30, 0x117a03d8, 0x81040a41, 0x0a120197, 0x07821240, 0x03483908, 0x88e78946, 0xc501b2fe, 0x323a3335, 0x2200ff36, 0x7ffd137d, 0x31fe4603, - 0x02227c14, 0x00bafc81, 0x3b010400, 0xc50507ff, 0x07000c05, 0x1b001100, 0x00002d00, 0x15011101, 0x35210382, 0x20819203, 0x65451805, 0xaa032810, - 0x72fe2801, 0x5ce0d8fe, 0x6718052d, 0xc82307c0, 0x180e3308, 0x200af853, 0x736818b3, 0x2802210b, 0x35093d60, 0x2b292e28, 0x1b640fcc, 0x9e02fffd, - 0x631c8efe, 0xfd010210, 0x00830062, 0xae000e24, 0x08830100, 0x02200384, 0x01240b86, 0x1f000d00, 0x02200b86, 0x3d20b382, 0x03240b86, 0x8f002400, - 0x04200b86, 0xd0202382, 0x05240b86, 0xfe000f00, 0x062a0b86, 0x28010c00, 0x01000300, 0x53840904, 0x0b860020, 0x1a000122, 0x17850982, 0x0e000224, - 0x17862d00, 0x48000324, 0x0b864500, 0x23820420, 0x0b86b420, 0x1e000524, 0x0b86de00, 0x18000624, 0x4d830e01, 0x75004630, 0x6e007200, 0x63006100, - 0x20006500, 0x07824900, 0x0f826f20, 0x0000732e, 0x6e727546, 0x20656361, 0x6e6f6349, 0x52200e82, 0x67201f82, 0x6c202d82, 0x72282b82, 0x65520000, - 0x616c7567, 0x46210882, 0x212f8300, 0x07830074, 0x67007222, 0x3a204584, 0x59994982, 0x83002021, 0x8233201f, 0x843220b0, 0x00302403, 0x82340032, - 0x6e6f2a6f, 0x726f4674, 0x3a206567, 0x827b8c20, 0x2d33260f, 0x30322d32, 0xa8258332, 0x825620b0, 0x0072248a, 0x84690073, 0x002022a0, 0x22018230, - 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41b08d10, 0x07411108, 0x02002206, 0x20008b00, 0x840c8b01, 0x8265200b, - 0x01ce0805, 0x03000200, 0x03010201, 0x05010401, 0x07010601, 0x09010801, 0x0b010a01, 0x0d010c01, 0x0f010e01, 0x11011001, 0x13011201, 0x15011401, - 0x17011601, 0x19011801, 0x1b011a01, 0x1d011c01, 0x1f011e01, 0x21012001, 0x23012201, 0x25012401, 0x27012601, 0x29012801, 0x2b012a01, 0x2d012c01, - 0x2f012e01, 0x31013001, 0x33013201, 0x35013401, 0x37013601, 0x39013801, 0x3b013a01, 0x3d013c01, 0x3f013e01, 0x41014001, 0x43014201, 0x45014401, - 0x47014601, 0x49014801, 0x4b014a01, 0x4d014c01, 0x4f014e01, 0x51015001, 0x53015201, 0x55015401, 0x57015601, 0x59015801, 0x5b015a01, 0x5d015c01, - 0x5f015e01, 0x61016001, 0x75076201, 0x3045696e, 0x07863046, 0x07863120, 0x07863220, 0x07863320, 0x07843420, 0x85303121, 0x30312127, 0x31212785, - 0x21278530, 0x27853031, 0x87303121, 0x86352027, 0x8636202f, 0x86372007, 0x86382007, 0x86392007, 0x86412007, 0x86422007, 0x86432007, 0x86442007, - 0x86452007, 0x85462007, 0x30312107, 0x31200786, 0x7f860786, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, - 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x85303221, 0x31322177, 0x7f860786, 0x7f863220, 0x7f863220, 0x7f863220, - 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x85303321, 0x31332177, - 0x7f860786, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, - 0x7f863320, 0x7f863320, 0x85303421, 0x31342177, 0x7f860786, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, - 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x85303521, 0x31352177, 0x7f860786, 0x7f863520, 0x7f863520, 0x7f863520, - 0x7f863520, 0x7f863520, 0x7f863520, 0x7f863520, 0x7f863520, 0x00423529, 0xff010000, 0x450200ff, 0x0c2408d9, 0x04001400, 0x02221582, 0x13840000, - 0x84050544, 0x55e02305, 0x15822068, 0x0c5b7d18, 0x3131fa05, 0x0000f177, + 0x15820905, 0x01210285, 0x84078510, 0x75462905, 0x40005472, 0x5fe12000, 0x06208385, 0x04856a84, 0x3b208b84, 0x07202683, 0x03830482, 0x0280fc25, + 0x82910009, 0x0052220c, 0x08798220, 0x3500a524, 0x29004b00, 0x6d019100, 0x08007800, 0x47006000, 0x17015200, 0x4a000a00, 0x32018f00, 0x4f001b00, + 0x31822e00, 0x1801ca26, 0xa9003601, 0x28251b82, 0x4d013300, 0x82918200, 0x00033823, 0x017c0122, 0x0039007a, 0x01270139, 0x001300ce, 0x0073014c, + 0x82470022, 0x000b240d, 0x82b50085, 0x005b260f, 0x004b012e, 0x2001845c, 0x2005822a, 0x32038253, 0x005e004b, 0x00c80053, 0x0156015c, 0x006b002e, + 0x8446001e, 0x007d2101, 0x46220185, 0x4b824500, 0x8b00a021, 0x00632801, 0x009f0063, 0x823b01aa, 0x00da2487, 0x822b000b, 0x000022c3, 0x83058203, + 0x851c2003, 0x160123ef, 0x09840300, 0x04001c24, 0x1b82fa00, 0x0800082e, 0x00000200, 0xf4e02000, 0xffff5fe1, 0xf0260984, 0xffff00e1, 0x0b82e3ff, + 0x2b840020, 0x0e000622, 0x04260b82, 0x06000500, 0x2f820700, 0xd9820920, 0x0c000b24, 0x17820d00, 0x10000f26, 0x12001100, 0x14328d82, 0x16001500, + 0x18001700, 0x1a001900, 0x1c001b00, 0xb7821d00, 0x20001f36, 0x22002100, 0x24002300, 0x26002500, 0x28002700, 0x2a002900, 0x30089d82, 0x002d002c, + 0x002f002e, 0x00310030, 0x00330032, 0x00350034, 0x00370036, 0x00390038, 0x003b003a, 0x003d003c, 0x003f003e, 0x00410040, 0x00430042, 0x08f38244, + 0x47004644, 0x49004800, 0x4b004a00, 0x4d004c00, 0x4f004e00, 0x51005000, 0x53005200, 0x55005400, 0x57005600, 0x59005800, 0x5b005a00, 0x5d005c00, + 0x5f005e00, 0x61006000, 0x63006200, 0x65006400, 0x67006600, 0xd4826800, 0xd8850620, 0x0022d582, 0x05820201, 0x8d000221, 0x00012300, 0x118d0300, + 0x22d10d40, 0x826f043b, 0x002c21d4, 0xeb080185, 0x0084003c, 0x056404c6, 0x06c40524, 0x075807d4, 0x09ce08ea, 0x0a760934, 0x0bfe0ab0, 0x0cee0b88, + 0x0de60c2e, 0x0ed80d6a, 0x0fca0e64, 0x105a10a4, 0x117e11bc, 0x139212c6, 0x138c130c, 0x159814d8, 0x17381648, 0x1b801712, 0x1cae1b1e, 0x1dc01c34, + 0x1f081fea, 0x218020bc, 0x218a2134, 0x238622fc, 0x272a27c8, 0x29b028ca, 0x2ac62952, 0x2bbe2a0a, 0x2ef42ba4, 0x2e442e16, 0x2f8e2e68, 0x300c30f0, + 0x31d2306a, 0x3156311e, 0x31de31ac, 0x33ba32ec, 0x34c63364, 0x35bc3440, 0x35b6353a, 0x361a36de, 0x36903642, 0x371c37e4, 0x379e378c, 0x37c637b2, + 0x38ee37da, 0x38143802, 0x387c384a, 0x392439e6, 0x3ae83970, 0x3c943b64, 0x000200b0, 0x0200003b, 0x00aa0415, 0x00070003, 0x0001b12e, 0x07b23c2f, + 0x32ed0004, 0xdc0506b1, 0x0203b23c, 0x00220a82, 0x168303b1, 0x16830520, 0x0607b227, 0xb23cfc01, 0x38178301, 0x11211133, 0x21112125, 0xfeda013b, + 0xfe640161, 0xfbaa049c, 0x34043b56, 0x25528200, 0xf5ff80fc, 0x09828003, 0x59820120, 0x2105002e, 0x33fd2125, 0xb3f99a05, 0x0b0b0007, 0x25081582, + 0x00090203, 0x03f7040f, 0x001b00fd, 0x002f0025, 0x21300100, 0x14151632, 0x0607010e, 0x17161507, 0x011e1716, 0x0b821415, 0x23010e2f, 0x32213721, + 0x34013d36, 0x35212326, 0x08098533, 0x02012b4d, 0x7dbd010a, 0x20311f8e, 0x251e1e20, 0x2b1f2025, 0x23221413, 0x17fe385f, 0x3f1801a2, 0xfe3f4848, + 0x423dfce8, 0x03fc3d42, 0x38778dfd, 0x0c0d324f, 0x0d020803, 0x581c1c0d, 0x35363c3f, 0x8b2c2727, 0x3e313e42, 0x393e8842, 0x833e3a2e, 0x0030088f, + 0x06630091, 0x00a9036f, 0x0017000f, 0x2500002b, 0x21302730, 0x23300730, 0x33371236, 0x01171216, 0x07062330, 0x01263330, 0x27001130, 0x13303330, + 0x062f0385, 0x30110702, 0xfe4cea02, 0x2f8a49c7, 0x82ab2fbf, 0xfe340803, 0x3d3c068d, 0x84023cf7, 0x9b17f7fe, 0x94cb04cc, 0x631dce37, 0x028ce3e3, + 0xfd8c8c2e, 0xc9028cd2, 0xfdb9b9b9, 0x014a01f0, 0x8bfe28d4, 0xfe617501, 0xb3fe329a, 0x00218282, 0x3a048203, 0x030007ab, 0x03580361, 0x00ba038c, + 0x02263700, 0x1d303327, 0x041d1702, 0x90031d17, 0xa3149102, 0xf1478211, 0x95719126, 0x011e2686, 0x013e3317, 0x06734137, 0x3d220d86, 0x02893703, + 0x0b8a0420, 0x11a31785, 0x26f12982, 0x86a17191, 0x0206332e, 0x02262307, 0x27012e27, 0x07010e23, 0x052d0d82, 0x3e272622, 0x011e3701, 0x34353233, + 0x29188326, 0x35262726, 0x32333634, 0x21821716, 0x23012e2b, 0x14150622, 0x1e171617, 0x23028501, 0x25061415, 0x23223b82, 0x28822722, 0x34262726, + 0x3e373637, 0x21823c82, 0x2c840720, 0x14011d35, 0x37323316, 0x013d023e, 0x11333523, 0x5e188e23, 0xcc016818, 0x0e043400, 0x0e040c04, 0x0e390e03, + 0x0e390f7b, 0x0d030f03, 0xcc040e03, 0x64012761, 0x7a196218, 0x5c833a0e, 0x5c820c20, 0x0f3c0f3b, 0x6e4bf002, 0x0c2f0b27, 0x77314d1d, 0x2409342a, + 0x2a2b5a0a, 0x63486570, 0x08138224, 0x31401a3c, 0x16163737, 0x09240931, 0x16154430, 0x43027413, 0x484f090c, 0x212b2c34, 0x12121320, 0x5f222212, + 0x38375a3d, 0x4611531e, 0x5050483c, 0x1a1a1e48, 0xdf7c1627, 0x0170b75a, 0xb8cd70be, 0x014d0010, 0x681a2d47, 0x19671919, 0x44100144, 0x44f0fe44, + 0x19220a82, 0x01101a68, 0x4147015b, 0xaf084d47, 0x7042fe70, 0x45130145, 0x1919671a, 0xfe451a67, 0x380b45ed, 0x0b2a0b36, 0x2c6d2c29, 0x07020d2f, + 0x2d2c1502, 0x31615c51, 0x0b290a34, 0x342d2425, 0x0c15162a, 0x0b020802, 0x3f17171f, 0x6e686529, 0x13133e30, 0x4242292a, 0x2a4242b8, 0x2627282a, + 0x39313147, 0x52a4525c, 0x2109085c, 0x573b1e31, 0x00009efe, 0xff520007, 0x05ae0602, 0x001a001a, 0x00380024, 0x00530049, 0x00800078, 0x26220500, + 0x3e373435, 0x06333702, 0x0e070607, 0x3e330701, 0x16323301, 0x27061415, 0x34013d32, 0x011d2223, 0x02260314, 0x12163327, 0x33171617, 0x12363736, + 0x02272a82, 0x11232107, 0x83173221, 0x13072727, 0x27012e23, 0x79483723, 0x01152707, 0x2e272622, 0x2a823401, 0x33363722, 0x17212382, 0x0b584506, + 0x37369808, 0x0e17011e, 0x01110501, 0x01110115, 0x6ba20135, 0x3a0f106d, 0x3b8a314f, 0x1d1e2a2a, 0x110c0925, 0x5f513147, 0x6d6d6a6e, 0x83211f6c, + 0x50136b21, 0x0c0e0e14, 0x4e140e0e, 0x83216914, 0x658f0120, 0x2c560901, 0x803a392b, 0x17560871, 0x26249b78, 0x029b2426, 0x225d3aad, 0x21232321, + 0x3b2e2e22, 0x1f333356, 0x3e12490d, 0x4c4c4435, 0x12423644, 0x200e380f, 0x01e4fe69, 0xfe72fe28, 0x7f84fdd8, 0x6f3c3d3c, 0x292d2260, 0x56282928, + 0x6a312f32, 0x55776a67, 0x82771977, 0x03560802, 0xbf017018, 0xe7fe466f, 0x4f4f4e46, 0x1901464e, 0x41fe6f46, 0x339e0270, 0x604d6034, 0x13e7fe11, + 0x265536c9, 0x262a3e2a, 0x278efede, 0xb6842a2a, 0x142a2a84, 0x4a252514, 0x32392907, 0x53a1525f, 0x083b365e, 0x4e4a0921, 0x0134feb2, 0x92fe8210, + 0xeffecd01, 0x00820082, 0x2000043f, 0xe006ab00, 0x0b006103, 0x4a001500, 0x00007400, 0x30113037, 0x14163221, 0x19012b06, 0x08b74901, 0xce460120, + 0x17162205, 0x46128216, 0x2e2806d0, 0x3e343501, 0x17323302, 0x2c08d146, 0x14150607, 0x1e011f16, 0x0e141501, 0x05cd4602, 0x85022e21, 0x17162124, + 0x230cc646, 0x013e3736, 0x0806c846, 0x200121d1, 0x5d66665d, 0x2e2aadb4, 0x02ad292f, 0x2a7655dd, 0x230d320c, 0x41362b2b, 0x0a3b2e41, 0x62620a27, + 0x36563d21, 0x2837384c, 0x1a0d320d, 0x2039384b, 0x3c373420, 0x3f205d64, 0x04dd025a, 0x3c4c5e0a, 0x2a294a66, 0x5a426c4d, 0x1359237d, 0x61503d51, + 0x1c205061, 0x1916161d, 0xb75ff38a, 0xb96d9e02, 0x01f5fe6d, 0x2e282b6a, 0xb6fd2b29, 0x2f0b343d, 0x17162b0c, 0x2e27313a, 0x0207020c, 0x2c515c12, + 0x1b1b3148, 0x2d0b321a, 0x1729210b, 0x292a2c18, 0x5d130c0b, 0x374d2f50, 0x4031711d, 0x5482572d, 0x2e588154, 0x2f344750, 0x6e5d663b, 0x0809665d, + 0x202f0f10, 0x9bfe5d34, 0x2e000500, 0xd206ab00, 0x12006103, 0x2a001f00, 0x46013400, 0x42250000, 0x3e280768, 0x021e3201, 0x27020e14, 0x2a058342, + 0x011d0622, 0x11051614, 0x41173221, 0x052c0f5e, 0x2327012e, 0x1d17071d, 0x0e1d170f, 0x0b850287, 0x01330582, 0x33112311, 0x1e171216, 0x3d331701, + 0x0f3d2705, 0x870e3d27, 0x2d0b8802, 0x11331104, 0x01022623, 0x23603c33, 0x02822322, 0x607a5f3a, 0x44232344, 0x4f483c61, 0x4f4f904f, 0x0901df01, + 0x572b2c56, 0x259aa356, 0x9a260082, 0x22086302, 0x32440c09, 0x75622807, 0x08228521, 0x880d0823, 0x21762310, 0x4c42ac85, 0x28282d07, 0x84b68454, + 0x5d5a2754, 0x5d52a252, 0x4f330484, 0x34339e02, 0xf1fe67c1, 0x2a256901, 0xb226293d, 0x44155315, 0x4dae4d7f, 0x70fe0228, 0xfe439e02, 0x884043f4, + 0x90012680, 0x014362fd, 0x055f430c, 0x5400a53a, 0xb8035b06, 0x48002f00, 0x5e005400, 0x30250000, 0x23010e23, 0x35022e22, 0x43078a44, 0x0620083e, + 0x2106e349, 0x01823736, 0x23013d35, 0x23112135, 0x16322101, 0x07061415, 0x1507010e, 0x8217021e, 0x0e07300b, 0x37212302, 0x36373233, 0x2734013d, + 0x4d012b26, 0x41080a5d, 0x740e04e5, 0x5c804a60, 0x30303534, 0x71534343, 0x4a122b9c, 0x4d651812, 0x63797963, 0x1b242428, 0xac10101b, 0x01772f01, + 0x69720106, 0x15141b77, 0x3d1a1a34, 0x11131135, 0x2f4f3910, 0xe98768fe, 0x00821e35, 0xe9356a08, 0x373733d2, 0x3de2d233, 0xa26d3850, 0x38a2686a, + 0x631c1c37, 0x0b2b0b59, 0x757f493b, 0x0a7f7588, 0x1d14130b, 0x7541271e, 0x460341fe, 0x422f6276, 0x03141515, 0x2f160107, 0x32352524, 0x25412d2c, + 0x331c1b75, 0x1c1b3429, 0x27303371, 0x00003330, 0x35000500, 0xcb06ab00, 0x1f006103, 0x53004600, 0x66006000, 0x22250000, 0x131b4426, 0x1e37362c, + 0x07061701, 0x2e222106, 0x21822701, 0x3e373623, 0x05064601, 0x072a1482, 0x3e171632, 0x1e323303, 0x58431502, 0x35a80810, 0x12363521, 0x33113337, + 0x25152315, 0x0e231133, 0x834e0101, 0x69492696, 0x21765841, 0x3b48115b, 0x4d59594d, 0x0f124c3d, 0x3d210e3a, 0x38fc013c, 0x10113c57, 0x5523232c, + 0x2d399029, 0x1722212d, 0x04020d16, 0x251c0b01, 0x482a2030, 0x3e211d35, 0x413b3557, 0x42427541, 0xc9fea102, 0x8e2eb52d, 0xbefe5b5b, 0x8e2307db, + 0x54a9b1ac, 0x4d2e5881, 0x3930324b, 0x5d665d6a, 0x09313f6a, 0x29490923, 0x30442429, 0x80493d30, 0x1c533636, 0x28262729, 0x362d2d29, 0x23150101, + 0x371c0f1b, 0x53332f4d, 0x3e58213c, 0x3e3d0d3d, 0x2f080484, 0x4a5d834d, 0xfe4a2a01, 0xd883553a, 0xed3b6301, 0x4b000800, 0xb50608ff, 0x0c001505, + 0x1c001600, 0x5c002800, 0x72006800, 0x00009b00, 0x30113017, 0x21123544, 0xec831101, 0x21113323, 0x45018715, 0x754c06a6, 0x06b44c2d, 0x33132324, + 0x0b850313, 0x33010f2a, 0x37013e25, 0x07010e23, 0x13820282, 0x23270282, 0x1117011e, 0x4c331123, 0x332005af, 0x02821e82, 0x23113329, 0x560901b0, + 0x44582c2c, 0x01300756, 0x86f466ca, 0xe1fe8501, 0xfdfe0301, 0xe7fa1f01, 0x210cdd4b, 0xdd4b0925, 0x2e0c2207, 0x11dd4b0c, 0x09383008, 0x09e10922, + 0xc9640823, 0x04f1ca81, 0x030d030e, 0xb03b040e, 0x0402d002, 0x1f080b01, 0x16571607, 0x08155715, 0x010b081f, 0x78620105, 0x82124812, 0x8209200b, + 0x12540803, 0x62771247, 0x349f02f8, 0xfe67c233, 0x266901f1, 0x25293e29, 0x9f02bcfd, 0x025abbfd, 0x58c45a9f, 0x57035acf, 0x2b0b3539, 0x6e2c2a0b, + 0x020c2f2c, 0x2d140208, 0x605d512c, 0x290a3431, 0x2d25240a, 0x16162a34, 0x0308020b, 0x1717200a, 0x6964293f, 0x1f7c1f0b, 0x40820282, 0xe0016133, + 0x10104111, 0x90d31141, 0x13144c13, 0xb62d134b, 0x2202822d, 0x82134913, 0x63fe290b, 0x9d279f02, 0x16581627, 0x08820282, 0x0061fd2c, 0x00040000, + 0x06ab0029, 0x534703d7, 0x003a2205, 0x1a534746, 0x26114047, 0x1714011d, 0x43323316, 0x25200704, 0x080adc41, 0x20012921, 0x5d66655e, 0x2e29adb3, + 0x03ad292e, 0x2695840f, 0x57416949, 0x0f223b3b, 0x48110f3d, 0x822c4e3b, 0x3c4e3500, 0x3a0e134c, 0x3d3c220f, 0xae012d01, 0x2301bffe, 0x4101ddfe, + 0x34100547, 0x8154a9b1, 0x26272d59, 0x0822084b, 0x35353930, 0x355d665d, 0x07c64235, 0x9e020b2a, 0xc460ba60, 0x03000060, 0x2e825f51, 0xff6d0108, + 0x05930502, 0x0044001a, 0x826d0055, 0x009e2991, 0x00d500ab, 0x250000e3, 0x2c055847, 0x07062223, 0x3627012e, 0x37013e37, 0x051b4436, 0x020e0722, + 0x21098f52, 0x01820706, 0x2e22232a, 0x16372702, 0x1e171617, 0x2109d648, 0x64440135, 0x3e373706, 0x16323302, 0x32270610, 0x013d023e, 0x22022e34, + 0x0607010e, 0xa14f011d, 0x25258205, 0x36343502, 0xf2483537, 0x82322005, 0x05634a42, 0x011e1524, 0x6b821415, 0x200ce147, 0x0bee4713, 0x1e832520, + 0x82230721, 0x23028299, 0x06272622, 0x23232d82, 0x822e2722, 0x8337204f, 0x853320b0, 0x8807204c, 0x087382c9, 0x4b021655, 0x313a3c3e, 0x0c174330, + 0x130f0c30, 0x20213314, 0x3a502f2b, 0x240a0a21, 0x191d1a2f, 0x1613131a, 0x2d1f1f22, 0x472f362c, 0x500f2a36, 0x120e0e0c, 0x3e1c2e11, 0x473f4541, + 0x5c3e9802, 0x0f0f0e3c, 0x3e5c3c0e, 0x7d76767d, 0x0e1e3123, 0x45311e0e, 0x82071f31, 0x0fb30800, 0xf8fd3110, 0x1f3d593b, 0x3e343c4a, 0x6853371e, + 0x0f382929, 0x3d343f0f, 0x3c10104a, 0x423c3a5a, 0x42427942, 0x3b3b373d, 0x033a3a6f, 0x45161652, 0x38902956, 0x2d21225b, 0x0105010d, 0x260e0e0a, + 0x242a2030, 0x101d3524, 0x561f1f11, 0x2c2b3836, 0xec10113c, 0x3a42413b, 0x9941413b, 0x2e072935, 0x0a262c31, 0x15160a2a, 0x090a1d14, 0x28412d17, + 0x28191a20, 0x06040619, 0x14150d0d, 0x482c2539, 0x0e0e191a, 0x172c2114, 0x1111143e, 0x3a0d0c0c, 0x36340734, 0x2f6afe5c, 0x53404058, 0x59404152, + 0xb8feb72f, 0x331c5cb6, 0x2c752c49, 0x1c1c3448, 0x82242434, 0x252e0809, 0x1c1a1a23, 0x341d0603, 0x51432a47, 0x4e130711, 0x2d40263a, 0x2d0c0d19, + 0x3a262020, 0x1107134e, 0x232a4351, 0x571d3424, 0x32133238, 0x04823737, 0x3a013827, 0x2e102e30, 0x08048430, 0x41491f2a, 0x1b556b40, 0x28284e29, + 0x0101365a, 0x1b121214, 0x360f0e0f, 0x2a32304c, 0x221e1d2b, 0x30441312, 0x3c3f9330, 0x3e3e3c0e, 0x3f210482, 0x37008200, 0x00780004, 0x038806b7, + 0x000f0056, 0x00370027, 0x01000040, 0x23301130, 0x352a0384, 0x15302130, 0x35301330, 0x0f8a3330, 0x33201b83, 0x21221782, 0x27822730, 0x3c0c8154, + 0x3307010e, 0xac01012e, 0xfc01c86c, 0x015b5b53, 0x025c5c24, 0x3afb3c2b, 0x2699266f, 0x08038288, 0x05d7fe43, 0xc6104110, 0xf5024010, 0x3e02c2fd, + 0xc2fd6060, 0x58ee0158, 0x5812fe58, 0x0170b5b5, 0xfe7070be, 0x3a027042, 0x3131c531, 0x050000c5, 0xab000800, 0x6103f806, 0x3e003400, 0x50004600, + 0x00005800, 0x329f4b37, 0x0723272a, 0x16331323, 0x23011712, 0x1190a186, 0x55fd4208, 0x310d2a76, 0x2b2b230d, 0x2e414037, 0x0a280a3a, 0x3c226262, + 0x384c3656, 0x320d2738, 0x374b1a0d, 0x341f203a, 0x5d653c36, 0x025a3e21, 0x3bfa3dd0, 0x2689e46e, 0xd7fe2698, 0x10401104, 0x034010c5, 0x20139128, + 0x2c824bac, 0xb5b50b24, 0x00419e02, 0xf7fd210a, 0x0020108e, 0x03340082, 0xab006000, 0x6103a006, 0x2b001500, 0x00004b00, 0x30033025, 0x240eaa46, + 0x21070206, 0x13b14135, 0x87480520, 0x3c012d1d, 0x471270db, 0x0b2b0a12, 0x0b2b0b04, 0x6d250982, 0x01259525, 0x05c7414b, 0x83840126, 0x684a2696, + 0x28146148, 0x379e02b7, 0x9b2737dd, 0x82028227, 0x41c38308, 0x0b2007d6, 0x82174148, 0x00042acb, 0x06b70047, 0x005603b9, 0x22cd820b, 0x46290021, + 0x1b46183f, 0x1101280a, 0x35231123, 0x4d481521, 0x2928074c, 0xad292e2e, 0xad011402, 0x25070246, 0xc86c7b01, 0x0846fc01, 0x45c1200f, 0x022106ea, + 0x0579423e, 0x06207f82, 0x3408934f, 0x0027001e, 0x004e003d, 0x007e0058, 0x27220500, 0x37343526, 0x25018436, 0x020e3330, 0x944f0607, 0x4f172005, + 0x22240895, 0x0114011d, 0x5606944f, 0x06200a12, 0x212d964f, 0x974f010e, 0x7a033f12, 0x1037366b, 0x271d1d0f, 0x3b8a3128, 0x12123a55, 0x47110c0a, + 0x2f305131, 0xd96d6a6e, 0x924f09fe, 0x13042606, 0x12050c05, 0x12944f05, 0x144d1422, 0x2217944f, 0x4f0e3a0e, 0xfd350e95, 0x3c7f4242, 0x38363d3d, + 0x2d232f30, 0x2a2b5052, 0x35312f33, 0x13904f35, 0x1a691a22, 0x924f0282, 0xb62e2211, 0x15924f2e, 0x08200822, 0x3c0d934f, 0x17010600, 0xe90508ff, + 0x0b001505, 0x2d001700, 0x55004b00, 0x00005f00, 0x30113005, 0x22038233, 0x84153021, 0x500b8707, 0x353305c6, 0x3e373634, 0x17163201, 0x0614011e, + 0x27010e07, 0x82373632, 0x013d2b01, 0x27262734, 0x2223012e, 0x01820706, 0x2107bf46, 0xd14f1105, 0x6ccc2412, 0x82631101, 0xfd220803, 0x266a4210, + 0x26292926, 0x6b836a26, 0x2a2a2625, 0x416b2526, 0x16174026, 0x0d0c0c0d, 0x26401716, 0x0b873f28, 0xf4013f22, 0x250c8348, 0xfd9f02f8, 0x048460c1, + 0x2d57032b, 0x55822b2c, 0x2c2b8254, 0x2009832d, 0x2d0883a9, 0x19191b61, 0x692e2525, 0x1925252e, 0x0c8c1b19, 0x9f02562f, 0xfe6eb86e, 0x2c6a01f5, + 0x2c282e28, 0x36f08200, 0xab000a00, 0x6103f606, 0x30001200, 0x44003a00, 0x00004a00, 0x502e2225, 0x494f0640, 0x2fe6af07, 0x21113311, 0x422c0115, + 0x29294c6a, 0x41426a4c, 0xe09b0785, 0x49665d21, 0x22080864, 0x016d1302, 0x572dac10, 0x82545482, 0x582d2d58, 0x5782a882, 0x1a1b602d, 0x2e242519, + 0x25242e6a, 0x8c1b1a19, 0x5055200c, 0xc1280e6d, 0xc2fd9e02, 0x04000060, 0xab2ccb82, 0x6103b606, 0x22001300, 0x66002d00, 0x2306d343, 0x21301530, + 0x11260388, 0x33300130, 0xe8831732, 0x06070124, 0xba52012b, 0x26272405, 0x5811012b, 0x7e51064d, 0x26272407, 0x82012e27, 0x34352202, 0x0d805137, + 0x14150623, 0x06805117, 0x06072408, 0x4a010e07, 0xcafea301, 0xedfe1301, 0x41edc301, 0x294a3434, 0x34344a29, 0x4beded41, 0x4b2e2e5c, 0x45dc0280, + 0x242705de, 0x40372b2a, 0x45171741, 0x112405df, 0x35563d11, 0x0807e045, 0x3a384a2b, 0x361a1a3f, 0x115d653c, 0x59201f10, 0x609e02b7, 0xdcfe60ba, + 0x15159e02, 0x7da87d54, 0x60151554, 0x5b6c5b5e, 0x22fe2f2f, 0x0ad6456b, 0x51171721, 0x2421075a, 0x095b5124, 0x2c2f2908, 0x0b15142a, 0x515c130c, + 0x1b26272f, 0x00001d1c, 0x008f0004, 0x03710663, 0x001500a9, 0x0039002f, 0x25000043, 0x33300130, 0x5a06ec50, 0x06280653, 0x21010702, 0x14151632, + 0x840bd449, 0x212322df, 0x08a25237, 0x2e09064f, 0xedfea201, 0x1659168d, 0x050b360f, 0x820b380f, 0x2f893709, 0xc2012fb9, 0x77687301, 0x1934291b, + 0x1a1f1e19, 0x1110241b, 0xf54e1d1c, 0x3c3c2106, 0x3407f34e, 0x45460363, 0x3645ecfe, 0xc83729c5, 0x14014525, 0xd2fd8c45, 0x05e44e8c, 0x03142a36, + 0x0b0b0107, 0x35491817, 0x202d2c32, 0x37752521, 0x37342933, 0x3409e34e, 0x08ff3201, 0x1405ce05, 0x33002600, 0x8a007800, 0x00009b00, 0x2ec44e05, + 0xd14a0120, 0x012e3241, 0x23112327, 0x1e133311, 0x11331701, 0x21231133, 0x26048235, 0x2607020e, 0x82373627, 0x15300810, 0x57387002, 0x2c10103d, + 0x2a552322, 0x2d2d3990, 0x17172122, 0x0105010c, 0x31251c0a, 0x35472b1f, 0x573d221e, 0x42423a35, 0x02414175, 0x393b3f44, 0x2108884a, 0x884a3413, + 0x0a0b2206, 0x07884a23, 0x1f233c08, 0x362c2c1f, 0x2937472f, 0x0e0d4f0f, 0x2d12110e, 0x45413e1d, 0xb2fd4740, 0x030e3408, 0x0edb7968, 0x67030834, + 0xbc430179, 0x3e341708, 0x55400212, 0xf8a3a556, 0x30304425, 0x4f81493c, 0x47080d28, 0x0f1b2414, 0x2f4d361d, 0x223c5333, 0x0d3d3e59, 0x3c3f3f3c, + 0x013e3d0d, 0x0729353d, 0x262b312e, 0x160a2a0a, 0x091e1414, 0x402d1709, 0x1a1a2028, 0x05061927, 0x140e0c06, 0x2c253815, 0x0e1a1a48, 0x2b21150e, + 0x10153f17, 0x0806594a, 0x5c363335, 0x63104a03, 0x0200fe1b, 0x1b8dfe9e, 0x01021063, 0x015a62fd, 0x433818f5, 0x5c3a0213, 0x5abcfd5d, 0x1b000300, + 0xe506ab00, 0x39006103, 0x7f005c00, 0x49250000, 0x68430d47, 0x27262205, 0x10694326, 0x260aea54, 0x0e070607, 0x47222101, 0x3e23051d, 0x51323301, + 0x36200fd0, 0xa2055b56, 0x10012722, 0x0d2a7754, 0x70490c32, 0x06914305, 0x1131312c, 0x36573c11, 0x2738374c, 0x7349330c, 0x1123080b, 0x5a1f1f10, + 0x95842902, 0x25241313, 0x76574268, 0x0f3d0f22, 0x4e3a4812, 0x3c4e5858, 0x3a0f124c, 0x9e79220f, 0x0b8b491e, 0x2306b443, 0x2c512e2e, 0x230bb543, + 0x2a2d1717, 0x2d061155, 0x1c1b2627, 0x54a9b11d, 0x2c2c4041, 0x3b4e4d2e, 0x0a005105, 0x1a9a5220, 0x05000028, 0xab004f00, 0x2b55b106, 0x40002109, + 0x22342b55, 0x82352101, 0x21280802, 0x07020615, 0x3d540121, 0x23222260, 0x60222223, 0x24446079, 0x3c604424, 0x904e4e48, 0xde014f4f, 0x2b570901, + 0xa357572c, 0x2e058957, 0x41fe6003, 0xcdfe4201, 0xd636a601, 0x544c0136, 0x2a082bd9, 0x015bbcfd, 0x525b59ea, 0x0052bafe, 0xff2e0007, 0x05d20608, + 0x001c0015, 0x00470033, 0x005d0053, 0x00910073, 0x07063700, 0x4c301530, 0x11320503, 0x37363330, 0x33303736, 0x12160706, 0x012e2317, 0xe5451101, + 0x0cf1450a, 0x30272623, 0x06294933, 0xcf823320, 0x01301122, 0x21187d57, 0xf347012e, 0xf736082d, 0x6d6d1a42, 0x5a184804, 0xae417f5a, 0x8316ba32, + 0xa5019227, 0xc0fead01, 0xddfe2301, 0x22014001, 0x1b7c7374, 0x1b031b6d, 0x18781b6c, 0x4afb2da4, 0x655e2001, 0x5d505e65, 0x48172007, 0x23082914, + 0xd01e4b41, 0xacfe9f02, 0x6d6d1e5c, 0xfe4bce4d, 0xe13d21e8, 0x9f02e2fe, 0xc460bb60, 0xcc080160, 0x32c732cb, 0x29270282, 0xfe4ee2fe, 0x476203f6, + 0xfd210df8, 0x2d3748b5, 0x62000021, 0x05358f83, 0x08ffca00, 0x15053606, 0x17000f00, 0x66003300, 0x00009200, 0x11054e05, 0x3007062a, 0x2e052633, + 0x30232701, 0x2605494e, 0x1e133033, 0x49331701, 0x232106e7, 0x10635930, 0x59272621, 0xad5a0a62, 0x0d615905, 0x27022623, 0x21428233, 0x8e531716, + 0x069c5307, 0x37363727, 0x07020633, 0x2f6c8223, 0x06232726, 0x07010e07, 0xfb3df802, 0x98266e3a, 0x3407704e, 0x30c63130, 0x340e1902, 0x79680208, + 0x0e3408db, 0xfc796703, 0x057c445b, 0x35050e48, 0x1e1e3a2e, 0x3d226262, 0x374c3656, 0x49032738, 0x3a384a1a, 0xeb4d201f, 0x015e0807, 0x1a6a1a90, + 0x092e0d6e, 0x08031718, 0x360b0a24, 0x360e790f, 0x0923090a, 0x23233103, 0x1b6e1c6b, 0x10390d7a, 0x19021919, 0x0d3b1019, 0x70b6b6f8, 0x7070bf01, + 0x027041fe, 0x9494943b, 0x0f641b34, 0x9f02fffd, 0x640f8dfe, 0xfd01021b, 0x3d570361, 0x0b2f0c34, 0x3a16162b, 0x0b2e2731, 0x94590506, 0x1b1a3506, + 0x22410232, 0x2c171728, 0x0d0a2a2a, 0x2f515c13, 0x0b1e364d, 0x3b334b83, 0x706f2ddb, 0x2b29981e, 0xdc3c3cdc, 0x2594252b, 0x83a2a1de, 0xea32235f, + 0x0082663f, 0x32ea3f37, 0x18010400, 0xe8050eff, 0x1b000f05, 0x43003a00, 0x00005700, 0x1a7d4125, 0x23302122, 0x2405fc54, 0x013e2307, 0x430a8237, + 0x0e270898, 0x011e0701, 0x43331101, 0x112007c5, 0x20067641, 0x43278233, 0x360806b5, 0x0c320ccd, 0xdb786703, 0x030c310d, 0x3f037968, 0x1b6d1b7f, + 0x1b6b1b02, 0x24912478, 0x80238b23, 0x02196619, 0x781a671a, 0x25248c24, 0x6cd9fb93, 0x01011101, 0x43269a26, 0x23080780, 0x279a2777, 0x185f1781, + 0x9e02fffd, 0x5f188efe, 0xfd000217, 0x2cb22d62, 0x392db22c, 0xdb3639e5, 0x29a72936, 0x363e0282, 0xe63936da, 0x9e022903, 0x0160c2fd, 0x0f014408, + 0x31c73243, 0x4332c731, 0xfe43f2fe, 0x008200f6, 0x36010622, 0xca20f382, 0x142ff382, 0x2a001e00, 0x46003200, 0x00005200, 0x44233005, 0x15220557, + 0xcb820614, 0x195d1720, 0x2327220f, 0x08306507, 0x21070b50, 0x3f4f0302, 0x0302220e, 0x0b704e21, 0x016da33a, 0x42685a21, 0x18611841, 0x165a1679, + 0x2e2aac85, 0x03ac292f, 0x3bfa3db6, 0x340a6642, 0xc5104010, 0x79fd4010, 0x11716e6e, 0x2b0b1148, 0x2c0b040a, 0x2409820b, 0x016f706e, 0x099c4e68, + 0x02f22008, 0x485d6c9e, 0xbc2f145f, 0x2db52d2f, 0x2e292b5b, 0xfed52b28, 0x70b6b696, 0x6f6fbf01, 0x507041fe, 0x012506fd, 0x014f0159, 0x0b554f4f, + 0xfeb1fe24, 0xae5402b1, 0x02003007, 0x6300a900, 0xa9035706, 0x33001d00, 0x41250000, 0x062005d3, 0x41058d51, 0x16210eb6, 0x050d5005, 0x08081949, + 0x30333040, 0x76033015, 0x139027a0, 0x96646404, 0x3335c218, 0x20a017bc, 0x2002207f, 0x17962081, 0x018a33be, 0x1c0aeb2d, 0x03164f41, 0xce419550, + 0xed4163cc, 0x27a7a720, 0x4f533301, 0x34242601, 0x028234d0, 0xdbfe2434, 0x71d7d74f, 0x461e7202, 0x48021754, 0x2bfd47a1, 0x1e100071, 0x348101e7, + 0xff280106, 0x05d80502, 0x000f001a, 0x00430025, 0x00740056, 0x11d3537c, 0x20335b4f, 0x2ba14e01, 0x2807a651, 0xc76d6702, 0x7301fb01, 0x07704f41, + 0x4f6b8221, 0x6b220582, 0x794f2741, 0x27272509, 0x0d161640, 0x162c0082, 0xd0fd4016, 0x294c6b41, 0x416b4c29, 0x26210787, 0x341c8741, 0x3f282641, + 0x0d0c1716, 0x16170c0d, 0x6ced023f, 0x01fc01c8, 0x05cf514c, 0x2db7fd36, 0x54822c2b, 0x2c2c8155, 0x2c2c2d2d, 0x2c82a981, 0x1a612d2b, 0x2106c04e, + 0xc04e2425, 0x25242105, 0x2406cd4e, 0x2d01031a, 0x232e8357, 0x582d2d58, 0x57202c82, 0xc24f2b8a, 0x05f94e09, 0xe8011a22, 0x36083352, 0xfe330007, + 0x05c206fd, 0x000c0009, 0x003c0016, 0x00860061, 0x5aa2009c, 0x8b6119b9, 0x14f4510f, 0x835a0120, 0x010b2106, 0xa51a7f5a, 0x14112c24, 0x35363216, + 0x14113311, 0x4d020e07, 0x11200593, 0x24063e5b, 0x2c570901, 0x08284a2b, 0x3aad022a, 0x2321215e, 0x2f212123, 0x5205b261, 0x0e390c1d, 0x69200e39, + 0x0501c302, 0x1f080b01, 0x07828208, 0x010b081f, 0x78620104, 0x058b5a13, 0x08200729, 0x77124712, 0x82c0fb62, 0x820c2022, 0x8282261d, 0x0c081e08, + 0x22228302, 0x82124912, 0x08082533, 0x48120720, 0x01332282, 0x388e3864, 0x350c0c65, 0x36577f58, 0x36020c0c, 0x5af8f466, 0x20080fc1, 0x2a2b27b1, + 0x2a83b684, 0x2514132b, 0x20084a25, 0x5e323908, 0x5e53a153, 0x21093c36, 0x014f4a08, 0x05925aa8, 0x01f0fe23, 0x17905a10, 0xa1ff0421, 0x02320823, + 0x514efe9f, 0x01514d4d, 0x445efeb2, 0x1f413232, 0x3232411f, 0xfda20144, 0xfd9f0261, 0x00005abb, 0x4d010400, 0xb30502ff, 0x17001a05, 0x8b005100, + 0x9f529d00, 0x09bb5005, 0x5009d54a, 0x414d14aa, 0x0efe4823, 0x20297a4d, 0x10f14e01, 0x46850121, 0x0138095a, 0x2a76544b, 0x240c320c, 0x40362c2a, + 0x3b171742, 0x610a280a, 0x11103131, 0x2306d948, 0x1a0c330c, 0x29065362, 0x105d653b, 0x5a1f2010, 0x32848bfd, 0x2b230d23, 0x2e32862b, 0x31620a27, + 0x3c111131, 0x384c3656, 0x890d2837, 0x643c2132, 0x1f2b3282, 0xe2015b1f, 0x020d310c, 0x82db7968, 0x67032306, 0x9246f279, 0x3d0b3206, 0x0c2e0c34, + 0x3916162b, 0x17182731, 0x0207020b, 0x0d5e4d12, 0x17282225, 0x4d2b2c17, 0x03210b5e, 0x2133b162, 0x3c487e01, 0x00002f0f, 0xcf000200, 0x31065400, + 0x3400b803, 0xd94e4a00, 0x6a262010, 0x805c0566, 0x095e4a08, 0x22074052, 0x4301020e, 0x87080d35, 0x35022e27, 0x6a020211, 0x3f0f3494, 0x36352d0f, + 0x3a525044, 0x7b252549, 0x4c2a3d3d, 0x465e446b, 0x045b3146, 0x47465d21, 0x20212828, 0x747e4b44, 0x01704e29, 0x51c552f9, 0x4b111085, 0x3b3bae76, + 0x4d55214b, 0x0f3a0f40, 0x481b1c36, 0x0e3a313d, 0x3a170607, 0x59386539, 0x2121213e, 0x2a03513e, 0x381c1d32, 0x0d1a1a34, 0x65731810, 0x2544613a, + 0xfcfd5403, 0x6b6c6c6b, 0x11fe0402, 0x5744435c, 0x5816152b, 0xef015c86, 0x2d10db82, 0x393d0773, 0x0608ff0a, 0x001505f6, 0x0018000e, 0x0049002b, + 0x005d0053, 0x01000063, 0x505c3330, 0x5a2b2009, 0x2623067e, 0x4c11012b, 0x6b5c2ce2, 0x33113a14, 0x02152111, 0x6841ed76, 0x29292525, 0x41682525, + 0x5c4beded, 0xfe804b5c, 0x3a985b49, 0x2ba7013c, 0xa77e2a29, 0x2b292a7e, 0x6b5b5f60, 0x21fe5f5b, 0x572df702, 0x82545582, 0x07822d57, 0x0682a920, + 0x191b6129, 0x2f242519, 0x4c242f69, 0x0c8807bf, 0x2e0e825c, 0x9f02c0fd, 0x0061c2fd, 0x00030005, 0x56fd06ab, 0x59200aa7, 0x2034a756, 0x24bd4c05, + 0xc0560820, 0x0dae6b11, 0xc056a420, 0x4c962006, 0x07210574, 0x07744c83, 0x00676120, 0x2bd4560f, 0x4c13a73a, 0x124b1313, 0x1101effe, 0x13124a12, + 0x63fe134a, 0x9c279e02, 0x16591627, 0x08820282, 0x0062fd22, 0x03310082, 0xab002200, 0x6103de06, 0x33001b00, 0x00006c00, 0x1c415313, 0x4c15e756, + 0x2e211411, 0x10525901, 0x200fbc5c, 0x054d53d7, 0x320cdb28, 0x7968030c, 0xbc564001, 0x5c4c200a, 0x02212fb8, 0x0a214b2a, 0x01021824, 0xa14b62fd, + 0x080f6e09, 0x0827b55c, 0x07000025, 0x02ff7c01, 0x1a058405, 0x5b003700, 0x75006800, 0xa9009c00, 0x0000d500, 0x0e213001, 0x36330701, 0x66023e37, + 0x012e0788, 0x22230607, 0x27012e27, 0x16372726, 0x17821e17, 0x22051579, 0x82070622, 0x013e2314, 0x5e662137, 0x07bf663a, 0x220d246b, 0x6b33011e, + 0x21211724, 0x60718235, 0x26240529, 0x020e2223, 0x3c828383, 0x16320223, 0x79018217, 0xc28206c9, 0x03213708, 0x03d7fe26, 0x0b06020c, 0x2b200d0d, + 0x364b2b1c, 0x3d10101f, 0x2d392c2d, 0x14342323, 0x0c4f1013, 0x2b230d0e, 0x41413b1c, 0x12342b3b, 0x040f3c0f, 0x7c010411, 0x5d666901, 0x3b3b3724, + 0x583717fe, 0x2c11103c, 0x29552323, 0x2d2e3890, 0x17162221, 0x7d6b010c, 0x221e2109, 0x08067d6b, 0x03414159, 0x2339fe50, 0x1b33248f, 0x1c323a1b, + 0x06141f29, 0x0b103f10, 0x4c381212, 0x1c1b5066, 0x2d190f0e, 0x1a201e1d, 0x52011a69, 0x9e274e01, 0x10101428, 0x361c0c17, 0x2a32314e, 0x10113d2a, + 0x16210a0a, 0x143e1815, 0x0d191110, 0x3a0b3a41, 0x02142141, 0xf93e0209, 0x6657fd3e, 0x0121374e, 0x0be66bd1, 0x2827262d, 0x352d2e28, 0x23140101, + 0x6b1d101b, 0x3f0812e6, 0x207f2068, 0x2e2a2a2e, 0x1138310c, 0x0616271c, 0x1d200619, 0x1e1b2e1d, 0x25241b1a, 0x3e45282b, 0x171c1c1c, 0x0000175a, + 0x7a010600, 0x860502ff, 0x28001a05, 0x6c003600, 0x9f009200, 0x0000ca00, 0x680c4068, 0x2522263f, 0x83420621, 0x013e2418, 0x5f031e37, 0x38690634, + 0x21132207, 0x14a75e25, 0x22196b6d, 0x61363521, 0x45420688, 0x6852201e, 0x39350545, 0x2c22225a, 0x0a04030d, 0x30260e0e, 0x24242b1f, 0x11111e34, + 0x0544681e, 0x103d4508, 0x413bec10, 0x423a3b41, 0xfe340342, 0x070c05d6, 0x210c0d0b, 0x4a2b1d2a, 0x0f101f36, 0x392c2d3e, 0x3523222d, 0x0e101413, + 0x1b0d0d34, 0x3c1c2b22, 0x2b3c4040, 0x3c0e1234, 0x0112070f, 0x3810fd7c, 0x11103c58, 0x552c2382, 0x2d389029, 0x1622212e, 0x03030c17, 0x5e07c76d, + 0x412205cd, 0x49427541, 0x6b6b2505, 0x3b1c1b33, 0x21054842, 0x4842400f, 0x1b1c2e07, 0x2c190f0e, 0x1b201d1e, 0x52011a69, 0x2d3068b3, 0xa449f222, + 0x24147542, 0x140a2a0a, 0x0b764221, 0x01017423, 0x2d3b42b9, 0x42605f21, 0x0038243a, 0xff390006, 0x05c70608, 0x000f0015, 0x0028001c, 0x00570032, + 0x0500007a, 0x3407d158, 0x33301330, 0x03171216, 0x23302726, 0x07300706, 0x012e3330, 0x15536e01, 0x750f9953, 0x73531325, 0x17162514, 0x3317011e, + 0x3c058844, 0x1e042311, 0xe206240a, 0x640a2406, 0x872182c9, 0x0b0af121, 0x3c0a0b0c, 0xfc290bb1, 0x0d306e9b, 0xad023008, 0x21215d3b, 0x21212424, + 0x553b2e2f, 0x0d1f3433, 0x343f114a, 0x444c4c44, 0x0e124335, 0x6a1f0e38, 0x0501c402, 0x21090c01, 0x03828204, 0x820c0922, 0x78623e0c, 0x21093736, + 0x17180805, 0x77155205, 0x7f23f862, 0x237f1818, 0xfe709f02, 0xe0017041, 0x24008231, 0x018c24d3, 0x1d4e53a5, 0x53290721, 0x163f124d, 0xf0fe0952, + 0x51081001, 0x124b1416, 0x9f0263fe, 0x5d197576, 0x0b42420e, 0x61fd2fb1, 0x41070000, 0x162c0867, 0x2a002000, 0x3f003500, 0x87006400, 0x2308077f, + 0x32150706, 0x20061c6c, 0x05a5710e, 0x013d3623, 0x0ca37134, 0xff730120, 0x05785613, 0x411e9b76, 0x22082275, 0x10019802, 0x3437504e, 0x2218171d, + 0x2816090a, 0xd5fe2239, 0x2625a766, 0x97a72526, 0x21252521, 0x413bfd97, 0x013f507d, 0x415459a7, 0x0b0c0548, 0x1c1c280b, 0x33472b21, 0x2b275a1c, + 0x57272c2c, 0x292b2824, 0x411d0123, 0x00345185, 0x27010500, 0xd90502ff, 0x2a001a05, 0x3c003400, 0x7d007100, 0x59731482, 0x023e2409, 0x76163233, + 0xe76a1971, 0x0e7b5410, 0x65085e65, 0x7c5d0d5d, 0x0a0c5b0d, 0x76f40221, 0x02261f86, 0x3afb3c73, 0xed6be56f, 0x11402607, 0xfd4010c6, 0x12ea76b6, + 0x26135d6b, 0x3f215e64, 0x542e015a, 0x8c2009d3, 0x21079676, 0x96762d59, 0x08652e08, 0x2f101008, 0xfe5d341f, 0x02b6b69b, 0x0b345b9e, 0x51544e20, + 0x0b2f220a, 0x0ef37602, 0x25098254, 0x4d2f515c, 0xfd6f1d37, 0x00003d09, 0xffce0102, 0x04320516, 0x0021000e, 0x0500003b, 0x27222330, 0x35303526, + 0x2627012e, 0xb0420882, 0x17322f05, 0x011e1716, 0x07021415, 0x32273315, 0x9874013e, 0x022e2205, 0x08436f23, 0x021e2808, 0x558e7004, 0x88552728, + 0x191b2f2f, 0x5039383e, 0x5050c450, 0xbb3e3839, 0x3af09aa0, 0x13124460, 0x60441213, 0x855f3b3a, 0xea5f3109, 0x4c492b2c, 0x41414d0b, 0x7f735c5b, + 0x224142c2, 0x41340082, 0xe17fc242, 0x671cfcfe, 0x374c28f2, 0x459e4537, 0x284c3737, 0x00290a8a, 0x00130003, 0x03ed06b7, 0x22078256, 0x6751003d, + 0x03200561, 0x4b0f5f61, 0x03220694, 0x53580330, 0x23302307, 0x2b6c1130, 0x2311230f, 0x01822130, 0x01303522, 0x23080584, 0x06153021, 0x30210702, + 0x1772cfe3, 0x170d175d, 0x2270175b, 0x0903228a, 0x0c010501, 0x82081e08, 0x071f0882, 0x36059744, 0x07124912, 0x08080820, 0x4812081f, 0x02627712, + 0x0141fe9a, 0x62cefe41, 0xb7320676, 0x9b010301, 0x3131c832, 0xfe4432c8, 0xfdfe45ee, 0x874b9d01, 0x097d6221, 0x04000028, 0xab004c00, 0xe382b406, + 0x1e001426, 0x5f002800, 0xdb5de583, 0x07a6421d, 0x4a011121, 0xb9203299, 0x2106e45d, 0xe45d6019, 0x2a2e2408, 0x681302ac, 0x03270756, 0x03d7fe58, + 0x4a07030c, 0x13212324, 0x06244a0e, 0xec5db720, 0x2e28270e, 0xfed52b29, 0x5a680296, 0x28402a06, 0x1014279e, 0x1d0c1710, 0x0fc54935, 0x49101121, + 0x00200ec5, 0x04300082, 0x02ff7301, 0x1a058d05, 0x7d004c00, 0xe000b400, 0x20171772, 0x06e24a17, 0x84060721, 0x1e152201, 0x05f24a01, 0x06220d84, + 0x11572223, 0x37272105, 0x22721782, 0x0a324b0c, 0x6b262721, 0x364b0659, 0x37012306, 0x55863236, 0x0e235485, 0x41210701, 0x01203368, 0x5149648a, + 0x5002211d, 0x08119267, 0x1d282862, 0x0a11101d, 0x1812120a, 0x331d1a17, 0x0b0b1313, 0x1f201111, 0x2f362c2c, 0x1c1b2423, 0x4f0f1514, 0x12111c0d, + 0x423d1d2d, 0x03474045, 0x2439fe80, 0x1c33238f, 0x321e1d1b, 0x0f0f2a1b, 0x10050a0b, 0x110b0f40, 0x26263713, 0x1c1b5166, 0x16190e0e, 0x201e1d16, + 0x011b691a, 0xfea7fd52, 0x030b03d6, 0x35089349, 0x100f1e37, 0x392d2c3e, 0x3423222d, 0x4e0f1414, 0x220e0d0d, 0x92491b2c, 0x3b0f2106, 0x2405074c, + 0x38fe5002, 0x07b34b24, 0x4b1e2a21, 0x4b2008b3, 0x18205e85, 0x7208b34b, 0x27081035, 0x16170b0c, 0x20291f21, 0x1414191a, 0x04060d0c, 0x14151a06, + 0x2c251c1d, 0x191a2424, 0x0a0a0e0e, 0x16151111, 0x22143e17, 0x20093d72, 0x09614b75, 0x111c1c26, 0x13140e0e, 0x2107644b, 0x654b0e0d, 0x44292305, + 0x664b1f1f, 0x46052105, 0x202b224c, 0x28bb4b62, 0x274f0420, 0x00562806, 0x002e000f, 0x5e8f0337, 0x3f6f135b, 0x26052624, 0x1d332702, 0x35461801, + 0x8a451822, 0xa638c915, 0x1826a65f, 0x20194a46, 0x3d461815, 0x37012215, 0x7745183d, 0x18149414, 0x9111b345, 0xa638a611, 0x215fcc26, 0x46183335, + 0x0128103f, 0x01b2663a, 0x6b0601c9, 0x2105f670, 0xf6702728, 0xeb012312, 0x46185f18, 0x012d4f03, 0x0c040e03, 0x0e040e04, 0x0e7c0e38, 0x18078239, + 0x28520446, 0x62196401, 0x390f7a18, 0x3a6b820f, 0x030e040b, 0x020f3d0f, 0x02bbfdfc, 0xfd595945, 0x7f4242b0, 0x373c3d3c, 0x71302f38, 0x3021077a, + 0x0a7a7134, 0x45104a20, 0x2f5503da, 0x05000000, 0xab004700, 0x6103b906, 0x2f001e00, 0x58280b82, 0x00007000, 0x07010e01, 0x7a0ad76c, 0x332005c6, + 0xd96c1482, 0x243e7b06, 0x25a40520, 0x0f100139, 0x6c6c103d, 0x10401004, 0x7e1e791e, 0x2b289f28, 0x22832bad, 0x7a630288, 0x062718d2, 0x100f0706, + 0x9e520231, 0x01220820, 0x124612f0, 0xfe9e02cf, 0x145115ac, 0x2f249125, 0xfe412fbc, 0xd13441fe, 0x592ef0fe, 0x52534040, 0x797a4140, 0x341b3506, + 0x2c762b49, 0x1b1b3448, 0x2c242434, 0x23252b76, 0x5c1b1a1b, 0x002224a3, 0x934e0600, 0x002f3a08, 0x00630042, 0x0098008d, 0x050000a0, 0x35302130, + 0x37363730, 0x35303536, 0x0adb4934, 0x3e37362a, 0x011e3201, 0x14151617, 0x2505814a, 0x07010e07, 0x2a560521, 0x34352105, 0x37211d82, 0x06937c36, + 0x554d3d83, 0x27262105, 0x22200182, 0xdd752f85, 0x17162305, 0x42180116, 0xf74e0851, 0x79122022, 0x03240cf2, 0xd639fe45, 0x55091153, 0x1c2c055a, + 0x50664c1c, 0x0d0f0e37, 0x1d17160c, 0x26061353, 0x2e3f4901, 0x820e3c2e, 0x3c230800, 0x7c3f2e2e, 0x227c7676, 0x0f101819, 0x07060607, 0x1918100f, + 0x0f191845, 0x07070610, 0x190f1006, 0x4f89fe18, 0x7426200e, 0x6e3afb3d, 0x0f4f7272, 0x68f22c0c, 0x292a2ebf, 0x38310c2f, 0x49261d11, 0x172a06c3, + 0x351e1b17, 0x282b2524, 0xc3492223, 0x17672207, 0x072e7c18, 0xb7181733, 0x5cb6b8fe, 0x1a1a0e0e, 0x752d2423, 0x1a24242c, 0x29a1821a, 0x231b1a0e, + 0x2d752c24, 0x0e832324, 0x4f770321, 0x01231f2d, 0x4f4f014f, 0x20080a2f, 0x06000000, 0x68fe0b01, 0x0f05f505, 0x39001f00, 0x4b004100, 0x6f005500, + 0x30010000, 0x3d262223, 0x14fd4e01, 0xfd4e0620, 0x07f6671a, 0x87770120, 0x18052012, 0x080d6541, 0x1123112e, 0x36331333, 0x23113337, 0x395fe502, + 0x1f5b3835, 0x2a121120, 0x35362526, 0x26353682, 0x6b7c2926, 0x4027a167, 0x0c0c0d2d, 0x27402d0d, 0x0c2d0982, 0x2d0c0d0d, 0x6ded0240, 0xfbfb01c7, + 0x0cff793b, 0x0515042b, 0x19092309, 0x62181862, 0x39088219, 0xb4806705, 0x7b595a06, 0x3a68fe67, 0x34073231, 0x3e3d2b2b, 0x2c81554c, 0x0082172b, + 0x812c2b3d, 0x13ad9655, 0x331aa245, 0x6a2d2525, 0x3324252e, 0x24331b1b, 0x2d6a2e25, 0x67332525, 0x012108ec, 0x09e27624, 0x282e292d, 0x49123e2b, + 0x2db32c12, 0x822cb32d, 0xfffd3908, 0xabfe9e02, 0x62fdaaab, 0x02000000, 0x54008500, 0xb8037b06, 0x4d003400, 0x41357f64, 0x3d08131a, 0x23113313, + 0x9469b701, 0x103e1035, 0x4435362c, 0x49395151, 0x3d7a2526, 0x6c4c2a3e, 0x45465f43, 0x21035b31, 0x2848465d, 0x44212027, 0x29757e4a, 0xfa03714e, + 0x0b2c0b06, 0x24238113, 0x08821381, 0xa1820627, 0x9ae007e1, 0x2d8c6482, 0x178f022a, 0xec22175a, 0x22ec4040, 0xfd380882, 0xfe46037f, 0xfcaa0156, + 0x030000ba, 0x6300b500, 0xa9034b06, 0x15000b00, 0x2119ad7b, 0xd5760109, 0x01b63c11, 0x7f7f7468, 0x34d8e174, 0xd8343939, 0xedfe5a03, 0x1758178c, + 0x050f370a, 0x820a380f, 0x2e883409, 0x03632eba, 0x89e68946, 0xc501b2fe, 0x323a3236, 0x7631fd36, 0x252205a1, 0xa17637c8, 0x8200200a, 0x071b5000, + 0xbf456120, 0x457e2006, 0xce4e46bd, 0x15210834, 0x6d0f3d10, 0x4010036d, 0x1e781f10, 0x27a0287f, 0x832bac2b, 0x63028722, 0x0f3b5c3f, 0x3b0f0e0e, + 0x0543445c, 0x0d1f3128, 0x45311f0d, 0x3b441f31, 0x03312205, 0x3250501a, 0x213edf45, 0x7150ef01, 0x01053a2c, 0x0502ff5b, 0x001a05a5, 0x003e0034, + 0x00810048, 0x050000a2, 0x36272622, 0x079f7937, 0x25103f54, 0x012e0702, 0x3f542223, 0x654b180f, 0x69458914, 0x59762901, 0x0eb1570d, 0x0e17162a, + 0x55500201, 0x26252a76, 0x2314c77f, 0x091e1a0b, 0x210dc87f, 0x45442d01, 0xacb33505, 0x2a2e2e2a, 0x542cfeac, 0x25262b76, 0x372b2a24, 0x16184240, + 0x21114069, 0x4069190d, 0x0574760e, 0x24252108, 0x75584169, 0x112e2d22, 0x584e3b48, 0x4b3d4e58, 0x224d0a13, 0x343dfd79, 0x162b2323, 0x27313916, + 0x230e8c54, 0x081b160a, 0x18128d54, 0x2507bf4b, 0x2b282e29, 0x3d891801, 0x08265069, 0x55a9b12a, 0x2c2d4040, 0x194b4d2d, 0x6a393019, 0x695d665d, + 0x2f06313e, 0x00005249, 0x2e000400, 0xd206b700, 0x0f005603, 0x36002700, 0x15e74118, 0x2015d55e, 0x182d6113, 0xc86c6225, 0x5570fc01, 0x832b09ad, + 0x256940ed, 0x25282825, 0x60406925, 0x812005f6, 0x09e84118, 0xbb700220, 0x9e022705, 0x7d2a2a2a, 0x05827da8, 0x5b5e6027, 0xfe5e5b6c, 0x2d9e8222, + 0x4b010600, 0xb50502ff, 0x15001a05, 0xab821e00, 0x6e004930, 0x0000d801, 0x30353005, 0x36353021, 0x3d743712, 0x30152e05, 0x30153023, 0x30333025, + 0x0e233011, 0x07145e01, 0x44183e20, 0x012008d3, 0x23073d48, 0x0622012e, 0x2407197e, 0x2201021e, 0x08006a26, 0x2206816d, 0x181d0607, 0x2b0e8146, + 0x23113335, 0x0f15010f, 0x0d0f150e, 0x08820584, 0x05270b91, 0x3727012e, 0x840b3f35, 0x840a2002, 0x200b8805, 0x3c179306, 0x33113307, 0xfea10215, + 0x2db52dc9, 0xfe5c5c8e, 0x2307dbbf, 0x3eaf028e, 0x0f0e3c5c, 0xbd44181d, 0x82072009, 0x0f0f2600, 0x10314531, 0x3909820f, 0xfd311f07, 0x279683ee, + 0x58416849, 0x0f213b3b, 0x4811103c, 0x2d2c4d3b, 0x49182c2d, 0x2f220ad8, 0x4c1808bc, 0x2eeb2e3b, 0x0b2c0b22, 0x02206ed2, 0x012453d2, 0xf2a3a601, + 0x0ea54a18, 0x2fe2fe29, 0x52414058, 0x18588351, 0x3b07aa45, 0x752c2524, 0x1a24252b, 0x1a1c1c1a, 0x2b25241a, 0x24252c75, 0x06031c33, 0x8055a9b1, + 0x0f614818, 0x313e342c, 0x49092309, 0x5a0b2929, 0xb1d4f501, 0x0a2254d0, 0x53d00a28, 0xb6415089, 0x235f8655, 0x005abcfd, 0x35080082, 0x025c0002, + 0x05a4065f, 0x00030071, 0x1300001b, 0x01211521, 0x35173727, 0x17371533, 0x23153307, 0x15270717, 0x27073523, 0x5c352337, 0xb8f94806, 0x2a8cc204, + 0x03823c8c, 0x87c6c621, 0xa5022408, 0x8c220246, 0x261a8411, 0x00010000, 0x8225ff5c, 0x00d6225b, 0x08598214, 0x012c3238, 0x1135053e, 0x2c032e34, + 0x9d5c2302, 0x05013401, 0x7fadc7f6, 0x6f3c2e5b, 0xf8feccaa, 0xa9fee5fe, 0x33a502ad, 0x837e7256, 0x0e47667a, 0x5b154ff9, 0x8691907d, 0x478d3e68, + 0x2c220124, 0x47832e01, 0x47823e20, 0xa4063327, 0xfeccfe9d, 0x254889fb, 0x1b010801, 0x48965701, 0x0532ef82, 0x38ff2a00, 0x9405d606, 0x40000400, + 0x4b004400, 0x9b820801, 0x0721302b, 0x0e220421, 0x040e0703, 0x06eb5707, 0x3634352e, 0x1e173233, 0x033e3204, 0x37043e37, 0x16240c83, 0x14151617, + 0x2e391e83, 0x15210303, 0x23150121, 0x35232505, 0x023e3425, 0x17163233, 0x031e3236, 0x21268217, 0x05830614, 0x83323621, 0x3e172505, 0x033e3701, + 0x36204782, 0x28834084, 0x31011e22, 0x17840c86, 0x1e323323, 0x85298302, 0x1415215b, 0x26296185, 0x35012e27, 0x022e3534, 0x2e6e8327, 0x2223010e, + 0x07010e27, 0x06272206, 0x86030e07, 0x2006830c, 0x840e8202, 0x862683b0, 0x022e2103, 0x3b08ba82, 0x010e3427, 0x27010e35, 0x17262726, 0x27343516, + 0x37343706, 0x26222336, 0x46e4015c, 0xe00462fe, 0x4f506154, 0x15070f2f, 0x2c5b403c, 0xa7934b52, 0x1d08354d, 0x0f0f1b15, 0x61504f2f, 0xd4081b9a, + 0xfee401dd, 0x9610fe62, 0x00010001, 0x047afc96, 0x131a240e, 0x1f0e0b1b, 0x02080c17, 0x151b1102, 0x07060211, 0x072e3804, 0x0c0e1010, 0x03081002, + 0x0c130c06, 0x0b06090a, 0x0d133953, 0x11282c04, 0x411e180c, 0x151d0c2f, 0x1a0e040d, 0x14201324, 0x140c1e27, 0x09090a11, 0x21492f09, 0x1a13012c, + 0x04180f12, 0x210f0610, 0x100f1425, 0x171c192a, 0x09122410, 0x2e0e0d21, 0x133b1a13, 0x06070718, 0x2909380d, 0x1a141b0e, 0x2f340d11, 0x10080712, + 0x0b0a1119, 0x10101016, 0x180f171c, 0x221a0c22, 0x0d161108, 0x17160103, 0x1a032706, 0x10080102, 0x02010301, 0x1a120708, 0xbb6eb902, 0x3c52422f, + 0x4a1d0917, 0x2d184b42, 0x0d4d4ea7, 0x161d150f, 0x42523c17, 0x0818972f, 0x6e580190, 0xf0fa2501, 0x0da0faf0, 0x151a291d, 0x110e071b, 0x170e111d, + 0x020b3a26, 0x05070d0c, 0x09103705, 0x0409100b, 0x0d670c08, 0x1f274104, 0x1860373b, 0x1d11070e, 0x09261712, 0x01100f15, 0x38044352, 0x01051204, + 0x17110834, 0x122d0c10, 0x0804030b, 0x070b423e, 0x24111d2f, 0x1110450b, 0x0f331c14, 0x5d090e1d, 0x180c4d0a, 0x2d410c18, 0x21161702, 0x11050817, + 0x26141b0c, 0x220e0522, 0x07170319, 0x030c0c02, 0x11020502, 0x02020204, 0x03820104, 0x1a070224, 0xb3430017, 0x49250807, 0x0f000b00, 0x15010000, + 0x15231533, 0x35233523, 0x21013533, 0x98052115, 0xb464b4b4, 0x0628fbb4, 0x05b8f948, 0x380b8349, 0x5cfdb464, 0x00050046, 0x063eff53, 0x00a7058c, + 0x00280006, 0x0030002c, 0x293d8237, 0x010b3311, 0x23271133, 0x01832707, 0x05840320, 0x35020b26, 0x1737021b, 0x13200182, 0x17290584, 0x15332133, + 0x3335022b, 0x082d8537, 0xa0a1042e, 0x36a0cece, 0x3f334ac9, 0x3a3f2f30, 0x3119373a, 0x27373610, 0x10363727, 0x3a371931, 0x302f3f3a, 0xc94a333f, + 0x8a8af201, 0x887373bc, 0x47082c83, 0xb0010802, 0xdefe2201, 0xd63a50fe, 0xcd72a93e, 0x54fcfee3, 0x92df6a8b, 0x0401d4fe, 0x0189eb01, 0xfe0401eb, + 0x6adfb7af, 0xfcfe548b, 0xa972cde3, 0x6161d63e, 0xfe50fe3a, 0x012201de, 0x030000b0, 0x37ff5c00, 0xe005a406, 0x0d22bb82, 0xb7833b00, 0x01092326, + 0x11031123, 0x01220684, 0xbf85012f, 0x0f200585, 0x0f220f84, 0xc4821f02, 0x1f013f23, 0x86c48501, 0x34032805, 0x011401c8, 0x8598c814, 0xd8023d06, + 0x604e7238, 0x5a60484b, 0x4b27545a, 0x4b455418, 0x5a364b39, 0x25253915, 0x365a1539, 0x45310c82, 0x274b1854, 0x605a5a54, 0x4e604b48, 0xfe5d0172, + 0x229484fc, 0x825d0204, 0x08d183b9, 0xc8fefc30, 0x4204381b, 0x6659512d, 0x582a3721, 0x5a708448, 0x523b4b64, 0x656c438f, 0x3b528f4a, 0x705a644b, + 0x2a584884, 0x59662137, 0x04422d51, 0x00820038, 0x4b00023b, 0xb50622ff, 0x0900d005, 0x00002a00, 0x012d1505, 0x0d352115, 0x13013501, 0x20ad8b17, + 0x24d98d3f, 0x01030703, 0x227e836d, 0x82012604, 0xfa26087a, 0x6d6e4ed3, 0x6d32621f, 0x5e7d7575, 0x94667d61, 0x66944949, 0x7d5e617d, 0x326d7575, + 0x6e6d1f62, 0xcea03e4e, 0x0383a0ce, 0x54033308, 0xeccd7efe, 0x6e54b073, 0xa1b2cc42, 0x99318459, 0x31993536, 0xb2a15984, 0x546e42cc, 0x090190b0, + 0x007efecd, 0x5e000200, 0xa2066aff, 0x0b007b05, 0x5b421f00, 0x2703300e, 0x020b2703, 0x1b371127, 0x37133702, 0x42152113, 0xfe210669, 0x877487c7, + 0xa7022186, 0x33077742, 0x9dfef0fc, 0xb2f7fe62, 0x6501befe, 0x058467fe, 0x67fe8407, 0xbe2f0982, 0x62f7feb2, 0x00749dfe, 0xff530003, 0x42af063e, + 0x2f2c0693, 0x21130000, 0x35010d35, 0x21150321, 0x42050741, 0x1b220580, 0x79823502, 0x2109a042, 0x26850307, 0x5442cb20, 0x03552207, 0x068c4245, + 0x42363b21, 0x36210b8c, 0x068c423b, 0x4b429620, 0x03042807, 0xa0cecea0, 0x4261fcfe, 0xfe212686, 0x202f839b, 0x28008200, 0xffc80004, 0x0538065e, + 0x2bb582a6, 0x001b000f, 0x2500001f, 0x03152135, 0x8b0b7f43, 0x23112e0b, 0x016c0411, 0xb4b4b4cc, 0xfcb4b464, 0x270684c0, 0xa05a3102, 0x9c046464, + 0x21059543, 0x07855cfe, 0xf90e0225, 0x824806b8, 0x01002162, 0x21058f47, 0x6382a502, 0x2113002c, 0x065c2115, 0x02b8f948, 0x1c8246a5, 0x5601053a, + 0xaa0508ff, 0x0f001505, 0x45003900, 0x8f006500, 0x35050000, 0x06231133, 0x2a05715e, 0x15331133, 0x0e071401, 0x55230702, 0x2e21058b, 0x211a8201, + 0x5018020e, 0x04201252, 0x0a865018, 0x6308e84b, 0x36280d14, 0x17011e37, 0x25060706, 0x210fce67, 0x136a2726, 0x07063210, 0x9c011521, 0x376507bc, + 0x3d0b2c0b, 0x02a3a56e, 0x05da671c, 0x215b382c, 0x020d2d22, 0x0f0a0104, 0x5018250e, 0xfe321220, 0x424275d9, 0x56fe4175, 0x49269584, 0x76574169, + 0x104e5b22, 0xaa521806, 0x025f0808, 0xcf39fee2, 0x1b1c3307, 0x2a1b323b, 0x2c05151e, 0x13120a33, 0x50664c37, 0x0e0f1b1c, 0x1e1d2c19, 0x014f4f20, + 0x015bf852, 0x0a3b6bf5, 0x77430a27, 0x015bbcfd, 0x414049a5, 0x2a1b556b, 0x5929284d, 0x14010136, 0x101a1212, 0x4c370e0f, 0x2a2b3130, 0x12211e1e, + 0x30304413, 0x0e3c3e92, 0x823f3f3c, 0xca013104, 0x8154a9b2, 0x4b4d2d58, 0x6a392f31, 0x6a5d655d, 0x2f088b4a, 0x2f07b868, 0x0c2e2a29, 0x1d103831, + 0x14111627, 0x390d9f69, 0x441c1d1b, 0x00005c43, 0x2e010400, 0xc70508ff, 0x13001505, 0x4d003500, 0x03798600, 0x30112313, 0xb5523001, 0x33302310, + 0x03861330, 0x23301122, 0x514e2182, 0x37276d15, 0x612e0121, 0xc437088e, 0x09230905, 0x18196218, 0x24091862, 0x81680508, 0x7bb406b3, 0x6d2bfc68, + 0xf8323b3a, 0xbb609f02, 0x02dcfe60, 0x12481201, 0x2c2cb32d, 0x08822db3, 0x02fffd2b, 0x01abfe9f, 0x0361fd55, 0x22208462, 0x180b61c3, 0x200ac441, + 0x05ec7817, 0x515c4508, 0x3124242c, 0x321b1a1b, 0x220b2d0b, 0x2a2c2e28, 0x0d0a1515, 0x2f515c13, 0x1b1b2726, 0x0001001e, 0x06d3006b, 0x00310495, + 0x01000044, 0x14151632, 0x07020e07, 0x2e222306, 0x27262705, 0x07222326, 0x010e0706, 0x45081083, 0x37343526, 0x063e3736, 0x051e3233, 0x16171617, + 0x3e373233, 0x3e013f01, 0x1e4c0602, 0x240b072a, 0x6e723266, 0x4442522a, 0x131b362f, 0x5d702149, 0x59464330, 0x110d1012, 0x122a1e14, 0x1c140a04, + 0x40433038, 0x218b264d, 0x48323108, 0x1615572a, 0x021f0b03, 0x111e2aca, 0x9341160f, 0x2a1e7232, 0x2e553947, 0xa8318424, 0x1e984643, 0x2a0a0815, + 0x06141c1e, 0x522e2211, 0x1d2a443a, 0x48281d89, 0x28287c2a, 0x00130e07, 0x033e0082, 0x49ff1e00, 0xcc05ce06, 0x2b000b00, 0x00004e00, 0x23061404, + 0x34262221, 0x32213336, 0xb8832225, 0x013e0127, 0x01173233, 0x82038221, 0x29de82e2, 0x22210127, 0x0e010927, 0xf3841301, 0xe6820620, 0x2f211582, + 0x252c8201, 0x1f323336, 0x08850301, 0x82131721, 0x023808e4, 0xfe151d0b, 0x1d1d159f, 0x15610115, 0x1d158afe, 0x05610102, 0x0f19111a, 0x8c018201, + 0x8d010f1c, 0x1c151d07, 0xfe82fe0f, 0xfe0f1977, 0x05bcfeaa, 0x0f0a9a1a, 0x0301011a, 0x54085482, 0x0fd20505, 0x05050a0f, 0x0f03a38b, 0xa4080e0a, + 0x700e0111, 0x2a1d1d2a, 0x151d5d1d, 0xa6040707, 0xfd151410, 0x80fd18ef, 0x1d150e0c, 0x15680218, 0xbbfbd401, 0x4a051410, 0xe1010a0f, 0x04070403, + 0x075b0204, 0x020f0a10, 0x0615013d, 0x0c0f0a07, 0x0995e9fe, 0x20f3840d, 0x20f38446, 0x20f38414, 0x20f3ad50, 0x22f38301, 0x8225010f, 0x151624e9, + 0x4b050714, 0x2f250673, 0x26233001, 0x26f88227, 0x013f3637, 0x829c0336, 0x846f20f5, 0x159123f5, 0xf5a2f9fc, 0x0a52033e, 0x0148040f, 0x0a04042d, + 0xc7fe110f, 0x0a0f0d89, 0x01ba0507, 0x01040305, 0x076c0201, 0x033df7a3, 0x06070b0e, 0x0e016879, 0x6d05120b, 0x0a0f074d, 0x0369030f, 0x04080605, + 0xb4030204, 0x20f78a0c, 0x20f784b0, 0x21f7ae52, 0xf9823634, 0x37361322, 0x14240683, 0x27070607, 0x23210482, 0x22f48322, 0x41312627, 0x162306f1, + 0x82410517, 0x845b20f9, 0x15a523f9, 0xf9a354fb, 0x140fb32e, 0x068d010f, 0x050f1408, 0x12022196, 0x092bf183, 0x6b4f0607, 0x0d0a0f05, 0xa3375a07, + 0x8d2908fa, 0x0a0f0f0a, 0x06bd54fe, 0x090a0f08, 0x052dc706, 0x01010513, 0x916a0606, 0x0f0a0906, 0x004a790a, 0x46000300, 0xe20649ff, 0x35f34105, + 0x2206ec41, 0x85370702, 0x010f2109, 0x2105854d, 0xeb422334, 0x011f2406, 0x82ce0636, 0x847320f9, 0x158d23f9, 0xf9a2c7f9, 0x06e6053e, 0x010f0a12, + 0x07a3285f, 0x0b0f0a07, 0x070807e0, 0x01030706, 0x0a0f0262, 0x2a4c0611, 0x5108f8a2, 0x0f119e04, 0xfe04040a, 0x046b74e2, 0x070e0a0f, 0x04040493, + 0x0d010107, 0x0f0a0504, 0x007dcc11, 0x00020000, 0x067cff7d, 0x00b60583, 0x00120006, 0x37110100, 0x1117010b, 0x22061400, 0x34260127, 0x01173236, + 0xe2b7cc05, 0x0d01b7e2, 0xfa163e2c, 0x05821690, 0x05700535, 0x469afeb6, 0x2101dffe, 0xfa660146, 0x162c3e31, 0x82167005, 0x90fa2105, 0x1f204f8d, + 0x01294f88, 0x22230614, 0x27012c31, 0x060f4100, 0x12171626, 0x1e050001, 0x1f385c89, 0xfeddfe01, 0x88febd14, 0x1f2c0175, 0x6c05291c, 0x52015701, + 0x2b1f1202, 0x12386b8c, 0xc6052c1f, 0x027801bd, 0x1f0706ae, 0xfd1b242c, 0xfea9fe82, 0x2c010aae, 0x5f20c784, 0x8320c782, 0x0534c785, 0x011b0711, + 0x22241127, 0x01373426, 0x14163236, 0x76050107, 0xfb21c783, 0x2bae8a1b, 0x466601a0, 0xdffe2101, 0x1d9afe46, 0xde83d884, 0xc785c583, 0x2f224f87, + 0x4f860000, 0x2605f044, 0x063e3736, 0x43243637, 0x062606e2, 0x0e040607, 0x02820702, 0x0e070622, 0x28086586, 0x2c1ffcfa, 0x22533106, 0x402a3f23, + 0x92274938, 0x4c01b601, 0x2c1f0403, 0xfeb61d27, 0x72a3d0e2, 0x2f461f34, 0x0833532b, 0x08818c26, 0x0e0f1f24, 0x595ad776, 0x557b5699, 0xa892275d, + 0x1f2c0120, 0x12032b1d, 0x95865c43, 0x789f3b64, 0x1578d96f, 0x00820019, 0x46000434, 0xce0644ff, 0x0d00b405, 0x20000e00, 0x00003000, 0x7d453301, + 0x3123270a, 0x0e010325, 0x9d452301, 0x0109280a, 0x14151632, 0x86060107, 0x04362314, 0x5d4564ab, 0xfe87280a, 0xbcfeef6f, 0x42111a05, 0x15290a95, + 0x2c1f3102, 0x1649fc0c, 0x24068229, 0x0216b703, 0x094a45ee, 0x4801a126, 0x1410bbfb, 0x2a086645, 0x300284fe, 0x12161f2c, 0x832327fa, 0xd9052206, + 0x2ea68223, 0x45000100, 0xcf060900, 0x1f001505, 0x46370000, 0x78201e2b, 0x20221043, 0x1bd7450a, 0x6f820020, 0x54ff1328, 0xaf05ed06, 0x7e823e00, + 0x16173226, 0x1737011b, 0x02260388, 0x27070317, 0x04822703, 0x07010b23, 0x24038327, 0x0f060334, 0x080f8601, 0x1337032c, 0x013f3037, 0x32371317, + 0x013f011a, 0x39018b02, 0x39324202, 0x392c7239, 0x39173f39, 0x45278c39, 0x39398470, 0x391f2f4c, 0x13825e39, 0x393f6b28, 0x06034639, 0x0e828c07, + 0x39482408, 0x24715439, 0x39395807, 0x1a013d55, 0x05380a22, 0xfd0239ae, 0x3847024b, 0x010bfd38, 0xfe38388d, 0x82530361, 0xfe202605, 0x0d5602cb, + 0x2a3282fb, 0xfb976003, 0x02393985, 0x826ffe65, 0xfdc83105, 0x08393924, 0x5a37da02, 0x39cffd6d, 0xfc6d0339, 0x05314a82, 0x9efd06a0, 0x3838ec64, + 0x01f5e3fc, 0x0b9f019a, 0x08df8238, 0xceffa020, 0x32056006, 0x00000700, 0x21152125, 0x33352311, 0xcc049401, 0xf47cbcfa, 0xec047846, 0x23920078, + 0x2135212c, 0x14044c02, 0xccfe74fb, 0x2586ac01, 0x03292796, 0xfc5c0304, 0x0214fe2c, 0x28279e64, 0xfca402bc, 0x035cfde4, 0x29279d1c, 0xec017404, + 0xa4fc9cfd, 0x279dd403, 0x012c0529, 0xfb54fe34, 0x968c04ec, 0x15332327, 0xc7821123, 0x7ce40527, 0x0534fbf4, 0x28eb8844, 0x06ceff63, 0x0032059d, + 0x26d0821f, 0x30151632, 0x45010119, 0xe9420580, 0x42112006, 0x032c09f0, 0x02231980, 0x1916117d, 0x20fd1523, 0xfd210683, 0x330c8483, 0x0511e002, + 0xfd192332, 0x02cafdcc, 0x19230e22, 0x8afd121c, 0x04230682, 0x84defd6a, 0x7602230d, 0x0082000e, 0x6300012a, 0x9d063b00, 0x1a00c504, 0x14206b85, + 0x22226282, 0x60870927, 0x36013037, 0x01091732, 0x19600636, 0x90fe0b23, 0xfd123e12, 0x12c1fe51, 0x210d821f, 0x0d827001, 0x01af0233, 0xbc02123f, + 0x10131923, 0x1919f8fd, 0x3dfecb03, 0x280c8319, 0x19190802, 0xc30135fc, 0x22638219, 0x829f0003, 0x826120cf, 0x002124cf, 0x82470034, 0x22352567, + 0x0607050e, 0x23240185, 0x053e3215, 0x2a052b61, 0x35213637, 0x17051e32, 0x6b260706, 0x012105d6, 0x05fe6b16, 0x22153325, 0x8227052e, 0x250b2f84, + 0x8e986b68, 0x927748a4, 0x30348e84, 0x0f8e101c, 0x0950fa2d, 0x7d57541d, 0x23419079, 0x845e5421, 0x5c032122, 0x10200886, 0x04301a88, 0x1b0378ba, + 0xda86642e, 0x8492df86, 0x060a163b, 0x022a0e8f, 0x5c452013, 0x3b375d96, 0x1f845e80, 0x864ffd21, 0x87782008, 0x03003019, 0x4800aa00, 0x8e035606, + 0x15000b00, 0x18002700, 0x18178167, 0x2007e544, 0xd7531801, 0x5eab2007, 0x3a30083d, 0x03d8343a, 0x0a41117a, 0x01978104, 0x12400a12, 0x21080782, + 0x89460348, 0xb2fe88e7, 0x3335c501, 0xff36323a, 0x137d2200, 0x46037ffd, 0x7c1431fe, 0xfc810222, 0x008200ba, 0x3b010436, 0xc50507ff, 0x07000c05, + 0x1d001300, 0x00002f00, 0x15011101, 0x35220382, 0x68183003, 0x05201307, 0x106b4518, 0x01aa0328, 0xfe72fe28, 0x335ce0d8, 0xc6671805, 0x08c82307, + 0x53180e33, 0xb3200afe, 0x0b796818, 0x60280221, 0x283e0943, 0xcc2b292e, 0xfd1b640f, 0xfe9e02ff, 0x10631c8e, 0x62fd0102, 0x36010600, 0xca0508ff, + 0x95820905, 0x2d001f2b, 0x43003700, 0x00004b00, 0x934c1805, 0x0206230f, 0x87712107, 0x3301220a, 0x11591832, 0x0bc07c08, 0x4c180520, 0x022d12e0, + 0x1171dc1f, 0x2b0b1247, 0x2c0b040a, 0x2709820b, 0x2594266e, 0xae016701, 0x07305b18, 0xed84fb24, 0xb75b6841, 0x07ae7c05, 0xb7038129, 0x6e3bfa3d, + 0x18269826, 0x2b0ce45c, 0x389f02f8, 0x9c2638dc, 0x269c2727, 0x703e0882, 0x027041fe, 0x60bb609f, 0x010660c4, 0x7e2a292b, 0x292b7da7, 0x5b5e612b, + 0xfe5f5b6b, 0x4f186122, 0x323a0b0c, 0xc53131c5, 0x03000000, 0x5400da00, 0xb8032606, 0x1a000f00, 0x00005200, 0x55712113, 0x06142205, 0x27018207, + 0x32252123, 0x34013d36, 0x160b5818, 0x64054b56, 0x17220630, 0x005e1716, 0x0b581806, 0x01db3a0e, 0x41425028, 0x32322e2f, 0x42412f2e, 0x01d8fe50, + 0x3a735e28, 0x03a15e39, 0xd2451894, 0x353e0807, 0x1d525045, 0x2525491d, 0x15157a7b, 0x4436354c, 0x3146465e, 0x5d213c23, 0x214f4846, 0x7e4b4420, + 0x27151474, 0xa9037027, 0x35341a1b, 0x359dd09d, 0x781b1a34, 0x72867276, 0xaafd3b3b, 0x45184d86, 0x1d3609dc, 0x06070e1d, 0x37657317, 0x103e2d2d, + 0x3e212111, 0x322a351f, 0x4518373a, 0x312408dd, 0x25222230, 0x0b28f782, 0x08ff0b00, 0x1505ea06, 0x2608f782, 0x0047001d, 0x00640057, 0x00ad0095, + 0x00c900bb, 0x00e600d9, 0x33301300, 0x17011e32, 0x0e071416, 0x30012b02, 0x65363237, 0x30250545, 0x30113023, 0x29cc7101, 0x850f0877, 0x010f310f, + 0x012e3330, 0x010e2301, 0x2e272223, 0x37363402, 0x13be5518, 0x023e3726, 0x3023013d, 0x07ee5f18, 0x21301329, 0x14151632, 0x75300706, 0xa9820deb, + 0x2c829c89, 0x0120aa8a, 0x0b257e9b, 0x405d3cdd, 0x2e008211, 0xdd3c5d40, 0x4b4b42dd, 0x96037742, 0x18010501, 0x21083e4a, 0x4a18010b, 0x46080c3e, + 0x12481108, 0x7c026277, 0xe2082309, 0x63092308, 0x872182c8, 0x0e03f121, 0x0e040c04, 0x0bb13c03, 0x0bc5fb29, 0x34484f0a, 0x24412c2b, 0x60222223, + 0x1f6f593d, 0x120d380e, 0x50483b46, 0x191e4850, 0x7c16281a, 0x76fe5bdf, 0x0a240a28, 0x23382817, 0x240e2876, 0x22094203, 0x365f9309, 0xa7012a0a, + 0x3f405127, 0x523f3fb1, 0x53555a27, 0xfe55539b, 0x18430115, 0x2221654a, 0x821f7c1f, 0x07a47702, 0x41112c08, 0x11411010, 0x028c24d3, 0x133e3008, + 0xb9835413, 0x272b2a83, 0x2108474d, 0x5c3a3108, 0x5c53a353, 0x31200909, 0xfe583a1f, 0x769f029d, 0x2d211260, 0x0660762b, 0x96bbfd21, 0x82002058, + 0x00083b00, 0x0608ff2b, 0x001505d5, 0x00530029, 0x009d0085, 0x00b900ab, 0x00d600c9, 0x3c422500, 0x29664228, 0x42300121, 0x02227d4a, 0x4c1801c7, + 0x02211f99, 0x2122a0d0, 0x3f4231fc, 0x42a5205d, 0x0121212b, 0x2123a19d, 0x3842c503, 0x0e00265a, 0x0100ae00, 0x20008700, 0x240b8602, 0x000d0001, + 0x240b861f, 0x00070002, 0x240b863d, 0x00250003, 0x200b8691, 0x20238204, 0x240b86d3, 0x010f0005, 0x2a0b8601, 0x010c0006, 0x0003002b, 0x86090401, + 0x240b8556, 0x001a0001, 0x20178603, 0x20778202, 0x240b862d, 0x004a0003, 0x200b8645, 0x20238204, 0x240b86b7, 0x001e0005, 0x240b86e1, 0x01180006, + 0x304d8311, 0x00750046, 0x006e0072, 0x00630061, 0x00200065, 0x20078249, 0x2e0f826f, 0x46000073, 0x616e7275, 0x49206563, 0x826e6f63, 0x8252200e, + 0x8267201f, 0x826c202d, 0x0072282b, 0x67655200, 0x82616c75, 0x00462108, 0x74212f83, 0x22078300, 0x84670072, 0x823a2045, 0x21599949, 0x1f830020, + 0x37003126, 0x33002d00, 0x32260382, 0x32003000, 0x71823400, 0x746e6f2a, 0x67726f46, 0x203a2065, 0x0f827d8c, 0x2d373127, 0x30322d33, 0xa8268332, + 0x825620b3, 0x0072248d, 0x84690073, 0x822020a3, 0x00302467, 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41b38d10, + 0x0a41110b, 0x00002306, 0x008b0002, 0x0c8b0120, 0x69200b84, 0xd6080582, 0x00020001, 0x01020103, 0x01040103, 0x01060105, 0x01080107, 0x010a0109, + 0x010c010b, 0x010e010d, 0x0110010f, 0x01120111, 0x01140113, 0x01160115, 0x01180117, 0x011a0119, 0x011c011b, 0x011e011d, 0x0120011f, 0x01220121, + 0x01240123, 0x01260125, 0x01280127, 0x012a0129, 0x012c012b, 0x012e012d, 0x0130012f, 0x01320131, 0x01340133, 0x01360135, 0x01380137, 0x013a0139, + 0x013c013b, 0x013e013d, 0x0140013f, 0x01420141, 0x01440143, 0x01460145, 0x01480147, 0x014a0149, 0x014c014b, 0x014e014d, 0x0150014f, 0x01520151, + 0x01540153, 0x01560155, 0x01580157, 0x015a0159, 0x015c015b, 0x015e015d, 0x0160015f, 0x01620161, 0x01640163, 0x07660165, 0x45696e75, 0x86304630, + 0x86312007, 0x86322007, 0x86332007, 0x84342007, 0x30312107, 0x31212785, 0x21278530, 0x27853031, 0x85303121, 0x30312127, 0x35202787, 0x36202f86, + 0x37200786, 0x38200786, 0x39200786, 0x41200786, 0x42200786, 0x43200786, 0x44200786, 0x45200786, 0x46200786, 0x31210785, 0x20078630, 0x86078631, + 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, + 0x8631207f, 0x3032217f, 0x32217785, 0x86078631, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, + 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x3033217f, 0x33217785, 0x86078631, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, + 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x3034217f, 0x34217785, 0x86078631, + 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, + 0x8634207f, 0x3035217f, 0x35217785, 0x86078631, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, + 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x4635287f, 0x01000000, 0x4500ffff, 0x002607f9, 0x14000c00, 0x15820400, 0x00000224, 0x03860100, + 0x00240985, 0x206855e0, 0x002c1182, 0x9ffffde0, 0x00000000, 0xd95a1ce2, 0x7fe4fa05, 0x0000ebea, }; diff --git a/src/icon/furIcons.h b/src/icon/furIcons.h index fe70ba1f5..dfa3b86cb 100644 --- a/src/icon/furIcons.h +++ b/src/icon/furIcons.h @@ -1,7 +1,7 @@ // not auto-generated. update every time you change icons.ttf! #define ICON_MIN_FUR 0xe0f0 -#define ICON_MAX_FUR 0xe15c +#define ICON_MAX_FUR 0xe15f // test #define ICON_FUR_TEST0 u8"\ue0f0" @@ -70,6 +70,9 @@ #define ICON_FUR_INS_POWERNOISE u8"\ue15a" #define ICON_FUR_INS_POWERNOISE_SAW u8"\ue15b" #define ICON_FUR_INS_DAVE u8"\ue15c" +#define ICON_FUR_INS_NDS u8"\ue15d" +#define ICON_FUR_INS_GBA_DMA u8"\ue15e" +#define ICON_FUR_INS_GBA_MINMOD u8"\ue15f" // sample editor #define ICON_FUR_SAMPLE_APPLY_SILENCE u8"\ue136" From cebe47d992173bbb89cd0cf859a043f0d0982297 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sun, 17 Mar 2024 19:48:36 +0700 Subject: [PATCH 072/134] GBA: update memory composition view --- src/engine/platform/gbadma.cpp | 16 ++++++++-------- src/engine/platform/gbaminmod.cpp | 18 +++++++++--------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index af61fa543..cf28a6c62 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -478,9 +478,9 @@ void DivPlatformGBADMA::renderSamples(int sysID) { break; } sampleLoaded[i]=true; + romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); // pad to multiple of 16 bytes memPos=(memPos+15)&~15; - romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); } sampleMemLen=memPos; romMemCompo.used=sampleMemLen; @@ -500,6 +500,13 @@ int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivCo parent=p; dumpWrites=false; skipRegisterWrites=false; + for (int i=0; i<2; i++) { + isMuted[i]=false; + oscBuf[i]=new DivDispatchOscBuffer; + wtMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_WAVE_RAM, fmt::sprintf("Channel %d",i),-1,i*256,i*256)); + } + sampleMem=new signed char[getSampleMemCapacity()]; + sampleMemLen=0; romMemCompo=DivMemoryComposition(); romMemCompo.name="Sample ROM"; wtMemCompo=DivMemoryComposition(); @@ -508,13 +515,6 @@ int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivCo wtMemCompo.capacity=256*2; wtMemCompo.memory=(unsigned char*)wtMem; wtMemCompo.waveformView=DIV_MEMORY_WAVE_8BIT_SIGNED; - for (int i=0; i<2; i++) { - isMuted[i]=false; - oscBuf[i]=new DivDispatchOscBuffer; - wtMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_WAVE_RAM, fmt::sprintf("Channel %d",i),-1,i*256,i*256)); - } - sampleMem=new signed char[getSampleMemCapacity()]; - sampleMemLen=0; setFlags(flags); reset(); return 2; diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 1fb66ddd2..14b7717ec 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -700,6 +700,7 @@ void DivPlatformGBAMinMod::renderSamples(int sysID) { sampleOff[i]=memPos; memcpy(&sampleMem[memPos],s->data8,actualLength); memPos+=actualLength; + romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); // if it's one-shot, add 16 silent samples for looping area // this should be enough for most cases even though the // frequency register can make position jump by up to 256 samples @@ -708,7 +709,6 @@ void DivPlatformGBAMinMod::renderSamples(int sysID) { memset(&sampleMem[memPos],0,oneShotLen); memPos+=oneShotLen; } - romMemCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"PCM",i,sampleOff[i],memPos)); } if (actualLength Date: Sun, 17 Mar 2024 20:21:59 +0700 Subject: [PATCH 073/134] GBA: fix instrument colors --- src/gui/guiConst.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index e91b4af3f..49f5cf34c 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -179,8 +179,9 @@ const char* insTypes[DIV_INS_MAX+1][3]={ {"PowerNoise (noise)",ICON_FUR_NOISE,ICON_FUR_INS_POWERNOISE}, {"PowerNoise (slope)",ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE_SAW}, {"Dave",ICON_FA_BAR_CHART,ICON_FUR_INS_DAVE}, - {"GBA DMA",ICON_FA_GAMEPAD,ICON_FA_QUESTION}, // TODO - {"GBA MinMod",ICON_FA_VOLUME_UP,ICON_FA_QUESTION}, // TODO + {"NDS",ICON_FA_BAR_CHART,ICON_FUR_INS_NDS}, + {"GBA DMA",ICON_FA_GAMEPAD,ICON_FUR_INS_GBA_DMA}, + {"GBA MinMod",ICON_FA_VOLUME_UP,ICON_FUR_INS_GBA_MINMOD}, {NULL,ICON_FA_QUESTION,ICON_FA_QUESTION} }; @@ -994,6 +995,7 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={ D(GUI_COLOR_INSTR_POWERNOISE,"",ImVec4(1.0f,1.0f,0.8f,1.0f)), D(GUI_COLOR_INSTR_POWERNOISE_SLOPE,"",ImVec4(1.0f,0.6f,0.3f,1.0f)), D(GUI_COLOR_INSTR_DAVE,"",ImVec4(0.7f,0.7f,0.8f,1.0f)), + D(GUI_COLOR_INSTR_NDS,"",ImVec4(0.7f,0.7f,0.8f,1.0f)), D(GUI_COLOR_INSTR_GBA_DMA,"",ImVec4(0.6f,0.4f,1.0f,1.0f)), D(GUI_COLOR_INSTR_GBA_MINMOD,"",ImVec4(0.5f,0.45f,0.7f,1.0f)), D(GUI_COLOR_INSTR_UNKNOWN,"",ImVec4(0.3f,0.3f,0.3f,1.0f)), From 804598d8daf4b95ba0e52b9e4fdfda7686fe4343 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Sun, 17 Mar 2024 20:57:52 +0700 Subject: [PATCH 074/134] I forgor --- src/gui/gui.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/gui.h b/src/gui/gui.h index da476fc3a..90ffd64fb 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -295,6 +295,7 @@ enum FurnaceGUIColors { GUI_COLOR_INSTR_POWERNOISE, GUI_COLOR_INSTR_POWERNOISE_SLOPE, GUI_COLOR_INSTR_DAVE, + GUI_COLOR_INSTR_NDS, GUI_COLOR_INSTR_GBA_DMA, GUI_COLOR_INSTR_GBA_MINMOD, GUI_COLOR_INSTR_UNKNOWN, From 828af722ad3c6144a8d0ecf99cc043188d4dcddd Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 12:33:17 -0500 Subject: [PATCH 075/134] specs2 demo song by Mahbod_Karamoozian --- demos/specs2/rastaline_dub.fur | Bin 0 -> 27902 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/specs2/rastaline_dub.fur diff --git a/demos/specs2/rastaline_dub.fur b/demos/specs2/rastaline_dub.fur new file mode 100644 index 0000000000000000000000000000000000000000..6de407b4fb682bee355a19ab3f495287c3d00ba4 GIT binary patch literal 27902 zcmV)7K*zs$oXorjm>t!zF1k8*@0`QrJepC?fFwX5M8;$j3#$8}7XMp1WGw&N+9(ZEY=Q-?H(h z+gj$Vz4OimE!Td#<=hQlz4rF&Th88a=Z0Hvzx_KmZMdxm1Pq;u5RMt5FzlF647-Uz z=w6^lfp!9=ft)NtYk;l?`UTL-Ktn)?LufA0r9dH|`+>FrWq<-Egw_IG5A+kDzXQDm zGze4%vYQd=1v(Ar8le9L^n0KQpmqyF-vlD9(6K;&0m5tuT?w=ch_NGdEzlky&H=+B zh|qUi5$fxNZs`Jj=Og4@iqP4|BlJGha%>$!<7Xf=d^SRNU4+n)uYqniBQ)ph2nD~1 z(8_N?y}kpw|0hDO?;><6(A_|f0QCbgA%u!fy zA0Si!di{q8{pd#so%Ca951=3Z1fh99MJNY!@V^lH)6Wq4&d(8=`~^af{Sw;fR|wtk zYlNnLgV5^VB6L2`ZNEe4uRw=^ZoLomxF61e*8Lvp1oYiMAfyA`_eap-PYB(y385;` z{eMQt_W(k#0A2AALOjs#ABKE?K`8N8gnsikC==)npj|*mfucYH(0PAH=qVr_=)3=b zaRBrpkN~v$5olweuRIF%09yY~gl+_y1X{lt+6L%ppshgrfUbWGA@*^Eo&-Ao3FvpA zKRyX^o`QY``oYuC2hTu10^Ry7^xJa?Jr8uz^S}%AyB82z@FGHofW86qx$b2cdq7`* z1tAT{@+w>dngg@~XdTdnK-au#3}u`kDVkw9li6am*&TkT%jx!beZK$8cRro4&s_Px zatDWmK_Vc1oZ-~3Zn*8XjkmNc{^)4QM@LIPI$Ac%3ruhqE-yQl9qgPj`)dRr@?XZl z`1w8j&8E9=y5;(f8}7XG_HVXabo)KGUEgxaZ8zP0Oi1{oV@GWtscmFGpkqKd5CKF2 zQ9v{h1H=MxKqeqFkOjyJWCOAT!5D%36Oexb@=rki3CKSI`6nR%1mvH9{1cFW0`gBl z{t3uG0r@8&zmfNtGW4ess(|fY2!?GH(E4-Mo(^*rU3bgv*WG;4##`1bGF^AiU3cGp z>#4>CINNyLS8rc)_nr4_tR1b}c*}-wuUWCAcCvos#_O-$09?n_PA}Ye*X_65bN5ZR z-?nCX?ZTzE-?HZTMW#Ehzje(G8*aI4qv@^8@{XxZ^ZK z{_JhEcHNm5E;-iib3Z$Xoi1b0`2)ea`i91)=9bpB_Kwc3?m0cZMo#j>3LD2=$D}m> zcT&zg@1iA6VBCgCblzG9U3bsjx8HCBI_*5;M#D!pD0K5p*WHXRI+rx$HlKGIe9!XK zf5bzguWq=z#)5x7%bhpfT4NzT$SNlg?7Ieog_gr_gG2A{BX#N6L@bI_KhhcT+ z^)*(@7gS`!H$TQ`{UoF9W4#89|E3S_y629Kch>UHUtE)5|NQ>?46oz!YjFFWH*UD? zV~RPys0QEq7^Ca+#~m=%SlplATXzARs_}R}$>aWz$GGMF{9C@yzvch@TY=BN75w~L zb)SE${_}4&eEzM*&%f35$y=w?ZZ$!R+0dD{-36xc){VE_-LiBsI(KasOa_cYy5RvV zCYGT|0>=nUuU#OR4-b$&D{0l|NLm7tnnBXBj3i|od=Ftu+mDGLKNNA!7l>G7%uH^U zKh(_58pr>E%pZP%%$p3Er_}iI&H=Q3!)~|PY*wq)VzHRbW|PUp zaU9FC48wrap(u(ZN$}pYj{I|!xxx2oWmbQVGRr}k7ElJqXZbxR6CWO-&$RRTpCe-h z$XI4n=tKVVkLiO^%!iHBeS_}?*A2ECEPG9V;*QD1Ka_j<7sy@oF}We^m_qomgJUI8 z|I&4Ka^fE!Y8QS%Nm(~}9&js%AFZ5+SPq}Y#&2y&gkK1mt z&auQyk8(G#A0I0hoqK+*1wMopM&$fN%Pg@*oj)fb!v!NFvmM-L4Sr0qpUnCJ$TF^d zIxD6bW7wj2P7j4b_k?O`NL!WK75;Z=ARHbGeI~UvHuSz6E}V4r9qX6mYgbM&uexWx z$$JWV#P{aE5p(b_;Z5%ztuDOfqR$FDmcDzT-v3{}`f2!k|4N&8y}x_w!L84~_{`7l{ms3z z>H8l`KmY#s@BhKyw!HEBvrj+s+N+N~{=gre{@d^F`^Sqf?0NF(C;s-}uYUZ)AO7%1 zpGXfr^X{P9d+Cke`Y3(#Q|TL@OdGB^=eT;SEjhIRtyiCY?1jxwevll?m5~{9w6vJ* z`TWs$KY0GJryhNL({F$Ob4b7VDE;=S_Ydxqbz95)&ZWy%tX+NK3CDG{%<;7P=<3ke z_~60q&;8}$zyIpjpGv>^czW=WH}{Y0{;u_BU4GN8$I>mc>Be(Tp4a1)qaVEb{GT@6 zcP!mMn;v}Tm8}P+BxG;tJz?!vzIxNg(pPI~<5#XYYyFCDUo&ZyOSycmP$}gKi1P=# zx>m2dWW&ZAK1v%dJ^$h}S1;@CZnbf8J~?{e;9GCJ_}C+lJ^Iflo_Y7BXPdUXLrK_&G>dR-Iee%j>3l_AuHMe&3E?cs2ZbO~dZFjK* zK_LlI8cxc(ifJk)>9oaVat4~adwLfvUcPMkl4VPmpS1R*Q%_lc$|)zUJmL7|#~rtL zac_6WoSyk}I~s!yPR~UK`#yO0-K}rFvwhoZuWi}#>WeSD{M<`#?|65|p`od0WHOaO zCYyz3IJ3j$3iw)@JG#2&_RQ~TZ3nX&47%N3yVFck3@9V3yr?R2saVYAN`*YMM`k)Q zJu*5rGch(b6&W2H9q2nc(062L=;)E*(TSNzB$mtMQ{`&8QYlu;e6d(636etKhA9N& zBULJ8p_t3&(wTfVn~FxJrY0h>$mCQc9!bXI$!xJ)RWyhW?N*Z~5Nv8}ZfNVC+cmd$ z{`>`t7cXD5cJj!ICA5=PjBycV16VXJ=*X#UyttWK}r=e7HT^^L*0V6d*P-tYFfoK~C7V&W(qX==4vEtks0Tr!nO zCE}6E=~yC>h{RHve7R7nh`O#Rs$x6{z;S{#S?v%p+6-u8wc5&6q4!E5~wH zv&GE88MMjl(+yo!R2U4RAS$Y6I1N^0Q!ucFtA?@{nb#gfgFtTAgQ&=!3UC2oKhKxxYZ)w|;$#<#EMRNuTWy_4O;MN_q z+iYr;>?OO1kwr42Vg8BMv>7AwadV<|#4}WCh}m#O4~SG%C-atRa~TmXk!Vkwsf1ar zT4QEH!g$r9(zv9W^Lm!dvZZNh+?R9f>H>jj$+}DW6i;VarJi$lDh&v)+Os;V*dldF zyG^01GU6&0z8J_8s=&*XQZxw?CgHl`b5&_2Um{q=S#`=)OVv?eMFHd8#dfL874&Ie z!XkJ?EEsJ9w};XNDW@1NOQenwLJO@?wyGv+ik-lTjHP1HWmcmE zMrM!+DXfZ-8fnXd0aqm?nyQ+GH;EKMvk+BkN~IuYt9X=F1RI5DTDC|p*~bBv}^Bqp(##&NturvzLr zn2WfesI*n16$(0EP<5GRaou9YC|y_CiiRYx)EsG(R7{oyQspTD5g>&_A`%5nCIv|< zvK5>bF(g+hm{D{|L6V{}Jm%n8oYh!f*2=W3mnX#R2?!%}9H&H1p)dgnib!gh&e6zR zr6p06aNfa#g8^f#=#tUSI1Xl=P-%fGV;ZmP;9n$MAXJ>9BuXJP0@rbc&= z1?34)kYzOnx{9c(sGuu?reiv(QaX)DvqWe}z>%y#!5W0>go-Jcj;kUe11zAxPeLsb zNF>3I=or*ohk7FhBM_|iy6w|AP|GO1MUbszhVT-Fga`QP6!xBnjuLs5F1oW121eq z6+k2gOc0R(t{s3bf#EQ9RD@&z5XQqG5-JMgT~b9=lW`f-V47i|E#y`JZ0Z8Y!vsu& zwt^PN;7q}w?FkGcK)NnLZ$a65&5Ni=1v~^*ssT)mgwX&sR52sICNM&!j62Z&GNwRF z8Z4L&4Fpk)L>M(Q(B&>Db1RnX7S zUax&YHnj%)pbZqLpo(UJ6f)EWenTjV zgw_TfF=LE^6vzl2sT+cDqcaUurW!uk=s;*H7~hZ&DvH;B0ltE~8u*0|=nO|NYG*U4 zHE=qM2|+_Ni-+OI$e`44Bvj03Ia!yqS;g=g9yG8mWUqlbI9H9^#`J(n7^*{VL(3Yv zI1eU^@v^3k{Nyv2I{`Tx*FKFdXskdse0k#;hx*$t+St8u)2966k8j$vsqe{+*jDQ7 z*Een2xbekpPwm>oZ`^3xxN+l!XKs9M-NxP*Hf?(LFuQ5fo(D3PQ?_lwF23xf;^9q~ zZ#;Y5M%zGO<05nYrH)PWqMHt86W46qwP{mzYR+Y=dUh7_{*4XW2P)}w;B2&f(b%r^ zYGKFr!nk8D!yN@P%NKZxXf3ZJ%snnu}xXva?LIr%4$Po$g0Ly?uHfQt>f^3IIMQLzPB84Pu&l_*JO z(#Daoa=bsQ48Zt5zyviR15U}`Ruw!v!_}cOLKRPPl{c<#?VpPIrG9o7a=XZEHce8z ztP~ppNWm?rQ->&~ni2M_MwV!3dUQ!Ez~Nv5+R6BFg7w z9IQ1W8Hb7GNHd99jOT`|)$rk>RC{wqmb0=GA~}*2G}eLJ5shhP=tI)NATti}3b-{e zW27v~qC!zsGtOA7U~rHH50GTJs23?xt;92}eB!b=` z3~Uxu4JMFUn_k8wG-AFQGhPd#v>LlQ8%!8R7XNfuf#c|yXmqTqA77z^X5ZA~weS@? zrl?^MASajsh*U9swk2j8cROjmRN|{u2_soEgm0CqC>gGov9Y+A zsQ{SM2$Hp#38hplS0#lYShJZ@s}){`se@A-jVo1A(*SLgEKMk)B2`62#aIiVTV1U3 z#&Z{pV<}7$Kp0>vlA;Jz5(EjL0S+~QOw~$NGOPj1P)Mo@k^+;5A_;(hq5!!uil$*Q zDI(7s#V`zsLkI&E(r`fCxL$k6Vg$exg#pwMpaL33QZ$7t60qrp7sha@TFoDtT65K^ zAYPa_dT{XI{=B1U!SS75RY)J)JvCfH!Q(Dn*C-@+zuVzZg>IY4unJXXy??-DF+BlKjP#0v$9al)}smJCzE znKiXiC@N5QhZS%+Ar(@B%xk!rB`8K0N-B*glGLj*3=L>&!eYk3IP&?bQkB6@LwKPA z(uaNkw5|f=H{id7QvfRg-12~7REpL$#;oxb2pXz_0n5Oa($LlrZV*N|K}fs+AV-J( zFbYz55wH^lJpj-ZU^IlFxM3f4QN{sxf(<7%aK$p1BaLJLg#ws`Vl-V6rr(^f+UhU9 zhn9&(^w{hB(o?Y`!`)xIdzAzK^Ja)hY5Tbsnk!?EzSMW&S@|gc+!GTk7Ma}dy_XBF z4z00dvyc5OW~Wx(c)FN=rcw&-+4r3#O6b>d`Px(j$+ws75%d#t0=xpP_t~Ul;7p^mDSY*P< zPsb1Tm0Ooyy{PACe`)vYgOvZot33N>26$&3g$KBFLFCI$F|S&aMQzOzN8wOGI?|_j z?En<8bj97~&`fM8RVWH3XJLxe37&K`(i79jql+*Jd6`xedrub{jwezj*Pu!#1TTS3?Q8{F?wpOWD9!nGBS&W zBwvL-!!1rL#_O6`l|`H~qilhtsyvbj2ZJhE3BzPTBSlp=J4r&+uzW(m!QDe#1^x}u z5`cA86*&m(At*u^OOrH?Dfzq+#zMbyG$slVB|w}95sq%WW~eBP#SFnWg3$~B6{iTw zWFf>d1filxFpSQNFcvhOg2@iC5??AC#)eijh9Ts#U`$>_n>bbAMS^5ZIK*-ij6OwD z$l97U9EPj}(UpQ54{LE595IPwMi?O~5GPA2L|Zs!T#*3*gRhfSk}{A57z;&INkAKh zfm99Ot{J`%?7Ctg?pj!*@Ur0+b%G%@MU-n{CH!KB69!ZR{7@=zK@ba5Pc_!j)gJH~ zaVfwhfE}_C_aQ?yXgay(MIr74NMdjq-n^!nVldT^0$^|>u7&6o!g@?LVlKl`Dbz=f z3hkjj`Ot4YoEz6Z?VvCoFX2VHV%-+@c)X{DmU8t?zYM>4=b!p=_|@1@ z(K|1+P$0YC5C7TTYx&M;hmvz&_~p}?KlfhH5efxouy{BeF8Jr37Ya3Yn{46mPfMlT zO(7G0=D;t*4=$d&>YmWmsT{ZY-f;NsMe8BQszv!9hr>U!M;G55x}biQy=S{Xy z=mMvofBD|~!r`X#L!qYQU9m@h9sWhsch0GyubVxl$!Gr*9_jc_=rlmmTkZ?L@Y>c@ zp-`x+AvLo3@$fI-uitQH=o+)7asb#4cYPythAw2^{&6^#-baT*w>G1xx1SA%9||l9 zed9`pUOw>3Kf>YQ(okr1wlw_KFE%|8%ru2U*Hm*m;QF7_r-edS_)KDcxc~9zv-Z|g z?r0Sp#Un32D|Pg)ZoIOg7~K`#o{wW~*WS>~X~mIupLnL~a5i549}Rgb^5&D#iNf4l zR<+y8(_6oH$ZcZq>#nF*)X{yvd!vt0S;ftTKzIhvSv^Ch%Jo80!xzOFe= zrv2KvQf~Ld&x~U9+?&_iTvT>&>vJDSx;1#gR~KNp=yN~c?_ar&Vy{@k4?pvVzMR0$ z`P#W|8IK=+>_O4n!CKF_dQN`k=yQJ^;O3s+Z9aK%`t|!?se<9|z2ZwwIlk-hzm3y% z%iV$F);W&s?cdioqtq=}>1ymj@BQf&-e1o+PCU1Me9xY3eM!bP|D0~KiyYeVPG3b; z9dl3gTiVFOk8R;yOAZnZMW(e2wZCSP+~XDbse7V`1F7}wP1_VxPFq38Q$hP5{>>{jE+ zOuBzmw|6gU@?hz)!3Zx&oTuJzW9{6;wu4o(%T?FgP7Dm@%CU&<>uhl|Car(>xWJgr zfi`P3jhtBjuDmlCaQgyWUP{Ms(jVu85%;;DNnZ3qJ(#l1{63`wGDOAe&0*_2)lC_wW zVxgj|l1#hYl)&?XVKE6sXU&WT=8_i`#%5*+LaCI&T0uMyC2ExtKsAK|FoY4LDo7Bj zDLBZ&bycWTM1s~8!o*=>NiZxF4f+`Nj2ARal`+mt>#|U-2*`MY#?as`z^bbX$w7>% zs6v_7048DpUf@iGcoySm@J~8O26L<91|U-usZ!NQ{ zAaDKRZvGo6hjz6tnms@H)I>{K8+`m2sew z!6b+8Jyc`*(_>-D0lz~<}&CiGb0JmR@-y7~+F#|_0hu`bI?cx=ovo|cjyc=%^p0D2|hVQ3e z3Xi`1yL-0`0?R`W!xzb2Ta)nh#qye^JuP>HLZ^Mb_gSEZ#?bPX?pO4 zZ`!^Y3ayl1+fifu-qF*R#Tpj5&Gbv(<1YR#v_$BHP;>nG-;SL7^^59SPM=Oe!B4*P zi{DZ$&CmQHQ*Lk%zOy(KG8*&DmbKHrdg%Q>{M2#7+Evfi%6&H$x11gdU39_9bRzty z&vV+9cbygbhNzYv-KM;;>1FGB*T{Ph-yaUYxol+}z9`Gcv+CQSudiP? zqW&=az26KC9WDhzm!RC^o57{F-nDV2D->G3_piT5S~+E9DD-7=&pS^*S<~){8@lUK z$>0CVk9I7dck5S^^S)K-3x^-3-l9ESUk^0|b5H#9d%ti1=-Rpb(slcP_gMc_X2i8- zZRo_N5WW9L&qNf$F^#XZz8(%g|FhS)FJJcUQ0TIN`Tgf!`~6e7e$R22&lmkGvaf`H zu+zz2wDzv=tSkQVkNXC;CMqZYXXwHuXVnjW|0nzQ59FfUb!W9tMxTBAk!|r6Cw4Eo z@zU1Hqnm>)-PF7E%=K0B;6ESx%Of~m-!;F!N7yzzzWLx|W0B>jthwy^&`EQK-$~I4 z&x9V}_doggf%L)GRk~^2s`XU1|DDlFTicTM6BcsR6viI->r;`Y6WTgmC$M{;els?D zcsGlkxOgFD;txG_AVT@t7GHeBX>+Qc2KkW(|6WPsN<*(}v5BeS)`Gd~87uNXVmQDj3Ep zgGVRF#xhBgs?e;JH796+Y*Z{hdvCx&;vIxgp~XVVQY^*CjwBL^sAy}YN!3P=q$OFR z2@5%=p&1L1TuxOX;zYLeRNs+-sj+w=HLug-@M zGEW0^ptG6jVx%NVGZxlL>P)F>HCL@gw~3?OX3dH@iA*sctw2EKfKVQqAy>@kN);>N z7)_Nbh%u9-gF>v`BnahfRpCUnsug3oVwrH7ZC1l;+-*W1+qH0t>62dL5Cl=iwNHBu zFnYx&EMNaY_{R7DbnkD=mvlc*g{`3rTE7yyY1V<kf2$wuRlnjUO5C39V2><1u_${kC zM;2y72SeB09P07yJMM5O{L}D*=dQfqvHOfd{zx|jt_zkIpYV;)cS50^Ugn`kiNT+M zMc(sjum3lu4WC@Wc4M)8;>(o_vg7Ik_zKb2S7OymNJE`>pH30~b8-=E+9YDqr91 z9DZzBXy=^J^GhF(C*%|UL^&GWbHIZ6>*8e^d2yY2b{N}>Va}P|u{q6g|v>?>|HSdE{|FGun zeDJOh9erYXG&C0a^ZCCFg*QGE5?7SMBjN66Lfb<-H-Ip>N`_-YRy79|Q?YsIrpY-q-tXpY5`1GIlyt}yZ zIE;yDwf^|Nc8a+VyTz=TaXR+20c>Iz8viS;mjPw&g%+xo3gqeY|^gP+-qG zWq#dzZ$2?P+1Rkg(=s#>7}ThSb;}yfBio-JoLF9enqL1tQ7smIp39pSXv6Pp9hzL> zKZEFb&x)r6H+T7IOY4um``YAzX3r9$GnUqeBs0BiowY|V?oDltH~SW}dycThcvVlI zyxO%g^4?p0Ph%a8a)g*y8%hgMC{L zQOS-@uiVhjr?m+|>um0D$41}jdoPvibOvZ~Miui~j`uAzt>$vWN4HIBaUD>EhQ0?VR~ z2Gu;?H=V>>&5kyvtdj`}6Lgo)vdUq{3jO1ejML@yHY3ua=g3?J(LQSjW7G4~(dik2 zwRu`i4poe0#bPzjSQ_dZ?B&YP=x~l_ZM2iLs935}%F87y=B*FdNOf##BoV99mLOxs zij{&~62yvTu{8zVHn}h{IhvPPyRY4D11OD=d?{HFEGDPJLI|1R@yUeBIQ?FmT~YEf zj!~jisQ2}@JFVsH;KameTxJ;?#{jg?h$XFB5-6*utI?0Ba%^T|bXvF7*Sj%IsPM&D zCaDlO!`c0<9upt!KRT6CIa?s;anQ1o7gEJ?UXaa9bIal;t1x|ZC_Bv~cT-oJlTyoq zC|2ZbCNElA<}Ey-wTTeoGox{das^wwK8_Gkxll!@qS1`mQ{T|i#AXI|@0vueK+xCZ zVO61+*BFRRrz$2_XQPv|kZNvp$J;vx`TAAMS9$pH;jx^CqukJu$+COZ%B6L9c5-5H zaM!+F5us)I8LK_Qk^TD%l9?(_9G=WH^qg^emrtBH+`sL}=%j4x=vo|{gH@%Bz-vWf zCO0isgFR>6Fn>Yz$g79moh%`nxq)f3ozQ0Dl(fcX`N-&4*>uv1)2>_{v>(~A@4yjI z&_#P1Joa_=peH^NAKoV%OjbDe`mQw>S)A07z0sXRxq-A=_P5(R&LLX$L*uDKG5*~& zpZC;Zi%+rkxcW+o-7}fDCSv=oUVhOTWS0*VK3c)|4W7S*}AxZ`OB8(Qrb0)ycxbz$kdId-9@s;qy}fIrdWBI zBhx-KN>wV2L@}7HG(_@qT8c~4IgY9Hu+@63ys#uRbmi+3`}AVL@18W3rY(5H;=(2G z8%l-LmnaP;&DJ_iJN=2eeKUm;-+=MhZN?Xd3m@{rwgLRa*Pd(&{F6KM(wn%Fn zH#@qj?fbcduJ}B$T{Y)DM6Q8flI|Vg4v{IJ$>ETQeAB_!=rXw}SDcRHd~>-u{gOAY;6MD5t}C_nj1rX3EW&;i9DKnAt^e z)oiSi$0&}WwK4&mi1INERxMUbC5kk0CSKI43KD52GND|ul;t_n!Y~4+ikPODT&fxI zSw109$YdcD+;~dBV>Xs!t9-eTB{Z7l6jD%Bu`1z&h2{h~Q!rYBBq>Z5H9?aR!Qp0F zsFrgDOd<(NrzBaIR9VwZn1#@*l|mk=49Ou{*N}(_glHi-j=%&dtqM3{W(h_n6yqJP zY9&o38poxIBI$&Uq-YEPs)}hC&0!XXBxIo?Nd(1^41owtMaF}0iso2~)C5745J56@ z?ZJtv3#y_M1Wi$@QZ?3V>m+F+aAN@vQWUYadj~_ao1UgV^~Tpo#Eu z{YFUFUw_?(Yp(jrWtU#`rE|_$chagAi|2K>Hu#+u8p)M>a%Oy}@4)W&w!Qi4i_bmv z_~w87?Jo~K@W7upLHek`XP$rgwYRpvzvp28$cF{8R`+ay$9-7fmp@bBm6u&|;g`-n zXE7SVXAJiGUI7xCGKF|K{O zVTy`1?agwi>`r(}7?<&-O{nBaI7QK!a90$2!dud832#|(#67&=jyu$%FUiqqe?fD^ zU24IfrYv!fRPv`NYuv5o0y)hcw=fB>R0!l0Z=AKpoJ7(m&hzN8$?mFlXQfF5&k5zZacg1KUyoba#_ z){_wHDk(o5;XDbxPDr>d5iFR`2B;avpD6^18P=c42dNn z!ZhA!iY09zzUT{7rsR58c7|xQBw}166HQtg$wO+IBhq6ZqO^mxVE;t(bhSbaU2 znkZXaT+&oT^);J{<7uLy9vBL2a{xrb&}@@qV`<&h8l=mUlO-z9>c(>8Gdx@0;?UD$QGsiKgUncjXX;wr zIKZ|d;cX2vd}J)8Seu&ddUkxOM0i^3I4M2`J}}VgXZYw?Tx5f7enyCm#(3J-R%en^ zW79><+1%{Fiqm5$kqfj1&2naZGN)PU+kC8;8k@@N)&@9~(qof3#T;y_vuOFLu>?=K zT3TEbpENFW{|J;5jpwdh{-sOKYdpI7_kVeH z3~%mrXZOAK_~u6+{^PG7d}$PKoYUOe($X_`PHWH~@Dk~Pp|Wq;DQB)b=kn`symYx~ zYX6?WJnnXA$;0oy_0p4nd*I>6cSLlj&*%2~{a&9#vHCbt$yaD^$AZPjoqGOPE4B%d?yR`oQ0w-7#9!Xt1FTbv~EF>2{e>IbX&-9g9y`ckV?OpR=ah zDQDxUlCiWjJ>IwTtrs>w^296e55_Ax>kc+G)CK)PpUb3Ii)HAF_Jzl-J@f3-SM>x~ zwOXn2LN%Y99N6>DtIs_3{OdahX0igt+T1>$&+qft8Kg)mVez%jUwQKS^=nu5HrS14 z?Xpe#(#71x~z=x>VmQPTY8qRUb}Y9vYtj4cuJ&- zm0V(K=+Lfhuf6=r8#@jRM{)vUtS*nw=W$w$g$pEW^EGuXT(N5P@k@JK15PtT=u$Zs zpBg^0_r14Yf9>t}_76^_N;1yboNl+HCK4)Y9)9il^F`2m9ZvNWlE>)3bskZToH_(9b8e?{g)n@B6m?_u=0^DQCFZ1-#27C zW4#42b$(qD>C^%N(xr5Ii6l{re!LhtXh?w2<%GmMoD%xOv= z#!Ru{L*s0{R17TWSykV6IEPf-=J%^_e?T}`A!%+!LUux!dwO?eY=-cc;xbXnvUZBo zsw6H6TGf5Rg6d1pAFkR7)3UB=)$Oy>B{0n9K%uUj7*WIAltW%UF7xH|~(4TJR` znBW`dcRP8B;uCTI>V|3=cdCcqA6Aq?zCv}cnTPK=YHs)Y=lUY?$Z(mT%G5V-G(R4z zU)dszm%Lh{jO*F4Qp-Fa&PW1V8BHqbO9BM8d93&r}H|8|N1J3&muNtPi-| z@<>wC2pd+${7uw!oU%}QCc-s1IB{ky%cr%L4!4}AgU(Xf-55YaeUlZPA}VFlOgLNF za)tETrJPJuMt4t|e3oF3kH&J-iqm4Uu_P1Soxm|Mk;7eHo5wCB@^o{vm#L)6L}hS9 z^0qm1@hWL`dMz4WO603LSsAHxwNM0U1+N#yEfy63ARs6-3)CJ(`vMU3RkRz|7hMOsc4Ff$=ktc^@;Mx@>K0h>vUC3BGqr80GO5J)PV zT^Dgx$nqvKIg%x;O)V_xb&*;kNxDs?R4S2{FxJe`grb?iajLA{R7uN}Ud)us8q~_h z;Ds#bvC^2Js?nn*D=EnuZgX2$a0ZN0E#?Zmj7zy9?Y40U(<)Wc<0rDooPg^kiS-9f z)q+ZbRV8%XSXfprRkB6a4X%*lbQxzH4pJ-^b6LJBnytD_+f2HIIqYhwN?^rgIwLYx zr_ExA2_Yk$^6u^166U<5V7ed~|F!~W2pKUDv}q)vimJ|MOUC+8 zV;LfaDTuSNQbkg#6;UTOg))Kr)r{p-#>zrWDf5sE(HsF@N!BO|S0xRiF&;6vjA(|` zHCYCiVJy8?1<`m}Pnj8Gd7`FbG%gyeOr_c)QiyN~mQo<@#te-WK~Nz~CMfWax}xA9 z*x1k_Nvg3uh5(Oe>~u1|a0-}}*(K2gNf>Jij4dU`t{f;+#%N=mg09LcP8crO*pMPY z^AS3fuNbSXWksJ|y`UM(IzbUdLZq>7T-Ow>wkTWE3Ch_0MB$2J?2p!K%f&F9q-yKR zRRBIjZ3Ua*j%!eT>FF5b#0ar<>H79I+T~m9>3ij|m&Oike)1saX>4q3YB}|c z-XLpIOr@zKLXgf5f3SBH_t-0vbKY_m0E62B6 z&TX-cHw@@9Y@aH?Z%O+}x{9Y?vE7^}LI_Efva>-T&GP2d3%F z;K;!|j?0xJS|cX~I!|3ar{1ihj@B+uath~X#&^7RV0a{(Kxo++oo!mWG`eeFpSf+t zf;AoWb5B{dsJip;z=3xL-kO?;mvd>mYt;#DP4+skIC^l<*t6xP@g_fpWW|~+Xq1yw zasq|C!8&|o`0)GNlX$LR(QHj~=PX&Uq_b@vLF!{ehn_t+ynjG-owRmgJ6#&u^Wwl@ zlF}1e*Yf2{j_>t!`@IeV&&Q_*#`=oZ$!c`>`*8^$j|ok*XmU5Ly8NQ6S1oPSOOxC8 zN0U1@zjHWc>h99AmEzQxVskjPbkZH{Shi-}Da+?}P(pFf&aDRzZGZa3{-`Nf-_-3f zxAb~FayF47dQV)~3{9CFpQf=XHM=v{QCw%#`H76~c zUzuqmb0aUlJ@(ch2?LpRs^+xN?#l2ml*m?F&&azjy<-w{Kl1G^JB zfu;_rpBFTMNXp2Ou))5=cwnnrWy{L@ccxw^F~1Z=sX14nkgxn=LJxQ*i* ze0APMr@LFQd~WORNR)C`l0@C{CoS+mLax0LA1UFvT{|N6y@H0kbLTbnbf3_RRs9XtId!9tY<}^@y?bUx-+pmR)^hxp zFFfzAi&w8*QP)Z-1TSv?>of0eJFqudNKFh!noj=mxy^o+LhM|x7q67#WsDjctYVaI z7VZA%^oXeuO_ofQOf`vnDtgPBHeX)Xvxsq2h702Z6TI`xg-)!#%a$D~mP!dB@%nq? z*%o_ed+*BTIwdQWDvd!uHKtjzLmy0KM{}yj$FdC#dXvRv#VbRoR2_*-P9@5&)-G@F zx>asF9w1CodGg@v&+Pc~Lz`#l?laE2;)1J|b~hp6%tf$bI-X~Uvg3%O7@G{-9zL1 z-|ZW&1bZ56)dGp9F_Uk8TRq{MKi9)0QK5hLD}UQIE$G&U6)knEmNzCF#e-9^Bx4W%?8tA#|vePfPyrqt@ zu|aGsRh%h|#YVR8e!B0_o;Viuu3mHFx+SZ=bne_B6FIo|@N3T}`VPD|6R*@?a>=~o zTkK?Jyzt)PD!U_|%{ki_c;Bt)pcm?Rozv+FVnLxn$e6FkOT;1v#2$r z7-BovvEz>&hZy_I-@#fy$chX`o>71#d>h9<{#kHv0(P(y>`%PNgvenrm|cJnXd8`Y zH2c!~R@Jrt`(AbT^k^|S=G$=2*U{^G>wWjVckg}ozN&ZUh(NjWQ}Rr@Yk8wOSuTyH zOWutG*RFm4N8c0mC#HY;Z!f>_vys;m)QT?7J3Vs3F zZTGKOdts+L)Dnnr%Uk@*e5xga7CH9R!6QfHvB^N+x{D%yYU-uggewXUwMU$*MP^($LUUCYk+)WWHs|L1Fuzn0BY*<{)FM#)v(jnSrX zh!Xtm>$+lHUS+mqXS2tiJ$T@|kGwIjG%s)IY;9}qiLtKO@>bE~cZD@M63H5eUpsW{ z@QcS%b7nBmDuVj!YHVE}Q1XURN@_xcEvb4~@baRUNzR=(emI!{l|>+}SvA-YX^$EP zPf-3qw6&`zOv;I3;_&3*k;#$cC*~UjBetqJ8jUd&t8%JYmiw*@Bi~ z-3^joAm#b=`0FnoIx(u3Rho%(u3g#N-Pjs1ExDXZPNhNHvC9_a7qwDyCP7iO%R?%v zt`tgw*YESV1m0jMh7bBfZk^E6ay~mba(Z|oYl4K1we)oKL}`xKR9iI|QgqQlFPBeE z&d*PbCX#tVDe9CIYj26Q_I8Pkp(vEZm2wl4DOJwo3Yt>V7=!frJRWy6gzhd1EL$$5 z^A@YyBbUV=m&Cgb|8llM+589rR*9)?$ zl#7Jm@drY&m>)SMwRoB`i>ZaoT&i3sm1KngrP&*me4&7k=UfzFBF8{^G^#@0vVW&dq!&-dp0{vJty3dX7#oOppT68lU-SbDVk-J3--);w01uPVF zMul!AqEjgvyUU?yhC>&dpf4Rt4RkbRR_=_077eq+f})R)vna*yBTps$Ec%X02h;zKOkaYBO~8zFri>(B^FWq2e$eye0U zU>$!%l~XoUPB`v;ET^4QZj;r2m3x==VlDI~G1B@;77Q^MD$FcNgLP@y22HY-s_G_T zD5@>cU>}*VDh7dV8q4Md#@1CByk&w}LJ`RRWWYe9dGz%(aEGEpG5TJa)Gg$y0mKal z(4i6wD{IRm z5gKI`*^OuwX}8ER7HUrmG(o`N3@~nC7W4|S18ss~&d`XK!NBC)F7%*X zDw;q{3V^k4(L6qrHPPiIli*kzT?8zF9ZMRjESCv}6*v;CN(y8pOAst_*kG7|HUR{H zOifVTG!Qa8L(x1Zy4+x-1If^&q7>4y0i>Xr8W@@sC3yt53oLms?MYIXRZ~Uoy3oh% zB+nrC7rF^^jl_?RPK$xCC^ zlctcfkCF`20$Yi!QZyIvlduRNSvWAO%c=$w4}_*_gbkyhDdegFjC(h%Ck%mS1sAOp zf%Ggw&!o~t%|@3ENLmmjk6RR3o>WyBm1?Mke5quBXvD@pY=W>b$lD9>hJo0gG?1LI z8SI5YCpb#c(cK2lRxOL-Sz0sEg#ilRI>V0K33TbST+npnzYD}42yKdn`C=*Ez%s+a zX9zm-Pk~62q(Ocmd84W51{;A+0FW4B1+eFVf69eINmJ1sd01Ds%k2?dJdhfJq^6EU zGyDhgL2m;%frs%y1h|a=3Q~deOc3G};xNht$wdePNJ-A*I0N~n(KW?3)FQB;Na=5zUMPB+ndNSr9TT^xY!puw&|Ac}C23_5<1HC3@0(xge)+t3>pk}_eFG0|?LVHVNk5^PkkXf93= z1h*R+Bc~!|P$o!Am&-tmI*=ux%FvADc1r@F%JGy6cAK0}=Vatg#Vv^fObeX4MFmVq9l4HjWom(I<&4%fP-S%Y{6;$pZTqB1CkL5+pbBTF1NG3tO1&k1rwmEAi>L;jIM)u+O6_Kgf#;U|)~{8uE|CAns!Y^x_X4v^h?A0CAh9kjesU2LF(!2Xw6m-$n(Y zhxQJZW6?V?S}JQwQ8r9RYXZ#+5QBw7?zBnA zy$v4=vm=Rt2}8R=*EZW4!F6CyT4mzNL(bgGCn5(~{F zx~%PJRs?o7L19N5_{AUzLINpt8Z4!bu5%$4z-w${XB0?d#Bi{CL+mKW zajs}#ZyU%X4%YLqkIkyzjOu)uSl7d^D$#{utT$KvR$x%rsR!~6iTbk%=XEAcInFnb zzYh?7NK-ZOn@^Y(Jl_;@NK#SROh@O#s#?VZhNJo|b*G3mJiFrIqk5WZ*Srnd755)x z)ve>ACRusWimx@JL0Z)=onD-mrPcSbizrmEb2LT=Iz>5tt%;>7Wd#e8th&6$rH=Ya z)G)2UUmV^UBUl{inJ;qdF{`X&75cs@1CS$#ZqT6hV7w6&$U{ z!f|b46X$MCoEPqyrRaox3xQAAi4DZr-+XO22cq0lZyXvP9-o{`WD1II!v==#wzT$i zuUT=W=jk_IJ28BEau$_=3WUpApzOjGSD?PeK!scKcNZQyb2T4Q~1FH$&Hq4^0kU`Ayay zF3%nLMtpGW#0^gl_X%AiFZ~by(B{h~LMIOXW##B6@-lf9$UtNp8kN3R+F!Qt4`^IiOMC7&Dg z9Qfhz+I6LuuVwjymOPluu4S%d`evROr7xg@k6pPebILdU_%hX>B3^q>e2&WX2!R(r z^nuJvj~_q6K5H7w`>t5OP&(iVcPYz+f1~JdBKJ`A@|fZJNICZG{&MJzkuLFyhR)}w z3qmJh9tq_-5|eCGm(;t!jiqH?Ii#L$DmHelUwAgu5za*mD`O)Ek0p*UrJjpcx=GjR z#;EyxT5gCPNhx7^d69H!R;2Uf3!2)zjMSPvQ<=2OTb?5AQbSKjPamGMIj*OV%B3mu)G<5O z*>0z&)9zSTRox#Zhex^2$g-F$%Z!Wl z(yr9;9O+3;nt^6sHgY8CZDZ$C6wk$21*{gAkyebt_$x=rC?8nU9+2dsAWQOp7Qk6Bl5n710x`^4dN*nVAQPfx_ z6!rRod^(+-p3A#Qixe7Tf{QTa@nRuYbVYbl=xsDf)uc0r(qviTSeXsQLP7xSpsDGi zoHAKPH^dGwfy9uV%W+JuY!vdT6i-qyFOy4ZV#$npn`l;wawUy2mE1!9_^bvdYPhLA zD2bFlJ8yEbKZ*{iyi#7_h`G5msbvaaVtAu5k1yZ`%U30>EaB4UCcr}QM}kJ7%(->Y zS-l=hcPVqF@&e)I@+HnGD!H@}k4y0(7!<(Jn54A&&JE&H#c@<`D-^gdyf)Q-*1 z_||nEYr3I#&F@M-K5=LvcHg%zS)a%!rz2NfcJt@P1BIb)k3NwcbRCN~$3`<_V!NeD z4?HtS+~3yaGg@!G_|Z^z=7GNpeDeGE(rb4dd_;bsfAG=9I2+8Qp7>^G|I4|rulZ!? z@mIS(cJ)t_pACh6@9BlE{RJ2rgh+CS$0>fg3Lv43o~=ZYU}`@}Z? zsMYWK#Y08c&`k3q3-*C+pDSMa{45g0gU=0KD!HHgs|_DJHnU;bV;7GfX8Z47^{MBc=`O!=^asqP`ajPO zUg^DXW!rx0V)2FVJioE@SmKk+Q!97T$NJ6THAkKg{P??kPjU5N@t^vN>Q%|9uGMO4 zZ0M=aT$3j*z0`edIJ&~LxfN+w=tmDe5j5uIxz_d6MH`x575{{br2l2K`19dNZlw9j ziN@`1!~Ife&A-1?c;Q)b-N}1>4EYha6!6Bb8vdWhJ3ln%{cr1Y*++`3Pk61&tnPW` zjzcT0mG2uXtT?36SyyEJY{SLFFZWEOJ3AR;VY+RN@*~n4dGFL*{-q--;e9>UIn}ae zZBdq1NE1JM(GzAjUbVoC9P_VeO;D3=&*OhRDI9ZMAI!avXtv7hsj|J|q9^a2dot4* z?cs}A4;M=r7d2faC5#i#o_L)mQtYU3K~Ey-U;fe9sS(p%w5W79^+bkl3V5`YYf?uK zzxKR%wJ$}@3d-=ZMm@BwGyC)yrv&@DI{XW#QxWbc$@ex>v*z$G3Z*o;#+5IKb8{K? z+K*Gi#d1@m6zXjpIg;`a`3x5*O&)ylSk8B`pKNO?FdNzf9?NgP^vvm*5bI@I+LQU_ z@I*SiEJkMYuRZc~DbN^`noCAQF{505!|K^XX}>%SrZ;uyKaIAiCdL|88uIAud^3AO z;V8||vd!+czWmt88=6i8+lkCvsxRuYR$d@bsnNqvo%V+Hs6U_LtrJIsotG`kqZ4*t z=;BrK*zCgG>4etQz)sJM=Q}~7@`mar`~jb61{>tG!8C}b3Tiq9 z_W8tkM$2%q)>yzz(Nha1RU+xxqX~b5t%WbWI3g!=a$;JOV#IXTw0KWQiZn8bR}SXA zZo9M5WH~(ps-rTV(+$G*_Vfj1ttnz8%X&VoWvA1IRTiUudphL}8KxL*aTjDpDZ9Nv zCOer_G&{VkLGmdlPn;YZGo=7s7F(NxVrxr`$&JsCjo6}SSRT>CP%%$#LCGwnPS05W zKCxu9^o58#Ba!*(g2)l9J3uJ2r>9_7W0_@*QF$S0dtCu_I$b96c`+Oda3Bo}1)XcQ za#>Qbqdpt75G8$jG*@s7f*tGWkPJ@N=8h&aDTDAd^|qQq2pVY%9H%Ew4QEs)7Ht5F z480X%y@I9KCKGM&h~<=?nl8~Q8*K0pg~^GTEJ>9;(N1rWXB&cSGMh{kN(Rqsh6&p> za@pcCW=E2sCkQ^g#W1!^xUE87F{p;dHjhdr4~|aE*pZfi*EVyyze!{nH)9veib}#p z!%?QmaFz;ykee*7wI`8QS>>no2Sv66jfDZ zxd{Jc1-&n@t0*9g8@a7T2locp77YH&55CGjXw8tOT1+SAW~V2{$0w$yXBW~1blJxf zX>9B4?(XUB?dk4pYYcf9Tgfg=jGj31`r$)|Uq5nuWPCbRG-!9IxvO{O1#8z~$F&qu z_h;c+-tt%V=npmE_b#TP%7t7eIX`*grC+=_Azb*r-@U9^@UQB>dJQ-F@>ICnb@bc! zKFeSAN7udAKlSWmPrZC%GNn+wolWSG-sK^6>ew6OYRl!D*7vq`U3L8j{6`);@LYb= zRb$_~>o30h{hyXUGWg{$e=wLh_WaLZ&3U7K!J<4d^SgK7|HCI<9oAb0KJoi&<*DB7 zgP*$dkk^B>P18~e|H{D+_F7kuF2{7I$vy{m=S9{m3J znwti1|45f7y7~QA5nuna`wq!+I%D)~SSP=5i0lZCK6=2qe(?6ePcL&{aOwJ(@$)-} zw5@BB_wKv%drupy)?RhpM^}}PJp0_Z8E9Si-nBjc^pU4tcwlJgp4mSf{PLc7Z{M}Q zx30}s96cQ$TzTw)uiSs|_3{NDyzc7AslOe%>z|&_lb&ezd*c^UBd?!4df?j+PrT<# zgM**DYE}P7H!qi8{=whReEfoi1NS}f*o*0|_|^S=btcuSl?} z)wb?<_IQb!O4?vEa2x>7&Ze>|qI5m>o=oI9mneq)(bm<05W~ZsayfBKnK9CH z$spr*afqoG<}zSYkuHWuZ(Z~AC#Eu#*Dw0Lp_U68V=mqxjEluLwE1E&Jt;AMuS+cz zOW8!OpxA^9-=46Q#Hon{;fnc%!Nt626G_DO3d1+(OZo_Iyc=M#x+QML&|lvvs@iiuHZ zBn1N@Z=~(Q#x{vlZF7U`xHXq5WTzbTaHCAIgnIIDjG-5kr)Lwk7zl)Y5g1depEqp% zqR1QeJWTV1oAp2=IiF7@GKHdP^P-n$46T$pJ&P{g1|t4Q^XjJ7Ao8n!LE{^CB9$+k z7C6c8)}T>3nTDkTI`H8}>G9bG&4n6;8dtS6MtIxOx_jR+(y46eG{uX4(J1BfnPj?< z*Dc271)5al?9}vvEO>*VKrq(Z*%0GN!w9WEStunkVE*?cmcgPE{hl9!{(YCbW(kRmaD z(bkob7LhXub3Jv!f=N!#NQ_V7OL8`!0;@F-+Jxxm7*#7|C*~6t@AHTKk;avcu>cGT z@yzd{vo7>UHCxWHLA9J?gF5rn zHWMAvfCfQ^kcW_lu+S?(;lK<;C!FYLuXJN5J}?ZeLUB4gaCC!@BnA#cp%@={1?s&B zQK;}NJc#%J(JSo;#rq%cm2QT|fnMnrcszp3`hVOZ^*;>ZA>6qCL5Mzp8~1;!SK0;@ z?uDGcf$+Z|+ymimj6(li5Z%`yZQ2XrRtUQx?8HTzwnOwrC;C~4ej38{5IzCnV-P+J z;e!yafhuf#(`JaqA;s?2}R_J6<)!J0Nu899U z6DQ8!SU~wgwJVIuUt?6LDk}U|cRWT>`(Onns0X;cDL(tofynt905lf;aPf8sU#HM7 zNkI(>_5B$dXHyi$?28yPx{BGG1FuZM*2)yTIZDvuVqMgr1MRT6Z$H8qa=#%Ach*4eJU_@Y=XeNZVrZzFKlM6@KZOzJ7r7D&YAb;esPy#3bM{o1 z&wr^>m)~0%#@^~MprjoVG+&(^NVE?+8BRZgwSETA(@!n`9Ch(Xp2i~)7MI{lwHAA8 zE%u%VdKDq|OoVEK`BHT-4hX6qSgnI|^4s3}8N&0xVtOZ>b-~${Y2@mu$yFT+UK6_g z1~&N0Q|xvR>GJ9b+rjVT;Cc zBc4#QGBgJ?e~TDLp?+E&bm{68e9?mzn5ZVdL@a@FBgO^&lKhQ)m4I-~&k6B6YHcuH z|Ag_92qIRS!W)(h8}(fcXU|}*7H)Ji?9No6{bq-(mjL5;!m59kiJy^8p!`anBiy+f z!YFU2%R%#J7){S2!)*0)Nn7=W!1QHs}5^=KUtu0p_Y@v=5L%10p#|bz4+=6#fTA6L62cG!hnqfyt&aw5eV`HIq9;3;O&tsaSw1jG zHi1F1i2-xN9p3~R_of!CfN$!6DCpyx`XH=^EMI)nT8LhP0ezj?v;k}kF}~>v{OFH^ zt*{x44~Sj^(GTJV{a^?5e+(=W$OY4&|9Z%!f_LGP-7-sOPC<2Z)L5yX20SU{jyY;zO~f1UcdsC3qE8W^!1&;s^KF{7E_tZcwO0(JyS|$Ln9fydK6x=sug*{Z(EM_ey|Cjo0Z4uj8YG8oT=|?A|Nwf?P1!5vT7C z0jKv$d*FeXJ-Ep1{tB~0KQy3u7P~v=5><}(*Ek-XLR2^&rfOi{1|Jm|xND;i(?yN( z{WZo1C^g2XD~yj(9C&D>5AdRefrs%}p*0o(c&q~lAo@6NQssTft?|CU!uu8E9qxB( zV*!9qF{(1)^Fl=iKv)z2AHkFrK^qAJec$D5x3@DjOO~p}U=zCw@!c6!?x<|g6*Y5F zYnL$OD1uB>={Q=w7PG+@mNwhxI#7auPm>^kAR8EV4vvmO^l-1V%~Lr;g77Sar(gvh zhXB*m{|JQIi4g>RTm<1;5Y9R%f^g1LA_(}12*NKtAA(Rl93tcKD>nMJx#ASRctQjL z9}hvmXG0K{91KCgr$P`GkAzm?6Co1w0f~k2T}WrXhunG(exjd>R&hf`H(rUGP*vR+ z3)(YU>~q-nbFR9>9`uoK`{!Lqa{%3x--ZO+Hl(rR7;Xf~JL(E#?N&&eqcd?gs^}|R_VWh-GBlQb`IR6E}43DXn zpdGX8+=W#9e9d40pZ_m3d;5FCW1Yiel@`aky;2j;N;QG#2=#vMLMnc~W|iK5)n@<2 z-asfoZ(#XB4kC9bJ?jYS%Xqw=Uzy^ohWXn=_J4=5@cznVU%_I_QY_wf25`iJ@3$uw z?!^fBfAeAi>$w%{0!op(yg3$s619yFwZr^W42pliYG#AOHk$~czsghqAXs;D0J)oD z@BpKtYEbk_K-jIVC=#*`D8dVGoRB)?PuorjZoGRdgfxB@5HZg)V69X08>l9S23_KcS zXrQu(oU(_VMinCi6&!F19(N8FDs~1GY<>|JU{fPlJ7z!y!%o2{9?j+nJQ`$fpt1$0 zEbTO^oI0Qa4Hs1Gj=#Y)gbyAt6^DPV?RVGPs~9)}Aoxxd0Qj{68TxIax0Dmx{{*Zb zVF+ye>Ny^I>0e>SZ((K(pK+4c%fL3Ush0tY02_Zxu+GNcUdNS?v&fR$m$2lPMV8!t zK9=0RgeA8uvgGzUmV}%|e%!u0FJZi!i^xeq`nFWcT8SQt+~#W(EDdUrQO zzu4V;TX&L!ES%rGyPF1XfHr?Y?_Nou>nhF{H5e-N-OB)2_gCIBz)JtSR^GK(m!Nl6 z3ZXUz|9%V}3@xWQE#PKH?&f`q)%UI37pow=2SWq{X$`v< z5M~IdO70)Rzwm>Q2O#5JL*#z^i~-7nfY9DyVO^ z2oZR4^li?laU9J6?!E(e?^+xX0(eKv&D|r=cXcq#-GaMrHQklfyaK0yAoy*4aWtbl z`e2X*eH(gwgWlU0OH$`9+KGzlV1VAu?{X^caw_hqt9V9H1;&mV4E#Ek0$p~EXKT+5 z?rE5$Kclzy?4x(|z*x8T5KiRg9^Cxqy7XC*=39DbAF6d@PxDrY-bwC9U@8r3rMr7B z_w9jrk`r(1p>fO0eYZFndr$_(YY5{7+AV!sPxI|Pw1BZcPZW@*_w+R1TFKbcgL*j= z%iTCMLl=03{$c}9u3=pJ$vc~O^iV#SBXLU)1$93I^|m0aF&EoUbCPzP;zq$^FZi-8~FS-GTt1QA5Y53IR0vHFQ|b-`P1x`P}rKo$#Na@9V-~ z8!=e)E{n&wQQt@PP^C(RTW|$XhF}!!w=El-ev;ge=YJVu)Mbdu_ANt4>miZ4j)b_CN0aVJP$xwYqp=^-?;xR<|L#@yP& zpjlj`vY|y9t0O6xVCL?P{HM|EF^i|mR2acTnRRj;HZee!sgn%Rie$iFbAiwYP2^uX zI(&kgB4R!Ug76!Cwm;Z4=tMDA_hGEisW1PXUMO%csoea%&bsE!-|0np@GJb1S~%yy zUtR~5zj>{tI8yHd9O-ufj?B9NNA_KSBlj-Ak$)H9D7*`BbiE63bibo<#HV&N=*4f= z_1lQxot-`g^ql7Vy3VK7ytdZ*xcrtro%{%?$9_&j7t z{N{;pgU`oMn=x)b!MK4PSj+dH*`z~qlhv#Z$ay03wjhE)xk&&{p>Aujx0HubzYC)t tC4M7Q_GbKyt!FS+>ds7=CFiN^k}`Hl8Mma2TT;d^DdSPu{{?WDbnt}cpXUGo literal 0 HcmV?d00001 From 068eb357d00d602b4fe744f461e8d3e2bff1a047 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 12:50:46 -0500 Subject: [PATCH 076/134] oh yeah wait I need to merge menu first --- src/gui/gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 0bb1397b5..5e7810d21 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1667,7 +1667,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { case GUI_FILE_SAVE_DMF: if (!dirExists(workingDirSong)) workingDirSong=getHomeDir(); hasOpened=fileDialog->openSave( - "Save File", + "Export DMF", {"DefleMask 1.1.3 module", "*.dmf"}, workingDirSong, dpiScale @@ -1676,7 +1676,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { case GUI_FILE_SAVE_DMF_LEGACY: if (!dirExists(workingDirSong)) workingDirSong=getHomeDir(); hasOpened=fileDialog->openSave( - "Save File", + "Export DMF", {"DefleMask 1.0/legacy module", "*.dmf"}, workingDirSong, dpiScale From bf6d98d3c1fdc80a7c9e2d16b572d2cef7c5b9a0 Mon Sep 17 00:00:00 2001 From: Lunathir <18320914+lunathir@users.noreply.github.com> Date: Sun, 17 Mar 2024 10:52:10 -0700 Subject: [PATCH 077/134] Resort window menu (#1793) * Resort window menu * Update gui.cpp * Update gui.cpp * Update gui.cpp --- src/gui/gui.cpp | 87 +++++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 5e7810d21..0d9a1f91d 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4350,15 +4350,15 @@ bool FurnaceGUI::loop() { ImGui::EndMenu(); } if (ImGui::BeginMenu(settings.capitalMenuBar?"Settings":"settings")) { - #ifndef IS_MOBILE +#ifndef IS_MOBILE if (ImGui::MenuItem("full screen",BIND_FOR(GUI_ACTION_FULLSCREEN),fullScreen)) { doAction(GUI_ACTION_FULLSCREEN); } - #endif +#endif if (ImGui::MenuItem("lock layout",NULL,lockLayout)) { lockLayout=!lockLayout; } - if (ImGui::MenuItem("visualizer",NULL,fancyPattern)) { + if (ImGui::MenuItem("pattern visualizer",NULL,fancyPattern)) { fancyPattern=!fancyPattern; e->enableCommandStream(fancyPattern); e->getCommandStream(cmdStream); @@ -4379,50 +4379,65 @@ bool FurnaceGUI::loop() { ImGui::EndMenu(); } if (ImGui::BeginMenu(settings.capitalMenuBar?"Window":"window")) { - if (ImGui::MenuItem("song information",BIND_FOR(GUI_ACTION_WINDOW_SONG_INFO),songInfoOpen)) songInfoOpen=!songInfoOpen; - if (ImGui::MenuItem("subsongs",BIND_FOR(GUI_ACTION_WINDOW_SUBSONGS),subSongsOpen)) subSongsOpen=!subSongsOpen; - if (ImGui::MenuItem("speed",BIND_FOR(GUI_ACTION_WINDOW_SPEED),speedOpen)) speedOpen=!speedOpen; - if (settings.unifiedDataView) { - if (ImGui::MenuItem("assets",BIND_FOR(GUI_ACTION_WINDOW_INS_LIST),insListOpen)) insListOpen=!insListOpen; - } else { - if (ImGui::MenuItem("instruments",BIND_FOR(GUI_ACTION_WINDOW_INS_LIST),insListOpen)) insListOpen=!insListOpen; - if (ImGui::MenuItem("wavetables",BIND_FOR(GUI_ACTION_WINDOW_WAVE_LIST),waveListOpen)) waveListOpen=!waveListOpen; - if (ImGui::MenuItem("samples",BIND_FOR(GUI_ACTION_WINDOW_SAMPLE_LIST),sampleListOpen)) sampleListOpen=!sampleListOpen; + if (ImGui::BeginMenu("song")) { + if (ImGui::MenuItem("song comments", BIND_FOR(GUI_ACTION_WINDOW_NOTES), notesOpen)) notesOpen = !notesOpen; + if (ImGui::MenuItem("song information", BIND_FOR(GUI_ACTION_WINDOW_SONG_INFO), songInfoOpen)) songInfoOpen = !songInfoOpen; + if (ImGui::MenuItem("subsongs", BIND_FOR(GUI_ACTION_WINDOW_SUBSONGS), subSongsOpen)) subSongsOpen = !subSongsOpen; + ImGui::Separator(); + if (ImGui::MenuItem("channels",BIND_FOR(GUI_ACTION_WINDOW_CHANNELS),channelsOpen)) channelsOpen=!channelsOpen; + if (ImGui::MenuItem("chip manager",BIND_FOR(GUI_ACTION_WINDOW_SYS_MANAGER),sysManagerOpen)) sysManagerOpen=!sysManagerOpen; + if (ImGui::MenuItem("orders",BIND_FOR(GUI_ACTION_WINDOW_ORDERS),ordersOpen)) ordersOpen=!ordersOpen; + if (ImGui::MenuItem("pattern",BIND_FOR(GUI_ACTION_WINDOW_PATTERN),patternOpen)) patternOpen=!patternOpen; + if (ImGui::MenuItem("pattern manager",BIND_FOR(GUI_ACTION_WINDOW_PAT_MANAGER),patManagerOpen)) patManagerOpen=!patManagerOpen; + ImGui::EndMenu(); } - if (ImGui::MenuItem("orders",BIND_FOR(GUI_ACTION_WINDOW_ORDERS),ordersOpen)) ordersOpen=!ordersOpen; - if (ImGui::MenuItem("pattern",BIND_FOR(GUI_ACTION_WINDOW_PATTERN),patternOpen)) patternOpen=!patternOpen; + if (ImGui::BeginMenu("assets")) { + if (settings.unifiedDataView) { + if (ImGui::MenuItem("assets", BIND_FOR(GUI_ACTION_WINDOW_INS_LIST), insListOpen)) insListOpen = !insListOpen; + } else { + if (ImGui::MenuItem("instruments", BIND_FOR(GUI_ACTION_WINDOW_INS_LIST), insListOpen)) insListOpen = !insListOpen; + if (ImGui::MenuItem("samples", BIND_FOR(GUI_ACTION_WINDOW_SAMPLE_LIST), sampleListOpen)) sampleListOpen = !sampleListOpen; + if (ImGui::MenuItem("wavetables", BIND_FOR(GUI_ACTION_WINDOW_WAVE_LIST), waveListOpen)) waveListOpen = !waveListOpen; + } + ImGui::Separator(); + if (ImGui::MenuItem("instrument editor", BIND_FOR(GUI_ACTION_WINDOW_INS_EDIT), insEditOpen)) insEditOpen = !insEditOpen; + if (ImGui::MenuItem("sample editor", BIND_FOR(GUI_ACTION_WINDOW_SAMPLE_EDIT), sampleEditOpen)) sampleEditOpen = !sampleEditOpen; + if (ImGui::MenuItem("wavetable editor", BIND_FOR(GUI_ACTION_WINDOW_WAVE_EDIT), waveEditOpen)) waveEditOpen = !waveEditOpen; + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("visualizers")) { + if (ImGui::MenuItem("oscilloscope (master)",BIND_FOR(GUI_ACTION_WINDOW_OSCILLOSCOPE),oscOpen)) oscOpen=!oscOpen; + if (ImGui::MenuItem("oscilloscope (per-channel)",BIND_FOR(GUI_ACTION_WINDOW_CHAN_OSC),chanOscOpen)) chanOscOpen=!chanOscOpen; + if (ImGui::MenuItem("oscilloscope (X-Y)",BIND_FOR(GUI_ACTION_WINDOW_XY_OSC),xyOscOpen)) xyOscOpen=!xyOscOpen; + if (ImGui::MenuItem("volume meter",BIND_FOR(GUI_ACTION_WINDOW_VOL_METER),volMeterOpen)) volMeterOpen=!volMeterOpen; + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("tempo")) { + if (ImGui::MenuItem("clock",BIND_FOR(GUI_ACTION_WINDOW_CLOCK),clockOpen)) clockOpen=!clockOpen; + if (ImGui::MenuItem("grooves",BIND_FOR(GUI_ACTION_WINDOW_GROOVES),groovesOpen)) groovesOpen=!groovesOpen; + if (ImGui::MenuItem("speed",BIND_FOR(GUI_ACTION_WINDOW_SPEED),speedOpen)) speedOpen=!speedOpen; + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("debug")) { + if (ImGui::MenuItem("log viewer",BIND_FOR(GUI_ACTION_WINDOW_LOG),logOpen)) logOpen=!logOpen; + if (ImGui::MenuItem("register view",BIND_FOR(GUI_ACTION_WINDOW_REGISTER_VIEW),regViewOpen)) regViewOpen=!regViewOpen; + if (ImGui::MenuItem("statistics",BIND_FOR(GUI_ACTION_WINDOW_STATS),statsOpen)) statsOpen=!statsOpen; + if (ImGui::MenuItem("memory composition",BIND_FOR(GUI_ACTION_WINDOW_MEMORY),memoryOpen)) memoryOpen=!memoryOpen; + ImGui::EndMenu(); + } + ImGui::Separator(); + if (ImGui::MenuItem("effect list",BIND_FOR(GUI_ACTION_WINDOW_EFFECT_LIST),effectListOpen)) effectListOpen=!effectListOpen; if (ImGui::MenuItem("mixer",BIND_FOR(GUI_ACTION_WINDOW_MIXER),mixerOpen)) mixerOpen=!mixerOpen; - if (ImGui::MenuItem("grooves",BIND_FOR(GUI_ACTION_WINDOW_GROOVES),groovesOpen)) groovesOpen=!groovesOpen; - if (ImGui::MenuItem("channels",BIND_FOR(GUI_ACTION_WINDOW_CHANNELS),channelsOpen)) channelsOpen=!channelsOpen; - if (ImGui::MenuItem("pattern manager",BIND_FOR(GUI_ACTION_WINDOW_PAT_MANAGER),patManagerOpen)) patManagerOpen=!patManagerOpen; - if (ImGui::MenuItem("chip manager",BIND_FOR(GUI_ACTION_WINDOW_SYS_MANAGER),sysManagerOpen)) sysManagerOpen=!sysManagerOpen; - if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen; - if (ImGui::MenuItem("song comments",BIND_FOR(GUI_ACTION_WINDOW_NOTES),notesOpen)) notesOpen=!notesOpen; - ImGui::Separator(); - if (ImGui::MenuItem("instrument editor",BIND_FOR(GUI_ACTION_WINDOW_INS_EDIT),insEditOpen)) insEditOpen=!insEditOpen; - if (ImGui::MenuItem("wavetable editor",BIND_FOR(GUI_ACTION_WINDOW_WAVE_EDIT),waveEditOpen)) waveEditOpen=!waveEditOpen; - if (ImGui::MenuItem("sample editor",BIND_FOR(GUI_ACTION_WINDOW_SAMPLE_EDIT),sampleEditOpen)) sampleEditOpen=!sampleEditOpen; - ImGui::Separator(); if (ImGui::MenuItem("play/edit controls",BIND_FOR(GUI_ACTION_WINDOW_EDIT_CONTROLS),editControlsOpen)) editControlsOpen=!editControlsOpen; if (ImGui::MenuItem("piano/input pad",BIND_FOR(GUI_ACTION_WINDOW_PIANO),pianoOpen)) pianoOpen=!pianoOpen; - if (ImGui::MenuItem("oscilloscope (master)",BIND_FOR(GUI_ACTION_WINDOW_OSCILLOSCOPE),oscOpen)) oscOpen=!oscOpen; - if (ImGui::MenuItem("oscilloscope (per-channel)",BIND_FOR(GUI_ACTION_WINDOW_CHAN_OSC),chanOscOpen)) chanOscOpen=!chanOscOpen; - if (ImGui::MenuItem("oscilloscope (X-Y)",BIND_FOR(GUI_ACTION_WINDOW_XY_OSC),xyOscOpen)) xyOscOpen=!xyOscOpen; - if (ImGui::MenuItem("volume meter",BIND_FOR(GUI_ACTION_WINDOW_VOL_METER),volMeterOpen)) volMeterOpen=!volMeterOpen; - if (ImGui::MenuItem("clock",BIND_FOR(GUI_ACTION_WINDOW_CLOCK),clockOpen)) clockOpen=!clockOpen; - if (ImGui::MenuItem("register view",BIND_FOR(GUI_ACTION_WINDOW_REGISTER_VIEW),regViewOpen)) regViewOpen=!regViewOpen; - if (ImGui::MenuItem("log viewer",BIND_FOR(GUI_ACTION_WINDOW_LOG),logOpen)) logOpen=!logOpen; - if (ImGui::MenuItem("statistics",BIND_FOR(GUI_ACTION_WINDOW_STATS),statsOpen)) statsOpen=!statsOpen; - if (ImGui::MenuItem("memory composition",BIND_FOR(GUI_ACTION_WINDOW_MEMORY),memoryOpen)) memoryOpen=!memoryOpen; + if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen; if (spoilerOpen) if (ImGui::MenuItem("spoiler",NULL,spoilerOpen)) spoilerOpen=!spoilerOpen; ImGui::EndMenu(); } if (ImGui::BeginMenu(settings.capitalMenuBar?"Help":"help")) { - if (ImGui::MenuItem("effect list",BIND_FOR(GUI_ACTION_WINDOW_EFFECT_LIST),effectListOpen)) effectListOpen=!effectListOpen; if (ImGui::MenuItem("debug menu",BIND_FOR(GUI_ACTION_WINDOW_DEBUG))) debugOpen=!debugOpen; if (ImGui::MenuItem("inspector")) inspectorOpen=!inspectorOpen; - if (ImGui::MenuItem("shader editor")) shaderEditor=!shaderEditor; if (ImGui::MenuItem("panic",BIND_FOR(GUI_ACTION_PANIC))) e->syncReset(); if (ImGui::MenuItem("about...",BIND_FOR(GUI_ACTION_WINDOW_ABOUT))) { aboutOpen=true; From b253bd862bd7e87965482a36a83641a7b3bc4e11 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 13:14:50 -0500 Subject: [PATCH 078/134] downgrade .dmf to export status --- src/gui/exportOptions.cpp | 34 ++++++++++++++++++++++++++++++++++ src/gui/gui.cpp | 15 +++++++++------ src/gui/gui.h | 5 ++++- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/gui/exportOptions.cpp b/src/gui/exportOptions.cpp index 65bbefbaa..5bbf84a78 100644 --- a/src/gui/exportOptions.cpp +++ b/src/gui/exportOptions.cpp @@ -251,6 +251,33 @@ void FurnaceGUI::drawExportCommand(bool onWindow) { } } +void FurnaceGUI::drawExportDMF(bool onWindow) { + exitDisabledTimer=1; + + ImGui::Text( + "export in DefleMask module format.\n" + "only do it if you really, really need to, or are downgrading an existing .dmf." + ); + + ImGui::Text("format version:"); + ImGui::RadioButton("1.1.3 and higher",&dmfExportVersion,0); + ImGui::RadioButton("1.0/legacy (0.12)",&dmfExportVersion,1); + + if (onWindow) { + ImGui::Separator(); + if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup(); + ImGui::SameLine(); + } + if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) { + if (dmfExportVersion==1) { + openFileDialog(GUI_FILE_SAVE_DMF_LEGACY); + } else { + openFileDialog(GUI_FILE_SAVE_DMF); + } + ImGui::CloseCurrentPopup(); + } +} + void FurnaceGUI::drawExport() { if (settings.exportOptionsLayout==1 || curExportType==GUI_EXPORT_NONE) { if (ImGui::BeginTabBar("ExportTypes")) { @@ -290,6 +317,10 @@ void FurnaceGUI::drawExport() { drawExportCommand(true); ImGui::EndTabItem(); } + if (ImGui::BeginTabItem("DMF")) { + drawExportDMF(true); + ImGui::EndTabItem(); + } ImGui::EndTabBar(); } } else switch (curExportType) { @@ -311,6 +342,9 @@ void FurnaceGUI::drawExport() { case GUI_EXPORT_CMD_STREAM: drawExportCommand(true); break; + case GUI_EXPORT_DMF: + drawExportDMF(true); + break; default: ImGui::Text("congratulations! you've unlocked a secret panel."); if (ImGui::Button("Toggle hidden systems")) { diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 0d9a1f91d..7226932e0 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4156,12 +4156,6 @@ bool FurnaceGUI::loop() { if (ImGui::MenuItem("save as...",BIND_FOR(GUI_ACTION_SAVE_AS))) { openFileDialog(GUI_FILE_SAVE); } - if (ImGui::MenuItem("save as .dmf (1.1.3+)...")) { - openFileDialog(GUI_FILE_SAVE_DMF); - } - if (ImGui::MenuItem("save as .dmf (1.0/legacy)...")) { - openFileDialog(GUI_FILE_SAVE_DMF_LEGACY); - } ImGui::Separator(); if (settings.exportOptionsLayout==0) { if (ImGui::BeginMenu("export audio...")) { @@ -4200,6 +4194,10 @@ bool FurnaceGUI::loop() { drawExportCommand(); ImGui::EndMenu(); } + if (ImGui::BeginMenu("export .dmf...")) { + drawExportDMF(); + ImGui::EndMenu(); + } } else if (settings.exportOptionsLayout==2) { if (ImGui::MenuItem("export audio...")) { curExportType=GUI_EXPORT_AUDIO; @@ -4237,6 +4235,10 @@ bool FurnaceGUI::loop() { curExportType=GUI_EXPORT_CMD_STREAM; displayExport=true; } + if (ImGui::MenuItem("export .dmf...")) { + curExportType=GUI_EXPORT_DMF; + displayExport=true; + } } else { if (ImGui::MenuItem("export...",BIND_FOR(GUI_ACTION_EXPORT))) { displayExport=true; @@ -7813,6 +7815,7 @@ FurnaceGUI::FurnaceGUI(): curTutorial(-1), curTutorialStep(0), audioExportType(0), + dmfExportVersion(0), curExportType(GUI_EXPORT_NONE) { // value keys valueKeys[SDLK_0]=0; diff --git a/src/gui/gui.h b/src/gui/gui.h index 8358be6d5..5b17f2d8a 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -586,7 +586,8 @@ enum FurnaceGUIExportTypes { GUI_EXPORT_ZSM, GUI_EXPORT_CMD_STREAM, GUI_EXPORT_AMIGA_VAL, - GUI_EXPORT_TEXT + GUI_EXPORT_TEXT, + GUI_EXPORT_DMF }; enum FurnaceGUIFMAlgs { @@ -2462,6 +2463,7 @@ class FurnaceGUI { // export options int audioExportType; + int dmfExportVersion; FurnaceGUIExportTypes curExportType; void drawExportAudio(bool onWindow=false); @@ -2470,6 +2472,7 @@ class FurnaceGUI { void drawExportAmigaVal(bool onWindow=false); void drawExportText(bool onWindow=false); void drawExportCommand(bool onWindow=false); + void drawExportDMF(bool onWindow=false); void drawSSGEnv(unsigned char type, const ImVec2& size); void drawWaveform(unsigned char type, bool opz, const ImVec2& size); From de444d926069f94cc0db4184141e6ff41c95baff Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 13:23:04 -0500 Subject: [PATCH 079/134] GUI: more menu reordering --- src/gui/gui.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 7226932e0..925b272c5 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4391,6 +4391,8 @@ bool FurnaceGUI::loop() { if (ImGui::MenuItem("orders",BIND_FOR(GUI_ACTION_WINDOW_ORDERS),ordersOpen)) ordersOpen=!ordersOpen; if (ImGui::MenuItem("pattern",BIND_FOR(GUI_ACTION_WINDOW_PATTERN),patternOpen)) patternOpen=!patternOpen; if (ImGui::MenuItem("pattern manager",BIND_FOR(GUI_ACTION_WINDOW_PAT_MANAGER),patManagerOpen)) patManagerOpen=!patManagerOpen; + if (ImGui::MenuItem("mixer",BIND_FOR(GUI_ACTION_WINDOW_MIXER),mixerOpen)) mixerOpen=!mixerOpen; + if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen; ImGui::EndMenu(); } if (ImGui::BeginMenu("assets")) { @@ -4429,15 +4431,14 @@ bool FurnaceGUI::loop() { } ImGui::Separator(); if (ImGui::MenuItem("effect list",BIND_FOR(GUI_ACTION_WINDOW_EFFECT_LIST),effectListOpen)) effectListOpen=!effectListOpen; - if (ImGui::MenuItem("mixer",BIND_FOR(GUI_ACTION_WINDOW_MIXER),mixerOpen)) mixerOpen=!mixerOpen; if (ImGui::MenuItem("play/edit controls",BIND_FOR(GUI_ACTION_WINDOW_EDIT_CONTROLS),editControlsOpen)) editControlsOpen=!editControlsOpen; if (ImGui::MenuItem("piano/input pad",BIND_FOR(GUI_ACTION_WINDOW_PIANO),pianoOpen)) pianoOpen=!pianoOpen; - if (ImGui::MenuItem("compatibility flags",BIND_FOR(GUI_ACTION_WINDOW_COMPAT_FLAGS),compatFlagsOpen)) compatFlagsOpen=!compatFlagsOpen; if (spoilerOpen) if (ImGui::MenuItem("spoiler",NULL,spoilerOpen)) spoilerOpen=!spoilerOpen; ImGui::EndMenu(); } if (ImGui::BeginMenu(settings.capitalMenuBar?"Help":"help")) { + if (ImGui::MenuItem("effect list",BIND_FOR(GUI_ACTION_WINDOW_EFFECT_LIST),effectListOpen)) effectListOpen=!effectListOpen; if (ImGui::MenuItem("debug menu",BIND_FOR(GUI_ACTION_WINDOW_DEBUG))) debugOpen=!debugOpen; if (ImGui::MenuItem("inspector")) inspectorOpen=!inspectorOpen; if (ImGui::MenuItem("panic",BIND_FOR(GUI_ACTION_PANIC))) e->syncReset(); From c1773e09f3117b4de557c7d8cac27daf1ac60083 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 11:49:20 +0900 Subject: [PATCH 080/134] Add NDS sound support TODO: - IMA ADPCM - Instrument color, icon --- CMakeLists.txt | 3 + src/engine/dispatchContainer.cpp | 4 + src/engine/engine.cpp | 3 +- src/engine/instrument.cpp | 4 + src/engine/instrument.h | 1 + src/engine/platform/nds.cpp | 540 +++++++++++++++++++++++++ src/engine/platform/nds.h | 100 +++++ src/engine/platform/sound/nds.cpp | 634 ++++++++++++++++++++++++++++++ src/engine/platform/sound/nds.hpp | 415 +++++++++++++++++++ src/engine/song.h | 1 + src/engine/sysDef.cpp | 13 + src/gui/about.cpp | 2 + src/gui/doAction.cpp | 6 +- src/gui/gui.h | 1 + src/gui/guiConst.cpp | 5 + src/gui/insEdit.cpp | 21 +- src/gui/presets.cpp | 15 + src/gui/settings.cpp | 1 + src/gui/sysConf.cpp | 22 ++ src/main.cpp | 2 + 20 files changed, 1786 insertions(+), 7 deletions(-) create mode 100644 src/engine/platform/nds.cpp create mode 100644 src/engine/platform/nds.h create mode 100644 src/engine/platform/sound/nds.cpp create mode 100644 src/engine/platform/sound/nds.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 581e1c2de..8425a78d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -609,6 +609,8 @@ src/engine/platform/sound/c140_c219.c src/engine/platform/sound/dave/dave.cpp +src/engine/platform/sound/nds.cpp + src/engine/platform/oplAInterface.cpp src/engine/platform/ym2608Interface.cpp src/engine/platform/ym2610Interface.cpp @@ -717,6 +719,7 @@ src/engine/platform/c140.cpp src/engine/platform/esfm.cpp src/engine/platform/powernoise.cpp src/engine/platform/dave.cpp +src/engine/platform/nds.cpp src/engine/platform/pcmdac.cpp src/engine/platform/dummy.cpp diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 7146e90c6..170c1ae95 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -85,6 +85,7 @@ #include "platform/esfm.h" #include "platform/powernoise.h" #include "platform/dave.h" +#include "platform/nds.h" #include "platform/dummy.h" #include "../ta-log.h" #include "song.h" @@ -661,6 +662,9 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do case DIV_SYSTEM_DAVE: dispatch=new DivPlatformDave; break; + case DIV_SYSTEM_NDS: + dispatch=new DivPlatformNDS; + break; case DIV_SYSTEM_DUMMY: dispatch=new DivPlatformDummy; break; diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 52b0879a5..235fda675 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -988,7 +988,8 @@ void DivEngine::delUnusedSamples() { i->type==DIV_INS_GA20 || i->type==DIV_INS_K053260 || i->type==DIV_INS_C140 || - i->type==DIV_INS_C219) { + i->type==DIV_INS_C219 || + i->type==DIV_INS_NDS) { if (i->amiga.initSample>=0 && i->amiga.initSampleamiga.initSample]=true; } diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 24126c340..cd30a648c 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -1098,6 +1098,10 @@ void DivInstrument::putInsData2(SafeWriter* w, bool fui, const DivSong* song, bo break; case DIV_INS_DAVE: break; + case DIV_INS_NDS: + featureSM=true; + if (amiga.useSample) featureSL=true; + break; case DIV_INS_MAX: break; case DIV_INS_NULL: diff --git a/src/engine/instrument.h b/src/engine/instrument.h index fd75a4d0f..d66ce25db 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -89,6 +89,7 @@ enum DivInstrumentType: unsigned short { DIV_INS_POWERNOISE=56, DIV_INS_POWERNOISE_SLOPE=57, DIV_INS_DAVE=58, + DIV_INS_NDS=59,/*temp*/ DIV_INS_MAX, DIV_INS_NULL }; diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp new file mode 100644 index 000000000..a92075bd1 --- /dev/null +++ b/src/engine/platform/nds.cpp @@ -0,0 +1,540 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "nds.h" +#include "../engine.h" +#include "../../ta-log.h" +#include + +#define CHIP_DIVIDER 32 +#define SAMPLE_DIVIDER 512 + +#define rRead8(a) (nds.read8(a)) +#define rWrite8(a,v) {if(!skipRegisterWrites) {nds.write8((a),(v)); regPool[(a)]=(v); if(dumpWrites) addWrite((a),(v)); }} +#define rWrite16(a,v) { \ + if(!skipRegisterWrites) { \ + nds.write16((a)>>1,(v)); \ + regPool[(a)+0]=(v)&0xff; \ + regPool[(a)+1]=((v)>>8)&0xff; \ + if(dumpWrites) addWrite((a)+0,(v)&0xff); \ + if(dumpWrites) addWrite((a)+1,((v)>>8)&0xff); \ + } \ +} + +#define rWrite32(a,v) { \ + if(!skipRegisterWrites) { \ + nds.write32((a)>>2,(v)); \ + regPool[(a)+0]=(v)&0xff; \ + regPool[(a)+1]=((v)>>8)&0xff; \ + regPool[(a)+2]=((v)>>16)&0xff; \ + regPool[(a)+3]=((v)>>24)&0xff; \ + if(dumpWrites) addWrite((a)+0,(v)&0xff); \ + if(dumpWrites) addWrite((a)+1,((v)>>8)&0xff); \ + if(dumpWrites) addWrite((a)+2,((v)>>16)&0xff); \ + if(dumpWrites) addWrite((a)+3,((v)>>24)&0xff); \ + } \ +} + +const char* regCheatSheetNDS[]={ + "CHx_Control", "000+x*10", + "CHx_Start", "004+x*10", + "CHx_Freq", "008+x*10", + "CHx_LoopStart", "00A+x*10", + "CHx_Length", "00C+x*10", + "Control", "100", + "Bias", "104", + "CAPx_Control", "108+x*1", + "CAPx_Dest", "110+x*8", + "CAPx_Length", "114+x*8", + NULL +}; + +const char** DivPlatformNDS::getRegisterSheet() { + return regCheatSheetNDS; +} + +void DivPlatformNDS::acquire(short** buf, size_t len) { + for (size_t i=0; i32767) lout=32767; + if (lout<-32768) lout=-32768; + if (rout>32767) rout=32767; + if (rout<-32768) rout=-32768; + buf[0][i]=lout; + buf[1][i]=rout; + + for (int i=0; i<16; i++) { + oscBuf[i]->data[oscBuf[i]->needle++]=(nds.chan_lout(i)+nds.chan_rout(i))>>1; + } + } +} + +inline u8 DivPlatformNDS::read_byte(u32 addr) { + if (addrcalcArp(chan[i].note,chan[i].std.arp.val)); + } + chan[i].freqChanged=true; + } + if (chan[i].std.pitch.had) { + if (chan[i].std.pitch.mode) { + chan[i].pitch2+=chan[i].std.pitch.val; + CLAMP_VAR(chan[i].pitch2,-32768,32767); + } else { + chan[i].pitch2=chan[i].std.pitch.val; + } + chan[i].freqChanged=true; + } + if ((i>=8) && (i<14)) { + if (chan[i].std.duty.had) { + chan[i].duty=chan[i].std.duty.val; + if ((!chan[i].pcm)) { // pulse + rWrite8(0x03+i*16,(rRead8(0x03+i*16)&0xe8)|(chan[i].duty&7)); + } + } + } + if (chan[i].std.panL.had) { // panning + chan[i].panning=0x40+chan[i].std.panL.val; + rWrite8(0x02+i*16,chan[i].panning); + } + if (chan[i].std.phaseReset.had) { + if ((chan[i].std.phaseReset.val==1) && chan[i].active) { + chan[i].audPos=0; + chan[i].setPos=true; + } + } + if (chan[i].setPos) { + // force keyon + chan[i].keyOn=true; + chan[i].setPos=false; + } else { + chan[i].audPos=0; + } + if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) { + unsigned char ctrl=0; + if (chan[i].pcm || i<8) { + DivSample* s=parent->getSample(chan[i].sample); + switch (s->depth) { + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: ctrl=0x40; break; + case DIV_SAMPLE_DEPTH_8BIT: ctrl=0x00; break; + case DIV_SAMPLE_DEPTH_16BIT: ctrl=0x20; break; + default: break; + } + double off=(s->centerRate>=1)?(8363.0/(double)s->centerRate):1.0; + chan[i].freq=0x10000-(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER)); + if (chan[i].freq<0) chan[i].freq=0; + if (chan[i].freq>65535) chan[i].freq=65535; + ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x08:0x10); + if (chan[i].keyOn) { + unsigned int start=0; + unsigned int loopStart=0; + unsigned int loopEnd=0; + unsigned int end=0; + if (chan[i].sample>=0 && chan[i].samplesong.sampleLen) { + start=sampleOff[chan[i].sample]; + end=s->getCurBufLen()/4; + } + if (chan[i].audPos>0) { + switch (s->depth) { + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: start+=chan[i].audPos/2; break; + case DIV_SAMPLE_DEPTH_8BIT: start+=chan[i].audPos; break; + case DIV_SAMPLE_DEPTH_16BIT: start+=chan[i].audPos*2; break; + default: break; + } + } + if (s->isLoopable()) { + switch (s->depth) { + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; + case DIV_SAMPLE_DEPTH_8BIT: loopStart=s->loopStart/4; loopEnd=(s->loopEnd-s->loopStart)/4; break; + case DIV_SAMPLE_DEPTH_16BIT: loopStart=s->loopStart/2; loopEnd=(s->loopEnd-s->loopStart)/2; break; + default: break; + } + loopEnd=MIN(loopEnd,0x3fffff); + loopStart=MIN(loopStart,0xffff); + rWrite16(0x0a+i*16,loopStart&0xffff); + rWrite32(0x0c+i*16,loopEnd&0x3fffff); + } else { + end=MIN(end,0x3fffff); + rWrite16(0x0a+i*16,0); + rWrite32(0x0c+i*16,end&0x3fffff); + } + rWrite8(0x03+i*16,ctrl&~0x80); // force keyoff first + rWrite32(0x04+i*16,start&0x7fffffc); + } + } else { + chan[i].freq=0x10000-(parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,8)); + if (chan[i].freq<0) chan[i].freq=0; + if (chan[i].freq>65535) chan[i].freq=65535; + ctrl=(chan[i].active?0xe8:0)|(chan[i].duty&7); + rWrite8(0x03+i*16,ctrl&~0x80); // force keyoff first + } + if (!chan[i].std.vol.had) { + chan[i].outVol=chan[i].vol; + writeOutVol(i); + } + chan[i].keyOn=false; + if (chan[i].keyOff) { + chan[i].keyOff=false; + } + if (chan[i].freqChanged) { + rWrite16(0x08+i*16,chan[i].freq&0xffff); + chan[i].freqChanged=false; + } + rWrite8(0x03+i*16,ctrl); + } + } +} + +int DivPlatformNDS::dispatch(DivCommand c) { + switch (c.cmd) { + case DIV_CMD_NOTE_ON: { + DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_NDS); + if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample || (c.chan<8)) { + chan[c.chan].pcm=true; + } + if (chan[c.chan].pcm || (c.chan<8)) { + chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:127; + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; + c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } + if (chan[c.chan].sample<0 || chan[c.chan].sample>=parent->song.sampleLen) { + chan[c.chan].sample=-1; + } + } else { + chan[c.chan].macroVolMul=127; + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); + } + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + } + chan[c.chan].active=true; + chan[c.chan].keyOn=true; + chan[c.chan].macroInit(ins); + if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { + chan[c.chan].outVol=chan[c.chan].vol; + } + break; + } + case DIV_CMD_NOTE_OFF: + chan[c.chan].sample=-1; + chan[c.chan].active=false; + chan[c.chan].keyOff=true; + chan[c.chan].macroInit(NULL); + break; + case DIV_CMD_NOTE_OFF_ENV: + case DIV_CMD_ENV_RELEASE: + chan[c.chan].std.release(); + break; + case DIV_CMD_INSTRUMENT: + if (chan[c.chan].ins!=c.value || c.value2==1) { + chan[c.chan].ins=c.value; + } + break; + case DIV_CMD_VOLUME: + if (chan[c.chan].vol!=c.value) { + chan[c.chan].vol=c.value; + if (!chan[c.chan].std.vol.has) { + chan[c.chan].outVol=c.value; + writeOutVol(c.chan); + } + } + break; + case DIV_CMD_GET_VOLUME: + if (chan[c.chan].std.vol.has) { + return chan[c.chan].vol; + } + return chan[c.chan].outVol; + break; + case DIV_CMD_PANNING: + chan[c.chan].panning=MIN(parent->convertPanSplitToLinearLR(c.value,c.value2,127),127); + rWrite8(0x02+c.chan*16,chan[c.chan].panning); + break; + case DIV_CMD_PITCH: + chan[c.chan].pitch=c.value; + chan[c.chan].freqChanged=true; + break; + case DIV_CMD_NOTE_PORTA: { + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); + bool return2=false; + if (destFreq>chan[c.chan].baseFreq) { + chan[c.chan].baseFreq+=c.value; + if (chan[c.chan].baseFreq>=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } else { + chan[c.chan].baseFreq-=c.value; + if (chan[c.chan].baseFreq<=destFreq) { + chan[c.chan].baseFreq=destFreq; + return2=true; + } + } + chan[c.chan].freqChanged=true; + if (return2) { + chan[c.chan].inPorta=false; + return 2; + } + break; + } + case DIV_CMD_STD_NOISE_MODE: + if ((c.chan>=8) && (c.chan<14) && (!chan[c.chan].pcm)) { // pulse + chan[c.chan].duty=c.value; + rWrite8(0x03+c.chan*16,(rRead8(0x03+c.chan*16)&0xe8)|(chan[c.chan].duty&7)); + } + break; + case DIV_CMD_LEGATO: { + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].freqChanged=true; + chan[c.chan].note=c.value; + break; + } + case DIV_CMD_PRE_PORTA: + if (chan[c.chan].active && c.value2) { + if (parent->song.resetMacroOnPorta) chan[c.chan].macroInit(parent->getIns(chan[c.chan].ins,DIV_INS_NDS)); + } + if (!chan[c.chan].inPorta && c.value && !parent->song.brokenPortaArp && chan[c.chan].std.arp.will && !NEW_ARP_STRAT) chan[c.chan].baseFreq=NOTE_PERIODIC(chan[c.chan].note); + chan[c.chan].inPorta=c.value; + break; + case DIV_CMD_SAMPLE_POS: + if (chan[c.chan].pcm || (c.chan<8)) { + chan[c.chan].audPos=c.value; + chan[c.chan].setPos=true; + } + break; + case DIV_CMD_GET_VOLMAX: + return 127; + break; + case DIV_CMD_MACRO_OFF: + chan[c.chan].std.mask(c.value,true); + break; + case DIV_CMD_MACRO_ON: + chan[c.chan].std.mask(c.value,false); + break; + case DIV_CMD_MACRO_RESTART: + chan[c.chan].std.restart(c.value); + break; + default: + break; + } + return 1; +} + +void DivPlatformNDS::writeOutVol(int ch) { + unsigned char val=isMuted[ch]?0:chan[ch].outVol; + rWrite8(0x00+ch*16,val); +} + +void DivPlatformNDS::muteChannel(int ch, bool mute) { + isMuted[ch]=mute; + writeOutVol(ch); +} + +void DivPlatformNDS::forceIns() { + for (int i=0; i<16; i++) { + chan[i].insChanged=true; + chan[i].freqChanged=true; + chan[i].sample=-1; + + rWrite8(0x02+i*16,chan[i].panning); + } +} + +void* DivPlatformNDS::getChanState(int ch) { + return &chan[ch]; +} + +DivMacroInt* DivPlatformNDS::getChanMacroInt(int ch) { + return &chan[ch].std; +} + +unsigned short DivPlatformNDS::getPan(int ch) { + return parent->convertPanLinearToSplit(chan[ch].panning,8,127); +} + +DivDispatchOscBuffer* DivPlatformNDS::getOscBuffer(int ch) { + return oscBuf[ch]; +} + +void DivPlatformNDS::reset() { + memset(regPool,0,288); + nds.reset(); + rWrite32(0x100,0x807f); // enable keyon + rWrite32(0x104,0x200); // initialize bias + for (int i=0; i<16; i++) { + chan[i]=DivPlatformNDS::Channel(); + chan[i].std.setEngine(parent); + rWrite32(0x00+i*16,0x40007f); + } +} + +int DivPlatformNDS::getOutputCount() { + return 2; +} + +void DivPlatformNDS::notifyInsChange(int ins) { + for (int i=0; i<16; i++) { + if (chan[i].ins==ins) { + chan[i].insChanged=true; + } + } +} + +void DivPlatformNDS::notifyWaveChange(int wave) { + // TODO when wavetables are added + // TODO they probably won't be added unless the samples reside in RAM +} + +void DivPlatformNDS::notifyInsDeletion(void* ins) { + for (int i=0; i<16; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + +void DivPlatformNDS::poke(unsigned int addr, unsigned short val) { + rWrite8(addr,val); +} + +void DivPlatformNDS::poke(std::vector& wlist) { + for (DivRegWrite& i: wlist) rWrite8(i.addr,i.val); +} + +unsigned char* DivPlatformNDS::getRegisterPool() { + return regPool; +} + +int DivPlatformNDS::getRegisterPoolSize() { + return 288; +} + +float DivPlatformNDS::getPostAmp() { + return 1.0f; +} + +const void* DivPlatformNDS::getSampleMem(int index) { + return index == 0 ? sampleMem : NULL; +} + +size_t DivPlatformNDS::getSampleMemCapacity(int index) { + return index == 0 ? (isDSi?16777216:4194304) : 0; +} + +size_t DivPlatformNDS::getSampleMemUsage(int index) { + return index == 0 ? sampleMemLen : 0; +} + +bool DivPlatformNDS::isSampleLoaded(int index, int sample) { + if (index!=0) return false; + if (sample<0 || sample>255) return false; + return sampleLoaded[sample]; +} + +void DivPlatformNDS::renderSamples(int sysID) { + memset(sampleMem,0,16777216); + memset(sampleOff,0,256*sizeof(unsigned int)); + memset(sampleLoaded,0,256*sizeof(bool)); + + size_t memPos=0; + for (int i=0; isong.sampleLen; i++) { + DivSample* s=parent->song.sample[i]; + if (!s->renderOn[0][sysID]) { + sampleOff[i]=0; + continue; + } + + int length=s->getCurBufLen(); + unsigned char* src=(unsigned char*)s->getCurBuf(); + int actualLength=MIN((int)(getSampleMemCapacity()-memPos),length); + if (actualLength>0) { + memcpy(&sampleMem[memPos],src,actualLength); + sampleOff[i]=memPos; + memPos+=length; + } + if (actualLengthrate=rate; + } +} + +int DivPlatformNDS::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) { + parent=p; + dumpWrites=false; + skipRegisterWrites=false; + + for (int i=0; i<16; i++) { + isMuted[i]=false; + oscBuf[i]=new DivDispatchOscBuffer; + } + sampleMem=new unsigned char[16777216]; + sampleMemLen=0; + nds.reset(); + setFlags(flags); + reset(); + + return 16; +} + +void DivPlatformNDS::quit() { + delete[] sampleMem; + for (int i=0; i<16; i++) { + delete oscBuf[i]; + } +} diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h new file mode 100644 index 000000000..1861b97b9 --- /dev/null +++ b/src/engine/platform/nds.h @@ -0,0 +1,100 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _NDS_H +#define _NDS_H + +#include "../dispatch.h" +#include "sound/nds.hpp" + +using namespace nds_sound_emu; + +class DivPlatformNDS: public DivDispatch, public nds_sound_intf { + struct Channel: public SharedChannel { + unsigned int audPos; + int sample, wave; + int panning, duty; + bool setPos, pcm; + int macroVolMul; + Channel(): + SharedChannel(127), + audPos(0), + sample(-1), + wave(-1), + panning(8), + duty(0), + setPos(false), + pcm(false), + macroVolMul(64) {} + }; + Channel chan[16]; + DivDispatchOscBuffer* oscBuf[16]; + bool isMuted[16]; + bool isDSi; + unsigned int sampleOff[256]; + bool sampleLoaded[256]; + + unsigned char* sampleMem; + size_t sampleMemLen; + nds_sound_t nds; + unsigned char regPool[288]; + friend void putDispatchChip(void*,int); + friend void putDispatchChan(void*,int,int); + + virtual inline u8 read_byte(u32 addr) override; + virtual inline void write_byte(u32 addr, u8 data) override; + + public: + void acquire(short** buf, size_t len); + int dispatch(DivCommand c); + void* getChanState(int chan); + DivMacroInt* getChanMacroInt(int ch); + unsigned short getPan(int chan); + DivDispatchOscBuffer* getOscBuffer(int chan); + unsigned char* getRegisterPool(); + int getRegisterPoolSize(); + void reset(); + void forceIns(); + void tick(bool sysTick=true); + void muteChannel(int ch, bool mute); + float getPostAmp(); + int getOutputCount(); + void notifyInsChange(int ins); + void notifyWaveChange(int wave); + void notifyInsDeletion(void* ins); + void poke(unsigned int addr, unsigned short val); + void poke(std::vector& wlist); + const char** getRegisterSheet(); + const void* getSampleMem(int index = 0); + size_t getSampleMemCapacity(int index = 0); + size_t getSampleMemUsage(int index = 0); + bool isSampleLoaded(int index, int sample); + void renderSamples(int chipID); + void setFlags(const DivConfig& flags); + int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); + void quit(); + DivPlatformNDS(): + DivDispatch(), + nds_sound_intf(), + nds(*this) {} + private: + void writeOutVol(int ch); +}; + +#endif diff --git a/src/engine/platform/sound/nds.cpp b/src/engine/platform/sound/nds.cpp new file mode 100644 index 000000000..67c45a884 --- /dev/null +++ b/src/engine/platform/sound/nds.cpp @@ -0,0 +1,634 @@ +/* + +============================================================================ + +NDS sound emulator +by cam900 + +This file is licensed under zlib license. + +============================================================================ + +zlib License + +(C) 2024-present cam900 and contributors + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +============================================================================ +TODO: +- needs to further verifications from real hardware + +Tech info: https://problemkaputt.de/gbatek.htm + +*/ + +#include "nds.hpp" + +namespace nds_sound_emu +{ + void nds_sound_t::reset() + { + for (channel_t &elem : m_channel) + elem.reset(); + for (capture_t &elem : m_capture) + elem.reset(); + + m_control = 0; + m_bias = 0; + m_loutput = 0; + m_routput = 0; + } + + void nds_sound_t::tick(s32 cycle) + { + m_loutput = m_routput = (m_bias & 0x3ff); + if (!enable()) + return; + + // mix outputs + s32 lmix = 0, rmix = 0; + for (u8 i = 0; i < 16; i++) + { + channel_t &channel = m_channel[i]; + channel.update(cycle); + // bypass mixer + if (((i == 1) && (mix_ch1())) || ((i == 3) && (mix_ch3()))) + continue; + + lmix += channel.loutput(); + rmix += channel.routput(); + } + + // send mixer output to capture + m_capture[0].update(lmix, cycle); + m_capture[1].update(rmix, cycle); + + // select left/right output source + switch (lout_from()) + { + case 0: // left mixer + break; + case 1: // channel 1 + lmix = m_channel[1].loutput(); + break; + case 2: // channel 3 + lmix = m_channel[3].loutput(); + break; + case 3: // channel 1 + 3 + lmix = m_channel[1].loutput() + m_channel[3].loutput(); + break; + } + + switch (rout_from()) + { + case 0: // right mixer + break; + case 1: // channel 1 + rmix = m_channel[1].routput(); + break; + case 2: // channel 3 + rmix = m_channel[3].routput(); + break; + case 3: // channel 1 + 3 + rmix = m_channel[1].routput() + m_channel[3].routput(); + break; + } + + // adjust master volume + lmix = (lmix * mvol()) >> 13; + rmix = (rmix * mvol()) >> 13; + + // add bias and clip output + m_loutput = clamp((lmix + (m_bias & 0x3ff)), 0, 0x3ff); + m_routput = clamp((rmix + (m_bias & 0x3ff)), 0, 0x3ff); + } + + u8 nds_sound_t::read8(u32 addr) + { + return bitfield(read32(addr >> 2), bitfield(addr, 0, 2) << 3, 8); + } + + u16 nds_sound_t::read16(u32 addr) + { + return bitfield(read32(addr >> 1), bitfield(addr, 0) << 4, 16); + } + + u32 nds_sound_t::read32(u32 addr) + { + addr <<= 2; // word address + + switch (addr & 0x100) + { + case 0x000: + if ((addr & 0xc) == 0) + return m_channel[bitfield(addr, 4, 4)].control(); + break; + case 0x100: + switch (addr & 0xff) + { + case 0x00: + return m_control; + case 0x04: + return m_bias; + case 0x08: + return m_capture[0].control() | (m_capture[1].control() << 8); + case 0x10: + case 0x18: + return m_capture[bitfield(addr, 3)].dstaddr(); + default: + break; + } + break; + } + return 0; + } + + void nds_sound_t::write8(u32 addr, u8 data) + { + const u8 bit = bitfield(addr, 0, 2); + const u32 in = u32(data) << (bit << 3); + const u32 in_mask = 0xff << (bit << 3); + write32(addr >> 2, in, in_mask); + } + + void nds_sound_t::write16(u32 addr, u16 data, u16 mask) + { + const u8 bit = bitfield(addr, 0); + const u32 in = u32(data) << (bit << 4); + const u32 in_mask = u32(mask) << (bit << 4); + write32(addr >> 1, in, in_mask); + } + + void nds_sound_t::write32(u32 addr, u32 data, u32 mask) + { + addr <<= 2; // word address + + switch (addr & 0x100) + { + case 0x000: + m_channel[bitfield(addr, 4, 4)].write(bitfield(addr, 2, 2), data, mask); + break; + case 0x100: + switch (addr & 0xff) + { + case 0x00: + m_control = (m_control & ~mask) | (data & mask); + break; + case 0x04: + mask &= 0x3ff; + m_bias = (m_bias & ~mask) | (data & mask); + break; + case 0x08: + if (bitfield(mask, 0, 8)) + m_capture[0].control_w(data & 0xff); + if (bitfield(mask, 8, 8)) + m_capture[1].control_w((data >> 8) & 0xff); + break; + case 0x10: + case 0x14: + case 0x18: + case 0x1c: + m_capture[bitfield(addr, 3)].addrlen_w(bitfield(addr, 2), data, mask); + break; + default: + break; + } + break; + } + } + + // channels + void nds_sound_t::channel_t::reset() + { + m_control = 0; + m_sourceaddr = 0; + m_freq = 0; + m_loopstart = 0; + m_length = 0; + + m_playing = false; + m_adpcm_out = 0; + m_adpcm_index = 0; + m_prev_adpcm_out = 0; + m_prev_adpcm_index = 0; + m_cur_addr = 0; + m_cur_state = 0; + m_cur_bitaddr = 0; + m_delay = 0; + m_sample = 0; + m_lfsr = 0x7fff; + m_lfsr_out = 0x7fff; + m_counter = 0x10000; + m_output = 0; + m_loutput = 0; + m_routput = 0; + } + + void nds_sound_t::channel_t::write(u32 offset, u32 data, u32 mask) + { + const u32 old = m_control; + switch (offset & 3) + { + case 0: // Control/Status + m_control = (m_control & ~mask) | (data & mask); + if (bitfield(old ^ m_control, 31)) + { + if (busy()) + keyon(); + else if (!busy()) + keyoff(); + } + // reset hold flag + if (!m_playing && !hold()) + { + m_sample = m_lfsr_out = 0; + m_output = m_loutput = m_routput = 0; + } + break; + case 1: // Source address + mask &= 0x7ffffff; + m_sourceaddr = (m_sourceaddr & ~mask) | (data & mask); + break; + case 2: // Frequency, Loopstart + if (bitfield(mask, 0, 16)) + m_freq = (m_freq & bitfield(~mask, 0, 16)) | (bitfield(data & mask, 0, 16)); + if (bitfield(mask, 16, 16)) + m_loopstart = (m_loopstart & bitfield(~mask, 16, 16)) | (bitfield(data & mask, 16, 16)); + break; + case 3: // Length + mask &= 0x3fffff; + m_length = (m_length & ~mask) | (data & mask); + break; + } + } + + void nds_sound_t::channel_t::keyon() + { + if (!m_playing) + { + m_playing = true; + m_delay = format() == 2 ? 11 : 3; // 3 (11 for ADPCM) delay for playing sample + m_cur_bitaddr = m_cur_addr = 0; + m_cur_state = (format() == 2) ? STATE_ADPCM_LOAD : ((m_loopstart == 0) ? STATE_POST_LOOP : STATE_PRE_LOOP); + m_counter = 0x10000; + m_sample = 0; + m_lfsr_out = 0x7fff; + m_lfsr = 0x7fff; + } + } + + + void nds_sound_t::channel_t::keyoff() + { + if (m_playing) + { + if (busy()) + m_control &= ~(1 << 31); + if (!hold()) + { + m_sample = m_lfsr_out = 0; + m_output = m_loutput = m_routput = 0; + } + + m_playing = false; + } + } + + void nds_sound_t::channel_t::update(s32 cycle) + { + if (m_playing) + { + // get output + fetch(); + m_counter -= cycle; + while (m_counter <= m_freq) + { + // advance + advance(); + m_counter += 0x10000 - m_freq; + } + m_output = (m_sample * volume()) >> (7 + voldiv()); + m_loutput = (m_output * lvol()) >> 7; + m_routput = (m_output * rvol()) >> 7; + } + } + + void nds_sound_t::channel_t::fetch() + { + if (m_playing) + { + // fetch samples + switch (format()) + { + case 0: // PCM8 + m_sample = s16(m_host.m_intf.read_byte(addr()) << 8); + break; + case 1: // PCM16 + m_sample = m_host.m_intf.read_word(addr()); + break; + case 2: // ADPCM + m_sample = m_cur_state == STATE_ADPCM_LOAD ? 0 : m_adpcm_out; + break; + case 3: // PSG or Noise + m_sample = 0; + if (m_psg) // psg + m_sample = (duty() == 7) ? -0x8000 : ((m_cur_bitaddr < s32(u32(7) - duty())) ? -0x8000 : 0x7fff); + else if (m_noise) // noise + m_sample = m_lfsr_out; + break; + } + } + + // apply delay + if (format() != 3 && m_delay > 0) + m_sample = 0; + } + + void nds_sound_t::channel_t::advance() + { + if (m_playing) + { + // advance bit address + switch (format()) + { + case 0: // PCM8 + m_cur_bitaddr += 8; + break; + case 1: // PCM16 + m_cur_bitaddr += 16; + break; + case 2: // ADPCM + if (m_cur_state == STATE_ADPCM_LOAD) // load ADPCM data + { + if (m_cur_bitaddr == 0) + m_prev_adpcm_out = m_adpcm_out = m_host.m_intf.read_word(addr()); + if (m_cur_bitaddr == 16) + m_prev_adpcm_index = m_adpcm_index = clamp(m_host.m_intf.read_byte(addr()) & 0x7f, 0, 88); + } + else // decode ADPCM + { + const u8 input = bitfield(m_host.m_intf.read_byte(addr()), m_cur_bitaddr & 4, 4); + s32 diff = ((bitfield(input, 0, 3) * 2 + 1) * m_host.adpcm_diff_table[m_adpcm_index] / 8); + if (bitfield(input, 3)) diff = -diff; + m_adpcm_out = clamp(m_adpcm_out + diff, -0x8000, 0x7fff); + m_adpcm_index = clamp(m_adpcm_index + m_host.adpcm_index_table[bitfield(input, 0, 3)], 0, 88); + } + m_cur_bitaddr += 4; + break; + case 3: // PSG or Noise + if (m_psg) // psg + m_cur_bitaddr = (m_cur_bitaddr + 1) & 7; + else if (m_noise) // noise + { + if (bitfield(m_lfsr, 1)) + { + m_lfsr = (m_lfsr >> 1) ^ 0x6000; + m_lfsr_out = -0x8000; + } + else + { + m_lfsr >>= 1; + m_lfsr_out = 0x7fff; + } + } + break; + } + + // address update + if (format() != 3) + { + // adjust delay + m_delay--; + + // update address, loop + while (m_cur_bitaddr >= 32) + { + // already loaded? + if (format() == 2 && m_cur_state == STATE_ADPCM_LOAD) + { + m_cur_state = m_loopstart == 0 ? STATE_POST_LOOP : STATE_PRE_LOOP; + } + m_cur_addr++; + if (m_cur_state == STATE_PRE_LOOP && m_cur_addr >= m_loopstart) + { + m_cur_state = STATE_POST_LOOP; + m_cur_addr = 0; + if (format() == 2) + { + m_prev_adpcm_out = m_adpcm_out; + m_prev_adpcm_index = m_adpcm_index; + } + } + else if (m_cur_state == STATE_POST_LOOP && m_cur_addr >= m_length) + { + switch (repeat()) + { + case 0: // manual; not correct? + case 2: // one-shot + case 3: // prohibited + keyoff(); + break; + case 1: // loop infinitely + if (format() == 2) + { + if (m_loopstart == 0) // reload ADPCM + { + m_cur_state = STATE_ADPCM_LOAD; + } + else // restore + { + m_adpcm_out = m_prev_adpcm_out; + m_adpcm_index = m_prev_adpcm_index; + } + } + m_cur_addr = 0; + break; + } + } + m_cur_bitaddr -= 32; + } + } + } + } + + // capture + void nds_sound_t::capture_t::reset() + { + m_control = 0; + m_dstaddr = 0; + m_length = 0; + + m_counter = 0x10000; + m_cur_addr = 0; + m_cur_waddr = 0; + m_cur_bitaddr = 0; + m_enable = false; + } + + void nds_sound_t::capture_t::control_w(u8 data) + { + const u8 old = m_control; + m_control = data; + if (bitfield(old ^ m_control, 7)) + { + if (busy()) + capture_on(); + else if (!busy()) + capture_off(); + } + } + + void nds_sound_t::capture_t::addrlen_w(u32 offset, u32 data, u32 mask) + { + switch (offset & 1) + { + case 0: // Destination Address + mask &= 0x7ffffff; + m_dstaddr = (m_dstaddr & ~mask) | (data & mask); + break; + case 1: // Buffer Length + mask &= 0xffff; + m_length = (m_length & ~mask) | (data & mask); + break; + } + } + + void nds_sound_t::capture_t::update(s32 mix, s32 cycle) + { + if (m_enable) + { + s32 inval = 0; + // get inputs + // TODO: hardware bugs aren't emulated, add mode behavior not verified + if (addmode()) + inval = get_source() ? m_input.output() + m_output.output() : mix; + else + inval = get_source() ? m_input.output() : mix; + + // clip output + inval = clamp(inval, -0x8000, 0x7fff); + + // update counter + m_counter -= cycle; + while (m_counter <= m_output.freq()) + { + // write to memory; TODO: verify write behavior + if (format()) // 8 bit output + { + m_fifo[m_fifo_head & 7].write_byte(m_cur_bitaddr & 0x18, (inval >> 8) & 0xff); + m_cur_bitaddr += 8; + } + else + { + m_fifo[m_fifo_head & 7].write_word(m_cur_bitaddr & 0x10, inval & 0xffff); + m_cur_bitaddr += 16; + } + + // update address + while (m_cur_bitaddr >= 32) + { + // clear FIFO empty flag + m_fifo_empty = false; + + // advance FIFO head position + m_fifo_head = (m_fifo_head + 1) & 7; + if ((m_fifo_head & fifo_mask()) == (m_fifo_tail & fifo_mask())) + m_fifo_full = true; + + // update loop + if (++m_cur_addr >= m_length) + { + if (repeat()) + m_cur_addr = 0; + else + capture_off(); + } + + if (m_fifo_full) + { + // execute FIFO + fifo_write(); + + // check repeat + if (m_cur_waddr >= m_length && repeat()) + m_cur_waddr = 0; + } + + m_cur_bitaddr -= 32; + } + m_counter += 0x10000 - m_output.freq(); + } + } + } + + bool nds_sound_t::capture_t::fifo_write() + { + if (m_fifo_empty) + return true; + + // clear FIFO full flag + m_fifo_full = false; + + // write FIFO data to memory + m_host.m_intf.write_dword(waddr(), m_fifo[m_fifo_tail].data()); + m_cur_waddr++; + + // advance FIFO tail position + m_fifo_tail = (m_fifo_tail + 1) & 7; + if ((m_fifo_head & fifo_mask()) == (m_fifo_tail & fifo_mask())) + m_fifo_empty = true; + + return m_fifo_empty; + } + + void nds_sound_t::capture_t::capture_on() + { + if (!m_enable) + { + m_enable = true; + + // reset address + m_cur_bitaddr = 0; + m_cur_addr = m_cur_waddr = 0; + m_counter = 0x10000; + + // reset FIFO + m_fifo_head = m_fifo_tail = 0; + m_fifo_empty = true; + m_fifo_full = false; + } + } + + void nds_sound_t::capture_t::capture_off() + { + if (m_enable) + { + // flush FIFO + while (m_cur_waddr < m_length) + { + if (fifo_write()) + break; + } + + m_enable = false; + if (busy()) + m_control &= ~(1 << 7); + } + } + +}; // namespace nds_sound_emu \ No newline at end of file diff --git a/src/engine/platform/sound/nds.hpp b/src/engine/platform/sound/nds.hpp new file mode 100644 index 000000000..fb1dd6fbc --- /dev/null +++ b/src/engine/platform/sound/nds.hpp @@ -0,0 +1,415 @@ +/* + +============================================================================ + +NDS sound emulator +by cam900 + +This file is licensed under zlib license. + +============================================================================ + +zlib License + +(C) 2024-present cam900 and contributors + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +============================================================================ +TODO: +- needs to further verifications from real hardware + +Tech info: https://problemkaputt.de/gbatek.htm + +*/ + +#ifndef NDS_SOUND_EMU_H +#define NDS_SOUND_EMU_H + +namespace nds_sound_emu +{ + using u8 = unsigned char; + using u16 = unsigned short; + using u32 = unsigned int; + using u64 = unsigned long long; + using s8 = signed char; + using s16 = signed short; + using s32 = signed int; + using s64 = signed long long; + + template + static const inline T bitfield(const T in, const u8 pos) + { + return (in >> pos) & 1; + } // bitfield + + template + static const inline T bitfield(const T in, const u8 pos, const u8 len) + { + return (in >> pos) & ((1 << len) - 1); + } // bitfield + + template + static const inline T clamp(const T in, const T min, const T max) + { + return (in < min) ? min : ((in > max) ? max : in); + } // clamp + + class nds_sound_intf + { + public: + nds_sound_intf() + { + } + + virtual inline u8 read_byte(u32 addr) { return 0; } + inline u16 read_word(u32 addr) { return read_byte(addr) | (u16(read_byte(addr + 1)) << 8); } + inline u32 read_dword(u32 addr) { return read_word(addr) | (u16(read_word(addr + 2)) << 16); } + + virtual inline void write_byte(u32 addr, u8 data) {} + inline void write_word(u32 addr, u16 data) + { + write_byte(addr, data & 0xff); + write_byte(addr + 1, data >> 8); + } + inline void write_dword(u32 addr, u32 data) + { + write_word(addr, data & 0xffff); + write_word(addr + 2, data >> 16); + } + }; + + class nds_sound_t + { + public: + nds_sound_t(nds_sound_intf &intf) + : m_intf(intf) + , m_channel{ + channel_t(*this, false, false), channel_t(*this, false, false), + channel_t(*this, false, false), channel_t(*this, false, false), + channel_t(*this, false, false), channel_t(*this, false, false), + channel_t(*this, false, false), channel_t(*this, false, false), + channel_t(*this, true, false), channel_t(*this, true, false), + channel_t(*this, true, false), channel_t(*this, true, false), + channel_t(*this, true, false), channel_t(*this, true, false), + channel_t(*this, false, true), channel_t(*this, false, true) + } + , m_capture{ + capture_t(*this, m_channel[0], m_channel[1]), + capture_t(*this, m_channel[2], m_channel[3]) + } + , m_control(0) + , m_bias(0) + , m_loutput(0) + , m_routput(0) + { + } + + void reset(); + void tick(s32 cycle); + + // host accesses + u32 read32(u32 addr); + void write32(u32 addr, u32 data, u32 mask = ~0); + + u16 read16(u32 addr); + void write16(u32 addr, u16 data, u16 mask = ~0); + + u8 read8(u32 addr); + void write8(u32 addr, u8 data); + + s32 loutput() { return m_loutput; } + s32 routput() { return m_routput; } + + // for debug + s32 chan_lout(u8 ch) { return m_channel[ch].loutput(); } + s32 chan_rout(u8 ch) { return m_channel[ch].routput(); } + + private: + // ADPCM tables + s8 adpcm_index_table[8] = + { + -1, -1, -1, -1, 2, 4, 6, 8 + }; + + u16 adpcm_diff_table[89] = + { + 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x0010, + 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001c, 0x001f, 0x0022, 0x0025, + 0x0029, 0x002d, 0x0032, 0x0037, 0x003c, 0x0042, 0x0049, 0x0050, 0x0058, + 0x0061, 0x006b, 0x0076, 0x0082, 0x008f, 0x009d, 0x00ad, 0x00be, 0x00d1, + 0x00e6, 0x00fd, 0x0117, 0x0133, 0x0151, 0x0173, 0x0198, 0x01c1, 0x01ee, + 0x0220, 0x0256, 0x0292, 0x02d4, 0x031c, 0x036c, 0x03c3, 0x0424, 0x048e, + 0x0502, 0x0583, 0x0610, 0x06ab, 0x0756, 0x0812, 0x08e0, 0x09c3, 0x0abd, + 0x0bd0, 0x0cff, 0x0e4c, 0x0fba, 0x114c, 0x1307, 0x14ee, 0x1706, 0x1954, + 0x1bdc, 0x1ea5, 0x21b6, 0x2515, 0x28ca, 0x2cdf, 0x315b, 0x364b, 0x3bb9, + 0x41b2, 0x4844, 0x4f7e, 0x5771, 0x602f, 0x69ce, 0x7462, 0x7fff + }; + + // structs + enum + { + STATE_ADPCM_LOAD = 0, + STATE_PRE_LOOP, + STATE_POST_LOOP + }; + + class channel_t + { + public: + channel_t(nds_sound_t &host, bool psg, bool noise) + : m_host(host) + + , m_psg(psg) + , m_noise(noise) + + , m_control(0) + , m_sourceaddr(0) + , m_freq(0) + , m_loopstart(0) + , m_length(0) + , m_playing(false) + , m_adpcm_out(0) + , m_adpcm_index(0) + , m_prev_adpcm_out(0) + , m_prev_adpcm_index(0) + , m_cur_addr(0) + , m_cur_state(0) + , m_cur_bitaddr(0) + , m_delay(0) + , m_sample(0) + , m_lfsr(0x7fff) + , m_lfsr_out(0x7fff) + , m_counter(0x10000) + , m_output(0) + , m_loutput(0) + , m_routput(0) + { + } + + void reset(); + void write(u32 offset, u32 data, u32 mask = ~0); + + void update(s32 cycle); + + // getters + // control word + u32 control() const { return m_control; } + u32 freq() const { return m_freq; } + + // outputs + s32 output() const { return m_output; } + s32 loutput() const { return m_loutput; } + s32 routput() const { return m_routput; } + + private: + // inline constants + const u8 m_voldiv_shift[4] = {0, 1, 2, 4}; + + // control bits + s32 volume() const { return bitfield(m_control, 0, 7); } // global volume + u32 voldiv() const { return m_voldiv_shift[bitfield(m_control, 8, 2)]; } // volume shift + bool hold() const { return bitfield(m_control, 15); } // hold bit + u32 pan() const { return bitfield(m_control, 16, 7); } // panning (0...127, 0 = left, 127 = right, 64 = half) + u32 duty() const { return bitfield(m_control, 24, 3); } // PSG duty + u32 repeat() const { return bitfield(m_control, 27, 2); } // Repeat mode (Manual, Loop infinitely, One-shot) + u32 format() const { return bitfield(m_control, 29, 2); } // Sound Format (PCM8, PCM16, ADPCM, PSG/Noise when exists) + bool busy() const { return bitfield(m_control, 31); } // Busy flag + + // calculated values + s32 lvol() const { return (pan() == 0x7f) ? 0 : 128 - pan(); } // calculated left volume + s32 rvol() const { return (pan() == 0x7f) ? 128 : pan(); } // calculated right volume + + // calculated address + u32 addr() const { return (m_sourceaddr & ~3) + (m_cur_bitaddr >> 3) + (m_cur_state == STATE_POST_LOOP ? ((m_loopstart + m_cur_addr) << 2) : (m_cur_addr << 2)); } + + void keyon(); + void keyoff(); + void fetch(); + void advance(); + + // interfaces + nds_sound_t &m_host; // host device + + // configuration + bool m_psg = false; // PSG Enable + bool m_noise = false; // Noise Enable + + // registers + u32 m_control = 0; // Control + u32 m_sourceaddr = 0; // Source Address + u16 m_freq = 0; // Frequency + u16 m_loopstart = 0; // Loop Start + u32 m_length = 0; // Length + + // internal states + bool m_playing = false; // playing flag + s32 m_adpcm_out = 0; // current ADPCM sample value + s32 m_adpcm_index = 0; // current ADPCM step + s32 m_prev_adpcm_out = 0; // previous ADPCM sample value + s32 m_prev_adpcm_index = 0; // previous ADPCM step + u32 m_cur_addr = 0; // current address + s32 m_cur_state = 0; // current state + s32 m_cur_bitaddr = 0; // bit address + s32 m_delay = 0; // delay + s16 m_sample = 0; // current sample + u32 m_lfsr = 0x7fff; // noise LFSR + s16 m_lfsr_out = 0x7fff; // LFSR output + s32 m_counter = 0x10000; // clock counter + s32 m_output = 0; // current output + s32 m_loutput = 0; // current left output + s32 m_routput = 0; // current right output + }; + + class capture_t + { + public: + capture_t(nds_sound_t &host, channel_t &input, channel_t &output) + : m_host(host) + , m_input(input) + , m_output(output) + + , m_control(0) + , m_dstaddr(0) + , m_length(0) + + , m_counter(0x10000) + , m_cur_addr(0) + , m_cur_waddr(0) + , m_cur_bitaddr(0) + , m_enable(0) + + , m_fifo{ + fifo_data_t(), fifo_data_t(), fifo_data_t(), fifo_data_t(), + fifo_data_t(), fifo_data_t(), fifo_data_t(), fifo_data_t() + } + , m_fifo_head(0) + , m_fifo_tail(0) + , m_fifo_empty(true) + , m_fifo_full(false) + { + } + + void reset(); + void update(s32 mix, s32 cycle); + + void control_w(u8 data); + void addrlen_w(u32 offset, u32 data, u32 mask = ~0); + + // getters + u32 control() const { return m_control; } + u32 dstaddr() const { return m_dstaddr; } + + private: + // inline constants + // control bits + bool addmode() const { return bitfield(m_control, 0); } // Add mode (add channel 1/3 output with channel 0/2) + bool get_source() const { return bitfield(m_control, 1); } // Select source (left or right mixer, channel 0/2) + bool repeat() const { return bitfield(m_control, 2); } // repeat flag + bool format() const { return bitfield(m_control, 3); } // store format (PCM16, PCM8) + bool busy() const { return bitfield(m_control, 7); } // busy flag + + // FIFO offset mask + u32 fifo_mask() const { return format() ? 7 : 3; } + + // calculated address + u32 waddr() const { return (m_dstaddr & ~3) + (m_cur_waddr << 2); } + + void capture_on(); + void capture_off(); + bool fifo_write(); + + // interfaces + nds_sound_t &m_host; // host device + channel_t &m_input; // Input channel + channel_t &m_output; // Output channel + + // registers + u8 m_control = 0; // Control + u32 m_dstaddr = 0; // Destination Address + u32 m_length = 0; // Buffer Length + + // internal states + u32 m_counter = 0x10000; // clock counter + u32 m_cur_addr = 0; // current address + u32 m_cur_waddr = 0; // current write address + s32 m_cur_bitaddr = 0; // bit address + bool m_enable = false; // capture enable + + // FIFO + class fifo_data_t + { + public: + fifo_data_t() + : m_data(0) + { + } + + void reset() + { + m_data = 0; + } + + // accessors + void write_byte(const u8 bit, const u8 data) + { + u32 input = u32(data) << bit; + u32 mask = (0xff << bit); + m_data = (m_data & ~mask) | (input & mask); + } + + void write_word(const u8 bit, const u16 data) + { + u32 input = u32(data) << bit; + u32 mask = (0xffff << bit); + m_data = (m_data & ~mask) | (input & mask); + } + + // getters + u32 data() const { return m_data; } + + private: + u32 m_data = 0; + }; + + fifo_data_t m_fifo[8]; // FIFO (8 word, for 16 sample delay) + u32 m_fifo_head = 0; // FIFO head + u32 m_fifo_tail = 0; // FIFO tail + bool m_fifo_empty = true; // FIFO empty flag + bool m_fifo_full = false; // FIFO full flag + }; + + nds_sound_intf &m_intf; // memory interface + + channel_t m_channel[16]; // 16 channels + capture_t m_capture[2]; // 2 capture channels + + inline u8 mvol() const { return bitfield(m_control, 0, 7); } // master volume + inline u8 lout_from() const { return bitfield(m_control, 8, 2); } // left output source (mixer, channel 1, channel 3, channel 1+3) + inline u8 rout_from() const { return bitfield(m_control, 10, 2); } // right output source (mixer, channel 1, channel 3, channel 1+3) + inline bool mix_ch1() const { return bitfield(m_control, 12); } // mix/bypass channel 1 + inline bool mix_ch3() const { return bitfield(m_control, 13); } // mix/bypass channel 3 + inline bool enable() const { return bitfield(m_control, 15); } // global enable + + u32 m_control = 0; // global control + u32 m_bias = 0; // output bias + s32 m_loutput = 0; // left output + s32 m_routput = 0; // right output + }; +}; // namespace nds_sound_emu + +#endif // NDS_SOUND_EMU_H \ No newline at end of file diff --git a/src/engine/song.h b/src/engine/song.h index 86674ee52..749feefc8 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -135,6 +135,7 @@ enum DivSystem { DIV_SYSTEM_ESFM, DIV_SYSTEM_POWERNOISE, DIV_SYSTEM_DAVE, + DIV_SYSTEM_NDS, }; enum DivEffectType: unsigned short { diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index e33b17b1c..258d47eff 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2021,6 +2021,19 @@ void DivEngine::registerSystems() { } ); + sysDefs[DIV_SYSTEM_NDS]=new DivSysDef( + "NDS", NULL, 0xfe/* placeholder */, 0, 16, false, true, 0, false, (1U<type==DIV_INS_AY || ins->type==DIV_INS_AY8930 || ins->type==DIV_INS_VRC6 || - ins->type==DIV_INS_SU) { + ins->type==DIV_INS_SU || + ins->type==DIV_INS_NDS) { P(ImGui::Checkbox("Use sample",&ins->amiga.useSample)); if (ins->type==DIV_INS_X1_010) { if (ImGui::InputInt("Sample bank slot##BANKSLOT",&ins->x1_010.bankSlot,1,4)) { PARAMETER @@ -6021,7 +6022,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_GA20 || ins->type==DIV_INS_K053260 || ins->type==DIV_INS_C140 || - ins->type==DIV_INS_C219) { + ins->type==DIV_INS_C219 || + ins->type==DIV_INS_NDS) { insTabSample(ins); } if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("Namco 163")) { @@ -6736,7 +6738,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_FM || ins->type==DIV_INS_SEGAPCM || ins->type==DIV_INS_MIKEY || ins->type==DIV_INS_MULTIPCM || ins->type==DIV_INS_SU || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_OPM || ins->type==DIV_INS_SNES || ins->type==DIV_INS_MSM5232 || - ins->type==DIV_INS_K053260) { + ins->type==DIV_INS_K053260 || ins->type==DIV_INS_NDS) { volMax=127; } if (ins->type==DIV_INS_GB) { @@ -6921,6 +6923,10 @@ void FurnaceGUI::drawInsEdit() { dutyLabel="Noise Freq"; dutyMax=3; } + if (ins->type==DIV_INS_NDS) { + dutyLabel="Duty"; + dutyMax=ins->amiga.useSample?0:7; + } const char* waveLabel="Waveform"; int waveMax=(ins->type==DIV_INS_VERA)?3:(MAX(1,e->song.waveLen-1)); @@ -6959,6 +6965,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_POWERNOISE_SLOPE) waveMax=0; if (ins->type==DIV_INS_SU || ins->type==DIV_INS_POKEY) waveMax=7; if (ins->type==DIV_INS_DAVE) waveMax=4; + if (ins->type==DIV_INS_NDS) waveMax=0; if (ins->type==DIV_INS_PET) { waveMax=8; waveBitMode=true; @@ -7111,6 +7118,11 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_DAVE) { panMax=63; } + if (ins->type==DIV_INS_NDS) { + panMin=-64; + panMax=63; + panSingleNoBit=true; + } if (volMax>0) { macroList.push_back(FurnaceGUIMacroDesc(volumeLabel,&ins->std.volMacro,volMin,volMax,160,uiColors[GUI_COLOR_MACRO_VOLUME])); @@ -7201,7 +7213,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_ESFM || ins->type==DIV_INS_POWERNOISE || ins->type==DIV_INS_POWERNOISE_SLOPE || - ins->type==DIV_INS_DAVE) { + ins->type==DIV_INS_DAVE || + ins->type==DIV_INS_NDS) { macroList.push_back(FurnaceGUIMacroDesc("Phase Reset",&ins->std.phaseResetMacro,0,1,32,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } if (ex1Max>0) { diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 18a0ebdc9..ad688b292 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -266,6 +266,11 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_PV1000, 1.0f, 0, "") } ); + ENTRY( + "NDS", { + CH(DIV_SYSTEM_NDS, 1.0f, 0, "") + } + ); CATEGORY_END; CATEGORY_BEGIN("Computers","let's get to work on chiptune today."); @@ -2703,6 +2708,11 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_C219, 1.0f, 0, "") } ); + ENTRY( + "NDS", { + CH(DIV_SYSTEM_NDS, 1.0f, 0, "") + } + ); CATEGORY_END; CATEGORY_BEGIN("Wavetable","chips which use user-specified waveforms to generate sound."); @@ -2873,6 +2883,11 @@ void FurnaceGUI::initSystemPresets() { }, "tickRate=50" ); + ENTRY( + "NDS", { + CH(DIV_SYSTEM_NDS, 1.0f, 0, "") + } + ); CATEGORY_END; CATEGORY_BEGIN("DefleMask-compatible","these configurations are compatible with DefleMask.\nselect this if you need to save as .dmf or work with that program."); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 22d4b503b..ed919546e 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3551,6 +3551,7 @@ void FurnaceGUI::drawSettings() { UI_COLOR_CONFIG(GUI_COLOR_INSTR_POWERNOISE,"PowerNoise (noise)"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_POWERNOISE_SLOPE,"PowerNoise (slope)"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_DAVE,"Dave"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_NDS,"NDS"); UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); ImGui::TreePop(); } diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 18bc3d967..39957372b 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -2316,6 +2316,28 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } break; } + case DIV_SYSTEM_NDS: { + int chipType=flags.getInt("chipType",0); + + ImGui::Text("Model:"); + ImGui::Indent(); + if (ImGui::RadioButton("DS (4MB RAM)",chipType==0)) { + chipType=0; + altered=true; + } + if (ImGui::RadioButton("DSi (16MB RAM)",chipType==1)) { + chipType=1; + altered=true; + } + ImGui::Unindent(); + + if (altered) { + e->lockSave([&]() { + flags.set("chipType",chipType); + }); + } + break; + } case DIV_SYSTEM_SWAN: case DIV_SYSTEM_BUBSYS_WSG: case DIV_SYSTEM_PET: diff --git a/src/main.cpp b/src/main.cpp index 10e8bec5a..4f36135dd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -248,6 +248,8 @@ TAParamResult pVersion(String) { printf("- D65010G031 emulator (modified version) by cam900 (zlib license)\n"); printf("- C140/C219 emulator (modified version) by cam900 (zlib license)\n"); printf("- PowerNoise emulator by scratchminer (MIT)\n"); + printf("- ep128emu by Istvan Varga (GPLv2)\n"); + printf("- NDS sound emulator by cam900 (zlib license)\n"); return TA_PARAM_QUIT; } From 625f1e453866e22441793627c6d2488c2e608a43 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 12:02:19 +0900 Subject: [PATCH 081/134] Fix Mac build --- src/engine/platform/nds.h | 56 +++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h index 1861b97b9..8c64dfd25 100644 --- a/src/engine/platform/nds.h +++ b/src/engine/platform/nds.h @@ -61,34 +61,34 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { virtual inline void write_byte(u32 addr, u8 data) override; public: - void acquire(short** buf, size_t len); - int dispatch(DivCommand c); - void* getChanState(int chan); - DivMacroInt* getChanMacroInt(int ch); - unsigned short getPan(int chan); - DivDispatchOscBuffer* getOscBuffer(int chan); - unsigned char* getRegisterPool(); - int getRegisterPoolSize(); - void reset(); - void forceIns(); - void tick(bool sysTick=true); - void muteChannel(int ch, bool mute); - float getPostAmp(); - int getOutputCount(); - void notifyInsChange(int ins); - void notifyWaveChange(int wave); - void notifyInsDeletion(void* ins); - void poke(unsigned int addr, unsigned short val); - void poke(std::vector& wlist); - const char** getRegisterSheet(); - const void* getSampleMem(int index = 0); - size_t getSampleMemCapacity(int index = 0); - size_t getSampleMemUsage(int index = 0); - bool isSampleLoaded(int index, int sample); - void renderSamples(int chipID); - void setFlags(const DivConfig& flags); - int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); - void quit(); + virtual void acquire(short** buf, size_t len) override; + virtual int dispatch(DivCommand c) override; + virtual void* getChanState(int chan) override; + virtual DivMacroInt* getChanMacroInt(int ch) override; + virtual unsigned short getPan(int chan) override; + virtual DivDispatchOscBuffer* getOscBuffer(int chan) override; + virtual unsigned char* getRegisterPool() override; + virtual int getRegisterPoolSize() override; + virtual void reset() override; + virtual void forceIns() override; + virtual void tick(bool sysTick=true) override; + virtual void muteChannel(int ch, bool mute) override; + virtual float getPostAmp() override; + virtual int getOutputCount() override; + virtual void notifyInsChange(int ins) override; + virtual void notifyWaveChange(int wave) override; + virtual void notifyInsDeletion(void* ins) override; + virtual void poke(unsigned int addr, unsigned short val) override; + virtual void poke(std::vector& wlist) override; + virtual const char** getRegisterSheet() override; + virtual const void* getSampleMem(int index = 0) override; + virtual size_t getSampleMemCapacity(int index = 0) override; + virtual size_t getSampleMemUsage(int index = 0) override; + virtual bool isSampleLoaded(int index, int sample) override; + virtual void renderSamples(int chipID) override; + virtual void setFlags(const DivConfig& flags) override; + virtual int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) override; + virtual void quit() override; DivPlatformNDS(): DivDispatch(), nds_sound_intf(), From 8e5925d84cd2c59eab25208a87353e925833e3d2 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 12:11:49 +0900 Subject: [PATCH 082/134] Fix MSVC build --- src/engine/platform/nds.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h index 8c64dfd25..39ff8b84d 100644 --- a/src/engine/platform/nds.h +++ b/src/engine/platform/nds.h @@ -57,10 +57,10 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); - virtual inline u8 read_byte(u32 addr) override; - virtual inline void write_byte(u32 addr, u8 data) override; - public: + virtual inline u8 read_byte(u32 addr) override; + virtual inline void write_byte(u32 addr, u8 data) override; + virtual void acquire(short** buf, size_t len) override; virtual int dispatch(DivCommand c) override; virtual void* getChanState(int chan) override; From 024d1500af3129fce1510b594419972f7a354c91 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 15:43:29 +0900 Subject: [PATCH 083/134] Use NDS chip ID 0xd6 --- src/engine/sysDef.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 258d47eff..3cc1796f2 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2022,7 +2022,7 @@ void DivEngine::registerSystems() { ); sysDefs[DIV_SYSTEM_NDS]=new DivSysDef( - "NDS", NULL, 0xfe/* placeholder */, 0, 16, false, true, 0, false, (1U< Date: Sun, 11 Feb 2024 15:43:56 +0900 Subject: [PATCH 084/134] Remove outdated comment --- src/engine/instrument.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/instrument.h b/src/engine/instrument.h index d66ce25db..52797ad35 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -89,7 +89,7 @@ enum DivInstrumentType: unsigned short { DIV_INS_POWERNOISE=56, DIV_INS_POWERNOISE_SLOPE=57, DIV_INS_DAVE=58, - DIV_INS_NDS=59,/*temp*/ + DIV_INS_NDS=59, DIV_INS_MAX, DIV_INS_NULL }; From 6b076dcaedcdad7bf574a57293ad932a30e86f40 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 15:45:18 +0900 Subject: [PATCH 085/134] really fix? MSVC build --- src/engine/platform/nds.cpp | 4 ++-- src/engine/platform/nds.h | 4 ++-- src/engine/platform/sound/nds.hpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index a92075bd1..0c3c075bc 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -87,14 +87,14 @@ void DivPlatformNDS::acquire(short** buf, size_t len) { } } -inline u8 DivPlatformNDS::read_byte(u32 addr) { +u8 DivPlatformNDS::read_byte(u32 addr) { if (addr Date: Sun, 11 Feb 2024 16:48:48 +0900 Subject: [PATCH 086/134] Fix 9xxx effect --- src/engine/platform/nds.cpp | 61 +++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 0c3c075bc..1e36ea640 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -23,7 +23,7 @@ #include #define CHIP_DIVIDER 32 -#define SAMPLE_DIVIDER 512 +#define CLOCK_DIVIDER 512 // for match to output rate #define rRead8(a) (nds.read8(a)) #define rWrite8(a,v) {if(!skipRegisterWrites) {nds.write8((a),(v)); regPool[(a)]=(v); if(dumpWrites) addWrite((a),(v)); }} @@ -71,7 +71,7 @@ const char** DivPlatformNDS::getRegisterSheet() { void DivPlatformNDS::acquire(short** buf, size_t len) { for (size_t i=0; i32767) lout=32767; @@ -166,9 +166,9 @@ void DivPlatformNDS::tick(bool sysTick) { ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x08:0x10); if (chan[i].keyOn) { unsigned int start=0; - unsigned int loopStart=0; - unsigned int loopEnd=0; - unsigned int end=0; + int loopStart=0; + int loopEnd=0; + int end=0; if (chan[i].sample>=0 && chan[i].samplesong.sampleLen) { start=sampleOff[chan[i].sample]; end=s->getCurBufLen()/4; @@ -176,24 +176,47 @@ void DivPlatformNDS::tick(bool sysTick) { if (chan[i].audPos>0) { switch (s->depth) { //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: start+=chan[i].audPos/2; break; - case DIV_SAMPLE_DEPTH_8BIT: start+=chan[i].audPos; break; - case DIV_SAMPLE_DEPTH_16BIT: start+=chan[i].audPos*2; break; + case DIV_SAMPLE_DEPTH_8BIT: start+=chan[i].audPos; end-=(chan[i].audPos/4); break; + case DIV_SAMPLE_DEPTH_16BIT: start+=chan[i].audPos*2; end-=(chan[i].audPos/2); break; default: break; } } if (s->isLoopable()) { - switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; - case DIV_SAMPLE_DEPTH_8BIT: loopStart=s->loopStart/4; loopEnd=(s->loopEnd-s->loopStart)/4; break; - case DIV_SAMPLE_DEPTH_16BIT: loopStart=s->loopStart/2; loopEnd=(s->loopEnd-s->loopStart)/2; break; - default: break; + if (chan[i].audPos>0) { + switch (s->depth) { + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; + case DIV_SAMPLE_DEPTH_8BIT: + loopStart=(s->loopStart-chan[i].audPos)/4; + loopEnd=(s->loopEnd-s->loopStart)/4; + if (chan[i].audPos>(unsigned int)s->loopStart) { + loopStart=0; + loopEnd-=(chan[i].audPos-s->loopStart)/4; + } + break; + case DIV_SAMPLE_DEPTH_16BIT: + loopStart=(s->loopStart-chan[i].audPos)/2; + loopEnd=(s->loopEnd-s->loopStart)/2; + if (chan[i].audPos>(unsigned int)s->loopStart) { + loopStart=0; + loopEnd-=(chan[i].audPos-s->loopStart)/2; + } + break; + default: break; + } + } else { + switch (s->depth) { + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; + case DIV_SAMPLE_DEPTH_8BIT: loopStart=s->loopStart/4; loopEnd=(s->loopEnd-s->loopStart)/4; break; + case DIV_SAMPLE_DEPTH_16BIT: loopStart=s->loopStart/2; loopEnd=(s->loopEnd-s->loopStart)/2; break; + default: break; + } } - loopEnd=MIN(loopEnd,0x3fffff); - loopStart=MIN(loopStart,0xffff); - rWrite16(0x0a+i*16,loopStart&0xffff); - rWrite32(0x0c+i*16,loopEnd&0x3fffff); + loopEnd=CLAMP(loopEnd,0,0x3fffff); + loopStart=CLAMP(loopStart,0,0xffff); + rWrite16(0x0a+i*16,loopStart); + rWrite32(0x0c+i*16,loopEnd); } else { - end=MIN(end,0x3fffff); + end=CLAMP(end,0,0x3fffff); rWrite16(0x0a+i*16,0); rWrite32(0x0c+i*16,end&0x3fffff); } @@ -486,7 +509,7 @@ void DivPlatformNDS::renderSamples(int sysID) { continue; } - int length=s->getCurBufLen(); + int length=MIN(16777215,s->getCurBufLen()); unsigned char* src=(unsigned char*)s->getCurBuf(); int actualLength=MIN((int)(getSampleMemCapacity()-memPos),length); if (actualLength>0) { @@ -508,7 +531,7 @@ void DivPlatformNDS::renderSamples(int sysID) { void DivPlatformNDS::setFlags(const DivConfig& flags) { isDSi=flags.getBool("chipType",0); chipClock=33513982; - rate=chipClock/2/SAMPLE_DIVIDER; + rate=chipClock/2/CLOCK_DIVIDER; for (int i=0; i<16; i++) { oscBuf[i]->rate=rate; } From 9d19a1735ade1eb1effda126e2b0aaa03139c9d1 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 16:51:37 +0900 Subject: [PATCH 087/134] Fix placeholder for ADPCM --- src/engine/platform/nds.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 1e36ea640..31a94448d 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -175,7 +175,7 @@ void DivPlatformNDS::tick(bool sysTick) { } if (chan[i].audPos>0) { switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: start+=chan[i].audPos/2; break; + //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: start+=chan[i].audPos/2; end-=(chan[i].audPos/8); break; case DIV_SAMPLE_DEPTH_8BIT: start+=chan[i].audPos; end-=(chan[i].audPos/4); break; case DIV_SAMPLE_DEPTH_16BIT: start+=chan[i].audPos*2; end-=(chan[i].audPos/2); break; default: break; @@ -184,7 +184,16 @@ void DivPlatformNDS::tick(bool sysTick) { if (s->isLoopable()) { if (chan[i].audPos>0) { switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; + /* + case DIV_SAMPLE_DEPTH_YMZ_ADPCM: + loopStart=(s->loopStart-chan[i].audPos)/8; + loopEnd=(s->loopEnd-s->loopStart)/8; + if (chan[i].audPos>(unsigned int)s->loopStart) { + loopStart=0; + loopEnd-=(chan[i].audPos-s->loopStart)/8; + } + break; + */ case DIV_SAMPLE_DEPTH_8BIT: loopStart=(s->loopStart-chan[i].audPos)/4; loopEnd=(s->loopEnd-s->loopStart)/4; From 153ceea3bd3b71ecc3a8782d57155e50f0b64869 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 11 Feb 2024 17:28:17 +0900 Subject: [PATCH 088/134] Add global volume command --- src/engine/platform/nds.cpp | 10 +++++++++- src/engine/platform/nds.h | 1 + src/engine/sysDef.cpp | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 31a94448d..b39e99993 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -307,6 +307,13 @@ int DivPlatformNDS::dispatch(DivCommand c) { chan[c.chan].ins=c.value; } break; + case DIV_CMD_ADPCMA_GLOBAL_VOLUME: { + if (globalVolume!=(c.value&0x7f)) { + globalVolume=c.value&0x7f; + rWrite32(0x100,0x8000|globalVolume); + } + break; + } case DIV_CMD_VOLUME: if (chan[c.chan].vol!=c.value) { chan[c.chan].vol=c.value; @@ -435,7 +442,8 @@ DivDispatchOscBuffer* DivPlatformNDS::getOscBuffer(int ch) { void DivPlatformNDS::reset() { memset(regPool,0,288); nds.reset(); - rWrite32(0x100,0x807f); // enable keyon + globalVolume=0x7f; + rWrite32(0x100,0x8000|globalVolume); // enable keyon rWrite32(0x104,0x200); // initialize bias for (int i=0; i<16; i++) { chan[i]=DivPlatformNDS::Channel(); diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h index cf846d847..5e2850618 100644 --- a/src/engine/platform/nds.h +++ b/src/engine/platform/nds.h @@ -47,6 +47,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { DivDispatchOscBuffer* oscBuf[16]; bool isMuted[16]; bool isDSi; + int globalVolume; unsigned int sampleOff[256]; bool sampleLoaded[256]; diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 3cc1796f2..45d08a687 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2031,6 +2031,7 @@ void DivEngine::registerSystems() { {DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA}, { {0x12, {DIV_CMD_STD_NOISE_MODE, "12xx: Set duty cycle (pulse: 0 to 7)"}}, + {0x1f, {DIV_CMD_ADPCMA_GLOBAL_VOLUME, "1Fxx: Set global volume (0 to 7F)"}}, } ); From c3c50e3ccfd8858f76dd36bf9261b6b88582ad77 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 12 Feb 2024 12:15:44 +0900 Subject: [PATCH 089/134] Fix frequency effect --- src/engine/platform/nds.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index b39e99993..c779e1038 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -163,6 +163,8 @@ void DivPlatformNDS::tick(bool sysTick) { chan[i].freq=0x10000-(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER)); if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; + if ((!chan[i].keyOn) && ((rRead8(0x03+i*16)&0x80)==0)) + chan[i].active=false; ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x08:0x10); if (chan[i].keyOn) { unsigned int start=0; From b868e37c4221e1fbb8aad9ebeeaf1fdb0619cb1a Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 12 Feb 2024 12:54:07 +0900 Subject: [PATCH 090/134] Fix phase reset macro --- src/engine/platform/nds.cpp | 8 ++++++-- src/engine/platform/nds.h | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index c779e1038..c3976d7db 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -140,6 +140,8 @@ void DivPlatformNDS::tick(bool sysTick) { if ((chan[i].std.phaseReset.val==1) && chan[i].active) { chan[i].audPos=0; chan[i].setPos=true; + if ((rRead8(0x03+i*16)&0x80)==0) + chan[i].busy=true; } } if (chan[i].setPos) { @@ -164,8 +166,8 @@ void DivPlatformNDS::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; if ((!chan[i].keyOn) && ((rRead8(0x03+i*16)&0x80)==0)) - chan[i].active=false; - ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x08:0x10); + chan[i].busy=false; + ctrl|=(chan[i].busy?0x80:0)|((s->isLoopable())?0x08:0x10); if (chan[i].keyOn) { unsigned int start=0; int loopStart=0; @@ -287,6 +289,7 @@ int DivPlatformNDS::dispatch(DivCommand c) { chan[c.chan].note=c.value; } chan[c.chan].active=true; + chan[c.chan].busy=true; chan[c.chan].keyOn=true; chan[c.chan].macroInit(ins); if (!parent->song.brokenOutVol && !chan[c.chan].std.vol.will) { @@ -297,6 +300,7 @@ int DivPlatformNDS::dispatch(DivCommand c) { case DIV_CMD_NOTE_OFF: chan[c.chan].sample=-1; chan[c.chan].active=false; + chan[c.chan].busy=false; chan[c.chan].keyOff=true; chan[c.chan].macroInit(NULL); break; diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h index 5e2850618..45adc8920 100644 --- a/src/engine/platform/nds.h +++ b/src/engine/platform/nds.h @@ -30,7 +30,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { unsigned int audPos; int sample, wave; int panning, duty; - bool setPos, pcm; + bool setPos, pcm, busy; int macroVolMul; Channel(): SharedChannel(127), @@ -41,6 +41,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { duty(0), setPos(false), pcm(false), + busy(false), macroVolMul(64) {} }; Channel chan[16]; From 4822e0d06023a46adeba7276058d0bae7a7bff7a Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 12 Feb 2024 22:41:19 +0900 Subject: [PATCH 091/134] align to 4 --- src/engine/platform/nds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index c3976d7db..d002ed419 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -532,7 +532,7 @@ void DivPlatformNDS::renderSamples(int sysID) { continue; } - int length=MIN(16777215,s->getCurBufLen()); + int length=MIN(16777216,s->getCurBufLen()); unsigned char* src=(unsigned char*)s->getCurBuf(); int actualLength=MIN((int)(getSampleMemCapacity()-memPos),length); if (actualLength>0) { From d5ea50f8dc27f6b6cac7e43727e84e3a53b354bc Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 13 Feb 2024 12:45:41 +0900 Subject: [PATCH 092/134] Fix masking --- src/engine/platform/nds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index d002ed419..ca203b25d 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -532,7 +532,7 @@ void DivPlatformNDS::renderSamples(int sysID) { continue; } - int length=MIN(16777216,s->getCurBufLen()); + int length=MIN(16777212,s->getCurBufLen()); unsigned char* src=(unsigned char*)s->getCurBuf(); int actualLength=MIN((int)(getSampleMemCapacity()-memPos),length); if (actualLength>0) { From 0cd7ed84f9b9823e6bd2ff226862bf091fdc4849 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 27 Feb 2024 16:15:58 +0900 Subject: [PATCH 093/134] Reduce duplicated condition --- src/engine/platform/nds.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index ca203b25d..615c05a6d 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -283,8 +283,6 @@ int DivPlatformNDS::dispatch(DivCommand c) { } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); - } - if (c.value!=DIV_NOTE_NULL) { chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; } From f46cd60f08e2bb0216d4e8e22582947beef4df54 Mon Sep 17 00:00:00 2001 From: cam900 Date: Wed, 6 Mar 2024 11:39:53 +0900 Subject: [PATCH 094/134] Sync with master, Fix crash --- src/engine/platform/nds.cpp | 14 +++++++++++++- src/engine/platform/nds.h | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 615c05a6d..006b3f1dc 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -517,11 +517,19 @@ bool DivPlatformNDS::isSampleLoaded(int index, int sample) { return sampleLoaded[sample]; } +const DivMemoryComposition* DivPlatformNDS::getMemCompo(int index) { + if (index!=0) return NULL; + return &memCompo; +} + void DivPlatformNDS::renderSamples(int sysID) { memset(sampleMem,0,16777216); memset(sampleOff,0,256*sizeof(unsigned int)); memset(sampleLoaded,0,256*sizeof(bool)); + memCompo=DivMemoryComposition(); + memCompo.name="Main Memory"; + size_t memPos=0; for (int i=0; isong.sampleLen; i++) { DivSample* s=parent->song.sample[i]; @@ -536,7 +544,8 @@ void DivPlatformNDS::renderSamples(int sysID) { if (actualLength>0) { memcpy(&sampleMem[memPos],src,actualLength); sampleOff[i]=memPos; - memPos+=length; + memCompo.entries.push_back(DivMemoryEntry(DIV_MEMORY_SAMPLE,"Sample",i,memPos,memPos+actualLength)); + memPos+=actualLength; } if (actualLength Date: Sat, 16 Mar 2024 17:58:13 -0500 Subject: [PATCH 095/134] fix initial panning --- src/engine/platform/nds.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nds.h b/src/engine/platform/nds.h index 5c657fbc2..ec4a84796 100644 --- a/src/engine/platform/nds.h +++ b/src/engine/platform/nds.h @@ -37,7 +37,7 @@ class DivPlatformNDS: public DivDispatch, public nds_sound_intf { audPos(0), sample(-1), wave(-1), - panning(8), + panning(64), duty(0), setPos(false), pcm(false), From be3240d9e649e02131bb8e4b1037cde9cf1d839f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 03:58:58 -0500 Subject: [PATCH 096/134] use NDS icon --- src/gui/guiConst.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 112b3665f..daca077ba 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -179,7 +179,7 @@ const char* insTypes[DIV_INS_MAX+1][3]={ {"PowerNoise (noise)",ICON_FUR_NOISE,ICON_FUR_INS_POWERNOISE}, {"PowerNoise (slope)",ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE_SAW}, {"Dave",ICON_FA_BAR_CHART,ICON_FUR_INS_DAVE}, - {"NDS",ICON_FA_BAR_CHART,ICON_FUR_INS_DAVE},/* placeholder */ + {"NDS",ICON_FA_BAR_CHART,ICON_FUR_INS_NDS}, {NULL,ICON_FA_QUESTION,ICON_FA_QUESTION} }; From 8b3c48d42ee59994ba855bf2b060b5ebdbe1c73a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 11:19:26 -0500 Subject: [PATCH 097/134] description --- src/engine/sysDef.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 45d08a687..8e1a2c38e 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2023,7 +2023,7 @@ void DivEngine::registerSystems() { sysDefs[DIV_SYSTEM_NDS]=new DivSysDef( "NDS", NULL, 0xd6, 0, 16, false, true, 0, false, (1U< Date: Sun, 17 Mar 2024 12:24:19 -0500 Subject: [PATCH 098/134] prepare for IMA ADPCM --- papers/format.md | 4 ++++ papers/newIns.md | 2 ++ src/engine/sample.cpp | 28 ++++++++++++++++++++++++++++ src/engine/sample.h | 7 ++++++- src/engine/sysDef.cpp | 2 +- src/gui/guiConst.cpp | 2 +- 6 files changed, 42 insertions(+), 3 deletions(-) diff --git a/papers/format.md b/papers/format.md index 97c1f1302..e28a14773 100644 --- a/papers/format.md +++ b/papers/format.md @@ -564,9 +564,13 @@ size | description | - 4: QSound ADPCM | - 5: ADPCM-A | - 6: ADPCM-B + | - 7: K05 ADPCM | - 8: 8-bit PCM | - 9: BRR (SNES) | - 10: VOX + | - 11: 8-bit μ-law PCM + | - 12: C219 PCM + | - 13: IMA ADPCM | - 16: 16-bit PCM 1 | loop direction (>=123) or reserved | - 0: forward diff --git a/papers/newIns.md b/papers/newIns.md index d301d27c2..f37a54deb 100644 --- a/papers/newIns.md +++ b/papers/newIns.md @@ -124,6 +124,8 @@ the following instrument types are available: - 55: ESFM - 56: PowerNoise (noise) - 57: PowerNoise (slope) +- 58: Dave +- 59: NDS the following feature codes are recognized: diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index bb8a21d3f..8ce8dd16f 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -279,6 +279,9 @@ int DivSample::getSampleOffset(int offset, int length, DivSampleDepth depth) { case DIV_SAMPLE_DEPTH_C219: off=offset; break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: + off=(offset+1)/2; + break; case DIV_SAMPLE_DEPTH_16BIT: off=offset*2; break; @@ -338,6 +341,10 @@ int DivSample::getSampleOffset(int offset, int length, DivSampleDepth depth) { off=offset; len=length; break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: + off=(offset+1)/2; + len=(length+1)/2; + break; case DIV_SAMPLE_DEPTH_16BIT: off=offset*2; len=length*2; @@ -396,6 +403,9 @@ int DivSample::getEndPosition(DivSampleDepth depth) { case DIV_SAMPLE_DEPTH_C219: off=lengthC219; break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: + off=lengthIMA; + break; case DIV_SAMPLE_DEPTH_16BIT: off=length16; break; @@ -587,6 +597,12 @@ bool DivSample::initInternal(DivSampleDepth d, int count) { dataC219=new unsigned char[(count+4095)&(~0xfff)]; memset(dataC219,0,(count+4095)&(~0xfff)); break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: // IMA ADPCM + if (dataIMA!=NULL) delete[] dataIMA; + lengthIMA=(count+1)/2; + dataIMA=new unsigned char[lengthIMA]; + memset(dataIMA,0,lengthIMA); + break; case DIV_SAMPLE_DEPTH_16BIT: // 16-bit if (data16!=NULL) delete[] data16; length16=count*2; @@ -1271,6 +1287,9 @@ void DivSample::render(unsigned int formatMask) { if (dataC219[i]&0x80) data16[i]=-data16[i]; } break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: // IMA ADPCM + // TODO: decode + break; default: return; } @@ -1442,6 +1461,10 @@ void DivSample::render(unsigned int formatMask) { dataC219[i]=x|(negate?0x80:0); } } + if (NOT_IN_FORMAT(DIV_SAMPLE_DEPTH_IMA_ADPCM)) { // C219 + if (!initInternal(DIV_SAMPLE_DEPTH_IMA_ADPCM,samples)) return; + // TODO: encode + } } void* DivSample::getCurBuf() { @@ -1470,6 +1493,8 @@ void* DivSample::getCurBuf() { return dataMuLaw; case DIV_SAMPLE_DEPTH_C219: return dataC219; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: + return dataIMA; case DIV_SAMPLE_DEPTH_16BIT: return data16; default: @@ -1504,6 +1529,8 @@ unsigned int DivSample::getCurBufLen() { return lengthMuLaw; case DIV_SAMPLE_DEPTH_C219: return lengthC219; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: + return lengthIMA; case DIV_SAMPLE_DEPTH_16BIT: return length16; default: @@ -1616,4 +1643,5 @@ DivSample::~DivSample() { if (dataVOX) delete[] dataVOX; if (dataMuLaw) delete[] dataMuLaw; if (dataC219) delete[] dataC219; + if (dataIMA) delete[] dataIMA; } diff --git a/src/engine/sample.h b/src/engine/sample.h index 63d219259..cd4175e9d 100644 --- a/src/engine/sample.h +++ b/src/engine/sample.h @@ -46,6 +46,7 @@ enum DivSampleDepth: unsigned char { DIV_SAMPLE_DEPTH_VOX=10, DIV_SAMPLE_DEPTH_MULAW=11, DIV_SAMPLE_DEPTH_C219=12, + DIV_SAMPLE_DEPTH_IMA_ADPCM=13, DIV_SAMPLE_DEPTH_16BIT=16, DIV_SAMPLE_DEPTH_MAX // boundary for sample depth }; @@ -114,6 +115,7 @@ struct DivSample { // - 10: VOX ADPCM // - 11: 8-bit µ-law PCM // - 12: C219 "µ-law" PCM + // - 13: IMA ADPCM // - 16: 16-bit PCM DivSampleDepth depth; bool loop, brrEmphasis, dither; @@ -139,8 +141,9 @@ struct DivSample { unsigned char* dataVOX; // 10 unsigned char* dataMuLaw; // 11 unsigned char* dataC219; // 12 + unsigned char* dataIMA; // 13 - unsigned int length8, length16, length1, lengthDPCM, lengthZ, lengthQSoundA, lengthA, lengthB, lengthK, lengthBRR, lengthVOX, lengthMuLaw, lengthC219; + unsigned int length8, length16, length1, lengthDPCM, lengthZ, lengthQSoundA, lengthA, lengthB, lengthK, lengthBRR, lengthVOX, lengthMuLaw, lengthC219, lengthIMA; unsigned int samples; @@ -349,6 +352,7 @@ struct DivSample { dataVOX(NULL), dataMuLaw(NULL), dataC219(NULL), + dataIMA(NULL), length8(0), length16(0), length1(0), @@ -362,6 +366,7 @@ struct DivSample { lengthVOX(0), lengthMuLaw(0), lengthC219(0), + lengthIMA(0), samples(0) { for (int i=0; i Date: Sun, 17 Mar 2024 15:05:07 -0500 Subject: [PATCH 099/134] IMA DO MY ADPCM --- .gitmodules | 3 +++ CMakeLists.txt | 2 ++ extern/adpcm-xq | 1 + src/engine/platform/nds.cpp | 10 ++++------ src/engine/sample.cpp | 22 ++++++++++++++++++---- src/gui/about.cpp | 1 + src/main.cpp | 1 + 7 files changed, 30 insertions(+), 10 deletions(-) create mode 160000 extern/adpcm-xq diff --git a/.gitmodules b/.gitmodules index c78fee42a..498a32410 100644 --- a/.gitmodules +++ b/.gitmodules @@ -15,3 +15,6 @@ [submodule "extern/portaudio"] path = extern/portaudio url = https://github.com/PortAudio/portaudio.git +[submodule "extern/adpcm-xq"] + path = extern/adpcm-xq + url = https://github.com/dbry/adpcm-xq.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 8425a78d3..2779c8b54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -485,6 +485,8 @@ extern/adpcm/yma_codec.c extern/adpcm/ymb_codec.c extern/adpcm/ymz_codec.c +extern/adpcm-xq/adpcm-lib.c + extern/opn/ym3438.c extern/Nuked-PSG/ympsg.c extern/opm/opm.c diff --git a/extern/adpcm-xq b/extern/adpcm-xq new file mode 160000 index 000000000..6220fed76 --- /dev/null +++ b/extern/adpcm-xq @@ -0,0 +1 @@ +Subproject commit 6220fed7655e86a29702b45dbc641a028ed5a4bf diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 006b3f1dc..b52980198 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -156,7 +156,7 @@ void DivPlatformNDS::tick(bool sysTick) { if (chan[i].pcm || i<8) { DivSample* s=parent->getSample(chan[i].sample); switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: ctrl=0x40; break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: ctrl=0x40; break; case DIV_SAMPLE_DEPTH_8BIT: ctrl=0x00; break; case DIV_SAMPLE_DEPTH_16BIT: ctrl=0x20; break; default: break; @@ -179,7 +179,7 @@ void DivPlatformNDS::tick(bool sysTick) { } if (chan[i].audPos>0) { switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: start+=chan[i].audPos/2; end-=(chan[i].audPos/8); break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: start+=chan[i].audPos/2; end-=(chan[i].audPos/8); break; case DIV_SAMPLE_DEPTH_8BIT: start+=chan[i].audPos; end-=(chan[i].audPos/4); break; case DIV_SAMPLE_DEPTH_16BIT: start+=chan[i].audPos*2; end-=(chan[i].audPos/2); break; default: break; @@ -188,8 +188,7 @@ void DivPlatformNDS::tick(bool sysTick) { if (s->isLoopable()) { if (chan[i].audPos>0) { switch (s->depth) { - /* - case DIV_SAMPLE_DEPTH_YMZ_ADPCM: + case DIV_SAMPLE_DEPTH_IMA_ADPCM: loopStart=(s->loopStart-chan[i].audPos)/8; loopEnd=(s->loopEnd-s->loopStart)/8; if (chan[i].audPos>(unsigned int)s->loopStart) { @@ -197,7 +196,6 @@ void DivPlatformNDS::tick(bool sysTick) { loopEnd-=(chan[i].audPos-s->loopStart)/8; } break; - */ case DIV_SAMPLE_DEPTH_8BIT: loopStart=(s->loopStart-chan[i].audPos)/4; loopEnd=(s->loopEnd-s->loopStart)/4; @@ -218,7 +216,7 @@ void DivPlatformNDS::tick(bool sysTick) { } } else { switch (s->depth) { - //case DIV_SAMPLE_DEPTH_YMZ_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; + case DIV_SAMPLE_DEPTH_IMA_ADPCM: loopStart=s->loopStart/8; loopEnd=(s->loopEnd-s->loopStart)/8; break; case DIV_SAMPLE_DEPTH_8BIT: loopStart=s->loopStart/4; loopEnd=(s->loopEnd-s->loopStart)/4; break; case DIV_SAMPLE_DEPTH_16BIT: loopStart=s->loopStart/2; loopEnd=(s->loopEnd-s->loopStart)/2; break; default: break; diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index 8ce8dd16f..17340f551 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -35,6 +35,7 @@ extern "C" { #include "../../extern/adpcm/ymb_codec.h" #include "../../extern/adpcm/ymz_codec.h" } +#include "../../extern/adpcm-xq/adpcm-lib.h" #include "brrUtils.h" DivSampleHistory::~DivSampleHistory() { @@ -599,7 +600,7 @@ bool DivSample::initInternal(DivSampleDepth d, int count) { break; case DIV_SAMPLE_DEPTH_IMA_ADPCM: // IMA ADPCM if (dataIMA!=NULL) delete[] dataIMA; - lengthIMA=(count+1)/2; + lengthIMA=4+((count+1)/2); dataIMA=new unsigned char[lengthIMA]; memset(dataIMA,0,lengthIMA); break; @@ -1288,7 +1289,7 @@ void DivSample::render(unsigned int formatMask) { } break; case DIV_SAMPLE_DEPTH_IMA_ADPCM: // IMA ADPCM - // TODO: decode + if (adpcm_decode_block(data16,dataIMA,lengthIMA,1)==0) logE("oh crap!"); break; default: return; @@ -1461,9 +1462,22 @@ void DivSample::render(unsigned int formatMask) { dataC219[i]=x|(negate?0x80:0); } } - if (NOT_IN_FORMAT(DIV_SAMPLE_DEPTH_IMA_ADPCM)) { // C219 + if (NOT_IN_FORMAT(DIV_SAMPLE_DEPTH_IMA_ADPCM)) { // IMA ADPCM if (!initInternal(DIV_SAMPLE_DEPTH_IMA_ADPCM,samples)) return; - // TODO: encode + int delta[2]; + delta[0]=0; + delta[1]=0; + + void* codec=adpcm_create_context(1,4,NOISE_SHAPING_OFF,delta); + if (codec==NULL) { + logE("oh no IMA encoder could not be created!"); + } else { + size_t whyPointer=0; + adpcm_encode_block(codec,dataIMA,&whyPointer,data16,samples); + if (whyPointer!=lengthIMA) logW("IMA length mismatch! %d -> %d!=%d",(int)samples,(int)whyPointer,(int)lengthIMA); + + adpcm_free_context(codec); + } } } diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 30d891042..21ebc3873 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -214,6 +214,7 @@ const char* aboutLine[]={ "FFTW by Matteo Frigo and Steven G. Johnson", "backward-cpp by Google", "adpcm by superctr", + "adpcm-xq by David Bryant", "Nuked-OPL3/OPLL/OPM/OPN2/PSG by nukeykt", "YM3812-LLE, YMF262-LLE and YMF276-LLE by nukeykt", "ESFMu (modified version) by Kagamiin~", diff --git a/src/main.cpp b/src/main.cpp index 4f36135dd..a954759a7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -215,6 +215,7 @@ TAParamResult pVersion(String) { printf("- ESFMu (modified version) by Kagamiin~ (LGPLv2.1)\n"); printf("- ymfm by Aaron Giles (BSD 3-clause)\n"); printf("- adpcm by superctr (public domain)\n"); + printf("- adpcm-xq by David Bryant (BSD 3-clause)\n"); printf("- MAME SN76496 emulation core by Nicola Salmoria (BSD 3-clause)\n"); printf("- MAME AY-3-8910 emulation core by Couriersud (BSD 3-clause)\n"); printf("- MAME SAA1099 emulation core by Juergen Buchmueller and Manuel Abadia (BSD 3-clause)\n"); From 42ccba822ccf1630cd7ba1462c33792bf9a36f78 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 15:39:52 -0500 Subject: [PATCH 100/134] why is text export in .dmf --- CMakeLists.txt | 1 + src/engine/fileOps/dmf.cpp | 352 ---------------------------------- src/engine/fileOps/text.cpp | 372 ++++++++++++++++++++++++++++++++++++ 3 files changed, 373 insertions(+), 352 deletions(-) create mode 100644 src/engine/fileOps/text.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2779c8b54..8bedba4ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -624,6 +624,7 @@ src/engine/fileOps/ftm.cpp src/engine/fileOps/fur.cpp src/engine/fileOps/mod.cpp src/engine/fileOps/s3m.cpp +src/engine/fileOps/text.cpp src/engine/blip_buf.c src/engine/brrUtils.c diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index d317aab8c..d226a54e8 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -1626,355 +1626,3 @@ SafeWriter* DivEngine::saveDMF(unsigned char version) { saveLock.unlock(); return w; } - -static const char* trueFalse[2]={ - "no", "yes" -}; - -static const char* gbEnvDir[2]={ - "down", "up" -}; - -static const char* notes[12]={ - "C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "B-" -}; - -static const char* notesNegative[12]={ - "c_", "c+", "d_", "d+", "e_", "f_", "f+", "g_", "g+", "a_", "a+", "b_" -}; - -static const char* sampleLoopModes[4]={ - "forward", "backward", "ping-pong", "invalid" -}; - -void writeTextMacro(SafeWriter* w, DivInstrumentMacro& m, const char* name, bool& wroteMacroHeader) { - if ((m.open&6)==0 && m.len<1) return; - if (!wroteMacroHeader) { - w->writeText("- macros:\n"); - wroteMacroHeader=true; - } - w->writeText(fmt::sprintf(" - %s:",name)); - int len=m.len; - switch (m.open&6) { - case 2: - len=16; - w->writeText(" [ADSR]"); - break; - case 4: - len=16; - w->writeText(" [LFO]"); - break; - } - if (m.mode) { - w->writeText(fmt::sprintf(" [MODE %d]",m.mode)); - } - if (m.delay>0) { - w->writeText(fmt::sprintf(" [DELAY %d]",m.delay)); - } - if (m.speed>1) { - w->writeText(fmt::sprintf(" [SPEED %d]",m.speed)); - } - for (int i=0; iwriteText(" |"); - } - if (i==m.rel) { - w->writeText(" /"); - } - w->writeText(fmt::sprintf(" %d",m.val[i])); - } - w->writeText("\n"); -} - -SafeWriter* DivEngine::saveText(bool separatePatterns) { - saveLock.lock(); - - SafeWriter* w=new SafeWriter; - w->init(); - - w->writeText(fmt::sprintf("# Furnace Text Export\n\ngenerated by Furnace %s (%d)\n\n# Song Information\n\n",DIV_VERSION,DIV_ENGINE_VERSION)); - w->writeText(fmt::sprintf("- name: %s\n",song.name)); - w->writeText(fmt::sprintf("- author: %s\n",song.author)); - w->writeText(fmt::sprintf("- album: %s\n",song.category)); - w->writeText(fmt::sprintf("- system: %s\n",song.systemName)); - w->writeText(fmt::sprintf("- tuning: %g\n\n",song.tuning)); - - w->writeText(fmt::sprintf("- instruments: %d\n",song.insLen)); - w->writeText(fmt::sprintf("- wavetables: %d\n",song.waveLen)); - w->writeText(fmt::sprintf("- samples: %d\n\n",song.sampleLen)); - - w->writeText("# Sound Chips\n\n"); - - for (int i=0; iwriteText(fmt::sprintf("- %s\n",getSystemName(song.system[i]))); - w->writeText(fmt::sprintf(" - id: %.2X\n",(int)song.system[i])); - w->writeText(fmt::sprintf(" - volume: %g\n",song.systemVol[i])); - w->writeText(fmt::sprintf(" - panning: %g\n",song.systemPan[i])); - w->writeText(fmt::sprintf(" - front/rear: %g\n",song.systemPanFR[i])); - - String sysFlags=song.systemFlags[i].toString(); - - if (!sysFlags.empty()) { - w->writeText(fmt::sprintf(" - flags:\n```\n%s\n```\n",sysFlags)); - } - } - - if (!song.notes.empty()) { - w->writeText("\n# Song Comments\n\n"); - w->writeText(song.notes); - } - - w->writeText("\n# Instruments\n\n"); - - for (int i=0; iwriteText(fmt::sprintf("## %.2X: %s\n\n",i,ins->name)); - - w->writeText(fmt::sprintf("- type: %d\n",(int)ins->type)); - - if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPM || ins->type==DIV_INS_ESFM) { - w->writeText("- FM parameters:\n"); - w->writeText(fmt::sprintf(" - ALG: %d\n",ins->fm.alg)); - w->writeText(fmt::sprintf(" - FB: %d\n",ins->fm.fb)); - w->writeText(fmt::sprintf(" - FMS: %d\n",ins->fm.fms)); - w->writeText(fmt::sprintf(" - AMS: %d\n",ins->fm.ams)); - w->writeText(fmt::sprintf(" - FMS2: %d\n",ins->fm.fms2)); - w->writeText(fmt::sprintf(" - AMS2: %d\n",ins->fm.ams2)); - w->writeText(fmt::sprintf(" - operators: %d\n",ins->fm.ops)); - w->writeText(fmt::sprintf(" - OPLL patch: %d\n",ins->fm.opllPreset)); - w->writeText(fmt::sprintf(" - fixed drum freq: %s\n",trueFalse[ins->fm.fixedDrums?1:0])); - w->writeText(fmt::sprintf(" - kick freq: %.4X\n",ins->fm.kickFreq)); - w->writeText(fmt::sprintf(" - snare/hat freq: %.4X\n",ins->fm.snareHatFreq)); - w->writeText(fmt::sprintf(" - tom/top freq: %.4X\n",ins->fm.tomTopFreq)); - - for (int j=0; jfm.ops; j++) { - DivInstrumentFM::Operator& op=ins->fm.op[j]; - - w->writeText(fmt::sprintf(" - operator %d:\n",j)); - w->writeText(fmt::sprintf(" - enabled: %s\n",trueFalse[op.enable?1:0])); - w->writeText(fmt::sprintf(" - AM: %d\n",op.am)); - w->writeText(fmt::sprintf(" - AR: %d\n",op.ar)); - w->writeText(fmt::sprintf(" - DR: %d\n",op.dr)); - w->writeText(fmt::sprintf(" - MULT: %d\n",op.mult)); - w->writeText(fmt::sprintf(" - RR: %d\n",op.rr)); - w->writeText(fmt::sprintf(" - SL: %d\n",op.sl)); - w->writeText(fmt::sprintf(" - TL: %d\n",op.tl)); - w->writeText(fmt::sprintf(" - DT2: %d\n",op.dt2)); - w->writeText(fmt::sprintf(" - RS: %d\n",op.rs)); - w->writeText(fmt::sprintf(" - DT: %d\n",op.dt)); - w->writeText(fmt::sprintf(" - D2R: %d\n",op.d2r)); - w->writeText(fmt::sprintf(" - SSG-EG: %d\n",op.ssgEnv)); - w->writeText(fmt::sprintf(" - DAM: %d\n",op.dam)); - w->writeText(fmt::sprintf(" - DVB: %d\n",op.dvb)); - w->writeText(fmt::sprintf(" - EGT: %d\n",op.egt)); - w->writeText(fmt::sprintf(" - KSL: %d\n",op.ksl)); - w->writeText(fmt::sprintf(" - SUS: %d\n",op.sus)); - w->writeText(fmt::sprintf(" - VIB: %d\n",op.vib)); - w->writeText(fmt::sprintf(" - WS: %d\n",op.ws)); - w->writeText(fmt::sprintf(" - KSR: %d\n",op.ksr)); - w->writeText(fmt::sprintf(" - TL volume scale: %d\n",op.kvs)); - } - } - - if (ins->type==DIV_INS_ESFM) { - w->writeText("- ESFM parameters:\n"); - w->writeText(fmt::sprintf(" - noise mode: %d\n",ins->esfm.noise)); - - for (int j=0; jfm.ops; j++) { - DivInstrumentESFM::Operator& opE=ins->esfm.op[j]; - - w->writeText(fmt::sprintf(" - operator %d:\n",j)); - w->writeText(fmt::sprintf(" - DL: %d\n",opE.delay)); - w->writeText(fmt::sprintf(" - OL: %d\n",opE.outLvl)); - w->writeText(fmt::sprintf(" - MI: %d\n",opE.modIn)); - w->writeText(fmt::sprintf(" - output left: %s\n",trueFalse[opE.left?1:0])); - w->writeText(fmt::sprintf(" - output right: %s\n",trueFalse[opE.right?1:0])); - w->writeText(fmt::sprintf(" - CT: %d\n",opE.ct)); - w->writeText(fmt::sprintf(" - DT: %d\n",opE.dt)); - w->writeText(fmt::sprintf(" - fixed frequency: %s\n",trueFalse[opE.fixed?1:0])); - } - } - - if (ins->type==DIV_INS_GB) { - w->writeText("- Game Boy parameters:\n"); - w->writeText(fmt::sprintf(" - volume: %d\n",ins->gb.envVol)); - w->writeText(fmt::sprintf(" - direction: %s\n",gbEnvDir[ins->gb.envDir?1:0])); - w->writeText(fmt::sprintf(" - length: %d\n",ins->gb.envLen)); - w->writeText(fmt::sprintf(" - sound length: %d\n",ins->gb.soundLen)); - w->writeText(fmt::sprintf(" - use software envelope: %s\n",trueFalse[ins->gb.softEnv?1:0])); - w->writeText(fmt::sprintf(" - always initialize: %s\n",trueFalse[ins->gb.softEnv?1:0])); - if (ins->gb.hwSeqLen>0) { - w->writeText(" - hardware sequence:\n"); - for (int j=0; jgb.hwSeqLen; j++) { - w->writeText(fmt::sprintf(" - %d: %.2X %.4X\n",j,ins->gb.hwSeq[j].cmd,ins->gb.hwSeq[j].data)); - } - } - } - - bool header=false; - writeTextMacro(w,ins->std.volMacro,"vol",header); - writeTextMacro(w,ins->std.arpMacro,"arp",header); - writeTextMacro(w,ins->std.dutyMacro,"duty",header); - writeTextMacro(w,ins->std.waveMacro,"wave",header); - writeTextMacro(w,ins->std.pitchMacro,"pitch",header); - writeTextMacro(w,ins->std.panLMacro,"panL",header); - writeTextMacro(w,ins->std.panRMacro,"panR",header); - writeTextMacro(w,ins->std.phaseResetMacro,"phaseReset",header); - writeTextMacro(w,ins->std.ex1Macro,"ex1",header); - writeTextMacro(w,ins->std.ex2Macro,"ex2",header); - writeTextMacro(w,ins->std.ex3Macro,"ex3",header); - writeTextMacro(w,ins->std.ex4Macro,"ex4",header); - writeTextMacro(w,ins->std.ex5Macro,"ex5",header); - writeTextMacro(w,ins->std.ex6Macro,"ex6",header); - writeTextMacro(w,ins->std.ex7Macro,"ex7",header); - writeTextMacro(w,ins->std.ex8Macro,"ex8",header); - writeTextMacro(w,ins->std.algMacro,"alg",header); - writeTextMacro(w,ins->std.fbMacro,"fb",header); - writeTextMacro(w,ins->std.fmsMacro,"fms",header); - writeTextMacro(w,ins->std.amsMacro,"ams",header); - - // TODO: the rest - w->writeText("\n"); - } - - w->writeText("\n# Wavetables\n\n"); - - for (int i=0; iwriteText(fmt::sprintf("- %d (%dx%d):",i,wave->len+1,wave->max+1)); - for (int j=0; j<=wave->len; j++) { - w->writeText(fmt::sprintf(" %d",wave->data[j])); - } - w->writeText("\n"); - } - - w->writeText("\n# Samples\n\n"); - - for (int i=0; iwriteText(fmt::sprintf("## %.2X: %s\n\n",i,sample->name)); - - w->writeText(fmt::sprintf("- format: %d\n",(int)sample->depth)); - w->writeText(fmt::sprintf("- data length: %d\n",sample->getCurBufLen())); - w->writeText(fmt::sprintf("- samples: %d\n",sample->samples)); - w->writeText(fmt::sprintf("- rate: %d\n",sample->centerRate)); - w->writeText(fmt::sprintf("- compat rate: %d\n",sample->rate)); - w->writeText(fmt::sprintf("- loop: %s\n",trueFalse[sample->loop?1:0])); - if (sample->loop) { - w->writeText(fmt::sprintf(" - start: %d\n",sample->loopStart)); - w->writeText(fmt::sprintf(" - end: %d\n",sample->loopEnd)); - w->writeText(fmt::sprintf(" - mode: %s\n",sampleLoopModes[sample->loopMode&3])); - } - w->writeText(fmt::sprintf("- BRR emphasis: %s\n",trueFalse[sample->brrEmphasis?1:0])); - w->writeText(fmt::sprintf("- dither: %s\n",trueFalse[sample->dither?1:0])); - - // TODO' render matrix - unsigned char* buf=(unsigned char*)sample->getCurBuf(); - unsigned int bufLen=sample->getCurBufLen(); - w->writeText("\n```"); - for (unsigned int i=0; iwriteText(fmt::sprintf("\n%.8X:",i)); - w->writeText(fmt::sprintf(" %.2X",buf[i])); - } - w->writeText("\n```\n\n"); - } - - w->writeText("\n# Subsongs\n\n"); - - for (size_t i=0; iwriteText(fmt::sprintf("## %d: %s\n\n",(int)i,s->name)); - - w->writeText(fmt::sprintf("- tick rate: %g\n",s->hz)); - w->writeText(fmt::sprintf("- speeds:")); - for (int j=0; jspeeds.len; j++) { - w->writeText(fmt::sprintf(" %d",s->speeds.val[j])); - } - w->writeText("\n"); - w->writeText(fmt::sprintf("- virtual tempo: %d/%d\n",s->virtualTempoN,s->virtualTempoD)); - w->writeText(fmt::sprintf("- time base: %d\n",s->timeBase)); - w->writeText(fmt::sprintf("- pattern length: %d\n",s->patLen)); - w->writeText(fmt::sprintf("\norders:\n```\n")); - - for (int j=0; jordersLen; j++) { - w->writeText(fmt::sprintf("%.2X |",j)); - for (int k=0; kwriteText(fmt::sprintf(" %.2X",s->orders.ord[k][j])); - } - w->writeText("\n"); - } - w->writeText("```\n\n## Patterns\n\n"); - - if (separatePatterns) { - w->writeText("TODO: separate patterns\n\n"); - } else { - for (int j=0; jordersLen; j++) { - w->writeText(fmt::sprintf("----- ORDER %.2X\n",j)); - - for (int k=0; kpatLen; k++) { - w->writeText(fmt::sprintf("%.2X ",k)); - - for (int l=0; lpat[l].getPattern(s->orders.ord[l][j],false); - - int note=p->data[k][0]; - int octave=p->data[k][1]; - - if (note==0 && octave==0) { - w->writeText("|... "); - } else if (note==100) { - w->writeText("|OFF "); - } else if (note==101) { - w->writeText("|=== "); - } else if (note==102) { - w->writeText("|REL "); - } else if ((octave>9 && octave<250) || note>12) { - w->writeText("|??? "); - } else { - if (octave>=128) octave-=256; - if (note>11) { - note-=12; - octave++; - } - w->writeText(fmt::sprintf("|%s%d ",(octave<0)?notesNegative[note]:notes[note],(octave<0)?(-octave):octave)); - } - - if (p->data[k][2]==-1) { - w->writeText(".. "); - } else { - w->writeText(fmt::sprintf("%.2X ",p->data[k][2]&0xff)); - } - - if (p->data[k][3]==-1) { - w->writeText(".."); - } else { - w->writeText(fmt::sprintf("%.2X",p->data[k][3]&0xff)); - } - - for (int m=0; mpat[l].effectCols; m++) { - if (p->data[k][4+(m<<1)]==-1) { - w->writeText(" .."); - } else { - w->writeText(fmt::sprintf(" %.2X",p->data[k][4+(m<<1)]&0xff)); - } - if (p->data[k][5+(m<<1)]==-1) { - w->writeText(".."); - } else { - w->writeText(fmt::sprintf("%.2X",p->data[k][5+(m<<1)]&0xff)); - } - } - } - - w->writeText("\n"); - } - } - } - - } - - saveLock.unlock(); - return w; -} diff --git a/src/engine/fileOps/text.cpp b/src/engine/fileOps/text.cpp new file mode 100644 index 000000000..6ededd1fd --- /dev/null +++ b/src/engine/fileOps/text.cpp @@ -0,0 +1,372 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "fileOpsCommon.h" + +static const char* trueFalse[2]={ + "no", "yes" +}; + +static const char* gbEnvDir[2]={ + "down", "up" +}; + +static const char* notes[12]={ + "C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "B-" +}; + +static const char* notesNegative[12]={ + "c_", "c+", "d_", "d+", "e_", "f_", "f+", "g_", "g+", "a_", "a+", "b_" +}; + +static const char* sampleLoopModes[4]={ + "forward", "backward", "ping-pong", "invalid" +}; + +void writeTextMacro(SafeWriter* w, DivInstrumentMacro& m, const char* name, bool& wroteMacroHeader) { + if ((m.open&6)==0 && m.len<1) return; + if (!wroteMacroHeader) { + w->writeText("- macros:\n"); + wroteMacroHeader=true; + } + w->writeText(fmt::sprintf(" - %s:",name)); + int len=m.len; + switch (m.open&6) { + case 2: + len=16; + w->writeText(" [ADSR]"); + break; + case 4: + len=16; + w->writeText(" [LFO]"); + break; + } + if (m.mode) { + w->writeText(fmt::sprintf(" [MODE %d]",m.mode)); + } + if (m.delay>0) { + w->writeText(fmt::sprintf(" [DELAY %d]",m.delay)); + } + if (m.speed>1) { + w->writeText(fmt::sprintf(" [SPEED %d]",m.speed)); + } + for (int i=0; iwriteText(" |"); + } + if (i==m.rel) { + w->writeText(" /"); + } + w->writeText(fmt::sprintf(" %d",m.val[i])); + } + w->writeText("\n"); +} + +SafeWriter* DivEngine::saveText(bool separatePatterns) { + saveLock.lock(); + + SafeWriter* w=new SafeWriter; + w->init(); + + w->writeText(fmt::sprintf("# Furnace Text Export\n\ngenerated by Furnace %s (%d)\n\n# Song Information\n\n",DIV_VERSION,DIV_ENGINE_VERSION)); + w->writeText(fmt::sprintf("- name: %s\n",song.name)); + w->writeText(fmt::sprintf("- author: %s\n",song.author)); + w->writeText(fmt::sprintf("- album: %s\n",song.category)); + w->writeText(fmt::sprintf("- system: %s\n",song.systemName)); + w->writeText(fmt::sprintf("- tuning: %g\n\n",song.tuning)); + + w->writeText(fmt::sprintf("- instruments: %d\n",song.insLen)); + w->writeText(fmt::sprintf("- wavetables: %d\n",song.waveLen)); + w->writeText(fmt::sprintf("- samples: %d\n\n",song.sampleLen)); + + w->writeText("# Sound Chips\n\n"); + + for (int i=0; iwriteText(fmt::sprintf("- %s\n",getSystemName(song.system[i]))); + w->writeText(fmt::sprintf(" - id: %.2X\n",(int)song.system[i])); + w->writeText(fmt::sprintf(" - volume: %g\n",song.systemVol[i])); + w->writeText(fmt::sprintf(" - panning: %g\n",song.systemPan[i])); + w->writeText(fmt::sprintf(" - front/rear: %g\n",song.systemPanFR[i])); + + String sysFlags=song.systemFlags[i].toString(); + + if (!sysFlags.empty()) { + w->writeText(fmt::sprintf(" - flags:\n```\n%s\n```\n",sysFlags)); + } + } + + if (!song.notes.empty()) { + w->writeText("\n# Song Comments\n\n"); + w->writeText(song.notes); + } + + w->writeText("\n# Instruments\n\n"); + + for (int i=0; iwriteText(fmt::sprintf("## %.2X: %s\n\n",i,ins->name)); + + w->writeText(fmt::sprintf("- type: %d\n",(int)ins->type)); + + if (ins->type==DIV_INS_FM || ins->type==DIV_INS_OPL || ins->type==DIV_INS_OPLL || ins->type==DIV_INS_OPZ || ins->type==DIV_INS_OPL_DRUMS || ins->type==DIV_INS_OPM || ins->type==DIV_INS_ESFM) { + w->writeText("- FM parameters:\n"); + w->writeText(fmt::sprintf(" - ALG: %d\n",ins->fm.alg)); + w->writeText(fmt::sprintf(" - FB: %d\n",ins->fm.fb)); + w->writeText(fmt::sprintf(" - FMS: %d\n",ins->fm.fms)); + w->writeText(fmt::sprintf(" - AMS: %d\n",ins->fm.ams)); + w->writeText(fmt::sprintf(" - FMS2: %d\n",ins->fm.fms2)); + w->writeText(fmt::sprintf(" - AMS2: %d\n",ins->fm.ams2)); + w->writeText(fmt::sprintf(" - operators: %d\n",ins->fm.ops)); + w->writeText(fmt::sprintf(" - OPLL patch: %d\n",ins->fm.opllPreset)); + w->writeText(fmt::sprintf(" - fixed drum freq: %s\n",trueFalse[ins->fm.fixedDrums?1:0])); + w->writeText(fmt::sprintf(" - kick freq: %.4X\n",ins->fm.kickFreq)); + w->writeText(fmt::sprintf(" - snare/hat freq: %.4X\n",ins->fm.snareHatFreq)); + w->writeText(fmt::sprintf(" - tom/top freq: %.4X\n",ins->fm.tomTopFreq)); + + for (int j=0; jfm.ops; j++) { + DivInstrumentFM::Operator& op=ins->fm.op[j]; + + w->writeText(fmt::sprintf(" - operator %d:\n",j)); + w->writeText(fmt::sprintf(" - enabled: %s\n",trueFalse[op.enable?1:0])); + w->writeText(fmt::sprintf(" - AM: %d\n",op.am)); + w->writeText(fmt::sprintf(" - AR: %d\n",op.ar)); + w->writeText(fmt::sprintf(" - DR: %d\n",op.dr)); + w->writeText(fmt::sprintf(" - MULT: %d\n",op.mult)); + w->writeText(fmt::sprintf(" - RR: %d\n",op.rr)); + w->writeText(fmt::sprintf(" - SL: %d\n",op.sl)); + w->writeText(fmt::sprintf(" - TL: %d\n",op.tl)); + w->writeText(fmt::sprintf(" - DT2: %d\n",op.dt2)); + w->writeText(fmt::sprintf(" - RS: %d\n",op.rs)); + w->writeText(fmt::sprintf(" - DT: %d\n",op.dt)); + w->writeText(fmt::sprintf(" - D2R: %d\n",op.d2r)); + w->writeText(fmt::sprintf(" - SSG-EG: %d\n",op.ssgEnv)); + w->writeText(fmt::sprintf(" - DAM: %d\n",op.dam)); + w->writeText(fmt::sprintf(" - DVB: %d\n",op.dvb)); + w->writeText(fmt::sprintf(" - EGT: %d\n",op.egt)); + w->writeText(fmt::sprintf(" - KSL: %d\n",op.ksl)); + w->writeText(fmt::sprintf(" - SUS: %d\n",op.sus)); + w->writeText(fmt::sprintf(" - VIB: %d\n",op.vib)); + w->writeText(fmt::sprintf(" - WS: %d\n",op.ws)); + w->writeText(fmt::sprintf(" - KSR: %d\n",op.ksr)); + w->writeText(fmt::sprintf(" - TL volume scale: %d\n",op.kvs)); + } + } + + if (ins->type==DIV_INS_ESFM) { + w->writeText("- ESFM parameters:\n"); + w->writeText(fmt::sprintf(" - noise mode: %d\n",ins->esfm.noise)); + + for (int j=0; jfm.ops; j++) { + DivInstrumentESFM::Operator& opE=ins->esfm.op[j]; + + w->writeText(fmt::sprintf(" - operator %d:\n",j)); + w->writeText(fmt::sprintf(" - DL: %d\n",opE.delay)); + w->writeText(fmt::sprintf(" - OL: %d\n",opE.outLvl)); + w->writeText(fmt::sprintf(" - MI: %d\n",opE.modIn)); + w->writeText(fmt::sprintf(" - output left: %s\n",trueFalse[opE.left?1:0])); + w->writeText(fmt::sprintf(" - output right: %s\n",trueFalse[opE.right?1:0])); + w->writeText(fmt::sprintf(" - CT: %d\n",opE.ct)); + w->writeText(fmt::sprintf(" - DT: %d\n",opE.dt)); + w->writeText(fmt::sprintf(" - fixed frequency: %s\n",trueFalse[opE.fixed?1:0])); + } + } + + if (ins->type==DIV_INS_GB) { + w->writeText("- Game Boy parameters:\n"); + w->writeText(fmt::sprintf(" - volume: %d\n",ins->gb.envVol)); + w->writeText(fmt::sprintf(" - direction: %s\n",gbEnvDir[ins->gb.envDir?1:0])); + w->writeText(fmt::sprintf(" - length: %d\n",ins->gb.envLen)); + w->writeText(fmt::sprintf(" - sound length: %d\n",ins->gb.soundLen)); + w->writeText(fmt::sprintf(" - use software envelope: %s\n",trueFalse[ins->gb.softEnv?1:0])); + w->writeText(fmt::sprintf(" - always initialize: %s\n",trueFalse[ins->gb.softEnv?1:0])); + if (ins->gb.hwSeqLen>0) { + w->writeText(" - hardware sequence:\n"); + for (int j=0; jgb.hwSeqLen; j++) { + w->writeText(fmt::sprintf(" - %d: %.2X %.4X\n",j,ins->gb.hwSeq[j].cmd,ins->gb.hwSeq[j].data)); + } + } + } + + bool header=false; + writeTextMacro(w,ins->std.volMacro,"vol",header); + writeTextMacro(w,ins->std.arpMacro,"arp",header); + writeTextMacro(w,ins->std.dutyMacro,"duty",header); + writeTextMacro(w,ins->std.waveMacro,"wave",header); + writeTextMacro(w,ins->std.pitchMacro,"pitch",header); + writeTextMacro(w,ins->std.panLMacro,"panL",header); + writeTextMacro(w,ins->std.panRMacro,"panR",header); + writeTextMacro(w,ins->std.phaseResetMacro,"phaseReset",header); + writeTextMacro(w,ins->std.ex1Macro,"ex1",header); + writeTextMacro(w,ins->std.ex2Macro,"ex2",header); + writeTextMacro(w,ins->std.ex3Macro,"ex3",header); + writeTextMacro(w,ins->std.ex4Macro,"ex4",header); + writeTextMacro(w,ins->std.ex5Macro,"ex5",header); + writeTextMacro(w,ins->std.ex6Macro,"ex6",header); + writeTextMacro(w,ins->std.ex7Macro,"ex7",header); + writeTextMacro(w,ins->std.ex8Macro,"ex8",header); + writeTextMacro(w,ins->std.algMacro,"alg",header); + writeTextMacro(w,ins->std.fbMacro,"fb",header); + writeTextMacro(w,ins->std.fmsMacro,"fms",header); + writeTextMacro(w,ins->std.amsMacro,"ams",header); + + // TODO: the rest + w->writeText("\n"); + } + + w->writeText("\n# Wavetables\n\n"); + + for (int i=0; iwriteText(fmt::sprintf("- %d (%dx%d):",i,wave->len+1,wave->max+1)); + for (int j=0; j<=wave->len; j++) { + w->writeText(fmt::sprintf(" %d",wave->data[j])); + } + w->writeText("\n"); + } + + w->writeText("\n# Samples\n\n"); + + for (int i=0; iwriteText(fmt::sprintf("## %.2X: %s\n\n",i,sample->name)); + + w->writeText(fmt::sprintf("- format: %d\n",(int)sample->depth)); + w->writeText(fmt::sprintf("- data length: %d\n",sample->getCurBufLen())); + w->writeText(fmt::sprintf("- samples: %d\n",sample->samples)); + w->writeText(fmt::sprintf("- rate: %d\n",sample->centerRate)); + w->writeText(fmt::sprintf("- compat rate: %d\n",sample->rate)); + w->writeText(fmt::sprintf("- loop: %s\n",trueFalse[sample->loop?1:0])); + if (sample->loop) { + w->writeText(fmt::sprintf(" - start: %d\n",sample->loopStart)); + w->writeText(fmt::sprintf(" - end: %d\n",sample->loopEnd)); + w->writeText(fmt::sprintf(" - mode: %s\n",sampleLoopModes[sample->loopMode&3])); + } + w->writeText(fmt::sprintf("- BRR emphasis: %s\n",trueFalse[sample->brrEmphasis?1:0])); + w->writeText(fmt::sprintf("- dither: %s\n",trueFalse[sample->dither?1:0])); + + // TODO' render matrix + unsigned char* buf=(unsigned char*)sample->getCurBuf(); + unsigned int bufLen=sample->getCurBufLen(); + w->writeText("\n```"); + for (unsigned int i=0; iwriteText(fmt::sprintf("\n%.8X:",i)); + w->writeText(fmt::sprintf(" %.2X",buf[i])); + } + w->writeText("\n```\n\n"); + } + + w->writeText("\n# Subsongs\n\n"); + + for (size_t i=0; iwriteText(fmt::sprintf("## %d: %s\n\n",(int)i,s->name)); + + w->writeText(fmt::sprintf("- tick rate: %g\n",s->hz)); + w->writeText(fmt::sprintf("- speeds:")); + for (int j=0; jspeeds.len; j++) { + w->writeText(fmt::sprintf(" %d",s->speeds.val[j])); + } + w->writeText("\n"); + w->writeText(fmt::sprintf("- virtual tempo: %d/%d\n",s->virtualTempoN,s->virtualTempoD)); + w->writeText(fmt::sprintf("- time base: %d\n",s->timeBase)); + w->writeText(fmt::sprintf("- pattern length: %d\n",s->patLen)); + w->writeText(fmt::sprintf("\norders:\n```\n")); + + for (int j=0; jordersLen; j++) { + w->writeText(fmt::sprintf("%.2X |",j)); + for (int k=0; kwriteText(fmt::sprintf(" %.2X",s->orders.ord[k][j])); + } + w->writeText("\n"); + } + w->writeText("```\n\n## Patterns\n\n"); + + if (separatePatterns) { + w->writeText("TODO: separate patterns\n\n"); + } else { + for (int j=0; jordersLen; j++) { + w->writeText(fmt::sprintf("----- ORDER %.2X\n",j)); + + for (int k=0; kpatLen; k++) { + w->writeText(fmt::sprintf("%.2X ",k)); + + for (int l=0; lpat[l].getPattern(s->orders.ord[l][j],false); + + int note=p->data[k][0]; + int octave=p->data[k][1]; + + if (note==0 && octave==0) { + w->writeText("|... "); + } else if (note==100) { + w->writeText("|OFF "); + } else if (note==101) { + w->writeText("|=== "); + } else if (note==102) { + w->writeText("|REL "); + } else if ((octave>9 && octave<250) || note>12) { + w->writeText("|??? "); + } else { + if (octave>=128) octave-=256; + if (note>11) { + note-=12; + octave++; + } + w->writeText(fmt::sprintf("|%s%d ",(octave<0)?notesNegative[note]:notes[note],(octave<0)?(-octave):octave)); + } + + if (p->data[k][2]==-1) { + w->writeText(".. "); + } else { + w->writeText(fmt::sprintf("%.2X ",p->data[k][2]&0xff)); + } + + if (p->data[k][3]==-1) { + w->writeText(".."); + } else { + w->writeText(fmt::sprintf("%.2X",p->data[k][3]&0xff)); + } + + for (int m=0; mpat[l].effectCols; m++) { + if (p->data[k][4+(m<<1)]==-1) { + w->writeText(" .."); + } else { + w->writeText(fmt::sprintf(" %.2X",p->data[k][4+(m<<1)]&0xff)); + } + if (p->data[k][5+(m<<1)]==-1) { + w->writeText(".."); + } else { + w->writeText(fmt::sprintf("%.2X",p->data[k][5+(m<<1)]&0xff)); + } + } + } + + w->writeText("\n"); + } + } + } + + } + + saveLock.unlock(); + return w; +} From 0a498dc4c4ecea19449fc936fde8a903c17f9040 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 15:57:41 -0500 Subject: [PATCH 101/134] GBA: update to latest dispatch spec remove ALWAYS_SET_VOLUME implement macro restart --- src/engine/dispatch.h | 6 ++---- src/engine/platform/gbadma.cpp | 4 ++-- src/engine/platform/gbaminmod.cpp | 4 ++-- src/engine/playback.cpp | 5 ++--- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index dee8efe75..12238cfe2 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -252,16 +252,14 @@ enum DivDispatchCmds { DIV_CMD_POWERNOISE_COUNTER_LOAD, // (which, val) DIV_CMD_POWERNOISE_IO_WRITE, // (port, value) - DIV_CMD_MINMOD_ECHO, - - DIV_ALWAYS_SET_VOLUME, // () -> alwaysSetVol - DIV_CMD_DAVE_HIGH_PASS, DIV_CMD_DAVE_RING_MOD, DIV_CMD_DAVE_SWAP_COUNTERS, DIV_CMD_DAVE_LOW_PASS, DIV_CMD_DAVE_CLOCK_DIV, + DIV_CMD_MINMOD_ECHO, + DIV_CMD_MAX }; diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index cf28a6c62..79e8b7880 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -333,8 +333,8 @@ int DivPlatformGBADMA::dispatch(DivCommand c) { case DIV_CMD_MACRO_ON: chan[c.chan].std.mask(c.value,false); break; - case DIV_ALWAYS_SET_VOLUME: - return 1; + case DIV_CMD_MACRO_RESTART: + chan[c.chan].std.restart(c.value); break; default: break; diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 14b7717ec..2ad6713b4 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -519,8 +519,8 @@ int DivPlatformGBAMinMod::dispatch(DivCommand c) { case DIV_CMD_MACRO_ON: chan[c.chan].std.mask(c.value,false); break; - case DIV_ALWAYS_SET_VOLUME: - return 1; + case DIV_CMD_MACRO_RESTART: + chan[c.chan].std.restart(c.value); break; default: break; diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 978274076..1e7d823c2 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -247,6 +247,8 @@ const char* cmdName[]={ "ESFM_MODIN", "ESFM_ENV_DELAY", + "MACRO_RESTART", + "POWERNOISE_COUNTER_LOAD", "POWERNOISE_IO_WRITE", @@ -256,10 +258,7 @@ const char* cmdName[]={ "DAVE_LOW_PASS", "DAVE_CLOCK_DIV", - "MACRO_RESTART", "MINMOD_ECHO", - - "ALWAYS_SET_VOLUME" }; static_assert((sizeof(cmdName)/sizeof(void*))==DIV_CMD_MAX,"update cmdName!"); From 60586a0d1510f067f862de388d30232bfe5d611c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 16:11:22 -0500 Subject: [PATCH 102/134] Game Boy: save doubleWave flag TODO: TAG DEV196 ON MERGE --- papers/newIns.md | 1 + src/engine/engine.h | 4 ++-- src/engine/instrument.cpp | 5 ++++- src/engine/instrument.h | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/papers/newIns.md b/papers/newIns.md index f37a54deb..e5eee2d14 100644 --- a/papers/newIns.md +++ b/papers/newIns.md @@ -361,6 +361,7 @@ size | description 1 | sound length | - 64 is infinity 1 | flags + | - bit 2: double wave width for GBA (>=196) | - bit 1: always init envelope | - bit 0: software envelope (zombie mode) 1 | hardware sequence length diff --git a/src/engine/engine.h b/src/engine/engine.h index 601d750e4..d224cfd65 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ class DivWorkPool; #define DIV_UNSTABLE -#define DIV_VERSION "dev195" -#define DIV_ENGINE_VERSION 195 +#define DIV_VERSION "dev196" +#define DIV_ENGINE_VERSION 196 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index eddeeb807..6225765aa 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -83,7 +83,8 @@ bool DivInstrumentGB::operator==(const DivInstrumentGB& other) { _C(soundLen) && _C(hwSeqLen) && _C(softEnv) && - _C(alwaysInit) + _C(alwaysInit) && + _C(doubleWave) ); } @@ -484,6 +485,7 @@ void DivInstrument::writeFeatureGB(SafeWriter* w) { w->writeC(gb.soundLen); w->writeC( + (gb.doubleWave?4:0)| (gb.alwaysInit?2:0)| (gb.softEnv?1:0) ); @@ -1633,6 +1635,7 @@ void DivInstrument::readFeatureGB(SafeReader& reader, short version) { gb.soundLen=reader.readC(); next=reader.readC(); + if (version>=196) gb.doubleWave=next&4; gb.alwaysInit=next&2; gb.softEnv=next&1; diff --git a/src/engine/instrument.h b/src/engine/instrument.h index 45b02c727..21de82121 100644 --- a/src/engine/instrument.h +++ b/src/engine/instrument.h @@ -384,7 +384,7 @@ struct DivInstrumentSTD { struct DivInstrumentGB { unsigned char envVol, envDir, envLen, soundLen, hwSeqLen; - bool softEnv, alwaysInit, doubleWave; // TODO file save/load of doubleWave + bool softEnv, alwaysInit, doubleWave; enum HWSeqCommands: unsigned char { DIV_GB_HWCMD_ENVELOPE=0, DIV_GB_HWCMD_SWEEP, From 39c109fbc58c25057b10bc1caf6ce3d3e9a6862d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 16:39:27 -0500 Subject: [PATCH 103/134] NDS: a couple fixes - don't reset phase on duty or pitch change - don't set volume in freqChanged --- src/engine/platform/nds.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index b52980198..703e4d8fb 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -239,11 +239,9 @@ void DivPlatformNDS::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; ctrl=(chan[i].active?0xe8:0)|(chan[i].duty&7); - rWrite8(0x03+i*16,ctrl&~0x80); // force keyoff first - } - if (!chan[i].std.vol.had) { - chan[i].outVol=chan[i].vol; - writeOutVol(i); + if (chan[i].keyOff || chan[i].keyOn) { + rWrite8(0x03+i*16,ctrl&~0x80); // force keyoff first + } } chan[i].keyOn=false; if (chan[i].keyOff) { From 016b63493b4decc1b9d231172a1761211f27570c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 16:42:31 -0500 Subject: [PATCH 104/134] NDS: fix volume in forceIns --- src/engine/platform/nds.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index 703e4d8fb..d373326cb 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -420,6 +420,7 @@ void DivPlatformNDS::forceIns() { chan[i].sample=-1; rWrite8(0x02+i*16,chan[i].panning); + writeOutVol(i); } } From 504b77a5fdb3cbd9c20c0517a978be73cd31a465 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 17:11:12 -0500 Subject: [PATCH 105/134] AY: fix half clock divider --- src/engine/platform/ay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index f50234087..cb1708d52 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -879,10 +879,10 @@ void DivPlatformAY8910::setFlags(const DivConfig& flags) { if (ay!=NULL) delete ay; switch (flags.getInt("chipType",0)) { case 1: + clockSel=flags.getBool("halfClock",false); ay=new ym2149_device(rate,clockSel); sunsoft=false; intellivision=false; - clockSel=flags.getBool("halfClock",false); break; case 2: ay=new sunsoft_5b_sound_device(rate); From 26d87f9f02055c797ca51e6c2356b918f5029399 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 17:28:35 -0500 Subject: [PATCH 106/134] GUI: change .dmf color to import --- src/gui/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index ed919546e..4ca42bf38 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -5633,7 +5633,6 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fur",uiColors[GUI_COLOR_FILE_SONG_NATIVE],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fui",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fuw",uiColors[GUI_COLOR_FILE_WAVE],ICON_FA_FILE); - ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dmf",uiColors[GUI_COLOR_FILE_SONG_NATIVE],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dmp",uiColors[GUI_COLOR_FILE_INSTR],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dmw",uiColors[GUI_COLOR_FILE_WAVE],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".wav",uiColors[GUI_COLOR_FILE_AUDIO],ICON_FA_FILE_AUDIO_O); @@ -5649,6 +5648,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".pcf",uiColors[GUI_COLOR_FILE_FONT],ICON_FA_FONT); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".psf",uiColors[GUI_COLOR_FILE_FONT],ICON_FA_FONT); + ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".dmf",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".mod",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fc13",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtension,".fc14",uiColors[GUI_COLOR_FILE_SONG_IMPORT],ICON_FA_FILE); From 04ae460ba08adf1e7a55e3faf8202982a53d3b0a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 17:28:48 -0500 Subject: [PATCH 107/134] two demo songs by rSheffield --- demos/genesis/SparkmanMD.fur | Bin 0 -> 228460 bytes demos/specs2/KeygenTypeBeat.fur | Bin 0 -> 3009 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/genesis/SparkmanMD.fur create mode 100644 demos/specs2/KeygenTypeBeat.fur diff --git a/demos/genesis/SparkmanMD.fur b/demos/genesis/SparkmanMD.fur new file mode 100644 index 0000000000000000000000000000000000000000..399cce9eeb59fc6b7d7582e76d845408a1eddd56 GIT binary patch literal 228460 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�F7|QTcx3?<=nnACa}L4G9@9VA4R%Ho zcZZtJ+lv%4Kt>=tR-@nlQKj@88fxw1H)I3ve)k1^!&2~Ulx=_&#hVb5PLz0IT_$B@ z6J3Q}ARo(vNRa|;k0^@SXp_n6d-S6xhyR6Z=MGT2?Z#GD+1A@l3f5n|WSss*7l1Shs4nhB zc}x?!g$-rNWDiVbD0qLBNp%~`L^6>ZUfLRB#n59;M(!#15u0XjVnSCz8CT-X^rQuj~ZEMjrQy$ zNjV)pEY-K|W1=2>&^AlhR5}&)u|fwUJ2S{4ySzP(!F#|z2lY+eS#y&`#?r1dfbZi; zaEBdgA^a|cq?4(10-UuHe7FqGq_}>D>K%-uD#f+6M;s>0D<8@Ka`vydqOE)9Uf@x|m!KTkDL3IAZd6h6l9cqtzVuoK!m9{H}($|H}Qe zhRCL`bQ3d(dgxsIbc#0YF8`FhrtjD{EXxd)x4ln%q15Lo?CC`Rl3Sezz9q2XahNTA z!8*3(ub$;{H+<^4+gZJ2Z$0DebaGV1gSyA-O6EHD=p4&ScOw0Np^QJGXY{9Xj1%Dm zs14xYrChKgYEizdSui&gi^ynA#5p9b%F}=)*|^ z>{1M-)K_+0TF2KUr;QUy>v+}#BwE?zjGBzclj?#VW7^X@=#zXTgpObr=~Nm?qjVQH zSf6L(SOVxO!A$2%?4nkfY2-fgzXwO^Vi!i5vGSt(8Fpqg8!o1?6>y%@G92~(L^a2{ zX3^O^O|+-!u1EfYbqu1lK+%JBDZR|(;aS!!D}#Q7sU6^}EI|r16}$TxuK`C}rC-2R zGr(dohN|iM98#|?{Ynn@y>JB!w+f1daGj%Soccn2C3mPG7HjPkUFomj;H4@;OXYtZ zp(AO?^IP4lmu#v23tpB)mdHH5i!x30LN+$hS|*v#cyp13WM6`_>d)Vb?I4{mLFjc! zBQwD)r+GlR%jp%Vaw2j*mxK9Cd$TnYg!R(5!sk;*!K(3ksgvuX>+S0HE%V%YB!g%n zQ^EJWZz^S;SZgja|31j~l-o@Czw_q?i!xuREo!Q%$f89rBx95ghgqD*1TU`hIbm)z z3E;2keENtLV6RZ$tI(@;$ym3J&m#}fAS<8fj;UXTr5PdX`0jY;%i{bmyP8!Pb&;tj zBAG_I`G`w7ZKCtb-a4O{WxX&VnB~P-DNL!8db2snmsy!+NUr~zYRlUdJP{(2tW&jg zG$}_8>u~eh)P;*ZBwzDEV7yq9?N)X-swgD5LMOzDdElOvnBW|Hbdc;)pUYi(E1zq( zu=3Iy@|drm?*!8Et$2d7&CxF1!B^51$g&J~8A-9$+4tFCwa7aqrvZaMdo8pnccZCU8w!Yb1_<(@TFxTZ67H)+&R7Gf3QJy7vCR5*Q&dJS}8 zmSP#6zo6cyHmVS_8uk`zZmU!>gMY-2V`|?}2iSb;Z$1IFenXXW2RrlSD^gXAV^`Hx zW$^;`KE7U`b>_I7J{Q$lGqqj5#7WM22 z%`fr`l>&w?51*eb`^gKKZI9S+QUi3bLeEt*<^N=c(bk`yA9R}Fv zGb51`C9Qg}CtSzRY|0o z;yQ}d;KO((>7X9Ek7ZSOvwpS{-~WFP63 z?{y2ho#pU*;sKusvuX-DPBn{>x{v8|T}q|vL3BBdBp1vY(_eq8cB#6gKYuPxvkSVO z8jl&4NcOR+qA)v*-(KtPL#>P?H$^RxOM004rYO#|t|3VGNVw7~-ia>3yoxjt)0!h|4V@y1_=o=7QL48G*)yGXaJkK2#FPf7eknJE+gj@%g ztubTtaZ-;fvIDa^k(OsS^c@yx9ZrADHwErGMwAvcPzlL!F~_u4j&s9zUp`_@ ztx(!e-j>NoomhHJf3J$@Sg^|uzKe5AzX)=jwxGvNCF3V2zZEZHh7F|;z)$-yBFnQ=WA6M zF4=(gVh#Cl)6}gkGqG-*#FM9}k|gsD8_eU(PIUTtcw0#w?I^c88|ay2t=Hw;wwUhe zI?9A1iSFUKYQWDz=qT9BZ?cd(L*=ET*#sJCR;yCVMWx)3jmRExA9KGVo2I_-ZS>9r zU3auvSvOdQ8L9Vx5|YUhRZRNdBQZQhlxJ7WAawO$)Zaq$7}?rHS0aPZy^1Vnb1;>? za;t6+6Dp4h+0E|Hzf_<3iaRs3U>~tDqz^sJ%dj$Xhwqr~C{FS&WDU6l2Tvpo)lvDg zDy#-bpZb^`gN?P(<>e0TrLAan)d*?Xg0^M^sWb%iveP7>{*3CU7U<*jB;UyP()(;a z^~i60n~+Ms(J)l;Xc%dIGg#NtHMIZJo4@jK5}@PFC$tHfqTA@#<^anUxQ}}e7O%&bRKD|rm0Wp$E+O8*x%KY+(>t)Il(&c6D$yQ-%vec zRXi{4Cp^k@aoYKAsM>50jn)PACh`%EdnFyFf0HZpO3>m_wvbkaL60$SWVS0YMLx&l z7?wrS^<8DDbFvP0z#+H5sF&d9$K4z1FFfl${00oyZ7V}*nwY|0AaAe1-9J;?Q1ymq z(R7{T)N$4zyGFAv=8nun|Mf9#*)g6dHVI9)s28yK&T!~6{4M-ut@~U*$1^pi=V%%F z3gnyww#?BJb#1v;PG;YGf@~Nx8G z?tU!O%mbcct);_}u9(UGR~vO(d0ss=oEBr<;U@m~lp^#W*B4xqH^c z(ruXWYe*0>X$f0~o+;}7_lgm1VQ#2~sHazCCm1o7Zsnud1N}q=lW1}P-SJ9S;hV&A z)}9P9k*Lgvn7rX6fgC1jWGZIWkNT?0)CQ~ zhV_T?e{b{;f|FygO{3nhFwv6^)CEvK)6|Op?zc48E@Auc!jhnU>Y$E;*N@TH&24su zHwGVik@XMs5zOE}SO=Zu`s=kUm?{o4PlDCTB9Zf>dKx2pj?-w;9(A-!tyV8g1J;hO zLp6?)5l&OLnhAh=wsWm&oF0|^)GZ`xh^a(EF$t6011cT)8%u-OGxr_x-`ibf20&c;@n~zxap`{O|ig63qWlXFi^8K9)n}86?6o>{1Nb40j&EYLGiJ z&V8%Li;h-2nJ)(@$85rUNJo_bOAVwrI)BE-42Xekwu8d^o|?|6aI^i6vM?k z^ye<@=}8!R4`iEHK2ZMG{~n51xYROJ(D~lGR9)l0SYKndaguBbws;!uAL@LAXdyr*jxEX}AX$X$kNe=UP(U=z3U}xReo#8v98-T{U zh&piq7O*9YTcBxpmSa*Vq*PZAy zRug@-Lg!)@{Km4;U5zleGRS&R#2TF+#L+>umiJ7OC~wc@Qwc#$hM7zgZzQ;Jp7`Dq zDpr9u2pEBF!D!mv-_CVb; z!?-O<^54PUchx}OY3~`|O8E_|6wtfkax)Z6gmfmIu7^j`VwyEaPe|0t-b7ulL;2>#0`|AN}3@GBA%5f^F zwX~6l6JIf(8t9afFEHyoa)+ufDtNZ?By@UB!1FPEAu#^t3jD z-}}h!>J=HrAJM1i_B~*ZlG^``MdR2H{2WUp4EECpw)-zl6;Wa|D^1#AzYda7^o5yZ zdXpyL-XSE5R!4XDHSgpG@bz>a3||~iUZV?#AkXrV720uwWU}#J`5K@;MQ6p*C74PI zS#g-0qpPsyj!7f`s2`jVH`KUn6DD#nl5mhIsB5d%AfzF9+zjgjtEacYdGndRCY&6n z%bAxZ!W_1!pVb7@of**eHS(#-a!Z?USr)x+Mv}Iy0825Ss>d?Yc<3OrL&ckwG#yp( zC30klIjOIa3*;t_rIiUYC)EKp95gta?b3NvE{u0On}EOep|`fNVA2&Nwutq$y0bBu z@ncXUo$=gnkq#BXT94rpJ#?UXpyJ&IGM>~GZ7>IIatxi5h6?CGc4(y?Rc1$l%$$0quaPl}jG6&Y0&7)f?X)w*g%Ip{T-}6aRav{_neP z#?p~GMX}c5Na=!L^l&nWj3oEWQvEHuDxhnu}} z3F^F%*zxz~ur z3z7!XQW;*g0i z=v?(kP9@*4Bs_O`)!xgLS}hI74yWD#q5SD7UnGNiAWk#C;s$1X&7nvxt?a->H98 zHmrWAJgoCt zU{oc%gly%X{P!L5h0Fof)Fti((@31*$^N^!(M;oiXXBn3MRUQzE!8q|lwI@R^B7g# zQ=W82$xV6>@zO}z#mvw-x)Cz^gWTgpIG5BD-qPdaAUiKX&2@xnhk@pTus@-2u|HI_ zE<@X5zs6#Y_oa(zc{(0e9s!2`mG=URe$KkmWK#t7Tbc}|)o35On{9_XC6LXgrAl!v zl@4!=C95#;!$?^^QDoDS`W-UuD&|K5SxZA{xc^glVBz^7?sDRgRg|_yO2G}0InT9C z7HCVo(&v!x>6o<>budBFqIx?bKQ4>OFx;1zBYjOic!7oKmx3v>RrF%b)P3(=U#O|h zdeX(1p_DZMp^O91+|_^U!C0w6rWdbkjbl?uSL%>vD%E`etNECv(Cf4kIPx2nWE8nZ z))P)w(x;@a8L!{!Avl+Oq&4%h=i~`YT+2NqRqWti8JOF^3(v5=w7c`Wx~ZHdJLrz) zJ)Z428O(jWD|jITgyMhQO~`rrC)QrvqSJK~cv+I^jALq!zATC!#Ok^qH#U9Cu^M8~Ef7&|MGhI3?skB-&OTPDZfed?;&037LS-jn*H_3ThfV zXANcJ)bDBnZ43*T30AtSOR&#)U3ydJ(?``DxkN_mNi>HWUWC+^17rw#Td-JjRdG|7 zu19Y~l0=aqnviX>DHv{`J`0vQM^}I*I+7D$t5BSmKjY?t6GqV*WRqSiugK=ua{&YU zN#0eq|GQzxC$s@_;9vKoGg5D7<-kF+=u_F?a)H}xR5ru&)l zf3rdmGA@X&W_{^W73^lATIbL$*n{8T!#hB&BauLp=y1}-j3N6`uUVuoZA5-n8`Wj- z;0`?&c~gT7WjA0C{#Vdzn(-ve)X}-<)Ms$5&8C(6kuOLVWBIMYd=SiTGrghqI6dWh z(u~*OQ<1*5d0{T27AmsYycv%ti?I8hRR~$aHloJTLERhN+j2kcYAq1I&?J*j|0PEt z4SMJX@F3m5b&B`4I9aEas&Ci}r&H2Eh$m!3XXlQ=-UE=-68{ zg8ZsKQoUdft(i;xuR)H-aSVpP&m$=&6cefs$Z0(pufJAVra1S1j(WPIT${Y*8>~PP zXQJE%&Ub17Nk)S9fO&?{9KA~o!xZIo0Q(3lp~yjU#f(-2ZO{N zwng3bDL0zTq7&i70eFT==7h|0zg9EpL}buY9cjL21$Yh8Lhka7cNT+vZ;Iu}=8j}I zd9HKR1=PR` zlWhWVmU-z28ip>pLZ@KDc~Msn!6GN{-*RLC8^XleCDa!x&TM1#xJzTG z|K5d1l}l^z9x$9N`VosWXYi=em^N$3DqRs1{WXj%4_BrLEcPH-Df`F-@bFn=PcOcf zhJo_u>8iRc_;&>MW*zhC8!Fozp(#kF9MsM#@*Cz*V|mN<=~xnu{_@{rpfuR6hOos` zBEc5l%5kWG_Mq{;$b;YE6s5ob+4M1;O1H5e`Ce+9F6JCdK_>s9!qA;%=uvf4Mw!#} z23yU&sE94HwMrwSu`|KQtkR^T$+r|Gf~8(>QWN=DOjg8?6Z<8ji=j zg2x_+eE(U6VQRf$q42_1Cel>ZU#g>OzWJ2p@Mk=TWn!mONz4Df4XKOKvWYX*9YGu0 zeXJN-&OE?b4JVK3S|%pqKgP4N8C^4 z9@FQ)lrDn3O%g){NJ&^ zkb%x2HywqrL zsafVY2`YF2%cPx~jsVt1@8L$9*2^e5KB z8ZI`GFO=<;bLPuNaOzA<(am7LF)*QYb5vCW5%#3zty!S49^lCvYLN=iBTWcB%6{i} zSeEh1Iqq`V%4q6kCs;o`ZXdH$Jpi2-BnQ+dGQMpfAB}wDSi( z6sycXsJ=yDfoGtgIMbcCu;6Sk=aRY;`xC@87Pk2SE?13O{2{5QPC7l^aFT5ux5kji zvWR|d{4CTK)BYL>6S3kd8w4}Uhop%@SKk69_63Xk-wVhjtB7ro15Scw{5RGFW>WUQ z*UJ9pBWN-B^G9kq-N)kK1<~Z8@u~0C4oyJM=U6A^zXtHI{slAqGHm36UJP5bF`qB- z*`T$-x|N&byP-AF;K`!WB`ZBsS-T&!J`W=!b zA3A3$odZTs#2h~ho=AfeJOmAHmm}f5A#^|ZK7`aXW6T8b=QZO03`e?IOEWMnhmaPg zzitAC{}DFb$RvYO51HqnntNn4QZJACLC2f=n6D#|H<9L$yx>$&v-w=lAS;ge@9#24 z`mZG(L0@B)s8bO+9nVj^@wbi0SH&{vV`W#~ENdJ^XSR$YX|!d%i! z2Y7B69I)7b&p%z)H`mQIl8l{vqT2p9q4VSTwz1XhH=OZ6U0Y6dr>Rb~xCj<)**r|^ zY3S~S<`HPgHYZgMo+pjeqz_3di6aRh0}mUDo*jkx(n9+0`OWDgP-;t-jh|j1fyAfo zgUDa1C=&^ru1imX17l4#sQ96oh<=)!n%-+s*GHXdG!mON5aS$_+hk;*Gu&l z)cgYSlD$N&O)_7q*(%leo#F!7#=c_N_^matronmztom!L-#hu#DWV-XQ+ZZ_UqOzp zL7kT~q4WqnW!@sWo6^^qA2H^Y_P^uahjQ53D)SuE;Q}elR-#7_!xwkUrMd<9doL|& z{P!RK2JRP+swj&|6iV{&11!meX&W4`%mkdXhu&2g?s4}gFln}_j8)APsp0||C3m_F z^+W7P2wi|@YKOhP2v)TXcbm#SN%urg`Wif_ld^$SigmE=M+rnHM%IBiEN0+|4-Ak^a5Dl1e4ki z%4AZJ598mm>t+%9Vec*V|thO7Ngl7Qwh8}t;T{XBf*SMR19*YF*WQJzeb9w4l0mTqyGDnfVe>(`AmDdfetqRHl%Z@3JT40=exlsb#fy$0s+6XSDTh8-55b@CG`$u_yz z^NJwT3{sK#6Jf4epm&lK3Kt}$$xX0(x~@#W;FmzWH)J!FY$k#k{C6x)CqM9LuE-j! zeHd!~4J)n(J8$G;q(XgDO5cLtkDz1pWEG4gYsr?wFCQQ&Ya-{fk<0#1N+rW1(+ud& z%uvOV`jNCcI}cK-PmY`RWWH&L>dQ|T!Sf?{U%C%0by96cijR;bQ9&ia)w{8B``9sk z#QprgSFjIr58W^CIxA&4kY6FxX+H6aTyaC(R8t#sc{w;f8{WB@)<%5~GJ)h2()yx1 zN;Uye4CL9!#gEuITFqp;scs|FjK_)P=$Ptiuv%zV(ofL|Q)w`-Pa9LUXJc=+$=7ZySRq9OiWhVwd@~jGlt8M2l}E7S~5ptCoMZ-u9JaT;#MNVTUv&O#dl1PaJ+Lw!=7R0x zG2JhzW$4pbnrr^w+u6W%S>65roO2;QjG{Db6bsWZO4FiPDvg4)C?<-dC=C;%P>iA^ zT@({XVwx7k)N~Yu>C%{#MzM5S+&+$?X_`3ZQ&E&=Mmb5i&N=`0x$55B{rca#_uBpc zZ@t{_2mF55bJ0F?T_lMWaNJV%S}#VL zcl|qcx?KXx#K}j^*ZyyG4mI*)`sTb~1+I;BVx}2^Qaf9@XKt4YcLuG5iYfpL_Mn*G zQZKkQlEI!b=9z-O*dpG+^`wdh`Z?c@&{ykPQ5F&v(rTZ8_j{=n_O#BQszdRA?hNpt zkahA4IPZ7C5v!lFy%_w~nQDYLPxR1xx{jl&m&sr}_gPJ0Ro!|9M=Tu|lgWkv90&k1> z)?doLN8!;!=f-2R^~RDL}(6JDw9fv!srx&;S7n)@PGKIZy}X5++Xew3XZ&1q3-*s>+qVPFzC7bb_g{-PTor1tIZ#9GC6e7Hzr3c zAnS#81A3uY&eF^L3i}wif3Z#xyF(H}Qixp$opY2LtfXG*?Z@6(-Of>AW+KkF&^`$> z6o`fN!9jJ2{JHMq_n_8R68&GPb5(=g>X&r=T%Q1UqGXmxL1}7`b)O!Mzb!zm&9{B* zE?hx~TCLW(l^FF~IF&P)c^yit7>-zu>g;dNH@`>MHi@&<3F>&5b(mBp+=`0Yo<{}E z2MuCiB5kgsdP~uDC+WGZ$}#Z|;X6Sl*7==wg*VB&O|IpeANdPWLK>HNp3-d3U6XXF zT4Jrn2`J?D$u~u!BzH2<}%duBGmY9uw?)`ycq1hKwqd6 zO(Q7qDc*@L7RzOlaO)sFsqw(7Pq!gn0$OB-h?8Y@8@g#7+uUTs#g}$7y0=n%h%&y6 z8r!ek)pz;gGnpff7&r2{sGuAi+AF3n71Cj?zK803PVOXfy~PGQh)PSfztJD#{Wb=@ zvqePWC63YSMZx)r^&s79=M8KH-fJRGAyZ7D!+V>4{*_?lrQRRCzo?sFibdvXjdO%y zccNj7#dLhcbTo7<C|SMKn)&Y1iwPZRpHcD_77f3=xRJKwH1)A1``t53ZF@+UgI>v26?UWBI2N8dD><#qvcDZ*dxH#5+e zWhTSo*vR(VDwh6^6^Y^k^RXT;%4LI{hku+6w zJXE@S&MrV#l*=<@FVxO{Zxb4>kN>IOLp_Bvjx*I0_{#ZYc{A>N6%Oz#>H$3RuJf`{ z*{Ae-`U)^(stLDiQP$6*o=2NyY@rI}yH8D^3kz(P2o+!GSAAh;6a9%Y5tJ?sju&7zc6Fu~ z1&>x)chzT^o$UX}pGwb9gI8Lq{0QOJnyR2`8^kbre1^DRWy@F0hh%>ks%|H2vp_s- zdVp~eqR~#I)^>uvFUW9I=v5%^4Qc@>^n`wh{~B$Cx7kaTZN@z{=tbRtlbr&BPlQ`; zfbsHdrnnC;^BO9lLiF(NP<4!A7d+Ey+&yREq96J@LQFDG>YGghdlz`hF*x;nP`}+? zZO%k3?4TAu1+#kE2z+=VSTh0rF-=X8E5NQQoJj?Gr408~Y97JS{Tw&dS3ZxoaO@vr z&(=@tKLt-4e@QhH`!jX9*y!D$MwnmtSHn^p6V?49%u4cBkg`6vAU*#b~RM4qR(@MMT5Jws{R0jWx&xPsH7zEqSqF3yVoh) z5$|dK)q1~)6RGk#l=$3#ePctV^vs`mq|7z6&pMzkb*(fKP_-cQ@Wg zO){R%-3eY~+r&(K$vQcd`MGO@C;OZAS@J#Qyw3&ZLC_*!8{@QOegXKYa310q2IAbH4WCEX_&v>io-u^HjxQ9P-XKn`D7r~)@`XQCv z?QJy{MvoO^%5A!ieFbz=nc#nKoYt(Cj2N zSwSBT5u4;VH0htfuT*|=&)U92eXjGm&PGRMiUxSFPQ;;dvc(NLx6A4uleuG}7;oq9 zcuz#zbTfmQ=L*p=j?y81y)e85Vq2qoXK65KhIsv^mlkRD= zWhM!wQ3i(H?p9*apQ2$}h=}q3pmRkR-I9jJ8>f!SczY9iFp+-mLoSl#?cUpJg5A>< z+O+}iH(AZ{Zc^h#lo-x-+o{q&8Fy}J1qe9^{d@;|jkHVrx&Fr>#7KL~)zxWBUtt^=q}rqNWS&JTVWYH3~IbXJ1l%yM5zT zT8V0L_ZPgU4!V`j{qs#Ru}dL>+TIHvtd!{?7kL|Dz>#pqaXlTUAW$m3ace2EhjTcl z6Esh;Ptir+c!?qHVx50aXLQ#B^MM-HEi)ul&N2}u5mvjvix3a#k$i56ETcz{z+-#O z`~Fcs3^g>AYH6UO&vefK^5eSp`PJejG~_^3zGM!6)C2s7sFHF%mt)-%Y}@FMyUfq< zIoVYB0zA`ys6paVeStoOA1$$Y%>Ht<80^Xw-^v!SXT158zcq59Ja zgS*P7)%Iae=Tl!LHmd9RsYQB>`o>$PI*7$Kb31(anwg1jdsY6)?DPKvy-*{P;lW6o z0LHY-HpX=^qr8F{Zp5)Pi&sI3EOWx%fOdEXegB@$u?wXl5)(l7McV2Zd`N|OfL^JB z1Hx?+%K1Ds4)^P>gPVe0X>@7=PHYxiaLyW3+z#Twh5UAfd0xK>JFZsBTPcU&THe-= zP-&i6Pi&g3M;Fwhy~m3>+{#@h6LfUPWs>DlIbYV>pTG{!>pI&?_1{O$yDJ>h>}r3U zKg=%h%Ddg{ePuqQ*RyRbZaoS_N)+Yb&J;MHn!WAQ+t3js`F5ndMgCazQxW1reI;W8 zzj3A6(yc5OB}?e66{wtzfy!Tx^XY8BhAov`crr>}Hfgl{imT zNVhKGQ*_!r@P)fyPRP0bgswZ$VC%t$qp_hX^h%_AbHhst>;Sm~9-OY@wjw(qdzPF)eHrNS%e%A`~t-MUR z^La&}(FVp}Lk<@(|6(Gd&^pO<<=JXBH8z1RjzFi3vM2amx@f_9*5dS+sTXk`Pniq# zetm|#%4?u<4p^rL_nL$BYb6S}7kcQV5p>jc)Xf&#X%D0SUV|f2LAL`o3I|prj><9U zx^5`-FzP89{HS63u9_ru8@&hRew_Q-VWR>FLZ?`;?T z?JWJQrZVV&N^0L_Bnris!FQs?aJ2)TXoP|Hn=JHPJo)&G8laZrl`_p;Y`K$tzvJzY zo4}^4^>uouX%lw`=K!O?*@bX<6Pc-J;I_#ZfVr`twu%&3RGVvTNy(qY5db@ZTrN7>E z+At7yqv+rpkwj-P%IZVq$w?**?hm8$8sxhu)P~>)SR37R3LZ?g*UAl4jPcvMMw;hU zUdTsshH)#X9mDGmLlb(a#AS5cTROzQoXSnbQO*GKQsh>-oB6Ca?P%pF{MPgMz<1Fy z>C{0n^G`&348TjRlyR~K1enF%=A(t1;o<(`bG=$;pzee?idHVCW*Wp~7+>0n6c5(bP7=7P>1{`hN8t0+>{t|MQ3DcF? zI`G&%8D}r=<3I>^#_1<`?S5qB+TfVoAN6i9&|L!@FBS$zh8Ba~1!(RBDx@7bz`nH zZtaXS)hc_lsRyau8KzcT#MS045aTu6;z7LTx3ZXuOt-t?>Jrp;o82J4J2H4P{8C^} z!cqrBFO*~lIxKAS z^i}Q&_0-i4IZ77cN8GhUpXwK2+v`cK>+s1NP)6afdo6Xl*9@Z@M%g?4 z<9?Yq)7z&O%1%27Txc`Ra))wvn8v`;*W$R(rH`jO4KBmL$`e#^zU@Y}#!I)3^K-b| z!;JD(zlSaoyS=NtI{UQ$S=UsZCGJ$$DffKyp?0i3=0q&)@~KZ>ea#Ws_J zz8^*g_L?>nZWr2ky66G_j1TVn9%|3gALx2KZie_;zow&Yiy7xn0&C=@LH)T^6O(bjF9d6kuE7uP#ZeCvPpGNhQCW_s zegwS#om@>Nq=M1T|8`iXPJ4^X)jD)f8!Q-!{+vh;??=h!Q}aVitG!-5tsav}^!{l4 z#4F|)@q0uKS6|v`esk9mQzUD|GhlI^aI0MP#Nl5L9)~fDQL=%2Iew}H^HR_vWiX@j zn{m>eT}`DE`@`C+aQ0tP^P_B-bw@J>plA+@8EBHda8Q2W$=rCSkd;(wE|V@9g0FKP z8OKayV!^dG7(R~<%0jmtGHy+V6uZp-i=Q3T_X+sy6xAQjtTV{aexfl{{t89WTl`Gl z{j_(l>8tu9R^rs-8t?G##I5MuRuLTfNm|eNLI+0KsmYfS2NH~i@}H%n;}v~ z31dr!b{ z^+XqC+cIi07Mb{KzcB<@k*QWaGb5xBla>esD6bUVE|%wDH^`Dg0` z_A@kg7;MpMHrQ$uSUr*JX=7o7VRnOUv>G%WDt|;}W}2F=<$fjV;-Cu0JGrMM%|*YA zQ7}UAL@Kvxz+(6O8SpF$1WZNgPmz7>duZ`v-U4^uk3HxQ^pERhD7JW655j8m8kKy= zG>X~kGyeXr|EBiDICyy;>f@B|ZQ{k%-n@_(Rg%f=dfzWWy&lFzl!-#3)*A$9Lj^r! z+EdwerGVOv5GA4(gml*nhLPVbaP}^{fZll@ zSNsEAMuj%ZeAvDj{jf_e7JtxlL4;nsuSeN#5xdy;4D+@>OSjl};gL7wc+qLklEYOF zTX+aZ*kMEH#M|UbTyiKb;U4ot)a85XYA;J%g$Er%&RWTSs%S&eeucJs6ju9*7bic3 zp{xun9~&2CBxR z(_=yMK{$v=v~UT^r_xNc9;IbZ6Ztb27@KEYMpqhS) zd)y#%>}b8q-;EY*WpC{um-2omo9)N?ew}S^0};YSC0gM^^Pr9r*Qkl8u2drJ)Mh+9 z*a40gQ&q3&`F4Psqw>Uhv&MvhDY@XUO&ZjWG{SssP8< zlCQD!%yx09_o9jxW#${R$F|v2cijnEai%-~AG_5{Dqz}6sfCGlGYC3`n1QJ#2Ng4z zi1ruz(LvQPr8_E`Z{O5E&|jJJ)Mjsqa@Y75;LG7rdTy6Z2LUQUoLnJQs&g+yIR=*< zEoP%Us>y_O*I0#Jdka(8YB_Q*j)q|^O>_VdB=LL634DzglQHy9@x4|;AhTkwS$?5CRf4kG?WGbAU1LMvIw^FF%!(h@xdb8GE!nc#@6UU;HaOzK)I`O!= zoBVb1_g7Goecjz9IOTG>CXW1dfTGJ$NlWQ{O%D}ODSra59>ay^$j#5bLb$supFj=mHAnri?p%sjA&={${#Ry+?5@^}493|T#u_dM zf<&QoYpQkiI)Q8?fQYw{o3$vMx9E#RGe!QvJJVZ%_g`en%vds$CEVRx^KBVwrxu)E z57xj4#P4j?YHtXheHlspjFLxCB7Ja9t3c3x)RbG3e+8K>#IIyKts&;2n)d6@-4SfH zLoLC@47Q8dM^EY?5A{7C&ge@G3E5rlVp}Qb^K!Z_QWTi4^-%aP9tRx>YAsPm#4&Tk zEVYNsDg5Vh)V@btZq=i8s6B>zEysI2fCerQ`>4W=rVy@frwSJ7hj9n-GDP)K+31_i zd}F!2L;Xs%P&Y0Y`{}$;;jV_FmdV>*Q-!vyr9uY666qms1=-R1b?Q)q!gY9yMx0G9 z+A0$T-HI#zTIY!@@8{|(a&omP6>rFEsLWAp!Qu0M(TnPR#~ zqFw}}_?doDdvc8z;ibqkh-kL`2*)=8H8)31ktt#i%AlvH!0%*%DF?{YC_G50ooC#A zfjO|lRx+0$O4)iNI`4>yHPcP2_}ueCHi|3tWB!G>it)_C9r5vCnM_<}BspHim{R3* z@r~JRQt7}4u7Pk>gM%RP4>9{wH}YxYZPG#1;7HI%;f`%m!Vnz~=opC3m*>KmxKz+hoc%%$OT~Lb71u$vbl!+&bRCF z8P}_==<=s^m+$L1u}@j}qYbqmhTq&|rxT$xMgUi!iKTi%oh73|`%F4J1m9Ui_0{lS z263$np6a><1rglqNFIyn-bA!b9Bwj7jK>MYiB+I!l<33EpE33Hv=AUR9}M!AQ4d8hRy-L6QTVTwdK}DHU0-gJKXWTGoA$2Z^vFVV(_puX81au6 zOF^j{Q5@Cu>nM2}?6{DwnMIG(iDh7ZCRJ67>RleJMU`ldhzq=5sgdFxeD_o46aP7X zqMf3iRITiJJ_=>2tsKn)lpA33U0kl0cfIWowIzJQ15eIEBi7S7BSk$5 zw3ax>g7ja~MN{=5y;SUg2~OA!;2AdbG zz*>RcIw69iWqA5K@!R3(>Vr6eOf+u-zkL}EbQG;v4z8x5qrM_i3DjFG@pgB=Mt~I; zd$+1OxSfF!dX9hiVizgLxxOHd)Ujwln3G zs!gmh;nZn7j-wbo@Fg{0N-f7zA?^(MYo^wX5TqLfqPb&?g0aTabDc0l9eCG|>OVA9pQM8JaaLINy?k>x)6V)q>L*7hVF4w7#$mt$iLbjT$(+1R# zT#hmuYtA?B{@f$tGWA<{W}{i8cbh1Dz)}?NKzhB9+O9SS@VgZv6?ai0-eoj}c!n@A zG26ao-Z5@f(cQvbBM~mD;i+A=khyAfYAXCzhU%Ry`vltYcDVj#Vr#$FBf=aZ{Qx*!RacfESR9pOWjoizK6Tbu8Fywertdi^1;;Y)I`&<-co15^?! z`sW~Fni!*ggHFFqW}xBTM4Qzy;!3d{H(y4*c7S{XV8gyt)G<>|?dFS_!5N7Hc)cg1 zbgM{hNB_skSTT$}bl_#8+_`%kQ#^Q^$tZD>pklI31I?G)WV)yVubU5!CKIhDQv>GA z0f%;jsz=N?`L5K|$5HF92cv#K@7>}SnPD$O)y2SwMX*I9`iT6V`tb3mnHyHy^CWpi=L;qdx&xMI5LZ>PySRk0XhZbq{v zvBz9GJ{%2@N`{g_##TnN(zTw9}SzC25R0|P}B?htN-eE&qaFnLWPNa5s3dgMO zzLT}EXr3Km>g=296|bLsT%YK=2j{*^uB12S6TvnUBhFOQ7{N$$Naw*j%Ru$r)MYK~ z@wkq%?hfB+YM%H&w{-p17pM=n*6vPoIOvv*^@YczToV3GG2lftpO8KsD*HTo=%pt@#HNilq2YY)r&3k|A122`pt$zau4@(tW;s&Gd&+*|=rGUfYFSYc^QR|LCM+$e& z{TMFb4e3@g8DUzeXE)B_sCl1`oNsI7IVv9A_!{*!lJ499l81uRMRuay1Y)%WSi2k~ za%W0c1X`#Vr=5V$E+-~wHVwty4?paVI$Z0@AL=;ztUa8q-><{N zZxlnQ@p!N+3eH`M{wu@XcG8K3{M}ujl_PeWE8v?V5hn#mP{I}(iDe^|v6y~8MHhG4 zD0#Me0fl{m83~(?lAWmIQ)ZyN&YPoJY;W_09!urL%g0qSGby(l`As4$S0P)7c7tu9 zoAQWvJyCaO7C+DVGPzJ?FfC2K5Fk*bJSpbyCzce=$jZ6+)CVvTOBiwafaG$#9|tJ--$CU zLsg{+_bi`nMhE9EPN2?KgTPJparKg#j$d}itaIqrbkRtk)#KuN$xGp!4fbmNv|nIu zBd(iJJ1ao(7`ExI;Lo5&-Srl^A_1;D zmR{VAx;m-*gDMl{YW0Xh`NQpf`Ob6@X|NpyM)wR>;%yE*YJtche&KNVG3s@C;JO8w zOk=;ve0pZE_e=1Aad_cW_+X=nCaY=8+C9~#7({X_2-g{Rx7+)250x6p=c?$vBK*)L zXz05bCG05iCva7c7z)Ewkcqj}oV#1P4>9T>AF+7qr`2+5>>aka4bK!VzLnRg?V`py zC6UM{chk+isgpg-sFZ$P4w|}SDE(2;?z|s<7>&|Kp4L;DE#h*uFz}-N$L|S9uIjD@v!~Mo3G|&~)i~xp2;EbU{yJdif%ZwvImzq>+Xkbf1$|m& zet_bu7C%)Tq7==w6ZU_Ot{g-4<=|LjVUPwY=oYlrdg7nYytdm<>OPB} zd(^A|1Nz9J(p{Ia6*b|mh7M;2h0MDg)%yt^D;tkkLHDk;{Tb&td4mdp>t4ozyr*OB zV&U%WDJ5HRsJ96C)!nIkg&F53nL;^6Wq})E;L2hmu)%J`aW7*I@nqu}b0IyQVK0%l zt6OoT8DM1$_*G#m$yTU{AUhjCjCHbt`aXra>yM%>6Uwo4Q(4HZ?<0D0Yo0sb+Vac=5)E+Ds zE;2y(INKnm$ZKVTyQ2|idl}T}uv4hv!^A0<3aoaqX8hYxPfK8$5~|>^m`v{D#CYSL zh0%zLeIF*?LM*CqfU9+_b@x|nMA40c+oIqOWu9l>Cm44cHFbcv<+9~Y_}6v)S~??# zPIjvj=g|9+ba(}bxdpVSVb0@GK*iuida$azTkYyHb%q=ktO7hA&s9y0l+rb&qMf-r zjEbh(GlTQ))kGwnjxMl+Wk0o6JW5<**;}>Qr*rIM@-vuk7|J;jPdm&#*$nnu8JsOk z1&QL|t(R+pUe?5 zj(tp|f?N4}cJQ2x{&3Z5)y#rjzw}uzi^APi|A-kxlX=cy|@Zo6o#Pu}8u8=r$B=Hpuu5`ahE_m5`rR z_`OmP>N9wFmLBfEuGfmE)#d1^40L)X-_NE7+`3Y?t2c0iP2@b9F>S#^#)AO;$^0&x zK%`w&MUlP5RPAuaFikFCWR>P)eIt5rhji!Zwxff$FoX2q$oNubR!X(u-Q-$O9z~13 zNUX${CbVG$IC{*StD-~B_j=O%ujyHM z`)J{g8m%POUT~hi8txg3nkl0nr=XCxz^<{YyQ}wlWuYc6_ev8yvlRQ=g~%+E?WU8NsJFp_F?HcdR8!Tn&muPTNqPGs)TR;>c+*9ZdGwTzuX@?ENDVD>T$4r6Au^ztdIWQ;_jk_LI+?$$g z6Uyu6CCgB|5BJ|_7l__$tI?AFA#$Gq@h;1X#C| ztY+9U(7l6kI5w&T#j@S{dE~Gfh1Ni&=YR(v>KJp>{s>?GQ``@~!N`M#-1*_MU znqTXDQ%vmRf zwC)*labWX-;4ampuwbik_W^dNvYNnx66=oRHQ_7CHyFj-81+QDr4qI1&NQWy>7}sE z4?&0l!8yK4G;bW+tEHZnqCGA_iLW8LtH@s=6|TXTwIIDarVt5ww4=vP={mcREEQ8P zaW)oKo-2#!^o?*+6WE&xlI%Av!X1CFB`?*?HUZ_g%dG}SPTjR09!_>1qlpuZCdo|4 zu`Q;)2co$~@<|WXzKN_Z2M40?Iy>ptBg8!t-5t+(+>xLrBKt7TyVbgDW(urZrzjs? zKSj~ zqx#n3qYu+}?zmwnQE@9>H`0mjtXekc5lX*#)Z9dnD@u+-FT{v_U}#$9=_7BxAEF>S|h zU4m;lK;}BA@ab?sOR(n00lM-eQCe%)lbJJcm*45OKEXYRh2U8=^LO`#4o7pQf!WXC zs5AL&IX~TogE>L<{ZY?=$+KaBP7rE`Y!}HO)F^6mAkMy-xfN3DjWCc~4>FfL7K6@h z#K)aKo=`p(@wnr{}{a+LLXYO#p1BdEnu zHYvEjw*$V&5AG6Nz&Eq-?ThqRjDQLkdqAR1^gsz%T|susVIp@;ewCOn6UAnfM*+IC zgxb*BncUs>J7JV^n8TgP^@Phy1JN5I+;z)~ZJcm- zx8((AjQiNH^#!S68)HuPr%os}I#Y_Q#Iwv*{lxU8L;YbJBI)sd-JPSuHI>=9a+(?=@=_ruQ z-4nNzioHdCOLgXuonm}a6S*l3&N7Cf*89R|g2)$AgGb2rO1@d=;>et4DCB1=EP|E!1?4aJn@CY;x<=9Hxs>Q7!Jw(Iqk&99xUmb^WoH ztfr!IoB3WS2%ATKV&I`jqSJ)W%*CZ8!!=Xj_7ilj(^Kx;Sp$928(cYI-Ca;MaMMV* zw2j~Q7lY6!t)_&AkH*IgMHzL+x42aj++7_LsHaVIMXPY@N^f!Z3efA0 z-6qoc?)XHlNRjUP=$^uzVQ(}u8EHRyaTifJOg7r+!Z_G{oZL#sX}cFM8)4odA|=65 z-NRJ*0Yu;rJ*^*@zV zeJHuyjf*W3?Wpm3@OF+KV&cU#xmXkv#|rVTG%{LzpjYcJ?F3mto@NA3>+OTujG-^G z=&4Xc?eh{$ip>MRSqL* zf-|O?u}K+ex#Ii(oj*bJ2%qgu5aRoP|MU9{-e&}_|IB;qc6WEMFT8=5$saO<*MIK) z?YzG|c>QPIpSCmgPtN9Fe}CG}5NqBY{Naw^_5a8F({>i}590pch3Hn^-x|FB{rmrM zX5Ie5&c^Y6T=4q$@5l0fZ1DQ`@5k_dOz?X8`_pz7`u}ie|M&O7&Zc}{j3Ro1DEN0( zzx;Przx;Przx;Przx;Przx;Przx+2<|MlOaqd0%E?D5q+Z?Y8L-TcdwbG)gtG!KPecyD#MOhpDG+D3AB|^84>z1*&s4ue14iHh&K` zFe=!93N|q3`#sP8>#N()e~#|I`+IJ%!(d}0f{js(-S3sN-2WB**LT6L@0Cw^_cOc# z{yo6Y5Ar(wyDcOITL=;VxtrPEUBQIis|a2v$+>^``$@q+;oTYhT2!?#REIW4)K3N|q3 z`#sP8>#N()#P3J<-~Ii&EFK#cAZOdr!c(l>Tk9;jn{imORg6p z#9tFPF_`e|U>NRo0?9r7_Y;DD!W$p_T&?+=)R%OM?xb{(cgHnRr@qz0iO7 z;UJTLeIcQL|9*~_ecB9|fGCNcEFrFcrFZ`p%n(vr@~<{-a@TRHR vUcM5+zxz&mfA9bD_xA1CL=%h{BR3@ZJ`!T7LHEBOqY5g(n z&wdQ=Iqy05+D>f8<)g6MygBE*=lwqKeSDlguxolUKYlbFeeOhRI+uRn9U_WS`RO0n zHFz?Bi4X=+VSAi9$ypoXy(dAxpvF&pm1h<8PyE@JKAlbHqlZry($Ved@l!N;=vX?F znMmhS*!}AcGEGCu8HT4}7=J*$hHRpLg1!?ZG6m5rsLdgI6LhwPXc{Fv*-A7YCi>PI zqPK1$`f-Hl@iw9(pv=ugr`8d@xSr^ZTZlSuBiaUf3iK0@-A=RtbQ<&?XyXQ=t)QQR zUbr16)dAa}?}GjX+PjhH8PGeR_B${Kodx{|^qWmYOPxf&1^pdlMv1-$y8BL|9?(Hh z0YsaLUI)Dix&ZnkXlobI+aU8U$bhbbf_D?G2R#b<5op~#L^;r3K!>|!iA>A%DPUAD z?bWuG0V`k&rzO<7Y#H>|!Rl?bWaDI%|5YyoO>773Ku}T8s9uUywoN>iWf+!z8noTq zHuAbk{sg=RGkEwu{;B8GL@t#cpPW1~6FqcdI-iOTL`CQqpo zhm<+8EFnT6b1l}kl=DUImA}F|&RLo-$vEvgah4w0;!q$8jDb%T*IRyE?G&5M zA|G|9b5rU2K75dNWsviwS-Q?3k5v|L{MmBxb~F`NARt6*YrW#t@Hbsq6yM+SqI^i_ zb{*%hQn_i5PaHj7qx|#I-Zj0>C7~xKM`T7@Dk3VsMnRg&k58r%($Qrht$VzjzY(-Jq+x_}9|$-f zKL|PkIxIsBcp*~2HoTy`P%@1|DOMCGmmW_cl1r75O#hG(VyhR4rA)2sBvXo1pFkVE zji%M!f&nRTZoToh(xw_+nF0Mkoty4sd}zkjkw&B%Ptc1g6{_NU=_!c7WL7spEB)E< z^880d$z`4oBhlYCO0?DT5|vLF&!;ruUWouJ6aKfKuuwfFGyapzcurU8g>Qc2>t8$l z{LELUPfbmpES$(cmplIK#IbB9ojRHvPdxLLu`iE)Y2@i6!$XG;9em0i95}Fl-`@T` zyLavE+p)bjzU|2`ZhhkM#~%H{BcI>W^YBBl&pr6S{h$5JefM_XbN5|co9~QvZn|S* z$L$;1Z@cxD_3LhKTN}A)O}I7G;)tLfz(wQZYHGLl@POl0bX#N?Wm+3=qdUV(@y%9} zqTzUtvD6hFqj(>6g@-9VWDToH2HRcX1jT2pQDTV&Yea1=vi=37e^KjSR(n@G{cE0n zN$dBvLH`Ma5Q=W!EG_KlVGDhI%EHbeR@{}*7Ix2Q3wsu{h5kj3V1)KwkSZgz@1h#_ zU)CE3uJB}(2Cm7SQ5q~6OVGv-#xW|%dIZ(o2AwmEi}ElA*GVyE}}a4qQ=F_}qV4M#cjBF8Z>2FDL;7+P^3phGq9G__Dia zeA!(Y-|o&K-)>)@FT0~hCM*SJw{MoYvfbV`C5v@@(Ki-fC{Jg6yYY-~H$EeWNPIzS z${`ZJpjH>zN>9h+k2|HKkW#z23HNKn~)NLu5w}ulo9UwR4D9yE44mJ;SR#3%u%w zqfuEGIYjndifxN3g-c=wUQy}jukdG;lcNNIT6v(>@k z4=m1O7La&Y5XO=?DQ4%zl$a&!q?iYbtO<-t+&bHC8fV(C8XY-d;({(&SLqdFiH#4k zar63(Pl=9c7B`Kv9aFF@mzHNX%x3WlcIKVgkiopCnTJN~%z;N8dB^wWC~uDR=16aj z^ya{u18*2}jufv*#o<((m8sY=73aE)PdOdaj-QGnQ*p|v^s!mtrSh6AMR$1GnYDti zbcgeD{IP1d2@T+|IrXvrZ70=`F&GY5M&+$IK+;wIJN`yk=SggFDcEg;* zp%^sJ#ZTi9vI0LyEG)EZqMsl9VyT0){*qkqAN(67c3JNWi4;^2K%9K6Ab1N=}N z;KziA9|}l-9|{tH9||OZABqF~P#oZg;s8Gs2l%0ZWWfWH84pM@8YJL7?cqn#!;iFw zA4v~C6bHDN6feoEM;SvbyNn_2`VRy6&@=Esblxf$=dBzlZz6nlOC?iR^hQO)g|@vy^Gg2W)ka>SuD=wC;Ix$p5~w_|OonCT z{WxLISI`{G_)Ai1wo0`Ka_> Date: Sun, 17 Mar 2024 17:33:25 -0500 Subject: [PATCH 108/134] optimize SparkmanMD --- demos/genesis/SparkmanMD.fur | Bin 228460 -> 23079 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/genesis/SparkmanMD.fur b/demos/genesis/SparkmanMD.fur index 399cce9eeb59fc6b7d7582e76d845408a1eddd56..3e16aa8e22086c849a431e9ef93d3402570462e7 100644 GIT binary patch literal 23079 zcmV)bK&iiYoaDT9d>lviFWNZFJYr@G3^Fq_#ZKZ)Ht}Y|v>RH;CX$02h7B{vF*{}k z*_J_UF^)#V%+S-*eXD0A+1cOT`@8SGKi++xcdXN0UDMT7b1c8|n43E{p@W;R^VW4+l5OfOg_5e-&8wA}4^k<*}pw)kepcp*)QXs-k9b)dZtwAX?5I?!GR+Ur1j9cZru?RB6%(>6ILC^3K5O#*EN#&{Cw zOF-u@TE2moycH}Wa7LIK?pO^1&P)Y=tOA1&7zN92c1d7P|DRp#qUfSD%cWr|kL1Fn{5is!upK~=m=WU&^4Hm=4Xnuao0 zEdtog!q?$v;WdjvFN@bO&%bm0`EqE{gHJy7_!Cdv`^T)MPe1t7)+e$iCOg5PEY`eC z)jWXBdj*-?d0`0pqb5^1Zw45-B$Kmv`G40*0AV`8Kqo?I`D0H$^~BSU-uu{7;PD$* z8vqpG%u3Ms|GNr7mB50Pz>Sr_x&QBv=l?uiv)Bv4V*3AI{}!*gb^hkX%FzX$kjznK zgn98TrjT{hi_jMzj5`tiCj>*ap8n1Q?gb*c+bOGrCAG~*!tuH zP!n_ib4lfZLDK&-0V7Z${-{(*S|Ft&RpdtVWJVdZ znUjU0ijwqhdqy$4sS{-fje4uc(dCT~UD8Jgr>>>V7(B3}-ezp^T|DqZ*T|2x-}$Ad zYCoxS5B&Q5r#~FO>@Z)yxbKVF?a<5_11Xa8{b(~qoPu(<}vKc26tdG3LG{;+n_mOF0Ua`%0Y*Zk#~zx<`< z-{h|k{-fsa4?F_yede*6zx}P|`M*7T)2q)s_4ES|J$26mHGli#isDswt-0^7e|_Yh zC!Tub*?ZWXp^1xTxv$_$)-O(_WAW7LiD5k}6KXiO_st*Mub=$r>th$Yn;Q4Lx~=y0 zUB{08{5F{22YbK&^4*u;fAzI@YsX~UtN(nV_N5mS<=4M@W3=*}S8G3h@1+-Ce*dj^ zKYFqDl@C5hyzttawKwFAPhYNm<&A#=BYyh*>$R_Z@x_a^?|<{rYj1q;DyZ64``*jj zzSzF!%QwD1T-Sa5%9Zn{P9CTqXueR_&~~-YFzjsp_Q-(QZZw+gEG{iimnza1Jg{l{ ztf^Hq%VunO{JCfTR`b+jj{=+gVdDClXP$Vj=DCL-1;%{zv1e<51^@n+KRxn~nn&-i zdH(Ou0OLJd^T^ZB-p3gBACHZi_qnG)+vlGKheW%Fo=SS-smFl5|6cQa%{^Pdjn8df z_J_Yc`|#a=y#IG=Hb4ERd2_ei|Hzsp_uao~<@&YrZ+-GlTdFIU+*h+9d(kZu)KzzF zE>@*fE?ra2PtiKynHy#*GZaI|>iwLQxl1xM6@_AVNAupFn!;(hT*I$Fe7Nm}?So#u z!PV8-^$oz)`|p0eW8anL?!L48KB#?v$NqyK{_Fj1wQm92zV@&8-unE9H){X+*%xou zZmWI&$lJAVy;b|(XSKC2e)?+dKfn0wbztk4U#PA9cn>JO^T|uKZyx;OdD$94I1mgJFB2Qx9F16zF0=Hp@`aR) zhiJsGO2QHg)8?+6o2OK3bF1f-@wF=#7tFn5GFG;(G&MbET1iG(PGHf@|YW6g>M(8tO5e9h!FznfXU_Wt|s zx^=;%<@Y`N)T%XG*DP7Ra?PC&+%b3gy-Ox;TDkh6ho9K8aNYC;f310R&5UWw*KU38 z`8zjlo;P*z@9wx|>+R+FD<1#j?D=b_E&j{Xizm$~%e$-QFAEFj&nVbb^T6y$1v#@H zyr*ixL$^-dQ1d{+9W^U*mexF$QvACGEACx6VaD9t)U}UIKxb~O%w7KMgGD8?W^Vbz z$}JDBm@w;(4U3mgt(sakY3-)!{Ji2t#VPYkIil%zEicPY;pJ{wT|KKTd&2w*o_bm- zrkq%qmbYYzvP{gLTdfHzc1#ZoFiU9{v7uzoEI$Re$7SZ^U!rl|xG6Xp>vN@B7xq`u-hXo%v<=&!5y?{`I?8 zzHKws)qdW6;^VLPU%LA33%m4m(~Ix^`1$cmXAXYy+6PBY{rth(pa1aX%e6b&f8M?C zl@~7f4!-cp*ZaPIfWw>uc7YE+IP2qePs6wwFd@1uYLc^7iwR7d+((W z{`q?CkKfjQdf=UxJ~?^%i!b-@K7RV$+U=*`-uB_ngO`5Yw(aAu&tLwi_O%n+Yq$68 zc=5ZPyAHqi($_l<9z1j4wa<5cefi?cpI`ZO+sU@?zv}J#Y}>cz&wc-0{o$WZzgK(F zH1Kon1t1(yU(GePU)tqa_$25RSnBg-8J}MI9kUO08Uku<{Dh3e&SD<)lrX zS(%P0=1)~hO78!?zIDZ;6_V2VQwmbkm)$*Q^2)rF-#@T!@zkZW=RADZLp5_#*KK+1 z?@LxczF^uDHFq!l^Miu?bN9M}+iL!N*KK!fS%3RI_dNdh+luD?t>%tn%k#M*--PyA0J%z=Qa6%{QIKG4?MME%Iv$J zy0dcPip8tT6?1P}U!YvNxO#CmK6z*wRmBl@3e_e2}NKD=jt*UtCP^q$|_x3{**wd=cmUwz?#zpOoe`J)dGoj6l>@~4-7 zZrXFi)$#hPf#5$s9cg{<;K;9EUhe(nv!P4xj*vfn-&S|%a^KL=clY<5J#M)8{;vL( zJ)I3Zg2V5Ab^-NYx_Y41+1Yid8ExKoT1Pspb^E*feAc?Ax<1?SBVBw^-NDYj#%5a3 zda4sH9=Rm3IOmY~<_4>{wC?q7u^c7J#% z!U_xd*R9&2YpM!}RUN(PjoPV7O=BcG+H5YxbRxtMRmnAc9XF%jwKS)m&cLz-7>&$8 zg7b3(QvX1pRN~C5qV!H$Jxks)#M7|UMI=lZ(hGP3E+0#s!ZAvxgiQtSSJ*c2KZ$70#pvC6E@?AwF}VO3?C$ulFHQWvH`g$0C?9m=0m6oaM8+~R3s z1HT|!lc^qXEZ!`2`}9RM3oiF9TEXG*kx5e|rBh`PyKvs5ED^4ir_U6Ug%iX!-n)>0`M$r63nP#WnH2|cdPMzSP77ADR#<2{2VnMZz!2LtM%lWhhIThn+g ztgAnPWIC|=+RH2iRn*lQvMycsBD#aaEp;Xn*Zjj#lk1SJ^4B+w?Uz)_UtVnGnpzyD z&a1mlS)<|Jb7%LTZfebuy|c6LO!I|yjJ*89m#X;wUj4=6`>rdfqr1;p_1|#yspYjj;}8*CZuzS`&O=q7r5oaXic=jI+auT{__ znQ&fF;o4Q)ma3YiwuyJA!!u^5t;`$9U$=bWyy={bdF3V9OP3W0ThgAHovJOKR-7d& zSY0hnzkP0)oxk9B>E4{VYC>K(wNhR>MJ=UyK_8l5PJ9k(^d-inq z*a*v+A6nZRgNHtAI=Zjj(Q%~i@cWIK4HtRuzka>nbFpLKg$C;LFLYSL_gBvEICS3c zd;QHYe&mxAXAkx5+hf1DXHRq6yC-zr9lLjaf9TSutNgwp-Zee^O6S zlV=99x~md$xfu*D^<;rE5v?fMRkFT zH3jl7S`r?>%ga*)N`=#xk-d0zpbaTc3C&*6>#Uk6r_(aU=^`s>M*d)_l zJMAG&y~l?#+t2y0HMyMD`floaD^I__%V`{Rvh=&U@{QjkDTb~Sjl+%oKFE5t?m)9V zZRFgr?n1A1Fd!z*pOa|@S;3FmL>@|i)+QC7yt0zN(_rnRqY&qEt6-!@R5s!27yf`T zL+-HINsN~99Z{mynTuQEB5cTAF6-?zWlgAW(puwFdm9Qed4`jCQI6)YemT!eVVQ^| zkBB&<1-L<0M(Uhyxwwx==Ue(xOC5TVq9>9+WQJ_1${-p<*-lZqr`t%S$VY|=rywtA zG?9h&v#bi$P(x5enqcvW38Q>&m`BlmQ-Djk*+aWS1(<0hY%_YiX_C5=gwPTS8n{j! zK4enR=FTByw(XjiWp}v;Xoag;FF?XrUw7CPp!8u@e?LkXNAQ&EUFnwV+FaiNi#D-s z!Q$ciK#ZGHVmJ|$A!Z62=9-R?`PKZ^Hb55PwqZqcx)hGf_GVGW>2}(0~6tWWBpRFK@ zwcYGhv-H2Rig~GW2#-TqMVM68K~)eDD9*=lcQ7?0H$H;!^Cq$!HeJ>RPk&x;q)>Uz zwmQ#3N+DyErrFGss^u4BrSTWT& z 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ɠJ<#?8)P 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�F7|QTcx3?<=nnACa}L4G9@9VA4R%Ho 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 vUcM5+zxz&mfA9bD_xA Date: Sun, 17 Mar 2024 17:35:42 -0500 Subject: [PATCH 109/134] update credits --- src/gui/about.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 21ebc3873..22d0c268e 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -152,6 +152,7 @@ const char* aboutLine[]={ "RevvoBolt", "Rockyfan75000", "scooblee", + "sheffield^2", "sillygoose", "smaybius", "SnugglyBun", From 2dd5e85299c55bb3be7e0bc1cdb8c31c5de3643c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 17:52:52 -0500 Subject: [PATCH 110/134] update contributing guidelines --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 78cce40e3..7fd671d5d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,7 +54,8 @@ the coding style is described here: - in float/double operations, always use decimal and `f` if single-precision. - e.g. `1.0f` or `1.0` instead of `1`. - prefer `NULL` over `nullptr` or any other proprietary null. -- don't use `auto` unless needed. +- only use `auto` if needed. +- avoid using `goto` unless absolutely required. - use `String` for `std::string` (this is typedef'd in ta-utils.h). - prefer using operator for String (std::string) comparisons (a==""). - if you have to work with C strings, only use safe C string operations: From 3efbbbb503f3457073e328ef837bb363115902c1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 17:53:36 -0500 Subject: [PATCH 111/134] .dmf demo song exodus --- demos/genesis/Swaggin_Dragon.dmf | Bin 22889 -> 0 bytes demos/genesis/darkstar.dmf | Bin 6111 -> 0 bytes demos/genesis/darkstar.fur | Bin 0 -> 3872 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 demos/genesis/Swaggin_Dragon.dmf delete mode 100644 demos/genesis/darkstar.dmf create mode 100644 demos/genesis/darkstar.fur diff --git a/demos/genesis/Swaggin_Dragon.dmf b/demos/genesis/Swaggin_Dragon.dmf deleted file mode 100644 index 20c358049890d0e27cfd7c9d97404260a5727c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22889 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 Yy(k|tSw32_yh^Q6YR~)s0bPlI;GeV5*8l(j diff --git a/demos/genesis/darkstar.dmf b/demos/genesis/darkstar.dmf deleted file mode 100644 index eb269ba590aed4bf317668135b5916674296f7c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6111 zcmchb3s@6Z+Q-{krAjq+)uM8ls%sHZB7%SdNsDE*B1T0(6o}{|A|i4pkYviDQUPHV zG=RW}m?A}>6uCp9AY|nh0lCN}0YVZWKnNlC%X|Y}zuj)TPj~mbJWrnYyeDVoJ?H

em7ri|W5P`VqU2#dL;6cd{%K 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 literal 0 HcmV?d00001 From 85e49813e10899b1348e2a2287f86e4046cbd6e5 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 18:07:59 -0500 Subject: [PATCH 112/134] update credits --- src/gui/about.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 22d0c268e..ce3c0b729 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -177,7 +177,6 @@ const char* aboutLine[]={ "tom_atom", "traumatized", "Tytanium654", - "Uhrwerk Klockwerx", "Ultraprogramer", "UserSniper", "Weeppiko", From 572d826fb120e9715b4e40619d7c918c6495839c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 18:16:19 -0500 Subject: [PATCH 113/134] fix warning --- src/engine/platform/sound/gb/apu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/platform/sound/gb/apu.c b/src/engine/platform/sound/gb/apu.c index e4be5e99a..0a8a84ca4 100644 --- a/src/engine/platform/sound/gb/apu.c +++ b/src/engine/platform/sound/gb/apu.c @@ -907,6 +907,7 @@ static inline uint16_t effective_channel4_counter(GB_gameboy_t *gb) } break; case GB_MODEL_AGB: + case GB_MODEL_AGB_NATIVE: /* TODO: AGBs are not affected, but AGSes are. They don't seem to follow a simple pattern like the other revisions. */ /* For the most part, AGS seems to do: From 1bdbd640ecd9829ac2a99c036c25e8ae0857e02e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 17 Mar 2024 18:29:21 -0500 Subject: [PATCH 114/134] long long -> int64_t --- src/engine/platform/gbaminmod.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 2ad6713b4..a1ad0efe0 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -49,13 +49,13 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { bool newSamp=true; // cache channel registers that might change struct { - unsigned long long address; + uint64_t address; unsigned int freq, loopEnd, loopStart; short volL, volR; } chState[16]; for (int i=0; i>32; - chState[i].address+=((unsigned long long)chState[i].freq)<<8; + chState[i].address+=((uint64_t)chState[i].freq)<<8; unsigned int newAddr=chState[i].address>>32; if (newAddr!=lastAddr) { if (newAddr>=chState[i].loopEnd) { newAddr=newAddr-chState[i].loopEnd+chState[i].loopStart; - chState[i].address=(chState[i].address&0xffffffff)|((unsigned long long)newAddr<<32); + chState[i].address=(chState[i].address&0xffffffff)|((uint64_t)newAddr<<32); } int newSamp=0; switch (newAddr>>24) { @@ -573,7 +573,7 @@ DivSamplePos DivPlatformGBAMinMod::getSamplePos(int ch) { return DivSamplePos( chan[ch].sample, (((int)regPool[ch*16+2]|((int)regPool[ch*16+3]<<16))&0x01ffffff)-sampleOff[chan[ch].sample], - (long long)chan[ch].freq*chipClock/CHIP_FREQBASE + (int64_t)chan[ch].freq*chipClock/CHIP_FREQBASE ); } From 21eed3e51248ccb735d72022a6569026be52b722 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Mon, 18 Mar 2024 11:09:56 +0700 Subject: [PATCH 115/134] GB: Remove GBA-only system configs --- src/engine/platform/gb.cpp | 34 +++++++++++++++------------------- src/engine/platform/gb.h | 2 -- src/gui/presets.cpp | 12 ++---------- src/gui/sysConf.cpp | 25 ------------------------- 4 files changed, 17 insertions(+), 56 deletions(-) diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 2ca894633..e942951ff 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -64,15 +64,13 @@ const char** DivPlatformGB::getRegisterSheet() { void DivPlatformGB::acquire(short** buf, size_t len) { for (size_t i=0; iapu_output.final_sample.left; buf[1][i]=gb->apu_output.final_sample.right; @@ -106,7 +104,7 @@ void DivPlatformGB::updateWave() { } antiClickWavePos&=63; } else { - rWrite(0x1a,extendWave?0x40:0); + rWrite(0x1a,model==GB_MODEL_AGB_NATIVE?0x40:0); for (int i=0; i<16; i++) { int nibble1=ws.output[((i<<1)+antiClickWavePos)&31]; int nibble2=ws.output[((1+(i<<1))+antiClickWavePos)&31]; @@ -189,7 +187,7 @@ void DivPlatformGB::tick(bool sysTick) { if (chan[i].outVol<0) chan[i].outVol=0; if (i==2) { - rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[i].outVol]); + rWrite(16+i*5+2,(model==GB_MODEL_AGB_NATIVE?gbVolMapEx:gbVolMap)[chan[i].outVol]); chan[i].soundLen=64; } else { chan[i].envLen=0; @@ -221,7 +219,7 @@ void DivPlatformGB::tick(bool sysTick) { rWrite(16+i*5+1,((chan[i].duty&3)<<6)|(63-(chan[i].soundLen&63))); } else if (!chan[i].softEnv) { if (parent->song.waveDutyIsVol) { - rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[(chan[i].std.duty.val&3)<<2]); + rWrite(16+i*5+2,(model==GB_MODEL_AGB_NATIVE?gbVolMapEx:gbVolMap)[(chan[i].std.duty.val&3)<<2]); } } } @@ -335,7 +333,7 @@ void DivPlatformGB::tick(bool sysTick) { if (i==2) { // wave rWrite(16+i*5,0x00); rWrite(16+i*5,doubleWave?0xa0:0x80); - rWrite(16+i*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[i].outVol]); + rWrite(16+i*5+2,(model==GB_MODEL_AGB_NATIVE?gbVolMapEx:gbVolMap)[chan[i].outVol]); } else { rWrite(16+i*5+1,((chan[i].duty&3)<<6)|(63-(chan[i].soundLen&63))); rWrite(16+i*5+2,((chan[i].envVol<<4))|(chan[i].envLen&7)|((chan[i].envDir&1)<<3)); @@ -412,7 +410,7 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].softEnv=ins->gb.softEnv; chan[c.chan].macroInit(ins); if (c.chan==2) { - doubleWave=extendWave&&ins->gb.doubleWave; + doubleWave=(model==GB_MODEL_AGB_NATIVE) && ins->gb.doubleWave; if (chan[c.chan].wave<0) { chan[c.chan].wave=0; ws.changeWave1(chan[c.chan].wave); @@ -485,7 +483,7 @@ int DivPlatformGB::dispatch(DivCommand c) { chan[c.chan].vol=c.value; chan[c.chan].outVol=c.value; if (c.chan==2) { - rWrite(16+c.chan*5+2,(extendWave?gbVolMapEx:gbVolMap)[chan[c.chan].outVol]); + rWrite(16+c.chan*5+2,(model==GB_MODEL_AGB_NATIVE?gbVolMapEx:gbVolMap)[chan[c.chan].outVol]); } if (!chan[c.chan].softEnv) { chan[c.chan].envVol=chan[c.chan].vol; @@ -670,7 +668,7 @@ int DivPlatformGB::getOutputCount() { } bool DivPlatformGB::getDCOffRequired() { - return (model==GB_MODEL_AGB); + return (model==GB_MODEL_AGB_NATIVE); } void DivPlatformGB::notifyInsChange(int ins) { @@ -705,8 +703,6 @@ void DivPlatformGB::poke(std::vector& wlist) { void DivPlatformGB::setFlags(const DivConfig& flags) { antiClickEnabled=!flags.getBool("noAntiClick",false); - extendWave=flags.getBool("extendWave",false); - outDepth=flags.getInt("dacDepth",9); switch (flags.getInt("chipType",0)) { case 0: model=GB_MODEL_DMG_B; @@ -718,7 +714,7 @@ void DivPlatformGB::setFlags(const DivConfig& flags) { model=GB_MODEL_CGB_E; break; case 3: - model=extendWave?GB_MODEL_AGB_NATIVE:GB_MODEL_AGB; + model=GB_MODEL_AGB_NATIVE; break; } invertWave=flags.getBool("invertWave",true); @@ -726,7 +722,7 @@ void DivPlatformGB::setFlags(const DivConfig& flags) { chipClock=4194304; CHECK_CUSTOM_CLOCK; - rate=chipClock>>(outDepth-2); + rate=chipClock/16; for (int i=0; i<4; i++) { oscBuf[i]->rate=rate; } diff --git a/src/engine/platform/gb.h b/src/engine/platform/gb.h index 5bd445b7f..fa0484dff 100644 --- a/src/engine/platform/gb.h +++ b/src/engine/platform/gb.h @@ -59,10 +59,8 @@ class DivPlatformGB: public DivDispatch { bool antiClickEnabled; bool invertWave; bool enoughAlready; - bool extendWave; bool doubleWave; bool lastDoubleWave; - int outDepth; unsigned char lastPan; DivWaveSynth ws; struct QueuedWrite { diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 9cbf192e4..4c96204d1 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -132,21 +132,13 @@ void FurnaceGUI::initSystemPresets() { ); ENTRY( "Game Boy Advance (no software mixing)", { - CH(DIV_SYSTEM_GB, 1.0f, 0, - "chipType=3\n" - "extendWave=true\n" - "dacDepth=9\n" - ), + CH(DIV_SYSTEM_GB, 1.0f, 0, "chipType=3"), CH(DIV_SYSTEM_GBA_DMA, 0.5f, 0, ""), } ); ENTRY( "Game Boy Advance (with MinMod)", { - CH(DIV_SYSTEM_GB, 1.0f, 0, - "chipType=3\n" - "extendWave=true\n" - "dacDepth=9\n" - ), + CH(DIV_SYSTEM_GB, 1.0f, 0, "chipType=3"), CH(DIV_SYSTEM_GBA_MINMOD, 0.5f, 0, ""), } ); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index d6a2b043b..b62fe7f2a 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -330,8 +330,6 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl bool noAntiClick=flags.getBool("noAntiClick",false); bool invertWave=flags.getBool("invertWave",true); bool enoughAlready=flags.getBool("enoughAlready",false); - bool extendWave=flags.getBool("extendWave",false); - int dacDepth=flags.getInt("dacDepth",6); if (ImGui::Checkbox("Disable anti-click",&noAntiClick)) { altered=true; @@ -355,23 +353,6 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl altered=true; } ImGui::Unindent(); - ImGui::Text("Game Boy Advance:"); - ImGui::Indent(); - ImGui::BeginDisabled(chipType!=3); - if (ImGui::Checkbox("Wave channel extension",&extendWave)) { - altered=true; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("note: not supported by the VGM format!\nallows wave channel to have double length and 75%% volume"); - } - ImGui::Text("DAC bit depth (reduces output rate):"); - if (CWSliderInt("##DACDepth",&dacDepth,6,9)) { - if (dacDepth<6) dacDepth=6; - if (dacDepth>9) dacDepth=9; - altered=true; - } - ImGui::EndDisabled(); - ImGui::Unindent(); ImGui::Text("Wave channel orientation:"); if (chipType==3) { ImGui::Indent(); @@ -401,17 +382,11 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } if (altered) { - if (chipType!=3) { - extendWave=false; - dacDepth=6; - } e->lockSave([&]() { flags.set("chipType",chipType); flags.set("noAntiClick",noAntiClick); flags.set("invertWave",invertWave); flags.set("enoughAlready",enoughAlready); - flags.set("extendWave",extendWave); - flags.set("dacDepth",dacDepth); }); } break; From 01db0f7e542ee560bd1c27a0e8db0d915d76d689 Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Mon, 18 Mar 2024 12:22:38 +0700 Subject: [PATCH 116/134] MinMod: Fix CPU usage warning --- src/engine/platform/gbaminmod.cpp | 4 ++-- src/gui/sysConf.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index a1ad0efe0..3e573811d 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -219,10 +219,10 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { void DivPlatformGBAMinMod::tick(bool sysTick) { // collect stats for display in chip config // logV("rendered=%d,updTot=%d",sampsRendered,updCyclesTotal); - if (sysTick && sampsRendered>0) { + if (sysTick && updCyclesTotal>0) { // assuming new sample, L!=R and lowest ROM access wait in all channels // this gives 39.5 cycles/sample, rounded up to 40 for loops - maxCPU=(float)sampsRendered*chanMax*40/updCyclesTotal; + maxCPU=(float)sampsRendered*chanMax*40/(float)updCyclesTotal; } sampsRendered=0; updCyclesTotal=0; diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index b62fe7f2a..b1c996113 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -448,8 +448,9 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl DivPlatformGBAMinMod* dispatch=(DivPlatformGBAMinMod*)e->getDispatch(chan); float maxCPU=dispatch->maxCPU*100; ImGui::Text("Actual sample rate: %d Hz", dispatch->chipClock); - FurnaceGUI::pushWarningColor(maxCPU>90); + if (maxCPU>90) ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_WARNING]); ImGui::Text("Max mixer CPU usage: %.0f%%", maxCPU); + if (maxCPU>90) ImGui::PopStyleColor(); FurnaceGUI::popWarningColor(); if (altered) { e->lockSave([&]() { From 5618a02b955c508aa4855c933a2edd50f95a3c39 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 01:23:42 -0500 Subject: [PATCH 117/134] NDS: possibly fix muting --- src/engine/platform/nds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nds.cpp b/src/engine/platform/nds.cpp index d373326cb..86135f0ae 100644 --- a/src/engine/platform/nds.cpp +++ b/src/engine/platform/nds.cpp @@ -449,7 +449,7 @@ void DivPlatformNDS::reset() { for (int i=0; i<16; i++) { chan[i]=DivPlatformNDS::Channel(); chan[i].std.setEngine(parent); - rWrite32(0x00+i*16,0x40007f); + rWrite32(0x00+i*16,isMuted[i]?0x400000:0x40007f); } } From b27d99b1b0fe9c6b7bcc7263db9321e247084e57 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 13:36:24 -0500 Subject: [PATCH 118/134] GBA: memory safety --- src/engine/platform/gbadma.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index 79e8b7880..5010c5b56 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -345,6 +345,7 @@ int DivPlatformGBADMA::dispatch(DivCommand c) { void DivPlatformGBADMA::updateWave(int ch) { int addr=ch*256; for (unsigned int i=0; i=512) break; wtMem[addr+i]=(signed char)(chan[ch].ws.output[i]-128); } } From cb2aeb649f817ba5d512c132a18e304010e6c291 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 13:37:29 -0500 Subject: [PATCH 119/134] GBA: wahahaha initializing after pushing --- src/engine/platform/gbadma.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/gbadma.cpp b/src/engine/platform/gbadma.cpp index 5010c5b56..ec0dab3b3 100644 --- a/src/engine/platform/gbadma.cpp +++ b/src/engine/platform/gbadma.cpp @@ -501,6 +501,12 @@ int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivCo parent=p; dumpWrites=false; skipRegisterWrites=false; + wtMemCompo=DivMemoryComposition(); + wtMemCompo.name="Wavetable RAM"; + wtMemCompo.used=256*2; + wtMemCompo.capacity=256*2; + wtMemCompo.memory=(unsigned char*)wtMem; + wtMemCompo.waveformView=DIV_MEMORY_WAVE_8BIT_SIGNED; for (int i=0; i<2; i++) { isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; @@ -510,12 +516,6 @@ int DivPlatformGBADMA::init(DivEngine* p, int channels, int sugRate, const DivCo sampleMemLen=0; romMemCompo=DivMemoryComposition(); romMemCompo.name="Sample ROM"; - wtMemCompo=DivMemoryComposition(); - wtMemCompo.name="Wavetable RAM"; - wtMemCompo.used=256*2; - wtMemCompo.capacity=256*2; - wtMemCompo.memory=(unsigned char*)wtMem; - wtMemCompo.waveformView=DIV_MEMORY_WAVE_8BIT_SIGNED; setFlags(flags); reset(); return 2; From 3423ac87743e923cdbb5a8739699295d6b95a441 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 14:22:05 -0500 Subject: [PATCH 120/134] prepare for 5E01 --- papers/format.md | 7 ++++--- src/engine/dispatchContainer.cpp | 10 ++++++++++ src/engine/fileOps/ftm.cpp | 3 +-- src/engine/platform/nes.cpp | 4 ++++ src/engine/platform/nes.h | 2 ++ src/engine/song.h | 1 + src/engine/sysDef.cpp | 22 ++++++++++++++++++++++ src/gui/guiConst.cpp | 2 ++ 8 files changed, 46 insertions(+), 5 deletions(-) diff --git a/papers/format.md b/papers/format.md index e28a14773..f979ee2f7 100644 --- a/papers/format.md +++ b/papers/format.md @@ -239,11 +239,12 @@ size | description | - 0xd2: Ensoniq ES5503 (hard pan) - 32 channels (UNAVAILABLE) | - 0xd4: PowerNoise - 4 channels | - 0xd5: Dave - 6 channels - | - 0xd6: NDS - 16 channels (UNAVAILABLE) - | - 0xd7: Game Boy Advance (direct) - 2 channels (UNAVAILABLE) - | - 0xd8: Game Boy Advance (MinMod) - 16 channels (UNAVAILABLE) + | - 0xd6: NDS - 16 channels + | - 0xd7: Game Boy Advance (direct) - 2 channels + | - 0xd8: Game Boy Advance (MinMod) - 16 channels | - 0xde: YM2610B extended - 19 channels | - 0xe0: QSound - 19 channels + | - 0xf1: 5E01 - 5 channels | - 0xfc: Pong - 1 channel | - 0xfd: Dummy System - 8 channels | - 0xfe: reserved for development diff --git a/src/engine/dispatchContainer.cpp b/src/engine/dispatchContainer.cpp index 8d4983c77..0a88e5407 100644 --- a/src/engine/dispatchContainer.cpp +++ b/src/engine/dispatchContainer.cpp @@ -310,6 +310,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do } else { ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1); } + ((DivPlatformNES*)dispatch)->set5E01(false); break; case DIV_SYSTEM_C64_6581: dispatch=new DivPlatformC64; @@ -673,6 +674,15 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do case DIV_SYSTEM_NDS: dispatch=new DivPlatformNDS; break; + case DIV_SYSTEM_5E01: + dispatch=new DivPlatformNES; + if (isRender) { + ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCoreRender",0)==1); + } else { + ((DivPlatformNES*)dispatch)->setNSFPlay(eng->getConfInt("nesCore",0)==1); + } + ((DivPlatformNES*)dispatch)->set5E01(true); + break; case DIV_SYSTEM_DUMMY: dispatch=new DivPlatformDummy; break; diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index 781a1be17..dde258f98 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -723,8 +723,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si } } if (expansions & 256) { - // TODO: change when 5E01 is added - ds.system[systemID++] = DIV_SYSTEM_NES; + ds.system[systemID++] = DIV_SYSTEM_5E01; for (int ch = 0; ch < 5; ch++) { map_channels[curr_chan] = map_ch; diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index c5993c624..d8dfba3d6 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -817,6 +817,10 @@ void DivPlatformNES::setNSFPlay(bool use) { useNP=use; } +void DivPlatformNES::set5E01(bool use) { + isE=use; +} + unsigned char DivPlatformNES::readDMC(unsigned short addr) { return dpcmMem[(addr&0x3fff)|((dpcmBank&15)<<14)]; } diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index a2c1ed8ab..aaebb4d84 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -62,6 +62,7 @@ class DivPlatformNES: public DivDispatch { bool useNP; bool goingToLoop; bool countMode; + bool isE; struct NESAPU* nes; xgm::NES_APU* nes1_NP; xgm::NES_DMC* nes2_NP; @@ -93,6 +94,7 @@ class DivPlatformNES: public DivDispatch { float getPostAmp(); unsigned char readDMC(unsigned short addr); void setNSFPlay(bool use); + void set5E01(bool use); void setFlags(const DivConfig& flags); void notifyInsDeletion(void* ins); void poke(unsigned int addr, unsigned short val); diff --git a/src/engine/song.h b/src/engine/song.h index f9ebc0c62..f9983ba9e 100644 --- a/src/engine/song.h +++ b/src/engine/song.h @@ -138,6 +138,7 @@ enum DivSystem { DIV_SYSTEM_NDS, DIV_SYSTEM_GBA_DMA, DIV_SYSTEM_GBA_MINMOD, + DIV_SYSTEM_5E01, }; enum DivEffectType: unsigned short { diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 3f0b0c2e2..e3cbc2c94 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -2069,6 +2069,28 @@ void DivEngine::registerSystems() { } ); + sysDefs[DIV_SYSTEM_5E01]=new DivSysDef( + "5E01", NULL, 0xf1, 0, 5, false, true, 0x161, false, (1U<,effectVal}}, + {0x14, {DIV_CMD_NES_SWEEP, "14xy: Sweep down (x: time; y: shift)",constVal<1>,effectVal}}, + {0x15, {DIV_CMD_NES_ENV_MODE, "15xx: Set envelope mode (0: envelope, 1: length, 2: looping, 3: constant)"}}, + {0x16, {DIV_CMD_NES_LENGTH, "16xx: Set length counter (refer to manual for a list of values)"}}, + {0x17, {DIV_CMD_NES_COUNT_MODE, "17xx: Set frame counter mode (0: 4-step, 1: 5-step)"}}, + {0x18, {DIV_CMD_SAMPLE_MODE, "18xx: Select PCM/DPCM mode (0: PCM; 1: DPCM)"}}, + {0x19, {DIV_CMD_NES_LINEAR_LENGTH, "19xx: Set triangle linear counter (0 to 7F; 80 and higher halt)"}}, + {0x20, {DIV_CMD_SAMPLE_FREQ, "20xx: Set DPCM frequency (0 to F)"}} + } + ); + sysDefs[DIV_SYSTEM_DUMMY]=new DivSysDef( "Dummy System", NULL, 0xfd, 0, 8, false, true, 0, false, 0, 0, 0, "this is a system designed for testing purposes.", diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index b1734caf1..aee901f4d 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -1243,6 +1243,7 @@ const int availableSystems[]={ DIV_SYSTEM_POWERNOISE, DIV_SYSTEM_DAVE, DIV_SYSTEM_NDS, + DIV_SYSTEM_5E01, 0 // don't remove this last one! }; @@ -1335,6 +1336,7 @@ const int chipsSpecial[]={ DIV_SYSTEM_POWERNOISE, DIV_SYSTEM_DAVE, DIV_SYSTEM_NDS, + DIV_SYSTEM_5E01, 0 // don't remove this last one! }; From a83df6e8fdc8df89172616d414d3084126fb84e4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 16:02:16 -0500 Subject: [PATCH 121/134] add 5E01 --- CMakeLists.txt | 2 + src/engine/platform/nes.cpp | 128 ++- src/engine/platform/nes.h | 4 + .../platform/sound/nes_nsfplay/5e01_apu.cpp | 401 ++++++++++ .../platform/sound/nes_nsfplay/5e01_apu.h | 89 +++ .../platform/sound/nes_nsfplay/5e01_dmc.cpp | 732 ++++++++++++++++++ .../platform/sound/nes_nsfplay/5e01_dmc.h | 127 +++ 7 files changed, 1458 insertions(+), 25 deletions(-) create mode 100644 src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp create mode 100644 src/engine/platform/sound/nes_nsfplay/5e01_apu.h create mode 100644 src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp create mode 100644 src/engine/platform/sound/nes_nsfplay/5e01_dmc.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f6942bbc..44e751627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -516,6 +516,8 @@ src/engine/platform/sound/nes/mmc5.c src/engine/platform/sound/vera_psg.c src/engine/platform/sound/vera_pcm.c +src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp +src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp src/engine/platform/sound/nes_nsfplay/nes_apu.cpp src/engine/platform/sound/nes_nsfplay/nes_dmc.cpp src/engine/platform/sound/nes_nsfplay/nes_fds.cpp diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index d8dfba3d6..6ccfb5c11 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -64,8 +64,13 @@ const char** DivPlatformNES::getRegisterSheet() { void DivPlatformNES::doWrite(unsigned short addr, unsigned char data) { if (useNP) { - nes1_NP->Write(addr,data); - nes2_NP->Write(addr,data); + if (isE) { + e1_NP->Write(addr,data); + e2_NP->Write(addr,data); + } else { + nes1_NP->Write(addr,data); + nes2_NP->Write(addr,data); + } } else { apu_wr_reg(nes,addr,data); } @@ -151,9 +156,40 @@ void DivPlatformNES::acquire_NSFPlay(short** buf, size_t len) { } } +void DivPlatformNES::acquire_NSFPlayE(short** buf, size_t len) { + int out1[2]; + int out2[2]; + for (size_t i=0; iTick(8); + e2_NP->TickFrameSequence(8); + e2_NP->Tick(8); + e1_NP->Render(out1); + e2_NP->Render(out2); + + int sample=(out1[0]+out1[1]+out2[0]+out2[1])<<1; + if (sample>32767) sample=32767; + if (sample<-32768) sample=-32768; + buf[0][i]=sample; + if (++writeOscBuf>=4) { + writeOscBuf=0; + oscBuf[0]->data[oscBuf[0]->needle++]=e1_NP->out[0]<<11; + oscBuf[1]->data[oscBuf[1]->needle++]=e1_NP->out[1]<<11; + oscBuf[2]->data[oscBuf[2]->needle++]=e2_NP->out[0]<<11; + oscBuf[3]->data[oscBuf[3]->needle++]=e2_NP->out[1]<<11; + oscBuf[4]->data[oscBuf[4]->needle++]=e2_NP->out[2]<<8; + } + } +} + void DivPlatformNES::acquire(short** buf, size_t len) { if (useNP) { - acquire_NSFPlay(buf,len); + if (isE) { + acquire_NSFPlayE(buf,len); + } else { + acquire_NSFPlay(buf,len); + } } else { acquire_puNES(buf,len); } @@ -242,6 +278,8 @@ void DivPlatformNES::tick(bool sysTick) { } if (i!=2) { rWrite(0x4000+i*4,(chan[i].envMode<<4)|chan[i].outVol|((chan[i].duty&3)<<6)); + } else if (isE) { + rWrite(0x4000+9,chan[i].duty); } if (i==3) { // noise chan[i].freqChanged=true; @@ -279,7 +317,9 @@ void DivPlatformNES::tick(bool sysTick) { } } ntPos+=chan[i].pitch2; - if (parent->song.properNoiseLayout) { + if (isE) { + chan[i].freq=31-(ntPos&31); + } else if (parent->song.properNoiseLayout) { chan[i].freq=15-(ntPos&15); } else { if (ntPos<0) ntPos=0; @@ -678,8 +718,13 @@ int DivPlatformNES::dispatch(DivCommand c) { void DivPlatformNES::muteChannel(int ch, bool mute) { isMuted[ch]=mute; if (useNP) { - nes1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); - nes2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + if (isE) { + e1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); + e2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + } else { + nes1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); + nes2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + } } else { nes->muted[ch]=mute; } @@ -743,10 +788,17 @@ void DivPlatformNES::reset() { linearCount=255; if (useNP) { - nes1_NP->Reset(); - nes2_NP->Reset(); - nes1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); - nes2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + if (isE) { + e1_NP->Reset(); + e2_NP->Reset(); + e1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); + e2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + } else { + nes1_NP->Reset(); + nes2_NP->Reset(); + nes1_NP->SetMask(((int)isMuted[0])|(isMuted[1]<<1)); + nes2_NP->SetMask(((int)isMuted[2])|(isMuted[3]<<1)|(isMuted[4]<<2)); + } } else { apu_turn_on(nes,apuType); nes->apu.cpu_cycles=0; @@ -779,11 +831,19 @@ void DivPlatformNES::setFlags(const DivConfig& flags) { apuType=0; } if (useNP) { - nes1_NP->SetClock(rate); - nes1_NP->SetRate(rate); - nes2_NP->SetClock(rate); - nes2_NP->SetRate(rate); - nes2_NP->SetPal(apuType==1); + if (isE) { + e1_NP->SetClock(rate); + e1_NP->SetRate(rate); + e2_NP->SetClock(rate); + e2_NP->SetRate(rate); + e2_NP->SetPal(apuType==1); + } else { + nes1_NP->SetClock(rate); + nes1_NP->SetRate(rate); + nes2_NP->SetClock(rate); + nes2_NP->SetRate(rate); + nes2_NP->SetPal(apuType==1); + } } else { nes->apu.type=apuType; } @@ -819,6 +879,8 @@ void DivPlatformNES::setNSFPlay(bool use) { void DivPlatformNES::set5E01(bool use) { isE=use; + // for now + if (isE) useNP=true; } unsigned char DivPlatformNES::readDMC(unsigned short addr) { @@ -897,14 +959,25 @@ int DivPlatformNES::init(DivEngine* p, int channels, int sugRate, const DivConfi dumpWrites=false; skipRegisterWrites=false; if (useNP) { - nes1_NP=new xgm::NES_APU; - nes1_NP->SetOption(xgm::NES_APU::OPT_NONLINEAR_MIXER,1); - nes2_NP=new xgm::NES_DMC; - nes2_NP->SetOption(xgm::NES_DMC::OPT_NONLINEAR_MIXER,1); - nes2_NP->SetMemory([this](unsigned short addr, unsigned int& data) { - data=readDMC(addr); - }); - nes2_NP->SetAPU(nes1_NP); + if (isE) { + e1_NP=new xgm::I5E01_APU; + e1_NP->SetOption(xgm::I5E01_APU::OPT_NONLINEAR_MIXER,1); + e2_NP=new xgm::I5E01_DMC; + e2_NP->SetOption(xgm::I5E01_DMC::OPT_NONLINEAR_MIXER,1); + e2_NP->SetMemory([this](unsigned short addr, unsigned int& data) { + data=readDMC(addr); + }); + e2_NP->SetAPU(e1_NP); + } else { + nes1_NP=new xgm::NES_APU; + nes1_NP->SetOption(xgm::NES_APU::OPT_NONLINEAR_MIXER,1); + nes2_NP=new xgm::NES_DMC; + nes2_NP->SetOption(xgm::NES_DMC::OPT_NONLINEAR_MIXER,1); + nes2_NP->SetMemory([this](unsigned short addr, unsigned int& data) { + data=readDMC(addr); + }); + nes2_NP->SetAPU(nes1_NP); + } } else { nes=new struct NESAPU; nes->readDMC=_readDMC; @@ -933,8 +1006,13 @@ void DivPlatformNES::quit() { delete oscBuf[i]; } if (useNP) { - delete nes1_NP; - delete nes2_NP; + if (isE) { + delete e1_NP; + delete e2_NP; + } else { + delete nes1_NP; + delete nes2_NP; + } } else { delete nes; } diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index aaebb4d84..470ab7719 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -23,6 +23,7 @@ #include "../dispatch.h" #include "sound/nes_nsfplay/nes_apu.h" +#include "sound/nes_nsfplay/5e01_apu.h" class DivPlatformNES: public DivDispatch { struct Channel: public SharedChannel { @@ -66,6 +67,8 @@ class DivPlatformNES: public DivDispatch { struct NESAPU* nes; xgm::NES_APU* nes1_NP; xgm::NES_DMC* nes2_NP; + xgm::I5E01_APU* e1_NP; + xgm::I5E01_DMC* e2_NP; unsigned char regPool[128]; unsigned int sampleOffDPCM[256]; DivMemoryComposition memCompo; @@ -77,6 +80,7 @@ class DivPlatformNES: public DivDispatch { unsigned char calcDPCMRate(int inRate); void acquire_puNES(short** buf, size_t len); void acquire_NSFPlay(short** buf, size_t len); + void acquire_NSFPlayE(short** buf, size_t len); public: void acquire(short** buf, size_t len); diff --git a/src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp b/src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp new file mode 100644 index 000000000..01cca33f0 --- /dev/null +++ b/src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp @@ -0,0 +1,401 @@ +// +// I5E01 2A03 +// +#include +#include "5e01_apu.h" +#include "common.h" + +namespace xgm +{ + void I5E01_APU::sweep_sqr(int i) + { + int shifted = freq[i] >> sweep_amount[i]; + if (i == 0 && sweep_mode[i]) shifted += 1; + sfreq[i] = freq[i] + (sweep_mode[i] ? -shifted : shifted); + //DEBUG_OUT("shifted[%d] = %d (%d >> %d)\n",i,shifted,freq[i],sweep_amount[i]); + } + + void I5E01_APU::FrameSequence(int s) + { + //DEBUG_OUT("FrameSequence(%d)\n",s); + + if (s > 3) return; // no operation in step 4 + + // 240hz clock + for (int i = 0; i < 2; ++i) + { + bool divider = false; + if (envelope_write[i]) + { + envelope_write[i] = false; + envelope_counter[i] = 15; + envelope_div[i] = 0; + } + else + { + ++envelope_div[i]; + if (envelope_div[i] > envelope_div_period[i]) + { + divider = true; + envelope_div[i] = 0; + } + } + if (divider) + { + if (envelope_loop[i] && envelope_counter[i] == 0) + envelope_counter[i] = 15; + else if (envelope_counter[i] > 0) + --envelope_counter[i]; + } + } + + // 120hz clock + if ((s & 1) == 0) + for (int i = 0; i < 2; ++i) + { + if (!envelope_loop[i] && (length_counter[i] > 0)) + --length_counter[i]; + + if (sweep_enable[i]) + { + //DEBUG_OUT("Clock sweep: %d\n", i); + + --sweep_div[i]; + if (sweep_div[i] <= 0) + { + sweep_sqr(i); // calculate new sweep target + + //DEBUG_OUT("sweep_div[%d] (0/%d)\n",i,sweep_div_period[i]); + //DEBUG_OUT("freq[%d]=%d > sfreq[%d]=%d\n",i,freq[i],i,sfreq[i]); + + if (freq[i] >= 8 && sfreq[i] < 0x800 && sweep_amount[i] > 0) // update frequency if appropriate + { + freq[i] = sfreq[i] < 0 ? 0 : sfreq[i]; + } + sweep_div[i] = sweep_div_period[i] + 1; + + //DEBUG_OUT("freq[%d]=%d\n",i,freq[i]); + } + + if (sweep_write[i]) + { + sweep_div[i] = sweep_div_period[i] + 1; + sweep_write[i] = false; + } + } + } + + } + + int I5E01_APU::calc_sqr(int i, unsigned int clocks) + { + static const short sqrtbl[4][16] = { + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0} + }; + + scounter[i] -= clocks; + while (scounter[i] < 0) + { + sphase[i] = (sphase[i] + 1) & 15; + scounter[i] += freq[i] + 1; + } + + int ret = 0; + if (length_counter[i] > 0 && + freq[i] >= 8 && + sfreq[i] < 0x800 + ) + { + int v = envelope_disable[i] ? volume[i] : envelope_counter[i]; + ret = sqrtbl[duty[i]][sphase[i]] ? v : 0; + } + + return ret; + } + + bool I5E01_APU::Read(unsigned int adr, unsigned int& val, unsigned int id) + { + if (0x4100 <= adr && adr < 0x4108) + { + val |= reg[adr & 0x7]; + return true; + } + else if (adr == 0x4115) + { + val |= (length_counter[1] ? 2 : 0) | (length_counter[0] ? 1 : 0); + return true; + } + else + return false; + } + + void I5E01_APU::Tick(unsigned int clocks) + { + out[0] = calc_sqr(0, clocks); + out[1] = calc_sqr(1, clocks); + } + + // 生成される波形の振幅は0-8191 + unsigned int I5E01_APU::Render(int b[2]) + { + out[0] = (mask & 1) ? 0 : out[0]; + out[1] = (mask & 2) ? 0 : out[1]; + + int m[2]; + + if (option[OPT_NONLINEAR_MIXER]) + { + int voltage = square_table[out[0] + out[1]]; + m[0] = out[0] << 6; + m[1] = out[1] << 6; + int ref = m[0] + m[1]; + if (ref > 0) + { + m[0] = (m[0] * voltage) / ref; + m[1] = (m[1] * voltage) / ref; + } + else + { + m[0] = voltage; + m[1] = voltage; + } + } + else + { + m[0] = (out[0] * square_linear) / 15; + m[1] = (out[1] * square_linear) / 15; + } + + b[0] = m[0] * sm[0][0]; + b[0] += m[1] * sm[0][1]; + b[0] >>= 7; + + b[1] = m[0] * sm[1][0]; + b[1] += m[1] * sm[1][1]; + b[1] >>= 7; + + return 2; + } + + I5E01_APU::I5E01_APU() + { + SetClock(DEFAULT_CLOCK); + SetRate(DEFAULT_RATE); + option[OPT_UNMUTE_ON_RESET] = true; + option[OPT_PHASE_REFRESH] = true; + option[OPT_NONLINEAR_MIXER] = true; + option[OPT_DUTY_SWAP] = false; + option[OPT_NEGATE_SWEEP_INIT] = false; + + square_table[0] = 0; + for (int i = 1;i < 32;i++) + square_table[i] = (int)((8192.0 * 95.88) / (8128.0 / i + 100)); + + square_linear = square_table[15]; // match linear scale to one full volume square of nonlinear + + for (int c = 0;c < 2;++c) + for (int t = 0;t < 2;++t) + sm[c][t] = 128; + } + + I5E01_APU::~I5E01_APU() + { + } + + void I5E01_APU::Reset() + { + int i; + gclock = 0; + mask = 0; + + for (int i = 0; i < 2; ++i) + { + scounter[i] = 0; + sphase[i] = 0; + duty[i] = 0; + volume[i] = 0; + freq[i] = 0; + sfreq[i] = 0; + sweep_enable[i] = 0; + sweep_mode[i] = 0; + sweep_write[i] = 0; + sweep_div_period[i] = 0; + sweep_div[i] = 1; + sweep_amount[i] = 0; + envelope_disable[i] = 0; + envelope_loop[i] = 0; + envelope_write[i] = 0; + envelope_div_period[i] = 0; + envelope_div[0] = 0; + envelope_counter[i] = 0; + length_counter[i] = 0; + enable[i] = 0; + } + + for (i = 0x4100; i < 0x4108; i++) + Write(i, 0); + + Write(0x4115, 0); + if (option[OPT_UNMUTE_ON_RESET]) + Write(0x4115, 0x0f); + if (option[OPT_NEGATE_SWEEP_INIT]) + { + Write(0x4101, 0x08); + Write(0x4105, 0x08); + } + + for (i = 0; i < 2; i++) + out[i] = 0; + + SetRate(rate); + } + + void I5E01_APU::SetOption(int id, int val) + { + if (id < OPT_END) option[id] = val; + } + + void I5E01_APU::SetClock(double c) + { + clock = c; + } + + void I5E01_APU::SetRate(double r) + { + rate = r ? r : DEFAULT_RATE; + } + + void I5E01_APU::SetStereoMix(int trk, short mixl, short mixr) + { + if (trk < 0) return; + if (trk > 1) return; + sm[0][trk] = mixl; + sm[1][trk] = mixr; + } + + double I5E01_APU::GetFrequencyPulse1() const // // !! + { + if (!(length_counter[0] > 0 && + freq[0] >= 8 && + sfreq[0] < 0x800)) + return 0.0; + return clock / 16 / (freq[0] + 1); + } + + double I5E01_APU::GetFrequencyPulse2() const // // !! + { + if (!(length_counter[1] > 0 && + freq[1] >= 8 && + sfreq[1] < 0x800)) + return 0.0; + return clock / 16 / (freq[1] + 1); + } + + bool I5E01_APU::Write(unsigned int adr, unsigned int val, unsigned int id) + { + int ch; + + // hack + adr+=0x100; + + static const unsigned char length_table[32] = { + 0x0A, 0xFE, + 0x14, 0x02, + 0x28, 0x04, + 0x50, 0x06, + 0xA0, 0x08, + 0x3C, 0x0A, + 0x0E, 0x0C, + 0x1A, 0x0E, + 0x0C, 0x10, + 0x18, 0x12, + 0x30, 0x14, + 0x60, 0x16, + 0xC0, 0x18, + 0x48, 0x1A, + 0x10, 0x1C, + 0x20, 0x1E + }; + + if (0x4100 <= adr && adr < 0x4108) + { + //DEBUG_OUT("$%04X = %02X\n",adr,val); + + adr &= 0xf; + ch = adr >> 2; + switch (adr) + { + case 0x0: + case 0x4: + volume[ch] = val & 15; + envelope_disable[ch] = (val >> 4) & 1; + envelope_loop[ch] = (val >> 5) & 1; + envelope_div_period[ch] = (val & 15); + duty[ch] = (val >> 6) & 3; + if (option[OPT_DUTY_SWAP]) + { + if (duty[ch] == 1) duty[ch] = 2; + else if (duty[ch] == 2) duty[ch] = 1; + } + break; + + case 0x1: + case 0x5: + sweep_enable[ch] = (val >> 7) & 1; + sweep_div_period[ch] = (((val >> 4) & 7)); + sweep_mode[ch] = (val >> 3) & 1; + sweep_amount[ch] = val & 7; + sweep_write[ch] = true; + sweep_sqr(ch); + break; + + case 0x2: + case 0x6: + freq[ch] = val | (freq[ch] & 0x700); + sweep_sqr(ch); + break; + + case 0x3: + case 0x7: + freq[ch] = (freq[ch] & 0xFF) | ((val & 0x7) << 8); + if (option[OPT_PHASE_REFRESH]) + sphase[ch] = 0; + envelope_write[ch] = true; + if (enable[ch]) + { + length_counter[ch] = length_table[(val >> 3) & 0x1f]; + } + sweep_sqr(ch); + break; + + default: + return false; + } + reg[adr] = val; + return true; + } + else if (adr == 0x4115) + { + enable[0] = (val & 1) ? true : false; + enable[1] = (val & 2) ? true : false; + + if (!enable[0]) + length_counter[0] = 0; + if (!enable[1]) + length_counter[1] = 0; + + reg[adr - 0x4100] = val; + return true; + } + + // 4017 is handled in nes_dmc.cpp + //else if (adr == 0x4017) + //{ + //} + + return false; + } +} // namespace xgm; diff --git a/src/engine/platform/sound/nes_nsfplay/5e01_apu.h b/src/engine/platform/sound/nes_nsfplay/5e01_apu.h new file mode 100644 index 000000000..3e42a3d11 --- /dev/null +++ b/src/engine/platform/sound/nes_nsfplay/5e01_apu.h @@ -0,0 +1,89 @@ +#ifndef _I5E01_APU_H_ +#define _I5E01_APU_H_ +#include "5e01_dmc.h" + +namespace xgm +{ + /** Upper half of APU **/ + class I5E01_APU + { + public: + enum + { + OPT_UNMUTE_ON_RESET=0, + OPT_PHASE_REFRESH, + OPT_NONLINEAR_MIXER, + OPT_DUTY_SWAP, + OPT_NEGATE_SWEEP_INIT, + OPT_END }; + + enum + { SQR0_MASK = 1, SQR1_MASK = 2, }; + + public: + int option[OPT_END]; // 各種オプション + int mask; + int sm[2][2]; + + unsigned int gclock; + unsigned char reg[0x20]; + double rate, clock; + + int square_table[32]; // nonlinear mixer + int square_linear; // linear mix approximation + + int scounter[2]; // frequency divider + int sphase[2]; // phase counter + + int duty[2]; + int volume[2]; + int freq[2]; + int sfreq[2]; + + bool sweep_enable[2]; + bool sweep_mode[2]; + bool sweep_write[2]; + int sweep_div_period[2]; + int sweep_div[2]; + int sweep_amount[2]; + + bool envelope_disable[2]; + bool envelope_loop[2]; + bool envelope_write[2]; + int envelope_div_period[2]; + int envelope_div[2]; + int envelope_counter[2]; + + int length_counter[2]; + + bool enable[2]; + + void sweep_sqr (int ch); // calculates target sweep frequency + int calc_sqr (int ch, unsigned int clocks); + + public: + int out[2]; + I5E01_APU (); + ~I5E01_APU (); + + // // !! fetch frequency directly instead of through GetTrackInfo() + double GetFrequencyPulse1() const; + double GetFrequencyPulse2() const; + + void FrameSequence(int s); + + void Reset (); + void Tick (unsigned int clocks); + unsigned int Render (int b[2]); + bool Read (unsigned int adr, unsigned int & val, unsigned int id=0); + bool Write (unsigned int adr, unsigned int val, unsigned int id=0); + void SetRate (double rate); + void SetClock (double clock); + void SetOption (int id, int b); + void SetMask(int m){ mask = m; } + void SetStereoMix (int trk, short mixl, short mixr); + }; + +} // namespace + +#endif diff --git a/src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp b/src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp new file mode 100644 index 000000000..2d961a6e7 --- /dev/null +++ b/src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp @@ -0,0 +1,732 @@ +#include "5e01_dmc.h" +#include "5e01_apu.h" + +#include "common.h" +#include +#include + +namespace xgm +{ + const unsigned int I5E01_DMC::wavlen_table[2][32] = { + { // NTSC + 4,5,6,7,9,12,15,19,23,29,37,46,58,72,91,114,142,178,222,278,348,435,544,681,851,1064,1331,1664,2081,2602,3253,4068 + }, + { // PAL + 3,4,6,7,9,12,15,18,23,29,36,45,56,70,88,110,137,171,213,266,332,414,517,644,804,1003,1251,1560,1946,2428,3028,3778 + } }; + + const unsigned int I5E01_DMC::freq_table[2][16] = { + { // NTSC + 428, 380, 340, 320, 286, 254, 226, 214, 190, 160, 142, 128, 106, 84, 72, 54 + }, + { // PAL + 398, 354, 316, 298, 276, 236, 210, 198, 176, 148, 132, 118, 98, 78, 66, 50 + } }; + + const unsigned int BITREVERSE[256] = { + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, + 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, + 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, + 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, + 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, + 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, + 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, + 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, + 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, + 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, + 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, + 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, + 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, + 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, + 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, + }; + + I5E01_DMC::I5E01_DMC() : GETA_BITS(20) + { + SetClock(DEFAULT_CLOCK); + SetRate(DEFAULT_RATE); + SetPal(false); + option[OPT_ENABLE_4011] = 1; + option[OPT_ENABLE_PNOISE] = 1; + option[OPT_UNMUTE_ON_RESET] = 1; + option[OPT_DPCM_ANTI_CLICK] = 0; + option[OPT_NONLINEAR_MIXER] = 1; + option[OPT_RANDOMIZE_NOISE] = 1; + option[OPT_RANDOMIZE_TRI] = 1; + option[OPT_TRI_MUTE] = 1; + option[OPT_DPCM_REVERSE] = 0; + tnd_table[0][0][0][0] = 0; + tnd_table[1][0][0][0] = 0; + + apu = NULL; + frame_sequence_count = 0; + frame_sequence_length = 7458; + frame_sequence_steps = 4; + + for (int c = 0;c < 2;++c) + for (int t = 0;t < 3;++t) + sm[c][t] = 128; + } + + + I5E01_DMC::~I5E01_DMC() + { + } + + void I5E01_DMC::SetStereoMix(int trk, short mixl, short mixr) + { + if (trk < 0) return; + if (trk > 2) return; + sm[0][trk] = mixl; + sm[1][trk] = mixr; + } + + void I5E01_DMC::FrameSequence(int s) + { + //DEBUG_OUT("FrameSequence: %d\n",s); + + if (s > 3) return; // no operation in step 4 + + if (apu) + { + apu->FrameSequence(s); + } + + if (s == 0 && (frame_sequence_steps == 4)) + { + if (frame_irq_enable) frame_irq = true; + } + + // 240hz clock + { + // triangle linear counter + if (linear_counter_halt) + { + linear_counter = linear_counter_reload; + } + else + { + if (linear_counter > 0) --linear_counter; + } + if (!linear_counter_control) + { + linear_counter_halt = false; + } + + // noise envelope + bool divider = false; + if (envelope_write) + { + envelope_write = false; + envelope_counter = 15; + envelope_div = 0; + } + else + { + ++envelope_div; + if (envelope_div > envelope_div_period) + { + divider = true; + envelope_div = 0; + } + } + if (divider) + { + if (envelope_loop && envelope_counter == 0) + envelope_counter = 15; + else if (envelope_counter > 0) + --envelope_counter; + } + } + + // 120hz clock + if ((s & 1) == 0) + { + // triangle length counter + if (!linear_counter_control && (length_counter[0] > 0)) + --length_counter[0]; + + // noise length counter + if (!envelope_loop && (length_counter[1] > 0)) + --length_counter[1]; + } + + } + + // 三角波チャンネルの計算 戻り値は0-15 + unsigned int I5E01_DMC::calc_tri(unsigned int clocks) + { + static unsigned int wavtbl[4][32] = + { + { + 15,14,13,12,11,10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0, + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9,10,11,12,13,14,15, + }, + { + 11,11,11,11,10,10,10,10, + 9, 9, 9, 9, 8, 8, 8, 8, + 7, 7, 7, 7, 6, 6, 6, 6, + 5, 5, 5, 5, 4, 4, 4, 4, + }, + { + 11,11,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + }, + { + 8, 9,10,12,13,14,14,15, + 15,15,14,14,13,12,10, 9, + 8, 6, 5, 3, 2, 1, 1, 0, + 0, 0, 1, 1, 2, 3, 5, 6, + }, + }; + + if (linear_counter > 0 && length_counter[0] > 0 + && (!option[OPT_TRI_MUTE] || tri_freq > 0)) + { + counter[0] -= clocks; + while (counter[0] < 0) + { + tphase = (tphase + 1) & 31; + counter[0] += (tri_freq + 1); + } + } + + unsigned int ret = wavtbl[tduty][tphase]; + return ret; + } + + // ノイズチャンネルの計算 戻り値は0-127 + // 低サンプリングレートで合成するとエイリアスノイズが激しいので + // ノイズだけはこの関数内で高クロック合成し、簡易なサンプリングレート + // 変換を行っている。 + unsigned int I5E01_DMC::calc_noise(unsigned int clocks) + { + unsigned int env = envelope_disable ? noise_volume : envelope_counter; + if (length_counter[1] < 1) env = 0; + + unsigned int last = (noise & 0x4000) ? 0 : env; + if (clocks < 1) return last; + + // simple anti-aliasing (noise requires it, even when oversampling is off) + unsigned int count = 0; + unsigned int accum = counter[1] * last; // samples pending from previous calc + unsigned int accum_clocks = counter[1]; +#ifdef _DEBUG + int start_clocks = counter[1]; +#endif + if (counter[1] < 0) // only happens on startup when using the randomize noise option + { + accum = 0; + accum_clocks = 0; + } + + counter[1] -= clocks; + assert(nfreq > 0); // prevent infinite loop + while (counter[1] < 0) + { + // tick the noise generator + unsigned int feedback = (noise & 1) ^ ((noise & noise_tap) ? 1 : 0); + noise = (noise >> 1) | (feedback << 14); + + last = (noise & 0x4000) ? 0 : env; + accum += (last * nfreq); + counter[1] += nfreq; + ++count; + accum_clocks += nfreq; + } + + if (count < 1) // no change over interval, don't anti-alias + { + return last; + } + + accum -= (last * counter[1]); // remove these samples which belong in the next calc + accum_clocks -= counter[1]; +#ifdef _DEBUG + if (start_clocks >= 0) assert(accum_clocks == clocks); // these should be equal +#endif + + unsigned int average = accum / accum_clocks; + assert(average <= 15); // above this would indicate overflow + return average; + } + + // Tick the DMC for the number of clocks, and return output counter; + unsigned int I5E01_DMC::calc_dmc(unsigned int clocks) + { + counter[2] -= clocks; + assert(dfreq > 0); // prevent infinite loop + while (counter[2] < 0) + { + counter[2] += dfreq; + + if (data > 0x100) // data = 0x100 when shift register is empty + { + if (!empty) + { + if ((data & 1) && (damp < 63)) + damp++; + else if (!(data & 1) && (0 < damp)) + damp--; + } + data >>= 1; + } + + if (data <= 0x100) // shift register is empty + { + if (dlength > 0) + { + memory(daddress, data); + // (checking for the 3-cycle case would require sub-instruction emulation) + data &= 0xFF; // read 8 bits + if (option[OPT_DPCM_REVERSE]) data = BITREVERSE[data]; + data |= 0x10000; // use an extra bit to signal end of data + empty = false; + daddress = ((daddress + 1) & 0xFFFF) | 0x8000; + --dlength; + if (dlength == 0) + { + if (mode & 1) // looped DPCM = auto-reload + { + daddress = ((adr_reg << 6) | 0xC000); + dlength = (len_reg << 4) + 1; + } + else if (mode & 2) // IRQ and not looped + { + irq = true; + } + } + } + else + { + data = 0x10000; // DMC will do nothing + empty = true; + } + } + } + + return (damp << 1) + dac_lsb; + } + + void I5E01_DMC::TickFrameSequence(unsigned int clocks) + { + frame_sequence_count += clocks; + while (frame_sequence_count > frame_sequence_length) + { + FrameSequence(frame_sequence_step); + frame_sequence_count -= frame_sequence_length; + ++frame_sequence_step; + if (frame_sequence_step >= frame_sequence_steps) + frame_sequence_step = 0; + } + } + + void I5E01_DMC::Tick(unsigned int clocks) + { + out[0] = calc_tri(clocks); + out[1] = calc_noise(clocks); + out[2] = calc_dmc(clocks); + } + + unsigned int I5E01_DMC::Render(int b[2]) + { + out[0] = (mask & 1) ? 0 : out[0]; + out[1] = (mask & 2) ? 0 : out[1]; + out[2] = (mask & 4) ? 0 : out[2]; + + int m[3]; + m[0] = tnd_table[0][out[0]][0][0]; + m[1] = tnd_table[0][0][out[1]][0]; + m[2] = tnd_table[0][0][0][out[2]]; + + if (option[OPT_NONLINEAR_MIXER]) + { + int ref = m[0] + m[1] + m[2]; + int voltage = tnd_table[1][out[0]][out[1]][out[2]]; + if (ref) + { + for (int i = 0; i < 3; ++i) + m[i] = (m[i] * voltage) / ref; + } + else + { + for (int i = 0; i < 3; ++i) + m[i] = voltage; + } + } + + // anti-click nullifies any 4011 write but preserves nonlinearity + if (option[OPT_DPCM_ANTI_CLICK]) + { + if (dmc_pop) // $4011 will cause pop this frame + { + // adjust offset to counteract pop + dmc_pop_offset += dmc_pop_follow - m[2]; + dmc_pop = false; + + // prevent overflow, keep headspace at edges + const int OFFSET_MAX = (1 << 30) - (4 << 16); + if (dmc_pop_offset > OFFSET_MAX) dmc_pop_offset = OFFSET_MAX; + if (dmc_pop_offset < -OFFSET_MAX) dmc_pop_offset = -OFFSET_MAX; + } + dmc_pop_follow = m[2]; // remember previous position + + m[2] += dmc_pop_offset; // apply offset + + // TODO implement this in a better way + // roll off offset (not ideal, but prevents overflow) + if (dmc_pop_offset > 0) --dmc_pop_offset; + else if (dmc_pop_offset < 0) ++dmc_pop_offset; + } + + b[0] = m[0] * sm[0][0]; + b[0] += m[1] * sm[0][1]; + b[0] += m[2] * sm[0][2]; + b[0] >>= 7; + + b[1] = m[0] * sm[1][0]; + b[1] += m[1] * sm[1][1]; + b[1] += m[2] * sm[1][2]; + b[1] >>= 7; + + return 2; + } + + void I5E01_DMC::SetClock(double c) + { + clock = c; + } + + void I5E01_DMC::SetRate(double r) + { + rate = (unsigned int)(r ? r : DEFAULT_RATE); + } + + void I5E01_DMC::SetPal(bool is_pal) + { + pal = (is_pal ? 1 : 0); + // set CPU cycles in frame_sequence + frame_sequence_length = is_pal ? 8314 : 7458; + } + + void I5E01_DMC::SetAPU(I5E01_APU* apu_) + { + apu = apu_; + } + + // Initializing TRI, NOISE, DPCM mixing table + void I5E01_DMC::InitializeTNDTable(double wt, double wn, double wd) { + + // volume adjusted by 0.95 based on empirical measurements + const double MASTER = 8192.0 * 0.95; + // truthfully, the nonlinear curve does not appear to match well + // with my tests. Do more testing of the APU/DMC DAC later. + // this value keeps the triangle consistent with measured levels, + // but not necessarily the rest of this APU channel, + // because of the lack of a good DAC model, currently. + + { // Linear Mixer + for (int t = 0; t < 16; t++) { + for (int n = 0; n < 16; n++) { + for (int d = 0; d < 128; d++) { + tnd_table[0][t][n][d] = (unsigned int)(MASTER * (3.0 * t + 2.0 * n + d) / 208.0); + } + } + } + } + { // Non-Linear Mixer + tnd_table[1][0][0][0] = 0; + for (int t = 0; t < 16; t++) { + for (int n = 0; n < 16; n++) { + for (int d = 0; d < 128; d++) { + if (t != 0 || n != 0 || d != 0) + tnd_table[1][t][n][d] = (unsigned int)((MASTER * 159.79) / (100.0 + 1.0 / ((double)t / wt + (double)n / wn + (double)d / wd))); + } + } + } + } + + } + + void I5E01_DMC::Reset() + { + int i; + mask = 0; + + InitializeTNDTable(8227, 12241, 22638); + + counter[0] = 0; + counter[1] = 0; + counter[2] = 0; + tphase = 0; + tduty = 0; + nfreq = wavlen_table[0][0]; + dfreq = freq_table[0][0]; + tri_freq = 0; + linear_counter = 0; + linear_counter_reload = 0; + linear_counter_halt = 0; + linear_counter_control = 0; + noise_volume = 0; + noise = 0; + noise_tap = 0; + envelope_loop = 0; + envelope_disable = 0; + envelope_write = 0; + envelope_div_period = 0; + envelope_div = 0; + envelope_counter = 0; + enable[0] = 0; + enable[1] = 0; + length_counter[0] = 0; + length_counter[1] = 0; + frame_irq = false; + frame_irq_enable = false; + frame_sequence_count = 0; + frame_sequence_steps = 4; + frame_sequence_step = 0; + + for (i = 0; i < 0x0F; i++) + Write(0x4108 + i, 0); + Write(0x4117, 0x40); + + irq = false; + Write(0x4115, 0x00); + if (option[OPT_UNMUTE_ON_RESET]) + Write(0x4115, 0x0f); + + out[0] = out[1] = out[2] = 0; + damp = 0; + dmc_pop = false; + dmc_pop_offset = 0; + dmc_pop_follow = 0; + dac_lsb = 0; + data = 0x100; + empty = true; + adr_reg = 0; + dlength = 0; + len_reg = 0; + daddress = 0; + noise = 1; + noise_tap = (1 << 1); + + SetRate(rate); + } + + void I5E01_DMC::SetMemory(std::function r) + { + memory = r; + } + + void I5E01_DMC::SetOption(int id, int val) + { + if (id < OPT_END) + { + option[id] = val; + if (id == OPT_NONLINEAR_MIXER) + InitializeTNDTable(8227, 12241, 22638); + } + } + + bool I5E01_DMC::Write(unsigned int adr, unsigned int val, unsigned int id) + { + static const unsigned char length_table[32] = { + 0x0A, 0xFE, + 0x14, 0x02, + 0x28, 0x04, + 0x50, 0x06, + 0xA0, 0x08, + 0x3C, 0x0A, + 0x0E, 0x0C, + 0x1A, 0x0E, + 0x0C, 0x10, + 0x18, 0x12, + 0x30, 0x14, + 0x60, 0x16, + 0xC0, 0x18, + 0x48, 0x1A, + 0x10, 0x1C, + 0x20, 0x1E + }; + + // hack + adr+=0x100; + + if (adr == 0x4115) + { + enable[0] = (val & 4) ? true : false; + enable[1] = (val & 8) ? true : false; + + if (!enable[0]) + { + length_counter[0] = 0; + } + if (!enable[1]) + { + length_counter[1] = 0; + } + + if ((val & 16) && dlength == 0) + { + daddress = (0xC000 | (adr_reg << 6)); + dlength = (len_reg << 4) + 1; + } + else if (!(val & 16)) + { + dlength = 0; + } + + irq = false; + + reg[adr - 0x4108] = val; + return true; + } + + if (adr == 0x4117) + { + //DEBUG_OUT("4017 = %02X\n", val); + frame_irq_enable = ((val & 0x40) != 0x40); + if (frame_irq_enable) frame_irq = false; + + frame_sequence_count = 0; + if (val & 0x80) + { + frame_sequence_steps = 5; + frame_sequence_step = 0; + FrameSequence(frame_sequence_step); + ++frame_sequence_step; + } + else + { + frame_sequence_steps = 4; + frame_sequence_step = 1; + } + } + + if (adr < 0x4108 || 0x4113 < adr) + return false; + + reg[adr - 0x4108] = val & 0xff; + + //DEBUG_OUT("$%04X %02X\n", adr, val); + + switch (adr) + { + + // tri + + case 0x4108: + linear_counter_control = (val >> 7) & 1; + linear_counter_reload = val & 0x7F; + break; + + case 0x4109: + tduty = val & 3; + break; + + case 0x410a: + tri_freq = val | (tri_freq & 0x700); + break; + + case 0x410b: + tri_freq = (tri_freq & 0xff) | ((val & 0x7) << 8); + linear_counter_halt = true; + if (enable[0]) + { + length_counter[0] = length_table[(val >> 3) & 0x1f]; + } + break; + + // noise + + case 0x410c: + noise_volume = val & 15; + envelope_div_period = val & 15; + envelope_disable = (val >> 4) & 1; + envelope_loop = (val >> 5) & 1; + break; + + case 0x410d: + break; + + case 0x410e: + if (option[OPT_ENABLE_PNOISE]) + noise_tap = (val & 0x80) ? (1 << 6) : (1 << 1); + else + noise_tap = (1 << 1); + nfreq = wavlen_table[pal][val & 31]; + break; + + case 0x410f: + if (enable[1]) + { + length_counter[1] = length_table[(val >> 3) & 0xf]; + } + envelope_write = true; + break; + + // dmc + + case 0x4110: + mode = (val >> 6) & 3; + if (!(mode & 2)) + { + irq = false; + } + dfreq = freq_table[pal][val & 15]; + break; + + case 0x4111: + if (option[OPT_ENABLE_4011]) + { + damp = (val >> 1) & 0x3f; + dac_lsb = val & 1; + dmc_pop = true; + } + break; + + case 0x4112: + adr_reg = val & 0xff; + // ここでdaddressは更新されない + break; + + case 0x4113: + len_reg = val & 0xff; + // ここでlengthは更新されない + break; + + default: + return false; + } + + return true; + } + + bool I5E01_DMC::Read(unsigned int adr, unsigned int& val, unsigned int id) + { + if (adr == 0x4115) + { + val |= (irq ? 0x80 : 0) + | (frame_irq ? 0x40 : 0) + | ((dlength > 0) ? 0x10 : 0) + | (length_counter[1] ? 0x08 : 0) + | (length_counter[0] ? 0x04 : 0) + ; + + frame_irq = false; + return true; + } + else if (0x4108 <= adr && adr <= 0x4114) + { + val |= reg[adr - 0x4108]; + return true; + } + else + return false; + } +} // namespace diff --git a/src/engine/platform/sound/nes_nsfplay/5e01_dmc.h b/src/engine/platform/sound/nes_nsfplay/5e01_dmc.h new file mode 100644 index 000000000..2fb032900 --- /dev/null +++ b/src/engine/platform/sound/nes_nsfplay/5e01_dmc.h @@ -0,0 +1,127 @@ +#ifndef _I5E01_DMC_H_ +#define _I5E01_DMC_H_ + +#include + +namespace xgm +{ + class I5E01_APU; // forward declaration + + /** Bottom Half of APU **/ + class I5E01_DMC + { + public: + enum + { + OPT_ENABLE_4011 = 0, + OPT_ENABLE_PNOISE, + OPT_UNMUTE_ON_RESET, + OPT_DPCM_ANTI_CLICK, + OPT_NONLINEAR_MIXER, + OPT_RANDOMIZE_NOISE, + OPT_TRI_MUTE, + OPT_RANDOMIZE_TRI, + OPT_DPCM_REVERSE, + OPT_END + }; + protected: + const int GETA_BITS; + + // DPCM. + static const unsigned int freq_table[2][16]; + + // Noise. + static const unsigned int wavlen_table[2][32]; + + unsigned int tnd_table[2][16][16][128]; + + int option[OPT_END]; + int mask; + int sm[2][3]; + unsigned char reg[0x10]; + unsigned int len_reg; + unsigned int adr_reg; + std::function memory; + unsigned int daddress; + unsigned int dlength; + unsigned int data; + bool empty; + short damp; + int dac_lsb; + bool dmc_pop; + int dmc_pop_offset; + int dmc_pop_follow; + double clock; + unsigned int rate; + int pal; + int mode; + bool irq; + + int counter[3]; // frequency dividers + int tphase; // triangle phase + int tduty; // wave shape + unsigned int nfreq; // noise frequency + unsigned int dfreq; // DPCM frequency + + unsigned int tri_freq; + int linear_counter; + int linear_counter_reload; + bool linear_counter_halt; + bool linear_counter_control; + + int noise_volume; + unsigned int noise, noise_tap; + + // noise envelope + bool envelope_loop; + bool envelope_disable; + bool envelope_write; + int envelope_div_period; + int envelope_div; + int envelope_counter; + + bool enable[2]; // tri/noise enable + int length_counter[2]; // 0=tri, 1=noise + + + // frame sequencer + I5E01_APU* apu; // apu is clocked by DMC's frame sequencer + int frame_sequence_count; // current cycle count + int frame_sequence_length; // CPU cycles per FrameSequence + int frame_sequence_step; // current step of frame sequence + int frame_sequence_steps; // 4/5 steps per frame + bool frame_irq; + bool frame_irq_enable; + + inline unsigned int calc_tri(unsigned int clocks); + inline unsigned int calc_dmc(unsigned int clocks); + inline unsigned int calc_noise(unsigned int clocks); + + public: + unsigned int out[3]; + I5E01_DMC(); + ~I5E01_DMC(); + + void InitializeTNDTable(double wt, double wn, double wd); + void SetPal(bool is_pal); + void SetAPU(I5E01_APU* apu_); + void SetMemory(std::function r); + void FrameSequence(int s); + int GetDamp() { return (damp << 1) | dac_lsb; } + void TickFrameSequence(unsigned int clocks); + + void Reset(); + void Tick(unsigned int clocks); + unsigned int Render(int b[2]); + bool Write(unsigned int adr, unsigned int val, unsigned int id = 0); + bool Read(unsigned int adr, unsigned int& val, unsigned int id = 0); + void SetRate(double rate); + void SetClock(double rate); + void SetOption(int, int); + void SetMask(int m) { mask = m; } + void SetStereoMix(int trk, short mixl, short mixr); + }; + +} + +#endif From cb169fe27a62cc40cd7e25bce6115e57581a0a4a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 17:30:23 -0500 Subject: [PATCH 122/134] 17xx should be 10xx but waves are not mapped yet --- src/engine/fileOps/ftm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index dde258f98..cbac4741d 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -1766,7 +1766,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si for (int v = 0; v < 8; v++) { if (map_channels[ch] == n163_chans[v]) { if (pat->data[row][4 + (j * 2)] == 0x12) { - pat->data[row][4 + (j * 2)] = 0x17; // local wave + pat->data[row][4 + (j * 2)] = 0x10; // TODO: map wave } } } From dd7ce4a22df39b03b51c81c786715e8fd0c37d9b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 17:30:42 -0500 Subject: [PATCH 123/134] 5E01: sysConf --- src/gui/sysConf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index b1c996113..876d7e159 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -584,7 +584,8 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } break; } - case DIV_SYSTEM_NES: { + case DIV_SYSTEM_NES: + case DIV_SYSTEM_5E01: { int clockSel=flags.getInt("clockSel",0); bool dpcmMode=flags.getBool("dpcmMode",true); From 050159a1e64120b6d8496373546ccff0b520b8d0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 17:57:45 -0500 Subject: [PATCH 124/134] can we have recursion --- src/gui/gui.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/gui.h b/src/gui/gui.h index 586842864..d54635fa3 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1245,6 +1245,7 @@ struct FurnaceGUISysDef { const char* extra; String definition; std::vector orig; + std::vector subDefs; FurnaceGUISysDef(const char* n, std::initializer_list def, const char* e=NULL); }; From a28c233c77d7da0acca1447f8e272b646f91e8c0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 19:45:04 -0500 Subject: [PATCH 125/134] DO NOT USE BECAUSE THIS WILL FAIL --- src/gui/newSong.cpp | 2 +- src/gui/presets.cpp | 113 +++++++++++++++++++++++--------------------- 2 files changed, 59 insertions(+), 56 deletions(-) diff --git a/src/gui/newSong.cpp b/src/gui/newSong.cpp index 3fed2da3b..a22f5d444 100644 --- a/src/gui/newSong.cpp +++ b/src/gui/newSong.cpp @@ -91,7 +91,7 @@ void FurnaceGUI::drawNewSong() { ImGui::TableNextColumn(); int index=0; for (FurnaceGUISysCategory& i: sysCategories) { - if (ImGui::Selectable(i.name,newSongCategory==index,ImGuiSelectableFlags_DontClosePopups)) { \ + if (ImGui::Selectable(i.name,newSongCategory==index,ImGuiSelectableFlags_DontClosePopups)) { newSongCategory=index; } if (ImGui::IsItemHovered()) { diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 4c96204d1..6b116c3b8 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -35,7 +35,10 @@ #define CH FurnaceGUISysDefChip #define CATEGORY_BEGIN(x,y) cat=FurnaceGUISysCategory(x,y); #define CATEGORY_END sysCategories.push_back(cat); -#define ENTRY(...) cat.systems.push_back(FurnaceGUISysDef(__VA_ARGS__)); +#define ENTRY(...) \ + cat.systems.push_back(FurnaceGUISysDef(__VA_ARGS__)); +#define SUB_ENTRY(...) \ + cat.system[cat.size()-1].subDefs.push_back(FurnaceGUISysDef(__VA_ARGS__)); void FurnaceGUI::initSystemPresets() { sysCategories.clear(); @@ -49,60 +52,60 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_SMS, 0.5f, 0, "") } ); - ENTRY( - "Sega Genesis (extended channel 3)", { - CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, "") - } - ); - ENTRY( - "Sega Genesis (CSM)", { - CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, "") - } - ); - ENTRY( - "Sega Genesis (DualPCM)", { - CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, "") - } - ); - ENTRY( - "Sega Genesis (DualPCM, extended channel 3)", { - CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, "") - } - ); - ENTRY( - "Sega Genesis (with Sega CD)", { - CH(DIV_SYSTEM_YM2612, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, - "clockSel=2\n" - "chipType=1\n" - ) - } - ); - ENTRY( - "Sega Genesis (extended channel 3 with Sega CD)", { - CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, - "clockSel=2\n" - "chipType=1\n" - ) - } - ); - ENTRY( - "Sega Genesis (CSM with Sega CD)", { - CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), - CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), - CH(DIV_SYSTEM_RF5C68, 1.0f, 0, - "clockSel=2\n" - "chipType=1\n" - ) - } - ); + SUB_ENTRY( + "Sega Genesis (extended channel 3)", { + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") + } + ); + SUB_ENTRY( + "Sega Genesis (CSM)", { + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") + } + ); + SUB_ENTRY( + "Sega Genesis (DualPCM)", { + CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") + } + ); + SUB_ENTRY( + "Sega Genesis (DualPCM, extended channel 3)", { + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, "") + } + ); + SUB_ENTRY( + "Sega Genesis (with Sega CD)", { + CH(DIV_SYSTEM_YM2612, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) + } + ); + SUB_ENTRY( + "Sega Genesis (extended channel 3 with Sega CD)", { + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) + } + ); + SUB_ENTRY( + "Sega Genesis (CSM with Sega CD)", { + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, ""), + CH(DIV_SYSTEM_SMS, 0.5f, 0, ""), + CH(DIV_SYSTEM_RF5C68, 1.0f, 0, + "clockSel=2\n" + "chipType=1\n" + ) + } + ); ENTRY( "Sega Master System", { CH(DIV_SYSTEM_SMS, 1.0f, 0, "") From 3d87a4284e5f8043689221aa814f689e6b191b76 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 18 Mar 2024 21:21:44 -0500 Subject: [PATCH 126/134] do use because this will succeed --- src/gui/presets.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 6b116c3b8..3f832863e 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -31,6 +31,7 @@ // } // ); // flags are a string of new line-separated values. +// use SUB_ENTRY instead of ENTRY to add sub-entries to the previous entry. #define CH FurnaceGUISysDefChip #define CATEGORY_BEGIN(x,y) cat=FurnaceGUISysCategory(x,y); @@ -38,7 +39,7 @@ #define ENTRY(...) \ cat.systems.push_back(FurnaceGUISysDef(__VA_ARGS__)); #define SUB_ENTRY(...) \ - cat.system[cat.size()-1].subDefs.push_back(FurnaceGUISysDef(__VA_ARGS__)); + cat.systems[cat.systems.size()-1].subDefs.push_back(FurnaceGUISysDef(__VA_ARGS__)); void FurnaceGUI::initSystemPresets() { sysCategories.clear(); From c698f72e97910d9ab3f141bc57e9f671786e16aa Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Tue, 19 Mar 2024 14:22:16 +0700 Subject: [PATCH 127/134] MinMod: fix spikes --- src/engine/platform/gbaminmod.cpp | 15 ++++++++------- src/engine/platform/gbaminmod.h | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/engine/platform/gbaminmod.cpp b/src/engine/platform/gbaminmod.cpp index 3e573811d..30d9da7c0 100644 --- a/src/engine/platform/gbaminmod.cpp +++ b/src/engine/platform/gbaminmod.cpp @@ -44,9 +44,8 @@ const char** DivPlatformGBAMinMod::getRegisterSheet() { } void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { - short sampL, sampR; size_t sampPos=mixBufReadPos&3; - bool newSamp=true; + bool newSamp=false; // cache channel registers that might change struct { uint64_t address; @@ -149,15 +148,15 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) { memset(mixBuf[mixBufPage+1],0,sizeof(mixBuf[mixBufPage+1])); // emulate buffer loss prevention and buffer copying sampsRendered+=mixBufReadPos; - mixBufOffset=(4-(mixBufReadPos&3))&3; - mixBufReadPos=0; - mixBufWritePos=mixBufOffset; + mixBufOffset=mixBufWritePos-mixBufReadPos; for (size_t j=0; j Date: Tue, 19 Mar 2024 14:24:06 +0700 Subject: [PATCH 128/134] MinMod: add phase reset macro --- src/gui/insEdit.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 0b8ebaf40..420fa9bfb 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -7234,7 +7234,8 @@ void FurnaceGUI::drawInsEdit() { ins->type==DIV_INS_POWERNOISE_SLOPE || ins->type==DIV_INS_DAVE || ins->type==DIV_INS_NDS || - ins->type==DIV_INS_GBA_DMA) { + ins->type==DIV_INS_GBA_DMA || + ins->type==DIV_INS_GBA_MINMOD) { macroList.push_back(FurnaceGUIMacroDesc("Phase Reset",&ins->std.phaseResetMacro,0,1,32,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true)); } if (ex1Max>0) { From 5399c6eb7c94e5804c9882b5ecfe9e7daffa1ab2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 19 Mar 2024 12:50:44 -0500 Subject: [PATCH 129/134] Namco 163: why does it overflow --- src/engine/platform/n163.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/n163.cpp b/src/engine/platform/n163.cpp index a0982e50d..7455134a7 100644 --- a/src/engine/platform/n163.cpp +++ b/src/engine/platform/n163.cpp @@ -376,7 +376,9 @@ int DivPlatformN163::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_FREQUENCY(c.value2); + double destFreqD=NOTE_FREQUENCY(c.value2); + if (destFreqD>2000000000.0) destFreqD=2000000000.0; + int destFreq=destFreqD; bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value*((parent->song.linearPitch==2)?1:16); From 88e3a3ba19a13088601cea81249e7b96f8a0ba57 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 19 Mar 2024 15:10:31 -0500 Subject: [PATCH 130/134] GUI: rename broken DAC mode --- src/gui/compatFlags.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/compatFlags.cpp b/src/gui/compatFlags.cpp index eccc63244..81e96a1cb 100644 --- a/src/gui/compatFlags.cpp +++ b/src/gui/compatFlags.cpp @@ -57,7 +57,7 @@ void FurnaceGUI::drawCompatFlags() { if (ImGui::IsItemHovered()) { ImGui::SetTooltip("delay arpeggio by one tick on every new note."); } - ImGui::Checkbox("Broken DAC mode",&e->song.brokenDACMode); + ImGui::Checkbox("Disable DAC when sample ends",&e->song.brokenDACMode); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("when enabled, the DAC in YM2612 will be disabled if there isn't any sample playing."); } From 1ac1f86d53daa80cf9edd1f01cd58c85248cf467 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Tue, 19 Mar 2024 17:21:45 +0400 Subject: [PATCH 131/134] ymf276 preset fixes 276 auto-detect --- src/gui/presets.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 3f832863e..64fe7c186 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -2417,6 +2417,31 @@ void FurnaceGUI::initSystemPresets() { CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, "chipType=1") } ); + ENTRY( + "Yamaha YMF276 (OPN2)", { + CH(DIV_SYSTEM_YM2612, 1.0f, 0, "chipType=2") + } + ); + ENTRY( + "Yamaha YMF276 (extended channel 3)", { + CH(DIV_SYSTEM_YM2612_EXT, 1.0f, 0, "chipType=2") + } + ); + ENTRY( + "Yamaha YMF276 (OPN2) CSM", { + CH(DIV_SYSTEM_YM2612_CSM, 1.0f, 0, "chipType=2") + } + ); + ENTRY( + "Yamaha YMF276 (OPN2) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM, 1.0f, 0, "chipType=2") + } + ); + ENTRY( + "Yamaha YMF276 (extended channel 3) with DualPCM", { + CH(DIV_SYSTEM_YM2612_DUALPCM_EXT, 1.0f, 0, "chipType=2") + } + ); ENTRY( "Yamaha YM2413 (OPLL)", { CH(DIV_SYSTEM_OPLL, 1.0f, 0, "") From 78810b633e74ab30d01999aa81ca3cf9d3a4f4b2 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Tue, 19 Mar 2024 17:22:38 +0400 Subject: [PATCH 132/134] SHOW_OPEN_ASSETS_MENU_ENTRY is off by default --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc56a1fe8..0460a4d98 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ Available options: | `WITH_DEMOS` | `ON` | Install demo songs on `make install` | | `WITH_INSTRUMENTS` | `ON` | Install demo instruments on `make install` | | `WITH_WAVETABLES` | `ON` | Install wavetables on `make install` | -| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `ON` | `Show option to open built-in assets directory (on supported platforms)` | +| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms) | (\*) `ON` if system-installed JACK detected, otherwise `OFF` From 7843a9dcd1686600b1f73380cb457201543e192e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 20 Mar 2024 03:15:15 -0500 Subject: [PATCH 133/134] more .ftm import cherry-picking --- src/engine/fileOps/ftm.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/fileOps/ftm.cpp b/src/engine/fileOps/ftm.cpp index cbac4741d..e687e73f0 100644 --- a/src/engine/fileOps/ftm.cpp +++ b/src/engine/fileOps/ftm.cpp @@ -931,6 +931,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si dpcmNotes = notes; } + // should dpcmNotes be 96 always? for (int j = 0; j < dpcmNotes; j++) { int note = j; if (blockVersion >= 7) { @@ -1504,7 +1505,7 @@ bool DivEngine::loadFTM(unsigned char* file, size_t len, bool dnft, bool dnft_si logV("tempo %d", tempo); if (tempo == 0) { - s->virtualTempoN = 150.0; + s->virtualTempoN = s->virtualTempoD; } else { s->virtualTempoN = tempo; } From be9d1599859838a3ffa556c486976f19069c0244 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 20 Mar 2024 13:26:08 -0500 Subject: [PATCH 134/134] GUI: make FM preview follow op mute issue #1799 --- src/gui/fmPreview.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/gui/fmPreview.cpp b/src/gui/fmPreview.cpp index 7c034e3d9..4e11137b9 100644 --- a/src/gui/fmPreview.cpp +++ b/src/gui/fmPreview.cpp @@ -77,7 +77,13 @@ void FurnaceGUI::renderFMPreviewOPN(const DivInstrumentFM& params, int pos) { OPN_WRITE(0xb4,0xc0|(params.fms&7)|((params.ams&3)<<4)); OPN_WRITE(0xa4,mult0?0x1c:0x14); // frequency OPN_WRITE(0xa0,0); - OPN_WRITE(0x28,0xf0); // key on + OPN_WRITE( + 0x28, + (params.op[0].enable?0x10:0)| + (params.op[2].enable?0x20:0)| + (params.op[1].enable?0x40:0)| + (params.op[3].enable?0x80:0) + ); // key on } // render @@ -138,7 +144,13 @@ void FurnaceGUI::renderFMPreviewOPM(const DivInstrumentFM& params, int pos) { OPM_WRITE(0x38,((params.fms&7)<<4)|(params.ams&3)); OPM_WRITE(0x28,mult0?0x39:0x29); // frequency OPM_WRITE(0x30,0xe6); - OPM_WRITE(0x08,0x78); // key on + OPM_WRITE( + 0x08, + (params.op[0].enable?0x08:0)| + (params.op[2].enable?0x10:0)| + (params.op[1].enable?0x20:0)| + (params.op[3].enable?0x40:0) + ); // key on } // render

G-UOk8yU5)0nLo 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