ABI2 1.0.002

Contents

Welcome

ABI2 is a program that manipulates physical disk drives (diskettes or hard drives). It uses your system's BIOS to access these drives and will only cope with formats that are readable by your BIOS. In general, non-MSDOS disks can be read by your BIOS, but not all disks will be readable by it.

Although ABI2 is an interactive program, it can process command-line parameters.

Existing users may want to consult the change history list to see what changes have been made between versions.

IMPORTANT NOTE:

ABI2 has the capability to write to the disk under inspection. These facilities are disabled by default; to use them, you have to enable them via the Options menu. It is assumed that you know what you are doing so there is very little error checking - you have been warned.

Change History

1.0.002

Adopt the new "standard" format for the files that keep track of the program's version number. This will allow easy generation of the current version of the program and, in particular, the web site can automatically generate a list of current program version numbers.

0.9m

Corrected the code that writes logical disk sectors. The was broken for "big" disks and has now been fixed.

0.9k

Added GZIP compression option to range-to-file and file-to-range for logical drives only.

Also, the range-to-file and file-to-range handling was wrong for physical drives.

0.9i

Added GZIP compression option to block-to-file and file-to-block. (As a result of lack of memory, the calculator, ASCII table, context-sensitive help and status help facilities have all had to be removed.)

0.9h

Fixed bug in the heap display when video mode was changed.

0.9g

Fixed range-to-file transfer on logical drives.

0.9f

Display of total drive capacity fixed on large drives.

0.8i

A command group mode facility has been added.

0.8h

The "get byte value" fields in dialogues now have an "history".

0.?

ABI2 now handles a variety of command-line parameters.

You can now block-to-block copy (on physical) drives.

Command-Line Format

The ABI2 command-line usage is as follows:
        ABI2 [option] [option]...

Any number of the command-line options can appear after the program's name. If no options are supplied, ABI2 displays the physical drive selection dialogue.

Examples of valid ABI2 command-lines include:

        ABI2
        ABI2 WRITE CHECK FD0X01
        ABI2 HD00H
        ABI2 CHECK FD
        ABI2 A: C:
        ABI2 CHECK C:

Command-Line Options

        FD[<number>]
        HD[<number>]
        <letter>:

Open physical floppy drive <number>, physical hard drive <number> or logical drive <letter>:. If no physical drive <number> is supplied, ABI2 defaults to using physical drive zero of the relevant type.

        CHECK

This option toggles the flag that controls whether or not an automatic bad data search operation is carried out when a drive is opened.

If you want to enable automatic checking and log a drive from the command-line, please note that the drive that you want to check should be specified after the check option, as in the above examples. This is because, once specified, the checking option applies to all subsequent drives, whether they are logged from the command-line or interactively.

        WRITE

Toggles the write enable mode flag.

        HEAP

For diagnostic purposes, the free heap size can be displayed where the ABI2 version number normally appears. Use this option to enable this action.

        BETA

This enables "beta test" mode. New facilities introduced into ABI2 may not be fully functional or may be considered "wobbly". If this is the case, then you must invoke this flag to use them.

For example, the track formatting code doesn't yet work. Hence, at present, you must invoke beta test mode to play with those facilities.

Sector Contents Window

This window displays the contents of the current sector. The window is split into two parts, the "header" section and "data" section.

The first field of the header is the current sector "address". For physical drives, this will comprise of three items - the current cylinder, head and sector numbers. For logical drives, there will be only a single, large, sector number.

The next field is the address of the last sector on the diskette.

The third item of the header section is the sector length in bytes.

Next, the total capacity of the disk, in kilobytes, is displayed. (A "kilobyte" is 1024 bytes.) Note that this total is worked out from the value of the last sector address field. If you alter the limits of the disk parameters, then the "total capacity" field will change to reflect these new values. If the limits are altered to show a sub-set of the entire disk, then the capacity field will show the capacity of this sub-set.

If any errors are detected by the program, then a terse error message is displayed at the extreme right-hand side of the header section.

The rest of the window, below the header region, shows the actual disk sector data. At the start of each line is a (hexadecimal) number that indicates the "offset" of the line into the sector buffer.

Following this is the actual sector data bytes. Note that the program displays an "EE" byte if, for whatever reason, the program cannot read the correct data from a sector on the disk.

Moving Around The Disk

Having managed to actually display some data, you probably want to be able to move around the disk under investigation. We have tried to make this as intuitive as possible.

You can move forward and backwards by cylinder, side and sector. Also, you can go to the first and last sector on a track. In addition, there are "rapid movement" options implemented.

Any menu options that seem, to us, to be "obvious", is not cited in this document, so you should see the relevant menus for the actual key stroke short cuts.

Ranges and Blocks

Most of ABI2's functions operate on a sub-division of a disk's data. Let's assume that a starting track of C1-H1 (that is, cylinder number C1, head number H1) and an ending location of C2-H2 has been selected. If the tracks must be sequentially processed, then one of two things can happen when the current track reaches C1-H2:

The first case would be considered a track range whereas the latter would be a track block . (Note that sector ranges and blocks operate in a similar manner.)

For examples of the differences, see the block example and the range example.

Range Example

Assuming that we have a drive with five heads and we specify the track range 2-2 to 4-3, then the tracks would be processed in the following order: 2-2 2-3 2-4 2-5 3-1 3-2 3-3 3-4 3-5 4-1 4-2 4-3. A range is usually used where there is a known "structure" to the data on a disk.

For example, MS-DOS allocates file clusters sequentially when it can. Therefore, an MS-DOS file would probably occupy a contiguous range of clusters on the disk unless the file was large or the disk very fragmented.

For example, if you have a corrupt hard disk and there is a plain-ASCII text file that you wish to recover from it, if you can find the start of the file on the disk (by using string search or whatever), you would be more likely to recover the file by copying the following range of sectors than if you copy the following block of sectors.

Block Example

Assuming that we have a drive with five heads and we specify the track block 2-2 to 4-3, then the tracks would be processed in the following order: 2-2 2-3 3-2 3-3 4-2 4-3.

In general, block processing is required when processing whole disks or parts thereof. For example, when generating a disk image the processing of the whole disk would probably be required. In ABI2, searching for bad sectors is carried out on a block basis.

Note that, in general, block operations on sectors are faster than range operations on sectors because the data are read by track rather than on a sector-by-sector basis.

Number Representation

In general, whenever ABI2 requires a number in a dialogue box or command-line option, you can enter it using one of three bases: decimal, hexadecimal or binary.

For example, all of the following represent 18 decimal: "18", "12h", "0x12", "10010b".

GZIP Compression

The GZIP-compatible compression system implemented in ABI2 is based on use of the ZLIB compression library by Jean-loup Gailly and Mark Adler.

If you want to see exactly what ZLIB does when compressing and decompressing files and, in particular, what it'll do with none-ABI2 generated GZIP files, we invite you to have a look at the ZLIB web page. (See the acknowledgements section.)

Running Under Microsoft Windows

While ABI2 will run under Windows 95, it's not entirely happy doing so. In particular, doing writes to a logical drive is bad news - Windows will zap any attempt to do so without giving you a "do it anyway" option.

If this happens, we would suggest that you merely boot MS-DOS and use that.

We've no idea whether ABI2 will run under Windows 98, NT or 2000. Likewise, whether it'll run under Linux's MS-DOS or Windows emulators are unknown. (As always, user feed-back is welcome.)

Drive Menu - Select Physical...

Specify the disk that you wish to interrogate. As well as the type of drive that you wish to access, you must enter the drive number .

Physical drives number from zero and take no account of partitions, volumes or any other MS-DOS drivel.

Drive Menu - Select Logical...

Specify the logical disk number or logical drive letter that you wish to interrogate. Note that if you elect to give a drive number , drive zero is usually A:, one is B: and so on. Alternatively, you can just specify the drive letter such as "A:", "B:" and so on.

When using logical drives, ABI2 will treat all block operations as range operations because the drive's data comprises a set of numbered sectors - the concept of cylinders and heads doesn't apply to logical drives.

Drive Menu - Range To File...

Use this dialogue to copy a range of sectors from a disk to a data file.

Apart from the obvious fields to determine the start and end sectors of the block to be saved, there is an option that allows the user to select on-the-fly data compression.

If compression is selected, then the resulting data file will not be pure track data, but a GZIP-compatible archive.

Note: the compression option will appear in the range-to-file dialogue boxes for logical drives only.

Drive Menu - File To Range...

Use this dialogue to copy the contents of a data file to a range of sectors on a disk.

Apart from the obvious fields to determine the start and end sectors of the block to be written, there is an option that allows the user to select on-the-fly data decompression.

If decompression is selected, then the source data file must be a GZIP-compatible archive generated by selecting the data compression option in the range-to-file dialogue box.

Note: the decompression option will appear in the file-to-range dialogue boxes for logical drives only.

Drive Menu - Block To File...

Use this dialogue to copy a block of sectors from a disk to a data file.

Apart from the obvious fields to determine the start and end sectors of the block to be saved, there is an option that allows the user to select on-the-fly data compression.

If compression is selected, then the resulting data file will not be pure track data, but a GZIP-compatible archive.

Drive Menu - Byte To Block...

Use this dialogue to set all of a given block of sectors on a disk to a given byte number pattern.

Drive Menu - File To Block...

Use this dialogue to copy a data file to a block of sectors on a disk.

Apart from the obvious fields to determine the start and end sectors of the block to be written, there is an option that allows the user to select on-the-fly data decompression.

If decompression is selected, then the source data file must be a GZIP-compatible archive generated by selecting the data compression option in the block-to-file dialogue box.

Drive Menu - Block To Block...

Use this dialogue to copy a block of sectors from one disk to the same block on another disk.

You can use this facility to backup an entire disk to another disk. If you backup a disk, you can't expect the copy to be usable unless the copy has the same format as the original. (For example, copying a five-inch diskette to a three-inch diskette probably won't result in a usable three-inch floppy even if the five-inch floppy was OK.) If, on the other hand, you merely want to keep a copy that isn't identical , then this doesn't matter, of course.

Drive Menu - Byte In Block?...

Use this to search data for either a given byte or where the data differs from a given byte. This operation is carried out on a disk block .

Remember that you can specify the pattern using hexadecimal as well as other number bases.

Drive Menu - String In Block?...

Use this to search for a text string in a given disk block. Note that the search is case insensitive .

Drive Menu - Block Equals Block?...

Use this dialogue to compare one disk block with the same block on another disk.

Drive Menu - Bad In Block By Sec?

This option searches for bad sectors, by reading each sector, from the current position to the end of the disk.

Drive Menu - Bad In Block By Cyl?

This option searches for bad sectors, by verifying each cylinder, from the current position to the end of the disk.

Options Menu - Group Enable

This option toggles the state of the "group mode" flag. When this flag is enabled , then any "movement" commands (previous/next cylinder, first-last sector, etc) will be sent to all open drive windows. Thus, when in group mode, the issuing of a "step-to-next-sector" command, for example, would step to the next sector of all drives currently opened.

Note that it is the user's responsibility to maintain any relationship between the opened drives when in group mode. For instance, if you invoke a (non-movement) command that is not affected by the group flag, then the current drive locations may get out of step.

The default state of the group mode flag is "off".

Options Menu - Write Enable

This option toggles the state of the read-only / write-enabled flag. When in read-only mode, no writing of raw sector data to a disk is permitted. However, writing of data files is alright. When in write-enabled mode, then all writing operations are permitted.

Options Menu - Fast Screen

This option toggles (inverts) the "fast screen" display switch. It controls whether the display of data from sectors is "short circuited".

If enabled, then the "painting" of the sector data will be abandoned as soon as another waiting key-stroke is detected. This allows much faster "browsing" through sectors because the program doesn't wait until the whole page of data is displayed until moving onto the next page.

This flag defaults "on" if the drive opened is a hard disk. Otherwise it is left "off".

See also the key waste flag.

Options Menu - Key Waste

This option toggles (inverts) the buffering of key strokes.

If enabled, then buffered keystrokes are discarded since, if the keyboard buffer fills up, the operating system may "beep" which slows up the computer and causes the program to get more behind with the servicing of keyboard requests.

This flag defaults to "on" if the drive opened is a floppy. Otherwise it is left "off".

See also the fast screen flag.

Options Menu - Alter Limits...

This dialogue allows you to alter the "deduced" limits detected by the program. The number of cylinders, heads and sectors can be altered. (Of course, on logical drives, only the number of sectors can be set.)

This feature can be useful if the program doesn't correctly detect a known disk's format. If this happens, for whatever reason, you can "massage" the values so that ABI2 can access the disk. Even if the full cannot be accessed, you may, perhaps, be able to at least access a sub-set of the disk's data.

Finally, note that the expected sector length can be changed in case this isn't detected correctly.

Cylinder Menu - Format...

This facility allows you to format a given block of tracks.

Note that, at present, this facility is not working correctly and so "beta test" mode must be enabled in order to use it.

Sector Menu - Over View

This option allows you to see a "condensed" view of the range of sectors following the current sector. It displays a number of bytes from the start of each of the next few sectors.

The number of sectors actually displayed depends upon the current video mode - the larger the number of rows and columns in the current video mode, the greater the number of displayed sectors.

Sector Menu - Refresh

This option refreshes the on-screen copy of the current sector's contents by reading a sector off of the selected disk.

This can be useful when, for example, you have a sector with a CRC error; repeatedly refreshing the sector's data can show what part of the sector is causing the trouble because the data in error may very well alter between refreshes.

Sector Menu - To Start/End

This option makes the first sector on the disk the "current" sector. (It performs a "recalibrate" before reading that sector.)

If the current sector is already the first sector of the disk, it moves to the last sector, instead.

This option can be useful for "exercising" the selected disk's head movement mechanism.

Acknowledgements

The authors would like to thank Borland for their "C" compilers and TurboVision software library.

We would also like to thank the authors of the ZLIB compression library for their sterling work and for making it freely available. The ZLIB home page is www.info-zip.org/pub/infozip/zlib.

The author of ABI2 is Mark ("Captain ChAoS") Davis (G0KHB) and, hence, ABI2 is a ChAoS Utility. The ChAoS home page is www.glod.net.

ABI2 is Copyright © Mark Steven Davis, 1995-2001.

Disclaimer And Other Blurb

We'd better get the bottom-covering disclaimer out of the way:

"The authors disclaim all warranties as to this software, whether express or implied, including without limitation any implied warranties of merchantability, fitness for a particular purpose, functionality or data integrity or protection."

ABI2 is a public domain program. You are free to re-distribute it to third parties if :