home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / toolbox / centron.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-01-21  |  3.7 KB  |  139 lines

  1. (* ------------------------------------------------- *)
  2. (*                  CENTRON.PAS                      *)
  3. (*   Kontroll-Unit für die parallele Schnittstelle   *)
  4. (*                 Turbo Pascal ab 5.5               *)
  5. (*      (c) 1990, 1992 Burkhard Schranz & DMV-Verlag *)
  6. (* ------------------------------------------------- *)
  7. UNIT Centron;
  8.  
  9. INTERFACE
  10.  
  11. CONST LPT1 = 1;
  12.       LPT2 = 2;
  13.       LPT3 = 3;
  14.  
  15. TYPE    Centronics_INTERFACE = Object
  16.         Dataport,
  17.         Controlport,
  18.         Statusport    : WORD;
  19.         Port_Number,
  20.         StatusByte,
  21.         ControlByte,
  22.         DataByte      : BYTE;
  23.         Constructor Init(PortNr: BYTE);
  24.         Destructor Done; Virtual;
  25.         PROCEDURE SetPortadress(PortNr: BYTE);
  26.         FUNCTION  GetPortNumber: BYTE;
  27.         FUNCTION  GetStatus: BYTE;
  28.         FUNCTION  GetBusy: BOOLEAN;
  29.         FUNCTION  GetAck: BOOLEAN;
  30.         FUNCTION  GetPE: BOOLEAN;
  31.         FUNCTION  GetSelect: BOOLEAN;
  32.         FUNCTION  GetError: BOOLEAN;
  33.         PROCEDURE WriteData(Data: BYTE);
  34.         PROCEDURE WriteControl(Control: BYTE);
  35.      END;
  36.  
  37. IMPLEMENTATION
  38.  
  39. Constructor Centronics_INTERFACE.Init(PortNr: BYTE);
  40. BEGIN
  41.   Port_Number := PortNr;
  42.   Dataport      := $3BC;                       { LPT1 }
  43.   Controlport   := $3BE;                       {   "  }
  44.   Statusport    := $3BD;                       {   "  }
  45.   Statusbyte := 0;
  46.   ControlByte := 0;
  47.   DataByte   := 0;
  48.   Statusbyte := GetStatus;
  49.   SetPortAdress(Port_Number);
  50. END;
  51.  
  52. Destructor Centronics_INTERFACE.Done;
  53. BEGIN
  54. END;
  55.  
  56. PROCEDURE Centronics_INTERFACE.SetPortadress
  57.                                          (PortNr:BYTE);
  58.                    { Setzt die einzelnen Portadressen }
  59. BEGIN
  60.   IF NOT(PortNr IN [1..3]) THEN Exit;
  61.   Port_Number := PortNr;
  62.   CASE PortNr OF
  63.     1:BEGIN
  64.         Dataport   := $3BC;
  65.         Controlport := $3BE;
  66.         Statusport := $3BD;
  67.       END;
  68.     2:BEGIN
  69.         Dataport   := $378;
  70.         Controlport := $37A;
  71.         Statusport := $379;
  72.       END;
  73.     3:BEGIN
  74.         Dataport   := $278;
  75.         Controlport := $27A;
  76.         Statusport := $279;
  77.       END;
  78.   END;
  79. END;
  80.  
  81. FUNCTION Centronics_INTERFACE.GetPortNumber: BYTE;
  82.         { liefert den momentan aktiven Ausgang "LPTx" }
  83. BEGIN
  84.   GetPortNumber := Port_Number;
  85. END;
  86.  
  87. FUNCTION Centronics_INTERFACE.GetStatus: BYTE;
  88.        { liefert das Statusbyte des angewählten Ports }
  89. BEGIN
  90.   GetStatus := Port[Statusport];
  91. END;
  92.  
  93. FUNCTION Centronics_INTERFACE.GetBusy: BOOLEAN;
  94.                                       { "Busy"-Signal }
  95. BEGIN
  96.   GetBusy := GetStatus AND $80 = $80;
  97. END;
  98.  
  99. FUNCTION Centronics_INTERFACE.GetAck: BOOLEAN;
  100.                              { Schnittstelle empfängt }
  101. BEGIN
  102.   GetAck := GetStatus AND $40 = $40;
  103. END;
  104.  
  105. FUNCTION Centronics_INTERFACE.GetPE: BOOLEAN;
  106.                      { "Drucker hat kein Papier mehr" }
  107. BEGIN
  108.   GetPE := GetStatus AND $20 = $20;
  109. END;
  110.  
  111. FUNCTION Centronics_INTERFACE.GetSelect: BOOLEAN;
  112.                            { Ausgabeeinheit angewählt }
  113. BEGIN
  114.   GetSelect := GetStatus AND $10 = $10;
  115. END;
  116.  
  117. FUNCTION Centronics_INTERFACE.GetError: BOOLEAN;
  118.                                { Schnittstellenfehler }
  119. BEGIN
  120.   GetError := GetStatus AND $8 = $8;
  121. END;
  122.  
  123. PROCEDURE Centronics_INTERFACE.WriteData(Data: BYTE);
  124.        { Schreibt ein Data-Byte auf die Schnittstelle }
  125. BEGIN
  126.   Port[Dataport] := Data;
  127. END;
  128.  
  129. PROCEDURE Centronics_INTERFACE.WriteControl
  130.                                        (Control: BYTE);
  131.          { Schreibt ein Byte auf das Control-Register }
  132. BEGIN
  133.   Port[Controlport] := Control;
  134. END;
  135.  
  136. END.
  137. (* ------------------------------------------------- *)
  138. (*             Ende von CENTRON.PAS                  *)
  139.