ESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / COPYRIGHT (C) 1977,1978,1981,1982 BY DIGITAL EQUIPMENT CORPORATION. / / / / //SAVE STRING FOR V4: /0-777,1400-7577,12000-16377,30000-33577=2100 /START IS AT 200 / EDIT HISTORY: / 19-MAR-77 REMOVED FROM CAMP V4 / 19-MAR-77 FIXED BUG WITH SET MTA FILES / 19-MAR-77 FIXED BUG WITH SET CDR / 19-MAR-77 FIXED BUG WITH = OPTION / 19-MAR-77 CONVERTED TO MACREL CODE / 01-APR-77 TTY PAUSE / 01-APR-77 TTY HEIGHT / 01-APR-77 TTY SCOPE / 17-APR-77 REWROTE TTY PAGE / 17-APR-77 DEV: DVCODE / 17-APR-77 FINISHED TTY SCOPE / 27-APR-77 TTY COL / 27-APR-77 SYS OPTIONS (INIT, OS8, OS78) / 03-MAY-77 LA8A, LA78 / 03-MAY-77 INIT OS78 FIXES TERMINATE / 03-MAY-77 BASIC FIXES / 29-JUN-77 TTY ARROW (NOT FOR PS/8) / 29-JUN-77 TTY ESC (NOT FOR PS/8) / 29-JUN-77 DEV BLK LOC (NOT FOR PS/8) / 08-DEC-77 ADDED SYMBIONT SUPPORT / 23-MAY-78 FIXED SCOPE BUG AND 2-PAGE SYS HANDLER BUG / 08-JUN-78 FIXED WIDTH=N BUG / 01-FEB-79 COMMENTED THE PROGRAM / 09-JAN-81 ADDED SYS VT278 OPTION / 13-JAN-81 ADDED CODE TO ALLOW SET SYS DEVICE OPTION / 15-APR-81 CHANGED "SET TTY XXX" TO SUPPORT NEW /SET.PA OS278 /FROM: //11 OS8 SET (PAL8/MACREL VERSION) / /S.R. / / / S E T / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DX28,RX78 CHECK / REMOVED TEXT FOR RX28 AND VXA0 / ALLOW SET LPT WIDTH TO WORK ON LPTS HANDLER / REMOVED BRACE AND BRACKET CHECKS FOR ALTMODE / 27-DEC-82 ADDED TEXT FOR COMM HANDLER / 04-JAN-83 CHANGED KBMTBL,CDTBL TO REFLECT CHANGES TO / SYSTEM FOR LC CHAR SUPPORT / CHANGED SET SYS DEVICE QUESTIONS FOR UC OR LC /VB2 13-JAN-84 Version change to match CCL.SV / 16-JAN-84 Removed call to FIXCCL termin has been removed / from CCL. /VB3 19-JAN-84 Change version to match CCL //FOR OS78 V4 RELEASE: VOS278=4 //RECOGNIZES SET SYS OS278 VERSION="B&77^100+63 //VERSION IS "B3" / MUST SKIP LOCS 1000-1777 /FIELD 0 BUFFERS: LINBUF=1000 AUXBUF=6600 HNDLBF=7200 /0000-0777 /SET /1000-1377 /OS/8 LINE BUFFER /1400-1777 /PS/8 LINE BUFFER **SHARED BY "SET SYS OS8; OS78; OS278" ** /2000-6577 /SET /6600-7177 /AUXILIARY I/O BUFFER **SHARED BY "SET HANDLER"** /7000-7177 /I/O BUFFER FOR TECO CCB **SHARED BY SOME "ERROR MESSAGES" /7200-7577 /OS/8 HANDLER /7600-7777 /OS/8 //MONITOR CROSS REFERENCES: MONIT= 7600 MONIT5=7605 SHNDLR=7607 SCPBIT=7726 /BIT 4 IFDEF EDF IFNDEF EDF IFNZRO MACREL < .ASECT AAA > IFZERO MACREL < *0 > 0 CIF 30 JMP .-1 IFNZRO MACREL < .XSECT XSET > IFZERO MACREL < *10 > XR1, 0 XR2, 0 XR3, 0 IFNZRO MACREL < .ZSECT ZSET > IFZERO MACREL < *20 > TEMP, 0 T, 0 T2, 0 LINPTR, 0 T3, 0 FLAG, 0 SPKNT, 0 DEVTYP, 0 /DEVICE TYPE (BITS 6-11) ENTRY, 0 /HANDLER ENTRY POINT NUVERSION ONLY /VB0 OS278 CHANGES / 05-AUG-82 FIXED SET SYS DEVICE TO INCLUDE 1 ADDITIONAL / DIRECTORY SEGMENT / 05-AUG-82 ADDED TEXT FOR RX50 HANDLERS /VB1 / 15-OCT-82 CHANGED VERSION CHECK FOR CCL / 16-NOV-82 CHANGED ODT PATCH TABLE TO REFLECT CHANGES / 19-NOV-82 CHANGED SET SYS VT278 TO OS278 / CHANGED BATCH DEFAULTS TO ZERO, DON'T BOOT / 29-NOV-82 REMOVED CODE FOR RI [READ /READ A LINE INTO OS/8 LINE BUFFER CHN, TAD [LINBUF /CHAIN ENTRY ADDRESS DCA LINPTR /INITIALIZE POINTER TO LINE BUFFER JMS BIT STA JMS I [SPACE /IGNORE LEADING SPACES SEHAN, JMS GETTWO /GET TWO CHARS DCA TEMP JMS I [SCAN /SCAN PAST EXTRA LETTERS OR DIGITS TAD TEMP JMS I [BRANCH /GO TO APPROPRIATE ROUTINE -2305;SET /SE -2605;SVERSION /VE -1005;HELPMS /HE -1405;DRIVER /___ ____LER XXXX XXXX /DRIVER ACCESSED FOR SET HANDLER INPUT /WITH POINTER AT ...LER 0 SNA CLA JMP I (BADINP /INSUFFICIENT INPUT JMP I [SYNTAX /NONE OF THESE BIT, 0 CDF 10 TAD I (SCPBIT CDF 0 AND [200 DCA SCOP /NOTE WHETHER TTY IS SCOPE V3D TAD I (7612 TAD (-3 SNA CLA JMS I (FIX2P /FIXUP 2-PAGE SYSTEM HANDLER DCA .-1 /ONCE JMP I BIT / GETTWO /GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT /ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND. GETTWO, 0 JMS GETSIX CLL RTL RTL RTL DCA T2 JMS GETSIX TAD T2 /COMBINE JMP I GETTWO GETSIX, 0 //GET A SIXBIT LETTER OR DIGIT (OR NULL) JMS ALPHA /IS IT ALPHANUMERIC? JMP NOTALPH /NO AND [77 /YESM, 0 TYP, 0 /0 MEANS 'F', 1 MEANS 'R' T4, 0 DEVNUM, 0 DCW, 0 /DEVICE CONTROL WORD DCWPTR, 0 USR, 200 /POINTS TO USR ENTRY POINT ESCBIT, 0 /1 MEANS USER TYPED ALTMODE CNT, 0 CTOFLG, 0 /-1 MEANS SAW ^O PTR, 0 DHIT, 0 /DEVICE HANDLER INFO TABLE - 1 DHI, 0 /DEVICE HANDLER INFO DBLK, 0 /DEVICE HANDLER BLOCK VNOPTR, 0 /PTS TO VERSION # IN HANDLER VNO, 0 /CURRENT HANDLER VERSION NUMBER SAVPTR, 0 NO, 0 /1 MEANS 'NO' FLG, 1 /1 MEANS SAW NO DIGITS RR, 0 NUCODE, 0 SCOP, 0 /NON-0 IF TTY IS SCOPE NUM2, 0 SYSSWT, 0 /1=OS8 SYS; 2=OS78 SYS; 3=OS278 SYS TBLPTR, 0 /POINTER TO TABLE OF CHANGES FOR SET SYS OS78 IFNZRO MACREL < .ASECT ASET > *200 START, SKP JMP CHN TAD ["# JMS I [TYPE JMS BIT JMS 0 //LOOK FOR LETTER TAD (-"A CLL TAD ("A-"Z-1 SNL ISZ LETTER TAD ("Z+1 /RESTORE CHAR JMP I LETTER DIGIT, 0 //LOOK FOR DIGIT TAD (-"0 CLL TAD ("0-"9-1 /(DECIMAL) SNL ISZ DIGIT TAD ("9+1 /RESTORE DIGIT TO CHARACTER FORM JMP I DIGIT /AND RETURN WITH IT IN AC HELPMS, JMS I [PRINT TEXT "USE CCL 'HELP' COMMAND" JMP I [GOAWAY PAGE SYNTAX, CLA JMS PRINT TEXT "? BAD SYNTAX" GOAWAY, TAD ESCBIT SZA CLA JMP I [MONIT5 /LINE ENDED WITH ESCAPE TAD I [READ /WAS 'READ' EVER CALLED? SZA CLA JMP I [START /YES, GET A NEW LINE JMP I [MONIT5 /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM PRINT, 0 //ROUTINE TO PRINT TEXT STRING TAD I PRINT /CHARACTER STORED SIX BIT RTR /ISOLATE FIRST CHARACTER IN WORD RTR RTR JMS PRIN TAD I PRINT /ISOLATE SECOND CHARACTER JMS PRIN ISZ PRINT /ZERO SIGNALS END OF TEXT STRING JMP PRINT+1 LV, JMS I [CRLF ISZ PRINT /POINT TOWARD PROPER RETURN PRCDF, CIF 0 /CHANGED BY FIELD ONE CALL JMP I PRINT PRIN, 0 AND [77 /ISOLATE SIX BIT CHARACTER SNA JMP LV /IF ZERO, END OF STRING TAD [240 /PROCESS CHARACTER AND [77 / JMP I GETSIX /TRUNCATE TO SIXBIT NOTALPH,CLA JMS BACKC JMP I GETSIX /RETURN NULL GETC, 0 //GET A CHARACTER, ADVANCE POINTER TAD I LINPTR AND [177 /ALWAYS RETURN 8-BIT SZA TAD [200 /WITH HIGH ORDER BIT ON ISZ LINPTR /ADVANCE SCAN JMP I GETC /RETURN BACKC, 0 //MOVE SCAN POINTER BACK ONE STA TAD LINPTR DCA LINPTR JMP I BACKC /RETURN /RETURN 1 NOT OF TYPE DESIRED /RETURN 2 DESIRED TYPE /IN BOTH CASES, CHAR IS LEFT IN AC ALPHA, 0 //LOOK FOR ALPHANUMERIC JMS I [GETC JMS LETTER /IS IT A LETTER? JMP TRYDIG /NO, TRY DIGIT JMP GOTAL /YES TRYDIG, JMS DIGIT /IS IT A DIGIT? JMP I ALPHA /NO, AINT LETTER OR DIGIT GOTAL, ISZ ALPHA /YES, EITHER LETTER OR DIGIT JMP I ALPHA /RETURN WITH IT IN AC LETTER, INIT SZA CLA JMP I [SYNTAX /SET SYS NO INIT CMD JMS I [BACKC /RESET POINTER TAD LINPTR DCA SAVLP TAD (-6 /ALLOW A MAXIMUM OF 5 CHARS DCA SAVKN SAVLUP, JMS I [GETC SNA CLA JMP DEFDO /GOT THE COMMAND GO SET ISZ SAVKN JMP SAVLUP JMS I [PRINT TEXT "? INIT COMMAND TOO BIG" JMP I [GOAWAY SAVKN, 0 SAVLP, 0 INIT= 1107 //IN OS8V4.PA; ENTRY FOR SET SYS INIT KMNTRY= 0400 // ENTRY FOR SET SYS NO INIT DEFINI, TAD (INIMSG /DEFAULT INIT COMMAND DCA SAVLP DEFDO, JMS I [SHNDLR /READ IN BOOTSTRAP PROGRAM FROM BLOCK ZERO 200 AUXBUF TP1, 0 JMP I [SYSERR TAD NO /WAS INIT SET OR DELETED? SZA CLA TAD (KMNTRY-INIT /NO INIT; STORE "KMNTRY" AS MONITOR LOC. TO JUMP TO TAD (INIT /IF INIT IS SET STORE "INIT" IS IT A # OR LETTER? TAD [240 DCA T3 /EITHER WAY EVERYTHING COMES OUT ALRIGHT TAD [200 KRS /TEST FOR CTRL/C TAD (-203 SNA JMP CTRLC /THERE IT IS! TAD (203-217 /TEST FOR CTRL/O SNA CLA JMS CTRLO KCC //V4: FOR THE 278. (WON'T GET HERE FROM CCL) TAD T3 /TYPE CHARACTER JMS I [TYPE JMP I PRIN CTRLC, TAD ["^ JMS I [TYPE TAD ("C JMS I [TYPE /ECHO "^C" JMS I [DELAYY JMP I [MONIT /THEN GO AWAY CTRLO, 0 KCC /CLEAR OUT ^O TAD ["^ JMS I [TYPE TAD ("O JMS I [TYPE JMS I [CRLF STA DCA CTOFLG /STOP ECHOING JMP I CTRLO NUMBIG, JMS PRINT TEXT "? NUMBER TOO BIG" JMP I [GOAWAY NONEX, JMS PRINT TEXT "? CAN'T - DEVICE DOESN'T EXIST" JMP I [GOAWAY SYSERR, JMS PRINT TEXT "? I/O ERROR ON SYS:" JMP I [GOAWAY FIX2P, 0 TAD (66 DCA I TB ISZ .-1 ISZ KTR JMP .-4 JMP I FIX2P TB, TP1;TP2;TP3;TP4 KTR, -4 //ROUTINE TO JUMP TO SET HANDLER CODE //IN FIELD ONE DRIVER, 0 CIF CDF 10 JMP I (HSET PAGE SYSINI, 0 //SET SYS INIT COMMAND COMES HERE JMS I [GETC /SEE IF WE HAVE A COMMAND? SNA CLA JMP DEFINI /ASSUME @INIT TAD NO /TEST FOR NOOM FIELD 1 DEVGET, 0 JMS I [GETDEV /CALL GETDEV CIF CDF 10 /SET UP DATA AND INSTRUCTION FIELDS JMP I DEVGET /RETURN *1000 /LOCATIONS 1000-1377 /RESERVED FOR OS8 LINE BUFFER *1400 /******THIS AREA IS USED UNDER PS/8 FOR LINE BUFFER****** /IF USING A PS8 SYSTEM THE "SET SYS OS8, OS78 OR OS278" CANNOT BE USED /DEFINITIONS FOR SYSTEM MODIFICATIONS MONIT0= 0 KMON11= 11 KMON12= 12 ODT60= 60 ODT61= 61 ODT63= 63 SAVE64= 64 MOD0= AUXBUF+371 /IN KEYBOARD MONITOR: OS8-OS78-OS278 I.D. BIT MOD1= AUXBUF+67 / OS8-OS78-OS278 I.D. BIT MOD2= AUXBUF+64 / KT8A INSTRUCTION LXM-->NOP MOD3= AUXBUF+264 / KT8A INSTRUCTION LXM-->CLA MOD4= AUXBUF+301 / KT8A INSTRUCTION LXM-->CLA MOD5= AUXBUF+240 MOD6= AUXBUF+AS MONITOR LOC. TO JUMP TO DCA I (AUXBUF+77 /IN LOCATION 77 OF BOOTSTRAP JMS I [SHNDLR /WRITE BOOTSTRAP 4200 AUXBUF TP2, 0 JMP I [SYSERR TAD NO /WAS THERE A COMMAND? SZA CLA JMP I SYSINI /IF NOT, RETURN ... JMS I [SHNDLR /YES, IT'S NECESSARY TO STORE IT IN THE MONITOR 200 AUXBUF 11 /READ IN BLOCK 11 (KMON 1000-1377) ON THE DEVICE JMP I [SYSERR STA TAD SAVLP /SET UP POINTER TO THE COMMAND DCA XR2 TAD (AUXBUF-1 /SET UP POINTER TO THE BUFFER(=LOC 1000 OF MONITOR) DCA XR3 TAD (-5 /MAXIMUM OF 5 CHARS IN COMMAND DCA SAVKN MOVL, TAD I XR2 /STORE COMMAND DCA I XR3 ISZ SAVKN JMP MOVL JMS I [SHNDLR /WRITE BACK TO THE DISK AREA 4200 AUXBUF 11 JMP I [SYSERR JMP I SYSINI INIMSG, "@;"I;"N;"I;"T;0 /TABLE FOR SET SYS OS8 OS78 OS278 ODT1, MOD5; LXM; LXM; CLA 0 ODT2, MOD6; LXM; LXM; CLA 0 ODT3, MOD7; RXM; RXM; NOP MOD8; LXM; LXM; CLA MOD9; 4573; 4573; CLL RTL MOD10; NOP; NOP; RAL 0 //CALLED TO ACCESS SPACE ROUTINE //FROM FIELD 1 SPACE1, 0 JMS I (SPACE CIF CDF 10 JMP I SPACE1 //CALLED TO ACCESS GETDEV ROUTINE //FRS278 MONIT1, MOD0; HLT; HLT+200; HLT+4 0 KM1, MOD1; HLT; HLT+200; HLT+4 0 KM2, MOD2; LXM; LXM; NOP MOD3; LXM; LXM; CLA 0 SAV1, MOD4; LXM; LXM; CLA 0 PAGE /THIS ROUTINE WILL READ A BLOCK, PATCH SPECIFIC LOCATIONS AND WRITE THE BLOCK /PRIOR TO ENTER THIS ROUTINE "SYSSWT" MUST BE SET FOR THE PROPER SYSTEM / JMS I [MODBLK / BLOCK# / POINTER TO TABLE265 / KT8A INSTRUCTION LXM-->CLA MOD7= AUXBUF+51 / KT8A INSTRUCTION RXM-->NOP MOD8= AUXBUF+54 / KT8A INSTRUCTION LXM-->CLA MOD9= AUXBUF+67 / JMS I [XLODE-->CLL RTL MOD10= AUXBUF+70 / NOP-->RAL LXM= 6200 RXM= 6230 /THE FOLLOWING SYSXXX ROUTINE WERE ADDED OR MODIFIED FOR V4 VERSION SYSOS8, 0 TAD NO SZA CLA JMP ERRNO /CAN'T USE 'NO' MODIFIER IAC DCA NO /FOR OS8 NO=1 IAC JMS SYSMOD JMS I [PRINT TEXT "OS8 SYS" JMP I SYSOS8 SYS78, 0 TAD NO SZA CLA JMP ERRNO DCA NO /FOR OS78 NO=0 CLL CLA IAC RAL /AC=2 JMS SYSMOD JMS I [PRINT TEXT "OS78 SYS" JMP I SYS78 SYS278, 0 TAD NO SZA CLA JMP ERRNO CLA CLL CML RAR /SET AC 4000 DCA NO /FOR OS278 NO=4000 CLA STL IAC RAL /AC=3 JMS SYSMOD JMS I [PRINT TEXT "OS278 SYS" JMP I SYS278 ERRNO, JMS I [PRINT TEXT "? CAN'T USE 'NO' MODIFIER" JMP I [GOAWAY SYSMOD, 0 DCA SYSSWT /SAVE SYSTEM SWITCH; 0=OS8; 1=OS78; 2=OS278 TAD [7771 JMS I [SET200 /SET SYS I.D. BIT IN CORE JMS I [MODBLK /DO THE PATCHING MONIT0 /BLOCK TO BE MODIFIED MONIT1 /POINTER TO TABLE JMS I [MODBLK KMON11 KM1 JMS I [MODBLK KMON12 KM2 JMS I [MODBLK SAVE64 SAV1 JMS I [MODBLK ODT60 ODT1 JMS I [MODBLK ODT61 ODT2 JMS I [MODBLK ODT63 ODT3 STA TAD SYSSWT /GET CURRENT SYS BEING SET SNA CLA IAC DCA NO /RESET 'NO' TO PROPER MEANING / JMS I SYMOD1 /TIME TO AFFECT CCL JMP I SYSMOD /SYMOD1, FIXCCL /TABLE FOR SET SYS OS8 OS78 OAUXBUF BLOK, 0 JMP I [SYSERR TAD TEMP /CONTAINS COMMAND LINE DELIMITER SNA CLA JMS I (ODT /NO DELIMITER CALL ODT JMS I [ONUM /NO DELIMITER IMPLIES MORE LINE INPUT DCA NUM /STORE NUMBER CLA IAC DCA DEVNUM /FAKE OUT - PREVENTS RE-WRITING USED HANDLER TAD FLG SZA CLA /IF FLG IS SET, NO DIGITS INPUT JMP I GENBLK /SO, RETURN JMS I [GETC SZA CLA /SH MODBLK, 0 TAD I MODBLK /BLOCK # ISZ MODBLK DCA MDBLKR /TO BE READ TAD MDBLKR DCA MDBLKW /TO BE WRITTEN BLKRD, JMS I [SHNDLR /READ THE BLOCK 0200 AUXBUF MDBLKR, 0 JMP I [SYSERR TAD I MODBLK /POINTER TO TABLE OF CHANGES ISZ MODBLK DCA MODTBL /SAVE IT MDBLK0, TAD I MODTBL /GET LOCATION TO BE PATCHED SNA JMP BLKWRT /ALL DONE FOR THIS BLOCK DCA MODLOC /SAVE LOCATION TO BE PATCHED TAD MODTBL TAD SYSSWT /1=OS8; 2=OS78; 3=OS278 DCA TBLPTR /SET POINTER TO THE PROPER LOCATION OF THE NEW CONTENT TAD MODTBL TAD [4 /ADJUST POINTER TO NEXT ENTRY DCA MODTBL TAD I TBLPTR /GET NEW CONTENT DCA I MODLOC /PATCH IT JMP MDBLK0 /MORE? BLKWRT, JMS I [SHNDLR /WRITE THE BLOCK BACK 4200 AUXBUF MDBLKW, 0 JMP I [SYSERR JMP I MODBLK MODTBL, 0 MODLOC, 0 TTESC, 0 //ROUTINE TO PROCESS TTY ESC ATTRIBUTE V3D JMS I (OLDTST /TEST FOR KL8E TAD NO SZA CLA TAD (1377-NOP TAD (NOP DCA I (HNDLBF+XMIT8 JMP I TTESC XMIT8= 214 //LOCATION IN VA0 SERIAL HANDLERS GENBLK, 0 //HANDLES INPUT RELATING TO ANY DEVICE JMS I (GENCMN /GO GET THE COMMAND TAD NUM2 DCA BLOK /GET BLOCK NUMBER TAD (LOC JMS I [KEYSRCH /SEARCH FOR "LOC" KEY WORD JMP I [SYNTAX JMS I (GENCMN /GET LOCATION TAD [-400 /LOC NUMBER MUST BE LESS THAN 400 CLL TAD NUM2 SZL CLA JMP I [NUMBIG /IF NOT, NUMBER TOO BIG TAD NUM2 TAD PAUXBUF /BUFFER START DCA NUM2 /NOW POINTS TO LOC IN MEMORY JMS I ENTRY /READ BLOCK FROM SUPPLIED DEVICE 200 PAUXBUF,OULDN'T BE ANY OTHER CHARS AFTER THAT JMP I [SYNTAX TAD NUM /VALUE INPUT DCA I NUM2 /SET NEW VALUE TAD BLOK DCA BLOK2 /SET UP BLOCK FOR WRITE JMS I ENTRY /WRITE TWO PAGES 4200 AUXBUF TEMP2, BLOK2, 0 JMP I [SYSERR JMP I GENBLK BADINP, JMS I [PRINT TEXT "? BAD INPUT" JMP I [GOAWAY PAGE *2000 /ORIGIN PAST OS/8 LINE BUFFER AT 1000. /SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE /PS/8 USERS WISH TO PATCH THIS PROGRAM /SCAN PAST EXTRA LETTERS OR DIGITS SCAN, 0 JMS I [ALPHA /ISOLATE NEXT CHARACTER JMP NOPE /RETURNS HERE IF LETTER OR DIGIT CLA /OTHERWISE MOVE PAST IT JMP SCAN+1 NOPE, CLA /MOVE POINTER BACK TO LAST NON-DIGIT, NON LETTER JMS I [BACKC JMP I SCAN /SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1 SPACE, 0 DCA FLAG /SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND DCA SPKNT /INITIALIZE SPACE COUNTER SKP /JUMP INTO LOOP GOTSP, ISZ SPKNT JMS I [GETC /GET NEXT CHAR TAD [-240 SNA CLA /IS IT A SPACE? JMP GOTSP /YES, COUNT IT JMS I [BACKC /NO, PUT IT BACK ISZ FLAG /CHECK FLAG SKP /USER DIDN'T SPECIFY FLAG JMP I SPACE /-0 MEANT DON'T CHECK IF FOUND SPACE TAD SPKNT /HOW MANY SPACES DID WE FIND? SZA CLA JMP I SPACE /SOME. OK JMP I [SYNTAX /NONE. TSK. TSK. BRANCH, 0 //ROUTINE TO IDENTIFY INFO IN AC DCA T /ENTER WITH STRING OF POSSIBLE INFO BR2, TAD I BRANCH ISZ BRANCH SNA /ZERO IS THE DELIMITER OF INFO JMP NOTFND /NOT FOUND TAD T SNA CLA /STRING IS NEGATIVE OF INFO JMP FOUND /SO IF AC IS NON-ZERO WE'VE FOUND IT ISZ BRANCH /OTHERWISE LOOP JMP BR2 FOUND, TAD I BRANCH DCA T JMP I T /FOUND ITEM IN COL 1, JUMP TO ADDRESS IN COL 2 NOTFND, TAD T JMP I BRANCH /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT BADKBM, CDF 0 JMS I [PRINT TEXT "? OLD VERSION OF KBM" JMP I [GOAWAY LLS= 6666 DBTD= 6574 LSF= 6661 DBST= 6570 LP78, 0 TAD (CMA-NOP JMS LP8A JMP I LP78 LP8A, 0 TAD (NOP /AC MAY BE NON-0 DCA LPKOD JMS I (LPTST1 TAD VNO TAD (-2 SNA CLA JMP I (OLDERR JMS I [SRCH 0;200;7700 JMP I (OLDERR TAD (3 DCA TEMP TAD I TEMP AND [7000 TAD [-7000 SZA CLA /NOP OR CMA JMP I (OLDERR TAD LPKOD DCA I TEMP ISZ TEMP TAD I TEMP AND [7000 TAD (-6000 SZA CLA JMP I (OLDERR TAD LPKOD AND [70 SZA CLA TAD (DBTD-LLS TAD (LLS DCA I TEMP ISZ TEMP TAD LPKOD DCA I TEMP JMS I [SRCH 100;100;6203 JMP I (OLDERR TAD (2 DCA TEMP TAD LPKOD AND [70 SZA CLA TAD (DBST-LSF TAD (LSF DCA I TEMP JMP I LP8A LPKOD, 0 //ROUTINE TO EXECUTE THE SYSTEM DEVICE CHANGER //SET SYS DEVICE //THIS CODE RUNS IN FIELD THREE SYSNEW, 0 CIF CDF 30 JMP I (CHGSYS /FIELD THREE ROUTINE PAGE /READ A LINE INTO OS/8 LINE BUFFER READ, 0 DCA CTOFLG /ALLOW ECHOING RD1, TAD [LINBUF DCA LINPTR DCA ESCBIT GT, JMS I [GET LOOK, JMS I [BRANCH -377;RUBOUT -217;GT /^O -203;CTRLC /^C -212;LF /LINE FEED -215;CR /CARRIAGE RETURN / -375;ESCAPE /ALTMODE / -376;ESCAPE /ALTMODE (2ND FLAVOR) -233;ESCAPE /ESCAPE -225;CTRLU /^U -200;GT /IGNORE NULLS -223;GT /IGNORE ^S 0 DCA TEMP /NONE OF THESE TAD LINPTR TAD (-LINBUF-377 SNA CLA /AT END OF LINE BUFFER? JMP GT /YES, DON'T ACCEPT CHAR TAD TEMP /NO, RETRIEVE CHAR JMS I [TYPE /ECHO IT TAD TEMP /INSERT IN BUFFER DCA I LINPTR ISZ LINPTR /BUMP POINTER JMP GT /NEXT CTRLU, TAD ["^ JMS I [TYPE TAD ("U JMS I [TYPE /ECHO "^U" JMS I [CRLF RDA, TAD ("# JMS I [TYPE JMP RD1 BS=10 RUBOUT, TAD LINPTR TAD [-LINBUF SNA JMP BOL /AT BEGIN OF LINE TAD [LINBUF-1 DCA LINPTR /MOVE POINTER BACK ONE TAD SCOP SZA CLA RUB3X, TAD (BS-"\ TAD ["\ JMS I [TYPE /ECHO "\" RUB3, TAD SCOP SINPTR TAD [-LINBUF SNA JMP BOL2 TAD [LINBUF-1 DCA LINPTR TAD SCOP SNA CLA JMP RUB3 JMP RUB3X BOL2, TAD SCOP SZA CLA JMP BOL TAD ["\ JMS I [TYPE BOL, JMS I [CRLF JMP RDA ESCAPE, TAD ["$ /ECHO ESCAPE AS DOLLAR SIGN JMS I [TYPE ISZ ESCBIT /NOTE ESCAPE CR, DCA I LINPTR /INSERT 0 AT END JMS I [CRLF JMP I READ /RETURN, WE GOT LINE LF, DCA I LINPTR /TEMPORARILY INSERT A 0 SENTINEL TAD [LINBUF-1 DCA XR1 JMS I [CRLF TAD ["# JMS I [TYPE LFLP, TAD I XR1 SNA JMP I [GT /FINISHED, GET SOME MORE CHARS JMS I [TYPE /ECHO CURRENT CHARS JMP LFLP PAGE /GET A DECIMAL NUMBER, RETURN IT IN AC NUMBER, 0 DCA NUM CLA IAC DCA FLG JMS I [BACKC NM1, JMS I [GETC JMS I [DIGIT JMP EON TAD (-"0 /CONVERT TO DIGIT DCA T4 DCA FLG /NOTE PASSAGE OF A DIGIT TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL TAD NUM CLL RAL TAD T4 SZL JMP I [NUMBIG DCA NUM JMP NM1 EON, CLA JMS I [BACKC TAD FLG SZA DCA NUM /IF NO DIGITS, RETURN A 1 TAD NUM JMP I NUMBER / GETDEV /PARSES OFF A DEVICE NAME (1-4 CHARS) /DETERMINES IF IT EXISTS /LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE /SETS ENTRY POINT ADDRESS AT 'ENTRY' /SETS DEVICE NUMBER AT 'DEVNUM' /SETS DEVICE CONTROL WORD AT 'DCW' /SETS 'DEVTYP' GETDEV, 0 JMS I [GETTWO DCA WD1 JMS I [GETTWO DCA WD2 TAD WD1 TAD WD2 DCA WD1 /COMBINE TWO WORDS INTO 1 (IN WD1) TAD WD2 SNA CLA JMP INQ TAD WD1 /OS/8 KLUDGE FOR UNIQUENESS CNA CLA JMP .+3 TAD [40 SKP TAD I LINPTR JMS I [TYPE /ECHO RUBBED-OUT CHARACTER TAD SCOP SNA CLA JMP GT2 TAD [BS JMS I [TYPE GT2, JMS I [GET JMS I [BRANCH -377;RUB2 -216;GT2 /IGNORE ^O -203;CTRLC /^C 0 DCA TEMP /A NEW CHAR TAD SCOP SZA CLA JMP .+3 TAD ["\ JMS I [TYPE /ENCLOSE RUBBED-OUT CHARS IN \'S TAD TEMP JMP LOOK RUB2, TAD LNDLBF+1 /ALLOW TWO PAGE HANDLER IN 7200 DCA DW3 DCA DW2 CIF 10 JMS I USR 1 /FETCH DW1, 0 /DEVICE NAME DW2, 0 /GETS DEVICE NUMBER DW3, 0 /GETS ENTRY POINT JMP I [NONEX /DOESN'T EXIST TAD DW2 DCA DEVNUM TAD DW3 DCA ENTRY JMP GETYP INCORE, DCA ENTRY TAD WD2 DCA DEVNUM GETYP, TAD DEVNUM TAD (7757 DCA DCWPTR /POINT INTO DEVICE CONTROL WORD TABLE CDF 10 TAD I DCWPTR /GET DCW DCA DCW TAD DCW RTR RAR AND [77 DCA DEVTYP STA TAD I (37 /GET ADDRESS OF DHIT DCA DHIT TAD DHIT TAD DEVNUM DCA DHI TAD I DHI CDF 0 DCA DHI TAD DHI RTL RTL RTL AND (17 SZA TAD (15 DCA DBLK JMP I GETDEV DELAYY, 0 TAD (-10 DCA OUTER ISZ ZER JMP .-1 ISZ OUTER JMP .-3 JMP I DELAYY ZER, 0 OUTER, -10 PAGE OLDTST, 0 /V3D JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;OLDERR -5;OLDERR -6;OLDERR /OS78 V3.0-SET 6A -260;TSTOK /TTY VER FOR OS278 IS B0 0 JMP I [NEWERR TSTOK, JMP I OLDTST TTPAUS, 0 JMS OLDTST DCA NUM JMS I [GETC SNA CLA JMP NOPA /NO PAUSE VALUE TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO PAUSE N JMS I [NUMBER SNA JMP BADPAUS DCA NUM TAD NUM /SCALE CORRECTLY CLL RAL TAD NUM CLL RTL DCA NUM TAD FLG SZA CLA JMP BADPAUS /NO DIGITS TAD NUM AND [6000 SZA CLA JMP BADPAUS TAD NUM CIA DCA I (HNDLBF+ROUTER NOPA, JMS I (BASLUK JMP I TTPAUS TAD NUM CIA DCA I (AUXBUF+1 JMS I (BASWRI JMP I TTPAUS ROUTER= 236 //LL RAL STL RAR /FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO DCA WD1 INQ, DCA WD2 JMS I (HANTES /GO TEST FOR SET HANDLER COMMAND CIF 10 JMS I USR 12 /INQUIRE WD1, 0 /DEVICE NAME WD2, 0 /GETS DEVICE NUMBER WD3, 0 /GETS ENTRY POINT JMP I [NONEX /DEVICE DOESN'T EXIST TAD WD3 SZA /IS HANDLER ALREADY IN CORE? JMP INCORE /YES TAD WD1 DCA DW1 TAD (HCL DCA ARG2 /CCL LOCATIONS 12400-12777 JMS I (SHNDLR 200 /READ IN 2 PAGES AUXBUF ARG2, 0 JMP I [SYSERR TAD ARG2 DCA ARG3 TAD I (AUXBUF /GET PTR TO DIRECT COL WORD SPA JMP OLDCCL TAD (AUXBUF-2400 /RELOCATE DCA ARG2 TAD NUM DCA I ARG2 JMS I (SHNDLR 4200 AUXBUF ARG3, 0 JMP I [SYSERR JMP I TTCOL BADCOL, JMS I [PRINT TEXT "? BAD COLUMN COUNT" JMP I [GOAWAY OLDCCL, CLA JMS I [PRINT TEXT "? WRONG VERSION OF CCL" JMP I [GOAWAY TYPE, 0 DCA TYPEM JMS I [DELAYY DCA .-1 /DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN TAD CTOFLG SZA CLA JMP I TYPE /NO ECHOING TAD TYPEM TLS TSF JMP .-1 CLA JMP I TYPE TYPEM, 0 CCLNAM, FILENAME CCL.SV CCLNF, JMS I [PRINT TEXT "? CCL.SV NOT FOUND" JMP I [GOAWAY CCLBLK=67 /NO! NO! NO! NO! NO! ... NO MORE FOR OS278 //PATCH THE CCL COMMAND TABLE TO ALLOW "BACKSPACE" IF OS/8; //OR "TERMINATE" IF OS/78 OR OS/278. IF "NO" IS ZERO, MEANS //78 OR 278. /FIXCCL, 0 / JMS I [SHNDLR //READ IN CCL COMMAND TABLE / 200 / AUXBUF / CCLBLK / JMP I [SYSERR / TAD I (AUXBUF / TAD (-VERSION //V4 IS VERSION "A0" / SZA LOCATION IN VA0 SERIAL HANDLERS BADPAUS,JMS I [PRINT TEXT "? BAD VALUE FOR PAUSE DURATION" JMP I [GOAWAY ONUM, 0 DCA NUM CLA IAC DCA FLG ONM1, JMS I [GETC TAD (-"0-10 /CONVERT TO DIGIT CLL TAD [10 SNL JMP OEON DCA T4 DCA FLG TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL RAL TAD T4 DCA NUM JMP ONM1 OEON, CLA JMS I [BACKC TAD NUM JMP I ONUM PAGE TTCOL, 0 TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO COL JMS I [GETC SNA CLA JMP BADCOL /NO COL SPECIFIED JMS I [NUMBER SNA JMP BADCOL DCA NUM TAD FLG SZA CLA JMP I [SYNTAX TAD NUM AND [7770 SZA CLA JMP BADCOL TAD (CCLNAM /READ IN CCL.SV JMS I [LOOKUP JMP CCLNF /CCL NOT FOUND TAD (2 /WANT 2ND BLOCK IN CF+315; 0210; 1073 AUXBUF+316; 1315; 2020 AUXBUF+320; 1326; 7240 AUXBUF+321; 4423; 3020 AUXBUF+324; 1315; 1440 0 CDTBL, AUXBUF+135; 0210; 1102 AUXBUF+136; 1335; 2024 AUXBUF+140; 1346; 7240 AUXBUF+141; 4466; 3024 AUXBUF+144; 1335; 1420 0 CCLTBL, AUXBUF+4; 0024; 0002 AUXBUF+5; 0522; 0143 AUXBUF+6; 5551; 5363 AUXBUF+7; 5600; 6000 0 SCPTBL, HNDLBF+123; 1233; 1326 HNDLBF+125; 1336; 5331 HNDLBF+126; 4636; 0377 0 AROW, "A;"R;"R;"O;"W;0 PAGE / SCOPE BIT ON DISK: / BLOCK 0 REL 126 BIT 4 / SCOPE BIT IN MEMORY: / LOC 17726 BIT 4 TTSCOP, 0 JMS I (OLDTST TAD (SCPTBL JMS FIXUP JMS I (SHNDLR 200 AUXBUF /READ 2 PAGES INTO AUXILIARY BUFFER 11 JMP I [SYSERR TAD (KBMTBL JMS FIXUP JMS I (SHNDLR 4200 AUXBUF 11 JMP I [SYSERR JMS I (SHNDLR 200 AUXBUF /READ BLOCK 53 (CD) 53 JMP I [SYSERR TAD (CDTBL JMS FIXUP JMS I (SHNDLR 4200 AUXBUF 53 JMP I [SYSERR TAD NO /SET SCOPE BIT SNA CLA IAC DCA SCOP CDF 10 TAD (SCPBIT JMS SET200 CDF 0 JMS I (SHNDLR 200 AUXBUF TP3, 0 //GETS BLOCK 66 FROM FIX2P IF 2-PAGE SYSTEM HANDLER. JMP ICLA / JMP I (OLDCCL //WRONG VERSION / TAD (CCLTBL / JMS I (FIXUP //WITH POINTER TO PATCHES TO USE. / JMS I [SHNDLR / 4200 / AUXBUF / CCLBLK //WHEN DONE, WRITE IT BACK OUT. / JMP I [SYSERR / JMP I FIXCCL PAGE ESC, "E;"S;"C;4000+"A;4000+"P;4000+"E;0 TTHGHT, 0 JMS I (OLDTST JMS I [GETC SNA CLA JMP I (BADHIT /NO HEIGHT TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO HEIGHT JMS I [NUMBER SNA JMP I (BADHIT DCA NUM TAD FLG SZA CLA JMP I (BADHIT /NO DIGITS TAD NUM CIA DCA I (HNDLBF+DEPTH TAD I (HNDLBF+DEPTH DCA I (HNDLBF+RDEPTH JMS I (BASLUK JMP I TTHGHT TAD NUM CIA DCA I (AUXBUF JMS I (BASWRI JMP I TTHGHT DEPTH= 241 //LOCATION IN VA0 SERIAL HANDLERS RDEPTH= 242 / LOC YES NO KBMTBL, AUXBUYSERR TAD BASBLK DCA BASB2 TAD I (AUXBUF+2 SNA CLA JMP I BASLUK JMP I (OLDBAS BASWRI, 0 JMS I [SHNDLR 4200 AUXBUF BASB2, 0 JMP I [SYSERR JMP I BASWRI GETIOT, 0 ISZ RR TAD RR TAD (-7600 SNA CLA JMP I GETIOT TAD I RR AND [7000 TAD [-6000 SZA CLA JMP GETIOT+1 TAD I RR RTR RAR AND [77 TAD (-20 CLL RAR SNA JMP GETIOT+1 RAL TAD (20 ISZ GETIOT JMP I GETIOT NOTIMPL,CLA CLL JMS I [PRINT TEXT "? COMMAND NOT IMPLEMENTED" JMP I [GOAWAY SET, JMS I [SPACE DCA VNO /V3C JMS I [GETDEV JMS I [GETC JMS I [BRANCH -":;COLN -" ;COLN -"-;HYPH 0 JMP I [SYNTAX /NO : OR BLANK AFTER NAME BADHIT, JMS I [PRINT TEXT "? BAD HEIGHT SPECIFIED" JMP I [GOAWAY PAGE COLN, STA [SYSERR TAD (AUXBUF+126 JMS SET200 JMS I (SHNDLR 4200 AUXBUF TP4, 0 JMP I [SYSERR JMP I TTSCOP SET200, 0 //DF IS SPECIALLY SET DCA HLTPTR TAD I HLTPTR AND (7573 //V4 I.D. BIT FOR OS8=7402; OS78=7602; OS278=7406 DCA TEMP TAD TEMP TAD (-HLT SZA CLA JMP I (BADKBM TAD NO /SEE IF 278 SMA CLA JMP SETOS8 /NO, OS8 OR OS78 TAD [4 /WAS 278, SET THE PROPER BIT JMP SET278 SETOS8, TAD NO SPA SNA CLA TAD [200 SET278, TAD TEMP DCA I HLTPTR JMP I SET200 HLTPTR, 0 //ROUTINE TO PATCH LOCATIONS. BLOCK OF MODULE TO BE PATCHED HAS //BEEN READ INTO AUXBUF. ENTER WITH POINTER TO TABLE TO USE. //TABLE IS ARRANGED: RELATIVE LOCATION; "YES" VALUE; "NO" VALUE. FIXUP, 0 DCA FIXPTR FIXLUP, TAD I FIXPTR SNA JMP I FIXUP DCA FIXLOC ISZ FIXPTR TAD NO //"NO"=1; "YES"=0. SZA CLA ISZ FIXPTR TAD I FIXPTR DCA I FIXLOC TAD NO SNA CLA ISZ FIXPTR ISZ FIXPTR JMP FIXLUP FIXPTR, 0 FIXLOC, 0 PAGE BASNAM, FILENAME BASIC.SV BASLUK, 0 TAD (BASNAM JMS I (LOOKUP JMP I BASLUK ISZ BASLUK TAD (7 DCA BASBLK JMS I [SHNDLR 200 AUXBUF BASBLK, 0 JMP I [SMS I [ALPHA JMP I [BADV DCA VNO TAD VNO SNA JMP I [BADV AND [17 DCA VNO JMS I [SPACE /IGNORE SPACE JMP COLN2 NOKEY, TAD AUXFLG SNA CLA JMP NOO JMS I [PRINT TEXT "? UNKNOWN ATTRIBUTE FOR DEVICE " *.-1 NAM1, 0 NAM2, 0 0 JMP I [GOAWAY SAWNO, 0 ISZ NO STA JMS I [SPACE TAD LINPTR DCA SAVPTR JMP I SAWNO NOTYP, CLA ISZ AUXFLG TAD (AUX /SEARCH AUXILIARY TABLE JMP INTO NOF, ISZ PTR TAD SAVPTR DCA LINPTR JMP SCNLUP AUXFLG, 0 NOO, ISZ AUXFLG TAD (AUX DCA PTR JMP SCNLUP PAGE HREAD, 0 TAD DBLK SNA JMP RESERR DCA BLOCK JMS I [SHNDLR 200 /READ 2 PAGES L7200, HNDLBF /INTO 7200-7577 BLOCK, 0 /FROM THIS BLOCK ON SYSTEM DEVICE JMP I [SYSERR TAD DHI AND [177 /GET JMS I [SPACE /IGNORE OPTIONAL SPACES JMS I [GETC SNA JMP I [SYNTAX TAD (-"- SNA CLA JMP HYPH JMS I [BACKC STA TAD DEVNUM SNA CLA JMP SYSDV COLN2, DCA NAM1 DCA NAM2 TAD (MAIN-1 /LOOK FOR DEVICE TYPE IN MAIN TABLE MNLUP, DCA XR1 TAD I XR1 SMA SZA JMP NOTYP /NOT FOUND TAD DEVTYP SNA CLA JMP FNDTYP TAD XR1 TAD (3 /POINT TO NEXT ENTRY JMP MNLUP FNDTYP, TAD I XR1 /GET GENERIC NAME DCA NAM1 TAD I XR1 DCA NAM2 DCA AUXFLG TAD I XR1 /GET PTR TO DEVICE TABLE INTO, DCA PTR DCA NO TAD LINPTR DCA SAVPTR /SAVE SCAN POINTER JMS I [GETTWO TAD (-1617 SNA CLA /ARE NEXT TWO CHARS 'NO'? JMS SAWNO /YES TAD SAVPTR /NO DCA LINPTR /RESTORE PTR SCNLUP, TAD I PTR SNA /GET NEXT KEYWORD POINTER JMP NOKEY ISZ PTR /POINT TO PTR TO ROUTINE JMS I [KEYSRCH JMP NOF /NOT FOUND TAD I PTR /FOUND DCA PTR /GET PTR TO ROUTINE STA TAD DEVNUM SZA CLA JMS I (HREAD /READ HANDLER JMS I PTR /CALL ROUTINE STA TAD DEVNUM SZA CLA JMS I (HWRITE /REWRITE HANDLER JMP I (DONE SYSDV, ISZ AUXFLG TAD (SYSAUX JMP INTO /V3D ALLOW SET SYS: HYPH, J4000+"8;4000+"E;0 CODE, "C;"O;"D;"E;0 ALT, "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0 ECHO, "E;"C;"H;"O;0 PAYGE, "P;"A;"G;"E;0 TAB, "T;"A;"B;0 LOC, "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0 FILES, "F;"I;"L;"E;4000+"S;0 READO, "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0 VERS, "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0 PARITY, "P;"A;"R;4000+"I;4000+"T;4000+"Y;0 RELATIVE ENTRY PT TAD L7200 DCA ENTRY TAD VNO SZA CLA /V3C JMP I HREAD /VNO ALREADY SET BY - COMMAND TAD ENTRY VLOOP, DCA VNOPTR TAD I VNOPTR IFZERO VOS278 < CLL TAD [-33 SZL CLA JMP BACKV TAD I VNOPTR SNA JMP OLDERR > //V4: JUST COLLECT THE VERSION NUMBER--PROCESS IT LATER. DCA VNO JMP I HREAD BACKV, STA TAD VNOPTR JMP VLOOP RESERR, JMS I [PRINT TEXT "? CAN'T - DEVICE IS RESIDENT" JMP I [GOAWAY OLDERR, CLA JMS I [PRINT TEXT "? CAN'T - OBSOLETE HANDLER" JMP I [GOAWAY NOTV4, CLA CLL JMS I [PRINT TEXT "? COMMAND NOT ALLOWED IN OS278" JMP I [GOAWAY HWRITE, 0 TAD BLOCK DCA BLKTWO JMS I [SHNDLR 4200 HNDLBF BLKTWO, 0 JMP I [SYSERR JMP I HWRITE NEWERR, CLA JMS I [PRINT TEXT "? CAN'T - UNKNOWN VERSION OF THIS HANDLER" JMP I [GOAWAY MAIN, -0; DEVICE TTY; TTYTBL -3; DEVICE CDR; CDRTBL -4; DEVICE LPT; LPTTBL -20; DEVICE MTA; MTATBL -36; DEVICE SERL; SERTBL 1 /TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER LPTTBL, WIDTH; LPWDTH LC; LPLC LV8E; LPLV LA8A; LP8A LA78; LP78 BAUD; STBAUD 0 MTATBL, PARITY; MTAPAR DENSITY;MTADEN FILES; MTAFIL 0 AUX, LOC; GENLOC FILES; GENFIL READO; GENREA VERS; GENVER DVCO; GENDVC /V3D BLK; GENBLK /V3D 0 SYSAUX, INITSY; SYSINI / - SET SYS [NO] INIT OS8; SYSOS8 / - SET SYS OS8 OS78; SYS78 / - SET SYS OS78 OS278; SYS278 /VB0- SET SYS OS278 DEVIC; SYSNEW /V4 - SET SYS DEVICE 0 WIDTH, "W;"I;"D;"T;"H;0 LC, "L;"C;0 LV8E, "L;"V; 0 CDF 10 TAD I DCWPTR CLL RAL CLL RAL /ZERO LINK TAD NO RAR CML RAR DCA I DCWPTR CDF 0 JMP I GENFIL BADV, CLA JMS I [PRINT TEXT "? BAD VERSION LETTER" JMP I [GOAWAY CRLF, 0 TAD [215 JMS I (TYPE TAD [212 JMS I (TYPE JMP I CRLF PAGE LPLV, 0 JMS I (LPTST1 TAD NO CLL RTL RTL TAD (4 DCA I (7201 JMP I LPLV LPLC, 0 JMS IDENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0 FILL, "F;"I;"L;"L;0 FLAGG, "F;"L;"A;"G;0 CTRL, "C;"T;"R;"L;0 EVEN, "E;4000+"V;4000+"E;4000+"N;0 ODD, "O;4000+"D;4000+"D;0 DELAY, "D;"E;"L;"A;"Y;0 PAUS, "P;"A;"U;"S;"E;0 HGHT, "H;"E;"I;"G;"H;"T;0 SCOPP, "S;"C;"O;"P;"E;0 DVCO, "D;"V;"C;4000+"O;4000+"D;4000+"E;0 COL, "C;"O;"L;4000+"U;4000+"M;4000+"N;0 LA8A, "L;"A;"8;"A;0 LA78, "L;"A;"7;"8;0 INITSY, "I;"N;"I;"T;0 OS8, "O;"S;"8;0 OS78, "O;"S;"7;"8;0 OS278, "O;"S;"2;"7;"8;0 //VB0 BAUD, "B;"A;"U;"D;0 DEVIC, "D;"E;"V;4000+"I;4000+"C;4000+"E;0 HELP, "H;"E;"L;"P;0 PAGE LPWDTH, 0 JMS I (GETWID TSTCAL, JMS LPTST1 TAD NUM CMA DCA I (HNDLBF JMP I LPWDTH LPTST1, 0 TAD I (7201 /CHECK FOR ANNALEX PRINTER SPA CLA JMP I (L645 TAD (TSTCAL /WAS CALL FOR LPT WIDTH CMA TAD LPTST1 SNA CLA JMP TESTOK /YES, SKIP LPTS CHECK TAD I (7203 /NO TAD (-2423 /CHECK FOR SERIAL LPT SNA CLA JMP I (SERLPT TESTOK, TAD VNO JMS I [BRANCH -1;OLDERR -2;LPTOK -3;LPTOK -261;LPTOK /VERSION OF LPTS HANDLER ZBLOCK 2 0 JMP I [NEWERR LPTOK, JMP I LPTST1 ASRTST, 0 TAD DHI SPA CLA JMP I ASRTST JMS I [PRINT TEXT "? CAN'T - NOT KL8E HANDLER" JMP I [GOAWAY GENVER, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ALPHA JMP BADV DCA NUM TAD NUM AND (40 SZA CLA JMP BADV TAD NUM AND (37 DCA I VNOPTR JMP I GENVER GENREA, 0 CDF 10 TAD I DCWPTR CLL RTL CLL RAL TAD NO RAR CML RAR RAR DCA I DCWPTR CDF 0 JMP I GENREA GENFIL, (LPTST1 TAD NO CLL RTL RTL RAL CIA DCA I (7202 JMP I LPLC TTECHO, 0 JMS I [TTST1 TAD NO SZA CLA TAD (NOECHO-ECHOST TAD (ECHOST DCA I (HNDLBF+STECHO JMP I TTECHO STECHO= 0066 //LOCATION IN VA0 SERIAL HANDLERS NOECHO= CLA ECHOST= 4636 TTPAGE, 0 JMS I (OLDTST TAD NO SNA CLA JMP TTPGE1 //PAUSE TAD I (HNDLBF+STPAGE //NO PAUSE DCA I (HNDLBF+STPAGE+1 JMP I TTPAGE TTPGE1, TAD (SPAGY DCA I (HNDLBF+STPAGE+1 JMP I TTPAGE STPAGE= 0224 //LOCATION IN VA0 SERIAL HANDLERS SPAGY= 2254 BADWID, JMS I [PRINT TEXT "? ILLEGAL WIDTH" JMP I [GOAWAY BLK, "B;"L;"O;"C;"K;0 DONE, JMS I [CRLF JMS I [PRINT TEXT "DONE" JMP I [GOAWAY L645, JMS I [PRINT TEXT "? CAN'T AFFECT ANNALEX LPT" JMP I [GOAWAY SERLPT, JMS I [PRINT TEXT "? CAN'T AFFECT SERIAL LPT" JMP I [GOAWAY PAGE REASEM, JMS I [PRINT TEXT "? CAN'T - MUST REASSEMBLE KL8E SOURCE" JMP I [GOAWAY /ENTER WITH PTR TO POSSIBLE KEYWORD IN AC KEYSRCH,0 DCA KPTR KL, TAD I KPTR ISZ KPTR SNA JMP GOTKEY CIA DCA TEMP JMS I [ALPHA /IS IT ALPHANUMERIC? JMP EOK /NO TAD TEMP /COMPARE CLL RAL /LOW ORDER 11 BITS SNA CLA JMP KL /MATCHED, KEEP LOOKING JMP I KEYSRCH /DIDN'T MATCH EOK, JMS I [BACKC TAD TEMP CIA /INPUT STREAM RAN OUT OR HIT SPACE SPA CLA JMP GOTKEY /SPACE OR EOL MATCH FLAGGED CHARACTER JMP I KEYSRCH KPTR, 0 GOTKEY, JMS I [SCAN STA /SKIP EXTRA STUFF JMS I [SPACE ISZ KEYSRCH /TAKE GOOD RETURN 2 JMP I KEYSRCH /SET BAUD RATE FOR THE SERIAL PRINTER PORT OF THE OS278 /INPUT=BAUD RATE INPUT=BAUD RATE / 0 = 50 8 = 1800 / 1 = 75 9 = 2000 / 2 = 110 10 = 2400 / 3 = 134.5 11 = 3600 / 4 = 150 12 = 4800 / 5 = 300 13 = 7200 / 6 = 600 14 = 9600 / 7 = 1200 15 = 19200 STBAUD, 0 JMS I [GETWID /USING GETWID ROUTINE, SAVES SOME DOUBLE CODING TAD NUM AND [7760 /CAN'T BE GREATER THAN 17 OCTAL SZA CLA JMP I [NUMBIG TAD I (7203 /MAKE SURE IT'S A SERIAL HANDLER TAD (-2423 SZA CLA JMP I [NOTSER /SORRY, WRONG ONE TAD NUM DCA I (7204 JMP I STBAUD TTYTBL, CODE;NOTV4 //NOT AVAILABLE IN VERSION 4 ALT;NOTV4 LC;NOTV4 TAB;NOTV4 FILL;NOTV4 FLAGG;NOTV4 CTRL;NOTV4 DELAY;NOTV4 AROW;NOTV4 SCOPP;TTSCOP //FOR TTY ONLY COL;TTCOL SERTBL, WIDTH;TTWIDTH //SERIAL HANDLERS AND TTY COMMON LIST ECHO;TTECHO PAYGE;TTPAGE PAUS;TTPAUS HGHT;TTHGHT ESC;TTESC 0 PAGE TTWIDTH,0 JMS GETWID JMS TTST1 TAD NUM AND [7 SZA CLA JMP I [BADWID TAD NUM TAD [-200 SNA CLA JMP I [BADWID TAD NUM CIA DCA I (HNDLBF+SWIDTH TAD I (HNDLBF+SWIDTH DCA I (HNDLBF+RWIDTH JMP I TTWIDTH SWIDTH= 0237 //LOCATION IN VA0 SERIAL HANDLERS RWIDTH= 0240 GETWID, 0 TAD NO SZA CLA JMP I [SYNTAX JMS OPTEQ JMS I [NUMBER SNA JMP I (BADWID DCA NUM TAD FLG SZA CLA JMP I [SYNTAX /NO DIGITS TAD NUM AND [7400 SZA CLA JMP I [NUMBIG JMP I GETWID TTST1, 0 JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;OLDERR /V3C -5;OLDERR /V3D -6;OLDERR /OS78 V3.0-SET 6A -260;TTOK /TTY VER FOR OS278 IS B0 0 JMP I [NEWERR TTOK, JMP I TTST1 OPTEQ, 0 JMS I [GETC TAD (-"= SZA CLA JMP I OPTEQ STA /V3D JMS I [SPACE JMS I [GETC /ADVANCE OVER = CLA JMP I OPTEQ PAGE OPRIN, 0 DCA N3 TAD (-4 DCA OKNT OPLP, TAD N3 RTL RTL AND [7 TAD [60 JMS I [TYPE TAD N3 RTL RAL DCA N3 ISZ OKNT JMP OPLP JMP I OPRIN OKNT, 0 N3, 0 GTEM, 0 SRCH, 0 TAD I SRCH ISZ SRCH TAD (HNDLBF-1 DCA XR1 /SET UP POINTER TO LOCATION TO START SEARCHING TAD I SRCH ISZ SRCH CIA DCA CNT /SET UP COUNTER TAD I SRCH CIA DCA TEMP /VALUE TO SEARCH FOR JMS GENCMN TAD DHI SPA CLA TAD [-200 TAD [-200 CLL TAD NUM2 SZL CLA JMP I [NUMBIG TAD NUM2 TAD (HNDLBF /BASE OF HANDLER DCA NUM2 TAD TEMP SNA CLA JMS ODT GETNEW, JMS I [ONUM DCA NUM TAD FLG SZA CLA JMP I GENLOC JMS I [GETC SZA CLA JMP I [SYNTAX TAD NUM DCA I NUM2 JMP I GENLOC ODT, 0 TAD I NUM2 JMS OPRIN TAD ("/ JMS I [TYPE TAD I [READ DCA GTEM /SAVE CHAIN STATUS JMS I [READ TAD [LINBUF DCA LINPTR TAD GTEM DCA I [READ JMP I ODT OLDBAS, JMS I [PRINT TEXT "? OLD BASIC" JMP I [GOAWAY SVERSION,JMS I (PRINT TEXT "VERSION ??" //OS78 V4 *.-2 VERSION *.+1 JMP I [GOAWAY PAGE MTAPAR, 0 TAD NO SZA CLA JMP I [SYNTAX JMS MTST1 TAD LINPTR DCA SAVPTR TAD (EVEN JMS I [KEYSRCH SKP JMP SETE TAD SAVPTR DCA LINPTR TAD (ODD JMS I [KEYSRCH JMP I [SYNTAX TAD (400 SETE, TAD (2 DCA I (HNDLBF JMP I MTAPAR MTST1, 0 TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;MTOK -5;MTOK -6;MTOK ZBLOCK 4 0 JMP I [NEWERR MTOK, JMP I MTST1 MTADEN, 0 JMS MTST1 TAD NO SZA CLA JMP I [SYNTAX JMP I [NOTIMP JMP I MTADEN MTAFIL, 0 JMS MTST1 TAD NO CIA /V3D IAC /V3D DCA I (7201 JMP I MTAFIL BADCOD, JMS I [PRINT TEXT "? UNKNOWN CARD CODE" JMP I [GOAWAY /SUPPOSED TO WORK ON ALL VERSIONS CDCODE, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I (OPTEQ JMS I [NUMBER TAD (-32 /026 SNA JMP C026 TAD (32-35 /029 SZA CLA JMP BADCOD JMS CHANGE ISZ SRCH SRLUP, TAD I XR1 TAD TEMP SNA CLA JMP SRFND ISZ CNT JMP SRLUP JMP I SRCH SRFND, ISZ SRCH TAD XR1 JMP I SRCH GENCMN, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM DCA NUM2 TAD FLG SZA CLA JMP I [SYNTAX JMS I [GETC DCA TEMP TAD TEMP SNA JMP I GENCMN TAD (-"= SZA TAD ("=-", SZA CLA JMP I [SYNTAX JMP I GENCMN GENLOC, 0 , 0 P2, 0 P3, 0 PAGE /FIXED FOR V3D: LIST1, 104;105;106 114;115;116 124;125;126;127 134;135;136 0 LIST2, 3203;4007;3502 7514;0577;3637 0104;1211;3374;0641 7316;3410;1376 LIST3, 7735;4076;0774 3314;1002;0305 3204;1273;3606;1341 3716;1175;3401 TECNAM, FILENAME TECO.SV TECO, 0 DCA SA TAD (TECNAM JMS LOOKUP JMP I TECO /NOT THERE DCA BLKN JMS I (SHNDLR 100 /READ 1 PAGE FROM TECO 7000 /BUFFER BLKN, 0 JMP I [SYSERR TAD BLKN DCA BLKN2 TAD SA DCA I (7002 /REL LOC 2 IS S.A. JMS I (SHNDLR 4100 7000 BLKN2, 0 JMP I [SYSERR JMP I TECO SA, 0 LOOKUP, 0 DCA ARG1 /PTR TO FILENAME IN AC CLA IAC /LOOKUP ON SYS CIF 10 JMS I USR 2 ARG1, 0 /STARTING BLOCK 0 JMP I LOOKUP /NOT FOUND TAD ARG1 ISZ LOOKUP JMP I LOOKUP /RETURN 2 WITH BLOCK # IN AC GENDVC, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM SNA JMP I [SYNTAX DCA NUCODE TAD NUCODE AND [7700 SZA CLA JMP I (NUMBIG TAD NUCODE TAD (-30 SPA CLA JMP I [NUMBIG TAD NUCODE CLL RTL RAL DCA NUCODE TAD (HNDLBF DCA RR DVLUP, JMS I (GETIOT JMP I GENDVC TAD (-30 SPA CLA JMP DVLUP TAD I RR AND (7007 TAD NUCODE DCA I RR JMP DVLUP CDRTBL, CODE;CDCODE ZBLOCK 4 0 PAGE / 6600 IS THE BEGINNING OF THE AUXBUF / FOR THE SET COMMAND. HOWEVER, WE CAN USE THAT SPACE TO / PERFORM FUNCTIONS PRIOR TO REFERENCING THE BUFFER. / THE FOLLOWING ROUTINES, LOCATED IN WHAT IS NORMALLY / BUFFER SPACE, ARE UTILIZED BEFORE THE B LIST1;LIST2 JMP I CDCODE C026, JMS CHANGE LIST1;LIST3 JMP I CDCODE GET, 0 KSF JMP .-1 KRB AND [177 TAD [200 /FORCE TO 8-BIT JMP I GET CHANGE, 0 TAD I CHANGE DCA P1 ISZ CHANGE TAD I CHANGE DCA P2 ISZ CHANGE CHLUP, TAD I P1 SNA JMP I CHANGE TAD (HNDLBF /BASE OF HANDLER DCA P3 TAD I P2 DCA I P3 ISZ P1 ISZ P2 JMP CHLUP P1 CHKP /RETURN TSTP, TAD (-256 /IS IT A PERIOD? SZA CLA JMP SPIN /IF NOT, PUT IN SPACE TAD (3 /IF SO, BUMP POINTER 3 LOCATIONS TAD LINPTR /IN ORDER TO PASS BY EXTENSION DCA LINPTR SPIN, JMS I (BACKC /MOVE POINTER BACK TAD (240 DCA I LINPTR /REMOVE POSSIBLE < JMP I CHKP PAGE /7000-7177 IS NORMALLY THE BUFFER FOR THE TECO CCB /WE CAN USE IT FOR SET HANDLER WITH NO ILL EFFECTS *7000 F0ERR, JMS I [CRLF JMS I [PRINT TEXT "I/O READ ERROR" JMP I [GOAWAY F0ERR1, JMS I [CRLF JMS I [PRINT TEXT " I/O WRITE ERROR" JMP I [GOAWAY F0ERR2, JMS I [CRLF JMS I [PRINT HNMESG, TEXT " -- NOT FOUND ON SYS: " JMP I [GOAWAY F0ERR3, JMS I [CRLF JMS I [PRINT TEXT "OLD HANDLER NOT FOUND IN MONITOR" JMP I [GOAWAY F0ERR4, JMS I [CRLF JMS I [PRINT TEXT "CAN'T - HANDLER ALREADY RESIDENT" JMP I [GOAWAY F0ERR5, JMS I [CRLF JMS I [PRINT TEXT "CAN'T - TOO MANY LOGICAL DEVICES" JMP I [GOAWAY NOTSER, JMS I [PRINT TEXT "? CAN'T, NOT SERIAL" JMP I [GOAWAY PAGE / 7200-7577 BUFFER FOR HANDLER, WE CAN USE / IT FOR SET HANDLER CODE ... *HNDLBF PRHUFFER SPACE IS NEEDED. *6600 HANTES, 0 /TEST FOR SET HANDLER INPUT TAD I LINPTR TAD (-240 /TEST FOR REGULAR SET COMMAND SNA /SPACE INDICATES NORMAL COMMAND JMP I HANTES TAD (240-272 /COLON INDICATES THE SAME SNA CLA JMP I HANTES JMP I (SEHAN /OTHERWISE BRANCH TO SET HANDLER / / THE FOLLOWING CODE IS USED BY THE SET HANDLER XXXX FIELD 1 *2000 /THIS IS THE CODE ADDED TO RESOLVE THE OVER ABUNDANCE OF /HANDLERS NECESSARY TO ACCOMMODATE OS78 USERS... BUFHN=3200 /BUFFER AREA HSET, JMS I (7700 10 /LOCK IN USR JMS I (LOPT /TEST FOR L OPTION CIF CDF 0 JMS I (SPACE1 /USE FIELD ZERO SPACE SUBROUTINE JMS I (LOPT /TEST AGAIN CDF 10 /RESET DATA FIELD TO 1 --- CHANGED BY LOPT JMS LODEGR /READ IN GROUP TO BE REPLACED JMS I (REPLGR /GO GET THE PERTINENT INFO FROM GROUP 1 CIF CDF 0 / JMS I (GETTOO CLA CIF CDF 0 JMS I (SPACE1 /JUMP OVER SPACES TAD (NAME /SET HANDLER LOAD NAME POINTER DCA STBLK JMS LODEGR /READ IN GROUP TWO JMS I (NEWGR /DO THE HANDLER TABLE SWITCH JMS I (LODBLK /LOAD THE HANDLER ONTO SYSTEM JMS I (USRLD /SET USR TABLES ON SYS JMS I (BLK66 /SET DCB, ETC. ON SYS CIF CDF 0 JMP I (DONE /EXIT ROUTINE LODEGR, 0 //ROUTINE TO READ IN HANDLER FILE CIF CDF 0 / JMS I (GETTOOED, 0 //CHECK FOR VT TYPE & CLEAR THE SCREEN. CDF 10 TAD I (7726 CDF 0 AND (200 SNA CLA JMP PRHED9 //NO SCOPE TAD I (7771 //WHERE OS78 & OS278 BITS LIVE IN MONITOR AND (4 SZA CLA TAD (VT278P-VT52P //VT278 TAD (VT52P //VT52 TYPE DCA HDPTR //LOCAL TAD I HDPTR SNA JMP PRHED9 //SCREEN IS ZAPPED--DO THE TEXT PART. JMS I [TYPE ISZ HDPTR JMP .-5 //KEEP ON TRUCKIN' PRHED9, JMS I (PRHED1 //PRINT HEADER CIF CDF 10 JMP I PRHED //"[&77 WILL BUILD A 33 FOR ESCAPE CHAR VT278P, "[&77;"[;"H;"[&77;"[;"J;0 VT52P, "[&77;"H;"[&77;"J;0 HDPTR, 0 PAGE PRHED1, 0 JMS I [CRLF JMS I [PRINT //PRINT HEADER FOR DEVICES TO BE LISTED. TEXT /USE "SET HANDLER OLD NEW" TO CHANGE THESE DEVICES:/ JMS I [CRLF CDF 0 TAD (5610 /MOVE IN THE .HN DCA I NMSG ISZ NMSG TAD (1640 DCA I NMSG CIF CDF 0 JMP I (F0ERR2 /XXXXXX.HN NOT FOUND ON SYS: LODBLK, 0 //LOADS NEW HANDLER INTO SYSTEM AREA CDF 10 CIF 0 JMS I (SHNDLR //V4 - CHANGED TO WRITE ONLY TWO PAGES 4210 /TWO PAGES FROM FIELD 1 3400 SYSBLK, 0 /BLOCK TO WRITE TO JMP I (F1ERR1 JMP I LODBLK F1LNPR, 0 NKNT, -3 NMSG, HNMESG NMEPR, NAME NAME, FILENAME .HN PAGE *2200 REPLGR, 0 //ACCESSES INFO ABOUT PERMANENT DEVICE NAMES REPEAT, JMS I (ADJNM /ADJUST THE DEVICE NAME DCA I (X1T /ZERO OFFSET TAD HTMP /ADD IN NAME CIA DCA HTMP /STORE FOR TESTING TAD I PDNT /POINTER TO PDNT STORED IN 10036 DCA HTMP1 / HLOOP, ISZ HTMP1 /BUMP POINTER TO TABLE TAD /GET FIRST TWO CHARACTERS OF THE NAME DCA NAME /STORED IN SIX-PACK CIF CDF 0 / JMS I (GETTOO /GET SECOND TWO DCA I (NAME+1 / CIF CDF 0 JMS I (GETTOO /ANY MORE CHARACTERS... DCA I (NAME+2 JMS LODE /READ IN THE HANDLER FILE JMP I LODEGR LODE, 0 //ROUTINE TO LOAD HANDLER FILE CLA TAD (1 /ADD IN DEVICE NUMBER JMS I (200 /FOR USR CALL 2 /LOOKUP FILE STBLK, NAME /POINTER TO FILENAME 0 JMP F1ERR2 / TAD STBLK /STARTING BLOCK OF FILE IAC /SKIP BY CCB DCA NBLK /STORE IT FOR READ CDF 10 CIF 0 JMS I (SHNDLR /CALL SYS HANDLER 0610 /READ SIX PAGES INTO FIELD 1 STLOC, BUFHN /INTO HANDLER BUFFER NBLK, 0 /FROM THIS BLOCK ON SYS DEVICE JMP F1ERR JMP I LODE F1ERR, CIF CDF 0 JMP I (F0ERR /READ ERROR F1ERR1, CIF CDF 0 JMP I (F0ERR1 /WRITE ERROR F1ERR2, TAD I NMEPR /MOVE NAME INTO ERROR MESSAGE SNA /IS THIS WORD USED? JMP OVNOUT /EMPTY AND (77 /SECOND LETTER ZERO? SNA CLA TAD (40 /IF SO, MAKE IT A SPACE TAD I NMEPR CDF 0 DCA I NMSG CDF 10 ISZ NMSG /BUMP POINTERS ISZ NMEPR ISZ NKNT /ALL DONE? JMP F1ERR2 /NOT YET OVNOUT, EPEAT SECND, DCA OFST2 /SAVE OFSET FOR SECOND HANDLER SLOT DCA I HTMP1 /SET SECOND HANDLER ENTRY TO ZERO REPTUR, JMP I REPLGR /TIME TO RETURN PDHIT, 37 /POINTER TO DEVICE HANDLER INFO TABLE BLKSL, 0 HTMP, 0 HTMP1, 0 TESTO, -1 KNTR, -16 OFST1, 0 OFST2, 0 NEWGR, 0 //RESETS THE DEVICE HANDLER TABLES JMS I (PRESNT /TEST TO SEE IF HANDLER ALREADY PRESENT SECRPT, JMS I (PDEVNM /SET UP PERMANENT DEVICE NAME TAD I PDNT /POINTER TO PERMANENT DEVICE HANDLER TABLE TAD OFST1 /OFFSET INTO TABLE DCA HTMP1 /STORE FOR LOAD OVER, TAD HTMP DCA I HTMP1 /STORE THE PERMANENT DEVICE NAME //LOAD DEVICE CONTROL WORD TABLE TAD (7760 /START OF TABLE TAD OFST1 /OFFSET DCA HTMP1 TAD I NDATA /ADD IN INFO FROM HANDLER HEADER I HTMP1 /GET THE ENTRY TAD HTMP /IS IT THE ONE WE WANT? SNA CLA JMP FOUND1 /IT IS HERE! ISZ KNTR /FINISHED WITH TABLE? JMP HLOOP JMP I (TSTERR /IF SO, TEST FOR NO ROOM FOR SECOND ENTRY FOUND1, ISZ I (PRTST /IS THIS THE NEW HANDLER? SKP JMP I (F1ERR4 /IF SO IT'S AN ERROR TAD I PDNT /ADD THE STARTING POINT OF THE PDNT CIA TAD HTMP1 /SUBTRACT IT FROM POINTER ISZ TESTO /IS THAT THE FIRST OR SECOND ENTRY ? JMP SECND DCA OFST1 /STORE THE FIRST OFFSET POINT TAD I PDHIT /GET THE START OF DHIT TAD OFST1 /ADD OFFSET IN TO TABLE DCA HTMP1 TAD I HTMP1 /POINT TO DHIT ENTRY AND (3600 /SAVE THE RELATIVE BLOCK LOCATION DCA BLKSL TAD BLKSL CLL RAR BSW /RE-POSITION BLOCK NO. TO COMPUTE REAL BLOCK TAD (15 DCA I (SYSBLK /ALSO SAVE THE REAL BLOCK LOCATION ISZ I (BUFHN /WERE THERE TWO ENTRY POINTS? JMP TWO TAD I PDNT /NO, PASS BY SYS AND DSK AND LOOK FOR ZERO... DCA HTMP1 TAD (-16 DCA KNTR /RESET COUNTER DCA HTMP /SET DESIRED ENTRY VALUE TO ZERO JMP HLOOP TWO, TAD (-16 /RESET COUNTER DCA KNTR TAD (10 DCA I (X1T /SET TO POINT TO SECOND DEVICE NAME JMP R /IF NOT, LOOP TAD (-17 /RESET COUNTER DCA KNT JMP I MOVE DONE1, 0 ISZ TEST1 /HAVE BOTH HANDLERS BEEN LOADED? JMP I DONE1 /YES, RETURN ISZ I (BUFHN /ARE THERE TWO HANDLERS? SKP JMP I DONE1 /ONLY ONE HANDLER TAD (10 /2ND HANDLER IS TEN LOC. FROM START OF BUFFER DCA I (X1T TAD I (OFST2 /ADD SECOND OFFSET DCA I (OFST1 /STORE FOR ROUTINE JMP I (SEDCA I HTMP1 /STORE IN DCWT //LOAD DEVICE HANDLER INFORMATION TABLE TAD I PDHIT /POINTER TO TABLE TAD OFST1 /OFFSET DCA HTMP1 ISZ NDATA /BUMP POINTER TO DHIT DATA TAD I NDATA TAD BLKSL /RELATIVE BLOCK ON SYS DCA I HTMP1 //ZERO DEVICE HANDLER RESIDENCY TABLE TAD (7647 /START OF DHRT TAD OFST1 DCA HTMP1 DCA I HTMP1 /ZEROED JMS I (DONE1 JMP I NEWGR USRLD, 0 //ADDS HANDLER(S) INFO TO SYS CDF 10 CIF 0 JMS I (SHNDLR 0610 /READ 3 BLOCKS FROM SYS BUFHN /INTO BUFHN 13 /FROM USR AREA ON SYS JMP I (F1ERR /ERROR RETURN TAD I PDNT /FIRST MOVE DEVICE NAMES JMS I (MOVE TAD I PDHIT /THEN, THE INFO TABLE JMS I (MOVE CDF 10 CIF 0 JMS I (SHNDLR /RE-WRITE USR 4410 BUFHN+400 14 JMP I (F1ERR1 JMP I USRLD PDNT, 36 /POINTER TO PERMANENT DEVICE NAME TABLE NDATA, 0 PAGE *2400 BLK66, 0 //LOAD DCW TABLE ON SYS CDF 10 CIF 0 JMS I (SHNDLR /READ IN BLOCK 66 0210 / BUFHN /INTO BUFFER 66 JMP I (F1ERR TAD (200 /SET TO PROPERLY ACCESS BLOCK 66 THRU MOVE DCA MVADD TAD (7760 /ADD POINTER TO DCWT JMS MOVE /MOVE TABLE CDF 10 CIF 0 JMS I (SHNDLR /RE-WRITE BLOCK 66 4210 BUFHN 66 JMP I (F1ERR1 JMP I BLK66 MOVE, 0 //CODE MOVING SUBROUTINE DCA MTMP /STORE POINTER TO CODE TO BE MOVED LOPE, TAD MTMP /SET UP STORAGE LOCATION TAD (BUFHN TAD MVADD /BLOCK 66 ADJUSTMENT DCA DEPLOC / TAD I MTMP /MOVE DATA DCA I DEPLOC /TO HERE ISZ MTMP /BUMP POINTER ISZ KNT /ALL DONE?? JMP LOPE TAD I X2T TAD I X1T DCA I (HTMP /STORE THE PERMANENT DEVICE NAME TAD I X1T /IS SECOND WORD NON-ZERO? SNA CLA JMP I ADJNM /RETURN TAD I (HTMP /IF NON ZERO, SET ZERO BIT RAL STL RAR DCA I (HTMP JMP I ADJNM LOPT, 0 /DOES LINPTR CONTAIN /L? CDF 0 TAD I (LINPTR DCA F1LP2 /ACCESS POINTER INTO LINE BUFFER TAD I F1LP2 TAD (-"/ SZA CLA /IS THERECRPT /REPEAT PDEVNM, 0 //SET UP WORD FOR PDNT TAD TEST1 /FIRST, TEST FOR PROPER # OF ENTRY POINTS SZA CLA /IF ZERO ONLY ONE JMP CONT /CONTINUE NORMALLY IAC TAD I (BUFHN /IF MORE THAN ONE, ERROR SZA CLA JMP F1ERR5 CONT, JMS I (ADJNM /ADJUST NAME OF ENTRY IAC /SET UP POINTER FOR NEW DATA TAD I (X1T DCA I (NDATA DCA I (X1T /ZERO OFFSET JMP I PDEVNM TSTERR, ISZ PRTST /IS THIS THE NEW HANDLER ?? SKP JMP I PRESNT /IF SO, WE DIDN'T REALLY WANT TO FIND IT TAD I (HTMP /SEE IF ENTRY POINT SEARCHED FOR WAS ZERO SZA CLA JMP F1ERR3 /IF NOT, HANDLER NOT FOUND ISZ TEST1 /SET TEST1 TO ALLOW FOR ONLY ONE HANDLER NOP JMP I (REPTUR /RETURN PRESNT, 0 //ROUTINE TO AID IN TESTING PRESENCE OF HANDLER STA DCA PRTST /SET TEST INDICATOR TAD (-16 /RESET COUNTER DCA I (KNTR JMS I (REPLGR /GO SEARCH TABLE JMP I PRESNT F1ERR3, CIF CDF 0 JMP I (F0ERR3 /OLD HANDLER NOT FOUND ON SYS: F1ERR4, JMS I (LPTHND //IF LPT HANDLER, LET THE CHANGE HAPPEN JMP I PRESNT RERR4, CIF CDF 0 JMP I (F0ERR4 /HANDLER ALREADY PRESENT F1ERR5, CIF CDF 0 JMP I (F0ERR5 /TOO MANY HANDLERS PRTST, 0 TEST1, -1 KNT, -17 MVADD, 0 DEPLOC, 0 MTMP, 0 PAGE *2600 ADJNM, 0 //ROUTINE TO AJUST DEVICE NAME TO LOOK LIKE TABLE ENTRY TAD X1T /ADD IN OFFSET FOR FIRST OR SECOND ENTRY POINT TAD (BUFHN+3 /ADD IN OFFSET TO NAME DCA X2T /STORE IT TEMPORARILY TAD X2T IAC /POINTER TO OSECOND HALF OF NAME DCA X1T /LIKEWISE, STORE SECOND WORD AN OPTION? JMP I LOPT /NO, SO RETURN ISZ F1LP2 /BUMP POINTER TAD I F1LP2 /IS THERE AN L FOLLOWING? TAD (-"L SZA CLA JMP I LOPT /IF NO, RETURN CIF CDF 0 JMS I (PRHED /PRINT THE HEADER JMS I (SRNT /SEARCH THE NAME LIST JMS I (PRLIS /PRINT THE LIST CIF CDF 0 JMP I (GOAWAY TSTTBL, 0 //SEARCH HANDLER NAME TABLE. DCA WEWNT /STORE DEVICE NAME WE'RE SEARCHING FOR TAD I PTNAM /GET NUMBER OF ENTRIES IN TABLE(NEGATIVE) DCA TBLCNT /STORE AS COUUNTER ISZ PTNAM /POINT TO DEVICE NAME SECDT, TAD WEWNT /LOOK FOR NAME TAD I PTNAM /IS THIS IT? SNA CLA JMP I (LPTCHK /YES GO STORE INFO ISZ PTNAM /NO, BUMP POINTER ISZ PTNAM /ADVANCE PAST GROUP INFO ISZ TBLCNT /HAVE WE TESTED ALL THE GROUPS JMP SECDT /NOT YET... RESTPR, TAD (GTABL /RESET TABLE POINTER DCA PTNAM JMP I TSTTBL /GO GET NEXT NAME PTNAM, GTABL WEWNT, 0 TBLCNT, 0 X1T, 0 X2T, 0 F1LP2, 0 /SEE IF LPT HANDLER, YES RETURN CALL+1; NO CALL+2 LPTHND, 0 TAD I (HTMP TAD (4020 SZA CLA /LPT HANDLER ISZ LPTHND /NOT AN LPT HANDLER JMP I LPTHND PAGE *3000 SRNT, 0 TAD I (PDNT /GET POINTER TO TABLE DCA INFOT TAD I INFOT DCA INFOT /NOW CONTAINS TABLE START SRLOOP, TAD I INFOT /GET TABLE ENTRY JMS I (TSTTBL /GET CORR. HANDLER NAME... ISZ INFOT ISZ INCNT /ARE WE THRU TABLE? JMP SRLOOP / JMP I SRNT SETFND, IAC TAD I (PTNAM /BUMP POINTER AND STORE DCA NPTNAM TAD I NPTNAM /ACCESS JMS INF0 ISZ PRPNT //BUMP POINTER DCA I PRPNT /STORE IN FOR PRINTING ISZ PRPNT /ADVANCE TO NEXT SPOT JMP I (RESTPR /RETURN TO RESTORE TABLE POINTER PRLIS, 0 //THIS ROUTINE ALLOWS US TO PRINT LIST //IT IS FILLED BY SETFND... TAD (CIF 10 /SET PRINT RETURN TO FIELD ONE CDF 0 DCA I (PRCDF /STORE IT CDF 10 PRSTRT, JMS I .+1 /START PRINTING LIST PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMS I .+1 PREND JMP I PRLIS /END OF TABLE, MAX 17 OCTAL ENTRIES PREND, 0 JMP I PRLIS NPTNAM, 0 PRPNT, PRSTRT INCNT, -16 INFOT, 0 PAGE *3200 / 3200-4377 IS THE BUFFER FOR NORMAL HANDLER PROCEDURES / HOWEVER, THE LIST OPTION ALLOWS US TO USE IT WITHOUT ANY / CONFLICT. / GTABL CONTAINS TWO WORD GROUPS OF INFORMATION / CONCERNING EACH POSSIBLE HANDLER GROUP. TSTTBL / SEARCHES FOR THE STORED VALUE OF THE DEVICE NAME. / IF FOUND IT THEN STORES THE / NAME PRINTING INFO. GTABL, -GHALF //DEVICES THIS TABLE RECOGNIZES GBEGIN=. -6601;PBAT /BAT LPTID, -4020;PLPT /LPT -7421;PLQP /LQP -4510;PRX2A /RX2A (RX20,RX21) -4512;PRX2B /RX2B (RX22,RX23) -5010;PRX5A /RX5A (RX50:RX50,RX51) -5012;PRX5B /RX5B (RX50:RX52,RX53) -4764;PRD5A /RD5A (RD51:RD50,RD51) -4766;PRD5B /RD5B (RD51:RD52,RD53) -4215;PRL0 /RL0 (RL0A,RL0B) -4315;PRL1 /RL1 (RL1A,RL1B) -4217;PRLC /RLC (RL0C,RL1C) -5076;PSLU2 /SLU2 -5077;PSLU3 /SLU3 -5376;PVLU2 /VLU2 -5377;PVLU3 /VLU3 -4263;RL02D1 //R0AB R20A,R20B -4265;RL02D2 //R0CD -4363;RL02D3 //R1AB -4365;RL02D4 //R1CD -4267;RL02D5 //R01E -6077;PCOM0 //COM0 DECmate 1 -6100;PCOM1 //COM1 -6034;PCOMM //COMM DECmate 2 /-4631;PSYS //SYSTEM /-5723;PDSK //DISK /-5524;PTTY //TTY GEND=. GENTRY=GEND-GBEGIN GHALF=GENTRY%2 /CHECK FOR LPT, IF SO SEE IF PARALLEL OR SERIAL LPTCHK, TAD I (PTNAM DCA LPCHK TAD I LPCHK TAD (4020 /IS STORED NAME LPT? SZA CLA JMP I (SETFND /IS NOT STORE INFO JMS I USR1 /IF=1; DF=1 1 /FETCH DEVICE LPT HNDLBF+1 /LOAD INTO LOC. 7200-7577 FIELD 0 JMP I (F1ERR3 CDF 0 TAD I (7203 /CHECK ID FOR SERIAL CDF 10 TAD (S I (PRINT TEXT "(SYS:)" ISZ PSYS JMP I PSYS PDSK, 0 //DISK CIF 0 JMS I (PRINT TEXT "(DSK:)" ISZ PDSK JMP I PDSK > IFDEF FORDEV < PTTY, 0 CIF 0 JMS I (PRINT TEXT " (TTY:)" ISZ PTTY JMP I PTTY > LPTSE, 0 //VT278'S SERIAL VERSION OF LPT (IOT'S 32-33) CIF 0 JMS I (PRINT TEXT "LPTS LPT (SERIAL)" ISZ LPTSE JMP I LPTSE *3400 / NORMALLY USED AS SET HANDLER BUFFER, LIST OPTION / CAN USE THIS SPACE. PRX2A, 0 CIF 0 JMS I (PRINT TEXT "RX2A RX20,RX21 (RX02)" ISZ PRX2A JMP I PRX2A PRX2B, 0 CIF 0 JMS I (PRINT TEXT "RX2B RX22,RX23 (RX02)" ISZ PRX2B JMP I PRX2B PRL0, 0 CIF 0 JMS I (PRINT TEXT "RL0 RL0A,RL0B (RL01)" ISZ PRL0 JMP I PRL0 PRL1, 0 CIF 0 JMS I (PRINT TEXT "RL1 RL1A,RL1B (RL01)" ISZ PRL1 JMP I PRL1 PRLC, 0 CIF 0 JMS I (PRINT TEXT "RLC RL0C,RL1C (RL01)" ISZ PRLC JMP I PRLC *3600 / 3600 IS BUFFER FOR NORMAL HANDLER OPERATION / USING IT HERE FOR LISTING CAUSES NO CONFLICT PLPT, 0 CIF 0 JMS I (PRINT TEXT "LPSV LPT (PARALLEL)" ISZ PLPT JMP I PLPT PSLU2, 0 CIF 0 JMS I (PRINT TEXT "SLU2 SLU2" ISZ PSLU2 JMP I PSLU2 PBAT, 0 CIF 0 JMS I (PRINT TEXT "BAT BAT" ISZ PBAT JMP I PBAT PLQP, 0 CIF 0 JMS I (PRINT TEXT "LQP LQP (PARALLEL)" ISZ PLQP JMP I PLQP *4000 / 4000 NORMALLY USED AS BUFFER FOR S-2423 SZA JMP LA34 /SEE, IF LA34 TAD (LPTSE /SERIAL DCA I (LPTID+1 /KLUGE THE MESSAGE POINTER JMP I (SETFND /AND STORE THE INFO LA34, TAD (2423-6364 SZA CLA JMP I (SETFND /WAS PARALLEL, STORE INFO AS IS TAD (LPT34 DCA I (LPTID+1 /KLUGE THE MESSAGE POINTER JMP I (SETFND /AND STORE THE INFO LPCHK, 0 USR1, 200 IFDEF FORDEV < PSYS, 0 //SYS: CIF 0 JMRD50,RD51 (RD51) ISZ PRD5A JMP I PRD5A PRD5B, 0 CIF 0 JMS I (PRINT TEXT "RD5B RD52,RD53 (RD51) ISZ PRD5B JMP I PRD5B *4200 / 4200 NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR / LISTING... //NEW FOR V4: RL02D1, 0 CIF 0 JMS I (PRINT TEXT "R0AB R20A,R20B (RL02)" ISZ RL02D1 JMP I RL02D1 RL02D2, 0 CIF 0 JMS I (PRINT TEXT "R0CD R20C,R20D (RL02)" ISZ RL02D2 JMP I RL02D2 RL02D3, 0 CIF 0 JMS I (PRINT TEXT "R1AB R21A,R21B (RL02)" ISZ RL02D3 JMP I RL02D3 RL02D4, 0 CIF 0 JMS I (PRINT TEXT "R1CD R21C,R21D (RL02)" ISZ RL02D4 JMP I RL02D4 RL02D5, 0 CIF 0 JMS I (PRINT TEXT "R01E R20E,R21E (RL02)" ISZ RL02D5 JMP I RL02D5 *4400 / 4400 NORMALLY USED AS BUFFER FOR SET HANDLER WE CAN US IT FOR / LISTING... PCOM0, 0 CIF 0 JMS I (PRINT TEXT "COM0 COM0" ISZ PCOM0 JMP I PCOM0 PCOM1, 0 CIF 0 JMS I (PRINT TEXT "COM1 COM1" ISZ PCOM1 JMP I PCOM1 PCOMM, 0 CIF 0 JMS I (PRINT TEXT "COMM COMM" ISZ PCOMM JMP I PCOMM LPT34, 0 //VT78'S SERIAL VERSION OF LPT (IOT'S 65-66) CIF 0 JMS I (PRINT TEXT "LP34 LPT (SERIAL)" ISZ LPT34 JMP I LPT34 PRX5A, 0 CIF 0 JMS I (PRINT TEXT "RX5A RX50,RX51 (RX50)" ISZ PRX5A JMP I PRX5A PRX5B, 0 CIF 0 JMS I (PRINT TEXT "RX5B RX52,RX53 (RX50)" ISZ PRX5B JMP I PRX5B *600ET HANDLER WE CAN US IT FOR / LISTING... PSLU3, 0 CIF 0 JMS I (PRINT TEXT "SLU3 SLU3" ISZ PSLU3 JMP I PSLU3 PVLU2, 0 CIF 0 JMS I (PRINT TEXT "VLU2 VLU2" ISZ PVLU2 JMP I PVLU2 PVLU3, 0 CIF 0 JMS I (PRINT TEXT "VLU3 VLU3" ISZ PVLU3 JMP I PVLU3 PRD5A, 0 CIF 0 JMS I (PRINT TEXT "RD5A AL CHKHND, 0 TAD I (BUFHN /GET MINUS THE NUMBER OF HANDLERS IN THE FILE DCA MNOHND /SAVE IT TAD MNOHND /GET IT BACK TAD (12 /GET MAXIMUM ALLOWED # OF HANDLERS SPA CLA /ARE THERE TOO MANY HANDLERS JMP I (TOOMNY /YES, OUTPUT AN ERROR MESSAGE TAD (BUFHN /NO, GET START OF HANDLER BUFFER DCA HNDPTR /SET UP POINTER FOR IT CHKSYS, TAD HNDPTR /GET POINTER TO THE START OF THE HEADER BLOCK TAD SYSOFF /ADD IN OFFSET TO THE SYSTEM WORD DCA LOCPTR /SAVE THAT LOCATION TAD I LOCPTR /GET THE WORD WITH THE SYSTEM BIT RTL /PUT THE SYSTEM BIT IN THE LINK SZL /IS THIS A SYSTEM HANDLER? JMP CHKSIZ /YES, NOW CHECK FOR 1 OR 2 PAGE CLL CLA /NO ISZ MNOHND /ANY MORE HANDLERS? SKP /YES, LETS CHECK THE NEXT ONE JMP I (NOTSYS /NO, OUTPUT AN ERROR MESSAGE TAD HNDPTR /GET THE HANDLER POINTER TAD (10 /ADD IN OFFSET TO START OF NEXT HANDLER DCA HNDPTR /SAVE NEW POINTER JMP CHKSYS /CHECK THE NEXT HANDLER CHKSIZ, RAR /MOVE THE SIZE BIT INTO THE LINK SZL CLA /IS IT A TWO PAGE HANDLER TAD (-1 /YES, SET SWITCH TO A MINUS 1 CDF 30 /NO, LEAVE AC=0 DCA I (SYSSIZ /SAVE SWITCH IN FI0 //ROUTINE TO LOAD THE FIND THE NEW SYSTEM HANDLER, //LOAD IT INTO CORE AND VERIFY THAT IT IS A //VALID SYSTEM HANDLER SYSSET, 0 CIF CDF 0 /LOAD THE OUTPUT DEVICE HANDLER JMS I (DEVGET /INTO F0 7200-7577 CDF 0 TAD I (ENTRY /GET THE ENTRY POINT OF THE HANDLER CDF 30 DCA I (NEWDEV /SAVE IT IN F3 FOR LATER CDF 10 CLA CIF CDF 0 JMS I (SPACE1 /SKIP OVER ANY SPACES IN THE COMMAND TAD (NAME /GET POINTER TO THE NEW HANDLER FILE NAME DCA I (STBLK /SAVE IT FOR THE LOAD FROM SYS TAD (BUFHN /GET START OF BUFFER TO LOAD TO DCA I (STLOC /SAVE IT FOR THE READ JMS I (LODEGR /LOAD THE NEW HANDLER FILE JMS CHKHND /SEE IF HANDLER IS LEGAL CIF CDF 30 JMP I SYSSET /EXIT //ROUTINE TO CHECK IF THE HANDLER IS LEG /LENGTH OF DEVICE IN WORD 10 PAGE //NO SYSTEM DEVICE FOUND ERROR ROUTINE NOTSYS, TAD (CIF 10 /SET UP FOR VALID RETURN CDF 0 DCA I (PRCDF /DATA FIELD CHANGE FOR VALID RETURN CDF 10 CIF 0 JMS I (PRINT /OUTOUT THE ERROR MESSAGE TEXT "NOT A VALID SYSTEM HANDLER!!" TAD (CIF 0 /RESTORE RETURN FOR PRINT CDF 0 DCA I (PRCDF /DATA FIELD RESTORATION CIF 0 JMP I (GOAWAY /EXIT TO MONITOR AFTER ERROR MESSAGE //TOO MANY HANDLERS IN FILE ERROR ROUTINE TOOMNY, TAD (CIF 10 /SET UP FOR VALID RETURN CDF 0 DCA I (PRCDF /DATA FIELD CHANGE FOR VALID RETURN CDF 10 CIF 0 JMS I (PRINT /OUTPUT ERROR MESSAGE TEXT "TOO MANY INDIVIDUAL HANDLERS IN THIS HANDLER FILE!!" TAD (CIF 0 /RESTORE RETURN FOR PRINT CDF 0 DCA I (PRCDF /DATA FIELD RESTORATION CIF 0 JMP I (GOAWAY /EXIT TO MONITOR AFTER ERROR MESSAGE OPT0, LINPTR OPT1, 0 ////OS8 - 'SET SYS DEVICE LOGDEV:HANDLR' CODE ///PORTION OF SET PROGRAM TO CREATE A NEW SYSTEM DEVICE //THIS PORTION OF THE SET PROGRAM WILL //QUERY THE USER TO SEE IF HE WANTS TO ZERO //THE DIRECTORY AND IF HE WISHES TO BOOT THE /ELD THREE CDF 10 TAD HNDPTR /GET THE START OF THE CORRECT HANDLER TAD DCBOFF /ADD IN OFFSET TO THE DCW DCA LOCPTR /SAVE THE LOCATION TAD I LOCPTR /GET THE DCB WORD AND (7770 /SET BITS 9-11 TO 0 - TENTATIVE FILE INDICATOR CDF 30 DCA I (NEWDCB /SAVE THE NEW DCB WORD IN FIELD THREE CDF 10 TAD HNDPTR /GET THE START OF THE CORRECT HANDLER TAD LENOFF /ADD IN THE OFFSET TO THE LENGTH OF DEV. WORD DCA LOCPTR /SAVE THE LOCATION TAD I LOCPTR /GET THE DEVICE LENGTH CDF 30 DCA I (DEVLEN /SAVE IT IN FIELD THREE CDF 10 JMP I CHKHND MNOHND, 0 /MINUS NO OF HANDLERS HNDPTR, 0 /HANDLER POINTER LOCPTR, 0 /LOCATION POINTER SYSOFF, 6 /SYSTEM AND SIZE BIT IN WORD 6 OF HANDLER DCBOFF, 5 /DCB WORD IS WORD 5 LENOFF, 10 D. //IF THE USER WISHED TO BOOT THE NEW DEVICE //THEN THE MONITOR AREAS OF CORE ARE SET TO //THE INFORMATION CONTAINED IN BLOCKS 0 AND 66 //AND WE EXIT TO 07600 IN THE NEW MONITOR. //IF IT WAS NOT REQUESTED TO BOOT WE EXIT //THE SET ROUTINE 'GOAWAY' FIELD 3 *0000 *0020 //DEFINITIONS K40, 40 /BIT 6 MASK K77, 77 /BIT 0-5 MASKOUT K100, 100 K177, 177 K200, 200 K203, 203 /CTRL C CODE K212, 212 /LINEFEED CODE K215, 215 /RETURN CODE KC203, -203 /MINUS CTRL C CODE CHAR, 0 /CHARACTER HOLD AREA POINT, 0 /CHARACTER POINTER HOLD AREA STTRN, 0 /STARTING BLOCK TO TRANSFER TRNCNT, 0 /NO. OF TIMES TO TRANSFER 7 BLOCKS DEVLEN, 0 /LENGTH OF NEW SYSTEM DEVICE UPDLOC, 0 /LOCATION TO UPDATE SYSSIZ, 0 /NEW SYSTEM DEVICE AFTER IT IS BUILT. //IF THE PROGRAM IS CALLED THRU BATCH THEN THE //QUESTIONS ARE NEVER ASKED DEFAULTS WILL BE //USED WHICH ARE TO NOT ZERO THE DIRECTORY AND //TO BOOT THE NEW DEVICE. //THE INPUT FILE SPEC THAT WAS INPUTTED WILL //THEN BE LOOKED FOR TO SEE IF THE FILE IS //AVAILABLE ON THE OLD SYSTEM DEVICE AND IF //NOT AN ERROR MESSAGE WILL BE OUTPUT AND //AGAIN WE EXIT TO MONITOR. //ONCE THE FILE IS FOUND IT IS CHECKED TO SEE //IF IT IS A SYSTEM HANDLER AND IF NOT AN //ERROR MESSAGE IS OUTPUT AND EXIT TO MONITOR. //IF IT IS A VALID SYSTEM HANDLER, IT IS THEN CHECKED //TO SEE IF IT IS A ONE OR TWO PAGE HANDLER. //BLOCKS 7-67 ARE TRANSFERED FROM THE OLD //SYSTEM DEVICE TO THE NEW SYSTEM DEVICE. //THEN THE HANDLER IS THEN LOADED INTO CORE //AND BLOCKS 0 AND 66 ARE BUILT FROM THE //INFORMATION CONTAINED ON THE EXISTING SYSTEM //DEVICE AND IN THE NEW HANDLER FILE. //BLOCKS 0 AND 66 ARE THEN WRITTEN TO THE NEW SYSTEM //DEVICE. //IF IT WAS REQUESTED TO ZERO THE DIRECTORY //THIS IS NOW DONE. //IF NOT THIS ROUTINE IS SKIPPE //DEVICE CODE. ALL MAJOR FUNCTIONS ARE EITHER //DONE HERE OR ARE CALLED FROM HERE. CHGSYS, CLA CLL /CLEAR AC AND LINK CDF 30 /SET DATA FIELD TO CURRENT FIELD CIF 10 /SET INSTRUCTION FIELD TO USR FIELD JMS I LCKUSR /LOCK IN USR USRIN CLL CLA CDF 0 TAD I BCHIND /GET BATCH INDICATOR CDF 30 RTL /PUT BATCH RUNNING INDICATOR IN LINK SZL CLA /IS BATCH RUNNING? JMP USEDEF /YES, USE DEFAULTS TO QUESTIONS JMS I ASKYN /NO, QUERY THE USER ZROMSG /DO YOU WISH TO ZERO DIRECTORY? DCA ZEROYN /SAVE THE ANSWER JMS I ASKYN BOTMSG /DO YOU WISH TO BOOT THE NEW SYSTEM DCA BOOTYN /SAVE THE ANSWER //SYSSET LOADS THE DEVICE HANDLER AND THE NEW //SYSTEM HANDLER INTO CORE SO THAT BOTH MAY BE //ACCESS AT ANY T /HANDLER SIZE SWITH - 0=1 PAGE -1=2 PAGE NEWDCB, 0 /NEW DCB WORD NEWDEV, 0 /ENTRY POINT FOR OUTPUT DEVICE LCKUSR, 7700 /LOCKIN USR LOCATION DATEWD, 7666 /DATE WORD LOCATION IN FIELD 1 BCHIND, 7777 /BATCH INDICTAOR LOCATION IN FIELD 0 ZEROYN, "Y /DEFAULT IS ZERO DIRECTORY BOOTYN, "N /DEFAULT IS DON'T BOOT THE NEW SYSTEM FLBUFF, FILBUF /POINTER TO BUFFER BEING USED FILBUF=0 /BUFFER TO LOAD BLOCK TO BLK0L=FILBUF /BLOCK 0 LOWER BUFFER BLK0U=FILBUF+200 /BLOCK 0 UPPER BUFFER BLK66L=FILBUF+400 /BLOCK 66 LOWER BUFFER BLK66U=FILBUF+600 /BLOCK 66 UPPER BUFFER //ROUTINE POINTERS ASKYN, ASKER /ASK A QUESTION ROUTINE MSGPRT,PRTMSG /MESSAGE PRINTING ROUTINE // USR INSTRUCTIONS FETCH=1 FIND=2 ENTER=3 CLOSE=4 DECODE=5 CHAIN=6 ERROR=7 USRIN=10 USROUT=11 INQUIR=12 RESET=13 //MESSAGE TABLE *200 ZROMSG, TEXT "DO YOU WISH TO ZERO THE NEW SYSTEM DEVICE DIRECTORY? Y OR N: " BOTMSG, TEXT "DO YOU WISH TO BOOT THE NEW SYSTEM DEVICE? Y OR N: " SYSBLT, TEXT "SYSTEM BUILT" //START OF 'SET SYS DEVICE LOGDEV:HANDLR' CODE *2000 //THIS IS THE MAJOR ROUTINE OF THE SET SYS IS BLOCK ON SYS DEVICE JMP F3ERR /ERROR ROUTINE JMP I GET7 PUT7, 0 CLA DCA PUTBUF /SET UP TO START AT BEIGINNING OF FIELD TAD STTRN /GET BLOCK TO START WITH DCA PUTBLK /SAVE IT CDF 30 CIF 0 JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER 5620 /WRITE OUT 16 PAGES (7 BLOCKS) FROM FIELD 2 PUTBUF, 0 /STARTING AT BEGINNING OF FIELD PUTBLK, 0 /ONTO THIS BLOIME USEDEF, CIF CDF 10 JMS I (SYSSET CLA CLL TAD (-7 /GET MINUS NUMBER OF TRANSFERS TO DO DCA TRNCNT /SAVE IT TAD (7 /START AT BLOCK 7 DCA STTRN /SAVE START OF TRNSFER BLOCK TRNMOR, JMS GET7 /READ 7 BLOCKS FROM OLD SYS INTO FIELD 2 JMS PUT7 /WRITE SAME 7 BLOCKS TO NEW DEVICE FROM FIELD 2 TAD STTRN /GET STARTING BLOCK NUMBER TAD (7 /ADD 7 TO IT DCA STTRN /SAVE FOR POSSIBLE NEXT TRANSFER ISZ TRNCNT /HAVE WE OUTPUT A TOTAL OF 61 BLOCKS JMP TRNMOR /NO, OUTPUT ANOTHER 7 BLOCKS /YES, UPDATE AND MOVE BLOCK 0 AND 66 //MOV066 READS IN THE OLD SYSTEM BLOCKS 0 AND //66 AND PUTS THE NEW SYSTEM HANDER AND //RELATED INFORMATION INTO THEIR BUFFER AND //THEN WRITES THEM BACK OUT TO THE NEW DEVICE JMS I (MOV066 CLA CLL TAD ZEROYN /GET THE ZERO DIRECTORY SWITCH TAD (-"Y /GET A MINUS 'Y' SNA CLA /SHOULD WE ZERO THE DIRECTORY? JMS I (UPD1 /YES, UPDATE BLOCK 1 - DIRECTORY JMS I MSGPRT /OUTPUT SYS BUILT MESSAGE SYSBLT JMS I (OCRLF /OUTPUT A RETURN AFTER THE MESSAGE CLA TAD BOOTYN /GET THE BOOT SWITCH TAD (-"Y /GET A MINUS 'Y' SNA CLA /BOOT THE NEW DEVICE JMP I (BOOTIT /YES, BOOT AWAY CIF CDF 0 /NO, EXIT NORMALLY JMP I (GOAWAY GET7, 0 CLA DCA GETBUF /SET UP BUFFER TO LOAD TO TAD STTRN /GET STARTING BLOCK NUMBER TO TRANSFER DCA GETBLK /SAVE IT CDF 30 CIF 0 JMS I (SHNDLR /CALL SYS HANDLER 1620 /READ IN 16 PAGES (7 BLOCKS) INTO FIELD 2 GETBUF, 0 /STARTING AT BEGINNING OF FIELD GETBLK, 0 /FROM TH THE NUMBER OF HANDLERS IN FILE CDF 30 CIA /MAKE IT POSITIVE AND (17 /KEEP ONLY BITS 8-11 RTL /MULTIPLY BY 10 - # OF LOCATIONS PER HEADER RAL TAD (1 /ADD IN OFFSET TO FIRST HANDLER TAD (BUFHN /ADD IN START OF BUFFER WITH BOOTSTRAP DCA BOOTLN /SAVE THE LOCATION OF THE BOOTSTRAP LENGTH TAD BOOTLN /GET IT BACK TAD (1 /ADD OFFSET TO START OF BOOTSTRAP CK ON THE OUTPUT DEVICE JMP F3ERR1 /ERROR ROUTINE JMP I PUT7 F3ERR, CIF CDF 0 JMP I (F0ERR /READ ERROR F3ERR1, CIF CDF 0 JMP I (F0ERR1 /WRITE ERROR PAGE //ROUTINE TO UPDATE BLOCK 0 AND 66 //THESE BLOCKS CONTAIN MANY THINGS TO BE CHANGED //AMONG THEM ARE THE BOOTSTRAP AND THE SYSTEM HANDLER MOV066, 0 //READ IN BLOCK 0 CDF 30 CIF 0 JMS I (SHNDLR /CALL OLD SYSTEM DEVICE HANDLER 0220 /READ 1 BLOCK INTO FIELD 2 BLK0L /STARTING AT BLOCK 0 BUFFER 0 /FROM BLOCK 0 JMP I (F3ERR /ERROR BRANCH //READ IN BLOCK 66 CDF 30 CIF 0 JMS I (SHNDLR /CALL OLD SYSTEM DEVICE HANDLER 0220 /READ 1 BLOCK FROM FIELD 2 BLK66L /STARTING AT BLOCK 66 BUFFER 66 /FROM BLOCK 66 JMP I (F3ERR /ERROR BRANCH //UPDATE BUFFERS CONTAINING BLOCKS 0 AND 66 JMS I (CHG066 /ROUTINE FOR BUFFER CHANGES //WRITE OUT BLOCK 0 CDF 30 CIF 0 JMS I NEWDEV /WRITE TO NEW DEVICE 4220 /WRITE 1 BLOCK FROM FIELD 2 BLK0L /STARTING AT BLOCK 0 BUFFER 0 /TO BLOCK 0 JMP I (F3ERR1 /ERROR BRANCH //WRITE OUT BLOCK 66 CDF 30 CIF 0 JMS I NEWDEV /WRITE TO NEW DEVICE 4220 /WRITE 1 BLOCK FROM FIELD 2 BLK66L /STARTING AT BLOCK 66 BUFFER 66 /TO BLOCK 66 JMP I (F3ERR1 /ERROR BRANCH JMP I MOV066 PAGE //ROUTINE TO PUT THE NEW SYSTEM HANDLER INTO THE //APPROPRIATE LOCATIONS IN THE BUFFERS WHERE THERE //ARE BEING STORED TEMPORARILY AND TO UPDATE //OTHER RELATED INFO. CHG066, 0 CLL CLA CDF 10 TAD I (MNOHND /GET MINUS DCA BOOTST /SAVE LOCATION OF START OF BOOTSTRAP //UPDATE BLOCK 66 (LOWER) TO REFLECT NEW HANDLER INFO //SET UP DCW TABLE TO SHOW NEW DCB WORD TAD NEWDCB /GET THE NEW DCB WORD CDF 20 DCA I SYSDCB /SAVE IN FIELD 2 AT THE SYS DCB LOCATION CDF 30 TAD NEWDCB /GET BACK THE DCB WORD CDF 20 DCA I DSKDCB /SAVE IT IN FIELD 2 AT THE DSK DCB LOCATION CDF 30 //SET UP THE DHR TABLE TAD (SHNDLR /GET THE OFFSET TO THE SYSTEM HANDLER CDF 20 DCA I DHRPTR /SAVE IT IN THE FIRST LOCATION OF THE DHR TABLE CDF 30 ISZ DHRPTR /INCREMENT THE POINTER FOR THE NEXT SAVE TAD (SHNDLR /GET THE OFFSET AGAIN CDF 20 DCA I DHRPTR /SAVE DSK SAME AS SYS CDF 30 //ZERO OUT THE REST OF THE TABLE ZERDHR, ISZ DHRPTR /INCREMENT THE POINTER AGAIN CDF 20 DCA I DHRPTR /ZERO THE LOCATION CDF 30 ISZ DHRLEN /LAST LOCATION TO ZERO YET JMP ZERDHR /NO, ZERO ANOTHER ONE //MOVE FIELD 1 7600 IMAGE TO NEW BLOCK 0 (LOWER) //FROM NEW BLOCK 66 (LOWER) TAD (-200 /MOVE 200 LOCATIONS JMS I (MOVIT CDF 20 /FROM FIELD 2 BLK66L /FIRST HALF OF BLOCK 66 BUFFER CDF 20 /TO FIELD 2 BLK0L /1ST HALF OF NEW BLOCK 0 //MOVE BOOTSTRAP TO BLOCK 0 (LOWER) TAD BOOTST /GET START OF BOOTSTRAP LOCATION DCA MVBT0 /SAVE IT FOR BLOCK 0 MOVE CDF 10 /NO OF LOCATIONS IS IN FIELD 1 TAD I BOOTLN /GET THE LENGTH OF THE BOOTSTRAP CDF 30 JMS I (MOVIT CDF 10 /FROM FIELD 1 MVBT0, 0 /STARTING AT START OF BOOTSTRAP CDF 20 /TO FIELD 2 BLK0L /AT THE START OF BLOCK 0 BUFFER //MOVE 47 LOCATIONS OF THE BOOTSTRAP TO BLOCK 66(LOWER) TAD BOOTST /GET START BOOTSTRAP LOCATION LOCATION AGAIN DCA MVBT66 /SAVE IT FOR BLOCK 66 MOVE TAD (-47 /MOVE 47 LOCATIONS JMS I (MOVIT CDF 10 /FROM FIELD 1 MVBT66, 0 /STARTING AT BEGINNING OF BOOTSTRAP CDF 20 /TO FIELD 2 BLK66L /STARTING AT BEGINNING OF BLOCK 66 BUFFER //MOVE 1ST PAGE OF NEW HANDLER TO NEW BLOCK 0 (UPPER) TAD (-135 /MOVE 135 LOCATIONS JMS I (MOVIT CDF 10 /FROM FIELD 1 BUFHN+207 /FROM THE 1ST PAGE OF THE NEW HANDLER CDF 20 /TO FIELD 2 BLK0U+7 /2ND HALF OF NEW BLOCK 0 BUFFER //MOVE 2ND PAGE OF NEW HANDLER TO NEW BLOCK 66 (UPPER) TAD (-174 /MOVE 174 LOCATIONS JMS I (MOVIT CDF 10 /FROM FIELD 1 BUFHN+400 /START OF 2ND PAGE OF HANDLER CDF 20 /TO FIELD 2 BLK66U /2ND HALF OF NEW BLOCK 66 BUUFER //SET LAST FOUR LOCATIONS OF BLOCK 66 UPPER TO ZERO CLA /CLEAR AC CDF 20 DCA I (BLK66U+174 /CLEAR LOCATION 174 DCA I (BLK66U+175 /CLEAR LOCATION 175 DCA I (BLK66U+176 /CLEAR LOCATION 176 DCA I (BLK66U+177 /CLEAR LOCATION 177 JMP I CHG066 //ALL THESE LOCATIONS ARE IN REFERENCE TO //THE BLOCK 0 AND BLOCK 66 BUFFERS BOOTLN, 0 /BOOTSTRAP LENGTH LOCATION BOOTST, 0 /LOCATION OF START OF BOOTSTRAP SYSDCB, BLK66L+160 /LOCATION OF SYS DCB WORD DSKDCB, BLK66L+161 /LOCATION OF DSK DCB WORD DHRPTR, BLK66L+47 /LOC. IN DHR TABLE, INITIALLY TO FIRST LOC. DHRLEN, -15 /NO. OF LOC. TO ZERO IN DHR TABLE PAGE //ROUTINE TO UPDATE BLOCK 1 //THIS BLOCK MUST BE UPDATED TO SHOW THAT THERE IS //ONLY ONE FILE ON THE DEVICE NAMELY AN EMPTY ONE //THE LENGTH OF THE REMAINING SPACE THERE //THIS IS ONLY DONE UPON REQUEST //THE DEFAULT IS TO NOT ZERO THE DIRECTORY UPD1, 0 CDF 30 CIF 0 JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER 0220 /READ 1 BLOCK INTO FIELD 2 FILBUF /STARTING AT LOCATION FILBUF 1 /FROM BLOCK 1 JMP I (F3ERR /ERROR BRANCH TAD FLBUFF /GET LOCATION 0 OF BUFFER DCA UPDLOC /STORE IT STA /GET A MINUS ONE IN AC CDF 20 /BE SURE TO STORE INFO IN FIELD 2 DCA I UPDLOC /SAVE IN MINUS NUMBER OF FILES SPOT ISZ UPDLOC /SET UP FOR LOCATION 1 IN BUFFER TAD (70 /GET START OF FILE STORAGE BLOCK DCA I UPDLOC /SAVE IT ISZ UPDLOC /SET UP FOR LOEVLEN /GET THE DEVICE LENGTH TAD (-70 /SUBTRACT 70 FROM IT CIA /MAKE IT A MINUS DCA I UPDLOC /SAVE MINUS NO. OF BLOCKS FOR FILE STORAGE CDF 30 CIF 0 JMS I NEWDEV /CALL OUTPUT DEVICE HANDLER 4220 /WRITE 1 BLOCK FROM FIELD 2 FILBUF /STARTING AT LOCATION FILBUF 1 /TO BLOCK 1 JMP I (F3ERR1 /ERROR BRANCH JMP I UPD1 PAGE //MOVIT MOVES CORE AROUND (CALLABLE FROM ANY FIELD) // TAD (-# OF LOCS TO MOVE // JMS MOVE // CDF FROM FIELD // FROM BUFFER LOCATION START // CDF 'TO' FIELD // TO BUFFER MOVIT, 0 DCA MVCT /STORE # OF LOCATIONS TO MOVE RDF /FIND OUT FIELD TO RETURN TO TAD (CIF CDF /ADD IN A FIELD CHANGE INSTRUCTION DCA MOVRET /SAVE THE FIELD CHANGE INSTRUCTION TAD I MOVIT /GET DATA FIELD TO READ FROM INSTRUCTION DCA MVCDF2 /SAVE IT ISZ MOVIT /POINT TO INPUT BUFFER VALUE TAD I MOVIT /GET START OF BUFFER TO MOVE DCA MVTM1 /SAVE IT ISZ MOVIT /POINT TO OUTPUT DATA FIELD INSTRUCTION TAD I MOVIT /GET THE INSTRUCTION DCA MVDF /SAVE IT ISZ MOVIT /POINT TO OUTPUT BUFFER VALUE TAD I MOVIT /GET START OF BUFFER TO DEPOSIT IN DCA MVTM2 /SAVE IT ISZ MOVIT /POINT TO RETURN LOCATION TAD MVCT /GET # OF LOCATIONS TO MOVE SNA CLA /ANY LOCATIONS TO MOVE JMP MOVRET /NO, LET'S GET OUT OF HERE /YES, LET'S MOVE THEM MVCDF2, CDF 0 /GETS ALTERED TO INPUT FIELD INSTRUCTION TAD I MVTM1 /READ A LOCATION MVDF, HLT /GETS ALTERED TO OUTPUT FIELD INSTRUCTION DCA I MVTM2 /PUT THE VALUE IN THE OUTPUCATION 2 IN BUFFER DCA I UPDLOC /SET LINK TO NEXT SEGMENT TO ZERO ISZ UPDLOC /SET UP FOR LOCATION 3 DCA I UPDLOC /SET POINTER FOR TENTATIVE FILES TO 0 ISZ UPDLOC /SET UP FOR LOCATION 4 STA /1 ADDITIONAL INFO WORDS USED FOR DATE DCA I UPDLOC ISZ UPDLOC /SET UP FOR LOCATION 5 DCA I UPDLOC /ZERO HERE MEANS EMPTY FILE ISZ UPDLOC /SET UP FOR LOCATION 6 TAD DRTMSG /GET MESSAGE POINTER DCA POINT /SAVE IT ISZ PRTMSG NOP TTYMOR, TAD I POINT /GET TWO CHARACTERS BSW /BYTE SWAP AND K77 /MASK OUT SECOND CHARACTER - BITS 0-5 SNA /ARE BITS 6-11 = ZERO JMP I PRTMSG /YES, END OF MESSAGE JMS BLDCHR /NO, PRINT THE CHARACTER TAD I POINT /GET SAME TWO CHARACTERS AGAIN AND K77 /MASK OUT FIRST CHARACTER SNA /ARE BITS 6-11 = ZERO JMP I PRTMSG /YES, END OF MESSAGE JMS BLDCHR /NO, PRINT THE CHARACTER ISZ POINT /INCREMENT MESSAGE POINTER JMP TTYMOR /GET NEXT TWO CHARACTERS JMP I PRTMSG /END OF MESSAGE BLDCHR, 0 /ROUTINE TO BUILD CHARACTER DCA CHAR /STORE THE 6-BIT CHARACTER CODE TAD CHAR /GET IT BACK AND K40 /IS IT GREATER THAN 40 SNA CLA /NO TAD K100 /YES, SET UP FOR 300 CODE TAD K200 /SET UP FOR 200 CODE TAD CHAR /GET THE CHARACTER BACK JMS CHROUT /OUTPUT THE CHARACTER CLA CLL JMP I BLDCHR CHROUT, 0 /ROUTINE TO OUTPUT THE CHARACTER TLS /OUTPUT THE CHARACTER TSF /SKIP ON CLEAR FLAG JMP .-1 CLA CLL /CLEAR THE CHARACTER OUT OF THE AC JMP I CHROUT //ROUTINE TO ASK A QUESTION //REQUIRING A ONE CHARACTER ANSWER //AND TO ACCEPT THE ANSWER //ANSWER IS RETURNED IN THE AC ASKER, 0 TAD I ASKER /FIND THE MESSAGE POINTER DCA MSGPTR /STORE IT ISZ ASKER /SET UP ASKER TO EXIT TO THE RIGHT LOCATION NOP JMS PRTMSG /OUTPUT THE MESSAGE MSGPTR, 0 //ACCEPT THE ANSWER CLA CLL KSF /SKIP IF KEYBOARD NOT READY JMP .-1 /LOOP TILL WE GOT THE ANSWER KRT LOCATION ISZ MVTM1 /BUMP POINTER TO INPUT LOCATION ISZ MVTM2 /BUMP POINTER TO OUTPUT LOCATION ISZ MVCT /BUMP NUMBER OF LOCATIONS TO MOVE JMP MVCDF2 /YES, DO NEXT LOCATION MOVRET, HLT /GETS ALTERED TO RETURN TO CALLING FIELD JMP I MOVIT MVCT, 0 MVTM1, 0 MVTM2, 0 PAGE //ROUTINE TO PRINT MESSAGES PRTMSG, 0 CLL CLA /CLEAR AC AND LINK TAD I P IS A REQUEST TO BOOT BOOTIT, 0 //SAVE THE DATE AND BATCH INDICATOR CDF 10 TAD I DATEWD /GET THE DATE WORD DCA SAVDAT /SAVE IT CDF 0 TAD I BCHIND /GET THE BATCH INDICATOR WORD DCA SAVBAT /SAVE IT CDF 30 //ROUTINE TO READ IN BLOCK 0 AND 66 //READ IN BLOCK 0 CDF 30 CIF 0 JMS I NEWDEV /CALL NEW SYSTEM DEVICE HANDLER 0220 /READ 1 BLOCK INTO FIELD 2 BLK0L /STARTING AT BLOCK 0 BUFFER 0 /FROM BLOCK 0 JMP I (F3ERR /ERROR BRANCH //READ IN BLOCK 66 CDF 30 CIF 0 JMS I NEWDEV /CALL NEW SYSTEM DEVICE HANDLER 0220 /READ 1 BLOCK FROM FIELD 2 BLK66L /STARTING AT BLOCK 66 BUFFER 66 /FROM BLOCK 66 JMP I (F3ERR /ERROR BRANCH //MOVE FIELD 0 CODE TO FIELD 0 TAD (-200 /MOVE 200 LOCATIONS JMS I (MOVIT CDF 20 /FROM FIELD 2 BLK0U /FROM THE UPPER PART OF BLOCK 0 CDF 0 /TO FIELD 0 MONIT /STARTING AT 7600 //MOVE FIELD 1 CODE TO FIELD 1 TAD (-200 /MOVE 200 LOCATIONS JMS I (MOVIT CDF 20 /FROM FIELD 2 BLK66L /STARTING AT BEGINNING OF BLOCK 66 CDF 10 /TO FIELD 1 MONIT /BEGINNING AT 7600 //MOVE FIELD 2 CODE TO FIELD 2, JUST IN CASE TAB /GET THE ANSWER AND (137 /MASK OUT LC BIT TAD K200 /AND CONVERT TO 8 BIT TAD KC203 /CHECK FOR A CTRL C SNA /WAS IT A CTRL C? JMP OUT /YES, GET BACK TO MONITOR TAD K203 /SET THE AC TO THE CHARCTER VALUE AGAIN DCA CHAR /STORE THE ANSWER TAD CHAR /GET IT BACK JMS CHROUT /PRINT IT BACK JMS OCRLF /OUTPUT A CRLF TAD CHAR /GET IT AGAIN JMP I ASKER /EXIT //ROUTINE TO OUTPUT CRLF AFTER A MESSAGE OCRLF, 0 TAD K212 /GET A LINEFEED CODE JMS CHROUT /OUTPUT IT TAD K215 /GET A CARRAIGE RETURN CODE JMS CHROUT /OUTPUT IT JMP I OCRLF //ROUTINE TO JUMP OUT ON A CTRL C OUT, CIF CDF 0 JMP I (MONIT5 PAGE //ROUTINE TO BOOT THE NEW SYSTEM DEVICE //THIS IS ONLY DONE UPON REQUEST //THE DEFAULT/SETUP.PA /*************************************************************** / / C O P Y R I G H T / / Copyright (C) 1982 / by / Digital Equipment Corporation, Maynard, Mass. / / This software is furnished under a license and may be used and / copied only in accordance with the terms of such license and / with the inclusion of the above copyright notice. This / software or any other copies thereof may not be provided or / otherwise made available to any other person. No title to and / ownership of the software is hereby transferred. / / The information in this software is subject to change without / notice and should not be construed as a commitment by Digital / Equipment Corporation. / / DIGI