----------------------------------------------------
  Kurze Einfuehrung in die serielle Kommunikation
  (c) 1997 Stefan Cordes
----------------------------------------------------
Die serielle Schnittstelle uebertraegt die Daten seriell und zwar
Bitweise: ein E hat den ASCII Wert 65 und als 1 Byte die Binaerdarstellung:
0100 0101. Bei einer seriellen Geschwindigkeit von 300 Baud = Bits/Sekunde 
wird nun 1=20 Volt fuer 1/300tel Sekunde auf die Leitung gelegt, dann fuer
1/300stel Sekunde 0=-20 Volt usw. bis das ganze Byte uebertragen ist.
Diese Aufgabe nimmt uns gluecklicherweise ein Hardwarebaustein ab, der
8250 bzw. in neuen PC's der 16550.
Wir muessen lediglich das E an eine bestimmte Portadresse schreiben und 
sofort faengt der 8250 an die Bits ueber die Leitung zu schicken.
Die Portadresse ist z.B. fuer die COM1: 03F8 hex = ComBase
Wir muessen dem 8250 auch nich mitteilen, wie schnell die Daten uebertragen
werden sollen:
  port[ComBase+3] := $80; (* Baudratenprogrammierung beginnen *)
  baudrate := 9600;
  port[ComBase+0] := (115200 div baudrate) mod 256;
  port[ComBase+1] := (115200 div baudrate) div 256;
  port[ComBase+3] := $00; (* Baudratenprogrammierung fertig *)

Zur Synchronisation werden auch noch Start und Stopbits sowie Paritaets-
(Pruefsummen-) Bits benoetigt. Dafuer ist das Line Control Register des 8250
zustaendig (ComBase+3): z.B. 
  port[ComBase+3] := $03; (* 1 Start, 1 Stop, No Parity, 8 Bits *)
  port[ComBase+3] := $1C; (* 1 Start, 1 Stop, Even Parity, 8 Bits *)

Nun koennen nicht beliebig viele Zeichen einfach an die serielle 
Schnittstelle geschieckt werden:
  port[ComBase] := ord('A');
  port[ComBase] := ord('T');
da ja erst alle Bits uebertragen werden muessen.
Dass alle Bits uebertragen sind erkennt man am Line Status Register (LSR):
  if (port[ComBase+5] and $20)=$20 then Alle bits uebertragen.
Korrekt waere also:
  port[ComBase] := ord('A');
  repeat
  until (port[ComBase+5] and $20)=$20;
  port[ComBase] := ord('T');

Jetzt koennen wir Daten zu einer seriellen Schnittstelle und somit zu einem
Modem schicken, nur wie koennen wir welche empfangen?
Der 8250 sagt uns, wenn er ein neues Zeichen empfangen hat:
  if port[ComBase+5] and $1=$1 then neues Zeichen.
Sodann koennen wir es von der Basisadresse auslesen:
  c := port[ComBase].

Das Lesen ist als Funktion getchar und das Schreiben als Sendchar in 
dosfax.pas ausgefuehrt.

