Aus der MCP-Box STEINBEISSER Celle, den 13.05.86 CoSysop & Filebox-Betreuer (Der MCP-Box) Angesichts der Tatsache, dass ich in den letzten Tagen die Filebox um die Funktionen X-Modem und Special erweitert habe, schreibe ich diesen Text, um Euch darueber zu informieren, was es damit nun ganz genau auf sich hat. Vorerst einmal ein Dankeschoen an MERLIN, der mir das folgende Dokument 'ward' zur Verfuegung gestellt hat. Da ich vorher von X-Modem keine Ahnung hatte, war es Voraussetzung fuer die Implementierung der o.g. Routinen. Wem der nun folgende Texteinschub zu lang (ca. 55 Zeilen a 80 Zeichen) sein sollte, der kann ja CTRL-C druecken... Datei: ward ----------- WARD-CHRISTENSEN-PROTOKOLL -------------------------- Das WCP (Ward-Christensen-Protokoll) ist nach den gleichnamigen Erfinder urspruenglich zur Uebertragung von .COM Files unter CP/M gedacht. Es werden zur Uebertragung alle Zeichen zugelassen. Wie sehen wir gleich. Alle Zeichen werden im 8-Bit Datenformat uebertragen und zwar in Bloecken zu 128 Stueck. Das uebliche Datenformat ist 8 Datenbits, 1 Stopbit, keine Paritaet. Ein Block der gesendet wird, sieht folgendermassen aus: Zuerst wird das SOH Byte ( Start of heading, CTRL-A, $01 ) gesendet dann die Blocknummer ( Werte von 1 bis max. 255, also ein Byte). Das naechste Byte ist die Blocknummer nochmal aber von dem Wert 255 subtraiert. Nennen wir beide BLK1 und BLK2. Danach sendet der Computer die 128 Datenbytes. An die Daten wir noch ein Pruefsummenbyte gehaengt ( sogenanntes Checksumbyte, CSUM genannt ). Es wird gebildet indem alle Bytes eines Blockes ( ohne Uebertrag ) zusammenaddiert werden. Also mit dem SOH-Byte bis zum letzten Datenbyte werden alle adEmpfaenger sendet zwei verschiedene Signale: Wenn er einen Block bekommen hat und die von ihm errechnete Checksumme mit der Empfangenen uebereinstimmt, dann sendet er ein Acknowledge (ACK, CTRL-F, $06). Wenn das nicht der Fall ist (Checksumme falsch oder gar nichts vernuenftiges) sendet er ein Negative-Acknowledge (NAK, CTRL-U,$15). Zur besseren Uebersicht eine kleine Grafik: Empfaenger: /NAK/----------------------------/ACK/ $15 $06 Sender: ----/SOH/BLK1/BLK2/DATA.DATA/CSUM/---- $01 $01 $FE 128*8BIT 8BIT Sie sehen die Sache ist ganz einfach. Wenn das File fertig uebertragen worden ist wird nach dem ACK des Emfaengers vom Sender ein End of Text ( EOT, CTRL-D, $04 ) gesendet. Etwa so: Empfaenger: ----/ACK/---/ACK/---->ENDE $06 $06 Sender: CSUM/---/EOT/-------->ENDE %8BIT $04 Soll die Uebertragung vom Empfaenger unterbrochen werden, so sendet dieser ein Cancel (CTRL-X, $18). Sie sehen, da ist nichts dabei. Nachfolgend noch die Bemerkung das Ward- Christensen-Protokoll Freeware ist und dass es also jeder verwenden darf. Einzige Schwierigkeit: Die Sache lauft nicht unter Datex-P weil Datex-P ja Bei einem CTRL-P ein Datex-Komando erwartet. Es geht also meist nur bei direkt verbundenen Systemen. Soweit zum Prinzip des WCP. Tja, und was hat das ganze nun mit der Filebox bzw. X-Modem zu tun? Ganz einfach: Das WCP ist das gleiche wie das X-Modem-Protokoll bzw. (CP/M-Leute wissen bescheid!) das von Modem7 verwendete Protokoll! Also koennen nun alle, die entweder mit Modem7 unter CP/M arbeiten, ein X-Modem-faehiges Terminalprogramm haben, oder jene, die so schlau sind, sich aus den gegebenen Informationen ein eigenes X-Modem-Programm zu basteln, Programme (und sogar Maschinenprogramme) aus der Filebox holen und (daen. Die Sache hat nur noch einen Haken! Wer bis jetzt gut mitgekommen ist und sich vielleicht schon selbst Gedanken gemacht hat, wird bestaetigen koennen, dass mit X-Modem alle uebertragenen Dateien danach eine Laenge von n*128 Bytes haben, wobei n Element von N ist. Das geht also nur solange gut, wie man keine Overlayprogramme oder aehnliche Scherze uebertraegt. Ausserdem stoert das Leute mit Sinn fuer Genauigkeit ganz gewaltig... @ Also biete ich eine Alternative an: SPECIAL Es handelt sich dabei um ein leicht modifiziertes X-Modem-Protokoll, mit dem die korrekte Dateilaenge, sowie Datum und Zeit mituebertragen werden. PC-Usern koennte dieses Protokoll unter dem Namen Inter-PC/InterComm bekannt sein, ich habe es Special genannt, weil das einfach ein wenig kuerzer ist. Um kompatibel zum alten X-Modem zu bleiben, wird an der Steuerzeichenverein- barung nichts geaendert. Anstelle dessen wird im Block 1 nicht der erste Datensatz gesendet, sondern ein Steuerdatensatz. Die Datenbytes dieses Blockes bedeuten folgendes: Bytes 0 bis 3: Dateilaenge in Bytes, (das niederwertigste Byte zuerst!) '' 4 und 5: Zeit (low, high) '' 6 und 7: Datum '' Datum und Zeit liegen im MS-DOS Format vor und sind daher ziemlich umstaendlich kodiert: ZEIT: high-Byte ! low-Byte Bits: 15 14 13 12 11 10 9 8! 7 6 5 4 3 2 1 0 ------------------------------------------------- Wert:/16 8 4 2 1/32 16 8 4 2 1/16 8 4 2 1 / / / / Stunden / Minuten / Sekunden Da fuer die Sekunden nur 5 Bits zur Verfuegung stehen, muss der Sekunden-Wert verdoppelt werden! DATUM: high-Byte ! low-Byte Bits: 15 14 13 12 11 10 9 8! 7 6 5 4 3 2 1 0 ------------------------------------------------- Wert:/64 32 16 8 4 2 1 /8 4 2 1/16 8 4 2 1 Jahr / Monat / Tag Der Jahreswert wird zu 1980 hinzuaddiert, fuer 1986 staende dort also eine 6. Diese Zeit-/Datumskodierung ist die selbe, die auch im Atari ST und wie schon gesagt auch unter MS-DOS verwendet wird. Atari 520ST Besitzer koennen das Protokoll mit dieser Kodierung z.B. unter PC/InterComm benutzen, es heisst dort genauso wie das Programm... Alle anderen die die korrekte Filelaenge mituebermittelt haben moechten, sollten sich mit einem ganz normalem X-Modem-Programm die Datei 'downloaden' (natuerlich als Uebertragungsprotokoll SPECIAL waehlen) und dann von Hand auf die entsprechende Laenge kuerzen oder (fuer C-64 Besitzer) mit KONVERTER 64 umwandeln! Ach ja, beinah haette ich es vergessen: Die restlichen Bytes des Blocks 1 sind bei dieser Art des Protokolls mit Nullen gefuellt, auch die restlichen Bytes des letzten Blockes (die ungueltigen) sind mit Nullen aufgefuellt. So, und allen, die bis hierher dabeigeblieben sind, wuensche ich nun viel Spass beim Uebertragen von Programmen, Steinbeisser