/EDUSYSTEM 50 MONITOR FOR MELROSE HIGH SCHOOL #495AB /COPYRIGHT 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / /THIS SECTION DEFINES THE HARDWARE CONFIGURATION ON WHICH INDIVIDUAL /EDUSYSTEM 50 MONITORS ARE TO RUN. /FOR EACH STATEMENT, THE COMMENT INDICATES THE POSSIBLE RESPONSES. CPU=2 /1 IF CPU IS PDP-8; 0 IF CPU IS PDP-8/I; /2 IF CPU IS PDP-8/E CORMEM=70 /HIGHEST DATA FIELD SELECT. FOR 12K SYSTEM, /RESPOND 20. FOR 16K SYSTEM, RESPOND 30, ETC. (70 MAX) PHONES=0 /1 IF DC08 INCLUDES 689AG; /0 IF IT DOES NOT OR IF TTY INTERFACING IS OTHER THAN DC08 EAE=0 /20 IF PROCESSOR INCLUDES EAE; 0 IF IT DOES NOT RF08=0 /40 IF SYSTEM DISC IS DF32; 0 IF SYSTEM DISK IS RF08 RS08=1 /NUMBER OF DISCS ON THE SYSTEM, WHETHER DF/DS OR RF/RS. /RESPOND WITH 1, 2, 3, OR 4. PUNCH=1 /1 IS SYSTEM INCLUDES PUNCH; 0 IF IT DOES NOT TC01=1 /1 IF SYSTEM INCLUDES DECTAPE(S); 0 IF IT DOES NOT RK05=1 /NUMBER OF RK05 CARTRIDGE DISK DRIVES ON THE SYSTEM; 0 TO 4 CDR=1 /1 IF SYSTEM INCLUDES CARD READER; 0 IF IT DOES NOT LPT=1 /1 IF SYSTEM INCLUDES LINE PRINTER; 0 IF NO LINE PRINTER DECIMAL /MONITOR CAPACITY FOR THIS SYSTEM JOBMAX=20 /NUMBER OF SIMULTANEOUS USERS (20 MAXIMUM) /THE FOLLOWING ENTRIES DEFINE THE NUMBER OF TERMINALS /ATTACHED TO THE SYSTEM, AND ALSO THE METHOD OF INTERFACING CONTTY=1 /WE ALWAYS HAVE A CONSOLE ( K00 ) DC08A=0 /NUMBER OF TERMINALS INTERFACED VIA DC08A (PDP-8/I ONLY, 19 MAX.) DC08LO=0 /LOWEST HARDWARE LINE NUMBER UTILIZED ON DC08A; USUALLY 0 PT08=0 /NUMBER OF TERMINALS INTERFACED VIA PT08 (PDP-8 & PDP-8/I ONLY) KL8=16 /NUMBER OF ADDITIONAL TERMINALS INTERFACED VIA KL8 (PDP-8/E ONLY, 19 MAX.) /PARAMETERS VERSION 8.24 (01-JANUARY-75) / / / / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR /RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT /SUPPLIED BY DEC. OCTAL PLT=0 IFNZRO CPU < IFNZRO DC08A > IFNZRO 24-JOBMAX&4000 IFNZRO 23-KL8-PT08&4000 IFNZRO 24-DC08A&4000 IFZERO DC08A IFNZRO DC08A < IFNZRO PHONES IFZERO PHONES > NULINE=DC08A+PT08+KL8 /EVERY TERMINAL EXCEPT THE CONSOLE SWDEX=5 /DISK TRACK OF THE FIRST USER SWAP TRACK STOMIN=5 /MINIMUM # FREE STORAGE BLOCK FORR NEW JOB IFZERO RF08-40 < IFZERO RS08-1 IFZERO RS08-2 IFZERO RS08-3 IFZERO RS08-4 DSKEXT=DSKSIZ-1> IFZERO RF08 CLOCKR=144 /MILLISECONDS PER TICK TICMIN=1130 /600 TICKS PER MINUTE INCLK2=0322 /INITIAL CLOCK INCLK1=7400 TICSPS=12 /NUMBER OF SYSTEM TICKS PER SECOND INIDEX=10 /INIT DISC EXTENSION TS8DEX=30 /FIELD 0 DISC EXTENSION*2^3 ERPDEX=0 /ERPDISK EXTENSION*4 ERPWC=0 /ERP WORD COUNT FIPDEX=4 /FIP DISC EXTENSION*4 FIPWC=0 /FIP WORD COUNT SIDEX=ERPDEX /SI DISC EXTENSION*4 SIWC=ERPWC /SI WORD COUNT LIBACT=2 /LIBRARY ACCOUNT # BRKINI=4000 /INITIAL USER BREAK MASK /IOT DEFINITIONS IFNZRO DC08A < /DC08A,DL8I IOTS TTIL=6401 /INCREMENT LINE REGISTER TTI=6402 /TELETYPE INPUT COMMAND TTO=6404 /TELETYPE OUTPUT COMMAND TTCL=6411 /CLEAR LINE REGISTER TTLL=6412 /LOAD LINE REGISTER, CLEAR AC TTRL=6414 /READ LINE REGISTER T1SKP=6421 /SKIP ON CLOCK FLAG T1OFF=6422 /TURN CLOCK OFF T1ON=6424 /TURN CLOCK ON TTIR=6461 /INCREMENT THE R REG. TTCR=6471 /CLEAR THE R REG. TTLR=6472 > /LOAD THE R REG. /EXTENDED MEMORY CDF=6201 /CHANGE TO DATA FIELD 0 CIF=6202 /CHANGE TO INSTRUCTION FIELD 0 CINT=6204 /CLEAR USER IOT RDF=6214 /READ DATA FIELD RIF=6224 /READ INSTRUCTION FIELD RIB=6234 /READ INTERRUPT BUFFER RMF=6244 /RESTORE MEMORY FIELD SINT=6254 /SKIP ON USER IOT CUF=6264 /USER FLAG OFF SUF=6274 /USER FLAG ON /EAE MUY=7405 /MULTIPLY DVI=7407 /DIVIDE NMI=7411 /NORMALIZE SHL=7413 /SHIFT ARITHMETIC LEFT ASR=7415 /ARITHMETIC SHIFT RIGHT LSR=7417 /LOGICAL SHIFT RIGHT MQL=7421 /LOAD MQ SCL=7403 /STEP COUNTER LOAD FROM MEMORY SCA=7441 /STEP COUNTER TO AC MQA=7501 /MQ TO AC IFZERO CPU-2 < DPSZ=7451 /MODE B ONLY - SKIP IF AC&MQ ARE CLEAR SWBA=7447 /CHANGE MODE TO A SWAB=7431 /CHANGE MODE TO B (ALSO DOES MQL) ACS=7403 /AC(7:11) TO SC; AC CLEARED SGT=6006 /SKIP ON GT FLAG > /LINE PRINTER IOTS LSF=6661 /SKIP ON CHAR FLAG SET LCF=6662 /CLEAR CHAR FLAG LSRP=6663 /SKIP ON NOT READY OR ON ERROR LLC=6664 /TRANSMIT CHAR TO PRINTER LSP=6665 /SET PROGRAM INTERRUPT; LP08/LE8 LPC=6666 /TRANSMIT CHAR & CLEAR FLAG LCP=6667 /CLEAR PROGRAM INTERRUPT LIE=6665 /AC11 TO INTERRUPT ENABLE; LS08/LS8E /CTY TPC=6044 /LOAD TELEPRINTER AND PRINT /DISC (DF32) DCMA=6601 /CLEAR DMAR=6603 /READ DMAW=6605 /WRITE DCEA=6611 /CLEAR DISC EXTENDED ADDRESS DEAL=6615 /LOAD EXTENDED ADDRESS DFSE=6621 /SKIP ON ERROR DFSC=6622 /SKIP ON COMPLETION DEAC=6616 /READ EXTENDED ADDRESS /DISC (RF08) DSAC=6612 DORS=6614 DIML=6615 DIMA=6616 DCXA=6641 DXAL=6643 /CARD READER IOT'S RCSF=6631 RCRA=6632 RCRB=6634 RCNO=6635 /8E ONLY RCRC=6636 /8E ONLY RCNI=6637 /8E ONLY RCSD=6671 RCSE=6672 RCRD=6674 RCSI=6675 /8E ONLY RCTF=6677 /8E ONLY /RK05 IOT'S IFZERO PHONES< DSKP= 6741 CDLR= 6742 DLAG= 6743 DLCA= 6744 DRST= 6745 DLDC= 6746 DMAINT= 6747 > IFNZRO PHONES < DSKP= 6751 DCLR= 6752 DLAG= 6753 DLCA= 6754 DRST= 6755 DLDC= 6756 DMAINT= 6757 > /DECTAPE DTRA=6761 DTCA=6762 DTXA=6764 DTSF=6771 DTRB=6772 DTLB=6774 IFZERO CPU < /KW8I REAL TIME CLOCK CECI=6137 /CLEAR AND ENABLE CLOCK AND INTERRUPT CSCF=6133 /SKIP AND CLEAR FLAG IF FLAG > IFZERO CPU-1 < CECI=6315 /CLOCK ENABLE CSCF=6301 /SKIP ON CLOCK FLAG CCF=6302 /CLEAR CLOCK FLAG, CLEAR ENABLE AND CLEAR BUFFER CLB=6304 > /LOAD BUFFER FROM AC IFZERO CPU-2 < CECI=6131 /CLOCK ENABLE CSCF=6133 /SKIP AND CLEAR FLAG IF FLAG /POWER FAIL IOT SPL=6102 /SKIP IF POWER LOW / 8/E PROCESSOR IOT SRQ=6003 /SKIP ON INTERRUPT REQUEST GTF=6004 /LINK TO AC0, GT FLAG TO AC1 RTF=6005 /AC0 TO LINK, AC1 TO GT FLAG CAF=6007 > /CLEAR ALL FLAGS IFZERO CPU-4 < CLLE=6135 /AC11 TO INTERRUPT ENABLE FOR CLOCK CLCL=6136 /CLEAR CLOCK FLAG CLSK=6137 /SKIP ON CLOCK FLAG SPL=6102 /SKIP POWER LOW CAL=6133 > /CLEAR AC LOW FLAG IFNZRO DC08A < /689AG SRF=6701 /SKIP IF RING FLAG SCF=6711 /SKIP IF CARRIER FLAG DFCRF=6742 /CLEAR RING FLAG CTG=6721 /CLEAR GROUP COUNTER RRS=6702 /READ RING STATUS ITG=6731 /INCREMENT GROUP COUNTER STR=6722 /SET TERMINAL READY EDF=6704 /ENABLE DATAPHONE FEATURES DDF=6714 /DISABLE DATAPHONE FEATURES CTR=6724 /CLEAR TERMINAL FLAG CCF=6741 /CLEAR CARRIER FLAG RCS=6712 /READ CARRIER STATUS > /FIP IOTS (IN ABBREVIATED FORM) SEGS=0006 /RETURN NUMBER OF FREE SEGMENTS ON DISK ASD=0040 /ASSIGN REL=0042 /RELEASE REN=0200 /RENAME OPEN=0201 /OPEN CLOS=0202 /CLOSE RFILE=6603 /READ FILE PROT=0204 /PROTECT WFILE=6605 /WRITE FILE CRF=0210 /CREATE EXT=0211 /EXTEND RED=0212 /REDUCE FINF=6613 /FILE INFORMATION LIN=0214 /LOGIN LOUT=0215 /LOGOUT WHO=6616 /WHO /DEVICE DATA BLOCK DDBSTS=0 /WORD 1, STATUS AND UNIT NUMBER DXON=2000 /XOFF SENT FLAG DSI=1000 /DESTINATION IS S.I. FLAG DFULL=400 /KEYBOARD BUFFER IS FULL DUPL=200 /CONSOLE IN DUPLEX MODE SICOM=100 /COMMAND WAITING DECHO=400 /CAUSE SI TO RE-ECHO CURRENT INPUT BUFFER /DEVICE UNIT NUMBER IS IN BITS 6-11 DDBJN=1 /WORD 2, JOB NUMBER IN 7-11 DDBBRK=2 /BREAK MASK DDBTIM=3 /TIME THAT DEVICE WAS ASSIGNED DDBINP=4 /BUFFER FILL POINTER DDBINC=5 /BUFFER TOTAL COUNT DDBOUC=6 /BUFFER EMPTY COUNT DDBOUP=7 /BUFFER EMPTY POINTER /JOB DATA AREA JOBSTS=0 /STATUS /STR0 JSRUN=4000 /RUN BIT JSEREN=2000 /USER ERROR ENABLE JCOMBD=1000 /LAST TIME THE JOB RAN AS COMPUTE BOUND JSPEEK=400 /ALLOW "PEEK" AND "LOGOUT" IOT'S JSACC=200 /JOB LOGGED IN UNDER PRIVILEGED ACCOUNT (1, 2, OR 3) JSIOT=100 /NON-RESIDENT IOT JSIOTC=40 /COPY IOT RESULT TO USER JSEXON=20 /EXECUTE ONLY JSINER=10 /INHIBIT ERROR REPORT FROM SI. (UNTIL NEXT COMMAND) /BITS 9-11 ARE SYSTEM ERROR CODE UUOERF=1 /IOT ERROR SWPRER=2 /SWAP READ ERROR SWPWER=3 /SWAP WRITE ERROR DSKERR=5 /DISC ERROR HUNGDV=6 /HUNG DEVICE /STR1 JSTIME=4000 /TIME IS UP JSF0=2000 /FILE 0 IS NOT BUSY JSF1=1000 /FILE 1 IS NOT BUSY JSF2=400 /FILE 2 IS NOT BUSY JSF3=200 /FILE 3 IS NOT BUSY JSDEL=100 /KEYBOARD DELIMITER SEEN JSLPT=40 /LINE PRINTER BUFFER IN USE BUT NOT FULL JSTEL=20 /TELEPRINTER OUTPUT BUFFER IN USE BUT NOT FULL JSPTR=10 /CHARACTERS IN READER BUFFER JSPTP=4 /PUNCH BUFFER IN USE BUT IS NOT FULL JSERR=2 /SYSTEM ERROR DETECTED JSWAIT=1 /JOB NOT IN WAIT STATE JOBSTB=2 /DEVICE STATUS REGISTER (FOR RK05, DECTAPE, AND CARD READER) JOBWMK=3 /WAIT MASK JOBSRA=5 /JOB RESTART ADDRESS JOBERR=6 /JOB ERROR RESTART ADDRESS JOBLNK=7 /IOT LINKAGE JOBSWR=10 /SWITCH REGISTER JOBREG=11 /PC LINK AC JOBEAE=14 /MQ MODE GT SC JOBACC=16 /ACCOUNT NUMBER JOBF0=17 /POINTER TO FILE 0 CONTROL JOBF1=20 /POINTER TO FILE 1 CONTROL JOBF2=21 /POINTER TO FILE 2 CONTROL JOBF3=22 /POINTER TO FILE 3 CONTROL JOBRTM=23 /LOW ORDER RUN TIME JOBRTH=24 /HI ORDER RUN TIME /FILE CONTROL BLOCK - POINTED TO BY JOBFX, X=0,1,2,3 FILWPT=0 /POINTER TO FILE RETRIEVAL WINDOW FILSCT=1 /SEGMENT NUMBER OF FIRST WINDOW ENTRY FILPRO=2 /FILE PROTECTION - BIT 9 FILPAR=3 /POINTER TO RFILE OR WFILE PARAMETER BLOCK FILDA=4 /DISC ADDRESS OF RFILE OR WFILE FILWC=6 /-WORD COUNT OF RFILE OR WFILE FILRES=7 /POINTER TO FILPIF IN USER AREA /FILE RETRIEVAL WINDOW /WORD 0: UFD LINK TO NEXT GROUP OF 7 SEGMENT POINTERS /WORDS 1-7: SEVEN SEGMENT ADDRESSES /RFILE OR WFILE PARAMETER BLOCK - POINTED AT BY FILPAR FILPFN=0 /FUNCTION: 0603 OR 0605 FILPDX=1 /DISC EXTENSION FILPIF=2 /INTERNAL FILE # (BITS 10-11) AND FIELD # (BITS 7-9) FILPWC=3 /-WORD COUNT FOR THIS TRANSFER FILPCA=4 /CORE ADDRESS FOR THIS TRANSFER FILPDA=5 /DISC ADDRESS FILPRA=6 /EXEC RETURN ADDRESS FOR THIS TRANSFER FILPCT=7 /POINTER TO FILE CONTROL BLOCK /CORE TABLE CONTROL FLAGS SWAP=4000 /SWAP REQUEST LOCK=2000 /LOCK IN CORE NOTRUN=1000 /HAS NOT BEEN SCHEDULED TO RUN FIP=400 /FILE PHANTOM SI=200 /SYSTEM INTERPRETER NOHOLD=140 /INHIBIT "NOTRUN" STATUS AFTER FOUR CONSECUTIVE FILE TRANSFERS CJOB=37 /BITS 7-11 CONTAIN THE JOB # /FIP TABLE DEFINITIONS SATSIZ=530 JTABLE=6000 ENTABL=JTABLE+JOBMAX+1 UTABLE=ENTABL+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX RTABLE=UTABLE+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX /TABLES CORTBL=7001 /CORE ASSIGNMENT TABLE L2QTB=CORTBL+7 IFZERO DC08A IFNZRO DC08A /SIZE OF FIELD 1 DC08A CODE PLUS 689AG CODE OUTREG=200 /ACTIVE OUTPUT REGISTERS (TTY'S, LPT & PTP) SKPTBL=OUTREG+NULINE+3 /START OF IOT SKIP TABLE SKPTP=SKPTBL+NULINE+NULINE+3 /POSITION OF PUNCH SKIP IN SKIP TABLE RINGIN=SKPTP+3 /KEYBOARD INPUT RING BUFFER ENDBUF=OUTREG+200 /END OF KEYBOARD INPUT BUFFER INPUTS=ENDBUF-RINGIN%2 /NUMBER OF POSSIBLE ENTRIES IN THE KEYBOARD RING BUFFER DATFLD=CDF 10 /MONITOR DATA FIELD SELECT IFZERO EAE-20 IFZERO EAE IFZERO CPU&7776 > IFNZRO OUTREG&1 /SUPER CRITICAL LOCATIONS /THESE LOCATIONS ARE USED TO LINK TS8, TS8II, FIP, SI AND INIT. /IT MAY BE NECESSARY TO ADJUST THEM ACCORDINGLY /DEFINED IN TS8: WSCHED=2573 /ADDRESS FOR WAIT GETJTB=401 /GETJTA CORSRC=1317 /SEARCH CORE TABLE OVERLA=5171 /FILE STUFF READFI=574 /MORE FILE STUFF CONDBA=132 /DEVTBL POINTER USED BY "PRINT" ETC. RETB=611 /RETURN A BLOCK TO FREE CORE GETB=1405 /GET A BLOCK OF FREE CORE GETDB0=1447 /GET A DDB CLK1=51 /LOW ORDER DAYTIME CLOCK CLK2=50 /HIGH ORDER DAYTIME CLOCK DATE=166 /12 BIT DATE WORD TTCHAR=31 /SAVE REG. FOR CONSOLE CHARACTERS KBD00=3201 /PROCESS KEYBOARD INPUT PRINT0=1205 /TYPE OUT A CHARACTER OVRLA1=562 /MORE FILE STUFF RUNFI=605 /SI FILE TRANSFER INITIALIZER L2SF=103 /LEVEL 2 SAVED MODE AND FIELD SICLR=6572 /SI CLEAR LINKED BUFFER TIMSI=2421 /TIMER FOR SI "COMWAT" SIWAIT=1702 /NUMBER OF SI COMMANDS BEING WAITED ON TIMFIP=2423 /TIMER FOR FIPLOCK FIPLOK=2724 /CORTBL STATUS CHECK FOR FORCE OUT CLKINI=322 /CONVERT HARDWARE CLOCK TO SYSTEM-TICKS (100 MS) BLT0=1602 /BLOCK TRANSFER FROM CORE TO CORE KBDSQ=3213 /ADDRESS OF JMS TO ^S/^Q CODE /DEFINED IN TS8II: F1TCNT=175 /SI DDB CHARACTER COUNT F1ECNT=176 /SI DDB EMPTY COUNT F1BUF=177 /SI DDB EMPTY BLOCK POINTER DTJOB=20 /JOB OWNING THE DECTAPE CONTROLLER RKJOB=54 /JOB OWNING RK05 CONTROLLER DTSI=1175 /SI TERMINATE A DECTAPE ON TIMER DATA1=2200+DCSIZE DEVTBL=DATA1+140 DEVTBE=DEVTBL+NULINE+NULINE+2 JOBTBL=DEVTBE+22 CLKTBL=JOBTBL+JOBMAX+1 TTYTBL=CLKTBL+JOBMAX+1 PRGTBL=TTYTBL+JOBMAX+1 DSUTBL=PRGTBL+JOBMAX+JOBMAX+JOBMAX-7 FIPBLK=7720 /FIXED BLOCK FOR FIP IO WINBAS=7730 /ADDRESS OF THE BASIC WINDOW OUTDIF=-OUTREG^2+DEVTBL /FOR LINKING BETWEEN OUTREG AND DEVTBL F1OFFJ=164 /FOR OFF/ON COMMANDS USED BY SI IFNZRO DEVTBL&1 /DEFINED IN SI DTSIDT=7270 /RETURN FROM STOPPING A DECTAPE ON TIMER VERBRK=7600 /START OF INSTALLATION DEFINED LOGIN MESSAGE /TS8 VERSION 8.24 (01-JANUARY-75) / / / / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR /RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT /SUPPLIED BY DEC. VERNUM=30 /PAGE 0 FIELD 3 /LOAD THIS INTO TRACK 3 ON DISK *1 JMP I .+1 C0200, 200 WS0, 0 /WORKING STORAGE FOR MAIN FLOW WS1, 0 JOBSWA, 0 *10 ACX10, 0 /FOR INTERRUPT SERVICE ACX11, RINGIN-1 /INPUT RING BUFFER POINTER (LEVEL 1) DSPAR, 0 /DISK HANDLER L2Q, L2QTB-1 /LEVEL 2 QUEUE L2QE, L2QTB-1 /LEVEL 2 EMPTY POINTER AXS1, 0 /MISCELLANEOUS LEVEL 2 AUTO-INDEX AXS2, 0 / " DSKPTR, DSUTBL+6 /DISK REQUEST QUEUE POINTER SIDATA=20 /SYSTEM INTERPRETER DATA *SIDATA COMPTR, DEVTBL /POINTER TO LAST DEVTBL ENTRY SCANNED SIBUF, 0 /BUFFER STATE SICNT, 0 COMDSP, 0 /FIP RETURN DISPATCH SIFLG, 0 /COMMAND FLAGS SICHAR, 0 /SAVE LAST CHAR FROM COMMAND SCAN SIREG, 0 /USER AC, LINK, PC 0 0 TTCHAR, 0 /TTY CHARACTER CONSTANTS=SIDATA+12 *CONSTANTS C0002, 2 C0003, 3 C0004, 4 C0007, 7 C0037, 37 C0100, 100 C1000, 1000 C7770, 7770 JOBCON=CONSTANTS+11 /JOB CONTROL *JOBCON JOBTIM, 0 /NUMBER OF TICKS RUN JOBTBA, JOBTBL /JOB TABLE ADDRESS FRSTOR=JOBCON+3 *FRSTOR FREE, 0 /POINTER TO HEAD OF FREE STORAGE FRECNT, 0 /# FREE BLOCKS AVAILABLE TIMDAT=FRSTOR+2 /CLOCK AND DATE *TIMDAT /CLOCK CLK2, 0 CLK1, 0 SCHDAT=TIMDAT+2 *SCHDAT /SCHEDULING DATA COMCNT, 0 /NUMBER OF COMMANDS AWAITING EXECUTION SQREQ, 0 /SWAP REQUEST FLAG FINISH, 0 /+(I)-(O) FIELD OF JOB BEING SWAPPED FIT, 0 /JOB # TO BE SWAPPED IN FORCE, 0 /FIELD TO BE SWAPPED OUT DATEND=60 /END OF FIELD 0 PAGE 0 DATA FIPDAT=155 /DATA REFERENCED BY FIP *FIPDAT FIPJOB, 0 /JOB NOW (OR SOON TO BE) RUNNING FIP C0400, 400 SEGSIZ=C0400 /# WORDS PER SEGMENT *160 JOB, 0 /# OF CURRENT JOB JOBDAT, . /ADDRESS OF CURRENT JOB DATA LIST. MUST RESIDE IN DATA FIELD. C7000, CORTBA, CORTBL-1 /CORE ALLOCATION TABLE DEVTBA, DEVTBL /DEVICE TABLE DSUTBA, DSUTBL /USER DISC REQUEST QUEUE DSBUSY, -1 /DISC BUSY COUNT /THE DATE IS KEPT AS A 12 BIT NUMBER IN THE FORMAT /DATE=((YEAR-1974)*12+(MONTH-1))*31+DAY-1 DATE, 0 FISUBL=400 BLTA, BLT0 /BLOCK TRANSFER BLT=JMS I BLTA CORSRA, CORSRC CORE=JMS I CORSRA GETBA, GETB GETBLK=JMS I GETBA GETDBA, GETDB0 /GET A DATA BLOCK GETDDB=JMS I GETDBA PRINTA, PRINT0 /TYPE OUT A CHARACTER PRINT=JMS I PRINTA GETJT0, GETJTB /GET JOB DATA TABLE ADDRESS GETJTA=JMS I GETJT0 GIRSCA, GIRSC /STORE CHARACTER IN BUFFER STORE=JMS I GIRSCA RETBA, RETB /RETURN BLOCK TO FREE STORAGE RETBLK=JMS I RETBA WAITA, WSCHED WAIT=JMP I WAITA /SUBROUTINE DISPATCHES SUBDSP=DATEND *SUBDSP IOR=JMS I . IOR0 /INCLUSIVE OR UUOEXT=JMP I . UUDEX1 /UUO EXIT FIUSER, DSUSER /QUEUE FILE REQUEST IN DSUBTL ERROR=JMS I . SYSERR /SYSTEM ERROR TTYUSE=JMS I . TTYSRC /FIND USER TTY SCHED=JMP I . SCHEDA, SCHEDI /SCHEDULE NEXT JOB NOW CORE RESIDENT RSCHED=JMP I . RSCHEA, SCHED0 /FIND NEXT JOB TO BE RUN EXIT=JMP I . EXITA, L2EXIT /LEAVE LEVEL 2 REDO=JMP I . REDO0 /REPEAT IOT LATER WHEN (HOPEFULLY) IT CAN BE COMPLETED KEY=JMS I . KBD00 /PROCESS KEYBOARD INPUT INTO A USER'S INPUT BUFFER SAVJOB=JMS I . SAVJO0 /SAVE THE STATUS OF THE CURRENT JOB RESJOB=JMS I . RESJO0 /RESTORE THE PREVIOUSLY SAVED STATUS START=JMP I . /START USER JOB SUJ DSGO=JMS I . DSGO0 /START DISK REQUEST GETJTW=JMS I . GETJW0 /GET CONTENT OF JOB STATUS WORD (CURRENT JOB) GETJTI=JMS I . GETJI0 /GET CONTENT OF JOB STATUS WORD (ANY JOB) DISMIS=JMP I . DISMI0 /DISMISS INTERRUPTS RUNABL=JMS I . RUNTST /TEST IF SPECIFIED JOB IS RUNNABLE SETFLG, PTSTAR L2CON=SUBDSP+23 /LEVEL 2 (EXEC) CONTROL *L2CON L2SF, 100 /RELOCATION AND MODE L2SV0, NULJOB /SAVED PC L2SVLK, 0 /SAVED LINK L2SA, 0 /SAVED ACCUMULATOR FETCH=JMS I . TOF /RETRIEVE A CHARACTER FROM A LINKED FREE CORE BLOCK CLOCK, -1 /NUMBER OF SYSTEM TICKS PENDING ON LEVEL 2 (MINUS 1) DEAD, 0 /CORTBL-1 OF JOB THAT SHOULD BE PUSHED OUT SCHNEW, 0 /-1 TO ALLOW FULL TIME SLICES C0010, 10 IFNZRO DC08A < D6FLAG, -1 /ALLOW 689 ANSWER ONLY ONE TIME IN L2Q D6ANSR, ANSWER > /ROOM FOR PATCHES!! *CONDBA 0 /POINTER TO DEVTBL POSITION CURRENTLY UNDER CONSIDERATION CONDDB, 0 /ADDRESS OF DDB UNDER CONSIDERATION SEGLMK, 7400 /-WRDSEG C7400=SEGLMK BASWIN, -WINBAS-1 CJOBDA= JOBDAT C0006, 6 C0070, 70 SEGSM1, /WRDSEG-1 C0377, 377 C0005, 5 C0600, 600 C3777, 3777 C6203, 6203 QUANTM, C7776, 7776 C0177, 177 CURJOB, 0 /NUMBER OF JOB INTERRUPTED BY FILE TRANSFER *150 UDF=JMS . /SELECT FIELD OF CURRENT JOB WS2, 0 UUDF, 0 /DATA FIELD SELECT FOR FIELD OF CURRENT JOB JMP I .-2 INTRC, 0 /TRACK # TO BE SWAPPED IN (DF32 0X00) (RF08 000X) OUTTRC, 0 /TRACK # TO BE SWAPPED OUT *42 FANCOR, CORTBL+1 /FIELD OF PHANTOM I.E. FIELD 2 *57 BONUS, 0 /JOB # JUST BROKEN OUT OF I/O WAIT *157 SWPIOA, SWPIO *45 SWPREA, SWPRET /FIELD 0 PAGE DIRECTORY IOTS=4000 DISC=IOTS+1400 /DISC CONTROL *200 /PRIORITY LEVEL 0 (HIGHEST PRIORITY) /KEEPS TRACK OF REAL TIME /ALWAYS ENTERED BY CLOCK FLAG /DISMISSES TO LEVEL 1 IF INTERRUPT WAS NOT FROM LEVEL 1 /OTHERWISE, DISMISSES TO INTERRUPTED LOCATION. INT, IFZERO CPU-2 < SPL /POWER FAILURE? JMP INTX0 /NO JMP I .+1 /YES, HURRY UP AND SERVICE IT POWINT INTX0, > IFZERO CPU-4 < SPL /POWER LOW SKP /NO JMP .-2 /WAIT FOR POWER CAL > /CLEAR POWER LOW CONDITION SINT /USER IOT? (HAS TO BE CHECKED FIRST!!!) IFZERO DC08A IFNZRO DC08A /DC08? JMP I UUOA /YES, GO SAVE LEVEL 2 STUFF IFNZRO DC08A < T1SKP /CLOCK? JMP INT0 /NO, KEEP LOOKING ISZ CLKCNT /YES, IS A SYSTEM TICK UP YET? JMP I T8DISA /NO, RUN DC08 INTERRUPT SERVICE DCA CLKIT /SAVE AC AT INTERRUPT TAD L2TIMA /SCHEDULE L2TIME ON L2QUE ISZ CLOCK /BUMP NUMBER OF TICKS TO COUNT AT LEVEL 2 CLA SKP /ALREADY SCHEDULED DCA I L2Q TAD CLKINI /RESET TIMER FOR NEXT TICK DCA CLKCNT TAD CLKIT /GET AC AT INTERRUPT JMP I T8DISA /RUN DC08 SERVICE T8DISA, T8DIS> /INTERRUPTS OTHER THAN 680 (LEVEL 1) /DISMISSES TO LEVEL 2 IF NOT FROM LEVEL 1 OR 2. INTAC, 0 /AC AT LEVEL 1 INTLK, 0 /LINK AT LEVEL 1 UUOA, UUO0 INT0, DCA INTAC /SAVE AC AND LINK RAR DCA INTLK IFZERO DC08A < IFNZRO CPU-4 /SKIP AND CLEAR FLAG IF FLAG IFZERO CPU-4 /SKIP IF CLOCK FLAG JMP DTINT IFZERO CPU-4 /CLEAR CLOCK FLAG IFZERO CPU-1 < CLA CMA /KW08 CCF CLB /CLEAR FLAG AND LOAD BUFFER CECI > /ENABLE ISZ CLKCNT /IT WAS CLOCK - WAS IT A SYSTEM TICK JMP DISMI1 /NO - NOTHING TO DO THEN TAD CLKINI /YES - SET FOR NEXT SYSTEM TICK DCA CLKCNT ISZ CLOCK JMP DISMI1 TAD L2TIMA /SCHEDULE A SYSTEM TICK ON LEVEL 2 JMP DISMI0 > DTINT, JMS DTCHK DISMIS IFNZRO D689 < SRF JMP D6CF DFCRF /CLEAR THE RING FLAG ISZ D6FLAG /HAVE WE GOTTEN MORE THAN ONE FLAG? DISMIS /YES! DON'T OVERFLOW L2Q TAD D6ANSR DISMIS /SCHEDULE PHONE ANSWERING ON L2Q D6CF, SCF JMP RFINT CCF /A CARRIER HAS CHANGED TAD DFM4 DCA I TIM68A /TAKE A LOOK AT IT IN FOUR SECONDS DISMIS DFM4, -4 TIM68A, TIM689 > RFINT, IFZERO RF08-40 IFZERO RF08 /RF08 ERROR? ISZ DSWAIT /NO ERROR - TRANSFER OK JMP I DSWAIT DSWAIT, 0 /SET BY DISK SERVICE INT2, IFNZRO CDR /CONTINUE IN THE INTERRUPT CHAIN IFZERO CDR DTCHK, 0 IFNZRO CDR /CARD READER? IFZERO CDR JMP .+5 CIF DATFLD-1 CDF JMP I .+1 CDL11 IFNZRO RK05 < DSKP > /RK05? IFZERO RK05 < JMP .+5 > JMP .+4 CIF DATFLD JMP I .+1 RKL11 IFNZRO TC01 /DECTAPE? IFZERO TC01 JMP .+10 DTRA AND C0004 SNA CLA JMP .+4 CIF DATFLD JMP I .+1 DTL11 ISZ DTCHK F1RTN, JMP I DTCHK /THESE 3 DEVICES RETURN HERE FROM FIELD 1 INT7, TAD CLKIT DCA I L2Q /QUEUE REQUEST DISMI1, TAD INTLK /RESTORE LINK AND AC CLL RAL TAD INTAC DISMI2, RMF /RESTORE IF, DF, & MODE ION JMP I 0 /BACK TO INTERRUPTED PROGRAM L2TIMA, L2TIME REST0, CLKIT, 0 /TEMPORARY FOR AC CLKCNT, -3 /WILL INITIALIZE ITSELF TO THE CORRECT VALUE *322 CLKINI, 0 /SET BY INIT TO CAUSE 1 SYSTEM TICK TO = 100 M.S. /DISMIS ROUTINE /ENTERED FROM INTERRUPT HANDLER TO ENTER LEVEL 2 FROM LEVEL 1 /AC = ADDRESS OF LEVEL 2 SERVICE ROUTINE / OR 0 IF NO LEVEL 2 SERVICE REQUIRED DISMI0, C6201, CDF SNA /DISMISS INTERRUPTS? JMP DISMI1 /NO - BACK TO WHATEVER WAS GOING ON BEFORE DCA CLKIT /SAVE DISPATCH RIB /MODE BIT = 100 AND C0100 SNA CLA /FROM USER MODE? JMP INT7 /NO - QUEUE REQUEST UNTIL LATER TAD INTAC /MOVE THE AC TO LEVEL 2 DCA L2SA TAD INTLK /MOVE LINK TO LEVEL 2 DCA L2SVLK TAD 0 /MOVE PC TO LEVEL 2 DCA L2SV0 RIB DCA L2SF /FIELDS AND MODE TO LEVEL 2 ION /DISMISS TO EXEC MODE, FIELD 0, LEVEL 2 JMP I CLKIT /RESTORE INTERRUPTED STATE RESTOR, DCA REST0 /POINTER TO SAVED INFO TAD I REST0 /SAVED FIELDS AND STATE AND C0070 /GET INSTRUCTION FIELD TAD C6203 DCA RCIF /CIF FOR PROPER FIELD TAD I REST0 CLL RTL RAL AND C0070 /CDF FOR RETURN TAD C6201 /NOT NECESSARILLY EQUAL TO INSTRUCTION FIELD DCA RCDF TAD I REST0 AND C0100 /USER PROGRAM, FIP OR SI? SZA CLA SUF /USER MODE; SET USER FLAG ISZ REST0 TAD I REST0 /PC DCA 0 ISZ REST0 TAD I REST0 /LINK CLL RAL ISZ REST0 CLA TAD I REST0 /AC RCIF, 0 RCDF, 0 ION JMP I 0 /BACK TO INTERRUPTED PROGRAM /RETURN ADDRESS OF LINKED TABLE ENTRY /CALL TAD TABLE ENTRY ADDRESS / GETJTA / ENTRY NAME (NUMBER) / RETURN GETJTB, 0 DCA GETJT1 /SAVE JOBTABLE ADDRESS TAD I GETJTB /ENTRY # DCA GETJT2 RDF /FIELD CALLED FROM TAD C6203 DCA GETJT3 /SO WE CAN GET BACK DATFLD /CHANGE TO DATA FIELD DCA I GETJTZ /CLEAR FLD 1 LOC. 0 GETJ1, TAD I GETJT1 /GET JOBTBL ENTRY CLL /TO LET CALLER KNOW IT DOESN'T EXIST SNA /LINK 0? JMP GETJ3 /YES - RETURN 0 DCA GETJT1 /NO, JOB DATA ADDRESS TAD GETJM7 TAD GETJT2 /ARE WE IN PROPER BLOCK? SPA /ENTRY<7? JMP .+3 /YES DCA GETJT2 /NO, LINK TO NEXT JMP GETJ1 /AND TRY AGAIN STL CLA IAC /SET LINK TO LET CALLER KNOW WE WERE SUCCESSFUL TAD GETJT2 /INDEX INTO BLOCK TAD GETJT1 /START OF BLOCK GETJ3, ISZ GETJTB /SKIP CALLING ARGUMENT GIRSB, GETJT3, 0 /BACK TO CALLING FIELD JMP I GETJTB GETJTZ, 0 /POINTER TO LOC. 0 OF FIELD 1 (NOT FOR TEMPORARY STORAGE) GIRSCT, /POINTER TO ITEM COUNT GETJT1, 0 GIRST, GETJT2, 0 GETJM7, -7 /STORE CHARACTER /CALL WITH ADDRESS OF DDB IN AC, CHARACTER IN TTCHAR / STORE / ADDRESS OF ROUTINE TO CHECK BUFFER SIZE / WON'T FIT / OK EMPTY=WS1 DBINPA=C0004 GIRSC, 0 TAD DBINPA DCA GIRSB /POINTS TO ADDRESS OF BUFFER TAD I GIRSB SNA /IS BUFFER SET UP? (I.E. IS FILL POINTER NON ZERO?) JMP GIRSC8 /NO - GO GET A BUFFER DCA GIRSCT /POINTER TO FILL COUNT ISZ I GIRSCT /ANY ROOM LEFT? JMP GIRSC1 /YES CDF TAD I GIRSC /GET ADDRESS OF SIZE SUBROUTINE DATFLD DCA GIRST TAD GIRSB IAC /POINT TO CHARACTER COUNT JMS I GIRST /GO CHECK BUFFER SIZE JMP GIRSC0 /BUFFER ALREADY FULL - NO ROOM FOR THIS ENTRY GIRS11, CLL CLA CMA RTL /IS THERE ENOUGH (I.E. 3 BLOCKS) FREE CORE LEFT? TAD FRECNT SPA SNA CLA JMP GIRSC0 /NO - DON'T GIVE HIM ANOTHER BUFFER NOW TAD GIRSCT /OK - GET A BUFFER CDF GETBLK /NO, LINK NEW BUFFER JMP GIRSC0 /NONE AVAILABLE DATFLD TAD I GIRSCT /POINTER TO HEAD OF NEW BUFFER DCA I GIRSB /BUFFERS NOW CHAINED TOGETHER GIRSC7, TAD I GIRSB DCA GIRSCT /POINT TO NEW FILL COUNT TAD GIRSIZ /INITIALIZE CHAR COUNT TO -12 DCA I GIRSCT /AND SAVE IN NEW BLOCK GIRSC1, TAD I GIRSCT /ARE WE DOING LAST THREE CHARACTERS IN BLOCK? TAD C0003 SMA STL RAL /YES SO MULT. BY 2 THEN ADD 1 SPA /PACK? STL CIA /NO - GET ADDRESS WITHIN BUFFER TAD I GIRSB /START OF BUFFER DCA GIRSCT /ADDRESS TO STORE CHARACTER TAD TTCHAR SNL /PACK? JMP GIRSC4 /YES AND C0377 GIRSC5, DCA I GIRSCT /STORE CHARACTER ISZ GIRSB /POINT TO CHARACTER COUNT ISZ I GIRSB /COUNT THIS ENTRY ISZ GIRSC /INDICATE SUCCESS GIRSC3, ISZ GIRSC /TO SKIP PAST ARG. JMP I GIRSC GIRSC4, RTL /SHIFT BITS TO LEFT RTL AND C7400 TAD I GIRSCT /AND SAVE IN CURRENT LOCATION IN BUFFER DCA I GIRSCT ISZ GIRSCT /NEXT LOCATION IN BUFFER TAD TTCHAR /GET LOW 4 BITS FROM CHARACTER RTR RTR RAR AND C7400 /AND COMBINE WITH PREVIOUS CHARACTER TAD I GIRSCT /SAVE THE WHOLE MESS JMP GIRSC5 /AND AWAY GIRSC8, CDF /ATTACH A BUFFER TO FILL POINTER TAD GIRSB /LINK ADDRESS GETBLK JMP GIRSC3 /CAN'T GET ONE - TOO BAD DATFLD /OK - SET UP POINTERS STL RTL / 2 PLUS TAD GIRSB /ADDRESS OF FILL POINTER DCA EMPTY / = ADDRESS OF EMPTY COUNT STA TAD GIRSIZ /-13 TO THE EMPTY COUNT DCA I EMPTY ISZ EMPTY /NOW INITIALIZE THE EMPTY POINTER TAD I GIRSB /SET EMPTY POINTER EQUAL TO FILL POINTER DCA I EMPTY /SINCE IT'S THE ONLY BUFFER JMP GIRSC7 GIRSC0, DATFLD /COULDN'T SQUEEZE CHARACTER IN STA /BUT WE ALREADY BUMPED FILL COUNT DCA I GIRSCT /INDICATE CURRENT BLOCK IS STILL FULL JMP GIRSC3 /AND EXIT WITHOUT SKIPPING GIRSIZ, -12 /10 (DECIMAL) CHARACTERS/BLOCK OVRLA1, JMS I FIUSER WAIT REMJOB, 0 TAD SCHNEW /GET NEW JOB MASK AND JOB /AND THE CURRENT JOB DCA CURJOB /IF THERE'S A JOB; REMEMBER HIM/HER SAVJOB /SAVE HIS/HER STATE STA DCA SCHNEW /SET MASK FOR FULL SLICE JMP I REMJOB READFI, TAD SIREG /FIND RESIDENT FIELD FOR THIS JOB FILCON, DCA WS0 JMS REMJOB /BUMP OFF THE PRESENT USER - BUT MAYBE REMEMBER WHO [S]HE IS TAD WS0 CORE CJOB /ANY FIELD WITH THIS JOB IN IT IS OK HLT /IF IT'S NOT THERE IT'S DOOMS DAY FOR ALL DCA L2SF /RESTORE FOR THIS JOB TAD WS0 RUNFI, RESJOB /RESTORE LEVEL TWO FOR THIS JOB GETJTW /GET ADDRESS OF FILE PARAMETER BLOCK JOBLNK JMP I SIFILA /AND OFF TO THE FILE HANDLER /RETURN BLOCK TO FREE LIST /CALL TAD BLOCK ADDRESS / RETBLK / RETURN WITH LINK IN AC RETB, 0 DCA RETB1 /SAVE BLOCK ADDRESS RDF TAD C6203 DCA RETF /FOR RETURNING TO CALLER TAD RETB1 CLL TAD RETEND /SEE IF IT'S FIP'S BLOCK OR A FILL COUNT FOR A LINKED BUFFER SZL CLA JMP RETF /IT IS - DON'T RELEASE IT TAD RETB1 SNA HLT /SHOULD NEVER RETURN 0000 AND C0007 SZA HLT /SHOULD ALWAYS BE XXX0 DATFLD TAD I RETB1 /NOW GET THE LINK, IF ANY DCA RETBL /SAVE IT TAD FREE /GET OLD START OF FREE LIST DCA I RETB1 /PUT IT IN LINK TAD RETB1 /PUT ADDRESS OF THIS BLOCK DCA FREE /AS START OF FREE LIST ISZ FRECNT /INCREMENT FREE TAD RETBL RETF, 0 /RETURN WITH LINK JMP I RETB RETEND, -FIPBLK SIFILA, SIFILE SJCOPY, JSIOTC SUJERR= C0007 /RESTART USER JOB AT RESTART ADDRESS GIR90, CIA /NEGATE THE JOB NUMBER TAD JOB /IS THE JOB CURRENTLY RUNNING? SZA CLA JMP GIR91 /NO TAD I WS0 DCA L2SV0 /SET PC=RESTART ADDRESS DCA L2SVLK /SET LINK=0 DCA L2SA /SET AC=0 JMP I GIR0A /LEAVE GIR91, TAD I WS0 DCA I JOBSWA /SET PC=RESTART ADD ISZ JOBSWA STA DCA I JOBSWA /SET LINK=-1 SO WE'LL REMEMBER TO CLEAR HIS'HER LINK & AC LATER JMP I GIR0A GIR0A, KBD01 CNOTR, -NOTRUN-1 /START USER JOB SUJ, TAD L2SF /CLEAR NOTRUN FLAG SO JOB CAN BE SWAPPED AND C0007 /GET CORTBL INDEX TAD CORTBA DCA SUJSRC /POINTS TO ENTRY IN CORTBL FOR THIS JOB TAD I SUJSRC /GET CORTBL ENTRY AND CNOTR /CLEAR NOT RUN BIT DCA I SUJSRC /SAVE ENTRY TAD JOB /IS IT A PHANTOM? AND C0600 SUJ2, SZA CLA EXIT /YES - WE'RE ALL SET SUJ5, GETJTW /NO, IOT RESULTS TO USER? JOBSTS AND SJCOPY /IOTC BIT IN STR0 DATFLD SNA JMP SUJ4 /NO - WAS THERE A SYSTEM ERROR? CMA /CLEAR THE BIT AND I JOBSWA /JSIOTC:=0 DCA I JOBSWA /SAVE NEW STR0 CDF /GET # ARGUMENTS TO RETURN GETJTW JOBLNK DCA SUJSRC /POINTS TO WORD1 OF PARAMETER BLOCK DATFLD TAD I SUJSRC /IOT IN QUESTION CDF RAR /SAVE "WHO FINF" INDICATOR IN LINK AND C0004 SNA CLA /WAS BIT 8 ON? JMP SUJ3 /NO - MUST HAVE BEEN AN RFILE OR WFILE WINDOW TURN CML CMA RAL CLL RTL /CA=-3 FOR "WHO"; AC=-7 FOR "FINF" DCA SUJCNT /SAVE COUNT TAD SUJSRC /RETURN PARAMETER BLOCK RETBLK CLA ISZ SUJSRC /POINTS TO WORD 2 OF BLOCK TAD UUDF /TRANSFER RESULTS TO USER'S FIELD DCA SUJDFS /...SET FIELD IN BLT CALL TAD L2SA /POINTS TO USER'S PARAMETERS DCA SUJDES /SAVE FOR BLT DCA L2SA /CLEAR HIS/HER AC BLT /MOVE RESULTS TO USER DATFLD /FROM FIELD 1 SUJSRC, 0 /SOURCE ADDRESS RETBL, SUJDFS, 0 /TO USER FIELD RETB1, SUJDES, 0 /AT THIS ADDRESS SUJCNT, 0 /-WORD COUNT TAD JOB RUNABL /IS [S]HE STILL RUNNABLE? WAIT /NO - JUST NEEDED TO PASS THE INFO TO HIM/HER JMP SUJ5 SUJ3, TAD SUJSRC /UFILE RETURN JMP I SIFILA SUJ4, ISZ JOBSWA /POINT AT STR1 TAD I JOBSWA STL RTR /PLACE SYSTEM ERROR PENDING BIT IN LINK SNL /IS THERE AN ERROR? JMP SUJ2 /NO; GO CLEAR AC AND EXIT /ROUTINE TO START USER JOB AT ERROR ADDRESS /DOES A JMS TO ERROR ADDRESS /USER PC AT TIME OF ERROR TO ADDRESS; JMP TO ADD+1 CLL RTL /CLEAR THE ERROR PENDING BIT DCA I JOBSWA /TO AVOID A SECOND JMS TO HIS ERROR ROUTINE TAD JOBSWA TAD C0005 DCA JOBSWA /POINTS TO ERROR RESTART ADD TAD I JOBSWA /ERROR ADDRESS DCA WS0 TAD L2SV0 /OLD PC UDF /GET USER'S FIELD DCA I WS0 /SAVE OLD PC IAC TAD WS0 /ERROR ADDRESS + 1 DCA L2SV0 /NEW PC EXIT /PAPER TAPE READER SERVICE FOR TSS/8 UPTR, JMS I PTRCHK /DOES [S]HE OWN DEVICE? PTRDEV, DEVTBE /POINTS TO READER ENTRY IN DEVTBL TAD URCBI /CHECK FOR "RCB" TAD UUOCAL SNA CLA JMP URCB /IT IS! JMS I PTRIOT /ANALYZE IOT JMP URRS /READ A STRING PTRFL, JSPTR /READER FLAG JMP I PTRSKP /WE ALWAYS SKIP SNL CLA /RRB? UUOEXT /NO - MUST HAVE BEEN RFC - SO WHAT! DCA WS0 /SET READER'S BREAK MASK TO 0 DATFLD TAD I PTRDEV /ADDRESS OF DDB FETCH /FETCH A CHARACTER FROM READER BUFFER JMP PSTWT0 /NONE AVAILABLE - START READER DCA PTRCH /SAVE FOR NEXT RRB CDF TAD PTRACA /POINTS TO L2SA IOR /OR CHARACTER INTO L2SA PTRCH, 0 UUOEXT /EXIT TO USER PTRSKP, UUOEX2 URRS, DATFLD TAD I PTRDEV /GET DDB ADDRESS DCA CONDDB JMS I PSTRIN /TRANSFER STRING TO USER JMP PSTWT0 /INSUFFICIENT NUMBER OF CHARACTERS IN BUFFER UUOEXT URCB, DATFLD TAD I PTRDEV /CLEAR THE ENTIRE READER BUFFER JMS I PTRCLR UUOEXT PSTWT0, STA L2PTR1, DCA PTRSET /REMEMBER WHY WE ARE HERE CDF CIF /SELECT F0 AND INHIBIT INTERRUPTS TAD I PTRTIM /IS THE READER BUSY? SNA CLA RFC /START THE READER CLL STA RAL /AC=-2 DCA I PTRTIM /SET READER TIMER DCA I RCNTA /NO LIMIT UNTIL IT'S READ AT LEAST ONE BLOCK WORTH ISZ PTRSET /FROM UUO OR LEVEL 2? EXIT /LEVEL 2 - FINISHED STA TAD L2SV0 /BACK UP HIS PC FOR A REDO DCA L2SV0 TAD PTRFL UUOEXT /NOW WAIT FOR THE READER PTRSIZ, 0 DCA PTRSET /SAVE POINTER TO CHARACTER COUNT ISZ PTRSIZ /WE ALWAYS SUCCEED CDF CIF /NO INTERRUPTS WHILE WE CHECK THE READER'S STATUS TAD I PTRTIM SMA CLA /IS IT STILL RUNNING? JMP PTRSI2 /NO - JUST MAKE SURE THE FLAG IS SET TAD FRECNT /HOW'S THE SUPPLY OF FREE CORE? TAD C7770 SMA SZA CLA TAD PTRFUL /MINUS NUMBER ALLOWED DATFLD TAD I PTRSET /PLUS CURRENT CHARACTER COUNT CDF SMA STA /SHUT DOWN THE READER AFTER THE NEXT CHARACTER DCA I RCNTA TAD I RCNTA TAD C0100 SMA CLA PTRSI2, JMS PTRSET /SET THE READER FLAG IN STR1 JMP I PTRSIZ L2PTR, JMS PTRSET /WAKE HIM/HER UP - [S]HE'S HUNG TAD I PTRDEV /DDB? SNA EXIT /NO DCA AXS2 /YES - SAVE IT, WE'LL NEED THE JOB # FROM IT TAD AXS2 TAD C0004 DCA WS0 TAD I WS0 /IS IT EMPTY? SZA CLA EXIT /NO - SO IT ISN'T OFFICIALLY HUNG YET TAD I AXS2 /JOB OWNING PTR CDF ERROR /REPORT THE HUNG READER TO HIM/HER HUNGDV EXIT PTRSET, 0 DATFLD TAD PTRDEV /READER'S POSITION IN DEVTBL DCA CONDBA TAD PTRFL JMS I SETFLG /SET JSPTR IN STR1 JMP I PTRSET PTRCHK, DEVCHK PTRIOT, UKT1 PSTRIN, UKREAD PTRTIM, TIMPTR RCNTA, RCNT URCBI, -6017 PTRCLR, CLRBUF PTRFUL, -240