unscrew alg + volume

This commit is contained in:
tildearrow 2022-02-09 12:43:27 -05:00
parent 1c361003c2
commit 788ccfb334
3 changed files with 39 additions and 0 deletions

View File

@ -276,6 +276,19 @@ void DivPlatformArcade::tick() {
} else { } else {
rWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|((chan[i].chVolL&1)<<6)|((chan[i].chVolR&1)<<7)); rWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|((chan[i].chVolL&1)<<6)|((chan[i].chVolR&1)<<7));
} }
for (int j=0; j<4; j++) {
unsigned short baseAddr=chanOffs[i]|opOffs[j];
DivInstrumentFM::Operator& op=chan[i].state.op[j];
if (isMuted[i]) {
rWrite(baseAddr+ADDR_TL,127);
} else {
if (isOutput[chan[i].state.alg][j]) {
rWrite(baseAddr+ADDR_TL,127-(((127-op.tl)*(chan[i].outVol&0x7f))/127));
} else {
rWrite(baseAddr+ADDR_TL,op.tl);
}
}
}
} }
if (chan[i].std.hadFb) { if (chan[i].std.hadFb) {
chan[i].state.fb=chan[i].std.fb; chan[i].state.fb=chan[i].std.fb;

View File

@ -201,6 +201,19 @@ void DivPlatformGenesis::tick() {
if (chan[i].std.hadAlg) { if (chan[i].std.hadAlg) {
chan[i].state.alg=chan[i].std.alg; chan[i].state.alg=chan[i].std.alg;
rWrite(chanOffs[i]+ADDR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)); rWrite(chanOffs[i]+ADDR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3));
for (int j=0; j<4; j++) {
unsigned short baseAddr=chanOffs[i]|opOffs[j];
DivInstrumentFM::Operator& op=chan[i].state.op[j];
if (isMuted[i]) {
rWrite(baseAddr+ADDR_TL,127);
} else {
if (isOutput[chan[i].state.alg][j]) {
rWrite(baseAddr+ADDR_TL,127-(((127-op.tl)*(chan[i].outVol&0x7f))/127));
} else {
rWrite(baseAddr+ADDR_TL,op.tl);
}
}
}
} }
if (chan[i].std.hadFb) { if (chan[i].std.hadFb) {
chan[i].state.fb=chan[i].std.fb; chan[i].state.fb=chan[i].std.fb;

View File

@ -183,6 +183,19 @@ void DivPlatformYM2610::tick() {
if (chan[i].std.hadAlg) { if (chan[i].std.hadAlg) {
chan[i].state.alg=chan[i].std.alg; chan[i].state.alg=chan[i].std.alg;
rWrite(chanOffs[i]+ADDR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)); rWrite(chanOffs[i]+ADDR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3));
for (int j=0; j<4; j++) {
unsigned short baseAddr=chanOffs[i]|opOffs[j];
DivInstrumentFM::Operator& op=chan[i].state.op[j];
if (isMuted[i]) {
rWrite(baseAddr+ADDR_TL,127);
} else {
if (isOutput[chan[i].state.alg][j]) {
rWrite(baseAddr+ADDR_TL,127-(((127-op.tl)*(chan[i].outVol&0x7f))/127));
} else {
rWrite(baseAddr+ADDR_TL,op.tl);
}
}
}
} }
if (chan[i].std.hadFb) { if (chan[i].std.hadFb) {
chan[i].state.fb=chan[i].std.fb; chan[i].state.fb=chan[i].std.fb;