Kopplung des Rechners KC87 an den Parallelport eines PCs über das PIO-Interface
Vorbemerkung: Der mitgelieferte HTML-Text wurde an die Form der hier angebotenen Webseiten angepaßt.
0. Gliederung
1. Das Anliegen der Kopplung
2. PIO-Interface am KC87 , Pinbelegung des Steckverbinders , Betriebsmodi, Programmierung
3. Parallelport des PC , Pinbelegung des Steckverbinders , Programmierung des Parallelports
4. Kabelverdrahtung am Parallelport-Stecker
5. Inbetriebnahme, Test der Kopplung
6. PC- Grundprogramme zur Kommunikation mit dem KC87
7. Festlegung der Kommunikation zwischen KC87 und PC als Server
8. Das KC87-Programm zur Kommunikation mit dem PC als Server
9. Erweiterungsmöglichkeiten
1. Das Anliegen der Kopplung
Die Rechner der KC-Typen sind bei Sammlern beliebt und begehrt.
Hier ist die Kopplung eines KC87 mit einem PC über das verfügbare parallele Z80-PIO-Interface beschrieben.
Wer keine zugehörige Peripherie der damaligen Kategorie besitzt oder wenig damit arbeiten möchte/kann, kann mit einem
Kabel einen PC anschließen und damit einen Fileserver usw. damit realisieren.
Mit einem KC87 kann man vom/zum PC Programme und Daten übertragen und Dateien anlegen/übertragen.
2. PIO-Interface am KC87
Das Manual dazu liegt hier.
Pinbelegung des Steckverbinders lt. Bedienungsanleitung...,Anhang 2 :
( - bedeutet: Signal hier nicht benutzt. )
Betriebsmodi, Programmierung
Mit den verfügbaren Signalen sind Byteeingabe, Byteausgabe und Bit-Operationen möglich.
Die Auswahl des Modus für die Kopplung ist durch folgende Prämissen geprägt:
a.) Die Bedienschritte nach dem Einschalten des KC87 sollen minimal sein, im einfachsten Fall steht kein
Magnetbandgerät zur Verfügung.
b.) Die Befehlsabfolge zur Kommunikation soll minimal sein.
c.) Keine Bedienerhandlungen am PC
d.) Die Kommunikation muß kollisionsfrei erfolgen.
Zeitaufwand spielt hier bei der Kommunikation bewußt keine Rolle.
Variante 1 (hier im folgenden beschrieben) :
Es werden für die Kopplung sowohl der Betriebsmodus Byteausgabe als auch der Betriebsmodus Byteeingabe benutzt.
Vorteil: Es lassen sich a.) und b.) einigermassen einrichten.
Folgende Nachteile des KC-Userinterface sind hier zu beachten und betreffen c.) und d.) :
- Es steht kein Reset-Signal für den PC zur Verfügung.
- Es steht kein Signal für die Daten-Richtung für den PC zur Verfügung
Variante 2 (wird extra später getestet) :
Für die Kopplung wird der Bit-Modus benutzt.
Vorteil: Es läßt sich ein vollkommener Handshake-Betrieb mit Richtungs-Signal und Reset-Signal realisieren,
betrifft c.) und d.)
Nachteil: Serialisierung der Daten, damit hoher KC-Programmaufwand bzw. viele Anfangs-Bedienschritte, betrifft a.) und b.)
Es wird im weiteren nur die Variante 1 ausgeführt.
Im einfachsten Fall wird die PIO für unsere Zwecke mit BASIC-Befehlen angesprochen. Diese sind:
Bedeutung:
x Ausdruck mit dem Wert 0...255
3. Parallelport des PCs
Am PC wird der Parallelport, an dem sonst ein Drucker angeschlossen ist, im "bidirektionalen" Betrieb benutzt.
Dazu muß im PC-Setup-Programm beim Menüpunkt des Parallelinterfaces der Betriebsmodus "EPP" eingestellt
sein.
Pinbelegung des PC-Steckverbinders
Es werden im folgenden die Pins der 25-poligen Buchse des Parallelports und des 25-poligen Steckers am Kabel mit
P1 , P2 , P3 ...... bis P25 bezeichnet. Die sonst üblicherweise angegeben Namen für den Druckeranschluß
werden nicht verwendet, weil diese für diesen Fall keine Bedeutungen haben.
Programmierung des Parallelports
Die Programmierung des PC-Parallelports ist in vielen Fallen im Internet und Büchern beschrieben, leider manchmal
etwas diffus und ungenau, weshalb hier eine Zusammenfassung für unseren Fall vorgenommen wird.
Es wird der Fall des 1. Parallelports im PC angenommen.
Die Programmierung geschieht über folgende Ports/IO-Adressen:
Die Zuordnung der Bits dieser Register zu den Pins am Steckverbinder ist für diese Kopplung wie folgt festgelegt,
wobei bedeutet:
Pnn eine 1 entspricht High-Pegel ,
eine 0 entspricht Low-Pegel am Steckverbinder.
/Pnn eine 1 entspricht Low -Pegel ,
eine 0 entspricht High-Pegel am Steckverbinder,
d.h. hier ist ein Negator auf dem Mainboard/der Interfacekarte dazwischengeschaltet.
x Das Bit darf nicht verändert werden .
y Das Bit wird/kann programmiert (werden), Es gibt dazu keinen
Kabelanschluß.
- Wird hier nicht benutzt.
Die hier angegebenen Signalnamen sind der Kopplung PC-KC87 entsprechend festgelegt und entsprechen den Signalnamen
des PIO-Interfaces.
Bedeutung:
Bit0 bis Bit7 = B0 bis B7 sind die Datenbits des PIO-Interfaces.
Bedeutung:
Bit6 teilt vom KC87 folgendes mit:
Bei Ausgabe aus dem KC87:
Bit6 = 1
entspricht BRDY = high, die Datenbits sind gültig
Bit6 = 0 entspricht BRDY = low , Grundzustand
Bei Eingabe in den KC87:
Bit6 = 1 entspricht BRDY = high, d.h. der PC soll die Datenbits belegen
Bit6 = 0 entspricht BRDY = low , Grundzustand
Bedeutung:
Bit5 = BIDI legt PC-seitig die Richtung des Datentransportes für das Register 378H fest. Es gilt:
Bit5 = BIDI = 0 Ausgabe aus dem PC zum KC87, es kann auf 378H geschrieben werden
Bit5 = BIDI = 1 Eingabe in den PC vom KC87, es kann
von 378H gelesen werden
Bit1 teilt dem KC87 folgendes mit:
Bei Eingabe in den PC
Bit1 = 0
liefert dem KC87 BSTB = high, Grundzustand bei Eingabe in den PC
Bit1
= 1 liefert dem KC87 BSTB = low , die Daten wurden gerade übernommen
Bei Ausgabe aus dem PC
Bit1 = 0 liefert dem KC87 BSTB = high,
Grundzustand bei Ausgabe aus dem PC
Bit1 = 1 liefert dem KC87 BSTB = low , die Datenbits sind gültig
4. Kabelverdrahtung am Parallelport-Stecker
Entsprechend obiger Festlegungen ist das Kabel wie folgt zu beschalten:
Anmerkung a:
Diese +5V könnten an einen der freien Eingänge des Parallelports so geschaltet werden, daß der PC testen kann,
ob der KC87 eingeschaltet ist.
Hinzu kommt, daß dem PC kein RESET-Signal des KC87 zur Verfügung steht. Es bestünde zumindest mit Nutzung der
+5V die Möglichkeit, durch Aus- und Einschalten des KC87 das PC-Serverprogramm, das i.A. ohne PC-Bedienerhandlungen
arbeiten soll, zu synchronisieren.
5. Inbetriebnahme, Test der Kopplung
Es ist generell darauf zu achten, daß die Eingabe-/Ausgabe-Operationen beider Partner genau aufeinander abgestimmt
erfolgen müssen, nie sollten beide eine Ausgabe gleichzeitig betreiben.
(Bemerkung: Bevor man das Verbindungskabel herstellt, kann man mit 4 Leitungen wenigstens ein Daten-Bit zum Test
verwenden.)
Die Inbetriebnahme der Kopplung und der Funktionstest geschieht mit möglichst einfachen Mitteln, z.B. unter MS-DOS mit
dem Low-Level-Debugger DEBUG.EXE. Aufgrund der Handshake-Methode kann man 'statisch' arbeiten und sich
bei der Eingabe der Kommandos sehr viel Zeit lassen.
Man startet am PC das Programm mit
DEBUG
Eine Übersicht der Kommandos erhält man durch Eingabe von DEBUG ?. Es werden nur die Kommandos
'I' und 'O' benötigt.
Im Internet ist mehrfach das Manual zur Z80-PIO-Programmierung zu bekommen.
Für die Durchführung des Handshakeverfahrens sollte man die Diagramme im Manual verwenden.
Am KC87 ist der Datenport über die Adresse 137 (89H) und der Steuerport über die Adresse 139 (8BH) zu erreichen.
5.1. Test der Übertragung vom KC87 zum PC
Am PC kontrolliert man das Bit BIDI , ob es auf 'Eingabe' gestellt ist:
I 37A
(Bemerkung: Achtung , DEBUG erwartet Hexzahlen ohne das angehängte 'H', siehe "Steuerung des Parallelports"
unter 3.)
In der ausgegebenen Zahl muß das Bit5 gesetzt sein. Sollte dies nicht der Fall sein, muß die ausgegebene Zahl um das
Bit5 ergänzt (xxx) wieder ausgegeben werden (danach kontrollieren!):
O 37A xxx
Nun wird dem KC87 durch den PC über Port 37AH das Signal BSTB=high, entspricht Bit1=0 als Grundzustand mitgeteilt.
Am KC87 muß zuerst Port B für die Ausgabe zugelassen werden, weil nach dem Einschalten dieser auf Eingabe eingestellt ist.
Man gibt durch direkte Tastatureingabe am KC87 das folgende Kommando ein:
OUT 139, 15
Man prüfe am PC, ob der Grundzustand von BRDY=low , also Bit6=0 ist, durch das Kommando
I 379
Jetzt, wenn dies stimmt, kann man am KC87 ein Zeichen z.B. 'A' ausgeben, durch das Kommando:
OUT 137,41
Nun prüft man am PC, ob das Signal BRDY=high ist, das ist in Port 379H, Bit6=1 :
Man gibt am PC das folgende Kommando ein:
I 379
Wenn in der ausgegebenen Zahl zu sehen ist, daß Bit6=1 ist, kann man das Datenbyte am PC einlesen:
I 378
Die angezeigte Zahl muß:
41
lauten, der Hex-Code für das Zeichen 'A' .
Die Übernahme des Zeichens bestätigt man am PC durch BSTB=low, das ist Port 37AH, Bit1=1. Nun prüft man (ggf.
wiederholt, kommt aber praktisch im Handbetrieb nicht vor) am PC, ob der KC87 das Signal BRDY=low gesetzt hat, das ist in Port
379H, Bit6=0.
Ist dies der Fall, so setzt man am PC das Signal BSTB=high, das ist Port 37AH, Bit1=0. Damit ist der volle Handshake-Zyklus
abgeschlossen.
5.2. Test der Übertragung vom PC zum KC87
Zuerst ist der KC-PIO-Port auf Eingabe zu stellen:
OUT 139, 79
Am PC kontrolliert man das Bit BIDI , ob es auf 'Ausgabe' gestellt und gleichzeitig das Signal BSTB=high eingestellt ist:
I 37A
In der ausgegebenen Zahl muß das Bit5=0 und das Bit1=0 sein. Sollte dies nicht der Fall sein, muß die ausgegebene
Zahl ggf. um das Bit5=0 und Bit1=0 geändert (xxx) wieder ausgegeben werden (danach kontrollieren!):
O 37A xxx
Nun wird der KC87 auf die Eingabe eines Zeichens durch folgendes Kommando eingestellt:
X=INP(137)
Am PC muß nun geprüft werden, ob das Signal BRDY=high gestellt wurde, das ist Port 379H, Bit6=1. Ist dies der Fall,
kann man am PC eine Zahl, z.B. 42 ( hexadezimaler Code für das Zeichen 'B') ausgeben:
O 378 42
Die Gültigkeit des Datenbytes wird dem KC87 durch BSTB=low, Port 37A, Bit1=1 angezeigt. Anschließend muß vom
PC wieder das Signal BSTB=high also Port 37A, Bit1=0 gesetzt werden ( Zeitdifferenz im Programm noch feststellen!).
Der KC87 hat das Byte eingelesen, wenn BRDY=low, Port 379H, Bit6=0 gesetzt wurde. Damit ist der volle Handshake-Zyklus abgeschlossen.
Nun kann man sich am KC87 anzeigen lassen, was eingelesen wurde:
PRINT X
Auf dem Bildschirm muß die Zahl
66 (Code für B) erscheinen.
6. PC-Grundprogramme zur Kommunikation mit dem KC87
Die Realisierung der Kommunikation wird durch Programmierung auf der Basis des Betriebssystems Linux durchgeführt. Für
MSDOS kann man die gleichen Programmquellen vereinfacht verwenden. Eine Windows-Programmierung ist möglich, wird hier nicht gezeigt.
Es wurden dabei Grundprogramme erstellt, die z.B. bei Skript-Programmierung zu komplexen Abläufen verwendet werden können.
Weil Eingabe-/Ausgabe-Ports programmiert werden, laufen die Programme nur mit root-Rechten.
Diese Grundprogramme sind:
Als Antwort liefern alle Programme den Statuswert nach der Operation.
Die Ausführung und Beschreibung ist den ANSI-C Quelldateien:
zu entnehmen.
7. Festlegung der Kommunikation zwischen KC87 und PC als Server
Der PC soll als Server dienen und nur auf Anforderung durch den KC87 tätig werden. Deshalb muß die Kommunikation
des PC im Grundzustand 'Eingabe-Modus' starten und danach kann der KC87 Anforderungen stellen. Der PC sollte immer so schnell wie
möglich in den 'Eingabe-Modus' übergehen.
Als Basisverzeichnis wird hier
root/pc-kc87
verwendet, was aber für andere Fälle nicht zwingend ist. Alle anderen Pfadangaben erfolgen dazu relativ. Es gibt für
die Kommunikation folgende Kommandozeichenketten und deren Reihenfolge bei der Kommunikation:
7.1. Anfordern des Namens für ein Verzeichnis, rekursiv :
KC87 sendet:
C (rel.Pfad)
PC sendet:
"(mit 'ls' erzeugte Zeilen)"
"..." als Ende
Es werden nur Zeichenketten, abgeschlossen durch LF (Code 0AH) empfangen bzw. gesendet. Sollte das Zeichen CR (Code 0DH) auftreten,
wird es vom Empfänger ignoriert. Als Ende fungiert hier die Zeichenkette "..." (3 Punkte). Sollte das angegebene
Verzeichnis relativ zum Basis-Verzeichnis im PC nicht vorhanden sein, so wird es neu erstellt.
Bemerkung: Wenn als relativer Pfad eine leere Zeichenkette angegeben wird, so wird das Basisverzeichnis verwendet.
7.2. Einstellen des Datei-Verzeichnisses im PC relativ zum Basisverzeichnis für nachfolgende Datei-Operationen 'G'et
und 'P'ut :
KC87 sendet:
D (rel.Pfad)
Hier ist kein Endestring vorhanden.
Der PC sendet nichts.
Sollte das angegebene Verzeichnis relativ zum Basis-Verzeichnis nicht vorhanden sein, so wird es neu erstellt.
7.3. Ausgabe einer codierten BASIC-Datei vom PC auf den KC87
KC87 sendet:
G (dateiname)
PC sendet:
(Inhalt der codierten BASIC-Datei)
Bemerkung: dateiname ist der Dateiname einschließlich Erweiterung.
Die codierte BASIC-Datei ist eine Binärdatei und enthält neben der Byteanzahl den Speicherabzug des BASIC-Programmbereiches
im KC87 ab Speicheradresse 400H. Dieser Bereich endet, wenn 3-mal das Null-Byte auftritt.
Die Datei hat folgenden Aufbau (LP=Low Part und HP=High Part):
1. Byte: LP(Anzahl der Bytes des Speicherabzuges)
2. Byte: HP(Anzahl der Bytes des Speicherabzuges)
... alle Bytes des Speicherabzuges ...
[ Später erweitert:
Es wird, wenn keine codierte Datei existiert, nach einer gleichnamigen Datei mit der zusätzlichen Endung '.bas' gesucht,
welches die normale BASIC-Quellcode-Darstellung enthält. Existiert diese, so wird sie in eine codierte Datei gewandelt und
gesendet. ]
7.4. Eingabe einer codierten BASIC-Datei vom KC87 in den PC
KC87 sendet:
P (filename)
danach sendet der KC87:
(Inhalt des codierten BASIC-Files)
[ Später erweitert:
Es wird nach Abschluß der Datei-Übertragung eine Datei mit der zusätzlichen Endung '.bas' mit dem
normalen BASIC-Quellcode im PC erzeugt. ]
7.5. Zeilen einer Text-Datendatei als Zeichenkette vom PC auf den KC87 übertragen
KC87 sendet:
A (dateiname)
PC sendet:
"(Zeilen der Datei)"
"..." als Ende
7.6. Zeichenketten mit Text/Daten vom KC87 auf den PC übertragen und in einer Datei ablegen
KC87 sendet:
S (dateiname)"
"(Zeichenketten)"
"..." als ende
Das auf dem PC verwendete Server-Programm ist ein bash-Skript, als zyklisch arbeitendes Programm ohne Bedienerhandlung
mit dem Namen
pc-kc87-fileserver
Das Programm läuft wegen der Portzugriffe nur mit einem root-Recht und am besten ständig im Hintergrund. Dazu
gehört die Datei
pc-kc87.src
Eine im Arbeitsverzeichnis '/root/pc-kc87' existierende Datei mit dem Namen
fende.txt
mit beliebigen Inhalt beendet das Server-Programm regulär.
8. Die Kommandos/Befehle des KC87 zur Kommunikation mit dem PC als Server
Es gibt z.B. folgende Möglichkeiten, die Kommunikation ablaufen zu lassen:
a) Man gibt alle Befehle in der Kommandophase des KC87 ein.
b) Man integriert den Teil des Programmes, der die Kommunikation regelt, als Bestandteil des Anwenderprogrammes. Dies
ist sinnvoll für Daten-Eingabe und Daten-Ausgabe. Am günstigsten arbeitet man mit Zeichenketten. Es ist auch
möglich, die Ausgabe des Programmes selbst als codierte BASIC-Datei im Anwenderprogramm zu integrieren. Programmierte
Programm-Eingabe/-Verkettung geht nicht bzw. wäre eine Untersuchung wert, weil PEEK- und POKE-Operationen
Überaschungen bescheren können..
Zu a.) :
Minimales Beispiel zum Einlesen eines codierten Basic-Programmes vom PC:
Minimales Beispiel zum Ausgeben eines codierten Basic-Programmes vom
KC87:
Zu b.)
Ein Rahmen-Beispiel für das Einlesen, Ausgeben und Verarbeiten von Daten, die auf dem PC als Datendateien gespeichert
werden ist:
kc87pc.bas
9. Erweiterungsmöglichkeiten
Weitere Kommandos für die Kommunikation kann man einführen, wenn man im PC-Skript die Stelle weiter ausfüllt,
an der
#Template für Erweiterungen
beginnt.
|