home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / pibasy.zip / PIBASYNC.GLO < prev    next >
Text File  |  1987-11-11  |  8KB  |  150 lines

  1. (*----------------------------------------------------------------------*)
  2. (*                                                                      *)
  3. (*                  COMMUNICATIONS HARDWARE ADDRESSES                   *)
  4. (*                                                                      *)
  5. (*        These are specific to IBM PCs and close compatibles.          *)
  6. (*                                                                      *)
  7. (*----------------------------------------------------------------------*)
  8.  
  9. CONST
  10.  
  11.    UART_THR = $00;       (* offset from base of UART Registers for IBM PC *)
  12.    UART_RBR = $00;
  13.    UART_IER = $01;
  14.    UART_IIR = $02;
  15.    UART_LCR = $03;
  16.    UART_MCR = $04;
  17.    UART_LSR = $05;
  18.    UART_MSR = $06;
  19.  
  20.    I8088_IMR = $21;      (* port address of the Interrupt Mask Register *)
  21.  
  22.    COM1_Base = $03F8;    (* port addresses for the UART *)
  23.    COM2_Base = $02F8;
  24.    COM3_Base = $03E8;
  25.    COM4_Base = $02E8;
  26.  
  27.    COM1_Irq = 4;         (* Interrupt line for the UART *)
  28.    COM2_Irq = 3;
  29.    COM3_Irq = 4;
  30.    COM4_Irq = 3;
  31.  
  32.    RS232_Base = $0400    (* Address of RS 232 com port pointer *);
  33.  
  34.    MaxComPorts = 4       (* Four ports allowed by this code    *);
  35.  
  36. (* STRUCTURED *) CONST
  37.                                    (* Port addresses of each com port *)
  38.  
  39.    Default_Com_Base : ARRAY[1..MaxComPorts] OF WORD =
  40.                       ( COM1_Base, COM2_Base, COM3_Base, COM4_Base );
  41.  
  42.                                    (* IRQ line for each port *)
  43.  
  44.    Default_Com_Irq  : ARRAY[1..MaxComPorts] OF INTEGER =
  45.                       ( COM1_Irq, COM2_Irq, COM3_Irq, COM4_Irq );
  46.  
  47. (*----------------------------------------------------------------------*)
  48. (*                                                                      *)
  49. (*                   COMMUNICATIONS BUFFER VARIABLES                    *)
  50. (*                                                                      *)
  51. (*     The communications buffers are implemented as circular (ring)    *)
  52. (*     buffers, or double-ended queues.  The asynchronous I/O routines  *)
  53. (*     enter characters in the receive buffer as they arrive at the     *)
  54. (*     serial port.  Higher-level routines may extract characters from  *)
  55. (*     the receive buffer at leisure.  Higher-level routines insert     *)
  56. (*     characters into the send buffer.  The asynchronous I/O routines  *)
  57. (*     then send characters out the serial port when possible.          *)
  58. (*                                                                      *)
  59. (*----------------------------------------------------------------------*)
  60.  
  61. CONST
  62.  
  63.    TimeOut             = 256        (* TimeOut value                   *);
  64.    Async_XON           = ^Q         (* XON character                   *);
  65.    Async_XOFF          = ^S         (* XOFF character                  *);
  66.  
  67.    Async_Overrun_Error = 2          (*   overrun                       *);
  68.    Async_Parity_Error  = 4          (*   parity error                  *);
  69.    Async_Framing_Error = 8          (*   framing error                 *);
  70.    Async_Break_Found   = 16         (*   break interrupt               *);
  71.  
  72.    Async_CTS           = $10        (*   Clear to send                 *);
  73.    Async_DSR           = $20        (*   Data set ready                *);
  74.  
  75. TYPE
  76.                                     (* I/O buffer type for serial port *)
  77.                                     
  78.    Async_Buffer_Type   = ARRAY[0..1] OF CHAR;
  79.    Async_Ptr           = ^Async_Buffer_Type;
  80.  
  81.  
  82. VAR                                 (* Port addresses for serial ports *)
  83.  
  84.    Com_Base               : ARRAY[1..MaxComPorts] OF WORD;
  85.  
  86.                                     (* IRQ line for each serial port   *)
  87.  
  88.    Com_Irq                : ARRAY[1..MaxComPorts] OF INTEGER;
  89.  
  90. VAR
  91.    Async_Buffer_Ptr       : Async_Ptr  (* Input buffer address  *);
  92.    Async_OBuffer_Ptr      : Async_Ptr  (* Output buffer address *);
  93.  
  94.    Async_Open_Flag        : BOOLEAN    (* true if port opened               *);
  95.    Async_Port             : INTEGER    (* current open port number (1 -- 4) *);
  96.    Async_Base             : INTEGER    (* base for current open port        *);
  97.    Async_Irq              : INTEGER    (* IRQ for current open port         *);
  98.    Async_RS232            : INTEGER    (* RS232 address for current port    *);
  99.  
  100.    Async_Buffer_Overflow  : BOOLEAN    (* True if buffer overflow has happened *);
  101.    Async_Buffer_Used      : INTEGER    (* Amount of input buffer used so far   *);
  102.    Async_MaxBufferUsed    : INTEGER    (* Maximum amount of input buffer used  *);
  103.  
  104.                                        (* Async_Buffer empty if Head = Tail    *)
  105.    Async_Buffer_Head      : INTEGER    (* Loc in Async_Buffer to put next char *);
  106.    Async_Buffer_Tail      : INTEGER    (* Loc in Async_Buffer to get next char *);
  107.    Async_Buffer_NewTail   : INTEGER    (* For updating tail value              *);
  108.  
  109.    Async_OBuffer_Overflow : BOOLEAN    (* True if buffer overflow has happened *);
  110.    Async_OBuffer_Used     : INTEGER    (* Amount of output buffer used         *);
  111.    Async_MaxOBufferUsed   : INTEGER    (* Max amount of output buffer used     *);
  112.  
  113.                                        (* Async_Buffer empty if Head = Tail    *)
  114.    Async_OBuffer_Head     : INTEGER    (* Loc in Async_Buffer to put next char *);
  115.    Async_OBuffer_Tail     : INTEGER    (* Loc in Async_Buffer to get next char *);
  116.    Async_OBuffer_NewTail  : INTEGER    (* For updating tail value              *);
  117.  
  118.    Async_Buffer_Low       : INTEGER    (* Low point in receive buffer for XON  *);
  119.    Async_Buffer_High      : INTEGER    (* High point in receive buffer for XOFF*);
  120.    Async_Buffer_High_2    : INTEGER    (* Emergency point for XOFF             *);
  121.  
  122.    Async_XOFF_Sent        : BOOLEAN    (* If XOFF sent                      *);
  123.    Async_Send_XOFF        : BOOLEAN    (* TRUE to send XOFF ASAP            *);
  124.    Async_XOFF_Received    : BOOLEAN    (* If XOFF received                  *);
  125.    Async_XOFF_Rec_Display : BOOLEAN    (* If XOFF received                  *);
  126.    Async_XON_Rec_Display  : BOOLEAN    (* If XOFF received                  *);
  127.    Async_Baud_Rate        : WORD       (* Current baud rate                 *);
  128.  
  129.                                     (* Save previous serial interrupt status *)
  130.    Async_Save_IAddr       : POINTER;
  131.    Async_Do_CTS           : BOOLEAN (* TRUE to do clear-to-send checking    *);
  132.    Async_Do_DSR           : BOOLEAN (* TRUE to do data-set-ready checking   *);
  133.    Async_Do_XonXoff       : BOOLEAN (* TRUE to do XON/XOFF flow checking    *);
  134.    Async_Hard_Wired_On    : BOOLEAN (* TRUE if hard-wired connection        *);
  135.    Async_Break_Length     : INTEGER (* Length of break in 1/10 seconds      *);
  136.    Async_Line_Status      : BYTE    (* Line Status Reg at interrupt         *);
  137.    Async_Modem_Status     : BYTE    (* Modem Status Reg at interrupt        *);
  138.    Async_Line_Error_Flags : BYTE    (* Line status bits accumulated         *);
  139.    Async_Buffer_Size      : INTEGER (* Stores input buffer size             *);
  140.    Async_OBuffer_Size     : INTEGER (* Stores output buffer size            *);
  141.    Async_Uart_IER         : INTEGER (* Interrupt enable register address    *);
  142.    Async_Uart_IIR         : INTEGER (* Interrupt ID register address        *);
  143.    Async_Uart_MSR         : INTEGER (* Modem status register address        *);
  144.    Async_Uart_LSR         : INTEGER (* Line status register address         *);
  145.    Async_Output_Delay     : INTEGER (* Delay in ms when output buffer full  *);
  146.    Async_OneMSDelay       : INTEGER (* Loop count value to effect 1 ms delay*);
  147.                                     (* Pointer to Async_Send routine        *)
  148.    Async_Send_Addr        : Async_Ptr;
  149.  
  150.