home *** CD-ROM | disk | FTP | other *** search
- {----------------------------------------------------------------}
- { COMMUNIT Hilfsprozeduren und Deklarationen zu COMMUNIT }
- { und V24Unit }
- {----------------------------------------------------------------}
- Unit COMMHELP;
-
- Interface {******************************************************}
-
- uses Crt, CommCons;
-
- Procedure AlleComs;
-
- Function GetSIO(aComPort : word) : string;
- { speziell für den 16550 }
- Function Enabled16550(aComPort : word) : boolean;
- Procedure Switch16550(aComPort : word; EmptyBuffer : boolean;
- aWhat : byte);
-
- { Zum Anzeigen der versch. Register }
- Procedure ShowMCR(aPort : word);
- Procedure ShowMSR(aPort : word);
- Procedure ShowLSR(aPort : word);
- Procedure ShowLCR(aPort : word);
-
- { Zum Zeigen der Einstellungen }
- Function GetBaudStr(aBaud : BaudType) : string;
- Function GetParityStr(aParity : word): string;
- Function GetDataBitStr(aDataBits : byte): string;
- Function GetStopBitStr(aStopBits : byte): string;
- Function GetComPortStr(aPort : word): string;
-
- Implementation {*************************************************}
-
- { ------------------------------------------------------------- }
- { ALLECOMS setzt die Portadressen abh. von ComBase und MaxPorts }
- { ------------------------------------------------------------- }
- Procedure AlleComs;
- begin
- meml[$0000:$0400] := ComBase[COM1];
- meml[$0000:$0402] := ComBase[COM2];
- If MaxPorts > 2 Then meml[$0000:$0404] := ComBase[COM3];
- If MaxPorts > 3 Then meml[$0000:$0406] := ComBase[COM4];
- end;
-
- {--------------------------------------------------------------- }
- { GetSIO Welcher Schnittstellenbaustein ist installiert? }
- {--------------------------------------------------------------- }
- Function GetSIO(aComPort : word) : string;
- begin
- GetSIO := 'nicht gefunden';
- If (Port[ComBase[aComPort]+IIR] and $30) <> 0 Then EXIT;
- { Falls der 16550 aktiviert ist, würden durch das SWITCH }
- { sonst die Einstellungen überschrieben }
- If Enabled16550(aComPort) Then
- begin
- GetSIO := '16550A ';
- EXIT;
- end;
- Switch16550(aComPort, false, 1); { Puffer nicht löschen }
- If Enabled16550(aComPort)
- Then GetSIO := '16550A '
- Else If (Port[ComBase[aComPort]+IIR] and $80) > 0
- Then GetSIO := '16550N '
- Else begin { Scratch Register da? }
- Port[ComBase[aComPort]+7] := $55;
- If (Port[ComBase[aComPort]+7] = $55)
- Then GetSIO := '8250A/16450 '
- Else GetSIO := '8250/8250B ';
- end;
- end;
- { -------------------------------------------------------------- }
- { Enabled16550 Prüft, ob der 16550 angeschalten ist }
- { Dann, wenn die Bits 6 und 7 im IIR aktiv sind }
- { und die anderen nicht (!! lesender Zugriff) }
- { -------------------------------------------------------------- }
- Function Enabled16550(aComPort : word) : boolean;
- begin
- Enabled16550 := (Port[ComBase[aComPort]+IIR] and $C0) = $C0;
- end;
-
- { -------------------------------------------------------------- }
- { Switch16550 Schaltet 16550 ein oder aus. }
- { EmptyBuffer: bei TRUE wird der Puffer }
- { gelöscht. }
- { aWhat = 0: FIFO aus (Kompatibilitätsmodus) }
- { aWhat = 1, 2, 8, 14 Trigger bei 1..14 Bytes }
- { -------------------------------------------------------------- }
- { Zum Ausschalten FIFO Reset Receive und FIFO Reset Transmit }
- { Bits 1 und 2 setzen und FIFO enable Bit 0 entfernen. }
- { Zum Einschalten FIFO enable, Bit 0 setzen und mit den Bits }
- { 6 und 7, Trigger Level die Anzahl der Bytes festlegen, }
- { nach denen ein Interrupt passieren soll. }
- { 1 --> 0000 0001 }
- { 2 --> 0100 0001 }
- { 8 --> 1000 0001 }
- { 14 --> 1100 0001 }
- { -------------------------------------------------------------- }
- Procedure Switch16550(aComPort : word;
- EmptyBuffer : boolean;
- aWhat : byte);
- var IIRByte : byte;
- begin
- IIRBYTE := 0;
- case aWhat of
- 0 : IIRByte := $06; { Enable = Aus, FIFO-Puffer löschen }
- 1 : IIRByte := $01;
- 2 : IIRByte := $41;
- 8 : IIRByte := $81;
- 14 : IIRByte := $C1;
- end;
- If EmptyBuffer Then IIRByte := IIRByte or $06;
- Port[ComBase[aComPort] + IIR] := IIRByte;
- end;
-
- {--------------------------------------------------------------- }
- { ShowMCR zeigt das Modem Control Register }
- {--------------------------------------------------------------- }
- Procedure ShowMCR(aPort : word);
- var i : integer;
- reg : byte;
- const MCRStat : array[0..4] of string =
- (' LP', 'OT2', ' OT1', ' RTS', ' DTR');
- begin
- reg := Port[ComBase[aPort] + MCR];
- write(' ');
- For i := 0 to 4 do
- begin
- if (reg and ($10 shr i)) <> 0
- Then TextColor(LightRed)
- Else TextColor(white);
- write(MCRStat[i]+ ' ');
- end;
- TextColor(White);
- end;
- {--------------------------------------------------------------- }
- { ShowMSR zeigt das Modem Status Register }
- {--------------------------------------------------------------- }
- Procedure ShowMSR(aPort : word);
- var i : integer;
- reg : byte;
-
- const MSRStat : array[0..7] of string =
- (' CD', 'RI', 'DSR', ' CTS', 'DCD', ' DRI', ' DDSR', ' DCTS');
- begin
- reg := Port[ComBase[aPort] + MSR];
- For i := 0 to 7 do
- begin
- if (reg and ($80 shr i)) <> 0
- Then TextColor(LightRed)
- Else TextColor(White);
- write(MSRStat[i]+ ' ');
- end;
- TextColor(White);
- end;
-
- {--------------------------------------------------------------- }
- { ShowLSR zeigt das Line Status Register }
- {--------------------------------------------------------------- }
- Procedure ShowLSR(aPort : word);
- var i : integer;
- reg : byte;
-
- const LSRStat : array[0..7] of string =
- ('Timeout', 'TE', 'THE', ' BI', ' FE', ' PE', ' OE', 'DataR');
- begin
- reg := Port[ComBase[aPort] + LSR];
- For i := 0 to 7 do
- begin
- if (reg and ($80 shr i)) <> 0
- Then TextColor(LightRed)
- Else TextColor(White);
- write(LSRStat[i]+ ' ');
- end;
- TextColor(White);
- end;
- {--------------------------------------------------------------- }
- { ShowLCR zeigt das Line Control Register }
- {--------------------------------------------------------------- }
- Procedure ShowLCR(aPort : word);
- var i : integer;
- reg : byte;
-
- const LCRStat : array[0..7] of string =
- (' DLAB', 'SB', ' SP', 'XPar', 'Par', 'StopB', 'Data2',
- 'Data1');
-
- begin
- reg := Port[ComBase[aPort] + LCR];
- For i := 0 to 7 do
- begin
- if (reg and ($80 shr i)) <> 0
- Then TextColor(LightRed)
- Else TextColor(White);
- write(LCRStat[i]+ ' ');
- end;
- TextColor(White);
- end;
- { ----------------------------------------- }
- { Zum Anzeigen der aktuellen Einstellungen }
- { ----------------------------------------- }
- Function GetBaudStr(aBaud : BaudType) : string;
- var s : string;
- begin
- str(BaudTab[ord(aBaud)], s);
- GetBaudStr := s;
- end;
- Function GetParityStr(aParity : word): string;
- var s : string;
- begin
- s := '';
- case aParity of
- NoParity : s := 'keine';
- EvenParity : s := 'gerade';
- OddParity : s := 'ungerade';
- end;
- GetParityStr := s;
- end;
- Function GetDataBitStr(aDataBits : byte): string;
- var s : string;
- begin
- s := '';
- case aDataBits of
- DataBit5 : s := '5';
- DataBit6 : s := '6';
- DataBit7 : s := '7';
- DataBit8 : s := '8';
- end;
- GetDataBitStr := s;
- end;
- Function GetStopBitStr(aStopBits : byte): string;
- var s : string;
- begin
- s := '';
- case aStopBits of
- StopBit1 : s := '1';
- StopBit2 : s := '2';
- end;
- GetStopBitStr := s;
- end;
-
- Function GetComPortStr(aPort : word): string;
- begin
- If (aPort >= COM1) and (aPort <= COM4)
- Then GetComportStr := PortString[aPort]
- Else GetComportStr := 'unzulässig';
- end;
- END.
-