1 /8 OS8 SET (PAL8/MACREL VERSION)
14 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
15 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
16 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
17 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
19 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
20 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
21 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
22 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
24 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
25 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
29 / COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION.
36 / 19-MAR-77 S.R. REMOVED FROM CAMP V4
37 / 19-MAR-77 S.R. FIXED BUG WITH SET MTA FILES
38 / 19-MAR-77 S.R. FIXED BUG WITH SET CDR
39 / 19-MAR-77 S.R. FIXED BUG WITH = OPTION
40 / 19-MAR-77 S.R. CONVERTED TO MACREL CODE
41 / 01-APR-77 S.R. TTY PAUSE
42 / 01-APR-77 S.R. TTY HEIGHT
43 / 01-APR-77 S.R. TTY SCOPE
44 / 17-APR-77 S.R. REWROTE TTY PAGE
45 / 17-APR-77 S.R. DEV: DVCODE
46 / 17-APR-77 S.R. FINISHED TTY SCOPE
47 / 27-APR-77 S.R. TTY COL
48 / 27-APR-77 S.R. SYS OPTIONS (INIT, OS8, OS78)
49 / 03-MAY-77 S.R. LA8A, LA78
50 / 03-MAY-77 S.R. INIT OS78 FIXES TERMINATE
51 / 03-MAY-77 S.R. BASIC FIXES
52 / 29-JUN-77 S.R. TTY ARROW (NOT FOR PS/8)
53 / 29-JUN-77 S.R. TTY ESC (NOT FOR PS/8)
54 / 29-JUN-77 S.R. DEV BLK LOC (NOT FOR PS/8)
56 / MUST SKIP LOCS 1000-1777
65 IFNZRO MACREL < .XSECT XSET
73 IFNZRO MACREL < .ZSECT ZSET
83 DEVTYP, 0 /DEVICE TYPE (BITS 6-11)
84 ENTRY, 0 /HANDLER ENTRY POINT
86 TYP, 0 /0 MEANS 'F', 1 MEANS 'R'
89 DCW, 0 /DEVICE CONTROL WORD
91 USR, 200 /POINTS TO USR ENTRY POINT
92 ESCBIT, 0 /1 MEANS USER TYPED ALTMODE
94 CTOFLG, 0 /-1 MEANS SAW ^O
96 DHIT, 0 /DEVICE HANDLER INFO TABLE - 1
97 DHI, 0 /DEVICE HANDLER INFO
98 DBLK, 0 /DEVICE HANDLER BLOCK
99 VNOPTR, 0 /PTS TO VERSION # IN HANDLER
100 VNO, 0 /CURRENT HANDLER VERSION NUMBER
103 FLG, 1 /1 MEANS SAW NO DIGITS
106 SCOP, 0 /NON-0 IF TTY IS SCOPE
110 /1000-1377 /OS/8 LINE BUFFER
111 /1400-1777 /PS/8 LINE BUFFER
113 /6600-7177 /AUXILIARY I/O BUFFER
114 /7000-7177 /I/O BUFFER FOR TECO CCB
115 /7200-7577 /OS/8 HANDLER
119 \f IFNZRO MACREL < .ASECT ASET
128 JMS I [READ /READ A LINE INTO OS/8 LINE BUFFER
129 CHN, TAD [LINBUF /CHAIN ENTRY ADDRESS
130 DCA LINPTR /INITIALIZE POINTER TO LINE BUFFER
133 JMS I [SPACE /IGNORE LEADING SPACES
134 JMS GETTWO /GET TWO CHARS
136 JMS I [SCAN /SCAN PAST EXTRA LETTERS OR DIGITS
138 JMS I [BRANCH /GO TO APPROPRIATE ROUTINE
145 JMP I [SYNTAX /NONE OF THESE
152 DCA SCOP /NOTE WHETHER TTY IS SCOPE V3D
156 /GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT
157 /ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND.
169 GETSIX, 0 /GET A SIXBIT LETTER OR DIGIT (OR NULL)
170 JMS ALPHA /IS IT ALPHANUMERIC?
173 JMP I GETSIX /TRUNCATE TO SIXBIT
176 JMP I GETSIX /RETURN NULL
178 GETC, 0 /GET A CHARACTER, ADVANCE POINTER
180 AND [177 /ALWAYS RETURN 8-BIT
182 TAD [200 /WITH HIGH ORDER BIT ON
183 ISZ LINPTR /ADVANCE SCAN
186 BACKC, 0 /MOVE SCAN POINTER BACK ONE
191 \f/RETURN 1 NOT OF TYPE DESIRED
192 /RETURN 2 DESIRED TYPE
193 /IN BOTH CASES, CHAR IS LEFT IN AC
195 ALPHA, 0 /LOOK FOR ALPHANUMERIC
197 JMS LETTER /IS IT A LETTER?
198 JMP TRYDIG /NO, TRY DIGIT
200 TRYDIG, JMS DIGIT /IS IT A DIGIT?
201 JMP I ALPHA /NO, AINT LETTER OR DIGIT
202 GOTAL, ISZ ALPHA /YES, EITHER LETTER OR DIGIT
203 JMP I ALPHA /RETURN WITH IT IN AC
205 LETTER, 0 /LOOK FOR LETTER
211 TAD ("Z+1 /RESTORE CHAR
214 DIGIT, 0 /LOOK FOR DIGIT
217 TAD ("0-"9-1 /(DECIMAL)
220 TAD ("9+1 /RESTORE DIGIT TO CHARACTER FORM
221 JMP I DIGIT /AND RETURN WITH IT IN AC
223 TEXT /SET DEV: [NO] ATTRIB [N]/
232 TEXT /? SYNTAX ERROR/
235 JMP I [7605 /LINE ENDED WITH ESCAPE
236 TAD I [READ /WAS 'READ' EVER CALLED?
238 JMP I [START /YES, GET A NEW LINE
239 JMP I [7605 /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM
277 JMS I [TYPE /ECHO "^C"
279 JMP I [7600 /THEN GO AWAY
288 DCA CTOFLG /STOP ECHOING
295 TEXT /? NUMBER TOO BIG/
298 TEXT /? CAN'T - DEVICE DOESN'T EXIST/
302 TEXT \? I/O ERROR ON SYS:\
306 TAD NO /REVERSE MEANING OF 'NO'
328 JMS I [7607 /THERE'S A 2ND COPY
329 200 /IN BLOCK 11 LOCATION 56
345 JMP DEFINI /ASSUME @INIT
348 JMP I [SYNTAX /SET SYS NO INIT CMD
352 TAD (-6 /ALLOW A MAXIMUM OF 5 CHARS
360 TEXT /? INITIAL COMMAND TOO BIG/
409 INIMSG, "@;"I;"N;"I;"T;0
413 /THIS WON'T ALWAYS WORK UNDER PS/8:
419 TEXT /A FUNNY THING HAPPENED TO ME ON THE WAY TO THE COMPUTER ROOM./
421 TEXT /A PANHANDLER CAME UP TO ME AND SAID,/
423 TEXT /"CAN YOU SPARE ME $25,000 FOR A CUP OF COFFEE?"/
425 TEXT /"WHY SO MUCH?", I ASKED IN AMAZEMENT./
427 TEXT /"THINGS HAVE BECOME SO AUTOMATED", HE REPLIED,/
429 TEXT /"THAT THE ONLY WAY I CAN ORDER IT/
431 TEXT /IS WITH A COMPUTER ORDER FORM"./
439 DCA TEMP /SEE SOURCE OF KL8E
474 DCA BLOK /GET BLOCK NUMBER
478 JMS I (GENCMN /GET LOCATION
487 JMS I ENTRY /READ BLOCK
498 DCA DEVNUM /FAKE OUT - PREVENTS RE-WRITING USED HANDLER
506 DCA I NUM2 /SET NEW VALUE
519 /ORIGIN PAST OS/8 LINE BUFFER AT 1000.
520 /SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE
521 /PS/8 USERS WISH TO PATCH THIS PROGRAM
523 /SCAN PAST EXTRA LETTERS OR DIGITS
534 /SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1
537 DCA FLAG /SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND
538 DCA SPKNT /INITIALIZE SPACE COUNTER
541 JMS I [GETC /GET NEXT CHAR
543 SNA CLA /IS IT A SPACE?
544 JMP GOTSP /YES, COUNT IT
545 JMS I [BACKC /NO, PUT IT BACK
547 SKP /USER DIDN'T SPECIFY FLAG
548 JMP I SPACE /-0 MEANT DON'T CHECK IF FOUND SPACE
549 TAD SPKNT /HOW MANY SPACES DID WE FIND?
551 JMP I SPACE /SOME. OK
552 JMP I [SYNTAX /NONE. TSK. TSK.
567 JMP I T /FOUND ITEM IN COLUMN 1, JUMP TO ADDRESS IN COL 2
570 JMP I BRANCH /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT
574 TEXT /? OLD VERSION OF KBM/
587 TAD (NOP /AC MAY BE NON-0
636 \f/READ A LINE INTO OS/8 LINE BUFFER
639 DCA CTOFLG /ALLOW ECHOING
649 -215;CR /CARRIAGE RETURN
651 -376;ESCAPE /ALTMODE (2ND FLAVOR)
654 -200;GT /IGNORE NULLS
657 DCA TEMP /NONE OF THESE
660 SNA CLA /AT END OF LINE BUFFER?
661 JMP GT /YES, DON'T ACCEPT CHAR
662 TAD TEMP /NO, RETRIEVE CHAR
664 TAD TEMP /INSERT IN BUFFER
666 ISZ LINPTR /BUMP POINTER
672 JMS I [TYPE /ECHO "^U" <CR><LF>
682 JMP BOL /AT BEGIN OF LINE
684 DCA LINPTR /MOVE POINTER BACK ONE
689 JMS I [TYPE /ECHO "\"
696 JMS I [TYPE /ECHO RUBBED-OUT CHARACTER
713 JMS I [TYPE /ENCLOSE RUBBED-OUT CHARS IN \'S
732 ESCAPE, TAD ["$ /ECHO ESCAPE AS DOLLAR SIGN
734 ISZ ESCBIT /NOTE ESCAPE
735 CR, DCA I LINPTR /INSERT 0 AT END
737 JMP I READ /RETURN, WE GOT LINE
738 \fLF, DCA I LINPTR /TEMPORARILY INSERT A 0 SENTINEL
746 JMP I [GT /FINISHED, GET SOME MORE CHARS
747 JMS I [TYPE /ECHO CURRENT CHARS
750 \f/GET A DECIMAL NUMBER, RETURN IT IN AC
760 TAD (-"0 /CONVERT TO DIGIT
762 DCA FLG /NOTE PASSAGE OF A DIGIT
781 DCA NUM /IF NO DIGITS, RETURN A 1
786 /PARSES OFF A DEVICE NAME (1-4 CHARS)
787 /DETERMINES IF IT EXISTS
788 /LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE
789 /SETS ENTRY POINT ADDRESS AT 'ENTRY'
790 /SETS DEVICE NUMBER AT 'DEVNUM'
791 /SETS DEVICE CONTROL WORD AT 'DCW'
801 DCA WD1 /COMBINE TWO WORDS INTO 1 (IN WD1)
805 TAD WD1 /OS/8 KLUDGE FOR UNIQUENESS
807 STL RAR /FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO
814 WD2, 0 /GETS DEVICE NUMBER
815 WD3, 0 /GETS ENTRY POINT
816 JMP I [NONEX /DEVICE DOESN'T EXIST
818 SZA /IS HANDLER ALREADY IN CORE?
822 TAD (7201 /ALLOW TWO PAGE HANDLER IN 7200
829 DW2, 0 /GETS DEVICE NUMBER
830 DW3, 0 /GETS ENTRY POINT
831 JMP I [NONEX /DOESN'T EXIST
842 DCA DCWPTR /POINT INTO DEVICE CONTROL WGRD TABLE
844 TAD I DCWPTR /GET DCW
852 TAD I (37 /GET ADDRESS OF DHIT
900 DCA TEMP /SEE SOURCE OF KL8E FOR EXPLANATION
909 JMP NOPA /NO PAUSE VALUE
912 JMP I [SYNTAX /SET TTY NO PAUSE N
917 TAD NUM /SCALE CORRECTLY
924 JMP BADPAUS /NO DIGITS
944 \fBADPAUS,JMS I [PRINT
945 TEXT /? BAD VALUE FOR PAUSE DURATION/
952 TAD (-"0-10 /CONVERT TO DIGIT
977 JMP I [SYNTAX /SET TTY NO COL
980 JMP BADCOL /NO COL SPECIFIED
992 TAD (CCLNAM /READ IN CCL.SV
994 JMP CCLNF /CCL NOT FOUND
995 TAD (2 /WANT 2ND BLOCK IN CCL
996 DCA ARG2 /CCL LOCATIONS 12400-12777
1004 TAD I (AUXBUF /GET PTR TO DIRECT COL WORD
1007 TAD (AUXBUF-2400 /RELOCATE
1017 \fBADCOL, JMS I [PRINT
1018 TEXT /? BAD COLUMN COUNT/
1023 TEXT /? WRONG VERSION OF CCL/
1028 DCA .-1 /DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN
1031 JMP I TYPE /NO ECHOING
1041 CCLNAM, FILENAME CCL.SV
1044 TEXT /? CCL.SV NOT FOUND/
1067 \fESC, "E;"S;"C;4000+"A;4000+"P;4000+"E;0
1073 JMP I (BADHIT /NO HEIGHT
1076 JMP I [SYNTAX /SET TTY NO HEIGHT
1083 JMP I (BADHIT /NO DIGITS
1103 KBMTBL, AUXBUF+313; 0210; 1070
1104 AUXBUF+314; 1313; 2020
1105 AUXBUF+316; 1324; 7240
1106 AUXBUF+317; 4423; 3020
1107 AUXBUF+322; 1313; 1440
1108 AUXBUF+224; 7555; 7403
1109 AUXBUF+225; 1207; 1302
1110 AUXBUF+226; 7557; 7402
1111 AUXBUF+227; 1207; 1302
1114 CDTBL, AUXBUF+135; 0210; 1102
1115 AUXBUF+136; 1335; 2024
1116 AUXBUF+140; 1346; 7240
1117 AUXBUF+141; 4466; 3024
1118 AUXBUF+144; 1335; 1420
1119 AUXBUF+33; 7555; 7403
1120 AUXBUF+34; 5207; 5321
1121 AUXBUF+35; 7557; 7402
1122 AUXBUF+36; 5207; 5321
1125 CCLTBL, AUXBUF+4; 0024; 0002
1126 AUXBUF+5; 0522; 0143
1127 AUXBUF+6; 5551; 5363
1128 AUXBUF+7; 5600; 6000
1131 AROW, "A;"R;"R;"O;"W;0
1133 \f/ SCOPE BIT ON DISK:
1134 / BLOCK 0 REL 126 BIT 4
1136 / SCOPE BIT IN MEMORY:
1140 /THE FOLLOWING CODE WOULD BE ADDED IF WE WANT TO
1141 /ALLOW CHANGING KL8E SCOPE PATTERNS
1155 AUXBUF /READ 2 PAGES INTO AUXILIARY BUFFER
1167 AUXBUF /READ BLOCK 53 (CD)
1177 TAD NO /SET SCOPE BIT
1212 \fSET200, 0 /DF IS SPECIALLY SET
1231 FIXLUP, TAD I FIXPTR
1249 \fBASNAM, FILENAME BASIC.SV
1309 DCA T2 /T2 CONTAINS NEG OF SMALLER IOT
1349 \fNOTIMPL,JMS I [PRINT
1350 TEXT /% OPERATION NOT YET IMPLEMENTED/
1361 JMP I [SYNTAX /NO : OR BLANK AFTER NAME
1363 BADHIT, JMS I [PRINT
1364 TEXT /? BAD HEIGHT SPECIFIED/
1373 JMS I [SPACE /IGNORE OPTIONAL SPACES
1387 TAD (MAIN-1 /LOOK FOR DEVICE TYPE IN MAIN TABLE
1391 JMP NOTYP /NOT FOUND
1396 TAD (3 /POINT TO NEXT ENTRY
1398 \fFNDTYP, TAD I XR1 /GET GENERIC NAME
1403 TAD I XR1 /GET PTR TO DEVICE TABLE
1407 DCA SAVPTR /SAVE SCAN POINTER
1410 SNA CLA /ARE NEXT TWO CHARS 'NO'?
1413 DCA LINPTR /RESTORE PTR
1415 SNA /GET NEXT KEYWORD POINTER
1417 ISZ PTR /POINT TO PTR TO ROUTINE
1421 DCA PTR /GET PTR TO ROUTINE
1425 JMS I (HREAD /READ HANDLER
1426 JMS I PTR /CALL ROUTINE
1430 JMS I (HWRITE /REWRITE HANDLER
1435 JMP INTO /V3D ALLOW SET SYS:
1436 \fHYPH, JMS I [ALPHA
1444 JMS I [SPACE /IGNORE SPACE
1450 TEXT \? UNKNOWN ATTRIBUTE FOR DEVICE \
1467 TAD (AUX /SEARCH AUXILIARY TABLE
1488 L7200, 7200 /INTO 7200-7577
1489 BLOCK, 0 /FROM THIS BLOCK ON SYSTEM DEVICE
1492 AND [177 /GET RELATIVE ENTRY PT
1497 JMP I HREAD /VNO ALREADY SET BY - COMMAND
1514 RESERR, JMS I [PRINT
1515 TEXT /? CAN'T - DEVICE IS RESIDENT/
1519 TEXT /? CAN'T - OBSOLETE HANDLER/
1533 TEXT /? CAN'T - UNKNOWN VERSION OF THIS HANDLER/
1535 \fMAIN, -0; DEVICE TTY; TTYTBL
1536 -1; DEVICE PTR; PTRTBL
1537 -2; DEVICE PTP; PTPTBL
1538 -3; DEVICE CDR; CDRTBL
1539 -4; DEVICE LPT; LPTTBL
1540 -20; DEVICE MTA; MTATBL
1543 /TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER
1544 \fLPTTBL, WIDTH;LPWDTH
1552 MTATBL, PARITY;MTAPAR
1565 \fWIDTH, "W;"I;"D;"T;"H;0
1567 LV8E, "L;"V;4000+"8;4000+"E;0
1569 ALT, "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0
1571 PAYGE, "P;"A;"G;"E;0
1573 LOC, "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0
1574 FILES, "F;"I;"L;"E;4000+"S;0
1575 READO, "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0
1576 VERS, "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0
1577 PARITY, "P;"A;"R;4000+"I;4000+"T;4000+"Y;0
1578 DENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0
1580 FLAGG, "F;"L;"A;"G;0
1582 EVEN, "E;4000+"V;4000+"E;4000+"N;0
1583 ODD, "O;4000+"D;4000+"D;0
1584 DELAY, "D;"E;"L;"A;"Y;0
1586 PAUS, "P;"A;"U;"S;"E;0
1587 HGHT, "H;"E;"I;"G;"H;"T;0
1588 SCOPP, "S;"C;"O;"P;"E;0
1589 SYSAUX, INIT; SYSINI
1594 DVCO, "D;"V;"C;4000+"O;4000+"D;4000+"E;0
1595 COL, "C;"O;"L;4000+"U;4000+"M;4000+"N;0
1625 TEXT /? CAN'T AFFECT ANNALEX LPT/
1632 TEXT /? CAN'T - NOT KL8E HANDLER/
1676 TEXT /? BAD VERSION LETTER/
1715 JMS I [SRCH /V3D NEW ROUTINE
1718 TAD (3 /POINT TO 'SZA CLA'
1722 TAD (SZA CLA-CLA /YES
1761 TAD (1200 /TAD TTY240
1775 BADWID, JMS I [PRINT
1776 TEXT /? ILLEGAL WIDTH/
1779 BLK, "B;"L;"O;"C;"K;0
1797 REASEM, JMS I [PRINT
1798 TEXT /? CAN'T - MUST REASSEMBLE KL8E SOURCE/
1805 \f/ENTER WITH PTR TO POSSIBLE KEYWORD IN AC
1815 JMS I [ALPHA /IS IT ALPHANUMERIC?
1818 CLL RAL /LOW ORDER 11 BITS
1820 JMP KL /MATCHED, KEEP LOOKING
1821 JMP I KEYSRCH /DIDN'T MATCH
1824 CIA /INPUT STREAM RAN OUT OR HIT SPACE
1826 JMP GOTKEY /SPACE OR EOL MATCH FLAGGED CHARACTER
1832 STA /SKIP EXTRA STUFF
1834 ISZ KEYSRCH /TAKE GOOD RETURN 2
1842 \fTTYTBL, WIDTH;TTWIDTH
1940 JMP I [SYNTAX /NO DIGITS
2048 TAD (7200 /BASE OF HANDLER
2070 DCA GTEM /SAVE CHAIN STATUS
2078 OLDBAS, JMS I [PRINT
2132 BADCOD, JMS I [PRINT
2133 TEXT /? UNKNOWN CARD CODE/
2136 /SUPPOSED TO WORK ON ALL VERSIONS
2166 TAD (7200 /BASE OF HANDLER
2182 TAD [200 /FORCE TO 8-BIT
2192 LIST2, 3203;4007;3502
2197 LIST3, 7735;4076;0774
2201 \fTECNAM, FILENAME TECO.SV
2207 JMP I TECO /NOT THERE
2210 100 /READ 1 PAGE FROM TECO
2217 DCA I (7002 /REL LOC 2 IS S.A.
2227 DCA ARG1 /PTR TO FILENAME IN AC
2228 CLA IAC /LOOKUP ON SYS
2232 ARG1, 0 /STARTING BLOCK
2234 JMP I LOOKUP /NOT FOUND
2237 JMP I LOOKUP /RETURN 2 WITH BLOCK # IN AC
2260 DVLUP, JMS I (GETIOT
2270 \fCDRTBL, CODE;CDCODE
2275 /7000-7177 BUFFER FOR TECO CCB
2276 /7200-7577 BUFFER FOR HANDLER