home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
09
/
tricks
/
centron.pas
next >
Wrap
Pascal/Delphi Source File
|
1990-06-15
|
4KB
|
134 lines
(* ------------------------------------------------------ *)
(* CENTRON.PAS *)
(* Kontroll-Unit für die parallele Schnittstelle *)
(* Turbo Pascal 5.5 *)
(* (c) 1990 Burkhard Schranz & TOOLBOX *)
(* ------------------------------------------------------ *)
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.