(* ********* Beginn des Hardware abh„ngigen Teils ********************* *) function received:boolean; var inbyte : byte; (* die Funktion liefert den wert true falls ein Zeichen an der seriellen Schnittstelle zum Modus vorliegt *) begin (* zeichen eingegangen ? und Df klar*) (* regs_half.ah:=$03; regs.dx:=0;intr($14,regs); regs_half.ah := regs_half.ah and $03; *) inbyte := port(.$3fd.) and $03; case inbyte of $03 : begin write('',char(port(.$3f8.))); seri_error:=true; received:= true; end; $01 : received:= true else received:= false; end; end; function receive:char; var ws : workstring; inb : char; begin case hex_ein of true : begin regs_half.ah:=$02; regs.dx:=0;intr($14,regs); ws(.1.):=char(regs_half.al); while not received do delay(1); if received then begin (* zeichen eingegangen ?*) regs_half.ah:=$02; regs.dx:=0;intr($14,regs); ws(.2.):=char(regs_half.al); end; receive := chr(lhex(ws)); end; false : begin regs_half.ah:=$02; regs.dx:=0;intr($14,regs); receive:=char(regs_half.al); end; end; end; function transmitted:boolean; (* Die Funktion liefert den wert true falls das Zeichen an der seriellen Schnittstelle ausgesendet wurde *) var inbyte : byte; begin regs_half.ah:=$03;regs_half.al:=$00; regs.dx:=0;intr($14,regs); inbyte:=regs_half.ah; if (inbyte and $20 = $20 ) then (* 8250 aufnahmebereit ? *) transmitted:=true else transmitted:=false; transmitted:=true; end; procedure transmit (zeichen:char); (* Die Procedure sendet ein Zeichen an die serielle Schnittstelle zum Modem aus *) begin regs_half.al:=ord(zeichen); regs_half.ah:=$01; regs.dx:=0;intr($14,regs); end; procedure initmodem; (* die Routine initialisiert die serielle Schnittstelle zum Modem *) var dummy : char; begin port(.$3fb.):=$83; port(.$3f8.):=$17; port(.$3f9.):=$04; port(.$3fa.):=$00; port(.$3fb.):=$03; port(.$3fc.):=$80; port(.$3fd.):=$01; port(.$3fe.):=$c0; port(.$3ff.):=$00; case baud of 'B': regs_half.al:=0; 'C': regs_half.al:=$20; 'D': regs_half.al:=$40; 'E': regs_half.al:=$60; 'F': regs_half.al:=$80; 'G': regs_half.al:=$A0; 'H': regs_half.al:=$C0; 'I': regs_half.al:=$E0; else regs_half.al:=$40; end; if parbyte and $0c = $08 then regs_half.al:= regs_half.al or $02 else regs_half.al:= regs_half.al or $03; if parbyte and $c0 = $40 then regs_half.al:= regs_half.al or $00 else regs_half.al:= regs_half.al or $04; if parbyte and $10 = $10 then if parbyte and $20 = $20 then regs_half.al := regs_half.al or $18 else regs_half.al := regs_half.al or $08; regs_half.ah:=$00; regs.dx:=0; intr($14,regs); if received then dummy:=receive; end; procedure resetmodem; (* die Routine initialisiert die serielle Schnittstelle zum Modem *) begin regs_half.ah:=$00;regs_half.al:=$43; regs.dx:=0; intr($14,regs); end; procedure initBaud; (* die Routine initialisiert den Timer *) var hilf:byte; begin initmodem; end; (* ***** Ende des Hardware abh„ngigen Teils ******** *)