WHDLoad a MMU (Memory Management Unit)

### WHDLoad a Memory Managment Unit (MMU)

MMU sa nachádza v nasledujúcich procesoroch rodiny 68k: MC68030, MC68040, MC68060. Existujú tiež takzvané EC verzie procesorov, ktoré majú MMU nefunkčné. Napr. všetky štandartné A4000/030 majú MC68EC030 CPU. Na turbokartách je situácia odlišná (pozrite sa do manuálu od týchto kariet). Pokiaľ je mi známe, všetky existujúce 68040/68060 obsahujú plnohodnotné CPU s funkčným MMU (pretože burst mód a Zorro 3 vyžadujú MMU na mapovanie IO priestoru). MMU nemôže byť nahradené softwarovo.
Preto by užívateľ mal zvoliť správne nastavenie ako bude WHDLoad nakladať s MMU.
Pre MC68020 existuje externé MMU MC68851, ale WHDLoad ho v súčasnosti nepodporuje.

#### Schopnosti MMU a ich použite vo WHDLoad

Hlavným účelom MMU je preložiť logické adresy na fyzické. Je to potrebné kvôli virtuálnej pamäti a oddeleným adresným priestorom (napr. v chránenom multi-procesovom systéme). Ďalšou schopnosťou je nastavenie špeciálneho režimu ako Supervisor Only, Write Protected a Caching mód pre každý fyzický adresný priestor (BasePage, kde stránka použitá vo WHDLoad má veľkosť 4096 bajtov). WHDLoad nepoužíva preklad typu logická->fyzická adresa. Používa však MMU na ochranu pamäti, cache managment a niektoré špeciálne schopnosti (Snooping, resload_Protect#?).

#### Ochrana pamäte vo WHDLoad

WHDLoad po spustení prehľadá list pamäte a vytvorí prekladovú štruktúru (translation tree), ktorá obsahuje prístupnú pamäť. Označí nasledujúce adresné priestory ako platné a prístupné: $0...BaseMem (použitím informácie zo Slave), $dff000...$dff200 (Custom registre), $bfd000...$bff000 (Cia registre) a pamäť použitá programom WHDLoad a Slave. Ak je v pamäti nájdený freezer, pamäť, ktorú používa, bude tiež označená ako platná. Ostatná pamäť je označená ako neplatná a každý prístup do takej oblasti (či už čítanie alebo zapisovanie) vytvorí výnimku Access Fault, ktorá skončí príslušným chybovým hlásením programu WHDLoad.

#### Užívateľská kontrola práce MMU vo WHDLoad

Existujú 3 rozličné spôsoby ako WHDLoad ovplyvňuje MMU.

1. ignorovanie MMU:
   V tomto móde WHDLoad nemení žiadny register spojený s MMU. To sa hodí pre programy, ktoré sú v konflikte s MMU a užívateľ chce, aby funkčnosť takých programov zostala zachovaná. Patrí medzi ne i freezer TK.
   Varovanie: pretože WHDLoad neovláda MMU sám, môžu sa vyskytnúť množstvo problémov - mrznutie, zlyhanie, neočakávane správanie... tu je zoznam známych problémov:
   - bežiaci Enforcer/CyberGuard alebo podobný program zamrzne stroj, pretože WHDLoad vytvorí množstvo Hits vždy, keď prepína do OS a späť. Tieto chyby ale nie sú nedostatky WHDLoad, ale sú súčasťou normálnej operácie.
   - novšie verzie 68060.library (od v41.1) remapujú pamäť $0-$1000 (prvá stránka) do Fast RAM pomocou MMU, pri ignorovaní MMU tento preklad adries zostane nedotknutý. Ak túto oblasť používa nainštalovaný program pre DMA akcie - copperlist, atd. následky sú nevypočitateľné, pretože CPU číta/zapisuje Fast RAM oblasti, kým DMA používa reálnu Chip RAM, ktorá obsahuje náhodné dáta.
   - ak bežiace MMU závisí na ovládači výnimiek ("Access Fault" výnimka), voľba NoTrapHandler/S musí byť zapnutá, inak akákoľvek výnimka bude spracovaná programom WHDLoad, ktorý ukončí nainštalovaný program v prípade nechcených chýb.
   - ak bežiace MMU používa akúkoľvek pamäť (ovládač výnimiek, translation tree...) vo vnútri BaseMem nainštalovaného programu, môže zamrznúť, pretože BaseMem bude prepísaná počas behu nainštalovaného programu (dočasne).
   - v podstate každý program, ktorý mení základné funkcie systému pomocou MMU, môže vojsť do konfliktu s programom WHDLoad.
2. vypnutie MMU:
   Tento mód je možný len na 68030. WHDLoad MMU vypne a žiadna z jeho MMU možností nebude k dispozícii.
3. použitie MMU:
   V tomto móde WHDLoad preberá plnú kontrolu nad MMU a umožňuje tak ochranu pamäte a cache management tak, ako bolo vysvetlené vyššie.

Na 68030 je MMU štandartne vypnuté. Na 68040/68060 je zapnuté. Sú dve voľby, ktoré menia toto nastavenie. Voľba MMU/S prikáže programu WHDLoad, aby použil MMU. Táto voľba vyžadovaná na 68030 systémoch. Voľba NoMMU/S vypne použitie MMU programom WHDLoad (MMU bude ignorované).

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