OPM/OPZ: new hard reset strat
also fix weird envelope after hard reset
This commit is contained in:
parent
7fbc188532
commit
c0d1fe9c65
7 changed files with 116 additions and 51 deletions
|
|
@ -559,7 +559,6 @@ void DivPlatformYM2610::tick(bool sysTick) {
|
|||
mustHardReset=true;
|
||||
for (int j=0; j<4; j++) {
|
||||
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||
oldWrites[baseAddr+ADDR_SL_RR]=-1;
|
||||
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||
hardResetElapsed++;
|
||||
}
|
||||
|
|
@ -740,6 +739,13 @@ void DivPlatformYM2610::tick(bool sysTick) {
|
|||
for (int i=0; i<psgChanOffs; i++) {
|
||||
if (i==1 && extMode) continue;
|
||||
if ((chan[i].keyOn || chan[i].opMaskChanged) && chan[i].hardReset) {
|
||||
// restore SL/RR
|
||||
for (int j=0; j<4; j++) {
|
||||
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||
DivInstrumentFM::Operator& op=chan[i].state.op[j];
|
||||
immWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4));
|
||||
}
|
||||
|
||||
immWrite(0x28,(chan[i].opMask<<4)|konOffs[i]);
|
||||
chan[i].opMaskChanged=false;
|
||||
chan[i].keyOn=false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue