WHDLoad i la MMU

### WHDLoad i la Unitat de Gestió de Memòria (MMU, Memory Management Unit)

Els següents processadors de la família 68k: 68030 , 68040, 68060 contenen una MMU. També existeix l'anomenada versió EC (econòmica) d'aquests processadors que disposa d'una unitat MMU "falsa" sense funcionalitat. Per exemple, totes els A4000/030 estàndard disposen d'una CPU 68EC030. En plaques acceleradores de tercers això és diferent, consulti la documentació apropiada per a aprendre sobre aquest tema. Fins a on jo sé, tots els 68040/68060 utilitzats en Amiga són CPU's complertes que contenen una MMU funcional (degut al fet que el mode burst i el bus Zorro III requereixen mapeig de l'espai d'E/S mitjançant MMU). La distinció entre una CPU complerta i una versió EC no pot fer-se per programari (no almenys en un temps acceptable). Per tant l'usuari ha de fer això configurant les opcions correctes a WHDLoad.
Per al 68020 existeix una MMU externa anomenada 68851, però actualment no està suportada per WHDLoad.

#### Funcionalitats d'una MMU i el seu ús a WHDLoad

El propòsit principal de la MMU és traduir adreces lògiques a adreces físiques. Això es requereix per a la memòria virtual i espais separats de memòria (per exemple en un sistema multiprocés protegit). Una altra característica es la d'especificar propietats especials com Solament Mode Supervisor, Protecció Contra Escriptura i Mode de Caché per a cada adreça física en l'espai d'adreces (basant-se en pàgines, on una pàgina utilitzada per WHDLoad consisteix en 4096 bytes). WHDLoad no empra la traducció d'adreces lògiques a físiques però sí utilitza la MMU per a protecció de memòria, gestió de la caché i algunes funcionalitats especials (Snooping, resload_Protect#?).

#### Protecció de memòria a WHDLoad

Durant l'arrencada, WHDLoad recorre la llista de memòria i construeix un arbre de traducció que inclou tota la memòria accessible. Marca els següents espais d'adreces com vàlids i accessibles: $0...BaseMem (usant la informació de l'Esclau), $dff000...$dff200 (registres Custom), $bfd000...$bff000 (registres CIA) i la memòria utilitzada per l'Esclau i WHDLoad. Si es troba un Congelador en memòria (freezer), la memòria que utilitzi el congelador també serà marcada com a vàlida. Tota altra memòria serà marcada com a invàlida i per tant qualsevol accés a aquesta àrea (Lectura o Escriptura) ocasionarà una Excepció de Falla d'Accés que acabarà amb el quadre de diàleg d'error apropiat creat per WHDLoad.

#### Control per part de l'usuari de la gestió de MMU a WHDLoad

Hi ha 3 modes diferentes en què WHDLoad pot afectar una MMU :

1. Ignorar la MMU:
   En aquesta mode WHDLoad no canviarà cap registre relacionat amb la MMU. Això pot ser útil si s'estant executant programes que modifiquen la MMU i es vol que la funcionalitat d'aquests programes romangui intacta (per exemple un congelador per programari com TK).
   Precaució: Atès que WHDLoad no pren control per sí mateix de la MMU, poden aparéixer un munt de problemes. Aquests problemes poden causar caigudes del sistema, mal funcionament o altres comportaments inesperats. Aquí hi ha una llista dels riscos existents:
   - Executar Enforcer/CyberGuard o una eina similar congelarà/penjarà la màquina, atès que WHDLoad crearà una gran quantitat de Hits cada vegada que arrenqui/apagui el S.O. Aquests Hits no són errors de WHDLoad sinó part d'una operació normal.
   - Les versions més noves de la 68060.library (començant per v41.1) remapejaran la memòria $0-$1000 (la primer pàgina) a una ubicació en memòria Fast emprant la MMU; en mode "ignorar la MMU" aquesta traducció d'adreces romandrà intacta i si el programa instal·lat intenta utilitzar aquesta àrea per a qualsevol acció DMA (per ex. a causa de una copperlist en aquesta àrea) els resultats no poden predir-se, atès que la CPU escriurà/llegirà la ubicació de memòria Fast mentre que la DMA ho farà sobre la memòria Xip real que conté dades aleatòries.
   - Si el codi de MMU en execució depèn del seu gestor d'excepcions ("Access Fault" exception) l'opció NoTrapHandler/S s'ha d'activar, d'altra banda qualsevol excepció que ocorri serà gestionada per WHDLoad, el qual sortirà del programa instal·lat si succeeix qualsevol cosa no esperada
   - Si el codi de MMU en execució usa qualsevol memòria (gestió d'excepcions, arbre de traducció, ...) dintre de BaseMem del programa instal·lat, ocasionarà una caiguda del sistema, atès que la BaseMem serà sobreescrita durant l'execució del programa instal·lat (temporalment)
   - En general cada programa que canviï funcions bàsiques del sistema (emprant la MMU) pot entrat en conflicte amb WHDLoad ...
2. Desactivar la MMU:
   En aquest mode, que és possible només en un 68030, la MMU serà desactivada per WHDLoad i no estaran disponibles funcionalitats relacionades amb la MMU.
3. Utilitzar la MMU:
   En aquest mode WHDLoad prèn el control total sobre la MMU i realitza la protecció de memòria i gestió de la caché tal com s'ha explicat anteriorment

Al 68030 el mode per defecte és Desactivar la MMU. Als 68040/68060 el mode per defecte és utilitzar la MMU. Es disposa de dos opcions per a controlar aquest comportament: MMU/S força WHDLoad a emprar la MMU i és requerit en sistemes basats en 68030 per a utilitzar les funcionalitats de la MMU. NoMMU/S desactiva l'ús de la MMU per part de WHDLoad (ignorar la MMU).

Un hit d'Enforcer és un hit d'Enforcer, punt. (Michael Sinz)