diff options
| author | Jeff Armstrong <jeff@approximatrix.com> | 2026-10-25 17:42:06 -0400 |
|---|---|---|
| committer | Jeff Armstrong <jeff@approximatrix.com> | 2026-10-25 17:42:06 -0400 |
| commit | ebb2ff2af569d5822b70ee555a32d27cf7494816 (patch) | |
| tree | 7ac5e7b3fa73f7a8d996129086932ecce66374ad /src/cpxlnk.asm | |
| download | kermit-80-main.tar.gz kermit-80-main.zip | |
Diffstat (limited to 'src/cpxlnk.asm')
| -rw-r--r-- | src/cpxlnk.asm | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/cpxlnk.asm b/src/cpxlnk.asm new file mode 100644 index 0000000..30dd080 --- /dev/null +++ b/src/cpxlnk.asm @@ -0,0 +1,206 @@ +; CPXLNK.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 file describes the areas used to communicate between KERMIT +; and the customizing overlay. It is included by the overlay. +; This file should be changed only to reflect changes in the +; system-independent portion of Kermit (enhancements, I hope). +; +; revision history: +;edit 8, 14-Sep-1990 by MF. Added variable "incflg" to hold incomplete- +; file status for SET INCOMPLETE-FILES command. +; edit 7: 8 April, 1987 by OBSchou. Added a new entry EXTERN to leap off to +; code written by the user to emulate any terminal they want. All +; characters are sent here in stead of conout during connect state. +; In due course, Ill trap all prtstrs and dconio as well. +; +; edit 6: May 30, 1986 by OBSchou. Added two more entries to the link area: +; first to point to a "family" string giving the family name of the +; system. If the older CP4SYS.ASM still has the code, then the +; string is null. Secondly, a JMP to give printer status (should be +; a BIOS function). If 0 then printer is ready, if 0ffh then printer +; busy. This makes version 4.07 incompatable with 4.05 +; +; edit 5: February 6, 1985 +; Added a storage variable, "PORT", for the port-in-use value +; required for the port status routine (same purpose as SPEED). +; Also moved the printer copy flag (PRNFLG:) into the commun- +; ications storage area so machine dependant overlay can access it. +; [Hal Hostetler] +; Also, replace assembly-time conditional "ffussy" with run-time +; switch (CJC). +; +; edit 4: August 21, 1984 (CJC) +; Define a use for the third word of the linkage section: it points +; to the version string for CP4SYS.ASM. Add flsmdm, to flush comm line +; on startup. Add bufadr and bufsec for multiple-sector buffer support. +; Shift the entry section up two bytes so we can exit cleanly from DDT. +; +; edit 3: August 3, 1984 (CJC) +; put "mover" in CP4SYS, so we can do a Z80 block move if so inclined. +; +; edit 2: July 10, 1984 (CJC) +; integrate Toad Hall changes for LASM compatibility: CP4LNK is linked +; by CP4DEF, and links CP4SYS. +; +; edit 1: May, 1984 (CJC) +; extracted from CPMBASE.M80 version 3.9; modifications are described +; in the accompanying .UPD file. +; + +; Define the entry section. These addresses contain jumps to +; useful routines in KERMIT. To show we know what we're doing, +; we store the length of this section (entsiz) in our linkage +; section. I didn't use ORG and DS because I don't want zeroes +; generated for all the space between here and the actual start +; of cp4sys. +entry equ 105H ; start of entry section +kermit equ entry+0 ; reentry address +nout equ entry+3 ; output HL in decimal +entsiz equ 2*3 ; 2 entries, so far. +; +; End of entry section. +; +; Linkage section. This block (through the definition of lnksiz) +; is used by Kermit to reach the routines and data in the overlay. +; The section length is stored at the beginning of the overlay +; area so Kermit can verify that the overlay section is (a) present, +; (b) in the right place, and (c) the same size as (and therefore +; presumably the same as) the linkage section Kermit is expecting. +; + ASEG + ORG OVLADR +; +lnkflg: dw lnksiz ; linkage information for consistency check. + dw entsiz ; length of entry table, for same. + dw swtver ; address of switcher. CPXSYS now a family + dw family ;*NEW* for V4.08. Address of the family string +; +; hooks for system-dependent routines: +; +; Input/output routines. +; + jmp selmdm ; select modem for I/O + jmp outmdm ; output character in E to modem + jmp inpmdm ; read character from modem. return character or 0 in A. + jmp flsmdm ; flush pending input from modem + jmp selcon ; select console for I/O + jmp outcon ; output character in E to console + jmp inpcon ; read char from console. return character or 0 in A + jmp outlpt ; output character in E to printer + jmp lptstat ;*NEW* get the status for the printer. + ; 0=>ok, 0ffh=> not ok + jmp 0 ;*NEW for 4.09* Terminal Emulation code (optional) + ; If terminal is set to EXTERNAL and this address + ; has been filled, then user uses their own code. +xbdos: jmp 0 ;*NEW* Address of the BDOS trap in the independent + ; code. Use this enty for BDOS calls if you want + ; the printer handler to work properly. + +; screen formatting routines + jmp clrlin ; erase current line + jmp clrspc ; erase current position (after backspace) + jmp delchr ; make delete look like backspace + jmp clrtop ; erase screen and go home +; +; these routines are called to display a field on the screen. + jmp scrend ; move to prompt field + jmp screrr ; move to error message field + jmp scrfln ; move to filename field + jmp scrnp ; move to packet count field + jmp scrnrt ; move to retry count field + jmp scrst ; move to status field + jmp rppos ; move to receive packet field (debug) + jmp sppos ; move to send packet field (debug) +; + jmp sysinit ; program initialization + jmp sysexit ; program termination + jmp syscon ; remote session initialization + jmp syscls ; return to local command level + jmp sysinh ; help text for interrupt (escape) extensions + jmp sysint ; interrupt (escape) extensions, including break + jmp sysflt ; filter for incoming characters. + ; called with character in E. + jmp sysbye ; terminate remote session + jmp sysspd ; baud rate change routine. + ; called with value from table in DE + jmp sysprt ; port change routine. + ; called with value from table in HL + jmp sysscr ; screen setup for file transfer + ; called with Kermit's version string in DE + jmp csrpos ; move cursor to row B, column C + jmp sysspc ; calculate free space for current drive + jmp mover ; do block move + jmp prtstr ; *** NEW *** Link from system indep equivalent +; +; Local parameter values +; +pttab: dw ttab ; points to local equivalents to VT52 escape sequences +spdtab: dw spdtbl ; address of baud rate command table, or zero +spdhlp: dw sphtbl ; address of baud rate help table, or zero +prttab: dw prttbl ; address of port command table, or zero +prthlp: dw prhtbl ; address of port help table, or zero +timout: dw fuzval ; Fuzzy timeout. +vtflg: db vtval ; VT52 emulation flag +escchr: db defesc ; Storage for the escape character. +speed: dw 0FFFFH ; storage for the baud rate (initially unknown) +port: dw 0FFFFH ; storage for port value (initially unknown) [hh] +prnflg: db 0 ; printer copy flag [hh] +dbgflg: db 0 ; debugging flag +ecoflg: db 0 ; Local echo flag (default off). +flwflg: db 1 ; File warning flag (default on). +ibmflg: db 0 ; IBM flag (default off). +cpmflg: db 0 ;[bt] file-mode flag (default is DEFAULT) +incflg: db 0 ;[MF]incomplete-file flag (default is DISCARD) +parity: db defpar ; Parity. +spsiz: db dspsiz ; Send packet size. +rpsiz: db drpsiz ; Receive packet size. +stime: db dstime ; Send time out. +rtime: db drtime ; Receive time out. +spad: db dspad ; Send padding. +rpad: db drpad ; Receive padding. +spadch: db dspadc ; Send padding char. +rpadch: db drpadc ; Receive padding char. +seol: db dseol ; Send EOL char. +reol: db dreol ; Receive EOL char. +squote: db dsquot ; Send quote char. +rquote: db drquot ; Receive quote char. +chktyp: db dschkt ; Checksum type desired +tacflg: ; TACtrap status: +IF tac + db tacval ; when non-zero, is current TAC intercept character; +ENDIF;tac +IF NOT tac + db 0 ; when zero, TACtrap is off. +ENDIF;tac +tacchr: db tacval ; Desired TAC intercept character (even when off) +bufadr: dw buff ; Address of possibly multi-sector buffer for I/O +bufsec: db 1 ; Number of sectors big buffer can hold (0 means 256) +ffussy: db 1 ; if nonzero, don't permit <>.,;?*[] in CP/M filespec. +; space used by directory command; here because space calculation is +; (operating) system-dependent +bmax: ds 2 ; highest block number on drive +bmask: ds 1 ; (records/block)-1 +bshiftf: ds 1 ; number of shifts to multiply by rec/block +nnams: ds 1 ; counter for filenames per line + +lnksiz equ $-lnkflg ; length of linkage section, for consistency check. + +IF lasm ; If we're assembling with LASM, + LINK CPXCOM ; get the next section. +ENDIF;lasm |
