mirror of
https://github.com/tildearrow/furnace.git
synced 2024-12-29 11:01:27 +00:00
**Namco C163**
This commit is contained in:
parent
2ab021664e
commit
173e9b0df9
6 changed files with 46 additions and 8 deletions
|
@ -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.
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"},
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue