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)