Add Seta/Allumer X1-010 Support
its 16 channel wavetable/PCM chip, with (optional) stereo support. Its also has envelope, this feature has similar as AY PSG's one but its shape is also stored at RAM, and each nibble in envelope data is for each output: so i decided to added some feature for more stereo-ish envelope. Split: Envelope shape will be splitted to Left and Right half for each output. HInv, Vinv: Envelope shape will be Horizontally/Vertically mirrored the left one. Max sample length is sample bank size of Seta 2 arcade hardware (currently not emulated yet, nor it doesn't support on VGM). Chip id is temporary, it can be changed with to suggestions.
This commit is contained in:
parent
6ce2a6743c
commit
4a83c7c5a7
27 changed files with 1340 additions and 25 deletions
|
|
@ -1191,6 +1191,10 @@ void FurnaceGUI::drawInsList() {
|
|||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MIKEY]);
|
||||
name=fmt::sprintf(ICON_FA_BAR_CHART " %.2X: %s##_INS%d\n",i,ins->name,i);
|
||||
break;
|
||||
case DIV_INS_X1_010:
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_X1_010]);
|
||||
name=fmt::sprintf(ICON_FA_BAR_CHART " %.2X: %s##_INS%d\n",i,ins->name,i);
|
||||
break;
|
||||
default:
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_UNKNOWN]);
|
||||
name=fmt::sprintf(ICON_FA_QUESTION " %.2X: %s##_INS%d\n",i,ins->name,i);
|
||||
|
|
@ -1347,7 +1351,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
ImGui::Text("notes:");
|
||||
if (sample->loopStart>=0) {
|
||||
considerations=true;
|
||||
ImGui::Text("- sample won't loop on Neo Geo ADPCM-A");
|
||||
ImGui::Text("- sample won't loop on Neo Geo ADPCM-A and X1-010");
|
||||
if (sample->loopStart&1) {
|
||||
ImGui::Text("- sample loop start will be aligned to the nearest even sample on Amiga");
|
||||
}
|
||||
|
|
@ -1363,10 +1367,18 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
considerations=true;
|
||||
ImGui::Text("- sample length will be aligned and padded to 512 sample units on Neo Geo ADPCM.");
|
||||
}
|
||||
if (sample->samples&4095) {
|
||||
considerations=true;
|
||||
ImGui::Text("- sample length will be aligned and padded to 4096 sample units on X1-010.");
|
||||
}
|
||||
if (sample->samples>65535) {
|
||||
considerations=true;
|
||||
ImGui::Text("- maximum sample length on Sega PCM and QSound is 65536 samples");
|
||||
}
|
||||
if (sample->samples>131071) {
|
||||
considerations=true;
|
||||
ImGui::Text("- maximum sample length on X1-010 is 131072 samples");
|
||||
}
|
||||
if (sample->samples>2097151) {
|
||||
considerations=true;
|
||||
ImGui::Text("- maximum sample length on Neo Geo ADPCM is 2097152 samples");
|
||||
|
|
@ -2027,6 +2039,7 @@ void FurnaceGUI::drawStats() {
|
|||
String adpcmAUsage=fmt::sprintf("%d/16384KB",e->adpcmAMemLen/1024);
|
||||
String adpcmBUsage=fmt::sprintf("%d/16384KB",e->adpcmBMemLen/1024);
|
||||
String qsoundUsage=fmt::sprintf("%d/16384KB",e->qsoundMemLen/1024);
|
||||
String x1_010Usage=fmt::sprintf("%d/1024KB",e->x1_010MemLen/1024);
|
||||
ImGui::Text("ADPCM-A");
|
||||
ImGui::SameLine();
|
||||
ImGui::ProgressBar(((float)e->adpcmAMemLen)/16777216.0f,ImVec2(-FLT_MIN,0),adpcmAUsage.c_str());
|
||||
|
|
@ -2036,6 +2049,9 @@ void FurnaceGUI::drawStats() {
|
|||
ImGui::Text("QSound");
|
||||
ImGui::SameLine();
|
||||
ImGui::ProgressBar(((float)e->qsoundMemLen)/16777216.0f,ImVec2(-FLT_MIN,0),qsoundUsage.c_str());
|
||||
ImGui::Text("X1-010");
|
||||
ImGui::SameLine();
|
||||
ImGui::ProgressBar(((float)e->x1_010MemLen)/1048576.0f,ImVec2(-FLT_MIN,0),x1_010Usage.c_str());
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_STATS;
|
||||
ImGui::End();
|
||||
|
|
@ -4635,6 +4651,7 @@ bool FurnaceGUI::loop() {
|
|||
sysAddOption(DIV_SYSTEM_AY8930);
|
||||
sysAddOption(DIV_SYSTEM_LYNX);
|
||||
sysAddOption(DIV_SYSTEM_QSOUND);
|
||||
sysAddOption(DIV_SYSTEM_X1_010);
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (ImGui::BeginMenu("configure system...")) {
|
||||
|
|
@ -4921,6 +4938,23 @@ bool FurnaceGUI::loop() {
|
|||
} rightClickable
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_X1_010: {
|
||||
ImGui::Text("Clock rate:");
|
||||
if (ImGui::RadioButton("16MHz (Seta 1)",(flags&15)==0)) {
|
||||
e->setSysFlags(i,(flags&(~16))|0,restart);
|
||||
updateWindowTitle();
|
||||
}
|
||||
if (ImGui::RadioButton("16.67MHz (Seta 2)",(flags&15)==1)) {
|
||||
e->setSysFlags(i,(flags&(~16))|1,restart);
|
||||
updateWindowTitle();
|
||||
}
|
||||
bool x1_010Stereo=flags&16;
|
||||
if (ImGui::Checkbox("Stereo",&x1_010Stereo)) {
|
||||
e->setSysFlags(i,(flags&(~15))|(x1_010Stereo<<4),restart);
|
||||
updateWindowTitle();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_GB:
|
||||
case DIV_SYSTEM_YM2610:
|
||||
case DIV_SYSTEM_YM2610_EXT:
|
||||
|
|
@ -4974,6 +5008,7 @@ bool FurnaceGUI::loop() {
|
|||
sysChangeOption(i,DIV_SYSTEM_AY8930);
|
||||
sysChangeOption(i,DIV_SYSTEM_LYNX);
|
||||
sysChangeOption(i,DIV_SYSTEM_QSOUND);
|
||||
sysChangeOption(i,DIV_SYSTEM_X1_010);
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
}
|
||||
|
|
@ -5557,6 +5592,7 @@ void FurnaceGUI::applyUISettings() {
|
|||
GET_UI_COLOR(GUI_COLOR_INSTR_BEEPER,ImVec4(0.0f,1.0f,0.0f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_INSTR_SWAN,ImVec4(0.3f,0.5f,1.0f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_INSTR_MIKEY,ImVec4(0.5f,1.0f,0.3f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_INSTR_X1_010,ImVec4(0.3f,0.5f,1.0f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_INSTR_UNKNOWN,ImVec4(0.3f,0.3f,0.3f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_CHANNEL_FM,ImVec4(0.2f,0.8f,1.0f,1.0f));
|
||||
GET_UI_COLOR(GUI_COLOR_CHANNEL_PULSE,ImVec4(0.4f,1.0f,0.2f,1.0f));
|
||||
|
|
@ -6286,6 +6322,12 @@ FurnaceGUI::FurnaceGUI():
|
|||
0
|
||||
}
|
||||
));
|
||||
cat.systems.push_back(FurnaceGUISysDef(
|
||||
"Seta/Allumer X1-010", {
|
||||
DIV_SYSTEM_X1_010, 64, 0, 0,
|
||||
0
|
||||
}
|
||||
));
|
||||
sysCategories.push_back(cat);
|
||||
|
||||
cat=FurnaceGUISysCategory("Game consoles");
|
||||
|
|
@ -6570,6 +6612,18 @@ FurnaceGUI::FurnaceGUI():
|
|||
0
|
||||
}
|
||||
));
|
||||
cat.systems.push_back(FurnaceGUISysDef(
|
||||
"Seta 1", {
|
||||
DIV_SYSTEM_X1_010, 64, 0, 0,
|
||||
0
|
||||
}
|
||||
));
|
||||
cat.systems.push_back(FurnaceGUISysDef(
|
||||
"Seta 2", {
|
||||
DIV_SYSTEM_X1_010, 64, 0, 1,
|
||||
0
|
||||
}
|
||||
));
|
||||
sysCategories.push_back(cat);
|
||||
|
||||
cat=FurnaceGUISysCategory("DefleMask-compatible");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue