tofro wrote: Wed Aug 13, 2025 2:29 pm
Well, there's mainly two, maybe three sins that game writers tend to commit frequently (for no good reason, actually):
- Patch the first entry in the polling interrupt list with your own code address, basically killing the interrupt system - On Minerva, which relies on complete execution of the list to run properly, that is the main culprits for non-running games. There's in fact not much reason to do that when you can add your VSYNC code properly to the polling interrupt with a system call instead of doing that nonsense for a totally insignificant loss of performance. (If you properly use the polling interrupt, the OS will also normally take care of the differences in exception stack layout between various CPUs for free...)
- Run in supervisor mode. This doesn't normally affect Minerva, but keyboard and sound handling on the Q68, QIMSI Gold, and some emulators, for example. On an otherwise empty system, your performance gain will also only be very minimal.
The keyboard
will be scanned even in supervisor mode, unless you disable interrupts or the polled interrupt list (with Hermes and Minerva 1.93+ it will continue to be scanned, since Hermes generates an interface interrupt unlike the ordinary IPC).
Having disabled interrupts, you can still scan the keyboard using the 'keyrow' IPC function. Minerva for Q68 now emulates that function, even with interrupts disabled, if the application properly uses the IPC system call.
Another reason for games failing on Minerva might be relocation of the SSP (Supervisor Stack Pointer). Minerva relies on register A6 being in the same 32K segment as the SSP. This way, with dual screen enabled, it can correctly set A6 to point to the system variables since it cannot store it somewhere in RAM like SMSQ/E does.
If you relocate the SSP somewhere in high memory, this will fail so don't expect MT.IPCOM to continue to work (AFAIK, in Minerva it depends on A6 pointing to the SV area, unlike classic QDOS).