YM2612: implement urgent flag on ymfm and LLE

issue #2475
This commit is contained in:
tildearrow 2025-06-18 02:51:14 -05:00
parent f0207011da
commit a36d78305a

View file

@ -256,8 +256,9 @@ void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) {
if (delay>0) delay--;
os[0]=0; os[1]=0;
if (delay<=0 && !writes.empty()) {
if (!writes.empty()) {
QueuedWrite& w=writes.front();
if (delay<=0 || w.urgent) {
if (w.addr==0xfffffffe) {
delay=w.val;
} else {
@ -276,6 +277,17 @@ void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) {
canWriteDAC=writes.empty();
}
}
} else {
if (dacWrite>=0) {
if (!canWriteDAC) {
canWriteDAC=true;
} else {
urgentWrite(0x2a,dacWrite);
dacWrite=-1;
canWriteDAC=writes.empty();
}
}
}
} else {
canWriteDAC=true;
if (dacWrite>=0) {
@ -414,8 +426,9 @@ void DivPlatformGenesis::acquire_nuked276(short** buf, size_t len) {
if (delay>0) delay--;
if (delay<=0 && !writes.empty()) {
if (!writes.empty()) {
QueuedWrite& w=writes.front();
if (delay<=0 || w.urgent) {
if (w.addr==0xfffffffe) {
delay=w.val;
writes.pop_front();
@ -564,6 +577,17 @@ void DivPlatformGenesis::acquire_nuked276(short** buf, size_t len) {
} else {
w.addrOrVal=true;
}
} else {
if (dacWrite>=0) {
if (!canWriteDAC) {
canWriteDAC=true;
} else {
urgentWrite(0x2a,dacWrite);
dacWrite=-1;
canWriteDAC=writes.empty();
}
}
}
} else {
canWriteDAC=true;
if (dacWrite>=0) {