[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

WHDLoad und die Memory Management Unit (MMU)

Eine MMU ist in den folgenden Prozessoren der 68k-Familie enthalten: 68030, 68040, 68060. Es gibt auch so genannte EC-Versionen dieser Prozessoren welche eine fehlerhafte/nicht funktionierende MMU enthalten. Zum Beispiel sind alle A4000/30 nur mit einem 68EC030 ausgestattet. Bei Beschleunigern von Drittanbietern ist das unterschiedlich. In der zugehörigen Dokumentation sollte die Information welche CPU verbaut wurde aber enthalten sein. Soweit bekannt ist, sind alle in Amigas verwendeten 68040/68060 mit einer funktionierenden MMU ausgestattet. Weil der Burstmodus und Zorro III das Einstellen der IO-Bereiche erfordern. Die Unterscheidung zwischen einer vollständigen CPU und einer EC-Version kann nicht durch Software getroffen werden. Deshalb muss der Benutzer dies mittels der richtigen Optionen WHDLoad bekannt machen.
Für den 68020 existiert eine externe MMU mit dem Namen 68851, diese wird gegenwärtig von WHDLoad aber nicht unterstützt.

Fähigkeiten einer MMU und deren Verwendung in WHDLoad

Die Hauptaufgabe der MMU ist die Übersetzung von logischen Adressen in physische. Dies wird benötigt zur Realisierung von virtuellem Speicher und zur Separierung von Adressbereichen. Eine weitere Möglichkeit ist es, spezielle Eigenschaften wie Supervisor Only, Schreibschutz und Cache-Modus für jeden Speicherbereich getrennt einzustellen (kachelbasierend, wobei WHDLoad eine Kachelgröße von 4096 Byte verwendet). WHDLoad benutzt keine logische zu physische Adressübersetzung. Aber es nutzt die MMU für Speicherschutz, CPU-Cache Verwaltung und einige spezielle Sachen (Snooping, resload_Protect#?).

Speicherschutz in WHDLoad

Beim Starten durchsucht WHDLoad die Speicherliste und baut einen Übersetzungsbaum auf, der den gesamten verfügbaren Speicher einschließt. Es markiert die folgenden Bereiche als gültig und zugreifbar: $0...BaseMem (unter Benutzung der Informationen aus dem Slave), $dff000...$dff200 (Custom Register), $bfd000...$bff000 (CIA Register) und den Speicher der vom Slave und von WHDLoad belegt wird. Wenn ein Freezer im Speicher gefunden wurde, wird sein Speicher ebenfalls gültig gesetzt. Anderer Speicher ist als ungültig markiert, damit resultiert jeder Zugriff darauf (Lese- oder Schreibzugriff) in einer Access Fault Exception, welche WHDLoad in einem entsprechenden Fehlerrequester anzeigt.

Einstellungen des Benutzers zur MMU-Verwaltung durch WHDLoad

Es gibt drei verschiedene Modi wie WHDLoad eine vorhandene MMU verwaltet.
  1. Ignoriere MMU:
    In diesem Modus benutzt WHDLoad die MMU nicht und verändert keines der MMU-Register. Dies mag sinnvoll sein, wenn bereits Programme laufen, die die MMU verwenden und deren Funktion aktiv bleiben soll (z.B. ein Freezer wie TK).
    Warnung: Da WHDLoad die MMU nicht selber kontrolliert sind viele Probleme möglich. Dies können Abstürze, Fehlfunktionen oder andere unerwartete Verhaltensweisen sein. Nachfolgend eine Auflistung möglicher Probleme:
  2. Deaktiviere MMU:
    In diesem Modus, welcher nur auf einem 68030 möglich ist, schaltet WHDLoad die MMU komplett aus. Keinerlei MMU-Funktionen sind verfügbar.
  3. Benutze MMU:
    In diesem Modus übernimmt WHDLoad die komplette Kontrolle über die MMU und realisiert Speicherschutz und CPU-Cache Verwaltung wie oben beschrieben.
Auf 68030 ist der Modus Deaktiviere MMU voreingestellt. Auf 68040/68060 ist voreingestellt Benutze MMU. Es gibt zwei Optionen dies zu verändern. MMU/S schaltet die MMU Benutzung ein (Benutze MMU) und muss auf 68030 verwendet werden um in den Genuss der MMU-Funktionen zu kommen. NoMMU/S schaltet die Verwendung der MMU durch WHDLoad ab (Ignoriere MMU).

Ein Enforcer Hit ist ein Enforcer Hit, Punkt. (Michael Sinz)


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]