diff --git a/build/misc.tcl b/build/misc.tcl index 63536aa7..78059aaa 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -32,6 +32,11 @@ respond "MIDAS.73" "MIDAS; TS 73_MIDAS; MIDAS 73\r" respond "*" ":xfile midas; patch 73\r" expect ":kill" +# ITS 138 +respond "*" ":midas;73\r" +respond "MIDAS.73" ".;ITS 138BIN_SYSENG;ITS 138\r" +expect ":KILL" + # MACTAP respond "*" ":midas;324 sysbin;_sysen2; mactap\r" expect ":KILL" diff --git a/src/syseng/its.138 b/src/syseng/its.138 new file mode 100644 index 00000000..d1692e09 --- /dev/null +++ b/src/syseng/its.138 @@ -0,0 +1,5201 @@ +TITLE ITS 1.0 3/19/67 +MOBY==1 + +;AC DEFS + +A=1 +B=2 +C=3 +D=4 +E=5 +TT=6 +I=7 +Q=10 +J=11 +R=12 +P=15 ;DO NOT CHANGE! +T=16 ;" +U=17 ;" + + +IOBIT==1 ;IOBIT IN MAP + + +TTYIF==1 ;RIGHT HALF BITS IN PIRQC +BCNTRZI==2 ;^Z TYPED +BPIPI==4 ;BAD LOC 42 +AROIF==10 ;AROV +BILLOP==40 ;ILLEGAL INSTRUCTION +BIOADC==20000 ;MEMORY PROTECTION VIOLATION +BIOCER==400 ;CHANNEL ERROR +VALRTF==200 ;VALUE RETURN +ILLUAD==1000 ;USER DOES NOT HAVE THAT MUCH CORE +BRKF==2000 ;BREAKPOINT FLAG +BUTFUL==4000 ;UTAPE FULL +BILM==10000 ;NON-EX MEM +;10000 NON EX MEM +;200000 PDL OV +;20000 MPV +BADBTS=BIOADC+BCNTRZI+BPIPI+BIOCER+BILLOP+BILM+VALRTF+BRKF + +TTYIMI==1 ;IMAGE INPUT ;BITS IN TTYSTS +TTYDDT==2 ;"DDT" MODE +TTYIMO==4 ;IMAGE OUTPUT + + ;BITS IN RH MSKST +BTINTE==1 ;ENABLE TTY INT + +CLKON==2001 ;ABSOLUTE +CLKOFF==1001 +APRCHN==7 ;DO NOT CHANGE +BADPC==5037 +LSRMOD==10000 +UUOMIN==40000,, +UUOMAX==46000,, +AUUO=UUOMAX ;USE TO SAVE CONDS ON ILLOP + + +IFE MOBY,MX1KB==12. ;MAX SYS 1K BLOCKS +IFN MOBY,MX1KB==250. +IFE MOBY,MXIOB==30. ;MAX DYN ALLOC ALLOC IO BUFFERS +IFN MOBY,MXIOB==400 + +SIOMT==30 ;MAX SIZE TRANSLATION TABLE +SIOML==8 ;LENGTH OF ENTRY IN TRANSLATION TABLE + +LUPDL==30 ;LENGTH USER PDL +CPDLL==20 ;LENGTH CLOCK CHANNEL PDL +DCCHN==1 ;DC CHANNEL +DCCHNA==200_<-DCCHN> +UTCCHN==3 ;UTC CHANNEL +GETYOC==4 ;GE TYPOUT (DATAPHONE) +LPTCHN==5 ;LINE PRINTER CHANNEL +TTYCHN==5 ;TTY CHANNEL +DISCHN==6 +SDCHN==5 +GETYIC==5 ;GE TYPEIN DEV 70 +UTCON==2001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN> +UTCOFF==1001\200_<-UTCCHN>\200_<-TTYCHN>\200_<-GETYOC>\200_<-DISCHN>\200_<-SDCHN> +CUINT==5000+UTCCHN +SCLKI==15. ;SLOW CLOCK PER REG CLOCK +MXOPT==8. ;SLOW CLOCK MAX UT OP CAN TAKE +NINFP==8. ;MAX. NO. OF INF. PROCED. / PROCED. + + +METOF=6 ;OFFSET BETWEEN CONTENTS OF MEMTOP AND HIGHEST ACT + +GTYI=70 ;DEVICE FOR GE TYPEIN +GTYO=750 ;DEVICE FOR GE TYPOUT +VID=754 ;VIDISUCKER + +DEFINE CONC A,B +A!B!TERMIN +DEFINE SUBTTL A/ +TERMIN + +GO: +LOC 41 + JSR UUOH +LOC 40+2*APRCHN + JSR CLKBRK + +LOC 40+2*TTYCHN + JSR TTYBRK + +LOC 40+2*UTCCHN + JSR UTCBRK + +LOC 40+2*DISCHN + BLKO DIS,DBLKOP + JSR DRECYC + +LOC 40+2*GETYOC + JSR GTYOBK + JSR GTYOBK + +LOC GO + + +SUBTTL TSS INITIALIZATION + + CONO 633550 + CONO PI,120000+11577 + SETOM DISUSR + SETOM DISOFF + CONO DIS,100 + MOVEI A,4 +BAR: CONO TTY,@TTYLT(A) + DATAI TTY, + CONO TTY,3600+TTYCHN + SOJGE A,BAR + CLEARM USRHI + CLEARB U,USER + MOVE P,USRPDL(U) + PUSHJ P,GEKI ;INITIALIZE GE CONSOLES + MOVNI T,1 + PUSHJ P,USTRA + JRST .-1 + MOVEI B,SYSB-1 + PUSHJ P,ACORE + JFCL + CLEARM USTP + CONO PI,UTCON+200 + CONO 3000+APRCHN + JRST SCOR + +PAT: BLOCK 200 + SUBTTL PROCESSOR BREAK ROUTINES + +CLKBRK: 0 + CONSO 1000 + JRST CLKB1 ;LOSSAGE + SKIPL CDSOFF + SKIPGE DISOFF + JRST DSTPD + AOSG DISON + JRST DSTRT +DSTPD: CONO 1000+APRCHN + AOSG CLKFL1 + JRST 12,@CLKBRK ;EVERY 1/30 SEC + SETOM CLKFL1 + AOS TIME + SOSLE CUQUAN ;CHECK QUANTUM + JRST 12,@CLKBRK + EXCH P,CPDLP + PUSH P,T + PUSH P,U + MOVE T,SLCLK + CAMGE T,TIME + JRST SSLCK ;SERVICE SLOW CLOCK +CLKSR1: MOVE U,USER +CLKSR: MOVE T,CLKBRK + SKIPL U + MOVEM T,UPC(U) + PUSHJ P,SEARCH ;SCHEDULE NEW USER +CLB1B: CAMN U,USER + JRST CLKB5A + SKIPGE U +CLKSC1: HRROI U,ECPDL-AC16S + POP P,AC17S(U) + POP P,AC16S(U) + EXCH P,CPDLP + JSR SWITCH ;SWAP USERS + MOVEM T,CLKBRK + MOVE T,AC16S(U) + MOVE U,AC17S(U) + JRST 12,@CLKBRK ;GO AWAY + +DSTRT: MOVEM A,DISA + MOVE A,DISPTR + MOVEM A,DBLKOP + CONO DIS,100\SDCHN_3\DISCHN + MOVE A,DISA + JRST DSTPD + +CLKB5A: SKIPE SCRFG1 + JRST CLKSC1 + MOVE T,UPC(U) + SKIPL U + MOVEM T,CLKBRK +CLKB5: POP P,U + POP P,T +CLKB3: EXCH P,CPDLP + JRST 12,@CLKBRK ;EXIT WHEN NO SWAP OCCURS + +CLKB1: CONSZ PI,100000 + JRST PARBRK + EXCH P,CPDLP ;NOT A CLOCK BREAK + PUSH P,T + PUSH P,U + MOVE U,USER + MOVE T,CLKBRK + CONSZ 20 + CONSO 10 + JRST CLB1A ;NOT AROV + TLZ T,400000 + MOVEM T,CLKBRK + SKIPN PICLR(U) + JRST CLKB5 + MOVEI T,AROIF + IORM T,PIRQC(U) ;SET USER AROV INT + JRST CLKSR + +PARBRK: CONO PI,120000 + AOS PARERR + JRST 12,@CLKBRK + +PARERR: 0 + + + +CLB1A: CONSO 230000 + JRST CLKB5 ;NOT PROCESSOR INT + TLNN T,LSRMOD + JRST 4,. ;ERROR IN EXEC MODE-SYSTEM DEAD! + MOVEM T,UPC(U) + CONI 1(P) + MOVEI T,230000 + ANDM T,1(P) + CONO 430000+APRCHN + MOVEI T,BADBTS + IOR T,MSKST(U) + AND T,1(P) + JUMPE T,CLKB5 + IORM T,PIRQC(U) ;BLAME IT ON THE USER + JRST CLKSR1 + ;SLOW CLOCK SERVICE ROUTINE + +SSLCK: ADDI T,SCLKI + MOVEM T,SLCLK + CONSO UTC,4000 ;TIME FLG ENB + SKIPGE UIDLE + JRST SSLCK1 + MOVE T,TIME + SUB T,LUTOTM + CAIGE T,MXOPT*SCLKI + JRST SSLCK1 + SETOM UTHERR + CONO UTC,CUINT +SSLCK1: AOSN UIDLE + CONO UTC,CUINT + JRST CLKSR1 + + SUBTTL USER SCHEDULER + +SEARCH: CLEARM SCRFG1 + CLEARM SRCS + SETOM U0 + SKIPL T,UTTYST + JRST USTART ;NEW USER START HIM UP +USTSCH: SKIPN USRHI + POPJ P, + SKIPGE U + MOVEI U,0 +SEARL: ADDI U,LUBLK ;FIND NEXT USER COMING OUT OF I-O WAIT + CAML U,USRHI ;OR, IF NONE, NEXT USER + MOVEI U,0 + SKIPE UNAME(U) + SKIPE USTP(U) + JRST SEARW +SEARLP: SKIPN PIRQC(U) + JRST SEAR2 + MOVEI T,BADBTS ;INTERRUPT USER IF REQUESTED + SKIPE PICLR(U) + IOR T,MSKST(U) + AND T,PIRQC(U) + JUMPE T,SEAR2 ;NOT ENABLED & NOT BAD + CAMN U,USER + PUSHJ P,SBRK1 ;WANT TO INT CURRENT LOSER; STORE MACHINE CONDITIONS + PUSHJ P,PCLSR + JRST SEARC ;CAN'T INTERRUPT NOW + MOVE T,PIRQC(U) + ANDCM T,MSKST(U) + ANDI T,BADBTS + SKIPE PICLR(U) + JUMPE T,SBRK69 + PUSHJ P,INTSUP ;USER LOSES TOO BADLY, INTERRUPT SUP. PROCEDURE + JRST SEARW + +SBRK69: CLEARM PICLR(U) ;INTERRUPT LOSER + CONO PI,UTCOFF-<200_-> + PUSH P,PIRQC(U) + CLEARM PIRQC(U) + CONO PI,UTCON-<200_-> + MOVE T,UPR(U) + HRRZ T,42(T) + CAIL T,20 + CAML T,MEMTOP(U) + JRST SERR + TLO T,LSRMOD + PUSH P,T + ADD T,UPR(U) + PUSH T,UPC(U) + AOS (P) + AOS (P) + POP P,UPC(U) + POP P,-1(T) + + +URUN:SEARE: AOSN SCRFLG ;RESTORE CURRENT USER TO ACTUAL MACHINE IF NECESSARY + PUSHJ P,SBRK2 +SEARTN: JUMPGE U,SEARX1 + AOSN SRCS + JRST SEARCH +SEARX1: SKIPL U + CLEARM FLSINS(U) + EXCH U,USER + POPJ P, ;RUN LOSER + +SEAR2: SKIPN FLSINS(U) + JRST SEARC + MOVE T,EPDL2(U) + XCT FLSINS(U) ;TEST I-O WAIT INSTRUCTION + JRST SEARW ;NO SKIP UNRUNABLE 1 HIGH PRIOR 2 LOW + JRST SEARE + + +SEARC: SKIPGE U0 ;SKIPPED INTO FROM ABOVE + MOVEM U,U0 +SEARW: CAMN U,USER + JRST SEARW1 + SKIPGE USER + SKIPE U + JRST SEARL +SEARW1: MOVE U,U0 + JRST SEARE + + + +SERR: POP P,PIRQC(U) ;BAD INTERRUPT LOCATION + MOVEI T,BPIPI + IORM T,PIRQC(U) + JRST SEARLP + +SBRK1: PUSH P,USER + SETOM USER + JSR SWITCH + POP P,U + MOVEM U,USER + SETOM SCRFLG + POPJ P, + +SBRK2: PUSH P,U + MOVEM P,PSAVE + MOVNI U,1 + JSR SWITCH + MOVE P,PSAVE + POP P,U + POPJ P, + + ;PUT PC IN LOSER MODE + +PCLSR: MOVE T,SUEXIT(U) + SKIPE MEMTOP(U) ;NO CORE (IN CORE ASSIGN ROUTINE + CAME T,[JRST 2,@UUOH + POPJ P, ;WILL HAPPEN SOON + MOVE T,UPC(U) + TLNE T,LSRMOD + JRST POPJ1 ;HAPPY + SKIPE FLSINS(U) + JUMPN U,PCLSR1 ;BACK UP TO UUO +PCLSR4: MOVE T,[JRST ONEFLS ;MUNG EXIT OF UUO, COME BACK LATER + MOVEM T,SUEXIT(U) + POPJ P, + + +PCLSR1: HLRZ T,FLSINS(U) + CAIN T,(JRST) + JRST PCLSR4 ;EXEC FLUSH, RUN USER TO CLEAR, BUT MUNG EXIT + SOS T,SUUOH(U) + MOVEM T,UPC(U) + CLEARM FLSINS(U) + MOVEI T,AC0S(U) + HRL T,UPR(U) +PCLSR3: BLT T,AC17S(U) + SETOM SCRFG1 + JRST POPJ1 ;BACK UP TO UUO, RESTORING ACS + +INTSUP: PUSH P,U + SKIPGE U,SUPPRO(U) + JRST URSTRT + HLLZ T,U + IORM T,PIRQC(U) + POP P,U + MOVSI T,BUSRC + IORM T,USTP(U) + SETOM SRCS + POPJ P, + +SUBTTL USER SWAP + + +SWITCH: 0 + JUMPL U,SWT1 + MOVEI T,AC0S(U) + BLT T,AC15S(U) + MOVSI T,UEXIT + HRRI T,UUO(U) + BLT T,AC17P-UEXIT+UUO(U) + MOVE T,40 + MOVEM T,SV40(U) +SWT1: SKIPGE U,USER + JRST SWT2 + MOVE T,SV40(U) + MOVEM T,40 + MOVSI T,UUO(U) + HRRI T,UEXIT + BLT T,AC17P + DATAO UPR(U) + CONO @APRC(U) + MOVE T,UQUAN(U) + MOVEM T,CUQUAN + MOVSI T,AC0S(U) + BLT T,T-1 + MOVE T,UPC(U) + JRST @SWITCH + + +SWT2: MOVEI T,NULJOB + JRST @SWITCH + ;SUBTTL USER START ROUTINES + +USTART: PUSH P,U + PUSHJ P,USTRA + JRST USTSC1 + SUB P,[1,,1 + MOVE T,[1,,(SIXBIT /HTN/) + MOVEM T,JNAME(U) + MOVEI T,USTCD + MOVEM T,UPC(U) + CLEARM USTP(U) + SETOM UTTYST + JRST SEARTN + +USTSC1: POP P,U + JRST USTSCH + +USTRA: MOVEI U,0 ;-1(P) MUST BE U + +USTR3: CAML U,USRHI + JRST USTR1 ;ASSIGN MORE CORE TO USER STORAGE + SKIPN UNAME(U) + JRST USTR2 + ADDI U,LUBLK + JRST USTR3 + +MORCOR: MOVE U,-2(P) + SUB P,[1,,1] + SETOM SUPCOR + POPJ P, + +USTR1: MOVEI U,LUBLK + ADD U,USRHI + PUSH P,T + MOVE T,SYSL + CAIG T,USRSTG(U) + JRST MORCOR + POP P,T + EXCH U,USRHI + +USTR2: PUSHJ P,USTR4 + MOVEI T,SIOCHN(U) + MOVEM T,SIOCP(U) + CLEARM IOCHNM(U) + HRLI T,IOCHNM(U) + HRRI T,IOCHNM+1(U) + BLT T,IOCHNM+17(U) + JRST POPJ1 + + +USTR4: SETOM USTP(U) ;TTY NO IN T + SETOM UNAME (U) + MOVEM T,TTYTBL(U) + SKIPL T + HRRZM U,TTYSTS(T) + MOVSI T,BUSRC + MOVEM T,USTP(U) + MOVSI T,LSRMOD + MOVEM T,UPC(U) + HRLI T,-LUPDL + HRRI T,UPDL-1(U) + MOVEM T,USRPDL(U) + CLEARM UPR(U) + CLEARM MSKST(U) + MOVE T,[JRST 2,@UUOH + MOVEM T,SUEXIT(U) + MOVEI T,APRCHN+40 + MOVEM T,APRC(U) + CLEARM PIRQC(U) + SETOM SUPPRO(U) + SETOM PICLR(U) + CLEARM FLSINS(U) + CLEARM MEMTOP(U) + CLEARM RMEMT(U) + MOVSI T,(MOVEM U,) + MOVEM T,SAC17P(U) + POPJ P, + + COREX: LSH TT,-10. + CORE 2(TT) + JRST .-1 + LSH TT,10. + MOVEI J,2000-METOF-2(TT) + JRST (P) + +UADRS2: LSH A,10. +UADRS1: HRRM A,UPR(U) +UADRS: MOVEI B,14(A) ;SET PNTRS FOR USER U USER MEM STARTING AT C(A) + MOVEM B,AC14P(U) + AOS B + MOVEM B,AC15P(U) + AOS B + MOVEM B,AC16P(U) + AOS B + CAMN U,USER + HRRM B,AC17P + HRRM B,SAC17P(U) + ADDI B,21 + MOVEM B,40P(U) + AOS B + MOVEM B,41P(U) + CAME U,DISUSR + POPJ P, + PUSH P,A + SUB A,DRELOC + ADDM A,DBLKOP + ADDM A,DISPTR + ADDM A,DRELOC + POP P,A + POPJ P, + + + + 0 ;MAKE FLS INS ZERO +USTCD3: PUSHJ P,UFLS + +USTCD: MOVE U,USER ;CODE TO LOAD USER HACKTRN + MOVE P,USRPDL(U) + MOVEI B,1 + PUSHJ P,ACORE + JRST USTCD3 + MOVEI J,2000-METOF-2 + MOVE A,[(6+SIXBIT /UT2/ + MOVSI B,(SIXBIT /@/ + MOVE C,[SIXBIT /HACTRN/ + OPEN 2,A + JRST 4,. +USTCD1: CAMN B,[JRST 1 + TLZ C,400000 ;BIT SET FROM SIXBIT HACTRN + HRROI A,B + IOT 2,A + JUMPL C,USTCD1 + JUMPGE B,USTCD2 + MOVE D,B + HRRZ TT,B + HLRO I,B + SUB TT,I + CAML TT,J + JSP P,COREX ;PDL CLOBBERED BY UUO + IOT 2,B + HRRZ B,UPR(U) + ADD B,D + ROT D,1 + ADD D,(B) + AOBJN B,.-2 + HRROI A,B + IOT 2,A + CAME B,D + JRST USTCD + JRST USTCD1 + +USTCDR: MOVE U,USER + MOVE P,USRPDL(U) + PUSHJ P,IODCL + JRST USTCD + + +IODCL: PUSHJ P,ADFLUSH + MOVEI R,IOCHNM(U) +IODCL1: PUSH P,R + PUSHJ P,ACLOSE + POP P,R + CAIGE R,IOCHNM+17(U) + AOJA R,IODCL1 +IODCL2: MOVEI R,IOCHNM+1(U) + PUSHJ P,ACLOSE + MOVE T,SIOCP(U) + TLNN T,-1 + POPJ P, + POP T,(R) + MOVEM T,SIOCP(U) + JRST IODCL2 + +URSTRT: POP P,U + POP P,EPDL(U) + MOVE T,TTYTBL(U) + PUSH P,UPR(U) + PUSH P,MEMTOP(U) + PUSH P,SAC17P(U) + PUSH P,RMEMT(U) + PUSHJ P,USTR4 + POP P,RMEMT(U) + POP P,SAC17P(U) + POP P,MEMTOP(U) + POP P,UPR(U) + MOVE T,[1,,(SIXBIT /HTN/) + MOVEM T,JNAME(U) + MOVEI T,USTCDR + MOVEM T,UPC(U) + CLEARM USTP(U) + JRST URUN + +USTCD2: CLOSE 2, + JRST 1,(B) + ;SUBTTL USER UUO WAIT ROUTINE +UFLS: CONO PI,CLKOFF ;DOES NOT WORK FOR XCT T + EXCH U,USER + MOVEM T,EPDL2(U) ;SAVE C(U) + MOVE T,USER ;AND C(T) FOR FLSINS + MOVEM T,EPDL1(U) + MOVEM U,USER + POP P,T ;WORK FOR INST (P) + MOVEM T,UPC(U) + SKIPA T,-2(T) +UFL3: MOVE T,(T) + HRRI T,@T ;CALCULATE E + TLZ T,37 + MOVEM T,FLSINS(U) + TLC T,(XCT) + TLNN T,777740 + JRST UFL3 ;WORK FOR XCT + PUSHJ P,SEARCH ;FIND NEW USER + CAMN U,USER + JRST UFL1 ;SAME USER + MOVE T,EPDL2(U) + MOVEM T,AC16S(U) + MOVE T,EPDL1(U) + MOVEM T,AC17S(U) +UFL2: JSR SWITCH ;SWAP USERS + JUMPL U,NULJOB + XORI T,UFL4 + TDNN T,[LSRMOD,.-1] + JRST .+3 ;LOSE LOSE + XORI T,UFL4 + MOVEM T,URSTR + MOVE T,AC16S(U) + MOVE U,AC17S(U) +UFL4A: CONO PI,CLKON ;CAUSE OF LOSE LOSE +UFL4: JRST 2,@URSTR + + +NULJOB: AOSN UIDLE + CONO UTC,CUINT + CONO PI,CLKON + MOVEI + MOVSI 1,(AOJA) + AOJA 1,1 + +UFL1: SKIPE SCRFG1 + JRST UFL6 + MOVE T,UPC(U) + MOVEM T,URSTR + MOVE T,EPDL2(U) + JRST UFL4A + +UFL6: MOVNI U,1 + JRST UFL2 + +LWAIT1: CONO PI,UTCON ;WAIT FOR INS W UTCCHN OFF +LWAIT: XCT @(P) + PUSHJ P,UFLS + CONO PI,UTCOFF + XCT @(P) + JRST LWAIT1 + JRST POPJ1 + +SWAIT: MOVEI T,(@) ;WAIT FOR @ NEXT LOC TO BE NEG + HRLM T,(P) + SKIPL @(P) + PUSHJ P,UFLS + AOSE @(P) + JRST SWAIT 2 + JRST POPJ1 + SUBTTL UUO PROCESSOR + +IOT=UUOMIN +OPEN=UUOMIN+1_27. +OPER=UUOMIN+2_27. +CALL=UUOMIN+3_27. +USET=UUOMIN+4_27. +BREAK=UUOMIN+5_27. + +DISMIS=CALL 1, +TRAND=CALL 2, +TRANAD=CALL 3, +VALRET=CALL 4, +UTRAN=CALL 5, +CORE=CALL 6, +TRNDL=CALL 7, +DSTART=CALL 10, +FDELE=CALL 11, + +ITYI=OPER 1 +LISTEN=OPER 2 +SLEEP=OPER 3 +SETMSK=OPER 4 +GETMSK=OPER 5 +LOGIN=OPER 6 +CLOSE=OPER 7 +UFLUSH=OPER 10 +ATTY=OPER 11 +GBLTTY=OPER 12 +IPUSH=OPER 13 +IPOP=OPER 14 +DFLUSH=OPER 15 +DSTOP=OPER 16 +RDTIME=OPER 17 +RDSW=OPER 20 +LPEN=OPER 21 +UDISMT=OPER 22 + +.RUPC==0 +.RVAL==1 +.RILOOK==2 +.ROLOOK==3 +.RUNAME==4 +.RJNAME==5 +.RMSK==6 +.RUSTP==7 +.RPIRQC==10 +.RINTB==11 +.RMEMT==12 +.RSV40==13 + +.SUPC==400000 +.SVAL==400001 +.SILOOK==400002 +.SOLOOK==400003 +.SMSK==400006 +.SUSTP==400007 +.SPIRQC==400010 + + +USRUUO: MOVEM T,@40P(U) ;USER INTERPRETED UUO + HRRZ T,@41P(U) + CAIL T,20 + CAML T,MEMTOP(U) + JRST ILLOP + HRLI U,1(T) + ADD T,UPR(U) + HRLI T,UUOH + BLT T,0 + HLRM U,UUOH +UUOEX: MOVE T,@AC16P(U) + MOVE U,@AC17P +UEXIT: JRST 2,@UUOH + +URSTR: 0 +UUOH: 0 +AC17P: MOVEM U,. + MOVE U,USER + MOVEM T,@AC16P(U) + SKIPL T,40 + CAML T,[100000,, + JRST ILLOP + CAML T,[UUOMIN + CAML T,[UUOMAX + JRST USRUUO +ILLOP1: MOVEM P,@AC15P(U) + HRRZ P,UPR(U) + BLT P,@AC14P(U) + MOVE P,USRPDL(U) + LSH T,-27. + XCT UUODSP-UUOMIN_-27.(T) +URET: HRLZ U,UPR(U) + BLT U,U + JRST UEXIT + + +ONEFLS: CONO PI,CLKOFF + MOVE U,USER + HRRZ T,UPR(U) + BLT T,@AC15P(U) + MOVE T,[JRST 2,@UUOH + MOVEM T,UEXIT + MOVE P,USRPDL(U) +ILLOP3: AOS UUOH + +UUOE1: CONO PI,CLKOFF + SOS T,UUOH + MOVEM T,UPC(U) + PUSHJ P,SEARCH + CAMN U,USER + JRST UFL7 +UFL8: HRLZ P,UPR(U) + BLT P,P + MOVE T,@AC16P(U) + MOVEM T,AC16S(U) + MOVE T,@AC17P + MOVEM T,AC17S(U) + JRST UFL2 + +UFL7: SKIPN SCRFG1 + JRST UFL8 + MOVNI U,1 + JRST UFL2 + + +ILUUO: MOVEI T,BILLOP + +UUOERR: IORM T,PIRQC(U) + MOVE T,40 + MOVEM T,@40P(U) + JRST UUOE1 + + +IOADC: MOVEI T,BIOADC + JRST UUOERR + + + +;CODE TO BE FLUSHED + +NSD: JRST URET +LCDIY: JRST URET + +IOCERR: MOVEI T,BIOCER + IORM T,PIRQC(U) + JRST UUOE1 +NCA: JRST URET +FILDF: JRST URET + +UTPFUL: JRST 4,. + ;UUO DISPATCH + +UUODSP: PUSHJ P,AIOT + PUSHJ P,AOPEN + PUSHJ P,AOPER + PUSHJ P,ACALL + PUSHJ P,AUSET ;INSERT ADDED UUO'S HERE + PUSHJ P,ABREAK + PUSHJ P,ILLOP2 + + +ILLOP: MOVE T,UUOH + TLNN T,LSRMOD + JRST 4,. + MOVSI T,(AUUO) + JRST ILLOP1 + +ILLOP2: MOVEI T,BILLOP +ILLOP4: IORM T,PIRQC(U) + JRST ILLOP3 + +; IOT DISPATCH + +AIOT: LDB R,[270400,,40 + ADDI R,IOCHNM(U) + HLRZ A,(R) + HRRZ B,(R) + HRRZ C,40 + CAML C,RMEMT(U) + JRST IOADC + ADDI C,@UPR(U) + JRST @IOTTB(B) + +;USET DISPATCH +AUSET: HRRZ C,40 + CAML C,RMEMT(U) + JRST IOADC + ADDI C,@UPR(U) + LDB R,[270400,,40 + ADDI R,IOCHNM(U) + HLRZ A,(R) + HRRZ B,(R) + SKIPL CLSTB(B) + JRST IOCERR ;NO USER IS OPENED ON THIS CHANNEL + HRRZ B,(C) + CAML B,RMEMT(U) + JRST IOADC + ADDI B,@UPR(U) + HLRZ Q,(C) + TRZE Q,400000 + JRST OUTLOC + CAIL Q,MXVAL + JRST ILUUO + XCT USETL(Q) + MOVEM D,(B) + POPJ P, + +USETL: MOVE D,UPC(A) + MOVE D,VALUE(A) + MOVE D,UILOOK(A) + MOVE D,UOLOOK(A) + MOVE D,UNAME(A) + MOVE D,JNAME(A) + MOVE D,MSKST(A) + MOVE D,USTP(A) + MOVE D,PIRQC(A) + HLLZ D,SUPPRO(A) + MOVE D,RMEMT(A) + MOVE D,SV40(A) +MXVAL==.-USETL + +OUTLOC: CAIL Q,MXVAL + JRST ILUUO + MOVE D,(B) + XCT USETL1(Q) + POPJ P, + +USETL1: PUSHJ P,UPCSET + MOVEM D,VALUE(A) + MOVEM D,UILOOK(A) + MOVEM D,UOLOOK(A) + JRST ILUUO + JRST ILUUO + MOVEM D,MSKST(A) + PUSHJ P,USTOP + MOVEM D,PIRQC(A) + JRST ILUUO + JRST ILUUO + JRST ILUUO + +USTOP: EXCH U,A + CONO PI,CLKOFF + SKIPN USTP(U) + PUSHJ P,PCCK + DPB D,[410100,,USTP(U) ;BUSRC + CONO PI,CLKON + EXCH U,A + POPJ P, + +UPCSET: EXCH U,A + PUSHJ P,PCCK + TLO D,LSRMOD + TLZ D,BADPC + MOVEM D,UPC(U) + CONO PI,CLKON + EXCH U,A + POPJ P, + +AFDELE: CAML B,MEMTOP(U) + JRST IOADC + PUSH P,(C) + MOVSI T,(SETZ) + IORM T,(P) + JRST AFDEL1 + +;SUBTTL OPEN SET UP AND DISPATCH + +;3.1 = 0 => INPUT =1 OUTPUT +;3.2=0 => UNITS =1 BLOCK +;3.3=0 => ASCII =1 IMAGE +;4.9 = DELETE OR RENAME + +AOPEN: LDB R,[2700400,,40 ;OPEN UUO + HRRZ C,40 + CAML C,MEMTOP(U) + JRST IOADC + ADDI C,@UPR(U) + ADDI R,IOCHNM(U) ;C E(40) T AC(40) + HLRZ A,(R) ;OPEN FORMAT RH = DEV NAME + HRRZ B,(R) ;2ND IN 3RD WDS FILE NAME + PUSH P,R + PUSH P,C + PUSHJ P,@CLSTB(B) ;CLOSE PREV + POP P,C + POP P,R + CLEARM (R) + PUSH P,(C) ;GET DEV AND FILE NAMES +AFDEL1: PUSH P,1(C) + PUSH P,2(C) + PUSHJ P,TRAN ;IO MAP + JRST URET + MOVE A,-2(P) + MOVSI B,-NDEVS + HRRZ C,DEVTAB(B) + CAIE C,(A) + AOBJN B,.-2 + JUMPG B,OPEN1 + MOVSI C,400000 + TLNE A,1 + MOVSI C,200000 + TDNN C,DEVTAB(B) + JRST LCDIY ;IO DEVICE DOSN'T GO THAT WAY + HLRZ C,DEVTAB(B) +OPEN2: ANDI C,177777 + POP P,B + POP P,A + EXCH C,(P) + HLRZ D,C + ROT D,-1 ;A,B FILE NAME C MAPPED DEV +OPTION SEL + TRNE D,200000 + TDZ D,[400000,,7] ;MAKE DELETE OR RENAME LOOK LIKE OPEN FOR READ + POPJ P, ;IF DELE OR RENAME, 4.8 OF D =1 + + +OPEN1: LDB E,[61400,,A ;CHECK FOR NUMBERED DEV + LDB I,[600,,A + CAIL I,'0 + CAILE I,'9 + JRST NSD ;NO SUCH DEVICE + SUBI I,'0 + MOVSI C,-NDV1 + HRRZ B,DVT1(C) + CAIE B,(E) + AOBJN C,.-2 + JUMPG C,NSD + HLRZ C,DVT1(C) + JRST OPEN2 + + +CLSTB: CPOPJ ;SYS CLOSETAB + LPTCLS + TYICLS + TYOCLS + REPEAT 4,CPOPJ + REPEAT 4,SETZ CPOPJ + UTICL + UTOCLR + UTICL + UTOCL + UTICL + UTOCL + VIDCLS + +IOTTB: IOCERR +LPTDN==.-IOTTB + PILPT1 +TYIDN==.-IOTTB + TYI +TYODN==.-IOTTB + TYO +NLIDN==.-IOTTB + NULI +NLBIDN==.-IOTTB + NULBI +NLODN==.-IOTTB + NULOD +NLBDN==.-IOTTB + NULBOD +UWIDN==.-IOTTB + UWI +UWODN==.-IOTTB + UWO +UBODN==.-IOTTB + UBO +UBIDN==.-IOTTB + UBI +DNUACII==.-IOTTB + UASCII +DNUACCO==.-IOTTB + UASCCO +DNUBKI==.-IOTTB + UBLKI +DNUBKO==.-IOTTB + UBLKO +DNUDTI==.-IOTTB + UDATAI +DNUDTO==.-IOTTB + UDATAO +VIDOPN==.-IOTTB + VIDIOT + ;SUBTTL IO TRANSLATOR +;TRAN1: UNAME +;TRAN2: JNAME +;TRAN3: 4.9 0 RETRANSLATE 1 ATOM 3.1 0 INPUT 1 OUTPUT,,DEV +;TRAN4: NAME1 +;TRAN5: NAME2 +;TRAN6: DEV +;TRAN7: NAME 1 +;TRAN8: NAME 2 + +TRAN: MOVEI C,10 +TRAN0: MOVE I,SIOMTU +ITRN3: SKIPN A,TRAN1 + JRST ITRN1 + CAME A,[SIXBIT /*/] + CAMN A,UNAME(U) + SKIPN A,TRAN2(I) + JRST ITRN1 + CAME A,JNAME(U) + CAMN A,[SIXBIT /*/] + JRST ITRN2 +ITRN1: AOBJN I,ITRN3 + JRST POPJ1 + +ITRN2: MOVE B,TRAN4(I) + CAME B,[SIXBIT /*/] + CAMN B,-2(P) + SKIPN B,TRAN5(I) + JRST ITRN1 + CAME A,[SIXBIT /*/] + CAMN A,-1(P) + SKIPN A,TRAN3(I) + JRST ITRN1 + HRRZ B,A + XOR A,-3(P) + CAIN B,(SIXBIT /*/) + JRST ITRN5 + TDNE A,[IOBIT,,-1] + JRST ITRN1 +ITRN4: HRRZ A,TRAN6(I) + CAIE A,(SIXBIT /*/) + HRRM A,-3(P) + MOVE A,TRAN7(I) + CAME A,[SIXBIT /*/] + MOVEM A,-2(P) + MOVE A,TRAN8(I) + CAME A,[SIXBIT /*/] + MOVEM A,-1(P) + SKIPGE TRAN3(I) + JRST POPJ1 + SOJG C,TRAN0 + POPJ P, + +ITRN5: TLNE A,IOBIT + JRST ITRN1 + JRST ITRN4 + +DEVTAB: 200000+LPTO,,(SIXBIT /LPT/) ;4.8 OUTPUT 4.9 INPUT + 600000+TTYO1,,(SIXBIT /TTY/) + 600000+NULO,,(SIXBIT /NUL/) + 600000+USRO,,(SIXBIT /USR/) + 400000+VIDI,,(SIXBIT /VID/) + +NDEVS==.-DEVTAB + +DVT1: TTYO,,_-24. + UTO,,_-24. + +NDV1==.-DVT1 + +GET40: LDB R,[270400,,40 +GET40A: HRRZ C,40 + CAML C,MEMTOP(U) + JRST IOADC + ADDI C,@UPR(U) + POPJ P, + +;SUBTTL OPER DISPATCH + +AOPER: LDB R,[270400,,40 + MOVE J,R + ADDI J,@UPR(U) + ADDI R,IOCHNM(U) + HRRZ C,40 + CAIL C,MXOPR + JRST ILUUO + PUSHJ P,@OPRDSP(C) + POPJ P, + AOS UUOH + POPJ P, + +OPRDSP: ILUUO + AITYI + ALISTEN + ASLEEP + ASETMSK + AGETMSK + ALOGIN + ACLOSE + AUFLUSH + AATTY + AGBLTTY + AIPUSH + AIPOP + ADFLUSH + ADSTOP + AREDTIM + AREDDTS + ALTPOP + AUTDM + +MXOPR==.-OPRDSP + + +;SUBTTL CALL DISPATCH + +ACALL: LDB T,[270400,,40 + HRRZ B,40 + MOVE C,B + ADDI C,@UPR(U) + PUSHJ P,@CALDIS(T) + POPJ P, + JRST RSKP +CALDIS: ILUUO + ADISMIS + ATRAND + ATRANAD + AVALRET + AUTRAN + UACORE + ATRNDL + ADSTART + AFDELE +REPEAT 20-.+CALDIS,ILUUO + + ACLOSE: HLRZ A,(R) ;OPER 7 + HRRZ B,(R) + PUSH P,R + PUSHJ P, @CLSTB(B) + POP P,R + CLEARM (R) + POPJ P, + +AVALRET: MOVE C,(C) + MOVEM C,VALUE(U) + MOVEI T,VALRTF + JRST ILLOP4 + +ABREAK: MOVEI T,BRKF + JRST ILLOP4 + +AUTRAN: CAML C,RMEMT(U) + JRST IOCERR + MOVEI A,0 ;CALL 5, + MOVE B,(C) + HRR B,U +UTRNL: SKIPN UNAME(A) + JRST UTRNA + CAMN B,SUPPRO(A) + JRST UTFND +UTRNA: CAML A,USRHI + POPJ P, + ADDI A,LUBLK + JRST UTRNL + +UTFND: MOVE B,UNAME(A) + MOVEM B,1(C) + MOVE B,JNAME(A) + MOVEM B,2(C) + JRST POPJ1 + +PCCK1: CONO PI,CLKON + PUSHJ P,UDELAY +PCCK: CONO PI,CLKOFF + SKIPN MEMTOP(U) + POPJ P, + PUSHJ P,PCLSR + JRST PCCK1 + POPJ P, + + +AUFLUSH: HRRZ B,(R) ;OPER 10 + HLRZ A,(R) + SKIPL CLSTB(B) + JRST IOCERR + MOVNI D,1 + PUSHJ P,USTOP + CLEARM (R) + MOVEI R,IOCHNM(U) +AUFLS1: HRRZ B,(R) + HLRZ C,(R) + SKIPL CLSTB(B) + JRST AUFLS2 + CAMN C,A + CLEARM (R) +AUFLS2: CAIG R,IOCHNM+16(U) + AOJA R,AUFLS1 + MOVE T,SIOCP(U) +AUFLS3: TLNN T,-1 + JRST AUFLS4 + POP T,R + HRRZ C,(R) + HLRZ D,(R) + SKIPL CLSTB(C) + JRST AUFLS3 + CAMN C,A + CLEARM (T) + JRST AUFLS3 +AUFLS4: EXCH U,A + PUSH P,A + PUSHJ P,IODCL + MOVEI B,0 + PUSHJ P,ACORE + JRST .-2 + +AUFLS5: POP P,A + EXCH U,A + CLEARM UNAME(A) + JRST UDELAY + + ADISMIS: ;CALL 1, + MOVE B,(C) + TLO B,LSRMOD + TLZ B,BADPC + MOVEM B,UUOH + MOVE B,TTYTBL(U) + JUMPL B,ADISM1 + MOVEI C,TTYIF + SKIPN TINTC(B) + JRST ADISM1 + IORM C,PIRQC(U) + MOVE C,[JRST ONEFLS + MOVEM C,UEXIT +ADISM1: MOVEI C,AROIF + ANDCAM C,PIRQC(U) + SETOM PICLR(U) + POPJ P, + + +ASLEEP: SOSL (J) ;OPER 3 + PUSHJ P,UFLS + POPJ P, + +ALOGIN: MOVE A,UNAME(U) ;OPER 6 + AOJN A,ALOG1 ;JUMP ON ALREADY LOGGED IN + MOVE A,(J) + JUMPE A,ALOG1 ;READ JNAME EVEN THOUGH NOT LOGGED IN + MOVEM A,UNAME(U) + AOS (P) + +ALOG1: MOVE A,UNAME(U) + MOVE B,JNAME(U) + MOVEM A,(J) + MOVEM B,1(J) + POPJ P, + +AGETMSK: MOVE A,MSKST(U) ;OPER 5 + MOVEM A,(J) + POPJ P, + +ASETMSK: MOVE A,(J) ;OPER 4 + TRZ A,BPIPI+VALRTF+BRKF+BCNTRZI ;MAKE SURE THESE GO TO SUP. PRO. + MOVEM A,MSKST(U) + MOVEI B,40+APRCHN + TRNE A,AROIF + MOVEI B,20+APRCHN + MOVEM B,APRC(U) + CONO @APRC(U) + POPJ P, + +AREDTIM: SKIPA A,TIME +AREDDTS: DATAI A + MOVEM A,(J) + POPJ P, + +ATRAND: CAML B,MEMTOP(U) + JRST IOADC + PUSH P,(C) ;CALL 2, + PUSH P,1(C) + PUSH P,2(C) + PUSHJ P,TRAN + JRST URET + POP P,2(C) + POP P,1(C) + POP P,(C) + JRST POPJ1 + +ATRANAD: CAML B,MEMTOP(U) + JRST IOADC + MOVE A,SIOMTU + SKIPN TRAN1(A) + JRST ADDTRN + AOBJN A,.-2 + CONO PI,CLKOFF ;CALL 3, + MOVE A,SIOMTU + SUB A,[1,,1] + HRRE B,A + JUMPLE B,CLKONJ +ADDTRN: MOVE B,(C) + CAME B,UNAME(U) + POPJ P, + MOVEM B,TRAN1(A) + MOVE B,1(C) + MOVEM B,TRAN2(A) + MOVEM A,SIOMTU + CONO PI,CLKON + IRPC N,,345678 + MOVE B,N-1(C) + MOVEM B,TRAN!N(A) + TERMIN + JRST POPJ1 +CLKONJ: CONO PI,CLKON + POPJ P, + +ATRNDL: ;CALL 7, + MOVE A,SIOMTU + MOVE B,(C) + CAME B,UNAME(U) + POPJ P, +TRND: IRPC N,,12345678 + MOVE B,TRAN!N(A) + CAME B,N-1(C) + JRST TRND2 + TERMIN + CLEARM TRAN1(A) + JRST POPJ1 + +TRND2: AOBJN A,TRND + POPJ P, + AATT5: CONO PI,CLKON + PUSHJ P,UDELAY + +AATTY: HLRZ A,(R) ;OPER 11 + HRRZ B,(R) + SKIPL CLSTB(B) + POPJ P, + CONO PI,CLKOFF + MOVE B,TTYTBL(U) + JUMPL B,AATT1 ;DOESNT HAVE TTY NOW + HLL A,TTYSTS(B) + TLO A,400000 + MOVEM A,TTYTBL(U) +AATT4: MOVE D,TTYTBL(A) + TLNE D,100000 + JRST AATT2 + HRRZM A,TTYSTS(B) + MOVEM B,TTYTBL(A) + CONO PI,CLKON + JRST POPJ1 + +AATT2: TRNE D,400000 + JRST AATT3 + TLZ D,100000 + MOVEM D,TTYTBL(A) + HRRZ A,TTYTBL(A) + JRST AATT4 + +AATT3: HLL A,TTYTBL(A) + TLZ A,700000 + MOVEM A,TTYSTS(B) + HRRZM B,TTYTBL(A) +CLKOJ1: CONO PI,CLKON + JRST POPJ1 + +AATT1: TLNN B,100000 + JRST CLKONJ + JRST AATT5 + + +AGBLT1: CONO PI,CLKON + PUSHJ P,UDELAY + +AGBLTTY: HLRZ A,(R) ;OPER 12 + HRRZ B,(R) + SKIPL CLSTB(B) + POPJ P, + CONO PI,CLKOFF + MOVE A,TTYTBL(U) + JUMPGE A,POPJ1 ;ALREADY HAS IT + TLNE A,200000 + JRST CLKONJ ;NEVER HAD IT + TLNE A,100000 + JRST AGBLT1 ;TAKEN AWAY WAIT FOR IT TO COME BACK + TRNE A,400000 + JRST CLKONJ ;NEVER GAVE IT AWAY +AGBLT3: MOVE E,TTYTBL(A) + JUMPL E,AGBLT2 + HLLZ D,TTYSTS(E) + IOR D,[500000,,400000 + MOVEM D,TTYTBL(A) + LDB D,[220300,,TTYTBL(U) + HRL D,U + MOVSM D,TTYSTS(E) + HRRZM E,TTYTBL(U) + JRST CLKOJ1 + +AGBLT2: MOVSI D,100000 + IORM D,TTYTBL(A) + HRRZ A,TTYTBL(A) + JRST AGBLT3 + +AIPUSH: MOVE T,SIOCP(U) ;OPER 13 + HLRZ A,T + CAIL A,20 + JRST IOCERR + PUSH T,(R) + MOVEM T,SIOCP(U) + CLEARM (R) + POPJ P, + +AIPOP: PUSHJ P,ACLOSE ;OPER 14 + MOVE T,SIOCP(U) + TLNN T,-1 + JRST IOCERR + POP T,(R) + MOVEM T,SIOCP(U) + POPJ P, + + + SUBTTL CORE ALLOCATOR + +UACORE: +ACORE: CAILE B,MXC ;U HAS USER THAT WANTS CORE + POPJ P, ;IF U=USER,THIS GUY IS IN CORE + CAMN U,USER + JUMPE B,ACRF +ACRF1: PUSH P,A ;MAY CLOBBER ALL ACS EX A,C,E,D,U + PUSH P,C + PUSH P,E + PUSH P,D + CAMN U,USER + JRST ACR1A + PUSHJ P,PCCK + MOVSI A,BUCSTP + IORM A,USTP(U) + CONO PI,CLKON +ACR1A: MOVEM B,EPDL(U) +ACORE1: PUSHJ P,SWAIT + CRACF + CAMN U,DISUSR + PUSHJ P,DCRSTP + MOVEM U,CUSER + SETOM MEMFRZ + JUMPN B,ACR1B + SKIPN MEMTOP(U) + JRST ACORE9 ;HAS NO MEMORY WANTS NO MEMORY +ACR1B: SKIPN A,MEMTOP(U) + JRST ACORE2 ;NO CORE NOW + LDB A,[341000,,UPR(U) + CAIN B,1(A) + JRST ACORE9 ;SAME AS NOW + CAIG B,1(A) + JRST ACORE3 ;LESS THAN NOW + + +ACORE2: MOVEI C,1(A) + SUBM B,C + CAMLE C,MEMFR + JRST ACORE4 ;SCROUNGING REQD + SKIPN MEMTOP(U) + JRST ACORE5 ;NO MEM NOW + LDB D,[121000,,UPR(U) + ADDI D,1(A) + LDB E,[MUR,,MEMBLT(D) + CAIN E,75 ;BLOCK ABOVE CURRENT FREE + JRST ACORE6 +ACORE5: PUSHJ P,MXCCA ;GET MAX CORE AVAIL IN BLOCK + CAMG B,D ;RETURN RESULT IN D + JUMPN U,ACORE7 ;BLT GUY IN -- DONT BLT SYS IN HA HA + SKIPN MEMTOP(U) + JUMPE U,ACORE7 ;EXECPT SOMETIMES HA HA + MOVSI D,-MX1KB ;INITITIATE MOBY SHUFFLE + MOVEI I,0 + JRST ACMS2 + +ACRF: PUSHJ P,IODCL + MOVEI B,0 + PUSHJ P,ACRF1 + JFCL + SKIPGE C,TTYTBL(U) + JRST ACRF5 + SKIPGE A,SUPPRO(U) + JRST ACRF3 + HLL A,TTYTBL(A) + TLZ A,777770 + MOVEM A,TTYSTS(C) + HRRZM C,TTYTBL(A) +ACRF4: SETOM TTYTBL(U) +ACRF2: CLEARM UNAME(U) + SETOM USTP(U) + CONO PI,CLKOFF + JRST UDELAY + +ACRF3: SETOM TTYSTS(C) + JRST ACRF4 + +ACRF5: CAMN C,[-1 + JRST ACRF2 + SKIPL D,SUPPRO(U) + HRRM C,TTYTBL(D) + LSH C,-33. + SKIPL D + DPB C,[410300,,TTYTBL(D) + JRST ACRF2 + +DCRSTP: CAMN U,VIDUSR + POPJ P, + SETOM CDSOFF + CONO DIS,0 + POPJ P, + +DCRRST: CAMN U,VIDUSR + POPJ P, + SKIPL DISOFF + SKIPGE DISON + JRST .+2 + CONO DIS,DISCHN+SDCHN_3 + CLEARM CDSOFF + POPJ P, + +ACORE4: JRST ACR9A ;TEMP + CONO PI,UTCOFF + MOVE D,UTTBF + CAIGE D,8 + JRST ACR9B ;CANNOT GET ANOTHER BLOCK BY RECAIMING FREE IO BUFFER + MOVSI I,-MX1KB + LDB D,[MUR,,MEMBLT(I) + CAIN D,76 + AOBJN I,.-2 + JUMPGE I,[JRST 4,.] ;MEMBLT FOULED UP + MOVSI D,200000 + IORM D,MEMBLT(I) ;ALLOCATION INHIBIT + +ACORE6: MOVE A,D + PUSHJ P,CCFRE + DPB A,[MLO,,MEMBLT-1(A) + MOVEI C,377 + DPB C,[MLO,,MEMBLT(A) + SOS A + DPB A,[MLU,,MEMBLT+1(A) + HRRZ A,D + PUSHJ P,CZRR ;ZERO BLOCK ADDED + MOVEI A,2000 + +ACORTN: HLRZ C,UPR(U) + SKIPN MEMTOP(U) + MOVNI C,2000 + ADD A,C + JRST ACORT1 + +ACMS2: MOVE J,D ;D HAS FIRST FREE BLOCK BELOW +ACMS7: LDB E,[MUR,,MEMBLT(J) + CAMN J,D + JRST ACMS4F ;;NO FREE MEM SO FAR + CAIGE E,74 + JRST ACMS4 ;USER + ORCMI E,77 + AOJE E,ACMS5 ;EXEC + AOJE E,ACMS6 ;IO + AOJE E,ACMS8 ;FREE + PUSHJ P,UDELAY ;IN PROCESS + JRST ACMS7 + + +ACMS4F: CAIN E,75 + JRST ACMS8 ;FREE NOW + IMULI E,LUBLK + CAME E,U + JRST ACMS5 + XORI I,1 + MOVE D,ACMDT1(I) + JRST ACMS2 + + +ACR9B: CONO PI,UTCON +ACR9A: SOS -4(P) +ACORE9: CAMN U,DISUSR + PUSHJ P,DCRRST + MOVSI A,BUCSTP + CAME U,USER + ANDCAM A,USTP(U) + CLEARM MEMFRZ + SETOM CRACF + POP P,D + POP P,E + POP P,C + POP P,A + JRST POPJ1 + +ACMS4A: CONO PI,CLKON +ACS4A: PUSHJ P,UDELAY +ACMS4: MOVEI U,LUBLK + IMUL U,E + CAMN U,USER + JRST ACMS4D + LDB Q,[400100,,USTP(U) ;BEXC + JUMPN Q,ACS4A + CONO PI,CLKOFF + PUSHJ P,PCLSR + JRST ACMS4A + MOVSI Q,BCSTOP + IORM Q,USTP(U) + CAMN U,DISUSR + PUSHJ P,DCRSTP + CONO PI,CLKON + +ACMS4D: JUMPN I,ACMS4G ;JUMP ON MOVEING DOWN + HRRZ A,D ;MOVE USER + PUSHJ P,UADRS2 ;MOVE USER VARIABLES +ACMS4G: JSP Q,ACMS4B ;WRITING POINTER +ACMS5: ADD D,ACMDT2(I) +ACMS8: XCT ACMDT3(I) + JRST ACMS7 + +ACMDT1: -MX1KB,, + -MX1KB,,MX1KB-1 + +ACMDT2: 1,,1 + ,-1 +ACMDT3: AOBJP J,ACMS4H + JSR ACMD1 + +ACMD1: 0 + ADDI J,-1 + JUMPG J,ACMS4H + JRST @ACMD1 + + +ACMDT4: ACMS4L + ACMS4M + +ACMS4L: DPB T,[MLU,,MEMBLT(A) + AOS A + DPB A,[MLO,,MEMBLT-1(A) + JRST ACMS4K + +ACMS4M: DPB T,[MLO,,MEMBLT(A) + SOS A + DPB A,[MLU,,MEMBLT+1(A) + JRST ACMS4K + +ACMDT5: MLO,,MEMBLT-1(D) + MLU,,MEMBLT+1(D) + + +ACMS4B: MOVEI T,377 ;LINK UP IN GOING UP LINK DOWN IF DOWN +ACMS4I: HRRZ A,D ;MOVE CORE FOR USER + PUSHJ P,TCALL + JRST MPOUT ;PATCH OUT NEW BLOCK OF FREE STG LIST + JRST @ACMDT4(I) ;PATCH MEM LINKS + +ACMS4K: PUSHJ P,CMOVE ;MOVE CORE + HRRZ T,D + LDB E,[MUR,,MEMBLT(J) + DPB E,[MUR,,MEMBLT(D) + HRRZ A,J + PUSHJ P,MEMR ;RETURN OLD BLOCK + ADD D,ACMDT2(I) ;INCREMENT POINTERS + ADD J,ACMDT2(I) + JUMPGE J,ACMS4N + LDB A,[MUR,,MEMBLT(J) + CAMN A,E + JRST ACMS4I ;SAME USER, KEEP GOING +ACMS4N: MOVEI T,377 + DPB T,ACMDT5(I) + JUMPE I,ACMS4J + MOVEI A,1(D) + PUSHJ P,UADRS2 +ACMS4J: CAME U,CUSER + JRST ACMS4C +ACMS4H: MOVE U,CUSER ;MOVED GUY WE ARE MAKING CORE FOR, HE MAY BE HAPPY NOW + JRST ACORER + +ACMS4C: MOVSI Q,BCSTOP ;RANDOM GUY, START HIM BACK UP + ANDCAM Q,USTP(U) + CAMN U,DISUSR + PUSHJ P,DCRRST + MOVE U,CUSER + JRST ACMS7 + +CMOVE: HRRZ A,D ;MOVE BLOCK IN J TO BLOCK IN D + HRL A,J + LSH A,10. + MOVE C,A + BLT A,1777(C) + POPJ P, + + + JUMPA SEARC +UDELAY: PUSHJ P,UFLS + POPJ P, + +ACMS6: HRRZ A,D + PUSHJ P,TCALL + JRST MPOUT + PUSHJ P,AIOBT ;MOVE C(J) TO C(D) + LDB E,[MUR,,MEMBLT(J) + DPB E,[MUR,,MEMBLT(D) + HRRZ A,J + PUSHJ P,MEMR + JRST ACMS5 + +AIOBT: LDB R,[MLO,,MEMBLT(J) +AIOBTL: MOVSI E,400000 ;LOCK ALL BUFFERS IN BLOCK BEING VACATED + IORM E,IOBFT(R) + LDB R,[IOLC,,IOBFT(R) + CAIE R,377 + JRST AIOBTL +; MOVNI R,8 +; ADDM R,UTTBF +; ADDM R,UTTLB +; HRRZ A,D +; PUSHJ P,TCALL +; JRST UTMGB + +AIOBT1: PUSH P,[0 + LDB R,[MLO,,MEMBLT(J) +AIOBT2: SKIPL IOBFT(R) + JRST AIOB5A + LDB Q,[IOCH,,IOBFT(R) + CAIE Q,77 ;FREE + JRST AIOBT3 +AIOBT4: DPB D,[141000,,IOBFT(R) ;RELOCATE IOSA + ANDCAM E,IOBFT(R) + +AIOBT5: SKIPGE IOBFT(R) + SETOM (P) + +AIOB5A: LDB R,[IOLC,,IOBFT(R) + CAIE R,377 + JRST AIOBT2 + POP P,A + JUMPE A,CPOPJ + PUSHJ P,UDELAY + JRST AIOBT1 + +AIOBT3: CAIL Q,NUTIC+NUTOC + JRST AIOBT6 + IORM E,UTRAC(Q) ;UT DATA + LDB C,[IOLO,,IOBFT(R) + CAIN C,-4&1777 + JRST AIOBT7 ;ACTIVE AT PI + CAIN C,-3&1777 + JRST AIOBT8 ;ACTIVE AT MN PROG + PUSHJ P,ACMBM +AIOB8B: ANDCAM E,UTRAC(Q) + JRST AIOBT4 + + +AIOBT7: ANDCAM E,UTRAC(Q) + JRST AIOBT5 + +AIOBT6: CAIE Q,NUTIC+NUTOC + JRST 4,. ;UNKNOWN CHNL + CONO PI,UTCOFF + LDB A,[IOLO,,IOBFT(R) ;UT DIR + SKIPGE UFLAPF(A) + JRST AIOB5B + LDB C,[420200,,UDIRO(A) + JUMPN C,AIOB5B + MOVSI C,600000 + IORM C,UDIRO(A) + CONO PI,UTCON + DPB D,[121000,,UDIRO(A) ;RELOCATE UDIRO + HRRE T,DCHNT(A) ;RELOCATE CHANNEL DIR PNTRS +AIOB6B: JUMPL T,AIOB6C + DPB D,[121000,,UTDIRP(T) + HRRE T,UTUL(T) + JRST AIOB6B + + + +AIOB6C: PUSHJ P,ACMBM + ANDCAM C,UDIRO(A) + JRST AIOBT4 + +ACMBM: LDB TT,[IOSA,,IOBFT(R) + LSH TT,6 + HRLS TT + DPB D,[121000,,TT + MOVEI T,177(TT) + BLT TT,(T) + POPJ P, + +AIOBT8: CONO PI,CLKOFF + HLRZ U,UTUSR(Q) + PUSHJ P,PCLSR + JRST AIOB8A + MOVSI TT,BCSTOP + IORM TT,USTP(U) + CONO PI,CLKON + DPB D,[121000,,MPRP(Q) + PUSHJ P,ACMBM + MOVSI TT,BCSTOP + ANDCAM TT,USTP(U) + MOVE U,CUSER + JRST AIOB8B + +AIOB5B: CONO PI,UTCON + JRST AIOBT5 + + +AIOB8A: CONO PI,CLKON + MOVE U,CUSER + JRST AIOBT5 + + +MXCCA: MOVEI D,0 + MOVSI I,-MX1KB +MXCC1: LDB Q,[MUR,,MEMBLT(I) + CAIN Q,75 + JRST MXCC2 +MXCC5: AOBJN I,MXCC1 + POPJ P, +MXCC2: MOVEI J,1 + MOVE T,I + AOBJP I,MXCC4 +MXCC6: LDB Q,[MUR,,MEMBLT(I)] + CAIN Q,75 + AOJA J,MXCC3 +MXCC4: CAMGE D,J + MOVE E,T + CAMGE D,J + MOVE D,J + JRST MXCC5 + + +MXCC3: AOBJN I,MXCC6 + JRST MXCC4 + + +ACORE7: MOVE TT,B + HRRZ A,E + MOVEI D,377 +ACR7L: PUSHJ P,CCFRE + DPB D,[MLU,,MEMBLT(A) + AOS A + DPB A,[MLO,,MEMBLT-1(A) + MOVEI D,-1(A) + SOJG TT,ACR7L + MOVEI D,377 + DPB D,[MLO,,MEMBLT-1(A) + SKIPN MEMTOP(U) + JRST ACORE8 ;NO MEM NOW + HRRZ I,E ;E HAS LOWEST BLOCK NEW CORE + LSH I,10. + MOVE A,I + HRL I,UPR(U) + HRRZ D,I + ADD D,MEMTOP(U) + BLT I,METOF-1(D) + HRRZ A,UPR(U) + LSH A,-10. + HLRZ I,UPR(U) + LSH I,-10. + PUSHJ P,MEMR + AOS A + SOJGE I,.-2 +ACORE8: HRRZ A,E ;INSERT CODE TO ZERO NEW CORE + PUSHJ P,UADRS2 + SKIPN MEMTOP(U) + JUMPE U,ACR8A + MOVE A,EPDL(U) + SOS A + HLRZ B,UPR(U) + LSH B,-10. + SKIPN MEMTOP(U) + SOS B + MOVE C,B + SUB B,A + HRLZ A,B + HRRZ B,UPR(U) + LSH B,-10. + ADDI B,1(C) + HRR A,B +ACRZR: PUSH P,A + PUSHJ P,CZRR + POP P,A + AOBJN A,ACRZR +ACR8A: +ACORR1: MOVE B,EPDL(U) + MOVEI A,-1(B) + LSH A,10. +ACORT1: HRLM A,UPR(U) + ADDI A,2000-METOF + HRRZM A,MEMTOP(U) + ADDI A,METOF + HRRZM A,RMEMT(U) + +ACORER: CAMN U,USER + DATAO UPR(U) + CAMN U,DISUSR + PUSHJ P,DCRRST +ACORR2: SETOM CRACF + MOVE B,EPDL(U) + CLEARM MEMFRZ + JRST ACORE1 + + +ACORE3: CAMN U,DISUSR + JSR DISACR + SUBI A,-1(B) + HRRZ E,A + HLRZ A,UPR(U) + ADD A,UPR(U) + LSH A,-10. +ACR2L: PUSHJ P,MEMR + MOVEI D,377 + LDB C,[MUR,,MEMBLT-1(A) + IMULI C,LUBLK + CAMN C,U + DPB D,[MLO,,MEMBLT-1(A) + SOS A + SOJG E,ACR2L + LSH A,10. + SUB A,UPR(U) + JUMPGE A,ACORT1 + CLEARM MEMTOP(U) + CLEARM RMEMT(U) + HRRZS UPR(U) + JRST ACORR2 + + +CCFRE: PUSHJ P,TCALL + JRST MPOUT +CCRTN: MOVE I,U + IDIVI I,LUBLK + DPB I,[MUR,,MEMBLT(A) + POPJ P, + + +CZRR: LSH A,10. + CLEARM (A) + HRLS A + AOS A + MOVE C,A + BLT A,1776(C) + POPJ P, + +DISACR: 0 + PUSH P,A + MOVEI A,1(B) + LSH A,10. + CAML A,DISPRT + JRST DISAC1 + SETOM DISUSR + SETOM DISOFF + CLEARM CDSOFF +DISAC1: POP P,A + JRST @DISACR + +ADSTART: CONO PI,CLKOFF + SKIPL VIDUSR + JRST CLKONJ + SKIPE TTYTBL(U) ;ALWAYS LET CONSOLE TTY USER OPEN DISPLAY + CAMN U,DISUSR + JRST DSTRT1 + SKIPL DISUSR + JRST CLKONJ + +DSTRT1: CONO DIS,100 + CLEARM CDSOFF + MOVEM U,DISUSR + MOVE A,(C) + HLRO B,A + MOVNS B + ADDI B,(A) + CAML B,RMEMT(U) + JRST DISBRF + MOVEM B,DISPRT + ADDI A,@UPR(U) + MOVEM A,DISPTR + MOVEM A,DBLKOP + + MOVE A,UPR(U) + HRRZM A,DRELOC + CLEARM DISOFF + CONO DIS,100\DISCHN\SDCHN_3 +CLKNJ1: CONO PI,CLKON + AOS (P) + POPJ P, + +DISBRF: SETOM DISUSR + JRST CLKONJ + +DRELOC: 0 ;RELOC OF DIS USER +DISPRT: 0 ;LARGEST LOC USED BY DISLIST +DISPTR: 0 ;PERM DIS BLKO PTR +DBLKOP: 0 ;TEMP DIS BLKO PTR +DISON: 0 ;-1 IF DIS STOPPED AFTER SPECIAL INT OR BLKO OVERFLOW + ;WILL BE RESTARTED IN CLKBRK ROUTNE. + + + +SRECYC: MOVEM A,DISAS + CONSZ DIS,2000 + JRST DSLTPB + SETOM DISON + CONO DIS,0 +SRCYCX: MOVE A,DISAS + JRST 12,@TTYBRK + +DSLTPB: SKIPE LTPOPO + JRST SRCYCX ;IN LIGHT PEN UUO + DATAI DIS,LLTPSN + AOS LTPCNT + HRRZ A,LLTPSN + ADDM A,LTPCY + HLRZ A,LLTPSN + ADDM A,LTPCX + CONO DIS,10000\SDCHN_3\DISCHN + JRST SRCYCX + +DRECYC: 0 + SETOM DISON + CONO DIS,0 + JRST 12,@DRECYC + +LLTPSN: 0 ;. TO .+3 BLTED TO USER +LTPCNT: 0 +LTPCY: 0 +LTPCX: 0 +LTPOPO: 0 + +DISA: 0 +DISAS: 0 +DISOFF: 0 ;-1 IF DIS NOT IN USE +CDSOFF: 0 ;-1 IF DIS STOPPED BY CORE ALLOCATOR + + +ADSTOP: CAME U,DISUSR ;OPER 16 + POPJ P, + CONO DIS,100 + SETOM DISOFF + POPJ P, + +ADFLUSH: CAME U,DISUSR ;OPER 15 + POPJ P, + SETOM DISOFF + SETOM DISUSR + CLEARM CDSOFF + CONO DIS,100 + POPJ P, + +ALTPOP: SETOM LTPOPO ;OPER 21 + MOVEI B,(J) + HRLI B,LLTPSN + BLT B,3(J) + CAME U,DISUSR + JRST ALTPP2 + SETZB A,LTPCNT + MOVEM A,LTPCY + MOVEM A,LTPCX +ALTPP2: SETZM LTPOPO + POPJ P, + +VIDCLS: SETOM VIDUSR + SETOM DISUSR + POPJ P, + +VIDI: CONO PI,CLKOFF + CAMN U,VIDUSR + JRST VID1A + SKIPL DISUSR + JRST CLKONJ +VID1A: CLEARM DISUSR + MOVEM U,VIDUSR + SETOM DISOFF + CONO PI,CLKON + CONO DIS,100 + DATAO DIS,[20117] + MOVEI A,VIDOPN + MOVEM A,(R) + JRST POPJ1 + +VIDIOT: CONO VID,10 + DATAO DIS,(C) + MOVEI A,1000. + CONSO VID,10 + SOJG A,.-1 + JUMPE A,VIDIB + DATAI VID,(C) + POPJ P, + +VIDIB: SETOM (C) + POPJ P, +VIDUSR: -1 + +UIMRQ: MOVE A,IOBFC + CAIGE A,8 + POPJ P, ;NOT ENOUGH ROOM IM IOBFT +IOMQ: +IMEMRQ: SKIPGE MEMFRZ + POPJ P, ;MEMORY FROZE + MOVEI A,0 + PUSH P,B + PUSH P,E +IMRQ2: LDB A,[MLO,,MEMBLT(A) + CAIE A,377 + JRST IMRQ3 + CLEARM MEMDSP +MPOUT1: +IMRQR: POP P,E +POPBJ: POP P,B + POPJ P, + +IMRQ3: LDB B,[420200,,MEMBLT(A) + JUMPN B,IMRQ2 + AOS -2(P) + JRST IMRQ4 + +IMEMR: PUSH P,B + LDB B,[MLO,,MEMFP + DPB B,[MLO,,MEMBLT(A) + DPB A,[MLU,,MEMBLT(B) + MOVEI B,0 + DPB B,[MLU,,MEMBLT(A) + MOVEI B,75 + DPB B,[MUR,,MEMBLT(A) + DPB A,[MLO,,MEMFP + AOS MEMFR + JRST POPBJ + +MEMR: CONO PI,UTCOFF + PUSHJ P,IMEMR + CONO PI,UTCON + POPJ P, + +MPOUT: PUSH P,B + PUSH P,E +IMRQ4: LDB B,[MLU,,MEMBLT(A) + LDB E,[MLO,,MEMBLT(A) + CAIE B,377 + DPB E,[MLO,,MEMBLT(B) + CAIE E,377 + DPB B,[MLU,,MEMBLT(E) + SOS MEMFR + MOVEI B,74 ;IN PROCESS + DPB B,[MUR,,MEMBLT(A) + JRST MPOUT1 + +TCALL: CONO PI,UTCOFF + PUSHJ P,@(P) + SKIPA + AOS (P) + CONO PI,UTCON + JRST POPJ1 + +;MEMORY ALLOCATION TABLES + +IOBFT: REPEAT MXIOB-1,176000,,.RPCNT+1 ;MAX DYN ALLOC IO BUFFERS + 176000,,377 ;4.9 FREEZE + ;4.8 ALLOC INHIBIT +IOCH=340600 ;4.7-4.2 SYS CHN NO 77 => FREE +IOLC=241000 ;4.1 3.3 LINK TO NEXT SEQ BUF IN CORE (W/IN 1K BLK) +IOLO==1000 ; LINK TO FOLLOWING BUFFER OR + ;SPECIAL STATES LINK OUT + ;-1 LAST BUFFER CURRENTLY FILLED + ;-2 END OF FILE + ;-3 BUFFER ACTIVE AT MAIN PROG LEVEL + ;-4 BUFFER ACTIVE AT PI LEVEL +;IF CHN IS NUTIC+NUTOC (UTAPE FILE DIR) THEN IOLO IS TAPE NO + +IOSA=101400 ; BUFFER SA _-6 + + +IOBFP: 0 ;FREE STG TO IOBFT ENT +IOBFC: MXIOB-8 ;CNT OF AVAIL + ;LEAVE 8 AVAIL SO CORE HACKER CAN NOT RUN OUT + + +IOBCNS: MOVEI A,IOBFP-IOBFT +IOBC1: MOVE E,A + LDB A,[IOLO,,IOBFT(A) + CAIN A,377 + JRST 4,. ;IOBFT POINTERS FOULED UP + +IOBC2: LDB B,[420200,,IOBFT(A) + JUMPN B,IOBC1 + LDB B,[IOLO,,IOBFT(A) + DPB B,[IOLO,,IOBFT(E) + SOS IOBFC + POPJ P, + +MEMFP: +MEMBLT: 37400,,377_8+1 ;POINTER ONLY BLK DOES NOT EXIST + REPEAT MX1KB-1-1,36400,,<.RPCNT>_8.+.RPCNT+2 + 36400,,_8+377 +;4.9 FREEZE +;4.8 ALLOC INHIBIT +MUR=320600 ;USER OR 77 EXEC, 76 IOBUF, 75 FREE, 74 IN PROCESS + +MLO==1000 ;LINK DOWN +;IOBFT LINK FIRST BUFFER IN AREA (MUR=76) +MLU=101000 ;LINK UP + +;SYS MEM ALLOC VARIABLES +MEMFR: MX1KB-1 +MEMDSP: 0 ;-1 TRY HARD TO GET MEMORY 0 LOOK AROUND +UMEMT: 0 ;TOTAL MEMORY FOR USER PROGS (IN CORE) +MEMFRZ: 0 ;-1 MEMORY FROZE + + +;SYS CHANNEL ASSIGN +; 77=>FREE +; 0 - NUTIC+NUTOC-1 => UTAPE CHNL +;NUTIC+NUTOC =>UTAPE FILE DIR + SUBTTL NULL DEVICE + +NULO: JUMPL D,NULOO + MOVEI A,NLBIDN + TLNN D,1 + MOVEI A,NLIDN +BCHR: MOVEM A,(R) + JRST RSKP +NULOO: MOVEI A,NLODN + TLNE D,1 + MOVEI A,NLBDN + JRST BCHR + +NULI: CLEARM (C) + POPJ P, + +NULOD: POPJ P, + +NULBI: MOVE A,RMEMT(U) + MOVE D,(C) + CAIL A,(D) + CLEARM (D) + AOBJN D,.-2 + POPJ P, + +NULBOD: HLRE A,(C) + MOVNS A + ADD A,(C) + HRRZM A,(C) + POPJ P, + + +SUBTTL USER DEVICE ROUTINES + +USRO: MOVEI TT,0 + HRRZ E,SUPPRO(TT) + CAIN E,(U) + CAME A,UNAME(TT) + JRST AGIN + CAMN B,JNAME(TT) + JRST UFN1 +AGIN: ADDI TT,LUBLK + CAMGE TT,USRHI + JRST USRO+1 +USTRTO: PUSH P,U +TCORS: CAME A,UNAME(U) ;INFERIOR PROCEDURE MUST HAVE + JRST POPAJ + CONO PI,CLKOFF + MOVSI T,600000 ;DOESN'T HAVE TTY + PUSHJ P,USTRA ;MUST HAVE U IN -1(P) + JRST TCORS1 + MOVEM A,UNAME(U) + MOVEM B,JNAME(U) + CONO PI,CLKON + MOVE TT,U + POP P,U + CLEARB A,T +ULUP: HRRZ E,SUPPRO(T) + CAIN E,(U) + IOR A,SUPPRO(T) + ADDI T,LUBLK + CAMGE T,USRHI + JRST ULUP + +UFIN: MOVEI B,1 + TLON A,(B) + JRST SETBIT + LSH B,1 + CAIG B,1_ + JRST UFIN+1 +NOGO1: CLEARM UNAME(TT) + POPJ P, + +UFN1: MOVE U,TT + JRST UFOUND + +TCORS1: SKIPE SUPCOR + PUSHJ P,UFLS + JRST TCORS + + + +NOGO: EXCH TT,U + JRST NOGO1 + +SETBIT: HRLZ B,B + HRR B,U + MOVEM B,SUPPRO(TT) + EXCH TT,U + MOVEI B,1 + PUSHJ P,ACORE + JRST NOGO + ;FALLS THRU + +UFOUND: HLRZS C + TRNE C,777774 + JRST ILUUO + HRLZ D,U + MOVE U,USER + XCT INFINT(C) + MOVEM D,(R) + JRST RSKP + +INFINT: HRRI D,UWIDN + HRRI D,UWODN + HRRI D,UBIDN + HRRI D,UBODN + + +ULOSE: MOVE U,A +UWIERR: MOVEI T,ILLUAD + JRST UUOERR + + + +UMEMEX: PUSH P,B + PUSH P,Q + MOVE U,A + HLRZ B,UPR(U) + LSH B,-10. + ADDI B,2 +TRYOVR: PUSHJ P,ACORE + JRST ULOSE + CAML D,MEMTOP(U) + AOJA B,TRYOVR + MOVE U,USER + POP P,Q + JRST POPBJ + + +UWO: HRRO Q,(C) + MOVEI C,Q + +UBO: PUSHJ P,SUSTPR + HLRO D,(C) + MOVNS B,D + ADD D,UOLOOK(A) + MOVE R,D + CAMLE D,RMEMT(A) + PUSHJ P,UMEMEX + ADDI D,@UPR(A) + MOVE E,(C) + ADDI B,(E) + MOVEM B,(C) + CAMLE B,RMEMT(U) + JRST IOADC + ADDI E,@UPR(U) + MOVE C,UOLOOK(A) + ADDI C,@UPR(A) + HRL C,E + MOVEM R,UOLOOK(A) +UBO2: HRRZ Q,C + SUBI Q,@UPR(A) + CAIGE Q,20 + JRST UBO3 + BLT C,-1(D) + JRST UBO1 + + +UWI: HRRO Q,(C) + MOVEI C,Q + +UBI: PUSHJ P,SUSTPR + HLRO D,(C) + MOVNS B,D + ADD B,(C) + CAMLE B,RMEMT(U) + JRST IOADC + HRRZM B,(C) + ADDI B,@UPR(U) + HRRZ C,UILOOK(A) + ADDI C,(D) + CAMLE C,RMEMT(A) + JRST UWIERR + HRRZM C,UILOOK(A) + SUBI C,(D) + ADDI C,@UPR(A) + SUBM B,D + HRL C,D + MOVSS C +UBI2: HLRZ Q,C + SUBI Q,@UPR(A) + CAIGE Q,20 + JRST UBI3 + BLT C,-1(B) +UBO1: MOVSI B,BEXC + ANDCAM B,USTP(A) + POPJ P, + + +SUSTP2: EXCH U,A +SUSTP1: CONO PI,CLKON + PUSHJ P,UDELAY +SUSTPR: CONO PI,CLKOFF + SKIPGE USTP(A) + JRST SUSTP1 + EXCH U,A + PUSHJ P,PCLSR + JRST SUSTP2 + EXCH U,A + MOVSI B,BEXC + IORM B,USTP(A) + CONO PI,CLKON + POPJ P, + +UBI3: ADDI Q,AC0S(A) + MOVE J,(Q) + MOVEM J,(C) + ADD C,[1,,1 + HRRZS B + CAIE B,(C) + JRST UBI2 + JRST UBO1 + +UBO3: ADDI Q,AC0S(A) + HLRZ E,C + MOVE J,(E) + MOVEM J,(Q) + ADD C,[1,,1 + HRRZS D + CAIE D,(C) + JRST UBO2 + JRST UBO1 + LPTCLS: SETOM LPTUSR + SETOM LPTUSE + POPJ P, + +LPTO: CAMN U,LPTUSR + JRST LPTO1 + AOSE LPTUSE + POPJ P, + MOVEM U,LPTUSR +LPTO1: MOVEI A,LPTDN + MOVEM A,(R) + JRST RSKP + +PILPT1: SKIPA A,(C) +LPTS: MOVEI A,40 + PUSHJ P,LPTCHK + PUSHJ P,UFLS + JFCL +PILPT: PUSH P,A + CAIN A,11 + JRST LPTTAB + CAIE A,12 + CAIN A,14 + JRST LPC + SETOM PCL + CAIE A,15 + AOSA LINEPOS + CLEARM LINEPOS +LPC1: SUBI A,40 + SKIPG LPTCC + JRST .-1 + IDPB A,LPTIP + HRRZ A,LPTIP + CAIN A,LPTBE-1 + MOVEI A,LPTBO + HRRM A,LPTIP + SOS LPTCC + CONSO LPT,7 + CONO LPT,LPTCHN +LPTRET: POP P,A + POPJ P, + + + +LPTCHK: MOVE T,LPTCC + CAIG T,130. + POPJ P, + CAIG T,300. + AOS (P) + JRST POPJ1 + +LPTTAB: PUSHJ P,LPTS + LDB A,[300,,LINEPOS + JUMPN A,.-2 + JRST LPTRET + + +LPC: PUSH P,LINEPOS + MOVEI A,15 + AOSN PCL + SKIPE LINEPOS + PUSHJ P,PILPT + SOSGE (P) + JRST LPC2 + PUSHJ P,LPTS + JRST .-3 + +LPC2: POP P,A + MOVE A,(P) + JRST LPC1 + +LPTCC: *5-5 +LINEPOS: 0 +PCL: 0 +LPTIP: 700,,LPTBO-1 +LPTOP: 700,,LPTBO-1 + + +LPTCN: CAIN A,<15-40>&177 + JRST LPTCR + CAIN A,<12-40>&177 + MOVEI A,400 + CAIN A,<14-40>&177 + MOVEI A,401 + JRST LPTCN1 + +LPTCR: CONO LPT,10+LPTCHN + JRST LPTCR1 + +LPENT1: MOVEM A,LPTA + MOVEI A,*5-5 + CAMG A,LPTCC + JRST LPTSTP + ILDB A,LPTOP + TRNE A,100 + JRST LPTCN +LPTCN1: DATAO LPT,A +LPTCR1: HRRZ A,LPTOP + CAIN A,LPTBE-1 + MOVEI A,LPTBO + HRRM A,LPTOP + AOSA LPTCC +LPTSTP: CONO LPT,0 + MOVE A,LPTA + JRST LPENT + +LPTBSZ=1000 +LPTBO: BLOCK LPTBSZ +LPTBE: + +LPTUSR: -1 +LPTUSE: -1 +LPTA: 0 + +SUBTTL TELETYPE ROUTINES + +TTYO1: SKIPGE I,TTYTBL(U) + JRST UDELAY + HRRZS I + CAIL I,NTTYS+NGEC + JRST UDELAY + TLOA I,400000 +TTYO: CAIGE I,NTTYS+NGEC + TRNE D,1 + JRST UDELAY ;NO BLOCK MODE + DPB I,[222100,,A] + SKIPGE I + TLO A,400000 + JUMPL D,TTYOO + HRRI A,TYIDN + MOVE B,[220200,,TTYSTS(I) +TTYO2: MOVEM A,(R) + LSH D,-1 + DPB D,B + JRST RSKP + +TTYOO: MOVE B,[240100,,TTYSTS(I) + HRRI A,TYODN + JRST TTYO2 + +TIBL==20 +TOBL==20 +NTTYS==5 +NGEC==4 +TYI: TRZN A,400000 + JRST .+3 + SKIPGE TTYTBL(U) + PUSHJ P,UFLS ;LOSER DOESNT HAVE TTY + MOVE T,TICC(A) + CAMGE T,TINTC(A) + PUSHJ P,UFLS + SKIPG TICC (A) + PUSHJ P,UFLS + MOVE B,TIOP(A) + CAMN B,TIBEP(A) + SUBI B,TIBL + HRRM B,TIOP(A) + ILDB B,TIOP(A) + SOS TICC(A) + CAIN B,^Z + JRST TYI +TYI1: MOVEM B,(C) + MOVE B,TTYSTS(A) + TLNE B,TTYDDT + CAIGE A,NTTYS + POPJ P, + +TYO: TRZN A,400000 + JRST .+3 + SKIPGE TTYTBL(U) + PUSHJ P,UFLS + CAIL A,NTTYS + JRST MGTYO + MOVEI T,TORM(A) + PUSHJ P,TYOF + PUSHJ P,UFLS + JFCL + MOVE B,(C) + IDPB B,TOIP(A) + SOS TORM(A) + EXCH B,TOIP(A) + CAMN B,TOBEP(A) + SUBI B,TOBL + EXCH B,TOIP(A) + AOSN TTYON(A) + CONO TTY,@TTYST(A) + POPJ P, + + +TYOF: SKIPG (T) ;DO NOT CHANGE TO T, + POPJ P, + MOVE T,(T) + CAIL T,TOBL*2 + AOS (P) + JRST POPJ1 + +TYICLS: ANDI A,377777 + CONO PI,UTCOFF + MOVE B,TIIP(A) + MOVEM B,TIOP(A) + CAIL A,NTTYS + JRST TYICL1 + CLEARM ECHOCC(A) + MOVEM B,ECHOP(A) +TYICL1: MOVEM B,TINTP(A) + CLEARM TICC(A) + CLEARM TINTC(A) + CONO PI,UTCON + POPJ P, + + + +TYOCLS: +TYOW: ANDI A,377777 + CAIL A,NTTYS + JRST GTYOW1 + MOVEI T,TOBS + CAME T,TORM(A) + PUSHJ P,UFLS + POPJ P, + +GTYOW1: SKIPE GDFRSC-NTTYS(A) + PUSHJ P,UFLS + POPJ P, + + +AITYI: SKIPL A,TTYTBL(U) + SKIPG TINTC(A) + POPJ P, + MOVE B,TINTP(A) + CAMN B,TIBEP(A) + SUBI B,TIBL + HRRM B,TINTP(A) + ILDB B,TINTP(A) + SOS TINTC(A) +AOPVS: AOS (P) + +AOPERV: MOVEM B,(J) + POPJ P, + + +ALISTEN: SKIPGE A,TTYTBL(U) + JRST ALIS1 + PUSHJ P,TYOW + MOVEI B,0 + CAIL A,NTTYS + JRST ALIS2 + SKIPA B,ECHOCC(A) +ALIS1: TDZA B,B +ALIS2: ADD B,TICC(A) + JRST AOPERV + + +MGTYO: SKIPGE BPGFW-NTTYS(A) + PUSHJ P,GTYOW1 + CLEARM BPGFW-NTTYS(A) ;PAGE WAIT + LDB B,[700,,(C) + CAIN B,14 + JRST MGTF + CAIN B,12 + POPJ P, + CAIN B,15 + JRST MGTYCR + CAIN B,11 + JRST MGTYT1 + CAIG B,176 + CAIGE B,175 + CAIN B,33 + MOVEI B,"$ + CAILE B,"_ + POPJ P, + CAIGE B,40 + JRST MGG1 +MGTCR1: AOS D,MGCC-NTTYS(A) + CAIL D,MCPL-1 + JRST MGTYO1 + PUSHJ P,MGTYOE +MGTYOR: CONSO GTYO,7 + CONO GTYO,200+GETYOC + POPJ P, + +MGTYOE: ORCBI B,177 + ROT B,-1 + TLNN B,400000 + TRZ B,100 + ILDB D,MGBP-NTTYS(A) + XOR D,B + TRNN D,177 + POPJ P, + DPB B,MGBP-NTTYS(A) + AOS @MGCDP-NTTYS(A) + AOS GDFRSC-NTTYS(A) + POPJ P, + + +MGTYCR: MOVEI B,40 + PUSHJ P,MGTCR1 + JRST .-2 + +MGTYO1: LDB B,[700,,(C) + CAIN B,15 + JRST MGTCR2 + MOVEI B,"] +MGTCR3: PUSHJ P,MGTYOE + MOVE D,MGCDP-NTTYS(A) + ADDI D,GSTGL+1 + CAMN D,GECBL-NTTYS+1(A) + JRST MGCR2 ;END OF PAGE + MOVE TT,TTYSTS(A) + TLNE TT,TTYIMI+TTYDDT ;SKIP ON NOT ECHOING. USE BOTTOM THREE LINES + JRST MGCR3 + CAMN D,GECBLE-NTTYS(A) + JRST MGCR2 +MGCR3: MOVEM D,MGCDP-NTTYS(A) + HRLI D,1000 + MOVEM D,MGBP-NTTYS(A) + CLEARM MGCC-NTTYS(A) + LDB B,[700,,(C) + CAIE B,15 + JRST MGTYO + PUSH P,MGBP-NTTYS(A) + PUSH P,MGCDP-NTTYS(A) + MOVE D,MGCDP-NTTYS(A) + ADDI D,GSTGL+1 + CAMN D,GECBL-NTTYS+1(A) + JRST MGCR4 + MOVE TT,TTYSTS(A) + TLNE TT,TTYIMI+TTYDDT ;NOT ECHOING + JRST .+3 + CAML D,GECBLE-NTTYS(A) +MGCR4: MOVE D,GECBL-NTTYS(A) + MOVEM D,MGCDP-NTTYS(A) + HRLI D,1000 + MOVEM D,MGBP-NTTYS(A) + MOVEI R,MCPL + MOVEI B,40 + PUSHJ P,MGTYOE + SOJG R,.-2 + POP P,MGCDP-NTTYS(A) + POP P,MGBP-NTTYS(A) + JRST MGTYOR + +MGCR2: SETOM BPGFW-NTTYS(A) +MGTF2: MOVE D,GECBL-NTTYS(A) + JRST MGCR3 + +MGTCR2: SUB P,[1,,1 + MOVEI B,40 + JRST MGTCR3 + + +MGTF: SETOM GFFF-NTTYS(A) + MOVSI D,-NLV + MOVE TT,GECBL-NTTYS(A) +MGTF1: CLEARM (TT) + MOVE Q,[336675573360 + MOVEM Q,1(TT) + HRLI J,1(TT) + HRRI J,2(TT) + BLT J,GSTGL(TT) + ADDI TT,GSTGL+1 + AOBJN D,MGTF1 + CLEARM GDFRSC-NTTYS(A) + MOVEI C,[15 + JRST MGTF2 + +MGG1: MOVEI B,"_ + PUSHJ P,MGTCR1 + LDB B,[700,,(C) + ADDI B,100 + JRST MGTCR1 + +MGTYT1: MOVEI B,40 + PUSHJ P,MGTCR1 + LDB B,[300,,MGCC-NTTYS(A) + JUMPN B,MGTYT1 + POPJ P, + +HGCBT: CONO 635550 ;DEBUGGING ONLY + MOVE P,USRPDL + CONO TTY,400000 + +HGCBTL: PUSHJ P,HTYI + CAIN A,"D + JRST 174000 + MOVEI T,-"0(A) + MOVE B,GECBL(T) + MOVEI C,0 +GCBTL1: ILDB A,B + JUMPE A,GCBTL2 + LSH A,1 + TRZE A,200 + TRO A,1 + XORI A,177 + CAIN A,40 + AOJA C,[AOJA C,GCBTL1 +GCBTL4: JUMPE C,GCBTL3 + PUSH P,A + MOVEI A,40 + PUSHJ P,HTYO + POP P,A + SOJA C,GCBTL4 +GCBTL3: PUSHJ P,HTYO + MOVE D,A + MOVEI A,"* + TRZN D,400 + MOVEI A,40 + PUSHJ P,HTYO + JRST GCBTL1 + +HTYI: CONSO TTY,40 + JRST .-1 + DATAI TTY,A + ANDI A,177 + +HTYO: CONSZ TTY,20 + JRST .-1 + DATAO TTY,A + CONSO TTY,40 + POPJ P, + JRST HGCBTL + +GCBTL2: HRRZS B + CAMN B,GECBL+1(T) + JRST HGCBTL + MOVEI C,0 + HRLI B,1000 + MOVEI A,15 + PUSHJ P,HTYO + MOVEI A,12 + PUSHJ P,HTYO + JRST GCBTL1 + +TTYBRK: 0 + CONSO DIS,77 + JRST LPENT + CONSZ DIS,7400 + JRST SRECYC +LPENT: CONSZ LPT,7 + CONSZ LPT,10 + SKIPA + JRST LPENT1 + MOVEM I,TTYI + MOVEM A,TTYA + MOVEM B,TTYB + CONSZ GTYI,10 + JRST GTYI1 ;FROM GE KLUDGE + MOVSI I,-NTTYS +TTYRET: CONO TTY,@TTYLT(I) + CONSO TTY,50 + AOBJN I,.-2 + JUMPL I,GOTTY +TTYRT1: MOVE I,TTYI + MOVE A,TTYA + MOVE B,TTYB + JRST 12,@TTYBRK +GOTTY: CONSZ TTY,10 + JRST TYP11 + CONSO TTY,40 + JRST TTYRET + DATAI TTY,A + ANDI A,177 + CAIN A,^Z + JSR ZFLAG +ZFLAG1: MOVE B,ECHOCC(I) + ADD B,TICC(I) + CAIL B,TIBS + JRST DING + IDPB A,TIIP(I) +PITEL2: MOVE A,TIIP(I) + CAMN A,TIBEP(I) + SUBI A,TIBL + HRRM A,TIIP(I) + MOVE B,TTYSTS(I) + AOJE B,PITEL4 ;NO USER HAS TTY + HRL B,MSKST-1(B) + TLNE B,BTINTE + JRST INTTY +PITEL4: CLEARM TINTC(I) + MOVEM A,TINTP(I) +PITEL3: AOSA ECHOCC(I) +DING: SETOM DINGF(I) + AOSN TTYON(I) + CONO TTY,10+TTYCHN + JRST TTYRET + + + +INTTY: AOS TINTC(I) + MOVEI A,TTYIF + IORM A,PIRQC-1(B) + JRST PITEL3 + +ZFLAG2: MOVEI A,BCNTRZI + IORM A,PIRQC-1(B) + SKIPGE SUPPRO-1(B) + JRST ZFLAG4 +ZFLAG3: MOVEI A,^Z + JRST @ZFLAG + +ZFLAG: 0 + MOVE B,TTYSTS(I) + AOJN B,ZFLAG2 ;NO USER HAS THIS TTY +FINDU4: SKIPL UTTYST + JRST TTYRET + HRRZM I,UTTYST + JRST ZFLAG3 + +ZFLAG4: MOVSI A,BUSRC + ANDCAM A,USTP-1(B) + JRST ZFLAG3 + +TYP11: AOSE TYOBFC(I) + JRST TYP1 + MOVEI A,TOBS + MOVEM A,TORM(I) + MOVE A,TIOP(I) + MOVEM A,TOOP(I) + +TYP1: HRRZ A,LCHAR(I) + AOSN LIF(I) + JRST TYP3 + MOVEI A,12 + HRRM A,LCHAR(I) + MOVEI A,7 + AOSN DINGF(I) + JRST TYP3 + MOVEI A,40 + AOSG SPCCC(I) + JRST TYP3 + MOVE A,TORM(I) + CAIL A,TOBS + JRST TYP4 + MOVE A,TOOP(I) + CAMN A,TOBEP(I) + SUBI A,TOBL + HRRM A,TOOP(I) + ILDB A,TOOP(I) + AOS TORM(I) + MOVE B,TTYSTS(I) +TYP7: TLNE B,TTYIMO + JRST TYPI +TYPCOM: CAIN A,177 + JRST TTYRET + CAIN A,175 + MOVEI A,"$ + CAIN A,15 +TYP6: SETOM LIF(I) + CAIN A,10 + JRST TYO1 + CAILE A,6 + CAIL A,16 + JRST TYO1 +TYP3: CAIE A,11 + JRST TYP31 + MOVE A,TICHRC(I) + IDIVI A,TABSPC + SUBI B,TABSPC +TYPCM2: MOVEM B,SPCCC(I) + JRST TTYRET + +TYPCM1: CAIE A,11 + JRST TYPCOM + MOVNI B,3 + JRST TYPCM2 + +TYP31: HLRZ B,LCHAR(I) + CAIN A,12 + CAME A,B + JRST .+2 + SOSE LIF(I) +TYPI: DATAO TTY,A + HRLM A,LCHAR(I) + CAIL A,140 + JRST TTYRET + CAIL A,40 + AOS TICHRC(I) + CAIN A,15 + CLEARM TICHRC(I) + JRST TTYRET +TYP4: SKIPLE ECHOCC(I) + JRST TYP4A +TYP5: CONO TTY,200+TTYCHN + SETOM TTYON(I) + JRST TTYRET +TYP4A: MOVE A,ECHOP(I) + CAMN A,TIBEP(I) + SUBI A,TIBL + HRRM A,ECHOP(I) + ILDB A,ECHOP(I) + SOS ECHOCC(I) + AOS TICC(I) + MOVE B,TTYSTS(I) + CAIG A,12 + CAIGE A,11 + CAIN A,15 + TLNN B,TTYDDT + TLNE B,TTYIMI + CAIN A,^Z + JRST TYPCM1 + JRST TTYRET + +TYO1: CAIL A,40 + JRST TYP3 + ADDI A,100 + HRRM A,LCHAR(I) + MOVEI A,"^ + JRST TYP6 + + NCT==NTTYS+NGEC +TABSPC==8 +DEFINE TBP NAM,IO,N +NAM: REPEAT N,(10700)T!IO!BO-1+.RPCNT*T!IO!BL +TERMIN +IRPS IO,,O O I I I I,NAM,,TOIP TOOP TIIP TIOP ECHOP TINTP,N,,NTTYS NTTYS NCT NCT NTTYS NCT +TBP NAM,IO,N +TERMIN +IRPS NAM,,LIF DINGF TICC SPCCC TICHRC ECHOCC LCHAR TINTC +NAM: REPEAT NCT,0 +TERMIN +IRPS IO,,I O,N,,NCT NTTYS +T!IO!BS=5*T!IO!BL +T!IO!BO: BLOCK T!IO!BL*N +T!IO!BEP: REPEAT N,(10700)T!IO!BO-1+T!IO!BL*<.RPCNT+1> +TERMIN +TTYON: REPEAT NTTYS,-1 +TORM: REPEAT NTTYS,TOBS +TYOBFC: REPEAT NTTYS,0 +TTYST: REPEAT NTTYS,.RPCNT_12.+500010+TTYCHN +TTYLT: REPEAT 5,.RPCNT_12.+500000+TTYCHN +TERMIN +IRPS AC,,A B I +TTY!AC: 0 +TERMIN + + +TTYSTS: REPEAT NCT,-1 +;-1 NO USER +;RH USER NO +;LH 3.1 (IMAGE) 3.2 (DDT) TYPEING MODE 3.3 (IMAGE) TYPOUT MODE + +MCPL==46. ;MAX CHAR/LINE +NLV==26. ;NO VERTICAL LINES +NCML==3 ;NO COMMAND LINES +NNCML==NLV-NCML ;NO NON COMMAND LINES +GSTGL==MCPL/4+1 ;REG STORAGE /LINE + +GTYI1: DATAI GTYI,A + HLRZ I,A + MOVE I,GTYIT1(I) ;UNSCRAMBLE OFFSET + ANDI A,177 + CAIN A,^Z + JSR ZFLAG + EXCH P,GTYIPP + MOVE B,TICC(I) + CAIL B,TIBS + JRST GDING + IDPB A,TIIP(I) + MOVEM A,GTYIT2 + MOVE A,TIIP(I) + CAMN A,TIBEP(I) + SUBI A,TIBL + HRRM A,TIIP(I) + AOS TICC(I) + MOVE B,TTYSTS(I) + AOJE B,GTYI4 ;NO USER + HRL B,MSKST-1(B) + TLNE B,BTINTE + JRST GINTTY + +GTYI4: CLEARM TINTC(I) + MOVEM A,TINTP(I) +GTYI7: MOVE B,TTYSTS(I) + TLNE B,TTYIMI+TTYDDT + JRST GTYI6C ;NO ECHO + MOVE A,GTYIT2 + CAIN A,175 + MOVEI A,"$ + CAIN A,12 + JRST GTYI6C + CAIN A,15 + JRST GTYI6 +GTYI6B: CAILE A,"_ + JRST GTYI6C + CAIN A,11 + JRST GTYT1 + CAIGE A,40 + JRST GTYIG1 + PUSHJ P,GTYIS + JRST GTYI6 ;SWITCH LINES +GTYI6C: EXCH P,GTYIPP + JRST TTYRT1 + +GTYIPP: -10,,GTYIPD-1 +GTYIPD: BLOCK 10 + + + +GTYIS: AOS B,CEHOP-NTTYS(I) + CAIGE B,MCPL + AOSA (P) + MOVEI A,"] +GTYIS1: ORCBI A,177 + ROT A,-1 + TLNN A,400000 + TRZ A,100 + ILDB B,GCMPR-NTTYS(I) + XOR B,A + TRNN B,177 + POPJ P, + DPB A,GCMPR-NTTYS(I) + AOS @GTYILD-NTTYS(I) + AOS GDFRSC-NTTYS(I) + CONSO GTYO,7 + CONO GTYO,200+GETYOC + POPJ P, + +GTYIG1: MOVEI A,"_ + PUSHJ P,GTYIS + JRST GTYI6 + MOVE A,GTYIT2 + ADDI A,100 + PUSHJ P,GTYIS + JRST GTYI6 + JRST GTYI6C + +GTYT1: MOVEI A,40 + PUSHJ P,GTYIS + JRST GTYI6 + LDB A,[300,,CEHOP-NTTYS(I) + JUMPN A,GTYT1 + JRST GTYI6C + +GINTTY: AOS TINTC(I) + MOVEI A,TTYIF + IORM A,PIRQC-1(B) + JRST GTYI7 + +GTYI6: MOVEI A,40 ;CR OR LINE OVERFLOW + AOS B,CEHOP-NTTYS(I) + CAILE B,MCPL + JRST GTYI6A + PUSHJ P,GTYIS1 + JRST GTYI6 + + +GTYI6A: AOS B,GCMLC-NTTYS(I) + CAIL B,NCML + CLEARB B,GCMLC-NTTYS(I) + IMULI B,GSTGL+1 + ADD B,GECBL-NTTYS(I) + ADDI B,*NNCML + CLEARM CEHOP-NTTYS(I) + MOVEM B,GTYILD-NTTYS(I) + ADD B,[441000,,] + MOVEM B,GCMPR-NTTYS(I) + MOVE A,GTYIT2 + CAIE A,15 + JRST GTYI6B + PUSH P,GCMPR-NTTYS(I) + PUSH P,[MCPL] + MOVEI A,40 + PUSHJ P,GTYIS1 + SOSLE (P) + JRST .-3 + SUB P,[1,,1 + POP P,GCMPR-NTTYS(I) + JRST GTYI6C + + +GDING: MOVEI A,"? + MOVEM A,GTYIT2 + JRST GTYI7 + + +MXML==100. +GRLF==67 +GLR==71 +GFS==166 +GRS==173 +GPR==165 +GLF==172 +GETX==76 +GFF==171 +IGCK==2 ;GE CKSM FOR SOM AND STX + +GTYOBK: 0 + MOVEM I,GTYOI + MOVEM A,GTYOA + MOVEM B,GTYOB + AOS I,GTYOCN ;CONSOLE SERVICE ROUND ROBIN + CAIL I,NGEC + CLEARB I,GTYOCN +GTYOBR: AOSE B,GFFF(I) + SKIPE GDFRSC(I) + JRST GTYO1 + AOS I + CAIL I,NGEC + MOVEI I,0 + CAME I,GTYOCN + JRST GTYOBR + CONO GTYO,200 ;ALL CONSOLES CURRENT + MOVE A,40+2*GETYOC+1 + MOVEM A,40+2*GETYOC +GTYOR1: MOVEM I,GTYOCN + MOVE B,GTYOB + MOVE A,GTYOA + MOVE I,GTYOI + JRST 12,@GTYOBK + +GTYO1: JUMPE B,GTYO3A ;FF + MOVE A,TTYSTS+NTTYS(I) + TLNE A,TTYIMO + JRST GTYO4A ;NOT IN COMMAND MODE NO PRIORITY TO CAMMAND LINES + MOVE B,GECBL(I) + SKIPN NNCML*(B) + SKIPE *(B) + JRST GTYO2 + SKIPE *(B) + JRST GTYO2 +GTYO4A: MOVE B,CPLNO(I) ;NO COMMAND LINES DIFFER CHECK REG LINES +GTYO4: SKIPE(B) + JRST GTYO3 + ADDI B,GSTGL+1 + CAMN B,GECBL+1(I) + MOVE B,GECBL(I) + CAME B,CPLNO(I) + JRST GTYO4 + CLEARM GDFRSC(I) + JRST GTYOBR ;UNABLE TO FIND CHRS WHICH DIFFER + + +GTYO3: MOVEM B,CPLNO(I) + HRLI B,1000 + MOVEM B,GTYOT5 + CLEARM GTYOT1 ;LINE POSITION +GTYO3A: MOVNI A,MXML ;MAX LENGTH MESSAGE + MOVEM A,MECC ;COUNT + MOVEI A,GTYOBF+1 + MOVEM A,GTYOBP + CLEARM GTYOCK + MOVE A,GTYOST(I) + JSR GTYOBE ;SET UP SELECTION + MOVEI A,177 + JSR GTYOBE + MOVEI A,176 + JSR GTYOBE + SKIPN GFFF(I) + JRST GTYOFF + +GTYO5: AOS A,GTYOT1 + CAILE A,MCPL + JRST GTYO6A ;CANT FIND CHR THAT DIFFERS + MOVEM B,GTYOT2 + ILDB A,B + TRZN A,200 + JRST GTYO5 + SOS GTYOT1 + HRRZ A,B ;FOUND DIRRERENCE POSITION POINTER TO LINE + SUB A,GECBL(I) + IDIVI A,GSTGL+1 + MOVEM A,GTYOT3 + +GTYO6: MOVE A,GTYOT3 + SUB A,CENPLV(I) + JUMPE A,GTYO7 + JUMPG A,GTYO8 ;ONLY ALTERNATIVE IS TO LF DOWN + MOVNS A + CAMG A,GTYOT3 ;CHRS IF RFL UP + JRST GTYO8A + MOVEI A,GPR ;USE PAGE RET + CLEARM CENPLV(I) + CLEARM CENPLH(I) + JSR GTYOBE + JRST GTYO6 + + +GTYO2: ADDI B,NNCML* + MOVEM B,CPLNO(I) + JRST GTYO4 + +GTYO8A: MOVEM A,GTYOT4 +GTYO8B: MOVEI A,GRLF + SOS CENPLV(I) + JSR GTYOBE + SOSLE GTYOT4 + JRST GTYO8B + + + +GTYO7: MOVE A,GTYOT1 + SUB A,CENPLH(I) ;THERE VERTICALLY GET IT THERE HORIZ + JUMPE A,GTYO7F ;ITS THERE + JUMPG A,GTYO7A ;MUST SPACE OVER + MOVNS A + CAMG A,GTYOT1 + JRST GTYO7B ;BS BACK + MOVEI A,GLR + CLEARM CENPLH(I) + JSR GTYOBE + JRST GTYO7 + + +GTYO7A: MOVEM A,GTYOT4 +GTYO7C: MOVEI A,GFS + AOS CENPLH(I) + JSR GTYOBE + SOSLE GTYOT4 + JRST GTYO7C + JRST GTYO7F + +GTYO8: MOVEM A,GTYOT4 +GTYO8C: MOVEI A,GLF + AOS CENPLV(I) + JSR GTYOBE + SOSLE GTYOT4 + JRST GTYO8C + JRST GTYO7 + + +GTYO7B: MOVEM A,GTYOT4 +GTYO7D: MOVEI A,GRS + SOS CENPLH(I) + JSR GTYOBE + SOSLE GTYOT4 + JRST GTYO7D + +GTYO7F: MOVE A,GTYOT2 + MOVEM A,GTYOT7 +GTYO7H: ILDB A,GTYOT7 + TRZN A,200 + JRST GTYO5A + SOS @GTYOT5 ;REDUCE DIFFERES COUNT FOR LINE + SOS GDFRSC(I) ;REDUCE COUNT FOR CONSOLE + DPB A,GTYOT7 + AOS CENPLH(I) + JSR GTYOBE + MOVE A,CENPLH(I) + CAIGE A,MCPL + JRST GTYO7H + CLEARM CENPLH(I) + AOS A,CENPLV(I) + MOVEI B,GSTGL+1 + ADDB B,GTYOT5 +GTYO7G: HRLI B,1000 + MOVEM B,GTYOT2 + MOVEM B,GTYOT7 + CLEARM GTYOT1 + CAIGE A,NLV + JRST GTYO7H + CLEARB A,CENPLV(I) + MOVE B,GECBL(I) + MOVEM B,GTYOT5 + JRST GTYO7G + +GTYOFF: MOVEI A,GFF + JSR GTYOBE + CLEARM CENPLV(I) + CLEARM CENPLH(I) + JRST GTYO1A + + + +GTYO5A: MOVE B,GTYOT2 ;END OF DIFFERENCE + JRST GTYO5 + +GTYO6A: MOVEI A,GTYOBF+4 + CAME A,GTYOBP + JRST GTYO1A + CLEARM @GTYOT5 ;CANT FIND CAR POS WHERE THEY DIFFER + MOVE B,GTYOT5 + JRST GTYO4A + +GTYOBE: 0 + MOVEM A,@GTYOBP + AOS GTYOBP + EQVM A,GTYOCK + AOSG MECC + JRST @GTYOBE +GTYO1A: SETOM MECC + MOVEI A,GETX + JSR GTYOBE + SETCM A,GTYOCK + MOVEM A,@GTYOBP + MOVE A,GTYOBP + SUBI A,GTYOBF-1 + MOVNS A + HRLS A + HRRI A,GTYOBF-1 + MOVEM A,GTOBLP + MOVE A,[BLKO GTYO,GTOBLP + MOVEM A,40+2*GETYOC + JRST GTYOR1 + +;GE TYPOUT DATA STORAGE + +REPEAT NGEC,[ +CONC GED,\.RPCNT,: REPEAT NLV,[ + 0 ;NO CHRS THAT DIFFER IN THIS LINE + BLOCK GSTGL +] +] +GECBL: REPEAT NGEC, CONC GED,\.RPCNT, + GECBL ;END CHECK FOR LAST CONSOLE +GECBLE: REPEAT NGEC,[CONC NNCML*+GED,\.RPCNT + +] + +GCMPR: BLOCK NGEC ;BYTE POINTER FOR COMMAND ECHOING +GTYIT1: NTTYS + NTTYS+1 + NTTYS+3 + NTTYS+2 + +GTYILD: BLOCK NGEC ;DIFFERS COUNT POINTER FOR CURRENT TYPIN LINE +BPGFW: BLOCK NGEC ;PAGE WAIT FLAG FOR MAIN PRGM +CEHOP: BLOCK NGEC ;CHARACTER POSITION FOR COMMAND ECHOING +GLNDP: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR CURRENT COMMAND LINE +GDFRSC: BLOCK NGEC ;COUNT TOTAL CHRS DIFFERING FOR CONSOLE +GTYIT2: 0 ;TEMP FOR LAST CHR JUST RECD +GCMLC: BLOCK NGEC ;COMMAND LINE ON +CPLNO: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR LINE SENDER LAST LOOKED ON +CENPLV: BLOCK NGEC ;ENTRY MARKER POS VERTICAL +CENPLH: BLOCK NGEC ;ENTRY MARKER POS HORIZ +GTYOCK: 0 ;CHECKSOR +GTOBLP: 0 ;BLKO POINTER + +MGBP: BLOCK NGEC ;MAIN PRGM TYO BYTE POINTER +MGCDP: BLOCK NGEC ;POINTER TO DIFFERS COUNT FOR OUTPUT LINE +MGCC: BLOCK NGEC ;MAN PROG LINE POS +GFFF: BLOCK NGEC ;FORM FEED FLAG + + + +GTYOI: 0 +GTYOA: 0 +GTYOB: 0 +GTYOCN: 0 ;CONSOLE NEXT IN LINE +GTYOT1: 0 ;LINE POSITION +MECC: 0 ;CHRS REMAINING IN MESS ALLOWABLE + +GTYOBP: 0 ;OUTPUT BUFFER POINTER +GTYOBF: 77 ;SOH + 0 ;SELCT CODE + 177 ;SOM + 176 ;STX + BLOCK MXML+10 + +GTYOT2: 0 ;BUFFER POINTER WHERE THEY DIFFER +GTYOT3: 0 ;DESIRED LINE NO +GTYOT4: 0 +GTYOT5: 0 ;BUFFER POINTER TO BEG OF CURRENT LINE ALSO +GTYOT7: 0 + ;ADR POINTS TO DIFFERS COUNT + +GTYOST: 117 ;CONSOLE SELECTION TABLE CONVERSION + 113 + 107 + 103 + +GEKI: MOVSI I,-NGEC + CONO GTYO,200 +GEK1: MOVEI A,1 ;GET CONSOLES INTO HAPPY MODE + PUSHJ P,GEKO + CLEARM GEKICK + MOVEI A,140 + DPB I,[30200,,A + PUSHJ P,GEKO + MOVEI A,0 + PUSHJ P,GEKO + MOVEI A,2 + PUSHJ P,GEKO + MOVEI A,14 + PUSHJ P,GEKO + MOVEI A,3 + PUSHJ P,GEKO + MOVE A,GEKICK + PUSHJ P,GEKO + + MOVE A,GECBL(I) + MOVEM A,CPLNO(I) + MOVEM A,MGCDP(I) + HRLI A,1000 + MOVEM A,MGBP(I) + ADDI A,NNCML* + MOVEM A,GTYILD(I) + MOVEM A,GCMPR(I) + CLEARM CEHOP(I) + HRRZM A,GLNDP(I) + CLEARM GDFRSC(I) + CLEARM GCMLC(I) + CLEARM CENPLV(I) + CLEARM CENPLH(I) + CLEARM BPGFW(I) + CLEARM MGCC(I) + MOVE B,GECBL(I) +GEKI2: CLEARM (B) + MOVE C,[336675573360 + MOVEM C,1(B) + HRLI J,1(B) + HRRI J,2(B) + BLT J,GSTGL(B) + ADDI B,GSTGL+1 + CAME B,GECBL+1(I) + JRST GEKI2 + AOBJN I,GEK1 + DATAI GTYI,A + CONO GTYO,200+GETYOC + CONO GTYI,GETYIC + POPJ P, + + +GEKO: ORCBI A,177 + EQVM A,GEKICK + ROT A,-1 + TLNN A,400000 + TRZ A,100 + CONSO GTYO,100 + JRST .-1 + DATAO GTYO,A + POPJ P, + +GEKICK: 0 + BLKTNB: SKIPE 5(B) + XCT 5(B) ;BLOCK IO HANDLER +BLKTF: PUSHJ P,UFLS ; CALL JSP B,BLKT ;ADR OF PTR IN C + PUSHJ P,@2(B) ; UPPA(A) ;ADR OF AC BUF PTR 4.9 OUT + JRST BLKTF ;UTPPC(A) ;CNT REM IN CUR BF + ;UTRBUF NO SKIP NO MEMORY SKIP + ;OTHERWISE TT BUF ORG ;ADR TO GET NEXT BUF + HRRM TT,@(B) ;UTRLBF ;PUT BUF ON FREE STG + SKIPA TT,4(B) ;BUFSIZ ;SIZE OF BUFFER +BLKT: SKIPA E,(C) + MOVEM TT,@1(B) ;BFLIS(A) ;ADDR TO WAIT FOR BUF +BLKT1: SKIPL TT,(C) + POPJ P, + SKIPG D,@1(B) + JRST BLKTNB ;NEW BUFFER + HLRES TT + MOVNS TT + CAMLE TT,D + MOVE TT,D + HRRZ D,(C) + ADD D,TT + CAML D,RMEMT(U) ;PROTECTION ERR + JRST IOADC + HRRZ D,(C) + ADDI D,@UPR(U) + HRL D,@(B) + SKIPGE (B) + MOVSS D + ADDM TT,@(B) + MOVN J,TT + ADDM J,@1(B) + HRLS TT + ADDM TT,(C) + ADDI TT,(D) + BLT D,-1(TT) + SKIPN @1(B) + PUSHJ P,@3(B) + JRST BLKT1 + + +SUBTTL UTAPE SERVICE ROUTINE + +NUTIC==6 ;NUM UT IN CHNLS +NUTOC==6 ;NUM UT OUTPUT CHAN +UTBLKS==4 + +;UT CHANNEL STORAGE +;INPUT CHANNELS +UTCHNT: + +UTBFP: REPEAT NUTIC+NUTOC,400000,,377 ;L H BUFFER LINK PTR (INPUT PI) + ;RH " " OUTPUT MAIN PROG + +UTUSR: ;USER OR -1 IF FREE (LH) +UTUL: REPEAT NUTIC+NUTOC,-1 ;LINK TO CHANNEL ON SAME UTAPE OR -1(RH) +UTDIRP: BLOCK NUTIC+NUTOC ;BYTE POINTER TO UTDIR +UTDBC: BLOCK NUTIC+NUTOC ;RH BLCK COUNT CORRESP WITH UTDIRP + ;L H 3.1 3.5 READ FILE NO 4.9 ERROR 4.5 4.8 ERROR CNT + ;3.6 =0 FORD EXT =1 BACK EXT 3.7 4.2 PUT FILE NO + ;4.4 DELETE ON READ CLOSE + +UTBFS: BLOCK NUTIC+NUTOC ;BUFFERS IN USE +UTLSTM: BLOCK NUTIC+NUTOC ; TIME LAST BUF TAKEN BY PROG(RH) + ; MN PROG ACTIVE BFFR NO OR -1,IF NO BUFFER ACIVE (LH) +UTRAC: BLOCK NUTIC+NUTOC+1 ;ACTIVE BUFFER NO PI RH + ;FLAG TO MAIN PROG TP FULL (WRITE) RH + ;SIGN SET =>CHANNEL LOCKED + ;4.8 READ EOF REACHED AT PILEVEL OR CHNL CLOSED + ;EXTRA WORD FOR FILE DIR CHNL +UTN1=.-NUTIC+1 + BLOCK NUTOC +UTN2=.-NUTIC+1 + BLOCK NUTOC ;NAME OF FILE BEING WRITTEN +MPRP: BLOCK NUTIC+NUTOC ;MAIN PRGM BUFFER PNTR +MPRC: BLOCK NUTIC+NUTOC ;CNT REMAINING +UTTNO: BLOCK NUTOC+NUTIC ;TAPE NO (RH) + ;LH CLOSE FLAG WRITE ORG FILE NO READ + +UTLDD: BLOCK NUTIC+NUTOC+1 ;IF -1, DC IS ACTUALLY SET UP AND TRANSFER CAN + ;BE EXPECTED IN LESS TAH 100 MS. + ;IF D CHANNEL LOCKED FLAG(4.9 UTRAC) WELL BE CHECKED + ;BEFORE GOING TO THE -1 STATE + ;EXTRA WORD FOR DIR CHNL +;UTBFP RH OUTPUT LINK (PI) +; LH INPUT +;UTDBC BLOCK CNT + +UTFS: 377 ;FREE STG PNTR TO 200 WD BUFFERS +UTTLB: -NUTIC-NUTOC ;TOTAL BUFFERS ALLOCATED TO UTAPES +UTTBF: 0 ;TOTAL UT BUFFERS FREE +NUTCA: 0 ;NUMBER UTAPE CHANNELS ACTIVE + +UPCHFS: 0 ;FAIR SHARE BFS PER CHNL + + AUTDM: SKIPE B,(J) ;UT DISMT + CAILE B,NUNITS + POPJ P, + MOVSI C,-NUTIC-NUTOC + CONO PI,UTCOFF +AUTDM1: SKIPGE UTUSR(C) + JRST AUTDM2 + HRRZ D,UTTNO(C) + CAMN B,D + JRST UTCONJ ;SOME ON USING TAPE +AUTDM2: AOBJN C,AUTDM1 + CONO PI,UTCON + MOVSI C,(SETZ) + IORM C,UFLAPF(B) + JRST POPJ1 + +UTCONJ: CONO PI,UTCON + POPJ P, + +UTOF1: MOVSI TT,200000 + IORM TT,UFLAPF(I) ;RQEST ABORT OF FLAP + CONO PI,UTCON + SKIPGE UFLAPF(I) + PUSHJ P,UFLS ;HOPE FOR BEST + +UTO: JUMPE I,CPOPJ + CAILE I,NUNITS + POPJ P, + CONO PI,UTCOFF + SKIPGE UFLAPF(I) + JRST UTOF1 ;FLAPPING IN PROGRESS + SKIPGE TT,UDIRO(I) + TLNN TT,177777 + JRST UTO4 ;FILE DIR IN OR ON THE WAY + MOVEI TT,200000 + MOVEM TT,DCHNT(I) +UTO4: CONO PI,UTCON + +UTO6: PUSHJ P,LWAIT + SKIPGE UDIRO(I) + + +UTO5: MOVSI TT,400000 + IORM TT,UDIRO(I) ;LOCK DIRECTORY + CONO PI,UTCON + TRNE D,200000 + JRST UTDEL1 ;DELETE OR RENAME + JUMPL D,UTOW1 ;WRITE + PUSHJ P,UTLK3 ;MUST NOT CLOBBER TT + JUMPE B,UTO5A +UTOW2:UTO8: CONO PI,UTCON + MOVSI TT,-NUTIC + TLNE C,1 + MOVE TT,[-NUTOC,,NUTIC + SKIPL UTUSR(TT) + AOBJN TT,.-1 + JUMPG TT,NCA ;NO CHANNEL AVAILABLE + CONO PI,UTCOFF + SKIPL UTUSR(TT) + JRST UTO8 +UTO7: MOVEI J,DCHNT-UTUL(I) + JRST .+2 +UTO2: MOVE J,Q + HRRE Q,UTUL(J) + JUMPGE Q,UTO2 + + +UTO1: HRLOM U,UTUSR(TT) + HRRM TT,UTUL(J) + HRRZM I,UTTNO(TT) + CLEARM UTDBC(TT) + DPB A,[300500,,UTDBC(TT) + JUMPL D,UTOW3 + DPB A,[220500,,UTDBC(TT) +UTOW4: HRLM A,UTTNO(TT) + HRRZ J,UDIRO(I) + ADD J,[500,,23.*2-1 + MOVEM J,UTDIRP(TT) + MOVE J,[SETZ 377 + MOVEM J,UTBFP(TT) + CLEARM UTBFS(TT) + MOVE J,TIME + HRROM J,UTLSTM(TT) + HLLOS UTRAC(TT) + HRRZS UTRAC(TT) + CONO PI,UTCON + CLEARM MPRC(TT) + LDB Q,[220300,,C + MOVE Q,UTOT(Q) + AOS NUTCA + PUSHJ P,FSCMP + +UTO9: MOVSI E,400000 + ANDCAM E,UDIRO(I) ;RELEASE FILE DIR + HRRZS UTRAC(TT) + HRL Q,TT + MOVEM Q,(R) ;STORE CHANNEL WD + +RSKP: AOS UUOH + POPJ P, + +UTO5A: ANDCAM TT,UDIRO(I) + POPJ P, + +UTOW1: PUSH P,B + PUSH P,A + CLEARB A,B + PUSHJ P,UTLK3 + JUMPE B,FILDF ;FILE DIR FULL + JRST UTOW2 + +UTOW3: HRROM TT,1(B) ;RESERVE FILE NAME + POP P,UTN1(TT) + POP P,UTN2(TT) + MOVSI J,100000 + IORM J,UDIRO(I) ;SET FILE DIR MODIFYED + JRST UTOW4 + +UTOT: DNUACII ;ASCII UNITS INPUT + DNUACCO ;ASCII UNITS OUTPUT + DNUBKI ; " BLOCK INPUT + DNUBKO ; " BLOCK OUTPUT + DNUDTI ; WD INPUT + DNUDTO ; WD OUTPUT + DNUBKI ; BLOCK IN + DNUBKO ;BLOCK OUT + +UDATAI: HRROM C,I + MOVEI C,I + +UBLKI: JSP B,BLKT + MPRP(A) + MPRC(A) + UTBGB + UTBRB + 200 + SKIPG UTBFS(A) + + +UASCII: MOVEI B,UBLKI+1 + JRST CHRKT + +UASCCO: MOVEI B,UBLKO+1 +CHRKT: SOSGE @1(B) + JRST CHRKT1 ;GET NEW BUFFER + SKIPGE (B) + JRST CHRKT2 + ILDB D,@(B) + CAIN D,141 + JRST CHRKT3 + MOVEM D,(C) + POPJ P, + +CHRKT2: MOVE D,(C) + IDPB D,@(B) + POPJ P, + +CHRKT1: PUSHJ P,@3(B) + SKIPE 5(B) + XCT 5(B) + PUSHJ P,UFLS + PUSHJ P,@2(B) +CHRKT4: JRST .-2 + HRRM TT,@(B) + MOVEI E,440700 + HRLM E,@(B) + MOVE E,4(B) + IMULI E,5 + MOVEM E,@1(B) + JRST CHRKT + +CHRKT3: HRROI D,141 + MOVEM D,(C) + JRST UTICL + +UTOCLR: MOVSI Q,(SETZ) + IORM Q,UTTNO(A) + MOVEI C,[141 +UTOCR2: SKIPG MPRC(A) + JRST UTOCR3 + PUSHJ P,UASCCO + JRST UTOCR2 + +UTOCR3: PUSHJ P,UTBWW + JRST UTOCL2 + +UTBGB: LDB Q,[IOLO,,UTBFP(A) + CAIN Q,377 + JRST 4,. ;PNTRS OUT OF PHASE + CAIN Q,376 + JRST UTBG1 ;END OF FILE + SKIPGE IOBFT(Q) + POPJ P, + CONO PI,UTCOFF + LDB J,[IOLO,,IOBFT(Q) + HRRM J,UTBFP(A) + MOVEI TT,(SETZ) + CAIL J,376 + HRLM TT,UTBFP(A) + CONO PI,UTCON + SOS UTBFS(A) +UTBWG4: MOVE J,TIME + HRRM J,UTLSTM(A) + MOVEI J,-3 + DPB J,[IOLO,,IOBFT(Q) + LDB TT,[IOSA,,IOBFT(Q) + LSH TT,6 + HRLM Q,UTLSTM(A) + JRST POPJ1 + + +UDATAO: HRROM C,I + MOVEI C,I + +UBLKO: JSP B,BLKT + SETZ MPRP(A) + MPRC(A) + UTBWG + UTBWW + 200 + 0 + + +UTBWG: PUSH P,A + PUSH P,B + MOVE D,A + HRRZ Q,UTBFP(D) + CAIL Q,376 + JRST UTBWG1 ;NO BUFS NOW RELOAD + SKIPGE UTDBC(D) + JRST POPBAJ ;CHNL IN ERR + +UTBWG2: HRRZ J,UTBFS(D) + CAMG J,UPCHFS + JRST UTBWG1 +UTBWG3: PUSHJ P,TCALL + JRST UIMRQ + JRST POPBAJ + PUSHJ P,TCALL + JRST UTMGB + JRST UTBWG2 + + +UTBWG1: PUSHJ P,TCALL + JRST IUTCONS + JRST UTBWG3 + MOVE Q,A + POP P,B + POP P,A + AOS UTBFS(A) + JRST UTBWG4 + + +POPBAJ: POP P,B + JRST POPAJ + +UTBWW: HLRE Q,UTLSTM(A) + JUMPL Q,CPOPJ + MOVEI J,377 + IORM J,IOBFT(Q) + SKIPGE UTTNO(A) + SOS IOBFT(Q) ;CHANGE TO EOF + CONO PI,UTCOFF + HLRE J,UTBFP(A) + JUMPL J,UTBWW1 + DPB Q,[IOLO,,IOBFT(J) + +UTBWW2: HRLM Q,UTBFP(A) + CONO PI,UTCON + HRROS UTLSTM(A) + POPJ P, + +UTBWW1: HRRM Q,UTBFP(A) + JRST UTBWW2 + +UDLOCK: HRRZ C,UTTNO(D) + PUSHJ P,LWAIT + SKIPGE UDIRO(C) + MOVSI A,(SETZ) + IORM A,UDIRO(C) + CONO PI,UTCON + POPJ P, + + +UTOCL: MOVSI Q,(SETZ) + IORM Q,UTTNO(A) +UTOCL1: HRROI I,0 + SKIPG MPRC(A) + JRST UTOCL2 + PUSHJ P,UDATAO+1 + JRST UTOCL1 + + + +UTOCL2: MOVE D,A + SKIPE UTBFS(D) + PUSHJ P,UFLS + PUSHJ P,UDLOCK + HRRZ C,UTTNO(D) + HRRZ Q,UTBFP(D) + CAIL Q,376 + JRST UTOCL4 ;NORMAL CLOSE + MOVEI Q,IOCERR ;ABORT WORKS + IORM Q,PIRQC(U) + MOVEI A,0 + HRROI B,(D) + PUSHJ P,UDELETE + PUSHJ P,UDULK + JRST UTOCL3 + +UTOCL4: MOVE A,UTN1(D) + MOVE B,UTN2(D) + PUSHJ P,UDELETE + LDB Q,[220500,,UTTNO(D)] + LSH Q,1 + ADD Q,UDIRO(C) + MOVE A,UTN1(D) + MOVE B,UTN2(D) + MOVEM A,-2(Q) + MOVEM B,-1(Q) + PUSHJ P,UDULK + JRST UTOCL3 + + +UTDEL1: MOVE C,I ;DELETE + HRRZ R,40 + ADDI R,@UPR(U) + SKIPE 3(R) + JRST UTRN1 ;RENAME + PUSHJ P,UDELETE + PUSHJ P,UDULK + JUMPN B,CPOPJ + JRST POPJ1 + +UTRN1: PUSHJ P,UTLOOK + JUMPE B,CPOPJ + PUSH P,Q + MOVE A,3(R) + MOVE B,4(R) + PUSHJ P,UTLOOK + POP P,Q + JUMPE B,UDULK + MOVE A,3(R) + MOVE B,4(R) + MOVEM A,1(Q) + MOVEM B,2(Q) + MOVSI A,100000 + IORM A,UDIRO(C) +UTRN2: PUSHJ P,UDULK + JRST POPJ1 + +UDELETE: PUSHJ P,UTLOOK + JUMPE B,CPOPJ ;TAPE NO IN C,FILE NAME IN A,B + MOVEI E,NUTIC-1 +UDELE4: HRRZ J,UTTNO(E) + SKIPL UTUSR(E) + CAME J,C + JRST UDELE3 + HLRZ J,UTTNO(E) + CAME J,A + JRST UDELE3 + LDB J,[360100,,UTDBC(E) + JUMPN J,UDELE3 + MOVSI J,10000 + IORM J,UTDBC(E) + CLEARM (Q) + SETOM 1(Q) + POPJ P, + +UDELE3: SOJGE E,UDELE4 +UDELE1: CLEARM (Q) + CLEARM 1(Q) + MOVSI J,100000 + IORM J,UDIRO(C) +UDELE6: HRRZ B,UDIRO(C) + ADD B,[500,,23.*2-1 + MOVEI J,0 +UDELE2: ILDB E,B + CAMN E,A + DPB J,B + CAIE E,37 + JRST UDELE2 + MOVE B,A + MOVEI A,0 + JRST UDELETE + + +UTBG1: POP P,D + HRRZS D + CAIN D,CHRKT4 + JRST CHRKT3 + CAME E,(C) + POPJ P, + CLEARM (R) +UTICL: +UTICL1: MOVE D,A + MOVSI C,200000 + IORM C,UTRAC(D) ;SET EOF + MOVEI T,400000 + TDNN T,UTRAC(D) + PUSHJ P,UFLS ;WAIT FOR ACTIVE BUFFER TO TRANSFER + PUSHJ P,UTBRB1 ;RETURN ACTIVE BUFFER MAIN PROG + HLRZ A,UTTNO(D) + MOVE B,UTDBC(D) + TLNE B,10000 + PUSHJ P,UDELE5 ;FINISH FILE DELETE + MOVSI C,200000 + IORM C,UTRAC(D) + MOVEI T,400000 + TDNN T,UTRAC(D) + PUSHJ P,UFLS + PUSHJ P,UTBRB1 ;RETURN ACTIVE BUFFER MAIN PROG +UTOCL3: HRRZ A,UTBFP(D) +UTICL2: CAIL A,376 + JRST UTICL3 + LDB C,[IOLO,,IOBFT(A) + PUSHJ P,BRTN + MOVE A,C + JRST UTICL2 + + +UTICL3: PUSHJ P,UCPAT0 ;UT CHANNEL PATCH OUT + CLEARM UTDIRP(D) + SETOM UTUSR(D) + POPJ P, + + + +UCPAT0: HRRZ B,UTTNO(D) ;PATCH OUT CHANNEL + MOVEI C,DCHNT-UTUL(B) + CONO PI,UTCOFF +UCPAT2: HRRE E,UTUL(C) + JUMPL E,UTCOP + CAMN E,D + JRST UCPAT1 + MOVE C,E + JRST UCPAT2 + +UCPAT1: HRRZ E,UTUL(E) + HRRM E,UTUL(C) + SOS NUTCA +UTCOP: CONO PI,UTCON + POPJ P, + +UDELE5: PUSHJ P,UDLOCK + HLRZ Q,UTTNO(D) + LSH Q,1 + ADD Q,UDIRO(C) + SUBI Q,2 + PUSHJ P,UDELE1 +UDULK: MOVSI A,(SETZ) + ANDCAM A,UDIRO(C) + POPJ P, + +UTBRB1: MOVE A,D +UTBRB: PUSH P,A + HLRE A,UTLSTM(A) + JUMPL A,POPAJ + PUSHJ P,BRTN + POP P,A + HRROS UTLSTM(A) + POPJ P, + +IUTCONS: +IUTCO1: SKIPG UTTBF + JRST IUTC1 + MOVEI E,UTFS-IOBFT + MOVE A,UTFS ;CHNL NO IN D +IUTC3: CAIN A,377 + JRST IUTC1 + LDB B,[420200,,IOBFT(A) + JUMPN B,IUTC2 + LDB B,[IOLO,,IOBFT(A) + DPB B,[IOLO,,IOBFT(E) + DPB D,[IOCH,,IOBFT(A) + SOS UTTBF + AOS (P) + POPJ P, + +IUTC2: MOVE E,A + LDB A,[IOLO,,IOBFT(A) + JRST IUTC3 + +IUTC1: PUSHJ P,UIMRQ + POPJ P, + PUSHJ P,UTMGB + JRST IUTCO1 + +IBRTN: PUSH P,B + MOVE B,UTFS + DPB B,[IOLO,,IOBFT(A) + MOVEM A,UTFS + MOVEI B,77 + DPB B,[IOCH,,IOBFT(A) + AOS UTTBF + JRST POPBJ + + + +UTMGB: MOVEI B,76 ;GOBBLE MEM BLK IN A FOR UTAPE BUFFER + DPB B,[MUR,,MEMBLT(A) + MOVE J,A + LSH A,10.-6. ;CONV TO BUF SA + MOVE TT,A ;INCR TO NEXT BUF ADR + MOVEI R,8 + ADDM R,UTTLB ;UTTBF AOSED AT IBRTN + MOVNI Q,1 +UTMG1: PUSHJ P,IOBCNS + DPB TT,[IOSA,,IOBFT(A) + JUMPL Q,UTMG2 + DPB A,[IOLC,,IOBFT(Q) +UTMG3: MOVE Q,A + PUSHJ P,IBRTN + ADDI TT,2 + SOJG R,UTMG1 + MOVEI TT,377 + DPB TT,[IOLC,,IOBFT(A) +FSCMP: MOVE A,UTTLB + IDIV A,NUTCA + MOVEM A,UPCHFS + POPJ P, + + +BRTN: CONO PI,UTCOFF + PUSHJ P,IBRTN + CONO PI,UTCON + POPJ P, + +UTMG2: DPB A,[MLO,,MEMBLT(J) + JRST UTMG3 + +UTRL1: JUMPE B,UTRLDR + HRRZ B,UTBFP(D) + CAIE B,377 + JRST JDB6C +UTRLDR: LDB R,[270100,,UTDBC(D) + JUMPN R,UTRLD1 + SKIPGE UDIRO(C) ;SPECIAL KLUDGE TO RUN FAST + JRST UTRLD1 + LDB TT,[220500,,UTDBC(D) + ILDB B,UTDIRP(D) + AOS UTDBC(D) + CAME B,TT + JRST UTRLD2 +UTRLD3: PUSHJ P,IUTCONS ;RTN BUFFER NO IN A + JRST UTRLR1 ;MEM LOCKED (OR SOMETHING) + CLEARM URDWR(C) + JRST UTRLD + +UTRLD2: CAIN B,37 + PUSHJ P,UAR + +UTRLD1: PUSHJ P,UDIRAD + JRST JDB6C2 ;DIR DOUBLE LOCKED + JRST UTREOF + JRST UTRLD3 + +JDDTA: SETOM DCFREE + HLRZ D,ULDCH(C) ;FINISHED DATA TRANS TAPE IN C GET CHNL NO + CLEARM UTLDD(D) + SETOM SMODE + CONSZ PI,DCCHNA + JRST UDATER + SETOM UGOAL(C) + + CAIL D,NUTIC + JRST JDDT1 ;WRITE + MOVE E,UTRAC(D) + HLLOS UTRAC(D) + MOVEI B,377 + IORM B,IOBFT(E) + HLRE B,UTBFP(D) + JUMPL B,JDDT5 + DPB E,[IOLO,,IOBFT(B) +JDDT6: HLRM E,UTBFP(D) + AOS UTBFS(D) + + +JDDT2: PUSHJ P,JDB6W + JRST JDDT3 ;SAME TAPE CAN RELOAD, DONT CHECK OTHERS +JDDT4: HRRZS ULDCH(C) + JRST JDB4A ;UNIT NOW IDLE STOP IT + +JDDT1: CAIL D,NUTIC+NUTOC + JRST UDRDD3 ;FILE DIR IN OR OUT + HRRZ A,UTRAC(D) + PUSHJ P,IBRTN + HLLOS UTRAC(D) + SOS UTBFS(D) + JRST JDDT2 + + +JDDT5: HRRM E,UTBFP(D) + JRST JDDT6 + UTREOF: MOVSI E,200000 + IORM E,UTRAC(D) + HLRE E,UTBFP(D) + SKIPL E + SOSA IOBFT(E) ;TURN END OF LIST TO END OF FILE + SOS UTBFP(D) + AOS UTBFS(D) ;TO START MAIN PROG + JRST JDB6C + +JDB6W: HRRE D,DCHNT(C) + JUMPL D,JDB6W1 ;NO CHANNELS ACTIVE + CAIN D,200000 + JRST UDRDD ;READ FILE DIR +JDB6C1: SKIPL E,UTRAC(D) + TLNE E,200000 + JRST JDB6C2 ;CHANNEL LOCKED + CAIL D,NUTIC + JRST JDB6A ;WRITE CHANNEL + HRRZ B,UTFS + CAIN B,377 + JRST JDB6E ;TRY TO GET MORE MEMORY + MOVE B,UTBFS(D) + SOJLE B,UTRL1 ;RELOAD CHANNEL WITH ONE OR NO BUFFERS + HRRZ B,UTLSTM(D) + SUB B,TIME + CAMG B,[-300. + JRST JDB6C2 ;NO RELOAD +JDB6F: HRRZ B,UTBFS(D) ;NUMBER BUFS THIS CHANNEL HAS + CAMGE B,UPCHFS + JRST UTRLDR +JDB6E: PUSHJ P,UIMRQ ;TRY TO GET MORE MEMORY (IO) + JRST JDB6C2 ;NOT AVAIL + PUSHJ P,UTMGB ;ADD TO MEM ALLOC UTAPE + JRST JDB6F + + +UTRLR1: PUSHJ P,UDIRR ;BACK UP + JRST 4,. + JRST 4,. ;LOSSAGE +JDB6C2: +JDB6C: HRRE D,UTUL(D) + JUMPGE D,JDB6C1 + JRST POPJ1 + +JDB6W1: LDB D,[410300,,UDIRO(C) + SOJN D,POPJ1 ;DIR CHNAGED AND NOT LOCKED + MOVEI D,100 ;INITIATE FILE DIR WRITE + SKIPL ULDCH(C) ;SKIPN ON ALREADY LOW PRIORITY POSIT + PUSHJ P,ILLP ;INITIATE LOW PRIOR POSIT + JRST POPJ1 + +ULLP1: SETOM URDWR(C) ;SET FILE DIR WRITE CYCLE FROM LOW PRIORITY CYCLE + MOVSI D,400000 ;LOCK DIR + IORM D,UDIRO(C) + MOVEI D,NUTIC+NUTOC + HRRZ A,ULDCH(C) ;BUFFER NO OF DIRECTORY + JRST JDB6W2 + + +JDB6A: HRRZ A,UTBFP(D) + CAIGE A,376 + SKIPGE IOBFT(A) + JRST JDB6C2 ;LOCKED OUT SNIFFLE + PUSHJ P,UDIRAD ;ADVANCE DIRECTORY POINTERS + JRST JDB6C2 ;DIRECTORY LOCKED + JRST UTPFUL ;TAPE FULL + SETOM URDWR(C) + HRRZ A,UTBFP(D) + LDB B,[IOLO,,IOBFT(A) + HRRM B,UTBFP(D) + MOVEI J,(SETZ) + CAIL B,376 + HRLM J,UTBFP(D) + +UTRLD: HRRZ B,UTDBC(D) ;BUFFER IN A + HRRM A,UTRAC(D) +UDRR2: MOVEM B,UGOAL(C) + MOVEI B,-4 + DPB B,[IOLO,,IOBFT(A) + LDB B,[IOSA,,IOBFT(A) + LSH B,6 + SOS B + HRRM B,UMEMAD(C) + HRLM D,ULDCH(C) + MOVE B,TIME + MOVEM B,DRTM(C) +CPOPJ: POPJ P, + + + + +JDB6: PUSHJ P,JDB6W + JRST JDBRK7 ;SUCCESFUL RELOAD + JRST JDBRK4 ;CAN NOT RELOAD + +UDRDD: MOVEI D,NUTIC+NUTOC + PUSHJ P,IUTCONS + JRST UDRDD1 ;NO MEM + LDB B,[IOSA,,IOBFT(A) + LSH B,6 + TLO B,600000 + MOVEM B,UDIRO(C) + HLLOS DCHNT(C) + CLEARM URDWR(C) + HRRM A,ULDCH(C) +JDB6W2: MOVEI B,100 + JRST UDRR2 + +UDRDD1: SETOM MEMDSP ;SCROUNGE SOME MEM + JRST POPJ1 + +UDRDD3: HRRZ D,ULDCH(C) ;FILE DIR IN OR OUT + HRRZS UDIRO(C) ;UNLOCK DIRECTORY + DPB C,[IOLO,,IOBFT(D) + HRRZS ULDCH(C) + JRST JDDT2 + UDIRAD: TDZA E,E ;ADVANCE {cropped} CHANNEL IN D +UDIRR: MOVEI E,1 ;REV DIR PNTRS THIS WINS FOR READS ONLY HA HA + SKIPGE B,UDIRO(C) + JRST UDOUT3 +UDOUT2: LDB R,[270100,,UTDBC(D) + XOR R,E + MOVEI Q,0 + CAIL D,NUTIC + MOVEI Q,UTBLKS + LDB TT,[220500,,UTDBC(D) + +UDIR1: PUSHJ P,ITAB(R) + TRNE J,-1 ;BLK NO RTN IN RH E + CAIN B,37 + JRST UDOUT ;END OF EXTENSION + CAME B,TT + SOJA Q,UDIR1 + SOJG Q,.-1 + LDB B,[300500,,UTDBC(D) + DPB B,UTDIRP(D) +UDARET: +POPJ2: AOS (P) +POPJ1: AOS(P) + POPJ P, + +UDOUT: JUMPN E,UDOUT5 + CAIL D,NUTIC + JRST UDOUT1 + MOVEI A,0 ;READ + MOVE B,TT + PUSHJ P,UTLOOK ;TAP NO IN C NAME IN A,B + JUMPE B,POPJ1 ;EOF OR ADR OF FIRST WD +UDOUT6: DPB A,[220500,,UTDBC(D) ;FILE NO +UDOUT4: DPB A,[300500,,UTDBC(D) + MOVSI A,1_5 + XORM A,UTDBC(D) + JRST UDOUT2 + + +UDOUT3: TLNN B,200000 ;DIRECTORY DOUBLE LOCKED + CAIL D,NUTIC + POPJ P, + JRST UDOUT2 + +UDOUT1: CLEARB A,B + PUSHJ P,UTLOOK + JUMPE B,POPJ1 ; FILE DIR FULL + LDB J,[300500,,UTDBC(D) + MOVEM J,1(B) + JRST UDOUT4 + +UDOUT5: LDB A,[220500,,UTDBC(D) + LSH A,1 + ADD A,UDIRO(C) + SKIPE -2(A) + JRST UDARET + MOVE A,-1(A) + JRST UDOUT6 + +UTLK3: SKIPA Q,UDIRO(I) +UTLOOK: MOVE Q,UDIRO(C) + HRLI Q,-23. + PUSH P,[1 +UTLK2: CAMN A,(Q) + CAME B,1(Q) + AOJA Q,UTLK1 + MOVE B,Q +POPAJ: POP P,A + POPJ P, + +UTLK1: AOS(P) + AOBJN Q,UTLK2 + MOVEI B,0 + JRST POPAJ + + +ITAB: AOSA J,UTDBC(D) + JRST UAR + +UAF: ILDB B,UTDIRP(D) + POPJ P, + +UAR: MOVSI B,50000 + ADD B,UTDIRP(D) + SKIPGE B + SUB B,[430000,,1 + MOVEM B,UTDIRP(D) + LDB B,B + SOS J,UTDBC(D) + POPJ P, + +; T S UTAPE ROUTINES PI SERV + +LUTCP=20 ;LENGTH UTC PDL +NUNITS==4 +JDENB=40000 +20MSEN=5000 + +;TABLE AREAS + +DEFINE TAG A +IRPS B,,A +B=.-1 +TERMIN +TERMIN + +TAG ULCTM:, REPEAT NUNITS,-1 ;LAST TIME EUPOS RECOMPUTED + ;IF DG2=0 OR -1 AND UDIR .NE. 0 THEN ACT POS =EUPOS+*UDIR +TAG DRTM:, REPEAT NUNITS,SETZ-1 ; SETZ-1 => NO TIMING OP + ;N => DEAD RECKON UNTIL T=N + +TAG UDIR:, BLOCK NUNITS ;0=>STOP -1=>BACK 1=>FORW +TAG UGOAL:, REPEAT NUNITS,-1;POSIT GOAL OR -1 IF UNIT FREE +TAG EUPOS:, BLOCK NUNITS ;ESTIMATED UNIT POSITION + ;SEE ULCTM IF DGW .NE. 1 +TAG DCHNT:, REPEAT NUNITS,-1;HEAD CHANNEL LIST OF UT OR -1 IF NO CHN ACT +TAG UMEMAD:, REPEAT NUNITS, BLKO DC, ;GOAL MEMADR-1 +TAG URDWR:, BLOCK NUNITS ;0 READ -1 WRITE(LOADED OPERATION) +TAG DG2:, REPEAT NUNITS,-1;+ => ACCURATE + ;0 => EUPOS FAIRLY ACCURATE + ;-1 => DO NOT DEAD RECKON WITHOUT UTC +TAG UDIRO:, REPEAT NUNITS,-1;ORIGIN OF DIRECTORY +;OR -1 DIR NOT LOADED OR 4.9 DIR LOCKED OR 4.8+4.9 DIR DOUB LOCKED +;4.7 DIR CHANGED +;IF DIR LOCKED, IT MAY BE REFERENCED BUT NOT CHANGED + + +TAG ULDCH:, BLOCK NUNITS ;NUMBER OF LOADED CHANNEL LH,BUFFER NO OF DIR RH + ;LH SIGN SET = LOW PRIORITY POSIT + + + +TAG UFLAPF:, BLOCK NUNITS ;4.9 FLAPPING RQSTED OR IN PROGRESS + ;4.8 RQ TO ABORT FLAPPING OPERATION + ;4.7 DRIVE ACTUALLY ON THE WAY + ;RH TIME TO STOP AFTER FLAP SHOULD HAVE TAKEN PLACE + +SUNIT: 0 ;SELECTED UNIT OR 0 +SUNITL: 0 ;SAME _ 3 +SMODE: -1 ;-1 POSIT 0 DATA +WRITE: 0 ;0 READ -1 WRITE +TAPCNT: 0 +TAP1: 0 +TAP2: 0 +TAP3: 0 +UTTM1: 0 ;UNIT COULD START IN SEARCH LOOP +UTTM2: 0 ;MOST PRESSING UNIT SO FAR +UTTM3: 0 ;TIME FOR ABOVE OR -1 IF NONE +UTTM4: 0 ;TAPE TO START FLAPPING +UTTM5: 0 ;TAPE TO STOP FLAPPING +FLPUNT: 0 +DCFREE: -1 ;-1 => DC FREE +UIDLE: -1 ;-1 UTAPES COMPLETELY IDLE +UTCPDP: -LUTCP,,UTCP-1 +UTCP: BLOCK LUTCP + +UTACS: BLOCK P-A+1 +UTENB: 0 +LUTOTM: 0 ;TIME OF LAST UT OPER +UTHERR: 0 ;UT HANGUP ERR +USTSW: 0 ;UT START SWITCH +UDCC: 0 ;-1 IF UTAPE HAVE DC FOR BLK CYCLE + +TAPE: 0 +UTP1: 0 ;JRST PIPOS OR DATAI DC, OR JRST UTP3 + SOS .-1 + AOSGE TAPCNT + JRST 12,@TAPE + + +UTP3: CONO PI,1000+DCCHNA + SKIPN WRITE + CONO DC,DCCHN + JRST 12,@TAPE + +PIPOS: MOVEM A,TAP1 + MOVEM B,TAP2 + MOVEM C,TAP3 + MOVE C,SUNIT + DATAI DC,B + TDZE B,[1777#-1 + JRST PIPOS7 + MOVEM B, EUPOS(C) + HRRZM C, DG2(C) + SKIPGE UGOAL(C) + JRST PIPF1 + SUB B,UGOAL(C) + JUMPE B,PIPOS2 + ADD B,UDIR(C) + MOVMM B,UTENB + SKIPGE ULDCH(C) + JRST PIPOS3 + JUMPN B,PIPOS3 +PIPOSL: MOVE A,SUNITL ;HOLD DC + MOVE B,UDIR(C) + XCT UTST(B) + CONO DC,4010+DCCHN +PIPOS5: MOVE C,TAP3 + MOVE B,TAP2 + MOVE A,TAP1 + JRST 12,@TAPE + + + +PIPOS7: AOS BDBLKC + JRST PIPOSL + +BDBLKC: 0 + +PIPOS3: MOVE A,UDIR(C) + LSH A,2 + SUB B,A + XOR B,UDIR(C) + MOVE A,SUNITL + JUMPG B,PIPOS4 ;GOING WRONG DIR +PIPF2: TRO A,JDENB ;ENB JD SO NEXT BREAK TO UTC ON BLOCK +PIPOS6: MOVE B,TIME + MOVEM B,ULCTM(C) + ADD B,UTENB + MOVEM B,DRTM(C) + MOVE B,UDIR(C) + XCT UTST(B) + CONO PI,1000+DCCHNA + CLEARM UDCC + SETOM DCFREE + CONO DC,0 + JRST PIPOS5 + + + +PIPF1: MOVE A,SUNITL + JRST PIPF2 + +PIPOS4: CLEARM DG2(C) + MOVNS UDIR(C) + TRO A,6000 + JRST PIPOS6 + +PIPOS2: HLRZ A,ULDCH(C) + SKIPL ULDCH(C) + SKIPGE UTRAC(A) + JRST PIPOS3 ;CHANNEL LOCKED + SETOM UTLDD(A) ;CHANNEL ACTUALLY LOADED TRANSFERR IMMINENT + AOS SMODE + CLEARM UDCC + MOVE A,SUNITL + MOVE B,UMEMAD(C) + SKIPGE URDWR(C) + TROA A,400 + TLZ B,(BLKO-BLKI) + SKIPL UDIR(C) + JRST TAPFOR + TRO A,10000 + ADD B,[DATAI-BLKI 200 + MOVEM B,UTP1 + MOVNI B,200 + MOVEM B,TAPCNT + + +TAP4: CONO UTC,360300+UTCCHN(A) + SKIPGE B,URDWR(C) + CONO DC,3410+DCCHN + MOVEM B,WRITE + MOVE C,TAP3 + MOVE B,TAP2 + MOVE A,TAP1 + JRST 12,@TAPE + + +TAPFOR: HRRM B,TAPCNT + HRRI B,TAPCNT + MOVEM B,40+DCCHN*2 + MOVE B,[-200,,UTP3 + HRRM B,UTP1 + HLLM B,TAPCNT + JRST TAP4 + UTERR: CONI UTS,E + SKIPL SMODE + JRST UDATER + SKIPGE UDCC + JRST UTER4 +UTER5: SKIPN C,SUNIT + JRST 4,. + SETOM DG2(C) + MOVE B,UDIR(C) + TRZ E,7650 + JUMPE E,JDB3 + TRNN E,2 + JRST UTER1 +UTER2: MOVNS B,UDIR(C) + MOVEI A,0 + SKIPGE B + MOVEI A,1103 + MOVEM A,EUPOS(C) + MOVE A,TIME + MOVEM A,ULCTM(C) + MOVEM A,DRTM(C) +UTER1: JRST UTER3 ;GIVE MAX DELAY + +UDATER: SKIPGE DCFREE + JRST UDATE1 + CONO PI,1000+DCCHNA + SETOM DCFREE +UDATE1: SETOM SMODE + HLRZ D,ULDCH(C) + CLEARM UTLDD(C) + JRST JDB3 + +UTER4: SETOM UDCC + SETOM DCFREE + JRST UTER5 + +UTCBRK: 0 + MOVEM P,UTACS+P-A + MOVE P,[A,,UTACS + BLT P,UTACS+P-1-A + MOVE P,UTCPDP + MOVE C,SUNIT + CONSZ UTC,4000 + CONSO UTS,20 + JRST JDBRK + MOVE A,SUNITL + MOVE B,UDIR(C) + AOSN UTHERR ;HANG UP ERROR SENT FOR SLOW CLOCK ROUTINE + JRST UTERR + AOSN USTSW + JRST DCGBL1 + AOSN USTPF + JRST JDB7D + MOVEI C,0 + EXCH C,FLPUNT + JUMPN C,JDF8 + EXCH C,STPUNT + JUMPN C,JDB4B + JRST JDB3 + + +JDDT3: MOVE A,EUPOS(C) + SUB A,UGOAL(C) + MOVMS E,A + ADD A,TIME + MOVEM A,DRTM(C) + MOVE C,[-NUNITS,,1 + MOVM B,DRTM(C) + CAMGE B,TIME + JRST JDB3 ;SOMETHING ELSE DUE + AOBJN C,.-3 + MOVE C,SUNIT + MOVE B,UDIR(C) + MOVE A,SUNITL + SOJLE E,DCGBL1 ;RELOADING FOR NEXT BLOCK + JRST JDB3 + + +ILLP: MOVEM D,UGOAL(C) ;LOW PRIORITY POSIT ENTRY + MOVSI A,(SETZ) + IORM A,ULDCH(C) + +UTDC: SKIPGE UGOAL(C) + POPJ P, ;UNIT IDLE + SKIPGE DG2(C) + JRST UTDC3 +UTDC1: MOVE A,EUPOS(C) ;ESTIMATE UNIT TIME AND UPDATE EUPOS + SKIPG DG2(C) ;SKIP ON EXACT POS KNOWN + SKIPN UDIR(C) ;SKIP ON UNIT RUNNING + JRST UTDC4 + MOVE B,TIME + SUBM B,ULCTM(C) + EXCH B,ULCTM(C) + IMUL B,UDIR(C) + ADD A,B ;ACTUAL ESTIMATED POSITION + MOVEM A,EUPOS(C) ;UPDATE EUPOS +UTDC4: SUB A,UGOAL(C) + MOVM B,A + CAIG B,2 + JRST UTDC2 + ADD A,UDIR(C) + MOVMS A + CAMLE A,B + CLEARB A,B ;GOING WRONG DIR +UTDC2: ADD B,TIME + MOVEM B,DRTM(C) + POPJ P, + +UTDC3: MOVEI B,0 ;NOT KNOWN EXACT POS REQUIRES IMMEDIATE ATTENTION + JRST UTDC2 + +JDBRK: CONSZ UTC,7 + CONSO UTS,17 + JRST POPRET ;NOT UTC + CONSZ UTS,16 + JRST UTERR +JDBK1: SKIPL SMODE + JRST JDDTA ;DATA MODE + JUMPE C,JDB3 + MOVE A,UDIR(C) + ADDM A,EUPOS(C) + MOVE A,TIME + MOVEM A,ULCTM(C) + PUSHJ P,UTDC ;COMPUTE DELAY + + +JDB3: HRLOI B,177777 + MOVEM B,UTTM2 + SETOM UTTM3 ;UNIT MOST URGENT + CLEARM UTTM1 ;UNIT COULD START + SETOM UTTM4 ;TAPE TO START FLAPPING + SETOM UTTM5 ;TAPE TO STOP FLAPPED + MOVE C,[-NUNITS,,1 +JDBRK7: SKIPGE B,UFLAPF(C) + JRST JDF1 ;FLAPPING OP +JDF2: SKIPL ULDCH(C) ;SKIP ON LOW PRIOR POSIT + SKIPGE UGOAL(C) + JRST JDB6 ;UNIT FREE + SKIPGE DG2(C) + SKIPN UDIR(C) + JRST JDS1 + MOVEM C,UTTM1 ;UNIT IS RUNNING BLIND (OR NOT RUNNING) + JRST JDBRK6 +JDS1: SKIPE UDIR(C) + JRST JDBRK4 + SKIPN UTTM1 + HRRZM C,UTTM1 + JRST JDBRK6 +JDBRK4: SKIPN UDIR(C) + JRST ULLP ;TAPE MAY NOT BE RUNNING IF IDLE + MOVE B,DRTM(C) + SUB B,TIME + MOVE E,B + SUB E,UTTM2 + JUMPL B,JDCV1 ;ALREADY OVERDUE + MOVM D,E + CAIG B,20. ;CONFLICT MORE THAN 20 BLKS AWAY + CAIL D,20. ;THEY ARE SEPARETED BY 20 BLKS + JRST JDCV1 + HRRZS C ;RELIEVE CONFLICT BY STOPPING UNIT DUE LATEST + CAMG B,UTTM2 + HRRZ C,UTTM3 +JDF5: CAME C,SUNIT + SKIPN SUNIT + JRST JDB4B ;STOP UNIT + MOVEM C,STPUNT + JRST JDB7D ;DESLECT FIRST +JDCV1: JUMPGE E,ULLP + MOVEM B,UTTM2 + HRRZM C,UTTM3 +ULLP: SKIPGE ULDCH(C) + CAIL B,10 + JRST JDBRK6 + PUSHJ P,ULLP1 ;TERM LOW PRIORITY DIRECTORY POS (COMMIT TO ACTUAL WRITE) + + + +JDBRK6: AOBJN C,JDBRK7 + MOVE C,UTTM3 ;MOST PRESSING RUNNING UNIT + MOVE B,UTTM2 + CAIGE B,30. + JRST JDB7 ;STAY WITH PRESSING UNIT + SKIPE UTTM1 + JRST JDB5 ;START UNIT IF POSSIBLE + SKIPL D,UTTM4 + JRST JDF3 +JDF6A: SKIPL D,UTTM5 + JRST JDF4 + CAMG B,[10000000. ;SKIP ON IDLE + JRST JDB7 + SKIPE SUNIT + JRST JDB7D + SETOM UIDLE + CONO UTC,0 + JRST POPRET + + + +JDF1: MOVE E,UDIRO(C) + AOJE E,JDF1A + TLNE E,100000 + JRST JDF2 +JDF1A: SKIPGE UGOAL(C) + SKIPGE ULDCH(C) + JRST JDF2 ;FILE DIR WRITE IN PROG + SKIPE UDIR(C) + SKIPG DG2(C) + JRST .+2 + JRST JDF3A ;JUST READ IN TAPE POS + TLNN B,100000 + HRRZM C,UTTM4 ;UNIT TO START FLAPPING + HRRZ D,B + TLNN B,100000 + JRST .+3 + CAMG D,TIME + HRRZM C,UTTM5 ;UNIT TO STOP FLAPPING + JRST JDBRK6 + +JDF3: MOVE C,D + HRRZ A,ULDCH(C) + AOSE UDIRO(C) + PUSHJ P,IBRTN + SETOM UDIRO(C) + SKIPGE DG2(C) + JRST JDF6 +JDF3A: SETOM DG2(C) + MOVE E,EUPOS(C) + IMULI E,50. + IDIVI E,33. + ADDI E,30. + ADD E,TIME + HRRM E,UFLAPF(C) + MOVSI E,100000 + IORM E,UFLAPF(C) + SKIPE SUNIT + CAMN C,SUNIT + JRST JDF8 + MOVEM C,FLPUNT + JRST JDB7D + +JDF8: LSH C,3 + CONO UTC,235000+UTCCHN(C) + JRST JDF9 + +JDF6: SKIPL DCFREE + JRST JDF6A + SKIPE SUNIT + CAMN C,SUNIT + JRST .+2 + JRST JDB7D + SETOM UDIR(C) + MOVEM C,SUNIT + DPB C,[30300,,SUNITL + JRST JDF6B + + +JDF4: MOVE C,D + CLEARM UFLAPF(C) + JRST JDF5 + +JDB5: HRRZ C,UTTM1 +JDB7: EXCH C,SUNIT ;SELECT UNIT IN C + JUMPE C,JDB7A ;NO UNIT SELECTED + CAMN C,SUNIT + JRST JDB7A + PUSHJ P,URLS + JUMPGE E,JDB7C ;OK TO LEAVE IT ALONG, CLEAR SELECTION CYCLE +JDB4: SKIPN UDIR(C) + JRST JDB7D +JDB4B: HRRZM C,SUNIT ;ENTER UNIT STOPPING CYCLE + DPB C,[30300,,SUNITL +JDB4A: MOVE A,SUNITL + SKIPG UDIR(C) + TRO A,10000 + CONO UTC,205000+UTCCHN(A) ;CLEAR GO BIT + CLEARM UDIR(C) + HRLOI B,377777 + MOVEM B,DRTM(C) + SETOM DG2(C) +JDF9: SETOM USTPF ;UNIT STOPPING CYCLE + JRST POPRET + +USTPF: 0 +STPUNT: 0 ;UNIT TO STOP DUE TO CONFLICT + +JDB7C: +JDB7D: CLEARM SUNIT ;DESELECT CYCLE + CONI UTC,A + TRZ A,200070 + TRO A,5000 + CONO UTC,(A) + JRST POPRET + + +JDB7A: MOVE C,SUNIT + MOVE A,EUPOS(C) + SUB A,UDIR(C) + SUB A,UDIR(C) + MOVEI B,1 + CAML A,UGOAL(C) + MOVNI B,1 + DPB C,[30300,,SUNITL + MOVE D,UDIR(C) + MOVEM B,UDIR(C) + CAME D,B + JRST JDS4 ;CHANGING DIR (OR STARTING), ALLOW RELAY DLYS +JDBK3A: MOVE E,DRTM(C) + SUB E,TIME +JDDT8: MOVE A,SUNITL + SKIPL D,DG2(C) + CAIG E,3 + JRST JDB3B + CAIGE E,20 + JUMPE D,JDB3B ;GETTING CLOSE READ BLOCK NO +JDB3A: TRO A,JDENB +JDB8A: XCT UTST(B) + JRST POPRET + + + + +JDB3B: +DCGBL1: AOSE DCFREE + JRST JDB3A +DCGBL: XCT UTST(B) + CONO DC,4010+DCCHN + MOVE C,[JSR TAPE + MOVEM C,40+2*DCCHN + MOVEM C,40+2*DCCHN+1 + MOVE C,[JRST PIPOS + MOVEM C,UTP1 + SETOM UDCC + CONO PI,2000+DCCHNA + +POPRET: MOVE A,TIME + MOVEM A,LUTOTM + MOVS P,[A,,UTACS + BLT P,P + JRST 12,@UTCBRK + + + CONO UTC,330200+UTCCHN(A) +UTST: CONO UTC,5000+UTCCHN(A) + CONO UTC,320200+UTCCHN(A) + + +JDS4: JUMPN D,UTER3 + MOVE D,TIME + MOVEM D,ULCTM(C) +JDF6B: SETOM USTSW ;STARTING OUT +UTER3: MOVE A,SUNITL + TRO A,6000 + JRST JDB8A + + + +URLS: SKIPE E,UDIR(C) ;SKIPN ON UNIT NOT RUNNING + SKIPG E,DG2(C) ;RELEASE UNIT IN C E HAS PREV STATE OF DG2 + POPJ P, + JRST UTDC + ;"SYSTEM" JOBS + +SCOR: SKIPL SUPCOR + PUSHJ P,UFLS + PUSHJ P,SCOREX + CLEARM @SYSL + HRLZ A,SYSL + HRR A,SYSL + AOS A + MOVEI B,2000 + ADD B,SYSL + BLT A,(B) + MOVEM B,SYSL +NMCU: CLEARM SUPCOR + JRST SCOR + +SCOREX: MOVE B,SYSL + MOVEI U,0 + LSH B,-10. + AOS B + PUSHJ P,ACORE + JRST NMCU + POPJ P, + + +SUBTTL RANDOM STORAGE + +RADIX 10. +REPEAT SIOML,[CONC TRAN,\.RPCNT+1,: BLOCK SIOMT +] RADIX 8 + +U0: 0 ;TEMP STORAGE FOR FIRST LOW PRIORITY LOSER +PSAVE: 0 +USER: -1 ;USER # OF CURRENT LOSER +CUSER: 0 ;USER OF CORE ALLOCATOR +DISUSR: -1 ;340 USER +USRHI: 0 ;HIGHEST LOC USED OF USER VARIABLE STORAGE +SYSL: SYSB*2000 +SUPCOR: 0 +SEAT1: 0 +TIME: 0 +CLKFL1: 0 +CUQUAN: 0 ;CURRENT USER QUANTUM +CPDLP: -CPDLL,,LCPDL-1 ;CLOCK PDL POINTER +LCPDL: BLOCK CPDLL +ECPDL==.-5 +SCRFLG: 0 ;CURRENT USER MUST BE INTERRUPTED, SAVE VARIABLES, MUNG AND RESTORE +SCRFG1: 0 ;LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE LOSE +UTTYST: -1 ;-1 OR TTY THAT WANTS TO BE STARTED +CRACF: -1 ;CORE ALLOCATOR FLAG (ONLY 1 AT A TIME) +SIOMTU: SIOMT ;AMOUNT USED OF I-O MAPPING TABLE +SLCLK: 0 ;SLOW CLOCK +SRCS: 0 ;RECYCLE FLAG FOR SEARCH + +CONSTANTS +VARIABLES +SYSB==1+._-10.+IFN .&1777,1 +MXC==MX1KB-SYSB + + +USRSTG==. +IOCHNM: REPEAT 20,0 ;IO CHANNEL ASSIGN + ;RH INDEX INTO IOTTB AND CLSTB + ;LH DEV CHNL AND/OR OTHER +SIOCHN: BLOCK 21 +SIOCP: SIOCHN +UPC: 0 ;USER PC STORAGE +AC0S: BLOCK 15 ;SWAP OUT AC S +AC15S: 0 +AC16S: 0 +AC17S: 0 +UUO: +SUEXIT: JRST 2,@UUOH ;USER UUO EXIT INS +SURSTR: 0 ;LOC FOR NEW USER PC STORAGE AFTER UFLS +SUUOH: 0 ;C(@41) +SAC17P: MOVEM U,0 ;AC17 IN SHAD MEM +AC14P: 0 ;PNTS TO AC 14 IN SHAD MEM +AC15P: 0 ;" "" 15 +AC16P: 0 ; " " "" 16 +40P: 0 +41P: 0 +UPR: 0 ;USER PROTECTION AND RELOCATION REGISTERS +APRC: APRCHN ;CONO TO APR +UQUAN: 0 ;USER QUANTUM +USTP: 0 ;0 RUNNABLE +BCSTOP=400000 ;BIT IN USTP FOR CORE MOVAGE +BUCSTP=200000 ;CORE STOPPING LOSER TO GIVE MORE CORE RQSTED BY ANOTHER LOSER +BUSRC=100000 ;USER CONTROL INTERUPT TO SUPERIOR PROCEDURE +BEXC=40000 ;SET BY UBO AND FRIENDS INHIBITS RELOCATION BY CORE ALLOCATOR + ;MUST BE SET WITH CLKOFF MUST NOT BE SET IF CSTOP IS SET +PIRQC: 0 ; PI REQ AWAITING SERVICE +SUPPRO: 0 ;SUPERIOR PROCEDURE RH,INT BIT LH +PICLR: 1 ;PI IN PROGRESS FLAG +MSKST: 0 ;PI MASK REGISTER FOR USER +FLSINS: 0 ;USER I-O WAIT INS +; STATES => 0 => RUNABLE +;= JRST =EXEC FLUSH +; OTHERWISE IN IO WAIT IF NO SKIP SAFE TO RESTART AT "UUO" +MEMTOP: 0 ;TOP OF USER MEM (UNREL) (-METOV) +RMEMT: 0 ;AFIRST USER LOC NOT AVAILABLE 2000 IF LOSER HAS 1 BLOCK +SV40: 0 ;C(40) WHEN USER SWAPPED +UNAME: 0 ;USER NAME +JNAME: 0 ;JOB NAME +TTYTBL: 0 ;TTY ASSIGNED THIS USER + ;4.9 DOES NOT HAVE TTY NOW + ;4.8 NEVER HAD IT + ;4.7 TAKEN AWAY + ;3.4 3.1 SAVED TTYSTS IF TAKEN AWAY OR GIVEN AWAY + ;RH USER NO GAVE TTY AWAY TO OR TTY NO IF HAS IT OR + ;TTY TAKEN FROM ME IF 400000 +UILOOK: 0 ;POINTER TO USER CORE FROM SUPERIOR PROCEDURE (INPUT) +UOLOOK: 0 ;" (OUTPUT) +VALUE: 0 ;PROCEDURE "VALUE" RETURN +USRPDL: -LUPDL,,UPDL-1 ;USER PDL +UPDL: BLOCK LUPDL-3 +EPDL: 0 +EPDL1: 0 +EPDL2: 0 + +LUBLK=.-USRSTG +L=LUBLK + + + +END 69 +