diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index eb0c956bc..e8f3410fd 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -1274,6 +1274,11 @@ DivMacroInt* DivPlatformGenesis::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformGenesis::getPan(int ch) { + if (ch>5) ch=5; + return ((chan[ch].pan<<7)&1)|(chan[ch].pan&1); +} + DivSamplePos DivPlatformGenesis::getSamplePos(int ch) { if (!chan[5].dacMode) return DivSamplePos(); if (ch<5) return DivSamplePos(); diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 027cf1742..a1dacdc3d 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -801,6 +801,7 @@ DivMacroInt* DivPlatformGenesisExt::getChanMacroInt(int ch) { } unsigned short DivPlatformGenesisExt::getPan(int ch) { + if (ch==csmChan) return 0; if (ch>=4+extChanOffs) return DivPlatformGenesis::getPan(ch-3); if (ch>=extChanOffs) return ((opChan[0].pan<<7)&1)|(opChan[0].pan&1); return DivPlatformGenesis::getPan(ch); diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index 5791d2426..17ff6db48 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -370,6 +370,10 @@ DivMacroInt* DivPlatformK053260::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformK053260::getPan(int ch) { + return parent->convertPanLinearToSplit(chan[ch].panning,8,7); +} + DivDispatchOscBuffer* DivPlatformK053260::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/msm6258.cpp b/src/engine/platform/msm6258.cpp index e5de16456..92d38a980 100644 --- a/src/engine/platform/msm6258.cpp +++ b/src/engine/platform/msm6258.cpp @@ -282,6 +282,10 @@ DivMacroInt* DivPlatformMSM6258::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformMSM6258::getPan(int ch) { + return ((chan[ch].pan<<7)&1)|(chan[ch].pan&1); +} + DivDispatchOscBuffer* DivPlatformMSM6258::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 51e4131e2..1bb9dd26e 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -1564,6 +1564,18 @@ DivMacroInt* DivPlatformOPL::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformOPL::getPan(int ch) { + if (totalOutputs<=1) return 0; + if (chan[ch&(~1)].fourOp) { + if (ch&1) { + return ((chan[ch-1].pan<<7)&1)|(chan[ch-1].pan&1); + } else { + return ((chan[ch+1].pan<<7)&1)|(chan[ch+1].pan&1); + } + } + return ((chan[ch].pan<<7)&1)|(chan[ch].pan&1); +} + DivDispatchOscBuffer* DivPlatformOPL::getOscBuffer(int ch) { if (oplType==759 || chipType==8950) { if (ch>=totalChans+1) return NULL; diff --git a/src/engine/platform/qsound.cpp b/src/engine/platform/qsound.cpp index d7f908f5b..5c98990b4 100644 --- a/src/engine/platform/qsound.cpp +++ b/src/engine/platform/qsound.cpp @@ -623,6 +623,10 @@ DivMacroInt* DivPlatformQSound::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformQSound::getPan(int ch) { + return parent->convertPanLinearToSplit(chan[ch].panning,8,32); +} + DivDispatchOscBuffer* DivPlatformQSound::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/rf5c68.cpp b/src/engine/platform/rf5c68.cpp index 84522c74f..9319de5d3 100644 --- a/src/engine/platform/rf5c68.cpp +++ b/src/engine/platform/rf5c68.cpp @@ -322,6 +322,10 @@ DivMacroInt* DivPlatformRF5C68::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformRF5C68::getPan(int ch) { + return ((chan[ch].panning&15)<<8)|((chan[ch].panning&0xf0)>>4); +} + DivDispatchOscBuffer* DivPlatformRF5C68::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 76aa62fcb..7aa0455ca 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -452,6 +452,12 @@ DivMacroInt* DivPlatformSMS::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformSMS::getPan(int ch) { + if (!stereo) return 0; + unsigned char p=lastPan&(0x11<convertPanLinearToSplit(chan[ch].pan,8,255); +} + DivDispatchOscBuffer* DivPlatformSoundUnit::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/vera.cpp b/src/engine/platform/vera.cpp index fa0446ca6..57d91b3b5 100644 --- a/src/engine/platform/vera.cpp +++ b/src/engine/platform/vera.cpp @@ -444,6 +444,10 @@ DivMacroInt* DivPlatformVERA::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformVERA::getPan(int ch) { + return ((chan[ch].pan<<7)&1)|(chan[ch].pan&1); +} + DivDispatchOscBuffer* DivPlatformVERA::getOscBuffer(int ch) { return oscBuf[ch]; } diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index e95d543a4..d1422439e 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -864,6 +864,7 @@ DivMacroInt* DivPlatformX1_010::getChanMacroInt(int ch) { } unsigned short DivPlatformX1_010::getPan(int ch) { + if (!stereo) return 0; return ((chan[ch].pan&0xf0)<<4)|(chan[ch].pan&15); } diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index d88c1437f..7ca626d0f 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1461,6 +1461,11 @@ DivMacroInt* DivPlatformYM2608::getChanMacroInt(int ch) { return &chan[ch].std; } +unsigned short DivPlatformYM2608::getPan(int ch) { + if (ch>=psgChanOffs && ch=psgChanOffs && ch=psgChanOffs && chconvertPanLinearToSplit(chan[ch].panning,8,15); +} + DivDispatchOscBuffer* DivPlatformYMZ280B::getOscBuffer(int ch) { return oscBuf[ch]; }