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 program. WHDLoad directly supports HRTmon and ThrillKill. Other kinds
may be used via the option NoTrapHandler/S
(this has some other disadvantages of course). If you want direct support for an
other one, you can contact me and if it can be done, I will include support for
it. On the startup of WHDLoad it will check 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. During 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 values matchs WHDLoad will do the required keyboard stuff,
transform the stackframe to a NMI stackframe and enter the monitor via his NMI
handler.
HRTmon
The detection in memory should be relative safe. I think it will also work with
future versions. Be careful if the MMU is used by WHDLoad: don't access area
outside BaseMem from HRTmon. It will crash because HRTmon does not 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). Because on first
activation the NMI vector will be set which is used by WHDLoad to locate the
monitor.
ThrillKill
There is no useable signature in the freezer, so some code compares are used.
Therefore the detection will not work with other versions.