Introduction CP/M Disk File Structure Install Disk Doctor Invoking Disk Doctor Recovering Disks and Files, Wards A,B, and C Un-erasing Files, Wards D and E Common Disk Problems and Recovery Procedures :Introduction Disk Doctor is comprehensive diskette recovery package comprised of an installation program (INSTALL.COM) and five recovery procedures (DOCTOR.COM), refered to as "Wards," each capable of performing a specific recovery task. Three general kinds of facilities are provided. Ward A can help restore the usefulness of disks with malfunctions in areas not assigned to files. Wards B and C can aid in recovering files affected by disk malfunctions. Wards D and E can aid in recovering files accidentally erased. As an added benefit, Ward A can also be used to certify new disks and eliminate any bad sectors before they can cause problems. TWO IMPORTANT WARNINGS If you know or suspect that you have both unwanted erasures and malfunctions on the same disk, you must deal with all erasures first. This is necessary because those procedures used to recover from disk malfunctions may overwrite erased files, making their recovery impossible. Before attempting to use any of DISK DOCTOR's facilities, you must be certain that it is properly installed for each disk format on which you intend to use it. DISK DOCTOR comes pre-installed for the type of media on which it was supplied; but if you wish to use it on other media or densities, a careful reading of Chapter 3 is recommended.  : CP/M FILE STRUCTURE This system is hierarchical in structure. Its levels are, in order of decreasing size: the disk itself, the file, the extent, the track, the group, and the sector. It is one of the most convenient and desirable features of CP/M that all ordinary data manipulations may be performed in terms of disks and files alone. However, to better understand how DISK DOCTOR's Wards perform their tasks and, in particular to make good use of Ward B, you will need a good grasp of all levels of the CP/M file structure. In this chapter we will describe each level of the hierarchy starting with the smallest sized structure and working up. The smallest unit (above the byte--or character) in the hierarchy is the sector. A sector is the minimum unit of disk data accessible by CP/M. CP/M defines a sector as 128 bytes (characters). It expects these sectors to be Šorganized into tracks. The track is merely a means of organizing and locating the individual sectors on a disk. The unit in which CP/M allocates sectors to files is the group. A group is composed of a fixed number of sectors, either 8 or 16 depending on the implementation of CP/M on your system. Space for the disk directory is also allocated in groups. An extent is, in turn, made up of a variable number of groups with the maximum number of groups per extent being 8 or 16 depending on your CP/M implementation. (Most CP/M systems have a maximum of 128 sectors per extent: either 16 groups of 8 sectors, or 8 groups of 16 sectors. The Intertec Superbrain, however, has extents with a maximum of 16 groups of 16 sectors or 256 sectors per extent.) A CP/M file is composed of one or more extents; therefore, assigning a variable number of groups to an extent facilitates the efficient, dynamic allocation of disk storage to files. A disk may contain from zero to many files. Each disk is accessed by the system through its assigned drive name. A disk retains its hierarchical structure with the exception of the drive name when it is removed from the drive. Thus it makes sense to talk about a disk containing a file, even if the disk is not in a drive (i.e., is not assigned a drive name).  FORMAT OF A DIRECTORY ENTRY Thus far, we have described the structure of CP/M disk files themselves. However, for each extent of each file, there exists, also on disk, a 32-byte field called the directory entry. All directory entries together make up the disk directory which usually resides within the first one or two groups on the disk. A directory entry fulfills two important functions in the CP/M disk file system: first, it provides a means of managing the storage allocated to files on the disk; and second, it provides the means of locating those same files.  Knowledge of the format of a directory entry is potentially useful, since Ward B (in conjunction with CP/M's DUMP or DDT facilities) can be used to examine directory entries (see p. 16), and since sophisticated use of Ward B requires their examination. The diagram appearing below represents the format of the 32-byte field of a directory entry. 0 16 31 | | | |XN|NN|NN|NN|NT|TT|EX|XS|GG|GG|GG|GG|GG|GG|GG|GG| Š N -- byte in filename field T -- byte in file type field E -- extent number S -- extent size in sectors G -- byte in group allocation map field X -- byte of no interest to us  The group allocation map field contains a list of the logical group numbers in the order the groups were assigned to the file. Three formats in use (under different CP/M implementations) for this 16-byte field are represented in the three diagrams appearing below (the 'g's stand for group numbers and the '0's stand for zero bytes --recall that 8080 word format is low order byte, high order byte). 16 31 | | |GG|GG|GG|GG|00|00|00|00| 8 groups/extent, group number stored per byte 16 31 | | |G0|G0|G0|G0|G0|G0|G0|G0| 8 groups/extent, group number stored per word 16 31 | | |GG|GG|GG|GG|GG|GG|GG|GG| 16 groups/extent, group number stored per byte : HOW TO INSTALL DISK DOCTOR DISK DOCTOR is composed of two files: DOCTOR.COM and INSTALL.COM. The first few sectors of DOCTOR.COM contain information about the disk environment in which it expects to operate. It is this information that INSTALL.COM alters to tailor DOCTOR.COM to a particular new disk format. To do this INSTALL.COM requires: that you insert a disk containing DOCTOR.COM in drive A and a blank formatted disk in a drive which you may specify when prompted (CR defaults to B), and that you supply it with the proper values for three parameters when you are prompted to do so. These parameters are: 1.) the lowest physical sector number on a track (either 0 or 1, most drives start numbering at 1); 2.) the number of sectors on a track (in CP/M version 2.0 and later STAT :DSK: provides the number of sectors on a track); 3.) the number of tracks on a disk. Š: Invoking Disk Doctor DISK DOCTOR exists as an executable command file (DOCTOR.COM) on disk. It does not require any command line arguments when invoked. It currently does require a dual disk drive system to perform its functions. There should be a disk containing DOCTOR.COM in drive A before invoking DISK DOCTOR. Once DISK DOCTOR is loaded into memory and the first question answered, that disk can be removed, as the program resides in memory until exited. First DISK DOCTOR asks you to select one of three disk operation display options. To enable this display is useful only if your console can support a carriage return without a line feed. When the program is performing disk I/O operations, it will display the track, group, and sector of each operation by rewriting the same line with updates. When bad data is encountered a carriage return and a line feed are executed--leaving the guilty track, group, and sector displayed above the current line. Choosing the first option, "S", will result in a full display of all disk I/O operations by sectors. : Recovering Disks and Files: Wards A, B, and C The basic principle underlying Wards A, B, and C is that most disk malfunctions are simply the result of a single sector failing to be read or written properly. Such a malfunction will have different effects and will require different remedies depending on whether the bad sector is within a group assigned to the directory or to a file--or within a group not presently assigned.  BAD SECTORS IN GROUPS ASSIGNED TO THE DIRECTORY If there is a single bad sector in the directory of a disk, CP/M will not read the directory past that sector. Hence, although some files may still be read, none may be written. In most cases, the bad sector will have nothing to do with the file or files of interest to the user. To placate this protective feature of CP/M, Ward C will copy an entire disk, replacing all data in any damaged sectors in the directory with the disk formatting character, 0E5h; thus allowing the rest of the directory to be accessed through the usual system commands. If the bad sector does affect the directory entry of a file of interest, then Ward B provides a means of working around the system to extract data from the directory and the file.  BAD SECTORS IN GROUPS ASSIGNED TO FILES If a file contains a single bad sector, CP/M will not read the file beyond that sector and the entire file is rendered useless. While a sector of bad data in an object Šfile might mean that the file is useless, a single bad sector in a source or text file would be only a minor annoyance if the rest of the file could be recovered. Ward C will, as it copies, also replace all data in any bad sectors that it finds in files with ASCII spaces. This allows the user to edit the file and easily repair it. It might seem that a file could be recovered down to a single bad byte, but this is not possible because many disk control systems buffer their read operations (read data in blocks) and most errors cause a loss of sychronization.  BAD SECTORS IN UNASSIGNED GROUPS If a bad sector appears in an unassigned group, CP/M will not make use of any of the good sectors above it, and will refuse to close any file that attempts to write to the bad sector. Since each disk storage operation will attempt to use the lowest available group, the disk will be as useless as if it were full. Ward A circumvents this CP/M protective feature by means of assigning all groups containing bad sectors to a special file intended never to be used again.  WARD A This Ward is concerned with restoring the usefulness of a disk rather than recovering data from it. Like the other DISK DOCTOR programs, it uses the most primitive BIOS hooks to bypass the automatic CP/M features. Ward A loads the directory from the disk containing the bad sector(s) and searches for all unassigned groups. This prevents damage to the intact files on the disk. Each unassigned group is written and read to validate its integrity. If the program locates a bad sector, it will assign the entire group containing it to a special file called MORGUE; thus effectively eliminating the bad group from the disk. Obviously, you should never use the filename MORGUE in any of your own programs. Also, unless you want the same bad groups to return to haunt you, you must NEVER ERASE MORGUE FILES. (Under CP/M Version 2.0 and later, MORGUE files have the R/O attribute set to prevent such erasures.) The file type (extension) of a MORGUE file also serves a purpose. The first time Ward A is run on a disk; if it finds bad sectors, it will open a file: MORGUE.NO1. Each time it is rerun on the same disk; if it finds more bad sectors, it will generate another consecutively numbered MORGUE file (e.g., MORGUE.NO2). Thus it is possible to see at a glance if a disk has been prone to trouble, and avoid selecting it for critical work. Sometimes it is necessary to run Ward A on a disk several times in order to cause all faulty sectors to fail.  The three "do's and don'ts" listed below are essential Što the effective use of Ward A. 1.) It cannot be overemphasized that you must never erase any MORGUE files. Erasing a MORGUE simply undoes everything Ward A has done. 2.) If there are erased files on a disk which you wish to recover by using Ward D, you must do so before executing Ward A on the disk. Once it is executed, no erased file can be recovered as all of its groups will be overwritten. 3.) Before running Ward A on a disk, all temporary or aborted files (such as those with the extension .$$$) on the disk should be erased. Some text editors may close such files when bad sectors are encountered, and then re-open them later. This will cause Ward A to miss the troublemaker, since the group containing it appears to be assigned to a file.  If you select Ward A from DISK DOCTOR's menu, you will first be prompted to place your bad disk in the "patient" drive you previously designated. You will then be given one last chance to decide whether you actually want to run Ward A or not. If not, the program returns you to "Admitting."  WARD B This Ward allows you to pull arbitrarily specified groups or sectors of data off of one disk (patient) and collect them in a specified file on another disk (recovery). You can then edit this file, discarding the data that is of no value to you. This is a powerful, though rather primitive capability. To get the maximum benefit from it requires an informed and thoughtful approach. You should note that, through this Ward, the directory is as accessible as the files. If you are searching for the groups assigned to a particular file; examining the directory, even if it is damaged, should provide valuable information. If you select Ward B from DISK DOCTOR's menu, you will first be prompted to place the bad disk in the previously specified "patient" drive and a good disk in the corresponding "recovery" drive. You will then be prompted to specify the collection file on your recovery disk. After you have typed your collection filename and hit return, the program will ask you whether you wish to recover data by group or by sector. Then according to your choice, data is collected into a buffer by specifying either hex group numbers or hex track and sector numbers when prompted. A bad disk is not required to have a good directory as it is never accessed unless specified for collection. In either Šcollection mode, a carriage return entry will cause the next logical group or track-sector combination to be collected. When all desired data has been collected, the file can be closed by typing a period and carriage return (same as DDT Substitute). If the buffer becomes full, a message will be displayed, and the file will be closed automatically. In the case of very long files, several recovery files may be specified, and then concatenated using PIP. Files recovered using Ward B are just like any other files under CP/M. Files containing text may be viewed using the TYPE transient. With enough patience, text files with directory entries damaged beyond recovery can be gleaned from a disk. Files containing object code may be examined using DDT dump or DUMP transients. File directories may also be examined by these means. Much information that is not otherwise visible can be accessed through this program. A good example of this is the use of Ward B to determine whether or not DISK DOCTOR itself has been properly installed.  WARD C This Ward is your main resource for dealing with bad sectors in files and directories. It can best be thought of as a very tolerant disk copying routine. Ward C copies each good sector, in sequence, just as it finds it; but each bad sector is filled with characters which function as blanks. In the case of directories, the blank disk formatting character, 0E5h is used. Bad sectors in files are filled with ASCII spaces. This will solve most problems involving accessing files. The only access problem it cannot solve is that of an important file with a damaged directory entry. Files with directory entries unaffected by bad sectors can be accessed and manipulated in all the ways CP/M usually allows. They can thus be examined and any damaged sectors repaired to the extent possible. One disadvantage of Ward C is that it is slow. To copy a disk using this program can take up to an hour depending on the drive and the number of bad sectors encountered. It will more commonly take about ten minutes. This routine's slowness results from its circumvention of the usual CP/M file handling utilities. : Un-erasing Files: Wards D and E Files may be erased in error either directly by user command (ERA) or indirectly as a result of a program's file handling. Wards D and E will allow the user to recover completely from both kinds of errors provided that the groups originally assigned to the erased files have not been reallocated to other files. If some groups have been reallocated, it may still be possible to salvage the Šremaining groups in the file through skillful use of Ward B. If no disk write operations have been performed since the erasure, then the erased file will always be recoverable. Wards D and E rely on the fact that CP/M, in its file management, does the minimum amount of processing necessary. Hence, CP/M's erasing process involves a few flag-setting operations rather than any overwriting of a file's assigned groups or directory entries. This allows files with groups not yet reallocated (and thus overwritten) to be fully recovered by re-setting those flags to their original values. If you know the exact name of the erased file, you can go directly to Ward D to recover it. If you do not know the name, Ward E provides a directory of all the recoverable erased files (as well as all the active files), by extents, on a disk.  WARD D This Ward performs its functions by reading the directory of a disk and then rewriting it, with minor changes, back to the same disk. The program operates in two modes: as an erased file recovery routine and as a fast, but dangerous directory repair routine. The primary use of Ward D is to recover erased files. After you enter the program, you will be asked to place the disk with the erased file in the previously designated patient drive, give the unambigous filename of the erased file, and hit return. The program will then read the directory of the disk and search for the specified file. It will indicate if it has found the file and, if so, will then proceed to check whether any active file has cannibalized the groups of the desired file. If any of the groups appear in the directory entry of an active file, the program will inform you that the file is not recoverable. If not it will un-erase the file. If only a few groups have been lost to active files, then it may be worthwhile to use Ward B to recover the groups remaining. (NOTE: If many disk operations have been carried out since the erasure, there is a chance that groups have been used by a file which has itself been subsequently erased. If so, Ward D may not warn you that the reactivated file is essentially useless.)  Ward D can recover multiple extent files, but only if the following conditions are satisfied: 1.) all groups in all extents are unallocated, 2.) all extents are in ascending order, Š 3.) no extents are missing. If any one of these conditions is not met, Ward D will not recover the file. Ward B is then the appropriate remedy. (NOTE: You must rename any active file of the same name as the erased file you wish to recover, prior to attempting recovery. Erasing the namesake would only result in its being un-erased.)  WARD E This is a specialized directory program. It will display all the files on a disk; with the erased, apparently recoverable files enclosed in parentheses: e.g., (MUGWUMP.TXT). As in Ward D, the appearance of a file as recoverable does not guarantee that it has not been damaged by a file which has in turn been erased. This program is very useful in searching disks for a recoverable version of a lost file. Ward D would then be used to attempt the recovery, as Ward E only reads the directory and does not modify it in any way. It requires that you place the disk to be searched in the designated patient drive and give your consent for the program to proceed. In order for a file to be recovered, it must show up in all its extents during Ward E, and the extents must be in ascending order. If, for example, extent 00 is missing, Ward D will not attempt to recover extent 01 of the same filename. If extent 01 preceeded extent 00 in the Ward E display, WARD D would not attempt to recover either extent because that version of extent 01 must have been from a different generation of the file (CP/M always puts the extents in ascending order). Ward B can be used to piece together such fragmented files if necessary. : Common Disk Problems and Recommended Recovery Procedures _____________________________________________________________ I. File(s) accidentally | Invoke DISK DOCTOR (p. 10), erased, filename(s) | go to Ward D (p. 19). If known. | portions of erased file(s) | have been reallocated, you | can go to Ward B (p. 16) to | salvage the remaining groups. -----------------------------|------------------------------- II. File(s) accidentally | Invoke DISK DOCTOR (p. 10), erased, filename(s) | go to Ward E (p. 19). Disk unknown | directory with filename(s) of | recoverable erased file(s) | in parentheses will be dis- | played. Continue as in I | above. -----------------------------|-------------------------------  ŠIII. All existing files are | Invoke DISK DOCTOR (p. 10), intact, but attemp- | go to Ward A (p. 15). {This ting to create a new | same procedure may also be file results in CP/M | used to screen new disks and error message--BDOS | eliminate malfunctioning ERR ON d:BAD SECTOR. | groups from further use.} -----------------------------|------------------------------- IV. An attempt to access | Invoke DISK DOCTOR (p. 10), an existing file re- | go to Ward C (p. 18). The de- sults in CP/M error | sired file should be acces- message--BDOS ERR ON | sible on the disk copy gene- d:BAD SECTOR, but | rated by Ward C, although file directory is | data in any bad sectors will still accessible. | be replaced by ASCII spaces. -----------------------------|------------------------------- V. Any attempt to access | Invoke DISK DOCTOR (p. 10), directory (such as | go to Ward C (p. 18). If the entering DIR) re- | desired file still cannot be sults in CP/M error | accessed on the disk copy message--BDOS ERR ON | generated by Ward C, go to d:BAD SECTOR. | Ward B (p. 16) to salvage | what data you can from the | original disk or the copy. -----------------------------|------------------------------- TO THE USER: As the creator of a program cannot always con- ceive of all uses to which it may be put; if you discover other ways to use DISK DOCTOR to your advantage, please call or write us at SuperSoft to tell us about it.