A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk1_im6100 / rkb / paroff / txio.pa
1 / TXIO.PA SERIAL INPUT-OUTPUT ROUTINES
2 /
3 /
4 /
5 / UPDATE #33 18-JUN-86
6 /
7 /
8 / TCI CONTROL INPUT 13-MAR-86 REV 0.7
9 / TFI FLOATING INPUT 03-FEB-85 REV 0.3
10 / TFR FLOATING INPUT TERM=RT 15-OCT-84 REV 0.0
11 / TRI READ INPUT 03-FEB-85 REV 0.2
12 / TTI TEXT INPUT 23-JUL-84 REV 0.2
13 / TIDC CHANGE INPUT DEVICE CODE 03-FEB-85 REV 0.1
14 /
15 /
16 / TDO DECIMAL INTEGER OUTPUT 19-OCT-84 REV 3.0
17 / TOO OCTAL INTEGER OUTPUT 19-0CT-84 REV 0.2
18 / THO HEXADECIMAL INTEGER OUTPUT 19-OCT-84 REV 0.0
19 / TCO CHARACTER OUTPUT 18-OCT-84 REV 0.2
20 / TCR CARRIAGE RETURN 10-APR-84 REV 0.0
21 / TNL NEW LINE 10-APR-84 REV 0.0
22 / TSO STRING OUTPUT 10-APR-84 REV 0.0
23 / TFO FLOATING OUTPUT 03-FEB-85 REV 0.2
24 / TTO TEXT OUTPUT 13-JAN-86 REV 2.6
25 / TODC CHANGE OUTPUT DEVICE CODE 18-OCT-84 REV 0.0
26 /
27 /
28 / TLC LOAD CURSOR 03-FEB-85 REV 0.5
29 / TCS CLEAR SCREEN 11-APR-84 REV 0.1
30 / TEL ERASE LINE 17-MAR-86 REV 0.2
31 /
32 /
33 \f/*************************************************************
34 /
35 / ASSEMBLER FLAGS
36 /
37 VT100=1 / TERMINAL: VT100 OR ADM3A
38 /
39 TFIELD=0 / CURRENT FIELD
40 /
41 / FPP27B=1 / FLOATING POINT PACKAGE LOADED
42 /
43 / EXTMAC=1 / MACRO-LIST SUPPLIED BY USER PROGRAMM
44 /
45 /*************************************************************
46 /
47 / START LOCATIONS
48 /
49 FIELD 0
50 /
51 IFDEF FPP27B <
52 IFNDEF EXTMAC <
53
54 *2200 / START WITH 27BFPP.BN
55
56 >
57
58 IFDEF EXTMAC <
59
60 *2400 / DTO. EXT MACRO LIST
61
62 >
63 >
64 /
65 /
66 IFNDEF FPP27B <
67 IFNDEF EXTMAC <
68
69 *5200 / START WITHOUT 27BFPP.BN
70
71 >
72 IFDEF EXTMAC <
73
74 *5400 / DT0. EXT MACRO LIST
75
76 >
77 >
78 /
79 /*************************************************************
80 /
81 / FPP - INSTRUCTIONS
82 /
83 FIXMRI TFGET=5000
84 FIXMRI TFPUT=6000
85 TFEXT=0
86 TFIN=11
87 TFOUT=12
88 \f / THIS MACRO LIST MAY BE SUPPLIED BY USER PROGRAMM
89
90 IFNDEF EXTMAC <
91
92 / TTO TEXT OUTPUT MACRO LIST, 3 WORDS PER MACRO
93
94 / COMMON MACRO TO DEFINE PARAMETER
95 TTOMAC, "C-270^2+"O-270^2+"M-270^2+"M-270^2+"O-270^2+"N
96 TTOMCO
97 TTOMCO, 0 / ALSO DUMMY TEXT BUFFER
98
99 / *** USER MACRO POINTER ARE STORED HERE ***
100
101 / *** END OF USER MACROS ***
102
103 TTOMER, 0 / GETS CALCULATED NUMBER AND
104 TTOMEM / TERMINATES SEARCH WITH ERROR
105 0 / MASSAGE
106
107 TTOMEM, TEXT /&04$%^%$TXIO MACRO UNDEF.$JM$&00/;0
108
109 PAGE
110
111 >
112 \f/ TTO TEXT OUTPUT
113 /
114 / TYPE TEXT FROM 6-BIT ASCII BUFFER CREATED WITH
115 / PAL8 TEXT PSEUDO-OP.
116 /
117 / ENTRY: AC = POINTER TO TEXT-BUFFER
118 / EXIT: AC = 0
119 /
120 /
121 / ! OPTION
122 / THIS OPTION IS USED TO TYPE CHARACTERS WITH SPECIAL
123 / FUNCTION.
124 / EXAMPLE: TEXT /1.25!$/ --> 1.25$
125 /
126 / $ - OPTION:
127 / CHARACTERS BETWEEN TWO $-CHARACTERS ARE CONVERTED
128 / TO CONTROL CHARACTERS.
129 / EXAMPLE: TEXT /$MJ$/ --> CR/LF
130 /
131 / % - OPTION
132 / CHARACTERS BETWEEN TWO %-CHARACTERS ARE CONVERTED
133 / TO LOWER CASE CHARACTER. MAY BE COMBINED WITH
134 / OTHER OPTIONS
135 /
136 / # - OPTION:
137 / MULTIPLE OUTPUT OF SAME CHARACTER. THE FIRST CHARACTER
138 / AFTER # IS TREATED AS NUMBER ( LOWER 6 BITS, ANY CHARACTER )
139 / AND THE SECOND CHARACTER IS PRINTED UP TO 63 TIMES.
140 / EXAMPLE: TEXT /AB#DC/ --> ABCCCC
141 /
142 / & - OPTION
143 / THIS OPTION CHANGES THE OUTPUT DEVICE CODE.
144 / IF THE TWO NUMBERS FOLLOWING ARE ZERO, THE PREVIOUES
145 / OUTPUT DEVICE IS RESTORED.
146 / EXAMPLE: TEXT /&04/ CONSOLE OUTPUT
147 /
148 / " OPTION
149 / THIS OPTION IS USED TO CALL A MACRO ( A NORMAL TEXT STRING )
150 / WITHIN A TEXT STRING. THE NAME MAY BE UP TO 6 CHARACTERS
151 / AND MUST BE TERMINATED BY A ] OR BY A { IF PARAMETERS
152 / ( TEXT STRINGS ) ARE PART OF THE MACRO CALL.
153 /
154 / ' OPTION
155 / THE PARAMETERS DEFINED BY A MACRO CALL ARE TYPED BY
156 / THIS OPTION. THE PARAMETERS ARE NAMED FROM 1-8.
157 /
158 / EXAMPLE: TEXT /GIVE "WHO[10] MORE/
159 / ========
160 /
161 / ENTRIES IN MACRO LIST:
162 / TTOMAC, .
163 / .
164 / "W-260^2+"H-260^2+"O
165 / WHO / MACRO NAME
166 / 0 / FIELD
167 / .
168 /
169 / MACRO IN FIELD 0 :
170 / WHO, TEXT /ME '1 HOURS/
171 /
172 / ---->> GIVE ME 10 HOURS MORE
173 /
174 /
175 / 06-APR-84 REV 0.0 KJ.S.
176 / 09-APR-84 REV 0.1 KJ.S. LOCATIONS RENAMED
177 / 11-APR-84 REV 0.2 KJ.S. OUTPUT CODE CHANGED
178 / 09-FEB-85 REV 0.3 KJ.S. #-OPTION ADDED
179 / 13-FEB-85 REV 0.4 KJ.S. %-OPTION ADDED
180 / 04-MAR-85 REV 0.5 KJ.S. &-OPTION
181 / 11-APR-85 REV 1.0 KJ.S. SOME CHANGES FOR GRV.PA
182 / 04-JUN-85 REV 2.0 KJ.S. MACRO WITH PARAMETER CALL
183 / 05-JUN-85 REV 2.1 KJ.S. & END OPTION DELETED
184 / 06-JUN-85 REV 2.2 KJ.S. & OPTION CHANGE OUTPUT DEVICE
185 / 11-JUN-85 REV 2.3 KJ.S. BUG IN FIELD HANDLING
186 / 12-JUN-85 REV 2.4 KJ.S. MACRO TERMINATOR CHANGED
187 / 18-JUN-85 REV 2.5 KJ.S. MACRO NAME CODE CHANGED
188 / 13-JAN-86 REV 2.6 KJ.S. EXPLANATION UPDATED
189 /
190 \f
191 TTO, 0
192 DCA TTOPNT / SAVE BUFFER POINTER
193 DCA TTOBFL / START WITH FIRST BYTE
194
195 TAD (TTOPPB+2 / SET POINTER TO TABLE OF
196 DCA TTOPPB / TEXT POINTERS FOR MACRO CALLS
197
198 TTOA, JMS TTOB / PROCEED
199 SZA CLA / AC = 0 ?
200 JMP TTOAM / NO: MACRO CALL
201 CLA CMA / YES: END OF BUFFER
202 TAD TTOPPB / DECREMENT POINTER
203 DCA TTOPPB
204 TAD I TTOPPB
205 SNA / POINTER FROM LIST = 0 ?
206 JMP I TTO / YES: WE ARE IN LEVEL 0, ALL DONE
207 DCA TTOPNT / NO: REENTER LOWER LEVEL, SET TEXT POINTER
208 CLA CMA
209 TAD TTOPPB
210 DCA TTOPPB
211 TAD I TTOPPB / GET BYTE FLAG AND FIELD OF TEXT BUFFER
212 AND (1
213 DCA TTOBFL
214 TAD I TTOPPB
215 AND (70
216 TAD (6201
217 DCA TTOFLD
218 JMP TTOA / CONTINUE
219
220 TTOAM, TAD TTOFLD / SAVE POINTERS IN TABLE
221 AND (70
222 TAD TTOBFL
223 DCA I TTOPPB / FIRST FLAGS
224 ISZ TTOPPB
225 TAD TTOPNT
226 DCA I TTOPPB / THAN TEXT POINTER
227 ISZ TTOPPB
228
229 TAD TTOCPT / SET NEW PARAMETERS FOR TTOB
230 DCA TTOPNT / CALCULATED FROM MACRO CALL
231 TAD TTOCBF
232 DCA TTOBFL
233 TAD TTOCFD
234 DCA TTOFLD
235 JMP TTOA
236
237 TTOPPB, TTOPPB+2 / LIST OF TEXT POINTERS
238 0 / MUST BE ZERO TO FLAG LEVEL 0 EXIT
239 ZBLOCK 20 / 8 LEVELS, FIRST FIELD AND BYTE FLAG
240 / FOLLOWED BY TEXT POINTER
241 \f / OPTIONS
242 / =======
243
244 / # OPTION: MULTIPLE CHARACTER OUTPUT
245
246 TTOC3, CLA CMA / SET FLAG = -1
247 JMP TTOC3B
248
249 TTOC3A, TAD TTOSV / CHARACTER IS NUMBER
250 CMA / = -N-1
251 TTOC3B, DCA TTONFL
252 JMP TTOB0
253
254
255 / $ OPTION: PRINT CONTROL CHARACTERS
256
257 TTOC4, TAD TTOCFL / TOGGLE CONTROL FLAG
258 SNA CLA
259 TAD (-100
260 DCA TTOCFL
261 JMP TTOB3
262
263
264 / % OPTION: LOWER CASE CHARACTERS
265
266 TTOC5, TAD TTOLFL / TOGGLE LOWER CASE FLAG
267 SNA CLA
268 TAD (40
269 DCA TTOLFL
270 JMP TTOB3
271
272
273 / & OPTION:CHANGE OUTPUT DEVICE CODE
274
275 TTOC6, CLA CLL CMA RAL
276 DCA TTODFL / SET DEVICE FLAG = -2
277 DCA TTODVN / CLEAR NEW INPUT
278 JMP TTOB2 / GET TWO CHARACTERS FOR DEVICE
279
280 TTOC6A, TAD TTOSV
281 AND (7
282 TAD TTODVN
283 RTL
284 RAL
285 DCA TTODVN / MAKE 0NN0
286 ISZ TTODFL / DONE ?
287 JMP TTOB2 / NO: NEXT CHARACTER
288 TAD TTODVN / YES:
289 SZA CLA / NEW DEVICE ZERO ?
290 JMP TTOC6B / NO:
291 TAD TTODVO / YES: RESTORE OLD DEVICE
292 JMP TTOC6C
293 TTOC6B, TAD TTODEV
294 DCA TTODVO / SAVE CURRENT DEVICE
295 TAD TTODVN
296 TTOC6C, DCA TTODEV / IS CURRENT DEVICE
297 TAD TTODEV
298 JMS TODC / CHANGE OUTPUT CODE
299 JMP TTOB2 / CONTINUE
300
301 TTODEV, 40 / CONSOLE IS DEFAULT
302 TTODVO, 40
303 TTODVN, 0
304
305 PAGE
306
307
308 / ! OPTION: PRINT CONTROL CHARACTERS
309
310 TTOC1, CLA IAC
311 DCA TTOAFL / SET FLAG
312 JMP TTOB3
313 \f / SUBROUTINE TO TYPE DATA FROM TEXT BUFFER
314
315 TTOB, 0
316
317 TTOB0, CLA CLL
318 TAD TTOBFL
319 RAR / BYTE FLAG TO LINK
320
321 TTOFLD, CDF TFIELD
322 TAD I TTOPNT / GET WORD FROM TEXT BUFFER
323 CDF TFIELD
324
325 SNL / LINK = FLAG = 0 ?
326 BSW / YES: LEFT BYTE
327 DCA TTOSV / SAVE
328 CML
329 SNL / LINK = FLAG = 1 ?
330 ISZ TTOPNT / NO: INCREMENT POINTER
331 RAL
332 DCA TTOBFL / SAVE BYTE FLAG
333
334 TAD TTOSV
335 SNA / WORD ZERO ?
336 JMP TTOBX / YES: END OF BUFFER
337
338 AND (77 / MAKE 6 BIT BYTE
339 SZA / = 0 ?
340 JMP .+5 / NO:
341 TAD TTOEFL / YES: CHECK END FLAG
342 SNA CLA / END FLAG = 1 ?
343 JMP TTOBX / NO: EXIT
344 JMP TTOB0 / YES: IGNORE ZERO BYTE
345 DCA TTOSV
346
347 TAD TTOTFL / CHECK FOR SPECIAL TERMINATOR
348 SNA CLA / FLAG SET ?
349 JMP TTOB4 / NO:
350 TAD TTOSV / YES:
351 TAD (-33
352 SNA / CHAR = [ ?
353 JMP TTOBX / YES: EXIT
354 TAD (-2
355 SNA CLA / CHAR = ] ?
356 JMP TTOBX / YES: EXIT
357
358 TTOB4, ISZ TTONFL / NUMBER FLAG = -1 ?
359 SKP / NO:
360 JMP TTOC3A / YES: PARAMETER IS MULTIPLIER
361
362 TAD TTOAFL
363 SNA CLA / ALL CHARACTER FLAG = 1 ?
364 JMP .+3 / NO:
365 DCA TTOAFL / YES: CLEAR FLAG
366 JMP TTOB1 / OUTPUT
367
368 TAD TTOPFL
369 SZA CLA / PARAMETER FLAG = 1 ?
370 JMP TTOC7A / YES: CHARACTER IS PARAMETER NUMBER
371
372 TAD TTODFL / CHECK DEVICE FLAG
373 SZA CLA / ZERO ?
374 JMP TTOC6A / NO: DEVICE CODE
375
376 TAD TTOSV / SCAN FOR CONTROL CHARACTERS
377 TAD (-50
378 SMA / CHAR.LT.50 ?
379 JMP TTOB1 / NO:
380 TAD (10 / YES:
381 SPA SNA / CHAR.GE.41 ?
382 JMP TTOB1 / NO:
383 TAD (TTOCL / YES: AC = 1...7
384 DCA TTOCL / ADD TABLE START
385 TAD I TTOCL / START ADRR. FROM TABLE
386 DCA TTOCL
387 JMP I TTOCL
388
389 TTOCL, 0
390 TTOC1 / !
391 TTOC2 / "
392 TTOC3 / #
393 TTOC4 / $
394 TTOC5 / %
395 TTOC6 / &
396 TTOC7 / '
397
398 TTOB1, CLA
399 TAD TTOSV
400 TAD (-40
401 SPA / MAKE 8 BIT ASCII
402 TAD (100 / 01-37 TO 301-337
403 TAD (240 / 40-77 TO 240-277
404 TAD TTOCFL / SET CONTROL BIT
405 TAD TTOLFL / SET LOWER CASE BIT
406 DCA TTOSV
407
408 TAD TTOSV
409 JMS I TTOOUT / OUTPUT
410 ISZ TTONFL / MULTIPLE CHARACTERS ?
411 JMP .-3 / YES:
412 TTOB2, CLA CLL CMA RAL / NO: DONE
413 DCA TTONFL / RESET NUMBER FLAG
414 JMP TTOB0 / AND CONTINUE
415
416 TTOB3, CLA CMA / PRESERVE NUMBER FLAG
417 TAD TTONFL
418 DCA TTONFL
419 JMP TTOB0
420
421 TTOBEX, CLA CLL CMA RAL / MACRO CALL EXIT
422 DCA TTONFL / RESET NUMBER FLAG
423 IAC / EXIT WITH AC.NE.0
424 JMP I TTOB
425
426 TTOBX, CLA
427 DCA TTOTFL / CLEAR TERMINATOR FLAG
428 JMP I TTOB / EXIT
429
430 TTOOUT, TCO / POINTER TO OUTPUT ROUTINE
431
432 TTOSV, 0 / TEMP STORAGE FOR CHARACTER
433 TTOPNT, 0 / POINTER TO TEXT BUFFER
434 TTOBFL, 0 / BYTE FLAG: 0 LEFT, 1 RIGHT BYTE
435
436 TTOAFL, 0 / IF SET, CHAR. IS PRINT CHARACTER
437 TTOCFL, 0 / IF SET, MAKE CONTROL CHARACTER
438 TTOLFL, 0 / IF SET, MAKE LOWER CASE CHARACTER
439 TTOPFL, 0 / IF SET, CHAR. IS PARAMETER NUMBER
440 TTODFL, 0 / IF NONZERO, CHARACTER IS DEVICE CODE
441 TTOTFL, 0 / IF SET, BUFFER IS ALSO TERM. BY , AND ;
442 / NUMBER FLAG, ASSAMBLED TO -2
443 / IF -1, CHAR. IS MULTIPLIER
444 TTONFL, TEXT /?>/ / NORMAL -2, IF -1 CHAR. IS MULTIPLIER
445 TTOEFL=TTONFL+1 / END FLAG:
446 / NORMAL ZERO, TERMINATOR IS ZERO BYTE
447 / OR WORD. WITH PAL8 /F-OPTION, FLAG IS
448 / NONZERO AND BUFFER MUST BE TERMINATED
449 / / WITH ZERO WORD
450 TEXT /A/
451
452 PAGE
453 \f / " OPTION: MACRO CALL WITH PARAMETER
454
455 TTOC2, TAD TTOOUT / CHANGE OUTPUT ROUTINE
456 DCA TTOMOS
457 TAD (TTOM
458 DCA TTOOUT
459
460 CLA CMA
461 DCA TTOMFE / FLAG FIRST ENTRY
462 JMP TTOB2
463
464 TTOM, 0 / PROCEED MACRO CALL
465 DCA TTOMSV / SAVE CHAR.
466 ISZ TTOMFE / FIRST ENTRY ?
467 TTOM1, HLT / NO: GETS A JMP
468 DCA TTOMPT
469 TAD (JMP TTOM2
470 DCA TTOM1 / SET JMP
471
472 TTOM2, TAD TTOMSV
473 TAD (-333
474 SNA / CHAR = [ ?
475 JMP TTOM4 / YES:
476 TAD (-2
477 SNA / CHAR = ] ?
478 JMP TTOM3 / YES: END OF MACRO CALL
479
480 CLA CLL
481 TAD TTOMPT / CALCULATE SUM = 2*SUM+(CHAR-270)
482 SZA
483 TAD (-270
484 CLL
485 RAL
486 TAD TTOMSV
487 DCA TTOMPT
488 JMP I TTOM
489
490 TTOM3, ISZ TTOMEF / MACRO DEFINED, NO PARAMETER
491 TTOM4, CLA / MACRO WITH PARAMETER
492 TAD TTOMPT
493 DCA TTOMER / STORE IN LIST FOR TERMINATION
494 TAD (TTOMAC / GET START OF MACRO LIST
495 DCA TTOMSV / USED AS POINTER
496 TAD TTOMPT
497 CIA
498 DCA TTOMPT
499
500 TTOM5, TAD I TTOMSV / GET MACRO NAME FROM LIST
501 TAD TTOMPT / ADD MINUS SUM
502 SNA CLA / MATCH FOUND ?
503 JMP TTOM6 / YES:
504 CLA CLL CML IAC RAL / NO: INCREMENT POINTER BY 3
505 TAD TTOMSV
506 DCA TTOMSV
507 JMP TTOM5
508
509 TTOM6, ISZ TTOMSV / MACRO FOUND
510 TAD I TTOMSV
511 DCA TTOCPT / GET POINTER
512 ISZ TTOMSV
513 TAD I TTOMSV
514 AND (70
515 TAD (6201
516 DCA TTOCFD / GET FIELD
517 DCA TTOCBF / BYTE FLAG ZERO
518
519 TAD TTOMEF
520 SZA CLA / PARAMETER DEFINED ?
521 JMP TTOMX / NO: EXIT
522
523 TAD (JMP TTOM7 / YES: READ PARAMETER
524 DCA TTOM1 / SET NEW ENTRY
525 TAD (TTOPLS
526 DCA TTOMPT / PARAMETER LIST POINTER
527 JMP TTOM10 / SAVE FIRST PARAMETER
528
529 TTOM7, TAD TTOMSV
530 TAD (-333
531 SNA / CHAR = [ ?
532 JMP TTOM10 / YES: END OF PARAMETER
533 TAD (-2
534 SNA CLA / CHAR = ] ?
535 JMP TTOMX / YES: END OF MACRO CALL
536 JMP I TTOM / CONTINUE
537
538 TTOM10, TAD TTOFLD / SAVE PARAMETER POINTER
539 AND (70
540 TAD TTOBFL
541 DCA I TTOMPT
542 ISZ TTOMPT
543 TAD TTOPNT
544 DCA I TTOMPT
545 ISZ TTOMPT
546 JMP I TTOM / CONTINUE
547
548
549 TTOMX, TAD TTOMOS / RESET OUTPUT ROUTINE
550 DCA TTOOUT
551 DCA TTOMEF / CLEAR END FLAG
552 JMP TTOBEX / EXIT
553
554 TTOMSV, 0
555 TTOMPT, 0 / POINTER AND CHARACTER SUM
556 TTOMOS, 0 / SAVE OUTPUT POINTER
557 TTOMFE, 0 / FIRST ENTRY FLAG
558 TTOMEF, 0 / END FLAG, SET IF ; IS FOUND
559
560 TTOPLS, 0 / PARAMETER LIST
561 .+1
562 ZBLOCK 20
563
564 PAGE
565 \f
566 / ' OPTION: PARAMETER CALL
567
568 TTOC7, CLA IAC / SET FLAG
569 DCA TTOPFL
570 JMP TTOB2
571
572 TTOC7A, CLA CMA / DECREMENT NUMBER
573 TAD TTOSV / CALCULATE POINTER TO PARAMETER
574 CLL
575 RAL
576 AND (17
577 TAD (TTOPLS
578 DCA TTOC7P
579 TAD I TTOC7P
580 AND (1
581 DCA TTOCBF / BYTE FLAG
582 TAD I TTOC7P
583 AND (70
584 TAD (6201
585 DCA TTOCFD / FIELD
586 ISZ TTOC7P
587 TAD I TTOC7P
588 DCA TTOCPT / POINTER
589 DCA TTOPFL / CLEAR PARAMETER FLAG
590 ISZ TTOTFL / SET TERMINATOR FLAG
591 JMP TTOBEX / EXIT SUBR. TTOB
592
593 TTOC7P, 0 / POINTER
594
595 TTOCPT, 0 / PARAMETER MACRO POINTER
596 TTOCBF, 0 / PARAMETER MACRO BYTE FLAG
597 TTOCFD, 0 / PARAMETER MACRO FIELD
598 \f/ TCI.PA
599 /
600 / TTY CONTROL INPUT
601 /
602 / SCANS CHARACTERS FROM TABLE TO FIND MATCH WITH
603 / INPUT CHARACTERS FROM TTY. IF A MATCH IS FOUND,
604 / EXIT WITH POINTER TO SUBROUTINE IN AC.
605 / MAY BE USED FOR COMMANDS WITH MORE THAN ONE
606 / CHARACTER, IN THIS CASE ALL INPUT COMBINATIONS
607 / MUST BE FOUND IN TABLE AND THE FOLLOWING POINTER
608 / TO SUBROUTINE MUST BE ZERO TO PREVENT EXIT
609 / BEFORE ALL NEEDED CHARACTERS ARE READ. THE LAST
610 / ZERO LOCATION TERMINATES THE TABLE.
611 /
612 / EXAMPLE: COMMAND 'ABC' CALLS ROUTINE 'SUBR'
613 /
614 / TCITAB, "A / TABLE START
615 / 0 / NO EXIT, CONTINUE
616 / "A+"A+"B / PREV.CHAR. * 2
617 / 0
618 / "A+"A+"A+"A+"B+"B+"C
619 / SUBR / COMMAND COMPLETE
620 / 0 / TERMINATOR
621 /
622 / ENTRY: AC = POINTER TO TABLE
623 / EXIT: AC = START OF SUBROUTINE FROM TABLE
624 /
625 / SUBRS: TRI,TCO
626 /
627 / 05-APR-84 REV 0.0 KJ.S.
628 / 06-APR-84 REV 0.1 KJ.S. SUBROUTINE
629 / 07-APR-84 REV 0.2 KJ.S. ECHO PRINT-CHAR. ONLY
630 / 09-APR-84 REV 0.3 KJ.S. LOCATIONS RENAMED
631 / 02-MAY-84 REV 0.4 KJ.S. CHAR. IN/OUT CHANGED
632 / 13-FEB-85 REV 0.5 KJ.S. ERROR HANDLING CHANGED
633 / 04-FEB-86 REV 0.6 KJ.S. ERASE INPUT LINE AFTER ERROR
634 / 13-FEB-86 REV 0.7 KJ.S. ERASE CHARCTERS ONLY
635 /
636
637
638 TCI, 0
639 DCA TCITAB / SAVE TABLE-POINTER
640 TCIA, DCA TCICS / CLEAR SUM OF CHARACTERS
641 DCA TCICN / CLEAR INPUT COUNT
642 TCIB, CLA CLL / NEW CHARACTER
643 JMS TRI / GET NEXT CHARACTER
644 DCA TCICI / SAVE CHAR
645 CLA CLL
646 TAD TCICS
647 RAL / SUM *2
648 TAD TCICI / ADD CHAR
649 DCA TCICS
650 TAD TCICS
651 CIA
652 DCA TCICSM / COMPLEMENT OF SUM
653
654 TAD TCITAB / GET POINTER
655 DCA TCIPNT
656 TCIC, TAD I TCIPNT / GET CHAR FROM TABLE
657 SNA / ZERO ?
658 JMP TCIER / YES: END OF TABLE, INPUT ERROR
659 TAD TCICSM
660 ISZ TCIPNT / POINTS TO SUBROUTINE
661 SNA CLA / CHARACTER MATCH ?
662 JMP TCID / YES:
663 ISZ TCIPNT / NO: NEXT CHAR
664 JMP TCIC
665
666 TCID, TAD TCICI
667 TAD (-240
668 SPA / CHAR.GE.240 ?
669 JMP TCIE / NO: NO ECHO
670 TAD (-100
671 SMA / CHAR.LT.340 ?
672 JMP TCIE / NO: NO ECHO
673 CLA / YES: ECHO CHAR
674 TAD TCICI
675 JMS TCO / ECHO
676 ISZ TCICN / COUNT OUTPUT
677 TCIE, CLA
678 TAD I TCIPNT / GET SUBROUTINE START
679 SNA / SUBROUTINE DEFINED ?
680 JMP TCIB / NO: READ NEXT CHAR
681 JMP I TCI / YES: EXIT
682
683 TCIER, CLA / INPUT ERROR
684 TAD (207
685 JMS TCO
686 TAD TCICN / ERASE INPUT
687 SNA / ANY OUTPUT ?
688 JMP TCIA / NO:
689 CIA / YES: ERASE
690 DCA TCICN
691 TAD (210 / BACKSPACE
692 JMS TCO
693 TAD (240 / SPACE
694 JMS TCO
695 TAD (210 / BACKSPACE
696 JMS TCO
697 ISZ TCICN / DONE
698 JMP .-7 / NO:
699 JMP TCIA / YES: NEW INPUT
700
701 TCIPNT, 0
702 TCICI, 0 / INPUT CHARACTER
703 TCICS, 0 / SUM OF CHARACTERS
704 TCICSM, 0 / MINUS SUM OF CHARACTERS
705 TCITAB, 0 / POINTER TO TABLE
706 TCICN, 0 / INPUT COUNT
707 \f/ TFI.PA
708 /
709 / TTY FLOATING INPUT
710 /
711 / READS FLOATING NUMBER FROM TELETYPE
712 /
713 / ENTRY: AC = POINTER TO FLOATING INPUT NUMBER
714 / EXIT: AC = INPUT TERMINATOR
715 /
716 / SUBR: 27BFPP.BN
717 /
718 / 09-APR-84 REV 0.0 KJ.S.
719 / 10-APR-84 REV 0.1 KJ.S.
720 / 02-MAY-84 REV 0.2 KJ.S. COSMETIC
721 / 03-FEB-85 REV 0.3 KJ.S. FFP INSTRUCTIONS DEFINED
722 /
723
724 TFI, 0
725 DCA TFIPT / SAVE POINTER
726 CLA CMA
727 DCA 54 / LF AFTER RETURN
728 JMS I 7 / ENTER 27BFPP
729 TFIN
730 TFPUT I TFIPT / STORE
731 TFEXT
732 CLA
733 TAD 53
734 JMP I TFI
735
736 TFIPT, 0
737 \f/ TFR.PA
738 /
739 / TTY FLOATING INPUT TERMINATED WITH 'RETURN'
740 /
741 / READS FLOATING NUMBER FROM TELETYPE
742 /
743 / ENTRY: AC = POINTER TO FLOATING NUMBER
744 / EXIT: ERROR, WRONG TERMINATOR
745 / EXIT+1: AC=0
746 /
747 / SUBR: TFI,27BFPP
748 /
749 / 15-OCT-84 REV 0.0 KJ.S.
750 /
751
752 TFR, 0
753 JMS TFI / GET NUMBER
754 TAD (-215
755 SNA CLA / TERMINATOR RT=215 ?
756 ISZ TFR / YES: NORMAL EXIT
757 JMP I TFR / NO: ERROR EXIT
758
759 PAGE
760 \f/ TRI.PA
761 /
762 / TTY READ INPUT
763 /
764 / READS CHARACTER FROM TTY
765 /
766 / ENTRY: AC = NO CARE
767 / EXIT: AC = CHARACTER
768 /
769 / SUBRS: NONE
770 /
771 / 02-MAY-84 REV 0.0 KJ.S.
772 / 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT
773 / 03-FEB-85 REV 0.2 KJ.S. BUG REMOVED
774 /
775
776 TRI, 0
777 CLA
778 TIKSF, KSF
779 JMP .-1
780 TIKRB, KRB
781 AND (177
782 TAD (200
783 JMP I TRI
784 \f/ TIDC.PA
785 /
786 / CHANGE SERIAL INPUT DEVICE CODE
787 /
788 / ENTRY: AC = XNNX NN = DEV.CODE
789 / EXIT: AC = 0
790 /
791 / SUBR: LOCATINONS IN TRI ARE CHANGED
792 /
793 / 18-OCT-84 REV 0.0 KJ.S.
794 / 03-FEB-85 REV 0.1 KJ.S. BUG REMOVED
795 /
796
797 TIDC, 0
798 AND (770
799 DCA TIDCSV
800 TAD (6001
801 TAD TIDCSV
802 DCA TIKSF
803 TAD (6006
804 TAD TIDCSV
805 DCA TIKRB
806 JMP I TIDC
807
808 TIDCSV, 0
809 \f/ TTI.PA
810 /
811 / TELETYPE TEXT INPUT
812 /
813 / READS INPUT FROM TTY AND STORES 2 CHARACTERS/WORD
814 / INTO TEXT BUFFER. ACCEPTS ONLY PRINTABLE CHARACTERS.
815 / ALL OTHER INPUT AND CHARACTERS AFTER BUFFER-OVERFLOW
816 / IS ECHED AS 'BELL'. THE INPUT TERMINATOR IS NOT
817 / ECHOED.
818 /
819 / ENTRY: AC = TERMINATOR, 0 = CR
820 / ARG1 POINTER TO TEXT BUFFER
821 / ARG2 LENGTH OF TEXT BUFFER (WORDS)
822 / EXIT: AC = 0
823 /
824 / SUBR TRI,TCO
825 /
826 / 16-JUL-84 REV 0.0 KJ.S.
827 / 22-JUL-84 REV 0.1 KJ.S. SOME BUGS REMOVED
828 / 23-JUL-84 REV 0.2 KJ.S. BUG AFTER 'DEL' REM.
829 /
830
831 TTI, 0
832 SNA / AC = TERMINATOR
833 TAD (215 / AC = 0 TERMINATOR = CR
834 AND (377
835 CIA
836 DCA TTITM / SAVE
837 TAD I TTI / GET ARG1 = BUFFER POINTER
838 DCA TTIBPT
839 ISZ TTI
840 CLA CLL
841 TAD I TTI / GET ARG2 = BUFFER LENGTH
842 RAL
843 CIA
844 IAC
845 DCA TTIBLN / = - BUFFER LENGTH * 2 + 1
846 ISZ TTI
847 DCA TTICNT / CLEAR CHARACTER COUNTER
848 DCA TTIXF / CLEAR EXIT FLAG
849
850 TTI1, JMS TRI / READ INPUT
851 DCA TTICH
852
853 TAD TTICH
854 TAD TTITM
855 SZA CLA / TERMINATOR ?
856 JMP TTI2 / NO:
857 ISZ TTIXF / YES: SET EXIT FLAG
858 DCA TTICH / PUT 'ZERO' INTO BUFFER
859 JMP TTI3
860
861 TTI2, TAD TTICH / CHECK INPUT
862 TAD (-240
863 SPA / CHAR.GE.240 ?
864 JMP TTI10 / NO: CONTROL CHAR
865 TAD (-100
866 SMA CLA / CHAR.LT.340 ?
867 JMP TTI10 / N0: CONTROL CHAR
868
869 TAD TTICNT / CHECK FOR BUFFER OVERFLOW
870 TAD TTIBLN
871 SMA CLA / COUNTER.LT.BUFFER*2 ?
872 JMP TTI10 / NO: BUFFER OVERFLOW
873
874 TAD TTICH / ECHO
875 JMS TCO
876 TAD TTICH / MAKE 6-BIT-ASCII
877 AND (77
878 DCA TTICH
879
880 TTI3, CLA CLL
881 TAD TTICNT / CALCULATE BUFFER POINTER
882 RAR
883 TAD TTIBPT
884 DCA TTIPNT
885
886 SZL / LINK=MSB OF TTICNT.EQ.0 ?
887 JMP TTI4 / N0: 2. BYTE OF WORD
888 TAD TTICH / YES: 1. BYTE
889 BSW
890 JMP TTI5
891 TTI4, TAD I TTIPNT / ADD 1.BYTE
892 AND (7700
893 TAD TTICH
894 TTI5, DCA I TTIPNT / STORE IN BUFFER
895 ISZ TTICNT / INCREMENT COUNTER
896
897 TAD TTIXF
898 SNA CLA / EXIT ?
899 JMP TTI1 / NO: GET NEXT CHARACTER
900 JMP I TTI / YES:
901
902 TTI10, CLA CLL / INPUT IS A CONTROL CHARACTER
903 TAD TTICH
904 TAD (-377
905 SNA CLA / CHAR.EQ.DEL ?
906 JMP TTI12 / YES:
907 TTI11, TAD (207 / NO: ILLEGAL INPUT
908 JMS TCO / ECHO BELL
909 JMP TTI1 / CONTINUE
910
911 TTI12, TAD TTICNT
912 SNA / BUFFER EMPTY ?
913 JMP TTI11 / YES:
914 TAD (-1 / NO: DECREMENT
915 DCA TTICNT
916 TAD (210 / BACKSPACE
917 JMS TCO
918 TAD (240
919 JMS TCO
920 TAD (210
921 JMS TCO
922 JMP TTI1
923
924
925 TTITM, 0 / MINUS INPUT TERMINATOR
926 TTIBPT, 0 / BUFFER START POINTER
927 TTIBLN, 0 / MINUS LENGTH OF BUFFER
928 TTIPNT, 0 / CURRENT BUFFER POINTER
929 TTICNT, 0 / CURRENT LENGTH COUNTER
930 TTISWD, 0 / INPUT CONTROL FLAG
931 TTICH, 0 / LAST INPUT CHAR
932 TTIXF, 0 / EXIT FLAG
933
934 PAGE
935 \f/ TDO.PA
936 /
937 / TYPES DECIMAL INTEGERS WITH DIFFERENT FORMATS
938 /
939 / ENTRY: AC = NUMBER TO BE TYPED
940 / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT
941 / BIT 1 IF SET, FILL FORMAT WITH ZEROS
942 / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED
943 / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,
944 / NO LEADING ZEROS OR SPACES
945 / EXIT: AC = 0
946 /
947 / SUBR: TIO,TCO
948 /
949 /
950 / 19-OCT-84 REV 0.0 KJ.S.
951 /
952
953 TDO, 0
954 DCA TION0 / SAVE NUMBER
955 TAD I TDO
956 ISZ TDO
957 DCA TIOFL / SAVE FLAG
958 TAD TDOTST / POINTER TO HEXADECIMAL TABLE
959 JMS TDOHO / PROCEED
960 JMP I TDO
961
962 TDOTST, .+1 / TABLE OF DECIMAL VALUES
963 140 / -4000
964 4060 / -2000
965 6030 / -1000
966 6340 / -800
967 7160 / -400
968 7470 / -200
969 7634 / -100
970 7660 / -80
971 7730 / -40
972 7754 / -20
973 7766 / -10
974 \f/ TOO.PA
975 /
976 / TYPES OCTAL INTEGERS WITH DIFFERENT FORMATS
977 /
978 / ENTRY: AC = NUMBER TO BE TYPED
979 / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT
980 / BIT 1 IF SET, FILL FORMAT WITH ZEROS
981 / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED
982 / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,
983 / NO LEADING ZEROS OR SPACES
984 / EXIT: AC = 0
985 /
986 / SUBR: TIO,TCO
987 /
988 /
989 / 18-OCT-84 REV 0.0 KJ.S.
990 / 18-OCT-84 REV 0.1 KJ.S. SOME BUGS REMOVED
991 / 19-OCT-84 REV 1.0 KJ.S. USING SUBR. TIO
992 /
993
994 TOO, 0
995 DCA TION0 / SAVE NUMBER
996 TAD I TOO
997 ISZ TOO
998 DCA TIOFL / SAVE FLAG
999 TAD TOOTST / POINTER TO OCTAL TABLE
1000 JMS TDOHO / PROCEED
1001 JMP I TOO
1002
1003 TOOTST, .+1 / TABLE OF OCTAL VALUES
1004 4000
1005 6000
1006 7000
1007 0000
1008 7400
1009 7600
1010 7700
1011 0000
1012 7740
1013 7760
1014 7770
1015 \f/ THO.PA
1016 /
1017 / TYPES HEXADECIMAL INTEGERS WITH DIFFERENT FORMATS
1018 /
1019 / ENTRY: AC = NUMBER TO BE TYPED
1020 / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT
1021 / BIT 1 IF SET, FILL FORMAT WITH ZEROS
1022 / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED
1023 / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,
1024 / NO LEADING ZEROS OR SPACES
1025 / EXIT: AC = 0
1026 /
1027 / SUBR: TIO,TCO
1028 /
1029 /
1030 / 19-OCT-84 REV 0.0 KJ.S.
1031 /
1032
1033 THO, 0
1034 DCA TION0 / SAVE NUMBER
1035 TAD I THO
1036 ISZ THO
1037 DCA TIOFL / SAVE FLAG
1038 TAD THOTST / POINTER TO DECIMAL TABLE
1039 JMS TDOHO / PROCEED
1040 JMP I THO
1041
1042 THOTST, .+1 / TABLE OF HEXADECIMAL VALUES
1043 0000
1044 0000
1045 0000
1046 4000
1047 6000
1048 7000
1049 7400
1050 7600
1051 7700
1052 7740
1053 7760
1054 \f/ TCR CARRIAGE RETURN
1055 /
1056 / MOVES CURSOR TO THE BEGINNING OF THE
1057 / PRESENT LINE
1058 /
1059 / ENTRY: AC = NO CARE
1060 / EXIT: AC = 0
1061 /
1062 / 10-APR-84 REV 0.0 KJ.S.
1063 /
1064
1065 TCR, 0
1066 CLA
1067 TAD (215
1068 JMS TCO / OUTPUT
1069 CLA
1070 JMP I TCR
1071
1072 \f/ TNL NEW LINE
1073 /
1074 / POSITIONS CURSOR TO BEGINNING
1075 / OF NEXT LINE
1076 /
1077 / ENTRY: AC = NO CARE
1078 / EXIT: AC = 0
1079 /
1080 / 10-APR-84 REV 0.0 KJ.S.
1081 /
1082
1083 TNL, 0
1084 JMS TCR
1085 TAD (212
1086 JMS TCO / LF
1087 JMP I TNL
1088 \f
1089 TIOF, 0 / SUBROUTINE TO CHECK OUTPUT
1090 AND (17 / FORMAT AND TYPE
1091 DCA TIOPT / STORE
1092 ISZ TIOCT / INCREMENT DIGIT COUNTER
1093
1094 TAD TIOZF
1095 SZA CLA / ZERO FLAG = 0 ?
1096 JMP TIOF2 / NO: TYPE DIGIT
1097 TAD TIOPT / YES:
1098 SZA CLA / DIGIT = 0 ?
1099 JMP TIOF1 / NO:
1100 TAD TIOFL / YES:
1101 SNA CLA / FIELD WIDTH = 0 ?
1102 JMP I TIOF / YES: EXIT
1103 TAD TIOFL
1104 TAD TIOCT
1105 SPA CLA / FILL CHAR WITHIN FIELD ?
1106 JMP I TIOF / NO: EXIT
1107 TAD TIOFC / YES: TYPE FILL CHARACTER
1108 JMP TIOF4
1109
1110 TIOF1, TAD TIOFL
1111 SNA / FIELD WIDTH = 0 ?
1112 JMP TIOF2 / YES: NO FIXED FIELD WIDTH
1113 TAD TIOCT / NO:
1114 SPA CLA / DIGIT WITHIN FIELD ?
1115 JMP TIOER / NO: FIELD WIDTH TOO SMALL
1116 TIOF2, ISZ TIOZF / SET ZERO FLAG
1117 TAD TIOSG
1118 SNA CLA / SIGN NEEDED ?
1119 JMP TIOF3 / NO:
1120 DCA TIOSG / CLEAR SIGN FLAG
1121 TAD ("- / YES: TYPE IT
1122 JMS TCO
1123 TIOF3, TAD TIOPT / TYPE DIGIT
1124 TAD (-12
1125 SMA / HEX - CHAR. ?
1126 TAD (7 / YES: MAKE A LETTER
1127 TAD (272 / NO: MAKE NUMBER
1128 TIOF4, JMS TCO
1129 JMP I TIOF / EXIT
1130
1131 PAGE
1132 \f / SUBROUTINE FOR TDO,TOO,THO
1133 / TION0 AND TIOFL MUST BE SET
1134
1135 TDOHO, 0
1136 DCA TIOPT / AC = TABLE POINTER
1137 DCA TIOSG / CLEAR SIGN FLAG
1138 TAD (240
1139 DCA TIOFC / FILL CHAR = SPACE
1140 TAD TIOFL
1141 AND (2000
1142 SNA CLA / FILL CHAR = ZERO ?
1143 JMP TIOA / NO:
1144 TAD (260 / YES:
1145 DCA TIOFC
1146 JMP TIOB / NO SIGN OPTION
1147
1148 TIOA, TAD TIOFL
1149 SMA CLA / SIGNED OUTPUT ?
1150 JMP TIOB / NO:
1151 TAD TION0 / YES: COMPLEMENT NEGATIV NUMBER
1152 SMA / NEGATIV NUMBER ?
1153 JMP TIOB / NO:
1154 CIA / YES: COMPLEMENT
1155 DCA TION0
1156 ISZ TIOSG / SET SIGN FLAG
1157
1158 TIOB, CLA
1159 TAD TIOFL
1160 AND (77 / GET FIELD WIDTH
1161 DCA TIOFL / CLEAR UNUSED BITS
1162 TAD TIOFL
1163 SNA / FIELD WIDTH ZERO ?
1164 JMP TIOD / YES:
1165 CIA / NO: COMPLEMENT
1166 TAD TIOSG / TAKE SIGN INTO ACCOUNT
1167 TAD (4 / MAX 4 DIGIT
1168 SMA / FILL CHARACTER NEEDED ?
1169 JMP TIOD / NO:
1170 DCA TIOCT / YES: -# OF SPACE TO FILL FORMAT
1171
1172 TIOC, TAD TIOFC / TYPE
1173 JMS TCO
1174 ISZ TIOCT
1175 JMP TIOC
1176
1177 TIOD, CLA
1178 TAD (-13 / # OF SUBTRACTIONS
1179 DCA TIOCT / TO COUNTER
1180 DCA TION1
1181
1182 TIOE, CLA CLL / SUCCESSIV SUBTRACTIONS OF
1183 TAD TION0 / DECIMAL VALUES FROM TABLE
1184 TAD I TIOPT / SUBTRACTION
1185 SZL / CARRY ?
1186 DCA TION0 / YES, NEW VALUE
1187 CLA
1188 TAD TION1 / RESULT IN LINK
1189 RAL
1190 DCA TION1 / SHIFTED INTO TION1
1191 ISZ TIOPT / INCREMENT POINTER
1192 ISZ TIOCT / DONE ?
1193 JMP TIOE / NO, CONTINUE
1194
1195 DCA TIOZF / CLEAR LEADING ZERO FLAG
1196
1197 TAD TIOSG
1198 CIA
1199 TAD (-5
1200 DCA TIOCT / SET DIGIT COUNTER, 4 DIGITS + SIGN
1201
1202 TAD TION1 / 1. DIGIT
1203 BSW
1204 RTR
1205 JMS TIOF
1206
1207 TAD TION1 / 2. DIGIT
1208 RTR
1209 RTR
1210 JMS TIOF
1211
1212 TAD TION1 / 3. DIGIT
1213 JMS TIOF
1214
1215 ISZ TIOZF / 4. DIGIT ALWAYS TYPED
1216 TAD TION0
1217 JMS TIOF
1218
1219 JMP I TDOHO
1220
1221 TIOER, TAD TIOFL / ERROR, FILL FORMAT WITH ****
1222 CIA
1223 DCA TIOCT
1224 TAD ("*
1225 JMS TCO / TYPE CHARACTER
1226 ISZ TIOCT
1227 JMP .-4
1228 CLA
1229 JMP I TDOHO / EXIT MAIN SUBROUTINE
1230
1231 TION0, 0 / GETS LSD
1232 TION1, 0 / GETS 3 MSD
1233 TIOPT, 0 / POINTER
1234 TIOCT, 0 / COUNTER
1235 TIOFL, 0 / FLAGS
1236 TIOSG, 0 / SIGN FLAG
1237 TIOZF, 0 / ZERO SUPPRESS FLAG
1238 TIOFC, 0 / FILL CHARACTER
1239 \f/ TSO STRING OUTPUT
1240 /
1241 / TYPES A STRING OF ASCII - CHARACTERS
1242 / BUFFER CONTAINS ONE CHARACTER PER
1243 / WORD AND MUST BE TERMINATED BY 0
1244 /
1245 / ENTRY: AC = POINTER TO BUFFER
1246 / EXIT: AC = 0
1247 /
1248 / 10-APR-84 REV 0.0 KJ.S.
1249 /
1250
1251 TSO, 0
1252 DCA TSOPT / BUFFER POINTER
1253 TSOA, TAD I TSOPT / GET CHARACTER
1254 SNA / CHARACTER.EQ.0 ?
1255 JMP I TSO / YES: EXIT
1256 JMS TCO / NO: PRINT
1257 ISZ TSOPT
1258 JMP TSOA
1259 JMP TSOA
1260
1261 TSOPT, 0
1262 \f/ FPP ERROR OUTPUT
1263 /
1264 / ENTER THIS SUBROUTINE VIA 'JMS I 7'
1265 / IF NO FPP IS LOADED AND EXIT TO OS/8
1266 /
1267 / SUBR: TTO
1268 /
1269 / 03-FEB-85 REV 0.0 KJ.S.
1270 /
1271
1272 TFPPER, 0
1273 CLA
1274 TAD (TFPPET
1275 JMS TTO
1276 JMP I (7600
1277
1278 TFPPET, TEXT /NO FPP !/;0
1279
1280 PAGE
1281 \f/ TCO CHARACTER OUTPUT
1282 /
1283 / TYPES ONE ASCII-CHARACTER CALLING
1284 / CP-ROUTINE, RESPONS TO CTRL/S - CTRL/Q
1285 /
1286 / ENTRY: AC = CHARACTER
1287 / EXIT: AC = 0 LINK UNCHANGED
1288 /
1289 / 10-APR-84 REV 0.0 KJ.S.
1290 / 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT
1291 / 18-OCT-84 REV 0.2 KJ.S. LINK PRESERVED
1292 /
1293
1294 TCO, 0
1295 DCA TCOSV / SAVE CHAR
1296 JMS TOKSF / CHECK XON/XOFF
1297 JMP TCO2
1298 JMS TOKRB
1299 AND (177
1300 TAD (7755
1301 SZA CLA / CTRL/S ?
1302 JMP TCO2 / NO:
1303 TCO1, CLA / YES: WAITING FOR CTRL/Q
1304 JMS TOKSF
1305 JMP .-1
1306 JMS TOKRB
1307 AND (177
1308 TAD (7757
1309 SZA CLA / CTRL/Q ?
1310 JMP TCO1 / NO: WAIT
1311 TCO2, TAD TCOSV / YES: TYPE CHARACTER
1312 JMS TOTLS
1313 JMS TOTSF
1314 JMP .-1
1315 CLA
1316 JMP I TCO
1317
1318 TCOSV, 0
1319
1320 / SUBROUTINES WITH I/O INSTRUCTIONS
1321 / DEVICE-CODE CAN BE SET BY TODC
1322
1323 TOKSF, 0
1324 KSF
1325 SKP
1326 ISZ TOKSF
1327 JMP I TOKSF
1328 TOKRB, 0
1329 KRB
1330 JMP I TOKRB
1331 TOTSF, 0
1332 TSF
1333 SKP
1334 ISZ TOTSF
1335 JMP I TOTSF
1336 TOTLS, 0
1337 TLS
1338 JMP I TOTLS
1339 \f/ TODC.PA
1340 /
1341 / CHANGE SERIAL OUTPUT DEVICE AND THE CORRESPONDING
1342 / INPUT DEVICE FOR XON/XOFF PROTOCOL
1343 /
1344 / ENTRY: AC = XNNX NN = OUTPUT, NN-1 = INPUT DEVICE
1345 / EXIT: AC = 0
1346 /
1347 / 18-OCT-84 REV 0.0 KJ.S.
1348 /
1349
1350 TODC, 0
1351 AND (770
1352 DCA TODCSV
1353 TAD (6001
1354 TAD TODCSV
1355 DCA TOTSF+1
1356 TAD (6006
1357 TAD TODCSV
1358 DCA TOTLS+1
1359 TAD (-10 / CHANGE INPUT
1360 TAD TODCSV
1361 DCA TODCSV
1362 TAD (6001
1363 TAD TODCSV
1364 DCA TOKSF+1
1365 TAD (6006
1366 TAD TODCSV
1367 DCA TOKRB+1
1368 JMP I TODC
1369
1370 TODCSV, 0
1371 \f/ TFO FLOATING OUTPUT
1372 /
1373 / TYPES FLOATING NUMBER IN E- AND F-FORMAT
1374 /
1375 / ENTRY: AC = POINTER TO FLOATING NUMBER
1376 / ARG1: BIT 0 SET IF CR/LF AFTER OUTPUT
1377 / BIT 3-5 NUMBER OF DIGITS TO THE
1378 / RIGHT OF THE DECIMAL POINT
1379 / BIT 6-11 TOTAL FIELD WIDTH
1380 / BIT 3-11=0 E14.7 - FORMAT
1381 /
1382 / 09-APR-84 REV 0.0 KJ.S.
1383 / 19-OCT-84 REV 0.1 KJ.S. CR/LF OPTION ADDED
1384 / 03-FEB-85 REV 0.2 KJ.S. FPP CODE DEFINED
1385 /
1386
1387 TFO, 0
1388 DCA TFOPT / SAVE POINTER
1389 TAD I TFO
1390 AND (4000
1391 DCA 55 / SET CR/LF - OPTION
1392 TAD I TFO
1393 ISZ TFO
1394 AND (377
1395 DCA 56 / OUTPUT FORMAT
1396 TAD 56
1397 SNA
1398 JMP TFOA / E-FORMAT
1399 AND (77 / F-FORMAT
1400 DCA 57 / SET FIELD WIDTH
1401 TAD 56
1402 BSW
1403 AND (7
1404 DCA 60 / # OF DIGITS
1405
1406 TFOA, JMS I 7
1407 TFGET I TFOPT
1408 TFOUT
1409 TFEXT
1410 CLA
1411 JMP I TFO
1412
1413 TFOPT, 0 / POINTER TO FLOATING NUMBER
1414 \f/ TEL ERASE LINE
1415 /
1416 / ERASE A LINE AND POSITIONS CURSOR
1417 / TO BEGINNING OF THIS LINE
1418 /
1419 / ENTRY: AC BIT 8-11 LINE NUMBER 0 - 27
1420 / EXIT: AC = 0 NORMAL
1421 / AC.NE.0 ERROR: LINE NUMBER.GT.27
1422 /
1423 / SUBR: TLC,TCO,TSO
1424
1425 / 11-APR-84 REV 0.0 KJ.S.
1426 / 04-OCT-84 REV 0.1 KJ.S. VT100 CODE CHANGED
1427 / 17-MAR-86 REV 0.2 KJ.S. 70 SPACES, NO MARGIN BELL
1428 /
1429
1430 TEL, 0
1431 AND (37
1432 DCA TELSV / SAVE LINE NUMBER
1433 TAD TELSV
1434 JMS TLC / LOAD CURSOR TO LINE
1435 SZA
1436 JMP I TEL / ERROR: LINE#.GT.27
1437
1438 IFNDEF VT100 <
1439 TAD (-106
1440 DCA TELCNT
1441 TELA, TAD (240 / SEND 106Q SPACES
1442 JMS TCO
1443 ISZ TELCNT
1444 JMP TELA
1445 TAD TELSV / CURSOR TO START OF LINE
1446 JMS TLC
1447 JMP I TEL / NORMAL AND ERROR EXIT
1448
1449 TELCNT, 0 / COUNT SPACES
1450 >
1451
1452 IFDEF VT100 <
1453 TAD (TELVT
1454 JMS TSO / ESC [ 2 K
1455 JMP I TEL
1456
1457 TELVT, 033 / ESC
1458 133 / [
1459 062 / 2
1460 113 / K
1461 0
1462 >
1463
1464 TELSV, 0 / SAVE ARGUMENT
1465
1466 PAGE
1467 \f/ TLC LOAD CURSOR
1468 /
1469 / NONDESTRUCTIV MOVE OF CURSOR
1470 /
1471 / ENTRY: AC BIT 0-6 X 0-117
1472 / BIT 7-11 Y 0-27
1473 / EXIT: AC = 0 NORMAL
1474 / AC.NE.0 ERROR EXIT, COORDINATES OUT OF RANGE
1475 /
1476 / 09-APR-84 REV 0.0 KJ.S.
1477 / 10-APR-84 REV 0.1 KJ.S. VT100 COMPATIBLE
1478 / 11-APR-84 REV 0.2 KJ.S. BUG IN VT100-CODE REMOVED
1479 / 04-OCT-84 REV 0.3 KJ.S. ADM3A CODE CHANGED
1480 / 15-OCT-84 REV 0.4 KJ.S. HEADER BUG
1481 / 03-FEB-85 REV 0.5 KJ.S. UPDATE
1482 /
1483
1484 TLC, 0
1485 DCA TLCSV / SAVE ARGUMENT
1486 TAD TLCSV
1487 AND (37 / = Y-KOORDINATE FIRST
1488 TAD (-30
1489 SMA / Y.GT.27 ?
1490 JMP TLCER / YES: ERROR
1491 TAD (330 / NO: OUTPUT IS 300 TO 327
1492 DCA TLCY
1493 TAD TLCSV
1494 RTR
1495 RTR
1496 RAR
1497 AND (177 / = X-KOORDINATE
1498 TAD (-120
1499 SMA / X.GT.117 ?
1500 JMP TLCER / YES: ERROR
1501 TAD (360 / NO: OUTPUT IS 240 TO 357
1502 DCA TLCX
1503
1504 IFNDEF VT100 <
1505 TAD (TLCADS
1506 JMS TSO / OUTPUT STRING FOR ADM3A
1507 JMP I TLC
1508 >
1509
1510 IFDEF VT100 <
1511 TAD (TLCVTS
1512 JMS TSO / FIRST PART OF VT100 SEQUENCE
1513 TAD TLCY
1514 TAD (-277
1515 JMS TDO / LINE ADDRESS IN DECIMAL DIGITS
1516 0 / DIGITS ONLY
1517 TAD (";
1518 JMS TCO
1519 TAD TLCX
1520 TAD (-237
1521 JMS TDO
1522 0
1523 TAD ("H
1524 JMS TCO / DONE
1525 JMP I TLC
1526
1527 TLCVTS, 0033 / ESC
1528 0133 / [
1529 0
1530 >
1531
1532 TLCADS, 33 / ESC
1533 75 / =
1534 TLCY, 0
1535 TLCX, 0
1536 0
1537
1538 TLCER, CLA IAC / ERROR, NO CURSOR MOVE
1539 JMP I TLC / EXIT WITH AC.GT.0
1540
1541 TLCSV, 0 / SAVE ARGUMENT
1542
1543 \f/ TCS CLEAR SCREEN
1544 /
1545 / CLEARS SCREEN AND POSITIONS CURSOR
1546 / TO UPPER LEFT CORNER
1547 /
1548 / ENTRY: AC = NO CARE
1549 / EXIT: AC = 0
1550 /
1551 / 10-APR-84 REV 0.0 KJ.S.
1552 /
1553
1554 TCS, 0
1555 CLA
1556
1557 IFNDEF VT100 <
1558 TAD (32
1559 JMS TCO / SEND CTRL/Z TO ADM3A
1560 JMP I TCS / CURSOR IS HOME
1561 >
1562
1563 IFDEF VT100 <
1564 TAD (TCSVT
1565 JMS TSO / = ESC [ 2 J
1566 JMS TLC / AC = 0 HOME
1567 JMP I TCS
1568
1569 TCSVT, 0033 / ESC
1570 0133 / [
1571 0062 / 2
1572 0112 / J
1573 0
1574 >
1575
1576 / *7
1577 / TFPPER / ERROR PRINTOUT IF NO FPP LOADED
1578
1579
1580 / 27BFPP.BN OVERLAY
1581
1582 IFDEF FPP27B <
1583 *6146
1584
1585 SKP
1586 TCO
1587 JMS I .-1
1588 >
1589
1590
1591 \f\1a