; 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; UPDATE 1 TO THE QUICK AND DIRTY PF - ITS STILL WITH USE. 6/21/72 .TITLE PFTRAP .REF TTICSR,TTIDBR,ERRTYP,PUSHR,POPR,IPL,STACK .DEF PFSIPL PFSIPL =. MOV #PFAIL,@#24 MOV #340,@#26 MOV #1,PFMES RTS PC PFAIL =. MOV #AUTO,@#24 MOV SP,SP1 CMP SP,STACK BLOS PF05 MOV STACK,SP PF05: JSR R5,PUSHR INC PFCNT MOV #TTICSR,R0 ; 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 TABLES ; DISK FILE & CLEA; 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 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 PF10: MOV @(R0)+,-(SP) CMP R0,#TTIDBR BLO PF10 .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162020,R0 MOV (R0)+,-(SP) MOV (R0)+,-(SP) MOV (R0) ,-(SP) MOV #162040,R0 PF15: MOV (R0)+,-(SP) CMP R0,#162076 BLOS PF15 .ENDC MOV SP,SP2 PF20: HALT BR PF20 AUTO =. MOV #PFAIL,@#24 MOV SP2, N 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 14 17 DEC 1971 ABORT,DSPTCH,FRETSK,QSVE,EXIT,UNSP 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 1),#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 ASSP .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162100,R0 AU05: MOV (SP)+,-(R0) CMP R0,#162040 BHI AU05 MOV #162026,R0 MOV (SP)+,-(R0) MOV (SP)+,-(R0) MOV (SP)+,-(R0) .ENDC MOV #TTIDBR,R0 AU10: MOV (SP)+,@-(R0) CMP R0,#TTICSR BHI AU10 MOV @SP1,PFMES+4 MOV PFCNT,PFMES+6 MOV #PFMES,-(SP),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 1971 QUEUE,QSVE,SUSPN OFF QUEUE.V8A ; UP4 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 197 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 HEAD JSR PC,ERRTYP MOV #STLBIT!TIMBIT!TODBIT,@#CLKENB ; TURN ON THE CLOCKS MOV #200,@#165400 ; RESET THE PUSHBUTTON BR AU20 ; NEVER USE IPL CMP @#177570,#177777 BNE AU20 JMP IPL AU20: JSR R5,POPR MOV SP1,SP RTI PFCNT: .WORD 0 SP1: .WORD 0 SP2: .WORD 0 PFMES: .WORD 1,91.,0,0,0,0 .END DATE 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,SUSPND,DSPTCH,DACT - OFF QUEUE.V2A ; UPDATE 1 22 O1 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,6 ; .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 ; .W; UPDATE 2 TO PFTRAP 6/26/72 IGNOR TO FAST INTERRUPTS ; UPDATE 1 TO THE QUICK AND DIRTY PF - ITS STILL WITH USE. 6/21/72 .TITLE PFTRAP .REF TTICSR,TTIDBR,ERRTYP,PUSHR,POPR,IPL,STACK .DEF PFSIPL PFSIPL =. MOV #PFAIL,@#24 MOV #340,@#26 MOV #1,PFMES RTS PC PFAIL =. MOV #PFRTI,@#24 MOV SP,SP1 CMP SP,STACK BLOS PF05 MOV STACK,SP PF05: JSCT 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 ; EXIT 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 ORD 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 R R5,PUSHR INC PFCNT MOV #TTICSR,R0 PF10: MOV @(R0)+,-(SP) CMP R0,#TTIDBR BLO PF10 .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162020,R0 MOV (R0)+,-(SP) MOV (R0)+,-(SP) MOV (R0) ,-(SP) MOV #162040,R0 PF15: MOV (R0)+,-(SP) CMP R0,#162076 BLOS PF15 .ENDC MOV SP,SP2 MOV #AUTO,@#24 PF ; FRETSK ; ABORT ; DSPTCH ; UNSPND ; QIPL .PAGE ;*********************************************************************** ; * ; Q U E U E I N G T A B L E S * ;  ; EXIT ; FRETSK ; ABORT ; DSPTCH ; UNSPND ; QIPL .PAGE ;*********************************************************************** ; * ; Q U E U E I N G T A B L E S * ; .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 20: HALT BR PF20 AUTO =. MOV #PFRTI,@#24 MOV SP2,SP .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162100,R0 AU05: MOV (SP)+,-(R0) CMP R0,#162040 BHI AU05 MOV #162026,R0 MOV (SP)+,-(R0) MOV (SP)+,-(R0) MOV (SP)+,-(R0) .ENDC MOV #TTIDBR,R0 AU10: MOV (SP)+,@-(R0) CMP R0,#TTICSR BHI  * ; 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. * ; ; * ; 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. ! ; 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 "AU10 MOV @SP1,PFMES+4 MOV PFCNT,PFMES+6 MOV #PFMES,-(SP) JSR PC,ERRTYP MOV #STLBIT!TIMBIT!TODBIT,@#CLKENB ; TURN ON THE CLOCKS MOV #200,@#165400 ; RESET THE PUSHBUTTON BR AU20 ; NEVER USE IPL CMP @#177570,#177777 BNE AU20 JMP IPL AU20: JSR R5,POPR MOV SP1,SP MOV #PFAIL,@#24 PFRTI: RTI PFCNT: .WORD 0 SP1: .WORD # * ; 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. * ; * ; PROGRAMMER 55 $ * ; * ; 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. * ; % ; 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 0 SP2: .WORD 0 PFMES: .WORD 1,91.,0,0,0,0 .END ' * ; 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 * ; * ;*********************************************************************** ; .PAGE .DEF( * ; 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 * ; * ;***********************************************)/# 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* .PAGE .CSECT TASK2 ; HEAD2 =. ; .WORD 1 ; THREAD WORD .WORD EN2 ; ENTRY POINT .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 + 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 QTAB ; ; $CTASK AND $PRIOR CONTAIN THE TASK NUMBER AND PR,************************ ; .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- .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 ; . .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 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 /IOITY 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. QUEU ACTIVE: .WORD 0 ;CONTAINS PROGR0AB ; ; $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. 1TREAD 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 2 ; 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 /# 2/ ; .BYTE 40,15 ; ; EN2 =. ; MOV #LIST2,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE EMT 3AM 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 ; QTAB ; 4 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 ; 5 / ; .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 6 EXIT ; .PAGE .CSECT TASK3 ; HEAD3 =. ; .WORD 1 ; THREAD WORD .WORD EN3 ; ENTRY POUNT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 7 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 ; F 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 ; E 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 F ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 3 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST3 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBGQTAB .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. PPTAB IS A QTAB ; BYTE TABLE AND CONTAINS 1 EN""""""" "" """""""""""DD@DDDDDDDDDDDDDDDDDDDDDDDDfffffffffffffffffffffffffffffffffffffffDDADD+B C8C S+epP}m~smemyP@#(epQ"D+D]l|$Da ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & I; 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 J 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. PPTKTRY 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 ; TAKE CARE OF LEVEL 0 QTAB L XXXXXX QTAB .ENDC QTAB ; QTAB ; THE FOLLOWING TABLE, PPTAB, IS USED TO CONTAIN THE QTAB ; DESCRIPTORS OF EACH SOFTWARE PRIORITY LEVEL. PPTAB IS A QTAB ; BYTE TABLE AND CONTAINS 1 ENTRY FOR EACH LEVEL. QTAB ; THE PROPERTY OF EACH LEVEL IS: M ; 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 NAB 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 O .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 ; QTAB .BYTE PRIP13,PRIP14 ; P 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 ; TAKE CARE OF LEVEL 0 QTAB .BYTE PRIP01,PRIP02 ; ADD MORE CODE IF NPRIOR > 16 QTAB Q ; ; 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 ; R ; 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 ; S 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 INFORMATION. WORD 1 CORRESPONDS TO PRIORITY ; LEVEL 1 (HIGHESTT .BYTE PRIP03,PRIP04 ; QTAB .BYTE PRIP05,PRIP06 ; QTAB .BYTE PRIP07,PRIP08 ; QTAB .BYTE PRIP09,PRIP10 ; QTAB .BYTE PRIP11,PRIP12 ; QTAB .BYTE PRIP13,PRIP14 ; QTAB .BYTE PRIP15,PRIP16 ; UTST (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 ; PRIOV 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 INFORMATIONW 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 QUEUE, AND THE 'LAST' ; TABLE CONTAINS THIS ADDRESS.X 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 INFORMATION. WORD 1 CORRESPONDS TO PRIORITY ; LEVEL 1 (HIGHEST PRIORITY); WORD 2 CORRESPONDS TO PRIORITY ; LEVEL 2 (SECOND HIGHEST PRIORIYRTY .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 Z. 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 QU[ ; 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. .WORD FIRST+24. .WORD FIRST+26. .W\TY); 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 QUEUE, AND THE 'LAST' ; TABLE CONTAINS THIS ADDRESS. ; LAST=. .WORD 0 ; BUMP LOCATION COUNTER OVER LAST(0) ; 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 ; ^EUE, 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. _ORD 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 ; ;NEED ; ; THE FOLL` 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. .WORD FIRST+24. .WORD FIRST+26. .WORD FIRST+28. .WORD FIRST+30. .WORD FIRST+32. .=LAST+NPRaASKS (CORE OR OVERLAY) QTAB ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) QTAB ; QTAB PPTAB = .-1 ; TAKE CARE OF LEVEL 0 QTAB .BYTE PRIP01,PRIP02 ; ADD MORE CODE IF NPRIOR > 16 QTAB .BYTE PRIP03,PRIP04 ; QTAB .BYTE PRIP05,PRIP06 ; b.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 ; cOWING 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-OVERLAY QTAB ; -2= FREE REQUESTED - PENDINdIOR+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 ; ;NEED ; ; THE FOLLOWING TABLE IS THE SYSTEM TASK TABLE. THIS TABLE IS ; BROKEN DOWN INTO 6 SUBe QTAB .BYTE PRIP07,PRIP08 ; QTAB .BYTE PRIP09,PRIP10 ; QTAB .BYTE PRIP11,PRIP12 ; QTAB .BYTE PRIP13,PRIP14 ; QTAB .BYTE PRIP15,PRIP16 ; QTAB .=PPTAB+1+NPRIOR ; GET RID OF ENTRIES NOT NEEDED QTAB .EVEN f ;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-OVgG 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 ; 8 = REQUEST PENDING WITH DQOVLY (RPOM) QTAB h-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-OVERLAY QTAB ; -2= FREE REQUESTED - PENDING I/O COMPLETION-OVERLAY QTAB ; -1= EXIT REQUESTED - PENDING I/O i QTAB ; QTAB ; ; THE FOLLOWING TABLES (FIRST AND LAST) CONTAIN THE PRIORITY ; QUEUE THREAD INFORMATION. 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 jERLAY 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 ; k; 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; ; OTHERWISE THE FILE ID. USED BY THE OVmCOMPLETION-OVERLAY QTAB ; 0 = QUIESCENT (INACTIVE) ; 1 = QUEUING IN PROGRESS. ; 2 = QUEUED ; 3 = ACTIVE ; 4 = SUSPENDED - VOLUNTARY ; 5 = SUSPENDED - INVOLUNTARY ; 6 = DISABLED ; 7 = ABORTED ; 8 = REQUEST PENDING WITH DQOVLY (RPOM) QTAB ; 9 = QUEUED IN RPOM BUT NOT IN ROS. QTAB ; mPROGRAM 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 QUEUE, 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 n8 = 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; oERLAY 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 ; PLQI ; ND.E PLQI ; PC S RT PLQI C ND.E PLQI ; 30PLQI T BG PLQI E.BLTAC MINADY E.ON DNE OCHEAT UNCO; q 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; ; OTHERWISE THE FILE ID. USED BY THE OVERLAY MONITOR. ; (WORD TABLE). ; ; SINCE TASK 0 DOES NOr; 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 ; s 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 ; QTAB .IFNZ OVRLAY PLQIuT 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 ; QTAB ; THE FOLLOWING I/O LIST IS USED IFF WHEN OVERLAY TASKS EXISTS. v 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 ; w ; 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 .BYTE 0 ; NO ERROR TASK ; 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 . 1TO; y 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 ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS QTAB .DEF $TKFLS,$TKFLF ; z 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 .BYT{ 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 WITH WRITE CHECK QTAB .WORD 0,0,0 ; 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 MECOO TREMO; 20PLQI T BG PLQI E ONY BERNTOI PTEBYT ENEMCRDE; R0 C DE PLQI ERNTOU CRDWOE TH2 Y BETEMCRDE; ) R1-( T TS PLQI C ND.E PLQIS.LEAB}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 .BYTE 0 ; NO ERROR TASK QTAB .BYTE 1 ; DISK PRIORITY QTAB~E 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 WRESERVED QTAB .WORD 0 ; RELATIVE START SECTOR QTAB .WORD $TKFLN ; NUMBER OF WORDS TO TRANSFER QTAB .ENDC QTAB ; QTAB ; QTAB TASKS: .WORD NLTASK ; LARGEST TASK NUMBER CURRENTLY IN SYSTEQTAB TAYRLVE OIPSKO TNTOI PERSFANTR; : 25PLQI PLQI ; ) R1D(IF R CL PLQI ; ) R0E(IZBS RBCL PLQI . NGPILAEROV; PLQI F OERRD OOR FABQTE SE T.ANRTPOIM; PLQI ESOMEC BONTIZALITANI IOFR DEORE ERTH; PLQIE LUVAN MOOM-CON N ATOD ZELITANI IEREV; .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 1 ; I/O FUNCTION (0=READ, 1=WRITE) QTAB .WORD 0,0,0 ; RESERVED QTAB .WORD 0 ; RELATIITH 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 ; QTAB ; QTAB HEADER =.-2 ; TASK HEADER ADDRESS (THREAD WORDS). QTAB .=.+TASMAX+TASMAX ; TABLE QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVE OVERLAY TASKS QTAB IFD =.-2-MXTASK-MXTASK ; TASK F PLQI RE AFD I &E,IZBS, TYPR TT,TAOS IIF; AYRLOV Z FN.I PLQI ; ) R0Y(RTTP RBCL PLQI ; 0)(RATSTIO 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 C ND.E PLQI VE START SECTOR QTAB .WORD $TKFLN ; NUMBER OF WORDS TO TRANSFER QTAB .ENDC QTAB ; QTAB ; QTAB HEADER =.-2 ; TASK HEADER ADDRESS (THREAD WORDS). QTAB .=.+TASMAX+TASMAX ; TABLE QTAB ; 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 TASKSILE 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 ; QTAB IOST ; 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#T V MO PLQI ET YGOO TREMO; 10PL QTAB TSTAT =.-1 ; TASK STATUS TABLE QTAB .=.+TASMAX ; QTAB ; QTAB IOSTAT =.-1 ; TASK I/O STATUS TABLE QTAB .=.+TASMAX ; QTAB ; 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 ; AT =.-1 ; TASK I/O STATUS TABLE QTAB .=.+TASMAX ; QTAB ; QTAB TPRTY =.-1 ; TASK PRIORITY TABLE QTAB .=.+TASMAX ; QTAB ; QTAB .IFNZ OVRLAY ; ONLY IF HAVEQI 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 LTYRIIOPRF OERMBNUT GE; 0 ,RLSVELE V MO PLQI | QTAB TPRTY =.-1 ; TASK PRIORITY TABLE QTAB .=.+TASMAX ; QTAB ; QTAB .IFNZ OVRLAY ; NEXT 2 TABLES ONLY IF HAVE OVERLAYS QTAB BSIZE =.-1-MXTASK ; NUMBER OF CORE SEGMENTS QTAB .=.+MAXOVR ; QTAB ; QTAB IOSTAT =.-1 ; TASK I/O STATUS TABLE QTAB .=.+TASMAX ; QTAB ; QTAB TPRTY =.-1 ; TASK PRIORITY TABLE QTAB .=.+TASMAX ; QTAB ; OVERLAY TASKS QTAB BSIZE =.-1-MXTASK ; NUMBER OF CORE SEGMENTS QTAB .=.+MAXOVR ; QTAB ; QTAB ; QTAB .=.+2 ; MAKE SURE WORD AVAIL. FOR ROUND UP. QTAB ; QTAB .E PLQI ; ND.E PLQI ; PC S RT PLQI C ND 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 ; NDC .EVEN ;TAKE CARE OF ODD BYTES .PAGE ;*********************************************************************** ; * ; Q U E U E * ; * ; PROGRAM IDENTIFICATION. QUEUE - QUEUE A SOFTWARE TASK; * ; CATALOG NUMBER 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 t.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 . 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 s QTAB .ENDC .EVEN ;TAKE CARE OF ODD BYTES .PAGE ;*********************************************************************** ; * ; Q U E U E * ; * ; PROGRAM IDENTIFICATION. QUEUE - QUEUE A SOFTWARE TASK; * ; * ; * ; 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 * ; RETURNS TO IT OR TO THE TASK DISPATCHER (DSP . 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 MECOO TREMO; 20PLQI T BG PLQI E ONY BERNTOI PTEBYT ENEMCRDE; R0 C DE PLQI ERNTOU CRDWOE TH2 Y BETEMCRDE; ) R1-( T TS PLQI C ND.E p ; C ND.E PLQI USATSTS ERADLOE THR EACL; NOLD$RT+TATS RBCL PLQI KSAS TAYRLVE OVEHAF ILYON; AYRLOV Z FN.I PLQI MECOO TREMO; 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; : 25o 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 TCH). THE * ; CALLING PROGRAM MAY ALSO TRANSMIT A ONE WORD ARGUMENT TO * ; THE QUEUED PROGRAM. * ; * ; PROGRAM USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE * ; QUEUE IS: * ; * ; MOV ITASK,-(SP) PUSH PLQI ; ) R1D(IF R CL PLQI ; ) R0E(IZBS RBCL PLQI . NGPILAEROV; PLQI F OERRD OOR FABQTE SE T.ANRTPOIM; PLQI ESOMEC BONTIZALITANI IOFR DEORE ERTH; PLQIE LUVAN MOOM-CON N ATOD ZELITANI IEREV; PLQI RE AFD I &E,IZBS, TYPR TT,TAlPLQI 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 C ND.E PLQI ; 25PLQI T BG PLQISKTAY LAEROVR FOS LEAB TERTH ODOT N'DO; SKTAMX,#R0 PBCM PLQI S SKTAY LAEROVE AV HIFk * ; 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: * ; * ; 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 * ; * ; THE FORTRAN EQUIVALENT CALL ISOS IIF; AYRLOV Z FN.I PLQI ; ) R0Y(RTTP RBCL PLQI ; 0)(RATSTIO RBCL PLQI T)ULFADE (EDBLSADIO TUSATSTT SE; 0)(RATST,T#6 VBMO PLQIAS TNO1 R=DEEA(HESBLTAK AS TZELIIAITIN; ) R1R(DEEA,H#1 V MO: 20PLQI PLQI ; 1 ,RAXSMTAX+MAAS#T V MO PLQI S LEAB TSKTAP UET STOY ADRET GE; R0X,MAAS#T V MO hY 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#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 g * ; 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 * ; : * ; * ; 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 ASSIGNED PRIORITY FROM THE * ; TASK TA; UPDATE 1 9 DEC 1971 OFF QTEST.001 .TITLE QTEST ; .GLOBL XIT. ; .GLOBL INR. ; .GLOBL RLS. ; .GLOBL OPN. ; .GLOBL GUT. ; ;*********************************************************************** ; * ; THIS ROUTINE WILL TEST THE CORE ONLY VERSION OF THE ROS QUEUING * ; ROUTINES UNDER DOS SUPPLQI 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 LTYRIIOPRF OERMBNUT GE; 0 ,RLSVELE V MO PLQI ; NASYSB R CL PLQI ; VETIAC R CL PLQI c * ; 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 ASSIBLE * ; > 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 BE TRANSMITTED TO THE QUEUED TASK * ; IERR IS AERVISION. IT PERMITS TTY CONTROL OF THE * ; DYNAMIC MANIPULATION OF 1 OR MORE TASKS. * ; * ;*********************************************************************** ; ; R0=%0 ; R1=%1 ; R2=%2 ; R3=%3 ; R4=%4 ; R5=%5 ; SP=%6 ; ORRI$P R CL PLQI S LEABRIVAR EACL; SKTA$C R CL PLQI T INPOY TREN; =. PLQI PLQI ; PLQI EF.D PLQI , NY AIFA RE ARECOC MINADYN IESGO; PLQI ONTIZALIIAITINE EUQUR FOT ECCSD MENA; UEUE.Q CTSE.C PLQI E AG.P PLQI**_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 N 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 * ; I/O IS STILL IN PROGRESS (TASK NOT QUEUED) * ; PC=%7 ; ; LF=012 ; VT=013 ; FF=014 ; CR=015 ; BFLNTH=74. ; LOW=. ; SSTACK=. ; ; ; GLOBALS FOR QUEUING ROUTINES ; COUNTR: .WORD 0 ; STACK: .WORD SYSSTK ; MFLAG: .WORD 0 ; .DEF COUNTR,STACK,MFLAG ********************************************************************;* PLQI * ; PLQI * : ERMBNUE GULOTACA ; PLQI * : ONSIVIRE ; PLQI * 1 97 1OV N10 : TEDA ; PLQI $ 53: ERMMRAOGPR ; PLQI * [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 * ; ; 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 ; * ; IF THE PRIORITY LEVEL SPECIFIED IS ILLEGAL, ; ; ; VARIABLES FOR QTEST FUNC: .WORD 0 ; TYPE OF TEST REQUESTED TASKNO: .WORD 0 ; TASK NUMBER REQUESTED .PAGE ; DOS I/O TABLES TILMES: .WORD 10. ; MAX .BYTE 0,0 ;MODE, STATUS .WORD 10. ; ACT .ASCII /QTEST 1A/ ; .BYTE CR,LF ; ; ACKMES: .WORD 3 ;MAX .BYTE 0,0 ;MODE, STATUS .WORD ; 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 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 ; 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 TO DPRTY AND * ; ARG EQUATE PARAMETERS BELO 3 ;ACT ACKBUF: .BYTE 040,052,VT ; .EVEN STMES: .WORD 8. ; .BYTE 0,0 ; .WORD 8. ; STABUF: .BYTE 40,40,40,40,40,40,CR,LF; STATUS: .WORD 0 ; .WORD 0 ;ERROR CRLKBK: .WORD 0 ;LINK .RAD50 /CMI/ ;NAME .BYTE 1,0 ;#WORDS,UNIT .RAD50 /KB/ ;DEVICE .WORD 0 ;ERROR (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 * ; 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. REFERW. * ; * ; * ; PROGRAMMER 55 * ; DATE 07.20.71 * ; REVISION * ; * ;*******************************COLKBK: .WORD 0 ;LINK .RAD50 /CMO/ ;NAME .BYTE 1,0 ;#WORDS,UNIT .RAD50 /KB/ ;DEVICE .WORD 0,4 ; CRFLBK: .WORD 0,0,0,0,0 ;FILE BLOCK .WORD 0,2 ; COFLBK: .WORD 0,0,0,0,0 ; KBMES: .WORD BFLNTH ;MAX .BYTE 020,0 ;MODE,STATUS .WORD BFLNTH ;ACT KBUF =. ;BUFF. ADD. .=.+BFLNTH-2 ; .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 TO DPRTY AND * ; ARG EQUATE PARAMETERS BELOW. * ; * ; * ; PROGRAMMER 55 * ; DATE 07.20.71 * ; REVISION * ; **************************************** ; .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 = 4+SAVE ; ARE USED AS OFFSETS IARG = ;RES .BYTE CR,LF ;TERMINATOR .PAGE START =. ; MOV #LOW,SP ;SET DOS SP MOV #CRLKBK,-(SP) ; INIT KB EMT 6 ; MOV #COLKBK,-(SP) ; EMT 6 ; MOV #COFLBK,-(SP) ; MOV #COLKBK,-(SP) ; EMT 16 ; MOV #CRFLBK,-(SP) ; MOV #CRLKBK,-(SP) ; EMT ; 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) ; * ;*********************************************************************** ; .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 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. ; NO. WORDS FOR STACK IN HEADER (BYTE) QUEU HPRIOR =916 ; MOV #TILMES,-(SP) ;PRINT CALL LINE MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; LOOP: MOV #ACKMES,-(SP) ;PRINT ACK. MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; CLR FUNC ; CLR TASKNO ; MOVB #040,ACKBUF ; 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= 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. . ; 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 STATUS REGISTER ADDRESS ; R0=%0 ;GENERAL MOV #-1,POINT ; RESET INPUT SCANNER MOV #KBMES,-(SP) ; GET A REQUEST MOV #CRLKBK,-(SP) ; EMT 4 ; MOV #CRLKBK,-(SP) ; EMT 1 ; MOVB KBUF,FUNC ; SUB #060,FUNC ; BLT QTE1 ;TEST FUNCTION? CMP #12.,FUNC ; BLT QTE1 ; MOVB KBUF+2,TASKNO ; SUB #060,TASKNO E .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 ; 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 STATUR1=%1 ; QUEU R2=%2 ; QUEU R3=%3 ; REGISTER R4=%4 ; QUEU R5=%5 ; QUEU SP=%6 ; EQUATES PC=%7 ; QUEU ; ; ; NOW, LET'S GET ON WITH T ;TEST TASK BGE QTA100 ; QTE1: MOVB #077,ACKBUF ; JMP LOOP ; QTA100 =. ; .PAGE MOV FUNC,R5 ;GO HANDLE REQUEST ASL R5 ; JMP @JTAB(R5) ; JTAB: .WORD QTQU ;QUEUE .WORD QTQS ;QSAVE .WORD QTQSI ;QSAVE1 .WORD QTSU ;SUSPND .WORD QTEX ;EXIT 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 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 ; HE 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 STACK (REG). QUEU .ENDC .WORD QTDQ ;DQUEUE .WORD QTAB ;ABORT .WORD QTDA ;DACT .WORD QTDS ;DSPTCH .WORD QTUN ;UNSPND .WORD DUMPAL ; DUMP PROGRAM (:) .WORD LTASK ; LOAD TASKS (;) .WORD -1 ; ; .REF QUEUE,QSAVE,QSAVEI,SUSPND,EXIT,FRETSK,ABORT .REF DSPTCH,UNSPND .REF FIRST,LAST,HEADER,TSTAT,IOSTAT,LEVELS,TASKS,TPRTY PRIORITY 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 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 QUEU .IFNZ OVRLAY ; QUEU JSR R5,PUSHR ; QUEU SAVE =12. ; SIZE OF SATCK QUEU .ENDC QUEU .ENDC MOVB @#PS,R3 ; SAVE PS FOR LATER QUEU CLR -(SP) ;/ = NO ERRORS; 3 = .PAGE ; QTQU =. ;QUEUE REQUEST MOV TASKNO,-(SP) ; .IFG DPRTY ; JSR PC,GETARG ; .ENDC ; .IFG ARG ; JSR PC,GETARG ; .ENDC ; JSR PC,GETARG ; JSR PC,QUEUE ; MOV (SP)+,STATUS ; BEQ QTQU10 ; JSR PC,PSTAT ; QTQU10: JM ; 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 ; 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 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#> LARGEST LEGAL TASK NUMBER QUEU BHI QUEE50 P LOOP ; .PAGE QTDQ =. ;DEQUEUE A REQUEST MOV TASKNO,-(SP) ; JSR PC,FRETSK ; MOV (SP)+,STATUS ; BEQ QTDQ10 ; JSR PC,PSTAT ; QTDQ10: JMP LOOP ; .PAGE QTAB =. ;ABORT REQUEST MOV TASKNO,-(SP) ; JSR PC,ABORT ; JMP LOOP ; .PAGE QTDA =. .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 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#> ; 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 IOSTAT(R4) ;WE'LL GIVE THE CALLER A REPRIEVE IF ;DEACT REQUEST MOV TASKNO,-(SP) ; JSR PC,FRETSK ; MOV (SP)+,STATUS ; BEQ QTDA10 ; JSR PC,PSTAT ; QTDA10: JMP LOOP ; .PAGE QTUN =. ;UNSPND REQUEST MOV TASKNO,-(SP) ; JSR PC,GETARG ; JSR PC,UNSPND ; MOV (SP)+,STATUS ; BEQ QTUN10 ; JSR ; 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 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 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 R2,#1 ; DOES TASK EXIST? PC,PSTAT ; QTUN10: JMP LOOP ; .PAGE QTDS =. ;DSPTCH REQUEST JMP DSPTCH ; .PAGE .=.+200 ;SYSTEM(ROS)STACK SYSSTK =.-2 ; QTQS =. ; QTQSI =. ; QTSU =. ; QTEX: MOV #-1,STATUS ; JSR PC,PSTAT ; JMP LOOP ; .PAGE NLTASK: .WOR 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 TIMESTAT(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 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 (ALWAYS POSITIVE)QUEU BGT QUEB10 ;USE TD 14. ; # OF TASKS *2 +2 LTASK =. ;SUB TO LOAD #TASKS(A-Z)SPEC IN NLTASK MOV #2,R0 ; SET COUNTER MOV NLTASK,R1 ;BET LIMIT LT10: MOV TTAB-2(R0),HEADER(R0) ; ASR R0 ; MAKE INTO A BYTE INDEX CLRB TSTAT(R0) ; CLRB IOSTAT(R0) ; MOVB #1,TPRTY(R0) ; ASL R0 ; MAKE INTO A WORD INDEX TST (R0)+ ; INCR .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 ; 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 (ALHE 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,#NPRIOR ; IS PRIORITY GT HIGEST LEGAL LEVEL QUEU EMENT BY 2 CMP R0,R1 ; BLT LT10 ; JMP LOOP ; ; TTAB: .WORD TASK1 ; .WORD TASK2 ; .WORD TASK3 ; .WORD TASK4 ; .WORD TASK5 ; .WORD TASK6 ; .WORD -1 ; .PAGE POINT: .WORD -1 ; TSTORE: .WORD 0 ; TEMP STORE FOR ARG. GETARG =. 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 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,# 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 HEADER ; ; ; THE TIME HAS COME TO PLACE THE TASK IN ;SUBROUTINE TO GET ARGUMENTS TST POINT ; BPL GET10 ; MOV #4,POINT ; GET10: MOV POINT,R0 ; CLR TSTORE ; MOVB KBUF(R0),TSTORE ; ADD #2,POINT ; SUB #060,TSTORE ; MOV (SP),-(SP) ; MOV TSTORE,2(SP) ; RTS PC ; .PAGE PSTAT: MOV STATUS,-(SP) ; MOV #STABUF,-( / ; .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 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 HEAD 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,LAST(R1) ; QUEC10 = . MOVB #2,TSTATSP) ; MOV #5,-(SP) ; EMT 42 ; MOV #STMES,-(SP) ; MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; RTS PC ; .PAGE ; HERE FOR AUTO DUMP DUMPAL =. ; MOV @#406,R0 ; GET BOTTOM ADDRESS OF PROGRAM MOV #71716,R1 ; SET TOP ADDRESS ; R0 HAS LOW V ; 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 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(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 CTIMER LATER. QUEU .IFNZ ARG ;DONALUE ; R1 HAS HIGH VALUE DUMP =. ; MOV #LPLKBK,-(SP) ; EMT 6 ; MOV #017,R3 ; BIC R3,R0 ; ADD R3,R1 ; BIC R3,R1 ; MOV #5,R5 ; LLOOP: MOV #8.,R3 ; MOV #LINE,R4 ; MOV R0,-(SP) ; MOV R4,-(SP) ; MOV R5,-(SP) ; EMT 42 .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 ; BUAST(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 CTI'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 HOME FROM ERROR CONDITION QUEU MOVB R3,@#PS ; ADD #10.,R4 ; NLOOP: MOV (R0)+,-(SP) ; MOV R4,-(SP) ; MOV R5,-(SP) ; EMT 42 ; DEC R3 ; BEQ NULINE ; ADD #7,R4 ; BR NLOOP ; NULINE: MOV #LINEBU,-(SP) ; MOV #LPLKBK,-(SP) ; EMT 2 ; MOV #LPLKBK,-(SP) ; EMT 1 FFER 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 MER 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 ; 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 (SP)+,R1 ; REGISTERS ; CMP R0,R1 ; BLT LLOOP ; MOV #LPLKBK,-(SP) ; EMT 7 ; JMP LOOP ; .WORD 0 ; LPLKBK: .WORD 0 ; .RAD50 /DUM/ ; .BYTE 1,0 ; .RAD50 /LP/ ; LINEBU: .WORD 70. ; MAX .BYTE 0,0 ; MODE - STATUS .WORD 70. ; ACT LINE =. (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 ; 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 QUEU .ENDC QUEU .IFNZ OVRLAY ; QUEU JSR R5,POPR ; RESTORE ALL 6 QUEU .ENDC QUEU .ENDC QUEU TST MFLAG ; IS MFLAG SET? IF SO MUST RETURN TO BNE QUEC20 ; TO THE ; .ASCII / / ; .ASCII / / ; .ASCII / / ; .ASCII / / ; .ASCII / / ; .ASCII / / ; .ASCII / / ; .BYTE CR,LF ; .PAGE RES =100 ; TASK1 =. ;TASK#1 .WORD 1 ;THREAD WORD .WORD EN1 ;ENTRY ADD .WORD .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 (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 SO 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 RTS P QUEU ADD #NARG-SAVE-4,SP ; MO0 ;INIT ADD .WORD 0 ;MAX TIME .BYTE RES ;STACK SIZE .BYTE 1 ;PRIORITY .WORD 0 ;TIMER .IFG ARG .WORD 0 ;ARGUMENT .ENDC .BYTE 0 ;STATUS .BYTE 1 ;TASK NO. .WORD 0 ;STACK POINTER .=.+RES+RES ; ; TASK2 =. ;TASK#2 .WORD 1,; 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 .IFN 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 RVE 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 ; USE 'QSAVEI' SO FIX STACK FOR QUEU MOV EN2,0,0 ; .BYTE RES,1 ; .WORD 0 ; .IFG ARG .WORD 0 ; .ENDC .BYTE 0,2 ; .WORD 0 ; .=.+RES+RES ; ; TASK3 =. ;TASK#3 .WORD 1,EN3,0,0 ; .BYTE RES,1 ; .WORD 0 ; .IFG ARG .WORD 0 ; .ENDC .BZ 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 ; TS 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  #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) QUEU ; PC (OF THISYTE 0,3 ; .WORD 0 ; .=.+RES+RES ; ; TASK4 =. ;TASK#4 .WORD 1,EN4,0,0 ; .BYTE RES,1 ; .WORD 0 ; .IFG ARG .WORD 0 ; .ENDC .BYTE 0,4 ; .WORD 0 ; .=.+RES+RES ; ; TASK5 =. ;TASK#5 .WORD 1,EN5,0,0 MOV #11.,-(SP) ; MOV #1,-(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN12A ; CN12: .WORD 0 ; .END ;  ; 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  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 LEVELQUEU QUEE50: INC (SP) ; ILLEGAL TASK NUM  ; .BYTE RES,1 ; .WORD 0 ; .IFG ARG .WORD 0 ; .ENDC .BYTE 0,5 ; .WORD 0 ; .=.+RES+RES ; ; TASK6 =. ;TASK#6 .WORD 1,EN6,0,0 ; .BYTE RES,1 ; .WORD 0 ; .IFG ARG .WORD 0 ; .ENDC .BYTE 0,6 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 LEVBERS 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); SET ERROR STATUS FOR RETURN QUEU BR  ; .WORD 0 ; .=.+RES+RES ; .PAGE EN1 =. ; CLR R1 ; ENA1: MOV #-1,R0 ; ENA2: DEC R0 ; BNE ENA2 ; CLR R1 ; INC R1 ; BR ENA1 ; .PAGE EN2 =. ; MOV #EN2MES,-(SP) ; MOV #COLKBK,-(SP) 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 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);  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 ; IARG (SYSGEN) QUEU; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; MOV #4,-(SP) ; DEACTIVATE TASK #4 WHICH IS SUSPENDED JSR PC,FRETSK ; MOV (SP)+,STATUS ; BEQ EN2AA ; JSR PC,PSTAT ; EN2AA: JSR PC,EXIT ; BR EN2 ; EN2MES: .WORD 18. ; .BYTE 0,0 ; .WORD 18. ; . 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; SET 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 ; IRTRN QUEU ; PC (FROM CALLER) QUEU ; R0 QUEU ; R1 QUEU ; R2 QUEU ; R3 QUEU ; R4  .ASCII /TASK #2 MESSAGE./ ; .BYTE CR,LF ; .PAGE EN3 =. ; MOV #EN3MES,-(SP) ; MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; JSR PC,EXIT ; HALT ; EN3MES: .WORD 18. ; .BYTE 0,0 ; .WORD 18. ; .ASCII /T 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 RG (SYSGEN) QUEU ; IRTRN QUEU ; PC (FROM CALLER) QUEU ; R0 QUEU ; R1 QUEU ; R2 QUEU ; R3  QUEU ; R5 QUEU ; TEMP ERROR STATUS CURRENT QUEU ; R3 (PS VALUE) ADDED FOR RPOM QUEU ; R4 (TASK #) QUEU ; R1 (PRIORITY-ALWAYS) QUEU ; ARG/0 (ALWAYS) QUEU ; ASK #3 MESSAGE./ ; .BYTE CR,LF ; .PAGE ; EN4 =. ; MOV #EN4MES,-(SP) ; MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; JSR PC,SUSPND ; .IFG ARG ; TST TASK4+14 ; TEST ARG. CONTROLS PATH BNE EN4 ; BRANCH IF NOT ZERO .E 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 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  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 -(SP) ; ARGUMENT) OR THE PASSED ARGUMENT NDC ; JMP LOOP ; EN4MES: .WORD 18. ; .BYTE 0,0 ; .WORD 18. ; .ASCII /TASK #4 MESSAGE./; .BYTE CR,LF ; .PAGE ; EN5 =. ; MOV #EN5MES,-(SP) ; MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; MOV #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"(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 #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 QUEU MOVB (SP)+,R3 ; RE$ #4,-(SP) ; UNSPND TASK#4 MOV #1,-(SP) ; GO TO DISPATCHER JSR PC,UNSPND ; MOV (SP)+,STATUS ; BEQ EN5 ; JSR PC,PSTAT ; BR EN5 ; EN5MES: .WORD 18. ; .BYTE 0,0 ; .WORD 18. ; .ASCII /TASK #5 MESSAGE./ .BYTE CR,LF ; .PAGE ; EN6 =. 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 & -(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 'SET 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 ;*************************************************************( ; MOV #EN6MES,-(SP) ; MOV #COLKBK,-(SP) ; EMT 2 ; MOV #COLKBK,-(SP) ; EMT 1 ; MOV #3,-(SP) ; QUEUE TASK # 3 .IFNZ DPRTY ; ONLY INCLUDE IF WANTED CLR -(SP) ; USE DEFAULT PRIORITY .ENDC .IFNZ ARG ; ONLY INCLUDE IF WANTED MOV #-1,-(SP) ; .ENDC MOV #1,-(SP) 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 * * 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 ;***+********** ; * ; 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 * ; AN INTERUPT ; DON'T COME BACK JSR PC,QUEUE ; MOV (SP)+,STATUS ; BEQ EN6 ; JSR PC,PSTAT ; BR EN6 ; EN6MES: .WORD 18. ; .BYTE 0,0 ; .WORD 18. ; .ASCII /TASK #6 MESSAGE./ ; .BYTE CR,LF ; TOP: .END START ; : 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 .******************************************************************** ; * ; 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/ * ; QSAVES - 'SAVE' ENTRY POINT-AVOIDS *QSVE ; ACTIVE CHECK AND CLEAR WHICH *QSVE ; IS DONE BY 'SAVE'. THIS *QSVE ; PERMITS CALLS AT LEVEL 7. *QSVE ; * ; * ; PURPOSE: THIS ROUTINE ; PLQI * L IP,QPC SR J E:AGUS ; PLQI * ; PLQI * . PL IBYD LEAL C. ESINOU RNGUIUE Q ; PLQI * HE TINS LEAB TND AESBLIAAR VLL AOFN IOATIZALTINI IE:OSRPPU ; PLQI * ; PLQIE*EUQUR FOE INUTRON IOATIZALTINI I -PLQI: ONTICAFITIENIDM RAOGPR ; PLQI * W ; 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******************************2 * ; 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 ; * ; 3IS 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 WILL BE CALLED TO CONTROL THE USE * ; OF TH ; PLQI * L P I Q ; PLQI * ; PLQI**********************************************************************;* 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****************************************;* 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 VB6 * ; 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 WIL7E 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 THE TASK STACK IS ASSUMMED TO LOOK AS * ; ; 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 VBMO 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 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:L 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 T; FOLLOWS: * ; * ; QSAVE QSAVEI * ; PC FROM TASK PS *QSVE ; PS FROM TASK PC *QSVE ; ARG ARGUMENT ARG * ; PC FROM JSR PC PC <== STACK POINTER* 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 INRTTAES 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 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 OGE>HE TASK STACK IS ASSUMMED TO LOOK AS * ; FOLLOWS: * ; * ; QSAVE QSAVEI * ; PC FROM TASK PS *QSVE ; PS FROM TASK PC *QSVE ; ARG ARGUMENT ARG * ; ? ; * ; AFTER THE CALL THE TASK STACK IS AS FOLLOWS: * ; * ; R0 * ; PC * ; R5 * ; R4 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 OGEEDW 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 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 B PC FROM JSR PC PC <== STACK POINTER* ; * ; AFTER THE CALL THE TASK STACK IS AS FOLLOWS: * ; * ; R0 * ; PC * ; R5 * ; C * ; R3 * ; R2 * ; R1 <=TOP OF STACK * ; * ; THE PROGRAM HEADER WILL MODIFIED AS SHOWN: * ; * ; WORD 7, BYTE 0 - TASK PS (FROM SD 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 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 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 PTDSF R4 * ; R3 * ; R2 * ; R1 <=TOP OF STACK * ; * ; THE PROGRAM HEADER WILL MODIFIED AS SHOWN: * ; *GTACK IF QSAVEI * ; OR ON ENTRY IF QSAVE)* ; WORD 5 - CURRENT TIMER * ; WORD 8 - TOP OF TASK STACK AFTER ALL * ; PUSHES TO SAVE * ; REGISTERS * ; * ; THE TASK TABLE WILL HAVE THE TA 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 PTDS 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 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; J ; 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 * ; KSK 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 & QSAVEI IS DETERMINED BY * ; THE VALUE OTRENT 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; 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 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 N * ; 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 &OF THE ARGUMENT ARG ON THE STACK. ITS VALUES* ; ARE: * ; * ; NEGATIVE - INVOLUNTARY SUSPENSION NO-REQUEUE* ; POSITIVE - INVOLUNTARY SUSPENSION RE-QUEUE * ; EQUAL ZERO - VOLUNTARY SUSPENSION * ; * ; NOTCL 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 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 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 LAR 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 * ; SE: 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 * ; CATA 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 LA 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; CHPT 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 DV * ; 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 WLOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF QSAVE,QSAVEI,QSAVES ; QSVE .REF STACK ; QSVE .IFNZ OVRLAY ; QSVE .REF QSOVLY ; DS 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 DGO 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 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 DEZ * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF QSAVE,QSAVEI,QSAVES ; QSVE .REF STACK ; QSVE .IFNZ OVRLAY ; [ QSVE .ENDC QSVE ; QSVE ; QSAVE ENTRY POINT QSVE ; QSVE QSAVE =. ; QSVE MOV 6.(SP),-(SP) ; REVERSE ORDER OF PC & PS ON STACK QSVE MOV 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 DEINL 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 ,RLSVELEINL 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 ^ QSVE .REF QSOVLY ; QSVE .ENDC QSVE ; QSVE ; QSAVE ENTRY POINT QSVE ; QSVE QSAVE =. ; QSVE MOV 6.(SP),-(SP) ; _ 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 ACTIVE ; IS A JOB ACTIVE? 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 . 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; . 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; PTDSbREVERSE 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 cQSVE 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 (FROM JSR PC) <=== TASK STACK POINTER QSVE 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; PTDS 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 IAG 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; f 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 (g; ; 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 MOV R1,-(SP) ; SAVE R1 ON TASK STACK FLE 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; 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 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 ENjFROM 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 k 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) ; SAVE R0 ON TASK STACK MOV SP,TSTACK(R2 PTDS ND AONS IITE ONO TALQU EIST IENWH; PTDS . FF OIST IROZEO TALQU EIST IENWH; PTDS . CHARSES R'HETCPAIS DHE TRTTAES RTO; PTDS ENWHE INRMTEDEO TRETOES/RVESAD AN; PTDSR HETCPAIS DHE TBYE USR FOG LA FNEFIDE; 0 D OR.W: NASYSB PTDS ; K ACST EF.R PTDS 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 **********************************************************************;* * n 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) o) ; 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 LATER QSVE QSVPS: .WORD 0 ; PS STORAGE ; NASYSB EF.D NTOI PRYNT ENEFIDE; CHPTDS EF.D E AG.P **********************************************************************;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S29 : TEDA ; * ; * : 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 Ir ; 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 s 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 CHANGED FROM QSVE BNE QSI030 ; DISP 53: ERMMRAOGPR ; * ; * . TSISEXN IOITNDCOR ROERN AH,TCSP D ; *O TRYNT EONO ERNZNOS IG'LAMF 'OR' VETIAC 'ERTHEIF I ; * ; * S.ROY BEDEVCIRES IPTRUERNT I ; * N AERFT AFTLEE BLYONL IL WCHHI WOPLOT AI W AERNT E ; L*IL WIT, EDEU ; * ; * 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 JMvLATER 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 CwATCHING? 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 THREAD WORD TO 1 (QUEUEABLE) QSVE TST R1QUY TLENRRCUE ARS SKTAO NATTHS NEMIERET D ; * CHPTDSF I. ERLLCAE THO TEDRNTURER VENES IOLTRON C ; * ; * H TCSP DP JM ; * ; * : ONTIUCTRNS I ; * G INOWLLFOE THY BCHPTDSO TEDSSPAS IOLTRON C E:AGUS ; * ; * ; * : 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 zHANGED 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 { ; 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. SET RPOM'S STATUS QSVE MOVB R3,@#P ; * . EDORSTRET ENOMIRNV EIRHE T ; *VEHAS SKTAD DEENSPSU S.SKTAD TECUXENE UND AEDNDPEUS S ; * THBOS LEAD HCHPTDS K.AS TEDEUQUY ITORRI PSTHEIG H ; *HE TTETA SVETIACE THN ICELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * K.AS TEDEUQUT ESGHHIE ATIVCT-ACHPTDS: ONTICAFITIENIDM RAOGPR ; 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 ~THREAD 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. SES ; 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 QSVE QSI050: RTS PC ; DONE WITH VOLUNTAR * ; * H C T P S D ; **********************************************************************;* E AG.P SPUN ; 00SDUN BR SPUN ERUSO TRNTUREE RCFO; ) SPN(TRUR R CL SPUN USATSTL GALEIL; P)(S C IN: 10SEUN SPUN ; 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 NDPEUST 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 Y 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 ; MAKE RO AND R4 INTO WORD INDEX QSVE ASL 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 NDPEUS 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; 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 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 ;  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 QSI175 =. ; =. 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 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 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 ; MAKE 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 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) ; QSVE MOV (SP)+,(SP) ; . 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 ; 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 | 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(TATS{ 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) ;  QSVE RTS PC ; RETURN QSVE .PAGE ;*********************************************************************** ; * ; S U S P N D * ; * ; PROGRAM IDENTIFICATION: SUSPND * ; 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(TATS 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 x 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 ,Rw QSVE MOV (SP)+,(SP) ; QSVE RTS PC ; RETURN QSVE .PAGE ;*********************************************************************** ; * ; S U S P N D * ; * ; PROGRAM ID * ; 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. * ; 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 ,R4)(RERADHE V MO SPUN X DEIND OR W ATOIN4 RKEMA; R4 L AS ; =. 00SCUN C ND.E SPUN . USATSTR ROER; 20SEUN BR SPUNUSATSTG INTTSEt4)(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 sENTIFICATION: 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. * ;  * ; USAGE: EMT SUSPND OR CALL SUSPND * ; * ; NOTE: THIS ROUTINE SWITCHES THE CURRENT STACK POINTER * ; FROM THE TASK STACK TO THE SYSTEM STACK. * ; * ; PROGRAMMER: 53 * ; DATE: 25 AUG 71 R 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 GE; 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 pGE; 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 o * ; USAGE: EMT SUSPND OR CALL SUSPND * ; * ; NOTE: THIS ROUTINE SWITCHES THE CURRENT STACK POINTER * ; FROM THE TASK STACK TO THE SYSTEM STACK. * ; * ; PROGRAMMER: 53 * * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF SUSPND .REF STACK ; SUSP ; SUSPND =. ; ENTRY POINT MOVB @#PS,-(SP)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 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 l 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; k ; DATE: 25 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF SUSPND .REF STACK ; SUSP ; SUSPND =.  ; 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 RETURN ADDRESS TO USE ; IF THE CALL IS FROM A SYST 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; 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 h 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 Eg ; 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 EM ROUTINE. ; JSR PC,QSAVE ; CALL ON QSAVE TO PRESERVE ENVIRONMENT JMP DSPTCH ; GO TO DISPATCHER TO GET NEXT TASK. .PAGE ;*********************************************************************** ; * ; E X I T * ; * ; PROGRAM IDENTIFICATION: EXIT 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 ETOX 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 dTOX 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 cRETURN 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 * ;  * ; * ; 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 REQUEUING. *EXIT ; SPUN C ND.E SPUN E IZ SCKTASA; 2.=1 E AVUS SPUN . EG RLL AVESA; HRUS,PR5 R JS SPUN 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 `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; _ * ; 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 * ; USAGE: EMT EXIT OR CALL EXIT * ; * ; NOTE: THIS ROUTINE SWITHES TO THE SYSTEM STACK AND * ; PASSES CONTROL TO THE DISPATCHER. * ; * ; PROGRAMMER: 53 * ; DATE 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; =. NDSPUN ; R TEINPOK ACST= <= PC ; N TRUR ; K ASUT ; ; S:OWLLFOS AKSOO LCKTA SRYNT EON; ; SPUN C ND.E SP\ =. 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 **************************************************************[QUEUING. *EXIT ; * ; USAGE: EMT EXIT OR CALL EXIT * ; * ; NOTE: THIS ROUTINE SWITHES TO THE SYSTEM STACK AND * ; PASSES CONTROL TO THE DISPATCHER. * ; * ; PROGRAMMER: 53 : 30 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF EXIT .REF COUNTR,MFLAG ; EXIT .IFNZ OVRLAY ; UN ; R OP,PHRUS,PVYSOUN EF.R SPUN ; AYRLOV Z FN.I NDSPUN EF.D E AG.P **********************************************************************;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * X********;* * ; * : ERMBNUE GULOTACA ; * 0 : ONSIVIRE ; * 1 -7EP-S27 : TEDA ; * 53: ERMMRAOGPR ; * ; *. ROZEN-NOS IVESARGR TEMERAPAN GEYS SHE TIFD RETOESW * ; DATE: 30 AUG 71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF EXIT .REF COUNTR,MFLAG ;  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 CLR R1 ; CLEAR R1 FOR BYTE LOAD 1 -7EP-S27 : TEDA ; * 53: ERMMRAOGPR ; * ; *. ROZEN-NOS IVESARGR TEMERAPAN GEYS SHE TIFD RETOES 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 ; * T 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 ASS 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 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. .IFZ OVRLAY ; TSTACK MUST BE CLEARED FOR COR ; SPUN * ERMBNUK AS TALEGLL I=3 ; SPUN *Y)LAEROVG(ON LTOD DEENSPSUD-LEELNCCAK AS T=2 ; SPUN * ) =4OT(NUSATSTK AS TALEGLL I=1 ; * EDORON HSTUEEQ R=0 ; * : USATSTD NEURET RHE TIS RRUE ; * K.AS T P 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 TO 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. E TASKS EXIT CLR TSTACK(R0) ; CLEAR STACK POINTER FOR DISPATCHER EXIT .ENDC ; EXIT MOV STACK,SP ; RETURN TO SYSTEM STACK EXIT .IFNZ OVRLAY ; EXIT CMPB R1,#OVTMIN ; IS THIS AN OVERLAY TASK? EXIT BHIS EXIT05 ; YES - GO DO IT. EXIT CLR TSTACK(R0) ; 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 THE TOF# K AS THE TISK ASUT ; * REHE W ; * ; * ) ANTROR(F R)ER,URNRT,USKTA(UNDSPUN LLCA. 2) LHE 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 ; * K 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 ; NO - CLEAR STACK POINTER FOR DSPTCH EXIT BR EXIT00 ; EXIT EXIT05 = . ; EXIT BNE EXIT10 ; YES. CAN'T EXIT 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 ; * ; * RRUE+,P)(S V MO ; * NDSPUN T EM ; * ) SP-(N,TRUR V MO ; * ) LYMBSEAS ( ) SP-(K,ASUT V MO. 1) ; * ; * S: INETIOU RISTHO TGEKAINH ) 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 ; SPGIT 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  JSR PC,QOVNXT ; CALL ON RPOM FOR OVERLAY ASSIGN. .ENDC EXIT EXIT00 =. ; EXIT JMP DSPTCH ; CALL ON THE DISPATCHER TO SCHEDULE ; NEXT TASK EXIT10 =. ; THE NEXT TASK. EXIT DECB TSTAT(R1) ; SET STATUS FOR EXIT REQUESTED-OVERLAY EXIT BR 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 ; SPUN *EDNDPEUS SLYRITAUNOL V ACELA PTOD SE UISE INUTROS HI TE:OSRPPU ; * ; * UEUE QTYRIIOPRE ARTWOF S ; * AINK AS TEDNDPEUS S ACELADUN *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 ; ****************************************************************C; 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 TEXIT00 ; GO FINISH UP. EXIT .PAGE EXIT ;*********************************************************************** ; A B O R T * ; * ; PROGRAM IDENTIFICATION: ABORT * ; * P -NDSPUN: ONTICAFITIENIDM RAOGPR ; * ; * D N P S N U ; **********************************************************************;* 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 @******;* 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 ? * ; * ; PROGRAM IDENTIFICATION: ABORT * ; * ; PURPOSE: TERMINATE THE EXECUTION OF A TASK, PRINT AN ERROR * ; MESSAGE, AND PLACE THE TASK STATUS IN THE ABORT * ; CONDITION. * ; ; PURPOSE: TERMINATE THE EXECUTION OF A TASK, PRINT AN ERROR * ; MESSAGE, AND PLACE THE TASK STATUS IN THE ABORT * ; CONDITION. * ; * ; USAGE: THE USAGE OF THIS ROUTINE IS EITHER: * ; * ; 1). MOV ATASK,-(SP) (ASSEMBLY) 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 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 < 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; ; * ; USAGE: THE USAGE OF THIS ROUTINE IS EITHER: * ; * ; 1). MOV ATASK,-(SP) (ASSEMBLY) * ; EMT ABORT * ; * ; * ; 2).  * ; EMT ABORT * ; * ; * ; 2). CALL ABORT(ATASK) (FORTRAN) * ; * ; WHERE * ; ATASK IS THE NUMBER OF THE TASK TO BE ; SKFT S ONTIDION CORRR EOR FREHE; SKFT ; SKFT RNTURE; PC 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 8PC 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.ENSCIEQU7CALL 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 * ; ABORTED. * ; * ; SYSGEN: THE SYSGEN PARAMETER '$ABMES' IS USED BY ABORT TO * ; DETERMINE HOW MANY ABORT MESSAGES CAN BE PENDING AT * ; 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. * ; 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.ENSCIEQUO TUSATSTS SKTAT SE; ) R0T(TATS RBCL SKFT P. USHNIFIO TREHE; =. 00KDFT SKFT C ND.E SKFT S PTRUERNT IUT OCKLO4O 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 3 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* ;  * ; * ; * ; REGISTERS: ABORT USES REGISTERS R0 AND R1. THE WILL BE SAVED IF* ; THE SYSGEN PARAMETER 'RGSAVE' IS NON-ZERO. * ; * ; PROGRAMMER: 53 * ; DATE: 20-SEP-71 ; 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 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 0R 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 / THE SYSGEN PARAMETER 'RGSAVE' IS NON-ZERO. * ; * ; PROGRAMMER: 53 * ; DATE: 20-SEP-71 * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; *  * ; REVISION: 0 * ; CATALOGUE NUMBER: * ; * ;*********************************************************************** .PAGE .DEF ABORT .REF MFLAG ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MES . 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 ; 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; , ; 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+;*********************************************************************** .PAGE .DEF ABORT .REF MFLAG ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT .REF LERTYP ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT SAGES ABRT .REF LERTYP ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT .REF DQOVLY,PUSHR,POPR ; ABRT .ENDC ABRT ; ; ON ENTRY THE STACK LOOKS THIS WAY: ; ; TASK NUMBER ; PC <= 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 CEDNEY 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 (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' .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 == STACK POINTER ; ABORT =. ; ENTRY POINT ASAVE =0 ; DEFAULT NUMBER OF REGISTERS SAVED .IFNZ RGSAVE ; .IFZ OVRLAY ; ONLY IF NOT OVERLAY VERSION ABRT 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 A . 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 CKETAO 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; $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 #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 ABN ADDITIONAL REG ABRT MOV R2,-(SP) ; SAVE R2 (ONLY FOR ABORT MESSAGES) ABRT .ENDC ABRT .ENDC ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION ABRT JSR R5,PUSHR ; SAVE ALL 6 ABRT ASAVE =12. ; SIZE OF SATCK. ABRT .ENDC 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 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 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 TRT .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 ;  ABRT .ENDC ATASK =ASAVE+2 ; STACK INDEX TO GET TASK NUMBER CLR R0 ; CLEAR R0 FOR BYTE LOAD ABRT BISB ATASK(SP),R0 ; 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 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 TIS; 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; 10KAFTIS; 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 SKFTGET 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 VIA,-(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 VIA 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 ; 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 SKFT ? 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 DE ? 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;  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  ABRT .WORD ABRFIN ; STATUS -3 RETURN - NO ACTION. ABRT .WORD ABRFIN ; -2 RETURN - NO ACTION. ABRT .WORD ABRFIN ; -1 RETURN - NO ACTION. ABRT .ENDC ABRT ABTAB: .WORD ABRFIN ; 0. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 1. RETURN - NO ACTION. ABRT IND 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; ) R0T(TATS.,#8 VBMO SKFT . SKTAA E EUQUDEO TREHE; =. 00KAFT SKFT L GALEILE ARS UEAL VUSATSTR HEOTL AL; 20KEFT BR SKFT C ND) 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 ACTION. 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 ABRD .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 ABRD10 ; 5. SET STATUS=7. ABRT .WORD ABRFIN ; 6. RETURN - NO ACTION. ABRT .WORD ABRFIN ; 7. RETURN - NO ACTION. ABRT .IFNZ OVRLAY ; .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 VEHAF I 5OR FCKHE CLYON; R2 C DE SKFT ; AYRLOV Z FN.I SKFT S YE; 00KBFT Q BE SKFT ? 4)(=D DEEN 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; 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  ABRT .WORD ABRFIN ; 8. RETURN - NO ACTION. ABRT .WORD ABRD10 ; 9. TELL RPOM AND SET STATUS=7. ABRT .ENDC ABRT ; ABRT ABRA10 =. ; DEQUEUE MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; PUT TASPSUK 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; 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 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  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 SK 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 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 SKFT R0T SERE; R0 R AS SKFT SSREDD AERADHET GE; 1 ,R0)(RERADHE V MO SKFT EXND IRDWOO NT IKEMA; R0 L AS SKFT 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 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 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 ABRT BR ABRD30 ; GO FINISH UP ABRT ; ; ABRC10 =. ; HERE ONLY IF ABORTING THE ACTIVE TASK ABRT MOV R0,R2 ; PUT 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 ACTI 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; 20KZFT L BP SKFT ; AYRLOV Z FN.I SKFT . ALEGLL I. =0R BEUM NSKTA; 10KEFT Q BE SKFT C ND.E FT 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 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 VE? ABRT BNE ABRFIN ; NO - THEN STOP ABORTING IT. ABRT ; TASK TABLES SCREWED UP. ABRT CLR ACTIVE ; GET RID OF THE ACTIVE TASK ABRT 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 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 OR(CR BEUM NSKTAT GE; R0),SPK(ASFT SBBI SKFT ADLOE YT BOR FR0R EACL; R0 R CL SKFT ; AYRLOV FZ.I SKFT ERSTGIRER ROERR EACLOR(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  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. 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. ABRT .IFNZ RGSAVE ; ABRT MOV -(R1),-(SP) ; THEN R0 & R1, IF SAVED. ABRT MOV -(R1),-(SP) ; ABRT .I; R5 R CL SKFT K ACSTF OOP TONS PVESA; P)(S,-PS@# VBMO SKFT ; SKFT S TUTA SORRR ETOX DEINK ACST; 4 + VESA=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 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 T 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 FG $ABMES ; ABRT MOV -(R1),-(SP) ; NEXT R2 IF USING ABORT MESSAGES. ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT MOV -(R1),-(SP) ; NOW R3 - R5 IF OVERLAY VERSION ABRT MOV -(R1),-(SP) ; ABRT MOV -(R1),-(SP) ; S AYLW AEG RLL AVESA; HRUS,PR5 R JS SKFT ; VESARG Z FN.I SKFT C ND.E: 10KZFT SKFTNTOI PRYNT ETECADIINO TIT BGNSIR EACL; P)(S+3 RBCL SKFT ; AYRLOV Z FN.I SKFT D VESAS ERSTGIREF OERMBNUT ULFADE; =0 E AVFS SKFT T INPOY TREN; 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  ; 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, ABRT .ENDC ABRT .ENDC ABRT MOV -(R1),-(SP) ; FINNALLY THE PS. THIS INLINE CODE IS,ABRT ; AT MOST, ONLY 4 WORDS LONGER THAN A ABRT ; LOOP. AT BEST IT IS 2 WORDS LESS. ABRT ; ABRD10 =. ; .IFNZ OVRLAY ; CMPB R0 =. SKETFR SKFT ; SKFT C ND.E SKFT NTOI PRYNT ESKETFRR VE OMPJU; 10KZFT BR SKFT. NTOI PRYNT ETECADIINO TIT BGNSIT SE; ) SP3(,+00#2 SBBI SKFT SKETFRO NT INTOI PRYNT E'SOMRP; =. OMRPDQ SKFT ; SKFT S. 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 ABRT ; 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. ,#OVTMIN ; IS THIS AN OVERLAY TASK? ABRT BLO ABRD30 ; NO. ABRT TSTB IOSTAT(R0) ; ANY I/O IN PROGRESS? ABRT BEQ ABRD15 ; NO. 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. 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 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 ARS 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;  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  ABRT MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; SAVE TASK NUMBER ABRT MOV R0,-(SP) ; PUSH TASK NUMBER FOR RPOM ABRT JSR PC,DQOVLY ; CALL ON RPOM. ABRT MOV (SP)+,R0 ; RESTORE R0 (TASK NUMBER) ABRT MOVB #340,@#PS ; LOCK OUT INTERRUPTS ABRT .ENDC TEISEG 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; SKFT ; SKFT ; AYRLOV Z FN.I SKFT ; SKFT SKFT ; SKFT ; AYRLOV Z FN.I SKFT ; SKFT R TEINPOK ACST= <= PC ; SKFT R BEUM NSKTA ; SKFT ; 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 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. 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 CM R TEINPOK ACST= <= PC ; SKFT R BEUM NSKTA ; SKFT ; SKFT AY WISTHK OO LCKTA SHE TRYNT EON; SKFT ; SKFT C ND.E SKFT ; OMRPDQ 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 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 #P (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 ; 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 BUF EF.D SKFT ; LYOVDQ EF.R SKFT ; AYRLOV Z FN.I SKFT ; PRPOR,SHPU EF.R SKFT ; SKETFR EF.D SKFT E AG.P SKFT**********************************************************************;* SKFT * ; SKETFR EF.D SKFT E AG.P SKFT**********************************************************************;* SKFT * ; SKFT * : ERMBNUE GULOTACA ; SKFT * 0 : ONSIVIRE ; 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 'FER 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 ABRT MOVB (SP)+,@#PS ; ALLOW INTERRUPTS ABRT ABRE10: .IFNZ RGSAVE ; ERROR RETURN .IFZ OVRLAY ; ABRT .IFG $ABMES ; SKFT * : ERMBNUE GULOTACA ; SKFT * 0 : ONSIVIRE ; SKFT * 1 -7OV-N18 : TEDA ; SKFT * 53: ERMMRAOGPR ; SKFT * ; SKFT * . UEAL VROZEN-NOA O T 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 * * 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+ ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT MOV (SP)+,R2 ; RESTORE R2 (ONLY WITH ABORT MESSAGES) ABRT .ENDC ABRT MOV (SP)+,R1 ; RESTORE REGISTERS IF NEEDED. MOV (SP)+,R0 ; ABRT .ENDC ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION. ABRT ; 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 * E.IVCT ASKTA= 3 ; SKFT * S TUTA SSKTAL GALEIL= 2 ; SKFT * R.BEUM NSKTAL GALEIL= 1 ; SKFT * . NT 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 .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) / JSR R5,POPR ; ABRT .ENDC ABRT .ENDC ; FIX UP STACK SO THAT TASK NO. IS GONE MOV (SP)+,(SP) ; THEN WERE READY FOR RTS PC. ABRT RTS PC ; .PAGE ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ; THERE ISCEESUI QET SSKTA= 0 ; SKFT * SSREOGPRN I/O IUT BEDEUQUDE= 1 - ; SKFT * E:AR ; SKFT *ESLUVAE TH K.TSRE FBYT SEE LUVAS TUTA S AIS RRFE ; SKFT * D.EEFRE BTOK AS THE TOFR BEUM NHE TISK ASFT ; SKFT * REHE W ; SKFT * RRFE ; 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 * 2 ; 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. AD3 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. ADDIONAL BUFFERS REQUIRE THE BUFFER ABRT ; AND AN ENTRY IN THE WORD TABLE ABMTAB. ABRT ; ABRT .IFG $ABMES-5 ; THE CURRENT MAXIMUM NUMB ; SKFT * ) ANTROR(F) RRFEK,ASFTK(TSRE FLLCA. 2) ; SKFT * ; SKFT * R ER,F)+SP (V MO ; SKFT * K TSRE FT EM ; SKFT * Y)BLEMSS(A P)(S,-SKTA FV MO. 1) ; SKFT * ; SKFT * : ISE INUT 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 FHE6DIONAL 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 7ER OF ABORT ABRT XXXXXX ; MESSAGES BUFFERS IS 5. ABRT .ENDC ABRT ; ABRT .IFGE $ABMES-1 ; ABRT ABMES1: .WORD 1 ; MESSAGE BUFFER 1. THREAD WORD. ABRT .WORD 99. ; ERROR CODE ABRT .WORD 0,0,0,ROS 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 FHE TE:OSRPPU ; SKFT * ; SKFT * SKETFR: ONTICAFITIENIDM RAOGPR ; SKFT * ; TE:OSRPPU ; SKFT * ; SKFT * SKETFR: ONTICAFITIENIDM RAOGPR ; SKFT * ; SKFT * K S T E R F ; SKFT**********************************************************************;* SKFT E AG.P RTAB : .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 ; ;0 ; ARGUMENTS FOR ERRTYPE. ABRT .IFGE $ABMES-2 ; ABRT ABMES2: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 2. ABRT .IFGE $ABMES-3 ; 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. SKFT * K S T E R F ; SKFT**********************************************************************;* SKFT E AG.P RTAB C ND.E RTAB C ND.E RTAB C ND.E RTAB 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 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 ? ABRT .IFGE $ABMES-5 ; ABRT ABMES5: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 5. ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC C ND.E RTAB C ND.E RTAB C ND.E RTAB ; S5MEAB D OR.W RTAB ; -5ESBM$A E FG.I RTAB ; S4MEAB D OR.W RTAB ; -4ESBM$A E FG.I RTAB OR.W RTAB ; -5ESBM$A E FG.I RTAB ; S4MEAB D OR.W RTAB ; -4ESBM$A E FG.I RTAB ; S3MEAB D OR.W RTAB ; -3ESBM$A E FG.I RTAB ; S2MEAB D OR.W 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 ; ABRT .IFGE $ABMES-1 ; ABRT ABMTAB: .WORD ABMES1 ; TABLE OF ADDRESS OF ABORT MESS. BUFFERABRT .IFGE $ABMES-2 ; ABRT .WORD ABMES2 ; ABRT .IFGE $ABMES-3 ; ABRT .WORD ABMES3 ;