home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* CENTRON.PAS *)
- (* Kontroll-Unit für die parallele Schnittstelle *)
- (* Turbo Pascal ab 5.5 *)
- (* (c) 1990, 1992 Burkhard Schranz & DMV-Verlag *)
- (* ------------------------------------------------- *)
- UNIT Centron;
-
- INTERFACE
-
- CONST LPT1 = 1;
- LPT2 = 2;
- LPT3 = 3;
-
- TYPE Centronics_INTERFACE = Object
- Dataport,
- Controlport,
- Statusport : WORD;
- Port_Number,
- StatusByte,
- ControlByte,
- DataByte : BYTE;
- Constructor Init(PortNr: BYTE);
- Destructor Done; Virtual;
- PROCEDURE SetPortadress(PortNr: BYTE);
- FUNCTION GetPortNumber: BYTE;
- FUNCTION GetStatus: BYTE;
- FUNCTION GetBusy: BOOLEAN;
- FUNCTION GetAck: BOOLEAN;
- FUNCTION GetPE: BOOLEAN;
- FUNCTION GetSelect: BOOLEAN;
- FUNCTION GetError: BOOLEAN;
- PROCEDURE WriteData(Data: BYTE);
- PROCEDURE WriteControl(Control: BYTE);
- END;
-
- IMPLEMENTATION
-
- Constructor Centronics_INTERFACE.Init(PortNr: BYTE);
- BEGIN
- Port_Number := PortNr;
- Dataport := $3BC; { LPT1 }
- Controlport := $3BE; { " }
- Statusport := $3BD; { " }
- Statusbyte := 0;
- ControlByte := 0;
- DataByte := 0;
- Statusbyte := GetStatus;
- SetPortAdress(Port_Number);
- END;
-
- Destructor Centronics_INTERFACE.Done;
- BEGIN
- END;
-
- PROCEDURE Centronics_INTERFACE.SetPortadress
- (PortNr:BYTE);
- { Setzt die einzelnen Portadressen }
- BEGIN
- IF NOT(PortNr IN [1..3]) THEN Exit;
- Port_Number := PortNr;
- CASE PortNr OF
- 1:BEGIN
- Dataport := $3BC;
- Controlport := $3BE;
- Statusport := $3BD;
- END;
- 2:BEGIN
- Dataport := $378;
- Controlport := $37A;
- Statusport := $379;
- END;
- 3:BEGIN
- Dataport := $278;
- Controlport := $27A;
- Statusport := $279;
- END;
- END;
- END;
-
- FUNCTION Centronics_INTERFACE.GetPortNumber: BYTE;
- { liefert den momentan aktiven Ausgang "LPTx" }
- BEGIN
- GetPortNumber := Port_Number;
- END;
-
- FUNCTION Centronics_INTERFACE.GetStatus: BYTE;
- { liefert das Statusbyte des angewählten Ports }
- BEGIN
- GetStatus := Port[Statusport];
- END;
-
- FUNCTION Centronics_INTERFACE.GetBusy: BOOLEAN;
- { "Busy"-Signal }
- BEGIN
- GetBusy := GetStatus AND $80 = $80;
- END;
-
- FUNCTION Centronics_INTERFACE.GetAck: BOOLEAN;
- { Schnittstelle empfängt }
- BEGIN
- GetAck := GetStatus AND $40 = $40;
- END;
-
- FUNCTION Centronics_INTERFACE.GetPE: BOOLEAN;
- { "Drucker hat kein Papier mehr" }
- BEGIN
- GetPE := GetStatus AND $20 = $20;
- END;
-
- FUNCTION Centronics_INTERFACE.GetSelect: BOOLEAN;
- { Ausgabeeinheit angewählt }
- BEGIN
- GetSelect := GetStatus AND $10 = $10;
- END;
-
- FUNCTION Centronics_INTERFACE.GetError: BOOLEAN;
- { Schnittstellenfehler }
- BEGIN
- GetError := GetStatus AND $8 = $8;
- END;
-
- PROCEDURE Centronics_INTERFACE.WriteData(Data: BYTE);
- { Schreibt ein Data-Byte auf die Schnittstelle }
- BEGIN
- Port[Dataport] := Data;
- END;
-
- PROCEDURE Centronics_INTERFACE.WriteControl
- (Control: BYTE);
- { Schreibt ein Byte auf das Control-Register }
- BEGIN
- Port[Controlport] := Control;
- END;
-
- END.
- (* ------------------------------------------------- *)
- (* Ende von CENTRON.PAS *)
-