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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; *** DEF-EQU *** DEF-EQU *** DEF-EQU ***
;
; EQU's, STRUC's, and OTHER
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Modification history *********************************************************
;AN001; D358 New device driver INIT function package 12/07/87 J.K.
;AN002; D493 Undo D358 02/24/88 J.K.
;AN003; D4934 Change ANSI 2F function number to 1Ah 05/20/88 F.G.
;******************************************************************************
IF1 ;
%OUT . �DEF-EQU .INC�
ENDIF ;
ZERO EQU 0H ;
ONE EQU 1H ;
TWO EQU 2H ;
THREE EQU 3H ;
FOUR EQU 4H ;
FIVE EQU 5H ;
SIX EQU 6H ;
SEVEN EQU 7H ;
EIGHT EQU 8H ;
NINE EQU 9H ;
TEN EQU 0AH ;
ELEVEN EQU 0BH ;
TWELVE EQU 0CH ;
;
FAIL EQU 8000H ; fail in designate
;
NOT_CY EQU 0FFFEH ;
CY EQU ONE ;
;
ID_IOCTL EQU 5 ; MAJOR FNCT # FOR 'other' DEVICE
;
RH EQU ES:[DI] ; addressability to Request Header
;
RHC STRUC ; fields common to all request types
DB ? ; length of Request Header
DB ? ; unit code (subunit)
RHC_CMD DB ? ; command code
RHC_STA DW ? ; status
DQ ? ; reserved for DOS
RHC ENDS ; end of common portion
;
CMD_INPUT EQU 4 ; RHC_CMD is INPUT request
;
; Status values for RHC_STA
STAT_DONE EQU 0001H ; function complete - high order byte
STAT_CMDERR EQU 8000H ; Error code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; DEVICE Header DS:[SI] -- to locate the next CON header
; NEXT device header ES:[DI]
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HP EQU DS:[SI] ;
NHD EQU ES:[DI] ;
;
NAME_LEN EQU 8 ;
;
DHS STRUC ;
DH_NEXTO DW ? ; offset of pointer to next header
DH_NEXTS DW ? ; segment of pointer to next header
DW ? ; attribute
DH_STRAO DW ? ; offset to strategy routine
DH_INTRO DW ? ; offset to interrupt routine
DH_NAME DB NAME_LEN DUP(0) ; device name in this header
DHS ENDS ; end of common portion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Request Header for INIT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RH0 STRUC ;
DB (TYPE RHC) DUP (?) ;
;
RH0_UNIT DB ? ; not used for CHAR devices
RH0_ENDO DW ? ; offset of ending address
RH0_ENDS DW ? ; segment of ending address
RH0_BPBA DD ? ; POINTER TO BPB FOR CHAR DEVICES
db ? ;
RH0 ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Request Header for IOCTL
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RH3 STRUC ;
DB (TYPE RHC) DUP (?) ; common portion
;
;
DB ? ; media descriptor
RH3_DTAO DW ? ; offset of transfer address
RH3_DTAS DW ? ; segment of transfer address
RH3_CNT DW ? ; byte count
RH3 ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; IOCTL header format
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RH_IOCTL STRUC ;
STATIC_RH DB 13 DUP(?) ; STANDARD STATIC REQUEST HEADER
MAJOR_F DB ? ; MAJOR FUNCTION CALL (SEE DOS 3.30)
MINOR_F DB ? ; MINOR FUNCTION CALL (SEE DOS 3.30)
CONTENT_SI DW ? ; CONTENTS OF SI
CONTENT_DI DW ? ; CONTENTS OF DI
REQUEST_PACKET DD ? ; POINTER TO GENERIC IOCTL REQ. PACKET
RH_IOCTL ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; DESIGNATE BUFFER FORMAT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DESG_BUFFER STRUC ;
DESG_CARTRIDGE DW ? ; 0=NO CARTRIDGE, 1=CARTRIDGE
DESG_LENGTH DW ? ; LENGTH OF REMAINING HEADER
DESG_N DW ? ; NUMBER OF CP's DESIGNATED
DESG_CP DW ? ; FIRST CP DESIGNATED
DESG_BUFFER ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; INVOKE BUFFER FORMAT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INVK_BUFFER STRUC ;
INVK_LENGTH DW ? ; LENGTH OF REMAINING HEADER
INVK_CP DW ? ; CP TO INVOKE
INVK_BUFFER ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; QUERY LIST BUFFER FORMAT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
QLST_BUFFER STRUC ;
QLST_LENGTH DW ? ; LENGTH OF REMAINING HEADER
QLST_N_HDWR DW ? ; NUMBER OF HARDWARE CP's
QLST_HDWR_CP DW ? ; FIRST HDWR CODE PAGE
QLST_N_DESG DW ? ; NUMBER OF DESIGNATED CP's
QLST_DESG_CP DW ? ; DESINATED CODE PAGES
; ...there is more data to be
; filled in by the DRIVER
QLST_BUFFER ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; PARSER STRUC STATEMENTS
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PARSE_TABLE1 STRUC ; [[[ TABLE 1 ]]]
NUM_DEVICES DW ? ; NUMBER OF DEVICES TO SUPPORT
DEVICE1_OFFSET DW ? ; (hopefully) CON!!!
PARSE_TABLE1 ENDS ;
;
PARSE_TABLE2 STRUC ; [[[ TABLE 2 ]]]
NUM_ITEMS DW ? ; NUMBER OF ITEMS CREATED BY THE
OFFSET_LIST DW ? ; THE 1ST OFFSET OF [ TABLE 2 ]
PARSE_TABLE2 ENDS ; PARSER!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; CODE PAGE POINTER STRUCTURE
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CP_PNTER_STRUC STRUC ;
HDWR_CP_STRUC DW ? ;
DESG_CP_STRUC DW ? ;
FONT_CP_STRUC DW ? ;
WRITE_DATA_STRUC DW ? ;
FONT_DATA_STRUC DW ? ;
CP_PNTER_STRUC ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; CON data structure CS:[BX]
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BUF EQU CS:[BX] ;
; STATES
BUF_DATA STRUC ;
DEV_HDRO DW -1 ; device driver header offset
DEV_HDRS DW -1 ;
CON_STRAO DW -1 ; dos CON strategy offset
CON_STRAS DW -1 ;
CON_INTRO DW -1 ; dos CON strategy offset
CON_INTRS DW -1 ;
RH_PTRO DW -1 ; request header offset
RH_PTRS DW -1 ; segment
STATE DW ? ;
STATUS DW ? ;
BUF_DATA ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; General Constants
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_2F_LOW EQU (4*2FH) ; INTERRUPT 2FH CON/KEYB COMMUNICATION
INT_2F_HI EQU (4*2FH)+2 ;
INT_43_LOW EQU (4*43H) ; INTERRUPT 43H 0-255 CHARACTER VECTOR
INT_43_HI EQU (4*43H)+2 ;
INT_44_LOW EQU (4*44H) ; INTERRUPT 44H 0-255 CHARACTER VECTOR
INT_44_HI EQU (4*44H)+2 ;
INT_1F_LOW EQU (4*1FH) ; INTERRUPT 1FH EXTENDED CHARACTER SUPPORT
INT_1F_HI EQU (4*1FH)+2 ;
INT_10_LOW EQU (4*10H) ; INTERRUPT 10H fix FOR PALACE
INT_10_HI EQU (4*10H)+2 ;
GET_MODE EQU 0FH ; WGR ;AN000;
ON EQU 1 ; WGR ;AN000;
OFF EQU 0 ; WGR ;AN000;
RECALC_ON EQU 0010H ; WGR ;AN000;
VIDEO_CTRL EQU 487H ; WGR ;AN000;
ANSI_BUF_SIZE EQU 14 ; WGR ;AN000;
DEFAULT_LEN EQU 25 ; WGR ;AN000;
NUMBER EQU 1 ; WGR ;AN000;
STRING EQU 3 ; WGR ;AN000;
COMPLEX EQU 4 ; WGR ;AN000;
RC_EOL EQU -1 ; WGR ;AN000;
RC_NO_ERROR EQU 0 ; WGR ;AN000;
FUNC_CALL EQU 1BH ; WGR ;AN000;
VGA_FOUND EQU 00000001B ; WGR ;AN000;
EGA_FOUND EQU 00000001B ; WGR ;AN000;
LCD_FOUND EQU 00000010B ; WGR ;AN000;
CGA_FOUND EQU 00000100B ; WGR ;AN000;
MONO_FOUND EQU 00001000B ; WGR ;AN000;
ALT_SELECT EQU 12H ; WGR ;AN000;
EGA_INFO_CALL EQU 10H ; WGR ;AN000;
GET_SYS_ID EQU 0C0H ; WGR ;AN000;
GET_STATUS EQU 43H ; WGR ;AN000;
LCD_MODEL EQU 0F9H ; WGR ;AN000;
COLOR_ADDRESS EQU 0B800H ; WGR ;AN000;
MONO_ADDRESS EQU 0B000H ; WGR ;AN000;
ERROR_1 EQU 2 ; WGR ;AN000;
ERROR_2 EQU 12 ; WGR ;AN000;
ERROR_3 EQU 8 ; WGR ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; *** INT 2Fh used
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANSI_2F EQU 1Ah ; WGR Muliflex number for ANSI ;AC003;
;Catagory code
IOCTL_2F EQU 1h ;
DA_INFO_2F EQU 2h ;J.K. Information passing to ANSI.
;Subfunction code for IOCTL_2F
GET_SUBFUNC EQU 7FH ; WGR Same structure as GET_IOCTL(ANSI);AN000;
;Info Struture for DA_INFO_2F. (DS:DX point to this packet)
;J.K. Note: For DOS 4.00, DA_INFO_PACKET is used to signal ANSI.SYS that
;DISPLAY.SYS is calling/finishing INT 10h SET MODE call. ANSI.SYS needs this
;infomration since it also hooks INT 10h vector.
;For this DA_SETMODE_FLAG purpose, DA_INFO_LEVEL and DA_INFO_DIRECTION should always be
;set to 0. This can be extended for another information passing scheme between
;DISPLAY.SYS and ANSI.SYS in the future version.
;For DA_SETMODE_FLAG, DISPLAY.SYS should be extremely careful that when it calls
;with DA_SETMODE_FLAG =1, then it should calls with DA_SETMODE_FLAG=0
;when it finished INT 10h function call. Otherwise, the system goes .....
DA_INFO_PACKET struc
DA_INFO_LEVEL db 0 ; 0 for DA_SETMODE_FLAG, 1 for DA_OPTION_L_STATE query (for OS2 compat. box).
DA_SETMODE_FLAG db 0 ; 1: DISPLAY.SYS is calling INT 10h call, SET MODE. 0= finished.
DA_OPTION_L_STATE db 0 ; on return from ANSI, 1 = ANSI /L option active, 0 = inactive.
DA_INFO_PACKET ends
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; *** DEF-EQU *** DEF-EQU *** DEF-EQU ***
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Information Block Structure
; (for functionality call)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INFO_BLOCK STRUC ; info block for functionality call ;AN000;
STATIC_ADDRESS DD ? ; address of static functionality table;AN000;
DB 33 DUP(?) ; don't care ;AN000;
ACTIVE_DISPLAY DB ? ; active display code ;AN000;
ALT_DISPLAY DB ? ; alternate display code ;AN000;
DB 3 DUP(?) ; don't care ;AN000;
CURRENT_SCANS DB ? ; current number of scan lines ;AN000;
DB 2 DUP(?) ; don't care ;AN000;
MISC_INFO DB ? ; miscellaneous state information ;AN000;
DB 18 DUP(?) ; don't care ;AN000;
INFO_BLOCK ENDS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Structure of System ID call return block
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SYS_ID STRUC ; format of return system config data ;AN000;
DW ? ; don't care ;AN000;
MODEL_BYTE DB ? ; model byte ;AN000;
SYS_ID ENDS ; ;AN000;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|