new panning effects (80/81/82)

This commit is contained in:
tildearrow 2022-04-29 23:41:14 -05:00
parent 9c4fed2f4e
commit 2e8634626d
29 changed files with 328 additions and 112 deletions

View file

@ -543,8 +543,8 @@ int DivPlatformArcade::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
chan[c.chan].chVolL=((c.value>>4)>0);
chan[c.chan].chVolR=((c.value&15)>0);
chan[c.chan].chVolL=(c.value>0);
chan[c.chan].chVolR=(c.value2>0);
if (isMuted[c.chan]) {
rWrite(chanOffs[c.chan]+ADDR_LR_FB_ALG,(chan[c.chan].state.alg&7)|(chan[c.chan].state.fb<<3));
} else {

View file

@ -371,9 +371,11 @@ int DivPlatformGB::dispatch(DivCommand c) {
break;
case DIV_CMD_PANNING: {
lastPan&=~(0x11<<c.chan);
if (c.value==0) c.value=0x11;
c.value=((c.value&15)>0)|(((c.value>>4)>0)<<4);
lastPan|=c.value<<c.chan;
int pan=0;
if (c.value>0) pan|=0x10;
if (c.value2>0) pan|=0x01;
if (pan==0) pan=0x11;
lastPan|=pan<<c.chan;
rWrite(0x25,procMute());
break;
}

View file

@ -633,10 +633,10 @@ int DivPlatformGenesis::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
chan[c.chan].pan=3;
} else {
chan[c.chan].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1);
}
rWrite(chanOffs[c.chan]+ADDR_LRAF,(isMuted[c.chan]?0:(chan[c.chan].pan<<6))|(chan[c.chan].state.fms&7)|((chan[c.chan].state.ams&3)<<4));
break;

View file

@ -107,10 +107,10 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) {
opChan[ch].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
opChan[ch].pan=3;
} else {
opChan[ch].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
opChan[ch].pan=(c.value2>0)|((c.value>0)<<1);
}
if (parent->song.sharedExtStat) {
for (int i=0; i<4; i++) {

View file

@ -259,7 +259,7 @@ int DivPlatformLynx::dispatch(DivCommand c) {
}
break;
case DIV_CMD_PANNING:
chan[c.chan].pan=c.value;
chan[c.chan].pan=(c.value&0xf0)|(c.value2>>4);
WRITE_ATTEN(c.chan,chan[c.chan].pan);
break;
case DIV_CMD_GET_VOLUME:

View file

@ -680,10 +680,10 @@ int DivPlatformOPL::dispatch(DivCommand c) {
break;
case DIV_CMD_PANNING: {
if (oplType!=3) break;
if (c.value==0) {
if (c.value==0 && c.value2==0) {
chan[c.chan].pan=3;
} else {
chan[c.chan].pan=(((c.value&15)>0)<<1)|((c.value>>4)>0);
chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1);
}
int ops=(slots[3][c.chan]!=255 && chan[c.chan].state.ops==4 && oplType==3)?4:2;
if (isMuted[c.chan]) {

View file

@ -424,7 +424,7 @@ int DivPlatformPCE::dispatch(DivCommand c) {
}
break;
case DIV_CMD_PANNING: {
chan[c.chan].pan=c.value;
chan[c.chan].pan=(c.value&0xf0)|(c.value2>>4);
chWrite(c.chan,0x05,isMuted[c.chan]?0:chan[c.chan].pan);
break;
}

View file

@ -441,7 +441,7 @@ int DivPlatformQSound::dispatch(DivCommand c) {
return chan[c.chan].outVol;
break;
case DIV_CMD_PANNING:
chan[c.chan].panning=parent->convertPanSplitToLinear(c.value,4,32);
chan[c.chan].panning=parent->convertPanSplitToLinearLR(c.value,c.value2,32);
immWrite(Q1_PAN+c.chan,chan[c.chan].panning+0x110+(chan[c.chan].surround?0:0x30));
break;
case DIV_CMD_QSOUND_ECHO_LEVEL:

View file

@ -331,7 +331,7 @@ int DivPlatformSAA1099::dispatch(DivCommand c) {
break;
}
case DIV_CMD_PANNING:
chan[c.chan].pan=c.value;
chan[c.chan].pan=(c.value&0xf0)|(c.value2>>4);
if (isMuted[c.chan]) {
rWrite(c.chan,0);
} else {

View file

@ -268,8 +268,8 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
chan[c.chan].chVolL=(c.value>>4)|(((c.value>>4)>>1)<<4);
chan[c.chan].chVolR=(c.value&15)|(((c.value&15)>>1)<<4);
chan[c.chan].chVolL=c.value>>1;
chan[c.chan].chVolR=c.value2>>1;
if (dumpWrites) {
addWrite(0x10002+(c.chan<<3),chan[c.chan].chVolL);
addWrite(0x10003+(c.chan<<3),chan[c.chan].chVolR);

View file

@ -270,7 +270,7 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) {
break;
}
case DIV_CMD_PANNING: {
chan[c.chan].pan=parent->convertPanSplitToLinear(c.value,4,254)-127;
chan[c.chan].pan=parent->convertPanSplitToLinearLR(c.value,c.value2,254)-127;
chWrite(c.chan,0x03,chan[c.chan].pan);
break;
}

View file

@ -412,7 +412,7 @@ int DivPlatformSwan::dispatch(DivCommand c) {
}
break;
case DIV_CMD_PANNING: {
chan[c.chan].pan=c.value;
chan[c.chan].pan=(c.value&0xf0)|(c.value2>>4);
calcAndWriteOutVol(c.chan,chan[c.chan].std.vol.will?chan[c.chan].std.vol.val:15);
break;
}

View file

@ -525,8 +525,8 @@ int DivPlatformTX81Z::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
chan[c.chan].chVolL=((c.value>>4)>0);
chan[c.chan].chVolR=((c.value&15)>0);
chan[c.chan].chVolL=(c.value>0);
chan[c.chan].chVolR=(c.value2>0);
chan[c.chan].freqChanged=true;
/*
if (isMuted[c.chan]) {

View file

@ -345,8 +345,8 @@ int DivPlatformVERA::dispatch(DivCommand c) {
break;
case DIV_CMD_PANNING: {
tmp=0;
tmp|=(c.value&0x10)?1:0;
tmp|=(c.value&0x01)?2:0;
tmp|=(c.value>0)?1:0;
tmp|=(c.value2>0)?2:0;
chan[c.chan].pan=tmp&3;
if (c.chan<16) {
rWriteHi(c.chan,2,isMuted[c.chan]?0:chan[c.chan].pan);

View file

@ -694,8 +694,9 @@ int DivPlatformX1_010::dispatch(DivCommand c) {
break;
case DIV_CMD_PANNING: {
if (!stereo) break;
if (chan[c.chan].pan!=c.value) {
chan[c.chan].pan=c.value;
unsigned char newPan=(c.value&0xf0)|(c.value2>>4);
if (chan[c.chan].pan!=newPan) {
chan[c.chan].pan=newPan;
if (!isMuted[c.chan]) {
chan[c.chan].envChanged=true;
}

View file

@ -839,10 +839,10 @@ int DivPlatformYM2610::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
chan[c.chan].pan=3;
} else {
chan[c.chan].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1);
}
if (c.chan>12) {
immWrite(0x11,isMuted[c.chan]?0:(chan[c.chan].pan<<6));

View file

@ -902,10 +902,10 @@ int DivPlatformYM2610B::dispatch(DivCommand c) {
chan[c.chan].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
chan[c.chan].pan=3;
} else {
chan[c.chan].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
chan[c.chan].pan=(c.value2>0)|((c.value>0)<<1);
}
if (c.chan>14) {
immWrite(0x11,isMuted[c.chan]?0:(chan[c.chan].pan<<6));

View file

@ -99,10 +99,10 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) {
opChan[ch].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
opChan[ch].pan=3;
} else {
opChan[ch].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
opChan[ch].pan=(c.value2>0)|((c.value>0)<<1);
}
DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM);
if (parent->song.sharedExtStat) {

View file

@ -99,10 +99,10 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) {
opChan[ch].ins=c.value;
break;
case DIV_CMD_PANNING: {
if (c.value==0) {
if (c.value==0 && c.value2==0) {
opChan[ch].pan=3;
} else {
opChan[ch].pan=((c.value&15)>0)|(((c.value>>4)>0)<<1);
opChan[ch].pan=(c.value2>0)|((c.value>0)<<1);
}
DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM);
if (parent->song.sharedExtStat) {