; ; CCPZ Version 4.1 ; ;**** Revision History **** ; ; MODS BY SBB 11/27/81 V4.1: ; 1) Local version 3.2 merged with RLC version 4.0 by adding ; cosmetic changes, and the following noted changes from ; version 3.1. Local version changes from 3.1 to 3.2 match ; RLC changes from RLC 3.1 to RLC 4.0, and were not merged. ; 2) MEMLOAD restored, fixed up exit conditions instead -- either ; everything is well, in which case returned to caller via ; RESETUSR, or error occurred, in which case no return, exit ; to MLERR (formerly COM8). This looks a lot cleaner, and ; yields up a few more bytes of space. ; 3) Added TWOCOL assembly switch to give two-column printout ; on DIR instead of four if true. This replaces the Apple ; Softcard CP/M BIOS runtime patch of CCP to do the same thing. ; They actually patched a hard CCP location on every warm boot, ; instead of patching the image before writing to disk! ; ; MODS BY RLC 11/8/81 V4.0: ; 1) Moved CIBPTR to byte after CIBUFF (reserved space for CIBUFF was ; changed to BUFLEN+1); CIBPTR is now in same relative position as ; it was in the original CCP, but, since the buffer length is ; different, CIBPTR is not in the exact position as in the original ; CCP ; 2) Added features for and equate for Command Level 3 (CLEVEL3); this ; command level explicitly supports the introduction of a command ; to the CCP from a transcient program; to do so, just fill CIBUFF ; with the command, place the character count in CBUFF, place the ; User/Disk Flag (see Location 4) in Register C, and JMP to CCPLOC; ; see the DOC file for detailed explanation and sample program; ; Command Levels are: ; 1 -- User Input from Console ; 2 -- Command Line Input from $$$.SUB File ; 3 -- Command Line Input from Transcient Program ; ; MODS BY RLC 10/20/81: ; 1) Error in MLOAD corrected. During the conversion to V3.0, an ; error was introduced in the command-search hierarchy implementation ; in which the TSELUSR was not being reset properly. ; 2) Stack area was discovered to be inadequate through the various ; revisions. Stack was expanded, and is now believed to be of ; sufficient size to handle full utilization of the stack. ; ; MODS BY RLC 10/12/81: ; 1) Error in MEMLOAD corrected. The default User Number was ; being reset before the read of the file into memory and after ; the open of the file were done; this resulted in the ability ; to load only files less than 16K in size from User Numbers ; other than 0 and some other strange side effects. This was ; corrected by having MEMLOAD call MLOAD (the old MEMLOAD) as ; a subroutine and then resetting the Default User Number after ; the return. COM8 was also changed to accommodate the additional ; entry on the stack. ; 2) Radical restructuring of the buffers. The IORESL buffer was ; found to be unnecessary (it was used in previous versions and ; not referenced in the current version). Also, most of the ; other single-byte memory buffers were merged into the code ; itself, resulting in a two-byte savings on each buffer, but ; violating the software engineering principals of keeping the ; data and code separate. All in-code modifications are clearly ; marked in the comments. ; ; MODS BY RLC 09/30/81: ; 1) FIRST BYTE OF SUBFIL CHANGED FROM 0 TO 1 TO FORCE $$$.SUB ; TO BE ON DRIVE A: (PHILOSOPHY CHANGE); THE OLD SUBMIT PROBLEM ; IS RESTORED BY THIS, BUT THE NEW SUB.COM FACILITY (CCP.COM?) ; SHOULD CORRECT IT BY ALWAYS CREATING THE FILE ON A: ; ; MODS BY RLC 08/16/81: ; 1) INTERNAL PRINT FUNCTION CHANGED TO TERMINATE STRINGS ON CHAR ; WITH MSB SET AS WELL AS STRING ENDING IN 0; THIS PERMITS ALL ; MESSAGES PRINTED BY CALLS OF THE FORM ; CALL PRINTC ; DB 'Message',0 ; TO ALSO BE PRINTED BY CALLS OF THE FORM ; CALL PRINTC ; DB 'Messag','e'+80H ; NET RESULT WAS THAT ONE BYTE IS SAVED ON EACH MESSAGE ; 2) SOME ERRORS IN EXISTING INTERNAL DOCUMENTATION (TRUE FROM ; PREVIOUS VERSIONS BUT NOT NOW) CORRECTED ; 3) DOCUMENTATION ADDED BEFORE CCPR EQUATE TO EXPLAIN WHAT IT IS ; AND HOW IT MAY BE CHANGED TO MATCH A PARTICULAR USER'S CP/M ; 4) THE TOKEN EVALUATOR FOR DEC-TO-HEX CONVERSION CHANGED SO THAT ; THE FORM OF A HEX NUMBER IS NOW xxxxH AS OPPOSED TO #xxxx ; 5) THE SAVE COMMAND NOW HAS AN S OPTION WHICH INDICATES THAT THE ; NUMERIC ARGUMENT IS THE NUMBER OF SECTORS RATHER THAN PAGES: ; Ex -- ; SAVE 10H TEST <-- SAVE 10H PAGES INTO TEST ; SAVE 10H TEST S <-- SAVE 10H SECTORS INTO TEST ; 6) THE 'Read Error' MESSAGE IS REMOVED; CONSIDERED REDUNDANT ; 7) GO MADE INTO A NON-RAS COMMAND; I MAINTAIN THAT GO SHOULD NOT BE ; EXECUTABLE FROM A RAS FOR PROTECTION OF THE SYSTEM, BUT ALLOWED ; GO TO EXIST BECAUSE OF REQUESTS FROM OTHER MEMBERS OF THE GROUP; ; RAS'S ARE PROTECTED BY THIS STEP SINCE A USER WHO HAS GARBAGE IN ; THE TPA OR A NON-ENTRANT PROGRAM CANNOT ACCIDENTLY OR PURPOSELY ; EXECUTE SAID GARBAGE AND CRASH THE SYSTEM; ; GO IS REDUNDANT WITH JUMP 100H ; ; MODS BY SBB 08/01/81: ; 1) MINOR ADDITIONAL CODE OPTIMIZATIONS TO GAIN A BIT MORE SPACE. ; 2) ADDED "GO" COMMAND FOR COMPATIBILITY WITH MANY OTHER CCP'S. ; SAME AS "JUMP 0100", BUT IS NOT A "RAS" COMMAND (NO REASON ; IT SHOULD BE). ; 3) PUT "RESETUSER" CALL MADE JUST AFTER "CALLPROG" BACK INTO ; "MEMLOAD" WHERE IT BELONGS TO PREVENT FUNNY USER NUMBER ; CHANGING AFTER CALLED PROGRAM RETURNS. "MEMLOAD" WAS THE ; REASON FOR "RESETUSER" ANYWAY. ; 4) RESET DEFAULT DMA BUFFER WITH "DEFDMA" RIGHT AFTER CALLED ; PROGRAM RETURNS. THIS IS THE REASON PROGRAMS LIKE "STAT" ; WILL MESS UP A "SUBMIT" RUN. FIX THIS IN ANY OTHER CCP ; YOU RUN INTO. ; 5) DEFINED "FENCE" EQUATE TO ALLOW SEPARATION CHAR IN DIR ; TO BE SET TO TASTE (":" OR "|" ARE TYPICAL). ; 6) PUT IN SYSTEM SIZE (MSIZE) AND EXTRA BIOS SIZE (BIOSEX) ; EQUATES FOR CCPLOC CALCULATION, IN CASE USER KNOWS THOSE ; AND DOESN'T HAVE BDOSLOC. IF BDOSLOC IS AROUND, ITS SUPPLIED ; VALUE IS EASILY INSERTED INSTEAD. ; ; MODS BY RLC 07/29/81: ; 1) CODE COMPRESSION MADE BY FJW AND MENTIONED IN HIS MESSAGE ; OF THIS DATE INCORPORATED ; 2) HEXNUM (HEXADECIMAL NUMBER INPUT ROUTINE) EXTENDED TO ALLOW ; 16-BIT VALUES; GET AND JUMP CORRESPONDINGLY MODIFIED, AS WELL ; AS DEC NUMBER ROUTINE FOR HEX ESCAPE ; 3) DEFAULT HEX VALUE IS NOW ZERO (NOT 1 AS BEFORE) ; 4) ADDITIONAL PARSE CHECKING IN USER ROUTINE REMOVED; USER WITHOUT ; AN ARGUMENT NOW DROPS THE USER INTO USER NUMBER 0 ; ; MODS BY RLC 07/27/81: ; 1) ESCAPE FROM DEC TO HEX INSTALLED AND ESCAPE FROM HEX TO ; DEC REMOVED; THIS REFERS TO THE '#' CHAR WHICH IS USED TO ; CHANGE NUMBER BASES; Change as per group discussion ; 2) SAVE CHANGED TO DEFAULT TO DEC AS NUMBER ARGUMENT; ORIGINAL ; FORM OF SAVE COMMAND EFFECTIVELY RESTORED; Change as per group ; discussion ; ; MODS BY RLC 07/20/81: ; 1) RADICAL RESTRUCTURING AND ADDITIONAL DOCUMENTATION ; 2) REMOVED MOST SYSTEM-RELATIVE CONDITIONALS AND ADDED ; SIMPLE VALUE-EQUATE FOR CCPLOC (This came from a group ; discussion and creation of the BDOSLOC program by RLC ; which supplies the required value to the user.) ; 3) CODE OPTIMIZATION AND SIZE REDUCTION IN SEVERAL PLACES ; 4) RESTRUCTURING OF CCP-RESIDENT COMMAND SCANNING PROCEDURE ; AND COMMAND TABLE (TABLE ENTRIES ARE NOW OF FORM 'NAME',ADR) ; 5) ADDED 'JUMP' COMMAND OF THE FORM: ; JUMP or JUMP ; THIS COMMAND ALLOWS THE USER TO "CALL" THE LOADED PROGRAM ; AT THE SPECIFIED PAGE (256 BYTES/PAGE) NUMBER OR, IF PAGE NUMBER ; IS NOT SPECIFIED, THE PROGRAM AT 100H IS CALLED. THE DEFAULT ; PARAMETERS IN THE COMMAND LINE ARE LOADED INTO THE SYSTEM ; PARAMETER BLOCKS IN LOW MEMORY (TFCB, TBUFF, ETC) AS FOR ANY ; OTHER COMMAND SO THAT THE COMMAND LINE IS PARSED AND PASSED ; TO THE PROGRAM. A SUBROUTINE CALL IS MADE, SO THE MEMORY- ; RESIDENT PROGRAM MAY RETURN TO CP/M VIA A SIMPLE RET INSTRUCTION. ; THE ONLY RESTRICTION TO THIS COMMAND IS THAT A JUMP 0 WILL BE ; INTERPRETED AS A JUMP 1. ; 6) REDUCED THE SIZE OF THE COMMAND LINE BUFFER TO 80 CHARS ; (SEE THE BUFLEN EQUATE TO CHANGE THIS) ; 7) HEXADECIMAL NUMBER INPUT ROUTINE ADDED AND DECIMAL NUMBER ROUTINE ; CHANGED TO ALLOW FOR ALTERNATE (HEX) BASE; HEX ROUTINE NOW ; RECOGNIZES THE 'NUMBASE' CHARACTER (SEE CUSTOMIZING EQUATES) AS ; A FLAG TO USE THE OTHER BASE ROUTINE. FOR INSTANCE, TO SPECIFY ; SAVE F (DEFAULT NUMBER BASE IS HEX), THE USER MAY ISSUE ; EITHER OF THE FOLLOWING COMMANDS [NUMBASE="#"]: ; SAVE F or SAVE #15 ; THE ESCAPE CHAR [#] MAY BE CHANGED BY ALTERING THE NUMBASE EQUATE. ; 8) 'SAVE' AND 'JUMP' COMMANDS CHANGED TO USE HEXADECIMAL ARGUMENT ; BY DEFAULT ; 9) ADDED 'GET' COMMAND WHICH LOADS A FILE AT A SPECIFIED PAGE ; ADDRESS. FORM OF THIS COMMAND IS: ; GET ; 10) REMOVED CLS COMMAND (as per discussion) ; 11) ADDED RAS (REMOTE ACCESS SYSTEM) EQUATE WHICH REMOVES FUNCTIONS ; TYPICALLY NOT DESIRED UNDER A REMOTE-ACCESS SYSTEM LIKE AN RBBS; ; FUNCTIONS REMOVED ARE: ; SAVE, ERA, REN, JUMP, GET ; ; MODS BY KBP 07/02/81: ; 1) ADDED WIDE EQUATE AND ROUTINE FOR WIDER DIR DISPLAY. ; 2) CHANGED COMMAND BUFFER TO TERMINATE STRING WITH 0. ; 3) ADDED CONDITIONALS FOR MINI AND HARD DISK. CHANGED ; CCPLOC CALCULATION TO ALLOW FOR SEVERAL SYSTEM LENGTHS. ; 4) ADDED EQUATE FOR DEFAULT USER NUMBER SO IT COULD BE ; OTHER THAN 0 (nice for hiding COM files in high user ; numbers made inaccessible on remote CP/M systems). ; ; THE FOLLOWING MODS MADE BY RLC 06/30/81: ; 1) ERROR IN CCPLOC FOR NON-REL OPTION CORRECTED ; 2) PROVISION OF 'BASE' CONSTANT ADDED FOR NON-ORG-0 CP/M SYSTEMS ; 3) MORE USER FLAGS ADDED: ; SPRMPT - ALLOWS USER TO EASILY CHANGE SUBMIT PROMPT ; (i.e., A$ is default) ; CPRMPT - ALLOWS USER TO EASILY CHANGE COMMAND PROMPT ; (i.e., A> is default) ; PGDFLG - ALLOWS USER TO SET TYPE COMMAND PAGING FLAG ; 4) CHANGED OPTIONS TO DIR, ERA, ETC (HUMAN ENGINEERING): ; DIR A - Both $DIR and $SYS ; DIR S - Just $SYS ; 5) MADE MINOR CODE COMPRESSION ENHANCEMENTS (FOR SPACE) ; ; THE FOLLOWING MODS MADE BY RGF 06/29/81: ; 1) CCP NOW USES THE BDOS INDICATOR TO DETERMINE IF ; A POSSIBLE SUBMIT FILE EXISTS ON THE DISK. THIS ; ELIMINATES WASTED TIME SEARCHING FOR A NON-EXIST- ; ANT SUBMIT FILE AFTER EVERY ^C ; 2) ADDED A CONDITIONAL "PGDFLT". IT WORKS THIS WAY: ; IF YOU SET PGDFLT TRUE (TO A 1), THEN YOU ; RETAIN RLC'S PAGING FEATURE WITH THE TYPE ; COMMAND. YOU CAN THEN OVERRIDE IT BY TYPING ; "TYPE /", TO SMOOTHLY VIEW THE ; FILE. ; IF YOU SET PGDFLT FALSE (TO A 0), THEN PAG- ; ING IS ONLY DONE WITH THE "/' OPTION, AND ; IS SMOOTH NORMALLY. ; 3) ADDED CLEAR SCREEN DEFINITION BYTES TO SIMPLIFY ; CARRYING THE CCP TO DIFFERENT TERMINALS. THESE ; ARE DEFINED IN EQUATES AS CLS1 AND CLS2. ALSO ; CHANGED THE CLS ROUTINE TO CONSERVE A LITTLE ; SPACE ; 4) ADDED REL EQUATE -FOR THOSE WHO ARE FAMILIAR WITH ; MODIFYING MOVCPM, THIS CAN BE USED IN CONJUNCTION ; WITH GENMOD.COM (PROVIDED BY DIGITAL RESEARCH ; IN THEIR MPM PACKAGE) TO INTEGRATE THIS CCP ; DIRECTLY INTO YOUR MOVCPM PROGRAM. ; 5) CHANGED THE FORM OF THE @ OPTION TO THE 'DIR' ; COMMAND, TO ALLOW AMBIGUOUS FILENAMES. TO SEE ; COMBINED $SYS AND $DIR FILES, TYPE ; DIR @. ; EG, ; DIR *.ASM @ ; OR ; DIR *.COM @ ; THE PRICE FOR THIS LUXURY IS THAT YOU NOW HAVE TO ; TO USE THE *.* SPECIFIER WHEN VIEWING ALL FILES: ; DIR *.* @. ; INSTEAD OF THE FORMER ; DIR @. ; NOTE THAT THE ACTUAL CHARACTER USED TO SPECIFY $SYS ; FILES IS NOW DEFINED IN AN EQUATE, FOR EASY CHANGING. ; THIS IS INTENDED FOR REMOTE CPM SYSTEMS, WHERE YOU ; DON'T ALWAYS WANT THE CALLER TO SEE $SYS FILES. NOTE ; THAT YOU CAN EFFECTIVELY DISABLE THE $SYS OPTION BY ; DEFINING THE SYS SPECIFIER AS A LOWER-CASE LETTER. ; 6) ADDED A NEW OPTION TO THE DIR COMMAND: ; DIR $ ; WILL DISPLAY ONLY $SYS FILES. CAN BE ; AN AMBIGUOUS FILE NAME. THE "$" SPECIFIER CAN BE ; CHANGED BY MODIFYING AN EQUATE. ; 7) CHANGED COMMENT FLAG FROM '*' TO ';' THROUGHOUT ; TO SIMPLIFY ADAPTATION FOR OTHER ASSEMBLERS. ; 8) ADDED TRUE/FALSE IN PLACE OF 0/1 FOR CONDITIONALS TO ; IMPROVE READABILITY ; 9) ADD CONDITIONAL 'SUPRES'. WHEN SET TRUE, USER NUMBER ; REPORTING IS SUPPRESSED FOR USER 0 ONLY, ALL OTHER ; USER NUMBERS ARE UNCHANGED. ; 10) ADDED ADDITIONAL Z80 CODE AND ASSOC. MACROS TO INCREASE ; USABLE CODE SPACE ; 11) ADDED "DFU" COMMAND, WHICH CAN BE USED TO DYNAMICALLY ; CHANGE THE USER NUMBER THAT IS SEARCHED WHEN A .COM ; FILE INVOCATION FAILS IN THE CURRENT USER AREA. NOTE ; THAT THIS REVERTS BACK TO ITS NORMAL VALUE OF USER 0 ; EACH WARM BOOT. ; 12) BREAK ROUTINE DIDN'T BREAK RELIABLY BECAUSE I/O WAS ; THRU FUNCTION 6. THE PROBLEM IS CAUSED BY THE FACT ; THAT BDOS TESTS STATUS WHENEVER IT SENDS A CHARACTER ; TO THE SCREEN, AND ACTUALLY INPUTS THE CHARACTER IF ; STATUS IS TRUE. IF THE CHAR IS NOT A CONTROL-S, BDOS ; BUFFERS IT UNTIL THE NEXT INPUT CALL, WHICH IS BY- ; PASSED BY USING FUNCTION 6. ; ; 29 JUNE, 1981 (RGF) ; ; RLC'S NOTES: ; ;**** CUSTOMIZATION PROCEDURE ***** ; To customize this CCP for CP/M, do the following: ; 1. Run SYSGEN and obtain a sysgen image of CP/M ; 2. Issue "SAVE 44 CPM.COM" to save sysgen image on disk ; 3. Assemble this CCP (with Mods); MAC or M80 MUST be used ; because of MACROs ; 4. If end address exceeds C500H, CCP is too big; correct ; 5. Load sysgen image with "DDT CPM.COM" ; 6. Init FCB with ICCP22.HEX (from assembly) ; 7. Read in CCP with offset 5400 ("R5400") ; CCP starts at address 1100H in sysgen image ; 8. Save sysgen image (if desired) with ^C and ; "SAVE 44 NEWCPM.COM" ; 9. Place system on disk with "SYSGEN" ; ;**** NON-STANDARD FEATURES ;**** ; The non-standard features incorporated into this CCP are: ; A. The Command-Search Hierarchy, as follows -- ; 1. Scan for a CCP-resident command and execute it if ; found ; 2. If not CCP-resident, look for a .COM file on disk ; 3. If the .COM file is not found in the current user ; area and the current user area is not USER 0, ; USER 0 is selected and scanned for the file ; 4. If the .COM file is not found on the current ; logged-in disk drive, drive A: is selected ; and scanned for the file ; B. The DIR Command no longer prints the current drive spec ; at the beginning of each line ; C. The TYPE Command pages its output ; D. A LIST Command now exists which is like TYPE but does not ; page and sends its output to the LST: device ; E. A CLS (Clear Screen) Command now exists which clears the ; screen of the Hazeltine 1500 terminal ; F. The user number is printed as part of the command prompt; ; the prompt is now du>, such as A0> and A15> ; G. Z80-code is used throughout to reduce the size of the CCP ; and give room to implement the additional functions ; H. The input line buffer has been reduced in size to 100 bytes ; I. The ERA Command displays the names of the files it is to ; erase ; J. The DIR Command has an additional special form of "DIR @" ; which displays all files (both non-system and system), ; while "DIR" displays just the non-system files ; K. The Directory Display no longer displays the disk name at ; the beginning of each line and it now includes a '.' between ; the file name and file type (FILENAME.TYP) ; L. The SUBMIT File Facility now expects the $$$.SUB file to be ; on the currently logged-in disk (as opposed to always A:) ; M. The Command Line Prompt is now '$' if the command comes from ; a $$$.SUB file and '>' if the command comes from the user; ; also, the '>' is not printed until all preprocessing is ; completed ; N. The TYPE and LIST Commands mask the MSB of each byte, so that ; files created by editors such as EDIT80 are "printable" ; ;**** End of Revision History **** ;