Not perfect, but a lot closer than before. Matches hardware results pretty well in most scenarios, but most of it is guesswork
Fixed Wonder Momo and seems to not have any negative impacts on other games
Timer IRQ appears to behave slightly differently from VDC IRQs, the previous fix for Jackie Chan+Final Soldier broke Order of the Griffon. This fix allows all 3 games to work properly.
Address should only be updated if the previous write had the bit cleared
Fixes a crash in the Games Express game "CD Mahjong Bishoujo Chuushinha" after character selection
If any IRQ occured immediately after SET, returning from the IRQ would have the memory flag cleared, which caused the next instruction to behave completely differently from what was intended.
This caused issues in Ankoku Densetsu because it uses SET a lot and has the timer IRQ running constantly
Both games do CLI followed by LDA $0000 in their IRQ handler. The old logic would prevent an additional IRQ from firing after the LDA, because the LDA acknowledges the IRQ. But at this point, the CPU already processed the IRQ and will execute it anyway (the acknowledge is too late because it occurs on the last cycle of the instruction). Both games rely on this behavior, otherwise the IRQ handler's logic is executed too fast and the shaking occurs depending on the timing of the timer irq vs the rcr irq
-Noise timer was affecting the frequency for channels 5 & 6 by mistake
-Fixed output changes being associated with the wrong timestamp
Fixes sound issues in Aoi Blink, Aldynes, Cross Wiber (and most likely more)
Changes the resolution for PCE games (resolution now matches the current game, rather than always being forced to 4x), which makes all filters work better than before. Enabling the fixed resolution option reverts to the old behavior.
On SNES, this forces the output to always be 2x scale, which prevents resolution changes when toggling high res mode on/off. This allows AVI recording to work when a game changes resolution while recording
Caused by the code used to apply brightness/etc. settings. Disabled code when settings are at default values, and fixed rounding issue that caused the problem in the first place