Цитата Сообщение от ukms[z
]окно с 4000 предоставлено для машиннозависимых модулей. а это для каждой машины по-своему компилить, так или иначе - согласись ?
драйвера и всё остальное работает из С000
А отработчик NMI почему с #4100? Его ведь тоже можно реализовать для всех машин. И Reset-хендлер тоже...
Кстати говоря, можно реализовать их двумя альтернативными способами:
1. Где-то есть переменная, где оно явно прописано.
2. Если область переменных разрушена (пользователю отдано 100% памяти), то производим сканирование ВСЕЙ имеющейся оперативки на предмет наличия следующего (например) тега:
ResTag DC.B "NMIH" ; сигнатура NMI-хендлера (для Reset'а - "RSTH")
DC.W <длина области> ; Длина проверяемой области начиная с ResEntry
DC.W <CRC> ; CRC проверяемой области
ResEntry ; Здесь собственно вызываемый код
Подпрограмма отработки прерывания определяет текущую страницу (машиннозависимо: с помощью чтения портов либо методом интеллектуальной проверки с помощью CRC - образец см. в TR-DOS Magic). Далее производится поиск по всей доступной памяти сигнатуры. При ее обнаружении происходит сравнение CRC указанной области (контроль целостности кода). Если CRC совпала, резидент считается валидным и запускается на выполнение с запрещенными прерываниями. Что делать дальше - абсолютно его дело. На стеке пользователя при вызове прерывания сохраняется только минимум регистров, необходимый для работы функций определения текущей активной страницы и поиска резидента, все остальное - задача резидента (рекомендуется поиметь собственный стек).
Невалидный резидент пропускается с продолжением поиска.
Плюсы: возможна работа совместно с любым программным обеспечением, даже если оно уничтожает системные области.
Минусы: возможный метод защиты - установка в памяти еще одного собственного резидента, блокирующего работу отладчика.