PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:vorstellung:exchanges:transfolio

Dies ist eine alte Version des Dokuments!


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.

Systemvoraussetzungen

Das vorkompilierte TRANSFOLIO.EXE benötigt für die Zugriffe auf den Parallelport die Library „inpout32.dll“, die von der Webseite http://www.logix4u.net stammt. Die Library kann sich entweder im aktuellen Arbeitsverzeichnis befinden oder ins System-Directory kopiert werden.

Die Linux-Version benötigt das Kernelmodul ppdev, das für den Zugriff auf 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 Windowsversionen 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 (ftp://ftp.digitalmars.com) 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.6 - (c) 2006 by Klaus Peichl

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

  -t  Transmit file to Portfolio
  -r  Receive file from Portfolio
  -l  List directory files on Portfolio matching PATTERN
  -f  Force overwriting an existing file
  -d  Select parallel port device (default: /dev/parport0)

  The Portfolio must be in server mode when running this program!

Das Abrufen eines Verzeichnisinhalts des Portfolio vom PC aus ist mit der Kommandozeilenoption -l möglich (Anführungszeichen nur unter Linux nötig):

~/src> ./transfolio -l "a:\prg\*.*"
TransFolio 0.6 - (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.6 - (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 Zahlenvormat kann der Prefix 0x der Zahl vorangestellt werden).

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 Pfand 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 Pfand 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.1139164378.txt.gz · Zuletzt geändert: 05/02/2006 00:02 (Externe Bearbeitung)