X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/blobdiff_plain/cff7fa5698c01a69c3a64e2f39a8db9b398068b5..e6cdcf9f28fd4956d9c22090b705d9d8396b5cde:/src/segcon.mac diff --git a/src/segcon.mac b/src/segcon.mac index 5bbd1b2..67692c7 100644 --- a/src/segcon.mac +++ b/src/segcon.mac @@ -1,7 +1,6 @@ -FTHALT==-1 -TITLE SEGCON - HIGH SEGMENT CONTROL FOR REENTRANT USER PROGRAMMING V435 +TITLE SEGCON - HIGH SEGMENT CONTROL FOR REENTRANT USER PROGRAMMING V427 SUBTTL T. HASTINGS/TW/TNM/TH/AF/CHW/TW/RCC TS 22 DEC 69 -XP VSEGCN,434 +XP VSEGCN,427 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER MAP ;ALL OF THE CODE DEALING WITH THE SECOND RELOCATION REGISTER HAS BEEN ISOLATED @@ -345,7 +344,7 @@ ASG1: MOVE TAC,DEVNAM(DEVDAT) ;GET DEVICE NAME(PHYSICAL) ASG3: AOBJN ITEM,ASG1 ;NO, KEEP LOOKING, FINISHED? JUMPG ITEM,IPOPJ ;RETURN IF FINISHED AND RESTORE JOB NUMBER TLZ ITEM,-1 ;CLEAR OUT LH BITS OF HIGH SEG NO. - PUSHJ PDP,CLRNAM ;NOT FINISHED, CLEAR SEG NAME + PUSHJ PDP,CLRNM1 ;NOT FINISHED, CLEAR SEG NAME ;AND RETURN DISK SPACE IF NOT IN USE JRST ASG3 ;CONTINUE SCAN, RESTORE TAC TO DEVICE NAME @@ -410,8 +409,8 @@ ANYSV0: SKIPE PROG,JBTADR(ITEM) ;IS JOB IN CORE (R=R)? SKIPL JOBHCU(PROG) ;YES, IS A SSVE OR GET FOR EITHER SEG IN PROGRESS? ANYSV1: SOJG ITEM,ANYSV0 ;NO, KEEP LOOKING, FINISHED? JUMPLE ITEM,ANYSV2 ;YES, FIND A SAVE OR GET IN PROGRESS - HRRZ TAC,JBTSGN(ITEM) ;NO, GET ITS HIGH NUMBER, IF ANY - CAIE TAC,@(PDP) ;IS IT SAME AS HIGH SEG IN QUESTION? + HRRZ AC1,JBTSGN(ITEM) ;NO, GET ITS HIGH NUMBER, IF ANY + CAIE AC1,@(PDP) ;IS IT SAME AS HIGH SEG IN QUESTION? ; (INDIRECT AND INDEX BITS ALWAYS 0) JRST ANYSV1 ;NO, KEEP LOOKING PUSHJ PDP,ANYDEV ;YES, DOES THIS JOB HAVE @@ -539,7 +538,7 @@ KILLOP: HRRZ TAC1,JBTSGN(TAC) ;GET HIGH SEG NUMBER FOR NEXT USER(IF ANY) ; ON A GET IF WE LEFT IT ON SWAPPING SPACE? PUSHJ PDP,ZERSWP ;NO, NO NAME, SO DELETE DISK SPACE(IF ANY) > - MOVSI TAC,SNA ;FLAG HIGH SEG AS UNASSIGNED(OR DORMANT + MOVSI TAC,SNA!NSHF!NSWP! ;FLAG HIGH SEG AS UNASSIGNED(OR DORMANT ; IF STILL IN ; CORE OR DISK). TURN OFF NO SWAP AND NO SHUFFLE ; IN CASE ON BY ACCIDENT(SAVE NOT GO TO COMPLETION) @@ -595,7 +594,6 @@ IFN FTSWAP,< ; RETURN ITEM,PROG PRESERVED ;CALLED FROM CLRNAM AND FRECOR - INTERN FTHALT EXTERN CORTAL,JBTADR KDORCR: PUSH PDP,PROG ;SAVE R(EITHER HIGH OR LOW RELOC) @@ -874,7 +872,7 @@ CURHGH: MOVE TAC,JOB ;CURRENT JOB NUMBER ; (EVEN THOUGH THIS CALL TO CURHGH MAY BE FOR SOME ; OTHER JOB) SONCE HIGH SEG MAY BE IN NEW PLACE IN CORE POP PDP,ITEM ;RESTORE HIGH SEG NUMBER AND RELOC FOR HIGH SEG IN CORE - POPJ PDP, ;RETURN + JRST RPOG ;RETURN ;ROUTINE TO SEE IF SUM OF BOTH SEGMENTS WILL FIT INTO MAXIMUM SIZE ;OF PHYSICAL CORE TOGETHER ;CALL: MOVE TAC,REQUESTED LENGTH-1 OF SEG BEING ASSIGNED(LOW OR HIGH) @@ -905,8 +903,8 @@ SUMSEG: JUMPE TAC,CPOPJ1 ;ASKING FOR 0 CORE(IF YES, COULD BE MOVEI TAC1,0 ;ASSUME NO HIGH SEG NUMBER JUMPLE ITEM,SUM1 ;IS THERE NO HIGH SEG OR IS THIS A SPY SEG? PUSHJ PDP,SEGSIZ ;TAC1=SIZE(IN J) OF HIGH OR LOW SEG - ASH TAC1,12 ;CONVERT TO NUMBER OF WORDS(SEG NOT BEING ALLOCATED) -SUM1: ADD TAC1,TAC ;ADD REQUEST(ORED 1777) TO LENGTH-1(OR 0) OF SEG NOT + LSH TAC1,12 ;CONVERT TO NUMBER OF WORDS(SEG NOT BEING ALLOCATED) +SUM1: ADDI TAC1,(TAC) ;ADD REQUEST(ORED 1777) TO LENGTH-1(OR 0) OF SEG NOT ; BEING CHANGED CAMGE TAC1,CORMAX ;WILL TOTAL SIZE-1 BE LESS THAN MAX SIZE AOS -1(PDP) ;YES, OK RETURN @@ -952,17 +950,15 @@ FREC1: SKIPE JBTADR(ITEM) ;DOES THIS HIGH SEG HAVE CORE? JUMPL ITEM,FREC2 ;YES, DID WE FIND A DORMANT OR IDLE SEG WITH CORE? -IFE FTSWAP,< - POP PDP,ITEM ;RESTORE JOB OR SEG. # - JRST TPOPJ ;RESTORE CORE REQUEST AND RETURN -> +;IFE FTSWAP,< +; POP PDP,ITEM ;RESTORE JOB OR SEG. # +; JRST TPOPJ ;RESTORE CORE REQUEST AND RETURN +;> -IFN FTSWAP,< JSP DAT,OERROR ;NO, ERROR-CORTAB AND CORTAL DO NOT AGREE ; PRINT ON OPERATOR'S CONSOLE, DO NOT BLAME ; ANY PARTICULAR JOB -> FREC2: TLZ ITEM,-1 ;CLEAR OUT LH OF SEG NUMBER IFN FTSWAP,< @@ -1059,7 +1055,7 @@ SETEX1: TLZ IOS,NSRBIT ;TRY SHARABLE SEG FIRST(.SHR) THEN .HGH INTERN SETEXT -SETEXT: HRLZM TAC1,SGALOW(PROG) ;SAVE EXTENSION USER TYPED FOR LOW SEG +SETEXT: HLLZM TAC1,SGALOW(PROG) ;SAVE EXTENSION USER TYPED FOR LOW SEG MOVE TAC1,[SIXBIT /SHRHGH/] ;ASSUME SSAVE COMMAND(OR GET) TLNE IOS,NSRBIT ;WAS IT? MOVSS TAC1 ;NO, EXCHANGE ROLES OF EXTENSIONS, MUST @@ -1098,7 +1094,7 @@ SAVHGH: PUSHJ PDP,SGOPEN ;TRY TO ASSIGN DEVICE(INIT IN SAVMOD) ; BY CORE OR REMAP BY USER R)? SKIPE USRDDT ;YES, IS USER USING DDT? HRLM TAC1,JOBHRL(JDAT) ;YES, SET FIRST FREE TO BE FIRST WORD BEYOND END(REL) - HLRZ TAC,JOBHRL(JDAT) ;GET CORRECT FIRST REL FREE LOC IN HIGH SEG + HLLZ TAC,JOBHRL(JDAT) ;GET CORRECT FIRST REL FREE LOC IN HIGH SEG MOVNM TAC,SGALEN(PROG) ;SET LH=-NO. OF WORDS TO WRITE. RH=0 HLLOS SGALEN(PROG) ;SET RH=-1 IN CASE DECTAPE(USES RH TO COMPUT ; LENGTH=FIRST REL LOC-1 @@ -1267,9 +1263,7 @@ GETHGH: SKIPE TWOREG ;IS THIS A 2 RELOC REG. MACHINE? SETZM JOBDDT(JDAT) ;ALSO CLEAR DDT STARTING ADDRESS SETZM USRDDT ;IN MONITOR PROTECTED AREA AS WELL AS JOBDAT ; IN CASE RETURN TO USER WITHOUT RESCHEDULING - PUSHJ PDP,ADJCOR ;COMPUTE AMOUNT OF CORE FOR BOTH LO & HI SEGS - ; FROM USER'S CORE ARG.(IF ANY) - ; RETURNS WITH HI SEG # IN TAC + MOVE TAC,JBTSGN(ITEM) HRRO TAC,JBTADR(TAC) ;ABSOLUTE ADDRESS OF HIGH SEG(LH=-1 FOR ; POPS SO NO PDL UNDERFLOW) ADDI TAC,JOBPOP ;ADD POP OFFSET @@ -1330,7 +1324,7 @@ SAVLOW: MTAPE 3 ;WRITE A NULL HIGH SEGMENT IF MTA ; RETURN 1 - HIGH SEG OR FILE NOT FOUND ; RETURN 2 - HIGH SEG FOUND AND IN LOG ADR. SPACE(IN FACT ALSO IN CORE) - EXTERN NROOM1,DEVPHY,PJOBN,JOB,SGADAT,JOBPD1 + EXTERN NROOM1,DEVPHY,PJOBN,JOB,SGADAT,sganew,JOBPD1 GETSEG: IFN FTDISK,< @@ -1398,6 +1392,8 @@ IFN FTHALT,< MOVSI TAC1,SNA ;MAKE SURE THIS HIGH SEG IS FLAGGED AS IN USE ; IE SEG IN SOME USER'S LOG. ADR. SPACE IORB TAC1,JBTSTS(ITEM) ;MAY HAVE BEEN JUST ASSIGNED OR DORMANT + PUSHJ PDP,INCCNT + JRST SETRL1 IFN FTSWAP,< MOVE DAT,JBTSTS(TAC) ;JOB STATUS WORD TLNN DAT,JXPN ;JOB WAITING TO EXPAND LOW OR HIGH SEG? @@ -1405,25 +1401,9 @@ IFN FTSWAP,< ; OR WAITING TO EXPAND? JRST SETRL0 ;YES, WAIT TILL HIGH SEG IN CORE TOO > -SHARE3: PUSHJ PDP,INCCNT ;NO, INCREMENT HIGH SEG IN-CORE COUNT FOR THIS - ; JOB(TAC) IF NOT ALREADY INCREMENTED, RETURN - ; WITH J = HIGH SEG NO. -IFN FTHALT,< - PUSHJ PDP,CHKTAL ;CHECK CORTAL WIT CORTAB, HALT IF DIFF. -> - JRST SETRL1 ;SET HARD. AND SOFT. RELOC. AND SKIP RETURN - -SHRNRM: HRRZ TAC1,JOBPD1(JDAT) ;GET RETURN PC IN CASE THIS IS RUN UUO - CAMLE TAC1,USRREL ;IS IT IN THE HIGH SEG WHICH IS NOW GONE ? - HRRZS JOBPD1(JDAT) ;YES, TURN OFF USER MODE FLAG, SO ERROR - ; WILL NOT LOOK FOR HALT AFTER UUO - MOVE TAC,TAC1 ;SETUP NO. OF K NEEDED FOR MESSAGE - JRST NROOM1 ;GO PRINT MONITOR MESSAGE AND STOP JOB - ; OR ERROR RETURN TO LOW SEGMENT - ; (UNLESS UUO HAS A HALT FOLLOWING IT) STONAM: MOVE DAT,JOB ;CURRENT JOB NUMBER MOVSI ITEM,SHRSEG ;FLAG THIS USER AS USING A SHARABLE HIGH SEG - IORB ITEM,JBTSGN(DSER) ;AND SETUP HIGH SEG NUMBER + IORB ITEM,JBTSGN(DAT) ;AND SETUP HIGH SEG NUMBER MOVEM TAC,JBTDIR(ITEM) ;STORE DIRECTORY(OR PHY DEV NAM)> MOVEM TAC1,JBTNAM(ITEM) ;STORE HIGH SEG FILENAME MOVSI TAC,SHRSEG ;ALSO FLAG HIGH SEG ASSIGNED @@ -1442,31 +1422,16 @@ SETRL2: PUSHJ PDP,WSCHED ;WAIT TILL IT IS SWAPPED IN(CALL SCHEDULER) SETRL1: AOS (PDP) ;SKIP RETURN(GETSEG,UCORHI,UREMAP) JRST SETREL ;SET HARDWARE AND SOFTWARE RELOC INFO ; FOR CURENT JOB AND RESTORE R AND J - -;ROUTINE TO ADJUST USER'S CORE ARG. IN GET,R,RUN OR SAVE COMMANDS SO THAT -; THE ARG. SUPPLIED IS THE TOTAL OF BOTH THE LO & HI SEGS. IF THERE IS NO -; HI SEG THEN ARG. IS THE LO SEG SIZE AS IN NON-REENTRANT SYSTEMS. -; IF THERE ARE BOTH LO & HI SEGS AND THE ARG. IS LESS THAN THE HI SEG + 1K -; MANDATORY LO SEG SIZE THEN THE CORE ALLOCATION IS UNCHANGED. - -;CALL MOVE PROG,ADR. OF JOB DATA AREA -; MOVE ITEM,JOB NO. -; PUSHJ PDP,ADJCOR -; ALWAYS RETURN WITH TAC=HI SEG #,TAC1 & U DESTROYED - -INTERN ADJCOR -EXTERN SGANEW - -ADJCOR: SKIPN TAC,JBTSGN(ITEM) ;IS THERE A HI SEG ? - POPJ PDP, ;EVIDENTLY NOT - HLRZ TAC1,JBTADR(TAC) ;GET ITS SIZE - SKIPE DAT,SGANEW(JDAT) ;WAS AN ARG. TYPED OF 0 OR NOT AT ALL ? - SUBI DAT,1(TAC1) ;NO - COMPUTE LO SEG SIZE - SKIPLE DAT ;MUST BE 1K OR GREATER! - MOVEM DAT,SGANEW(PROG) ;STORE IT - POPJ PDP, ;RETURN - ; TO LOW SEG RELOC AND JOB NUMBER -;TRY TO READ IN NON-SHARABLE FILE WITH EXTENSION .HGH + ; TO LOW SEG RELOC AND JOB NUMBER +; skipn dat,jbtsgn(item) +; popj pdp, +; hlrz tac1,jbtadr(dat) +; skipe dat,SGAnew(prog) +; subi dat,1(tac1) +; skiple dat +; movem dat,SGAnew(tac1) +; popj pdp, + ;TRY TO READ IN NON-SHARABLE FILE WITH EXTENSION .HGH TRYHGH: MOVSI TAC,(SIXBIT /HGH/) ;TRY LOOKUP WITH EXTENSION .HGH PUSHJ PDP,SGH1 ;SET EXT AND E+3 OF LOOKUP BLOCK @@ -1594,32 +1559,13 @@ DELET: PUSHJ PDP,SGH1 ;SETUP EXTENSION, AND E+3 IN DIRECTORY BLOCK J=ITEM ;CONTAINS JOB OR HIGH SEG NUMBER(SAME AC AS SWAP USES) IFN FTSWAP,< - INTERN FININ EXTERN JOBMAX,JBTSGN,SWPIN,JBTSTS,CPOPJ1,ZERSWP - EXTERN IMGOUT,JBTSWP,FXSAT - -FININ: CAILE J,JOBMAX ;WAS A LOW SEG JUST SWAPPED IN? - JRST FINHGH ;NO, HIGH SEG JUST SWAPPED IN, GO FINISH - MOVEM J,SWPIN ;YES, SAVE JOB NUMBER(FOR FINHGH AND RETURN) - SKIPG J,JBTSGN(J) ;DOES JOB HAVE A REAL HIGH SEG? - JRST BOTHIN ;NO, GIVE NOTHING TO DO RETURN(MAYBE SPYSEG) - SKIPN JBTADR(J) ;YES, IS HIGH SEG ALREADY IN CORE? - ;(NOT POSSIBLE TO BE IN MIDDLE OF SWAPPING) - POPJ PDP, ;NO, GIVE "SWAP-IN-HIGH-SEG" RETURN, - ; AC J SET TO HIGH SEG NO. - PUSHJ PDP,CHKIDL ;YES, CHECK IF THIS HIGH SEG IS IDLE(IF YES, - ; DECREASE CORTAL=FREE+DORMANT+IDLE CORE - ; BY SIZE IN J OF HIGH SEG SINCE IT WILL - ; NO LONGER BE IDLE(IN CORE COUNT NON-ZERO) - - MOVE TAC,SWPIN ;RESTORE JOB NUMBER - PUSHJ PDP,INCCNT ;INCREMENT HIGH SEG IN CORE COUNT - ; FOR THIS JOB -IFN FTHALT,< - PUSHJ PDP,CHKTAL ;CHECK CORTAL WITH CORTAB, HALT IF DIFFER -> -FINHGH: MOVSI TAC,SWP ;CLEAR SWAPPED OUT OR ON WAY FLAG FOR HIGH SEG + +FINHGH: MOVE J,SEGPTR + MOVSI TAC,SWP ;CLEAR SWAPPED OUT OR ON WAY FLAG FOR HIGH SEG ANDCAM TAC,JBTSTS(J) ;AND CLEAR SUPPRESS IN-CORE COUNT INCREMENT FLAG + AOBJN J,SEGINI+2 + POPJ PDP, TLNE J,UWPOFF ;IS USER MODE WRITE PROTECT(UWP) OFF ; FOR THIS USER? @@ -2073,7 +2019,7 @@ IFN FTDISK,< SRCSEG: MOVE ITEM,SEGPTR ;POINTER TO JUST HIGH SEGMENTS IN JOB TABLES FNDLOP: CAMN TAC1,JBTNAM(ITEM) ;DO FILE NAMES MATCH? - CAME TAC,PRJPRG(ITEM) ;YES, DO DIRECTORY NAMES MATCH? + CAME TAC,JBTDIR(ITEM) ;YES, DO DIRECTORY NAMES MATCH? AOBJN ITEM,FNDLOP ;NO, KEEP LOOKING,FINISHED? JUMPGE ITEM,CPOPJ ;YES, FINISHED?(IF YES, GIVE NOT FOUND RETURN) HRLI ITEM,SHRSEG ;YES, THIS MUST BE A MATCH(FLAG SEG AS SHARABLE)