; UPDATE 6/30/72 ROS2.SYS ; UPDATE 6/27/72 ROS2.SYS ; UPDATE 6/22/72 ROS2.SYS ; UPDATE 6/21/72 ROS2.SYS ; UPDATE 5/5/72 ROS2.SYS ; UPDATE 5/2/72 ; ROS2.SYS ; UPDATE 4/29/72 ROS2.SYS ; UPDATE 4/21/72 ROS2.SYS ; UPDATE 4/17/72 ROS2.SYS ; UPDATE 4/14/72 ROS2.SYS ; UPDATE 4/13/72 ROS2.SYS ; UPDATE 4/12/72 ROS2.SYS ; ; UPDATE 27 27 JUN 1972 RETURN TO TSTACK CLEAR ; UPDATE 26 22 JUN 1972 FIX FIXES ; UPDATE 25 21 JUN 1972 FIX OVERLAY DISK FILE ; UPDATE 24 1 MAY 1972 CHANGE QIPL FOR ROSII ; UPDATE 23 25 APR 1972 FIX ADDRESS OF IFD TABLE ; UPDATE 22 21 APR 1972 FIX DSPT CHECK OFF V22 ; UPDATE 21 14 APR 1972 FIX DISCIO LIST OFF V21 ; UPDATE 20 12 APR 1972 ADD ROS II - QIPL'.CSECT), TASK ; UPDATE 6/27/72 TTYIO.P24 ; UPDATE 6/22/72 TTYIO.P23 ; UPDATE 3/10/72 TTYIO.P22 ; UPDATE 3/3/72 TTYIO.P21 ; UPDATE 2/17/72 TTYIO.P20 ; UPDATE 2/14/72 TTYIO.P19 ; UPDATE 1/11/72 TTYIO.P18 ; UPDATE 12/15/71 TTYIO.P17 ; UPDATE 12/13/71 TTYIO.P16 ; UPDATE 12/10/71 TTYIO.P15 ; UPDATE 12/7/71 TTYIO.P14 ; UPDATE 12/3/71  .TITLE PUSHR ;*********************************************************************** ; * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; UPDATE 4/10/72 ROS2.SYS ; UPDATE 4/10/72 ROS2.SYS ; UPDATE 4/5/72 ROS2.SYS ; UPDATE 3/31/72 ROS2.SYS ; UPDATE 3/23/72 ROS2.SYS ; UPDATE 3/17/72 ROS2.SYS ; UPDATE 2/24/72 ROS2.SYS ; UPDATE 2/16/72 ROS2.SYS ; UPDATE 1/12/72 ROS2.SYS ; UPDATE 1/11/72 ROS2.SYS ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = TABLES ; DISK FILE & CLEAN UP TASK TABLES. OFF V20 ; UPDATE 19 13 MAR 1972 ABORT, FRTSK OFF V19 ; UPDATE 18 8 MAR 1972 QUEU, QSVE, EXIT, FTSK OFF V18 ; UPDATE 17 15 FEB 1972 QTAB,EXIT,ABRT,FTSK,QSAVE OFF V17 ; UPDATE 16 19 JAN 1972 QTAB,QUEU,ABRT,FTSK,UNSP,QIPL OFF V16 ; UPDATE 15 18 JAN 1972 QUEUE OFF V15 ; UPDATE 1 TTYIO.P13 ; UPDATE 12/1/71 TTYIO.P12 ; UPDATE 11/23/71 TTYIO.P11 ; UPDATE 11/16/71 TTYIO.P10 ; UPDATE 11/10/71 TTYIO.P09 ; UPDATE 11/8/71 TTYIO.P08 ; UPDATE 11/3/71 TTYIO.P07 ; UPDATE 10/31/71 TTYIO.P06 ; UPDATE 10/26/71 TTYIO.P05 ; UPDATE 10/14/71 TTYIO.P04 ; UPDATE 10/7/71 TTYIO.P03 ; UPDATE 9/22/71 TTYIO.P02 .I * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;******************************* %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 PS = 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $CORAL = 0 ; CORE ALLOCATION ; =0 SOFTWARE ; =1 HARDWARE $SAVE = 104400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 10. ; NO. OF SOFTW4 17 DEC 1971 ABORT,DSPTCH,FRETSK,QSVE,EXIT,UNSP,QIPL OFF 14 ; UPDATE 13 14 DEC 1971 ABORT,QIPL OFF .V13 ; UPDATE 12 3 DEC 1971 QTAB,QUEU,QSVE,EXIT,ABRT,FTSK,UNSP,DSPT,QIPL V12 ; UPDATE 11 12 NOV 1971 EXIT,QIPL,QUEUE OFF QUEUE.V11 ; UPDATE 10 10 NOV 1971 EXIT,QIPL OFF QUEUE.V10 ; UPDATE 9 8 NOV 1971 DQUEU,QUEU,QSVE,EXIT,ABRT,UNSP OFF QUEUE.V9A ; UPDATE 8 8 NOV 197FG NTTYS ;ASSEMBLE TTYIO IF NTTYS .GT. 0 .TITLE TTYIO ;*********************************************************************** ; * ; T T Y O U T * ; * ; PROGRAM IDENTIFICATION. TTYOUT - TELETYPE OUTPUT SUBROUTINE: * ; CATALOG NUMBER **************************************** .DEF PUSHR ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-ARE PRIORITY LEVELS PRIBKG = NPRIOR ; PRIORITY OF BACKGROUND $BATCH = 1 ; BATCH OPTION .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 20 ; MAX # OF CORE TASKS IN SYSTEM NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY1 QUEUE,QSVE,SUSPN OFF QUEUE.V8A ; UPDATE 7 5 NOV 1971 QUEU,QSVE,SUSP,UNSP,DSPT OFF QUEUE.V7A ; UPDATE 6 5 NOV 1971 QUEUE,DSPT,QSVE OFF QUEUE.V6A ; UPDATE 5 4 NOV 1971 DSPT,EXIT,QSVE OFF QUEUE.V5A ; UPDATE 4 3 NOV 1971 QSVE,UNSP,DQUE,DSPT OFF QUEUE.V4A ; UPDATE 3 2 NOV 1971 QUEUE,ABRT,DQUE,UNSPND,DACT,QSVE OFF .V3A ; UPDATE 2 27 OCT 1971 QUEUE,DQUEU, * ; * ; PURPOSE. SUBROUTINE TTYOUT PROCESSES TELETYPE OUTPUT REQUESTS.* ; IT PROVIDES CONCURRENT OUTPUT TO MULTIPLE TELETYPE DEVICES. * ; TWO VERSIONS OF THE SUBROUTINE ARE INCLUDED; A "CORE ONLY" AND * ; A "DISK BUFFERED" VERSION. THE NUMBER OF TELETYPE DEVICES AND * ; SUBROUTINE VERSION MAY BE SPECIFIED AS CONDITIONAL ASSEMBLY * ; PARAMETERS DURING SYSTEM GENERATION. TELETYPE(SP) JMP (R5) ;RETURN .END  .TITLE POPR ;*********************************************************************** ; * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; SUSPND,DSPTCH,DACT - OFF QUEUE.V2A ; UPDATE 1 22 OCT 1971 QUEUE,QSAVE,DQUEU - OFF QUEUE.V1A .TITLE QUEUE ; THIS MODULE CONTAINS ALL THE QUEUEING ; ROUTINES. IT IS MADE UP OF THE ; FOLLOWING ELEMENTS: ; QTABLE ; QUEUE ; QSAVE & QSAVEI ; SUSPND  MOTORS ARE * ; TURNED OFF WHEN THEIR RESPECTIVE QUEUES BECOME EMPTY. SHOULD * ; A DETECTABLE TELETYPE MALFUNCTION OCCUR AND AN ALTERNATE * ; TELETYPE DEVICE IS DEFINED, OUTPUT IS ROUTED TO THE ALTERNATE * ; DEVICE. * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; TTYOUT IS:  * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;******************************** ; EXIT ; FRETSK ; ABORT ; DSPTCH ; UNSPND ; QIPL .PAGE ;*********************************************************************** ; * ; Q U E U E I N G T A B L E S * * ; * ; MOV #LIST,-(SP) ;PUSH LIST ADDR ONTO STACK * ; EMT TTYOUT ;CALL TTYOUT * ; * ; THE FORTRAN EQUIVALENT CALL IS: * ; * ; CALL TTYOUT (LIST)  TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 1 ; SYSTEM OVERLAY OPTION ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 140 ; MAX # OF OVERLAY TASKS IN SYSTEM .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK*************************************** .DEF POPR ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3  ; * ; PROGRAM IDENTIFICATION. QTABLE * ; * ; PURPOSE. THIS DATA PROGRAM CONTAINS ALL TABLES, DATA, AND * ; SYSTEM EQUATE CARDS REQUIRED FOR THE SOFTWARE QUEUEING AND * ; TASK CONTROL SUBROUTINES. EACH PARAMETER IS DEFINED IN THE * ; COMMENTS FIELD.  * ; * ; LIST IS THE ADDRESS OF A TABLE OF I/O INFORMATION * ; ASSOCIATED WITH THE REQUEST * ; * ; * ; PROGRAMMER: 51 * ; DATE: +MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXXXXXX ;NTASK MUST BE <= MXTASK .ENDC .IFNZ OVRLAY ; ; ! MOV (SP)+,R4 RTS R5 ;RETURN .END " * ; * ; USAGE. EACH TABLE, QUEUE AND DATA ITEM IS DEFINED IN A .DEF * ; ASSEMBLER DIRECTIVE. OTHER PROGRAMS MAY REFER TO THESE * ; ITEMS BY INCLUDING THEM IN A .REF ASSEMBLER DIRECTIVE. THE * ; EQUATE PARAMETERS, HOWEVER, ARE NOT ACCESSIBLE TO OTHER * ; PROGRAMS. * ; # * ; REVISION: * ; * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;*********************************************************************** ; * ; $STATE SIZE OF DYNAMIC CORE STORAGE IN ROS ; $DYNSZ = 54000 ; RESERVE DYNAMIC CORE POOL .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = -1 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = -1 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 & * ; PROGRAMMER 55 * ; DATE 07.21.71 * ; REVISION * ; * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;***********************************************' T T Y I N * ; * ; PROGRAM IDENTIFICATION. TTYIN - TELETYPE INPUT SUBROUTINE: * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE TTYIN PROCESSES TELETYPE INPUT REQUESTS. * ; IT PROVIDES FOR CONCURRENT INPUT FROM MULTIPLE TELETYPE UNITS. * ; THE IN( ; PRIORITY PROPERTY LEVEL 3 PRIP04 = 1 ; PRIORITY PROPERTY LEVEL 4 PRIP05 = -1 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = -1 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = -1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = -1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = -1 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; ); UPDATE 3 17 DEC 1971 OFF IDTASK.004 ; UPDATE 2 14 DEC 1971 OFF IDTASK.003 ; UPDATE 1 8 DEC 71 OFF IDTASK.002 .TITLE IDTASK ; QUEUE =1. ; SUSPND =2. ; UNSPND =3. ; EXIT =4. ; FRETSK =5. ; ABORT =6. ; TTYOUT =11. ; RES =50. ; SETS SIZE OF TASK STACKS .P************************* ; .PAGE .DEF ACTIVE,TASKS,LEVELS,FIRST,LAST ; QUEU .DEF HEADER,TSTAT,IOSTAT,TPRTY,STACK ; QUEU .DEF PPTAB,$CTASK,$PRIOR ; QTAB .IFNZ OVRLAY ; QTAB .DEF BSIZE,IFD ; QTAB .ENDC QT+PUT STREAM FROM A UNIT IS TERMINATED WHEN THE END OF * ; MESSAGE CHARACTER (EOMCH) IS DEPRESSED. THE TELETYPE WILL * ; CARRIAGE RETURN AND LINE FEED WHEN THE END OF LINE CHARACTER * ; (EOLCH) IS DEPRESSED. NEITHER OF THESE CHARACTERS IS INCLUDED * ; IN THE DATA BUFFER CHARACTER COUNT. THE NUMBER OF TELETYPE * ; UNITS AND THE CHARACTERS USED FOR EOMCH AND EOLCH ARE SPECIFIED* ; DURING SYSTEM GENERATION. THE ROUTINE ALLOWS THE OPERATOR TO * ; ,PRIORITY PROPERTY LEVEL 11 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .IFNZ OVRLAY ; .IFL 16.-NPRIOR XXXXXXXX TABLES AND PARAMETERS CURRENTLY CODED XXXXXXXX FOR -AGE .DEF IDTASK ; .REF HEADER,TPRTY,TASKS,TSTAT; IDTASK =. ; SET UP HEADER AND TPRTY FOR 10 TASKS MOV #1,R2 ; PUT A 1 IN HERE FOR USE BELOW MOV #NOTASK,R0 ; GET NUMBER OF TASKS TO DOO MOV #TASKS,R1 ; UPDATE IF NECESSARY THE CURRENT MAX CMP R0,(R1) ; TASK NUMBER IN THE SYSTEM. BLOS IDT01 ; MOV R0,(R1) ; IDT01: CMP (R.AB ; ; $CTASK AND $PRIOR CONTAIN THE TASK NUMBER AND PRIOITY LEVEL OF THE ; CURRENTLY ACTIVE TASK (WHOSE PROGRAM HEADER BEGINS AT THE ADDRESS ; IN ACTIVE).IF NO TASK IS ACTIVE, $CTASK AND $PRIOR WILL CONTAIN THE ; TASK NUMBER AND PRIORITY LEVEL OF THE LAST TASK ACTIVE, IF ANY. ; QUEU $CTASK: .WORD 0 ; CURRENTLY ACTIVE TASK'S NUMBER. QUEU $PRIOR: .WORD 0 ; SAME TASK'S PRIORITY. / DELETE THE LAST CHARACTER INPUT BY DEPRESSING THE RUBOUT KEY; * ; ALSO, HE MAY RESTART INPUT BY DEPRESSING THE MESSAGE RESTART * ; KEY (CONTROL U). * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; TTYIN IS: * ; *0MAXIMUM OF 16 PRIORITY LEVEL .ENDC ; ; THE FOLLOWING SYSGEN PARAMETERS SPECIFY THE NUMBER OF ; ENTRY'S IN A PRIORITY'S QPART TABLE. IF ZERO, THAT ; PRIORITY WILL NOT BE ALLOWED OVERLAY TASKS. A MAXIMUM ; OF 127 ENTRYS PER QPART WILL BE ALLOWED. ; ****NOTE: BE SURE PRIORITIES GREATER THAN NPRIOR HAVE ; TABLE SIZES OF 0 ; NEQP01 = 10. ; NO. OF ENTRYS QPART LEVEL 1 NEQP02 = 10. ; NO. OF ENTRYS QPART 11),#TASMAX ; TO MANY TASKS IN SYSTEM? BLE IDT05 ; BRANCH IF OK. HALT ; BAD BAD IDT05: MOV #NOTASK+NOTASK,R1 ; IDT10: MOV TASKAD-2(R1),HEADER(R1) ; SET HEADER ADDRESS IN TABLE MOV R2,@HEADER(R1) ; INSURE THAT ALL THREAD WORDS ARE 1 MOV R2,@LISTAD(R1) ; MAKE SURE ALL I/O THREAD WORDS OK. MOVB TASKPY-1(R0),TPRTY(R0) ; SET TASK'S PRIORITY LEVEL CLRB TSTAT(R0) ; SET TASKS AS2 QUEU ACTIVE: .WORD 0 ;CONTAINS PROGRAM HEADER ADDRESS OF THE ; ;CURRENTLY EXECUTING TASK; 0=NONE ACTIV LEVELS: .WORD NPRIOR ;NUMBER OF PRIORITY LEVELS IN SYSTEM ; QUEU STACK: .WORD 0 ; ADDRESS OF SYSTEM STACK POINTER QUEU ; QUEU ; 3 ; MOV #LIST,-(SP) :PUSH I/O LIST ADDRESS ON STACK * ; EMT TTYIN ;CALL TTYIN * ; * ; THE FORTRAN EQUIVALENT CALL IS: * ; * ; CALL TTYIN (LIST) * ; 4LEVEL 2 NEQP03 = 10. ; NO. OF ENTRYS QPART LEVEL 3 NEQP04 = 10. ; NO. OF ENTRYS QPART LEVEL 4 NEQP05 = 10. ; NO. OF ENTRYS QPART LEVEL 5 NEQP06 = 10. ; NO. OF ENTRYS QPART LEVEL 6 NEQP07 = 10. ; NO. OF ENTRYS QPART LEVEL 7 NEQP08 = 10. ; NO. OF ENTRYS QPART LEVEL 8 NEQP09 = 10. ; NO. OF ENTRYS QPART LEVEL 9 NEQP10 = 10. ; NO. OF5 READY TST -(R1) ; DECREMENT WORD POINTER DEC R0 ; DECREMENT BYTE POINTER CMP R0,R2 ; IS INDEX DOWN TO 1 YET? WE DON'T DO IT BNE IDT10 ; LOOP FOR MORE RTS PC ; GO HOME TASKAD: .WORD 0 ; TASK 1 NOT HERE .WORD HEAD2 ; .WORD HEAD3 ; .WORD HEAD4 ; .WORD HEAD5 ; .WORD HEAD6 QTAB ; QTAB ; THE TABLES 'PPTAB' (BYTE), 'LAST' (WORD), AND 'FIRST' (WORD) ALL HAVE QTAB ; A MAXIMUM NUMBER OF SYSGENABLE ENTRIES ABOVE WHICH ADDITIONAL CODE QTAB ; MUST BE ADDED BEFORE THEY WILL PROPERLY ASSEMBLY. TO INSURE THIS, QTAB ; THE FOLLOWING CHECK IS PROVIDED. THE NUMBER SUBTRACTED FROM 'NPRIOR' QTAB ; IS THE VALUE ABOVE WHICH NEW CODE MUST BE ADDED. QTAB ; 7 * ; LIST IS THE ADDRESS OF A TABLE OF I/O INFORMATION * ; ASSOCIATED WITH THE REQUEST. * ; * ; * ; PROGRAMMER: 51 * ; DATE: * ; REVISION: G ENTRYS QPART LEVEL 10 NEQP11 = 0. ; NO. OF ENTRYS QPART LEVEL 11 NEQP12 = 0. ; NO. OF ENTRYS QPART LEVEL 12 NEQP13 = 0. ; NO. OF ENTRYS QPART LEVEL 13 NEQP14 = 0. ; NO. OF ENTRYS QPART LEVEL 14 NEQP15 = 0. ; NO. OF ENTRYS QPART LEVEL 15 NEQP16 = 0. ; NO. OF ENTRYS QPART LEVEL 16 ; ; ; THE FOLLOWING ASSIGNS THE START BLOCK IN THE CORE POOL ; FOR A SPECH6 ; .WORD HEAD7 ; .WORD HEAD8 ; .WORD HEAD9 ; .WORD HEAD10 ; .WORD HEAD11 ; .WORD HEAD12 ; LISTAD: .WORD 0 ; LIST FOR TASK 1 .WORD LIST2 ; .WORD LIST3 ; .WORD LIST4 ; .WORD LIST5 ; .WORD LIST6 ; .WORD LIST7 ; .WE QTAB .IFG NPRIOR-16. ; CURRENT MAXIMUM NUMBER OF PRIORITIES QTAB XXXXXX QTAB .ENDC QTAB ; QTAB ; THE FOLLOWING TABLE, PPTAB, IS USED TO CONTAIN THE QTAB ; DESCRIPTORS OF EACH SOFTWARE PRIORITY LEVEL. PPTF * ; * ; G U L F E L E C T R O N I C S Y S T E M S * ; * ;*********************************************************************** ; ; ; EXTERNAL REFERENCES AND PROGRAM ENTRY POINTS ; .REF QUEUE,QSAVEI,UNSPND,RESTOR,QTIME,DQTIME,DSPTCH .REF ACTIVE,IOSTAT,PUSHR,POPR,ERRTYP .REF LOG""DDDDDDD """"""""""""""""""""""""233333333333333333333333333333333333333@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL""ADDB CrȻz@m9:"i[g4h5hfph5!7: 5%+5+$Dwwwwwwwwww8IAB IS A QTAB ; BYTE TABLE AND CONTAINS 1 ENTRY FOR EACH LEVEL. QTAB ; THE PROPERTY OF EACH LEVEL IS: QTAB ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) QTAB ; 0 = FIXED TASKS (CORE OR OVERLAY) QTAB ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) QTAB ; QTAB PPTAB = .-1 JMAX,PHYDEV,ALTDEV .IFG NDISCS .REF DISCIO,PFRITE .ENDC .IFNZ OVRLAY .REF RELTSK .ENDC .DEF TTYOUT,TTYIN,TTINIT .DEF PRTINT,KBDINT .DEF TTICSR,TTIDBR ;USED BY POWER FAIL ROUTINE ; .CSECT ; ; ; TTYIO PARAMETERS AND SYMBOLS ; .IFG NTTYS-8. XXXXXX ;CREATE ASSY ERROR IF NTTYS GT 8. .ENDC .IFZ NDISCS ;IF THERE ARE ZEROKIFIC PRIORITY. ; $SB001 = 0. $SB002 = 4. $SB003 = 4. $SB004 = 4. $SB005 = 4. $SB006 = 4. $SB007 = 12. $SB008 = 12. $SB009 = 12. $SB010 = 12. $SB011 = 0. $SB012 = 0. $SB013 = 0. $SB014 = 0. $SB015 = 0. $SB016 = 0. ; $NBLKS = $DYNSZ/2-1/256.+1 ; NO. OF BLOCKS IN DYNAMIC CORE ; ; THE FOLLOWING ASSIGNS STORAGE BLOCK SIZES FOR EACH PRIORITY. ; LORD LIST8 ; .WORD LIST9 ; .WORD LIST10 ; .WORD LIST10 ; LIST 11 AND 12 DON'T EXIST .WORD LIST10 ; TASKPY: .BYTE 0 ; .BYTE 1 ; .BYTE 2 ; .BYTE 2 ; .BYTE 2 ; .BYTE 2 ; .BYTE 1 ; .BYTE 3 ; .BYTE 3 M ; TAKE CARE OF LEVEL 0 QTAB .BYTE PRIP01,PRIP02 ; ADD MORE CODE IF NPRIOR > 16 QTAB .BYTE PRIP03,PRIP04 ; QTAB .BYTE PRIP05,PRIP06 ; QTAB .BYTE PRIP07,PRIP08 ; QTAB .BYTE PRIP09,PRIP10 ; QTAB .BYTE PRIP11,PRIP12 ; N DISCS IN SYSTEM, ;DISALLOW MESSAGE BUFFERING MSGBUF = 0 .ENDC .IFL 1-MSGBUF XXXXXX ;CREATE ASSY ERROR IF MSGBUF NOT 0 OR 1 .ENDC TFOPTN = 40 ;TIMER MODULE FLAG OPTION TJOPTN = 20 ;TIMER MODULE JSR TO TIMEOUT COMPLETE ;ROUTINE OPTION SAVE = $SAVE ;INSTRUCTION FOR CALL TO SAVE ROUTINE .IFL 1-ARG O A) IF DYNAMIC-CONTAINS THE LARGEST ALLOWABLE BSIZE ; VALUE ; ; B) IF FIXED OR TIME SLICED-CONTAINS ASSIGNED BSIZE ; VALUE FOR THAT PRIORITY ; .IFL PRIP01 $PS001 = $NBLKS-$SB001 .ENDC .IFGE PRIP01 $PS001 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB001-$PS001 XXXXXXXX ; PRI 1 TOO LARGE .ENDC .ENDC .IFL PRIP02 $PS0P ; .BYTE 3 ; .BYTE 7. ; .BYTE 8. ; NOTASK =.-TASKPY ; NUMBER OF TASK TO SET UP FOR .EVEN .PAGE .CSECT TASK2 ; HEAD2 =. ; .WORD 1 ; THREAD WORD .WORD EN2 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES Q QTAB .BYTE PRIP13,PRIP14 ; QTAB .BYTE PRIP15,PRIP16 ; QTAB .=PPTAB+1+NPRIOR ; GET RID OF ENTRIES NOT NEEDED QTAB .EVEN QTAB ; QTAB ; ; THE FOLLOWING TABLES (FIRST AND LAST) CONTAIN THE PRIORITY ; QUEUE THREAD INFORMATIONR XXXXXX ;CREATE ASSY ERROR IF ARG NOT 0 OR 1 .ENDC TASKNO = 13.+ARG+ARG ;LOCN OF TASK NO IN A TASK HEADER .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ; DEFINITION OF FILE ID'S FOR DISC BUFFERED MESSAGES ; FIDN0 = 20. ;FILE FOR NORMAL MESSAGES, UNIT 0 FIDP0 = 21. ;FILE FOR PRIORITY MESSAGES, UNIT 0 FIDN1 = 22. ;FILE FOR NORMAL MESSAGES, UNIT 1 FIDP1 = 23. S02 = $NBLKS-$SB002 .ENDC .IFGE PRIP02 $PS002 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB002-$PS002 XXXXXXXX ; PRI 2 TOO LARGE .ENDC .ENDC .IFL PRIP03 $PS003 = $NBLKS-$SB003 .ENDC .IFGE PRIP03 $PS003 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB003-$PS003 XXXXXXXX ; PRI 3 TOO LARGE T ; ST SIZE .BYTE 1 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 2 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST2 =. ; .WORD 1 ; TREAD WORD .BYTE 0 U. WORD 1 CORRESPONDS TO PRIORITY ; LEVEL 1 (HIGHEST PRIORITY); WORD 2 CORRESPONDS TO PRIORITY ; LEVEL 2 (SECOND HIGHEST PRIORITY); ETC. THE FIRST WORD OF EACH ; TABLE IS A DUMMY TO ALLOW FOR THE NONEXISTENT PRIORITY LEVEL 0. ; ; FIRST POINTS TO THE PROGRAM HEADER OF THE FIRST TASK IN THE ; ASSOCIATED PRIORITY LEVEL THREAD; THE FIRST WORD OF THAT ; PROGRAM HEADER POINTS TO THE NEXT TASK IN THE THREAD; AND ; SO ON. A ZERO INDICATES THE END OF THE QUV ;FILE FOR PRIORITY MESSAGES, UNIT 1 FIDN2 = 24. ;FILE FOR NORMAL MESSAGES, UNIT 2 FIDP2 = 25. ;FILE FOR PRIORITY MESSAGES, UNIT 2 FIDN3 = 26. ;FILE FOR NORMAL MESSAGES, UNIT 3 FIDP3 = 27. ;FILE FOR PRIORITY MESSAGES, UNIT 3 FIDN4 = 28. ;FILE FOR NORMAL MESSAGES, UNIT 4 FIDP4 = 29. ;FILE FOR PRIORITY MESSAGES, UNIT 4 FIDN5 = 30. ;FILE FOR NORMAL MESSAGESW .ENDC .ENDC .IFL PRIP04 $PS004 = $NBLKS-$SB004 .ENDC .IFGE PRIP04 $PS004 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB004-$PS004 XXXXXXXX ; PRI 4 TOO LARGE .ENDC .ENDC .IFL PRIP05 $PS005 = $NBLKS-$SB005 .ENDC .IFGE PRIP05 $PS005 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB005-$PS005 X ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA2 ; BUFFER ADD DATA2 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII YEUE, AND THE 'LAST' ; TABLE CONTAINS THIS ADDRESS. ; LAST=. .WORD 0 ; BUMP LOCATION COUNTER OVER LAST(0) QTAB .WORD FIRST+2. ; INSERT MORE VALUES IF NPRIOR > 16. QUEU .WORD FIRST+4 .WORD FIRST+6 .WORD FIRST+8. .WORD FIRST+10. .WORD FIRST+12. .WORD FIRST+14. .WORD FIRST+16. .WORD FIRST+18. .WORD FIRST+20. .WORD FIRST+22. Z, UNIT 5 FIDP5 = 31. ;FILE FOR PRIORITY MESSAGES, UNIT 5 FIDN6 = 32. ;FILE FOR NORMAL MESSAGES, UNIT 6 FIDP6 = 33. ;FILE FOR PRIORITY MESSAGES, UNIT 6 FIDN7 = 34. ;FILE FOR NORMAL MESSAGES, UNIT 7 FIDP7 = 35. ;FILE FOR PRIORITY MESSAGES, UNIT 7 ; ; ; OUTPUT BUFFER SIZE DEFINITION FOR MESSAGE BUFFERED DISC SYSTEM ; OBUFSZ = 128. ;MINIMUM SIZE OUTPUT BUFFER(1 SECT/MSG) DNWRD[ XXXXXXXX ; PRI 5 TOO LARGE .ENDC .ENDC .IFL PRIP06 $PS006 = $NBLKS-$SB006 .ENDC .IFGE PRIP06 $PS006 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB006-$PS006 XXXXXXXX ; PRI 6 TOO LARGE .ENDC .ENDC .IFL PRIP07 $PS007 = $NBLKS-$SB007 .ENDC .IFGE PRIP07 $PS007 = 4. ; ASSIGN 4 BLOCKS - \/# 2/ ; .BYTE 40,15 ; ; EN2 =. ; MOV #LIST2,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE EMT EXIT ; .PAGE .CSECT TASK3 ; HEAD3 =. ; .WORD 1 ; THREAD WORD .WORD EN3 ; ENTRY POUNT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME].WORD FIRST+24. .WORD FIRST+26. .WORD FIRST+28. .WORD FIRST+30. .WORD FIRST+32. .=LAST+NPRIOR+NPRIOR+2 ;GET RID OF ZEROES XE DON'T ; NEED FIRST=. .WORD 0 ; BUMP LOCATION COUNTER OVER FIRST(0). .WORD 0,0,0,0,0,0,0,0 ;ADD MORE ZEROES IF NPRIOR > 16 .WORD 0,0,0,0,0,0,0,0 .=FIRST+NPRIOR+NPRIOR+2 ;GET RID OF ZEROES WE DON'T ; ^S = 64. ;NO. OF WORDS IN DISK TRANSFERS .IFGE DBUFSZ-2 ;IS SECTOR COUNT 2? OBUFSZ = OBUFSZ+128. ;YES, ADD 64 WORDS DNWRDS = DNWRDS+64. .ENDC .IFGE DBUFSZ-3 ;IS SECTOR COUNT 3? OBUFSZ = OBUFSZ+128. ;YES, ADD 64 WORDS DNWRDS = DNWRDS+64. .ENDC .IFG DBUFSZ-3 ;IS SECTOR COUNT GT 3? XXXXXX ;YES, CREATE ASSY ERROR, DBUFSZ GT 3!! .ENDC OMSGSZ = _1024 WORDS .IFL $NBLKS-$SB007-$PS007 XXXXXXXX ; PRI 7 TOO LARGE .ENDC .ENDC .IFL PRIP08 $PS008 = $NBLKS-$SB008 .ENDC .IFGE PRIP08 $PS008 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB008-$PS008 XXXXXXXX ; PRI 8 TOO LARGE .ENDC .ENDC .IFL PRIP09 $PS009 = $NBLKS-$SB009 .ENDC .IFGE PRIP09` .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 3 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST3 =. ; .WORD 1 ; a ;NEED ; ; THE FOLLOWING TABLE IS THE SYSTEM TASK TABLE. THIS TABLE IS ; BROKEN DOWN INTO 6 SUB-TABLES. THAT WAY THE TASK NUMBER CAN ; BE USED AS AN INDEX INTO THE APPROPRIATE SUB-TABLE. THESE ; TABLES ARE: ; ; 1. HEADER - CONTAINS THE ADDRESS OF PROGRAM HEADER FOR ; EACH TASK (WORD TABLE) ; 2. TSTAT - CONTAINS THE TASK STATUS (BYTE TABLE) ; -3= ABORT REQUESTED - PENDING I/O COMPLETION-OVb OBUFSZ-16. ;OUTPUT MSG SIZE -- MAXIMUM NO OF CHAR ; ALLOWED IN OUTPUT ; MESSAGE (MSG BUFFER ; SYSTEM ONLY) .ENDC ; ; ; MISCELLANEOUS SYMBOLS ; CR = 15 ;CARRIAGE RETURN LF = 12 ;LINE FEED RO = 177 ;RUBOUT ; ; ; ERROR CODES ; ERRQL = 21.c $PS009 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB009-$PS009 XXXXXXXX ; PRI 9 TOO LARGE .ENDC .ENDC .IFL PRIP10 $PS010 = $NBLKS-$SB010 .ENDC .IFGE PRIP10 $PS010 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB010-$PS010 XXXXXXXX ; PRI 10 TOO LARGE .ENDC .ENDC .IFL PRIP11 $PS011 = dTREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA3 ; BUFFER ADD DATA3 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK eERLAY QTAB ; -2= FREE REQUESTED - PENDING I/O COMPLETION-OVERLAY QTAB ; -1= EXIT REQUESTED - PENDING I/O COMPLETION-OVERLAY QTAB ; 0 = QUIESCENT (INACTIVE) ; 1 = QUEUING IN PROGRESS. ; 2 = QUEUED ; 3 = ACTIVE ; 4 = SUSPENDED - VOLUNTARY ; 5 = SUSPENDED - INVOLUNTARY ; 6 = DISABLED ; 7 = ABORTED ; f ;LIST NOT QUEUEABLE, THREAD WORD .NE. 1 ERRLDN = 22. ;INVALID LOGICAL DEVICE NUMBER IN LIST ERRPDT = 23. ;INVALID PHYSICAL DEVICE TYPE IN LIST ERRET = 24. ;INVALID EXIT TYPE IN LIST ERRLEV = 25. ;INVALID PRIORITY LEVEL IN LIST ERRMSZ = 26. ;MESSAGE SIZE TOO LARGE ERROTO = 27. ;OUTPUT/ECHO TIMEOUT; ALTERNATE DEVICE ;SELECTED IF AVAILABLE g$NBLKS-$SB011 .ENDC .IFGE PRIP11 $PS011 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB011-$PS011 XXXXXXXX ; PRI 11 TOO LARGE .ENDC .ENDC .IFL PRIP12 $PS012 = $NBLKS-$SB012 .ENDC .IFGE PRIP12 $PS012 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB012-$PS012 XXXXXXXX ; PRI 12 TOO LARGE .ENDC h / ; .ASCII /# 3/ ; .BYTE 40,15 ; ; EN3 =. ; MOV #LIST3,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC i8 = REQUEST PENDING WITH DQOVLY (RPOM) QTAB ; 9 = QUEUED IN RPOM BUT NOT IN ROS. QTAB ; 3. IOSTAT - CONTAINS THE TASK'S I/O STATUS (BYTE TABLE): ; 0 = NO I/O PENDING ; N = I/O IN PROGRESS (N = 1,2,...) ; 4. TPRTY - TASK SOFTWARE PRIORITY LEVEL (BYTE TABLE). ; 5. BSIZE - NUMBER OF CORE SEGMENTS REQUESTED (BYTE) QTAB ; 6. IFD - CONTAINS INDEX INTO FILE DIRECTORY IF BIT 15=0; j ERRITO = 28. ;INPUT/OPERATOR RESPONSE TIMEOUT; ;ALTERNATE OPERATOR SHOULD BE SELECTED, ;REQUEST IS DEQUEUED ; ; ; SYSGEN TTY INTERRUPT VECTOR ADDRESSES, CONTROL STATUS REGISTER ; ADDRESSES AND DATA BUFFER ADDRESSES ; TT0IIV = 60 ;PHYSICAL UNIT 0 INTPUT INTERRUPT VECTOR TT0ICS = 177560 ;PHYSICAL UNIT 0 INPUT CNTRL STATUS REG TT0IDB = 177562 ;PHYSICALk .ENDC .IFL PRIP13 $PS013 = $NBLKS-$SB013 .ENDC .IFGE PRIP13 $PS013 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB013-$PS013 XXXXXXXX ; PRI 13 TOO LARGE .ENDC .ENDC .IFL PRIP14 $PS014 = $NBLKS-$SB014 .ENDC .IFGE PRIP14 $PS014 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB014-$PS014 XXXXXXXXl CLR -(SP) ; EMT QUEUE ; TST (SP)+ ; EMT EXIT ; .PAGE .CSECT TASK4 ; HEAD4 =. ; .WORD 1 ; THREAD WORD .WORD EN4 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 m; OTHERWISE THE FILE ID. USED BY THE OVERLAY MONITOR. ; (WORD TABLE). ; ; SINCE TASK 0 DOES NOT EXIST, ALL TASK TABLES ARE OFFSET QTAB ; BACKWARDS TO AVOID ANY WASTED MEMORY. SIMILARLY, SINCE THE TWO QTAB ; OVERLAY TASK TABLES CONTAIN INFORMATION ONLY FOR OVERLAY TASKS QTAB ; (TASKS WITH A TASK NUMBER > MXTASK) THEY ARE ALSO OFFSET QTAB ; BACKWARDS BY MXTASK. QTAB ; n UNIT 0 INPUT DATA BUFFER REG TT0OIV = 64 ;PHYSICAL UNIT 0 OUTPUT INTERRUPT VECTOR TT0OCS = 177564 ;PHYSICAL UNIT 0 OUTPUT CNTRL STATUS REG TT0ODB = 177566 ;PHYSICAL UNIT 0 OUTPUT DATA BUFFER ; TT1IIV = 340 ;UNIT 1 ADDRESSES TT1ICS = 160200 TT1IDB = 160202 TT1OIV = 344 TT1OCS = 160204 TT1ODB = 160206 ; TT2IIV = 350 ;UNIT 2 ADDRESSES TT2ICS = 160210 TT2IDB = o ; PRI 14 TOO LARGE .ENDC .ENDC .IFL PRIP15 $PS015 = $NBLKS-$SB015 .ENDC .IFGE PRIP15 $PS015 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS .IFL $NBLKS-$SB015-$PS015 XXXXXXXX ; PRI 15 TOO LARGE .ENDC .ENDC .IFL PRIP16 $PS016 = $NBLKS-$SB016 .ENDC .IFGE PRIP16 $PS016 = 4. ; ASSIGN 4 BLOCKS - 1024 WORDS p; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 4 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST4 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 q QTAB ; THE FOLLOWING I/O LIST IS USED IFF WHEN OVERLAY TASKS EXISTS. QTAB ; IT PROVIDES FOR THE MAINTENANCE OF A DISK COPY OF THE TASK QTAB ; TABLES, THEREBY PERMITTING RECOVERY AFTER A SHUTDOWN. THE QTAB ; FUNCTION CAN BE ASSUMED TO BE A WRITE(1) ' ANY USER USING A QTAB ; READ(0) WILL RESET THE FUNCTION TO A WRITE. QTAB ; r 160212 TT2OIV = 354 TT2OCS = 160214 TT2ODB = 160216 ; TT3IIV = 360 ;UNIT 3 ADDRESSES TT3ICS = 160220 TT3IDB = 160222 TT3OIV = 364 TT3OCS = 160224 TT3ODB = 160226 ; TT4IIV = 370 ;UNIT 4 ADDRESSES TT4ICS = 160230 TT4IDB = 160232 TT4OIV = 374 TT4OCS = 160234 TT4ODB = 160236 ; TT5IIV = 400 ;UNIT 5 ADDRESSES TT5ICS = 160240s .IFL $NBLKS-$SB016-$PS016 XXXXXXXX ; PRI 16 TOO LARGE .ENDC .ENDC ; ; .ENDC ; MATCH FOR .IFNZ OVRLAY ; ; ROS SYSTEM TASK NUMBERS ; ; $INPNO = MXTASK+1. ; INPUT $CPTNO = MXTASK+2. ; COMPRS $INITD = 3. ; DISC INITIALIZER $FLTNO = MXTASK+4. ; FILE LIST $RLDNO = MXTASK+5. ; ROS LOADER $RASNO = MXTASK+6. ; ROS ASSEMBLER t ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA4 ; BUFFER ADD DATA4 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 4/ ; .BYTE 40,15 u QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS QTAB .DEF $TKFLS,$TKFLF ; EXTERNAL LABELS FOR OTHERS QTAB .REF $TKFLN ; EXTERNAL REFERENCE FOR ME. QTAB $TKFLS: .WORD 1 ; THREAD WORD QTAB .BYTE 1,1 ; DEVICE CODE, EXIT TYPE QTAB .WORD 0 ; NO EXIT ROUTINE QTAB .BYTv TT5IDB = 160242 TT5OIV = 404 TT5OCS = 160244 TT5ODB = 160246 ; TT6IIV = 410 ;UNIT 6 ADDRESSES TT6ICS = 160250 TT6IDB = 160252 TT6OIV = 414 TT6OCS = 160254 TT6ODB = 160256 ; TT7IIV = 420 ;UNIT 7 ADDRESSES TT7ICS = 160260 TT7IDB = 160262 TT7OIV = 424 TT7OCS = 160264 TT7ODB = 160266 ; ; ; SYMBOLIC TABLE AND BUFFER OFFSETS ; ; ; OFFwTASK NUMBER $UTLNO = MXTASK+7. ; ROS UTILITY TASK $TKCNO = MXTASK+8. ; TASK C??? ; .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 x ; ; EN4 =. ; MOV #LIST4,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC MOV #1,-(SP) ; EMT QUEUE ; yE 0 ; NO ERROR TASK QTAB .BYTE 1 ; DISK PRIORITY QTAB .WORD 0,0 ; ERROR WORD, RESERVED FOR DISCIO QTAB .WORD TKFLBF ; ADDRESS OF BUFFER FOR TRANSFER QTAB TKFLBF: .WORD NDISCS+4 ; FILE ID NUMBER QTAB .BYTE 0 ; USE SPECIFIED SECTOR AND WORD COUNT QTAB $TKFLF: .BYTE 3 ; I/O FUNCTION-WRITE WzSETS IN I/O REQUEST LIST ; DEVICE = 2 ;LOGICAL DEVICE NO. TYPE = 3 ;EXIT TYPE EXIT = 4 ;I/O COMPLETE ROUTINE (EXIT 3 ONLY) ERRTSK = 6 ;TASK NO. OF ERROR PROGRAM LEVEL = 7 ;PRIORITY LEVEL OF I/O REQUEST ERROR = 10 ;ERROR CODE WORD SYSTEM = 12 ;BYTE 0 CONTAINS TASK NO. ACTIVE WHEN ;CALLED. BYTE 1 CONTAINS TTY PHYSICA{ ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX |TST (SP)+ ; MOV #2,-(SP) ; EMT ABORT ; BR EN4 ; .PAGE .CSECT TASK5 ; HEAD5 =. ; .WORD 1 ; THREAD WORD .WORD EN5 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIO}ITH WRITE CHECK QTAB .WORD 0,0,0 ; RESERVED QTAB .WORD 0 ; RELATIVE START SECTOR QTAB .WORD $TKFLN ; NUMBER OF WORDS TO TRANSFER QTAB .ENDC QTAB ; QTAB ; QTAB TASKS: .WORD NL~L ;UNIT NO. DATA = 14 ;ADDRESS OF USER BUFFER ; .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ; OFFSETS IN DISC WRITE BUFFER AND OUTPUT BUFFERS ; SCFLAG = 2 ;SECTOR FLAG INOUT = 3 ;READ/WRITE FLAG RLSECT = 12 ;RELATIVE SECTOR ADDRESS NWORD = 14 ;NO. OF WORDS TO TRANSFER TTRLST = 16 ;1ST WORD OF TTY REQUES ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; XXXXXXXX ; .ENDC ; .IFL RGSAVE ; RTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 5 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST5 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 TASK ; LARGEST TASK NUMBER CURRENTLY IN SYSTEQTAB ; QTAB ; QTAB HEADER =.-2 ; TASK HEADER ADDRESS (THREAD WORDS). QTAB .=.+TASMAX+TASMAX ; TABLE QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAY TASKST LIST .ENDC ; ; ; OFFSETS IN USER BUFFERS ; CHCNT = 2 ;CHAR COUNT MSGDAT = 4 ;BEGINNING OF DATA ; ; ; OFFSETS IN TIMER MODULES ; TCNTR = 4 ;TIMER COUNTER ; ; .IFDF CHKOUT ;****** DELETE ASECT FOR CHECKOUT ****** .ASECT ; ; ; INTERRUPT VECTORS ; .IFGE NTTYS-1 ;IS NO. TTYS GE 1? . = TT0IIV ;YES, SETUP UNIT 0 INPUT VECTOR XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 3 ; THREE ABORT MESSAGE BUFFERS ABRT .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ABRT .ENDC ; ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA5 ; BUFFER ADD DATA5 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 5/ ; .BYTE 40,15 ; QTAB IFD =.-2-MXTASK-MXTASK ; TASK FILE DIRECTORY NUMBER QTAB .=.+MAXOVR+MAXOVR ; HERE SINCE IT IS A FULL WORD TABLE QTAB ; QTAB .ENDC ; QTAB TSTAT =.-1 ; TASK STATUS TABLE QTAB .=.+TASMAX ; QTAB ; .WORD KBDINT,200 . = TT0OIV ;SETUP UNIT 0 OUTPUT VECTOR .WORD PRTINT,200 .ENDC .IFGE NTTYS-2 ;IS NO. TTYS GE 2? . = TT1IIV ;YES, SETUP UNIT 1 INPUT VECTOR .WORD KBDINT,201 . = TT1OIV ;SETUP UNIT 1 OUTPUT VECTOR .WORD PRTINT,201 .ENDC .IFGE NTTYS-3 ;IS NO. TTYS GE 3? . = TT2IIV ;YES, SETUP UNIT 2 INPUT VECTOR .WORD KBD PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; PSTP $PST = 0 ; EN5 =. ; MOV #LIST5,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC CLR -(SP) ; EMT QUEUE ; TST QTAB IOSTAT =.-1 ; TASK I/O STATUS TABLE QTAB .=.+TASMAX ; QTAB ; QTAB TPRTY =.-1 ; TASK PRIORITY TABLE QTAB .=.+TASMAX ; QTAB ; INT,202 . = TT2OIV ;SETUP UNIT 2 OUTPUT VECTOR .WORD PRTINT,202 .ENDC .IFGE NTTYS-4 ;IS NO. TTYS GE 4? . = TT3IIV ;YES, SETUP UNIT 3 INPUT VECTOR .WORD KBDINT,203 . = TT3OIV ;SETUP UNIT 3 OUTPUT VECTOR .WORD PRTINT,203 .ENDC .IFGE NTTYS-5 ;IS NO. TTYS GE 5? . = TT4IIV ;YES, SETUP UNIT 4 INPUT VECTOR .WORD KBDINT,204 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIED BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PER (SP)+ ; BR EN5 ; .PAGE .CSECT TASK6 ; HEAD6 =. ; .WORD 1 ; THREAD WORD .WORD EN6 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAY TASKS QTAB BSIZE =.-1-MXTASK ; NUMBER OF CORE SEGMENTS QTAB .=.+MAXOVR ; QTAB ; QTAB ; QTAB .=.+2 ; MAKE SURE WORD AVAIL. FOR ROUND UP. QTAB ; . = TT4OIV ;SETUP UNIT 4 OUTPUT VECTOR .WORD PRTINT,204 .ENDC .IFGE NTTYS-6 ;IS NO. TTYS GE 6? . = TT5IIV ;YES, SETUP UNIT 5 INPUT VECTOR .WORD KBDINT,205 . = TT5OIV ;SETUP UNIT 5 OUTPUT VECTOR .WORD PRTINT,205 .ENDC .IFGE NTTYS-7 ;IS NO. TTYS GE 7? . = TT6IIV ;YES, SET UP UNIT 6 INPUT VECTOR .WORD KBDINT,206 . = IOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITH LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 6 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST6 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 QTAB .ENDC .EVEN ;TAKE CARE OF ODD BYTES .PAGE ;*********************************************************************** ; * ; Q U E U E * ; * ; PROGRAM IDENTIFICATION. QUEUE - QUEUE A SOFTWARE TASK; * ; TT6OIV ;SETUP UNIT 6 OUTPUT VECTOR .WORD PRTINT,206 .ENDC .IFGE NTTYS-8. ;IS NO. TTYS GE 8? . = TT7IIV ;YES, SETUP UNIT 7 INPUT VECTOR .WORD KBDINT,207 . = TT7OIV ;SETUP UNIT 7 OUTPUT VECTOR .WORD PRTINT,207 .ENDC .IFG NTTYS-8. ;IS NO. TTYS GT 8? XXXXXX ;CREATE ASSY ERROR, NTTYS GT 8!! .ENDC .ENDC ;*****. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ; 0.01 SEC RES1 = 1 ; 0.01 SEC RES2 = 2 ; 0.02 SEC RES3 = 5 ; 0.1 SEC RES4 = 2 ; 0.2 SEC RES5 = 5 ; 1.0 SEC RES6 = 5 ; 5.0 SEC RES7 = 2 ; 10.0 SEC RES8 = 3 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA6 ; BUFFER ADD DATA6 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 6/ ; .BYTE 40,15 ; ; EN6 =. ; MOV #LIST6,-(SP) ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE QUEUE IS RESPONSIBLE FOR PLACING A * ; TASK IN THE SPECIFIED PRIORITY THREAD. A TASK CANNOT BE * ; THREADED VIA QUEUE UNLESS IT IS INACTIVE AND THE THREAD WORD * ; IN THE PROGRAM HEADER IS EMPTY (NOMINAL VALUE OF 1). THE * ; PROGRAM REQUESTING THE QUEUEING CAN SELECT WHETHER QUEUE * EELETE ASECT FOR CHECKOUT ****** .CSECT ; ; ; TABLE OF CONTROL STATUS REGISTER ADDRESSES ORDERED BY UNIT NO. ; TTICSR: .WORD TT0ICS,TT1ICS ;INPUT CSR'S .WORD TT2ICS,TT3ICS .WORD TT4ICS,TT5ICS .WORD TT6ICS,TT7ICS ; .=TTICSR+NTTYS+NTTYS ;DELETE UNUSED WORDS ; TTOCSR: .WORD TT0OCS,TT1OCS ;OUTPUT CSR'S .WORD TT2OCS,TT3OCS .WORD TT4OCS,TT5OCS .WORD TT6OCS,TT7OCS .=TTOCSR+NTTYS+NTTYS ;DELET ; 30.0 SEC RES9 = 2 ; 60.0 SEC RES10 = 5 ; 5 MIN RES11 = 2 ; 10 MIN RES12 = 3 ; 30 MIN RES13 = 2 ; 60 MIN RES14 = 2 ; 2 HRS RES15 = 6 ; 12 HRS ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = 0 EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC MOV #1,-(SP) ; EMT QUEUE ; TST (SP)+ ; BR EN6 ; .PAG * ; RETURNS TO IT OR TO THE TASK DISPATCHER (DSPTCH). THE * ; CALLING PROGRAM MAY ALSO TRANSMIT A ONE WORD ARGUMENT TO * ; THE QUEUED PROGRAM. * ; * ; PROGRAM USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; QUEUE IS: * ; E UNUSED WORDS ; ; ; TABLE OF DATA BUFFER REGISTER ADDRESSES ORDERED BY UNIT NO. ; TTIDBR: .WORD TT0IDB,TT1IDB ;INPUT DBR'S .WORD TT2IDB,TT3IDB .WORD TT4IDB,TT5IDB .WORD TT6IDB,TT7IDB .=TTIDBR+NTTYS+NTTYS ; TTODBR: .WORD TT0ODB,TT1ODB ;OUTPUT DBR'S .WORD TT2ODB,TT3ODB .WORD TT4ODB,TT5ODB .WORD TT6ODB,TT7ODB .=TTODBR+NTTYS+NTTYS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; ;MAX RESOLUTION: #0 AT 10 MILLISECONDS SECR = 5 ;"RES5" IS THE ONE-SECOND RESOLUTION TRES = SECR ; FOR TIME-SLICE WATCH-DOG IN RPOM $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, ANDE .CSECT TASK7 ; HEAD7 =. ; .WORD 1 ; THREAD WORD .WORD EN7 ; ENTRY POINY .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 1 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .END * ; MOV ITASK,-(SP) PUSH * ; MOV IPRTY,-(SP) ARGUMENTS ; MOV IARG,-(SP) ONTO ; MOV IRTRN,-(SP) STACK ; EMT QUEUE THEN CALL QUEUE * ; TST (SP)+ TEST ERROR CODE * ; BNE XXX BRANCH IF ERROR WAS ENCOUTNERED * ; ; TABLE OF FILE ID'S FOR MESSAGE BUFFERING ; FILEID: .WORD FIDN0,FIDP0 .WORD FIDN1,FIDP1 .WORD FIDN2,FIDP2 .WORD FIDN3,FIDP3 .WORD FIDN4,FIDP4 .WORD FIDN5,FIDP5 .WORD FIDN6,FIDP6 .WORD FIDN7,FIDP7 . = FILEID+NTTYS+NTTYS+NTTYS+NTTYS ;DELETE UNUSED WORDS ; ; ; TABLE OF OUTPUT BUFFER ADDRESSES ORDERED BY UNIT NO. ; TTOBUF: .WORD TTOBF0,TTOBF1 .WORD TTOBF2,TTOBF3 .WORD TTOBF TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETER "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 10. ;T-O-D CLOCK TICKS-PER-SECOND $ABMPL = 0 ;NO T-O-D CLOCK BASE MULTIPLIER TODINT = 320 ;INTERRUPT VECTOR FOR T-O-D INTERRUPT TIMINT = TODINT+4 ;INTERRUPT VECTOR FOR INTERVAL TIMER STLINT = C .BYTE 0 ; CPU STATUS .BYTE 7 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST7 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O * ; THE FORTRAN EQUIVALENT CALL IS: * ; * ; CALL QUEUE( ITASK, IPRTY, IARG, IRTRN, IERR) *QUEU ; * ; ITASK IS THE NUMBER OF THE TASK TO BE QUEUED * ; IPRTYIS THE PRIORITY LEVEL AT WHICH THE TASK EXECUTES * ; = 0, QUEUE WILL GET THE ASSI4,TTOBF5 .WORD TTOBF6,TTOBF7 . = TTOBUF+NTTYS+NTTYS ; ; ; TABLE OF DISC READ I/O LIST ADDRESSES ORDERED BY UNIT NO. ; DRLIST: .WORD DRLST0,DRLST1 .WORD DRLST2,DRLST3 .WORD DRLST4,DRLST5 .WORD DRLST6,DRLST7 . = DRLIST+NTTYS+NTTYS ; ; ; DISC WRITE I/O LISTS ; DWLIST: .WORD 1 ;THREAD WORD .BYTE DISCUN ;LOGICAL DEVICE NO FOR DISC .BYTE 3 ;EXIT TYPE -- 3 TIMINT+4 ;VECTOR FOR STALL ALARM INTERRUPT STLREG = 167000 ;ADDRESS FOR STALL ALARM RESET CLKENB = 167002 ;ADDRESS FOR ENABLE OF CLOCKS TODBIT = 4 ;BIT TO ENABLE TIME-OF-DAY INTERRUPT TIMBIT = 10 ;BIT TO ENABLE INTERVAL TIMER INTERRUPT STLBIT = 0 ;BIT TO ENABLE STALL ALARM INTERRUPT $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = 20. ;NUMBER OF ENTRIES IN SCPRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA7 ; BUFFER ADD DATA7 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 7/ ; .BYTE 40,15 ; ; EN7 =. ; MOV #LIST7,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE EMT SUSPND GNED PRIORITY FROM THE * ; TASK TABLE * ; > 0, PRIORITY LEVEL SPECIFIED BY CALLING PROGRAM * ; < 0, ILLEGAL * ; IRTRN IS ZERO IF THE CALLING PROGRAM WANTS CONTROL RETURNED * ; TO IT; ONE IF THE DISPATCHER SHOULD EXECUTE THE * ; HIGHEST PRIORITY TASK. * ; IARG IS A WORD THAT WILL .WORD TTYDW1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1 ;PRIORITY OF REQUEST .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD DSCBUF ;DATA BUFFER ADDRESS ; DWLST2: .WORD 1 ;THREAD WORD .BYTE DISCUN ;LOGICAL DEVICE NO. FOR DISC .BYTE 3 ;EXIT TYPE -- 3 HEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ; $DTAPE = 1 ; DECTAPE OPTION ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 1 ; USE DDS DICS ; ACTSIZ = 20. ; MAXIMUM NO. OF ENTRIES IN AUTH. CODE .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODE ; BR EN7 ; .PAGE .CSECT TASK8 ; HEAD8 =. ; .WORD 1 ; THREAD WORD .WORD EN8 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; BE TRANSMITTED TO THE QUEUED TASK * ; IERR IS AN ERROR INDICATOR * ; -1 = TASK QUEUED BUT HAD BEEN ABORTED *QUEU ; 0 = QUEUE SUCCESSFUL * ; 1 = ILLEGAL TASK THREAD WORD (NOT 1) *QUEU ; 2 = TASK STATUS NOT 0 OR 7(QUIESCENT OR ABORTED *QUEU ; 3 = TASK WAS ABORTED DURING LAST EXECUTION PERIOD, AND * ; .WORD TTYDW1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1 ;PRIORITY OF REQUEST .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD DSCBF2 ;DATA BUFFER ADDRESS ; ; ; DISC WRITE BUFFERS ; DSCBUF: .WORD 0 ;FILE ID .BYTE 0 ;SECTOR FLAG .BYTE 1 ;READ/WRITE FLAG S .ENDC ; .IFNZ NDISCS DRESDI = 1 ; DISC RESIDENT DIRECTORY OPTION .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR MAX. OF 3 DISCS .ENDC ; NDPRT1 = 5 ; NO. OF PRIORITY LEVELS IN DISC 1 QUEUES .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID1 = 500. ; MAXIMUM ID ON DISC 1 ; .IFG NDISCS-1 NDPRT2 = .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 8. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST8 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 I/O IS STILL IN PROGRESS (TASK NOT QUEUED) * ; 4 = TASK DISABLED * ; 5 = ILLEGAL TASK NUMBER * ; 6 = NOT QUEUED SINCE SPECIFIED PRIORITY LEVEL WILL NOT *QUEU ; SUPPORT OVERLAY TASKS *QUEU ; 7 = NOT QUEUED SINCE RPOM'S QPART TABLE IS FULL *QUEU ; .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST & DATA ; DSCBF2: .WORD 0 ;FILE ID .BYTE 0 ;SECTOR FLAG .BYTE 1 ;READ/WRITE FLAG .WORD7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID2 = 500. ; MAXIMUM ID ON DISC 2 .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3 QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC MAXID3 = 500. ; MAXIMUM ID ON DISC 3 .ENDC ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA8 ; BUFEER ADD DATA8 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 8/ ; .BYTE 40,15 ; ; EN8 =. ; MOV #LIST8,-(SP) ; EMT * ; IF THE PRIORITY LEVEL SPECIFIED IS ILLEGAL, THEN THE PROGRAM * ; IS QUEUED AT THE LOWEST PRIORITY LEVEL. * ; * ; REGISTERS R1 - R4 ARE USED BY QUEUE AND ARE NOT SAVED UNLESS * ; THE RGSAVE EQUATE PARAMETER IS SET TO 1. * ; ; NOTE: IARG AND/OR IPRTY MUST BE OMITTED IF THE CORRESPONDING * ; FUNCTION IS OMITTED AT SYSGEN TIME. REFER 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST & DATA ; ; ; DISC READ I/O LISTS ORDERED BY UNIT NO. ; DRLST0: .WORD 1 ;THREAD WORD .BYTE DISCUN ;LOGICAL DEVICE NO. FOR DISC $SYSFL = NDISCS+5 ; NO. OF SYSTEM FILE ID'S IN ROS ; ; COMPID,FTDIR,CDIMGE,CDIHDR,TTFILE .IFZ DRESDI NCFILE = $SYSFL+40. ; NO. OF CORE RESIDENT FILE ID'S .ENDC .IFNZ DRESDI NCFILE = NDISCS+$SYSFL+40. ; NO. OF CORE RESIDENT ID'S ; ; INCLUDING DOD'S AND SYSTEM FILES NCRWDS = NCFILE*5 ; NO. OF CORE RESIDENT WORDS NEEDED ; TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; CLR -(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN8 ; .PAGE .CSECT TASK9 ; HEAD9 =. ; .WORD 1 ; THREAD WORD .WORD EN9 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME TO DPRTY AND * ; ARG EQUATE PARAMETERS BELOW. * ; * ; * ; PROGRAMMER 55 * ; DATE 07.20.71 * ; REVISION * ; .BYTE 3 ;EXIT TYPE -- 3 .WORD TTYDR1 ;ADDRESS OF I/O COMPLETE ROUTINE .BYTE 0 ;NO ERROR TASK TO BE QUEUED ON ERROR .BYTE NDPRT1-1 ;PRIORITY OF REQUEST (1 GT WRITE REQ'S) .WORD 0 ;ERROR CODE WORD .WORD 0 ;"SYSTEM" WORD .WORD TTOBF0 ;DATA BUFFER ADDRESS DRLST1: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 ; FOR CORE DIRECTORY NCRLOC = NCRWDS+NCRWDS ; NO. OF LOCATIONS IN CORE RESIDENT ; ; DIRECTORY .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION CHKPTC = 0 ; CHECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION $FTMAX = 10. .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 9. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST9 =. ; .WORD 1 ; * ;*********************************************************************** ; .PAGE .DEF QUEUE .IFNZ OVRLAY ; QUEU .REF QOVLAY,PUSHR,POPR ; QUEU .ENDC QUEU ; NARG =6+ARG+ARG+DPRTY+DPRTY+SAVE ; NO. ARGS TIMES TWO (INCL. IERR IERR = NARG ;THESE EQUATES IRTRN .WORD 0,0,TTOBF1 DRLST2: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF2 DRLST3: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF3 DRLST4: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF4 DRLST5: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 ; LARGEST FILE TYPE IN SYSTEM $IDMAX = 500. ; LARGEST FILE ID IN SYSTEM-- ; ; MUST BE >= MAXID1,2,3,..,N $FTDRL = $FTMAX*3/64.+1 ; NO. OF SECTORS IN FILE TYPE DIRECTORY $ROSFW = NDISCS+$SYSFL*5 ; NO. OF WORDS IN ROS FILES $CDISZ = NCRWDS-$ROSFW/64.+1 ; NO. OF SECTORS IN CORES ; ; DIRECTORY IMAGE $TKFL1 = TASMAX*5 ; # BYTES IN REG TASK TABLES $TKFL2 TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA9 ; BUFFER ADD DATA9 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK = 4+SAVE ; ARE USED AS OFFSETS IARG = IRTRN+ARG+ARG ; FOR THE ARGUMENTS AS IPRTY = IARG+DPRTY+DPRTY ; THEY APPEAR IN THE STACK ITASK = IPRTY+2 ; ; ; ; EQUATES FOR PROGRAM HEADER ; ; THREAD = 0. ;THREAD WORD ENTRY = 2. ;TASK ENTRY POINT INITPT = 4. ;TASK INITIALIZATION ENTRY MAXT = 6. ;MAXIMUM EXECUTION TIME SIZE =8. .WORD 0,0,TTOBF5 DRLST6: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF6 DRLST7: .WORD 1 .BYTE DISCUN,3 .WORD TTYDR1 .BYTE 0,NDPRT1-1 .WORD 0,0,TTOBF7 DRLSSZ = DRLST1-DRLST0 ;DELETE UNUSED IO LISTS . = DRLSSZ*NTTYS+DRLST0 ; ; ; TTY OUTPUT BUFFERS ORDERED BY UNIT NO. ; TTOBF0: .WORD 0 ;FILE ID .BYTE 0 ;SECTOR FLAG = TASMAX-MXTASK*3 ; # BYTES IN EXT OF TASK TABLES $TKFLN = $TKFL1+$TKFL2+2+3/4*2 ; # WORDS IN ALL TASK TABLES ; + 'TASKS' + EVEN NUMBER OF ; WORDS FOR DISCIO $TKFNS = $TKFLN/64.+1 ; NO. OF SECTORS IN TASK TABLE FILE ; ; THE FOLLOWING IS FOR DISC RESIDENT DIRECTORIES ; DIRAD1 = 320. ; DISC RESIDENT DIRECTORY ADDRESS DISC 1 ; ; / ; .ASCII /# 9/ ; .BYTE 40,15 ; ; EN9 =. ; MOV #LIST9,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; MOV #1,-(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN9 ; .PAGE .CSECT TASK10 ; HEAD10 =. ; .WORD 1 ; NO. WORDS FOR STACK IN HEADER (BYTE) QUEU HPRIOR =9. ; TASK PRIORITY (BYTE) QUEU CTIMER = 10. ;CURRENT TIMER VALUE TARG = CTIMER+ARG+ARG ;ARGUMENT (OPTIONAL) CPUST = TARG+2 ;CPU STATUS REGISTER (BYTE) TASKNO = CPUST+1 ;TASK NUMBER (BYTE) TSTACK = TASKNO+1 ;SAVED STACK POINTER REGSV = TSTACK+2 ;REGISTER SAVE AREA PS = 177776 ;CPU STATU .BYTE 0 ;READ/WRITE FLAG .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RESERVED FOR DISCIO USE .WORD 0 ;RELATIVE SECTOR ADDRESS .WORD DNWRDS ;NO. OF WORDS TO TRANSFER . = .+OBUFSZ ;ALLOCATE SPACE FOR LIST AND DATA TTOBF1: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF2: .WORD 0,0,0,0,0,0,DNWRDS LEAVES ROOM FOR 20K ROS BOOT .IFZ DRESDI DIRLN1 = 0 ; ZERO LENGTH .ENDC .IFNZ DRESDI DIRLN1 = MAXID1-1/12.+1 ; DISC DIRECTORY 1 LENGTH .IFG NDISCS-1 DIRAD2 = 0 ; DISC RESIDENT DIRECTORY ADDRESS DISC 2 DIRLN2 = MAXID2-1/12.+1 ; DISC DIRECTORY 2 LENGTH .ENDC .IFG NDISCS-2 DIRAD3 = 0 ; DISC RESIDNET DIRECTORY ADDRESS DISC 3 DIRLN3 = MAXID3-1/12 ; THREAD WORD .WORD EN10 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 10. ; TASK NUMBER S REGISTER ADDRESS ; R0=%0 ;GENERAL R1=%1 ; QUEU R2=%2 ; QUEU R3=%3 ; REGISTER R4=%4 ; QUEU R5=%5 ; QUEU SP=%6 ; EQUATES PC=%7 ; . = .+OBUFSZ TTOBF3: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF4: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF5: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF6: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBF7: .WORD 0,0,0,0,0,0,DNWRDS . = .+OBUFSZ TTOBSZ = TTOBF1-TTOBF0 ;DELETE UNUSED BUFFERS . = TTOBSZ*NTTYS+TTOBF0 .IFG NTTYS-8. ;IF NTTYS .GT. 8? XXXXXX .+1 ; DISC DIRECTORY 3 LENGTH .ENDC .ENDC ; ; THE FOLLOWING CONTAINS THE FILE TYPE STATUS DESCRIPTORS ; FOR EACH FILE TYPE. ; $FD000 = 41 ; FILE TYPE 0, LOG UNIT 1, NO COMPRESSION $FD001 = 1 ; FILE TYPE 1, LOG UNIT 1 $FD002 = 1 ; FILE TYPE 2, LOG UNIT 1 $FD003 = 1 ; FILE TYPE 3, LOG UNIT 1 $FD004 = 1 ; FILE TYPE 4, LOG UNIT 1 $FD005 = 101 .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST10 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA10 ; BU QUEU ; ; ; NOW, LET'S GET ON WITH THE PROGRAM ; ; QUEUE = . SAVE =0 ; NUMBER OF REG SAVED IF RGSAVE=0 QUEU .IFNZ RGSAVE .IFZ OVRLAY ; SAVE STACK SPACE QUEU MOV R1,-(SP) ;SAVE MOV R2,-(SP) ; REGISTERS MOV R3,-(SP) ; FOR THE MOV R4,-(SP) ; CALLER SAVE =8. ; SIZE OF STAC;CREATE ASSY ERROR, NTTYS GT 8!! .ENDC .ENDC ; ; ; ERROR MODULE USED TO TYPE OUT ERROR CODE ; ERRMOD: .WORD 1 ; THREAD WORD .WORD 0 ; ERROR NO. .WORD 0,0,0,0 ; ARG 1-4 ; ; ; TABLE OF INPUT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; ITIMER: .WORD ITIME0,ITIME1 .WORD ITIME2,ITIME3 .WORD ITIME4,ITIME5 .WORD ITIME6,ITIME7 . = ITIMER+NTTYS+NTTYS ; ; ; TA ; FILE TYPE 5, LOG UNIT 1, CKSAVE REQUIRED $FD006 = 1 ; FILE TYPE 6, LOG UNIT 1 $FD007 = 1 ; FILE TYPE 7, LOG UNIT 1 $FD008 = 1 ; FILE TYPE 8, LOG UNIT 1 $FD009 = 1 ; FILE TYPE 9, LOG UNIT 1 .IFL 10.-$FTMAX XXXXXXXX ; ONLY SET UP FOR 10. FILE TYPES .ENDC $OVTYP = 5. ; FILE TYPE FOR OVERLAY TASKS ; ; FILE TYPE SIZE TABLE - IN SECTORSFFER ADD DATA10 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 10/ ; .BYTE 40,15 ; ; EN10 =. ; MOV #LIST10,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; EMT FRETSK ; EITHER DEQUEUE OR DEACTIVATE TASK #7. TST K (REG). QUEU .ENDC QUEU .IFNZ OVRLAY ; QUEU JSR R5,PUSHR ; QUEU SAVE =12. ; SIZE OF SATCK QUEU .ENDC QUEU .ENDC MOVB @#PS,R3 ; SAVE PS FOR LATER BLE OF OUTPUT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; OTIMER: .WORD OTIME0,OTIME1 .WORD OTIME2,OTIME3 .WORD OTIME4,OTIME5 .WORD OTIME6,OTIME7 . = OTIMER+NTTYS+NTTYS ; ; ; TABLE OF WAIT TIMER MODULE ADDRESSES ORDERED BY UNIT NO. ; WTIMER: .WORD WTIME0,WTIME1 .WORD WTIME2,WTIME3 .WORD WTIME4,WTIME5 .WORD WTIME6,WTIME7 . =WTIMER+NTTYS+NTTYS ; ; ; INPUT TIMER MODULES (OPERATOR RESPONSE TIMER) ; .IFNZ DRESDI $FS000 = DIRAD1+DIRLN1+$FTDRL+$CDISZ+$TKFNS .ENDC .IFZ DRESDI $FS000 = $FTDRL+$CDISZ+$TKFNS .ENDC $FS001 = 300. $FS002 = 300. $FS003 = 300. $FS004 = 300. $FS005 = 2500. $FS006 = 300. $FS007 = 2500. $FS008 = 300. $FS009 = 300. ; $ALOD1 = $FS000+$FS001+$FS002+$FS003+$FS004 $ALOD2 = $FS005+$FS006+$FS007+$FS008+$FS009 .IFL 8192.-$ (SP)+ ; EMT EXIT .PAGE .CSECT TASK11 ; HEAD11 =. ; .WORD 1 ; THREAD WORD .WORD EN11 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 7 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; QUEU CLR -(SP) ;/ = NO ERRORS; 3 = Q'ED BUT ABORTED CLR R4 ; CLEAR REG FOR BYTE LOAD QUEU BISB ITASK(SP),R4 ; GET TASK NUMBER OFF STACK QUEU CLR IERR(SP) ; CLEAR ERROR STATUS FOR RETURN QUEU TST R4 ; RESET STATUS BITS QUEU BEQ QUEE50 ; BRANCH IF TASK #=0. ILLEGAL QUEU CMPB R4,TASKS ; IS TASK#> ; ITIME0: .WORD 1 ;THREAD WORD .BYTE 0 ;TASK NO. (N/A) .BYTE SECR!TJOPTN!TFOPTN ;OPTION FLAGS (R,J,F) .BYTE 0 ;TIMER COUNTER .BYTE 0 ;RESET COUNT .WORD ITIMFB ;FLAG BYTE ADDRESS .WORD 0 ;FLAG MASK(UNIT NO.) .WORD TTYITO ;TIMEOUT ROUTINE ADDRESS ITIME1: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN ALOD1-$ALOD2 XXXXXXXX ; ONLY 8192 SECTORS AVAIL.- 1/2 MEGAWORDS .ENDC ; .IFNZ $BATCH $BCHID = NDISCS+$SYSFL+1 ; FILE ID FOR BATCH FILE $BCHTP = 7. ; BATCH FILE TYPE $RASIZ = 200. ; NO. OF ENTRIES IN USERS SYMBOL TABLE ; ; IN RASM ; ; NOTE: 4 WORDS/ENTRY $LSDSZ = 1000. ; NO. OF WORDS RESERVED FOR LOADERS ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 11. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA ; EN11 =. ; CLR CN11 ; CLR R0 ; EN11A: INC R0 ; INC CN11 ; CLR R1 ; EMT SUSPND LARGEST LEGAL TASK NUMBER QUEU BHI QUEE50 ; BRANCH IF YES. ILLEGAL. QUEU ; QUE000 = . MOVB #340,@#PS ; LOCK OUT ALL INTERRUPTS QUEU TSTB TSTAT(R4) ;NOW, MAKE SURE THE TASK IS INACTIVE BEQ QUEA00 ;BRANCH IF IT IS. CMPB TSTAT(R4),#7 ; QUIESCENT. WAS IT ABORTED. IF SO, QUEU BNE QUEE20 ; QUEU TSTB IO .BYTE 0,0 .WORD ITIMFB,1,TTYITO ITIME2: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,2,TTYITO ITIME3: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,3,TTYITO ITIME4: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,4,TTYITO ITIME5: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,5,TTYITO ITIME6: .WORD ; SYMBOL DIRECTORY (LSD) ; ; NOTE: $LSDSZ MUST BE >/= TO ; $MXOBJ*7/2 (5 WO-DS PE- SY4B6L#D $MXOBJ = 20. ; MAX NO. OF OBJECT MODULES TO BE ; ; LINKED INTO ANY GIVEN LOAD ; ; MODULE. .ENDC .ENDC ; MATCHES .IFNZ NDISCS .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS ; BR EN11A ; CN11: .WORD 0 ; .PAGE .CSECT TASK12 ; HEAD12 =. ; .WORD 1 ; THREAD WORD .WORD EN12 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 8. ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNSTAT(R4) ;WE'LL GIVE THE CALLER A REPRIEVE IF BNE QUEE30 ; IF THE TASK'S I/O ISN'T INPROGRESS QUEU MOV #-1,IERR(SP) ; HORRAY - HE CAN STILL QUEUE IT. QUEU ; ; ; NOW, LET'S SEE IF WE CAN QUEUE THE TASK ; ; QUEA00=. ASL R4 ; MULT. R4 BY 2 TO MAKE INTO WRD INDEX MOV HEADER(R4),R2 ;FIRST, GET PROGRAM HEADER ADDRESS ASR R4 ; DIV. R4 BY 2 TO RESTORE INTO BYTE INDX CMP 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,6,TTYITO ITIME7: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD ITIMFB,7,TTYITO ITIMSZ = ITIME1-ITIME0 ;DELETE UNUSED MODULES . = ITIMSZ*NTTYS+ITIME0 .IFG NTTYS-8. ;IF NTTYS .GT. 8? XXXXXX ;CREATE ASSY ERROR, NTTYS GT 8!! .ENDC ; ; ; OUTPUT TIMER MODULES ; OTIME0: .WORD 1 ;THREA = 2 ; NUMBER OF TTYS IN SYSTEM ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DIZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 12. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA ; EN12 =. ; CLR CN12 ; CLR R1 ; EN12A: INC R1 ; INC CN12 ; CLR R0 ; R2,#1 ; DOES TASK EXIST? QUEU BEQ QUEE50 ; NO - (HEADER)=1 IFF NONEXISTANT QUEU QUEA10 =. ; QUEU MOVB #1,TSTAT(R4) ; SET STATUS TO QUEUING IN PROGRESS. QUEU MOVB R3,@#PS ; ALLOW INTERRUPTS QUEU .IFNZ DPRTY ;DON'T ASSEMBLE THIS PART IF DPRTY=0 * MOVB IPRTY(SP),R1 ; GET DYNAMIC PRIORITY (ALD WORD .BYTE 0 ;TASK NO. (N/A) .BYTE MSECR!TJOPTN!TFOPTN ;OPTION FLAGS (R,J,F) .BYTE 0 ;TIMER COUNTER .BYTE 0 ;RESET COUNT .WORD OTIMFB ;FLAG BYTE ADDRESS .WORD 0 ;FLAG MASK (DEV. NO.) .WORD TTYOTO ;TIMEOUT ROUTINE ADDRESS OTIME1: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORSC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. MOV #11.,-(SP) ; MOV #1,-(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN12A ; CN12: .WORD 0 ; .END ; WAYS POSITIVE)QUEU BGT QUEB10 ;USE THE PRIORITY IF .GT. 0 * BEQ QUEB00 ;BRANCH IF WE HAVE TO GET PRIORITY * BR QUEB20 ;FROM TASK TABLE. OTHERWISE, USE * .ENDC ;LOWEST PRIORITY * ; QUEB00 = . MOVB TPRTY(R4),R1 ;GET PRIORITY FROM TASK TABLE BLE QUEB20 ;BRANCH IF ILLEGAL (.LE. 0) ; QUEB10 = . CMPB R1,#D OTIMFB,1,TTYOTO OTIME2: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,2,TTYOTO OTIME3: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,3,TTYOTO OTIME4: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,4,TTYOTO OTIME5: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,5,TTYOTO OTIME6: .WORD 1 .BYTE 0,MSEC ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0H: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 32767.+8192. ;TOP OF CORE (BYTE ADDRESS) $RASM = 1 ;1 = ASSEMBLER IS INCLUDED, AND THEREFORE ;CREAD MUST INSERT , AFTER ;ASSEMBLER READ REQUESTS .PAGE ;**************NPRIOR ; IS PRIORITY GT HIGEST LEGAL LEVEL QUEU BLE QUEB30 ;BRANCH IF NO (PRIORITY IS VALID) ; QUEB20 = . MOVB #NPRIOR,R1 ; ILLEGAL LEVEL, USE LOWEST LEVEL QUEU ; QUEB30 = . .IFNZ OVRLAY CMPB R4,#OVTMIN ; OVERLAY OR CORE TASK? QUEU BHIS QUEH00 ; GO DO OVERLAY STUFF QUEU .ENDC MOVB R1,HPRIOR(R2) ;SAVE PRIORITY IN PROGRAM HEADR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,6,TTYOTO OTIME7: .WORD 1 .BYTE 0,MSECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD OTIMFB,7,TTYOTO OTIMSZ = OTIME1-OTIME0 ;DELETE UNUSED MODULES . = OTIMSZ*NTTYS+OTIME0 .IFG NTTYS-8. ;IF NTTYS GT 8 XXXXXX ;CREATE ASSY ERROR, NTTYS GT 8!! .ENDC ; ; ; WAIT TIMER MODULES ; WTIME0: .WORD 1 ;THREAD WORD .BYTE 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION WHERE ; 1 = EOM IS PRINTED ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. ******************************************************** ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;******ER ; ; ; THE TIME HAS COME TO PLACE THE TASK IN THE SPECIFIED THREAD. ; THE INDIVIDUAL PRIORITY THREADS ARE MAINTAINED IN 'FIRST' ; AND 'LAST'. ; ; MOVB #340,@#PS ;THEN INHIBIT INTERRUPTS DEC (R2) ;INSERT TASK HEADER ADDRESS IN QUEUE BNE QUEE10 ; ERROR. TASK NO LONGER QUEUABLE. QUEU ASL R1 ; MAKE R1 INTO WORD INDEX. DON'T NEEDLAT MOV R2,@LAST(R1) MOV R2,L ;TASK NO. (N/A) .BYTE SECR!TJOPTN!TFOPTN ;OPTION FLAGS (R,J,F) .BYTE 0 ;TIMER COUNTER .BYTE 0 ;RESET COUNT .WORD WTIMFB ;FLAG BYTE ADDRESS .WORD 0 ;FLAG MASK (UNIT NO.) .WORD TTYOON ;TIMEOUT ROUTINE ADDRESS WTIME1: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,1,TTYOON WTIME2: .WOF CHARS TO BE ;TYPED IN A LINE .PAGE ;* ;* G E N E R A L S Y S T E M E Q U A T E S ;* $1145 = 0 ;1 = 11/45 0 = 11/20 HICORE = 32767.+8192. ;TOP OF CORE (BYTE ADDRESS) $RASM = 1 ;1 = ASSEMBLER IS INCLUDED, AND THEREFORE ;CREAD MUST INSERT , AFTER ;ASSEMBLER READ REQUESTS .PAGE ;************************************************************************************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 1 ;1 = INCLUDE BINARY MODE, 0 = DON'T BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 1 ;1 = PROVIDE FOR INTERNAL EBCDIC CODE EXEBC = 1 ;1 = PROVIDE FOR EXTERNAL EBCDIC CODE AST(R1) ; QUEC10 = . MOVB #2,TSTAT(R4) ; SET STATUS TO QUEUED CLRB IOSTAT(R4) ;CLEAR I/O STATUS CLR TSTACK(R2) ; CLEAR TASK STACK POINT (USED BY DSPT QUEU ; AS A FLAG). QUEU ; CLRB CPUST(R2) QUEU ; CLR CTIMER(R2) QUEU ; MAY NEED CPUST AND CTIORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,2,TTYOON WTIME3: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,3,TTYOON WTIME4: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,4,TTYOON WTIME5: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,5,TTYOON WTIME6: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0************************************************ ;* ** ;* IN THE FOLLOWING EQUATES, A ZERO MEANS DO NOT INCLUDE ** ;* THE OPTION. ** ;* ** ;* C A R D R E A D E R E Q U A T E S ** ;* ** ;************** ; (029 CARD CODE) $RES = 0. ;BASIC TIMER RESOLUTION USED BY CREAD $1SEC = 60. ;MULTIPLE USING $RES FOR 1 SECOND $500MS = 30. ;MULTIPLE USING $RES FOR 1/2 SECOND $100MS = 6. ;MULTIPLE USING $RES FOR 100 MS MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POMER LATER. QUEU .IFNZ ARG ;DON'T ASSEMBLE IF ARGUMENT ISN'T USED* MOV IARG(SP),TARG(R2) ;MOVE ARGUMENT TO PROGRAM HEADER * .ENDC ; ; ; ALL IS NOW DONE - RESTORE THE REGISTERS, THEN SEE WHO ; GETS CPU CONTROL (TEST IRTRN) ; ; QUEC15 =. ; HERE TO GO BACK QUEU TST (SP)+ ; POP OF TOP OF STACT (TEMP ERROR STAT) QUEU QUEC16 =. ; HERE TO GO HOM .WORD WTIMFB,6,TTYOON WTIME7: .WORD 1 .BYTE 0,SECR!TJOPTN!TFOPTN .BYTE 0,0 .WORD WTIMFB,7,TTYOON WTIMSZ = WTIME1-WTIME0 ;DELETE UNUSED MODULES . = WTIMSZ*NTTYS+WTIME0 .IFG NTTYS-8. ;IF NTTYS .GT. 8? XXXXXX ;CREATE ASSY ERROR, NTTY GT 8!! .ENDC ; ; TIMER MODULE FLAG BYTES ; ; ITIMFB: .BYTE 0 ;INPUT TIMER FLAG BYTE (UNIT NO.) OTIMFB: .BYTE 0 ******************************************************** NCR = 1 ;NUMBER OF CARD READERS IN SYSTEM BIN = 0 ; DON'T INCLUDE BINARY MODE BCD = 1 ;1 = INCLUDE ALPHANUMERIC MODE, 0 = DONT TTYSW = 1 ;1 = SWITCH INPUT TO TTY ON COMMAND INEBC = 0 ; 1=PROVIDE OFR INTERNAL EBCDIC CODE EXEBC = 0 ; 1=PROVIDE FOR EXTERNAL EBCDIC CODE ; SSIBLE TO THE ; TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 =E FROM ERROR CONDITION QUEU MOVB R3,@#PS ; ALLOW INTERRUPTS QUEU .IFG RGSAVE ; QUEU .IFZ OVRLAY ; QUEU MOV (SP)+,R4 ; RESTORE QUEU MOV (SP)+,R3 ; THE QUEU MOV (SP)+,R2 ; CALLER'S QUEU MOV ;OUTPUT TIMER FLAG BYTE (UNIT NO.) WTIMFB: .BYTE 0 ;WARMUP TIMER FLAG BYTE (UNIT NO.) ; ; ; PROGRAM VARIABLES ; TTYPRT: .BYTE -1,-1,-1,-1,-1,-1,-1,-1 ;UNIT STATUS ; <0 = UNIT NOT BUSY ; 0 = INPUT HAS PRIORITY ; >0 = OUTPUT HAS PRIORITY . = TTYPRT+NTTYS TTO1ST: .BYTE 0,0,0,0,0,0,0,0 ;FIRST OUTPUT REQUEST FLAG ; 0 = FI(029 CARD CODE) $RES = 1 ; TIMER RES. FOR CREAD (=10.0 MSEC.) $100MS = 10. ;MULTIPLE USING $RES FOR 100 MS $500MS = 50. ;MULTIPLE USING $RES FOR 1/2 SECOND $1SEC = 100. ;MULTIPLE USING $RES FOR 1 SECOND MXTIME = 180. ;MAX SECONDS TO WAIT FOR OPR RESPONSE ; ; NOTE: THE ABOVE TIMES DO NOT NEED TO BE EXACT. SELECT THE ; PROPER VALUES TO GET AS CLOSE AS POSSIBLE TO THE ; 777162 ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BU (SP)+,R1 ; REGISTERS QUEU .ENDC QUEU .IFNZ OVRLAY ; QUEU JSR R5,POPR ; RESTORE ALL 6 QUEU .ENDC QUEU .ENDC QUEU TST MFLAG ; IS MFLAG SET? IF SORST REQUEST ; 1 = SUBSEQUENT REQUEST . = TTO1ST+NTTYS TTI1ST: .BYTE 0,0,0,0,0,0,0,0 ;FIRST INPUT REQUEST FLAG ; 0 = FIRST REQUEST ; 1 = SUBSEQUEST REQUEST . = TTI1ST+NTTYS TTORPT: .BYTE 0,0,0,0,0,0,0,0 ;REPEAT COUNT FOR OUTPUT TRYS . = TTORPT+NTTYS TTCURS: .BYTE 0,0,0,0,0,0,0,0 ;CURSOR FOR CURRENT PRINT POSN OF DEVICE . = TTCURS+NTTYS FRS TIMES STATES. ; ; ; C / R V E C T O R I N F O R M A T I O N ; ; CR1 = 2 ;LOGICAL UNIT NO. FOR CR # 1 CR2 = 2 ;LOGICAL UNIT NO. FOR CR # 2 CR3 = 0 ;LOGICAL UNIT NO. FOR C/R # 3 CR4 = 0 ;LOGICAL UNIT NO. FOR C/R # 4 ; ; C / R D E V I C E I / O A D D R E S S E S ; CRS.1 = 777160 ;CARD READER STATUS - C/R # 1 CRB1.1 = 777162 FFER ; CRS.4 = 0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;************************************** MUST RETURN TO BNE QUEC20 ; TO THE CALLER. TST IRTRN-SAVE-2(SP); SEE WHAT KIND OF RETURN IS REQUESTED? QUEU BNE QUED00 ;BRANCH IF WE ARE SUPPOSED TO CALL DSPTC ; QUEU QUEC20 =. ; HERE TO RETURN TO THE CALLER QUEU ; QUEU MOV (SP),NARG-SAVE-4(SP) ; RESET PC FOR RTRO: .BYTE 0,0,0,0,0,0,0,0 ;FIRST RUBOUT SWITCH ; SET TO 1 WHEN 1ST RO IS INPUT ; RESET TO 0 WHEN 1ST NON-RO CHAR ; IS INPUT . = FRSTRO+NTTYS SLSHCH: .BYTE 0,0,0,0,0,0,0,0 ;CHAR TO BE ECHOED AFTER "\" . = SLSHCH+NTTYS MAXCH: .BYTE 0,0,0,0,0,0,0,0 ;SET TO 1 WHEN MAX CHARS EXCEEDED ; ON INPUT . = MAXCH+NTTYS CHTYPE: .BYTE ;CARD READER BINARY DATA BUFFER CRB2.1 = 777164 ;CARD READER COMPRESSED DATA ADDRESS ; CRS.2 = 777160 ;CARD READER STATUS - C/O # 2 CRB1.2 = 777162 ;CARD READER BINARY DATA CRB2.2 = 777164 ;CARD READER COMPRESSED DATA ; CRS.3 = 0 ;CAR READER STATUS - C/R # 3 CRB1.3 = 0 ;CARD READER BINARY DATA BUFFER CRB2.3 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRS.4 = ******************************** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/PTS P QUEU ADD #NARG-SAVE-4,SP ; MOVE SP ITSELF QUEU RTS PC ;OTHERWISE, RETURN TO CALLER ; QUED00 =. ; HERE TO CALL THE DISPATCHER QUEU ; QUEU MOV @#PS,IERR-SAVE-4(SP) ; FIX STACK SO THAT ONLY THE QUEU MOV (SP),IERR-SAVE-6(SP) ; STATUS IS LEFT. FASTEST TO QUEU ADD #IERR-SAVE-6,SP  0,0,0,0,0,0,0,0 ;CHARACTER TYPE: USED IN TTY PRINTER ; INTERRUPT ROUTINE TO IDENTIFY ; TYPE OF CHAR LAST OUTPUT ; ; 0 = CHAR FROM OUTPUT MSG ; 1 = ECHO OF INPUT CHAR ; 2 = ECHO OF LF ; 3 = ECHO OF CR ; 4 = ECHO OF "U"  0 ;CARD READER STATUS - C/R # 4 CRB1.4 = 0 ;CARD READER BINARY DATA BUFFER CRB2.4 = 0 ;CARD READER COMPRESSED DATA BUFFER ; CRVC.1 = 230 ; C/R # 1 INTERRUPT VECTOR CRVC.2 = 230 ;C/R # 2 INTERRUPT VECTOR CRVC.3 = 0 ;C/R # 3 INTERRUPT VECTOR CRVC.4 = 0 ;C/R # 4 INTERRUPT VECTOR .PAGE ;************************************************************ WITH TTY BY OPER COMMAND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 =  ; USE 'QSAVEI' SO FIX STACK FOR QUEU MOV #1,-(SP) ; THAT CALL. SUSPENSION IS QUEU JSR PC,QSAVEI ; INVOLUNTARY. STACK LOOKS LIKEQUEU ; QUEU ; PS QUEU ; PC (FOR RETURN OF CONTROL) QUEU ; ARG (=1) QU ; 5 = ECHO OF "^" ; 6 = ECHO OF 1ST "^" ; 7 = ECHO OF "\" ; 8. = ECHO OF EOM CHAR ; 9. = INTERRUPT FROM OUTPUT OF ; LF IN OUTPUT MODE ; 10. = INTERRUPT FROM OUTPUT OF ; CR IN OUTPUT MODE ********** ;* ** ;* L I N E P R I N T E R E Q U A T E C A R D S ** ;* ** ;********************************************************************** NLP = 1 ;NUMBER OF LINE PRINTERS IN SYSTEM NLPRTY = 3 ;NUMBER OF L/P PRIORITY LEVELS LPBACK = 1 ;1 = BACKUP L/P WITH TTY BY OPER COMM 0 ;L/P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 EU ; PC (OF THIS CALL) QUEU ; QUEU JMP DSPTCH ;THEN LET DSPTCH DO ITS THING ; ; ; THE FOLLOWING ARE ERROR PROCESSING FUNCTIONS; SET IERR ; ACCORDING TO THE ERROR, THEN RETURN TO CALLER. ; ; QUEE70: INC (SP) ; QPART FULL QUEU QUEE60: INC (SP) ; OVERLAY FOR NON-OVERLAY PRIORITY LEV  ; 11. = INTERRUPT FROM ECHO OF ; CR AFTER EOM ; 12. = INTERRUPT FROM ECHO OF ; LF AFTER EOM ; 13. = INTERRUPT FROM OUTPUT OF ; A RUBOUT TO TURN ON TTY ; FOR INPUT . = CHTYPE+NTTYS TOFLAG: .BYTE 0,0,0,0,0,0,0,0 ;OUTPUT TIMEOUT FLAG WHERE AND LPVC.1 = 200 ;L/P # 1 INTERRUPT VECTOR ADDRESS LPVC.2 = 200 ;L/P # 2 INTERRUPT VECTOR ADDRESS LPVC.3 = 000 ;L/P # 3 INTERRUPT VECTOR ADDRESS LPVC.4 = 000 ;L/P # 4 INTERRUPT VECTOR ADDRESS LPDT.1 = 765010 ;L/P # 1 DATA BUFFER I/O ADDRESS LPDT.2 = 765010 ;L/P # 2 DATA BUFFER I/O ADDRESS LPDT.3 = 0 ;L/P # 3 DATA BUFFER I/O ADDRESS LPDT.4 = 0 ;L/  ;L/P # 4 WORD COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER ELQUEU QUEE50: INC (SP) ; ILLEGAL TASK NUMBERS QUEU QUEE40: INC (SP) ; DISABLED TASK QUEU QUEE30: INC (SP) ; ABORTED TASK WITH I/O IN PROGRESS QUEU QUEE20: INC (SP) ; TASK STATUS NON-QUIESCENT AND NOT ABRTQUEU QUEE10: INC (SP) ; TASK THREAD WORD NOT =1. QUEU CLR IRTRN(SP) ; FORCE RETURN TO CALLER QUEU MOV (SP)+,IERR-2(SP);  ; 1 = TIMEOUT OCCURRED ; 0 = NO TIMEOUT OCCURRED . = TOFLAG+NTTYS FRSTTO: .BYTE 0,0,0,0,0,0,0,0 ;FIRST TIMEOUT FLAG ; 1 = TIMEOUT ERROR MSG TYPEOUT ; PREVIOUSLY REQUESTED ; 0 = 1ST TIMEOUT HAS NOT OCCURED . = FRSTTO+NTTYS TOIFLG: .BYTE 0,0,0,0,0,0,0,0 ;INPUT TIMEOUT FLAG WHERE ; P # 4 DATA BUFFER I/O ADDRESS LFRG.1 = 765012 ;L/P # 1 LINE FEED REGISTER LFRG.2 = 765012 ;L/P # 2 LINE FEED REGISTER LFRG.3 = 0 ;L/P # 3 LINE FEED REGISTER LFRG.4 = 0 ;L/P # 4 LINE FEED REGISTER CNT.1 = 765014 ;L/P # 1 WORD COUNT REGISTER CNT.2 = 765014 ;L/P # 2 WORD COUNT REGISTER CNT.3 = 0 ;L/P # 3 WORD COUNT REGISTER CNT.4 = 0 ;L/P # 4 WORDSET ERROR STATUS FOR RETURN QUEU BR QUEC16 ; RETURN TO CALLER AFTER RESTORATION. QUEU ; ; ; THIS SECTION SETS UP THE REGISTERS, THEN LINKS TO QOVLAY TO ; PROCESS THE OVERLAY TASK REQUEST. THE STACK AT ENTRY TO ; QUEH00 AND JUST PRIOR TO THE JSR TO QOVLAY, LOOKS LIKE: ; ; ITASK CURRENT QUEU ; IPRTY (SYSGEN) QUEU ; IA 1 = TIMEOUT OCCURRED ; 0 = NO TIMEOUT OCCURRED . = TOIFLG+NTTYS TTYON: .BYTE 1,1,1,1,1,1,1,1 ;TELETYPE MOTOR ON/OFF FLAG ; 0 = ON ; 1 = OFF . = TTYON+NTTYS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM NXTSEC: .BYTE 0,0,0,0,0,0,0,0 ;NEXT SECTOR AVAILABLE(RELATIVE TO 1ST .BYTE 0,0,0,0,0,0,0,0 ;SECTOR OF FILE) FOR DISC MSG BUFFER .  COUNT REGISTER CMD.1 = 765016 ;L/P # 1 COMMAND REGISTER CMD.2 = 765016 ;L/P # 2 COMMAND REGISTER CMD.3 = 0 ;L/P # 3 COMMAND REGISTER CMD.4 = 0 ;L/P # 4 COMMAND REGISTER STAT.1 = 765016 ;L/P # 1 STATUS REGISTER STAT.2 = 765016 ;L/P # 2 STATUS REGISTER STAT.3 = 0 ;L/P # 3 STATUS REGISTER STAT.4 = 0 ;L/P # 4 STATUS REGISTER PLQI ; ND.E PLQI ; PC S RT PLQI C ND.E PLQI ; 30PLQI T BG PLQI E.BLTAC MINADY E.ON DNE OCHEAT UNCO; R0 C DE PLQI ; + 1)(R,@#1 V MO: 30PLQI PLQI RG (SYSGEN) QUEU ; IRTRN QUEU ; PC (FROM CALLER) QUEU ; R0 QUEU ; R1 QUEU ; R2 QUEU ; R3  = NXTSEC+NTTYS+NTTYS NXTMSG: .BYTE 0,0,0,0,0,0,0,0 ;NEXT MESSAGE SECTOR ADDRESS (RELATIVE .BYTE 0,0,0,0,0,0,0,0 ;TO 1ST SECTOR OF FILE) IN DISC MSG ;BUFFER . = NXTMSG+NTTYS+NTTYS DAVAIL: .BYTE 1,1,1,1,1,1,1,1 ;DISC FILE AVAILABLE .BYTE 1,1,1,1,1,1,1,1 ; 1 = AVAIL 0 = NOT AVAIL . = DAVAIL+NTTYS+NTTYS DBFULL: .BYTE 0,0,0,0,0,0,0,0 ;DISC BUFFER FILE FULL FLAG .BYTE 0,0,0,0,0,0,0,0 ; 1 = FULL 0 = ; ; LPSIZE = 132. ;NUMBER OF CHARACTERS IN L/P BUFFER LPMXTM = 180. ;MAX NO SECONDS LPRNTR WAITS FOR OPER ACTION LPINH = 4 ;INTERRUPT LEVEL OF L/P $NLINE = 56. ; MAX LINES/PAGE (=CONTROL TAPE. $LPERR = 10. . 1TO; R1B,TABM#A V MO PLQI ETES RBEO TEDNES RDWOD EAHR TERFFBU; R0S,MEAB#$ V MO PLQI O I/E AGESMET ORABF ILYONE OD CISTH; ESBM$A FG.I PLQI ; C ND.E PLQI USATSTS ERADLOE THR EACL; NOLD$RT+TATS RBCL PLQI KSAS TAYRLVE OVEHAF ILYON; AYRLOV Z FN.I PLQI MECOO TREMO;  QUEU ; R4 QUEU ; R5 QUEU ; TEMP ERROR STATUS CURRENT QUEU ; R3 (PS VALUE) ADDED FOR RPOM QUEU ; R4 (TASK #) QUEU ; R1 (PRIORITY-ALWAYS) QUEU ; ARG/0  NOT FULL . = DBFULL+NTTYS+NTTYS DWLIU: .BYTE 0 ;DISC WRITE I/O LIST IN USE FLAG ; 1 = IN USE 0 = AVAIL .ENDC ; ; .EVEN ; OLSTAD: .WORD 0,0,0,0,0,0,0,0 ;CURRENT OUTPUT LIST ADDRESS ;BIT 0 IS SET WHEN LIST ;RESIDES IN WORKING OUTPUT BUFFER . = OLSTAD+NTTYS+NTTYS ILSTAD: .WORD 0,0,0,0,0,0,0,0 ;CURRENT INPUT LIST ADDRESS . =  PSTP MOV $PCSAV,(R2)+ ; PUT ADDRESS OF TRAP IN THIRD ARG. PSTP MOV $PSTCT,(R2) ; PUT # OF ERRORS IN FOURTH ARG. PSTP JSR PC,LERTYP ; PSTP PSTC00 =. ; HERE WHEN MESSAGE, IF ANY, IS DONE. PSTP .ENDC PSTP .IFNZ $PST ; INCLUDE IFF USER TRAP HANDLER USED. PSTP .IFG $PST 20PLQI T BG PLQI E ONY BERNTOI PTEBYT ENEMCRDE; R0 C DE PLQI ERNTOU CRDWOE TH2 Y BETEMCRDE; ) R1-( T TS PLQIS.LEAB TAYRLVE OIPSKO TNTOI PERSFANTR; : 25PLQI PLQI ; ) R0Y(RTTP RBCL PLQI T)ULFADE (EDBLSADIO TUSATSTT SE; 0)(RATST,T#6 VBMO PLQI .)STXI E'TSNOE DSKTA, =1R DEEA(H; ) R1R(DEEA,H#1 V MO PLQI (ALWAYS) QUEU ; PC (CALL TO RPOM) ADDED FOR RPOM QUEU ; ; .IFNZ OVRLAY QUEH00 = . MOV R3,-(SP) ; SAVE R3 FOR LATER USE QUEU MOV R4,-(SP) ; PUT TASK NUMBER ON STACK QUEU MOV R1,-(SP) ; PUT PRIORITY ON STACK QUEU .IFZ ARG ; PUT EITHER A ZERO (IF NO PASSED QUEU CLR  ILSTAD+NTTYS+NTTYS QFIRST: .WORD 0,0,0,0,0,0,0,0 ;ADDRESS OF 1ST LIST IN CORE QUEUE .WORD 0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 . = QFIRST+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS QLAST: .WORD QFIRST,QFIRST+2 ;ADDRESS OF LAST LIST IN CORE QUEUE .WORD QFIRST+4,QFIRST+6 .WORD QFIRST+8.,QFIRST+10. .WORD QFIRST+12.,QFIRST+14. .WORD QFIRST+16.,QFIRST+18. .WORD QFIRST; ONLY INCLUDE IF ONLY USER ROUTINE PSTP TST (SP)+ ; GET RID OF PC FROM STACK PSTP MOVB (SP)+,@#PS ; RESET CPU LEVEL TO THAT BEFORE TRAP PSTP .ENDC PSTP JSR PC,UPST ; TRANSFER TO THE USERS ROUTINE PSTP .ENDC PSTP JMP DSPTCH ; FINALLY FINISH UP. PS C ND.E PLQI ; 25PLQI T BG PLQISKTAY LAEROVR FOS LEAB TERTH ODOT N'DO; SKTAMX,#R0 PBCM PLQI S SKTAY LAEROVE AV HIFY NL O; AYRLOV Z FN.I PLQI ESBLTAK AS THE TZELIIAITIN; 0)(RATSTIO RBCL: 20PLQI PLQI ; 1 ,RAXSMTAX+MAAS#T V MO PLQI S LEAB TSKTAP UET STOY ADRET GE; R0X,MAAS! -(SP) ; ARGUMENT) OR THE PASSED ARGUMENT QUEU .ENDC ; ON THE STACK. QUEU .IFNZ ARG ; QUEU MOV IARG+6(SP),-(SP); QUEU .ENDC QUEU JSR PC,QOVLAY ; CALL ON RPOM QUEU MOV (SP)+,R0 ; GET ERROR STATUS "+20.,QFIRST+22. .WORD QFIRST+24.,QFIRST+26. .WORD QFIRST+28.,QFIRST+30. .WORD QFIRST+32.,QFIRST+34. .WORD QFIRST+36.,QFIRST+38. .WORD QFIRST+40.,QFIRST+42. .WORD QFIRST+44.,QFIRST+46. .WORD QFIRST+48.,QFIRST+50. .WORD QFIRST+52.,QFIRST+54. .WORD QFIRST+56.,QFIRST+58. .WORD QFIRST+60.,QFIRST+62. . = QLAST+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS+NTTYS .PAGE ; ; #TP .IFLE $PST ; INCLUDE IFF ROS TRAP HANDLER USED. PSTP PSMES1: .WORD 1 ; ERROR BLOCK #1. THREAD WORD. PSTP .WORD 90. ; ERROR NUMBER PSTP .WORD 0,0,0,0 ; FOUR ARGUMENTS PSTP PSMES2: .WORD 1 ; ERROR BLOCK #2. THREAD WORD PSTP .WORD 90. ; ERROR NUMBER PSTP .WORD 0,0,0,0 ; FOUR#T V MO PLQI ET YGOO TREMO; 10PLQI T BG PLQI RDWOT EX NEXND ITO2 Y BR0T ENEMCRDE; 0 ,R#2 B SU PLQI ; ) R0T(AS,LR0 D AD PLQI STLAN ISTIR FOFS ESDRADE ACPL; ) R0T(AS,LSTIR#F V MO PLQI ROZEO TSTIR FZELIIAITIN; ) R0T(RSFI R CL: 10PLQI PLQI EXND IRDWOO NT IKEMA; R0 L AS PLQI S ELEV LTY% QUEU MOVB (SP)+,R3 ; RESET R3 (PS VALUE) QUEU TST R0 ; TEST STATUS QUEU BEQ QUEC15 ; ALL IS OK HERE QUEU BLT QUEE60 ; NON-OVERLAY PRIORITY QUEU BR QUEE70 ; QPART FULL QUEU .ENDC QUEU .PAGE ;***&; TELETYPE OUTPUT REQUEST PROCESSOR ; ; CALLING SEQUENCE -- ; ; MOV #LIST,-(SP) ;PUSH I/O LIST ADDRESS ON STACK ; EMT TTYOUT ;CALL TTYOUT ; TTYOUT = . JSR R5,PUSHR ;SAVE R0-R5 ON CURRENT STACK JSR PC,REQPP ;CALL REQUEST LIST PREPROCESSOR BNE TTOR20 ;BRANCH ON LIST ERROR .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION CLR R4 ' ARGUMENTS PSTP .ENDC PSTP $PSTCT: .WORD 0 ; TOTAL NUMBER OF TRAPS PSTP $OLDPS: .WORD 0 ; SAVE PS FROM BEFORE THE TRAP PSTP $PCSAV: .WORD 0 ; SAVE PC FROM BEFORE THE TRAP PSTP $TCODE: .WORD 0 ; TYPE OF TRAP. THE CODE IS: PSTP ; 1 = BUS ERROR (4) PSTP RIIOPRF OERMBNUT GE; 0 ,RLSVELE V MO PLQI ; NASYSB R CL PLQI ; VETIAC R CL PLQI ; ORRI$P R CL PLQI S LEABRIVAR EACL; SKTA$C R CL PLQI T INPOY TREN; =. PLQI PLQI ; PLQI )******************************************************************** ; * ; Q S A V E & Q S A V E I * ; * ; PROGRAM IDENTIFICATION: QSAVE & QSAVEI * ; QSAVE - SAVE A TASKS ENVIROMENT * ; QSAVEI - SAVE A TASKS ENVIROMENT AFTER* ;SET QLIST FOR OUTPUT QUEUING JSR PC,QLIST ;Q LIST TO PROPER UNIT/LEVEL QUEUE .ENDC JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TSTB TTO1ST(R1) ;IS THIS 1ST OUTPUT REQUEST FOR UNIT? BEQ TTOR45 ;YES, GO INITIATE OUTPUT .IFG MSGBUF TTOR02 = . TSTB DAVAIL(R3) ;IS DISC FILE FOR THIS DEV/LEVEL AVAIL BEQ TTOR30 ;NO, GO QUEUE REQUEST TSTB DBFULL(R3) ;IS+ ; 2 = RESERVED INSTRUSTION (10) PSTP ; 3 = DEBUG (14) PSTP ; 4 = IOT (20) PSTP ; 5 = POWER FAIL/RESTART (24) PSTP ; 6 = EMT (30) PSTP ; 7 = 'TRAP' (34) PSTP .END ; EF.D PLQI , NY AIFA RE ARECOC MINADYN IESGO; PLQI ONTIZALIIAITINE EUQUR FOT ECCSD MENA; UEUE.Q CTSE.C PLQI E AG.P PLQI**********************************************************************;* PLQI * ; PLQI * : ERMBNUE GULOTACA ; PLQI * - * ; AN INTERUPT * ; QSAVES - 'SAVE' ENTRY POINT-AVOIDS *QSVE ; ACTIVE CHECK AND CLEAR WHICH *QSVE ; IS DONE BY 'SAVE'. THIS *QSVE ; PERMITS CALLS AT LEVEL 7. *QSVE ; * ; . THIS DISC BUFFER FULL? BGT TTOR30 ;YES, GO Q LIST TSTB DWLIU ;IS DISC WRITE I/O LIST IN USE? BGT TTOR30 ;YES, GO Q LIST INCB DWLIU ;NO, SET DISC WRITE I/O LIST IN USE FLAG MOVB (SP)+,PS ;YES,RELEASE LOCKOUT MOV #DWLIST,R4 ;GET DISC I/O WRITE LIST ADDRESS JSR PC,DISCWT ;CALL DISC WRITE ROUTINE MOV ERROR(R0),R4 ;WAS THERE A DISK REQUEST ERROR? PSTP : ONSIVIRE ; PLQI * 1 97 1OV N10 : TEDA ; PLQI $ 53: ERMMRAOGPR ; PLQI * ; PLQI * L IP,QPC SR J E:AGUS ; PLQI * ; PLQI * . PL IBYD LEAL C. ESINOU RNGUIUE Q 1 * ; PURPOSE: THIS ROUTINE IS USED TO SAVE A TASKS ENVIRONMENT * ; WHENEVER IT IS SUSPENDED. IF THE SUSPENSION IS * ; INVOLUNTARY, THE ROUTINE UNSPND MAY BE CALLED TO * ; REQUEUE THE TASK. THE ARGUMENT ARG WHICH IS PASSED * ; ON THE TASK STACK WILL DETERMINE THIS FUNCTION. IF * ; AN OVERLAY TASK IS VOLUNTARILY SUSPENDED, THE * ; SUBROUTINE QSOVLY WIL2 BEQ TTOR10 ;NO CMP R4,#ERRMSZ ;YES, IS ERROR A MSG SIZE WARNING BEQ TTOR10 ;YES JSR PC,LOCOUT ;LOCKOUT INTERRUPTS BR TTOR30 .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION TTOR05 = . MOVB (SP)+,PS ;RELEASE LOCKOUT .ENDC ; ; EXIT PROCESSING FOR REQUEST ; TTOR10 = . CMPB TYPE(R0),#3 ;IS EXIT TYPE 3? ; PLQI * HE TINS LEAB TND AESBLIAAR VLL AOFN IOATIZALTINI IE:OSRPPU ; PLQI * ; PLQIE*EUQUR FOE INUTRON IOATIZALTINI I -PLQI: ONTICAFITIENIDM RAOGPR ; PLQI * ; PLQI * L P I Q ; PLQI * ; PLQI******************************5L BE CALLED TO CONTROL THE USE * ; OF THE PARATION. * ; * ; USAGE: BOTH ENTRY POINTS ARE USED WITH A 'JSR PC'. THE * ; ENTRY POINT 'QSAVE' IS USED UNLESS THE CALL IS THE * ; RESULT OF AN INTERRUPT IN WHICH CASE 'QSAVEI' IS USED.* ; * ; AT THE CALL T6BNE TTOR35 ;NO, MUST BE TYPE 1 OR 2 TTOR15 = . JSR R5,POPR ;POP REGISTERS OFF STACK MOV (SP)+,(SP) ;SWAP PC & LIST ADDR; POP STACK RTS PC ;RETURN ; ; PROCESSING FOR INVALID REQUEST ; TTOR20 = . MOVB ERRTSK(R0),R4 ;IS THERE AN ERROR TASK TO BE QUEUED? BEQ TTOR25 ;NO MOV R4,-(SP) ;YES, PUSH TASK NO. ON STACK .IFG DPRTY CLR ****************************************;* E AG.P E NUTION C ATHWIY WA AET GITT LET N'DO; RRPEDS BR ; LTHA: RRPEDS ; G.INTHD BAY ER V A -ORRR EOR FREHE; ; PC& S PTHBOS ET STI R. SKTAO TRNTURE; I RT ; R5+,P)(S V MO ; R4+,P)(S V MO ; R3+,P)(S V MO ; R2+,P)(S V MO ; R1+,P)(S V MO N IOCTRUSTIN1 RT);SP.(12),R1T(USCP VB9HE TASK STACK IS ASSUMMED TO LOOK AS * ; FOLLOWS: * ; * ; QSAVE QSAVEI * ; PC FROM TASK PS *QSVE ; PS FROM TASK PC *QSVE ; ARG ARGUMENT ARG * ; :-(SP) ;PUSH IPRTY ONTO STACK .ENDC .IFG ARG MOV ERROR(R0),-(SP) ;PUSH ERROR CODE AS ARG .ENDC CLR -(SP) ;PUSH IRTRN ONTO STACK JSR PC,QUEUE ;QUEUE ERROR TASK TST (SP)+ ;POP ERROR CODE OFF STACK TTOR25 = . CMP ERROR(R0),#ERRQL ;WAS THERE A QUEUEING ERROR? BEQ TTOR27 ;YES, THREAD WORD WAS ALLREADY RESTORED INC (R0) ;INCR MO OR FPCD OL HTOK ACSTF OOMTTBOE US; ) SP.(12 R CL RSTEISEG RORSTRE; R0),SP.(12 V MO ERNTOI PCKTA SSKTAT SE; P ,S1)(RCKTATS V MO PTDS E.AVQSR FOT IVESAD AN; E IM,TR2 V MO PTDS ; R NTOU,CR2 V MO PTDS ERIM TRTBO A'SSKTAT SE; 2 ,R1)(RERIMCT V MO ; =. 10PRDS ; NTMEONIRNV ERETOES R -SKTAD DEENSPSUG INRTTA= PC FROM JSR PC PC <== STACK POINTER* ; * ; AFTER THE CALL THE TASK STACK IS AS FOLLOWS: * ; * ; R0 * ; PC * ; R5 * ; >LIST THREAD WORD TO ORIGINAL STATE TTOR27 = . BR TTOR15 ;GO RETURN .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM ; ; CORE QUEUING WHEN REQUIRED IN A MESSAGE BUFFERRED SYSTEM ; TTOR30 = . CLR R4 JSR PC,QLIST ;Q LIST TO PROPER UNIT/LEVEL Q BR TTOR70 ;GO RELEASE LOCKOUT .ENDC TTOR35 = . CMPB TYPE(R0),#1 ;IS EXIT TYPE 1? BEQ TTOR15 ES ROR FREHE; ; PTDS . SKTAW NEE THO TGO; I RT PTDS I RTR FOK ACSTN OUEAL VPCT PU; ) SP-(),R1Y(TREN V MO PTDS I RTR FOK ACSTN O0) (UEAL VPST PU; ) SP-( R CL PTDS E.AVQSR FOT IVESAD AN; E IM,TR2 V MO PTDS ; R NTOU,CR2 V MO PTDS ERIM TRTBO A'SSKTAT SE; 2 ,R1)(RXTMA V MO . EAARK ACSTE THF OGEA R4 * ; R3 * ; R2 * ; R1 <=TOP OF STACK * ; * ; THE PROGRAM HEADER WILL MODIFIED AS SHOWN: * ; *B ;YES, RETURN TO CALLER .IFG MSGBUF TSTB SYSTEM+1(R0) ;TYPE 2, IS THIS 1ST OUTPUT REQUEST? BMI TTOR15 ;YES, TASK NEED NOT BE SUSPENDED .ENDC JSR R5,POPR ;RESTORE REGISTERS MOVB PS,2(SP) ;REPLACE LIST ADDR WITH PS CLR -(SP) ;PUSH ZERO ON STACK TO INDICATE JSR PC,QSAVEI ;VOL SUSPENSION, SUSPEND CALLING TASK JMP DSPTCH ;EXIT TO DISPATCHER ;EDW LO; E THO TERADHEE THM RO FETFSOFE TH; PTDS D AN, EAAR; P ,SR0 V MO PTDS K ACSTE THF OZESIE TH; 0 ,RSVEG#R D AD PTDS , SSREDD AERADHEM RAOGPR; 0 ,RR1 D AD PTDS S)TEBYO TFTHI(S ; R0 L AS PTDS E THG INDD ABYR TEINPO; R00,4077#1 C BI PTDS E ; WORD 7, BYTE 0 - TASK PS (FROM STACK IF QSAVEI * ; OR ON ENTRY IF QSAVE)* ; WORD 5 - CURRENT TIMER * ; WORD 8 - TOP OF TASK STACK AFTER ALL * ; PUSHES TO SAVE * ; REGISTERS * ; F ; PROCESS 1ST OUTPUT REQUEST FOR A UNIT ; TTOR45 = . INCB TTO1ST(R1) ;RESET 1ST REQUEST FLAG FOR THIS UNIT .IFG MSGBUF ;ASSEM FOLLOWING FOR A MSG BUF SYSTEM MOVB (SP)+,PS ;RELEASE LOCKOUT MOV TTOBUF(R5),R4 ;GET ADDR OF WORKING OUTBUF FOR UNIT ADD #TTRLST,R4 ;MOVE INDEX TO WHERE TTY LIST WILL GO JSR PC,MOVLST ;MOVE LIST AND MSG DATA TO OUTPUT BUFFER INC R4 K ACSTL IAITINE UTMPCO; 0 ,R1)(RZESI VBMO ; =. 10PNDS ; K AS TEW NOR FREHE; ; . ITO DGO D.DEENSPSUS WA; 10PRDS E BN O ERNZNO; EW=NROZE. ERNTOI PCKTA SSTTE; 1)(RCKTATS T TS PTDS E BLUAUE QTOD OR WADRETHE THT SERE; ) R1,(#1 V MO PTDS R TEINPOK ACSTM TEYS SVESA; CKTA,SSP V MO PTDS . ORRI$PT SE; R IOPR,$R2 VBMO PTDSI * ; THE TASK TABLE WILL HAVE THE TASK STATUS SET AS SHOWN:* ; * ; 2 - TASK INVOLUNTARILY SUSPENDED - RE-QUEUED *QSVE ; 4 - TASK VOLUNTARILY SUSPENDED *QSVE ; 5 - TASK INVOLUNTARILY SUSPENDED *QSVE ; * ; THE TYPE OF CALL ON QSAVE &J ;SAVE CURRENT LIST ADDRESS, SET MOV R4,OLSTAD(R5) ;LSB TO INDICATE WORKING BUFFER .ENDC .IFZ MSGBUF MOV R0,OLSTAD(R5) ;SAVE CURRENT OUTPUT LIST ADDRESS .ENDC .IFG MSGBUF ;ASSEM FOLLOWING FOR A MSG BUF SYSTEM JSR PC,LOCOUT ;LOCKOUT INTERRUPTS .ENDC TSTB TTYPRT(R1) ;IS UNIT BUSY .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BPL TTOR02 ELEV LTYRIIOPRE RU TTOINT IFSH; R2 R AS PTDS VETIACO TUSATSTT SE; ) R5T(TATS CBIN PTDS SKTA$CT SE; K ASCT,$R5 VBMO: 30PLDS PTDS L.VELES HI TINY TRENT EX NCKHE CGO; 25PADS BR PTDS D ANS PTRUERNT IOWLL A. EDEUQUT NO; PS@# RBCL PTDS E.ATSTE IVCTNA ITOT SERE; VETIAC R CL PTDS T. IDOO G. EDEUQUS IT; M QSAVEI IS DETERMINED BY * ; THE VALUE OF THE ARGUMENT ARG ON THE STACK. ITS VALUES* ; ARE: * ; * ; NEGATIVE - INVOLUNTARY SUSPENSION NO-REQUEUE* ; POSITIVE - INVOLUNTARY SUSPENSION RE-QUEUE * ; EQUAL ZERO - VOLUNTARY SUSPENSION * ; N ;YES, GO PUT MSG IN DISC Q INC (R0) ;INCR USER LIST THREAD WORD TO ONE COMB SYSTEM(R4) ;SET FLAG TO NOT SUSPEND TASK ;BY COMP BYTE 1 OF SYSTEM WORD .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BPL TTOR05 ;YES, GO EXIT .ENDC MOVB #1,TTYPRT(R1) ;SET UNIT PRIORITY TO OUTPUT TTOR60 = . MOVB (SP)+,PS ;RELEASE LOCKO 30PLDS Q BE PTDS USATSTK ECCH; #2),R5T(TATS PBCM PTDS R.BEUM NSKTAT GE; 5 ,R1)(RNOSKTA SBBI PTDS . ADLOE YT BOR FR5R EACL; R5 R CL PTDS E.OND UNFO; =. 20PLDS PTDS STIR FTO; ) R2T(AS,LSTIR#F D AD PTDS T INPOO TSTLAT SERE T.EF LNENO; ) R2T(AS,LR2 V MO . TSISEXR Q * ; NOTE: IF UNSPND IS CALLED TO RE-QUEUE THE SUSPENDED * ; TASK, THE PRIORITY LEVEL WILL BE TAKEN FROM * ; THE PROGRAM HEADER. * ; * ; PROGRAMMER: 53 * ; DATE: 20-AUG-71 * ; VERSION: V001A RUT JSR PC,TOINIT ;INITIALIZE OUTPUT OF A MESSAGE BR TTOR10 ;GO EXIT .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM TTOR70 = . MOVB (SP)+,PS ;RELEASE LOCKOUT BR TTOR10 ;GO EXIT .ENDC .PAGE ; ; TELETYPE INPUT REQUEST PROCESSOR ; ; CALLING SEQUENCE -- ; ; MOV #LIST,-(SP) ;PUSH I/O LIST ADDRESS ON STACK ; EMT TTYIN HEOTANE UR SKEMA E.EUQU; 20PLDS E BN PTDS INT EX NTOT INPOO TT'RSFI 'VEMO; 2)(RSTIR,F1)(R V MO VETIACT SE; E IVCT,AR1 V MO PTDS !!AD BAD BAD B; RRPEDS OSBL PTDS RECON IISD ANS STXI ESKTAE UR SKEMA; 1 ,#R1 P CM R DEEA HOFS ESDRADT GE; R1),R2T(RSFI V MO PTDS H.RCEA SRTTAES RGO S.YE; CHPTDS E BN PTDS T?SEG LAU * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF QSAVE,QSAVEI,QSAVES ; QSVE .REF STACK ; QSVE .IFNZ OVRLAY ; V ;CALL TTYIN ; TTYIN = . JSR R5,PUSHR ;SAVE R0-R5 ON CURRENT STACK JSR PC,REQPP ;CALL REQUEST LIST PREPROCESSOR BNE TTOR20 ;BRANCH ON LIST ERROR MOV #2,R4 ;SET ARG FOR QUEUING OF INPUT LIST JSR PC,QLIST ;NO, QUEUE REQUEST LIST JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TSTB TTI1ST(R1) ;IS THIS 1ST INPUT REQUEST FOR UNIT? .IFG MSGBUF ;AS FHE TIS; NASYSB T TS PTDS S PTRUERNT ILL AUT OCKLO; S #P,@40#3 VBMO ; =. 10PLDS ; SKTAD UEUE Q AADLOO TREHE; ; PTDS . CHARSEE EUQUA G INSHNIFI; CHPTDS BR ; ; =. 69PWDS D BAD BAD BA; LTHA . NO; 69PWDS Q BE ? NGPIEECRK ACSTM TEYS SHE TIS; CKTASS,#SP P CM CKTASS EF.R ; UT OCKHE COR FLYON; ; . ITO DY QSVE .REF QSOVLY ; QSVE .ENDC QSVE ; QSVE ; QSAVE ENTRY POINT QSVE ; QSVE QSAVE =. ; QSVE MOV 6.(SP),-(SP) ; ZSEM FOLLOWING FOR MSG BUF SYSTEM BGT TTOR70 ;NO, GO EXIT .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BGT TTOR05 ;NO, GO EXIT .ENDC ; ; PROCESS 1ST INPUT REQUEST FOR A UNIT ; INCB TTI1ST(R1) ;RESET 1ST REQUEST FLAG MOV R0,ILSTAD(R5) ;SAVE CURRENT INPUT LIST ADDRESS TSTB TTYPRT(R1) ;IS UNIT BUSY? .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG GO S.YE; 20PADS T BG PTDS K?ECCHO TLSVELEE OR MNY A. NO; 2 ,RR4 P CM . ITD OA LGO S.YE; 10PLDS E BN PTDS ? ELEV LISTHN INGHIYTAN; ) R2T(RSFI T TS: 25PADS PTDS 2)L=VELET RSFIX(DEINL VELET ENEMCRIN; 2 ,RR3 D AD PTDS S.YE; CHPTDS E BN PTDS ? CHARSET ARSTRE; NASYSB T TS: 20PADS 3. RTOINT ENEMCRINX DE]REVERSE ORDER OF PC & PS ON STACK QSVE MOV 6.(SP),8.(SP) ; TO CONFORM TO QSAVEI CALL - THE QSVE MOV (SP)+,4.(SP) ; MOST COMMON QSVE ; * ; QSAVEI ENTRY POINT - ONLY IF INTERRUPT CAUSED CALL QSAVEI =. MOVB @#PS,-(SP) ; SAVE PS QSVE MOVB #340,@#PS ; LOCK OUT ALL INTERRUPTS QSVE TST ^BUF SYSTEM BPL TTOR70 ;YES, GO EXIT .ENDC .IFZ MSGBUF ;ASSEM FOLLOWING FOR CORE VERSION BPL TTOR05 ;YES, GO EXIT .ENDC CLRB TTYPRT(R1) ;SET INPUT/OUTPUT PRIORITY TO INPUT BR TTOR60 ;GO INITIALIZE INPUT FOR UNIT .PAGE .CSECT .TTYIN ; ; ; TTINIT -- TTYIO INITIALIZATION ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,TTINL VELET PU; 3 ,R#2 V MO ERNTOU CELEV LASE USO TR2R EACL; R2 R CL PTDS X DEIND OR W ATOT IFSHN HE T4, RTOIN; R4 L AS PTDSS ELEV LTYRIIOPRF OERMBNUT ENRRCUT PU; 4 ,RLSVELE V MO D.BAS ASTJU S.YE; RRPEDS E BN ? UTKOOC LSKTAR DEUNG INNNRU; G LAMF T TS D BA, AD BD,BA S.YE; RRPEDS E BN ? NGNIUN RNGHIYTAN; VETIAC T TS PTDS a ACTIVE ; IS A JOB ACTIVE? QSVE BEQ QSI300 ; NO. RETURN QSVE CLR ACTIVE ; PREVENT DOUBLE SUSPENSION QSVE ; MOVB (SP)+,@#PS ; OLD WAY - DDS DISK TO FAST QSVE MOVB (SP)+,QSVPS ; LEAVE IN LOCKOUT AND SAVE PS QSVE ; ; THE TASK STACK NOW LOOKS THIS WAY: ; PS ; PC (TASK PC) ; ARG ; PC (bINIT ; TTINIT = . JSR R5,PUSHR ;SAVE REGISTERS MOV #TTICSR,R0 ;CLEAR TTY CONTROL STATUS REGISTERS TTIN10 = . CLR @(R0)+ CMP R0,#TTIDBR BLO TTIN10 MOV #1,R1 .IFG MSGBUF MOV #DRLIST,R0 ;INIT THREAD WORD OF DISC REQUESTS TTIN15 = . MOV R1,@(R0)+ CMP R0,#DWLIST BLO TTIN15 MOV R1,DWLIST .ENDC . E)OVABE SE (AGFLR EACL; NASYSB R CL PTDS TSUPRRTEINL ALW LOAL; PS@# RBCL T INPOY TREN; =. CHPTDS PTDS . H)IT WINEG BTOO ER ZAS WIT; PTDS SSLEUN( R'NTOU'CN IUEAL VHE TANTH; PTDS S ES LNE OBEL IL WR'METI'CN IEDORST; PTDS UEAL VHE T=,F I. R'NTOU'CO TE'IM'T; PTDSeFROM JSR PC) <=== TASK STACK POINTER QSVE ; ; COMMON CODE -- QSAVE, QSAVEI, AND QSAVES QSVE ; QSVE ; QSAVES ENTRY POINT - ONLY FROM 'SAVE' WHICH CHECKED AND CLEARED ACTIVEQSVE QSAVES =. ; QSVE MOV R3,-(SP) ; SAVE R3 ON TASK STACK QSVE MOV R2,-(SP) ; SAVE R2 ON TASK STACK f MOV R1,ERRMOD ;INIT THREAD WORD OF ERROR MODULE MOV #ITIME0,R0 ;INIT THREAD WORD OF TIMERS TTIN20 = . MOV R1,(R0) ADD #ITIMSZ,R0 CMP R0,#ITIMFB BLO TTIN20 MOV #TTYPRT,R0 ;CLEAR BLOCK OF VARIABLES TTIN25 = . CLRB (R0)+ CMP R0,#QLAST BLO TTIN25 MOV #TTYPRT,R0 ;SET UNIT STATUS FLAGS TO NOT BUSY MOV #-1,R2 TTIN30 = . ESARMPCOE AVQS N.IOUTECEXS HI TOF; PTDS T ARSTT AUEAL VERIMCTS K'AS TVETIAC; 0 D OR.W : METI PTDS H.TCSP DOFG INNNGIBE; PTDSHE TATD REEACLS IAGFLE TH T.UPRRTEIN; PTDST RSFIE THN OVETIACE ARS SKTAO NENWH; PTDSE AV SBYT SES IAGFLE TH ).EDCHATSPDI; PTDS S IITE OREF BUT(BD UNFOS ISKTA; i MOV R1,-(SP) ; SAVE R1 ON TASK STACK MOV +8.(SP),R1 ; GET ARG FROM STACK MOV R5,+8.(SP) ; SAVE R5 ON TASK STACK MOV $CTASK,R2 ; PUT ADDRESS OF PROGRAM HEADER QSVE ASL R2 ; MAKE R2 INTO WORD INDEX QSVE MOV HEADER(R2),R2 ; INTO R2. DON'T HAVE TASK NUMBER QSVE MOVB 12.(SP),CPUST(R2) ; SAVE PS IN TASK HEADER QSVE MOV R0,+12.(SP) j MOVB R2,(R0)+ CMP R0,#TTO1ST BLO TTIN30 TTIN35 = . CLRB (R0)+ ;SET FIRST REQUEST FLAGS CMP R0,#TTORPT BLO TTIN35 MOV #TTYON,R0 ;SET TTY ON/OFF FLAG TO OFF TTIN40 = . MOVB R1,(R0)+ .IFZ MSGBUF CMP R0,#OLSTAD .ENDC .IFG MSGBUF CMP R0,#NXTSEC .ENDC BLO TTIN40 .IFG MSGBUF PTDS A N HE WORD HERCEA SISL VELEW NEA ; PTDSR HEIT EENWHN PEAP HLLWIS HI T. CHARSE; PTDSE EUQUS ITT ARSTRET US MERCHATSPDIE TH; PTDS ND AONS IITE ONO TALQU EIST IENWH; PTDS . FF OIST IROZEO TALQU EIST IENWH; PTDS . CHARSES R'HETCPAIS DHE TRTTAES RTO; PTDS ENm ; SAVE R0 ON TASK STACK MOV SP,TSTACK(R2) ; SAVE TASK STACK POINTER IN HEADER MOV +6(SP),R0 ; SAVE PC VALUE TO RETURN MOV R4,+6(SP) ; SAVE R4 ON STACK CLR R4 ; CLEAR R4 FOR BYTE LOAD QSVE BISB TASKNO(R2),R4 ; GET TASK NUMBER FORM TASK HEADER QSVE ; MOVB @#PS,R3 ; OLD WAY - DDS DISK TO FAST QSVE MOVB (PC)+,R3 ; SAVE PS NOW IN R3 FOR RESTORE nMOV #DAVAIL,R0 ;SET DISC FILE AVAIL FLAGS TO AVAIL TTIN50 = . MOVB R1,(R0)+ CMP R0,#DBFULL BLO TTIN50 .ENDC MOV #QLAST,R0 ;SET QLAST TO QFIRST MOV #QFIRST,R1 TTIN60 = . MOV R1,(R0)+ TST (R1)+ CMP R1,#QLAST BLO TTIN60 JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE .CSECT ; ; WHE INRMTEDEO TRETOES/RVESAD AN; PTDSR HETCPAIS DHE TBYE USR FOG LA FNEFIDE; 0 D OR.W: NASYSB PTDS ; K ACST EF.R PTDS ; NASYSB EF.D NTOI PRYNT ENEFIDE; CHPTDS EF.D E AG.P **********************************************************************;* * qLATER QSVE QSVPS: .WORD 0 ; PS STORAGE QSVE MOVB #340,@#PS ; LOCK OUT ALL INTERUPTS QSVE MOV STACK,SP ; SWITCH TO SYSTEM STACK MOV R0,-(SP) ; PUT RETURN PC ONTO SYSTEM STACK MOV COUNTR,R0 ; GET CURRENT ABORT TIMER.(R0 FASTER QSVE BEQ QSI030 ; THAN @R0). ZERO? ALREADY TAKEN CARE QSVE CMP R0,TIME ; OF. NOT ZERO. HAS IT Cr ; PRTINT -- TTY PRINTER INTERRUPT ROUTINE ; ; CONDITIONS UPON ENTRY -- ; ; TTY UNIT NO. IS CONTAINED IN BITS 0-3 OF PS ; AS PROVIDED BY INTERRUPT VECTOR FOR ; INTERRUPTING UNIT ; ; ROUTINE IS ENTERED AT PRIORITY LEVEL OF UNIT VECTOR ; ; PRTINT = . SAVE ;CALL SAVE ROUTINE MOVB PS,R1 ;GET PS PROVIDED BY INT VECTOR BIC #177760,R1 ;UNIT NO. IS IN BITS 0-3 D EN . C ND.E N URET;R PC S RT R1+,P)(S V MO RSTEISEG RRETOES;R R4+,P)(S ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S29 : TEDA ; * 53: ERMMRAOGPR ; * ; * . TSISEXN IOITNDCOR ROERN AH,TCSP D ; *O TRYNT EONO ERNZNOS IG'LAMF 'OR' VETIAC 'ERTHEIF IuHANGED FROM QSVE BNE QSI030 ; DISPATCHING? YES. OK THEN. QSVE DEC R0 ; HASN'T CHANGED. WE WILL DECREMENT IT.QSVE BGT QSI030 ; IF GREATER THAN ZERO WE ARE DONE. QSVE DEC R0 ; IF ZERO MUST MAKE NEG. FOR THE TIMER. QSVE QSI030: MOV R0,CTIMER(R2) ; SAVE VALUE IN HEADER FOR NEXT DSPT. QSVE CLR COUNTR ; CLEAR TIMER FOR THIS TASK. MOV #1,(R2) ; SET v OF PS MOV R1,R5 ;USE UNIT NO. AS INDEX TO ASL R5 ;WORD TABLES JSR PC,LOCOUT ;LOCKOUT INTERRUPTS TSTB TOFLAG(R1) ;HAS TIMEOUT ALREADY OCCURRED? BNE PRTA05 ;YES, IGNORE THIS INTERRUPT MOV OTIMER(R5),R4 ;GET ADDRESS OF TIMER FOR THIS UNIT MOVB #TTOTIM,TCNTR(R4) ;PUT COUNT INTO TIMER MOVB (SP)+,PS ;RELEASE LOCKOUT MOVB #NTRYS,TTORPT(R1) ;SET REPE V MO F OFO TUSATSTT NI UET;S ) R1N(YOTT CBIN R1 R AS ESBLTAD OR WTOX DEINT NI UET;G R1 L AS E YT BAGFLR METIM RO FNOT NI UET;G 1 ,RFBIMWT VBMO P)(S,-R4 V MO S ERSTGIREE AV;S P)(S,-R1 V MO . = ONYOTT ; ; EDEUQUDES IERIM TITWA ; FF OTOT SES IG)LA FFF/OONT NI(UN YOTT ; ; - -ITEXN PO UNSIOITNDCO ; ; E YT BAGFLR METIT AI WIND NEAINTCO ; * ; * S.ROY BEDEVCIRES IPTRUERNT I ; * N AERFT AFTLEE BLYONL IL WCHHI WOPLOT AI W AERNT E ; L*IL WIT, EDEUQUY TLENRRCUE ARS SKTAO NATTHS NEMIERET D ; * CHPTDSF I. ERLLCAE THO TEDRNTURER VENES IOLTRON C ; * ; * H TCSP DP JMyTHREAD WORD TO 1 (QUEUEABLE) QSVE TST R1 ; VOLUNTARY OR INVOLUNTARY? BNE QSI100 ; BRANCH IF INVOLUNTARY MOVB #4,TSTAT(R4) ; SET STATUS TO VOLUNTARY SUSPENSION. QSVE .IFNZ OVRLAY ; ROS 2 OR ROS 1? ONLY PUT IN CALL IF 2. CMPB R4,#OVTMIN ; IS THIS ANY OVERLAY TASK? QSVE BLO QSI200 ; NO. GO ALLOW INTERRUPTS AND RETURN. QSVE MOVB #1,TSTAT(R4) ; YES. SEzAT COUNT TO NO. OF TRYS MOVB CHTYPE(R1),R4 ;GET CHARACTER TYPE ASL R4 ;MAKE INDEX FOR BRANCH TABLE = 2*CHTYPE JMP @PRTA10(R4) ;BRANCH ON CHAR TYPE PRTA05 = . CLRB TOFLAG(R1) ;CLEAR TIMEOUT FLAG JMP PRTA93 ;GO RETURN ; ; ; BRANCH ON CONTENTS OF CHTYPE ; PRTA10 = . .WORD PRTA15 ;INTERRUPT FROM CHAR OF OUTPUT MSG .WORD PRTB10 ;ECHO OF INPUT CHAR S IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ; N OOTY,TPC R JS ; ; - -CEENQUSEG INLLCA ; ; NETIOU RUTEOIM TERIM TITWAY TT- -ONYOTT ; ; ; E AG.P RNTURE ; C P TS R 7 L VELEY ITORRI PTOU CPT SE ; PS0,34 # B IS B S ESDRADN URET RVEBO APST ERNS;I P)(S,2PS VBMO RDWOE ONN OW DSSREDD ARNTUREH US;P P)(S,-P)(S V MO . =T OUOC L; UTCOLOC, P SR J ; * ; * : ONTIUCTRNS I ; * G INOWLLFOE THY BCHPTDSO TEDSSPAS IOLTRON C E:AGUS ; * ; * . EDORSTRET ENOMIRNV EIRHE T ; *VEHAS SKTAD DEENSPSU S.SKTAD TECUXENE UND AEDNDPEUS S ; * THBOS LEAD HCHPTDS K.AS TEDEUQUY }T RPOM'S STATUS QSVE MOVB R3,@#PS ; ALLOW INTERRUPTS BEFORE RPOM CALL QSVE MOV R4,-(SP) ; AND PUSH TASK NUMBER QSVE JSR PC,QSOVLY ; LET RPOM HANDLE THE PARTITION ASSIGN. .ENDC .IFZ OVRLAY ; NEED THIS CODE ONLY QSVE MOVB R3,@#PS ; FOR ROS 1. ROS 2 USES QSI200. QSVE .ENDC ~ .WORD PRTB30 ;ECHO OF LF .WORD PRTB40 ;ECHO OF CR .WORD PRTB50 ;ECHO OF "U" .WORD PRTB60 ;ECHO OF "^" .WORD PRTB80 ;ECHO OF 1ST "^" .WORD PRTB90 ;ECHO OF "\" .WORD PRTC10 ;ECHO OF EOM CHAR .WORD PRTC20 ;INT FROM OUTPUT OF LF .WORD PRTC30 ;INT FROM OUTPUT OF CR .WORD PRTC40 ;ECHO OF CR AFTER EOM .WORD ;; --E NCUEEQ SNGLIAL C ;; 7)O TRI PPU CTSSE (TSUPRRTEINT OUCKLOO TNETIOUBRSU- -UTCOLO ; ;; GEPA . C ND.E 47TAPR P JM VESA ) SP-(6,R5TD#T V MO NETIOU;R T UPRRTEINR TEINPRO TCEANTRENE AK;M P)(S,-PS VBMO ESBLTAD OR WTOX DEINT NI UASD SE U; R5 L AS ITUN2*= X DEINT GE ; R51, R OV M . NOT NI UET;G R1 R AS ITORRI PSTHEIG H ; *HE TTETA SVETIACE THN ICELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * K.AS TEDEUQUT ESGHHIE ATIVCT-ACHPTDS: ONTICAFITIENIDM RAOGPR ; * ; * H C T P S D ; **********************************************************************;* E AG.P SPUN QSVE QSI050: RTS PC ; DONE WITH VOLUNTARY SUSPENSION. ; RETURN TO CALLER. QSI100 =. ; HERE FOR INVOLUNTARY SUSPENSIONS BLT QSI200 ; INVOLUNTARY BUT DON'T RE-QUEUE QSVE ; DO OWN REQUEUING HERE ON FRONT OF QUEUE TO SAVE TIME MOVB #2,TSTAT(R4) ; SET STATUS FOR QUEUED QSVE MOVB HPRIOR(R2),R0 ; GET PRIORITY LEVEL TO REQUEUE AT ASL R0 ;  PRTC50 ;ECHO OF LF AFTER EOM,CR .WORD PRTC60 ;INT FROM OUTPUT OF RUBOUT TO TURNON TTY ; ; ; PROCESS INTERRUPT FROM CHAR OF OUTPUT MSG ; PRTA15 = . INCB TTCURS(R1) ;INCREMENT CURSOR CMPB TTCURS(R1),#LINELN ;END OF LINE? BHIS PRTA30 ;YES PRTA17 = . MOV OLSTAD(R5),R0 ;NO, GET CURRENT LIST ADDRESS .IFG MSGBUF BIT #000001,R0 ;IS DATA IN WORKING OUTPUT BUFFER? LEABILVANA ULEFIT SE ; ) R1L(AIAV D B LR C L VELE+ T NI*U 2= X DEINT GE ; 1 R SR A D REURCC OCHAT MREHE WEXND ILEAB TET GS,YE ; 1 ,R+2IDLEFI # UB S O ;N 70DRTT E BN E?BLTAD ILEFIN IRYNT ECHAT MMENAS OE;D )+R1,(R3 P CM . =0 R7TD TR TEINPOE BLTAD EIIL FITIN ; 1 ,RIDLEFI # OV M R FEUF BADREM RO FIDE IL FET;G R3),R1A(AT@D V MO . =0 R6TD T; TYRIIOPRT/NI UOR F QRECOO TRTVEON CR,ROER ; 00SDUN BR SPUN ERUSO TRNTUREE RCFO; ) SPN(TRUR R CL SPUN USATSTL GALEIL; P)(S C IN: 10SEUN SPUN OMRP; P)(S C IN: 20SEUN SPUN R BEUM NSKTAL GALEIL; P)(S C IN: 30SEUN ; S ORRR EOR FREHE; ; . NGHI T'SITO DERCHATSPDIE THT LE; CHPTDS P JM SPUN NDPEUSMAKE RO AND R4 INTO WORD INDEX QSVE ASL R4 ; DON'T NEED TO RESTORE QSVE MOV FIRST(R0),@HEADER(R4) ; MAKE TASK'S HEADER POINT TO QSVE ; OLD HEAD OF QUEUE (IF ANY). QSVE BNE QSI175 ; AVOID NEXT INST. IF NON-EMPTY QSVE ; QUEUE QSVE MOV HEADER(R4),LAST(R0) ; SET LAST POINTER TO HEADER QSVE BEQ PRTA20 ;NO, DATA IS IN USERS BUFFER DEC R0 ;STRIP OFF LSB MOV R0,R4 ;TO GET LIST ADDRESS ADD #DATA,R4 ;SET POINTER TO MSG DATA IN OUTPUT BUF BR PRTA25 .ENDC PRTA20 = . MOV DATA(R0),R4 ;SET POINTER TO MSG DATA IN USERS BUF PRTA25 = . INC CHCNT(R4) ;INCR CHAR COUNT CMP CHCNT(R4),(R4) ;HAVE ALL CHAR BEEN OUTPUT? BHIS D EA RSCDI ; ;N URET;R PC S RT . = 56DRTT UTTPOUR OUTNP IZELIIAITIN ; ITINTOC, P SR J . =0 R5TD TT OUCKLOE ASLERE ; S ,P)+SP ( B OV M RDWOD EAHR TROZE ; ) R0 ( EC D C IS DONT PUT US JSTLIE EUQUDE ; STLIDQC, P SR J TSUPRRTEINT OUCKLO ; UTCOLOC, P SR J T ISQL DUTTPOUR FOG RET SE ; 4 R LR C . =0 R4TD T NO ; 0 R5TD T NE B G?INRN SGO; I VESA,QPC R JS SPUN ONSIENSPSUY ARNTLUVOINR FOT SE; P)(S,-#1 V MO SPUN 1 VESA QOR FCKTA SONS PVEMO; P)(S-2VESA-URNRT,UPS@# VBMO SPUN ERCHATSPDIE THN OLLCA; =. 30SDUN ; P S== < PC ; USATST ; ; : RNTUREN OAY WISTHS OKLOK ACST; ; RNTURE; PC S RT SPUN . RG ARNTUREO NT OPCE OV M. RNTURE; P)(S+,P)(S V  QSI175 =. ; QSVE MOV HEADER(R4),FIRST(R0) ; SET OR RESET FIRST POINTER QSVE QSI200 =. MOVB R3,@#PS ; ALLOW INTERRUPTS QS1250: RTS PC ; RETURN TO CALLER QSVE QSI300: MOVB (SP)+,@#PS ; ALLOW INTERRUPTS QSVE MOV (SP)+,(SP) ; RESET STACK FOR RETURN FROM ERROR QSVE MOV (SP)+,(SP) ; PRTA40 ;YES ADD CHCNT(R4),R4 ;ADD CHAR COUNT TO POINTER MOVB MSGDAT(R4),@TTODBR(R5) ;OUTPUT NEXT CHAR CMPB MSGDAT(R4),#CR ;IS CHAR A CR? BEQ PRTA35 ;YES BR PRTA37 ;NO, GO RETURN PRTA30 = . MOVB #CR,@TTODBR(R5) ;OUTPUT A CR PRTA35 = . MOVB #10.,CHTYPE(R1) ;SET CHAR TYPE TO OUTPUT MODE CR PRTA37 = . JMP PRTA85 ; ; DO POST PROCESSING FOWAE IZ SSG M AORRR EIS ; Z MSRR#E4, R MP C NO ; 0 R4TD T EQ B ? ORRR ESTUEEQ RSCDIA E ERTHS WA ; 4 ,R0)(RORRR E OV M E INUTROE ITWRC IS DLLCA ; WTSCDIC, P SR J S ESDRADT IS L/O ISCDIT GE ; 4 ,RT2LSDW # OV M R32, R DD A ESBLTAE IL FSCDIO TEXND IKEMA ; R35, R OV M S YE ; 0 R5TD T NE B Y?US BSTLIE ITWRC IS DIS ; #12,STWL D MP C . =0 R3TD TL MAOR NTOL VELET SE ; }MO H.TCSP DSE U. =1; 30SDUN T BG SPUN DECON URET RSTTE; ) SP2(E-AVUSN-TRUR T TS C ND.E SPUN C ND.E SPUN . GSREL ALE ORSTRE; R OP,PR5 R JS SPUN N IORSVEY LAEROVF ILYON; AYRLOV Z FN.I SPUN C ND.E ; R1+,P)(S V MO ; | QSVE MOV (SP)+,(SP) ; QSVE RTS PC ; RETURN QSVE .PAGE ;*********************************************************************** ; * ; S U S P N D * ; * ; PROGRAM IDR A REQUEST ; PRTA40 = . MOV OTIMER(R5),-(SP) ;DEQUEUE TIMER MODULE FOR THIS UNIT JSR PC,DQTIME TST (SP)+ CLRB @TTICSR(R5) ;DISABLE KBD INTERRUPT CLRB @TTOCSR(R5) ;DISABLE PRT INTERRUPT MOV ERROR(R0),R3 ;ANY ERROR FLAGS IN ERROR WORD? BEQ PRTA41 ;NO MOVB ERRTSK(R0),R4 ;IS THERE AN ERROR TASK IN LIST? BEQ PRTA41 ;NO MOV R4,-(SP) 2 R LR C NO ; 0 R5TD T EQ B Q?T PUUT OALRMNON INGHIYTAN ; R0),R4T(RSFI Q OV M UTTPOUL MAOR NTOR TEINPOQ T SE ; 4)(R - ST T S YE ; 0 R3TD T NE B E?EUQUI PRN INGTIAI WTSESQUREY AN ; R0),R4T(RSFI Q OV M 4 RTOR TEINPOE BLTAQ T GE ; X TQGEC, P SR J Y ITORRI PTOL VELET SE ; R21, # OV M ESEUQUT PUUT OOR FAGFLT SE ; 4 R LR C G LA FLLFUE IL FERFFBUC ISy R2+,P)(S V MO ; R3+,P)(S V MO ; R4+,P)(S V MO SPUN S SKTAY LAEROVN-NOF ILYON; AYRLOV FZ.I Y.ANF IS,ERSTGIRED VESAL ALE ORSTRE; VESARG Z FN.I SPUN N URET ROR FUSATSTR ROERT SE; P)(S-2RRUE+,P)(S V MO . TSUPRRTEINW LOAL; S #P,@R3 VBMO SPUN P. USHNIFIO TREHE; =. 00SDUN ) =2 (. EDEUQUO TUSATSTT SE; ) R4T(TATSxENTIFICATION: SUSPND * ; * ; PURPOSE: THIS ROUTINE IS USED TO SUSPEND THE CURRENTLY ACTIVE * ; TASK, PRESERVING ITS ENVIRONMENT, AND THEN CALL ON *SUSP ; THE DISPATCHER TO SCHEDULE THE NEXT TASK (IF AN * ; APPLICATIONS ROUTINE). THE SUSPENSION IS VOLUNTARY * ; AND THEREFORE OF AN INDEFINATE DURATION. * ; ;PUSH ERROR TASK NO. ON STACK .IFG DPRTY CLR -(SP) ;PUSH IPRTY ONTO STACK .ENDC .IFG ARG MOV R3,-(SP) ;PUSH ERROR CODE ONTO STACK .ENDC CLR -(SP) ;PUSH IRTRN ONTO STACK JSR PC,QUEUE ;QUEUE ERROR TASK TST (SP)+ ;POP ERROR CODE OFF STACK PRTA41 = . MOVB LEVEL(R0),R2 ;GET LEVEL MOV #2,R4 ;SET REGISTER FOR DARLE;C 3)(RLLFUDB RBCL . =0 R2TD TE IL FOFR TOEC SST 1TOR TEINPOT SE ; ) R3G(MSXT N B LR C . = 10DRTT 20DRTT BR 3)(RSGTMNX4, R B OV M 4 ,RSZUFDB # DD A E IZ SSG MNE OBYR TEINPOP UM BO,;N 4 ,R3)(RSGTMNX VBMO ES;Y 10DRTT ISBH D?SE;U ENBEE IL FOFR TOEC SOP TAS;H -1SZLEFI,#3)(RSGTMNX PBCM ET SSB;L ) R5D(TALS,OR0 V MO THWIS ESDRADT u CBIN . T'AS'LW NEO TNTOI PTO' STLA 'TEDAUP; ) R1T(AS,LR2 V MO N HE TK.AS TEW NTOT INPOL AI TLD OKEMA; 1)(RSTLA,@R2 V MO SPUNERAT LEDNET N'DO. EXND IRDWOO NT IKEMA; R1 L AS SPUN Y ITORRI PEDAV S'SSKTAT GE; 1 ,R2)(RORRIHP VBMO EUQUF OND(E O.ER ZTOD OR WADRETHT SE; 2)(R C DE SPUN EXND ITEBYA O NT ICKBA4 RGEANCH; R4 R AS . SSREDD AERADHEM RAOGPRT GE; 2 ,Rt * ; USAGE: EMT SUSPND OR CALL SUSPND * ; * ; NOTE: THIS ROUTINE SWITCHES THE CURRENT STACK POINTER * ; FROM THE TASK STACK TO THE SYSTEM STACK. * ; * ; PROGRAMMER: 53 *INPUT DEQUEUING TSTB TTYPRT(R1) ;DID UNIT JUST FINISH INPUT? BEQ PRTA42 ;YES .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM BIT #000001,OLSTAD(R5) ;WAS DATA IN WORKING BUFFER? BNE PRTA43 ;YES, DEQUEUING NOT REQUIRED .ENDC CLR R4 ;NO, SET REGISTER FOR OUTPUT DEQUEUING PRTA42 = . JSR PC,DQLIST ;DEQUEUE LIST JUST PROCESSED PRTA43 = . IS LUTTPOUT ENRRCUE AV;S R0 C IN R32, R DD A T NI*U 2= 5 R; ESBLTAT NI URDWOO TEXND IKEMA ; R53, R OV M ) ELEV L +ITUN2* ( =R3 ; 3 R SL A E BLTAE IL FSCDIO TEXND IKEMA ; R31, R OV M L VELET GE ; 2 ,R0)(RELEV L B OV M O. NITUNT GE ;R1),R01(M+TEYS S B OV M SSREDD ASTLIT GE ; 0 ,RSTRLTT # DD A S ESDRADR FEUF BTADAT PUUT OET;G 0 ,R1)(RTADA q4)(RERADHE V MO SPUN X DEIND OR W ATOIN4 RKEMA; R4 L AS ; =. 00SCUN C ND.E SPUN . USATSTR ROER; 20SEUN BR SPUNUSATSTG INTTSER TEAFN URET RK. OUSATST; 00SDUN Q BE SPUN S TUTA SSTTE; R2 T TS SPUN R)TEISEG RPS (R3E ORSTRE; R3+,P)(S VBMO SPUN USATSTR ROERT p ; DATE: 25 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF SUSPND .REF STACK ; SUSP ; SUSPND =.  CMPB TYPE(R0),#2 ;BRANCH ON EXIT TYPE BHI PRTA44 ; TYPE 3 .IFG MSGBUF BLO PRTA47 ; TYPE 1 TSTB TTYPRT(R1) ;TYPE 2, DID UNIT JUST FINISH INPUT? BEQ PRTA4A ;YES, GO UNSUSPEND TASK BIT #000001,OLSTAD(R5) ;WAS DATA IN WORKING BUFFER? BNE PRTA47 ;YES, TASK ALREADY UNSUSPENDED .ENDC .IFZ MSGBUF BLO PRTA46 ;TYPE 1 .E V MO ES;Y 60DRTT E BN R?ROERC IS D AREHE TAS;W ) R1R(ROER T TS . =1 DRTY T; ;- -ITEXN PO UNSIOITNDCO ; ;T IS LSTUEEQ R/O ISCDIF OSSREDD ANSAINTCO1 R ;; --Y TRENN PO UNSIOITNDCO ; ;1 DRTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTRON IOETPLOM C/O IADREC IS D--1 DRTY T ;; ;E AG.P EMSTSYF BUG MSR FOG INOWLLFOM SEAS ; F BUSG M G IF . C ND.E mGE; R2+,P)(S V MO SKTAY LAEROV (. FFTU S'SITO DOMRPT LE; Y OVNS,UPC R JS SPUN ERMBNUK AS TSHPU; P)(S,-R4 V MO SPUN M PO RERFT ATO3 RVESA; P)(S,-R3 VBMO SPUN TSUPRRTEINW LOAL; S #P,@R3 VBMO SPUN . ITO D I. RECO; 00SCUN O BL SPUNK)OR WESDOO WH( ? SKTAE OR CORY LAEROV; INTMOV,#R4 PBCM SPUN l ; ENTRY POINT MOVB @#PS,-(SP) ; PUT PS ON SATCK FOR QSAVE CALL SUSP CLR -(SP) ; SET ARGUMENT FOR RETURN SUSP ; ; THE TASK STACK NOW LOOKS AS FOLLOWS FOR THE CALL TO QSAVE: SUSP ; PC SUSP ; PS SUSP ; ARG (=0) <== SP ; ; THE TOP OF THE SYSTEM CONTAINS THE NDC .IFG MSGBUF PRTA4A = . .ENDC JSR PC,TUNSPN ; TYPE 2, UNSUSPEND CALLING TASK .IFG MSGBUF BR PRTA47 .ENDC .IFZ MSGBUF BR PRTA46 .ENDC PRTA44 = . JSR R5,PUSHR ;SAVE REGISTERS .IFG MSGBUF MOV R1,R4 ;MOVE UNIT NO. TO TEMP REG .ENDC MOV R0,R1 ;GET ASSUMED LIST ADDRESS .IFG MS 47TAPR P JM VESA NETIOU;R T UPRRTEINR TEINPRO TCEANTRINE AK;M ) SP-(0,D7TY#T V MO K ACSTN OPSE AVLE, UTKOOC LSEEAEL;R S ,PP)(S VBMO SYBUT NI UET;S 5)(RRTYPTT RBCL . = 85YDTT RNTUREO ;G 60YDTT BR RECON ISTLIE EUQU ; T ISQLC, P SR J G MST PUUT OOFG INEUQUR FOG ART SE ; 4 R LR C . =0 D8TY TE OR CIND UEUE QBEL IL WELEV;L i 1.S ROR FOK OCBLT EX NEDNET N'DO; AYRLOV FG.I SPUN S ESGRRO PING INEUQUS AUSATSTT SE; 4)(RATST,T#1 VBMO SPUN ; =. 20SAUN SPUN R.ROER. NO; 10SEUN E BN SPUN D?DEENSPSU- 4 S=TUTA SHE TIS; #4),R4T(TATS PBCM SPUN S PTRUERNT ILL AUT OCKLO; S #P,@40#3 VBMO SPUN L.GALEIL S.YE; hRETURN ADDRESS TO USE ; IF THE CALL IS FROM A SYSTEM ROUTINE. ; JSR PC,QSAVE ; CALL ON QSAVE TO PRESERVE ENVIRONMENT JMP DSPTCH ; GO TO DISPATCHER TO GET NEXT TASK. .PAGE ;*********************************************************************** ; * ; E X I T * ; GBUF ;ASSEM FOLLOWING FOR MSG BUG SYSTEM TSTB TTYPRT(R4) ;IS INPUT BEING PROCESSED? BEQ PRTA45 ;YES ASL R4 ;SET INDEX TO 2*UNIT BIT #000001,OLSTAD(R4) ;NO, OUTPUT. IS LIST IN WORKING BUF? BEQ PRTA45 ;NO MOV (R0),R1 ;YES, ORIG LIST ADDRESS IS IN THREAD WRD .ENDC PRTA45 = . JSR PC,@EXIT(R0) ;CALL I/O COMPLETION ROUTINE ND AITUNS HI TOR FTSESQUREE URUT;F SOG LA FILVA ALEFIC IS DETES;R 3)(RILVADA RBCL D OR WORRR ETOE OD CORRR ESCDIE OV;M 0)(RORRR,ER4 V MO . = 75YDTT ;N URET;R PC S RT . = 72YDTT AGFLE USN ISTLIO I/E ITWRC IS DETES;R U LIDW RBCL O ;N 72YDTT E BN T?ESQUREC IS DRYMARI POR FMPCOO I/S ;I + P)(ST,ISWL#D P CM . = 70e 30SEUN I BH SPUN ERMBNUK AS TALEG LOP T >K#AS TIS; KSAS,TR4 PBCM SPUN ALEGLL I. =0 #SKTA; 30SEUN Q BE SPUN D ENSPSUUNO TSKTAF OERMBNUT GE; R4),SPK(ASUT SBBI SPUN ADLOE YT BOR FR4R EACL; R4 R CL SPUN ERSTGIRER ROERR EACL; ) SP-( R CL SPUN PS VESA; 3 ,RPS@# VBMO S TUTA SORRR Ed * ; PROGRAM IDENTIFICATION: EXIT * ; * ; PURPOSE: THIS ROUTINE IS USED TO TERMINATE THE CURRENTLY ACTIVE* ; TASK. ANY IIO IN PROGRESS WILL BE IGNORED. THE TASK * ; STATUS, ACTIVE, AND CURRENT TIMER VALUE ARE ALL SET * ; TO ZERO, AS IS MFLAG. THE TASK'S THREAD WORD IS *EXIT ; SET TO ONE TO PERMIT RE ;WITH LIST ADDR IN R1 JSR R5,POPR PRTA46 = . MOVB SYSTEM(R0),R4 ;WAS REQUEST MADE BY TASK? BEQ PRTA47 ;NO, BY SYSTEM DECB IOSTAT(R4) ;YES, DECR TASK I/O STATUS IN TASK TABLE .IFNZ OVRLAY BNE PRTA47 MOV R4,-(SP) ;TASK NO. TO STACK JSR PC,RELTSK ;RELEASE TASK .ENDC ; ; SEARCH QUEUES FOR NEXT REQUEST TO BE PROCESSED ; PRTA47 = . YDTT UTKOOC LSEEAEL RES;Y PS+,P)(S VBMO O ;N 85YDTT I BM Y?US BITUNS ;I 5)(RRTYPTT TBTS S PTRUERNT IUTKOOC;L T OUOC,LPC R JS . = 60YDTT . = 25YDTT SKTAG INLLCAD ENSPSUUN, ES;Y N SPUN,TPC R JS O ;N 25YDTT E BN 2?E YP TITEXS ;I 2 ,#0)(RPETY PBCM . = 20YDTT C ND.E K AS TSEEAEL;R K TSEL,RPC R JS CKTA STO. NOK AS TO,;N P)(S,-aTOX DEIN; SKTA=U RRUE ERMBNUK AS TTOX DEIN; +2RNRT=U K ASUT SPUN . NTMEGUARN URET RTOX DEIN; +4VESA=U N TRUR SPUN C ND.E SPUN C ND.E SPUN E IZ SCKTASA; 2.=1 E AVUS SPUN . EG RLL AVESA; HRUS,PR5 R JS SPUN N `QUEUING. *EXIT ; * ; USAGE: EMT EXIT OR CALL EXIT * ; * ; NOTE: THIS ROUTINE SWITHES TO THE SYSTEM STACK AND * ; PASSES CONTROL TO THE DISPATCHER. * ; * ; PROGRAMMER: 53  CLR R4 ;SET Q POINTER FOR PRIORITY OUTPUT MOV #1,R2 JSR PC,GETQX CLRB TTYPRT(R1) ;SET UNIT STATUS FLAG TO INPUT JSR PC,LOCOUT ;LOCKOUT INTERRUPTS .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM PRTA49 = . MOV R5,R3 ;SET UNIT LEVEL INDEX TO PRIORITY INC R3 TSTB DAVAIL(R3) ;IS PRIORITY DISC FILE FOR UNIT AVAIL? BEQ PRTA50 R4 V MO S?ESGRRO PINO I/S ;I 20YDTT E BN AYRLOV Z FN.I USATSTO I/K AS TCRDE, ES;Y 4)(RATSTIO CBDE EMSTSYY BO,;N 20YDTT Q BE K?AS T ABYE AD MSTUEEQ RAS WO,;N 4 ,R0)(REMSTSY VBMO ES;Y 25YDTT Q BE 3?E YP TITEXS ;I 3 ,#0)(RPETY PBCM RDWOD EAHR TSTLIY TTR NC;I 0)(R C IN . =5 D1TY TG LA FLLFUR FEUF BET SS,YE ; ) R3L(ULBF D B NC I O ;N ]IORSVEY LAEROVF ILYON; AYRLOV Z FN.I C ND.E ; . =8 E AVUS ; P)(S,-R4 V MO ; P)(S,-R3 V MO SPUN ; P)(S,-R2 V MO RSTEISEG REDIRQURE VESA; P)(S,-R1 V MO SPUN N IORSVEY LAEROVN-NOF ILYON; AYRLOV FZ.I VESARG Z FN.I D.VESAS ERSTGIREF OERMBNUT ULFADE; =0 E AVUS T INPOY TREN; \ * ; DATE: 30 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF EXIT .REF COUNTR,MFLAG ;  ;NO, GO CHECK PRIORITY OUTPUT CORE Q CMPB NXTMSG(R3),NXTSEC(R3) ;ANY MESSAGES IN PRIORITY FILE? BNE PRTA95 ;YES, GO READ DISC TSTB DBFULL(R3) ;MAYBE, IS DISC FILE FULL? BGT PRTA95 ;YES, GO READ DISC BR PRTA55 ;NO, GO CHECK FOR PRIORITY INPUT .ENDC PRTA50 = . MOV QFIRST(R4),R0 ;ANYTHING IN PRIORITY OUTPUT Q? BNE PRTA65 ;YES PRTA55 = . 15YDTT E BN LLFUE IL FERFFBUC IS DIS ;3)(RSGTMNX),R3C(SEXT N B MP C . = 10YDTT LEFIF OORCTSET 1SO TERNTOI PET;S 3)(RECTSNX RBCL . =5 D0TY T0 D1TY T R B ) R3C(SEXT,NR4 VBMO R4Z,FSBU#D D AD ZESIG MSE ONY BERNTOI PMPBU ; R4),R3C(SEXT N B OV M S YE ; 5 D0TY T S HI B D SE UENBEE IL FOFR TOEC SOP TAS;H1 Z-ESIL#F),R3C(SEXT N B MP C S YE ; 0 D8TY T EQ B ? DEMAS WAT ESQURE ;Y =. NDSPUN ; R TEINPOK ACST= <= PC ; N TRUR ; K ASUT ; ; S:OWLLFOS AKSOO LCKTA SRYNT EON; ; SPUN C ND.E SPUN ; R OP,PHRUS,PVYSOUN EF.R SPUN ; AYRLOV Z FN.I NDSPUN EF.D E AG.P **************************************************************X EXIT .IFNZ OVRLAY ; EXIT .REF QOVNXT ; EXIT .ENDC EXIT ; EXIT =. ; ENTRY POINT MOVB #340,@#PS ; LOCK OUT ALL INTERRUPTS MOV ACTIVE,R0 ; GET ADDRESS OF PROGRAM HEADER BEQ EXIT00 ; NOTHING ACTIVE. GO TO DISPATCHER. EXIT CMP (R4)+,(R4)+ ;NO, SET Q POINTER FOR PRIORITY INPUT MOV QFIRST(R4),R0 ;ANYTHING IN PRIORITY INPUT Q? BNE PRTA75 ;YES .IFG MSGBUF ;ASSEM FOLLOWING FOR MSG BUF SYSTEM DEC R3 ;SET UNIT/LEVEL INDEX TO NORMAL TSTB DAVAIL(R3) ;IS NORMAL DISC FILE FOR UNIT AVAIL? BEQ PRTA60 ;NO, GO CHECK NORMAL OUTPUT CORE Q CMPB NXTMSG(R3),NXTSEC(R3) ;ANY MESSAGES IN NORMAL FI ISTHE NCSID LEAI FSCDIS HA ; ) R3L(AIAV D B ST T S YE ; 5 D7TY T NE B ? ORRR ETERI WSCDIA E ERTHS WA ; 4 ,R4)(RORRR E OV M S ESDRADT IS L/O ISCDIT GE ; R4),SP ( OV M L VELE+ T NI*U 2 =EXND;I 3 ,RR2 D AD ELEV LET;G R2),R0L(VELE VBMO 3 ,RR5 V MO 5 Y BO. NITUNT UL;M R5 L AS 5 ,RR1 V MO . NOT NI UTY TET;G1 ,R0)(R+1EMSTSY VBMO U********;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S27 : TEDA ; * 53: ERMMRAOGPR ; * ; *. ROZEN-NOS IVESARGR TEMERAPAN GEYS SHE TIFD RETOEST CLR R1 ; CLEAR R1 FOR BYTE LOAD EXIT BISB TASKNO(R0),R1 ; GET TASK NUMBER FORM TASK HEADER EXIT MOV #1,(R0) ; PUT A 1 IN THE THREAD WORD (QUEUABLE) EXIT CLRB TSTAT(R1) ; SET TASK STATUS TO INACTIVE (=0) CLR ACTIVE ; REMOVE ACTIVE TASK'S ADDRESS CLR COUNTR ; CLEAR CURRENT TIMER VALUE CLR MFLAG ; REMOVE ALL SOFTWARE LOCK OUTS, IF ANY. LE? BNE PRTA95 ;YES, GO READ DISC TSTB DBFULL(R3) ;MAYBE, IS DISC FILE FULL? BGT PRTA95 ;YES, GO READ DISC SUB #6,R4 ;ADJUST Q POINTER BR PRTA70 ;GO CHECK FOR NORMAL INPUT .ENDC PRTA60 = . SUB #6,R4 ;SET Q POINTER TO NORMAL OUTPUT MOV QFIRST(R4),R0 ;ANYTHING IN NORMAL OUTPUT Q? BEQ PRTA70 ;NO, GO CHECK FOR NORMAL INPUT 0 ,R0)(R V MO S ESDRADT IS LSTUEEQ RTY TET;G R0T,LSTR#T D AD S ESDRADR DEEA HERFFBUC IS DET;G 0 ,R1)(RTADA V MO K ACSTO NT ODRADT IS L/O ISCDIH US;P P)(S,-R1 V MO . =1 DWTY T; ;T IS LSTUEEQ RTERI WSCDIF OSSREDD ANSAINTCO1 R ;; --Y TRENN PO UNSIOITNDCO ; ;1 DWTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E ITWRC IS DOR FNETIOU RONTILEMPCOO I/- -W1YDTT ; ;; GEPA . Q R ; * BEL IL WEYTH D.PNNS UBYD SE URE AR41- RRSTEISEG R ; * E.INUTROT UPRRTEINR OETPLOM C ; */O IANR HEIT EISM RAOGPRG INLLCAE THF I=0T US MRNRT U S:TENO ; * ; SPUN * ERMBNUK AS TALEGLL I=3 ; SPUN *Y)LAEROVG(ON LTOD DEENSPSUD-LEELNCCAK AS T=2 ; SPUN * ) =4OT(NUSATSTK ASP CLR TSTACK(R0) ; CLEAR STACK POINTER FOR DISPATCHER EXIT MOV STACK,SP ; RETURN TO SYSTEM STACK EXIT .IFNZ OVRLAY ; EXIT CMPB R1,#OVTMIN ; IS THIS AN OVERLAY TASK? EXIT BLO EXIT00 ; NO - ALL DONE. EXIT TSTB IOSTAT(R1) ; YES - ANY I/O IN PROGRESS? EXIT BNE EXIT10 ; YES. CAN'T EX PRTA65 = . MOVB (SP)+,PS ;RELEASE LOCKOUT INCB TTYPRT(R1) ;SET UNIT PRIORITY TO OUTPUT MOV R0,OLSTAD(R5) ;SAVE CURRENT OUTPUT LIST ADDRESS BR PRTA80 ;GO INIT OUTPUT PRTA70 = . CLRB TTO1ST(R1) ;CLEAR 1ST OUTPUT REQUEST FLAG CMP (R4)+,(R4)+ ;SET Q POINTER TO NORMAL INPUT MOV QFIRST(R4),R0 ;ANYTHING IN NORMAL INPUT Q? BEQ PRTA90 ;NO PRTA75 = F BUSG M G IF . C ND.E RNTURE ; C P TS R S ERSTGIREE ORSTRE ; PRPO5, R SR J NO ; 5 L1OV M LO B ? EDOV MLL;A 2 ,RR4 P CM ERFFBUO TSG MOFR HA C 2OV;M + 4)(R+,0)(R V MO . =5 L1OV MR FEUF BTOE OV MSG MOR FITIM LET;S 2 ,RR4 D AD ERFFBUO TRDWOX DEINE OV;M + 4)(R+,0)(R V MO RDWOX DEINO TERNTOI PET;S + 0)(R T TS R FEUF BTO) NTOU CARCH (M TALEGLL I=1 ; * EDORON HSTUEEQ R=0 ; * : USATSTD NEURET RHE TIS RRUE ; * K.AS T ; D*UEUE QTYORRI PSTHEIG HHE TTOL RONTCOS AS P=1 ; * R.LEAL CHE TTON URET R=0 ; * D:PNNS UOMFRN URET RHE TLSRONTCON TRUR ; * EDEUQUREE BTOK AS TLIT AN OVERLAY NOW. EXIT INCB TSTAT(R1) ; SET RPOM'S STATUS EXIT CLRB @#PS ; ALLOW INTERRUPTS EXIT MOV R1,-(SP) ; PUT TASK NO. ON STACK FOR QOVNXT JSR PC,QOVNXT ; CALL ON RPOM FOR OVERLAY ASSIGN. .ENDC EXIT EXIT00 =. ; EXIT JMP DSPTCH  . MOVB (SP)+,PS ;RELEASE LOCKOUT MOV R0,ILSTAD(R5) ;SAVE CURRENT INPUT LIST ADDRESS PRTA80 = . JSR PC,TOINIT ;INIT NEXT INPUT OR OUTPUT FOR UNIT PRTA85 = . JMP RESTOR ;RESTORE REGS. & RETURN FROM INTERRUPT PRTA90 = . CLRB TTI1ST(R1) ;CLEAR 1ST INPUT REQUEST FLAG DECB TTYPRT(R1) ;SET UNIT TO NOT BUSY PRTA93 = . MOVB (SP)+,PS ;RELEASE LZESIG MSE OV;M )+R4,(R2 V MO . = 12VLMO EXND ITOE IZ SSG MET;G 2 ,R0)(R V MO . =0 L1OV M2 L1OV M R B ) R04(,-SZRMER # OV M STLIF ORDWO" ORRR"EN IDECOR ROERT SE ;) R44(,-SZRMER # OV M EDOWLL AAX MTOG MSE ATNCRU TS,YE ; 2 ,RSZSGOM # OV M NO ; 0 L1OV M S LO B Z SIG MSX MA. GT .SG MINR HA COF. NOE AR ; Z GSMS#O),R0 ( MP C S ESDRADA AT DET;G 0 ,R0)(R V MO O ;N IHE TOF# K AS THE TISK ASUT ; * REHE W ; * ; * ) ANTROR(F R)ER,URNRT,USKTA(UNDSPUN LLCA. 2) ; * ; * RRUE+,P)(S V MO ; * NDSPUN T EM ; * H; CALL ON THE DISPATCHER TO SCHEDULE ; NEXT TASK EXIT10 =. ; THE NEXT TASK. EXIT DECB TSTAT(R1) ; SET STATUS FOR EXIT REQUESTED-OVERLAY EXIT BR EXIT00 ; GO FINISH UP. EXIT .PAGE EXIT ;*********************************************************************** ; A B O R TOCKOUT BR PRTA85 ;GO RETURN .IFG MSGBUF PRTA95 = . MOVB (SP)+,PS ;RELEASE LOCKOUT INCB TTYPRT(R1) ;SET UNIT STATUS FLAG TO OUTPUT MOV TTOBUF(R5),R4 ;GET OUTPUT BUFFER ADDRESS FOR UNIT MOV DRLIST(R5),R0 ;GET DISC READ I/0 LIST ADDR FOR UNIT ASL R3 ;ADJUST INDEX FOR WORD TABLE USAGE MOV FILEID(R3),(R4) ;PUT FILE ID INTO BUFFER HEADER ASR R3 05VLMO O BL D?VEMOT IS LOFL AL ; R24, R MP C R FEUF BTOT IS LOFD OR W AOV;M + 4)(R+,0)(R V MO . =5 L0OV MD OR WXTNEO TERNTOI PET S. STLIF ORDWO ; )+R0 ( ST T D EAHR TINS ESDRADT IS LALINIGORE AV;S )+R4,(R0 V MO R2.,12 # DD A E OV MSTLIR FOT MILIT SE ; R24, R OV M S ERSTGIREE AV;S HRUS,PR5 R JS . =T LSOV M; EDATNCRU TIST I ;, Z)GSMS(OE ) SP-(N,TRUR V MO ; * ) LYMBSEAS ( ) SP-(K,ASUT V MO. 1) ; * ; * S: INETIOU RISTHO TGEKAIN LHE T E:AGUS ; * ; SPUN *. ONSIENSPSUS ITT ASKTAE THF OELEV LHE TASE AM SHE T ; SPUN *ISD SE UELEV LTYRIIOPRE TH E.EUQUY ITORRI P AINK AS T ; SPD * ; * ; PROGRAM IDENTIFICATION: ABORT * ; * ; PURPOSE: TERMINATE THE EXECUTION OF A TASK, PRINT AN ERROR * ; MESSAGE, AND PLACE THE TASK STATUS IN THE ABORT * ; CONDITION. * ;  ;RESTORE INDEX TO BYTE TABLE USAGE MOVB NXTMSG(R3),RLSECT(R4) ;PUT REL SECT ADDR IN BUFFER HDR MOV R0,-(SP) ;MAKE DISC READ REQUEST JSR PC,DISCIO TST ERROR(R0) ;ANY REQUEST ERRORS? BEQ PRTA85 ;NO CLRB DAVAIL(R3) ;YES, CONVERT TO CORE Q FOR UNIT/LEVEL BR PRTA47 ;GO EXAMINE Q'S .ENDC ; ; ; PROCESS INTERRUPT FROM ECHO OF INPUT CHAR ; PRTB10 = . E IZ SSG MAX MANTHR GEON LAS WSG MIF ; ;- -ITEXN PO UNSIOITNDCO ; ;D VEMOE BTOE ARA AT DGESAES MND ASTLI ;H ICWHO NT IERFFBUF OSSREDD AHE TNSAINTCO4 R ;T IS LSTUEEQ RTY TOFS ESDRADE THS INTAON CR0 ; ;- -RYNT EONUPS ONTIDION C ;; STVLMOC, P SR J ;; --E NCUEEQ SNGLIAL C ;; STLIF O ; RDWO" EMSTSY "WSLOOL FTADAG MSE ERWHR FEUF B ;A O TTADAD ANT IS LAUN *EDNDPEUS SLYRITAUNOL V ACELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * UEUE QTYRIIOPRE ARTWOF S ; * AINK AS TEDNDPEUS S ACELA P -NDSPUN: ONTICAFITIENIDM RAOGPR ; * ; * D N P S N U ; ****************************************************************@ * ; USAGE: THE USAGE OF THIS ROUTINE IS EITHER: * ; * ; 1). MOV ATASK,-(SP) (ASSEMBLY) * ; EMT ABORT * ; * ; * ; 2).  INCB TTCURS(R1) ;INCR CURSOR FOR THIS TTY UNIT PRTB20 = . MOV OTIMER(R5),-(SP) ;DEQUEUE ECHO TIMER JSR PC,DQTIME TST (SP)+ BR PRTA85 ; ; ; PROCESS INTERRUPT FROM ECHO OF FORMATTING LF ; PRTB30 = . MOVB #1,CHTYPE(R1) ;SET CHAR TYPE FOR NORMAL ECHO CLRB TTCURS(R1) ;SET CURSOR TO BEGINNING OF LINE BR PRTB20 ;GO DEQUEUE ECHO TIMER ; ; ; PROCESS INTERRUPTTY TVEMOO TNETIOUBRSU- -STVLMO ; ;; GEPA . F BUSG M G IF . C ND.E RNTUREO ;G 05CWDS BR ELEV/LEV DISTH ; R FOG LA FILVA ALEFIC IS DETES;R 3)(RILVADA RBCL D OR WORRR ETOE OD CORRR ESCDIE OV;M 0)(RORRR,ER4 V MO . =0 W1SC DN URET;R PC S RT . =5 W0SC DS YE ; 0 W1SC D NE B ? ORRR ESTUEEQ RSCDIA E ERTHS WA ; 4 ,R4)(RORRR E OV M =******;* E AG.P SKFT C ND.E SKFT UPH ISIN FGO; 00KEFT BR SKFTNGDIEN P/O I -EEFRR FOS TUTA SSKTAT SE; ) R0T(TATS2,#- VBMO SKFT S ESGRRO PINO I/; R5 C DE: M1KEFT SKFT. YSLA OTHWIG LA F/O IUTBO ARYOR WLYON; AYRLOV Z FN.I SKFT . ERUSO TRNTURE; 00KEFT BR SKFT <CALL ABORT(ATASK) (FORTRAN) * ; * ; WHERE * ; ATASK IS THE NUMBER OF THE TASK TO BE ABORTED. * ; * ; SYSGEN: THE SYSGEN PARAMETER '$ABMES' IS USED BY ABORT TO * ; DETERMINE HOW MANY ABORT MESSAGES CAN BE PENDING AT * ;  FROM ECHO OF FORMATTING CR ; PRTB40 = . MOVB #LF,@TTODBR(R5) ;OUTPUT A FORMATTING LF MOVB #2,CHTYPE(R1) ;SET CHAR TYPE FOR FORMATTING LF BR PRTA85 ;GO RETURN ; ; ; PROCESS INTERRUPT FROM ECHO OF "U" ; PRTB50 = . TSTB TOIFLG(R1) ;DOES TIMEOUT FLAG INDICATE AN BNE PRTB55 ;ABORT OF INPUT REQUEST PROCESSING MOVB #CR,@TTODBR(R5) ;NO, OUTPUT A FORMATTING CR MOVB #3,CHTYPE( T ESQUREE ITWRC IS DKEMA ; TERIPFC, P SR J S ESDRADT IS L/O ITERI WSCDIT GE ; R4),SP ( OV M R FEUF BTOA AT DGESAES MND ASTLIV MOO ;G T LSOV,MPC R JS STLIT ESQUREY TTO TERNTOI PET;S R4T,LSTR#T D AD DREA HERFFBUN IDRADT EC SEL RUT;P) R4T(ECLS,R3)(RECTSNX VBMO LEAB TORCTSET EX NTOX DEINT SE ; 3 R SR A ERADHER FEUF BIND ILEFIT PU ;4)(R),R3D(EIIL F OV M E BLTAD ILEFIO TEXND IET;S 9 R BEUM NSKTAL GALEIL; R5 C IN: 10KEFT SKFT S TUTA SSKTAL GALEIL; R5 C IN: 20KEFT SKFT K.AS TVETIAC; R5 C IN: 30KEFT SKFT ; SKFT S ONTIDION CORRR EOR FREHE; SKFT ; SKFT RNTURE; 8 A GIVEN TIME. IF A TASK IS ABORTED AND NO MESSAGE * ; BUFFER IS AVAILABLE, THE TASK WILL STILL BE ABORTED * ; BUT NO MESSAGE WILL PRINTED. * ; * ; * ; * ; REGISTERS: ABORT USES REGISTERS R0 AND R1. THE WILL BE SAVED IF* ; R1) ;SET CHAR TYPE FOR FORMATTING CR BR PRTA85 PRTB55 = . CLRB TOIFLG(R1) ;RESET INPUT TIMEOUT FLAG BR PRTC15 ;GO CR, LF, AND DO END PROCESSING ; ; PROCESS INTERRUPT FROM ECHO OF "^" ; PRTB60 = . MOVB #'U,@TTODBR(R5) ;OUTPUT A "U" MOVB #4,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "U" PRTB70 = . INCB TTCURS(R1) ;INCR CURSOR BR PRTA85 ;GO RETURN ; ; ; R3 L AS SSREDD AERFFBUA AT DET;G 4 ,R4)(RTADA V MO T IS L/O ITERI WSCDIH US;P P)(S,-R4 V MO . =T CWIS D; D RETOES ROT NND AEDUSS IR4 ; ; - -ITEXN PO UNSIOITNDCO ; ; S ESDRADT IS L/O ITERI WSCDIS INTAON CR4 ; V)LE+ T NI U *(2E BLTAO TEXND IELEV/LITUNS INTAON CR3 ; RYNT EONT IS LOFS ESDRADS INTAON CR0 ; ;- -RYNT EONUPS ONTIDION C ;; WTSCDIC, P SR J 5PC S RT SKFT C ND.E SKFT . EG RLL ARETOES RYSWAAL; R OP,PR5 R JS SKFT S ERSTGIREL RANEGEE ORSTRE; VESARG Z FN.I SKFT USATSTR ROERT SE; ) SP2(R-ER,FR5 V MO SKFT TSUPRRTEINW LOAL; PS@#+,P)(S VBMO SKFT T INPOY TRENR ROER; =. 00KEFT SKFT T.ENSCIEQU4 THE SYSGEN PARAMETER 'RGSAVE' IS NON-ZERO. * ; * ; PROGRAMMER: 53 * ; DATE: 20-SEP-71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; *  PROCESS INTERRUPT FOR ECHO OF "^" ; PRTB80 = . MOVB #'^,@TTODBR(R5) ;OUTPUT A 2ND "^" MOVB #5,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF 2ND "^" BR PRTB70 ; ; PROCESS INTERRUPT FOR ECHO OF "\" ; PRTB90 = . MOVB SLSHCH(R1),@TTODBR(R5) ;OUTPUT NEW OR DELETED ;CHAR AFTER BACKWARD SLASH MOVB #1,CHTYPE(R1) ;SET CHAR TYPE FOR NORMAL ECHO BR PRTB70 ; ; PROCESS ;; --E NCUEEQ SNGLIAL C ;; STUEEQ RTERI WSKDIE AK M ;, ENTH; ERFFBUE ITWRC IS DTOA AT DSG M ;D ANT IS LSTUEEQ RTY TVEMOO TNETIOUBRSU- -WTSCDI ; ;; GEPA . M TEYS SUF BSG MOR FNGWILOOL FEMSS;A UFGBMS FG.I RNTURE ; C P TS R S ARCH" "^O TWF OST 1OR FPETYR HA CET;S 1)(RPETYCH.,#6 VBMO ^" " AUTTPOU ;5)(RBRODTT,@'^ # B OV M UTEOIM TUTNP IOR FDECOR ROERT SE ;0)(RORRR,ETORIER # 1O TUSATSTS SKTAT SE; ) R0T(TATS RBCL SKFT P. USHNIFIO TREHE; =. 00KDFT SKFT C ND.E SKFT S PTRUERNT IUT OCKLO; S #P,@40#3 VBMO SKFT ERSTGIRER ROERT SERE; R5 R CL SKFT R BEUM NSKTAT GE; R0+,P)(S V MO SKFT M PO RLLCA; Y VLQO,DPC 0;*********************************************************************** .PAGE .DEF ABORT .REF MFLAG ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT .REF LERTYP ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT INTERRUPT FOR ECHO OF EOM CHARACTER ; PRTC10 = . .IFZ EOMOPT INCB TTCURS(R1) ;INCR CURSOR BR PRTC55 ;CR, LF NOT OUTPUT AFTER EOM .ENDC PRTC15 = . MOVB #CR,@TTODBR(R5) ;OUTPUT A CR MOVB #11.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF A ;CR FOLLOWING AN EOM BR PRTB70 ; ; INTERRUPT FROM OUTPUT OF LF IN OUTPUT MODE ; PRTC20 = . CLRB CHTY OV M S ESDRADT IS LUTNP INTREUR CET;G 0 ,R5)(RADSTIL V MO ) O. NITUNN IRS OERIM(TE YT BAGFLO ER;Z FBIMIT RBCL G LA FUTEOIM TET;S 1)(RLGIFTO CBIN PTRUERNT IBD KLEABIS;D ) R5R(CSTI@T RBCL R5 L AS NGXIDEINE BLTAD OR WOR F*2ITUN ; R51, R OV M E YT BAGFLR METIM RO FO. NITUNT GE ; R1B,MFTI I B OV M . = TOYITT ; T ESQUREE TH ; F ORTBO AANT ECFF ATOT SES IPETYR TEAC-R JS SKFT ERMBNUK AS TSHPU; P)(S,-R0 V MO SKFT R TELAR FOK ACSTN OERMBNUK AS TVESA; P)(S,-R0 V MO SKFT TSUPRRTEINW LOAL; S #P,@P)(S VBMO SKFT . UEAL V'SOMRPO TUSATSTT SE; ) R0T(TATS.,#8 VBMO SKFT . -1O TUSATSTT SET BUD EEFR S.YE; M1KEFT E BN SKFT S?ESGRRO PINO I/Y AN; 0)(RATSTIO TBTS SKFT , .REF DQOVLY,PUSHR,POPR ; ABRT .ENDC ABRT ; ; ON ENTRY THE STACK LOOKS THIS WAY: ; ; TASK NUMBER ; PC <=== STACK POINTER ; ABORT =. ; ENTRY POINT ASAVE =0 ; DEFAULT NUMBER OF REGISTERS SAVED .IFNZ RGSAVE ; .IFZ OVRLAY ; ONLY IF NOT OVERLAY VERSION ABRT PE(R1) ;SET CHAR TYPE TO OUTPUT MODE JMP PRTA17 ;GO CONTINUE OUTPUT OF MSG ; ; PROCESS INTERRUPT FOR OUTPUT MODE CR ; PRTC30 = . MOVB #LF,@TTODBR(R5) ;OUTPUT A LF CLRB TTCURS(R1) ;RESET CURSOR TO BEGINNING OF LINE MOVB #9.,CHTYPE(R1) ;SET CHAR TYPE FOR OUTPUT MODE LF BR PRTA85 ;GO RETURN ; ; PROCESS INTERRUPT FOR ECHO OF CR FOLLOWING AN EOM ; PRTC40 = . MOVB #LF,@TTODBRARCH ; - -ITEXN PO UNSIOITNDCO ; ; TEBYG LA FERIM TUTNP IIND NEAINTCOS IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ;O ITTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTROT OUMETIT PUIN- -TOYITT ; ;; GEPA . N URET R ; C P TS R . =5 O6TY T YPRTERC, P SR J STUEEQ RUTEOYP TDECOR ROERE AK M ; P)(S,-ODRMER # OV M 5 O6TY T NE B ? QYPRTERN ILEDUMO) ; AYRLOV Z FN.I SKFT OMRPL AL CTOY NL OREHE; =. 00KCFT SKFT E OM HGO; 00KDFT BR SKFT D.REEACLE ARR TEINPOK ACSTE THD AN; 1)(RCKTATS R CL SKFT ELEV LPU CNTREUR CR,METIT ENRRCU; ) R1T(USCP RBCL ; SKFT HE TS,SKTAT ENIDES RRECOR FO; 1)(RERIMCT R CL ; SKFT R TELAR METI CND ASTPU CEDNE(ASAVE =4 ; MOV R0,-(SP) ; SAVE R0 MOV R1,-(SP) ; SAVE R1 .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ASAVE =6 ; ABORT MESSAGES USE AN ADDITIONAL REG ABRT MOV R2,-(SP) ; SAVE R2 (ONLY FOR ABORT MESSAGES) ABRT .ENDC ABRT .ENDC AB(R5) ;OUTPUT A LF MOVB #12.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF LF ;FOLLOWING AN EOM BR PRTA85 ;GO RETURN ; ; PROCESS INTERRUPT FOR ECHO OF LF FOLLOWING AN EOM ; PRTC50 = . CLRB TTCURS(R1) ;RESET CURSOR TO BEGINNING OF LINE PRTC55 = . MOV ILSTAD(R5),R0 ;GET CURRENT INPUT LIST ADDRESS JMP PRTA40 ;GO DEQUEUE ECHO TIMER ; ; ; PROCESS INTERRUPT FOR ECHOR ROERS I ; #1D,MORR E MP C . =0 O6TY T ; ;0 O4TY T R B STUEEQ RUTEOYP TDECOR ROERE AK M ; 60YOTTC, P SR J O N ; ) R3O(TTRS F B NC I ES Y ; 0 O4TY T NE B ? EDYP TLYUSIOEVPRN EE BSG MORRR EAS H ; ) R3O(TTRS F B ST T . =0 O5TY TN URET R ; C P TS R ) R3G(LAOF T B LR C . =5 O4TY TK ACSTF OFE OD CORRR EOP P ; )+SP ( ST T E IMQTC, P SR J %Y MA; SKFT C ND.E SKFT K OR WDOM PO RET LGO; 00KCFT ISBH SKFT K?AS TAYRLVE OANS HI TIS; INTMOV,#R0 PBCM SKFT . IST IIFE OM HGO; 00KEFT I BM SKFT L AL COMRPDQA R FOK ECCH; R0 T TS SKFT ; AYRLOV Z FN.I SKFTK.AS TEDNDPEUS S AOFE AR CKETA$RT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION ABRT JSR R5,PUSHR ; SAVE ALL 6 ABRT ASAVE =12. ; SIZE OF SATCK. ABRT .ENDC ABRT .ENDC ATASK =ASAVE+2 ; STACK INDEX TO GET TASK NUMBER CLR R0 ; CLEAR R0 FOR BYTE LOAD ABRT BISB ATASK(SP),R0 ;  OF RUBOUT FOR TTY TURNON ; PRTC60 = . TSTB TTYON(R1) ;IS TTY UNIT WARMUP COMPLETE BNE PRTC65 ;NO JMP PRTA80 ;YES PRTC65 = . MOVB #RO,@TTODBR(R5) ;OUTPUT ANOTHER RUBOUT DECB TTYON(R1) ;DECR COUNT JMP PRTA85 ;RETURN .PAGE ; ; KBDINT -- TELETYPE KEYBOARD/PT READER INTERRUPT ROUTINE ; ; CONDITIONS UPON ENTRY -- ; ; TTY UNIT NO. IS CO P)(S,-IMOTTT # OV M ERIM TUTTPOUE EUQU; ) SP-(),R5R(METI O OV M INGA AARCHT PUUT O ;) R5R(DBTO@T1, R B OV M . = 40YOTT 35YOTT BR T OUCKLOE ASLERE; PS+,P)(S VBMO . = 38YOTT 45YOTT BR 3)(RSTI1TT RBCL 3)(RSTO1TT RBCL SYBUT NOO TITUND OLT SE; 3)(RRTYPTT1,#- VBMO . = 35YOTT ERSTGIREE ORSTRE; R3+,P)(S V MO G INSSCERO PUTNP IORT PUUT OITIN; !O TREHE; =. 00KBFT SKFT E)BLUAUE(Q 1TOD OR WADRETHT SE; ) R1,(#1 V MO: 40KAFT SKFT Y.ARSSCENEF IT'AS'LT SERED AN; ) R2T(AS,LR4 V MO SKFT RDWOD EAHR TKSAS TUSIOEVPRO NT IRDWO; 40KAFT E BN SKFT D EAHR T'SSKTAS HI TOFS NTTEON CVEMO; ) R4,(1)(R V MO: 30KAFT SKFT D OR WADRETHT SEREO GENTH; 40KAFT BR SKFT STIR FTO; ) R2T(AS,LR2 D AD GET NUMBER OF TASK TO ABORT ABRT BEQ ABRE10 ; TASK #=0 IS ILLEGAL ABRT CMPB R0,TASKS ; IS TASK#> LARGEST LEGAL TASK NUMBER ABRT BHI ABRE10 ; MOVB @#PS,-(SP) ; SAVE PS MOVB #340,@#PS ; LOCKOUT ALL INTERRUPTS MOVB TSTAT(R0),R1 ; GET TASK STATUS ASL R1 ; MAKE INTO WORD INDEX ABRT JMP @ABTAB(R1) ; JUMP VIANTAINED IN BITS 0-3 OF PS ; AS PROVIDED BY INTERRUPT VECTOR FOR ; INTERRUPTING UNIT ; ; ROUTINE IS ENTERED AT PRIORITY LEVEL OF UNIT VECTOR ; ; KBDINT = . SAVE ;CALL SAVE ROUTINE MOVB PS,R1 ;GET UNIT NO FROM BITS 0-3 OF PS BIC #177760,R1 MOV R1,R5 ASL R5 ;UNIT * 2 USED AS INDEX TO WORD TABLES MOV ITIMER(R5),R4 ;GET ADDRESS OF OPERATORT NIOI,TPC R JS R TEISEG RVESA; P)(S,-R3 V MO T OUCKLOE ASLERE; PS+,P)(S VBMO ) R5D(TALS,I2)(RADSTIL V MO ) R5D(TALS,O2)(RADSTOL V MO R5 L AS 5 ,RR1 V MO R2 L AS 2 ,RR3 V MO ) R1T(1STI,T3)(RSTI1TT VBMO ) R1T(1STO,T3)(RSTO1TT VBMO ITUNW NEO TNTMEONIRNV EVEMO, NO; ) R1T(PRTY,T3)(RRTYPTT VBMO S YE; 38YOTT E BG ? SYBUT NI UEW NIS SKFT T INPOO TSTLAT SERE, SEELG INTHNO; ) R2T(AS,LSTIR#F V MO SKFT . EUQUE THN IISE LS ENGHIYTAN; 40KAFT E BN SKFT IFE SEN HE TT,RSFIT SERE S.YE; 2)(RSTIR,F1)(R V MO SKFT T.NOF ICHANBR E.EUQU; 30KAFT E BN SKFTE THN I 1O. NSKTAR TEAFT GHOU SHE TIS; 2)(RSTIR,FR3 P CM SKFT R ROER. NO; 20KEFT Q BE SKFT ? UEUE QHE TINL ILSTK AS T STATUS. ; THE TABLE 'ABTAB' REQUIRES ONE ENTRY PER STATUS. IT IS USED AS A JUMP ; TABLE WITH THE ENTRIES BEING THE ADDRESSES TO HANDLE THE DIFFERENT ; TYPES OF ABORTS. THE INDEX INTO THE TABLE IS THE TASK STATUS. .IFNZ OVRLAY ; ABRT .WORD ABRFIN ; STATUS -3 RETURN - NO ACTION. ABRT .WORD ABRFIN ; -2 RETURN - NO ACTION. ABRT .WORD ABRFIN ; -1 RETURN - NO  RESPONSE TIMER MOVB #TTITIM,TCNTR(R4) ;PUT COUNT INTO TIMER MOV ILSTAD(R5),R0 ;GET ADDRESS OF LIST CURRENTLY ;BEING PROCESSED MOV DATA(R0),R2 ;GET DATA BUFFER ADDRESS TST (R2) ;IS ECHO SPECIFIED BY USER BUFFER BPL KBDA10 ;NO MOV OTIMER(R5),-(SP);YES, QUEUE ECHO TIMER MOV #TTOTIM,-(SP) JSR PC,QTIME TST (SP)+ ;POP ERROR COD; 1)(RRTYPTT TBTS T OUOC,LPC R JS PTRUERNT IANR FOW DOIN WKEMA; PS+,P)(S VBMO 30YOTT T BG R4 C DE + 0)(R R CL S UEUE QITUND OLR EACL; )+R5,(R0 V MO + 2)(R T TS . = 32YOTT ) R2,(5)(R V MO 32YOTT Q BE ITUNW NEO TTSESQURED UEUE QVEMO; 2)(R,@0)(R V MO . = 30YOTT T OUOC,LPC R JS 4 ,R#4 V MO T NI ULD OOR FSTLA QIS; 1 ,#1)(R P CM SKFT TSUPRRTEINT OUK OC LTOT SERE; S #P,@40#3 VBMO: 20KAFT SKFT . NDOU FOT NSKTA T.EF LNENO; 20KEFT BR SKFT . CKHE CGO, FTLEE OR MIF; 10KAFT E BN SKFT ADRETHE THN ISSREDD AXTNET GE; 3 ,R3)(R V MO SKFT 4 RINS ESDRADS HI TVESA; 4 ,RR3 V MO SKFT S.YE; 20KAFT Q BE SKFTACTION. ABRT .ENDC ABRT ABTAB: .WORD ABRFIN ; 0. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 1. RETURN - NO ACTION. ABRT .WORD ABRA10 ; 2. DQUEUE AND SET STATUS=7. ABRT .WORD ABRC10 ; 3. SHUT DOWN AND SET STATUS=7. ABRT .WORD ABRD10 ; 4. SET STATUS=7. ABRT .WORD ABRDE OFF STACK KBDA10 = . MOVB @TTIDBR(R5),R4 ;GET CHAR WHICH WAS INPUT BEQ KBDA20 ;PUNCHED TAPE LEADER OR "HERE IS" KEY? BICB #200,R4 ;STRIP OFF CHANNEL 8 OF TTY INPUT CHAR CMPB R4,#EOMCH ;NO, IS IT THE EOM CHAR? BEQ KBDB70 ;YES CMPB R4,#CR ;IS IT AN EOM CR? BEQ KBDB50 ;YES CMPB R4,#EOLCH ;IS IT THE END OF LINE CHAR? BEQ KBDA50 TOX DEINT SE; 5 ,RSTLA#Q D AD ITUND OLR FOT RSFI QTOX DEINT SE; R0T,RSFI#Q D AD 0 ,RR5 V MO R5 L AS ITUND OL8*T GE; R5 L AS T NI UEW NOR FSTLA QTOX DEINT SE; 2 ,RSTLA#Q D AD R2 L AS R2 L AS R2 L AS ITUNW NE8*T GE; 2 ,RR1 V MO TY TEMSTSYN OSG MORRR EPETY; 0 O6TY,TPC R JS E ULOD MORRR EIN. NOT NI UEW NUT;P 6 D+MORR,ER1 V MO ? EKSEE WSKTAE THS HI TIS; 3 ,RR1 P CM: 10KAFT SKFT E EUQUN INDOU FOT NSKTA; 20KEFT Q BE SKFT E EUQUN IRYNT ESTIR FOFS ESDRADT GE; R3),R2T(RSFI V MO SKFT X DEIND OR WTOINT IFSH; R2 L AS: 30KZFT SKFT CHARSEO TELEV LTYRIIOPRT GE; 2 ,R1)(RORRIHP VBMO SKFT TSUPRRTEINW LOAL; S #P,@P)(S VBMO SKFT G INCHATSPDIT ENEVPRO TUSATSTT SE; 10 ; 5. SET STATUS=7. ABRT .WORD ABRFIN ; 6. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 7. RETURN - NO ACTION. ABRT .IFNZ OVRLAY ; ABRT .WORD ABRFIN ; 8. RETURN - NO ACTION. ABRT .WORD ABRD10 ; 9. TELL RPOM AND SET STATUS=7. ABRT .ENDC  ;YES CMPB R4,#MRCH ;NO, IS IT THE MSG RESTART CHAR? BEQ KBDA70 ;YES MOV R2,R3 ;GET POINTER TO CHAR SLOT IN DATA BUFFER ADD #MSGDAT,R3 ADD CHCNT(R2),R3 CMPB R4,#RO ;IS CHAR A RUBOUT (DELETE A CHAR)? BEQ KBDA80 ;YES TSTB FRSTRO(R1) ;IS IT 1ST CHAR AFTER SOME RUBOUTS? BNE KBDB20 ;YES KBDA13 = . MOV (R2),-(SP) STLIT ENRRCUO NT IO. NITUNW NET PU; ) R01(M+TEYS,SR1 VBMO O. NITUNW NET GE; 1 ,R2)(REVYDPH VBMO ) R5R(CSTI@T RBCL ITUNT NCFUDEF OTSUPRRTEINE BLSADI; ) R5R(CSTO@T RBCL T BIL AIAVT NOE ICEV D ; ND AIT BSE UINE ICEV DTENAERLT AET S ;4)(REVYDPH0,0020#1 S BI . = 26YOTT 22YOTT BR . NOT NI UALICOG LTENAERLT AET GS,YE; 4 ,RR2 V MO NO; 26YOTT Q BE) R0T(TATS.,#8 VBMO SKFT . SKTAA E EUQUDEO TREHE; =. 00KAFT SKFT L GALEILE ARS UEAL VUSATSTR HEOTL AL; 20KEFT BR SKFT C ND.E SKFT M PO RONL AL CGO; 00KCFT Q BE SKFT Y)NL OOMRPN IEDQU (9?T IIS; 2 ,R#4 B SU SKFT . YSLAEROV; 00KBFT Q BE SKFT  ABRT ; ABRT ABRA10 =. ; DEQUEUE MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; PUT TASK NO. ON STACK JSR PC,FRETSK ; USE FRETSK TO DEQUEUE THE TASK ABRT MOVB #340,@#PS ; LOCK OUT ALL INTERRUPTS ABRT TST (SP)+ ; CHECK RETURNED STATUS ABRT  ;STRIP OFF BITS 14,15 OF 1ST WORD OF BIC #140000,(SP) ;BUFFER TO GET NO. OF CHARS TO BE INPUT CMP CHCNT(R2),(SP)+ ;HAVE TOO MANY CHAR BEEN INPUT? BHIS KBDB30 ;YES INC CHCNT(R2) ;INCREMENT CHAR COUNT MOVB R4,(R3) ;MOVE CHAR TO USER'S BUFFER TST (R2) ;NO, IS ECHO SPECIFIED? BPL KBDA15 ;YES KBDA14 = . BIT #040000,(R2) ;IS INPUT ON PUNCHED TAPE ? SE UINY ADREALV DEE ATRNTEALS I ;4)(REVYDPH0,0020#0 T BI NO; 50YOTT E BN D?LIVAE YP TCEVIDES IS,YE; 2)(REVYDPH0,40#7 T BI NO; 50YOTT E BN E?BLLAAIAVV DET ALS I ;2)(REVYDPH0,0000#1 T BI CEVIDE2*= X DEIN; R2 L AS O. NCEVIDEL CAGILOT ALT GE; 2 ,R4)(REVTDAL V MO NO; 50YOTT Q BE T?ISEXE ICEV DTENAERLT AESDO; ) R4V(DEHY,P000004 # IT B S LEAB TRDWO VEHAF I 5OR FCKHE CLYON; R2 C DE SKFT ; AYRLOV Z FN.I SKFT S YE; 00KBFT Q BE SKFT ? 4)(=D DEENSPSUK AS TIS; R2 C DE SKFT 3.R ROER S.YE; 30KEFT Q BE SKFT )?=3 (VETIACK AS TIS; R2 C DE SKFT S.YE;  BGT ABRFIN ; NOT DEQUED, CAN'T ABORT, RETURN. ABRT .IFNZ OVRLAY ; ONLY WORRY ABOUT I/O FLAG WITH OLAYS. ABRT BLT ABRD13 ; DEQUEUED BUT I/O IN PROGRESS. ABRT .ENDC ABRT BR ABRD30 ; GO FINISH UP ABRT ; ; ABRC10 =. ; HERE ONLY IF ABORTING THE ACTIVE TASK ABRT MOV R0,R2 ; PU? BNE KBDA20 ;YES MOV #ECHOCH,R4 ;NO, GET NON-PRINTING ECHO CHAR KBDA15 = . MOVB R4,@TTODBR(R5) ;YES, OUTPUT CHAR FOR ECHO KBDA20 = . MOV ITIMER(R5),R3 ;GET ADDRESS OF OPERATOR RESPONSE TIMER MOVB #TTITIM,TCNTR(R3) ;SET TIMER BIT #040000,(R2) ;IS INPUT ON PUNCHED TAPE BNE KBDB40 ;YES KBDA30 = . JMP RESTOR ;RETURN ; ; PROCESS END OFG INEXND IOR F*2O. NOG L ; 4 R SL A . =2 O2TY T. NOE ICEV DALICOG LET G ; R4),R0E(ICEV D B OV M 6 D+MORR E LR C E ULOD MORRR EIN. NOT NI UCTUNEF DUT P ; +4ODRMER3, R OV M E ULOD MORRR ETOE OD CORRR E2;D+MORR,ETOROER # OV M T IS LING LA FORRR EUTEOIM TET S ;0)(RORRR,ETOROER # OV M . = 20YOTT SSREDD ASTLIT PUINT ENRRCUT GE; 0 ,R5)(RADSTIL V MO . =0 O1TY T0 O2TY T R B DCEN . 00KAFT Q BE SKFT ? D)UEUE(Q2 S=TUTA SIS; 2 ,R#2 B SU SKFT SKTAE THF OUSATSTE THT GE; R2),R0T(TATS VBMO SKFT S PTRUERNT ILL AUT OCKLO; S #P,@40#3 VBMO SKFT R0T SERE; R0 R AS SKFT SSREDD AERADHET GE; 1 ,R0)(RERADHE V MO SKFT EXND IRDWOO NT IKEMA; R0 L AS SKFT T TASK NUMBER INTO R2 TO SAVE IT. ABRT ASL R2 ; MAKE INTO A WORD INDEX ABRT MOV HEADER(R2),R1 ; GET HEADER ADD. FROM TASK TABLE ABRT CMP R1,ACTIVE ; IS THIS TASK REALLY ACTIVE? ABRT BNE ABRFIN ; NO - THEN STOP ABORTING IT. ABRT ; TASK TABLES SCREWED UP. ABRT CLR ACTIVE ; GET RID OF THE ACTIVE TASK ABRT  LINE CHARACTER ; KBDA50 = . MOVB #CR,R4 ;GET CR FOR OUTPUT MOVB #3,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF CR BR KBDA15 ;GO OUTPUT CR ; ; PROCESS MESSAGE RESTART CHARACTER ; KBDA70 = . MOVB #'^,@TTODBR(R5) ;OUTPUT A "^" MOVB #5,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "^" CLR CHCNT(R2) ;ZERO CHAR COUNT FOR RESTART OF INPUT BR KBDA30 ;GO RETURN ; ; SB LFF OIPTR S ; 0 ,R010000 # IC B F BUSG M G IF . S ESDRADT IS LUTTPOUT ENRRCUT GE; 0 ,R5)(RADSTOL V MO UTNP I ; 0 O1TY T EQ B T?PUINO CH EORT PUUT OOR FUT OMETIS I ; ) R3T(PRTY T B ST T . =5 O0TY T ROZET NOS IIT ; 0 O4TY T MP J ROZES IIT ; 5 O0TY T LE B NTOU CATPERER EC D ; ) R3T(RPTO T B EC D ) O. NITUNN IRS OERIM(TE YT BAGFLO ER Z ; B MFTI O B LR C T PUUT OSTLA S.YE; 10KEFT I BH SKFT R BEUM NALEG LSTGEAR L >K#AS THE TIS; KSAS,TR0 PBCM SKFT C ND.E: 20KZFT SKFT E ON DDYEALR A -KSECCHD UNRO AMPJU; 30KZFT BR SKFT T. IEDNEI S AELEV LTYRIIOPRT GE; 2 ,RR4 VBMO SKFTOMRPM RO FITD EE N IAS. DD AERADHET GE; 1 ,RR3 V MO SKFT . ONY RRCA L.AL COMRPDQA T NO; 20KZ CLR COUNTR ; AND THE TASK'S COUNTER ABRT CLR MFLAG ; CLEAR TASK LOCKOUT MOV SP,R1 ; HERE WE MUST TRANSFER , IN ORDER, THE ABRT ADD #ATASK+4,R1 ; CONTENTS OF THE TASK STACK TO THE SYS ABRT MOV STACK,SP ; STACK SO THAT THE RETURN (ABRFIN) WILLABRT MOV -(R1),-(SP) ; WORK. (GLAD WE ONLY DO THIS ONCE!) ABRT MOV -(R1),-(SP) ; FIRST, THE TASK# AND THE PC.  PROCESS RUBOUT CHARACTER (CHARACTER DELETION) ; KBDA80 = . TST CHCNT(R2) ;IS CHAR COUNT ZERO? BEQ KBDA20 ;YES, IGNORE RUBOUT DEC CHCNT(R2) ;DECR CHAR COUNT TST (R2) ;IS ECHO SPECIFIED BMI KBDA15 ;NO DEC R3 ;POINT TO LAST CHAR INPUT TO BUFFER TSTB FRSTRO(R1) ;IS THIS 1ST RUBOUT? BNE KBDB10 ;NO INCB FRSTRO(R1) R HA CET G ;1 ,R5)(RBRODTT @ B OV M 5 R SL A G INEXND ILEAB TRDWOR FO2 T*NI U ; R53, R OV M NETIOU RT.INR FOG LA FUTEOIM TET S ; ) R3G(LAOF T B NC I TEBYG LA FERIM TOMFR. NOT NI UET G ; R3B,MFTI O B OV M . = TOYOTT ; ITUNY TT ; EMSTSYE THN OEDEUQUS IUTTOINPRE OD CORRR EAN ; . EDCTLESES IE,BLLAAIAVF IE,ICEV DTY TTENAERLT AAN ; TSMPTEATS RYNTR TEAFD REURCC OOT NAS HPTRUERNT IIFFT L BP SKFT ; AYRLOV Z FN.I SKFT . ALEGLL I. =0R BEUM NSKTA; 10KEFT Q BE SKFT C ND.E SKFT N)IG SEDNE- . ER VAYRLVE(O# SKTAT GE; R0),SPK(ASFT V MO SKFT ; AYRLOV Z FN.I SKFT C ND.E SKFT ) ONSIER VLYONE  ABRT .IFNZ RGSAVE ; ABRT MOV -(R1),-(SP) ; THEN R0 & R1, IF SAVED. ABRT MOV -(R1),-(SP) ; ABRT .IFG $ABMES ; ABRT MOV -(R1),-(SP) ; NEXT R2 IF USING ABORT MESSAGES. ABRT .ENDC ABRT .IFNZ OVRLAY  ;YES, SET 1ST RUBOUT SWITCH MOVB #'\,R4 ;GET A "\" FOR OUTPUT MOVB #7,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "\" MOVB (R3),SLSHCH(R1) ;SAVE 1ST CHAR DELETED BR KBDA15 ;GO OUTPUT "\" KBDB10 = . MOVB (R3),R4 ;GET CHAR BEING DELETED BR KBDA15 ;GO OUTPUT CHAR KBDB20 = . CLRB FRSTRO(R1) INC CHCNT(R2) ;INCR CHAR COUNT MOVB R4,(R3) ; ; - -ITEXN PO UNSIOITNDCO ; ; E YT BAGFLR METIT PUUT OIND NEAINTCOS IO. NITUN ; ; --Y TRENN PO UNSIOITNDCO ; ;O OTTY,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;E INUTROT OUMETIO CH EUTNP IORT PUUT OTY T--O OTTY T ;; ;E AG.P 45IOTO BR ) SP-(M,TITW#T V MO R METIT AI WE EUQU ;P)(S,-5)(RERIMWT V MO UTBORUT 1ST PUUT;O) R5R(DBTO@TO,#R VBMO PETYR HA CET;S) R1OR(CR BEUM NSKTAT GE; R0),SPK(ASFT SBBI SKFT ADLOE YT BOR FR0R EACL; R0 R CL SKFT ; AYRLOV FZ.I SKFT ERSTGIRER ROERR EACL; R5 R CL SKFT K ACSTF OOP TONS PVESA; P)(S,-PS@# VBMO SKFT ; SKFT S TUTA SORRR ETOX DEINK ACST; 4 + VE  ; ABRT MOV -(R1),-(SP) ; NOW R3 - R5 IF OVERLAY VERSION ABRT MOV -(R1),-(SP) ; ABRT MOV -(R1),-(SP) ; ABRT .ENDC ABRT .ENDC ABRT MOV -(R1),-(SP) ; FINNALLY THE PS. THIS INLINE CODE IS, ;MOVE CHAR TO USER'S BUFFER MOVB R4,SLSHCH(R1) ;SAVE 1ST NON-RUBOUT CHAR MOVB #'\,R4 ;GET A "\" FOR OUTPUT MOVB #7,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF "\" BR KBDA15 ;GO OUTPUT "\" ; ; MAXIMUM CHARACTER COUNT EXCEEDED ; KBDB30 = . TSTB MAXCH(R1) ;WAS MAX CHAR PREVIOUSLY EXCEEDED? BNE KBDA20 ;YES INCB MAXCH(R1) ;NO, SET MAX CHAR EXCEEDED FLAG E(YPHT,C3.#1 VBMO RSHA CUPRMWA. NOT GE ;1)(RONTY,TCHWU#N VBMO C ND.E . = 20ITTO SB LFF OIPTR;S R01,0000#0 C BI S ESDRADT IS LET;G 0 ,R5)(RADSTOL V MO O ;N 20ITTO Q BE ? EDATTINI IBEO TUTTPOUS ;I 1)(RRTYPTT TBTS UFGBMS FG.I . = 10ITTO 45IOTO BR P)(S,-IMITTT # OV M R METIE NSPOES RORATEROPE EUQU);SP-(),R5R(METI I OV M S TUTA SRDOAYBKEY TTT SE ;SA=F RRFE SKFT S),PPCR TEAF (K#AS TTOX DEINK ACST; 4 + VESA=F K ASFT SKFT S ERSTGIREL RANEGEE TH; C ND.E SKFT VESAO TEDUSS RDWOK ACSTF OERMBNU; 2.=1 E AVFS SKFT S AYLW AEG RLL AVESA; HRUS,PR5 R JS SKFT ; VESARG Z FN.I SKFT C ND.E: 10KZFT SKFTNTOI PRYNT ETECADIINO TABRT ; AT MOST, ONLY 4 WORDS LONGER THAN A ABRT ; LOOP. AT BEST IT IS 2 WORDS LESS. ABRT ; ABRD10 =. ; .IFNZ OVRLAY ; CMPB R0,#OVTMIN ; IS THIS AN OVERLAY TASK? ABRT BLO ABRD30 ; NO. ABRT TSTB IOSTAT(R0) ; ANY I/O IN PROGRESS? ABRT BEQ ABRD15 ; NO.  MOV OTIMER(R5),-(SP) ;DEQUEUE ECHO TIMER JSR PC,DQTIME TST (SP)+ BR KBDA20 ;GO SET INPUT TIMER ; ; PUNCHED TAPE INPUT ; KBDB40 = . INCB @TTICSR(R5) ;READ A FRAME OF PUNCHED TAPE BR KBDA30 ; ; PROCESS END OF MESSAGE (EOM) CHARACTER ; KBDB50 = . MOVB R4,@TTODBR(R5) ;OUTPUT CR FOR ECHO MOVB #11.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF CR KBDB60 = . ) R5R(CSTI@T4, R B OV M . =0 I2OI T IT BLEABENR DEEA RPTR EACL, NO ; 4 R EC D S YE ; 0 I2OI T NE B R?DEEA RPTY TTM RO FUTNP IIS ; ) R3,(000004 # IT B TSBIE BLNA EDR RPT& T IND ARBOEY KADLO ; R41,10 # OV M D REEACLR CSF OT"BIE ON"DT HA TRESUIN ;4 ,R5)(RBRIDTT @ B OV M O CH EALRMNOR FOE YP TARCHT SE ; 1)(RPETYCH1, # B OV M H TCWI SUTBORUT 1SR EACL ; ) R1O(TRRS F B LR C AGFLD DEEEXC EARCHX IT BGNSIR EACL; P)(S+3 RBCL SKFT ; AYRLOV Z FN.I SKFT D VESAS ERSTGIREF OERMBNUT ULFADE; =0 E AVFS SKFT T INPOY TREN; =. SKETFR SKFT ; SKFT C ND.E SKFT NTOI PRYNT ESKETFRR VE OMPJU; 10KZFT BR  CAN ABORT NOW. ABRT ABRD13: MOVB #-3,TSTAT(R0) ; SET ABORT REQUESTED STATUS-OVERLAY. ABRT BR ABRD31 ; DON'T CALL RPOM. ABRT ABRD15: MOVB #8.,TSTAT(R0) ; SET STATUS TO 8 FOR RPOM. ABRT MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; SAVE TASK NUMBER ABRT MOV R0,-(SP) ; PUSH TASK NUMBER FOR RPOM ABRT  MOV ITIMER(R5),-(SP) ;DEQUEUE OPERATOR RESPONSE TIMER JSR PC,DQTIME TST (SP)+ BR KBDA30 ;GO RETURN KBDB70 = . .IFZ EOMPRT MOVB #RO,R4 ;USE RUBOUT IF EOM NOT ECHOED .ENDC MOVB R4,@TTODBR(R5) ;OUTPUT EOM CHAR FOR ECHO MOVB #8.,CHTYPE(R1) ;SET CHAR TYPE FOR ECHO OF EOM BR KBDB60 ; .PAGE ; ; REQPP --SUBROUTINE TO PREPROCESS REQUEST LISTS ; MAR EACL ; 1)(RCHAX M B LR C R TEUNCOR HA CZELIIAITIN ; 3)(RNTHC C LR C S ESDRADR FEUF BTADAS ERUST GE ; R3),R0A(AT D OV M SSREDD ASTLIT PUINT ENRRCUT GE ; R0),R5D(TALS I OV M . = 10IITO RNTURE ; ) R2 ( MP J . = 50IOTO K ACSTF OFE OD CORRR EOP;P + P)(S T TS METI,QPC R JS PTRUERNT IERNTRI PTY TLEABEN ;5)(RSROCTT,@00#1 SBBI . = 45IOTO P)(S,-IMOTTT # OV M SKFT. NTOI PRYNT ETECADIINO TIT BGNSIT SE; ) SP3(,+00#2 SBBI SKFT SKETFRO NT INTOI PRYNT E'SOMRP; =. OMRPDQ SKFT ; SKFT S.TUTA SORRR EALRMNOE THS RNTURE' OMRPDQ '. ITEXN OTSINPOY TREN; SKFT O TWE THE ATTIENERFFDIO TEDUSS IISTH T. IRSEACL' SKETFR '. ERMBNU; SKFT SKTAE THG ININTAON CRDWOK ACSTE THN IIT BGNSIE THS ET SM'POQR'D; SKFT  JSR PC,DQOVLY ; CALL ON RPOM. ABRT MOV (SP)+,R0 ; RESTORE R0 (TASK NUMBER) ABRT MOVB #340,@#PS ; LOCK OUT INTERRUPTS ABRT .ENDC ABRT ABRD30: MOVB #7,TSTAT(R0) ; SET ABORTED STATUS. CLR TSTACK(R2) ; CLEAR STACK POINTER FOR DSPTCH ABRT ABRD31: .IFG $ABMES ; ONLY INCLUDED IF MESSAGES WANTED ; CALLING SEQUENCE -- ; ; JSR PC,REQPP ; ; CONDITIONS UPON ENTRY-- ; ; REQUEST LIST ADDRESS IS ON STACK ABOVE SAVED REGISTERS ; ; CONDITIONS UPON EXIT -- ; ; THREAD WORD OF LIST IS DECREMENTED BY 1, ; EXCEPT WHEN .NE. 1 ON ENTRY ; ; BYTE 0 OF SYSTEM WORD OF LIST CONTAINS CALLING ; TASK NO. WHICH IS ZERO IF SYSTEM WAS CALLER ; ; BYTE 1 OF SYSTEM WOT NI UOR FERIM TUTTPOUE EUQU; ) SP-(),R5R(METI O OV M SG MOFR HA CST 1UTTPOU ;) R5R(DBTO@T4, R B OV M . =2 O4OI TS YE ;1)(RPETYCH.,10 # B OV M NO ; 2 O4OI T NE B CRA T IIS ; R #C4, R B MP C G MSF OARCHT 1ST GE ; R4),R4T(DASG M B OV M R TEUNCOR HA CZELIIAITIN ; 4)(RNTHC C LR C . = 40IOTO SSREDD AERFFBUA AT DRSSE UET;G 4 ,R0)(RTADA V MO . =0 O3OI TC ND.E 40IOTO BR L VELEY ITORRI P =R4 ; SKFT S ESDRADR DEEA H =R3 ; SKFT . EDFIDIMOT NOS IT'TATS '. M)PO RBYT SES UEAL(VY TRENN OEDUS; SKFT RE ARSTEISEG RNGWILOOL FHE TENTH, EDAV SRE ARSTEISEG RLL ARYNT EON; SKFT D.SE UISM POQR DENWHD IEIFOD MOT NRE AERADHEM RAOGPRE TH; SKFTD ANS TUTA SSKTAE TH D.LEAL COT NISY VLQO D. ADRETHS ROE THM RO FSKTA; SKFTNGCILI SMETIA E OVEM RTOM PO RBYY NL OEDUSS IM'POQR'DT INPOY TRENE TH; . ABRT AB2MES =$ABMES+$ABMES-2 ; NEED THIS VALUE FOR WORD INDEX VALUE ABRT MOV #AB2MES,R2 ; GET NUMBER OF MESSAGE BUFFERS *2 ABRT ABRM10: MOV ABMTAB(R2),R1 ; SEE IF THIS MODULE IS FREE BY CHECK ABRT CMP (R1),#1 ; OF THREAD WORD. =1 IF FREE. ABRT BEQ ABRM20 ; FREE. GO USE IT. ABRT SUB #2,R2 ; SEE IF ANY MORE BUFFERS ARE LEFT ABRT BGE ABRM10 RD OF LIST CONTAINS TTY PHYSICAL ; UNIT NO. ; ; IF LIST HAD PARAMETER ERROR, THE ERROR WORD OF ; LIST CONTAINS AN ERROR CODE; OTHERWISE IT CONTAINS ; ZERO ; ; RO CONTAINS LIST ADDRESS ; R1 CONTAINS PHYSICAL TTY UNIT NO. ; R2 CONTAINS PRIORITY LEVEL ; R3 CONTAINS (2*UNIT + LEVEL) ; R5 CONTAINS 2*UNIT ; REQPP = . MOV 20(SP),R0 STLIT AS PERNTOI PVEMO ; 4 ,RTADA # DD A T IS LOFG INNNGIBEO TERNTOI PET;G 4 ,RR0 V MO SB LFF OIPTR;S R0 C DE ERFFBUS ERUSN IISA AT DO,;N 30IOTO Q BE ? ERFFBUG INRKWON ISTLIS ;I R01,0000#0 T BI UFGBMS FG.I SSREDD ASTLIT PUUT ONTREUR CET;G 0 ,R5)(RADSTOL V MO UTTPOUR FOE YP TARCHT SE ; ) R1E(YPHT C B LR C . = 20IOTO ES;Y 10IITO Q BE SKFT ; SKFT ; AYRLOV Z FN.I SKFT ; SKFT R TEINPOK ACST= <= PC ; SKFT R BEUM NSKTA ; SKFT ; SKFT ! ; YES. GO CHECK IT. ABRT BR ABRFIN ; NONE LEFT. RETURN WITHOUT MESSAGE. ABRT ABRM20: MOV R0,4(R1) ; PUT TASK NUMBER IN FIRST ARGUMENT ABRT MOV R1,-(SP) ; PUT ADDRESS OF BUFFER ON STACK FOR CALABRT JSR PC,LERTYP ; THE PS IS ALL READY ON STACK ABRT BR ABRE10 ; THEREFORE, NEED THIS BRANCH ABRT .ENDC ABRFIN =. ; COMPLETION EXIT " ;GET LIST ADDRESS FROM STACK JSR PC,LOCOUT ;LOCKOUT INTERRUPTS WHILE TESTING ;THREAD WORD DEC (R0) ;IS LIST QUEUEABLE BNE REQA15 ;NO, THREAD WORD .NE. 1 MOVB (SP)+,PS ;YES, RELEASE LOCKOUT MOVB DEVICE(R0),R1 ;GET LOGICAL DEVICE NO. REQA02 = . CMP R1,LOGMAX ;IS IT TOO LARGE? BHI REQA25 ;YES ASL R1 ; D?TEIAITINE BTOT PUINS ;I 1)(RRTYPTT TBTS H TCWI SUTEOIM TST 1ARLE;C 1)(RTOSTFR RBCL ) R4R(NTTCM,TITW#T VBMO R METIT AI WETES;R 4 ,R5)(RERIMWT V MO O ;N 10ITTO E BN ? OND NEUR TITUNS ;I ) R1N(YOTT TBTS ITUNR FOT UNCOT EAEP RET;S) R1T(RPTO,TYSTR#N VBMO CKTA SOP PND ASSREDD ARNTURET GE ; 2 ,R)+SP ( OV M . = ITINTO ;D RETOES ROT NND AEDUSE AR4 ,RR32, R ;. NO AY WISTHK OO LCKTA SHE TRYNT EON; SKFT ; SKFT C ND.E SKFT ; OMRPDQ EF.D SKFT ; LYOVDQ EF.R SKFT ; AYRLOV Z FN.I SKFT ; PRPOR,SHPU EF.R SKFT% ABRT MOVB (SP)+,@#PS ; ALLOW INTERRUPTS ABRT ABRE10: .IFNZ RGSAVE ; ERROR RETURN .IFZ OVRLAY ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT MOV (SP)+,R2 ; RESTORE R2 (ONLY WITH ABORT MESSAGES) ABRT .ENDC ABRT MOV (SP)+,R1 ; RESTORE REGIST&MAKE INDEX FOR WORD TABLES BIT PHYDEV(R1),#7400 ;IS DEVICE TYPE VALID? BNE REQA30 ;NO BIT #100000,PHYDEV(R1) ;IS DEVICE AVAILABLE? BNE REQA50 ;NO MOVB PHYDEV(R1),R1 ;GET TTY UNIT NO. FOR INDEXING TABLES MOVB R1,SYSTEM+1(R0) ;SAVE UNIT NO. IN BYTE 1 OF SYSTEM WORD CMPB TYPE(R0),#1 ;IS EXIT TYPE VALID? BLO REQA35 ;NO CMPB TYPE(R0),#3 ;MAYBE BHI T NI*U 2NSAINTCO5 R ;. NOT NI UNSAINTCO1 R ;S ESDRADT IS LNSAINTCO0 R ;; --T XI EONUPS ONTIDION C ;; Y LLFUCTPEES RUTTPOUR OUTNP IOR F 1OR0 S INTAON CRTYPTT ; SSREDD ASTLIT PUINT ENRRCUS INTAON CADSTIL ; S ESDRADT IS LUTTPOUT ENRRCUS INTAON CADSTOL ; ITUN2*S INTAON CR5 ; O. NITUNE THS INTAON CR1 ; CKTA SONC PVEBO AISS PND AUT OEDCKLOE ARS UPRRTEIN ; SKETFR EF.D SKFT E AG.P SKFT**********************************************************************;* SKFT * ; SKFT * : ERMBNUE GULOTACA ; SKFT * 0 : ONSIVIRE ; SKFT * )ERS IF NEEDED. MOV (SP)+,R0 ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION. ABRT JSR R5,POPR ; ABRT .ENDC ABRT .ENDC ; FIX UP STACK SO THAT TASK NO. IS GONE MOV (SP)+,(SP) * REQA35 ;NO MOVB LEVEL(R0),R2 ;GET REQUEST PRIORITY LEVEL FOR ;INDEXING QUEUES AND TABLES CMP R2,#1 ; IS IT A VALID LEVEL? BHI REQA40 ;NO, INVALID LEVEL REQA05 = . CLRB SYSTEM(R0) ;ZERO TASK NO. IF SYSTEM IS CALLER MOV ACTIVE,R3 ;GET CURRENT ACTIVE TASK HEADER ADDRESS BEQ REQA10 ;WHEN ACTIVE IS ZERO, NO TASK IS ACTIVE CLR R ; ;- -RYNT EONUPS ONTIDION C ;T NIOI,TPC R JS ; ;- -CEENQUSEG INLLCA ; ;T PUUT OORT PUINE IZALTINI ITOE INUTROUB S--T NIOI T ;; ;E AG.P R4N IEXND ITHWIN URET;R PC S RT ERSTGIREE ORSTRE ; 1 ,R)+SP ( OV M 4 R SL A 4 ,RR1 D AD R12, R DD A ) X +ELEV L +ITUN4**( 2 ; 1 R SL A X DEINT UCTRNSCO ; 1 R SL A R TEISEG RVESA ; 1 -7OV-N18 : TEDA ; SKFT * 53: ERMMRAOGPR ; SKFT * ; SKFT * . UEAL VROZEN-NOA O T ; SKFT * T SES IE'AVGS'RR TEMERAPAN GEYS SHE TIFD RETOES R ; SKFT * E BLLWIE TH K.TSRE FBYD SE URE AR50- RRSTEISEG RS:ERSTGIRE ; SKFT * ; SKFT * - ; THEN WERE READY FOR RTS PC. ABRT RTS PC ; .PAGE ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ; THERE IS A LIMIT TO THE NUMBER OF SYSGENABLE ABORT MESSAGE ABRT ; BUFFERS THAT CAN BE ADDED TO THE SYSTEM WITHOUT ADDIONAL CODE ABRT ; BEING ALSO ADDED. THE CHECK BELOW PREVENTS AN EXCESIVE ABRT ; REQUEST FROM BEING MADE. AD.4 BISB TASKNO(R3),R4 ;SAVE ACTIVE TASK NO. IN BYTE 0, MOVB R4,SYSTEM(R0) ;SYSTEM WORD OF LIST INCB IOSTAT(R4) ;INCREMENT TASK I/O STATUS IN TASK TABLE REQA10 = . MOV R1,R3 ;MAKE A UNIT/LEVEL INDEX TO TABLES; I.E. ASL R3 ; INDEX = (2 * UNIT NO.) + LEVEL MOV R3,R5 ; R5 = 2*UNIT ADD R2,R3 ; R3 = 2*UNIT + LEVEL CLR ERROR(R0) ;NO LIST ERROR) SP-(1, R OV M . = X TQGE ;S UEUE QUTNP IOR F 2 = ; ESEUQUT PUUT OOR F 0 = XREHE W ; X)+ L VELE+ T NI*U(42* (ESBLTAQ O TEXND INSAINTCO4 R ;; --T XI EONUPS ONTIDION C ;; LYVETIECSPRET PUINR OUTTPOUR FO2 R O 0NSAINTCO4 R ;L VELES INTAON CR2 ; O. NITUNS INTAON CR1 ; ;- -RYNT EONUPS ONTIDION C ;; QXET,GPC R JS ; ;- -CEENQUSEG INLL E.IVCT ASKTA= 3 ; SKFT * S TUTA SSKTAL GALEIL= 2 ; SKFT * R.BEUM NSKTAL GALEIL= 1 ; SKFT * . NTCEESUI QET SSKTA= 0 ; SKFT * SSREOGPRN I/O IUT BEDEUQUDE= 1 - ; SKFT * E:AR ; SKFT *ESLUVAE TH K.TSRE FBYT SEE LUVAS TUTA S AIS 1DIONAL BUFFERS REQUIRE THE BUFFER ABRT ; AND AN ENTRY IN THE WORD TABLE ABMTAB. ABRT ; ABRT .IFG $ABMES-5 ; THE CURRENT MAXIMUM NUMBER OF ABORT ABRT XXXXXX ; MESSAGES BUFFERS IS 5. ABRT .ENDC ABRT ; ABRT 2S, SO INIT ERROR WORD TO ;CODE FOR NO ERRORS RTS PC ;RETURN WITH ; R0 = LIST ADDRESS ; R1 = TTY UNIT NO. ; R2 = PRIORITY LEVEL OF REQUEST ; R3 = UNIT*2 + LEVEL ; R5 = UNIT*2 REQA15 = . INC (R0) ;RESTORE THREAD WORD MOVB (SP)+,PS CA ; ;S LEAB TSTLA QND ASTIRQF ;G INEXND IOR FERNTOI PCTRUSTON CTOE INUTROUB S--X TQGE ; ;; GEPA . N URET;R PC S RT R TEISEG RRETOES;R R0+,P)(S V MO UTKOOC LSEEAEL;R PS+,P)(S VBMO . = 10LIDQ 4)(RSTLA,QR0 V MO S ESDRADE BLTAT RSFI QET;G R0T,RSFI#Q D AD ES;Y 0 ,RR4 V MO D EAHR THE TOFD ENE THT IAS;W 10LIDQ E BN ) R4T(RSFI,QRRFE ; SKFT * D.EEFRE BTOK AS THE TOFR BEUM NHE TISK ASFT ; SKFT * REHE W ; SKFT * ; SKFT * ) ANTROR(F) RRFEK,ASFTK(TSRE FLLCA. 2) ; SKFT * ; SKFT * R ER,F)+SP (V MO ; SKFT * 5 .IFGE $ABMES-1 ; ABRT ABMES1: .WORD 1 ; MESSAGE BUFFER 1. THREAD WORD. ABRT .WORD 99. ; ERROR CODE ABRT .WORD 0,0,0,0 ; ARGUMENTS FOR ERRTYPE. ABRT .IFGE $ABMES-2 ; ABRT ABMES2: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 2. ABRT .IFGE $ABMES-3 ; 6 ;RELEASE LOCKOUT MOV #ERRQL,ERROR(R0) ;SET NOT QUEUEABLE ERROR CODE RTS PC ;RETURN REQA25 = . MOV #ERRLDN,ERROR(R0) ;SET ERROR CODE FOR INVALID ;LOGICAL DEVICE NUMBER RTS PC ;RETURN REQA30 = . MOV #ERRPDT,ERROR(R0) ;SET ERROR CODE FOR PHYSICAL ;DEVICE TYPE ERROR RTS PC ;RETURN REQA35 = . R0 V MO 4)(RSTIRQF,@#1 V MO STIRQFY BTOD TEINPOT IS LUEUEEQ;D R0),R4T(RSFI@Q V MO TSUPRRTEINT OUCKLO ; UTCOLOC, P SR J 4 RTOR TEINPOE BLTAQ T GE ; X TQGEC, P SR J R TEISEG RVESA ; ) SP-(0, R OV M . = STLIDQ ;T PUINR FO2 = ;T PUUT OOR F 0 = XREHE W ; X)+ L VELE+ T NI*U(42*S INTAON CR4 ; ;- -ITEXN PO UNSIOITNDCO ; ;Y ELIVCTPEES R K TSRE FT EM ; SKFT * Y)BLEMSS(A P)(S,-SKTA FV MO. 1) ; SKFT * ; SKFT * : ISE INUTROS HI TOR FGEKAIN LHE T E:AGUS ; SKFT * ; SKFT * . TETA SNTCEESUI QHE TINK AS TEDNDPEUS SORD UEUE Q ; SKFT * AERTHEIE ACPLO TISE INUTROS HI TOFN IOCTUN FHE9 ABRT ABMES3: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 3. ABRT .IFGE $ABMES-4 ; ABRT ABMES4: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 4. ABRT .IFGE $ABMES-5 ; ABRT ABMES5: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 5. ABRT .ENDC ABRT : MOV #ERRET,ERROR(R0) ;SET ERROR CODE FOR INVALID EXIT TYPE RTS PC ;RETURN REQA40 = . MOV #ERRLEV,ERROR(R0) ;SET ERROR CODE FOR INVALID LEVEL RTS PC ;RETURN REQA50 = . BIT #040000,PHYDEV(R1) ;DOES ALTERNATE DEVICE EXIST? BEQ REQA25 ;NO MOV ALTDEV(R1),R1 ;GET ALTERNATE DEVICE NO. BR REQA02 ;GO LOOK AT ALTERNATE DEVICE .PAGE ; ; ; S,STLIT ESQURET PUINR OUTTPOUR FO2 R O 0NSAINTCO4 R ;L VELES INTAON CR2 ; O. NITUNS INTAON CR1 ; ;- -RYNT EONUPS ONTIDION C ;; STLIDQC, P SR J ;; --E NCUEEQ SNGLIAL C ;; UEUE QELEV/LCEVIDE ; TEIAPRROPP AHE TOFP TON OLYNTREUR C ;T IS LSTUEEQ RTY THE TUEUEEQ DTOE INUTROUB S--T ISQL D ;; ;E AG.P RNTURE ; C P TS R T OUCKLOE ASLERE TE:OSRPPU ; SKFT * ; SKFT * SKETFR: ONTICAFITIENIDM RAOGPR ; SKFT * ; SKFT * K S T E R F ; SKFT**********************************************************************;* SKFT E AG.P RTAB = .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .IFGE $ABMES-1 ; ABRT ABMTAB: .WORD ABMES1 ; TABLE OF ADDRESS OF ABORT MESS. BUFFERABRT .IFGE $ABMES-2 ; > TUNSPN -- SUBROUTINE TO UNSUSPEND CALLING TASK ; ; CALLING SEQUENCE -- ; ; JSR PC,TUNSPNJ ; JSR PC,TUNSPN ; ; CONDITIONS UPON ENTRY -- ; ; R0 CONTAINS ADDRESS OF LIST ; TUNSPN = . CLR -(SP) ;PUT SUSPENDED TASK NO IN LOWER MOVB SYSTEM(R0),(SP) ;BYTE OF STACK WORD CLR -(SP) ;PUSH IRTRN ONTO STACK (RETRN TO CALLR) JSR PC,UNSPND ; ; S ,P)+SP ( B OV M ) R4T(ASQL0, R OV M 0 RBYO TEDNTOI PSTLIE EUQU ; 4)(RSTLA@Q0, R OV M S PTRUERNT IUTKOOC;L T OUOC,LPC R JS R4O TERNTOI PLEAB T QET;G QXET,GPC R JS . = STLI Q; UTNP IOR F 2 ; UTTPOUR FO0 = X E ERWH ;) X +ELEV L +ITUN4**( 2NSAINTCO4 R ;; --T XI EONUPS ONTIDION C ;; TSIS LSTUEEQ RUTNP IOR F 2T,PUUT OOR F 0NSAINTCO4 R C ND.E RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB ; S5MEAB D ABRT .WORD ABMES2 ; ABRT .IFGE $ABMES-3 ; ABRT .WORD ABMES3 ; ABRT .IFGE $ABMES-4 ; ABRT .WORD ABMES4 ; ABRT .IFGE $ABMES-5 ; ABRT .WORCALL UNSUSPEND TST (SP)+ ;POP ERROR CODE OFF STACK RTS PC ;RETURN .PAGE ; ; ; QLIST -- SUBROUTINE TO QUEUE TTY REQUEST LIST TO ; THE APPROPRIATE DEVICE/LEVEL QUEUE ; ; CALLING SEQUENCE -- ; ; JSR PC,QLIST ; ; CONDITIONS UPON ENTRY -- ; ; R0 CONTAINS ADDRESS OF LIST TO BE QUEUED ; R1 CONTAINS UNIT NO. ; R2 CONTAINS LEVEL ;