WHDLoad and the MMU

### WHDLoad и диспетчер памяти (MMU)

Диспетчер памяти (MMU) имеется в следующих процессорах семейства 680xx: 68030, 68040, 68060. Есть также, так называемые, EC-версии этих процессоров, в корорых MMU отсутствует. Например, во всех стандартных компьютерах модели A4000/030 установлен только процессор 68EC030. На акселераторах сторонних призводителей могут устанавливаться различные процессоры, поэтому для получения информации о конкретном акселераторе слудует обратиться к его документации. Насколько я знаю, все модели 68040/68060, которые когда-либо встраивались в Амиги были полноценными версиями, содержащими рабочий MMU (потому как burstmode и Zorro III требуют его для функций ввода/вывода). Различия между полным центральным процессором и версией EC не могут быть устранены на уровне программного обеспечения (по крайней мере, с приемлемой скоростью). Поэтому пользователь должен самостоятельно установить соответствующие опции соответствующие опции для WHDLoad.
Для 68020 существует внешний диспетчер памяти, называемый 68851, но в настоящее время он не поддерживается программой WHDload.

#### Возможности диспетчера памяти и его использование в WHDLoad

Главная цель диспетчера памяти состоит в том, чтобы переводить логические адреса в физические. Это требуется для работы виртуальной памяти и для автономного адресного пространства (например, в многозадачном защищенном режиме). Другая возможность состоит в том, чтобы указывать такие свойства, как "Supervisor Only ", защита от записи и режим кэширования для каждого участка физической памяти (WHDLoad использует размер таблицы равный 4096 байт). WHDLoad не использует перевод логических адресов в физические. Но зато использует MMU для защиты памяти, работы с кэшем и ещё для некоторых специальных возможностей (Snooping, resload_Protect *?).

#### Защита памяти в WHDLoad

При запуске, WHDLoad просматривает память, строит дерево перевода адресов, вклющее всю доступную память и отмечает следующие адреса как достоверные и доступные: $0... BaseMem (берёт информацию из Slave-модуля), $dff000... $dff200 (Custom-регистры), $bfd000... $bff000 (Cia-регистры) и память, используемую Slave-модулем и с самой программой WHDLoad. Если в памяти обнаружен отладчик, то память, используемая отладчиком, будет также помечена, как доступная. Вся другая память помечается как недоступная, и поэтому каждое обращение к такой области (чтение или запись), инициирует сообщение об ошибке доступа к памяти и WHDLoad завершит свою работу с выводом соответствующего сообщения.

#### Управление диспетчером памяти в WHDLoad со стороны пользователя

Существует 3 режима взаимодействия WHDLoad с диспетчером памяти.

1. Ignore MMU (игнорирование диспетчера памяти):
   При этом способе WHDLoad не изменяет регистров диспетчера памяти. Это бывает полезным, если имеется еще какая-то программа, также работающая в данный момент с диспетчером памяти (например, такая как системный монитор TK) и вы не хотите повлиять на функционирование этой программы. Предупреждение: поскольку WHDLoad самостоятелно не управляет диспетчером памяти, то возможна масса проблем. Эти проблемы могут создать крах системы или как-то нарушить нормальное функционирование системы. Вот список возможных проблем:
   - Если запущены Enforcer/CyberGuard или подобные программы, то они заблокируют либо перезагрузят систему, потому что WHDLoad создаст большую серию обращений всякий раз, при отключении OS. Эти обращения не являются ошибками, это нормальное поведение программы WHDLoad.
   - Более новые версии 68060.library (начиная с версии 41.1) переадресуют память $0-$1000 (первая страница) в быструю (Fast) память, используя диспетчер памяти. В режиме "ignore MMU", эта переадресация останется нетронутой, если установленная программа попытается использовать эту память для любых операций с DMA (например, copperlist в этой области памяти). Результат будет непредсказуем, потому что центральный процессор в момент DMA-операций будет читать/писать в быструю (Fast) память, а реальная Chip-память будет содержать в этот момент случайные данные.
   - Если работа диспетчера памяти зависит от обработчика ошибок ("Ошибка Доступа"), то обязана быть активизирована опция NoTrapHandler/S, иначе любая возникшая исключительная ситуация будет обработана программой WHDLoad, который, в случае непредусмотренных действий, остановит установленную программу.
   - Если запущенный MMU работает с памятью (exception handler, translation tree, ...) внутри базовой (BaseMem) памяти установленной программы, то это может привести к ошибке, потому что BaseMem будет временно изменена в момент выполнения установленной программы.
   - В общем, каждая программа, которая изменяет основные функции системы (используя диспетчер памяти), может конфликтовать с WHDLoad...
2. Disable MMU (отключение диспетчера памяти):
   Этот способ возможен только на процессорах 68030. Диспетчер памяти будет выключен и WHDLoad не сможет использовать возможности MMU.
3. Use MMU (использование диспетчера памяти):
   При этом способе WHDLoad берет полный контроль над MMU и осуществляет защиту памяти и управление кэшем центрального процессора, как объяснялось выше.

Для процессоров 68030 режимом по умолчанию является Disable MMU.
Для процессоров 68040/68060 - Use MMU.

Существует два параметра для управления состоянием диспетчера памяти:
MMU/S заставляет WHDLoad использовать режим Use MMU и требуется на системах с процессором 68030 для включения возможностей диспетчера памяти.
NoMMU/S отключает использование MMU программой WHDLoad (Ignore MMU).

An Enforcer hit is an Enforcer hit, period. (Michael Sinz)