To accomodate the Compuserve maximum filename length of 6 characters, I plan to name the files CPR860.BIN, OVL0.BIN, CPR860.DOC and INSTL0.DOC. Any of these could turn out to be a conflict with an existing file, and may thus vary slightly. The final '0', of course, will be the version number. (Note: the .BIN file type is necessary on Compuserve only) In any case, the file OVL0.BIN MUST be renamed to OVERLAY.CMD, as this is the name CPR86 will be looking for when it attempts to load it. CPR860.BIN should be renamed to CPR860.CMD. ------------------------------------------------------------------------- INSTALLATION AND PATCHES FOR CPR86 Installation requires about 1 minute, once you've done it a few times, but for the first time, go slow and double check everything, because you're probably not too familiar with DDT86 patching proceedures. Start with a new disk that has a loader on the system tracks, CPM.SYS, DDT86, CPR86?.CMD, and OVERLAY.CMD Then do: DDT86 ;call up ddt86 rCPR86?.CMD ;read in cpr86 (DDT86 CPR86.CMD will not work) You will recieve a message telling you where the program has been loaded. This can be different on systems with different amounts of memory. On my system I get: START END 03D3:0000 03D3:097f 03D3 is the paragraph number (absolute addr. 3D30), and the code runs from 0000 to 097F offset from 03D3. Write these numbers down! Then do: rCPM.SYS ;read in cpm also - both files now in memory I get: START END 0443:0000 046B:30FF Write these numbers down! In the following steps, the numbers shown in brackets have to be changed based on what start and end addresses you received. Next, erase the current CCP by filling the area with 00's. f[0443]:80,0A7F,00 ;replace the start paragraph number for CPM.SYS Then, move the code from CPR86.CMD to CPM.SYS. m[03D3]:80,[097F],[0443]:80 The first bracketed number is the starting paragraph for CPR86. The second bracketed number is the end offset of CPR86 (length). The third bracketed number is the starting paragraph for CPM.SYS. The :80 is required because the "r" command also reads in the first sector .CMD file header, so the actual code is offset by one sector, or 80H. Now to save the patched image of CPM.SYS, simply do: wCPM.SYS DDT86 knows how many "pages" to save, because CPM.SYS was the last file loaded by the "r" command. In other words, if you rCPM.SYS first, the patch will bomb. Now, hit the reset button, and you're running CPR86. =========================================================================== CPR86 and OVERLAY PATCHES Listings are included at the end of this file which show the data areas for CPR86.CMD and OVERLAY.CMD. The patching proceedure uses DDT86, reading in the appropriate file with the 'R' command, making the changes with the 'S' command, then rewriting the file with the 'W' command. Finding the exact location of the data area is a matter of scanning through the file until you locate it. Though I'll give you some hints. CPR86.CMD CPR86 (the actual CCP replacement) needs only the default search path specified. After CPR86.CMD has been patched into CPM.SYS, use DDT86 to read ('R') CPM.SYS. At an offset of approxamately 07A0H you'll find the line where the path is set. Note that the default search path immediately follows the ASCII string 'CMD'. The default tables are in the form DU, DU, DU, DU, FF, where FF indicates end of the path. An ascii '$' character in any D or U position signifies the logged in disk or user for that particular path stop. In all cases, the path automatically begins with the logged DU, so the default table should begin with the desired second stop. D is in the form A = 0, B = 1. U is in the form 0 thru 31, both D&U being binary numbers.(not ascii) The path set in the distribution version is $,0,0,0,0FFh. This translates to current disk - user 0, disk A: - user 0. With my hard disk I use 3,0,2,0,0FFh. This translates to disk D: - user 0, disk C: - user 0. OVERLAY.CMD The cursor control commands are contained in the overlay, as well as the CHASFLG, BMFLG, FDSK and LDSK. References from ID_NUM through HI_MSG are not supported in your version of CPR86, so they can be ignored. CPR86 is harware dependent, and it's important that you make these patches for proper operation. Read in OVERLAY.CMD using DDT86 and 'R' command. The clrscrnf line begins at an offset of approx. 1040H. The FDSK - LDSK line is about 10A0H. Note the ASCII string '<-LDSK' is inserted in the data to aid in location. In the following, TRUE = 0FFh, and FALSE = 0 Enter the particular character strings for your terminal which will: clrscrnf = return cursor to home and clear the screen curupf = move cursor up one line eosf = erase from cursor position to end of SCREEN (not line) All sequences MUST end with the ASCII '$' character. Current settings are for a H/Z19 or H/Z29 terminal. To accomodate individual tastes, setting the CHASFLG true will defeat the clear screen on DIR, and also defeat the DU login on DIR. Current setting is false. The BMFLG is to accomodate my block mode terminal which produces a LF along with each CR. You probably want BMFLG false, unless your terminal is set to produce a LF. Current setting is false. PLENGTH and PWIDTH are the screen size, 80 characters by 24 lines. If your terminal is different, change these numbers, but I can't guarantee the results. NOTE THEY ARE WORD VALUES, NOT BYTES!!! FDSK is the first hard disk to be scanned with the FIND command. LDSK is the last hard disk to be scanned. If you dont have a hard disk, these can be set to A: and B:, but if you dont have a disk in B:, you will get a SELECT ERROR, or whatever it's called. In all cases, A=0, B=1, C=2, D=3, E=4 etc.... FDSK and LDSK are located 80H AFTER the start of the overlay data area. They do not come right after PWIDTH. To aid in location, they are now set to 0 and 1. (A: and B:) We can work out any problems via CP-MIG. GOOD LUCK ========================================================================= ; ; Data area for CPR86.A86 ; SPOT EQU $ DSEG ;so that CS: override prefixes are not generated ORG OFFSET SPOT ; ; The following makes up a far call address block for transient program ; TRANS DW 0 ;transient program offset (IP) TRAN_CSEG DW 0 ;transient program code segment ; TRAN_DSEG DW 0 ;transient program data segment ; OVL_DSEG DW 0 ;filled in after overlay load ; FTYPE DB 'CMD' DFLTTAB DB $,0,0,0,0FFH,0,0,0,0,0,0 ;A=0, B=1 etc. 5 stops + FF COMADDR DW COMBUF STADDR DW COMBUF COMSTRT DW COMBUF DCNT DB 0 ;holds return code from func calls CDISK DB 0 ;logged disk CUSER DB 0 ;logged user SDISK DB 0 SUSER DB 0 ;selected user TDISK DB 0 TUSER DB 0 SUBTYPE DB 'ZIP' COMTYP DB 'COM' OVLNAME DB 'OVERLAY',0 ;OVERLAY.CMD auto-start OVLFLG DB 0 ;overlay in memory flag SWFLG DB 0 ; IF SWW SWFCB DB 0,'SW! CMD',0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 SWCR DB 0 ENDIF ; ; Direct bios call control block ; IOBUF DB 0 PARAMCX DW 0 PARAMDX DW 0 ; ; Memory allocation information ; MEMBASE DW 0 ;base of memory MEMLEN DW 0 ;memory len-OVL ; DELIMS DB ' =..:;<>,' ;delimeter string (removed '_') ; INTR_TAB DB 'FIND' ;#8 overlay IF BYEE DB 'BYE ' ;#7 overlay ENDIF IF NOT BYEE DB 0,0,0,0 ;cant match 4 nulls ENDIF DB 'ZIP ' ;#6 in CPR86 and overlay DB 'SETP' ;#5 in CPR86 DB 'ERA ' ;#4 overlay DB 'REN ' ;#3 " DB 'TYPE' ;#2 " DB 'DIRS' ;#1 " DB 'DIR ' ;#0 " ; ; IF SWW MSG002 DB 'Cannot locate SW!.CMD',CR,LF,EOM ENDIF MSG003 DB 'CPR86 unable to load file',CR,LF,EOM MSG004 DB 'Read error',CR,LF,EOM MSG005 DB 'OVERLAY.CMD not found',CR,LF,EOM MSG010 DB 'CPR86 requires contiguous memory',CR,LF,EOM MSG011 DB LF,'Enter up to 5 path stops',CR,LF,EOM MSG012 DB 'Incorrect format, path erased',CR,LF,EOM ; ; command file control block ; FCB DB 0 ;disk request DB ' ' ;11 spaces DB 0,0,0,0 ;4 zeros FCB1 DB 0 DB ' ' ;11 more spaces (rename format) DB 0,0,0,0 ;4 zeros (1+11+5+11+4 = 32) FCBCR DB 0 ;current record to read/write RANDRN DW 0 ;random record number RANDOF DB 0 ;random rec overflow ; ; getcom buffer, can double as stack area, since only used after SP reset. ; COMBUF1 DB 81 ;aux combuf DB 0 BUFF RB 81 DB 0 ;this reserves memory for combuf ; ; end ======================================================================== The following is the partial data area for OVERLAY.CMD. Note this program was produced in object module format using RASM86 and LINK86, and contains both a code and data segment. It might look different to you under DDT86 than a 'normal' 8080 model program. ;--------------------------------------------------------------------------- ID_NUM DW 0 ;0 to 64K random record number PASSWORD RB 8 ;8 byte password LAST_ON RB 10 ;ie. 09:45 03/30/84 START RB 4 ;ie. 10:45 FINISH RB 4 ;ie. 11:45 TOTAL RB 4 ;ie 1+00 this will be cumulative HI_MSG DW 0 ;ie. msg 1 thru 64k MAXDSK DB 16 ;maximum disk access A = 0, B = 1 etc ; CLRSCRNF DB ESC,'E','$',0,0 ;clear screen, cursor home. CURUPF DB ESC,'A','$',0,0 ;cursor up one line. EOSF DB ESC,'J','$',0,0 ;erase from cursor to end of SCREEN. CHASFLG DB 0 ;set to 0FFH to defeat dir login, else 0. BMFLG DB 0 ;set to 0FFH for block mode, else 0. PLENGTH DW 24 PWIDTH DW 80 ; ORG 80H ;base page is not included in org statement using ; ;LINK86. Actual ORG here is 180H. FDSK DB 0 ;first hard disk A=0, B=1 etc LDSK DB 1 ;last hard disk db '<-LDSK' ;to aid in location The data shown from ID_NUM through MAXDSK is not used in CPR860, and can be ignored. end instl.doc