**Namco C163**

This commit is contained in:
tildearrow 2022-07-26 18:23:01 -05:00
parent 2ab021664e
commit 173e9b0df9
6 changed files with 46 additions and 8 deletions

View file

@ -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.

View file

@ -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,

View file

@ -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; i<ds.systemLen; i++) {
if (i>0) 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"},

View file

@ -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;

View file

@ -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);

View file

@ -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);