summaryrefslogtreecommitdiff
path: root/v4.0/src/BIOS/MSBIO2.ASM
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/BIOS/MSBIO2.ASM
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/BIOS/MSBIO2.ASM')
-rw-r--r--v4.0/src/BIOS/MSBIO2.ASM572
1 files changed, 572 insertions, 0 deletions
diff --git a/v4.0/src/BIOS/MSBIO2.ASM b/v4.0/src/BIOS/MSBIO2.ASM
new file mode 100644
index 0000000..50b25bc
--- /dev/null
+++ b/v4.0/src/BIOS/MSBIO2.ASM
@@ -0,0 +1,572 @@
1 PAGE ,132 ;
2 TITLE MSBIO2 - BIOS
3
4 %OUT ...MSBIO2.ASM
5
6;==============================================================================
7;REVISION HISTORY:
8;AN000 - New for DOS Version 4.00 - J.K.
9;AC000 - Changed for DOS Version 4.00 - J.K.
10;AN00x - PTM number for DOS Version 4.00 - J.K.
11;==============================================================================
12;AN001; - P1820 New Message SKL file 10/20/87 J.K.
13;AN002; - P5045 New INT 2fh for Get BDS table vector for EMS 06/06/88 J.K.
14;==============================================================================
15
16ROMSEGMENT EQU 0F000H
17MODELBYTE EQU DS:BYTE PTR [0FFFEH]
18MODELPCJR EQU 0FDH
19
20 itest=0
21
22 INCLUDE MSGROUP.INC ;DEFINE CODE SEGMENT
23 INCLUDE MSEQU.INC
24 INCLUDE DEVSYM.INC
25 INCLUDE PUSHPOP.INC
26 INCLUDE MSMACRO.INC
27
28 ASSUME DS:NOTHING,ES:NOTHING
29
30 EXTRN DSK$IN:NEAR
31 EXTRN SETPTRSAV:NEAR
32 EXTRN OUTCHR:NEAR
33 EXTRN SETDRIVE:NEAR
34 EXTRN FLUSH:NEAR
35 EXTRN HARDERR:NEAR
36 EXTRN HARDERR2:NEAR
37 EXTRN MAPERROR:NEAR
38 EXTRN GETBP:NEAR
39 EXTRN CHECKSINGLE:NEAR
40 EXTRN CHECK_TIME_OF_ACCESS:NEAR
41 EXTRN EXIT:NEAR
42 EXTRN HAS1:NEAR
43 EXTRN READ_SECTOR:NEAR
44 EXTRN INT_2F_13:FAR
45
46 EXTRN OLD13:DWORD
47
48;DATA
49 EXTRN PTRSAV:DWORD ;IBMBIO1
50 EXTRN START_BDS:WORD
51 EXTRN FDRIVE1:WORD
52 EXTRN FDRIVE2:WORD
53 EXTRN FDRIVE3:WORD
54 EXTRN FDRIVE4:WORD
55 EXTRN FLAGBITS:WORD
56 EXTRN TIM_DRV:BYTE
57 EXTRN MEDBYT:BYTE
58 EXTRN DRVMAX:BYTE
59 extrn Ext_Boot_Sig:byte ;AN000; ibmbdata
60 extrn SecPerClusInSector:byte ;AN000; ibmbdata
61 extrn Boot_Serial_L:word ;AN000; ibmbdata
62 extrn Boot_Serial_H:word ;AN000; ibmbdata
63
64 PATHSTART 005,DISK
65 EVENB
66 public Model_Byte
67MODEL_BYTE DB 0FFH ; MODEL BYTE. SET UP AT INIT TIME.
68 ; FF - PC1
69 ; FE - XT (64/256K PLANAR)
70 ; FD - PC-JR
71 ; FC - PC/AT
72 public Secondary_Model_Byte
73Secondary_Model_Byte db 0
74
75 PUBLIC ORIG19
76ORIG19 DD ?
77
78 PUBLIC INT19SEM
79INT19SEM DB 0 ; INDICATE THAT ALL INT 19
80 ; INITIALIZATION IS COMPLETE
81
82 IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
83 public Int19OLD&AA
84Int19OLD&AA dd -1 ;Orignal hardware int. vectors for INT 19h.
85 ENDM
86
87 EVENB
88 PUBLIC DSKDRVS
89DSKDRVS DW FDRIVE1
90 DW FDRIVE2
91 DW FDRIVE3
92 DW FDRIVE4
93 PUBLIC HDSKTAB
94HDSKTAB DW HDRIVE
95 DW DRIVEX
96;* Next area is reseved for mini disk BPB pointers *** J.K. 4/7/86
97;* Don't change this position. Should be addressible from DskDrvs *** J.K. 4/7/86
98MINI_DISK_BPB_PTRS DB 40 dup (?) ;J.K. 4/7/86 - memory reserved for Mini disk.
99
100 EVENB
101 PUBLIC INT_2F_NEXT
102INT_2F_NEXT DD ?
103
104RET_ADDR DD ?
105
106 PATHEND 005,DISK
107; = = = = = = = = = = = = = = = = = = = =
108
109; INT19
110;
111; WE "HOOK" THE INT 19 VECTOR, BECAUSE CONTRARY TO IBM DOCUMENTATION,
112; IT DOES NOT "BOOTSTRAP" THE MACHINE. IT LEAVES MEMORY ALMOST UNTOUCHED.
113; SINCE THE BIOS_INIT CODE ASSUMES THAT CERTAIN INTERRUPT VECTORS POINT TO
114; THE ROM_BIOS WE MUST "UNHOOK" THEM BEFORE ISSUING THE ACTUAL INT_19.
115; CURRENTLY THE ONLY VECTORS THAT NEED TO BE UNHOOKED ARE INT_19, INT_13,
116; AND THE HARDWARE INTERRUPTS.
117;
118 PUBLIC INT19
119INT19 PROC FAR
120 XOR AX,AX
121 MOV DS,AX
122 assume ds:nothing
123 assume es:nothing
124
125 LES DI,OLD13
126 MOV DS:[13H*4],DI
127 MOV DS:[13H*4+2],ES
128
129 CMP BYTE PTR INT19SEM, 0
130 JNZ INT19VECS
131 JMP DOINT19
132
133; ON THE PCJR, DON'T REPLACE ANY VECTORS
134; MODEL BYTE DEFINITIONS FROM IBMSTACK.ASM
135 MOV AX,ROMSEGMENT
136 MOV DS,AX
137 MOV AL,MODELPCJR
138
139 CMP AL,MODELBYTE
140 JNE INT19VECS
141 JMP DOINT19
142
143;Stacks code has changed these hardware interrupt vectors
144;STKINIT in SYSINIT1 will initialzie Int19hOLDxx values.
145INT19VECS:
146 XOR AX,AX
147 MOV DS,AX
148
149 IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
150
151 LES DI,Int19OLD&AA
152;SB33103******************************************************************
153
154 mov ax,es ;
155 cmp ax,-1 ;OPT 0ffffh is unlikely segment
156 je skip_int&AA ;OPT no need to check selector too
157 cmp di,-1 ;OPT 0ffffh is unlikely offset
158 je skip_int&AA
159
160;SB33103******************************************************************
161 MOV DS:[AA&H*4],DI
162 MOV DS:[AA&H*4+2],ES
163skip_int&AA:
164 ENDM
165
166DOINT19:
167 LES DI,ORIG19
168 MOV DS:[19H*4],DI
169 MOV DS:[19H*4+2],ES
170
171 INT 19H
172INT19 ENDP
173
174 ASSUME DS:CODE
175 PUBLIC DSK$INIT
176DSK$INIT PROC NEAR
177 PUSH CS
178 POP DS
179 MOV AH,BYTE PTR DRVMAX
180 MOV DI,OFFSET DSKDRVS
181 JMP SETPTRSAV
182DSK$INIT ENDP
183
184;
185; INT 2F HANDLER FOR EXTERNAL BLOCK DRIVERS TO COMMUNICATE WITH THE INTERNAL
186; BLOCK DRIVER IN IBMDISK. THE MULTIPLEX NUMBER CHOSEN IS 8. THE HANDLER
187; SETS UP THE POINTER TO THE REQUEST PACKET IN [PTRSAV] AND THEN JUMPS TO
188; DSK$IN, THE ENTRY POINT FOR ALL DISK REQUESTS.
189; ON EXIT FROM THIS DRIVER (AT EXIT), WE WILL RETURN TO THE EXTERNAL DRIVER
190; THAT ISSUED THIS INT 2F, AND CAN THEN REMOVE THE FLAGS FROM THE STACK.
191; THIS SCHEME ALLOWS US TO HAVE A SMALL EXTERNAL DEVICE DRIVER, AND MAKES
192; THE MAINTAINANCE OF THE VARIOUS DRIVERS (DRIVER AND IBMBIO) MUCH EASIER,
193; SINCE WE ONLY NEED TO MAKE CHANGES IN ONE PLACE (MOST OF THE TIME).
194;
195; 06/03/88 J.K. When AL=3, return DS:DI -> Start of BDS table.
196; (EMS device driver hooks INT 13h to handle 16KB DMA overrun
197; problem. BDS table is going to be used to get head/sector
198; informations without calling Generic IOCTL Get Device Parm call.)
199;
200; AL CONTAINS THE INT2F FUNCTION:
201; 0 - CHECK FOR INSTALLED HANDLER - RESERVED
202; 1 - INSTALL THE BDS INTO THE LINKED LIST
203; 2 - DOS REQUEST
204; 3 - Get BDS vector ;06/03/88 J.K.
205; Return BDS table starting pointer in DS:DI
206
207MYNUM EQU 8
208
209 PUBLIC INT2F_DISK
210INT2F_DISK PROC FAR
211 CMP AH,MYNUM
212 JE MINE
213 JMP CS:[INT_2F_NEXT] ; CHAIN TO NEXT INT 2F HANDLER
214MINE:
215 CMP AL,0F8H ; IRET ON RESERVED FUNCTIONS
216 JB DO_FUNC
217 IRET
218DO_FUNC:
219 OR AL,AL ; A GET INSTALLED STATE REQUEST?
220 JNE DISP_FUNC
221 MOV AL,0FFH
222 IRET
223DISP_FUNC:
224 MESSAGE FTESTINIT,<"INT2F_DISK",CR,LF>
225 CMP AL,1 ; REQUEST FOR INSTALLING BDS?
226 JNE DO_DOS_REQ
227 CALL INSTALL_BDS
228 IRET
229
230DO_DOS_REQ:
231; SET UP POINTER TO REQUEST PACKET
232 cmp al, 3 ;AN002; Get BDS vector?
233 je DO_Get_BDS_Vector ;AN002;
234 MOV WORD PTR CS:[PTRSAV],BX ;othrwise DOS function.
235 MOV WORD PTR CS:[PTRSAV+2],ES
236 JMP DSK$IN
237
238DO_Get_BDS_Vector: ;AN002; AL=3
239 push cs ;AN002;
240 pop ds ;AN002;
241 mov di, Start_BDS ;AN002;
242 IRET ;AN002;
243
244INT2F_DISK ENDP
245
246;
247; INSTALL_BDS INSTALLS A BDS A LOCATION DS:DI INTO THE CURRENT LINKED LIST OF
248; BDS MAINTAINED BY THIS DEVICE DRIVER. IT PLACES THE BDS AT THE END OF THE
249; LIST.
250 PUBLIC INSTALL_BDS
251INSTALL_BDS PROC NEAR
252 MESSAGE FTESTINIT,<"INSTALL BDS",CR,LF>
253; DS:DI POINT TO BDS TO BE INSTALLED
254 LES SI,DWORD PTR CS:[START_BDS] ; START AT BEGINNING OF LIST
255 PUSH ES ; SAVE POINTER TO CURRENT BDS
256 PUSH SI
257; ES:SI NOW POINT TO BDS IN LINKED LIST
258LOOP_NEXT_BDS:
259 CMP SI,-1 ; GOT TO END OF LINKED LIST?
260 JZ INSTALL_RET
261; IF WE HAVE SEVERAL LOGICAL DRIVES USING THE SAME PHYSICAL DRIVE, WE MUST
262; SET THE I_AM_MULT FLAG IN EACH OF THE APPROPRIATE BDSS.
263 MOV AL,BYTE PTR DS:[DI].DRIVENUM
264 CMP BYTE PTR ES:[SI].DRIVENUM,AL
265 JNZ NEXT_BDS
266 MESSAGE FTESTINIT,<"LOGICAL DRIVES",CR,LF>
267 XOR BX,BX
268 MOV BL,FI_AM_MULT
269 OR WORD PTR DS:[DI].FLAGS,BX ; SET FLAGS IN BOTH BDSS CONCERNED
270 OR WORD PTR ES:[SI].FLAGS,BX
271 MOV BL,FI_OWN_PHYSICAL
272 XOR BX,-1
273 AND WORD PTR DS:[DI].FLAGS,BX ; RESET THAT FLAG FOR 'NEW' BDS
274; WE MUST ALSO SET THE FCHANGELINE BIT CORRECTLY.
275 MOV BX,WORD PTR ES:[SI].FLAGS ; DETERMINE IF CHANGELINE AVAILABLE
276 AND BL,FCHANGELINE
277 XOR BH,BH
278 OR WORD PTR DS:[DI].FLAGS,BX
279
280NEXT_BDS:
281; BEFORE MOVING TO NEXT BDS, PRESERVE POINTER TO CURRENT ONE. THIS IS NEEDED AT
282; THE END WHEN THE NEW BDS IS LINKED INTO THE LIST.
283 POP BX ; DISCARD PREVIOUS POINTER TO BDS
284 POP BX
285 PUSH ES
286 PUSH SI
287 MOV BX,WORD PTR ES:[SI].LINK + 2
288 MOV SI,WORD PTR ES:[SI].LINK
289 MOV ES,BX
290 JMP SHORT LOOP_NEXT_BDS
291
292INSTALL_RET:
293 POP SI ; RETRIEVE POINTER TO LAST BDS
294 POP ES ; IN LINKED LIST.
295 MOV AX,DS
296 MOV WORD PTR ES:[SI].LINK+2,AX ; INSTALL BDS
297 MOV WORD PTR ES:[SI].LINK,DI
298 MOV WORD PTR DS:[DI].LINK,-1 ; SET NEXT POINTER TO NULL
299 RET
300INSTALL_BDS ENDP
301
302;
303; RE_INIT INSTALLS THE INT 2F VECTOR THAT WILL HANDLE COMMUNICATION BETWEEN
304; EXTERNAL BLOCK DRIVERS AND THE INTERNAL DRIVER. IT ALSO INSTALLS THE
305; RESET_INT_13 INTERFACE. IT IS CALLED BY SYSYINIT
306;
307 PUBLIC RE_INIT
308RE_INIT PROC FAR
309 MESSAGE FTESTINIT,<"REINIT",CR,LF>
310 PUSH AX
311 PUSH DS
312 PUSH DI
313 XOR DI,DI
314 MOV DS,DI
315 MOV DI,2FH*4 ; POINT IT TO INT 2F VECTOR
316 MOV AX,WORD PTR DS:[DI]
317 MOV WORD PTR CS:[INT_2F_NEXT],AX
318 MOV AX,WORD PTR DS:[DI+2] ; PRESERVE OLD INT 2F VECTOR
319 MOV WORD PTR CS:[INT_2F_NEXT+2],AX
320
321; INSTALL THE RESET_INT_13
322; INTERFACE
323
324;
325; THE FOLLOWING TWO LINES ARE NOT NEEDED ANYMORE BECAUSE THE LINK HAS BEEN
326; HARD-WIRED INTO THE CODE AT NEXT2F_13. - RAJEN.
327;------------------------------------------------------------------------------
328; MOV WORD PTR CS:[NEXT2F_13],OFFSET INT2F_DISK ; PRESERVE INT2F_DISK POINTER
329; MOV WORD PTR CS:[NEXT2F_13+2],CS
330;------------------------------------------------------------------------------
331
332 CLI
333 MOV WORD PTR DS:[DI],OFFSET INT_2F_13 ; INSTALL NEW VECTORS
334 MOV WORD PTR DS:[DI+2],CS
335 STI
336 POP DI
337 POP DS
338 POP AX
339
340 RET
341
342RE_INIT ENDP
343
344;-------------------------------------------------
345;
346; ASK TO SWAP THE DISK IN DRIVE A:
347;
348 PUBLIC SWPDSK
349SWPDSK PROC NEAR
350 MOV AL,BYTE PTR DS:[DI].DRIVELET ; GET THE DRIVE LETTER
351;USING A DIFFERENT DRIVE IN A ONE DRIVE SYSTEM SO REQUEST THE USER CHANGE DISKS
352 ADD AL,"A"
353 MOV CS:DRVLET,AL
354 PUSH DS ; PRESERVE SEGMENT REGISTER
355 PUSH CS
356 POP DS
357 MOV SI,OFFSET SNGMSG ; DS:SI -> MESSAGE
358 PUSH BX
359 CALL WRMSG ;PRINT DISK CHANGE MESSAGE
360 CALL FLUSH
361;SB33003***************************************************************
362 xor AH, AH ; set command to read character;SB
363 int 16h ; call rom-bios ;SB
364;SB33003***************************************************************
365 POP BX
366 POP DS ; RESTORE SEGMENT REGISTER
367WRMRET:
368 RET
369SWPDSK ENDP
370
371;----------------------------------------------
372;
373; WRITE OUT MESSAGE POINTED TO BY [SI]
374;
375 PUBLIC WRMSG
376WRMSG PROC NEAR
377 LODSB ;GET THE NEXT CHARACTER OF THE MESSAGE
378 OR AL,AL ;SEE IF END OF MESSAGE
379 JZ WRMRET
380; INT CHROUT
381 PUSHF
382 PUSH CS
383 CALL OUTCHR
384 JMP SHORT WRMSG
385WRMSG ENDP
386
387; INCLUDE BIOMES.INC
388 include MSBIO.CL2
389
390;
391; END OF SUPPORT FOR MULTIPLE FLOPPIES WITH NO LOGICAL DRIVES
392; THIS IS NOT 'SPECIAL' ANY MORE BECAUSE WE NOW HAVE THE CAPABILITY OF
393; DEFINING LOGICAL DRIVES IN CONFIG.SYS. WE THEREFORE KEEP THE CODE FOR
394; SWAPPING RESIDENT ALL THE TIME.
395;
396
397;J.K. 10/1/86 *******************************************************
398;Variables for Dynamic Relocatable modules
399;These should be stay resident.
400
401 public INT6C_RET_ADDR
402INT6C_RET_ADDR DD ? ; return address from INT 6C for P12 machine
403
404 PATHSTART 001,CLK
405;
406; DATA STRUCTURES FOR REAL-TIME DATE AND TIME
407;
408 public BIN_DATE_TIME
409 public MONTH_TABLE
410 public DAYCNT2
411 public FEB29
412BIN_DATE_TIME:
413 DB 0 ; CENTURY (19 OR 20) OR HOURS (0-23)
414 DB 0 ; YEAR IN CENTURY (0...99) OR MINUTES (0-59)
415 DB 0 ; MONTH IN YEAR (1...12) OR SECONDS (0-59)
416 DB 0 ; DAY IN MONTH (1...31)
417MONTH_TABLE: ;
418 DW 0 ;MJB002 JANUARY
419 DW 31 ;MJB002 FEBRUARY
420 DW 59 ;MJB002
421 DW 90 ;MJB002
422 DW 120 ;MJB002
423 DW 151 ;MJB002
424 DW 181 ;MJB002
425 DW 212 ;MJB002
426 DW 243 ;MJB002
427 DW 273 ;MJB002
428 DW 304 ;MJB002
429 DW 334 ;MJB002 DECEMBER
430DAYCNT2 DW 0000 ;MJB002 TEMP FOR COUNT OF DAYS SINCE 1-1-80
431FEB29 DB 0 ;MJB002 FEBRUARY 29 IN A LEAP YEAR FLAG
432 PATHEND 001,CLK
433
434;********************************************************************
435;
436
437 PUBLIC ENDFLOPPY
438ENDFLOPPY LABEL BYTE
439;
440; END OF CODE FOR VIRTUAL FLOPPY DRIVES
441;
442 PUBLIC ENDSWAP
443ENDSWAP LABEL BYTE
444
445 PATHSTART 004,BIO
446
447 PUBLIC HNUM
448HNUM DB 0 ;NUMBER OF HARDFILES
449 PUBLIC HARDDRV
450HARDDRV DB 80H ;PHYSICAL DRIVE NUMBER OF FIRST HARDFILE
451;**********************************************************************
452; "HDRIVE" IS A HARD DISK WITH 512 BYTE SECTORS
453;*********************************************************************
454 EVENB
455 PUBLIC BDSH
456BDSH DW -1 ;LINK TO NEXT STRUCTURE
457 DW CODE
458 DB 80 ;INT 13 DRIVE NUMBER
459 DB "C" ;LOGICAL DRIVE LETTER
460 PUBLIC HDRIVE
461HDRIVE:
462 DW 512
463 DB 1 ;SECTORS/ALLOCATION UNIT
464 DW 1 ;RESERVED SECTORS FOR DOS
465 DB 2 ;NO. OF ALLOCATION TABLES
466 DW 16 ;NUMBER OF DIRECTORY ENTRIES
467 DW 0000 ;NUMBER OF SECTORS (AT 512 BYTES EACH)
468 DB 11111000B ;MEDIA DESCRIPTOR
469 DW 1 ;NUMBER OF FAT SECTORS
470 DW 00 ;SECTOR LIMIT
471 DW 00 ;HEAD LIMIT
472 DW 00 ;HIDDEN SECTOR COUNT(low)
473 dw 00 ;AN000; Hidden Sector (high)
474 dw 00 ;AN000; Number of Sectors (low)
475 dw 00 ;AN000; Number of Sectors (high)
476 DB 0 ; TRUE => BIGFAT
477OPCNTH DW 0 ;OPEN REF. COUNT
478 DB 3 ;FORM FACTOR
479FLAGSH DW 0020H ;VARIOUS FLAGS
480; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
481 DW 40 ; NUMBER OF CYLINDERS
482RECBPBH DB 31 DUP (?) ; RECOMMENDED BPB FOR DRIVE
483TRACKH DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
484TIM_LOH DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
485TIM_HIH DW -1
486VOLIDH DB "NO NAME ",0 ;AN000; VOLUME ID FOR THIS DISK
487VolSerH dd 0 ;AN000; Current volume serial number from Boot record
488SysIDH db "FAT12 " ,0 ;AN000; Current file system id from Boot record
489
490;
491; END OF SINGLE HARD DISK SECTION
492;
493 PUBLIC ENDONEHARD
494ENDONEHARD LABEL BYTE
495;**********************************************************************
496; "DRIVEX " IS AN EXTRA TYPE OF DRIVE USUALLY RESERVED FOR AN
497; ADDITIONAL HARD FILE
498;*********************************************************************
499 EVENB
500 PUBLIC BDSX
501BDSX DW -1 ;LINK TO NEXT STRUCTURE
502 DW CODE
503 DB 81 ;INT 13 DRIVE NUMBER
504 DB "D" ;LOGICAL DRIVE LETTER
505 PUBLIC DRIVEX
506DRIVEX:
507 DW 512
508 DB 00 ;SECTORS/ALLOCATION UNIT
509 DW 1 ;RESERVED SECTORS FOR DOS
510 DB 2 ;NO. OF ALLOCATION TABLES
511 DW 0000 ;NUMBER OF DIRECTORY ENTRIES
512 DW 0000 ;NUMBER OF SECTORS (AT 512 BYTES EACH)
513 DB 11111000B ;MEDIA DESCRIPTOR
514 DW 0000 ;NUMBER OF FAT SECTORS
515 DW 00 ;SECTOR LIMIT
516 DW 00 ;HEAD LIMIT
517 DW 00 ;HIDDEN SECTOR COUNT (low)
518 dw 00 ;AN000; Hidden Sector (high)
519 dw 00 ;AN000; Number of Sectors (low)
520 dw 00 ;AN000; Number of Sectors (high)
521 DB 0 ; TRUE => BIGFAT
522OPCNTD DW 0 ;OPEN REF. COUNT
523 DB 3 ;FORM FACTOR
524FLAGSD DW 0020H ;VARIOUS FLAGS
525; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
526 DW 40 ; NUMBER OF CYLINDERS
527RECBPBD DB 31 DUP (?) ; RECOMMENDED BPB FOR DRIVE
528TRACKD DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
529TIM_LOD DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
530TIM_HID DW -1
531VOLIDD DB "NO NAME ",0 ;AN000; VOLUME ID FOR THIS DISK
532VolSerD dd 0 ;AN000; Current volume serial number from Boot record
533SysIDD db "FAT12 " ,0 ;AN000; Current file system id from Boot record
534
535;
536; END OF SECTION FOR TWO HARD DISKS
537 PUBLIC ENDTWOHARD
538ENDTWOHARD LABEL BYTE
539
540 PATHEND 004,BIO
541
542 PUBLIC TWOHARD
543TWOHARD LABEL BYTE
544 PAGE
545 INCLUDE MS96TPI.INC
546
547;*********************************************************************
548;Memory allocation for BDSM table. - J.K. 2/21/86
549;*********************************************************************
550 PUBLIC BDSMs
551BDSMs BDSM_type Max_mini_dsk_num dup (<>) ;currently max. 23
552
553;** End_of_BDSM defined in IBMINIT.ASM will be used to set the appropriate
554;** ending address of BDSM table.
555
556;
557;;3.3 BUG FIX -SP ------------------------------
558;;Migrated into 4.00 -MRW
559;Paragraph buffer between the BDSMs and MSHARD
560;
561;The relocation code for MSHARD needs this. this cannot be used for
562;anything. nothing can come before this or after this.....IMPORTANT!!!!
563;don't get too smart and using this buffer for anything!!!!!!
564;
565 db 16 dup(0)
566;
567;end of bug fix buffer
568;;
569;;3.3 BUG FIX -SP------------------------------
570
571CODE ENDS
572 END