The game makes heavy use of the Blitter in HOG mode, and works flawlessly on a real STE and on Hatari in STE mode. It also works as expected on Hatari in Falcon 68030 mode, provided that the "Cycle-exact with cache emulation" option is disabled:
(Ignore the incorrect colours - I understand that these are caused by incomplete Videl emulation and I have already confirmed on a real Falcon that the colours display correctly).
If I remain in Falcon 68030 mode and enable "Cycle-exact with cache emulation", the graphics rendered by the Blitter become rather garbled. This also appears to be the case on a real Falcon from testing others have performed on my behalf:
From reading around, I'm inclined to think that the culprit may be the 68030 instruction cache. This old post from DML was especially helpful:
With this in mind, I figured that I'd have a go at writing some code to disable the 68030 caches on startup with the intention that doing so would have the same effect as starting Hatari with "Cycle-exact with cache emulation" option disabled (i.e. the graphics will display correctly).Remember the Falcon has i-cache, so it can coast onwards and do stuff even if the bus is apparently blocked. That mainly affects HOG mode (e.g. assuming the CPU stopped when you enable blitter HOG) but it's worth noting you need to be extra careful using blitter on the Falcon in any case.
The page at https://bus-error.nokturnal.pl/atari_co ... /chap5.htm suggests that on 68030 I should be able to write the value #$a0a to the CACR register when in supervisor mode to flush and disable both caches:
Code: Select all
move.l #$a0a,d0
movec d0,cacr
Given that the 68030 and associated caches/MMU is an entire area of expertise in itself, is anybody able to assure me that my described approach to the problem is reasonably correct before I start digging any further into this rabbit hole?
Thanks in advance.