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