Hardware-Umschaltung für den Betrieb von CP/M
bei den Computern TRS80, GENIE I und II und Komtek 1

Helmut Bernhardt

Der Einsatz 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

Adressraum	normale Belegung	<>	Umschaltg. auf RAM
		F=	Funktion		F=	Funktion
0000-2FFF	0	read ROM	<>	 8	read RAM
		1	write ROM	<>	 9	write RAM
3000-35FF	2	read L-4	<>	10	read RAM
		3	write L-4	<>	11	write RAM
3600-37FF	4	r/w I/O		<>	12	r/w RAM
			(Floppy)
3800-3BFF	5	r/w Tastatur	<>	13	r/w RAM
3C00-3FFF       6	r/w Bildschirm	<>	14	r/w RAM
RESET des MBA	7 	per RESET-Knopf	<>	15	nicht 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-ROM	3000H - 35FFH
			Drucker/Floppy	3600H - 37FFH
	Verbdg. B-C:	Sonder-ROM	3000H - 37DFH
			Drucker/Floppy	37E0H - 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
-------------------------------------
 1	IRQ*(NC)	11	A9		21	+5V
 2	A0		12	A10		22	NMI*(SYSRES*)
 3	A1		13	A11		23	RESET*(SYSRES*)
 4	A2		14	A12		24	D3
 5	A3		15	A13		25	D2
 6	A4		16	A14		26	D1
 7	A5		17	A15		27	D0
 8	A6		18	MREQ*/NC)	28	GND
 9	A7		19	RD*(IN*)	29	PHANTOM*
10	A8		20	WR*(OUT*)	30	P0-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



