diff --git a/papers/doc/7-systems/n163.md b/papers/doc/7-systems/n163.md index 6057fa3c..d3ece830 100644 --- a/papers/doc/7-systems/n163.md +++ b/papers/doc/7-systems/n163.md @@ -1,4 +1,24 @@ -# Namco C163 +# - ANNOUNCEMENT - + +Start calling it C163! The TRUE name of the chip! + +The line will be consistent with your help: +- Namco C15 +- Namco C30 +- Namco C140 +- **Namco C163** +- Namco C219 +- Namco C352 + +The C names are official as indicated by: + +- MAME +- VGMPlay +- Korg × Bandai Namco (from Kamata info page) + +C stands for Custom! Call it C163! + +# Namco 163 (also called Namco C163, 106, 160 or 129) This is one of Namco's NES mappers, with up to 8 wavetable channels. It has also 128 byte of internal RAM, and both channel register and wavetables are stored here. Wavetables are variable size and freely allocable anywhere in RAM, it means it can use part of or continuously pre-loaded waveform and its sequences in RAM. But waveform RAM area becomes smaller as more channels are activated; as channel registers consumes 8 bytes for each channel. You must avoid conflict with channel register area and waveform for avoid broken channel playback. diff --git a/src/engine/engine.h b/src/engine/engine.h index 482b58dc..3030cfad 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -52,6 +52,9 @@ #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 +// "Namco C163" +#define DIV_C163_DEFAULT_NAME "Namco 163" + enum DivStatusView { DIV_STATUS_NOTHING=0, DIV_STATUS_PATTERN, diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index 813e409e..74085407 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -178,7 +178,7 @@ String DivEngine::getSongSystemLegacyName(DivSong& ds, bool isMultiSystemAccepta } if (ds.system[0]==DIV_SYSTEM_NES && ds.system[1]==DIV_SYSTEM_N163) { String ret="Famicom + "; - ret+=getConfString("c163Name","Namco C163"); + ret+=getConfString("c163Name",DIV_C163_DEFAULT_NAME); return ret; } if (ds.system[0]==DIV_SYSTEM_NES && ds.system[1]==DIV_SYSTEM_MMC5) { @@ -208,7 +208,7 @@ String DivEngine::getSongSystemLegacyName(DivSong& ds, bool isMultiSystemAccepta for (int i=0; i0) ret+=" + "; if (ds.system[i]==DIV_SYSTEM_N163) { - ret+=getConfString("c163Name","Namco C163"); + ret+=getConfString("c163Name",DIV_C163_DEFAULT_NAME); } else { ret+=getSystemName(ds.system[i]); } @@ -220,7 +220,7 @@ String DivEngine::getSongSystemLegacyName(DivSong& ds, bool isMultiSystemAccepta const char* DivEngine::getSystemName(DivSystem sys) { if (sysDefs[sys]==NULL) return "Unknown"; if (sys==DIV_SYSTEM_N163) { - String c1=getConfString("c163Name","Namco C163"); + String c1=getConfString("c163Name",DIV_C163_DEFAULT_NAME); strncpy(c163NameCS,c1.c_str(),1023); return c163NameCS; } @@ -1246,7 +1246,7 @@ void DivEngine::registerSystems() { ); sysDefs[DIV_SYSTEM_N163]=new DivSysDef( - "Namco C163", NULL, 0x8c, 0, 8, false, true, 0, false, + "Namco 163/C163/129/160/106/whatever", NULL, 0x8c, 0, 8, false, true, 0, false, "an expansion chip for the Famicom, with full wavetable.", {"Channel 1", "Channel 2", "Channel 3", "Channel 4", "Channel 5", "Channel 6", "Channel 7", "Channel 8"}, {"CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8"}, diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 2c80c5fb..b883935e 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4716,7 +4716,11 @@ FurnaceGUI::FurnaceGUI(): pianoView(0), pianoInputPadMode(0), #endif - hasACED(false) { + hasACED(false), + waveGenBaseShape(0), + waveGenDuty(0.0f), + waveGenPower(0.0f), + waveGenInvertPoint(0.0f) { // value keys valueKeys[SDLK_0]=0; valueKeys[SDLK_1]=1; diff --git a/src/gui/gui.h b/src/gui/gui.h index 875501d2..3b98f77f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1466,6 +1466,17 @@ class FurnaceGUI { bool hasACED; unsigned char acedData[23]; + // wave generator + int waveGenBaseShape; + float waveGenDuty, waveGenPower, waveGenInvertPoint; + float waveGenAmp[16]; + float waveGenPhase[16]; + float waveGenTL[4]; + float waveGenFB[4]; + bool waveGenFMCon1[4]; + bool waveGenFMCon2[3]; + bool waveGenFMCon3[2]; + void drawSSGEnv(unsigned char type, const ImVec2& size); void drawWaveform(unsigned char type, bool opz, const ImVec2& size); void drawAlgorithm(unsigned char alg, FurnaceGUIFMAlgs algType, const ImVec2& size); diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index eae165d2..6582a4e2 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1203,7 +1203,7 @@ void FurnaceGUI::drawSettings() { ImGui::Text("N163/C163 chip name"); ImGui::SameLine(); - ImGui::InputTextWithHint("##C163Name","Namco C163",&settings.c163Name); + ImGui::InputTextWithHint("##C163Name",DIV_C163_DEFAULT_NAME,&settings.c163Name); ImGui::Separator(); @@ -2029,7 +2029,7 @@ void FurnaceGUI::syncSettings() { settings.midiInDevice=e->getConfString("midiInDevice",""); settings.midiOutDevice=e->getConfString("midiOutDevice",""); // I'm sorry, but the C163 education program has failed... - settings.c163Name=e->getConfString("c163Name","Namco C163"); + settings.c163Name=e->getConfString("c163Name",DIV_C163_DEFAULT_NAME); settings.audioQuality=e->getConfInt("audioQuality",0); settings.audioBufSize=e->getConfInt("audioBufSize",1024); settings.audioRate=e->getConfInt("audioRate",44100);