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