V3.3 notes ---------- I recently received an updated 2.5 source from Willie Davidson and 3.3 is simply the result of incorporating those changes into 3.2. The most significant differences seem to be to do with the "type file" function where the display width has been increased from 72 to 76 characters and the handling of non-display characters has been improved. V3.2 notes ---------- SUPERZAP v 3.1 allowed operation under CP/M 3.1 provided that certain implementation considerations were met, namely: 1. CP/M 3 is non-banked, OR, 2. Disk parameter headers reside in common memory, OR, 3. XMOVE routine is implemented. Version 3.2 removes all restrictions. It will now run on any CP/M 2.2 or 3.1 system with a Z80 processor. John Hastwell-Batten, 24th February, 1986 V3.1 enhancements and other changes to SUPERZAP ----------------------------------------------- 1. Upgraded to operate under CP/M 3.1 as well as CP/M 2.2, 2. Added ability to select user number, 3. Generalised screen control functions, 4. Other minor (cosmetic) changes. CP/M 3.1 compatibility: ---------------------- SUPERZAP now tests for CP/M version at startup. If not running under 2.2 or 3.1 then it complains and stops. Since any sensible CP/M 3.1 BIOS deals with physical disk sectors rather than 128-byte "logical" sectors, several changes were needed to map the physical disk I/O into a much larger buffer. The code size has not increased significantly because the buffer is set up in free memory past the end of the program. User number selection: --------------------- A very crude method of changing user number has been added. Upon selecting the (new) U option from the directory display panel, a prompt is displayed which calls for a single keystroke. If you respond with a numeric key (0-9) or a letter (in the range A-F) then the keystroke is interpreted as a hexadecimal digit and the current user number is changed. The user number is not displayed so you have to remember it. (I did say it was crude, didn't I?) Screen control functions: ------------------------ To facilitate patching the object file for your terminal rather than re-assembling the source code, I have generalised the routines which do screen control functions. The strings which relate to screen functions have been increased from 4 to 7 bytes and are now prefixed by a "length" byte. For example, to home the cursor and clear the screen on my terminal requires that I send it a two-byte sequence: 15h, 17h. The string is declared as: 2,15h,17h,0,0,0,0,0 The five zeros are just fill and could be anything. The "2" at the beginning says that only the next two bytes are significant. The screen control strings start at 150h and each is eight bytes long including the length prefix: 150-157 Clear screen and home cursor 158-15F Clear to end of line 160-167 Set inverse video 168-16F Set normal video 170-177 Cursor-positioning prefix 178-17F String sent to screen BETWEEN cursor coordinates 180-187 String sent to screen at end of cursor-positioning The next few bytes relate to cursor positioning. Rows are numbered 0 to 23 from top down, columns are numbered 0-79 from left to right. 188 1 if row coordinate sent before column coordinate (usual case) or 0 if row before column. WARNING: Do not set this location to any value except 0 or 1! 189 "Offset" to add to row (usually 20h) 18A "Offset" to add to column (usually 20h) 18B Non-zero if coordinates are sent as single-byte binary values (usual case) or zero if coordinates are sent as multi-byte decimal numbers (e.g. ANSI terminals). Finally, if you are using a Hazeltine terminal which doesn't like the tilde character: 18C Set to 7Dh for Hazeltine terminals, 7Eh for others. If you are using Z8E to configure the object file then the symbol names for the above locations can be loaded from the .PRN file: z8e zap.com zap.prn You can the use the following names with the E command: clsstr Clear screen and home cursor cllstr Clear to end of current line vinv Set inverse video vnorm Set normal video cppref Cursor positioning prefix cpmid Cursor positioning infix cpend Cursor positioning suffix row1st Row-before-column flag (remember, set to 0 or 1 ONLY) rowoff Offset to add to row coloff Offset to add to column cpbin Binary/ASCII coordinate flag maxasc Higest displayable character Cursor control keys now WordStar-compatible but to change them you need to re-assemble the source code. Didn't have time to make them object-code configurable. When you select track/sector mode, the default track number used to be 0 but I changed it so that the default is now the directory track. It is not very often you want to look at the system tracks with a disk editor. More frequently you want to recover files by fiddling the directory. Besides, on a "split" hard disk where the splitting is done by cylinder rather than by platter or surface, there may not even be a track 0 on the selected disk. In sector displays, characters with the high bit set are now displayed in inverse video rather than as dots. This simplifies reading directory sectors where files have attribute bits set. I added ASEG and ORG directives and put an .XLIST directive at the start and a .LIST directive at the end of the source file to generate a .PRN file suitable for use with the Z8E debug tool (SIG/M vol 239). Wish list: --------- 1. Extend random-record processing to handle VERY large files under CP/M 3.1, 2. Display current user number on the screen somewhere, 3. Extend file name selection to incorporate user numbers (perhaps like NSWP207). 4. Allow multiple sectors in the scratchpad. 5. Under CP/M 3.1 display physical sector numbers as XXXX:Y where XXXX is the actual sector number and Y is the 128-byte sub-sector number, 6. When in track/sector mode, allow the ability to select whether to use BIOS skewing or to use 0- or 1- origin sequential sector numbering (i.e. no skew). 7. Use the full width of the screen when displaying text files. 8. Add some sort of string search facility. John Hastwell-Batten, SYSOP, Tesseract RCPM+, P.O. Box 242, Dural, NSW 2158, AUSTRALIA 14th January, 1986