Hardware-Umschaltung für den Betrieb von CP/M

bei den Computern TRS80, GENIE I, II und Komtek 1

Helmut Bernhardt

Der Einsetz des Betriebssystems CP/M ist auf TRS80 und kompatiblen Computern nicht ohne weiteres möglich, weil im Adressbereich 0000H bis 3FFFH leider kein RAM vorliegt. CP/M fordert aber, daß nach dem Booten des Betriebssystems, wofür natürlich ab Adresse 0000H ein ROM mit einer Boot-Routine vorliegen muss, durch Software ab Adresse 0000H bis zur Obergrenze des Speicherausbaus RAM eingeschaltet werden kann, weil das BDOS die ersten 256 Bytes nutzt und die Anwenderprogramme ab Adresse 0100H im Speicher liegen.

Eine für den TRS80 angepaßte Version, bei der diese unteren Grenzen nach 4000H verschoben sind, fordert natürlich, daß auch die Anwenderprogramme um 16K im Speicher verschoben liegen und dort auch funktionieren. Solche angepassten Anwenderprogramme soll es sogar geben; für die Vielzahl der unter CP/M laufenden Programme entfällt aber die Nutzung unter diesem Not-CP/M.

Es gibt mehrere Möglichkeiten (die auch teilweise in verschiedenen Aufrüst-Sätzen für die verschiedenen Rechner realisiert und angeboten werden), wie die Umschaltung auf RAM im Bereich 0000H bis 3FFFH erreicht werden kann. Voraussetzung für alle diese Varianten ist allerdings das Vorhandensein von 64K RAM in Form von 4164-ICs auf dem CPU-Board, wie dies in den letzten Modellen des EACA-GENIE schon der Fall war. Diese Speichererweiterung läßt sich in allen o.a. Computern realisieren.

Bei einem unter dem Namen BIGMEM für den TRS80 angebotenen Aufrüstsatz erfolgt die Umschaltung auf CP/M-Fähigkeit durch den Befehl OUT 50H,40H, bei dem der Adressbereich 0000H bis 3FFFH mit dem Bereich C000H bis FFFFH ausgetauscht wird, d.h. ROM, Drucker, Tastatur und Video-RAM liegen am oberen Speicherende, und unterhalb der Adresse 4000H ist ausschließlich RAM vorhanden. Außerdem ist der ROM auch noch ausgeschaltet, sodaß der gesamte Bereich 0000H - F7DFH als RAM verfügbar ist und alle memory mapped I/O-Adressen darüber liegen. Es besteht auch die Möglichkeit, mit dem Befehl OUT 50H,00H nur den ROM gegen RAM auszutauschen und die memory mapped I/O-Adressen an ihrem alten Platz zu belassen. In dieser Konfiguration läßt sich ein ins RAM kopierter ROM-Inhalt beliebig ändern. Nachteilig ist bei BIGMEM, daß ein Zurückschalten aus einer umgeschalteten Konfiguration nur durch RESET* und NMI* möglich ist.

Eine andere Variante ist der EG64MBA für den GENIE. Damit lassen sich durch Ausgabe verschiedener Daten an den Port DFH einzelne Bereiche innerhalb der unteren 16K gegen RAM austauschen und durch einen anderen Portbefehl auch wieder rückgängig machen. Die Tabelle 1* zeigt die durch verschiedene Daten an den Port DFH erreichte Funktion.

Tabelle 1: Funktionen des EG64MBA

Adressraumnormale BelegungUmschaltg. auf RAM
F=FunktionF=Funktion
0000-2FFF0read ROM8read RAM
1write ROM9write RAM
3000-35FF2read L-410read RAM
3write L-411write RAM
3600-37FF4r/w I/O (Floppy)12r/w RAM
3800-3BFF5r/w Tastatur13r/w RAM
3C00-3FFF 6r/w Bildschirm14r/w RAM
RESET des MBA7per RESET-Knopf15nicht per Reset-Knopf

Lesen von Port DFH stellt die ursprüngliche Einstellung wieder her.
Adressraum in hexadezimaler Notation
L-4 ist der Zusatz-ROM (falls vorhanden)
I/O ist nur bei Anschluß von FC-Laufwerken belegt
(TRS-80-Druckeradresse, Floppycontroller, Uhr)

Ein für Anwender nicht unmaßgeblicher Vorteil gegenüber dem BIGMEM besteht darin, daß der EG64MBA einfach auf den Systembus-Stecker hinten am Gerät gesteckt wird (und den Bus auch wieder herausführt), während beim BIGMEM ein erheblicher Verdrahtungsaufwand notwendig ist, bei dem man auch Fehler machen kann.

Beide Aufrüstsätze zeichnen sich dadurch aus, daß dafür angepasste CP/M- Versionen angeboten werden, und daß für die Aufrüstsätze unverschämte Preise gefordert werden. Der Hardware-Freak vermißt auch eine Dokumentation der Schaltung und die Beschriftung der ICs.

Für diejenigen, denen die Einsicht in solche Investitionen fehlt und die stattdessen lieber ein bißchen mehr Arbeit mit dem Lötkolben übernehmen, sei im folgenden eine Schaltung beschrieben, die Features beider Schaltungen vereinigt:

  • aufsteckbar auf den Systembus bei allen 3 Computern
  • sämtliche Umschaltfunktionen des EG64MBA
  • die Verschiebung der unteren 16K an das obere Speicherende, wobei die EG64MBA-Funktionen dann dort wirken

Zusätzlich bestehen noch folgende Möglichkeiten:

  • Unter Verzicht auf die ICs 13-15 sind nur die Features des EG64MBA verfügbar.
  • Mit Jumpern läßt sich festlegen, ob der Sonder-ROM-Bereich bis 35FFH oder 37DFH reichen und der I/O-Umschaltbereich bei 3600H oder 37E0H beginnen soll (die zweite Variante ist bei GENIE oder Komtek nur dann interessant, wenn der Sonder-ROM voll decodiert ist).
  • Lesen des Ports DEH macht die BIGMEM-Funktion wieder rückgängig, ohne daß ein RESET* oder NMI* erfolgen muß.
  • In einem Rangierfeld läßt sich das Board an alle drei Computer anpassen.
  • Durch etwas zusätzlichen Verdrahtungsaufwand kan das Board auch am Bus des TRS80 betrieben werden, an dem die Signale IORQ*, MERQ*, RD* und WR* nicht vorhanden sind und stattdessen die Signale IN*, OUT*, MRD* und MRW* vorliegen und anstelle von RESET* und NMI* das daraus abgeleitete Signal SYSRES* bereitsteht.

In der einfachen Variante (nur EG64MBA-Features, nur ICs 1-12, 16) kann das Board beim GENIE wie der originale EG64MBA aufgesteckt werden und funktioniert ohne Änderungen auf dem CPU-Board. In der voll ausgebauten Version muß bei allen Rechnern auf dem CPU-Board anstelle des ursprünglichen Signals 0-16K* das Signal des Boards P0-16K'* verwendet werden. Wenn die dafür nötige Änderung durchgeführt wird, funktioniert der Rechner nur noch mit aufgestecktem Board. Mit einem Umschalter (zwischen den beiden Signalen) kann man sich aus dieser Misere herausmogeln.

Um das Signal P0-16K'* vom Board an das CPU-Board zu führen, kann bei GENIE und Komtek 1 ein unbenutzter Pin des Systembus-Steckers verwendet werden. Beim TRS80 ist eine zusätzliche Leitung nötig.

Funktionsprinzip des EG64MBA und dieses Board

Der GENIE weist auf dem Systembus-Stecker einen Eingang PHANTOM* auf. Wenn dieser Pin auf low gezogen wird, ist der sonst durch MERQ* freigegebene Adressdecoder IC 24 (74LS139) gesperrt. Das bei diesem IC an Pin 12 ausgegebene Signal 0-16K*, von dem alle anderen Freigabesignale in diesem Adressbereich abgeleitet werden, kann dann nicht mehr low aktiv werden, während die Freigabe des CAS*-Signals (durch das invertierte Signal 0-16K* (=16-64K*) dann auch im Adressbereich 0-16K gewährleistet ist.

Der EG64MBA übernimmt die Steuerung des PHANTOM*-Signals in Abhängigkeit von der jeweils auf dem Adressbus liegenden Speicheradresse und vom per OUT DFH,X eingestellten Zustand der Latch-Ausgänge.

Als Latch wurde hier (und wahrscheinlich auch im originalen EG64MBA) ein 74LS259 verwendet, über dessen Eingang A, B und C eines von 8 Ein-Bit-Latches selektiert wird, an dessen Ausgang anschießend der Pegel anliegt, der am Eingang DATA angelegen hat, als das letzte mal der Eingang E* low wurde.

Über einen low aktiven Impuls am Eingang CLEAR lassen sich alle 8 Latches auf low setzen.

An E* wurde das low aktive Freigabesignal OUT DFH* gelegt, während an CLEAR ein aus RESET*, IN DFH* und einem vom Zustand des Ausgangs D7 gesteuertem NMI* abgeleitetem Signal gelegt ist. Die Selektion des jeweiligen Latches wird durch Anlegen der Datenleitungen D0, D1 und D2 an die Eingänge A, B und C erreicht, während D3 an DATA gelegt den Zustand des durch E* freigegebenen Latch-Ausgangs bestimmt.

So läßt sich durch Ausgabe des Datenwortes, bei dem nur das untere Nibble signifikant ist, an den Port DFH ein durch die Pegel von D0 bis D2 adressiertes Latch mit dem Zustand von D3 laden.

Durch Lesen des Ports DFH, RESET* oder einen nicht per OUT (DFH),0FH gesperrten NMI* können alle Ausgänge auf low gesetzt werden.

Diese Ausgänge werden mit den jeweiligen high-aktiven Speicherbereichs- Freigabesignalen und bei den beiden ROM-Bereichen zusätzlich noch jeweils einmal mit RD* oder WR* NAND-verknüpft. Sie ergeben dann am Ausgang des jeweiligen NAND-Gatters ein low-aktives Signal, wenn eine in diesem Bereich liegende Speicheradresse auf dem Bus liegt, wenn der steuernde Latch-Ausgang high gesetzt ist und bei den ROM-Bereichen das Signal RD* bzw. WR* nicht aktiv ist.

Über AND-Verknüpfung aller NAND-Ausgänge wird das Signal PHANTOM* erhalten, das immer dann low wird, wenn ein NAND-Ausgang low wird.

Die zusätzliche BIGMEM-Funktion dieses Boards wird durch Invertieren der Adressen A14 und A15 zu A14' und A15' und der Herleitung eines 0-16K'*-Signals daraus erhalten. Ob die Adressen invertiert werden oder nicht, wird durch den Ausgang eines Flip Flop gesteuert, dessen Zustand wiederum durch die decodierten Portsignale IN DEH*, OUT DEH*, RESET* und NMI* bestimmt wird.

Durch RESET*, NMI* und IN DEH wird das Flip Flop so eingestellt, daß die Adressen über die XOR-Gatter nicht invertiert werden. OUT DEH* kippt das Flip Flop um, so daß die Adressen invertiert werden.

Um den beim TRS80 und Komtek 1 gegebenen Voraussetzungen (kein PHANTOM*-Eingang auf dem Bus) Rechnung zu tragen, wurden nun auch beim GENIE nicht die Signale A14' und A15' an den Adressdecoder geführt, der das Signal 0-16K* herleitet. Es wurde auf dem Board ein Signal 0-16K'* aus A14', A15' und MREQ* hergeleitet und mit dem Signal PHANTOM* verknüpft. Dieses dabei erhaltene Signal P0-16K'* muß nun auf dem CPU-Board anstelle des urspünglichen Signals 0-16K* verwendet werden.

Auswahl der Funktionen des Boards über Drahtbrücken und Jumper

Grundversion, nur EG64MBA-Funktionen:
(die ICs 13 bis 15 brauchen nicht bestückt zu werden)

  • Punkte neben IC 7: N mit M verbinden
  • Punkte unterhalb IC 9: T mit V und U mit W verbinden
  • H (über IC 7) mit H' über IC 9 verbinden

Erweiterte Version, EG64MBA- und BIGMEM-Funktionen
(ICs 13 bis 15 müssen bestückt werden)

  • Punkte neben IC 7: M mit O verbinden
  • Punkte unterhalb IC 9: folgende Verbindungen mit den Punkten unter IC 15 herstellen: T mit T', U mit U', V mit V', W mit W'
  • Anstelle von H (über IC 7) wird J (über IC 7) mit H' verbunden
  • Punkt X (neben IC 3) und Y (neben IC 15) miteinander verbinden

Allgemeine Drahtbrücken und Jumper für alle Rechner

Zwischen den unteren beiden IC-Reihen müssen folgende Punkte verbunden werden:
1 mit 1', 2 mit 2', 3 mit 3', 4 mit 4', 5 mit 5', 6 mit 6'

Zwischen IC 1 und IC 2 kann durch Wahl der Verbindung A-C oder B-C die Einteilung der Größe der umschaltbaren Bereiche des Sonder-ROMs und des Drucker/Floppy-Bereichs eingestellt werden:

Verbdg. A-C:Sonder-ROM3000H - 35FFH
Drucker/Floppy3600H - 37FFH
Verbdg. B-C:Sonder-ROM3000H - 37DFH
Drucker/Floppy37E0H - 37FFH

Die Variante B-C hat bei GENIE und Komtek nur dann Sinn, wenn der Sonder-ROM nachträglich voll decodiert wurde und beim Komtek die Druckerschnittstelle (8255 auf den Adressen 36X0H - 36X3H) geändert wurde. Anstelle einer festen Einstellung durch Jumper kann auch ein Umschalter eingesetzt werden.

Bei GENIE und Komtek werden außerdem noch die Verbindungen F-F', G-G', S-O, Q-R, P-P' hergestellt; die Punkte D und E werden nicht miteinander verbunden.

Änderungen für den Anschluß an den TRS80

  1. Die Drahtbrücken S-Q und Q-R werden nicht gelegt.
  2. Die Leiterbahn von Pin 5 von IC 9 zu Pin 4 von IC 4 wird durchtrennt.
  3. Die Drahtbrücken F-F', G-G', und P-P' werden nicht gelegt.
  4. Die Punkte D und E neben IC 1 werden miteinander verbunden.
  5. Die Punkte S und R werden miteinander verbunden.
  6. Anstelle von RD* und WR* werden IN* und OUT* an die Anschlußleiste des Boards geführt.
  7. Das Signal MRD* des Systembus wird an Pin 2 von IC 5 und Pin 4 von IC 10 geführt.
  8. Das Signal MWR* wird an Pin 4 von IC 4 und Pin 5 von IC 10 gelegt.
  9. Pin 6 von IC 10 wird mit Pin 9 von IC 9 verbunden.
  10. Das Signal SYSRES* des Systembus wird an die Anschlußpunkte RESET* und NMI* und Punkt P' oberhalb von IC 16 geführt. Damit besteht dann nicht die Möglichkeit, das Zurückschalten in den Ausgangszustand durch NMI* per OUT (DFH),0FH zu unterbinden.
    Wenn dies gewünscht wird, müssen die Signale RESET* und NMI* anstelle von SYSRES* über Drahtverbindungen von den Pins 26 und 17 des Z80 an die entsprechenden Punkte auf der Anschlußleiste geführt werden. SYSRES* muß muß weiterhin an Punkt P' geführt werden (das berührt nicht die unter den Punkten 3), 7) und 9) getroffenen Aussagen).

Berücksichtigung bestimmter Systemkomponenten

Bei Vorhandensein eines Original-Expansion-Interface bei TRS80 und GENIE (EG 3014) müssen (in der voll ausgebauten Version dieses Switchboards) zum Expasion- Interface die Signale A14' und A15' anstelle von A14 und A15 geführt werden. Das Gleiche gilt auch für GENIE-Floppy-Laufwerke, die über den 50poligen Systembus angeschlossen sind (Controller im Laufwerksgehäuse).

Außerdem hat das Signal PHANTOM* bei der Adreßdecodierung des Drucker/Floppy- Bereichs bei diesen Interfaces keinen Einfluß. Um auch hier ein Ausblenden des I/O-Bereichs 37E0h-37FFH zu ermöglichen, müssen anstelle der Signale MREQ* beim GENIE bzw. MWR* und MRD* beim TRS80 die mit D7 (Pin 9 des 74LS259) OR-verknüpften Signale an das Expansion-Interface bzw. den Floppy-Controller im Laufwerksgehäuse weitergeleitet werden.

Dafür können die noch freien OR-Gatter in IC 16, 74LS32, Pins 4, 5 und 6 sowie Pins 10, 9 und 8 verwendet werden. Die Änderung muß über freie Verdrahtung auf der Lötseite erfolgen.

Bei Verwendung eines EXP1-Interface von RB-Elektronik in allen 3 Rechnern oder beim Komtek-Floppy-Interface (dessen RAMs wegen der 4164-RAMs auf dem CPU-Board nicht bestückt sein dürfen) sind keine zusätzlichen Maßnahmen erforderlich.

Änderungen auf dem CPU-Board

Um im Bedarfsfall auch ohne dieses Board arbeiten zu können, ist es sinnvoll, zwischen den Signalen 0-16K* vom CPU-Board und P0-16K'* auf diesem Board umschalten zu können. Dafür wird an den Mittelanschluß eines Umschalters die abgetrennte Leitung gelegt, an die vorher das Signal 0-16K* gelangte, während an die beiden äußeren Anschlüsse die Signale 0-16K* und P0-16K'* gelegt werden.

Beim GENIE liegt 0-16K* an Pin 12 von Z 25 (74LS139) und beim Komtek 1 an Pin 4 von IC 53 (74LS139).

Der TRS80 kommt dagegen ohne ein Signal 0-16K* aus. Erst bei der Umrüstung auf 64K RAM auf dem CPU-Board wird ein solches Signal erzeugt. Damit TRS80-Anwender dieses Board auch nutzen können, wird zum Schluß noch kurz der Umbau auf 64K auf dem CPU-Board beschrieben.

Umrüsten des TRS80 auf 64K RAM auf dem CPU-Board

  1. Die Pins 1, 8 und 9 aller RAMs (Z14-Z20) von den Versorgungsspannungen +12V, -5V und +5V abtrennen.
  2. +5V an die Pins 8 aller RAMs legen.
  3. Alle Kondensatoren die an einer der die Pins 1 oder 9 verbindenden Leitungen liegt, auslöten.
  4. A14 (Z38, 74LS367, Pin 11) an Pin 14 von Z51, 74LS157 legen.
  5. A15 (Z38, 74LS367, Pin 9) an Pin 13 von Z51, 74LS157 legen.
  6. Pin 12 von Z51, 74LS157 mit den Pins 9 der RAMs verbinden.
  7. Die Leiterbahn von/zu folgenden Pins durchtrennen:
    Z21, 74LS156, Pins 2 und 14 sowie 1 und 15; Z73, 74LS32, Pin 5
  8. Folgende Pins miteinander verbinden:
    Pin 5 von Z73, 74LS32 mit Pin 11 von Z38, 74LS367: A15 Pin 6 von Z73, 74LS32 mit Pins 1 und 15 von Z21, 74LS156: 0-16K* Pin 14 von Z68, 74LS367 mit Pins 2 und 14 von Z21, 74LS156: RAS*
  9. Im Jumperfeld X3 müssen folgende Positionen miteinander verbunden sein: 2-15, 3-14, 4-13, 5-12, 6-11, 7-10, 8-9
  10. Im Jumperfeld X71 müssen nur die Brücken 1-16, 3-14 und 5-12 gesetzt sein.
  11. Im TRS80 Expasion-Interface muß die Verbindung zwischen Pin 6 von Z28, 74LS00 und Pin 19 von Z31, 74LS244 durchtrennt werden.

Belegung der 30poligen Anschlußleiste

1IRQ*(NC)11A921+5V
2A012A1022NMI*(SYSRES*)
3A113A1123RESET*(SYSRES*)
4A214A1224D3
5A315A1325D2
6A416A1426D1
7A517A1527D0
8A618MREQ*/NC)28GND
9A719RD*(IN*)29PHANTOM*
10A820WR*(OUT*)30P0-16K'*

Stückliste

1 Platine
1 50-(bei TRS80 40-) poliger Platinenrandstecker als Apple-Slot im Handel
1 Gegenstück zum Apple-Slot (beidseitig zu ätzen)
1 10µ/16V Elco
2 µ1 Keramik Kondensatoren
1 74LS159
1 74LS139
1 74LS86
1 74LS32
1 74LS11
2 74LS10
2 74LS08
1 73LS02
3 74LS00