FBAD.ASM ver. 5.7
(revised 11/29/84)
NON-DESTRUCTIVE DISK TEST PROGRAM
FBAD will find all bad blocks on a disk and build a file [UNUSED].BAD
to allocate them, thus "locking out" the bad blocks so CP/M will not
use them. This allows continued use of the disk as though it had no
bad areas.
Originally written by Gene Cotton, published in "Interface Age" for
September 1980, page 80.
This program has been written to allow it to work with (hopefully) all
CP/M 2.x systems, and most 1.4 CP/M systems. It has been tested on
numerous different disk systems.
Many double-density disk systems have single-density system tracks.
If this is true with your system, you can change the program to skip
the system tracks, without re-assembling it. To do this, set the byte
at at 103H to 0 if you don't want the system tracks tested, otherwise
keep it 1. The program tests if you have a "blocked" disk system,
that is, when the same physical disk is separated into logical disks
by use of the SYSTRK word in the disk parameter block. If more than 5
tracks are specified, the program skips the system tracks.
If you are using CP/M 2.x , you may assign the user number where the
[UNUSED.BAD] file will be created, by changing the byte at 104H to the
desired user number.
FBAD displays the TRACK-Nr it has checked on the screen-terminal. If
you like to log the results on a printer (or you have a hardcopy term-
inal, you may want to change LOC 105H to a non-zero value, and FBAD
will display a * for each track checked. The number in 105H controls
the number of *'s per line. (Note patch values are HEX: 76=4CH.) Use
^P to turn the printer on before running FBAD, it will be automatically
turned off by the warm boot at the end.
NOTE: These changes can be done with DDT as follows:
A>DDT FBAD.COM
-S103
103 01 00 ;Don't test SYSTEM tracks
104 FF 0F ;Put [UNUSED.BAD] in USER 15
105 00 4C ;Issue CR/LF after 76 *'s
106 31 . ;Finished with changes
-^C
Before using this program to "reclaim" a diskette, the diskette should
be reformatted. If this is not possible, at least assure yourself
that any existing files on the diskette do not contain unreadable re-
cords. If you have changed diskettes since the last warm-boot, you
must warm boot again before running this program.
To use the program, insert both the disk containing FBAD.COM and the
diskette to be checked into the disk drives. The diskette containing
FBAD.COM can be the one that is to be checked. Assume that the pro-
gram is on drive "A" and the suspected bad disk is on drive "B". In
response to the CP/M prompt "A>", type in FBAD B: This will load the
file FBAD.COM from drive "A" and test the diskette on drive "B" for
unreadable records. The only allowable parameter after the program
name is a drive specification (of the form " N:") for up to four (A
to D) disk drives. If no drive is specified, the currently logged-in
drive is assumed to contain the diskette to check.
The program first checks the CP/M System tracks (up to 5), and any
errors here prohibit the diskette from being used on drive "A", since
all "warm boots" occur using the system tracks from the "A" drive.
Floppy diskettes normally use 2 tracks for the system; Winchester hard
disks may use one or more.
Version 5.5 and later automatically skip the system check if 5 or
more tracks are reserved for the system. This allows the program to
be used on BOTH floppy and Winchester systems without patching.
The program next checks the first two data blocks containing the
diskette directory. If errors occur here, the program terminates with
the control returning to CP/M. No other data blockes are checked as
errors in the directory render the diskette useless.
Finally, all the remaining data blocks are checked. Any records that
are unreadable cause the data block which contains them to be stored
temporarily as a "bad block". At the end of this phase, the message
"nn bad blocks found" is displayed (where nn is replaced by the number
of bad blocks, or "No" if no read errors occur). If bad blocks occur,
the filename [UNUSED].BAD is created, the list of "bad blocks" is put
in the allocation map of the directory entry for [UNUSED].BAD, and the
file is closed. When the number of "bad blocks" exceeds 16, the pro-
gram will open additional extents as required to hold the overflow.
If the diskette has more than 32 "bad blocks", perhaps it should be
sent to the "big disk drive in the sky" for the rest it deserves.
If any "bad blocks" do occur, they are allocated to [UNUSED].BAD and
no longer will be available to CP/M for future allocation. This ef-
fectively locks out bad records on the diskette allowing its continued
use.
11/29/84 Integrated Mike Webbs idea to display Track-Nr. Changed DOC
v57 up front accordingly. (BGE)
07/04/84 Added Ted Shapin's fixes from 1981 that were not included in
v56 the 06/07/84 version. Reformatted. (IMH)
06/07/84 Added code at CHKSYS to skip system tracks if more than 5
v55 are present (most systems use 1 or at most 2 tracks for the
system). This makes the program practical for both floppy
and Winchester systems. Cosmetic change for printer logging
to add CR/LF after 76 *'s. Fixed problem in DECOUT to give
correct total for max size Winchester disks. (DHR)