.TITLE SYSCAN ; ; ROUTINE TO READ SYSTEM TABLES - CALLING TASK MUST BE PRIVLEDGED. ; ; AUTHOR R. FRENCH APRIL 1975 THE BOEING COMPANY SEATTLE, WASH. ; CONVERTED TO VERSION 6 - SEPTEMBER 1975 R. FRENCH ; CONVERTED TO VERSION 6.2 - MARCH 1977 R. FRENCH ; ; 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 - LIBRARY ; 2 - COMMON ; 3 - PURE AREA ; 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 ATL FLAGS WORD ; 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 ;ARRAY ADDRESS IN R0 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 MOV .ATLLH,R1 ;;ATL LISTHEAD IN R1 MOV .ATLLH+2,R4 ;;END OF ATL IN R4 ATL: MOV A.TD(R1),R2 ;;STD ADR OF TASK IN R2 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 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.GC(R2),R3 ;;GET GLOBAL POINTER BEQ 10$ ;;BRANCH IF NONE TST (R3) ;;IS IT A PURE AREA (NO LINKAGE) BNE 10$ ;;BRANCH IF NOT ; MOV R0,-(SP) ;;SAVE R0 TST NPURE ;;ANY PURE AREAS FOUND YET? BEQ 5$ MOV R1,-(SP) ;;SAVE R1 MOV NPURE,R0 ;;NUMBER OF PURE AREAS IN R0 MOV #PURE,R1 ;;ADR OF NAMES IN R1 1$: CMP (R2),(R1)+ ;;CHECK 1ST WORD OF NAME BNE 2$ CMP 2(R2),(R1)+ ;;CHECK 2ND WORD OF NAME BNE 3$ MOV (SP)+,R1 ;;RESTORE R1 AND R0 MOV (SP)+,R0 BR 10$ 2$: ADD #2,R1 ;;INCREMENT POINTER 3$: SOB R0,1$ MOV (SP)+,R1 ;;RESTORE R1 5$: MOV #PURE,R0 ;;POINT TO NEXT STORAGE WORD ADD NPURE,R0 MOV (R2),(R0)+ ;;MOVE IN NAME MOV 2(R2),(R0) ADD #4,NPURE ;;INCREMENT COUNTER MOV (SP)+,R0 ;;RESTORE R0 ; MOV (R2),(R0)+ ;;CALL PURE AREA BY TASKNAME MOV 2(R2),(R0)+ MOV #3,(R0)+ ;;3 FOR PURE AREA MOVB G.AC(R3),(R0)+ ;;ACCESS COUNT CLRB (R0)+ MOV G.BA(R3),(R0)+ ;;BASE ADDRESS MOV G.CZ(R3),(R0)+ ;;SIZE MOV G.PD(R3),R2 ;;GET 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 10$: CMP (R1),R4 ;;END OF LIST? BEQ FTL ;;IF YES, GO CHECK FTL MOV (R1),R1 ;;GET NEXT NODE BR ATL FTL: CMP #.FTLLH,R4 ;;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,R4 ;;END OF FTL POINTER IN R4 BR ATL ; GCD GCD: MOV #.GCDLH,R1 ;;GCD LISTHEAD IN R1 10$: MOV (R1),R1 ;;GET A NODE CMP R1,#.GCDLH ;;END OF GCD? BEQ MRL ;;IF YES, GO CHECK MRL 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 BITB #GF.LI,G.FB(R1) ;;IS IS A GLOBAL LIBRARY? BEQ 20$ ;;BRANCH IF NOT INC -2(R0) ;;2 MEANS GLOBAL LIBRARY 20$: 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 ; MRL MRL: MOV 6(R5),R0 ;;GET MRL ARRAY ADDRESS MOV .TPDBA,R1 ;;TPD START IN R1 10$: MOV R1,R2 ;;PUT IT IN R2 AND ADD #T.RF,R2 ;;OFFSET TO MRL LISTHEAD MOV R2,MRLEND ;;SAVE MRL START 15$: MOV (R2),R2 ;;GET A NODE CMP R2,MRLEND ;;END OF MRL? BEQ 20$ ;;BRANCH IF YES MOV A.TD(R2),R3 ;;STD ADR OF TASK IN R3 MOV (R3),(R0)+ ;;1ST TNAME WORD MOV 2(R3),(R0)+ ;;2ND TNAME WORD MOV A.TI(R2),R4 ;;TI POINTER TO PUD MOVB U.UN(R4),(R0)+ ;;TI UNIT NUMBER CLRB (R0)+ ;;CLEAR HIGH BYTE MOV S.TZ(R3),(R0)+ ;;TASK SIZE MOV A.TF(R2),(R0)+ ;;FLAGS WORD MOV T.PN(R1),(R0)+ ;;1ST PARTITION WORD MOV T.PN+2(R1),(R0)+ ;;2ND PARTITION WORD MOV A.RP(R2),(R0)+ ;;PRIORITY INC @10(R5) ;;INCREMENT COUNTER BR 15$ 20$: ADD #T.SZ,R1 ;;SKIP TO NEXT TPD ENTRY CMP R1,.TPDEA ;;END OF TPD? BNE 10$ ;;BRANCH IF NOT 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 MRLEND: .WORD 0 ;POINTER TO END OF MRL NPURE: .WORD 0 PURE: .BLKW 10. .END