Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

AUTO232.TXT

143 views
Skip to first unread message

Harald Faber

unread,
Jan 8, 1997, 3:00:00 AM1/8/97
to

Technische Spezifikation des 232-Protokolls
-------------------------------------------
(von Dr. Christian Donninger, Wien)

Das 232-Protokoll ist ein historisch gewachsenes Protokoll. Wie im
Artikel (CSS 1/96, S.57ff) beschrieben, diente es urspruenglich zur
Kommunikation zwischen dem Chess232-Brett und dem PC. Aus logischer
Sicht ist es daher sicherlich alles andere als perfekt. Es hat vor
allen perfekteren Neuschoepfungen aber einen entscheidenden Vorteil: Es
existieren bereits funktionierende Anwendungen. Jede Neuschoepfung wird
ausserdem, sofern sie Verbreitung findet, im Laufe der Zeit ein
aehnliches Schicksal erleiden. Meiner Meinung nach sollte man daher von
Verschlimmbesserungen Abstand nehmen.

Serielle Parameter:
1200 Baudrate, 8 Bit Datenlaenge, 1 Stopbit, keine Paritaet.

Jeder Befehl oder Zug wird in einem 5 Byte grossen Paket gesendet. Die
Gegenseite bestaetigt den Empfang eines Pakets, indem sie ein Byte mit
dem Wert ACK (Acknowledge = Daten richtig empfangen) oder NAK
(Negative Acknowledge) zuruecksendet. Im Falle eines NAK sollte das
Paket erneut gesendet werden. In der jetzigen Version der Treiber wird
nach dem dritten fehlgeschlagenen Versuch die Verbindung abgebrochen.
ACK hat den Wert 46Hex, NAK ist 55Hex.

Die maximale Zeit zwischen dem Senden des abschliessenden Bytes und dem
Empfang der Bestaetigung ist im Protokoll nicht definiert. In der
gegenwaertigen Version der Treiber wird 3 Sekunden gewartet. Ist bis
dahin keine Bestaetigung eingetroffen, wird dies als NAK interpretiert.

Ein Paket hat das allgemeine Format:

Byte 0: STX - Start of Text (STX hat den Wert 42Hex)
Byte 1: Befehlscode (siehe unten)
Byte 2: Befehlsparameter 1 (im Falle von Zuegen das Von-Feld)
Byte 3: Befehlsparameter 2 (im Falle von Zuegen das Nach-Feld)
Byte 4: ETX - End of Text (ETX hat den Wert 43Hex).

Anmerkung: Aus historischen Gruenden haben ACK, NAK, STX und ETX einen
um 40Hex hoeheren Wert als allgemein ueblich.

Befehlscode
-----------
Der Befehlscode gibt an, wie die zwei folgenden Befehlsparameter
interpretiert werden sollen. Generell kann man beim 232-Protokoll
zwischen Kern-Befehlen und erweiterten Befehlen unterscheiden. Die
Kern-Befehle werden von den momentan existierenden Autoplay-Treibern
verwendet. Die erweiterten Befehle dienen hauptsaechlich zur
Kommunikation mit dem Chess232-Brett. Es ist aber durchaus moeglich,
dass zukuenftige Updates von Autoplay-Treibern auf diese Befehle
ebenfalls zugreifen. Aus diesem Grund sollten auch jene Programme, die
nicht unbedingt mit dem Chess232-Brett kommunizieren wollen, den
gesamten Befehlssatz implementieren. Erweiterte Befehle sind mit einem
* markiert.

Schachzug-Befehlscodes:
01Hex = normaler nichtschlagender Zug
02Hex = schlagender Zug
03Hex = Enpassant-Zug
04Hex = kurze Rochade
05Hex = lange Rochade

Fuer alle Zugbefehle gilt: Befehlsparameter 1 ist das Von-Feld,
Befehlsparameter 2 das Nach-Feld. Das Schachfeld a1 hat den Wert 0,
b1=1, c1=2,..., a2=8, h8=63. Bei der Rochade muessen das Von- und Nach-
Feld des Koenigszuges angegeben werden. Die Bauernumwandlung ist
entweder ein normaler Zug oder ein Schlagzug. Das 232-Protokoll
unterstuetzt keine Unterverwandlung. Es wird automatisch von einer
Umwandlung in die Dame ausgegangen. (Anmerkung: Bis auf einige
exotische Problemstellungen kommt eine Unterverwandlung im Spiel
eigentlich nur vor, wenn die umgewandelte Figur vom Gegner sofort
geschlagen werden kann. In diesem Fall geht das Spiel nach dem
Schlagzug mit den richtigen Figuren weiter.)

Soll ein Zug zurueckgenommen werden, muss der Befehlscode mit 10Hex
geord werden (oder-Verknuepfung), d.h. 11Hex ist die Zuruecknahme eines
normalen Zuges. Die uebrigen Parameter entsprechen exakt der
Zugausfuehrung. Die Rolle von Von- und Nach-Feld wird also nicht
vertauscht. Das Takeback-Bit 10Hex ist Teil des erweiterten
Befehlssatzes.

Weitere Befehlscodes:

06Hex = Ungueltiger Zug
Der zuletzt gesendete Zug war ungueltig. Parameter 1 und 2 werden
ignoriert. Es bleibt der einzelnen Implementation ueberlassen, wie auf
diesen Befehl reagiert werden soll. Die 232-Treiber ignorieren diesen
Befehl.

07Hex = frei fuer spaetere Erweiterungen

08Hex = Der darauffolgende Parameter 1 wird als Funktionsparameter
interpretiert. Der Wert des Parameters 2 wird ignoriert. Es werden die
folgenden Funktionsparameter unterstuetzt:
01Hex: Compute-Move. Beginne mit der Berechnung eines Zuges.
02Hex: Make-Move. Breche die Berechnung ab und fuehre den Zug aus.
03Hex: New Game. Beginne ein neues Spiel.
04Hex*: Takeback. Nimm den letzten Zug zurueck.
05Hex*: Memo-Modus. Wechsle in den Spieler-Spieler-Modus.
06Hex*: Stop-Memo. Wechsle in den Computer-Spieler-Modus zurueck.
07Hex*: Turn Board. Drehe die Brettdarstellung.

20Hex = Request Matches
Aufforderung zum Beginn einer Spielserie. Dieser Befehl wird vom
Master an den Slave gesendet. Der Master ist per Definition jene Seite
der Kommunikation, die diesen Befehl sendet. Dieser Code wird im
Auto232-Treiber beim Druecken der Alt-0 Taste ausgeloest. Parameter 1
enthaelt die Anzahl der Spiele.

21Hex = Confirm Match
Die Aufforderung wird vom Slave mit diesem Code bestaetigt. Beide
Seiten sind bereit, das Spiel aufzunehmen. Der Slave ist jene Seite
der Kommunikation, die den Request-Befehl empfangen hat. Achtung: Eine
Implementierung muss in der Lage sein, ohne ein vorhergehendes
Request/Confirm auf die Befehle 01Hex bis 08Hex in der definierten
Weise zu reagieren.

22Hex = Unterbreche das momentane Spiel
Dieser Befehl kann nur vom Master an den Slave geschickt werden. Er
wird vom Auto232-Treiber beim Druecken der Alt-9 Taste gesendet. Eine
Implementation muss in der Lage sein, diesen Befehl als Slave zu
verarbeiten. Sie muss ihn nicht unbedingt als Master behandeln und
senden koennen.

23Hex = Speichere das bisherige Spiel ab
Der Parameter 1 enthaelt die aktuelle fortlaufende Nummer des Spieles
in der Spielserie seit dem Request-Matches Befehl. Dieser Befehl kann
nur vom Master an den Slave geschickt werde.

24Hex = Fahre mit einem unterbrochenen Spiel fort
Parameter 1 und 2 sind bedeutungslos. Dieser Code kann nur vom Master
an den Slave gesendet werden. Eine Implementation muss in der Lage
sein, diesen Befehl als Slave zu verarbeiten. Sie muss ihn nicht
unbedingt als Master behandeln und senden koennen.

25Hex* = Reject-Matches
Dieser Befehl kann nur vom Slave an den Master auf dessen Request-
Befehl gesendet werden. Der Slave verweigert die Kommunikation.
Parameter 1 und 2 sind bedeutungslos. Der Befehl wird vom 232-Treiber
verwendet, falls eine Verletzung des Kopierschutzes festgestellt
wurde. Dieser Befehlscode muss nicht unterstuetzt werden.

==========================================================================

Hope this is what you are looking for.


--

0 new messages