home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
KERMIT
/
CP411SRC.ARK
/
cpxlnk.asm
< prev
next >
Wrap
Assembly Source File
|
1991-04-23
|
9KB
|
207 lines
; 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