home *** CD-ROM | disk | FTP | other *** search
- (*----------------------------------------------------------------------*)
- (* *)
- (* COMMUNICATIONS HARDWARE ADDRESSES *)
- (* *)
- (* These are specific to IBM PCs and close compatibles. *)
- (* *)
- (*----------------------------------------------------------------------*)
-
- CONST
-
- UART_THR = $00; (* offset from base of UART Registers for IBM PC *)
- UART_RBR = $00;
- UART_IER = $01;
- UART_IIR = $02;
- UART_LCR = $03;
- UART_MCR = $04;
- UART_LSR = $05;
- UART_MSR = $06;
-
- I8088_IMR = $21; (* port address of the Interrupt Mask Register *)
-
- COM1_Base = $03F8; (* port addresses for the UART *)
- COM2_Base = $02F8;
- COM3_Base = $03E8;
- COM4_Base = $02E8;
-
- COM1_Irq = 4; (* Interrupt line for the UART *)
- COM2_Irq = 3;
- COM3_Irq = 4;
- COM4_Irq = 3;
-
- RS232_Base = $0400 (* Address of RS 232 com port pointer *);
-
- MaxComPorts = 4 (* Four ports allowed by this code *);
-
- (* STRUCTURED *) CONST
- (* Port addresses of each com port *)
-
- Default_Com_Base : ARRAY[1..MaxComPorts] OF WORD =
- ( COM1_Base, COM2_Base, COM3_Base, COM4_Base );
-
- (* IRQ line for each port *)
-
- Default_Com_Irq : ARRAY[1..MaxComPorts] OF INTEGER =
- ( COM1_Irq, COM2_Irq, COM3_Irq, COM4_Irq );
-
- (*----------------------------------------------------------------------*)
- (* *)
- (* COMMUNICATIONS BUFFER VARIABLES *)
- (* *)
- (* The communications buffers are implemented as circular (ring) *)
- (* buffers, or double-ended queues. The asynchronous I/O routines *)
- (* enter characters in the receive buffer as they arrive at the *)
- (* serial port. Higher-level routines may extract characters from *)
- (* the receive buffer at leisure. Higher-level routines insert *)
- (* characters into the send buffer. The asynchronous I/O routines *)
- (* then send characters out the serial port when possible. *)
- (* *)
- (*----------------------------------------------------------------------*)
-
- CONST
-
- TimeOut = 256 (* TimeOut value *);
- Async_XON = ^Q (* XON character *);
- Async_XOFF = ^S (* XOFF character *);
-
- Async_Overrun_Error = 2 (* overrun *);
- Async_Parity_Error = 4 (* parity error *);
- Async_Framing_Error = 8 (* framing error *);
- Async_Break_Found = 16 (* break interrupt *);
-
- Async_CTS = $10 (* Clear to send *);
- Async_DSR = $20 (* Data set ready *);
-
- TYPE
- (* I/O buffer type for serial port *)
-
- Async_Buffer_Type = ARRAY[0..1] OF CHAR;
- Async_Ptr = ^Async_Buffer_Type;
-
-
- VAR (* Port addresses for serial ports *)
-
- Com_Base : ARRAY[1..MaxComPorts] OF WORD;
-
- (* IRQ line for each serial port *)
-
- Com_Irq : ARRAY[1..MaxComPorts] OF INTEGER;
-
- VAR
- Async_Buffer_Ptr : Async_Ptr (* Input buffer address *);
- Async_OBuffer_Ptr : Async_Ptr (* Output buffer address *);
-
- Async_Open_Flag : BOOLEAN (* true if port opened *);
- Async_Port : INTEGER (* current open port number (1 -- 4) *);
- Async_Base : INTEGER (* base for current open port *);
- Async_Irq : INTEGER (* IRQ for current open port *);
- Async_RS232 : INTEGER (* RS232 address for current port *);
-
- Async_Buffer_Overflow : BOOLEAN (* True if buffer overflow has happened *);
- Async_Buffer_Used : INTEGER (* Amount of input buffer used so far *);
- Async_MaxBufferUsed : INTEGER (* Maximum amount of input buffer used *);
-
- (* Async_Buffer empty if Head = Tail *)
- Async_Buffer_Head : INTEGER (* Loc in Async_Buffer to put next char *);
- Async_Buffer_Tail : INTEGER (* Loc in Async_Buffer to get next char *);
- Async_Buffer_NewTail : INTEGER (* For updating tail value *);
-
- Async_OBuffer_Overflow : BOOLEAN (* True if buffer overflow has happened *);
- Async_OBuffer_Used : INTEGER (* Amount of output buffer used *);
- Async_MaxOBufferUsed : INTEGER (* Max amount of output buffer used *);
-
- (* Async_Buffer empty if Head = Tail *)
- Async_OBuffer_Head : INTEGER (* Loc in Async_Buffer to put next char *);
- Async_OBuffer_Tail : INTEGER (* Loc in Async_Buffer to get next char *);
- Async_OBuffer_NewTail : INTEGER (* For updating tail value *);
-
- Async_Buffer_Low : INTEGER (* Low point in receive buffer for XON *);
- Async_Buffer_High : INTEGER (* High point in receive buffer for XOFF*);
- Async_Buffer_High_2 : INTEGER (* Emergency point for XOFF *);
-
- Async_XOFF_Sent : BOOLEAN (* If XOFF sent *);
- Async_Send_XOFF : BOOLEAN (* TRUE to send XOFF ASAP *);
- Async_XOFF_Received : BOOLEAN (* If XOFF received *);
- Async_XOFF_Rec_Display : BOOLEAN (* If XOFF received *);
- Async_XON_Rec_Display : BOOLEAN (* If XOFF received *);
- Async_Baud_Rate : WORD (* Current baud rate *);
-
- (* Save previous serial interrupt status *)
- Async_Save_IAddr : POINTER;
- Async_Do_CTS : BOOLEAN (* TRUE to do clear-to-send checking *);
- Async_Do_DSR : BOOLEAN (* TRUE to do data-set-ready checking *);
- Async_Do_XonXoff : BOOLEAN (* TRUE to do XON/XOFF flow checking *);
- Async_Hard_Wired_On : BOOLEAN (* TRUE if hard-wired connection *);
- Async_Break_Length : INTEGER (* Length of break in 1/10 seconds *);
- Async_Line_Status : BYTE (* Line Status Reg at interrupt *);
- Async_Modem_Status : BYTE (* Modem Status Reg at interrupt *);
- Async_Line_Error_Flags : BYTE (* Line status bits accumulated *);
- Async_Buffer_Size : INTEGER (* Stores input buffer size *);
- Async_OBuffer_Size : INTEGER (* Stores output buffer size *);
- Async_Uart_IER : INTEGER (* Interrupt enable register address *);
- Async_Uart_IIR : INTEGER (* Interrupt ID register address *);
- Async_Uart_MSR : INTEGER (* Modem status register address *);
- Async_Uart_LSR : INTEGER (* Line status register address *);
- Async_Output_Delay : INTEGER (* Delay in ms when output buffer full *);
- Async_OneMSDelay : INTEGER (* Loop count value to effect 1 ms delay*);
- (* Pointer to Async_Send routine *)
- Async_Send_Addr : Async_Ptr;
-