Системные мониторы / Отладчики

Существует множество различных программ для отладки. Их использование может оказать большую помощь в процессе разработки и отладки программ. Напрямую WHDLoad  поддерживает такие как HrtMon и ThrillKill. Другие могут использоваться через параметр NoTrapHandler/S (тут конечно есть свои минусы). Если вы хотите прямую поддержку других способов, то просто свяжитесь со мной и я включу эту поддержку, если это представляется возможным. При старте WHDLoad проверяет, активен ли какой-то из поддерживаемых мониторов. Если хотя бы один из известных мониторов будет обнаружен, то WHDLoad производит специальные действия. Если WHDLoad использует MMU, то объявленная память используется монитором и кэшируется WriteThrough. В процессе работы игр/демо WHDLoad пересылает все NMI-исключения NMI-вектору, записывая их в таблицу векторов монитора. Дополнительно, если VBR перемещён с помощью WHDLoad (опция NoVBRMove/S не включена, и процессор не ниже 68010), то при каждом прерывании будет проверяться не нажата ли на клавиатуре клавиша FreezeKey. И если клавиша нажата, то WHDLoad обрабатывает нажатие, преобразует stackframe в NMI stackframe и входит в монитор через его обработчик NMI.

HrtMon

Обнаружение в памяти должно бы быть достаточно стабильно. Я полагаю, что это будет также работать и с будущими версиями программы. Будьте внимательны, если WHDLoad использует MMU: не делайте обращений из HrtMon к области за пределами BaseMem - это вызовет ошибку, потому что HrtMon не сможет обработать Access Fault Exception.

В свойствах HRTmonPrefs, обязательно включите 'No VBR move', иначе не сможете войти в монитор, во время работы WHDLoad.

После возвращения из активированного HRTmon в запущенную под WHDLoad программу, изображение на дисплее может быть "битым", потому что HRTmon перезаписывает некоторые регистры. Вы можете этого избежать, если перед возвратом укажете HRTmon корректные значения, например, 'e $100 $5200' для 32-цветного режима экрана.

ThrillKill

В отладчике отсутствует какая-либо сигнатура, поэтому используются некие сравнения кодов. Поэтому процесс определения может не работать с другими версиями.