]>
wirehaze git hosting - MS-DOS.git/blob - v2.0/source/GENFOR.ASM
1 ; Generic FORMAT module for any ms-dos disk erases the directory,
2 ; zeros FAT, and marks bad sectors
4 INCLUDE DOST
:DOSSYM
.ASM
6 CODE SEGMENT PUBLIC 'CODE'
8 ASSUME
CS:CODE,DS:CODE,ES:CODE
10 PUBLIC FATID
,STARTSECTOR
,SWITCHLIST
,FREESPACE
,FATSPACE
11 PUBLIC INIT
,DISKFORMAT
,BADSECTOR
,DONE
,WRTFAT
,HARDFLAG
12 EXTRN SWITCHMAP
:WORD,DRIVE
:BYTE
18 INT 21H
;FORCE A FATREAD
22 MOV [CURCNT
],AL ;SET UP FAT COUNT
46 SPC
DB ?
;SECTORS PER CLUSTER
47 FATCNT
DB ?
;NUMBER OF FATS ON THIS DRIVE
49 DSKSIZE
DW ?
;NUMBER OF SECTORS ON THE DRIVE
50 START
DW 0 ;CURRENT TEST SECTOR
56 INT 21H
;FORCE A FATREAD
57 MOV AL,[BX+4] ;SECTORS PER CLUSTER - 1
59 MOV CH,AL ;CH = SECTORS PER CLUSTER
61 MOV BP,[BX+0DH] ;MAXCLUS + 1
65 ADD BP,[BX+0BH] ;BP = NUMBER OF SECTORS ON THE DISK
66 MOV AL,[BX+0FH] ;GET SIZE OF FAT IN SECTORS
67 MOV AH,[BX+8] ;GET NUMBER OF FATS
68 MOV DX,[BX+6] ;FIRST SECTOR OF FAT
69 MOV CL,[BX+16H
] ;FATID BYTE
70 MOV SI,[BX+2] ;SECTOR SIZE
71 MOV BX,[BX+0BH] ;FIRST SECTOR OF DATA
83 MUL SI ;AX = SIZE OF FAT
88 ADD [FREESPACE
],AX ;AX = SIZE OF TEMP BUFFER
101 MOV CL,[SPC
] ;READ ONE ALLOCATIONS WORTH
103 CMP BYTE PTR [FIRSTFLAG
],0
105 MOV CX,[STARTSECTOR
] ;FIRST TIME THROUGH READ SYSTEM AREA
106 MOV BYTE PTR [FIRSTFLAG
],0
108 SETBX: MOV BX,[BUFFER
]
111 POP AX ;CLEAN UP STACK
113 JC GOTBAD
;KEEP LOOKING FOR BADSECTORS
120 ADD [START
],AX ;SET UP FOR NEXT CALL
124 FIRSTFLAG
DB 1 ;1 = FIRST CALL TO BADSECTOR
127 SWITCHLIST
DB 3,"OVS"