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
ont un MMU dont certaines fonctions sont inopérantes. 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, ceci varie, renseignez-vous auprès de la documentation
pour en savoir plus. A notre connaissance, tous les 68040/68060
construits dans les Amigas ont tous un MMU. Car 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.
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, configurés sur une page de base. WHDLoad utilise une taille de
4096 octets pour une page. 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#?).
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.
Il y 3 modes différents où WHDLoad affecte un MMU existant.
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 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é.
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 ...
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.
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)