-TITLE CLKCSS - SCHEDULING ALOGRITHM FOR NON-SWAPPING SYSTEMS\r
+TITLE CLKCSS - SCHEDULING ALGORITHM FOR NON-SWAPPING SYSTEMS\r
SUBTTL T. HASTINGS/TH TS3.17 6 SEP 67 V001\r
-XP VOLKCS,001\r
+XP VCLKCS,001\r
;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
\r
\r
;CALLED WHEN CURRENT JOB IS IN EXEC MODE AND:\r
; 1. JUST STARTED TO WAIT FOR IO\r
; 2. JUST STARTED TO WAIT FOR A BUSY SHARABLE DEVICE\r
-; 3. RETURNING TO USER AFTER TYPING CONTROL C\r
-; 4. RETURNING TO USER AFTER CLOCK TRIED TO INTERRUPT\r
+; 3. RETURNING TO USER MODE AFTER TYPING CONTROL C\r
+; 4. RETURNING TO USER MODE AFTER CLOCK TRIED TO INTERRUPT\r
; CURRENT JOB WHILE IT WAS IN EXEC MODE\r
-; 5. AND ERROR OCCURRED IN CURRENT JOB\r
+; 5. AN ERROR OCCURRED IN CURRENT JOB\r
\r
;CALL: SETOM TIMEF ;IF CLOCK HAS GONE OFF SINCE LAST CALL\r
; PUSHJ PDP,NXTJOB\r
; RETURN WITH NEXT JOB TO RUN IN AC ITEM\r
\r
-;INTIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER\r
+;INITIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER\r
; DEVICES ARE INITIALIZED)\r
\r
INTERNAL NXTINI\r
;IE NO JOB WAITING OR USING DEVICE\r
AOBJN TAC,.-2 ;OTHER DEVICE INITIALIZATION\r
POPJ PDP, ;MAY CHOOSE TO SET REQUEST TO MORE\r
- ;NEG. VALUE IF MORE THEN ON JOB CAN\r
+ ;NEG. VALUE IF MORE THAN ON JOB CAN\r
;USE DEVICE AT ONCE\r
\fINTERNAL NXTJOB\r
INTERNAL FTTRPSET,FTDISK\r
XCKCSS:\r
NXTJOB: PUSHJ PDP,CHKSHF ;SHUFFLE CORE IF NEEDED\r
SETZM T\r
- SKIPN ITEM,JOB ;CURRENT JOB NO.. IS IT NULL JOB?\r
+ SKIPN ITEM,JOB ;CURRENT JOB NO., IS IT NULL JOB?\r
JRST NXT0 ;YES, DO NOT DECREMENT QUANTUM RUN TIME\r
SKIPE TIMEF ;NO, IS THIS A CLOCK INTERRUPT CALL?\r
SOSA T,JBTSTS(ITEM) ;YES, DECREMENT QUANTUM RUN TIME\r
;IN JOB STATUS WORD\r
SKIPA T,JBTSTS(ITEM) ;NO, JUST PICKUP STATUS WORD\r
- TRNE T,-1 ;REDUCE TIME TO ZERO YET?\r
+ TRNE T,-1 ;REDUCED TIME TO ZERO YET?\r
JRST NXT1 ;NO\r
HRR T,RNQUNT ;YES, RESET FOR RUN QUEUE QUANTUM\r
NXT0: SETOM RNAVAL ;FLAG TO SCAN RUN QUEUE FOR DIFFERENT JOB\r
NXT1: HRRM T,JBTSTS(ITEM) ;STORE MODIFIED QUANTUM RUN TIME\r
MOVEI Q,MAXQ ;HIGHEST PRIORITY QUEUE SCANNED FIRST\r
NXT2: SKIPN AVALTB(Q) ;SHOULD THIS QUEUE BE SCANNED FOR A RUNABLE JOB?\r
-NXT3: SOJGE Q,NXT2 ;NO, LOOK AT NEXT LOWEST PRIORITY QUEUE\r
- JUMPL Q,NXT7 ;YES, LOOKED AT QUEUES NQUEUE-1..,0?\r
+NXT3: SOJGE Q,NXT2 ;NO. LOOK AT NEXT LOWEST PRIORITY QUEUE\r
+ JUMPL Q,NXT7 ;YES, LOOKED AT QUEUES NQUEUE-1...0?\r
MOVE Q1,Q ;MOVE QUEUE INDEX TO PROPER POS.\r
ROT Q1,^D17-JWPOS ;TO MATCH JOB STATUS WORD\r
- MOVEI C,JOBMAX ;NO, SACN ALL JOBS(EXECEPT NULL JOB)\r
+ MOVEI C,JOBMAX ;NO, SCAN ALL JOBS(EXCEPT NULL JOB)\r
AOSA ITEM,JOBP(Q) ;SCAN ALL OTHER JOBS IN THIS QUEUE FIRST\r
\r
NXT4: SETOM RNAVAL ;FLAG RUN QUEUE BEING SCANNED\r
\r
-NXT5: CAIL ITEM,JOBN ;GREATER THEN HIGHEST JOB NO.?\r
+NXT5: CAIL ITEM,JOBN ;GREATER THAN HIGHEST JOB NO.?\r
MOVEI ITEM,1 ;YES, RESET TO 1(SKIP NULL JOB)\r
HLRZ T,JBTSTS(ITEM) ;IS JOB RUNABLE?\r
TRZ T,RUNMSK+CMWB ;MASK OUT JOB STATUS BITS WHICH DO NOT MATTER\r
\r
NXT7: MOVEI C,JOBN ;SCAN ALL JOBS INCLUDING POSSIBLY NULL JOB\r
MOVE ITEM,JOB ;STARTING WITH LAST JOB TO RUN\r
- SKIPN Q1,RNAVAL ;HAS RUN QUEUE(Q,Q1=7) BEEN SCANNED?\r
- AOJA Q,NXT4 ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=2)\r
+ SKIPN Q1,RNAVAL ;HAS RUN QUEUE(Q,Q1=0) BEEN SCANNED?\r
+ AOJA Q,NXT4 ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=0)\r
SETZB ITEM,RNAVAL ;YES, CLEAR FLAG, SET NULL JOB TO RUN\r
POPJ PDP, ;RETURN\r
\r
NXT8:\r
IFN FTTRPSET,<\r
EXTERNAL STOPTS\r
- MOVE T,STOPTS ;HAS A TRPSET UUO BEEN DONE FOR JOB1\r
+ MOVE T,STOPTS ;HAS A TRPSET UUO BEEN DONE FOR JOB1\r
;WITH NON ZERO AC?\r
- CAIE ITEM,1 ;IS THIS JOB 1?\r
- JUMPN T,NXT6 ;KEEP LOOKING IF NOT JOB1 AND\r
+ CAIE ITEM,1 ;IS THIS JOB 1?\r
+ JUMPN T,NXT6 ;KEEP LOOKING IF NOT JOB1 AND\r
;STOPTS FLAG SET\r
>\r
\r
ZZ=0\r
QUEUES\r
LOC=ZZ\r
->\r
\r
+>\r
IFE FTCHECK+FTMONP,<\r
;APPROPRIATE ENTRY IS NON-ZERO WHEN SCHEDULER SHOULD LOOK\r
;AT THAT QUEUE TO FIND A JOB TO RUN\r
\r
JOBP: REPEAT NQUEUE,< EXP 1>\r
\f\r
-;SHARABLE DEVICE REQUEST TABLE(GENERAL;IZED FOR OTHER QUEUES TOO)\r
+;SHARABLE DEVICE REQUEST TABLE(GENERALIZED FOR OTHER QUEUES TOO)\r
;CONTAINS THE NUMBER OF JOBS WAITING TO USE SHARABLE DEVICE\r
-;WSREG AND RNREG ARE UNUSED\r
+;WSREQ AND RNREQ ARE UNUSED\r
\r
DEFINE X(A,B)\r
< A'REQ: 0\r
\f;QUANTUM RUNNING TIME FOR EACH QUEUE IN JIFFIES(CLOCK TICKS)\r
\r
DEFINE X(A,B)\r
-< A'QUNT: EXP 2\r
+< A'QUNT: EXP B\r
INTERNAL A'QUNT\r
>\r
\r
-TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTING AND STOP ROUTINES - V412\r
-SUBTTL APRINT TH/TH/CHW TS 20 MAY 69\r
+TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTUP AND STOP ROUTINES - V412\r
+SUBTTL APRINT TH/TH/CHW TS 20 MAY 69\r
XP VCLOCK1,412\r
; PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
\r
EXTERNAL APRILM,COMMAN,CONMES,DEVCHK,DEVSRC,ERROR,INLMES\r
EXTERNAL RELEA9,CRSHWD,CRASHX\r
\r
-INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORD EITHER\r
+INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORK WITH EITHER\r
; THE OLD SCNSER OR THE NEW TTYSER.\r
\r
\r
IFE FTCHECK+FTMONP,<\r
INTERN CLOCK,DAMESS\r
EXTERN CIPWTM\r
-APRCON: 231000 ;MONITOR ENABLED CPU FLAGS\r
-APRIN1: 0 ;USER ENABLED CPU FLAGS\r
-CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT\r
-DAMESS: ASCIZ /-JAN-/\r
+APRCON: 231000 ;MONITOR ENABLED CPU FLAGS\r
+APRIN1: 0 ;USER ENABLED CPU FLAGS\r
+CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT\r
+DAMESS: ASCIZ /-JAN-/\r
CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE\r
>\r
\f INTERN APRINT\r
APRINT: JRST APRPAR ;ALWAYS CHECK APR AND PI DEVICES\r
JRST . ;CHECK OTHER DEVICES\r
\r
-APRPCL: CONO PI,240000 ;TURN OFF MEM PAR, ERR, AND\r
+APRPCL: CONO PI,240000 ;TURN OFF MEM PAR. ERR, AND\r
; ENABLE FOR MEM PAR AND TRY AGAIN\r
; (DO NOT TURN OFF POWR FAIL AS THAT PERMANENTLY\r
; DISABLES POWR FAIL INTERRUPT)\r
-APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE?\r
+APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE?\r
HALT APRPCL ;YES, HALT MACHINE, CLEAR FLAGS AND TRY AGAIN\r
; ON CONTINUE\r
CONSO APR,@APRCON ;INTERRUPT FOR APR?\r
; RH MODIFIED EACH TIME USER RUNS IN CASE HE IS\r
; ENABLED FOR PC CHANGE OR AR OVF\r
JRST APRINT+1 ;NO,CHECK OTHER DEVICES ON THIS PI CHANNEL\r
- SKIPE CRSHWD ;IS LOC, 30 CLOBBERED?\r
- JRST CRASHX ;YES ~ GO SAVE AC'S & STATE OF ALL DEVS,\r
+ SKIPE CRSHWD ;IS LOC. 30 CLOBBERED?\r
+ JRST CRASHX ;YES - GO SAVE AC'S & STATE OF ALL DEVS.\r
CONSO APR,001000 ;YES, IS IT CLOCK?\r
JRST APRER ;NO, GO CHECK ERROR FLAGS\r
AOS TIME ;YES, INCREMENT TIME OF DAY\r
EXCH TAC,APRCHL ;SAVE TAC, GET PC\r
TLNE TAC,USRMOD ;IS PC FROM USER MODE?\r
JRST APRER4 ;YES, GO TRAP TO HIM\r
- JRST APRER2 ;NO. GO CHECK IN CASE ALSO A SERIOUS ERROR\r
+ JRST APRER2 ;NO, GO CHECK IN CASE ALSO A SERIOUS ERROR\r
\f;OTHER APR INTERRUPTS BESIDES CLOCK\r
\r
APRER: EXCH TAC,APRCHL ;SAVE TAC, GET PC\r
HRRM TAC,APRCON ;PD OVF,ILM,NXM, AND CLOCK\r
HRR TAC,JOBAPR(JDAT) ;GET USER LOC TO TRAP TO\r
EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT\r
- CONO APR,440+APRCHN ;DISBALE FOV, AROVF IN CASE ON\r
+ CONO APR,440+APRCHN ;DISABLE FOV, AROVF IN CASE ON\r
;SO USER MUST REENABLE WITH SETAPR UUO\r
APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS\r
; SO INTERRUPT MAY BE DISMISSED\r
CONO APR,430110+APRCHN ;CLEAR ALL ERROR FLAGS WHICH CAN CAUSE INTERRUPTS\r
; EXCEPT CLOCK FLAG(ELSE LOSE TIME OF DAY)\r
JEN @APRCHL ;DISMISS INTERRUPT\r
-\fAPRER2: CONSO APR,NXM!ILM!POV! ;DOES EXEC CARE?\r
- JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF\r
+\fAPRER2: CONSO APR,NXM!ILM!POV ;DOES EXEC CARE?\r
+ JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF)\r
MOVEM TAC,APRPC ;STORE ERROR PC FOR CLK CHANNEL\r
CONI APR,APRERR ;STORE ERROR FLAGS\r
; (ALSO USED AS ERROR FLAG)\r
SETOM CLKFLG ;SET FLAG FOR CLK INTERRUPT\r
SETOM SCHEDF ;FLAG THAT RESCHEDULING IS NEEDED\r
- ; (EVEN THROUGH PC MAY BE IN EXEC MODE)\r
+ ; (EVEN THOUGH PC MAY BE IN EXEC MODE)\r
CONO PI,REQCLK ;REQUEST INTERRUPT IN CLK CHANNEL\r
CONSZ APR,ILM ;WAS ERROR ILLEGAL MEMORY(FROM USER)?\r
HRRI TAC,0 ;YES,CLEAR RH OF PC,SO A SECOND ILM INTERRUPT\r
- ; WILL NOT OCCUR IF THIS IS A WILD(AND A PDP-10)\r
+ ; WILL NOT OCCUR IF THIS IS A WILD PC(AND A PDP-10)\r
IFN FTHALT,<\r
CONSZ PI,003400 ;ARE ANY PI'S IN PROGRESS OF LOWER PRIORITY THAN APR?\r
; (PDP-10 BITS ONLY)\r
;THIS ROUTINE RUNS ON THE LOWEST PRIORITY PI CHANNEL AND AT UUO LEVEL\r
;TO CAUSE AN INTERRUPT ON CLK CHANNEL:\r
; SETOM CLKFLG ;FLAG THAT INTERRUPT HAS BEEN REQUESTED\r
-; CONO PI,CLKREQ ;REQUEST PI INTERRUPT ON LOWEST PI CHANNEL\r
+; CONO PI,CLKREQ ;REQUEST PI INTERUPT ON LOWEST PI CHANNEL\r
;THE FOLLOWING OTHER FLAGS MUST ALSO BE SET\r
;APRERR-APR DETECTED ERROR IN CURRENT JOB\r
-;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THROUGH PC IN EXEC MODE)\r
+;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THOUGH PC IN EXEC MODE)\r
;TIMEF-APR CLOCK HAS TICKED ON HIGH PRIORITY CHANNEL\r
;SEE APRSER AND RUNCSS TO SEE HOW THIS ROUTINE IS CALLED\r
\r
;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE\r
;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL\r
; 1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE\r
-; 2. JOB STARTS TO WAIT FOR A IO TO COMPLETE\r
+; 2. JOB STARTS TO WAIT FOR IO TO COMPLETE\r
; 3. CONTROL ABOUT TO RETURN TO USER MODE\r
-;THEN CLK SERVICE IS ENTERED AT THE UU0 LEVEL\r
+;THEN CLK SERVICE IS ENTERED AT THE UUO LEVEL\r
\r
STOR=DAT\r
T=TAC\r
; CONO PI,PIOFF\r
; IDPB AC,CLOCK ;STORE CLOCK REQUEST IN QUEUE\r
; CONO PI,PION ;TURN PI BACK ON\r
-;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS*DATA*10000\r
+;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS+DATA*10000\r
;WHERE DATA IS 6 BITS OF INFO NEEDED WHEN TIME RUNS OUT\r
;CLK SERVICE WILL PUSHJ PDP,ADR\r
;WHEN TIME RUNS OUT WITH DATA RIGHT JUSTIFIED IN AC TAC\r
MOVEI AC3,JOBDAC(JDAT) ;SAVE ACS 0-16 IN DUMP ACS\r
BLT AC3,JOBD16(JDAT) ;IN CURRENT JOB DATA AREA\r
MOVEI PDP,NULPDL ;NULL JOB PD LIST\r
- HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODE\r
+ HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODER\r
; OTHERWISE GET PD OUF\r
\r
JRST RSCHED ;GO RESCHEDULE\r
MOVEI 16,JOBDAC(17) ;SOURCE=0,DESTINATION=DUMP AC 0\r
BLT 16,JOBD15(17) ;SAVE ACS 0-15 JUST BELOW AC 16\r
MOVE TAC,CLKS17 ;NOW SAVE 17 IN JOB DATA AREA\r
- MOVEM TAC,JOBD17(17) ;ALONE WITH OTHER ACS\r
+ MOVEM TAC,JOBD17(17) ;ALONG WITH OTHER ACS\r
MOVEI PDP,NULPDL ;SET UP PUSH DOWN LIST IN NULL JOB DATA\r
; AREA IN LOWER CORE\r
HRLI PDP,MJOBP1 ;-LENGTH+1(LEAVE ROOM FOR UUO PC)\r
SKIPE TAC,APRERR ;IT THIS AN ERROR INTERRUPT?\r
- PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR, APRILM WILL CLEAR APRERR\r
+ PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR,APRILM WILL CLEAR APRERR\r
; FLAG IMMEDIATELY\r
\fEXTERNAL COMCNT,NXTJOB,HNGTIM,POTLST,LSTWRD\r
EXTERNAL TIMEF,APRERR,CLKFLG,SCHEDF,JOB,PMONTB\r
JRST INCTIM ;NO-PROCEED NORMALLY\r
AOS LSTWRD ;YES-INCREMENT LOST TIME COUNT\r
SETZM POTLST ;AND CLEAR LOST TICK INDICATION\r
-INCTIM: AOS RTIME(ITEM) ;INCR, CURRENT JOB INCREMENTAL RUN TIME\r
- AOS TTIME(ITEM) ;INCR, CURRENT JOB TOTAL RUN TIME\r
+INCTIM: AOS RTIME(ITEM) ;INCR. CURRENT JOB INCREMENTAL RUN TIME\r
+ AOS TTIME(ITEM) ;INCR. CURRENT JOB TOTAL RUN TIME\r
>\r
IFN FTKCT,<\r
EXTERN USRREL,JBTKCT\r
MOVE TAC1,TIME\r
CAMGE TAC1,MIDNIT ;GONE PAST MIDNITE?\r
JRST CIP2 ;NO\r
-CIP3: SETZB IOS,TIME ;YES, RESET TIME OF DAY\r
+CIP3: SETZB IOS,TIME ;YES. RESET TIME OF DAY\r
AOS TAC,THSDAT ;UPDATE DAY\r
IDIVI TAC,^D31\r
DIVI IOS,^D12 ;NO.\r
POP PDP, STOR\r
SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS\r
\r
-CIP5: SOSG HNGTIM ;DECREMENT HUNG ID DEVICE\r
- PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG ID DEVICES\r
+CIP5: SOSG HNGTIM ;DECREMENT HUNG IO DEVICE\r
+ PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG IO DEVICES\r
SKIPE COMCNT ;ANY COMMANDS TO PROCESS?\r
PUSHJ PDP,COMMAND ;YES, CALL COMMAND DECODER\r
CIP6: PUSHJ PDP,NXTJOB ;CALL SCHEDULER\r
SETZM CLKFLG ;CLEAR CLK INTERRUPT FLAG\r
; SET ON ALL FORCED CLK INTERRUPTS\r
- SETZM TIMEF ;CLEAR TIME0 (1 JIFFY) INTERRUPT FLAG,\r
+ SETZM TIMEF ;CLEAR TIMED (1 JIFFY) INTERRUPT FLAG.\r
SETZM SCHEDF ;CLEAR FORCED SCHEDULING FLAG\r
CAMN ITEM,JOB ;IS NEXT JOB SAME AS LAST ONE?\r
JRST CIP8 ;YES, JUST RESTORE ACS AND DISMISS\r
-\f;DIFFERENT JOB. SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED)\r
+\f;DIFFERENT JOB, SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED)\r
\r
EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA\r
\r
SKIPN JA,JOBDAT ;NULL JOB OR CORE 0 ON OLD JOB?\r
- JRST CIP7 ;YES, DO NOT SAVE SOFTWARE STATE\r
- MOVEI T,JOBPRT(JA) ;DEST,#FIRST LOC PROTECTED FROM USER\r
- HRLI T,USRPRT ;SOUR,#SYSTEM DATA STORAGE FOR CURRETN JOB\r
+ JRST CIP7 ;YES, DO NO SAVE SOFTWARE STATE\r
+ MOVEI T,JOBPRT(JA) ;DEST.=FIRST LOC PROTECTED FROM USER\r
+ HRLI T,USRPRT ;SOUR.=SYSTEM DATA STORAGE FOR CURRETN JOB\r
SKIPL T1,USRHCU ;MOVE NO. OF OLD USER IO CHAN. IN USE\r
CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT\r
; CLOBBER IF ADDRESS CHECKING MISSES)\r
MOVEI T1,0 ;MOVE ONLY CHN 0 IF NEG, OR GR 17\r
; SAVGET SETS LH NEGATIVE DURING IO AS A FLAG\r
; SINCE IT DOES IO INTO AND OUT OF\r
- ; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17),\r
+ ; CHANNEL LOCATIONS (JOBJDA+1...JOBJDA+17).\r
ADD JA,T1 ;RELOCATE TO USER AREA\r
BLT T,JOBJDA(JA) ;MOVE TO USER JOB DATA AREA\r
; STOP WITH USER CHANNEL 0-1+C(USRHCU)\r
SKIPN JA ;DOES JOB HAVE CORE ASSIGNED?\r
HALT . ;NO -ELSE CLOBBER MONITOR\r
>\r
- MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR\r
- HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT LOC. IN JB DATA AREA\r
+ MOVEI T,USRPRT ;NO, DEST.=PROTECTED AREA IN MONITOR\r
+ HRLI T,JOBPRT(JA) ;SOURCE=FIRST PROTECTED LOC. IN JB DATA AREA\r
SKIPL T1,JOBHCU(JA) ;MOVE NO. OF USER IO CHAN. IN USE\r
CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT CLOBBER\r
; IF ADRRESS CHECKING MISSES\r
MOVEI T1,0 ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17\r
- ; SAVEGET SETS NUG,DURING IO\r
+ ; SAVEGET SETS NEG.DURING IO\r
BLT T,USRJDA(T1) ;AND MOVE INTO MONITOR\r
\r
;RESTORE HARDWARE STATE OF CURRENT JOB\r
; (ON CLK PI OR HIGHER)\r
JRST CLKERR ;YES, GO PROCESS ERROR\r
SKIPN JOB ;IS THIS JOB THE NULL JOB?\r
- SKIPN NULERR ;YES, HAS AN ERROR OCCURED WHILE NULL JOB\r
+ SKIPN NULERR ;YES, HAS AN ERROR OCCURRED WHILE NULL JOB\r
; WAS RUNNING? IF YES, RESTORE ACS\r
; ILL UUO LOSED ACS\r
JEN @USRPC ;DISMISS CHANNEL(IF INTERRUPT IN PROGRESS)\r
\r
;THE NULL JOB\r
-;RUNS IN USER MODE WITH PC=1 AND COUNTS AND AC 0\r
+;RUNS IN USER MODE WITH PC=1 AND COUNTS IN AC 0\r
\r
EXTERNAL APRNUL,TIME,THSDAT,MIDNIT,NULERR\r
\r
NULJB:\r
-IFN FTCHECK,<EXTERNAL MONPRTR,MONSUM,CHECK\r
+IFN FTCHECK,<EXTERNAL MONPTR,MONSUM,CHECK\r
MOVE TAC,MONPTR\r
PUSHJ PDP,CHECK\r
CAME TAC1,MONSUM\r
; WHILE CLK IN PROGRESS\r
; CATCH THEM NEXT CLK INTERRUPT\r
MOVE 1,[AOJA 0,1] ;INSTR. TO AC1\r
- JRST 11,1 ;DISMISS IF INTERUPT IN PROGRESS.\r
+ JRST 11,1 ;DISMISS IF INTERUPT IN PROGRESS\r
\f;ROUTINE TO SET HARDWARE AND SOFTWARE RELOCATION INFORMATION FOR CURRENT USER\r
;CALLED FROM:\r
; CLOCK ROUTINE WHEN NEW USER IS DIRRERENT FROM OLD USER\r
; CALL RESET UUO\r
; CALL SETUWP UUO\r
\r
-;CALL: STORE RELOCATION AND PROTECTION FOR LOW SEQ IN JOBADR(JOB NUMBER)\r
+;CALL: STORE RELOCATION AND PROTECTION FOR LOW SEG IN JOBADR(JOB NUMBER)\r
; STORE LENGTH-1 AND ABS ORIGIN FOR HIGH SEG IN JBTADR(HIGH SEG NO)\r
; (MOVE ITEM,JOB NUMBER - IF CALLING SETRL1)\r
; PUSHJ PDP,SETREL OR SETRL1\r
SETRL1: MOVE PROG,JBTADR(ITEM) ;XWD PROTECTION,RELOCATION FOR LOW SEG\r
MOVEM PROG,JOBADR ;SAVE TO MAKE UUO HANDLER FASTER\r
HLRZM PROG,USRREL ;SAVE PROTECTION FOR ADDRESS CHECKING\r
- ; (HIGHEST LEGAL REL ADDRES FOR CURRENT USER IN LOW SET)\r
+ ; (HIGHEST LEGAL REL ADDRES FOR CURRENT USER IN LOW SEG)\r
IFN JDAT-PROG,<\r
MOVE JA,JBTDAT(ITEM) ;LOC OF JOB DATA AREA\r
MOVEM JA,JOBDAT ;SAVE IT TOO FOR UUO HANDLER\r
SKIPN PROG,JOBADR ;RESTORE PROG TO XWD PROT,RELOC FOR JUST LOW SEG\r
; (IS THERE ONE)?\r
TDZA TAC,TAC ;NO, MUST BE NULL JOB OR CORE0 OR KJOB\r
- ; SET FOR NO SPECIAL INTERRUTPS TO USER\r
+ ; SET FOR NO SPECIAL INTERRUPTS TO USER\r
MOVE TAC,JOBENB(JA) ;USER APR CONSO FLAGS (THE ONES HE WANTS TO HANDLE\r
; FALL INTO SETAPR ROUTINE\r
\r
\r
;ROUTINE TO ENABLE/DISABLE APR FOR TRAPPING TO USER AND EXEC\r
-;CALL: MOVE TAC, APR, CONSO FLAGS FOR USER TRAPPING\r
-; PUSHJ PDP,SETAPR\r
-; RETUNRN WITH APR RESET AND INTERRUPT LOCATION CONS'S SET\r
+;CALL: MOVEI TAC, APR CONSO FLAGS FOR USER TRAPPING\r
+; PUSHJ POP,SETAPR\r
+; RETURN WITH APR RESET AND INTERRUPT LOCATION CONSO'S SET\r
\r
INTERN SETAPR\r
EXTERN APRFOV\r
\r
-SETAPR: ANDI TAC,231010+APRFOV ;MASK OUT ALL BUT PD OVF, ILL MEM, NXM,\r
+SETAPR: ANDI TAC,231010+APRFOV ;MASK OUT ALL BUT PD OVF, ILL MEM, NXM,\r
; CLOCK, FOV(ONLY PDP-10), AND AROVF CONSO FLAGS\r
; FOV=PC CHANGE ON PDP-6 WHICH IS NEVER ALLOWED\r
; UNDER TIME SHARING BECAUSE IT TRAPS MONITOR TOO\r
HRLS TAC ;PRESERVE USER BITS IN LH\r
TRO TAC,231000 ;MAKE SURE MONITOR ALWAYS LOOKING FOR\r
- ; PD OVF, IL;M, NXM, CLOCK FLAGS\r
- MOVE TAC1,TAC ;DUPLICATE BITS IN TAC1 FOR CONO TO APR\r
+ ; PD OVF, ILM, NXM, CLOCK FLAGS\r
+ MOVE TAC1,TAC ;DUPLICATE BITS IN TAC1 FOR CONO TO APR.\r
XORI TAC1,110 ;COMPLEMENT FOV(PDP-10 ONLY) AND AROV FLAGS\r
ADDI TAC1, 330 ;SET DISABLE OR ENABLE FOR EACH\r
ANDI TAC1,660 ;MASK OUT ALL BUT DISABLE/ENABLE\r
; FOV(PDP-10 ONLY) AND AR OVF SEPARATELY\r
CONO PI,PION ;ENABLE PI'S AGAIN\r
POPJ PDP,\r
-\fSUBTTL RUNCSS - RUN CONTROL(STATRING AND STOPPING OF JOBS)\r
+\fSUBTTL RUNCSS - RUN CONTROL(STARTING AND STOPPING OF JOBS)\r
\r
;RUN CONTROL IS A COLLECTION OF ROUTINES WHICH\r
;SET AND CLEAR BITS IN THE JOB STATUS WORDS OF\r
;COMMON ERROR STOPPING ROUTINES\r
;CALLED AT ANY LEVEL(UUO,CLK, OR INTERRUPT)\r
;CALL: MOVE ITEM,JOB CAUSING ERROR OR BEING STOPPED\r
-; MOVE DEVDAT,ADDRESS OF THAT JOB TTYP DEVICE DATA BLOCK\r
-; MOVE DAT,BYTE POINTER TO LAST CHAR, ALEADY MOVED\r
-; :TO TTY OUTPUT BUFFER\r
+; MOVE DEVDAT,ADRRESS OF THAT JOB TTY DEVICE DATA BLOCK\r
+; MOVE DAT,BYTE POINTER TO LAST CHAR. ALREADY MOVED\r
+; ;TO TTY OUTPUT BUFFER\r
; PUSHJ PDP,KSTOP,PHOLD,HOLD,OR ESTOP\r
; NEVER RETURN IF CALLED AT UUO LEVEL\r
\r
-;ROUTINE TO STOP JONB AFTER KJOB COMMAND\r
+;ROUTINE TO STOP JOB AFTER KJOB COMMAND\r
;CALLED AT UUO LEVEL IF JOB HAD CORE,CLK LEVEL IF NOT\r
\r
INTERNAL KSTOP\r
; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT\r
; HIGHEST AND SET HIGHJB\r
CAMGE ITEM,HIGHJB ;IS THIS THE BIGGEST JOB NUMBER ASSIGNED?\r
- JRST ESTOP ;NO, LEAVE HOLD\r
- MOVSI TAC1,JNA ;YES,JOB NUMBER ASSGINED BIT\r
+ JRST ESTOP ;NO, LEAVE HOLE\r
+ MOVSI TAC1,JNA ;YES,JOB NUMBER ASSIGNED BIT\r
HRRZ TAC,ITEM ;SCAN DOWNWARD\r
TDNN TAC1,JBTSTS(TAC) ;IS JNA BIT SET FOR THIS JOB?\r
SOJG TAC,.-1 ;NO,KEEP LOOKING,FINISHED(TRUE IF THIS THE ONLY JOB\r
MOVEM TAC,HIGHJB ;YES,STORE NEW HIGHEST JOB NUMBER ASSIGNED\r
JRST ESTOP ;GO SET ERROR BIT\r
\f;ROUTINE TO STOP JOB, SET ERROR BIT AND PRINT MESSAGE\r
-;THEM ADD ^TC<CRLF><CRLF><PERIOD>\r
+;THEN ADD ^C<CRLF><CRLF><PERIOD>\r
;CALL: MOVEI TAC,ADR. OF MESSAGE\r
; PUSHJ PDP,PHOLD\r
\r
\r
PHOLD: PUSHJ PDP,CONMES ;MOVE MESSAGE TO TTY OUTPUT BUFFER\r
; FALL INTO HOLD\r
-;ROUTINE TO STOP JOB, SET ERROR BIT.\r
+;ROUTINE TO STOP JOB, SET ERROR BIT,\r
;AND ADD "^C<CRLF><CRLF><PERIOD>\r
\r
INTERNAL HOLD,HOLD1\r
./\r
\r
HOLD1: PUSHJ PDP,TTYSTC ;MAKE SURE TTY STAYS IN MONITOR MODE\r
- ; AND START TTYP TYPING OUTMESSAGE\r
+ ; AND START TTY TYPING OUT MESSAGE\r
; FALL INTO ESTOP\r
\f\r
;ROUTINE TO STOP USER AND FLAG AS ERROR STOP\r
\r
ESTOP: JUMPE ITEM,CPOPJ ;IS THIS ERROR IN JOB 0?\r
MOVSI TAC,JACCT ;NO, CLEAR ACCOUNTING BIT(IN CASE LOGGING\r
- ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT0 SO USER CAN USE CONTROL C\r
+ ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT) SO USER CAN USE CONTROL C\r
; TO RECOVER\r
-ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD\r
+ESTOP1: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS WORD\r
IORM TAC,JBTSTS(ITEM) ;SO JOB CAN NOT CONTINUE(CONT COM.)\r
CAME ITEM,STUSER ;SYSTEM TAPE USER?\r
JRST STOP1 ;NO\r
PUSHJ PDP,DEVSRC ;SYSTEM ERROR IF NOT FOUND\r
JSP DAT,ERROR\r
PUSHJ PDP,RELEA9 ;YES, RELEASE SYSTEM TAPE WITHOUT WAITING\r
-\f;ROUTINE TO STOP NY JOB FROM BEING SCHEDULED\r
+\f;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED\r
;CALL:\r
; MOVE ITEM, JOB NUMBER\r
; PUSHJ PDP, STOP1\r
; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER\r
;PRIORITY PI CHANNEL THAN CLK(LOWEST), OTHERWISE WHEN JOB IS RUNABLE\r
;CALLED FROM COMMAND DECODER WHEN <CONTROL>C TYPED IN BY USER\r
-;OR ON ANY ERROR MESSAGE(SFE PREVIOUS PAGE)\r
+;OR ON ANY ERROR MESSAGE(SEE PREVIOUS PAGE)\r
\r
INTERNAL STOP1\r
EXTERNAL JBTSTS,PJBSTS,REQTAB,JOB,STUSER,MAXQ,AVALTB\r
\r
-STOP1: MOVSI TAC,RUN \r
- CONO PI,PIOFF ;DONE AT INTERRUPT LEVEL HIGHER THEN DT LEVEL\r
- CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYTEM TAPE?\r
+STOP1: MOVSI TAC, RUN\r
+ CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT LEVEL\r
+ CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYSTEM TAPE?\r
TDNN TAC,JBTSTS(ITEM) ;NO, IS RUN BIT OFF IN JOB STATUS WORD\r
JRST STOP1A ;YES\r
ANDCAM TAC,JBTSTS(ITEM) ;NO, SO CLEAR IT\r
- CONO PI,PION\r
+ CONO PI, PION\r
LDB TAC,PJBSTS ;GET JOB WAIT QUEUE CODE(IF ANY)\r
CAIG TAC,MAXQ ;DOES STATE HAVE Q ?\r
SOSL REQTAB(TAC) ;YES. REDUCE IT.\r
JRST STOP1A ;NO\r
SOSGE AVALTB(TAC) ;YES REDUCE COUNT\r
SETZM AVALTB(TAC) ;CLEAR AVAL FLAG IF NO ONE WAITING\r
-STOP1A: CONO PI,PION ;MAKE SURE PI ON\r
- CAME ITEM, JOB ;NO. IS THIS JONB CURRENT USER\r
+STOP1A: CONO PI, PION ;MAKE SURE PI ON\r
+ CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER\r
\r
INTERNAL FTSWAP\r
\r
>\r
\r
SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF?\r
- TLNN TAC,JERR ;YES, ERROR FLAG ON?\r
+ TLNN TAC,JERR ;YES. ERROR FLAG ON?\r
JRST STOP2 ;NO\r
SETOM SCHEDF ;YES, FORCE RESCHEDULING EVEN IF JOB IN EXEC MODE\r
JRST STOP2 ;YES, MAKE CLK RESCHEDULE ANOTHER JOB\r
;SETS UP ITEM, WITH JOB NO.; PROG WITH RELOCATION, AND PDP\r
;WITH PUSH DOWN LIST ADR. IN JOB DATA AREA\r
;USED BY KJOB,CORE 0,SAVE,GET,RUN,R,REASSIGN AND FINISH COMMANDS\r
-;CALL: MOVEI TAC1,MONITOR JOB START ADDRESS\r
+;CALL: MOVEI TAC1,MONITOR JOB STOP ADDRESS\r
; JSP TAC,MONSTR\r
; RETURN WITH ACS PDP,PROG,JDAT, AND ITEM SETUP\r
\r
MONSTR: MOVE ITEM,JOB ;CURRENT JOB NUMBER\r
MOVE JDAT,JBTDAT(ITEM) ;ADR. OF JOB DATA AREA\r
IFN JDAT-PROG,<\r
- MOVE PROG,JBTADDR(ITEM) ;JOB RELOCATION\r
+ MOVE PROG,JBTADR(ITEM) ;JOB RELOCATION\r
>\r
MOVSI PDP,MJOBPD ;MINUS LENGTH OF SYSTEM PD LIST\r
HRRI PDP,JOBPDL(JDAT) ;FIRST LOC.-1 OF PD LIST\r
- PUSH PDP,TAC1 ;SAVE STOP ADDRESS\r
+ PUSH PDP,TAC1 ;SAVE STOP ADRRESS\r
JRST (TAC) ;RETURN AND DO MONITOR JOB\r
- ; WITH TT DDB,OUTPUT BYTE POINTER, AND JOB NO.\r
+ ; WITH TTY DDB,OUTPUT BYTE POINTER, AND JOB NO.\r
\f;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN\r
;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS\r
;CALLED ONLY WHEN JOB IN CORE AND AFTER JOB HAS BEEN\r
USTART: MOVE TAC,JOBPC(JDAT) ;GET OLD PC\r
TLNE TAC,USRMOD ;IS IT IN USER MODE TOO?\r
JRST USTRT1 ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS\r
- MOVEI TAC,JOBDAC(JDAT) ;NO. MOVE USERS(UUO) ACS TO DUMP ACS\r
- HRL TAC,JDAT ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA\r
+ MOVEI TAC,JOBDAC(JDAT) ;NO, MOVE USERS(UUO) ACS TO DUMP ACS\r
+ HRL TAC,JDAT ;SOURCE=REL. 0,DEST.=JOBDAC IN JOB DATA AREA\r
BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS\r
MOVE TAC,JOBPD1(JDAT) ;UUO PC HAS LAST PC\r
HRRI TAC,-1(TAC) ;SUBTRACT 1 FROM RIGHT HALF AND\r
- ; PRESERVE LH PC FLAGS\r
+ ; PRESERVE LH PC FLAGS.\r
; (RH=0 ON HALT 0 OR FIRST START)\r
USTRT1: MOVEM TAC,JOBOPC(JDAT) ;STORE OLD PC FOR USER TO LOOK AT\r
HLL TAC1,TAC ;PRESERVE USER APR FLAGS\r
TLO TAC1,USRMOD ;MAKE SURE NEW PC IN USER MODE\r
TLZ TAC1,37 ;MAKE SURE NO INDIRECT BITS OR INDEX FIELD\r
- \r
+\r
MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC\r
MOVSI TAC,JERR+WTMASK\r
ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS\r
- JRST TTYSET ;SET TTY STATE TO INITAL COND.\r
+ JRST TTYSET ;SET TTY STATE TO INITIAL COND.\r
; TTYUSR OR TTYURC SHOULD BE CALLED\r
; TO INDICATE WHETHER TTY TO USER OR EXEC MODE\r
; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN\r
\r
;ROUTINE TO SET JOB STATUS RUN BIT(RUN)\r
;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND\r
-;RESPONSE FINISHES, THIS ACTION IS ENABLED BY CALLING\r
-;TTYUSR. OR TTYURC IN SCNSER\r
-;CALL: MOVE ITEM,JOB NUMBER\r
+;RESPONSE FINISHES. THIS ACTION IS ENABLED BY CALLING\r
+;TTYUSR, OR TTYURC IN SCNSER\r
+;CALL: MOVE ITEM,JOB NUMBER\r
; PUSHJ PDP,SETRUN\r
\r
INTERNAL SETRUN\r
JRST SETR1 ;OTHERS WAITING?\r
AOSG AVALTB(TAC) ;MAKE AVAILABLE\r
SETOM AVALTB(TAC) ;FLAG AS JUST AVAILABLE, BECAUSE\r
- ; NO JONB WAS USING DEVICE. SCHEDULER\r
+ ; NO JOB WAS USING DEVICE. SCHEDULER\r
; WILL SCAN THIS QUEUE\r
SETR1: MOVSI TAC,RUN ;SET RUN BIT IN JOB STATUS WORD\r
IORM TAC,JBTSTS(ITEM) \r
\r
REQUE: MOVSI TAC,JRQ ;MARK JOB TO BE REQUEUED WITH JRQ BIT\r
TDNN TAC,JBTSTS(ITEM) ;INCREMENT COUNT ONLY ONCE FOR EACH JOB\r
- AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REUEUED\r
-\r
+ AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REQUEUED\r
IORM TAC,JBTSTS(ITEM) ;SET REQUE BIT FOR SCHEDULER\r
POPJ PDP,\r
\r
ANDCAM TAC,JBTSTS(ITEM) ;SO IT CAN PUT ANOTHER ONE IN\r
LDB TAC,PJBSTS ;GET QUEUE CODE\r
CAIE TAC,SLPQ ;IS JOB STILL SLEEPING?\r
- POPJ PDP, ;NO, RETURN TO CLOCK ROUTINE\r
+ POPJ PDP, ;NO. RETURN TO CLOCK ROUTINE\r
DPB TAC1,PJBSTS ;YES, STORE RUN QUEUE CODE\r
- ; (CONTROL C, START CAN GET JOB OUT SLEEP)\r
+ ; (CONTROL C, START CAN GET JOB OUT OF SLEEP)\r
JRST SETR2\r
>\r
\f;ROUTINE TO GET DATA CONTROL AND ANOTHER SHARABLE DEVICE\r
SOSL REQTAB(AC1) ;REDUCE REQ. COUNT FOR OTHER\r
; SHARABLE DEVICE.\r
SETOM AVALTB(AC1) ;SET AVAILABLE IF OTHER JOBS WAITING\r
- JFCL DCREQ ;ARGUMENT FOR DCQAIT\r
+ JFCL DCREQ ;ARGUMENT FOR DCWAIT\r
PUSHJ PDP,DCWAIT ;WAIT FOR DATA CONTROL FREE\r
MOVE AC1,@(PDP) ;INCREMENT REQ. COUNT\r
AOSN @AC1 ;NOW IS SHARABLE DEVICE FREE?\r
\r
MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT:\r
DVWAIT: MOVE AC1,(PDP) ;GET ADR. OF CALLER\r
- MOVE AC1,-2(AC1) ;GEET AOSLE XXREQ INSTRUCTION\r
+ MOVE AC1,-2(AC1) ;GET AOSLE XXREQ INSTRUCTION\r
JRST .+2\r
DVWAT1: MOVE AC1,@-1(PDP) ;GET ADR. OF CALLER OF THIS ROUTINE\r
SUBI AC1,REQTAB ;COMPUTE WAIT-STATE QUEUE CODE\r
; WORD WAIT QUEUE CODE\r
\f;ROUTINE TO SET JOB TO RUN AFTER IT HAS BEEN STOPPED\r
;BECAUSE IT HAD TO WAIT FOR IO TO COMPLETE FOR SOME DEVICE\r
-;EACH SERVICE ROUTINE WILL AT INTERRUPT LEVEL\r
-;CHECK EACH TIME IT FINISHED A TASK(RUNFFERFUL)\r
+;EACH SERVICE ROUTINE AT INTERRUPT LEVEL\r
+;CHECK EACH TIME IT FINISHED A TASK(BUFFERFUL)\r
;TO SEE IF THE JOB USING THE DEVICE HAS\r
;PREVIOUSLY CAUGHT UP WITH DEVICE AND HAS BEEN STOPPED\r
-;CALL: MOVE DEVDAT,ADR, OF DEVICE DATA BLOCK\r
+;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK\r
; MOVE IOS,DEVIOS(DEVDAT) ;GET DEVICE IO STATUS WORD FROM DDB\r
-; TLZE IOS,IOW ;IS JOB AN IO WAIT FOR THIS DEVICE?\r
+; TLZE IOS,IOW ;IS JOB IN AN IO WAIT FOR THIS DEVICE?\r
; PUSHJ PDP,SETIOD ;YES, GO FLAG JOB TO START UP AGAIN\r
; RETURN\r
-;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD,\r
+;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD.\r
;THE SCHEDULER THEN SEES THAT THIS JOB HAS ITS\r
;IO WAIT SATISFIED AND IS WAITING TO BE RUN AGAIN\r
\r
PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS ;BYTE POINTER TO JOB STATUS\r
; WORD QUEUE CODE\r
\r
-STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE\r
+STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE\r
AOS TSAVAL\r
- JRST SETIO1\r
+ JRST SETID1\r
SETIOD: MOVEI TAC1,WSQ ;REQUE TO WAIT SATISFIED Q\r
- AOS WSAVAL ;INCR, NO, OF JOBS WITH IO WAIT\r
- ; SATISFIED, NON-ZERO WSAVAL WILL\r
- ; CAUSE SCHED, TO SCAN FOR IO\r
+ AOS WSAVAL ;INCR. NO. OF JOBS WITH IO WAIT\r
+ ; SATISFIED. NON-ZERO WSAVAL WILL\r
+ ; CAUSE SCHED. TO SCAN FOR IO\r
; SATISFIED JOB.\r
-SETIO1: LDB TAC,PJOBN\r
+SETID1: LDB TAC,PJOBN\r
DPB TAC1,PJBS2 ;IN JOB STATUS WORD\r
\r
INTERNAL FTSWAP\r
IORM TAC1,JBTSTS(TAC) ;SET REQUEUEING BIT FOR SCHEDULER\r
>\r
NULTST: SKIPE JOB ;IS NULL JOB RUNNING?\r
- POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPED TO\r
-\f;ROUTINE TO CAUSE CLK TO ROUTINE TO RESCHEDULE\r
+ POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPPED TO\r
+\f;ROUTINE TO CAUSE CLK ROUTINE TO RESCHEDULE\r
;CALLED AT ANY LEVEL\r
;CALL: PUSHJ PDP,STOP2\r
; RETURN IMMEDIATELY EXCEPT IF AT UUO LEVEL\r
\r
STOP2: CONO PI,PIOFF ;PREVENT CLOCK INTERRUPT DURING STOP2 CODE\r
SETOM CLKFLG ;SET FLAG TO INDICATE CLK INTERRUPT\r
- ; EVEN THOUGH CLK INTERRUTP IS NOT A ATIME INTERRUPT\r
- CONO PI,PICLK ;TURN PI BACK ON AND REQUESST INTERRUPT TO\r
+ ; EVEN THOUGH CLK INTERRUPT IS NOT A TIME INTERRUPT\r
+ CONO PI,PICLK ;TURN PI BACK ON AND REQUEST INTERRUPT TO\r
; CLK PI CHANNEL(LOWEST PRIORITY CHANNEL)\r
POPJ PDP, ;INTERRUPT IMMEDIATELY IF AT UUO LEVEL\r
-\f;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INCTIVE\r
+\f;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INACTIVE\r
,CALLING SEQUENCE\r
, PUSHJ PDP, WAIT1\r
-, EXIT ALWAYS RETURN HERE\r
+, EXIT ALWAYS RETURNS HERE\r
\r
-,IF DEVICE IS INACTIVBE (IOACT=0), RETURNS TO EXIT, OTHERWISE, SETS\r
-,IOW:=1 AND ENTERS WAIT UNLESS IOCT BECOMES ZERO BEFORE THE\r
-,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT,\r
-,ON LEAVING THE WIAT STATE, RETURNS TO EXIT.\r
+,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE. SETS\r
+,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE\r
+,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT.\r
+,ON LEAVING THE WAIT STATE, RETURNS TO EXIT.\r
,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING\r
,CALLING SEQUENCE\r
, PUSHJ PDP, WSYNC\r
, EXIT ALWAYS RETURNS HERE\r
-,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0\r
+,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0.\r
\r
INTERNAL WAIT1\r
\r
JRST WAIT1\r
\f\r
;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE\r
-;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE\r
+;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED\r
;CALLED ONLY FROM UUO LEVEL\r
;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK\r
; PUSHJ PDP,WSYNC\r
; WITH ACS 0-14 OCTAL RESTORED\r
; RETURN WHEN IO-WAIT FINISHED\r
WSYNC1: CONO PI, PION\r
- ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT\r
+ ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT\r
POPJ PDP,\r
\r
\r
XP VCOMMN,437\r
;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP\r
\r
-REPEAT 0, <\r
+REPEAT 0,<\r
\r
;THE COMMON SUBPROGRAM CONSISTS OF 3 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM:\r
- 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINITIONS ASSEMBLED WITH\r
- EVERY MONITOR SUBPROGRAM\r
- 2. CONFIG.MAC - THE CONFIGURATION DEFINITION FILE GENERATED BY THE\r
- CONFIGURATION PROGRAM (MONGEN) OR BY AN EDITOR (SEE ABOVE)\r
- 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME SOURCE FOR\r
- ALL CONFIGURATIONS. HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY\r
- SYMBOLS AND MACROS DEFINED IN 2.\r
- THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED BELOW:\r
-\r
- A. MONITOR STARTUP LOCATIONS (140-147), HENCE LOAD THIS FIRST.\r
- B. JOB TABLES - LENGTH DEPENDENT ON MAXIMUM NUMBER OF JOBS ALLOWED\r
+ 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINTIONS ASSEMBLED WITH EVERY MONITOR SUBPROGRAM\r
+ 2. CONFIG.MAC - THE CONFIGURATION DEFINTION FILE GENERATED BY THE\r
+ CONFIGURATION CONFIG PROGRAM OR BY AND EDITOR(SEE ABOVE)\r
+ 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME\r
+ SOURCE FOR ALL CONFIGURATIONS.\r
+ HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY MACROS DEFINED IN 2.\r
+ THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED:\r
+\r
+ A. MONITOR STARTUP LOCATIONS(140-147), HENCE LOAD THIS FIRST.\r
+ B. JOB TABLES - LENGTH DEPENDENT ON MAX. NO. OF JOBS ALLOWED\r
C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE\r
D. COMMON SUBROUTINE RETURNS\r
E. COMMON BYTE POINTERS\r
\r
IFNDEF LISTSN, <LISTSN==1> ;FORCE S.MAC TO BE LISTED WITH COMMON FILE ONLY\r
;UNLESS 'LISTSN' DEFINED TO BE 0 WITH MONGEN\r
-IFNDEF APRSN,<APRSN==0> ;SERIAL NUMBER OF APR\r
+IFNDEF APRSN,<APRSN==0> ;SERIAL NUMBER OF APR\r
\r
;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)\r
INTERN STDENS ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY)\r
\r
- IFNDEF STDENS, <STDENS==2> ;STAND. == BINARY AT 556 BPI\r
+ IFNDEF STDENS,<STDENS==2> ;STAND.== BINARY AT 556 BPI\r
;STDENS==D+P WHERE D AND P ARE:\r
- ;D==1(200 BPI);D== (556 BPI);D==3(800 BPI)\r
- ;P==0(ODD-BINARY PARITY);P=4(EVEN-BCD PARITY)\r
+ ;D==1(200 BPI);D==2(556 BPI);D==3(800 BPI)\r
+ ;P==0(ODD-BINARY PARITY);P==4(EVEN-BCD PARITY)\r
INTERN JIFSEC ;NO. OF CLOCK TICKS(JIFFIES) PER SECOND\r
IFNDEF JIFSEC,<JIFSEC==^D60> ;STAND.==60 JIFFIES PER SEC.\r
XP HNGSEC,2*JIFSEC\r
INTERN DTTRY ;NO. OF TIMES TO TRY ON DECTAPE ERRORS\r
IFNDEF DTTRY,<DTTRY==4> ;STAND.==4 TRIES\r
\r
- INTERN MTSIZ ;SIZE OF MAGTAPE RECORDS(DATA WORDS IN BUFFER+1)\r
+ INTERN MTSIZ ;SIZE OF MAGTPAE RECORDS(DATA WORDS IN BUFFER+1)\r
IFNDEF MTSIZ,<MTSIZ==^D128> ;STAND.==128 WORDS PER BUFFER\r
\r
INTERN LPTSIZ ;SIZE OF LPT BUFFER(NO. OF DATA WORDS+2)\r
IFNDEF LPTSIZ,<LPTSIZ==^D24+2> ;STAND.==24 WORDS PER LPT BUFFER\r
\r
- INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCKS SEARCHED BEFORE\r
- ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL.\r
+ INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCK SEARCHED BEFORE\r
+ ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL\r
IFNDEF BLKQNT,<BLKQNT==^D50> ;STAND.==50 DT BLOCKS SEARCHED(3 SECS.)\r
\r
- INTERN NSPMEM ;NO OF NANO-SECONDS PER MEMORY CYCLE\r
- IFNDEF NSPMEM,<NSPMEM==^01760> ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE\r
-INTERNAL JIFSC2,JIFMIN,WDPJIF\r
+ INTERN NSPMEM ;NO. OF NANO-SECONDS PER MEMORY CYCLE\r
+ IFNDEF NSPMEM,<NSPMEM==^D1760> ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE\r
+\r
+INTERN JIFSC2,JIFMIN,WDPJIF\r
JIFSC2==JIFSEC/2 ;HALF NO. OF JIFFIES IN A SEC (FOR ROUNDING)\r
- JIFMIN==JIFSEC*^D60 ;NO., OF JIFFIES PER MINUTE\r
- WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED\r
- IFNDEF MINCOR,<MINCOR==^D54*JOBN> ;DISK DDB AND ACCESS ENTRY\r
- ; ALLOCATION REQUIRMENTS IN FREE CORE\r
+ JIFMIN==JIFSEC*^D60 ;NO. OF JIFFIES PER MINUTE\r
+ WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED\r
+ IFNDEF MINCOR,<MINCOR==^D54*JOBN> ;DISK DDB AND ACCESS ENTRY\r
+ ; ALLOCATION REQUIREMENTS IN FREE CORE\r
;USED TO EXPAND SIZE OF MONITOR AT ONCE ONLY TIME\r
\r
;32 WORDS/DDB AND 4 WORDS/ACCESS ENTRY = 36 WORDS\r
- ;ASSUME 1.5 OPEN FILE/JOB\r
+ ;ASSUME 1.5 OPEN FILES/JOB\r
\r
\r
INTERN LOGSIZ\r
\f;SYSTEM INITIALIZATION DISPATCH TABLE, STARTING AT LOCATION 140\r
;THIS SUBROUTINE MUST BE LOADED FIRST\r
;ROUTINE "ONCE" IS ONCE ONLY CODE. IT CONVERTS THE DATE\r
-;AND SETS UP I/O SERVICE CHAIN,\r
+;AND SETS UP IO SERVICE CHAIN,\r
\r
EXTERN SYSINI,SYSMAK,NULJOB,ONCE,JSR2\r
INTERN SYSDSP,SYSDDT\r
\r
SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY\r
SYSDDT:\r
-IFG DDTN, < ;IF EXEC DDT IS LOADED.....\r
+IFG DDTN,< ;EXEC DDT TO BE LOADED?\r
EXTERN PATSYM\r
JRST PATSYM ;YES, EXEC DDT(PATCH SYMBOL TABLE POINTER FIRST)\r
\r
>\r
- IFE DDTN, <\r
- HALT . ;NO. EXEC DDT\r
+IFE DDTN,<\r
+ HALT . ;NO, EXEC DDT\r
>\r
JRST SYSMAK ;MAKE NEW SYSTEM\r
JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS\r
INTERN SYSSNP,FORTY,NULDAT,SIXTY,NULPDL,ERRPDL,KT10A,RCXIOC,RCXCCW,DDTSYM\r
INTERN T30SYM,RAXIOC,RAXCCW,CRSHWD\r
\r
- RAXIOC=26 ;XWD 0,ADDRESS FOR RA-10'S DATA CHANNEL\r
+ RAXIOC=26 ;XWD 0,ADDRESS FOR RA10 DATA CHANNEL\r
; MUST BE EVEN AND .LT. 777\r
RAXCCW=RAXIOC+1 ;XWD CONTROL WORD ADDRESS,DATA ADDRESS\r
; STORED ON CHANNEL TERMINATION\r
- CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS \r
+ CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS \r
;ACCIDENTALLY OR PURPOSEFULLY OVERWRITTEN\r
;THE MONITOR WILL ATTEMPT TO SAVE THE \r
- ;AC'S AND THE STATE OF ALL DEVICES,\r
+ ;AC'S AND THE STATE OF ALL DEVICES.\r
;[A LA 147 RESTART]\r
KT10A=33 ;COPY OF CONTENTS OF RELOCATION AND PROTECTION\r
- ; DONE BY DATAO APR \r
+ ; DONE BY DTATO APR \r
; NEEDED BECAUSE KT10A MOD DOES NOT COME WITH\r
; LIGHTS FOR 2ND REG.\r
RCXIOC=34 ;INITIAL CONTROL WORD FOR DATA CHANNEL\r
- ; (TRANSFERS CHANNEL TO SEQUENCE OF IOWD'S IN DSKINT)\r
+ ; (TRANSFERS CHANNE TO SEQUENCE OF IOWD'S IN DSKINT)\r
; MUST BE IN EVEN LOC IN FIRST 1K OF MEMORY\r
RCXCCW=RCXIOC+1 ;CHANNEL STORES FINAL CONTROL WORD\r
; HERE ON TERMINATION\r
SYSSNP=37 ;WHEN DEPOSITED NON-ZERO,PRINTS SNAP SHOT OF SYSTEM\r
; ON LPT SEE LPSNAP SUBPROGRAM\r
- DDTSYM=36 ;CONTAINS ADDRESS OF POINTER TO EXEC DDT SYMBOL TABLE\r
+ DDTSYM=36 ;CONTAINS ADR. OF POINTER TO EXEC DDT SYMBOL TABLE\r
FORTY=40 ;PLACE WHERE UUOS ARE STORED ON TRAP\r
- NULDAT=42 ;JOB DATA AREA FOR NULL JOB (USES EXEC\r
- ; 62 THRU 101 20-36 FOR DUMP AC)\r
+ NULDAT=42 ;JOB DATA AREA FOR NULL JOB(USES EXEC\r
+ ; 62 THRU 101 20-36 FOR DUMP ACS)\r
; AND ABOVE FOR PUSHDOWN LIST\r
- SIXTY=60 ;PLACE WHERE UNIMPLEMENTED INSTR. ARE STORED ON \r
- ; TRAP (PDP-10 ONLY)\r
+ SIXTY=60 ;PLACE WHERE UNIMPLEMETNED INSTR. ARE STORED ON \r
+ ; TRAP(PDP-10 ONLY)\r
NULPDL=101 ;PUSH DOWN LIST FOR NULL JOB\r
; USES EXEC LOCS 102 THRU 137\r
- ; USED FOR RE-SCHEDULING WHEN CURRENT JOB\r
+ ; USED FOR RESCHEDULING WHEN CURRENT JOB\r
; GOES INTO IO WAIT\r
ERRPDL=120 ;PUSH DOWN LIST FOR ERROR IN NULL JOB\r
T30SYM=131 ;PLACE IN 10/30 JOB DATA AREA WHERE SYMBOL TABLE\r
; POINTER IS STORED BY REGULAR 10/30 LOADER\r
; (MOVED TO DDTSYM BY ONCE)\r
\f;PROTECTED JOB DATA STORAGE AND OTHER LOCATIONS SET EACH TIME\r
-;A NEW JOB IS RUN (SEE APRSER-CLKINT)\r
-\r
+;A NEW JOB IS RUN(SEE APRSER-CLKINT)\r
INTERN SYSBEG,SYSBG1,SYSEND\r
\r
-SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART (SEE SYSINI)\r
+SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART(SEE SYSINI)\r
XP SYSBG1,SYSBEG+1\r
\r
INTERN JOB,JOBADR,JOBDAT,USRREL,USRSAV\r
;SAME AS JBTADR(JOB) AND AC PROG\r
USRREL: 0 ;LH==0, RH CONTAINS CONTENTS OF PROTECTION REGISTER\r
;LOW ORDER BITS==1777, IE THIS IS HIGHEST REL. LOC\r
- ;IN CURRENT USER AREA (USED FOR ADDRESS CHECKING)\r
-USRSAV: 0 ;TEMPORARY FOR UUO HANDLER (IMPURE ROUTINE!)\r
+ ;IN CURRENT USER AREA(USED FOR ADDRESS CHECKING)\r
+USRSAV: 0 ;TEMPORARY FOR UUO HANDLER(IMPURE ROUTINE!)\r
\r
;LOCATIONS COPIED FROM JOB DATA AREA INTO MONITOR WHEN A JOB RUNS\r
;THIS PREVENTS THE USER FROM CLOBBERING THEM AND MAKES IT\r
\r
INTERN USRPRT,USRPR1,USRPC,USRDDT,USRHCU,USRSAV,USRJDA,USRLO,USRLO1,USRHI\r
\r
-USRPRT: ;FIRST LOCATION OF PROTECTED JOB DATA\r
- USRPR1==USRPRT+1 ;FIRST LOCATION+1\r
+USRPRT: ;FIRST LOC. OF PROTECTED JOB DATA\r
+ USRPR1==USRPRT+1 ;FIRST LOC.+1\r
\r
-USRHCU: 0 ;HIGHEST USER I/O CHANNEL IN USE\r
- ;0 MEANS EITHER NONE OR CHANNEL 0 IN USE\r
+USRHCU: 0 ;HIGHEST USER IO CHANNEL IN USE\r
+ ;0 MEANS EITHER NONE OR CHAN. 0 IN USE\r
;LH=-1 DURING GET OF LOW OR HIGH SEG OR SAVE OF HIGH SEG\r
- ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(11$) WHEN NEG,\r
+ ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(115) WHEN NEG. \r
;LH=-2 DURING SAVE OF LOW SEG AS FLAG THAT CORE\r
- ; IS COMPRESSED. \r
- ;ONLY CHANNEL ASSIGNMENTS IN USE ARE COPIED INTO\r
- ; MONITOR WHEN JOB RUNS\r
+ ; IS COMPRESSED \r
+ ;ONLY CHAN. ASSIGNMENTS IN USE ARE COPIED INTO\r
+ ;MONITOR WHEN JOB RUNS\r
USRPC: 0 ;JOB PC WHEN SCHEDULER IS CALLED\r
-USRDDT: 0 ;RH==STARTING ADDRESS OF USER DDT, LH UNUSED\r
+USRDDT: 0 ;RH==STARTING ADR. OF USER DDT,LH UNUSED\r
USRJDA: BLOCK 20 ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA\r
; BLOCK ADDRESSES)\r
- ;LH==UUO'S DONE SO FAR FOR THIS CHANNEL (SEE SYSPAR)\r
- ;0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL\r
+ ; LH==UUOS DONE SO FAR FOR THIS CHANNEL(SEE SYSPAR)\r
+ ; 0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL\r
USRLO==USRJDA ;FIRST LOC CLEARED BY SETUSR ROUTINE\r
;ON A CALL [SIXBIT /RESET/]\r
;ALSO CLEARS USRHCU\r
USRLO1==USRLO+1 ;FIRST LOC+1\r
- USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE\r
+ USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUT.\r
\f\r
;OTHER SYSTEM DATA STORAGE\r
\r
\r
COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED\r
;SET BY SCNSER, DECREMENTED BY COMCON\r
-HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG I/O\r
- ;DEVICES WHEN THIS GOES TO ZERO (ONCE PER HNGSEC)\r
+HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG IO\r
+ ;DEVICES WHEN THIS GOES TO ZERO (ONCE A SECOND)\r
CLKFLG: 0 ;NON-ZERO WHEN CLK INTERRUPT FORCED FOR ANY REASON\r
TIMEF: 0 ;NON-ZERO FOR CLOCK INTERRUPT ON APR\r
;SET BY APRSER, TESTED AND CLEARED BY CLK ROUTINE\r
APRERR: 0 ;APR ERROR BITS ON NON-EX MEM, ETC.\r
- ;SET BY APRSER, CLEARED BY CLK ROUTINE (CLOCK)\r
+ ;SET BY APRSER, CLEARED BY CLK ROUTINE(CLOCK)\r
APRPC: 0 ;PC WHEN APR ERROR DETECTED\r
SCHEDF: 0 ;FORCED RESCHEDULING FLAG FOR CLK ROUTINE\r
;USED TO FORCE RESCHEDULING WHEN JOB IS IN EXEC MODE\r
; NULL JOB IS RUNNING\r
POTLST: 0 ;-1 WHEN SCHEDULER SEES THAT THERE ARE \r
;JOBS WHICH ARE POTENTIALLY RUNABLE BUT\r
- ;HAS TO RUN NULL JOB.\r
- ;0 WHEN IT FINDS A REAL JOB TO \r
- ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS TO\r
- ;RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY\r
- ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB.\r
+ ;HAS TO RUN NULL JOB. \r
+ ;0 WHEN IT FINDS A REAL JOB TO\r
+ ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS\r
+ ;TO RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY\r
+ ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB\r
IFN FTTRPSET,<\r
INTERN STOPTS\r
STOPTS: 0 ;STOP TIME SHARING OTHER USERS BECAUSE JOB 1 DID\r
;A TRPSET UUO WITH NON-ZERO AC(IE SET LOWER CORE\r
- ; PI TRAP LOCATION,ALSO STOP CORE SHUFFLING\r
+ ; PI TRAP LOCATION. ALSO STOP CORE SHUFFLING\r
>\r
- SLJOBN=0 ;NUMBER OF JOBS IF NO SLEEP FEATURE\r
+ SLJOBN=0 ;NO. OF JOBS IF NO SLEEP FEATURE\r
IFN FTSLEEP,<SLJOBN=JOBN> ;LEAVE ONE ENTRY PER JOB\r
CIPWT: BLOCK SLJOBN+3 ;CLOCK REQUEST QUEUE\r
; LH-MONITOR ADDRESS TO PUSHJ TO AT CLOCK LEVEL\r
; WHEN BITS 24-35 COUNT DOWN TO ZERO\r
; BITS 18-23 ARE DATA SET IN AC TAC WHEN PUSHJ DONE\r
- ; BITS 24-35 ARE NUMBER OF CLK TICKS LEFT TO GO\r
+ ; BITS 24-35 ARE NO. OF CLK TICKS LEFT TO GO\r
CIPWTM=CIPWT-1 ;FIRST LOC-1 OF CLOCK QUEUE\r
\f;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS\r
\r
\r
\r
NSWTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE\r
- ; RETURNED BY GETTAB UUO (THESE LOCATIONS\r
+ ; RETURNED BY GETTAB UUO(THESE LOCATIONS\r
; PRESENT IN NON-SWAPPING SYSTEMS TOO)\r
- ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG\r
-CORTAB: BLOCK 10 ;(0-7) BIT=1 IF CORRESPONDING K OF CORE IN USE BY\r
+ ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG\r
+CORTAB: BLOCK 10 ;(0-7)BIT=1 IF CORRESPONDING K OF CORE IN USE BY\r
; ACTIVE,IDLE, OR DORMANT HIGH OR LOW SEGS OR NON-EX\r
XP CORBLK,^D256\r
;NUMBER OF BITS IN CORE TABLE\r
-CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR.+1)\r
- ; CAN BE RESTRICTED TO LESS THEN ALL OF USER CORE\r
+CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR,+1)\r
+ ; CAN BE RESTRICTED TO LESS THAN ALL OF USER CORE\r
; BY BUILD AND/OR ONCE\r
- \r
-\r
-CORLST: 0 ;(11) 1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE\r
+CORLST: 0 ;(11)1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE\r
; SET BY SYSINI ON 143 STARTUP\r
-CORTAL: 0 ;(12) TOTAL NUMBER OF FREE+DORMANT+IDLE CORE BLKS LEFT\r
-SHFWAT: 0 ;(13) JOB NUMBER SHUFFLER HAS TEMPORARILY STOPPED\r
- ;UNTIL ITS IO DEVICES TO BECOME INACTIVE BEFORE SHUFFLING\r
-HOLEF: 0 ;(14) ABSOLUTE ADDRESS OF LOWEST HOLE IN CORE, 0=NONE\r
-UPTIME: 0 ;(15) NUMBER OF CLOCK TICKS SINCE SYSTEM LOADED OR\r
+CORTAL: 0 ;(12)TOTAL NO. OF FREE+DORMANT+IDLE CORE BLOCKS LEFT\r
+SHFWAT: 0 ;(13)JOB NO. SHUFFLER HAS TEMPORARILY STOPPED\r
+ ;UNTIL ITS IO DEVICES BECOME INACTIVE, BEFORE SHUFFLING\r
+HOLEF: 0 ;(14)ABS. ADDRESS OF JOB ABOVE LOWEST HOLE, 0 IF NO JOB.\r
+UPTIME: 0 ;(15)NO. OF CLOCK TICKS SINCE SYSTEM LOADED OR\r
; RESTARTED AT 143\r
-SHFWRD: 0 ;(16) TOT NO. OF WORDS SHUFFLED BY SYSTEM\r
-STUSER: 0 ;(17) JOB CURRENTLY USING THE SYSTEM TAPE\r
+SHFWRD: 0 ;(16)TOT. NO. OF WORDS SHUFFLED BY SYSTEM\r
+STUSER: 0 ;(17)JOB CURRENTLY USING THE SYSTEM TAPE\r
; NEEDED SO CONTROL C WILL NOT TIE UP SYSTEM TAPE\r
-HIGHJB: 0 ;(20) HIGHEST JOB NUMBER CURRENTLY ASSIGNED\r
-CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY 'CLRCOR' RTN.\r
-LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL JOB RAN\r
- ; BUT OTHER JOBS WANTED TO RUN AND COULD NOT\r
- ; DO SO BECAUSE: ---\r
+HIGHJB: 0 ;(20)HIGHEST JOB NUMBER CURRENTLY ASSIGNED\r
+\r
+CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY "CLRCOR" RTNE.\r
+LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL\r
+ ;JOB RAN BUT OTHER JOBS WANTED TO RUN, BUT\r
+ ;COULD NOT BE BECAUSE:-\r
; 1. SWAPPED OUT OR ON WAY IN OR OUT\r
- ; 2. MONITOR WAITING FOR I/O TO STOP SO\r
- ; IT CAN SHUFFLE OR SWAP\r
- ; 3. JOB BEING SWAPPED OUT BECAUSE IT IS\r
+ ; 2. MONITOR WAITING FOR IO TO STOP SO\r
+ ; CAN SHUFFLE OR SWAP\r
+ ; 3. JOB BEING SWAPPED OUT BECAUSE\r
; EXPANDING CORE\r
\r
;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST\r
; TO USERS IN NON-SWAP AND SWAP SYSTEMS\r
-NSWMXL=<.-NSWTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9\r
+NSWMXL=<.-NSWTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9\r
\r
;CORE ALLOCATION DATA NOT AVAILABLE VIA GETTAB\r
-IFN FTTRACK, <INTERNAL LASCOR ; (FOR DEBUGGING ONLY)\r
-LASCOR: 0 ;LAST JOB OR HIGH SEG TO CALL CORE ROUTINES\r
->\r
+IFN FTTRACK,<INTERN LASCOR\r
+LASCOR: 0 ;LAST JOB OR HIGH SEG TO CALL CORE ROUTINES\r
+ ; (FOR DEBUGGING ONLY)>\r
\f;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS\r
\r
- IFG SYS50N, < ;SWAPPING SYSTEM ?\r
+ IFG SYS50N,< ;SWAPPING SYSTEM?\r
INTERN SWPTBL,SWPMXL,BIGHOL,FINISH,FORCE,FIT,SWPERC,VIRTAL\r
INTERN FULCNT,MAXSIZ,MAXJBN,SUMCOR\r
SWPTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE\r
- ; RETURNED BY GETTAB UUO (THESE LOCATIONS\r
+ ; RETURNED BY GETTAB UUO(THESE LOCATIONS\r
; PRESENT ONLY IN SWAP SYSTEMS)\r
- ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG\r
-BIGHOL: 0 ;(0) CURRENT BIGGEST HOLE IN CORE (1K BLOCKS)\r
-FINISH: 0 ;(1) IF +, THEN JOB NUMBER OF JOB BEING SWAPPED IN,\r
- ;IF -, THEN JOB NUMBER OF JOB BEING SWAPPED OUT\r
-FORCE: 0 ;(2) JOB NUMBER BEING FORCED TO SWAP OUT\r
-FIT: 0 ;(3) JOB NUMBER WAITING TO BE FITTED INTO CORE\r
-VIRTAL: 0 ;(4) NUMBER OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT\r
+ ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG\r
+BIGHOL: 0 ;(0)CURRENT BIGGEST HOLE IN CORE (1K BLOCKS)\r
+FINISH: 0 ;(1)+JOBNO OF JOB BEING SWAPPED IN,\r
+ ;-JOBNO OF JOB BEING SWAPPED OUT\r
+FORCE: 0 ;(2)JOBNO BEING FORCED TO SWAP OUT\r
+FIT: 0 ;(3)JOBNO WAITING TO BE FITTED INTO CORE\r
+VIRTAL: 0 ;(4)NO. OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT\r
; (COUNTING DORMANT SEGMENTS AS IF FREE).\r
- ; PRINTED WITH CORE COMMAND (NO ARG) OR ERROR\r
+ ; PRINTED WITH CORE COMMAND(NO ARG) OR ERROR\r
; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE\r
; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET\r
; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE\r
; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET,\r
; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN\r
-SWPERC: 0 ;(5) LH= NUMBER OF SWAPPER READ OR WRITE FAILURES\r
- ; RH= ERROR BITS (BITS 18-21) + NUMBER OF K OF\r
+SWPERC: 0 ;(5)LH= NO. OF SWAPPER READ OR WRITE FAILURES\r
+ ; RH= ERROR BITS (BITS 18-21) + NO. OF K OF\r
; DISCARDED SWAPPING SPACE\r
\r
\r
\r
;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST\r
; TO USER PROGS IN SWAPPING SYSTEMS\r
-SWPMXL=<.-SWPTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9\r
+SWPMXL=<.-SWPTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9\r
\f;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB)\r
\r
FULCNT: 0 ;PRINT DISK IS FULL EVERY 30 SECONDS\r
SUMCOR: 0 ;TEMP USED BY SWAPPER FOR SUM OF CORE NEEDED FOR SWAP IN\r
IFN FT2REL,<\r
INTERN SWPIN,SWPOUT\r
-SWPIN: 0 ;JOB NUMBER BEING SWAPPED IN IF IT HAS A HIGH SEG\r
- ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG\r
+SWPIN: 0 ;JOB NO. BEING SWAPPED IN IF IT HAS A HIGH SEG\r
+ ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP\r
\r
-SWPOUT: 0 ;JOB NUMBER BEING SWAPPED OUT IF IT HAS A HIGH SEG\r
- ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG\r
+SWPOUT: 0 ;JOB NO. BEING SWAPPED OUT IF IT HASA HIGH SEG\r
+ ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP\r
\r
>\r
INTERN FTTRACK\r
-IFN FTTRACK, < \r
- INTERN LASIN,LASOUT\r
-LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN\r
+IFN FTTRACK,< \r
+ INTERN LASOUT,LASIN\r
+\r
LASOUT: 0 ;LAST JOB OR HIGH SEG SWAPPED OUT\r
+LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN\r
; ABOVE TWO FOR DEBUGGING ONLY\r
>\r
>\r
\r
-;DEFINE BLOCK FOR BIT TABLE DENOTING 4 WORD BLOCKS AVAILABLE (=0), IN USE (=1)\r
-; USE MULTIPLES OF 4*^D36 WORDS SO THE TABLE WILL HAVE A MULTIPLE OF ^D36 BITS\r
+;DEFINE BLOCK FOR BIT TABLE DENOTING 4. WORD BLOCKS AVAILABLE (=0), IN USE(=1)\r
+; USE MULTIPLES OF 4*36. WORDS SO THE TABLE WILL HAVE A MULTIPLE OF 36. BITS\r
; ADD 7 WORDS TO ACCOMODATE A POSSIBLE 1K BEYOND MINCOR AMOUNT\r
\r
IFG DSKN, <\r
\r
DDBTAB: BLOCK <MINCOR/^D144>+1+7\r
>\r
-\r
\f;MONITOR TABLES WITH ONE ENTRY PER JOB\r
\r
INTERN JBTSTS,JBTADR,JBTDAT,JBTNAM,JBTPRG\r
INTERN JOBMAX,JBTMAX,MJOBN,JBTAD1,JOBMXL,JBTMXL\r
INTERN FTTIME,FTKCT,FTPRV\r
\r
- JOBMAX==JOBN-1 ;MAXIMUM LEGAL JOB NUMBER\r
- JOBMXL==<JOBMAX>B26 ;HIGHEST JOB NUMBERSHIFTED LEFT 9 (FOR GETTAB UUO)\r
- MJOBN==-JOBN ;NEGATIVE NUMBERS OF JOBS (COUNTING NULL JOB)\r
- IFG KT10AN, <SEGN==JOBN+SEGN> ;IF ANY HIGH SEGMENTS,\r
+ JOBMAX==JOBN-1 ;MAX. LEGAL JOB NUMBER\r
+ JOBMXL==<JOBMAX>B26 ;HIGHEST JOB NO.SHIFTED LEFT 9(FOR GETTAB UUO)\r
+ MJOBN==-JOBN ;NEG. NOS. OF JOBS(COUNTING NULL JOB)\r
+ IFG KT10AN,<SEGN==JOBN+SEGN> ;IF ANY HIGH SEGMENTS,\r
; MUST HAVE AT LEAST AS MANY AS JOBS\r
JBTMAX==JOBN+SEGN-1 ;HIGHEST INDEX IN JBT TABLES\r
- JBTMXL=<JBTMAX>B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9 (FOR GETTAB UUO)\r
+ JBTMXL=<JBTMAX>B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9(FOR GETTAB UUO)\r
JBTSTS: BLOCK JOBN+SEGN ;JOB AND HIGH SEG STATUS WORD\r
- ;LH==STATUS BITS (SEE S.MAC FOR DESCRIPTION)\r
- ;RH==QUANTUM RUN TIME LEFT (SEE CLKCSS) FOR LOW SEGS\r
+ ;LH==STATUS BITS(SEE S.MAC FOR DESC.)\r
+ ;RH==QUANTUM RUN TIME LEFT(SEE CLKCSS) FOR LOW SEGS\r
;RH=IN CORE COUNT FOR HIGH SEGS\r
JBTADR: BLOCK JOBN+SEGN ;JOB AND HIGH SEG CORE ASSIGNMENT\r
- ; LH==PROTECTION (LENGTH-1)\r
- ; RH==RELOCATION (ABSOLUTE LOCATION IN CORE)\r
- JBTAD1==JBTADR+1 ;ADDRESS OF JOB 1 (USED BY SYSMAK)\r
+ ; LH==PROTECTION,(LENGTH-1)RH==RELOCATION\r
+ ; (ABS. LOC. IN CORE)\r
+ JBTAD1==JBTADR+1 ;ADR. OF JOB 1(USED BY SYSMAK)\r
JBTDAT==JBTADR ;RH==ADDRESS OF JOB DATA AREA\r
- ;SAME AS JBTADR (JDAT==PROG)\r
+ ;SAME AS JBTADR(JDAT==PROG)\r
INTERN JBTSGN\r
JBTSGN: IFG SEGN, <\r
BLOCK JOBN ;SEGMENT NUMBER OF HIGH SEGMENT THIS JOB\r
- ; IS USING IN CORE OR ON DISK\r
+ ; IS USING IN CORE OR DISK\r
; 0 MEANS JOB DOES NOT HAVE HIGH SEG\r
- ;LH=USER DEPENDENT HIGH SEG STATUS BITS\r
+ ; LH=USER DEPENDENT HIGH SEG STATUS BITS\r
; (SEE S.MAC)\r
- XP ITMSGN,ITEM+JOBMXL ;LH SYMBOL FOR GETTAB UUO\r
+ XP ITMSGN,ITEM+JOBMXL ;LH SYSMBOL FOR GETTAB UUO\r
>\r
IFE SEGN, <\r
0\r
XP ITMSGN,JOBMXL ;LH SYMBOL FOR GETTAB UUO\r
;SO THAT JBTSGN IS UNDEFINED\r
- ;I.E., MAKE INDEXING BY ITEM BE 0\r
- ; BUT ALLOW REFERENCES UP TO JOBMXL\r
+ ;I.E. MAKE INDEXING BY ITEM BE 0\r
+ ; BUT ALLOW REFERENCES UP TO JOBMXL\r
>\r
- IFG DSKN, < ;DISK SYSTEM ?\r
+ IFG DSKN,< ;DISK SYSTEM?\r
INTERN PRJPRG,JBTDIR\r
-JBTDIR: ;HIGH SEGMENT DIRECTORY NAME (DSK) OR PHYSICAL\r
- ; DEVICE NAME (DTA,MTA)\r
-PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NUMBER,PROGRAMMER NUMBER\r
+JBTDIR: ;HIGH SEGMENT DIRECTORY NAME(DSK) OR PHYSICAL\r
+ ; DEVICE NAME(DTA,MTA)\r
+PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NO.,PROGRAMMER NO.\r
>\r
- IFE DSKN, <IFG SEGN, < ;REENTRANT MONITOR WITHOUT DISK ?\r
+ IFE DSKN,<IFG SEGN,< ;REENTRANT MONITOR WITHOUT DISK?\r
INTERN JBTDIR\r
JBTDIR=.-JOBN ;INDEX BY HIGH SEG NUMBER\r
- BLOCK SEGN ;HIGH SEGMENT PHYSICAL DEVICE NAME (DTA,MTA)\r
+ BLOCK SEGN ;HIGH SEGMENT PHYSICAL DEVICE NAME(DTA,MTA)\r
>>\r
- IFN FTTIME, <\r
+ IFN FTTIME,<\r
INTERN RTIME,TTIME\r
-RTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB OR RUNTIME\r
-TTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB\r
+RTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB OR RUNTIME\r
+TTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB\r
>\r
-\f IFG SYS50N,< ;SWAPPING SYSTEM ?\r
- INTERNAL JBTSWP,JBTCHK\r
+\f IFG SYS50N,< ;SWAPPING SYSTEM?\r
+ INTERN JBTSWP,JBTCHK\r
JBTSWP: BLOCK JOBN+SEGN ;LH:==PROTECT TIME WHILE JOB IS IN CORE.\r
; DISK ADDRESS WHILE SWAPPED OUT\r
- ;BIT 0=1 IF SEGMENT IS FRAGMENTED\r
; BITS18-26:==OUTCORE IMAGE SIZE\r
; BITS27-35:==INCORE IMAGE SIZE\r
; FOR HIGH SEG, LH ALWAYS DISK ADDRESS\r
; SAME AREA FOR HIGH SEG\r
\r
>\r
-JBTNAM: ;NAME OF HIGH SEGMENT (FILE IT WAS INITIALIZED FROM)\r
+JBTNAM: ;NAME OF HIGH SEGMENT(FILE IT WAS INITIALIZED FROM)\r
JBTPRG: BLOCK JOBN+SEGN ;NAME OF FILE USED IN LAST R,RUN,GET, ETC\r
; USED BY SYSTAT PROGRAM\r
- IFN FTKCT, <\r
+ IFN FTKCT,<\r
INTERN JBTKCT\r
-JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH (IN K) TIMES NUMBER OF JIFFIES\r
+JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH(IN K) TIMES NO. OF JIFFIES\r
; PROGRAM USED CPU. USED FOR TIME ACCOUNTING.\r
>\r
- IFN FTPRV, <\r
+ IFN FTPRV,<\r
INTERN JBTPRV\r
-JBTPRV: BLOCK JOBN ;PRIVILEGE BITS FOR JOB SET BY LOGIN\r
+JBTPRV: BLOCK JOBN ;PRIVELEGE BITS FOR JOB SET BY LOGIN\r
>\r
- IFG DSKN, <\r
+ IFG DSKN,<\r
INTERN MQUEUE,MQTOP\r
-MQUEUE: BLOCK JOBN ;DISK MONITOR I/O QUEUE\r
+\r
+MQUEUE: BLOCK JOBN ;DISK MONITOR IO QUEUE\r
MQTOP=. ;LAST LOC+1 OF MONITOR QUEUE\r
>\r
- IFG SYS50N, <\r
+ IFG SYS50N,<\r
;THE FOLLOWING ARE USED TO CREATE MXQUE\r
-;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER (SCHED)\r
- FTDISK=-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS\r
+;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER(SCHED)\r
+ FTDISK==-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS\r
; IN MACRO QUEUES\r
; WHICH IS DEFINED IN S.MAC\r
XP MXQUE,0\r
DEFINE X (A)\r
\r
<A'Z==MXQUE\r
- INTERN A'Z\r
+ INTERN A'Z\r
MXQUE==MXQUE+1>\r
CODES\r
MXQUE==MXQUE+3\r
XALL ;BACK TO NORMAL MACRO EXPANSION\r
\r
INTERN JBTQ,JBTQM1,JBTQP1,JBTQMN\r
- BLOCK MXQUE ;NUMBER OF QUEUES FOR SWAPPING SCHEDULER\r
+ BLOCK MXQUE ;NO. OF QUEUES FOR SWAPPING SCHEDULER\r
JBTQ: BLOCK JOBN ;ONE ENTRY PER JOB,\r
; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE\r
- ; NEGATIVE MEANS THIS IS FIRST (LH) OR LAST (RH)\r
+ ; NEGATIVE MENAS THIS IS FIRST (LH) OR LAST (RH)\r
; JOB IN QUEUE\r
JBTQM1==JBTQ-1 ;JBTQ-1\r
JBTQP1==JBTQ+1 ;JBTQ+1\r
;INDEXED BY TTY LINE NUMBER, CONTAINS TTY DDB ADDRESS IN RH\r
;(ASSIGNED WHEN FIRST CHARACTER TYPED ON TTY BY SCNSER\r
;BIT 0==1 IF COMMAND TYPED BUT NOT PROCESSED\r
- ;BITS 6-11==JOB NUMBER TTYP IS ATTACHED TO\r
+ ;BITS 6-11==JOB NUMBER TTY IS ATTACHED TO\r
;BITS 12-17==NEXT LINE NUMBER IN TALK RING OR ITS SELF IF NOT TALKING\r
\r
INTERN TTYTAB,PTYTAB,TPYTAB,TCONLN,MLTTYL,MTTYLN,TTPLEN,TTMODL,TTPMXL\r
\r
-TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY\r
+TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY\r
TPYTAB==.-1 ;ADDRESS OF LAST ENTRY\r
TCONLN==.-1-TTYTAB ;LINE NUMBER OF CTY\r
BLOCK PTYN ;PSEUDO TTY TRANSLATOR TABLE\r
- ; THIS IS FOR LINKED TTY LINES,\r
+ ; THIS IS FOR THE LINKED TTY LINES,\r
; NOT THE DEVICE "PTYN"'S DDB\r
TTPLEN==.-TTYTAB ;LENGTH OF ENTIRE TABLE\r
- TTPMXL=<TTPLEN-1>B26 ;HIGHET ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO)\r
+ TTPMXL==<TTPLEN-1>B26 ;HIGHEST ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO)\r
\r
- MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 ETRA\r
+ MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 EXTRA\r
; SO JOB CAPACITY EXCEEDED MESSAGE CAN BE TYPED\r
MTTYLN==-TTPLEN ;NEG, LENGTH OF ENTIRE TRANSLATOR TABLE\r
\r
-PTYTAB: BLOCK PTYN+1 ;ADDRESS OF THE DDBS FOR DEVICE PTYN\r
+PTYTAB: BLOCK PTYN+1 ;ADDRESSES OF THE DDBS FOR DEVICE PTYN\r
; NOT THE LINKED TTY LINES. SEE TPYTAB.\r
;LAST LOCATION CLEARED BY SYSINI ON 143 RESTART\r
SYSEND==.-1\r
HRRM TAC, LINKED ;STORE EXIT FROM THIS ROUTINE (ONCE ONLY CODE WILL\r
; BE OVERLAYED BY MULTIPLE DEVICE DATA\r
; BLOCK GENERATION)\r
- MOVSI TAC,INTNUM ;NEG NUMBER OF ENTRIES IN TABLE\r
+ MOVSI TAC,INTNUM ;NEG NO. OF ENTRIES IN TABLE\r
MOVEI DEVDAT,DEVLST-DEVSER ;MAKE DEVLST LOOK LIKE DEVSER IN A DOB\r
LOOP: MOVE TAC1,INTTB1(TAC) ;GET NEXT DEVICE DATA BLOCK ADDRESS\r
JUMPE TAC1,NEXT ;0 MEANS NO DOB FOR DEVICE\r
- SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ?\r
+ SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE?\r
HRLM TAC1,DEVSER(DEVDAT) ;YES, STORE IN PREVIOUS DEVICE DATA BLOCK\r
HRRZ DEVDAT,TAC1 ;MAKE DEVDAT POINT TO CURRENT DOB\r
- LDB UUO,DDBNUM ;GET NUMBER OF DDB'S\r
- SOJLE UUO,NEXT ;ONE OR LESS ?\r
+ LDB UUO,DDBNUM ;GET NO. OF DDB'S\r
+ SOJLE UUO,NEXT ;ONE OR LESS?\r
HRRZ JBUF,DEVDAT ;NO, CREATE MULTIPLE COPIES OF DOB\r
; SAVE ORIGINAL IN JBUF\r
MOVEI AC3,1 ;STARTING WITH DEV1,DEV2,DEV77\r
LDB AC1,PUNIT ;START UNIT NUMBER FROM\r
; ASSEMBLE DEVICE DATA BLOCK\r
- ; PTY STARTS UNIT NUMBER AT 1 INSTEAD OF 0\r
+ ; PTY STARTS UNIT NO. AT 1 INSTEAD OF 0\r
; ALTHOUGH DEVICE NAMES ARE PTY0,PTY1,ETC.\r
\fMULDDB: HRRZ TAC1,SYSSIZ ;ADR. OF NEXT DDB IS AT END OF MONITOR\r
- SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ?\r
- HRLM TAC1,DEVSER(DEVDAT) ;YES, MAKE PREVIOUS DDB POINT TO THE ONE ABOUT TO BE CREATED\r
+ SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE?\r
+ HRLM TAC1,DEVSER(DEVDAT) ;YES,MAKE PREVIOUS DDB POINT TO ONE ABOUT TO BE CREATED\r
HRL DEVDAT,JBUF ;SOURCE ADDRESS TO LH\r
HRR DEVDAT,TAC1 ;DESTINATION ADDRESS TO RH\r
HLRZ AC2,INTTB1(TAC) ;LENGTH OF DEVICE DATA BLOCK\r
ADDB AC2,SYSSIZ ;LAST LOCATION+1 AFTER MOVE\r
- SKIPN DESONC ;OK TO DESTROY ONCE ?\r
+ SKIPN DESONC ;OK TO DESTROY ONCE?\r
JRST JUSTCT ;NO, JUST COUNT DDB SPACE\r
BLT DEVDAT,-1(AC2) ;MOVE ORIGINAL TO FREE STORAGE\r
- SKIPL INTTAB(TAC) ;IS THIS DECTAPE (ANY OF 3 SERVICES)?\r
+ SKIPL INTTAB(TAC) ;IS THIS DECTAPE(ANY OF 3 SERVICES)?\r
JRST NOTDTA ;NO\r
HRRZ AC2,DEVDAT ;YES,DESTINATION\r
SUBI AC2,(JBUF) ;-SOURCE=DISTANCE MOVED\r
; (SORRY ABOUT NO SYMBOL)\r
NOTDTA: MOVE PROG,PHYNAM ;BYTE POINTER TO NEWLY CREATED\r
; DDB PHYSICAL NAME\r
-\r
- MOVE ITEM,AC3 ;MAKE COPY OF UNIT NUMBER\r
- TRNN ITEM,70 ;IS IT 10 OR MORE ?\r
+ MOVE ITEM,AC3 ;MAKE COPY OF UNIT NO.\r
+ TRNN ITEM,70 ;IS IT 10 OR MORE?\r
JRST SMALL ;NO\r
ROT ITEM,-3 ;YES, CONVERT HIGH ORDER OCTAL DIGIT TO\r
ADDI ITEM,20 ;SIXBIT\r
NEXT: AOBJN TAC,.+1 ;MOVE BY TWOS\r
AOBJN TAC,LOOP ;ANY MORE DEVICES\r
MOVEI TAC,0 ;NO, FLAG END OF DEVICE DATA BLOCK CHAIN WITH 0 LINK\r
- SKIPE DESONC ;OK TO DESTROY ONCE ?\r
+ SKIPE DESONC ;OK TO DESTROY ONCE?\r
HRLM TAC,DEVSER(DEVDAT) ;YES, STORE 0 IN CASE LAST DDB IS MULTIPLE\r
-IFG DSKN, <\r
- EXTERNAL LOCORE,CRINIT\r
- MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR (SYSMAK, EXEC DDT OR NOT)\r
+IFG DSKN,<\r
+ EXTERN LOCORE,CRINIT\r
+ MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR(SYSMAK,EXEC DDT OR NOT)\r
MOVEM TAC,LOCORE ;SAVE POINTER TO FIRST 4 WORD BLOCK\r
ADDI TAC,MINCOR ;MINIMUM REQUIRED FOR DISK DDBS\r
IORI TAC,1777 ;FORCE TO 1K BOUNDARY\r
DDBNUM: POINT 8,INTTAB(TAC),8 ;POINTER TO DDB NUMBER\r
PHYNAM: POINT 6,DEVNAM(DEVDAT),17 ;BYTE POINTER TO DB PHYSICAL NAME\r
\r
-\f;MACROS TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINING\r
-;INFORMATION FOR ONCE \r
+\f;MACRO TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINNING\r
+;INFORMATION FOR ONCE\r
;SO IT CAN LINK THE DEVICE INTERRUPT SERVICE ROUTINES AND THE DEVICE DATA BLOCKS\r
;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE\r
-;WHICH HAS A DEVICE DATA BLOCK(0-7)\r
-;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS, BITS 9-17==PI CHANNEL(0-7)\r
+;WHICH HAS A DEVICE DATA BLOC(0-7)\r
+;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS,BITS 9-17==PI CHANNEL(0-7)\r
;0 MEANS NO PI CHANNEL (EG PTY)\r
-;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE, RH==DDB ADDRESS\r
+;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE,RH==DDB ADDRESS\r
\r
;MACRO FOR DEVICES WHICH ARE ALWAYS PRESENT(AND WHICH DO NOT USE A CHANNEL SAVE ROUTINE\r
;AND HAVE NO DDB (EX-APR,CTY,PEN,CLK)\r
\r
-DEFINE SPASGINT (DEV,PI) <\r
+\r
+DEFINE SPASGINT (DEV,PI) < \r
DEV'N==1\r
ASGINT DEV,PI\r
>\r
\r
-DEFINE ASGINT (DEV,PI) <\r
- IFG DEV'N, <IFG PI, <\r
- IFE <PI-.CH>, <.CHAS==1 ;CHANNEL PI IN USE.>\r
- INTERNAL DEV'CHN\r
+DEFINE ASGINT (DEV,PI)<\r
+ IFG DEV'N,<IFG PI,<\r
+ IFE <PI-.CH>,<.CHAS==1 ;CHANNEL PI IN USE>\r
+ INTERN DEV'CHN\r
DEV'CHN==PI\r
- EXTERNAL DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION\r
+ EXTERN DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION\r
XWD PI,DEV'INT ;GENERATE INTERRUPT ENTRY POINT FOR ONCE\r
XWD 0,0 ;NO DDB TO CHAIN TOGETHER\r
- ASGIN1 DEV,\PI\r
+ ASGIN1 (DEV,\PI)\r
>\r
>>\r
\r
-DEFINE ASGIN1 (DEV,PI) <\r
- IFDEF CH'PI, < ;WAIT TILL PASS 2 TO DEFINE\r
+DEFINE ASGIN1 (DEV,PI)<\r
+ IFDEF CH'PI,< ;WAIT TILL PASS 2 TO DEFINE\r
DEV'CHL==CH'PI\r
- INTERNAL DEV'CHL\r
+ INTERN DEV'CHL\r
>>\r
+;MACRO FOR OPTIONAL DEVICES (ALWAYS USE CHANNEL SAVE ROUTINE)\r
+ ; (EXAMPLE: CR, DSK, PTR, ETC. ALSO PTY WITH 0 PI)\r
\r
-;MACRO FOR OPTIONAL DEVICES WHICH ALWAYS USE A CHANNEL SAVE ROUTINE\r
-; (EXAMPLES: CDR, DSK, PTR, ETC. ALSO PTY WITH 0 PI)\r
-\r
-DEFINE SPASGSAV (DEV,PI,NUM) <\r
+DEFINE SPASGSAV (DEV,PI,NUM) <\r
DEV'N==NUM\r
ASGSAV DEV,PI\r
>\r
\r
+\r
DEFINE ASGSAV (DEV,PI) <\r
IFG DEV'N, <IFG PI, <\r
- EXTERN DEV'INT ;INTERRUPT SERVICE CONS INSTRUCTION\r
+ EXTERN DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION\r
>\r
EXTERN DEV'DDB\r
ASGSV1 (DEV,\PI)\r
>>\r
+\r
\f;MACRO FOR: 1. COMPLETION OF THE DEFINITION REQUIRED FOR THOSE\r
; DEVICES INVOKING THE ASGSAV MACRO\r
;\r
; 2. COMPLETE DEFINITION FOR THOSE DEVICES WITH THEIR\r
-; INTERRUPT ENTRY POINT AND DDB'S HERE IN COMMON\r
+; INTERRUPT ENTRY POINT AND DDB'S IN COMMON\r
; (EXAMPLE: LPT'S)\r
\r
DEFINE ASGSV1 (DEV,PI) <\r
IFG PI, <\r
- IFE <PI-.CH>, <.CHAS==1 ;CHANNEL PI IN USE.>\r
+ IFE <PI-.CH>,<.CHAS==1 ;CHANNEL PI IN USE>\r
DEV'CHN==PI ;DEFINE DEVICE CHANNEL NUMBER\r
INTERN DEV'CHN ;DECLARE INTERNAL - ONLY IF DEVICE WANTED\r
USED'PI==1 ;SET FLAG SO THAT A CHANNEL SAVE\r
; ROUTINE WILL BE GENERATED FOR\r
; THIS PI CHANNEL\r
+\r
IFDEF SAV'PI, < ;WAIT TILL CHANNEL SAVE ROUTINES\r
; ARE DEFINED BELOW (IN PASS 2)\r
\r
; (USUALLY POPJ USED)\r
DEV'CHL==CH'PI ;LOCATION WHERE INTERRUPT PC IS STORED\r
DEV'SAC==SAVAC'PI ;STARTING CHANNEL SAVE LOCATION FOR AC'S\r
+\r
INTERN DEV'SAV, DEV'RET, DEV'CHL, DEV'SAC\r
>>\r
\r
DTBIT==0 ;ASSUME THIS IS NOT A DECTAPE\r
\r
- IFIDN <DEV>, <DTA>, <DTBIT==1> ;IS IT PDP-10 DECTAPES ?\r
- IFIDN <DEV>, <DTC>, <DTBIT==1> ; OR PDP-6 DECTAPES ?\r
+ IFIDN <DEV>,<DTA>,<DTBIT==1> ;IS IT PDP-10 DECTAPES?\r
+ IFIDN <DEV>,<DTC>,<DTBIT==1> ; OF PDP-6 DECTAPES?\r
\r
IFE PI, <\r
XWD DEV'N*1000+0,0 ;NO PI CHANNEL FOR THIS DEVICE\r
>\r
\r
IFG PI, <\r
- XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD OF INTTAB ENTRY\r
+ XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD\r
>\r
\r
IFG DEV'N-1, <\r
- XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD OF INTTAB ENTRY\r
+ XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD\r
EXTERN DEV'DDS\r
>\r
+\r
IFE DEV'N-1, <\r
- XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD OF INTTAB ENTRY\r
+ XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD\r
>>\r
-\f\r
-;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE\r
-; DEVICES SUCH AS LINE-PRINTERS\r
+\f;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE\r
+; DEVICES SUCH AS LINE PRINTERS\r
\r
DEFINE MULASG (DEV,DE,PI) <\r
+\r
IFG DEV'N, <\r
ZZ==0\r
REPEAT DEV'N, <\r
>\r
\r
DEFINE DEVASG (DE,X,PI) <\r
+\r
DE'X'N==1\r
ASGSV1 DE'X,\PI\r
>\r
\r
-\r
;MACROS TO CONTROL ASSIGNMENT OF PI CHANNELS TO DEVICES\r
\r
-DEFINE NEXTCH < .CH==.CH+1\r
+DEFINE NEXTCH< .CH==.CH+1\r
.CHAS==0\r
-NEXTCU \.CH \r
+NEXTCU (\.CH)\r
>\r
-DEFINE NEXTCQ < IFN .CHAS,<NEXTCH>>\r
-DEFINE NEXTCU (N) < IFDEF UNIQ'N,<IFN UNIQ'N,<NEXTCH>>>\r
-\r
-\r
-\r
-\r
-\r
-\r
-;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED\r
+DEFINE NEXTCQ< IFN .CHAS,<NEXTCH>>\r
+DEFINE NEXTCU (N) <IFDEF UNIQ'N,<IFN UNIQ'N,<NEXTCH>>>\r
+\f;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED\r
\r
USED1==0\r
USED2==0\r
;NOW GENERATE THE TABLE FOR ONCE AND DEFINE PI CHANNEL ASSIGNMENTS\r
\r
INTERN INTTAB,INTTB1,INTNUM,SCNN,CTYN\r
-\r
CTYN==1 ;ALWAYS ONE CTY\r
SCNN==JOBN ;NUMBER OF SCN DDB\r
- ; ONE FOR EACH JOB + NULL JOB (EXTRA ONE)\r
+ ; ONE FOR EACH JOB + NULL JOB(EXTRA ONE)\r
APRN==1 ;ALWAYS AN APR\r
CLKN==1 ;ALWAYS LOWEST PRIORITY CLOCK\r
\r
\r
-INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NUMBER OF DOB\r
+INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NO. OF DOB\r
INTTB1==INTTAB+1\r
-\r
ASGSAV PTY,0 \r
\r
.CHAS==0\r
;NOTE THAT THE PDP-6 DECTAPE AND MAGTAPE SHARE A\r
; 136 DATA CONTROL IF BOTH ARE PRESENT.\r
\r
- ;DATA PRODUCTS DISK BLKI/BLKO PI CHANNEL:\r
- IFNDEF DCBCHN, <IFG DPDN, <XP DCBCHN,.CH\r
+ ;DATA PRODUCTS DISK BLKO/BLKI PI CHANNEL\r
+ IFNDEF DCBCHN,<IFG DPDN,<XP DCBCHN,.CH\r
NEXTCH>>\r
;PDP-6 OR PDP-10 MAGTAPE BLKI/BLKO PI CHANNEL:\r
- IFNDEF MTDCHN, <IFG MTAN, <XP MTDCHN,.CH\r
+ IFNDEF MTDCHN,<IFG MTAN,<XP MTDCHN,.CH\r
NEXTCH>>\r
- IFNDEF DCTCHN, <IFG MTCN, <XP DCTCHN,.CH\r
+ IFNDEF DCTCHN,<IFG MTCN,<XP DCTCHN,.CH\r
NEXTCH>>\r
- ;PDP-6 OR PDP-10 DECTAPE BLKI/BLKO PI CHANNEL:\r
- IFNDEF DTDCHN, <IFG DTAN, <XP DTDCHN,.CH\r
+ ;PDP6 OR PDP10 DECTAPE BLKI/BLKO PI CHANNEL:\r
+ IFNDEF DTDCHN,<IFG DTAN,<XP DTDCHN,.CH\r
NEXTCH>>\r
- IFNDEF DCTCHN, <IFG DTCN, <XP DCTCHN,.CH\r
+ IFNDEF DCTCHN,<IFG DTCN,<XP DCTCHN,.CH\r
NEXTCH>>\r
\r
-IFNDEF BLKMXC, <BLKMXC=.CH> ;REMEMBER THIS CHANNEL ON PASS 1\r
+IFNDEF BLKMXC,<BLKMXC=.CH> ;REMEMBER THIS CHANNEL ON PASS 1\r
.CH==BLKMXC ;ON PASS 2, SKIP OVER BLKI CHANNELS\r
\r
-\f;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES\r
+;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES\r
ASGSAV CDR,.CH\r
ASGINT APR,.CH\r
\r
NEXTCQ\r
-\r
-;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP\r
+\f;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP\r
ASGSAV SCN,.CH\r
ASGSAV PTR,.CH\r
MULASG LPT,LP,.CH\r
ASGINT CTY,.CH\r
\r
NEXTCQ\r
-\f\r
-;THE FOLLOWING ARE LOWER-PRIORITY DEVICES, AS A GROUP\r
+\r
+;THE FOLLOWING ARE LOWER-PRIORITY DEVICES,AS A GROUP\r
ASGSAV DSK,.CH\r
ASGSAV PEN,.CH\r
ASGSAV PTP,.CH\r
ASGSAV CDP,.CH\r
ASGSAV PLT,.CH\r
-NEXTCQ\r
\r
+NEXTCQ\r
\r
-;THESE DEVICES GET LOW PRIORITY CHANNEL\r
+;THE DISPLAY GETS ITS OWN LOW-PRIORITY CHANNEL\r
ASGSAV DIS,.CH\r
\r
NEXTCQ\r
-\f\r
+\r
;LAST IS THE SCHEDULER, ON CHANNEL 7 BY ITSELF\r
\r
-IFG <.CH-7>, < PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION.\r
+IFG <.CH-7>,<PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION\r
PRINTX ;SUGGEST EDITING COMMON TO PUT MORE DEVICES ON\r
- PRINTX ; A SINGLE CHANNEL\r
->\r
+ PRINTX ; A SINGLE CHANNEL>\r
\r
.CH==7\r
ASGINT CLK,.CH\r
-\r
- SPCINT\r
- ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING\r
+\f SPCINT\r
+ ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLING\r
; WHICH DO NOT USE A CHANNEL SAVE ROUTINE AND HAVE\r
- ; NO DEVICE DATA BLOCK\r
+ ; NO DEVIC EDATA BLOCK\r
SPCSAV\r
- ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING\r
+ ;GENERATE ANY SPECIAL DEVICES CUSTOME IS SUPPLYING\r
; WHICH DO NEED A CHANNEL SAVE ROUTINE\r
+ ; AND HAVE MULTIPLE DEVICE DATA BLOCKS(0 MEANS NONE)\r
\r
;END OF THE ASSIGNMENT TABLE\r
\r
INTNUM==INTTAB-. ;-LENGTH OF INTERRUPT CHANNEL ASSIGNMENT TABLE\r
\r
- IFLE .-SYSEND, <LOC SYSEND+1>\r
+ IFLE .-SYSEND,<LOC SYSEND+1>\r
; SET LOC UP TO SYSEND+1, UNLESS ONCE ONLY CODE\r
; IS BIGGER\r
-\r
-\f\r
-\r
-;SYSTEM CONSTANTS AND PARAMETERS\r
+\f;SYSTEM CONSTATNS AND PARAMETERS\r
\r
INTERN CNFTBL,CNFMXL,CONFIG,SYSTAP,SYSDAT\r
\r
\r
-CNFTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE\r
- ; RETURNED BE GETTAB UUO (THESE LOCATIONS\r
+CNFTBL: ;FIRST LOCATION 0F MONITOR DATA STORAGE\r
+ ; RETURNED BE GETTAB UUO(THESE LOCATIONS\r
; NOT CLEARED BY SYSINI)\r
- ; CNFTBL IS GETTAB TABLE 11 (RH OF AC)\r
- ; OCTAL NO. IN () CORRESPOND TO GETTAB UUO\r
-CONFIG: SYSNAM\r
-\r
- LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS (24 CHARS)\r
+ ; CNFTBL IS GETTAB TABLE 11(RH OF AC)\r
+ ; OCTAL NOS. IN () CORRESPOND TO GETTAB UUO\r
+CONFIG: SYSNAM ;(0-4)NAME OF SYSTEM, IN ASCII\r
+ LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS(24 CHARS)\r
; SO GETTAB UUO WILL BE CONSTANT\r
-SYSDAT: SYSDAT\r
- ;(5,6) GENERATE SYSTEM DATE\r
+SYSDAT: SYSDAT ;(5,6)GENERATE SYSTEM DATE\r
LOC SYSDAT+2 ;ALWAYS LEAVE 2 WORDS SO GETTAB CONSTANT\r
-SYSTAP: SYSDEV\r
- ;(7) NAME OF SYSTEM DEVICE, IN SIXBIT\r
+SYSTAP: SYSDEV ;(7)NAME OF SYSTEM DEVICE, IN SIXBIT\r
\r
-;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS\r
+\f;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS\r
\r
INTERN TIME,THSDAT,SYSSIZ,DEVOPR,DEVLST,SEGPTR,TWOREG,STATES\r
INTERN SERIAL\r
EXTERN PATCH\r
\r
-TIME: 0 ;(10) TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC)\r
-THSDAT: 0 ;(11) TODAY'S DATE ((Y-1964)*12+(M-1))*31+(D-1)\r
-SYSSIZ: EXP PATCH ;(12) SIZE OF MONITOR (FIRST LOC NOT USED)\r
-DEVOPR: SIXBIT /CTY/ ;(13) SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE\r
+TIME: 0 ;(10)TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC.)\r
+THSDAT: 0 ;(11)TODAY'S DATE((Y-1964)*12+(M-1))*31+(D-1)\r
+SYSSIZ: EXP PATCH ;(12)SIZE OF MONITOR(FIRST LOC NOT USED)\r
+DEVOPR: SIXBIT /CTY/ ;(13)SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE\r
; (IF THIS LOCATION CONTAINS 0, NONE HAS\r
; BEEN DESIGNATED)\r
- ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE.\r
- ; ALSO UNEXPLAINED MONITOR ERROR MESSAGES\r
- ; WILL BE TYPED ON TTY OPR\r
-DEVLST: XWD 0,0 ;(14) LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK\r
- ; ONCE ONLY CODE LINKS DEVICE DATA BLOCKS\r
-\fSEGPTR: XWD -SEGN,JOBN ;(15) AOBJN POINTER TO 1ST HIGH SEG IN JBTXXX TABLES\r
- ; LH=-NO. OF HIGH SEGS, RH= ST HIGH SEG NO.\r
-TWOREG: 0 ;(16) FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE\r
+ ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE\r
+ ;ALSO UNEXPLAINED MONITOR ERROR MESSAGE WILL BE TYPED\r
+ ;ON TTY OPR\r
+DEVLST: XWD 0,0 ;(14)LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK\r
+ ;ONCE ONLY CODE LINKS DEVICE DATA BLOCKS\r
+\fSEGPTR: XWD -SEGN,JOBN ;(15)AOBJN POINTER TO FIRST HIGH SEG IN JBTXXX TABLES\r
+ ; LH=-NO. OF HIGH SEGS, RH=FIRST HIGH SEG NO.\r
+TWOREG: 0 ;(16)FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE\r
; HAVE 2 RELOC REG CAPACITY\r
; NON-ZERO IF BOTH DO, 0 IF EITHER OR BOTH DO NOT\r
; SET BY ONCE ONLY CODE\r
-\r
ZZ==0\r
- IFG DSKN,<ZZ==ZZ!1B0> ;1 IF DISK SYSTEM (ANALOGOUS TO FTDISK)\r
- IFG SYS50N,<ZZ==ZZ!1B1> ;1 IF SWAPPING SYSTEM (ANALOGOUS TO FTSWAP)\r
- IFG LOGINN,<ZZ==ZZ!1B2> ;1 IF LOGIN (ANALOGOUS TO FTLOGIN)\r
+ IFG DSKN,<ZZ==ZZ!1B0> ;1 IF DISK SYSTEM(ANALOGOUS TO FTDISK)\r
+ IFG SYS50N,<ZZ==ZZ!1B1> ;1 IF SWAPPING SYSTEM(ANALOGOUS TO FTSWAP)\r
+ IFG LOGINN,<ZZ==ZZ!1B2> ;1 IF LOGIN(ANALOGOUS TO FTLOGIN)\r
IFN FTTTYSER,<ZZ==ZZ!1B3> ;1 IF FULL DUPLEX SOFTWARE\r
IFN FTPRV,<ZZ==ZZ!1B4> ;1 IF PRIVILEGE FEATURE INCLUDED\r
IFN FT2REL,<ZZ==ZZ!1B5> ;1 IF REENTRANT SOFTWARE\r
- IFE JIFSEC-^D50,<ZZ==ZZ!1B6> ;1 IF 50 CYCLE MACHINE, 0 IF 60 CYCLE\r
-STATES: EXP ZZ ;(17) BITS WHICH DEFINE TYPE OF SYSTEM IN LH\r
+ IFE JIFSEC-^D50,<ZZ==ZZ!1B6> ;1 IF 50 CYCLE MACHINE, 0 OF 60 CYCLE\r
+STATES: EXP ZZ ;(17)BITS WHICH DEFINE TYPE OF SYSTEM IN LH\r
; RH PATCHED BY MONITOR COMMAND TO\r
; INDICATE OPERATIONAL STATE OF SYSTEM\r
+ ;INSERT NEW LOCATIONS OF INTEREST SETUP\r
+ ; BY ONCE ONLY CODE HERE\r
SERIAL: EXP APRSN ;(20) SERIAL NUMBER OF APR\r
-CNFMXL==<.-CNFTBL-1>B26 ;MAXIMUM ENTRY IN CNFTBL FOR GETTAB UUO\r
-\fIFG DSKN, <\r
+CNFMXL==<.-CNFTBL-1>B26 ;MAX. ENTRY IN CNFTBL FOR GETTAB UUO\r
+\fIFG DSKN,<\r
INTERN ODPTBL,ODPMXL,SWPHGH,K4SWAP,PROT,PROT0\r
\r
IFG SYS50N,< EXTERN ICPROT,ICPRT1 ;THESE ARE DEFINED ONLY IN\r
XP ICPRT1,0 ; INTERNAL IN COMMON>\r
\r
ODPTBL: ;FIRST LOC IN MONITOR DATA AREA FOR DISK\r
- ; LOCATIONS WHICH ARE NOT SET TO 0 WHEN SYSTEM\r
- ; STARTED, ODPTBL IS GETTAB UUO TABLE 15\r
+ ; LOCATION WHICH ARE NOT SET TO 0 WHEN SYSTEM\r
+ ; STARTED. ODPTBL IS GETTAB UUO TABLE 15\r
\r
SWPHGH: 0 ;(0) HIGHEST LOGICAL BLOCK # IN THE SWAPPING\r
; SPACE ON THE DISK (SET BY SWPINI)\r
K4SWAP: 0 ;(1)K OF DISK WORDS SET ASIDE FOR SWAPPING\r
; ASSIGNED AT ONCE ONLY REFRESH TIME\r
+PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER USED TO\r
+ ; MULTIPLY TIMES (K-1) OF CORE\r
+PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER ADDED TO\r
+ ; ABOVE REULT TO COMPLETE COMPUTATION\r
+\r
\r
-PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER TO BE\r
- ; MULTIPLIED BY (K-1) OF CORE IN JOB.\r
-PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER TO \r
- ; BE ADDED TO ABOVE RESULT.\r
\r
;INSERT NEW LOCATIONS OF INTEREST SETUP\r
; BY ONCE ONLY CODE HERE FOR DISK SYSTEMS\r
-ODPMXL==<.-ODPTBL-1>B26 ;MAXIMUM ENTRY IN ODPTBL FOR GETTAB UUO\r
-> \r
-\r
+ODPMXL==<.-ODPTBL-1>B26 ;MAX. ENTRY IN ODPTBL FOR GETTAB UUO\r
+>\r
\f;MORE DATA LOCATIONS SETUP AT ASSEMBLY TIME OR ONCE ONLY TIME\r
; BUT NOT OF INTEREST TO USER PROGRAMS\r
\r
\r
XJBPFI: XWD .,0 ;LH FILLED IN WITH EXTERNAL JOBPFI (SEE JOBDAT)\r
; JOBPFI==HIGHEST LOC, IN USER JOB DATA AREA\r
- ; PROTECTED FROM I/O\r
+ ; PROTECTED FROM IO\r
;MONTH TABLE FOR DAYTIME COMMAND PRINTING\r
\r
PMONTB: POINT 6,MONTAB(TAC),5 ;POINTER TO NUMBER OF DAYS INMONTH\r
-MONTAB: EXP ^D30B5+"JAN"\r
- EXP ^D27B5+"FEB"\r
- EXP ^D30B5+"MAR"\r
- EXP ^D29B5+"APR"\r
- EXP ^D30B5+"MAY"\r
- EXP ^D29B5+"JUN"\r
- EXP ^D30B5+"JUL"\r
- EXP ^D30B5+"AUG"\r
- EXP ^D29B5+"SEP"\r
- EXP ^D30B5+"OCT"\r
- EXP ^D29B5+"NOV"\r
- EXP ^D30B5+"DEC"\r
-MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT\r
+MONTAB: EXP ^D30B5+"JAN\r
+ EXP ^D27B5+"FEB\r
+ EXP ^D30B5+"MAR\r
+ EXP ^D29B5+"APR\r
+ EXP ^D30B5+"MAY\r
+ EXP ^D29B5+"JUN\r
+ EXP ^D30B5+"JUL\r
+ EXP ^D30B5+"AUG\r
+ EXP ^D29B5+"SEP\r
+ EXP ^D30B5+"OCT\r
+ EXP ^D29B5+"NOV\r
+ EXP ^D30B5+"DEC\r
+MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT\r
\f;STOP PROCEDURE WHEN SHUTTING DOWN SYSTEM\r
;BECAUSE OF CATOSTROPHIC FAILURE OR ANY OTHER REASON\r
;WRITE OUT DIRECTORIES STILL IN CORE (DISK)\r
;PROCEDURE TO SAVE CRASHED MONITOR ON DECTAPE FOR LATER DEBUGGING UNDER TIME SHARING\r
;OPERATOR SHOULD:\r
; 1. PUSH STOP AND HOLD IT DOWN\r
-; 2. PUSH CONTINUE (APR PI IN PROGRESS SHOULD COME ON)\r
+; 2. PUSH CONTINUE(APR PI IN PROGRESS SHOULD COME ON)\r
; THIS PUTS MACHINE INTO EXEC MODE AND STORES PC OC CRASH\r
; 3. LETUP ON STOP\r
; 4. SET ADDRESS SWITCHES TO 147\r
-; 5. PUSH START (DO NOT PUSH I/O RESET AS IT WILL CLEAR DEVICES)\r
+; 5. PUSH START(DO NOT PUSH IO RESET AS IT WILL CLEAR DEVICES)\r
\r
INTERN APRSTS,PISTS,SYSTOP,CRASHX,SWTSTS,TTYSTS,PTRSTS,TMCSTS\r
INTERN PTPSTS,DLSSTS,DTSSTS,CRSTS,LPTSTS,PLTSTS,TMSSTS,DSKSTS,DSKDTI\r
MOVEI 17,CRSHAC ;SOURCE==0, DESTINATION==CRSHAC\r
BLT 17,CRSHAC+16 ;SO DDT CAN LOOK AT SAVED CRASH LATER\r
\r
+\r
APRSTS: CONI APR,. ;STORE APR STATUS HERE\r
PISTS: CONI PI,. ;STORE PI STATUS HERE\r
SWTSTS: DATAI APR,.\r
DSKDTI: DATAI DSK,.\r
CONO APR,APRRST ;RESET SYSTEM\r
MOVEI PDP,SYSPDL ;SETUP PDP TO SPARE AREA\r
- IFG DSKN, <\r
+ IFG DSKN,<\r
EXTERN DSKSTP\r
PUSHJ PDP,DSKSTP>\r
- HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING)\r
+ HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING)\r
+\r
;ERROR RECOVERY - TRY TO START NULL JOB\r
\r
NULJB1: MOVEI ITEM,0 ;SET JOB NUMBER TO 0\r
JRST NULJOB ;GO RESTORE NULL JOB\r
-\f\r
-\r
-\r
-;COMMON SUBROUTINE RETURNS\r
+\f;COMMON SUBROUTINE RETURNS\r
\r
INTERN CPOPJ,CPOPJ1,DPOPJ,TPOPJ,TPOPJ1,CPOPJ2,IPOPJ1,IPOPJ\r
INTERN CUXIT1,CUXIT,UXIT\r
CPOPJ2: AOS (PDP) ;DOUBLE SKIP SUBROUTINE RETURN\r
CUXIT1: ;OLD SKIP RETURN FOR UUOS\r
CPOPJ1: AOSA (PDP) ;SKIP SUBROUTINE RETURN\r
-DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT I/O STATUS WORD IN DDB\r
+DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT IO STATUS WORD IN DDB\r
UXIT:\r
CUXIT: ;OLD RETURN FOR UUOS\r
CPOPJ: POPJ PDP,\r
IPOPJ: POP PDP,ITEM ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER)\r
POPJ PDP,\r
\r
-\f; SYSTEM BYTE POINTERS\r
+; SYSTEM BYTE POINTERS\r
\r
INTERN PUUOAC,PIOMOD,PJOBN,PUNIT,PJBSTS,PDVTIM,PDVCNT,PCORSZ,COREP\r
INTERN IADPTR\r
PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD\r
PIOMOD: POINT 4,IOS,35 ;MODE BITS\r
PJOBN: POINT 6,DEVCHR(DEVDAT),5 ;DEVICE JOB ASSIGNMENT\r
-PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NUMBER\r
-PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE (QUEUE) CODE\r
+PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO.\r
+PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE(QUEUE) CODE\r
;IN JOB STATUS WORD\r
PDVTIM: POINT 6,DEVCHR(DEVDAT),17 ;TIME IN SECONDS BEFORE DEVICE\r
- ;IS SAID TO BE HUNG\r
-PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTED DOWN EACH SECOND,\r
+ ;IS SAID TO BE HUNG\r
+PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTER DOWN EACH SECOND,\r
;1 TO 0 TRANSITION MEANS HUNG DEVICE\r
-IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NUMBER OF USER CHANNELS INITED\r
- ; ON THIS DEVICE (DECTAPE ONLY)\r
+IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NO. OF USER CHANNELS INITED\r
+ ; ON THIS DEVICE(DECTAPE ONLY)\r
PCORSZ: POINT 8,JBTADR(ITEM),7 ;BYTE POINTER TO LOW OR HIGH SEG CORE SIZE-1\r
\r
COREP: POINT 1,CORTAB ;1 BIT POINTER TO CORE ALLOCATION TABLE\r
\r
- IFG SYS50N, < ;SWAPPING SYSTEM ?\r
+ IFG SYS50N,< ;SWAPPING SYSTEM?\r
INTERN IMGIN,IMGOUT,IMGINT,OUTMSK,INMSK,INLEFT\r
INMSK=000377 ;RH MASK TO IMGIN\r
- INLEFT=12 ;NUMBER OF BITS TO SHIFT TO LEFT JUSTIFY IN RH\r
+ INLEFT=12 ;NO. OF BITS TO SHIFT TO LEFT JUSTIFY IN RH\r
\r
IMGIN: POINT 8,JBTSWP(ITEM),35 ;BYTE POINTER FOR # 1K BLOCKS OF CORE\r
;WHEN JOB OR HIGH SEG NEXT SWAPPED IN\r
; (IE NO DISK SPACE)\r
IMGINT: POINT 8,JBTSWP(DEVDAT),35 ;POINTER TO INCORE IMAGE\r
>\r
-\r
-\f;SPECIAL PROJECT-PROGRAMMER NUMBERS\r
- IFG DSKN, < ;DISK SYSTEM?\r
+\f;SPECIAL PROJECT-PROGRAMMER NOS.\r
+ IFG DSKN,< ;DISK SYSTEM?\r
INTERN CUSPPP,SYSPP,DUMPPP,HELPPP\r
\r
CUSPPP: ;CUSP FILE DIRECTORY, MAKE SEPARATE TAG FROM\r
; MFD(SYSPP) \r
SYSPP: XWD 1,1 ;THE MASTER FILE DIRECTORY PROJECT PROGRAMMER NO.\r
-DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO (CAN READ OF WRITE ANYTHING)\r
-HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED IN ALREADY\r
+DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO.(CAN READ OR WRITE ANYTHING)\r
+HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED INALREADY\r
>\r
\f;DEFINE PI CHANNEL SAVE AND RESTORE ROUTINES IF A DEVICE IS ON THE CHANNEL\r
\r
LIST\r
>\r
\r
-\f;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM (ASGSAV MACRO USED)\r
-\r
- IFN USED1, <CHAN 1>\r
- IFN USED2, <CHAN 2>\r
- IFN USED3, <CHAN 3>\r
- IFN USED4, <CHAN 4>\r
- IFN USED5, <CHAN 5>\r
- IFN USED6, <CHAN 6>\r
- IFN USED7, <CHAN 7>\r
+\f;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM(ASGSAV MACRO USED)\r
\r
-\r
-\r
-;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNELS NOT USED\r
+ IFN USED1,<CHAN 1>\r
+ IFN USED2,<CHAN 2>\r
+ IFN USED3,<CHAN 3>\r
+ IFN USED4,<CHAN 4>\r
+ IFN USED5,<CHAN 5>\r
+ IFN USED6,<CHAN 6>\r
+ IFN USED7,<CHAN 7>\r
+;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNEL NOT USED\r
\r
DEFINE NULL (PI)<\r
XLIST\r
LIST\r
>\r
\r
- IFE USED1, <NULL 1>\r
- IFE USED2, <NULL 2>\r
- IFE USED3, <NULL 3>\r
- IFE USED4, <NULL 4>\r
- IFE USED5, <NULL 5>\r
- IFE USED6, <NULL 6>\r
- IFE USED7, <NULL 7>\r
-\f;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS (PDP-10 ONLY)\r
-;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED (JSR UUO2)\r
-;OP CODE 100 (UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION\r
+ IFE USED1,<NULL 1>\r
+ IFE USED2,<NULL 2>\r
+ IFE USED3,<NULL 3>\r
+ IFE USED4,<NULL 4>\r
+ IFE USED5,<NULL 5>\r
+ IFE USED6,<NULL 6>\r
+ IFE USED7,<NULL 7>\r
+\f;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS(PDP-10 ONLY)\r
+;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED(JSR UUO2)\r
+;OP CODE 100(UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION\r
;USED IN CONJUNCTION WITH TRPSET UUOWHICH IS SOON TO BE REPLACED\r
;WITH SOME KNAVE-PROOF REAL TIME UUOS. THIS CODE IS HERE ONLY\r
;BECAUSE MANUAL DESCRIBES TRPSET AND TRPJEN UUOS.\r
-;TRPJEN HAS BEEN REPLACED WITH OPCODE 100 (UJEN).\r
+;TRPJEN HAS BEEN REPLACED WITH OPCODE 100(UJEN).\r
;CALL: UGEN U ;WHERE U CONTAINS PC STORED BY INTERRUPT JSR\r
\r
INTERN UUO2\r
\r
UUO2: 0 ;USER PC STORE HERE BY JSR\r
EXCH TAC,UUO2 ;GET USER PC, SAVE TAC\r
-IFN FTTRPSET, <\r
- TLNN TAC,UIOMOD ;USER I/O MODE ON ?\r
+IFN FTTRPSET,<\r
+ TLNN TAC,UIOMOD ;USER IO MODE ON?\r
JRST UUOER2 ;NO, TREAT AS AN ILLEGAL INSTRUCTION AND PRINT MESS.\r
HLL TAC,SIXTY ;YES, GET UNIMPLEMENTED OPCODE WHICH TRAPPED\r
- TLNE TAC,677777 ;IS IT OPCODE 100 (UJEN)?\r
+ TLNE TAC,677777 ;IS IT OPCODE 100(UJEN)?\r
JRST UUOER1 ;NO, TREAT AS ILLEGAL INSTRUCTION\r
MOVE TAC,SIXTY ;YES, GET EFFECTIVE ADDRESS\r
ADD TAC,JOBADR ;ADD RELOCATION FOR CURRENT JOB\r
EXCH TAC,UUO2 ;RESTORE TAC, AND STORE PC\r
JEN @UUO2 ;DISMISS INTERRUPT\r
\r
-UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER I/O MODE BACK ON\r
+UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER IO MODE BACK ON\r
>\r
UUOER2: MOVEM TAC,UUO0 ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED\r
SETOM FORTY ;MAKE IT LOOK LIKE AN ILLEGAL INSTRUCTION\r
; TRAPPED TO 40\r
SKIPA TAC,UUO2 ;RETORE TAC AND FALL INTO REGULAR UUO HANDLER\r
-\f;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77 (0-77 ON PDP-6)\r
+\f;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77(0-77 ON PDP-6)\r
\r
INTERN UUO0\r
EXTERN UUOUSR,UUOSY1,ERROR\r
UUO0: 0 ;JSR HERE FROM LOC 41\r
MOVEM 17,USRSAV ;SAVE 17\r
MOVE 17,UUO0 ;GET PROCESSOR FLAGS\r
- TLNN 17,USRMOD ;IS UUO FROM MONITOR ?\r
+ TLNN 17,USRMOD ;IS UUO FROM MONITOR?\r
JRST UUOSY1 ;YES, DO NOT SAVE ACS\r
- SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA ?\r
+ SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA?\r
JSP DAT,ERROR ;NO, MUST BE UUO DURING NULL JOB\r
; PRINT ERROR IN MONITOR\r
-IFE PDP10N, < ;FOR PDP-6 OPCODES 1-37\r
+IFE PDP10N,< ;FOR PDP-6 OPCODES 1-37\r
EXCH TAC,FORTY ;SAVE TAC, PICK UP UUO\r
- TLNN TAC,740000 ;IS THIS SYSTEM UUO ?\r
- TLNN TAC,077000 ;NO, IS IT 0 UUO ?\r
+ TLNN TAC,740000 ;IS THIS SYSTEM UUO?\r
+ TLNN TAC,077000 ;NO, IS IT 0 UUO?\r
JRST UUOSYS ;YES\r
MOVEM TAC,40(17) ;STORE UUO IN USER'S 40\r
HRRZ TAC,41(17) ;PICK UP ADR OF USER'S JSR\r
- JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO****UWA PATCH\r
- HLL TAC,UUO0 ;USER PD FLAGS (RESTORED ON RETURN)\r
+ JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO\r
+ HLL TAC,UUO0 ;USER PD FLAGS(RESTORED ON RETURN)\r
MOVEI 17,(TAC) ;17 NOW HAS REL.ADR+1 OF USER JSR\r
- CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS ?\r
+ CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS?\r
JRST UUOSY0 ;ERROR, JSR EFF. ADDR. OUTSIDE USER AREA\r
HRRI TAC,1(TAC) ;YES, INCREMENT PC.\r
EXCH TAC,UUO0 ;SET UP RETURN TO USER IN UUO0\r
; PICKUP USERS FLAGS,PC\r
- ADD 17,JOBADR ;MAKE REL. ADDRESS INTO ABSOLUTE ADDRESS\r
+ ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR.\r
MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR\r
MOVE TAC,FORTY ;RESTORE TAC\r
MOVE 17,USRSAV ;RESTORE 17\r
- JRST 2,@UUO0 ;RETURN TO USER (RESTORING FLAGS)\r
+ JRST 2,@UUO0 ;RETURN TO USER(RESTORING FLAGS)\r
\r
UUOSY0: MOVE 17,JOBADR ;SETUP 17 FOR LOW SEGMENT RELOCATION\r
-UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO (FORTY)\r
-> \r
- JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOCATION 0-17\r
+UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO(FORTY)\r
+>\r
+ JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOC. 0-17\r
; AND DISPATCH ON UUO\r
-\f;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUTINES FROM MONITOR LIBRARY TAPE\r
+\f;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUT. FROM MONITOR LIBRARY TAPE\r
;IF THERE IS ONE\r
\r
\r
;ALWAYS LOAD CLOCK1,COMCON,CORE1,ERRCON,JOBDAT,ONCE,PATCH,SYSMAK,UUOCON\r
-\r
EXTERNAL CLOCK1,COMCON,CORE1,ERRCON,DATJOB,ONCE,PATCH,SYSMAK,UUOCON\r
-\r
;LOAD DDT\r
- IFG DDTN, <EXTERN DDTX>\r
- IFE DDTN, <XP DDTEND,0 ;ONCE REFERENCES END OF DDT>\r
-\r
-;LOAD SCHEDULER FOR NON-SWAPPING OR SWAPPING SYSTEM\r
+ IFG DDTN,<EXTERN DDTX>\r
+ IFE DDTN,<XP DDTEND,0 ;ONCE REFERENCES END OF DDT>\r
+;LOAD APPROPRIATE SCHEDULER FOR NON-SWAP OR SWAPPING SYSTEMS\r
IFG SYS40N,<EXTERN XCKCSS> ;CLKCSS\r
IFG SYS50N,<EXTERN XCKCSW> ;SCHED\r
\r
-;LOAD EITHER SEGCON (2REG SOFTWARE) OR NULSEG (1 REG SOFTWARE)\r
+;LOAD EITHER SEGCON(2REG SOFTWARE) OR NULSEG(1 REG SOFTWARE)\r
; UNLESS USER HAS EDITTED S WITH FT2REL=0 SO ALL PUSHJ'S\r
-; TO SEGCON (NULSEG) ARE REMOVED\r
+; TO SEGCON(NULSEG) ARE REMOVED\r
\r
-IFN FT2REL, <\r
+IFN FT2REL,<\r
IFG KT10AN, <EXTERN SEGCON>\r
-\r
IFE KT10AN, <EXTERN NULSEG>\r
>\r
\r
-\r
;APR AND PI BITS\r
INTERN PION,PIOFF,REQCLK,PICLK,APRCLR,APRCLE,APRNUL,APRRST,NXM,APRFOV\r
\r
CLKBIT==1\r
- REPEAT 7-CLKCHN, <CLKBIT==CLKBIT*2>\r
+ REPEAT 7-CLKCHN,<CLKBIT==CLKBIT*2>\r
PION==200 ;CONO PI,PION TURNS PI SYSTEM ON\r
PIOFF==400 ;TURN IT OFF\r
REQCLK==1B24+CLKBIT ;REQUEST INTERRUPT ON LOW PRIORITY CLK CHANNEL\r
APRCLE==431550+APRCHN ;CLEAR ALL APR ERROR BITS\r
; AND DISABLE FOV AND AR OVF\r
APRNUL==433550+APRCHN ;RESET APR FOR NULL JOB\r
- ; CLEAR EVERYTHING BUT DON'T I/O RESET\r
- APRRST==APRNUL+200000 ;RESET APR FOR SYSINI (I/O RESET TOO)\r
- NXM==10000 ;NON-EX MEM (APR STATUS WORD)\r
+ ; CLEAR EVERYTHING BUT DONT IO RESET\r
+ APRRST==APRNUL+200000 ;RESET APR FOR SYSINI(IO RESET TOO)\r
+ NXM==10000 ;NON-EX MEM I(APR STATUS WORD)\r
IFG PDP10N,<APRFOV==100 ;FLOADTING OVERFLOW CAN BE ENABLED ON PDP10\r
; FOR USER TRAPPING>\r
IFE PDP10N,<APRFOV==000 ;PC CHANGE CANNOT BE ENABLED ON PDP-6, BEACUSE\r
\r
;MAKE SURE THAT PROPER VERSION OF FEATURE SWITCH FILES WERE USED TO ASSEMBLE\r
;THE REST OF THE MONITOR\r
-;THE LOADER WILL PRINT NUL. DEF. GLOBAL IF A MISTAKE HAS BEEN MADE\r
+;THE LOADER WILL PRINT MUL. DEF. GLOBAL IF A MISTAKE HAS BEEN MADE\r
XP FTDISK,-DSKN\r
XP FTSWAP,-SYS50N\r
XP FTRC10,-RD10N\r
\r
- IFG KT10AN,<XP FT2REL,-1> ;IF Z RELOC SOFTWARE, THEN FTZREI MUST BE -1\r
+ IFG KT10AN,<XP FT2REL,-1> ;IF Z RELOC SOFTWARE, THEN FTZREL MUST BE -1\r
IFE COREN,<COREN=^D256 ;NO RESTRICTION IF 0 TYPED>\r
- XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CRE FOR ANY SINGLE USER\r
- ; ONCE ONLY CODE CAN ALTER THIS VALUE\r
- ; (PATCH RH CORLIM IN SYSIM)\r
-\f;SCANNER ENTRY POINTS AND BIT DEFINITIONS\r
-\r
- IFG DLSN, <EXTERN DLSINT> ;DATA LINE SCANNER\r
- IFG CCIN, <EXTERN CCIINT> ;DA-10 PDP-8 680\r
- IFG DCSN, <EXTERN DCSINT> ;630 DATA COMMUNICATIONS SYS\r
+ XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CORE FOR ANY SINGLE USER\r
+ ; ONCE ONLY CODE CAN ALTER THIS VALUE\r
+ ; (PATCH RH CORLIM IN SYSIM)\r
+\f\r
+;SCANNER ENTRY POINTS AND BIT DEFINITIONS\r
\r
- IFG FULLN, <EXTERN SCNSRF> ;FULL DUPLEX SOFTWARE ENTRY POINT\r
- IFE FULLN, <EXTERN SCNSRH> ;HALF DUPLEX SOFTWARE ENTRY POINT\r
+ IFG DLSN,<EXTERN DLSINT> ;DATA LINE SCANNER\r
+ IFG CCIN,<EXTERN CCIINT> ;DA-10 PDP-8 680\r
+ IFG DCSN,<EXTERN DCSINT> ;630 DATA COMMUNICATIONS SYS\r
\r
- IFG FULLN, <\r
+ IFG FULLN,<EXTERN SCNSRF> ;FULL DUPLEX SOFTWARE ENTRY POINT\r
+ IFE FULLN,<EXTERN SCNSRH> ;HALF DUPLEX SOFTWARE ENTRY POINT\r
+ IFG FULLN,<\r
INTERN LINTAB\r
\r
-LINTAB: ;LINE CHARACTERISTICS BITS (NOT CLEARED ON SYSTEM STARTUP)\r
+LINTAB: ;LINE CHARACTERISTIC BITS (NOT CLEARED ON SYSTEM STARTUP)\r
\r
-;TELETYPE LINE CHARACTERISTICS (LH OF LINTAB)\r
+;TELETYPE LINE CHARACTERISTICS(LH OF LINTAB)\r
;USED IN SCNSRF ALSO\r
\r
XP PTYLIN,400000 ;PSEUDO TTY LINE\r
IFG EDITN,< ;HAS COMMON.MAC BEEN EDITED TO DEFINE TTY LINE CHAR.\r
; SO MONGEN TYPE-IN REDUCED?\r
;IF NO APR NUMBER, AND THIS IS NOT EDITED FOR THE CUSTOMER,\r
-; MAKE ALL LIENS JUST BE MODEL 33 TELETYPES\r
+; MAKE ALL LINES JUST BE MODEL 33 TELETYPES\r
\r
-IFE APRN,<REPEAT TTPLEN,<0>>\r
-\r
-IFE APRSN-2,<\r
-;FOLLOWING LINE DEFINITIONS FOR DEC PDP12 #2\r
+IFE APRSN,<REPEAT TTPLEN,<0>>\r
+\fIFE APRSN-2,<\r
+;FOLLOWING LINE DEFINITIONS FOR DEC PDP10 #2\r
\r
XWD T35,0 ;TTY0\r
XWD T35,0 ;TTY1\r
XWD T35,0 ;TTY2\r
XWD 0,0 ;TTY3\r
-REPEAT 3,< XWD T35,0>;TTY4-6\r
+REPEAT 3,< XWD T35,0> ;TTY4-6\r
XWD T35+TTYRMT,0 ;TTY7 - REMOTE 35\r
XWD DSDTLN,0 ;TTY10\r
XWD DSDTLN+HLFDPX,0 ;TTY11\r
XWD DSDTLN,0 ;TTY12\r
-REPEAT 4,< XWD T35,0>;TTY13-16\r
+REPEAT 4,< XWD T35,0> ;TTY13-16\r
+ XWD TTYRMT,0 ;TTY17 - REMOTE\r
REPEAT 8,<XWD TTYRMT,0>\r
>\r
-\r
IFE APRSN-^D40,<\r
;THIS CONFIGURATION FOR DEC SYSTEM NUMBER 40\r
\r
REPEAT ^D8,< XWD DSDTLN,0 ;DATASET>\r
>\r
\r
-; CTY AND PTY SET BY SCNSER\r
-> ;END PRE-EDITED LINE CHARACTERISTICS\r
-\f\r
+; CTY AND PTY SET BY SCNSRF\r
+> ;END PRE-EDITED LINE CHARACTERISTICS\r
+\fIFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG?\r
\r
-IFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG?\r
-\r
-DEFINE GENLIN(LIN)<\r
+DEFINE GENLIN (LIN)<\r
IFNDEF DSD'LIN,<DSD'LIN=0> ;DATA SET?\r
IFNDEF TAB'LIN,<TAB'LIN=0> ;HARDWARE TABS?\r
IFNDEF RMT'LIN,<RMT'LIN=0> ;REMOTE?\r
IFNDEF HLF'LIN,<HLF'LIN=0> ;HALF DUPLEX SCANNER?\r
- XWD DSD'LIN*TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0\r
+ XWD DSD'LIN*DSDTLN+TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0\r
>\r
\r
REPEAT HGHLIN+1,<LINE=.-LINTAB ;DEFINE LINE NUMBER\r
- GENLIN \LIN>\r
+ GENLIN \LINE>\r
+\r
+\r
>\r
- LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY;S\r
+ LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY'S\r
\r
-> ;END OF FULL DUPLEX CONDITIONAL\r
+\r
+> ;END OF FULL DUPLEX CONDITIONAL\r
\r
INTERN FSNCHN,SCNON,SCNOFF\r
\r
- FSNCHN==SCNCHN*101 ;CHANNEL ASSIGNMENT FOR FULL DUPLEX SCN.\r
- SCNBIT==<1_<7-SCNCHN>>\r
+ FSNCHN==SCNCHN*101 ;CHANNEL ASSIGN. FOR FULL DUPLEX SCN.\r
+ SCNBIT==1\r
+ REPEAT 7-SCNCHN,<SCNBIT==SCNBIT*2>\r
SCNON==2000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL ON\r
SCNOFF==1000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL OFF\r
- IFG TABSN, <TTMODL=-1> ;HARDWARD TABS\r
- IFE TABSN, <TTMODL=0>\r
-XP SCNNUM,HGHLIN+1 ;# OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG)\r
+ IFG TABSN,<TTMODL=-1> ;HARDWARD TABS\r
+ IFE TABSN,<TTMODL=0>\r
+XP SCNNUM,HGHLIN+1 ;NO. OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG)\r
\f;MAGTAPE ENTRY POINT AND BIT DEFINITIONS\r
\r
- IFG MTAN, <EXTERN MTASRX> ;TM10 ENTRY POINT\r
- IFG MTCN, <EXTERN MTCSR6> ;PDP-6 MAGTAPES ENTRY POINT\r
-\r
- IFG MTAN, <\r
-\r
- INTERN MMTSIZ,MTALOC,MTLOC1,MTBOTH,MTFLAG\r
+ IFG MTAN,<EXTERN MTASRX> ;TM10 ENTRY POINT\r
+ IFG MTCN,<EXTERN MTCSR6> ;PDP-6 MAGTAPES ENTRY POINT\r
\r
- MMTSIZ==-MTSIZ\r
- MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION\r
- MTLOC1==MTALOC+1 ;NEXT LOCATION\r
- MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS\r
- MTFLAG==400+MTACHN*10\r
+ IFG MTAN,<\r
+ INTERN MTALOC,MTLOC1,MTBOTH,MTFLAG,MMTSIZ\r
+ MMTSIZ==-MTSIZ\r
+ MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION\r
+ MTLOC1==MTALOC+1 ;NEXT LOCATION\r
+ MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS\r
+ MTFLAG==400+MTACHN*10\r
>\r
-\r
- IFG MTCN, <\r
-\r
- INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
-\r
- DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOCATION\r
- DCLOC1==DCLOC+1 ;NEXT LOCATION\r
+ IFG MTCN,<\r
+ INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
+ DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC\r
+ DCLOC1==DCLOC+1 ;NEXT LOCATION\r
DCBIT==1\r
- REPEAT 7-DCTCHN, <DCBIT==DCBIT*2>\r
- DCON==2000+DCBIT ;TURN DC PI CHANNEL ON\r
- DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF\r
- DCIN=4010+DCTCHN ;SET DATA CHANNEL FOR INPUT\r
- DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT\r
+ REPEAT 7-DCTCHN,<DCBIT==DCBIT*2>\r
+ DCON==2000+DCBIT ;TURN DC PI CHANNEL ON\r
+ DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF\r
+ DCIN==4010+DCTCHN ;SET DC FOR INPUT\r
+ DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT\r
>\r
-\f\r
-;DECTAPE ENTRY POINT AND BIT DEFINITIONS\r
+\f;DECTAPE ENTRY POINT ADN BIT DEFINITIONS\r
\r
SAVN==1 ;WE ONLY SUPPORT NEW FORMAT NOW\r
- ;MONGEN NO LONGER ASKS QUESTION,\r
+ ;MONGEN NO LONGER ASKS QUESTION.\r
\r
- IFG DTAN, <EXTERN DTASRN> ;TD10 WITH NEW FORMAT\r
- IFG DTCN, <\r
- IFG SAVN, <EXTERN DTCSRN> ;556 WITH NEW FORMAT\r
- IFE SAVN, <EXTERN DTCSRO> ;556 WITH OLD FORMAT\r
+ IFG DTAN,<EXTERN DTASRN> ;TD10 WITH NEW FORMAT\r
+ IFG DTCN,<\r
+ IFG SAVN,<EXTERN DTCSRN> ;556 WITH NEW FORMAT\r
+ IFE SAVN,<EXTERN DTCSRO> ;556 WITH OLD FORMAT\r
>\r
- IFG DTAN, < ;DEFINE SYMBOLS IF PDP-10 DECTAPES (TD10)\r
- INTERNAL DTALOC,DTALC2,DTBOTH,DTTURN\r
+ IFG DTAN,< ;DEFINE SYMBOLS IF PDP-10 DECTAPES(TD10)\r
+ INTERN DTALOC,DTALC2,DTBOTH,DTTURN\r
DTALOC==40+2*DTDCHN ;BLKI/BLKO LOCATION\r
- DTALC2==DTALOC+1 ;NEXT LOCATION\r
+ DTALC2==DTALOC+1 ;NEXT LOCATION\r
DTBOTH==DTDCHN*10+DTACHN\r
DTTURN==300200+DTBOTH\r
>\r
- IFG DTCN, < ;DEFINE SYMBOLS IF PDP-6 DECTAPES (556)\r
- INTERNAL DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
+ IFG DTCN,< ;DEFINE SYMBOLS IF PDP-6 DECTAPES(556)\r
+ INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT\r
DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC\r
DCLOC1==DCLOC+1 ;NEXT LOCATION\r
DCBIT==1\r
- REPEAT 7-DCTCHN, <DCBIT==DCBIT*2>\r
- DCON==2000+DCBIT ;TURN DC PI CHANNEL ON\r
- DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF\r
- DCIN==4010+DCTCHN ;SET DATA CHANNEL FOR INPUT\r
- DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT\r
+ REPEAT 7-DCTCHN,<DCBIT==DCBIT*2>\r
+ DCON==2000+DCBIT ;TURN DC PI CHANNEL ON\r
+ DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF\r
+ DCIN==4010+DCTCHN ;SET DC FOR INPUT\r
+ DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT\r
>\r
-\r
;DEFINE SAVE MODE AND EXTENSION FOR OLD OR NEW FORMAT\r
\r
- INTERNAL SAVDMP\r
- IFE SAVN, <XP SAVMOD,17\r
+ INTERN SAVDMP\r
+ IFE SAVN,<\r
SAVDMP==<SIXBIT / DMP/> ;EXTENSION FOR SAVED FILES == "DMP"\r
>\r
- IFN SAVN, <\r
+ IFN SAVN,<\r
SAVDMP==<SIXBIT / SAV/> ;EXTENSION FOR SAVED FILES == "SAV"\r
>\r
\f;DISPLAY AND LITE PEN\r
IFG DISN,<\r
IFG T340N,<EXTERN DIS340> ;TYPE 340 ENTRY POINT\r
IFE T340N,<EXTERN DIST30> ;TYPE 30 ENTRY POINT\r
- INTERN DISBLK,DISJSR,OFFDIS,DISPON,DISPOF\r
+ INTERN DISBLK,DISJSR,ONDIS,NONDIS,OFFDIS,DISPON,DISPOF\r
DISBLK==40+2*DISCHN ;BLKI/BLKO LOCATION\r
DISJSR==DISBLK+1\r
ONDIS==100+10*PENCHN+DISCHN\r
NONDIS==10*PENCHN+DISCHN\r
OFFDIS==0\r
DISBIT==1\r
- REPEAT 7-DISCHN, <DISBIT==DISBIT*2>\r
+ REPEAT 7-DISCHN,<DISBIT==DISBIT*2>\r
DISPON==2000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL ON\r
DISPOF==1000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL OFF\r
>\r
+\r
+\r
\f;LINE PRINTER ENTRY POINT AND DDB DEFINITIONS\r
\r
IFG LPTN, <\r
JRST .-1 ;(-3) GO TO NEXT SKIP CHAIN ELEMENT\r
MOVEM DEVDAT,LP'N'SV1 ;(-2) SAVE DEVDAT IN CHANNEL SAVE AREA\r
JSP DEVDAT,LPTINT ;(-1) SET UP DDB ADDRESS AND BRANCH\r
+\r
LP'N'DDB:\r
LP'N'NAM: \r
- \r
- IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME>\r
- IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME>\r
- XWD ^D60*HUNGST,<N>B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS\r
+ IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME >\r
+ IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME >\r
+ XWD ^D60*HUNGST,<N>B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS\r
0 ;( 2) DEVICE I/O STATUS\r
XWD 0,LPTDSP ;( 3) LH=DDB LINK, RH=DSP TABLE ADDR.\r
LPTMOD==1_A+1_AL+1_I ;LPT LEGAL MODES\r
\r
MOVE DEVDAT,LP'N'SV1 ;(16) RESTORE DEVDAT AND\r
JEN @LP'N'CHL ;(17) DISMISS INTERRUPT\r
- 0 ;(20) SAVE LOCATION FOR DAT\r
+\r
+ 0 ;(20) SAVE LOCATION FOR TAC\r
+\r
CONSZ LP'N,LPTECM ;(21) THE REST OF THE DDB CONTAINS\r
CONSO LP'N,LPTDON ;(22) THE ACTUAL I/O INSTRUCTIONS\r
- CONSO LP'N,(DAT) ;(23) USED BY THE COMMON SERVICE\r
- CONSZ LP'N,(DAT) ;(24) ROUTINE TO CONTROL A LINE\r
- CONI LP'N,DAT ;(25) PRINTER. THEY ARE EXECUTED\r
- CONO LP'N,(DAT) ;(26) BY MEANS OF AN XCT INSTRUCTION\r
- DATAO LP'N,(DAT) ;(27) INDEXED TO THE PROPER DDB\r
+ ; USED BY THE COMMON SERVICE\r
+ CONSO LP'N,(TAC) ;(23) ROUTINE TO CONTROL A LINE\r
+ CONSZ LP'N,(TAC) ;(24) PRINTER. THEY ARE EXECUTED\r
+ CONI LP'N,TAC ;(25) BY MEANS OF AN XCT INSTRUCTION\r
+ CONO LP'N,(TAC) ;(26) INDEXED TO THE PROPER DDB\r
+ DATAO LP'N,(TAC) ;(27)\r
BLKO LP'N,LP'N'PTR ;(30)\r
\r
- LIST ;TURN LISTING BACK ON AFTER EXPANSION\r
-\f\r
+ LIST ;TURN LISTING BACK ON DURING EXPANSION\r
>\r
- EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP\r
\r
- LPT2=234 ;DEVICE SELECT CODE FOR SECOND LPT\r
+ EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP\r
\r
- IFNDEF LP0, <LP0=LPT> ;DEFINE STANDARD MNEMONIC DEFINITIONS\r
- IFNDEF LP1, <LP1=LPT2> ; BUT ALLOW FOR OVERRIDE\r
+ LPT2=524 ;DEVICE SELECT CODE FOR SECOND LPT\r
\r
- $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE\r
- ; MACRO GENERATION\r
+ IFNDEF LP0, <LP0=LPT> ;DEFINE STANDARD MNEMONIC DEFINITIONS\r
+ IFNDEF LP1, <LP1=LPT2> ; BUT ALLOW FOR OVERRIDE\r
\r
+ $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE\r
+ ; MACRO GENERATION\r
\r
- REPEAT LPTN, <\r
\r
- LPTDDB \$LPNUM\r
- $LPNUM=$LPNUM+1\r
+ REPEAT LPTN, <\r
+\r
+ LPTDDB (\$LPNUM)\r
+ $LPNUM=$LPNUM+1\r
+ >\r
+\r
>\r
\r
->\r
\r
\f;CARD READER ENTRY POINT AND BITS\r
\r
- IFG CDRN, <\r
- IFG CR10N, <EXTERN CDRSRX> ;CR10 ENTRY POINT\r
- IFE CR10N, <EXTERN CDRSR6> ;PDP-6 CARD READER\r
- INTERNAL CDRBTS\r
+ IFG CDRN,<\r
+ IFG CR10N,<EXTERN CDRSRX> ;CR10 ENTRY POINT\r
+ IFE CR10N,<EXTERN CDRSR6> ;PDP-6 CARD READER\r
+ INTERN CDRBTS\r
CDRBTS==1670+CDRCHN\r
->\r
+ >\r
\r
\r
;CARD PUNCH ENTRY POINT\r
\r
IFG PLTN,<EXTERN PLTSER>\r
\r
+\r
;PAPER TAPE READER ENTRY POINT AND MASK\r
\r
- IFG PTRN, <EXTERN PTRSER ;SAME ROUTINE FOR PDP-6 AND PDP-10 READER\r
+ IFG PTRN,<EXTERN PTRSER ;SAME ROUTINE FOR PDP-6 AND PDP-10 READER\r
INTERN PTRMSK\r
- IFG PDP10N, <PTRMSK==0> ;MASK==0 IF PDP-10 READER\r
- IFE PDP10N, <PTRMSK==777777> ;MASK==777777 FOR PDP-6 READER\r
+ IFG PDP10N,<PTRMSK==0> ;MASK==0 IF PDP-10 READER\r
+ IFE PDP10N,<PTRMSK==777777> ;MASK==777777 FOR PDP-6 READER\r
>\r
\r
\r
;PAPER TAPE PUNCH ENTRY POINT\r
\r
IFG PTPN,<EXTERN PTPSER>\r
-\f;DISK ENTRY POINTS AND BITS\r
\r
\r
+\f;DISK ENTRY POINTS AND BITS\r
+\r
IFG DSKN,<\r
INTERN DSKBIT,DCBBIT,DSKON,DSKOFF\r
DCBBIT==0 ;0 UNLESS DATA PRODUCTS DISK(SEE BELOW)\r
DSKBIT==1 ;LOW PRIORITY DISK PI CHANNEL\r
REPEAT 7-DSKCHN,<DSKBIT==DSKBIT*2>\r
DSKON==2000+DSKBIT ;CONO PI, TURN DISK CHANNEL ON\r
- DSKOFF=1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF\r
+ DSKOFF==1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF\r
IFG RD10N,< ;BURROUGHS DISK\r
- EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSION\r
+ EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSIONS OF\r
; DSKINT,DSKSRB,ONCEB\r
IFG SYS50N,<EXTERN RCXSKD> ;LOAD EARLIER VERSION OF SCHEDB\r
>\r
IFG DPDN,< ;IF DATA PRODUCTS DISK\r
- EXTERNAL LODINT ;LOAD DPDINT\r
- EXTERNAL DSKSRD ;LOAD ONCE=DSKSR FOR DATA PROD DISK\r
-\r
+ EXTERNAL LDDINT ;LOAD DPDINT\r
+ EXTERNAL DSKSRD ;LOAD ONCE+DSKSR FOR DATA PROD DISK\r
INTERN DCBBIT,DSKX8,DSKX9\r
DCBBIT==1\r
REPEAT 7-DCBCHN,<DCBBIT==DCBBIT*2>\r
- DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO OCS\r
+ DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO LOCS\r
DSKX9==DSKX8+1\r
>\r
IFG RA10N,< ;IF BRYANT DISK\r
>\r
>\r
\r
+\r
;PSEUDO TTY ENTRY POINT\r
\r
- IFE PTYN, <INTERN PTYPE,PTMNMZ,PTYOW,PTMNMD\r
+ IFE PTYN,<INTERN PTYPE,PTMNMZ,PTYOW,PTMNMD\r
PTYPE:PTMNMZ:PTYOW:PTMNMD: HALT CPOPJ ;HALT IF SCNSER CALL PTY ROUTINES\r
; BECAUSE NONE LOADED\r
>\r
- IFG PTYN, <\r
+ IFG PTYN,<\r
IFE FULLN,<EXTERN PTYSRH> ;HALF DUPLEX SCANNER SOFTWARE\r
IFG FULLN,<EXTERN PTYSRF> ;FULL DUPLEX SCANNER SOFTWARE\r
>\r
LIT\r
RELOC .-COMORG ;NOW MAKE RELOCATABLE SO NEXT PROGRAM WILL BE LOADED\r
- ; IMMEDIATELY AFTER THIS ONE\r
-\r
-COMEND: END\r
+ ; IMMMEDIATELY AFTER THIS ONE\r
\r
+COMEND: END\r
MESCMD: SIXBIT /?COMMAND ERROR#/\r
ERRSW: MOVEI BP,MESSW\r
PUSHJ P,TYPEIT\r
- JRST ST\r\r\r
+ JRST ST\r
MESSW: SIXBIT /?SWITCH ERROR#/\r
ERRIN1: SKIPA T,IDEV\r
ERRIN2: MOVE T,ODEV\r
PUSHJ P,VERIFY ;VERIFY AND EXIT THIS PAGE\r
VERONE: SETSTS 1,136 ;SET\r
SETSTS 2,136 ;DUMP MODE\r
- MOVEI LOC,1 ;START AT BLOCK 1\r\r\r
+ MOVEI LOC,1 ;START AT BLOCK 1\r
VERSET: MOVE V1,LISTV1 ;IOWDS\r
MOVE V2,LISTV2 ;TO ACS\r
USETI 1,(LOC) ;MASTER\r
CAIN TYPE,1 ;BLKTYP=1?\r
PUSH I,W ;YEP, SAVE THE BITS\r
CAIG TYPE,7 ;ILL-BLK-TYP?\r
- JRST @TYPTAB(TYPE) ;NO, OFF TO BLOCK HANDLER\r\r\r
+ JRST @TYPTAB(TYPE) ;NO, OFF TO BLOCK HANDLER\r
\r
TTCALL 3,[ASCIZ /?ILLEGAL BLOCK TPYE\r
/]\r
TRNN CNT,-1 ;\r
JRST NEWBLK ;\r
PUSHJ P,GETWRD ;\r
- AOBJN CNT,BLK4A+1 ;PASS/IGNORE \r
+ AOBJN CNT,.-1 ;PASS/IGNORE \r
TRNN CNT,-1 ;\r
JRST NEWBLK ;\r
PUSHJ P,GETWRD ;\r
TITLE DLSINT - INT. SERV. FOR DLS (DATA LINE SCANNER DC10)\r
-SUBTTL M.FREDRIKSEN/RCC TS 01 JUN 69 V005\r
+SUBTTL M. FREDRIKSEN/RCC TS 01 JUN 69 V005\r
XP VDLSIT,005\r
;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
\r
;MODULAR HARDWARE INTERFACE WITH EITHER SCNSER OR TTYSER\r
\r
-EXTERN TYPX\r
+EXTERNAL TYPX\r
\r
IFE FTTTYSER,<XP FULTWX,200000>\r
\r
\r
\r
\r
-DLS=240 ;DC10 DEVICE NUMBER\r
-;BITS IN CHREC TO COMMUNCATE WITH DLS\r
+DLS=240 ;DC10 DEVICE NUMBER\r
+;BITS IN CHREC TO COMMUNICATE WITH DLS\r
\r
-USDRLN=100 ;USE DIRECTED LINE NUMBER\r
-TDSABL=400 ;TRANSMIT DISABLE\r
-RCVBIT=400 ;RECEIVE BIT AFER DATAI DLS,CHREC\r
+USDRLN=100 ;USE DIRECTED LINE NUMBER\r
+TDSABL=400 ;TRANSMIT DISABLE\r
+RCVBIT=400 ;RECEIVE BIT AFTER DATAI DLS,CHREC\r
\f\r
;DEVICE DEPENDENT PORTION OF INITIALIZATION CODE\r
;CALL: MOVEI TAC,CHANNEL NUMER\r
\r
INTERNAL SCNINI\r
DLSINI:\r
-SCNINI: CONO DLS,40 ;INIT DLS COMPLETELY (I/O/RESET)\r
+SCNINI: CONO DLS,40 ;INIT DLS COMPLETELY (I/O RESET)\r
CONO DLS,(TAC) ;ASSIGN PI CHANNEL NUMBER\r
POPJ PDP,\r
\r
-;SCANNER INTERRUPT SERVICE ROUTINE\r
+;SCANNER INTERRUPT SERVICE ROUTINE.\r
\r
ENTRY DLSINT\r
\r
EXTERNAL SCNSAV,TCONLN,TTYTAB,XMTINT,TYPE,INUS2,RECINT\r
\r
DLSINT:\r
-SCNINT: CONSO DLS,30 ;ANY INTERRUPTS ON DLS\r
+SCNINT: CONSO DLS,30 ;ANY INTERRUPTS ON DLS?\r
JRST SCNINT ;NO\r
JSR SCNSAV\r
DATAI DLS,CHREC ;GET CHARACTER & LINE INFO\r
CAILE LINE,TCONLN ;PSEUDO CONSOLE?\r
JRST INJEST ;YES\r
CAIN LINE,TCONLN ;IS IT THE CTY ?\r
- JRST INUS2 ;YES, ACCPT CHAR AND PROCESS\r
+ JRST INUS2 ;YES, ACCEPT CHAR AND PROCESS\r
JRST TYPE ;NO, ECHO CHAR ON FULL DUPLEX\r
;BEFORE PROCESSING IT\r
\r
;HERE IF LINE NUMBER TOO BIG\r
SCNIN2: DATAO DLS,[EXP TDSABL] ;SET TRANSMIT DISABLE BIT AND OUTPUT IT\r
- ;(JUST INCASE, ELSE IT WILL INTERRUPT IMMEDIATLY AGAIN)\r
+ ;(JUST INCASE, ELSE IT WILL INTERRUPT IMMEDIATELY AGAIN)\r
POPJ PDP, ;DISMISS INTERRUPT\r
\f;COMMON TO RECEIVE AND TRANSMIT.\r
\r
HLRE TAC1,@RCXIOC ; CHANNEL CONTROL WORD SHOULD CONTAIN UPON\r
SUB TAC,TAC1 ; SUCCESSFUL COMPLETION OF THE DISK OPERATION.\r
MOVE TAC1,RCXIOC\r
- HRLI TAC,1(TAC)\r
+ HRLI TAC,1(TAC1)\r
MOVEM TAC,RCXFIN\r
SETZM RCXCCW ;ZERO THE LOCATION WHERE THE DISK SYNCRONIZER WILL\r
; STORE THE CHANNEL CONTROL WORD.\r
SATXWD: XWD -NUMSAT,13001 ;LH=NUMBER OF SAT BLOCKS.\r
;RH=FIRST SAT BLOCK NUMBER.\r
>>\r
-\f\r
-CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM\r
+\fCHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM\r
W8BIT=400000 ;WAIT INDICATION FOR DDB\r
\r
; BITS IN LH OF IOS\r
RENBIT=20000 ;"RENAMING" INDICATION FOR SETLE ROUTINE\r
WPRO=40000 ;LOOKUP DONE, FILE IS IN WRITE PROTTECT\r
CKSUPR=10000 ;FLAG SET IF READING DUMP FILES IN NON-DUMP MODE\r
-\f\r
-;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES\r
+\r
+\r
+\r
+\f;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES\r
\r
ATPP=0 ;PROJECT,PROGRAMMER NUMBERS\r
ATNAME=1 ;OWNER NAME\r
>>\r
XP WLBIT,400000 ;IF BIT IS ON IN FIRST SATENT ENTRY\r
;WORD, THE DISK IS WRITE-LOCKED.\r
-\f\r
-EXTERNAL DSKOFF\r
+\fEXTERNAL DSKOFF\r
\r
DEFINE NOSCHEDULE <\r
CONO PI,DSKOFF\r
>\r
\r
+\r
EXTERNAL DSKON\r
DEFINE SCHEDULE <\r
CONO PI,DSKON\r
>\r
-\f\r
-INTERNAL FTCHECK,FTMONP\r
+\fINTERNAL FTCHECK,FTMONP\r
IFN FTCHECK+FTMONP,<\r
EXTERNAL DDBPTR,DSKCOR,PTRN,MOPTR,MIPTR,RUNUSR,SAVPRG,USRCNT\r
EXTERNAL SATPTR,SAT,SATBK2,DIRSIZ\r
INTERNAL SATPTR,SAT,SATBK2,REFLAG,DFBUSY,CKSMCT\r
MOPTR: BLOCK 1 ;POINTER TO NEXT TASK TO DO\r
MIPTR: BLOCK 1 ;POINTER TO NEXT FREE QUEUE ENTRY\r
-\r
RUNUSR: BLOCK 1 ;LH=DEVDAT OF USER JOB RUNNING\r
;RH= UNUSED\r
USRCNT: BLOCK 1 ;COUNT OF WAITING USER JOBS\r
; DISK FILE SINCE FIRST DISK IS ALLOCATED\r
; TO SWAPPING.\r
>\r
-\f\r
-SATENT: REPEAT NUMSAT,<\r
+\fSATENT: REPEAT NUMSAT,<\r
XWD DSKXDB,0 ;RH CONTAINS WLBIT AND COUNT OF BLOCK USED\r
BLOCK 1 ;BIT MASK, SINGLE ROTATING BIT\r
BLOCK 1 ;XWD LENGTH OF SAT TABLE POINTER WORD\r
DSKXDB=DSKXDB+NUMBLK>\r
\r
XP SATTOP,SATENT+SENTSZ*NUMSAT-SENTSZ\r
+\r
>;END OF FTRA100 CONDITIONAL\r
\r
+\r
SAT: BLOCK 200 ;CURRENT SAT BLOCK\r
\r
XP SATM2,SAT-2 ;LOWEST ABS, ADR-1 ALLOWED IN CHANNEL COMMAND\r
; LIST - USED TO KEEP FROM WIPING OUT MONITOR.\r
SATBK2: XWD -200,SAT\r
-\f\r
- XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE\r
+\f XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE\r
;NOT POINTERS.\r
\r
;THE DUMMY DEVICE DATA BLOCK\r
DSKCOR=10\r
DSKSIZ=4*DSKCOR ;NUMBER OF WORDS ALLOCATED FOR DDB\r
;MUST BE A MULTIPLE OF FOR (SEE GETCOR)\r
-\r
INTERN DSKDDB\r
DSKDDB: SIXBIT /DSK/\r
XWD ^D5*HUNGST,201\r
Z ;C(LH)=ADDRESS OF ACCESS TABLE ENTRY\r
;C(RH)=ADDRESS OF CURRENT POINTER IN DDB\r
XP DEVCNT,.-DSKDDB ;C(LH)USED DURING LOOKUP,ENTER\r
- Z ;C(LH)==RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES)\r
+ Z ;C(LH)=RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES)\r
;C(RH)=COUNT OF BLOCKS IN FILE\r
XP DEVBLK,.-DSKDDB ;C(LH)=BLOCK NUMBER OF CURRENT POINTER\r
Z ;C(LH)=LOGICAL BLOCK# OF RIB\r
XP FPNTR,PTR1+DIRSIZ ;LOC. OF FIRST POINTER TO RET. INFO.\r
XP FPNTR1,FPNTR-1\r
XP PTRN,DSKSIZ-1\r
-\f\r
-;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB\r
-\r
+\f;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB \r
INTERNAL LOCORE,CRINIT\r
EXTERNAL DDBTAB\r
\r
CRINIT: XWD 0,DDBTAB ;INITIAL AOBJN POINTER FOR CORIWD\r
; LH SET BY LINKDB\r
MONBUF: BLOCK 200 ;MONITOR BUFFER, USED TO READ RETRIEVAL POINTERS, ETC.\r
-\f\r
-;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER\r
+>\r
+\f;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER\r
\r
NOTINU=0 ;NO SUCH FILE\r
NOTINM=1 ;NO SUCH USER\r
NOFILE=5 ;TRIED TO RENAME WITH NO FILE SELECTED\r
ERRBIT=1 ;BITS GO IN WORD 1 OF THE ENTRY\r
\r
+\r
;DISK DISPATCH TABLE\r
\r
INTERNAL DSKDSP\r
MOVEM TAC,CORBIT ;INITIALIZE FLOATING 1 BIT\r
MOVE TAC,CRINIT\r
MOVEM TAC,CORIWD ;RESET AOBJN WORD\r
-\r
POPJ PDP,\r
\r
-;DSKINI - CALLED AT START, RESTART, 143 RESTART\r
-; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE\r
+\r
+;DSKINI - CALLED AT 140 START, RESTART, 143 RESTART\r
+; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE.\r
INTERNAL DSKINI, SETSAT\r
EXTERNAL DISKUP,DFWUNS\r
\r
JRST SAT01 ;WRITE SAT BLOCK IN CORE\r
JRST DFWUNS ;SCAN ALL SAT BLOCKS\r
STARTS: -1 ;COUNT STARTS, RESTARTS\r
-\f\r
-;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147,\r
+\f;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147,\r
;AT SAT01 UPON RE-ENTRY OF INITIALIZATION.\r
\r
INTERN DSKSTP,SAT05,JSAT06\r
NOSCHEDULE\r
PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING\r
JRST DFENT3 ;NOT THERE\r
-\f\r
-DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON?\r
+\fDFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON?\r
TRNE DAT,WTBIT\r
JRST DFERR6 ;YES,ERROR\r
PUSHJ PDP,SCNAT2\r
HRLZM TAC,DEVBKO(DEVDAT)\r
HRRM TAC,DEVEXT(DEVDAT) ;STORE FIRST RIB#\r
NOSCHEDULE\r
-\r
MOVE DAT,TAC1 ;ACCESS ENTRY BITS\r
PUSHJ PDP,SETAT ;CREATE ACCESS ENTRY. RETURN POINTER IN TAC1\r
HRLM TAC1,DEVACC(DEVDAT) ;STORE POINTER TO ACCESS ENTRY\r
MOVSI TAC,VRGPTR ;SET "VIRGIN POINTER" FLAG (O DFO4A SUBROUTINE\r
IORM TAC,DEVOAD(DEVDAT) ;WILL CREATE A NEW RIB WHEN JUST CALLED\r
JRST ALLOK\r
-\f\r
-;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY\r
+\f;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY\r
\r
DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION\r
TLNE TAC,WPRO\r
PUSHJ PDP,DFERR6 ;YES, THIS WILL NOT RETURN HERE\r
MOVEM TAC1,TBITS(TAC) ;NO, SET IT\r
SCHEDULE\r
- CONO PI,DSKON\r
\r
- MOVE TAC,@UUO ;SAVE FILE?\r
+ MOVE TAC,@UUO ;SAME FILE?\r
CAME TAC,DEVFIL(DEVDAT)\r
JRST DFERR8 ;NO, NAME WRONG\r
ADDI UUO,1\r
DFENT7: PUSHJ PDP,SCNAT2 ;FIND ANOTHER\r
JRST DFENT1 ;NO WRITERS, PERMIT THIS ENTER\r
JRST DFERR6 ;MUST BE BEING WRITTEN OR RENAMED\r
-\f\r
-;LOOKUP UUO\r
+\f;LOOKUP UUO\r
+\r
\r
EXTERNAL UDLKC,TPOPJ\r
\r
TLOA TAC1,WPRO ;WRITE PROTECTED. SET FLAG\r
TLZ TAC1,WPRO ;WRITE OK--RESET FLAG\r
IORM TAC1,DEVOAD(DEVDAT)\r
-\f\r
-DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK\r
+\r
+\fDFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK\r
NOSCHEDULE\r
HRRI TAC,@UUO ;DESTINATION IS UUO PARAMETER BLOCK\r
MOVE TAC1,TAC\r
TLZ DEVDAT,ICLOSB\r
MOVSI TAC,VRGPTR ;POINTERS DO EXIST ON THE DISK SO\r
ANDCAM TAC,DEVOAD(DEVDAT) ;CLEAR THE VIRGIN POINTERS FLAG.\r
-\f\r
-ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB\r
+\fALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB\r
HRRM DAT,DEVACC(DEVDAT) ;SET VERTICAL POINTER POINTER\r
MOVEI TAC,1\r
HRRM TAC,SETCNT(DEVDAT) ;"POISITONED" AT RELATIVE BLOCK 1 OF FILE\r
IORM TAC,DEVOAD(DEVDAT) ;NO. SUPPRESS CHECKSUM\r
>\r
ALLXIT: POP PDP,TAC ;REMEMBER 0(PDP) WASS XWD PROJ,PROG\r
-\r
AOS (PDP) ;RETURN TO CALL+2\r
JRST CLRBUF ;RELEASE MONITOR BUFFER\r
\r
POPJ PDP, ;YES, RETURN\r
\r
JRST DFERR5\r
-\f\r
-;RENAME UUO\r
+\f;RENAME UUO\r
\r
EXTERNAL CPOPJ1\r
EXTERNAL THSDAT\r
DFREN1: AOS TBITS(TAC) ;INCREMENT RCOUNT\r
HRLM TAC,DEVACC(DEVDAT) ;SAVE POINTER TO ACCESS ENTRY\r
SCHEDULE\r
+\r
HRRZ TAC,DEVEXT(DEVDAT) ;CAN THIS FILE BE RENAMED?\r
PUSHJ PDP,SETPTR ;READ IN FIRST SET OF RETRIEVAL POINTERS\r
MOVEI AC1,@UUO ;IS THE PROTECTION TO BE CHANGED ?\r
JRST DFERR3 ;BAD RETREIVAL INFO\r
JRST DFRN8A ;WRITE PROTECTED\r
TLZ IOS,PRCHG ;ARBITRARY CHANGE OK.\r
-\f\r
-DFREN2: NOSCHEDULE\r
+\r
+\fDFREN2: NOSCHEDULE\r
PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING\r
JRST DFRN1B ;NO\r
\r
MOVEI AC1,RTBIT ;RENAME BIT\r
ORM AC1,TBITS(TAC)\r
SCHEDULE\r
-\f\r
- MOVE TAC,@UUO ;GET NEW FILENAME\r
+\f MOVE TAC,@UUO ;GET NEW FILENAME\r
CAME TAC,DEVFIL(DEVDAT) ;SAVE AS DDB?\r
JRST DFREN3 ;NO\r
ADDI UUO,1 ;YES, SAME EXTENSION?\r
TLNE TAC,-1 ;SAME?\r
SOJA UUO,DFREN3 ;NO\r
\r
+\r
;FILENAME AND EXTENSION ARE IDENTICAL. CHANGE ONLY PROTECTION\r
\r
TLZ IOS,PRCHG ;CLEAR PRTOECTION CHANGE FLAG\r
SCHEDULE\r
PUSHJ PDP,DFCL21\r
JRST DFER10\r
-\f\r
-;ALTER RETRIEVAL INFORMATION\r
+\f;ALTER RETRIEVAL INFORMATION\r
\r
DFREN5: POP PDP,DAT ;BACK UP PDP\r
\r
DPB TAC,[POINT 9,@TAC1,8] ;STORE IN RIB\r
\r
PUSHJ PDP,WRI ;RE-WRITE RIB\r
-\f\r
-;ALTER UFD BLOCK\r
+\f;ALTER UFD BLOCK\r
\r
PUSHJ PDP,FINDE ;BRING IN CORRECT BLOCK\r
\r
\r
DFRN8A: TLNE IOS,PRCHG ;PROTECTION CHANGE?\r
JRST DFREN2 ;YES\r
-\r
DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY\r
JRST DFERR5 ;AND LEAVE\r
\r
DFREN9: SCHEDULE\r
PUSHJ PDP,DFCL21 ;TEAKE OUT ACCESS ENTRY\r
JRST DFERR6\r
-\f\r
-;DELETE A FILE FROM A UFD\r
+\f;DELETE A FILE FROM A UFD\r
\r
DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK\r
\r
MOVEI TAC1,DTBIT\r
IORM TAC1,TBITS(TAC) ;SET TO DELETE WHEN THROUGH READIN\r
JRST DFCL21 ;CLOSE ACCESS ENTRY AND LEAVE\r
-\f\r
-;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME\r
+\f;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME\r
;SEARCH THRU MFD AND UFD FOR THE FILE-NAME,\r
;EXIT TO CALL+1 IF A UFD CANNOT BE FOUND.\r
;EXIT TO CALL+2 IF THE FILE IS NOT FOUND.\r
TLO UUO,PROG\r
MOVE AC1,@UUO ;PICK UP FILE NAME\r
MOVEM AC1,DEVFIL(DEVDAT) ;STORE FILE NAME AND EXT IN DDB\r
-\r
ADDI UUO,1\r
HLLZ AC1,@UUO\r
MOVEM AC1,DEVEXT(DEVDAT)\r
SUBI UUO,3 ;UUO POINTS TO FILE NAME\r
EXCH DAT,(PDP) ;PUT PP-NUMBER IN PD LIST\r
PUSH PDP,DAT ;PDP POINTS TO CALL+1\r
-\f\r
-;SEARCH MFD FOR THE OWNER OF THE FILE\r
+\f;SEARCH MFD FOR THE OWNER OF THE FILE\r
\r
MOVE DAT,-1(PDP) ;XWD PROJ,PROG\r
MOVSI AC1,(SIXBIT /UFD/) ;EXTENSION "UFD"\r
POP PDP,TAC ;YES\r
POP PDP,TAC\r
JRST DFERR6\r
-\f\r
-;CHECK RETRIEVAL INFO FOR ELIGIBILITY\r
+\f;CHECK RETRIEVAL INFO FOR ELIGIBILITY\r
;ENTER WITH C(DAT) = PROTECTION TO CHECK IN BITS 0-2\r
;EXIT TO CALL+1 IF NAME OR EXTENSION WRONG\r
;EXIT TO CALL+2 IF PROTECTION WRONG\r
\r
AOS (PDP)\r
PROTKX: MOVE AC1,-1(PDP)\r
-\r
PROTKY: MOVE ITEM,JOB\r
XOR AC1,PRJPRG(ITEM)\r
TRNN AC1,-1 ;SAVEM PROGRAMMER?\r
;PROGRAMMER NUMBER?\r
AOS(PDP) ;YES, ALL FILES AVAILABLE\r
POPJ PDP,\r
-\f\r
- CLOSE UUO\r
+\f;CLOSE UUO\r
;CLOSE AN OUTPUT FILE\r
\r
EXTERNAL PIOMOD,WAIT1,OUT\r
\r
DFCLSO: TLNN DEVDAT,ENTRB ;ENTER DONE YET?\r
- POPJ PDP, ;NO, FORGET IT\r
+ POPJ PDP, ;NO, FORGET IT\r
HLRZ TAC,DEVACC(DEVDAT) ;SHOULD WE CLOSE? (POINT TO ACCESS ENTRY)\r
IFN FTRCHK,<\r
- SKIPN TAC ;ACCESS TABLE POINTER EXISTS?\r
- HALT . ;IF NOT, HALT, NO RE-START POSSIBLE.\r
+ SKIPN TAC ;ACCESS TABLE POINTER EXISTS?\r
+ HALT . ;IF NOT, HALT, NO RE-START POSSIBLE.\r
>\r
MOVE TAC,TBITS(TAC)\r
IFN FTRCHK, <\r
TRNN TAC,ATCLO+RWTBIT ;CREATION OR UPDATE OF FILE IN PROGRESS?\r
- HALT . ;NO, ERROR. CAN'T CONTINUE\r
+ HALT . ;NO, ERROR. CAN'T CONTINUE\r
>\r
LDB TAC,PIOMOD\r
- CAIGE TAC,DR ;DUMP MODE?\r
+ CAIGE TAC,DR ;DUMP MODE?\r
TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS?\r
- JRST DFCL2 ;YES TO EITHER QUESTION\r
+ JRST DFCL2 ;YES TO EITHER QUESTION\r
HLRZ TAC,DEVBUF(DEVDAT) ;NO. GET ADDRESS OF OUTPUT\r
- ; BUFFER HEADER BLOCK.\r
- TLO TAC,PROG ;RELOCATE\r
- SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ?\r
- JRST DFCL2 ;YES, DON'T OUTPUT\r
- AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER\r
+ ; BUFFER HEADER BLOCK.\r
+ TLO TAC,PROG ;RELOCATE\r
+ SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ?\r
+ JRST DFCL2 ;YES, DON'T OUTPUT\r
+ AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER\r
ADD TAC1,[XWD PROG,1] ;TAC1 POINTS TO WORD COUNT PRECEDING\r
- ; USER DATA BUFFER\r
- HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER\r
- SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER\r
- ; NOT SET UP\r
- SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED\r
- TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ?\r
- HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR\r
- ; COMPUTED WORD COUNT\r
- SKIPN AC1 ;WORD COUNT EQUAL TO 0?\r
- JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK.\r
- PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER\r
- PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH\r
+ ; USER DATA BUFFER\r
+ HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER\r
+ SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER\r
+ ; NOT SET UP\r
+ SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED\r
+ TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ?\r
+ HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR\r
+ ; COMPUTED WORD COUNT\r
+ SKIPN AC1 ;WORD COUNT EQUAL TO 0?\r
+ JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK.\r
+ PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER\r
+ PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH\r
\r
DFCL2: PUSHJ PDP,SETBUF ;CHOOSE A BUFFER AREA FOR RETRIEVAL POINTERS\r
TLO IOS,NMP!NCTRLC ;SET NMP, MUST NOT INTERRUPT POINTER WRITING\r
MOVEM IOS,DEVIOS(DEVDAT) ;DO DFO4A WON'T READ NEW POINTERS IN\r
- PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS\r
+ PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS\r
HLRZ AC1,DEVBLK(DEVDAT)\r
XOR AC1,DEVEXT(DEVDAT)\r
TRNE AC1,-1 ;ONLY ONE BLOCK OF POINTERS?\r
- PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER\r
+ PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER\r
PUSHJ PDP,SET000\r
- ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER\r
+ ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER\r
MOVN AC1,DEVCNT(DEVDAT) ;PICK UP AND NEGATE SIZE OF FILE\r
- HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB\r
- PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION\r
-\f\r
-;CLOSE UUO CONTINUED.\r
+ HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB\r
+ PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION\r
+\f;CLOSE UUO CONTINUED.\r
;THE FILE AND ALL ITS POINTERS HAVE BEEN PUT ON DISK.\r
;NOW PUT ENTRY IN DIRECTORY.\r
+\r
TLZ DEVDAT,ENTRB\r
HLRZ TAC,DEVACC(DEVDAT) ;PICK UP ACCESS TABLE POINTER\r
MOVE DAT,TBITS(TAC) ;GET STATUS BITS AND READ COUNT\r
- TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE?\r
- JRST DFCLU1 ;YES\r
+ TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE?\r
+ JRST DFCLU1 ;YES\r
TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS?\r
- JRST DFC16A ;YES\r
- TRNN DAT,ATIND ;IUS NAME ALREADY IN DIRECTORY?\r
- JRST DFCL20 ;NO. INSERT IT\r
+ JRST DFC16A ;YES\r
+ TRNN DAT,ATIND ;IS NAME ALREADY IN DIRECTORY?\r
+ JRST DFCL20 ;NO. INSERT IT\r
MOVEM IOS,DEVIOS(DEVDAT)\r
- PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY.\r
+ PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY.\r
MOVE TAC,DEVEXT(DEVDAT) ;CHANGE BLOCK POINTER\r
- EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK\r
+ EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK\r
MOVEM TAC,DEVEXT(DEVDAT);SAVE POINTER TO RIB OF OLD VERSION FOR RECLAM \r
- PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT\r
+ PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT\r
HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER\r
NOSCHEDULE\r
PUSH PDP,ATPP(TAC) ;SAVE XWD PROJ,PROG\r
- PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
- POP PDP,AC2 ;XWD PROJ,PROG\r
+ PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
+ POP PDP,AC2 ;XWD PROJ,PROG\r
PUSHJ PDP,SCNAT0 ;SCAN FOR ANY OTHERS READING OLD VERSION\r
JRST DFCL17 ;NONE\r
\r
DFCL16: MOVEI AC1,DTBIT ;DELETE WHEN THRU READING SINCE IT WAS JUST UPDATED\r
IORM AC1,TBITS(TAC)\r
PUSHJ PDP,SCNAT2 ;LOOK FOR MORE\r
- JRST CLRBUF ;NO MORE\r
+ JRST CLRBUF ;NO MORE\r
JRST DFCL16\r
-DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE.\r
- ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE.\r
+DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE.\r
+ ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE.\r
\r
DFCL17: SCHEDULE\r
HRRZ TAC,DEVEXT(DEVDAT) ;RIB# OF FILE\r
DFCL20: PUSHJ PDP,INSDIR ;INSERT THE NAME\r
HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER\r
NOSCHEDULE\r
- PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
- JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE\r
+ PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY\r
+ JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE\r
DFCLU1: MOVEM DAT,TBITS(TAC) ;STORE STATUS BITS (WITH UPDATE MARKER CLEARED)\r
TLN DEVDAT,LOOKB ;WAS IUNPUT SIDE OF FILE ALSO CLOSED?\r
- POPJ PDP, ;NO, LET THE USER KEEP READING IT\r
+ POPJ PDP, ;NO, LET THE USER KEEP READING IT\r
TRNE DAT, RCOUNT ;YES, ANYBODY ELSE STILL READING IT?\r
- JRST DFCLU2 ;YES\r
- TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION?\r
- JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE\r
- PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY\r
+ JRST DFCLU2 ;YES\r
+ TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION?\r
+ JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE\r
+ PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY\r
DFCLU2: HRRZS DEVACC(DEVDAT) ;CLEAR POINTER TO ACCESS TABLE\r
- JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT.,\r
-\r
-\r
- ;CLOSE UUO CONTINUED.\r
+ JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT.,\r
+\f ;CLOSE UUO CONTINUED.\r
;CLOSE AN INPUT FILE.\r
\r
DFCLSI: TLZN DEVDAT,LOOKB\r
POPJ PDP,\r
DFCL21: HLRZ TAC,DEVACC(DEVDAT) ;POINT TO ACCESS ENTRY\r
- JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED\r
- ; (PROBABLY ^C DURING EARLIER ATTEMPT)\r
+ JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED\r
+ ; (PROBABLY ^C DURING EARLIER ATTEMPT)\r
MOVE TAC1,TBITS(TAC) ;GET STATUS BITS\r
IFN FTRCHK,<\r
- TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)?\r
+ TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)?\r
HALT CPOPJ ;IF SO, SOMEBODY IS VERY CONFUSED.\r
>\r
NOSCHEDULE\r
SOS TAC1,TBITS(TAC) ;DECREMENT RCOUNT\r
TRNE TAC1,RCOUNT+RWTBIT ;ANY MORE READS? OR OUTPUT CLOSE TO DO?\r
- JRST DFCL23 ;YES, LEAVE\r
+ JRST DFCL23 ;YES, LEAVE\r
\r
- TRNE TAC1,DTBIT ;TO BE DELETED?\r
- JRST DFC16A ;YES\r
- PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT\r
+ TRNE TAC1,DTBIT ;TO BE DELETED?\r
+ JRST DFC16A ;YES\r
+ PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT\r
DFCL23: SCHEDULE\r
TLZN DEVDAT,INPB ;ANY INPUT UUO'\r
- JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF\r
+ JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF\r
PUSHJ PDP,SETBUF ;YES, UPDATE ACCESS DATE AS FOLLOWS:\r
- PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION.\r
+ PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION.\r
SUBI TAC1,BLKSIZ-2 ;SET TAC1 TO 2ND WORD OF BLOCK\r
LDB AC1,[POINT 17,@TAC1,35] ;GET PREVIOUS ACCESS DATA.\r
- CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY?\r
- JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT.\r
- MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE.\r
+ CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY?\r
+ JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT.\r
+ MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE.\r
DPB AC1,[POINT 17,@TAC1,35] ;\r
- PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION.\r
- JRST CLRBUF ;CLEAR BUFFER AND EXIT.\r
-\r
-SUBTTL DIRECTORY SEARCHING\r
+ PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION.\r
+ JRST CLRBUF ;CLEAR BUFFER AND EXIT.\r
+\fSUBTTL DIRECTORY SEARCHING\r
;SEARCH DIRECTORY FOR A PARTICULAR ENTRY.\r
;ENTRY BY: MOVE DAT,NAME\r
; HLLZ AC1,EXTENSION\r
; EXIT2 NAME FOUND, TAC POINTS TO ENTRY\r
\r
DIRSRC: PUSH PDP,AC1\r
- PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION\r
+ PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION\r
PUSHJ PDP,SETPTR ;READ UFD RETRIEVAL POINTERS\r
DRSRC0: HRRZ TAC,DEVACC(DEVDAT)\r
CAILE TAC,PTRN(DEVDAT) ;MORE POINTERS IN CORE?\r
- JRST DRSRC7 ;NO, GET MORE.\r
+ JRST DRSRC7 ;NO, GET MORE.\r
HRRZ TAC,(TAC)\r
JUMPE TAC,DRSRC6 ;0 SIGNALS END OF POINTERS\r
AOS DEVACC(DEVDAT) ;NEXT POINTER\r
\r
AOS DEVCNT(DEVDAT) ;COUNT UFD BLOCKS SEARCHED\r
- PUSHJ PDP,MQIN ;READ IN DATA BLOCK\r
- JRST RERA ;ERROR, YOU LOSE.\r
+ PUSHJ PDP,MQIN ;READ IN DATA BLOCK\r
+ JRST RERA ;ERROR, YOU LOSE.\r
\r
MOVE TAC1,DSKBUF(DEVDAT) ;XWD-L,POINTER\r
HRRZ TAC,TAC1\r
- TLNN IOS,UBFS ;DUMP MODE?\r
- HRLI TAC,PROG ;NO. RELOCATE.\r
+ TLNN IOS,UBFS ;DUMP MODE?\r
+ HRLI TAC,PROG ;NO. RELOCATE.\r
HLLZ AC1,-1(PDP) ;SIXBIT/EXT/\r
-DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED?\r
- JRST DRSRC0 ;YES\r
+DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED?\r
+ JRST DRSRC0 ;YES\r
ADDI TAC,1\r
- CAMN AC3,(PDP) ;NAMES MATCH?\r
- JRST DRSRC8 ;YES\r
+ CAMN AC3,(PDP) ;NAMES MATCH?\r
+ JRST DRSRC8 ;YES\r
\r
DRSRC4: ADDI TAC,1\r
HRRZ AC3,TAC\r
CAIE AC3,BLKSIZ(TAC1) ;IS BLOCK ENTIRELY SEARCHED?\r
- JRST DRSR3A ;NO\r
+ JRST DRSR3A ;NO\r
JRST DRSRC0\r
\r
-DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK?\r
+DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK?\r
JRST DRSRC6 ;NO\r
- PUSHJ PDP,GETPTR ;YES, GET SOME\r
+ PUSHJ PDP,GETPTR ;YES, GET SOME\r
JRST DRSRC0\r
\r
-DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH\r
+DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH\r
CAME AC3,AC1\r
- JRST DRSRC4 ;NO\r
- SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY\r
+ JRST DRSRC4 ;NO\r
+ SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY\r
\r
- AOS -2(PDP) ;YES, ENTRY IS FOUND\r
+ AOS -2(PDP) ;YES, ENTRY IS FOUND\r
MOVSS DEVCNT(DEVDAT) ;SAVE COUNT OF UFD BLOCKS FOR USE AT CLOSE\r
-;EXIT\r
+\r
+\f;EXIT\r
\r
DRSRC6: POP PDP,DAT\r
POP PDP,AC1\r
- POPJ PDP, ;"FILE" NOT FOUND\r
+ POPJ PDP, ;"FILE" NOT FOUND\r
;CHECK PROTECTION ON UFD\r
\r
-DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION\r
+DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION\r
PUSHJ PDP,SETPTR\r
MOVSI DAT,200000 ;SET UP TO TEST READ BIT\r
- TLNE IOS,10 ;IS IT LOOKUP>\r
+ TLNE IOS,10 ;IS IT LOOKUP?\r
ROT DAT,-1 ;NO,TEST WRITE PROTECTION\r
MOVEI TAC,PTR1(DEVDAT)\r
- HRRZ AC1,-3(PDP) ;XWD PROJ,PROG\r
+ HRRZ AC1,-3(PDP) ;XWD PROJ,PROG\r
TLZ IOS,PRCHG\r
PUSHJ PDP,PROTKY\r
- TLO IOS,PRCHG ;FLAG PROTECTION CHANGE\r
+ TLO IOS,PRCHG ;FLAG PROTECTION CHANGE\r
PUSH PDP,DEVFIL(DEVDAT) ;PUSH FILENAME TO MAKE PDL LOOK LIKE DIRSRC\r
JRST DRSRC0\r
-\r
- \r
-;FIND A UFD ENTRY, IT MUST BE THERE.\r
+\f;FIND A UFD ENTRY, IT MUST BE THERE.\r
\r
EXTERNAL AUREQ,AUWAIT\r
\r
-FINDE: AOSE AUREQ\r
+FINDE: AOSE AUREQ\r
PUSHJ PDP,AUWAIT\r
TLO IOS,AUFLG\r
HLRZ TAC,SETCNT(DEVDAT) ;SET TAC TO UFD POINTERS\r
PUSHJ PDP,RRIA\r
CAILE DAT,BLKSIZ-2 ;POINTER IN THIS BLOCK?\r
JRST FINDE2 ;NO, GET NEXT ONE\r
- SUBI DAT,1 ;YES, BRING THEM IN\r
+ SUBI DAT,1 ;YES, BRING THEM IN\r
HRRM DAT,DEVBLK(DEVDAT) ;SET INDEX INTO RIB\r
PUSHJ PDP,DFIN4 ;COPY POINTERS INTO DDB\r
HRRZ TAC,PTR1(DEVDAT) ;GET RETRIEVAL POINTER FOR UFD BLOCK\r
-\r
PUSHJ PDP,MQIN ;READ THE UFD BLOCK\r
- JRST RERA ;ERROR\r
- PUSHJ PDP,SET000 ;FIND THE ENTRY\r
+ JRST RERA ;ERROR\r
+ PUSHJ PDP,SET000 ;FIND THE ENTRY\r
HLLZ AC1,DEVEXT(DEVDAT) ;GET EXTENSION FROM DDB\r
\r
-SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD\r
+SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD\r
ADDI TAC1,1\r
CAME TAC,DEVFIL(DEVDAT) ;SAME?\r
AOJA TAC1,SRCU1 ;NAMES DO NOT MATCH\r
HLLZ TAC,@TAC1 ;GET EXTENSION FROM UFD\r
CAME TAC,AC1 ;SAME?\r
AOJA TAC1,SRCU1 ;EXTENSIONS DO NOT MATCH\r
- POPJ PDP, ;FOUND IT\r
+ POPJ PDP, ;FOUND IT\r
+\r
\r
-FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK\r
+FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK\r
HLRZ TAC,@TAC1\r
SUBI DAT,BLKSIZ-2 ;BACK UP DAT\r
JRST FINDE1\r
-\r
-;INSERT AN ENTRY IN A DIRECTORY.\r
+\f;INSERT AN ENTRY IN A DIRECTORY.\r
\r
EXTERNAL AUREQ,AUWAIT,AUAVAL\r
\r
TLO IOS,AUFLG\r
SETZM DEVCNT(DEVDAT) ;CLEAR BEFORE COUNTING BLOCK OF UFD\r
HLRZ TAC,SETCNT(DEVDAT) ;BLOCK# OF UFD RIB\r
- PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,.\r
+ PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,.\r
SOS DEVACC(DEVDAT) ;SYNC\r
\r
INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER,\r
CAILE TAC,PTRN(DEVDAT) ;ANY MORE IN CORE?\r
JRST INSD10 ;NO, GET SOME MORE\r
\r
-INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER\r
+INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER\r
JUMPE TAC,INSD5 ;0 SIGNALS END OF POINTERS\r
- PUSHJ PDP,MQIN ;READ UFD BLOCK\r
+ PUSHJ PDP,MQIN ;READ UFD BLOCK\r
JRST RERA ;ERROR.\r
\r
- PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127\r
+ PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127\r
SKIPE @TAC1 ;IS IT ZERO?\r
JRST INSD1 ;NO, BLOCK FULL.\r
\r
PUSHJ PDP,INSD3 ;INSERT ENTRY.\r
\r
JRST WUFD ;WRITE BLOCK AND LEAVE\r
-\r
-;INSERT THE ENTRY.\r
+\f;INSERT THE ENTRY.\r
\r
INSD3: HRRZ AC1,DSKBUF(DEVDAT)\r
INSD3B: CAIN AC1,(TAC1) ;BEGINNING OF BLOCK?\r
- JRST INSD3A ;YES\r
+ JRST INSD3A ;YES\r
SUBI TAC1,2\r
SKIPN @TAC1 ;SEARCH UFD BLOCK BACKWARDS\r
; FOR LAST NON-ZERO FILENAME.\r
\r
JRST INSD3B\r
\r
- ADDI TAC1,2 ;MOVE IN NAME.\r
+ ADDI TAC1,2 ;MOVE IN NAME.\r
INSD3A: MOVE TAC,DEVFIL(DEVDAT)\r
MOVEM TAC,@TAC1\r
- ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER.\r
+ ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER.\r
MOVE TAC,DEVEXT(DEVDAT)\r
IFN FTRCHK,<\r
TRNN TAC,-1 ;POINTER TO BLOCK 0\r
\r
- HALT .+1 ;FOR RETRIEVAL INFO\r
- ; CONTINUE-GET BAD INFO MESSAGE\r
+ HALT .+1 ;FOR RETRIEVAL INFO\r
+ ; CONTINUE-GET BAD INFO MESSAGE\r
>\r
MOVEM TAC,@TAC1\r
POPJ PDP,\r
-\r
-;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY\r
+\f;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY\r
;POINTER BLOCK, ADD POINTER IF POSSIBLE. IF NOT POSSIBLE.\r
;CREATE NEW POINTER BLOCK AND PUT THE POINTER IN IT.\r
\r
TLZ IOS,AUFLG\r
MOVEM IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
-\r
-;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER.\r
+\f;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER.\r
;INSERT NEW ONE, AND WRITE BLOCK OUT.\r
\r
INSD8: SKIPN @TAC1\r
\r
INSD11: TRNN IOS,IOIMPM\r
JRST WERA ;IT WAS NOT, YOU LOSE.\r
-\r
PUSHJ PDP,WLERA ;GET ANOTHER BLOCK\r
HRRM TAC,SETCNT(DEVDAT)\r
JRST INSD5A\r
-\r
-\r
-;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT.\r
+\f;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT.\r
;IF WRITE-LOCK ERROR, TRY ANOTHER BLOCK. FINALLY, IF POINTERS WERE\r
;ALTERED, WRITE THEM OUT.\r
\r
MOVE TAC1,DEVACC(DEVDAT)\r
HRRM TAC,(TAC1)\r
JRST WUFD1\r
-\r
-SUBTTL ACCESS TABLE PROCESSING\r
+\fSUBTTL ACCESS TABLE PROCESSING\r
;SCAN ACCESS TABLE.\r
;EXIT TO CALL+1 WITH TAC SET TO THE LAST ENTRY IF NOT THERE.\r
;EXIT TO CALL+2 WITH TAC SET TO CORRECT ENTRY IF THERE.\r
\r
;CONTINUE SCAN FROM CURRENT ENTRY\r
\r
+\r
SCNAT2: HRRZ DAT,ATLINK(TAC) ;ANY MORE ENTRIES?\r
JUMPE DAT,CPOPJ ;NO\r
MOVE TAC,DAT ;YES, GO TO THE NEXT ONE\r
JRST SCNAT1\r
\r
-;CLEAR AN ACCESS ENTRY.\r
+\f;CLEAR AN ACCESS ENTRY.\r
;IT IS ASSUMED THAT NO SCHEDULING WILL TAKE PLACE.\r
;ENTER WITH TAC POINTING TO THE ENTRY TO WIPE OUT.\r
\r
+\r
CLRAT: IFN FTRCHK,<\r
SKIPN TAC ;ATTEMPT TO CLEAR NON EXISTENT ACCESS TABLE IS AN ERROR\r
-\r
HALT SCNHLT ;CONTINUE WILL POPJ AND EXIT.\r
>\r
HRRZS DEVACC(DEVDAT) ;CLEAR ACCESS TABLE POINTER IN DEVICE DATA BLOCK\r
HRRM AC2,ATLINK(AC1) ;LINK AROUND IT\r
JRST CLRCOR ;CLEAR THE CORE\r
\r
-;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK.\r
+\r
+\f;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK.\r
;BUILD UP THE ENTRY\r
;UPON ENTRY, DAT SHOULD CONTAIN TEST BITS TO SET\r
\r
HRRZM TAC1,FAT ;POINT FAT TO THIS NEW ENTRY\r
SETHLT: POPJ PDP, ;HALT PC HERE IF END OF TABLE WITHOUT FINDING\r
; ENTRY TO BE CLEARED\r
-\r
-SUBTTL DUMP INPUT/OUTPUT\r
+\fSUBTTL DUMP INPUT/OUTPUT\r
;DUMP MODE OUTPUT\r
\r
EXTERNAL COMCHK,ADRERR,SAVDDL\r
MOVMS ITEM\r
ADDI ITEM,BLKSIZ-1 ;MAKE E.G. 129 WORDS USE 2 DISK BLOCK\r
ASH ITEM,-BLKP2 ;NUMBER OF BLOCK REQUIRED FOR THIS WRITE\r
-DFD02A: HRRZ AC1,SATPTR\r
+\fDFD02A: HRRZ AC1,SATPTR\r
MOVE AC2,SATBK2\r
DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS)\r
JRST DFDO6 ;NOT AVAILABLE\r
MOVN TAC,ITEM\r
LSH TAC,BLKP2\r
HLRES TAC1\r
-\r
CAML TAC,TAC1\r
HRLM TAC,DSKBUF(DEVDAT) ;ONLY A PARTIAL WRITE\r
HLRE TAC1,DSKBUF(DEVDAT)\r
MOVMS TAC1\r
PUSHJ PDP,UPDEVC ;UPDATE SIZE OF FILE\r
ADDM ITEM,SETCNT(DEVDAT) ;NON UPDATE RELATIVE BLOCK# WITHIN THE FILE\r
-\r
- MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT\r
+\f MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT\r
TLZN TAC1,BLKSIZ-1 ;AN EVEN NUMBER OF DISK BLOCKS TO BE WRITTEN?\r
JRST DFDO2G ;YES, DON'T WORRY ABOUT PARTIAL BLOCK\r
;HANDLING PROBLEMS\r
JUMPL AC1,DFDO2C ;OF THIS DUMP MODE OUTPUT REQUEST.\r
SUB AC1,[XWD BLKSIZ,BLKSIZ]\r
HLL AC2,AC1 ;SAVE LH\r
+ ADDI AC1,(PROG) ;RELOCATE USER'S ADDRESS\r
+ HLL AC1,AC2 ;IN CASE OF OVERFLOW INTO LH(2 SEG SAVE)\r
DFDO2D: MOVE AC2,(AC1) ;MOVE DATA FROM END OF USER'S\r
MOVEM AC2,(TAC1) ;OUTPUT AREA DT MONITOR BUFFER\r
AOBJP TAC1,.\r
;TOSS OUT A SERIES OF CONSECUTIVE POINTERS\r
\r
HRRZ AC2,DEVACC(DEVDAT) ;GET RETRIEVAL POINTER POINTER\r
+\r
DFDO3A: MOVE AC1,@AC2 ;IS POINTER ALREADY THERE?\r
ADDI AC2,1\r
TRNE AC1,-1 \r
MOVE TAC,-1(PDP)\r
PUSHJ PDP,SAVDDL ;ADJUST ADR IN CASE OF HIGH SEG SAVE\r
PUSHJ PDP,CHKSUM\r
-\r
HRLM TAC1,-1(AC2)\r
>\r
\r
JRST DFDO1 ;NOT FINISHED, GET NEXT SET\r
POP PDP,TAC ;BACK UP PDP\r
AOJA UUO,DFDO0 ;GO BAK FOR MORE\r
-\r
-;WRITE POINTERS ONTO DISK\r
+\f;WRITE POINTERS ONTO DISK\r
\r
DFDO4: HRLM ITEM,(PDP) ;SAVE COUNT OF BLOCKS TO WRITE\r
PUSHJ PDP,SETBUF ;FIND SOME 200 WORD AREA\r
POP PDP,AC2 ;RESTORE POINTER INTO RETRIEVAL INFO\r
HLRZ ITEM,(PDP) ;RESTORE COUNT OF BLOCKS TO WRITE THIS ITERATION\r
JRST DFDO3B\r
-\r
-;DUMP MODE INPUT.\r
+\f;DUMP MODE INPUT.\r
\r
EXTERNAL COMCHK,ADRERR\r
\r
ADDM TAC,-2(PDP)\r
AOS DEVACC(DEVDAT) ;NEXT POINTER\r
AOS SETCNT(DEVDAT) ;NEXT RELATIVE BLOCK\r
-\r
-\r
-DFDI1: SKIPGE -2(PDP) ;MORE TO GO?\r
+\fDFDI1: SKIPGE -2(PDP) ;MORE TO GO?\r
JRST DFDI2 ;YES\r
\r
DFDI1A: MOVE TAC1,-1(PDP) ;NO, PROCESS THE FIRST BLOCK\r
DFDI1C: MOVE IOS,[XWD IOEND,IODEND] ;NO MORE INPUT\r
ORB IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
-\r
-;DUMP INPUT CONTINUED,\r
+\f;DUMP INPUT CONTINUED,\r
;FIND A SERIES OF CONSECUTIVE BLOCKS TO READ AT ONCE\r
\r
DFDI2: HRRZ AC2,DEVACC(DEVDAT) ;GET NEXT POINTER\r
CAIG AC2,PTRN(DEVDAT)\r
SKIPN AC3,@AC2 ;END-FILE\r
JRST DFDI4 ;YES\r
-\r
CAIN TAC1,-1(AC3) ;STILL CONSECUTIVE?\r
AOJA TAC1,DFDI3 ;YES, LOOP\r
\r
MOVS TAC1,@TAC\r
HRLM TAC,(PDP)\r
HRR TAC1,-3(PDP)\r
- MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT\r
+ MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT \r
MOVE TAC,(TAC) ;GET FIRST LOGICAL BLOCK#\r
MOVEM TAC1,DSKBUF(DEVDAT) ;STORE CONTROLLING IOWD\r
PUSHJ PDP,MQIN ;REQUEST THE INPUT\r
JFCL ;ERRORS IGNORED\r
-\r
-;DUMP INPUT CONTINUED.\r
+\f;DUMP INPUT CONTINUED.\r
;IF THERE IS CHECKSUMMING. CHECK IT, ELSE INCREMENT IOWD\r
;AND LOOP.\r
\r
HRRM AC2,DEVACC(DEVDAT)\r
SETZM @AC2\r
POPJ PDP,\r
-\r
-SUBTTL USETO/USETI\r
+\fSUBTTL USETO/USETI\r
;SETD AND SETI UUOS\r
\r
EXTERNAL WAIT1\r
MOVNS TAC\r
ADDM TAC,SETCNT(DEVDAT)\r
JRST DFSETC\r
-\r
-;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON\r
+\f;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON\r
;DISC, THEN CORE IS FULL, AND THE POINTER IS IN CORE, OTHERWISE\r
;A CHECK IS MADE TO INSURE THAT THE END FILE IS AFTER THE DESIRED\r
;POINTER.\r
PUSHJ PDP,DFO4A ;NO, WRITE THEM OUT\r
HRRZ TAC,DEVEXT(DEVDAT) ;GET BLOCK# OF FIRST RIB\r
PUSHJ PDP,SETPTR ;READ FIRST RIB\r
-DFSETB: MOVEI TAC,1 ;RESET SETCNT\r
+\fDFSETB: MOVEI TAC,1 ;RESET SETCNT\r
HRRM TAC,SETCNT(DEVDAT) ;"POSITIONED" AT RELATIVE BLOCK 1\r
\r
DFSETC: HRRZ TAC,DSKBUF(DEVDAT) ;LSET TAC TO FIRST POINTER\r
HRRZ AC2,TAC1\r
ADD AC2,AC1\r
CAIL AC2,(UUO)\r
-\r
JRST DFSET7 ;YES\r
ADDI AC2,1 ;NO. GET NEXT BLOCK\r
HRRM AC2,SETCNT(DEVDAT)\r
MOVEM IOS,DEVIOS(DEVDAT)\r
PUSHJ PDP,DFO6A ;CLEAR POINTERS\r
JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE\r
-\r
-SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING\r
+\fSUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING\r
;INPUT UUO\r
;* INDICATES INTERRUPT LEVEL\r
\r
EXTERNAL ADVBFF\r
\r
+\r
DFIN: TLNN DEVDAT,LOOKB ;FILE OPEN?\r
JRST DFERR2 ;NO, UNDEFINED FILE\r
TLZ IOS,IO ;SET INPUT INDICATOR\r
MOVEM IOS,DEVIOS(DEVDAT) ;*\r
POPJ PDP, ;*\r
\r
+\r
DFIN1B: TLNE IOS,NMP ;*ANY MORE POINTERS ON DISK?\r
TLO IOS,LIR ;*NO, THIS IS THE LAST READ\r
JRST DFIN1A ;*\r
PUSHJ PDP,GETPTR ;READ RIB COPY POINTERS INTO DDB\r
HRRZ TAC1,DEVACC(DEVDAT)\r
JRST DFIN1D\r
-\r
-;NEED NEW POINTER FROM DISK\r
+\f;NEED NEW POINTER FROM DISK\r
\r
GETPTR: MOVE AC2,DEVOAD(DEVDAT) ;POINTERS DIFFER?\r
TLNE AC2,PNTDIF\r
MOVE TAC,DEVBLK(DEVDAT) ;RESET DEVBKO\r
MOVEM TAC,DEVBKO(DEVDAT) ;BLOCK # WORD INDEX OF A CURRENT RETRIEVAL PACKET\r
GTPTR1: PUSHJ PDP,SET000 ;SET TAC1 TO FIRST WORD OF RIB\r
-\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f MOVE IOS,DEVIOS(DEVDAT) \r
+ MOVE IOS,DEVIOS(DEVDAT) \r
HRRZ AC3,DEVBLK(DEVDAT) ;WORD INDEX OF RETRIEVAL POINTER PACKET\r
ADD AC3,TAC1 ;AC3 POINTS TO NEXT POINTER WITHIN RIB\r
ADDI TAC1,BLKSIZ-2 ;TAC1 POINTS TO WORD 127\r
\r
MOVEI AC1,PTRN(DEVDAT) ;DDB END CHECK\r
DFIN5: CAML AC3,TAC1 ;POINTER BLOCK EMPTY?\r
-\r
JRST DFIN7 ;YES, GET SOME MORE\r
\r
MOVE TAC,@AC3 ;GET RETRIEVAL POINTER\r
MOVSI AC1,PNTDIF ;CLEAR "POINTER DIFFER"\r
ANDCAM AC1,DEVOAD(DEVDAT) ;SINCE DDB IS COPY OF RETRIEVAL DATA.\r
POPJ PDP,\r
-\r
-DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH\r
+\fDFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH\r
JUMPE TAC,DFIN8 ;DONE IF LINK=0\r
MOVSM TAC,DEVBLK(DEVDAT) ;SET BLOCK#, WORD INDE FOR NEXT PACKET\r
PUSH PDP,AC2\r
POPJ PDP, ;*\r
\r
JRST DFIN1 ;*NO,FILL NEXT ONE\r
-\r
-;OUTPUT UUO\r
+\f;OUTPUT UUO\r
\r
EXTERNAL WSYNC,ADVBFE\r
\r
MOVSI TAC1,PNTDIF ;*\r
ORM TAC1,DEVOAD(DEVDAT) ;*\r
>\r
-\r
HRRZ TAC,@DAT ;*ALREADY HAVE A POINTER?\r
JUMPN TAC,DFOT3A ;*YES IF JUMP\r
CAIE DAT,PTRN(DEVDAT) ;*NO, CLEAR NEXT ONE?\r
\r
DFOT3A: CAIE DAT,PTRN(DEVDAT) ;*LIST FULL?\r
JRST QOUT ;*NO, WRITE AND LEAVE\r
-\r
-;OUTPUT UUO CONTINUED.\r
+\f;OUTPUT UUO CONTINUED.\r
;WRITE OUT POINTER LIST.\r
\r
PUSHJ PDP,SETBFO ;CHOOSE AN OUTPUT BUFFER TO READ RIB INTO\r
MOVE TAC,DEVBLK(DEVDAT)\r
MOVEM TAC,DEVBKO(DEVDAT) ;SAE BLOCK#,WORD INDEX OF CURRENT POINTER PACKET\r
POPJ PDP,\r
-\r
-DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT\r
+\fDFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT\r
PUSHJ PDP,SET177 ;SET TAC1 TO WORD 128\r
SETZM @TAC1 ;CLEAR BLOCK# WORD\r
AOS (PDP) ;ALWAYS SKIP RETURN\r
MOVSM TAC,DEVBLK(DEVDAT) ;STORE BLOCK#, INDEX FOR NEW BLOCK\r
PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 AGAIN\r
HRLM TAC,@TAC1 ;LH LINKS TO NEW BLOCK\r
- \r
MOVE TAC,AC3 ;BLOCK# OF CURRENT BLOCK\r
PUSHJ PDP,WRIA ;WRITE THE BLOCK OUT\r
\r
PUSHJ PDP,WRIA ;WRITE THIS BLOCK OF POINTERS OUT\r
PUSHJ PDP,RRI ;READ NEXT BLOCK OF POINTERS IN\r
JRST DFO8A\r
-\r
-;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER\r
+\f;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER\r
\r
EXTERN MJOBN\r
\r
POP PDP,AC2 ;*\r
POP PDP,AC1 ;*\r
POPJ PDP, ;*\r
-\r
-SUBTTL READ/WRITE RETRIEVAL POINTERS\r
+\fSUBTTL READ/WRITE RETRIEVAL POINTERS\r
;INPUT RETRIEVAL BLOCK.\r
\r
RRIB: SKIPA TAC,DEVEXT(DEVDAT) ;READ FIRST RETRIEVAL BLOCK\r
\r
SET000: HRRZ TAC1,DSKBUF(DEVDAT)\r
JRST S177A\r
-\r
-\r
+\f\r
;PUT POINTER INFO IN DDB\r
;ENTER WITH TAC CONTAINING THE BLOCK NUMBER OF THE POINTERS.\r
\r
;ENTER WITH TAC POINTING TO FIRST RETRIEVAL BLOCK OF THE FILE\r
; TO BE DELETED.\r
\r
+\r
RECLAM: PUSHJ PDP,SETBUF ;FIND SPACE IN USER AREA\r
\r
PUSHJ PDP,RECLM5 ;GET FIRST POINTER BLOCK\r
POP PDP,TAC1\r
AOJA DAT,RECLM2 ;GO BACK FOR MORE\r
\r
+\r
RECLM4: HLRZ TAC,@TAC1 ;PICK UP POINTER TO NEXT BLOCK\r
JUMPE TAC,RECLM6 ;NO MORE, GO HOME.\r
RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK.\r
\r
RECLM6: POP PDP,TAC\r
JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE\r
-\r
-;RELEASE UUO.\r
+\f;RELEASE UUO.\r
\r
EXTERNAL DAREQ,DAAVAL\r
\r
PUSHJ PDP,DOWNDA ;RESET DAREQ INTERLOCK\r
DFREL1: TLZ DEVDAT,DSKRLB ;CLEAR RELEASE MARKER.\r
JRST WAIT1\r
-\r
-SUBTTL DISK SPACE ALLOCATION\r
+\fSUBTTL DISK SPACE ALLOCATION\r
;DFGETF: GET A FREE DISK BLOCK\r
;CALL: PUSHJ PDP,DFGETF\r
; ... RETURNS WITH TAC:=LOGICAL BLOCK#\r
HRRM TAC,@SATPTR ;MARK SAT ENTRY FULL\r
JRST DFGTF1\r
\r
+\r
;UPDA - TURN ON THE DISK ALLOCATION INTERLOCK (DAREQ)\r
; - A CALL TO UPDA MUST PRECEDE SAT BLOCK MANIPULATIONS\r
+\r
UPDA: AOSE DAREQ ;INCREMENT COUNT OF USERS REQUESTING DISK ALLOCATION\r
PUSHJ PDP,DAWAIT ;WAIT UNTIL JOB REACHES TOP OF QUEUE\r
TLO IOS,DAFLG\r
MOVEM IOS,DEVIOS(DEVDAT) ;MAKE THIS JOB AS USING SAT BLOCK\r
POPJ PDP,\r
-\r
-;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT.\r
+\f;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT.\r
; CONSIDER DISK FULL WHEN FEW BLOCKS REMAIN FREE UNLESS THE USER\r
; IS LOGGING IN OR USING A NON-SHARABLE RESOURCE.\r
\r
PUSHJ PDP,SATCNT ;NO. COUNT # FREE\r
ADDI TAC1,SENTSZ ;NEXT SAT ENTRY\r
CAIL AC1,JOBN ;ENOUGH SPACE ACCUMULATED?\r
-\r
JRST SATGT2 ;YES - READ A SAT BLOCK\r
CAIGE TAC1,SATTOP ;END OF ENTRIES?\r
JRST SATGT1 ;NO. CONTINUE\r
JUMPE AC1,DSKFUL ;IF NONE FOUND DISK IS REALLY FULL\r
\r
+\r
;THERE ARE JOBN OR FEWER DISK BLOCKS AVAILABLE.\r
;GIVE THEM OUT ONLY IN HARDSHIP CASES\r
LDB TAC,PJOBN\r
TLNE IOS,UBFS+AUFLG ;DOES USER HAVE MONITOR BUFFER OR IS HE ALTERING UFD?\r
JRST SATGT2 ;YES TO EITHER. GIVE HIM A BLOCK ANYWAY.\r
DSKFUL: TLNE IOS,UBFS+AUFLG\r
- JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD\r
-\r
+ JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD \r
PUSHJ PDP,DOWNDA ;RESET ALLOCATION INTERLOCK\r
PUSHJ PDP,HNGSTP ;PRINT "DSK OK?"\r
PUSHJ PDP,UPDA ;IF USER TYPE "CONT" WE TRY AGAIN\r
ADDI AC1,NUMBIT ;MAXIMUM NUMBER\r
SUB AC1,TAC ;LESS NUMBER USED\r
POPJ PDP,\r
-\r
-;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE\r
+\f;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE\r
;CALL TAC:=LOGICAL BLOCK L\r
; PUSHJ PDP,SETFRE\r
; ... RETURN\r
SOS @SATPTR ;DECREMENT BLOCKS USED\r
SETOM SATCHG ;SAT BLOCK IN CORE NOT = DISK COPY\r
JRST DOWNDA ;REMOVE ALLOCATION INTERLOCK AND EXIT.\r
-\r
-;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID\r
+\f;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID\r
; A PDL OVRFLW PROBLEM. IT CAN DO SO BECAUSE IT IS NOT RE-ENTRANT, I.E., ONLY\r
; ONE USER AT A TIME MAY PASS THROUGH HERE BECAUSE OF THE DAREQ INTERLOCK.\r
\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
POPJ PDP,\r
\r
+\r
;SET UP TAC AND TAC1 FOR READ OR WRITE OF SAT BLOCK\r
\r
SATBLK: MOVE TAC,SATPTR\r
MOVE TAC1,SATBK2\r
MOVEM TAC1,DSKBUF(DEVDAT)\r
POPJ PDP,\r
-\r
-SUBTTL "FREE" CORE ALLOCATION\r
+\fSUBTTL "FREE" CORE ALLOCATION\r
;CLEAR OUT DDB AT RELEASE TIME\r
\r
INTERNAL CLRDDB\r
SETDD1: POP PDP,TAC1\r
POP PDP,ITEM\r
POPJ PDP,\r
-\r
-;SET TAC1 TO SOME AREA FOR BUFFER.\r
+\f;SET TAC1 TO SOME AREA FOR BUFFER.\r
;GET BUFFER SPACE FROM USER INPUT OR OUTPUT RING IF AVAILABLE\r
;ASSIGN FROM MONITOR CORE AS A LAST RESORT.\r
;SET DSKBUF(DEVDAT) TO POINT TO BUFFER.\r
TLO IOS,UBFU ;BUFFER IN MONITOR CORE\r
MOVEI TAC1, MONBUF ;TAC1 POINTS TO MONITOR BUFFER\r
JRST SETBF5\r
-\r
-;CLEAR THE BUFFER IN FREE STORAGE IF THERE.\r
+\f;CLEAR THE BUFFER IN FREE STORAGE IF THERE.\r
\r
EXTERNAL BUFCLR,JOBFF,IADRCK\r
CLRBUF: SCHEDULE\r
SUBI TAC,2 ;SET TAC TO 2ND BUFFER WORD\r
SOS (PDP) ;BUFCLR WILL SKIP RETURN\r
JRST BUFCLR ;CLEAR THE BUFFER\r
-\r
-;FIND THE FIRST ZERO IN A SET OF WORDS\r
+\f;FIND THE FIRST ZERO IN A SET OF WORDS\r
;ENTER WITH LH OF TAC SET TO NEGATIVE OF NUMBER OF WORDS.\r
; RH OF TAC CONTAINING ADDRESS OF FIRST WORD.\r
;CALL: PUSHJ PDP,GETZER\r
FAD TAC1,[0]\r
LSH TAC1,-33\r
POPJ PDP,\r
-\r
-\r
-;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1\r
+\f;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1\r
;IT IS ASSUMED THAT THE CLOCK IS OFF.\r
\r
INTERN GETFCR\r
SUBI TAC1,4 ;SYNCHRNIZE\r
ADD TAC1,LOCORE ;FORM CORE ADDRESS\r
POPJ PDP,\r
-\r
-INTERNAL GETBIT\r
+\fINTERNAL GETBIT\r
\r
\r
;SEARCH THROUGH A TABLE TO FIND A SERIES OF ZERO-BITS.\r
MOVEM TAC1,1(AC1) ;SAVE THE SPOT\r
MOVEM TAC,2(AC1)\r
PUSH PDP,TAC\r
- \r
PUSH PDP,TAC1\r
\r
GTBIT1: AOS DAT ;INCREMENT SIZE OF HOLD BY 1 (GETZER LEFT DAT=-1)\r
GTBIT4: POP PDP,TAC1\r
POP PDP,TAC\r
AOS -2(PDP)\r
+\r
HRRZS TAC\r
SUBI TAC,-1(AC2)\r
PUSHJ PDP,RESIDU\r
POP PDP,TAC1\r
AOS -1(PDP) ;SIZE OF LARGEST HOLD MUST BE ADJUSTED\r
JRST GTBIT5\r
-\r
-;FREE A FOUR WORD SECTION OF CORE.\r
+\f;FREE A FOUR WORD SECTION OF CORE.\r
;ENTER WITH ADDRESS IN TAC\r
\r
INTERNAL CLCOR1\r
CLRB2: MOVEM TAC1,1(AC1)\r
CLRB3: MOVEM TAC,2(AC1)\r
POPJ PDP,\r
-\r
-SUBTTL QUEUEING AND INTERRUPT PROCESSING\r
+\fSUBTTL QUEUEING AND INTERRUPT PROCESSING\r
;PUT A REQUEST IN THE USER QUEUE.\r
;ENTER AT QIN FOR INPUT. QOUT FOR OUTPUT.\r
;CALLED AT BOTH INTERRUPT AND UUO LEVELS\r
\r
QIOEND: SCHEDULE ;*\r
POPJ PDP, ;*\r
-\r
-\r
-;PUT A REQUEST IN THE MONITOR QUEUE.\r
+\f;PUT A REQUEST IN THE MONITOR QUEUE.\r
;ENTER AT MQIN FOR INPUT, MQOUT FOR OUTPUT.\r
;ENTER WITH C(TAC1 0-17) = -SIZE OF BLOCK\r
; C(TAC1 18-35) = CORE ADDRESS\r
; LOSS ON THE DISK\r
>\r
HRLI TAC,TRIES\r
-\r
MOVSM TAC,DSKCNT(DEVDAT);STASH AWAY BLOCK #, ERROR COUNT.\r
PUSHJ PDP,SETACT ;SET IOACT\r
NOSCHEDULE\r
TRNN AC1,IODERR!IODTER!IOIMPM\r
AOS (PDP) ;NO, SKIP RETURN\r
POPJ PDP,\r
-\r
-;*\r
+\f;*\r
;* EVERYTHING FROM HERE THRU SETDUN CALLED AT INTERRUPT LEVEL\r
;*\r
;ROUTINE CALLED BY INTERRUPT IN DISK.\r
EXTERNAL JBTADR\r
EXTERNAL MQTOP,MQUEUE\r
\r
+\r
DFINT:\r
IFN FTSWAP,<\r
EXTERNAL SQREQ,SERA,SQGO,SWPINT\r
MOVEI TAC1,BLKSIZ\r
HRRM TAC1,@TAC\r
\r
- IFG CHKCNT,<\r
+\f IFG CHKCNT,<\r
MOVE TAC,DEVOAD(DEVDAT)\r
TLNE TAC,CKSUPR\r
JRST DINT0B\r
SKIPA\r
DFINT1: PUSHJ PDP,DFOUTX ;CHECK FOR MORE OUTPUT\r
SETZM RUNUSR\r
-\r
JRST DFINT4\r
\r
DINT1A: HRRZ TAC,DEVACC(DEVDAT) ;WRITE-LOCK FOUND, SET WLBIT\r
CAIL TAC,MQTOP\r
MOVEI TAC,MQUEUE\r
MOVEM TAC,MOPTR ;FALL THROUGH TO DFINT4\r
-\r
+\f\r
;DETERMINE NEXT TRANSFER TO MAKE ACCORDING TO PRIOROTY\r
; 1) SWAPPING 2) MQ I/O 3) BUFFERED MODE I/O\r
DFINT4: MOVEM IOS,DEVIOS(DEVDAT) ;CLEAR IOACT\r
JRST FINDV ;YES.\r
SETZM DFBUSY ;NO. TURN OFF BUSY FLAG\r
POPJ PDP, ;EXIT INTERRUPT\r
-\r
+\f\r
;FIND A WAITING USER\r
\r
FINDV: HRRZ DEVDAT,DDBPTR\r
JRST USRGO\r
\r
;START UP A USER READ\r
-\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\f\r
+\r
DFINT7: ANDCAM TAC,DEVIAD(DEVDAT) ;CLEAR INPUT WAIT BIT IN DDB\r
\r
USRGO: MOVSM DEVDAT,RUNUSR ;SAVE DEVDAT FOR USE AT DFINT\r
\r
USRGO3: HRRI TAC1,@DEVOAD(DEVDAT) ;GET ADDRESS OF OUTPUT BUFFER\r
AOJA TAC1,DFWRT ;FORM IOWD AND WRITE\r
-\r
-\r
+\f\r
;START UP A MONITOR READ OR WRITE\r
\r
MONGO: MOVS ITEM,@MOPTR ;XWD CORE ADDRESS, SAVED DEVDAT\r
TLZE IOS,IOW ;*\r
JRST SETIOD ;*\r
POPJ PDP, ;*\r
-\r
-SUBTTL ERRORS, SUBROUTINES.\r
+\fSUBTTL ERRORS, SUBROUTINES.\r
;ERROR ROUTINES CALLED FROM UUO LEVEL\r
\r
EXTERN EXCALP,ERRPTU,TPOPJ\r
DFER12: MOVEI TAC,0\r
PUSH PDP,TAC ;ADD SOMETHING TO BE REMOVED (SINCE SETLE NOT CALLED)\r
JRST DFERRY\r
-\r
-WERA: MOVSI IOS,NORELB\r
+\fWERA: MOVSI IOS,NORELB\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
ERRORS <NON-RECOVERABLE DISC WRITE ERROR>\r
\r
+\r
RERA: MOVSI IOS,NORELB\r
ANDCAB IOS,DEVIOS(DEVDAT)\r
ERRORS <NON-RECOVERABLE DISC READ ERROR>\r
-\r
-;CALLED AT BOTH INTERUPT AND UUO LEVELS\r
+\f;CALLED AT BOTH INTERUPT AND UUO LEVELS\r
;COMPUTE CHECK-SUM\r
;ENTER WITH C(TAC 18-35) SET TO BUFFER ADDRESS\r
;RETURN WITH C(TAC1)SET TO ONES COMPLEMENT SUM IN RH.\r
ADDI TAC1,1 ;YES BRING IT AROUND\r
POPJ PDP,\r
>\r
-\r
-;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE,\r
+\f;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE,\r
; OTHERWISE NEGATIVE BLOCK COUNT).\r
; ENTER WITH SIZE OF CURRENT BLOCK IN TAC1\r
UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS\r
HRRZ TAC1,DEVCNT(DEVDAT) ;*PICK UP PREVIOUS MAXIMUM FILE SIZE OF COMPARISON.\r
TRNE TAC1,400000 ;*PREVIOUS MAXIMUM SIZE GREATER THAN 2 EXP 17 WORDS?\r
JRST UPDVC2 ;*YES, THEN COMPARE AND SAVE NEGATIVE BLOCK COUNTS\r
- TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED\r
-\r
+ TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED \r
;* 2EXP17 WORDS?\r
TRNE TAC,40000 ;*\r
JRST UPDVC1 ;*YES, GO SAVE NEGATIVE BLOCK COUNT.\r
HRRM TAC,DEVCNT(DEVDAT) ;*STORE NEW MAXIMUM FILES SIZE ONLY IF PREVIOUS\r
;* MAXIMUM EXEEDED.\r
POPJ PDP, ;*\r
+\f;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE.\r
\r
-;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE.\r
\r
WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER.\r
PUSHJ PDP,SETFRE ;FREE THE BLOCK\r
;SET WRITE-LOCK INDICATION IN A SAT ENTRY.\r
;ENTER WITH A BLOCK NUMBER IN TAC.\r
\r
+\r
SETWL: MOVEI TAC1,SATENT ;*\r
JRST .+2 ;*\r
SETWL1: ADDI TAC1,SENTSZ ;*\r
MOVEI ITEM,WLBIT ;*\r
ORM ITEM,@TAC1 ;*\r
POPJ PDP, ;*\r
-\r
-DSKSR: END\r
-\f\r
-\0\r
+\fDSKSR: END\r
;FROM A TAPE\r
SPACE=4 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE\r
\r
+\r
;DDB MAGIC CELLS\r
FSTBLK=13\r
DLOC=14\r
UDSD=100\r
LSTSAV=20000\r
\r
+\r
;FLAGS IN LH OF IOS\r
NOLINK=200\r
CHNGDR=400\r
RUNBIT=200000\r
RECKON=400000 ;THIS TAPE IS DEAD-RECKONING.\r
; (MUST BE SIGN BIT)\r
-\r
CPBIT=-1 ;FEATURE TEST TO ALLOW IO INTO USER AREA DIRECTLY\r
;IT WILL ONLY HAPPEN ON DUMP MODE WITH NON-STANDARD BIT\r
;(UDSD) ON\r
+\r
\f EXTERN JIFSEC\r
\r
INTERN DTAINT,DTADDB,DTAINI,DTADDS,DTADSP\r
EXP DTADSP\r
XWD 1107,154403\r
EXP 0,0\r
-\r
XWD PROG,0\r
XWD PROG,0\r
EXP 0,0,0\r
-\r
EXP DTADIR\r
EXP 0,0,0,0,0\r
-\r
-\r
DTADIR: BLOCK 200\r
DTADDS=.-DTADDB\r
\r
+\r
JRST DTAINI\r
JRST HUNGTP ;HUNG DEVICE\r
DTADSP: JRST UREL\r
SOJA TAC1,MTAP0\r
POPJ PDP, ;OTHERS ARE NO-OPS\r
\r
+\r
;INITIALIZE DTC\r
DTAINI: CONO DTC,0\r
SETZM DISCON\r
\r
;COME HERE TO RENAME TO A REAL NEW NAME\r
RENAM2: MOVE DAT,TAC ;SAVE LOC OF NAME IN DIRECTORY\r
-\r
PUSHJ PDP,DSERCH ;SEARCH FOR NEW NAME\r
SKIPA ;NOT FOUND - GOOD\r
JRST RENER2 ;NAME ALREADY EXISTS - ERROR\r
SOJA DAT,CPOPJ\r
HRLI DAT,060500\r
SOJA DAT,CPOPJ\r
-\r
\f;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC\r
DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS\r
PUSHJ PDP,BLKSRC ;FIND A BLOCK BELONGING TO FILE\r
\r
;HERE FOR NEW FILE NAME ON ENTER\r
NEWENT: SUB TAC,[XWD 26,26];START AT BEGINNING OF DIRECT.\r
-\r
SKIPN (TAC) ;FIND A FREE SLOT\r
AOJA UUO,ENTR2 ;RETURN WITH UUO POINTING TO WRD 2\r
AOBJN TAC,.-2\r
POPJ PDP, ;NONE AVAILABLE.\r
\r
+\r
;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE\r
SETWD4: HLRE TAC1,@UUO ;GET -LENGTH\r
MOVNS TAC1 ;+LENGTH\r
MOVE TAC,BLK ;TELL USER THE BLOCK NUMBER\r
JRST STOTAC\r
\r
+\r
;GET NEXT (OR PREVIOUS) FREE BLOCK\r
USRFRE: MOVEI TEM,SPACE ;BLOCKS "SPACE" APART\r
LDB BLK,PIOMOD ;EXCEPT DUMP AND SAVMOD FILES\r
USLSTA: PUSHJ PDP,LSTFRE ;THIS ONE\r
JRST CALNXT+1\r
\r
+\r
;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER\r
NOBLKS: MOVEI BLK,TOPBLK+1 ;SET HIGH BLOCK\r
POPJ PDP,\r
MOVEM IOS,DEVIOS(DEVDAT) ;SAVE IOS\r
JRST OUT ;GO TO WRITE RECORD\r
\r
+\r
+\r
;HERE TO CLOSE A DUMP MODE FILE\r
CLSDMP: TLO IOS,DMPCLS+IO+DMPMOD ;SET SWITCHES\r
PUSHJ PDP,GETDT ;GET CONTROL\r
PUSHJ PDP,WRTBLK ;WRITE UT\r
PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN\r
\r
+\r
UREL2: MOVE TAC,DEVIAD(DEVDAT) ;BITS 1,2 ARE COUNT OF CHANS\r
TLNE TAC,200000 ;DEV INITED ON ANOTHER CHANNEL TOO?\r
-\r
QUANTL: POPJ PDP,QUANT ;YES, DON'T ZAP IOS OR DDB\r
\r
;SOME BITS IN THE IOS WORD AND THE DDB WILL NORMALLY BE CHANGED ON THE\r
;IT WILL WORK (CHECK IS MADE AT ENTER)\r
SETZM FSTBLK(DEVDAT)\r
JRST STOIOS ;STORE IOS AND RETURN\r
+\r
+\r
\fGETDT0: PUSHJ PDP,SETACT ;WAIT TILL TAPE COMES OUT OF REWIND\r
PUSHJ PDP,WSYNC ;BEFORE DOING ANYTHING ELSE TO IT\r
;GET DEC TAPE CONTROLLER\r
JUMPE BLK,EOF ;0 MEANS EOF\r
PUSHJ PDP,BLKCHK ;CHECK LEGALITY OF BLOCK NUMBER\r
TLNN IOS,DMPMOD ;DUMP MODE?\r
-\r
CAIE BLK,DIRBLK ;TRYING TO READ DIRECTORY?\r
JRST READBF ;NO. GO READ\r
\r
JRST STOIOS\r
JRST DMPEOF ;GIVE UP CONTROL IF DUMP-MODE\r
\r
+\r
;ZERO USER'S CORE ON SAVE-MODE INPUT\r
ZERCOR: MOVEI TAC,JOBDDT(PROG) ;ZERO CORE\r
HRLI TAC,1(TAC)\r
CAIN BLK,DIRBLKK ;CHECK IF WRITING DIRECTORY\r
JRST COR2HM ;YES, WRITE CORE IMAGE\r
JUMPE BLK,FAKADV ;DONT WRITE IF NO BLOCK GIVEN\r
-\r
PUSHJ PDP,BLKCHK ;CHECK FOR LEGAL BLOCK\r
UOUT2: TLNN IOS,DMPMOD ;ALREADY HAVE CONTROL IF DUMP-MODE\r
PUSHJ PDP,GETDT ;GET DEC TAPE CONTROLLER\r
OUTBL2: HRRZ BLK,OBLK(DEVDAT)\r
PUSHJ PDP,STOIOS\r
\r
+\r
WRTBLK: PUSHJ PDP,FNDBLK ;GO SEARCH FOR BLOCK\r
MOVE TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE\r
JRST RDWRT\r
DMPTS1: POP PDP,TAC\r
JRST THRUTD\r
\r
+\r
IFN CPBIT, <\r
;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY\r
TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE\r
POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME\r
JRST OUTBL2\r
\r
+\r
NOBLK0: TRO IOS,IOIMPM\r
POP PDP,TAC ;RETURN TO UUOCON WITH ERROR BIT SET\r
JRST THRUTD\r
MOVEM TAC,BUF ;WD CNT =177\r
JRST OUFULL ;GO WRITE PART OF STUFF\r
\r
+\r
;GET NEXT COMMAND FROM LIST\r
NXTCOM: SKIPN DMPLST(DEVDAT) ;END OF COMMANDS?\r
JRST NXTCM2 ;YES. RETURN\r
JUMPG TAC,NXTCM1 ;GO-TO WORD\r
ADDI TAC,(PROG) ;REAL COMMAND - ADD RELOCATION\r
AOJA TAC,CPOPJ1 ;AND RETURN\r
+\r
\f;END OF DUMP-MODE LIST\r
NXTCM2: SETZM SVDWRD(DEVDAT) ;ZERO POINTERS\r
SETZM DMPLST(DEVDAT)\r
POPJ PDP,\r
\r
+\r
DMPFLC: SKIPE TAC,SVDWRD(DEVDAT) ;IS THERE ANOTHER COMMAND\r
JRST DMPFLA ;YES. GET IT\r
JRST DMPTH2 ;NO. THROUGH\r
SKIPA TAC,BFPNTR ;NO. INTO BUF\r
HRR TAC,DLOC(DEVDAT) ;YES. LOC OF DIRECTORY\r
CONSZ DTC,100000 ;IN REVERSE?\r
-\r
JRST IORVRS ;YES\r
SOS TAC ;ADDRESS -1\r
MOVE TEM,IOWD ;GET IOWD\r
MOVE TEM,[JSR RVERS]\r
JRST IOGO ;COMPILCATED STUFF FOR EACH WORD\r
\r
+\r
;HERE FOR AY DATA WORD WITH TAPE IN REVERSE\r
RVERS: 0\r
IOWD: BLKI DTC,PNTR ;READ (WRITE) A WORD\r
MOVEI BLK,0 ;SEARCH FOR BLOCK 0\r
PUSHJ PDP,FNDBLK ;GO FIND BLOCK\r
\r
+\r
;CONTROL COMES HERE ON INTERRUPT CHANNEL WHEN THE BLOCK IS FOUND\r
TLNE IOS,RUNBIT ;REWIND UNLOAD?\r
JRST .+3 ;YES, CONTINUE\r
MOVE IOS,DEVIOS(DEVDAT) ;RESET IOS\r
JRST REWDUN ;DECREASE DTREQ. STOP TAP\r
\r
+\r
;HERE TO PUT C(TAC) IN THE CLOCK QUEUE\r
CLKREQ: 0\r
CONO PI,PIOFF ;TURN OFF PI\r
TLNE TAC,2000 ;IS CONTROL STILL ACTIVE?\r
JRST SRCHD ;YES. MUST BE IN "PSEUDO END-ZONE"\r
DATAI DTC,TAC ;NO. READ A BLOCK NUMBER\r
- TLZ TAC,-1 ;LEGAL BLOCK NUMBER>\r
+ TLZ TAC,-1 ;INSURANCE\r
+ CAILE TAC,TOPBLK ;LEGAL BLOCK NUMBER?\r
JRST SRCHB ;NO. SET ERROR SWITCH\r
SUB TAC,BLOCK ;NOW-WANTED\r
IFN CPBIT, <\r
SRCHA: CONSZ DTC,100000 ;IF TAPE IS IN REVERSE\r
MOVNS TAC ;SWITCH TURN-AROUND TEST\r
JUMPLE TAC,.+3 ;TEST FOR DISCONNECT IF DIRECTION IS CORRECT\r
-\r
;***\r
CONO DTC,DTTURN ;TURN AROUND\r
JRST SRCHXT ;AND GO AWAY\r
CONO DTS,770001 ;FUNCTION STOP\r
JRST SRCHXT ;GO AWAY\r
\r
+\r
IFN CPBIT, <\r
SRCHC: CONSZ DTC,100000 ;GOING FORWARD?\r
TLCA TAC,400000 ;NO. SWITCH TURN AROUND TEST. ENSURE FORWARD\r
LDB TAC1,PJOBN ;ASSOCIATED JOB NUMBER\r
HRRM TAC1,MONB2 ;SAVE IN WD 2 OF MONITOR BUFFER\r
HRLM DEVDAT,MONB2 ;SAVE ADDRESS OF DTA\r
-\r
CONSZ DTC,200000\r
IMULI TAC,62 ;COMPUTE A TIME TO BLOCK\r
CONSZ DTC,100000 ;BASED ON 50 MSEC/BLOCK FORWARD\r
TIMREQ: XWD BACK,0\r
TIMRQ2: XWD BACKA,1\r
\r
+\r
IFN ALMACT,<\r
EXTERN PRIIN\r
;COME HERE ON THE CLOCK LEVEL TO BRING THE JOB ASSOCIATED WITH\r
ANDCAM TAC,DEVIOS(DEVDAT) ;ZAP BIT SO IT WONT BE SWAPPED OUT AGAIN\r
POPJ PDP,\r
\r
+\r
;HERE WHEN SWAPPER DOES GET THE JOB BACK INTO CORE\r
SWPBAK: MOVE IOS,DEVIOS(DEVDAT)\r
SETM MONB2 ;CLEAR JOB NO, FROM MON BUFFER\r
HLRZ TAC1,IBLK(DEVDAT) ;BLOCK NEEDED\r
DPB TAC1,[POINT 10,BLOCK,35]\r
HRRZ TAC,CLOCK\r
-\r
HRLI TAC1,CPOPJ ;FIND CLOCK-QUEUE REFERENVCE TO BACKC\r
BACK3: CAIN TAC,CIPWTM\r
JRST BACKD ;NOT THERE, TAPE MUST HAVE BEEN STOPPED\r
EXCH TAC,DISCON ;UNIT TO CONNECT TO\r
JRST BACK2 ;GO RECONNECT\r
\r
+\r
;IF WE GET HERE THERE IS A SLOW TAPE ON THE SELECTED DRIVE\r
BACKC: CONO PI,PIOFF ;CANT RISK CHANGING THE INTERRUPT ENABLES HRE\r
CONI DTS,TAC ;READ IN ENABLE FLAGS\r
FNDPDP: XWD -2,.\r
0\r
\r
+\r
IFN CPBIT, <\r
;HERE WHERE DUMP-MODE POINTER RUNS OUT\r
DMPADV: 0\r
CONSZ DTS,670000 ;AND NO ERRORS?\r
JRST ERRS ;NO. TOUGH LUCK\r
SKIPGE BLOCK ;BAD BLOCK NUMBER ON TAPE?\r
+ JRST DERR ;YES, TURN ON IODERR\r
DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE?\r
JRST DMPTHR ;YES. GO ELSEWHERE\r
TLNN IOS,SINGL\r
JRST OUTHRU ;YES\r
\fEXTERN JBTSTS,PJOBN\r
\r
+\r
;HERE ON END OF AN INPUT BLOCK\r
HRROI TAC1,177 ;MASK OUT 1ST-BLK DATA\r
TRNN IOS,UDSD ;UNLESS IN NON-STD\r
JRST THRUIN\r
PUSHJ PDP,ADVBFF ;GET NEXT BUFFER\r
JRST THRUIN ;EMPTY BUF NOT AVAILABLE\r
-\r
SKIPLE DISCON ;TAPE TIMED OUT?\r
JRST BACKB ;YES. GO RECONNECT\r
SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE\r
SKIPG DTREQ ;YES. ANYONE ELSE WANT IT?\r
JRST READBC ;NO. READ NEXT BLOCK\r
\r
+\r
THRUIN: HRRZ TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN?\r
JUMPN TAC,THRUTP ;YES. DONT CHANGE REVERSE BIT\r
TLZ IOS,RVERSE ;NO. SET IOS BIT TO CORRECT DIRECTION\r
;WHEN THE TAPE TIMES OUT FNDBLK WILL RESET THE HUNG TIME, AND\r
;IF IT IS STILL HUNG AT ITS END THE ERROR MESSAGE WILL OCCUR\r
\r
+\r
INTERN FTSWAP\r
EXTERN SHFWAT\r
;HERE ON END OF BLOCK WHEN THE JOB IS STILL SWAPPED OUT\r
JRST FILBUF ;NO. GO WRITE NEXT BLOCK\r
JRST THRUTP ;YES. GIVE UP TAPE\r
\r
+\r
;TURN TAPE AROUND AFTER END-ZONE INTERRUPT\r
TURN: CONSZ DTC,500 ;READ BLOCK NUMBERS?\r
JRST DIREOF ;NO. END ZONE WHILE READING DATA\r
HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB\r
JRST CPOPJ1\r
\r
+\r
IFN CPBIT, <\r
;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER\r
USDMTH: MOVEI TAC1,IBLK(DEVDAT)\r
;EOF BEFORE ALL DATA IS IN - DUMP MODE\r
DMPEOF: TRO IOS,IODEND ;LIGHT EOF BIT\r
JRST DMPTH2 ;GIVE UP TAPE\r
-\fSVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL\r
+\f\r
+\r
+SVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL\r
JRST ADRERR ;TYPE ERROR MESSAGE\r
;COME HERE ON ERROR\r
ERRS: AOS TAC,ERRCNT ;BUMP COUNT\r
IFN CPBIT, <\r
BLKCNT: 0\r
SVPNTR: 0\r
-\r
USPNTR: 0\r
DIRCTN: 0\r
>\r
SUBTTL DTA551 A.WACHS/TW/RCC 01 JUN 69 V012\r
XP VDTASR,012 ;GLOBAL VERSION NUMBER FOR LOADER STORAGE MAP.\r
\r
+\r
ENTRY DTCSRN ;ENTRY POINT FOR SELECTIVE LOAD BY BUILD\r
DTCSRN:\r
EXTERNAL TPOPJ,TPOPJ1,DTCCHL,DCOUT,DCIN,DCON,DCOFF\r
EXTERNAL STOIOS,STOTAC,SETACT,CLRACT,OUT,DTCSAV,PIOMOD\r
-\r
EXTERNAL DTAVAL,DTREQ,SETIOD,THSDAT,PUNIT,GETDCDT\r
EXTERNAL ADVBFE,ADVBFF,ADRERR,WAIT1,CPOPJ,CPOPJ1,BADDIR\r
EXTERNAL COMCHK,PJOBN,RELEA9,UADCK1,DTTRY\r
QUANT=5 ;NUMBER OF BLOCKS CAN READ BEORE GIVING UP DTC\r
SPACE=6 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE\r
\r
+\r
;DDB MAGIC CELLS\r
FSTBLK=13\r
DLOC=14\r
;TO USER. IF -1 THE I/O IN DUMP MODE WITH\r
;BIT 29 ON IN INIT WILL DO IO DIRECTLY TO USER\r
;WIUTHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES\r
-\f EXTERN JIFSEC\r
\r
- INTERN DTCINT,DTCDDB,DTCINI,DTCDDS\r
+\f INTERN DTCINT,DTCDDB,DTCINI,DTCDDS\r
\r
DTCDDB: SIXBIT /DTA0/\r
XWD ^D60*HUNGST,200\r
EXP DTCDSP\r
XWD 1107,154403\r
EXP 0,0\r
-\r
XWD PROG,0\r
XWD PROG,0\r
EXP 0,0,0\r
-\r
EXP DTCDIR\r
EXP 0,0,0,0,0\r
-\r
-\r
DTCDIR: BLOCK 200\r
DTCDDS=.-DTCDDB\r
\r
+\r
JRST DTCINI\r
JRST THRUTP ;HUNG DEVICE\r
DTCDSP: JRST UREL\r
JRST UTPCLR\r
POPJ PDP, ;MTAPE\r
\r
+\r
;INITIALIZE DTC\r
DTCINI: CONO DTC,0\r
CONO DC,0\r
\r
;COME HERE TO RENAME TO A REAL NEW NAME\r
RENAM2: MOVE DAT,TAC ;SAVE LOC OF NAME IN DIRECTORY\r
-\r
PUSHJ PDP,DSERCH ;SEARCH FOR NEW NAME\r
SKIPA ;NOT FOUND - GOOD\r
JRST RENER2 ;NAME ALREADY EXISTS - ERROR\r
HRRZ TAC,DLOC(DEVDAT) ;LOCAION OF DIRECTORY\r
ADD TAC,[XWD -26,NAMSTR] ;POINT TO START OF NAMES\r
NMLOOK: SKIPN TAC1,@UUO ;GET NAME\r
- JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN \r
+ JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN\r
MOVEM TAC1,DEVFIL(DEVDAT) ;STORE FOR RENAME AND SUPERSEDING\r
; SHARED SEGMENTS\r
CAMN TAC1,(TAC) ;TEST FOR MATCH\r
SOJA DAT,CPOPJ\r
HRLI DAT,060500\r
SOJA DAT,CPOPJ\r
-\r
\f;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC\r
DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS\r
PUSHJ PDP,BLKSRC ;FIND A BLOCK BELONGING TO FILE\r
\r
;HERE FOR NEW FILE NAME ON ENTER\r
NEWENT: SUB TAC,[XWD 26,26];START AT BEGINNING OF DIRECT.\r
-\r
SKIPN (TAC) ;FIND A FREE SLOT\r
AOJA UUO,ENTR2 ;RETURN WITH UUO POINTING TO WRD 2\r
AOBJN TAC,.-2\r
POPJ PDP, ;NONE AVAILABLE.\r
\r
+\r
;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE\r
SETWD4: HLRE TAC1,@UUO ;GET -LENGTH\r
MOVNS TAC1 ;+LENGTH\r
MOVE TAC,BLK ;TELL USER THE BLOCK NUMBER\r
JRST STOTAC\r
\r
+\r
;GET NEXT (OR PREVIOUS) FREE BLOCK\r
USRFRE: MOVEI TEM,SPACE ;BLOCKS "SPACE" APART\r
LDB BLK,PIOMOD ;EXCEPT DUMP AND SAVMOD FILES\r
USLSTA: PUSHJ PDP,LSTFRE ;THIS ONE\r
JRST CALNXT+1\r
\r
+\r
;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER\r
NOBLKS: MOVEI BLK,TOPBLK+1 ;SET HIGH BLOCK\r
POPJ PDP,\r
PUSHJ PDP,GETDT ;WAIT TILL DTC AVAILABLE\r
MOVEI BLK,DIRBLK ;BLOCK NUMBER\r
PUSHJ PDP,WRTBLK ;WRITE UT\r
- PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN\r
+ JRST WAIT1 ;DONT RETURN TO USER TILL DONE\r
+\r
\r
;GET DEC TAPE CONTROLLER\r
GETDT: PUSHJ PDP,GETDCDT ;GET DATA CONTROL. DECTAPE CONTROL\r
MOVEM DEVDAT,USEWRD ;SAVE ACS NEEDED ON INTERRUPT LEVEL\r
JRST SETACT ;LIGHT IOACT AND RETURN\r
\r
+\r
;HERE TO CLOSE A DUMP MODE FILE\r
CLSDMP: TLO IOS,CLSDMP ;SET SWITCHES\r
PUSHJ PDP,GETDT ;GET CONTROL\r
PUSHJ PDP,BLKCHK ;CHECK LEGALITY OF BLOCK NUMBER\r
TLNN IOS,DMPMOD ;DUMP MODE?\r
CAIE BLK,DIRBLK ;TRYING TO READ DIRECTORY?\r
-\r
JRST READBF ;NO. GO READ\r
\r
;READING DIRECTORY - GIVE CORE IMAGE IF IT EXISTS\r
JRST STOIOS\r
JRST DMPEOF ;GIVE UP CONTROL IF DUMP-MODE\r
\r
+\r
;ZERO USER'S CORE ON SAVE-MODE INPUT\r
ZERCOR: MOVEI TAC,JOBDDT(PROG) ;ZERO CORE\r
HRLI TAC,1(TAC)\r
JUMPE BLK,FAKADV ;DONT WRITE IF NO BLOCK GIVEN\r
PUSHJ PDP,BLKCHK ;CHECK FOR LEGAL BLOCK\r
UOUT2: TLNN IOS,DMPMOD ;ALREADY HAVE CONTROL IF DUMP-MODE\r
-\r
PUSHJ PDP,GETDT ;GET DEC TAPE CONTROLLER\r
FILBUF:\r
DTOCHK: TLNE IOS,DMPMOD ;DUMP MODE?\r
MOVSI TAC,@DEVOAD(DEVDAT) ;LOCATION OF BUFFER\r
ADD TAC,[XWD 1,BUF];SET TO STORE IN MONITOR BUFFER\r
BLT TAC,BUF+177 ;GO BLT IT\r
+ SKIPN BUF ;GIVE UP TAPE IF\r
+ JRST THRUTP ;NO BUFFER TO OUTPUT\r
TLZ IOS,NOLINK\r
\fOUFULL: TRNE IOS,UDSD ;NON-STANDARD?\r
JRST OUTBL2 ;YES, NO FILE-STRUCTURED OPERATIONS\r
OUTBL2: HRRZ BLK,OBLK(DEVDAT)\r
PUSHJ PDP,STOIOS\r
\r
+\r
WRTBLK: PUSHJ PDP,FNDBLK ;GO SEARCH FOR BLOCK\r
MOVE TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE\r
JRST RDWRT\r
TLO IOS,CHNGDR ;REMEMBER TO WRITE IT OUT\r
MOVSI TAC1,DVDIRI\r
ORM TAC1,DEVMOD(DEVDAT) ;DIR. IS NOW IN CORE\r
-FAKADV: TLZE IOS,DMPMOD ;DUMP MODE?\r
- JRST THRUTD ;YES. GIVE UP CONTROL\r
+FAKADV: TLZN IOS,DMPMOD ;DUMP MODE?\r
PUSHJ PDP,ADVBFE ;ADVANCE BUFFERS\r
JFCL\r
TLZ IOS,NOLINK ;DIRECTORY BLOCK IS NOT LINKED\r
DMPTS1: POP PDP,TAC\r
JRST THRUTD\r
\r
+\r
IFN CPBIT, <\r
;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY\r
TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE\r
MOVEM TAC,DCLOC1 ;IOWD IS EXHAUSTED\r
HRRZM PROG,ADRPRG ;SAVE JUST ADDRESS OF PROG\r
TLO IOS,NOBUF ;INDICATE DIRECTLY TO USER\r
+ XCT @1(PDP) ;TURN ON/OFF IO\r
TLNN IOS,IO\r
JRST CPOPJ1 ;READING - CONTINUE\r
POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME\r
JUMPG TAC,NXTCM1 ;GO-TO WORD\r
ADDI TAC,(PROG) ;REAL COMMAND - ADD RELOCATION\r
AOJA TAC,CPOPJ1 ;AND RETURN\r
+\r
;END OF DUMP-MODE LIST\r
NXTCM2: SETZM SVDWRD(DEVDAT) ;ZERO POINTERS\r
SETZM DMPLST(DEVDAT)\r
POPJ PDP,\r
\r
+\r
DMPFLC: SKIPE TAC,SVDWRD(DEVDAT) ;IS THERE ANOTHER COMMAND\r
JRST DMPFLA ;YES. GET IT\r
JRST DMPTH2 ;NO. THROUGH\r
CONO PI,PION\r
POPJ PDP, ;DISMISS INTERRUPT\r
\r
-;HERE FOR AY DATA WORD WITH TAPE IN REVERSE\r
+\r
+;HERE FOR ANY DATA WORD WITH TAPE IN REVERSE\r
RVERS: 0\r
IOWD: BLKI DTC,PNTR ;READ (WRITE) A WORD\r
JRST RVTHRU ;POINTER RAN OUT\r
JSR SHUTDN ;SHUT DOWN DATA CONTROL\r
JEN @DTATHR ;DISMISS\r
\r
+\r
SHUTDN: 0\r
CONSZ DC,10000 ;DATA MISSED?\r
SETOM ERRFLG ;YES. SET SWITCH\r
MOVEM TEM,DCLOC1 ;FOR FORWARD DATA OPERATIONS\r
CONSZ DTC,20000 ;IS TAPE ALREADY MOVING/\r
JRST FNDBL4 ;YES\r
-\r
TRO TAC,323200 ;NO, SET READ BLK NOS., START DELAY\r
TLNN IOS,RVERSE ;MOVE TAPE BACKWARDS?\r
TRO TAC,10000 ;YES\r
MOVEM IOS,DEVIOS(DEVDAT) ;RESTORE IOS IN CORE\r
POPJ PDP, ;AND EXIT\r
\r
+\r
;HERE TO INITIATE READ OF A TAPE THAT IS MOVING ALREADY\r
FNDBL4: CONSZ DTC,10000 ;GOING BACKWARDS?\r
TRO TAC,10000 ;YES\r
MOVEM TAC,IBLK(DEVDAT) ;STORE IN DDB\r
TLZE IOS,IOW ;NO. IN IO WAIT?\r
PUSHJ PDP,SETIOD ;YES. TAKE OUT OF WAIT\r
- TLZE IOS,SINGL+RWDIR+DMPCLS ;DIRECTORY OPERATION OR\r
- ;CLOSING DUMP FILE?\r
+ TLZE IOS,SINGL+RWDIR ;DIRECTORY OPERATION?\r
JRST THRUTP ;YES. LEAVE\r
TLNE IOS,IO ;WRITING?\r
JRST OUTHRU ;YES\r
\fEXTERN JBTSTS,PJOBN\r
\r
+\r
;HERE ON END OF AN INPUT BLOCK\r
HRROI TAC1,177 ;MASK OUT 1ST-BLK DATA\r
TRNN IOS,UDSD ;UNLESS IN NON-STD\r
JRST THRUIN ;YES. DONT ADVANCE BUFFERS\r
PUSHJ PDP,ADVBFF ;GET NEXT BUFFER\r
JRST THRUIN ;EMPTY BUF NOT AVAILABLE\r
-\r
SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE\r
CAILE BLK,TOPBLK ;THE ERROR WILL BE CAUGHT ON THE\r
JRST THRUIN ;UUO LEVEL NEXT TIME AROUND\r
SKIPG DTREQ ;YES. ANYONE ELSE WANT IT?\r
JRST READBC ;NO. READ NEXT BLOCK\r
\r
+\r
THRUIN: HRRZ TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN?\r
JUMPN TAC,THRUTP ;YES. DONT CHANGE REVERSE BIT\r
TLZ IOS,RVERSE ;NO. SET IOS BIT TO CORRECT DIRECTION\r
CONO DTC,0 ;SHUT DOWN DATA CONTROL\r
HLLZS DTCINT\r
POPJ PDP, ;AND LEAVE\r
-\r
\f EXTERN CLOCK\r
\r
;HERE ON END OF OUTPUT BLOCK\r
JRST FILBUF ;NO. GO WRITE NEXT BLOCK\r
JRST THRUTP ;YES. GIVE UP TAPE\r
\r
+\r
;TURN TAPE AROUND AFTER END-ZONE INTERUPT\r
TURN: MOVEM TAC,TEMPA ;SAVE TAC\r
MOVE TAC,UNIT ;UNIT AND CHANNEL\r
HLLZS DTCINT\r
JEN @DTCCHL ;AND LEAVE\r
\r
+\r
;HERE WITH AN INTERRUPT WHILE SEARCHING FOR BLOCK NUMBERS\r
BLKNUM: CONSZ DTS,2 ;END ZONE INTERRUPT?\r
JRST TURN ;YES. TURN AROUND\r
\r
TIMREQ: XWD .+1,3 ;E CLOCK TICKS\r
SOSL DTREQ ;ALLOW OTHER JOBS\r
- SETOM DTAVAL ;TO GET DT CONTROL NOW\r
+\f SETOM DTAVAL ;TO GET DT CONTROL NOW\r
POPJ PDP,\r
\f;COME HERE ON END OF DUMP MODE BLOCK\r
SVDMTH: IFN CPBIT, <\r
HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB\r
JRST CPOPJ1\r
\r
+\r
IFN CPBIT, <\r
;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER\r
USDMTH: MOVEI TAC1,IBLK(DEVDAT)\r
JRST READBC ;GO READ BLOCK NUMBER\r
TROA IOS,IOBKTL ;LIGHT ERROR BIT\r
\r
+\r
;EOF BEFORE ALL DATA IS IN - DUMP MODE\r
DMPEOF: TRO IOS,IODEND ;LIGHT EOF BIT\r
JRST DMPTH2 ;GIVE UP TAPE\r
JRST FNDBL2 ;NO. TRY AGAIN\r
\r
;PERMANENT ERROR\r
-\r
PERMER: CONSZ DTS,10 \r
TRO IOS,IODTER ;PARITY\r
CONSO DTS,100\r
BUF: BLOCK 200\r
DTAEND: END\r
\f\r
-\0\0\0\0
\ No newline at end of file
\r
THE SOURCE OF DDT,13 WILL ASSEMBLE INTO SEVERAL DIFFERENT\r
VERSIONS; THE ASSEMBY IS CONTROLED BY THE VALUE ASSIGNED\r
-TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWSR:\r
+TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWS:\r
\r
BIT 35 =0: ASSEMBLE USER MODE DDT\r
=1: ASSEMBLE AN EXECUTIVE MODE DDT\r
\r
\r
\r
+\r
EXAMPLE OF A MACRO ASSEMBLY COMMAND:\r
\r
.^C\r
^Z\r
\r
END OF PASS 1 ;THIS LINE TYPED BY MACRO\r
-\r
^Z\r
\r
NO ERRORS DETECTED ;TYPED BY MACRO\r
\r
ITF=2 ;INSTRUCTION TYPED IF ITF=1\r
OUTF=4 ;OUTPUT IF OUTF=1\r
-CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT\r
+CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT\r
LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT\r
Q2F=1 ;NUMBER TYPED AFTER ALT MODE \r
-R20F=10 ;TEMP FLAG USED IN SETUP\r
+R20F=10 ;TEMP FLAG USED IN SETUP\r
SBF=20\r
-NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE\r
+NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE\r
POWF=4000 ;ARGUMENT FOR EXPONENT COMING\r
\r
;DEFINE SYMBOL TABLE SYMBOL TYPES\r
DDTX=DDT\r
ENTRY DDTX ;NEEDED BY MONITOR>\r
\r
+\r
;DEFINE $ SYMBOLS INTERNAL TO DDT\r
OPDEF DDTINT [Z 0,] ;ADDRESS FLAG FOR INTERNAL REGISTERS\r
\r
XP $I,SAVPI\r
\r
SETUWP=36\r
-\r
\f;DEFINE I/O DEVICE MNEMONICS\r
\r
IFN EDDT&1,<\r
XP UTS,214B11\r
XP DCSA,300B11\r
XP DCSB,304B11\r
-\r
XP DF,270B11\r
XP MTC,220B11\r
XP MTS,224B11\r
XP JEN,2545B11\r
XP HALT,2542B11\r
\r
+\r
\fIFE EDDT&10,<\r
DDT: JSR SAVE\r
PUSHJ P,REMOVB\r
SKIPL PRGM ;IF PRGM .GE. 0, THEN RE-INIT\r
DDT0: MOVEM W,PRGM ;PRGM=C(JOBSYM)\r
>\r
+\r
\fIFN EDDT&10,<\r
DDT: CALLI\r
MOVEI T,SYMSET\r
SETOM CRASHS ;FLAG CRASH.SAV EXISTS ON DSK\r
USETI 1,1\r
INPUT 1,RSILST\r
-\r
STATZ 1,740000\r
HALT .-3\r
SETOM RSAVE ;FORCE READING OF "CURRENT" BLOCK\r
6) AFTER CARRIAGE RETURN IS TYPED FILDDT IS DONE.\r
7) SAVE FILDDT WITH A NEW NAME SO AS NOT TO CONFUSE IT WITH THE\r
ORIGINAL FILDDT.SAV\r
-\f\r
+\r
THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE):\r
1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON\r
2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER & COMMON\r
JRST NOLPT ;GO TRY IT\r
DDTSTP: Z ;SAVE POSSIBLE SYMBOL POINTER\r
>\r
-\f\r
-\r
-DD1: PUSHJ P,CRF\r
+\fDD1: PUSHJ P,CRF\r
DD1.5: TLZ F,ROF ;CLOSE ANY OPEN REGISTER\r
MOVE T,[XWD SCHM,SCH]\r
BLT T,ODF ;LOAD ACS\r
LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE\r
CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE\r
JRST DDT(W)\r
+\r
\f MOVE T,SYL\r
TLZN F,LTF\r
JRST POWER\r
MOVE T,SYM\r
TLO T,GLOBAL\r
MOVEM T,(R)\r
-\r
HRRZ T,LLOCO\r
TLNE F,MF\r
TLO T,400000\r
SOJG W1,NM1A1\r
NM1B: MOVSI W1,211000(T)\r
FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT\r
-\r
FADRB R,FH ;ADD VALUE INTO FLOATING NO.\r
MOVEM R,SYL\r
AOJA T,LE1A\r
TLNN T,340000\r
JRST EVAL1\r
MOVE T,1(R)\r
-\r
CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP\r
CPOPJ: POPJ P,\r
\r
\fSIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT)\r
SIXBIN: CAMN T,SYL\r
JRST SIXBI2\r
- ANDI T,77\r
- TRC T,40\r
+ CAIL T,"A"+40 ;IS CHAR BETWEEN LOWER CASE "A" AND\r
+ CAILE T,"Z"+40 ; LOWER CASE "Z"?\r
+ SKIPA ;NO\r
+ TRC T,40 ;YES, CONVERT TO UPPER CASE\r
+ CAIL T," " ;IS CHAR IN SIXBIT SET?\r
+ CAILE T,"_"\r
+ JRST ERR ;NO\r
+ ANDI T,77 ;YES, MASK TO 6 BITS\r
+ TRC T,40 ;CONVERT TO SIXBIT FORM\r
ROT T,-6\r
LSHC T-1,6\r
SOJA W1,SIXBI1\r
HRL T,ESTU\r
HRRM T,ESTU\r
SKIPGE ESTU\r
-\r
BLT T,-1(R)\r
DEF2: MOVE T,DEFV\r
MOVEM T,1(R) ;PUT IN NEW VALUE\r
ADD S,T\r
HRRM S,T\r
PUSHJ P,DEP\r
+ JFCL\r
POP P,R\r
PUSHJ P,REMUN\r
DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL\r
ADD T,R\r
ADDB T,WRD\r
JRST SPACE+1\r
-\r
\fACCF1: MOVEM T,WRD ;SET LEFT HALF OF A,,B\r
JRST SPACE+1\r
\r
POP P,F\r
TLNE F,PTF\r
TLNE F,SF\r
-\r
JRST RPRN1\r
MOVEM T,SYL\r
TLO F,QF+SF\r
CAIN T,15\r
JRST .-2\r
JRST DD1.5>\r
-\fOCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT\r
+\r
+\f\r
+OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT\r
OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY\r
TROA F,LF1\r
SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT\r
HRRZ T,@BCOM3\r
HRRM T,PROC0 ;SETUP ADDRESS OF BREAK\r
HLRZ T,@BCOM3\r
-\r
JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE\r
PUSHJ P,LCT ;PRINT TAB\r
HLRZ T,@BCOM3\r
JRST REMOV1\r
IFN EDDT&1,<JRST TTYRET>\r
IFE EDDT&1,<POPJ P,>\r
-\r
;IN EXEC MODE, SAVE UP TTY STATUS ;IN USER MODE, DONE BY SAVE\r
\f;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B\r
\r
IFE EDDT&10,<\r
DEP: IFE EDDT&1,<\r
JSP TT1,CHKADR ;LEGAL ADDRESS?\r
-\r
JRST DEP4 ;YES BUT IN HI SEGMENT>\r
TRNN R,777760\r
JRST DEPAC ;DEPOSIT IN AC\r
CALLI T,33 ;DO PEEK UUO\r
JRST CPOPJ1 ;RETURN VALUE IN AC T\r
>\r
+\r
IFE EDDT&1,< ;DO ADDRESS CHECKS ONLY IN USER MODE\r
CHKADR: HRRZ TT,JOBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT\r
CAIL TT,(R) ;CHECK FOR WITHIN LOW SEGMENT\r
CAIGE TT,(R) ;IS THE ADR TO BIG FOR HIGH SEGMENT?\r
POPJ P, ;NO, YES- ILL. ADR.\r
JRST 0(TT1)\r
+\r
> ;END OF IFE EDDT&1\r
\r
IFN EDDT&1,<CHKADR==CPOPJ> ;NO ADDRESS CHECKS IN EXEC MODE\r
MOVEM T,TEM\r
\r
LOOK1: TDNE W2,(R)\r
-\r
JRST LOOK3\r
MOVE T,(R)\r
TLNN T,PNAME ;NAME\r
JRST @AR ;PADSO OR PAD1\r
PADSO: JUMPE T,FP7B ;PRINT A ZERO\r
PUSHJ P,LOOK\r
-\r
PADS1: POPJ P,0\r
MOVE W2,1(W1)\r
CAIGE T,100\r
PADS3B: MOVNM T,TEM\r
MOVEI T,"-"\r
JRST PADS1A\r
-\r
-INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM\r
+\fINOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM\r
TDCN T,[XWD -1,400000]\r
JRST PADS3B ;TYPE AS NEG NUM\r
LDB R,[POINT 7,T,9] ;PICK OUT IO DEVICE BITS\r
SEAR1: PUSHJ P,FETCH\r
JRST SEAR2A\r
TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH\r
-\r
JRST EFFEC0\r
EQV T,WRD\r
AND T,MSK\r
ZERO: TLNN F,CCF\r
JRST ERR\r
PUSHJ P,SETUP\r
-\r
HRRZ S,@SYMP ;GET 1ST ADR OF SYMBOL TABLE\r
HLRE W1,@SYMP ;GET LENGTH OF SYM TABLE\r
SUB W1,S ;GET NEG OF LAST ADR\r
JRST TOCA ;YES, DO NOTHING SPECIAL\r
HRRM T,TOCS ;NO, TYPE AS HALF WORD CONSTANT\r
HLRZS T ;GET LEFT HALF\r
- PUSHJ P,TOCA ;TYPE LEFT HALF\r
+ PUSHJ P,TOC0 ;type left half\r
MOVSI W1,(ASCII /,,/)\r
PUSHJ P,TEXT2 ;TYPE ,,\r
TOCS: MOVEI T,.-. ;GET RIGHT HALF BACK\r
-TOCA: LSHC T,-43\r
+TOCA: HRRZ W1,ODF ;IS OUTPUT RADIX DECIMAL?\r
+ CAIN W1,12\r
+ JRST TOC4 ;YES,TYPE SIGNED WITH PERIOD\r
+TOC0: LSHC T,-43\r
LSH W1,-1 ;W1=T+1\r
-TOC1: DIVI T,@ODF\r
+ DIVI T,@ODF\r
HRLM W1,0(P)\r
- JUMPE T,TOC2\r
- PUSHJ P,TOCA\r
-TOC2: HLRZ T,0(P)\r
+ SKIPE T\r
+ PUSHJ P,TOC0\r
+ HLRZ T,0(P)\r
ADDI T,"0"\r
JRST TOUT\r
\r
\r
FP3: MULI A,400\r
ASHC B,-243(A)\r
- MOVE A,B\r
SETZM TEM1 ;INIT 8 DIGIT COUNTER\r
SKIPE A,B ;DON'T TYPE A LEADING 0\r
PUSHJ P,FP7 ;PRINT INTEGER PART OF 8 DIGITS\r
> ;END OF IFN EDDT$1&<EDDT>B36\r
;FOR PAPER TAPE IO\r
\r
+\r
+\r
+\r
\fSAVE: 0 ;SAVE THE ACS AND PI SYSTEM\r
SKIPN SARS\r
JRST SAV1\r
; CALLIU T,SETUWP ;REQUEST TO CLEAR UWP\r
; HRROS SAVUWP ;FAILED, UWP (BIT 0) STILL 1\r
; SKIPN SARS ;USER'S SATE SAVED ALREADY?\r
-\r
; HRRM T,SAVUWP> ;NO, SAVE STATE OF UWP\r
\r
SETOM,SARS ;FLAG PROTECTING SAVED REGISTERS\r
\fIFE EDDT&1,< ;USER MODE TELETYPE I/O\r
IFN EDDT&4,< ;ASSEMBLE WITH OLD DDT MODE IO\r
\r
-\r
TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE\r
CAME T,[POINT 7,INBFF]\r
PUSHJ P,FINOUT\r
\r
TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE\r
>\r
-\f IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO\r
+\f\r
+\r
+ IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO\r
\r
OPDEF TTCALL [51B8]\r
\r
JRST WRONG ;TYPE XXX FOR A RUBOUT \r
POPJ P,\r
\r
-\r
TOUT:\r
\r
IFN EDDT&10,< SKIPE COMAND ;IS THERE A COMMAND FILE?\r
\r
> ;END OF IFN EDDT&10\r
> ;END OF IFE EDDT&1\r
+\r
\fBDISP: POINT 12,DISP(R),11\r
POINT 12,DISP(R),23\r
POINT 12,DISP(R),35\r
D ERR,ERR,ERR\r
D PUNCH,ERR,ERR\r
D ERR,ERR,ERR\r
-\r
D ERR,ERR,ERR\r
D CONTROL,ERR,ERR\r
D ERR,ERR,SPACE\r
\r
;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE\r
; ARE DETECTED AS ERRORS NEAR L21:\r
-\fBITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE\r
+\f\r
+BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE\r
HRRZI AR,TOC\r
TRZN F,Q2F\r
JRST ERR\r
;\r
; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A\r
; TREE SEARCH METHOD IS USED.\r
-\f\f\f\f\fREPEAT 0,<\r
+\fREPEAT 0,<\r
\r
DEFINE REDEF (XX)<\r
DEFINE INFO (AA,BB)<\r
REPEAT BINC,<BINRY=BINRY*400+BINRY*400>\r
IFN BINRY,<EXP BINRY>\r
> ;END OF REPEAT 0\r
-\r
-\r
\fIFN EDDT&10,< ;FILDDT STUFF\r
CRASH: SIXBIT .CRASH. ;CANONICAL NAME FOR CRASH\r
SIXBIT .SAV.\r
CURLST: IOWD 4000,CURENT\r
Z\r
>\r
-\r
\fSUBTTL OP DECODER\r
\r
DEFINE BYT9 (A) <IRP A,<\r
OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY\r
LSH T,-33\r
MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS\r
-\r
MOVE T,[XWD 440700,TXT]\r
MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT\r
TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG\r
;BUT STILL WANTS TO BE STARTED AT ITS OWN STARTING ADDRESS\r
;USER DDT IS LOADED LAST. - T.H.\r
IFN EDDT&10,<END DDT>\r
- END \r
+ END\r
HRLM TAC1,(PDP) ;RT ON PD LIST\r
JUMPE TAC,.+2 ;FINISHED?\r
PUSHJ PDP,PRTDIG ;NO, CALL S OR F\r
- HRLZ TAC,(PDP) ;YES, GET LAST NUMBER\r
+ HLRZ TAC,(PDP) ;YES, GET LAST NUMBER\r
PRTNUM: ADDI TAC,"0" ;CONVERT TO ASCIZ\r
IFN FTTTYSER,<\r
EXTERN OUTCHS\r
MOVSI T,JOBPFI ;SET LH OF XJBPFI WITH JOBPFI\r
MOVEM T,XJBPFI ;LOADER DORES NOT HANDLE GLOBALS IN LH\r
IFN FT2REL,<\r
- JSP TSTREG ;GO TEST IF TWO RELOC REGISTERS EXIST\r
+ JSR TSTREG ;GO TEST IF TWO RELOC REGISTERS EXIST\r
>\r
;HIGHEST LOC. IN JOB AREA PROTECTED FROM IO\r
\f;MOVE SYMBOL TABLE UP IN MEMORY\r
HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS \r
SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1\r
HRRM DAT,STO1 ;DIST, TO MOVE\r
- MOVE TAC1,UUO ;L-N,FIRST ADD.\r
+ MOVE TAC1,UUO ;-N,FIRST ADD.\r
ADDI TAC1,1(DAT) ;FROM NEW S.T. POINTER\r
MOVEM TAC1,DDTSYM ;STORE IN LOWER CORE\r
MOVE TAC1,-1(TAC)\r
ANDI DAT,7 ;MASIC OUT NUMBER OF DDB'S\r
LSH DAT,1 ;SHIFT LEFT ONE SO MATCH PI LOCATIONS\r
JUMPE DAT,NOPICH ;DOES THIS DEVICE HAVE A PI CHANNEL (PTY)?\r
- MOVE DAT,ITEM ;YES, PICK UP JSR CH'N FROM LOWER CORE\r
+ MOVE ITEM,40(DAT) ;YES, PICK UP JSR CH'N FROM LOWER CORE\r
INTLP1: MOVE DAT,ITEM ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR\r
; JEN @CH'N\r
MOVE ITEM,1(DAT) ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO\r
-\r
- TLNN ITEM,00740 ;IS IT A JEN?\r
+ TLNN ITEM,000740 ;IS IT A JEN?\r
JRST INTLP1 ;NO, KEEP LOOKING\r
MOVE TAC1,INTTAB(TAC) ;YES, LAST DEVICE SO FAR, GET DEV'NT\r
HRLI TAC1,(JRST) ;MAKE JRST INSTR.\r
MOVEM TAC1,1(DAT) ;CHANGE JEN @CH'N TO JRST DEV'NT\r
- MOVEM ITEM,1(TAC) ;MAKE DEV'NT+1 BE JEN @CH'N\r
+ MOVEM ITEM,1(TAC1) ;MAKE DEV'NT+1 BE JEN @CH'N\r
NOPICH: AOBJN TAC,.+1 ;PICKUP EVERY OTHER WORD?\r
AOBJN TAC,INTLOP ;ANY MOVE INTERRUPT SERVICE ROUTINES?\r
ALRCHN:\r
0 ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10\r
;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO)\r
JSR UUO2 ;GO SEE IF OP CODE 100 OR SOME OTHER ONE\r
-\r
\fIFN FT2REL,<\r
;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG\r
EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN\r
CONO APR,ILM ;CLEAR APR FLAGS AGAIN\r
MOVEI TAC,AND2RG ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED)\r
ANDM TAC,TWOREG ;=-1 IF IT CAN(SEGCON LOADED)\r
- ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITES\r
+ ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITIES\r
MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES\r
HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG\r
;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST\r
-\r
; WHICH BUILD FORBITS FROM HAVING EXTERNALS\r
MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS\r
CONO PI,10000 ;CLEAR PI SYSTEM\r
\f\r
;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE\r
\r
+\r
IFN FTRC10, <\r
ENTRY RCXWNZ ;THIS SYMBOL IS SOLELY TO PERMIT THE SYSTEM\r
RCXWNZ: ; BUILDER TO RETRIEVE THE CORRECT BINARY FILE.\r
IFE FTTTYSER,<\r
DEFINE SETTYO <MOVE DAT,LINEP>\r
DEFINE TYPE <IDBP CHREC,DAT>\r
-\r
DEFINE NEXTC <ILDB CHREC,TAC>>\r
IFN FTTTYSER,<\r
DEFINE SETTYO <PUSHJ PDP,OTSET>\r
IMULI TAC,JIFMIN ;JIFFIES SINCE MIDNIGHT\r
MOVEM TAC,TIME ;TIME=JIFFIES SINCE MIDNIGHT\r
\r
+\r
JUMPGE ITEM,QUICK ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM\r
; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY\r
; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP\r
\r
EXTERNAL CNTDB\r
\r
-ONCE3: PUSHJ PDP,SYSSIZ ;SAVE CURRENT VALUE\r
- JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED\r
+ONCE3: PUSH PDP,SYSSIZ ;SAVE CURRENT VALUE\r
+ JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED\r
; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY)\r
+\r
\f;PRINT OCTAL SIZE OF MONITOR\r
\r
MOVEI TAC,EXECIS\r
; IF NOT PATCHED, LEAVE COMMON'S VALUE\r
ONCE5A:\r
\r
+\r
INTERNAL FTDISK\r
IFN FTDISK,<\r
PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOG.\r
>\r
\r
+\r
QUICK: ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE\r
\r
+\r
INTERNAL FTCHECK\r
\r
IFN FTCHECK,<\r
PUSHJ PDP,OK ;CHECKSUM MONITOR AND SAVE THE ANSWER.\r
>\r
\r
+\r
JRST @ONCE ;***EXIT FROM THE "ONCE-ONLY CODE"***\r
\fIFN FTDISK,<\r
EXTERNAL OCTIN,MFDBLK,SATXWD,NUMBLK,SYSPP,REFLAG\r
MOVEI TAC,REF4M ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO\r
PUSHJ PDP,ICONM\r
PUSHJ PDP,OPOUT\r
-\r
PUSHJ PDP,GETLIN\r
JRST REF2\r
IFN FTTTYSER,<PUSHJ PDP,SKIPS>\r
PUSHJ PDP,REFRES ;REFRESH.\r
JRST REF5 ;ERROR\r
\r
+\r
MOVEI TAC,REF6M ;REFRESHING SUCCESSFULLY COMPLETED !\r
PUSHJ PDP,ICONM\r
PUSHJ PDP,OPOUT ;TYPE "REFRESHED !"\r
\r
+\r
MOVE TAC,SYSPP\r
MOVEM TAC,REFLAG ;TO PERMIT AUTOMATIC LOG-IN UNDER\r
; PROJ-PROG NUMBER [1,1] EVEN\r
PUSHJ PDP,ICONM ; ON THE NEWLY REFRESHED DISK.\r
PUSHJ PDP,OPOUT\r
POPJ PDP,\r
-\r
\fIFE FTRC10, <\r
REF4: POP PDP,TAC1\r
MOVEI TAC,REF5M\r
\r
\r
REF1M: ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR)\r
+\r
/\r
-REF2M: ASCIZ /ARE YOU SURE(Y OR CR)?\r
+REF2M: ASCIZ /ARE YOU SURE(Y OR CR)? \r
/\r
REF3M: ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)?\r
/\r
ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER\r
TLNE TAC,400000 ;FINISHED THIS WORD YET?\r
ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>\r
- MOVEI CHREC,134\r
+ MOVEI CHREC,134 ;OUTPUT BACK SLASH\r
PUSHJ PDP,TYO\r
SOJA ITEM,GET1\r
\r
IO CONFIGURATION\r
/\r
OPRM: ASCIZ /\r
-TYPE NAME OF OPR CONSOLE.\r
+TYPE NAME OF OPR CONSOLE\r
/\r
\fSYSM: ASCIZ /\r
DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)?\r
/\r
CRLFMS: ASCIZ /\r
/\r
+\r
\f;INITIALIZE SAT SEARCH ENTRIES\r
\r
;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR)\r
DFWUNS:\r
IFN FTRC10, <\r
PUSHJ PDP,WRITLK ;FORCE THE WRITE-LOCK SWITCH SETTINGS TO BE ZERO.\r
-\r
PUSHJ PDP,RDSTAT ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS\r
PUSHJ PDP,CAPCTY ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS).\r
CAMN TAC,LBHIGH ;HAS CAPACITY CHANGED SINCE LAST REFRESH ?\r
JRST DFWNZ1 ;NO, EVERYTHING APPPEARS TO BE OKAY.\r
- SETTYO ;YES, PRINT WARNING MESSAGE...\r
+ SETTYO ;YES, PRINT WARNING MESSAGE...\r
PUSHJ PDP,INLMES\r
ASCIZ /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING.\r
EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH.\r
+\r
/\r
PUSHJ PDP,OPOUT ;START TTY\r
PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOGUE\r
CAIL DAT,NUMBIT ;BLOCK FULL?\r
JRST SETS8\r
PUSHJ PDP,DFGETF ;NO. GET A FREE BLOCK\r
-\r
PUSHJ PDP,SETS7 ;WRITE\r
PUSHJ PDP,SETFRE ;FREE THE BLOCK\r
>\r
\r
+\r
SETS5B: MOVEI TAC1,SENTSZ ;PREPARE TO BUMP SATPTR\r
POP PDP,TAC\r
AOBJN TAC,SETS1 ;DO ALL SAT BLOCKS\r
\r
+\r
IFE FTRC10, <\r
JRST SAT05 ;RETURN\r
>\r
\r
+\r
IFN FTRC10, <\r
HRRZ TAC,SATPTR\r
SETS5X: CAIL TAC,SATTOP\r
\fSETS6: POP PDP,TAC ;ERROR, TRY AGAIN\r
JRST SETS2\r
\r
+\r
IFE FTRC10, <\r
\r
;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK --\r
HRRM TAC,DSKBUF(DEVDAT) \r
JRST SETS5B\r
\r
+\r
SETS9: BLOCK 204\r
\r
> ;CLOSE THE IFE FTRC10\r
AOS TAC ;SAT RETREIVAL INFORMATION\r
ADD TAC,MFDBLK\r
SETZB IOS,DEVIOS(DEVDAT)\r
-\r
MOVE TAC1,[XWD -200,SATRET]\r
MOVEM TAC1,DSKBUF(DEVDAT)\r
PUSHJ PDP,MQOUT\r
XWD 001777,-1\r
ONES 200+NULBLK-.\r
\r
+\r
+\r
> ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK.\r
\f\r
IFN FTRC10, <\r
;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO\r
;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!)\r
\r
+\r
;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER --\r
\r
;BITS 00 - 17 DISK ADDRESS ELECTION\r
;BITS 18 - 23 INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS)\r
DDSKPE=1B24 ;DISABLE DISK PARITY ERROR STOP\r
DCHNPE=1B25 ;DISABLE CHANNEL DATA PARITY ERROR STOP\r
-WRBIT=1B16 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK\r
+WRBIT=1B26 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK\r
;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE,\r
; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY!\r
;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!)\r
CAIG TAC1,STATBK ;SWAPPING AREA MUST NOT OVERLAY THE\r
JRST RFRSHE ; VITAL STATISTICS BLOCK.\r
>\r
- IDIVI TAC1,NUMBLK\r
+ IDIVI TAC,NUMBLK\r
MOVN TAC1,TAC ;SET SATXWD TO SHOW ONLY THE NUMBER OF\r
HRLM TAC1,SATXWD ; SAT BLOCKS ACTUALLY IN EXISTENCE.\r
HRRZ TAC1,MFDBLK\r
POP PDP,TAC ; DIALOGUE TO AK THE PARAMETER SPECIFICATION\r
JRST REF6 ; QUESTIONS AGAIN.\r
\r
-RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN.\r
+RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN.\r
+\r
/\r
-\f\r
\r
RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK.\r
JRST REFERR ; AN ERROR ON THIS WRITE IS BAD TROUBLE !!\r
-\r
+\f\r
;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK\r
\r
PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER\r
HRRZS TAC\r
ADDI TAC,1 ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD.\r
PUSHJ PDP,WNZWR ;WRITE THE MFD OUT ONTO THE DISK.\r
- \r
JRST REFERR ;ERROR\r
\r
MOVE TAC,[XWD -200,WNZBUF]\r
REFST6: POP PDP,TAC ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS\r
AOBJN TAC,REFST5 ; WHICH MUST BE MARKED UNAVAILABLE.\r
\r
-REFST7: MOVE TAC,[XWD -200,WNZBUF]\r
-\r
+REFST7: MOVE TAC,[XWD -200,WNZBUF] \r
PUSHJ PDP,CHKSUM ;COMPUTE CHECKSUM\r
MOVE TAC,SATPTR\r
HRRZM TAC1,1(TAC) ;STORE IT TEMPORARILY IN THE SATENT TABLE.\r
\f\r
;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK.\r
\r
+\r
WRSTAT: PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER\r
MOVE TAC,[XWD -WRSTSZ,0]\r
WRSTA1: MOVE TAC1,@WRSTA9(TAC) ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER\r
XWD 0,LOWSWP ;LOWSWP DOES DOUBLE DUMMY DUTY IN\r
; NON-SWAPPING SYSTEM\r
>\r
+\r
WRSTSZ=.-WRSTA9\r
\f\r
;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM\r
; THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS.\r
\r
+\r
RDSTAT: MOVEI TAC,STATBK\r
PUSHJ PDP,WNZRD ;READ IN THE VITAL STATISTICS BLOCK.\r
JRST RDSTA2 ;ERROR\r
JRST RDSTAT ;NOW TRY AGAIN.\r
\r
RDSTM1: ASCIZ /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING!\r
+\r
/\r
\f\r
;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF\r
MOVEM TAC,LBHIGH ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY\r
; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY.\r
\r
- MOVEI TAC,3\r
+ MOVEI TAC,0\r
CPCT1: PUSH PDP,TAC\r
PUSHJ PDP,WNZRD ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK.,\r
JRST CPCT3 ;ERROR\r
POP PDP,LBHIGH\r
JRST CAPCTY ;TRY AGAIN\r
CPCTM1: ASCIZ /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION\r
+\r
/\r
\f\r
;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE\r
MOVE TAC,[252525252525]\r
MOVEM TAC,WNZBUF\r
MOVE TAC,[XWD WNZBUF,WNZBUF+1]\r
-\r
BLT TAC,WNZBUF+177\r
MOVEI TAC,0\r
PUSHJ PDP,WNZWR ;WRITE PATTERN IN BLOCK 0.\r
JRST WRITLK ;GO TRY AGAIN\r
\r
WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.\r
+\r
/\r
WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND\r
DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",\r
FIX THEM ! !\r
+\r
/\r
\f\r
;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE.\r
POPJ PDP, ;SUBROUTINE EXIT............\r
\r
\r
+\r
;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING.\r
\r
REFER1: POP PDP,TAC ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED.\r
-\r
REFERR: MOVE TAC,LBSAVE ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4.\r
POPJ PDP, ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE.\r
\r
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
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
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
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
>\r
\r
INTERNAL AVALTB\r
+\r
AVALTB: QUEUES ;GENERATE THE AVAL FLAGS\r
LOC=.-AVALTB\r
>\r
PQ3=LOC\r
LOC=LOC+1\r
CMQ=LOC ;COMMAND DELAY QUEUE\r
-\f;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES\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
>>\r
IFE FTCHECK+FTMONP,<\r
\r
+\r
INTERNAL JOBQUE\r
JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT\r
\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
-\r
-,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME\r
-QQTAB: XWD -PQ1,-PQ2\r
- XWD -PQ2,-PQ3\r
- XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS\r
Z\r
\r
,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME\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
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
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
; 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
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
\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
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
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
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
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
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
>\r
> ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK.\r
\fSCHEND: END\r
-\0\r
IFNDEF FTDDTM,<FTDDTM=-1> ;NON-ZERO TO IUNCLUDE CALLI DDTIN,OUT\r
\r
FTTTYSER=-1 ;DEFINE THIS SYSTEM TO HAVE SCNSRF\r
-\r
INTERN FTTTYSER ;ASSURE MULT DEF GLOBALS IF WRONG APSER\r
\f; RIGHT HALF BITS (USER MODE0\r
FCS=100 ;FULL CHARACTER SET. PASS\r
\r
TLKRNG=1 ;THIS LINE CURRENTLY IN A TALK RING\r
XON=2 ;^Q TYPED, PAPER TAPE INPUT\r
-\r
FULTWX=4 ;SELF ECHOING FULL DUPLEX\r
T35=10 ;MODEL 35\r
T37=20 ;MODEL 37\r
; DATA BLOCKS.\r
; 4)SETS TTYUSE#1 IN ALL TTY DDBS IN THE TRANSLATOR TABLE.\r
\r
+\r
EXTERNAL SCNCHN,MLTTYL,MTTYLN,TTYTAB,SCNINI\r
\r
TTYINI: MOVEI TAC,SCNCHN\r
MOVSI TAC1,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS. NOT LINES\r
MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS\r
MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS\r
-\r
SCN1: MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT\r
TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE?\r
SETZM DEVNAM(DDB) ;NO, SET PHYSICAL NAME TO 0.\r
PUTCO1: IDPB CHREC,TOPUTR(DDB) ;PUT CHARACTER INTO BUFFER\r
CONO PI,PION ;GET PI BACK ON\r
POPJ PDP,\r
+\r
\f;ROUTINE TO CHECK IF A CHARACTER IS SPECIAL(ASCII 0-37, 175-177)\r
;CALL MOVE CHREC,CHAR. TO BE CHECKED\r
; PUSHJ PDP,SPCHEK\r
;FORMAT XWD BITS+CHAR,ADRESS OF ROUTINE\r
;HIGH ORDER BITS IN LH:\r
\r
-SPACTN=40000 ;SPECIAL ACTION TO BE TAKEN\r
+SPACTN=400000 ;SPECIAL ACTION TO BE TAKEN\r
SPOUT=100000 ;SPECIAL HANDLING ON UUO OUTPUT\r
BREAKB=20000 ;BREAK CHARACTER\r
SPHPOS=10000 ;CHARACTER AFFECTS HORIZONTAL POSITION\r
EXTERNAL WSYNC,IADRCK,ADRERR\r
EXTERNAL PTYOW\r
\r
+\r
DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE\r
MOVE IOS,[XWD TTYIOW+DDTM,IOACT]\r
IORB IOS,DEVIOS(DDB) ;PUT INTO I/O WAIT\r
PUSHJ PDP,TWSYNC ;NO, WAIT FOR SOME\r
DDTIW: MOVE IOS,[XWD TTYIOW,IOACT]\r
ANDCAB IOS,DEVIOS(DDB)\r
-\r
MOVSI TAC,IOFST+DDTM\r
IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO\r
HRRZ TAC,@UUO ;CONTENTS OF USER (DDT) AC\r
\f XP TOBF,.-ZZ\r
REPEAT STTYBF,<0>\r
;NO. OF CHAR. IN MON. BUF.\r
-\r
XP TTYCHR,<<STTYBF>*5>\r
XP SCNDDS,.-ZZ ;SIZE OF SCN DDB\r
\r
IDPB CHREC,AC1 ;PLACE CHAR. IN USER BUFFER\r
PUSHJ PDP,SPCHEK ;SPECIAL CHARACTER?\r
JRST MONUS2 ;NO\r
-\r
TLNE TAC,FCSBRK+BREAKB ;A BREAK CHARACTER?\r
SOSA TISYNC(DDB) ;SOME BREAK, COUNT IT DOWN\r
MONUS2: SOJG AC2,MONUS1 ;NO, USER BUFFER FULL?\r
MOVSI IOS,IO+IOFST\r
IORB IOS,DEVIOS(DDB)\r
\r
+\r
PUSHJ PDP,STLNAC ;GET LINE CHARACTERISTICS\r
PUSH PDP,LINE ;SAVE INFO\r
PUSHJ PDP,USRMON ;MOVE USER'S BUFFER TO TTO BUFFER\r
PUSHJ PDP,ADVBFE ;ADVANCE USER'S HEADERS\r
SKIPA\r
JRST .+3 ;MOVE BUFFERS AVAILABLE\r
-\r
MOVEI IOS,IOACT ;NO MORE BUFFERS\r
ANDCAB IOS,DEVIOS(DDB) ;CLEAR ACTIVE IN IOS\r
POP PDP,LINE ;RESTORE LINE INFO\r
PUSHJ PDP,UADCK1\r
JRST @TTUUOT(UCHN) ;DISPATCH TO UUO ROUTINES\r
\r
+\r
TTUUOT: EXP INCHRW ;(0)INPUT CHAR. WAIT TILL TYPED\r
EXP ONEOUT ;(1)OUTPUT A CHARACTER\r
EXP INCHRS ;(2)INPUT A CHAR. & SKIP\r
-\r
EXP OUTSTR ;(3)OUTPUT A STRING\r
EXP INCHWL ;(4)INPUT CHAR, WAIT.LINE MODE\r
EXP INCHSL ;(5)INPUT CHAR, SKIP. LINE MODE\r
ONEOUT: PUSHJ PDP,GETWDU ;PICK UP CHAR FROM USER\r
MOVE CHREC,TAC ;PUT IT IN PROPER AC\r
ANDI CHREC,177 ;MASK ANY JUNK\r
-\r
JUMPE CHREC,CPOPJ ;DONT STORE NULLS\r
PUSHJ PDP,OUTCHR ;PLACE IT IN TTO BUFFER\r
JUMPN CHREC,DDTUTT ;IF IT STORED, RETURN\r
AND TAC,@UUO ;SET ONLY THOSE BITS USER WANTS SET\r
IORM TAC,LINTAB(LINE) ;SET RESULTANT\r
POPJ PDP,\r
+\r
\f;ROUTINE TO ATTACH TTY TO A JOB\r
;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK\r
; MOVE ITEM,JOB NUMBER\r
; OR SIXBIT /CTY/,\r
; 5)SETS DEVOPR IF IT IS NON-ZERO.\r
\r
+\r
INTERNAL TTYATT,TTYATI\r
EXTERNAL PUNIT,PJOBN,TTYTAB\r
\r
HLL TAC,TLHBYT(TAC1)\r
POP PDP,TAC1 ;RESTORE LINE\r
POPJ PDP,0\r
+\r
\f;ROUTINE TO FIND TTY FOR A JOB\r
;CALL: MOVE ITEM,JOB NUMBER\r
; PUSHJ PDP, TTYFND\r
JRST TTYF9 ;FOUND\r
TTYF0: AOBJN LINE,TTYSRA\r
TTYF1: MOVSI TAC,576062 ;LOOK FOR DEVICE "OPR"\r
-\r
PUSHJ PDP,DEVPHY ;SEARCH PHYSICAL DEVICE NAMES FOR OPR\r
SKIPA TAC,DEVOPR ;NOT FOUND.\r
JRST TTYF9\r
INTERNAL CTYINT\r
EXTERNAL SCNSAV,SCNCHN,TCONLN\r
\r
+\r
CTYINT: CONSO TTY,50 ;TTI OR TTO FLAG?\r
JRST CTYINT ;NO\r
JSR SCNSAV ;YES, SAVE AC'S\r
\r
CRLF: MOVEI HPOS,0 ;HERE ON INPUT OF A CARRIAGE RETURN\r
TLNE LINE,XON ;IF PAPER TAPE, NO FREE LF\r
-\r
JRST TTIPUT ;JUST STORE THE CR\r
PUSHJ PDP,TTIPUT ;ORDINARILY, STORE AND GO ON HERE\r
MOVEI CHREC,12 ;BY ADDING A LF\r
ADD TAC,PUTR(DAT) ;*\r
TLNE TAC,400000\r
ADD TAC,[XWD 347777,-1]\r
-\r
MOVEM TAC,PUTR(DAT)\r
AOS FCTR(DAT)\r
AOS TAC,PCTR(DAT)\r