d71cabbabccc68fafb5d3a13f08094416dad2487
[pdp8.git] / sw / tools / KERMIT.PA
1 / MODIFIED SILENT VERSION, HACHTI 2008
2 / KERMIT FOR DEC 12-BIT MACHINES
3
4 / LAST EDIT: 06-SEP-1990 11:00:00 CJL
5
6 XLIST OFF
7 IFNDEF OFF <OFF= 1> /TURN LISTING OFF
8 IFNDEF ON <ON= 0> /TURN LISTING ON
9 XLIST ON; IFZERO 1 <
10
11
12
13
14
15
16
17
18 *** **** *********** ********* *** *** *** *********** ***** ****
19 *** **** *********** ********** **** **** *** *********** ***** ******
20 *** **** *** *** **** **** **** *** *** *** *** ***
21 *** **** *** *** *** ***** ***** *** *** *** ** ****
22 *** **** *** *** *** ***** ***** *** *** *** ** ***
23 ******* *** *** **** ************ *** *** *** **
24 ****** ********** ********** *** **** *** *** *** ***** *** **
25 ******* ********** ********* *** **** *** *** *** ***** *** **
26 *** **** *** *** **** *** ** *** *** *** *** **
27 *** **** *** *** **** *** ** *** *** *** *** **
28 *** **** *** *** **** *** *** *** *** *** **
29 *** **** *********** *** **** *** *** *** *** *** *********
30 *** **** *********** *** **** *** *** *** *** *** *********
31 > XLIST ON
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 / COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF
52 / NEW YORK.
53
54
55
56 / PERMISSION IS GRANTED TO ANY INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS
57 / DOCUMENT AND THE PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL
58 / PURPOSES.
59 \f/ EDIT HISTORY. /014 CJL
60
61 / 052 06-SEP-1990 BUG FIX. CHARLES LASNER (CJL)
62
63 / SENDING A FILE WHICH EXACTLY FILLS THE LAST DATA PACKET AT THE
64 / END OF THE FILE WILL CAUSE THE PACKET TO BE SENT TWICE. THE
65 / ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF.
66
67 / 051 29-AUG-1990 BUG FIX. CJL
68
69 / PDP-8/A NOT IDENTIFIED CORRECTLY IN CPUID ROUTINE. THE UPDATED
70 / PC IS WHAT IS LOADED INTO THE AC WHEN 7016 IS EXECUTED ON THE
71 / KK-8/A CPU. THE ROUTINE WAS CHECKING FOR THE NON-UPDATED VALUE.
72 / ALSO NEW DOCUMENTATION FOR PRE-CLEARING MEMORY FOR BENEFIT OF
73 / ENCODED BINARY FILES.
74 \f/ 050 06-SEP-1989 DECMATE I SUPPORT, ETC. CJL
75
76 / THIS EDIT IMPLEMENTS DECMATE I SUPPORT USING THE DP278-A OR -B.
77 / A NEW CONDITIONAL 'PORT' SELECTS WHICH PORT IS TO BE USED. IF
78 / KERMIT-12 IS RUN ON DECMATE I (WHILE NOT CONFIGURED FOR SERIAL
79 / PRINTER PORT COMMUNICATIONS; SEE EDIT 048.) THEN REMOTE
80 / COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT ASSEMBLY TIME
81 / ('PORT=0' OR 'PORT=1'). ADDED BAUD RATE PARAMETER 'BRATE' TO
82 / SELECT REMOTE COMMUNICATIONS BAUD RATE FROM THE STANDARD TABLE;
83 / DEFAULTS TO 1200 BAUD ('BRATE=7').
84
85 / 049 30-AUG-1989 REMOTE FLOW CONTROL, ETC. CJL
86
87 / THIS EDIT IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW CONTROL IS
88 / ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO THE REMOTE
89 / KERMIT REGARDLESS OF STATE. PREVIOUSLY, FLOW CONTROL ONLY
90 / APPLIED TO CONNECT MODE. LOCAL FLOW CONTROL (TOWARDS THE REMOTE
91 / KERMIT) IS UNNECESSARY AS LOCAL BUFFERS FOR REMOTE INPUT ARE
92 / ALWAYS AVAILABLE. CERTAIN ROUTINE CHANGES MADE FOR BENEFIT OF
93 / DECMATE I SUPPORT IN A SUBSEQUENT EDIT.
94
95 / 048 24-AUG-1989 DECMATE II, ETC. SUPPORT. CJL
96
97 / ONCE-ONLY CODE ADDED TO IMPLEMENT DECMATE II, ETC. REMOTE LINE
98 / SUPPORT ON SERIAL COMMUNICATIONS PORT. SELECTED PORT IS
99 / INDICATED ON OPENING BANNER IF OPERATING ON DECMATE.
100
101 / THIS EDIT PROVIDES BASIC SUPPORT OF THE DECMATE II COMMUNICATIONS PORT AS AN
102 / AUTOMATIC FEATURE OF THE STANDARD RELEASE OF K12MIT. AUTOMATIC DETECTION OF
103 / DECMATE II, ETC. HARDWARE IS PERFORMED UNLESS THE PDP-8-TYPE REMOTE LINE
104 / SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS THE REMOTE LINE ('SPRINT' IS
105 / SET OR EQUIVALENT).
106
107 / THIS EDIT INCORPORATES ALL OF THE INFORMATION TAKEN FROM VARIOUS SOURCES
108 / REGARDING DECMATE PORT INITIALIZATION, ETC. EVERY ATTEMPT HAS BEEN MADE TO
109 / COMPLETELY SET ALL APPROPRIATE REGISTERS, ETC. FOR DECMATE II, III, III+
110 / OPERATION. NO SUPPORT EXISTS FOR THE DECMATE III BUILT-IN MODEM OPTION, AS
111 / EXPLICIT DOCUMENTATION IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE IS
112 / APPARENTLY USED TO DISABLE THE MODEM). THESE ROUTINES ARE ONLY KNOWN TO WORK
113 / ON THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND THE III+
114 / HAVEN'T BEEN AVAILABLE TO THE AUTHOR FOR TESTING. THE INITIALIZATION CODE
115 / WILL BE UPDATED LATER TO INCLUDE PANEL REQUESTS, ETC. TO CORRECT ANY
116 / PROBLEMS, ETC. DECMATE-SPECIFIC FEATURES (SUCH AS SETUP COMMANDS) WILL BE
117 / ADDED LATER AND ENABLED FROM THESE ROUTINES.
118
119 / THIS EDIT INCORPORATES NON-INTERRUPT ROUTINES WHICH HAVE BEEN TESTED AT THE
120 / MAXIMUM COMMUNICATIONS SPEED OF THE DECMATE II (19200 BAUD). THEY WILL
121 / SUFFICE FOR ALL KERMIT IMPROVEMENTS SHORT OF SLIDING WINDOWS AT WHICH TIME
122 / INTERRUPT-DRIVEN I/O WILL BE REQUIRED. (INTERRUPT-DRIVEN I/O IS ILLEGAL ON
123 / CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL TO THE SYSTEM OR NON-SYSTEM
124 / HANDLERS.)
125 \f/ 047 21-AUG-1989 CODE CLEANUP. CJL
126
127 / STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS. THIS
128 / IS IN PREPARATION FOR EVENTUAL DECMATE II OPERATION, AND TO
129 / MINIMIZE K12PCH PATCH FILE SIZE. CERTAIN NON-CONNECT ROUTINES
130 / MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION.
131
132 / 046 15-AUG-1989 CODE CLEANUP. CJL
133
134 / ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL
135 / DECMATE USE. ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR
136 / OF 'COMIN'. ELIMINATION OF 'OREM' IN FAVOR OF 'COMOUT'. ADDED
137 / STATUS UPDATE ROUTINE ('UPSTATUS') FOR EVENTUAL DECMATE II, ETC.
138 / USAGE. ELIMINATED PDP-8, DECMATE I, DECMATE II CONDITIONALS.
139 / REORGANIZED SERIAL LINE CONDITIONALS AND ADDED NEW 'SPRINT'
140 / PARAMETER FOR SERIAL PRINTER PORT USAGE AS COMMUNICATIONS PORT.
141 / ADDED ONCE-ONLY CODE ADDED TO AUTOMATICALLY RECOGNIZE DECMATE I
142 / AND II OPERATION UNLESS ASSEMBLED FOR REMOTE COMMUNICATIONS ON
143 / SERIAL PRINTER PORT ('SPRINT' SET). UPDATED K12PCH.PAL TO
144 / CORRESPOND TO NEW DEFINITIONS. DEFINED EVENTUALLY NEEDED
145 / COMMUNICATIONS PORT INSTRUCTIONS FOR DECMATE II; ACTUAL DECMATE
146 / II OPERATION WILL BE DEFINED IN A SUBSEQUENT EDIT. DOCUMENTED
147 / NEW LOADING AND SAVING INSTRUCTIONS FOR K12MIT TO ALLOW FOR
148 / ONCE-ONLY CODE IN 10000-11777 WITHOUT SWAPPING THE CODE OUT FOR
149 / THE USR. THIS ELIMINATES OVERHEAD WHEN LOADING K12MIT, BUT IS
150 / DIFFERENT FROM THE FORMER INSTRUCTIONS WHICH ASSUMED NO OTHER
151 / USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR.
152
153 / THIS EDIT PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION
154 / OF K12MIT ON ANY MEMBER OF THE DECMATE FAMILY (I, II, III, III+). WHEN
155 / 6120-TYPE CPU DETECTION OCCURS, THE DECMATE I OR II-TYPE COMMUNICATIONS PORT
156 / INITIALIZE CODE IS AUTOMATICALLY SELECTED AS NECESSARY UNLESS THE PDP-8-TYPE
157 / ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET OR EQUIVALENT USER SETTINGS, ETC.)
158 / FOR THE VT-78-TYPE PRINTER PORT (32/33), IN WHICH CASE THE COMMUNICATIONS IS
159 / DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND
160 / IS ACCOMODATED AS SUCH).
161
162 / SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL THE PORT
163 / SELECTION, AS THERE ARE AT LEAST TWO VARIANT OPTIONS BOARDS (DP-278A AND
164 / DP-278B) EACH CONSISTING OF TWO PORTS.
165 \f/ 045 12-AUG-1989 BUG FIX. CJL
166
167 / FINISH, GET, AND RECEIVE COMMANDS FAIL TO ABORT PROPERLY
168 / (ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT
169 / OPERATING MODE ('KMODE') IS NEVER PROPERLY SET, OR IS SET AFTER
170 / SEVERAL PACKETS HAVE BEEN SENT. EACH COMMAND NOW SETS ITS OWN
171 / OPERATING MODE BEFORE INITIATING ANY PACKETS.
172
173 / 044 11-AUG-1989 CODE CLEANUP. CJL
174
175 / CHANGED 'CCMSG' TO 'ABMSG' WITH CLEARER MESSAGE. CHANGED
176 / 'CCFLAG' TO 'ABFLAG' FOR CONSISTENCY. CHANGED ABORT CHARACTER
177 / FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR CONSISTENCY. ELIMINATED
178 / 'ITTY' AND 'ITTYW' ROUTINES BY USING 'CTLCTST' AND 'INPUT'
179 / ROUTINES ALREADY AVAILABLE A/O EDIT 043. ELIMINATED 'TCHAR' IN
180 / FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043.
181
182 / 043 07-AUG-1989 CODE CLEANUP, ETC. CJL
183
184 / REWRITE OF CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT
185 / AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING
186 / USER-INTERFACE REWRITE. 'SCRIBE', 'LININP', AND 'ESCPRNT'
187 / ROUTINES NOW CALL "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL
188 / MESSAGES.
189
190 / 042 13-JUN-1989 CODE CLEANUP. CJL
191
192 / FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN K278
193 / (SOME OF THE K278 STUFF IS DEFICIENT!). CALCULATION OF PROPER
194 / SEQUENCE NUMBER FOR NAK CORRECTED OVER FORMER (K08MIT AND K278)
195 / VERSIONS. ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM.
196
197 / 041 12-MAY-1989 BUG FIX. CJL
198
199 / VARIOUS VERSIONS (DECMATE) WON'T FUNCTION REMOTELY WHILE KL-8
200 / VERSIONS WORK FINE. ADDED REMOTE LINE READ IOT TO INITIALIZE
201 / REMOTE LINE AT STARTUP TIME FOR VERSIONS REQUIRING THIS.
202 / CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT
203 / IN TWO PLACES.
204 \f/ 040 07-MAR-1989 COSMETIC CLEANUP. CJL
205
206 / CLEANUP OF EDIT HISTORY AND OTHER COMMENTS.
207
208 / 039 21-MAY-1988 CODE CLEANUP. CJL
209
210 / ADDED VARIABLE 'INIECHO' TO ALLOW DEFAULT CONNECT-MODE STATE TO
211 / BE HALF-DUPLEX ("SET LOCAL-ECHO ON"). MODIFIED INPUT SERVICE
212 / ERROR ADDRESSES TO SIMPLIFY ERROR TABLES.
213
214 / 038 19-MAY-1988 CODE CLEANUP. CJL
215
216 / ELIMINATED TRAILER FILES DURING ASSEMBLY BY CREATING VARIABLES
217 / 'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER FILE (PARAM.PA) TO
218 / CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY (WHICH
219 / WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY). OVERLAY
220 / BY K12PCH.BN WILL DEFAULT TO CREATION OF A DUMMY USER MESSAGE
221 / (WITHIN K12PCH) ENCOURAGING LOCAL CUSTOMIZATION. K12MIT.BN WILL
222 / CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA.
223
224 / 037 21-JAN-1988 BUG FIX. CJL
225
226 / RESET OS/8 DEVICE CONTROL WORD TABLE TO DELETE TENTATIVE FILE IN
227 / CASE OF PRIOR INPUT SERVICE ERROR.
228
229 / 036 20-JAN-1988 BUG FIX. CJL
230
231 / RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE
232 / THE FLAG SET.
233
234 / 035 14-JAN-1988 USR RESIDENT CODING. CJL
235
236 / CALLS TO USR NOW USE 10200 INSTEAD OF 17700. NO SWAP OVERHEAD
237 / WHEN OPENING OR CLOSING FILES.
238
239 / 034 13-JAN-1988 CODE CLEANUP. CJL
240
241 / ALL EIGHT-BIT ORIENTED CONSOLE CODE ELIMINATED; NOW IGNORES
242 / PARITY (JUST SEVEN BITS).
243
244 / 033 12-JAN-1988 CODE CLEANUP. CJL
245
246 / 'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED; NOW USES 'P7CH' FOR ALL
247 / CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE).
248
249 / 032 12-JAN-1988 CODE CLEANUP. CJL
250
251 / VARIOUS ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE
252 / BEYOND THE CLASSIC PDP-8.
253 \f/ 031 11-JAN-1988 CODE CLEANUP. CJL
254
255 / ELIMINATED 'RTDISP' AND CHANGED CALLING CONVENTION FOR DISPATCH
256 / ROUTINE. ALL CALLERS NOW LOCAL OR VIA LOCAL POINTERS. ADDED
257 / SEVERAL CONDITIONAL PARAMETERS AND LABELS FOR BENEFIT OF
258 / K12PCH.PAL.
259
260 / 030 05-JAN-1988 CODE CLEANUP. CJL
261
262 / CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE
263 / EFFICIENT CODE.
264
265 / 029 21-DEC-1987 CODE CLEANUP. CJL
266
267 / CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND
268 / REWROTE 'COMMAND' ROUTINE.
269
270 / 028 15-DEC-1987 CODE CLEANUP. CJL
271
272 / COMPLETE REWRITE OF FILE LOOKUP ROUTINE. 'LUKUP' NOW USES FIELD
273 / ONE BUFFER AND ITS OWN AUTO-INDEX REGISTER CONSERVING PROGRAM
274 / SPACE.
275
276 / 027 05-DEC-1987 CODE CLEANUP. CJL
277
278 / CHANGED DISPATCH ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE.
279 / ALL CALLS MADE COMPATIBLE. ELIMINATED 'SCANC' CODE. ELIMINATED
280 / CODE WITHIN 'DPARS' ROUTINE. 'LUKUP' ROUTINE NOW DOES ITS OWN
281 / DISK I/O. ELIMINATED 'BLKIN' ROUTINE.
282
283 / 026 27-NOV-1987 NEW CONNECT MODE CODE. CJL
284
285 / TOTAL REWRITE OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT AND
286 / OUTPUT TERMINAL ROUTINES. CONNECT IS NOW FULLY BUFFERED IN ALL
287 / DIRECTIONS. IF FLOW CONTROL IS OBEYED, ANY BAUD RATE CAN BE
288 / ACCOMODATED BOTH LOCALLY AND REMOTE (UP TO 9600 BAUD TESTED,
289 / SHOULD WORK TO AT LEAST 19200 BAUD BY INSPECTION). TESTED WITH
290 / FAST VT-100 EMULATOR CONSOLE TO PROVE ESCAPE SEQUENCES ARE NOT
291 / DROPPED WHEN LOCAL TERMINAL IS FASTER THAN REMOTE LINE. LIMITED
292 / USE OF SUBROUTINES TO IMPROVE HIGH BAUD RATE OPERATION. ADDED
293 / TABLE-DRIVEN ERROR EXITROUTINE FOR SEND ROUTINES.
294
295 / THIS EDIT PROVIDES FULLY BUFFERED INPUT/OUTPUT ROUTINES FOR BOTH LOCAL AND
296 / REMOTE PORTS. NO INTERRUPTS ARE USED FOR MAXIMUM COMPATIBILITY WITH OS/8
297 / DEVICES (SOME OF WHICH ARE INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E). REMOTE
298 / FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER
299 / IS 3/4 FULL. WHEN THE BUFFER REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1>
300 / TO ALLOW FURTHER OUTPUT. REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS;
301 / LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY.
302
303 / WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE BUFFER WILL FILL WITH OUTPUT
304 / CHARACTERS. WHEN THE USER RELEASES THE CONSOLE WITH <DC1>, THE BUFFER WILL
305 / RAPIDLY EMPTY (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE). THIS
306 / ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE LINE UP TO
307 / THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS.
308 \f/ 025 24-NOV-1987 NEW FEATURES AND CODE CLEANUP. CJL
309
310 / PROPER INTERRUPT SETUP FOR <^C> AND <^P>, ECHO STATE. ALL
311 / MESSAGES IN NEW FORMAT, (SOME NEW ONES HAVE BETTER CONTENT).
312 / ELIMINATED 'PRI6B' AND 'REM6B' ROUTINES. NEW AND IMPROVED INPUT
313 / SERVICE ERROR CODE MOVED TO PROPER PAGE. REWROTE CONNECT
314 / ROUTINES TO ALLOW NON-INTERRUPT BUFFERED I/O LATER. CREATED NEW
315 / VARIABLE 'ESCHAR' AND PARAMETER 'ESCAPE' TO SET DEFAULT ESCAPE
316 / CHARACTER. ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE
317 / USED CORRECTLY BY ALL ROUTINES. ADDED 'ESCPRNT' ROUTINE TO
318 / HANDLE ALL CASES (INCLUDING NON-CONTROL CHARACTERS). DEFAULT
319 / ESCAPE PARAMETER VALUE COMPATIBLE WITH K08V2, BUT IS A USER
320 / PARAMETER, CONFIGURED AS OTHER PARAMETERS DEFINED IN EDIT 017.
321 / CREATED ESCAPE FUNCTION TABLE FOR EXPANSION LATER. NOW SUPPORTS
322 / ESCAPE C(LOSE) IN UPPER OR LOWER CASE, ESCAPE ESCAPE (SEND ONE
323 / ESCAPE CHARACTER). ALL BAD ESCAPE COMMANDS WILL ISSUE <BEL>
324 / CHARACTER TO WARN USER THAT COMMAND IS ILLEGAL AND OTHERWISE WAS
325 / IGNORED. CREATED NEW VARIABLE 'ECHOFLAG' TO ALLOW LOCAL ECHO IN
326 / CONNECT MODE.
327
328 / 024 19-NOV-1987 NEW FEATURES. CJL
329
330 / NEW STARTUP MESSAGES AND HELP METHOD VIA COMMAND. CPU TYPE
331 / IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK FOR QUIRKS AND
332 / MODEL DEPENDENCIES. THE DEFAULT PROMPT REFLECTS THE ACTUAL CPU
333 / TYPE (THUS "KERMIT-12>" ON PDP-12). VERSION, REVISION, AND DATE
334 / NOW EQUATED SYMBOLS.
335
336 / 023 18-NOV-1987 NEW CONSOLE I/O PACKAGE. CJL
337
338 / NEW CONSOLE I/O ROUTINES WITH DC1/DC3 SUPPORT FOR CONSOLE
339 / TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO
340 / BE USED DURING CONNECT MODE). USES FIELD ONE FOR MESSAGE TEXT TO
341 / ALLOW FOR MORE PROGRAM SPACE. THE MESSAGES ARE NOW GIVEN IN
342 / UPPER/LOWER SIXBIT FORMAT. SUPPORT FOR <^P> RESTART AND <^O> TO
343 / FLIP ECHO. UPPER-CASE CAN BE FORCED BY CHANGING A VARIABLE
344 / ('UPONLY').
345
346 / 022 17-NOV-1987 BUG FIX. CJL
347
348 / EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM; NOW CHECKS FOR AND
349 / IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE.
350 \f/ 021 17-NOV-1987 CODE CLEANUP. CJL
351
352 / REWROTE TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE CONSISTENCY.
353 / RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE").
354
355 / FORMER CODE REGARDING THE TENTATIVE FILE MAXIMUM LENGTH WAS ACCEPTABLY
356 / ORGANIZED FOR ORIGINAL PS/8, OS/8 CONVENTIONS. WITH THE EVOLUTION OF THE
357 / OPERATING SYSTEM INTO OS/78 (VERSIONS 1-4) AND OS/278 (VERSIONS 1-2), THE
358 / ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES.
359
360 / THE ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL LENGTH
361 / OF THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM). IF RECORD 7777 IS PART OF
362 / THE ACTUAL LARGEST EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON
363 / THE DEVICE), THEN THE LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING
364 / BUG). SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS
365 / ASSUMED TO BE CORRECT.
366
367 / TESTS WITH THE DECUS VERSION OF OS/278 (DM-101) REVEAL A DANGEROUS CHANGE:
368 / THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS!
369
370 / TO COUNTERACT THIS, EDIT 010 INSERTED A DECREMENT OF TWO INTO THE LENGTH
371 / BEFORE PASSING IT BACK TO THE KERMIT FILE WRITING ROUTINE. THE FILE WRITING
372 / ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S
373 / COMPLEMENT NOTATION, THIS IS THE AMOUNT THAT WILL INDICATE FILE OVERFLOW
374 / SHOULD IT REACH ZERO.
375
376 / THIS HAS NOW BEEN REORGANIZED TO ALLOW THE ENTER ROUTINE TO SET THE DANGER
377 / COUNT DIRECTLY. OS/8 USERS MUST ALLOW FOR THE EXTRA ROOM (WHICH MUST BE
378 / PRESENT BUT WILL NOT BE USED), SINCE NO CHECK FOR SYSTEM VERSION WILL BE
379 / PERFORMED.
380
381 / 020 16-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL
382
383 / REWROTE ENTIRE OUTPUT FILE PACK ROUTINE. NOW SUPPORTS
384 / ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES OUTPUT
385 / BUFFER IN FIELD ONE (SAME DEFINITIONS AS INPUT BUFFER) TO ALLOW
386 / MORE PROGRAM SPACE. END OF FILE CONVENTION IN ASCII MODE NOW
387 / INCLUDES ENSURING <^Z> CHARACTER PACKED INTO FILE (OR NOT).
388 / REWROTE ENTIRE OUTPUT FILE CLOSE ROUTINE TO IMPLEMENT <^Z>
389 / SCHEME. ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE; USE
390 / SPECIAL ROUTINE CALL INSTEAD. FIXED PACKET WRITE BUG.
391
392 / 019 15-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL
393
394 / FIXED UNPACK <^Z> BUG. REWROTE ENTIRE INPUT FILE UNPACK ROUTINE.
395 / NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES
396 / INPUT BUFFER IN FIELD ONE TO ALLOW MORE PROGRAM SPACE. BUFFER
397 / FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE. END OF
398 / FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER
399 / OR NOT. ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE; USE
400 / SPECIAL ROUTINE CALL INSTEAD.
401
402 / 018 09-NOV-1987 BUG FIX AND CODE CLEANUP. CJL
403
404 / FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE.
405 \f/ 017 05-NOV-1987 NEW FEATURES. CJL
406
407 / CONDITIONAL ASSEMBLY PARAMETERS ADDED FOR MACHINE TYPE (PDP-8,
408 / DECMATE I, DECMATE II/III/III+), REMOTE LINE AND LOCAL TERMINAL
409 / INTERFACE DEFINITIONS.
410
411 / 016 05-NOV-1987 CODE CLEANUP. CJL
412
413 / OPTIMIZATION OF CODE, LITERALS, CONSTANTS.
414
415 / 015 04-NOV-1987 BUG FIX. CJL
416
417 / INPUT SERVICE ROUTINE ERROR DOES JMP INSTEAD OF JMS WHEN CALLING
418 / COMMON ERROR HANDLER.
419
420 / 014 02-NOV-1987 SOURCE FILE CLEANUP. CJL
421
422 / SOURCE FILE COSMETICALLY CLEANED UP AND RENAMED TO K12MIT.PAL
423 / WHICH CONFORMS WITH CUCCA NAMING CONVENTION. NO ACTUAL BINARY
424 / CODE CHANGES BEYOND K08V2. THIS EDIT HISTORY ADDED. ENTRIES
425 / PRIOR TO 014 TRANSCRIBED BY CJL.
426
427 / SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES) IS THE INTENDED ENVIRONMENT
428 / FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12.
429
430 / ASSEMBLING THE SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA CONFIRMING
431 / THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE).
432
433 / 013 01-OCT-1987 CHANGE TO VERSION 2.0. R. SCHLERF (RICH)
434
435 / CHANGED 'RKIOT'/'RTIOT' TO 43/44 REMOTE LINE IOT (LOCAL
436 / PREFERENCE). CHANGED 'ESCAPE' CHARACTER TO ^] ('CONX1') FOR
437 / GENERIC CONFORMITY. ADDED VERSION/COMMAND BANNER AT STARTUP FOR
438 / MINI-HELP. INCORPORATED K278 CHANGES 003-006, 009-010 (NO
439 / INTERRUPTS). DELETED 'ERRMSG.' NOW USES 'STXERR' AT 'CLOOP9'+2
440 / FOR PROGRAM SPACE. TO CONFORM TO GENERIC KERMIT, "BACK ON PDP8"
441 / MESSAGE DELETED AND REPLACED WITH BEEP <^G>. MESSAGE "SENDING
442 / FILE XXXXXX.XX CREATED ON DD-MM-YY" REDUCED TO "SENDING FILE
443 / XXXXXX.XX" TO CONFORM TO GENERIC KERMIT. PARITY BIT IS IGNORED
444 / ON BOTH REMOTE AND TTY LINES. OUTPUT PARITY IS SET TO SPACE.
445
446 / PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY:
447
448 / RICHARD SCHLERF (RICH)
449 / AMERICAN CYANAMID COMPANY
450 / MEDICAL RESEARCH DIVISION
451 / LEDERLE LABORATORIES
452 / BUILDING 190 ROOM 115H
453 / PEARL RIVER, NEW YORK 10965
454 / (914) 732-2186 (09:00 TO 16:00)
455
456 / SINCE PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS NOT
457 / SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION. FUTURE
458 / VERSIONS WILL INCORPORATE THE DECMATE FEATURES AND THUS OBSOLETE ALL OTHER
459 / VERSIONS AT THAT TIME.
460 \f/ 012 04-JUN-1986 PROGRAM FIX. SEPP STADELMANN (SSTA)
461
462 / RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC.
463
464 / 04-JUN-1986 VERSION RELEASED TO CUCCA BY MARTYN HEMMINGS (DEC GERMANY) AND
465 / SEPP STADELMANN (DEC SWITZERLAND) OF:
466
467 / DIGITAL EQUIPMENT CORPORATION (DEC)
468 / 146 MAIN STREET
469 / MAYNARD, MASS 01754
470 / (617) 897-5111
471
472 / CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH
473 / DOESN'T REALLY CONFORM TO THE NAMING CONVENTION).
474
475 / CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE. FILE REPAIRED BY:
476
477 / CHARLES LASNER (CJL)
478 / CLA SYSTEMS
479 / 72-55 METROPOLITAN AVENUE
480 / MIDDLE VILLAGE, NEW YORK 11379-2107
481 / (718) 894-6499
482
483 / REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA.
484
485 / PROGRAM IS NOW THE DECMATE II/III (III-PLUS) KERMIT ONLY. HOOKS WERE LEFT IN
486 / FOR PDP-8 VERSION, BUT NOT IMPLEMENTED. K278 DOES WORK WITH ADDITIONAL
487 / IMPLEMENTATIONS OF KERMIT, BUT RECEIVE COMMAND DOES NOT WORK. PROGRAM YIELDS
488 / RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO FLOPPY-BASED DECMATE II SYSTEM.
489 / CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS. K278 DOES
490 / NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND.
491
492 / 011 04-JUN-1986 NEW FEATURES. SSTA
493
494 / 'PRQ3' CODE CONDITIONALS. ROM SETUP COMMAND IMPLEMENTED FOR DMII/III.
495 / AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT.
496
497 / 010 13-MAR-1986 BUG FIX. MARTYN HEMMINGS (MART)
498
499 / FULL DISK HANDLED WELL.
500
501 / 009 13-MAR-1986 BUG FIX. MART
502
503 / CLEAN UP BREAK AND GET.
504 \f/ 008 12-MAR-1986 BUG FIX. MART
505
506 / CLEAR INPUT CHARACTERS FROM COMMUNICATIONS PORT WHEN IN IDLE
507 / LOOP.
508
509 / 007 11-MAR-1986 NEW FEATURES AND BUG FIX. MARTYN HEMMINGS AND
510 / SSEP STADELMANN
511 / (MART+SSTA)
512
513 / INTERRUPT DRIVEN AND BUG FIX.
514
515 / 006 10-MAR-1986 NEW FEATURE. MART+SSTA
516
517 / DEVICE PARSE ON GET.
518
519 / 005 10-MAR-1986 BUG FIX. MART+SSTA
520
521 / NO DATE IN FILE WITH <^Z> INTACT.
522
523 / 004 10-MAR-1986 NEW FEATURES AND BUG FIX. MART+SSTA
524
525 / MAXIMUM RECEIVE BUFFER FIXUP ('RTERMI'), 15 SECOND TIME-OUT
526 / DURING CONNECT.
527
528 / 003 10-MAR-1986 BUG FIX. SSTA
529
530 / TWO PAGE HANDLER FIX.
531
532 / K08MIT.PAL COPIED TO DEC ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO
533 / EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL.
534
535 / KERMIT.PAL AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO PRODUCE
536 / THE RUNNING KERMIT-8. *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.*
537
538 / 002 18-JUL-1985 ORIGINAL RELEASE. RANDY HIPPE
539
540 / 18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF:
541
542 / BUREAU OF ENGRAVING, INC.
543 / 3311 BROADWAY N.E.
544 / MINNEAPOLIS, MN 55413
545 / (612) 623-0900 X218
546
547 / CUCCA RENAMED FILE (KER8.PAL) TO K08MIT.PAL WHICH CONFORMS TO NAMING
548 / CONVENTION OF KERMIT FILES.
549
550 / K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY.
551
552 / PROGRAM PRONE TO GETTING "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS
553 / 'CAPAS' BYTE FEATURE AND ASCII TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF
554 / FILE DATA. COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY. <^C>
555 / ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!). MANY KERMITS WILL NOT
556 / WORK WITH K08MIT; HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20.
557
558 / 001 30-JUL-1984 FIRST VERSION (KER8.PAL). JERRY SANDS
559 \f/ HARDWARE HINTS AND KINKS.
560
561
562 / KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION:
563
564 / PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY.
565
566 / OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT).
567
568 / KL8-COMPATIBLE CONSOLE INTERFACE.
569
570 / 7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:).
571
572 / KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT.
573
574 / NOTE: ASSEMBLY PARAMETERS OF KERMIT-12 ALLOW FOR LOCAL KERMIT CONTROLLING
575 / TERMINALS TO BE OTHER THAN THE PRIMARY OS/8 CONSOLE DEVICE. THE ACTUAL
576 / HARDWARE MUST STILL CONFORM TO THE SAME REQUIREMENTS (THE DEVICE CODES WOULD
577 / THEN BE USER-SPECIFIED AND DIFFER FROM THE STANDARD 03/04) AS THE STANDARD
578 / CONSOLE INTERFACE AND TERMINAL.
579
580 / SPECIAL DECMATE CONSIDERATIONS:
581
582 / DECMATE USAGE IS USUALLY OBTAINED BY ASSEMBLING FOR THE STANDARD CONSOLE
583 / DEVICE (03/04), AS THE BUILT-IN FIRMWARE/SLUSHWARE OF THE DECMATES IS
584 / SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S REQUIREMENTS.
585 / (THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.)
586
587 / DECMATE REMOTE COMMUNICATIONS PORTS ARE *RADICALLY* DIFFERENT FROM
588 / KL8-COMPATIBLE PORTS. THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH
589 / DETECTS THE USAGE OF KERMIT-12 ON THE SPECIFIC DECMATE SYSTEM, AND
590 / SELF-CONFIGURATION AS APPROPRIATE. THERE IS ONE EXCEPTION TO THIS, NAMELY IF
591 / THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER PORT (32/33), THEN
592 / THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED. THE STANDARD
593 / ASSEMBLY OF KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS PORT.
594 / THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE.
595 \f/ CONFIGURATION RESTRICTIONS:
596
597 / WHEN INTERRUPTS ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T WORK.
598 / THE NON-INTERRUPT VERSION SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU, SO
599 / THIS SHOULD NOT BE A PROBLEM. INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE
600 / RUN ONLY ON SYSTEMS WHERE *ALL* INTENDED DEVICES CAN HAVE THEIR HANDLERS
601 / INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS. WHEN IN DOUBT,
602 / THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION).
603
604 / IF FLOW CONTROL IS DISABLED (DUE TO XON/XOFF BEING UNAVAILABLE) THEN THE
605 / CONSOLE BAUD RATE MUST MEET OR EXCEED THE REMOTE LINE RATE. THE USER MUST
606 / TAKE MINIMAL CARE NOT TO OVERLOAD THE INTERNAL BUFFERS OF KERMIT-12, AS THIS
607 / WILL YIELD THE ERROR MESSAGE: KEYBOARD INPUT ERROR!
608
609 / THIS IS NOT LIKELY TO OCCUR UNLESS ONE "PLAYS" WITH A KEYBOARD WHICH CAN
610 / GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE QUITE ADEQUATE FOR ALL
611 / REASONABLE TERMINAL APPLICATIONS. SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY
612 / XON/XOFF PROTOCOL (WHILE KERMIT-12 HAS IT ENABLED), THEN INTERNAL BUFFER
613 / OVERFLOW WILL YIELD THE ERROR MESSAGE: REMOTE LINE INPUT ERROR!
614
615 / THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY MISUSE OF FLOW
616 / CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12 WITH THE
617 / CONSOLE BAUD RATE SLOWER THAN THE REMOTE LINE BAUD RATE WITH FLOW CONTROL
618 / DISABLED). IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE
619 / LINE INPUT WILL OCCUR WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE
620 / USER FREEZES/UNFREEZES THE DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS
621 / FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY.
622
623 / FLOW CONTROL IS NOT YET SUPPORTED DURING KERMIT TRANSFERS. SINCE KERMIT-12
624 / DOES NOT SUPPORT SLIDING WINDOWS, KERMIT-12 WILL NEVER GENERATE OUTGOING
625 / XON/XOFF SEQUENCES. FUTURE REVISIONS WILL SUPPORT INCOMING XON/XOFF FROM THE
626 / REMOTE KERMIT. XON/XOFF PROTOCOL DURING CONNECT MODE IS COMPLETELY AVAILABLE
627 / AT THE USER'S OPTION.
628
629 / CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:" FEATURES, I.E. THE
630 / PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS
631 / <CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS ONLY). TERMINALS
632 / LACKING LOWER-CASE SUPPORT SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE
633 / AUTOMATICALLY. TERMINALS SUCH AS THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE
634 / ENABLED, AS KERMIT-12 SUPPORTS OPTIONAL OUTPUT FOLDING. THE UPPER-CASE ONLY
635 / OPTION SHOULD BE ENABLED FOR TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE
636 / HOST, AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE MESSAGE CHARACTERS (WHICH
637 / BECOME UPPER-CASE IF THIS OPTION IS SET). THE <BS> CHARACTER IS REQUIRED FOR
638 / VISUAL RUBOUT (<BS> <SPACE> <BS>) ONLY. FUTURE VERSIONS WILL SUPPORT
639 / HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT. ALL TERMINAL FEATURES (SUCH
640 / AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST DURING CONNECT
641 / MODE; THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL
642 / BE TREATED AS A SEVEN-BIT CHARACTER ONLY. IF THE USER PRESSES THE ESCAPE
643 / CHARACTER TWICE, THEN THE SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT
644 / ONCE; THERE IS NO WAY TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET.
645 / SINCE THE ESCAPE CHARACTER ITSELF CAN BE SET TO ALMOST ANY SEVEN-BIT VALUE,
646 / THIS SHOULD NOT BE A SERIOUS LIMITATION. TERMINALS THAT DON'T "BEEP" WHEN THE
647 / <BEL> CHARACTER IS SENT SHOULD NOT OUTPUT A PRINTABLE RENDITION OF THE <^G>
648 / CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT
649 / DURING VARIOUS MESSAGE SEQUENCES, ETC.
650 \f/ KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:
651
652 / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA.
653
654 / FUNCTIONAL BAUD RATES INCLUDE 110, 150, 300, 600, 1200, 2400, 4800, 9600,
655 / 19200, 38400 AND 76800. 2400 BAUD REQUIRES A REVISION "B" OR BETTER M8650
656 / MODULE (IF ONE USES DEC'S DOCUMENTATION OF AVAILABLE SPLIT-LUG OPTIONS).
657 / ACTUAL BAUD RATES UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN KERMIT-12
658 / BECOMES INTERRUPT-DRIVEN. RATES OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ
659 / BAUD-RATE OSCILLATOR.
660
661 / THE BAUD RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE
662 / A SINGLE SOLDER JUMPER TO IMPLEMENT THE PROPER BAUD RATE ABOVE 2400 BAUD.
663 / CHANGING BAUD-RATE GENERATOR CRYSTALS WILL PRODUCE OTHER RATES AS NECESSARY.
664 / (SEND INQUIRIES TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS
665 / INCLUDING UPGRADED BAUD-RATE OSCILLATORS, ETC.) KERMIT-12 HAS BEEN TESTED TO
666 / 9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION).
667
668
669 / KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:
670
671 / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY.
672
673 / FUTURE VERSIONS OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED PARITY
674 / OPTIONS. THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE
675 / SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT INTERACTION
676 / WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION).
677
678 / ALL BAUD RATES ARE SUPPORTABLE:
679
680 / 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.
681
682 / 19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER "W5" AND THEN
683 / SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD. A WESTERN DIGITAL TR-1602-B
684 / OR EQUIVALENT UART IS REQUIRED TO SUPPORT 19200 BAUD; MOST OF THE RECENT
685 / PRODUCTION DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS
686 / THIS REQUIREMENT. EARLY M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH
687 / *CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!).
688
689 / RECEIVE BAUD RATE SHOULD BE IDENTICAL TO TRANSMIT BAUD RATE. (DO NOT SET THE
690 / RECEIVE=150 BAUD SWITCH!)
691 \f/ OTHER INTERFACES:
692
693 / DKC-8/A (8/A OPTION BOARD #1) INTERFACES SHOULD BE SETUP AS PER THE KL8-J/A
694 / SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART. SOME DEC DOCUMENTATION
695 / INDICATED A PROHIBITION ON THE USE OF 19200 BAUD, BUT THIS IS OBVIATED BY THE
696 / USE OF THE SAME UARTS AS IN THE KL8-J/A.
697
698 / EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD
699 / WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES DO NOT SUPPORT OPTIONS
700 / KERMIT-12 WOULD REQUIRE TO BE DISABLED ANYWAY. THESE INCLUDE PARITY
701 / GENERATION, FRAMING ERROR DETECTION, ETC.). TO UTILIZE THESE DEVICES, THE
702 / ASSEMBLY PARAMETERS FOR USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES
703 / SHOULD BE GIVEN DURING ASSEMBLY (SEE ASSEMBLY INSTRUCTIONS). PROPER DEVICE
704 / CODE VALUES MUST BE OBTAINED FOR THE SELECTED INTERFACE, AS THERE ARE MANY
705 / ACTUAL POSSIBILITIES. (DP-12 DEVICES ARE GENERALLY DEVICE 40/41; PT08/DC02
706 / INTERFACES ARE GENERALLY DEVICE 11/12, ETC.)
707 \f/ ASSEMBLY INSTRUCTIONS.
708
709 / KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS:
710
711
712 / P?S/8 METHOD:
713
714 / ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS THE SOURCE FILE, THE FOLLOWING
715 / COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING:
716
717 / .PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8)
718
719 / OPTION SWITCH BREAKDOWN:
720
721 / /A ALL SYMBOLS IN SYMBOL PRINTOUT.
722
723 / /C OPTIMIZE CORE DURING ASSEMBLY FOR MORE SYMBOLS, LESS BUFFERS.
724 / THIS OPTION SHOULD BE DELETED IF MORE THAN 8K IS AVAILABLE FOR
725 / ASSEMBLY.
726
727 / /E FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.
728
729 / /J *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.
730
731 / /L PERFORM SECOND-PASS LISTING.
732
733 / /M CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY.
734
735 / /N ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT.
736
737 / /P ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT.
738
739 / /Q ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS.
740
741 / /S ENABLE SYMBOL TABLE PRINTOUT.
742
743 / /X ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY.
744
745 / /8 ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY.
746
747 / THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS TO BE DETERMINED
748 / AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED.
749
750 / P?S/8 PAL IS THE PREFERRED METHOD OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE
751 / TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED. K12MIT COULD GROW TO A SIZE
752 / BEYOND THE CAPABILITIES OF OS/8 CREF. THIS LIMITATION CANNOT APPLY TO THE
753 / P?S/8 DEVELOPMENT ENVIRONMENT.
754
755 / P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE
756 / ASSEMBLY MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS
757 / SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY.
758
759 / NOTE: P?S/8 IS *NOT* A DEC PRODUCT; IT IS SOLD COMMERCIALLY AND IS AVAILABLE
760 / FREE OF CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED
761 / INSTITUTIONS. CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8.
762 \f/ OS/8 FAMILY OF SYSTEMS METHOD:
763
764 / K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM DECUS
765 / AS PART OF THE OS/278 RELEASE. PAL8 VERSION B0 WILL RUN ON ANY OS/8 FAMILY
766 / SYSTEM, AS IT HAS NO HARDWARE DEPENDENCIES BEYOND THE ORIGINAL PDP-8
767 / REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED).
768 / THIS ALSO APPLIES TO CREF VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE
769 / IS REQUESTED. PAL8 VERSION B0 AND CREF VERSION B0 ARE AVAILABLE AS PART OF
770 / THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY. SEE THE
771 / DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV AND CREF.SV FROM
772 / THESE ENCODED FILES.
773
774 / ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY
775 / ORNAMENTED LISTING:
776
777 / .PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW)
778
779 / DEV: IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE. STANDARD EXTENSIONS
780 / ARE ASSUMED (.BN FOR BINARY, .LS FOR LISTING, .PA FOR PAL SOURCE). THE
781 / KSCR.TM TEMPORARY OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO
782 / SYS:CREFLS.TM IF NOT EXPLICITLY GIVEN. MANY SYSTEM DEVICES ARE TOO SMALL TO
783 / SUPPORT THIS TEMPORARY FILE, THUS THE FILE MAY BE DIRECTED TO ANOTHER
784 / AVAILABLE DEVICE WITH SUFFICIENT SPACE.
785
786 / THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC. TO
787 / THE ASSEMBLY.
788
789 / OPTION SWITCH BREAKDOWN:
790
791 / /C CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE.
792
793 / /E GENERATED LINKS ARE ERRORS.
794
795 / /F *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.
796
797 / /M USE MAMMOTH SYMBOL TABLE OPTION FOR CREF.
798
799 / /W FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.
800
801 / LOADING INSTRUCTIONS:
802
803 / .LOAD DEV:K12CLR,K12MIT.BN THIS LOADS THE BINARY CLEAR AND KERMIT
804 / .SAVE DEV K12MIT.SV=1 THIS SAVES THE CORE IMAGE
805
806 / THE JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT
807 / SHOULD NOT BE SAVED/RESTORED WHEN THE USR IS LOADED OVER THIS AREA OR
808 / DISMISSED (THE USR IS ACTUALLY NEVER DISMISSED IN NORMAL K12MIT OPERATION).
809 / OTHER BITS MAY BE SET AT THE USER'S OPTION, BUT ARE UNNECESSARY; THE BIT
810 / INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD REGARDING THE DISPOSITION OF
811 / 10000-11777. THE BINARY FILE K12CLR.BN (CREATED BY ASSEMBLING K12CLR.PA)
812 / LOADS ZEROES INTO ALL OF MEMORY TO CREATE A "CLEAN" CORE IMAGE FILE, WHICH
813 / MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION.
814 \f/ PASSING SHORT PARAMETER FILES.
815
816 / WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM (PARAM.PAL)
817 / THE FOLLOWING SHOULD BE NOTED:
818
819 / ALWAYS PUT THE SHORT PARAMETER FILE (CONTAINING EQUATED SYMBOLS SUCH AS
820 / USER=1, ETC.) IN FRONT OF K12MIT.PAL.
821
822 / IF TTY: IS USED FOR DIRECT TYPE-IN OF THESE PARAMETERS, THE INFORMATION NEED
823 / ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1. SUBSEQUENT PASSES REQUIRE THE
824 / ENDING <^Z> ONLY. IF THIS METHOD IS USED, A LISTING WITHOUT THE USER INPUT
825 / WHICH DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED. NOTE: IF BINARY IS
826 / GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT
827 / MESSAGE, ETC.), THE INFORMATION MUST BE TYPED IN DURING PASS 2. THE PASS 3
828 / LISTING MAY CONTAIN THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF
829 / THE INPUT. PASS 1 INPUT OF THE INFORMATION IS EFFECTIVELY IGNORED, AS NO
830 / DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.).
831
832 / EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE:
833
834 / DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED
835 / DURING PDP-8 PAL8 B0 OPERATION. THE KL8E TTY: HANDLER WILL NO LONGER BE ABLE
836 / TO BUFFER <^Z> DURING THE ASSEMBLY; YOU MUST WAIT UNTIL THE HANDLER ACCESSES
837 / THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY.
838
839
840 / CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE.
841
842 / IF SO DESIRED, A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING THE
843 / FOLLOWING INTO THE PARAMETER FILE:
844
845 / BUFFLD= 10 /THESE PROBABLY
846 / FILBUFF=2000 /WON'T CHANGE!
847
848 / GENMSG= 0 /DON'T GENERATE STANDARD (NULL) MESSAGE
849 / UMSG= 0 /DON'T GENERATE STANDARD (DUMMY) USER MESSAGE
850
851 / FIELD BUFFLD%10 /FIELD FOR TEXT MESSAGE
852
853 / *FILBUFFER /LOCAL MESSAGE LOADS THERE
854
855 /LCLMSG,TEXT "%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%"
856
857 / ZBLOCK LCLMSG+40-. /ZERO REST OF MESSAGE AREA
858
859 / TEXT IS IN UPPER/LOWER-CASE SIXBIT WITH '^' MEANING SHIFT CASE (INITIALLY
860 / LOWER-CASE) AND '%' MEANING <CR>, <LF>.
861 \f/ OTHER METHODS:
862
863 / KERMIT-12 *CANNOT* BE ASSEMBLED BY PAL10 (LAST KNOWN VERSION OF PDP-8
864 / CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES:
865
866 / DOES NOT SUPPORT 'RELOC' PSEUDO-OP.
867
868 / DOES NOT SUPPORT PAGE ZERO REDEFINE (CAUSES "Z" ERROR ON SOURCE FILES WHICH
869 / DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).
870
871 / INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO "Q" ERROR ON SOURCE FILES
872 / WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).
873
874 / DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION
875 / /W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC.
876
877 / DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8
878 / OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES.
879
880
881 / P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10. PAL10 SUPPORTS MACRO-8 MODE AS AN
882 / OPTION AND AUTOMATIC FIELD DUMP BITMAPS; ALL OTHER KNOWN PAL10 FEATURES EXIST
883 / IN P?S/8 PAL INCLUDING THE SUPPORT OF THE AUTOMATIC FIELD DUMP BITMAP
884 / PSEUDO-OPS ('ENBITS' AND 'NOBITS').
885
886 / OS/8 PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS SEVERAL SYNTACTIC
887 / QUIRKS (WHICH ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8
888 / PAL AND PAL10 IN CERTAIN MINOR WAYS); REGARDLESS, PAL8 LACKS THE
889 / COMPATIBILITY PROBLEMS OF PAL10.
890
891 / MAINTAINING SOURCE COMPATIBILITY.
892
893 / KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8
894 / PAL AND OS/8 PAL8 (VERSION B0). CERTAIN FORMS OF STATEMENTS SHOULD BE
895 / AVOIDED:
896
897 / TAD /NOT LEGAL IN PAL8
898 / 0+TAD /NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8
899 / TAD (3)+1 /GENERATES SAME AS "TAD (3+1)" IN PAL8
900 / -A!-B /UNARY OPERATOR HANDLED WRONG IN PAL8
901 / I+N /NOT LEGAL IN PAL8
902 / N+I /NOT LEGAL IN PAL8
903 / I I /NOT LEGAL IN PAL8
904
905 / THIS REQUIREMENT IS EASILY MET BY KERMIT-12 AS MOST OF THESE CASES ARE
906 / ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY.
907
908 / THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT HAS OTHER DESIRABLE FEATURES, MOST
909 / OF WHICH IT SHARES WITH P?S/8 PAL) ARE TOO SEVERE TO ALLOW USABLE ASSEMBLY OF
910 / THIS PROGRAM. BETTER CROSS-ASSEMBLERS MAY EXIST ELSEWHERE WHICH ARE
911 / SOURCE-COMPATIBLE WITH KERMIT-12.
912 \f/ USE OF P?S/8 LANGUAGE EXTENSIONS.
913
914 / P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL
915 / FOR ASSEMBLY DEVELOPMENT OF KERMIT-12. THESE INCLUDE LANGUAGE ELEMENTS SUCH
916 / AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE
917 / VALUE OF 'EXPR' WILL BE DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY
918 / WHEN THAT POINT IN THE ASSEMBLY IS REACHED. TO ACCESS THESE FEATURES AND
919 / STILL PROVIDE COMPATIBILITY WITH PAL8 (VERSION B0), THE FOLLOWING CODING
920 / TECHNIQUE IS SUGGESTED:
921
922
923 / IFNDEF PQS <PQS=0> /WILL BE 0 ON PAL8, PAL10
924
925
926 / IFZERO PQS < /DO PAL8, ETC. STUFF HERE
927
928 / FOO= (TABLE) /DEFINE POINTER TO ADDRESS OF TABLE
929
930 / TAD FOO-1 /GET (POINTER TO ADDRESS OF TABLE)-1
931 / DCA XR1 /SETUP AUTO-INDEX REGISTER
932
933 / WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8.
934
935 / > /END OF PAL8, ETC. VARIANT
936
937
938 / IFNZRO PQS < /DO P?S/8 PAL STUFF HERE
939
940 / TAD (TABLE)-1 /GET (POINTER TO ADDRESS OF TABLE)-1
941 / DCA XR1 /SETUP AUTO-INDEX REGISTER
942
943 / IFNDEF PASS <PASS=0>/DEFINE PASS VARIABLE
944
945 / PASS= PASS+1 /BUMP EVERY ASSEMBLER PASS
946
947 / PAUSE PASS /DISPLAY PASS NUMBER
948
949 / IFNZRO .&4000 <
950
951 / ERROR 1234 /DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS
952
953 / >
954
955 / > /END OF P?S/8 PAL VARIANT
956
957
958 / THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR PERMANENT ELEMENTS WHICH MAY BE
959 / MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT CODING, WHILE THE PAL8 (VERSION
960 / B0) VERSION CAN STILL BE USED (VIA DIRECT OCTAL, MULTIPLE EQUATE STATEMENTS,
961 / CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC. AS NECESSARY) FOR STANDARD
962 / ASSEMBLY OF KERMIT-12.
963 \f/ ASSEMBLY PARAMETERS.
964
965 / SEVERAL PARAMETERS MUST BE CHANGED WITHIN K12MIT.PA (OR PASSED TO THE
966 / ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE THE MAIN
967 / FILE):
968
969 / SETTING KEY= [RECEIVE IOT CODE FOR CONSOLE KEYBOARD] DEFINES THE CONSOLE
970 / KEYBOARD IOT CODE (DEFAULT IS 03).
971
972 / SETTING TTY= [TRANSMIT IOT CODE FOR CONSOLE OUTPUT] CHANGES THE CONSOLE
973 / PRINTER IOT CODE (DEFAULT IS 04).
974
975 / THE FOLLOWING DEFINITIONS ARE ESSENTIALLY FOR KL8-TYPE DEVICES ONLY, AS THE
976 / CODE DEMANDS KL8 HARDWARE COMPATIBILITY. MODELS OTHER THAN PDP-8 (SUCH AS
977 / DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON AVAILABLE INTERFACES (OTHER
978 / SOFTWARE DESIGNATES A SERIAL INTERFACE AS A LOGICAL PRINTER PORT; DECMATES
979 / SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES THIS.), OR DON'T ALLOW
980 / USABLE PLUG-IN OPTIONS.
981
982 / IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE:
983
984 / SETTING DEV30= 1 CREATES DEVICE 30/31 REMOTE LINE IOTS.
985
986 / SETTING DEV40= 1 CREATES DEVICE 40/41 REMOTE LINE IOTS.
987
988 / SETTING LEDERLE=1 CREATES DEVICE 43/44 REMOTE LINE IOTS (AND A CUSTOM
989 / HEADER).
990
991 / SETTING ORIGNAL=1 CREATES DEVICE 33/34 REMOTE LINE IOTS (ORIGINAL
992 / SETTINGS).
993
994 / SETTING SPRINT= 1 CREATES DEVICE 32/33 REMOTE LINE IOTS (SERIAL PRINTER
995 / PORT).
996
997 / SETTING USER= 1 CREATES DEVICE XX/XY REMOTE LINE IOTS.
998
999 / IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT.
1000
1001
1002
1003 / SETTING USER= 1 REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES:
1004
1005 / XX= [RECEIVE IOT DEVICE CODE] (DEFAULT IS 40).
1006
1007 / XY= [TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41).
1008 \f/ SETTING SPRINT= 1 INHIBITS THE BUILT-IN CHECK FOR DECMATE OPERATION AND
1009 / USES THE SERIAL PRINTER PORT FOUND ON ALL
1010 / WPS-8-CONFIGURED PDP-8/E, PDP-8/A CONFIGURATIONS,
1011 / VT-78, AND ALL DECMATES (VT-278, DECMATE II, III,
1012 / III+) FOR REMOTE COMMUNICATIONS.
1013
1014 / THE USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY BE
1015 / PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER
1016 / IS A MODEM (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC. REQUIRES A
1017 / GENDER CHANGER.), OR THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY
1018 / *ONLY* FOR A PRINTER, SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN"
1019 / KEY AS A SCREEN DUMP TO THE SERIAL PRINTER PORT, ETC. THESE ISSUES ARE NOT
1020 / RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY
1021 / KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE VERSIONS COULD REDEFINE THE
1022 / "PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.).
1023
1024 / SETTING BRATE= NN SETS THE DEFAULT BAUD RATE (FOR SYSTEMS THAT SUPPORT
1025 / THIS FEATURE) FROM A TABLE OF VALUES (0-15) AS
1026 / FOLLOWS:
1027
1028 / NN BAUD RATE
1029
1030 / 00 50
1031 / 01 75
1032 / 02 110
1033 / 03 134.5
1034 / 04 150
1035 / 05 300
1036 / 06 600
1037 / 07 1200
1038 / 08 1800
1039 / 09 2000
1040 / 10 2400
1041 / 11 3600
1042 / 12 4800
1043 / 13 7200
1044 / 14 9600
1045 / 15 19200
1046
1047 / SETTING ESCAPE= NNNN SETS THE DEFAULT ESCAPE CHARACTER TO NNNN.
1048
1049 / SETTING FLOW= 1 ENABLES FLOW-CONTROL BY DEFAULT.
1050 / SETTING FLOW= 0 DISABLES FLOW-CONTROL BY DEFAULT.
1051
1052 / SETTING FMODE= 0177 SETS THE DEFAULT FILE MODE TO ASCII.
1053 / SETTING FMODE= 4377 SETS THE DEFAULT FILE MODE TO BINARY.
1054 \f/ SETTING GENMSG= 0 CAUSES NO BINARY TO BE GENERATED WHERE 'LCLMSG' IS
1055 / DEFINED. THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR
1056 / SUBSEQUENT OVERLAY BY K12PCH.BN TO DEFINE THE LOCAL
1057 / HEADER MESSAGE. THIS PARAMETER SHOULD NOT BE SET
1058 / UNLESS ONE OF THESE METHODS IS USED, ELSE THE HEADER
1059 / MESSAGE WILL BE UNDEFINED. (NOTE: IF K12PCH.BN
1060 / GENERATES A HEADER MESSAGE, THEN THIS PARAMETER IS
1061 / UNIMPORTANT, AS K12PCH.BN OVERLAYS THE BINARY OF
1062 / K12MIT.)
1063 / SETTING GENMSG= 1 CAUSES A HEADER MESSAGE TO BE GENERATED. THE CONTENTS
1064 / OF THE MESSAGE ARE CREATED BY SETTING LEDERLE=1 OR
1065 / UMSG=1. IF EITHER IS ZERO, A DEFAULT (NULL) MESSAGE
1066 / WILL BE GENERATED.
1067
1068 / SETTING ICLOSE= 1 ENSURES A <^Z> AT <EOF> OF ASCII INPUT FILES BY
1069 / DEFAULT.
1070 / SETTING ICLOSE= 0 CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT.
1071
1072 / SETTING INIECHO=0 CAUSES A FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL
1073 / CHARACTER ECHOING BY DEFAULT.
1074 / SETTING INIECHO=1 CAUSES A HALF-DUPLEX CONNECT MODE STATE WITH LOCAL
1075 / ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT.
1076
1077 / SETTING LOWER= 0 ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT.
1078 / SETTING LOWER= -40 FOLDS LOWER-CASE CONSOLE OUTPUT TO UPPER-CASE BY
1079 / DEFAULT.
1080
1081 / SETTING OCLOSE= 0 PREVENTS DEFAULT SENDING OF <^Z> AT <EOF> OF ASCII
1082 / FILES.
1083 / SETTING OCLOSE= 1 CAUSES <^Z> TO BE SENT AT <EOF> OF ASCII FILES BY
1084 / DEFAULT.
1085
1086 / SETTING PORT= 0 CAUSES THE DP-278 PORT 0 TO BE USED IF KERMIT-12 IS
1087 / RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
1088 / SETTING PORT= 1 CAUSES THE DP-278 PORT 1 TO BE USED IF KERMIT-12 IS
1089 / RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
1090
1091 / SETTING RETCNT= NNNN SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT.
1092 / SETTING UMSG= 0 PREVENTS THE LOCAL USER HEADER MESSAGE FROM BEING
1093 / GENERATED.
1094 / SETTING UMSG= 1 CAUSES THE LOCAL USER HEADER MESSAGE TO BE GENERATED.
1095 / THE PARAMETER GENMSG=1 IS REQUIRED TO BE SET. THE
1096 / SOURCE MUST BE MODIFIED LOCALLY TO CHANGE THE MESSAGE
1097 / TEXT FROM "INSERT LOCAL USER MESSAGE HERE!," AS THIS
1098 / IS THE DEFAULT CONTENTS.
1099 \f/ KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES.
1100
1101 / BRIEF USAGE DESCRIPTION.
1102
1103 / KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT
1104 / DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE.
1105
1106 / AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE:
1107
1108 / 1. CONNECT (TO REMOTE SYSTEM AS TERMINAL).
1109
1110 / 2. SEND FILESPEC (TO REMOTE RECEIVER OR SERVER).
1111
1112 / 3. RECEIVE FILESPEC (FROM REMOTE SENDER).
1113
1114 / 4. GET FILESPEC (FROM REMOTE SERVER).
1115
1116 / 5. FINISH (SERVING).
1117
1118 / 6. SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED ****
1119
1120 / 7. EXIT (TO OPERATING SYSTEM).
1121
1122 / 8. HELP (DISPLAYS HELP MESSAGE).
1123
1124 / FILESPEC MAY BE ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION,
1125 / WHERE THE FILENAME AND EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2
1126 / ALPHANUMERICS RESPECTIVELY, AS NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME
1127 / FORMAT). THE DEVICE: FIELD IS OPTIONAL; ALL COMMANDS USING THE DEVICE:
1128 / FIELD FOR LOCAL DEVICE SPECIFICATION WILL USE THIS DEVICE AS THE SOURCE OR
1129 / DESTINATION AS NECESSARY FOR THE LOCAL FILES. IF THE DEVICE: FIELD IS
1130 / OMITTED, THE DEFAULT DEVICE DSK: WILL BE USED. THE ACTUAL DEVICE USED MAY BE
1131 / SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND:
1132
1133 / .ASSIGN DEV DSK
1134
1135 / WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE.
1136
1137 / KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT: THE ACTUAL DEFAULT PROMPT
1138 / TEXT IS PARTIALLY TAKEN FROM THE ACTUAL MACHINE KERMIT-12 IS CURRENTLY
1139 / EXECUTING ON. FOR EXAMPLE, IF KERMIT-12 HAS DETERMINED THE CPU TYPE AS
1140 / PDP-8/E, THE PROMPT WILL BE:
1141
1142 / KERMIT-8/E>
1143
1144 / THIS ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH
1145 / MESSAGES ORIGINATING FROM THE RESPECTIVE SYSTEMS. FUTURE VERSIONS WILL
1146 / SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES.
1147
1148 / THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE
1149 / ESCAPE CHARACTER.
1150 \f/ COMMAND RESTRICTIONS.
1151
1152 / THE SEND COMMAND ALLOWS DEVICE:FILENAME.EXTENSION (6.2) WITH WILD-CARD
1153 / SUBSTITUTION. A * MAY BE GIVEN FOR AN ENTIRE FIELD (EITHER FILENAME OR
1154 / EXTENSION OR BOTH) ONLY. A ? WILL MATCH ANY SINGLE CHARACTER WHICH MUST
1155 / EXIST IN THE ACTUAL FILENAME OR EXTENSION, UNLESS RIGHT-MOST IN THE FIELD.
1156 / ALL MATCHING FILES WILL BE SENT. NO OUTBOUND FILENAME (AS-NAME) FACILITY
1157 / EXISTS AT THIS TIME.
1158
1159 / THE RECEIVE COMMAND ALLOWS OPTIONAL DEVICE: ONLY. *THE FILENAME AND
1160 / EXTENSION ARE NOT ALLOWED*. NAMES OF RECEIVED FILES WILL BE MODIFIED IF
1161 / NECESSARY TO CONFORM TO THE 6.2 FORMAT. *IMPLEMENTATION RESTRICTION* :
1162 / CERTAIN REMOTE FILENAMES CONTAINING NON-ALPHANUMERIC CHARACTERS MAY CAUSE
1163 / KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL.
1164
1165 / THE GET COMMAND ALLOWS OPTIONAL DEVICE: TO DETERMINE DESTINATION OF THE
1166 / INCOMING FILES. THE OUTBOUND FILESPEC MUST CONFORM TO LOCAL CONVENTIONS
1167 / (FILENAME AND EXTENSION ARE NOT LIMITED TO 6.2 FORMAT; THE DEVICE: FIELD
1168 / WILL NOT BE SENT TO THE REMOTE KERMIT UNLESS IT IS ILLEGAL WITHIN OS/8
1169 / SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS. IN THIS CASE, THE DEFAULT
1170 / DEVICE DSK: APPLIES, AND THE ENTIRE "DEVICE" FIELD IS SENT ALONG WITH ANY
1171 / FILENAME AND EXTENSION). CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE WITH THIS
1172 / IMPLEMENTATION, AS IMBEDDED SPACES OR NON-ALPHANUMERIC CHARACTERS ARE NOT
1173 / ALLOWED, EVEN THOUGH THEY MAY BE REQUIRED ON THE REMOTE SYSTEM. WILD-CARD
1174 / CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE.
1175
1176 / <^X> OR <^Z> CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT IS
1177 / NORMALLY A SLOW PROCESS, SINCE THE CHECKING IS DONE BY A SOFTWARE TIMEOUT
1178 / SCHEME. AT THE PRESENT TIME, THERE IS NO DISTINCTION BETWEEN THESE THO
1179 / CHARACTERS, SO IT IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF
1180 / FILES INVOLVED IN THE TRANSFER IS ABORTED.
1181
1182 / DECMATE II/III/III-PLUS CONSIDERATIONS:
1183
1184 / FUNCTION KEYS SEND <ESC> SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE. ALL SOFT
1185 / FUNCTION KEYS ARE THEREFORE INEFFECTIVE (EXCEPT FOR HOLD SCREEN WHICH ALWAYS
1186 / WORKS).
1187
1188 / CONNECT MODE RUNS IN 8-BIT MODE.
1189
1190 / THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE.
1191
1192 / ANY VALID DECMATE II/III/III-PLUS CHARACTER SET IS ALLOWED WHILE IN CONNECT
1193 / MODE (MCS TCS LINE, ETC.). ALL <ESC> SEQUENCES ARE PASSED TO THE
1194 / SLUSHWARE/FIRMWARE UNMODIFIED.
1195
1196 / KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM
1197 / CONNECT MODE.
1198 \f/ DEFINITIONS. /017 CJL
1199
1200 *200 /FOR DEFINITIONS /047 CJL
1201
1202 / REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY. /046 CJL
1203
1204 IFNDEF DEV30 <DEV30= 0> /USE DEVICE 30/31 VALUES
1205 IFNDEF DEV40 <DEV40= 0> /USE DEVICE 40/41 VALUES
1206 IFNDEF LEDERLE <LEDERLE=0> /USE LEDERLE LABS VALUES
1207 IFNDEF ORIGNAL <ORIGNAL=0> /USE ORIGINAL VALUES
1208 IFNDEF SPRINT <SPRINT=0> /USE DEVICE 32/33 VALUES
1209 IFNDEF USER <USER= 0> /USE USER-DEFINED VALUES
1210
1211 REMOTE= DEV30+DEV40+LEDERLE+ORIGNAL /SET REMOTE LINE IOT CODE
1212 REMOTE= REMOTE+SPRINT+USER /SET REMOTE LINE IOT CODE
1213
1214 IFZERO REMOTE <DEV40= 1> /DEFAULT TO DEVICE 40/41 VERSION
1215
1216 / DEV30 PARAMETERS.
1217
1218 IFNZRO DEV30 <
1219
1220 IFNDEF REC <REC= 30> /DEVICE 30 INPUT
1221 IFNDEF SEN <SEN= 31> /DEVICE 31 OUTPUT
1222
1223 >
1224
1225 / DEV40 PARAMETERS (DEFAULT).
1226
1227 IFNZRO DEV40 <
1228
1229 IFNDEF REC <REC= 40> /DEVICE 40 INPUT
1230 IFNDEF SEN <SEN= 41> /DEVICE 41 OUTPUT
1231
1232 >
1233
1234 / LEDERLE PARAMETERS. /038 CJL
1235
1236 IFNZRO LEDERLE <
1237
1238 IFNDEF REC <REC= 43> /DEVICE 43 INPUT
1239 IFNDEF SEN <SEN= 44> /DEVICE 44 OUTPUT
1240 IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE
1241 IFNDEF UMSG <UMSG= 0> /DON'T GENERATE USER MESSAGE
1242
1243 >
1244
1245 / ORIGNAL PARAMETERS.
1246
1247 IFNZRO ORIGNAL <
1248
1249 IFNDEF REC <REC= 33> /DEVICE 33 INPUT
1250 IFNDEF SEN <SEN= 34> /DEVICE 34 OUTPUT
1251
1252 >
1253 \f/ SPRINT PARAMETERS. /046 CJL
1254
1255 IFNZRO SPRINT <
1256
1257 IFNDEF REC <REC= 32> /DEVICE 32 INPUT
1258 IFNDEF SEN <SEN= 33> /DEVICE 33 OUTPUT
1259
1260 >
1261
1262 / USER PARAMETERS.
1263
1264 IFNZRO USER <
1265
1266 IFNDEF XX <XX= 40> /DEFAULT TO DEVICE 40
1267 IFNDEF XY <XY= 41> /DEFAULT TO DEVICE 41
1268 IFNDEF REC <REC= XX> /DEVICE XX INPUT
1269 IFNDEF SEN <SEN= XY> /DEVICE XY OUTPUT
1270 IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE
1271 IFNDEF UMSG <UMSG= 1> /GENERATE USER MESSAGE
1272
1273 >
1274
1275 / REMOTE LINE IOT DEFINITIONS.
1276
1277 / RECEIVE DEFINITIONS.
1278
1279 RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG
1280 RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG
1281
1282 / TRANSMIT DEFINITIONS.
1283
1284 RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11]
1285 RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG
1286 RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG
1287
1288 / CONSOLE TTY: DEFINITIONS. /017 CJL
1289
1290 / KEYBOARD DEFINITIONS. /017 CJL
1291
1292 IFNDEF KEY <KEY= 03> /KEYBOARD DEVICE CODE
1293
1294 KCCIOT= KEY^10+6002 /CLEAR CONSOLE KEYBOARD FLAG, AC
1295 KRBIOT= KEY^10+6006 /READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG
1296 KRSIOT= KEY^10+6004 /READ CONSOLE KEYBOARD BUFFER STATIC
1297 KSFIOT= KEY^10+6001 /SKIP ON CONSOLE KEYBOARD FLAG
1298
1299 / TELEPRINTER DEFINITIONS. /017 CJL
1300
1301 IFNDEF TTY <TTY= 04> /TELEPRINTER DEVICE CODE
1302
1303 TLSIOT= TTY^10+6006 /PRINT CHARACTER, CLEAR FLAG
1304 TSFIOT= TTY^10+6001 /SKIP ON TELEPRINTER FLAG
1305 \f/ DEFAULT ESCAPE CHARACTER DEFINITION. /025 CJL
1306
1307 IFNDEF ESCAPE <ESCAPE="]&37> /DEFAULT IS CONTROL-]
1308
1309 / DEFAULT LOWER-CASE ENABLE DEFINITION. /030 CJL
1310
1311 IFNDEF LOWER <LOWER= 0/-40> /LOWER-CASE IS ALLOWED AS IS
1312 /CHANGE TO -40 IF LOWER-CASE
1313 /SHOULD BE FOLDED TO UPPER-CASE
1314
1315 / DEFAULT RETRY COUNT DEFINITION. /031 CJL
1316
1317 IFNDEF RETCNT <RETCNT=5> /DEFAULT IS FIVE RETRIES
1318
1319 / DEFAULT FILE MODE DEFINITION. /031 CJL
1320
1321 IFNDEF FMODE <FMODE= 4377> /DEFAULT IS ASCII FILE MODE
1322 /4377 IS BINARY FILE MODE
1323
1324 / DEFAULT FLOW-CONTROL MODE DEFINITION. /031 CJL
1325
1326 IFNDEF FLOW <FLOW= 1> /DEFAULT IS FLOW-CONTROL ENABLED
1327
1328 / DEFAULT ASCII INPUT FILE <^Z> DISPOSITION. /031 CJL
1329
1330 IFNDEF ICLOSE <ICLOSE=1> /ENSURE <^Z> AT ASCII <EOF>
1331
1332 / DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION. /031 CJL
1333
1334 IFNDEF OCLOSE <OCLOSE=0> /<^Z> NOT SENT AT ASCII <EOF>
1335
1336 / DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS. /038 CJL
1337
1338 IFNDEF GENMSG <GENMSG=1> /DEFAULT IS TO GENERATE A MESSAGE
1339 IFNDEF UMSG <UMSG= 0> /DEFAULT IS NO DUMMY USER MESSAGE
1340 IFNDEF LEDERLE <LEDERLE=0> /DEFAULT IS NO LEDERLE MESSAGE
1341
1342 / THE NULL MESSAGE WILL BE GENERATED BY DEFAULT.
1343
1344 / ECHO DEFINITION. /039 CJL
1345
1346 IFNDEF INIECHO <INIECHO=0> /DEFAULT IS NO LOCAL ECHO
1347
1348 / DEFAULT DECMATE I PORT DEFINITION. /050 CJL
1349
1350 IFNDEF PORT <PORT= 0> /DEFAULT IS PORT ZERO
1351
1352 / DEFAULT BAUD RATE DEFINITION. /050 CJL
1353
1354 IFNDEF BRATE <BRATE= 7> /DEFAULT IS 1200 BAUD
1355 \f/ STATE DEFINITIONS.
1356
1357 STDAT= "D&137 /DATA
1358 STACK= "Y&137 /ACK
1359 STNAK= "N&137 /NAK
1360 STSIN= "S&137 /SEND-INIT
1361 STBRK= "B&137 /BREAK LINK
1362 STFIL= "F&137 /FILENAME HEADER
1363 STEOF= "Z&137 /END OF FILE OR REPLY
1364 STERR= "E&137 /ERROR PACKET
1365 STATT= "A&137 /FILE ATTRIBUTES
1366 STRIN= "R&137 /RECEIVE-INIT
1367 STEOT= "B&137 /BREAK TRANSMISSION
1368 STGEN= "G&137 /KERMIT GENERIC COMMAND
1369
1370 / DEFAULT INIT PARAMETERS.
1371
1372 DEFCK= "1&177 /DEFAULT 1 CHARACTER CHECKSUM /014 CJL
1373 DEFEOL= 15+40 /CR IS DEFAULT <EOL>
1374 DEFQCTL= "#&177 /"#" IS DEFAULT QCTL
1375
1376 / BUFFER DEFINITIONS. /014 CJL
1377
1378 DECIMAL /MAKE IT EASIER /014 CJL
1379
1380 DEFMAXL=94 /DEFAULT MAXIMUM PACKET SIZE
1381
1382 LINSIZ= 32 /KEYBOARD LINE BUFFER SIZE
1383
1384 OCTAL /BACK TO NORMAL /014 CJL
1385
1386 BUFSIZE=200 /128 CHARACTER RING BUFFERS /026 CJL
1387 /FOR NO-INTERRUPT CONNECT MODE
1388 \f/ CONTROL CHARACTER DEFINITIONS. /023 CJL
1389
1390 CNTRLA= "A&37 /<^A> DEFAULT MARK CHARACTER /023 CJL
1391 CNTRLB= "B&37 /<^B> /046 CJL
1392 CNTRLC= "C&37 /<^C> PROGRAM EXIT CHARACTER /023 CJL
1393 CNTRLD= "D&37 /<^D> /046 CJL
1394 CNTRLE= "E&37 /<^E> /046 CJL
1395 CNTRLF= "F&37 /<^F> /046 CJL
1396 CNTRLG= "G&37 /<^G> BELL CHARACTER /023 CJL
1397 CNTRLH= "H&37 /<^H> BACKSPACE CHARACTER /023 CJL
1398 CNTRLI= "I&37 /<^I> HORIZONTAL TAB CHARACTER /043 CJL
1399 CNTRLJ= "J&37 /<^J> LINEFEED CHARACTER /023 CJL
1400 CNTRLK= "K&37 /<^K> VERTICAL TAB CHARACTER /046 CJL
1401 CNTRLL= "L&37 /<^L> FORM FEED CHARACTER /046 CJL
1402 CNTRLM= "M&37 /<^M> CARRIAGE RETURN CHARACTER /023 CJL
1403 CNTRLN= "N&37 /<^N> /046 CJL
1404 CNTRLO= "O&37 /<^O> ECHO FLIP CHARACTER /023 CJL
1405 CNTRLP= "P&37 /<^P> PROGRAM RESTART CHARACTER /023 CJL
1406 CNTRLQ= "Q&37 /<^Q> OUTPUT RESUME CHARACTER /023 CJL
1407 CNTRLR= "R&37 /<^R> /046 CJL
1408 CNTRLS= "S&37 /<^S> OUTPUT WAIT CHARACTER /023 CJL
1409 CNTRLT= "T&37 /<^T> /046 CJL
1410 CNTRLU= "U&37 /<^U> /046 CJL
1411 CNTRLV= "V&37 /<^V> /046 CJL
1412 CNTRLW= "W&37 /<^W> /046 CJL
1413 CNTRLX= "X&37 /<^X> FILE ABORT CHARACTER /044 CJL
1414 CNTRLY= "Y&37 /<^Y> /046 CJL
1415 CNTRLZ= "Z&37 /<^Z> ABORT AND <EOF> CHARACTER /044 CJL
1416 DELETE= 177 /<DEL> DELETE OR <RO> CHARACTER /034 CJL
1417 LOWERC= "C&177+40 /LOWER-CASE C (CLOSE CHARACTER) /025 CJL
1418 UPPERC= "C&177 /UPPER-CASE C (CLOSE CHARACTER) /025 CJL
1419
1420 / I/O AND FIELD DEFINITIONS. /019 CJL
1421
1422 BUFFLD= 10 /I/O BUFFER FIELD /019 CJL
1423 DIRFLD= 10 /DIRECTORY LOOKUP BUFFER FIELD /028 CJL
1424 DMIFLD= 10 /DECMATE ONCE-ONLY CODE FIELD /046 CJL
1425 MSGFLD= 10 /TEXT MESSAGE FIELD /023 CJL
1426 PAGCNT= 2 /I/O BUFFER SIZE IN PAGES /019 CJL
1427 PRGFLD= 00 /PROGRAM FIELD /019 CJL
1428 USRFLD= 10 /USR FIELD /020 CJL
1429
1430 / OS/8 MONITOR DEFINITIONS. /014 CJL
1431
1432 SBOOT= 7600 /MONITOR EXIT LOCATION IS 07600 /014 CJL
1433 USR= 7700 /NON-LOCKED USR ENTRY POINT /035 CJL
1434 \f/ USER SERVICE ROUTINE AND HANDLER DEFINITIONS. /020 CJL
1435
1436 CLOSE= 4 /CLOSE TENTATIVE OUTPUT FILE /020 CJL
1437 ENTER= 3 /ENTER TENTATIVE OUTPUT FILE /020 CJL
1438 FETCH= 1 /FETCH HANDLER /020 CJL
1439 INQUIRE=12 /INQUIRE ABOUT HANDLER /020 CJL
1440 LOOKUP= 2 /LOOKUP FILE /020 CJL
1441 RESET= 13 /RESET DEVICE CONTROL WORD TABLE/037 CJL
1442 USRIN= 10 /LOCK USR IN CORE /020 CJL
1443 WRITE= 4000 /I/O CALL WRITE BIT /020 CJL
1444
1445 / INSTRUCTION DEFINITIONS.
1446
1447 CLCL= 6136 /CLEAR CLOCK FLAG (8/A, ETC.) /046 CJL
1448 CLSK= 6131 /SKIP ON, CLEAR CLOCK FLAG /046 CJL
1449 CLSK8A= 6137 /SKIP ON CLOCK FLAG (8/A, ETC.) /046 CJL
1450 COM= 0017 /COMPLEMENT AC
1451 DCAC= DCA . /CURRENT PAGE DCA INSTRUCTION /047 CJL
1452 IAAC= 6171 /"A" REGISTER TO AC
1453 IACA= 6167 /AC TO "A" REGISTER
1454 ISZC= ISZ . /CURRENT PAGE ISZ INSTRUCTION /050 CJL
1455 JMPC= JMP . /CURRENT PAGE JMP INSTRUCTION /047 CJL
1456 JMPIC= JMP I . /CURRENT PAGE JMP I INSTRUCTION /047 CJL
1457 JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION /047 CJL
1458 JMSIC= JMS I . /CURRENT PAGE JMS I INSTRUCTION /047 CJL
1459 LINC= 6141 /GOTO LINC MODE
1460 PDP= 0002 /GOTO PDP-8 MODE
1461 PRQ3= 6236 /TYPE THREE PANEL REQUEST /046 CJL
1462 TADC= TAD . /CURRENT PAGE TAD INSTRUCTION /047 CJL
1463 R3L= 7014 /ROTATE AC (NOT LINK) LEFT 3 /046 CJL
1464
1465 / NUMERIC LOAD DEFINITIONS. /014 CJL
1466
1467 NL0000= CLA /LOAD AC WITH 0000 /046 CJL
1468 NL0001= CLA IAC /LOAD AC WITH 0001 /014 CJL
1469 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 /014 CJL
1470 NL0003= CLA STL IAC RAL /LOAD AC WITH 0003 (8/I ON UP) /046 CJL
1471 NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 (8/I ON UP) /046 CJL
1472 NL0006= CLA STL IAC RTL /LOAD AC WITH 0006 (8/I ON UP) /046 CJL
1473 NL0010= CLA IAC RAL RAR /LOAD AC WITH 0010 (6120) /024 CJL
1474 NL0100= CLA IAC BSW /LOAD AC WITH 0100 (8/E ON UP) /024 CJL
1475 NL3776= CLA CLL CMA RAR RAL /LOAD AC WITH 3776 (8/I OR 8/L) /024 CJL
1476 NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 /046 CJL
1477 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 /014 CJL
1478 NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 /046 CJL
1479 NL6000= CLA STL IAC RTR /LOAD AC WITH 6000 (8/I ON UP) /046 CJL
1480 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 /014 CJL
1481 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 /014 CJL
1482 NL7777= CLA CMA /LOAD AC WITH 7777 /014 CJL
1483 \f/ DECMATE I COMMUNICATIONS PORT DEFINITIONS. /050 CJL
1484
1485 IPORT0= 30 /COMMUNICATIONS PORT 0 INPUT DEVICE CODE
1486
1487 RKFL0= IPORT0^10+6000 /SET COMMUNICATIONS PORT 0 INPUT FLAG
1488 RKSF0= IPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG
1489 RKCC0= IPORT0^10+6002 /CLEAR AC
1490 RKIE0= IPORT0^10+6005 /PORT 0 INPUT INTERRUPT ENABLE PER AC[11]
1491 RKRB0= IPORT0^10+6006 /READ COMMUNICATIONS PORT 0 INTO AC
1492
1493 OPORT0= 31 /COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE
1494
1495 RTFL0= OPORT0^10+6000 /SET COMMUNICATIONS PORT 0 OUTPUT FLAG
1496 RTSF0= OPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG
1497 RTCF0= OPORT0^10+6002 /NOP
1498 RTIE0= OPORT0^10+6005 /PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11]
1499 RTLS0= OPORT0^10+6006 /WRITE COMMUNICATIONS PORT 0 FROM AC
1500
1501 IPORT1= 34 /COMMUNICATIONS PORT 1 INPUT DEVICE CODE
1502
1503 RKFL1= IPORT1^10+6000 /SET COMMUNICATIONS PORT 1 INPUT FLAG
1504 RKSF1= IPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG
1505 RKCC1= IPORT1^10+6002 /CLEAR AC
1506 RKIE1= IPORT1^10+6005 /PORT 1 INPUT INTERRUPT ENABLE PER AC[11]
1507 RKRB1= IPORT1^10+6006 /READ COMMUNICATIONS PORT 1 INTO AC
1508
1509 OPORT1= 35 /COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE
1510
1511 RTFL1= OPORT1^10+6000 /SET COMMUNICATIONS PORT 1 OUTPUT FLAG
1512 RTSF1= OPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG
1513 RTCF1= OPORT1^10+6002 /NOP
1514 RTIE1= OPORT1^10+6005 /PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11]
1515 RTLS1= OPORT1^10+6006 /WRITE COMMUNICATIONS PORT 1 FROM AC
1516
1517 PCON= 36 /PORT STATUS AND CONTROL DEVICE CODE
1518
1519 SMFL= PCON^10+6000 /SET MODEM CHANGE FLAG
1520 MFSK= PCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG
1521 WCON0= PCON^10+6002 /WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER
1522 PSR= PCON^10+6003 /READ PORT STATUS REGISTER
1523 PMR= PCON^10+6004 /READ PORT MODEM REGISTER
1524 MFIE= PCON^10+6005 /LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11]
1525 WCON1= PCON^10+6006 /WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER
1526 RACD= PCON^10+6007 /RESET ACTIVE COMMUNICATIONS PORT PER AC[0]
1527 \f/ DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS. /046 CJL
1528
1529 PORTIN= 30 /COMMUNICATIONS PORT INPUT DEVICE CODE
1530
1531 IFL= PORTIN^10+6000 /SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG
1532 ISF= PORTIN^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG
1533 ICF= PORTIN^10+6002 /NOP (CLEAR THE AC?)
1534 INOP1= PORTIN^10+6003 /(NOP?)
1535 IRS= PORTIN^10+6004 /READ COMMUNICATIONS PORT RECEIVE BUFFER
1536 IIE= PORTIN^10+6005 /COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11]
1537 IRB= PORTIN^10+6006 /READ COMMUNICATIONS PORT RECEIVE BUFFER
1538 INOP2= PORTIN^10+6007 /(NOP?)
1539
1540 PORTOUT=31 /COMMUNICATIONS PORT OUTPUT DEVICE CODE
1541
1542 DUMBFL= PORTOUT^10+6000 /SET COMMUNICATIONS PORT DUMMY FLAG
1543 DUMBSF= PORTOUT^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG
1544 DUMBCF= PORTOUT^10+6002 /NOP (CLEAR THE AC?)
1545 ONOP1= PORTOUT^10+6003 /(NOP?)
1546 OPC= PORTOUT^10+6004 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
1547 DUMBIE= PORTOUT^10+6005 /COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11]
1548 OLS= PORTOUT^10+6006 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
1549 ONOP2= PORTOUT^10+6007 /(NOP?)
1550
1551 PORTCON=36 /COMMUNICATIONS PORT CONTROL DEVICE CODE
1552
1553 MFL= PORTCON^10+6000 /SET MODEM CHANGE FLAG
1554 MSF= PORTCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG
1555 MLC= PORTCON^10+6002 /LOAD MODEM CONTROL REGISTER
1556 MSB= PORTCON^10+6003 /LOAD BAUD RATE REGISTER
1557 MRS= PORTCON^10+6004 /READ MODEM STATUS REGISTER
1558 MIE= PORTCON^10+6005 /MODEM CHANGE INTERRUPT ENABLE PER AC[11]
1559 MPSCC= PORTCON^10+6006 /ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
1560 MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
1561 \f/ MISCELLANEOUS DEFINITIONS. /014 CJL
1562
1563 / STATIC DATE CALCULATIONS. /024 CJL
1564
1565 / THESE EQUATIONS CAUSE PRINTABLE TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN
1566 / IN OS/8 INTERNAL FORMAT. PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION,
1567 / REVISION, REVDATE, AND REVDGRP. REVDATE AND REVDGRP SHOULD BE OBTAINED FROM
1568 / THE SYSTEM WHEN RELEASING A NEW VERSION AFTER FIRST CORRECTLY INVOKING THE
1569 / SYSTEM DATE COMMAND.
1570
1571 / VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)]
1572
1573 / REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77]
1574
1575 / REVDATE=[THE CONTENTS OF 17666 (DATE WORD)]
1576
1577 / REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)]
1578
1579
1580
1581 IFNDEF REVDATE <REVDATE=4464> /REVISION DATE (LOCATION 17666)
1582
1583 IFNDEF REVDGRP <REVDGRP=0400> /REVISION 8 YEAR DATE GROUP (LOCATION 07777)
1584
1585 IFNDEF REVISIO <REVISIO="G&77> /REVISION OF KERMIT-12
1586
1587 IFNDEF VERSION <VERSION=12> /VERSION OF KERMIT-12
1588
1589
1590 DAY= REVDATE&370%10 /REVISION DAY
1591
1592 DGROUP= REVDGRP&600%20 /REVISION DATE GROUP (WHICH 8 YEARS)
1593
1594 MONTH= REVDATE&7400%400 /REVISION MONTH
1595
1596 YEAR= REVDATE&7+DGROUP+106 /REVISION YEAR (SINCE 1900)
1597 \f FIELD PRGFLD%10 /STARTING FIELD /038 CJL
1598
1599 *0 /START AT THE BEGINNING /014 CJL
1600
1601 INTPC, .-. /PC FROM INTERRUPT (IF ANY) /014 CJL
1602 JMP I INTPC /RETURN WITH INTERRUPTS OFF /014 CJL
1603
1604 ABFLAG, .-. /FILE ABORT FLAG /044 CJL
1605 TABLEJU,.-. /MATCHING VALUE FOR SRCHTABLE ROUTINE /025 CJL
1606
1607 IFNZRO .-4 <ERROR .> /014 CJL
1608 ODT, ZBLOCK 7-. /RESERVED FOR OS/8 ODT /014 CJL
1609 RATE, BRATE /BAUD RATE /050 CJL
1610
1611 *10 /GET TO AUTO-INDEX AREA /014 CJL
1612
1613 XR0, .-. /AUTO-INDEX ZERO /014 CJL
1614 XR1, .-. /AUTO-INDEX ONE /014 CJL
1615 DIRXR, PORT /DIRECTORY LOOKUP DEDICATED AUTO-INDEX /028 CJL
1616 /INITIALIZED FOR DECMATE I ONCE-ONLY /050 CJL
1617
1618 / THE REMAINING LOCATIONS THROUGH 000017 MUST BE USED DIRECTLY ONLY, SO AS TO
1619 / NOT CAUSE INADVERTANT AUTO-INDEXING.
1620
1621 / COLUMN COUNTER FOR CONSOLE ROUTINES (NEVER USED INDIRECTLY). /043 CJL
1622
1623 COLUMN, .-. /CONSOLE OUTPUT COLUMN COUNTER /043 CJL
1624
1625 / CONSOLE TERMINAL ECHO SWITCH (NEVER USED INDIRECTLY). /020 CJL
1626
1627 ECHOSW, 0 /0=ECHO, 4000=DON'T ECHO /020 CJL
1628
1629 / LATEST (NON-CONNECT MODE) CHARACTER (NEVER USED INDIRECTLY). /043 CJL
1630
1631 INCHAR, .-. /LATEST INPUT CHARACTER FROM CONSOLE /043 CJL
1632
1633 / CURRENT KERMIT MODE (NEVER USED INDIRECTLY). /025 CJL
1634
1635 KMODE, .-. /CURRENT MODE OF KERMIT /025 CJL
1636
1637 / KERMIT MODE FLAG VALUES. /014 CJL
1638
1639 / MLINE= 1 /KERMIT IS ON-LINE
1640 MSEND= 2 /KERMIT IS IN SEND MODE
1641 MREC= 3 /KERMIT IS IN RECEIVE MODE
1642
1643 / LATEST CHARACTER SENT TO OUTPUT FILE (NEVER USED INDIRECTLY). /020 CJL
1644
1645 LATEST, .-. /LATEST CHARACTER SENT TO OUTPUT FILE /020 CJL
1646 \f *20 /GET PAST AUTO-INDEX AREA
1647
1648 INFLAG, .-. /DECMATE INPUT AVAILABLE FLAG /046 CJL
1649 OUTFLAG,.-. /DECMATE OUTPUT AVAILABLE FLAG /046 CJL
1650 TEMP, 0
1651 RCHAR, 0 /REMOTE LINE CURRENT INPUT CHAR
1652 SCAN1, 0 /
1653 SCAN2, 0 /
1654 KEYDSP, 0 /DISPATCH ADDRESS FOR KEYWORD MATCH
1655 BININP, 0 /BINARY REGISTER FOR DECIMAL INPUT
1656 PTABLE, 0 /
1657 LPTR, 0 /HOLDS LINE POINTER
1658 STATE, 0 /CURRENT STATE
1659 RETRY, -RETCNT /PACKET ERROR RETRY COUNTER /031 CJL
1660 RTRYC, 0 /USE THIS FOR ACTUAL COUNTER
1661
1662 / CURRENT PACKET I/O DATA. /014 CJL
1663
1664 PAKPTR, 0 /POINTER TO OUTPUT PACKET POINTER
1665 PAKCKS, 0 /HOLDS CURRENT OUTPUT PACKET CHECKSUM TOTAL
1666 CURSEQ, 0 /CURRENT SEQ NUMBER
1667 QFLAG, 0 /NON-ZERO WHEN NO CONTROL QUOTING
1668
1669 / RECEIVE "INIT" REGISTERS. /014 CJL
1670
1671 RMAXL, DEFMAXL+40 /MAX LENGTH FOR DATA PACKET (DEFAULT)
1672 RTIME, 0 /TIME-OUT VALUE
1673 RNPAD, 0 /NUMBER OF PADDING CHARS
1674 RPADC, 0 /CHAR USED FOR PADDING
1675 REOL, DEFEOL /TERMINATOR CHAR USED FOR END OF PACKET
1676 RQCTL, DEFQCTL /CONTROL CHAR PREFIX CHAR
1677 RQBIN, 0 /PARITY CHAR PREFIX CHAR (CHARS GT 177)
1678 RCHKT, DEFCK /CHECKSUM TYPE (DEFAULT TYPE 1)
1679 RREPT, 0 /PREFIX CHAR FOR REPEATED CHARS
1680 RCAPAS, 0 /EXTRA CAPABILITY BIT MASK
1681
1682 / ZBLOCK 4 /RESERVED FOR EXTRA CAPABILITIES /022 CJL
1683
1684 INITEND=. /END OF INIT REGISTERS /022 CJL
1685
1686 HNDADR, 0 /FILE DEVICE HANDLER ADDRESS
1687 FORCEP, 0 /FLAG FOR FORCED OUTPUT OF PACKET WHEN THERE IS
1688 / NO DATA (JUST SOH, LEN, SEQ, AND CHECKSUM)
1689 PRSERR, 0 /HOLDS PARSE POSITION FOR REPORTING ERRORS
1690 PACK6P, 0 /POINTER TO STORAGE OF 6 BIT CHARS
1691 PACK6F, 0 /FLAG FOR WHICH BYTE TO STORE
1692 GET6P, 0 /POINTER USED IN THE GET6 ROUTINE
1693 GET6F, 0 /FLAG USED IN THE GET6 ROUTINE
1694 MOVE4, 0 /COUNTER FOR "MOVE"
1695 INIFLG, 0 /INIT DONE FLAG
1696 MQ, .-. /"MQ" TEMPORARY REGISTER /032 CJL
1697 \f/ FILE NAME PARSE REGISTERS. /014 CJL
1698
1699 FNPTR, 0 /POINTER TO WHERE TO PUT A PARSED FILE NAME
1700 WILDF, 0 /WILD CARD IN FILE NAME FLAG
1701
1702 / FILE INFORMATION. /014 CJL
1703
1704 FSBLK, 0 /FILE START BLOCK
1705 FLEN, 0 /FILE LENGTH
1706 DEVNUM, 0 /PARSED DEVICE NUMBER HERE
1707 OFFLG, 0 /OUTPUT FILE OPEN FLAG
1708 ODNAME, 0 /POINTER TO USER SPECIFIED DEVICE FOR OUTPUT
1709 ODNUMB, 0 /OUTPUT DEVICE NUMBER
1710
1711 / PARITY VARIABLES. /014 CJL
1712
1713 /MARK, 0200 /SET BIT [8] FOR COMMAND INPUTS /A013
1714 /PARITY,0 /PARITY MASK (0=SPACE, 200=MARK) /AM013
1715
1716 / INTERNAL FILE MODE FLAG. /019 CJL
1717
1718 FILMODE,FMODE /ASCII=0177, BINARY=4377 /019 CJL
1719
1720 / UPPER-CASE ONLY FLAG. /023 CJL
1721
1722 UPONLY, LOWER /0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL
1723
1724 / <^C> DISPATCH ADDRESS. /023 CJL
1725
1726 UCADDRE,SBOOT /<^C> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL
1727
1728 / <^P> DISPATCH ADDRESS. /023 CJL
1729
1730 UPADDRE,CHKCLR /<^P> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL
1731
1732 / ESCAPE CHARACTER FOR CONNECT MODE. /025 CJL
1733
1734 ESCHAR, ESCAPE /ESCAPE CHARACTER FOR CONNECT MODE /025 CJL
1735
1736 / FLOW CONTROL FLAG. /026 CJL
1737
1738 FLOWFLA,-FLOW /0=NO FLOW CONTROL, 7777=FLOW CONTROL /049 CJL
1739 /VIA <^S>/<^Q>
1740
1741 / KEYBOARD INPUT ERROR FLAG. /026 CJL
1742
1743 KEYERRO,.-. /0=NO ERROR, NON-ZERO=BAD CHARACTER /026 CJL
1744 /OR BUFFER OVERRUN
1745 \f/ REMOTE LINE INPUT ERROR FLAG. /026 CJL
1746
1747 RINERRO,.-. /0=NO ERROR, NON-ZERO=BAD CHARACTER /026 CJL
1748 /OR BUFFER OVERRUN
1749
1750 / REMOTE LINE OUTPUT FLOW CONTROL WAIT FLAG. /026 CJL
1751
1752 REMWAIT,.-. /0=DON'T WAIT, 4000=WAIT FOR <^Q> /026 CJL
1753
1754 / REMOTE INPUT WAIT FLAG. /026 CJL
1755
1756 / FLAG STATES:
1757
1758 / VALUE ACTION
1759
1760 / 0000 BUFFER IS LESS THAN 3/4 FULL. INPUT FREELY ALLOWED
1761 / WITHOUT FLOW CONTROL RESTRICTIONS. IF BUFFER BECOMES
1762 / 3/4 FULL AND FLOW CONTROL IS IN EFFECT THEN CHANGE
1763 / STATE TO 0001.
1764
1765 / 0001 BUFFER IS NOW 3/4 FULL. OUTPUT <^S> TO REMOTE AND
1766 / THEN CHANGE STATE TO 4000.
1767
1768 / 4000 WAITING FOR BUFFER TO EMPTY TO LESS THAN 1/4 FULL. IF
1769 / FLOW CONTROL IS BEING OBEYED, THEN BUFFER SHOULD NOW
1770 / BE EMPTYING.
1771
1772 / 7777 BUFFER IS NOW LESS THAN 1/4 FULL. OUTPUT <^Q> TO
1773 / REMOTE AND THEN CHANGE STATE TO 0000.
1774
1775 RINWAIT,.-. /REMOTE INPUT WAIT FLAG /026 CJL
1776
1777 / REMOTE LINE OUTPUT BUFFER POINTERS. /026 CJL
1778
1779 REMINSE,.-. /REMOTE OUTPUT INSERTION POINTER /026 CJL
1780 REMREMO,.-. /REMOTE OUTPUT REMOVAL POINTER /026 CJL
1781 \f/ POINTER FOR THE PACKET INPUT AND OUTPUT ROUTINES
1782
1783 SPACK= JMS I . /SEND A PACKET TO REMOTE
1784 SPACK0 /PUT IN A POINTER
1785
1786 FPACK= JMS I . /FORMAT PACKET
1787 FPACK0 /PUT IN THE POINTER
1788
1789 RPACK= JMS I . /RECEIVE A PACKET FROM REMOTE
1790 ILINK /PUT IN A POINTER
1791
1792 / POINTERS FOR OUTPUT ROUTINES
1793
1794 PRI8B= JMS I . /PRINT 8 BIT STRING ON TTY
1795 PRI8B0 /PUT IN THE POINTER
1796
1797 REM8B= JMS I . /SEND 8 BIT STRING DOWN REMOTE LINE
1798 REM8B0 /PUT IN THE POINTER
1799
1800 / MISC.
1801
1802 PACK6= JMS I . /DEFINE CALL TO ROUTINE
1803 PACK60 /POINTER TO ROUTINE
1804
1805 GET6= JMS I . /DEFINE THE INSTRUCTION
1806 GET60 /PUT IN THE POINTER
1807
1808 MOVE= JMS I . /DEFINE CALL TO MOVE ROUTINE
1809 MOVE0 /POINTER
1810
1811 CLEAR= JMS I . /DEFINE CALL FOR "CLEAR" ROUTINE
1812 CLEAR0 /POINTER
1813 \f PAGE /START ON NEW PAGE /A014 CJL
1814
1815 / KERMIT-12 PROGRAM STARTS HERE. /A014 CJL
1816
1817 CLOOP, JMP I (INITIALIZE) /**** INITIALIZED **** CLA CLL /024 CJL
1818 JMS I [CRESET] /RESET CONSOLE ROUTINE STUFF
1819 DCA ABFLAG /CLEAR ABORT FLAG /044 CJL
1820 DCA REMWAIT /CLEAR REMOTE FLOW CONTROL WAIT /049 CJL
1821 CLDMZAP,JMS DMINIT /INITIALIZE DECMATE PORT /048 CJL
1822
1823 / THE PREVIOUS INSTRUCTION IS FOR DECMATE OPERATION ONLY. THE DEFAULT
1824 / INSTRUCTION IS FOR KL8 INTERFACES ONLY.
1825
1826 *CLDMZAP /OVERLAY DECMATE CODE /048 CJL
1827
1828 CLDMZAP,NOP /DON'T INITIALIZE DECMATE PORT /048 CJL
1829 TAD RATE /GET BAUD RATE
1830 SETBAUD,MSB /SET REMOTE BAUD RATE /050 CJL
1831
1832 / THE PREVIOUS INSTRUCTION IS FOR DECMATE II OPERATION ONLY. /050 CJL
1833
1834 *SETBAUD /OVERLAY DECMATE II CODE /050 CJL
1835
1836 SETBAUD,NOP /NOT APPLICABLE ON DECMATE I /050 CJL
1837
1838 / THE PREVIOUS INSTRUCTION IS FOR DECMATE I OPERATION ONLY. THE DEFAULT
1839 / INSTRUCTION IS FOR KL8 INTERFACES ONLY.
1840
1841 *SETBAUD /OVERLAY DECMATE I CODE /050 CJL
1842
1843 SETBAUD,RSBIOT /SET REMOTE BAUD RATE /050 CJL
1844 JMS I [SCRIBE] /DO A /025 CJL
1845 CRLF /<CR>, <LF> /025 CJL
1846 JMS I [SCRIBE] /GIVE THEM THE /025 CJL
1847 / PRMTMSG /PROMPT MESSAGE /025 CJL
1848 PRMT2
1849 JMS I (LININP) /GET INPUT LINE FROM USER
1850 TAD (CMDTBL) /GET ADDRESS OF PARSE TABLE /M014 CJL
1851 DCA PTABLE /STORE FOR PARSER
1852 TAD (LINBUF) /GET INPUT LINE BUFFER ADDRESS /M014 CJL
1853
1854 CLOOP1, JMS I (KEYPRS) /PARSE OFF A KEYWORD
1855 JMP CLOOP9 /NO MATCH ON KEYWORD
1856 JMP CLOOP /END OF LINE DETECTED
1857 DCA LPTR /STORE POINTER TO NEXT POS ON LINE
1858 JMS I KEYDSP /DISPATCH TO SERVICE
1859 JMP CLOOP7 /ERROR RETURN FROM SERVICE DISPATCH
1860 TAD LPTR /RE-GET COMMAND LINE POINTER
1861 JMP CLOOP1 /CONTINUE LINE PARSE
1862
1863 CLOOP7, SNA /SKIP IF A RETURNING MESSAGE PASSED /029 CJL
1864 JMP CLOOP /JUST GO BACK TO COMMAND LOOP /029 CJL
1865 DCA RETARG /STORE IN-LINE /029 CJL
1866 JMS I [SCRIBE] /CALL MESSAGE PRINT ROUTINE
1867 RETARG, .-. /WILL BE PASSED MESSAGE ADDRESS
1868 JMP CLOOP /KEEP GOING
1869 \fCLOOP9, JMS I [SCRIBE] /COMPLAIN OF /025 CJL
1870 CMERMSG /BAD COMMAND /025 CJL
1871 JMP CLOOP /GO AGAIN
1872
1873 / ROUTINE TO FORMAT A PACKET OF DATA
1874 / CALL: FPACK
1875 / DATA ADDRESS (DATA MUST ALREADY BE CONTROL/QUOTED AND MUST
1876 / NOT BE LONGER THAN THE LARGEST PACKET)
1877 / PACKET TYPE
1878
1879 FPACK0, 0
1880 CLA CLL /INSURE CLEAR AC
1881 TAD I FPACK0 /GET THE DATA ADDRESS
1882 DCA FP1 /STORE IN SOURCE POINTER
1883 ISZ FPACK0 /BUMP ARGUMENT POINTER
1884 TAD I FPACK0 /NOW GET TYPE
1885 DCA I (RSTYP) /STORE
1886 ISZ FPACK0 /BUMP ARGUMENT POINTER
1887 TAD (RSDTA /GET ADDRESS OF DATA BUFFER
1888 DCA FP2 /STORE IN DESTINATION POINTER
1889
1890 TAD (40+3 /SET FOR LENGTH COUNTER
1891 DCA I (RSLEN) /STORE IN PACKET
1892 DCA FP3 /INIT CHECKSUM
1893 TAD CURSEQ /GET CURRENT SEQ NUMBER
1894 AND [77] /MODULO 64 /014/016 CJL
1895 TAD [40] /TAKE CHAR(SEQUENCE NUMBER) /014/016 CJL
1896 DCA I (RSSEQ) /PUT INTO PACKET
1897 FPACK2, TAD I FP1 /GET A CHAR FROM SOURCE
1898 SPA /SKIP IF NOT END
1899 JMP FPACK3 /END
1900 TAD FP3 /COMBINE WITH CHECKSUM
1901 DCA FP3 /AND RETURN
1902 TAD I FP1 /GET CHAR BACK AGAIN
1903 DCA I FP2 /NOW PUT INTO DESTINATION
1904 ISZ I (RSLEN) /BUMP THE LENGTH
1905 ISZ FP1 /BUMP THE SOURCE POINTER
1906 ISZ FP2 /BUMP THE DESTINATION POINTER
1907 JMP FPACK2 /LOOP
1908 \fFPACK3, CLA CLL /CLEAR THE AC
1909 TAD FP3 /GET CALCULATED CHECKSUM
1910 TAD I (RSLEN) /INCLUDE THE LENGTH
1911 TAD I (RSSEQ) /AND THE SEQUENCE
1912 TAD I (RSTYP) /AND THE TYPE
1913 JMS I [CKSUM] /GET IT CORRECT
1914 DCA I FP2 /STORE WITH PACKET
1915 ISZ FP2 /BUMP PACKET POINTER
1916 TAD REOL /GET ANY END OF LINE TO INCLUDE
1917 TAD [-40] /MAKE IT A REAL CHARACTER /014/016 CJL
1918 SNA /SKIP IF EOL CHAR REQUIRED
1919 JMP FPACK4 /NO EOL CHAR
1920 DCA I FP2 /STORE EOL CHAR WITH PACKET
1921 ISZ FP2 /BUMP POINTER
1922 FPACK4, NL7777 /SET -1 /032 CJL
1923 DCA I FP2 /PACKET NOW COMPLETE
1924 TAD RETRY /SET UP RE-TRY COUNTER
1925 DCA RTRYC
1926 ISZ CURSEQ /BUMP SEQUENCE NUMBER FOR NEXT TIME
1927 NOP /PROTECT ISZ
1928 JMP I FPACK0 /RETURN
1929
1930 FP1, 0 /POINTER TO SOURCE DATA
1931 FP2, 0 /POINTER TO PACKET BUFFER
1932 FP3, 0 /RUNNING CHECKSUM
1933
1934 / DECMATE INITIALIZE ROUTINE. /048 CJL
1935
1936 DMINIT, .-. /DECMATE PORT INITIALIZE ROUTINE/048 CJL
1937 DMI01, TAD DM234/(234) /GET SCD ENABLE VALUE /050 CJL
1938 DMI02, WCON0 /WRITE CONTROL REGISTER 0 (1) /050 CJL
1939 DMI03, NL0000 /INDICATE PORT 0 (1) /050 CJL
1940 DMI04, RACD /RESET THE ACTIVE PORT /050 CJL
1941 DMI05, ISZ DMWASTE /WASTE /050 CJL
1942 DMI06, JMP DMI05 /SOME TIME /050 CJL
1943 DMI07, ISZ DMWASTE /WASTE /050 CJL
1944 DMI08, JMP DMI07 /SOME TIME /050 CJL
1945 DMI09, RTFL0 /SET PORT 0 (1) OUTPUT FLAG /050 CJL
1946 DMI10, TAD DM2516/(2516) /SETUP FOR 8 BITS, NO PARITY /050 CJL
1947 DMI11, JMS DMSEND /SEND TO MODE REGISTER 1 /050 CJL
1948 DMI12, TAD RATE /GET BAUD RATE /050 CJL
1949 DMI13, TAD DM2460/(2460) /ADD ON CLOCK ENABLE VALUES /050 CJL
1950 DMI14, JMS DMSEND /SEND TO MODE REGISTER 2 /050 CJL
1951 DMI15, TAD DM3425/(3425) /GET ENABLE AND RESET VALUE /050 CJL
1952 DMI16, JMS DMSEND /SEND TO COMMAND REGISTER /050 CJL
1953 DMI17, RKRB0 /DO A DUMMY READ ON PORT 0 (1) /050 CJL
1954 \f/ THE PREVIOUS INSTRUCTIONS ARE FOR DECMATE I OPERATION ONLY. THE DEFAULT
1955 / INSTRUCTIONS ARE FOR DECMATE II, ETC. INTERFACES ONLY.
1956
1957 *DMI01 /OVERLAY DECMATE I CODE /050 CJL
1958
1959 DMI01, ISZ DMWASTE /WASTE /048 CJL
1960 DMI02, JMP DMI01 /SOME TIME /048 CJL
1961 DMI03, ISZ DMWASTE /WASTE /048 CJL
1962 DMI04, JMP DMI03 /SOME TIME /048 CJL
1963 DMI05, ISF /SKIP ON AND CLEAR PORT FLAG /048 CJL
1964 DM50, 50/NOP /JUST IN CASE /048 CJL
1965 DMI07, IRB /READ THE PORT BUFFER /048 CJL
1966 DMI08, CLA /CLEAN UP /048 CJL
1967 DMI09, TAD DM50/(50) /GET OUTPUT INTERRUPT VALUE /048 CJL
1968 DMI10, MPSCC /CLEAR OUTPUT INTERRUPT /048 CJL
1969 DMI11, TAD (60-50) /GET ERROR RESET VALUE /048 CJL
1970 DMI12, MPSCC /CLEAR OVERRUN ERRORS /048 CJL
1971 DMI13, TAD (70-60) /SET END OF INTERRUPT VALUE /048 CJL
1972 DMI14, MPSCC /CLEAR THE INTERRUPT /048 CJL
1973 DMI15, DCA OUTFLAG /INDICATE OUTPUT IS AVAILABLE /048 CJL
1974 DMI16, DCA INFLAG /CLEAR INPUT AVAILABLE FLAG /048 CJL
1975 DMI17, JMP I DMINIT /RETURN /048 CJL
1976
1977 / DECMATE I INITIALIZE CODE CONTINUES HERE. /050 CJL
1978
1979 DMISET, RTFL0 /SET PORT 0 (1) OUTPUT FLAG /050 CJL
1980 CLA /CLEAN UP /050 CJL
1981 JMP I DMINIT /RETURN /050 CJL
1982
1983 DMSEND, .-. /DECMATE I SEND ROUTINE /050 CJL
1984 DMISKP, RTSF0 /SKIP ON PORT 0 (1) OUTPUT FLAG /050 CJL
1985 JMP DMISKP /WAIT FOR IT /050 CJL
1986 DMIOUT, RTLS0 /SEND TO PORT 0 (1) REGISTER /050 CJL
1987 CLA /CLEAN UP /050 CJL
1988 JMP I DMSEND /RETURN /050 CJL
1989
1990 DMWASTE,.-. /TIMER TEMPORARY /050 CJL
1991 DM234, 234 /CONSTANT 0234 /050 CJL
1992 DM2460, 2460 /CONSTANT 2460 /050 CJL
1993 DM2516, 2516 /CONSTANT 2516 /050 CJL
1994 DM3425, 3425 /CONSTANT 3425 /050 CJL
1995
1996 PAGE
1997 \f/ ROUTINE TO SEND THE FORMATTED PACKET /027 CJL
1998 / ARGUMENTS: CALL+1 NON-ZERO = AWAIT RESPONSE
1999 / ZERO = DO NOT AWAIT RESPONSE
2000 / CALL + 2 DISPATCH TABLE-2 /027 CJL
2001
2002 SPACK0, 0
2003 REM8B; RSBUF /SEND PACKET JUST COMPLETED
2004 TAD I SPACK0 /DO WE GET A RESPONSE?
2005 ISZ SPACK0 /BUMP POINTER PAST ARGUMENT
2006 SNA CLA /SKIP IF YES
2007 JMP I SPACK0 /ALL DONE HERE
2008 RPACK /GET PACKET BACK FROM REMOTE
2009 TAD I SPACK0 /DID WE WANT A DISPATCH?
2010 ISZ SPACK0 /BUMP PAST ARGUMENT
2011 SNA /SKIP IF YES
2012 JMP I SPACK0 /EXIT IF NO
2013 DCA SPACARG /STORE IN-LINE /031 CJL
2014 JMS DISPATCH /CALL DISPATCH ROUTINE /031 CJL
2015 SPACARG,.-. /WILL BE DISPATCH TABLE-2 /031 CJL
2016 JMP I SPACK0 /NOT FOUND, GOTTA RETURN
2017
2018 / CONSOLE RESET ROUTINE. /024 CJL
2019
2020 CRESET, .-. /CONSOLE RESET ROUTINE
2021 CLA CLL /CLEAN UP
2022 DCA ECHOSW /ENABLE OUTPUT ECHO
2023 TAD (UPCPRT) /ALLOW THEM TO
2024 DCA UCADDRESS /RESTART VIA <^C>
2025 TAD [CLOOP] /ALLOW THEM TO
2026 DCA UPADDRESS /RESTART VIA <^P>
2027 JMP I CRESET /RETURN
2028
2029 / ALTERNATE CONSOLE RESET ROUTINE. /025 CJL
2030
2031 CREST2, .-. /ALTERNATE CONSOLE RESET ROUTINE
2032 JMS CRESET /CLEAR AC AND ENABLE OUTPUT ECHO
2033 TAD (KCCZAP) /RENDER <^C>
2034 DCA UCADDRESS /TOTALLY HARMLESS
2035 TAD (CHKCLR) /MAKE <^P> PRINT "^P"
2036 DCA UPADDRESS /AND THEN GO AWAY
2037 JMP I CREST2 /RETURN
2038 \f/ ROUTINE TO CLEAR WORDS OF MEMORY
2039 / ENTER WITH: AC = MINUS NUMBER OF WORDS TO CLEAR
2040 / MQ = ADDRESS OF WHERE TO START THE CLEAR
2041
2042 CLEAR0, 0
2043 DCA CLEAR5 /STORE COUNT OF WORDS
2044 TAD MQ /GET ADDRESS TO CLEAR /032 CJL
2045 DCA CLEAR6 /STORE IN POINTER
2046 DCA I CLEAR6 /ZERO A WORD
2047 ISZ CLEAR6 /BUMP POINTER
2048 ISZ CLEAR5 /BUMP COUNTER
2049 JMP .-3 /LOOP
2050 JMP I CLEAR0 /DONE
2051
2052 CLEAR5, 0 /TEMP FOR "CLEAR" ROUTINE
2053 CLEAR6, 0 /TEMP FOR "CLEAR" ROUTINE
2054
2055 / ROUTINE TO DISPATCH TO ROUTINE BASED ON VALUE OF "RRTYP". /027 CJL
2056
2057 / CALLING SEQUENCE:
2058
2059 / CLA /AC MUST BE CLEAR
2060 / JMS DISPATCH /CALL ROUTINE
2061 / ADDRESS-2 /DISPATCH TABLE ADDRESS-2
2062 / NO MATCH RETURN /RETURNS HERE WITH CLEAR AC IF NO MATCH
2063
2064 / CALL WILL DISPATCH TO THE CORRESPONDING ROUTINE ON A MATCH IN THE SPECIFIED
2065 / TABLE (WHICH ENDS WITH ZERO) WITH A CLEAR AC.
2066
2067 DISPATC,.-. /MATCH "RRTYP" AND DISPATCH ROUTINE
2068 CLA /JUST IN CASE /031 CJL
2069 TAD I DISPATCH /GET PASSED ARGUMENT
2070 ISZ DISPATCH /BUMP PAST THE ARGUMENT
2071 DCA DISPA2 /SAVE PASSED ARGUMENT IN-LINE
2072 TAD I (RRTYP) /GET VALUE OF "RRTYP"
2073 CIA /INVERT FOR TESTING
2074 JMS I [SRCHTABLE] /CALL TABLE SEARCH ROUTINE
2075 DISPA2, .-. /WILL BE TABLE ADDRESS-2
2076 SNA CLA /SKIP IF MATCH FOUND
2077 JMP I DISPATCH /RETURN ON NO MATCH
2078 JMP I TABLEJUMP /DISPATCH TO MATCHING ADDRESS
2079 \f/ ROUTINE TO PUT CHARS INTO A BUFFER TO GET READY TO FORMAT A PACKET.
2080 / ENTER WITH CHAR IN THE AC; IF THE CHAR NEEDS CONTROL QUOTING, IT WILL BE ADDED
2081 / EXIT + 2 IF EVERYTHING IS OK
2082 / EXIT + 1 IF BUFFER IS FULL
2083
2084 OPBUF, 0 /PUT CHARACTERS INTO BUFFER FOR PACKET ROUTINE
2085 JMS I (OPRE) /CHECK FOR PREFIX
2086 JMP OPBUF1 /NO PREFIX
2087 DCA OP1 /SAVE CONVERTED CHAR
2088 TAD RQCTL /GET QUOTE CHAR TO USE
2089 DCA I OP2 /PUT RETURNED PREFIX INTO BUFFER
2090 ISZ OP2 /BUMP POINTER
2091 TAD OP1 /GET BACK CONVERTED CHAR
2092 OPBUF1, DCA I OP2 /PUT INTO BUFFER
2093 ISZ OP2 /BUMP POINTER
2094 NL7777 /SET -1 /032 CJL
2095 DCA I OP2 /ALWAYS TERMINATE BUFFER
2096 TAD RMAXL /GET MAX BUFFER LENGTH
2097 TAD (-40+HOLDBF-4 /
2098 CIA
2099 TAD OP2 /COMPARE WITH WHAT WE HAVE
2100 SPA CLA /SKIP IF NO ROOM
2101 JMP OPBUF2 /HAVE ROOM
2102 JMS INIOPB /RESET BUFFER
2103 JMP I OPBUF /TAKE RETURN + 1
2104
2105 OPBUF2, ISZ OPBUF /BUMP RETURN FOR BUFFER NOT FULL
2106 JMP I OPBUF /DONE
2107
2108 OP1, 0 /TEMP LOCATION
2109 OP2, HOLDBF /POINTER FOR HOLD BUFFER
2110
2111 / ROUTINE TO RE-SET THE HOLD BUFFER.
2112
2113 INIOPB, 0
2114 TAD (HOLDBF /RE-SET BUFFER POINTER
2115 DCA OP2
2116 JMP I INIOPB
2117
2118 / ROUTINE TO CALCULATE A 1 BYTE CHECKSUM.
2119
2120 CKSUM, 0
2121 DCA CKSUM1 /STORE TEMP
2122 TAD CKSUM1 /GET BACK
2123 RTR;RTR;RTR /GET TWO HIGHEST INTO TWO LOWEST /032 CJL
2124 AND (3 /KEEP ONLY BITS 0-1
2125 TAD CKSUM1 /GET ORIGINAL
2126 AND [77] /KEEP ONLY BITS 0-5 /016 CJL
2127 TAD [40] /MAKE A CHAR(CHECKSUM)
2128 JMP I CKSUM /DONE, RETURN IN AC
2129
2130 CKSUM1, 0 /TEMP FOR "CKSUM"
2131 \f PAGE
2132 \f/ ROUTINE TO INPUT CHARS FROM REMOTE UNTIL A "SOH" CHAR IS FOUND.
2133
2134 GETSOH, 0
2135 JMS COMIN /GET A CHARACTER FROM THE REMOTE LINE /046 CJL
2136 JMP I GETSOH /TIME-OUT
2137 AND [177] /IGNORE PARITY BIT /034 CJL
2138 TAD (-CNTRLA) /COMPARE WITH "SOH" /034 CJL
2139 SZA CLA /SKIP IF SAME
2140 JMP GETSOH+1 /LOOP TILL WE GET ONE
2141 ISZ GETSOH /BUMP FOR GOOD RETURN
2142 JMP I GETSOH /GOT ONE, DONE
2143
2144
2145 / ROUTINE TO GET A CHAR FROM THE REMOTE LINE AND UPDATE CHECKSUM.
2146
2147 GETIR, 0
2148 JMS COMIN /GET A CHARACTER FROM THE REMOTE LINE /046 CJL
2149 JMP I GETIR /TIME-OUT RETURN
2150 DCA GETIR1 /STORE TEMP
2151 TAD GETIR1 /GET CHAR BACK
2152 TAD I (ILINK9) /ADD CHECKSUM
2153 DCA I (ILINK9) /RETURN UPDATED CHECKSUM
2154 TAD GETIR1 /RE-GET CURRENT INPUT CHAR
2155 TAD [-15] /CHECK FOR A RETURN
2156 SNA CLA /SKIP IF NOT A RETURN
2157 JMP I GETIR /WAS A RETURN, TAKE EXIT + 1
2158 TAD GETIR1 /RE-GET CHAR FOR RETURN
2159 ISZ GETIR /BUMP FOR GOOD RETURN
2160 JMP I GETIR /AND RETURN IN THE AC
2161
2162 GETIR1, 0 /TEMP LOCAL TO "GETIR"
2163 \f/ REMOTE COMMUNICATIONS ROUTINES FOR NON-CONNECT USAGE. /046 CJL
2164
2165 / REMOTE INPUT ROUTINE. /046 CJL
2166
2167 COMIN, .-. /REMOTE INPUT ROUTINE /046 CJL
2168 CLA /CLEAN UP /046 CJL
2169 TAD [-15] /SETUP THE /049 CJL
2170 DCA TIMEOUT /TIME-OUT FACTOR /046 CJL
2171 INLUP, TAD INFLAG /IS INPUT AVAILABLE? /046 CJL
2172
2173 / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS
2174 / FOR KL8 INTERFACES.
2175
2176 *INLUP /OVERLAY DECMATE II CODE /049 CJL
2177
2178 INLUP, SKP /WE'RE NOT A DECMATE II /049 CJL
2179 SNA CLA /SKIP IF INPUT AVAILABLE (ON DECMATE II)/049 CJL
2180 INSKIP, JMP NOTYET /JUMP IF NOT /049 CJL
2181 INLUP1, DCA INFLAG /CLEAR INPUT AVAILABILITY FLAG /049 CJL
2182 INREAD, IRB /GET THE CHARACTER /049 CJL
2183
2184 / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS
2185 / ARE FOR KL8 INTERFACES.
2186
2187 *INSKIP /OVERLAY DECMATE II CODE /049 CJL
2188
2189 INSKIP, RKSFIOT /INPUT FLAG UP? /049 CJL
2190 INLUP1, JMP NOTYET /NO, CHECK FOR ABORT, ETC. /049 CJL
2191 INREAD, RKRBIOT /YES, READ IN THE CHARACTER /049 CJL
2192 AND [177] /JUST SEVEN-BIT /046 CJL
2193 DCA RCHAR /SAVE THE CHARACTER /046 CJL
2194 TAD RCHAR /GET IT BACK /046 CJL
2195 ISZ COMIN /BUMP TO GOOD RETURN /046 CJL
2196 JMP I COMIN /RETURN /046 CJL
2197
2198 / COMES HERE IF INPUT NOT AVAILABLE.
2199
2200 NOTYET, JMS I (CTLCTST) /CHECK FOR <^C>, ETC. /044 CJL
2201 TAD [-CNTRLZ] /COMPARE POSSIBLE CHARACTER TO <^Z> /044 CJL
2202 SZA /SKIP IF IT ALREADY MATCHES /044 CJL
2203 TAD [-CNTRLX+CNTRLZ]/ELSE COMPARE TO <^X> /044 CJL
2204 SNA CLA /SKIP IF NEITHER ABORT CHARACTER /049 CJL
2205 ISZ ABFLAG /SET ABORT FLAG /049 CJL
2206 SKP /SKIP IF NOT TOO MANY TIMES /049 CJL
2207 JMP .-2 /ENSURE FLAG SETTING /049 CJL
2208 \fINSTATU,JMS UPSTATUS /UPDATE THE PORT STATUS /049 CJL
2209
2210 / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS
2211 / FOR KL8 INTERFACES.
2212
2213 *INSTATUS /OVERLAY DECMATE II CODE /049 CJL
2214
2215 INSTATU,NOP /WE'RE NOT A DECMATE II /049 CJL
2216 ISZ WASTIME /WASTE SOME TIME /046 CJL
2217 JMP INLUP /KEEP TRYING /046 CJL
2218 ISZ TIMEOUT /WAITING TOO LONG? /046 CJL
2219 JMP INLUP /NO, KEEP TRYING /046 CJL
2220 JMP I COMIN /YES, TAKE ERROR RETURN /046 CJL
2221
2222 / FLOW-CONTROL STATUS ROUTINE. /049 CJL
2223
2224 GETFLOW,.-. /GET FLOW-CONTROL STATUS
2225 GETFL1, JMS UPSTATUS /UPDATE THE CURRENT STATUS
2226
2227 / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS
2228 / FOR KL8 INTERFACES.
2229
2230 *GETFL1 /OVERLAY DECMATE II CODE
2231
2232 GETFL1, NOP /WE'RE NOT A DECMATE II
2233 JMS I (RINGET) /GET REMOTE CHARACTER (IF ANY)
2234 CLA /THROW IT AWAY
2235 TAD REMWAIT /GET REMOTE FLOW STATUS
2236 JMP I GETFLOW /RETURN
2237
2238 / REMOTE OUTPUT ROUTINE. /046 CJL
2239
2240 COMOUT, .-. /REMOTE OUTPUT ROUTINE /046 CJL
2241 DCA OUTEMP /SAVE PASSED VALUE /046 CJL
2242 CMRESET,TAD [-15] /SETUP THE /049 CJL
2243 DCA OTIME /TIME-OUT COUNTER /049 CJL
2244 COMWAIT,JMS GETFLOW /GET REMOTE WAIT STATUS /049 CJL
2245
2246 / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR
2247 / KL8 INTERFACES.
2248
2249 *COMWAIT /OVERLAY DECMATE CODE /049 CJL
2250
2251 COMWAIT,NL7777 /SETUP FOR FLOW CONTROL FLAG LOAD /049 CJL
2252 AND FLOWFLAG /SHOULD WE WAIT FOR REMOTE FLOW CONTROL?/049 CJL
2253 SNA CLA /SKIP IF SO /049 CJL
2254 JMP NOWAIT /JUMP IF NOT /049 CJL
2255 \fFLOWAIT,JMS GETFLOW /GET REMOTE WAIT STATUS /049 CJL
2256 SZA CLA /SKIP IF NOT WAITING /049 CJL
2257 JMP FLOWAIT /JUMP IF STILL WAITING /049 CJL
2258 NOWAIT, TAD OUTFLAG /CHECK IF OUTPUT IS AVAILABLE /049 CJL
2259 CMOUT1, SNA CLA /SKIP IF SO /049 CJL
2260 CMOUT2, JMP OWAIT /JUMP IF NOT /049 CJL
2261 DM1AND, DCA OUTFLAG /CLEAR OUTPUT AVAILABILITY FLAG /049 CJL
2262 CMOUT3, TAD OUTEMP /GET THE PASSED VALUE /049 CJL
2263 CMOUT4, OLS /OUTPUT IT /049 CJL
2264
2265 / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS
2266 / ARE FOR KL8 INTERFACES.
2267
2268 *NOWAIT /OVERLAY DECMATE II CODE /049 CJL
2269
2270 NOWAIT, RTSFIOT /OUTPUT FLAG UP? /049 CJL
2271 CMOUT1, JMP OWAIT /NO, WAIT FOR IT THERE /049 CJL
2272
2273 / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS
2274 / FOR KL8 INTERFACES.
2275
2276 *CMOUT1 /OVERLAY DECMATE I CODE /049 CJL
2277
2278 CMOUT1, JMP COMWAIT /NO, WAIT FOR IT /049 CJL
2279 CMOUT2, TAD OUTEMP /YES, GET PASSED VALUE /049 CJL
2280 DM1AND, AND [377] /ENSURE EIGHT BITS (FOR DECMATE I) /049 CJL
2281
2282 / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS
2283 / FOR KL8 INTERFACES.
2284
2285 *DM1AND /OVERLAY DECMATE I CODE /049 CJL
2286
2287 DM1AND, SKP /WE'RE NOT A DECMATE I /049 CJL
2288 CMOUT3, TAD [400] /FORCE OUTPUT WRITE FOR DECMATE I /049 CJL
2289 CMOUT4, RTLSIOT /OUTPUT THE CHARACTER /049 CJL
2290 CLA /CLEAN UP /049 CJL
2291 JMP I COMOUT /RETURN /049 CJL
2292
2293 / COMES HERE IF OUTPUT NOT READY. /049 CJL
2294
2295 OWAIT, ISZ OWASTE /WASTE SOME TIME /049 CJL
2296 JMP COMWAIT /KEEP TRYING /049 CJL
2297 ISZ OTIME /WAITING TOO LONG? /049 CJL
2298 JMP COMWAIT /NO, KEEP TRYING /049 CJL
2299 JMS I (DMINIT) /YES, RESET EVERYTHING /049 CJL
2300 JMP CMRESET /TRY, TRY AGAIN /049 CJL
2301 \f/ DECMATE II, ETC. STATUS UPDATE ROUTINE. /046 CJL
2302
2303 UPSTATU,.-. /UPDATE THE STATUS ROUTINE /046 CJL
2304 ISF /COMMUNICATIONS PORT FLAG UP? /046 CJL
2305 JMP I UPSTATUS /NO, RETURN /046 CJL
2306 NL4000 /SETUP READ OF REGISTER ZERO /046 CJL
2307 MPSCC /TELL THE MPSCC CHIP /046 CJL
2308 CLA /CLEAN UP /046 CJL
2309 MPSCC /READ REGISTER ZERO NOW /046 CJL
2310 AND (5) /JUST INPUT AND OUTPUT BITS /046 CJL
2311 CLL RAR /MOVE INPUT TO LINK /046 CJL
2312 SNA CLA /SKIP IF OUTPUT INTERRUPT /046 CJL
2313 JMP INCHK /JUMP IF NOT /046 CJL
2314 TAD (050) /GET OUTPUT CLEAR VALUE /046 CJL
2315 MPSCC /CLEAR THE OUTPUT INTERRUPT /046 CJL
2316 DCA OUTFLAG /INDICATE OUTPUT AVAILABLE NOW /046 CJL
2317 INCHK, CLA RAL /GET RECEIVE STATUS /046 CJL
2318 SZA /SKIP IF INPUT NOT AVAILABLE RIGHT NOW /046 CJL
2319 DCA INFLAG /INDICATE NEW INPUT STATUS /046 CJL
2320 CLA /CLEAN UP EITHER WAY /046 CJL
2321 TAD (070) /GET END OF INTERRUPT VALUE /046 CJL
2322 MPSCC /CLEAR THE INTERRUPT /046 CJL
2323 CLA /CLEAN UP /046 CJL
2324 JMP I UPSTATUS /RETURN /046 CJL
2325
2326 AND377= AND [377] /INSTRUCTION CONSTANT /049 CJL
2327 OUTEMP= COMIN /OUTPUT ROUTINE TEMPORARY /049 CJL
2328 TIMEOUT=GETFLOW /TIME-OUT TEMPORARY /049 CJL
2329 WASTIME=COMOUT /TIME-OUT TEMPORARY /049 CJL
2330
2331 OTIME, .-. /TIME-OUT TEMPORARY /049 CJL
2332 OWASTE, .-. /TIME-OUT TEMPORARY /049 CJL
2333
2334 PAGE
2335
2336 / HOLD BUFFER FOR CHAR OUTPUT
2337
2338 DECIMAL
2339
2340 HOLDBF, ZBLOCK 92
2341
2342 OCTAL
2343 \f/ ROUTINE TO CHECK FOR CONTROL PREFIX.
2344 / ENTER WITH CHAR TO CHECK IN THE AC.
2345 / EXIT + 1 WITH CHAR IN THE AC IF NO PREFIX QUOTING.
2346 / EXIT + 2 WITH PROPER CHAR IN THE AC AND QUOTING IS REQUIRED.
2347
2348 OPRE, 0 /CHECK FOR CONTROL PREFIX ROUTINE
2349 DCA PRETEMP /SAVE THE CHARACTER /032 CJL
2350 TAD QFLAG /CHECK FOR IN CTRL QUOTE MODE
2351 SZA CLA /SKIP IF YES
2352 JMP OPRE1 /NO QUOTE PREFIX
2353 TAD PRETEMP /GET THE CHARACTER /032 CJL
2354 AND [7740] /QUICK CHECK FOR <40 /014/016 CJL
2355 SNA CLA /SKIP IF NOT CONTROL
2356 JMP OPRE2 /PREFIX QUOTE
2357 TAD PRETEMP /GET THE CHARACTER /032 CJL
2358 TAD (-177 /CHECK FOR "DELETE"
2359 SNA CLA /SKIP IF NOT
2360 JMP OPRE2 /PREFIX QUOTE
2361 TAD PRETEMP /GET THE CHARACTER /032 CJL
2362 CIA /NEGATE FOR COMPARE
2363 TAD RQCTL /SEE IF SAME AS QUOTE CHAR
2364 SZA CLA /SKIP IF PREFIX QUOTE
2365 JMP OPRE1 /NO PREFIX QUOTE
2366 TAD RQCTL /PREFIX WITH PREFIX
2367 JMP OPRE3 /PREFIX WITH THE PREFIX
2368
2369 OPRE1, TAD PRETEMP /GET THE CHARACTER /032 CJL
2370 JMP I OPRE /DONE
2371
2372 OPRE2, TAD PRETEMP /GET THE CHARACTER /032 CJL
2373 TAD [100] /MAKE IT PRINTABLE /016 CJL
2374 AND [177] /IN CASE IT WAS 177 /014/016 CJL
2375
2376 OPRE3, ISZ OPRE /BUMP FOR PREFIX RETURN
2377 JMP I OPRE /DONE
2378
2379 PRETEMP,.-. /PREFIX TEMPORARY /032 CJL
2380
2381 PAGE /014 CJL
2382 \f/ ROUTINE TO SCAN A TEXT LINE FOR KEYWORD DELIMITERS.
2383
2384 / THIS ROUTINE EXPECTS THE AC TO POINT TO A TEXT LINE TO SCAN AND FINDS THE
2385 / FIRST NON-SPACE, NON-END OF LINE CHAR IN THE LINE AND SETS "SCAN1" TO POINT TO
2386 / IT. NEXT WE FIND THE LAST CHAR IN THE LINE THAT IS A NON-SPACE, NON-END OF
2387 / LINE AND STORE A POINTER TO IT IN "SCAN2". KEYWORDS ARE DELIMITED BY A
2388 / BEGINNING OF LINE OR SPACE AT THE BEGINNING AND AN END OF LINE OR A SPACE AT
2389 / THE END.
2390
2391 / ENTER: AC = POINTER TO COMMAND LINE
2392
2393 / EXIT: (SUCCESS) SCAN1 = POINTER TO FIRST CHAR OF KEYWORD.
2394 / SCAN2 = POINTER TO LAST CHAR OF KEYWORD.
2395 / RETURN = RETURN + 2 (NO WORDS LEFT IN LINE).
2396
2397 / EXIT: (FAIL) RETURN = RETURN + 1.
2398
2399 SCNEL, 0 /SCAN ROUTINE
2400 JMS I [NOSP] /FIND FIRST NON-SPACE
2401 JMP I SCNEL /END OF LINE RETURN
2402 DCA SCAN1 /RETURN SCAN LINE POINTER
2403 TAD SCAN1 /RE-GET SCAN LINE POINTER
2404 JMS I [SP] /FIND FIRST SPACE OR EOL
2405 NOP /RETURN HERE ON EOL
2406 TAD (-1 /BACK UP TO PREVIOUS CHAR
2407 DCA SCAN2 /SET END ELEMENT POINTER
2408 ISZ SCNEL /TAKE SUCCESS RETURN
2409 JMP I SCNEL /DONE
2410
2411
2412 / ROUTINE TO SCAN THRU A TEXT LINE LOOKING FOR THE NEXT SPACE.
2413 / ENTER ROUTINE WITH THE LINE POINTER IN THE AC.
2414
2415 / EXIT: RETURN + 2 WITH AC = POINTER TO SPACE.
2416 / RETURN + 1 WITH AC = POINTER TO END OF LINE.
2417
2418 SP, 0 /CHECK FOR A <SPACE> ROUTINE
2419 DCA SCANTP /USE A TEMP POINTER
2420 SKP /SKIP INTO LOOP BELOW
2421 SP1, ISZ SCANTP /BUMP LINE POINTER
2422 TAD I SCANTP /GET A CHAR
2423 SPA /SKIP IF NOT END OF LINE
2424 JMP SP3 /GOT AN END OF LINE
2425 TAD [-" !200] /COMPARE WITH <SP> /034 CJL
2426 SZA CLA /SKIP IF IS A SPACE
2427 JMP SP1 /LOOP TILL SPACE OR EOL
2428 ISZ SP /BUMP RETURN FOR SPACE FOUND
2429
2430 SP3, CLA CLL /INSURE A CLEAR AC
2431 TAD SCANTP /GET POINTER VALUE
2432 JMP I SP /RETURN IN AC
2433 \f/ ROUTINE TO SCAN THRU A TEXT LINE FOR THE FIRST NON-SPACE.
2434 / ENTER ROUTINE WITH POINTER TO THE LINE IN THE AC.
2435
2436 / EXIT: RETURN + 2 WITH AC = POINTER TO NON-SPACE.
2437 / RETURN + 1 WITH AC = POINTER TO END OF LINE.
2438
2439 NOSP, 0 /FIND A NON-<SPACE> ROUTINE
2440 DCA SCANTP /USE A TEMP POINTER
2441 SKP /SKIP INTO LOOP BELOW
2442 NOSP1, ISZ SCANTP /BUMP THE LINE POINTER
2443 TAD I SCANTP /GET A CHAR FROM THE LINE
2444 SPA /SKIP IF NOT EOL
2445 JMP NOSP3 /EXIT IF EOL
2446 TAD [-" !200] /COMPARE WITH <SP> /034 CJL
2447 SNA CLA /SKIP IF NOT SPACE
2448 JMP NOSP1 /LOOP TILL SPACE OR EOL
2449 ISZ NOSP /BUMP RETURN FOR SPACE FOUND
2450 NOSP3, CLA CLL /INSURE CLEAR AC
2451 TAD SCANTP /GET POINTER
2452 JMP I NOSP /RETURN IN AC
2453
2454
2455
2456 / ROUTINE TO FIND AN END CHAR IN A STRING.
2457 / ENTER ROUTINE WITH POINTER TO THE STRING IN THE AC.
2458 / EXIT WITH THE POINTER TO THE FIRST MINUS CHAR IN THE AC.
2459
2460 FNDEND, 0 /FIND END CHAR ROUTINE
2461 DCA SCANTP /PUT POINTER IN SCANTP
2462 FEND1, TAD I SCANTP /GET A CHAR FROM THE STRING
2463 SPA CLA /SKIP IF NOT END
2464 JMP FEND2 /EXIT IF END OF STRING
2465 ISZ SCANTP /BUMP THE POINTER
2466 JMP FEND1 /LOOP TILL NON-END OF STRING
2467
2468 FEND2, TAD SCANTP /GET POINTER TO NON-END OF STRING
2469 JMP I FNDEND /EXIT WITH POINTER IN AC
2470
2471 SCANTP, 0 /USED IN THE SCAN ROUTINES "SP", "NOSP", "FNDNUL"
2472 \f/ ROUTINE TO LOOKUP THE KEY WORD POINTED TO BY THE AC IN THE /014 CJL
2473 / TABLE POINTED TO BY PTABLE.
2474
2475 / RETURN + 1 IF NO MATCH IS FOUND WITH AC = ENTRY VALUE.
2476 / RETURN + 2 IF NO KEYWORD IS FOUND (EOL DETECTED).
2477 / RETURN + 3 IF MATCH IS FOUND WITH THE NEXT PARSE POSITION IN THE LINE IN
2478 / THE AC AND THE DISPATCH ADDRESS FROM THE TABLE IN "KEYDSP".
2479
2480 KEYPRS, .-. /KEYWORD PARSE ROUTINE
2481 DCA LOOK3 /SAVE IN CASE OF FAIL
2482 TAD LOOK3 /RE-GET
2483 / AND (137) /MAKE CHARACTER UPPER-CASE, NO PARITY /MD013
2484 JMS SCNEL /TRY TO SCAN OFF A KEYWORD
2485 JMP KP45 /END OF LINE ENCOUNTERED
2486 TAD PTABLE /GET ADDRESS OF TABLE
2487 DCA LOOK2 /STORE IN LOCAL POINTER
2488
2489 KP10, TAD SCAN1 /GET ADDRESS OF SCAN ELEMENT
2490 DCA LOOK1 /INTO LOCAL POINTER
2491
2492 KP20, TAD I LOOK1 /GET A CHARACTER FROM THE SCAN ELEMENT
2493 CIA /NEGATE FOR COMPARE
2494 TAD I LOOK2 /GET A CHAR FROM THE TABLE ELEMENT
2495 SZA CLA /SKIP IF MATCH
2496 JMP KP90 /NO MATCH, SET TO LOOK AT NEXT TABLE ENTRY
2497 TAD LOOK1 /CHECK IF ALL ENTERED CHARS MATCH
2498 CIA /NEGATE TO COMPARE
2499 TAD SCAN2 /HAVE WE MATCHED TO THE TERMINATOR?
2500 SNA CLA /SKIP IF NO
2501 JMP KP40 /YES, GOT ENOUGH TO MATCH
2502 ISZ LOOK1 /MORE TO MATCH, BUMP SCAN ELEMENT POINTER
2503 ISZ LOOK2 /BUMP TABLE ELEMENT POINTER
2504 JMP KP20 /CONTINUE MATCH LOOP
2505
2506 KP40, TAD LOOK2 /GET CURRENT TABLE POINTER
2507 JMS FNDEND /FIND A NULL MARK
2508 IAC /BUMP BY 1
2509 DCA LOOK1 /STORE IN A POINTER
2510 TAD I LOOK1 /GET DISPATCH ADDRESS
2511 DCA KEYDSP /PUT INTO DISPATCH ADDRESS
2512 ISZ KEYPRS /BUMP RETURN
2513 ISZ KEYPRS /BUMP AGAIN
2514 CLA CLL IAC /AC = 1
2515 TAD SCAN2 /GET POINTER TO END OF CURRENT KEY
2516 JMP I KEYPRS /RETURN
2517
2518 / END OF LINE ENCOUNTERED ON PARSE.
2519
2520 KP45, ISZ KEYPRS /BUMP RETURN ONCE FOR EOL
2521
2522 / NO MATCHES IN THE TABLE HERE.
2523
2524 KP50, TAD LOOK3 /GET ORIGINAL AC
2525 JMP I KEYPRS /RETURN
2526 \f/ FAILURE ON CURRENT TABLE ENTRY, SET FOR NEXT ENTRY (IF THERE IS ONE) AND TRY
2527 / AGAIN.
2528
2529 KP90, TAD LOOK2 /GET TABLE POINTER
2530 JMS FNDEND /FIND NEXT TABLE ENTRY
2531 IAC;IAC /NEXT ENTRY IS 2 PAST THE NULL
2532 DCA LOOK2 /RE-SET LOCAL TABLE POINTER
2533 TAD I LOOK2 /CHECK END OF TABLE
2534 SNA CLA /SKIP IF NOT END OF THE TABLE
2535 JMP KP50 /TAKE NOT FOUND EXIT
2536 JMP KP10 /TRY MATCH ON THIS ENTRY
2537
2538 LOOK1, .-. /TEMPORARY FOR KEYPRS /014 CJL
2539 LOOK2, .-. /TEMPORARY FOR KEYPRS /014 CJL
2540 LOOK3, .-. /TEMPORARY FOR KEYPRS /014 CJL
2541
2542 / ROUTINE TO MOVE WORDS OF MEMORY. /014 CJL
2543
2544 / CALLING SEQUENCE:
2545
2546 / TAD (DESTINATION) /GET DESTINATION ADDRESS
2547 / DCA MQ /INTO MQ /032 CJL
2548 / TAD (-COUNT) /GET -NUMBER OF WORDS TO MOVE
2549 / DCA MOVE4 /SETUP MOVE COUNTER
2550 / TAD (SOURCE) /GET SOURCE ADDRESS
2551 / JMS I (MOVE0) /CALL MOVE ROUTINE
2552 / RETURN /RETURNS HERE
2553
2554 MOVE0, .-. /MOVE ROUTINE /014 CJL
2555 DCA MOVE5 /STORE SOURCE ADDRESS IN LOCAL POINTER
2556 TAD MQ /GET DESTINATION ADDRESS /032 CJL
2557 DCA MOVE6 /STORE IN LOCAL POINTER
2558 MOVE1, TAD I MOVE5 /GET A WORD FROM THE SOURCE
2559 DCA I MOVE6 /MOVE TO DESTINATION
2560 ISZ MOVE5 /BUMP SOURCE POINTER
2561 ISZ MOVE6 /BUMP DESTINATION COUNTER
2562 ISZ MOVE4 /BUMP COUNTER
2563 JMP MOVE1 /LOOP
2564 JMP I MOVE0 /DONE
2565
2566 MOVE5, .-. /SOURCE POINTER FOR "MOVE"
2567 MOVE6, .-. /DESTINATION POINTER FOR "MOVE"
2568
2569 PAGE /014 CJL
2570 \f/ ROUTINE TO PARSE OFF A DEVICE NAME FROM THE COMMAND LINE. /O14 CJL
2571
2572 / CALLING SEQUENCE:
2573
2574 / TAD (POINTER) /AC CONTAINS POINTER TO COMMAND LINE
2575 / JMS I [DPARS] /CALL ROUTINE
2576 / ERROR RETURN /AC UNCHANGED
2577 / GOOD RETURN /AC NOW POINTS TO REST OF LINE
2578
2579 / DEVNUM= DEVICE NUMBER TO USE.
2580 / ":" IS THE FIFTH CHARACTER IF NOT USING DEFAULT DEVICE.
2581
2582 DPARS, .-. /DEVICE PARSE ROUTINE /014 CJL
2583 DCA DPAR10 /SAVE INITIAL POINTER TO LINE
2584 TAD DPAR10 /GET POINTER
2585 JMS I [NOSP] /GET PAST ANY LEADING SPACES
2586 JMP DFDEV /GOT END OF LINE, USE DEFAULT DEVICE
2587 DCA DPAR11 /SAVE POINTER TO LINE
2588 DCA DEVNAME /INITIALIZE THE DEVICE NAME /014 CJL
2589 DCA DEVNAME+1 /FOR "INQUIRE" FUNCTION /014 CJL
2590 TAD (DEVNAM) /GET ADDRESS OF WHERE TO PUT DEVICE NAME/014 CJL
2591 DCA PACK6P /STORE IN PACK6 POINTER
2592 DCA PACK6F /INITIALIZE PACK6 FLAG FOR LOW BYTE /014 CJL
2593 TAD (-4) /SET UP A COUNTER /014 CJL
2594 DCA DPAR13 /FOR NO MORE THAN 4 CHARS
2595 DPAR1, TAD I DPAR11 /GET A CHAR FROM THE LINE
2596 SNA /SKIP IF NOT <EOL> /014 CJL
2597 JMP DFDEV /GOT AN <EOL>, USE DEFAULT DEVICE /014 CJL
2598 TAD (-":!200) /CHECK FOR ":" /034 CJL
2599 SNA CLA /SKIP IF NOT END OF DEVICE NAME
2600 JMP DPAR2 /DEVICE NAME SET UP
2601 TAD I DPAR11 /RE-GET CHAR
2602 ISZ DPAR11 /BUMP LINE POINTER
2603 PACK6 /PACK SIX-BIT /014 CJL
2604 ISZ DPAR13 /BUMP CHARACTER COUNTER /014 CJL
2605 JMP DPAR1 /CAN CONTINUE
2606 TAD I DPAR11 /GET CHARACTER AFTER THE FOURTH /014 CJL
2607 TAD (-":!200) /CHECK FOR ":" /034 CJL
2608 SZA CLA /SKIP IF YES, ALL IS OK
2609 JMP DFDEV /USE THE DEFAULT DEVICE
2610 DPAR2, ISZ DPAR11 /BUMP POINTER PAST ":"
2611 TAD (DEVNAM) /GET PARSED DEVICE NAME ADDRESS /014 CJL
2612 JMP DPAR4 /DO AN OS/8 "INQUIRE"
2613
2614 DFDEV, CLA CLL /CLEAN UP /019 CJL
2615 TAD DPAR10 /GET ORIGINAL AC FOR
2616 DCA DPAR11 /RETURN POINTER
2617 DPAR4, JMS DVNUM /GET DEVICE NUMBER
2618 JMP DPAR8 /DEVICE NAME ERROR
2619 DCA DEVNUM /RETURN FOR CALLING PROGRAM
2620 TAD DPAR11 /GET CURRENT POINTER
2621 ISZ DPARS /BUMP RETURN
2622 JMP I DPARS /RETURN /014 CJL
2623 \fDPAR8, CLA CLL /INSURE CLEAR AC
2624 TAD DPAR10 /GET ORIGINAL AC
2625 JMP I DPARS /TAKE ERROR EXIT
2626
2627 DPAR10, .-. /TEMPORARY FOR DPARS /014 CJL
2628 DPAR11, .-. /TEMPORARY FOR DPARS /014 CJL
2629 DPAR13, .-. /TEMPORARY FOR DPARS /014 CJL
2630 DEFDEV, DEVICE DSK /DEFAULT DEVICE
2631 DEVNAM, FILENAM ZZZZZZ.ZZ /DEFAULT FILENAME /014 CJL
2632
2633 / ROUTINE TO RETURN A DEVICE NUMBER FOR A DEVICE NAME. /014 CJL
2634
2635 / CALLING SEQUENCE:
2636
2637 / TAD (ADDRESS) /AC=ADDRESS OF DEVICE NAME
2638 / /*OR* 0000 IF "DSK:" IS TO BE USED
2639 / ERROR RETURN /INVALID DEVICE
2640 / GOOD RETURN /AC=DEVICE NUMBER
2641
2642 DVNUM, .-. /DEVICE NUMBER ROUTINE /014 CJL
2643 SNA /SKIP IF DEVICE NAME SPECIFIED
2644 TAD (DEFDEV) /ELSE USE DEFAULT /014 CJL
2645 DCA DVNUM9 /SAVE IN LOCAL POINTER
2646 TAD I DVNUM9 /GET FIRST TWO CHARACTERS OF NAME /014 CJL
2647 DCA DVNUM5 /PUT INTO CALL
2648 ISZ DVNUM9 /BUMP POINTER
2649 TAD I DVNUM9 /GET LAST TWO CHARACTERS OF NAME /014 CJL
2650 DCA DVNUM5+1 /PUT INTO CALL
2651 CIF USRFLD /GOTO USR FIELD /020 CJL
2652 JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL
2653 INQUIRE /INQUIRE ABOUT HANDLER /020 CJL
2654 DVNUM5, .-. /FIRST TWO BYTES OF DEVICE NAME /014 CJL
2655 .-. /LAST TWO BYTES OF DEVICE NAME /014 CJL
2656 0 /ENTRY POINT OF HANDLER RETURNED HERE
2657 JMP I DVNUM /ERROR, TAKE ERROR EXIT
2658 TAD DVNUM5+1 /DEVICE NUMBER
2659 ISZ DVNUM /BUMP RETURN FOR NO ERROR
2660 JMP I DVNUM /RETURN
2661
2662 DVNUM9, .-. /LOCAL FOR "DVNUM" /014 CJL
2663 \f/ DEVICE HANDLER FETCH ROUTINE. /020 CJL
2664
2665 / CALLING SEQUENCE:
2666
2667 / TAD (HANDLERNUMBER) /AC CONTAINS DEVICE HANDLER NUMBER
2668 / JMS I [HFETCH] /CALL ROUTINE
2669 / ERROR RETURN /COULDN'T LOAD HANDLER
2670 / GOOD RETURN /HANDLER LOADED
2671
2672 / IF THE HANDLER WAS LOADED, THEN HNDADR CONTAINS THE HANDLER ENTRY POINT.
2673
2674 HFETCH, .-. /HANDLER FETCH ROUTINE
2675 DCA HANDNUMBER /STORE HANDLER NUMBER
2676 TAD (HNDLR+1) /GET OUR BUFFER+(TWO PAGE ALLOWED)
2677 DCA HADR /STORE IN-LINE
2678 TAD HANDNUMBER /GET HANDLER NUMBER AGAIN
2679 CIF USRFLD /GOTO USR FIELD
2680 JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL
2681 FETCH /FETCH HANDLER
2682 HADR, .-. /WILL BE OUR SUGGESTED ADDRESS+TWO PAGES ALLOWED
2683 SKP /COULDN'T DO IT
2684 ISZ HFETCH /BUMP TO GOOD RETURN
2685 CLA CLL /CLEAN UP
2686 TAD HADR /GET ACTUAL HANDLER ADDRESS
2687 DCA HNDADR /STASH THE POINTER
2688 JMP I HFETCH /RETURN EITHER WAY
2689
2690 HANDNUM,.-. /HANDLER NUMBER TEMPORARY
2691
2692 \f/ ROUTINE TO HANDLE THE "FINISH" COMMAND. /021 CJL
2693
2694 FINSRV, 0
2695 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL
2696 TAD (MSEND) /GET SEND MODE VALUE /045 CJL
2697 DCA KMODE /SETUP PROPER MODE /045 CJL
2698 FPACK /FORMAT A PACKET
2699 SRVFIN /PACKET DATA ADDRESS
2700 STGEN /PACKET TYPE
2701
2702 FIN2, SPACK /SEND PACKET
2703 1 /AWAIT RESPONSE
2704 FIN20-2 /DISPATCH LIST FOR RESPONSE /027 CJL
2705
2706 / NAK OR UNDEFINED RESPONSE HERE
2707
2708 FIN5, ISZ RTRYC /BUMP RE-TRY COUNTER
2709 JMP FIN2 /GET RESPONSE AND TRY AGAIN
2710 TAD (NOFINISH) /FAILED, RETURN MESSAGE /025 CJL
2711 JMP I FINSRV
2712
2713 / ACK HERE
2714
2715 FIN10, ISZ FINSRV /BUMP FOR NON-ERROR EXIT
2716 JMP I FINSRV /DONE
2717
2718 FIN20, STACK; FIN10 /ACK
2719 STNAK; FIN5 /NAK
2720 0
2721
2722 SRVFIN, "F&137 /SERVER KERMIT COMMAND TO SHUT DOWN
2723 -1 /END OF DATA
2724
2725 PAGE
2726 \f/ ROUTINE TO PARSE OFF A FILE NAME.
2727 / FILE NAME TO BE PARSED MUST BE LETTERS OR DIGITS AND BE NO MORE THAN
2728 / SIX CHARS FOR THE NAME AND TWO CHARS FOR THE EXTENSION.
2729
2730 / ENTER WITH: AC = POINTER TO FILE NAME TO PARSE.
2731 / FNPTR = POINTER TO WHERE TO PUT THE PARSED FILE NAME.
2732
2733 / NON-ERROR EXIT: AC = POINTER TO REMAINDER OF COMMAND LINE.
2734 / RETURN THE CALL + 2.
2735
2736 / ERROR EXIT: AC = ORIGINAL POINTER.
2737 / RETURN THE CALL + 1.
2738
2739 PFNAM, 0
2740 DCA PFN10 /SAVE POINTER TO FILE NAME STRING
2741 TAD FNPTR /GET POINTER TO FILE NAME BLOCK
2742 DCA MQ /SET FOR "CLEAR" ROUTINE /032 CJL
2743 TAD (-4 /FOUR WORDS TO CLEAR OUT
2744 CLEAR /INIT THE FILE NAME BLOCK
2745 TAD PFN10 /GET THE STRING POINTER
2746 JMS I [NOSP] /GET PAST ANY LEADING SPACES
2747 JMP PFNAM9 /GOT EOL, NO FILE NAME
2748 DCA PFN11 /SAVE POINTER
2749 TAD FNPTR /GET FILE NAME BLOCK POINTER
2750 DCA PACK6P /SET UP THE "PACK6" POINTER
2751 DCA PACK6F /INIT THE "PACK6" FLAG
2752 TAD (-6 /MAX OF 6 CHARS FOR FILE NAME
2753 DCA PFN15 /PUT INTO COUNTER
2754 DCA WILDF /INIT THE WILD CARD FLAG
2755 JMS NAM /MOVE AND PACK FILE NAME
2756 TAD I PFN11 /GET THE TERM CHAR
2757 SPA /SKIP IF NOT EOL
2758 JMP PFNAM7 /EOL MEANS END OF FILE NAME
2759 TAD (-".!200) /COMPARE TO "." /034 CJL
2760 SNA /SKIP IF NO
2761 JMP PFNAM3 /GO HANDLE EXTENSION
2762 TAD (-" +".) /COMPARE TO <SP> /034 CJL
2763 SZA CLA /SKIP IF WAS A SPACE
2764 JMP PFNAM9 /NOT A SPACE, GOT AN ERROR
2765 JMP PFNAM7 /IS A SPACE, END OF FILE NAME
2766 \fPFNAM3, ISZ PFN11 /BUMP PAST THE "."
2767 TAD FNPTR /GET FILE NAME BLOCK POINTER
2768 TAD (3) /POINT TO EXTENSION /032 CJL
2769 DCA PACK6P /SET "PACK6" POINTER
2770 DCA PACK6F /INIT "PACK6" FLAG
2771 NL7776 /SET -2 /032 CJL
2772 DCA PFN15 /COUNTER FOR 2 EXT CHARS
2773 JMS NAM /NOW DO THE EXTENSION
2774 TAD I PFN11 /GET THE TERM CHAR
2775 SPA /SKIP IF NOT EOL
2776 JMP PFNAM7 /GOT COMPLETE FILE NAME HERE
2777 TAD [-" !200] /COMPARE TO <SP> /034 CJL
2778 SZA CLA /SKIP IF IT WAS
2779 JMP PFNAM9 /GOT A FILE NAME ERROR
2780 PFNAM7, ISZ PFNAM /BUMP RETURN FOR GOOD FILE NAME
2781 CLA CLL /INSURE CLEAR AC
2782 TAD PFN11 /GET CURRENT STRING POINTER
2783 JMP I PFNAM /AND RETURN
2784
2785 PFNAM9, CLA CLL /INSURE CLEAR AC
2786 TAD PFN10 /GET ORIGINAL STRING POINTER
2787 JMP I PFNAM /TAKE ERROR RETURN
2788
2789 PFN10, 0 /TEMP FOR PFNAM ROUTINE
2790 PFN11, 0 /TEMP FOR PFNAM ROUTINE
2791 PFN15, 0 /TEMP FOR PFNAM ROUTINE
2792 \f/ LOCAL ROUTINE TO "PFNAM" TO MOVE IN THE FILE NAME OR FILE EXTENSION.
2793 / ENTER WITH "PFN11" POINTING TO WHERE TO GET THE NAME OR EXTENSION.
2794 / AND "PFN15" EQUAL TO THE MAX NUMBER OF CHARS (6 FOR NAME, 2 FOR EXT).
2795 / THIS ROUTINE CHECKS FOR WILD CARD CHARS "*" AND "?" AND PUTS THE
2796 / "?" CHAR IN FOR ANY CHARS IN THE NAME THAT ARE WILD. ALSO IF ANY
2797 / WILD CARD CHARS ARE FOUND THE FLAG "WILDC" IS SET SO BEFORE PARSING
2798 / ANY FILE NAME THE "WILDC" FLAG SHOULD BE INITIALIZED.
2799
2800 NAM, 0
2801 NAM0, TAD I PFN11 /GET A CHAR FROM THE STRING
2802 JMS I (ALPNUM) /MUST BE ALPHA OR NUMBER
2803 SKP /NOT A ALPHA NUMERIC
2804 JMP NAM3 /IS ALPHA NUMERIC
2805 TAD (-"?!200) /COMPARE TO "?" /034 CJL
2806 SNA /SKIP IF NO
2807 JMP NAM2 /YES, JUST PUT IT IN
2808 TAD (-"*+"?) /COMPARE TO "*" /034 CJL
2809 SZA CLA /SKIP IF YES
2810 JMP I NAM /TAKE THE FILE NAME ERROR EXIT
2811 ISZ WILDF /SET FLAG FOR WILD CARD FOUND
2812 NAM1, TAD ["?&77] /GET WILD CARD CHARACTER /034 CJL
2813 PACK6 /PUT IN NAME BLOCK
2814 ISZ PFN15 /BUMP CHAR COUNTER
2815 JMP NAM1 /LOOP TILL ALL FILLED
2816 ISZ PFN11 /BUMP THE STRING POINTER
2817 JMP NAM9 /EXIT WITH "PFN11" POINTING TO NEXT CHAR
2818 NAM2, ISZ WILDF /SET FLAG FOR WILD CARD FOUND
2819 TAD ["?&77] /GET WILD CARD CHARACTER /034 CJL
2820 NAM3, PACK6 /PUT THE CHAR INTO THE FILE NAME BLOCK
2821 ISZ PFN11 /BUMP THE STRING POINTER
2822 ISZ PFN15 /BUMP THE CHAR COUNTER
2823 JMP NAM0 /LOOP
2824
2825 NAM4, TAD I PFN11 /NOW GET TO A TERMINATOR CHAR
2826 JMS I (ALPNUM) /BY FINDING FIRST NON-ALPHNUMERIC
2827 JMP NAM9 /NOW WE CAN QUIT
2828 CLA CLL /IGNORE EXCESS CHARS
2829 ISZ PFN11 /BUMP THE STRING POINTER
2830 JMP NAM4 /LOOP
2831
2832 NAM9, CLA CLL /LEAVE WITH A CLEAR AC
2833 JMP I NAM /RETURN
2834 \f/ ROUTINE TO SEND A PACKET.
2835 / ENTER WITH ADDRESS OF PACKET DATA IN CALL + 1.
2836 / AND TYPE OF PACKET IN CALL + 2.
2837 / EXIT CALL + 4 IF ACK RETURNED.
2838 / EXIT CALL + 3 IF NAK OR OTHER PACKET TYPE RETURNED.
2839
2840 SNDP, 0
2841 TAD I SNDP /GET DATA ADDRESS
2842 DCA SNDP1 /STORE IN CALL
2843 ISZ SNDP /BUMP POINTER
2844 TAD I SNDP /GET PACKET TYPE
2845 DCA SNDP2 /STORE IN CALL
2846 ISZ SNDP /BUMP
2847
2848 FPACK /FORMAT A PACKET
2849 SNDP1, 0 /DATA ADDRESS GOES HERE
2850 SNDP2, 0 /PACKET TYPE GOES HERE
2851
2852 SNDP3, SPACK /SEND A DATA PACKET
2853 1 /GET RESPONSE
2854 SNDP9-2 /RESPONSE DISPATCH TABLE ADDRESS /027 CJL
2855
2856 / HERE ON NOT "NAK" OR "ACK" RESPONSE.
2857
2858 SKP
2859
2860 / HERE ON "ACK".
2861
2862 SNDP5, ISZ SNDP /BUMP RETURN
2863
2864 ISZ SNDP /BUMP RETURN
2865 JMP I SNDP /EXIT
2866
2867 / HERE ON NAK.
2868
2869 SNDP4, ISZ RTRYC /BUMP THE RE-TRY COUNTER
2870 JMP SNDP3 /RE-TRY
2871 JMP I SNDP /TAKE RETURN + 3
2872
2873 SNDP9, STACK; SNDP5 /ACK
2874 STACK; SNDP4 /NAK
2875 0
2876
2877 PAGE /014 CJL
2878 \f IFZERO 1 <
2879
2880 / ROUTINE TO PARSE OFF A DECIMAL NUMBER.
2881 / ENTER ROUTINE WITH A POINTER TO THE PARSE LINE IN THE AC.
2882 / EXIT: RETURN + 1 FOR NO NUMBER.
2883 / RETURN + 2 FOR INVALID NUMBER.
2884 / RETURN + 3 FOR VALID NUMBER.
2885
2886 / IN ALL CASES ON RETURN THE AC WILL CONTAIN A POINTER TO THE NEXT CHAR TO PARSE
2887 / IN THE LINE. ANY NUMBER PARSED WILL BE CONVERTED TO BINARY AND PUT INTO THE
2888 / REGISTER "BININP".
2889
2890 DECPRS, 0
2891 JMS I [NOSP] /GET PAST ANY LEADING SPACES
2892 JMP I DECPRS /GOT AN END OF LINE, AC POINTS TO IT
2893 DCA DP10 /SAVE POINTER TO LINE
2894 TAD DP10 /RE-GET POINTER TO LINE
2895 DCA DP11 /STORE IN OUR LINE POINTER
2896 DCA BININP /INIT BINARY REGISTER
2897 DCA DP13 /INIT PARSED NUMBER FLAG
2898 SKP /SKIP INTO LOOP BELOW
2899 DP1, ISZ DP11 /BUMP THE LINE POINTER
2900 TAD I DP11 /GET A CHAR FROM THE LINE
2901 JMS DECCK /CHECK FOR PROPER ASCII DECIMAL
2902 JMP DP5 /NOT PROPER ASCII DECIMAL
2903 ISZ DP13 /FLAG NUMBER INPUT
2904 TAD (-"0 /MAKE BINARY
2905 DCA DP12 /AND STORE
2906 TAD BININP /GET PREVIOUS INPUT
2907 JMS MUL10 /AND MULTIPLY TIMES 10
2908 SZL /SKIP IF NO OVERFLOW ENCOUNTERED
2909 JMP DP6 /GOT AN OVERFLOW ERROR
2910 TAD DP12 /COMBINE WITH CURRENT INPUT
2911 SZL /SKIP IF NO OVERFLOW ERROR
2912 JMP DP6 /GOT AN OVERFLOW ERROR
2913 DCA BININP /RETURN ACCUMULATED SUM
2914 JMP DP1 /LOOP
2915
2916 DP5, CLA CLL /AC MAY NOT BE CLEAR
2917 TAD DP13 /ANY NUMBERS INPUT YET?
2918 SNA CLA /SKIP IF YES
2919 JMP DP6 /TAKE THE NO NUMBER INPUT RETURN
2920 ISZ DECPRS /BUMP THE RETURN
2921 ISZ DECPRS /TWICE FOR GOOD NUMBER INPUT RETURN
2922 TAD DP11 /GET POINTER TO LINE
2923 JMP I DECPRS /AND RETURN
2924
2925 DP6, CLA CLL /AC MAY NOT BE CLEAR
2926 TAD DP10 /GET ORIGINAL LINE POINTER
2927 ISZ DECPRS /BUMP THE RETURN
2928 JMP I DECPRS /TAKE THE INVALID NUMBER RETURN
2929
2930 >
2931 \f IFZERO 1 <
2932
2933 DP10, 0 /TEMP FOR DECPRS
2934 DP11, 0 /TEMP FOR DECPRS
2935 DP12, 0 /TEMP FOR DECPRS
2936 DP13, 0 /TEMP FOR DECPRS
2937
2938 / ROUTINE TO MULTIPLY THE VALUE OF THE AC TIMES 10.
2939 / VALUE IN THE AC IS ASSUMED BINARY.
2940
2941 / THE NUMBER IS RETURNED IN THE AC. IF THE LINK IS SET THE MULTIPLY
2942 / OVERFLOWED 12 BITS.
2943
2944 MUL10, 0
2945 DCA MULTMP /SAVE THE NUMBER
2946 TAD MULTMP /GET THE NUMBER BACK
2947 CLL RTL /MULTIPLY TIMES 4
2948 TAD MULTMP /TIMES 5
2949 SNL /SKIP IF ALREADY OVERFLOWED /025 CJL
2950 RAL /TIMES 10
2951 JMP I MUL10 /RETURN NUMBER IN AC
2952 /THE LINK HAS ANY OVERFLOW
2953
2954 MULTMP, 0 /TEMP STORAGE FOR MUL10 ROUTINE
2955
2956
2957
2958 / ROUTINE TO CHECK FOR A VALID ASCII DECIMAL VALUE.
2959
2960 / ENTER WITH ASCII CHAR IN THE AC.
2961 / EXIT RETURN + 1 IF NON-VALID ASCII DECIMAL WITH CHAR IN AC.
2962 / EXIT RETURN + 2 IF VALID ASCII DECIMAL WITH CHAR IN AC.
2963
2964 DECCK, 0
2965 DCA DECCK5 /STORE THE CHAR TO CHECK
2966 TAD DECCK5 /GET THE CHAR
2967 TAD (-"0 /CHECK FOR LESS THAN 0
2968 SPA /SKIP IF NOT LESS THAN 0
2969 JMP DECCK1 /NON-ASCII DECIMAL
2970 TAD ("0-"9-1 /CHECK GREATER THAN 9
2971 SMA CLA /SKIP IF LE 9
2972 JMP DECCK1 /INVALID ASCII DECIMAL
2973 ISZ DECCK /BUMP RETURN FOR VALID ASCII DECIMAL
2974 DECCK1, TAD DECCK5 /RE-GET ORIGINAL CHAR IN AC
2975 JMP I DECCK /RETURN
2976
2977
2978 DECCK5, 0 /TEMP FOR "DECCK" ROUTINE
2979
2980 >
2981 \f/ ROUTINE TO INPUT A COMMAND LINE FROM THE KEYBOARD. /013/014 CJL
2982
2983 LININP, 0
2984 TAD (LINBUF /GET ADDRESS OF LINE BUFFER
2985 DCA LIN50 /STORE IN A POINTER
2986 LIN1, JMS I (INPUT) /GET A CHARACTER FROM THE KEYBOARD /044 CJL
2987 TAD (-CNTRLM) /COMPARE TO <CR> /034 CJL
2988 SNA /SKIP IF NOT A RETURN
2989 JMP LIN2 /LINE IS INPUT
2990 TAD (-DELETE+CNTRLM)/COMPARE TO <DEL> /034 CJL
2991 SNA CLA /SKIP IF NOT A DELETE
2992 JMP LIN5 /OFF TO HANDLE A DELETE
2993 TAD LIN50 /GET VALUE OF LINE POINTER
2994 TAD (-LINBUF-LINSIZ /COMPARE WITH END OF LINE BUFFER
2995 SMA CLA /SKIP IF ROOM IN LINE BUFFER
2996 JMP LIN10 /BEEP FOR FULL BUFFER
2997 TAD INCHAR /GET THE KEYBOARD CHARACTER AGAIN /044 CJL
2998 TAD (-140) /COMPARE TO LOWER-CASE LIMIT /034 CJL
2999 SMA /SKIP IF BELOW LIMIT /034 CJL
3000 TAD [-40] /ELSE MAKE IT UPPER-CASE /034 CJL
3001 TAD (140) /RESTORE THE CHARACTER /034 CJL
3002 DCA I LIN50 /STORE IN THE LINE BUFFER
3003 ISZ LIN50 /BUMP THE LINE BUFFER POINTER
3004 NL7777 /SET -1 /032 CJL
3005 DCA I LIN50 /TERMINATE THE LINE
3006 TAD INCHAR /GET THE LATEST KEYBOARD CHARACTER BACK /044 CJL
3007 JMS I [P7ECHO] /PRINT IT /043 CJL
3008 JMP LIN1 /LOOP TILL A RETURN TYPED
3009
3010 LIN2, NL7777 /SET -1 /032 CJL
3011 DCA I LIN50 /INSURE STRING TERMINATED
3012 JMS I [SCRIBE] /DO A /025 CJL
3013 CRLF /<CR>, <LF> /025 CJL
3014 JMP I LININP /DONE
3015
3016 / HANDLE A DELETE TYPED IN
3017
3018 LIN5, TAD LIN50 /FIND OUT FIRST IF...
3019 TAD (-LINBUF /WE ARE AT THE BEGINNING OF THE LINE
3020 SNA CLA /SKIP IF NO
3021 JMP LIN1 /JUST IGNORE THE DELETE
3022 NL7777 /SET -1 /032 CJL
3023 TAD LIN50 /GET THE LINE POINTER
3024 DCA LIN50 /RETURN BACKED UP
3025 DCA I LIN50 /ZERO THE CHAR
3026 TAD (CNTRLH) /GET A <BS> /025 CJL
3027 JMS I [P7ECHO] /PRINT IT /043 CJL
3028 TAD [" &177] /GET A <SPACE> /025 CJL
3029 JMS I [P7ECHO] /PRINT IT /043 CJL
3030 TAD (CNTRLH) /GET A <BS> /025 CJL
3031 JMS I [P7ECHO] /PRINT IT /043 CJL
3032 JMP LIN1 /BACK TO INPUT
3033 \f/ HANDLE FULL LINE BUFFER HERE
3034
3035 LIN10, CLA CLL /ENSURE CLEAR AC
3036 TAD [CNTRLG] /GET A <BEL> CHARACTER /025 CJL
3037 JMS I [P7ECHO] /PRINT IT /043 CJL
3038 JMP LIN1 /WAIT FOR EITHER RETURN OF DELETE KEY
3039
3040 LIN50, 0 /TEMP POINTER FOR "LININP" ROUTINE
3041 \f/ ROUTINE TO PACK TWO SIX-BIT CHARACTERS INTO A WORD. /032 CJL
3042
3043 / CALLING SEQUENCE:
3044
3045 / [PACK6PTR => CHARACTER PACKING AREA].
3046 / [PACK6FLAG=0 IF PACKING INTO HIGH-ORDER BYTE.
3047 / PACK6FLAG=4000 IF PACKING INTO LOW-ORDER BYTE].
3048
3049 / TAD CHAR /AC CONTAINS CHARACTER TO BE PACKED
3050 / PACK6 /CALL VIA PAGE ZERO POINTER
3051
3052 / RETURNS WITH AC CLEAR AND PACK6PTR AND PACK6FLAG UPDATED FOR NEXT PACKING.
3053
3054 PACK60, .-. /PACK SIX-BIT ROUTINE
3055 AND [77] /JUST SIX-BIT
3056 DCA PACK6TEMP /SAVE FOR NOW
3057 NL4000 /SET INVERSION BIT
3058 TAD PACK6FLAG /REVERSE THE FLAG
3059 DCA PACK6FLAG /STORE BACK
3060 SZL /WAS IT CLEAR?
3061 JMP PACKIT /NO, GO DO LOW-ORDER
3062 TAD PACK6TEMP /GET THE CHARACTER
3063 RTL;RTL;RTL /MOVE UP
3064 DCA I PACK6PTR /STORE IT
3065 JMP I PACK60 /RETURN
3066
3067 PACKIT, TAD I PACK6PTR /GET PREVIOUS HIGH-ORDER HALFWORD
3068 TAD PACK6TEMP /ADD ON LATEST
3069 DCA I PACK6PTR /STORE BOTH
3070 ISZ PACK6PTR /BUMP FOR NEXT TIME
3071 JMP I PACK60 /RETURN
3072
3073 PACK6TE,.-. /PACK6 TEMPORARY
3074 \f/ ROUTINE TO COMPARE TWO FILE NAMES FOR EQUALITY.
3075 / THE ROUTINE WILL CHECK EACH OF THE 8 FILE NAME CHARS AND IF A
3076 / CHAR IN THE FIRST FILE NAME (THE ONE WE ARE LOOKING FOR) CONTAINS
3077 / A "?" IT WILL MATCH ON THE SECOND FILE NAME CHAR.
3078 / ENTER WITH "FCMP1" POINTING TO THE FILE NAME TO FIND, AND "FCMP2"
3079 / POINTING TO THE FILE NAME TO TRY AND MATCH. EXIT + 1 IF NO MATCH
3080 / AND EXIT + 2 IF MATCH. (IF NON-ZERO AC ON ENTRY, THE AC IS ASSUMED
3081 / TO HAVE THE VALUE FOR "FCMP2".)
3082
3083 FMATCH, 0
3084 SZA /SKIP IF NO ARGUMENT IN AC
3085 DCA FCMP2 /THIS ARGUMENT CAME IN THE AC
3086 TAD FCMP1 /GET ADDRESS OF FIRST FILE NAME BLOCK
3087 DCA GET6P /STORE IN A POINTER
3088 DCA GET6F /INIT FLAG FOR "GET6" ROUTINE
3089 TAD FCMP2 /GET ADDRESS OF SECOND FILE NAME BLOCK
3090 DCA FMATP /STORE IN A LOCAL POINTER
3091 DCA FMATF /INIT LOCAL FLAG
3092 TAD (-10 /8 CHARS TO DO
3093 DCA FMATC /STORE IN LOCAL COUNTER
3094
3095 FMAT1, NL4000 /SET 4000 /032 CJL
3096 TAD FMATF /GET FLAG
3097 DCA FMATF /RETURN FLAG, LINK CONTAINS STATUS
3098 TAD I FMATP /GET A WORD FROM THE SECOND NAME
3099 SZL /SKIP IF HIGH-ORDER WANTED NOW /032 CJL
3100 JMP FSWIT /JUMP IF LOW-ORDER WANTED NOW /032 CJL
3101 RTR;RTR;RTR /MOVE DOWN HIGH-ORDER /032 CJL
3102 SKP /DON'T BUMP YET /032 CJL
3103 FSWIT, ISZ FMATP /BUMP THE POINTER /032 CJL
3104 AND [77] /KEEP ONLY BOTTOM 6 BITS /016 CJL
3105 DCA FMATT /STORE IN A TEMP
3106 GET6 /NOW GET A CHAR FROM FIRST NAME
3107 TAD (-77 /CHECK IF WILD
3108 SNA /SKIP IF NO
3109 JMP FMAT2 /NO MATCH CHECK ON A WILD CARD
3110 TAD [77] /RESTORE THE CHARACTER /014/016 CJL
3111 CIA /NEGATE FOR COMPARE
3112 TAD FMATT /COMPARE WITH SECOND FILE NAME
3113 SZA CLA /SKIP IF IS A MATCH
3114 JMP I FMATCH /THIS IS NOT A MATCH
3115
3116 FMAT2, ISZ FMATC /BUMP COUNTER
3117 JMP FMAT1 /LOOP, MORE TO CHECK
3118 ISZ FMATCH /BUMP RETURN FOR MATCH
3119 JMP I FMATCH /GOT A MATCH
3120
3121 FMATP, 0 /POINTER FOR "FMATCH"
3122 FMATC, 0 /COUNTER FOR "FMATCH"
3123 FMATF, 0 /FLAG FOR "FMATCH"
3124 FMATT, 0 /TEMP FOR "FMATCH"
3125 FCMP1, 0 /POINTER FOR FIRST FILE NAME BLOCK
3126 FCMP2, 0 /POINTER FOR SECOND FILE NAME BLOCK
3127 \f PAGE /014 CJL
3128 \f/ REMOTE LINK INPUT ROUTINE.
3129 / CALL = RPACK.
3130
3131 ILINK, 0
3132 TAD RETRY /SET UP A RE-TRY COUNT
3133 DCA ILINK6 /RE-TRY COUNT FOR INPUT ERRORS
3134
3135 ILINK0, JMS I (GETSOH) /FIRST GET THE "SOH" BYTE
3136 JMP ILINK2 /RETURN HERE ON TIME-OUT
3137 DCA ILINK9 /INIT CHECKSUM REGISTER
3138 TAD [RRLEN] /GET REMOTE RECEIVE BUFFER ADDRESS
3139 DCA ILINK8 /STORE IN LOCAL POINTER
3140 JMS I (GETIR) /GET A CHAR
3141 JMP ILINK2 /GOT A RETURN OR TIME-OUT
3142 DCA I ILINK8 /STORE LENGTH IN BUFFER
3143 TAD I ILINK8 /GET LENGTH CHAR BACK
3144 TAD (-40-1 /CHAR FUNCTION - LENGTH BYTE
3145 CIA /NEGATE FOR COUNTER
3146 DCA ILINK7 /STORE IN LOCAL COUNTER
3147
3148 ILINK1, ISZ ILINK8 /BUMP POINTER
3149 JMS I (GETIR) /GET NEXT CHAR
3150 JMP ILINK2 /GOT A RETURN
3151 DCA I ILINK8 /STORE IN BUFFER
3152 ISZ ILINK7 /BUMP COUNTER
3153 JMP ILINK1 /LOOP
3154
3155 ISZ ILINK8
3156 NL7777 /SET -1 /032 CJL
3157 DCA I ILINK8
3158 TAD ILINK9 /GET CALCULATED CHECKSUM
3159 JMS I [CKSUM] /CALCULATE 1 BYTE CHECKSUM
3160 CIA /NEGATE FOR COMPARE
3161 DCA ILINK7 /STORE TEMP
3162 JMS I (GETIR) /NOW GET CHECKSUM
3163 JMP ILINK2 /GOT A RETURN
3164 TAD ILINK7 /COMPARE WITH CALCULATED CHECKSUM
3165 SNA CLA /SKIP IF NOT SAME
3166 JMP ILINK4 /ARE SAME
3167
3168 ILINK2, CLA CLL /INSURE CLEAR AC
3169 ISZ ILINK6 /BUMP RE-TRY COUNTER
3170 JMP ILINK3 /CAN RE-TRY
3171 TAD (RPERMSG) /GET MESSAGE FOR FATAL PACKET ERROR /025 CJL
3172 JMP I [CLOOP7] /AND ABORT THE MESS
3173
3174 ILINK3, TAD ABFLAG /GET ABORT FLAG /044 CJL
3175 SZA CLA /SKIP IF NO
3176 JMP I (ABORT) /ABORT THIS
3177 JMS I (SNDNAK) /SEND BACK A "NAK"
3178 JMP ILINK0 /AND TRY AGAIN
3179 \fILINK4, TAD ABFLAG /GET ABORT FLAG /044 CJL
3180 SNA CLA /SKIP IF YES
3181 JMP I ILINK /NOPE, RETURN
3182 JMP I (ABORT)
3183
3184 ILINK6, 0 /LOCAL TO "ILINK"
3185 ILINK7, 0 /LOCAL TO "ILINK"
3186 ILINK8, 0 /LOCAL TO "ILINK"
3187 ILINK9, 0 /LOCAL TO "ILINK"
3188
3189 / HELP COMMAND ROUTINE. /024 CJL
3190
3191 HELPSRV,.-. /HELP ROUTINE
3192 JMS I [CRESET] /RESET CONSOLE ROUTINE STUFF
3193 JMS I [SCRIBE] /GIVE THEM THE
3194 HELPMSG /HELP MESSAGE
3195 TAD ESCHAR /GET THE ESCAPE CHARACTER
3196 JMS I [ESCPRNT] /PRINT IT
3197 JMS I [SCRIBE] /DO A
3198 CRLF /<CR>, <LF>
3199 ISZ HELPSRV /BUMP PAST ERROR RETURN
3200 JMP I HELPSRV /RETURN
3201
3202 / ROUTINE TO PRINT THE DATA IN THE RECEIVED PACKET.
3203
3204 PRIPAK, 0
3205 PRI8B; RRDTA /PRINT THE DATA
3206 JMS I [SCRIBE] /DO A /025 CJL
3207 CRLF /<CR>, <LF> /025 CJL
3208 JMP I PRIPAK /DONE
3209
3210 PAGE /014 CJL
3211 \f/ ROUTINE TO SERVICE A SEND REQUEST.
3212
3213 SNDSRV, 0
3214 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL
3215 TAD (MSEND) /FIRST SET MODE TO SEND
3216 DCA KMODE /PUT INTO MODE FLAG
3217 TAD LPTR /GET CURRENT LINE POINTER
3218 DCA PRSERR /SAVE LINE POSITION
3219 TAD PRSERR /GET LINE POSITION
3220 JMS I [DPARS] /TRY TO PARSE OFF A DEVICE NAME
3221 JMS SNDERROR /RETURN A DEVICE NAME ERROR /026 CJL
3222 SER1, DCA PRSERR /SAVE LINE POINTER /026 CJL
3223 TAD (FNBLK /GET FILE NAME BLOCK ADDRESS
3224 DCA FNPTR /STORE IN POINTER
3225 TAD PRSERR /GET STRING POINTER
3226 JMS I [PFNAM] /PARSE OFF THE FILE NAME
3227 JMS SNDERROR /FILE NAME PARSE ERROR /026 CJL
3228 SER2, DCA PRSERR /SAVE THE STRING POINTER /026 CJL
3229 TAD PRSERR /GET THE STRING POINTER
3230 JMS I [NOSP] /FIND THE END OF STRING
3231 SKP /GOT END OF STRING HERE
3232 JMS SNDERROR /SYNTAX ERROR /026 CJL
3233 SER3, DCA PRSERR /RETURN POINTER /026 CJL
3234 TAD DEVNUM /GET THE DEVICE NUMBER PARSED
3235 JMS I [HFETCH] /FETCH A HANDLER FOR THIS
3236 JMS SNDERROR /HANDLER FETCH ERROR /026 CJL
3237 SER4, DCA FILFND /INIT FILE FOUND FLAG
3238 DCA INIFLG /CLEAR THE INIT DONE FLAG
3239 NL0001 /INITIALIZE DIRECTORY /028 CJL
3240 DCA SLFLAG /LOOKUP FLAG /028 CJL
3241 SNDSV1, TAD (FNBLK /GET FILE NAME BLOCK ADDRESS
3242 DCA I (FCMP1) /SET FOR FILE TO FINE
3243 TAD SLFLAG /GET DIRECTORY FLAG /028 CJL
3244 JMS I (LUKUP) /FIND A MATCH FOR THIS FILE
3245 JMS SNDERROR /DIRECTORY I/O ERROR /026 CJL
3246 SER5, JMP S00 /FILE NOT FOUND /026 CJL
3247 ISZ FILFND /BUMP FILE FOUND COUNT
3248 DCA SLFLAG /DON'T INITIALIZE LOOKUP AGAIN
3249 JMS I (SNDPRO) /PROCESS THIS FILE FOR SEND
3250 JMS SNDERROR /ERROR IN FILE SEND PROCESS /026 CJL
3251 SER6, TAD WILDF /WAS WILD CARD FILE SPEC? /026 CJL
3252 SZA CLA /SKIP IF NO
3253 JMP SNDSV1 /GOT WILD CARD, TRY FOR NEXT
3254 S00, TAD FILFND /CHECK FOR ANY FILES FOUND
3255 SNA CLA /SKIP IF YES
3256 JMS SNDERROR /RETURN FILE NOT FOUND ERROR /026 CJL
3257 SER7, JMS BRKXMT /BREAK THE SEND /026 CJL
3258 TAD PRSERR /GET CURRENT CURSOR POSITION
3259 DCA LPTR /UPDATE
3260 ISZ SNDSRV /BUMP RETURN
3261 JMP I SNDSRV /AND DONE
3262 \f/ SEND ERRORS COME HERE. /026 CJL
3263
3264 SNDERRO,.-. /SEND ERROR ROUTINE
3265 CLA /CLEAN UP
3266 TAD SNDERROR /GET CALLER
3267 JMS I [SRCHTABLE] /GO MATCH IT
3268 SNERTABLE-1-1 /IN ERROR TABLE
3269 JMP I SNDSRV /TAKE ERROR EXIT WITH MESSAGE ADDRESS IN AC
3270
3271 / SEND ERROR MESSAGE DISPATCH TABLE. /026 CJL
3272
3273 SNERTAB,-SER1; DNERMSG /DEVICE NAME ERROR
3274 -SER2; FNERMSG /FILE NAME ERROR
3275 -SER3; FSERMSG /FILE NAME SYNTAX ERROR
3276 -SER4; SHFEMSG /HANDLER FETCH ERROR
3277 -SER5; SDERMSG /DIRECTORY I/O ERROR
3278 -SER6; SNDEMSG /SEND ERROR
3279 -SER7; NOTFND /LOOKUP
3280 0 /THIS ENDS THE LIST
3281
3282 FILFND, 0 /HOLDS COUNT OF # OF FILES FOUND
3283 SLFLAG, .-. /LOOKUP INITIALIZE FLAG /028 CJL
3284 FNBLK, 0
3285 0
3286 0
3287 0
3288 \f/ ROUTINE TO RE-SET THE SEND.
3289
3290 BRKXMT, .-.
3291 CLA CLL /INSURE CLEAR AC
3292 DCA INIFLG /CLEAR THE INIT SEND FLAG
3293 FPACK /FORMAT A PACKET
3294 NODATA /NO DATA FOR THIS PACKET
3295 STEOT /"EOT" PACKET TYPE
3296 SPACK /SEND THE PACKET
3297 1 /READ RESPONSE /042 CJL
3298 0 /DO NOT DISPATCH /042 CJL
3299 JMP I BRKXMT /DONE
3300
3301 / ROUTINE TO SEND OUT A NAK WITHOUT DISTURBING THE NORMAL PACKET BUFFER.
3302
3303 SNDNAK, 0
3304 NL7777 /-1 /042 CJL
3305 TAD CURSEQ /ADD ON CURRENT SEQUENCE NUMBER /042 CJL
3306 AND [77] /MODULO 64 /042 CJL
3307 TAD [40] /TAKE CHAR(SEQUENCE NUMBER) /042 CJL
3308 DCA NAKPAK+2 /PUT IN NAK PACKET BUFFER
3309 TAD NAKPAK+1 /GET LENGTH
3310 TAD NAKPAK+2 /GET SEQ
3311 TAD NAKPAK+3 /GET TYPE
3312 JMS I [CKSUM] /CALCULATE CHECKSUM
3313 DCA NAKPAK+4 /PUT IN CHECKSUM
3314 TAD REOL /GET ANY EOL REQUIRED
3315 TAD [-40] /UN-CHAR IT /014/016 CJL
3316 SNA /SKIP IF USING
3317 NL7777 /NO EOL, PUT IN -1 INSTEAD /032 CJL
3318 DCA NAKPAK+5 /PUT EOL IN
3319 REM8B; NAKPAK /SEND NAK TO REMOTE
3320 JMP I SNDNAK /DONE
3321
3322
3323 NAKPAK, CNTRLA /MARK /042 CJL
3324 " &77+3 /LENGTH OF NAK PACKET /042 CJL
3325 .-. /SEQUENCE NUMBER GOES HERE /042 CJL
3326 STNAK /DATA TYPE
3327 .-. /CHECKSUM /042 CJL
3328 .-. /<EOL> IF USED /042 CJL
3329 -1 /TERMINATE
3330
3331 / FILENAME BUFFER. /014 CJL
3332
3333 NAMBUFF,ZBLOCK 12 /FILENAME.EXTENSION (WITH TERMINATOR) GOES HERE
3334 \f PAGE /014 CJL
3335 \f/ ROUTINE TO SERVICE A "GET" COMMAND.
3336
3337 GETSRV, 0
3338 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL
3339 TAD (MREC) /GET OUR MODE VALUE /045 CJL
3340 DCA KMODE /SETUP NOW /045 CJL
3341 TAD LPTR /GET CURRENT LINE POINTER
3342 DCA PRSERR /SAVE
3343 TAD PRSERR /RE-GET IT
3344 JMS I [DPARS] /PARSE OFF THE DEVICE NAME /006/014 CJL
3345 JMP GSRV50 /ERROR IN DEVICE NAME /006
3346 JMS I [NOSP] /FIND BEGINNING OF A FILE NAME
3347 JMP GSRV22 /GOT <EOL>, NO FILE NAME /006/014 CJL
3348 DCA GSRV90 /STORE BEGINNING ADDRESS
3349 TAD GSRV90 /NOW WE LOOK FOR
3350 JMS I [SP] /THE END OF THE LINE
3351 SKP /GOT THE END OF THE LINE HERE
3352 JMP .-2 /NOT END YET, CONTINUE
3353 DCA PRSERR /STORE POINTER TO EOL
3354 NL7777 /SET -1 /032 CJL
3355 DCA I PRSERR /TERMINATE FILE NAME WITH -1
3356 DCA CURSEQ /RE-SET THE SEQUENCE
3357 TAD GSRV90 /GET ADDRESS OF FILE NAME
3358
3359 GSRV10, FPACK /FORMAT THE PACKET
3360 GSRV90, 0 /DATA ADDRESS HERE
3361 STRIN /RECIEVE INIT PACKET
3362
3363 GSRV12, SPACK /SEND THE PACKET
3364 1 /GET RESPONSE
3365 GSRV80-2 /DISPATCH TABLE /027 CJL
3366
3367 / SERVICE A NAK OR UNDEFINED.
3368
3369 GSRV15, ISZ RTRYC /BUMP THE RE-TRY COUNTER
3370 JMP GSRV12 /TRY AGAIN
3371 JMP I GETSRV /GIVE UP
3372
3373 / SERVICE A SEND/INIT FROM THE REMOTE.
3374
3375 GSRV20, JMS I (INPSRV) /HANDLE JUST LIKE A RECEIVE
3376 JMP GSRV21 /ERROR RETURN FROM "INPSRV"
3377 ISZ GETSRV /BUMP RETURN FOR NO ERROR
3378 TAD PRSERR /UPDATE THE CURRENT LINE POINTER
3379 DCA LPTR
3380 GSRV21, JMP I GETSRV
3381
3382 GSRV22, CLA CLL /MAKE SURE WE ARE CLEAR /009/014 CJL
3383 TAD [NOTFND] /GET ERROR MESSAGE ADDRESS /025 CJL
3384 JMP I GETSRV /TAKE ERROR RETURN /009/014 CJL
3385
3386 / GOT AN ERROR PACKET, DISPLAY ERROR AND ABORT.
3387
3388 GSRV40, JMS I [PRIPAK] /PRINT OUT THE ERROR PACKET
3389 JMP I GETSRV /TAKE THE ERROR EXIT
3390 \f/ GOT DEVICE ERROR. /006/014 CJL
3391
3392 GSRV50, CLA CLL /ENSURE CLEAR AC /006/014 CJL
3393 TAD (DNERMSG) /GET ERROR MESSAGE ADDRESS /025 CJL
3394 JMP I GETSRV /TAKE ERROR RETURN /006/014 CJL
3395
3396 / DISPATCH TABLE.
3397
3398 GSRV80, STERR; GSRV40 /ERROR PACKET RETURNED
3399 STSIN; GSRV20 /SEND INIT PACKET RETURNED
3400 STNAK; GSRV15 /NAK PACKET RETURNED
3401 0 /TERMINATE TABLE
3402 \f/ ROUTINE TO SERVICE A "RECEIVE" COMMAND.
3403
3404 RECSRV, 0
3405 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL
3406 TAD (MREC) /GET OUR MODE VALUE /045 CJL
3407 DCA KMODE /SETUP NOW /045 CJL
3408 TAD LPTR /GET CURRENT LINE POINTER
3409 DCA PRSERR /SAVE IT
3410 TAD PRSERR /GET IT BACK
3411 JMS I [DPARS] /PARSE OFF DEVICE NAME /018 CJL
3412 JMP RECS30 /ERROR IN DEVICE NAME /018 CJL
3413 JMS I [NOSP] /CHECK IF BEGINNING OF FILE NAME /014 CJL
3414 SKP /GOT <EOL> HERE /018 CJL
3415 JMP RECS60 /SOMETHING ELSE ON LINE, ERROR /014 CJL
3416 DCA PRSERR /SAVE CURRENT LINE POINTER /018 CJL
3417 RPACK /GET SEND/INIT PACKET FROM REMOTE
3418 JMS I (DISPATCH) /DISPATCH BASED ON RRTYP /031 CJL
3419 RECS80-2 /TABLE ADDRESS /027/031 CJL
3420 JMP RECS60 /DON'T KNOW WHAT IT IS
3421
3422 / GOT A SEND INIT PACKET.
3423
3424 RECS10, JMS I (INPSRV) /OFF TO HANDLE INPUT
3425 JMP RECS60 /ERROR RETURN
3426
3427 / TAKE THE NON-ERROR RETURN.
3428
3429 RECS20, ISZ RECSRV /BUMP FOR NON-ERROR RETURN
3430 TAD PRSERR /GET CURRENT CURSOR POSITION /018 CJL
3431 DCA LPTR /UPDATE IT /018 CJL
3432 JMP I RECSRV
3433
3434 / GOT ERROR IN DEVICE NAME. /018 CJL
3435
3436 RECS30, CLA CLL /CLEAN UP /018 CJL
3437 TAD (DNERMSG) /GET ERROR MESSAGE ADDRESS /025 CJL
3438 JMP I RECSRV /TAKE ERROR RETURN /018 CJL
3439
3440 / TAKE THE ERROR RETURN.
3441
3442 RECS60, CLA
3443 JMP I RECSRV /TAKE ERROR EXIT
3444
3445 / DISPATCH TABLE.
3446
3447 RECS80, STSIN; RECS10 /SEND INIT PACKET DISPATCH
3448 STEOT; RECS60 /END OF CONNECTION
3449 STBRK; RECS20 /BREAK TRANSMISSION
3450 0
3451
3452 RECS90, 0 /TEMP FOR "RECSRV"
3453 \f/ KEYBOARD LINE BUFFER. /014 CJL
3454
3455 LINBUF, ZBLOCK LINSIZE /LINE BUFFER
3456
3457 PAGE /014 CJL
3458 \f/ ROUTINE TO SERVICE INPUT OF A FILE.
3459
3460 INPSRV, 0
3461 JMS I (SETINI) /SET UP INIT REGISTERS
3462 DCA OFFLG /INITIALIZE OUTPUT FILE FLAG /036 CJL
3463 CIF USRFLD /GOTO USR FIELD /037 CJL
3464 JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /037 CJL
3465 RESET /RESET TABLES /037 CJL
3466 DCA CURSEQ /RE-SET THE SEQUENCE NUMBER
3467
3468 FPACK /FORMAT A PACKET
3469 INIDAT /PACKET DATA ADDRESS
3470 STACK /"ACK" PACKET TYPE
3471
3472
3473 INPS01, SPACK /SEND A PACKET
3474 1 /AWAIT RESPONSE
3475 INPS91-2 /DISPATCH TABLE ADDRESS /027 CJL
3476
3477 / NAK OR UNDEFINED RESPONSE HERE.
3478
3479 INPS02, ISZ RTRYC /GOT A NAK, CHECK RE-TRY COUNT
3480 JMP INPS01 /RE-TRY THE INIT
3481 JMS INPERROR /GIVE UP /025 CJL
3482
3483 IER02= . /ERROR TABLE ADDRESS /039 CJL
3484
3485 INPS03, FPACK /FORMAT A PACKET
3486 NODATA /NO DATA
3487 STACK /"ACK" PACKET TYPE
3488
3489 INPS05, SPACK /SEND A PACKET
3490 1 /AWAIT RESPONSE
3491 INPS90-2 /DISPATCH TABLE ADDRESS /027 CJL
3492 JMS INPERROR /UNDEFINED RESPONSE /025 CJL
3493
3494 IER05= . /ERROR TABLE ADDRESS /039 CJL
3495
3496 / GOT A DATA PACKET, WRITE TO OUTPUT FILE.
3497
3498 INPS10, TAD OFFLG /CHECK THE OUTPUT FILE FLAG
3499 SNA CLA /SKIP IF OUTPUT FILE OPEN
3500 JMS INPERROR /ABORT AND EXIT /025 CJL
3501 IER10, JMS I (WRIPAK) /WRITE THE PACKET TO THE FILE /039 CJL
3502 JMS INPERROR /ERROR WRITING PACKET /025 CJL
3503 IER11, JMP INPS03 /LOOP /039 CJL
3504 \f/ GOT A FILE HEADER PACKET, OPEN FILE.
3505
3506 INPS20, TAD OFFLG /CHECK IF OUTPUT FILE OPEN
3507 SZA CLA /SKIP IF NO
3508 JMS INPERROR /ABORT IF FILE ALREADY OPEN /025 CJL
3509 IER20, TAD I [RRLEN] /GET CURRENT PACKET LENGTH /039 CJL
3510 TAD (-40-3 /CALCULATE LENGTH OF DATA
3511 SPA /SKIP IF DATA IN THE PACKET
3512 JMS INPERROR /ELSE AN ERROR /025 CJL
3513 IER21, TAD (RRDTA) /CALCULATE LAST BYTE IN DATA /039 CJL
3514 DCA INPS81 /STORE IN POINTER
3515 NL7777 /SET -1 /032 CJL
3516 DCA I INPS81 /TERMINATE NAME WITH A MINUS WORD
3517 TAD (FNBLK /GET ADDRESS OF FILE NAME BLOCK
3518 DCA FNPTR /SAVE FOR NAME PARSE
3519 TAD (RRDTA /GET ADDRESS OF DATA IN PACKET
3520 JMS I [PFNAM] /PARSE OFF THE FILE NAME
3521 JMS INPERROR /ERROR IN FILE NAME /025 CJL
3522
3523 / GET TARGET DEVICE.
3524
3525 IER23, CLA CLL /CLEAR AC FROM FILE NAME PARSE /039 CJL
3526 TAD DEVNUM /GET DEVICE NUMBER PARSED /006
3527 DCA ODNUMB /SAVE OUTPUT DEVICE NUMBER
3528 TAD ODNUMB /GET NUMBER BACK
3529 JMS I [HFETCH] /FETCH HANDLER FOR THIS DEVICE
3530 JMS INPERROR /HANDLER FETCH ERROR /025 CJL
3531 IER24, TAD (FNBLK) /GET ADDRESS OF FILE NAME BLOCK /039 CJL
3532 DCA INPS22 /PUT IN CALL
3533 TAD ODNUMB /GET DEVICE NUMBER
3534 CIF USRFLD /GOTO USR FIELD /020 CJL
3535 JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL
3536 ENTER /ENTER TENTATIVE FILE /020 CJL
3537 INPS22, 0 /
3538 0 /
3539 JMS INPERROR /NO DIRECTORY ROOM /025 CJL
3540 IER22, TAD INPS22 /GET NEW FILE START BLOCK /039 CJL
3541 DCA FSBLK /SAVE
3542 TAD INPS22+1 /GET INDICATED MAXIMUM FILE SIZE /021 CJL
3543 IAC /GIVE ONE MORE THAN 2 LESS /021 CJL
3544 DCA FLEN /SAVE AS DANGER COUNT /021 CJL
3545 ISZ OFFLG /SET FLAG FOR OUTPUT FILE OPEN
3546 NL7777 /INDICATE INITIALIZATION /020 CJL
3547 JMS I [PUTBYTE] /INITIALIZE OUTPUT FILE ROUTINE /020 CJL
3548 HLT /THIS CAN'T HAPPEN! /020 CJL
3549 TAD FNPTR /GET POINTER TO 6 BIT FILE NAME
3550 JMS I [FILN8] /MAKE 8 BIT FORMATTED STRING
3551 JMS I [SCRIBE] /TELL THEM
3552 FRECMSG /WE ARE RECEIVING
3553 PRI8B; NAMBUF /WHICH FILE WE ARE RECEIVING
3554 JMS I [SCRIBE] /DO A
3555 CRLF /<CR>, <LF>
3556 JMP INPS03 /LOOP
3557 \f/ GOT AN END OF FILE PACKET.
3558
3559 INPS30, TAD OFFLG /ANY OUTPUT FILE OPEN?
3560 SNA CLA /SKIP IF YES
3561 JMS INPERROR /ERROR /025 CJL
3562 IER30, JMS I [FILCLOSE] /CLOSE THE FILE /020/039 CJL
3563 JMS INPERROR /ERROR CLOSING THE FILE /025 CJL
3564 IER31,/ DCA OFFLG /RE-SET FILE OPEN FLAG /D009/039 CJL
3565 JMP INPS03 /CONTINUE
3566
3567 / GOT AN END OF TRANSMISSION PACKET.
3568
3569 INPS40, TAD OFFLG /WAS A FILE OPEN?
3570 SZA CLA /SKIP IF NO
3571 JMS I [FILCLOSE] /CLOSE ANY OPEN FILE /020 CJL
3572 NOP /ERROR CLOSING THE FILE **** FIX THIS ****
3573 FPACK /FORMAT A PACKET
3574 NODATA /NO DATA IN PACKET
3575 STACK /"ACK" PACKET TYPE
3576
3577 SPACK /SEND THE PACKET
3578 0 /NO RESPONSE
3579 ISZ INPSRV /BUMP RETURN FOR NO ERROR
3580 JMP I INPSRV /TAKE NON-ERROR EXIT
3581
3582 / GOT AN ERROR PACKET.
3583
3584 INPS50, JMS I [PRIPAK] /PRINT THE PACKET DATA
3585 JMP I INPSRV /AND TAKE THE ERROR EXIT /009/014 CJL
3586
3587 / INPUT ERRORS COME HERE. /025 CJL
3588
3589 INPERRO,.-. /INPUT ERROR ROUTINE /025 CJL
3590 FPACK /FORMAT A PACKET /025 CJL
3591 NODATA /NO DATA /025 CJL
3592 STBRK /"BREAK LINK" PACKET TYPE /025 CJL
3593 SPACK /SEND THE PACKET /025 CJL
3594 0 /NO RESPONSE /025 CJL
3595 TAD INPERROR /GET CALLER /025 CJL
3596 JMS I [SRCHTABLE] /TRY TO FIND A MATCH /025 CJL
3597 INERTABLE-1-1 /IN ERROR TABLE /025 CJL
3598 SNA /SKIP IF FOUND PARTICULAR MESSAGE /025 CJL
3599 TAD (RERRMSG) /ELSE USE GENERAL MESSAGE /025 CJL
3600 JMP I INPSRV /TAKE ERROR RETURN /025 CJL
3601
3602 / TEMPS FOR "INPSRV".
3603
3604 INPS80, 0
3605 INPS81, 0
3606 \f PAGE /014 CJL
3607 \f/ DISPATCH TABLES FOR "INPSRV".
3608
3609 INPS90, STDAT; INPS10 /HANDLE DATA PACKETS
3610 STEOF; INPS30 /HANDLE EOF PACKET
3611 STEOT; INPS40 /HANDLE END OF TRANSMISSION PACKET
3612 STFIL; INPS20 /HANDLE FILE NAME PACKET
3613 STERR; INPS50 /HANDLE ERROR PACKET
3614 0 /TERMINATE TABLE
3615
3616 INPS91, STNAK; INPS02 /HANDLE A NAK PACKET
3617 STFIL; INPS20 /HANDLE FILE NAME PACKET
3618 STERR; INPS50 /HANDLE ERROR PACKET
3619 0 /TERMINATE TABLE
3620
3621 / INPUT ERROR MESSAGE DISPATCH TABLE. /025/039 CJL
3622
3623 INERTAB,-IER05; UPERMSG /UNDEFINED PACKET ERROR /025 CJL
3624 -IER11; DSFLMSG /DISK OVERFLOW ERROR /042 CJL
3625 -IER22; RIDEMSG /DIRECTORY FULL ERROR /025 CJL
3626 -IER23; RFLNMSG /RECEIVED FILE NAME ERROR /025 CJL
3627 -IER24; RHFEMSG /HANDLER FETCH ERROR /025 CJL
3628 -IER31; FCLEMSG /FILE CLOSE ERROR /025 CJL
3629 0 /THIS ENDS THE LIST /025 CJL
3630 \f/ ROUTINE TO CHECK FOR AN ALPHABETIC OR NUMERIC CHAR.
3631 / ENTER WITH THE CHAR IN THE AC.
3632 / EXIT + 2 IF ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.
3633 / EXIT + 1 IF NON-ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.
3634
3635 ALPNUM, 0
3636 JMS ALPHA /CHECK FOR ALPHA FIRST
3637 SKP /NON-ALPHA RETURN, MUST CHECK NUMERIC
3638 JMP ALPNM1 /IS ALPHA, TAKE RETURN + 2
3639 JMS NUMRC /CHECK IF NUMERIC
3640 SKP /NOT NUMERIC
3641 ALPNM1, ISZ ALPNUM /BUMP RETURN FOR ALPHA-NUMERIC
3642 JMP I ALPNUM /DONE
3643
3644
3645 / ROUTINE TO CHECK FOR AN ALPHABETIC CHARACTER.
3646 / ROUTINE ASSUMES UPPER CASE.
3647 / ENTER ROUTINE WITH CHAR IN THE AC.
3648 / EXIT + 2 IF THE CHAR IS ALPHABETIC WITH THE CHAR IN THE AC.
3649 / EXIT + 1 IF THE CHAR IS NOT ALPHABETIC WITH THE CHAR IN THE AC.
3650
3651 ALPHA, 0
3652 DCA ALPHA1 /STORE THE CHAR FOR RETURN
3653 TAD ALPHA1 /GET THE CHAR
3654 TAD (-"Z!200-1) /ADD ON UPPER LIMIT /034 CJL
3655 CLL /INIT LINK FOR A FLAG
3656 TAD ("Z-"A+1
3657 SZL /SKIP IF NOT A LETTER
3658 ISZ ALPHA /IS A LETTER, BUMP RETURN
3659 CLA CLL /CLEAR AC
3660 TAD ALPHA1 /RESTORE CHAR IN THE AC
3661 JMP I ALPHA /TAKE PROPER RETURN
3662
3663 ALPHA1, 0 /TEMP FOR ALPHA ROUTINE
3664
3665 / ROUTINE TO CHECK FOR A NUMERIC CHARACTER.
3666 / ENTER WITH THE CHAR TO CHECK IN THE AC.
3667 / EXIT + 2 IF NUMERIC WITH THE CHAR IN THE AC.
3668 / EXIT + 1 IF NON-NUMERIC WITH THE CHAR IN THE AC.
3669
3670 NUMRC, 0
3671 DCA NUMRC1 /SAVE THE CHAR FOR RETURN
3672 TAD NUMRC1 /GET THE CHAR BACK
3673 TAD (-"9!200-1) /ADD ON UPPER LIMIT /034 CJL
3674 CLL /INIT LINK FOR A FLAG
3675 TAD ["9-"0+1] /016 CJL
3676 SZL /SKIP IF NOT A DIGIT
3677 ISZ NUMRC /BUMP RETURN FOR NUMERIC
3678 CLA CLL /CLEAR AC
3679 TAD NUMRC1 /RESTORE CHAR IN THE AC
3680 JMP I NUMRC /DONE
3681
3682 NUMRC1, 0 /TEMP FOR NUMRC CHECK ROUTINE
3683 \f/ ROUTINE TO WRITE THE CURRENT INPUT PACKET TO THE OUTPUT FILE.
3684 / ENTER: NOTHING.
3685 / EXIT: + 2 = WRITE SUCCESSFUL.
3686 / + 1 = WRITE NOT SUCCESSFUL.
3687
3688 WRIPAK, 0
3689 TAD I [RRLEN] /GET LENGTH OF PACKET
3690 TAD (RRDTA-40-3 /CALCULATE END OF BUFFER
3691 DCA W90 /PUT INTO POINTER
3692 DCA I W90 /ZERO AFTER END OF BUFFER
3693 TAD (RRDTA /GET ADDRESS OF DATA
3694 DCA W90 /PUT INTO POINTER
3695
3696 W10, TAD I W90 /GET A CHAR FROM PACKET
3697 SNA /SKIP IF NOT END
3698 JMP W60 /END, EXIT
3699 CIA /NEGATE FOR COMPARE
3700 TAD RQCTL /COMPARE WITH CURRENT QUOTE CHAR
3701 SNA CLA /SKIP IF NOT QUOTE CHAR
3702 JMP W20 /IS QUOTE, HANDLE SPECIAL
3703 TAD W92 /WAS LAST CHAR A QUOTE?
3704 SZA CLA /SKIP IF NO
3705 TAD (-100 /IT WAS, FIX UP THIS CHAR
3706 JMP W25 /HANDLE REST BELOW
3707
3708 W20, TAD W92 /CURRENT CHAR A QUOTE, CHECK PREVIOUS
3709 SNA CLA /SKIP IF YES
3710 JMP W30 /JUST THIS CHAR IS QUOTE, SET FLAG
3711
3712 W25, TAD I W90 /GET CHAR FROM BUFFER
3713 JMS I [PUTBYTE] /OUTPUT TO FILE /020 CJL
3714 JMP I WRIPAK /ERROR IN OUTPUT /M020 CJL
3715 JMP W35 /FINISH BELOW
3716
3717 W30, NL0001 CLL /GOTA SET FLAG FOR QUOTE CHARACTER /032 CJL
3718
3719 W35, DCA W92 /SET UP QUOTE FLAG
3720 ISZ W90 /BUMP POINTER
3721 JMP W10 /LOOP
3722
3723 W60, ISZ WRIPAK /BUMP RETURN FOR OK
3724 JMP I WRIPAK /DONE
3725
3726 W90, 0 /POINTER FOR "WRIPAK"
3727 W92, 0 /TEMP FOR "WRIPAK"
3728 \f/ TABLE SEARCH ROUTINE. /025 CJL
3729
3730 / CALLING SEQUENCE:
3731
3732 / TAD VALUE /AC CONTAINS VALUE TO MATCH
3733 / JMS I [SRCHTABLE] /CALL ROUTINE
3734 / TABLE-2 /ADDRESS(TABLE)-2
3735 / RETURN /ALWAYS RETURNS HERE
3736
3737 / IF AC=0 THEN NO MATCH OCCURRED.
3738
3739 / IF AC IS NON-ZERO, THEN AC CONTAINS CORRESPONDING VALUE TO MATCH WHICH IS ALSO
3740 / STORED IN TABLEJUMP.
3741
3742 / TABLE FORMAT.
3743
3744 / -VALUE; CORRESPONDING VALUE /TABLE PAIR
3745 / ""; "" /ADDITIONAL PAIRS AS NECESSARY
3746 / 0 /ZERO TERMINATES THE TABLE
3747
3748 SRCHTAB,.-. /TABLE SEARCH ROUTINE
3749 DCA TABLEJUMP /SAVE PASSED VALUE TO MATCH
3750 TAD I SRCHTABLE /GET PASSED POINTER ARGUMENT
3751 DCA XR0 /STASH THE POINTER
3752 ISZ SRCHTABLE /BUMP PAST ARGUMENT
3753 SRCHLUP,ISZ XR0 /BUMP TO NEXT PAIR
3754 TAD I XR0 /GET A TABLE VALUE
3755 SNA /END OF TABLE?
3756 JMP I SRCHTABLE /YES, RETURN WITH CLEAR AC
3757 TAD TABLEJUMP /COMPARE TO DESIRED
3758 SZA CLA /SKIP IF IT MATCHES
3759 JMP SRCHLUP /JUMP IF NOT
3760 TAD I XR0 /GET CORRESPONDING VALUE
3761 DCA TABLEJUMP /STASH IT
3762 TAD TABLEJUMP /GET IT BACK
3763 JMP I SRCHTABLE /RETURN WITH CORRESPONDING VAUE IN AC
3764
3765 PAGE /014 CJL
3766 \f IFZERO 1 <
3767
3768 / OS8 DIRECTORY FILE DATA SETUP.
3769 / ENTER WITH THE DIRECTORY DATE WORD IN THE AC.
3770 / EXIT WITH THE DATE IN THE BUFFER "DATBUF".
3771
3772 FILD8, 0
3773 DCA FILD89 /SAVE THE DATE WORD
3774 TAD FILD89 /GET DATA WORD
3775 AND (7 /KEEP ONLY YEAR BITS
3776 TAD (116 /ADD 78 YEARS
3777 MQL /PUT INTO MQ REGISTER
3778 TAD (DATEYR /GET POINTER TO YEAR
3779 JMS DECCON /CONVERT TO ASCII DATE
3780 TAD FILD89 /GET DATE WORD BACK
3781 CLL RTR /SHIFT DAY DOWN
3782 RAR
3783 AND (37 /KEEP ONLY DAY BITS
3784 MQL /PUT IN MQ REGISTER
3785 TAD (DATEDA /GET POINTER TO DAY
3786 JMS DECCON /CONVERT TO ASCII DAY
3787 TAD FILD89 /GET DATE WORD BACK
3788 BSW /GET MONTH
3789 CLL RTR /DOWN
3790 AND (17 /KEEP ONLY MONTH BITS
3791 MQL /INTO MQ REGISTER
3792 TAD (DATEMO /GET ADDRESS OF WHERE TO PUT MONTH
3793 JMS DECCON /CONVERT
3794 JMP I FILD8 /ALL DONE
3795
3796 FILD89, 0 /TEMP FOR "FILD8"
3797
3798
3799 / ROUTINE TO CONVERT A BINARY VALUE INTO A TWO DIGIT ASCII DECIMAL NUMBER.
3800 / ENTER WITH WHERE TO STORE THE CONVERTED NUMBER IN THE AC AND THE NUMBER IN THE
3801 / MQ REGISTER.
3802
3803 DECCON, 0
3804 DCA DECC20 /STORE THE POINTER
3805 TAD ("0&177-1 /GET AN ASCII ZERO
3806 DCA I DECC20 /START OUT WITH A ZERO
3807 MQA /GET THE BINARY VALUE
3808 DECC01, ISZ I DECC20 /BUMP
3809 TAD (-12 /SUB 10
3810 SMA /SKIP IF NO MORE DIVISION
3811 JMP DECC01 /ELSE KEEP GOING
3812 TAD (12+"0&177 /CONVERT REMAINDER TO ASCII
3813 ISZ DECC20 /BUMP POINTER
3814 DCA I DECC20 /STORE
3815 / JMS FMTDAT /FORMAT FOR PRINTING /D013
3816 JMP I DECCON /DONE
3817
3818 >
3819 \f IFZERO 1 <
3820
3821 DECC20, 0 /LOCAL POINTER TO DECCON
3822
3823 / ROUTINE TO SET UP THE DATE IN A MM-DD-YY FORMAT TO PUT IN FRONT OF A FILE TO
3824 / PASS THE FILES DATE (TEMPORY AND NOT PART OF THE KERMIT PROTOCOL).
3825
3826 FMTDAT, 0
3827 TAD DATEMO /GET FIRST CHAR OF DATE
3828 DCA FDATE /MOVE IT
3829 TAD DATEMO+1
3830 DCA FDATE+1
3831 TAD DATEDA
3832 DCA FDATE+3
3833 TAD DATEDA+1
3834 DCA FDATE+4
3835 TAD DATEYR
3836 DCA FDATE+6
3837 TAD DATEYR+1
3838 DCA FDATE+7
3839 JMP I FMTDAT /QUICK AND DIRTY
3840
3841 DATBUF, "#&177 /FILE CREATION DATE ATTRIBUTE
3842 6+40 /LENGTH OF DATE (CHAR(X))
3843 DATEYR, 0 /ASCII YEAR GOES HERE
3844 0
3845 DATEMO, 0 /ASCII MONTH GOES HERE
3846 0
3847 DATEDA, 0 /ASCII DAY GOES HERE
3848 0
3849 -1 /TERMINATE
3850
3851 / FORMATTED DATE GOES HERE.
3852
3853 SETDAT,"ANGLEBRACKET&177 /COMMENT SIGN
3854
3855 FDATE, 0
3856 0
3857 "-&177
3858 0
3859 0
3860 "-&177
3861 0
3862 0
3863 12
3864 15
3865 -1
3866
3867 >
3868 \f/ DIRECTORY LOOKUP ROUTINE. /028 CJL
3869
3870 / CALLING SEQUENCE:
3871
3872 / NL0001 /IF INITIALIZING THE DIRECTORY
3873
3874 / OR
3875
3876 / CLA /CLEAR AC IF SUBSEQUENT CALL
3877
3878 / JMS I (LUKUP) /CALL ROUTINE
3879 / I/O ERROR /DIRECTORY I/O ERROR RETURN WITH AC DIRTY
3880 / NOT FOUND /FILE NOT FOUND RETURN
3881 / FOUND /LATEST FILE MATCHES REQUEST
3882
3883 / SETS FLEN TO -(FILE LENGTH) IN RECORDS.
3884
3885 / SETS FSBLK TO STARTING RECORD OF FILE.
3886
3887 / MODIFIES DIRECTORY SEGMENT SLIGHTLY (NOT TO BE WRITTEN BACK).
3888
3889 / DEPENDS ON DIRXR BEING UNTOUCHED BY OTHER ROUTINES.
3890
3891 LUKUP, .-. /DIRECTORY LOOKUP ROUTINE
3892 SNA /INITIALIZING DIRECTORY?
3893 JMP NXTFILE /NO, JUST GET ANOTHER FILE IF POSSIBLE
3894 NEXTSEG,DCA DIRRECORD /STORE LATEST DIRECTORY SEGMENT RECORD
3895 JMS I HNDADR /CALL I/O HANDLER
3896 PAGCNT^100+DIRFLD /READ IN A DIRECTORY SEGMENT
3897 DIRBUFFER /DIRECTORY I/O BUFFER
3898 DIRRECO,.-. /WILL BE LATEST SEGMENT NUMBER
3899 JMP I LUKUP /I/O ERROR, TAKE DIRTY IMMEDIATE RETURN
3900 CDF DIRFLD /GOTO DIRECTORY FIELD
3901 TAD I (FRSTRECORD) /GET FIRST RECORD OF FIRST ENTRY
3902 DCA FSBLK /STASH IT
3903 TAD (ENTSTRT-1) /POINT TO
3904 DCA DIRXR /ENTRIES
3905 LOOKLUP,TAD I DIRXR /GET FIRST WORD OF ENTRY
3906 SNA /SKIP IF NOT EMPTY
3907 JMP EMPENTRY /JUMP IF EMPTY ENTRY
3908 DCA FNAME /STORE FIRST FILENAME WORD
3909 TAD I DIRXR /GET NEXT
3910 DCA FNAME+1 /STORE SECOND FILENAME WORD
3911 TAD I DIRXR /GET NEXT
3912 DCA FNAME+2 /STORE THIRD FILENAME WORD
3913 TAD I DIRXR /GET NEXT
3914 DCA FNAME+3 /STORE EXTENSION WORD
3915 NL7777 /BACKUP
3916 TAD I (AIWNUMBER) /GET ADDITIONAL INFORMATION WORD COUNT
3917 DCA AIWCNT /STASH THE COUNTER
3918 DCADATW,DCA DATWORD /CLEAR THE DATE WORD
3919 TAD DCADATW/(DCA DATWORD)/GET STORING INSTRUCTION
3920 DCA AIWSTORE /STORE IN-LINE
3921 JMP AIWTEST /START LOOP THERE
3922 \fAIWLUP, TAD I DIRXR /GET A WORD FROM ENTRY
3923 AIWSTOR,DCA DATWORD+.-. /STORE IN PROPER WORD
3924 ISZ AIWSTORE /BUMP TO NEXT INSTRUCTION
3925 AIWTEST,ISZ AIWCNT /DONE ALL ADDITIONAL INFORMATION WORDS?
3926 JMP AIWLUP /NO, KEEP GOING
3927 TAD I DIRXR /GET THE FILE LENGTH
3928 SNA /SKIP IF VALID
3929 JMP TENTRY /JUMP IF ONLY TENTATIVE FILE (NO LENGTH)
3930 DCA FILENGTH /STORE FILE LENGTH
3931 CDF PRGFLD /BACK TO OUR FIELD
3932 / JMS I (FILTER) /CHECK IF WE LIKE THIS ONE
3933 TAD (FNAME) /POINT TO LATEST FILENAME
3934 JMS I (FMATCH) /CHECK FOR A MATCH
3935 JMP NXTFILE /FORGET THIS ONE, IT DIDN'T MATCH
3936 TAD FILENGTH /GET FILE LENGTH
3937 DCA FLEN /GIVE TO CALLER TO DESTROY
3938 TAD (FNAME) /POINT TO FILENAME
3939 JMS I [FILN8] /PUT IN CHARACTER FORM IN BUFFER
3940 ISZ LUKUP /BUMP TO FILE MATCH RETURN
3941 JMP FLEXIT /EXIT THERE
3942
3943 / COMES HERE FROM SUBSEQUENT CALL OR MATCH FAILURE.
3944
3945 NXTFILE,CDF DIRFLD /GOTO BUFFER FIELD
3946 TAD FILENGTH /GET LATEST FILE LENGTH
3947 SKP /DON'T DO EMPTY LENGTH
3948
3949 / COMES HERE TO BYPASS AN EMPTY ENTRY.
3950
3951 EMPENTR,TAD I DIRXR /GET LENGTH OF EMPTY
3952 CIA /WANT POSITIVE FORM
3953 TAD FSBLK /UPDATE TO NEXT FILE RECORD
3954 DCA FSBLK /STORE UPDATED VALUE
3955 TENTRY, ISZ I (FILECNT) /DONE WITH THIS SEGMENT?
3956 JMP LOOKLUP /NO, KEEP GOING
3957 TAD I (DIRLINK) /GET LINK TO NEXT SEGMENT
3958 CDF PRGFLD /BACK TO OUR FIELD
3959 SZA /END OF DIRECTORY?
3960 JMP NEXTSEGMENT /NO, GO DO NEXT SEGMENT
3961 FLEXIT, ISZ LUKUP /BUMP PAST I/O ERROR EXIT
3962 JMP I LUKUP /RETURN FOR FILE NOT FOUND
3963
3964 AIWCNT, .-. /ADDITIONAL INFORMATION WORD COUNTER
3965 DATWORD,.-. /DATE WORD STORED HERE (0000 IF NONE)
3966 ZBLOCK 7 /ROOM FOR MORE ADDITIONAL INFORMATION WORDS
3967 FILENGT,.-. /LATEST FILE LENGTH
3968 FNAME, ZBLOCK 4 /FILENAME AND EXTENSION STORED HERE
3969
3970 PAGE
3971 \f/ OS/8 FILE UNPACK ROUTINE. /019 CJL
3972
3973 / THIS ROUTINE UNPACKS BYTES FROM THE INPUT FILE ACCORDING TO THE CURRENT VALUE
3974 / OF FILMODE:
3975
3976 / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES ARE TREATED AS SEVEN-BIT ASCII
3977 / CHARACTERS BY STRIPPING THE HIGH-ORDER BIT. END OF FILE IS THE <^Z> CHARACTER
3978 / WHICH WILL BE SENT OR NOT ACCORDING TO THE CONTENTS OF OCTLZFLAG. IF
3979 / OCTLZFLAG CONTAINS NON-ZERO, THEN <^Z> WILL BE SENT AT <EOF>; THE NEXT CALL
3980 / WILL YIELD THE <EOF> RETURN. IF OCTLZFLAG CONTAINS ZERO, THEN DETECTION OF
3981 / <^Z> YIELDS THE <EOF> RETURN IMMEDIATELY.
3982
3983 / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES ARE TREATED AS EIGHT-BIT
3984 / CHARACTERS AND WILL BE SENT WITHOUT <^Z> CHECK. THE NEXT CALL AFTER THE LAST
3985 / BYTE OF THE LAST RECORD HAS BEEN SENT YIELDS THE <EOF> RETURN.
3986
3987 / CALLING CONSIDERATIONS:
3988
3989 / OCTLZFLAG MUST BE SETUP ACCORDINGLY IF IN ASCII MODE.
3990
3991 / FILMODE MUST BE SETUP ACCORDINGLY.
3992
3993 / FLEN MUST CONTAIN -(FILE LENGTH IN RECORDS) WHEN INITIALIZING THE INPUT FILE.
3994 / IT WILL BE MODIFIED BY CALLING THIS ROUTINE.
3995
3996 / FSBLK MUST CONTAIN THE THE STARTING RECORD WHEN INITIALIZING THE INPUT FILE.
3997
3998 / HNDADR MUST ALREADY BE SETUP TO CALL THE INPUT HANDLER.
3999
4000 / CALLING SEQUENCE:
4001
4002 / CLA /OR NL7777 IF INITIALIZING THE INPUT FILE
4003 / JMS I (GETBYTE) /CALL ROUTINE
4004 / I/O ERROR RETURN /FATAL INPUT ERROR OCCURRED; AC CONTAINS JUNK
4005 / END OF FILE /<EOF> OCCURRED
4006 / GOOD RETURN /AC CONTAINS LATEST SEVEN/EIGHT-BIT CHARACTER
4007
4008 GETBYTE,.-. /GET A BYTE ROUTINE
4009 SNA CLA /INITIALIZING?
4010 JMP I PUTC /NO, GO GET NEXT BYTE
4011 TAD FSBLK /GET STARTING RECORD OF INPUT FILE
4012 DCA GETRECORD /STORE IN-LINE
4013 GETNEWR,JMS I HNDADR /CALL I/O HANDLER
4014 PAGCNT^100+BUFFLD /READ SOME PAGES INTO BUFFER FIELD
4015 GETCORE,FILBUFFER /BUFFER ADDRESS
4016 GETRECO,.-. /WILL BE LATEST RECORD NUMBER
4017 JMP I GETBYTE /INPUT ERROR!
4018 TAD GETCORE/(FILBUFFER) /SETUP THE
4019 DCA BUFPTR /BUFFER POINTER
4020 \fGETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW
4021 JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE
4022 JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE
4023 TAD THIRD /GET THIRD BYTE
4024 JMS PUTC /SEND IT BACK
4025 TAD BUFPTR /GET THE POINTER
4026 TAD (-PAGCNT^200-FILBUFFER) /COMPARE TO LIMIT
4027 SZA CLA /SKIP IF AT END
4028 JMP GETLOOP /KEEP GOING
4029 ISZ GETRECORD /BUMP TO NEXT RECORD
4030 ISZ FLEN /DONE ALL RECORDS? (BINARY MODE ONLY)
4031 JMP GETNEWRECORD /NO, GO DO ANOTHER ONE
4032
4033 / BINARY <EOF> REACHED HERE.
4034
4035 JMP GETEOF /TAKE SKIP RETURN TO MAIN CALLER
4036
4037 PUTONE, .-. /SEND BACK A BYTE ROUTINE
4038 CDF BUFFLD /GOTO BUFFER FIELD
4039 TAD I BUFPTR /GET LATEST WORD
4040 AND [7400] /JUST THIRD-BYTE NYBBLE
4041 CLL RAL /MOVE UP
4042 TAD THIRD /GET OLD NYBBLE (IF ANY)
4043 RTL;RTL /MOVE UP NYBBLE BITS
4044 DCA THIRD /SAVE FOR NEXT TIME
4045 TAD I BUFPTR /GET LATEST WORD AGAIN
4046 JMS PUTC /SEND BACK CURRENT BYTE
4047 ISZ BUFPTR /BUMP TO NEXT WORD
4048 JMP I PUTONE /RETURN
4049
4050 PUTC, .-. /SEND BACK LATEST BYTE ROUTINE
4051 CDF PRGFLD /BACK TO OUR FIELD
4052 RAL /MOVE UP
4053 STL RAR /MOVE DOWN WITH BIT[0] SET
4054 AND FILMODE /KEEP ONLY GOOD BITS
4055 TAD [-CNTRLZ] /COMPARE TO <^Z>
4056 SNA /SKIP IF NOT ASCII MODE <EOF>
4057 JMP GETEND /JUMP IF ASCII MODE <EOF>
4058 GETUPZ, TAD [CNTRLZ] /RESTORE THE CHARACTER
4059 AND [377] /ENSURE EIGHT-BIT (MIGHT ALREADY BE SEVEN-BIT)
4060 ISZ GETBYTE /BUMP PAST <EOF> RETURN
4061 GETEOF, ISZ GETBYTE /BUMP PAST I/O ERROR RETURN
4062 JMP I GETBYTE /RETURN TO MAIN CALLER
4063
4064 / GOT <Z> IN ASCII MODE.
4065
4066 GETEND, TAD OCTLZFLAG /GET <^Z> DISPOSITION FLAG
4067 SNA CLA /SKIP IF SET
4068 JMP GETEOF /JUST RETURN <EOF> CONDITION
4069 TAD (GETEOF) /POINT TO <EOF>
4070 DCA PUTC /FOR NEXT TIME
4071 JMP GETUPZ /GIVE THEM BACK <^Z> THIS TIME
4072 \f/ OS/8 FILE PACK ROUTINE. /020 CJL
4073
4074 / THIS ROUTINE PACKS BYTES INTO THE OUTPUT FILE ACCORDING TO THE CURRENT VALUE
4075 / OF FILMODE:
4076
4077 / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES ARE TREATED AS SEVEN-BIT ASCII
4078 / CHARACTERS BY STRIPPING THE HIGH-ORDER BIT.
4079
4080 / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES ARE TREATED AS EIGHT-BIT
4081 / CHARACTERS AND WILL BE WRITTEN AS IS.
4082
4083 / CALLING CONSIDERATIONS:
4084
4085 / FILMODE MUST BE SETUP ACCORDINGLY.
4086
4087 / FLEN MUST CONTAIN -(MAXIMUM FILE LENGTH IN RECORDS) WHEN INITIALIZING THE
4088 / TENTATIVE OUTPUT FILE. IT WILL BE MODIFIED BY CALLING THIS ROUTINE.
4089
4090 / FSBLK MUST CONTAIN THE STARTING RECORD WHEN INITIALIZING THE TENTATIVE OUTPUT
4091 / FILE.
4092
4093 / HNDADR MUST ALREADY BE SETUP TO CALL THE OUTPUT HANDLER.
4094
4095 / CALLING SEQUENCE:
4096
4097 / NL7777 /ANY NEGATIVE VALUE
4098 / JMS I [PUTBYTE] /CALL ROUTINE TO INITIALIZE
4099 / IMPOSSIBLE /CAN'T RETURN HERE
4100 / GOOD RETURN /ALWAYS RETURNS HERE
4101
4102 / OR
4103
4104 / TAD (CHAR&377) /ANY EIGHT-BIT (OR LESS) VALUE
4105 / JMS I [PUTBYTE] /CALL ROUTINE TO PACK A CHARACTER
4106 / ERROR RETURN /I/O ERROR WHILE WRITING A BUFFER
4107 / GOOD RETURN /CHARACTER PACKED WITH NO ERRORS
4108
4109 / ALL RETURNS CLEAR THE AC.
4110
4111 PUTBYTE,.-. /OUTPUT A BYTE ROUTINE
4112 SPA /ARE WE INITIALIZING?
4113 JMP PUTINITIALIZE /YES
4114 AND FILMODE /REDUCE TO SEVEN-BIT/EIGHT-BIT
4115 DCA LATEST /SAVE LATEST CHARACTER
4116 CDF BUFFLD /GOTO BUFFER FIELD
4117 TAD LATEST /GET LATEST CHARACTER
4118 JMP I PUTNEXT /GO WHERE YOU SHOULD GO
4119
4120 PUTNEXT,.-. /EXIT ROUTINE
4121 ISZ PUTBYTE /BUMP TO GOOD RETURN
4122 PUTERRO,CLA CLL /CLEAN UP
4123 CDF PRGFLD /BACK TO OUR FIELD
4124 JMP I PUTBYTE /RETURN TO MAIN CALLER
4125 \fPUTINIT,CLA /CLEAN UP
4126 TAD FSBLK /GET STARTING RECORD OF TENTATIVE FILE
4127 DCA PUTRECORD /STORE IN-LINE
4128 DCA I (FLENGTH) /CLEAR ACTUAL FILE LENGTH
4129 PUTNEWR,TAD PUTCORE/(FILEBUFFER) /SETUP THE
4130 DCA BUFPTR /BUFFER POINTER
4131 PUTLOOP,JMS PUTNEXT /GET A CHARACTER
4132 DCA I BUFPTR /STORE IT
4133 TAD BUFPTR /GET POINTER VALUE
4134 DCA TEMPTR /SAVE FOR LATER
4135 ISZ BUFPTR /BUMP TO NEXT
4136 JMS PUTNEXT /GET A CHARACTER
4137 DCA I BUFPTR /STORE IT
4138 JMS PUTNEXT /GET A CHARACTER
4139 RTL;RTL /MOVE UP
4140 AND [7400] /ISOLATE HIGH NYBBLE
4141 TAD I TEMPTR /ADD ON FIRST BYTE
4142 DCA I TEMPTR /STORE COMPOSITE
4143 TAD LATEST /GET LATEST CHARACTER
4144 RTR;RTR;RAR /MOVE UP AND
4145 AND [7400] /ISOLATE LOW NYBBLE
4146 TAD I BUFPTR /ADD ON SECOND BYTE
4147 DCA I BUFPTR /STORE COMPOSITE
4148 ISZ BUFPTR /BUMP TO NEXT
4149 TAD BUFPTR /GET LATEST POINTER VALUE
4150 TAD (-PAGCNT^200-FILBUFFER) /COMPARE TO LIMIT
4151 SZA CLA /SKIP IF AT END
4152 JMP PUTLOOP /KEEP GOING
4153 CDF PRGFLD /BACK TO OUR FIELD
4154 ISZ FLEN /TOO MANY RECORDS?
4155 SKP /SKIP IF NOT
4156 JMP I PUTBYTE /TAKE ERROR RETURN
4157 JMS I HNDADR /CALL I/O HANDLER
4158 PAGCNT^100+BUFFLD+WRITE /WRITE SOME PAGES FROM BUFFER FIELD
4159 PUTCORE,FILBUFFER /BUFFER ADDRESS
4160 PUTRECO,.-. /WILL BE LATEST RECORD NUMBER
4161 JMP PUTERROR /OUTPUT ERROR!
4162 ISZ I (FLENGTH) /BUMP ACTUAL LENGTH
4163 ISZ PUTRECORD /BUMP TO NEXT RECORD
4164 JMP PUTNEWRECORD /KEEP GOING
4165
4166 BUFPTR, .-. /INPUT/OUTPUT BUFFER POINTER
4167
4168 / ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG.
4169
4170 OCTLZFL,OCLOSE /ZERO=DON'T SEND <^Z> AT <EOF>,
4171 /NON-ZERO=SEND <^Z> AT <EOF>
4172
4173 THIRD= PUTNEXT /THIRD BYTE TEMPORARY
4174
4175 TEMPTR= PUTONE /TEMPORARY BUFFER POINTER
4176 \f PAGE
4177 \f/ OUTPUT FILE CLOSE ROUTINE /020 CJL
4178
4179 / THIS ROUTINE CLOSES THE OPEN OUTPUT FILE ACCORDING TO THE CURRENT VALUE OF
4180 / FILMODE:
4181
4182 / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES PRIOR TO CLOSE ARE STRIPPED
4183 / SEVEN-BIT CHARACTERS. IF THE LAST CHARACTER SENT TO PUTBYTE (CONTENTS OF
4184 / LATEST) IS A <^Z>, THEN JUST CLOSE THE FILE. IF NOT, THEN IF ICTLZFLAG IS
4185 / NON-ZERO, INSERT A <^Z> CHARACTER INTO THE FILE AS <EOF> INDICATOR, ELSE JUST
4186 / CLOSE THE FILE.
4187
4188 / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES PRIOR TO CLOSE ARE EIGHT-BIT
4189 / CHARACTERS. IF NECESSARY, <NUL> CHARACTERS WILL BE APPENDED TO THE END OF THE
4190 / LAST BLOCK OF THE FILE TO FILL IT. THE FILE IS CLOSED OTHERWISE UNMODIFIED.
4191
4192 / CALLING CONSIDERATIONS.
4193
4194 / OFFLG MUST BE SET (OUTPUT FILE IS OPEN).
4195
4196 / FLENGTH MUST CONTAIN THE ACTUAL FILE LENGTH.
4197
4198 / LATEST MUST CONTAIN THE LAST BYTE SENT TO THE OUTPUT FILE VIA PUTBYTE (ASCII
4199 / MODE ONLY).
4200
4201 / ICTLZFLAG MUST BE SETUP ACCORDINGLY.
4202
4203 / FILMODE MUST BE SETUP ACCORDINGLY.
4204
4205 / CALLING SEQUENCE:
4206
4207 / CLA CLL /CLEAR AC
4208 / JMS I (FILCLOSE) /CALL ROUTINE
4209 / ERROR RETURN /ERROR WHILE CLOSING FILE
4210 / GOOD RETURN /FILE CLOSED PROPERLY
4211
4212 / ON RETURN, OFFLG WILL BE CLEAR; THE AC WILL BE CLEAR ALSO.
4213
4214 FILCLOS,.-. /OUTPUT FILE CLOSE ROUTINE
4215 TAD FILMODE /GET CURRENT FILE MODE
4216 SPA CLA /SKIP IF ASCII
4217 JMP CLOSIT /JUMP IF BINARY
4218 TAD LATEST /GET LATEST CHARACTER
4219 TAD [-CNTRLZ] /COMPARE TO <^Z>
4220 SZA CLA /SKIP IF <^Z> ALREADY IN FILE
4221 TAD ICTLZFLAG /GET <^Z> DISPOSITION FLAG
4222 SNA CLA /SKIP IF SET
4223 JMP CLOSIT /JUMP IF NOT
4224 TAD [CNTRLZ] /GET A <^Z>
4225 \fCLOSLUP,JMS I [PUTBYTE] /OUTPUT A BYTE
4226 JMP CLOSERROR /ERROR WHILE WRITING
4227 CLOSIT, TAD I (BUFPTR) /GET THE BUFFER POINTER
4228 TAD (-FILBUFFER) /COMPARE TO RESET VALUE
4229 SZA CLA /SKIP IF IT MATCHES
4230 JMP CLOSLUP /ELSE KEEP GOING
4231 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER
4232 CIF USRFLD /GOTO USR FIELD
4233 JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL
4234 CLOSE /CLOSE FILE
4235 FNBLK /=> FILENAME
4236 FLENGTH,.-. /ACTUAL FILE LENGTH
4237 CLOSERR,SKP CLA /ERROR WHILE CLOSING THE FILE
4238 ISZ FILCLOSE /BUMP RETURN IF NO ERRORS
4239 DCA OFFLG /CLEAR OUTPUT FILE OPEN FLAG
4240 JMP I FILCLOSE /RETURN TO CALLER
4241
4242 / ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG.
4243
4244 ICTLZFL,ICLOSE /ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z>
4245 /IF LAST CHARACTER WASN'T <^Z>
4246 \f/ SEND PROCESSING
4247
4248 SNDPRO, 0
4249 TAD INIFLG /CHECK IF SEND/INIT HAS BEEN DONE
4250 SZA CLA /SKIP IF NO
4251 JMP SNDP10 /RIGHT INTO FILE TRANSFER
4252 TAD (DEFCK /SET UP DEFAULT CHECKSUM
4253 DCA RCHKT
4254 TAD (DEFEOL /GET DEFAULT EOL
4255 DCA REOL /AND SET IT
4256 TAD (DEFQCTL /GET DEFAULT QUOTE CONTROL CHAR
4257 DCA RQCTL /AND SET IT UP
4258 TAD (DEFMAXL+40 /GET DEFAULT MAX BUFFER SIZE
4259 DCA RMAXL /SET IT UP
4260 DCA CURSEQ /RE-SET SEQUENCE NUMBER
4261 JMS I (SNDI00) /HANDLE "SEND-INIT"
4262 JMP I SNDPRO /TAKE ERROR RETURN /014 CJL
4263
4264 / SEND FILE HEADER DISPATCH ROUTINE
4265
4266 SNDP10, FPACK /FORMAT A PACKET
4267 NAMBUF /ADDRESS OF FILE HEADER FOR DATA
4268 STFIL /"FIL" PACKET TYPE
4269
4270 SNDP11, SPACK /SEND A PACKET
4271 1 /AWAIT RESPONSE
4272 SNDP96-2 /DISPATCH TABLE ADDRESS /026 CJL
4273
4274 / GOT A NAK OR UNDEFINED HERE
4275
4276 SNDP12, ISZ RTRYC /BUMP THE COUNTER
4277 JMP SNDP11 /TRY AGAIN
4278 JMP I SNDPRO /TAKE ERROR RETURN /014 CJL
4279
4280 / FILE CREATION DATE HANDLING
4281
4282 SNDP15, IFZERO 1 <
4283
4284 TAD RCAPAS /CHECK IF REMOTE SUPPORTS FILE
4285 AND (10 / ATTRIBUTES
4286 SNA CLA /SKIP IF YES
4287 JMP SNDP20 /SKIP IF NO
4288 FPACK /FORMAT PACKET
4289 DATBUF /DATE DATA
4290 STATT /"ATT" PACKET TYPE
4291
4292 SNDP16, SPACK /SEND THE PACKET
4293 1 /AWAIT RESPONSE
4294 SNDP98-2 /DISPATCH TABLE ADDRESS /027 CJL
4295 JMP I SNDPRO /TAKE ERROR RETURN /014 CJL
4296
4297 >
4298 \f/ GOT ACK HERE
4299
4300 SNDP20, JMS I [SCRIBE] /TELL THEM /025 CJL
4301 FSENMSG /WE ARE SENDING /025 CJL
4302 PRI8B; NAMBUF /TELL THEM THE NAME OF THE FILE
4303 JMS I [SCRIBE] /DO A /025 CJL
4304 CRLF /<CR>, <LF> /025 CJL
4305 JMS SLOOP
4306 SKP /ERROR RETURN
4307 ISZ SNDPRO /BUMP FOR NON-ERROR EXIT
4308 JMP I SNDPRO
4309 \f/ DATA SEND LOOP.
4310 / ROUTINE TO GET CHARS FROM THE INPUT BUFFER AND SEND THEM TO REMOTE
4311 / VIA PACKET TRANSFERS. RETURN + 1 IF ERROR, + 2 IF DONE.
4312
4313 SLOOP, 0
4314 JMS I (INIOPB) /INIT OUTPUT PACKET HOLD BUFFER
4315 NL7777 /INITIALIZE INPUT FILE ROUTINE /019 CJL
4316 SLOP01, JMS I (GETBYTE) /GET A FILE CHARACTER /019 CJL
4317 JMP I SLOOP /FATAL I/O ERROR /026 CJL
4318 JMP SLOP15 /HERE ON EOF
4319 JMS I (OPBUF) /PUT INTO PACKET BUFFER
4320 SKP /RETURN HERE ON BUFFER FULL
4321 JMP SLOP01 /RETURN HERE IF STILL ROOM
4322
4323 / PACKET IS FULL HERE, WE MUST SEND IT.
4324
4325 FPACK /FORMAT A PACKET
4326 HOLDBF /DATA ADDRESS
4327 STDAT /"DAT" PACKET TYPE
4328
4329 SLOP05, SPACK /SEND PACKET
4330 1 /AWAIT RESPONSE
4331 SLOP90-2 /RESPONSE TABLE ADDRESS /027 CJL
4332
4333 / HERE ON NAK OR FALL THRU ON UNDEFINED RESPONSE ABOVE.
4334
4335 SLOP10, ISZ RTRYC /BUMP THE RE-TRY COUNTER
4336 JMP SLOP05 /TRY AGAIN
4337 JMP I SLOOP /TAKE ERROR RETURN /026 CJL
4338
4339 / HERE ON END OF FILE -- SEND THEM WHAT WE HAVE.
4340
4341 SLOP15, TAD I (OP2) /GET THE POINTER /052 CJL
4342 TAD (-HOLDBF) /COMPARE TO EMPTY VALUE /052 CJL
4343 SNA CLA /SKIP IF NOT EMPTY /052 CJL
4344 JMP SLOP35 /JUMP IF EMPTY /052 CJL
4345 FPACK /FORMAT A PACKET
4346 HOLDBF /ADDRESS OF DATA
4347 STDAT /"DAT" PACKET TYPE
4348
4349 SLOP20, SPACK /SEND A PACKET
4350 1 /AWAIT RESPONSE
4351 SLOP92-2 /DISPATCH TABLE ADDRESS /027 CJL
4352
4353 / NAK FOR LAST PACKET.
4354
4355 SLOP25, ISZ RTRYC /BUMP RE-TRY COUNTER
4356 JMP SLOP20 /TRY AGAIN
4357 JMP I SLOOP /TAKE ERROR RETURN /026 CJL
4358 \f/ ACK FOR FINAL PACKET, SEND AN EOF PACKET.
4359
4360 SLOP35, JMS I [SNDP] /SEND A PACKET
4361 NODATA /NO DATA
4362 STEOF /MAKE IT AN EOF PACKET
4363 JMP I SLOOP /NAK, TAKE ERROR RETURN
4364 JMP I SLOOP /OTHER THAN ACK, NAK; TAKE ERROR RETURN /026 CJL
4365 ISZ SLOOP /EOF ACCEPTED, BUMP FOR GOOD RETURN
4366 JMP I SLOOP /TAKE GOOD RETURN
4367
4368 PAGE
4369 \fSLOP90, STACK; SLOP01 /ACK, CONTINUE
4370 STNAK; SLOP10 /NAK, HANDLE
4371 0
4372
4373 SLOP92, STACK; SLOP35 /ACK, CONTINUE
4374 STNAK; SLOP25 /NAK, HANDLE
4375 0
4376
4377 / COMMAND DISPATCH TABLE FOR SEND SERVICE.
4378
4379 SNDP96, STACK; SNDP15 /FILE HEADER ACKNOWLEDGED
4380 STNAK; SNDP12 /NAK RETURNED, RE-TRY
4381 0 /END OF TABLE
4382
4383 SNDP98, STACK; SNDP20 /DATE ATTRIBUTE ACKNOWLEDGED
4384 0 /END OF TABLE
4385 \f/ ROUTINE TO HANDLE A "SEND-INIT" COMMAND.
4386 / RETURN + 1 IF ERROR.
4387 / RETURN + 2 IF SUCCESSFUL.
4388
4389 SNDI00, 0
4390 FPACK /FORMAT A PACKET
4391 INIDAT /ADDRESS OF DATA FOR PACKET
4392 STSIN /"SIN" PACKET TYPE
4393
4394 SNDI02, SPACK /SEND A PACKET
4395 1 /AWAIT RESPONSE
4396 SNDI80-2 /RESPONSE TABLE TYPE /027 CJL
4397
4398 / HERE ON NAK OR UNDEFINED.
4399
4400 SNDI05, ISZ RTRYC /BUMP RE-TRY COUNTER
4401 JMP SNDI02 /TRY AGAIN
4402 JMP I SNDI00 /TAKE ERROR EXIT
4403
4404 / HERE ON ACK.
4405
4406 SNDI10, JMS SETINI /SET UP THE INIT REGISTERS
4407 NL0001 CLL /NOW FLAG THE SEND/INIT DONE /032 CJL
4408 DCA INIFLG /BY MAKING THIS NON-ZERO
4409 ISZ SNDI00 /BUMP FOR NON-ERROR RETURN
4410 JMP I SNDI00 /BACK TO MAIN SEND PROCESSING
4411
4412 SNDI80, STACK; SNDI10 /GOT AN ACK
4413 STNAK; SNDI05 /NAK
4414 0 /END OF TABLE
4415
4416
4417 / ROUTINE TO MOVE THE SEND/INIT OR RECEIVE/INIT PACKET INTO THE INIT REGISTERS.
4418
4419 SETINI, 0
4420 TAD (RMAXL /GET ADDRESS OF RECEIVE INIT REGISTERS
4421 DCA MQ /SETUP FOR CLEAR ROUTINE /032 CJL
4422 TAD (RMAXL-INITEND) /GET -(NUMBER OF REGISTERS) /022 CJL
4423 CLEAR /CLEAR OUT A CHUNK OF MEMORY /M013
4424 / TAD (RMAXL /GET ADDRESS OF RECEIVE INIT REGISTERS
4425 / DCA MQ /SETUP FOR MOVE ROUTINE /032 CJL
4426 TAD I [RRLEN] /GET LENGTH OF PACKET JUST INPUT
4427 TAD (-40-4 /COUNT OF DATA RECEIVED
4428 TAD (RMAXL-INITEND) /COMPARE TO MAXIMUM ALLOWED /022 CJL
4429 SMA SZA /SKIP IF NOT TOO MANY /022 CJL
4430 CLA /ELSE USE ALLOWED MAXIMUM /022 CJL
4431 TAD (INITEND-RMAXL) /RESTORE VALUE /022 CJL
4432 CIA /MAKE IT NEGATIVE
4433 DCA MOVE4 /SAVE FOR "MOVE" ROUTINE
4434 TAD (RRDTA /ADDRESS OF DATA IN PACKET
4435 MOVE /MOVE THE INIT REGISTERS
4436 JMP I SETINI /DONE
4437 \f IFZERO 1 < /D013
4438
4439 / ROUTINE TO SEND THE DATE IN A DATA PACKET.
4440 / RETURN + 1 IF ERROR, + 2 IF SUCCESSFUL.
4441
4442 DATOUT, 0
4443 JMS INIOPB /INSURE PACKET HOLD BUFFER INITIALIZED
4444 TAD (SETDAT /GET ADDRESS OF DATE
4445 DCA DATOU9 /PUT INTO POINTER
4446
4447 DATOU1, TAD I DATOU9 /GET A CHAR
4448 ISZ DATOU9 /BUMP POINTER
4449 SPA /SKIP IF NOT ENT
4450 JMP DATOU2 /DONE
4451 JMS OPBUF /PUT INTO HOLD BUFFER
4452 SKP /HOLD FULL, SEND IT
4453 JMP DATOU1 /LOOP
4454
4455 DATOU2, CLA CLL /INSURE CLEAR AC
4456 FPACK /FORMAT A PACKET
4457 HOLDBF /DATA ADDRESS
4458 STDAT /DATA PACKET
4459
4460 DATOU3, SPACK /SEND THE PACKET
4461 1 /GET RESPONSE
4462 DATOU7-2 /DISPATCH TABLE ADDRESS /027 CJL
4463
4464 / HERE ON NAK OR UNDEFINED RESPONSE.
4465
4466 DATOU4, ISZ RTRYC /BUMP RE-TRY COUNTER
4467 JMP DATOU3 /TRY AGAIN
4468 JMP I DATOUT /ABORT
4469
4470 / HERE ON ACK.
4471
4472 DATOU5, ISZ DATOUT /BUMP FOR GOOD RETURN
4473 JMP I DATOUT /EXIT
4474
4475 DATOU7, STACK; DATOU5 /ACK
4476 STNAK; DATOU4 /NAK
4477 0
4478
4479 DATOU9, 0 /TEMP POINTER FOR DATOUT
4480
4481 > /D013
4482 \f/ HANDLE AN ABORT REQUEST.
4483
4484 ABORT, CLA CLL /INSURE CLEAR AC
4485 DCA ABFLAG /CLEAR ABORT FLAG NOW /044 CJL
4486 TAD KMODE /GET CURRENT MODE
4487 TAD (-MSEND /IS IT A SEND?
4488 SZA /SKIP IF YES
4489 JMP ABORT2 /NOT SEND
4490
4491 JMS I [SNDP] /SEND OUT A PACKET
4492 ABORT9 /WHICH HAS A "D" IN THE DATA
4493 STEOF /AND IS AN EOF PACKET
4494 NOP /WE GOT NAK BACK HERE
4495 NOP /WE GOT NEITHER NAK OR ACK HERE
4496 JMS I (BRKXMT) /BREAK THE SEND
4497 JMP ABORT3 /FINISH THE ABORT
4498
4499 ABORT2, TAD (MSEND-MREC /CHECK IF IN RECEIVE MODE
4500 SZA CLA /SKIP IF YES
4501 JMP ABORT3 /JUST BACK TO COMMAND LOOP
4502 JMS I [SNDP] /SEND A PACKET BACK FOR AN ABORT
4503
4504 IFZERO 1 < /D009
4505
4506 ABORT8 /WHICH HAS AN "X" IN THE DATA
4507 STACK /MAKE IT AN ACK PACKET
4508 NOP /NAK HERE
4509 NOP /NOT NAK OR ACK HERE
4510
4511 > /D009
4512
4513 NODATA /NO DATA /A009
4514 STBRK /BREAK TRANSMISSION /A009
4515 NOP /NAK HERE /A009
4516 CLA /NOT ACK OR NAK HERE /A009
4517 TAD OFFLG /GET FILE OPEN FLAG /A009
4518 SZA CLA /IS IT OPEN YET? /A009
4519 JMS I [FILCLOSE] /CLOSE THE OUTPUT FILE /020 CJL
4520 CLA /ERROR DURING CLOSE **** FIX THIS ****
4521 ABORT3, TAD (ABMSG) /GET MESSAGE ADDRESS /044 CJL
4522 JMP I [CLOOP7] /DISPLAY THE ABORT
4523
4524 ABORT9, "D&137 /DATA PACKET FOR SEND ABORT
4525 -1
4526
4527 PAGE /014 CJL
4528 \f/ ROUTINE TO PRINT 8 BIT CHARS ON THE TTY. ENTER ROUTINE WITH THE ADDRESS OF
4529 / THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1. TEXT
4530 / TERMINATES ON A MINUS WORD.
4531
4532 PRI8B0, 0
4533 SZA /SKIP IF ADDRESS NOT IN AC
4534 JMP PRI8B1 /ADDRESS IS IN THE AC
4535 TAD I PRI8B0 /GET ADDRESS FROM CALL + 1
4536 ISZ PRI8B0 /BUMP RETURN POINTER
4537 PRI8B1, DCA MQ /SAVE ADDRESS OF STRING /032 CJL
4538 TAD [P7ECHO] /GET CONSOLE OUTPUT ROUTINE ADDRESS /043 CJL
4539 JMS EIGHTB /AND SEND IT
4540 JMP I PRI8B0 /ALL DONE
4541
4542 / ROUTINE TO SEND 8 BIT CHARS DOWN THE REMOTE LINE. ENTER ROUTINE WITH THE
4543 / ADDRESS OF THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1.
4544 / TEXT TERMINATES ON A MINUS WORD.
4545
4546 REM8B0, 0
4547 SZA /SKIP IF ADDRESS NOT IN AC
4548 JMP REM8B1 /ADDRESS IN AC
4549 TAD I REM8B0 /GET ADDRESS FROM CALL + 1
4550 ISZ REM8B0 /BUMP RETURN
4551
4552 REM8B1, DCA MQ /SAVE ADDRESS OF STRING /032 CJL
4553 TAD (COMOUT) /GET ADDRESS OF REMOTE OUTPUT ROUTINE /046 CJL
4554 JMS EIGHTB /AND SEND THE STRING
4555 JMP I REM8B0 /DONE
4556
4557
4558 / ROUTINE TO SEND 8 BIT DATA. ENTER WITH ADDRESS OF DATA IN THE MQ AND THE
4559 / ADDRESS OF THE ROUTINE TO TAKE EACH BYTE IN THE AC. TEXT TERMINATES ON A
4560 / MINUS WORD.
4561
4562 EIGHTB, 0
4563 DCA EIGHT5 /STORE POINTER TO ROUTINE
4564 TAD MQ /GET STRING POINTER /032 CJL
4565 DCA EIGHT6 /STORE IN LOCAL POINTER
4566
4567 EIGHT1, TAD I EIGHT6 /GET A CHAR
4568 ISZ EIGHT6 /BUMP THE POINTER
4569 SPA /SKIP IF NOT EOL
4570 JMP EIGHT2 /GOT EOL
4571 JMS I EIGHT5 /CALL OUTPUT ROUTINE
4572 CLA CLL /INSURE CLEAR AC
4573 JMP EIGHT1 /LOOP
4574
4575 EIGHT2, CLA CLL /CLEAR THE AC
4576 JMP I EIGHTB /DONE
4577
4578 EIGHT5, 0 /POINTER TO ROUTINE TO DO OUTPUT
4579 EIGHT6, 0 /POINTER TO TEXT TO OUTPUT
4580 \f/ ROUTINE TO UNPACK 6-BT CHARS FROM MEMORY. BEFORE CALLING INIT "GET6P" AS A
4581 / POINTER TO THE STRING LOCATION AND "GET6F" SHOULD BE ZEROED TO START WITH THE
4582 / TOP BYTE OF THE FIRST MEMORY LOCATION.
4583
4584 GET60, 0
4585 NL4000 /SET 4000 /032 CJL
4586 TAD GET6F /GET THE FLAG
4587 DCA GET6F /RETURN THE FLAG
4588 TAD I GET6P /GET TWO BYTES
4589 SZL /HIGH-ORDER WANTED? /032 CJL
4590 JMP GETSWT /JUMP IF NOT /032 CJL
4591 RTR;RTR;RTR /MOVE DOWN HIGH-ORDER HALF /032 CJL
4592 SKP /DON'T BUMP POINTER YET /032 CJL
4593 GETSWT, ISZ GET6P /BUMP TO NEXT WORD /032 CJL
4594 AND [77] /STRIP UNUSED BITS /016 CJL
4595 JMP I GET60 /DONE
4596
4597
4598 / LOCAL ROUTINE TO "FILN8" TO MAKE THE 6 BIT CHAR IN THE AC INTO 8 BITS AND
4599 / STORE IN A STRING.
4600
4601 MOV8, .-. /6-BIT CHARACTER => 7-BIT CHARACTER /028 CJL
4602 SNA /SKIP IF SOMETHING PASSED /028 CJL
4603 TAD [" &77] /ELSE SUPPLY A <SPACE> /025 CJL
4604 TAD [" &77] /INVERT THE CHARACTER /028 CJL
4605 AND [77] /JUST SIX-BITS /014/016 CJL
4606 TAD [" &77] /MAKE IT SEVEN-BIT ASCII /028 CJL
4607 DCA I MOV8P /STORE IN THE STRING /028 CJL
4608 ISZ MOV8P /BUMP POINTER FOR NEXT TIME /028 CJL
4609 JMP I MOV8 /RETURN /028 CJL
4610
4611 MOV8P, 0 /POINTER FOR "MOV8" ROUTINE
4612 \f/ ROUTINE TO PULL A FILE NAME IN 6 BIT POINTED TO BY THE AC AND PLACE IN THE
4613 / FILE NAME BUFFER IN 8 BIT ADDING IN THE "." TO SEPARATE FILE NAME AND
4614 / EXTENSION. A MINUS WORD WILL FOLLOW THE NAME.
4615
4616 FILN8, 0
4617 DCA GET6P /SET POINTER FOR "GET6"
4618 DCA GET6F /SET FLAG FOR "GET6"
4619 TAD (NAMBUF /GET ADDRESS OF THE NAME BUFFER
4620 DCA MOV8P /SET IN A POINTER
4621 TAD (-6 /6 NAME CHARS TO DO
4622 DCA FILN8C /SAVE IN COUNTER
4623 GET6 /PULL A CHAR
4624 SZA /SKIP IF A SPACE
4625 JMS MOV8 /PUT INTO THE BUFFER
4626 ISZ FILN8C /BUMP COUNTER
4627 JMP .-4 /LOOP TILL ALL 6 DONE
4628 TAD (".&177) /GET A "." /034 CJL
4629 JMS MOV8 /PUT WITH FILE NAME
4630 NL7776 /SET -2 /032 CJL
4631 DCA FILN8C /2 EXTENSION CHARS
4632 GET6 /GET NEXT CHAR
4633 SZA /SKIP IF A SPACE
4634 JMS MOV8 /PUT WITH NAME
4635 ISZ FILN8C /BUMP COUNTER
4636 JMP .-4 /LOOP
4637 NL7777 /SET -1 /032 CJL
4638 DCA I MOV8P /TERMINATE THE STRING
4639 JMP I FILN8 /AND RETURN
4640
4641 FILN8C, 0 /COUNTER FOR "FILN8"
4642
4643 PAGE
4644 \f/ CONSOLE I/O ROUTINES, ETC. /023 CJL
4645
4646 / CONSOLE MESSAGE PRINT ROUTINE.
4647
4648 / CALLING SEQUENCE:
4649
4650 / JMS I [SCRIBE] /CALL MESSAGE PRINT ROUTINE
4651 / MESSAGEADDRESS /MESSAGE ADDRESS PASSED IN-LINE
4652
4653 / AC CAN BE DIRTY ON CALL.
4654
4655 / RETURNS WITH CLEAR AC.
4656
4657 / MESSAGE FORMAT:
4658
4659 / ALL UPPER-CASE CHARACTERS ARE ALLOWED TO EXIST IN THE MESSAGE EXCEPT '%' AND
4660 / '^' WHICH ARE RESERVED. A ZERO HALF-WORD TERMINATES THE MESSAGE STRING. IF
4661 / '%' IS DETECTED, A <CR> AND <LF> WILL BE OUTPUT. IF '^' IS DETECTED, THE
4662 / PREVAILING CASE WILL BE REVERSED. INITIAL CASE IS LOWER-CASE. IF 'UPONLY' IS
4663 / SET TO 7740, ALL CASE CHANGES ARE IGNORED AND THE OUTPUT IS FORCED TO
4664 / UPPER-CASE ONLY. THE MESSAGE ADDRESS MUST BE IN FIELD ONE AND MUST NOT
4665 / OVERLAP AREAS RESERVED FOR OTHER PURPOSES (OS/8 RESIDENT AT 17600-17777, USR
4666 / LOCATIONS 10000-11777, ETC.).
4667
4668
4669 SCRIBE, .-. /CONSOLE MESSAGE PRINT ROUTINE
4670 CLA /CLEAN UP /029 CJL
4671 TAD [P7ECHO] /POINT TO /043 CJL
4672 RSCRENT,DCA MSGOUT /CONSOLE PRINT ROUTINE
4673 TAD I SCRIBE /GET IN-LINE POINTER ARGUMENT
4674 DCA SCRPTR /STASH THE POINTER
4675 ISZ SCRIBE /BUMP PAST ARGUMENT
4676 TAD UPONLY /GET UPPER-ONLY VALUE /030 CJL
4677 TAD [140] /ADD ON LOWER-CASE VALUE /030 CJL
4678 DCA SCRCASE /STORE INITIAL CASE VALUE
4679 SCRLUP, CDF MSGFLD /GOTO MESSAGE FIELD
4680 TAD I SCRPTR /GET LEFT HALF-WORD
4681 RTR;RTR;RTR /MOVE OVER
4682 JMS SCRPRNT /PRINT IT
4683 CDF MSGFLD /GOTO MESSAGE FIELD
4684 TAD I SCRPTR /GET RIGHT HALF-WORD
4685 JMS SCRPRNT /PRINT IT
4686 ISZ SCRPTR /BUMP TO NEXT PAIR
4687 JMP SCRLUP /KEEP GOING
4688 \fSCRPRNT,.-. /CHARACTER PRINT ROUTINE
4689 CDF PRGFLD /BACK TO OUR FIELD
4690 AND [77] /JUST SIX BITS
4691 SNA /END OF MESSAGE?
4692 JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER
4693 DCA SCRCHAR /NO, SAVE FOR NOW
4694 TAD SCRCHAR /GET IT BACK
4695 TAD (-"%!200) /IS IT "%"?
4696 SNA /SKIP IF NOT
4697 JMP SCRCRLF /JUMP IF IT MATCHES
4698 TAD [-"^+100+"%] /IS IT "^"
4699 SNA CLA /SKIP IF NOT
4700 JMP SCRFLIP /JUMP IF IT MATCHES
4701 TAD SCRCHAR /GET THE CHARACTER
4702 AND [40] /DOES CASE MATTER?
4703 SNA CLA /SKIP IF NOT
4704 TAD SCRCASE /ELSE GET PREVAILING CASE
4705 TAD SCRCHAR /GET THE CHARACTER
4706 SCRPRLF,JMS I MSGOUT /PRINT THE CHARACTER
4707 JMP I SCRPRNT /RETURN
4708
4709 SCRCRLF,TAD [CNTRLM] /GET A <CR>
4710 JMS I MSGOUT /PRINT IT
4711 TAD [CNTRLJ] /GET A <LF>
4712 JMP SCRPRLF /CONTINUE THERE
4713
4714 SCRFLIP,TAD UPONLY /GET UPPER-ONLY FLAG
4715 SZA CLA /SKIP IF OFF
4716 JMP I SCRPRNT /RETURN IF ON
4717 TAD SCRCASE /GET CURRENT CASE
4718 CIA /INVERT IT
4719 TAD (140+100) /ADD SUM OF POSSIBLE VALUES
4720 DCA SCRCASE /STORE NEW INVERTED CASE
4721 JMP I SCRPRNT /RETURN
4722
4723 / REMOTE LINE MESSAGE PRINT ROUTINE.
4724
4725 / CALLING SEQUENCE:
4726
4727 / JMS I [RSCRIBE] /CALL MESSAGE PRINT ROUTINE
4728 / MESSAGEADDRESS /MESSAGE ADDRESS PASSED IN-LINE
4729
4730 / AC CAN BE DIRTY ON CALL.
4731
4732 / RETURNS WITH CLEAR AC.
4733
4734 / MESSAGE FORMAT AND RESTRICTIONS ARE IDENTICAL TO SCRIBE ROUTINE.
4735
4736 RSCRIBE,.-. /REMOTE LINE MESSAGE PRINT ROUTINE
4737 CLA /CLEAN UP /029 CJL
4738 TAD RSCRIBE /GET OUR CALLER
4739 DCA SCRIBE /MAKE IT THEIRS
4740 TAD (COMOUT) /POINT TO REMOTE OUTPUT ROUTINE
4741 JMP RSCRENTRY /CONTINUE THERE
4742 \f/ ESCAPE CHARACTER PRINT ROUTINE.
4743
4744 / CALLING SEQUENCE:
4745
4746 / TAD ESCHAR /OR OTHER CHARACTER TO PRINT
4747 / JMS I [ESCPRNT] /CALL ROUTINE
4748 / RETURNS WITH CLEAR AC HERE
4749
4750 / CAUSES CHARACTER TO PRINT LITERALLY IF CHARACTER>37.
4751 / CAUSES MESSAGE "CONTROL-" FOLLOWED BY CHARACTER+100 IF CHARACTER<40.
4752
4753 ESCPRNT,.-. /ESCAPE CHARACTER PRINT ROUTINE
4754 DCA ESCTEMP /SAVE PASSED VALUE
4755 TAD ESCTEMP /GET IT BACK
4756 TAD [-40] /COMPARE TO CONTROL LIMIT
4757 SMA CLA /SKIP IF LESS THAN LIMIT
4758 JMP ESPRINT /JUMP IF NOT
4759 JMS I [SCRIBE] /GIVE THEM THE
4760 CONTMSG /CONTROL MESSAGE
4761 TAD [100] /MAKE IT UPPER-CASE, NOT CONTROL
4762 ESPRINT,TAD ESCTEMP /GET ORIGINAL VALUE
4763 JMS I [P7ECHO] /PRINT IT /043 CJL
4764 JMP I ESCPRNT /RETURN
4765
4766 MSGOUT= RSCRIBE /OUTPUT ROUTINE POINTER
4767
4768 ESCTEMP,.-. /TEMPORARY FOR ESCPRNT ROUTINE
4769 SCRCASE,.-. /CURRENT MESSAGE CASE
4770 SCRCHAR,.-. /LATEST MESSAGE CHARACTER
4771 SCRPTR, .-. /MESSAGE POINTER
4772
4773 PAGE
4774 \f/ ROUTINE TO HANDLE THE "CONNECT" COMMAND. /025 CJL
4775
4776 CONSRV, .-. /CONNECT SERVICE ROUTINE
4777 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL
4778 JMS I [SCRIBE] /GIVE THE
4779 CONNMSG /OPENING MESSAGE
4780 TAD ESCHAR /GET THE CURRENT <ESCAPE> CHARACTER
4781 JMS I [ESCPRNT] /PRINT IT
4782 JMS I [SCRIBE] /GIVE THEM THE
4783 CON2MSG /BRIDGING MESSAGE
4784 JMS I [SCRIBE] /PRINT OUT THE
4785 CPUMSG /ACTUAL CPU TYPE
4786 JMS I [SCRIBE] /GIVE THEM THE
4787 CON3MSG /CLOSING MESSAGE
4788 CORESET,DCA ESCFLAG /CLEAR <ESCAPE> SEEN FLAG
4789 TAD ESCHAR /GET THE <ESCAPE> CHARACTER
4790 DCA ESCH /STORE IN SEARCH LIST
4791 JMS I (CONRESET) /RESET CONSOLE ROUTINES
4792 JMS I (REMRESET) /RESET REMOTE LINE ROUTINES
4793 CONNLUP,TAD KEYERROR /GET KEYBOARD ERROR FLAG
4794 SNA /SKIP IF KEYBOARD ERROR
4795 TAD RINERROR /ELSE GET REMOTE ERROR FLAG
4796 SZA CLA /SKIP IF NEITHER KEYBOARD NOR REMOTE LINE ERRORS
4797 JMP KERROR /JUMP IF KEYBOARD ERROR
4798 JMS I (CONTEST) /TEST IF CONSOLE CAN TAKE OUTPUT
4799 JMP TESTKEYBOARD /JUMP IF NOT
4800 JMS I (REMINPUT) /TEST IF ANY REMOTE INPUT
4801 SKP /SKIP IF NONE
4802 JMS I (CONOUT) /OUTPUT TO CONSOLE
4803 TESTKEY,TAD ECHOFLAG /GET LOCAL ECHO FLAG
4804 TAD ESCFLAG /ADD ON <ESCAPE> SEEN FLAG
4805 SNA CLA /SKIP IF LOCAL ECHO POSSIBLY NEEDED
4806 JMP NOLOCALECHO /JUMP IF NOT
4807 JMS I (CONTEST) /TEST IF CONSOLE CAN TAKE OUTPUT
4808 JMP BUFCHECK /JUMP IF NOT
4809 NOLOCAL,JMS I (REMTEST) /TEST IF REMOTE CAN TAKE OUTPUT
4810 JMP BUFCHECK /JUMP IF NOT
4811 JMS I (KEYINPUT) /TEST IF ANY KEYBOARD INPUT
4812 JMP BUFCHECK /JUMP IF NOT
4813 DCA KEYLATEST /SAVE FOR LATER
4814 TAD KEYLATEST /GET IT BACK
4815 AND [177] /WANT SEVEN-BIT VERSION FOR TESTS
4816 CIA /INVERT IT
4817 DCA TESTCHAR /SAVE FOR LATER
4818 TAD ESCFLAG /<ESCAPE> SEEN LAST TIME?
4819 SNA CLA /SKIP IF SO
4820 JMP NOESCAPE /JUMP IF NOT
4821 TAD TESTCHAR /GET TEST VAUE
4822 JMS I [SRCHTABLE] /SEARCH FOR IT
4823 ESCLIST-1-1 /SEARCH TABLE POINTER
4824 SNA CLA /SKIP IF FOUND
4825 JMP ESCOMPLAIN /JUMP IF NOT
4826 JMP I TABLEJUMP /GO WHERE YOU'RE SUPPOSED TO
4827 \f/ COMES HERE IF PREVIOUS WAS NOT THE <ESCAPE> CHARACTER.
4828
4829 NOESCAP,TAD TESTCHAR /GET THE LATEST CHARACTER
4830 TAD ESCHAR /COMPARE TO <ESCAPE> CHARACTER
4831 SZA CLA /SKIP IF IT MATCHES
4832 JMP OUTCHAR /JUMP IF NOT
4833 NL7777 /SET THE
4834 / DCA ESCFLAG /<ESCAPE> SEEN FLAG
4835 / JMP BUFCHECK /CONTINUE THERE
4836 JMP NOESENTRY /CONTINUE THERE
4837
4838 / COMES HERE IF BOTH PREVIOUS AND LATEST ARE THE <ESCAPE> CHARACTER.
4839
4840 ESCTYPE,DCA ESCFLAG /CLEAR THE <ESCAPE> SEEN FLAG AND OUTPUT
4841
4842 / COMES HERE IF PREVIOUS AND LATEST CHARACTER ARE NOT THE <ESCAPE> CHARACTER.
4843
4844 OUTCHAR,TAD ECHOFLAG /GET LOCAL ECHO FLAG
4845 SNA CLA /SKIP IF SET
4846 JMP NOECHO /JUMP IF NOT
4847 TAD KEYLATEST /GET LATEST CHARACTER
4848 JMS I (CONOUT) /OUTPUT TO CONSOLE
4849 NOECHO, TAD KEYLATEST /GET LATEST CHARACTER
4850 JMS I (REMOUT) /OUTPUT TO REMOTE
4851 JMP BUFCHECK /CONTINUE THERE
4852
4853 / COMES HERE IF PREVIOUS WAS THE <ESCAPE> CHARACTER AND THE LATEST IS NOT
4854 / A VALID <ESCAPE> COMMAND CHARACTER.
4855
4856 ESCOMPL,TAD [CNTRLG] /GET A <BEL>
4857 JMS I (CONOUT) /OUTPUT TO CONSOLE
4858 NOESENT,DCA ESCFLAG /CLEAR <ESCAPE> SEEN FLAG
4859 BUFCHEC,JMS I PUPSTATUS /UPDATE THE PORT STATUS /047 CJL
4860
4861 / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR
4862 / KL8 INTERFACES.
4863
4864 *BUFCHECK /OVERLAY DECMATE CODE /047 CJL
4865
4866 BUFCHEC,NOP /DON'T CHECK PORT STATUS /047 CJL
4867
4868 JMS I (RINUPDATE) /CHECK FOR MORE REMOTE INPUT
4869 JMS I (KEYUPDATE) /CHECK FOR MORE KEYBOARD INPUT
4870 JMS I (REMUPDATE) /CHECK FOR MORE REMOTE OUTPUT
4871 JMS I (CONUPDATE) /CHECK FOR MORE CONSOLE OUTPUT
4872 JMP CONNLUP /GO BACK FOR MORE
4873
4874 / COMES HERE ON <ESCAPE> C(LOSE).
4875
4876 ESCLOSE,ISZ CONSRV /BUMP TO GOOD RETURN
4877 JMP I CONSRV /RETURN
4878 \fKERRLUP,JMS I PUPSTATUS /UPDATE THE PORT STATUS /047 CJL
4879
4880 / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR
4881 / KL8 INTERFACES.
4882
4883 *KERRLUP /OVERLAY DECMATE CODE /047 CJL
4884
4885 KERRLUP,NOP /DON'T CHECK PORT STATUS /047 CJL
4886
4887 JMS I (RINUPDATE) /CHECK FOR MORE REMOTE INPUT
4888 JMS I (KEYUPDATE) /CHECK FOR MORE KEYBOARD INPUT
4889 JMS I (REMUPDATE) /CHECK FOR MORE REMOTE OUTPUT
4890 JMS I (CONUPDATE) /CHECK FOR MORE CONSOLE OUTPUT
4891
4892 / COMES HERE ON KEYBOARD INPUT ERROR.
4893
4894 KERROR, JMS I (CONTEST) /CONSOLE READY FOR OUTPUT?
4895 JMP KERRLUP /NO, GO WAIT AWHILE
4896 TAD I (CONINSERT) /GET CONSOLE INSERTION POINTER
4897 CIA /INVERT FOR TEST
4898 TAD I (CONREMOVE) /COMPARE TO CONSOLE REMOVAL POINTER
4899 SZA CLA /SKIP IF CONSOLE OUTPUT BUFFER EMPTY
4900 JMP KERRLUP /GO WAIT FOR AWHILE
4901 TAD KEYERROR /KEYBOARD INPUT ERROR?
4902 SNA CLA /SKIP IF SO
4903 JMP RIERTST /JUMP IF NOT
4904 JMS I [SCRIBE] /TELL THEM
4905 KERRMSG /WE HAD A KEYBOARD ERROR
4906 RIERTST,TAD RINERROR /REMOTE INPUT ERROR?
4907 SNA CLA /SKIP IF SO
4908 JMP CORESET /JUMP IF NOT
4909 JMS I [SCRIBE] /TELL THEM
4910 RIERMSG /WE HAD A REMOTE LINE ERROR
4911 JMP CORESET /RESTART
4912
4913 / <ESCAPE> CHARACTER SEARCH LIST.
4914
4915 ESCLIST,UPPERC; ESCLOSE /<ESCAPE> C(LOSE)
4916 LOWERC; ESCLOSE /<ESCAPE> C(LOSE) (LOWER-CASE)
4917 ESCH, .-.; ESCTYPE /<ESCAPE> <ESCAPE>
4918 0 /THIS ENDS THE LIST
4919
4920 / LOCAL ECHO FLAG FOR CONNECT MODE.
4921
4922 ECHOFLA,INIECHO /0=DON'T ECHO, NON-ZERO=ECHO /039 CJL
4923 ESCFLAG,.-. /<ESCAPE> CHARACTER SEEN FLAG
4924 KEYLATE,.-. /LATEST KEYBOARD CHARACTER
4925 PUPSTAT,UPSTATUS /POINTER TO DECMATE STATUS UPDATE /047 CJL
4926 TESTCHA,.-. /LATEST KEYBOARD TEST CHARACTER
4927 \f PAGE
4928 \f/ CONNECT-MODE SUPPORT ROUTINES. /047 CJL
4929
4930 / CONSOLE KEYBOARD ROUTINES. /047 CJL
4931
4932 / KEYBOARD INPUT ROUTINE. /026 CJL
4933
4934 / CALLING SEQUENCE:
4935
4936 / JMS I (KEYINPUT) /CALL ROUTINE
4937 / NO INPUT /RETURN IF NO INPUT
4938 / INPUT /RETURN IF INPUT AVAILABLE
4939
4940 / THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.
4941
4942 / THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.
4943
4944 KEYINPU,.-. /KEYBOARD INPUT ROUTINE
4945 TAD KEYINSERT /GET INSERTION POINTER
4946 CIA /INVERT FOR TEST
4947 TAD KEYREMOVE /COMPARE TO REMOVAL POINTER
4948 SNA CLA /SKIP IF BUFFER NOT EMPTY
4949 JMP KEYCHECK /JUMP IF BUFFER EMPTY
4950 TAD KEYREMOVE /GET REMOVAL POINTER
4951 DCA KEYTEMP /SAVE FOR LATER
4952 NL0001 /SET INCREMENT
4953 TAD KEYREMOVE /UPDATE REMOVAL POINTER
4954 AND [BUFSIZE-1] /JUST BUFFER BITS
4955 TAD [KEYBUFFER] /MAKE IT ABSOLUTE
4956 DCA KEYREMOVE /STORE UPDATED POINTER
4957 CDF BUFFLD /GOTO BUFFER FIELD
4958 TAD I KEYTEMP /GET THE LATEST CHARACTER
4959 CDF PRGFLD /BACK TO OUR FIELD
4960 SKP /DON'T GET ANOTHER CHARACTER /047 CJL
4961
4962 / COMES HERE IF BUFFER IS EMPTY.
4963
4964 KEYCHEC,JMS KEYGET /TRY TO GET A CHARACTER NOW /047 CJL
4965 ISZ KEYINPUT /GOT ONE, SO TAKE SKIP RETURN /047 CJL
4966 JMP I KEYINPUT /RETURN EITHER WAY
4967 \f/ KEYBOARD BUFFER UPDATE ROUTINE. /026 CJL
4968
4969 / CALLING SEQUENCE:
4970
4971 / JMS I (KEYUPDATE) /CALL ROUTINE
4972
4973 / RETURNS WITH CLEAR AC. ANY KEYBOARD INPUT WHICH JUST OCCURRED WILL BE
4974 / BUFFERED; CALLS TO KEYINPUT WILL RETRIEVE THE CHARACTERS.
4975
4976 KEYUPDA,.-. /KEYBOARD BUFFER UPDATE ROUTINE
4977 JMS KEYGET /TRY TO GET A CHARACTER NOW /047 CJL
4978 SKP /GOT ONE, DON'T LEAVE YET /047 CJL
4979 JMP I KEYUPDATE /CHARACTER NOT AVAILABLE NOW, RETURN /047 CJL
4980 CDF BUFFLD /GOTO BUFFER FIELD
4981 DCA I KEYINSERT /STORE IN THE BUFFER
4982 CDF PRGFLD /BACK TO OUR FIELD
4983 NL0001 /SET INCREMENT
4984 TAD KEYINSERT /UPDATE POINTER
4985 AND [BUFSIZE-1] /JUST BUFFER BITS
4986 TAD [KEYBUFFER] /MAKE IT ABSOLUTE
4987 DCA KEYINSERT /STORE BACK UPDATED POINTER
4988 TAD KEYINSERT /GET INSERTION POINTER
4989 CIA /INVERT FOR TEST
4990 TAD KEYREMOVE /COMPARE TO REMOVAL POINTER
4991 SNA CLA /SKIP IF NOT EQUAL
4992 KSERROR,ISZ KEYERROR /INDICATE KEYBOARD ERROR
4993 JMP I KEYUPDATE /RETURN
4994 JMP KSERROR /MAKE SURE ERROR IS INDICATED
4995 \f/ KEYBOARD GET A CHARACTER ROUTINE. /047 CJL
4996
4997 / CALLING SEQUENCE:
4998
4999 / JMS KEYGET /CALL ROUTINE
5000 / CHARACTER AVAILABLE /RETURNS HERE WITH LATEST CHARACTER
5001 / NO CHARACTER AVAILABLE /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL
5002
5003 / NORMAL RETURN HAS LATEST CHARACTER IN AC.
5004
5005 / SKIP RETURN HAS CLEAR AC.
5006
5007 / IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.
5008
5009 KEYGET, .-. /KEYBOARD GET A CHARACTER ROUTINE
5010 KGTEST, KSFIOT /FLAG UP?
5011 JMP KEYGNONE /NO, TAKE SKIP RETURN
5012 KGREAD, KRBIOT /YES, READ THE CHARACTER
5013 SPA /SKIP IF NO UART ERRORS
5014 ISZ KEYERROR /INDICATE KEYBOARD ERROR
5015 SKP /SKIP IF NOT TOO MANY ERRORS
5016 JMP .-2 /ENSURE KEYBOARD ERROR IS INDICATED
5017 AND [377] /JUST EIGHT-BIT
5018 DCA KEYTEMP /SAVE FOR NOW
5019 TAD FLOWFLAG /GET FLOW CONTROL FLAG
5020 SNA CLA /SKIP IF SET
5021 JMP KEYGEXIT /JUMP IF NOT
5022 TAD KEYTEMP /GET THE CHARACTER
5023 AND [177] /JUST SEVEN-BIT
5024 TAD [-CNTRLS] /COMPARE TO <^S>
5025 SNA /SKIP IF OTHER
5026 JMP KWATSET /JUMP IF IT MATCHES
5027 TAD [-CNTRLQ+CNTRLS]/COMPARE TO <^S>
5028 SNA CLA /SKIP IF OTHER
5029 JMP KWATCLEAR /JUMP IF IT MATCHES
5030 KEYGEXI,TAD KEYTEMP /GET THE CHARACTER
5031 JMP I KEYGET /TAKE IMMEDIATE RETURN
5032
5033 / COMES HERE ON <^S> TO SET OUTPUT WAIT.
5034
5035 KWATSET,NL4000 /SET WAIT VALUE
5036
5037 / COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.
5038
5039 KWATCLE,DCA CONWAIT /STORE NEW STATE
5040 KEYGNON,ISZ KEYGET /BUMP RETURN ADDRESS
5041 JMP I KEYGET /TAKE SKIP RETURN
5042 \f/ CONSOLE TERMINAL ROUTINES.
5043
5044 / CONSOLE OUTPUT ROUTINE.
5045
5046 / CALLING SEQUENCE:
5047
5048 / TAD CHAR /CHARACTER TO OUTPUT IN AC
5049 / JMS I (CONOUT) /CALL ROUTINE
5050 / RETURN /RETURNS HERE WITH CLEAR AC
5051
5052 CONOUT, .-. /CONSOLE OUTPUT ROUTINE
5053 DCA CONTEMP /SAVE PASSED VALUE
5054 TAD CONINSERT /GET INSERTION POINTER
5055 CIA /INVERT FOR TEST
5056 TAD CONREMOVE /COMPARE TO REMOVAL POINTER
5057 TAD CONWAIT /ADD ON WAIT STATUS
5058 SZA CLA /SKIP IF BUFFER EMPTY AND NOT WAITING /047 CJL
5059 JMP CSTUFF /JUMP IF CHARACTER MUST BE BUFFERED
5060 TAD CONTEMP /GET PASSED VALUE /047 CJL
5061 JMS I (CONPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL
5062 JMP CSTUFF /COULDN'T OUTPUT IT, SO BUFFER IT /047 CJL
5063 JMP I CONOUT /RETURN
5064
5065 CSTUFF, TAD CONTEMP /GET THE CHARACTER
5066 CDF BUFFLD /GOTO BUFFER FIELD
5067 DCA I CONINSERT /STORE THE CHARACTER
5068 CDF PRGFLD /BACK TO OUR FIELD
5069 NL0001 /SET INCREMENT
5070 TAD CONINSERT /UPDATE POINTER
5071 AND [BUFSIZE-1] /JUST BUFFER BITS
5072 TAD [CONBUFFER] /MAKE IT ABSOLUTE
5073 DCA CONINSERT /STORE BACK UPDATED POINTER
5074 JMP I CONOUT /RETURN
5075
5076 / CONSOLE OUTPUT TEST ROUTINE.
5077
5078 / CALLING SEQUENCE:
5079
5080 / JMS I (CONTEST) /CALL ROUTINE
5081 / NOT READY /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
5082 / READY /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW
5083
5084 CONTEST,.-. /CONSOLE OUTPUT TEST ROUTINE
5085 NL0001 /SET BUFFER INCREMENT
5086 TAD CONINSERT /GET UPDATED INSERTION POINTER
5087 CIA /INVERT FOR TEST
5088 TAD CONREMOVE /COMPARE TO REMOVAL POINTER
5089 AND [BUFSIZE-1] /JUST BUFFER BITS
5090 SZA CLA /SKIP IF BUFFER IS FULL
5091 ISZ CONTEST /BUMP RETURN IF NOT
5092 JMP I CONTEST /RETURN EITHER WAY
5093 \f/ CONSOLE OUTPUT BUFFER UPDATE ROUTINE.
5094
5095 / CALLING SEQUENCE:
5096
5097 / JMS I (CONUPDATE) /CALL ROUTINE
5098 / RETURN /RETURN WITH CLEAR AC
5099
5100 / THE CONSOLE OUTPUT BUFFERING ROUTINES WILL UPDATE POINTERS, ETC. IF ANY
5101 / STATUS HAS CHANGED SINCE THE LAST CALL.
5102
5103 CONUPDA,.-. /CONSOLE OUTPUT UPDATE ROUTINE
5104 TAD CONWAIT /FLOW CONTROL WAIT SET?
5105 SZA CLA /SKIP IF NOT
5106 JMP I CONUPDATE /JUST RETURN IF SO
5107 TAD CONINSERT /GET INSERTION POINTER
5108 CIA /INVERT FOR TEST
5109 TAD CONREMOVE /COMPARE TO REMOVAL POINTER
5110 SNA CLA /SKIP IF BUFFER CONTAINS SOMETHING /047 CJL
5111 JMP I CONUPDATE /RETURN IF BUFFER EMPTY /047 CJL
5112 CDF BUFFLD /GOTO BUFFER FIELD
5113 TAD I CONREMOVE /GET A CHARACTER FROM THE BUFFER
5114 CDF PRGFLD /BACK TO OUR FIELD
5115 JMS I (CONPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL
5116 JMP I CONUPDATE /COULDN'T DO IT, SO JUST RETURN /047 CJL
5117 NL0001 /SET BUFFER INCREMENT
5118 TAD CONREMOVE /UPDATE REMOVAL POINTER
5119 AND [BUFSIZE-1] /JUST BUFFER BITS
5120 TAD [CONBUFFER] /MAKE IT ABSOLUTE
5121 DCA CONREMOVE /STORE UPDATED POINTER
5122 JMP I CONUPDATE /RETURN
5123
5124 CONINSE,.-. /CONSOLE OUTPUT INSERTION POINTER
5125 CONREMO,.-. /CONSOLE OUTPUT REMOVAL POINTER
5126
5127 / CONSOLE FLOW CONTROL WAIT FLAG.
5128
5129 CONWAIT,.-. /0=DON'T WAIT, 4000=WAIT FOR <^Q>
5130 KEYINSE,.-. /KEYBOARD BUFFER INSERTION POINTER
5131 KEYREMO,.-. /KEYBOARD BUFFER REMOVAL POINTER
5132
5133 CONTEMP=CONUPDATE /CONSOLE OUTPUT TEMPORARY
5134
5135 KEYTEMP=CONUPDATE /KEYBOARD INPUT TEMPORARY
5136
5137 PAGE
5138 \f/ REMOTE LINE ROUTINES.
5139
5140 / REMOTE LINE INPUT ROUTINE. /026 CJL
5141
5142 / CALLING SEQUENCE:
5143
5144 / JMS I (REMINPUT) /CALL ROUTINE
5145 / NO INPUT /RETURN IF NO INPUT
5146 / INPUT /RETURN IF INPUT AVAILABLE
5147
5148 / THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.
5149
5150 / THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.
5151
5152 REMINPU,.-. /REMOTE LINE INPUT ROUTINE
5153 TAD RININSERT /GET INSERTION POINTER
5154 CIA /INVERT FOR TEST
5155 TAD RINREMOVE /COMPARE TO REMOVAL POINTER
5156 SNA CLA /SKIP IF BUFFER NOT EMPTY
5157 JMP RINCHECK /JUMP IF BUFFER EMPTY
5158 TAD RINREMOVE /GET REMOVAL POINTER
5159 DCA RINTEMP /SAVE FOR LATER
5160 NL0001 /SET INCREMENT
5161 TAD RINREMOVE /UPDATE REMOVAL POINTER
5162 AND [BUFSIZE-1] /JUST BUFFER BITS
5163 TAD (RINBUFFER) /MAKE IT ABSOLUTE
5164 DCA RINREMOVE /STORE UPDATED POINTER
5165 CDF BUFFLD /GOTO BUFFER FIELD
5166 TAD I RINTEMP /GET THE LATEST CHARACTER
5167 CDF PRGFLD /BACK TO OUR FIELD
5168 DCA RINTEMP /SAVE FOR LATER
5169 TAD FLOWFLAG /GET FLOW CONTROL FLAG
5170 SNA CLA /SKIP IF SET
5171 JMP REMINEXIT /JUMP IF NOT
5172 NL4000 /SET WAITING VALUE
5173 TAD RINWAIT /ARE WE WAITING TO EMPTY?
5174 SZA CLA /SKIP IF SO
5175 JMP REMINEXIT /JUMP IF NOT
5176 TAD RININSERT /GET INSERTION POINTER
5177 CIA /INVERT FOR TEST
5178 TAD RINREMOVE /COMPARE TO REMOVAL POINTER
5179 AND [BUFSIZE^3%4] /JUST 3/4 BITS
5180 SZA CLA /SKIP IF BUFFER NOW 1/4 FULL (OR LESS)
5181 JMP REMINEXIT /JUMP IF NOT
5182 NL7777 /SET BUFFER EMPTYING VALUE
5183 DCA RINWAIT /STORE FOR OUTPUT ROUTINE
5184 REMINEX,TAD RINTEMP /GET THE CHARACTER
5185 SKP /DON'T GET ANOTHER ONE /047 CJL
5186
5187 / COMES HERE IF REMOTE LINE INPUT BUFFER IS EMPTY.
5188
5189 RINCHEC,JMS RINGET /TRY TO GET A CHARACTER NOW /047 CJL
5190 ISZ REMINPUT /GOT ONE, SO TAKE SKIP RETURN /047 CJL
5191 JMP I REMINPUT /RETURN EITHER WAY
5192 \f/ REMOTE LINE INPUT BUFFER UPDATE ROUTINE. /026 CJL
5193
5194 / CALLING SEQUENCE:
5195
5196 / JMS I (RINUPDATE) /CALL ROUTINE
5197
5198 / RETURNS WITH CLEAR AC. ANY REMOTE LINE INPUT WHICH JUST OCCURRED WILL BE
5199 / BUFFERED; CALLS TO REMINPUT WILL RETRIEVE THE CHARACTERS.
5200
5201 RINUPDA,.-. /REMOTE LINE INPUT BUFFER UPDATE ROUTINE
5202 JMS RINGET /TRY TO GET A CHARACTER NOW /047 CJL
5203 SKP /GOT ONE, DON'T LEAVE YET /047 CJL
5204 JMP I RINUPDATE /CHARACTER NOT AVAILABLE NOW, RETURN /047 CJL
5205 CDF BUFFLD /GOTO BUFFER FIELD
5206 DCA I RININSERT /STORE IN THE BUFFER
5207 CDF PRGFLD /BACK TO OUR FIELD
5208 NL0001 /SET INCREMENT
5209 TAD RININSERT /UPDATE POINTER
5210 AND [BUFSIZE-1] /JUST BUFFER BITS
5211 TAD (RINBUFFER) /MAKE IT ABSOLUTE
5212 DCA RININSERT /STORE BACK UPDATED POINTER
5213 TAD RININSERT /GET INSERTION POINTER
5214 CIA /INVERT FOR TEST
5215 TAD RINREMOVE /COMPARE TO REMOVAL POINTER
5216 SNA /SKIP IF BUFFER NOT FULL
5217 ISZ RINERROR /INDICATE REMOTE LINE INPUT ERROR
5218 SKP /SKIP IF NO OVERFLOW
5219 JMP .-2 /ENSURE ERROR IS SET
5220 TAD [BUFSIZE^3%4] /SUBTRACT 1/4 BUFFER'S WORTH
5221 AND [BUFSIZE^3%4] /JUST 3/4 BUFFER BITS
5222 SNA CLA /SKIP IF NOT 3/4 FULL
5223 TAD FLOWFLAG /ELSE CHECK IF FLOW CONTROL IS ENABLED
5224 SNA CLA /SKIP IF 3/4 FULL AND FLOW CONTROL IS ENABLED
5225 JMP I RINUPDATE /JUST RETURN
5226 TAD RINWAIT /GET INPUT WAIT FLAG
5227 SNA CLA /SKIP IF ALREADY SET
5228 ISZ RINWAIT /SET TO <^S> STATE
5229 JMP I RINUPDATE /RETURN
5230 \f/ REMOTE LINE GET A CHARACTER ROUTINE. /047 CJL
5231
5232 / CALLING SEQUENCE:
5233
5234 / JMS I (RINGET) /CALL ROUTINE
5235 / CHARACTER AVAILABLE /RETURNS HERE WITH LATEST CHARACTER
5236 / NO CHARACTER AVAILABLE /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL
5237
5238 / NORMAL RETURN HAS LATEST CHARACTER IN AC.
5239
5240 / SKIP RETURN HAS CLEAR AC.
5241
5242 / IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.
5243
5244 RINGET, .-. /REMOTE LINE GET A CHARACTER ROUTINE
5245 RINTEST,TAD INFLAG /IS INPUT AVAILABLE?
5246 RINGT0, SNA CLA /SKIP IF SO
5247 RINREAD,JMP RINGNONE /JUMP IF NOT
5248 RINGT1, DCA INFLAG /CLEAR AVAILABILITY FLAG
5249 RINGT2, IRB /READ IN THE CHARACTER
5250
5251 / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS
5252 / ARE FOR KL8 INTERFACES.
5253
5254 *RINTEST /OVERLAY DECMATE II CODE
5255
5256 RINTEST,RKSFIOT /FLAG UP?
5257 RINGT0, JMP RINGNONE /NO, TAKE SKIP RETURN
5258 RINREAD,RKRBIOT /YES, READ THE CHARACTER
5259 RINGT1, SKP /NO ERRORS ON DECMATE I
5260
5261 / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS
5262 / FOR KL8 INTERFACES.
5263
5264 *RINGT1 /OVERLAY DECMATE I CODE
5265
5266 RINGT1, SPA /SKIP IF NO UART ERRORS
5267 RING2, ISZ RINERROR /INDICATE REMOTE LINE INPUT ERROR
5268 SKP /SKIP IF NOT TOO MANY ERRORS
5269 JMP .-2 /ENSURE REMOTE LINE INPUT ERROR IS INDICATED
5270 AND [377] /JUST EIGHT-BIT
5271 DCA RINTEMP /SAVE FOR NOW
5272 TAD FLOWFLAG /GET FLOW CONTROL FLAG
5273 SNA CLA /SKIP IF SET
5274 JMP RINGEXIT /JUMP IF NOT
5275 TAD RINTEMP /GET THE CHARACTER
5276 AND [177] /JUST SEVEN-BIT
5277 TAD [-CNTRLS] /COMPARE TO <^S>
5278 SNA /SKIP IF OTHER
5279 JMP RWATSET /JUMP IF IT MATCHES
5280 TAD [-CNTRLQ+CNTRLS]/COMPARE TO <^S>
5281 SNA CLA /SKIP IF OTHER
5282 JMP RWATCLEAR /JUMP IF IT MATCHES
5283 RINGEXI,TAD RINTEMP /GET THE CHARACTER
5284 JMP I RINGET /TAKE IMMEDIATE RETURN
5285 \f/ COMES HERE ON <^S> TO SET OUTPUT WAIT.
5286
5287 RWATSET,NL4000 /SET WAIT VALUE
5288
5289 / COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.
5290
5291 RWATCLE,DCA REMWAIT /STORE NEW STATE
5292 RINGNON,ISZ RINGET /BUMP RETURN ADDRESS
5293 JMP I RINGET /TAKE SKIP RETURN
5294
5295 / REMOTE LINE RESET ROUTINE. /026 CJL
5296
5297 / CALLING SEQUENCE:
5298
5299 / JMS I (REMRESET) /CALL ROUTINE
5300 / RETURN /RETURN WITH CLEAR AC
5301
5302 / RETURNS WITH CLEAR AC AND ALL REMOTE LINE VARIABLES RESET.
5303
5304 REMRESE,.-. /REMOTE LINE RESET ROUTINE
5305 TAD [REMBUFFER] /SETUP THE REMOTE LINE
5306 DCA REMINSERT /OUTPUT INSERTION POINTER
5307 TAD [REMBUFFER] /SETUP THE REMOTE LINE
5308 DCA REMREMOVE /OUTPUT REMOVAL POINTER
5309 TAD (RINBUFFER) /SETUP THE REMOTE LINE
5310 DCA RININSERT /INPUT INSERTION POINTER
5311 TAD (RINBUFFER) /SETUP THE REMOTE LINE
5312 DCA RINREMOVE /INPUT REMOVAL POINTER
5313 DCA REMWAIT /CLEAR REMOTE OUTPUT WAIT
5314 DCA RINWAIT /CLEAR REMOTE INPUT WAIT
5315 DCA RINERROR /CLEAR REMOTE INPUT ERROR
5316 JMP I REMRESET /RETURN
5317
5318 RININSE,.-. /REMOTE INPUT INSERTION POINTER
5319 RINREMO,.-. /REMOTE INPUT REMOVAL POINTER
5320 RINTEMP,.-. /REMOTE INPUT TEMPORARY /047 CJL
5321
5322 PAGE
5323 \f/ REMOTE LINE OUTPUT ROUTINE.
5324
5325 / CALLING SEQUENCE:
5326
5327 / TAD CHAR /CHARACTER TO OUTPUT IN AC
5328 / JMS I (REMOUT) /CALL ROUTINE
5329 / RETURN /RETURNS HERE WITH CLEAR AC
5330
5331 REMOUT, .-. /REMOTE LINE OUTPUT ROUTINE
5332 DCA REMTEMP /SAVE PASSED VALUE
5333 TAD REMINSERT /GET INSERTION POINTER
5334 CIA /INVERT FOR TEST
5335 TAD REMREMOVE /COMPARE TO REMOVAL POINTER
5336 TAD REMWAIT /ADD ON WAIT STATUS
5337 SZA CLA /SKIP IF BUFFER EMPTY AND NOT WAITING /047 CJL
5338 JMP RSTUFF /JUMP IF CHARACTER MUST BE BUFFERED
5339 TAD REMTEMP /GET PASSED VALUE /047 CJL
5340 JMS I (REMPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL
5341 JMP RSTUFF /COULDN'T OUTPUT IT, SO BUFFER IT /047 CJL
5342 JMP I REMOUT /RETURN
5343
5344 RSTUFF, TAD REMTEMP /GET THE CHARACTER
5345 CDF BUFFLD /GOTO BUFFER FIELD
5346 DCA I REMINSERT /STORE IN BUFFER
5347 CDF PRGFLD /BACK TO OUR FIELD
5348 NL0001 /SET BUFFER INCREMENT
5349 TAD REMINSERT /BUMP INSERTION POINTER
5350 AND [BUFSIZE-1] /JUST BUFFER BITS
5351 TAD [REMBUFFER] /MAKE IT ABSOLUTE
5352 DCA REMINSERT /STORE UPDATED POINTER
5353 JMP I REMOUT /RETURN
5354
5355 / REMOTE LINE OUTPUT TEST ROUTINE.
5356
5357 / CALLING SEQUENCE:
5358
5359 / JMS I (REMTEST) /CALL ROUTINE
5360 / NOT READY /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
5361 / READY /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW
5362
5363 / AC WILL BE CLEARED AFTER THE CALL.
5364
5365 REMTEST,.-. /REMOTE LINE OUTPUT TEST ROUTINE
5366 NL0001 /SET BUFFER INCREMENT
5367 TAD REMINSERT /GET INSERTION POINTER
5368 CIA /INVERT FOR TEST
5369 TAD REMREMOVE /COMPARE TO REMOVAL POINTER
5370 AND [BUFSIZE-1] /JUST BUFFER BITS
5371 SZA CLA /SKIP IF BUFFER IS FULL
5372 ISZ REMTEST /BUMP RETURN IF BUFFER IS NOT FULL
5373 JMP I REMTEST /RETURN EITHER WAY
5374 \f/ REMOTE LINE OUTPUT BUFFER UPDATE ROUTINE.
5375
5376 / CALLING SEQUENCE:
5377
5378 / JMS I (REMUPDATE) /CALL ROUTINE
5379 / RETURN /RETURN WITH CLEAR AC
5380
5381 / THE REMOTE LINE OUTPUT BUFFERING ROUTINES WILL UPDATE POINTERS, ETC. IF ANY
5382 / STATUS HAS CHANGED SINCE THE LAST CALL.
5383
5384 REMUPDA,.-. /REMOTE LINE OUTPUT UPDATE ROUTINE
5385 TAD RINWAIT /GET INPUT WAIT FLAG
5386 CLL RAL /MAIN STATE BIT TO LINK
5387 SNA CLA /SKIP IF OUTPUT FLOW CHARACTER NEEDED /047 CJL
5388 JMP REMCHECK /JUMP IF CHARACTER NOT NEEDED NOW /047 CJL
5389 TAD (CNTRLQ) /ASSUME RELEASE CHARACTER NEEDED /047 CJL
5390 SNL /SKIP IF SO /047 CJL
5391 TAD [CNTRLS-CNTRLQ] /ELSE CHANGE IT TO HOLD CHARACTER /047 CJL
5392 JMS I (REMPUT) /TRY TO OUTPUT IT NOW /047 CJL
5393 JMP REMCHECK /COULDN'T DO IT, FORGET IT FOR NOW /047 CJL
5394 CML RAR /SET NEW STATE VALUE /047 CJL
5395 DCA RINWAIT /STORE IT
5396 REMCHEC,TAD REMWAIT /GET OUTPUT WAIT FLAG
5397 SZA CLA /SKIP IF NOT WAITING
5398 JMP I REMUPDATE /JUST RETURN IF WAITING
5399 TAD REMINSERT /GET OUTPUT INSERTION POINTER
5400 CIA /INVERT FOR TEST
5401 TAD REMREMOVE /COMPARE TO OUTPUT REMOVAL POINTER
5402 SNA CLA /SKIP IF BUFFER CONTAINS SOMETHING /047 CJL
5403 JMP I REMUPDATE /RETURN IF BUFFER EMPTY /047 CJL
5404 CDF BUFFLD /GOTO BUFFER FIELD
5405 TAD I REMREMOVE /GET A CHARACTER FROM THE BUFFER
5406 CDF PRGFLD /BACK TO OUR FIELD
5407 JMS I (REMPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL
5408 JMP I REMUPDATE /COULDN'T DO IT, SO JUST RETURN /047 CJL
5409 NL0001 /SET BUFFER INCREMENT
5410 TAD REMREMOVE /BUMP REMOVAL POINTER
5411 AND [BUFSIZE-1] /JUST BUFFER BITS
5412 TAD [REMBUFFER] /MAKE IT ABSOLUTE
5413 DCA REMREMOVE /STORE UPDATED POINTER
5414 JMP I REMUPDATE /RETURN
5415
5416 REMTEMP=REMUPDATE /REMOTE OUTPUT TEMPORARY
5417 \f/ LOW-LEVEL CONSOLE OUTPUT ROUTINE. /047 CJL
5418
5419 / CALLING SEQUENCE:
5420
5421 / [CHARACTER TO OUTPUT IN THE AC]
5422
5423 / JMS I (CONPUT) /CALL ROUTINE
5424 / NO OUTPUT /RETURNS HERE IF OUTPUT UNAVAILABLE
5425 / OUTPUT /RETURNS HERE IF CHARACTER WAS OUTPUT
5426
5427 CONPUT, .-. /CONSOLE OUTPUT ROUTINE
5428 CONTSF, TSFIOT /FLAG UP?
5429 JMP CONCLEAR /NO, FORGET IT
5430 CONTLS, TLSIOT /YES, OUTPUT THE CHARACTER NOW
5431 ISZ CONPUT /TAKE SKIP RETURN
5432 CONCLEA,CLA /CLEAN UP
5433 JMP I CONPUT /RETURN EITHER WAY
5434
5435 / CONSOLE RESET ROUTINE. /026 CJL
5436
5437 / CALLING SEQUENCE:
5438
5439 / JMS I (CONRESET) /CALL ROUTINE
5440 / RETURN /RETURN WITH CLEAR AC
5441
5442 / RETURNS WITH CLEAR AC AND ALL CONSOLE VARIABLES RESET.
5443
5444 CONRESE,.-. /CONSOLE RESET ROUTINE
5445 TAD [CONBUFFER] /SETUP THE
5446 DCA I (CONINSERT) /CONSOLE OUTPUT INSERTION POINTER
5447 TAD [CONBUFFER] /SETUP THE
5448 DCA I (CONREMOVE) /CONSOLE OUTPUT REMOVAL POINTER
5449 TAD [KEYBUFFER] /SETUP THE
5450 DCA I (KEYINSERT) /KEYBOARD INSERTION POINTER
5451 TAD [KEYBUFFER] /SETUP THE
5452 DCA I (KEYREMOVE) /KEYBOARD REMOVAL POINTER
5453 DCA I (CONWAIT) /CLEAR OUTPUT WAIT
5454 DCA KEYERROR /CLEAR KEYBOARD ERROR
5455 JMP I CONRESET /RETURN
5456 \f/ LOW-LEVEL REMOTE LINE OUTPUT ROUTINE. /047 CJL
5457
5458 / CALLING SEQUENCE:
5459
5460 / [CHARACTER TO OUTPUT IN THE AC]
5461
5462 / JMS I (REMPUT) /CALL ROUTINE
5463 / NO OUTPUT /RETURNS HERE IF OUTPUT UNAVAILABLE
5464 / OUTPUT /RETURNS HERE IF CHARACTER WAS OUTPUT
5465
5466 REMPUT, .-. /REMOTE LINE OUTPUT ROUTINE
5467 DM1AN2, AND [377] /ENSURE EIGHT BIT /049 CJL
5468
5469 / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS
5470 / FOR KL8 INTERFACES.
5471
5472 *DM1AN2 /OVERLAY DECMATE II CODE /049 CJL
5473
5474 DM1AN2, SKP /WE'RE NOT A DECMATE I /049 CJL
5475 TAD [400] /SET WRITE BIT /049 CJL
5476 REMTSF, DCA RMPTEMP /SAVE PASSED VALUE
5477 RMPUT0, TAD OUTFLAG /CHECK IF OUTPUT IS AVAILABLE
5478 REMTLS, SNA CLA /SKIP IF SO
5479 RMPUT1, JMP I REMPUT /RETURN IF NOT
5480 REMCLEA,TAD RMPTEMP /GET THE PASSED VALUE
5481 RMPUT2, OLS /OUTPUT THE CHARACTER NOW
5482
5483 / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS
5484 / ARE FOR KL8 INTERFACES.
5485
5486 *REMTSF /OVERLAY DECMATE II CODE
5487
5488 REMTSF, RTSFIOT /FLAG UP?
5489 RMPUT0, JMP REMCLEAR /NO, FORGET IT
5490 REMTLS, RTLSIOT /YES, OUTPUT THE CHARACTER NOW
5491 RMPUT1, ISZ REMPUT /TAKE SKIP RETURN
5492 REMCLEA,CLA /CLEAN UP
5493 RMPUT2, JMP I REMPUT /RETURN EITHER WAY
5494
5495 CLA /CLEAN UP
5496 DCA OUTFLAG /INDICATE OUTPUT IS UNAVAILABLE
5497 ISZ REMPUT /TAKE SKIP RETURN
5498 JMP I REMPUT /RETURN TO CALLER
5499
5500 RMPTEMP=CONRESET /REMOTE OUTPUT TEMPORARY
5501
5502 PAGE
5503 \f/ SEVEN-BIT COMMAND TABLES. /034 CJL
5504
5505 CMDTBL= . /COMMAND TABLE HERE
5506
5507 "C&177; "O&177; "N&177 /\
5508 "N&177; "E&177; "C&177 / >CONNECT COMMAND
5509 "T&177; -1 //
5510 CONSRV /CONNECT ROUTINE ADDRESS
5511
5512 "F&177; "I&177; "N&177 /\
5513 "I&177; "S&177; "H&177 / >FINISH COMMAND
5514 -1 //
5515 FINSRV /FINISH ROUTINE ADDRESS
5516
5517 "E&177; "X&177; "I&177 /EXIT
5518 "T&177; -1 /COMMAND
5519 EXITKERMIT /EXIT ROUTINE ADDRESS
5520
5521 "S&177; "E&177; "N&177 /SEND
5522 "D&177; -1 /COMMAND
5523 SNDSRV /SEND ROUTINE ADDRESS
5524
5525 "G&177; "E&177; "T&177 /GET
5526 -1 /COMMAND
5527 GETSRV /GET ROUTINE ADDRESS
5528
5529 "R&177; "E&177; "C&177 /\
5530 "E&177; "I&177; "V&177 / >RECEIVE COMMAND
5531 "E&177; -1 //
5532 RECSRV /RECEIVE ROUTINE ADDRESS
5533 \f "H&177; "E&177; "L&177 /HELP
5534 "P&177; -1 /COMMAND
5535 HELPSRV /HELP ROUTINE ADDRESS
5536
5537 -1 /THIS ENDS THE TABLE /034 CJL
5538
5539 / REMOTE PACKET INPUT BUFFER. /014 CJL
5540
5541 RRBUF, 0 /MARK
5542 RRLEN, 0 /PACKET LENGTH
5543 RRSEQ, 0 /PACKET SEQ
5544 RRTYP, 0 /PACKET TYPE
5545
5546 DECIMAL
5547
5548 RRDTA, ZBLOCK 91 /DATA GOES HERE
5549
5550 OCTAL
5551
5552 RTERMI, 0 /ADD LOCATION WHERE TERMINATOR IS STORED/A004
5553 /ON RECEIVE IF BUFFER IS MAXIMUM LENGTH /A004
5554
5555 / REMOTE PACKET OUTPUT BUFFER
5556
5557 RSBUF, CNTRLA /PACKET BUFFER (BEGINS WITH "SOH") /034 CJL
5558 RSLEN, 0 /PACKET LENGTH GOES HERE
5559 RSSEQ, 0 /PACKET SEQUENCE GOES HERE
5560 RSTYP, 0 /PACKET TYPE GOES HERE
5561
5562 DECIMAL
5563
5564 RSDTA, ZBLOCK 91 /DATA GOES HERE
5565
5566 0 /CHECKSUM HERE ON MAX PACKET
5567 0 /EOL (IF USED HERE ON MAX PACKET)
5568 0 /INTERNAL TERMINATOR HERE ON MAX PACKET
5569
5570 OCTAL
5571 \f/ SEND-INIT PACKET DEFINITION
5572
5573 INIDAT, DECIMAL
5574
5575 94+32 /94 CHARS MAX
5576
5577 OCTAL
5578
5579 "/&177 /15 SECOND TIME-OUT /M013/014 CJL
5580 " &177 /NO PADDING
5581 0+100&177 /NO PADDING CHAR
5582 " &177+15 /CR FOR EOL
5583 "#&177 /QUOTE CHAR
5584 "N&137 /NO 8TH BIT QUOTING
5585 "1&177 /CHECK TYPE 1
5586 " &177 /NO REPEAT CHAR
5587 " &177+0 /NO EXTRA CAPABILITY
5588 NODATA, -1 /END OF DATA (USE THIS FOR SENDING NO-DATA)
5589 \f PAGE /GET TO NEXT PAGE /028 CJL
5590
5591 / NO-INTERRUPT CONSOLE INPUT/OUTPUT SUPPORT ROUTINES. /023 CJL
5592
5593 / MODIFIED FOR FORCED-ECHO AND COLUMN-COUNTING. /043 CJL
5594
5595 / CONSOLE INPUT ROUTINE. RETURNS LATEST CHARACTER WITHOUT ECHOING. MAY BE
5596 / CALLED WITH DIRTY AC. RETURNS LATEST SEVEN-BIT CHARACTER TYPED WHILE FIELDING
5597 / POTENTIAL <^S>/<^Q> PROTOCOL.
5598
5599 INPUT, .-. /CONSOLE INPUT ROUTINE
5600 INPWAIT,JMS CHKUP /TRY TO GET A CHARACTER
5601 TAD INCHAR /GET THE CHARACTER
5602 SNA /SKIP IF ANYTHING CAME IN
5603 JMP INPWAIT /WAIT FOR ANYTHING
5604 JMP I INPUT /RETURN WITH LATEST CHARACTER
5605
5606 / CONSOLE OUTPUT ROUTINE. OUTPUTS CHARACTER IN AC (INCLUDING <HT> VIA
5607 / SIMULATION). RETURNS WITH CLEAR AC. SUBJECT TO CONSOLE ECHO STATUS (ECHOSW).
5608
5609 P7CH, .-. /CONSOLE OUTPUT ROUTINE
5610 TAD (-CNTRLI) /COMPARE TO <HT>
5611 SNA /SKIP IF OTHER
5612 JMP DOTAB /JUMP IF <HT>
5613 TAD L11/(CNTRLI) /RESTORE THE CHARACTER
5614 JMS P7CHAR /PRINT IT (UPDATING COLUMN COUNT)
5615 JMP I P7CH /RETURN
5616
5617 DOTAB, TAD [" &177] /GET A <SPACE>
5618 JMS P7CHAR /OUTPUT IT
5619 TAD COLUMN /GET CURRENT COLUMN COUNT
5620 AND [7] /JUST TAB BITS
5621 SZA CLA /SKIP IF NOW AT NEW TAB STOP
5622 JMP DOTAB /ELSE KEEP GOING
5623 JMP I P7CH /RETURN
5624
5625 / FORCED-ECHO CONSOLE OUTPUT ROUTINE. SAME AS P7CH BUT CLEARS ECHOSW BEFORE
5626 / OUTPUT OF THE CHARACTER.
5627
5628 P7ECHO, .-. /CONSOLE OUTPUT WITH FORCED-ECHO ROUTINE
5629 DCA P7TEMP /SAVE PASSED VALUE
5630 DCA ECHOSW /CLEAR ECHO STATUS
5631 TAD P7TEMP /RESTORE THE CHARACTER
5632 JMS P7CH /CALL MAIN ROUTINE
5633 JMP I P7ECHO /RETURN
5634 \fCHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE
5635 JMS CTLCTST /CALL LOW-LEVEL INPUT CHECK ROUTINE
5636 SNA /SKIP IF ANYTHING CAME BACK
5637 JMP CHKCLR /ELSE FORGET IT
5638 TAD (-CNTRLP) /COMPARE TO <^P>
5639 SNA /SKIP IF OTHER
5640 JMP DOUP /GO HANDLE <^P> THERE
5641 IAC /TAD (-CNTRLO+CNTRLP)/COMPARE TO <^O>
5642 SNA /SKIP IF OTHER
5643 JMP DOUO /GO HANDLER <^O> THERE
5644 TAD (-CNTRLS+CNTRLO) /COMPARE TO <^S>
5645 SZA CLA /SKIP IF IT MATCHES
5646 JMP I CHKUP /RETURN ON UNIMPORTANT CHARACTERS
5647 UQWAIT, JMS CTLCTST /CALL LOW-LEVEL INPUT CHECK ROUTINE
5648 TAD (-CNTRLQ) /COMPARE TO <^Q>
5649 SZA CLA /SKIP IF IT MATCHES
5650 JMP UQWAIT /ELSE WAIT FOR <^Q> FOREVER
5651 CHKCLR, DCA INCHAR /OBLITERATE INPUT CHARACTER
5652 JMP I CHKUP /RETURN
5653
5654 / COMES HERE TO HANDLE <^P>.
5655
5656 DOUP, TAD ("P&177) /GET A "P"
5657 JMS UPRINT /PRINT "^P"
5658 JMP I UPADDRESS /GO WHERE YOU SHOULD
5659
5660 / COMES HERE TO HANDLE <^O>.
5661
5662 DOUO, TAD ("O&177) /GET AN "O"
5663 JMS UPRINT /PRINT "^O"
5664 NL4000 /SET REVERSING BIT
5665 TAD ECHOSW /REVERSE THE ECHO STATE
5666 DCA ECHOSW /STORE BACK
5667 JMP CHKCLR /OBLITERATE <^O> AND RETURN
5668
5669 CTLCTST,.-. /LOW-LEVEL <^C> TEST ROUTINE
5670 CLA /CLEAN UP
5671 KSFLOC, KSFIOT /FLAG UP?
5672 JMP I CTLCTST /NO, JUST RETURN
5673 KRSZAP, KRSIOT /**** 6120 **** KRBIOT
5674 AND [177] /JUST SEVEN-BIT
5675 DCA INCHAR /SAVE THE CHARACTER
5676 NL7775 /SET -<^C> VALUE
5677 TAD INCHAR /COMPARE TO CHARACTER
5678 SNA CLA /SKIP IF OTHER THAN <^C>
5679 JMP I UCADDRESS /JUMP IF <^C>
5680 KCCZAP, KCCIOT /**** 6120 **** 0000
5681 TAD INCHAR /GET THE CHARACTER
5682 JMP I CTLCTST /RETURN
5683 \fP7CHAR, .-. /LOWER-LEVEL CONSOLE PRINT ROUTINE
5684 DCA P7TEMP /SAVE PASSED VALUE
5685 P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC.
5686 TAD ECHOSW /GET CURRENT ECHO STATUS
5687 SPA CLA /SKIP IF ECHO ON
5688 JMP P7OFF /JUMP IF ECHO OFF
5689 TAD P7TEMP /GET THE PASSED VALUE BACK
5690 JMS P7OUT /TRY TO OUTPUT IT
5691 JMP P7AGN /COULDN'T OUTPUT, GO WAIT THERE
5692 P7OFF, JMS CHKUP /CHECK FOR <^C>, ETC.
5693 TAD P7TEMP /GET THE CHARACTER BACK
5694 AND [140] /JUST QUADRANT BITS
5695 SZA CLA /SKIP IF CONTROL CHARACTER
5696 ISZ COLUMN /BUMP COLUMN IF PRINTING CHARACTER
5697 L11, CNTRLI/NOP /JUST IN CASE
5698 TAD P7TEMP /GET THE CHARACTER AGAIN
5699 TAD (-CNTRLM) /COMPARE TO <CR>
5700 SNA /SKIP IF NOT <CR>
5701 DCA COLUMN /CLEAR COLUMN COUNT ON <CR>
5702 TAD (-CNTRLH+CNTRLM)/COMPARE TO <BS>
5703 SNA CLA /SKIP IF OTHER
5704 NL7777 /SET BACKUP VALUE
5705 TAD COLUMN /UPDATE COLUMN COUNT
5706 DCA COLUMN /STORE BACK
5707 JMP I P7CHAR /RETURN
5708
5709 P7OUT, .-. /LOW-LEVEL CONSOLE OUTPUT ROUTINE
5710 P7TSF, TSFIOT /FLAG UP?
5711 JMP I P7OUT /NO, TAKE IMMEDIATE RETURN WITH AC INTACT
5712 P7TLS, TLSIOT /YES, OUTPUT IT
5713 CLA /CLEAN UP
5714 ISZ P7OUT /BUMP RETURN ADDRESS
5715 JMP I P7OUT /TAKE SKIP RETURN TO CALLER
5716
5717 / COMES HERE TO HANDLE <^C> IF SO ENABLED.
5718
5719 UPCPRT, TAD ("C&177) /GET A "C"
5720 JMS UPRINT /PRINT "^C"
5721 KCCZP2, KCCIOT /**** 6120 **** 0000
5722 JMP I [CLOOP] /RESTART
5723
5724 UPRINT, .-. /"^"<CHARACTER> PRINTING ROUTINE
5725 DCA P7TEMP /SAVE PASSED VALUE
5726 TAD ("^&177) /GET AN "^"
5727 JMS P7OUT /OUTPUT IT
5728 JMP .-1 /WAIT FOR IT
5729 TAD P7TEMP /GET PASSED VALUE
5730 JMS P7OUT /OUTPUT IT
5731 JMP .-1 /WAIT FOR IT
5732 JMP I UPRINT /RETURN
5733
5734 P7TEMP, .-. /OUTPUT ROUTINE TEMPORARY
5735 \f PAGE
5736
5737 / HANDLER I/O BUFFER DEFINITIONS. /014 CJL
5738
5739 HNDLR= . /BUFFER FOR DISK I/O HANDLER /014 CJL
5740
5741 *PAGCNT^200+HNDLR /RESET ORIGIN PAST HANDLER BUFFER /014 CJL
5742
5743 IFNZRO SBOOT-.&4000 <ERROR .> /028 CJL
5744
5745 *SBOOT-2 /JUST BEFORE EXIT ADDRESS /025 CJL
5746 EXITKER=. /WHERE TO EXIT TO /025 CJL
5747 0
5748 CAF /PHPH
5749 \f/ ONCE-ONLY INITIALIZATION CODE. /024 CJL
5750
5751 *HNDLR /OVER AVAILABLE SPACE
5752
5753 INITIAL,CLA CLL /CLEAN UP
5754 COUTINI,TLSIOT /RAISE CONSOLE OUTPUT FLAG /046 CJL
5755 TAD INITIA/(CLA CLL)/GET REPLACEMENT INSTRUCTION
5756 DCA I [CLOOP] /DON'T COME BACK TO US
5757 JMS I (MACHINE) /IDENTIFY CPU TYPE
5758 DCA CPUTEMP /SAVE IT
5759 TAD CPUTEMP /GET CPU TYPE
5760 TAD (-13) /COMPARE TO DEADLY 6120 VALUE
5761 SNA CLA /SKIP IF OTHER
5762 JMP INI6120 /JUMP IF IT MATCHES
5763 ROUTINI,RTLSIOT /INITIALIZE REMOTE OUTPUT /046 CJL
5764 RININIT,RKRBIOT /INITIALIZE REMOTE INPUT /046 CJL
5765 CLA /CLEAN UP
5766 INITPRT,
5767 /PHPHPH
5768 / JMS I [SCRIBE] /GIVE THEM THE
5769 / INITMSG /OPENING MESSAGE
5770 / JMS I [SCRIBE] /GIVE THEM THE
5771 / DAYMSG /DAY MESSAGE
5772 / JMS I [SCRIBE] /GIVE THEM THE
5773 / MONMSG /MONTH MESSAGE
5774 / JMS I [SCRIBE] /GIVE THEM THE
5775 / YEARMSG /YEAR MESSAGE
5776 / JMS I [SCRIBE] /GIVE THEM THE
5777 / CPUTMSG /CPU ID MESSAGE
5778 TAD CPUTEMP /*1
5779 CLL RTL /*4
5780 TAD CPUTEMP /*5
5781 TAD (CPULIST) /POINT TO PROPER MESSAGE
5782 DCA TST6120 /STORE IN-LINE
5783 / JMS I [SCRIBE] /TELL THEM THEIR
5784 SKP /PHPH
5785 TST6120,0 /ACTUAL CPU ID
5786 / JMS I [SCRIBE] /GIVE THEM THE
5787 / CLOSMSG /CLOSING MESSAGE
5788 DMPRZAP,JMP .+3 /**** DECMATE USAGE DETECTED **** 0000
5789 JMS I [SCRIBE] /GIVE THEM THE
5790 SPZAP, DMPOMSG /DECMATE PORT MESSAGE
5791 JMS I [SCRIBE] /GIVE THEM THE
5792 CRLF /END OF LINE
5793 JMS I [SCRIBE] /GIVE THEM THE
5794 LCLMSG /LOCAL PREFERENCE MESSAGE
5795 / JMS I [SCRIBE] /TELL THEM THEY CAN
5796 / THLPMSG /ASK FOR HELP
5797 TAD CPUTEMP /GET CPU TYPE
5798 CLL RTL /*4
5799 TAD (CPUPRMPT-1) /POINT TO PROPER ENTRY
5800 DCA XR0 /STASH THE POINTER
5801 TAD (-4) /GET MOVE COUNT
5802 JMS MESMOVE /MOVE THE PROPER PROMPT TEXT
5803 PROMID-1 /TO THERE
5804 \f TAD CPUTEMP /*1
5805 CLL RTL /*4
5806 TAD CPUTEMP /*5
5807 TAD (CPUIDLST-1) /POINT TO PROPER ENTRY
5808 DCA XR0 /STASH THE POINTER
5809 TAD (-5) /GET MOVE COUNT
5810 JMS MESMOVE /MOVE THE PROPER CPU ID TEXT
5811 CPUMSG-1 /TO THERE
5812 CIF USRFLD /GOTO USR FIELD /035 CJL
5813 JMS I (USR) /CALL USER SERVICE ROUTINE /035 CJL
5814 USRIN /LOCK USR IN /035 CJL
5815
5816 / DO FURTHER INITIALIZATION HERE.
5817
5818 JMP I [CLOOP] /GO BACK TO KERMIT PROPER
5819
5820 / COMES HERE TO INITIALIZE 6120-BASED MACHINES. /046 CJL
5821
5822 INI6120,DCA I (KCCZAP) /ELIMINATE KCCIOT
5823 DCA I (KCCZP2) /ELIMINATE KCCIOT
5824 ISZ I (KRSZAP) /TURN KRSIOT
5825 ISZ I (KRSZAP) /INTO KRBIOT
5826 TAD ROUTINITIALIZE /GET OUTPUT INITIALIZE INSTRUCTION /046 CJL
5827 TAD (-6336) /COMPARE TO POSSIBLE VALUE /046 CJL
5828 SZA CLA /SKIP IF IT MATCHES SERIAL PRINTER VALUE/046 CJL
5829 JMP TRYDM1 /JUMP IF NOT CONFIGURED FOR SERIAL PORT /046 CJL
5830 TAD RININITIALIZE /GET INPUT INITIALIZE INSTRUCTION /046 CJL
5831 TAD (-6326) /COMPARE TO POSSIBLE VALUE /046 CJL
5832 SNA CLA /SKIP IF NOT CONFIGURED FOR SERIAL PORT /046 CJL
5833 JMP DMSER /JUMP IF SERIAL PORT CONFIGURATION /046 CJL
5834 TRYDM1, CLSK /SKIP ON, CLEAR CLOCK FLAG IF DECMATE II/046 CJL
5835 NOP /JUST IN CASE /046 CJL
5836 CLCL /CLEAR VT278 CLOCK FLAG /046 CJL
5837 NOP /JUST IN CASE /046 CJL
5838 ISZ TST6120 /WASTE /046 CJL
5839 JMP .-1 /SOME TIME /046 CJL
5840 CLSK8A /VT278 CLOCK FLAG UP? /046 CJL
5841 JMP TRYDM2 /NO, TRY DECMATE II, ETC. /046 CJL
5842 DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /050 CJL
5843 CIF CDF DMIFLD /GOTO DECMATE ONCE-ONLY CODE FIELD /046 CJL
5844 JMP I (DM1INIT) /CONTINUE THERE /046 CJL
5845
5846 TRYDM2, CLSK /CLOCK FLAG UP? /046 CJL
5847 JMP ROUTINITIALIZE /NO, MUST BE SOMEBODY ELSE! /046 CJL
5848 DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /048 CJL
5849 CIF CDF DMIFLD /GOTO DECMATE ONCE-ONLY FIELD /046 CJL
5850 JMP I (DM2INIT) /CONTINUE THERE /046 CJL
5851
5852 / COMES HERE IF SERIAL PORT CONFIGURATION ON DECMATE.
5853
5854 DMSER, DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /048 CJL
5855 TAD (DMPPMSG) /GET OUR MESSAGE ADDRESS /048 CJL
5856 DCA SPZAP /STORE IN-LINE /048 CJL
5857 JMP ROUTINITIALIZE /CONTINUE THERE
5858 \fMESMOVE,.-. /MESSAGE MOVE ROUTINE
5859 DCA MMOVCNT /SAVE PASSED COUNT
5860 TAD I MESMOVE /GET THE PASSED ARGUMENT
5861 DCA XR1 /SET IT UP
5862 ISZ MESMOVE /BUMP PAST ARGUMENT
5863 CDF MSGFLD /GOTO BUFFER FIELD
5864 MESMVLP,TAD I XR0 /GET A WORD
5865 DCA I XR1 /PUT A WORD
5866 ISZ MMOVCNT /DONE YET?
5867 JMP MESMVLP /NO, GO BACK
5868 CDF PRGFLD /BACK TO OUR FIELD
5869 JMP I MESMOVE /YES, RETURN
5870
5871 CPUTEMP,.-. /TEMPORARY FOR MACHINE TYPE
5872 MMOVCNT,.-. /TEMPORARY FOR MOVE COUNT
5873
5874 PAGE
5875 \f/ CPU IDENTIFYING ROUTINE. /024 CJL
5876
5877 / RETURNS VALUE IN AC ACCORDING TO THE FOLLOWING RULE:
5878
5879 / AC CPU TYPE
5880
5881 / 0 UNKNOWN (DCC112, MP-12?)
5882 / 1 PDP-5 (THE INCOMPATIBLE ONE!)
5883 / 2 PDP-8 (THE REAL ONE!)
5884 / 3 PDP-8/S (THE SLOW ONE!)
5885 / 4 LINC-8 (THE STRANGE ONE!)
5886 / 5 PDP-8/I (THE ORANGE ONE!)
5887 / 6 PDP-8/L (THE STRIPPED-DOWN ONE!)
5888 / 7 PDP-12 (THE GREEN ONE! (BLUE?))
5889 / 10 PDP-8/E (THE FAST ONE!)
5890 / 11 PDP-8/A (THE WIDE ONE!)
5891 / 12 6100 (THE MICRO ONE!)
5892 / 13 6120 (THE HARRIS ONE!)
5893
5894 MACHINE,.-. /MACHINE IDENTIFYING ROUTINE
5895 CLA CLL /THIS WORKS ON EVERYBODY!
5896 TAD 0 /GET PDP-5 PC
5897 DCA MACHTEMP /SAVE IT
5898 TAD (IMA5-1) /GET PDP-5 NEW PC
5899 DCA 0 /STORE IT
5900
5901 / IF WE GET HERE, WE'RE NOT A PDP-5.
5902
5903 TAD MACHTEMP /GET OLD LOCATION ZERO
5904 DCA 0 /RESTORE IT
5905 NL3776 /PDP-8/I, L WEIRDNESS
5906 TAD (-3776) /COMPARE TO POSSIBLE VALUE
5907 SNA CLA /SKIP IF NOT THOSE TWO
5908 JMP IMA8IL /JUMP IF ONE OF THEM
5909
5910 / IF WE GET HERE, WE'RE NOT A PDP-8/I OR PDP-8/L.
5911
5912 NL7776 /SETUP -2
5913 TAD (-7776) /COMPARE TO EXPECTED VALUE
5914 SZA CLA /SKIP IF OK
5915 JMP IMA8S /JUMP IF RETARDED BROTHER
5916
5917 / IF WE GET HERE, WE'RE NOT A PDP-8/S.
5918
5919 NL0100 /SETUP 0100
5920 TAD (-100) /COMPARE TO EXPECTED VALUE
5921 SNA CLA /SKIP IF STRAIGHT PDP-8
5922 JMP IMAOMNIBUS /JUMP IF NEWER CPU
5923 \f/ IF WE GET HERE, WE ARE A PDP-8, BUT ARE WE A LINC-8?
5924
5925 NL7777 /SETUP LINC TEST VALUE
5926 IACA /LOAD LINC "A" REGISTER
5927 CLA /CLEAN UP
5928 IAAC /GET IT BACK
5929 IAC /ADD ONE
5930 SNA CLA /SKIP IF NO LINC HARDWARE
5931 JMP IMAL8 /JUMP IF LINC-8
5932
5933 / SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE A PDP-8.
5934
5935 JMP IMA8 /GO TELL THEM WE ARE A PDP-8
5936
5937 / COMES HERE IF PDP-8/I OR PDP-8/L.
5938
5939 IMA8IL, NL7777 /SETUP TEST VALUE
5940 CLA!401 /DO PDP-8/I GROUP THREE EAE CLA
5941 SZA CLA /SKIP IF PDP-8/I
5942 JMP IMA8L /JUMP IF NOT
5943
5944 / IF WE GET HERE, WE ARE A PDP-8/I, BUT ARE WE A PDP-12?
5945
5946 LINC /GOTO LINC MODE
5947 COM /COMPLEMENT AC IF PDP-12, ELSE A HARMLESS AND
5948 PDP /GOTO PDP8 MODE IF PDP-12, ELSE HARMLESS AND
5949 IAC /ADD ONE FOR TEST
5950 SNA CLA /SKIP IF JUST PDP-8/I
5951 JMP IMA12 /JUMP IF ACTUALLY A LINC-8/I
5952
5953 / SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE JUST A PDP-8/I.
5954
5955 JMP IMA8I /TELL THEM WE ARE A PDP-8/I
5956
5957 IMAOMNI,RTL RTR /DO STRANGE OMNIBUS INSTRUCTION
5958 PC8A, SNA /SKIP IF NOT A MICRO CHIP
5959 JMP IMA61 /JUMP IF ONE OF THOSE THINGS
5960 TAD (.&7600+16^7777) /CHECK FOR PDP-8/E VALUE
5961 SNA /SKIP IF NOT HIM
5962 JMP IMA8E /JUMP IF IT IS A PDP-8/E (/F OR /M OR 8A-6XX)
5963 TAD (.&7600+16-PC8A) /COMPARE TO PDP-8/A VALUE /051 CJL
5964 SNA CLA /SKIP IF SOMEBODY ELSE
5965 JMP IMA8A /JUMP IF IT MATCHES
5966
5967 / IF WE GET HERE, SOME STRANGE PROCESSOR IS RUNNING US.
5968
5969 JMP IMAUNKNOWN /YOU FIGURE IT OUT!
5970 \f/ IF WE GET HERE, WE ARE A 6100 OR 6120.
5971
5972 IMA61, NL0010 /DO 6120 SPECIAL INSTRUCTION
5973 TAD (-10) /COMPARE TO EXPECTED VALUE
5974 SNA CLA /SKIP IF OTHER
5975 JMP IMA6120 /JUMP IF IT MATCHES
5976
5977 / WE APPARENTLY ARE ON A 6100, SO TELL THEM SO.
5978
5979 JMP IMA6100 /TELL THEM WE ARE A 6100 MACHINE (VT-78, ETC.)
5980
5981 / RETURN GAUNTLET.
5982
5983 IMA6120,IAC /SET 6120 VALUE
5984 IMA6100,IAC /SET 6100 VALUE
5985 IMA8A, IAC /SET PDP-8/A VALUE
5986 IMA8E, IAC /SET PDP-8/E VALUE
5987 IMA12, IAC /SET PDP-12 VALUE
5988 IMA8L, IAC /SET PDP-8/L VALUE
5989 IMA8I, IAC /SET PDP-8/I VALUE
5990 IMAL8, IAC /SET LINC-8 VALUE
5991 IMA8S, IAC /SET PDP-8/S VALUE
5992 IMA8, IAC /SET PDP-8 VALUE
5993 IMA5, IAC /SET PDP-5 VALUE
5994 IMAUNKN,JMP I MACHINE /RETURN
5995
5996 MACHTEM,.-. /TEMPORARY FOR LOCATION ZERO
5997
5998 PAGE
5999 \f FIELD PRGFLD%10 /DUMP THE LITERALS NOW
6000 \f/ LAYOUT OF FIELD ONE (PERMANENT CONTENTS). /046 CJL
6001
6002 NOPUNCH /FOOL THE ASSEMBLER /046 CJL
6003
6004 FIELD USRFLD%10 /USR FIELD /046 CJL
6005
6006 *0 /WHERE IT LOADS /046 CJL
6007
6008 USRLOAD,ZBLOCK 200-. /GET TO ENTRY POINT /046 CJL
6009
6010 USRENTR=. /LOCKED-IN USR ENTRY POINT /046 CJL
6011
6012 USRENTR,ZBLOCK 2000-. /USR OWNS REST OF THIS AREA /046 CJL
6013
6014 FILBUFF=. /FILE I/O DONE HERE /046 CJL
6015
6016 FIELD BUFFLD%10 /FILE I/O BUFFER FIELD /046 CJL
6017
6018 *FILBUFFER /RESET ORIGIN /046 CJL
6019
6020 FILBUFF,ZBLOCK PAGCNT^200 /THIS IS THE FILE I/O BUFFER /046 CJL
6021
6022 DIRBUFF=. /DIRECTORY LOOKUP I/O DONE HERE /028 CJL
6023
6024 FIELD DIRFLD%10 /DIRECTORY LOOKUP BUFFER FIELD /028 CJL
6025
6026 *DIRBUFFER /RESET ORIGIN /028 CJL
6027
6028 FILECNT,.-. /-(NUMBER OF ENTRIES IN THIS SEGMENT)
6029 FRSTREC,.-. /FIRST RECORD OF FIRST ENTRY IN THIS SEGMENT
6030 DIRLINK,.-. /LINK TO NEXT SEGMENT; 0 IF LAST ACTIVE ONE
6031 .-. /TENTATIVE ENTRY POINTER STORED HERE
6032 AIWNUMB,.-. /-(NUMBER OF ADDITIONAL INFORMATION WORDS)
6033
6034 ENTSTRT=. /FILE ENTRIES START HERE /046 CJL
6035
6036 ZBLOCK PAGCNT^200+DIRBUFFER-. /DIRECTORY ENTRIES HERE /046 CJL
6037
6038 / CONNECT MODE I/O BUFFERS. /026 CJL
6039
6040 KEYBUFF,ZBLOCK BUFSIZE /KEYBOARD BUFFER /026 CJL
6041 CONBUFF,ZBLOCK BUFSIZE /CONSOLE OUTPUT BUFFER /026 CJL
6042 RINBUFF,ZBLOCK BUFSIZE /REMOTE INPUT BUFFER /026 CJL
6043 REMBUFF,ZBLOCK BUFSIZE /REMOTE OUTPUT BUFFER /026 CJL
6044
6045 FLD1ADR=. /SPACE AVAILABLE FOR TEXT, ETC. /046 CJL
6046
6047 ENPUNCH /UN-FOOL THE ASSEMBLER /046 CJL
6048 \f/ DECMATE ONCE-ONLY CODE. /046 CJL
6049
6050 FIELD DMIFLD%10 /DECMATE ONCE-ONLY CODE FIELD /046 CJL
6051
6052 *USRLOAD /OVER USR ROUTINE /046 CJL
6053
6054 / PAGE ZERO FOR ONCE-ONLY CODE. /046 CJL
6055
6056 *10 /GET TO AUTO-INDEX AREA /048 CJL
6057
6058 XR0, .-. /AUTO-INDEX ZERO /048 CJL
6059
6060 *USRENTRY /OVER USR ENTRY POINT /046 CJL
6061
6062 / DECMATE I ONCE-ONLY CODE. /046 CJL
6063
6064 DM1INIT,JMS I (DM1PORT) /INITIALIZE THE REMOTE PORTS /050 CJL
6065 TAD (DM1LIST-1) /POINT TO REPLACEMENT LIST /050 CJL
6066 JMS REPLACE /ZAP IN ALL OF OUR PATCHES /050 CJL
6067 CDF PRGFLD /GOTO MAIN FIELD /050 CJL
6068 TAD I (DIRXR) /GET PORT SELECTION /050 CJL
6069 SNA CLA /SKIP IF PORT 1 REQUIRED /050 CJL
6070 JMP USEP0 /JUMP IF PORT 0 REQUIRED /050 CJL
6071 TAD (DM1SEC-1) /POINT TO REPLACEMENT LIST /050 CJL
6072 JMS REPLACE /ZAP IN SECONDARY PATCHES /050 CJL
6073 USEP0, CIF CDF PRGFLD /BACK TO REST OF INITIALIZATION /046 CJL
6074 JMP I (INITPRT) /CONTINUE THERE /046 CJL
6075
6076 / DECMATE II, ETC. ONCE-ONLY CODE. /046 CJL
6077
6078 DM2INIT,JMS I (DMIPORT) /INITIALIZE THE REMOTE PORT /048 CJL
6079 TAD (DM2LIST-1) /POINT TO REPLACEMENT LIST /048 CJL
6080 JMS REPLACE /ZAP IN ALL OF OUR PATCHES /048 CJL
6081 CIF CDF PRGFLD /BACK TO REST OF INITIALIZATION /046 CJL
6082 JMP I (INITPRT) /CONTINUE THERE /046 CJL
6083
6084 REPLACE,.-. /REPLACEMENT ROUTINE /048 CJL
6085 DCA XR0 /SAVE PASSED LIST POINTER /048 CJL
6086 REPLUP, CDF DMIFLD /BACK TO OUR FIELD /048 CJL
6087 TAD I XR0 /GET AN ADDRESS /048 CJL
6088 SNA /SKIP IF NOT AT END OF LIST /048 CJL
6089 JMP I REPLACE /RETURN IF END OF LIST /048 CJL
6090 DCA REPADR /STASH THE ADDRESS /048 CJL
6091 TAD I XR0 /GET THE REPLACEMENT VALUE /048 CJL
6092 CDF PRGFLD /GOTO ZAPPING FIELD /048 CJL
6093 DCA I REPADR /ZAP IT IN /048 CJL
6094 JMP REPLUP /KEEP GOING /048 CJL
6095
6096 REPADR, .-. /REPLACEMENT ADDRESS TEMPORARY /048 CJL
6097 \f/ DECMATE I PORT INITIALIZE ROUTINE /050 CJL
6098
6099 DM1PORT,.-. /DECMATE I PORT INITIALIZE ROUTINE
6100 TAD (234) /GET PORT 0 SCD ENABLE VALUE
6101 WCON0 /WRITE PORT 0 CONTROL REGISTER
6102 NL0000 /INDICATE PORT 0
6103 JMS PRTINIT /INITIALIZE PORT 0
6104
6105 / CHANGE ALL IOTS TO PORT 1 VALUES.
6106
6107 IOCLUP, ISZ PSETF1 /BUMP SET FLAG INSTRUCTION
6108 ISZ PDUMRD /BUMP DUMMY READ INSTRUCTION
6109 ISZ PSETF2 /BUMP SET FLAG INSTRUCTION
6110 ISZ PSKIP /BUMP SKIP ON FLAG INSTRUCTION
6111 ISZ PLOAD /BUMP LOAD INSTRUCTION
6112 ISZ IOTCNT /DONE YET?
6113 JMP IOCLUP /NO, KEEP GOING
6114
6115 TAD (234) /GET PORT 1 SCD ENABLE VALUE
6116 WCON1 /WRITE PORT 1 CONTROL REGISTER
6117 NL4000 /INDICATE PORT 1
6118 JMS PRTINIT /INITIALIZE PORT 1
6119 JMP I DM1PORT /RETURN
6120
6121 PRTINIT,.-. /LOW-LEVEL PORT INTIALIZE ROUTINE
6122 RACD /RESET DESIRED PORT
6123 ISZ PWASTE /WASTE
6124 JMP .-1 /SOME TIME
6125 CLA /CLEAN UP
6126 PSETF1, RTFL0 /SET THE FLAG NOW
6127 TAD (2516) /SETUP FOR 8 BITS, NO PARITY, ETC.
6128 JMS PSEND /SEND TO MODE REGISTER 1
6129 CDF PRGFLD /GOTO MAIN FIELD
6130 TAD I (RATE) /GET BAUD RATE NOW
6131 CDF DMIFLD /BACK TO OUR FIELD
6132 TAD (2460) /ADD ON CLOCK ENABLES, ETC.
6133 JMS PSEND /SEND TO MODE REGISTER 2
6134 TAD (3425) /GET ENABLE AND RESET VALUE
6135 JMS PSEND /SEND TO COMMAND REGISTER
6136 PDUMRD, RKRB0 /DO A DUMMY READ NOW
6137 PSETF2, RTFL0 /SET THE FLAG NOW
6138 CLA /CLEAN UP
6139 JMP I PRTINIT /RETURN
6140
6141 PSEND, .-. /PORT WRITE ROUTINE
6142 PSKIP, RTSF0 /FLAG UP?
6143 JMP PSKIP /NO, WAIT FOR IT
6144 PLOAD, RTLS0 /YES, LOAD THE VALUE
6145 CLA /CLEAN UP
6146 JMP I PSEND /RETURN
6147
6148 IOTCNT, RKFL0-RKFL1 /INTER-DEVICE IOT COUNT
6149 PWASTE, 0 /TIMER TEMPORARY
6150 \f PAGE
6151 \f/ DECMATE II, ETC. PORT INITIALIZE ROUTINE. /048 CJL
6152
6153 / THIS ROUTINE IS MOSTLY "DARK GREY MAGIC" WHICH IS PRIMARILY DERIVED FROM THE
6154 / "OFFICIAL" INFORMATION TAKEN FROM THE ONLY KNOWN DOCUMENTATION, THE DECMATE II
6155 / PROGRAMMER'S REFERENCE MANUAL: EK-DECM2-RM-001. VARIOUS EMPLOYEES OF DIGITAL
6156 / EQUIPMENT CORPORATION (A MULTI-NATIONAL COMPANY) HAVE ADDITIONALLY CONTRIBUTED
6157 / TO THIS EFFORT BY PROVIDING PORTIONS OF THE "SACRED SLUSHWARE NOTES" ON A NOT
6158 / NECESSARILY WILLING BASIS THROUGH THEIR RELEASED WORKS, SUCH AS, BUT NOT
6159 / LIMITED TO, THE SOURCES OF THE PARTICULAR VERSION OF KERMIT-8 KNOWN AS K278.
6160 / IT IS ASSUMED THAT THESE PEOPLE HAVE ACCESS TO BETTER DOCUMENTATION OF THE
6161 / HARDWARE, AND ESPECIALLY DOCUMENTATION OF THE THREE DIFFERENT MODELS OF
6162 / DECMATE (II, III, III+) THAT THESE ISSUES APPLY TO.
6163
6164 / SINCE IT IS NOT KNOWN WHETHER THE K278, ETC. CODE IS SPECIFIC AND PRECISE, OR
6165 / MERELY SLOPPY, VARIOUS "QUIRKY" CODING TECHNIQUES HAVE BEEN LEFT "AS IS", WITH
6166 / COMMENTS REGARDING POTENTIAL VARIANCE WITH DOCUMENTATION NOTED WHERE
6167 / NECESSARY. THE ORDER OF ACCESS TO THE REGISTERS HAS BEEN LEFT INTACT IN CASE
6168 / OF POTENTIAL INTERACTION. SEVERAL CHANGES HAVE BEEN MADE BEYOND THIS WORK AS
6169 / A RESULT OF TRIAL-AND-ERROR, AND ALSO HAND DIS-ASSEMBLY OF SEVERAL DECMATE
6170 / DISKETTES' CONTENTS.
6171
6172 / IT IS HOPED THAT FUTURE "NEGOTIATIONS" WITH DEC ALLOW FOR PROPER DISCLOSURE OF
6173 / THESE ISSUES TO AVOID POTENTIAL SOFTWARE FAILURES EVIDENT IN THESE ROUTINES
6174 / DUE TO LACK OF PROPER DOCUMENTATION.
6175
6176 DMIPORT,.-. /COMMUNICATIONS PORT INITIALIZE ROUTINE
6177
6178 / ACCORDING TO THE DECMATE II MANUAL, THE FOLLOWING INSTRUCTION IS UNDEFINED.
6179
6180 MPRESET /RESET MULTIPROTOCOL COMMUNICATIONS CONTROLLER CHIP
6181
6182 / THE DECMATE III HAS AN INTERNAL MODEM OPTION WHICH IS NOT AVAILABLE IN THE
6183 / DECMATE II. THE INTERFACE TO THIS DEVICE IS APPARENTLY SHARED WITH THE MPSCC
6184 / MODEM INTERFACE WE NORMALLY USE, SO THE REGISTER ACCESS MUST BE MORE CAREFULLY
6185 / DEFINED. THE APPARENT DIFFERENTIATION IS THE CURRENT VALUE OF THE DATA FIELD,
6186 / NAMELY EITHER FIELD 0 OR 1. IT IS NOT KNOWN WHETHER THE THREE-BIT VALUE OF
6187 / THE DATA FIELD IS SIGNIFICENT (PRESUMABLY FOR FUTURE EXPANSION), OR MERELY THE
6188 / DATA FIELD'S LOW-ORDER BIT IS USED, AS ALL KNOWN EXAMPLES OF ALLEDGEDLY
6189 / FUNCTIONAL CODE USE APPROPRIATE CDF 00 AND CDF 10 ONLY. APPARENTLY THE MODEM
6190 / INTERFACE IS REFERRED TO AS "A" AND THE MPSCC INTERFACE IS REFERRED TO AS "B".
6191
6192 TAD (030) /GET RESET VALUE
6193 CDF 00 /TALKING TO REGISTER 0A
6194 MPSCC /RESET COMMUNICATIONS CHIP
6195 CDF 10 /TALKING TO REGISTER 0B
6196 MPSCC /RESET COMMUNICATIONS CHIP
6197 \f/ ACCORDING TO THE DECMATE II MANUAL, CONTROL REGISTER 2 "HAS NO RELEVANT
6198 / BITS... IF IT IS EVER WRITTEN, IT MUST BE WRITTEN WITH ALL ZEROS." APPARENTLY
6199 / THE MODEM INTERFACE DEMANDS A NON-ZERO VALUE BE WRITTEN TO REGISTER 2
6200 / (PRESUMABLY TO DISABLE IT). TO SATISFY THE ABOVE REQUIREMENT (WHATEVER THIS
6201 / IMPLIES!), REGISTER 2(B) IS WRITTEN WITH ALL ZEROS *LAST* IN CASE THIS IS A
6202 / DECMATE II WHERE THE DATA FIELD CONSIDERATIONS ARE MEANINGLESS.
6203
6204 CDF 00 /TALKING TO REGISTER 0A
6205 NL0002 /WANT REGISTER 2A
6206 MPSCC /SELECT IT
6207 TAD (020-2) /GET RESET VALUE
6208 MPSCC /LOAD IT
6209 CDF 10 /TALKING TO REGISTER 0B
6210 NL0002 /WANT REGISTER 2B
6211 MPSCC /SELECT IT
6212 NL0000 /GET RESET VALUE (000)
6213 MPSCC /LOAD IT
6214
6215 / THE K278 CODE DOES NOT HAVE SETUP CODE FOR REGISTER 4B, PRESUMABLY BECAUSE THE
6216 / CODE PERFORMS A PANEL REQUEST (PRQ3) WHICH SETS UP THE EQUIVALENT VALUES FOR
6217 / ASYNCHRONOUS OPERATION WITH ONE STOP BIT AND NO PARITY. IT IS NOT KNOWN IF
6218 / THE DECMATE III EVEN *HAS* A REGISTER 4B, BUT PRESUMABLY IT IS AVAILABLE FOR
6219 / LOADING THE RIGHT VALUES COMPATIBLE WITH THE DECMATE II, OR ATTEMPTING TO LOAD
6220 / IT IS INNOCUOUS.
6221
6222 CDF 00 /TALKING TO REGISTER 0A
6223 NL0004 /WANT REGISTER 4A
6224 MPSCC /SELECT IT
6225 TAD (104-4) /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
6226 MPSCC /LOAD IT
6227 CDF 10 /TALKING TO REGISTER 0B
6228 NL0004 /WANT REGISTER 4B
6229 MPSCC /SELECT IT
6230 TAD (104-4) /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
6231 MPSCC /LOAD IT
6232 \f/ THE DOCUMENTED VALUES (FOR DECMATE II) REGARDING CONTROL REGISTER 1 INDICATE
6233 / THE PROPER VALUE OF 022, WHERE BIT[9] IS DEFINED AS A ZERO. THE VALUE OF 026
6234 / IS TAKEN FROM K278 WHERE PRESUMABLY THE EXTRA BIT IS NECESSARY FOR SOME
6235 / DECMATE III OBSCURITY.
6236
6237 / THE FOLLOWING CODE IS REDUNDANT FOR LOADING REGISTER 0A BEFORE AND AFTER
6238 / LOADING REGISTER 0B. THIS IS EITHER A MISTAKE OR OBSCURELY NECESSARY (TAKEN
6239 / FROM K278).
6240
6241 CDF 00 /TALKING TO REGISTER 0A
6242 NL0001 /WANT REGISTER 1A
6243 MPSCC /SELECT IT
6244 TAD (026-1) /GET SETUP VALUE
6245 MPSCC /LOAD IT
6246 CDF 10 /TALKING TO REGISTER 0B
6247 NL0001 /WANT REGISTER 1B
6248 MPSCC /SELECT IT
6249 TAD (026-1) /GET SETUP VALUE
6250 MPSCC /LOAD IT
6251 CDF 00 /TALKING TO REGISTER 0A
6252 NL0001 /WANT REGISTER 1A
6253 MPSCC /SELECT IT
6254 TAD (026-1) /GET SETUP VALUE
6255 MPSCC /LOAD IT
6256
6257 / THE DECMATE III INTERNAL MODEM IS PROBABLY ASYNCHRONOUS 8 BIT ONLY. ASSUMING
6258 / THE RECEIVE SIDE OF THE INTERNAL MODEM IS ALWAYS "ENABLED", REGISTER 3A WOULD
6259 / BE UNNECESSARY. THE K278 CODE DOES NOT ADDRESS REGISTER 3 AS AN A/B PAIR,
6260 / PRESUMABLY BECAUSE REGISTER 3 IS NOT DECODED AND IS EFFECTIVELY REGISTER 3B
6261 / REGARDLESS OF THE DATA FIELD. THIS IS EITHER TRUE, OR THE K278 CODING FAILS
6262 / TO PROPERLY INITIALIZE THE DECMATE III MPSCC PORT.
6263
6264 NL0003 /WANT REGISTER 3
6265 MPSCC /SELECT IT
6266 TAD (301-3) /SETUP FOR 8 BITS AND ENABLE RECIVER
6267 MPSCC /LOAD IT
6268
6269 / A SIMILAR SITUATION EXISTS FOR THE TRANSMITTER SIDE OF THE DECMATE III
6270 / INTERNAL MODEM. REGISTER 5 IS UTILIZED ACCORDINGLY.
6271
6272 TAD (5-301) /WANT REGISTER 5
6273 MPSCC /SELECT IT
6274 TAD (150-5) /GET TRANSMITTER ENABLE, 8 BITS VALUE
6275 MPSCC /LOAD IT
6276
6277 / THE DECMATE II REFERENCE MANUAL INDICATES THE PROPER SETTING FOR THE MODEM
6278 / CONTROL REGISTER AS EITHER 030 OR 130 DEPENDING ON WHETHER BIT[5] INDICATES
6279 / INTERNAL OR EXTERNAL TIMING (WHERE ONE OF THESE IS ILLEGAL FOR ASYNCHRONOUS
6280 / OPERATION!). THE SETTING OF BITS [10] AND [11] WOULD INDICATE ENABLING OF
6281 / BOTH LOCAL AND REMOTE LOOPBACKS, YET WE SET ONLY THESE BITS (ALA K278)
6282 / ALLEDGEDLY FOR THE PURPOSE OF SETTING RTS AND DTR (WHICH ARE DOCUMENTED AS
6283 / BEING BITS[7] AND [8] RESPECTIVELY).
6284
6285 NL0003 /SET VALUE
6286 MLC /LOAD IT
6287 \f CLA /CLEAN UP
6288
6289 / THE BAUD RATE SHOULD BE SET HERE IF DESIRED.
6290
6291 / TAD BAUD /GET BAUD RATE
6292 / MSB /LOAD IT
6293 CLA /CLEAN UP
6294 JMP I DMIPORT /RETURN
6295 \f/ DECMATE II, ETC. REPLACEMENT LIST. /048 CJL
6296
6297 DM2LIST,CLDMZAP / *CLDMZAP
6298
6299 DMINIT&177+JMSC /CLDMZAP,JMS DMINIT
6300
6301 SETBAUD / *SETBAUD /050 CJL
6302
6303 MSB /SETBAUD,MSB /050 CJL
6304
6305 INLUP / *INLUP
6306
6307 TAD INFLAG /INLUP, TAD INFLAG
6308
6309 INSKIP / *INSKIP
6310
6311 NOTYET&177+JMPC /INSKIP, JMP NOTYET
6312 INLUP1; DCA INFLAG /INLUP1, DCA INFLAG
6313 INREAD; IRB /INREAD, IRB
6314
6315 INSTATUS / *INSTATUS
6316
6317 UPSTATUS&177+JMSC /INSTATU,JMS UPSTATUS
6318
6319 GETFL1 / *GETFL1
6320
6321 UPSTATUS&177+JMSC /GETFL1, JMS UPSTATUS
6322
6323 COMWAIT / *COMWAIT
6324
6325 GETFLOW&177+JMSC /COMWAIT,JMS GETFLOW
6326
6327 NOWAIT / *NOWAIT
6328
6329 TAD OUTFLAG /NOWAIT, TAD OUTFLAG
6330 CMOUT1; SNA CLA /CMOUT1, SNA CLA
6331 CMOUT2; OWAIT&177+JMPC /CMOUT2, JMP OWAIT
6332 DM1AND; DCA OUTFLAG /DM1AND, DCA OUTFLAG
6333 CMOUT3; OUTEMP&177+TADC /CMOUT3, TAD OUTEMP
6334 CMOUT4; OLS /CMOUT4, OLS
6335
6336 BUFCHECK / *BUFCHECK
6337
6338 PUPSTATUS&177+JMSIC /BUFCHEC,JMS I PUPSTATUS
6339
6340 KERRLUP / *KERRLUP
6341
6342 PUPSTATUS&177+JMSIC /KERRLUP,JMS I PUPSTATUS
6343 \f RINTEST / *RINTEST
6344
6345 TAD INFLAG /RINTEST,TAD INFLAG
6346 RINGT0; SNA CLA /RINGT0, SNA CLA
6347 RINREAD;RINGNONE&177+JMPC /RINREAD,JMP RINGNONE
6348 RINGT1; DCA INFLAG /RINGT1, DCA INFLAG
6349 RINGT2; IRB /RINGT2, IRB
6350
6351 REMTSF / *REMTSF
6352
6353 RMPTEMP&177+DCAC /REMTSF, DCA RMPTEMP
6354 RMPUT0; TAD OUTFLAG /RMPUT0, TAD OUTFLAG
6355 REMTLS; SNA CLA /REMTLS, SNA CLA
6356 RMPUT1; REMPUT&177+JMPIC /RMPUT1, JMP I REMPUT
6357 REMCLEA;RMPTEMP&177+TADC /REMCLEA,TAD RMPTEMP
6358 RMPUT2; OLS /RMPUT2, OLS
6359
6360 0 /THIS ENDS THE LIST
6361
6362 PAGE
6363 \f/ DECMATE I REPLACEMENT LIST. /050 CJL
6364
6365 DM1LIST,CLDMZAP / *CLDMZAP
6366
6367 DMINIT&177+JMSC /CLDMZAP,JMS DMINIT
6368
6369 SETBAUD / *SETBAUD
6370
6371 NOP /SETBAUD,NOP
6372
6373 DMI01 / *DMI01
6374
6375 DM234&177+TADC /DMI01, TAD DM234/(234)
6376 DMI02; WCON0 /DMI02, WCON0
6377 DMI03; NL0000 /DMI03, NL0000
6378 DMI04; RACD /DMI04, RACD
6379 DMI05; DMWASTE&177+ISZC /DMI05, ISZ DMWASTE
6380 DMI06; DMI05&177+JMPC /DMI06, JMP DMI05
6381 DMI07; DMWASTE&177+ISZC /DMI07, ISZ DMWASTE
6382 DMI08; DMI07&177+JMPC /DMI08, JMP DMI07
6383 DMI09; RTFL0 /DMI09, RTFL0
6384 DMI10; DM2516&177+TADC /DMI10, TAD DM2516/(2516)
6385 DMI11; DMSEND&177+JMSC /DMI11, JMS DMSEND
6386 DMI12; TAD RATE /DMI12, TAD RATE
6387 DMI13; DM2460&177+TADC /DMI13, TAD DM2460/(2460)
6388 DMI14; DMSEND&177+JMSC /DMI14, JMS DMSEND
6389 DMI15; DM3425&177+TADC /DMI15, TAD DM3425/(3425)
6390 DMI16; DMSEND&177+JMSC /DMI16, JMS DMSEND
6391 DMI17; RKRB0 /DMI17, RKRB0
6392
6393 DMISET / *DMISET
6394
6395 RTFL0 /DMISET, RTFL0
6396
6397 DMISKP / *DMISKP
6398
6399 RTSF0 /DMISKP, RTSF0
6400 \f DMIOUT / *DMIOUT
6401
6402 RTLS0 /DMIOUT, RTLS0
6403
6404 INSKIP / *INSKIP
6405
6406 RKSF0 /INSKIP, RKSF0
6407
6408 INREAD / *INREAD
6409
6410 RKRB0 /INREAD, RKRB0
6411
6412 COMWAIT / *COMWAIT
6413
6414 GETFLOW&177+JMSC /COMWAIT,JMS GETFLOW
6415
6416 NOWAIT / *NOWAIT
6417
6418 RTSF0 /NOWAIT, RTSF0
6419 CMOUT1; OWAIT&177+JMPC /CMOUT1, JMP OWAIT
6420
6421 DM1AND / *DM1AND
6422
6423 AND377 /DM1AND, AND [377]
6424
6425 CMOUT4 / *CMOUT4
6426
6427 RTLS0 /CMOUT4, RTLS0
6428
6429 RINTEST / *RINTEST
6430
6431 RKSF0 /RINTEST,RKSF0
6432
6433 RINREAD / *RINREAD
6434
6435 RKRB0 /RINREAD,RKRB0
6436 RINGT1; SKP /RINGT1, SKP
6437
6438 DM1AN2 / *DM1AN2
6439
6440 AND377 /DM1AN2, AND [377]
6441
6442 REMTSF / *REMTSF
6443
6444 RTSF0 /REMTSF, RTSF0
6445
6446 REMTLS / *REMTLS
6447
6448 RTLS0 /REMTLS, RTLS0
6449
6450 0 /THIS ENDS THE LIST
6451 \f/ DECMATE I SECONDARY REPLACEMENT LIST /050 CJL
6452
6453 DM1SEC, DMI02 / *DMI02
6454
6455 WCON1 /DMI02, WCON1
6456 DMI03; NL4000 /DMI03, NL4000
6457
6458 DMI09 / *DMI09
6459
6460 RTFL1 /DMI09, RTFL1
6461
6462 DMI17 / *DMI17
6463
6464 RKRB1 /DMI17, RKRB1
6465
6466 DMISET / *DMISET
6467
6468 RTFL1 /DMISET, RTFL1
6469
6470 DMISKP / *DMISKP
6471
6472 RTSF1 /DMISKP, RTSF1
6473
6474 DMIOUT / *DMIOUT
6475
6476 RTLS1 /DMIOUT, RTLS1
6477
6478 INSKIP / *INSKIP
6479
6480 RKSF1 /INSKIP, RKSF1
6481
6482 INREAD / *INREAD
6483
6484 RKRB1 /INREAD, RKRB1
6485
6486 NOWAIT / *NOWAIT
6487
6488 RTSF1 /NOWAIT, RTSF1
6489
6490 CMOUT4 / *CMOUT4
6491
6492 RTLS1 /CMOUT4, RTLS1
6493
6494 RINTEST / *RINTEST
6495
6496 RKSF1 /RINTEST,RKSF1
6497
6498 RINREAD / *RINREAD
6499
6500 RKRB1 /RINREAD,RKRB1
6501
6502 REMTSF / *REMTSF
6503
6504 RTSF1 /REMTSF, RTSF1
6505 \f REMTLS / *REMTLS
6506
6507 RTLS1 /REMTLS, RTLS1
6508
6509 0 /THIS ENDS THE LIST
6510 \f/ ONCE-ONLY TEXT MESSAGES. /024 CJL
6511
6512 FIELD BUFFLD%10 /FILE I/O BUFFER FIELD
6513
6514 *FILBUFFER /OVER FILE I/O BUFFER
6515
6516 / LOCAL PREFERENCE MESSAGE. /024 CJL
6517
6518 / USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE.
6519
6520 / THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE.
6521
6522 XLIST OFF
6523 IFZERO GENMSG <
6524 XLIST ON
6525 LCLMSG, *LCLMSG+40 /EMPTY HOLE FOR USER MESSAGE /039 CJL
6526
6527 XLIST OFF >
6528 IFNZRO GENMSG <
6529 IFNZRO LEDERLE <
6530 XLIST ON
6531 LCLMSG, TEXT "%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%"
6532
6533 XLIST OFF >
6534 IFNZRO UMSG <
6535 XLIST ON
6536 LCLMSG, TEXT "%^I^NSERT LOCAL USER MESSAGE HERE!%^"
6537
6538 XLIST OFF >
6539 IFZERO LEDERLE!UMSG <
6540 XLIST ON
6541 LCLMSG, TEXT "^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE
6542
6543 XLIST OFF >
6544 IFNZRO LCLMSG+40-. <
6545 XLIST ON
6546 ZBLOCK LCLMSG+40-. /LEAVE PATCHING SPACE
6547
6548 XLIST OFF >
6549 >
6550 XLIST ON
6551 CLOSMSG,TEXT "^]^" /CPU TYPE CLOSING MESSAGE
6552 \f/ CPU IDENTIFICATION LIST; ALL MUST BE 5 WORDS LONG (EXCEPT LAST)./024 CJL
6553
6554 CPULIST,TEXT "^U^NKNOWN" /00=UNKNOWN
6555 TEXT "^PDP^-5^^" /01=PDP-5
6556 TEXT "^PDP^-8^^" /02=PDP-8
6557 TEXT "^PDP^-8/S" /03=PDP-8/S
6558 TEXT "^LINC^-8^" /04=LINC-8
6559 TEXT "^PDP^-8/I" /05=PDP-8/I
6560 TEXT "^PDP^-8/L" /06=PDP-8/L
6561 TEXT "^PDP^-12^" /07=PDP-12
6562 TEXT "^PDP^-8/E" /10=PDP-8/E
6563 TEXT "^PDP^-8/A" /11=PDP-8/A
6564 \f TEXT "6100^^^^^" /12=6100
6565 TEXT "6120^" /13=6120; LAST CAN BE SHORT!
6566 CPUTMSG,TEXT "%^[C^PU TYPE IS: " /CPU TYPE MESSAGE
6567 DAYMSG, DAY%12^66+DAY+6060 /DAY MESSAGE
6568 TEXT " "
6569 DMPOMSG,TEXT " ^[U^SING ^C^OMMUNICATIONS" /DECMATE PORT MESSAGE
6570 TEXT " ^P^ORT^]"
6571 DMPPMSG,TEXT " ^[U^SING ^P^RINTER ^P^ORT^]^" /DECMATE SERIAL PORT MESSAGE
6572 \fINITMSG,TEXT "%^PS/8 PS/12 OS/8 OS/12 " /INITIAL MESSAGE
6573 TEXT "OS/78 OS/278 K^ERMIT-12 ^V"
6574 INMSG2, VERSION%12^66+VERSION+6060 /VERSION DIGITS
6575 INMSG3, "^^100+REVISION /REVISION
6576 TEXT " " /END OF MESSAGE
6577 XLIST OFF
6578 IFZERO MONTH-1 <
6579 XLIST ON
6580 MONMSG, TEXT "^J^ANUARY ^" /MONTH MESSAGE
6581 XLIST OFF >
6582 IFZERO MONTH-2 <
6583 XLIST ON
6584 MONMSG, TEXT "^F^EBRUARY " /MONTH MESSAGE
6585 XLIST OFF >
6586 IFZERO MONTH-3 <
6587 XLIST ON
6588 MONMSG, TEXT "^M^ARCH ^" /MONTH MESSAGE
6589 XLIST OFF >
6590 IFZERO MONTH-4 <
6591 XLIST ON
6592 MONMSG, TEXT "^A^PRIL ^" /MONTH MESSAGE
6593 XLIST OFF >
6594 IFZERO MONTH-5 <
6595 XLIST ON
6596 MONMSG, TEXT "^M^AY ^" /MONTH MESSAGE
6597 XLIST OFF >
6598 IFZERO MONTH-6 <
6599 XLIST ON
6600 MONMSG, TEXT "^J^UNE " /MONTH MESSAGE
6601 XLIST OFF >
6602 IFZERO MONTH-7 <
6603 XLIST ON
6604 MONMSG, TEXT "^J^ULY " /MONTH MESSAGE
6605 XLIST OFF >
6606 IFZERO MONTH-10 <
6607 XLIST ON
6608 MONMSG, TEXT "^A^UGUST " /MONTH MESSAGE
6609 XLIST OFF >
6610 IFZERO MONTH-11 <
6611 XLIST ON
6612 MONMSG, TEXT "^S^EPTEMBER ^" /MONTH MESSAGE
6613 XLIST OFF >
6614 IFZERO MONTH-12 <
6615 XLIST ON
6616 MONMSG, TEXT "^O^CTOBER ^" /MONTH MESSAGE
6617 XLIST OFF >
6618 IFZERO MONTH-13 <
6619 XLIST ON
6620 MONMSG, TEXT "^N^OVEMBER " /MONTH MESSAGE
6621 XLIST OFF >
6622 IFZERO MONTH-14 <
6623 XLIST ON
6624 MONMSG, TEXT "^D^ECEMBER " /MONTH MESSAGE
6625 XLIST OFF >
6626 IFNZRO MONMSG+7-. <
6627 XLIST ON
6628
6629 ZBLOCK MONMSG+7-. /EMPTY SPACE FOR ALIGNMENT
6630
6631 XLIST OFF >
6632 XLIST ON
6633 \fTHLPMSG,TEXT "%^T^YPE ^HELP<CR>^ FOR HELP%^" /TYPE HELP MESSAGE
6634 YEARMSG,TEXT "19" /YEAR MESSAGE
6635 YEAR%12^66+YEAR+6060 /YEAR DIGITS
6636 TEXT "^" /END OF MESSAGE
6637 \f/ CPU-SPECIFIC PROMPT LIST. /024 CJL
6638
6639 CPUPRMP,TEXT "??^>^^^" /UNKNOWN
6640 TEXT "5^>^^^^" /PDP-5
6641 TEXT "8^>^^^^" /PDP-8
6642 TEXT "8^/S>^^" /PDP-8/S
6643 TEXT "LINC-8>" /LINC-8
6644 TEXT "8^/I>^^" /PDP-8/I
6645 TEXT "8^/L>^^" /PDP-8/L
6646 TEXT "12^>^^^" /PDP-12
6647 TEXT "8^/E>^^" /PDP-8/E
6648 TEXT "8^/A>^^" /PDP-8/A
6649 TEXT "78^>^^^" /6100
6650 TEXT "278^>^^" /6120
6651 \f/ CPU-SPECIFIC IDENTIFICATION LIST. /025 CJL
6652
6653 CPUIDLS,TEXT "^U^NKNOWN" /UNKNOWN
6654 TEXT "^PDP^-5^^" /PDP-5
6655 TEXT "^PDP^-8^^" /PDP-8
6656 TEXT "^PDP^-8/S" /PDP-8/S
6657 TEXT "^LINC^-8^" /LINC-8
6658 TEXT "^PDP^-8/I" /PDP-8/I
6659 TEXT "^PDP^-8/L" /PDP-8/L
6660 TEXT "^PDP^-12^" /PDP-12
6661 TEXT "^PDP^-8/E" /PDP-8/E
6662 TEXT "^PDP^-8/A" /PDP-8/A
6663 \f TEXT "^VT^-78^^" /VT-78
6664 TEXT "^DEC^MATE" /6120
6665 \f FIELD MSGFLD%10 /MESSAGE FIELD
6666
6667 *FLD1ADR /PERMANENT LOAD ADDRESS /046 CJL
6668 /TEXT MESSAGES LOAD HERE/046 CJL
6669
6670 ABMSG, TEXT "%^F^ILE ^A^BORT%^" /FILE ABORT MESSAGE
6671 CMERMSG,TEXT "?^I^NVALID COMMAND^" /COMMAND ERROR MESSAGE
6672 CONNMSG,TEXT "%(^C^ONNECTING TO HOST, TYPE " /FIRST CONNECT MESSAGE
6673 CONTMSG,TEXT "^C^ONTROL-^" /CONTROL CHARACTER MESSAGE
6674 \fCON2MSG,TEXT " ^C^ TO RETURN TO ^" /BRIDGING CONNECT MESSAGE
6675 CON3MSG,TEXT ")%^" /FINAL CONNECT MESSAGE
6676 CPUMSG, ZBLOCK 5 /CPU ID MESSAGE GOES HERE
6677 /CRLF, TEXT "%" /<CR>, <LF> MESSAGE
6678 DNERMSG,TEXT "?^E^RROR IN DEVICE NAME" /DEVICE NAME ERROR MESSAGE
6679 DSFLMSG,TEXT "?^D^ISK FULL!" /DISK OUT OF ROOM ERROR MESSAGE
6680 FCLEMSG,TEXT "?^E^RROR CLOSING FILE" /FILE CLOSE ERROR MESSAGE
6681 \fFNERMSG, TEXT "?^E^RROR IN FILE NAME" /FILE NAME ERROR MESSAGE
6682 FRECMSG,TEXT "^R^EC: ^" /RECEIVING FILE MESSAGE
6683 FSENMSG,TEXT "^S^END: ^" /SENDING FILE MESSAGE
6684 FSERMSG,TEXT "?^F^ILE NAME SYNTAX ERROR" /FILE NAME ERROR MESSAGE
6685 \fHELPMSG,TEXT "%^S^UPPORTED COMMANDS ARE:%%" /HELP MESSAGE
6686 TEXT "^CONNECT^ (TO REMOTE SYSTEM) %"
6687 TEXT "^SEND DEV:FILNAM.EX^ %"
6688 \f TEXT "^RECEIVE DEV:^ (FILENAME AND EXTENSION ^NOT^ ALLOWED)%"
6689 TEXT "^GET DEV:FILNAM.EX^%"
6690 TEXT "^FINISH^ (SERVER)%"
6691 \f TEXT "^EXIT^ (TO OPERATING SYSTEM) %"
6692 TEXT "^HELP^ (THIS MESSAGE)%"
6693 TEXT "%^E^SCAPE CHARACTER: "
6694 KERRMSG,TEXT "%^K^EYBOARD INPUT ERROR!%" /KEYBOARD ERROR MESSAGE
6695
6696 CRLF= .-1 /<CR>, <LF> MESSAGE
6697 \fNOFINIS,TEXT "?^U^NABLE TO TELL HOST THAT " /FINISH ERROR MESSAGE
6698 TEXT "SESSION IS FINISHED"
6699 NOTFND, TEXT "?^U^NABLE TO LOCATE FILE^" /FILE NOT FOUND MESSAGE
6700 PRMTMSG,TEXT "^K^ERMIT-^" /STATIC PORTION OF PROMPT MESSAGE
6701 PROMID, ZBLOCK 23 /MODIFIED PORTION OF PROMPT MESSAGE
6702 PRMT2, TEXT "^K12>" /PHPH
6703 RERRMSG,TEXT "?^R^ECEIVE FAILURE^" /GENERAL RECEIVE FAILURE MESSAGE
6704 \fRFLNMSG,TEXT "?^E^RROR IN RECEIVED FILE NAME"/RECEIVED NAME ERROR MESSAGE
6705 TEXT "^"
6706 RHFEMSG,TEXT "^U^NABLE TO RECEIVE - HANDLER" /HANDLER FETCH ERROR MESSAGE
6707 TEXT " ERROR^"
6708 \fRIDEMSG,TEXT "?^U^NABLE TO RECEIVE -" /DIRECTORY FULL ERROR MESSAGE
6709 TEXT " INSUFFICIENT DIRECTORY SPACE"
6710 RIERMSG,TEXT "%^R^EMOTE LINE INPUT ERROR!%^" /REMOTE LINE ERROR MESSAGE
6711 \fRPERMSG,TEXT "?^U^NABLE TO RECEIVE LATEST " /LATEST PACKET ERROR MESSAGE
6712 TEXT "PACKET^"
6713 SDERMSG,TEXT "?^U^NABLE TO SEND - DIRECTORY "/DIRECTORY INPUT ERROR MESSAGE
6714 TEXT "ERROR"
6715 SHFEMSG,TEXT "?^U^NABLE TO SEND - HANDLER " /HANDLER FETCH ERROR MESSAGE
6716 TEXT "ERROR"
6717 \fSNDEMSG,TEXT "?^U^NABLE TO SEND" /GENERAL SEND ERROR MESSAGE
6718 UPERMSG,TEXT "?^U^NABLE TO RECEIVE - DATA " /RECEIVED DATA ERROR MESSAGE
6719 TEXT "ERROR"
6720
6721 $ /THAT'S ALL FOLK!