Merge branches 'master' and 'k053260' of https://github.com/tildearrow/furnace into k053260

This commit is contained in:
cam900 2023-06-26 19:47:25 +09:00
commit 7b49b4b8e0
161 changed files with 1190 additions and 864 deletions

View file

@ -1166,6 +1166,11 @@ int DivPlatformGenesis::dispatch(DivCommand c) {
return 1;
}
#define DRSLD2R(x) \
if (chan[i].state.op[x].dr<dr) dr=chan[i].state.op[x].dr; \
if (chan[i].state.op[x].sl<sl) sl=chan[i].state.op[x].sl; \
if (chan[i].state.op[x].d2r<d2r) d2r=chan[i].state.op[x].d2r;
void DivPlatformGenesis::forceIns() {
for (int i=0; i<6; i++) {
for (int j=0; j<4; j++) {
@ -1190,7 +1195,29 @@ void DivPlatformGenesis::forceIns() {
rWrite(chanOffs[i]+ADDR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3));
rWrite(chanOffs[i]+ADDR_LRAF,(IS_REALLY_MUTED(i)?0:(chan[i].pan<<6))|(chan[i].state.fms&7)|((chan[i].state.ams&3)<<4));
if (chan[i].active) {
if (i<5 || !chan[i].dacMode) {
bool sustained=false;
unsigned char dr=chan[i].state.op[3].dr;
unsigned char sl=chan[i].state.op[3].sl;
unsigned char d2r=chan[i].state.op[3].d2r;
switch (chan[i].state.alg&7) {
case 4:
DRSLD2R(2);
break;
case 5:
case 6:
DRSLD2R(2);
DRSLD2R(1);
break;
case 7:
DRSLD2R(2);
DRSLD2R(1);
DRSLD2R(3);
break;
}
if (dr<2 || (sl<15 && d2r<2)) sustained=true;
if ((i<5 || !chan[i].dacMode) && sustained) {
chan[i].keyOn=true;
chan[i].freqChanged=true;
}

View file

@ -346,7 +346,11 @@ void DivPlatformNES::tick(bool sysTick) {
rWrite(0x4012,(dpcmAddr>>6)&0xff);
rWrite(0x4013,dpcmLen&0xff);
rWrite(0x4015,31);
dpcmBank=dpcmAddr>>14;
if (dpcmBank!=(dpcmAddr>>14)) {
dpcmBank=dpcmAddr>>14;
logV("switching bank to %d",dpcmBank);
if (dumpWrites) addWrite(0xffff0004,dpcmBank);
}
}
} else {
if (nextDPCMFreq>=0) {
@ -425,7 +429,11 @@ int DivPlatformNES::dispatch(DivCommand c) {
rWrite(0x4012,(dpcmAddr>>6)&0xff);
rWrite(0x4013,dpcmLen&0xff);
rWrite(0x4015,31);
dpcmBank=dpcmAddr>>14;
if (dpcmBank!=(dpcmAddr>>14)) {
dpcmBank=dpcmAddr>>14;
logV("switching bank to %d",dpcmBank);
if (dumpWrites) addWrite(0xffff0004,dpcmBank);
}
}
}
break;
@ -854,6 +862,7 @@ int DivPlatformNES::init(DivEngine* p, int channels, int sugRate, const DivConfi
dpcmMem=new unsigned char[262144];
dpcmMemLen=0;
dpcmBank=0;
if (dumpWrites) addWrite(0xffff0004,dpcmBank);
init_nla_table(500,500);
reset();