summaryrefslogtreecommitdiff
path: root/v4.0/src/DEV/ANSI/ANSIINIT.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/DEV/ANSI/ANSIINIT.ASM')
-rw-r--r--v4.0/src/DEV/ANSI/ANSIINIT.ASM413
1 files changed, 413 insertions, 0 deletions
diff --git a/v4.0/src/DEV/ANSI/ANSIINIT.ASM b/v4.0/src/DEV/ANSI/ANSIINIT.ASM
new file mode 100644
index 0000000..352150e
--- /dev/null
+++ b/v4.0/src/DEV/ANSI/ANSIINIT.ASM
@@ -0,0 +1,413 @@
1PAGE ,132
2TITLE ANSI Console device CON$INIT routine
3
4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5;
6; MODULE_NAME: CON$INIT
7;
8; FUNCTION:
9; THIS PROCEDURE PERFORMS ALL NECESSARY INITIALIZATION ROUTINES
10; FOR ANSI.SYS.
11;
12; THIS ROUTINE WAS SPLIT FROM THE ORIGINAL ANSI.ASM SOURCE FILE
13; FOR RELEASE 4.00 OF DOS. ALL CHANGED LINES HAVE BEEN MARKED WITH
14; WGR. NEW PROCS HAVE BEEN MARKED AS SUCH.
15;
16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17;AN001; P1767 VIDEO_MODE_TABLE not initialized correctly 10/16/87 J.K.
18;AN002; P2617 Order dependecy problem with Display.sys 11/23/87 J.K.
19;AN003; D479 An option to disable the extended keyboard functions 02/12/88 J.K.
20;AN004; D493 New INIT request structure for error message 02/25/88 J.K.
21;-------------------------------------------------------------------------------
22
23INCLUDE ANSI.INC ; WGR equates and strucs ;AN000;
24.XLIST
25INCLUDE STRUC.INC ; WGR structured macros ;AN000;
26.LIST
27
28PUBLIC CON$INIT ; WGR ;AN000;
29
30
31CODE SEGMENT PUBLIC BYTE
32 ASSUME CS:CODE,DS:CODE
33
34EXTRN VIDEO_MODE_TABLE:BYTE ; WGR ;AN000;
35EXTRN FUNC_INFO:BYTE ; WGR ;AN000;
36EXTRN HDWR_FLAG:WORD ; WGR ;AN000;
37EXTRN VIDEO_TABLE_MAX:ABS ; WGR ;AN000;
38EXTRN SCAN_LINES:BYTE ; WGR ;AN000;
39EXTRN PTRSAV:DWORD ; WGR ;AN000;
40EXTRN PARSE_PARM:NEAR ; WGR ;AN000;
41EXTRN ERR2:NEAR ; WGR ;AN000;
42EXTRN EXT_16:BYTE ; WGR ;AN000;
43EXTRN BRKADR:ABS ; WGR ;AN000;
44EXTRN BRKKY:NEAR ; WGR ;AN000;
45EXTRN COUT:NEAR ; WGR ;AN000;
46EXTRN BASE:WORD ; WGR ;AN000;
47EXTRN MODE:BYTE ; WGR ;AN000;
48EXTRN MAXCOL:BYTE ; WGR ;AN000;
49EXTRN TRANS:ABS ; WGR ;AN000;
50EXTRN STATUS:ABS ; WGR ;AN000;
51EXTRN EXIT:NEAR ; WGR ;AN000;
52EXTRN MAX_SCANS:BYTE ; WGR ;AN000;
53EXTRN ROM_INT10:WORD ; WGR ;AN000;
54EXTRN INT10_COM:NEAR ; WGR ;AN000;
55EXTRN ROM_INT2F:WORD ; WGR ;AN000;
56EXTRN INT2F_COM:NEAR ; WGR ;AN000;
57EXTRN ABORT:BYTE ; WGR ;AN000;
58extrn Display_Loaded_Before_me:byte ;AN002;Defined in IOCTL.ASM
59extrn Switch_K:Byte ;AN003;
60
61INCLUDE ANSIVID.INC ; WGR video tables data ;AN000;
62
63CON$INIT:
64 LDS BX,CS:[PTRSAV] ; WGR establish addressability to request header ;AC000;
65 LDS SI,[BX].ARG_PTR ; WGR DS:SI now points to rest of DEVICE=statement;AN000;
66 CALL PARSE_PARM ; WGR parse DEVICE= command line ;AN000;
67 JNC CONT_INIT ; WGR no error in parse...continue install ;AN000;
68 LDS BX,CS:[PTRSAV] ; WGR prepare to abort install ;AC000;
69 XOR AX,AX ; WGR ;AC000;
70 MOV [BX].NUM_UNITS,AL ; WGR set number of units to zero ;AC000;
71 MOV [BX].END_ADDRESS_O,AX ; WGR set ending address offset to 0 ;AC000;
72 MOV [BX].END_ADDRESS_S,CS ; WGR set ending address segment to CS ;AC000;
73 mov word ptr [bx].CONFIG_ERRMSG, -1 ;AN004; Let IBMBIO display "Error in CONFIG.SYS..".
74 MOV AX,UNKNOWN_CMD ; WGR set error in status ;AC000;
75 MOV WORD PTR [BX].STATUS,AX ; WGR set error status ;AC000;
76 JMP ERR2 ; WGR prepare to exit ;AN000;
77
78CONT_INIT: ; WGR ;AN000;
79 PUSH CS ; WGR ;AN000;
80 POP DS ; WGR restore DS to ANSI segment ;AN000;
81 MOV AX,ROM_BIOS ; WGR ;AN000;
82 MOV ES,AX ; WGR DS now points to BIOS data area ;AN000;
83 MOV AH,ES:[KBD_FLAG_3] ; WGR load AH with KBD_FLAG_3 ;AN000;
84 .IF <BIT AH AND EXT16_FLAG> AND ; WGR see if extended INT16 is loaded ;AN000;
85 .IF <Switch_K EQ OFF> ;The user does not want to disable the extended INT 16h ;AN003;
86 MOV EXT_16,ON ; WGR extended INT16 available, set flag ;AN000;
87 .ENDIF ; WGR ;AN000;
88 CALL DET_HDWR ; WGR procedure to determine video hardware status;AN000;
89 .IF <HDWR_FLAG GE MCGA_ACTIVE> ; WGR if we have EGA or better then.. ;AN000;
90 MOV AH,ALT_SELECT ; WGR issue select alternate print.. ;AN000;
91 MOV BL,ALT_PRT_SC ; WGR screen routine call.. ;AN000;
92 INT 10H ; WGR ;AN000;
93 .ENDIF
94 CALL LOAD_INT10 ; WGR load interrupt 10h handler ;AN000;
95 CALL LOAD_INT2F ; WGR load interrupt 2Fh handler ;AN000;
96 int 11h
97 and al,00110000b
98 cmp al,00110000b
99 jnz iscolor
100 mov [base],0b000h ;look for bw card
101iscolor:
102 cmp al,00010000b ;look for 40 col mode
103 ja setbrk
104 mov [mode],0
105 mov [maxcol],39
106
107setbrk:
108 XOR BX,BX
109 MOV DS,BX
110 MOV BX,BRKADR
111 MOV WORD PTR [BX],OFFSET BRKKY
112 MOV WORD PTR [BX+2],CS
113
114 MOV BX,29H*4
115 MOV WORD PTR [BX],OFFSET COUT
116 MOV WORD PTR [BX+2],CS
117
118 LDS BX,CS:[PTRSAV]
119 MOV WORD PTR [BX].TRANS,OFFSET CON$INIT ;SET BREAK ADDRESS
120 MOV [BX].TRANS+2,CS
121 JMP EXIT
122
123
124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
125;
126; PROCEDURE_NAME: DET_HDWR
127;
128; FUNCTION:
129; THIS CODE DETERMINES WHAT VIDEO HARDWARE IS AVAILABLE. THIS INFORMATION
130; IS USED TO LOAD APPROPRIATE VIDEO TABLES INTO MEMORY FOR USE IN THE
131; GENERIC IOCTL.
132;
133; AT ENTRY:
134;
135; AT EXIT:
136; NORMAL: FLAG WORD WILL CONTAIN BITS SET FOR THE APPROPRIATE
137; TABLES. IN ADDITION, FOR VGA SUPPORT, A FLAG BYTE
138; WILL CONTAIN THE AVAILABLE SCAN LINE SETTINGS FOR THE
139; INSTALLED ADAPTER.
140; VIDEO TABLES WILL BE LOADED INTO MEMORY REFLECTING
141; APPLICABLE MODE SETTINGS AND SCREEN LINE LENGTHS.
142;
143; ERROR: N/A
144;
145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
146
147DET_HDWR PROC NEAR ;AN000;
148 MOV AH,GET_SYS_ID ; see if this is a Convertible ;AN000;
149 INT 15H ; ;AN000;
150 .IF <ES:[BX].MODEL_BYTE EQ LCD_MODEL> AND ; yes...check for LCD attached? ;AN000;
151 MOV AH,GET_STATUS ; system status will tell us ;AN000;
152 INT 15H ; ;AN000;
153 .IF <BIT AL NAND ON> ; if bit 0 = 0 then LCD.. ;AN000;
154 OR HDWR_FLAG,LCD_ACTIVE ; so ...set hdwr flag and... ;AN000;
155 LEA SI,COLOR_TABLE ; ;AN000;
156 MOV CX,COLOR_NUM ; load color table (for LCD) ;AN000;
157 CALL LOAD_TABLE ; ;AN000;
158 LEA SI,MONO_TABLE ; and mono table ;AN000;
159 MOV CX,MONO_NUM ; ;AN000;
160 CALL LOAD_TABLE ; ;AN000;
161 .ELSE ; not LCD...check for CGA and mono ;AN000;
162 MOV AX,MONO_ADDRESS ; write to mono buffer to see if present ;AN000;
163 CALL CHECK_BUF ; ;AN000;
164 .IF <AH EQ AL> ; if present then... ;AN000;
165 OR HDWR_FLAG,MONO_ACTIVE ; set hdwr flag and.. ;AN000;
166 LEA SI,MONO_TABLE ; ;AN000;
167 MOV CX,MONO_NUM ; load mono table ;AN000;
168 CALL LOAD_TABLE ; ;AN000;
169 .ENDIF ; ;AN000;
170 MOV AX,COLOR_ADDRESS ; write to CGA buffer to see if present ;AN000;
171 CALL CHECK_BUF ; ;AN000;
172 .IF <AH EQ AL> ; if present then.. ;AN000;
173 OR HDWR_FLAG,CGA_ACTIVE ; set hdwr flag and... ;AN000;
174 LEA SI,COLOR_TABLE ; ;AN000;
175 MOV CX,COLOR_NUM ; load color table ;AN000;
176 CALL LOAD_TABLE ; ;AN000;
177 .ENDIF ; ;AN000;
178 .ENDIF ; ;AN000;
179 PUSH CS ; setup addressiblity for ;AN000;
180 POP ES ; functionality call ;AN000;
181 XOR AX,AX ; ;AN000;
182 MOV AH,FUNC_CALL ; functionality call ;AN000;
183 XOR BX,BX ; implementation type 0 ;AN000;
184 LEA DI,FUNC_INFO ; block to hold data ;AN000;
185 INT 10H ; ;AN000;
186 .IF <AL EQ FUNC_CALL> ; if call supported then.. ;AN000;
187 .IF <BIT [DI].MISC_INFO AND ON> ; test bit to see if VGA ;AN000;
188 OR HDWR_FLAG,VGA_ACTIVE ; yes ....so ;AN000;
189 LEA SI,COLOR_TABLE ; set hdwr flag and... ;AN000;
190 MOV CX,COLOR_NUM ; load color table +.. ;AN000;
191 CALL LOAD_TABLE ; ;AN000;
192 LEA SI,VGA_TABLE ; load VGA table ;AN000;
193 MOV CX,VGA_NUM ; ;AN000;
194 CALL LOAD_TABLE ; ;AN000;
195 .ELSE ; not VGA...then must be MCGA ;AN000;
196 .IF <[DI].ACTIVE_DISPLAY EQ MOD30_MONO> OR ;AN000;
197 .IF <[DI].ACTIVE_DISPLAY EQ MOD30_COLOR> OR ;AN000;
198 .IF <[DI].ALT_DISPLAY EQ MOD30_MONO> OR ;AN000;
199 .IF <[DI].ALT_DISPLAY EQ MOD30_COLOR> ;AN000;
200 OR HDWR_FLAG,MCGA_ACTIVE ; so...set hdwr flag and... ;AN000;
201 LEA SI,COLOR_TABLE ; ;AN000;
202 MOV CX,COLOR_NUM ; load color table +.. ;AN000;
203 CALL LOAD_TABLE ; ;AN000;
204 LEA SI,MCGA_TABLE ; load MCGA table ;AN000;
205 MOV CX,MCGA_NUM ; ;AN000;
206 CALL LOAD_TABLE ; ;AN000;
207 .ENDIF ; ;AN000;
208 .ENDIF ; ;AN000;
209 MOV AL,[DI].CURRENT_SCANS ; copy current scan line setting.. ;AN000;
210 MOV MAX_SCANS,AL ; as maximum text mode scan setting. ;AN000;
211 LES DI,[DI].STATIC_ADDRESS ; point to static functionality table ;AN000;
212 MOV AL,ES:[DI].SCAN_TEXT ; load available scan line flag byte.. ;AN000;
213 MOV SCAN_LINES,AL ; and store it in resident data. ;AN000;
214 .ELSE ; call not supported..try EGA ;AN000;
215 MOV AH,ALT_SELECT ; alternate select call ;AN000;
216 MOV BL,EGA_INFO ; get EGA information subcall ;AN000;
217 INT 10H ; ;AN000;
218 .IF <BL NE EGA_INFO> ; check if call was valid ;AN000;
219 .IF <BH EQ MONOCHROME> ; yes...check for monochrome ;AN000;
220 OR HDWR_FLAG,E5151_ACTIVE ; ..5151 found so set hdwr flag and.. ;AN000;
221 LEA SI,EGA_5151_TABLE ; ;AN000;
222 MOV CX,EGA_5151_NUM ; load 5151 table. ;AN000;
223 CALL LOAD_TABLE ; ;AN000;
224 .ELSE ; ;AN000;
225 AND CL,0FH ; clear upper nibble of switch setting byte ;AN000;
226 .IF <CL EQ NINE> OR ; test for switch settings of 5154 ;AN000;
227 .IF <CL EQ THREE> ; ..5154 found.. ;AN000;
228 OR HDWR_FLAG,E5154_ACTIVE ; so..set hdwr flag and... ;AN000;
229 LEA SI,COLOR_TABLE ; ;AN000;
230 MOV CX,COLOR_NUM ; load color table +.. ;AN000;
231 CALL LOAD_TABLE ; ;AN000;
232 LEA SI,EGA_5154_TABLE ; load 5154 table ;AN000;
233 MOV CX,EGA_5154_NUM ; ;AN000;
234 CALL LOAD_TABLE ; ;AN000;
235 .ELSE ; 5154 not found...must be 5153... ;AN000;
236 OR HDWR_FLAG,E5153_ACTIVE ; so..set hdwr flag and... ;AN000;
237 LEA SI,COLOR_TABLE ; ;AN000;
238 MOV CX,COLOR_NUM ; load color table +.. ;AN000;
239 CALL LOAD_TABLE ; ;AN000;
240 LEA SI,EGA_5153_TABLE ; load 5153 table ;AN000;
241 MOV CX,EGA_5153_NUM ; ;AN000;
242 CALL LOAD_TABLE ; ;AN000;
243 .ENDIF ; ;AN000;
244 .ENDIF ; ;AN000;
245 .ENDIF ; ;AN000;
246 .ENDIF ; ;AN000;
247 RET
248DET_HDWR ENDP
249
250
251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
252;
253; PROCEDURE_NAME: CHECK_BUF
254;
255; FUNCTION:
256; THIS PROCEDURE WRITES TO THE VIDEO BUFFER AND READS THE DATA BACK
257; AGAIN TO DETERMINE THE EXISTANCE OF THE VIDEO CARD.
258;
259; AT ENTRY:
260;
261; AT EXIT:
262; NORMAL: AH EQ AL IF BUFFER PRESENT
263; AH NE AL IF NO BUFFER
264;
265; ERROR: N/A
266;
267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
268
269CHECK_BUF PROC NEAR ; write to video buffer to see if it is present ;AN000;
270 PUSH DS ; ;AN000;
271 MOV DS,AX ; load DS with address of buffer ;AN000;
272 MOV CH,DS:0 ; save buffer information (if present) ;AN000;
273 MOV AL,55H ; prepare to write sample data ;AN000;
274 MOV DS:0,AL ; write to buffer ;AN000;
275 PUSH BX ; terminate the bus so that lines.. ;AN000;
276 POP BX ; are reset ;AN000;
277 MOV AH,DS:0 ; bring sample data back... ;AN000;
278 MOV DS:0,CH ; repair damage to buffer ;AN000;
279 POP DS ; ;AN000;
280 RET ;AN000;
281CHECK_BUF ENDP
282
283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
284;
285; PROCEDURE_NAME: LOAD_TABLE
286;
287; FUNCTION:
288; THIS PROCEDURE COPIES ONE OF THE VIDEO TABLES INTO RESIDENT DATA.
289; IT MAY BE REPEATED TO LOAD SEVERAL TABLES INTO THE SAME DATA SPACE.
290; MATCHING MODES WILL BE OVERWRITTEN...THEREFORE..CARE MUST BE TAKEN
291; IN LOAD ORDERING.
292;
293; AT ENTRY:
294; SI: POINTS TO TOP OF TABLE TO COPY
295; CX: NUMBER OF RECORDS TO COPY
296;
297; AT EXIT:
298; NORMAL: TABLE POINTED TO BY SI IS COPIED INTO RESIDENT DATA AREA
299;
300; ERROR: N/A
301;
302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
303
304LOAD_TABLE PROC NEAR ;AN000;
305 PUSH DI ; save DI ;AN000;
306 PUSH ES ; and ES ;AN000;
307 PUSH CS ; setup ES to code segment ;AN000;
308 POP ES ; ;AN000;
309 LEA DI,VIDEO_MODE_TABLE ; point DI to resident video table ;AN000;
310 .WHILE <CX NE 0> AND ; do for as many records as there are ;AN000;
311 .WHILE <DI LT VIDEO_TABLE_MAX> ; check to ensure other data not overwritten ;AN000;
312 MOV AL,[DI].V_MODE ; prepare to check resident table ;AN000;
313 .IF <AL NE UNOCCUPIED> AND ; if this spot is occupied...and ;AN000;
314 .IF <AL NE [SI].V_MODE> ; ...is not the same mode then... ;AN000;
315 ADD DI,TYPE MODE_TABLE ; do not touch...go to next mode ;AN000;
316 .ELSE ; can write at this location ;AN000;
317 PUSH CX ; save record count ;AN000;
318 MOV CX,TYPE MODE_TABLE ; load record length ;AN000;
319 REP MOVSB ; copy record to resident data ;AN000;
320 lea DI,VIDEO_MODE_TABLE ;AN001; Set DI to the top of the target again.
321 POP CX ; restore record count and.. ;AN000;
322 DEC CX ; decrement ;AN000;
323 .ENDIF ; ;AN000;
324 .ENDWHILE ; ;AN000;
325 POP ES ; restore.. ;AN000;
326 POP DI ; registers ;AN000;
327 RET ; ;AN000;
328LOAD_TABLE ENDP
329
330
331;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
332;
333; PROCEDURE_NAME: LOAD_INT10
334;
335; FUNCTION:
336; THIS PROCEDURE LOADS THE INTERRUPT HANDLER FOR INT10H
337;
338; AT ENTRY:
339;
340; AT EXIT:
341; NORMAL: INTERRUPT 10H VECTOR POINTS TO INT10_COM. OLD INT 10H
342; VECTOR STORED.
343;
344; ERROR: N/A
345;
346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
347
348LOAD_INT10 PROC NEAR ;AN000;
349 PUSH ES ;AN000;
350 XOR AX,AX ; point ES to low.. ;AN000;
351 MOV ES,AX ; memory. ;AN000;
352 MOV CX,ES:WORD PTR INT10_LOW ; store original.. ;AN000;
353 MOV CS:ROM_INT10,CX ; interrupt 10h.. ;AN000;
354 MOV CX,ES:WORD PTR INT10_HI ; location.. ;AN000;
355 MOV CS:ROM_INT10+2,CX ; ;AN000;
356 CLI ; ;AN000;
357 MOV ES:WORD PTR INT10_LOW,OFFSET INT10_COM ; replace vector.. ;AN000;
358 MOV ES:WORD PTR INT10_HI,CS ; with our own.. ;AN000;
359 STI ; ;AN000;
360 mov ax, DISPLAY_CHECK ;AN002;DISPLAY.SYS already loaded?
361 int 2fh ;AN002;
362 cmp al, INSTALLED ;AN002;
363 jne L_INT10_Ret ;AN002;
364 mov cs:Display_Loaded_Before_Me,1 ;AN002;
365L_INT10_Ret: ;AN002;
366 POP ES ; ;AN000;
367 RET ; ;AN000;
368LOAD_INT10 ENDP
369
370
371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
372;
373; PROCEDURE_NAME: LOAD_INT2F
374;
375; FUNCTION:
376; THIS PROCEDURE LOADS THE INTERRUPT HANDLER FOR INT2FH
377;
378; AT ENTRY:
379;
380; AT EXIT:
381; NORMAL: INTERRUPT 2FH VECTOR POINTS TO INT2F_COM. OLD INT 2FH
382; VECTOR STORED.
383;
384; ERROR: N/A
385;
386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
387
388LOAD_INT2F PROC NEAR ;AN000;
389 PUSH ES ;AN000;
390 XOR AX,AX ; point ES to low.. ;AN000;
391 MOV ES,AX ; memory. ;AN000;
392 MOV AX,ES:WORD PTR INT2F_LOW ; store original.. ;AN000;
393 MOV CS:ROM_INT2F,AX ; interrupt 2Fh.. ;AN000;
394 MOV CX,ES:WORD PTR INT2F_HI ; location.. ;AN000;
395 MOV CS:ROM_INT2F+2,CX ; ;AN000;
396 OR AX,CX ; check if old int2F.. ;AN000;
397 .IF Z ; is 0. ;AN000;
398 MOV AX,OFFSET ABORT ; yes....point to.. ;AN000;
399 MOV CS:ROM_INT2F,AX ; IRET. ;AN000;
400 MOV AX,CS ; ;AN000;
401 MOV CS:ROM_INT2F+2,AX ; ;AN000;
402 .ENDIF ; ;AN000;
403 CLI ; ;AN000;
404 MOV ES:WORD PTR INT2F_LOW,OFFSET INT2F_COM ; replace vector.. ;AN000;
405 MOV ES:WORD PTR INT2F_HI,CS ; with our own.. ;AN000;
406 STI ; ;AN000;
407 POP ES ; ;AN000;
408 RET ; ;AN000;
409LOAD_INT2F ENDP ;AN000;
410
411
412CODE ENDS
413 END