System Monitors / Freezer
There are a lot of pure software freezers out there. The usage of such tools
may be of great help during the development and debugging of Slaves and the
installed programs. WHDLoad directly supports HRTmon and ThrillKill. If you
want direct support for an other one, you can contact me and I will try to
include support for it. During startup WHDLoad checks if one of the supported
monitors are active. If one is found WHDLoad will do some special stuff. If the
MMU is used by WHDLoad it will declare the memory used by the monitor as valid
and WriteThrough cacheable. While the game/demo runs it will forward all NMI
exceptions to the NMI vector saved from the monitors vector table. Additional,
if the VBR is moved by WHDLoad (NoVBRMove/S is
not set and the cpu is at least a 68010) it will compare the FreezeKey with the actual keyboard value at each
interrupt. If the keys match WHDLoad will acknowledge the keyboard, transform
the stackframe to a NMI stackframe and enter the monitor via his NMI handler.
The detection in memory should be safe especially with newer versions of the
monitor cause a new signature was added to the monitor. Be careful if the MMU
is used by WHDLoad: don't access memory outside BaseMem/ExpMem from HRTmon. It
will crash because HRTmon cannot handle the resulting Access Fault Exception.
In the HRTmonPrefs you must check the 'No VBR move' box, otherwise you will
not be able to enter the monitor while WHDLoad is running.
After returning from an activated HRTmon to the program running under WHDLoad
you may note a incorrect graphic display. This is because HRTmon overwrites some
Custom register. You can work around this by telling HRTmon the correct value,
e.g. use 'e $100 $5200' for a 32 color screen before return.
The HRTmon built into WinUAE can only be detected if HRTmon has been
previousy activated at least one time (press key PgUp). This is the case
because not until the first activation the NMI vector will be set which is
required by WHDLoad to locate the monitor.
There are newer releases of HRTmon which add special commands when running
under WHDLoad. So you can load/save files and use the resload_Protect#? functions from within HRTmon. These
releases are downloadable from the WHDLoad page.
There is no useable signature in the freezer, so some code compares are used.
Therefore the detection only works with known releases.