

                           BLOCK WORK
                         by Mark Harris
                       Copyright (C) 1987


I - Introduction

     Block Work is a sophisticated PRODOS block editor. Also known as a ZAP program. Although it is specifically designed to work with PRODOS, with certain considerations, Block Work can be used with DOS 3.3 and Pascal formatted disks as well. Block Work is also a flexible copy program. This is again designed around PRODOS, but can copy DOS 3.3 and Pascal formatted disks.

     The Main strength and advantage of Block Work is it's flexability. For example; Ever need to block edit a 3 1/2 inch disk, and you pulled out Copy II+ to do the job, and found that it couldn't handle the job? Well I did, and that's why Block Work was written. Or maybe you'd like to copy a 5 1/4 inch disk to a 3 1/2 inch disk, or to your RAM disk, again Copy II+ won't allow this. But Block Work has no problem with it. There are many other features that will be explained later in this text.

     A word of caution: With flexibility, comes the possibilities of problems. So practice using a expendable disk until you get the feel of this program. But once you take a few moments you'll become quite adept in manipulating your disks. With Block Work, the possibilities are endless.

     Shareware - This program is free to distribute to anyone you'd like. Use it for a while. If you like it please send the $15.00 to - Mark Harris
                     8408 W. Aster
                     Peoria, AZ 85345  -  Thank you...

(Please send any comments and/or suggestions along with your payment.)

Support lines;
Cottontail Ranch - (602) 433-0159
Route 66         - (602) 979-2858


II - Command Summary

     All commands should be accompanied by the Open-Apple key. (OA).

OA-A = Ascii Display Mode                OA-B = Set Current Block #
OA-C = Copy Blocks between devices       OA-E = Edit byte
OA-F = Find Byte Sequence                OA-H = Hex Display Mode
OA-L = List disassembly of Buffer        OA-P = Print Screen to Slot #1
OA-R = Read Block to Buffer              OA-S = Set Current Slot #
OA-T = Toggle Tone On/Off                OA-V = View Directory of device
OA-> = Increment Block & Read            OA-< = Decrement Block & Read
OA-Ctrl-W = Write Buffer To Device       OA-? = Help Screen

III - Command Explanation
     All inputs must be in Hexidecimal, unless otherwise noted. See Appendix A for more information on the Hexidecimal numbering system.

OA-A = Ascii display
     This puts Block Work into the Ascii display mode. Everything that is done from then on will use Ascii information. For example, when you search for a byte sequence you'll be prompted for Ascii information instead of Hex. This command also resets the default search string to null, no default search string.

OA-B = Set Current block #
     Pressing this key will allow the user to change the current block # being work with. For example, if you would like to read block #$3A, make a change and write it back to block #$110. You would follow this sequence of keystrokes;
     - OA-B  enter 003A, or just 3A and <Return>.
     - OA-R  Read block into buffer
     - OA-E  Edit what you need.
     - OA-B  enter 0110, or just 110 and <Return>.
     - OA-Ctrl-W  Write buffer to disk at block #$110

OA-C = Copy Blocks between devices
     Pressing this key puts you into the copy mode of this program. With this command you can do any of the following, plus other things not listed or thought of yet.
     - Copy 5 1/4 to 5 1/4 inch disks. One or two drives.
     - Copy 3 1/2 to 3 1/2 inch disks. One or two drives.
     - Copy Ram disks to any of the above or visa versa.
     - Copy Hard disks to any of the above or visa versa.
     - Or any combination of the above.
     - Copy ranges of blocks between any of the above.
     - Search and replace byte sequences between any of the above
     - Search and replace within ranges of blocks.
     - Backup hard drives, or ram drives onto 5 1/4 or 3 1/2.
     - And other things that I haven't run across yet.
     See Appendix B on the copy program for more information.

OA-E = Edit Byte
     Pressing this key will allow you to edit the buffer. This can be done either in Hexidecimal or Ascii. If your in the Hexidecimal mode, by pressing OA-E you'll be asked for which byte you would like to edit. Enter in the byte # you want to work on. At this time the byte in the buffer will be highlighted, the byte number, the current value and a prompt will be presented to you. If you press Escape, you'll back out of this operation. If you press Return, no change will be made to the byte, and the next byte will be presented to you for the same evaluation. Pressing the arrow keys will allow you to quickly and easily move around in the buffer. You'll always be presented with the current byte value for the same evaluation as before. You may also use any of the OA-keys to go to any other operation without hitting the Escape key. If you choose to enter a new hex byte the buffer will be updated, and the next byte will be displayed. This will continue on until you press Escape.

     If you're in Ascii mode, the same order of events will happen with one notable difference. Before being asked which byte number you want to edit, you'll be asked to specify if you want the High bit set, or reset. The difference being in the Hexidecimal value of the byte. For example the letter "A" has a hexidecimal value of $C1, (High bit set). This letter on the screen is displayed normally. The letter "A" can also be represented on the screen as a flashing character (40 columns), or Inverse (80 columns). The hexidecimal value for this letter "A" is $41. It is important to edit a letter in the correct mode, otherwise problems can arise later while using the edited data. An example of this problem can happen if you want to change the volume name of a PRODOS disk. PRODOS looks for the volume name in block #$02, and it must be in high bit reset mode, (Flashing). If you edit it with the high bit set, PRODOS won't recognize it as a valid volume name. So to prevent problems, mark down which type of letter is being used.

*** Note- Editing a byte does not alter the disk in any way. To save the edited information to a disk you must use the OA-Ctrl-W, Write command.

OA-F = Find Byte Sequence
     Pressing this key will allow you to search the disk for a specific byte sequence. You may enter up to a 20 byte sequence to be searched for. The "=" sign (or BD in hex mode), is the Wildcard, and can be inserted anytime you need to find a range of bytes. For example, if you want to find out anytime softswitches are being accessed you could search for this sequence;    A9 BD C0  (LDA $C0XX); Remember BD="="
     This will show you the places on the disk that this instruction is being executed. Or if you want to find the occurrences of a word that might be spelled incorrectly, but
you're not sure how it's spelled, you might search for this sequence;        MISP======     (MISPELLED)
     This will show you all the places on the disk that mispxxxxx occurs.
     If you want to search for a Hex sequence, you must be in the HEX display mode, (OA-H). And if you want to search for an Ascii sequence you must be in the ASCII mode, (OA-A). You'll find that while searching for Ascii bytes, you may enter the characters in lowercase, but the program turns them into uppercase. This happens because the Ascii search looks for the entered sequence in uppercase, lowercase, high bit set, high bit reset or a mixture of any.
     Once you hit OA-F, assuming your in hex mode, you'll be presented with a prompt that ask's you to enter your search sequence in hex. If you have already entered a sequence it will be displayed as the default. Pressing Return here will accept the default and start it's search. Pressing Escape here will back out of this operation. You may also use any of the OA-keys to jump to another operation. Any other hex bytes can then be entered. After the proper sequence is entered, press Return to accept, and the search will begin. Pressing Escape while searching the disk will stop the search and end the operation.
     If your in Ascii mode, the sequence of events is the same, only you'll have to enter Ascii Information.
     Remember, when you hit OA-A or OA-H you'll set the default search string to null, no default string will be displayed.

OA-H = Hex display Mode
     Pressing this key will set the program in the Hex display mode. All work on the buffer data will be done in Hex.

OA-L = List disassembly of buffer
     Pressing this key lists a disassembly of the code read to the buffer. This command also shows the Ascii equivalent along side of the disassembled code. You may disassemble a page at a time by pressing the Return key. Or you may disassemble one instruction at a time by pressing the space-bar. Holding down the space-bar will give you a slow non stop scroll of the code. Holding down the Return key will give you a quick non stop scroll of the code. Pressing Escape at anytime will back out of the operation.


OA-P = Print screen to Slot #1
     Pressing this key will print the contents of the screen to your printer connected at slot #1. This command can be invoked at anytime the program is waiting for keypress. The intialization string is set up for the Imagewriter printers. Other printers may not work as cleanly. Eventually the user will be able to designate his own initialization string. Sorry for now though. If you really need to change the intialization string, then follow these steps;
          - Scan the disk that the Block Work program is on.
          - Look for this sequence - 89 90 8E 00 EA EA EA EA EA
          - This equals "Ctrl-I 90 N". For the Imagewriter...
          - Replace this with your init string.
          - You only have 8 bytes to work with and an ending 00.
          - You must append the 00 to the end of your string.
          - Write it back to the same block number and try it.

OA-R = Read Block to Buffer
     Pressing this key will read a block of information to the buffer, and display the information on the screen. This command uses the information on the top of the screen to find the correct block. You will need to set the correct Slot #, Drive #, and Block # to read first. (See Appendix C for what device is located in which slot and drive #).

OA-S = Set current Slot #
     After pressing this key, you'll be prompted for the slot number of the device you're working with. Pressing Escape will restore the old slot number and end this operation. Enter a number between 1 and 7. When the program first starts up, it uses the slot it started up from as the current slot #. Also, when ending the program, set the Slot and Drive that you want your selector quit code to access first. This will greatly speed up your selection of the next system program.

OA-T = Toggle tone ON/OFF
     Pressing this key will toggle the tone on or off. So if you like it silent, press this key once. If you decide you want it back, press it again. The program starts up with the tone enabled.

OA-Ctrl-W = Write buffer to Block #
     Pressing these keys will write the contents of the buffer to the block number designated on the top information line. The control key was added for safety.

OA-> = Increment Block # and Read
     Pressing this key will allow you to increment the block number and read it's contents to the buffer and display it on the screen. This is particularly useful to scan the disk for text while in the Ascii mode.

OA-< = Decrement Block # and Read
     Pressing this key will do the same as the above only decrementing the block #.

OA-? = Help Screen
     Pressing this key will give you an online summary of all the commands available to the user. Pressing any key will return you back to the main screen.

ESC = Escape key
     Pressing the Escape key will always allow you to back out of a particular operation. If no operation is underway, pressing the Escape key will end the program.

I hope that this program is of value to you in your library. I intend to update this program periodically and release it. You are welcome to pick-up updates and keep them without charge if you have sent in the initial purchase price. They will be available on BBS's or Public Domain libraries.
               Thank-you for your interest.

               Mark Harris



Appendix A - The Hexidecimal numbering system
     The hexidecimal numbering system is a convenient system for programmers to use. An example of a hexidecimal number would be $10. (The dollar sign "$" is the standard representation of a hexidecimal number.) The number $10 does not equal the number 10. The former equals 16 in our normal decimal numbering system. While the latter does equal 10 in the decimal numbering system. The Hex numbering system utilizes 16 unique digits, they are 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. While the decimal numbering system just uses 0-9. There are a couple of reasons why hexidecimal is so important to the computer programmer but unfortunatly I don't have the space to thorougly discuss it. But I would like to give you a couple of sources to look at.
          - Assembly Lines, Softalk Publishing, Roger Wagner.
            $3.00 from Polarware software company.
          - Prodos inside and out, Appendix B, Tab Books inc.
            Dennis Doms and Tom Weishaar. $16.95 Walden books etc
          - And any other good Apple publication on Assembly.


Appendix B - Copying Blocks between devices
     The Copy option of this program is one of the nicest features of this program. It's extremely flexible, and has features not found on any other program that I've seen. These features are;
          - Normal Disk copy
          - Copy a range of blocks from one device to another.
          - Copy disk while searching and replacing a string.

     You are not limited to device types. For example I can copy a 5 1/4 disk to a RAM disk. Or Back-up a Hard Disk. (There are other programs that will do this job more efficiently.) Or any other combination of devices. Now this could cause problems, but if your careful you'll have no problem.
     When copying disk to disk, you must have a formatted disk for your target disk, Otherwise a write error will occur. The upper information line will display the Slot, Drive, Block and operation that is being worked on at any given time.
     The normal disk copy option will keep reading from one disk and write to another disk until either the source disk runs out of blocks, or the target disk runs out of blocks. This allows you to use any combination of devices while copying.
     The Copy range of blocks option allows a much more controlled copying process. If you want to copy the first 80 blocks of a 5 1/4 disk to you Ram disk, you could specify this. You can even set the starting block of the target disk to a different starting block.
     The Search for byte sequence option allows you to specify either a hex string, or an Ascii string to search for. If the string is found it is replaced with another string that
you specify. The number of times a replacement is made is displayed down at the bottom of the screen. You can use this option on the whole disk or use the Range option to be more controlled in your search.
     All these options allow for alot of combinations, so try them out and see what works the best.


Appendix C - Device mapping in PRODOS
     PRODOS upon booting checks to see what machine is it's running on, and what devices are connected to it. It now stores all the information about these devices in a special location inside PRODOS. Storage devices such as Disk II's, Duo Drives, Ram disks, Hard disks, etc, are mapped to go into a specific slot and drive number. The problem is, depending on your configuation, the slot and drive number given to a device may not be the exact slot and drive that it is setting in. So, for those of you who need it heres a list of where PRODOS will map the following devices. (Assuming that these devices are connected at once.)

     Slot #   Drive #      -    Device
       7        1          -    Hard Drive #1 (Prodos)
       7        2          -    Hard Drive #2 (Prodos)
       6        1          -    5 1/4 Floppy drive #1
       6        2          -    5 1/4 Floppy drive #2
       5        1          -    3 1/2 Floppy drive #1
       5        2          -    3 1/2 Floppy drive #2
          or               -    IIgs RAM5, if setup
       3        2          -    RAM disk 64K
       2        2          -    3 1/2 Floppy drive #2 if
                                RAM5 is installed on IIgs.

