Im Magazin „MC" wurde im Juli 1984 der folgende Artikel abgedruckt.
Ein Artikel zum Austausch von Daten über eine serielle Schnittstelle. In diesem Fall an den MC-CP/M Computer angelehnt.

CPMTRANS & CPMRECIE

Andreas Högner

Software für CP/M-Computer

Das Programmpaar CPMTRANS und CPMRECIE ermöglicht die Übertragung allgemeiner Files zwischen zwei CP/M-Computern. In seiner ursprünglichen Version wurde es geschrieben, um für den Apple-II mit Softcard vorhandene CP/M-Programme für den mc-CP/M-Computer verfügbar zu machen. In einer erweiterten Version wird es hier für beliebige CP/M-Computer vorgestellt, wobei das Problem unterschiedlicher Schnittstellen berücksichtigt wurde.

Das Programmpaar CPMTRANS und CPMRECIE (Bild 1 und Bild 2) ist im 8080-Assembler-Code geschrieben. Es kann für alle CP/M-Computer mit serieller Schnittstelle angepaßt werden. Es benutzt den Puncher- und den Readerkanal zur Datenübertragung. Das Programmpaar zeichnet sich durch einfache Handhabung aus. Sollen Files von einem Apple-II mit CP/M-Softcard zum mc-CP/M-Computer übertragen werden, so kann dieses mit Hilfe der beiden abgedruckten Hex-Dumps nach dem Eintippen (z.B. mit dem DDT) unmittelbar erreicht werden.

Für die Anpassung an andere Computer ist das abgedruckte Assembler-Listing gedacht. Dazu muß man wissen, welcher Schnittstellenbaustein vorhanden und wie dieser zu programmieren ist. Eine Programmierung der Schnittstellen mit Handshake-Leitungen (RTS und DCD) ist dabei nicht immer möglich.

Damit der sendende Computer dem empfangenden nicht davonläuft, muß im CPMTRANS-Programm eine Zeitverzögerungsschleife eingebaut werden. Das vorliegende Assembler-Source-Listing ist gegenüber dem abgedruckten Hex-Dump für die umgekehrte Übertragungsrichtung (vom mc-CP/M zum Apple-II) ausgelegt. Dementsprechend wurde die Zeitverzögerung für ein Taktverhältnis von 4 : 1 (Sender zu Empfänger) programmiert, weil die Schnittstelle des Apple-II keine RTS-Leitung besitzt.

Das Empfängerprogramm CPMRECIE benutzt keine systemspezifischen Adressen. Es ist daher ohne Änderungen auf solchen CP/M-Computern lauffähig, auf denen eine Programmierung der Schnittstellen nicht notwendig ist.

Das Sendeprogramm CPMTRANS ist für den mc-CP/M-Computer angepaßt und benutzt zur Programmierung des seriellen Port B eine systemspezifische Adresse. Es ist dies die Port-Adresse f3H („Status" und „Control" von Port B). Zur Programmierung des Ports wird die Programmiertabelle für Port A aus dem Monitor 3.4 des CP/M-Computers herangezogen. Die RTS- und DCD-Leitung wird disabled.

Die Bedienung des Programmpaars

Man ruft zuerst das Programm CPMTRANS mit dem zu übertragenden Programm auf (z.B. CPMTRANS B:PIP.COM). Danach startet man das Programm CPMRECIE auf dem empfangenden Computer in ähnlicher Weise. Für das genannte Beispiel müßte es heißen CPMRECIE B:PIP.COM. Die Laufwerksangabe ist nicht zwingend und kann den Erfordernissen entsprechend vorgenommen werden. Dann betätigt man auf dem empfangenden Rechner die Return-Taste. Sobald die Kontrollampe des angegebenen Laufwerks erlischt, kann man die Return-Taste auf dem sendenden Rechner betätigen. Der Übertragungsvorgang läuft nun automatisch bis zum Fileende ab. Beide Programme springen danach mit einem Warmstart in das Betriebssystem zurück.

Funktionsweise des Programmpaars

Das Programmpaar überträgt die Dateien in Blöcken von 128 Bytes Größe. Um auch größere Programme übertragen zu können, als es die Größe der TPA erlaubt, wird immer nur ein Block von der Disk gelesen. Dieses ist von der Programmierung her vorteilhaft, da die Record-länge im CP/M ebenfalls 128 Bytes beträgt. Das Sendeprogramm sendet zu Beginn eines jeden Blocks ein Kontrollwort AAH, welches anzeigt, daß ein neuer Block übertragen werden soll. Die Übertragung beginnt, wenn das Empfangsprogramm seinerseits die Empfangsbereitschaft mit dem Byte 55H gemeldet hat. Das Dateiende wird durch das Byte FFH markiert. Das Empfangsprogramm schließt dann das File und führt einen Warmstart durch.
Das Programm kann während des Datentransfers nicht durch CTRL-C unterbrochen werden. Eine Programmroutine zur Erkennung von Übertragungsfehlern ist nicht implementiert. Dieses erwies sich, aus den Erfahrungen bei der Anwendung des Programmpaares zu schließen, als nicht erforderlich. Bei der Übertragung zahlreicher und umfangreicher Files zwischen Apple-II und mc-CP/M-Computer kamen bei einer Übertragungsrate von 9600 Baud keine Übertragungsfehler vor.

Zur Anpassung

1.
Anpassung bei seriellen Schnittstellen ohne RTS-(request-to-send-)Leitung:

Entsprechend der unterschiedlichen Taktfrequenzen von sendendem und empfangendem Computer muß die Verzögerungsschleife des Sendeprogramms angepaßt werden, wenn der sendende Computer die höhere Taktfrequenz besitzt. Hat der empfangende Computer die höhere Taktfrequenz, dann kann diese Verzögerung auf 01H gestellt werden. Dazu die Zuweisung DELAY1 auf Werte zwischen 01 bis 30 (Hex) und DELAY2 zwischen 01H und FFH Hex (01H keine Verzögerung) einstellen. Die vorliegende Anpassung ist für ein Taktverhältnis von 4 zu 1 geeignet mit einem Wert für DELAY1 gleich 1A und DELAY2 gleich FF.

2.
Anpassung bei seriellen Schnittstellen mit RTS-Leitung:
Die Verzögerungswerte für die oben angegebenen Werte können auf 01H gesetzt werden.

3.
Anpassung für unterschiedlichste Schnittstellen in den Programm-Routinen:
Die individuelle Programmierung des jeweiligen I/0-Bausteins - SIO, USART oder PIO - muß für Sende- und Empfangs-Programm im Anwender-Programm INIT erfolgen. Die dort zu schreibende Anpaßroutine muß mit einem RTS abgeschlossen werden. Das vorliegende Programm enthält an dieser Stelle eine Routine, welche die RTS- und DCD-Leitung im Sendeprogramm außer Funktion setzt.
[Hier das Sende-Programm als 8080-Assembler Listing, hier als 8080-Assembler Programm und hier als Z80-Assembler Programm]
[Hier das Empfangs-Programm als 8080-Assembler Listing, hier als 8080-Assembler Programm und hier als Z80-Assembler Programm]

Eingescanned von Werner Cirsovius
September 2002
© Franzis' Verlag