From 8c11230d54654d010d9027c672dcf4011d2cf539 Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Tue, 10 Apr 2018 23:45:28 -0400 Subject: [PATCH] Cleanup typos. --- src/clkcss.mac | 44 ++-- src/clock1.mac | 231 +++++++------- src/common.mac | 1016 +++++++++++++++++++++++++++----------------------------- src/copy.mac | 8 +- src/dlsint.mac | 24 +- src/dskint.mac | 2 +- src/dskser.mac | 526 +++++++++++++----------------- src/dtasrn.mac | 58 +++- src/dtcsrn.mac | 58 ++-- src/eddt.mac | 96 +++--- src/errcon.mac | 2 +- src/onceb.mac | 79 +++-- src/schedb.mac | 60 ++-- src/scnsrf.mac | 23 +- src/segcon.mac | Bin 103017 -> 91276 bytes src/sysini.mac | Bin 4853 -> 4985 bytes 16 files changed, 1083 insertions(+), 1144 deletions(-) diff --git a/src/clkcss.mac b/src/clkcss.mac index f5b3b2e..0bc20dd 100644 --- a/src/clkcss.mac +++ b/src/clkcss.mac @@ -1,6 +1,6 @@ -TITLE CLKCSS - SCHEDULING ALOGRITHM FOR NON-SWAPPING SYSTEMS +TITLE CLKCSS - SCHEDULING ALGORITHM FOR NON-SWAPPING SYSTEMS SUBTTL T. HASTINGS/TH TS3.17 6 SEP 67 V001 -XP VOLKCS,001 +XP VCLKCS,001 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP @@ -9,16 +9,16 @@ XP VOLKCS,001 ;CALLED WHEN CURRENT JOB IS IN EXEC MODE AND: ; 1. JUST STARTED TO WAIT FOR IO ; 2. JUST STARTED TO WAIT FOR A BUSY SHARABLE DEVICE -; 3. RETURNING TO USER AFTER TYPING CONTROL C -; 4. RETURNING TO USER AFTER CLOCK TRIED TO INTERRUPT +; 3. RETURNING TO USER MODE AFTER TYPING CONTROL C +; 4. RETURNING TO USER MODE AFTER CLOCK TRIED TO INTERRUPT ; CURRENT JOB WHILE IT WAS IN EXEC MODE -; 5. AND ERROR OCCURRED IN CURRENT JOB +; 5. AN ERROR OCCURRED IN CURRENT JOB ;CALL: SETOM TIMEF ;IF CLOCK HAS GONE OFF SINCE LAST CALL ; PUSHJ PDP,NXTJOB ; RETURN WITH NEXT JOB TO RUN IN AC ITEM -;INTIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER +;INITIALIZE SCHEDULER(CALLED FROM IOINI1 BEFORE ALL OTHER ; DEVICES ARE INITIALIZED) INTERNAL NXTINI @@ -29,7 +29,7 @@ NXTINI: MOVSI TAC,-NQUEUE ;NO. OF QUEUES ;IE NO JOB WAITING OR USING DEVICE AOBJN TAC,.-2 ;OTHER DEVICE INITIALIZATION POPJ PDP, ;MAY CHOOSE TO SET REQUEST TO MORE - ;NEG. VALUE IF MORE THEN ON JOB CAN + ;NEG. VALUE IF MORE THAN ON JOB CAN ;USE DEVICE AT ONCE INTERNAL NXTJOB INTERNAL FTTRPSET,FTDISK @@ -44,29 +44,29 @@ C=DAT ;COUNT OF JOB LEFT TO SCAN XCKCSS: NXTJOB: PUSHJ PDP,CHKSHF ;SHUFFLE CORE IF NEEDED SETZM T - SKIPN ITEM,JOB ;CURRENT JOB NO.. IS IT NULL JOB? + SKIPN ITEM,JOB ;CURRENT JOB NO., IS IT NULL JOB? JRST NXT0 ;YES, DO NOT DECREMENT QUANTUM RUN TIME SKIPE TIMEF ;NO, IS THIS A CLOCK INTERRUPT CALL? SOSA T,JBTSTS(ITEM) ;YES, DECREMENT QUANTUM RUN TIME ;IN JOB STATUS WORD SKIPA T,JBTSTS(ITEM) ;NO, JUST PICKUP STATUS WORD - TRNE T,-1 ;REDUCE TIME TO ZERO YET? + TRNE T,-1 ;REDUCED TIME TO ZERO YET? JRST NXT1 ;NO HRR T,RNQUNT ;YES, RESET FOR RUN QUEUE QUANTUM NXT0: SETOM RNAVAL ;FLAG TO SCAN RUN QUEUE FOR DIFFERENT JOB NXT1: HRRM T,JBTSTS(ITEM) ;STORE MODIFIED QUANTUM RUN TIME MOVEI Q,MAXQ ;HIGHEST PRIORITY QUEUE SCANNED FIRST NXT2: SKIPN AVALTB(Q) ;SHOULD THIS QUEUE BE SCANNED FOR A RUNABLE JOB? -NXT3: SOJGE Q,NXT2 ;NO, LOOK AT NEXT LOWEST PRIORITY QUEUE - JUMPL Q,NXT7 ;YES, LOOKED AT QUEUES NQUEUE-1..,0? +NXT3: SOJGE Q,NXT2 ;NO. LOOK AT NEXT LOWEST PRIORITY QUEUE + JUMPL Q,NXT7 ;YES, LOOKED AT QUEUES NQUEUE-1...0? MOVE Q1,Q ;MOVE QUEUE INDEX TO PROPER POS. ROT Q1,^D17-JWPOS ;TO MATCH JOB STATUS WORD - MOVEI C,JOBMAX ;NO, SACN ALL JOBS(EXECEPT NULL JOB) + MOVEI C,JOBMAX ;NO, SCAN ALL JOBS(EXCEPT NULL JOB) AOSA ITEM,JOBP(Q) ;SCAN ALL OTHER JOBS IN THIS QUEUE FIRST NXT4: SETOM RNAVAL ;FLAG RUN QUEUE BEING SCANNED -NXT5: CAIL ITEM,JOBN ;GREATER THEN HIGHEST JOB NO.? +NXT5: CAIL ITEM,JOBN ;GREATER THAN HIGHEST JOB NO.? MOVEI ITEM,1 ;YES, RESET TO 1(SKIP NULL JOB) HLRZ T,JBTSTS(ITEM) ;IS JOB RUNABLE? TRZ T,RUNMSK+CMWB ;MASK OUT JOB STATUS BITS WHICH DO NOT MATTER @@ -78,18 +78,18 @@ NXT6: SOJLE C,NXT3 ;NO IT IS NOT, SCANNED ALL JOBS YET? NXT7: MOVEI C,JOBN ;SCAN ALL JOBS INCLUDING POSSIBLY NULL JOB MOVE ITEM,JOB ;STARTING WITH LAST JOB TO RUN - SKIPN Q1,RNAVAL ;HAS RUN QUEUE(Q,Q1=7) BEEN SCANNED? - AOJA Q,NXT4 ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=2) + SKIPN Q1,RNAVAL ;HAS RUN QUEUE(Q,Q1=0) BEEN SCANNED? + AOJA Q,NXT4 ;NO, FLAG THAT IS HAS AND SCAN RUN QUEUE(Q,Q1=0) SETZB ITEM,RNAVAL ;YES, CLEAR FLAG, SET NULL JOB TO RUN POPJ PDP, ;RETURN NXT8: IFN FTTRPSET,< EXTERNAL STOPTS - MOVE T,STOPTS ;HAS A TRPSET UUO BEEN DONE FOR JOB1 + MOVE T,STOPTS ;HAS A TRPSET UUO BEEN DONE FOR JOB1 ;WITH NON ZERO AC? - CAIE ITEM,1 ;IS THIS JOB 1? - JUMPN T,NXT6 ;KEEP LOOKING IF NOT JOB1 AND + CAIE ITEM,1 ;IS THIS JOB 1? + JUMPN T,NXT6 ;KEEP LOOKING IF NOT JOB1 AND ;STOPTS FLAG SET > @@ -119,8 +119,8 @@ DEFINE X(A,B) ZZ=0 QUEUES LOC=ZZ -> +> IFE FTCHECK+FTMONP,< ;APPROPRIATE ENTRY IS NON-ZERO WHEN SCHEDULER SHOULD LOOK ;AT THAT QUEUE TO FIND A JOB TO RUN @@ -158,9 +158,9 @@ DEFINE X(A) JOBP: REPEAT NQUEUE,< EXP 1> -;SHARABLE DEVICE REQUEST TABLE(GENERAL;IZED FOR OTHER QUEUES TOO) +;SHARABLE DEVICE REQUEST TABLE(GENERALIZED FOR OTHER QUEUES TOO) ;CONTAINS THE NUMBER OF JOBS WAITING TO USE SHARABLE DEVICE -;WSREG AND RNREG ARE UNUSED +;WSREQ AND RNREQ ARE UNUSED DEFINE X(A,B) < A'REQ: 0 @@ -174,7 +174,7 @@ REQTAB: QUEUES ;QUANTUM RUNNING TIME FOR EACH QUEUE IN JIFFIES(CLOCK TICKS) DEFINE X(A,B) -< A'QUNT: EXP 2 +< A'QUNT: EXP B INTERNAL A'QUNT > diff --git a/src/clock1.mac b/src/clock1.mac index 67292ba..92a704e 100644 --- a/src/clock1.mac +++ b/src/clock1.mac @@ -1,5 +1,5 @@ -TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTING AND STOP ROUTINES - V412 -SUBTTL APRINT TH/TH/CHW TS 20 MAY 69 +TITLE CLOCK1 - CLOCK, CONTEXT SWITCHING, AND JOB STARTUP AND STOP ROUTINES - V412 +SUBTTL APRINT TH/TH/CHW TS 20 MAY 69 XP VCLOCK1,412 ; PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP @@ -18,7 +18,7 @@ EXTERNAL JOBDAT,JOBTPC,JOBCNI,JOBAPR,APRERR,SCHEDF EXTERNAL APRILM,COMMAN,CONMES,DEVCHK,DEVSRC,ERROR,INLMES EXTERNAL RELEA9,CRSHWD,CRASHX -INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORD EITHER +INTERNAL FTTTYSER ;THIS ROUTINE MAY BE ASSEMBLED TO WORK WITH EITHER ; THE OLD SCNSER OR THE NEW TTYSER. @@ -31,10 +31,10 @@ INTERNAL UUO1 IFE FTCHECK+FTMONP,< INTERN CLOCK,DAMESS EXTERN CIPWTM -APRCON: 231000 ;MONITOR ENABLED CPU FLAGS -APRIN1: 0 ;USER ENABLED CPU FLAGS -CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT -DAMESS: ASCIZ /-JAN-/ +APRCON: 231000 ;MONITOR ENABLED CPU FLAGS +APRIN1: 0 ;USER ENABLED CPU FLAGS +CLKS17: 0 ;PLACE TO SAVE AC17 ON CLOCK INTERRUPT +DAMESS: ASCIZ /-JAN-/ CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE > INTERN APRINT @@ -42,11 +42,11 @@ CLOCK: POINT 36,CIPWTM,35 ;BYTE POINTER TO CLOCK REQ QUEUE APRINT: JRST APRPAR ;ALWAYS CHECK APR AND PI DEVICES JRST . ;CHECK OTHER DEVICES -APRPCL: CONO PI,240000 ;TURN OFF MEM PAR, ERR, AND +APRPCL: CONO PI,240000 ;TURN OFF MEM PAR. ERR, AND ; ENABLE FOR MEM PAR AND TRY AGAIN ; (DO NOT TURN OFF POWR FAIL AS THAT PERMANENTLY ; DISABLES POWR FAIL INTERRUPT) -APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? +APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? HALT APRPCL ;YES, HALT MACHINE, CLEAR FLAGS AND TRY AGAIN ; ON CONTINUE CONSO APR,@APRCON ;INTERRUPT FOR APR? @@ -54,8 +54,8 @@ APRPAR: CONSZ PI,600000 ;MEM PARITY ERROR OR POWER FAILURE? ; RH MODIFIED EACH TIME USER RUNS IN CASE HE IS ; ENABLED FOR PC CHANGE OR AR OVF JRST APRINT+1 ;NO,CHECK OTHER DEVICES ON THIS PI CHANNEL - SKIPE CRSHWD ;IS LOC, 30 CLOBBERED? - JRST CRASHX ;YES ~ GO SAVE AC'S & STATE OF ALL DEVS, + SKIPE CRSHWD ;IS LOC. 30 CLOBBERED? + JRST CRASHX ;YES - GO SAVE AC'S & STATE OF ALL DEVS. CONSO APR,001000 ;YES, IS IT CLOCK? JRST APRER ;NO, GO CHECK ERROR FLAGS AOS TIME ;YES, INCREMENT TIME OF DAY @@ -75,7 +75,7 @@ APRER1: CONO APR,1000+APRCHN ;NOW CLEAR CLOCK FLAG EXCH TAC,APRCHL ;SAVE TAC, GET PC TLNE TAC,USRMOD ;IS PC FROM USER MODE? JRST APRER4 ;YES, GO TRAP TO HIM - JRST APRER2 ;NO. GO CHECK IN CASE ALSO A SERIOUS ERROR + JRST APRER2 ;NO, GO CHECK IN CASE ALSO A SERIOUS ERROR ;OTHER APR INTERRUPTS BESIDES CLOCK APRER: EXCH TAC,APRCHL ;SAVE TAC, GET PC @@ -93,7 +93,7 @@ APRER4: EXCH JDAT,JOBDAT ;YES, SAVE JDAT, GET CURRENT JOB DATA AREA ADR. HRRM TAC,APRCON ;PD OVF,ILM,NXM, AND CLOCK HRR TAC,JOBAPR(JDAT) ;GET USER LOC TO TRAP TO EXCH JDAT,JOBDAT ;RESTORE JDAT,JOBDAT - CONO APR,440+APRCHN ;DISBALE FOV, AROVF IN CASE ON + CONO APR,440+APRCHN ;DISABLE FOV, AROVF IN CASE ON ;SO USER MUST REENABLE WITH SETAPR UUO APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS ; SO INTERRUPT MAY BE DISMISSED @@ -101,18 +101,18 @@ APRER3: TLZ TAC,440000 ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS CONO APR,430110+APRCHN ;CLEAR ALL ERROR FLAGS WHICH CAN CAUSE INTERRUPTS ; EXCEPT CLOCK FLAG(ELSE LOSE TIME OF DAY) JEN @APRCHL ;DISMISS INTERRUPT - APRER2: CONSO APR,NXM!ILM!POV! ;DOES EXEC CARE? - JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF + APRER2: CONSO APR,NXM!ILM!POV ;DOES EXEC CARE? + JRST APRER3 ;NO. IGNORE EXEC OVERFLOW (MUST BE FOV OR AROVF) MOVEM TAC,APRPC ;STORE ERROR PC FOR CLK CHANNEL CONI APR,APRERR ;STORE ERROR FLAGS ; (ALSO USED AS ERROR FLAG) SETOM CLKFLG ;SET FLAG FOR CLK INTERRUPT SETOM SCHEDF ;FLAG THAT RESCHEDULING IS NEEDED - ; (EVEN THROUGH PC MAY BE IN EXEC MODE) + ; (EVEN THOUGH PC MAY BE IN EXEC MODE) CONO PI,REQCLK ;REQUEST INTERRUPT IN CLK CHANNEL CONSZ APR,ILM ;WAS ERROR ILLEGAL MEMORY(FROM USER)? HRRI TAC,0 ;YES,CLEAR RH OF PC,SO A SECOND ILM INTERRUPT - ; WILL NOT OCCUR IF THIS IS A WILD(AND A PDP-10) + ; WILL NOT OCCUR IF THIS IS A WILD PC(AND A PDP-10) IFN FTHALT,< CONSZ PI,003400 ;ARE ANY PI'S IN PROGRESS OF LOWER PRIORITY THAN APR? ; (PDP-10 BITS ONLY) @@ -125,10 +125,10 @@ IFN FTHALT,< ;THIS ROUTINE RUNS ON THE LOWEST PRIORITY PI CHANNEL AND AT UUO LEVEL ;TO CAUSE AN INTERRUPT ON CLK CHANNEL: ; SETOM CLKFLG ;FLAG THAT INTERRUPT HAS BEEN REQUESTED -; CONO PI,CLKREQ ;REQUEST PI INTERRUPT ON LOWEST PI CHANNEL +; CONO PI,CLKREQ ;REQUEST PI INTERUPT ON LOWEST PI CHANNEL ;THE FOLLOWING OTHER FLAGS MUST ALSO BE SET ;APRERR-APR DETECTED ERROR IN CURRENT JOB -;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THROUGH PC IN EXEC MODE) +;SCHEDF-RESCHEDULING MUST TAKE PLACE(EVEN THOUGH PC IN EXEC MODE) ;TIMEF-APR CLOCK HAS TICKED ON HIGH PRIORITY CHANNEL ;SEE APRSER AND RUNCSS TO SEE HOW THIS ROUTINE IS CALLED @@ -140,9 +140,9 @@ IFN FTHALT,< ;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE ;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL ; 1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE -; 2. JOB STARTS TO WAIT FOR A IO TO COMPLETE +; 2. JOB STARTS TO WAIT FOR IO TO COMPLETE ; 3. CONTROL ABOUT TO RETURN TO USER MODE -;THEN CLK SERVICE IS ENTERED AT THE UU0 LEVEL +;THEN CLK SERVICE IS ENTERED AT THE UUO LEVEL STOR=DAT T=TAC @@ -157,7 +157,7 @@ JA=JDAT ; CONO PI,PIOFF ; IDPB AC,CLOCK ;STORE CLOCK REQUEST IN QUEUE ; CONO PI,PION ;TURN PI BACK ON -;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS*DATA*10000 +;C(AC)=XWD ADDRESS,NO. OF CLOCK TICKS+DATA*10000 ;WHERE DATA IS 6 BITS OF INFO NEEDED WHEN TIME RUNS OUT ;CLK SERVICE WILL PUSHJ PDP,ADR ;WHEN TIME RUNS OUT WITH DATA RIGHT JUSTIFIED IN AC TAC @@ -181,7 +181,7 @@ WSCHED: POP PDP,USRPC ;SAVE PC IN PROTECTED PART OF SYSTEM DATA MOVEI AC3,JOBDAC(JDAT) ;SAVE ACS 0-16 IN DUMP ACS BLT AC3,JOBD16(JDAT) ;IN CURRENT JOB DATA AREA MOVEI PDP,NULPDL ;NULL JOB PD LIST - HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODE + HRLI PDP,MJOBP1 ;USED TO CALL SCHEDULER AND COMMAND DECODER ; OTHERWISE GET PD OUF JRST RSCHED ;GO RESCHEDULE @@ -230,12 +230,12 @@ CLKERR: SKIPN 17,JOBDAT ;CURRENT JOB DATA AREA, IS THERE ONE? MOVEI 16,JOBDAC(17) ;SOURCE=0,DESTINATION=DUMP AC 0 BLT 16,JOBD15(17) ;SAVE ACS 0-15 JUST BELOW AC 16 MOVE TAC,CLKS17 ;NOW SAVE 17 IN JOB DATA AREA - MOVEM TAC,JOBD17(17) ;ALONE WITH OTHER ACS + MOVEM TAC,JOBD17(17) ;ALONG WITH OTHER ACS MOVEI PDP,NULPDL ;SET UP PUSH DOWN LIST IN NULL JOB DATA ; AREA IN LOWER CORE HRLI PDP,MJOBP1 ;-LENGTH+1(LEAVE ROOM FOR UUO PC) SKIPE TAC,APRERR ;IT THIS AN ERROR INTERRUPT? - PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR, APRILM WILL CLEAR APRERR + PUSHJ PDP,APRILM ;YES, GO PROCESS ERROR,APRILM WILL CLEAR APRERR ; FLAG IMMEDIATELY EXTERNAL COMCNT,NXTJOB,HNGTIM,POTLST,LSTWRD EXTERNAL TIMEF,APRERR,CLKFLG,SCHEDF,JOB,PMONTB @@ -254,8 +254,8 @@ IFN FTTIME,< JRST INCTIM ;NO-PROCEED NORMALLY AOS LSTWRD ;YES-INCREMENT LOST TIME COUNT SETZM POTLST ;AND CLEAR LOST TICK INDICATION -INCTIM: AOS RTIME(ITEM) ;INCR, CURRENT JOB INCREMENTAL RUN TIME - AOS TTIME(ITEM) ;INCR, CURRENT JOB TOTAL RUN TIME +INCTIM: AOS RTIME(ITEM) ;INCR. CURRENT JOB INCREMENTAL RUN TIME + AOS TTIME(ITEM) ;INCR. CURRENT JOB TOTAL RUN TIME > IFN FTKCT,< EXTERN USRREL,JBTKCT @@ -273,7 +273,7 @@ IFN FT2REL,< MOVE TAC1,TIME CAMGE TAC1,MIDNIT ;GONE PAST MIDNITE? JRST CIP2 ;NO -CIP3: SETZB IOS,TIME ;YES, RESET TIME OF DAY +CIP3: SETZB IOS,TIME ;YES. RESET TIME OF DAY AOS TAC,THSDAT ;UPDATE DAY IDIVI TAC,^D31 DIVI IOS,^D12 ;NO. @@ -300,32 +300,32 @@ CIP4: CAIN STOR,CIPWTM1 ;END YET? POP PDP, STOR SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS -CIP5: SOSG HNGTIM ;DECREMENT HUNG ID DEVICE - PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG ID DEVICES +CIP5: SOSG HNGTIM ;DECREMENT HUNG IO DEVICE + PUSHJ PDP,DEVCHK ;GO CHECK FOR HUNG IO DEVICES SKIPE COMCNT ;ANY COMMANDS TO PROCESS? PUSHJ PDP,COMMAND ;YES, CALL COMMAND DECODER CIP6: PUSHJ PDP,NXTJOB ;CALL SCHEDULER SETZM CLKFLG ;CLEAR CLK INTERRUPT FLAG ; SET ON ALL FORCED CLK INTERRUPTS - SETZM TIMEF ;CLEAR TIME0 (1 JIFFY) INTERRUPT FLAG, + SETZM TIMEF ;CLEAR TIMED (1 JIFFY) INTERRUPT FLAG. SETZM SCHEDF ;CLEAR FORCED SCHEDULING FLAG CAMN ITEM,JOB ;IS NEXT JOB SAME AS LAST ONE? JRST CIP8 ;YES, JUST RESTORE ACS AND DISMISS - ;DIFFERENT JOB. SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED) + ;DIFFERENT JOB, SAVE SOFTWARE STATE(HARDWARE ALREADY SAVED) EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA SKIPN JA,JOBDAT ;NULL JOB OR CORE 0 ON OLD JOB? - JRST CIP7 ;YES, DO NOT SAVE SOFTWARE STATE - MOVEI T,JOBPRT(JA) ;DEST,#FIRST LOC PROTECTED FROM USER - HRLI T,USRPRT ;SOUR,#SYSTEM DATA STORAGE FOR CURRETN JOB + JRST CIP7 ;YES, DO NO SAVE SOFTWARE STATE + MOVEI T,JOBPRT(JA) ;DEST.=FIRST LOC PROTECTED FROM USER + HRLI T,USRPRT ;SOUR.=SYSTEM DATA STORAGE FOR CURRETN JOB SKIPL T1,USRHCU ;MOVE NO. OF OLD USER IO CHAN. IN USE CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT ; CLOBBER IF ADDRESS CHECKING MISSES) MOVEI T1,0 ;MOVE ONLY CHN 0 IF NEG, OR GR 17 ; SAVGET SETS LH NEGATIVE DURING IO AS A FLAG ; SINCE IT DOES IO INTO AND OUT OF - ; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17), + ; CHANNEL LOCATIONS (JOBJDA+1...JOBJDA+17). ADD JA,T1 ;RELOCATE TO USER AREA BLT T,JOBJDA(JA) ;MOVE TO USER JOB DATA AREA ; STOP WITH USER CHANNEL 0-1+C(USRHCU) @@ -345,13 +345,13 @@ IFN FTHALT,< SKIPN JA ;DOES JOB HAVE CORE ASSIGNED? HALT . ;NO -ELSE CLOBBER MONITOR > - MOVEI T,USRPRT ;NO, DEST,#PROTECTED AREA IN MONITOR - HRLI T,JOBPRT(JA) ;SOURCE#FIRST PROTECT LOC. IN JB DATA AREA + MOVEI T,USRPRT ;NO, DEST.=PROTECTED AREA IN MONITOR + HRLI T,JOBPRT(JA) ;SOURCE=FIRST PROTECTED LOC. IN JB DATA AREA SKIPL T1,JOBHCU(JA) ;MOVE NO. OF USER IO CHAN. IN USE CAILE T1,17 ;MUST BE 17 OR LESS(IO MIGHT CLOBBER ; IF ADRRESS CHECKING MISSES MOVEI T1,0 ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17 - ; SAVEGET SETS NUG,DURING IO + ; SAVEGET SETS NEG.DURING IO BLT T,USRJDA(T1) ;AND MOVE INTO MONITOR ;RESTORE HARDWARE STATE OF CURRENT JOB @@ -364,18 +364,18 @@ CIP8: SKIPN JA,JBTDAT(ITEM) ;JOB DATA AREA(IS THERE ONE?) ; (ON CLK PI OR HIGHER) JRST CLKERR ;YES, GO PROCESS ERROR SKIPN JOB ;IS THIS JOB THE NULL JOB? - SKIPN NULERR ;YES, HAS AN ERROR OCCURED WHILE NULL JOB + SKIPN NULERR ;YES, HAS AN ERROR OCCURRED WHILE NULL JOB ; WAS RUNNING? IF YES, RESTORE ACS ; ILL UUO LOSED ACS JEN @USRPC ;DISMISS CHANNEL(IF INTERRUPT IN PROGRESS) ;THE NULL JOB -;RUNS IN USER MODE WITH PC=1 AND COUNTS AND AC 0 +;RUNS IN USER MODE WITH PC=1 AND COUNTS IN AC 0 EXTERNAL APRNUL,TIME,THSDAT,MIDNIT,NULERR NULJB: -IFN FTCHECK, +;THEN ADD ^C ;CALL: MOVEI TAC,ADR. OF MESSAGE ; PUSHJ PDP,PHOLD @@ -528,7 +528,7 @@ EXTERN PRJPRG PHOLD: PUSHJ PDP,CONMES ;MOVE MESSAGE TO TTY OUTPUT BUFFER ; FALL INTO HOLD -;ROUTINE TO STOP JOB, SET ERROR BIT. +;ROUTINE TO STOP JOB, SET ERROR BIT, ;AND ADD "^C INTERNAL HOLD,HOLD1 @@ -541,7 +541,7 @@ HOLD: PUSHJ PDP,INLMES ./ HOLD1: PUSHJ PDP,TTYSTC ;MAKE SURE TTY STAYS IN MONITOR MODE - ; AND START TTYP TYPING OUTMESSAGE + ; AND START TTY TYPING OUT MESSAGE ; FALL INTO ESTOP ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP @@ -553,9 +553,9 @@ EXTERNAL SCHEDF,JOB,CPOPJ ESTOP: JUMPE ITEM,CPOPJ ;IS THIS ERROR IN JOB 0? MOVSI TAC,JACCT ;NO, CLEAR ACCOUNTING BIT(IN CASE LOGGING - ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT0 SO USER CAN USE CONTROL C + ANDCAM TAC,JBTSTS(ITEM) ;IN OR OUT) SO USER CAN USE CONTROL C ; TO RECOVER -ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD +ESTOP1: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS WORD IORM TAC,JBTSTS(ITEM) ;SO JOB CAN NOT CONTINUE(CONT COM.) CAME ITEM,STUSER ;SYSTEM TAPE USER? JRST STOP1 ;NO @@ -563,33 +563,33 @@ ESTOP1: MOVSI TAC,JERR ;SSET ERROR BIT IN JOB STATUS WORD PUSHJ PDP,DEVSRC ;SYSTEM ERROR IF NOT FOUND JSP DAT,ERROR PUSHJ PDP,RELEA9 ;YES, RELEASE SYSTEM TAPE WITHOUT WAITING - ;ROUTINE TO STOP NY JOB FROM BEING SCHEDULED + ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED ;CALL: ; MOVE ITEM, JOB NUMBER ; PUSHJ PDP, STOP1 ; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER ;PRIORITY PI CHANNEL THAN CLK(LOWEST), OTHERWISE WHEN JOB IS RUNABLE ;CALLED FROM COMMAND DECODER WHEN C TYPED IN BY USER -;OR ON ANY ERROR MESSAGE(SFE PREVIOUS PAGE) +;OR ON ANY ERROR MESSAGE(SEE PREVIOUS PAGE) INTERNAL STOP1 EXTERNAL JBTSTS,PJBSTS,REQTAB,JOB,STUSER,MAXQ,AVALTB -STOP1: MOVSI TAC,RUN - CONO PI,PIOFF ;DONE AT INTERRUPT LEVEL HIGHER THEN DT LEVEL - CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYTEM TAPE? +STOP1: MOVSI TAC, RUN + CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT LEVEL + CAME ITEM,STUSER ;IS THIS JOB CURRENTLY USING THE SYSTEM TAPE? TDNN TAC,JBTSTS(ITEM) ;NO, IS RUN BIT OFF IN JOB STATUS WORD JRST STOP1A ;YES ANDCAM TAC,JBTSTS(ITEM) ;NO, SO CLEAR IT - CONO PI,PION + CONO PI, PION LDB TAC,PJBSTS ;GET JOB WAIT QUEUE CODE(IF ANY) CAIG TAC,MAXQ ;DOES STATE HAVE Q ? SOSL REQTAB(TAC) ;YES. REDUCE IT. JRST STOP1A ;NO SOSGE AVALTB(TAC) ;YES REDUCE COUNT SETZM AVALTB(TAC) ;CLEAR AVAL FLAG IF NO ONE WAITING -STOP1A: CONO PI,PION ;MAKE SURE PI ON - CAME ITEM, JOB ;NO. IS THIS JONB CURRENT USER +STOP1A: CONO PI, PION ;MAKE SURE PI ON + CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER INTERNAL FTSWAP @@ -601,7 +601,7 @@ IFN FTSWAP,< > SKIPL TAC,JBTSTS(ITEM) ;RUN FLAG OFF? - TLNN TAC,JERR ;YES, ERROR FLAG ON? + TLNN TAC,JERR ;YES. ERROR FLAG ON? JRST STOP2 ;NO SETOM SCHEDF ;YES, FORCE RESCHEDULING EVEN IF JOB IN EXEC MODE JRST STOP2 ;YES, MAKE CLK RESCHEDULE ANOTHER JOB @@ -659,7 +659,7 @@ MONJOB: PUSHJ PDP,MSTART ;START WITH PC IN MONITOR ;SETS UP ITEM, WITH JOB NO.; PROG WITH RELOCATION, AND PDP ;WITH PUSH DOWN LIST ADR. IN JOB DATA AREA ;USED BY KJOB,CORE 0,SAVE,GET,RUN,R,REASSIGN AND FINISH COMMANDS -;CALL: MOVEI TAC1,MONITOR JOB START ADDRESS +;CALL: MOVEI TAC1,MONITOR JOB STOP ADDRESS ; JSP TAC,MONSTR ; RETURN WITH ACS PDP,PROG,JDAT, AND ITEM SETUP @@ -669,13 +669,13 @@ EXTERNAL JOB,JBTADR,MJOBPD,JOBPDL,TTYFNU,JBTDAT MONSTR: MOVE ITEM,JOB ;CURRENT JOB NUMBER MOVE JDAT,JBTDAT(ITEM) ;ADR. OF JOB DATA AREA IFN JDAT-PROG,< - MOVE PROG,JBTADDR(ITEM) ;JOB RELOCATION + MOVE PROG,JBTADR(ITEM) ;JOB RELOCATION > MOVSI PDP,MJOBPD ;MINUS LENGTH OF SYSTEM PD LIST HRRI PDP,JOBPDL(JDAT) ;FIRST LOC.-1 OF PD LIST - PUSH PDP,TAC1 ;SAVE STOP ADDRESS + PUSH PDP,TAC1 ;SAVE STOP ADRRESS JRST (TAC) ;RETURN AND DO MONITOR JOB - ; WITH TT DDB,OUTPUT BYTE POINTER, AND JOB NO. + ; WITH TTY DDB,OUTPUT BYTE POINTER, AND JOB NO. ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS ;CALLED ONLY WHEN JOB IN CORE AND AFTER JOB HAS BEEN @@ -695,22 +695,22 @@ EXTERNAL JOBPC,JOBDAC,JOBD17,TTYSET,JOBOPC,JOBPD1 USTART: MOVE TAC,JOBPC(JDAT) ;GET OLD PC TLNE TAC,USRMOD ;IS IT IN USER MODE TOO? JRST USTRT1 ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS - MOVEI TAC,JOBDAC(JDAT) ;NO. MOVE USERS(UUO) ACS TO DUMP ACS - HRL TAC,JDAT ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA + MOVEI TAC,JOBDAC(JDAT) ;NO, MOVE USERS(UUO) ACS TO DUMP ACS + HRL TAC,JDAT ;SOURCE=REL. 0,DEST.=JOBDAC IN JOB DATA AREA BLT TAC,JOBD17(JDAT) ;MOVE ALL ACS MOVE TAC,JOBPD1(JDAT) ;UUO PC HAS LAST PC HRRI TAC,-1(TAC) ;SUBTRACT 1 FROM RIGHT HALF AND - ; PRESERVE LH PC FLAGS + ; PRESERVE LH PC FLAGS. ; (RH=0 ON HALT 0 OR FIRST START) USTRT1: MOVEM TAC,JOBOPC(JDAT) ;STORE OLD PC FOR USER TO LOOK AT HLL TAC1,TAC ;PRESERVE USER APR FLAGS TLO TAC1,USRMOD ;MAKE SURE NEW PC IN USER MODE TLZ TAC1,37 ;MAKE SURE NO INDIRECT BITS OR INDEX FIELD - + MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC MOVSI TAC,JERR+WTMASK ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS - JRST TTYSET ;SET TTY STATE TO INITAL COND. + JRST TTYSET ;SET TTY STATE TO INITIAL COND. ; TTYUSR OR TTYURC SHOULD BE CALLED ; TO INDICATE WHETHER TTY TO USER OR EXEC MODE ; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN @@ -720,9 +720,9 @@ MSTART: MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC ;ROUTINE TO SET JOB STATUS RUN BIT(RUN) ;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND -;RESPONSE FINISHES, THIS ACTION IS ENABLED BY CALLING -;TTYUSR. OR TTYURC IN SCNSER -;CALL: MOVE ITEM,JOB NUMBER +;RESPONSE FINISHES. THIS ACTION IS ENABLED BY CALLING +;TTYUSR, OR TTYURC IN SCNSER +;CALL: MOVE ITEM,JOB NUMBER ; PUSHJ PDP,SETRUN INTERNAL SETRUN @@ -736,7 +736,7 @@ SETRUN: LDB TAC,PJBSTS ;GET JOB STATUS WAIT QUEUE CODE JRST SETR1 ;OTHERS WAITING? AOSG AVALTB(TAC) ;MAKE AVAILABLE SETOM AVALTB(TAC) ;FLAG AS JUST AVAILABLE, BECAUSE - ; NO JONB WAS USING DEVICE. SCHEDULER + ; NO JOB WAS USING DEVICE. SCHEDULER ; WILL SCAN THIS QUEUE SETR1: MOVSI TAC,RUN ;SET RUN BIT IN JOB STATUS WORD IORM TAC,JBTSTS(ITEM) @@ -753,8 +753,7 @@ IFN FTSWAP,< REQUE: MOVSI TAC,JRQ ;MARK JOB TO BE REQUEUED WITH JRQ BIT TDNN TAC,JBTSTS(ITEM) ;INCREMENT COUNT ONLY ONCE FOR EACH JOB - AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REUEUED - + AOS QJOB ;INCREMENT COUNT OF NO. OF JOBS WAITING TO BE REQUEUED IORM TAC,JBTSTS(ITEM) ;SET REQUE BIT FOR SCHEDULER POPJ PDP, @@ -786,9 +785,9 @@ WAKE: MOVEI TAC1,RNQ ;RUN QUEUE CODE ANDCAM TAC,JBTSTS(ITEM) ;SO IT CAN PUT ANOTHER ONE IN LDB TAC,PJBSTS ;GET QUEUE CODE CAIE TAC,SLPQ ;IS JOB STILL SLEEPING? - POPJ PDP, ;NO, RETURN TO CLOCK ROUTINE + POPJ PDP, ;NO. RETURN TO CLOCK ROUTINE DPB TAC1,PJBSTS ;YES, STORE RUN QUEUE CODE - ; (CONTROL C, START CAN GET JOB OUT SLEEP) + ; (CONTROL C, START CAN GET JOB OUT OF SLEEP) JRST SETR2 > ;ROUTINE TO GET DATA CONTROL AND ANOTHER SHARABLE DEVICE @@ -811,7 +810,7 @@ GETWT: PUSHJ PDP,DVWAT1 ;NOT AVAIL., GO WAIT FOR IT SOSL REQTAB(AC1) ;REDUCE REQ. COUNT FOR OTHER ; SHARABLE DEVICE. SETOM AVALTB(AC1) ;SET AVAILABLE IF OTHER JOBS WAITING - JFCL DCREQ ;ARGUMENT FOR DCQAIT + JFCL DCREQ ;ARGUMENT FOR DCWAIT PUSHJ PDP,DCWAIT ;WAIT FOR DATA CONTROL FREE MOVE AC1,@(PDP) ;INCREMENT REQ. COUNT AOSN @AC1 ;NOW IS SHARABLE DEVICE FREE? @@ -839,7 +838,7 @@ EXTERNAL JOB,REQTAB MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT: DVWAIT: MOVE AC1,(PDP) ;GET ADR. OF CALLER - MOVE AC1,-2(AC1) ;GEET AOSLE XXREQ INSTRUCTION + MOVE AC1,-2(AC1) ;GET AOSLE XXREQ INSTRUCTION JRST .+2 DVWAT1: MOVE AC1,@-1(PDP) ;GET ADR. OF CALLER OF THIS ROUTINE SUBI AC1,REQTAB ;COMPUTE WAIT-STATE QUEUE CODE @@ -853,16 +852,16 @@ PJBS1: POINT JWSIZ,JBTSTS(AC3),JWPOS ;BYTE POINTER TO JOB STATUS ; WORD WAIT QUEUE CODE ;ROUTINE TO SET JOB TO RUN AFTER IT HAS BEEN STOPPED ;BECAUSE IT HAD TO WAIT FOR IO TO COMPLETE FOR SOME DEVICE -;EACH SERVICE ROUTINE WILL AT INTERRUPT LEVEL -;CHECK EACH TIME IT FINISHED A TASK(RUNFFERFUL) +;EACH SERVICE ROUTINE AT INTERRUPT LEVEL +;CHECK EACH TIME IT FINISHED A TASK(BUFFERFUL) ;TO SEE IF THE JOB USING THE DEVICE HAS ;PREVIOUSLY CAUGHT UP WITH DEVICE AND HAS BEEN STOPPED -;CALL: MOVE DEVDAT,ADR, OF DEVICE DATA BLOCK +;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK ; MOVE IOS,DEVIOS(DEVDAT) ;GET DEVICE IO STATUS WORD FROM DDB -; TLZE IOS,IOW ;IS JOB AN IO WAIT FOR THIS DEVICE? +; TLZE IOS,IOW ;IS JOB IN AN IO WAIT FOR THIS DEVICE? ; PUSHJ PDP,SETIOD ;YES, GO FLAG JOB TO START UP AGAIN ; RETURN -;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD, +;SETS THE JOB QUEUE WAIT CODE TO WSQ IN JOB STATUS WORD. ;THE SCHEDULER THEN SEES THAT THIS JOB HAS ITS ;IO WAIT SATISFIED AND IS WAITING TO BE RUN AGAIN @@ -872,15 +871,15 @@ EXTERNAL WSQ,WSAVAL,TSQ,TSAVAL,JOB,PJOBN PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS ;BYTE POINTER TO JOB STATUS ; WORD QUEUE CODE -STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE +STTIOD: MOVEI TAC1,TSQ ;SET TTY IO WAIT SATISFIED QUEUE CODE AOS TSAVAL - JRST SETIO1 + JRST SETID1 SETIOD: MOVEI TAC1,WSQ ;REQUE TO WAIT SATISFIED Q - AOS WSAVAL ;INCR, NO, OF JOBS WITH IO WAIT - ; SATISFIED, NON-ZERO WSAVAL WILL - ; CAUSE SCHED, TO SCAN FOR IO + AOS WSAVAL ;INCR. NO. OF JOBS WITH IO WAIT + ; SATISFIED. NON-ZERO WSAVAL WILL + ; CAUSE SCHED. TO SCAN FOR IO ; SATISFIED JOB. -SETIO1: LDB TAC,PJOBN +SETID1: LDB TAC,PJOBN DPB TAC1,PJBS2 ;IN JOB STATUS WORD INTERNAL FTSWAP @@ -892,8 +891,8 @@ IFN FTSWAP,< IORM TAC1,JBTSTS(TAC) ;SET REQUEUEING BIT FOR SCHEDULER > NULTST: SKIPE JOB ;IS NULL JOB RUNNING? - POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPED TO - ;ROUTINE TO CAUSE CLK TO ROUTINE TO RESCHEDULE + POPJ PDP, ;NO LET OTHER JOB RUN TILL SCHEDULER IS TRAPPPED TO + ;ROUTINE TO CAUSE CLK ROUTINE TO RESCHEDULE ;CALLED AT ANY LEVEL ;CALL: PUSHJ PDP,STOP2 ; RETURN IMMEDIATELY EXCEPT IF AT UUO LEVEL @@ -904,24 +903,24 @@ EXTERNAL PICLK,CLKFLG STOP2: CONO PI,PIOFF ;PREVENT CLOCK INTERRUPT DURING STOP2 CODE SETOM CLKFLG ;SET FLAG TO INDICATE CLK INTERRUPT - ; EVEN THOUGH CLK INTERRUTP IS NOT A ATIME INTERRUPT - CONO PI,PICLK ;TURN PI BACK ON AND REQUESST INTERRUPT TO + ; EVEN THOUGH CLK INTERRUPT IS NOT A TIME INTERRUPT + CONO PI,PICLK ;TURN PI BACK ON AND REQUEST INTERRUPT TO ; CLK PI CHANNEL(LOWEST PRIORITY CHANNEL) POPJ PDP, ;INTERRUPT IMMEDIATELY IF AT UUO LEVEL - ;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INCTIVE + ;ROUTINE TO WAIT TILL DEVICE CATCHES UP WITH USER AND BECOMES INACTIVE ,CALLING SEQUENCE , PUSHJ PDP, WAIT1 -, EXIT ALWAYS RETURN HERE +, EXIT ALWAYS RETURNS HERE -,IF DEVICE IS INACTIVBE (IOACT=0), RETURNS TO EXIT, OTHERWISE, SETS -,IOW:=1 AND ENTERS WAIT UNLESS IOCT BECOMES ZERO BEFORE THE -,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT, -,ON LEAVING THE WIAT STATE, RETURNS TO EXIT. +,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE. SETS +,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE +,JUMP IS MADE, IN WHICH CASE IT SETS IOW:=0 AND RETURNS TO EXIT. +,ON LEAVING THE WAIT STATE, RETURNS TO EXIT. ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING ,CALLING SEQUENCE , PUSHJ PDP, WSYNC , EXIT ALWAYS RETURNS HERE -,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0 +,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. INTERNAL WAIT1 @@ -932,7 +931,7 @@ WAIT1: MOVE IOS,DEVIOS(DEVDAT) JRST WAIT1 ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE -;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE +;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED ;CALLED ONLY FROM UUO LEVEL ;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK ; PUSHJ PDP,WSYNC @@ -963,7 +962,7 @@ WSYNC: MOVSI IOS,IOW ;SETUP DEVICE IO WAIT BIT ; WITH ACS 0-14 OCTAL RESTORED ; RETURN WHEN IO-WAIT FINISHED WSYNC1: CONO PI, PION - ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVIVCE IO-WAIT BIT + ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT POPJ PDP, diff --git a/src/common.mac b/src/common.mac index dfcefaa..0a25637 100644 --- a/src/common.mac +++ b/src/common.mac @@ -3,20 +3,19 @@ SUBTTL PART 3 COMMON.MAC - T. HASTINGS/RCC TS 03 JUN 69 XP VCOMMN,437 ;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP -REPEAT 0, < +REPEAT 0,< ;THE COMMON SUBPROGRAM CONSISTS OF 3 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM: - 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINITIONS ASSEMBLED WITH - EVERY MONITOR SUBPROGRAM - 2. CONFIG.MAC - THE CONFIGURATION DEFINITION FILE GENERATED BY THE - CONFIGURATION PROGRAM (MONGEN) OR BY AN EDITOR (SEE ABOVE) - 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME SOURCE FOR - ALL CONFIGURATIONS. HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY - SYMBOLS AND MACROS DEFINED IN 2. - THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED BELOW: - - A. MONITOR STARTUP LOCATIONS (140-147), HENCE LOAD THIS FIRST. - B. JOB TABLES - LENGTH DEPENDENT ON MAXIMUM NUMBER OF JOBS ALLOWED + 1. S.MAC - THE USUAL SYSTEM SYMBOL DEFINTIONS ASSEMBLED WITH EVERY MONITOR SUBPROGRAM + 2. CONFIG.MAC - THE CONFIGURATION DEFINTION FILE GENERATED BY THE + CONFIGURATION CONFIG PROGRAM OR BY AND EDITOR(SEE ABOVE) + 3. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME + SOURCE FOR ALL CONFIGURATIONS. + HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY MACROS DEFINED IN 2. + THE FOLLOWING SYMBOLS AND TABLES ARE GENERATED: + + A. MONITOR STARTUP LOCATIONS(140-147), HENCE LOAD THIS FIRST. + B. JOB TABLES - LENGTH DEPENDENT ON MAX. NO. OF JOBS ALLOWED C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE D. COMMON SUBROUTINE RETURNS E. COMMON BYTE POINTERS @@ -34,15 +33,15 @@ REPEAT 0, < IFNDEF LISTSN, ;FORCE S.MAC TO BE LISTED WITH COMMON FILE ONLY ;UNLESS 'LISTSN' DEFINED TO BE 0 WITH MONGEN -IFNDEF APRSN, ;SERIAL NUMBER OF APR +IFNDEF APRSN, ;SERIAL NUMBER OF APR ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY) INTERN STDENS ;STANDARD MAG TAPE DENSITY(556 BPI),PARITY(ODD-BINARY) - IFNDEF STDENS, ;STAND. == BINARY AT 556 BPI + IFNDEF STDENS, ;STAND.== BINARY AT 556 BPI ;STDENS==D+P WHERE D AND P ARE: - ;D==1(200 BPI);D== (556 BPI);D==3(800 BPI) - ;P==0(ODD-BINARY PARITY);P=4(EVEN-BCD PARITY) + ;D==1(200 BPI);D==2(556 BPI);D==3(800 BPI) + ;P==0(ODD-BINARY PARITY);P==4(EVEN-BCD PARITY) INTERN JIFSEC ;NO. OF CLOCK TICKS(JIFFIES) PER SECOND IFNDEF JIFSEC, ;STAND.==60 JIFFIES PER SEC. XP HNGSEC,2*JIFSEC @@ -50,28 +49,29 @@ IFNDEF APRSN, ;SERIAL NUMBER OF APR INTERN DTTRY ;NO. OF TIMES TO TRY ON DECTAPE ERRORS IFNDEF DTTRY, ;STAND.==4 TRIES - INTERN MTSIZ ;SIZE OF MAGTAPE RECORDS(DATA WORDS IN BUFFER+1) + INTERN MTSIZ ;SIZE OF MAGTPAE RECORDS(DATA WORDS IN BUFFER+1) IFNDEF MTSIZ, ;STAND.==128 WORDS PER BUFFER INTERN LPTSIZ ;SIZE OF LPT BUFFER(NO. OF DATA WORDS+2) IFNDEF LPTSIZ, ;STAND.==24 WORDS PER LPT BUFFER - INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCKS SEARCHED BEFORE - ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL. + INTERN BLKQNT ;MAX. NO OF CONSECUTIVE DECTAPE BLOCK SEARCHED BEFORE + ; RESCHEDULING IF ANOTHER JOB IS WAITING TO USE CONTROL IFNDEF BLKQNT, ;STAND.==50 DT BLOCKS SEARCHED(3 SECS.) - INTERN NSPMEM ;NO OF NANO-SECONDS PER MEMORY CYCLE - IFNDEF NSPMEM, ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE -INTERNAL JIFSC2,JIFMIN,WDPJIF + INTERN NSPMEM ;NO. OF NANO-SECONDS PER MEMORY CYCLE + IFNDEF NSPMEM, ;STAND.==1760 NANO-SECONDS PER MEMORY CYCLE + +INTERN JIFSC2,JIFMIN,WDPJIF JIFSC2==JIFSEC/2 ;HALF NO. OF JIFFIES IN A SEC (FOR ROUNDING) - JIFMIN==JIFSEC*^D60 ;NO., OF JIFFIES PER MINUTE - WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED - IFNDEF MINCOR, ;DISK DDB AND ACCESS ENTRY - ; ALLOCATION REQUIRMENTS IN FREE CORE + JIFMIN==JIFSEC*^D60 ;NO. OF JIFFIES PER MINUTE + WDPJIF==^D100000/NSPMEM*^D5000/JIFSEC ;NO. OF WORDS MOVED + IFNDEF MINCOR, ;DISK DDB AND ACCESS ENTRY + ; ALLOCATION REQUIREMENTS IN FREE CORE ;USED TO EXPAND SIZE OF MONITOR AT ONCE ONLY TIME ;32 WORDS/DDB AND 4 WORDS/ACCESS ENTRY = 36 WORDS - ;ASSUME 1.5 OPEN FILE/JOB + ;ASSUME 1.5 OPEN FILES/JOB INTERN LOGSIZ @@ -82,7 +82,7 @@ IFNDEF LOGSIZ, ;MINSIZ OF VIRTUAL CORE LEFT ;SYSTEM INITIALIZATION DISPATCH TABLE, STARTING AT LOCATION 140 ;THIS SUBROUTINE MUST BE LOADED FIRST ;ROUTINE "ONCE" IS ONCE ONLY CODE. IT CONVERTS THE DATE -;AND SETS UP I/O SERVICE CHAIN, +;AND SETS UP IO SERVICE CHAIN, EXTERN SYSINI,SYSMAK,NULJOB,ONCE,JSR2 INTERN SYSDSP,SYSDDT @@ -94,13 +94,13 @@ IFNDEF LOGSIZ, ;MINSIZ OF VIRTUAL CORE LEFT SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY SYSDDT: -IFG DDTN, < ;IF EXEC DDT IS LOADED..... +IFG DDTN,< ;EXEC DDT TO BE LOADED? EXTERN PATSYM JRST PATSYM ;YES, EXEC DDT(PATCH SYMBOL TABLE POINTER FIRST) > - IFE DDTN, < - HALT . ;NO. EXEC DDT +IFE DDTN,< + HALT . ;NO, EXEC DDT > JRST SYSMAK ;MAKE NEW SYSTEM JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS @@ -116,47 +116,46 @@ SYSCRS: JRST SYSTOP ;STOP MONITOR IN CASE OF DISASTER INTERN SYSSNP,FORTY,NULDAT,SIXTY,NULPDL,ERRPDL,KT10A,RCXIOC,RCXCCW,DDTSYM INTERN T30SYM,RAXIOC,RAXCCW,CRSHWD - RAXIOC=26 ;XWD 0,ADDRESS FOR RA-10'S DATA CHANNEL + RAXIOC=26 ;XWD 0,ADDRESS FOR RA10 DATA CHANNEL ; MUST BE EVEN AND .LT. 777 RAXCCW=RAXIOC+1 ;XWD CONTROL WORD ADDRESS,DATA ADDRESS ; STORED ON CHANNEL TERMINATION - CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS + CRSHWD=30 ;NORMALLY THIS WORD WILL BE 0. IF IT IS ;ACCIDENTALLY OR PURPOSEFULLY OVERWRITTEN ;THE MONITOR WILL ATTEMPT TO SAVE THE - ;AC'S AND THE STATE OF ALL DEVICES, + ;AC'S AND THE STATE OF ALL DEVICES. ;[A LA 147 RESTART] KT10A=33 ;COPY OF CONTENTS OF RELOCATION AND PROTECTION - ; DONE BY DATAO APR + ; DONE BY DTATO APR ; NEEDED BECAUSE KT10A MOD DOES NOT COME WITH ; LIGHTS FOR 2ND REG. RCXIOC=34 ;INITIAL CONTROL WORD FOR DATA CHANNEL - ; (TRANSFERS CHANNEL TO SEQUENCE OF IOWD'S IN DSKINT) + ; (TRANSFERS CHANNE TO SEQUENCE OF IOWD'S IN DSKINT) ; MUST BE IN EVEN LOC IN FIRST 1K OF MEMORY RCXCCW=RCXIOC+1 ;CHANNEL STORES FINAL CONTROL WORD ; HERE ON TERMINATION SYSSNP=37 ;WHEN DEPOSITED NON-ZERO,PRINTS SNAP SHOT OF SYSTEM ; ON LPT SEE LPSNAP SUBPROGRAM - DDTSYM=36 ;CONTAINS ADDRESS OF POINTER TO EXEC DDT SYMBOL TABLE + DDTSYM=36 ;CONTAINS ADR. OF POINTER TO EXEC DDT SYMBOL TABLE FORTY=40 ;PLACE WHERE UUOS ARE STORED ON TRAP - NULDAT=42 ;JOB DATA AREA FOR NULL JOB (USES EXEC - ; 62 THRU 101 20-36 FOR DUMP AC) + NULDAT=42 ;JOB DATA AREA FOR NULL JOB(USES EXEC + ; 62 THRU 101 20-36 FOR DUMP ACS) ; AND ABOVE FOR PUSHDOWN LIST - SIXTY=60 ;PLACE WHERE UNIMPLEMENTED INSTR. ARE STORED ON - ; TRAP (PDP-10 ONLY) + SIXTY=60 ;PLACE WHERE UNIMPLEMETNED INSTR. ARE STORED ON + ; TRAP(PDP-10 ONLY) NULPDL=101 ;PUSH DOWN LIST FOR NULL JOB ; USES EXEC LOCS 102 THRU 137 - ; USED FOR RE-SCHEDULING WHEN CURRENT JOB + ; USED FOR RESCHEDULING WHEN CURRENT JOB ; GOES INTO IO WAIT ERRPDL=120 ;PUSH DOWN LIST FOR ERROR IN NULL JOB T30SYM=131 ;PLACE IN 10/30 JOB DATA AREA WHERE SYMBOL TABLE ; POINTER IS STORED BY REGULAR 10/30 LOADER ; (MOVED TO DDTSYM BY ONCE) ;PROTECTED JOB DATA STORAGE AND OTHER LOCATIONS SET EACH TIME -;A NEW JOB IS RUN (SEE APRSER-CLKINT) - +;A NEW JOB IS RUN(SEE APRSER-CLKINT) INTERN SYSBEG,SYSBG1,SYSEND -SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART (SEE SYSINI) +SYSBEG: ;FIRST LOCATION CLEARED ON 143 RESTART(SEE SYSINI) XP SYSBG1,SYSBEG+1 INTERN JOB,JOBADR,JOBDAT,USRREL,USRSAV @@ -168,8 +167,8 @@ JOBADR: 0 ;XWD PROTECTION,RELOCATION FOR CURRENT JOB ;SAME AS JBTADR(JOB) AND AC PROG USRREL: 0 ;LH==0, RH CONTAINS CONTENTS OF PROTECTION REGISTER ;LOW ORDER BITS==1777, IE THIS IS HIGHEST REL. LOC - ;IN CURRENT USER AREA (USED FOR ADDRESS CHECKING) -USRSAV: 0 ;TEMPORARY FOR UUO HANDLER (IMPURE ROUTINE!) + ;IN CURRENT USER AREA(USED FOR ADDRESS CHECKING) +USRSAV: 0 ;TEMPORARY FOR UUO HANDLER(IMPURE ROUTINE!) ;LOCATIONS COPIED FROM JOB DATA AREA INTO MONITOR WHEN A JOB RUNS ;THIS PREVENTS THE USER FROM CLOBBERING THEM AND MAKES IT @@ -181,28 +180,28 @@ USRSAV: 0 ;TEMPORARY FOR UUO HANDLER (IMPURE ROUTINE!) INTERN USRPRT,USRPR1,USRPC,USRDDT,USRHCU,USRSAV,USRJDA,USRLO,USRLO1,USRHI -USRPRT: ;FIRST LOCATION OF PROTECTED JOB DATA - USRPR1==USRPRT+1 ;FIRST LOCATION+1 +USRPRT: ;FIRST LOC. OF PROTECTED JOB DATA + USRPR1==USRPRT+1 ;FIRST LOC.+1 -USRHCU: 0 ;HIGHEST USER I/O CHANNEL IN USE - ;0 MEANS EITHER NONE OR CHANNEL 0 IN USE +USRHCU: 0 ;HIGHEST USER IO CHANNEL IN USE + ;0 MEANS EITHER NONE OR CHAN. 0 IN USE ;LH=-1 DURING GET OF LOW OR HIGH SEG OR SAVE OF HIGH SEG - ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(11$) WHEN NEG, + ;SETREL ROUTINE DOESN'T STORE IN JOBHRL(115) WHEN NEG. ;LH=-2 DURING SAVE OF LOW SEG AS FLAG THAT CORE - ; IS COMPRESSED. - ;ONLY CHANNEL ASSIGNMENTS IN USE ARE COPIED INTO - ; MONITOR WHEN JOB RUNS + ; IS COMPRESSED + ;ONLY CHAN. ASSIGNMENTS IN USE ARE COPIED INTO + ;MONITOR WHEN JOB RUNS USRPC: 0 ;JOB PC WHEN SCHEDULER IS CALLED -USRDDT: 0 ;RH==STARTING ADDRESS OF USER DDT, LH UNUSED +USRDDT: 0 ;RH==STARTING ADR. OF USER DDT,LH UNUSED USRJDA: BLOCK 20 ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA ; BLOCK ADDRESSES) - ;LH==UUO'S DONE SO FAR FOR THIS CHANNEL (SEE SYSPAR) - ;0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL + ; LH==UUOS DONE SO FAR FOR THIS CHANNEL(SEE SYSPAR) + ; 0 MEANS NO DEVICE INITIALIZED ON THIS CHANNEL USRLO==USRJDA ;FIRST LOC CLEARED BY SETUSR ROUTINE ;ON A CALL [SIXBIT /RESET/] ;ALSO CLEARS USRHCU USRLO1==USRLO+1 ;FIRST LOC+1 - USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE + USRHI==.-1 ;LAST LOC CLEARED BY SETUSR ROUT. ;OTHER SYSTEM DATA STORAGE @@ -213,13 +212,13 @@ USRJDA: BLOCK 20 ;RH==JOB DEVICE ASSIGNMENTS (DEVICE DATA COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED ;SET BY SCNSER, DECREMENTED BY COMCON -HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG I/O - ;DEVICES WHEN THIS GOES TO ZERO (ONCE PER HNGSEC) +HNGTIM: 0 ;HUNG DEVICE TIME COUNT CHECK FOR HUNG IO + ;DEVICES WHEN THIS GOES TO ZERO (ONCE A SECOND) CLKFLG: 0 ;NON-ZERO WHEN CLK INTERRUPT FORCED FOR ANY REASON TIMEF: 0 ;NON-ZERO FOR CLOCK INTERRUPT ON APR ;SET BY APRSER, TESTED AND CLEARED BY CLK ROUTINE APRERR: 0 ;APR ERROR BITS ON NON-EX MEM, ETC. - ;SET BY APRSER, CLEARED BY CLK ROUTINE (CLOCK) + ;SET BY APRSER, CLEARED BY CLK ROUTINE(CLOCK) APRPC: 0 ;PC WHEN APR ERROR DETECTED SCHEDF: 0 ;FORCED RESCHEDULING FLAG FOR CLK ROUTINE ;USED TO FORCE RESCHEDULING WHEN JOB IS IN EXEC MODE @@ -227,24 +226,24 @@ NULERR: 0 ;SET NON-ZERO IF MONITOR DETECTS ERROR WHILE ; NULL JOB IS RUNNING POTLST: 0 ;-1 WHEN SCHEDULER SEES THAT THERE ARE ;JOBS WHICH ARE POTENTIALLY RUNABLE BUT - ;HAS TO RUN NULL JOB. - ;0 WHEN IT FINDS A REAL JOB TO - ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS TO - ;RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY - ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB. + ;HAS TO RUN NULL JOB. + ;0 WHEN IT FINDS A REAL JOB TO + ;RUN OR NULL JOB IS ONLY JOB WHICH WANTS + ;TO RUN. 'LSTWRD' IS INCREMENTED EVERY JIFFY + ;IF THIS FLAG IS -1 AND PREVIOUS JOB WAS NULL JOB IFN FTTRPSET,< INTERN STOPTS STOPTS: 0 ;STOP TIME SHARING OTHER USERS BECAUSE JOB 1 DID ;A TRPSET UUO WITH NON-ZERO AC(IE SET LOWER CORE - ; PI TRAP LOCATION,ALSO STOP CORE SHUFFLING + ; PI TRAP LOCATION. ALSO STOP CORE SHUFFLING > - SLJOBN=0 ;NUMBER OF JOBS IF NO SLEEP FEATURE + SLJOBN=0 ;NO. OF JOBS IF NO SLEEP FEATURE IFN FTSLEEP, ;LEAVE ONE ENTRY PER JOB CIPWT: BLOCK SLJOBN+3 ;CLOCK REQUEST QUEUE ; LH-MONITOR ADDRESS TO PUSHJ TO AT CLOCK LEVEL ; WHEN BITS 24-35 COUNT DOWN TO ZERO ; BITS 18-23 ARE DATA SET IN AC TAC WHEN PUSHJ DONE - ; BITS 24-35 ARE NUMBER OF CLK TICKS LEFT TO GO + ; BITS 24-35 ARE NO. OF CLK TICKS LEFT TO GO CIPWTM=CIPWT-1 ;FIRST LOC-1 OF CLOCK QUEUE ;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS @@ -253,79 +252,78 @@ CIPWT: BLOCK SLJOBN+3 ;CLOCK REQUEST QUEUE NSWTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE - ; RETURNED BY GETTAB UUO (THESE LOCATIONS + ; RETURNED BY GETTAB UUO(THESE LOCATIONS ; PRESENT IN NON-SWAPPING SYSTEMS TOO) - ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG -CORTAB: BLOCK 10 ;(0-7) BIT=1 IF CORRESPONDING K OF CORE IN USE BY + ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG +CORTAB: BLOCK 10 ;(0-7)BIT=1 IF CORRESPONDING K OF CORE IN USE BY ; ACTIVE,IDLE, OR DORMANT HIGH OR LOW SEGS OR NON-EX XP CORBLK,^D256 ;NUMBER OF BITS IN CORE TABLE -CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR.+1) - ; CAN BE RESTRICTED TO LESS THEN ALL OF USER CORE +CORMAX: 0 ;(10)MAX. CORE REQUEST+1(IE LARGEST REL. ADR,+1) + ; CAN BE RESTRICTED TO LESS THAN ALL OF USER CORE ; BY BUILD AND/OR ONCE - - -CORLST: 0 ;(11) 1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE +CORLST: 0 ;(11)1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE ; SET BY SYSINI ON 143 STARTUP -CORTAL: 0 ;(12) TOTAL NUMBER OF FREE+DORMANT+IDLE CORE BLKS LEFT -SHFWAT: 0 ;(13) JOB NUMBER SHUFFLER HAS TEMPORARILY STOPPED - ;UNTIL ITS IO DEVICES TO BECOME INACTIVE BEFORE SHUFFLING -HOLEF: 0 ;(14) ABSOLUTE ADDRESS OF LOWEST HOLE IN CORE, 0=NONE -UPTIME: 0 ;(15) NUMBER OF CLOCK TICKS SINCE SYSTEM LOADED OR +CORTAL: 0 ;(12)TOTAL NO. OF FREE+DORMANT+IDLE CORE BLOCKS LEFT +SHFWAT: 0 ;(13)JOB NO. SHUFFLER HAS TEMPORARILY STOPPED + ;UNTIL ITS IO DEVICES BECOME INACTIVE, BEFORE SHUFFLING +HOLEF: 0 ;(14)ABS. ADDRESS OF JOB ABOVE LOWEST HOLE, 0 IF NO JOB. +UPTIME: 0 ;(15)NO. OF CLOCK TICKS SINCE SYSTEM LOADED OR ; RESTARTED AT 143 -SHFWRD: 0 ;(16) TOT NO. OF WORDS SHUFFLED BY SYSTEM -STUSER: 0 ;(17) JOB CURRENTLY USING THE SYSTEM TAPE +SHFWRD: 0 ;(16)TOT. NO. OF WORDS SHUFFLED BY SYSTEM +STUSER: 0 ;(17)JOB CURRENTLY USING THE SYSTEM TAPE ; NEEDED SO CONTROL C WILL NOT TIE UP SYSTEM TAPE -HIGHJB: 0 ;(20) HIGHEST JOB NUMBER CURRENTLY ASSIGNED -CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY 'CLRCOR' RTN. -LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL JOB RAN - ; BUT OTHER JOBS WANTED TO RUN AND COULD NOT - ; DO SO BECAUSE: --- +HIGHJB: 0 ;(20)HIGHEST JOB NUMBER CURRENTLY ASSIGNED + +CLRWRD: 0 ;(21) TOTAL NO. OF WORDS CLEARED BY "CLRCOR" RTNE. +LSTWRD: 0 ;(22) TOTAL NO. OF CLOCK TICKS WHEN NULL + ;JOB RAN BUT OTHER JOBS WANTED TO RUN, BUT + ;COULD NOT BE BECAUSE:- ; 1. SWAPPED OUT OR ON WAY IN OR OUT - ; 2. MONITOR WAITING FOR I/O TO STOP SO - ; IT CAN SHUFFLE OR SWAP - ; 3. JOB BEING SWAPPED OUT BECAUSE IT IS + ; 2. MONITOR WAITING FOR IO TO STOP SO + ; CAN SHUFFLE OR SWAP + ; 3. JOB BEING SWAPPED OUT BECAUSE ; EXPANDING CORE ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST ; TO USERS IN NON-SWAP AND SWAP SYSTEMS -NSWMXL=<.-NSWTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9 +NSWMXL=<.-NSWTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9 ;CORE ALLOCATION DATA NOT AVAILABLE VIA GETTAB -IFN FTTRACK, +IFN FTTRACK, ;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS - IFG SYS50N, < ;SWAPPING SYSTEM ? + IFG SYS50N,< ;SWAPPING SYSTEM? INTERN SWPTBL,SWPMXL,BIGHOL,FINISH,FORCE,FIT,SWPERC,VIRTAL INTERN FULCNT,MAXSIZ,MAXJBN,SUMCOR SWPTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE - ; RETURNED BY GETTAB UUO (THESE LOCATIONS + ; RETURNED BY GETTAB UUO(THESE LOCATIONS ; PRESENT ONLY IN SWAP SYSTEMS) - ; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG -BIGHOL: 0 ;(0) CURRENT BIGGEST HOLE IN CORE (1K BLOCKS) -FINISH: 0 ;(1) IF +, THEN JOB NUMBER OF JOB BEING SWAPPED IN, - ;IF -, THEN JOB NUMBER OF JOB BEING SWAPPED OUT -FORCE: 0 ;(2) JOB NUMBER BEING FORCED TO SWAP OUT -FIT: 0 ;(3) JOB NUMBER WAITING TO BE FITTED INTO CORE -VIRTAL: 0 ;(4) NUMBER OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT + ; OCTAL NOS. IN () CORRESPOND TO GETTAB ARG +BIGHOL: 0 ;(0)CURRENT BIGGEST HOLE IN CORE (1K BLOCKS) +FINISH: 0 ;(1)+JOBNO OF JOB BEING SWAPPED IN, + ;-JOBNO OF JOB BEING SWAPPED OUT +FORCE: 0 ;(2)JOBNO BEING FORCED TO SWAP OUT +FIT: 0 ;(3)JOBNO WAITING TO BE FITTED INTO CORE +VIRTAL: 0 ;(4)NO. OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT ; (COUNTING DORMANT SEGMENTS AS IF FREE). - ; PRINTED WITH CORE COMMAND (NO ARG) OR ERROR + ; PRINTED WITH CORE COMMAND(NO ARG) OR ERROR ; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE ; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET ; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE ; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET, ; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN -SWPERC: 0 ;(5) LH= NUMBER OF SWAPPER READ OR WRITE FAILURES - ; RH= ERROR BITS (BITS 18-21) + NUMBER OF K OF +SWPERC: 0 ;(5)LH= NO. OF SWAPPER READ OR WRITE FAILURES + ; RH= ERROR BITS (BITS 18-21) + NO. OF K OF ; DISCARDED SWAPPING SPACE ;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST ; TO USER PROGS IN SWAPPING SYSTEMS -SWPMXL=<.-SWPTBL-1>B26 ;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9 +SWPMXL=<.-SWPTBL-1>B26 ;MAX. ENTRY FOR GETTAB SHIFTED LEFT 9 ;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB) FULCNT: 0 ;PRINT DISK IS FULL EVERY 30 SECONDS @@ -334,24 +332,25 @@ MAXJBN: 0 ;NUMBER OF THAT JOB SUMCOR: 0 ;TEMP USED BY SWAPPER FOR SUM OF CORE NEEDED FOR SWAP IN IFN FT2REL,< INTERN SWPIN,SWPOUT -SWPIN: 0 ;JOB NUMBER BEING SWAPPED IN IF IT HAS A HIGH SEG - ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG +SWPIN: 0 ;JOB NO. BEING SWAPPED IN IF IT HAS A HIGH SEG + ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP -SWPOUT: 0 ;JOB NUMBER BEING SWAPPED OUT IF IT HAS A HIGH SEG - ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG +SWPOUT: 0 ;JOB NO. BEING SWAPPED OUT IF IT HASA HIGH SEG + ; USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP > INTERN FTTRACK -IFN FTTRACK, < - INTERN LASIN,LASOUT -LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN +IFN FTTRACK,< + INTERN LASOUT,LASIN + LASOUT: 0 ;LAST JOB OR HIGH SEG SWAPPED OUT +LASIN: 0 ;LAST JOB OR HIGH SEG SWAPPED IN ; ABOVE TWO FOR DEBUGGING ONLY > > -;DEFINE BLOCK FOR BIT TABLE DENOTING 4 WORD BLOCKS AVAILABLE (=0), IN USE (=1) -; USE MULTIPLES OF 4*^D36 WORDS SO THE TABLE WILL HAVE A MULTIPLE OF ^D36 BITS +;DEFINE BLOCK FOR BIT TABLE DENOTING 4. WORD BLOCKS AVAILABLE (=0), IN USE(=1) +; USE MULTIPLES OF 4*36. WORDS SO THE TABLE WILL HAVE A MULTIPLE OF 36. BITS ; ADD 7 WORDS TO ACCOMODATE A POSSIBLE 1K BEYOND MINCOR AMOUNT IFG DSKN, < @@ -359,67 +358,65 @@ INTERNAL DDBTAB,MINCOR DDBTAB: BLOCK +1+7 > - ;MONITOR TABLES WITH ONE ENTRY PER JOB INTERN JBTSTS,JBTADR,JBTDAT,JBTNAM,JBTPRG INTERN JOBMAX,JBTMAX,MJOBN,JBTAD1,JOBMXL,JBTMXL INTERN FTTIME,FTKCT,FTPRV - JOBMAX==JOBN-1 ;MAXIMUM LEGAL JOB NUMBER - JOBMXL==B26 ;HIGHEST JOB NUMBERSHIFTED LEFT 9 (FOR GETTAB UUO) - MJOBN==-JOBN ;NEGATIVE NUMBERS OF JOBS (COUNTING NULL JOB) - IFG KT10AN, ;IF ANY HIGH SEGMENTS, + JOBMAX==JOBN-1 ;MAX. LEGAL JOB NUMBER + JOBMXL==B26 ;HIGHEST JOB NO.SHIFTED LEFT 9(FOR GETTAB UUO) + MJOBN==-JOBN ;NEG. NOS. OF JOBS(COUNTING NULL JOB) + IFG KT10AN, ;IF ANY HIGH SEGMENTS, ; MUST HAVE AT LEAST AS MANY AS JOBS JBTMAX==JOBN+SEGN-1 ;HIGHEST INDEX IN JBT TABLES - JBTMXL=B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9 (FOR GETTAB UUO) + JBTMXL=B26 ;HIGHEST JBT ENTRY SHIFTED LEFT 9(FOR GETTAB UUO) JBTSTS: BLOCK JOBN+SEGN ;JOB AND HIGH SEG STATUS WORD - ;LH==STATUS BITS (SEE S.MAC FOR DESCRIPTION) - ;RH==QUANTUM RUN TIME LEFT (SEE CLKCSS) FOR LOW SEGS + ;LH==STATUS BITS(SEE S.MAC FOR DESC.) + ;RH==QUANTUM RUN TIME LEFT(SEE CLKCSS) FOR LOW SEGS ;RH=IN CORE COUNT FOR HIGH SEGS JBTADR: BLOCK JOBN+SEGN ;JOB AND HIGH SEG CORE ASSIGNMENT - ; LH==PROTECTION (LENGTH-1) - ; RH==RELOCATION (ABSOLUTE LOCATION IN CORE) - JBTAD1==JBTADR+1 ;ADDRESS OF JOB 1 (USED BY SYSMAK) + ; LH==PROTECTION,(LENGTH-1)RH==RELOCATION + ; (ABS. LOC. IN CORE) + JBTAD1==JBTADR+1 ;ADR. OF JOB 1(USED BY SYSMAK) JBTDAT==JBTADR ;RH==ADDRESS OF JOB DATA AREA - ;SAME AS JBTADR (JDAT==PROG) + ;SAME AS JBTADR(JDAT==PROG) INTERN JBTSGN JBTSGN: IFG SEGN, < BLOCK JOBN ;SEGMENT NUMBER OF HIGH SEGMENT THIS JOB - ; IS USING IN CORE OR ON DISK + ; IS USING IN CORE OR DISK ; 0 MEANS JOB DOES NOT HAVE HIGH SEG - ;LH=USER DEPENDENT HIGH SEG STATUS BITS + ; LH=USER DEPENDENT HIGH SEG STATUS BITS ; (SEE S.MAC) - XP ITMSGN,ITEM+JOBMXL ;LH SYMBOL FOR GETTAB UUO + XP ITMSGN,ITEM+JOBMXL ;LH SYSMBOL FOR GETTAB UUO > IFE SEGN, < 0 XP ITMSGN,JOBMXL ;LH SYMBOL FOR GETTAB UUO ;SO THAT JBTSGN IS UNDEFINED - ;I.E., MAKE INDEXING BY ITEM BE 0 - ; BUT ALLOW REFERENCES UP TO JOBMXL + ;I.E. MAKE INDEXING BY ITEM BE 0 + ; BUT ALLOW REFERENCES UP TO JOBMXL > - IFG DSKN, < ;DISK SYSTEM ? + IFG DSKN,< ;DISK SYSTEM? INTERN PRJPRG,JBTDIR -JBTDIR: ;HIGH SEGMENT DIRECTORY NAME (DSK) OR PHYSICAL - ; DEVICE NAME (DTA,MTA) -PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NUMBER,PROGRAMMER NUMBER +JBTDIR: ;HIGH SEGMENT DIRECTORY NAME(DSK) OR PHYSICAL + ; DEVICE NAME(DTA,MTA) +PRJPRG: BLOCK JOBN+SEGN ;XWD PROJECT NO.,PROGRAMMER NO. > - IFE DSKN, > - IFN FTTIME, < + IFN FTTIME,< INTERN RTIME,TTIME -RTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB OR RUNTIME -TTIME: BLOCK JOBN ;TOTAL RUN TIME SINCE LAST IJOB +RTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB OR RUNTIME +TTIME: BLOCK JOBN ;TOT. RUN TIME SINCE LAST IJOB > - IFG SYS50N,< ;SWAPPING SYSTEM ? - INTERNAL JBTSWP,JBTCHK + IFG SYS50N,< ;SWAPPING SYSTEM? + INTERN JBTSWP,JBTCHK JBTSWP: BLOCK JOBN+SEGN ;LH:==PROTECT TIME WHILE JOB IS IN CORE. ; DISK ADDRESS WHILE SWAPPED OUT - ;BIT 0=1 IF SEGMENT IS FRAGMENTED ; BITS18-26:==OUTCORE IMAGE SIZE ; BITS27-35:==INCORE IMAGE SIZE ; FOR HIGH SEG, LH ALWAYS DISK ADDRESS @@ -427,27 +424,28 @@ JBTSWP: BLOCK JOBN+SEGN ;LH:==PROTECT TIME WHILE JOB IS IN CORE. ; SAME AREA FOR HIGH SEG > -JBTNAM: ;NAME OF HIGH SEGMENT (FILE IT WAS INITIALIZED FROM) +JBTNAM: ;NAME OF HIGH SEGMENT(FILE IT WAS INITIALIZED FROM) JBTPRG: BLOCK JOBN+SEGN ;NAME OF FILE USED IN LAST R,RUN,GET, ETC ; USED BY SYSTAT PROGRAM - IFN FTKCT, < + IFN FTKCT,< INTERN JBTKCT -JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH (IN K) TIMES NUMBER OF JIFFIES +JBTKCT: BLOCK JOBN ;PRODUCT OF CORE LENGTH(IN K) TIMES NO. OF JIFFIES ; PROGRAM USED CPU. USED FOR TIME ACCOUNTING. > - IFN FTPRV, < + IFN FTPRV,< INTERN JBTPRV -JBTPRV: BLOCK JOBN ;PRIVILEGE BITS FOR JOB SET BY LOGIN +JBTPRV: BLOCK JOBN ;PRIVELEGE BITS FOR JOB SET BY LOGIN > - IFG DSKN, < + IFG DSKN,< INTERN MQUEUE,MQTOP -MQUEUE: BLOCK JOBN ;DISK MONITOR I/O QUEUE + +MQUEUE: BLOCK JOBN ;DISK MONITOR IO QUEUE MQTOP=. ;LAST LOC+1 OF MONITOR QUEUE > - IFG SYS50N, < + IFG SYS50N,< ;THE FOLLOWING ARE USED TO CREATE MXQUE -;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER (SCHED) - FTDISK=-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS +;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER(SCHED) + FTDISK==-DSKN ;DEFINE FEATURE SWITCH FTDISK,SINCE IT APPEARS ; IN MACRO QUEUES ; WHICH IS DEFINED IN S.MAC XP MXQUE,0 @@ -459,7 +457,7 @@ MQUEUE: BLOCK JOBN ;DISK MONITOR I/O QUEUE DEFINE X (A) CODES MXQUE==MXQUE+3 @@ -467,10 +465,10 @@ DEFINE X (A) XALL ;BACK TO NORMAL MACRO EXPANSION INTERN JBTQ,JBTQM1,JBTQP1,JBTQMN - BLOCK MXQUE ;NUMBER OF QUEUES FOR SWAPPING SCHEDULER + BLOCK MXQUE ;NO. OF QUEUES FOR SWAPPING SCHEDULER JBTQ: BLOCK JOBN ;ONE ENTRY PER JOB, ; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE - ; NEGATIVE MEANS THIS IS FIRST (LH) OR LAST (RH) + ; NEGATIVE MENAS THIS IS FIRST (LH) OR LAST (RH) ; JOB IN QUEUE JBTQM1==JBTQ-1 ;JBTQ-1 JBTQP1==JBTQ+1 ;JBTQ+1 @@ -480,25 +478,25 @@ JBTQ: BLOCK JOBN ;ONE ENTRY PER JOB, ;INDEXED BY TTY LINE NUMBER, CONTAINS TTY DDB ADDRESS IN RH ;(ASSIGNED WHEN FIRST CHARACTER TYPED ON TTY BY SCNSER ;BIT 0==1 IF COMMAND TYPED BUT NOT PROCESSED - ;BITS 6-11==JOB NUMBER TTYP IS ATTACHED TO + ;BITS 6-11==JOB NUMBER TTY IS ATTACHED TO ;BITS 12-17==NEXT LINE NUMBER IN TALK RING OR ITS SELF IF NOT TALKING INTERN TTYTAB,PTYTAB,TPYTAB,TCONLN,MLTTYL,MTTYLN,TTPLEN,TTMODL,TTPMXL -TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY +TTYTAB: BLOCK HGHLIN+1+1 ;NO OF TTYS PLUS CTY TPYTAB==.-1 ;ADDRESS OF LAST ENTRY TCONLN==.-1-TTYTAB ;LINE NUMBER OF CTY BLOCK PTYN ;PSEUDO TTY TRANSLATOR TABLE - ; THIS IS FOR LINKED TTY LINES, + ; THIS IS FOR THE LINKED TTY LINES, ; NOT THE DEVICE "PTYN"'S DDB TTPLEN==.-TTYTAB ;LENGTH OF ENTIRE TABLE - TTPMXL=B26 ;HIGHET ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO) + TTPMXL==B26 ;HIGHEST ENTRY IN TTYTAB SHIFTED LEFT 9(FOR GETTAB UUO) - MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 ETRA + MLTTYL==-JOBN ;NEG, NO OF TTY DDBS (ONE FOR EACH JOB, PLUS 1 EXTRA ; SO JOB CAPACITY EXCEEDED MESSAGE CAN BE TYPED MTTYLN==-TTPLEN ;NEG, LENGTH OF ENTIRE TRANSLATOR TABLE -PTYTAB: BLOCK PTYN+1 ;ADDRESS OF THE DDBS FOR DEVICE PTYN +PTYTAB: BLOCK PTYN+1 ;ADDRESSES OF THE DDBS FOR DEVICE PTYN ; NOT THE LINKED TTY LINES. SEE TPYTAB. ;LAST LOCATION CLEARED BY SYSINI ON 143 RESTART SYSEND==.-1 @@ -527,33 +525,33 @@ CNTDB: SETZM DESONC ;PREVENT DESTRUCTION OF ONCE ONLY CODE HRRM TAC, LINKED ;STORE EXIT FROM THIS ROUTINE (ONCE ONLY CODE WILL ; BE OVERLAYED BY MULTIPLE DEVICE DATA ; BLOCK GENERATION) - MOVSI TAC,INTNUM ;NEG NUMBER OF ENTRIES IN TABLE + MOVSI TAC,INTNUM ;NEG NO. OF ENTRIES IN TABLE MOVEI DEVDAT,DEVLST-DEVSER ;MAKE DEVLST LOOK LIKE DEVSER IN A DOB LOOP: MOVE TAC1,INTTB1(TAC) ;GET NEXT DEVICE DATA BLOCK ADDRESS JUMPE TAC1,NEXT ;0 MEANS NO DOB FOR DEVICE - SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ? + SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE? HRLM TAC1,DEVSER(DEVDAT) ;YES, STORE IN PREVIOUS DEVICE DATA BLOCK HRRZ DEVDAT,TAC1 ;MAKE DEVDAT POINT TO CURRENT DOB - LDB UUO,DDBNUM ;GET NUMBER OF DDB'S - SOJLE UUO,NEXT ;ONE OR LESS ? + LDB UUO,DDBNUM ;GET NO. OF DDB'S + SOJLE UUO,NEXT ;ONE OR LESS? HRRZ JBUF,DEVDAT ;NO, CREATE MULTIPLE COPIES OF DOB ; SAVE ORIGINAL IN JBUF MOVEI AC3,1 ;STARTING WITH DEV1,DEV2,DEV77 LDB AC1,PUNIT ;START UNIT NUMBER FROM ; ASSEMBLE DEVICE DATA BLOCK - ; PTY STARTS UNIT NUMBER AT 1 INSTEAD OF 0 + ; PTY STARTS UNIT NO. AT 1 INSTEAD OF 0 ; ALTHOUGH DEVICE NAMES ARE PTY0,PTY1,ETC. MULDDB: HRRZ TAC1,SYSSIZ ;ADR. OF NEXT DDB IS AT END OF MONITOR - SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE ? - HRLM TAC1,DEVSER(DEVDAT) ;YES, MAKE PREVIOUS DDB POINT TO THE ONE ABOUT TO BE CREATED + SKIPE DESONC ;OK TO DESTROY ONCE ONLY CODE? + HRLM TAC1,DEVSER(DEVDAT) ;YES,MAKE PREVIOUS DDB POINT TO ONE ABOUT TO BE CREATED HRL DEVDAT,JBUF ;SOURCE ADDRESS TO LH HRR DEVDAT,TAC1 ;DESTINATION ADDRESS TO RH HLRZ AC2,INTTB1(TAC) ;LENGTH OF DEVICE DATA BLOCK ADDB AC2,SYSSIZ ;LAST LOCATION+1 AFTER MOVE - SKIPN DESONC ;OK TO DESTROY ONCE ? + SKIPN DESONC ;OK TO DESTROY ONCE? JRST JUSTCT ;NO, JUST COUNT DDB SPACE BLT DEVDAT,-1(AC2) ;MOVE ORIGINAL TO FREE STORAGE - SKIPL INTTAB(TAC) ;IS THIS DECTAPE (ANY OF 3 SERVICES)? + SKIPL INTTAB(TAC) ;IS THIS DECTAPE(ANY OF 3 SERVICES)? JRST NOTDTA ;NO HRRZ AC2,DEVDAT ;YES,DESTINATION SUBI AC2,(JBUF) ;-SOURCE=DISTANCE MOVED @@ -561,9 +559,8 @@ LOOP: MOVE TAC1,INTTB1(TAC) ;GET NEXT DEVICE DATA BLOCK ADDRESS ; (SORRY ABOUT NO SYMBOL) NOTDTA: MOVE PROG,PHYNAM ;BYTE POINTER TO NEWLY CREATED ; DDB PHYSICAL NAME - - MOVE ITEM,AC3 ;MAKE COPY OF UNIT NUMBER - TRNN ITEM,70 ;IS IT 10 OR MORE ? + MOVE ITEM,AC3 ;MAKE COPY OF UNIT NO. + TRNN ITEM,70 ;IS IT 10 OR MORE? JRST SMALL ;NO ROT ITEM,-3 ;YES, CONVERT HIGH ORDER OCTAL DIGIT TO ADDI ITEM,20 ;SIXBIT @@ -579,11 +576,11 @@ JUSTCT: CAIGE AC3,(UUO) ;COMPARE WITH HIGHEST DEVICE NUMBER NEXT: AOBJN TAC,.+1 ;MOVE BY TWOS AOBJN TAC,LOOP ;ANY MORE DEVICES MOVEI TAC,0 ;NO, FLAG END OF DEVICE DATA BLOCK CHAIN WITH 0 LINK - SKIPE DESONC ;OK TO DESTROY ONCE ? + SKIPE DESONC ;OK TO DESTROY ONCE? HRLM TAC,DEVSER(DEVDAT) ;YES, STORE 0 IN CASE LAST DDB IS MULTIPLE -IFG DSKN, < - EXTERNAL LOCORE,CRINIT - MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR (SYSMAK, EXEC DDT OR NOT) +IFG DSKN,< + EXTERN LOCORE,CRINIT + MOVE TAC,SYSSIZ ;SIZE OF MONITOR SO FAR(SYSMAK,EXEC DDT OR NOT) MOVEM TAC,LOCORE ;SAVE POINTER TO FIRST 4 WORD BLOCK ADDI TAC,MINCOR ;MINIMUM REQUIRED FOR DISK DDBS IORI TAC,1777 ;FORCE TO 1K BOUNDARY @@ -603,71 +600,74 @@ DESONC: 0 ;FLAG =0 IF CALLED BY JSP TAC,CNTDB DDBNUM: POINT 8,INTTAB(TAC),8 ;POINTER TO DDB NUMBER PHYNAM: POINT 6,DEVNAM(DEVDAT),17 ;BYTE POINTER TO DB PHYSICAL NAME - ;MACROS TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINING -;INFORMATION FOR ONCE + ;MACRO TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINNING +;INFORMATION FOR ONCE ;SO IT CAN LINK THE DEVICE INTERRUPT SERVICE ROUTINES AND THE DEVICE DATA BLOCKS ;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE -;WHICH HAS A DEVICE DATA BLOCK(0-7) -;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS, BITS 9-17==PI CHANNEL(0-7) +;WHICH HAS A DEVICE DATA BLOC(0-7) +;FIRST WORD: BIT 0==1 IF DECTAPE,BITS 1-9==NO. OF DDBS,BITS 9-17==PI CHANNEL(0-7) ;0 MEANS NO PI CHANNEL (EG PTY) -;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE, RH==DDB ADDRESS +;SECOND WORD:LH==0 IF SINGLE DEVICE,==LENGTH OF DDB IF MULTIPLE,RH==DDB ADDRESS ;MACRO FOR DEVICES WHICH ARE ALWAYS PRESENT(AND WHICH DO NOT USE A CHANNEL SAVE ROUTINE ;AND HAVE NO DDB (EX-APR,CTY,PEN,CLK) -DEFINE SPASGINT (DEV,PI) < + +DEFINE SPASGINT (DEV,PI) < DEV'N==1 ASGINT DEV,PI > -DEFINE ASGINT (DEV,PI) < - IFG DEV'N, , <.CHAS==1 ;CHANNEL PI IN USE.> - INTERNAL DEV'CHN +DEFINE ASGINT (DEV,PI)< + IFG DEV'N,,<.CHAS==1 ;CHANNEL PI IN USE> + INTERN DEV'CHN DEV'CHN==PI - EXTERNAL DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION + EXTERN DEV'INT ;INTERRUPT SERVICE CONSO INSTRUCTION XWD PI,DEV'INT ;GENERATE INTERRUPT ENTRY POINT FOR ONCE XWD 0,0 ;NO DDB TO CHAIN TOGETHER - ASGIN1 DEV,\PI + ASGIN1 (DEV,\PI) > >> -DEFINE ASGIN1 (DEV,PI) < - IFDEF CH'PI, < ;WAIT TILL PASS 2 TO DEFINE +DEFINE ASGIN1 (DEV,PI)< + IFDEF CH'PI,< ;WAIT TILL PASS 2 TO DEFINE DEV'CHL==CH'PI - INTERNAL DEV'CHL + INTERN DEV'CHL >> +;MACRO FOR OPTIONAL DEVICES (ALWAYS USE CHANNEL SAVE ROUTINE) + ; (EXAMPLE: CR, DSK, PTR, ETC. ALSO PTY WITH 0 PI) -;MACRO FOR OPTIONAL DEVICES WHICH ALWAYS USE A CHANNEL SAVE ROUTINE -; (EXAMPLES: CDR, DSK, PTR, ETC. ALSO PTY WITH 0 PI) - -DEFINE SPASGSAV (DEV,PI,NUM) < +DEFINE SPASGSAV (DEV,PI,NUM) < DEV'N==NUM ASGSAV DEV,PI > + DEFINE ASGSAV (DEV,PI) < IFG DEV'N, EXTERN DEV'DDB ASGSV1 (DEV,\PI) >> + ;MACRO FOR: 1. COMPLETION OF THE DEFINITION REQUIRED FOR THOSE ; DEVICES INVOKING THE ASGSAV MACRO ; ; 2. COMPLETE DEFINITION FOR THOSE DEVICES WITH THEIR -; INTERRUPT ENTRY POINT AND DDB'S HERE IN COMMON +; INTERRUPT ENTRY POINT AND DDB'S IN COMMON ; (EXAMPLE: LPT'S) DEFINE ASGSV1 (DEV,PI) < IFG PI, < - IFE , <.CHAS==1 ;CHANNEL PI IN USE.> + IFE ,<.CHAS==1 ;CHANNEL PI IN USE> DEV'CHN==PI ;DEFINE DEVICE CHANNEL NUMBER INTERN DEV'CHN ;DECLARE INTERNAL - ONLY IF DEVICE WANTED USED'PI==1 ;SET FLAG SO THAT A CHANNEL SAVE ; ROUTINE WILL BE GENERATED FOR ; THIS PI CHANNEL + IFDEF SAV'PI, < ;WAIT TILL CHANNEL SAVE ROUTINES ; ARE DEFINED BELOW (IN PASS 2) @@ -676,34 +676,36 @@ DEFINE ASGSV1 (DEV,PI) < ; (USUALLY POPJ USED) DEV'CHL==CH'PI ;LOCATION WHERE INTERRUPT PC IS STORED DEV'SAC==SAVAC'PI ;STARTING CHANNEL SAVE LOCATION FOR AC'S + INTERN DEV'SAV, DEV'RET, DEV'CHL, DEV'SAC >> DTBIT==0 ;ASSUME THIS IS NOT A DECTAPE - IFIDN , , ;IS IT PDP-10 DECTAPES ? - IFIDN , , ; OR PDP-6 DECTAPES ? + IFIDN ,, ;IS IT PDP-10 DECTAPES? + IFIDN ,, ; OF PDP-6 DECTAPES? IFE PI, < XWD DEV'N*1000+0,0 ;NO PI CHANNEL FOR THIS DEVICE > IFG PI, < - XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD OF INTTAB ENTRY + XWD DTBIT*400000+DEV'N*1000+PI,DEV'INT ;FIRST WORD > IFG DEV'N-1, < - XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD OF INTTAB ENTRY + XWD DEV'DDS,DEV'DDB ;MULTIPLE DEVICE SECOND WORD EXTERN DEV'DDS > + IFE DEV'N-1, < - XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD OF INTTAB ENTRY + XWD 0,DEV'DDB ;SINGLE DEVICE SECOND WORD >> - -;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE -; DEVICES SUCH AS LINE-PRINTERS + ;MACRO'S TO ALLOW GENERATION OF MULTIPLE INTTAB ENTRIES FOR MULTIPLE +; DEVICES SUCH AS LINE PRINTERS DEFINE MULASG (DEV,DE,PI) < + IFG DEV'N, < ZZ==0 REPEAT DEV'N, < @@ -714,26 +716,20 @@ DEFINE MULASG (DEV,DE,PI) < > DEFINE DEVASG (DE,X,PI) < + DE'X'N==1 ASGSV1 DE'X,\PI > - ;MACROS TO CONTROL ASSIGNMENT OF PI CHANNELS TO DEVICES -DEFINE NEXTCH < .CH==.CH+1 +DEFINE NEXTCH< .CH==.CH+1 .CHAS==0 -NEXTCU \.CH +NEXTCU (\.CH) > -DEFINE NEXTCQ < IFN .CHAS,> -DEFINE NEXTCU (N) < IFDEF UNIQ'N,>> - - - - - - -;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED +DEFINE NEXTCQ< IFN .CHAS,> +DEFINE NEXTCU (N) >> + ;ASSUME NO PI CHANNEL SAVE ROUTINES NEEDED USED1==0 USED2==0 @@ -746,17 +742,15 @@ DEFINE NEXTCU (N) < IFDEF UNIQ'N,>> ;NOW GENERATE THE TABLE FOR ONCE AND DEFINE PI CHANNEL ASSIGNMENTS INTERN INTTAB,INTTB1,INTNUM,SCNN,CTYN - CTYN==1 ;ALWAYS ONE CTY SCNN==JOBN ;NUMBER OF SCN DDB - ; ONE FOR EACH JOB + NULL JOB (EXTRA ONE) + ; ONE FOR EACH JOB + NULL JOB(EXTRA ONE) APRN==1 ;ALWAYS AN APR CLKN==1 ;ALWAYS LOWEST PRIORITY CLOCK -INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NUMBER OF DOB +INTTAB: ;TABLE OF DATA FOR DEFINING PI CHAN AND NO. OF DOB INTTB1==INTTAB+1 - ASGSAV PTY,0 .CHAS==0 @@ -769,30 +763,29 @@ NEXTCH ;NOTE THAT THE PDP-6 DECTAPE AND MAGTAPE SHARE A ; 136 DATA CONTROL IF BOTH ARE PRESENT. - ;DATA PRODUCTS DISK BLKI/BLKO PI CHANNEL: - IFNDEF DCBCHN, > ;PDP-6 OR PDP-10 MAGTAPE BLKI/BLKO PI CHANNEL: - IFNDEF MTDCHN, > - IFNDEF DCTCHN, > - ;PDP-6 OR PDP-10 DECTAPE BLKI/BLKO PI CHANNEL: - IFNDEF DTDCHN, > - IFNDEF DCTCHN, > -IFNDEF BLKMXC, ;REMEMBER THIS CHANNEL ON PASS 1 +IFNDEF BLKMXC, ;REMEMBER THIS CHANNEL ON PASS 1 .CH==BLKMXC ;ON PASS 2, SKIP OVER BLKI CHANNELS - ;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES +;THE FOLLOWING ARE GROUPED ON A CHANNEL FOR HIGH-PRIORITY DEVICES ASGSAV CDR,.CH ASGINT APR,.CH NEXTCQ - -;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP + ;THE FOLLOWING ARE MEDIUM-PRIORITY DEVICES, AS A GROUP ASGSAV SCN,.CH ASGSAV PTR,.CH MULASG LPT,LP,.CH @@ -803,107 +796,101 @@ NEXTCQ ASGINT CTY,.CH NEXTCQ - -;THE FOLLOWING ARE LOWER-PRIORITY DEVICES, AS A GROUP + +;THE FOLLOWING ARE LOWER-PRIORITY DEVICES,AS A GROUP ASGSAV DSK,.CH ASGSAV PEN,.CH ASGSAV PTP,.CH ASGSAV CDP,.CH ASGSAV PLT,.CH -NEXTCQ +NEXTCQ -;THESE DEVICES GET LOW PRIORITY CHANNEL +;THE DISPLAY GETS ITS OWN LOW-PRIORITY CHANNEL ASGSAV DIS,.CH NEXTCQ - + ;LAST IS THE SCHEDULER, ON CHANNEL 7 BY ITSELF -IFG <.CH-7>, < PRINTX ;NOT ENOUGH PI'S TO SERVICE THIS CONFIGURATION. +IFG <.CH-7>, + PRINTX ; A SINGLE CHANNEL> .CH==7 ASGINT CLK,.CH - - SPCINT - ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING + SPCINT + ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLING ; WHICH DO NOT USE A CHANNEL SAVE ROUTINE AND HAVE - ; NO DEVICE DATA BLOCK + ; NO DEVIC EDATA BLOCK SPCSAV - ;GENERATE ANY SPECIAL DEVICES CUSTOMER IS SUPPLYING + ;GENERATE ANY SPECIAL DEVICES CUSTOME IS SUPPLYING ; WHICH DO NEED A CHANNEL SAVE ROUTINE + ; AND HAVE MULTIPLE DEVICE DATA BLOCKS(0 MEANS NONE) ;END OF THE ASSIGNMENT TABLE INTNUM==INTTAB-. ;-LENGTH OF INTERRUPT CHANNEL ASSIGNMENT TABLE - IFLE .-SYSEND, + IFLE .-SYSEND, ; SET LOC UP TO SYSEND+1, UNLESS ONCE ONLY CODE ; IS BIGGER - - - -;SYSTEM CONSTANTS AND PARAMETERS + ;SYSTEM CONSTATNS AND PARAMETERS INTERN CNFTBL,CNFMXL,CONFIG,SYSTAP,SYSDAT -CNFTBL: ;FIRST LOCATION OF MONITOR DATA STORAGE - ; RETURNED BE GETTAB UUO (THESE LOCATIONS +CNFTBL: ;FIRST LOCATION 0F MONITOR DATA STORAGE + ; RETURNED BE GETTAB UUO(THESE LOCATIONS ; NOT CLEARED BY SYSINI) - ; CNFTBL IS GETTAB TABLE 11 (RH OF AC) - ; OCTAL NO. IN () CORRESPOND TO GETTAB UUO -CONFIG: SYSNAM - - LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS (24 CHARS) + ; CNFTBL IS GETTAB TABLE 11(RH OF AC) + ; OCTAL NOS. IN () CORRESPOND TO GETTAB UUO +CONFIG: SYSNAM ;(0-4)NAME OF SYSTEM, IN ASCII + LOC CONFIG+5 ;ALWAYS LEAVE 5 WORDS(24 CHARS) ; SO GETTAB UUO WILL BE CONSTANT -SYSDAT: SYSDAT - ;(5,6) GENERATE SYSTEM DATE +SYSDAT: SYSDAT ;(5,6)GENERATE SYSTEM DATE LOC SYSDAT+2 ;ALWAYS LEAVE 2 WORDS SO GETTAB CONSTANT -SYSTAP: SYSDEV - ;(7) NAME OF SYSTEM DEVICE, IN SIXBIT +SYSTAP: SYSDEV ;(7)NAME OF SYSTEM DEVICE, IN SIXBIT -;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS + ;LOCATIONS SETUP BY ONCE ONLY OPERATOR DIALOGUE AND NEVER RESET ON RESTARTS INTERN TIME,THSDAT,SYSSIZ,DEVOPR,DEVLST,SEGPTR,TWOREG,STATES INTERN SERIAL EXTERN PATCH -TIME: 0 ;(10) TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC) -THSDAT: 0 ;(11) TODAY'S DATE ((Y-1964)*12+(M-1))*31+(D-1) -SYSSIZ: EXP PATCH ;(12) SIZE OF MONITOR (FIRST LOC NOT USED) -DEVOPR: SIXBIT /CTY/ ;(13) SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE +TIME: 0 ;(10)TIME OF DAY IN JIFFIES (60TH OR 50THS OF A SEC.) +THSDAT: 0 ;(11)TODAY'S DATE((Y-1964)*12+(M-1))*31+(D-1) +SYSSIZ: EXP PATCH ;(12)SIZE OF MONITOR(FIRST LOC NOT USED) +DEVOPR: SIXBIT /CTY/ ;(13)SIXBIT PHYSICAL NAME OF OPERATORS CONSOLE ; (IF THIS LOCATION CONTAINS 0, NONE HAS ; BEEN DESIGNATED) - ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE. - ; ALSO UNEXPLAINED MONITOR ERROR MESSAGES - ; WILL BE TYPED ON TTY OPR -DEVLST: XWD 0,0 ;(14) LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK - ; ONCE ONLY CODE LINKS DEVICE DATA BLOCKS - SEGPTR: XWD -SEGN,JOBN ;(15) AOBJN POINTER TO 1ST HIGH SEG IN JBTXXX TABLES - ; LH=-NO. OF HIGH SEGS, RH= ST HIGH SEG NO. -TWOREG: 0 ;(16) FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE + ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE + ;ALSO UNEXPLAINED MONITOR ERROR MESSAGE WILL BE TYPED + ;ON TTY OPR +DEVLST: XWD 0,0 ;(14)LH CONTAINS ADDRESS OF FIRST DEVICE DATA BLOCK + ;ONCE ONLY CODE LINKS DEVICE DATA BLOCKS + SEGPTR: XWD -SEGN,JOBN ;(15)AOBJN POINTER TO FIRST HIGH SEG IN JBTXXX TABLES + ; LH=-NO. OF HIGH SEGS, RH=FIRST HIGH SEG NO. +TWOREG: 0 ;(16)FLAG TO INDICATE WHETHER BOTH HARDWARE AND SOFTWARE ; HAVE 2 RELOC REG CAPACITY ; NON-ZERO IF BOTH DO, 0 IF EITHER OR BOTH DO NOT ; SET BY ONCE ONLY CODE - ZZ==0 - IFG DSKN, ;1 IF DISK SYSTEM (ANALOGOUS TO FTDISK) - IFG SYS50N, ;1 IF SWAPPING SYSTEM (ANALOGOUS TO FTSWAP) - IFG LOGINN, ;1 IF LOGIN (ANALOGOUS TO FTLOGIN) + IFG DSKN, ;1 IF DISK SYSTEM(ANALOGOUS TO FTDISK) + IFG SYS50N, ;1 IF SWAPPING SYSTEM(ANALOGOUS TO FTSWAP) + IFG LOGINN, ;1 IF LOGIN(ANALOGOUS TO FTLOGIN) IFN FTTTYSER, ;1 IF FULL DUPLEX SOFTWARE IFN FTPRV, ;1 IF PRIVILEGE FEATURE INCLUDED IFN FT2REL, ;1 IF REENTRANT SOFTWARE - IFE JIFSEC-^D50, ;1 IF 50 CYCLE MACHINE, 0 IF 60 CYCLE -STATES: EXP ZZ ;(17) BITS WHICH DEFINE TYPE OF SYSTEM IN LH + IFE JIFSEC-^D50, ;1 IF 50 CYCLE MACHINE, 0 OF 60 CYCLE +STATES: EXP ZZ ;(17)BITS WHICH DEFINE TYPE OF SYSTEM IN LH ; RH PATCHED BY MONITOR COMMAND TO ; INDICATE OPERATIONAL STATE OF SYSTEM + ;INSERT NEW LOCATIONS OF INTEREST SETUP + ; BY ONCE ONLY CODE HERE SERIAL: EXP APRSN ;(20) SERIAL NUMBER OF APR -CNFMXL==<.-CNFTBL-1>B26 ;MAXIMUM ENTRY IN CNFTBL FOR GETTAB UUO - IFG DSKN, < +CNFMXL==<.-CNFTBL-1>B26 ;MAX. ENTRY IN CNFTBL FOR GETTAB UUO + IFG DSKN,< INTERN ODPTBL,ODPMXL,SWPHGH,K4SWAP,PROT,PROT0 IFG SYS50N,< EXTERN ICPROT,ICPRT1 ;THESE ARE DEFINED ONLY IN @@ -912,24 +899,24 @@ IFLE SYS50N,< XP ICPROT,0 ;IF NON-SWAPPING, DECLARE XP ICPRT1,0 ; INTERNAL IN COMMON> ODPTBL: ;FIRST LOC IN MONITOR DATA AREA FOR DISK - ; LOCATIONS WHICH ARE NOT SET TO 0 WHEN SYSTEM - ; STARTED, ODPTBL IS GETTAB UUO TABLE 15 + ; LOCATION WHICH ARE NOT SET TO 0 WHEN SYSTEM + ; STARTED. ODPTBL IS GETTAB UUO TABLE 15 SWPHGH: 0 ;(0) HIGHEST LOGICAL BLOCK # IN THE SWAPPING ; SPACE ON THE DISK (SET BY SWPINI) K4SWAP: 0 ;(1)K OF DISK WORDS SET ASIDE FOR SWAPPING ; ASSIGNED AT ONCE ONLY REFRESH TIME +PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER USED TO + ; MULTIPLY TIMES (K-1) OF CORE +PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER ADDED TO + ; ABOVE REULT TO COMPLETE COMPUTATION + -PROT: EXP ICPROT ;(2) IN-CORE PROTECT TIME PARAMETER TO BE - ; MULTIPLIED BY (K-1) OF CORE IN JOB. -PROT0: EXP ICPRT1 ;(3) IN-CORE PROTECT TIME PARAMETER TO - ; BE ADDED TO ABOVE RESULT. ;INSERT NEW LOCATIONS OF INTEREST SETUP ; BY ONCE ONLY CODE HERE FOR DISK SYSTEMS -ODPMXL==<.-ODPTBL-1>B26 ;MAXIMUM ENTRY IN ODPTBL FOR GETTAB UUO -> - +ODPMXL==<.-ODPTBL-1>B26 ;MAX. ENTRY IN ODPTBL FOR GETTAB UUO +> ;MORE DATA LOCATIONS SETUP AT ASSEMBLY TIME OR ONCE ONLY TIME ; BUT NOT OF INTEREST TO USER PROGRAMS @@ -937,23 +924,23 @@ ODPMXL==<.-ODPTBL-1>B26 ;MAXIMUM ENTRY IN ODPTBL FOR GETTAB UUO XJBPFI: XWD .,0 ;LH FILLED IN WITH EXTERNAL JOBPFI (SEE JOBDAT) ; JOBPFI==HIGHEST LOC, IN USER JOB DATA AREA - ; PROTECTED FROM I/O + ; PROTECTED FROM IO ;MONTH TABLE FOR DAYTIME COMMAND PRINTING PMONTB: POINT 6,MONTAB(TAC),5 ;POINTER TO NUMBER OF DAYS INMONTH -MONTAB: EXP ^D30B5+"JAN" - EXP ^D27B5+"FEB" - EXP ^D30B5+"MAR" - EXP ^D29B5+"APR" - EXP ^D30B5+"MAY" - EXP ^D29B5+"JUN" - EXP ^D30B5+"JUL" - EXP ^D30B5+"AUG" - EXP ^D29B5+"SEP" - EXP ^D30B5+"OCT" - EXP ^D29B5+"NOV" - EXP ^D30B5+"DEC" -MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT +MONTAB: EXP ^D30B5+"JAN + EXP ^D27B5+"FEB + EXP ^D30B5+"MAR + EXP ^D29B5+"APR + EXP ^D30B5+"MAY + EXP ^D29B5+"JUN + EXP ^D30B5+"JUL + EXP ^D30B5+"AUG + EXP ^D29B5+"SEP + EXP ^D30B5+"OCT + EXP ^D29B5+"NOV + EXP ^D30B5+"DEC +MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT ;STOP PROCEDURE WHEN SHUTTING DOWN SYSTEM ;BECAUSE OF CATOSTROPHIC FAILURE OR ANY OTHER REASON ;WRITE OUT DIRECTORIES STILL IN CORE (DISK) @@ -962,11 +949,11 @@ MIDNIT: EXP ^D60*^D60*^D24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT ;PROCEDURE TO SAVE CRASHED MONITOR ON DECTAPE FOR LATER DEBUGGING UNDER TIME SHARING ;OPERATOR SHOULD: ; 1. PUSH STOP AND HOLD IT DOWN -; 2. PUSH CONTINUE (APR PI IN PROGRESS SHOULD COME ON) +; 2. PUSH CONTINUE(APR PI IN PROGRESS SHOULD COME ON) ; THIS PUTS MACHINE INTO EXEC MODE AND STORES PC OC CRASH ; 3. LETUP ON STOP ; 4. SET ADDRESS SWITCHES TO 147 -; 5. PUSH START (DO NOT PUSH I/O RESET AS IT WILL CLEAR DEVICES) +; 5. PUSH START(DO NOT PUSH IO RESET AS IT WILL CLEAR DEVICES) INTERN APRSTS,PISTS,SYSTOP,CRASHX,SWTSTS,TTYSTS,PTRSTS,TMCSTS INTERN PTPSTS,DLSSTS,DTSSTS,CRSTS,LPTSTS,PLTSTS,TMSSTS,DSKSTS,DSKDTI @@ -987,6 +974,7 @@ SYSTOP: MOVEM 17,CRSHAC+17 ;SAVE ALL ACS MOVEI 17,CRSHAC ;SOURCE==0, DESTINATION==CRSHAC BLT 17,CRSHAC+16 ;SO DDT CAN LOOK AT SAVED CRASH LATER + APRSTS: CONI APR,. ;STORE APR STATUS HERE PISTS: CONI PI,. ;STORE PI STATUS HERE SWTSTS: DATAI APR,. @@ -1004,18 +992,16 @@ DSKSTS: CONI DSK,. DSKDTI: DATAI DSK,. CONO APR,APRRST ;RESET SYSTEM MOVEI PDP,SYSPDL ;SETUP PDP TO SPARE AREA - IFG DSKN, < + IFG DSKN,< EXTERN DSKSTP PUSHJ PDP,DSKSTP> - HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING) + HALT 137400 ;STOP AT TENDMP(READY TO READ IN ANYTHING) + ;ERROR RECOVERY - TRY TO START NULL JOB NULJB1: MOVEI ITEM,0 ;SET JOB NUMBER TO 0 JRST NULJOB ;GO RESTORE NULL JOB - - - -;COMMON SUBROUTINE RETURNS + ;COMMON SUBROUTINE RETURNS INTERN CPOPJ,CPOPJ1,DPOPJ,TPOPJ,TPOPJ1,CPOPJ2,IPOPJ1,IPOPJ INTERN CUXIT1,CUXIT,UXIT @@ -1023,7 +1009,7 @@ NULJB1: MOVEI ITEM,0 ;SET JOB NUMBER TO 0 CPOPJ2: AOS (PDP) ;DOUBLE SKIP SUBROUTINE RETURN CUXIT1: ;OLD SKIP RETURN FOR UUOS CPOPJ1: AOSA (PDP) ;SKIP SUBROUTINE RETURN -DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT I/O STATUS WORD IN DDB +DPOPJ: MOVEM IOS,DEVIOS(DEVDAT) ;DEPOSIT IO STATUS WORD IN DDB UXIT: CUXIT: ;OLD RETURN FOR UUOS CPOPJ: POPJ PDP, @@ -1035,7 +1021,7 @@ IPOPJ1: AOS -1(PDP) ;SET FOR SKIP RETURN IPOPJ: POP PDP,ITEM ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER) POPJ PDP, - ; SYSTEM BYTE POINTERS +; SYSTEM BYTE POINTERS INTERN PUUOAC,PIOMOD,PJOBN,PUNIT,PJBSTS,PDVTIM,PDVCNT,PCORSZ,COREP INTERN IADPTR @@ -1043,23 +1029,23 @@ IPOPJ: POP PDP,ITEM ;RESTORE ITEM (USUALLY JOB OR HIGH SEG NUMBER) PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD PIOMOD: POINT 4,IOS,35 ;MODE BITS PJOBN: POINT 6,DEVCHR(DEVDAT),5 ;DEVICE JOB ASSIGNMENT -PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NUMBER -PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE (QUEUE) CODE +PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. +PJBSTS: POINT JWSIZ,JBTSTS(ITEM),JWPOS ;JOB WAIT STATE(QUEUE) CODE ;IN JOB STATUS WORD PDVTIM: POINT 6,DEVCHR(DEVDAT),17 ;TIME IN SECONDS BEFORE DEVICE - ;IS SAID TO BE HUNG -PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTED DOWN EACH SECOND, + ;IS SAID TO BE HUNG +PDVCNT: POINT 6,DEVCHR(DEVDAT),11 ;COUNTER DOWN EACH SECOND, ;1 TO 0 TRANSITION MEANS HUNG DEVICE -IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NUMBER OF USER CHANNELS INITED - ; ON THIS DEVICE (DECTAPE ONLY) +IADPTR: POINT 2,DEVIAD(DEVDAT),2 ;COUNT OF NO. OF USER CHANNELS INITED + ; ON THIS DEVICE(DECTAPE ONLY) PCORSZ: POINT 8,JBTADR(ITEM),7 ;BYTE POINTER TO LOW OR HIGH SEG CORE SIZE-1 COREP: POINT 1,CORTAB ;1 BIT POINTER TO CORE ALLOCATION TABLE - IFG SYS50N, < ;SWAPPING SYSTEM ? + IFG SYS50N,< ;SWAPPING SYSTEM? INTERN IMGIN,IMGOUT,IMGINT,OUTMSK,INMSK,INLEFT INMSK=000377 ;RH MASK TO IMGIN - INLEFT=12 ;NUMBER OF BITS TO SHIFT TO LEFT JUSTIFY IN RH + INLEFT=12 ;NO. OF BITS TO SHIFT TO LEFT JUSTIFY IN RH IMGIN: POINT 8,JBTSWP(ITEM),35 ;BYTE POINTER FOR # 1K BLOCKS OF CORE ;WHEN JOB OR HIGH SEG NEXT SWAPPED IN @@ -1071,16 +1057,15 @@ IMGOUT: POINT 8,JBTSWP(ITEM),26 ;BYTE POINTER FOR # 1K BLOCK OF DISK ; (IE NO DISK SPACE) IMGINT: POINT 8,JBTSWP(DEVDAT),35 ;POINTER TO INCORE IMAGE > - - ;SPECIAL PROJECT-PROGRAMMER NUMBERS - IFG DSKN, < ;DISK SYSTEM? + ;SPECIAL PROJECT-PROGRAMMER NOS. + IFG DSKN,< ;DISK SYSTEM? INTERN CUSPPP,SYSPP,DUMPPP,HELPPP CUSPPP: ;CUSP FILE DIRECTORY, MAKE SEPARATE TAG FROM ; MFD(SYSPP) SYSPP: XWD 1,1 ;THE MASTER FILE DIRECTORY PROJECT PROGRAMMER NO. -DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO (CAN READ OF WRITE ANYTHING) -HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED IN ALREADY +DUMPPP: XWD 1,2 ;THE FAILSAFE PROJ,PROG NO.(CAN READ OR WRITE ANYTHING) +HELPPP: XWD 2,4 ;SYSTAT AND HELP PROJECT,PROGRAMMER NOS IF JOB NOT LOGGED INALREADY > ;DEFINE PI CHANNEL SAVE AND RESTORE ROUTINES IF A DEVICE IS ON THE CHANNEL @@ -1119,19 +1104,16 @@ CH'PI'PD1: EXP RET'PI ;FIRST WORD ON LIST, LIST > - ;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM (ASGSAV MACRO USED) - - IFN USED1, - IFN USED2, - IFN USED3, - IFN USED4, - IFN USED5, - IFN USED6, - IFN USED7, + ;GENERATE THE CHANNEL SAVE ROUTINE ONLY FOR PI WHICH NEED THEM(ASGSAV MACRO USED) - - -;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNELS NOT USED + IFN USED1, + IFN USED2, + IFN USED3, + IFN USED4, + IFN USED5, + IFN USED6, + IFN USED7, +;GENERATE NULL CHANNEL SAVE ROUTINES FOR THOSE CHANNEL NOT USED DEFINE NULL (PI)< XLIST @@ -1141,31 +1123,31 @@ CH'PI: 0 LIST > - IFE USED1, - IFE USED2, - IFE USED3, - IFE USED4, - IFE USED5, - IFE USED6, - IFE USED7, - ;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS (PDP-10 ONLY) -;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED (JSR UUO2) -;OP CODE 100 (UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION + IFE USED1, + IFE USED2, + IFE USED3, + IFE USED4, + IFE USED5, + IFE USED6, + IFE USED7, + ;HERE ON TRAPS TO LOC 60/61 - UNIMPLEMENTED INSTRUCTIONS(PDP-10 ONLY) +;OPCODE AND EFFECTIVE ADDRESS STORED IN SIXTY AND 61 EXECUTED(JSR UUO2) +;OP CODE 100(UJEN) IS USED TO DISMISS USER MODE INTERRUPTS FOR REAL TIME OPERATION ;USED IN CONJUNCTION WITH TRPSET UUOWHICH IS SOON TO BE REPLACED ;WITH SOME KNAVE-PROOF REAL TIME UUOS. THIS CODE IS HERE ONLY ;BECAUSE MANUAL DESCRIBES TRPSET AND TRPJEN UUOS. -;TRPJEN HAS BEEN REPLACED WITH OPCODE 100 (UJEN). +;TRPJEN HAS BEEN REPLACED WITH OPCODE 100(UJEN). ;CALL: UGEN U ;WHERE U CONTAINS PC STORED BY INTERRUPT JSR INTERN UUO2 UUO2: 0 ;USER PC STORE HERE BY JSR EXCH TAC,UUO2 ;GET USER PC, SAVE TAC -IFN FTTRPSET, < - TLNN TAC,UIOMOD ;USER I/O MODE ON ? +IFN FTTRPSET,< + TLNN TAC,UIOMOD ;USER IO MODE ON? JRST UUOER2 ;NO, TREAT AS AN ILLEGAL INSTRUCTION AND PRINT MESS. HLL TAC,SIXTY ;YES, GET UNIMPLEMENTED OPCODE WHICH TRAPPED - TLNE TAC,677777 ;IS IT OPCODE 100 (UJEN)? + TLNE TAC,677777 ;IS IT OPCODE 100(UJEN)? JRST UUOER1 ;NO, TREAT AS ILLEGAL INSTRUCTION MOVE TAC,SIXTY ;YES, GET EFFECTIVE ADDRESS ADD TAC,JOBADR ;ADD RELOCATION FOR CURRENT JOB @@ -1173,13 +1155,13 @@ IFN FTTRPSET, < EXCH TAC,UUO2 ;RESTORE TAC, AND STORE PC JEN @UUO2 ;DISMISS INTERRUPT -UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER I/O MODE BACK ON +UUOER1: HRLI TAC,USRMOD!UIOMOD ;SET USER MODE AND USER IO MODE BACK ON > UUOER2: MOVEM TAC,UUO0 ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED SETOM FORTY ;MAKE IT LOOK LIKE AN ILLEGAL INSTRUCTION ; TRAPPED TO 40 SKIPA TAC,UUO2 ;RETORE TAC AND FALL INTO REGULAR UUO HANDLER - ;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77 (0-77 ON PDP-6) + ;HERE ON TRAPS TO EXEC LOC 40/41 - OPCODES 0,40-77(0-77 ON PDP-6) INTERN UUO0 EXTERN UUOUSR,UUOSY1,ERROR @@ -1187,69 +1169,64 @@ UUOER2: MOVEM TAC,UUO0 ;STORE PC AS IF AN ILLEGAL INSTR. HAD OCCURRED UUO0: 0 ;JSR HERE FROM LOC 41 MOVEM 17,USRSAV ;SAVE 17 MOVE 17,UUO0 ;GET PROCESSOR FLAGS - TLNN 17,USRMOD ;IS UUO FROM MONITOR ? + TLNN 17,USRMOD ;IS UUO FROM MONITOR? JRST UUOSY1 ;YES, DO NOT SAVE ACS - SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA ? + SKIPN 17,JOBADR ;IS THERE A JOB DATA AREA? JSP DAT,ERROR ;NO, MUST BE UUO DURING NULL JOB ; PRINT ERROR IN MONITOR -IFE PDP10N, < ;FOR PDP-6 OPCODES 1-37 +IFE PDP10N,< ;FOR PDP-6 OPCODES 1-37 EXCH TAC,FORTY ;SAVE TAC, PICK UP UUO - TLNN TAC,740000 ;IS THIS SYSTEM UUO ? - TLNN TAC,077000 ;NO, IS IT 0 UUO ? + TLNN TAC,740000 ;IS THIS SYSTEM UUO? + TLNN TAC,077000 ;NO, IS IT 0 UUO? JRST UUOSYS ;YES MOVEM TAC,40(17) ;STORE UUO IN USER'S 40 HRRZ TAC,41(17) ;PICK UP ADR OF USER'S JSR - JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO****UWA PATCH - HLL TAC,UUO0 ;USER PD FLAGS (RESTORED ON RETURN) + JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UUO + HLL TAC,UUO0 ;USER PD FLAGS(RESTORED ON RETURN) MOVEI 17,(TAC) ;17 NOW HAS REL.ADR+1 OF USER JSR - CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS ? + CAML 17,USRREL ;IS EFFECTIVE ADDRESS IN BOUNDS? JRST UUOSY0 ;ERROR, JSR EFF. ADDR. OUTSIDE USER AREA HRRI TAC,1(TAC) ;YES, INCREMENT PC. EXCH TAC,UUO0 ;SET UP RETURN TO USER IN UUO0 ; PICKUP USERS FLAGS,PC - ADD 17,JOBADR ;MAKE REL. ADDRESS INTO ABSOLUTE ADDRESS + ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR. MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR MOVE TAC,FORTY ;RESTORE TAC MOVE 17,USRSAV ;RESTORE 17 - JRST 2,@UUO0 ;RETURN TO USER (RESTORING FLAGS) + JRST 2,@UUO0 ;RETURN TO USER(RESTORING FLAGS) UUOSY0: MOVE 17,JOBADR ;SETUP 17 FOR LOW SEGMENT RELOCATION -UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO (FORTY) -> - JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOCATION 0-17 +UUOSYS: EXCH TAC,FORTY ;RESTORE USERS AC(TAC) AND USER'S UUO(FORTY) +> + JRST UUOUSR ;GO SAVE USER'S ACS IN REL. LOC. 0-17 ; AND DISPATCH ON UUO - ;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUTINES FROM MONITOR LIBRARY TAPE + ;GENERATE EXTERNAL GLOBALS TO CAUSE LOADING OF PROPER ROUT. FROM MONITOR LIBRARY TAPE ;IF THERE IS ONE ;ALWAYS LOAD CLOCK1,COMCON,CORE1,ERRCON,JOBDAT,ONCE,PATCH,SYSMAK,UUOCON - EXTERNAL CLOCK1,COMCON,CORE1,ERRCON,DATJOB,ONCE,PATCH,SYSMAK,UUOCON - ;LOAD DDT - IFG DDTN, - IFE DDTN, - -;LOAD SCHEDULER FOR NON-SWAPPING OR SWAPPING SYSTEM + IFG DDTN, + IFE DDTN, +;LOAD APPROPRIATE SCHEDULER FOR NON-SWAP OR SWAPPING SYSTEMS IFG SYS40N, ;CLKCSS IFG SYS50N, ;SCHED -;LOAD EITHER SEGCON (2REG SOFTWARE) OR NULSEG (1 REG SOFTWARE) +;LOAD EITHER SEGCON(2REG SOFTWARE) OR NULSEG(1 REG SOFTWARE) ; UNLESS USER HAS EDITTED S WITH FT2REL=0 SO ALL PUSHJ'S -; TO SEGCON (NULSEG) ARE REMOVED +; TO SEGCON(NULSEG) ARE REMOVED -IFN FT2REL, < +IFN FT2REL,< IFG KT10AN, - IFE KT10AN, > - ;APR AND PI BITS INTERN PION,PIOFF,REQCLK,PICLK,APRCLR,APRCLE,APRNUL,APRRST,NXM,APRFOV CLKBIT==1 - REPEAT 7-CLKCHN, + REPEAT 7-CLKCHN, PION==200 ;CONO PI,PION TURNS PI SYSTEM ON PIOFF==400 ;TURN IT OFF REQCLK==1B24+CLKBIT ;REQUEST INTERRUPT ON LOW PRIORITY CLK CHANNEL @@ -1258,9 +1235,9 @@ IFN FT2REL, < APRCLE==431550+APRCHN ;CLEAR ALL APR ERROR BITS ; AND DISABLE FOV AND AR OVF APRNUL==433550+APRCHN ;RESET APR FOR NULL JOB - ; CLEAR EVERYTHING BUT DON'T I/O RESET - APRRST==APRNUL+200000 ;RESET APR FOR SYSINI (I/O RESET TOO) - NXM==10000 ;NON-EX MEM (APR STATUS WORD) + ; CLEAR EVERYTHING BUT DONT IO RESET + APRRST==APRNUL+200000 ;RESET APR FOR SYSINI(IO RESET TOO) + NXM==10000 ;NON-EX MEM I(APR STATUS WORD) IFG PDP10N, IFE PDP10N, ;IF Z RELOC SOFTWARE, THEN FTZREI MUST BE -1 + IFG KT10AN, ;IF Z RELOC SOFTWARE, THEN FTZREL MUST BE -1 IFE COREN, - XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CRE FOR ANY SINGLE USER - ; ONCE ONLY CODE CAN ALTER THIS VALUE - ; (PATCH RH CORLIM IN SYSIM) - ;SCANNER ENTRY POINTS AND BIT DEFINITIONS - - IFG DLSN, ;DATA LINE SCANNER - IFG CCIN, ;DA-10 PDP-8 680 - IFG DCSN, ;630 DATA COMMUNICATIONS SYS + XP USRLIM,COREN ;DEFINE GLOBAL RESTRICTING SIZE OF CORE FOR ANY SINGLE USER + ; ONCE ONLY CODE CAN ALTER THIS VALUE + ; (PATCH RH CORLIM IN SYSIM) + +;SCANNER ENTRY POINTS AND BIT DEFINITIONS - IFG FULLN, ;FULL DUPLEX SOFTWARE ENTRY POINT - IFE FULLN, ;HALF DUPLEX SOFTWARE ENTRY POINT + IFG DLSN, ;DATA LINE SCANNER + IFG CCIN, ;DA-10 PDP-8 680 + IFG DCSN, ;630 DATA COMMUNICATIONS SYS - IFG FULLN, < + IFG FULLN, ;FULL DUPLEX SOFTWARE ENTRY POINT + IFE FULLN, ;HALF DUPLEX SOFTWARE ENTRY POINT + IFG FULLN,< INTERN LINTAB -LINTAB: ;LINE CHARACTERISTICS BITS (NOT CLEARED ON SYSTEM STARTUP) +LINTAB: ;LINE CHARACTERISTIC BITS (NOT CLEARED ON SYSTEM STARTUP) -;TELETYPE LINE CHARACTERISTICS (LH OF LINTAB) +;TELETYPE LINE CHARACTERISTICS(LH OF LINTAB) ;USED IN SCNSRF ALSO XP PTYLIN,400000 ;PSEUDO TTY LINE @@ -1309,26 +1286,25 @@ LINTAB: ;LINE CHARACTERISTICS BITS (NOT CLEARED ON SYSTEM STARTUP) IFG EDITN,< ;HAS COMMON.MAC BEEN EDITED TO DEFINE TTY LINE CHAR. ; SO MONGEN TYPE-IN REDUCED? ;IF NO APR NUMBER, AND THIS IS NOT EDITED FOR THE CUSTOMER, -; MAKE ALL LIENS JUST BE MODEL 33 TELETYPES +; MAKE ALL LINES JUST BE MODEL 33 TELETYPES -IFE APRN,> - -IFE APRSN-2,< -;FOLLOWING LINE DEFINITIONS FOR DEC PDP12 #2 +IFE APRSN,> + IFE APRSN-2,< +;FOLLOWING LINE DEFINITIONS FOR DEC PDP10 #2 XWD T35,0 ;TTY0 XWD T35,0 ;TTY1 XWD T35,0 ;TTY2 XWD 0,0 ;TTY3 -REPEAT 3,< XWD T35,0>;TTY4-6 +REPEAT 3,< XWD T35,0> ;TTY4-6 XWD T35+TTYRMT,0 ;TTY7 - REMOTE 35 XWD DSDTLN,0 ;TTY10 XWD DSDTLN+HLFDPX,0 ;TTY11 XWD DSDTLN,0 ;TTY12 -REPEAT 4,< XWD T35,0>;TTY13-16 +REPEAT 4,< XWD T35,0> ;TTY13-16 + XWD TTYRMT,0 ;TTY17 - REMOTE REPEAT 8, > - IFE APRSN-^D40,< ;THIS CONFIGURATION FOR DEC SYSTEM NUMBER 40 @@ -1337,102 +1313,97 @@ REPEAT ^D8,<0 ;MODEL 33'S LOCALLY> REPEAT ^D8,< XWD DSDTLN,0 ;DATASET> > -; CTY AND PTY SET BY SCNSER -> ;END PRE-EDITED LINE CHARACTERISTICS - +; CTY AND PTY SET BY SCNSRF +> ;END PRE-EDITED LINE CHARACTERISTICS + IFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG? -IFE EDITN,< ;MONGEN DIALOG DEFINE TTY CONFIG? - -DEFINE GENLIN(LIN)< +DEFINE GENLIN (LIN)< IFNDEF DSD'LIN, ;DATA SET? IFNDEF TAB'LIN, ;HARDWARE TABS? IFNDEF RMT'LIN, ;REMOTE? IFNDEF HLF'LIN, ;HALF DUPLEX SCANNER? - XWD DSD'LIN*TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0 + XWD DSD'LIN*DSDTLN+TAB'LIN*T35+RMT'LIN*TTYRMT+HLF'LIN*HLFDPX,0 > REPEAT HGHLIN+1, + GENLIN \LINE> + + > - LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY;S + LOC LINTAB+TTPLEN ;MAKE SURE ENOUGH SPACE FOR CTY+PTY'S -> ;END OF FULL DUPLEX CONDITIONAL + +> ;END OF FULL DUPLEX CONDITIONAL INTERN FSNCHN,SCNON,SCNOFF - FSNCHN==SCNCHN*101 ;CHANNEL ASSIGNMENT FOR FULL DUPLEX SCN. - SCNBIT==<1_<7-SCNCHN>> + FSNCHN==SCNCHN*101 ;CHANNEL ASSIGN. FOR FULL DUPLEX SCN. + SCNBIT==1 + REPEAT 7-SCNCHN, SCNON==2000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL ON SCNOFF==1000+SCNBIT ;CONO PI, TURNS SCANNER PI CHANNEL OFF - IFG TABSN, ;HARDWARD TABS - IFE TABSN, -XP SCNNUM,HGHLIN+1 ;# OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG) + IFG TABSN, ;HARDWARD TABS + IFE TABSN, +XP SCNNUM,HGHLIN+1 ;NO. OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG) ;MAGTAPE ENTRY POINT AND BIT DEFINITIONS - IFG MTAN, ;TM10 ENTRY POINT - IFG MTCN, ;PDP-6 MAGTAPES ENTRY POINT - - IFG MTAN, < - - INTERN MMTSIZ,MTALOC,MTLOC1,MTBOTH,MTFLAG + IFG MTAN, ;TM10 ENTRY POINT + IFG MTCN, ;PDP-6 MAGTAPES ENTRY POINT - MMTSIZ==-MTSIZ - MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION - MTLOC1==MTALOC+1 ;NEXT LOCATION - MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS - MTFLAG==400+MTACHN*10 + IFG MTAN,< + INTERN MTALOC,MTLOC1,MTBOTH,MTFLAG,MMTSIZ + MMTSIZ==-MTSIZ + MTALOC==40+2*MTDCHN ;BLKI/BLKO LOCATION + MTLOC1==MTALOC+1 ;NEXT LOCATION + MTBOTH==MTACHN*10+MTDCHN ;BOTH PI CHANNELS + MTFLAG==400+MTACHN*10 > - - IFG MTCN, < - - INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT - - DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOCATION - DCLOC1==DCLOC+1 ;NEXT LOCATION + IFG MTCN,< + INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT + DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC + DCLOC1==DCLOC+1 ;NEXT LOCATION DCBIT==1 - REPEAT 7-DCTCHN, - DCON==2000+DCBIT ;TURN DC PI CHANNEL ON - DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF - DCIN=4010+DCTCHN ;SET DATA CHANNEL FOR INPUT - DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT + REPEAT 7-DCTCHN, + DCON==2000+DCBIT ;TURN DC PI CHANNEL ON + DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF + DCIN==4010+DCTCHN ;SET DC FOR INPUT + DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT > - -;DECTAPE ENTRY POINT AND BIT DEFINITIONS + ;DECTAPE ENTRY POINT ADN BIT DEFINITIONS SAVN==1 ;WE ONLY SUPPORT NEW FORMAT NOW - ;MONGEN NO LONGER ASKS QUESTION, + ;MONGEN NO LONGER ASKS QUESTION. - IFG DTAN, ;TD10 WITH NEW FORMAT - IFG DTCN, < - IFG SAVN, ;556 WITH NEW FORMAT - IFE SAVN, ;556 WITH OLD FORMAT + IFG DTAN, ;TD10 WITH NEW FORMAT + IFG DTCN,< + IFG SAVN, ;556 WITH NEW FORMAT + IFE SAVN, ;556 WITH OLD FORMAT > - IFG DTAN, < ;DEFINE SYMBOLS IF PDP-10 DECTAPES (TD10) - INTERNAL DTALOC,DTALC2,DTBOTH,DTTURN + IFG DTAN,< ;DEFINE SYMBOLS IF PDP-10 DECTAPES(TD10) + INTERN DTALOC,DTALC2,DTBOTH,DTTURN DTALOC==40+2*DTDCHN ;BLKI/BLKO LOCATION - DTALC2==DTALOC+1 ;NEXT LOCATION + DTALC2==DTALOC+1 ;NEXT LOCATION DTBOTH==DTDCHN*10+DTACHN DTTURN==300200+DTBOTH > - IFG DTCN, < ;DEFINE SYMBOLS IF PDP-6 DECTAPES (556) - INTERNAL DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT + IFG DTCN,< ;DEFINE SYMBOLS IF PDP-6 DECTAPES(556) + INTERN DCLOC,DCLOC1,DCON,DCOFF,DCIN,DCOUT DCLOC==40+2*DCTCHN ;EVEN DC PI CHANNEL LOC DCLOC1==DCLOC+1 ;NEXT LOCATION DCBIT==1 - REPEAT 7-DCTCHN, - DCON==2000+DCBIT ;TURN DC PI CHANNEL ON - DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF - DCIN==4010+DCTCHN ;SET DATA CHANNEL FOR INPUT - DCOUT==3410+DCTCHN ;SET DATA CHANNEL FOR OUTPUT + REPEAT 7-DCTCHN, + DCON==2000+DCBIT ;TURN DC PI CHANNEL ON + DCOFF==1000+DCBIT ;TURN DC PI CHANNEL OFF + DCIN==4010+DCTCHN ;SET DC FOR INPUT + DCOUT==3410+DCTCHN ;SET DC FOR OUTPUT > - ;DEFINE SAVE MODE AND EXTENSION FOR OLD OR NEW FORMAT - INTERNAL SAVDMP - IFE SAVN, ;EXTENSION FOR SAVED FILES == "DMP" > - IFN SAVN, < + IFN SAVN,< SAVDMP== ;EXTENSION FOR SAVED FILES == "SAV" > ;DISPLAY AND LITE PEN @@ -1440,17 +1411,19 @@ XP SCNNUM,HGHLIN+1 ;# OF SCANNER LINES (USED BY ONCE FOR PRINTING CONFIG) IFG DISN,< IFG T340N, ;TYPE 340 ENTRY POINT IFE T340N, ;TYPE 30 ENTRY POINT - INTERN DISBLK,DISJSR,OFFDIS,DISPON,DISPOF + INTERN DISBLK,DISJSR,ONDIS,NONDIS,OFFDIS,DISPON,DISPOF DISBLK==40+2*DISCHN ;BLKI/BLKO LOCATION DISJSR==DISBLK+1 ONDIS==100+10*PENCHN+DISCHN NONDIS==10*PENCHN+DISCHN OFFDIS==0 DISBIT==1 - REPEAT 7-DISCHN, + REPEAT 7-DISCHN, DISPON==2000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL ON DISPOF==1000+DISBIT ;CONO PI, TURNS DIS PI CHANNEL OFF > + + ;LINE PRINTER ENTRY POINT AND DDB DEFINITIONS IFG LPTN, < @@ -1467,12 +1440,12 @@ LP'N'INT: CONSO LP'N,0 ;(-4) SKIP IF INTERRUPT FOR THIS LPT JRST .-1 ;(-3) GO TO NEXT SKIP CHAIN ELEMENT MOVEM DEVDAT,LP'N'SV1 ;(-2) SAVE DEVDAT IN CHANNEL SAVE AREA JSP DEVDAT,LPTINT ;(-1) SET UP DDB ADDRESS AND BRANCH + LP'N'DDB: LP'N'NAM: - - IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME> - IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME> - XWD ^D60*HUNGST,B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS + IFE LPTN-1, < SIXBIT /LPT/ ;( 0) PHYSICAL DEVICE NAME > + IFN LPTN-1, < SIXBIT /LPT'N/ ;( 0) PHYSICAL DEVICE NAME > + XWD ^D60*HUNGST,B23+LPTSIZ ;( 1) DEVICE CHARACTERISTICS 0 ;( 2) DEVICE I/O STATUS XWD 0,LPTDSP ;( 3) LH=DDB LINK, RH=DSP TABLE ADDR. LPTMOD==1_A+1_AL+1_I ;LPT LEGAL MODES @@ -1490,46 +1463,50 @@ LP'N'PTR: 0 ;( 7) BLOCK OUTPUT POINTER MOVE DEVDAT,LP'N'SV1 ;(16) RESTORE DEVDAT AND JEN @LP'N'CHL ;(17) DISMISS INTERRUPT - 0 ;(20) SAVE LOCATION FOR DAT + + 0 ;(20) SAVE LOCATION FOR TAC + CONSZ LP'N,LPTECM ;(21) THE REST OF THE DDB CONTAINS CONSO LP'N,LPTDON ;(22) THE ACTUAL I/O INSTRUCTIONS - CONSO LP'N,(DAT) ;(23) USED BY THE COMMON SERVICE - CONSZ LP'N,(DAT) ;(24) ROUTINE TO CONTROL A LINE - CONI LP'N,DAT ;(25) PRINTER. THEY ARE EXECUTED - CONO LP'N,(DAT) ;(26) BY MEANS OF AN XCT INSTRUCTION - DATAO LP'N,(DAT) ;(27) INDEXED TO THE PROPER DDB + ; USED BY THE COMMON SERVICE + CONSO LP'N,(TAC) ;(23) ROUTINE TO CONTROL A LINE + CONSZ LP'N,(TAC) ;(24) PRINTER. THEY ARE EXECUTED + CONI LP'N,TAC ;(25) BY MEANS OF AN XCT INSTRUCTION + CONO LP'N,(TAC) ;(26) INDEXED TO THE PROPER DDB + DATAO LP'N,(TAC) ;(27) BLKO LP'N,LP'N'PTR ;(30) - LIST ;TURN LISTING BACK ON AFTER EXPANSION - + LIST ;TURN LISTING BACK ON DURING EXPANSION > - EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP - LPT2=234 ;DEVICE SELECT CODE FOR SECOND LPT + EXTERN LPTSER, LPTNXT, LPTECM, LPTDON, LPTINT, LPTDSP - IFNDEF LP0, ;DEFINE STANDARD MNEMONIC DEFINITIONS - IFNDEF LP1, ; BUT ALLOW FOR OVERRIDE + LPT2=524 ;DEVICE SELECT CODE FOR SECOND LPT - $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE - ; MACRO GENERATION + IFNDEF LP0, ;DEFINE STANDARD MNEMONIC DEFINITIONS + IFNDEF LP1, ; BUT ALLOW FOR OVERRIDE + $LPNUM=0 ;TEMPORARY SYMBOL USED TO FACILITATE + ; MACRO GENERATION - REPEAT LPTN, < - LPTDDB \$LPNUM - $LPNUM=$LPNUM+1 + REPEAT LPTN, < + + LPTDDB (\$LPNUM) + $LPNUM=$LPNUM+1 + > + > -> ;CARD READER ENTRY POINT AND BITS - IFG CDRN, < - IFG CR10N, ;CR10 ENTRY POINT - IFE CR10N, ;PDP-6 CARD READER - INTERNAL CDRBTS + IFG CDRN,< + IFG CR10N, ;CR10 ENTRY POINT + IFE CR10N, ;PDP-6 CARD READER + INTERN CDRBTS CDRBTS==1670+CDRCHN -> + > ;CARD PUNCH ENTRY POINT @@ -1541,41 +1518,42 @@ LP'N'PTR: 0 ;( 7) BLOCK OUTPUT POINTER IFG PLTN, + ;PAPER TAPE READER ENTRY POINT AND MASK - IFG PTRN, ;MASK==0 IF PDP-10 READER - IFE PDP10N, ;MASK==777777 FOR PDP-6 READER + IFG PDP10N, ;MASK==0 IF PDP-10 READER + IFE PDP10N, ;MASK==777777 FOR PDP-6 READER > ;PAPER TAPE PUNCH ENTRY POINT IFG PTPN, - ;DISK ENTRY POINTS AND BITS + ;DISK ENTRY POINTS AND BITS + IFG DSKN,< INTERN DSKBIT,DCBBIT,DSKON,DSKOFF DCBBIT==0 ;0 UNLESS DATA PRODUCTS DISK(SEE BELOW) DSKBIT==1 ;LOW PRIORITY DISK PI CHANNEL REPEAT 7-DSKCHN, DSKON==2000+DSKBIT ;CONO PI, TURN DISK CHANNEL ON - DSKOFF=1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF + DSKOFF==1000+DSKBIT ;CONO PI, TURN DISKCHANNEL OFF IFG RD10N,< ;BURROUGHS DISK - EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSION + EXTERN RCXINT,DSKSRB,RCXWNZ ;LOAD EARLIER VERSIONS OF ; DSKINT,DSKSRB,ONCEB IFG SYS50N, ;LOAD EARLIER VERSION OF SCHEDB > IFG DPDN,< ;IF DATA PRODUCTS DISK - EXTERNAL LODINT ;LOAD DPDINT - EXTERNAL DSKSRD ;LOAD ONCE=DSKSR FOR DATA PROD DISK - + EXTERNAL LDDINT ;LOAD DPDINT + EXTERNAL DSKSRD ;LOAD ONCE+DSKSR FOR DATA PROD DISK INTERN DCBBIT,DSKX8,DSKX9 DCBBIT==1 REPEAT 7-DCBCHN, - DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO OCS + DSKX8==40+2*DCBCHN ;DATA-CONTROL BLKI/BLKO LOCS DSKX9==DSKX8+1 > IFG RA10N,< ;IF BRYANT DISK @@ -1584,19 +1562,19 @@ LP'N'PTR: 0 ;( 7) BLOCK OUTPUT POINTER > > + ;PSEUDO TTY ENTRY POINT - IFE PTYN, - IFG PTYN, < + IFG PTYN,< IFE FULLN, ;HALF DUPLEX SCANNER SOFTWARE IFG FULLN, ;FULL DUPLEX SCANNER SOFTWARE > LIT RELOC .-COMORG ;NOW MAKE RELOCATABLE SO NEXT PROGRAM WILL BE LOADED - ; IMMEDIATELY AFTER THIS ONE - -COMEND: END + ; IMMMEDIATELY AFTER THIS ONE +COMEND: END diff --git a/src/copy.mac b/src/copy.mac index 3a2533b..cfad827 100644 --- a/src/copy.mac +++ b/src/copy.mac @@ -605,7 +605,7 @@ ERRCMD: MOVEI BP,MESCMD MESCMD: SIXBIT /?COMMAND ERROR#/ ERRSW: MOVEI BP,MESSW PUSHJ P,TYPEIT - JRST ST + JRST ST MESSW: SIXBIT /?SWITCH ERROR#/ ERRIN1: SKIPA T,IDEV ERRIN2: MOVE T,ODEV @@ -776,7 +776,7 @@ COPOUT: OUTPUT 2,LISTC ;COPY AND ZERO PUSHJ P,VERIFY ;VERIFY AND EXIT THIS PAGE VERONE: SETSTS 1,136 ;SET SETSTS 2,136 ;DUMP MODE - MOVEI LOC,1 ;START AT BLOCK 1 + MOVEI LOC,1 ;START AT BLOCK 1 VERSET: MOVE V1,LISTV1 ;IOWDS MOVE V2,LISTV2 ;TO ACS USETI 1,(LOC) ;MASTER @@ -873,7 +873,7 @@ NEWBLK: PUSHJ P,GETWRD ;GET ONE WORD FROM PTR FILE CAIN TYPE,1 ;BLKTYP=1? PUSH I,W ;YEP, SAVE THE BITS CAIG TYPE,7 ;ILL-BLK-TYP? - JRST @TYPTAB(TYPE) ;NO, OFF TO BLOCK HANDLER + JRST @TYPTAB(TYPE) ;NO, OFF TO BLOCK HANDLER TTCALL 3,[ASCIZ /?ILLEGAL BLOCK TPYE /] @@ -950,7 +950,7 @@ BLK4A: HRLI CNT,-22 ; TRNN CNT,-1 ; JRST NEWBLK ; PUSHJ P,GETWRD ; - AOBJN CNT,BLK4A+1 ;PASS/IGNORE + AOBJN CNT,.-1 ;PASS/IGNORE TRNN CNT,-1 ; JRST NEWBLK ; PUSHJ P,GETWRD ; diff --git a/src/dlsint.mac b/src/dlsint.mac index 7d9de3a..c930d94 100644 --- a/src/dlsint.mac +++ b/src/dlsint.mac @@ -1,11 +1,11 @@ TITLE DLSINT - INT. SERV. FOR DLS (DATA LINE SCANNER DC10) -SUBTTL M.FREDRIKSEN/RCC TS 01 JUN 69 V005 +SUBTTL M. FREDRIKSEN/RCC TS 01 JUN 69 V005 XP VDLSIT,005 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP ;MODULAR HARDWARE INTERFACE WITH EITHER SCNSER OR TTYSER -EXTERN TYPX +EXTERNAL TYPX IFE FTTTYSER, @@ -26,12 +26,12 @@ EXTERNAL PLASTC -DLS=240 ;DC10 DEVICE NUMBER -;BITS IN CHREC TO COMMUNCATE WITH DLS +DLS=240 ;DC10 DEVICE NUMBER +;BITS IN CHREC TO COMMUNICATE WITH DLS -USDRLN=100 ;USE DIRECTED LINE NUMBER -TDSABL=400 ;TRANSMIT DISABLE -RCVBIT=400 ;RECEIVE BIT AFER DATAI DLS,CHREC +USDRLN=100 ;USE DIRECTED LINE NUMBER +TDSABL=400 ;TRANSMIT DISABLE +RCVBIT=400 ;RECEIVE BIT AFTER DATAI DLS,CHREC ;DEVICE DEPENDENT PORTION OF INITIALIZATION CODE ;CALL: MOVEI TAC,CHANNEL NUMER @@ -39,11 +39,11 @@ RCVBIT=400 ;RECEIVE BIT AFER DATAI DLS,CHREC INTERNAL SCNINI DLSINI: -SCNINI: CONO DLS,40 ;INIT DLS COMPLETELY (I/O/RESET) +SCNINI: CONO DLS,40 ;INIT DLS COMPLETELY (I/O RESET) CONO DLS,(TAC) ;ASSIGN PI CHANNEL NUMBER POPJ PDP, -;SCANNER INTERRUPT SERVICE ROUTINE +;SCANNER INTERRUPT SERVICE ROUTINE. ENTRY DLSINT @@ -51,7 +51,7 @@ INTERNAL SCNINT EXTERNAL SCNSAV,TCONLN,TTYTAB,XMTINT,TYPE,INUS2,RECINT DLSINT: -SCNINT: CONSO DLS,30 ;ANY INTERRUPTS ON DLS +SCNINT: CONSO DLS,30 ;ANY INTERRUPTS ON DLS? JRST SCNINT ;NO JSR SCNSAV DATAI DLS,CHREC ;GET CHARACTER & LINE INFO @@ -76,13 +76,13 @@ TCOMM: CAILE LINE,TCONLN ;PSEUDO CONSOLE? JRST INJEST ;YES CAIN LINE,TCONLN ;IS IT THE CTY ? - JRST INUS2 ;YES, ACCPT CHAR AND PROCESS + JRST INUS2 ;YES, ACCEPT CHAR AND PROCESS JRST TYPE ;NO, ECHO CHAR ON FULL DUPLEX ;BEFORE PROCESSING IT ;HERE IF LINE NUMBER TOO BIG SCNIN2: DATAO DLS,[EXP TDSABL] ;SET TRANSMIT DISABLE BIT AND OUTPUT IT - ;(JUST INCASE, ELSE IT WILL INTERRUPT IMMEDIATLY AGAIN) + ;(JUST INCASE, ELSE IT WILL INTERRUPT IMMEDIATELY AGAIN) POPJ PDP, ;DISMISS INTERRUPT ;COMMON TO RECEIVE AND TRANSMIT. diff --git a/src/dskint.mac b/src/dskint.mac index cd914c2..841ea1a 100644 --- a/src/dskint.mac +++ b/src/dskint.mac @@ -124,7 +124,7 @@ DSKFDG: HRRZI TAC,DSKCHN ;THIS INSTRUCTION TEMPORARILY ALTERED DURING "ONCE". HLRE TAC1,@RCXIOC ; CHANNEL CONTROL WORD SHOULD CONTAIN UPON SUB TAC,TAC1 ; SUCCESSFUL COMPLETION OF THE DISK OPERATION. MOVE TAC1,RCXIOC - HRLI TAC,1(TAC) + HRLI TAC,1(TAC1) MOVEM TAC,RCXFIN SETZM RCXCCW ;ZERO THE LOCATION WHERE THE DISK SYNCRONIZER WILL ; STORE THE CHANNEL CONTROL WORD. diff --git a/src/dskser.mac b/src/dskser.mac index 30fe5b8..0279d9a 100644 --- a/src/dskser.mac +++ b/src/dskser.mac @@ -58,8 +58,7 @@ MFDBLK: 13000 ;THIS BLOCK CONTAINS RETRIEVAL INFO, OF MFD SATXWD: XWD -NUMSAT,13001 ;LH=NUMBER OF SAT BLOCKS. ;RH=FIRST SAT BLOCK NUMBER. >> - -CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM + CHKCNT=200 ;NUMBER OF WORDS TO CHECK-SUM W8BIT=400000 ;WAIT INDICATION FOR DDB ; BITS IN LH OF IOS @@ -89,8 +88,10 @@ VRGPTR=100000 ;FLAG TO SIGNAL THAT POINTERS HAVE NEVER BEEN WRITTEN RENBIT=20000 ;"RENAMING" INDICATION FOR SETLE ROUTINE WPRO=40000 ;LOOKUP DONE, FILE IS IN WRITE PROTTECT CKSUPR=10000 ;FLAG SET IF READING DUMP FILES IN NON-DUMP MODE - -;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES + + + + ;CONSTANTS USED IN CONNECTION WITH ACCESS TABLE ENTRIES ATPP=0 ;PROJECT,PROGRAMMER NUMBERS ATNAME=1 ;OWNER NAME @@ -122,19 +123,18 @@ XP NUMSAT,16 ;NUMBER OF SAT BLOCKS FOR 5.76 MILLION >> XP WLBIT,400000 ;IF BIT IS ON IN FIRST SATENT ENTRY ;WORD, THE DISK IS WRITE-LOCKED. - -EXTERNAL DSKOFF + EXTERNAL DSKOFF DEFINE NOSCHEDULE < CONO PI,DSKOFF > + EXTERNAL DSKON DEFINE SCHEDULE < CONO PI,DSKON > - -INTERNAL FTCHECK,FTMONP + INTERNAL FTCHECK,FTMONP IFN FTCHECK+FTMONP,< EXTERNAL DDBPTR,DSKCOR,PTRN,MOPTR,MIPTR,RUNUSR,SAVPRG,USRCNT EXTERNAL SATPTR,SAT,SATBK2,DIRSIZ @@ -153,7 +153,6 @@ DDBPTR: Z ;LOCATION OF NEXT DDB TO LOOK AT INTERNAL SATPTR,SAT,SATBK2,REFLAG,DFBUSY,CKSMCT MOPTR: BLOCK 1 ;POINTER TO NEXT TASK TO DO MIPTR: BLOCK 1 ;POINTER TO NEXT FREE QUEUE ENTRY - RUNUSR: BLOCK 1 ;LH=DEVDAT OF USER JOB RUNNING ;RH= UNUSED USRCNT: BLOCK 1 ;COUNT OF WAITING USER JOBS @@ -195,8 +194,7 @@ DSKXDB=5400 ;FILE STORAGE BEGINS ON SECOND DISK OF OLD (MOD 270) ; DISK FILE SINCE FIRST DISK IS ALLOCATED ; TO SWAPPING. > - -SATENT: REPEAT NUMSAT,< + SATENT: REPEAT NUMSAT,< XWD DSKXDB,0 ;RH CONTAINS WLBIT AND COUNT OF BLOCK USED BLOCK 1 ;BIT MASK, SINGLE ROTATING BIT BLOCK 1 ;XWD LENGTH OF SAT TABLE POINTER WORD @@ -204,22 +202,22 @@ SATENT: REPEAT NUMSAT,< DSKXDB=DSKXDB+NUMBLK> XP SATTOP,SATENT+SENTSZ*NUMSAT-SENTSZ + >;END OF FTRA100 CONDITIONAL + SAT: BLOCK 200 ;CURRENT SAT BLOCK XP SATM2,SAT-2 ;LOWEST ABS, ADR-1 ALLOWED IN CHANNEL COMMAND ; LIST - USED TO KEEP FROM WIPING OUT MONITOR. SATBK2: XWD -200,SAT - - XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE + XP DIRSIZ,4 ;NO. OF WORDS OF RET. INFO WHICH ARE ;NOT POINTERS. ;THE DUMMY DEVICE DATA BLOCK DSKCOR=10 DSKSIZ=4*DSKCOR ;NUMBER OF WORDS ALLOCATED FOR DDB ;MUST BE A MULTIPLE OF FOR (SEE GETCOR) - INTERN DSKDDB DSKDDB: SIXBIT /DSK/ XWD ^D5*HUNGST,201 @@ -241,7 +239,7 @@ DSKDDB: SIXBIT /DSK/ Z ;C(LH)=ADDRESS OF ACCESS TABLE ENTRY ;C(RH)=ADDRESS OF CURRENT POINTER IN DDB XP DEVCNT,.-DSKDDB ;C(LH)USED DURING LOOKUP,ENTER - Z ;C(LH)==RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES) + Z ;C(LH)=RELATIVE BLOCK# WITHIN UFD OPTIMIZE UFD SEARCHES) ;C(RH)=COUNT OF BLOCKS IN FILE XP DEVBLK,.-DSKDDB ;C(LH)=BLOCK NUMBER OF CURRENT POINTER Z ;C(LH)=LOGICAL BLOCK# OF RIB @@ -264,9 +262,7 @@ DSKDDB: SIXBIT /DSK/ XP FPNTR,PTR1+DIRSIZ ;LOC. OF FIRST POINTER TO RET. INFO. XP FPNTR1,FPNTR-1 XP PTRN,DSKSIZ-1 - -;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB - + ;DEFINE 3 WORD ENTRY CONTROLLING BIT SEARCH IN DDBTAB INTERNAL LOCORE,CRINIT EXTERNAL DDBTAB @@ -277,8 +273,8 @@ CORIWD: XWD 0,0 ;AOBJN POINTER TO FIRST WORD IN DDBTAB CONTAINING A 0 CRINIT: XWD 0,DDBTAB ;INITIAL AOBJN POINTER FOR CORIWD ; LH SET BY LINKDB MONBUF: BLOCK 200 ;MONITOR BUFFER, USED TO READ RETRIEVAL POINTERS, ETC. - -;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER +> + ;ERROR CODES FOR LOOKUP, RENAME AND/OR ENTER NOTINU=0 ;NO SUCH FILE NOTINM=1 ;NO SUCH USER @@ -289,6 +285,7 @@ RENFAL=4 ;TRIED TO RENAME FILE TO EXISTING NAME OR ENTER NOFILE=5 ;TRIED TO RENAME WITH NO FILE SELECTED ERRBIT=1 ;BITS GO IN WORD 1 OF THE ENTRY + ;DISK DISPATCH TABLE INTERNAL DSKDSP @@ -329,11 +326,11 @@ ACCIN2: MOVEI TAC,DSKDDB MOVEM TAC,CORBIT ;INITIALIZE FLOATING 1 BIT MOVE TAC,CRINIT MOVEM TAC,CORIWD ;RESET AOBJN WORD - POPJ PDP, -;DSKINI - CALLED AT START, RESTART, 143 RESTART -; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE + +;DSKINI - CALLED AT 140 START, RESTART, 143 RESTART +; REMOVE ACCESS ENTRIES, REMOVE DDB'S NOT ASSIGNED BY CONSOLE. CLEAR THE MONITOR QUEUE. INTERNAL DSKINI, SETSAT EXTERNAL DISKUP,DFWUNS @@ -379,8 +376,7 @@ SETSAT: AOSE STARTS ;SKIP FIRST TIEM ONLY JRST SAT01 ;WRITE SAT BLOCK IN CORE JRST DFWUNS ;SCAN ALL SAT BLOCKS STARTS: -1 ;COUNT STARTS, RESTARTS - -;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147, + ;WRITE OUT SAT BLOCK, ENTER AT DSKSTP WITH FIXED START 147, ;AT SAT01 UPON RE-ENTRY OF INITIALIZATION. INTERN DSKSTP,SAT05,JSAT06 @@ -454,8 +450,7 @@ DFENT2: MOVEI TAC1,WTBIT+ATCLO ;BITS FOR ACCESS ENTRRY - FILE CREATION NOSCHEDULE PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING JRST DFENT3 ;NOT THERE - -DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON? + DFEN2A: MOVE DAT,TBITS(TAC) ;WRITE BIT ON? TRNE DAT,WTBIT JRST DFERR6 ;YES,ERROR PUSHJ PDP,SCNAT2 @@ -472,7 +467,6 @@ DFENT3: TLZE IOS,PRCHG ;PROTECTION FAILURE? HRLZM TAC,DEVBKO(DEVDAT) HRRM TAC,DEVEXT(DEVDAT) ;STORE FIRST RIB# NOSCHEDULE - MOVE DAT,TAC1 ;ACCESS ENTRY BITS PUSHJ PDP,SETAT ;CREATE ACCESS ENTRY. RETURN POINTER IN TAC1 HRLM TAC1,DEVACC(DEVDAT) ;STORE POINTER TO ACCESS ENTRY @@ -505,8 +499,7 @@ DFENT4: TLO TAC1,55000 ;PROTECTION MOVSI TAC,VRGPTR ;SET "VIRGIN POINTER" FLAG (O DFO4A SUBROUTINE IORM TAC,DEVOAD(DEVDAT) ;WILL CREATE A NEW RIB WHEN JUST CALLED JRST ALLOK - -;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY + ;AN ENTER AFTER A LOOKUP, SET "RWTBIT" FLAG IN ACCESS ENTRY DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION TLNE TAC,WPRO @@ -518,9 +511,8 @@ DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION PUSHJ PDP,DFERR6 ;YES, THIS WILL NOT RETURN HERE MOVEM TAC1,TBITS(TAC) ;NO, SET IT SCHEDULE - CONO PI,DSKON - MOVE TAC,@UUO ;SAVE FILE? + MOVE TAC,@UUO ;SAME FILE? CAME TAC,DEVFIL(DEVDAT) JRST DFERR8 ;NO, NAME WRONG ADDI UUO,1 @@ -541,8 +533,8 @@ DFENT5: MOVE TAC,DEVOAD(DEVDAT) ;CHECK PROTECTION DFENT7: PUSHJ PDP,SCNAT2 ;FIND ANOTHER JRST DFENT1 ;NO WRITERS, PERMIT THIS ENTER JRST DFERR6 ;MUST BE BEING WRITTEN OR RENAMED - -;LOOKUP UUO + ;LOOKUP UUO + EXTERNAL UDLKC,TPOPJ @@ -581,8 +573,8 @@ DFLUK3: AOS TBITS(TAC) ;INCREMENT RCOUNT TLOA TAC1,WPRO ;WRITE PROTECTED. SET FLAG TLZ TAC1,WPRO ;WRITE OK--RESET FLAG IORM TAC1,DEVOAD(DEVDAT) - -DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK + + DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK NOSCHEDULE HRRI TAC,@UUO ;DESTINATION IS UUO PARAMETER BLOCK MOVE TAC1,TAC @@ -597,8 +589,7 @@ DFLUK4: MOVSI TAC,PTR1(DEVDAT) ;COPY INFO TO LOOKUP PARAMETER BLOCK TLZ DEVDAT,ICLOSB MOVSI TAC,VRGPTR ;POINTERS DO EXIST ON THE DISK SO ANDCAM TAC,DEVOAD(DEVDAT) ;CLEAR THE VIRGIN POINTERS FLAG. - -ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB + ALLOK: MOVEI DAT,FPNTR(DEVDAT) ;SKIP FILE INFO IN FIRST RIB HRRM DAT,DEVACC(DEVDAT) ;SET VERTICAL POINTER POINTER MOVEI TAC,1 HRRM TAC,SETCNT(DEVDAT) ;"POISITONED" AT RELATIVE BLOCK 1 OF FILE @@ -617,7 +608,6 @@ IFG CHKCNT,< IORM TAC,DEVOAD(DEVDAT) ;NO. SUPPRESS CHECKSUM > ALLXIT: POP PDP,TAC ;REMEMBER 0(PDP) WASS XWD PROJ,PROG - AOS (PDP) ;RETURN TO CALL+2 JRST CLRBUF ;RELEASE MONITOR BUFFER @@ -646,8 +636,7 @@ ALTMFD: MOVEI TAC,3(UUO) ;IS PROJ, PROG. = 1,1? POPJ PDP, ;YES, RETURN JRST DFERR5 - -;RENAME UUO + ;RENAME UUO EXTERNAL CPOPJ1 EXTERNAL THSDAT @@ -674,6 +663,7 @@ DFRENX: SKIPN DEVFIL(DEVDAT) ;IS THERE AN OLD FILE? DFREN1: AOS TBITS(TAC) ;INCREMENT RCOUNT HRLM TAC,DEVACC(DEVDAT) ;SAVE POINTER TO ACCESS ENTRY SCHEDULE + HRRZ TAC,DEVEXT(DEVDAT) ;CAN THIS FILE BE RENAMED? PUSHJ PDP,SETPTR ;READ IN FIRST SET OF RETRIEVAL POINTERS MOVEI AC1,@UUO ;IS THE PROTECTION TO BE CHANGED ? @@ -692,8 +682,8 @@ DFRN2A: MOVSI DAT,100000 ;CAN THIS BE RE-WRITTEN? JRST DFERR3 ;BAD RETREIVAL INFO JRST DFRN8A ;WRITE PROTECTED TLZ IOS,PRCHG ;ARBITRARY CHANGE OK. - -DFREN2: NOSCHEDULE + + DFREN2: NOSCHEDULE PUSHJ PDP,SCANAT ;SCAN ACCESS TABLE FROM BEGINNING JRST DFRN1B ;NO @@ -708,8 +698,7 @@ DFRN1B: HLRZ TAC,DEVACC(DEVDAT) ;SET RENAME FLAG IN FIRST ENCOUNTERED ACCESS ENT MOVEI AC1,RTBIT ;RENAME BIT ORM AC1,TBITS(TAC) SCHEDULE - - MOVE TAC,@UUO ;GET NEW FILENAME + MOVE TAC,@UUO ;GET NEW FILENAME CAME TAC,DEVFIL(DEVDAT) ;SAVE AS DDB? JRST DFREN3 ;NO ADDI UUO,1 ;YES, SAME EXTENSION? @@ -718,6 +707,7 @@ DFRN1B: HLRZ TAC,DEVACC(DEVDAT) ;SET RENAME FLAG IN FIRST ENCOUNTERED ACCESS ENT TLNE TAC,-1 ;SAME? SOJA UUO,DFREN3 ;NO + ;FILENAME AND EXTENSION ARE IDENTICAL. CHANGE ONLY PROTECTION TLZ IOS,PRCHG ;CLEAR PRTOECTION CHANGE FLAG @@ -761,8 +751,7 @@ DFREN3: TLZE IOS,PRCHG ;IS ONLY PROTECTION CHANGE PERMITTED? SCHEDULE PUSHJ PDP,DFCL21 JRST DFER10 - -;ALTER RETRIEVAL INFORMATION + ;ALTER RETRIEVAL INFORMATION DFREN5: POP PDP,DAT ;BACK UP PDP @@ -794,8 +783,7 @@ DFREN5: POP PDP,DAT ;BACK UP PDP DPB TAC,[POINT 9,@TAC1,8] ;STORE IN RIB PUSHJ PDP,WRI ;RE-WRITE RIB - -;ALTER UFD BLOCK + ;ALTER UFD BLOCK PUSHJ PDP,FINDE ;BRING IN CORRECT BLOCK @@ -814,7 +802,6 @@ DFREN5: POP PDP,DAT ;BACK UP PDP DFRN8A: TLNE IOS,PRCHG ;PROTECTION CHANGE? JRST DFREN2 ;YES - DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY JRST DFERR5 ;AND LEAVE @@ -823,8 +810,7 @@ DFREN8: PUSHJ PDP,DFCL21 ;TAKE OUT ACCESS ENTRY DFREN9: SCHEDULE PUSHJ PDP,DFCL21 ;TEAKE OUT ACCESS ENTRY JRST DFERR6 - -;DELETE A FILE FROM A UFD + ;DELETE A FILE FROM A UFD DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK @@ -851,8 +837,7 @@ DFREN7: PUSHJ PDP,FINDE ;FIND THE CORRECT BLOCK MOVEI TAC1,DTBIT IORM TAC1,TBITS(TAC) ;SET TO DELETE WHEN THROUGH READIN JRST DFCL21 ;CLOSE ACCESS ENTRY AND LEAVE - -;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME + ;SET UP ARGUMENT LIST FOR LOOKUP, ENTER, AND RENAME ;SEARCH THRU MFD AND UFD FOR THE FILE-NAME, ;EXIT TO CALL+1 IF A UFD CANNOT BE FOUND. ;EXIT TO CALL+2 IF THE FILE IS NOT FOUND. @@ -871,7 +856,6 @@ SETLE0: MOVEM IOS,DEVIOS(DEVDAT) TLO UUO,PROG MOVE AC1,@UUO ;PICK UP FILE NAME MOVEM AC1,DEVFIL(DEVDAT) ;STORE FILE NAME AND EXT IN DDB - ADDI UUO,1 HLLZ AC1,@UUO MOVEM AC1,DEVEXT(DEVDAT) @@ -886,8 +870,7 @@ SETLE9: MOVE ITEM,JOB ;TRY CURRENT JOB PP. SUBI UUO,3 ;UUO POINTS TO FILE NAME EXCH DAT,(PDP) ;PUT PP-NUMBER IN PD LIST PUSH PDP,DAT ;PDP POINTS TO CALL+1 - -;SEARCH MFD FOR THE OWNER OF THE FILE + ;SEARCH MFD FOR THE OWNER OF THE FILE MOVE DAT,-1(PDP) ;XWD PROJ,PROG MOVSI AC1,(SIXBIT /UFD/) ;EXTENSION "UFD" @@ -924,8 +907,7 @@ SETLE9: MOVE ITEM,JOB ;TRY CURRENT JOB PP. POP PDP,TAC ;YES POP PDP,TAC JRST DFERR6 - -;CHECK RETRIEVAL INFO FOR ELIGIBILITY + ;CHECK RETRIEVAL INFO FOR ELIGIBILITY ;ENTER WITH C(DAT) = PROTECTION TO CHECK IN BITS 0-2 ;EXIT TO CALL+1 IF NAME OR EXTENSION WRONG ;EXIT TO CALL+2 IF PROTECTION WRONG @@ -944,7 +926,6 @@ PROTEK: MOVEI TAC,PTR1(DEVDAT) ;POINT TO RETRIEVAL INFO AOS (PDP) PROTKX: MOVE AC1,-1(PDP) - PROTKY: MOVE ITEM,JOB XOR AC1,PRJPRG(ITEM) TRNN AC1,-1 ;SAVEM PROGRAMMER? @@ -962,95 +943,94 @@ PROT1: TLZ DAT,60000 ;DO NOT TEST OWNER READ OR PROTECT PROTECTION ;PROGRAMMER NUMBER? AOS(PDP) ;YES, ALL FILES AVAILABLE POPJ PDP, - - CLOSE UUO + ;CLOSE UUO ;CLOSE AN OUTPUT FILE EXTERNAL PIOMOD,WAIT1,OUT DFCLSO: TLNN DEVDAT,ENTRB ;ENTER DONE YET? - POPJ PDP, ;NO, FORGET IT + POPJ PDP, ;NO, FORGET IT HLRZ TAC,DEVACC(DEVDAT) ;SHOULD WE CLOSE? (POINT TO ACCESS ENTRY) IFN FTRCHK,< - SKIPN TAC ;ACCESS TABLE POINTER EXISTS? - HALT . ;IF NOT, HALT, NO RE-START POSSIBLE. + SKIPN TAC ;ACCESS TABLE POINTER EXISTS? + HALT . ;IF NOT, HALT, NO RE-START POSSIBLE. > MOVE TAC,TBITS(TAC) IFN FTRCHK, < TRNN TAC,ATCLO+RWTBIT ;CREATION OR UPDATE OF FILE IN PROGRESS? - HALT . ;NO, ERROR. CAN'T CONTINUE + HALT . ;NO, ERROR. CAN'T CONTINUE > LDB TAC,PIOMOD - CAIGE TAC,DR ;DUMP MODE? + CAIGE TAC,DR ;DUMP MODE? TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS? - JRST DFCL2 ;YES TO EITHER QUESTION + JRST DFCL2 ;YES TO EITHER QUESTION HLRZ TAC,DEVBUF(DEVDAT) ;NO. GET ADDRESS OF OUTPUT - ; BUFFER HEADER BLOCK. - TLO TAC,PROG ;RELOCATE - SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ? - JRST DFCL2 ;YES, DON'T OUTPUT - AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER + ; BUFFER HEADER BLOCK. + TLO TAC,PROG ;RELOCATE + SKIPG TAC1,@TAC ;VIRGIN BUFFERS (NO RING SET-UP) ? + JRST DFCL2 ;YES, DON'T OUTPUT + AOS TAC ;TAC POINTS TO OUTPUT BYTE POINTER ADD TAC1,[XWD PROG,1] ;TAC1 POINTS TO WORD COUNT PRECEDING - ; USER DATA BUFFER - HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER - SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER - ; NOT SET UP - SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED - TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ? - HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR - ; COMPUTED WORD COUNT - SKIPN AC1 ;WORD COUNT EQUAL TO 0? - JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK. - PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER - PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH + ; USER DATA BUFFER + HRRZ AC1,@TAC ;PICK UP OUTPUT BYTE POINTER + SKIPE AC1 ;DON'T CALCULATE WORD COUNT IF BYTE POINTER + ; NOT SET UP + SUBI AC1,(TAC1) ;CALCULATE NUMBER OF WORDS USER HAS FILLED + TRNE IOS,IOWC ;USER KEEPING HIS OWN WORD COUNT ? + HRRZ AC1,@TAC1 ;YES, SUBSTITUTE HIS COUNT FOR + ; COMPUTED WORD COUNT + SKIPN AC1 ;WORD COUNT EQUAL TO 0? + JRST DFCL2 ;YES, DON'T OUTPUT 0-WORD FINAL BLOCK. + PUSHJ PDP,OUT ;NO, GO WRITE LAST PARTIAL BUFFER + PUSHJ PDP,WAIT1 ;WAIT FOR IT TO FINISH DFCL2: PUSHJ PDP,SETBUF ;CHOOSE A BUFFER AREA FOR RETRIEVAL POINTERS TLO IOS,NMP!NCTRLC ;SET NMP, MUST NOT INTERRUPT POINTER WRITING MOVEM IOS,DEVIOS(DEVDAT) ;DO DFO4A WON'T READ NEW POINTERS IN - PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS + PUSHJ PDP,DFO4A ;WRITE OUT LAST BLOCK OF POINTERS HLRZ AC1,DEVBLK(DEVDAT) XOR AC1,DEVEXT(DEVDAT) TRNE AC1,-1 ;ONLY ONE BLOCK OF POINTERS? - PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER + PUSHJ PDP,RRIB ;NO. READ FIRST BLOCK INTO BUFFER PUSHJ PDP,SET000 - ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER + ADDI TAC1,3 ;SET TAC1 TO POINT TO 4TH WORD OF BUFFER MOVN AC1,DEVCNT(DEVDAT) ;PICK UP AND NEGATE SIZE OF FILE - HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB - PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION - -;CLOSE UUO CONTINUED. + HRLM AC1,@TAC1 ;NEGATIVE WORD COUNT INTO FOURTH WORD OF FIRST RIB + PUSHJ PDP,WRIB ;WRITE OUT FIRST BLOCK OF RETRIEVAL INFORMATION + ;CLOSE UUO CONTINUED. ;THE FILE AND ALL ITS POINTERS HAVE BEEN PUT ON DISK. ;NOW PUT ENTRY IN DIRECTORY. + TLZ DEVDAT,ENTRB HLRZ TAC,DEVACC(DEVDAT) ;PICK UP ACCESS TABLE POINTER MOVE DAT,TBITS(TAC) ;GET STATUS BITS AND READ COUNT - TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE? - JRST DFCLU1 ;YES + TRZE DAT,RWTBIT ;CLOSING AND UPDATED FILE? + JRST DFCLU1 ;YES TLNE DEVDAT,DSKRLB ;RESET UUO IN PROGRESS? - JRST DFC16A ;YES - TRNN DAT,ATIND ;IUS NAME ALREADY IN DIRECTORY? - JRST DFCL20 ;NO. INSERT IT + JRST DFC16A ;YES + TRNN DAT,ATIND ;IS NAME ALREADY IN DIRECTORY? + JRST DFCL20 ;NO. INSERT IT MOVEM IOS,DEVIOS(DEVDAT) - PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY. + PUSHJ PDP,FINDE ;BRING IN BLOCK WITH THIS ENTRY. MOVE TAC,DEVEXT(DEVDAT) ;CHANGE BLOCK POINTER - EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK + EXCH TAC,@TAC1 ;TAC1 POINTS TO ENTRY IN UFD BLOCK MOVEM TAC,DEVEXT(DEVDAT);SAVE POINTER TO RIB OF OLD VERSION FOR RECLAM - PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT + PUSHJ PDP,WUFD ;WRITE THE BLOCK BACK OUT HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER NOSCHEDULE PUSH PDP,ATPP(TAC) ;SAVE XWD PROJ,PROG - PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY - POP PDP,AC2 ;XWD PROJ,PROG + PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY + POP PDP,AC2 ;XWD PROJ,PROG PUSHJ PDP,SCNAT0 ;SCAN FOR ANY OTHERS READING OLD VERSION JRST DFCL17 ;NONE DFCL16: MOVEI AC1,DTBIT ;DELETE WHEN THRU READING SINCE IT WAS JUST UPDATED IORM AC1,TBITS(TAC) PUSHJ PDP,SCNAT2 ;LOOK FOR MORE - JRST CLRBUF ;NO MORE + JRST CLRBUF ;NO MORE JRST DFCL16 -DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE. - ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE. +DFC16A: PUSHJ PDP,CLRAT ;UPON RESET UUO WITH PARTIALLY WRITTEN FILE. + ; CLEAR ACCESS TABLE ENTRY RECLAIM DISK SPACE. DFCL17: SCHEDULE HRRZ TAC,DEVEXT(DEVDAT) ;RIB# OF FILE @@ -1059,56 +1039,53 @@ DFCL17: SCHEDULE DFCL20: PUSHJ PDP,INSDIR ;INSERT THE NAME HLRZ TAC,DEVACC(DEVDAT) ;ACCESS TABLE POINTER NOSCHEDULE - PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY - JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE + PUSHJ PDP,CLRAT ;REMOVE THE ACCESS ENTRY + JRST CLRBUF ;CLEAR ANY BUFFER IN FREE STORAGE DFCLU1: MOVEM DAT,TBITS(TAC) ;STORE STATUS BITS (WITH UPDATE MARKER CLEARED) TLN DEVDAT,LOOKB ;WAS IUNPUT SIDE OF FILE ALSO CLOSED? - POPJ PDP, ;NO, LET THE USER KEEP READING IT + POPJ PDP, ;NO, LET THE USER KEEP READING IT TRNE DAT, RCOUNT ;YES, ANYBODY ELSE STILL READING IT? - JRST DFCLU2 ;YES - TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION? - JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE - PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY + JRST DFCLU2 ;YES + TRNE DAT,DTBIT ;NO, WAS IT MARKED FOR DELETION? + JRST DFC16A ;YES, GO DELETE IT AND RECLAIM DISK SPACE + PUSHJ PDP,CLRAT ;NO, CLEAR ACCESS TABLE ENTRY DFCLU2: HRRZS DEVACC(DEVDAT) ;CLEAR POINTER TO ACCESS TABLE - JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT., - - - ;CLOSE UUO CONTINUED. + JRST CLRBUF ;CLEAR ANY BUFFER AREA AND EXIT., + ;CLOSE UUO CONTINUED. ;CLOSE AN INPUT FILE. DFCLSI: TLZN DEVDAT,LOOKB POPJ PDP, DFCL21: HLRZ TAC,DEVACC(DEVDAT) ;POINT TO ACCESS ENTRY - JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED - ; (PROBABLY ^C DURING EARLIER ATTEMPT) + JUMPE TAC,CPOPJ ;EXIT IF ACCESS TABLE ALREADY CLOSED + ; (PROBABLY ^C DURING EARLIER ATTEMPT) MOVE TAC1,TBITS(TAC) ;GET STATUS BITS IFN FTRCHK,< - TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)? + TRNE TAC1,ATCLO ;IS THIS FILE SIMPLY BEING CREATED (NOT UPDATED)? HALT CPOPJ ;IF SO, SOMEBODY IS VERY CONFUSED. > NOSCHEDULE SOS TAC1,TBITS(TAC) ;DECREMENT RCOUNT TRNE TAC1,RCOUNT+RWTBIT ;ANY MORE READS? OR OUTPUT CLOSE TO DO? - JRST DFCL23 ;YES, LEAVE + JRST DFCL23 ;YES, LEAVE - TRNE TAC1,DTBIT ;TO BE DELETED? - JRST DFC16A ;YES - PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT + TRNE TAC1,DTBIT ;TO BE DELETED? + JRST DFC16A ;YES + PUSHJ PDP,CLRAT ;CLEAR THE ENTRY AND EXIT DFCL23: SCHEDULE TLZN DEVDAT,INPB ;ANY INPUT UUO' - JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF + JRST CLRBUF ;NO, JUST EXIT, RETURNING MON BUF PUSHJ PDP,SETBUF ;YES, UPDATE ACCESS DATE AS FOLLOWS: - PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION. + PUSHJ PDP,RRIB ;READ IN JUST BLOCK OF RETRIEVAL INFORMATION. SUBI TAC1,BLKSIZ-2 ;SET TAC1 TO 2ND WORD OF BLOCK LDB AC1,[POINT 17,@TAC1,35] ;GET PREVIOUS ACCESS DATA. - CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY? - JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT. - MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE. + CAMN AC1,THSDAT ;ALREADY ACCESSED EARLIER TODAY? + JRST CLRBUF ;YES, JUST CLEAR BUFFER AND EXIT. + MOVE AC1,THSDAT ;NO, STORE TODAY(S DATE AS NEW ACCESS DATE. DPB AC1,[POINT 17,@TAC1,35] ; - PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION. - JRST CLRBUF ;CLEAR BUFFER AND EXIT. - -SUBTTL DIRECTORY SEARCHING + PUSHJ PDP,WRIB ;REWRITE FIRST BLOCK OF RETRIEVAL INFORMATION. + JRST CLRBUF ;CLEAR BUFFER AND EXIT. + SUBTTL DIRECTORY SEARCHING ;SEARCH DIRECTORY FOR A PARTICULAR ENTRY. ;ENTRY BY: MOVE DAT,NAME ; HLLZ AC1,EXTENSION @@ -1118,74 +1095,73 @@ SUBTTL DIRECTORY SEARCHING ; EXIT2 NAME FOUND, TAC POINTS TO ENTRY DIRSRC: PUSH PDP,AC1 - PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION + PUSH PDP,DAT ;0(PDP) IS FILENAME,-1(PDP) IS EXTENSION PUSHJ PDP,SETPTR ;READ UFD RETRIEVAL POINTERS DRSRC0: HRRZ TAC,DEVACC(DEVDAT) CAILE TAC,PTRN(DEVDAT) ;MORE POINTERS IN CORE? - JRST DRSRC7 ;NO, GET MORE. + JRST DRSRC7 ;NO, GET MORE. HRRZ TAC,(TAC) JUMPE TAC,DRSRC6 ;0 SIGNALS END OF POINTERS AOS DEVACC(DEVDAT) ;NEXT POINTER AOS DEVCNT(DEVDAT) ;COUNT UFD BLOCKS SEARCHED - PUSHJ PDP,MQIN ;READ IN DATA BLOCK - JRST RERA ;ERROR, YOU LOSE. + PUSHJ PDP,MQIN ;READ IN DATA BLOCK + JRST RERA ;ERROR, YOU LOSE. MOVE TAC1,DSKBUF(DEVDAT) ;XWD-L,POINTER HRRZ TAC,TAC1 - TLNN IOS,UBFS ;DUMP MODE? - HRLI TAC,PROG ;NO. RELOCATE. + TLNN IOS,UBFS ;DUMP MODE? + HRLI TAC,PROG ;NO. RELOCATE. HLLZ AC1,-1(PDP) ;SIXBIT/EXT/ -DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED? - JRST DRSRC0 ;YES +DRSR3A: SKIPN AC3,@TAC ;BLOCK ENTIRELY SEARCHED? + JRST DRSRC0 ;YES ADDI TAC,1 - CAMN AC3,(PDP) ;NAMES MATCH? - JRST DRSRC8 ;YES + CAMN AC3,(PDP) ;NAMES MATCH? + JRST DRSRC8 ;YES DRSRC4: ADDI TAC,1 HRRZ AC3,TAC CAIE AC3,BLKSIZ(TAC1) ;IS BLOCK ENTIRELY SEARCHED? - JRST DRSR3A ;NO + JRST DRSR3A ;NO JRST DRSRC0 -DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK? +DRSRC7: TLNE IOS,NMP ;ANY MORE POINTERS ON DISK? JRST DRSRC6 ;NO - PUSHJ PDP,GETPTR ;YES, GET SOME + PUSHJ PDP,GETPTR ;YES, GET SOME JRST DRSRC0 -DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH +DRSRC8: HLLZ AC3,@TAC ;DOES EXTENSION MATCH CAME AC3,AC1 - JRST DRSRC4 ;NO - SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY + JRST DRSRC4 ;NO + SUBI TAC,1 ;POINT TO FIRST WORD OF ENTRY - AOS -2(PDP) ;YES, ENTRY IS FOUND + AOS -2(PDP) ;YES, ENTRY IS FOUND MOVSS DEVCNT(DEVDAT) ;SAVE COUNT OF UFD BLOCKS FOR USE AT CLOSE -;EXIT + + ;EXIT DRSRC6: POP PDP,DAT POP PDP,AC1 - POPJ PDP, ;"FILE" NOT FOUND + POPJ PDP, ;"FILE" NOT FOUND ;CHECK PROTECTION ON UFD -DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION +DSRC10: PUSH PDP,AC1 ;PUSH EXTENSION PUSHJ PDP,SETPTR MOVSI DAT,200000 ;SET UP TO TEST READ BIT - TLNE IOS,10 ;IS IT LOOKUP> + TLNE IOS,10 ;IS IT LOOKUP? ROT DAT,-1 ;NO,TEST WRITE PROTECTION MOVEI TAC,PTR1(DEVDAT) - HRRZ AC1,-3(PDP) ;XWD PROJ,PROG + HRRZ AC1,-3(PDP) ;XWD PROJ,PROG TLZ IOS,PRCHG PUSHJ PDP,PROTKY - TLO IOS,PRCHG ;FLAG PROTECTION CHANGE + TLO IOS,PRCHG ;FLAG PROTECTION CHANGE PUSH PDP,DEVFIL(DEVDAT) ;PUSH FILENAME TO MAKE PDL LOOK LIKE DIRSRC JRST DRSRC0 - - -;FIND A UFD ENTRY, IT MUST BE THERE. + ;FIND A UFD ENTRY, IT MUST BE THERE. EXTERNAL AUREQ,AUWAIT -FINDE: AOSE AUREQ +FINDE: AOSE AUREQ PUSHJ PDP,AUWAIT TLO IOS,AUFLG HLRZ TAC,SETCNT(DEVDAT) ;SET TAC TO UFD POINTERS @@ -1196,31 +1172,30 @@ FINDE1: MOVSM TAC,DEVBLK(DEVDAT);READ A POINTER BLOCK PUSHJ PDP,RRIA CAILE DAT,BLKSIZ-2 ;POINTER IN THIS BLOCK? JRST FINDE2 ;NO, GET NEXT ONE - SUBI DAT,1 ;YES, BRING THEM IN + SUBI DAT,1 ;YES, BRING THEM IN HRRM DAT,DEVBLK(DEVDAT) ;SET INDEX INTO RIB PUSHJ PDP,DFIN4 ;COPY POINTERS INTO DDB HRRZ TAC,PTR1(DEVDAT) ;GET RETRIEVAL POINTER FOR UFD BLOCK - PUSHJ PDP,MQIN ;READ THE UFD BLOCK - JRST RERA ;ERROR - PUSHJ PDP,SET000 ;FIND THE ENTRY + JRST RERA ;ERROR + PUSHJ PDP,SET000 ;FIND THE ENTRY HLLZ AC1,DEVEXT(DEVDAT) ;GET EXTENSION FROM DDB -SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD +SRCU1: MOVE TAC,@TAC1 ;GET FILE NAME FROM UFD ADDI TAC1,1 CAME TAC,DEVFIL(DEVDAT) ;SAME? AOJA TAC1,SRCU1 ;NAMES DO NOT MATCH HLLZ TAC,@TAC1 ;GET EXTENSION FROM UFD CAME TAC,AC1 ;SAME? AOJA TAC1,SRCU1 ;EXTENSIONS DO NOT MATCH - POPJ PDP, ;FOUND IT + POPJ PDP, ;FOUND IT + -FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK +FINDE2: PUSHJ PDP,SET176 ;GET THE NEXT POINTER BLOCK HLRZ TAC,@TAC1 SUBI DAT,BLKSIZ-2 ;BACK UP DAT JRST FINDE1 - -;INSERT AN ENTRY IN A DIRECTORY. + ;INSERT AN ENTRY IN A DIRECTORY. EXTERNAL AUREQ,AUWAIT,AUAVAL @@ -1229,7 +1204,7 @@ INSDIR: AOSE AUREQ TLO IOS,AUFLG SETZM DEVCNT(DEVDAT) ;CLEAR BEFORE COUNTING BLOCK OF UFD HLRZ TAC,SETCNT(DEVDAT) ;BLOCK# OF UFD RIB - PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,. + PUSHJ PDP,SETPTR ;SET UP FIRST POINTERS,. SOS DEVACC(DEVDAT) ;SYNC INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER, @@ -1238,12 +1213,12 @@ INSD1: AOS TAC,DEVACC(DEVDAT) ;GET NEXT POINTER, CAILE TAC,PTRN(DEVDAT) ;ANY MORE IN CORE? JRST INSD10 ;NO, GET SOME MORE -INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER +INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER JUMPE TAC,INSD5 ;0 SIGNALS END OF POINTERS - PUSHJ PDP,MQIN ;READ UFD BLOCK + PUSHJ PDP,MQIN ;READ UFD BLOCK JRST RERA ;ERROR. - PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 + PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 SKIPE @TAC1 ;IS IT ZERO? JRST INSD1 ;NO, BLOCK FULL. @@ -1251,33 +1226,31 @@ INSD2: HRRZ TAC,(TAC) ;GET RETRIEVAL POINTER PUSHJ PDP,INSD3 ;INSERT ENTRY. JRST WUFD ;WRITE BLOCK AND LEAVE - -;INSERT THE ENTRY. + ;INSERT THE ENTRY. INSD3: HRRZ AC1,DSKBUF(DEVDAT) INSD3B: CAIN AC1,(TAC1) ;BEGINNING OF BLOCK? - JRST INSD3A ;YES + JRST INSD3A ;YES SUBI TAC1,2 SKIPN @TAC1 ;SEARCH UFD BLOCK BACKWARDS ; FOR LAST NON-ZERO FILENAME. JRST INSD3B - ADDI TAC1,2 ;MOVE IN NAME. + ADDI TAC1,2 ;MOVE IN NAME. INSD3A: MOVE TAC,DEVFIL(DEVDAT) MOVEM TAC,@TAC1 - ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER. + ADDI TAC1,1 ;MOVE IN EXTENSION & POINTER. MOVE TAC,DEVEXT(DEVDAT) IFN FTRCHK,< TRNN TAC,-1 ;POINTER TO BLOCK 0 - HALT .+1 ;FOR RETRIEVAL INFO - ; CONTINUE-GET BAD INFO MESSAGE + HALT .+1 ;FOR RETRIEVAL INFO + ; CONTINUE-GET BAD INFO MESSAGE > MOVEM TAC,@TAC1 POPJ PDP, - -;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY + ;CREATE NEW UFD BLOCK AND ADD ENTRY. THEN FIND THE LAST OR ONLY ;POINTER BLOCK, ADD POINTER IF POSSIBLE. IF NOT POSSIBLE. ;CREATE NEW POINTER BLOCK AND PUT THE POINTER IN IT. @@ -1327,8 +1300,7 @@ INSD7A: MOVE TAC,SETCNT(DEVDAT) ;GET POINT SAVED ABOVE TLZ IOS,AUFLG MOVEM IOS,DEVIOS(DEVDAT) POPJ PDP, - -;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER. + ;ROOM FOR ANOTHER POINTER IN THIS BLOCK. FIND LAST POINTER. ;INSERT NEW ONE, AND WRITE BLOCK OUT. INSD8: SKIPN @TAC1 @@ -1347,13 +1319,10 @@ INSD10: TLNE IOS,NMP ;ANY MORE ON DISC? INSD11: TRNN IOS,IOIMPM JRST WERA ;IT WAS NOT, YOU LOSE. - PUSHJ PDP,WLERA ;GET ANOTHER BLOCK HRRM TAC,SETCNT(DEVDAT) JRST INSD5A - - -;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT. + ;OUTPUT A UFD BLOCK, PERFORM CHECKSUM IF NEEDED, WRITE THE BLOCK OUT. ;IF WRITE-LOCK ERROR, TRY ANOTHER BLOCK. FINALLY, IF POINTERS WERE ;ALTERED, WRITE THEM OUT. @@ -1401,8 +1370,7 @@ WUFD3: MOVE TAC1,DSKCNT(DEVDAT);WAS ERROR WRITE-LOCK? MOVE TAC1,DEVACC(DEVDAT) HRRM TAC,(TAC1) JRST WUFD1 - -SUBTTL ACCESS TABLE PROCESSING + SUBTTL ACCESS TABLE PROCESSING ;SCAN ACCESS TABLE. ;EXIT TO CALL+1 WITH TAC SET TO THE LAST ENTRY IF NOT THERE. ;EXIT TO CALL+2 WITH TAC SET TO CORRECT ENTRY IF THERE. @@ -1428,18 +1396,19 @@ SCNAT1: CAME AC2,ATPP(TAC) ;PROJ,-PROG. THE SAME? ;CONTINUE SCAN FROM CURRENT ENTRY + SCNAT2: HRRZ DAT,ATLINK(TAC) ;ANY MORE ENTRIES? JUMPE DAT,CPOPJ ;NO MOVE TAC,DAT ;YES, GO TO THE NEXT ONE JRST SCNAT1 -;CLEAR AN ACCESS ENTRY. + ;CLEAR AN ACCESS ENTRY. ;IT IS ASSUMED THAT NO SCHEDULING WILL TAKE PLACE. ;ENTER WITH TAC POINTING TO THE ENTRY TO WIPE OUT. + CLRAT: IFN FTRCHK,< SKIPN TAC ;ATTEMPT TO CLEAR NON EXISTENT ACCESS TABLE IS AN ERROR - HALT SCNHLT ;CONTINUE WILL POPJ AND EXIT. > HRRZS DEVACC(DEVDAT) ;CLEAR ACCESS TABLE POINTER IN DEVICE DATA BLOCK @@ -1461,7 +1430,8 @@ CLRAT1: MOVE AC1,AC2 ;PICKUP THE NEXT ACCESS TABLE HRRM AC2,ATLINK(AC1) ;LINK AROUND IT JRST CLRCOR ;CLEAR THE CORE -;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK. + + ;FIND A HOLD FOR ACCESS TABLE ENTRY AND SET A LINK. ;BUILD UP THE ENTRY ;UPON ENTRY, DAT SHOULD CONTAIN TEST BITS TO SET @@ -1479,8 +1449,7 @@ SETAT: PUSHJ PDP,GETFCR ;TAC1 POINTS TO 4 WORD BLOCK HRRZM TAC1,FAT ;POINT FAT TO THIS NEW ENTRY SETHLT: POPJ PDP, ;HALT PC HERE IF END OF TABLE WITHOUT FINDING ; ENTRY TO BE CLEARED - -SUBTTL DUMP INPUT/OUTPUT + SUBTTL DUMP INPUT/OUTPUT ;DUMP MODE OUTPUT EXTERNAL COMCHK,ADRERR,SAVDDL @@ -1511,7 +1480,7 @@ DFDO1A: PUSHJ PDP,SATGET ;AQUIRE A NON-FULL SAT BLOCK MOVMS ITEM ADDI ITEM,BLKSIZ-1 ;MAKE E.G. 129 WORDS USE 2 DISK BLOCK ASH ITEM,-BLKP2 ;NUMBER OF BLOCK REQUIRED FOR THIS WRITE -DFD02A: HRRZ AC1,SATPTR + DFD02A: HRRZ AC1,SATPTR MOVE AC2,SATBK2 DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS) JRST DFDO6 ;NOT AVAILABLE @@ -1529,15 +1498,13 @@ DFDO1B: PUSHJ PDP,GETBIT ;ASK FOR C(ITEM BITS) MOVN TAC,ITEM LSH TAC,BLKP2 HLRES TAC1 - CAML TAC,TAC1 HRLM TAC,DSKBUF(DEVDAT) ;ONLY A PARTIAL WRITE HLRE TAC1,DSKBUF(DEVDAT) MOVMS TAC1 PUSHJ PDP,UPDEVC ;UPDATE SIZE OF FILE ADDM ITEM,SETCNT(DEVDAT) ;NON UPDATE RELATIVE BLOCK# WITHIN THE FILE - - MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT + MOVE TAC1,DSKBUF(DEVDAT) ;PICK UP ADDRESS AND WORD COUNT TLZN TAC1,BLKSIZ-1 ;AN EVEN NUMBER OF DISK BLOCKS TO BE WRITTEN? JRST DFDO2G ;YES, DON'T WORRY ABOUT PARTIAL BLOCK ;HANDLING PROBLEMS @@ -1558,6 +1525,8 @@ DFDO2C: ADD AC1,[XWD BLKSIZ,BLKSIZ] ;SET UP ADDRESS, WORD COUNT, AND LOGICAL JUMPL AC1,DFDO2C ;OF THIS DUMP MODE OUTPUT REQUEST. SUB AC1,[XWD BLKSIZ,BLKSIZ] HLL AC2,AC1 ;SAVE LH + ADDI AC1,(PROG) ;RELOCATE USER'S ADDRESS + HLL AC1,AC2 ;IN CASE OF OVERFLOW INTO LH(2 SEG SAVE) DFDO2D: MOVE AC2,(AC1) ;MOVE DATA FROM END OF USER'S MOVEM AC2,(TAC1) ;OUTPUT AREA DT MONITOR BUFFER AOBJP TAC1,. @@ -1588,6 +1557,7 @@ DFDO2B: POP PDP,ITEM ;RESTORE COUNT ;TOSS OUT A SERIES OF CONSECUTIVE POINTERS HRRZ AC2,DEVACC(DEVDAT) ;GET RETRIEVAL POINTER POINTER + DFDO3A: MOVE AC1,@AC2 ;IS POINTER ALREADY THERE? ADDI AC2,1 TRNE AC1,-1 @@ -1606,7 +1576,6 @@ DFDO3B: AOS DAT,(PDP) ;PUT A POINTER IN CORE MOVE TAC,-1(PDP) PUSHJ PDP,SAVDDL ;ADJUST ADR IN CASE OF HIGH SEG SAVE PUSHJ PDP,CHKSUM - HRLM TAC1,-1(AC2) > @@ -1622,8 +1591,7 @@ DFDO3C: MOVE TAC1,[XWD BLKSIZ,BLKSIZ];INCREMENT IOWD JRST DFDO1 ;NOT FINISHED, GET NEXT SET POP PDP,TAC ;BACK UP PDP AOJA UUO,DFDO0 ;GO BAK FOR MORE - -;WRITE POINTERS ONTO DISK + ;WRITE POINTERS ONTO DISK DFDO4: HRLM ITEM,(PDP) ;SAVE COUNT OF BLOCKS TO WRITE PUSHJ PDP,SETBUF ;FIND SOME 200 WORD AREA @@ -1664,8 +1632,7 @@ DFDO9: HRLM ITEM,(PDP) ;SAVE BLOCK COUNT WITH BLOCK# POP PDP,AC2 ;RESTORE POINTER INTO RETRIEVAL INFO HLRZ ITEM,(PDP) ;RESTORE COUNT OF BLOCKS TO WRITE THIS ITERATION JRST DFDO3B - -;DUMP MODE INPUT. + ;DUMP MODE INPUT. EXTERNAL COMCHK,ADRERR @@ -1703,9 +1670,7 @@ DFDI0A: ADDI TAC,1 ;FROM XWD -L,FIRST-ADDRESS ADDM TAC,-2(PDP) AOS DEVACC(DEVDAT) ;NEXT POINTER AOS SETCNT(DEVDAT) ;NEXT RELATIVE BLOCK - - -DFDI1: SKIPGE -2(PDP) ;MORE TO GO? + DFDI1: SKIPGE -2(PDP) ;MORE TO GO? JRST DFDI2 ;YES DFDI1A: MOVE TAC1,-1(PDP) ;NO, PROCESS THE FIRST BLOCK @@ -1733,8 +1698,7 @@ DFDI1B: SUB PDP,[XWD 2,2] ;BACK UP PDP, REMOVE XWD AND IOWD DFDI1C: MOVE IOS,[XWD IOEND,IODEND] ;NO MORE INPUT ORB IOS,DEVIOS(DEVDAT) POPJ PDP, - -;DUMP INPUT CONTINUED, + ;DUMP INPUT CONTINUED, ;FIND A SERIES OF CONSECUTIVE BLOCKS TO READ AT ONCE DFDI2: HRRZ AC2,DEVACC(DEVDAT) ;GET NEXT POINTER @@ -1753,7 +1717,6 @@ DFDI3: ADDI TAC,BLKSIZ ;ANY MORE TO READ? CAIG AC2,PTRN(DEVDAT) SKIPN AC3,@AC2 ;END-FILE JRST DFDI4 ;YES - CAIN TAC1,-1(AC3) ;STILL CONSECUTIVE? AOJA TAC1,DFDI3 ;YES, LOOP @@ -1771,13 +1734,12 @@ DFDI6: HRRZ TAC1,DEVACC(DEVDAT) MOVS TAC1,@TAC HRLM TAC,(PDP) HRR TAC1,-3(PDP) - MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT + MOVE TAC,(PDP) ;GET POINTER TO FIRST RETRIEVAL POINTER FOR THIS INPUT MOVE TAC,(TAC) ;GET FIRST LOGICAL BLOCK# MOVEM TAC1,DSKBUF(DEVDAT) ;STORE CONTROLLING IOWD PUSHJ PDP,MQIN ;REQUEST THE INPUT JFCL ;ERRORS IGNORED - -;DUMP INPUT CONTINUED. + ;DUMP INPUT CONTINUED. ;IF THERE IS CHECKSUMMING. CHECK IT, ELSE INCREMENT IOWD ;AND LOOP. @@ -1825,8 +1787,7 @@ DFDI10: MOVEI AC2,PTR1(DEVDAT) ;NO MORE POINTERS ON DISK HRRM AC2,DEVACC(DEVDAT) SETZM @AC2 POPJ PDP, - -SUBTTL USETO/USETI + SUBTTL USETO/USETI ;SETD AND SETI UUOS EXTERNAL WAIT1 @@ -1876,8 +1837,7 @@ DFSET1: PUSHJ PDP,RRI ;READ THEM IN MOVNS TAC ADDM TAC,SETCNT(DEVDAT) JRST DFSETC - -;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON + ;THE DESIRED POINTER MAY BE IN CORE. IF THERE ARE MORE POINTERS ON ;DISC, THEN CORE IS FULL, AND THE POINTER IS IN CORE, OTHERWISE ;A CHECK IS MADE TO INSURE THAT THE END FILE IS AFTER THE DESIRED ;POINTER. @@ -1913,7 +1873,7 @@ DFSET6: SUBI TAC1,PTR1(DEVDAT) PUSHJ PDP,DFO4A ;NO, WRITE THEM OUT HRRZ TAC,DEVEXT(DEVDAT) ;GET BLOCK# OF FIRST RIB PUSHJ PDP,SETPTR ;READ FIRST RIB -DFSETB: MOVEI TAC,1 ;RESET SETCNT + DFSETB: MOVEI TAC,1 ;RESET SETCNT HRRM TAC,SETCNT(DEVDAT) ;"POSITIONED" AT RELATIVE BLOCK 1 DFSETC: HRRZ TAC,DSKBUF(DEVDAT) ;LSET TAC TO FIRST POINTER @@ -1932,7 +1892,6 @@ DFSETD: HRRZ AC1,SETCNT(DEVDAT) HRRZ AC2,TAC1 ADD AC2,AC1 CAIL AC2,(UUO) - JRST DFSET7 ;YES ADDI AC2,1 ;NO. GET NEXT BLOCK HRRM AC2,SETCNT(DEVDAT) @@ -1962,13 +1921,13 @@ DFSET8: ADDI TAC1,1 MOVEM IOS,DEVIOS(DEVDAT) PUSHJ PDP,DFO6A ;CLEAR POINTERS JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE - -SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING + SUBTTL INPUT/OUPUT UUO'S. RETRIEVAL POINTER PROCESSING ;INPUT UUO ;* INDICATES INTERRUPT LEVEL EXTERNAL ADVBFF + DFIN: TLNN DEVDAT,LOOKB ;FILE OPEN? JRST DFERR2 ;NO, UNDEFINED FILE TLZ IOS,IO ;SET INPUT INDICATOR @@ -1994,6 +1953,7 @@ DFIN1E: TLO IOS,LIR ;*EMPTY FILE MOVEM IOS,DEVIOS(DEVDAT) ;* POPJ PDP, ;* + DFIN1B: TLNE IOS,NMP ;*ANY MORE POINTERS ON DISK? TLO IOS,LIR ;*NO, THIS IS THE LAST READ JRST DFIN1A ;* @@ -2003,8 +1963,7 @@ DFIN2: MOVEM IOS,DEVIOS(DEVDAT) PUSHJ PDP,GETPTR ;READ RIB COPY POINTERS INTO DDB HRRZ TAC1,DEVACC(DEVDAT) JRST DFIN1D - -;NEED NEW POINTER FROM DISK + ;NEED NEW POINTER FROM DISK GETPTR: MOVE AC2,DEVOAD(DEVDAT) ;POINTERS DIFFER? TLNE AC2,PNTDIF @@ -2016,14 +1975,13 @@ DFIN4: MOVEI AC2,PTR1(DEVDAT) ;RESET DEVACC MOVE TAC,DEVBLK(DEVDAT) ;RESET DEVBKO MOVEM TAC,DEVBKO(DEVDAT) ;BLOCK # WORD INDEX OF A CURRENT RETRIEVAL PACKET GTPTR1: PUSHJ PDP,SET000 ;SET TAC1 TO FIRST WORD OF RIB - MOVE IOS,DEVIOS(DEVDAT) + MOVE IOS,DEVIOS(DEVDAT) HRRZ AC3,DEVBLK(DEVDAT) ;WORD INDEX OF RETRIEVAL POINTER PACKET ADD AC3,TAC1 ;AC3 POINTS TO NEXT POINTER WITHIN RIB ADDI TAC1,BLKSIZ-2 ;TAC1 POINTS TO WORD 127 MOVEI AC1,PTRN(DEVDAT) ;DDB END CHECK DFIN5: CAML AC3,TAC1 ;POINTER BLOCK EMPTY? - JRST DFIN7 ;YES, GET SOME MORE MOVE TAC,@AC3 ;GET RETRIEVAL POINTER @@ -2045,8 +2003,7 @@ DFIN6A: MOVEM IOS,DEVIOS(DEVDAT) MOVSI AC1,PNTDIF ;CLEAR "POINTER DIFFER" ANDCAM AC1,DEVOAD(DEVDAT) ;SINCE DDB IS COPY OF RETRIEVAL DATA. POPJ PDP, - -DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH + DFIN7: HLRZ TAC,@TAC1 ;RIB LINK TO TAC RH JUMPE TAC,DFIN8 ;DONE IF LINK=0 MOVSM TAC,DEVBLK(DEVDAT) ;SET BLOCK#, WORD INDE FOR NEXT PACKET PUSH PDP,AC2 @@ -2067,8 +2024,7 @@ DFINX: PUSHJ PDP,ADVBFF ;*ANY MORE EMPTY BUFFERS? POPJ PDP, ;* JRST DFIN1 ;*NO,FILL NEXT ONE - -;OUTPUT UUO + ;OUTPUT UUO EXTERNAL WSYNC,ADVBFE @@ -2087,7 +2043,6 @@ DFOUT1: HRRZ DAT,DEVACC(DEVDAT) ;*GET POINTER LOC MOVSI TAC1,PNTDIF ;* ORM TAC1,DEVOAD(DEVDAT) ;* > - HRRZ TAC,@DAT ;*ALREADY HAVE A POINTER? JUMPN TAC,DFOT3A ;*YES IF JUMP CAIE DAT,PTRN(DEVDAT) ;*NO, CLEAR NEXT ONE? @@ -2111,8 +2066,7 @@ DFOUT1: HRRZ DAT,DEVACC(DEVDAT) ;*GET POINTER LOC DFOT3A: CAIE DAT,PTRN(DEVDAT) ;*LIST FULL? JRST QOUT ;*NO, WRITE AND LEAVE - -;OUTPUT UUO CONTINUED. + ;OUTPUT UUO CONTINUED. ;WRITE OUT POINTER LIST. PUSHJ PDP,SETBFO ;CHOOSE AN OUTPUT BUFFER TO READ RIB INTO @@ -2155,8 +2109,7 @@ DFO6A: MOVEI TAC,PTR1(DEVDAT) MOVE TAC,DEVBLK(DEVDAT) MOVEM TAC,DEVBKO(DEVDAT) ;SAE BLOCK#,WORD INDEX OF CURRENT POINTER PACKET POPJ PDP, - -DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT + DFO7A: MOVEM TAC,DEVOAD(DEVDAT) ;SAVE VRGPTR BIT PUSHJ PDP,SET177 ;SET TAC1 TO WORD 128 SETZM @TAC1 ;CLEAR BLOCK# WORD AOS (PDP) ;ALWAYS SKIP RETURN @@ -2175,7 +2128,6 @@ NEWRIB: PUSH PDP,AC3 ;CREATE A NEW RETRIEVAL BLOCK MOVSM TAC,DEVBLK(DEVDAT) ;STORE BLOCK#, INDEX FOR NEW BLOCK PUSHJ PDP,SET176 ;SET TAC1 TO WORD 127 AGAIN HRLM TAC,@TAC1 ;LH LINKS TO NEW BLOCK - MOVE TAC,AC3 ;BLOCK# OF CURRENT BLOCK PUSHJ PDP,WRIA ;WRITE THE BLOCK OUT @@ -2199,8 +2151,7 @@ DFOUT9: EXCH TAC,DEVBLK(DEVDAT) ;SAVE NEW BLOCK# INDEX. GET OLD BLOCK# INDEC PUSHJ PDP,WRIA ;WRITE THIS BLOCK OF POINTERS OUT PUSHJ PDP,RRI ;READ NEXT BLOCK OF POINTERS IN JRST DFO8A - -;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER + ;ENTER HERE AT INTERRUPT LEVEL TO WRITE ANOTHER EXTERN MJOBN @@ -2222,8 +2173,7 @@ DFOUTX: PUSHJ PDP,ADVBFE ;*ANY MORE TO DO? POP PDP,AC2 ;* POP PDP,AC1 ;* POPJ PDP, ;* - -SUBTTL READ/WRITE RETRIEVAL POINTERS + SUBTTL READ/WRITE RETRIEVAL POINTERS ;INPUT RETRIEVAL BLOCK. RRIB: SKIPA TAC,DEVEXT(DEVDAT) ;READ FIRST RETRIEVAL BLOCK @@ -2264,8 +2214,7 @@ SET176: HRRZ TAC1,DSKBUF(DEVDAT) SET000: HRRZ TAC1,DSKBUF(DEVDAT) JRST S177A - - + ;PUT POINTER INFO IN DDB ;ENTER WITH TAC CONTAINING THE BLOCK NUMBER OF THE POINTERS. @@ -2284,6 +2233,7 @@ SETPTR: HRLZM TAC,DEVBLK(DEVDAT) ;XWD RIB#, 0...0 INDEX ;ENTER WITH TAC POINTING TO FIRST RETRIEVAL BLOCK OF THE FILE ; TO BE DELETED. + RECLAM: PUSHJ PDP,SETBUF ;FIND SPACE IN USER AREA PUSHJ PDP,RECLM5 ;GET FIRST POINTER BLOCK @@ -2297,6 +2247,7 @@ RECLM2: CAML DAT,TAC1 ;MORE POINTERS IN BLOCK? POP PDP,TAC1 AOJA DAT,RECLM2 ;GO BACK FOR MORE + RECLM4: HLRZ TAC,@TAC1 ;PICK UP POINTER TO NEXT BLOCK JUMPE TAC,RECLM6 ;NO MORE, GO HOME. RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK. @@ -2311,8 +2262,7 @@ RECLM5: PUSHJ PDP,RRIA ;READ IN A R.I. BLOCK. RECLM6: POP PDP,TAC JRST CLRBUF ;CLEAR ANY DUMP BUFFER AND LEAVE - -;RELEASE UUO. + ;RELEASE UUO. EXTERNAL DAREQ,DAAVAL @@ -2329,8 +2279,7 @@ DFREL: TLO DEVDAT,DSKRLB ;MARK RELEASE (VIA RESET UUO) IN PROGRESS. PUSHJ PDP,DOWNDA ;RESET DAREQ INTERLOCK DFREL1: TLZ DEVDAT,DSKRLB ;CLEAR RELEASE MARKER. JRST WAIT1 - -SUBTTL DISK SPACE ALLOCATION + SUBTTL DISK SPACE ALLOCATION ;DFGETF: GET A FREE DISK BLOCK ;CALL: PUSHJ PDP,DFGETF ; ... RETURNS WITH TAC:=LOGICAL BLOCK# @@ -2362,15 +2311,16 @@ DFGTF2: MOVEI TAC,NUMBIT ;BITS/SAT BLOCK HRRM TAC,@SATPTR ;MARK SAT ENTRY FULL JRST DFGTF1 + ;UPDA - TURN ON THE DISK ALLOCATION INTERLOCK (DAREQ) ; - A CALL TO UPDA MUST PRECEDE SAT BLOCK MANIPULATIONS + UPDA: AOSE DAREQ ;INCREMENT COUNT OF USERS REQUESTING DISK ALLOCATION PUSHJ PDP,DAWAIT ;WAIT UNTIL JOB REACHES TOP OF QUEUE TLO IOS,DAFLG MOVEM IOS,DEVIOS(DEVDAT) ;MAKE THIS JOB AS USING SAT BLOCK POPJ PDP, - -;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT. + ;SATGET - FIND A NON-FULL SAT BLOCK FOR DFGTF OR DUMP MODE OUTPUT. ; CONSIDER DISK FULL WHEN FEW BLOCKS REMAIN FREE UNLESS THE USER ; IS LOGGING IN OR USING A NON-SHARABLE RESOURCE. @@ -2389,12 +2339,12 @@ SATGT1: HRRZ TAC, 0(TAC1) ;GET WLBIT + BLOCKS USED PUSHJ PDP,SATCNT ;NO. COUNT # FREE ADDI TAC1,SENTSZ ;NEXT SAT ENTRY CAIL AC1,JOBN ;ENOUGH SPACE ACCUMULATED? - JRST SATGT2 ;YES - READ A SAT BLOCK CAIGE TAC1,SATTOP ;END OF ENTRIES? JRST SATGT1 ;NO. CONTINUE JUMPE AC1,DSKFUL ;IF NONE FOUND DISK IS REALLY FULL + ;THERE ARE JOBN OR FEWER DISK BLOCKS AVAILABLE. ;GIVE THEM OUT ONLY IN HARDSHIP CASES LDB TAC,PJOBN @@ -2403,8 +2353,7 @@ SATGT1: HRRZ TAC, 0(TAC1) ;GET WLBIT + BLOCKS USED TLNE IOS,UBFS+AUFLG ;DOES USER HAVE MONITOR BUFFER OR IS HE ALTERING UFD? JRST SATGT2 ;YES TO EITHER. GIVE HIM A BLOCK ANYWAY. DSKFUL: TLNE IOS,UBFS+AUFLG - JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD - + JRST DFERR1 ;NON-RECOVERABLE ERROR IF USING BUFFER OR ALTERING UFD PUSHJ PDP,DOWNDA ;RESET ALLOCATION INTERLOCK PUSHJ PDP,HNGSTP ;PRINT "DSK OK?" PUSHJ PDP,UPDA ;IF USER TYPE "CONT" WE TRY AGAIN @@ -2418,8 +2367,7 @@ SATCNT: CAIE TAC,NUMBIT ;IS ENTRY FULL? ADDI AC1,NUMBIT ;MAXIMUM NUMBER SUB AC1,TAC ;LESS NUMBER USED POPJ PDP, - -;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE + ;SETFRE - RETURN A DISK BLOCK TO AVAILABLE STORAGE ;CALL TAC:=LOGICAL BLOCK L ; PUSHJ PDP,SETFRE ; ... RETURN @@ -2458,8 +2406,7 @@ SETFR2: SUB TAC,AC1 ;FROM BIT# (IN RANGE 0 TO NUMBLK-1) SOS @SATPTR ;DECREMENT BLOCKS USED SETOM SATCHG ;SAT BLOCK IN CORE NOT = DISK COPY JRST DOWNDA ;REMOVE ALLOCATION INTERLOCK AND EXIT. - -;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID + ;NOTE: SATRD USES TEMPORARY STORAGE LOCATIONS SATTMP AND SATTEM TO HELP AVOID ; A PDL OVRFLW PROBLEM. IT CAN DO SO BECAUSE IT IS NOT RE-ENTRANT, I.E., ONLY ; ONE USER AT A TIME MAY PASS THROUGH HERE BECAUSE OF THE DAREQ INTERLOCK. @@ -2487,6 +2434,7 @@ SATW1: MOVSI IOS,NORELB ;RESET BIT ANDCAB IOS,DEVIOS(DEVDAT) POPJ PDP, + ;SET UP TAC AND TAC1 FOR READ OR WRITE OF SAT BLOCK SATBLK: MOVE TAC,SATPTR @@ -2496,8 +2444,7 @@ SATBLK: MOVE TAC,SATPTR MOVE TAC1,SATBK2 MOVEM TAC1,DSKBUF(DEVDAT) POPJ PDP, - -SUBTTL "FREE" CORE ALLOCATION + SUBTTL "FREE" CORE ALLOCATION ;CLEAR OUT DDB AT RELEASE TIME INTERNAL CLRDDB @@ -2545,8 +2492,7 @@ SETDD0: MOVEI ITEM,DSKCOR ;GET SOME FREE CORE SETDD1: POP PDP,TAC1 POP PDP,ITEM POPJ PDP, - -;SET TAC1 TO SOME AREA FOR BUFFER. + ;SET TAC1 TO SOME AREA FOR BUFFER. ;GET BUFFER SPACE FROM USER INPUT OR OUTPUT RING IF AVAILABLE ;ASSIGN FROM MONITOR CORE AS A LAST RESORT. ;SET DSKBUF(DEVDAT) TO POINT TO BUFFER. @@ -2587,8 +2533,7 @@ SETBF6: AOSE MQREQ TLO IOS,UBFU ;BUFFER IN MONITOR CORE MOVEI TAC1, MONBUF ;TAC1 POINTS TO MONITOR BUFFER JRST SETBF5 - -;CLEAR THE BUFFER IN FREE STORAGE IF THERE. + ;CLEAR THE BUFFER IN FREE STORAGE IF THERE. EXTERNAL BUFCLR,JOBFF,IADRCK CLRBUF: SCHEDULE @@ -2621,8 +2566,7 @@ CLRBF1: MOVEM IOS,DEVIOS(DEVDAT) SUBI TAC,2 ;SET TAC TO 2ND BUFFER WORD SOS (PDP) ;BUFCLR WILL SKIP RETURN JRST BUFCLR ;CLEAR THE BUFFER - -;FIND THE FIRST ZERO IN A SET OF WORDS + ;FIND THE FIRST ZERO IN A SET OF WORDS ;ENTER WITH LH OF TAC SET TO NEGATIVE OF NUMBER OF WORDS. ; RH OF TAC CONTAINING ADDRESS OF FIRST WORD. ;CALL: PUSHJ PDP,GETZER @@ -2669,9 +2613,7 @@ RESID1: TLO TAC1,32000 FAD TAC1,[0] LSH TAC1,-33 POPJ PDP, - - -;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1 + ;FIND FOUR FREE WORDS OF CORE, RETURN AN ADDRESS IN TAC1 ;IT IS ASSUMED THAT THE CLOCK IS OFF. INTERN GETFCR @@ -2687,8 +2629,7 @@ GTCOR1: MOVEI AC1,LOCORE ;POINT TO THREE WORD FREE CORE ENTRY SUBI TAC1,4 ;SYNCHRNIZE ADD TAC1,LOCORE ;FORM CORE ADDRESS POPJ PDP, - -INTERNAL GETBIT + INTERNAL GETBIT ;SEARCH THROUGH A TABLE TO FIND A SERIES OF ZERO-BITS. @@ -2707,7 +2648,6 @@ GETBIT: PUSH PDP,[-1] ;INITIALIZE LARGEST HOLD FOUND SO FAR MOVEM TAC1,1(AC1) ;SAVE THE SPOT MOVEM TAC,2(AC1) PUSH PDP,TAC - PUSH PDP,TAC1 GTBIT1: AOS DAT ;INCREMENT SIZE OF HOLD BY 1 (GETZER LEFT DAT=-1) @@ -2741,6 +2681,7 @@ GTBIT3: ORM TAC1,(TAC) GTBIT4: POP PDP,TAC1 POP PDP,TAC AOS -2(PDP) + HRRZS TAC SUBI TAC,-1(AC2) PUSHJ PDP,RESIDU @@ -2754,8 +2695,7 @@ GTBIT6: POP PDP,TAC POP PDP,TAC1 AOS -1(PDP) ;SIZE OF LARGEST HOLD MUST BE ADJUSTED JRST GTBIT5 - -;FREE A FOUR WORD SECTION OF CORE. + ;FREE A FOUR WORD SECTION OF CORE. ;ENTER WITH ADDRESS IN TAC INTERNAL CLCOR1 @@ -2808,8 +2748,7 @@ CLRB5: POP PDP,TAC1 CLRB2: MOVEM TAC1,1(AC1) CLRB3: MOVEM TAC,2(AC1) POPJ PDP, - -SUBTTL QUEUEING AND INTERRUPT PROCESSING + SUBTTL QUEUEING AND INTERRUPT PROCESSING ;PUT A REQUEST IN THE USER QUEUE. ;ENTER AT QIN FOR INPUT. QOUT FOR OUTPUT. ;CALLED AT BOTH INTERRUPT AND UUO LEVELS @@ -2838,9 +2777,7 @@ QOUT: MOVEI TAC1,DEVOAD-DEVIAD(DEVDAT) ;* QIOEND: SCHEDULE ;* POPJ PDP, ;* - - -;PUT A REQUEST IN THE MONITOR QUEUE. + ;PUT A REQUEST IN THE MONITOR QUEUE. ;ENTER AT MQIN FOR INPUT, MQOUT FOR OUTPUT. ;ENTER WITH C(TAC1 0-17) = -SIZE OF BLOCK ; C(TAC1 18-35) = CORE ADDRESS @@ -2859,7 +2796,6 @@ MQOUT: HRLZ TAC1,DEVDAT ; LOSS ON THE DISK > HRLI TAC,TRIES - MOVSM TAC,DSKCNT(DEVDAT);STASH AWAY BLOCK #, ERROR COUNT. PUSHJ PDP,SETACT ;SET IOACT NOSCHEDULE @@ -2883,8 +2819,7 @@ MQOUT: HRLZ TAC1,DEVDAT TRNN AC1,IODERR!IODTER!IOIMPM AOS (PDP) ;NO, SKIP RETURN POPJ PDP, - -;* + ;* ;* EVERYTHING FROM HERE THRU SETDUN CALLED AT INTERRUPT LEVEL ;* ;ROUTINE CALLED BY INTERRUPT IN DISK. @@ -2898,6 +2833,7 @@ EXTERNAL MQREQ,MQAVAL,DFRED,DFWRT EXTERNAL JBTADR EXTERNAL MQTOP,MQUEUE + DFINT: IFN FTSWAP,< EXTERNAL SQREQ,SERA,SQGO,SWPINT @@ -2929,7 +2865,7 @@ DFINTA: AOS DEVACC(DEVDAT) ;INCREMENT POINTER TO RETRIEVAL POINTER MOVEI TAC1,BLKSIZ HRRM TAC1,@TAC - IFG CHKCNT,< + IFG CHKCNT,< MOVE TAC,DEVOAD(DEVDAT) TLNE TAC,CKSUPR JRST DINT0B @@ -2948,7 +2884,6 @@ DINT0B: SKIPA DFINT1: PUSHJ PDP,DFOUTX ;CHECK FOR MORE OUTPUT SETZM RUNUSR - JRST DFINT4 DINT1A: HRRZ TAC,DEVACC(DEVDAT) ;WRITE-LOCK FOUND, SET WLBIT @@ -2973,7 +2908,7 @@ DFINT3: HRRM IOS,DSKCNT(DEVDAT) ;SAVE ANY ERRORS CAIL TAC,MQTOP MOVEI TAC,MQUEUE MOVEM TAC,MOPTR ;FALL THROUGH TO DFINT4 - + ;DETERMINE NEXT TRANSFER TO MAKE ACCORDING TO PRIOROTY ; 1) SWAPPING 2) MQ I/O 3) BUFFERED MODE I/O DFINT4: MOVEM IOS,DEVIOS(DEVDAT) ;CLEAR IOACT @@ -2990,7 +2925,7 @@ DINT4B: SKIPE @MOPTR ;MONITOR JOB WAITING? JRST FINDV ;YES. SETZM DFBUSY ;NO. TURN OFF BUSY FLAG POPJ PDP, ;EXIT INTERRUPT - + ;FIND A WAITING USER FINDV: HRRZ DEVDAT,DDBPTR @@ -3015,7 +2950,7 @@ DFINT6: ANDCAM TAC,DEVOAD(DEVDAT) ;CLEAR OUTPUT WAIT BIT IN DDB JRST USRGO ;START UP A USER READ - + DFINT7: ANDCAM TAC,DEVIAD(DEVDAT) ;CLEAR INPUT WAIT BIT IN DDB USRGO: MOVSM DEVDAT,RUNUSR ;SAVE DEVDAT FOR USE AT DFINT @@ -3036,8 +2971,7 @@ USRGO: MOVSM DEVDAT,RUNUSR ;SAVE DEVDAT FOR USE AT DFINT USRGO3: HRRI TAC1,@DEVOAD(DEVDAT) ;GET ADDRESS OF OUTPUT BUFFER AOJA TAC1,DFWRT ;FORM IOWD AND WRITE - - + ;START UP A MONITOR READ OR WRITE MONGO: MOVS ITEM,@MOPTR ;XWD CORE ADDRESS, SAVED DEVDAT @@ -3074,8 +3008,7 @@ SETDUN: ;* TLZE IOS,IOW ;* JRST SETIOD ;* POPJ PDP, ;* - -SUBTTL ERRORS, SUBROUTINES. + SUBTTL ERRORS, SUBROUTINES. ;ERROR ROUTINES CALLED FROM UUO LEVEL EXTERN EXCALP,ERRPTU,TPOPJ @@ -3127,16 +3060,15 @@ DFER11: MOVEI TAC,NOFILE DFER12: MOVEI TAC,0 PUSH PDP,TAC ;ADD SOMETHING TO BE REMOVED (SINCE SETLE NOT CALLED) JRST DFERRY - -WERA: MOVSI IOS,NORELB + WERA: MOVSI IOS,NORELB ANDCAB IOS,DEVIOS(DEVDAT) ERRORS + RERA: MOVSI IOS,NORELB ANDCAB IOS,DEVIOS(DEVDAT) ERRORS - -;CALLED AT BOTH INTERUPT AND UUO LEVELS + ;CALLED AT BOTH INTERUPT AND UUO LEVELS ;COMPUTE CHECK-SUM ;ENTER WITH C(TAC 18-35) SET TO BUFFER ADDRESS ;RETURN WITH C(TAC1)SET TO ONES COMPLEMENT SUM IN RH. @@ -3189,8 +3121,7 @@ CHKSM2: AOBJN TAC,CHKSM1 ;LOOP UNTIL DONE ADDI TAC1,1 ;YES BRING IT AROUND POPJ PDP, > - -;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE, + ;UPDATE DEVCNT IF NECESSARY. DEVCNT HAS SIZE OF FILE IN R.H. (IN WORDS IF POSSIBLE, ; OTHERWISE NEGATIVE BLOCK COUNT). ; ENTER WITH SIZE OF CURRENT BLOCK IN TAC1 UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS @@ -3201,8 +3132,7 @@ UPDEVC: HRRZ TAC,SETCNT(DEVDAT) ;*CONVERT CURRENT RELATIVE BLOCK NUMBER TO WORDS HRRZ TAC1,DEVCNT(DEVDAT) ;*PICK UP PREVIOUS MAXIMUM FILE SIZE OF COMPARISON. TRNE TAC1,400000 ;*PREVIOUS MAXIMUM SIZE GREATER THAN 2 EXP 17 WORDS? JRST UPDVC2 ;*YES, THEN COMPARE AND SAVE NEGATIVE BLOCK COUNTS - TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED - + TLNN TAC,-1 ;*NO, DOES THE NEWLY COMPUTED CURRENT FILE SIZE EXCEED ;* 2EXP17 WORDS? TRNE TAC,40000 ;* JRST UPDVC1 ;*YES, GO SAVE NEGATIVE BLOCK COUNT. @@ -3225,8 +3155,8 @@ UPDVC2: ADDI TAC,BLKSIZ-1 ;*CONVERT POSITIVE WORD COUNT TO NEGATIVE HRRM TAC,DEVCNT(DEVDAT) ;*STORE NEW MAXIMUM FILES SIZE ONLY IF PREVIOUS ;* MAXIMUM EXEEDED. POPJ PDP, ;* + ;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE. -;OUTPUT WRITE-LOCK ERROR. FREE THE BLOCK AND GET NEW ONE. WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER. PUSHJ PDP,SETFRE ;FREE THE BLOCK @@ -3235,6 +3165,7 @@ WLERA: HLR TAC,DSKCNT(DEVDAT) ;PICK UP BLOCK NUMBER. ;SET WRITE-LOCK INDICATION IN A SAT ENTRY. ;ENTER WITH A BLOCK NUMBER IN TAC. + SETWL: MOVEI TAC1,SATENT ;* JRST .+2 ;* SETWL1: ADDI TAC1,SENTSZ ;* @@ -3245,7 +3176,4 @@ SETWL1: ADDI TAC1,SENTSZ ;* MOVEI ITEM,WLBIT ;* ORM ITEM,@TAC1 ;* POPJ PDP, ;* - -DSKSR: END - - + DSKSR: END diff --git a/src/dtasrn.mac b/src/dtasrn.mac index c0530cc..1386af8 100644 --- a/src/dtasrn.mac +++ b/src/dtasrn.mac @@ -31,6 +31,7 @@ MINDIS=14 ;MINMUM NUMBER OF BLOCKS TO SEARCH BEFORE DISCONNECTING ;FROM A TAPE SPACE=4 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE + ;DDB MAGIC CELLS FSTBLK=13 DLOC=14 @@ -43,6 +44,7 @@ SVDWRD=21 UDSD=100 LSTSAV=20000 + ;FLAGS IN LH OF IOS NOLINK=200 CHNGDR=400 @@ -57,10 +59,10 @@ REWBIT=100000 RUNBIT=200000 RECKON=400000 ;THIS TAPE IS DEAD-RECKONING. ; (MUST BE SIGN BIT) - CPBIT=-1 ;FEATURE TEST TO ALLOW IO INTO USER AREA DIRECTLY ;IT WILL ONLY HAPPEN ON DUMP MODE WITH NON-STANDARD BIT ;(UDSD) ON + EXTERN JIFSEC INTERN DTAINT,DTADDB,DTAINI,DTADDS,DTADSP @@ -71,18 +73,15 @@ DTADDB: SIXBIT /DTA0/ EXP DTADSP XWD 1107,154403 EXP 0,0 - XWD PROG,0 XWD PROG,0 EXP 0,0,0 - EXP DTADIR EXP 0,0,0,0,0 - - DTADIR: BLOCK 200 DTADDS=.-DTADDB + JRST DTAINI JRST HUNGTP ;HUNG DEVICE DTADSP: JRST UREL @@ -106,6 +105,7 @@ DTADSP: JRST UREL SOJA TAC1,MTAP0 POPJ PDP, ;OTHERS ARE NO-OPS + ;INITIALIZE DTC DTAINI: CONO DTC,0 SETZM DISCON @@ -179,7 +179,6 @@ RENAM1: TLO IOS,CHNGDR ;DIRECTORY HAS CHANGED ;COME HERE TO RENAME TO A REAL NEW NAME RENAM2: MOVE DAT,TAC ;SAVE LOC OF NAME IN DIRECTORY - PUSHJ PDP,DSERCH ;SEARCH FOR NEW NAME SKIPA ;NOT FOUND - GOOD JRST RENER2 ;NAME ALREADY EXISTS - ERROR @@ -282,7 +281,6 @@ DECPTR: JUMPL DAT,.+5 SOJA DAT,CPOPJ HRLI DAT,060500 SOJA DAT,CPOPJ - ;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS PUSHJ PDP,BLKSRC ;FIND A BLOCK BELONGING TO FILE @@ -351,12 +349,12 @@ DRPTR: SUBI BLK,1 ;SET FOR ILDB OR IDPB ;HERE FOR NEW FILE NAME ON ENTER NEWENT: SUB TAC,[XWD 26,26];START AT BEGINNING OF DIRECT. - SKIPN (TAC) ;FIND A FREE SLOT AOJA UUO,ENTR2 ;RETURN WITH UUO POINTING TO WRD 2 AOBJN TAC,.-2 POPJ PDP, ;NONE AVAILABLE. + ;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE SETWD4: HLRE TAC1,@UUO ;GET -LENGTH MOVNS TAC1 ;+LENGTH @@ -391,6 +389,7 @@ GETF: PUSHJ PDP,WAIT1 ;WAIT TILL BUFFERES EMPTY MOVE TAC,BLK ;TELL USER THE BLOCK NUMBER JRST STOTAC + ;GET NEXT (OR PREVIOUS) FREE BLOCK USRFRE: MOVEI TEM,SPACE ;BLOCKS "SPACE" APART LDB BLK,PIOMOD ;EXCEPT DUMP AND SAVMOD FILES @@ -415,6 +414,7 @@ USRLST: SUBI BLK,(TEM) ;LOOK FOR FREE BLOCK N BEFORE USLSTA: PUSHJ PDP,LSTFRE ;THIS ONE JRST CALNXT+1 + ;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER NOBLKS: MOVEI BLK,TOPBLK+1 ;SET HIGH BLOCK POPJ PDP, @@ -450,6 +450,8 @@ UCLS: TLZE IOS,NOLINK ;IS LAST BLOCK NOT LINKED? MOVEM IOS,DEVIOS(DEVDAT) ;SAVE IOS JRST OUT ;GO TO WRITE RECORD + + ;HERE TO CLOSE A DUMP MODE FILE CLSDMP: TLO IOS,DMPCLS+IO+DMPMOD ;SET SWITCHES PUSHJ PDP,GETDT ;GET CONTROL @@ -473,9 +475,9 @@ UREL: PUSHJ PDP,WAIT1 ;MAKE SURE THE TAPE IS STOPPED PUSHJ PDP,WRTBLK ;WRITE UT PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN + UREL2: MOVE TAC,DEVIAD(DEVDAT) ;BITS 1,2 ARE COUNT OF CHANS TLNE TAC,200000 ;DEV INITED ON ANOTHER CHANNEL TOO? - QUANTL: POPJ PDP,QUANT ;YES, DON'T ZAP IOS OR DDB ;SOME BITS IN THE IOS WORD AND THE DDB WILL NORMALLY BE CHANGED ON THE @@ -487,6 +489,8 @@ QUANTL: POPJ PDP,QUANT ;YES, DON'T ZAP IOS OR DDB ;IT WILL WORK (CHECK IS MADE AT ENTER) SETZM FSTBLK(DEVDAT) JRST STOIOS ;STORE IOS AND RETURN + + GETDT0: PUSHJ PDP,SETACT ;WAIT TILL TAPE COMES OUT OF REWIND PUSHJ PDP,WSYNC ;BEFORE DOING ANYTHING ELSE TO IT ;GET DEC TAPE CONTROLLER @@ -536,7 +540,6 @@ UIN: TLZ IOS,IO JUMPE BLK,EOF ;0 MEANS EOF PUSHJ PDP,BLKCHK ;CHECK LEGALITY OF BLOCK NUMBER TLNN IOS,DMPMOD ;DUMP MODE? - CAIE BLK,DIRBLK ;TRYING TO READ DIRECTORY? JRST READBF ;NO. GO READ @@ -561,6 +564,7 @@ EOF: TLO IOS,IOEND ;LIGHT EOF BIT JRST STOIOS JRST DMPEOF ;GIVE UP CONTROL IF DUMP-MODE + ;ZERO USER'S CORE ON SAVE-MODE INPUT ZERCOR: MOVEI TAC,JOBDDT(PROG) ;ZERO CORE HRLI TAC,1(TAC) @@ -590,7 +594,6 @@ UOUT: TLO IOS,IO CAIN BLK,DIRBLKK ;CHECK IF WRITING DIRECTORY JRST COR2HM ;YES, WRITE CORE IMAGE JUMPE BLK,FAKADV ;DONT WRITE IF NO BLOCK GIVEN - PUSHJ PDP,BLKCHK ;CHECK FOR LEGAL BLOCK UOUT2: TLNN IOS,DMPMOD ;ALREADY HAVE CONTROL IF DUMP-MODE PUSHJ PDP,GETDT ;GET DEC TAPE CONTROLLER @@ -623,6 +626,7 @@ OUTBLK: HRLM BLK,BUF ;SAVE LINK IN 1ST WORD OF BLOCK OUTBL2: HRRZ BLK,OBLK(DEVDAT) PUSHJ PDP,STOIOS + WRTBLK: PUSHJ PDP,FNDBLK ;GO SEARCH FOR BLOCK MOVE TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE JRST RDWRT @@ -664,6 +668,7 @@ DMPST2: SOS UUO ;NO. SAVE START OF LIST (-1) DMPTS1: POP PDP,TAC JRST THRUTD + IFN CPBIT, < ;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE @@ -684,6 +689,7 @@ TOUSR1: MOVEM UUO,USPNTR ;SAVE IT POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME JRST OUTBL2 + NOBLK0: TRO IOS,IOIMPM POP PDP,TAC ;RETURN TO UUOCON WITH ERROR BIT SET JRST THRUTD @@ -727,6 +733,7 @@ DMPOVA: MOVEI TAC,177 MOVEM TAC,BUF ;WD CNT =177 JRST OUFULL ;GO WRITE PART OF STUFF + ;GET NEXT COMMAND FROM LIST NXTCOM: SKIPN DMPLST(DEVDAT) ;END OF COMMANDS? JRST NXTCM2 ;YES. RETURN @@ -737,11 +744,13 @@ NXTCM1: HRRM TAC,DMPLST(DEVDAT) ;STORE GO-TO ADDRESS JUMPG TAC,NXTCM1 ;GO-TO WORD ADDI TAC,(PROG) ;REAL COMMAND - ADD RELOCATION AOJA TAC,CPOPJ1 ;AND RETURN + ;END OF DUMP-MODE LIST NXTCM2: SETZM SVDWRD(DEVDAT) ;ZERO POINTERS SETZM DMPLST(DEVDAT) POPJ PDP, + DMPFLC: SKIPE TAC,SVDWRD(DEVDAT) ;IS THERE ANOTHER COMMAND JRST DMPFLA ;YES. GET IT JRST DMPTH2 ;NO. THROUGH @@ -764,7 +773,6 @@ RDWRT: HLLM TAC1,IOWD ;BLKI OR BLKO SKIPA TAC,BFPNTR ;NO. INTO BUF HRR TAC,DLOC(DEVDAT) ;YES. LOC OF DIRECTORY CONSZ DTC,100000 ;IN REVERSE? - JRST IORVRS ;YES SOS TAC ;ADDRESS -1 MOVE TEM,IOWD ;GET IOWD @@ -784,6 +792,7 @@ IORVRS: ADDI TAC,176 ;START AT TOP OF BUFFER MOVE TEM,[JSR RVERS] JRST IOGO ;COMPILCATED STUFF FOR EACH WORD + ;HERE FOR AY DATA WORD WITH TAPE IN REVERSE RVERS: 0 IOWD: BLKI DTC,PNTR ;READ (WRITE) A WORD @@ -810,6 +819,7 @@ MTAP0: PUSHJ PDP,GETDT ;GET THE CONTROL FOR THE TAPE MOVEI BLK,0 ;SEARCH FOR BLOCK 0 PUSHJ PDP,FNDBLK ;GO FIND BLOCK + ;CONTROL COMES HERE ON INTERRUPT CHANNEL WHEN THE BLOCK IS FOUND TLNE IOS,RUNBIT ;REWIND UNLOAD? JRST .+3 ;YES, CONTINUE @@ -829,6 +839,7 @@ RUNCLK: MOVE DEVDAT,USEWRD MOVE IOS,DEVIOS(DEVDAT) ;RESET IOS JRST REWDUN ;DECREASE DTREQ. STOP TAP + ;HERE TO PUT C(TAC) IN THE CLOCK QUEUE CLKREQ: 0 CONO PI,PIOFF ;TURN OFF PI @@ -877,7 +888,8 @@ SRCH: 0 TLNE TAC,2000 ;IS CONTROL STILL ACTIVE? JRST SRCHD ;YES. MUST BE IN "PSEUDO END-ZONE" DATAI DTC,TAC ;NO. READ A BLOCK NUMBER - TLZ TAC,-1 ;LEGAL BLOCK NUMBER> + TLZ TAC,-1 ;INSURANCE + CAILE TAC,TOPBLK ;LEGAL BLOCK NUMBER? JRST SRCHB ;NO. SET ERROR SWITCH SUB TAC,BLOCK ;NOW-WANTED IFN CPBIT, < @@ -888,7 +900,6 @@ SRCH: 0 SRCHA: CONSZ DTC,100000 ;IF TAPE IS IN REVERSE MOVNS TAC ;SWITCH TURN-AROUND TEST JUMPLE TAC,.+3 ;TEST FOR DISCONNECT IF DIRECTION IS CORRECT - ;*** CONO DTC,DTTURN ;TURN AROUND JRST SRCHXT ;AND GO AWAY @@ -913,6 +924,7 @@ SRCHB: AOS TAC,ERRCNT ;BUMP ERROR COUNT CONO DTS,770001 ;FUNCTION STOP JRST SRCHXT ;GO AWAY + IFN CPBIT, < SRCHC: CONSZ DTC,100000 ;GOING FORWARD? TLCA TAC,400000 ;NO. SWITCH TURN AROUND TEST. ENSURE FORWARD @@ -946,7 +958,6 @@ REKON: SKIPN IOWRIT ;MONITOR BUFFER FULL? LDB TAC1,PJOBN ;ASSOCIATED JOB NUMBER HRRM TAC1,MONB2 ;SAVE IN WD 2 OF MONITOR BUFFER HRLM DEVDAT,MONB2 ;SAVE ADDRESS OF DTA - CONSZ DTC,200000 IMULI TAC,62 ;COMPUTE A TIME TO BLOCK CONSZ DTC,100000 ;BASED ON 50 MSEC/BLOCK FORWARD @@ -993,6 +1004,7 @@ NXTICK: MOVE TAC,TIMRQ2 ;COME BACK IN A JIFFY TIMREQ: XWD BACK,0 TIMRQ2: XWD BACKA,1 + IFN ALMACT,< EXTERN PRIIN ;COME HERE ON THE CLOCK LEVEL TO BRING THE JOB ASSOCIATED WITH @@ -1006,6 +1018,7 @@ ALMREQ: XWD .+1,1 ANDCAM TAC,DEVIOS(DEVDAT) ;ZAP BIT SO IT WONT BE SWAPPED OUT AGAIN POPJ PDP, + ;HERE WHEN SWAPPER DOES GET THE JOB BACK INTO CORE SWPBAK: MOVE IOS,DEVIOS(DEVDAT) SETM MONB2 ;CLEAR JOB NO, FROM MON BUFFER @@ -1035,7 +1048,6 @@ BACK2: TRZ TAC,10 HLRZ TAC1,IBLK(DEVDAT) ;BLOCK NEEDED DPB TAC1,[POINT 10,BLOCK,35] HRRZ TAC,CLOCK - HRLI TAC1,CPOPJ ;FIND CLOCK-QUEUE REFERENVCE TO BACKC BACK3: CAIN TAC,CIPWTM JRST BACKD ;NOT THERE, TAPE MUST HAVE BEEN STOPPED @@ -1070,6 +1082,7 @@ BACKA: SETOM TAC ;DISCON WILL GO TO -1 EXCH TAC,DISCON ;UNIT TO CONNECT TO JRST BACK2 ;GO RECONNECT + ;IF WE GET HERE THERE IS A SLOW TAPE ON THE SELECTED DRIVE BACKC: CONO PI,PIOFF ;CANT RISK CHANGING THE INTERRUPT ENABLES HRE CONI DTS,TAC ;READ IN ENABLE FLAGS @@ -1096,6 +1109,7 @@ FOUND: MOVEM TAC1,FNDTMP ;SAVE THOSE ACS THAT WILL BE USED FNDPDP: XWD -2,. 0 + IFN CPBIT, < ;HERE WHERE DUMP-MODE POINTER RUNS OUT DMPADV: 0 @@ -1139,6 +1153,7 @@ DTAIN1: TLZE IOS,REWBIT ;NO, FROM A REWIND MTAPE? CONSZ DTS,670000 ;AND NO ERRORS? JRST ERRS ;NO. TOUGH LUCK SKIPGE BLOCK ;BAD BLOCK NUMBER ON TAPE? + JRST DERR ;YES, TURN ON IODERR DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST DMPTHR ;YES. GO ELSEWHERE TLNN IOS,SINGL @@ -1155,6 +1170,7 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST OUTHRU ;YES EXTERN JBTSTS,PJOBN + ;HERE ON END OF AN INPUT BLOCK HRROI TAC1,177 ;MASK OUT 1ST-BLK DATA TRNN IOS,UDSD ;UNLESS IN NON-STD @@ -1171,7 +1187,6 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST THRUIN PUSHJ PDP,ADVBFF ;GET NEXT BUFFER JRST THRUIN ;EMPTY BUF NOT AVAILABLE - SKIPLE DISCON ;TAPE TIMED OUT? JRST BACKB ;YES. GO RECONNECT SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE @@ -1181,6 +1196,7 @@ DTAIN2: TLNE IOS,DMPMOD ;DUMP MODE? SKIPG DTREQ ;YES. ANYONE ELSE WANT IT? JRST READBC ;NO. READ NEXT BLOCK + THRUIN: HRRZ TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN? JUMPN TAC,THRUTP ;YES. DONT CHANGE REVERSE BIT TLZ IOS,RVERSE ;NO. SET IOS BIT TO CORRECT DIRECTION @@ -1203,6 +1219,7 @@ HUNGTP: JUMPGE IOS,THRUTP ;GIVE UP CONTROL IF NOT DEAD-RECKONING ;WHEN THE TAPE TIMES OUT FNDBLK WILL RESET THE HUNG TIME, AND ;IF IT IS STILL HUNG AT ITS END THE ERROR MESSAGE WILL OCCUR + INTERN FTSWAP EXTERN SHFWAT ;HERE ON END OF BLOCK WHEN THE JOB IS STILL SWAPPED OUT @@ -1240,6 +1257,7 @@ OUTHRU: PUSHJ PDP,ADVBFE ;GET NEXT BUFFER JRST FILBUF ;NO. GO WRITE NEXT BLOCK JRST THRUTP ;YES. GIVE UP TAPE + ;TURN TAPE AROUND AFTER END-ZONE INTERRUPT TURN: CONSZ DTC,500 ;READ BLOCK NUMBERS? JRST DIREOF ;NO. END ZONE WHILE READING DATA @@ -1295,6 +1313,7 @@ SVDMIN: HLRZ BLK,BUF ;NEXT BLOCK NUMBER HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB JRST CPOPJ1 + IFN CPBIT, < ;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER USDMTH: MOVEI TAC1,IBLK(DEVDAT) @@ -1334,7 +1353,9 @@ RDNXT: CAIG BLK,TOPBLK ;BLOCK LEGAL? ;EOF BEFORE ALL DATA IS IN - DUMP MODE DMPEOF: TRO IOS,IODEND ;LIGHT EOF BIT JRST DMPTH2 ;GIVE UP TAPE - SVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL + + +SVADER: PUSHJ PDP,DMPTH2 ;GIVE UP CONTROL JRST ADRERR ;TYPE ERROR MESSAGE ;COME HERE ON ERROR ERRS: AOS TAC,ERRCNT ;BUMP COUNT @@ -1393,7 +1414,6 @@ ALMSWT: 0 IFN CPBIT, < BLKCNT: 0 SVPNTR: 0 - USPNTR: 0 DIRCTN: 0 > diff --git a/src/dtcsrn.mac b/src/dtcsrn.mac index 8d0970e..c665ac5 100644 --- a/src/dtcsrn.mac +++ b/src/dtcsrn.mac @@ -2,11 +2,11 @@ TITLE DTCSRN - NEW FORMAT DECTAPE SERVICE FOR 551 (PDP-6) SUBTTL DTA551 A.WACHS/TW/RCC 01 JUN 69 V012 XP VDTASR,012 ;GLOBAL VERSION NUMBER FOR LOADER STORAGE MAP. + ENTRY DTCSRN ;ENTRY POINT FOR SELECTIVE LOAD BY BUILD DTCSRN: EXTERNAL TPOPJ,TPOPJ1,DTCCHL,DCOUT,DCIN,DCON,DCOFF EXTERNAL STOIOS,STOTAC,SETACT,CLRACT,OUT,DTCSAV,PIOMOD - EXTERNAL DTAVAL,DTREQ,SETIOD,THSDAT,PUNIT,GETDCDT EXTERNAL ADVBFE,ADVBFF,ADRERR,WAIT1,CPOPJ,CPOPJ1,BADDIR EXTERNAL COMCHK,PJOBN,RELEA9,UADCK1,DTTRY @@ -23,6 +23,7 @@ NAMSTR=^D83 ;1ST NAME WORD IN DIRECTORY QUANT=5 ;NUMBER OF BLOCKS CAN READ BEORE GIVING UP DTC SPACE=6 ;NUMBER OF BLOCKS SEPERATING CONTIGUOUS BLKS OF A FILE + ;DDB MAGIC CELLS FSTBLK=13 DLOC=14 @@ -50,9 +51,8 @@ CPBIT=-1 ;CONDITIONAL ASSEMBLY PARAMETER FOR I/O DIRECTLY ;TO USER. IF -1 THE I/O IN DUMP MODE WITH ;BIT 29 ON IN INIT WILL DO IO DIRECTLY TO USER ;WIUTHOUT DIRECT CONSIDERATION OF BLOCK BOUNDRIES - EXTERN JIFSEC - INTERN DTCINT,DTCDDB,DTCINI,DTCDDS + INTERN DTCINT,DTCDDB,DTCINI,DTCDDS DTCDDB: SIXBIT /DTA0/ XWD ^D60*HUNGST,200 @@ -60,18 +60,15 @@ DTCDDB: SIXBIT /DTA0/ EXP DTCDSP XWD 1107,154403 EXP 0,0 - XWD PROG,0 XWD PROG,0 EXP 0,0,0 - EXP DTCDIR EXP 0,0,0,0,0 - - DTCDIR: BLOCK 200 DTCDDS=.-DTCDDB + JRST DTCINI JRST THRUTP ;HUNG DEVICE DTCDSP: JRST UREL @@ -90,6 +87,7 @@ DTCDSP: JRST UREL JRST UTPCLR POPJ PDP, ;MTAPE + ;INITIALIZE DTC DTCINI: CONO DTC,0 CONO DC,0 @@ -160,7 +158,6 @@ RENAM1: TLO IOS,CHNGDR ;DIRECTORY HAS CHANGED ;COME HERE TO RENAME TO A REAL NEW NAME RENAM2: MOVE DAT,TAC ;SAVE LOC OF NAME IN DIRECTORY - PUSHJ PDP,DSERCH ;SEARCH FOR NEW NAME SKIPA ;NOT FOUND - GOOD JRST RENER2 ;NAME ALREADY EXISTS - ERROR @@ -185,7 +182,7 @@ DSER1: PUSHJ PDP,DIRCHK ;ENSURE DIRECTORY IS IN CORE HRRZ TAC,DLOC(DEVDAT) ;LOCAION OF DIRECTORY ADD TAC,[XWD -26,NAMSTR] ;POINT TO START OF NAMES NMLOOK: SKIPN TAC1,@UUO ;GET NAME - JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN + JRST TPOPJ ;NULL ARGUMENT - ERROR RETURN MOVEM TAC1,DEVFIL(DEVDAT) ;STORE FOR RENAME AND SUPERSEDING ; SHARED SEGMENTS CAMN TAC1,(TAC) ;TEST FOR MATCH @@ -263,7 +260,6 @@ DECPTR: JUMPL DAT,.+5 SOJA DAT,CPOPJ HRLI DAT,060500 SOJA DAT,CPOPJ - ;COME HERE TO DELETE THE FILE WHOSE INDEX IS INN TAC DLETE: MOVEI TAC1,0 ;SET TO DELETE BLOCKS PUSHJ PDP,BLKSRC ;FIND A BLOCK BELONGING TO FILE @@ -332,12 +328,12 @@ DRPTR: SUBI BLK,1 ;SET FOR ILDB OR IDPB ;HERE FOR NEW FILE NAME ON ENTER NEWENT: SUB TAC,[XWD 26,26];START AT BEGINNING OF DIRECT. - SKIPN (TAC) ;FIND A FREE SLOT AOJA UUO,ENTR2 ;RETURN WITH UUO POINTING TO WRD 2 AOBJN TAC,.-2 POPJ PDP, ;NONE AVAILABLE. + ;SET UP LENGTH OF FILE IN DIRECTORY FOR A SAVE FILE SETWD4: HLRE TAC1,@UUO ;GET -LENGTH MOVNS TAC1 ;+LENGTH @@ -372,6 +368,7 @@ GETF: PUSHJ PDP,WAIT1 ;WAIT TILL BUFFERES EMPTY MOVE TAC,BLK ;TELL USER THE BLOCK NUMBER JRST STOTAC + ;GET NEXT (OR PREVIOUS) FREE BLOCK USRFRE: MOVEI TEM,SPACE ;BLOCKS "SPACE" APART LDB BLK,PIOMOD ;EXCEPT DUMP AND SAVMOD FILES @@ -397,6 +394,7 @@ USRLST: SUBI BLK,(TEM) ;LOOK FOR FREE BLOCK N BEFORE USLSTA: PUSHJ PDP,LSTFRE ;THIS ONE JRST CALNXT+1 + ;NO FREE BLOCKS AVAILABLE. GIVE HIGH BLOCK,SET IOBKTL LATER NOBLKS: MOVEI BLK,TOPBLK+1 ;SET HIGH BLOCK POPJ PDP, @@ -444,7 +442,8 @@ UREL: SETZM FSTBLK(DEVDAT) ;ZERO FSTBLK PUSHJ PDP,GETDT ;WAIT TILL DTC AVAILABLE MOVEI BLK,DIRBLK ;BLOCK NUMBER PUSHJ PDP,WRTBLK ;WRITE UT - PUSHJ PDP,WAIT1 ;WAIT TILL IT HAS BEEN WRITTEN + JRST WAIT1 ;DONT RETURN TO USER TILL DONE + ;GET DEC TAPE CONTROLLER GETDT: PUSHJ PDP,GETDCDT ;GET DATA CONTROL. DECTAPE CONTROL @@ -455,6 +454,7 @@ GETDT: PUSHJ PDP,GETDCDT ;GET DATA CONTROL. DECTAPE CONTROL MOVEM DEVDAT,USEWRD ;SAVE ACS NEEDED ON INTERRUPT LEVEL JRST SETACT ;LIGHT IOACT AND RETURN + ;HERE TO CLOSE A DUMP MODE FILE CLSDMP: TLO IOS,CLSDMP ;SET SWITCHES PUSHJ PDP,GETDT ;GET CONTROL @@ -479,7 +479,6 @@ UIN: TLZ IOS,IO PUSHJ PDP,BLKCHK ;CHECK LEGALITY OF BLOCK NUMBER TLNN IOS,DMPMOD ;DUMP MODE? CAIE BLK,DIRBLK ;TRYING TO READ DIRECTORY? - JRST READBF ;NO. GO READ ;READING DIRECTORY - GIVE CORE IMAGE IF IT EXISTS @@ -503,6 +502,7 @@ EOF: TLO IOS,IOEND ;LIGHT EOF BIT JRST STOIOS JRST DMPEOF ;GIVE UP CONTROL IF DUMP-MODE + ;ZERO USER'S CORE ON SAVE-MODE INPUT ZERCOR: MOVEI TAC,JOBDDT(PROG) ;ZERO CORE HRLI TAC,1(TAC) @@ -532,7 +532,6 @@ UOUT: TLO IOS,IO JUMPE BLK,FAKADV ;DONT WRITE IF NO BLOCK GIVEN PUSHJ PDP,BLKCHK ;CHECK FOR LEGAL BLOCK UOUT2: TLNN IOS,DMPMOD ;ALREADY HAVE CONTROL IF DUMP-MODE - PUSHJ PDP,GETDT ;GET DEC TAPE CONTROLLER FILBUF: DTOCHK: TLNE IOS,DMPMOD ;DUMP MODE? @@ -540,6 +539,8 @@ DTOCHK: TLNE IOS,DMPMOD ;DUMP MODE? MOVSI TAC,@DEVOAD(DEVDAT) ;LOCATION OF BUFFER ADD TAC,[XWD 1,BUF];SET TO STORE IN MONITOR BUFFER BLT TAC,BUF+177 ;GO BLT IT + SKIPN BUF ;GIVE UP TAPE IF + JRST THRUTP ;NO BUFFER TO OUTPUT TLZ IOS,NOLINK OUFULL: TRNE IOS,UDSD ;NON-STANDARD? JRST OUTBL2 ;YES, NO FILE-STRUCTURED OPERATIONS @@ -561,6 +562,7 @@ OUTBLK: HRLM BLK,BUF ;SAVE LINK IN 1ST WORD OF BLOCK OUTBL2: HRRZ BLK,OBLK(DEVDAT) PUSHJ PDP,STOIOS + WRTBLK: PUSHJ PDP,FNDBLK ;GO SEARCH FOR BLOCK MOVE TAC1,[BLKO DTC,700] ;HERE WE ARE - GO WRITE JRST RDWRT @@ -577,8 +579,7 @@ COR2HM: MOVEI TAC,@DEVOAD(DEVDAT) ;WHERE IT IS TLO IOS,CHNGDR ;REMEMBER TO WRITE IT OUT MOVSI TAC1,DVDIRI ORM TAC1,DEVMOD(DEVDAT) ;DIR. IS NOW IN CORE -FAKADV: TLZE IOS,DMPMOD ;DUMP MODE? - JRST THRUTD ;YES. GIVE UP CONTROL +FAKADV: TLZN IOS,DMPMOD ;DUMP MODE? PUSHJ PDP,ADVBFE ;ADVANCE BUFFERS JFCL TLZ IOS,NOLINK ;DIRECTORY BLOCK IS NOT LINKED @@ -603,6 +604,7 @@ DMPST2: SOS UUO ;NO. SAVE START OF LIST (-1) DMPTS1: POP PDP,TAC JRST THRUTD + IFN CPBIT, < ;HERE TO START DUMP-MODE INTO USER AREA DIRECTLY TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE @@ -618,6 +620,7 @@ TOUSER: JUMPE AC2,NOBLK0 ;CANT READ BLK 0 IN NON-STD DUMP MODE MOVEM TAC,DCLOC1 ;IOWD IS EXHAUSTED HRRZM PROG,ADRPRG ;SAVE JUST ADDRESS OF PROG TLO IOS,NOBUF ;INDICATE DIRECTLY TO USER + XCT @1(PDP) ;TURN ON/OFF IO TLNN IOS,IO JRST CPOPJ1 ;READING - CONTINUE POP PDP,TAC ;WRITING - THIS WILL SAVE LOTS OF TIME @@ -673,11 +676,13 @@ NXTCM1: HRRM TAC,DMPLST(DEVDAT) ;STORE GO-TO ADDRESS JUMPG TAC,NXTCM1 ;GO-TO WORD ADDI TAC,(PROG) ;REAL COMMAND - ADD RELOCATION AOJA TAC,CPOPJ1 ;AND RETURN + ;END OF DUMP-MODE LIST NXTCM2: SETZM SVDWRD(DEVDAT) ;ZERO POINTERS SETZM DMPLST(DEVDAT) POPJ PDP, + DMPFLC: SKIPE TAC,SVDWRD(DEVDAT) ;IS THERE ANOTHER COMMAND JRST DMPFLA ;YES. GET IT JRST DMPTH2 ;NO. THROUGH @@ -715,7 +720,8 @@ IOGO: IFN CPBIT, < CONO PI,PION POPJ PDP, ;DISMISS INTERRUPT -;HERE FOR AY DATA WORD WITH TAPE IN REVERSE + +;HERE FOR ANY DATA WORD WITH TAPE IN REVERSE RVERS: 0 IOWD: BLKI DTC,PNTR ;READ (WRITE) A WORD JRST RVTHRU ;POINTER RAN OUT @@ -731,6 +737,7 @@ DTATHR: 0 JSR SHUTDN ;SHUT DOWN DATA CONTROL JEN @DTATHR ;DISMISS + SHUTDN: 0 CONSZ DC,10000 ;DATA MISSED? SETOM ERRFLG ;YES. SET SWITCH @@ -757,7 +764,6 @@ FNDBL2: SETZM ERRFLG ;RESET DATA MISSED FLAG MOVEM TEM,DCLOC1 ;FOR FORWARD DATA OPERATIONS CONSZ DTC,20000 ;IS TAPE ALREADY MOVING/ JRST FNDBL4 ;YES - TRO TAC,323200 ;NO, SET READ BLK NOS., START DELAY TLNN IOS,RVERSE ;MOVE TAPE BACKWARDS? TRO TAC,10000 ;YES @@ -770,6 +776,7 @@ FNDBL3: IFN CPBIT, < MOVEM IOS,DEVIOS(DEVDAT) ;RESTORE IOS IN CORE POPJ PDP, ;AND EXIT + ;HERE TO INITIATE READ OF A TAPE THAT IS MOVING ALREADY FNDBL4: CONSZ DTC,10000 ;GOING BACKWARDS? TRO TAC,10000 ;YES @@ -860,13 +867,13 @@ DTCIN2: TLNE IOS,DMPMOD ;DUMP MODE? MOVEM TAC,IBLK(DEVDAT) ;STORE IN DDB TLZE IOS,IOW ;NO. IN IO WAIT? PUSHJ PDP,SETIOD ;YES. TAKE OUT OF WAIT - TLZE IOS,SINGL+RWDIR+DMPCLS ;DIRECTORY OPERATION OR - ;CLOSING DUMP FILE? + TLZE IOS,SINGL+RWDIR ;DIRECTORY OPERATION? JRST THRUTP ;YES. LEAVE TLNE IOS,IO ;WRITING? JRST OUTHRU ;YES EXTERN JBTSTS,PJOBN + ;HERE ON END OF AN INPUT BLOCK HRROI TAC1,177 ;MASK OUT 1ST-BLK DATA TRNN IOS,UDSD ;UNLESS IN NON-STD @@ -883,7 +890,6 @@ DTCIN2: TLNE IOS,DMPMOD ;DUMP MODE? JRST THRUIN ;YES. DONT ADVANCE BUFFERS PUSHJ PDP,ADVBFF ;GET NEXT BUFFER JRST THRUIN ;EMPTY BUF NOT AVAILABLE - SKIPE BLK ;EXIT IF EOF OR BLOCK TOO LARGE CAILE BLK,TOPBLK ;THE ERROR WILL BE CAUGHT ON THE JRST THRUIN ;UUO LEVEL NEXT TIME AROUND @@ -891,6 +897,7 @@ DTCIN2: TLNE IOS,DMPMOD ;DUMP MODE? SKIPG DTREQ ;YES. ANYONE ELSE WANT IT? JRST READBC ;NO. READ NEXT BLOCK + THRUIN: HRRZ TAC,OBLK(DEVDAT) ;TAPE ALSO BEING WRITTEN? JUMPN TAC,THRUTP ;YES. DONT CHANGE REVERSE BIT TLZ IOS,RVERSE ;NO. SET IOS BIT TO CORRECT DIRECTION @@ -917,7 +924,6 @@ THRUTD: PUSHJ PDP,THRUTA ;GIVE UP DATA CONTROL CONO DTC,0 ;SHUT DOWN DATA CONTROL HLLZS DTCINT POPJ PDP, ;AND LEAVE - EXTERN CLOCK ;HERE ON END OF OUTPUT BLOCK @@ -932,6 +938,7 @@ OUTHRU: PUSHJ PDP,ADVBFE ;GET NEXT BUFFER JRST FILBUF ;NO. GO WRITE NEXT BLOCK JRST THRUTP ;YES. GIVE UP TAPE + ;TURN TAPE AROUND AFTER END-ZONE INTERUPT TURN: MOVEM TAC,TEMPA ;SAVE TAC MOVE TAC,UNIT ;UNIT AND CHANNEL @@ -952,6 +959,7 @@ TIMINT: CONSO DTS,20 ;TIME FLAG INTERRUPT ON? HLLZS DTCINT JEN @DTCCHL ;AND LEAVE + ;HERE WITH AN INTERRUPT WHILE SEARCHING FOR BLOCK NUMBERS BLKNUM: CONSZ DTS,2 ;END ZONE INTERRUPT? JRST TURN ;YES. TURN AROUND @@ -966,7 +974,7 @@ SPRIUS: CONI DTC,TEMPA ;READ DTC STATUS BITS TIMREQ: XWD .+1,3 ;E CLOCK TICKS SOSL DTREQ ;ALLOW OTHER JOBS - SETOM DTAVAL ;TO GET DT CONTROL NOW + SETOM DTAVAL ;TO GET DT CONTROL NOW POPJ PDP, ;COME HERE ON END OF DUMP MODE BLOCK SVDMTH: IFN CPBIT, < @@ -1006,6 +1014,7 @@ SVDMIN: HLRZ BLK,BUF ;NEXT BLOCK NUMBER HRRM BLK,IBLK(DEVDAT) ;SAVE IN DDB JRST CPOPJ1 + IFN CPBIT, < ;HERE WHEN THROUGH DUMP-MODE DIRECTLY TO USER USDMTH: MOVEI TAC1,IBLK(DEVDAT) @@ -1039,6 +1048,7 @@ RDNXT: CAIG BLK,TOPBLK ;BLOCK LEGAL? JRST READBC ;GO READ BLOCK NUMBER TROA IOS,IOBKTL ;LIGHT ERROR BIT + ;EOF BEFORE ALL DATA IS IN - DUMP MODE DMPEOF: TRO IOS,IODEND ;LIGHT EOF BIT JRST DMPTH2 ;GIVE UP TAPE @@ -1061,7 +1071,6 @@ ERRS1: CONSO DTS,4 ;IF ILLEGAL OP - DONT RETRY JRST FNDBL2 ;NO. TRY AGAIN ;PERMANENT ERROR - PERMER: CONSZ DTS,10 TRO IOS,IODTER ;PARITY CONSO DTS,100 @@ -1106,4 +1115,3 @@ DIRCTN: 0 BUF: BLOCK 200 DTAEND: END - \ No newline at end of file diff --git a/src/eddt.mac b/src/eddt.mac index f8973aa..78e2109 100644 --- a/src/eddt.mac +++ b/src/eddt.mac @@ -13,7 +13,7 @@ DDT ASSEMBLY INSTRUCTIONS THE SOURCE OF DDT,13 WILL ASSEMBLE INTO SEVERAL DIFFERENT VERSIONS; THE ASSEMBY IS CONTROLED BY THE VALUE ASSIGNED -TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWSR: +TO THE SYMBOL "EDDT". THE SYMBOL "EDDT" IS DECODED AS FOLLOWS: BIT 35 =0: ASSEMBLE USER MODE DDT =1: ASSEMBLE AN EXECUTIVE MODE DDT @@ -58,6 +58,7 @@ EXAMPLES OF "EDDT" DEFINTIONS: + EXAMPLE OF A MACRO ASSEMBLY COMMAND: .^C @@ -69,7 +70,6 @@ EDDT=0 ^Z END OF PASS 1 ;THIS LINE TYPED BY MACRO - ^Z NO ERRORS DETECTED ;TYPED BY MACRO @@ -180,12 +180,12 @@ PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM ITF=2 ;INSTRUCTION TYPED IF ITF=1 OUTF=4 ;OUTPUT IF OUTF=1 -CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT +CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT Q2F=1 ;NUMBER TYPED AFTER ALT MODE -R20F=10 ;TEMP FLAG USED IN SETUP +R20F=10 ;TEMP FLAG USED IN SETUP SBF=20 -NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE +NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE POWF=4000 ;ARGUMENT FOR EXPONENT COMING ;DEFINE SYMBOL TABLE SYMBOL TYPES @@ -204,6 +204,7 @@ DDT: INTERN DDTEND ;DECLARE END OF DDT AS INTERNAL, FOR DDTX=DDT ENTRY DDTX ;NEEDED BY MONITOR> + ;DEFINE $ SYMBOLS INTERNAL TO DDT OPDEF DDTINT [Z 0,] ;ADDRESS FLAG FOR INTERNAL REGISTERS @@ -219,7 +220,6 @@ XP $M,MSK XP $I,SAVPI SETUWP=36 - ;DEFINE I/O DEVICE MNEMONICS IFN EDDT&1,< @@ -239,7 +239,6 @@ XP UTC,210B11 XP UTS,214B11 XP DCSA,300B11 XP DCSB,304B11 - XP DF,270B11 XP MTC,220B11 XP MTS,224B11 @@ -257,6 +256,7 @@ XP JOV,2554B11 XP JEN,2545B11 XP HALT,2542B11 + IFE EDDT&10,< DDT: JSR SAVE PUSHJ P,REMOVB @@ -277,6 +277,7 @@ DDT: JSR SAVE SKIPL PRGM ;IF PRGM .GE. 0, THEN RE-INIT DDT0: MOVEM W,PRGM ;PRGM=C(JOBSYM) > + IFN EDDT&10,< DDT: CALLI MOVEI T,SYMSET @@ -296,7 +297,6 @@ DDT: CALLI SETOM CRASHS ;FLAG CRASH.SAV EXISTS ON DSK USETI 1,1 INPUT 1,RSILST - STATZ 1,740000 HALT .-3 SETOM RSAVE ;FORCE READING OF "CURRENT" BLOCK @@ -331,7 +331,7 @@ HOW TO COPY MONITOR SYMBOL TABLE INTO FILDDT 6) AFTER CARRIAGE RETURN IS TYPED FILDDT IS DONE. 7) SAVE FILDDT WITH A NEW NAME SO AS NOT TO CONFUSE IT WITH THE ORIGINAL FILDDT.SAV - + THE MONITOR CAN BE LOADED IN ANY OF THREE WAYS(IN ORDER OF PREFERENCE): 1. UNDER TIME SHARING WITH REGULAR LOADER AND COMMON 2. UNDER REGULAR 10/30 MONITOR WITH REGULAR 10/30 LOADER & COMMON @@ -388,9 +388,7 @@ TCOPY: PUSHJ P,FETCH ;GET A WORD JRST NOLPT ;GO TRY IT DDTSTP: Z ;SAVE POSSIBLE SYMBOL POINTER > - - -DD1: PUSHJ P,CRF + DD1: PUSHJ P,CRF DD1.5: TLZ F,ROF ;CLOSE ANY OPEN REGISTER MOVE T,[XWD SCHM,SCH] BLT T,ODF ;LOAD ACS @@ -433,6 +431,7 @@ L21: MOVE R,T LDB W,BDISP(R+1) ;GET 12 BIT ADDRESS FROM DISPATCH TABLE CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE JRST DDT(W) + MOVE T,SYL TLZN F,LTF JRST POWER @@ -515,7 +514,6 @@ UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER MOVE T,SYM TLO T,GLOBAL MOVEM T,(R) - HRRZ T,LLOCO TLNE F,MF TLO T,400000 @@ -595,7 +593,6 @@ NM1A1: TRZE W2,1 SOJG W1,NM1A1 NM1B: MOVSI W1,211000(T) FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT - FADRB R,FH ;ADD VALUE INTO FLOATING NO. MOVEM R,SYL AOJA T,LE1A @@ -673,7 +670,6 @@ EVAL3: MOVE T,(R) TLNN T,340000 JRST EVAL1 MOVE T,1(R) - CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP CPOPJ: POPJ P, @@ -707,8 +703,15 @@ TEXI3: LSHC T-1,-43 SIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT) SIXBIN: CAMN T,SYL JRST SIXBI2 - ANDI T,77 - TRC T,40 + CAIL T,"A"+40 ;IS CHAR BETWEEN LOWER CASE "A" AND + CAILE T,"Z"+40 ; LOWER CASE "Z"? + SKIPA ;NO + TRC T,40 ;YES, CONVERT TO UPPER CASE + CAIL T," " ;IS CHAR IN SIXBIT SET? + CAILE T,"_" + JRST ERR ;NO + ANDI T,77 ;YES, MASK TO 6 BITS + TRC T,40 ;CONVERT TO SIXBIT FORM ROT T,-6 LSHC T-1,6 SOJA W1,SIXBI1 @@ -761,7 +764,6 @@ DEF1: MOVN R,[XWD 2,2] HRL T,ESTU HRRM T,ESTU SKIPGE ESTU - BLT T,-1(R) DEF2: MOVE T,DEFV MOVEM T,1(R) ;PUT IN NEW VALUE @@ -784,6 +786,7 @@ DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY ADD S,T HRRM S,T PUSHJ P,DEP + JFCL POP P,R PUSHJ P,REMUN DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL @@ -836,7 +839,6 @@ ACCCF: MOVSI T,.-. ;LEFT HALF OF A,,B ADD T,R ADDB T,WRD JRST SPACE+1 - ACCF1: MOVEM T,WRD ;SET LEFT HALF OF A,,B JRST SPACE+1 @@ -856,7 +858,6 @@ RPRN: TLNN F,QF ;) POP P,F TLNE F,PTF TLNE F,SF - JRST RPRN1 MOVEM T,SYL TLO F,QF+SF @@ -909,7 +910,9 @@ CARR: PUSHJ P,DEPRA ;CLOSE REGISTER CAIN T,15 JRST .-2 JRST DD1.5> - OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT + + +OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY TROA F,LF1 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT @@ -1081,7 +1084,6 @@ LEAV1: XWD 0,LEAV HRRZ T,@BCOM3 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK HLRZ T,@BCOM3 - JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE PUSHJ P,LCT ;PRINT TAB HLRZ T,@BCOM3 @@ -1210,7 +1212,6 @@ REMOV1: MOVE T,B1INS-B1ADR(S) JRST REMOV1 IFN EDDT&1, IFE EDDT&1, - ;IN EXEC MODE, SAVE UP TTY STATUS ;IN USER MODE, DONE BY SAVE ;ALL $B COMMANDS GET HERE IN FORM: $B @@ -1279,7 +1280,6 @@ DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT IFE EDDT&10,< DEP: IFE EDDT&1,< JSP TT1,CHKADR ;LEGAL ADDRESS? - JRST DEP4 ;YES BUT IN HI SEGMENT> TRNN R,777760 JRST DEPAC ;DEPOSIT IN AC @@ -1340,6 +1340,7 @@ MONPEK: HRRZ T,4 ;REMOVE COUNT CALLI T,33 ;DO PEEK UUO JRST CPOPJ1 ;RETURN VALUE IN AC T > + IFE EDDT&1,< ;DO ADDRESS CHECKS ONLY IN USER MODE CHKADR: HRRZ TT,JOBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT CAIL TT,(R) ;CHECK FOR WITHIN LOW SEGMENT @@ -1349,6 +1350,7 @@ CHKADR: HRRZ TT,JOBREL ;GET HIGHEST ADDRESS IN LOW SEGMENT CAIGE TT,(R) ;IS THE ADR TO BIG FOR HIGH SEGMENT? POPJ P, ;NO, YES- ILL. ADR. JRST 0(TT1) + > ;END OF IFE EDDT&1 IFN EDDT&1, ;NO ADDRESS CHECKS IN EXEC MODE @@ -1371,7 +1373,6 @@ LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL MOVEM T,TEM LOOK1: TDNE W2,(R) - JRST LOOK3 MOVE T,(R) TLNN T,PNAME ;NAME @@ -1467,7 +1468,6 @@ PAD: ANDI T,-1 JRST @AR ;PADSO OR PAD1 PADSO: JUMPE T,FP7B ;PRINT A ZERO PUSHJ P,LOOK - PADS1: POPJ P,0 MOVE W2,1(W1) CAIGE T,100 @@ -1488,8 +1488,7 @@ PADS3A: TRNE F,NAF PADS3B: MOVNM T,TEM MOVEI T,"-" JRST PADS1A - -INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM + INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM TDCN T,[XWD -1,400000] JRST PADS3B ;TYPE AS NEG NUM LDB R,[POINT 7,T,9] ;PICK OUT IO DEVICE BITS @@ -1535,7 +1534,6 @@ NWORD: ADDI R,326000+40*T ;JUMPN T, SEAR1: PUSHJ P,FETCH JRST SEAR2A TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH - JRST EFFEC0 EQV T,WRD AND T,MSK @@ -1600,7 +1598,6 @@ IFN EDDT&1, ZERO: TLNN F,CCF JRST ERR PUSHJ P,SETUP - HRRZ S,@SYMP ;GET 1ST ADR OF SYMBOL TABLE HLRE W1,@SYMP ;GET LENGTH OF SYM TABLE SUB W1,S ;GET NEG OF LAST ADR @@ -1633,17 +1630,20 @@ TOC: HRRZ W1,ODF JRST TOCA ;YES, DO NOTHING SPECIAL HRRM T,TOCS ;NO, TYPE AS HALF WORD CONSTANT HLRZS T ;GET LEFT HALF - PUSHJ P,TOCA ;TYPE LEFT HALF + PUSHJ P,TOC0 ;type left half MOVSI W1,(ASCII /,,/) PUSHJ P,TEXT2 ;TYPE ,, TOCS: MOVEI T,.-. ;GET RIGHT HALF BACK -TOCA: LSHC T,-43 +TOCA: HRRZ W1,ODF ;IS OUTPUT RADIX DECIMAL? + CAIN W1,12 + JRST TOC4 ;YES,TYPE SIGNED WITH PERIOD +TOC0: LSHC T,-43 LSH W1,-1 ;W1=T+1 -TOC1: DIVI T,@ODF + DIVI T,@ODF HRLM W1,0(P) - JUMPE T,TOC2 - PUSHJ P,TOCA -TOC2: HLRZ T,0(P) + SKIPE T + PUSHJ P,TOC0 + HLRZ T,0(P) ADDI T,"0" JRST TOUT @@ -1702,7 +1702,6 @@ FP1A: MOVEI C,0 FP3: MULI A,400 ASHC B,-243(A) - MOVE A,B SETZM TEM1 ;INIT 8 DIGIT COUNTER SKIPE A,B ;DON'T TYPE A LEADING 0 PUSHJ P,FP7 ;PRINT INTEGER PART OF 8 DIGITS @@ -1959,6 +1958,9 @@ LOADE: XWD LOADB-.,LOADB > ;END OF IFN EDDT$1&B36 ;FOR PAPER TAPE IO + + + SAVE: 0 ;SAVE THE ACS AND PI SYSTEM SKIPN SARS JRST SAV1 @@ -1978,7 +1980,6 @@ SAV5: ; CALLIU T,SETUWP ;REQUEST TO CLEAR UWP ; HRROS SAVUWP ;FAILED, UWP (BIT 0) STILL 1 ; SKIPN SARS ;USER'S SATE SAVED ALREADY? - ; HRRM T,SAVUWP> ;NO, SAVE STATE OF UWP SETOM,SARS ;FLAG PROTECTING SAVED REGISTERS @@ -2081,7 +2082,6 @@ TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES IFE EDDT&1,< ;USER MODE TELETYPE I/O IFN EDDT&4,< ;ASSEMBLE WITH OLD DDT MODE IO - TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE CAME T,[POINT 7,INBFF] PUSHJ P,FINOUT @@ -2132,7 +2132,9 @@ TTYRET: MOVE T,[POINT 7,INBFF] TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE > - IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO + + + IFE EDDT&4,< ;ASSEMBLE WITH TTCALL TELETYPE IO OPDEF TTCALL [51B8] @@ -2149,7 +2151,6 @@ IFN EDDT&10,< PUSHJ P,INCHR > JRST WRONG ;TYPE XXX FOR A RUBOUT POPJ P, - TOUT: IFN EDDT&10,< SKIPE COMAND ;IS THERE A COMMAND FILE? @@ -2207,6 +2208,7 @@ PUTOK: > ;END OF IFN EDDT&10 > ;END OF IFE EDDT&1 + BDISP: POINT 12,DISP(R),11 POINT 12,DISP(R),23 POINT 12,DISP(R),35 @@ -2226,7 +2228,6 @@ D ERR,CARR,ERR D ERR,ERR,ERR D PUNCH,ERR,ERR D ERR,ERR,ERR - D ERR,ERR,ERR D CONTROL,ERR,ERR D ERR,ERR,SPACE @@ -2254,7 +2255,8 @@ D OSYM,VARRW,PSYM ;THIS TABLE DOES NOT HAVE ENTRIES FOR CHARS .GE. 140; THESE ; ARE DETECTED AS ERRORS NEAR L21: - BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE + +BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE HRRZI AR,TOC TRZN F,Q2F JRST ERR @@ -2385,7 +2387,7 @@ SVBT2: 0 ; ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A ; TREE SEARCH METHOD IS USED. - REPEAT 0,< + REPEAT 0,< DEFINE REDEF (XX)< DEFINE INFO (AA,BB)< @@ -2506,8 +2508,6 @@ BYT9 REPEAT BINC, IFN BINRY, > ;END OF REPEAT 0 - - IFN EDDT&10,< ;FILDDT STUFF CRASH: SIXBIT .CRASH. ;CANONICAL NAME FOR CRASH SIXBIT .SAV. @@ -2534,7 +2534,6 @@ RSAVE: IOWD 1000,RSIDT ;INDEX OF THE CUFRRENT BLOCK, 0,1,... CURLST: IOWD 4000,CURENT Z > - SUBTTL OP DECODER DEFINE BYT9 (A) - END + END diff --git a/src/errcon.mac b/src/errcon.mac index 0338ed0..87d85da 100644 --- a/src/errcon.mac +++ b/src/errcon.mac @@ -396,7 +396,7 @@ PRTDIG: IDIVI TAC,12 ;DIVIDE BY 10 HRLM TAC1,(PDP) ;RT ON PD LIST JUMPE TAC,.+2 ;FINISHED? PUSHJ PDP,PRTDIG ;NO, CALL S OR F - HRLZ TAC,(PDP) ;YES, GET LAST NUMBER + HLRZ TAC,(PDP) ;YES, GET LAST NUMBER PRTNUM: ADDI TAC,"0" ;CONVERT TO ASCIZ IFN FTTTYSER,< EXTERN OUTCHS diff --git a/src/onceb.mac b/src/onceb.mac index 89b786d..ff9c5bf 100644 --- a/src/onceb.mac +++ b/src/onceb.mac @@ -41,7 +41,7 @@ LINKSR: 0 ;CALLED WITH JSR FROM SYSINI MOVSI T,JOBPFI ;SET LH OF XJBPFI WITH JOBPFI MOVEM T,XJBPFI ;LOADER DORES NOT HANDLE GLOBALS IN LH IFN FT2REL,< - JSP TSTREG ;GO TEST IF TWO RELOC REGISTERS EXIST + JSR TSTREG ;GO TEST IF TWO RELOC REGISTERS EXIST > ;HIGHEST LOC. IN JOB AREA PROTECTED FROM IO ;MOVE SYMBOL TABLE UP IN MEMORY @@ -72,7 +72,7 @@ IFN FT2REL,< HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1 HRRM DAT,STO1 ;DIST, TO MOVE - MOVE TAC1,UUO ;L-N,FIRST ADD. + MOVE TAC1,UUO ;-N,FIRST ADD. ADDI TAC1,1(DAT) ;FROM NEW S.T. POINTER MOVEM TAC1,DDTSYM ;STORE IN LOWER CORE MOVE TAC1,-1(TAC) @@ -94,17 +94,16 @@ INTLOP: HLRZ DAT,INTTAB(TAC) ;GET NEXT PI NUMBER ANDI DAT,7 ;MASIC OUT NUMBER OF DDB'S LSH DAT,1 ;SHIFT LEFT ONE SO MATCH PI LOCATIONS JUMPE DAT,NOPICH ;DOES THIS DEVICE HAVE A PI CHANNEL (PTY)? - MOVE DAT,ITEM ;YES, PICK UP JSR CH'N FROM LOWER CORE + MOVE ITEM,40(DAT) ;YES, PICK UP JSR CH'N FROM LOWER CORE INTLP1: MOVE DAT,ITEM ;SAVE IT IN DAT (EITHER A JRST DEV'NT OR ; JEN @CH'N MOVE ITEM,1(DAT) ;PICK UP INSTR. FOLLOWING INTERRUPT CONSO - - TLNN ITEM,00740 ;IS IT A JEN? + TLNN ITEM,000740 ;IS IT A JEN? JRST INTLP1 ;NO, KEEP LOOKING MOVE TAC1,INTTAB(TAC) ;YES, LAST DEVICE SO FAR, GET DEV'NT HRLI TAC1,(JRST) ;MAKE JRST INSTR. MOVEM TAC1,1(DAT) ;CHANGE JEN @CH'N TO JRST DEV'NT - MOVEM ITEM,1(TAC) ;MAKE DEV'NT+1 BE JEN @CH'N + MOVEM ITEM,1(TAC1) ;MAKE DEV'NT+1 BE JEN @CH'N NOPICH: AOBJN TAC,.+1 ;PICKUP EVERY OTHER WORD? AOBJN TAC,INTLOP ;ANY MOVE INTERRUPT SERVICE ROUTINES? ALRCHN: @@ -150,7 +149,6 @@ UUOTRP: JSR UUO0 ;TO UUO HANDLER 0 ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10 ;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO) JSR UUO2 ;GO SEE IF OP CODE 100 OR SOME OTHER ONE - IFN FT2REL,< ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN @@ -181,11 +179,10 @@ TSTAPR: 0 ;PLACE TO SIDE JSR PC CONO APR,ILM ;CLEAR APR FLAGS AGAIN MOVEI TAC,AND2RG ;=0 IF SOFTWARE CANNOT HANDLE 2 SEG(NULSEG LOADED) ANDM TAC,TWOREG ;=-1 IF IT CAN(SEGCON LOADED) - ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITES + ;TWOSEG SET TO AND OF SOFTWARE AND HARDWARE CAPABILITIES MOVNI TAC,SEGN ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES HRLI TAC,JOBN ;SET RH OF POINTER TO FIRST HIGH SEG ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST - ; WHICH BUILD FORBITS FROM HAVING EXTERNALS MOVSM TAC,SEGPTR ;POINTER USED FOR AOBJN LOOPS CONO PI,10000 ;CLEAR PI SYSTEM @@ -243,6 +240,7 @@ PATSYM: JSR MOVSTP ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE + IFN FTRC10, < ENTRY RCXWNZ ;THIS SYMBOL IS SOLELY TO PERMIT THE SYSTEM RCXWNZ: ; BUILDER TO RETRIEVE THE CORRECT BINARY FILE. @@ -258,7 +256,6 @@ INTERN FTTTYSER IFE FTTTYSER,< DEFINE SETTYO DEFINE TYPE - DEFINE NEXTC > IFN FTTTYSER,< DEFINE SETTYO @@ -361,6 +358,7 @@ TIMLOP: SETZM TIME IMULI TAC,JIFMIN ;JIFFIES SINCE MIDNIGHT MOVEM TAC,TIME ;TIME=JIFFIES SINCE MIDNIGHT + JUMPGE ITEM,QUICK ;SKIP NEXT PART OF DIALOGUE UNLESS THE LAST ITEM ; TYPED IN (NAMELY TIME OF DAT) WAS TERMINATED BY ; AN "ALT MODE". (ACCUMULATOR "ITEM" IS SET UP @@ -479,9 +477,10 @@ ONCE2: MOVEI TAC,SYSDM EXTERNAL CNTDB -ONCE3: PUSHJ PDP,SYSSIZ ;SAVE CURRENT VALUE - JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED +ONCE3: PUSH PDP,SYSSIZ ;SAVE CURRENT VALUE + JSP TAC,CNTDB ;UPDATE SYSSIZ BY SPACE USED ; FOR DEVICE DATA BLOCKS FOR DSK,DTA,MTA,TTY,PTY) + ;PRINT OCTAL SIZE OF MONITOR MOVEI TAC,EXECIS @@ -517,19 +516,23 @@ IFN FTTTYSER, ; IF NOT PATCHED, LEAVE COMMON'S VALUE ONCE5A: + INTERNAL FTDISK IFN FTDISK,< PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOG. > + QUICK: ;THIS IS THE SHORT-CUT EXIT TO BY-PASS MOST OF THE DIALOGUE + INTERNAL FTCHECK IFN FTCHECK,< PUSHJ PDP,OK ;CHECKSUM MONITOR AND SAVE THE ANSWER. > + JRST @ONCE ;***EXIT FROM THE "ONCE-ONLY CODE"*** IFN FTDISK,< EXTERNAL OCTIN,MFDBLK,SATXWD,NUMBLK,SYSPP,REFLAG @@ -550,7 +553,6 @@ REF2: ;YES MOVEI TAC,REF4M ;TYPE LOGICAL DISK ADDRESS OF MFD RETR, INFO PUSHJ PDP,ICONM PUSHJ PDP,OPOUT - PUSHJ PDP,GETLIN JRST REF2 IFN FTTTYSER, @@ -592,10 +594,12 @@ REF3A: PUSHJ PDP,REFRES ;REFRESH. JRST REF5 ;ERROR + MOVEI TAC,REF6M ;REFRESHING SUCCESSFULLY COMPLETED ! PUSHJ PDP,ICONM PUSHJ PDP,OPOUT ;TYPE "REFRESHED !" + MOVE TAC,SYSPP MOVEM TAC,REFLAG ;TO PERMIT AUTOMATIC LOG-IN UNDER ; PROJ-PROG NUMBER [1,1] EVEN @@ -603,7 +607,6 @@ REF3A: PUSHJ PDP,ICONM ; ON THE NEWLY REFRESHED DISK. PUSHJ PDP,OPOUT POPJ PDP, - IFE FTRC10, < REF4: POP PDP,TAC1 MOVEI TAC,REF5M @@ -624,8 +627,9 @@ REF5: PUSH PDP,TAC ;ERROR. ON COMMING HERE, TAC HAS LOGICAL BLOCK REF1M: ASCIZ /DO YOU WANT TO REFRESH THE DISK ? (Y OR CR) + / -REF2M: ASCIZ /ARE YOU SURE(Y OR CR)? +REF2M: ASCIZ /ARE YOU SURE(Y OR CR)? / REF3M: ASCIZ /DO YOU WANT TO CHANGE THE LOCATION OF THE MFD(Y OR CR)? / @@ -692,7 +696,7 @@ IFE FTTTYSER,< ADD TAC,[XWD 070000,0] ;NO, BACK UP BYTE POINTER TLNE TAC,400000 ;FINISHED THIS WORD YET? ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS> - MOVEI CHREC,134 + MOVEI CHREC,134 ;OUTPUT BACK SLASH PUSHJ PDP,TYO SOJA ITEM,GET1 @@ -813,7 +817,7 @@ IOCONF: ASCIZ / IO CONFIGURATION / OPRM: ASCIZ / -TYPE NAME OF OPR CONSOLE. +TYPE NAME OF OPR CONSOLE / SYSM: ASCIZ / DO YOU WANT SYSMAK (TYPE Y IF YES, CR IF NO)? @@ -830,6 +834,7 @@ DESMES: ASCIZ /TYPE DESIRED MAX,(DEC), CR IF OK AS IS / CRLFMS: ASCIZ / / + ;INITIALIZE SAT SEARCH ENTRIES ;THIS "DFWUNS" ROUTINE IS CALLED BY MANDATORY ONCE ONLY CODE(LINKSR) @@ -849,15 +854,15 @@ EXTERNAL WLBIT,NUMBIT,DSKCNT DFWUNS: IFN FTRC10, < PUSHJ PDP,WRITLK ;FORCE THE WRITE-LOCK SWITCH SETTINGS TO BE ZERO. - PUSHJ PDP,RDSTAT ;READ VITAL DISK STATISTICS BLOCK, STORE PARAMETERS PUSHJ PDP,CAPCTY ;DETERMINE CURRENT SYSTEM CAPACITY (HOW MANY DISKS). CAMN TAC,LBHIGH ;HAS CAPACITY CHANGED SINCE LAST REFRESH ? JRST DFWNZ1 ;NO, EVERYTHING APPPEARS TO BE OKAY. - SETTYO ;YES, PRINT WARNING MESSAGE... + SETTYO ;YES, PRINT WARNING MESSAGE... PUSHJ PDP,INLMES ASCIZ /DISK CAPACITY HAS CHANGED SINCE LAST REFRESHING. EITHER RESTORE PREVIOUS DISK CONFIGURATION OR REFRESH. + / PUSHJ PDP,OPOUT ;START TTY PUSHJ PDP,REF ;GO THROUGH THE REFRESH DIALOGUE @@ -907,19 +912,21 @@ IFE FTRC10, < CAIL DAT,NUMBIT ;BLOCK FULL? JRST SETS8 PUSHJ PDP,DFGETF ;NO. GET A FREE BLOCK - PUSHJ PDP,SETS7 ;WRITE PUSHJ PDP,SETFRE ;FREE THE BLOCK > + SETS5B: MOVEI TAC1,SENTSZ ;PREPARE TO BUMP SATPTR POP PDP,TAC AOBJN TAC,SETS1 ;DO ALL SAT BLOCKS + IFE FTRC10, < JRST SAT05 ;RETURN > + IFN FTRC10, < HRRZ TAC,SATPTR SETS5X: CAIL TAC,SATTOP @@ -932,6 +939,7 @@ SETS5X: CAIL TAC,SATTOP SETS6: POP PDP,TAC ;ERROR, TRY AGAIN JRST SETS2 + IFE FTRC10, < ;WRITE-LOCK DETERMINATION ON THE OLD PDP-6 (DATA PRODUCTS) DISK -- @@ -960,6 +968,7 @@ SETS8: MOVEI TAC,SETS9 ;BLOCK FULL, READ FIRST ONE HRRM TAC,DSKBUF(DEVDAT) JRST SETS5B + SETS9: BLOCK 204 > ;CLOSE THE IFE FTRC10 @@ -1089,7 +1098,6 @@ REFR2: MOVE TAC1,[XWD -200,NULBLK] ;SAT BLOCKS AOS TAC ;SAT RETREIVAL INFORMATION ADD TAC,MFDBLK SETZB IOS,DEVIOS(DEVDAT) - MOVE TAC1,[XWD -200,SATRET] MOVEM TAC1,DSKBUF(DEVDAT) PUSHJ PDP,MQOUT @@ -1145,6 +1153,8 @@ NULBLK: ZEROES 5400/44-1 ;NULL SAT BLOCK XWD 001777,-1 ONES 200+NULBLK-. + + > ;END OF THE REFRESHER FOR THE OLD PDP-6 DISK. IFN FTRC10, < @@ -1221,6 +1231,7 @@ RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT ;BITS 26 - 27 DISK SELECTED BY BITS 18-19 OF LAST CONO ;BITS 28 - 35 CURRENT SECTOR POSITION OF SELECTED DISK (FOR LATENCY OPTIMIZATION!) + ;DATAO FORMAT FOR THE MODEL RC-10 DISK SYNCHRONIZER -- ;BITS 00 - 17 DISK ADDRESS ELECTION @@ -1230,7 +1241,7 @@ RESETB=1B32 ;RESET THE DONE FLAG (CORRESPONDING CONI BIT) TO CLEAR INTERRUPT ;BITS 18 - 23 INITIAL PARITY REGISTER SETTING 9ZERO EXCEPT FOR DIAGNOSTIC PROGRAMS) DDSKPE=1B24 ;DISABLE DISK PARITY ERROR STOP DCHNPE=1B25 ;DISABLE CHANNEL DATA PARITY ERROR STOP -WRBIT=1B16 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK +WRBIT=1B26 ;SET MEANS WRITE ON DISK, RESET MEANS READ FROM DISK ;BITS 27 - 34 ;CORRESPONDING BITS OF INITIAL CHANNEL CONTROL ADDRESS, HENCE, ; THIS ADDRESS MUST BE EVEN AND IN THE FIRST 1K OF CORE MEMORY! ;BIT 35 ;WRITE EVEN PARITY DATA INTO MEMORY (DIAGNOSTICS ONLY!) @@ -1251,7 +1262,7 @@ IFN FTSWAP,< CAIG TAC1,STATBK ;SWAPPING AREA MUST NOT OVERLAY THE JRST RFRSHE ; VITAL STATISTICS BLOCK. > - IDIVI TAC1,NUMBLK + IDIVI TAC,NUMBLK MOVN TAC1,TAC ;SET SATXWD TO SHOW ONLY THE NUMBER OF HRLM TAC1,SATXWD ; SAT BLOCKS ACTUALLY IN EXISTENCE. HRRZ TAC1,MFDBLK @@ -1270,13 +1281,13 @@ RFRSHE: MOVEI TAC,RFSHME POP PDP,TAC ; DIALOGUE TO AK THE PARAMETER SPECIFICATION JRST REF6 ; QUESTIONS AGAIN. -RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN. +RFSHME: ASCIZ /PARAMETER SPECIFICATION ERROR. TRY AGAIN. + / - RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK. JRST REFERR ; AN ERROR ON THIS WRITE IS BAD TROUBLE !! - + ;NEXT WRITE THE MFD (MASTER FILE DIRECTORY) ONTO THE DISK PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER @@ -1295,7 +1306,6 @@ RFRSH1: PUSHJ PDP,WRSTAT ;WRITE OUT THE VITAL STATISTICS BLOCK ON THE DISK. HRRZS TAC ADDI TAC,1 ;COMPUTE LOGICAL BLOCK NUMBER OF THE MFD. PUSHJ PDP,WNZWR ;WRITE THE MFD OUT ONTO THE DISK. - JRST REFERR ;ERROR MOVE TAC,[XWD -200,WNZBUF] @@ -1381,8 +1391,7 @@ REFST5: PUSH PDP,TAC REFST6: POP PDP,TAC ;LOOP THROUGH THE WHOLE SET OF SPECIAL BLOCKS AOBJN TAC,REFST5 ; WHICH MUST BE MARKED UNAVAILABLE. -REFST7: MOVE TAC,[XWD -200,WNZBUF] - +REFST7: MOVE TAC,[XWD -200,WNZBUF] PUSHJ PDP,CHKSUM ;COMPUTE CHECKSUM MOVE TAC,SATPTR HRRZM TAC1,1(TAC) ;STORE IT TEMPORARILY IN THE SATENT TABLE. @@ -1446,6 +1455,7 @@ REFSRL: HRRZ AC1,TAC1 ;GET LOGICAL BLOCK NUMBER OF SAT BLOCK. ;ROUTINE TO WRITE THE FIXED BLOCK OF VITAL STATISTICS ONTO THE DISK. + WRSTAT: PUSHJ PDP,WNZCLR ;CLEAR THE OUTPUT BUFFER MOVE TAC,[XWD -WRSTSZ,0] WRSTA1: MOVE TAC1,@WRSTA9(TAC) ;STORE KEY QUANTITIES IN THE OUTPUT BUFFER @@ -1486,11 +1496,13 @@ IFE FTSWAP,< XWD 0,LOWSWP ;LOWSWP DOES DOUBLE DUMMY DUTY IN ; NON-SWAPPING SYSTEM > + WRSTSZ=.-WRSTA9 ;ROUTINE TO READ IN THE FIXED BLOCK OF "VITAL STATISTICS" FROM ; THE DISK AND DISTRUBUTE THEM TO THE APPROPRIATE CORE LOCATIONS. + RDSTAT: MOVEI TAC,STATBK PUSHJ PDP,WNZRD ;READ IN THE VITAL STATISTICS BLOCK. JRST RDSTA2 ;ERROR @@ -1514,6 +1526,7 @@ RDSTA2: MOVEI TAC,RDSTM1 JRST RDSTAT ;NOW TRY AGAIN. RDSTM1: ASCIZ /VITAL DISK STATISTICS LOST, SUGGEST REFRESHING! + / ;ROUTINE TO DETERMINE THE CURRENT SYSTEM'S DISK CAPACITY. I.E., THE NUMBER OF @@ -1528,7 +1541,7 @@ CAPCTY: MOVEI TAC,NUMSAT MOVEM TAC,LBHIGH ;TEMPORARILY CHANGE THIS VALYUE SO THAT THE VALIDITY ; CHECK IN "DSKINT" WILL NOT FAIL SPURIOUSLY. - MOVEI TAC,3 + MOVEI TAC,0 CPCT1: PUSH PDP,TAC PUSHJ PDP,WNZRD ;ATTEMPT TO READ FIRST BLOK OF EACH SUCCESSIVE DISK., JRST CPCT3 ;ERROR @@ -1554,6 +1567,7 @@ CPCT3: POP PDP,TAC POP PDP,LBHIGH JRST CAPCTY ;TRY AGAIN CPCTM1: ASCIZ /DISK READ ERROR DURING CAPACITY SEARCH INITIALIZATION + / ;ROUTINE TO ASSURE THAT THE STATUS OF THE WRITE-LOCK SWITCHES ON THE @@ -1574,7 +1588,6 @@ WRITLK: CONI DSK,TAC MOVE TAC,[252525252525] MOVEM TAC,WNZBUF MOVE TAC,[XWD WNZBUF,WNZBUF+1] - BLT TAC,WNZBUF+177 MOVEI TAC,0 PUSHJ PDP,WNZWR ;WRITE PATTERN IN BLOCK 0. @@ -1593,10 +1606,12 @@ WRLK9: PUSHJ PDP,ICONM ;PRINT ERROR MESSAGE JRST WRITLK ;GO TRY AGAIN WRLKM1: ASCIZ /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK. + / WRLKM2: ASCIZ /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN", FIX THEM ! ! + / ;DISK READING ROUTINE FOR USE ONLY DURING ONCE-ONLY CODE. @@ -1707,10 +1722,10 @@ MDTMOT: PUSH PDP,TAC POPJ PDP, ;SUBROUTINE EXIT............ + ;ERROR EXIT FROM "REFRESH" WHEN A BAD WRITE ON THE DISK OCCURS DURING REFREHSING. REFER1: POP PDP,TAC ;CORRECT PDP IF EXTRA PUSH HAD OCCURRED. - REFERR: MOVE TAC,LBSAVE ;GET BLOCK NUMBER FOR THE ERROR MESSAGE AT REF4. POPJ PDP, ;THIS NO-SKIP RETURN RE-ENTERS THE REFRESH DIALOGUE. diff --git a/src/schedb.mac b/src/schedb.mac index 16c0de7..d23cdcb 100644 --- a/src/schedb.mac +++ b/src/schedb.mac @@ -8,6 +8,7 @@ SUBTTL CLKCSW R,KRASIN/AF/TH/RCC TS 02 JUNE 69 V421 XP VSCHED,421 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP + INTERNAL FTRC10 ;THIS SOURCE FILE MAY BE ASSEMBLED TO USE EITHER THE ; NEW PDP-10 DISK (MODEL RC-10) OR THE OLD PDP-6 DISK (DATA ; PRODUCTS DISK FILE) FOR SWAPPING. @@ -21,6 +22,7 @@ IFE FTRC10, < ENTRY XCKCSW > + EXTERNAL JOB,JBTSTS EXTERNAL JBTQ,PJBSTS EXTERNAL PJBSTS,TIMEF,MJOBN @@ -48,6 +50,7 @@ NXTINI: MOVEI TAC,MAXQ ;MAX. NO. OF QUEUES SETZM XJOB ;CLEAR NO. OF JOBS NEEDING EXPANDING SETZM JOBQUE ;CLEAR JOB NO. TO BE REQUEUED POPJ PDP, + ,NXTJOB DECREMENTS CURRENT JOB'S QUANT. AND PROTECT ,TIMES AND REQUEUES IT IF QUANT. TIME GONE TO 0 ,SERVINCES ANY JOB REQUEING REQUESTED AT OTHER PRIORITY @@ -55,6 +58,7 @@ NXTINI: MOVEI TAC,MAXQ ;MAX. NO. OF QUEUES ,MAKES NO ASSUMPTIONS RE. ACS ,RETURSN NEXT JOB TO RUN IN J. + EXTERNAL JBTSWP,POTLST NXTJOB: SKIPN TIMEF ;CLOCK TIC? @@ -66,7 +70,6 @@ NXTJOB: SKIPN TIMEF ;CLOCK TIC? JRST .+3 SKIPL JBTSWP(J) ADDM SW,JBTSWP(J) - AOBJN J,.-4 NXTJB1: SKIPN J,JOB ;CURRENT JOB NO., IS IT NULL JOB? @@ -140,8 +143,7 @@ IFE FTSWAP,< EXTERNAL CHKSHF PUSHJ PDP,CHKSHF > IFN FTSWAP,< - PUSHJ PDP,SWAP -> + PUSHJ PDP,SWAP> ;SCHEDULAR--SEARCH THRU QUEUES ACCORDING TO SSCAN TABLE ;FOR 1ST JOB IN CORE--RETURN ITS NO. IN J @@ -164,6 +166,7 @@ SCHD1: SETZ J, ;RETURN NULL JOB POPJ PDP, + ;TEMPORARY EXPERIMENTAL SCHEDULING CHANGE TO PERMIT TTY-I/O-WAIT-SATISFIED JOBS ON ; THE DISK TO DISPLACE I/O BOUND JOBS IN CORE.... R.CLEMENTS/D.PLUMER 9 MAY 68 CKJB10: SKIPE INFLG @@ -207,7 +210,8 @@ INTERNAL QXFER,QSCAN,FTSWAP,FTDISK ,BOTH ROUTINES ARE "TABLE DRIVEN" IN THE SENSE THAT THE ,CALLING ROUTINE PROVIDES THE ADDRESS OF A TABLE WHICH ,DEFINES THE SPECIFIC OPERATIONS TO BE PERFORMED. - ;QUEUE INITIALIZATION + +;QUEUE INITIALIZATION ;PUT ALL JOBS IN NULL QUEUE(JOB NO. NOT ASSIGNED) ;CALLED ON RESTART AT LOC 143 @@ -225,7 +229,6 @@ QINI: MOVNI TAC,MXQUE ;MAKE ALL QUEUE HEADERS POINT TO THEMSELVES MOVSM TAC,JBTQP1 ;BACK POINTER FOR JOB 1 MOVEI ITEM,JOBMAX ;MAX. JOB NO. MOVEM TAC,JBTQ(ITEM) ;FOR. POINTER OF JOBMAX JOB NO. - HRLM ITEM,JBTQMN ;SET NULQ HEADER TO POINT TO JOB1 MOVEI TAC,1 ;AND JOBMAX HRRM TAC,JBTQMN ;FORWARD POINTER @@ -234,7 +237,8 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I SOJLE ITEM,CPOPJ ;FINISHED? HRLM ITEM,JBTQP1(ITEM) ;BACK POINTER JOB I+1 POINTS TO JOB I JRST QINI1 - ,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q" + +,DELETES A JOB FROM ITS "SOURCE-Q", DETERMINES A "DEST-Q" ,ACCORDING TO ONE OF 3 FUNCTIONS, AND INSERTS THE JOB AT ,THE BEGINNING OR END OF THIS DEST-Q. IN ADDITION IT MAY ,RESET THE JOB'S QUANTUM TIME (RH JBTSTS). @@ -280,7 +284,6 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I , : EXP ;CORRES. TO +0 , ... , EXP ;CORRES. TO +N-1 - , Z , , UPON A CALL TO QXFER FOR THESE 2 CODES, AC T2 CONTAINES @@ -291,6 +294,7 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I , TABLE. , IF NO MATCH FOUND..NO TRANSFER TAKES PLACE. + ,DEST-Q AS A FUNCTION OF JOB SIZE ,BQJSIZ INSERT AT BEG OF DEST-Q ,EQJSIZ INSERT AT END @@ -315,7 +319,7 @@ QINI1: HRRM ITEM,JBTQM1(ITEM) ;JOB I-1 POINT TO JOB I ,CALLING SEQUENCE: , MOVE J,[JOB NUMBER] , MOVE T2,[CURRENT Q] ;BQLINK AND EQLINK ONLY -; MOVEI TT,TRANS TABLE ADDRESS +, MOVEI TT,TRANS TABLE ADDRESS , PUSHJ PDP,QXFER , ... ;RETURN , ON RETURN J IS UNALTERED; LH(Q)=-1 IF QUANT, TIME OUT @@ -354,7 +358,8 @@ QX2: MOVS T2,Q ;T2 IS ADDR. OF QUANT.TIME(IF REQUESTED) HRRO Q,(Q) ;RH(Q)=DEST-Q;LH=-1(NO QUANT.TIME REQ.) SKIPL 1(TT) ;WAS QUANT. TIME REQUESTED? HRL Q,(T2) ;YES--GET IT - ,FIXED DEST-Q + +,FIXED DEST-Q QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q MOVS T2,T1 ;T1=FORW. LINK, T2=BACK LINK HRRM T1,JBTQ(T2) ;FORW, LINK PAST JOB @@ -372,7 +377,6 @@ QFIX: MOVE T1,JBTQ(J) ;DELETE JOB FROM SOURCE-Q JUMPL Q,QX3 ;RETURN IF QUANT. TIME NOT REQ. HLRM Q,JBTSTS(J) ;SET QUANT. TIME - MOVEI TT,RNQ ;SET JOB STATUS WAIT DPB TT,PJBSTS ;CODE TO RUN QUEUE (0). QX3: POPJ PDP, @@ -466,6 +470,7 @@ A'AVAL: 0 > INTERNAL AVALTB + AVALTB: QUEUES ;GENERATE THE AVAL FLAGS LOC=.-AVALTB > @@ -492,7 +497,8 @@ LOC=LOC+1 PQ3=LOC LOC=LOC+1 CMQ=LOC ;COMMAND DELAY QUEUE - ;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES + +;CORRESPONDENCE TABLE BETWEEN JOB STATUS CODES AND QUEUE TRANSFER TABLES ;USED BY SCHEDULER ;RUNCSS SETS JOB STATUS WORD TO NEW STATE CODE. ;SCHEDULER SETS UP QUEUE TRANSFER TABLE ADDRESS FROM @@ -555,6 +561,7 @@ EXTERNAL XJOB >> IFE FTCHECK+FTMONP,< + INTERNAL JOBQUE JOBQUE: 0 ;JOBS TO BE REQUEUED ON CLOCK INTERRUPT @@ -623,11 +630,6 @@ QTIME: PTTAB EQLINK,QTTAB,QQSTAB ;MOVE JOB TO LOWER Q QSTAB: XWD 4,-PQ1 ;PQ1 IF SIZE .LE. 4K XWD ^D16,-PQ2 ;PQ2 IF 4K .L. SIZE .LE. 16K XWD ^D256,-PQ3 ;PQ3 IF 16 .L. SIZE - -,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME -QQTAB: XWD -PQ1,-PQ2 - XWD -PQ2,-PQ3 - XWD -PQ3,-PQ2 ;BACK TO PQ2 TO COMPETE WITH IOWS JOBS Z ,PUT JOB DOWN A Q IF EXCEEDS QUANT. TIME @@ -693,6 +695,7 @@ OSCAN: ;SCAN FOR OUTPUT Z Z ;FINAL ZERO TO FLAG END > + SUBTTL SWAP R. KRASIN/AF TS4.34 03 FEB 69 V406 ,SWAPPER CALLED EVERY CLOCK TIC. @@ -712,7 +715,6 @@ OSCAN: ;SCAN FOR OUTPUT , IF ONE--WILL LOW(HIGH) SEG FIT IN LARGEST HOLE IN CORE? , YES--START INPUT AND RETURN , NO--IS TOTAL FREE CORE(CORTAL) ENOUGH TO ACCOMMODATE LOW(HIGH) SEG? - ; YES--CALL CORE SHUFFLER ; IS SHUFFLER WAITING FOR IO TO STOP? ; YES--RETURN AND DO NOTHING @@ -825,7 +827,7 @@ IFN PROG-JDAT,< IFN FT2REL,< EXTERN FINOT PUSHJ PDP,FINOT ;IS THIS A HIGH SEG WHICH WAS JUST SWAPPED OUT? - ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT + JRST FORCEL ;YES, J SET TO LOW SEG NO, GO TRY SWAP IT OUT ; NO, THIS WAS A LOW SEG, ALL SWAPPING FOR THIS USER ; IS FINISHED. > @@ -887,7 +889,8 @@ SWPREC: MOVE TAC,SERA ;ERROR FLAGS LDB TAC,IMGOUT TLO TAC,1 ADDM TAC,SWPERC - JRST SWAPO ;GO TRY AGAIN + JRST SWAPO ;GO TRY AGAIN + ;NO INPUT TO DD, CHECK FOR EXPANDING JOBS CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND @@ -895,7 +898,6 @@ CHKXPN: SKIPG XJOB ;ANY JOBS TO EXPAND ; YES, FALL INTO SCNOUT WHICH WILL SWAP OUT EXPANDING ; JOB SINCE THERE IS ONE ;INPUT TO DO, CHECK TO SEE IF ANY JOBS JUST HAPPEN TO WANT TO EXPAND - EXTERN HIGHJB,JBTSTS,ERROR,MAXSIZ,MAXJBN,SUMCOR SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND? JRST SCNJOB ;NO, SCAN ALL JOBS IN PRIORITY ORDER LOOKING @@ -905,7 +907,8 @@ SCNOUT: SKIPG XJOB ;ANY JOBS WAITING TO EXPAND? TDNN T,JBTSTS(J) ;IS THIS JOB EXPANDING? SOJG J,.-1 ;NO, KEEP LOOKING IFN FTRCHK,< - JUMPG J,SCNOK ;CLEAR XJOB SO MESSAGE WILL PRINT + JUMPG J,SCNOK + SETZM XJOB ;CLEAR XJOB SO MESSAGE WILL PRINT JSP DAT,ERROR ;ERROR IF NONE FOUND > SCNOK: SOS XJOB ;DECREMENT COUNT OF EXPANDING JOBS @@ -929,7 +932,7 @@ SCNJOB: MOVE T,CORTAL ;INITIALIZE FREE CORE COUNTER ; PROTECT TIME IS DECREMENTED ONLY WHEN ; A JOB IS RUNABLE, SO LOOK AT IT ; ONLY IF RUN BIT STILL ON - TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? + TLNE T,NSWP+SWP ;NO, IS THIS JOB NOT TO BE SWAPPED OR ALREADY SWAPPED? ; (DISPLAY, REAL TIME)? JRST (TAC1) ;YES,CONTINUE SCAN TO FIND ANOTHER HLRZ T,JBTADR(J) ;PICK UP SIZE OF JOB @@ -969,7 +972,6 @@ IFN FT2REL,< ; 5. HIGH SEG NOT ON DISK YET ; 6. THIS HIGH SEG IS NOT THE SAME ONE AS JOB ; BEING FITTED IN IS GOING TO WANT - ; RETURN HIGH SEG NO. IN J IF YES, OTHERWISE ; RETURN LOW SEG NO. ; IF JOB JUST HAS LOW SEG. SHF BIT IS SET IN JBTSTS @@ -1048,7 +1050,6 @@ FULL1A: PUSHJ PDP,GXSAT ;GET SOME SWAPPING SPACE POP PDP,DAT ;RESTORE AMT GOTTEN HRLM DAT,(AC3) ;SAVE AMOUNT IN TABLE SUB T,DAT ;AMOUNT STILL NEEDED - JUMPE T,FULSET ;THROUGH IF NEED 0 K NOW PUSHJ PDP,BMPAC3 ;STEP TO NEXT TABLE LOCATION MOVE DAT,T ;TRY TO GET ALL WE NEED NOW IN 1 CHUNK @@ -1173,7 +1174,6 @@ CHG1: ADDM TAC1,VIRTAL ;INCREASE SIZE OF VIRTUAL CORE AVAILABLE IN SYSTEM PUSH PDP,DAT ;SAVE TTY OUTPUT BYTE POINTER(COMMAND DECODER) LDB DAT,IMGOUT ;*SIZE ON DISK(1K BLOCKS) - JUMPE DAT,CHG3 ;DID SEG HAVE ANY DISK SPACE? HLRZ TAC,JBTSWP(ITEM) ;*YES, LOGICAL DISK BLOCK+FRGSEG BIT PUSHJ PDP,FXSAT ;*FREE THE DISK BLOCKS NO LONGER NEEDED @@ -1215,7 +1215,6 @@ XPAND: LSH TAC,-12 ;CONVERT HIGHEST DESIRED ADDRESS ;ROUTINE TO FLAG JOB TO BE STOPPED AND SWAPPED OUT ;BECAUSE IT HAS JUST BEEN CONNECTED TO A HIGH SHARABLE SEG WHICH IS ON DISK ;OR ON ITW WAY IN OR OUT. THE SIZE OF THE HIGH SEG IS UNCHANGED - ;THE JOB MUST BE STOPPED UNTIL HIGH SEG SWAPPED IN JUS AS IF JOB HAS ;EXPANDED HIGH SEG(MUST BE CALLED FROM UUO LEVEL FOR CURRENT JOB IF HIGH SEG) ;CALL: MOVE ITEM,HIGH SEG NUMBER @@ -1262,6 +1261,7 @@ SQOUT: MOVEM TAC,SERA ;STORE THE BLOCK NUMBER EXCH TAC,DFBUSY JUMPN TAC,CPOPJ ;YES IF JUMP + ERATRY=3 ;NO. OF TIMES TO READ AND WRITE ON ERRORS ;START UP DEVICE WITH SWAPPING REQUEST. THIS ROUTINE @@ -1299,7 +1299,6 @@ FRGIO1: HLRE DAT,(TAC) ;NO OF K IN THIS DISK CHUNCK ORM TAC,SERA ;INSERT NEW ADDRESS JRST FRGIO1 - FRGIO2: LSH DAT,12 ;CONVERT FROM K TO WORDS ADDM DAT,SQLEN ;ADD TO PREVIOUSLY TRANSFERRED AMOUNT MOVNS DAT ;-N WORDS @@ -1374,7 +1373,6 @@ GXSAT: MOVE AC1,XSAT1 ;SAVE AC1, SET IT TO TABLE LOC. MOVE AC2,XSAT2 ; LSH DAT,CONVMD ;CONVERT TO 128 WORD DISK BLOCKS PUSH PDP,ITEM ;SAVE C(ITEM) - MOVE ITEM,DAT ;GETBIT EXPECTS PARAMETER IN ITEM PUSHJ PDP,GETBIT ;FIND A HOLE BIG ENOUGH JRST IPOPJ ;NONE, RESTORE ITEM AND ERROR RETURN @@ -1408,7 +1406,6 @@ FXSAT: LSH TAC,CONVMD ;RESTORE SHIFTED DISK ADDRESS. JRST IPOPJ ;RETURN, AND RESTORE ITEM ;INITIALIZE SWAPPER DISK STORAGE TABLE - INTERNAL SWPINI SWPINI: MOVE TAC,XSAT2 @@ -1480,7 +1477,6 @@ SWPSIZ=XSAT6-XSAT4+1 ;SIZE OF TABLE HISWAP=17*BLOCKS ;LOGICAL BLOCK NUMBER OF FIRST ; BLOCK ON DISK DIFF=HISWAP-BLOCKS-1 - XP CONVMD,3 ;CONVERSION FROM 1K CORE BLOCKS TO 128 WORD ;DISC BLOCKS(SHIFT COUNT) @@ -1543,7 +1539,6 @@ GXSAT: PUSH PDP,ITEM ;THIS ROUTINE SAVES AND RESTORES ACCUMULATOR "ITEM". FXSAT: TRZN TAC,FRGSEG ;FRAGMENTED? JRST FXSAT1 ;NO. DO IN REGULAR WAY - FRAGBK: HRRZ AC3,TAC ;YES. LOC OF TABLE IN AC3 FRGBK1: HRRZ TAC,(AC3) ;LOC OF NEXT DISK ADDRESS HLRE DAT,(AC3) ;NUMBER OF K @@ -1576,6 +1571,8 @@ FXSAT1: PUSH PDP,ITEM ;THIS ROUTINE SAVES AND RESTORES ACCUMULATOR "ITEM". FXSATC: PUSHJ PDP,CLRBIT ;THE "CLRBIT" SUBROUTINE IN "DSKSER" ACTUALLY DOES ; THE WORK OF CLEARING THE BITS. JRST IPOPJ ;RESTORE ITEM AND RETURN + + ;ROUTINE TO RE-INITIALIZE THE SWAPPING AVAILABILITY TABLE. CALLED AT ; SYSTEM INITIALIZATION TIME. @@ -1647,4 +1644,3 @@ SQLEN: 0 ;AMOUNT TRANSFERRED SO FAR FOR FRAGMENTED JOB > > ;END OF SWPSER LOGIC FOR THE NEW PDP-10 DISK. SCHEND: END - diff --git a/src/scnsrf.mac b/src/scnsrf.mac index 56a0e9e..76fda9d 100644 --- a/src/scnsrf.mac +++ b/src/scnsrf.mac @@ -86,7 +86,6 @@ IFNDEF FTHDPX, ;NON-ZERO TO INCLUDE HALF-DUPLEX CODE IFNDEF FTDDTM, ;NON-ZERO TO IUNCLUDE CALLI DDTIN,OUT FTTTYSER=-1 ;DEFINE THIS SYSTEM TO HAVE SCNSRF - INTERN FTTTYSER ;ASSURE MULT DEF GLOBALS IF WRONG APSER ; RIGHT HALF BITS (USER MODE0 FCS=100 ;FULL CHARACTER SET. PASS @@ -138,7 +137,6 @@ TTYRMT=4000 ;REMOTE TTY LINE TLKRNG=1 ;THIS LINE CURRENTLY IN A TALK RING XON=2 ;^Q TYPED, PAPER TAPE INPUT - FULTWX=4 ;SELF ECHOING FULL DUPLEX T35=10 ;MODEL 35 T37=20 ;MODEL 37 @@ -216,6 +214,7 @@ TOIP=400000 ;SIGN OF TTYPTR(DDB) - TYPE-OUT IN PROGRESS ; DATA BLOCKS. ; 4)SETS TTYUSE#1 IN ALL TTY DDBS IN THE TRANSLATOR TABLE. + EXTERNAL SCNCHN,MLTTYL,MTTYLN,TTYTAB,SCNINI TTYINI: MOVEI TAC,SCNCHN @@ -224,7 +223,6 @@ TTYINI: MOVEI TAC,SCNCHN MOVSI TAC1,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS. NOT LINES MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS - SCN1: MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE? SETZM DEVNAM(DDB) ;NO, SET PHYSICAL NAME TO 0. @@ -360,6 +358,7 @@ PUTCHO: SOSGE TOFCTR(DDB) ;RETURN IMMEDIATELY IF NO ROOM PUTCO1: IDPB CHREC,TOPUTR(DDB) ;PUT CHARACTER INTO BUFFER CONO PI,PION ;GET PI BACK ON POPJ PDP, + ;ROUTINE TO CHECK IF A CHARACTER IS SPECIAL(ASCII 0-37, 175-177) ;CALL MOVE CHREC,CHAR. TO BE CHECKED ; PUSHJ PDP,SPCHEK @@ -381,7 +380,7 @@ SPCHK1: MOVE TAC,SPCTAB(CHREC) ;FORMAT XWD BITS+CHAR,ADRESS OF ROUTINE ;HIGH ORDER BITS IN LH: -SPACTN=40000 ;SPECIAL ACTION TO BE TAKEN +SPACTN=400000 ;SPECIAL ACTION TO BE TAKEN SPOUT=100000 ;SPECIAL HANDLING ON UUO OUTPUT BREAKB=20000 ;BREAK CHARACTER SPHPOS=10000 ;CHARACTER AFFECTS HORIZONTAL POSITION @@ -436,6 +435,7 @@ INTERNAL DDTIN EXTERNAL WSYNC,IADRCK,ADRERR EXTERNAL PTYOW + DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE MOVE IOS,[XWD TTYIOW+DDTM,IOACT] IORB IOS,DEVIOS(DDB) ;PUT INTO I/O WAIT @@ -444,7 +444,6 @@ DDTIN: PUSHJ PDP,TTYFNU ;SET UP DEVDAT,LINE PUSHJ PDP,TWSYNC ;NO, WAIT FOR SOME DDTIW: MOVE IOS,[XWD TTYIOW,IOACT] ANDCAB IOS,DEVIOS(DDB) - MOVSI TAC,IOFST+DDTM IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO HRRZ TAC,@UUO ;CONTENTS OF USER (DDT) AC @@ -737,7 +736,6 @@ SCNDDB: SIXBIT /TTY0/ ;DEVNAME XP TOBF,.-ZZ REPEAT STTYBF,<0> ;NO. OF CHAR. IN MON. BUF. - XP TTYCHR,<*5> XP SCNDDS,.-ZZ ;SIZE OF SCN DDB @@ -791,7 +789,6 @@ MONUS1: PUSHJ PDP,GETCHR ;GET A CHAR, FROM IT IDPB CHREC,AC1 ;PLACE CHAR. IN USER BUFFER PUSHJ PDP,SPCHEK ;SPECIAL CHARACTER? JRST MONUS2 ;NO - TLNE TAC,FCSBRK+BREAKB ;A BREAK CHARACTER? SOSA TISYNC(DDB) ;SOME BREAK, COUNT IT DOWN MONUS2: SOJG AC2,MONUS1 ;NO, USER BUFFER FULL? @@ -845,13 +842,13 @@ TTYOUT: MOVSI IOS,IOBEG MOVSI IOS,IO+IOFST IORB IOS,DEVIOS(DDB) + PUSHJ PDP,STLNAC ;GET LINE CHARACTERISTICS PUSH PDP,LINE ;SAVE INFO PUSHJ PDP,USRMON ;MOVE USER'S BUFFER TO TTO BUFFER PUSHJ PDP,ADVBFE ;ADVANCE USER'S HEADERS SKIPA JRST .+3 ;MOVE BUFFERS AVAILABLE - MOVEI IOS,IOACT ;NO MORE BUFFERS ANDCAB IOS,DEVIOS(DDB) ;CLEAR ACTIVE IN IOS POP PDP,LINE ;RESTORE LINE INFO @@ -915,10 +912,10 @@ TTYUUO: PUSHJ PDP,TTYFNU PUSHJ PDP,UADCK1 JRST @TTUUOT(UCHN) ;DISPATCH TO UUO ROUTINES + TTUUOT: EXP INCHRW ;(0)INPUT CHAR. WAIT TILL TYPED EXP ONEOUT ;(1)OUTPUT A CHARACTER EXP INCHRS ;(2)INPUT A CHAR. & SKIP - EXP OUTSTR ;(3)OUTPUT A STRING EXP INCHWL ;(4)INPUT CHAR, WAIT.LINE MODE EXP INCHSL ;(5)INPUT CHAR, SKIP. LINE MODE @@ -991,7 +988,6 @@ INCHRW: PUSHJ PDP,INCHRS ;GET ACHAR IF ONE IS THERE ONEOUT: PUSHJ PDP,GETWDU ;PICK UP CHAR FROM USER MOVE CHREC,TAC ;PUT IT IN PROPER AC ANDI CHREC,177 ;MASK ANY JUNK - JUMPE CHREC,CPOPJ ;DONT STORE NULLS PUSHJ PDP,OUTCHR ;PLACE IT IN TTO BUFFER JUMPN CHREC,DDTUTT ;IF IT STORED, RETURN @@ -1022,6 +1018,7 @@ SETLIN: MOVSI TAC,LGLSET ;MAKE MASK OF ALL OF THEM AND TAC,@UUO ;SET ONLY THOSE BITS USER WANTS SET IORM TAC,LINTAB(LINE) ;SET RESULTANT POPJ PDP, + ;ROUTINE TO ATTACH TTY TO A JOB ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK ; MOVE ITEM,JOB NUMBER @@ -1037,6 +1034,7 @@ SETLIN: MOVSI TAC,LGLSET ;MAKE MASK OF ALL OF THEM ; OR SIXBIT /CTY/, ; 5)SETS DEVOPR IF IT IS NON-ZERO. + INTERNAL TTYATT,TTYATI EXTERNAL PUNIT,PJOBN,TTYTAB @@ -1200,6 +1198,7 @@ TBYTEP: PUSH PDP,TAC1 ;SAVE LINE HLL TAC,TLHBYT(TAC1) POP PDP,TAC1 ;RESTORE LINE POPJ PDP,0 + ;ROUTINE TO FIND TTY FOR A JOB ;CALL: MOVE ITEM,JOB NUMBER ; PUSHJ PDP, TTYFND @@ -1321,7 +1320,6 @@ TTYSRA: HRRZ DEVDAT,TTYTAB(LINE) JRST TTYF9 ;FOUND TTYF0: AOBJN LINE,TTYSRA TTYF1: MOVSI TAC,576062 ;LOOK FOR DEVICE "OPR" - PUSHJ PDP,DEVPHY ;SEARCH PHYSICAL DEVICE NAMES FOR OPR SKIPA TAC,DEVOPR ;NOT FOUND. JRST TTYF9 @@ -1444,6 +1442,7 @@ TTYUSR: MOVSI IOS,USRB ;SET BIT TO SWITCH TTY TO USER MODE INTERNAL CTYINT EXTERNAL SCNSAV,SCNCHN,TCONLN + CTYINT: CONSO TTY,50 ;TTI OR TTO FLAG? JRST CTYINT ;NO JSR SCNSAV ;YES, SAVE AC'S @@ -1823,7 +1822,6 @@ CNTLEC: HRRI TAC,100(CHREC) ;SAVE UN-CNTL CHARACTER CRLF: MOVEI HPOS,0 ;HERE ON INPUT OF A CARRIAGE RETURN TLNE LINE,XON ;IF PAPER TAPE, NO FREE LF - JRST TTIPUT ;JUST STORE THE CR PUSHJ PDP,TTIPUT ;ORDINARILY, STORE AND GO ON HERE MOVEI CHREC,12 ;BY ADDING A LF @@ -1879,7 +1877,6 @@ DCPUTR: LDB TAC,PLSTLC ;CHECK FOR NONE TO DELETE ADD TAC,PUTR(DAT) ;* TLNE TAC,400000 ADD TAC,[XWD 347777,-1] - MOVEM TAC,PUTR(DAT) AOS FCTR(DAT) AOS TAC,PCTR(DAT) diff --git a/src/segcon.mac b/src/segcon.mac index 271ac1b6deb239b229f3bce869000e69389ecce1..5bbd1b2d8f5fd5abd15f02cb623f76dc22ef152d 100644 GIT binary patch delta 16587 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 HyF~UsL4q63 delta 1024 zcmZuwOK%fb6vmI(o*R4o0FkzYaKXXYcx?O#ekd`?WIVPnjAzWf7bk=rT~tCyt*S1& ztlCNy66x1vg}Ul503mf#i3LKy1|hYJ>{_)#m8!0)K32VByC#)-G}7pP=R1#kzH|S| z{eJdtWxskxC%Yp$7S{!1My1l&f4j3ph`lRq?wSrYN8B2?hRwOh_rE#6|5N+)Yo`j5 z-slip0bMbI6*wIrcqg!_E1xU*b?T>g86F0*I0)ns4jRiu8+v0wrD+-EVwGsZmU}~= zxNZ001&!2{Fq|+h3tq#WU`c`7j+{V>X}euK51zqq!8Z^K)@Nwnz%={3O}HpGjC^5+o?-AGmq=2oPRdy!m%u%1hMQtX%` zV*@WE%^%icrSJlU&rdp z|4BA4Z+U!Z?&8nbx}UqLt>Ly-$5$G|FWNa|NDggMI!R{1T_&y=8}ne(vV74#Ar_vI z-icWkdDf$Hzywtvw}mvhETFvDR(?keCel=Es@;iuhchW{7auKdrpTp+Mv#IGglzB=YX4yii$K2T(`h24&Yut8V#4qAzyc8q^U&Kpz6yL@| zqKvgf6Sos@;^RaM-zM^Sl_=r3Ud2E!;C;P_d-_tEXqT@INA9FaRj6OV6TOT-^g4>k zB6gCi`g{+~F_S}lmRwfQfU70)7uB@tc$hqe?~{d-Q+P-fW{3%Ux^2QoKvP+CQ|I3L ze_5{jbNw{cT2V8ZE`fiuL!%dV->3YLGJM@K={B777Ve}s@HBk_Kc_ob%`|W$vxP4+ i1w78=@N1@n;?ZKBOnd39RfsZ8J(1btBk?1LjQj&R?G2~^ -- 1.7.1