1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
; 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,1985
; 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 contains definitions used by both modules of Kermit.
;
; revision history:
;
;edit 9, 30-Nov-1990 by MF. Make "fairness" count "prfair" be 50 so
; console gets checked a bit more often.
; edit 8, 11-Sep-1990 by MF. Make default RECEIVE and SEND packet-size
; 80 (per Kermit standard) as packet size is adjustable in Version
; 4.10.
; edit 7 16-Jun-86 OBSchou. Added cmnum in the command opcodes. This gets a
; number from the user inot variable number. No checking on overflow.
;
; edit 6 13-May-86 OBSchou. BDOS calls trapped to check for console use
; as we want to substitute in commands from a TAKE file. Trapping
; means I dont have to go through an check ever BDOS call...
;
; edit 5: 22-Apr-86 by Bertil Schou, Loughborough University, UK
; moved some definitions from the CP4SYS.ASM file to here for
; Kermit version 4.06
;
; edit 4: 6-Feb-85 by Charles Carvalho
; modify pcc007: replace ffussy assembly switch with runtime test.
; add "getvnm" - get CP/M version number.
;
; edit 3: 13-Jan-85 by Vanya J.Cooper Pima Commun. College Tel: 602-884-6809
;
;pcc007 2-Jan-85 vjc modules:cp4def,cp4cmd
; Cmifil is too fussy about what characters to accept in a
; filespec. My CP/M manual says any printable character is ok
; except <>.,;:?*[], and lower case. In practice, even those work
; sometimes. Kermit itself uses '&' if file warning is on,
; and then won't let you reference the file. Allow all
; printable characters except those above. Add conditional
; ffussy, so that if not ffussy, all special characters will be
; allowed, just convert lower to upper-case.
;
;pcc008 2-Jan-85 vjc modules:cp4def,cp4tt,cp4utl
; Keyboard input during CONNECT mode can get locked out if
; there is enough input from the modem port to keep prtchr
; busy. This can happen for example, if the printer is running
; at the same speed as the modem line, leaving you helpless to
; turn it off or abort the host. Add a fairness count, so that
; at least every prfair characters we look at console input.
;
; edit 2: July 10, 1984 (CJC)
; Remove defines for TRUE and FALSE, during reorganization for LASM
; compatibility. If we're using LASM, this file is linked by CP4KER
; or CP4TYP, and links to CP4MIT or CP4LNK. Also, push comments around
; a little.
;
; edit 1: May, 1984 (CJC)
; extracted from CPMBASE.M80 version 3.9; modifications are described
; in the accompanying .UPD file.
;
;Symbolic Definitions for some ASCII characters
;
soh EQU 01O ;ASCII SOH (Control-A)
cntlc EQU 03O ;ASCII ETX (Control-C)
ctrlc EQU 03O ;ASCII ETX (Control-C)
bell EQU 07O ;ASCII BEL (Control-G)
bs EQU 10O ;ASCII backspace (Control-H)
tab EQU 11O ;ASCII Tab (Control-I)
lf EQU 12O ;ASCII Line Feed (CTRL-J)
ff EQU 14O ;ASCII Form Feed (CTRL-L)
cr EQU 15O ;ASCII Carriage Return (CTRL-M)
space EQU 20h ;ASCII Space
xon EQU 21O ;ASCII XON (Control-Q)
xoff EQU 23O ;ASCII XOFF (Control-S)
esc EQU 33O ;ASCII ESCape
semico EQU 3bh ;ASCII Semicolon
subt EQU 32O ;ASCII SUB (CTRL-Z)
cntlz EQU subt ;ASCII SUB (Control-z) [6]
ctrlz EQU subt ;ASCII SUB (Control-z)
del EQU 177O ;ASCII DELete (rubout)
;
;BDOS calls
IF NOT cpsker ;[6] If CPSKER is truem then system indep. stuff. We want
;to trap BDOS calls and test for console activity
bdos EQU 0005H ;BDOS entry point, for the following functions:
ENDIF ;NOT cpsker [6]
;
;Function Name Function Input Parameters Output Parameter
;============= ======== ================ ================
; (ALL Function Numbers are passed in Register C)
conin EQU 01H ;Read Console NONE ASCII Char in A
conout EQU 02H ;Write Console ASCII Char in E NONE
auxin EQU 03H ;Auxiliary input
rdrin EQU 03H ;Read Reader NONE ASCII Char in A
lstout EQU 05H ;Write List ASCII Char in E NONE
dconio EQU 06H ;Direct Con I/O ASCII Char in E I/O Status in A
; if E=0FEH,
; Input if E=0FFH
prstr EQU 09H ;Print String String-Address NONE
; in DE (term=$)
rdstr EQU 0AH ;Read Buffer Buffer-Address Read Buffer filled
; in DE
; Read Buffer Byte Function
; 1 Maximum Buffer Length
; 2 Current Buffer Length (returned value)
; 3-n Data (returned values)
;
consta EQU 0BH ;Console Stat NONE LSB(A)=1 if char ready
getvnm EQU 0CH ;Version Number NONE H=0 (CP/M), L=BDOS ver
inbdos EQU 0DH ;Init BDOS NONE NONE
logdsk EQU 0EH ;LOG-In disk Value in E NONE
; A=0,B=1,...
openf EQU 0FH ;Open File FCB-Addr in DE Byte Addr.of FCB,
; or 0FFH if not
closf EQU 10H ;Close File FCB-Addr in DE Byte Addr.of FCB,
; or 0FFH if not
sfirst EQU 11H ;Search File FCB-Addr in DE Byte Addr.of FCB(0-3),
; or 0FFH if not
snext EQU 12H ;Search next FCB-Addr in DE Byte Addr.of next FCB,
; or 0FFH if not
delf EQU 13H ;Delete File FCB-Addr in DE Byte Addr.of FCB(0-3),
; or 0FFH if not
readf EQU 14H ;Read Record FCB-Addr in DE 0=successful read
; 1=read past EOF
; 2=reading random data
writef EQU 15H ;Write Record FCB-Addr in DE 0=successful write
; 1=ERROR extending
; 2=End of disk data
; 255=No more DIR space
makef EQU 16H ;Make File FCB-Addr in DE 0-3= success,
; 255= no more dir space
renam EQU 17H ;Rename File FCB-Addr in DE 0-3= success,
; 255= file not found
rdlog EQU 18H ;Ret. Log Code NONE Login Vector in HL
rddrv EQU 19H ;Read Drive # NONE # of logged in drive in
; (A=0,B=1,C=2....)
setdma EQU 1AH ;Set DMA Addr. Addr. of 128 NONE
; byte buffer in DE
wrtprt EQU 1CH ;Write prot dsk NONE NONE
getrov EQU 1DH ;Get R/O Vect. NONE HL= R/O Vect. value
setfat EQU 1EH ;Set File Attr. FCB-Addr.in DE Dir. code in A
gtdpar EQU 1FH ;Get DSK par. NONE HL=DPB Address
usrcod EQU 20H ;Get/Set Usr.Cd E=0FFH (get) A=current code (get)
; E-code (set) A=no value (set)
rrand EQU 21H ;Read Random FCB-Addr in DE A=Return code
wrand EQU 22H ;Write Random FCB-Addr in DE 1=read'g unwritten data
; 2=(not used)
; 3=can't close curr. ext
; 4=seek to unwr. ext.
; 5=dir overflow(write)
; 6=seek past End of DSK
cflsz EQU 23H ;Comp File Sz. FCB Addr.in DE Rand.Rec.field set to
; File size
setrar EQU 24H ;Set Rand. Rec. FCB-Addr.in DE Rand.Rec.field set
; CPM 2 only:
punout EQU 04H ;Write Punch ASCII Char in E NONE
gtiob EQU 07H ;Get I/O status NONE I/O Status in A
ptiob EQU 08H ;Put I/O status I/O Status in E NONE
getalv EQU 1BH ;Get All.Vect. NONE All.Vect in HL
; CPM 3 only:
auxout EQU 04H ;Auxiliary output
auxist EQU 07H ;Get AUXIN: status A=FF if character
; ready, A=0 if none
auxost EQU 08H ;Get AUXOUT: status A=FF if ready, A=0
; if not ready
getfs EQU 2EH ;Get free space E=drive # rec free in dma addr
;
parevn EQU 00H ;Even parity.
parmrk EQU 03H ;Mark parity.
parnon EQU 06H ;No parity (eighth bit is data).
parodd EQU 09H ;Odd parity.
parspc EQU 0CH ;Space parity.
defpar EQU parnon ;Default parity.
ibmpar EQU parmrk ;IBM COMTEN's parity.
fcb EQU 5CH ;Location of File Control Block.
fcbext equ fcb+12
fcbrno equ fcb+33
buff EQU 80H ;Location of file output buffer (DMA).
bufsiz EQU 80H ;Size of DMA.
maxfcb equ 64 ; maximum of 64 fcbs to be stored in multiple fcb bock
maxpkt EQU '~'-' '+2O;Maximum size of a packet.
maxtry EQU 05O ; Number of retries on a packet.
imxtry EQU 20O ; Number of retries send initiate.
prfair EQU 50 ;[pcc008] Prtchr fairness count
; opcodes for command parser
cmkey EQU 01H ;Parse a keyword.
cmifi EQU 02H ;Parse an input file spec (can be wild).
cmofi EQU 03H ;Parse an output file spec.
cmcfm EQU 04H ;Parse a confirm.
cmtxt EQU 05H ;Parse text.
cmnum EQU 06h ;Parse a number
cmifin EQU 10H ;Parse an input file spec (but no
;Error output
;[4] from CP4SYS.ASM
;
;=========================================================================
; I/O Byte assignments (2-bit fields for 4 devices at loc 3)
;
;bits 6+7 LIST field
; 0 LIST is Teletype device (TTY:)
; 1 LIST is CRT device (CRT:)
; 2 LIST is Lineprinter (LPT:)
; 3 LIST is user defined (UL1:)
;
;bits 4+5 PUNCH field
; 0 PUNCH is Teletype device (TTY:)
; 1 PUNCH is high speed punch (PUN:)
; 2 PUNCH is user defined #1 (UP1:)
; 3 PUNCH is user defined #2 (UP2:)
;
;bits 2+3 READER field
; 0 READER is Teletype device (TTY:)
; 1 READER is high speed reader (RDR:)
; 2 READER is user defined #1 (UR1:)
; 3 READER is user defined #2 (UR2:)
;
;bits 0+1 CONSOLE field
; 0 CONSOLE is console printer (TTY:)
; 1 CONSOLE is CRT device (CRT:)
; 2 CONSOLE is in Batch-mode (BAT:);READER = Input,
; LIST = Output
; 3 CONSOLE is user defined (UC1:)
;
;=========================================================================
iobyte EQU 03H ;Location of I/O byte
;[4] From CP4SYS.ASM
;
;
;
; Protocol parameters. Some of these can be changed with commands.
;
drpsiz SET 50H ;Default receive packet size. (maximum is 5EH)
dspsiz SET 50H ;Default send packet size. (maximum is 5EH)
dstime SET 08H ;Default send time out interval.
drtime SET 05 ;Default receive time out interval
dspad EQU 00H ;Default send padding.
drpad EQU 00H ;Default receive padding.
dspadc EQU 00H ;Default send padding char.
drpadc EQU 00H ;Default receive padding char.
dseol EQU CR ;Default send EOL char.
dreol EQU CR ;Default receive EOL char.
dsquot EQU '#' ;Default send quote char.
drquot EQU '#' ;Default receive quote char.
dschkt EQU '1' ;Default checksum type
;
; Define VT or Terminal type values
vtdefo EQU 0 ;VT52 emulation by terminal itself.
vtdefv EQU 1 ;VT52 emulation by ttab tables in CPXVDU.ASM etc
vtdefd EQU 2 ;Dumb Terminal (Just prints)
vtdefe EQU 3 ;Termianl emulation done outside (in overlay)
; If this is being assembled by LASM, we need to LINK to one of two modules;
; if we're not using LASM, no problem.
; CPSKER.ASM defines "cpsker" TRUE, and CPXTYP.ASM defines it FALSE, so we can
; determine what's going on.
IF lasm AND cpsker ; building CP4KER with LASM?
LINK CPSMIT ; yes, chain to next piece.
ENDIF;lasm AND cpsker
IF lasm AND NOT cpsker ; LASM, but not building CP4KER?
LINK CPXLNK ; yes, chain to different piece.
ENDIF;lasm AND NOT cpsker
|