WHDLoad et le MMU

### WHDLoad et l'unité de gestion mémoire (MMU)

Le MMU se trouve sur les processeurs de la famille des 68000 suivants: MC68030, MC68040, MC68060. Il existe des versions EC de ces processeurs qui n'ont pas de MMU. Par exemple, sur les Amiga standards A4000/030, ceux-ci possèdent seulement un MC68EC030 CPU. Sur les 3ème parties de cartes accélératrices, c'est différent, renseignez-vous auprès de la documentation pour en savoir plus. Pour autant que je sache, tous les 68040/68060 construits dans les Amigas ont tous un MMU (parce que le burstmode et le port Zorro III ont besoin d'un MMU pour reloger les mémoires entrées-sorties). La différence entre un CPU (avec MMU) et une version EC ne peut se faire par software. Par conséquent, l'utilisateur doit configurer lui-même WHDLoad avec l'option adéquate.
Pour les MC68020, il existe un MMU externe appelé MC68851, pour l'instant il n'est pas supporté par WHDLoad.

#### Caratéristiques du MMU et son utilisation dans WHDLoad

Le but principal du MMU est de traduire les adresses logiques en adresses physiques. Ceci est requis pour la mémoire virtuelle et pour séparer l'espace d'adressage (par exemple dans un système protégé de plusieurs processus). Une autre caractéristique est de spécifier des propriétés comme le mode "Supervisor Only", protection contre l'écriture et le mode "Cache" pour chaque adresse mémoire physique (WHDLoad utilise une page de 4096 octets). WHDLoad ne transforme pas les adresses logiques en adresses physiques. Mais il utilise le MMU pour la protection de mémoire, la gestion des caches du CPU et d'autres caractéristiques (Snooping, resload_Protect#?).

#### Protection de la mémoire dans WHDLoad

Au début, WHDLoad scanne la liste de la mémoire et construit un arbre de traduction (translation tree) qui incluera toutes les mémoires accessibles. Il marque les adresses de mémoires suivantes comme valides et accessibles : $0...BaseMem (en utilisant les informations du Slave), $dff000...$dff200 (canaux DMA), $bfd000...$bff000 (registres CIA) et la mémoire utilisée par le Slave et WHDLoad. Si un débugger est trouvé dans la mémoire, celle-ci sera valide. Toutes les autres mémoires seront notées comme invalide, et donc chaque accès dans ces mémoires (en lecture ou écriture) produira un "Access Fault Exception" qui quittera avec un message d'erreur approprié créé par WHDLoad.

#### Contrôle du MMU dans WHDLoad par l'utilisateur

Il y 3 modes différents où WHDLoad affecte un MMU existant.

1. ignore MMU:
   Dans ce mode, WHDLoad ne change aucun registre du MMU. Ceci peut être utile si vous avez un programme qui modifie le MMU et que vous voulez que le fonctionnement du programme reste intact (par exemple un debuggeur comme TK).
   Attention: parce que WHDLoad ne contrôle plus le MMU lui-même, certains problèmes peuvent arriver. Ces problèmes peuvent causer des effondrements du système et d'autres dysfonctionnements imprévisibles. Voici une liste des risques qui existent:
   - Si Enforcer/CyberGuard ont été exécutés ou un programme similaire, ceux-ci bloqueront ou effronderont le système, car WHDLoad créera un nombre important de "Hits" chaque fois qu'il activera et désactivera l'OS. Ces "Hits" ne sont pas des bugs de WHDLoad mais des opérations normales.
   - Les nouvelles versions de la 68060.library (à partir de la v41.1) transfèrent la mémoire $0-$1000 (la 1ère page) en mémoire Fast en utilisant le MMU, avec le mode "ignore MMU", cette adresse reste intacte, si le programme installé essaye d'utiliser cette mémoire pour n'importe quelle opération via les canaux DMA (par exemple une copper-liste dans cette mémoire), le résultat sera imprévisible, parce que le CPU lira ou écrira dans la mémoire Fast alors que la vraie mémoire Chip contiendra des données aléatoires.
   - Si le MMU actif dépend de son "exception handler" (l'exception "Access Fault") l'option NoTrapHandler/S doit être activée sinon n'importe quelle exception produite sera prise en main par WHDLoad, et ceci quittera le programme installé.
   - Si le MMU actif utilise la mémoire (exception handler, translation tree,...) dans la BaseMem du programme installé, tout peut s'effrondré, car la BaseMem sera écrasée pendant l'exécution du programme installé (temporairement).
   - En général, chaque programme qui change les fonctions de base du système (en utilisant le MMU) peut être en conflit avec WHDLoad ...
2. disable MMU:
   Dans ce mode, cette fonction n'est seulement possible qu'avec un 68030, le MMU sera inactif, aucune caratéristique du MMU ne sera disponible.
3. use MMU:
   Dans ce mode, WHDLoad prend le contrôle total du MMU et réalise la protection de la mémoire et la gestion des caches du CPU comme expliqué ci-dessus.

Pour un 68030, le mode par défaut est disable MMU. Pour un 68040 ou 68060, par defaut, ce sera use MMU. Il y a 2 options pour contrôler le MMU. MMU/S active le MMU et doit être utilisé sur des systèmes 68030 pour activer le fontionnement du MMU. NoMMU/S désactive le MMU.

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