WHDLoad en de MMU

### WHDLoad en de Memory Managment Unit (MMU)

Een MMU is aanwezig in de volgende van de 68000 familie: 68030, 68040, 68060. Er zijn ook zogeheten EC versies van deze processors welke een gebroken niet werkende MMU hebben. Bijvoorbeeld, alle standaard A4000/030 hebben alleen een 68EC030 CPU. Op derde partij acceleratie kaarten is dit anders, kijk in de geschikte documentatie om er over te lezen. Zo ver ik weet, zijn alle 68040/68060's ooit gebouwd in een Amiga zijn volle CPU'S die beschikking hebben over een werkende MMU (omdat burstmode en Zorro III het MMU mappen van IO ruimte nodig heeft). Het onderscheid tussen een volle CPU en een EC versie kan niet gemaakt worden met software (tenminste in een geaccepteerde tijd). Daarom moet de gebruiker dit doen door gebruik te maken van de juiste opties in WHDLoad.
Voor de 68020 is er een externe MMU genaamd 68851, maar dit word momenteel niet ondersteund in WHDload.

#### Eigenschappen van een MMU en gebruik van in WHDLoad

Het voornaamste doel van de MMU is om de logische adressen te vertalen naar fysieke adressen. Dit is nodig voor virtuele geheugen en gescheiden adres ruimtes (bijvoorbeeld in een beschermde multiproces systeem). Een andere eigenschap is om speciale eigenschappen zoals Supervisor Only, Tegen schrijven Beschermd en Cache mode voor elk fysiek adress (op een page basis,waar elke page gebruikt in WHDLoad een grootte heeft van 4096 bytes). WHDLoad gebruikt geen logische naar fysieke adress vertaling. Maar het gebruikt de MMU voor geheugen bescherming, cache management en een paar speciale eigenschappen (Snooping, resload_Protect#?).

#### Geheugen bescherming in WHDLoad

Tijdens het opstarten, scant WHDLoad de geheugen lijst en bouwt een vertaalboom wat alle toegankelijke geheugen bevat. Het markeert de volgende adres ruimtes als geldig en toegankelijk:$0...BaseMem (gebruikmakend van de informatie van de Slave), $dff000...$dff200 (Custom registers), $bfd000...$bff000 (Cia registers) en de geheugen gebruikt door de Slave en WHDLoad. Als een Freezer is gevonden in het geheugen, word de geheugen gebruikt door de Freezer ook gemarkeert als geldig. Alle andere geheugen word gemarkeert als ongeldig, en daarom met elke toegang tot zo'n gebied (Lezen of Schrijven) wordt er een Toegangs Fout Uitzondering gemaakt welke eindigt in een geschikte fout requester door WHDLoad

#### Gebruikers controle van de MMU afhandeling in WHDLoad

Er zijn 3 verschillende modes hoe WHDLoad invloed heeft op een bestaande MMU.

1. negeer MMU:
   In deze mode verandert WHDLoad niet één MMU gerelateerde register. Dit kan handig zijn als u programma's draait welke de MMU doen dichtslaan en u de functies van deze programma's intact wilt laten (bijvoorbeeld een software freezer zoals TK).
   Waarschuwing: Omdat WHDLoad niet de MMU zelf bestuurt zijn er een heleboel problemen mogelijk. Deze problemen kunnen crashes, gebreken of andere onvoorziene misdragingen veroorzaken. Hier is een lijst van mogelijke risico's:
   - het draaien van Enforcer/CyberGuard of een vergelijkbare programma zal de machine op slot doen/crashen, omdat WHDLoad een heleoel Hits aanmaakt elke keer als het de OS uit en aan zet. Deze hits zijn geen bugs van WHDLoad maar deel van een normale operatie.
   - nieuwere versies van de 68060.library (beginnend met v41.1) zal het geheugen $0-$1000 (de eerste page) hermappen naar een Snel geheugen locatie gebruikmakend van de MMU, in "negeer MMU" mode zal de adres vertaling intact blijven, als het geïnstalleerde programma probeert om dit gebied te gebruiken voor een elk DMA actie (bijv een copperlijst in dit gebied) zullen de resultaten onvoorzien zijn, omdat de CPU het Snel geheugen zal lezen/schrijven terwijl de DMA het echte Chip geheugen is welke willekeurige data bevat.
   - Als de draaiende MMU dingen afhankelijk zijn van hun uitzondering handler moet de optie NoTrapHandler/S geactiveerd zijn, anders zullen elke uitzonderingen door WHDLoad afgehandeld worden, wat het geïnstalleerde programma beëindigd wanneer ongewenste dingen gebeuren
   - Als de draaiende MMU dingen elk geheugen gebruikt (uitzondering handeler, vertaalboom, ...) in de BaseMem van het geïnstalleerde programma, kan het crashen, omdat de BaseMem overschreven word tijdens de uitvoer van het geïnstalleerde programma (tijdelijk)
   - algemeen is dat elk programma dat de basis functies van het systeem veranderd (gebruikmakend van de MMU) een conflict kan veroorzaken met WHDLoad ...
2. Schakel MMU uit:
   In deze mode, welke alleen mogelijk is op de 68030, zal de MMU uitgeschakeld worden door WHDLoad, geen MMU gerelateerde eigenschappen zijn beschikbaar.
3. gebruik MMU:
   In deze mode neemt WHDLoad de gehele controle over de MMU en realiseert geheugen bescherming en cache management zoals beschreven hierboven.

Op de 68030 is de standaard mode disable MMU. Op de 68040/68060 is de standaard use MMU. Er zijn opties om dit gedrag te beinvloeden. MMU/S forceert WHDLoad om gebruiken te maken van MMU en is vereist op 68030 systemen om de MMU eigenschappen te krijgen. NoMMU/S schakelt het MMU gebruik uit door WHDLoad (negeer MMU).

Een Enforcer hit is een Enforcer hit, punt. (Michael Sinz)