More preparing, Add OPL type docs

This commit is contained in:
cam900 2022-08-21 13:10:46 +09:00
parent 2863f1662f
commit 0b2f491997
3 changed files with 21 additions and 25 deletions

View File

@ -179,8 +179,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
switch (sys) {
case DIV_SYSTEM_YMU759:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(759,false);
dispatch=new DivPlatformOPL(759,false);
break;
case DIV_SYSTEM_YM2612:
dispatch=new DivPlatformGenesis;
@ -278,36 +277,20 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
((DivPlatformOPLL*)dispatch)->setProperDrums(sys==DIV_SYSTEM_OPLL_DRUMS);
break;
case DIV_SYSTEM_OPL:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(1,false);
break;
case DIV_SYSTEM_OPL_DRUMS:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(1,true);
dispatch=new DivPlatformOPL(1,sys==DIV_SYSTEM_OPL_DRUMS);
break;
case DIV_SYSTEM_OPL2:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(2,false);
break;
case DIV_SYSTEM_OPL2_DRUMS:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(2,true);
dispatch=new DivPlatformOPL(2,sys==DIV_SYSTEM_OPL2_DRUMS);
break;
case DIV_SYSTEM_OPL3:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(3,false);
break;
case DIV_SYSTEM_OPL3_DRUMS:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(3,true);
dispatch=new DivPlatformOPL(3,sys==DIV_SYSTEM_OPL3_DRUMS);
break;
case DIV_SYSTEM_Y8950:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(8950,false);
break;
case DIV_SYSTEM_Y8950_DRUMS:
dispatch=new DivPlatformOPL;
((DivPlatformOPL*)dispatch)->setOPLType(8950,true);
dispatch=new DivPlatformOPL(8950,sys==DIV_SYSTEM_Y8950_DRUMS);
break;
case DIV_SYSTEM_OPZ:
dispatch=new DivPlatformTX81Z;

View File

@ -1580,6 +1580,14 @@ void DivPlatformOPL::setOPLType(int type, bool drums) {
pretendYMU=false;
downsample=false;
adpcmChan=-1;
// Vaild type value:
// 1 (YM3526)
// 2 (YM3812)
// 3 (YMF262)
// 4 (YMF278; Not implemented)
// 289 (YMF289; Not implemented)
// 759 (YMU759)
// 8950 (Y8950)
switch (type) {
case 1: case 2: case 8950:
slotsNonDrums=slotsOPL2;
@ -1595,7 +1603,7 @@ void DivPlatformOPL::setOPLType(int type, bool drums) {
adpcmChan=drums?11:9;
}
break;
case 3: case 4: case 759:
case 3: case 4: case 289: case 759:
slotsNonDrums=slotsOPL3;
slotsDrums=slotsOPL3Drums;
slots=drums?slotsDrums:slotsNonDrums;
@ -1608,14 +1616,14 @@ void DivPlatformOPL::setOPLType(int type, bool drums) {
if (type==759) {
pretendYMU=true;
adpcmChan=16;
} else if (type==4) {
} else if (type==4 || type==289) {
chipFreqBase=32768*684;
downsample=true;
}
break;
}
chipType=type;
if (type==759 || type==4) {
if (type==759 || type==289 || type==4) {
oplType=3;
} else if (type==8950) {
oplType=1;
@ -1698,6 +1706,7 @@ void DivPlatformOPL::setFlags(unsigned int flags) {
chipRateBase=rate;
break;
case 4:
case 289:
switch (flags&0xff) {
case 0x01:
chipClock=COLOR_PAL*32.0/5.0;

View File

@ -151,6 +151,10 @@ class DivPlatformOPL: public DivDispatch {
void renderSamples();
int init(DivEngine* parent, int channels, int sugRate, unsigned int flags);
void quit();
DivPlatformOPL(int type, bool drums):
DivDispatch() {
setOPLType(type,drums);
}
~DivPlatformOPL();
};
#endif