]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/BIOS/MS96TPI.INC

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / BIOS / MS96TPI.INC
1 %OUT MS96TPI.INC...
2 ;==============================================================================
3 ;REVISION HISTORY:
4 ;AN000 - New for DOS Version 4.00 - J.K.
5 ;AC000 - Changed for DOS Version 4.00 - J.K.
6 ;AN00x - PTM number for DOS Version 4.00 - J.K.
7 ;==============================================================================
8 ;AN001 - p2781 Changeline error behavior incompatibile with DOS 3.3 1/06/88 J.K.
9 ;==============================================================================
10 ;
11 ; DISK OPEN/CLOSE ROUTINES ARR 2.41
12 ;
13
14 DSK$OPEN: ;ARR 2.41
15 PUBLIC DSK$OPEN
16
17 MESSAGE FTESTDISK,<"DISK OPEN ">
18 MNUM FTESTDISK,AX
19 MESSAGE FTESTDISK,<CR,LF>
20 ; AL IS LOGICAL DRIVE
21 CALL SETDRIVE ;GET BDS FOR DRIVE
22 INC WORD PTR DS:[DI].OPCNT
23 JMP EXIT ;ARR 2.41
24
25 DSK$CLOSE: ;ARR 2.41
26 PUBLIC DSK$CLOSE
27
28 MESSAGE FTESTDISK,<"DISK CLOSE ">
29 MNUM FTESTDISK,AX
30 MESSAGE FTESTDISK,<CR,LF>
31 ; AL IS LOGICAL DRIVE
32 CALL SETDRIVE ;GET BDS FOR DRIVE
33 CMP WORD PTR DS:[DI].OPCNT,0
34 JZ EXITJX ; WATCH OUT FOR WRAP ARR 2.41
35 DEC WORD PTR DS:[DI].OPCNT
36 EXITJX:
37 JMP EXIT
38
39 ; INPUT : DS:DI POINTS TO CURRENT BDS FOR DRIVE.
40 ; RETURN : ZERO SET IF NO OPEN FILES
41 ; ZERO RESET IF OPEN FILES
42 CHKOPCNT:
43 MESSAGE FTEST96,<"CHECK OPEN COUNT ">
44 MNUM FTEST96,AX
45 MESSAGE FTEST96,<CR,LF>
46 CMP WORD PTR DS:[DI].OPCNT,0
47 RET
48
49 ;
50 ; AT MEDIA CHECK TIME, WE NEED TO REALLY GET DOWN AND CHECK WHAT THE CHANGE IS.
51 ; THIS IS GUARANTEED TO BE EXPENSIVE.
52 ;
53 PUBLIC MEDIACHECK
54 MEDIACHECK:
55 CALL CHECKSINGLE ; MAKE SURE CORRECT DISK IS IN PLACE
56 XOR SI,SI
57 CALL HASCHANGE
58 JZ MEDIARET
59 CALL CHECKROMCHANGE
60 JNZ MEDIADOVOLID
61 PUSH AX
62 PUSH DX
63 ;SB33001****************************************************************
64 mov DL, DS:[DI.drivenum] ;SB ; set logical drive number ;3.30*
65 mov AH, 16h ;SB ; get changeline status ;3.30*
66 int 13h ;SB ; call rom diskette routine ;3.30*
67 ;SB33001****************************************************************
68 POP DX
69 POP AX
70 JC MEDIADOVOLID
71 MOV SI,1 ; SIGNAL NO CHANGE
72 ; THERE ARE SOME DRIVES WITH CHANGELINE THAT "LOSE" THE CHANGELINE INDICATION
73 ; IF A DIFFERENT DRIVE IS ACCESSED AFTER THE CURRENT ONE. IN ORDER TO AVOID
74 ; MISSING A MEDIA CHANGE, WE RETURN AN "I DON'T KNOW" TO DOS IF THE CHANGELINE
75 ; IS NOT ACTIVE AND WE ARE ACCESSING A DIFFERENT DRIVE FROM THE LAST ONE.
76 ; IF WE ARE ACCESSING THE SAME DRIVE, THEN WE CAN SAFELY RELY ON THE CHANGELINE
77 ; STATUS.
78 PUBLIC LOSECHNG
79 LOSECHNG:
80 MOV BL,CS:[TIM_DRV] ; GET LAST DRIVE ACCESSED
81 CMP BYTE PTR [DI].DRIVENUM,BL
82 JZ MEDIARET
83 ; DO THE 2 SECOND TWIDDLE. IF TIME >= 2 SECONDS, DO A VOLID CHECK.
84 ; OTHERWISE RETURN "I DON'T KNOW" (STRICTLY SPEAKING, WE SHOULD RETURN A
85 ; "NOT CHANGED" HERE SINCE THE 2 SECOND TEST SAID NO CHANGE.) - RS.
86 SAVEREG <AX,CX,DX>
87 CALL CHECK_TIME_OF_ACCESS
88 RESTOREREG <DX,CX,AX>
89 OR SI,SI
90 JZ MEDIADOVOLID ; CHECK_TIME SAYS ">= 2 SECS PASSED"
91 XOR SI,SI ; RETURN "I DON'T KNOW"
92 PUBLIC MEDIARET
93 MEDIARET:
94 RET
95 ;
96 ; SOMEHOW THE MEDIA WAS CHANGED. LOOK AT VID TO SEE. WE DO NOT LOOK AT FAT
97 ; BECAUSE THIS MAY BE DIFFERENT SINCE WE ONLY SET MEDBYT WHEN DOING A READ
98 ; OR WRITE.
99 ;
100 MEDIADOVOLID:
101 CALL GETBP ; BUILD A NEW BPB IN CURRENT BDS
102 JC MEDIARET
103 CALL CHECK_VID
104 JNC MEDIARET
105 CALL MAPERROR ; FIX UP AL FOR RETURN TO DOS
106 RET
107 ;
108 ; SIMPLE, QUICK CHECK OF LATCHED CHANGE. IF NO INDICATION, THEN RETURN
109 ; OTHERWISE DO EXPENSIVE CHECK. IF THE EXPENSIVE TEST FAILS, POP OFF THE
110 ; RETURN AND SET AL = 15 (FOR INVALID MEDIA CHANGE) WHICH WILL BE RETURNED TO
111 ; DOS.
112 ;J.K. 9/16/86 For DOS 3.3, this will work only for the drive that has
113 ;J.K. 9/16/86 changeline.
114 PUBLIC CHECKLATCHIO
115 CHECKLATCHIO:
116 ; IF RETURNING FAKE BPB THEN ASSUME THE DISK HAS NOT CHANGED
117 ; TEST WORD PTR DS:[DI].FLAGS, RETURN_FAKE_BPB
118 ; JNZ CHECKRET
119 ;J.K. 9/16/86
120 ; call HasChange ;change line supported?
121 ; jz CheckRet ;No. Just return
122 CALL CHKOPCNT
123 JNZ CHECKROM
124 CHECKRET:
125 RET
126 ;
127 ; CHECK FOR PAST ROM INDICATIONS. IF NO ROM CHANGE INDICATED, THEN RETURN OK.
128 ;
129 PUBLIC CHECKROM
130 CHECKROM:
131 CALL CHECKROMCHANGE
132 JZ CHECKRET ; NO CHANGE
133 ;
134 ; WE NOW SEE THAT A CHANGE LINE HAS BEEN SEEN IN THE PAST. LET'S DO THE
135 ; EXPENSIVE VERIFICATION.
136 ;
137 MESSAGE FTEST96,<"CHECKROMCHANGE SAYS YES...",CR,LF>
138 CALL GETBP ; BUILD BPB IN CURRENT BDS
139 JC RET_NO_ERROR_MAP ; GETBP HAS ALREADY CALLED MAPERROR
140 CALL CHECK_VID
141 JC CHECKLATCHRET ; DISK ERROR TRYING TO READ IN.
142 OR SI,SI ; IS CHANGED FOR SURE?
143 JNS CHECKRET
144 CALL RETURNVID
145 CHECKLATCHRET:
146 CALL MAPERROR ; FIX UP AL FOR RETURN TO DOS
147 RET_NO_ERROR_MAP:
148 STC
149 POP SI ; POP OFF RETURN ADDRESS
150 RET
151
152 ;
153 ; CHECK THE FAT AND THE VID. RETURN IN DI -1 OR 0. RETURN WITH CARRY SET
154 ; ONLY IF THERE WAS A DISK ERROR. RETURN THAT ERROR CODE IN AX.
155 ;
156 PUBLIC CHECKFATVID
157 CHECKFATVID:
158 MESSAGE FTEST96,<"CHECK FAT",CR,LF>
159 CALL FAT_CHECK
160 OR SI,SI
161 JS CHANGED_DRV
162 ;
163 ; THE FAT WAS THE SAME. HOW ABOUT THE VOLUME ID?
164 ;
165 CHECK_VID:
166 ;J.K. Now with the extended BOOT record, the logic should be enhanced.
167 ;If it is the extended BOOT record, then we check the volume serial
168 ;number instead of volume id. If it is different, then set SI to -1.
169 ;If it is same, then SI= 1 (No change).
170 ;If it is not the extended BOOT record, then just follows the old
171 ;logic. DOS 4.00 will check if the # of FAT in the boot record BPB
172 ;is not 0. If it is 0 then it must be Non_FAT based system and
173 ;should have already covered by extended boot structure checking.
174 ;So, we will return "I don't know" by setting SI to 0.
175 ;This routine assume the newest valid boot record is in CS:[DISKSECTOR].
176 ;(This will be gauranteed by a successful GETBP call right before this
177 ;routine.)
178 MESSAGE FTEST96,<"CHECK VID",CR,LF>
179 ;SB34MS96TPI001*********************************************************
180 ;SB check the EXT_Boot_Sig variable for the Extended boot signature
181 ;SB if it is set then go to do the extended ID check otherwise continue
182 ;SB with code below
183 ;SB 2 LOCS
184
185 cmp cs:[Ext_Boot_Sig],Ext_Boot_Signature
186 jz Do_Ext_Check_Id
187 ;SB34MS96TPI001*********************************************************
188 call HasChange ;AN000;
189 jz CheckRet ;AN000;
190
191 xor si,si ;AN000; assume I don't know.
192 cmp byte ptr cs:[SECPERCLUSINSECTOR]+3,0 ;AN000; Don't read vol id from
193 je CHECKFATRET ;AN000; the directory if not FAT system
194 CALL READ_VOLUME_ID
195 JC CHECKFATRET
196 CALL CHECK_VOLUME_ID
197 OR SI,SI
198 JNZ CHANGED_DRV
199 MESSAGE FTEST96,<"VID NOT CHANGED",CR,LF>
200
201 VID_NO_Changed:
202 CALL RESETCHANGED
203 clc ;AN000;
204 CHECKFATRET:
205 RET
206 CHANGED_DRV:
207 MOV CS:[TIM_DRV],-1 ; ENSURE THAT WE ASK ROM FOR MEDIA
208 RET ; CHECK NEXT TIME ROUND
209 ;
210 ; extended ID check
211 ;
212 Do_Ext_Check_ID: ;AN000;
213 push ax ;AN000;
214 ;SB34MS96TPI002**************************************************************
215 ;SB The code to check extended ID is basically a check to see if the
216 ;Sb volume serial number is still the same. The volume serial number
217 ;SB previously read is in cs:[Boot_Serial_H] and cs:[Boot_Serial_L]
218 ;SB high and low words respectively. DS:DI points to the BDS of the
219 ;SB drive under consideration. The BDS has fields containing the
220 ;SB high and low words of the volume serial number of the media in the
221 ;SB drive. Compare these fields to the fields mentioned above. If these
222 ;SB fields do not match the media has changed and so we should jump
223 ;SB to the code starting at Ext_Changed else return "I don't know" status
224 ;SB in the register used for the changeline status and continue executing
225 ;SB the code given below. For temporary storage use the register which
226 ;SB has been saved and restored around this block.
227 ;SB 7 LOCS
228 ;SB BDS fields in inc\msbds.inc
229
230 mov ax,cs:[Boot_Serial_L]
231 cmp ax,word ptr ds:[di+VOL_SERIAL]
232 jnz Ext_Changed
233 mov ax,cs:[Boot_Serial_H]
234 cmp ax,word ptr ds:[di+VOL_SERIAL+2]
235 jnz Ext_Changed
236 xor si,si ; don't know
237
238 ;SB34MS96TPI002**************************************************************
239 pop ax ;AN000;
240 ; jmp CheckFatRet ;AN000;
241 jmp VID_NO_Changed ;AN001;Reset the flag
242 Ext_Changed: ;AN000; Serial number is different!
243 pop ax ;AN000;
244 mov si, -1 ;AN000; disk changed!
245 clc ;AN000; clear carry. Only SI is meaningful here.
246 jmp Changed_Drv ;AN000;
247
248 ;
249 ; AT I/O TIME, WE DETECTED THE ERROR. NOW WE NEED TO DETERMINE WHETHER THE
250 ; MEDIA WAS TRULY CHANGED OR NOT. WE RETURN NORMALLY IF MEDIA CHANGE UNKNOWN.
251 ; AND WE POP OFF THE CALL AND JMP TO HARDERR IF WE SEE AN ERROR.
252 ;
253 PUBLIC CHECKIO
254 CHECKIO:
255 CMP AH,06
256 JNZ CHECKFATRET
257 CALL CHKOPCNT
258 JZ CHECKFATRET ; NO OPEN FILES
259 ; IF RETURNING FAKE BPB THEN IGNORE DISK CHANGES
260 ; TEST WORD PTR DS:[DI].FLAGS, RETURN_FAKE_BPB
261 ; JNZ IGNORECHANGE
262 CALL GETBP ; BUILD UP A NEW BPB IN CURRENT BDS
263 JC NO_ERROR_MAP ; GETBP HAS ALREADY CALLED MAPERROR
264 CALL CHECKFATVID
265 JC CHECKIORET ; DISK ERROR TRYING TO READ IN.
266 OR SI,SI ; IS CHANGED FOR SURE?
267 JS CHECKIOERR ; YES CHANGED
268 IGNORECHANGE:
269 INC BP ; ALLOW A RETRY
270 RET
271 CHECKIOERR:
272 CALL RETURNVID
273 CHECKIORET:
274 ; POP SI ; POP OFF RETURN
275 STC ; MAKE SURE CARRY GETS PASSED THROUGH
276 JMP HARDERR
277
278 NO_ERROR_MAP:
279 JMP HARDERR2
280 ;
281 ; RETURN VID SETS UP THE VID FOR A RETURN TO DOS.
282 ;
283 PUBLIC RETURNVID
284 RETURNVID:
285 MESSAGE FTEST96,<"RETURN VID",CR,LF>
286 PUSH DS ; SAVE POINTER TO CURRENT BDS
287 PUSH DI
288 PUSH CX
289 CALL INIT_VID_LOOP ; SETS ES:DI -> VID
290 LDS BX,CS:[PTRSAV]
291 MOV [BX.EXTRA],DI
292 MOV [BX.EXTRA+2],ES
293 POP CX
294 POP DI ; RESTORE CURRENT BDS
295 POP DS
296 MOV AH,6 ; INVALID MEDIA CHANGE
297 STC
298 RET
299
300 ;
301 ; MUNGE THE TIME OF LAST SUCCESSFUL ACCESS FOR TWEEKED DRIVES
302 ;
303 ; DON'T NEED ANY MORE
304 ; TWEEKCHECK:
305 ; PUSH AX
306 ; MOV AX,WORD PTR DS:[DI].FLAGS
307 ; TEST AL,FCHANGED_BY_FORMAT
308 ; JZ TWEEKDONE
309 ; MOV CS:[TIM_DRV],-1
310 ; TWEEKDONE:
311 ; POP AX
312 ; RET
313
314 ;
315 ; DRIVE IS THE LOGICAL DRIVE TO USE
316 ;
317 ; FORMAT_MEDIA_CHECK: ;ARR 2.42
318 ; PUSH AX
319 ; MOV AX,WORD PTR DS:[DI].FLAGS
320 ; TEST AL,FCHANGED_BY_FORMAT
321 ; JZ RETF1 ; MEDIA NOT CHANGED VIA FORMAT
322 ; AND AL,NOT FCHANGED_BY_FORMAT
323 ; MOV WORD PTR [DI].FLAGS,AX ; RESET CHANGED_BY_FORMAT BIT
324 ; MOV SI,-1 ; MEDIA CHANGED VIA FORMAT
325 ; RETF1:
326 ; POP AX
327 ; RET
328
329 ;
330 ; MOVES THE POINTER TO THE VOLID FOR THE DRIVE INTO THE ORIGINAL REQUEST PACKET
331 ; ON ENTRY, DS:BX POINTS TO THE ORIGINAL PACKET.
332 ; NO ATTEMPT IS MADE TO PRESERVE REGISTERS.
333 ;
334 MEDIA_SET_VID: ; ARR 2.42
335 PUBLIC MEDIA_SET_VID
336
337 CALL INIT_VID_LOOP ; SETS ES:DI -> VID
338 LDS BX,CS:[PTRSAV] ; GET POINTER TO PACKET
339 MOV WORD PTR [BX.TRANS+1],DI
340 MOV WORD PTR [BX.TRANS+3],ES
341 RET
342
343
344 ;
345 ; HIDENSITY - EXAMINE A DRIVE/MEDIA DESCRIPTOR TO SET THE MEDIA TYPE. IF
346 ; THE MEDIA DESCRIPTOR IS NOT F9 (NOT 96TPI OR 3 1/2), WE RETURN AND LET THE
347 ; CALLER DO THE REST. OTHERWISE, WE POP OFF THE RETURN AND JUMP TO THE TAIL
348 ; OF GETBP. FOR 3.5" MEDIA, WE JUST RETURN.
349 ;
350 ; INPUTS: DS:DI POINT TO CORRECT BDS FOR THIS DRIVE
351 ; AH HAS MEDIA BYTE
352 ;
353 ; OUTPUTS: CARRY CLEAR
354 ; NO REGISTERS MODIFIED
355 ; CARRY SET
356 ; AL = SECTORS/FAT
357 ; BH = NUMBER OF ROOT DIRECTORY ENTRIES
358 ; BL = SECTORS PER TRACK
359 ; CX = NUMBER OF SECTORS
360 ; DH = SECTORS PER ALLOCATION UNIT
361 ; DL = NUMBER OF HEADS
362 ;
363 HIDENSITY:
364 PUBLIC HIDENSITY
365 ;
366 ; CHECK FOR CORRECT DRIVE
367 ;
368 TEST WORD PTR DS:[DI].FLAGS,FCHANGELINE ; IS IT SPECIAL?
369 JZ DOFLOPPY ; NO, DO NORMAL FLOPPY TEST
370 ;
371 ; WE HAVE A MEDIA BYTE THAT IS PRETTY COMPLEX. EXAMINE DRIVE INFORMATION
372 ; TABLE TO SEE WHAT KIND IT IS.
373 ;
374 CMP BYTE PTR DS:[DI].FORMFACTOR,FFSMALL; IS IT SINGLE-MEDIA?
375 JZ DOFLOPPY ; YES, USE FATID...
376 ;
377 ; 96 TPI DRIVE
378 ;
379 CMP AH,0F9H
380 JNZ DOFLOPPY
381 MOV AL,7 ; SEVEN SECTORS / FAT
382 MOV BX,224*256+0FH ; 224 ROOT DIR ENTRIES & 0F SECTOR MAX
383 MOV CX,80*15*2 ; 80 TRACKS, 15 SECTORS/TRACK, 2 SIDES
384 MOV DX,01*256+2 ; SECTORS/ALLOCATION UNIT & HEAD MAX
385 POPR:
386 ADD SP,2 ; POP OFF RETURN ADDRESS
387 JMP HAS1 ; RETURN TO TAIL OF GETBP
388
389 DOFLOPPY:
390 RET
391
392 PATHSTART 001,TPI96
393
394 ;
395 ; CERTAIN BOGUS PROGRAMS AVOID DOS ALTOGETHER AND USE INT 13 DIRECTLY. THESE
396 ; PROGRAMS EVEN RETRY OPERATIONS AND, THUS, WILL IGNORE THE DISK CHANGE LOGIC.
397 ;
398 ; WE HOOK INT 13 AND NOTE ALL ERRORS.
399 ;
400 ASSUME DS:NOTHING,ES:NOTHING,SS:NOTHING
401 PUBLIC REAL13
402 REAL13 DD ?
403 OLDINT DD ?
404 DMY DW ?
405
406 PATHEND 001,TPI96
407
408 PUBLIC INT13
409 INT13 PROC FAR
410 POP WORD PTR OLDINT
411 POP WORD PTR OLDINT+2
412 POP DMY
413 MESSAGE FTEST13,<"*">
414 PUSHF
415 CALL REAL13 ; SIMULATE ANOTHER INT 13
416 JC ERR13 ; DID AN ERROR OCCUR?
417 JMP OLDINT ; NO, RETURN AND POP OFF FLAGS
418 ERR13:
419 MESSAGE FTEST13,<"INT 13 ERROR ">
420 MNUM FTEST13,AX
421 MESSAGE FTEST13,<CR,LF>
422 PUSHF ; SAVE STATE
423 CMP AH,06H ; DID I SEE A CHANGE EVENT?
424 JZ GOTERR ; YES
425 B: POPF ; NO, SOME OTHER ERROR, IGNORE IT
426 JMP OLDINT ; RETURN AND POP OFF FLAGS
427 GOTERR: OR DL,DL ; IS THIS FOR THE HARD DISK?
428 JS B ; YES, IGNORE
429 MOV WORD PTR CS:[FLAGBITS],FCHANGED
430 CALL SET_CHANGED_DL
431 JMP B
432 INT13 ENDP
433
434 ;
435 ; SET_CHANGED_DL - SETS FLAG BITS ACCORDING TO BITS SET IN [FLAGBITS].
436 ; ESSENTIALLY USED TO INDICATE CHANGELINE, OR FORMAT.
437 ;
438 ; INPUTS: DL CONTAINS PHYSICAL DRIVE NUMBER
439 ; [FLAGBITS] CONTAINS BITS TO SET IN THE FLAG FIELD IN THE BDSS
440 ; OUTPUTS: NONE
441 ; REGISTERS MODIFIED: FLAGS
442 ;
443 SET_CHANGED_DL:
444 PUBLIC SET_CHANGED_DL
445
446 MESSAGE FTEST96,<"SET CHANGED",CR,LF>
447 PUSH BX
448 PUSH DX
449 MOV BL,DL
450 ALL_SET:
451 MOV DX,CS:[FLAGBITS] ; GET BITS TO SET IN FLAG FIELD
452 XOR BH,BH
453 ;
454 ; IN THE VIRTUAL DRIVE SYSTEM WE *MUST* FLAG THE OTHER DRIVES AS BEING CHANGED
455 ;
456 ; ASSUME FIRST BDS IS IN THIS SEGMENT
457 PUSH AX
458 PUSH DS ; SAVE CURRENT BDS
459 PUSH DI
460 LDS DI,DWORD PTR CS:[START_BDS]
461 SCAN_BDS:
462 CMP DI,-1
463 JZ SKIPSET
464 CMP BYTE PTR [DI].DRIVENUM,BL
465 JNZ GET_NEXT_BDS
466 ;
467 ; SOMEONE MAY COMPLAIN, BUT THIS *ALWAYS* MUST BE DONE WHEN A DISK CHANGE IS
468 ; NOTED. THERE ARE *NO* OTHER COMPROMISING CIRCUMSTANCES.
469 ;
470 SETCHANGED:
471 OR WORD PTR DS:[DI].FLAGS,DX ; SIGNAL CHANGE ON OTHER DRIVE
472 GET_NEXT_BDS:
473 MOV AX,WORD PTR [DI].LINK+2 ; GO TO NEXT BDS
474 MOV DI,WORD PTR [DI].LINK
475 MOV DS,AX
476 JMP SHORT SCAN_BDS
477 SKIPSET:
478 POP DI ; RESTORE CURRENT BDS
479 POP DS
480 POP AX
481 POP DX
482 POP BX
483 RET
484
485 ;
486 ; CHECKROMCHANGE - SEE IF EXTERNAL PROGRAM HAS DIDDLED ROM CHANGE LINE.
487 ;
488 ; INPUTS: DS:DI POINTS TO CURRENT BDS.
489 ; OUTPUTS: ZERO SET - NO CHANGE
490 ; ZERO RESET - CHANGE
491 ; REGISTERS MODIFIED: NONE
492
493 CHECKROMCHANGE:
494 MESSAGE FTEST13,<"CHECKROM ">
495 MNUM FTEST13
496 MESSAGE FTEST13,<CR,LF>
497 TEST WORD PTR [DI].FLAGS,FCHANGED
498 RET
499
500 ;
501 ; RESETCHANGED - RESTORE VALUE OF CHANGE LINE
502 ;
503 ; INPUTS: DS:DI POINTS TO CURRENT BDS
504 ; OUTPUTS: NONE
505 ; REGISTERS MODIFIED: NONE
506
507 public ResetChanged
508 RESETCHANGED:
509 MESSAGE FTEST13,<"RESETCHANGED ">
510 MNUM FTEST13
511 MESSAGE FTEST13,<CR,LF>
512 AND WORD PTR DS:[DI].FLAGS,NOT FCHANGED
513 RET
514
515 ;
516 ; HASCHANGE - SEE IF DRIVE CAN SUPPLY CHANGE LINE
517 ;
518 ; INPUTS: DS:DI POINTS TO CURRENT BDS
519 ; OUTPUTS: ZERO SET - NO CHANGE LINE AVAILABLE
520 ; ZERO RESET - CHANGE LINE AVAILABLE
521 ; REGISTERS MODIFIED: NONE
522
523 PUBLIC HASCHANGE
524 HASCHANGE:
525 MESSAGE FTEST13,<"HASCHANGE ">
526 MNUM FTEST13
527 MESSAGE FTEST13,<CR,LF>
528 TEST WORD PTR [DI].FLAGS,FCHANGELINE
529 RET
530
531 ASSUME DS:CODE
532
533 INCLUDE MSVOLID.INC
534
535 PUBLIC END96TPI
536 END96TPI LABEL BYTE