Die MMU (Memory Management Unit) des HD64180
Helmut Bernhardt
Der auch vom HD4180 benutzte Befehlssatz des Z80 kennt nur 64K-umfas-
sende Adressoperanden. Die Software kann nur 64K-Byte Speicher adres-
sieren. Durch die MMU ist es möglich, Anteile dieses logichen 64K-
Adreßraumes in verschiedene Bereiche des physikalischen 512K-Adreß-
raumes zu legen.
Der durch Software ansprechbare logische 64K-Adreßraum kann in bis zu
3 Bereiche unterteilt werden: Common0, Bank und Common1. Common0 be-
ginnt immer bei 0000H und kann in 4K-Schritten beliebig groß angelegt
werden. Common1 liegt immer unter der oberen Grenze FFFFH des
logischen Adreßraumes und kann ebenfalls in 4K-Schritten beliebig weit
nach unten reichend vorgegeben werden. Bank umfaßt den Bereich
zwscchen Common0 und Common1. Für die Aufteilung des logischen Adreß-
raumes sind folgende Konfigurationen möglich:
+---------+ +---------+ +---------+ +---------+
| Common1 | | Common1 | | Common1 | | Common1 |
+---------+ | | | | | |
| Bank | +---------+ +---------+ | |
+---------+ | | | | | |
| Conmon0 | | Bank | | Common0 | | |
+---------+ +---------+ +---------+ +---------+
Während Common 1 mit einer Größe von minimal 4K unterhalb von FFFFH
immer vorhanden ist, lassen sich die Bereiche Commn0 und Bank auch
ganz unterdrücken. Die Adressen der Grenzen zwischen den einzelnen Be-
reichen lassen sich in 4K-Schritten verschieben. Über je 4 Bits des
CBAR-Registers Port 3AH werden die Adressen A15-A12 der Untergrenzen
der Bereiche Common1 und Bank festgelegt.
CBAR, (Common/Bank Base Register), Port 3AH
Bit 7 6 5 4 3 2 1 0
Name CA3 CA2 CA1 CA0 BA3 BA2 BA1 BA0
Zugriff R/W R/W R/W R/W R/W R/W R/W R/W
Dabei represetieren D7-D4 die Adressen A15-A12 die Untergrenze des
Common1-Bereichs und D3-D0 die Adressen A15-A12 der Untergrenze des
Bank-Bereichs. Nach RESET wird dieses Register immer mit F0 initiali-
siert. Damit ist die für ein gebanktes CP/M 3.0 günstigste Einteilung
in Common1 bei F000H-FFFFH und Bank bei 0000H-EFFFH vorgegeben.
Wenn z.B. C4H an CBAR ausgegeben wird, liegt die Untergrenze von Com-
mon 1 bei C000H und die Untergrene von Bank bei 4000. Die resultie-
rende Speicheraufteilung sieht dann so aus:
Common1 C000H-FFFFH
Bank 4000H-BFFFH
Common0 0000H-3FFFH
Die Nibble des Bytes an CBAR sind die oberen Adreß-Digits der Unter-
grenzen von Common1 (oberes Nibble) und Bank (unteres Nible).
Eine Ausagbe von F0H an CBAR bedeutet, daß Common1 bei F000H-FFFFH
liegt und der restliche Speicher 0000G-EFFFH Bank-Bereich ist. Common0
existiert dann nicht (durch RESET voreingetellt).
Eine dem GDOS 2.4 des GENIE IIIs ähnliche Configuration (Common bei
0000h-3FFFH und Bank bei 4000H-FFFFH läßt sich mit 44H an CBAR ein-
stellen. Hier fallen die Untergrenzen von Common1 und Bank beide auf
die Adresse 4000H. Der Bank-Bereich existiert dann nicht, Common0 wird
als Common benutzt und Banking erfolgt mit Verschieben des Common1-
Bereichs im physikalischen Speicher.
Um eine dem 256K-(1MB-)Banker für Z80-Systeme ähnliche Konfiguration
vorzueben müßte (8H in CBAR eingetragen werden. Dann liegt die
Grenze zwischen den beiden existierenden Bereichen CommonO und Common1
be8000H. Das Banking erfolgt auch hier durch Verschieben von Common1
im physikalischen Adreßraum.
Adreßübersetzung
Common0, soweit es durch die Untergrene von Bank zugelassen ist, be-
ginnt hier an der physikalischen Adresse 00000H des 512K-Speichers.
Die Bereiche Bank und Common1 lassen sich in verschiedene Stellen in
den physikalischen Speicher legen. Die physikalische Adressen, bei der
diese Bereiche anfangen, lassen sich auch wieder in 4K-Schritten an
beliebiger Stelle festlegen und ändern. Dazu dienen die Ports BBR und
CBR. Die Bits 6-0 in diesen Registern geben den physikalischen Adreß-
-Offset vor, der bei Zugriff auf logische Adressen im Common1- bzw. im
Bank-Bereich zu den logischen Adressen addiert werden. D6-DO dieser
Ports legen die Adressen A18-A12 dieses Offsets fest.
CBR Common Base Register), Port 38H
Bit 7 6 5 4 3 2 1 O
Name - CB6 CB5 CB4 CB3 C82 CB1 CB0
Zugriff R/W R/W R/W R/W R/W R/W R/W
BBR (Bank Base Register), Port 39H
Bit 7 6 5 4 3 2 1 O
Name - BB6 BB5 BB4 BB3 BB2 BB1 BB0
Zugiff R/W R/W R/W R/W R/W R/W R/W
Nach einem RESET sind alle Bits in CBR und BBR low. In dieser Konfgu-
ration erfolgt bei Zugriff auf den Common1-Bereich und den Bank-
Bereich keine Adreßtranslation. Die logische Adresse ist gleichzeitig
auch die physikasische Adresse. A18-A16 werden stänig low ausgegeben.
Bei Zugriff auf eine logische Adresse im Bank-Bereich wird zu dieser
Adresse die in BBR für A18-A12 festgelegte Offset-Adresse addiert und
der Speicherzugriff erfolgt an der physikalischen Adresse, die die
Summe aus logischer Adresse und Offset ist. Das läßt sich an einem
Beispiel einfacher erklären.
Die MMU-Register seien folgendermaßen belegt:
CBAR: C4H BBR: 40H CBR: 00H
Damit (siehe obiges Beispiel für CBAR) liegt der Bank-Bereich logisch
bei 4000H-BFFFH. Der Adreß-Offset für logische Zugriffe auf den Bank-
Bereich beträgt 40000H. Wenn nun an der Adresse 9C84H, die im logi-
schen Bank-Bereich liegt, ein Byte gelesen oder abgelegt werden soll,
oder an diese Adresse gesprungen werden soll (im Programm), dann wird
tatsächlich die Adresse 49C84H ausgegeben.
logische Adresse 9C84H 1001 1100 1000 0100 B
Adreß-Offset 40000H 100 0000 0000 0000 0000 B
+ ------ + -------------------------
physik. Adresse 49C84H 100 1001 1100 1000 0100 B
mit 00H in CBR erfolgt bei Zuriff auf logische Adressen im Common1-
Bereich keine Addreßübersetzung (der Offset ist 00000H).Banking er-
folgt durch Ausgabe verschiedener Addreß-Offsets an das BBR-Register.
Durch die Auflösung in 4K-Schritte für die Vorgabe des Offets lassen
sich auch Banks einstellen, die sich mit anderen (vorher oder- nachher
eingestellten) Banks oder mit Common 1 überschneiden.
Speicher-Konfiguration bei +---------+ 7FFFFH Speichergrenze
CBAR : C4H | |
BBR : 40H | |
CBR : 00H +---------+ 4COOOH
| Bank |
| |
+---------+ 4C400H
| |
+---------+ 40000H Offset durch BBR
| |
| |
FFFFH +---------+ +---------+ OFFFFH
| Common1 | | Common1 | kein Offset in CBR
C000H +---------+ +---------+ 0C000H
| Bank | | |
| | | |
0000H +---------+ +---------+ 04000H
| | | Common0 |
+---------+----------------+---------+ 00000H Common0 beginnt
immer bei 00000h
logischer Adreßraum physkalischer Adreßraum
Um bei dieser (zugegeben etwas unsinnigen) Speicherkonfiguration den
512K-Adreßraum durch Banking des Bereichs 4000H-BFFFH sinnvoll aus-
zunutzen, kann fo1gende Speicheraufteilung in Banks angewandt werden:
Bank phys. Anfangs- Adreß-Offset Byte
Nr. u. End-adresse an BBR
------------------------------------------------
0 04000H 0BFFFH 00000H 00H
1 10000H 17FFFH 0C000H 0CH
2 18000H 1FFFFH 14000H 14H
3 20000H 27FFFH 1C000H 1CH
.... .... .... ...
13 70000H 77FFFH 6C000H 6CH
14 78000H 7FFFFH 74000H 74H
------------------------------------------------
Unter Aussparung des Cmonon0- und des Common1-Bereichs bei 00000H und
bei 0C000H mit je 16K Größe füllen die Banks lückenlos den physika-
lischen Speicher aus.
Es sind aber auch Einstellungen möglich, bei denen sich die Bereiche
von Banks oder einer Bank und einem Common-Bereich überschneiden. Wenn
für das Einschalten von Bank1 in obiger Tabelle anstelle von 0CH der
Wert 08H an BBR ausgegeben wird, liegt der physikalische Adreßbereich
der Bank bei 0C000H-13FFFH. Ein Zugriff auf den logischen Bereich
4000H-7FFFH bedeutet dann einen Zugriff auf den physikalischen Bereich
0C000H-0FFFFH, dies ist der Bereich von Common1. Die unterschied-
lichen logischen Adreßbereiche 3000H-7FFFH und C000H-FFFFH sin physi-
kalisch identisch. Die Programmierung der MMU des H64180 sollte also
nicht durch Ausprobieren sondern durch gründliches Überlegen der Wenns
und Abers erfolgen.
Den DMA-Controller interessieren die Einstellungen der MMU-Register
nicht, er arbeitet mit 19Bit-Speicheradressen, die direkt als physika-
lische Adressen ausgegeben werden.
Der neuere PLCC-Typ des HD4180 hat bei 68 Pins auch noch den Adreßpin
A19 herausgeführ. Dadurch erhalten dort die Bits D7 in BBR und CBR
(und auch die Bits D3 in den DMAC-Adreßregister-Zusatzbytes) die
Funktion, einen 1MB-Seicherraum adressieren zu können. Dort ist für
eine 1MB-Speicheradressierung keine zusätzliche Logik mehr nötig.
|