X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cda2ba6d27526e5ef6f27f7b3391cfb55055bf2e..58bf8f5a669eb10b7077c09ee4e01813221928f6:/src/core1.mac diff --git a/src/core1.mac b/src/core1.mac index 1b96cdb..f2b2dc9 100644 --- a/src/core1.mac +++ b/src/core1.mac @@ -5,8 +5,8 @@ XP VCORE1,414 ENTRY CORE1 ;ALWAYS LOAD CORE1(FOR LIB SEARCH) -;CORE ALLOCATION IS DONE ON A 1K BLOCK BASIS +;CORE ALLOCATION IS DONE ON A 1K BLOCK BASIS ;USING A USE BIT TABLE(CORTAB) WHICH HAS A 1 ;FOR EVERY BLOCK WHICH IS NOT AVAILABLE BECAUSE: ; 1.IN USE BY MONITOR @@ -92,7 +92,8 @@ IFN FTSWAP,< LSH TAC,-12 > JRST STOTAC ;STORE IN USER AC AND RETURN TO USER - ;ROUTINE TO CHECK JOBS TO SEE IF ANY JOB CAN BE SHUFFLED + +;ROUTINE TO CHECK JOBS TO SEE IF ANY JOB CAN BE SHUFFLED ;IT IS CALLED EVERY 60TH OF A SECOND BY CLOCK ROUTINE ;PROVIDING CURRENT JOB IS IN USER MODE OR JUST ENTERING ;IO WAIT OR SHARABLE DEVICE WIAT OR RETURNING ON UUO CALLS @@ -115,7 +116,7 @@ IFN FTSWAP,< ;THE NSHF BIT IN JOBSTS WHOULD BE SET FOR JOBS USING DISPLAYS ;SINCE DISSER CONTINUALLY REFERENCES USER AREA EVEN THOUGH ;IOAC1 IS OFF. - + ;THIS VERSION OF THE CORE SHUFFLER WORKS AS FOLLOWS: ;EVERY CLOCK TICK FOR WHICH ALL JOBS ARE SHUFFABLE(NOT COUNTING ACTIVE ;IO DEVICES). THE JOB IMMEDIATELY ABOVE THE LOWEST HOLE @@ -172,8 +173,7 @@ IFN FTSWAP,< MOVSI TAC,SHF ;SET SHF WAIT BIT IN JOB STATUS WORD IORM TAC,JBTSTS(ITEM) ;SO JOB WILL NOT BE RUN POPJ PDP, ;AND IO WILL STOP SOON - -;ROUTINE TO TEST FOR ANY ACTIVE DEVICES + ;ROUTINE TO TEST FOR ANY ACTIVE DEVICES ;CALL: MOVE ITEM,JOB NUMBER OR HIGH SEG NUMBER ; MOVE JDAT,ADDRESS OF JOB DATA AREA @@ -185,6 +185,7 @@ IFN FTSWAP,< INTERN ANYACT,ANYDEV EXTERN JOBMAX + ANYACT: IFN FTSWAP,< INTERN ANYDEV @@ -219,13 +220,13 @@ ANY2: SOJGE T1,ANY ;NO, KEEP LOOKING TDNN AC3,DEVMOD(DEVDAT) ;NOT FINISHED, IS DEVICE TTY? POPJ PDP, ;NO, ERROR RETURN, CANNOT ASSIGN CORE JRST ANY2 ;YES, KEEP LOOKING FOR AN ACTIVE DEVICE - -;ROUTINE TO TEST TO SEE IF JOB OR HIGH SEG CAN BE SWAPPED + ;ROUTINE TO TEST TO SEE IF JOB OR HIGH SEG CAN BE SWAPPED ; OR WHETHER IT SHOULD BE ALLOWED TO CONITNUE RUNNING ; UNTIL A MORE FAVORABLE ITME ;CALL: MOVE ITEM,HIGH RO LOW SEG NUMBER ; PUSHJ PDP,TRYSWP -; RETURN1 - JOB MUST REMAIN RUNABLE(NSHF,NSWP SET OR SAVE,GET IN PROGRESS); RETURN2 - OK TO SWAP HIGH OR LOW SEG +; RETURN1 - JOB MUST REMAIN RUNABLE(NSHF,NSWP SET OR SAVE,GET IN PROGRESS) +; RETURN2 - OK TO SWAP HIGH OR LOW SEG IFN FTSWAP,< INTERN TRYSWP @@ -243,8 +244,7 @@ IFE FT2REL,< JRST CPOPJ1 ;NO, GIVE OK RETURN > > - -;ROUTINE TO FLUSH PHYSICAL CORE ASSIGNED IN MEMORY + ;ROUTINE TO FLUSH PHYSICAL CORE ASSIGNED IN MEMORY ;NOTE: THIS ROUTINE DIFERS SIGNIFICANTLY FROM CORE0 AND CORE1 IN THAT ;IT IS ONLY A PHYSICAL REMOVAL OF CORE(VIRTAL IS NOT AFFECTED) ;SEE COMMENTS FOR CORE1 @@ -261,8 +261,8 @@ SCORE1: SOS(PDP) ;CORE1 WILL ALWAYS SKIP RETURN ; AND FLUSH PHYSICAL CORE(LOGICAL CORE UNEFFECTED) -;CORE0 IS CALLED BY THE CORE MONITOR COMMAND AND THE CORE SHUFFLER +;CORE0 IS CALLED BY THE CORE MONITOR COMMAND AND THE CORE SHUFFLER ;AND RUN COMMAND ;BOTH LOGICAL AND PHYSICAL CORE ASSIGNMENT ARE AFFECTED @@ -305,8 +305,7 @@ EXTERNAL JOBPR1,CPOPJ1,JOBPRT,USRPC,CORMAX ;THE CORE ROUTINES DO NOT ALTER THE HIGH SEG IN CORE COUT. IT IS UP TO THE CALLER ;(IN SEGCOR) TO CALL THE CORE ROUTINES ONLY IF IN CORE COUNT IS 0 ;AND END OF SWAPIN OF LOW SEG AND HIGH SEG IS ALREADY IN CORE FOR OTHER USER - -CORE0: + CORE0: IFE FTSWAP,< JUMPE PROG,CORGET ;IS JOB WITHOUT CORE IN MEMORY? > @@ -351,7 +350,7 @@ IFN FTTRPSET,< PUSHJ PDP,ANYACT ;NO,ANY ACTIVE DEVICE? POPJ PDP, ;YES, CANNOT ASSIGN CORE ; NO, FALL INTO CORE1 -;ROUTINE TO TRY TO ASSIGN CORE IN CORE + ;ROUTINE TO TRY TO ASSIGN CORE IN CORE ;LOW OR HIGH SEG MUST NOT BE SWAPPED OUT(CALLER'S RESPONSIBILITY) ;AND MUST NOT HAVE ANY ACTIVE DEVICES(IT MAY HAVE 0 CORE IN CORE THOUGH) ;IN OTHER WORDS HIGH OR LOW SEG MAY OR MAY NOT HAVE VIRTUAL CORE @@ -399,7 +398,7 @@ CORE1A: NOSCHEDULE ;PREVENT JOB SCHEDULING HLRZ BLK,PROG ;HIGHEST LEGAL REL. ADR. MOVEI T,0 ;CLEAR FOR CORSTG CALL PUSHJ PDP,CORSTG ;RETURN OLD CORE TO FREE STORAGE -;CORGET IS CALLED BY SWAPPER WHEN JOB IS ON DISC AND IS + ;CORGET IS CALLED BY SWAPPER WHEN JOB IS ON DISC AND IS ;WANTED IN CORE. CORGET: SETZB LOC,PROG ;SET NEW ASSIGNMENT TO 0 AND DIST. MOVED @@ -434,7 +433,7 @@ IFE FTSWAP,< ;OLD, CLEAR OUT INCREASED SO SECURITY WILL ; BE MAINTAINED. TAC1 IS SIZE-1 OF OLD ; ASSIGNMENT. -1 OF NO OLD ASSIGNMENT -;HERE WHEN FREE CORE TABLE DOES NOT HAVE ENOUGH ROOM FOR REQUEST + ;HERE WHEN FREE CORE TABLE DOES NOT HAVE ENOUGH ROOM FOR REQUEST BAKOLD: IFN FTSWAP,< @@ -443,7 +442,7 @@ IFN FTSWAP,< > IFE FTSWAP,< IFE FT2REL,< - SOSO (PDP) ;SET FOR ERROR RETURN AND GET BACK LO CORE + SOS (PDP) ;SET FOR ERROR RETURN AND GET BACK LO CORE > IFN FT2REL,< EXTERN FRECOR @@ -455,8 +454,7 @@ IFE FTSWAP,< > BKOLD1: HLRZ TAC,JBTADR(ITEM) ;GIVE BACK OLD CORE. JRST CORGET - -;MOVE OLD CORE TO NEW AREA + ;MOVE OLD CORE TO NEW AREA MOVCOR: CAIN LOC,(BLK) ;IS NEW CORE IN SAME PLACE AS OLD? JRST CLRCOR ;YES, DO NOT MOVE IT,CLEAR IF INCREASE @@ -464,8 +462,8 @@ MOVCOR: CAIN LOC,(BLK) ;IS NEW CORE IN SAME PLACE AS OLD? CAILE TAC1,(TAC) ;IS OLD CORE LESS THEN NEW? HRRZ TAC1,TAC ;NO, MOVE THE SHORTENED NEW CORE IFN FTTIME,< - EXTERNAL SHRWRD - ADDM TAC1,SHRWRD ;INCREMENT TOTAL NO. WORDS SHUFFLED + EXTERNAL SHFWRD + ADDM TAC1,SHFWRD ;INCREMENT TOTAL NO. WORDS SHUFFLED > ADD TAC1,LOC ;ADD IN NEW RELOC. MOVE AC1,LOC ;DEST.=NEW RELOC. @@ -488,6 +486,7 @@ IFN FTTIME,< SETZM -1(TAC1) ;CLEAR FIRST WORD HRLI TAC1,-1(TAC1) ;SET LH TO FIRST ADR. TO CLEAR BLT TAC1,(TAC) ;CLEAR THE INCREASE PORTION + ;IF THE SHUFFLED JOB IS IN EXEC MODE, ITS DUMP ACS ;(PDP,PROG,JDAT SAVED IN JOB DATA AREA) MUST BE ;ALTERED BY DISTANCE CODE WAS MOVED @@ -525,6 +524,7 @@ IFN FT2REL,< PUSHJ PDP,CURHGH ;CHECK TO SEE IF THIS CORE ASSIGNMENT IS FOR ; HIGH SEG WHICH CURRENT USER MAY ALSO BE USING ; IF YES, RESET HARDWARE AND SOFTWARE RELOC INFO. + ; RETURN WITH ITEM PRESERVED,PROG SET TO RELOC ; OF SEG WHICH HAS JUST HAD CORE REASSIGNED > @@ -576,10 +576,9 @@ IFN FTSWAP,< SUBI LOC,2000(BLK) ;YES, SET LOC TO FIRST BLOCK IN HOLD SOJA BLK,CPOPJ1 ;SET BLK TO HIGHEST REL. LOC. ; AND RETURN - -;ROUTINE TO SET AND CLEAR CORE USE TABLE + ;ROUTINE TO SET AND CLEAR CORE USE TABLE ;CALL: MOVEI T,1 ;TO SET TABLE - MOVEI T,0 ;TO CLEAR TABLE +; MOVEI T,0 ;TO CLEAR TABLE ; MOVE BLK,HIGHEST REL. LOC. IN USER AREA ; MOVE LOC,ADDRESS OF FIRST BLOCK TO SET CLEAR @@ -596,7 +595,6 @@ CORSTG: PUSH PDP,TAC ;SAVE HIGHEST LOC. BEING REQUESTED ASH TAC,-12 ;FORM BYTE POINTER TO BIT-1 IDIVI TAC,^D36 ;TAC=WORD,TAC1=BIT ADD TAC,CORE2P ;FORM BYTE POINTER - MOVNS TAC1 ADDI TAC1,^D36 DPB TAC1,[POINT 6,TAC,5]