prepare for more platforms

This commit is contained in:
tildearrow 2022-01-12 22:58:51 -05:00
parent 9ff852d1db
commit 9b40dd994b
2 changed files with 143 additions and 6 deletions

View File

@ -67,6 +67,19 @@ DivSystem systemFromFile(unsigned char val) {
return DIV_SYSTEM_C64_6581;
case 0x49:
return DIV_SYSTEM_YM2610_EXT;
// Furnace-specific systems
case 0x80:
return DIV_SYSTEM_AY8910;
case 0x81:
return DIV_SYSTEM_AMIGA;
case 0x82:
return DIV_SYSTEM_YM2151;
case 0x83:
return DIV_SYSTEM_YM2612;
case 0x84:
return DIV_SYSTEM_TIA;
case 0x97:
return DIV_SYSTEM_SAA1099;
}
return DIV_SYSTEM_NULL;
}
@ -97,6 +110,20 @@ unsigned char systemToFile(DivSystem val) {
return 0x47;
case DIV_SYSTEM_YM2610_EXT:
return 0x49;
// Furnace-specific systems
case DIV_SYSTEM_AY8910:
return 0x80;
case DIV_SYSTEM_AMIGA:
return 0x81;
case DIV_SYSTEM_YM2151:
return 0x82;
case DIV_SYSTEM_YM2612:
return 0x83;
case DIV_SYSTEM_TIA:
return 0x84;
case DIV_SYSTEM_SAA1099:
return 0x97;
case DIV_SYSTEM_NULL:
return 0;
}
@ -127,6 +154,19 @@ int DivEngine::getChannelCount(DivSystem sys) {
return 13;
case DIV_SYSTEM_YM2610_EXT:
return 16;
// Furnace-specific systems
case DIV_SYSTEM_AY8910:
return 3;
case DIV_SYSTEM_AMIGA:
return 4;
case DIV_SYSTEM_YM2151:
return 8;
case DIV_SYSTEM_YM2612:
return 6;
case DIV_SYSTEM_TIA:
return 2;
case DIV_SYSTEM_SAA1099:
return 6;
}
return 0;
}
@ -163,6 +203,19 @@ const char* DivEngine::getSystemName(DivSystem sys) {
return "Neo Geo";
case DIV_SYSTEM_YM2610_EXT:
return "Neo Geo Extended Channel 2";
// Furnace-specific systems
case DIV_SYSTEM_AY8910:
return "AY-3-8910";
case DIV_SYSTEM_AMIGA:
return "Amiga";
case DIV_SYSTEM_YM2151:
return "Yamaha YM2151";
case DIV_SYSTEM_YM2612:
return "Yamaha YM2612";
case DIV_SYSTEM_TIA:
return "Atari 2600";
case DIV_SYSTEM_SAA1099:
return "Philips SAA1099";
}
return "Unknown";
}
@ -173,14 +226,19 @@ bool DivEngine::isFMSystem(DivSystem sys) {
sys==DIV_SYSTEM_ARCADE ||
sys==DIV_SYSTEM_YM2610 ||
sys==DIV_SYSTEM_YM2610_EXT ||
sys==DIV_SYSTEM_YMU759);
sys==DIV_SYSTEM_YMU759 ||
sys==DIV_SYSTEM_YM2151 ||
sys==DIV_SYSTEM_YM2612);
}
bool DivEngine::isSTDSystem(DivSystem sys) {
return (sys!=DIV_SYSTEM_ARCADE && sys!=DIV_SYSTEM_YMU759);
return (sys!=DIV_SYSTEM_ARCADE &&
sys!=DIV_SYSTEM_YMU759 &&
sys!=DIV_SYSTEM_YM2612 &&
sys!=DIV_SYSTEM_YM2151);
}
const char* chanNames[11][17]={
const char* chanNames[17][17]={
{"Channel 1", "Channel 2", "Channel 3", "Channel 4", "Channel 5", "Channel 6", "Channel 7", "Channel 8", "Channel 9", "Channel 10", "Channel 11", "Channel 12", "Channel 13", "Channel 14", "Channel 15", "Channel 16", "PCM"}, // YMU759
{"FM 1", "FM 2", "FM 3", "FM 4", "FM 5", "FM 6", "Square 1", "Square 2", "Square 3", "Noise"}, // Genesis
{"FM 1", "FM 2", "FM 3 OP1", "FM 3 OP2", "FM 3 OP3", "FM 3 OP4", "FM 4", "FM 5", "FM 6", "Square 1", "Square 2", "Square 3", "Noise"}, // Genesis (extended channel 3)
@ -192,9 +250,15 @@ const char* chanNames[11][17]={
{"FM 1", "FM 2", "FM 3", "FM 4", "FM 5", "FM 6", "FM 7", "FM 8", "Sample 1", "Sample 2", "Sample 3", "Sample 4", "Sample 5"}, // Arcade
{"FM 1", "FM 2", "FM 3", "FM 4", "Square 1", "Square 2", "Square 3", "Sample 1", "Sample 2", "Sample 3", "Sample 4", "Sample 5", "Sample 6"}, // YM2610
{"FM 1", "FM 2 OP1", "FM 2 OP2", "FM 2 OP3", "FM 2 OP4", "FM 3", "FM 4", "Square 1", "Square 2", "Square 3", "Sample 1", "Sample 2", "Sample 3", "Sample 4", "Sample 5", "Sample 6"}, // YM2610 (extended channel 2)
{"Square 1", "Square 2", "Square 3"}, // AY-3-8910
{"Channel 1", "Channel 2", "Channel 3", "Channel 4"}, // Amiga
{"FM 1", "FM 2", "FM 3", "FM 4", "FM 5", "FM 6", "FM 7", "FM 8"}, // YM2151
{"FM 1", "FM 2", "FM 3", "FM 4", "FM 5", "FM 6"}, // YM2612
{"Channel 1", "Channel 2"}, // TIA
{"Square 1", "Square 2", "Square 3", "Square 4", "Square 5", "Square 6"}, // SAA1099
};
const char* chanShortNames[11][17]={
const char* chanShortNames[17][17]={
{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "PCM"}, // YMU759
{"F1", "F2", "F3", "F4", "F5", "F6", "S1", "S2", "S3", "NO"}, // Genesis
{"F1", "F2", "O1", "O2", "O3", "O4", "F4", "F5", "F6", "S1", "S2", "S3", "S4"}, // Genesis (extended channel 3)
@ -206,9 +270,15 @@ const char* chanShortNames[11][17]={
{"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "P1", "P2", "P3", "P4", "P5"}, // Arcade
{"F1", "F2", "F3", "F4", "S1", "S2", "S3", "P1", "P2", "P3", "P4", "P5", "P6"}, // YM2610
{"F1", "O1", "O2", "O3", "O4", "F3", "F4", "S1", "S2", "S3", "P1", "P2", "P3", "P4", "P5", "P6"}, // YM2610 (extended channel 2)
{"S1", "S2", "S3"}, // AY-3-8910
{"CH1", "CH2", "CH3", "CH4"}, // Amiga
{"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8"}, // YM2151
{"F1", "F2", "F3", "F4", "F5", "F6"}, // YM2612
{"CH1", "CH2"}, // TIA
{"S1", "S2", "S3", "S4", "S5", "S6"}, // SAA1099
};
const int chanTypes[11][17]={
const int chanTypes[17][17]={
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}, // YMU759
{0, 0, 0, 0, 0, 0, 1, 1, 1, 2}, // Genesis
{0, 0, 5, 5, 5, 5, 0, 0, 0, 1, 1, 1, 2}, // Genesis (extended channel 3)
@ -220,6 +290,12 @@ const int chanTypes[11][17]={
{0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4}, // Arcade
{0, 0, 0, 0, 1, 1, 1, 4, 4, 4, 4, 4, 4}, // YM2610
{0, 5, 5, 5, 5, 0, 0, 1, 1, 1, 4, 4, 4, 4, 4, 4}, // YM2610 (extended channel 2)
{1, 1, 1}, // AY-3-8910
{4, 4, 4, 4}, // Amiga
{0, 0, 0, 0, 0, 0, 0, 0}, // YM2151
{0, 0, 0, 0, 0, 0}, // YM2612
{3, 3}, // TIA
{1, 1, 1, 1, 1, 1}, // SAA1099
};
const char* DivEngine::getChannelName(int chan) {
@ -258,6 +334,24 @@ const char* DivEngine::getChannelName(int chan) {
case DIV_SYSTEM_YM2610_EXT:
return chanNames[10][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AY8910:
return chanNames[11][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AMIGA:
return chanNames[12][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2151:
return chanNames[13][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2612:
return chanNames[14][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_TIA:
return chanNames[15][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_SAA1099:
return chanNames[16][dispatchChanOfChan[chan]];
break;
}
return "??";
}
@ -298,6 +392,24 @@ const char* DivEngine::getChannelShortName(int chan) {
case DIV_SYSTEM_YM2610_EXT:
return chanShortNames[10][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AY8910:
return chanShortNames[11][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AMIGA:
return chanShortNames[12][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2151:
return chanShortNames[13][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2612:
return chanShortNames[14][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_TIA:
return chanShortNames[15][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_SAA1099:
return chanShortNames[16][dispatchChanOfChan[chan]];
break;
}
return "??";
}
@ -337,6 +449,24 @@ int DivEngine::getChannelType(int chan) {
case DIV_SYSTEM_YM2610_EXT:
return chanTypes[10][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AY8910:
return chanTypes[11][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_AMIGA:
return chanTypes[12][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2151:
return chanTypes[13][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_YM2612:
return chanTypes[14][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_TIA:
return chanTypes[15][dispatchChanOfChan[chan]];
break;
case DIV_SYSTEM_SAA1099:
return chanTypes[16][dispatchChanOfChan[chan]];
break;
}
return 1;
}

View File

@ -23,7 +23,14 @@ enum DivSystem {
DIV_SYSTEM_C64_8580,
DIV_SYSTEM_ARCADE,
DIV_SYSTEM_YM2610,
DIV_SYSTEM_YM2610_EXT
DIV_SYSTEM_YM2610_EXT,
DIV_SYSTEM_AY8910,
DIV_SYSTEM_AMIGA,
DIV_SYSTEM_YM2151,
DIV_SYSTEM_YM2612,
DIV_SYSTEM_TIA,
DIV_SYSTEM_SAA1099
};
struct DivSong {