mirror of https://github.com/AR1972/DOS3.3
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
650 lines
17 KiB
650 lines
17 KiB
TITLE MSBIO2 - DOS 3.3
|
|
|
|
;-------------------------------------------------------------------------------
|
|
; :
|
|
; Microsoft Bio :
|
|
; :
|
|
; The file msbio.asm is the main file in the Mircosoft bio. This file :
|
|
; includes the other main files in the bio. Most of the routines are :
|
|
; in these include files. The main files included are: :
|
|
; :
|
|
; File Contains :
|
|
; :
|
|
; msdisk.inc Disk device driver routines :
|
|
; ms96tpi.inc Routines for 96tpi drives :
|
|
; msaux.inc Device driver for the rs-232 serial ports :
|
|
; msclock.inc Device driver for "clock$" device :
|
|
; mscon.inc Device driver for "con" :
|
|
; mslpt.inc Device driver for the printers :
|
|
; :
|
|
; Each of these files contain a header section documenting the code :
|
|
; in that file. :
|
|
; Msbio also includes several files for equ's, structure definition, :
|
|
; macro definitions, etc. These are: :
|
|
; :
|
|
; msbiomes.inc msmacro.inc devsym.inc :
|
|
; dskprm.inc error.inc :
|
|
; :
|
|
; Each of these file contains explanitory notes. :
|
|
; :
|
|
; The actual code in msbio can be broken down into several piece: :
|
|
; :
|
|
; macro definitions Several marco are defined in msbio. They :
|
|
; are a few odds and end that did not fit :
|
|
; anywhere else. :
|
|
; :
|
|
; Command Jump Table List of entry points in the device drivers. :
|
|
; See notation below for full explination. :
|
|
; :
|
|
; Interrupt and Strategy :
|
|
; Entry points Calls on the device driver first come to here. :
|
|
; There is common code with pushes registers and :
|
|
; the like before jumping to routines in the :
|
|
; driver files. The common exit points are also :
|
|
; in this file. :
|
|
; :
|
|
; Miscellaneous Code There are several routines and data structure :
|
|
; declarations. See below for details. :
|
|
; :
|
|
;-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
;
|
|
; If the variable TEST is non-zero then code for debugging is included.
|
|
; The extra code will make the binary file nuch larger.
|
|
; The symbol is also defined in msequ.inc. Both must be changed to
|
|
; turn debugging on or off.
|
|
;
|
|
; The level of the debugging is controled by the variable fTestBits in
|
|
; this file. See the comment preceeding the variable for more information.
|
|
; The actual routines which print the messages are in msmacro.inc
|
|
; See the header comment in this file for more information.
|
|
;
|
|
|
|
|
|
;
|
|
; Revision History
|
|
;
|
|
; REV 2.1 5/1/83 ARR added timer int handler and changed order of AUX
|
|
; PRN init for HAL0
|
|
;
|
|
; REV 2.15 7/13/83 ARR Because of IBM design issues, and that BASCOM
|
|
; is ill behaved with respect to the 1CH timer interrupt,
|
|
; the timer handler has to be backed out! The intended
|
|
; code is commented out and has an ARR 2.15 annotation.
|
|
; This means the BIOS will go back to the multiple roll
|
|
; over bug.
|
|
;
|
|
; REV 2.20 8/5/83 ARR IBM makes hardware change. Now wants to use half
|
|
; height drives for HAL0, and back fit for PC/PC XT. Problem
|
|
; with head settle time. Previous drives got by on a 0
|
|
; settle time, 1/2 hight drives need 15 head settle when
|
|
; doing WRITEs (0 ok on READ) if the head is being stepped.
|
|
; This requires a last track value to be kept so that BIOS
|
|
; knows when head is being moved. To help out
|
|
; programs that issue INT 13H directly, the head settle will
|
|
; normally be set to 15. It will be changed to 0 on READs,
|
|
; or on WRITEs which do not require head step.
|
|
;
|
|
; REV 2.21 8/11/83 MZ IBM wants write with verify to use head settle 0.
|
|
; Use same trick as above.
|
|
;
|
|
; REV 2.25 6/20/83 mjb001 added support for 96tpi and salmon
|
|
;
|
|
; REV 2.30 6/27/83 mjb002 added real-time clock
|
|
;
|
|
; REV 2.40 7/8/83 mjb003 added volume-id checking and int 2f macro
|
|
; definitions push* and pop*
|
|
;
|
|
; REV 2.41 7/12/83 ARR more 2.X enhancements. Open/Close media change
|
|
;
|
|
; REV 2.42 11/3/83 ARR more 2.X enhancements. Disk OPEN/CLOSE, FORMAT
|
|
; code and other misc hooked out to shrink BIOS. Code for
|
|
; Disk OPEN/CLOSE, FORMAT included only with 96tpi disks.
|
|
;
|
|
; Rev 2.43 12/6/83 MZ Examine boot sectors on hard disks for 16-bit fat
|
|
; check. Examine large fat bit in BPB for walk of media for
|
|
; DOS
|
|
;
|
|
; Rev 2.44 12/9/83 ARR Change to error reporting on INT 17H
|
|
;
|
|
; Rev 2.45 12/22/83 MZ Make head settle change only when disk parm is 0.
|
|
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
;
|
|
; IBM ADDRESSES FOR I/O
|
|
;
|
|
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
;Below was moved from sysinit1
|
|
ROMSEGMENT EQU 0F000H
|
|
MODELBYTE EQU DS:BYTE PTR [0FFFEH]
|
|
MODELPCJR EQU 0FDH
|
|
|
|
test=0
|
|
;;Rev 3.30 modification ----------------------------
|
|
INCLUDE MSGROUP.INC ;DEFINE CODE SEGMENT
|
|
INCLUDE MSEQU.INC
|
|
INCLUDE DEVSYM.INC
|
|
INCLUDE PUSHPOP.INC
|
|
INCLUDE MSMACRO.INC
|
|
|
|
ASSUME DS:NOTHING,ES:NOTHING
|
|
|
|
EXTRN DSK$IN:NEAR
|
|
EXTRN SETPTRSAV:NEAR
|
|
EXTRN OUTCHR:NEAR
|
|
EXTRN SETDRIVE:NEAR
|
|
EXTRN FLUSH:NEAR
|
|
EXTRN HARDERR:NEAR
|
|
EXTRN HARDERR2:NEAR
|
|
EXTRN MAPERROR:NEAR
|
|
EXTRN GETBP:NEAR
|
|
EXTRN CHECKSINGLE:NEAR
|
|
EXTRN CHECK_TIME_OF_ACCESS:NEAR
|
|
EXTRN EXIT:NEAR
|
|
EXTRN HAS1:NEAR
|
|
EXTRN HAS1_res:NEAR
|
|
EXTRN READ_SECTOR:NEAR
|
|
EXTRN INT_2F_13:FAR
|
|
|
|
EXTRN OLD13:DWORD
|
|
|
|
;DATA
|
|
EXTRN PTRSAV:DWORD
|
|
EXTRN START_BDS:WORD
|
|
EXTRN FDRIVE1:WORD
|
|
EXTRN FDRIVE2:WORD
|
|
EXTRN FDRIVE3:WORD
|
|
EXTRN FDRIVE4:WORD
|
|
EXTRN FLAGBITS:WORD
|
|
EXTRN TIM_DRV:BYTE
|
|
EXTRN MEDBYT:BYTE
|
|
EXTRN DRVMAX:BYTE
|
|
|
|
PATHSTART 005,DISK
|
|
EVENB
|
|
PUBLIC ORIG19
|
|
ORIG19 DD ?
|
|
|
|
PUBLIC INT19SEM
|
|
INT19SEM DB 0 ; INDICATE THAT ALL INT 19
|
|
; INITIALIZATION IS COMPLETE
|
|
|
|
IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
|
|
public Int19OLD&AA
|
|
Int19OLD&AA dd -1 ;Orignal hw int. vec for INT 19h.
|
|
ENDM
|
|
|
|
EVENB
|
|
PUBLIC DSKDRVS
|
|
DSKDRVS DW FDRIVE1
|
|
DW FDRIVE2
|
|
DW FDRIVE3
|
|
DW FDRIVE4
|
|
PUBLIC HDSKTAB
|
|
HDSKTAB DW HDRIVE
|
|
DW DRIVEX
|
|
;* Next area is reseved for mini disk BPB pointers *** 4/7/86
|
|
;* Don't change this pos. Should be add. from DskDrvs *** 4/7/86
|
|
MINI_DISK_BPB_PTRS DB 40 dup (?) ;4/7/86 - mem res for Mini disk.
|
|
|
|
EVENB
|
|
PUBLIC INT_2F_NEXT
|
|
INT_2F_NEXT DD ?
|
|
|
|
RET_ADDR DD ?
|
|
|
|
PATHEND 005,DISK
|
|
;;End of modification ----------------------------
|
|
|
|
; INT19
|
|
;
|
|
; We "hook" the INT_REBOOT vector, because contrary to IBM documentation,
|
|
; it does NOT "bootstrap" the machine. It leaves memory almost untouched.
|
|
; Since the BIOS_INIT code assumes that certain Interrupt Vectors point to
|
|
; the ROM_BIOS we must "unhook" them before issuing the actual INT_REBOOT.
|
|
; Currently the following vectors need to be unhooked:
|
|
; 02,08,09,0A,0B,0C,0D,0E,70,72,73,74,75,76,77
|
|
;
|
|
|
|
Public Int19
|
|
Int19 proc FAR
|
|
xor AX,AX ; get data segment to
|
|
mov DS,AX ; point to the vector table
|
|
assume ds:nothing
|
|
assume es:nothing
|
|
les DI,Old13 ; get ES to point to this segment
|
|
mov DS:[13h*4],DI ; restore old int13 value
|
|
mov DS:[13h*4+2],ES
|
|
|
|
cmp Byte ptr Int19Sem, 0
|
|
jnz int19vecs
|
|
jmp doint19
|
|
|
|
;;Dos 3.30 Will not support the PC-Jr
|
|
;;Rev 3.30 modification ----------------------------
|
|
; ON THE PCJR, DON'T REPLACE ANY VECTORS
|
|
; MODEL BYTE DEFINITIONS FROM MSSTACK.ASM
|
|
; MOV AX,ROMSEGMENT
|
|
; MOV DS,AX
|
|
; MOV AL,MODELPCJR
|
|
;
|
|
; CMP AL,MODELBYTE
|
|
; JNE INT19VECS
|
|
; JMP DOINT19
|
|
|
|
|
|
;Stacks code has changed these hardware interrupt vectors
|
|
;STKINIT in SYSINIT1 will initialzie Int19hOLDxx values.
|
|
int19vecs:
|
|
|
|
;
|
|
; we now need to unhook all the vector replace to prevent stack overflow
|
|
;
|
|
|
|
;;Rev 3.30 modification ----------------------------
|
|
XOR AX,AX
|
|
MOV DS,AX
|
|
|
|
IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
|
|
|
|
LES DI,Int19OLD&AA
|
|
|
|
mov ax,es ; Put segment where we can compare it
|
|
cmp ax,-1 ; OPT 0ffffh is not likely
|
|
je skip_int&AA ; OPT could get away without checking
|
|
cmp di,-1 ; OPT offset here.
|
|
je skip_int&AA
|
|
|
|
MOV DS:[AA&H*4],DI
|
|
MOV DS:[AA&H*4+2],ES
|
|
skip_int&AA:
|
|
ENDM
|
|
;;End of modification ----------------------------
|
|
|
|
doint19:
|
|
LES DI,Orig19
|
|
MOV DS:[19h*4],DI
|
|
MOV DS:[19h*4+2],ES
|
|
|
|
INT 19h
|
|
INT19 ENDP
|
|
ASSUME DS:CODE
|
|
|
|
;*****************************************************************************
|
|
PUBLIC DSK$INIT
|
|
DSK$INIT PROC NEAR
|
|
PUSH CS
|
|
POP DS
|
|
MOV AH,BYTE PTR DRVMAX
|
|
MOV DI,OFFSET DskDrvs
|
|
JMP SetPTRSAV
|
|
DSK$INIT ENDP
|
|
|
|
|
|
;
|
|
; Int 2f handler for external block drivers to communicate with the internal
|
|
; block driver in msdisk. The multiplex number chosen is 8. The handler
|
|
; sets up the pointer to the request packet in [PTRSAV] and then jumps to
|
|
; DSK$IN, the entry point for all disk requests.
|
|
; On exit from this driver (at EXIT), we will return to the external driver
|
|
; that issued this Int 2F, and can then remove the flags from the stack.
|
|
; This scheme allows us to have a small external device driver, and makes
|
|
; the maintainance of the various drivers (DRIVER and msBIO) much easier,
|
|
; since we only need to make changes in one place (most of the time).
|
|
;
|
|
; AL contains the Int2F function:
|
|
; 0 - Check for installed handler - RESERVED
|
|
; 1 - Install the BDS into the linked list
|
|
; 2 - DOS request
|
|
;
|
|
|
|
MYNUM EQU 8
|
|
|
|
Public Int2F_Disk
|
|
Int2F_Disk PROC FAR
|
|
cmp ah,MYNUM
|
|
je Mine
|
|
jmp cs:[Int_2F_Next] ; chain to next Int 2F handler
|
|
Mine:
|
|
cmp al,0F8H ; IRET on reserved functions
|
|
jb Do_Func
|
|
IRET
|
|
Do_Func:
|
|
or al,al ; A GET INSTALLED STATE request?
|
|
jne Disp_Func
|
|
mov al,0FFH
|
|
IRET
|
|
Disp_Func:
|
|
Message fTestInit,<"Int2F_disk",cr,lf>
|
|
cmp al,1 ; Request for installing BDS?
|
|
jne Do_DOS_Req
|
|
call Install_BDS
|
|
IRET
|
|
|
|
Do_DOS_Req:
|
|
; Set up pointer to request packet
|
|
MOV WORD PTR CS:[PTRSAV],BX
|
|
MOV WORD PTR CS:[PTRSAV+2],ES
|
|
jmp DSK$IN
|
|
|
|
Int2F_Disk ENDP
|
|
|
|
;
|
|
; Install_BDS installs a BDS a location DS:DI into the current linked list of
|
|
; BDS maintained by this device driver. It places the BDS at the END of the
|
|
; list.
|
|
Public Install_BDS
|
|
INSTALL_BDS PROC NEAR
|
|
message ftestinit,<"Install BDS",cr,lf>
|
|
; ds:di point to BDS to be installed
|
|
les si,dword ptr cs:[Start_BDS] ; Start at beginning of list
|
|
push es ; Save pointer to current BDS
|
|
push si
|
|
; es:si now point to BDS in linked list
|
|
Loop_Next_BDS:
|
|
cmp si,-1 ; got to end of linked list?
|
|
jz Install_Ret
|
|
; If we have several logical drives using the same physical drive, we must
|
|
; set the I_Am_Mult flag in each of the appropriate BDSs.
|
|
mov al,byte ptr ds:[di].DriveNum
|
|
cmp byte ptr es:[si].DriveNum,al
|
|
jnz Next_BDS
|
|
message ftestinit,<"Logical Drives",cr,lf>
|
|
xor bx,bx
|
|
mov bl,fI_Am_Mult
|
|
or word ptr ds:[di].flags,bx ; set flags in both BDSs concerned
|
|
or word ptr es:[si].flags,bx
|
|
mov bl,fI_Own_Physical
|
|
xor bx,-1
|
|
and word ptr ds:[di].flags,bx ; reset that flag for 'new' BDS
|
|
; We must also set the fChangeline bit correctly.
|
|
mov bx,word ptr es:[si].flags ; determine if changeline available
|
|
and bl,fChangeline
|
|
xor bh,bh
|
|
or word ptr ds:[di].flags,bx
|
|
|
|
Next_BDS:
|
|
; Before moving to next BDS, preserve pointer to current one. This is needed at
|
|
; the end when the new BDS is linked into the list.
|
|
pop bx ; discard previous pointer to BDS
|
|
pop bx
|
|
push es
|
|
push si
|
|
mov bx,word ptr es:[si].link + 2
|
|
mov si,word ptr es:[si].link
|
|
mov es,bx
|
|
jmp short Loop_Next_BDS
|
|
|
|
Install_Ret:
|
|
pop si ; Retrieve pointer to last BDS
|
|
pop es ; in linked list.
|
|
mov ax,ds
|
|
mov word ptr es:[si].link+2,ax ; install BDS
|
|
mov word ptr es:[si].link,di
|
|
mov word ptr ds:[di].link,-1 ; set NEXT pointer to NULL
|
|
RET
|
|
INSTALL_BDS ENDP
|
|
|
|
;
|
|
; RE_INIT installs the Int 2F vector that will handle communication between
|
|
; external block drivers and the internal driver. It also installs the
|
|
; Reset_Int_13 interface. It is called by SYSYINIT
|
|
;
|
|
PUBLIC RE_INIT
|
|
RE_INIT PROC FAR
|
|
Message ftestinit,<"REINIT",CR,LF>
|
|
PUSH AX
|
|
PUSH DS
|
|
PUSH DI
|
|
XOR DI,DI
|
|
MOV DS,DI
|
|
MOV DI,2FH*4 ; point it to Int 2F Vector
|
|
MOV AX,WORD PTR DS:[DI]
|
|
MOV WORD PTR CS:[INT_2F_NEXT],AX
|
|
MOV AX,WORD PTR DS:[DI+2] ; preserve old Int 2F vector
|
|
MOV WORD PTR CS:[INT_2F_NEXT+2],AX
|
|
|
|
; INSTALL the Reset_Int_13
|
|
; interface
|
|
|
|
|
|
CLI
|
|
MOV Word Ptr DS:[DI],Offset Int_2f_13 ; install new vectors
|
|
MOV Word Ptr DS:[DI+2],CS
|
|
STI
|
|
POP DI
|
|
POP DS
|
|
POP AX
|
|
RET
|
|
|
|
RE_INIT ENDP
|
|
|
|
;-------------------------------------------------
|
|
;
|
|
; Ask to swap the disk in drive A:
|
|
; Using a different drive in a one drive system so
|
|
; request the user to change disks
|
|
;
|
|
Public SWPDSK
|
|
SWPDSK PROC NEAR
|
|
mov al,byte ptr ds:[di].drivelet ; get the drive letter
|
|
add al,"A"
|
|
mov cs:DRVLET,AL
|
|
push ds ; preserve segment register
|
|
push cs
|
|
pop ds
|
|
mov SI,OFFSET SNGMSG ; ds:si -> message
|
|
push BX
|
|
call WRMSG ;Print disk change message
|
|
call FLUSH
|
|
; wait for a keyboard character
|
|
xor AH, AH ; set command to read character
|
|
int 16h ; call rom-bios
|
|
POP BX
|
|
pop ds ; restore segment register
|
|
WRMRET:
|
|
ret
|
|
SWPDSK ENDP
|
|
|
|
;----------------------------------------------
|
|
;
|
|
; WrMsg writes out message pointed to by [SI]
|
|
;
|
|
Public WrMsg
|
|
WRMSG PROC NEAR
|
|
lodsb ; get the next character of the message
|
|
or AL,AL ; see fi end of message
|
|
jz WRMRET
|
|
pushf
|
|
push CS
|
|
call OUTCHR
|
|
jmp SHORT WRMSG
|
|
WRMSG ENDP
|
|
|
|
INCLUDE BIOMES.INC
|
|
|
|
;
|
|
; End of support for multiple floppies with no logical drives
|
|
; This is not 'special' any more because we now have the capability of
|
|
; defining logical drives in CONFIG.SYS. We therefore keep the code for
|
|
; swapping resident ALL the time.
|
|
;
|
|
|
|
;;Rev 3.30 modification ----------------------------
|
|
;Variables for Dynamic Relocatable modules
|
|
;These should be stay resident.
|
|
|
|
public INT6C_RET_ADDR
|
|
INT6C_RET_ADDR DD ? ;ret add from INT 6C for P12 mach
|
|
|
|
PATHSTART 001,CLK
|
|
;
|
|
; DATA STRUCTURES FOR REAL-TIME DATE AND TIME
|
|
;
|
|
public BIN_DATE_TIME
|
|
public MONTH_TABLE
|
|
public DAYCNT2
|
|
public FEB29
|
|
BIN_DATE_TIME:
|
|
DB 0 ; CENTURY (19 OR 20) OR HOURS (0-23)
|
|
DB 0 ; YEAR IN CENTURY (0-99) OR MINUTES (0-59)
|
|
DB 0 ; MONTH IN YEAR (1-12) OR SECONDS (0-59)
|
|
DB 0 ; DAY IN MONTH (1-31)
|
|
MONTH_TABLE:
|
|
DW 0 ;MJB002 JANUARY
|
|
DW 31 ;MJB002 FEBRUARY
|
|
DW 59 ;MJB002
|
|
DW 90 ;MJB002
|
|
DW 120 ;MJB002
|
|
DW 151 ;MJB002
|
|
DW 181 ;MJB002
|
|
DW 212 ;MJB002
|
|
DW 243 ;MJB002
|
|
DW 273 ;MJB002
|
|
DW 304 ;MJB002
|
|
DW 334 ;MJB002
|
|
DAYCNT2 DW 0000 ;MJB002 TEMP FOR CNT OF DAYS SINCE 1-1-80
|
|
FEB29 DB 0 ;MJB002 FEBRUARY 29 IN A LEAP YEAR FLAG
|
|
PATHEND 001,CLK
|
|
|
|
;;End of modification modification ----------------------------
|
|
|
|
Public EndFloppy
|
|
EndFloppy Label Byte
|
|
;
|
|
; End of code for virtual floppy drives
|
|
;
|
|
Public EndSwap
|
|
EndSwap Label Byte
|
|
|
|
PATHSTART 004,BIO
|
|
|
|
Public HNUM
|
|
HNUM DB 0 ; number of hardfile (hard drives)
|
|
|
|
Public HardDrv
|
|
HARDDRV DB 80H ;Physical drive number of first hardfile
|
|
|
|
|
|
;
|
|
; "HDRIVE" is a hard disk with 512 byte sectors
|
|
;
|
|
|
|
EVENB
|
|
Public BDSH
|
|
BDSH DW -1 ; Link to next structure
|
|
DW Code
|
|
DB 80h ; physical drive number
|
|
DB "C" ; Logical Drive Letter
|
|
Public HDRIVE
|
|
HDRIVE:
|
|
DW 512
|
|
DB 1 ; Sectors/allocation unit
|
|
DW 1 ; Reserved sectors for DOS
|
|
DB 2 ; No. of allocation tables
|
|
DW 16 ; Number of directory entries
|
|
DW 0000 ; Number of sectors (at 512 bytes each)
|
|
DB 11111000B ; Media descriptor
|
|
DW 1 ; Number of FAT sectors
|
|
DW 00 ; Sector limit
|
|
DW 00 ; Head limit
|
|
DW 00 ; Hidden sector count
|
|
DB 0 ; TRUE => bigfat
|
|
OPCNTH DW 0 ; Open Ref. Count
|
|
VOLIDH DB "NO NAME ",0 ; Volume ID for this disk
|
|
DB 3 ; Form Factor
|
|
FLAGSH DW 0020H ; Various Flags
|
|
dw 40 ; number of cylinders
|
|
RecBPBH db 31 dup (?) ; Recommended BPB for drive
|
|
TRACKH DB -1 ; Last track accessed on this drive
|
|
TIM_LOH DW -1 ; Keep these two contiguous (?)
|
|
TIM_HIH DW -1
|
|
;
|
|
; End of single hard disk section
|
|
;
|
|
|
|
|
|
Public EndOneHard
|
|
EndOneHard Label Byte
|
|
|
|
|
|
|
|
|
|
;
|
|
;"DRIVEX" is an extra type of drive usually reserved for an
|
|
; additional hard file
|
|
;
|
|
|
|
EVENB
|
|
Public BDSX
|
|
BDSX DW -1 ; Link to next structure
|
|
DW Code
|
|
DB 81h ; physical drive number
|
|
DB "D" ; Logical Drive Letter
|
|
Public DRIVEX
|
|
DRIVEX:
|
|
DW 512
|
|
DB 00 ; Sectors/allocation unit
|
|
DW 1 ; Reserved sectors for DOS
|
|
DB 2 ; No. of allocation tables
|
|
DW 0000 ; Number of directory entries
|
|
DW 0000 ; Number of sectors (at 512 bytes each)
|
|
DB 11111000B ; Media descriptor
|
|
DW 0000 ; Number of FAT sectors
|
|
DW 00 ; Sector limit
|
|
DW 00 ; Head limit
|
|
DW 00 ; Hidden sector count
|
|
DB 0 ; TRUE => bigfat
|
|
OPCNTD DW 0 ; Open Ref. Count
|
|
VOLIDD DB "NO NAME ",0 ; Volume ID for this disk
|
|
DB 3 ; Form Factor
|
|
FLAGSD DW 0020H ; Various Flags
|
|
dw 40 ; number of cylinders
|
|
RecBPBD db 31 dup (?) ; Recommended BPB for drive
|
|
TRACKD DB -1 ; Last track accessed on this drive
|
|
TIM_LOD DW -1 ; Keep these two contiguous
|
|
TIM_HID DW -1
|
|
|
|
;
|
|
; End of section for two hard disks
|
|
Public EndTwoHard
|
|
EndTwoHard Label Byte
|
|
|
|
PATHEND 004,BIO
|
|
|
|
|
|
Public TwoHard
|
|
TWOHARD LABEL BYTE
|
|
|
|
PAGE
|
|
include ms96tpi.inc
|
|
|
|
;;Rev 3.30 modification ----------------------------
|
|
;Memory allocation for BDSM table.
|
|
PUBLIC BDSMs
|
|
BDSMs BDSM_type Max_mini_dsk_num dup (<>) ;currently max. 23
|
|
|
|
;** End_of_BDSM defined in MSINIT.ASM will be used to set the appropriate
|
|
;** ending address of BDSM table.
|
|
;;End of modification ----------------------------
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug005sp
|
|
;
|
|
;;3.3 BUG FIX -SUNILP ------------------------------
|
|
;Paragraph buffer between the BDSMs and MSHARD
|
|
;
|
|
;The relocation code for MSHARD needs this. this cannot be used for
|
|
;anything. nothing can come before this or after this.....IMPORTANT!!!!
|
|
;don't get too smart and using this buffer for anything!!!!!!
|
|
;
|
|
db 16 dup(0)
|
|
;
|
|
;end of bug fix buffer
|
|
;;
|
|
;;3.3 BUG FIX -SUNILP------------------------------
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug005sp
|
|
CODE ENDS
|
|
END
|