Skip to content

Latest commit

 

History

History
141 lines (114 loc) · 7.17 KB

gloasync.inc

File metadata and controls

141 lines (114 loc) · 7.17 KB
 
Nov 18, 2000
Nov 18, 2000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
(*---------------------------------------------------------------------**
** **
** 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 }
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
async_buffer_type = array[0..1] of char; { I/O buffer type for serial port }
async_ptr = ^async_buffer_type;
var
com_base:array[1..maxcomports] of word; { Port addresses for serial ports }
com_irq:array[1..maxcomports] of integer; { IRQ line for each serial port }
const async_buffer_max=5120;
var
async_buffer:array[0..async_buffer_max] of char;
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, { current open port number (1 -- 4) }
async_base, { base for current open port }
async_irq, { 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, { 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, { Loc in Async_Buffer to put next char }
async_buffer_tail, { 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, { Amount of output buffer used }
async_maxobufferused : integer; { Max amount of output buffer used }
{ Async_OBuffer empty if Head = Tail }
async_obuffer_head, { Loc in Async_OBuffer to put next char }
async_obuffer_tail, { Loc in Async_OBuffer to get next char }
async_obuffer_newtail : integer; { For updating tail value }
async_buffer_low, { Low point in receive buffer for XON }
async_buffer_high, { High point in receive buffer for XOFF}
async_buffer_high_2 : integer; { Emergency point for XOFF }
async_xoff_sent, { If XOFF sent }
async_send_xoff, { TRUE to send XOFF ASAP }
async_xoff_received, { If XOFF received }
async_xoff_rec_display, { If XOFF received }
async_xon_rec_display : boolean; { If XOFF received }
async_baud_rate : word; { Current baud rate }
async_save_iaddr : pointer; { Save previous serial interrupt status}
async_do_cts, { TRUE to do clear-to-send checking }
async_do_dsr, { TRUE to do data-set-ready checking }
async_do_xonxoff, { 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, { Line Status Reg at interrupt }
async_modem_status, { Modem Status Reg at interrupt }
async_line_error_flags : byte; { Line status bits accumulated }
async_buffer_size, { Stores input buffer size }
async_obuffer_size, { Stores output buffer size }
async_uart_IER, { Interrupt enable register address }
async_uart_IIR, { Interrupt ID register address }
async_uart_MSR, { Modem status register address }
async_uart_LSR, { Line status register address }
async_output_delay, { Delay in ms when output buffer full }
async_onemsdelay : integer; { Loop count value to effect 1 ms delay}
async_send_addr : async_ptr; { pointer to Async_Send routine }