home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 09 / tricks / centron.pas next >
Pascal/Delphi Source File  |  1990-06-15  |  4KB  |  134 lines

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