Here are the steps to reproduce with Hatari Mercurial version:
- Start APEX media v2.41 with resolution sync fix
- Click on the monitor icon on the left
- Click "Accept"
- Click "256 Colours"
- Click right button to accept
After this, I see on screen the palette at screen bottom, but rest of the APEX GUI has disappeared / didn't re-appear. Mouse cursor moves fine, but otherwise program doesn't react to any input.
If I use Hatari v2.0, resolution change works fine. Same thing with Hatari v2.1, when using oldUAE instead of the default CPU core.
Resolution change works also with Mercurial version of Hatari when using the default WinUAE CPU core, if:
- Both cache emulation and prefetch are disabled (--cpu-exact off --compatible off), or
- MMU emulation is enabled (--mmu on)
OldUAE CPU core doesn't emulate 030 caches, and there were significant changes in the WinUAE CPU core cache emulation after v2.0, including supporting cache emulation when MMU is enabled.
I don't see any complaints about MMU instructions when APEX media is run without it, so issue isn't its MMU usage. When I profile resolution change, DSP runs through 75 addresses, so there's some DSP code executed. When I profile CPU after things get stuck, >99% of instructions are for polling DSP interrupt status register.
Because disabling cycle exact mode (i.e. cache emulation) isn't enough, but one needs to disable also prefetch, and there's DSP involved, one could already guess that it's a timing issue between CPU & DSP, and the last item verifies that.
There are quite a few programs that have issues with that, and when relative CPU & DSP speeds change a bit, "random" programs can start working, and others stop working. :-/