
           
          
                         :::::::::::::::::::::::::::::::::::::::
                         :::::: NEW RELEASE! VERSION 4.00 ::::::
                         :::::::::::::::::::::::::::::::::::::::
          
          
          
          
          
          
          
                    ==================================================
                    I                                                I
                    I                                                I
                    I         The FreeSoft Company Presents:         I
                    I                                                I
                    I         ---> The Ultra Utilities <---          I
                    I           "The Wizard's Apprentice"            I
                    I                                                I
                    I      User's Manual And Guide To Operation      I
                    I                                                I
                    ==================================================
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
            Copyright (C), 1983 by The FreeSoft Company.  All rights reserved
                        Version 4.00, First Release: January, 1984
          
          This manual and the accompanying programs U-ZAP.EXE, U-FORMAT.EXE and 
          U-FILE.EXE may be copied and shared freely as long as certain 
          duplication rules are adhered to.  Please see Appendix A of this 
          manual for the FreeSoft duplication policy.  Anyone found duplicating 
          any part of this manual or the programs mentioned above not according 
          to the policies in Appendix A of this manual will suffer from guilt 
          for eternity.  Think about it...
                                 Ultra-Ultility Warranty
          
          The programs U-ZAP.EXE, U-FORMAT.EXE and U-FILE.EXE and this manual 
          are provided on an "AS IS" basis without warranty of any kind, 
          expressed or implied, including but not limited to the implied 
          warranties of merchantability and fitness for a particular purpose.  
          The entire risk as to quality and performance of these programs and 
          this manual rests solely with the user.  Should any part of these 
          programs or this manual prove defective, the user will assume the 
          entire cost of all necessary repair, servicing, and correction.  In 
          no event will The FreeSoft Company be liable to you for any damages, 
          including any lost profits, lost savings, or other incidental or 
          consequential damages arising out of the use or inability to use 
          these programs or this manual, even if The FreeSoft Company has been 
          advised of the possibility of such damages.  This warranty gives you 
          specific legal rights, and you may have other rights which may vary 
          from state to state.  Some states do not allow the exclusion of 
          implied or consequential damages so parts of the above may not apply 
          to you.  By operating any of the above programs or using any part of 
          this manual, you acknowledge that you have read this agreement, 
          understand it, and agree to be bound by its terms and conditions.  
          You further agree that it is the complete and exclusive statement of 
          the agreement between us, which supercedes any proposal or prior 
          agreement, oral or written, and any other communications between us.
          
          If you have registered, feel free to write us with any questions you 
          might have concerning our products.  If there seems to be a need for 
          it, we may open up a telephone hotline or bulletin board for fast 
          service.
          
          WE WILL OFFER ABSOLUTELY NO SUPPORT TO UNREGISTERED USERS.  IF YOU DO 
          NOT CHOOSE TO REGISTER, YOU ARE COMPLETELY ON YOUR OWN!  ANY LETTERS 
          OR QUESTIONS FROM UNREGISTERED USERS WILL BE IGNORED.  SO THERE!
                                    Table Of Contents
          
          Introduction.................................................. 1

                                   Section I: Ultra-Zap
          Display/Modify Disk Sectors................................... 2
          Display/Modify File Sectors................................... 4
          Copy Disk Sectors............................................. 5
          Fill Disk Sectors............................................. 5
          Search For Bytes In Disk Sectors.............................. 5
          Search For Bytes In File Sectors.............................. 6
          Modify Sector Fill Byte....................................... 6
          Modify Display Radix.......................................... 6
          Interrogate Disk Sectors...................................... 7
          Toggle Menu Alert Tone........................................ 8
          Display/Modify Disk Parameters................................ 8     
          How To Display/Modify Non-Standard Sectors.................... 9

                                 Section II: Ultra-Format
          Format A Standard Track.......................................10
          Re-format A Standard Track Without Erasing Old Data...........10
          Format A Non-standard (Copy-Protected) Track..................10
          Display/Modify Disk Parameter Table...........................11
          Modify Display Radix..........................................11
          
                                 Section III: Ultra-File                      
          Display File's Directory Information..........................12
          Assign Or Remove System Status................................12
          Assign Or Remove Hidden Status................................12
          Display List Of Sectors Allocated To File.....................12
          Build A File From Scratch.....................................13
          Attempt To Restore An Erased File.............................13
          Produce A Map Of Diskette.....................................13
          Selectively Purge Files.......................................14
          
                                  Section IV: Appendices                      
          Appendix A: The FreeSoft Duplication Policy...................15
          Registration Form.............................................18
          Invoice.......................................................19
          Appendix B: A Brief Discussion Of Diskette Formats............20
          Appendix C: Version changes and additions.....................21
          (1)                          Introduction
                                       ------------
          
          The Ultra-Utilities are a powerful collection of programs that will 
          allow you complete access to the power of your IBM-PC's disk drive 
          controller circuitry and PC-DOS disk operating system.  With this 
          power also comes the abilty to do terrible damage to your diskettes 
          if you make a mistake at the wrong time.  To avoid this:
          
             A) Make a copy of the Ultra-Utilities and keep the originals in a  
                safe place.  When using the copies, remove the diskette 
                containing the Ultra-Utilities after the desired program has    
                loaded.  It is not necessary for this diskette to remain in the 
                disk drive after the program has begun execution.
          
             B) When working on other diskettes, ALWAYS WORK ON A COPY!  The 
                time it takes to backup a diskette is well worth it effort. If  
                you are working on a diskette that you are unable to yet make a 
                copy of, at least place a write-protect tab on it and work 
                slowly and cautiously.
          
          To use these programs properly you will need:
          
             1) IBM-PC with at least 64K RAM, one single or double-sided disk   
                drive, and an 80-column display.  Because of the wide variety   
                of IBM-PC configurations and the varying levels of 
                "compatibility" with PC clones, we cannot and do not support
                questions concerning support of other equipment configurations.
                Additional memory may be needed if you boot under DOS 2.00.

             2) DOS 1.10 or 2.00: Again, if you try to use other versions of 
                PC-DOS, you are on your own.  These programs have been tested   
                only on PC-DOS versions 1.10 and 2.00.
          
          You do not have to be a "hacker" or be able to multiply four digit 
          hexadecimal numbers in your head to be able to use the 
          Ultra-Utilities.  If you are more technically inclined, you'll no 
          doubt find many uses for the powerful features of these programs.  If 
          you're not so technically inclined, you'll probably use these 
          programs for "snooping" and educational purposes, and will first want 
          to read the chapter on Modifying The Display Radix.  When first 
          executed, the Ultra-Zap and Ultra-Format programs display all numbers 
          in hexadecimal format (base 16).  If you are not comfortable using 
          hex values, use that function to change all printed values to decimal 
          (base 10).
          
          Features of the Ultra-Utilities
          -------------------------------
          1) The Ultra-Utilties use a special input procedure that allows you 
             to only enter in characters appropriate to the question being 
             asked.  In most cases, a number of small boxes will appear next to 
             a question.  These boxes tell you that the program is waiting for  
             your response, as well as the maximum number of characters you may 
             type to answer the question.  If no boxes are displayed, a single  
             key press is all that's needed, and it is not necessary to press   
             the <ENTER> key afterwards.
          
          2) Although the Ultra-Utilities will display numeric values in the    
             format specified by the display radix, you can input numbers using 
             any of three allowable radices without regard for the display 
             radix.  Decimal numbers should be entered normally, without any
          (2)
             prefix.  Octal numbers should be entered using the prefix &O, and 
             hexadecimal numbers should be entered using the prefix &H.  This 
             is in keeping with the standard numeric entry procedures of IBM    
             BASIC.  Example: the decimal number 17 could be entered as:
                                17 (decimal)
                              &H11 (hexadecimal)
                              &O21 (octal)
          
          3) If you have a lineprinter installed and selected, you can obtain   
             a hardcopy of the screen at any point by pressing the "PrtSc" key  
             while holding down the <SHIFT> key.  This is also in keeping with  
             BASIC operation.
          
          4) The Ultra-Utilities are completely menu-driven.  This means you'll
             never have to guess which cryptic command the computer is waiting  
             for: all of your available options are displayed on the screen.    
             Although some folks prefer non-menu-driven programs, we feel it is
             a necessary deterrent to possibly catastrophic mistakes made by 
             the wrong guess with these programs.
          
          5) Ultra-Zap will allow you to display and modify sectors of any 
             length or name (such as those used in copy-protected software).    
             Although this is by no means meant to be a "pirate" program, it    
             is of great educational use for the novice "zapper".  It can be
             used in conjunction with Ultra-Format to create your own copy-
             protected diskettes.
          
          6) IN MOST CASES, answering a prompt with the single letter "Q" 
             followed by the <ENTER> key will CANCEL THE CURRENT FUNCTION and   
             RETURN YOU BACK to the main menu.
          
          GET READY TO "ZAP" AWAY YOUR TROUBLES!
          --------------------------------------
          Hopefully, you have restrained you anxiousness to get started with 
          the Ultra-Utilities and have taken at least a few moments to scan 
          this manual.  We hope that you have fun with these programs and that 
          they earn a permanent home in your software library.  Don't forget to 
          look over the duplication policy in Appendix A of this manual.  It 
          explains how the Ultra-Utilities can even earn you a few extra bucks 
          just for spreading it around.
          
          Whenever you are finished with an Ultra-Utility program, always exit 
          by choosing the Q>uit function from the main menu.  The 
          Ultra-Utilities change some important tables in memory that DOS 
          expects to be present and correct, and the "Q" function restores them 
          to their original values.

          One last caveat... this manual is by no means meant to be a tutorial 
          on the diskette storage techniques of the IBM-PC and PC-DOS.  We 
          recommend for further study the PC-DOS manual, the IBM Technical 
          Reference manual, and Peter Norton's "Inside The IBM-PC" published by 
          Robert J. Brady.
          
                               Display/Modify Disk Sectors
                               ---------------------------
          
          This function, along with the Display/Modify File Sectors function is 
          the real meat of the Ultra-Zap program.  It gives you the ability to 
          "snoop" around your diskettes, modify bytes or characters, and
          (3) 
          encrypt or decode encrypted sector data.
          
          When you select this function, you'll first be prompted for the side, 
          drive, track and sector number of the first sector you wish to look 
          at.  Remember, if you only have a single-sided disk drive, you will 
          always specify side 0.  If you are unclear what to enter, take a 
          moment to peruse Appendix B of this manual.
                                                                  
          Once you have entered the above info, you will be instructed to mount 
          the diskette on the appropriate drive and press any key.  Once you 
          have done so, the disk drive should come to life and you will enter 
          what we call the "search mode".
          
          The search mode displays a straight dump of the ASCII characters in a 
          sector, allowing you to find the information you're looking for in a 
          hurry.  Only those characters with ASCII codes between 32 and 127 
          (decimal) will be displayed.  The rest will be displayed as periods.
          
          There are several command keys active in the search mode:
          UP ARROW - increments the track by one and displays that sector.
          DOWN ARROW - decrements the track by one and displays that sector.
          RIGHT ARROW - increments the sector by one and displays that sector.
          LEFT ARROW - decrements the sector by one and displays that sector.
          "5" KEY ON NUMERIC KEYPAD - switches from Side 0 to Side 1 and vice-  
             versa (if you have double-sided drives) and displays that sector.
          "M" key - enters "modify" mode.
          "Q" key - returns to Ultra-Zap main menu.
          
          In the "modify mode" the sector information will be displayed a bit 
          differently.  Select a random sector and let's go through the display 
          together.  The top line reiterates the current side, drive, track, 
          and sector number of the sector you are working on, as well as the 
          current display radix.  The second line just identifies what is in 
          the columns below.  The third line is a template for the "ones" digit 
          of the offset address- we'll come back to this in a moment.  The 
          fourth line starts with the actual sector data.  The leftmost column 
          of these rows show the number of bytes offset into the sector.  Then 
          comes the sector data in numeric form.  The rightmost column contains 
          the ASCII equivalent of the numeric data.  If you are using 
          hexadecimal for the display radix, there will be 16 rows of 16 bytes 
          each.  Decimal uses 20 rows X 10 bytes, and octal uses 16 rows X 
          8 bytes.  If you wanted to find the fifth byte in a sector, you 
          would go to the row marked with the offset address 0000 and scan 
          across under the template in line three of the display marked 
          "5".  It's really pretty easy to find an individual byte in a snap 
          once you get used to this "offset address/template column" 
          arrangement.
          
          The bottom of the screen tells you your available choices, as well as 
          the current modify mode for byte replacement (either "NUM" for entry 
          of numeric replacement bytes, or "ASC" for the direct entry of ASCII 
          replacement characters from the keyboard).  You can toggle back and 
          forth between ASC and NUM modes by choosing the "C" choice.  The "Q" 
          choice returns you to the search mode.  The "I" and "D" choices allow 
          you to add or subtract a number from each of the bytes in the sector 
          for either encrypting or decoding encrypted sector data.  The "M" 
          choice takes you into what we call "replacement mode".  The other two 
          choices are "N" and "P".  You will notice that all of the bytes in a 
          standard 512-byte disk sector aren't displayed all at once in the
          (4) 
          display screen.  What we did is divide the sector into "pages" of 
          data.  Use the "N" key to look at the next higher display "page" of 
          sector data.  Use the "P" key to look at the next lower display page 
          of data.  Depending on the display radix and sector size, each sector 
          may actually be displayed as several pages.
          
          If you wish to modify the bytes in a sector, you should first choose 
          the modify mode you wish to use, and the "N" and "P" choices to 
          display the "page" that contains the bytes you wish to modify.  Once 
          you have done so, select the "M" option to enter the "replacement 
          mode".  In the replacement mode, an inverse cursor will appear in the 
          first byte of that page.  Use the arrow keys to position the cursor 
          on the byte you wish to modify and then press the spacebar.  If you 
          are in NUM mode, you will be prompted to enter in the new value.  For 
          each byte you wish to modify in the NUM mode, you will have to press 
          the spacebar as above.  However, in the ASC modify mode, you just 
          press the spacebar once.  You can then type in characters from the 
          keyboard continuously.  When you are finished modifying bytes in 
          either mode, just press the <ENTER> key.  Note that in the ASC mode 
          you can enter in any ASCII character that appears on the keyboard 
          except the <ENTER> key.  If you wish to enter in a character that 
          does not appear on the keyboard, just hold down the ALT key and type 
          in the three-digit ASCII code of the character on the numeric keypad, 
          just as you would in BASIC.
          
          One more note about the "replacement mode": any ASCII characters that 
          are not between codes 32 and 127 are displayed as dots.  This is 
          because some codes will cause your printer to do weird things if you 
          try to get a screendump using the <SHIFT>-PrtSc combination.  If you 
          wish to look at the actual character for non-alphanumeric characters, 
          just move the cursor over the byte in the replacement mode.  The dot 
          will be replaced with the actual character in the ASCII equivalent 
          column.
          
          After you have pressed the <ENTER> key to end replacement, you will 
          be asked if you wish to update the disk sector with your replacements 
          or just cancel all changes.  Up to now, nothing on the diskette has 
          actually been changed.  Instead, any changes you made were done on a 
          copy of the disk sector in memory.  If you cancel, you will be 
          immediately returned to the main menu with no changes recorded.  If 
          you select the update choice, your changes will be recorded on the 
          disk sector permanently (so be careful, for heaven's sake!).
          
          Whew!  That's quite a bit to swallow in one reading...  My advice is 
          to read this through, practice on a "scratch" diskette (one you can 
          afford to destroy) and then re-read this chapter for the finer points 
          of this powerful feature of the Ultra-Zap program.

                               Display/Modify File Sectors
                               ---------------------------
          
          This function is used to root around the program and data files that 
          are on your diskettes.  By using this feature, you can do such things 
          as make easy corrections to data files and change ASCII messages in 
          the programs.  We do not condone people going through and wiping out 
          an author's name or copyright notices.  Such things are not only 
          childish, they deprive the author and software company of the money 
          and credit they deserve, and stifle creative folks from producing
          better software for us all.  However, who can resist going into
          (5) 
          COMMAND.COM and changing the sign-on message to "Ed Spread's Garbage 
          DOS"?  Oh well, it's a dilemma for the philosophers.  Have fun...
          
          This function operates almost exactly like the Display/Modify Disk 
          Sectors function with a few exceptions that pertain to disk files.  
          Once you are familiar with that function, you should have no trouble 
          with this one.  One important difference we will note here is that in 
          the search mode, the up arrow, down arrow, and "5" key have no 
          function.  The left arrow and right arrows still move backwards and 
          forwards through the file sectors.
          
          You should also notice that all file sectors are displayed as 
          physical (we call them logical) sectors.  That means that even if you 
          created a random access data file with a record length of 53 bytes, 
          each sector in this function will still be displayed as 512 bytes.
          
          You will not be able to use this function on any files that contain 
          the "HIDDEN" or "SYSTEM" attributes in their directory entry.  Use 
          Ultra-File to remove these attributes.

                                    Copy Disk Sectors
                                    -----------------
          
          This function is used to copy disk sectors from one part of a 
          diskette to another, or between diskettes.  Copying is not done with 
          regard to the prior contents of the destination sectors, and any old 
          data will be destroyed.
          
          Use of this function is pretty straightforward.  If the specified 
          drives for the source and destination diskettes are the same, the 
          program will ask you if the source and destination sectors are on the 
          same diskette, if they are not, you will be prompted to mount the 
          appropriate diskette during the copying process.  Sectors are copied 
          consecutively, according to the progression order described in 
          Appendix B of this manual.
          
                                    Fill Disk Sectors
                                    -----------------
          
          This function is used to fill one or more sectors entirely with a 
          repeating single byte value.  This byte value is selected using the 
          Modify Sector Fill Byte function and has a default value of &HF6 (246 
          decimal) upon program execution.  This is the same as the default 
          value used in formatting fresh sectors by the DOS FORMAT program.
          
          Again, this function is pretty straightforward.  Sectors are filled 
          consecutively according to the progression order described in 
          Appendix B of this manual.
          
                             Search For Bytes In Disk Sectors
                             --------------------------------
          
          This function is used to quickly locate the position of a specified 
          sequence of bytes or ASCII characters in disk sectors.  The sequence 
          of desired bytes or characters may be up to 15 long.  You will first 
          be asked if the sequence is numeric or ASCII.  Once you have chosen, 
          the program will ask you how many bytes or characters long the 
          sequence is.  Next, you will be prompted to enter the bytes or 
          characters for the search sequence in order one at a time.
          (6)
          Next, you will enter the side, drive, track, and sector number for 
          the start of the search, as well as the number of sectors to search 
          through.  Then the search begins, moving consecutively through 
          sectors as described in Appendix B of this manual.
          
          If the sequence is found in a searched sector, a message will be 
          displayed telling you the side, drive, track, and sector number 
          containing the sequence as well as the offset address of the sequence 
          within that sector.  When each match is displayed, you have the 
          ability to abort the search or continue from that point.  If no 
          matches are found, a message will be displayed telling you so at the 
          end of the search.
          
                             Search For Bytes In File Sectors
                             --------------------------------
          
          This function is operates just like the above Search For Bytes In 
          Disk Sectors except that file sectors are searched instead.  Again 
          you won't be able to use this function with files marked in their 
          directory entries as "HIDDEN" or "SYSTEM" files.  Use Ultra-File to 
          remove these attributes before using this function.
          
                                 Modify Sector Fill Byte
                                 -----------------------
          
          This function allows you to change the default sector fill byte 
          value.  There are essentially two reasons to do this:
          
          A) For use with the Fill Disk Sectors function
          
          B) Before any disk sector or file sector is read from the disk in the 
             Display/Modify functions, the memory buffers that will contain a 
             copy of the sector data are first "flushed" with the sector fill 
             byte value.  If you ever run across a sector with a CRC-type error 
             (either intentionally formatted or caused by diskette wear/tear) 
             the Display/Modify functions will report the error.  Normally, if  
             you do not select the re-try function when a disk error occurs, 
             you are returned to the main menu.  In this instance, Ultra-Zap    
             will allow you to go ahead and look at the contents of the sector. 
             Some of the data may look funny due to effects of the error, but 
             at least you'll be able to have a look at where the CRC error      
             botched things up.  We suggest you select a sector fill byte of    
             zero for this type of work, since it will quickly show you where   
             the read data ends.
          
                                   Modify Display Radix
                                   --------------------
          
          This function is used to present all displayed numeric values in a 
          form you are most comfortable with.  When zapping, some folks 
          naturally hanker to hexadecimal (base sixteen); others are lost 
          without good old decimal (base 10).
          
          Still, there are actually those around that cut their milkteeth on a 
          Sperry-Univac and can't cut it without octal (base eight).  Whatever 
          you folks choose as your strokes, Ultra-Zap is well equipped to make 
          life easy for you.
          (7)
          If you are a beginning zapper, We suggest the first thing you do upon
          executing Ultra-Zap is to choose this function and select the decimal 
          radix.  You Sperry-Univac people can do the same except choose octal. 
          For those of you who learned to count with sixteen fingers, you won't 
          need to do anything.  Hexadecimal is the default radix for Ultra-Zap.
          
                                Interrogating Disk Sectors
                                --------------------------
          
          So, you just bought a protected diskette and you just can't wait to 
          find out what makes that thing tick, eh?  This function gets into the 
          guts of a diskette's format and tells you all of its secrets.  While 
          it's great for just snooping around, it's best use will come by being 
          used in concert with the special formatting abilities of the 
          Ultra-Format program.
          
          This function will ask you to specify the drive, side, starting 
          track, and ending track of the interrogation.  It will then ask you 
          the lowest and highest sector numbers to search for.  If you've got 
          a 40-track drive (like most of us), the maximum interrogation will be 
          from track 0 to track 43 (throw in a couple extra tracks for those 
          tricky buggers), searching for sectors 0 to 255 (all values decimal). 
          Such an interrogation will take quite a bit of time, which is why we 
          included the Toggle Menu Alert Tone function.
          
          You can also specify that the output be recorded on your printer to 
          be used for later reference.
          
          Here's a few tips to get the most out of this function:
          
          A) Try to make a backup of the suspect diskette with DOS's DISKCOPY 
             program.  On the weirdly formatted tracks, the program will report 
             a read error.  Write down these track numbers.
          
          B) Place a write-protect tab on the suspect disk and interrogate all 
             of the tracks that DISKCOPY threw a fit over.  Search for sectors  
             0 to 255 (decimal).
          
          C) Most often, the protection scheme is to either format one or more  
             sectors or tracks with sector sizes other than the standard 512    
             bytes, or to either give one of the sectors a wild sector number   
             like 214 or just not format a whole track of eight sectors.  If    
             you've got the same VisiCalc master I do, you'll find that sector  
             8 on track 39 is missing entirely.
          
          The interrogation function will tell you which sector numbers were 
          found, their size in bytes, and if they were formatted with a CRC 
          error (another not so fancy trick).  Also notice that the 
          interrogation process can be aborted by pressing the "C" key.
          (8)                     Toggle Menu Alert Tone
                                  ----------------------
          
          This function is used to sound the computer's speaker when a 
          particularly time consuming function has been completed.  Selecting 
          this function toggles the alert tone on and off, and is most often 
          used with the Interrogate Disk Sectors function, which returns 
          directly to the main menu when finished.
          
          Display/Modify Disk Parameters
          ------------------------------
          Even though the IBM-PC uses a standard format for writing data on 
          diskettes (40 tracks numbered 0 to 39 of 8 sectors each numbered 1 to 
          8 of 512 bytes each), it has the capability of reading and writing 
          many other formats.  To do so, you'll have to change certain bytes in 
          a special table kept in the PC's memory called the Disk Parameter 
          Table.  This function displays the current value of these bytes and 
          allows you to modify them.  Note that not all of the values will be 
          of any use to you.
          
          There are 11 bytes in the Disk Parameter Table:
          
          1) Specify byte #1: the left "nybble" or single digit of this value  
             when viewed in hex is the step rate time for the disk drive head.  
             The right "nybble" is the disk head unload time.  These values are 
             best left alone.

          2) Specify byte #2: Again, don't fool around with these values.  The 
             left "nybble" is the disk head load time, and the right nybble is  
             the direct memory access mode select.
          
          3) Wait time until motor is turned off.  Not normally of use.
          
          4) Bytes-per-sector value: AH-HAH!  If you place a "0" in this value, 
             The PC expects all sectors to be 128 bytes long.  A "1" means a 
             sector size of 256 bytes, a "2" means 512 bytes (this is the       
             standard DOS value), and a "3" means 1024 bytes per sector.
          
          5) Highest sector number on a track: This is used for formatting and  
             tells DOS how many sectors there are on each track.
          
          6) Gap length for diskette reads: this is what you fool around with 
             if you keep getting CRC errors when you try to read a non-standard 
             size sector.  Normally, you can just leave this alone except when  
             formatting with Ultra-Format.
          
          7) Data length: This contains the number of bytes in a sector when 
             the value in table byte #4 doesn't contain a 0, 1, 2, or 3.
          
          8) Number of bytes in the gap between sectors: this is also only used 
             when formatting special tracks.
          
          9) Format fill byte: When formatting, this is the initialization byte 
             that will be placed in all new sectors.
          
          10) Head settle time: leave this alone.
          
          11) Motor start time: don't fool with this either.
          (9)           How To Display/Modify Non-Standard Sectors
                        ------------------------------------------
          
          The best way we can think of to demonstrate how to use this program 
          with protected diskettes is to give you an actual example "script".
          
          One fine day, a local marketing manager for a large software company 
          was in our offices boasting his company's newest product.  When we 
          showed him the Ultra-Utilities, he challenged us that it "won't be 
          able to touch this disk".  We sat him down at our PC and booted up 
          Ultra-Zap.  This first thing we did was Interrogate track 1 of his 
          diskette, searching for sectors 0 to 255.  Like magic, Ultra-Zap told 
          us that his diskette was formatted as five sectors, numbered 1, 2, 3, 
          4, and 5, and were 1024 bytes long each.  Next, we went into the Disk 
          Parameter table and changed byte #4 (bytes-per-sector value) to a 
          value of 3 (meaning 1024 bytes per sector).
          
          Now, we choose the Display/Modify function to look at track 1, sector 
          1.  The first thing this function does is attempt to read the 
          FAT table on the diskette to determine if is single or double-sided.
          When you are working with protected diskettes that do not have a 
          valid FAT table, or if you change the bytes-per-sector value, this 
          function will report an error reading track 0, side 0, sector 2.  It 
          will then ask you how many sides are on the diskette (since it 
          couldn't figure this out from the FAT).  We answered 1 side, knowing 
          that nearly all distribution software comes on single-sided 
          diskettes.  The Display/Modify function worked perfectly, as 
          evidenced by the look of worry on our friend's face.  "You're giving 
          this thing away for free?", he asked us.  We decided it would be best 
          not to show him how we could make a backup of his disk with 
          Ultra-Format.
          (10)                   Format A Standard Track
                                 -----------------------
          
          This function is used to lay down a fresh format pattern on a single 
          track.  It will destroy any previous data on that track.  If you are 
          attempting to revive sectors that were marked "damaged" by the DOS 
          FORMAT program, you will have to also change the corresponding values 
          in the File Allocation Table (FAT) after getting a successful format. 
          Refer to the IBM DOS manual for details on the FAT.  Our experience 
          is that the work required is usually not worth the trouble of getting 
          back a few sectors.
          
          When the sectors are formatted, they are initialized with whatever 
          byte is in the "Fill byte" parameter in the Disk Parameter Table.  
          Initially this is &HF6 (246 decimal).  If you wish to change this, 
          see the Display/Modify Disk Parameter Table chapter below.
          
                   Re-Format A Standard Track Without Erasing Old Data
                   ---------------------------------------------------
          
          This function is used whenever a disk starts to report read and write 
          errors in normal use.  It repairs the diskette by first reading the 
          sector data into memory, writing a fresh format pattern on the 
          diskette, and the writing back the old data into the freshly 
          formatted sectors.
          
          You may specify how many times the program should attempt to re-read 
          a sector that reports an error.  Depending on the severity of damage 
          to a sector, it may be necessary to re-read it 50 or more times 
          before you get a good read.  If after the specified number of 
          re-reads the sector still cannot be read, the program will format a 
          fresh sector in that location.  Depending on the file, this may make 
          it unusable.  If it's a program file, probably so.  However, if it's 
          a data file or BASIC program stored in ASCII format, you should be 
          able to go in with Ultra-Zap and patch things up.  After reading the 
          old data, you have the option to abort the fresh formatting and 
          return to the main menu.
          
                               Format A Non-Standard Track
                               ---------------------------
          
          This function is used to create a copy-protected diskette track by 
          placing a format pattern on the diskette that DOS is normally not 
          able to read except under special circumstances.  On the IBM-PC, 
          there are four sector sizes we can format: 128 bytes, 256 bytes, 512 
          bytes, and 1024 bytes.  These sectors sizes can be read by DOS by 
          placing the values 0, 1, 2, and 3 respectively into the 
          byte-per-sector value in the Disk Parameter Table.  Now let's discuss 
          the difference between a logical and physical disk sector as referred 
          to by Ultra-Format.  The normal disk format is 8 sectors of 512 bytes 
          each numbered 1 to 8.  It is possible to give your non-standard 
          sectors any numeric name you wish.  That is, you could format a track 
          with three physical sectors numbered 12, 20, and 235.  This makes it 
          difficult for someone to copy your disk.  Another fancy trick is to 
          format a standard track 40.  Most disk drives are capable of 
          reading and writing a few extra tracks than the standard 0 through 
          39.  Most copy programs, and DISKCOPY, do not look for such a track.
          
          The "Highest Sector Number On Track" value in the Disk Parameter 
          Table tells this function how many physical sectors you wish to
          (11)
          format on your non-standard track.  It does not dictate what the 
          highest logical sector number can be.  For each physical sector, you 
          will be asked to enter the logical sector name (0 to 255) and size 
          value (0, 1, 2, or 3).
          
          Non-standard tracks are usually used to hold special codes that a 
          program checks for when first executing.  To do this, you'll need to 
          incorporate a short disk sector reading assembly language subroutine 
          into your program.  Study the ROM-BIOS calls in the Technical 
          Reference manual for disk I/O (interrupt 13H).  If this is still over 
          your head, drop us a line (registered users only) and we'll send you 
          some ready-to-go sample routines for use in assembly, compiled BASIC, 
          and regular BASIC programs.
          
          One more thing, when you format a non-standard track, you'll need 
          to fiddle around with a couple of values in the Disk Paramter Table, 
          specifically, bytes #6 and #8.  Look at the default values for a 
          standard 8 sector, 512 byte/sector format.  If you wanted to format a 
          track of 256 byte sectors, you might try doubling the standard 
          value of these bytes.  Our first issue of "The Zapper" newsletter 
          deals with formatting non-standard tracks for copy-protection work.
          If you're not a registered user, all we can suggest is 
          experimentation to come up with formats and Disk Parameter Table 
          values that do not cause CRC errors.
          
                           Display/Modify Disk Parameter Table
                           -----------------------------------
          
          This function works exactly like that in the Ultra-Zap program,  
          please refer to that chapter for instructions on how to use this 
          function.
          
                                   Modify Display Radix
                                   --------------------
          
          This function also works just like the Ultra-Zap Modify Display Radix 
          function.  Please refer to that chapter for more information.
          (12)             Display File's Directory Information
                           ------------------------------------
          
          This function allows you to see everything about a file that is kept 
          in DOS's directory of files.  As with most of the functions in the 
          Ultra-File program, this starts with a menu of all of the programs in 
          the directory.  Each filename is preceded with a number.  After the 
          filename, a single character (called the "attribute") tells you the 
          characteristics of a file.  These attribute codes are explained at 
          the bottom of the display.  If you have a double-sided diskette, 
          choose the "M" key to look at the rest of the directory entries. If 
          you have a single-sided diskette, all available file locations are 
          displayed at the same time.
          
          To see the directory information on a file, just type in its 
          corresponding number on the list.  Interestingly enough, we have 
          found that DOS 1.10 has some bugs in the way it sometimes reports a 
          file's date, time, and size in bytes when you issue the DOS command 
          DIR.  This function displays their correct values.
          
          You'll also notice that on all file lists in Ultra-File, deleted 
          files (those killed with BASIC's KILL or DOS's ERASE commands, for 
          example) are shown with the first character of their filename as a 
          question mark.
          
                              Assign Or Remove System Status
                              ------------------------------
          
          This function allows you to either remove or assign the "SYSTEM" 
          attribute given to a file.  Files given this attribute are not 
          displayed with DOS's DIR command, cannot be accessed through DOS, and 
          are not copied with DOS's COPY *.* command.
          
                              Assign Or Remove Hidden Status
                              ------------------------------
          
          This function allows you to either remove or assign the "HIDDEN" 
          attribute given to a file.  Functionally, the "HIDDEN" and "SYSTEM" 
          attributes are alike to DOS.  You'll notice though that system files 
          like IBMBIO.COM and IBMDOS.COM are given both "HIDDEN" and "SYSTEM" 
          attributes.  Hidden files are used a lot by software companies to 
          keep a program "secret".  Backup diskettes made with DISKCOPY still 
          include hidden and system programs, so it is not a good protection 
          means on its own.
          
                        Display List Of Sectors Allocated to File
                        -----------------------------------------
          
          You'll notice that Ultra-Zap's Display/Modify File Sectors function 
          never really tells you where on the diskette the logical file sectors 
          are located.  This function knows all, tells all, about the location 
          of all sectors allocated to a file.  Notice that with double-sided 
          diskettes, sectors are allocated to a file two at a time (sectors 1 
          and 2, 3 and 4, 5 and 6, 7 and 8 are considered groups on a 
          double-sided diskette.  We think a good name for this is a "lump".  
          Just remember there is one sector per lump on a single-sided 
          diskette and two sectors per lump on a double-sided diskette).
          (13)                  Build A File From Scratch
                                -------------------------
          
          This function is used for creating a new file, and then taking 
          specific "lumps" (see section above for definition of a "lump") and 
          allocating them to this new file.  It can also be used when the 
          Attempt To Restore An Erased File function fails and you have used  
          Ultra-Zap to find the lumps that belong to a file.
          
          THIS IS A POTENTIALLY DANGEROUS FUNCTION!  Always work on a backup if 
          possible!  This function does not care if a lump was allocated to a 
          different file and can generally screw things up royally if you don't 
          know what you're doing.  If you're trying to restore an accidentally 
          erased file, always try the Attempt To Restore An Erase File function 
          first.
          
          This function will ask you to enter in the sectors to allocate to the 
          file.  You must enter these sectors in order!  Also, if you are 
          working on a double-sided diskette, only enter in the first sector of 
          each "lump" (that is, sectors 1, 3, 5, and 7).  If you try to 
          allocate both sectors 1 and 2 to a file, the disk will be thrown into 
          an endless loop.  You can allocate any sector for single-sided 
          diskettes since each sector is considered one lump.
          
          Using this function, you can experiment with a variety of neat tricks 
          including cross-threading files (two files having the same sectors 
          allocated) and allocating an entire diskette to one file.
          
                             Attempt To Restore An Erase File
                             --------------------------------
          
          If you use this function IMMEDIATELY after accidentally erasing a 
          single file, you stand a near 100% chance of resurrection with this 
          function.  When a file is restored with this function or the Build 
          File From Scratch function (deleted file), the first character of the 
          filename will be changed to the letter "Z".  You can use DOS's RENAME 
          command to rename it to its original filename.
          
          If you killed multiple files (ERASE *.TXT type commands are notorious 
          for this), this function will probably not work.  Always use a backup 
          disk (made with DISKCOPY) before allowing this function to change the 
          directory info.
          
                                Produce A Map Of Diskette
                                -------------------------
          
          This function allows you to examine an entire diskette, sector by 
          sector, in the form of a unique road map.  Since the output is 
          self-explanatory, we will not discuss it here.  Suffice it to say 
          that you'll wish you took the time to make one of these for your most 
          valued diskettes should you ever experience the hand-spasm that 
          causes one to type ERASE *.* accidentally.   The ORP code means that 
          a sector is an "orphan", that is, it's been marked as allocated in 
          the File Allocation Table (FAT) but doesn't belong to any file in the 
          directory.  Running the DOS program CHKDSK will usually fix any 
          orphan lumps.
          (14)                   Selectively Purge Files
                                 -----------------------
          
          You'll really appreciate this function on those times you want to 
          kill about 20 .TXT-type programs but want to keep one.  In such a 
          case ERASE .TXT will wipe them all out.  This function allows you to 
          go through and choose one by one the files you wish to "purge" from 
          the diskette.  Everytime you enter a file's number from the file 
          list, that file's number will begin to blink.  If you make a mistake, 
          just choose the "Q" function to cancel the purge.  If you have a 
          double-sided diskette, choose the "M" function to look at the rest of 
          the files in the directory.  When you've "marked" all of the files to 
          be purged, just choose the "P" function to start the hand of diskette 
          doom (ouch!).



