.TITLE UTL .SBTTL INTRO PAGE ; ; UTL IS A TASK TO DISPLAY THE STRUCTURE OF THE USER TASK LIST ; ; UTL WILL DISPLAY THE RELATIVE RANKING OF TASKS ON EACH OF THE ; N LEVELS AND WILL DISPLAY FLAGS FOR: ; NEXT TASK TO SWAP ; NEXT TASK TO LOAD ; ROBIN POINTER ; FOR EACH LEVEL ; ; AFTER RUNNING VIA A: ; ; MCR>UTL ; ; UTL WILL DISPLAY THE UTL AND UPDATE ITSELF EVERY 60 TICKS (1 SECOND) ; ; A CONTROL C WHILE THE TASK IS RUNNING WILL CAUSE IT TO EXIT AFTER THE ; END OF THE NEXT DISPLAY ; ; A NUMBER TYPED IN WILL CAUSE UTL TO RESET HIS MARK TIME COUNT TO THAT ; NUMBER OF TICKS TO PERMIT CHANGING THE DISPLAY RATE ; .MCALL DIR$,QIOW$,QIO$,MRKT$,EXIT$S,GMCR$,WTSE$ .PAGE .SBTTL DIRECTIVE PARAMTER BLOCKS ; ;GET MCR ; GMCR: GMCR$ ; ;QIO TO WRITE LINE ; QIO: QIOW$ IO.WVB,5,1,,IOST,, ; ;ATTACH WITH AST'S QIO ; ATT: QIOW$ IO.ATA,5,1,,IOST,, ; ;60 TICK MARK TIME (CAN BE CHANGED) ; MARKTM: MRKT$ 2,60.,1 ; ;WAIT FOR MARK TIME ; WAIT: WTSE$ 2 ; .PAGE .SBTTL STORAGE AREA EXITFL: .WORD 0 ;FLAG FOR EXIT PENDING ; ;ROOM FOR 6 LEVELS OF UTL DATA ; ;FOR EACH LEVEL WILL STORE ; ;NUMBER OF TASKS AT THIS LEVEL ;ROBIN POINTER ;NEXT JOB TO LOAD POINTER ;NEXT JOB TO SWAP POINTER ; BUFF: .BLKW 30. ; ; ;THE TASK WILL PUSH ON HIS STACK THE TASK NAMES OF THE VARIOUS TASKS ;IN EACH UTL LEVEL AND THE RECOVER THEM ; .PAGE .SBTTL CODE START: DIR$ #GMCR ;GET MCR TO SET RECALL TST EXITFL ;EXIT PENDING BEQ 1$ ;NO EXIT$S ;YES 1$: MOV SP,SPSAVE ;SAVE STACK POINTER MOV #BUFF,R5 ;POINT TO UTL DATA STORAGE AREA MOV #.UTLLH,R0 ;GET USER TASK LISTHEAD STORE: MOV (R0),R0 ;GET FIRST/NEXT LEVEL TO STORE CMP R0,#.UTLLH ;BACK AT START ? BEQ SHOW ;IF YES SHOW THEM MOV Z.NE(R0),(R5)+ ;SAVE # OF TASKS MOV Z.NT(R0),(R5)+ ;SAVE NEXT TASK TO RUN MOV Z.LD(R0),(R5)+ ;SAVE NEXT TASK TO LOAD MOV Z.NS(R0),(R5)+ ;SAVE NEXT TASK TO SWAP MOV Z.NE(R0),R4 ;GET LOOP COUNTER