.TITLE SYSCAN ; ; ROUTINE TO READ SYSTEM TABLES - CALLING TASK MUST BE PRIVLEDGED. ; ; WRITTEN APRIL 1975 R B FRENCH THE BOEING COMPANY ; MODIFIED SEPTEMBER 1975 R B FRENCH CONVERTED TO VERSION 6 ; MODIFIED MARCH 1977 R B FRENCH CONVERTED TO VERSION 6.2 ; MODIFIED JUNE 1978 R B FRENCH CONVERTED TO IAS 3.0 ; ; CALLING SEQUENCE ; ; CALL SYSCAN(IACT,NACT,IMRL,NMRL,IPART,NPART) ; ; IACT = ARRAY OF ACTIVE TASKS, FIXED TASKS AND SHARED GLOBAL ; AREAS, DIMENSIONED (10,N), WHERE N IS THE MAXIMUM ; NUMBER OF TASKS OR GLOBAL AREAS. ; THE TEN VALUES PER ENTRY ARE: ; 1 1ST WORD OF TASK (OR GLOBAL AREA) NAME IN RAD50 ; 2 2ND WORD OF TASK (OR GLOBAL AREA) NAME IN RAD50 ; 3 TI UNIT NUMBER OF TASK OR TYPE INDICATOR FOR ; GLOBAL AREA AS FOLLOWS: ; 1 - COMMON ; 2 - LIBRARY ; 3 - PURE AREA ; 4 - MEMORY-RESIDENT OVERLAY ; 5 - PLAS REGION ; 4 STATUS WORD FOR TASK OR NUMBER OF TASKS ; ACCESSING GLOBAL AREA. ; 5 1/64TH OF THE LOAD ADDRESS ; 6 1/64TH OF THE MAXIMUM TASK (GLOBAL AREA) SIZE ; 7 1ST WORD OF PARTITION NAME IN RAD50 ; 8 2ND WORD OF PARTITION NAME IN RAD50 ; 9 PRIORITY (CLEARED FOR GLOBAL AREA) ; 10 ATL FLAGS WORD (CLEARED FOR GLOBAL AREA) ; ; NACT = NUMBER OF ACTIVE/FIXED TASKS ; IMRL = ARRAY OF TASKS WAITING FOR MEMORY, DIMENSIONED (8,N), ; WHERE N IS MAXIMUM NUMBER OF TASKS. ; EIGHT VALUES PER ENTRY ARE: ; 1 1ST WORD OF TASKNAME IN RAD50 ; 2 2ND WORD OF TASKNAME IN RAD50 ; 3 TI UNIT NUMBER ; 4 1/64TH OF MAXIMUM TASK SIZE ; 5 TASK STATUS ; 6 1ST WORD OF PARTITION NAME IN RAD50 ; 7 2ND WORD OF PARTITION NAME IN RAD50 ; 8 PRIORITY ; ; NMRL = NUMBER OF TASKS WAITING FOR MEMORY ; ; IPART = ARRAY OF PARTITIONS, DIMENSIONED (4,N), WHERE N ; IS THE MAXIMUM NUMBER OF PARTITIONS. ; FOUR VALUES PER ENTRY ARE: ; 1 1ST WORD OF PARTITION NAME IN RAD50 ; 2 2ND WORD OF PARTITION NAME IN RAD50 ; 3 1/64TH OF STARTING ADDRESS OF PARTITION ; 4 1/64TH OF ENDING ADDRESS OF PARTITION ; ; NPART = NUMBER OF PARTITIONS ; PSW=177776 SYSCAN::MOV 2(R5),R0 ;ATL ARRAY ADDRESS IN R0 MOV 6(R5),R4 ;MRL ARRAY ADDRESS IN R4 CLR @4(R5) ;CLEAR ATL/FTL COUNTER CLR @10(R5) ;CLEAR MRL COUNTER MOV PSW,-(SP) ;PSW TO STACK BIS #140,PSW ;;INHIBIT TASK SWITCHING ; ATL/FTL/MRL MOV #.ATLLH,R1 ;;ATL LISTHEAD IN R1 MOV .ATLLH+2,-(SP) ;;END OF ATL ON STACK ATL: CMP (R1),(SP) ;;END OF LIST? BEQ FTL ;;BR IF SO MOV (R1),R1 ;;GET A NODE MOV A.TD(R1),R2 ;;STD ADR OF TASK IN R2 BEQ ATL ;;IGNORE IF ZERO (EXEC'S TIMESHARE NODES) TST A.HA(R1) ;;HAS TASK BEEN LOADED? BEQ 10$ ;;IF NOT, PUT IN MRL ARRAY BIT #AF.CP,A.TF(R1) ;;IS TASK CHECKPOINTED? BEQ 20$ ;;BR IN NOT ;MRL 10$: MOV (R2),(R4)+ ;;1ST TNAME WORD MOV 2(R2),(R4)+ ;;2ND TNAME WORD MOV A.TI(R1),R3 ;;TI POINTER TO PUD MOVB U.UN(R3),(R4)+ ;;TI UNIT NUMBER CLRB (R4)+ ;;CLEAR HIGH BYTE CMP U.DN(R3),#"BA ;;IS IT BATCH? BNE 15$ ;;BRANCH IF NOT ADD #70,-2(R4) ;;ADD 70 FOR BATCH 15$: MOV S.TZ(R2),(R4)+ ;;TASK SIZE MOVB A.TS(R1),(R4)+ ;;STATUS CLRB (R4)+ ;;CLEAR HIGH BYTE MOV S.TD(R2),R3 ;;GET TPD ADDRESS MOV T.PN(R3),(R4)+ ;;1ST PARTITION WORD MOV T.PN+2(R3),(R4)+ ;;2ND PARTITION WORD MOVB A.RP(R1),(R4)+ ;;PRIORITY CLRB (R4)+ ;;CLEAR HIGH BYTE INC @10(R5) ;;INCREMENT COUNTER BR ATL ; 20$: MOV (R2),(R0)+ ;;1ST TNAME WORD MOV 2(R2),(R0)+ ;;2ND TNAME WORD MOV A.TI(R1),R3 ;;TI POINTER TO PUD MOVB U.UN(R3),(R0)+ ;;TI UNIT NUMBER CLRB (R0)+ ;;CLEAR HIGH BYTE CMP U.DN(R3),#"BA ;;IS IT BATCH? BNE 25$ ;;BRANCH IF NOT ADD #70,-2(R0) ;;ADD 70 FOR BATCH 25$: MOVB A.TS(R1),(R0)+ ;;STATUS CLRB (R0)+ MOV A.HA(R1),(R0)+ ;;BASE ADDRESS MOV S.TZ(R2),(R0)+ ;;MAX SIZE MOV A.PD(R1),R3 ;;ADDRESS OF PARTITION NAME MOV (R3)+,(R0)+ ;;1ST PART WORD MOV (R3),(R0)+ ;;2ND PART WORD MOVB A.RP(R1),(R0)+ ;;PRIORITY CLRB (R0)+ MOV A.TF(R1),(R0)+ ;;FLAGS WORD INC @4(R5) ;;INCREMENT COUNTER MOV S.PA(R2),R3 ;;GOT A PURE AREA? BEQ ATL ;;BRANCH IF NOT MOV (R2),(R0)+ ;;GIVE IT THE TASK'S NAME MOV 2(R2),(R0)+ ;; MOV #3,(R0)+ ;;3 INDCATES PURE AREA MOVB G.AC(R3),(R0)+ ;;NUMBER OF TASKS ACCESSING CLRB (R0)+ ;; MOV G.BA(R3),(R0)+ ;;BASE ADDRESS OF AREA MOV G.CZ(R3),(R0)+ ;;SIZE OF AREA MOV R4,-(SP) ;;SAVE R4 MOV G.PD(R3),R4 ;;GET PARTITION POINTER MOV (R4),(R0)+ ;;RETURN THE PARTITION NAME MOV 2(R4),(R0)+ ;; MOV (SP)+,R4 ;;RESTORE R4 CLR (R0)+ ;;CLEAR 2 WORDS CLR (R0)+ ;; INC @4(R5) ;;INCREMENT THE COUNTER BR ATL FTL: CMP #.FTLLH,(SP) ;;HAVE WE DONE FTL? BEQ GCD ;;IF YES, GO CHECK GCD MOV .FTLLH,R1 ;;FTL LISTHEAD IN R1 CMP R1,#.FTLLH ;;IS IT EMPTY? BEQ GCD ;;IF YES, GO CHECK GCD MOV #.FTLLH,(SP) ;;END OF FTL POINTER IN R4 BR ATL ; GCD GCD: TST (SP)+ ;;CLEAN UP STACK MOV #.GCDLH,R1 ;;GCD LISTHEAD IN R1 10$: MOV (R1),R1 ;;GET A NODE CMP R1,#.GCDLH ;;END OF GCD? BEQ 25$ ;;IF YES, GO CHECK TPD BIT #GF.PA,G.FW(R1) ;;PURE AREA? BNE 10$ ;;IF LOADED, ATL SEARCH GOT IT TSTB G.AC(R1) ;;IS COMMON BEING USED? BEQ 10$ ;;IF NOT, GO GET NEXT NODE TST G.PD(R1) ;;DUMMY GCD FOR EXTERNAL PAGE? BEQ 10$ ;;IF SO, IGNORE IT MOV G.BN(R1),(R0)+ ;;1ST COMMON NAME WORD MOV G.BN+2(R1),(R0)+;;2ND COMMON NAME WORD MOV #1,(R0)+ ;;1 FOR GLOBAL COMMON BIT #GF.LI,G.FW(R1) ;;IS IS A GLOBAL LIBRARY? BEQ 20$ ;;BRANCH IF NOT INC -2(R0) ;;2 MEANS GLOBAL LIBRARY BR 22$ ;; 20$: TST G.BN(R1) ;;ANY NAME? - ASSUME IN-CORE OVERLAY IF NOT. ;;THE FLAG GF.IR SHOULD INDICATE THIS, BUT ;;GF.IR NEVER GETS SET (AN IAS 3.0 BUG) BNE 21$ ;; MOV #4,-2(R0) ;;4 FOR CORE RESIDENT OVERLAY BR 22$ ;; 21$: TST G.FW(R1) ;;PLAS REGION? BNE 22$ ;;BRANCH IF NOT MOV #5,-2(R0) ;;5 FOR PLAS REGION 22$: MOVB G.AC(R1),(R0)+ ;;NUMBER OF ACTIVE TASKS CLRB (R0)+ MOV G.BA(R1),(R0)+ ;;BASE ADDRESS MOV G.CZ(R1),(R0)+ ;;SIZE MOV G.PD(R1),R2 ;;TPD ADDRESS MOV T.PN(R2),(R0)+ ;;1ST PARTITION NAME WORD MOV T.PN+2(R2),(R0)+ ;;2ND PARTITION NAME WORD CLR (R0)+ ;;CLEAR 2 WORDS CLR (R0)+ INC @4(R5) ;;INCREMENT COUNTER BR 10$ ;;GO GET ANOTHER NODE 25$: JSR PC,..ENB0 ;;ENABLE TASK SWITCHING ;TPD MOV 12(R5),R0 ;TPD ARRAY ADDRESS IN R0 CLR @14(R5) ;CLEAR COUNTER MOV .TPDBA,R1 ;TPD BASE ADDRESS IN R1 30$: MOV (R1),(R0)+ ;1ST PARTITION WORD MOV 2(R1),(R0)+ ;2ND PARTITION WORD MOV T.BA(R1),(R0)+ ;BASE ADDRESS MOV T.BA(R1),(R0) ;GET BASE ADDRESS AND ADD T.PZ(R1),(R0)+ ;ADD SIZE TO GET END ADDRESS INC @14(R5) ;INCREMENT COUNTER ADD #T.SZ,R1 ;STEP TO NEXT PARTITION CMP R1,.TPDEA ;END OF DIRECTORY? BNE 30$ ;NO - GO GET ANOTHER RTS PC .END