[hardware/memory]
MMU und Speicherverwaltung
128 Kilobyte RAM wirken heute klein. Interessant wird der C128 erst durch die Frage, wie dieses RAM überhaupt nutzbar gemacht wird. Ein 6502-Derivat kann von sich aus nur 64 Kilobyte direkt adressieren. Der zweite Speicherbereich muss also organisiert, geschaltet und in den sichtbaren Adressraum eingeblendet werden. Dafür ist der MOS 8722 zuständig.
Der 8722 ist keine MMU im modernen Sinn mit virtueller Adressierung oder Schutzmechanismen. Er ist vielmehr ein konfigurierbarer Speicherumschalter. Er bestimmt, welche RAM-Bank gerade sichtbar ist, welche ROM-Bereiche eingeblendet werden und welche I/O-Bereiche aktiv bleiben. Genau dadurch bekommt der C128 ein Speichermodell, das deutlich komplexer ist als das des C64.
Zwei 64-kB-Bänke
Das physische RAM des C128 ist in zwei 64-kB-Bänke gegliedert. Beide sind vorhanden, aber die CPU sieht jeweils nur einen bestimmten Ausschnitt, den die MMU vermittelt. BASIC 7.0 nutzt diese Struktur auf eigene Weise: Programmcode, Variablen und Systembereiche können auf unterschiedliche Bänke verteilt werden.
Hinzu kommt die konfigurierbare ROM-Einblendung. Im C64-Modus verhält sich der Speicher weitgehend wie beim C64. Im C128-Modus bekommt der Programmierer deutlich mehr Kontrolle darüber, welche Bereiche sichtbar sind und wie der Adressraum genutzt wird. Das eröffnet Möglichkeiten, macht die Sache aber auch schwerer durchschaubar.
[MMU_Diagnostic] MOS 8722
> physisches RAM: 128 KB / aufgeteilt in Bank 0 und Bank 1 (je 64 KB)
> CPU-Adressraum: 64 KB / MMU vermittelt zwischen CPU und physischem RAM
> ROM-Einblendung: KERNAL / BASIC / Zeichensatz konfigurierbar je Modus
> I/O-Bereich: konfigurierbar / im C64-Modus wie C64 / im C128-Modus flexibler
> Bewertung: mehr Kontrolle als beim Vorgänger, aber zu höherem Preis in der Komplexität
In der Praxis bedeutete das: Wer das Speichermodell wirklich verstand, konnte den Rechner sehr gezielt ausnutzen. Wer es nur halb verstand, stieß schnell auf Verhalten, das auf den ersten Blick unlogisch wirkte. Genau das ist für mich typisch für Übergangsarchitektur: mehr Möglichkeiten, aber nicht ohne Gegenleistung.
Register und Schnellkonfiguration
Die MMU-Register liegen im C128-I/O-Bereich ab $D500.
Konfigurations- und Load-Configuration-Register sind zusätzlich bei
$FF00–$FF04 erreichbar, unabhängig davon, welche ROM- oder
RAM-Konfiguration im oberen Adressraum eingeblendet ist.
Vier Preconfiguration-Register können häufig benötigte Speichermodelle
vorbereiten. Ein Schreibzugriff auf das zugehörige Load-Configuration-
Register aktiviert die gespeicherte Konfiguration mit geringem Aufwand.
„Die MMU war kein Komfortmerkmal. Sie war die notwendige Antwort auf ein reales Adressraum-Problem.“