SETOVFDT.MAC;2/AU=[12,10]SETOVFDT.VGN;1 \ -2,2 .IDENT /3.4XA/ -/PL118/,, ; ; JGD17 24-AUG-79 ADD SET /TOP COMMAND % -/.WORD SETSLV/,,/; JGD17/ .WORD SETTOP ; 16. - SET TOP OF SYSTEM CONTROLLED PARTITION -/SETER1:/ -/JMP $MERLD/,,/; JGD17/ .SBTTL SET /TOP PROCESSING SETTOP: MOV #$MPARS+NAME,R0 ; GET ADDRESS OF PARAMETER LIST CALL PARSRC ; DOES THE PARTITION EXIST? BCS TOPER9 ; PARTITION NOT IN SYSTEM IF CS MOV P.REL(R1),R2 ; GET BASE ADDRESS OF PARTITION ADD P.SIZE(R1),R2 ; ADD IN SIZE TO GET OLD TOP ADD $MPARS+6,R2 ; COMPUTE THE NEW TOP VALUE CMP R2,$SYSIZ ; IS NEW TOP BEYOND TOP OF MEMORY BHI TOPER6 ; PARTITION BEYOND MEMORY .IF DF M$$MGE ; IF MEMORY MANAGEMENT .IFF ; IF FALSE CMP R2,#1600 ; IS IT IN EXTERNAL PAGE .IFT ; IF TRUE BIT #FE.EXT,$FMASK ; IS IT 11/70 EXTENDED MEMORY? BEQ 25$ ; IF EQ, NO CMP R2,#17760 ; YES, IS IT IN EXTERNAL PAGE? BR 30$ ; BRANCH 25$: CMP R2,#7600 ; YES, IS IT IN EXTERNAL PAGE .IFTF ; IF TRUE OR FALSE 30$: BHI TOPER6 ; IF HIGHER, FATEL ERROR .ENDC MOV R1,R5 ; COPY PCB ADDRESS CALL $LOCKL ; LOCK SYSTEM LISTS CMP P.MAIN(R5),R5 ; IS IT A MAIN PARTITION BNE TOPER4 ; IF NE, NO ERROR(DON'T DIDDLE SUB PARTITIONS) BIT #PS.SYS,P.STAT(R5) ; IS IT A SYSTEM CONTROLLED PARTITION BEQ TOPER5 ; IF EQ, NO, SPACE OCCUPIED, PARTITION BUSY 50$: MOV P.LNK(R5),R5 ; POINT TO NEXT PCB IN CHAIN(IS PAR ABOVE US) BEQ 55$ ; NOTHING ABOVE SYSTEM CONT PARTITION CMP R2,P.REL(R5) ; IS TOP OF PAR < BOT OF NEXT PARTITION BHI TOPER5 ; IF HI, SPACE OCCUPIED 55$: MOV R1,R5 ; COPY PARTITION ADDRESS 60$: MOV P.SUB(R5),R5 ; ARE WE AT END OF SUB PAR LIST BEQ OK ; IF EQ, MUST BE OK TO TWIDDLE WITH TOP OF PAR MOV P.REL(R5),R3 ; GET PARTITION BASE ADDR, NEWTOP MUST BE ADD P.SIZE(R5),R3 ; GREATER THAN EVERY SUBPAR TOP CMP R2,R3 ; IS IT? BLOS TOPER5 ; IN LOS, SPACE OCCUPIED BR 60$ ; CHECK NEXT SUBPARTITION PCB OK: CMP R2,P.REL(R1) ; NEWTOP BETTER BE > BOTTOM OF PAR BLOS TOPER3 ; IF LOS, ALLIGNMENT ERROR SUB P.REL(R1),R2 ; GET NEW SIZE FOR PARTITION CALL $SWSTK,70$ ; SWITCH TO SYSTEM STATE MOV R2,P.SIZE(R1) ; SET NEW SIZE FOR PARTITION RETURN ; EXIT SYSTEM STATE 70$: CALL $UNLKL ; UNLOCK SYSTEM LISTS JMP $MCR ; CALL MCR BACK TOPER3: JMP SETER3 ; ALLIGNMENT ERROR TOPER4: JMP SETER4 ; PARTITION NOT MAIN TOPER5: JMP SETER5 ; SPACE OCCUPIED TOPER6: JMP SER6 ; PARTION BEYOND AVAILABLE MEMORY TOPER9: JMP SETER9 ; PAR NOT IN SYSTEM /