aboutsummaryrefslogtreecommitdiff
path: root/src/cpsker.asm
diff options
context:
space:
mode:
authorJeff Armstrong <jeff@approximatrix.com>2026-10-25 17:42:06 -0400
committerJeff Armstrong <jeff@approximatrix.com>2026-10-25 17:42:06 -0400
commitebb2ff2af569d5822b70ee555a32d27cf7494816 (patch)
tree7ac5e7b3fa73f7a8d996129086932ecce66374ad /src/cpsker.asm
downloadkermit-80-ebb2ff2af569d5822b70ee555a32d27cf7494816.tar.gz
kermit-80-ebb2ff2af569d5822b70ee555a32d27cf7494816.zip
Initial import of 4.11HEADmain
Diffstat (limited to 'src/cpsker.asm')
-rw-r--r--src/cpsker.asm315
1 files changed, 315 insertions, 0 deletions
diff --git a/src/cpsker.asm b/src/cpsker.asm
new file mode 100644
index 0000000..254d056
--- /dev/null
+++ b/src/cpsker.asm
@@ -0,0 +1,315 @@
+; CPSKER.ASM
+; KERMIT - (Celtic for "FREE")
+;
+; This is the CP/M-80 implementation of the Columbia University
+; KERMIT file transfer protocol.
+;
+; Version 4.0
+;
+; Copyright June 1981,1982,1983,1984
+; Columbia University
+;
+; Originally written by Bill Catchings of the Columbia University Center for
+; Computing Activities, 612 W. 115th St., New York, NY 10025.
+;
+; Contributions by Frank da Cruz, Daphne Tzoar, Bernie Eiben,
+; Bruce Tanner, Nick Bush, Greg Small, Kimmo Laaksonen, Jeff Damens, and many
+; others.
+;
+;
+; This is the header for the system-independent portion of KERMIT, which
+; consists of the following files (in this order):
+;
+; CPSKER.ASM - this file
+; CPSDEF.ASM - definitions for both KERMIT and KERSYS
+; CPSMIT.ASM - \initialization, main loop, miscellaneous commands
+; CPSCOM.ASM - /(BYE, EXIT, LOG, SET, SHOW, and STATUS) (Part1 of 2)
+; CPSPK1.ASM - \the KERMIT protocol handler (SEND, RECEIVE, LOGOUT,
+; CPSPK2.ASM - / and FINISH commands) (In two parts)
+; CPSREM.ASM - REMOTE commands etc
+; CPSSER.ASM - SERVER commands etc (Empty as yet)
+; CPSTT.ASM - the transparent commands (TRANSMIT, CONNECT)
+; CPSCPM.ASM - CP/M commands (DIR, ERA)
+; CPSWLD.ASM - the wildcard handler
+; CPSCMD.ASM - the command parser
+; CPSUTL.ASM - utility routines
+; CPSDAT.ASM - Data space and the overlay link space
+;
+; When building the system-independent part with M80 or MAC80, CPSKER
+; INCLUDEs the other files; when building with LASM, each file LINKs to
+; the next file.
+;
+; For now, the system-dependent routines are all in CPSSYS.ASM, with
+; the actual configuration defined in CPSTYP.ASM.
+;
+; revision history (latest first):
+;
+; Begin CP/M Kermit-80 version 4.11.
+;edit 32, 1-Apr-1991 by MF. Official release of work to date as CP/M Kermit
+; (Kermit-80) Version 4.11.
+; Modified edit level of cpscpm.asm to reflect a bug fix for the TYPE
+; command introduced with edit 13.
+;edit 31, 29-Mar-1991 by MF. Modified edit levels of cpsker.asm,
+; cpscom.asm and cpsdat.asm to reflect rename of parameter vermin to
+; revno (revision level) and change of SET COLLISION REPLACE to
+; SET COLLISION OVERWRITE to conform with C-Kermit. Modified
+; edit level of cpsrem.asm to reflect change from REMOTE SET FILE
+; COLLISION REPLACE to REMOTE SET FILE COLLISION OVERWRITE.
+; Modified edit level of cpsutl.asm to reflect code tightening and
+; edit levels of cpsmit.asm and cpspk2.asm to close any open TAKE-file
+; and abort take-file processing if ^C is typed from the console
+; Also corrected ^Z test in cpsmit.asm in INPUT command ("inp2b")
+; Implement "file not found" complaint if a TAKE command can't find
+; the TAKE-file and it's not the initial TAKE (KERMIT.INI)
+; Modified edit level of cpscpm.asm to reflect modification of the
+; TYPE and PRINT commands to cancel file typeout/printout completely
+; if ^C is entered on the console (either immediately or after a key
+; has been pressed to induce a pause) and to immediately begin
+; typeout/printout of the next file (if the filespec was wild-carded)
+; if ^X is entered (either immediately or after a key has been pressed
+; to induce a pause).
+; Modified edit levels of cpsmit.asm and cpscom.asm to reflect addition
+; of the STAY command as a synonym for SET NO-EXIT.
+;edit 30, 27-Feb-1991 by MF. Modified edit levels of cpscom.asm,
+; cpsmit.asm, cpsutl.asm and cpsdat.asm to reflect provision for
+; a "revision level" field (1-26=A-Z), addition of QUIT as a synonym
+; for the EXIT command, recognition of C, R and S as abbreviations
+; for the CONNECT, RECEIVE and SEND commands, respectively, display
+; of Kermit version in the VERSION command and a fix to the TAKE-file
+; input routine "r1tchr" to prevent semicolons from being interpreted
+; as command separators during TAKE-file execution. This last fix
+; allows such commands as REMOTE DELETE *.*;* to Kermit-32 to
+; operate as expected.
+;edit 29, 14-Feb-1991 by MF. Updated edit levels of cpscom.asm,
+; cpscpm.asm, cpsdat.asm and cpsrem.asm to reflect bug fixes,
+; code tightening and simplified routine "remcli" (in cpsrem.asm)
+; which gets text to be passed on to a remote Kermit in REMOTE
+; Kermit commands.
+;edit 28, 8-Feb-1991 by MF. Changed edit level of cpscpm.asm to reflect
+; a bug fix to make TAKE-files work properly with commands such as
+; INPUT which check the keyboard for input.
+;edit 27, 30-Jan-1991 by MF. Changed edit levels of cpscpm.asm, cpsrem.asm,
+; cpstt.asm and cpsutl.asm to reflect bug fixes and enhancements
+;edit 26, 17-Jan-1991 by MF. Changed edit level of cpscmd.asm to
+; reflect fixes to allow leading spaces/tabs to be ignored when
+; parsing keywords (this was the intent but the code never worked
+; correctly) and to blank the entire fcb in "cmifil" to allow successive
+; COPY commands to function properly. Also changed edit level of
+; cpspk1.asm to reflect further work on "disk full" error reporting.
+;edit 25, 14-Jan-1991 by MF. Incremented edit level of cpspk1.asm to
+; reflect bug fix to "disk full" error reporting code so <cr><lf>
+; is not sent directly to the Remote Kermit. This per a report from
+; Russell Lang of Australia's Monash University.
+;edit 24, 10-Jan-1991 by MF. Modified edit level of cpxtyp.asm to
+; reflect addition of "terminal required" message for some.
+; machines.
+;edit 23, 7-Jan-1991 by MF. Modified edit levels of cpxtyp.asm, cpxswt.asm,
+; cpxbbi.asm to reflect addition of Ampro Little Board support.
+;edit 22, 3-Jan-1991 by MF. Incremented edit levels of cpspk1.asm/cpspk2.asm
+; to reflect further mods to "sdata" and "inchr" routines.
+;edit 21, 2-Jan-1991 by MF. Incremented edit level of cpspk1.asm to reflect
+; code cleanup in "sdata" routine.
+;edit 20, 26-Dec-1990 by MF. Modified edit level of CPSCMD.ASM to reflect
+; fix to allow leading white space to be skipped in lines from
+; TAKE-files as well as from the CP/M command-line tail; this per a
+; phoned-in bug-report to Dr. Martin J. Carter of Nottingham
+; University in the U.K. (PPZMAJOC@vax.ccc.nottingham.ac.uk)
+;edit 19, 14-Dec-1990 by MF. Modified edit level of cpspk2.asm to reflect
+; modification to "gofil" to allow drive specifications in 2nd
+; filename of GET and RECEIVE commands; also modified edit levels of
+; cpspk1.asm and cpsrem.asm to reflect addition of "<<>>" around
+; "X" or "F" packets coming as a reply to a REMOTE command and
+; deletion of an unnecessary instruction before label remc2d
+; in cpsrem.asm.
+;edit 18, 9-Dec-1990 by MF. Modified edit levels for Version 4.10
+; yet another time to reflect changes in CPSDAT.ASM to clarify
+; "File size on DIR" status message.
+;edit 17, 4-Dec-1990 by MF. Adjusted edit levels of cpscom.asm/cpsdat.asm
+; to reflect addition of Autoreceive status to SHOW/STATUS display.
+;edit 16, 30-Nov-1990 by MF. Adjusted edit levels of cpscom.asm/cpsdat.asm
+; to reflect fix to SHOW/STATUS routines to show terminal display
+; mode (quiet/regular). Also adjusted edit level of cpsutl.asm to reflect
+; change to routine "p20ln" to use "pausit" to save code space.
+; Adjusted edit level of cpsdef.asm to reflect change in "fairness"
+; counter prfair from 100 to 50 to make terminal a bit more responsive
+; during CONNECTs.
+;edit 15, 27-Nov-1990 by MF. Adjusted edit level of cpspk1.asm to reflect
+; a bug fix.
+;edit 14, 27-Nov-1990 by MF. Again adjusted edit level of cpspk1.asm to
+; reflect modifications of "disk-full"and SET INCOMPLETE-FILES behavior.
+;edit 13, 23 Nov-1990 by MF. Adjusted edit level of cpspk1.asm to reflect
+; code changes for "disk full" processing.
+;edit 12, 8-Nov-1990 by MF.
+; Adjusted edit levels shown for cpscom.asm/cpspk1.asm/cpsdat.asm to
+; reflect bug fixes and code revisions.
+;edit 11, 5-Nov-1990 by MF.
+; Cosmetic changes for main help text for COPY and RENAME commands.
+; Begin CP/M Kermit-80 version 4.10.
+;edit 10, 2-Nov-1990 by MF. Moved Overlay address to 7000H (cpsdat.asm).
+;edit 9, 1-Nov-1990 by Mike Freeman (BPA). Cosmetic changes (command-name
+; changes: SET BAUD-RATE==>SET SPEED, FCOPY==>COPY, FRENAME==>RENAME,
+; STRING==>OUTPUT, REMOTE CWD==>REMOTE CD per suggestions of FDC
+; to aid in uniformity of nomenclature for various Kermits.
+;edit 8, 30-Oct-1990 by Michael Freeman; 301 N.E. 107th Street;
+; Vancouver, WA 98685 USA; Telephone (206)574-8221.
+; Work: Bonneville Power Administration
+; P.O. Box 491 M/S MORF
+; Vancouver, WA USA 98666
+; Telephone (206)690-2307
+; Implemented FRENAME command to rename a CP/M file.
+; Implemented many Remote commands, variable-length packets up thru
+; 94 characters in length. Fixed a bug in CPSCOM.ASM in the
+; routine "getnp" and a bug in CPSCOM.ASM which caused garbage to appear
+; on the screen when PRTSTR was called with QUIETD flag set.
+; Modified code in module CPSCMD.ASM to skip leading spaces and tabs
+; when getting Kermit commands from the CP/M command line. This also
+; obviates the necessity to type a leading semicolon to separate the
+; Kermit command from the Kermit commands on the CP/M command line.
+; Fixed code in CPSPK2.ASM which handles file collision detection
+; and resulting file rename per my entries in CPKERM.BWR.
+; and included fix by Russell Lang of Dept. of Electrical and Computer
+; Engineering, Monash University, Australia, to prevent renamed
+; files with SET WARNING ON from having the attributes (e.g., R/O)
+; copied from original file. Mr. Lang's E-mail address is:
+; Russell Lang Email: rjl@monu1.cc.monash.edu.au Phone: (03) 565 3460
+; Department of Electrical and Computer Systems Engineering
+; Monash University, Australia
+; Also fixed a bug in CPSPK2.ASM which prevented completion messages
+; from being displayed if terminal was set to QUIET.
+; Implemented most proposed SET FILE-COLLISION (COLLISION) commands.
+; Implemented SET INCOMPLETE file disposition command.
+; Implemented a few of the proposed REMOTE SET commands.
+; Implemented other fixes suggested in CPKERM.BWR.
+; Moved overlay address to 6C00H.
+; Changed location of .printx in this file so LASM doesn't complain.
+; In system-dependent modules, included HP-125 support.
+; Also modified Telcon Zorba code in CPXHEA.ASM to enable setting
+; of baud-rates and sending of a break.
+; Included Russell Lang of Monash Univ. Australia's implementation
+; for the Microbee series of computers (CPXBEE.ASM).
+; Fixed COMPUPRO version of Kermit to compile correctly and to
+; conform to current syntax for setting baud-rate.
+; edit 7, September, 1987. Added files for SERVER and REMOTE
+; modules (CPSSER/CPSREM). SERVER is still empty, and may be
+; only wishfull thinking. I have ideas, but I dont think I
+; will have the time to implement it.
+;
+; edit 6: 30 March, 1987 by OBSchou. Start Kermit-80 V4.09 with the
+; overlay address at 6000h. Also adjusted the INCLUDEs to allow
+; M80 to assmeble these files.
+;
+; edit 5: 20 June, 1986. Have added so much code etc that the overlay had to
+; be moved again.. give it to 5000h. This starts off Kermit-80 V4.08
+;
+; edit 4 22 April 1986
+; Start work on 4.06. This should clear up a couple of bugs, add in
+; a few features, and split the system dependent stuff into
+; smaller units.
+;
+; edit 3a 7 March 86 OBSchou Loughborough england. Minor additions
+; to cpsker.asm, cpscmd.asm and cpspkt.asm.
+;
+; edit 3: February 10, 1985 (CJC)
+; Update for v4.05; add "verno" so CPSUTL doesn't have to change
+; just because some other module did.
+;
+; edit 2: September 10, 1984 (CJC)
+; Update for v4.03.
+;
+; edit 1: July 27, 1984 (CJC)
+; Created to allow assembly of Kermit by LASM as well as MAC80 and M80.
+
+verno EQU 11 ; minor version number
+revno EQU 0 ;[MF]Revision level
+ ;[MF]0-26 yields A-Z
+
+; Version 4.10 of Kermit consists of the following edit levels:
+; cpsker.asm edit 32
+; cpsdef.asm edit 9
+; cpsmit.asm edit 30
+; cpscom.asm edit 13
+; cpspk1.asm edit 23
+; cpspk2.asm edit 11
+; cpsrem.asm edit 13
+; cpsser.asm edit 1
+; cpstt.asm edit 12
+; cpscpm.asm edit 14
+; cpswld.asm edit 4
+; cpscmd.asm edit 13
+; cpsutl.asm edit 30
+; cpsdat.asm edit 19
+; cpxlnk.asm edit 8 (cpslnk.asm is not assembled with cpsker, but it
+; defines the linkage area expected by cpsker, and so must
+; match the description in cpsutl.asm)
+; cpxswt.asm edit 10
+;
+; Version 4.10 of Kermit has been tested with the following edit levels of
+; the system-dependent files:
+; cpxtyp.asm edit 34
+; cpxsys.asm edit 40
+; cpxhea.asm edit 4
+; cpxtor.asm edit 4
+; cpxbbi.asm edit 4 (Ampro Little Board)
+;
+; Version 4.10 of Kermit is still to be tested fully against all known systems
+; so far included in the system dependent overlays.
+;
+
+
+FALSE equ 0
+TRUE equ NOT FALSE
+
+cpsker equ TRUE ; building system-independent part
+debug equ FALSE ; set false for running system. True => does some
+ ; unusual or unexpected things.
+;
+; Assembler type. Define the appropriate one TRUE, the rest FALSE. (We can't
+; use ASM, because it cannot handle multiple input files)
+mac80 EQU FALSE ; For assembly via MAC80 cross-assembler.
+m80 EQU false ; For assembly via Microsoft's M80.
+lasm EQU true ; For assembly via LASM, a public-domain
+ ; assembler.
+;
+; Get the other modules...
+
+IF lasm ; If we're linking, go on to the next file.
+ LINK CPSDEF
+ENDIF;lasm
+
+; If we're still here, we must be using M80 or MAC80. M80 doesn't
+; like ENDs inside conditionals, but the END statement has to be
+; in CPSUTL for LASM (otherwise, we'd need a file containing just an
+; END statement). So, we leave off the IF m80 OR mac80 conditional
+; that ought to be around these INCLUDEs. No problem until the next
+; incompatible assembler comes along...
+; Let's first say where we are:
+;
+.printx * CPSKER.ASM (or nearest offer) *
+;
+.printx * CPSDEF.ASM *
+ INCLUDE CPSDEF.ASM ; definitions
+.printx * CPSMIT.ASM *
+ INCLUDE CPSMIT.ASM ; initialization, main loop, some commands
+.printx * CPSCOM.ASM *
+ INCLUDE CPSCOM.ASM ; part of command/status/set etc
+.printx * CPSPK1.ASM *
+ INCLUDE CPSPK1.ASM ; KERMIT protocol handler (Part 1)
+.printx * CPSPK2.ASM *
+ INCLUDE CPSPK2.ASM ; KERMIT protocol handler (Part 2)
+.printx * CPSREM.ASM *
+ INCLUDE CPSREM.ASM ; Kermit REMOTE code (little in it, as yet)
+.printx * CPSSER.ASM *
+ INCLUDE CPSSER.ASM ; Kermit SERVER code (As yet, empty)
+.printx * CPSTT.ASM *
+ INCLUDE CPSTT.ASM ; transparent communication handler
+.printx * CPSCPM.ASM *
+ INCLUDE CPSCPM.ASM ; CP/M command support (DIR, ERA)
+.printx * CPSWLD.ASM *
+ INCLUDE CPSWLD.ASM ; wildcard handler
+.printx * CPSCMD.ASM *
+ INCLUDE CPSCMD.ASM ; command parser
+.printx * CPSUTL.ASM *
+ INCLUDE CPSUTL.ASM ; Various utilities and data, and END [ToadHall]
+.printx * CPSDAT.ASM *
+ INCLUDE CPSDAT.ASM
+ END ; MAC80 ignores END's in included files...