Add Bubble System Support
Bubble System 2 channel Wavetable sound generator logic is configuration with K005289, 4 bit PROM and DAC. K005289 controls pitch and 5 bit address generator per channel, Waveform select and Volume control is tied to AY-3-8910 ports. (each port for per channels) these configuration is better known as K005289, the part of logic. furnace emulates this configurations as single system, waveform format is 15 level and 32 width.
This commit is contained in:
parent
bd705d837d
commit
69aeb7dd58
18 changed files with 616 additions and 14 deletions
|
|
@ -226,7 +226,7 @@ unsigned char DivEngine::systemToFile(DivSystem val) {
|
|||
return 0x96;
|
||||
case DIV_SYSTEM_SAA1099:
|
||||
return 0x97;
|
||||
case DIV_SYSTEM_OPZ:
|
||||
case DIV_SYSTEM_OPZ:
|
||||
return 0x98;
|
||||
case DIV_SYSTEM_POKEMINI:
|
||||
return 0x99;
|
||||
|
|
@ -394,6 +394,8 @@ int DivEngine::getChannelCount(DivSystem sys) {
|
|||
return 19;
|
||||
case DIV_SYSTEM_VERA:
|
||||
return 17;
|
||||
case DIV_SYSTEM_K005289:
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -539,6 +541,9 @@ const char* DivEngine::getSongSystemName() {
|
|||
}
|
||||
break;
|
||||
case 3:
|
||||
if (song.system[0]==DIV_SYSTEM_AY8910 && song.system[1]==DIV_SYSTEM_AY8910 && song.system[2]==DIV_SYSTEM_K005289) {
|
||||
return "Konami Bubble System";
|
||||
}
|
||||
break;
|
||||
}
|
||||
return "multi-system";
|
||||
|
|
@ -669,6 +674,8 @@ const char* DivEngine::getSystemName(DivSystem sys) {
|
|||
return "VERA";
|
||||
case DIV_SYSTEM_X1_010:
|
||||
return "Seta/Allumer X1-010";
|
||||
case DIV_SYSTEM_K005289:
|
||||
return "Konami Bubble System Sound";
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
|
@ -798,6 +805,8 @@ const char* DivEngine::getSystemChips(DivSystem sys) {
|
|||
return "VERA";
|
||||
case DIV_SYSTEM_X1_010:
|
||||
return "Seta/Allumer X1-010";
|
||||
case DIV_SYSTEM_K005289:
|
||||
return "Konami K005289";
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
|
@ -1008,7 +1017,7 @@ const int chanTypes[41][32]={
|
|||
{3, 4, 3, 2}, // Swan
|
||||
};
|
||||
|
||||
const DivInstrumentType chanPrefType[46][28]={
|
||||
const DivInstrumentType chanPrefType[47][28]={
|
||||
{DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM}, // YMU759
|
||||
{DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_STD, DIV_INS_STD, DIV_INS_STD, DIV_INS_STD}, // Genesis
|
||||
{DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_STD, DIV_INS_STD, DIV_INS_STD, DIV_INS_STD}, // Genesis (extended channel 3)
|
||||
|
|
@ -1055,6 +1064,7 @@ const DivInstrumentType chanPrefType[46][28]={
|
|||
{DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_FM, DIV_INS_AY, DIV_INS_AY, DIV_INS_AY, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_AMIGA}, // YM2610B (extended channel 3)
|
||||
{DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_VERA, DIV_INS_AMIGA}, // VERA
|
||||
{DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010, DIV_INS_X1_010}, // X1-010
|
||||
{DIV_INS_SCC, DIV_INS_SCC}, // K005289
|
||||
};
|
||||
|
||||
const char* DivEngine::getChannelName(int chan) {
|
||||
|
|
@ -1083,6 +1093,7 @@ const char* DivEngine::getChannelName(int chan) {
|
|||
break;
|
||||
case DIV_SYSTEM_PCE:
|
||||
case DIV_SYSTEM_SFX_BEEPER:
|
||||
case DIV_SYSTEM_K005289:
|
||||
return chanNames[5][dispatchChanOfChan[chan]];
|
||||
break;
|
||||
case DIV_SYSTEM_NES:
|
||||
|
|
@ -1228,6 +1239,7 @@ const char* DivEngine::getChannelShortName(int chan) {
|
|||
break;
|
||||
case DIV_SYSTEM_PCE:
|
||||
case DIV_SYSTEM_SFX_BEEPER:
|
||||
case DIV_SYSTEM_K005289:
|
||||
return chanShortNames[5][dispatchChanOfChan[chan]];
|
||||
break;
|
||||
case DIV_SYSTEM_NES:
|
||||
|
|
@ -1369,6 +1381,7 @@ int DivEngine::getChannelType(int chan) {
|
|||
break;
|
||||
case DIV_SYSTEM_PCE:
|
||||
case DIV_SYSTEM_SFX_BEEPER:
|
||||
case DIV_SYSTEM_K005289:
|
||||
return chanTypes[5][dispatchChanOfChan[chan]];
|
||||
break;
|
||||
case DIV_SYSTEM_NES:
|
||||
|
|
@ -1642,6 +1655,9 @@ DivInstrumentType DivEngine::getPreferInsType(int chan) {
|
|||
case DIV_SYSTEM_X1_010:
|
||||
return chanPrefType[45][dispatchChanOfChan[chan]];
|
||||
break;
|
||||
case DIV_SYSTEM_K005289:
|
||||
return chanPrefType[46][dispatchChanOfChan[chan]];
|
||||
break;
|
||||
}
|
||||
return DIV_INS_FM;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue