C128 NetLex

Commodore 128 Bedienungshandbuch
Commodore 128 System Guide



B. Die Speicherverwaltung mit der MMU

B.1.4 RAM-Speicherorganisation

Wir beziehen uns nochmals auf das Bild B.1 (C128-Speicherorganisation). Für den vorhandenen RAM-Bereich von 128 kByte werden dynamische Speicherbausteine verwendet. Dieser RAM-Bereich wird in zwei Speicherbänke von je 64 kByte eingeteilt (64 kByte ist der maximale Adreßraum, den die 8502- und Z80-Prozessoren adressieren können). Zwischen den Speicherbänken kann umgeschaltet werden.

Der als RAM gekennzeichnete Bereich ist der Speicher, den der Mikroprozessor "sieht", wenn alle ROMs weggeschaltet sind.

Die Speicherbankumschaltung kann auf zwei verschiedene Weisen vorgenommen werden.

Die aktuelle Speicherbank ergibt sich aus dem Wert, der im Konfigurations-Register gespeichert ist. (Es gibt noch andere Speicher-Modi, die sich über die gerade eingeschaltete Bank hinwegsetzen. Diese Modi werden in einem späteren Abschnitt behandelt.) Eine Änderung dieses Registers wirkt sich immer sofort und direkt aus. Ein indirektes Benutzen dieser Register mit programmierten Bank-Konfigurationswerten besteht im Beschreiben eines der indirekten Lade-Register (LCR - Load Configuration Register).

Die LCR-Register sind im Speicherbereich ab der Adresse $FF00 angelegt. Durch Beschreiben eines der LCRs wird der Inhalt des mit ihm korrespondierenden PCRs (Prä-Konfigurations-Register) in das Konfigurations-Register übertragen (es wird in das Konfigurations-Register geodert). Auf diese Weise kann der Programmierer bis zu 4 verschiedene vorprogammierte Zustände einstellen.

So könnte z.B. Bank 1 eine Datenbank sein, also ein reiner RAM-Bereich ohne zugeschalteten ROM oder Ein-/Ausgabe-Bereich, während in Bank 0 das System-ROM und der Ein-/Ausgabebereich durch Voreinstellung eingeschaltet sind.

Wenn man in einer 64-kByte-Bank arbeitet, ist es manchmal wünschenswert, Daten in der Bank 1 zu hinterlegen, aber dennoch das System-RAM (Stack, Zero Page, Bildschirm) zu behalten. Für diesen Zweck ist die MMU in der Lage, einen gemeinsamen RAM-Bereich bereitzustellen.

Dieser RAM-Bereich kann zu- oder abgeschaltet werden. Er ist in seiner Größe veränderbar und kann programmiert am Anfang oder am Ende einer Bank angelegt werden. Der gemeinsame RAM-Bereich kann aber auch aufgeteilt werden, und ein Teil kann am Anfang und der andere Teil am Ende der Bank stehen.

Die Größe eines gemeinsamen RAM-Bereiches wird durch die Bits 0 und 1 im RAM-Konfigurations-Register (RCR) bestimmt. Wenn beide Bits = 0 sind, sind 1 kByte, ist Bit 0 = 1 und Bit 1 = 0 sind 4 kByte, ist Bit 0 = 0 und Bit 1 = 1 sind 8 kByte und sind beide Bit = 1, sind 16 kByte als gemeinsamer Bereich eingeschaltet.

Ist Bit 2 des RCRs gesetzt, wird der gemeinsame Bereich am unteren Ende des RAM-Bereiches, ist Bit 3 im RCR gesetzt, am oberen Ende des RAM-Bereiches angelegt. In allen Fällen ist der gemeinsame Speicherbereich physikalisch ein Bestandteil der Speicherbank 0.

Die ersten 512 Bytes des Speichers (Zero Page (P0) und Stapelspeicher (P1)) können unabhängig vom RCR im gesamten Adreßraum angeordnet werden. Wenn der Prozessor eine Adresse der Zero Page oder des Stapelspeichers anwählt, addiert die MMU den Inhalt des P0- oder des P1-Registerpaares auf die Adesse und legt die neue, erweiterte Adresse (Adressenbits A16 und A17) auf den Bus. Dabei kann natürlich eine Speicherumschaltung (RAM Banking) vorkommen. Wenn die P0- bzw. P1-Register beschrieben werden, werden sie solange zwischengespeichert bis das niederwertige Byte im P0-Register beschrieben wird. Dadurch werden vorzeitige Änderungen der Systemkonfiguration oder ungültige Systemzustände vermieden.

Gleichzeitig werden Zero Page und Stapelspeicher mit dem Speicher vertauscht, der beide ersetzt hat, wenn der Prozessor eine Adresse verwendet, die innerhalb des durch die P0- oder P1-Register bezeichneten Bereiches liegt.

Es ist jedoch zu beachten, daß bei einem System-Reset die Zeiger auf die tatsächliche Zero Page und den tatsächlichen Stapelspeicher gesetzt werden.

Der VIC-Baustein kann durch 2 Bits im MMU-RAM-Konfigurations-Register adressiert werden. Das Register steuert die Adressleitungen A16 und A17 und erlaubt damit, den VIC-Baustein beliebig innerhalb eines 256-kByte-Bereiches zu plazieren.

Anmerkung: Die Address-Enable-Control (AEC)-Leitung wird von der MMU benutzt, um den VIC-Adreßraum zu steuern, d.h., wenn AEC = 0 ist, kann der VIC-Baustein
adressiert werden.

Dies bedeutet, daß ein von außen gesteuerter direkter Speicherzugriff (DMA), der auch auf die AEC-Leitung einwirkt und die Leitung ebenfalls nach logisch Null zieht, den VIC-Baustein ansprechen kann.


Auszug aus dem Commodore C128 (D) Bedienungshandbuch: Seite B-4 bis B-6


[Seitenanfang] [Infos] [Links] [Lexikon] [Home]
Erstellt von WTE, am 07. März 2012; überarbeitet am 15. Januar 2013