Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:vorstellung:exchanges:transfolio

Einsatz und Funktionsweise des internen Datenübertragungsprogramms

Einführung

Der Portfolio verfügt über ein eingebautes Datenübertragungsprogramm, das über das Systemmenü gestartet werden kann und den Datenaustausch mit einem PC ermöglicht. Man benötigt dazu das Parallelportmodul für den Portfolio und ein Kabel, das die Parallelports von Portfolio und PC 1:1 (ohne Überkreuzungen) miteinander verbindet. Das Kabel kann voll beschaltet sein, es genügen aber die im Schaltbild eingezeichneten fünf Leitungen. Kreuzt man Sende- und Empfangsleitungen im Kabel, können übrigens auch zwei Portfolios direkt miteinander kommunizieren.

Auf der PC-Seite wird natürlich ebenfalls Software benötigt, die über die gegebene Beschaltung des Parallelports mit dem Portfolio kommunizieren kann. Atari lieferte hierzu mit dem Parallelportmodul das Programm FT.COM aus, das aber direkte I/O-Port-Zugriffe vornimmt und sich somit nur unter DOS oder älteren Windows-Versionen (bis 98) nutzen läßt.

TransFolio als Alternative zu FT.COM

Mit TransFolio gibt es seit Anfang 2006 eine Alternative zu FT.COM, die für Windows und Linux verfügbar ist. Sie soll es vor allem Portfolio-Neulingen oder Gelegenheits-Nostalgikern erleichtern, einen komplett leeren Portfolio zu neuem Leben zu erwecken. Wegen der prinzipbedingt recht bescheidenen Übertragungsgeschwindigkeit werden Poweruser nach der Erstinstallation sicherlich auf andere Übertragungsprogramme oder auf Wechselspeicher ausweichen.

Die aktuelle Version von Transfolio ist unter http://leute.server.de/peichl/transfolio.zip erhältlich. Die Version 0.9 erlaubt die Angabe mehrerer Quell-Dateien per Kommandozeile; außerdem wurden einige Fehler korrigiert.

Systemvoraussetzungen

Das vorkompilierte TRANSFOLIO.EXE für Windows benötigt für die Zugriffe auf den Parallelport einen Treiber. Auf der Webseite http://www.logix4u.net/ gibt es einen solchen für 32-Bit-Systeme in Form einer Library namens „inpout32.dll“. Diese DLL-Datei ist bereits in transfolio.zip enthalten und muss vor dem Aufruf von Transfolio nur ins aktuelle Arbeitsverzeichnis oder ins System-Directory kopiert werden. Für 64-Bit-Windows-Versionen gibt es stattdessen bei www.highrez.co.uk eine Weiterentwicklung des Treibers mit Installationsprogramm. TRANSFOLIO.EXE verwendet die voreingestellte Port-Adresse 0x378. Insbesondere bei Verwendung einer PCI-Schnittstellenkarte kann die tatsächliche Adresse des Parallelports davon abweichen und muss dem Programm mit dem Kommandozeilenparameter -p <Adresse> mitgeteilt werden (z.B. -p 0xe010).

Die Linux-Version benötigt das Kernelmodul ppdev, das für die Parallelportgerätedateien /dev/parportX zuständig ist. Außerdem müssen entsprechende Zugriffsrechte vorhanden sein.

Sowohl für Windows als auch für Linux kann man sich nötigenfalls eine Programmversion mit direkten I/O-Port-Zugriffen compilieren (siehe Quelltext). Diese Variante wird aber nur unter älteren Windows-Versionen bzw. nur mit Root-Rechten funktionieren. Zur Compilierung eignet sich unter Linux (z.B.) gcc 3.3.4. Die Windows-Version wurde mit dem Compiler von Digital Mars generiert, der ohne Installation auch mit Wine unter Linux lauffähig ist.

Bedienung von Transfolio

Transfolio ist ein reines Kommandozeilen-Tool, das im Gegensatz zu FT.COM keinen interaktiven Betrieb und keinen Server-Modus kennt. Ein Vorteil gegenüber FT.COM ist aber die Fortschrittsanzeige während eines Transfers. Bei einem Aufruf von TransFolio ohne Argumente erhält man die Hilfeseite (hier die Linux-Version):

  Transfolio 0.9 - (c) 2008 by Klaus Peichl

  Syntax: ./transfolio [-d DEVICE] [-f] {-t|-r} SOURCE DEST
    or    ./transfolio [-d DEVICE] -l PATTERN

  -t  Transmit file to Portfolio.
      Wildcards are not directly supported but may be expanded
      by the shell to generate a list of source files.
  -r  Receive file(s) from Portfolio.
      Wildcards in SOURCE are evaluated by the Portfolio.
      In a Unix like shell, quoting is required.
  -l  List directory files on Portfolio matching PATTERN
  -f  Force overwriting an existing file
  -d  Select parallel port device (default: /dev/parport0)

  Notes:
  - SOURCE may be a single file or a list of files.
    In the latter case, DEST specifies a directory.
  - The Portfolio must be in server mode when running this program!

Damit eine Verbindung zum Portfolio aufgebaut werden kann, muss dieser zunächst in den Server-Modus gebracht werden (System/Dateienübertragung/Bedienen). Das Abrufen eines Verzeichnisinhalts des Portfolio vom PC aus ist mit der Kommandozeilenoption „-l“ möglich (Die Anführungszeichen im Beispiel sind nur unter Linux nötig):

~/src> ./transfolio -l "a:\prg\*.*"
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Fetching directory listing for a:\prg\*.*
ATMD.COM
LCDECHO.COM
CCMIMAGE.COM
TURBO.COM
DEBUG.COM
ALMBOOST.COM
ATTR.COM
ZIPMAN.COM
F-METER.COM
RC.COM
RC.DAT
TURBO.MSG

Mit der Option „-r“ kann man nun z.B. die Datei RC.DAT zum Sichern auf den PC übertragen:

~/src> ./transfolio -r "a:\prg\rc.dat" rc.dat
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Initializing transfer...
Received 1368 of 1368 bytes
     

Die Übertragung in umgekehrter Richtung funktioniert analog unter Verwendung der Option „-t“. In beiden Fällen kann zusätzlich die Option „-f“ angegeben werden, wenn eine bereits vorhandene Datei auf dem Zielrechner überschrieben werden soll. Die Option „-d“ bzw. „-p“ (je nach compilierter Version) dient der Auswahl des Parallelports. In der Windows-Version und der Linux-Version mit direkten I/O-Zugriffen gibt das auf „-p“ folgende Kommandozeilenargument die Basisadresse des Parallelports an (für hexadezimales Zahlenformat kann der Prefix 0x der Zahl vorangestellt werden).

Mehrere Dateien gleichzeitig senden

Methode 1: Auflistung mehrerer Quelldateien auf der Kommandozeile

Ab Version 0.9 kann man anstelle des Quelldateinamens (SOURCE) auch eine aus mehreren durch Leerzeichen getrennten Dateinamen bestehende Liste angeben. Der Zieldateiname (DEST) muss dann ein Directory bezeichnen. Dies funktioniert sowohl beim Senden (Kommandozeilenschalter „-t“) als auch beim Empfangen (Kommandozeilenschalter „-r“) mehrerer Dateien. Das folgende Beispiel sendet 2 Textdateien vom PC zum Portfolio. Auch hier sind die Anführungszeichen nur in einer Unix/Linux-Shell erforderlich:

~/src> ./transfolio -t text1.txt text2.txt "a:\texte"
Transfolio 0.9 - (c) 2008 by Klaus Peichl
Transmitting file 1 of 2: text1.txt -> a:\texte\text1.txt
Sent 440 of 440 bytes.
Transmitting file 2 of 2: text2.txt -> a:\texte\text2.txt
Sent 1105 of 1105 bytes.

Methode 2: Verwendung von Wildcards

Der Einsatz von Wildcards (auch Jokerzeichen genannt), also „*“ und „?“, hängt von der Übertragungsrichtung ab. Beim Empfang mehrerer Dateien vom Portfolio durch den PC übernimmt der Portfolio die Expansion der Jokerzeichen. Unter Linux muss das SOURCE-Argument wieder in Anführungszeichen stehen, um die Expansion durch die Shell zu vermeiden. Beispiel zur Übertragung mehrerer Dateien vom Portfolio ins aktuelle Arbeitsverzeichnis des PC:

~/src> ./transfolio -r "a:\texte\text?.txt" .
Transfolio 0.9 - (c) 2008 by Klaus Peichl
Transferring file 1 of 2: TEXT1.TXT
Received 440 of 440 bytes
Transferring file 2 of 2: TEXT2.TXT
Received 1105 of 1105 bytes

Beim Versenden mehrerer Dateien vom PC zum Portfolio können Wildcards nur in einer Shell eingesetzt werden, die die Expansion der Jokerzeichen übernimmt. Dadurch bekommt Transfolio vom System eine Liste der passenden Dateinamen als Teil der Kommandozeile übergeben, so dass dieser Fall auf die oben beschriebene Methode 1 zurückgeführt wird. Die Eingabeaufforderung von Windows ist an dieser Stelle leider unzureichend.

Methode 3: Steuerung per Shellscript

Um mehrere Dateien in einen Ordner auf den Portfolio zu kopieren, gibt es ein Shellscript für Linux. Für Windows wird es auch bald geben. Dies kann man hier downloaden: http://chiaki.mine.nu/tfdir.sh Zum installieren einfach downloaden und „chmod 777 tfdir.sh“ machen, damit es ausführbar wird. Ohne Parameter kann man interaktiv die Ordner angeben:

~/tmp# ./tfdir.sh
Welches Verzeichnis soll kopiert werden?
/tmp/bla
In welchen Pfad auf den Portfolio, Ordner muessen vorher erstellt werden!
a:\bla
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Initializing transfer...
Sent 1156 of 1156 bytes.
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Initializing transfer...
Sent 367 of 367 bytes.

Oder mit Parameter:

~/tmp# ./tfdir.sh /tmp/bla/ a:\bla
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Initializing transfer...
Sent 1156 of 1156 bytes.
TransFolio 0.8 - (c) 2006 by Klaus Peichl
Initializing transfer...
Sent 367 of 367 bytes.

Die -h Page:

Dieses Script sendet alle Dateien die in einen Ordner sind mithilfe von transfolio an den Atari Portfolio
Ohne Parameter startet es interaktiv und fragt die Pfade ab
Mit Parameter:
Parameter 1 = Quellordner
Parameter 2 = Zielpfad, der Ordner muss aber vorher auf den Pofo existieren!
 ./tfdir.sh quell a:\progs
Bei Bugs oder Probleme: chiaki_ai@gmx.de

Das Datenübertragungsprotokoll des Portfolio

Auch wenn die Verbindung über den Parallelport anderes vermuten läßt, erfolgt die Datenübertragung bitseriell mit je einer Daten- und Taktleitung für beide Richtungen. Da eine genaue Dokumentation bisher nicht verfügbar ist, soll das Übertragungsprotokoll hier soweit beschrieben werden, wie es im Rahmen der Entwicklung von TransFolio umgesetzt wurde.

Übertragung eines Bytes

Ein Byte wird wie gesagt seriell, beginnend mit dem höchstwertigen Bit, übertragen. Die vom Sender gesteuerte Datenleitung wird für ein Nullbit auf Lowpegel (0V) und für ein Einsbit auf Highpegel (5V) geschaltet. Die andere Datenleitung ist unbenutzt und bleibt auf Lowpegel. Die Taktleitungen befinden sich zunächst beide auf Highpegel. Für jedes der acht Bits kann die Übertragung in vier Schritte eingeteilt werden. Die Abbildung zeigt beispielhaft den Pegelverlauf für die aktive Datenleitung und die beiden Taktleitungen bei der Übertragung des Bytewerts 117. Da sowohl fallende als auch steigende Flanken der Taktleitungen zur Signalisierung genutzt werden, nehmen die Taktleitungen pro Byte vier mal den Lowzustand ein.

Übertragung von Datenblöcken

Das BIOS des Portfolio bietet mit der Funktion 30h von Interrupt 61h die Möglichkeit, Datenblöcke zu übertragen, ohne dass der Programmierer sich selbst um das zugrunde liegende Protokoll kümmern muss. Diese Funktionen werden auch vom eingebauten Datenübertragungsprogramm benutzt.

Die folgende Tabelle zeigt den allgemeinen Ablauf der Übertragung eines Datenblocks auf Byte-Ebene. Die beiden linken Spalten geben die vom Sender bzw. Empfänger der Nutzdaten gesendeten Bytes wieder.

Sender Empfänger Kommentar
5A Signalisiert Empfangsbereitschaft
A5 Leitet die Übertragung eines Datenblocks ein
n-Low Low-Byte der Blocklänge in Bytes
n-High High-Byte der Blocklänge in Bytes
Byte 1 Nutzdaten
Byte 2 Nutzdaten
Nutzdaten
Byte n Nutzdaten
Check Prüfsumme
Check Bestätigung der Prüfsumme

Bevor der Sender einen Datenblock übertragen kann, wartet er zunächst auf den Empfang des Bytes 5A (hex). Wenn z.B. der Portfolio im Server-Modus auf die Verbindung wartet, sendet er regelmäßig diesen Bytewert aus. Der eigentliche Transfer beginnt stets mit dem Wert A5, gefolgt von einer Längenangabe als 16-Bit-Wert (little endian). Danach folgt die angegebene Anzahl von Nutz-Bytes, abgeschlossen von einem Prüfsummenbyte. Der Empfänger quittiert den Erhalt der Daten durch das Senden seiner Prüfsumme, die bei einer fehlerfreien Übertragung mit der vom Sender berechneten Prüfsumme übereinstimmen muss. Das Prüfsummenbyte stellt den Wert dar, der nötig ist, um die Summe aller Nutzdaten und der Längenangabe auf das nächsthöhere Vielfache von 256 zu ergänzen. Zur Berechnung kann man von 0 beginnend alle einbezogenen Bytes mit einer 8-Bit-Subtraktion ohne Übertrag nacheinander vom aktuellen Ergebnis abziehen.

Steuerprotokoll des Datenübertragungsprogramms

Das Datenübertragungsprogramm des Portfolio - wie auch das Pendant FT.COM - können sowohl lokale Dateien versenden, als auch Dateien vom anderen Rechner anfordern. Außerdem bietet FT.COM die Möglichkeit, ein Directorylisting vom Portfolio anzuzeigen. Prinzipiell übernimmt eine Kommunikationsseite die Steuerung während die andere Seite in den Server-Modus („Bedienen“) versetzt werden muss. Im folgenden werden die wichtigsten Kommandosequenzen aufgeführt, die der steuernde Rechner dem Server zusendet und welche Antwort erwartet wird. Wie erwähnt werden alle Datenpakete über die oben beschriebenen Blocktransferfunktionen abgewickelt.

Directorylisting anfordern

Die einfachste Funktion ist das Anfordern des Directorylistings zu einem bestimmten Suchpfad. Die entsprechende Kommandosequenz besteht aus einem Funktionscode, der maximalen Empfangspuffergröße, sowie dem bis zu 79 Zeichen langen Suchmuster. Ist das Suchmuster kürzer als 79 Zeichen, muss es mit einem Nullbyte terminiert und der Rest des 82 Byte langen Datenblocks beliebig ergänzt werden.

Offset Inhalt Bedeutung
0 06 Funktionscode „Directorylisting anfordern“
1 00 Puffergröße Low
2 70 Puffergröße High
3 Suchpfad (z.B. C:\*.*)
noch Suchpfad (len Bytes)
3+len 00 Endmarke
Platzhalter (Inhalt ohne Bedeutung)
81 Platzhalter (Inhalt ohne Bedeutung)

Die Antwort des Portfolio auf so eine Anfrage fällt denkbar knapp aus. Der Ergebnisdatenblock enthält die Anzahl der gefundenen Dateien und ihre durch Nullbytes voneinander getrennten Namen. Weitere Informationen wie die Dateilänge oder das Erstellungsdatum sind nicht verfügbar.

Offset Inhalt Bedeutung
0 n-Low Low-Byte der Dateianzahl
1 n-High High-Byte der Dateianzahl
2 Dateiname 1
00 Trennmarke
Dateiname 2
00 Trennmarke
Dateiname n
00 Endmarke

Nach dem Versand der Antwort befindet sich der Portfolio wieder in Bereitschaft und wartet auf weitere Kommandos.

Datei anfordern

Der erste Schritt vor der Übertragung einer Datei besteht darin, ihre Existenz auf dem Server zu erfragen. Dazu dient die oben beschriebene Directoryabfrage mit dem Dateinamen als Suchmuster. Ist die Datei vorhanden und in der Antwort gelistet, erfolgt die Anforderung der Datei selbst:

Offset Inhalt Bedeutung
0 02 Funktionscode „Datei anfordern“
1 00 Puffergröße Low
2 70 Puffergröße High
3 Pfad und Dateiname
noch Pfad/Name (len Bytes)
3+len 00 Endmarke
Platzhalter (Inhalt ohne Bedeutung)
81 Platzhalter (Inhalt ohne Bedeutung)

Der Portfolio antwortet hierauf mit einem 11 Byte langen Datenblock, der u.a. die Dateilänge enthält:

Offset Inhalt Bedeutung
0 20 OK
1 F5
2 6F
3 2D
4 87
5 35
6 34
7 n-LowLow Dateilänge (32-Bit-Wert)
8 n-LowHigh Dateilänge (32-Bit-Wert)
9 n-HighLow Dateilänge (32-Bit-Wert)
10 n-HighHigh Dateilänge (32-Bit-Wert)

Direkt im Anschluss folgt die Übertragung der Nutzdaten in einem oder mehreren Datenblöcken. Die Anzahl der benötigten Datenblöcke hängt von der Dateigröße und der Puffergröße des Portfolio ab. Die Puffergröße wiederum ist abhängig vom Arbeitsspeicher des Portfolio und liegt typischer Weise bei 7000 hex Byte = 28672 Byte. Wurden alle Datenblöcke empfangen, schließt der Empfänger die Kommunikation durch folgenden Datenblock ab:

Offset Inhalt Bedeutung
0 20 OK
1 00
2 03

Datei versenden

Beim Übertragen einer lokalen Datei zum Server wird als erstes ein Datenblock gesendet, der insbesondere den Zieldateinamen und die Dateilänge beinhaltet:

Offset Inhalt Bedeutung
0 03 Funktionscode „Datei versenden“
1 00 Puffergröße Low
2 70 Puffergröße High
3 0C
4 7A
5 21
6 32
7 n-LowLow Dateilänge (32-Bit-Wert)
8 n-LowHigh Dateilänge (32-Bit-Wert)
9 n-HighLow Dateilänge (32-Bit-Wert)
10 n-HighHigh Dateilänge (32-Bit-Wert)
11 Pfad und Dateiname
noch Pfad/Name (len Bytes)
11+len 00 Endmarke
Platzhalter (Inhalt ohne Bedeutung)
89 Platzhalter (Inhalt ohne Bedeutung)

Der Server antwortet mit 3 Byte, die darüber Aufschluss geben, ob die Datei auf dem Server schon vorhanden ist und in wie großen Blöcken der Dateiinhalt versendet werden kann:

Offset Inhalt Bedeutung
0 21 21=„OK“, 20=„Datei existiert schon“
1 00 Puffergröße Low
2 70 Puffergröße High

Gegebenenfalls kann der Sender die Datei mit folgendem Kommando überschreiben lassen:

Offset Inhalt Bedeutung
0 05 Funktionscode „Datei überschreiben“
1 00 Puffergröße Low
2 70 Puffergröße High

Wenn das Überschreiben vom Benutzer nicht gewünscht wird, beendet er die Kommunikation durch das Abbruchkommando:

Offset Inhalt Bedeutung
0 00 Funktionscode „Kommunikation abbrechen“
1 00
2 00

Sofern die Übertragung nicht abgebrochen wurde, können jetzt die Nutzdaten in einem oder mehreren Blöcken versendet werden. Die maximale Blocklänge richtet sich nach der Puffergröße, die der letzten Antwort des Servers zu entnehmen war. Sobald alle Datenblöcke erfolgreich transferiert wurden, quittiert der Server schließlich noch einmal mit einer 3-Byte-Sequenz:

Offset Inhalt Bedeutung
0 20 OK
1 D7
2 39

Klaus Peichl, 2006-02-05

software/vorstellung/exchanges/transfolio.txt · Zuletzt geändert: d/m/Y H:i (Externe Bearbeitung)