★ APPLICATIONS ★ PROGRAMMATION ★ RAM ★ FUNKTIONSWEISE UND STEUERUNG ★![]() |
Vortex Speichemuteiterimaen (Schneider Aktiv) | Applications Programmation |
Nutzung der zweiten 64 kByte beim CPC 6128 Der RAM Speicher auf der vortex Speichererweiterung (dieser wird der Einfachheit halber von nun an als externer RAM bezeichnet) kann direkt in den Adressbereich der Z80 CPU des CPC's eingeblendet werden. Da die Z80 nun aber, wie die meisten 8 Bit Microprozessoren, nur einen 16 Bit breiten Adressbus besitzt und daher immer nur 64KB direkt adressieren kann, ist der insgesamt verfügbare RAM (128...576KB) nicht gleichzeitig ansprechbar, sondern immer nur in Portionen von 64KB oder weniger. Dieses Verfahren, Speicher - die denselben Adressraum belegen -kontrolliert dem Gesamtsystem zuzuschalten wird als Mapping oder Bank Switching bezeichnet und muß immer dann eingesetzt werden, wenn der Adressraum der CPU kleiner als der Gesamtspeicher ist. Übrigens wird dieses Verfahren in allen CPC's bereits auch ohne RAM Erweiterung schon eingesetzt, belegt doch z.B. das BASIC ROM dieselben Adressen wie der Bildspeicher. Selbstverständlich können Bildspeicher und BASIC ROM nicht gleichzeitig angesprochen werden -dies würde unweigerlich zu einem Buskonflikt auf dem Datenbus führen - und so sorgt das Gate Array über zusätzliche Steuerleitungen und über einen Konfigurationsport (7Fxx) dafür, daß immer nur einer der möglichen Speicher angesprochen wird. Also hier z.B. nur Bildspeicher oder nur BASIC ROM. Wie man also leicht einsieht, reicht die bloße Adresse nicht mehr aus, um eine bestimmte Speicherzelle in einem bestimmten Speicher anzusprechen. Der externe RAM auf der(den) vortex Karte(n) nun kann in 32KB Blöcken in den Adressraum der Z80 eingeblendet werden, (siehe Abbildung). Die Steuerung erfolgt hierbei über zwei Ports:
(1) Bankselect: FBBDH Die Speichererweiterung besitzt ein Bankselect-Register, in das nur geschrieben werden kann. Das Bankselect Register hat mit dem eigentlichen Speicherzugriff noch nichts zu tun, sondern dient lediglich zur Erweiterung des Adressraums der Z80. Es besitzt darüber hinaus noch gewisse "Schalter", um z.B. die ganze Karte erst einmal zu aktivieren. Die einzelnen Bits des Bankselect Registers haben folgende Bedeutung:
Normalerweise benötigt man lediglich Bit 0-2 und 5 beim Arbeiten mit der Karte. Bit 3 und 4 sind für spezielle Anwendungen vorgesehen und führen bei unsachgemäßer Benutzung unweigerlich zum "Absturz" des ganzen Rechners. Der Port 7FxxH ist in allen CPC's für die Steuerung des Gate Arrays belegt und erfüllt dabei sehr viele Aufgaben. Diese reichen von der Farbwahl über den Bildschirmmode bis zur ROM Konfiguration d.h., bereits schon das Gate Array übernimmt gewisse Funktionen des Speichermappings (siehe oben). Gewisse Bits des Ports werden vom Gate Array nicht benutzt und werden daher für die Steuerung der RAM Erweiterung eingesetzt.
Definition: Die Z80 CPU besitzt einen Steuereingang über den es von "außen" möglich ist, den normalen Programmablauf zu unterbrechen, um spezielle Programme durchzuführen. Alle CPC's "leben" vom Interrupt. Diese etwas laxe Aussage soll zum Ausdruck bringen, * daß alle wesentlichen Steuerfunktionen der CPC's über den Interrupt abgewickelt werden. Einzige Interruptquelle im CPC ohne Peripherie ist das Gate Array. Dieses fordert 300 Mal in der Sekunde einen Interrupt bei der Z80 an. Würde nun das Betriebssystem alle diese Interrupts ohne weitere Wertung bedienen, so wäre der Rechner hoffnungslos "verstopft" und nur noch damit beschäftigt, Interrupts zu versorgen. Aus diesem Grunde unterstützt das Betriebssystem eine Prioritäts- und Warteschlangen- (qeues) Struktur, die den Programmdurchsatz der Maschine nur unwesentlich verringert, (siehe hierzu auch Firmware Handbuch zum CPC 464). Die Z80 CPU kann in drei verschiedenen Interruptmodi betrieben werden: IM 0, IM 1 und IM 2. Diese unterscheiden sich durch die Art und Weise, wie die Z80 auf eine Interruptanforderung reagiert. In den CPC's wird der Interruptmode 1 (IM 1) eingesetzt - dies ist zwar die unflexibelste Interrupt Methode der Z80, setzt aber auf der anderen Seite auch nur die minimalsten Anforderungen an die Hardware voraus. Akzeptiert die Z80 im CPC einen Interrupt, so wird das augenblicklich ablaufende Mikroprogramm unterbrochen und der Ablauf verzweigt zur Adresse 0038H. Hier steht nun ein Zeiger auf die entsprechende Routine, die den Interrupt behandeln soll. Dieser Zeiger nun, darf nicht unkontrolliert verändert werden, da der Rechner sonst augenblicklich "abstürzt". Dies ist ein Sachverhalt, den man immer im Auge behalten muß, wenn man selbst direkt mit der Karte arbeiten möchte, d.h. wenn man nicht auf die Software (BOS und CP/M Patch) zurückgreift, die mit der Karte ausgeliefert wird. So muß man unbedingt darauf achten, daß beim An- oder Abschalten von Speicherblöcken (oben oder unten) der Interrupt abgeschaltet (DI) wird und hinterher auch nicht ins "Leere" geht. Setzt man die Speichererweiterung als bloßen Datenspeicher ein (d.h. das Programm läuft nie im externen RAM), so ist die Steuerung der Karte relativ einfach. Möchte man jedoch den Programmspeicher erweitern, wie dies z.B. unter CP/M der Fall ist, so muß man wesentlich sorgfältiger vorgehen und immer darauf achten, daß der Interrupt immer den "richtigen Weg” geht. BEISPIELE: Im Folgenden finden Sie einige einfache Maschinenprogramme, die die Programmierung der vortex Speichererweiterungen verdeutlichen und hierbei allerdings lediglich den Charakter von Anregungen haben sollen. Es wird kein Anspruch auf Vollständigkeit erhoben. 1. Datenspeicherung in einem unteren Block (0000H...7FFFH): Das Steuerprogramm und der Stack müssen (!!!) oberhalb von 7FFFh liegen, da der untere Block beim Aktivieren des externen Speichers "weggemapt" wird und somit andernfalls Programm und/oder Stack verloren gingen, was unweigerlich zum Absturz führt. Aufgabe: Übertrage einen Datenblock aus dem Buffer BUFF in den unteren Block von Bank 0 zur Adresse 0. (Der Buffer muß natürlich auch oberhalb 8000H liegen!) SELECT EQU OFBBDH ; BANKSELECT PORT DER KARTE |
| ![]() |
|