XP VSCHED,421\r
;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
\r
+\r
INTERNAL FTRC10 ;THIS SOURCE FILE MAY BE ASSEMBLED TO USE EITHER THE\r
; NEW PDP-10 DISK (MODEL RC-10) OR THE OLD PDP-6 DISK (DATA\r
; PRODUCTS DISK FILE) FOR SWAPPING.\r
ENTRY XCKCSW\r
>\r
\r
+\r
EXTERNAL JOB,JBTSTS\r
EXTERNAL JBTQ,PJBSTS\r
EXTERNAL PJBSTS,TIMEF,MJOBN\r
SETZM XJOB ;CLEAR NO. OF JOBS NEEDING EXPANDING\r
SETZM JOBQUE ;CLEAR JOB NO. TO BE REQUEUED\r
POPJ PDP,\r
+\r
\f,NXTJOB DECREMENTS CURRENT JOB'S QUANT. AND PROTECT\r
,TIMES AND REQUEUES IT IF QUANT. TIME GONE TO 0\r
,SERVINCES ANY JOB REQUEING REQUESTED AT OTHER PRIORITY\r
,MAKES NO ASSUMPTIONS RE. ACS\r
,RETURSN NEXT JOB TO RUN IN J.\r
\r
+\r
EXTERNAL JBTSWP,POTLST\r
\r
NXTJOB: SKIPN TIMEF ;CLOCK TIC?\r
JRST .+3\r
SKIPL JBTSWP(J)\r
ADDM SW,JBTSWP(J)\r
-\r
AOBJN J,.-4\r
\r
NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB?\r
HLRZ SW,JBTSTS(J) ;GET JOB STATUS BITS AND CODES\r
TRZ SW,RUNMSK+CMWB ;MASK OUT DO NOT CARE BITS\r
CAIE SW,RUNABLE ;IS CURRENT JOB RUNABLE?\r
- JRST CKJR3 ;NO. REQUEU CURRENT JOB\r
+ JRST CKJB3 ;NO. REQUEU CURRENT JOB\r
SKIPN TIMEF ;NO. IS THIS A TIME INTERRUPT?\r
JRST CKJB1 ;NO.\r
\r
MOVEI DAT,QTIME ;YES---REQUEUE AND RESET QUANT. TIME\r
MOVE TAC,JOBQUE\r
PUSHJ PDP,QXFER\r
-\fCKJB1: SKIPG QJ,QJDB ;SET QJ NON ZERO IF ANY REQUEUING TO DO\r
+\fCKJB1: SKIPG QJ,QJOB ;SET QJ NON ZERO IF ANY REQUEUING TO DO\r
JRST CKJB5 ;NO REQUEUEING NECESSARY\r
MOVEI J,JOBMAX ;START WITH HIGHEST JOB NUMBER ASSIGNED\r
-CKJB2: MOVSI SW,JBQ ;JOB NEEDS REQUEUEING BIT\r
+CKJB2: MOVSI SW,JRQ ;JOB NEEDS REQUEUEING BIT\r
TDNN SW,JBTSTS(J) ;THIS JOB?\r
SOJG J,.-1 ;NO, KEEP LOOKING\r
JUMPLE J,CKJB5 ;YES,LOOKED AT ALL JOBS?\r
TLNN SW,CMWB ;IS JOB IN COMMAND WAIT?\r
JRST CKJB9 ;NO.\r
TLNE SW,SWP+JXPN ;YES, IS JOB ON DISK, OR TRYING TO EXPAND?\r
- JRST CK,JB4A ;YES. PUT JOB IN COMMAND WAIT Q\r
+ JRST CKJB4A ;YES. PUT JOB IN COMMAND WAIT Q\r
CKJB9: JUMPGE SW,CKJB4 ;NO,WAIT STATUS CODE DETERMINES NEW Q\r
LDB SW,PJBSTS ;YES, GET QUEUE CODE.\r
CAIN SW,WSQ ;*** EXPERIMENTAL ***\r
JRST CKJB10 ;*** EXPERIMENTAL ***\r
- CAIN SW,TIOWD ;CURRENT JOB GOING INTO TTY IO WAIT?\r
+ CAIN SW,TIOWQ ;CURRENT JOB GOING INTO TTY IO WAIT?\r
HRROS JBTSWP(J) ;YES, SET IN CORE PROTECT TIME TO -1,\r
; SO HE CAN BE SWAPPED IMMEDIATELY IF SOMEONE\r
; ELSE WANTS TO BE SWAPPED IN\r
PUSHJ PDP,CHKSHF\r
>\r
IFN FTSWAP,<\r
- PUSHJ PDP,SWAP\r
->\r
+ PUSHJ PDP,SWAP>\r
\r
;SCHEDULAR--SEARCH THRU QUEUES ACCORDING TO SSCAN TABLE\r
;FOR 1ST JOB IN CORE--RETURN ITS NO. IN J\r
POPJ PDP,\r
\r
\r
+\r
;TEMPORARY EXPERIMENTAL SCHEDULING CHANGE TO PERMIT TTY-I/O-WAIT-SATISFIED JOBS ON\r
; THE DISK TO DISPLACE I/O BOUND JOBS IN CORE.... R.CLEMENTS/D.PLUMER 9 MAY 68\r
CKJB10: SKIPE INFLG\r
,BOTH ROUTINES ARE "TABLE DRIVEN" IN THE SENSE THAT THE\r
,CALLING ROUTINE PROVIDES THE ADDRESS OF A TABLE WHICH\r
,DEFINES THE SPECIFIC OPERATIONS TO BE PERFORMED.\r
-\f;QUEUE INITIALIZATION\r
+\f\r
+;QUEUE INITIALIZATION\r
;PUT ALL JOBS IN NULL QUEUE(JOB NO. NOT ASSIGNED)\r
;CALLED ON RESTART AT LOC 143\r
\r
-INTERNAL QINT\r
+INTERNAL QINI\r
EXTERNAL CPOPJ,JOBMAX,MXQUE,JBTQ\r
EXTERNAL JBTQP1 ;EQUALS JBTQ+1\r
-EXTERNAL JBTCM1 ;EQUALS JBTQ-1\r
-EXTERNAL JBTOMN ;EQUALS JBTQ-NULQ\r
+EXTERNAL JBTQM1 ;EQUALS JBTQ-1\r
+EXTERNAL JBTQMN ;EQUALS JBTQ-NULQ\r
\r
QINI: MOVNI TAC,MXQUE ;MAKE ALL QUEUE HEADERS POINT TO THEMSELVES\r
HRL TAC,TAC ;BACKWARD POINTERS TOO\r
MOVSM TAC,JBTQP1 ;BACK POINTER FOR JOB 1\r
MOVEI ITEM,JOBMAX ;MAX. JOB NO.\r
MOVEM TAC,JBTQ(ITEM) ;FOR. POINTER OF JOBMAX JOB NO.\r
-\r
HRLM ITEM,JBTQMN ;SET NULQ HEADER TO POINT TO JOB1\r
MOVEI TAC,1 ;AND JOBMAX\r
HRRM TAC,JBTQMN ;FORWARD POINTER\r
SOJLE ITEM,CPOPJ ;FINISHED?\r
HRLM ITEM,JBTQP1(ITEM) ;BACK POINTER JOB I+1 POINTS TO JOB I\r
JRST QINI1\r
-\f,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q"\r
+\f\r
+,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q"\r
,ACCORDING TO ONE OF 3 FUNCTIONS, AND INSERTS THE JOB AT\r
,THE BEGINNING OR END OF THIS DEST-Q. IN ADDITION IT MAY\r
,RESET THE JOB'S QUANTUM TIME (RH JBTSTS).\r
, <QUANT-TAB>: EXP <QUANT1> ;CORRES. TO <Q-TAB>+0\r
, ...\r
, EXP <QUANTN> ;CORRES. TO <Q-TAB>+N-1\r
-\r
, Z\r
,\r
, UPON A CALL TO QXFER FOR THESE 2 CODES, AC T2 CONTAINES\r
, <QUANT-TAB> TABLE.\r
, IF NO MATCH FOUND..NO TRANSFER TAKES PLACE.\r
\r
+\r
,DEST-Q AS A FUNCTION OF JOB SIZE\r
,BQJSIZ INSERT AT BEG OF DEST-Q\r
,EQJSIZ INSERT AT END\r
\f,CALLING SEQUENCE:\r
, MOVE J,[JOB NUMBER]\r
, MOVE T2,[CURRENT Q] ;BQLINK AND EQLINK ONLY\r
-; MOVEI TT,TRANS TABLE ADDRESS\r
+, MOVEI TT,TRANS TABLE ADDRESS\r
, PUSHJ PDP,QXFER\r
, ... ;RETURN\r
, ON RETURN J IS UNALTERED; LH(Q)=-1 IF QUANT, TIME OUT\r
J=ITEM ;JOB NO.\r
Q=PROG ;DEST-Q AND QUANT. TIME ON RETURN\r
T1=TAC1 ;TEMP\r
-T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINE\r
+T2=TAC ;TEMP AND SOURCE-Q ON CALL TO B,EQLINK\r
\r
EXTERNAL ERROR\r
\r
HRRO Q,(Q) ;RH(Q)=DEST-Q;LH=-1(NO QUANT.TIME REQ.)\r
SKIPL 1(TT) ;WAS QUANT. TIME REQUESTED?\r
HRL Q,(T2) ;YES--GET IT\r
-\f,FIXED DEST-Q\r
+\f\r
+,FIXED DEST-Q\r
QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q\r
MOVS T2,T1 ;T1=FORW. LINK, T2=BACK LINK\r
HRRM T1,JBTQ(T2) ;FORW, LINK PAST JOB\r
\r
JUMPL Q,QX3 ;RETURN IF QUANT. TIME NOT REQ.\r
HLRM Q,JBTSTS(J) ;SET QUANT. TIME\r
-\r
MOVEI TT,RNQ ;SET JOB STATUS WAIT\r
DPB TT,PJBSTS ;CODE TO RUN QUEUE (0).\r
QX3: POPJ PDP,\r
BQFIX=QFIX\r
EQFIX=QFIX+1B0\r
BQLINK=QLINK\r
-EQLINK=QLINE+1B0\r
+EQLINK=QLINK+1B0\r
BQJSIZ=QJSIZ\r
EQJSIZ=QJSIZ+1B0\r
\f,SCANS THE QS RETURNING THE NUMBERS OF THE JOBS IN THE QS.\r
\r
DEFINE X(A,B)\r
<INTERNAL A'AVAL,A'Q\r
-A'Q=.=AVALTB\r
+A'Q=.-AVALTB\r
A'AVAL: 0\r
>\r
\r
INTERNAL AVALTB\r
+\r
AVALTB: QUEUES ;GENERATE THE AVAL FLAGS\r
LOC=.-AVALTB\r
>\r
LOC=LOC+1\r
>\r
CODES\r
-\f;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES\r
+\r
+XP MXCODE,LOC-1 ;MAX, JOB STATE DONE\r
+PQ1=LOC\r
+LOC=LOC+1\r
+PQ2=LOC\r
+LOC=LOC+1\r
+PQ3=LOC\r
+LOC=LOC+1\r
+CMQ=LOC ;COMMAND DELAY QUEUE\r
+\f\r
+;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES\r
;USED BY SCHEDULER\r
;RUNCSS SETS JOB STATUS WORD TO NEW STATE CODE.\r
;SCHEDULER SETS UP QUEUE TRANSFER TABLE ADDRESS FROM\r
INTERNAL QBITS\r
\r
QBITS: QUEUES\r
+ CODES\r
\fIFN FTCHECK+FTMONP,<\r
DEFINE X(A,B),<\r
EXTERNAL A'RFQ\r
>>\r
IFE FTCHECK+FTMONP,<\r
\r
+\r
INTERNAL JOBQUE\r
JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT\r
\r
QWSW: TTAB BQFIX,PQ1,QQTTY ;IO WAIT SAT.(EXCEPT TTY)\r
;ENTER FRONT OF PROCESSOR QS AND GET QUANT, TIME\r
;ACCORDING TO JOB SIZE\r
-QTSW: TTAB BQFIX,PQ,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ1)\r
+QTSW: TTAB BQFIX,PQ1,QQTTY ;TTY IO WAIT SATISFIED(ENTER FRONT OF PQ11)\r
\r
QIOWW: TTAB EQFIX,IOWQ,-1 ;IOW(EXDEPT TTY) HELD IN IOWQ\r
QTIOWW: TTAB EQFIX,TIOWQ,-1 ;TTY IOW HELD IN TIOWQ\r
\r
QQSD=-1\r
\r
-QMSQ: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1\r
+QMQS: TTAB BQFIX,PQ1,QQSD ;START MON. Q(DISK) AT PQ1\r
QDAS: TTAB BQFIX,PQ1,QQSD ;DEV. ALLOC.(DISK)...\r
QDCS: TTAB BQFIX,PQ1,QQSD ;DATA CONTROL...\r
QSTS: TTAB BQFIX,PQ1,QQSD ;SYST TAPE\r
QDTS: TTAB BQFIX,PQ1,QQSD ;DEC TAPE\r
QMTS: TTAB BQFIX,PQ1,QQSD ;MAG TAPE\r
QAUS: TTAB BQFIX,PQ1,QQSD ;ALTER UFD\r
-QTIME PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q\r
+QTIME: PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q\r
;WHEN QUANT. TIME EXCEEDED AND RESET QUANT. TIME\r
\f,ENTER PROCESSOR QS ACCORDING TO JOB SIZE\r
QSTAB: XWD 4,-PQ1 ;PQ1 IF SIZE .LE. 4K\r
XWD ^D16,-PQ2 ;PQ2 IF 4K .L. SIZE .LE. 16K\r
XWD ^D256,-PQ3 ;PQ3 IF 16 .L. SIZE\r
+ Z\r
\r
,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME\r
-QQTAB: XWD -PQ1,-PQ2\r
+QTTAB: XWD -PQ1,-PQ2\r
XWD -PQ2,-PQ3\r
XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS\r
Z\r
\fIFN FTSWAP,<\r
INTERNAL ISCAN,QSCAN\r
ISCAN: ;SCAN FOR INPUT\r
- XWD -CWM,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE\r
+ XWD -CMQ,QFOR ;MONITOR COMMAND WHICH NEEDS CORE IMAGE IN CORE\r
XWD -MQQ,QFOR1 ;LOOK FOR 1ST JOBS IN SHAR. DEV QUEUES\r
XWD -DAQ,QFOR1\r
XWD -AUQ,QFOR1\r
Z\r
Z ;FINAL ZERO TO FLAG END\r
\r
-QSCAN: ;SCAN FOR OUTPUT\r
+OSCAN: ;SCAN FOR OUTPUT\r
XWD -STOPQ,QFOR ;UNRUNABLE JOBS FIRST\r
XWD -SLPQ,QFOR\r
XWD -DTQ,QBAK1 ;ANY SHAR. DEV.WAITERS MORE THAN 1 DEEP\r
Z\r
Z ;FINAL ZERO TO FLAG END\r
>\r
+\r
\fSUBTTL SWAP R. KRASIN/AF TS4.34 03 FEB 69 V406\r
\r
,SWAPPER CALLED EVERY CLOCK TIC.\r
, IF ONE--WILL LOW(HIGH) SEG FIT IN LARGEST HOLE IN CORE?\r
, YES--START INPUT AND RETURN\r
, NO--IS TOTAL FREE CORE(CORTAL) ENOUGH TO ACCOMMODATE LOW(HIGH) SEG?\r
-\r
; YES--CALL CORE SHUFFLER\r
; IS SHUFFLER WAITING FOR IO TO STOP?\r
; YES--RETURN AND DO NOTHING\r
J=ITEM\r
\r
,ALL DEVICE DEPENDENT CODE MARKED WITH A "*"\r
-\fSWAP: SKIPE SHWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP\r
+\fSWAP: SKIPE SHFWAT ;IS CORE SHUFFLER WAITING FOR IO TO STOP\r
; FOR SOME JOB?\r
PUSHJ PDP,CHKSHF ;YES, CALL CORE SHUFFLER TO SEE IF\r
; IO STOPPED YET\r
IFN FT2REL,<\r
EXTERN FINOT\r
PUSHJ PDP,FINOT ;IS THIS A HIGH SEG WHICH WAS JUST SWAPPED OUT?\r
- ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT\r
+ JRST FORCEL ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT\r
; NO, THIS WAS A LOW SEG, ALL SWAPPING FOR THIS USER\r
; IS FINISHED.\r
>\r
LDB TAC,IMGOUT\r
TLO TAC,1\r
ADDM TAC,SWPERC\r
- JRST SWAPO ;GO TRY AGAIN\r
+ JRST SWAPO ;GO TRY AGAIN\r
+\r
\r
;NO INPUT TO DD, CHECK FOR EXPANDING JOBS\r
CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND\r
; YES, FALL INTO SCNOUT WHICH WILL SWAP OUT EXPANDING\r
; JOB SINCE THERE IS ONE\r
;INPUT TO DO, CHECK TO SEE IF ANY JOBS JUST HAPPEN TO WANT TO EXPAND\r
-\r
EXTERN HIGHJB,JBTSTS,ERROR,MAXSIZ,MAXJBN,SUMCOR\r
SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND?\r
JRST SCNJOB ;NO, SCAN ALL JOBS IN PRIORITY ORDER LOOKING\r
; FOR ONE TO SWAP OUT\r
MOVE J,HIGHJB ;YES, START WITH HIGHEST JOB NUMBER ASSIGNED\r
MOVSI T,JXPN ;SETUP JOB EXPANDED BIT\r
- TDDN T,JBTSTS(J) ;IS THIS JOB EXPANDING?\r
+ TDNN T,JBTSTS(J) ;IS THIS JOB EXPANDING?\r
SOJG J,.-1 ;NO, KEEP LOOKING\r
IFN FTRCHK,<\r
- JUMPG J,SCNOK ;CLEAR XJOB SO MESSAGE WILL PRINT\r
+ JUMPG J,SCNOK\r
+ SETZM XJOB ;CLEAR XJOB SO MESSAGE WILL PRINT\r
JSP DAT,ERROR ;ERROR IF NONE FOUND\r
>\r
SCNOK: SOS XJOB ;DECREMENT COUNT OF EXPANDING JOBS\r
; PROTECT TIME IS DECREMENTED ONLY WHEN\r
; A JOB IS RUNABLE, SO LOOK AT IT\r
; ONLY IF RUN BIT STILL ON\r
- TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED?\r
+ TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? \r
; (DISPLAY, REAL TIME)?\r
JRST (TAC1) ;YES,CONTINUE SCAN TO FIND ANOTHER\r
HLRZ T,JBTADR(J) ;PICK UP SIZE OF JOB\r
- JUMPE T,(TAC1) ` ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED\r
+ JUMPE T,(TAC1) ;CONTINUE SCAN IF NOT IN CORE (HIGH SEG ALREADY SWAPPED)\r
; OUT FOR THIS USER IF NO LOW SEG)\r
ASH T,-12 ;CONVERT TO 1K BLOCKS\r
ADDI T,1\r
; 5. HIGH SEG NOT ON DISK YET\r
; 6. THIS HIGH SEG IS NOT THE SAME ONE AS JOB\r
; BEING FITTED IN IS GOING TO WANT\r
-\r
; RETURN HIGH SEG NO. IN J IF YES, OTHERWISE\r
; RETURN LOW SEG NO.\r
; IF JOB JUST HAS LOW SEG. SHF BIT IS SET IN JBTSTS\r
\r
INTERNAL FTTRACK\r
\r
-SWAPD:\r
+SWAPO:\r
IFN FTTRACK,<EXTERN LASOUT\r
MOVEM J,LASOUT ;SAVE LAST SWAP OUT FOR DEBUGGING ONLY\r
>\r
SETZM FORCE ;CLEAR FORCE FLAG\r
- HLRZ T,JBTADTR(J) ;COMPUTE CORE IMAGE\r
+ HLRZ T,JBTADR(J) ;COMPUTE CORE IMAGE\r
JUMPE T,SWP1 ;DONT OUTPUT IF 0 CORE(IMGOUT ALREADY SET TO 0\r
; WHEN CORE WAS RETURNED\r
\r
\f;COME HERE WHEN THE AMOUNT OF SPACE NEEDED ON THE DISK\r
;IS NOT AVAILABLE IN ONE CONTIGUOUS BLOCK\r
\r
- EXTERN GETFOR\r
+ EXTERN GETFCR\r
\r
FULL: HRLM DAT,AC3 ;SAVE DAT (LARGEST AVAILABLE HOLE)\r
PUSHJ PDP,FULCOR ;GET 4 FREE CORE LOCS\r
POP PDP,DAT ;RESTORE AMT GOTTEN\r
HRLM DAT,(AC3) ;SAVE AMOUNT IN TABLE\r
SUB T,DAT ;AMOUNT STILL NEEDED\r
-\r
JUMPE T,FULSET ;THROUGH IF NEED 0 K NOW\r
PUSHJ PDP,BMPAC3 ;STEP TO NEXT TABLE LOCATION\r
MOVE DAT,T ;TRY TO GET ALL WE NEED NOW IN 1 CHUNK\r
JRST OUTP2 ;GO START OUTPUT\r
\r
;HERE TO GET 4 LOCS OF FREE CORE\r
-FULCOR: PUSH PDP,ITEM ;GETFOR USES ITEM\r
- PUSHJ PDP,GETFOR ;GET 4 CELLS\r
+FULCOR: PUSH PDP,ITEM ;GETFCR USES ITEM\r
+ PUSHJ PDP,GETFCR ;GET 4 CELLS\r
JRST IPOPJ ;RETORE ITEM AND RETURN\r
\r
;STEP AC3 TO NEXT LOC OF TABLE BEING BUILT\r
\r
INTERN ZERSWP\r
\r
-ZERSWPL TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP\r
+ZERSWP: TDZA TAC,TAC ;REQUEST O SPACE ON DISK AND ALWAYS SKIP\r
CHG1: ADDM TAC1,VIRTAL ;INCREASE SIZE OF VIRTUAL CORE AVAILABLE IN SYSTEM\r
; AND THEN RETURN ALL OF DISK SPACE(CHGSWP)\r
MOVSI TAC1,SWP!SHF ;CLEAR SWAPPED OUT BIT IN JOB OR SEG\r
\r
PUSH PDP,DAT ;SAVE TTY OUTPUT BYTE POINTER(COMMAND DECODER)\r
LDB DAT,IMGOUT ;*SIZE ON DISK(1K BLOCKS)\r
-\r
JUMPE DAT,CHG3 ;DID SEG HAVE ANY DISK SPACE?\r
HLRZ TAC,JBTSWP(ITEM) ;*YES, LOGICAL DISK BLOCK+FRGSEG BIT\r
PUSHJ PDP,FXSAT ;*FREE THE DISK BLOCKS NO LONGER NEEDED\r
;ROUTINE TO FLAG JOB TO BE STOPPED AND SWAPPED OUT\r
;BECAUSE IT HAS JUST BEEN CONNECTED TO A HIGH SHARABLE SEG WHICH IS ON DISK\r
;OR ON ITW WAY IN OR OUT. THE SIZE OF THE HIGH SEG IS UNCHANGED\r
-\r
;THE JOB MUST BE STOPPED UNTIL HIGH SEG SWAPPED IN JUS AS IF JOB HAS\r
;EXPANDED HIGH SEG(MUST BE CALLED FROM UUO LEVEL FOR CURRENT JOB IF HIGH SEG)\r
;CALL: MOVE ITEM,HIGH SEG NUMBER\r
EXCH TAC,DFBUSY \r
JUMPN TAC,CPOPJ ;YES IF JUMP\r
\r
+\r
ERATRY=3 ;NO. OF TIMES TO READ AND WRITE ON ERRORS\r
\r
;START UP DEVICE WITH SWAPPING REQUEST. THIS ROUTINE\r
\fSQGO1: SETZM SQLEN ;ZERO AMOUNT TRANSFERRED SO FAR\r
MOVE TAC1,SQREQ ;*PUT IOWD INTO TAC1\r
MOVSI TAC,200000 ;*SET "SWAPPER I/O GOING" FLAG ON\r
- ORB TAC,SETA ;*\r
+ ORB TAC,SERA ;*\r
TRZN TAC,FRGSEG ;*FRAGMENTED?\r
JRST SQGO2 ;*NO, READ IN ENTIRE (OR PART) OF SEG\r
\r
ORM TAC,SERA ;INSERT NEW ADDRESS\r
JRST FRGIO1\r
\r
-\r
FRGIO2: LSH DAT,12 ;CONVERT FROM K TO WORDS\r
ADDM DAT,SQLEN ;ADD TO PREVIOUSLY TRANSFERRED AMOUNT\r
MOVNS DAT ;-N WORDS\r
SETZM SQREQ\r
JRST DINT4B\r
\r
-SWPER1; MOVSI TAC,100\r
+SWPER1: MOVSI TAC,100\r
ADDM TAC,CKSMCT\r
TRO IOS,IODTER\r
SWPERR: MOVM TAC, FINISH ;*RESET SERA IN CASE OF FRAGMENTED JOB\r
MOVE AC2,XSAT2 ;\r
LSH DAT,CONVMD ;CONVERT TO 128 WORD DISK BLOCKS\r
PUSH PDP,ITEM ;SAVE C(ITEM)\r
- \r
MOVE ITEM,DAT ;GETBIT EXPECTS PARAMETER IN ITEM\r
PUSHJ PDP,GETBIT ;FIND A HOLE BIG ENOUGH\r
JRST IPOPJ ;NONE, RESTORE ITEM AND ERROR RETURN\r
JRST IPOPJ ;RETURN, AND RESTORE ITEM\r
\r
;INITIALIZE SWAPPER DISK STORAGE TABLE\r
-\r
INTERNAL SWPINI\r
\r
SWPINI: MOVE TAC,XSAT2\r
MOVEM TAC,XSAT5\r
MOVE TAC,XSAT8\r
MOVEM TAC,XSAT6\r
- POPJ PDPD,\r
+ POPJ PDP,\r
\r
IFN FTCHECK+FTMONP,<\r
EXTERNAL SQREQ,SERA,SERACT,XSAT1,XSAT2,XSAT3,XSAT4,XSAT5,XSAT6,XSAT7\r
SERA: Z ;SIGN IS 1 IF A READ\r
; C(RH)=BLOCK NUMBER BEFORE READING.\r
; ERROR BITS AFTER READING.\r
-SELACT: 0 ;COUNT FOR ERRORS\r
+SERACT: 0 ;COUNT FOR ERRORS\r
SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR - FRAG SEG\r
\r
XSAT1: EXP XSAT3-1 ;POINTER USED BY GETBIT,CLRBIT\r
XSAT6: BLOCK 1\r
REPEAT 1,<\r
IFE E1,<X=1B0>\r
- IFN E1,<X1\r
+ IFN E1,<X=1\r
REPEAT ^D35-E1,<X=X*2>>\r
IFE E2,<Z=-1>\r
IFN E2,<Z=0\r
- X=1\r
+ Y=1\r
REPEAT ^D36-E2,<Z=Z+Y\r
Y=Y*2>\r
>>\r
HISWAP=17*BLOCKS ;LOGICAL BLOCK NUMBER OF FIRST\r
; BLOCK ON DISK\r
DIFF=HISWAP-BLOCKS-1\r
-\r
XP CONVMD,3 ;CONVERSION FROM 1K CORE BLOCKS TO 128 WORD\r
;DISC BLOCKS(SHIFT COUNT)\r
\r
\r
FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED?\r
JRST FXSAT1 ;NO. DO IN REGULAR WAY\r
-\r
-FRAGRK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3\r
+FRAGBK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3\r
FRGBK1: HRRZ TAC,(AC3) ;LOC OF NEXT DISK ADDRESS\r
HLRE DAT,(AC3) ;NUMBER OF K\r
JUMPLE DAT,FRGBK2 ;GIVE UP FREE CORE IF NOT REAL ADDRESS\r
FXSATC: PUSHJ PDP,CLRBIT ;THE "CLRBIT" SUBROUTINE IN "DSKSER" ACTUALLY DOES\r
; THE WORK OF CLEARING THE BITS.\r
JRST IPOPJ ;RESTORE ITEM AND RETURN\r
+\r
+\f\r
;ROUTINE TO RE-INITIALIZE THE SWAPPING AVAILABILITY TABLE. CALLED AT\r
; SYSTEM INITIALIZATION TIME.\r
\r
IFE FTCHECK+FTMONP,<\r
;DATA ASSOCIATED WITH THE SWPSER LOGIC FOR THE NEW PDP-10 DISK ---\r
\r
- INTERN MXK2SWP,CONVMD,BLKSPK,SWAPTAB,MAXSWP\r
+ INTERN MXK2SWP,CONVMD,BLKSPK,SWPTAB,MAXSWP\r
EXTERN K4SWAP\r
;THE ABOVE ARE REFERENCED OR INITIALIZED BY THE "ONCE" ROUTINE.\r
\r
; FOR SWAPPING (UPPER BOUND ON THE VALUE OF K4SWAP WHICH\r
; MAY BE REQUESTED AT DISK REFRESH TIME). (ONE MILLION WORDS\r
; FOR SWAPPING SEEMS LIKE A NON-RESTRICTIVE ARBITRARY LIMIT.)\r
-SWPSIZ=MXK2SWP/.^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE.\r
+SWPSIZ=MXK2SWP/^D36+1 ;SIZE OF SWPTAB ALLOCATION TABLE.\r
\r
SWPENT: XWD -SWPSIZ,SWPTAB ;THREE WORD POINTER TABLE\r
XWD 400000,0 ; REQUIRED BY THE "GETBIT" AND\r
SERA: Z ;SIGN IS 1 IF A READ\r
; C(RH)=BLOCK NUMBER BEFORE READING.\r
; ERROR BITS AFTER READING.\r
-SELACT: 0 ;COUNT FOR ERRORS\r
+SERACT: 0 ;COUNT FOR ERRORS\r
SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR FOR FRAGMENTED JOB\r
>\r
> ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK.\r