!***** ***** !***** DARTMOUTH TIME--SHARING SYSTEM ***** !***** DATANET-30 EXECUTIVE PROGRAM ***** !***** AUTHOR--MICHAEL D. BUSCH ***** !***** ***** !PHASE FOUR--FORTY TELETYPES ! --NEW COMMUNICATIONS ! --LINE DISCIPLINE !UPDATED OCT. 5, 1965 - 4PM - [RMM] !*************** MEMORY MAP *************** !--LOCATIONS-- ----------USE------------ ! 0 377 COMMON CONSTS + LINKAGES ! 400 477 64-WD REGION SAVED ON DSU ! 500 577 64-WORD DISK BUFFER ! 600 777 ***** NOT USED ***** ! 1000 6777 CHANNEL TABLES ! 7000 7777 TABLES !10000 13777 REAL-TIME CODING !14000 21777 SPARE-TIME CODING !22000 23777 DISK BUFFER !24000 37777 BUFFERS (LAST ONE MUST NOT ! BE USED) STL!COMMON BANK CONSTANTS AND FLAGS TTL!DATANET-30 EXECUTIVE, COMMON MEMORY SECTION ORG 0 IND 0!INTERRUPT LINK IND INTER OCT 0 OCT 0!CONTROLLER SELECTOR CONTROL WORDS OCT 0 OCT 0 !COMMON BANK CONSTANS ONE:OCT 1 MONE:OCT 777777 TWO:OCT 2 MTWO:OCT 777776 THREE:OCT 3 FOUR:OCT 4 FIVE:OCT 5 MFIVE:OCT 777773 SIX:OCT 6 SEVEN:OCT 7 MSEVEN:OCT 777771 EIGHT:OCT 10 NINE:OCT 11 STAT2:OCT 100 STAT4:OCT 200 STAT6:OCT 300 OM200:OCT 777600 OM300:OCT 777500 OM276:OCT 777502 IMSK12:OCT 777700 M77:OCT 77 M7777:OCT 7777 SIXTY:OCT 60 IZONE:OCT 600000 CRAW2:OCT 510100 PREPOS:OCT 0!DISK ADDRESS FOR -SDSKR- GOES HERE START:DEC TTABLE STERM:DEC ETABLE EDI:ALF EDI !SPARE-TIME TASK LIST POINTERS N:IND TTABLE!POINTS TO MOST RECENTLY INSERTED TASK IN LIST C:IND TTABLE!POINTS TO TASK IN LIST CURRENTLY BEING DONE !COMMON BANK FLAGS DKFLG1:OCT 0!SPARE-TIME DISK PROTECT FLAG DKFLG2:OCT 0!235 PRIORITY DISK FLAG DUMFL:OCT 0!FLAG INDICATES THAT THE 235 IS IN THE PROCESS !OF DUMPING THE CURRENT PROBLEM STOPF:OCT 0!FLAG TO SUPPRESS COUNTING OF RUNNING TIME RFLAG:OCT 777777!FLAG ELIMINATES REDUNDANT DISK RELINQUISHES PARAF:OCT 0!FLAG INDICATES NUMBER OF DIGITS IN AN OCTAL !PARAMETER KLISTF:OCT 0!DISK READ/WRITE AREA PROTECT BFLAG:OCT 0!FLAG TO SUPPRESS CIU CYCLES DURING BOOTSTRAP WSVCF:OCT 0!SPECIAL SERVICE FLAG (1=WARN, 2=DIAL, 3=MON) WTTYF:OCT 0!FLAG SAYS WHICH TTY IS BEING SP SERVICED SPROB:OCT 1!POINTS TO TELETYPE CURRENTLY RUNNING IN 235 RTIME:OCT 0!REAL TIME FROM 235 OCT 0 MINDON:OCT 0!STORE FOR THE MINIMUM VALUE OF $DONE LSCUT:DEC -30!LONG-SHORT CUTOFF FOR PROGRAM RUNS STL!COMMON BANK SUBROUTINE LINKAGES TTL!DATANET-30 EXECUTIVE, COMMON MEMORY SECTION !WHICH ALLOW THEM TO BE CALLED FROM !ANY BANK STEXEC:IND STEX1!TERMINAL EXIT TO SPARE-TIME EXECUTIVE LOOP STING:IND STING1!NO-GO EXIT TO SPARE-TIME EXECUTIVE LOOP BETA:IND 0!INSERT IN TASK LIST FROM SPARE TIME IND BETA1 BOOTA:IND 0!BOOTSTRAP ROUTINE--PART 1 IND BOOTA1 BOOTB:IND 0!BOOTSTRAP ROUTINE--PART 2 IND BOOTB1 BOOTC:IND 0!BOOTSTRAP ROUTINE--MACHINE INITIATED ENTRY IND BOOTC1 CATA:IND 0 IND CATA1!CATALOG ROUTINE--PART 1 CATB:IND 0 IND CATB1!CATALOG ROUTINE--PART 2 CATC:IND 0 IND CATC1 CDIV:IND 0!DIVIDE ROUTINE IND CDIV1 CIUR:IND 0!C.I.U. RECEIVE SUBROUTINE IND CIUR1 CIUX:IND 0!C.I.U. TRANSMIT SUBROUTINE IND CIUX1 CIUXS:IND 0!C.I.U TRANSMIT SUBROUTINE (SAVE C-REG) IND CIUXS1 CMPLT:IND 0!COMPLETE PARTIAL INPUT BUFFER, WRITE DISK IND CMPLT1 CNTRL:IND 0!TEST FOR CONTROL TELETYPE IND CNTRL1 CTRLA:IND 0!TEST FOR SPECIAL CONTROL TELETYPE IND CTRLA1 CONV:IND 0!CONVERT BINARY TO ANY BASE (OCTAL/DECIMAL) IND CONV1 CTCMP:IND 0!SAME AS CMPLT, EXCEPT NO CHECK FOR WAIT IND CTCMP1 DIAL:IND 0!DIAL IND DIAL1 DIB:IND 0!INPUT BUFFER TO DISK ROUTINE IND DIB1 DIBS:IND 0!INPUT BUFFER TO DISK ROUTINE (SUBROUTINE) IND DIBS1 DISC:IND 0!DISCONNECT DATA SET IND DISC1 DOB:IND 0!DISK TO OUTPUT BUFFER ROUTINE IND DOB1 DSKCH:IND 0!DISK AVAILABILITY CHECK IND DSKCH1 DSKOP:IND 0!DISK OPERATION (ERROR CHECKED) IND DSKOP1 DUMP:IND 0!MEMORY DUMP (DEBUGGING OPTION) IND DUMP1 DUMPS:IND 0!MEMORY DUMP--CONTINUATION ENTRY POINT IND DUMPS1 EDIT:IND 0!EDIT ROUTINE IND EDIT1 ERROR:IND 0!TYPE OUT ERROR MESSAGE IND ERROR1 GDBYE:IND 0!GOODBYE IND GDBYE1 HA:IND 0!HELLO SEQUENCE--PROCESS USER NUMBER IND HA1 HB:IND 0!HELLO SEQUENCE--PROCESS SYSTEM NAME IND HB1 HCHEK:IND 0!CHECK FOR -STOP- OR -HELLO- IND HCHEK1 HELLO:IND 0!HELLO SEQUENCE--INITIALIZE IND HELLO1 INPTA:IND 0!REAL-TIME INPUT ROUTINE--PART1 IND INPTA1 INPTB:IND 0!REAL-TIME INPUT ROUTINE--PART2 IND INPTB1 INPTC:IND 0!REAL-TIME INPUT ROUTINE--PART3 IND INPTC1 INSERT:IND 0!INSERT TASK IN SPARE-TIME TASK LIST IND INS IOUT:IND 0!INTERMEDIATE OUTPUT SETUP ROUTINE IND IOUT1 KEY:IND 0!KEYBOARD IND KEY1 KOM:IND 0!SAVE/OLD/UNSAVE/CATALOG COMMON POINT IND KOM1 LNGTH:IND 0!LENGTH INQUIRY IND LNGTH1 LISTA:IND 0!LIST--PART1 IND LISTA1 LISTB:IND 0!LIST--PART2 IND LISTB1 LISTC:IND 0!LIST--PART3 IND LISTC1 MESSG:IND 0!ALPHABETIC MESSAGE OUTPUT SUBROUTINE IND MESSG1 MONIT:IND 0!MONITOR IND MONIT1 MORE:IND 0!RETURN FOR MORE 235 TIME IND MORE1 NEWA:IND 0!NEW--PART 1 IND NEWA1 NEWB:IND 0!NEW--PART 2 IND NEWB1 NOTA:IND 0!NOTICE--PART 1 IND NOTA1 NOTB:IND 0!NOTICE--PART 2 IND NOTB1 NUMA:IND 0!NUMBER--PART 1 IND NUMA1 NUMB:IND 0!NUMBER--PART 2 IND NUMB1 OCT:IND 0!OCTAL INSERT ROUTINE (DEBUGGING OPTION) IND OCT1 OCTAL:IND 0!OCTAL INSERT SETUP ROUTINE IND OCTAL1 OFF:IND 0!OFF IND OFF1 OLDA:IND 0!OLD--PART 1 IND OLDA1 OLDB:IND 0!OLD--PART 2 IND OLDB1 ON:IND 0!ON IND ON1 OUTPT:IND 0!OUTPUT FROM DISK SETUP ROUTINE IND OUTPT1 PICK:IND 0!PICK UP PARAMETERS FROM INPUT LINE IND PICK1 RENA:IND 0!RENAME--PART 1 IND RENA1 RENB:IND 0!RENAME--PART2 IND RENB1 RESET:IND 0!RESET FLAGS AND POINTERS, DELETE TASKS IND RESET1 RRF:IND 0!READ RANDOM FILE IND RRF1 RUN:IND 0!RUN IND RUN1 RUNCH:IND 0!CHECK IF RUNNING IND RUNCH1 SAVEA:IND 0!SAVE--PART 1 IND SAVEA1 SAVEB:IND 0!SAVE--PART 2 IND SAVEB1 SCRCH:IND 0!SCRATCH IND SCRCH1 SDSKR:IND 0!DISK RELINQUISH SUBROUTINE IND SDSKR1 SPINP:IND 0!SET SPECIAL INPUT FLAG SUBROUTINE IND SPINP1 STAT:IND 0!STATUS REQUEST IND STAT1 STOP:IND 0!STOP IND STOP1 SWAIT:IND 0!WAIT FOR C.I.U. TO COME READY IND SWAIT1 SYSA:IND 0!ENTER NEW SYSTEM NAME--PART 1 IND SYSA1 SYSB:IND 0!ENTER NEW SYSTEM NAME--PART 2 IND SYSB1 TAPE:IND 0!TAPE IND TAPE1 TERM:IND 0!TERMINATE RUN AND OUTPUT MESSAGE IND TERM1 TEST:IND 0!TEST IND TEST1 TTY:IND 0!TELETYPE CONDITION INQUIRY IND TTY1 TYPE:IND 0!TYPE -READY.- IND TYPE1 UCHEK:IND 0!TEST FOR VALID USER NUMBER IND UCHEK1 UNSAV:IND 0!UNSAVE IND UNSAV1 USERS:IND 0!INTERROGATE NUMBER OF USERS IND USERS1 WAIT:IND 0!CHECK FOR WAIT IND WAIT1 WARN:IND 0!WARN IND WARN1 WRF:IND 0!WRITE RANDOM FILE IND WRF1 ! -- COUNTERS -- ! THE FOLLOWING MEMORY LOCATIONS ARE USED !TO KEEP TRACK OF CERTAIN SIGNIFICANT FACTS !WITHIN THE DATANET 30. EACH LOCATION IS RESET !ON EVERY HARDWARE LOAD, AND COUNTS THE !SPECIFIED QUANTITY, THE NUMBER FOLLOWING EACH !COUNTER DESCRIPTION IS THE SEQUENCE NUMBER OF !THE CARD WHICH INCREMENTS THE GIVEN COUNTER, ! IT IS PLANNED THAT THESE COUNTERS WILL BE !ONLY TEMPORARY. THEREFORE EVERY CARD WHICH !REFERENCES THESE LOCATIONS IS TAGGED WITH !THREE ASTERIKS IN COLUMNS 73-75 OF THE CARD!!SIC !THERE IS EXACTLY ONE INSTRUCTION WHICH !REFERENCES EACH OF THESE COUNTERS. !SEQUENCE NUMBERS FOLLOW EACH DESCRIPTION !AND ARE NUMBERS OF THE REFERENCING CARDS !AS OF 8/4/65. #CHI:DEC 0!INPUT CHARACTERS (24130) DEC 0!SECOND HALF OF DOUBLE LENGTH CHI COUNTER #CHO:DEC 0!OUTPUT CHARACTERS (22880) DEC 0!SUPPLEMENTARY SECOND HALF CRI COUNTER #CRI:DEC 0!CARRAIGE RETURNS IN (25330)!!SIC #CRO:DEC 0!CARRAIGE RETURNS OUT (23630)!!SIC #COM:DEC 0!RECOGNIZED COMMAND LINES (25900) #NCM:DEC 0!INCORRECT COMMAND LINES (25850) #DSK:DEC 0!DISK OPERATIONS PERFORMED (36820) #RUN:DEC 0!RUN COMMANDS GIVEN (39990) #OLD:DEC 0!OLD COMMANDS GIVEN (41040) #LST:DEC 0!LIST COMMANDS GIVEN (38660) #CAT:DEC 0!CATALOG COMMANDS GIVEN (41360) #SAV:DEC 0!SAVE COMMANDS GIVEN (43440) #UNS:DEC 0!UNSAVE COMMANDS GIVEN (43530) #TST:DEC 0!TEST COMMANDS GIVEN (44290) #STP:DEC 0!STOP COMMANDS GIVEN (49700) #INPT:DEC 0!CALLS FOR INPUT #NEW:DEC 0!NEW COMMANDS #HEL:DEC 0!HELLO COUNT !END COUNTERS LOCATIONS !64-WORD REGION SAVED ON DISK PERIODICALLY LOC 400 DLONG:BSS 1!DISK ASSIGNMENT POINTER, LONG PROGRAMS BSS 1!SPARE - NOT USED AT PRESENT (8/3/65) DATE:BSS 1!CURRENT CODED DATE IMAGE:BSS 5!ALPHAMERIC DATE FOR HEADING LINES TTYMIN:BSS 1!MIN CYCLES LEFT FOR SPARE-TIME AFTER TTY SVC CIUMIN:BSS 1!MIN CYCLES LEFT FOR SPARE-TIME AFTER CIU SVC NOTICE:BSS 35!NOTICE MESSAGE DADD:BSS 6!POINTERS TO AVAILABLE DISK BLOCKS OF GIVEN SI !64-WORD BUFFER FOR RRF AND WRF LOC 500 DBUF:BSS 64 STL!CHANNEL TABLE AREA DEFINITIONS TTL!DATANET-30 EXECUTIVE, COMMON MEMORY SECTION LOC 1000 $SW1:BSS 64!SCAN WORD 1 $WORD1:BSS 64!USER NUMBER, HIGH-ORDER END $SW2:BSS 64!SCAN WORD 2 $WORD2:BSS 64!USER NUMBER,LOW-ORDER END $SW3:BSS 64!SCAN WORD 3 $WORD3:BSS 64!PROBLEM NAME, HIGH-ORDER END $WORD4:BSS 64!PROBLEM NAME, LOW ORDER END $WORD5:BSS 64!STARTING DISK ADDRESS $WORD6:BSS 64!ENDING DISK ADDRESS $CNFL:BSS 64!FLAG INDICATES CONTINUE COMPUTING $DONE:BSS 64!FLAG INDICATES A TELETYPE HAS BEEN SERVICED $DPOS3:BSS 64!INPUT DISK POINTER $DPOS4:BSS 64!OUTPUT DISK POINTER $HFLAG:BSS 64!SPECIAL INPUT FLAG $IDLOC:BSS 64!INPUT BEGINNING-OF-LINE POINTER $IF:BSS 64!FLAG INDICATES INPUT DISK-BUFFER NOT READY $IFLAG:BSS 64!FLAG INDICATES INPUT ROUTINE BACKED UP $INCH:BSS 64!INPUT BUFFER CHARACTER POINTER $INLOC:BSS 64!INPUT BUFFER WORD POINTER $INSTD:BSS 64!INPUT DISK BUFFER ADDRESSES $IXFL:BSS 64!FLAG INDICATES BUFFER NEEDS SERVICING $KFLAG:BSS 64!FLAG INDICATES 35ASR INPUTTING PAPER TAPE $KOMFL:BSS 64!SAVE-OLD-UNSAVE-CATALOG FLAG $LCNT:BSS 64!COUNT OF IDLE LINE TIME $LHFL:BSS 64!FLAG INDICATES HEADING LINE NEEDED $LINE1:BSS 64!LINE NUMBER, HIGH-ORDER END $LINE2:BSS 64!LINE NUMBER, LOW-ORDER END $LSTT:BSS 64!LINE STATUS $MSGL:BSS 64!ERROR MESSAGE TABLE $OCH:BSS 64!OUTPUT BUFFER CHARACTER POINTER $ODC:BSS 64!OUTPUT ROUTINE DELAY COUNTER $OF:BSS 64!FLAG INDICATES OUTPUT BUFFER NOT READY $OLOC:BSS 64!OUTPUT BUFFER WORD POINTER $OUT:BSS 64!FLAG INDICATES OUTPUT AFTER SWAP $OUTFF:BSS 64!FLAG INDICATES D-30 IS OUTPUTTING $PRIOR:BSS 64!PROBLEM PRIORITIES $QUEUE:BSS 64!FLAG INDICATES WHICH QUEUE A TELETYPE IS IN $RTIME:BSS 64!RUNNING TIME INDICATOR $SAVSY:BSS 64!SAVED SYSTEM NAME FOR USE WITH EDIT SYSTEM $SPACE:BSS 64!NUMBER OF SPACES TO BE SLEWED AFTER OUTPUT $STAND:BSS 64!STANDARD AREA DISK ADDRESSES $STAT:BSS 64!PROBLEM STATUSES $SWLEN:BSS 64!SWAP LENGTH FOR RUNNING PROGRAMS $SYSTM:BSS 64!SYSTEM IDENTIFIER $TFLAG:BSS 64!FLAG INDICATES TEST MODE $TYP:BSS 64!FLAG INDICATES PARTIAL INPUT BUFFERLOAD STL!CHANNEL TABLE ENTRIES TTL!DATANET-30 EXECUTIVE, COMMON MEMORY SECTION ORG $SW1!SCAN WORD ONE INITIALIZED TO MARK-HOLD OCT 0 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 OCT 7777 ORG $WORD1 ALF ABO ORG $SW2!SCAN WORD TWO INDICATES EIGHT-LEVEL CODE OCT 0 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 307777 OCT 347777!THIS ENTRY TERMINATES HARDWARE SCAN OCT 307777 OCT 307777 OCT 307777 OCT 347777!THIS ENTRY TERMINATES HARDWARE SCAN ORG $WORD2 ALF RT ORG $WORD3 ALF BAT ORG $WORD4 ALF CH ORG $DPOS3!ENDING DISK ADDRESS INITIALIZED AT $STAND OCT 0 OCT 057000 OCT 060000 OCT 061000 OCT 117000 OCT 120000 OCT 121000 OCT 157000 OCT 160000 OCT 161000 OCT 217000 OCT 220000 OCT 221000 OCT 257000 OCT 260000 OCT 261000 OCT 317000 OCT 320000 OCT 321000 OCT 357000 OCT 360000 OCT 361000 OCT 417000 OCT 420000 OCT 421000 OCT 457000 OCT 460000 OCT 461000 OCT 517000 OCT 520000 OCT 521000 OCT 557000 OCT 560000 OCT 561000 OCT 617000 OCT 620000 OCT 621000 OCT 657000 OCT 660000 OCT 661000 OCT 717000 OCT 720000 OCT 721000 OCT 757000 OCT 760000 ORG $IDLOC OCT 0 OCT 24000 OCT 24200 OCT 24400 OCT 24600 OCT 25000 OCT 25200 OCT 25400 OCT 25600 OCT 26000 OCT 26200 OCT 26400 OCT 26600 OCT 27000 OCT 27200 OCT 27400 OCT 27600 OCT 30000 OCT 30200 OCT 30400 OCT 30600 OCT 31000 OCT 31200 OCT 31400 OCT 31600 OCT 32000 OCT 32200 OCT 32400 OCT 32600 OCT 33000 OCT 33200 OCT 33400 OCT 33600 OCT 34000 OCT 34200 OCT 34400 OCT 34600 OCT 35000 OCT 35200 OCT 35400 OCT 35600 OCT 36000 OCT 36200 OCT 36400 OCT 36600 ORG $IF!INPUT BUFFERS INITIALIZED AS READY OCT 0 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 ORG $INCH!INPUT CHARACTER POINTER INITIALIZED AT LEFT OCT 0 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 ORG $INLOC OCT 0 OCT 24000 OCT 24200 OCT 24400 OCT 24600 OCT 25000 OCT 25200 OCT 25400 OCT 25600 OCT 26000 OCT 26200 OCT 26400 OCT 26600 OCT 27000 OCT 27200 OCT 27400 OCT 27600 OCT 30000 OCT 30200 OCT 30400 OCT 30600 OCT 31000 OCT 31200 OCT 31400 OCT 31600 OCT 32000 OCT 32200 OCT 32400 OCT 32600 OCT 33000 OCT 33200 OCT 33400 OCT 33600 OCT 34000 OCT 34200 OCT 34400 OCT 34600 OCT 35000 OCT 35200 OCT 35400 OCT 35600 OCT 36000 OCT 36200 OCT 36400 OCT 36600 ORG $INSTD OCT 0 OCT 24000 OCT 24200 OCT 24400 OCT 24600 OCT 25000 OCT 25200 OCT 25400 OCT 25600 OCT 26000 OCT 26200 OCT 26400 OCT 26600 OCT 27000 OCT 27200 OCT 27400 OCT 27600 OCT 30000 OCT 30200 OCT 30400 OCT 30600 OCT 31000 OCT 31200 OCT 31400 OCT 31600 OCT 32000 OCT 32200 OCT 32400 OCT 32600 OCT 33000 OCT 33200 OCT 33400 OCT 33600 OCT 34000 OCT 34200 OCT 34400 OCT 34600 OCT 35000 OCT 35200 OCT 35400 OCT 35600 OCT 36000 OCT 36200 OCT 36400 OCT 36600 ORG $OCH!OUTPUT CHARACTER POINTER INITIALIZED LEFT OCT 0 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 OCT 2 ORG $OF!OUTPUT BUFFERS INITIALIZED AS READY OCT 0 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 OCT 777777 ORG $STAND!STANDARD AREA DISK ADDRESSES OCT 0 OCT 057000 OCT 060000 OCT 061000 OCT 117000 OCT 120000 OCT 121000 OCT 157000 OCT 160000 OCT 161000 OCT 217000 OCT 220000 OCT 221000 OCT 257000 OCT 260000 OCT 261000 OCT 317000 OCT 320000 OCT 321000 OCT 357000 OCT 360000 OCT 361000 OCT 417000 OCT 420000 OCT 421000 OCT 457000 OCT 460000 OCT 461000 OCT 517000 OCT 520000 OCT 521000 OCT 557000 OCT 560000 OCT 561000 OCT 617000 OCT 620000 OCT 621000 OCT 657000 OCT 660000 OCT 661000 OCT 717000 OCT 720000 OCT 721000 OCT 757000 OCT 760000 TTL!DATANET-30 EXECUTIVE, TABLES STL!OUTPUT CHARACTER TRANSLATION TABLE TTL!DATANET-30 EXECUTIVE, TABLES LOC 7000 !OUTPUT CHARACTER TRANSLATION TABLE OTABLE:OCT 7540 OCT 7542 OCT 7544 OCT 7546 OCT 7550 OCT 7552 OCT 7554 OCT 7556 OCT 7560 OCT 7562 OCT 7516 OCT 7564 OCT 7520 OCT 7566 OCT 7572 OCT 7670 OCT 7526 OCT 7602 OCT 7604 OCT 7606 OCT 7610 OCT 7612 OCT 7614 OCT 7616 OCT 7620 OCT 7622 OCT 7416 OCT 7534 OCT 7504 OCT 7576 OCT 7570 OCT -32 OCT 7532 OCT 7624 OCT 7626 OCT 7630 OCT 7632 OCT 7634 OCT 7636 OCT 7640 OCT 7642 OCT 7644 OCT -22 OCT 7510 OCT 7524 OCT -77 OCT 7574 OCT 7674 OCT 7500 OCT 7536 OCT 7646 OCT 7650 OCT 7652 OCT 7654 OCT 7656 OCT 7660 OCT 7662 OCT 7664 OCT 7424 OCT 7530 OCT 7522 OCT 7666 OCT 7672 OCT -00 STL!INPUT CHARACTER TRANSLATION TABLE TTL!DATANET-30 EXECUTIVE, TABLES ITABLE:OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -4 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -3 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -2!ESCAPE KEY EQUAL TO ALT MODE OCT -00 OCT -00 OCT -00 OCT -00 OCT 60 OCT 33 OCT 34 OCT 17 OCT 53 OCT 17 OCT 17 OCT 12 OCT 14 OCT 74 OCT 54 OCT 20 OCT 73 OCT 40 OCT 33 OCT 61 OCT 00 OCT 01 OCT 02 OCT 03 OCT 04 OCT 05 OCT 06 OCT 07 OCT 10 OCT 11 OCT 13 OCT 15 OCT 36 OCT 16 OCT 56 OCT 35 OCT 17 OCT 21 OCT 22 OCT 23 OCT 24 OCT 25 OCT 26 OCT 27 OCT 30 OCT 31 OCT 41 OCT 42 OCT 43 OCT 44 OCT 45 OCT 46 OCT 47 OCT 50 OCT 51 OCT 62 OCT 63 OCT 64 OCT 65 OCT 66 OCT 67 OCT 70 OCT 71 OCT 75 OCT 17 OCT 76 OCT 57 OCT -01 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -00 OCT -02 OCT -02 OCT -00 STL!KEY TO THE CATALOG TTL!DATANET-30 EXECUTIVE, TABLES LPCW3:BSS 0!DISK ADDRESSES OF CATALOG FILES OCT 061400 OCT 061440 OCT 061500 OCT 061540 OCT 061600 OCT 061640 OCT 121400 OCT 121440 OCT 121500 OCT 121540 OCT 121600 OCT 121640 OCT 161400 OCT 161440 OCT 161500 OCT 161540 OCT 161600 OCT 161640 OCT 221400 OCT 221440 OCT 221500 OCT 221540 OCT 221600 OCT 221640 OCT 261400 OCT 261440 OCT 261500 OCT 261540 OCT 261600 OCT 261640 OCT 321400 OCT 321440 OCT 321500 OCT 321540 OCT 321600 OCT 321640 OCT 361400 OCT 361440 OCT 361500 OCT 361540 OCT 361600 OCT 361640 OCT 421400 OCT 421440 OCT 421500 OCT 421540 OCT 421600 OCT 421640 OCT 461400 OCT 461440 OCT 461500 OCT 461540 OCT 461600 OCT 461640 OCT 521400 OCT 521440 OCT 521500 OCT 521540 OCT 521600 OCT 521640 OCT 561400 OCT 561440 OCT 561500 OCT 561540 OCT 561600 OCT 561640 OCT 621400 OCT 621440 OCT 621500 OCT 621540 OCT 621600 OCT 621640 OCT 661400 OCT 661440 OCT 661500 OCT 661540 OCT 661600 OCT 661640 OCT 721400 OCT 721440 OCT 721500 OCT 721540 OCT 721600 OCT 721640 OCT 761400 OCT 761440 OCT 761500 OCT 761540 OCT 761600 OCT 761640 OCT 761000 OCT 761040 OCT 761100 OCT 761140 OCT 761200 OCT 761240 OCT 760400 OCT 760440 OCT 760500 OCT 760540 STL!COMMAND TABLE TTL!DATANET-30 EXECUTIVE, TABLES !ICLST IS A TABLE OF ALL LEGAL SYSTEM COM- !MANDS TO THE DATANET-30 EXECUTIVE. THE !ENTRIES CONSIST OF-- ! 1. ALPHABETIC IDENTIFIER (BCD SHIFTED ! RIGHT ONE BIT) ! 2. CORRESPONDING SUBROUTINE BRANCH (BRS) ! TO BE INSERTED IN TASK LIST ICLST1:OCT 112323!BOOTSTRAP BRS BOOTA OCT 113412!BYE BRS GDBYE OCT 115071!CATALOG BRS CATA OCT 121450!DIAL BRS DIAL OCT 123222!DUMP BRS DUMP OCT 125214!EDIT BRS EDIT OCT 136323!GOODBYE BRS GDBYE OCT 141261!HELLO BRS HELLO OCT 211274!KEYBOARD BRS KEY OCT 215262!LENGTH BRS LNGTH OCT 215471!LIST BRS LISTA OCT 222322!MONITOR BRS MONIT OCT 225273!NEW BRS NEWA OCT 226331!NOTICE BRS NOTA OCT 227222!NUMBER BRS NUMA OCT 231171!OCTAL BRS OCTAL OCT 231313!OFF BRS OFF OCT 232152!OLD BRS OLDA OCT 232277!ON BRS ON OCT 245262!RENAME BRS RENA OCT 246453!RRF BRS RRF OCT 247222!RUN BRS RUN OCT 311072!SAVE BRS SAVEA OCT 311164!SCRATCH BRS SCRCH OCT 313150!STATUS BRS STAT OCT 313163!STOP BRS STOP OCT 313431!SYSTEM BRS SYSA OCT 313777!S BRS STOP OCT 315063!TAPE BRS TAPE OCT 315271!TEST BRS TEST OCT 317174!TTY BRS TTY OCT 322271!UNSAVE BRS UNSAV OCT 323112!USERS BRS USERS OCT 331064!WARN BRS WARN OCT 332453!WRF BRS WRF OCT 377777!(CAR. RET. ONLY) OCT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 OCT 377777!DUMMY ENTRY HLT 0 STL!REAL-TIME CONTROL LOOP TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION LOC 10000 !HARDWARE INTERRUPT, WHICH OCCURS EVERY TELE- !TYPE BIT-TIME (9 MS). -INTER- IS AN EXECU- !TIVE ROUTINE WHICH CALLS THE PROPER SERVICE !ROUTINES FOR TELETYPE INPUT/OUTPUT AND C.I.U. !FUNCTIONS. OUT OF THE ELEVEN BIT-TIMES IN A !CHARACTER-TIME, -INTER- DEVOTES EIGHT OF !THEM TO SERVICING TELETYPE INPUT/OUTPUT !(FOUR TELETYPES PER BIT-TIME), AND THE RE-!!SIC - REALLY 5 PER BIT-TIME, SEE BELOW !MAINING THREE TO COMMUNICATION WITH THE 235 !VIA THE C.I.U. INTER:STF SFF!STORE SPECIAL FLIP-FLOPS LDQ SCOUNT!LOAD Q-COUNTER FOR ANOTHER BIT-TIME (9 MS) STC STC!STORE A, B, AND C REGISTERS STD SAB SCN 1!HWE SCAN--SERVICE ALL BIT-BUFFER UNITS CMA 0!TEST FOR REAL-TIME MALFUNCTION-- AMA INSERT+1!WAS INTERRUPT DURING REAL TIME... BMI *+2!IF NOT, CONTINUE NORMALLY DIF 4!BUT IF SO, HARDWARE LOAD LDA SCT!LOOK AT NUMBER OF TELETYPE TO BE SERVICED BMI SCIU!IF IN COMPLEMENT FORM, C.I.U. CYCLE NEXT TRA A&,C!OTHERWISE, PLACE TLTYP NUMBER IN C-REGISTER LDA FIVE!SERVICE 5 TTY-S PER CYCLE STA SGR SLOOP:LDA WSVCF!SPECIAL SERVICE FLAG ON... BNZ WSVC,X!IF SO, GO TO SPECIAL SERVICE RTN LDA $LSTT BRU *+1,X INA *+1 BRU LS0 BRU LS1 BRU LS2 BRU LS3 BRU LS4 BRU LS5 !LINE DISCIPLINE !DESCRIPTION OF BIT BUFFER OPTIONS !BBU 931 !NES 5 0 - NO RING ! 1 - RING !NES 6 0 - CARRIER ON ! 1 - CARRIER OFF !DEF 3 SET DATA TERMINAL NOT READY !DEF 4 SET DATA TERMINAL READY !BBU 932 !NES 9 0 - NO RING ! 1 - RING !NES 6 0 - CARRIER OFF ! 1 - CARRIER ON !DEF 3 SET DATA TERMINAL NOT READY !DEF 4 SET DATA TERMINAL READY !LINE STATUS ROUTINES LS0:NES 9!NOBODY ON, COMPLETE IDLE !THE FOLLOWING INSTRUCTION WILL HAVE TO BE !CHANGED TO A BZE FOR THE 932 BBU BNZ SEXIT!IF NOT RINGING, EXIT DEF 4!SET DATA TERMINAL READY (ANSWER PHONE) ADO $LSTT!SET LS1 BRU SEXIT LS1:NES 6!NOBODY ON, DATA TERMINAL READY !THE FOLLOWING INSTRUCTION WILL HAVE TO BE !CHANGED TO A BZE FOR THE 932 BBU BNZ SBUMP!CARRIER OFF, SO BUMP $LCNT ADO $LSTT!SET LS2 BRU SEXIT LS2:NES 6!SOMEBODY ON, DATA TERMINAL READY, CARRIER ON !THE FOLLOWING INSTRUCTION WILL HAVE TO BE !CHANGED TO A BNZ FOR THE 932 BBU BZE SBUMP!CARRIER ON, SO BUMP $LCNT ADO $LSTT!SET LS3 STZ $LCNT BRU SEXIT LS3:NES 6!SOMEBODY ON, DATA TERMINAL READY, CARRIER OFF !THE FOLLOWING INSTRUCTION WILL HAVE TO BE !CHANGED TO A BZE FOR THE 932 BBU BNZ *+3 SBO $LSTT!SET LS2 BRU SEXIT LDA CBDISC!CARRIER BREAK DISCONNECT TIME CONSTANT BRU SBUMPS LS4:LDA DELAY!DELAY 3 SECONDS BEFORE SENDING THE EOT ADO $LCNT AAZ $LCNT BMI SEXIT LDA GEOT!NOW SENT THE EOT!!SIC - SHOULD BE "SEND" STA $SW1 DEF 7 STZ $LSTT BRU SEXIT LS5:BRU CIRC4X!THIS STATUS IS USED TO DISABLE SPECIFIC LINES GEOT:OCT 7410!TTY EOT CODE DELAY:DEC -30 SBUMP:BSS 0 !KEEP TRACK OF LINE TIME HERE IF DESIRED LDA SDISC!NORMAL DISCONNECT TIME CONSTANT SBUMPS:ADO $LCNT!BUMP IDLE TIME COUNTER AAZ $LCNT BMI SEXIT STZ $LCNT XCZ 1 BZE SEXIT BRS SINS!INSERT -GDBYE- TASK BRS GDBYE SEXIT:LDA $SW2!XMIT CHARACTER FLAG ON IN SCAN WORD 2... BMI CIRC1!IF SO, GO TO OUTPUT SERVICE ROUTINE CIRC3:LDZ $IFLAG!DID INPUT ROUTINE HAVE BUFFER TROUBLES... BNZ IMSG,X!IF SO, GO TRY AGAIN LDA $SW3!RECEIVE CHARACTER FLAG ON IN SCAN WORD 3... BMI CIRC2,X!IF SO, GO TO INPUT SERVICE ROUTINE CIRC4X:AIC 1!STEP TO NEXT TELETYPE XCZ TELET+1!HAS THE LAST TELETYPE BEEN SERVICED... BZE SVCALL!IF SO, WRAP AROUND AND C.I.U. CYCLE NEXT SBO SGR!OTHERWISE, HAVE SIX BEEN SERVICED!!SIC - SHOULD SAY FIVE BNZ SLOOP!IF NOT, GO SERVICE ANOTHER TELETYPE XCZ 31 BZE SCMPL!C.I.U. CYCLE NEXT TIME XCZ 16 BZE SCMPL!C.I.U. CYCLE NEXT TIME STC SCT!OTHERWISE, SAVE NEXT TELETYPE TO BE SERVICED BRU STTY SVCALL:PIC 61!ALL TELETYPES SERVICED, SO WRAP AROUND SL1 S&,Z!IF SWITCH 17 DOWN, DO NOT INTERRUPT 235 BMI *+2 DEF 9!API TO 235 EVERY CHARACTER TIME FOR BATCH PIC 1!WRAP AROUND TO TELETYPE 1 (0 IS PAPER TAPE) SCMPL:TRC C&,A!INDICATE C.I.U. CYCLE NEXT BY COMPLEMENTING STA SCT!TELETYPE NUMBER BEFORE SAVING IT STTY:TRC Q&,AB!UPDATE MINIMUM CYCLES COUNTER AMA TTYMIN BMI SREST CBM TTYMIN SREST:LDD SAB!RESTORE A, B, AND C REGISTERS LDC STC LDF SFF!RESTORE SPECIAL FLIP-FLOPS BRU 0,X!RETURN TO SPARE-TIME !REAL-TIME LOOP CONSTANTS WSVC:IND WSVCX CIRC2:IND CIRC2X IMSG:IND IMSGX SFF:OCT 0 SCOUNT:DEC 1240!NUMBER OF MACHINE CYCLES BETWEEN SCANS STC:OCT 0 SAB:OCT 0 OCT 0 SCT:OCT 0 TELET:EQU 40!SERVICE 40 TELETYPES AT PRESENT SGR:OCT 0!COUNT NUMBER OF TTYS SERVICED SDISC:DEC -6000!TEN MINUTE DISCONNECT (10THS OF A SECOND) CBDISC:DEC -100!TEN SECOND DISCONNECT (10THS OF A SECOND) STL!COMPUTER COMMUNICATIONS AND CONTROL ROUTINE TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION !COMMUNICATIONS BETWEEN THE DATANET-30 AND !THE 235 TAKE PLACE IN A BLOCK OF 235-CORE !CALLED THE MAILBOX. TWO LOCATIONS OF THE !MAILBOX ARE RESERVED FOR MESSAGES. THE REGU- !LAR MESSAGE LOCATION IS USED FOR MESSAGES !CONCERNING THE CURRENTLY-RUNNING PROBLEM. !THE SPECIAL MESSAGE LOCATION IS USED FOR !MESSAGES CONCERNING THE 235 PERIPHERALS AND !235 BACKGROUND PERIPHERAL TASKS. THE REST OF !THE MAILBOX IS USED FOR OTHER PERTINENT !INFORMATION AS SHOWN IN THE LAYOUT BELOW. !************ LAYOUT OF MAILBOX ************* !LOC SYMB CONTENTS !214 MBX0 D-30/235 MESSAGE (MINUS = D-30) !215 MBX1 SYSTEM IDENTIFIER !216 MBX2 DISK ADDRESSES !217 MBX3 !220 MBX4 TEACH DISK ADDRESSES, SEL. LIST !220 MBX5 LINE NOS. OF USER NUMBER!!SIC - SHOULD BE 221, NOT 220 !222 MBX6 PROBLEM NAME !223 MBX7 !224 MBX8 REAL TIME FROM 235 !225 MBX9 !226 MBX10 SPECIAL MESSAGE !-SCIU- SERVICES THE SPECIAL MAILBOX, HANDLING !COMMUNICATIONS CONCERNING THE 235 PERIPHERALS !AND PERIPHERAL TASKS. IT ALSO PICKS UP THE !REAL-TIME FROM THE 235. SCIU:CMM SCT!RECOMPLEMENT TELETYPE NUMBER LDZ BFLAG!SUPPRESS CIU CYCLE... BNZ SPUNT!YES LDZ STOPF!COUNT RUNNING TIME... BNZ *+2!IF NOT, SKIP NEXT INSTRUCTION SBO SCLOCK!STEP RUNNING TIME CLOCK PIC 61!SELECT CIU BRS SWAIT DEF 0 LDT SMBX8!SET CIU ADDRESS REGISTER TO LOC OF REAL-TIME DEF 1!PLACE CIU IN RECEIVE MODE BRS CIUR!PICK UP HIGH-ORDER END OF REAL-TIME STB RTIME BRS CIUR!PICK UP LOW-ORDER END OF REAL-TIME NMB M7777!MASK OFF HIGH-ORDER CHARACTER RMB SCOLN!REPLACE IT WITH A COLON STB RTIME+1 BRS CIUR!READ SPECIAL MESSAGE FROM 235 NIS 9 BNZ SREG!IF NEGATIVE, DO NOT SERVICE SPECIAL MAILBOX NBZ SMASK4!TEST FOR VALID MESSAGE BNZ SREG!IF NOT, IGNORE IT BRU SBRNCH,X!GO THROUGH BRANCH TABLE TO ROUTINE CALLED SBR0:BRU SREG!IF NO 235 MESSAGE, EXIT SBR1:BRS SDSKR!235 WANTS THE DISK, SO RELINQUISH IT BRU SREG!IF THIS IS IMPOSSIBLE, EXIT STZ SPMESS!BUT IF A-OK, ACKNOWLEDGE BRU SPEND SBR2:STZ DKFLG2!235 IS DONE WITH THE DISK, SO TAKE IT BACK STZ SPMESS!ACKNOWLEDGE BRU SPEND SBR3:LDA MONE!235 SAYS STOP COUNTING RUNNING TIME STA STOPF!SO STOP THE CLOCK STZ SPMESS!ACKNOWLEDGE BRU SPEND SBR4:STZ STOPF!235 SAYS START RUNNING TIME CLOCK AGAIN STZ SPMESS!ACKNOWLEDGE BRU SPEND SBR6:PIC 2!235 SAYS PERFORM AN -OFF- LDA SOFF RAM $SW2!SCAN ONLY TELETYPE 1 AIC 1 STZ $STAT!ZERO OUT ALL STATUSES XCZ TELET BNZ *-3 BRU SBR1!RELINQUISH THE DISK TO THE 235 SBR7:PIC 2!235 SAYS PERFORM AN -ON- LDA SON NMA $SW2 STZ SPMESS BRU SPEND SBR10:PIC 0!235 SAYS SET BATCHMODE LDA SIX STA $STAT STA $PRIOR LDA SBATN STA $SYSTM STZ $DONE STZ SPMESS BRU SPEND SBR11:PIC 0!235 SAYS RESET BATCHMODE STZ $STAT STZ SPMESS BRU SPEND SBR12:BRS CIUR!235 HAS A NEW ENDING DISK ADDRESS LDC SPROB!SO PUT IT AWAY STB $DPOS3 STZ SPMESS!ACKNOWLEDGE BRU SPEND SBR13:LDC SPROB!235 SAYS EDIT THE PROGRAM BEFORE USING AGAIN LDA ONE STA $TYP BRU SPEND SPEND:DIF 1!RESET CB1, CB2, PAR PIC 61!SELECT CIU BRS SWAIT DEF 0 LDT SMBX10!SET CIU ADDRESS REGISTER TO MBX10 DIF 9!SET CB2 LDB SPMESS BRS CIUX!SEND SPECIAL MESSAGE DEF 9!SEND API INTERRUPT TO 235 !-SREG- IS THE ROUTINE WHICH CONTROLS THE !FOREGROUND OPERATION OF THE 235. CONTROL !IS ACCOMPLISHED BY MEANS OF DECISION TABLES. !THE DATANET-30 CLOCKS ALL 235 FUNCTIONS, !RELOADING THE 235 EXECUTIVE PROGRAM IF A !FUNCTION GOES OVERTIME WITHOUT GIVING AN !ANSWER TO THE D-30, OR IF AN ANSWER FROM THE !235 IS UNDECIPHERABLE. AT THE COMPLETION OF!!SIC - SHOULD BE "INDECIPHERABLE" !A GIVEN RUN, A SCHEDULING ROUTINE IS INVOKED !WHICH SELECTS THE NEXT TELETYPE TO BE!!SIC - SHOULD BE "THAT" !GRANTED ACCESS TO THE 235. SREG:LDZ STOPF!IS -STOP COUNTING TIME- FLAG ON... BNZ SPUNT!IF SO, DO NOT SERVICE THE REGULAR MAILBOX BRS SWAIT!WAIT FOR C.I.U. DEF 0!CLEAR OUT ADDRESS REGISTER LDT SMBX0!SET ADDRESS REGISTER TO MBX0 ADDRESS DEF 1!SET C.I.U. INTO RECEIVE MODE BRS CIUR!PICK UP 235 MESSAGE FROM MBX0 LDC SPROB!PLACE TELETYPE NUMBER IN C-REGISTER NIS 9!IS 235 MESSAGE NEGATIVE (235 BIT 0)... BNZ EX235S!IF SO, BOOTSTRAP 235 EXECUTIVE (MINUS) NBZ SEXTR!EXTRANEOUS BITS IN 235 MESSAGE ... BNZ EX235M!IF SO, BOOTSTRAP 235 EXECUTIVE (MESSG) LDA MSEVEN!SET MINUS COUNTER STA SMCTR LDA $STAT!PLACE STATUS IN A-REGISTER (MESSAGE IS IN B) LDZ $DONE!IN THE MIDST OF A D-30/235 CONVERSATION... BNZ TSTAT,X!IF SO, GO TO BRANCH TABLES (A=STATUS, B=MSG) LDB MONE!BUT IF INITIAL MESSAGE OF SEQUENCE, FUDGE... BRU TSTAT,X!GO TO BRANCH TABLES (A=STATUS, B=-1) TSTAT:INA *+1!STATUS BRANCH TABLE BRU SENDR!STATUS 0--NULL BRU TOLD,X!STATUS 1--OLD BRU TLIST,X!STATUS 2--LIST BRU TSAVE,X!STATUS 3--SAVE BRU TSTART,X!STATUS 4--INITIAL RUN BRU TCNTNU,X!STATUS 5--CONTINUED RUN BRU TBATCH,X!STATUS 6--BATCHMODE TOLD:INB *+2!OLD STATUS BRU SOLDA!INITIAL STATE BRU STMCH!MESSAGE 0 BRU SERROR!MESSAGE 1 BRU SOLDB!MESSAGE 2 BRU SOLDC!MESSAGE 3 BRU EX235M!MESSAGE 4 BRU EX235M!MESSAGE 5 BRU EX235M!MESSAGE 6 BRU EX235M!MESSAGE 7 SOLDA:BRS SDONE!SET $DONE = +1 LDA $WORD5!SET STARTING AND ENDING DISK ADDRESSES OF LDB $WORD6!OLD PROGRAM BRS SRDWR!SEND -DSKRD- TO 235 DEC DSKRD SOLDB:LDA $STAND!SET STANDARD STARTING AND ENDING DISK ADXS LDB $DPOS3 BRS SRDWR!SEND -DSKWR- TO 235 DEC DSKWR SOLDC:BRS SINS BRS TYPE!SET UP TYPEOUT OF -READY.- STZ $TYP!NO CORRECTIONS BRU SENDRT!GO END RUN TLIST:INB *+2!LIST STATUS BRU SLISA!INITIALIZE BRU STMCH!MESSAGE 0 BRU SERROR!MESSAGE 1 BRU SLISB!MESSAGE 2 BRU EX235M!MESSAGE 3 BRU EX235M!MESSAGE 4 BRU EX235M!MESSAGE 5 BRU EX235M!MESSAGE 6 BRU EX235M!MESSAGE 7 SLISA:BRS SDONE!SET $DONE=+1 STA $TYP!FORCE AN EDIT LDA $LINE1!SET SELECTIVE LIST INFO LDB $LINE2 BRU SEDIT!SEND -EDIT- TO 235 SLISB:PIC 61!SELECT C.I.U. BRS CIUR!PICK UP EDITED LENGTH LDC SPROB AMB $STAND!$DPOS3 = $STAND + (LENGTH) STB $DPOS3!SET CALCULATED ENDING DISK ADDRESS PIC 61!SELECT CIU BRS CIUR!PICK UP SELECTIVE LIST DISK ADDRESS TRA B&,A!PLACE IN A-REGISTER BRS CIUR!PICK UP SELECTIVE LIST WORD COUNT LDC SPROB STA $LINE1!DISK ADDRESS STB $LINE2!WORD COUNT STZ $TYP!NO CORRECTIONS BRS SINS BRS LISTB!SET UP LISTB BRU SENDRT!GO END RUN TSAVE:INB *+2!SAVE STATUS BRU SSAVA!INITIAL STATE BRU STMCH!MESSAGE 0 BRU SERROR!MESSAGE 1 BRU SSAVB!MESSAGE 2 BRU SSAVC!MESSAGE 3 BRU EX235M!MESSAGE 4 BRU EX235M!MESSAGE 5 BRU EX235M!MESSAGE 6 BRU EX235M!MESSAGE 7 SSAVA:BRS SDONE!SET $DONE=+1 TRC 0&,AB!NO SELECTIVE LIST EDITING ON SAVE BRU SEDIT!GO SEND 235 AN -EDIT- SSAVB:PIC 61!SELECT C.I.U. BRS CIUR!PICK UP EDITED PROGRAM LENGTH TRA B&,A!LENGTH IN BOTH A AND B LDC SPROB AMA $STAND!CALC ENDING DISK ADDRESS FOR STD AREA STA $DPOS3 STZ $TYP!NO CORRECTIONS AMB $WORD5!CALC ENDING DISK ADDRESS FOR SAVE AREA STB $WORD6 LDA $WORD5 BRS SRDWR!GO SEND 235 A -DSKWR- ONTO SAVE AREA DEC DSKWR SSAVC:BRS SINS BRS SAVEB!SET UP SAVEB BRU SENDRT!GO END RUN TSTART:INB *+2!INITIAL RUN STATUS BRU SSTAA!INITIAL STATE BRU STMCH!MESSAGE 0 BRU SERROR!MESSAGE 1 BRU SSTAB!MESSAGE 2 BRU EX235M!MESSAGE 3 BRU EX235M!MESSAGE 4 BRU EX235M!MESSAGE 5 BRU EX235M!MESSAGE 6 BRU EX235M!MESSAGE 7 SSTAA:LDA $QUEUE!SET $DONE TO THE APPROPRIATE SETTING LDA TBDONE,X STA SDONEX TRC 0&,AB!NO SELECTIVE LIST EDIT ON A RUN BRU SEDIT SSTAB:BRS SDSKR!RELINQUISH DISK TO 235 (NO PREPOSITIONING) BRU SPUNT PIC 61!SELECT C.I.U. BRS CIUR!GET EDITED LENGTH LDC SPROB AMB $STAND!CALC NEW ENDING ADDRESS STB $DPOS3 STZ $TYP!NO CORRECTIONS LDA STARTM!-START- MESSAGE IN A LDZ $TFLAG BZE *+2!IF TEACH, REPLACE -START- WITH -TEACH- LDA TEACH LDB $SYSTM!SYSTEM IDENTIFIER STD MBX0!STORE IN MBX0, MBX1 LDA $STAND!CALC 6K AREA ADDRESS AMA OM300 STA MBX2 LDA $WORD5!LOAD DISK ADDRESSES (USED BY TEACH, NOT RUN) LDB $WORD6 STD MBX4!TEACH DISK ADDRESSES TO MBX4, MBX5 LDA $QUEUE!SET CLOCK APPROPRIATELY LDA TBTIME,X BRS STMST BRU SCNTD!IF CLOCK RUNS DOWN DURING RUN, SPECIAL CASE LDA FIVE!SET PROBLEM TO CONTINUED RUN STATUS STA $STAT BRU SXMIT!SEND OVER MAILBOX TO 235 TCNTNU:INB *+2!CONTINUED RUN STATUS BRU SCNTA!INITIAL STATE BRU STMCH!MESSAGE 0 BRU SERROR!MESSAGE 1 BRU EX235M!MESSAGE 2 BRU EX235M!MESSAGE 3 BRU SCNTD!MESSAGE 4 BRU SCNTT!MESSAGE 5 BRU SCNTO!MESSAGE 6 BRU SCNTI!MESSAGE 7 SCNTA:LDA $STAND!DISK ADDRESS OF 6K AREA TO MBX2 AMA OM300 STA MBX2 STA PREPOS!PREPOSITION LDA $SWLEN!SWAP LENGTH TO MBX3 STA MBX3 BRS SDSKR!RELINQUISH TO 235 BRU SPUNT LDA $QUEUE!SET $DONE AND CLOCK ACCORDING TO $QUEUE LDB TBDONE,X STB SDONEX LDA TBTIME,X BRS STMST BRU SCNTD!IF CLOCK RUNS DOWN DURING RUN, SPECIAL CASE LDA CONT!-CNTNU- TO MBX0, SYSTEM TO MBX1 LDB $SYSTM STD MBX0 BRU SXMIT!SEND OVER MAILBOX TO 235 SCNTT:BRS SINS!TERMINAL EXIT BRS OUTPT!SET UP -OUTPT- TO START OUTPUTTING LDA $SYSTM!RESTORE SYSTEM NAME IF NECESSARY XAZ EDI BNZ SCNTTE LDA $SAVSY STA $SYSTM LDA ONE STA $TYP SCNTTE:STZ $PRIOR BRU SCNTB SCNTD:BRS SDUMP!SEND DUMP MESSAGE BRU SXMIT!SEND OVER MAILBOX TO 235 SCNTO:BRS SINS!INTERMEDIATE OUTPUT CALL BRS IOUT!SET UP INTERMEDIATE OUTPUT ROUTINE BRU SCNTB SCNTI:BRS SINS!REAL-TIME INPUT CALL BRS INPTA!SET UP REAL-TIME INPUT ROUTINE SCNTB:PIC 61!SELECT C.I.U. BRS CIUR! PICK UP RUN TIME FROM 235 LDC SPROB STB $RTIME!UPDATE $RTIME PIC 61 BRS CIUR LDC SPROB STB $OUT LDA $LHFL!OUTPUT HEADING EVEN IF NO OUTPUT BZE *+2 STA $OUT PIC 61 BRS CIUR LDC SPROB STB $SWLEN!PICK UP SWAP LENGTH STZ DUMFL BRU SENDR TBATCH:INB *+2!BATCHMODE STATUS BRU SBATA!INITIAL STATE BRU STMCH!MESSAGE 0 BRU SENDR!MESSAGE 1 BRU SENDR+1!MESSAGE 2 BRU EX235M!MESSAGE 3 BRU EX235M!MESSAGE 4 BRU EX235M!MESSAGE 5 BRU EX235M!MESSAGE 6 BRU EX235M!MESSAGE 7 SBATA:CMA ONE!SET $DONE TO -2 STA SDONEX LDA SBATM!SET CLOCK TO MINIMUM GUARANTEED TIME BRS STMST BRU SBATB!WHEN CLOCK RUNS DOWN, RETURN HERE LDA BATCH!SEND MESSAGE TO 235 TO START BATCH STA MBX0 BRU SXMIT2!SEND OVER MAILBOX 0 SBATB:PIC 1!SCAN TO SEE IF QUEUE IS STILL EMPTY LDZ $STAT!CHECK STATUS BNZ *+5!QUEUE NOT EMPTY, SO KILL BATCH AIC 1!OTHERWISE, TRY NEXT TELETYPE XCZ TELET+1!TEST FOR END OF SCAN BNZ SBATB+1!IF NOT, CONTINUE BRU SPUNT!IF SO, QUEUE EMPTY, SO LET BATCH RUN BRS SDSKR!RELINQUISH TO 235 BRU SPUNT!IF NO GOOD, TRY LATER LDA NINE!SEND 235 COMMAND TO DUMP BATCH STA MBX0 LDA STDTM!SET CLOCK TO STANDARD TIME INTERVAL BRS STMST BRU EX235C!IF RUNS DOWN, BOOTSTRAP BRU SXMIT2!SEND OVER MAILBOX 0 !MISC ROUTINES SRDWR:IND 0 IND *+1 STD MBX2!PLACE DISK ADDRESSES IN MBX2, MBX3 STA PREPOS!PREPOSITION TO STARTING DISK ADDRESS TRC A&,A!TEST FOR ZERO OR NEGATIVE LENGTH AAZ MBX3 BMI SXNOP!IF SO, -NO PROGRAM- BRS SDSKR!RELINQUISH DISK TO 235 BRU SPUNT LDA SRDWR,X!PLACE MESSAGE IN MBX0 STA MBX0 LDA STDTM!SET CLOCK TO STANDARD INTERVAL BRS STMST BRU EX235C BRU SXMIT!SEND OVER MAILBOX TO 235 SEDIT:STD MBX4!SELECTIVE LIST LINE NUMBER IN MBX4, MBX5 LDA $STAND!STANDARD STARTING AND ENDING DISK ADDRESSES LDB $DPOS3 LDZ $TYP!HAVE CORRECTIONS BEEN MADE SINCE LAST EDIT.. BZE *+3!IF NOT, THEN DO -DSKRD- IN PLACE OF -EDIT- BRS SRDWR!GO SEND -EDIT- TO 235 DEC EDITMS BRS SRDWR!GO SEND -DSKRD- TO 235 DEC DSKRD SDUMP:IND 0 IND *+1 LDA DUMPM LDB $SYSTM!SYSTEM TO MBX1 STD MBX0 LDA $STAND!CALC 6K AREA ADDRESS, PLACE IN MBX2 AMA OM300 STA PREPOS!PREPOSITION LDZ DKFLG2 BPL *+3 LDZ DUMFL BZE SPUNT BRS SDSKR!RELINQUISH DISK TO 235 BRU SPUNT LDA $WORD1!USER NUMBER TO MBX4, MBX5 LDB $WORD2 STD MBX4 LDA $WORD3!PROBLEM NAME TO MBX6, MBX7 LDB $WORD4 STD MBX6 LDA STDTM!SET CLOCK TO STANDARD TIME BRS STMST BRU EX235C LDA ONE STA DUMFL BRU SDUMP,X!EXIT SERROR:PIC 61!SELECT C.I.U. BRS CIUR!PICK UP ERROR CODE FROM 235 LDC SPROB BRU *+1,X!GO TO BRANCH TABLE INB *+1 BRU SXMAL!SYSTEM MALFUNCTION--TRY AGAIN BRU SXNOP!NO PROGRAM BRU SXSYS!RETYPE SYSTEM NAME SXMAL:LDB *+2 BRU SXKOM IND SMALF SXNOP:LDA $STAND!SET LENGTH = 0 STA $DPOS3 STZ $TYP LDB *+2 BRU SXKOM IND SNOPGM SXSYS:LDB *+2 BRU SXKOM IND SSYSNM SXKOM:STB $MSGL!TERMINATE RUN AND OUTPUT MESSAGE LDA SXTERM BRS INSERT BRU SENDRT SXTERM:BRS TERM SINS:IND 0 IND *+1 LDA SINS,X!PICK UP WORD FROM BRS+1 BRS INSERT!GO INSERT INTO SPARE-TIME TASK LIST ADO SINS!PREPARE TO EXIT AT BRS+2 BRU SINS,X!EXIT SDONE:IND 0 IND *+1 LDA ONE!SET $DONE=+1 STA SDONEX BRU SDONE,X STMST:IND 0 IND *+1 STA SCLOCK!SET RUNNING-TIME CLOCK LDA STMST!RETURN TO BRS+2 BUT LEAVE STMST=BRS+1 BRU *+1,X INA 1 STMCH:LDZ SCLOCK!HAS CLOCK RUN OUT... BPL SPUNT!IF NOT, EXIT BRU STMST,X!IF SO, RETURN TO LOC AFTER LAST -BRS STMST- SXMIT:DIF 1!RESET SPECIAL FLIP-FLOPS PIC 61!SELECT C.I.U. DEF 0!CLEAR OUT ADDRESS REGISTER LDT SMBX1!LOAD ADDRESS REGISTER TO MBX1 LDB MBX1!SEND OVER MBX1 BRS CIUX LDB MBX2!SEND OVER MBX2 BRS CIUX LDB MBX3!SEND OVER MBX3 BRS CIUX LDB MBX4!SEND OVER MBX4 BRS CIUX LDB MBX5!SEND OVER MBX5 BRS CIUX LDB MBX6!SEND OVER MBX6 BRS CIUX LDB MBX7!SEND OVER MBX7 BRS CIUX BRS SWAIT!WAIT FOR C.I.U. SXMIT2:DIF 1!BATCH ENTRANCE PIC 61 DEF 0!CLEAR OUT ADDRESS REGISTER LDT SMBX0!SET ADDRESS REGISTER TO MBX0 DIF 9!SET CB2!(235 SIGN BIT) LDB MBX0!SEND OVER MBX0 WITH SIGN BIT ON BRS CIUX DEF 9!SEND API INTERRUPT TO 235 LDA SDONEX!SET $DONE... BZE SPUNT!IF NOT, EXIT LDC SPROB!TELETYPE NUMBER IN C-REGISTER STA $DONE!SET $DONE = SDONEX STZ SDONEX!RESET SDONEX TRC A&,B!CHECK FOR A NEW MINIMUM VALUE OF $DONE ABZ MINDON BMI SPUNT STA MINDON BRU SPUNT !-SENDR- CLOSES OUT THE CURRENT PROBLEM, AND !SELECTS THE NEXT TELETYPE TO BE GRANTED !ACCESS TO THE 235. THE TELETYPE SELECTED IS !THE ONE WITH THE GREATEST URGENCY WHICH HAS !NOT YET BEEN RUN THI TIME THRU THE QUEUE. !THE PRIORITY NUMBERS ($PRIO) VARY INVERSELY !WITH THE URGENCY. SHORT EXPECTED RUNNING !TIMES ARE GIVEN HIGH URGENCY. WITHIN A !GIVEN URGENCY LEVEL, SUCCESSIVE RUNS ARE !GROUPED BY SYSTEM TO MINIMIZE TIME WASTED !RELOADING SYSTEMS IN THE 235. !AS A GIVEN PROBLEM CONTINUES TO RUN, IT IS !ALLOWED PROGRESSIVELY LONGER RUNNING TIME !QUANTA IN THE 235, AND IS MADE ELIGIBLE !FOR SCHEDULING PROGRESSIVELY LESS OFTEN. !THE EFFECT IS TO ALLOW LONG PROBLEMS TO !RUN WITH FEWER SWAPS, WHILE SHORT PROBLEMS !RECEIVE RAPID RESPONSE FROM THE SYSTEM. SENDRT:STZ $PRIOR!TERMINAL EXIT SENDR:STZ $STAT!END RUN BY SETTING $STAT=0 TRA 0&,AC!START SCAN AT 0 CAM SPROB!INITIALIZE SPROB TO -1 LDA SEVEN!INITIALIZE SPRI TO A LARGE NUMBER STA SPRI SCAN:LDA $STAT!IS STATUS ZERO... BZE STEPC!IF SO, THIS TELETYPE NOT ELIGBLE LDZ $DONE!ALREADY SERVICED THIS TIME THRU THE QUEUE... BMI STEPC!IF SO, THIS TELETYPE NOT ELIGBLE CMA $PRIOR!LOAD PRIORITY OF THIS TELETYPE AND CMB $SYSTM!SYSTEM NAME AS DOUBLE-LENGTH NUMBER AMD SPRI!COMPARE WITH PREVIOUS PRIORITY/SYSTEM SAVED BMI STEPC!IF LESS ELIGBLE, TRY NEXT TELETYPE LDA $PRIOR!OTHERWISE, CREATE NEW DOUBLE-LENGTH NUMBER LDB $SYSTM STD SPRI!SAVE IT... STC SPROB!AND SAVE TELETYPE NUMBER AS BEST BET SO FAR STEPC:AIC 1!STEP TO NEXT TELETYPE XCZ TELET+1!END OF SCAN... BNZ SCAN!IF NOT, CONTINUE SCANNING LDZ SPROB!HAS AN ELIGIBLE ELETYPE BEEN FOUND... BPL SENDX!IF SO, GO TO EXIT CODING PIC 0 ADO $DONE!INCREMENT $DONE VECTOR AIC 1 XCZ TELET+1 BNZ *-3 ADO MINDON!ALSO ADD ONE TO MINDON STC SPROB!SELECT NON-EXISTENT TELETYPE SENDX:LDC SPROB STZ $DONE!ZERO $DONE FOR SELECTED TELETYPE BRU SPUNT!EXIT !-EX235- IS A SETUP ROUTINE FOR RELOADING !THE 235 EXECUTIVE IN CASE OF SERIOUS MAL- !FUNCTIONING OF THE SYSTEM. THREE CONDITIONS !CAN CAUSE THIS RELOADING TO OCCUR... ! 1. 235 DOES NOT RESPOND TO A D-30 ! COMMAND WITHIN 20 MS OR SO (MINUS) ! 2. 235 TAKES TOO LONG TO COMPLETE ! CERTAIN OPERATIONS (CLOCK) ! 3. D-30 DETECTS AN INVALID MESSAGE IN ! THE REGULAR MAILBOX (MSG) EX235S:ADO SMCTR!STEP MINUS COUNTER BMI SPUNT LDD EXMI BRU EXKOM EX235C:LDD EXCL BRU EXKOM EX235M:LDD EXMS BRU EXKOM EXKOM:STZ $PRIOR STA EXTY STB EXTY+1 TRA C&,B!GET TELETYPE NUMBER SR3 B&,A!CONVERT TELETYPE NUMBER TO OCTAL (BCD) BNZ *+2!WITH ZERO SUPPRESSION LDA SIXTY SL6 A&,A NMB SEVEN TRA AB&,B RMB IZONE STB EXNO!PLACE INTO LOG MESSAGE LDA $WORD1 STA EXUS LDA $WORD2 STA EXUS+1 LDA $WORD3 STA EXPR LDA $WORD4 STA EXPR+1 LDA $SYSTM STA EXSYS PIC 1 LDD EXMES STB $MSGL BRS INSERT STZ $OUTFF LDA SBOOTC!SET UP TASK TO BOOTSTRAP STA STOPF!SUPPRESS C.I.U. CYCLES DURING LOAD BRS INSERT!SET UP TASK IN LIST BRU SPUNT SPUNT:TRC Q&,AB!COMMON EXIT POINT FOR C.I.U. ROUTINE AMA CIUMIN BMI SREST!UPDATE MIN CYCLES COUNTER CBM CIUMIN BRU SREST !CONSTANTS AND WORKING STORAGE !LIST OF MESSAGES FROM D-30 TO 235 EDITMS:EQU 0 STARTM:DEC 1 CONT:DEC 2 DUMPM:DEC 3 DSKRD:EQU 4 DSKWR:EQU 5 TEACH:DEC 6 BATCH:DEC 7 TBATM:DEC 8 SMBX:EQO 213 SMBX0:IND SMBX SMBX1:IND SMBX+1 SMBX8:IND SMBX+8 SMBX10:IND SMBX+10 SEXTR:OCT 777770 SMASK4:OCT 777760 SBOOTC:BRS BOOTC!BOOTSTRAP SETUP CONSTANT SON:OCT 737777 SOFF:OCT 040000 SCOLN:OCT 130000!COLON IN HIGH-ORDER POSITION SPMESS:OCT 0!SPECIAL MESSAGE SCLOCK:OCT 0!RUNNING-TIME CLOCK SPRI:DDC 0!PRIORITY/SYSTEM SAVED FOR SENDR ROUTINE SMCTR:OCT 0!MINUS COUNTER SDONEX:OCT 0!SET $DONE AFTER XMIT INDICATOR SBRNCH:INB *+1!SPECIAL MESSAGE BRANCH TABLE BRU SBR0!NO 235 MESSAGE BRU SBR1!235 WANTS THE DISK BRU SBR2!235 IS DONE WITH THE DISK BRU SBR3!235 SAYS STOP THE RUNNING TIME CLOCK BRU SBR4!235 SAYS START RUNNING TIME CLOCK AGAIN BRU SBR12!TEMPORARILY USED UNTIL EDIT IS MODIFIED BRU SBR6!235 SAYS STOP SCANNING ALL BUT TELETYPE 1 BRU SBR7!235 SAYS SCAN ALL TTY-S BRU SBR10!235 SAYS SET BATCHMODE BRU SBR11!235 SAYS RESET BATCHMODE BRU SBR12!NEW ENDING DISK ADDRESS BRU SBR13!235 SAYS EDIT NEXT TIME BRU SBR0!NOT USED ********** BRU SBR0!NOT USED ********** BRU SBR0!NOT USED ********** BRU SBR0!NOT USED ********** SBATM:DEC 300!GUARANTEED BATCH TIME SBATN:ALF BAT!USED IN BOOTSTRAP MESSAGE DURING BATCH RUN STDTM:DEC 200!STANDARD TIME INTERVAL FOR DISK I/O AND EDIT MBX0:OCT 0!IMAGE OF MAILBOX IN D-30 MBX1:OCT 0 MBX2:OCT 0 MBX3:OCT 0 MBX4:OCT 0 MBX5:OCT 0 MBX6:OCT 0 MBX7:OCT 0 TBTIME:INA *+1!ALLOWABLE RUN TIMES DEC 200!QUEUE 0 DEC 300!QUEUE 1 TBDONE:INA *+1!NUMBER OF TIMES THRU QUEUE 0 DEC -1!QUEUE 0 DEC -4!QUEUE 1 SMALF:OCT 376270!SYSTEM MALFUNCTION--TRY AGAIN. ALF STE ALF M M ALF ALF ALF UNC ALF TIO ALF N-- ALF TRY ALF AG ALF AIN OCT 333755 SNOPGM:OCT 374546!NO PROGRAM. ALF PR ALF OGR ALF AM. OCT 375555 SSYSNM:OCT 375125!RETYPE SYSTEM NAME ALF TYP ALF E S ALF YST ALF EM ALF NAM ALF E-- OCT 555555 EXMES:BRS ERROR IND *+1 OCT 777777 OCT 377272 OCT 323232 ALF BOO ALF TST ALF RAP ALF TE ALF LET ALF YPE EXNO:ALF ALF EXUS:ALF ALF ALF EXPR:ALF ALF OCT 606014 EXSYS:ALF OCT 746060 EXTY:ALF ALF OCT 377255 EXCL:ALF CLO ALF CK. EXMI:ALF MIN ALF US. EXMS:ALF MES ALF SG. STL!CHARACTER OUTPUT ROUTINE!!CAN'T ACCOUNT FOR MISSING LINE NUMBER STL!CHARACTER OUTPUT ROUTINE TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION !THE OUTPUT ROUTINE SUPPLIES THE NEXT CHARAC- !TER TO BE OUTPUTTED BY THE TELETYPE SPECIFIED !BY THE C-REGISTER. OUTPUTTING IS BUFFERED. !THE ROUTINE SETS UP SPARE-TIME TASKS TO RE- !FILL THE BUFFERS FROM THE DISK AS REQUIRED. CIRC1:NMA OMASKS!RESET TRANSMIT CHARACTER FLAG STA $SW2 LDZ $OUTFF!SHOULD THE TELETYPE BE OUTPUTTING... BZE OP12!IF NOT, INITIATE END-OF-MESSAGE SEQUENCE BMI OP13!GO TO END OF MESSAGE DELAY RTN LDA $ODC BZE OP4!GO TO CHARACTER LOOKUP RTN BPL OP2!GO TO RTN TO SEND A LINE-FEED LDA $OF!LOOK AT BUFFER READY FLAG BZE OP8+4!IF BOTH BUFFERS ARE BUSY, SEND RUBOUTS STZ $ODC!IF BUFFER HAS COME READY, RESET FLAGS STZ $OF LDA ODOB!SET UP TASK TO READ ANOTHER BUFFERLOAD BRS INSERT OP4:LDA $OLOC,X!CHARACTER LOOKUP ROUTINE SBO $OCH!STEP CHARACTER POINTER BMI OP5!IF RIGHTMOST CHARACTER, BRANCH BZE OP6!IF CENTER CHARACTER, BRANCH CL6 A&,A!SHIFT CHARACTER INTO RIGHTMOST POSITION OP7:NMA M77!MASK CHARACTER LDB OLKUP,X!LOOK UP CHARACTER IN TRANSLATION MATRIX CIRC5:STB $SW1!PLACE TELETYPE CHARACTER IN SCAN-WORD ONE BMI OP8!BRANCH OUT ON SPECILA CHARACTER!!SIC - SPECILA ==> SPECIAL ADO #CHO!BUMP UP CHARACTERS OUT COUNTER *** BNZ *+2!AND CHECK FOR OVERFLOW *** ADO #CHO+1!AND IF SO, BUMP OVERFLOW *** BRU CIRC3!RETURN TO REAL-TIME LOOP OP2:SBO $ODC!STEP LINE-FEED COUNTER LDB LINF!SEND A LINE-FEED BRU CIRC5 OP6:SR6 A&,A!SHIFT CHARACTER INTO RIGHTMOST POSITION BRU OP7 OP5:LDB TWO!RESET CHARACTER POINTER STB $OCH ADO $OLOC!STEP WORD POINTER LDZ $OF!IF $OF IS GREATER THAN ZERO, NO BUFFER CHECK BMI *+2 BNZ OP7 LDB $OLOC NBZ M77!TEST FOR OVERFLOW INTO OTHER BUFFER BNZ OP7!IF NOT, SEND CHARACTER IMMEDIATELY NBZ STAT2!IF SO, FLIP-FLOP $OLOC TO OTHER BUFFER BNZ *+3 AMB OM200 STB $OLOC LDZ $OF!IS OTHER BUFFER AVAILABLE... BMI OP9!IF SO BRANCH LDB MONE!SET FLAG--BOTH BUFFERS NOT READY STB $ODC BRU OP7!SEND OUT CHARACTER OP9:STZ $OF STA OASAVE LDA ODOB!SET UP TASK TO READ ANOTHER BUFFERLOAD BRS INSERT LDA OASAVE!RESTORE THE A-REGISTER BRU OP7 OP8:XBZ OEOM!TEST SPECIAL CHARACTER BZE OP10!IF AN END-OF-MESSAGE XBZ OCR BZE OP11!IF A CARRIAGE-RETURN LDB ORUB!IF NEITHER, IGNORE AND SEND A FILL CHAR. BRU CIRC5 OP13:LDZ $SPACE!SPACES TO SEND OUT... BZE *+4!IF NOT, BRANCH SBO $SPACE LDB LINF BRU CIRC5 LDZ $ODC!IS END-OF-MESSAGE DELAY FINISHED... BZE *+4!IF SO, BRANCH SBO $ODC!IF NOT, STEP COUNTER LDB OFILCH!SEND OUT MARK-HOLD BRU CIRC5 LDA $CNFL!IS CONTINUE FLAG SET... BPL *+3 LDA OTBCN,X!IF SO, LOOK UP CONTINUE TASK AND SET IT UP BRS INSERT LDA TWO!RESET CHARACTER POINTER STA $OCH CAM $OF!SET $OF NEGATIVE STZ $OUTFF!RETURN TO INPUT MODE LDB OFILCH!SEND OUT MARK HOLD TRA C&,A AMA NOECHO!TEST IF THIS TELETYPE SHOULD BE ECHOPLEXED BPL *+2!IF NOT SKIP NEXT INSTRUCTION DEF 6!SET ECHOPLEX (INPUT) MODE BRU CIRC5 OP12:TRA C&,A!CUT OFF OUTPUTTING (A LA STOP) AMA NOECHO!TEST IF THIS IS A NON-ECHOPLEXED BB BMI *+3!IF ECHOPLEXED, GO TO USUAL CUTOFF ROUTINE LDB OFILCH!IF NON-ECHOPLEXED, SEND MARKS BRU CIRC5!EXIT STZ $CNFL STZ $SPACE OP10:LDA ONE!SET END-OF-MESSAGE DELAY STA $ODC LDA MONE STA $OUTFF LDB OFILCH BRU CIRC5 OP11:LDB ONE!GENERATE A LINE FEED AFTER A CARRIAGE RETURN ADO #CRO!BUMP UP OUTPUT CARRIAGE RETURN COUNTER *** STB $ODC LDB $LSTT XBZ TWO BNZ *+2 STZ $LCNT LDB OCRS BRU CIRC5 !OUTPUT ROUTINE CONSTANTS ODOB:BRS DOB OLKUP:INA OTABLE!TABLE LOOKUP CONSTANT OASAVE:OCT 0 OMASKS:OCT 377777 OFILCH:OCT 7777 ORUB:OCT 7776 OEOM:OCT -77!END OF MESSAGE OCR:OCT -32!CARRIAGE RETURN OCRS:OCT 7432 LINF:OCT 7424 NOECHO:DEC -38!TELETYPES 38,39,40 ARE NOT ECHOPLEXED BRS INPTB BRS MORE OTBCN:INA *+1!CONTINUE TASK TABLE STL!CHARACTER INPUT ROUTINE TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION !THE INPUT ROUTINE PICKS UP THE LATEST !CHARACTER FROM THE TELETYPE SPECIFIED BY THE !C-REGISTER, AND ACCUMULATES THIS INPUT !IN THE INPUT BUFFER. BACKSPACE AND LINE- !DELETE FUNCTIONS ARE IMPLEMENTED. A CARRIAGE !RETURN TERMINATES A LINE. IF THE LINE !IS A COMMAND TO THE DATANET-30, THE APPRO- !PRIATE SPARE-TIME TASKS ARE SET UP AND THE !LINE IS DELETED FROM THE BUFFER. IF THE LINE !IS A SOURCE STATEMENT (E.G., ALGOL, BASIC, !ETC.), THE LINE REMAINS IN THE BUFFER AND !WILL EVENTUALLY BE TRANSFERRED ONTO THE DISK !IN SPARE-TIME. !IF THE D-30 IS OUTPUTTING ON THE SPECIFIED !TELETYPE, THE INPUT ROUTINE RESPONDS TO !ONLY THE LETTER -S- OR A -BREAK- CHARACTER. !UPON RECEIVING ONE OF THESE TWO, THE -STOP- !FUNCTION IS INITIATED. LOC 12000 CIRC2X:NMA IMSKS!RESET RECEIVE CHARACTER FLAG ADO #CHI!BUMP UP INPUT CHARACTER COUNTER *** BNZ *+2!CHECK ON OVERFLOW, THIS COUNTER *** ADO #CHI+1!AND IF SO, BUMP SECOND *** STA $SW3 NMA IMSK8!EXTRACT REDUNDANT BITS OF TELETYPE CHARACTER SR1 A&,A BZE IBRK!IF -BREAK- THEN SET UP -STOP- LDB ILOOK,X!CONVERT CHARACTER FROM TELETYPE TO D-30 BCD LDZ $OUTFF!IS TELETYPE OUTPUTTING... BZE INORM!IF NOT, CONTINUE WITH NORMAL INPUT ROUTINE XBZ IO62!IF SO, TEST FOR THE LETTER -S- BZE IBRK XBZ IOM2!TEST FOR AN -ALT- MODE- BNZ CIRC4!GET OUT IMMEDIATELY STZ $OUTFF BRU *+1,X IND OP10 IBRK:LDA IST!IF -S- OR -BREAK- THEN SET UP -STOP- AND EXIT BRS INSERT BRU CIRC4 INORM:TRA B&,Z BMI ISPLCH!BRANCH IF SPECIAL CHARACTER (TAGGED MINUS) SBO $INCH!STEP CHARACTER POINTER BZE INCH2!MIDDLE CHARACTER--BRANCH BMI INCH3!RIGHTHAND CHARACTER--BRANCH CMA $INLOC!LEFTHAND CHARACTER. AMA $IDLOC!CHECK THAT LINE IS NOT TOO LONG. BMI *+2!IF $INLOC IS POINTING TO THE FIRST BUFFER AMA M128! AND $IDLOC TO THE 2ND, THEN ADD 128 TO $IN AMA I27!IF IT IS TOO LONG, TYPE ERROR MESSAGE AND BPL *+5! DELETE THE LINE. LDD ILERR STB $MSGL BRS INSERT BRU IGNOR CR6 B&,B!LEFTHAND CHARACTER, SO LEFT-JUSTIFY STB $INLOC,X!STORE IN LINE-BUFFER BRU CIRC4!EXIT TO -INTER- INCH2:SL6 B&,B!MIDDLE CHARACTER, SO CENTER-JUSTIFY LDA IMSKC!CLEAR A SPACE IN LINE-BUFFER NAM $INLOC,X RBM $INLOC,X!INSERT CHARACTER INTO BUFFER BRU CIRC4!EXIT TO -INTER- INCH3:LDA IMSK12!RIGHTHAND CHARACTER (ALREADY JUSTIFIED) NAM $INLOC,X!CLEAR A SPACE IN LINE-BUFFER RBM $INLOC,X!INSERT CHARACTER INTO BUFFER LDA TWO!RESET CHARACTER POINTER STA $INCH LDA $INLOC AMA ONE!STEP WORD POINTER NAZ M77!TEST IF END-OF-BUFFER CONDITION BNZ *+5!IF NOT, CONTINUE NORMALLY NAZ STAT2!TEST IF UPPER OR LOWER BUFFER BNZ *+2 LDA $INSTD!IF UPPER BUFFER FULL, SWITCH TO LOWER ONE CMM $IXFL!SET FLAG TO HAVE OTHER BUFFER SERVICED STA $INLOC BRU CIRC4!EXIT TO -INTER- !SPECIAL CHARACTERS ARE TAGGED AS FOLLOWS IN !THE INPUT CHARACTER TRANSLATION TABLE-- ! NON-INPUT CHARACTERS -0 TAG ! BACKSPACE CHARACTER -1 TAG ! LINE-DELETE CHARACTER -2 TAG ! CARRIAGE-RETURN -3 TAG ! WHO-ARE-YOU (WRU) -4 TAG ISPLCH:BRU *+1,X!MULTI-WAY BRANCH ACCORDING TO TAG INB *+1!TAG IS IN B-REGISTER BRU CIRC4!NON-INPUTTABLE CHARACTERS BRU IBKSP!BACKSPACE BRU IDELET!LINE-DELETE BRU IRETRN!CARRIAGE-RETURN BRU IWRU!WHO-ARE-YOU... IBKSP:LDZ $INCH!BACKSPACE BY DECREMENTING POINTERS BOD *+2 BNZ *+3 ADO $INCH!IF LAST CHARACTER WAS LEFT OR MIDDLE, SIMPLY BRU CIRC4!DECREMENT CHARACTER POINTER AND EXIT LDA $INLOC!IS THIS A VACUOUS LINE... XAZ $IDLOC BZE CIRC4!IF SO, EXIT NAZ M77!BACKSPACING OVER FIRST CHAR OF A BUFFER... BNZ IBKSPA!IF NOT, CONTINUE STZ $IXFL!IF SO, RESET DISK TASK FLAG NAZ STAT2!WRAP AROUND TO UPPER BUFFER... BNZ IBKSPA!IF NOT, CONTINUE AMA STAT4!IF SO, PERFORM WRAP AROUND STA $INLOC IBKSPA:SBO $INLOC!DECREMENT THE WORD POINTER STZ $INCH!AND RESET CHARACTER POINTER BRU CIRC4!THEN EXIT IDELET:LDZ $KFLAG!TEST FOR PAPER TAPE INPUT... BNZ IGNOR!IF SO, DELETE LINE LDD IMESS!OTHERWISE, SET UP MESSAGE STB $MSGL BRS INSERT BRU IGNOR!DELETE LINE IWRU:LDD IANS!SET UP REPLY TO WHO-ARE-YOU STB $MSGL BRS INSERT BRU IGNOR!RESET THINGS !CARRIAGE-RETURN INDICATES END-OF-LINE. !A LINE MUST ALWAYS BE AN EVEN NUMBER OF WORDS !LONG, SO TRAILING FILL-CHARACTERS ARE ADDED. !IF THE LINE STARTS WITH A NUMERIC CHARACTER, !IT IS TAKEN TO BE A SOURCE STATEMENT. OTHER- !WISE, THE LINE IS INTERPRETED AS A COMMAND !TO THE DATANET-30 EXECUTIVE. IRETRN:LDA $LSTT XAZ TWO BNZ *+2 STZ $LCNT LDA $HFLAG!TEST SPECIAL INPUT FLAG ADO #CRI!BUMP UP INPUT CARRAIGE RETURN COUNTER ***!!SIC NAZ IZONE!-IN6- BIT INDICATES FILL WITH BLANKS BNZ IHEL SBO $INCH!OTHERWISE, FILL THE LINE OUT TO AN EVEN BMI IMIN!NUMBER OF WORDS, AND INSERT A CARRIAGE-RETURN BZE IZER!AT THE END LDB MONE STB $INLOC,X BRU IHERE IMIN:LDB M77 BRU *+2 IZER:LDB M7777 RBM $INLOC,X IHERE:LDZ $INLOC BEV ITHERE LDB IFLCR NBM $INLOC,X BRU IDO ITHERE:ADO $INLOC LDB IFLCR STB $INLOC,X IDO:LDA $HFLAG!CHECK SPECIAL INPUT FLAG BNZ IHINS!IF ON, GO INSERT TASK LDA $INLOC AMA ONE!STEP POINTER BY ONE NAZ M77!END OF BUFFER... BNZ *+5!IF NOT, GET OUT CMM $IXFL!IF END OF BUFFER, SET FLAG FOR DISK TASK NAZ STAT2!WHICH BUFFER... BNZ *+2!IF END OF LOWER, CONTINUE LDA $INSTD!IF END OF UPPER, WRAP AROUND STA $INLOC LDB $IDLOC,X!OTHERWISE, LOOK AT FIRST THREE CHARS OF LINE SR1 B&,B!TEST WHETHER FIRST CHARACTER IS A TRUE DIGIT ABZ IDIGIT!IF NOT A DIGIT, TREAT LINE AS SYSTEM COMMAND BPL ISOURC!BUT IF A DIGIT, TREAT AS SOURCE STATEMENT STC ISTC!SAVE TELETYPE NUMBER TRC B&,B!FORM TWO-S COMPLEMENT OF B-REGISTER AMB ONE PIC 0!INITIALIZE INCREMENT POINTER LDA INCRE,X!START LOOKING IN MIDDLE OF TABLE ICOMP:AIC 1!STEP TO NEXT INCREMENT ABZ ICLST,X!THREE WAY COMPARE WITH LIST ENTRY BZE ITASK!IF EQUAL, FOUND BMI *+5 TRC A&,A!SUBTRACT CURRENT INCREMENT AMA INCRE,X TRC A&,A BRU *+2 AMA INCRE,X!ADD CURRENT INCREMENT LDZ INCRE,X!CHECK IF LAST INCREMENT HAS BEEN USED... BPL ICOMP!IF NOT, CONTINUE, ELSE ILLEGAL COMMAND. LDC ISTC!RESTORE C-REG TO TELETYPE NUMBER ADO #NCM!BUMP UP COUNTER OF ILLEGA COMMAND LINES ***!!SIC LDD IERROR!SET UP -ILLEGAL COMMAND- MESSAGE STB $MSGL BRS INSERT BRU IGNOR ITASK:LDC ISTC! COMMAND PROBABLY FOUND IN TABLE LDB $IDLOC,X!CHECK FOR NEW - NEXT CONFUSION XBZ @NEXT@! IF COMMAND WAS NEX THEN GIVE BZE *-8! AN ILLEGAL COMMAND MESSAGE AMA ONE!COMMAND FOUND IN TABLE ADO #COM!BUMP UP COUNTER OF RECOGNIZED COMMANDS *** LDA ICLST,X!PICK UP -BRS XXXXXX- TO INSERT IN TASK LIST BRS INSERT IGNOR:LDB $IDLOC!RESET INPUT ROUTINE POINTERS STB $INLOC LDA TWO STA $INCH STZ $IXFL!RESET BUFFER SERVICE FLAG BRU CIRC4!EXIT TO -INTER- !FILL ROUTINE FOR SPECIAL INPUT LINES FILLS !WITH TRAILING BLANKS INSTEAD OF FILL-CHARAC- !TERS. THIS IS USED BY HELLO, OLD, NEW, !OCTAL, BOOTSTRAP, AND RENAME. IHEL:SBO $INCH BMI IHM BZE IHZ LDB IBLK3 STB $INLOC,X BRU IHCOM IHM:LDB M77 RBM $INLOC,X LDB IBLK1 NBM $INLOC,X BRU IHCOM IHZ:LDB M7777 RBM $INLOC,X LDB IBLK2 NBM $INLOC,X IHCOM:ADO $INLOC LDB IBLK3!FILL WITH TRAILING BLANKS STB $INLOC,X ADO $INLOC STB $INLOC,X IHINS:NMA M7777!GET RID OF ANY HIGH-ORDER BITS RMA IBRS!CONSTRUCT A BRS INSTRUCTION BRS INSERT!AND SET IT UP AS A SPARE-TIME TASK STZ $HFLAG!RESET SPECIAL INPUT FLAG BRU IGNOR!EXIT ISOURC:LDB $INLOC!SOURCE STATEMENT. STB $IDLOC!ADVANCE BEGINNING-OF-LINE POINTER LDA TWO!RESET CHARACTER POINTER STA $INCH NMB M77!IS THERE ROOM FOR ANOTHER LINE IN THIS BUFFER AMB IM37!ASSUMING WORST-CASE LINE OF 81 CHARACTERS BMI *+5!IF SO, NO SWEAT IMSGX:LDA $IF!IF NOT, MAKE SURE THE OTHER BUFFER IS READY BNZ *+3!IF IT IS, STILL NO SWEAT CAM $IFLAG!BUT IF IT ISNT, SET FLAG TO HANG THINGS UP BRU CIRC4!EXIT WITHOUT GIVING A LINE-FEED STZ $IFLAG!RESET HANG-UP FLAG LDZ $KFLAG!TEST IF PAPER TAPE INPUT FROM 35ASR... BNZ *+5!IF SO, DO NOT SEND LINE-FEED LDD IFEED!SET UP LINE-FEED STA $SW1! LINE-FEED GOES IN SCAN-WORD 1 RBM $SW2! AND MARKS IN SCAN-WORD 2 DEF 7!RESET ECHOPLEX MODE (SET OUTPUT MODE) LDA MONE!INDICATE PARTIAL BUFFERLOAD STA $TYP LDZ $IXFL!TEST IF BUFFER NEEDS SERVICE BZE CIRC4!IF NOT, EXIT LDA IDBD!IF SO, SET UP DISK TASK BRS INSERT STZ $IXFL!RESET FLAGS STZ $IF BRU CIRC4 CIRC4:BRU *+1,X!COMMON EXIT POINT FOR INPUT RTN IND CIRC4X !INPUT ROUTINE CONSTANTS AND WORKING STORAGE @NEXT@:ALF NEX!USED TO CHECK FOR NEW NEXT CONFUSION IMSKS:OCT 377777 IMSK8:OCT 377 IMSKC:OCT 770000 IFEED:OCT 7424 OCT 7777 IFLCR:OCT 777737 ILOOK:INA ITABLE IST:BRS STOP IO62:OCT 62 IOM2:OCT -2 I27:OCT 33 IM37:DEC -37 IBLK1:OCT 777760 IBLK2:OCT 776060 IBLK3:OCT 606060 IBRS:BRS 0!CONSTANT TO CONSTRUCT A BRS INSTRUCTION IDBD:BRS DIB ISTC:OCT 0 IDIGIT:OCT 330000!TEST FOR TRUE DIGIT (LESS THAN OCTAL 12) ICLST:INA ICLST1!LINKAGE TO TABLE OF COMMANDS INCRE:INC *+1!INCREMENT TABLE FOR BINARY SEARCH OCT 76!MIDDLE OF COMMAND TABLE OCT 40 OCT 20 OCT 10 OCT 4 OCT 2 DEC -1!INCREMENT TABLE TERMINATOR IMESS:BRS ERROR IND *+1 ALF DE ALF LET OCT 252437 OCT 557777 IERROR:BRS ERROR IND *+1 OCT 376630!WHAT... OCT 216335 OCT 375577 ILERR:BRS ERROR IND *+1 OCT 377243 ALF INE ALF TO ALF O L ALF ONG ALF . ALF RET ALF YPE OCT 333755 IANS:BRS ERROR IND *+1 OCT 372421!DARTMOUTH TIME-SHARING ALF RTM ALF OUT ALF H T ALF IME ALF -SH ALF ARI OCT 452737 ALF HAN ALF OVE ALF R&, ALF NEW ALF HA ALF MPS ALF HIR OCT 253755 M128:OCT 777600 STL!TELETYPE SPECIAL SERVICE ROUTINE TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION !THIS ROUTINE PERFORMS SPECIAL REAL-TIME !SERVICING OF TELETYPES ON A CHARACTER-BY- !CHARACTER BASIS. THIS SPECIAL SERVICE IS !USED BY THE WARN, DIAL, AND MONITOR FUNCTIONS !WHICH ARE INITIATED FROM THE CONTROL TTY. WSVCX:STC WSAV!SAVE C-REGISTER BRU *+1,X INA * BRU WWARN BRU WDIAL BRU WMONI WWARN:PIC 1 BRS WGETI!GO GET INPUT CHARACTER FROM TTY 1 BRU WREST,X!NO NEW CHARACTER, SO EXIT BRU WTERM!ALT MODE CHARACTER, SO TERMINATE WARN AIC 1!STEP TELETYPE NUMBER BRS WPUT!SEND OUT CHARACTER XCZ TELET!END... BNZ *-3!NO, SO CONTINUE BRU WREST,X!EXIT WDIAL:XCZ 1!TELETYPE 1 BZE *+4 TRA C&,B XBZ WTTYF!OR OTHER TELETYPE IN CONNECTION BNZ WRETRN!IF NEITHER, THEN RETURN PIC 1 BRS WGETI!PICK UP INPUT FROM TTY 1 BRU *+5!IF NO NEW CHARACTER, THEN RY OTHER TTY BRU WTERM!IF ALT MODE, TERMINATE DIAL LDC WTTYF!IF NEW CHARACTER, SELECT OTHER TELETYPE BRS WPUT!AND OUTPUT THE CHARACTER BRU WNEXT!AND EXIT LDC WTTYF!SELECT OTHER TELETYPE BRS WGETI!PICK UP INPUT CHARACTER BRU WNEXT!IF NONE, EXIT BRU WTERM!IF ALT MODE, TERMINATE DIAL PIC 1!SELECT TTY 1 BRS WPUT!OUTPUT CHARACTER BRU WNEXT WMONI:XCZ 1!TELETYPE 1 BZE WNEXT!IF SO, PUNT NORMAL SERVICING TRA C&,B!OTHERWISE, TEST FOR OTHER TELETYPE XBZ WTTYF BNZ WRETRN!IF NOT, NORMAL SERVICE PIC 1 LDB $SW3!CHECK TTY FOR ALT MODE BPL *+6 NMB WMASKS STB $SW3 NMB WMASK9 XMB WALTMD BZE WTERM LDC WTTYF!SELECT TTY TO BE MONITORED LDB $SW3!NEW INPUT CHARACTER... NMB MTWO!D-30 SCAN LOGIC PUTS RANDOM THINGS IN BIT 1 BMI *+4!IF SO, OUTPUT IT LDZ $SW2!IF NOT, NEW OUTPUT CHARACTER... BPL WNEXT!IF NOT, EXIT LDB $SW1!BUT IF SO, OUTPUT IT NMB WMASK0 RMB WHIGH PIC 1 BRS WPUT BRU WRETRN WGETI:IND 0 IND *+1 LDB $SW3 BPL WGETI,X ADO WGETI NMB WMASKS STB $SW3 NMB WMASK9 XBZ WALTMD BZE WGETI,X ADO WGETI RMB WHIGH TRA C&,A!CHECK FOR ECHO AAZ WECHO,X BPL *+2!IF NOECHO, SKIP ECHO INSTRUCTION DEF 6 BRU WGETI,X WPUT:IND 0 IND *+1 LDA M7777 STA $SW1 RAM $SW2 NBM $SW2 DEF 7 BRU WPUT,X WREST:IND SREST WRETRN:LDC WSAV BRU *+1,X IND SLOOP+2 WNEXT:LDC WSAV BRU *+1,X IND CIRC4X WTERM:STZ WSVCF LDC WTTYF DEF 7 PIC 1 DEF 7 STZ WTTYF BRU WRETRN WMASKS:OCT 377777 WMASK9:OCT 000776 WMASK0:OCT 000777 WECHO:IND NOECHO WHIGH:OCT 777000 WALTMD:OCT 000772 WSAV:OCT 0 STL!REAL-TIME SUBROUTINES TTL!DATANET-30 EXECUTIVE, REAL-TIME SECTION LOC 13000 CIUR1:BRS SWAIT!CIU RECEIVE SUBROUTINE TRA R&,B BRU CIUR,X CIUX1:BRS SWAIT!CIU TRANSMIT SUBROUTINE TRA B&,T BRU CIUX,X CIUXS1:STC STEMP+1!SAVE C-REGISTER AND CIU TRANSMIT SUBROUTINE PIC 61 BRS SWAIT TRA B&,T LDC STEMP+1 BRU CIUXS,X !-INS- INSERTS A SPARE-TIME TASK INTO THE !TASK LIST. IT IS CALLED WITH A SUITABLE !SUBROUTINE BRANCH (BRS) IN THE A-REGISTER !AND THE TELETYPE NUMBER IN THE C-REGISTER. INS:LDB THREE!INITIALIZE COUNTER STB INSA LDB N!POINTER TO LAST TASK SET UP IN LIST SBO INSA!IF TWO ENTRIES ARE FULL, ASSUME BZE INSERT,X!THAT THE ENTIRE TABLE IS FULL, AND CRUMP AMB TWO!STEP POINTER TO NEXT ENTRY XBZ STERM!TEST FOR END OF LIST. BNZ *+2 LDB START!IF END, WRAP AROUND TO BEGINNING OF LIST. STB N LDZ N,X!IS THIS ENTRY IN LIST OCCUPIED... BNZ INS+3!IF SO, CONTINUE SEARCHING TRA C&,B!PLACE TELETYPE NUMBER IN B-REGISTER STD N,X!AND INSERT TASK IN LIST. BRU INSERT,X!RETURN INSA:OCT 0 !-SWAIT- WAITS FOR THE C.I.U. TO COME READY SWAIT1:STA STEMP!SAVE A REGISTER LDA SIXTY!INITIALIZE COUNTDOWN FOR CIU READY NES 1!TEST IF CIU IS READY BNZ *+4!IF SO, GET OUT AMA MONE!IF NOT READY, DECREMENT COUNTER BMI SRETRN,X!IF COUNTER RUNS OUT, TRY AGAIN LATER BRU *-4!OTHERWISE, CHECK CIU AGAIN LDA STEMP!RESTORE A REGISTER BRU SWAIT,X !-SDSKR- PERFORMS A DUMMY DISK OPERATION WHICH!!SIC - WHICH ==> THAT !IS NOT FOLLOWED BY A TEST-AND-BRANCH AND !DOES NOT SET LOCKOUT. THIS PERMITS THE 235 !TO GET ACCESS TO THE DISK. SDSKR1:STD STEMP!SAVE A AND B REGISTERS LDZ RFLAG!IF D-30 HAS NOT USED THE DISK SINC LAST BZE SDSKR2-3! RELINQUISH, IGNORE RELINQUISH AND EXIT. LDA ONE STA DKFLG2!SET 235 DISK PROTECT ON LDZ DKFLG1!IS SPARE-TIME DISK PROTECT ON... BNZ SDSKR2!IF SO, EXIT 1 NIS 7!WAIT FOR CONTROLLER-SELECTOR BZE *-1 CSR 0 BEV SDSKR2!IF NOT, EXIT 1 LDD CRAW2!PICK UP LAST-USED DISK ADDRESS RMB ONE!OR IN NEXT-SECTOR BIT STD 4 LDA STAT4!SET UP SEEK COMMAND STA 3 SEL!SEEK NIS 7 BZE *-1 LDA FIVE!INITIALIZE COUNTDOWN CSR 0!CONTROLLER READY BOD *+4!IF SO, END COUNTDOWN AND CONTINUE AMA MONE!IF NOT, DECREMENT COUNTER BMI SDSKR2!IF COUNT RUNS OUT, EXIT 1 BRU *-4!OTHERWISE, CHECK CONTROLLER AGAIN LDA CRAW1!SET UP READ-AFTER-WRITE COMMAND STA 4 LDA STAT2 STA 3 SEL!READ-AFTER-WRITE CLEARS DUAL-ACCESS CONT. STZ RFLAG!RESET FLAG ADO SDSKR LDA MONE STA DKFLG2 SDSKR2:LDD STEMP!RESTORE A AND B REGISTERS BRU SDSKR,X!RETURN TO EXIT 2 CRAW1:OCT 212040!RAW NEXT-SECTOR, NO LOCKOUT, API SET SRETRN:IND SREST STEMP:DDC 0 TTABLE:EQU *!LIST OF SPARE-TIME TASKS ETABLE:EQO 13770 STL!SPARE-TIME EXECUTIVE TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION LOC 14000 !-STEXEC- IS THE SPARE-TIME EXECUTIVE LOOP. !IT SCANS THE SPARE-TIME TASK LIST AND TRANS- !FERS CONTROL TO THE APPROPRIATE SUBROUTINES. !CONTROL CAN BE RETURNED TO -STEXEC- THROUGH !TWO ENTRANCES. -BRU STEXEC X- INDICATES TASK !HAS BEEN COMPLETED, AND THE ENTRY IS DELETED !FROM THE TASK LIST. -BRU STING X- INDICATES !TASK COULD NOT BE COMPLETED, AND ENTRY IS !NOT DELETED--THE TASK WILL BE ATTEMPTED AGAIN !NEXT TIME AROUND THE LIST. STEX1:STZ C,X!DELETE COMPLETED ENTRY FROM TABLE STING1:STZ DKFLG1!RELEASE DISK PRIORITY HOLD LDB C AMB TWO!STEP POINTER XBZ STERM BNZ *+2 LDB START!WRAP AROUND IF AT END STB C LDZ C,X!IS ENTRY ZERO...!!SIC - ZERO ==> NEGATIVE BMI STING1 BNZ C,X!IF NOT, BRANCH TO NEXT TASK BRU STEX1+3!IF SO, SEARCH FURTHER !-BETA- ALLOWS A SPARE-TIME SUBROUTINE TO !INSERT A CALL FOR ANOTHER SUCH SUBROUTINE IN !THE SPARE-TIME TASK LIST. THE ROUTINE IS !CALLED BY A -BRS BETA- FOLLOWED BY THE BRANCH !TO BE ENTERED IN THE LIST. THE TELETYPE !NUMBER MUST BE IN THE C-REGISTER. BETA1:SR6 Q&,Z!ENOUGH TIME LEFT BEFORE NEXT INTERRUPT... BNZ BETAOK!IF SO, CONTINUE NORMALLY. LDD STEXEC,X!REGISTER TRANSFER INSTRUCTIONS FROM Q-COUNTER LDD STEXEC,X!INHIBIT Q FROM COUNTING FOR ONE CYCLE. LDD STEXEC,X!BETTER NOT DO THIS TOO OFTEN, SO MUST WASTE LDD STEXEC,X!TIME. EACH OF THESE WASTES 4 CYCLES. LDD STEXEC,X!CAN YOU THINK OF A BETTER WAY... LDD STEXEC,X!...TO WASTE TIME... BRU BETA1!NOW GO CHECK AGAIN. BETAOK:LDA BETA,X!PICK UP BRS XXXXX TO BE PLACED IN LIST. BRS INSERT!INSERT TASK IN LIST. ADO BETA BRU BETA,X!RETURN. STL!HELLO SEQUENCE TASKS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION !-HELLO- BEGINS THE INITIALIZATION SEQUENCE !WHICH INPUTS THE USER NUMBER, SYSTEM NAME, !PROBLEM SOURCE (NEW OR OLD), AND PROBLEM NAME !IN THAT ORDER. HELLO1:LDC HELLO,X!INITIATE HELLO SEQUENCE ADO #HEL!ADD ONE TO HELLO COUNT BRS RESET!INITIALIZE ALL POINTERS AND FLAGS STZ $SYSTM!SET UP AN UNRECOGNIZABLE SYSTEM NAME LDA $STAND STA $DPOS3!SET PROGRAM LENGTH TO ZERO RECORDS LDD NONE!SET UP DUMMY PROBLEM NAME STA $WORD3 STA $WORD1 STB $WORD4 STB $WORD2 BRS SPINP!SET SPECIAL INPUT FLAG INB HA!FILL WITH BLANKS AND SET UP -HA- STZ $TYP!NO PROGRAM = NO CORRECTIONS BRS MESSG!TYPE OUT MESSAGE IND NOTICE BRU STEXEC,X HA1:LDC HA,X!HELLO SEQUENCE--PART 2 LDZ $OUTFF!MAKE SURE TELETYPE NOT OUTPUTTING BNZ STING,X LDD $INLOC,X!LOAD USER NUMBER BRS HCHEK!TEST FOR HELLO OR STOP BRS UCHEK!TEST FOR ILLEGAL USER NUMBER BRU *+6!IF NOT, CONTINUE NORMALLY BRS MESSG!IF USER NUMBER IS NOT OF THE FORM X99999 IND HERR!OR 999999 THEN TYPE ERROR MESSAGE BRS SPINP!SET SPECIAL INPUT FLAG AGAIN INB HA!FILL WITH BLANKS AND SET UP -HA- BRU STEXEC,X STA $WORD1!STORE USER NUMBER STB $WORD2 BRS MESSG IND HSYST BRS SPINP!SET SPECIAL INPUT FLAG INB HB!FILL WITH BLANKS AND SET UP -HB- BRU STEXEC,X UCHEK1:TRA AB&,Z!CHECK FOR ILLEGAL USER NUMBER BZE UCHEKA!MUST NOT BE 000000. NAZ ZBB BNZ *+3!MUST BE EITHER IN FORMAT X99999 OR 999999. NBZ BBB BZE UCHEK,X!IF LEGAL, EXIT TO BRS+1 BRS CTRLA BRU UCHEKA!IF NOT CONTROL TELETYPE, THEN EXIT AT BRS+2 XAZ UTEA!IF CONTROL TELETYPE, THEN TEACH OR LIB BZE UCHEK,X!ARE ALSO LEGAL USER NUMBERS. XAZ ULIB BZE UCHEK,X UCHEKA:ADO UCHEK!PREPARE TO EXIT AT BRS+2 BRU UCHEK,X!EXIT UTEA:ALF TEA ULIB:ALF LIB ZBB:OCT 006060 BBB:OCT 606060 HB1:LDC HB,X!HELLO SEQUENCE--PART 3 LDZ $OUTFF!PROCESS SYSTEM NAME BNZ STING,X LDD $INLOC,X!PICK UP SYSTEM NAME FROM INPUT LINE BRS HCHEK!CHECK FO -STOP- OR -HELLO- XAZ EDI BZE HBE STA $SYSTM!FIRST 3 LETTERS FORMS SYSTEM IDENTIFIER!!SIC - FORMS ==> FORM BRS MESSG!SET UP MESSAGE IND HNWOLD!-NEW OR OLD- BRU STEXEC,X!EXIT HBE:BRS MESSG!DO NOT ALLOW EDI AS A SYSTEM NAME IND SSYSNM BRS SPINP INB SYSB BRU STEXEC,X SYSA1:LDC SYSA,X!ENTER NEW SYSTEM NAME BRS RUNCH!CHECK FOR RUNNING BRS MESSG!SET UP MESSAGE IND HENTSY!-ENTER SYSTEM NAME- BRS SPINP!SET SPECIAL INPUT FLAG INB SYSB!FILL WITH BLANKS AND SET UP SYSB BRU STEXEC,X!EXIT SYSB1:LDC SYSB,X!PROCESS NEW SYSTEM NAME LDD $INLOC,X!PICK UP SYSTEM NAME FROM INPUT LINE BRS HCHEK!CHECK FOR -STOP- OR -HELLO- XAZ EDI BZE SYSE STA $SYSTM!FIRST THREE LETTERS FORM SYSTEM IDENTIFIER BRS BETA!SET UP TASK TO TYPE -READY- BRS TYPE BRU STEXEC,X!EXIT SYSE:LDA RTYSYS!DO NOT ALLOW EDI AS A SYSTEM IDENTIFIER STA $MSGL BRS BETA BRS ERROR BRU STEXEC,X OLDA1:LDC OLDA,X!OLD ROUTINE--PART 1 BRS RUNCH!CHECK IF RUNNING BRS SPINP!SET SPECIAL INPUT FLAG INB OLDB!FILL WITH BLANKS AND SET UP OLDB BRS MESSG IND HOPNAM!TYPE OLD PROBLEM NAME-- BRU STEXEC,X NEWA1:LDC NEWA,X!NEW ROUTINE--PART 1 BRS RUNCH!CHECK IF RUNNING BRS SPINP!SET SPECIAL INPUT FLAG INB NEWB!FILL WITH BLANKS AND SET UP NEWB BRS MESSG IND HNPNAM!TYPE NEW PROBLEM NAME-- ADO #NEW!ADD ONE TO NEW COUNT BRU STEXEC,X NEWB1:LDC NEWB,X!NEW ROUTINE--PART 2 LDD $INLOC,X!LOAD NEW PROBLEM NAME BRS HCHEK!TEST FOR STOP OR HELLO STA $WORD3 STB $WORD4 BRS BETA!SET UP -SCRATCH- BRS SCRCH BRU STEXEC,X!EXIT GDBYE1:LDC GDBYE,X!GOODBYE ROUTINE BRS RESET LDD NONE!ERASE USER NUMBER AND PROBLEM NAME STA $WORD1 STB $WORD2 STA $WORD3 STB $WORD4 STZ $SYSTM!ERASE SYSTEM NAME BRS RESET!RESET ALL POINTERS, ERASE ALL TASKS LDA GDSLEW!SET UP COUNTER FOR SLEWING PAPER STA $SPACE LDD RTIME!SET OFF TIME IN OUTPUT MESSAGE STA BTIME STB BTIME+1 BRS MESSG IND BYEMSG XCZ 1 BZE STEXEC,X BRS BETA BRS DISC BRU STEXEC,X GDSLEW:DEC 14!LENGTH OF SLEW AFTER SIGN OFF MESSAGE DISC1:LDC DISC,X!DISCONNECT DATASET STZ $KFLAG LDZ $OUTFF!WAIT FOR GOODBYE MESSAGE BNZ STING,X DEF 3 LDA FOUR!SET LINE STATUS FOR A 3 SEC DELAY BEFORE STA $LSTT!SENDING THE EOT STZ $LCNT BRU STEXEC,X !MESSAGES HERR:OCT 723143!ILLEGAL USER NUMBER/RETYPE IT-- ALF LEG ALF AL ALF USE ALF R N ALF UMB OCT 255137 ALF RET ALF YPE ALF IT OCT 404055 HSYST:OCT 726270!SYSTEM-- ALF STE ALF M-- OCT 557777 HENTSY:OCT 722545!ENTER SYSTEM NAME-- ALF TER ALF SY ALF STE ALF M N ALF AME OCT 404055 HNWOLD:OCT 724525!NEW OR OLD-- ALF W O ALF R O ALF LD- OCT 405577 HOPNAM:OCT 724643!OLD PROBLEM NAME-- ALF D P ALF ROB ALF LEM ALF NA ALF ME- OCT 405577 HNPNAM:OCT 724525!NEW PROBLEM NAME-- ALF W P ALF ROB ALF LEM ALF NA ALF ME- OCT 405577 NOHLLO:OCT 377270!YOU HAVE FORGOTTEN TO TYPE -HELLO-... ALF OU ALF HAV ALF E F ALF ORG ALF OTT ALF EN ALF TO ALF TYP OCT 256034 ALF HEL OCT 434634 ALF ... OCT 375577 BYEMSG:OCT 377254 OCT 545460 ALF OFF ALF AT BTIME:ALF ALF OCT 333755 NONE:ALF *NO ALF NE* STL!SPARE-TIME SUBROUTINES TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION !-RESET- IS A SUBROUTINE WHICH RESETS ALL!!SIC - WHICH ==> THAT !PERTINENT POINTERS, FLAGS, ETC., AND DELETES !ALL TASKS IN THE LIST WHICH WERE CALLED BY!!SIC - WHICH ==> THAT !THE TELETYPE SPECIFIED BY THE C-REGISTER. RESET1:STZ $OUTFF!REINITIALIZE ALL FLAGS AND POINTERS FOR STZ $ODC!THE TELETYPE SPECIFIED BY THE C-REGISTER STZ $PRIOR STZ $HFLAG STZ $IFLAG STZ $STAT STZ $CNFL STZ $SPACE STZ $DONE LDA MONE STA $IF STA $OF STA $LHFL LDA TWO STA $OCH LDA $INSTD STA $INLOC STA $IDLOC LDA $SYSTM!IF $SYSTM EQUAL TO -EDI- XAZ EDI BNZ *+3 LDA $SAVSY!YES, SO PUT BACK PREVIOUS SYSTEM NAME STA $SYSTM LDB START!ERASE ALL OF TELETYPE-S REMAINING SPARE-TIME TRA C&,A!TASKS XAZ SX1,X BNZ *+4 LDZ SX0,X BMI *+2 STZ SX0,X AMB TWO XBZ STERM BNZ *-7 XAZ KLISTF BNZ RESET,X STZ KLISTF STZ KOMAPT,X BRU RESET,X!RETURN SX0:INB 0 SX1:INB 1 KOMAPT:IND KOMA RUNCH1:LDZ $OUTFF BNZ STEXEC,X!IF TELETYPE IS OUTPUTTING, DELETE TASK LDA $WORD1!PLACE USER NUMBER IN REGISTERS LDB $WORD2 BRS UCHEK!CHECK FOR ILLEGAL USER NUMBER BRU *+4!IF LEGAL, CONTINUE NORMALLY BRS MESSG!OTHERWISE, ASK FOR HELLO SEQUENCE IND NOHLLO BRU STEXEC,X!AND EXIT LDZ $PRIOR!CHECK IF RUNNING BZE RUNCH,X!IF NOT, NORMAL EXIT LDB $RTIME!OTHERWISE, SET UP MESSAGE WITH RUN TIME BRS CONV!CONVERT BINARY TO DECIMAL DEC 10 STB GTIME BRS MESSG!TYPE OUT MESSAGE IND GMESS BRU STEXEC,X GMESS:OCT 375164!RUNNING TIME XXX0 SECONDS ALF NNI ALF NG ALF TIM OCT 251360 GTIME:ALF ALF SE ALF CON ALF DS. OCT 375577 HCHEK1:XAZ HHEL!CHECK FOR HELLO BNZ *+5 XBZ HLO BZE HBHEL XBZ HLOF BZE HBHEL XAZ HSTO!CHECK FOR STOP BNZ *+5 XBZ HP BZE HBSTO XBZ HPFF BZE HBSTO XAZ HSFF!CHECK FOR S BZE HBSTO XAZ HS BZE HBSTO XAZ HSPACE!CHECK FOR ALL SPACES BNZ *+4 XBZ HSPACE BNZ *+2 LDD NONE BRU HCHEK,X!RETURN HBHEL:BRS BETA!SET UP -HELLO- BRS HELLO BRU STEXEC,X!EXIT HBSTO:BRS BETA!SET UP -STOP- BRS STOP BRU STEXEC,X!EXIT HHEL:ALF HEL HLO:ALF LO HLOF:OCT 434637 HSTO:ALF STO HP:ALF P HPFF:OCT 477737 HSPACE:ALF HS:ALF S HSFF:OCT 627777 CNTRL1:STA CNTRLA!SAVE A-REGISTER TRA C&,A!PICK UP TELETYPE NUMBER AAZ CNTTY!TEST FOR A CONTROL TELETYPE BPL *+2!IF NOT CONTROL TELETYPE, EXIT TO BRS+1 ADO CNTRL!IF CONTROL TELETYPE, EXIT TO BRS+2 LDA CNTRLA!RESTORE A-REGISTER BRU CNTRL,X!EXIT CNTTY:DEC -3!TTY-S BELOW THIS NUMBER ARE CONTROL TELETYPES CNTRLA:OCT 0!TEMPORARY STORAGE FOR A-REGISTER CTRLA1:STA CNTRLA TRA C&,A AAZ CTTTY BPL *+2 ADO CTRLA LDA CNTRLA BRU CTRLA,X CTTTY:DEC -4 WAIT1:STC WSTC!CHECK IF THERE MAY BE A WAIT LDZ STOPF!IF STOP COUNTING TIME, HE MAY HAVE TO WAIT BNZ *+11!SO OUTPUT WAIT MESSAGE, JUST IN CASE PIC 127!INITIALIZE AIC 1 LDZ $STAT!SCAN THROUGH STATUS TABLE BNZ *+7!IF ANYONE IS RUNNING, TYPE --WAIT-- XCZ TELET BNZ *-4 LDC WSTC BRS MESSG!OTHERWISE, LINE-FEED IND WSPACE BRU WAIT,X!RETURN LDC WSTC BRS MESSG IND WWAIT BRU WAIT,X!RETURN WSTC:OCT 0!TEMPORARY STORAGE WSPACE:OCT 375577 WWAIT:OCT 376621!WAIT. OCT 316333 OCT 557777 SPINP1:LDA SPINP,X!SET SPECIAL INPUT FLAG STA $HFLAG ADO SPINP!EXIT AT BRS+2 BRU SPINP,X !SET UP TELETYPE OUTPUT MESSAGE MESSG1:LDZ $OUTFF BNZ STING,X!IF TELETYPE IS OUTPUTTING, TRY AGAIN LATER LDA MESSG,X NAZ MINA!-INA- AT BRS+1 SAYS MOVE MSG TO BUFFER BZE MNOMOV!BUT -IND- SAYS OUTPUT FROM WHERE MESSAGE IS LDZ $IF!IS BUFFER FREE... BZE STING,X!IF NOT, TRY LATER STA MPOINT LDA $IDLOC NMA IMSK12 XMA STAT2 STA $OLOC AMA MINA STA BPOINT TRA 0&,A MLOOP:LDB MPOINT,X STB BPOINT,X AMA ONE NMB M77 XBZ M77 BZE *+3 XBZ M55 BNZ MLOOP BRU *+2 MNOMOV:STA $OLOC!SET POINTER TO MESSAGE LDA ONE STA $OF STA $OUTFF STZ $ODC LDA M7777 RAM $SW2 STA $SW1 DEF 7 ADO MESSG BRU MESSG,X MINA:INA 0 MPOINT:OCT 0 BPOINT:OCT 0 M55:OCT 55 !FILL BUFFER TO END AND TRANSFER TO DISK CMPLT1:STC CSTC BRS DSKCH!IF DISK NOT AVAILABLE, TRY AGAIN LATER BRU STING,X BRS RUNCH!CHECK IF RUNNING BRS WAIT!CHECK IF WAIT CMPCOM:STZ $DONE!RESET DONE FLAG STZ $TFLAG!RESET TEST MODE STZ $RTIME!RESET RUNNING TIME COUNTER LDZ $TYP!ANY CORRECTIONS IN INPUT BUFFER... BZE CMPEX!IF NOT, EXIT LDA $IDLOC!FILL DISK BUFFER WITH FILL CHARACTERS TRA A&,B NMB M77 TRA B&,C NMA IMSK12 RMA CINC STA CPOIN LDD CDFILL STD CPOIN,X AIC 2 XCZ 64 BNZ *-3 LDC CSTC LDA STAT2 XAM $IDLOC BRS DIBS!TRANSFER REMAINING RECORD TO DISK CMPEX:LDA $INSTD STA $INLOC STA $IDLOC BRU CMPLT,X CTCMP1:STC CSTC BRS DSKCH!IF DISK NOT AVAILABLE, TRY AGAIN LATER BRU STING,X BRS RUNCH!CHECK IF RUNNING LDA CTCMP STA CMPLT BRU CMPCOM CSTC:OCT 0 CPOIN:OCT 0 CINC:INC 0 CDFILL:OCT 777777 OCT 777777 TYPE1:LDC TYPE,X!TYPEOUT -READY.- LDZ $STAT BNZ STING,X BRS MESSG IND READY BRU STEXEC,X READY:OCT 375125 OCT 212470 OCT 333772 OCT 557777 TERM1:LDC TERM,X!TERMINATE RUN AND OUTPUT MESSAGE BRS RESET BRU ERROR1+1 ERROR1:LDC ERROR,X!TYPE ERROR MESSAGE LDZ $OUTFF!IS TELETYPE OUTPUTTING BNZ STEXEC,X!IF SO, IGNORE ERROR MESSAGE LDA $MSGL STA *+2 BRS MESSG IND * LDA $MSGL XAZ RTYSYS BNZ STEXEC,X BRS SPINP INB SYSB BRU STEXEC,X RTYSYS:IND SSYSNM !-CONV- CONVERTS FROM BINARY TO THE BASE !SPECIFIED BY BRS+1 (E.G. DECIMAL OR OCTAL !INDICATED BY DEC 10 OR DEC 8) CONV1:LDA CONV,X!PICK UP BASE STA CONVA!STORE IN CALLING SEQ FOR CDIV ROUTINE ADO CONV!PREPARE FOR EXIT AT BRS+2 TRA B&,Z!CHECK FOR ZERO ARGUMENT BNZ *+3 LDD CDZERO!ZERO ARGUMENT IS SPECIAL CASE BRU CONV,X LDA FIVE!SET DIGIT COUNTER FOR SIX DIGITS STA CONVB BRS CDIV!DIVIDE BY BASE CONVA:DEC 10!BASE GOES HERE TRA AB&,Z!TEST IF BOTH QUOTIENT AND REMAINDER ARE ZERO BNZ *+2!IF SO, WE HAVE A LEADING ZERO LDA SIXTY!SO SUPPRESS IT CR6 A&,A!SHIFT DIGIT INTO HIGH-ORDER POSITION STD CSAVE!SAVE QUOTIENT AND DIGIT LDD CACCUM!LOAD ACCUMULATOR SRD 6!SHIFT TO MAKE ROOM FOR NEW DIGIT RMA CSAVE!INSERT NEW DIGIT SBO CONVB!STEP DIGIT COUNTER BMI CONV,X!IF DONE, EXIT STD CACCUM!OTHERWISE, RESTORE ACCUMULATOR LDB CSAVE+1!LOAD LAST QUOTIENT BRU CONVA-1 CDIV1:LDA CDIV,X!DIVIDE SUBROUTINE STA CBASE!SET DIVISOR ADO CDIV!PREPARE EXIT AT BRS+2 LDA CDIVNO!INITIALIZE SHIFT COUNTER STA CDIVCT TRA 0&,A CDIVLP:SLD 1!SHIFT INTO A TRC A&,A!SUBTRACT DIVISOR AMA CBASE TRC A&,A BPL *+3 AMA CBASE!IF OVERDRAW, RESTORE BRU *+2 RMB ONE!IF NO OVERDRAW, GENERATE QUOTIENT BIT SBO CDIVCT!STEP COUNTER BPL CDIVLP!IF NOT DONE, CONTINUE BRU CDIV,X!EXIT CONVB:OCT 0 CACCUM:DDC 0 CSAVE:DDC 0 CBASE:OCT 0 CDIVNO:DEC 17 CDIVCT:OCT 0 CDZERO:ALF ALF 0 PICK1:LDZ $OUTFF!PICK UP OCTAL NUMBER FROM INPUT LINE BNZ STING,X!IF TTY IS OUTPUTTING, WAIT STZ PICKA!CLEAR ACCUMULATOR LDA $IDLOC STA PICKB!INITIALIZE POINTER AT BEGINNING OF LINE STZ PARAF PICKC:LDA PICKB,X!GET WORD LDB TWO STB PICKD!SET CHAR POINTER TO LEFT PICKE:CL6 A&,AB!HIGH-ORDER CHAR TO LOW ORDER END NMB M77!MASK OFF IN B-REG XBZ M77!TEST FOR FILL CHARACTER BZE PICKX!IF SO, EXIT XBZ PICR!TEST FOR CARRIAGE RETURN BZE PICKX!IF SO, EXIT ABZ PIDIG!TEST FOR DIGIT BPL PICKF!IF NOT, IGNORE IT ADO PARAF LDB PICKA!LOAD ACCUMULATOR SL3 B&,B STB PICKA!RESTORE ACCUMULATOR TRA A&,B NMB SEVEN!MASK OFF NEW CHARACTER RBM PICKA!PLACE INTO ACCUMULATOR PICKF:SBO PICKD!STEP CHAR POINTER BPL PICKE!GO GET NEXT CHAR ADO PICKB BRU PICKC!GO GET NEXT WORD PICKX:LDA PICKA!EXIT WITH OCTAL IN A-REGISTER BRU PICK,X!EXIT WITH OCTAL IN A-REGISTER PICKA:OCT 0!ACCUMULATOR PICKB:OCT 0!WORD POINTER PICKD:OCT 0!CHARACTER POINTER PICR:OCT 37!CARRIAGE RETURN PIDIG:DEC -8!TRUE DIGIT TEST STL!DISK ROUTINES TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION !-DSKCH- TESTS ALL CONTINGENCY CONDITIONS !TO ASCERTAIN IF USE OF THE DISK IS PERMISSIBLE DSKCH1:SR6 Q&,Z!ENOUGH TIME BEFORE NEXT INTERRUPT... BZE DSKCH,X!IF NOT, EXIT AT BRS+1 LDZ DKFLG2!DOES 235 HAVE PRIORITY... BNZ DSKCH,X!IF NOT, EXIT AT BRS+1 LDA MONE!OTHERWISE, SET SPARE-TIME DISK PROTECT FLAG STA DKFLG1 STA RFLAG ADO DSKCH!PREPARE FOR EXIT AT BRS+2 BRU DSKCH,X!EXIT !-DSKOP- PERFORMS A SEEK/READ OR SEEK/WRITE !DISK OPERATION WITH ERROR CHECKING, USING !THE SIX CONTROL WORDS WHICH FOLLOW THE!!SIC - WHICH ==> THAT !SUBROUTINE CALL. DSKOP1:STD DSKAB!SAVE A AND B REGISTERS ADO #DSK!ADD TO COUNTER OF DISK OPERATIONS *** LDA DSK5!INITIALIZE ERROR COUNTER STA DSKERR DSKOPE:BRS DSKGET!PICK UP PARAMETERS FOR SEEK, PUT INTO 3-4-5 STB PREPOS!SAVE DISK ADDRESS FOR RELINQUISH RTN (SDSKR) SEL!SEEK ADO DSKOP BRS DSKGET!PICK UP READ/WRITE PARAMETERS, PUT IN 3-4-5 SEL!PERFORM READ/WRITE OPERATION BRS DSKWT!WAIT FOR CONTROLLER READY SL6 B&,B!CHECK FOR ERRORS BMI *+4 ADO DSKOP!IF NOT, PREPARE TO EXIT LDD DSKAB!RESTORE A AND B REGISTERS BRU DSKOP,X!RETURN TO CALLING PROGRAM ADO DSKERR!IF ERRORS, STEP ERROR COUNTER BMI DSKAGN!IF NOT TOO MANY TRIES, TRY AGAIN BRS MESSG!OTHERWISE, TYPE ERROR MESSAGE IND DSKMSG STZ $STAT!CRUMP WHATEVER IN PROGRESS LDA MONE STA $IF BRU STEXEC,X!EXIT DSKAGN:LDA DSK5!RESET POINTER TO BEGINNING OF PARAMETER LIST AAM DSKOP BRU DSKOPE!TRY AGAIN DSKGET:IND 0!SUBROUTINE--PICK UP NEXT 3 PARAMETER WORDS IND *+1!AND PLACE IN WORDS 3, 4, AND 5 FOR DSU BRS DSKWT!FIRST, WAI FOR DSU CONTROLLER READY LDA DSKOP,X!PICK UP FIRST PARAMETER STA 3!PLACE IN WORD 3 ADO DSKOP!STEP PARAMETER POINTER LDA DSKOP,X!PICK UP SECOND PARAMETER WORD ADO DSKOP LDB DSKOP,X!AND THIRD PARAMETER WORD STD 4!PLACE IN WORDS 4 AND 5 FOR DSU BRU DSKGET,X!RETURN DSKWT:IND 0!SUBROUTINE--WAIT FOR DISK READY IND *+1 TRA 0&,A!INITIALIZE COUNTDOWN NIS 7!WAIT FOR CONTROLLER-SELECTOR BZE *-1 CSR 0!TEST STATUS OF DSU CONTROLLER BOD DSKWT,X!IF READY, EXIT AMA FOUR!ELSE, INCREMENT COUNTER BNZ *-3!IF NOT COUNTED DOWN, TRY AGAIN PIC 1 STZ $OUTFF!PREPARE TO OUTPUT EMERGENCY MESSAGE ON TTY1 BRS MESSG IND DSKCLR LDA STAT4!FORCE MASTER OVERRIDE ON DSU STA 3 LDD CRAW2 STD 4 SEL BRU STING,X!EXIT DSK5:DEC -5!ALL PURPOSE CONSTANT DSKAB:DDC 0!TEMP STORAGE FOR A AND B REGISTERS DSKERR:OCT 0!DISK ERROR COUNTER DSKMSG:OCT 377224 ALF ISK ALF ER ALF ROR OCT 333755 DSKCLR:OCT 373232 OCT 322462 OCT 643755 DOB1:LDC DOB,X!DISK-TO-OUTPUT-BUFFER TRANSFER ROUTINE BRS DSKCH!TEST FOR DISK AVAILABLE AND READY BRU STING,X!IF NOT, TRY AGAIN LATER LDB $DPOS4!SET UP POSITION STB DOBA LDB $OLOC!SET UP MEMORY ADDRESS NMB IMSK12 LDZ $ODC!CHECK WHETHER OR NOT TO FLIP-FLOP BMI *+2 XMB STAT2 STB DOBB NMB OM200!CHECK FOR ILLEGAL BUFFER ADDRESS XBZ $INSTD BZE *+7 LDA $INSTD!USE BUFFER ADDRESS AS READ IN STA $OLOC!LOCATION STA DOBB TRA C&,A STD DOBSV!SAVE TTY NO. AND ADDRESS DIF 3!TURN ON BUZZER BRS DSKOP!PERFORM DISK OPERATION OCT 200 OCT 510100 DOBA:OCT 0 OCT 100 OCT 210101 DOBB:OCT 0 LDA TWO!STEP DISK ADDRESS AAM $DPOS4 LDA MONE!SET FLAG TO INDICATE THAT TRANSFER IS DONE STA $OF BRU STEXEC,X!EXIT BSS 1 DOBSV:BSS 2!SAVED TTY NO. AND ADDRESS !INPUT-BUFFER-TO-DISK ROUTINE DIB1:LDC DIB,X!SPARE-TIME TASK BRS DSKCH!TEST FOR DISK AVAILABLE BRU STING,X BRS DIBS!GO TO DISK SUBROUTINE BRU STEXEC,X DIBS1:LDA $DPOS3!TEST TOP OF 3K AREA... NMA DMSK9!MASK OFF POSITION XAZ D3K!TEST SECTOR BNZ DIBC LDA MONE STA $IF BRS MESSG!IF END OF AREA, TYPE OUT ERROR MESSAGE IND DER3K BRU STEXEC,X!ABORT DISK OPERATION DIBC:LDB $DPOS3!SET UP DISK ADDRESS STB DIBA LDB $IDLOC!LOAD BUFFER ADDRESS NMB IMSK12!FLIP-FLOP BUFFER XMB STAT2 STB DIBB BRS DSKOP OCT 200 OCT 510100 DIBA:OCT 0 OCT 300 OCT 710101 DIBB:OCT 0 LDA MONE!SET FLAG FOR REAL-TIME STA $IF LDA $DPOS3 AMA TWO!STEP DISK ADDRESS STA $DPOS3 NMA DMSK9!CHECK FOR END OF 2K AREA XAZ D2K BNZ DEXIT!IF NOT EXIT LDZ $OUTFF!STILL OUTPUTTING THE LINE-FEED... BNZ *-1!IF SO, WAIT BRS MESSG IND DER2K DEXIT:BRU DIBS,X!RETURN DMSK9:OCT 777 D2K:OCT 100 D3K:OCT 140 DER2K:OCT 374751!PROGRAM SIZE LIMIT--ONLY CORRECTIONS BEYOND ALF OGR!THIS POINT. ALF AM ALF SIZ ALF E L ALF IMI ALF T-- ALF ONL ALF Y C ALF ORR ALF ECT ALF ION ALF S B ALF EYO ALF ND ALF THI ALF S P ALF OIN OCT 633337 OCT 557777 DER3K:OCT 374751!PROGRAM TOO LONG. ALF OGR ALF AM ALF TOO ALF LO ALF NG. OCT 377255 STL!LIST AND OUTPUT TASKS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION LISTA1:LDC LISTA,X!LIST ROUTINE--PART 1 TRC 0&,A STA $LINE1 STA $LINE2 LDB $INLOC LDA LINB1,X!CHECK IF SELECTIVE LIST NMA M77 XAZ LCR BNZ *+4!IF SO, BRANCH LDA $TYP!IF NOT, CHECK IF ANY CORRECTIONS BZE LNO235!IF NOT, DO NOT HAVE TO USE THE 235 AT ALL BRU LNOSL!BUT IF CORRECTIONS, MUST EDIT LDD LINB2,X!RETRIEVE LINE NUMBER RMB M77 STA $LINE1 STB $LINE2 LNOSL:BRS CMPLT!SERVICE RESIDUAL BUFFERLOAD ADO #LST!BUMP UP NUMBER OF LISTS DONE *** LDA TWO!SET UP LIST STATUS STA $STAT LDA ONE STA $LHFL STA $PRIOR BRU STEXEC,X LNO235:CAM $LHFL!HEADING LINE BRS RUNCH!CHECK IF RUNNING CMA $STAND AAZ $DPOS3 BPL *+5 CAM $DPOS3 BRS MESSG IND SNOPGM BRU STEXEC,X CAM $LINE1 STZ $LINE2 LDA $INSTD STA $INLOC STA $IDLOC BRS BETA BRS LISTB!SET UP NEXT PHASE OF LIST BRU STEXEC,X LCR:OCT 37 LINB1:INB 1 LINB2:INB 2 OUTPT1:LDC OUTPT,X!OUTPUT ROUTINE LDZ $OUTFF BNZ STING,X!IF TELETYPE IS OUTPUTTING, TRY LATER LDZ $OUT BZE NOOUT STZ $LINE2!FUDGE LDA $STAND!SET UP DISK ADDRESS AMA OM276 BRU LISKOM NOOUT:LDA $CNFL BZE STEXEC,X LDA NTBCN,X STA *+2 BRS BETA BSS 1 BRU STEXEC,X NTBCN:INA * BRS MORE BRS INPTB LISTB1:LDC LISTB,X!LIST ROUTINE--PART 2 LDZ $OUTFF BNZ STING,X!IF TELETYPE IS OUTPUTTING, TRY LATER LDA $LINE1 LISKOM:STA $DPOS4!INITIALIZE DISK POINTER AT BEGINNING OF AREA BRS BETA!SET UP THIRD PART OF LIST/OUTPUT TASK BRS LISTC LDZ $LHFL!IS THERE A HEADING LINE TO BE TYPED... BZE STEXEC,X!IF NOT, EXIT STZ $LHFL!RESET FLAG LDA $WORD3!SET UP PROBLEM NAME STA LNAME LDA $WORD4 STA LNAME+1 LDD RTIME!SET UP REAL-TIME STA LTIME STB LTIME+1 LDA IMAGE!SET UP DATE STA LIMAG LDA IMAGE+1 STA LIMAG+1 LDA IMAGE+2 STA LIMAG+2 LDA IMAGE+3 STA LIMAG+3 LDA IMAGE+4 STA LIMAG+4 BRS MESSG!TYPE OUT HEADING LINE INA LEAD BRU STEXEC,X LEAD:OCT 377272!HEADING LINE FOR OUTPUT LNAME:ALF ALF ALF LTIME:ALF ALF ALF LIMAG:ALF ALF ALF ALF ALF OCT 377255 LISTC1:LDC LISTC,X!LIST ROUTINE--PART 3 LDZ $OUTFF BNZ STING,X!IF TELETYPE IS OUTPUTTING, TRY LATER LDZ $IF!IS BUFFER FREE... BZE STING,X!IF NOT, TRY LATER LDA MONE STA $ODC!INITIALIZE AND PREPARE FOR OUTPUTTING STZ $OF LDA M7777 RAM $SW2 STA $SW1 DEF 7!RESET ECHOPLEX ADO $OUTFF!SET D-30 OUTPUT FLAG LDA $INSTD AMA $LINE2 STA $OLOC LDA $CNFL!IS CONTINUE FLAG ON... BZE *+3 CAM $CNFL!IF SO, COMPLEMENT IT BRU *+3 LDA TWO STA $SPACE!IF NOT, SLEW PAPER AT END OF OUTPUT BRS BETA BRS DOB!LOAD BUFFER WITH FIRST RECORD OF OUTPUT BRU STEXEC,X STL!RUN TASKS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION !-RUN- INITIATES THE SEQUENCE WHICH ALLOWS !A PROBLEM TO COMPILE AND RUN IN THE 235. RUN1:LDC RUN,X BRS CMPLT ADO #RUN!BUMP UP COUNTER OF DAYS RUNS *** STZ $QUEUE!START IN 0-TH QUEUE LDA FOUR!SET INITIAL RUN STATUS STA $STAT TRC 0&,A STA $LHFL LDA $SYSTM XAZ EDI!NO HEADING FOR EDIT BNZ *+2 CMM $LHFL LDA THREE STA $PRIOR BRU STEXEC,X MORE1:PIC 0!GET BATCH $DONE VALUE LDB $DONE LDC MORE,X!NOW SET UP THE CONTINUATION OF THE RUN LDZ $OUTFF!IF TELETYPE OUTPUTTING, WAIT BNZ STING,X STZ $CNFL!RESET CONTINUE FLAG STZ $LCNT!IF RUNNING DON’T ALLOW A DISCONNECT STZ $QUEUE!ASSUME THIS IS A SHORT RUNNING PROGRAM LDA $RTIME!NOW CHECK FOR LONG RUNNING I.E. IS AAZ LSCUT!$RTIME GREATER THAN LONG SHORT CUT POINT BMI *+11!NOT A LONG RUNNING PROGRAM SO NO DELAY ADO $QUEUE ADO $PRIOR!LET EVERY ONE ELSE IN AHEAD!!SIC - EVERY ONE ==> EVERYONE LDA MINDON!SET $DONE TWO BACK OF MINDONE AMA MTWO STA $DONE XBZ $DONE!UNLESS BATCH AND THIS CHANNEL ARE IN BOD *+3!THE SAME RESIDUE CLASS MOD 2 AMA MONE!IN THIS CASE GET THIS CHANNEL INTO THE STA $DONE!OTHER RESIDUE CLASS STA MINDON!NOW SET MINDON TO THE NEW MINIMUM LDA FIVE!SET CONTINUED RUN STATUS STA $STAT BRU STEXEC,X!EXIT IOUT1:LDC IOUT,X!INTERMEDIATE OUTPUT SET-UP ROUTINE LDA ONE STA $CNFL LDA FIVE!SET PRIORITY EQUAL TO 5 STA $PRIOR BRS BETA BRS OUTPT!SET UP TYPEOUT TASK BRU STEXEC,X!EXIT INPTA1:LDC INPTA,X!REAL-TIME INPUT--PART 1 ADO #INPT!ADD ONE TO CALL FOR INPUT COUNT LDA TWO!SET CONTINUE FLAG STA $CNFL LDA FOUR!SET PRIORITY EQUAL TO 4 STA $PRIOR BRS BETA!INITIATE OUTPUTTING OF OUTPUT BUFFER BRS OUTPT BRU STEXEC,X!EXIT INPTB1:LDC INPTB,X!REAL-TIME INPUT--PART 2 STZ $CNFL!RESET CONTINUE FLAG LDA $INSTD!SET INPUT POINTERS TO LOWER BUFFER STA $INLOC STA $IDLOC BRS SPINP!SET SPECIAL INPUT FLAG IND INPTC!FILL WITH 77-S AND SET UP INPTC LDA M7777!SET UP TO OUTPUT QUESTION MARK RAM $SW2 LDD IQMSP NAM $SW2 STB $SW1 DEF 7 BRU STEXEC,X IQMSP:OCT 377576!QUESTION MARK (TTY CODE) OCT 007500!SPACE (TTY CODE) INPTC1:LDC INPTC,X!REAL-TIME INPUT--PART 3 BRS DSKCH!TEST FOR DISK AVAILABLE BRU STING,X!IF NOT, TRY LATER LDD $IDLOC,X!PICK UP BEGINNING OF INPUT LINE BRS HCHEK!TEST FOR STOP OR HELLO LDA INLF!SET UP OUTPUT LINE-FEED STA $SW1 DEF 7 LDA $STAND!PREPARE TO WRITE A RECORD ONTO DSU AMA OM276!DISK ADDRESS IS FIRST RECORD OF OUTPUT AREA STA INPTX!WHICH IS AT THE BEGINNING OF THE OUTPUT AREA LDA $INSTD!WRITE OUT OF INPUT BUFFER STA INPTY BRS DSKOP!GO TO DISK SUBROUTINE OCT 200 OCT 510100 INPTX:OCT 0 OCT 300 OCT 710101 INPTY:OCT 0 BRS BETA!SET UP TASK TO CONTINUE RUN BRS MORE BRU STEXEC,X!EXIT INLF:OCT 7424!LINE-FEED (TTY CODE) STL!USER PROGRAM SAVE AND RETRIEVE TASKS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION LOC 16000!BEGIN CATALOG - DSU STORE - MODULE OLDB1:LDC OLDB,X!OLD ROUTINE--PART 2 BRS RUNCH!CHECK FOR RUNNING BRS WAIT!CHECK FOR WAIT ADO #OLD!BUMP UP COUNTER OF OLD OPERATIONS *** LDD $INLOC,X!LOAD OLD PROBLEM NAME BRS HCHEK!CHECK FOR STOP OR HELLO STA $WORD3!STORE PROBLEM NAME STB $WORD4 STZ $KOMFL LDA $INLOC!CHECK FOR -***- AFTER PROBLEM NAME AMA TWO NAZ O177!TEST FOR WRAPAROUND TO LOWER BUFFER BNZ *+2 LDA $INSTD!IF SO, FUDGE LDB ONA2,X!PICK UP 3 CHARS AFTER PROBLEM NAME IN BUFFER XBZ OSTARS!COMPARE WITH *** BNZ *+3 LDA THREE STA $KOMFL STZ $TYP!DELETE ANY NEW CORRECTIONS STZ $DONE LDA $INSTD STA $INLOC!RESET INPUT ROUTINE POINTERS STA $IDLOC BRU KOMMON ONA2:INA 0 O177:OCT 177 OSTARS:ALF *** CATA1:LDC CATA,X!CATALOG PRINTOUT ROUTINE--PART 1 BRS RUNCH!CHECK IF RUNNING BRS CTCMP ADO #CAT!BUMP UP COUNTER OF CATALOG PRINTOUTS *** LDA $WORD1!SET UP ID NUMBER IN HEADING LINE STA DNUM LDA $WORD2 STA DNUM+1 LDA IMAGE!SET UP DATE STA DIMAG LDA IMAGE+1 STA DIMAG+1 LDA IMAGE+2 STA DIMAG+2 LDA IMAGE+3 STA DIMAG+3 LDA IMAGE+4 STA DIMAG+4 LDD RTIME!SET UP TIME STA DTIME STB DTIME+1 BRS MESSG INA DHEAD BRS BETA!SET UP CATALOG TASK PART 2 BRS CATB BRU STEXEC,X DHEAD:OCT 377262!SAVED PROGRAMS, USER NUMBER XXXXXX ALF AVE ALF D P ALF ROG ALF RAM ALF S&, ALF USE ALF R N ALF UMB ALF ER DNUM:ALF ALF OCT 606037 DIMAG:ALF ALF ALF ALF ALF ALF ALF ALF TI OCT 442513 DTIME:ALF ALF OCT 377255 ! --- *** --- KOM --- *** --- ! KOM IS ENTERD ON ALL CATALOG TASKS.!!SIC - ENTERD ==> ENTERED !IT MAKES A DECISION ON JUST WHAT CATALOG !TASK IS DESIRED BY USING $KOMFL KOM1:LDC KOM,X!PICK UP CHANNEL NUMBER OF CALLING TERMINAL LDA $KOMFL!NOW BRANCH TO CORRECT TASK BRU KOMCN,X!KOMCN IS AN INA KOM1+4, TO GET TO FOLLOWING!!SIC - KOM1+4 ==> KOM1+3 BRU KOLD!0 IS NORMAL OLD PROGRAM LOOK UP BRU KCAT!1 IS CATALOG PRINTOUT BRU KSAV!2 IS ANY KIND OF SAVE OPERATION BRU KOLDL!3 IS A LIBRARY LOOKUP OF OLD PROGRAM BRU KUNS!4 IS AN UNSAVE BRU * BRU * BRU *!SIX AND SEVEN ARE UNUSED......!!SIC - 5, 6 AND 7 ARE UNUSED ! --- KOLD --- ! KOLD LOOKS UP A PROGRAM , ACCORDING TO !BOTH USER NUMBER SND PROBLEM NAME. IT TYPES!!SIC - SND ==> AND !OUT -PROGRAM NOT SAVED- IF IT CANNOT FIND IT, !AND PLACES IT IN THE USERS SANDARD AREA IF IT!!SIC - SANDARD ==> STANDARD !CAN FIND IT. PIECES OF THIS ROUTINE ARE !USED BY OTHER ROUTINES IN THIS SECTION KOLD:BSS 0 BRS KINIT BRS KEN BRU KOLD2!PROGRAM FOUND KOLD1:LDA $WORD3 STA HERROR+7 LDA $WORD4 STA HERROR+8 LDZ $OUTFF BNZ *-1 BRS MESSG!OUTPUT -PROGRAM NOT SAVED ****** - MESSAGE INA HERROR BRU KOMX1 KOLD2:LDA DATE!PROGRAM SAVED, UPDATE CODED DATE STA LIST7,X KOLD3:BRS KWRT!AND REWRITE THE CATALOG LDA LIST5,X!NOW SET UP TO GET PROGRAM INTO STANDARD AREA STA $WORD5 LDA LIST6,X STA $WORD6 AMA $STAND TRC A&,A AMA $WORD5 TRC A&,A STA $DPOS3 LDA ONE STA $PRIOR STA $STAT BRU KOMX2!AND EXIT, RESETTING $KOMFL, BUT NOT $STAT ! --- KUNS --- ! UNSAVE A CATALOG ENTRY , USES PARTS OF !KOLD. KUNS:BRS KINIT BRS KEN BRU *+2!FOUND IT BRU KOLD1!NOT THERE - SO DO JUST LIKE IN SAVE LDA KFLL!WIPE OUT ENTRY STA LIST1,X STA LIST2,X STA LIST3,X STA LIST4,X LDA DATE!AND INDICATE DATE UNSAVED STA LIST7,X!BUT LEAVE DISK ADDRESSES BRS KWRT!REWRITE CATALOG BRU KOMX ! --- KCAT - CATALOG PRINTOUT --- ! KCAT PRINTE OUT THE PROGRAMS IN A USERS !SAVED STORAGE. IT PRINTS OUT 40 PROGRAMS PER !BLOCK, UNTIL ALL PROGRAMS HAVE BEEN LISTED. !*** EXCEPTION ***. !IF A REQUEST FOR A CATALOG PRINTOUT WHICH HAS !MORE THAN 40 PROGRAMS IN IT OVERLAPS ANY !OTHER SUCH REQUEST (CATALOG WITH MORE THAN 40 !PROGRAMS) THE OVERLAPPING -SECOND INITIATED- !CATALOG WILL RECEIVE ONLY THE FIRST 40 !PROGRAMS, FOLLOWED BY TRAILING DOTS KCAT:BRS KINIT!GET THE GOOD OLD CATALOG LDA KEGHT!SET LINE COUNTER (CAN ONLY GENERATE 128 ) STA KCOUNT LDA FIVE STA KFLIP LDA $INSTD!GET BUFFER ADDRESS TO PUT THIS STUFF IN STA KCAT4 STA KPOIN KCAT2:BRS KUN BRU KCAT1!PUT AWAY A PROGRAM NAME LDA KEOM!TERMINATE STA KPOIN,X BRS MESSG KCAT4:IND 0 BRU KOMX1 KCAT1:LDA LIST3,X BRS KPOINS LDA LIST4,X BRS KPOINS BRS KEND!AND STEP OVER PROGRAM JUST HANDLED SBO KFLIP BZE *+4 LDA KSPC BRS KPOINS BRU KCAT2 LDA KENL BRS KPOINS LDA FIVE STA KFLIP SBO KCOUNT BNZ KCAT2 LDA KOMA STA $LINE1 STB $LINE2!!WHERE DID B-REGISTER GET LOADED? BRS BETA BRS CATC!AND PREPARE TO WAIT THE THING OUT BRU KCAT2+2!AND OUTPUT THIS BUFFER LOAD CATC1:BSS 0 LDC CATC,X LDZ $OUTFF!WAIT FOR TWO BUFFER LOADS TO GET OUTPUTTED BNZ STING,X LDA $LINE1 BRS KFNIT LDB $LINE2 BRU KCAT+1 KPOINS:IND 0 IND *+1 STA KPOIN,X ADO KPOIN BRU KPOINS,X !CATALOG - PART 2 CATB1:LDC CATB,X LDZ $OUTFF BNZ STING,X!PUNT UNTIL HEADER IS OUT LDA ONE STA $KOMFL BRU KOMMON ! --- SAVE - PART 1 SAVEA1:LDC SAVEA,X BRS CMPLT!FILL OUT AND WRITE OUT IF NECESSARY ADO #SAV!BUMP UP NUMBER OF SAVE OPERATIONS DONE *** LDA TWO STA $KOMFL BRU KOMMON ! UNSAVE - PART 1 UNSAV1:LDC UNSAV,X LDZ $OUTFF BNZ STEXEC,X ADO #UNS!BUMP UP COUNTER OF UNSAVE OPERATIONS *** LDA FOUR STA $KOMFL BRU KOMMON KOMMON:BRS BETA BRS KOM BRU STEXEC,X ! --- KSAV --- ! SAVE A PROGRAM SOMEWHERE - AND THIS ONE !CAN GET HAIRY. KSAV:BRS KINIT BRS KEN BRU KSAV2!IT IS, SO SEE IF IT IS STILL THE SAME LENGTH BRS KHOLF BRU KSAV3!PUT IT, AND THEN GO PUT IT THERE KSAV2:LDA LIST8,X NMA KMSK1!PICK UP BITS INDICATING SIZE OF HOLE XAZ KLNGF BZE KSAV4 LDA KFLL!IT WASN T - SO UNSAVE, AND RESAVE STA LIST1,X STA LIST2,X STA LIST4,X!!STRANGELY OUT OF SEQUENCE STA LIST3,X BRS KWRT!AND REWRITE THIS CATALOG - OR LINK BRS KHOLF!AND FIND OURSELVES A GOOD HOLE KSAV3:LDA $WORD1 STA LIST1,X LDA $WORD2 STA LIST2,X LDA $WORD3 STA LIST3,X LDA $WORD4 STA LIST4,X KSAV4:LDA DATE STA LIST7,X LDA LIST5,X STA $WORD5!GIVE OLD ROUTINE A STARTING ADDRESS ... STB KCOUNT LDA THREE STA $STAT LDA TWO STA $PRIOR STC KLISTF!SET TO C-COUNTER SO RESET CAN RESET IT BRU KOMX2 ! --- KOLDL --- ! FIND A LIBRARY PROGRAM KOLDL:LDA KLIBA BRS KFNIT BRS KPN BRU KOLDL2!SURPRISINGLY ENOUGH, THE PROGRAM IS THERE LDZ $OUTFF BNZ *-1 BRS MESSG!TELL GUY PROGRAM NOT IN LIBRARY IND LERROR BRU KOMX1 KOLDL2:BSS 0 ADO LIST7,X!DO LIBRARY CODED DATA UPDATE ADO LIST7,X BPL KOLD3 LDA DATE STA LIST7,X BRU KOLD3 ! --- TEST1 --- ! LOOK UP A TEST PROGRAM FOR TEACH SYSTEM TEST1:LDC TEST,X LDA KTEAA BRS KFNIT!READ IN THE CATALOG BRS CMPLT!FILL OUT THE BUFFER IF NECESSARY ADO #TST!BUMP UP COUNTER OF TEST OPERATIONS *** TRA 0&,B!AND RESET B CORRECTLY BRS KPN BRU TFIND LDA $WORD3 STA TNAM LDA $WORD4 STA TNAM+1 LDA $OUTFF BNZ *-1 BRS MESSG INA TERROR BRU STEXEC,X TFIND:LDA LIST5,X STA $WORD5 LDA LIST6,X STA $WORD6 STZ $QUEUE LDA THREE STA $PRIOR!SET FIRST RUN PRIORITY LDA FOUR STA $STAT TRC 0&,A STA $LHFL STA $TFLAG BRU STEXEC,X ! SUBROUTINE KFNIT --- ! KFNIT PERFORMS ESSENTIALLY THE SAME !FUNCTION AS KINIT, EXCEPT THAT IT EXPECTS THE !ADDRESS (ON THE DISK) OF THE DESIRED !CATALOG FILE TO BE IN THE A REGISTER ON !ENTRANCE TO THE ROUTINE. KFNIT:IND 0 IND *+1 STA KOMB LDZ KLISTF!CHECK FOR PROTECTED CATALOG BNZ STING,X BRS DSKCH BRU STING,X LDA KOMB BRS KRD!READ IN CATALOG IF NECESSARY STZ KHOLE!SET HOLE FOUND FLAG OFF BRU KFNIT,X ! --- SUBROUTINE KEN --- ! KEN LOOKS UP AN ENTRY IN A GIVEN CATALOG, !SEARCHING FOR A MATCH ON BOTH USER NUMBER AND !PROBLEM NAME. IT RETURNS TO THE !LOCATION FOLLOWING THE BRS IF IT FIND THE !ENTRY (B REGISTER POINTS TO ENTRY) AND RETURN !IS TO THE SECOND LOCATION FOLLOWING THE BRS !IF THE PROGRAM IS NOT FOUND KEN:IND 0 IND *+1 LDA $WORD1 XAZ LIST1,X BNZ KNO LDA $WORD2 XAZ LIST2,X BNZ KNO LDA $WORD3 XAZ LIST3,X BNZ KNO LDA $WORD4 XAZ LIST4,X BZE KEN,X!FOUND IT KNO:BRS KEND!DIDN T FIND IT YET - BUMP TO NEXT ENTRY BRU KEN+2 ADO KEN!DIDN T FIND IT AT ALL, CAUSE IT AIN T THERE BRU KEN,X ! --- SUBROUTINE KUN --- ! KUN IS BASICALLY THE SAME AS KEN, BUT !SEARCHES ON THE BASIS USER NUMBER ONLT,!!SIC - BASIS USER NUMBER ONLT ==> !IGNORING PROBLEM NAME. IT MAY BE LEFT AND!!BASIS OF USER NUMBER ONLY !REENTERED AT ANY POINT IN THE SEARCH. KUN:IND 0 IND *+1 LDA $WORD1 XAZ LIST1,X BNZ KNO1 LDA $WORD2 XAZ LIST2,X BZE KUN,X!MATCH FOUND ON USER NUMBER KNO1:BRS KEND BRU KUN+2!KEEP TRYING ADO KUN!GIVE UP BRU KUN,X ! --- SUBROUTINE KPN --- !LIKE KUN, BUT SEARCH IS ON PROBLEM NAME ONLY KPN:IND 0 IND *+1 LDA $WORD3 XAZ LIST3,X BNZ KNO2 LDA $WORD4 XAZ LIST4,X BZE KPN,X KNO2:BRS KEND BRU KPN+2 ADO KPN BRU KPN,X ! --- SUBROUTINE KHOLF --- ! THIS ROUTINE LOOKS FOR A HOLE IN THE !PRESENT CATALOG, OR CREATES ONE IF NONE EXIST !IT ASSUMES THE B-REGISTER POINTS TO THE !EOF ENTRY IN THE PRESENT CATALOG, WHICH IS !ALREADY IN MEMORY. IT INTERROGATES KHOLE !TO SEE IF A PROPER LENGTH HOLE HAS BEEN FOUND !KLNGF TO DETERMINE WHAT SIZE HOLE IS NEEDED. !IT EITHER CREATES OR UPDATES THE PROPER !CATALOG, AND RETURNS WITH THE PROPER !BEGINNING ADDRESS STORED, AND THE B REGISTER !POINTING TO THE HOLE. KHOLF:IND 0!FIND A SPOT FOR A PROGRAM, ON DISK AND IN CAT IND *+1 LDA KHOLE!CHECK TO SEE IF A PROPER LENGTH HOLE BZE *+5!EXISTS ALREADY, AND IF SO USE IT AND EXIT LDA KHOLE+1!IMMEDIATELY BRS KRD!MAY HAVE TO READ IN APPROPRIATE LINK LDB KHOLE!SET B CORRECTLY BRU KHOLF,X!AND WERE OUT OF HERE BRS KEND!IF HAVE NOT COMPLETED CATALOG, LOOK SOME MORE BRU KHOLF+2 XBZ KENDL BNZ KHOLF3 LDB KLNGF LDA FOUR STA KLNGF BRS KDSK STB KLNGF LDB KENDL!RESET B TO POINT TO END OF OLD CATALOG STA LIST1,X LDA KLNK STA LIST2,X BRS KWRT!AND GO WRITE OUT THIS CATALOG LDA LIST1,X TRA 0&,B STA KOMA KHOLF3:LDA KEOF!WRITE A NEW END OF FILE ON CATALOG STA LIST10,X BRS KDSK!AND GET A PIECE OF DISK FOR THE PROGRAM TOO!!SIC - PIECE ==> PIECE STA LIST5,X LDA KLNGF STA LIST8,X!SET BITS INDICATING LENGTH OF HOLE BRU KHOLF,X!AND EXIT THIS THING ! -- KEND SUBROUTINE --- ! KEND IS A SPECIALIZED ROUTINE TO BUMP !UP THE CATALOG POINTER DURING CATALOG !SEARCHES. IT CHECKS FOR THINGS LIKE END !OF CATALOG, END OF LINK, HOLES, ETC. !RETURN IS RIGHT AFTER THE BRS IF ALL IS OK, !OTHERWISE IT IS TO THE BRS LOCATION PLUS 2 !KEND AUTOMATICALLY READS IN LINKED CATALOGS !WHENEVER NECESSARY KEND:IND 0 IND *+1 LDA LIST2,X XAZ KEOF!CHECK FOR 55S (END OF CATALOG) BZE KEND2!AND IF IT IS SO, GIVE ERROR EXIT XAZ KFLL!CHECK FOR A HOLE IN THE CATALOG BZE KEND4 KEND5:AMB KEGT!BUMP UP THE POINTER KEPT IN B XBZ KENDL!AND CHECK FOR MAYBE THIS IS LINKED BNZ KEND,X!EVERYTHING IS FINE AND DANDY LDA LIST2,X!CHECK FOR LINKED CATALOG XAZ KLNK!CHECK FOR POINTER TO ANOTHER LINK BZE KEND3 KEND2:ADO KEND!UNFORTUNATELY, IT IS ALL OVER BRU KEND,X!SO TELL CALLER SO KEND4:LDA LIST8,X!CHECK FOR A CORRECT SIZE HOLE SO FAR NMA KMSK1!GET RID OF EXTRANEOUS BITS XAZ KLNGF BNZ KEND5!AND IF IT IS NOT, FORGET IT STB KHOLE!OTHERWISE, SAVE B IN KHOLE LDA KOMA!AND THE DISK ADDRES OF THE LINK IN KHOLE+1!!SIC - ADDRES ==> ADDRESS STA KHOLE+1 BRU KEND5!AND GET OUT KEND3:LDA LIST1,X BRS KRD BRU KEND,X!AND GET OUT WITH POINTER TO NEXT LINK IN!!IN WHAT? ! --- DUBROUTINE KRD --- ! KRD ASSUMES ADISK ADDRES IN A, AND USES IT!!SIC - ADISK ADDRESS ==> A DISK ADDRESS !TO READ IN A CATALOG, FIRST CHECKING TO !SEE IF SAID CATALOG IS ALREADY IN. IT ALSO !SET S B TO ZERO BEFORE EXITING!!SIC - SET S ==> SETS KRD:IND 0 IND *+1 XAZ KOMA!CHECK TO SEE IF WE ARE REREADING SOMETHING BZE KRD2!AND IF SI, DON T REALLY DO IT!!SIC - SI ==> SO STA KOMA!ELSE WE ARE GETTING A FRESH START BRS DSKOP OCT 200 OCT 510100 KOMA:OCT 0 OCT 100 OCT 210120 DEC LIST KRD2:TRA 0&,B BRU KRD,X ! --- SUBROUTINE KWRT --- ! KWRT IS INTERESTED IN REWRITING THE !CATALOG JUST READ IN. IT THEREFORE GETS !ITS DISK ADDRES FOR THE WRITE IT DOES FROM!!SIC - ADDRES ==> ADDRESS !KOMA. KWRT:IND 0 IND *+1 LDA KOMA!PICK UP DISK ADDRES TO WRITE FROM!!SIC - ADDRES ==> ADDRESS STA KOMC!AND GO TO IT BRS DSKOP OCT 200!WRITE AND DROP POWER OCT 510100 KOMC:OCT 0 OCT 300 OCT 711120 DEC LIST BRU KWRT,X ! --- SUBROUTINE KINIT --- ! KINIT IS USED IN CATALOG TASKS TO CALL !CATALOGS FOR SEARCH OR MODIFICATION. IT !EXPECTS $WORD1 TO BE PROPERLY SET, AND !$KOMFL TO BE SET. IT CALLS KRD INTERNALLY, !AND SETS THE KHOLE FLAG TO 0. IT ALSO !CHECKS KLISTF FOR PROTECTION, AND EXITS !TO ANOTHER TASK IF THE DISK IS NOT READY !IT SETS KOMA, AND KOMB TO THE CORRECT !DISK ADDRES, AND EXITS TO THE USER!!SIC - ADDRES ==> ADDRESS KINIT:IND 0!FIND AND READ IN CATALOG IND *+1 LDZ KLISTF!AND CHECK LIST AREA PROTECT FLAG BNZ STING,X!IF IT IS, EXIT AND WAIT LDA $WORD1!PICK UP PRESENT USER NUMBER - MSH XAZ KTEA!AND CHECK FOR TEACH BNZ *+3!(IF NON-ZERO, NOT A TEACH USER NUMBER) LDA KTEAA!PICK UP ADDRESS OF TEACH CATALOG BRU KINIT2!AND GO TO READ IN ROUTINE XAZ KLIB!CHECK FOR A LIBRARY USER NUMBER BNZ *+3!(IF NON-ZERO, NOT A LIBRARY USER NUMBER) LDA KLIBA!PICK UP LIBRARY CATALOG ADDRESS BRU KINIT2!AND READ IN NMA KMSK3!LEAVE LAST (RIGHTMOST) CHARACTER SL1 A&,A STA KTEMP!GET TEN TIMES THIRD CHARACTER IN USER NUMBER SL1 A&,A SL1 A&,A AAM KTEMP LDA $WORD1!GET MSH USER NUMBER BACK NMA KMSK4!LEAVE MIDDLE CHARACTER SR6 A&,A!RIGHT JUSTIFY AMA KTEMP AAZ KMHND BPL KIDNO!AND EXIT IF OUTSIDE THE CORRECT RANGE LDA KPT,X!AND NOW GET CATALOG ADDRESS KINIT2:STA KOMB BRS DSKCH!NOW SEE ABOUT DISK. BRU STING,X!AND IF NOT READY, ALL THIS WAS IN VAIN LDA KOMB BRS KRD!AND GO READ THE CATALOG IN STZ KHOLE!SET EXISTENCE OF HOLE FLAG OFF CMA $STAND!SET KLNGF CORECTLY!!SIC - CORECTLY ==> CORRECTLY AMA $DPOS3 BRS KCOMP STA KLNGF BRU KINIT,X!AND EXIT FROM CALLER KIDNO:LDZ $OUTFF BNZ *-1 BRS MESSG IND OERROR BRU KOMX1 ! --- KCOMP --- ! KCOMP C+LCULATES THE CORRECT KLNGF FROM!!SIC - C+LCULATES ==> CALCULATES !AN ARGUMENT FOUND IN THE A REGISTER, IT !RETURNS THE RPOPER LENGTH FLAG IN A ALSO.!!SIC - RPOPER ==> PROPER !THE ARGUMENT SUPPLIED IN A SHOULD BE 2*X-1 !WHERE X IS THE NUMBER OF DISK RECORDS IN THE !DISK BLOCK UNDER CONSIDERATION. KLNGF IS !THIS NUMBER ROUNDED UPWARDS TO THE NEAREST !POWER OF 2 (ALL NUMBERS ARE ROUNDED UP . I.E. !0 BECOMES 1, 3 BECOMES 4 ETC) AND MULTIPLIED !BY 2 KCOMP:IND 0 IND *+1 STZ KGMP!SET COUNTER INITIALLY AT ZERO ADO KGMP!BUMP IT SR1 A&,A!AND SHIFT THE RECORD COUNT AGAIN BNZ *-2 SBO KGMP!WE STARTED OFF TOO FAST LDA KGMP AAZ MFIVE BMI KCOMP,X LDA FIVE BRU KCOMP,X!EXIT ! --- SUBROUTINE KDSK --- ! KDSK IS IN CHARGE OF ASSIGNING NEW !DISK AREAS FOR ANY REQUIRED PURPOSE. IT !RETURNS IN THE A REGISTER THE ADDRESS OF A !DISK AREA OF THE LENGTH (IN RECORDS) !SPECIFIED IN KLNGF. IT AUTOMATICALLY !UPDATES THE DADDRS POINTERS, AND REWRITES !THEM ON THE DISK. IT MAKES THE APPROPRIATE !CHECKS FOR END-OF POSITION AND SKIP BAND, AND !IN THE EVENT OF ULTIMATE ( THE DISK !FILLING UP COMPLETELY) IT PUNTS THE ASSIGNED !TASK ALTOGETHER BY GOING TO STEXEC. KDSK:IND 0!GET A DISK ADDRESS IND *+1 STB KTEMP2!SAVE B - IT IS LIKELY TO BE VERY IMPORTANT LDB KLNGF!THIS WILL BE USED TO INDEX TO CORECT ADDRESS!!SIC - CORECT ==> CORRECT LDA RDSKP,X!THIS SHOULD BE PRESET TO AN OK ADDRESS STA KTEMP!SO NOW LEAVE IT WITH ANOTHER ONE BNZ *+7!DISK IS FULL, IF DLONG IS ZERO BRS MESSG!DISK IS FULL, SO TELL USER, AND ALSO IND DERROR!CONTROL TELETYPE PIC 1 BRS MESSG IND DERROR!-NO ROOM IN SAVED STORAGE - BRU STEXEC,X LDA KDSKL,X!GET CORRECT INCREMENT FOR POINTER AMA KTEMP STA RDSKP,X!THIS MAY BE OK NMA KMSK3 BZE KDSK1!END OF 2K AREA, SO GET ANOTHER KDSK2:LDA KTEMP!EXIT - RETRUN KTEMP AS NEW DISK ADDRESS!!SIC - RETRUN ==> RETURN BRS DSKOP!REWRITE POINTERS ON THE DISK OCT 200 OCT 510100 OCT 400 OCT 300 OCT 710101 DEC DLONG LDB KTEMP2!RESTORE B REGISTER BRU KDSK,X KDSK1:BSS 0 LDA DLONG!STICK DLONG IN AS OK STA RDSKP,X BZE KDSK2!DISK IS FULL, SO D N T EVEV TRY IT!!SIC - D N T EVEV ==> DON T EVEN AMA KTWOK!BUMP WHAT WAS DLONG BY 2K(ADDRESSWISE) STA DLONG!AND PRESTORE IT - IT MAY BE OK NMA STAT6 XAZ STAT6 BNZ KDSK2 LDA DLONG AMA KTWOK!THIS SHOULD GET US TO NEXT POSITION STA DLONG!NOW GOT A NEW POTITION, PRESERVE IT AND NMA KMSK2!CHECK FOR THE SKIP BAND (STANDARD AREAS ETC XAZ KBAND BNZ KDSK2 LDA KSKIP!OTHER WISE JUMP THE BAND!!SIC - OTHER WISE ==> OTHERWISE AAM DLONG BRU KDSK2!FINALLY GOT THE WHOLE THING STRAIGHT !POSSIBLE EXITS FROM KOMMON ROUTINES KOMX:BRS BETA BRS TYPE KOMX1:STZ $STAT KOMX2:STZ $KOMFL BRU STEXEC,X LIST1:INB LIST LIST2:INB LIST+1 LIST3:INB LIST+2 LIST4:INB LIST+3 LIST5:INB LIST+4 LIST6:INB LIST+5 LIST7:INB LIST+6 LIST8:INB LIST+7 LIST10:INB LIST+9 KBAND:OCT 16400 KTWOK:OCT 100 KSKIP:OCT 3400 KTEMP:BSS 1!STORAGE WHILE GETTING EQUIVALENCE CLASS KHOLE:BSS 2!0 IF NO HOLE YET, B REGISTER IF HOLE FOUND KLIB:ALF LIB!CHECK FOR LIBRARY USER NUMBER KTEA:ALF TEA!MASK FOR CHECKING TEACH USER NUMBER KLIBA:OCT 760640 KTEAA:OCT 760600 KMSK3:OCT 000077 KMSK4:OCT 007700 KCOUNT:BSS 1 KENL:OCT 777737 KSPC:OCT 776060!INTERPROGRAM SPACER IN CATALOG PRINTOUR!!SIC - PRINTOUR ==> PRINTOUT KMSK2:OCT 037777 KGMP:DEC 0!STORAGE TEMPORARY IN KCOMP KMHND:DEC -100!CHECK FOR LEGAL USER NUMBER KTEMP2:BSS 1!B REGISTER STORAGE IN KDSK KENDL:OCT 1770!USED TO CHECK FOR END OF CATALOG RUNOFF KFLIP:DEC 0!SAVE AN UNUSED 1K AREA KLNGF:DEC 0!SAVE LENFGHT OF PROGRAM!!SIC - LENFGHT ==> LENGTH KLNK:OCT 373737!LINKED CATALOG INDICATOR. USED IN CHECK KPOIN:BSS 1!POINTER FOR CATALOG PRINTOUT BUILD KEOM:OCT 377255!TERMINATOR WORD FOR CATALOG PRINTOUT KOMB:DEC 0!STORAGE FOR INITIAL DISK ADDRESS OF CATALOG KEGT:DEC 8!BUMPER CHECKER ALL AROUND GOOD CONSTANT KPT:INA LPCW3!POINTER FOR INDIRECT LOAD OF CATALOG ADDRESS RDSKP:INB DADD!POINTER TO GET TO CORRECT DISK BLOCK KMSK1:OCT 7!USED TO ISOLATE LAST THREE BITS IN KLNGF KDSKL:INB *+1!PICK UP CORRECT POINTER INCREMENT OCT 2!0 RECORD POINTER!!0 ==> 1? OCT 4!1 RECORD POINTER!!1 ==> 2? OCT 10!4 RECORD POINTER OCT 20!8 RECORD POINTER OCT 40!16 RECORD PINTER!!SIC - PINTER ==> POINTER OCT 100!32 RECORD POINTER KEOF:OCT 555555 KFLL:OCT 777777 KEGHT:OCT 10 KOMCN:INA KOM1+3 SAVEB1:LDC SAVEB,X BRS DSKCH BRU STING,X LDB KCOUNT LDA $WORD6 STA LIST6,X BRS KWRT STZ KLISTF BRU KOMX!RESET STATUSES, AND TYPE OUT READY TERROR:OCT 373145 ALF COR ALF REC ALF T P ALF ROB ALF LEM ALF NA ALF ME- OCT 777740 TNAM:ALF ALF OCT 377255 OERROR:OCT 373143 ALF LEG ALF AL ALF ID ALF NUM ALF BER OCT 377255 HERROR:OCT 374751 ALF OGR ALF AM ALF NOT ALF SA ALF VED OCT 774040 ALF ALF OCT 377255 DERROR:OCT 374546 ALF RO ALF OM ALF IN ALF SAV ALF E S ALF TOR ALF AGE OCT 377255 LERROR:OCT 374751!PROGRAM NOT IN LIBRARY. ALF OGR ALF AM ALF NOT ALF IN ALF LI ALF BRA ALF RY. OCT 377255 STL!MISCELLANEOUS USER COMMAND TASKS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION STOP1:LDC STOP,X!REINITIALIZE ADO #STP!BUMP UP COUNTER OF -STOPS- *** BRS RESET BRS MESSG IND STRED BRU STEXEC,X STRED:OCT 373762!STOP./READY. ALF TOP OCT 333751 ALF EAD OCT 703337 OCT 725577 !-SCRATCH- CLEARS OUT STANDARD AREA (DESTROYS !CURRENT PROBLEM) BUT LEAVES ALL IDENTIFI- !CATION DATA INTACT. SCRCH1:LDC SCRCH,X!SCRATCH THE PRESENT TYPED PROGRAM BRS RUNCH!CHECK IF RUNNING BRS RESET LDA $STAND STA $DPOS3!SET LENGTH TO ZERO RECORDS STZ $TYP BRS MESSG IND READY BRU STEXEC,X RENA1:LDC RENA,X!RENAME ROUTINE--PART 1 BRS RUNCH!CHECK IF RUNNING BRS SPINP!SET SPECIAL INPUT FLAG INB RENB!FILL WITH BLANKS AND SET UP RENB BRS MESSG IND HNPNAM BRU STEXEC,X RENB1:LDC RENB,X!RENAME ROUTINE--PART 2 LDD $INLOC,X!LOAD NEW PROBLEM NAME BRS HCHEK!TEST FOR STOP OR HELLO STA $WORD3!STORE STB $WORD4 BRS MESSG!TYPE MESSAGE IND READY BRU STEXEC,X NUMA1:LDC NUMA,X!RENUMBER--PART 1 BRS CTRLA!CHECK FOR SPECIAL CONTROL TELETYPE BRU NOTS1,X!IF NOT, TYPE ILLEGAL COMMAND BRS SPINP!SET SPECIAL INPUT FLAG INB NUMB!FILL WITH BLANKS AND SET UP NUMB BRS MESSG IND HUSER BRU STEXEC,X HUSER:OCT 726462!USER NUMBER-- ALF ER ALF NUM ALF BER OCT 404055 NUMB1:LDC NUMB,X!RENUMBER--PART 2 LDD $INLOC,X!LOAD NEW USER NUMBER BRS HCHEK!TEST FOR STOP OR HELLO STA $WORD1 STB $WORD2 STZ $HFLAG BRS MESSG IND READY BRU STEXEC,X STAT1:LDC STAT,X!REPORT STATUS OF TELETYPE LDA $WORD1 LDB $WORD2 BRS UCHEK!TEST FOR LEGAL USER NUMBER BRU *+4!IF LEGAL, CONTINUE BRS MESSG!OTHERWISE, TYPE MESSAGE IND STDISC BRU STEXEC,X LDA $STAT!PICK UP STATUS LDA STAB,X!PICK UP APPROPRIATE MESSAGE ADDRESS STA *+2 BRS MESSG IND *-*!!More general expressions required! Xxxxx BRU STEXEC,X STAB:INA *+1 IND STIDL IND STOLD IND STLIS IND STSAV IND STRUN IND STRUN STDISC:OCT 372431!DISCONNECTED ALF SCO ALF NNE ALF CTE OCT 243755 STIDL:OCT 373124!IDLE OCT 432537 OCT 557777 STOLD:OCT 374643!OLD OCT 243755 STLIS:OCT 374331!LIST OCT 626337 OCT 557777 STSAV:OCT 376221!SAVE OCT 652537 OCT 557777 STRUN:OCT 375164 OCT 453755 OFF1:LDC OFF,X!STOP SCANNING ALL BUT CONTROL TELETYPE BRS CNTRL!CHECK FOR CONTROL TELETYPE BRU NOTS1,X!IF NOT, TYPE ILLEGAL COMMAND BRS BETA!SET UP TASK TO TYPE -READY.- BRS TYPE PIC 2 LDA OFFBIT RAM $SW2 AIC 1 STZ $STAT XCZ TELET BNZ *-3 BRU STEXEC,X OFFBIT:OCT 40000 ON1:LDC ON,X!RESUME SCANNING ALL TELETYPES BRS CNTRL!CHECK FOR CONTROL TELETYPE BRU NOTS1,X!IF NOT, TYPE ILLEGAL COMMAND BRS BETA!SET UP TASK TO TYPE READY BRS TYPE PIC 2 LDA ONMASK NAM $SW2 STZ STOPF BRU STEXEC,X ONMASK:OCT 737777 TTY1:LDC TTY,X!TELETYPE CONDITION INQUIRY BRS CNTRL BRU TTYD BRS PICK BZE NOTS1,X AAZ WSVCT BPL NOTS1,X TRA A&,C!PARAMETER TO C-REGISTER TTYR:LDA $WORD1 STA TTYU LDA $WORD2 STA TTYU+1 LDA $WORD3 STA TTYP LDA $WORD4 STA TTYP+1 LDA $SYSTM STA TTYY LDA $STAT BNZ *+4 LDZ $OUTFF BZE *+2 LDA TWO LDZ $CNFL BZE *+2 LDA FOUR LDA TTYI,X STA TTYS LDC TTY,X BRS CNTRL BRU *+4 BRS MESSG IND TTYM BRU STEXEC,X BRS MESSG IND TTYN BRU STEXEC,X TTYD:SL1 C&,A SL1 A&,A SL1 A&,A NMA T700 BNZ *+2 RMA T6000 RMA IZONE STA TTYQ TRA C&,A NMA SEVEN RAM TTYQ BRU TTYR T700:OCT 700 T6000:OCT 6000 TTYI:INA *+1 ALF IDL ALF OLD ALF LST ALF SAV ALF RUN ALF RUN TTYN:OCT 777272 ALF TEL ALF ETY ALF PE ALF NUM ALF BER ALF --- TTYQ:ALF OCT 333777 TTYM:OCT 777272 ALF USE ALF R-- TTYU:ALF ALF ALF ALF PRO ALF B-- TTYP:ALF ALF ALF ALF SYS ALF T-- TTYY:ALF ALF ALF STA ALF T-- TTYS:ALF OCT 377255 SPLCHK:IND 0!PICK UP TTY NUMBER AS PARAMETER IND *+1 XCZ 1!TEST FOR TELETYPE 1 BNZ NOTS1,X!IF NOT, ERROR BRS PICK!GET PARAMETER SR1 A&,Z!TEST FOR VALID BZE NOTS1,X AAZ WSVCT BPL NOTS1,X BRU SPLCHK,X!RETURN WARN1:LDC WARN,X!WARN SETUP RTN XCZ 1!***** ONLY FROM TTY 1 ***** BNZ NOTS1,X STC WSVCF!SET SPECIAL SERVICE FLAG TO WARN BRU STEXEC,X!EXIT DIAL1:LDC DIAL,X!DIAL SETUP RTN BRS SPLCHK STA WTTYF LDA TWO STA WSVCF!SET SPECIAL SERVICE FLAG TO DIAL BRU STEXEC,X MONIT1:LDC MONIT,X!MONITOR SETUP ROUTINE BRS SPLCHK!ONLY FROM TELETYPE 1 STA WTTYF LDA THREE STA WSVCF!SET SPECIAL SERVICE FLAG TO MONITOR BRU STEXEC,X WSVCT:DEC -TELET-1!!More general expressions required! Xxxxx NOTS1:IND NOT1 TCD 0!SWITCH MEMORY BANKS !17700-17777 MUST BE LEFT FREE FOR BOOTSTRAP !LOADER TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION LOC 20000 NOTA1:LDC NOTA,X!SET UP NOTICE MESSAGE--PART 1 XCZ 1!********** ONLY FROM TTY 1 ********** BNZ NOT1 BRS RESET BRS MESSG!TYPE MESSAGE IND NOTMSG BRS SPINP!SET SPECIAL INPUT FLAG IND NOTB!FILL WITH 77-S AND SET UP NOTB BRU STEXEC,X!EIXT!!SIC - EIXT ==> EXIT NOTMSG:OCT 722545!ENTER NOTICE LINE ALF TER ALF NO ALF TIC ALF E M ALF ESS ALF AGE OCT 133755 NOTB1:LDC NOTB,X!SET UP NOTICE MESSAGE--PART 2 BRS DSKCH!WAIT FOR DISK BRU STING,X LDA NOTBF!SET UP INITIAL LINE-FEED STA NOTICE LDA $IDLOC!SET UP FOR MOVE 1 RMA NOTBA STA NOTBB TRA 0&,A NOTB2:LDB NOTBB,X!MOVE 1 LOOP STB NOTBC,X AMA ONE NMB M77!TERMINATE ON A 37 XBZ NOTBD BNZ NOTB2 AMA NOTBC!SET UP FOR MOVE 2 STA NOTBB TRA 0&,A NOTB3:LDB NOTBE,X!MOVE 2 LOOP STB NOTBB,X AMA ONE NMB M77!TERMINATE ON A 77 XBZ M77 BNZ NOTB3 BRS DSKOP!WRITE SPECIAL RECORD ON DISK OCT 200 OCT 510100 OCT 400 OCT 300 OCT 710101 DEC DLONG BRS BETA!SET UP TASK TO TYPE -READY- BRS TYPE BRU STEXEC,X!EXIT NOTBA:INA 0 NOTBB:INA 0 NOTBC:INA NOTICE+1 NOTBD:OCT 37 NOTBE:INA NUSER NOTBF:OCT 777772 NUSER:ALF USE ALF R N ALF UMB ALF ER- OCT 405577 NOT1:BRS MESSG IND IERROR+2 BRU STEXEC,X TAPE1:LDC TAPE,X LDA MONE STA $KFLAG BRS MESSG IND READY BRU STEXEC,X KEY1:LDC KEY,X STZ $KFLAG BRS MESSG IND READY BRU STEXEC,X USERS1:PIC 1!NUMBER OF USERS STZ USRMSG+1 LDA $WORD1 LDB $WORD2 BRS UCHEK ADO USRMSG+1 AIC 1 XCZ TELET+1 BNZ *-6 LDB USRMSG+1 BNZ *+3!ZERO USERS IS A SPECIAL CASE LDB USRNO!PRINT -NO USERS AT XX-XX.- BRU *+3 BRS CONV DEC 10 STB USRMSG+1 LDD RTIME STA USERB STB USERB+1 LDC USERS,X BRS MESSG IND USRMSG BRU STEXEC,X USRNO:ALF NO USRMSG:OCT 773772!XX USERS AT XX-XX. ALF ALF US ALF ERS ALF AT USERB:ALF ALF OCT 333772 OCT 557777 LNGTH1:LDC LNGTH,X!LENGTH INQUIRY CMB $DPOS3 AMB $STAND TRC B&,B BRS CONV DEC 10 STB LNGTHB BRS MESSG INA LNGTHA BRU STEXEC,X LNGTHA:OCT 372122 ALF OUT LNGTHB:ALF ALF 00 ALF CHA ALF RS. OCT 377255 EDIT1:LDC EDIT,X!GET EDIT VERB AND STORE ON DISK BRS RUNCH!CHECK FOR RUNNING LDZ $IF!IS OTHER BUFFER OPEN BZE STING,X BRS DSKCH!IS THE DISK AVAILABLE BRU STING,X!NO...SO WAIT LDA $IDLOC!GET BEGINNING OF LINE POINTER AMA EDIT26!GET ADDRESS OF LAST PAIR OF WORDS TRA A&,B NMA OM200!WIPE OUT LOW-ORDER SEVEN BITS XAZ $INSTD!SEE IF OUTSIDE UPPER BUFFER BZE *+2 AMB OM200!FUDGE TO LOWER BUFFER RMB EINC!OR IN INC BITS FOR MOVE TRA B&,A AMA EDM26!MOVE FROM END TO PSEUDO BEGINNING STA EDITFR!SET FROM POINTER NMB M77!GET POSITION WITHIN BUFFER AMB EDM26!CHECK FOR CROSSOVER BMI *+2 TRA 0&,B!IF NONE, C TERMINATION IS SIMPLE BPL *+3 TRC B&,B!OTHERWISE TERMINATE AT CROSSOVER, AMB ONE!BUT THEN CONTINUE STB EDCTM!SAVE TERMINATION CONSTANT LDA $IDLOC!GET BEGINNING OF LINE POINTER NMA IMSK12!DROP LOW-ORDER SIX BITS XMA STAT2!GET BEGINNING OF TO BUFFER STA EDITMA!SAVE FOR LATER RMA EINC!OR IN INC BITS FOR MOVE STA EDITTO!SAVE FOR MOVE LDC EDIT28!INITIALIZE C FOR MOVE EDLP:AIC 126!DECREMENT BY 2 LDD EDITFR,X!MOVE LOOP STD EDITTO,X TRA C&,A XAZ EDCTM BNZ EDLP LDZ EDCTM!CHECK FOR FINAL TERMINATION BZE EDITDW!YES, GET OUT STZ EDCTM!NO, FUDGE AND CONTINUE STC EDITC!SAVE C FOR CONTINUATION LDC EDIT,X!RESTORE C FOR CHANNEL TABLE REFERENCES LDA EDITFR!SEE IF EDITFR IS OUTSIDE LOWER BUFFER AMA EDITC NMA EDITZ XAZ $INSTD!IS BUFFER CROSSOVER NECESSARY BNZ *+3 LDA STAT4 AAM EDITFR!FUDGE FROM POINTER LDC EDITC!PREPARE TO REENTER LOOP BRU EDLP EDITDW:LDC EDIT,X!GET TTY NO. BACK IN C LDA EDITMA!PUT USER NO. IN BUFFER AMA EDIT28 STA EDITC LDA $WORD1!HIGH ORDER 3 NUMERICS LDB $WORD2!LOW ORDER STD EDITC,X LDA TWO!NOW PUT SYSTM IN BUFFER AAM EDITC LDA $SYSTM STA EDITC,X STA $SAVSY!ALSO SAVE CURRENT SYSTEM LDA EDI!NOW SUBSTITUTE -EDI- STA $SYSTM!FOR CURRENT SYSTM LDA EINC!MOVE DATE TO BUFFER RAM EDITC PIC 1 EDATE:LDA EIMPT,X STA EDITC,X AIC 1 XCZ 6 BNZ EDATE LDC EDIT,X LDA $STAND!PREPARE TO WRITE A RECORD ON DSU AMA OM276!DISK ADDRESS IS FIRST RECORD OF OUTPUT AREA STA EDITX!WHICH IS AT THE BEGINNING OF THE OUTPUT AREA BRS DSKOP!GO TO DISK SUBROUTINE OCT 200 OCT 510100 EDITX:OCT 0 OCT 300 OCT 710101 EDITMA:OCT 0 BRS BETA!SET UP TASK TO BEGIN RUN BRS RUN BRU STEXEC,X!EXIT EDIT26:DEC 26 EDM26:DEC -26 EDIT28:DEC 28 EINC:INC 0 EDITFR:BSS 1 EDITTO:BSS 1 EDCTM:BSS 1 EDITC:BSS 1 EDITZ:OCT 77777 EIMPT:INC IMAGE-1 STL!FAIL-SAFE ROUTINES TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION BOOTA1:LDC BOOTA,X!BOOTSTRAP CALLED FROM TELETYPE XCZ 1!********* ONLY FROM TELETYPE 1 ********** BNZ PUNT ADO DATE!INCREMENT EDITING DATE BRS SPINP!SET SPECIAL INPUT FLAG INB BOOTB!FILL WITH BLANKS AND DET UP BOOTB LDB DLONG BRS CONV DEC 8 STA BODAS STB BODAS+1 LDB DATE BRS CONV DEC 8 STA BODAT STB BODAT+1 BRS MESSG IND BOMESS BRU STEXEC,X BOMESS:OCT 374525!NEXT SAVED STORAGE IS DISK ADDRESS XXXXXX ALF XT ALF SAV ALF ED ALF STO ALF RAG ALF E I ALF S D ALF ISK ALF AD ALF DRE ALF SS BODAS:ALF ALF OCT 372346!CODED DATE IS XXXXXX ALF DED ALF DA ALF TE ALF IS BODAT:ALF ALF OCT 372545 ALF TER ALF DA ALF TE- OCT 405577 BOOTB1:PIC 1!OPERATOR INITIATED BOOTSTRAP ENTRY LDZ KLISTF!CHECK DISK I/O AREA PROTECT FLAG BNZ STING,X!IF ON, TRY AGAIN LATER BRS DSKCH BRU STING,X LDD $INLOC,X BRS HCHEK!CHECK FOR STOP OR HELLO LDA $INLOC RMA BINA STA BOO1 TRA 0&,A LDB BOO1,X STB BOO2,X AMA ONE AAZ MFIVE BMI *-4 BRS DSKOP!WRITE NEW DATE ON DISK OCT 200 OCT 510100 OCT 400 OCT 300 OCT 710101 DEC DLONG BRS DSKOP!READ IN SPECIAL RECORD OCT 200 OCT 510100 OCT 402!DISK ADDRESS OCT 100 OCT 210101 DEC LIST STZ *-1,X!ZERO OUT COUNTER BRS DSKOP!REWRITE SPECIAL RECORD OCT 200 OCT 510100 OCT 402 OCT 300 OCT 711101 DEC LIST STZ DKFLG1 LDA ONE BRU *+2 BOOTC1:LDA MONE!MACHINE INITIATED BOOTSTRAP ENTRY STA STOPF BAGN:AMA MONE!DISTINCTIVE PATTERN IS BACKWARDS COUNT TRA S&,Z!IF SW 18 DOWN, DISPLAY PATTERN BMI *-2 TRC 0&,A STA BFLAG PIC 61!SELECT CIU BRS BWAIT!WIAT FOR CIU!!SIC - WIAT ==> WAIT DEF 0!SET T = 0 TRA 0&,A LDB BBRU BRS BSEND!FILL CORE OF 235 WITH BRANCHES AMA B20 BNZ *-2 BRS BLDT!SET T TO UPPER MEMORY OCT 20020 BRS BXMIT!SEND OVER UPPER MEMORY PART OF LOADER IND BUPPER BRS BLDT!SET TO TO LOWER MEMORY OCT 1 BRS BXMIT!SEND OVER LOWER MEMORY PART OF LOADER IND BLOWER STZ BFLAG TRA 0&,A BRS BLDT DEC SMBX!SET T TO MAILBOX BRS BWAIT!WAIT FOR CIU TRA R&,B!PICK UP MAILBOX AMA EIGHT BZE BAGN!COUNTDOWN XBZ ONE!IS BOOTSTRAP DONE... BNZ *-7!IF NOT, KEEP WATCHING LDZ STOPF!IF MACHINE INITIATED BOOTSTRAP... BMI EXOUT!SKIP OUTPUT MESSAGES PIC 1 LDZ $OUTFF!WAIT FOR TELETYPE BNZ *-1 BRS MESSG!TYPE OUT READY ON TELETYPE 1+ IND READY AIC 1!TYPE OUT MESSAGE ON ALL MACHINES LDZ $OUTFF BNZ *+3 BRS MESSG IND BOOM XCZ TELET BNZ *-6 EXOUT:STZ STOPF STZ DKFLG2!ASSUME D-30 HAS THE DISK BRU STEXEC,X BWAIT:IND 0!WAIT FOR CIU IND *+1 NES 1 BZE *-1 BRU BWAIT,X BSEND:IND 0!SEND OVER ONE WORD VIA CIU IND *+1 BRS BWAIT DIF 1!RESET SFF TRA B&,Z BPL *+2!IF 235 BIT 2 IS ON, THEN BIT 0 ON DIF 9 TRA B&,T BRU BSEND,X BLDT:IND 0!LOAD T REGISTER IND *+1 BRS BWAIT DEF 0!CLEAR T LDT BLDT,X!LOAD T REGISTER ADO BLDT BRU BLDT,X BXMIT:IND 0!SEND OVER CONTIGUOUS CORE IND *+1 LDA BXMIT,X!PICK UP ADDRESS ADO BXMIT LDB BINA,X!PICK UP WORD BZE BXMIT,X!TERMINATE ON ZERO BRS BSEND!SEND OVER AMA ONE!STEP INDEX REGISTER BRU BXMIT+4 BBRU:OCT 600026!BRU 26 B20:OCT 20 BLOWER:OCT 506016! 2 SET PBK OCT 504022! 3 LDO OCT 506012! 4 SET BINMODE OCT 300226! 5 STA SPECIAL MAILBOX OCT 512022! 6 SLA 18 OCT 100021! 7 ADD RRF OCT 300021! 10 STA RRF OCT 516020! 11 BCS BRN 0 OCT 600011! 12 BRU *-1 OCT 500020! 13 SEL 0 OCT 510000! 14 PRF 0 OCT 002476! 15 OCT 2476 OCT 516020! 16 BCS BRN 0 OCT 600016! 17 BRU *-1 OCT 500020! 20 SEL 0 OCT 210001! 21 RRF 1 OCT 006000! 22 6000(8) OCT 516020! 23 BCS BRN 0 OCT 600023! 24 BRU *-1 OCT 606000! 25 BRU 6000(8) OCT 600002! 26 BRU 2 OCT 0!TERMINATE BUPPER:OCT 506013!20021 SXG 0 OCT 504002!20022 LDZ OCT 300001!20023 STA 1 OCT 300201!20024 STA 201(8) OCT 620026!20025 BRU 26(8),1 OCT 600021!20026 BRU 21(8) OCT 0!TERMINATE BINA:INA 0 BOO1:INA 0 BOO2:INA IMAGE BOOM:OCT 377272!THE TIME-SHARING SYSTEM NOW RESUMES NORMAL ALF THE!OPERATION ALF TI ALF ME- ALF SHA ALF RIN ALF G S ALF YST ALF EM ALF NOW ALF RE ALF SUM ALF ES ALF NOR ALF MAL ALF OP ALF ERA ALF TIO OCT 453337 OCT 727255 !ENTRANCE TO BBUG PIC 61!BOOTSTRAP FULL 16K TO 235 CORE FOR HSMP DIF 1!RESET SFF DEF 0!RESET T-REGISTER TO 0 TRA 0&,A!RESET INDEX REGISTER CAM STOPF!STOP CIU RTN CAM BFLAG BBUGA:AMA ONE!STEP MEMORY ADDRESS IN INDEX REGISTER LDB BINA,X!LOAD WORD BRS BWAIT!WAIT FOR CIU TRA B&,T!SEND OVER XAZ B16K!FINISHED YET... BNZ BBUGA!IF NOT, CONTINUE STZ BFLAG!START SERVICING SPECIAL MAILBOX AGAIN BRU STEXEC,X!FINALLY, CRUMP B16K:OCT 37777 LOAD:BRS DSKOP!READ IN DASSGN, DATE, AND IMAGE FROM DISK OCT 200 OCT 510100 OCT 400 OCT 100 OCT 210101 DEC DLONG PIC 0 TRA S&,Z!LOOK AT CONSOLE SWITCHES BOD STING,X!SWITCH ONE DOWN TO SUPPRESS HWE LOAD MESSAGE AIC 1!SEND OUT MESSAGE ON ALL MACHINES BRS MESSG IND HLOAD XCZ TELET BNZ *-4 BRU STING,X HLOAD:OCT 377272 ALF THE ALF RE ALF HAS ALF BE ALF EN ALF A M ALF ALF ALF UNC ALF TIO OCT 453337 ALF TYP OCT 256034 ALF HEL OCT 434634 ALF AN ALF D S ALF TAR ALF T A ALF GAI ALF N. OCT 377255 STL!DEBUGGING PACKAGE TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION !-DUMP- CAUSES A HSMP-STYLE OCTAL MEMORY DUMP !OF ANY SEGMENT OF MEMORY ON THE CONTROL TELE- !TYPE. !TYPE -DUMP--XXXXX- TO INITIATE DUMP FROM X. !TYPE -S- TO TERMINATE DUMP. DUMPS1:LDC DUMPS,X!THIS ENTRY IS SET UP ALL BUT THE FIRST TIME LDZ $OUTFF!IF DIFFERS FROM -DUMP1- IN THAT IT DOESN-T BNZ STING,X!PICK UP NEW PARAMETERS FROM THE INPUT LINE. BRU PKOM DUMP1:LDC DUMP,X!THIS ENTRY SET UP FIRST TIME THROUGH BRS PPARAM!GO PICK UP ADDRESS TO DUMP FROM LDZ PARAF BNZ PKOM LDA PDBUF STA PADDR PKOM:LDA THREE!INITIALIZE COUNTERS STA PCMESS LDA TWO STA PCNT3 LDA $INSTD!SET POINTER TO LOWER BUFFER, IGNORING STA $OLOC!UNPROCESSED INPUT LINES. STA POUT!OUTPUT POINTER INITIALIZED. STZ PSTOR!CLEAR CHARACTER ACCUMULATOR. LDB PLF!OUTPUT TWO LINE-FEEDS. BRS PWR LDB PLF BRS PWR PXBK:LDA PADDR!ADDRESS OF FIRST WORD OF LINE IS CONVERTED SL1 A&,A!TO OCTAL. SL1 A&,A SL1 A&,A LDB FOUR!SET DIGIT COUNTER FOR FIVE-DIGIT FIELD. STB PCDIG PABK:CL1 A&,A!SHIFT HIGH-ORDER OCTAL DIGIT OF A-REGISTER CL1 A&,A!INTO LOW-ORDER POSITION, AND PUT A COPY CL1 A&,AB!INTO B. NMB SEVEN!MASK OFF SINGLE OCTAL DIGIT IN B. BRS PWR!OUTPUT IT. SBO PCDIG!DECREMENT DIGIT COUNTER. BPL PABK!IF NOT DONE, GO BACK FOR ANOTHER DIGIT. LDB PSP!GENERAGE EXTRA SPACE TO SEPARATE ADDRESS.!!SIC - GENERAGE ==> GENERATE BRS PWR!FROM DUMPED DATA. LDA SEVEN!SET WORD COUNTER FOR EIGHT/LINE STA PCDIG PBK:LDB PSP!OUTPUT A LEADING SPACE BEFORE EACH FIELD. BRS PWR LDA FIVE!SET DIGIT COUNTER FOR SIX OCTAL DIGITS. STA PWRCNT LDA PADDR,X!PICK UP WORD TO CONVERT CL1 A&,A!SHIFT HIGH-ORDER DIGIT TO LOW-ORDER POSITION. CL1 A&,A CL1 A&,AB!PUT A COPY INTO B. NMB SEVEN!ISOLATE SINGLE DIGIT IN B. BRS PWR!OUTPUT IT. SBO PWRCNT!STEP DIGIT COUNTER. BPL *-6!IF NOT YET SIX DIGITS, GO OUTPUT NEXT DIGIT. ADO PADDR!OTHERWISE, STEP TO NEXT WORD IN MEMORY. SBO PCDIG!TEST WORD COUNTER FOR END OF LINE. BPL PBK!LINE NOT COMPLETE--GO OUTPUT NEXT WORD. LDB PCR!OUTPUT CARRIAGE RETURN (LINE-FEED AUTOMATIC) BRS PWR SBO PCMESS!STEP LINE-COUNTER TO SEE IF OUTPUT BUFFER BPL PXBK!IS FULL--IF NOT, GO PROCESS NEXT LINE. LDB PEOM!END OF BUFFER--OUTPUT END-OF-MESSAGE CHAR. BRS PWR LDA PSTOR!FORCE OUT PARTIAL ACCUMULATOR. SL6 A&,A!LEFT-JUSTIFY WHAT IS LEFT IN ACCUMULATOR. SBO PCNT3 BPL *-2 STA POUT,X!OUTPUT FINAL CHARACTERS. BRS BETA!INSERT TASK IN LIST TO CONTINUE DUMP BRS DUMPS!WHEN THIS BUFFER HAS BEEN OUTPUTTED. LDA M7777!SET OUTPUT ROUTINE A-TYPIN. RAM $SW2 STA $SW1 STA $OF STZ $ODC DEF 7 ADO $OUTFF BRU STEXEC,X!EXIT TO SPARE-TIME EXECUTIVE. PDBUF:IND DBUF !-PWR- ACCUMULATES CHARACTERS IN PSTOR, !AND OUTPUTS FILLED WORDS INTO THE OUTPUT !AREA. PWR:IND 0 IND *+1 STA PT!SAVE THE A-REGISTER. LDA PSTOR!LOAD CHARACTER ACCUMULATOR. SL6 A&,A!SHIFT TO MAKE ROOM FOR NEW CHARACTER. TRA AB&,B!INCLUDE NEW CHARACTER. SBO PCNT3!STEP CHARACTER COUNTER. BPL PWC!IF ACCUMULATOR NOT FULL, SAVE IT AND EXIT. STB POUT,X!OTHERWISE, PUT FULL WORD INTO OUTPUT AREA. ADO POUT!STEP POINTER LDA TWO!RESET CHARACTER COUNTER STA PCNT3 TRA 0&,B!ZERO OUT ACCUMULATOR FOR NEXT TIME PWC:STB PSTOR!SAVE (OR ZERO) CHARACTER ACCUMULATOR. LDA PT!RESTORE A-REGISTER. BRU PWR,X!RETURN !-PPARAM- PICKS UP AN OCTAL ADDRESS FROM !THE INPUT LINE (WORD 3 AND AFTER). PPARAM:IND 0 IND *+1 BRS CNTRL!CHECK FOR CONTROL TELETYPE BRU PUNT!IF NOT, TYPE ILLEGAL COMMAND BRS PICK!GET PARAMETER NMA PPMSK STA PADDR!PLACE IN ADDRESS POINTER BRU PPARAM,X!EXIT PPMSK:OCT 77777 !-OCTAL- ALLOWS OCTAL CORRECTIONS TO BE !ENTERED INTO D-30 CORE FROM THE CONTROL !TELETYPE. !TYPE -OCTAL XXXXX- TO ENTER ROUTINE. !TYPE VACUOUS LINE (CR ONLY) TO TERMINATE. OCTAL1:LDC OCTAL,X!GET TELETYPE NUMBER OF CALLING TELETYPE. BRS PPARAM!PICK UP STARTING ADDRESS OF INSERTION. LDZ PARAF BZE PUNT BRS SPINP!SET SPECIAL INPUT FLAG INB OCT!FILL WITH BLANKS AND SET UP OCT ORET:BRS BETA!SET UP TASK TO TYPE -READY.- BRS TYPE BRU STEXEC,X!EXIT !-OCT1- IS ENTERED EACH TIME A LINE IS !INPUTTED AND $HFLAG = -4. OCT1:LDC OCT,X LDD $INLOC,X!FIRST TWO WORDS OF LINE. XAZ PEND!CHECK FOR VACUOUS LINE (LOOKS LIKE SPACES) BZE ORET!IF SO, TERMINATE -OCTAL- STB PSTOR!SAVE B--WORK ON A FIRST. STZ PCNT3!ZERO WORD ACCUMULATOR. BRS PCON!ACCUMULATE... BRS PCON!THREE... BRS PCON!DIGITS. LDA PSTOR!NOW WORK ON OTHER WORD. BRS PCON!ACCUMULATE... BRS PCON!THREE... BRS PCON!DIGITS AGAIN. PACCUM:LDA PCNT3!STORE ACCUMULATED WORD IN MEMORY. STA PADDR,X ADO PADDR!STEP POINTER. LDA PTWOLF!CHEAP AND DIRTY WAY TO OUTPUT LINE-FEED. STA $SW1!WELL, WHY NOT... DEF 7!RESET ECHOPLEX MODE, GET OUTPUT RTN ANGRY. BRS SPINP!SET SPECIAL INPUT FLAG INB OCT!FILL WITH BLANKS AND SET UP OCT BRU STEXEC,X!EXIT TO SPARE TIME EXECUTIVE. !-PCON- ACCUMULATES ONE CHARACTER AT A TIME !INTO PCNT3 FROM HIGH END OF A-REGISTER. PCON:IND 0 IND *+1 CL6 A&,AB NMB M77!MASK OFF CHARACTER XBZ PSP!CHECK FOR SPACE BZE PACCUM!IF SO, TERMINATE WORD. NMB SEVEN!TRIM TO OCTAL DIGIT (THREE BITS). STB PCMESS!SAVE IN PCMESS. LDB PCNT3!PICK UP ACCUMULATOR. SL1 B&,B!SHIFT SL1 B&,B SL1 B&,B RMB PCMESS!INSERT NEW CHARACTER STB PCNT3!ACCUMULATE WORD. BRU PCON,X!EXIT SUBROUTINE. PUNT:BRS MESSG!TYPE ILLEGAL COMMAND IF NOT TELETYPE 1. IND IERROR+2 BRU STEXEC,X!EXIT. !CONSTANTS AND WORKING. PSTOR:OCT 0 PCMESS:OCT 0 PCNT3:OCT 0 POUT:OCT 0 PLF:OCT 72 PSP:OCT 60 PWRCNT:OCT 0 PCDIG:OCT 0 PEOM:OCT 55 PADDR:OCT 0 PT:OCT 0 PTWOLF:OCT 7424 PCR:OCT 37 PEND:ALF !-RRF- READS THE SPECIFIED DISK RECORD INTO !THE 64-WORD DISK BUFFER. !-WRF- WRITES THE 64-WORD DISK BUFFER ONTO THE !SPECIFIED DISK RECORD RRF1:STZ RFFL LDC RRF,X BRS DSKCH BRU STING,X BRS CNTRL BRU RFER,X!NOT CONTROL TTY, SO ERROR BRS PICK!GET DISK ADDRESS LDZ PARAF BZE RFER,X NAZ ONE BNZ RFIA!RNS BIT ON, SO ILLEGAL ADDRESS TRC A&,B NBZ STAT6 BZE RFIA!BITS 7 AND 8 ON, SO ILLEGAL ADDRESS STA RFAD1 STA RFAD2 LDZ RFFL BNZ RFW BRS DSKOP OCT 200 OCT 510100 RFAD1:OCT 0 OCT 100 OCT 211101!READ, DROP, LOCKOUT DEC DBUF BRU RFCOM RFW:BRS DSKOP OCT 200 OCT 510100 RFAD2:OCT 0 OCT 300 OCT 711101!WRITE, DROP, LOCKOUT DEC DBUF RFCOM:BRS MESSG IND READY BRU STEXEC,X WRF1:LDA ONE STA RFFL LDC WRF,X BRU RRF1+2 RFFL:OCT 0 RFER:IND NOT1 RFIA:BRS MESSG IND RFIAM BRU STEXEC,X RFIAM:OCT 773731!ILLEGAL DISK ADDRESS ALF LLE ALF GAL ALF DI ALF SK ALF ADD ALF RES ALF S. OCT 377255 STL!DISK BUFFER TTL!SPARE-TIME SECTION LOC 22000 LIST:BSS 1024!DISK READ-IN AREA STL!TELETYPE I/O BUFFERS TTL!DATANET-30 EXECUTIVE, SPARE-TIME SECTION LOC 24000 BSS 6144!TELETYPE I/O BUFFER AREAS END LOAD!********** LAST CARD IN D-30 EXEC **********