support ymfm (NO LLE SUPPORT, WHO NEEDS EMULATION THAT ACCURATE)
This commit is contained in:
parent
8dd9ede0d0
commit
ccfb3d3407
|
@ -458,6 +458,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
|
|||
((DivPlatformYM2203Ext*)dispatch)->setCombo(eng->getConfInt("opn1Core", 1));
|
||||
}
|
||||
((DivPlatformYM2203Ext*)dispatch)->setCSM(1);
|
||||
((DivPlatformYM2203Ext*)dispatch)->setExtSSG(1);
|
||||
break;
|
||||
case DIV_SYSTEM_YM2608:
|
||||
dispatch=new DivPlatformYM2608;
|
||||
|
|
|
@ -268,6 +268,7 @@ void DivPlatformYM2203::acquire_combo(short** buf, size_t len) {
|
|||
|
||||
void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
|
||||
thread_local int os;
|
||||
thread_local int os1, os2;
|
||||
|
||||
ymfm::ym2203::fm_engine* fme=fm->debug_fm_engine();
|
||||
|
||||
|
@ -310,12 +311,27 @@ void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
|
|||
fm->generate(&fmout);
|
||||
iface.clock(24);
|
||||
|
||||
os=((fmout.data[0]*fmVol)>>8)+(((fmout.data[1]+fmout.data[2]+fmout.data[3])*ssgVol)>>8);
|
||||
os=((fmout.data[0]*fmVol)>>8);
|
||||
if (os<-32768) os=-32768;
|
||||
if (os>32767) os=32767;
|
||||
|
||||
if (stereo) {
|
||||
// so ugly
|
||||
os1=((fmout.data[1]+((fmout.data[2]*centerVol+fmout.data[3]*sideVol)>>8))*ssgVol)>>8;
|
||||
os2=((((fmout.data[1]*sideVol+fmout.data[2]*centerVol)>>8)+fmout.data[3])*ssgVol)>>8;
|
||||
if (os1<-32768) os1=-32768;
|
||||
if (os1>32767) os1=32767;
|
||||
if (os2<-32768) os2=-32768;
|
||||
if (os2>32767) os2=32767;
|
||||
buf[0][h]=os+os1;
|
||||
buf[1][h]=os+os2;
|
||||
} else {
|
||||
os+=((fmout.data[1]+fmout.data[2]+fmout.data[3])*ssgVol)>>8;
|
||||
if (os<-32768) os=-32768;
|
||||
if (os>32767) os=32767;
|
||||
buf[0][h]=os;
|
||||
|
||||
if (extendedSSG) buf[1][h]=os;
|
||||
}
|
||||
|
||||
for (int i=0; i<3; i++) {
|
||||
int out=(fmChan[i]->debug_output(0)+fmChan[i]->debug_output(1))<<1;
|
||||
|
@ -493,6 +509,7 @@ void DivPlatformYM2203::acquire_lle(short** buf, size_t len) {
|
|||
if (outL>32767) outL=32767;
|
||||
|
||||
buf[0][h]=outL;
|
||||
if (extendedSSG) buf[1][h]=outL;
|
||||
}
|
||||
|
||||
for (int i=0; i<7; i++) {
|
||||
|
|
Loading…
Reference in a new issue