WHDLoad и MMU

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

Особенности MMU и его использование в WHDLoad

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

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

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

Контроль MMU в WHDLoad пользователем

Есть 3 различных способа, как WHDLoad действительно затрагивает существующий MMU.

  1. ignore MMU:
    При этом способе WHDLoad не изменяет регистров MMU. Этот может быть полезным, если установленная программа изменяет MMU и вы хотите, чтобы функционирование программы осталось нетронутым (например системный монитор  TK). Предупреждение: поскольку WHDLoad не управляет MMU, то возможны некоторые проблемы. Эти проблемы могут создать крах системы или другие нарушения функционирования. Здесь список существующих проблем:
  2. disable MMU:
    этот способ возможен только на 68030, MMU будет выключен и WHDLoad не сможет использовать особенности MMU.
  3. use MMU:
    при этом способе WHDLoad берет полный контроль над MMU и осуществляет защиту памяти и управления Cache CPU как написано выше.

Для 68030, способ по умолчанию является disable MMU. На процессорах 68040/68060 по умолчанию - использование MMU. Есть два варианта, чтобы управлять состоянием MMU. MMU/S включает в WHDLoad использование MMU и требуется для того чтобы включть дополнительные возможности MMU на 68030. NoMMU/S отключает использование MMU в WHDLoad (игнорирование MMU).

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