WHDLoad a MMU

### WHDLoad a Memory Managment Unit (MMU)

MMU je v následujících procesorech 68000 rodiny: MC68030, MC68040, MC68060. Existují také takzvané EC verze procesoru, které mají nefunkční MMU. Např. všechny standartní A4000/030 mají MC68EC030 CPU. Na turbokartách se to liší (informujte se v jejich dokumentaci). Pokud vím, všechny existující 68040/68060 jsou plnohodnotná CPU s funkčním MMU (protože burst mod a Zorro 3 vyžadují MMU pro mapovaní IO). MMu nemůže být nahrazeno softwarově.
Pro MC68020 je externí MMU MC68851, ale WHDLoad ho v současnosti nepodporuje.

#### Schopnosti MMU a použití ve WHDLoad

Hlavní účel MMU je přeložit logické adresy na fyzické. Je to třeba pro virtuální paměť a oddělené adresové prostory (např. v multi výkonném systému). Další schopnost je zadat zvláštní proporce jako supervisor Only, Write Protected a Caching mod pro každou fyzickou adresu/místo (na podstatě stránek, kde stránka použitá ve WHDLoad má velikost 4096 bajtů). WHDLoad nepoužívá překlad logická->fyzická adresa. Ale používá MMU pro ochranu paměti, cache managment a speciální schopnost (Snooping, resload_Protect#?).

#### Ochrana paměti ve WHDLoad

Na začátku WHDLoad scanuje list paměti a vytvoří translation tree, který obsahuje univerzálně přístupnou paměť. Označí následující adresový prostor jako legální a přístupný: $0...BaseMem (velikost určena ve slave), $dff000...$dff200 (Custom registry), $bfd000...$bff000 (Cia registry) a paměť použitá slavem a WHDLoad. Pokud je v paměti nalezen freezer, paměť, kterou používá, bude také legální. Všecnha ostatní paměť je nelegální a každý přístup do ní vytvoří vyjímku Access Fault, která skončí příslušným chybovým hlášením WHDLoadu.

#### Uživatelova kontrola MMU ve WHDLoad

Jsou tři odlišné módy, jak WHDLoad ovlivňuje existující MMU.

1. ignorovat MMU:
   V tomto módu WHDLoad nevytvoří žádný MMU registr, to se hodí pro programy, které nemají opravené chyby a MMU jim nedovoluje pokračovat v běhu. Patří mezi ně i freezer TK.
   Varování: protože WHDLoad neovládá MMU sám, mohou se vyskytnout problémy - sekání, nefunkčnost... tady je seznam problemů, o kterých víme:
   - běžící Enforcer/CyberGuard nebo podobná utilita sekne stroj, protože WHDLoad vytvoří řadu chyb, když přepíná do OS a zpět. Tyto chyby ale nejsou nedostatky WHDLoad, ale část normální operace.
   - novější verze 68060.library (od v41.1) remapují paměť $0-$1000 (první stránka) do fast RAM lokace pomocí MMU, v "ignorovacím módu" tento překlad adres zůstane nedotčený. Pokud tuto oblast používá nainstalovaný program pro DMA akce - copperlist, atd. výsledky jsou nevypočitatelné, protože CPU zapisuje do Fast RAM, ale data obsahuje Chip RAM.
   - jestli běžící MMU záleží na handleru vyjímek ("Access Fault" vyjímka), volba NoTrapHandler/S musí být zapnuta, jinak jakákoliv vyjímka bude převzata WHDLoadem a ten ukončí nainstalovaný program v případě nechtěných chyb.
   - jestli běžící MMU používá nějakou paměť (handler vyjímek, translation tree) uvnitř BaseMem nainstalovaného programu, může se seknout, protože BaseMem bude přepsána v běhu instalovaného programu.
   - v podstatě každý program, který mění základní funkce systému pomocí MMU, může s WHDLoad vejít do konfliktu.
2. vypnout MMU:
   Tento mód je možný jen na 68030. WHDLoad MMU vypne a žádná z jeho MMU možností nebude k dispozici.
3. použít MMU:
   V tomto modu WHDLoad přebírá kontrolu nad MMU a umožňuje ochranu paměti a cache management jak jsem vysvětlil níže.

Na 68030 je standartně MMU vypnuto. Na 68040/68060 je zapnuto. Změnit se to dá pomocí MMU/S (aktivuje MMU, na 68030 musí být zapnuta) NoMMU/S MMU vypne.