Purpose and Use
Display Commands
Positioning Commands
I/O Commands
Change Commands
Search Commands
Logging Disks
Miscellaneous
Examples of command use
Interpreting DU lines
DU-V87 Installation
:				  Disk Utility
			     by Ward Christensen
			      (revised 6/13/84)

     DU-v87 is a CP/M utility that provides the user capabilities to inspect
and modify data on a diskette directly by specifying either track and sector
or by specifying allocation unit.  The program may be used to recover files,
including directory entries and system tracks that have been destroyed.

To invoke the program simply enter "DU" at the CP/M prompt:

A>DU

An initial command string may optionally be placed as an operand to the
"DU" command:

A>DU M;X

This example will print a map of the disk and then exit.

:Display Commands

#	Shows the disk parameters.

A	Dumps a sector in ASCII.
H	Dumps a sector in hex.
D	Dumps a sector in hex and ASCII.

	These commands may add ff,tt (from,to) to dump a range of sectors.

G	Shows the current group, track, and sector.

M	Maps the disk.
Mxx	Maps the disk starting at group xx.

Vnn	Views (much like CP/M type) nn sectors.

?	Displays the help screen.

:Positioning commands

Gnn	Positions to and reads the first sector of an allocation group.
	(nn = the allocation group in hex -- lowest value is 00)

Tnn	Positions to a specific track
	(nn = the track in decimal -- lowest value is 0)
	(does not do a read, must execute the S (sector) command first)

Snn	Positions to and reads a specific sector.
	(nn = the sector in decimal -- lowest value is 1)
	(the T (track) command must be executed first)

+nn	advances nn sectors and reads.
-nn	backs up nn sector and reads.
	(nn = the number of sectors in hex -- if omitted, 1 sector is assumed)
	If "-" is issued at the first logical sector of the disk,
	the sector number will wrap back to the last sector.
	If "+" is issued at the last sector, the sector number
	will wrap forward to the first sector.

:I/O Commands

R	Reads the currently positioned sector into memory.

	Note: R (Read) is implicit in the "G", "+",  and "-" commands,
	but NOT in the S and T commands.

W	Writes the currently positioned sector from memory.

<	Saves the current sector in a save buffer.

>	Recalls previously saved sector.

Y	Saves the current sector in the yank buffer.

K	Dumps memory to a file previously stored using the Y (yank) command.
	(requires the operand: [du:]filename[.ext])

:Change commands

CHaddr,val,val,val... change hex in sector.

CAaddr,char string... change ASCII in sector.

	NOTE that <xx> may be hex imbedded in the Ascii:  ca0,OK<d><a><1a>

	Use W to write changes to disk.  Note that the C command echoes the
	overlaid data for verification.

CHaddr-addr,byte or CAaddr-addr,byte repeats a change.

:Search commands

Fname	Prints the directory entry for file "name",
	then  positions to its directory sector.

F	Finds the next occurrence of the same name.

=aaaa	Scan for aaaa (in ASCII) from current sector.
	(Specify upper or lower case, user <xx> for imbedded hex.

:Logging a disk

L	Logs in a disk.

Lx	Logs in disk "x", such as: LB.

Ux	Logs user "x" for next F command.

N	Resets CP/M via the BDOS.  This may make it possible under some
	implementations of CP/M to change the disk format.
	(e.g.,	density, sides, etc)


:Miscellaneous

X	Exits back to CP/M (Must press return).

P	Toggles printer switch on/off.

Z	Sleep - causes the program to pause, such as to look at a dump.
	Z is 1 sec.  Znn is nn tenths of a second on a 2 MHz 8080.

/nn	Repeats previous command nn times.

Q	Before a command does it "quietly".

(	Toggles map display of erased files.

B	Boots track number of sectors per track.

:Examples

Multiple commands may be separated by ";".
Any valid command string may be placed as an operand of the original DU
command, i.e.:

		A>DU G0;D;G2;=OK<D><A><1A>;D

The following commands will erase the disk directory to all E5's:

	lb		log in b drive
	g0		position to dir.
	ch0-7f,e5	fill with e5
	<		save the sector
	>;w;+;/16	restore, write, next,
			repeat 16

This could be shortened to:

	lb;g0;ch0-7f,e5;<
	>;w;+;/16

:Interpretation of a directory entry.

The following explains the format of a CP/M directory entry as shown by DU,
using either the "F" (find file) command, or just doing "D" (dump) of the
directory sectors, which are located in groups 0 and 1 on a single density
disk.  Sample result of "FDU" command:

First	40	00445520 20202020  20434F4D 0000003B  *.DU	COM...:*
 line	||			     |	  |	  ||	|	| |
   ||	||^----hex file name-----^   |	  |	  ||	^file name^
   ||	||			     |	  |	  ||	 in ASCII
   ||	||		      extent-^	  ^	  ||
   ||	||					  ||
   ||	||		     file size in sectors-^^
   ||	||
   ||	^^-0x = file active/user area
   ||  E5 = file erased
   ^^-displacement of line in directory sector

Second	 50	33343536 3738393A  00000000 00000000  *3456789:........*
line		|				   |
		^---allocation group numbers-------^
:Installation

     DU 7.0 and later versions of DU are designed to be installed with a
minimum of trouble.  In fact, in almost all cases, no changes to the source
file should be necessary to get DU up and running.  This is because DU uses
the disk parameter block of CP/M to determine the characteristics of the disk
environment.  (see the disclaimer for certain non-standard versions of CP/M
1.4).

     The only parameter that should need to be changed will be the clock
speed flag at 103H.  Leave this byte zero if you  have a 2 mhz clock.  Patch
it non-zero for 4 mhz.	This is only needed for the "Z" (sleep) command.
